diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..89a4c0ab --- /dev/null +++ b/.gitmodules @@ -0,0 +1,9 @@ +[submodule "cmake/entt"] + path = cmake/entt + url = https://github.com/skypjack/entt +[submodule "cmake/imgui"] + path = cmake/imgui + url = https://github.com/dante1130/imgui +[submodule "cmake/catch2"] + path = cmake/catch2 + url = https://github.com/catchorg/Catch2 diff --git a/CMakeLists.txt b/CMakeLists.txt index b0fe7868..17067083 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,8 @@ # Minimum CMake version -cmake_minimum_required (VERSION 3.17) +cmake_minimum_required(VERSION 3.17) # Project declaration. -project (ReflexEngine LANGUAGES CXX) +project(ReflexEngine LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) @@ -12,62 +12,108 @@ set(CMAKE_DISABLE_SOURCE_CHANGES ON) # CMake path for libraries. set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} "${CMAKE_SOURCE_DIR}/cmake/") -add_executable (ReflexEngine) +enable_testing() + +add_executable(ReflexEngine src/main.cpp) +add_executable(ReflexEngineTest) add_subdirectory(cmake) add_subdirectory(src) +add_subdirectory(test) -if (MSVC) - set(MSVC_DISABLED_WARNINGS_LIST - "C4100" # 'identifier' : unreferenced formal parameter - ) -endif() - +target_compile_options(ReflexEngineSrc PRIVATE -target_compile_options(${PROJECT_NAME} PRIVATE # Clang $<$,$>: - -Wall -Wextra -Wpedantic -fcolor-diagnostics - # Turn off useless warnings - -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-padded - -Wno-deprecated-declarations -Wno-exit-time-destructors - -Wno-switch-enum -Wno-weak-vtables -Wno-global-constructors> + -Wall -Wextra -Wpedantic -fcolor-diagnostics + + # Turn off useless warnings + -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-padded + -Wno-deprecated-declarations -Wno-exit-time-destructors + -Wno-switch-enum -Wno-weak-vtables -Wno-global-constructors> + # GCC - $<$:-Wall -Wextra -Wpedantic -fdiagnostics-color=always> + $<$:-Wall -Wextra -Wpedantic -fdiagnostics-color=always -mbig-obj> + # Visual Studio - $<$:/W4> + $<$:/W4 /bigobj> + + $<$:-O3> + $<$:-O0> ) add_custom_command(TARGET ReflexEngine POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_directory - ${PROJECT_SOURCE_DIR}/dlls - ${CMAKE_CURRENT_BINARY_DIR}) + COMMAND ${CMAKE_COMMAND} -E copy_directory + ${PROJECT_SOURCE_DIR}/dlls + ${CMAKE_CURRENT_BINARY_DIR}) add_custom_command(TARGET ReflexEngine POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_directory - ${PROJECT_SOURCE_DIR}/resources - ${CMAKE_CURRENT_BINARY_DIR}) - -# Include dependencies. -include_directories (ReflexEngine SYSTEM ${CMAKE_PREFIX_PATH}/glad/include) -include_directories (ReflexEngine SYSTEM ${CMAKE_PREFIX_PATH}/glfw/include) -include_directories (ReflexEngine SYSTEM ${CMAKE_PREFIX_PATH}/glm) -include_directories (ReflexEngine SYSTEM ${CMAKE_PREFIX_PATH}/stb_image) -include_directories (ReflexEngine SYSTEM ${CMAKE_PREFIX_PATH}/assimp/include) -include_directories (ReflexEngine SYSTEM ${CMAKE_PREFIX_PATH}/imgui) -include_directories (ReflexEngine SYSTEM ${CMAKE_PREFIX_PATH}/reactphysics3d) -include_directories (ReflexEngine SYSTEM ${CMAKE_PREFIX_PATH}/raknet/include) -include_directories (ReflexEngine SYSTEM ${CMAKE_PREFIX_PATH}/irrklang) - -# Link libraries. -target_link_libraries (ReflexEngine PRIVATE glfw) -target_link_libraries (ReflexEngine PRIVATE glm) -target_link_libraries (ReflexEngine PRIVATE glad) -target_link_libraries (ReflexEngine PRIVATE ${CMAKE_PREFIX_PATH}/assimp/lib/assimp-vc143-mt.lib) -target_link_libraries (ReflexEngine PRIVATE imgui) -target_link_libraries (ReflexEngine PRIVATE lua) -target_link_libraries (ReflexEngine PRIVATE reactphysics3d) -target_link_libraries (ReflexEngine PRIVATE ${CMAKE_PREFIX_PATH}/raknet/Lib/DLL_vc9_DLL_Release_x64.lib) -target_link_libraries (ReflexEngine PRIVATE ${CMAKE_PREFIX_PATH}/raknet/Lib/LibStatic_vc9_LibStatic_Release_x64.lib) -target_link_libraries (ReflexEngine PRIVATE ${CMAKE_PREFIX_PATH}/irrklang/lib/irrKlang.lib) + COMMAND ${CMAKE_COMMAND} -E copy_directory + ${PROJECT_SOURCE_DIR}/resources + ${CMAKE_CURRENT_BINARY_DIR}) + +target_include_directories(ReflexEngine PRIVATE ${CMAKE_PREFIX_PATH}) +target_include_directories(ReflexEngine PRIVATE ${CMAKE_PREFIX_PATH}/glad/include) +target_include_directories(ReflexEngine PRIVATE ${CMAKE_PREFIX_PATH}/glfw/include) +target_include_directories(ReflexEngine PRIVATE ${CMAKE_PREFIX_PATH}/glm) +target_include_directories(ReflexEngine PRIVATE ${CMAKE_PREFIX_PATH}/stb_image) +target_include_directories(ReflexEngine PRIVATE ${CMAKE_PREFIX_PATH}/assimp/include) +target_include_directories(ReflexEngine PRIVATE ${CMAKE_PREFIX_PATH}/imgui) +target_include_directories(ReflexEngine PRIVATE ${CMAKE_PREFIX_PATH}/reactphysics3d/include) +target_include_directories(ReflexEngine PRIVATE ${CMAKE_PREFIX_PATH}/irrklang) +target_include_directories(ReflexEngine PRIVATE ${CMAKE_PREFIX_PATH}/slikenet/Source) +target_include_directories(ReflexEngine PRIVATE ${CMAKE_PREFIX_PATH}/entt/single_include) +target_include_directories(ReflexEngine PRIVATE ${CMAKE_PREFIX_PATH}/catch2/src) +target_include_directories(ReflexEngine PRIVATE ${CMAKE_PREFIX_PATH}/lua/src) + +target_include_directories(ReflexEngineSrc PRIVATE ${CMAKE_PREFIX_PATH}) +target_include_directories(ReflexEngineSrc PRIVATE ${CMAKE_PREFIX_PATH}/glad/include) +target_include_directories(ReflexEngineSrc PRIVATE ${CMAKE_PREFIX_PATH}/glfw/include) +target_include_directories(ReflexEngineSrc PRIVATE ${CMAKE_PREFIX_PATH}/glm) +target_include_directories(ReflexEngineSrc PRIVATE ${CMAKE_PREFIX_PATH}/stb_image) +target_include_directories(ReflexEngineSrc PRIVATE ${CMAKE_PREFIX_PATH}/assimp/include) +target_include_directories(ReflexEngineSrc PRIVATE ${CMAKE_PREFIX_PATH}/imgui) +target_include_directories(ReflexEngineSrc PRIVATE ${CMAKE_PREFIX_PATH}/reactphysics3d/include) +target_include_directories(ReflexEngineSrc PRIVATE ${CMAKE_PREFIX_PATH}/irrklang) +target_include_directories(ReflexEngineSrc PRIVATE ${CMAKE_PREFIX_PATH}/slikenet/Source) +target_include_directories(ReflexEngineSrc PRIVATE ${CMAKE_PREFIX_PATH}/entt/single_include) +target_include_directories(ReflexEngineSrc PRIVATE ${CMAKE_PREFIX_PATH}/catch2/src) +target_include_directories(ReflexEngineSrc PRIVATE ${CMAKE_PREFIX_PATH}/lua/src) + +target_include_directories(ReflexEngineTest PRIVATE ${CMAKE_PREFIX_PATH}) +target_include_directories(ReflexEngineTest PRIVATE ${CMAKE_PREFIX_PATH}/glad/include) +target_include_directories(ReflexEngineTest PRIVATE ${CMAKE_PREFIX_PATH}/glfw/include) +target_include_directories(ReflexEngineTest PRIVATE ${CMAKE_PREFIX_PATH}/glm) +target_include_directories(ReflexEngineTest PRIVATE ${CMAKE_PREFIX_PATH}/stb_image) +target_include_directories(ReflexEngineTest PRIVATE ${CMAKE_PREFIX_PATH}/assimp/include) +target_include_directories(ReflexEngineTest PRIVATE ${CMAKE_PREFIX_PATH}/imgui) +target_include_directories(ReflexEngineTest PRIVATE ${CMAKE_PREFIX_PATH}/reactphysics3d/include) +target_include_directories(ReflexEngineTest PRIVATE ${CMAKE_PREFIX_PATH}/irrklang) +target_include_directories(ReflexEngineTest PRIVATE ${CMAKE_PREFIX_PATH}/slikenet/Source) +target_include_directories(ReflexEngineTest PRIVATE ${CMAKE_PREFIX_PATH}/entt/single_include) +target_include_directories(ReflexEngineTest PRIVATE ${CMAKE_PREFIX_PATH}/catch2/src) +target_include_directories(ReflexEngineTest PRIVATE ${CMAKE_PREFIX_PATH}/lua/src) +target_include_directories(ReflexEngineTest PRIVATE ${PROJECT_SOURCE_DIR}/src) + +target_link_libraries(ReflexEngineSrc PRIVATE glfw) +target_link_libraries(ReflexEngineSrc PRIVATE glm) +target_link_libraries(ReflexEngineSrc PRIVATE glad) +target_link_libraries(ReflexEngineSrc PRIVATE imgui) +target_link_libraries(ReflexEngineSrc PRIVATE lua) +target_link_libraries(ReflexEngineSrc PRIVATE reactphysics3d) +target_link_libraries(ReflexEngineSrc PRIVATE EnTT) +target_link_libraries(ReflexEngineSrc PRIVATE ${PROJECT_SOURCE_DIR}/lib/assimp-vc143-mt.lib) +target_link_libraries(ReflexEngineSrc PRIVATE ${PROJECT_SOURCE_DIR}/lib/RakNet_DLL_Release_x64.lib) +target_link_libraries(ReflexEngineSrc PRIVATE ${CMAKE_PREFIX_PATH}/irrklang/lib/irrKlang.lib) + +target_link_libraries(ReflexEngine PRIVATE ReflexEngineSrc) + +target_link_libraries(ReflexEngineTest PRIVATE Catch2::Catch2WithMain) +target_link_libraries(ReflexEngineTest PRIVATE ReflexEngineSrc) + +list(APPEND CMAKE_MODULE_PATH ${CMAKE_PREFIX_PATH}/catch2/extras) + +include(CTest) +include(Catch) +catch_discover_tests(ReflexEngineTest) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..4ad07c62 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,55 @@ +# Contribution + +## Contribution guidelines + +* Follow these [`Git` best practices](https://programmerfriend.com/git-best-practices/). +* Follow this [`Git` branching model](https://nvie.com/posts/a-successful-git-branching-model/). +* Follow the [`C++` Core Guidelines](http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines). +* Use `CppCheck` and `clang-tidy` to analyze your code. +* Use `clang-format` to format your code. + +## Setting up `clang-format` + +### Visual Studio + +1. Open `Visual Studio`. +2. On the navigation bar, click `Extensions -> Manage Extensions...`. +3. Install the extension `Clang Power Tools`. +4. Restart `Visual Studio` after installation. +5. Click on `Tools` from the `Clang Power Tools` menu. + ![clang-format settings](https://clangpowertools.com/assets/blog/get-started-with-clang-power-tools/SettingsToolbar.png) +6. If you do not have `LLVM` installed, go to the `LLVM` tab and install any version. +7. After installation, navigate to `Format` tab and turn on `Format on save`. +8. Your code will now be formatted on save. + +## Steps for GitFlow workflow + +* To merge changes to branch: + * Create a separate branch, give it a relevant name. + * Push your changes to the branch. + * Ensure that it can successfully build and run. + * Major code additions must include some unit tests unless determined otherwise by the team + * Create a pull request to the `develop` branch, **not `master`**. + * Include information regarding the changes. + * Request a review from a reviewer. +* To review a pull request: + * Checkout the pull request branch locally. + * Ensure that it can successfully build and run. + * Ensure that the unit tests all successfully complete. + * Go through each file and mark it viewed after finish reviewing. + * Comment any issues you find. + * Finish review and submit as "`Approved`" if there are no issues. + * Merge the pull request and delete the branch. +* To create an issue: + * Create an issue giving detailed information about the issue. + * Give an example of a minimal reproduction of the issue. + * Mention any fixes or workarounds you have used. + * Refer to a pull request if possible, whether it is a fix or the commit with the issue. + * Close the issue once it is resolved. + +## Steps for unit testing + +* Create your `.cpp` in the `test` directory. +* Add your `.cpp` source file to `test/CMakeLists.txt`. +* Implement your unit test. (You can use `ShaderTest.cpp` as an example, or look at the reference guide for `Catch2`). +* Build and run on target `ReflexEngineTest`. diff --git a/cmake/imgui/LICENSE.txt b/LICENSE.md similarity index 94% rename from cmake/imgui/LICENSE.txt rename to LICENSE.md index d8763995..1b8dfe48 100644 --- a/cmake/imgui/LICENSE.txt +++ b/LICENSE.md @@ -1,6 +1,6 @@ -The MIT License (MIT) +MIT License -Copyright (c) 2014-2020 Omar Cornut +Copyright (c) 2022 Reflex Bullet Entertainment Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index d352e497..6e5f0cc5 100644 --- a/README.md +++ b/README.md @@ -1 +1,66 @@ -# ReflexEngine \ No newline at end of file +# ReflexEngine + +![reflex-logo](https://i.imgur.com/TXfAfwS.png) + +## Table of Contents + +* [Cloning the repository](#cloning) +* [Building](#building) + * [Visual Studio](#vs) + * [VSCode](#vscode) +* [Contributing](#contributing) +* [License](#license) + +## Cloning the repository + +```bash +git clone https://github.com/dante1130/ReflexEngine +git submodule update --init --recursive +``` + +## Building + +### Visual Studio + +#### Install build tools + +* [Visual Studio](https://visualstudio.microsoft.com/downloads/) +* Install the component "`C++ CMake tools for Windows`". + +#### Building ReflexEngine in Visual Studio + +1. Open `Visual Studio` as Administrator. +2. Choose the option “`Continue without code`”. +3. Navigate to the top left and select `File -> Open -> CMake`. +4. Navigate to the root directory of `ReflexEngine`. +5. Open `CMakeLists.txt`. +6. Navigate to `Project` on the navigation bar and click “`Generate cache for ReflexEngine`”. +7. Once the output window says “`CMake generation finished`”, ensure you are targeting `ReflexEngine.exe` and you are on the `Release` build as shown in the image below. +8. Press on `ReflexEngine.exe` play button to run the project. If it is your first time running the engine, you will need to build it, but it will do it automatically once you press `ReflexEngine.exe`. It can be done manually by going build-> then on rebuild ReflexEngine. + +### VSCode + +#### Install extensions + +* [VSCode](https://code.visualstudio.com/download) +* Install the extension [CMake tools](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools). + +#### Building ReflexEngine in VSCode + +* Open `VSCode`. +* Navigate to the top left and select `File -> Open folder...`. +* Select to open to the root directory of `ReflexEngine`. +* Open command palette. (Ctrl+Shift+P) + * `CMake: Select a kit` -> Your compiler of choice (`Clang` or `MSVC`) + * `CMake: Select variant` -> `Release` or `RelWithDebInfo` + * `CMake: Set build target` -> `ReflexEngine` + * `CMake: Build` + * `CMake: Run without debugging` + +## Contributing + +Please refer to the [contributing guide](CONTRIBUTING.md). + +## License + +This project is licensed under the [MIT license](LICENSE.md). diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index b9c7eb6b..3453c9ae 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -1,12 +1,12 @@ -cmake_minimum_required (VERSION 3.17) +cmake_minimum_required(VERSION 3.17) -function (target_ignore_warnings target scope) - get_target_property(lib_include_dirs ${target} INTERFACE_INCLUDE_DIRECTORIES) - target_include_directories(${target} SYSTEM ${scope} ${lib_include_dirs}) +function(target_ignore_warnings target scope) + get_target_property(lib_include_dirs ${target} INTERFACE_INCLUDE_DIRECTORIES) + target_include_directories(${target} SYSTEM ${scope} ${lib_include_dirs}) endfunction() # Set to not build docs, tests and examples -option(ASSIMP_BUILD_TESTS OFF) +option(ASSIMP_BUILD_TESTS OFF) option(ASSIMP_BUILD_ASSIMP_TOOLS OFF) option(GLFW_BUILD_DOCS OFF) option(GLFW_BUILD_TESTS OFF) @@ -19,10 +19,13 @@ option(RP3D_DOUBLE_PRECISION_ENABLED OFF) # Disable compiler warnings. add_compile_options( + # Clang $<$,$>:-Wno-everything> + # GCC $<$:-w> + # Visual Studio $<$:/W0> ) @@ -34,7 +37,8 @@ add_subdirectory(glfw) add_subdirectory(imgui) add_subdirectory(lua) add_subdirectory(reactphysics3d) -add_subdirectory(raknet) +add_subdirectory(entt) +add_subdirectory(catch2) target_ignore_warnings(glm INTERFACE) target_ignore_warnings(glad INTERFACE) @@ -42,3 +46,4 @@ target_ignore_warnings(glfw INTERFACE) target_ignore_warnings(imgui INTERFACE) target_ignore_warnings(lua INTERFACE) target_ignore_warnings(reactphysics3d INTERFACE) +target_ignore_warnings(EnTT INTERFACE) diff --git a/cmake/catch2 b/cmake/catch2 new file mode 160000 index 00000000..47d56f28 --- /dev/null +++ b/cmake/catch2 @@ -0,0 +1 @@ +Subproject commit 47d56f28a9801911c048d011b375e5631dbb658f diff --git a/cmake/entt b/cmake/entt new file mode 160000 index 00000000..2f513416 --- /dev/null +++ b/cmake/entt @@ -0,0 +1 @@ +Subproject commit 2f51341633aba7a37af9208af80c9a596a205a4e diff --git a/cmake/imgui b/cmake/imgui new file mode 160000 index 00000000..39a63e5c --- /dev/null +++ b/cmake/imgui @@ -0,0 +1 @@ +Subproject commit 39a63e5cfc89e09716be99d51f37faccf63802ac diff --git a/cmake/imgui/.editorconfig b/cmake/imgui/.editorconfig deleted file mode 100644 index 3dd05d3d..00000000 --- a/cmake/imgui/.editorconfig +++ /dev/null @@ -1,20 +0,0 @@ -# editorconfig.org - -# top-most EditorConfig file -root = true - -# Default settings: -# Use 4 spaces as indentation -[*] -indent_style = space -indent_size = 4 -insert_final_newline = true -trim_trailing_whitespace = true - -[imstb_*] -indent_size = 3 -trim_trailing_whitespace = false - -[Makefile] -indent_style = tab -indent_size = 4 diff --git a/cmake/imgui/.gitattributes b/cmake/imgui/.gitattributes deleted file mode 100644 index d48470ee..00000000 --- a/cmake/imgui/.gitattributes +++ /dev/null @@ -1,30 +0,0 @@ -* text=auto - -*.c text -*.cpp text -*.h text -*.m text -*.mm text -*.md text -*.txt text -*.html text -*.bat text -*.frag text -*.vert text -*.mkb text -*.icf text - -*.sln text eol=crlf -*.vcxproj text eol=crlf -*.vcxproj.filters text eol=crlf -*.natvis text eol=crlf - -Makefile text eol=lf -*.sh text eol=lf -*.pbxproj text eol=lf -*.storyboard text eol=lf -*.plist text eol=lf - -*.png binary -*.ttf binary -*.lib binary diff --git a/cmake/imgui/.github/issue_template.md b/cmake/imgui/.github/issue_template.md deleted file mode 100644 index 3812ad0b..00000000 --- a/cmake/imgui/.github/issue_template.md +++ /dev/null @@ -1,46 +0,0 @@ -(Click "Preview" above ^ to turn URL into clickable links) - -1. PLEASE CAREFULLY READ: [FAQ](https://github.com/ocornut/imgui/blob/master/docs/FAQ.md) - -2. PLEASE CAREFULLY READ: [Issue Submitting Guidelines](https://github.com/ocornut/imgui/issues/2261) - -3. FOR FIRST-TIME USERS ISSUES COMPILING/LINKING/RUNNING/LOADING FONTS, please use the [Discord server](http://discord.dearimgui.org). - -4. PLEASE MAKE SURE that you have: read the FAQ; explored the contents of `ShowDemoWindow()` including the Examples menu; searched among Issues; used your IDE to search for keywords in all sources and text files; and read the link provided in (1) (2). - -5. Be mindful that messages are being sent to the e-mail box of "Watching" users. Try to proof-read your messages before sending them. Edits are not seen by those users. - -6. Delete points 1-6 and PLEASE FILL THE TEMPLATE BELOW before submitting your issue. - -Thank you! - ----- - -_(you may also go to Demo>About Window, and click "Config/Build Information" to obtain a bunch of detailed information that you can paste here)_ - -**Version/Branch of Dear ImGui:** - -Version: XXX -Branch: XXX _(master/viewport/docking/etc.)_ - -**Back-end/Renderer/Compiler/OS** - -Back-ends: imgui_impl_XXX.cpp + imgui_impl_XXX.cpp _(or specify if using a custom engine/back-end)_ -Compiler: XXX _(if the question is related to building or platform specific features)_ -Operating System: XXX - -**My Issue/Question:** - -XXX _(please provide as much context as possible)_ - -**Screenshots/Video** - -XXX _(you can drag files here)_ - -**Standalone, minimal, complete and verifiable example:** _(see https://github.com/ocornut/imgui/issues/2261)_ -``` -// Here's some code anyone can copy and paste to reproduce your issue -ImGui::Begin("Example Bug"); -MoreCodeToExplainMyIssue(); -ImGui::End(); -``` diff --git a/cmake/imgui/.github/pull_request_template.md b/cmake/imgui/.github/pull_request_template.md deleted file mode 100644 index 533027c9..00000000 --- a/cmake/imgui/.github/pull_request_template.md +++ /dev/null @@ -1,6 +0,0 @@ -(Click "Preview" to turn any http URL into a clickable link) - -PLEASE CAREFULLY READ: -https://github.com/ocornut/imgui/issues/2261 - -(Clear this template before submitting your PR) diff --git a/cmake/imgui/.github/workflows/build.yml b/cmake/imgui/.github/workflows/build.yml deleted file mode 100644 index b089bfb4..00000000 --- a/cmake/imgui/.github/workflows/build.yml +++ /dev/null @@ -1,363 +0,0 @@ -name: build - -on: - push: {} - pull_request: {} - schedule: - - cron: '0 9 * * *' - -jobs: - Windows: - runs-on: windows-2019 - env: - VS_PATH: C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\ - MSBUILD_PATH: C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\ - # Until gh-actions allow us to use env variables inside other env variables (because we need %GITHUB_WORKSPACE%) we have to use relative path to imgui/examples/example_name directory. - SDL2_DIR: ..\..\SDL2-devel-2.0.10-VC\SDL2-2.0.10\ - VULKAN_SDK: ..\..\vulkan-sdk-1.1.121.2\ - steps: - - uses: actions/checkout@v1 - with: - fetch-depth: 1 - - - name: Install Dependencies - shell: powershell - run: | - Invoke-WebRequest -Uri "https://www.libsdl.org/release/SDL2-devel-2.0.10-VC.zip" -OutFile "SDL2-devel-2.0.10-VC.zip" - Expand-Archive -Path SDL2-devel-2.0.10-VC.zip - Invoke-WebRequest -Uri "https://github.com/ocornut/imgui/files/3789205/vulkan-sdk-1.1.121.2.zip" -OutFile vulkan-sdk-1.1.121.2.zip - Expand-Archive -Path vulkan-sdk-1.1.121.2.zip - - - name: Fix Projects - shell: powershell - run: | - # WARNING: This will need updating if toolset/sdk change in project files! - gci -recurse -filter "*.vcxproj" | ForEach-Object { - # Fix SDK and toolset for most samples. - (Get-Content $_.FullName) -Replace "v110","v142" | Set-Content -Path $_.FullName - (Get-Content $_.FullName) -Replace "8.1","10.0.18362.0" | Set-Content -Path $_.FullName - # Fix SDK and toolset for samples that require newer SDK/toolset. At the moment it is only dx12. - (Get-Content $_.FullName) -Replace "v140","v142" | Set-Content -Path $_.FullName - (Get-Content $_.FullName) -Replace "10.0.14393.0","10.0.18362.0" | Set-Content -Path $_.FullName - } - - # Not using matrix here because it would inflate job count too much. Check out and setup is done for every job and that makes build times way too long. - - name: Build example_null (extra warnings, mingw 64-bit) - run: mingw32-make -C examples/example_null WITH_EXTRA_WARNINGS=1 - - - name: Build example_null (extra warnings, msvc 64-bit) - shell: cmd - run: | - cd examples\example_null - "%VS_PATH%\VC\Auxiliary\Build\vcvarsall.bat" x64 && .\build_win32.bat /W4 - - - name: Build example_null (single file build) - shell: bash - run: | - echo '#define IMGUI_IMPLEMENTATION' > example_single_file.cpp - echo '#include "misc/single_file/imgui_single_file.h"' >> example_single_file.cpp - echo '#include "examples/example_null/main.cpp"' >> example_single_file.cpp - g++ -I. -Wall -Wformat -o example_single_file.exe example_single_file.cpp - - - name: Build Win32 example_glfw_opengl2 - shell: cmd - run: '"%MSBUILD_PATH%\MSBuild.exe" examples/example_glfw_opengl2/example_glfw_opengl2.vcxproj /p:Platform=Win32 /p:Configuration=Release' - - - name: Build Win32 example_glfw_opengl3 - shell: cmd - run: '"%MSBUILD_PATH%\MSBuild.exe" examples/example_glfw_opengl3/example_glfw_opengl3.vcxproj /p:Platform=Win32 /p:Configuration=Release' - if: github.event_name == 'schedule' - - - name: Build Win32 example_glfw_vulkan - shell: cmd - run: '"%MSBUILD_PATH%\MSBuild.exe" examples/example_glfw_vulkan/example_glfw_vulkan.vcxproj /p:Platform=Win32 /p:Configuration=Release' - if: github.event_name == 'schedule' - - - name: Build Win32 example_sdl_vulkan - shell: cmd - run: '"%MSBUILD_PATH%\MSBuild.exe" examples/example_sdl_vulkan/example_sdl_vulkan.vcxproj /p:Platform=Win32 /p:Configuration=Release' - if: github.event_name == 'schedule' - - - name: Build Win32 example_sdl_opengl2 - shell: cmd - run: '"%MSBUILD_PATH%\MSBuild.exe" examples/example_sdl_opengl2/example_sdl_opengl2.vcxproj /p:Platform=Win32 /p:Configuration=Release' - if: github.event_name == 'schedule' - - - name: Build Win32 example_sdl_opengl3 - shell: cmd - run: '"%MSBUILD_PATH%\MSBuild.exe" examples/example_sdl_opengl3/example_sdl_opengl3.vcxproj /p:Platform=Win32 /p:Configuration=Release' - - - name: Build Win32 example_sdl_directx11 - shell: cmd - run: '"%MSBUILD_PATH%\MSBuild.exe" examples/example_sdl_directx11/example_sdl_directx11.vcxproj /p:Platform=Win32 /p:Configuration=Release' - if: github.event_name == 'schedule' - - - name: Build Win32 example_win32_directx9 - shell: cmd - run: '"%MSBUILD_PATH%\MSBuild.exe" examples/example_win32_directx9/example_win32_directx9.vcxproj /p:Platform=Win32 /p:Configuration=Release' - - - name: Build Win32 example_win32_directx10 - shell: cmd - run: '"%MSBUILD_PATH%\MSBuild.exe" examples/example_win32_directx10/example_win32_directx10.vcxproj /p:Platform=Win32 /p:Configuration=Release' - - - name: Build Win32 example_win32_directx11 - shell: cmd - run: '"%MSBUILD_PATH%\MSBuild.exe" examples/example_win32_directx11/example_win32_directx11.vcxproj /p:Platform=Win32 /p:Configuration=Release' - if: github.event_name == 'schedule' - - - name: Build x64 example_glfw_opengl2 - shell: cmd - run: '"%MSBUILD_PATH%\MSBuild.exe" examples/example_glfw_opengl2/example_glfw_opengl2.vcxproj /p:Platform=x64 /p:Configuration=Release' - if: github.event_name == 'schedule' - - - name: Build x64 example_glfw_opengl3 - shell: cmd - run: '"%MSBUILD_PATH%\MSBuild.exe" examples/example_glfw_opengl3/example_glfw_opengl3.vcxproj /p:Platform=x64 /p:Configuration=Release' - - - name: Build x64 example_glfw_vulkan - shell: cmd - run: '"%MSBUILD_PATH%\MSBuild.exe" examples/example_glfw_vulkan/example_glfw_vulkan.vcxproj /p:Platform=x64 /p:Configuration=Release' - - - name: Build x64 example_sdl_vulkan - shell: cmd - run: '"%MSBUILD_PATH%\MSBuild.exe" examples/example_sdl_vulkan/example_sdl_vulkan.vcxproj /p:Platform=x64 /p:Configuration=Release' - if: github.event_name == 'schedule' - - - name: Build x64 example_sdl_opengl2 - shell: cmd - run: '"%MSBUILD_PATH%\MSBuild.exe" examples/example_sdl_opengl2/example_sdl_opengl2.vcxproj /p:Platform=x64 /p:Configuration=Release' - if: github.event_name == 'schedule' - - - name: Build x64 example_sdl_opengl3 - shell: cmd - run: '"%MSBUILD_PATH%\MSBuild.exe" examples/example_sdl_opengl3/example_sdl_opengl3.vcxproj /p:Platform=x64 /p:Configuration=Release' - if: github.event_name == 'schedule' - - - name: Build x64 example_sdl_directx11 - shell: cmd - run: '"%MSBUILD_PATH%\MSBuild.exe" examples/example_sdl_directx11/example_sdl_directx11.vcxproj /p:Platform=x64 /p:Configuration=Release' - - - name: Build x64 example_win32_directx9 - shell: cmd - run: '"%MSBUILD_PATH%\MSBuild.exe" examples/example_win32_directx9/example_win32_directx9.vcxproj /p:Platform=x64 /p:Configuration=Release' - if: github.event_name == 'schedule' - - - name: Build x64 example_win32_directx10 - shell: cmd - run: '"%MSBUILD_PATH%\MSBuild.exe" examples/example_win32_directx10/example_win32_directx10.vcxproj /p:Platform=x64 /p:Configuration=Release' - if: github.event_name == 'schedule' - - - name: Build x64 example_win32_directx11 - shell: cmd - run: '"%MSBUILD_PATH%\MSBuild.exe" examples/example_win32_directx11/example_win32_directx11.vcxproj /p:Platform=x64 /p:Configuration=Release' - if: github.event_name == 'schedule' - - - name: Build x64 example_win32_directx12 - shell: cmd - run: '"%MSBUILD_PATH%\MSBuild.exe" examples/example_win32_directx12/example_win32_directx12.vcxproj /p:Platform=x64 /p:Configuration=Release' - - Linux: - runs-on: ubuntu-18.04 - steps: - - uses: actions/checkout@v1 - with: - fetch-depth: 1 - - - name: Install Dependencies - run: | - sudo apt-get update - sudo apt-get install -y libglfw3-dev libsdl2-dev gcc-multilib g++-multilib libfreetype6-dev - - - name: Build example_null (extra warnings, gcc 32-bit) - run: | - make -C examples/example_null clean - CXXFLAGS="$CXXFLAGS -m32 -Werror" make -C examples/example_null WITH_EXTRA_WARNINGS=1 - - - name: Build example_null (extra warnings, gcc 64-bit) - run: | - make -C examples/example_null clean - CXXFLAGS="$CXXFLAGS -m64 -Werror" make -C examples/example_null WITH_EXTRA_WARNINGS=1 - - - name: Build example_null (extra warnings, clang 32-bit) - run: | - make -C examples/example_null clean - CXXFLAGS="$CXXFLAGS -m32 -Werror" CXX=clang++ make -C examples/example_null WITH_EXTRA_WARNINGS=1 - - - name: Build example_null (extra warnings, clang 64-bit) - run: | - make -C examples/example_null clean - CXXFLAGS="$CXXFLAGS -m64 -Werror" CXX=clang++ make -C examples/example_null WITH_EXTRA_WARNINGS=1 - - - name: Build example_null (freetype) - run: | - make -C examples/example_null clean - make -C examples/example_null WITH_FREETYPE=1 - - - name: Build example_null (single file build) - run: | - echo '#define IMGUI_IMPLEMENTATION' > example_single_file.cpp - echo '#include "misc/single_file/imgui_single_file.h"' >> example_single_file.cpp - echo '#include "examples/example_null/main.cpp"' >> example_single_file.cpp - g++ -I. -Wall -Wformat -o example_single_file example_single_file.cpp - - - name: Build example_null (with ImWchar32) - run: | - echo '#define IMGUI_USE_WCHAR32' > example_single_file.cpp - echo '#define IMGUI_IMPLEMENTATION' >> example_single_file.cpp - echo '#include "misc/single_file/imgui_single_file.h"' >> example_single_file.cpp - echo '#include "examples/example_null/main.cpp"' >> example_single_file.cpp - g++ -I. -Wall -Wformat -o example_single_file example_single_file.cpp - - - name: Build example_null (with large ImDrawIdx) - run: | - echo '#define ImDrawIdx unsigned int' > example_single_file.cpp - echo '#define IMGUI_IMPLEMENTATION' >> example_single_file.cpp - echo '#include "misc/single_file/imgui_single_file.h"' >> example_single_file.cpp - echo '#include "examples/example_null/main.cpp"' >> example_single_file.cpp - g++ -I. -Wall -Wformat -o example_single_file example_single_file.cpp - - - name: Build example_null (with IMGUI_DISABLE_OBSOLETE_FUNCTIONS) - run: | - echo '#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS' > example_single_file.cpp - echo '#define IMGUI_IMPLEMENTATION' >> example_single_file.cpp - echo '#include "misc/single_file/imgui_single_file.h"' >> example_single_file.cpp - echo '#include "examples/example_null/main.cpp"' >> example_single_file.cpp - g++ -I. -Wall -Wformat -o example_single_file example_single_file.cpp - - - name: Build example_null (with IMGUI_DISABLE_DEMO_WINDOWS and IMGUI_DISABLE_METRICS_WINDOW) - run: | - echo '#define IMGUI_DISABLE_DEMO_WINDOWS' > example_single_file.cpp - echo '#define IMGUI_DISABLE_METRICS_WINDOW' >> example_single_file.cpp - echo '#define IMGUI_IMPLEMENTATION' >> example_single_file.cpp - echo '#include "misc/single_file/imgui_single_file.h"' >> example_single_file.cpp - echo '#include "examples/example_null/main.cpp"' >> example_single_file.cpp - g++ -I. -Wall -Wformat -o example_single_file example_single_file.cpp - - - name: Build example_glfw_opengl2 - run: make -C examples/example_glfw_opengl2 - - - name: Build example_glfw_opengl3 - run: make -C examples/example_glfw_opengl3 - if: github.event_name == 'schedule' - - - name: Build example_sdl_opengl2 - run: make -C examples/example_sdl_opengl2 - if: github.event_name == 'schedule' - - - name: Build example_sdl_opengl3 - run: make -C examples/example_sdl_opengl3 - - MacOS: - runs-on: macOS-latest - steps: - - uses: actions/checkout@v1 - with: - fetch-depth: 1 - - - name: Install Dependencies - run: | - brew install glfw3 - brew install sdl2 - - - name: Build example_null (extra warnings, clang 64-bit) - run: make -C examples/example_null WITH_EXTRA_WARNINGS=1 - - - name: Build example_null (single file build) - run: | - echo '#define IMGUI_IMPLEMENTATION' > example_single_file.cpp - echo '#include "misc/single_file/imgui_single_file.h"' >> example_single_file.cpp - echo '#include "examples/example_null/main.cpp"' >> example_single_file.cpp - clang++ -I. -Wall -Wformat -o example_single_file example_single_file.cpp - - - name: Build example_glfw_opengl2 - run: make -C examples/example_glfw_opengl2 - - - name: Build example_glfw_opengl3 - run: make -C examples/example_glfw_opengl3 - if: github.event_name == 'schedule' - - - name: Build example_glfw_metal - run: make -C examples/example_glfw_metal - - - name: Build example_sdl_metal - run: make -C examples/example_sdl_metal - - - name: Build example_sdl_opengl2 - run: make -C examples/example_sdl_opengl2 - if: github.event_name == 'schedule' - - - name: Build example_sdl_opengl3 - run: make -C examples/example_sdl_opengl3 - - - name: Build example_apple_metal - run: xcodebuild -project examples/example_apple_metal/example_apple_metal.xcodeproj -target example_apple_metal_macos - - - name: Build example_apple_opengl2 - run: xcodebuild -project examples/example_apple_opengl2/example_apple_opengl2.xcodeproj -target example_osx_opengl2 - - iOS: - runs-on: macOS-latest - steps: - - uses: actions/checkout@v1 - with: - fetch-depth: 1 - - - name: Build example_apple_metal - run: | - # Code signing is required, but we disable it because it is irrelevant for CI builds. - xcodebuild -project examples/example_apple_metal/example_apple_metal.xcodeproj -target example_apple_metal_ios CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO - - Emscripten: - runs-on: ubuntu-18.04 - steps: - - uses: actions/checkout@v1 - with: - fetch-depth: 1 - - - name: Install Dependencies - run: | - wget -q https://github.com/emscripten-core/emsdk/archive/master.tar.gz - tar -xvf master.tar.gz - emsdk-master/emsdk update - emsdk-master/emsdk install latest-fastcomp - emsdk-master/emsdk activate latest-fastcomp - - - name: Build example_emscripten - run: | - source emsdk-master/emsdk_env.sh - make -C examples/example_emscripten - - Static-Analysis: - runs-on: ubuntu-18.04 - steps: - - uses: actions/checkout@v1 - with: - fetch-depth: 1 - - - name: Install Dependencies - env: - PVS_STUDIO_LICENSE: ${{ secrets.PVS_STUDIO_LICENSE }} - run: | - if [[ "$PVS_STUDIO_LICENSE" != "" ]]; - then - echo "$PVS_STUDIO_LICENSE" > pvs-studio.lic - wget -q https://files.viva64.com/etc/pubkey.txt - sudo apt-key add pubkey.txt - sudo wget -O /etc/apt/sources.list.d/viva64.list https://files.viva64.com/etc/viva64.list - sudo apt-get update - sudo apt-get install -y pvs-studio - fi - - - name: PVS-Studio static analysis - run: | - if [[ ! -f pvs-studio.lic ]]; - then - echo "PVS Studio license is missing. No analysis will be performed." - echo "If you have a PVS Studio license please create a project secret named PVS_STUDIO_LICENSE with your license." - echo "You may use a free license. More information at https://www.viva64.com/en/b/0457/" - exit 0 - fi - cd examples/example_null - pvs-studio-analyzer trace -- make WITH_EXTRA_WARNINGS=1 - pvs-studio-analyzer analyze -e ../../imstb_rectpack.h -e ../../imstb_textedit.h -e ../../imstb_truetype.h -l ../../pvs-studio.lic -o pvs-studio.log - plog-converter -a 'GA:1,2;OP:1' -t errorfile -w pvs-studio.log diff --git a/cmake/imgui/CMakeLists.txt b/cmake/imgui/CMakeLists.txt deleted file mode 100644 index 1b1dfd0e..00000000 --- a/cmake/imgui/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ -project(imgui) - -add_library(imgui STATIC - imgui.cpp - imgui_draw.cpp - imgui_widgets.cpp - imgui_demo.cpp - examples/imgui_impl_glfw.cpp - examples/imgui_impl_opengl3.cpp -) -target_include_directories(imgui PUBLIC .) -target_link_libraries(imgui PRIVATE glfw glad ${APP_SERVICES_LIBRARY} ${COCOA_LIBRARY}) diff --git a/cmake/imgui/docs/CHANGELOG.txt b/cmake/imgui/docs/CHANGELOG.txt deleted file mode 100644 index 07c882ba..00000000 --- a/cmake/imgui/docs/CHANGELOG.txt +++ /dev/null @@ -1,2380 +0,0 @@ -dear imgui -CHANGELOG - -This document holds the user-facing changelog that we also use in release notes. -We generally fold multiple commits pertaining to the same topic as a single entry. -Changes to the examples/bindings are included within the individual .cpp files in the examples/ folder. - -RELEASE NOTES: https://github.com/ocornut/imgui/releases -REPORT ISSUES, ASK QUESTIONS: https://github.com/ocornut/imgui/issues -COMMITS HISTORY: https://github.com/ocornut/imgui/commits/master -FAQ https://www.dearimgui.org/faq/ - -WHEN TO UPDATE? - -- Keeping your copy of dear imgui updated once in a while is recommended. -- It is generally safe to sync to the latest commit in master. - The library is fairly stable and regressions tends to be fixed fast when reported. - -HOW TO UPDATE? - -- Overwrite every file except imconfig.h (if you have modified it). -- You may also locally branch to modify imconfig.h and merge latest into your branch. -- Read the `Breaking Changes` section (in imgui.cpp or here in the Changelog). -- If you have a problem with a missing function/symbols, search for its name in the code, there will likely be a comment about it. -- If you are dropping this repository in your codebase, please leave the demo and text files in there, they will be useful. -- You may diff your previous Changelog with the one you just copied and read that diff. -- You may enable `IMGUI_DISABLE_OBSOLETE_FUNCTIONS` in imconfig.h to forcefully disable legacy names and symbols. - Doing it every once in a while is a good way to make sure you are not using obsolete symbols. Dear ImGui is in active development, - and API updates have been a little more frequent lately. They are documented below and in imgui.cpp and should not affect all users. -- Please report any issue! - - ------------------------------------------------------------------------ - VERSION 1.76 WIP (In Progress) ------------------------------------------------------------------------ - -Other Changes: - -- Drag and Drop, Nav: Disabling navigation arrow keys when drag and drop is active. In the docking - branch pressing arrow keys while dragging a window from a tab could trigger an assert. (#3025) -- ColorButton: Added ImGuiColorEditFlags_NoBorder flag to remove the border normally enforced - by default for standalone ColorButton. -- BeginMenu: Using same ID multiple times appends content to a menu. (#1207) [@rokups] -- BeginMenu: Fixed a bug where SetNextWindowXXX data before a BeginMenu() would not be cleared - when the menu is not open. (#3030) -- InputText: Fixed password fields displaying ASCII spaces as blanks instead of using the '*' - glyph. (#2149, #515) -- Selectable: Fixed honoring style.SelectableTextAlign with unspecified size. (#2347, #2601) -- Selectable: Allow using ImGuiSelectableFlags_SpanAllColumns in other columns than first. (#125) -- Scrolling: Fixed scrolling centering API leading to non-integer scrolling values and initial - cursor position. This would often get fixed after the fix item submission, but using the - ImGuiListClipper as the first thing after Begin() could largely break size calculations. (#3073) -- Added optional support for Unicode plane 1-16 (#2538, #2541, #2815) [@cloudwu, @samhocevar] - - Compile-time enable with '#define IMGUI_USE_WCHAR32' in imconfig.h. - - Generally more consistent support for unsupported codepoints (0xFFFD), in particular when - using the default, non-fitting characters will be turned into 0xFFFD instead of being ignored. - - Surrogate pairs are supported when submitting UTF-16 data via io.AddInputCharacterUTF16(), - allowing for more complete CJK input. - - sizeof(ImWchar) goes from 2 to 4. IM_UNICODE_CODEPOINT_MAX goes from 0xFFFF to 0x10FFFF. - - Various structures such as ImFont, ImFontGlyphRangesBuilder will use more memory, this - is currently not particularly efficient. -- Window: Fixed a bug with child window inheriting ItemFlags from their parent when the child - window also manipulate the ItemFlags stack. (#3024) [@Stanbroek] -- Font: Fixed non-ASCII space occasionally creating unnecessary empty polygons. -- Misc: Added additional checks in EndFrame() to verify that io.KeyXXX values have not been - tampered with between NewFrame() and EndFrame(). -- Misc, Freetype: Fixed support for IMGUI_STB_RECT_PACK_FILENAME compile time directive - in imgui_freetype.cpp (matching support in the regular code path). (#3062) [@DonKult] -- Demo: Added black and white and color gradients to Demo>Examples>Custom Rendering. -- CI: Added more tests on the continuous-integration server: extra warnings for Clang/GCC, building - SDL+Metal example, building imgui_freetype.cpp, more compile-time imconfig.h settings: disabling - obsolete functions, enabling 32-bit ImDrawIdx, enabling 32-bit ImWchar, disabling demo. [@rokups] -- Backends: OpenGL3: Added include support for older glbinding 2.x loader. (#3061) [@DonKult] -- Backends: Win32: Added ImGui_ImplWin32_EnableDpiAwareness(), ImGui_ImplWin32_GetDpiScaleForHwnd(), - ImGui_ImplWin32_GetDpiScaleForMonitor() helpers functions (backported from the docking branch). - Those functions makes it easier for example apps to support hi-dpi features without setting up - a manifest. -- Backends: Win32: Calling AddInputCharacterUTF16() from WM_CHAR message handler in order to support - high-plane surrogate pairs. (#2815) [@cloudwu, @samhocevar] -- Backends: SDL: Added ImGui_ImplSDL2_InitForMetal() for API consistency (even though the function - currently does nothing). -- Backends: SDL: Fixed mapping for ImGuiKey_KeyPadEnter. (#3031) [@Davido71] -- Examples: SDL+DX11: Fixed resizing main window. (#3057) [@joeslay] -- Examples: Added SDL+Metal example application. (#3017) [@coding-jackalope] - - ------------------------------------------------------------------------ - VERSION 1.75 (Released 2020-02-10) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.75 - -Breaking Changes: - -- Removed redirecting functions/enums names that were marked obsolete in 1.53 (December 2017): - - ShowTestWindow() -> use ShowDemoWindow() - - IsRootWindowFocused() -> use IsWindowFocused(ImGuiFocusedFlags_RootWindow) - - IsRootWindowOrAnyChildFocused() -> use IsWindowFocused(ImGuiFocusedFlags_RootAndChildWindows) - - SetNextWindowContentWidth(w) -> use SetNextWindowContentSize(ImVec2(w, 0.0f) - - GetItemsLineHeightWithSpacing() -> use GetFrameHeightWithSpacing() - - ImGuiCol_ChildWindowBg -> use ImGuiCol_ChildBg - - ImGuiStyleVar_ChildWindowRounding -> use ImGuiStyleVar_ChildRounding - - ImGuiTreeNodeFlags_AllowOverlapMode -> use ImGuiTreeNodeFlags_AllowItemOverlap - - IMGUI_DISABLE_TEST_WINDOWS -> use IMGUI_DISABLE_DEMO_WINDOWS - If you were still using the old names, while you are cleaning up, considering enabling - IMGUI_DISABLE_OBSOLETE_FUNCTIONS in imconfig.h even temporarily to have a pass at finding - and removing up old API calls, if any remaining. -- Removed implicit default parameter to IsMouseDragging(int button = 0) to be consistent - with other mouse functions (none of the other functions have it). -- Obsoleted calling ImDrawList::PrimReserve() with a negative count (which was vaguely - documented and rarely if ever used). Instead we added an explicit PrimUnreserve() API - which can be implemented faster. Also clarified pre-existing constraints which weren't - documented (can only unreserve from the last reserve call). If you suspect you ever - used that feature before (very unlikely, but grep for call to PrimReserve in your code), - you can #define IMGUI_DEBUG_PARANOID in imconfig.h to catch existing calls. [@ShironekoBen] -- ImDrawList::AddCircle()/AddCircleFilled() functions don't accept negative radius. -- Limiting Columns()/BeginColumns() api to 64 columns with an assert. While the current code - technically supports it, future code may not so we're putting the restriction ahead. -- imgui_internal.h: changed ImRect() default constructor initializes all fields to 0.0f instead - of (FLT_MAX,FLT_MAX,-FLT_MAX,-FLT_MAX). If you used ImRect::Add() to create bounding boxes by - adding points into it without explicit initialization, you may need to fix your initial value. - -Other Changes: - -- Inputs: Added ImGuiMouseButton enum for convenience (e.g. ImGuiMouseButton_Right=1). - We forever guarantee that the existing value will not changes so existing code is free to use 0/1/2. -- Nav: Fixed a bug where the initial CTRL-Tab press while in a child window sometimes selected - the current root window instead of always selecting the previous root window. (#787) -- ColorEdit: Fix label alignment when using ImGuiColorEditFlags_NoInputs. (#2955) [@rokups] -- ColorEdit: In HSV display of a RGB stored value, attempt to locally preserve Saturation - when Value==0.0 (similar to changes done in 1.73 for Hue). Removed Hue editing lock since - those improvements in 1.73 makes them unnecessary. (#2722, #2770). [@rokups] -- ColorEdit: "Copy As" context-menu tool shows hex values with a '#' prefix instead of '0x'. -- ColorEdit: "Copy As" content-menu tool shows hex values both with/without alpha when available. -- InputText: Fix corruption or crash when executing undo after clearing input with ESC, as a - byproduct we are allowing to later undo the revert with a CTRL+Z. (#3008). -- InputText: Fix using a combination of _CallbackResize (e.g. for std::string binding), along with the - _EnterReturnsTrue flag along with the rarely used property of using an InputText without persisting - user-side storage. Previously if you had e.g. a local unsaved std::string and reading result back - from the widget, the user string object wouldn't be resized when Enter key was pressed. (#3009) -- MenuBar: Fix minor clipping issue where occasionally a menu text can overlap the right-most border. -- Window: Fix SetNextWindowBgAlpha(1.0f) failing to override alpha component. (#3007) [@Albog] -- Window: When testing for the presence of the ImGuiWindowFlags_NoBringToFrontOnFocus flag we - test both the focused/clicked window (which could be a child window) and the root window. -- ImDrawList: AddCircle(), AddCircleFilled() API can now auto-tessellate when provided a segment - count of zero. Alter tessellation quality with 'style.CircleSegmentMaxError'. [@ShironekoBen] -- ImDrawList: Add AddNgon(), AddNgonFilled() API with a guarantee on the explicit segment count. - In the current branch they are essentially the same as AddCircle(), AddCircleFilled() but as - we will rework the circle rendering functions to use textures and automatic segment count - selection, those new api can fill a gap. [@ShironekoBen] -- Columns: ImDrawList::Channels* functions now work inside columns. Added extra comments to - suggest using user-owned ImDrawListSplitter instead of ImDrawList functions. [@rokups] -- Misc: Added ImGuiMouseCursor_NotAllowed enum so it can be used by more shared widgets. [@rokups] -- Misc: Added IMGUI_DISABLE compile-time definition to make all headers and sources empty. -- Misc: Disable format checks when using stb_printf, to allow using extra formats. - Made IMGUI_USE_STB_SPRINTF a properly documented imconfig.h flag. (#2954) [@loicmolinari] -- Misc: Added misc/single_file/imgui_single_file.h, We use this to validate compiling all *.cpp - files in a same compilation unit. Actual users of that technique (also called "Unity builds") - can generally provide this themselves, so we don't really recommend you use this. [@rokups] -- CI: Added PVS-Studio static analysis on the continuous-integration server. [@rokups] -- Backends: GLFW, SDL, Win32, OSX, Allegro: Added support for ImGuiMouseCursor_NotAllowed. [@rokups] -- Backends: GLFW: Added support for the missing mouse cursors newly added in GLFW 3.4+. [@rokups] -- Backends: SDL: Wayland: use SDL_GetMouseState (because there is no global mouse state available - on Wayland). (#2800, #2802) [@NeroBurner] -- Backends: GLFW, SDL: report Windows key (io.KeySuper) as always released. Neither GLFW nor SDL can - correctly report the key release in every cases (e.g. when using Win+V) causing problems with some - widgets. The next release of GLFW (3.4+) will have a fix for it. However since it is both difficult - and discouraged to make use of this key for Windows application anyway, we just hide it. (#2976) -- Backends: Win32: Added support for #define IMGUI_IMPL_WIN32_DISABLE_GAMEPAD to disable all - XInput using code, and IMGUI_IMPL_WIN32_DISABLE_LINKING_XINPUT to disable linking with XInput, - the later may be problematic if compiling with recent Windows SDK and you want your app to run - on Windows 7. You can instead try linking with Xinput9_1_0.lib instead. (#2716) -- Backends: Glut: Improved FreeGLUT support for MinGW. (#3004) [@podsvirov] -- Backends: Emscripten: Avoid forcefully setting IMGUI_DISABLE_FILE_FUNCTIONS. (#3005) [@podsvirov] -- Examples: OpenGL: Explicitly adding -DIMGUI_IMPL_OPENGL_LOADER_GL3W to Makefile to match linking - settings (otherwise if another loader such as Glew is accessible, the OpenGL3 backend might - automatically use it). (#2919, #2798) -- Examples: OpenGL: Added support for glbinding OpenGL loader. (#2870) [@rokups] -- Examples: Emscripten: Demonstrating embedding fonts in Makefile and code. (#2953) [@Oipo] -- Examples: Metal: Wrapped main loop in @autoreleasepool block to ensure allocations get freed - even if underlying system event loop gets paused due to app nap. (#2910, #2917) [@bear24rw] - - ------------------------------------------------------------------------ - VERSION 1.74 (Released 2019-11-25) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.74 - -Breaking Changes: - -- Removed redirecting functions/enums names that were marked obsolete in 1.52 (October 2017): - - Begin() [old 5 args version] -> use Begin() [3 args], use SetNextWindowSize() SetNextWindowBgAlpha() if needed - - IsRootWindowOrAnyChildHovered() -> use IsWindowHovered(ImGuiHoveredFlags_RootAndChildWindows) - - AlignFirstTextHeightToWidgets() -> use AlignTextToFramePadding() - - SetNextWindowPosCenter() -> use SetNextWindowPos() with a pivot of (0.5f, 0.5f) - - ImFont::Glyph -> use ImFontGlyph - If you were still using the old names, read "API Breaking Changes" section of imgui.cpp to find out - the new names or equivalent features, or see how they were implemented until 1.73. -- Inputs: Fixed a miscalculation in the keyboard/mouse "typematic" repeat delay/rate calculation, used - by keys and e.g. repeating mouse buttons as well as the GetKeyPressedAmount() function. - If you were using a non-default value for io.KeyRepeatRate (previous default was 0.250), you can - add +io.KeyRepeatDelay to it to compensate for the fix. - The function was triggering on: 0.0 and (delay+rate*N) where (N>=1). Fixed formula responds to (N>=0). - Effectively it made io.KeyRepeatRate behave like it was set to (io.KeyRepeatRate + io.KeyRepeatDelay). - Fixed the code and altered default io.KeyRepeatRate,Delay from 0.250,0.050 to 0.300,0.050 to compensate. - If you never altered io.KeyRepeatRate nor used GetKeyPressedAmount() this won't affect you. -- Misc: Renamed IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS to IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS. (#1038) -- Misc: Renamed IMGUI_DISABLE_MATH_FUNCTIONS to IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS. -- Fonts: ImFontAtlas::AddCustomRectRegular() now requires an ID larger than 0x110000 (instead of 0x10000) to - conform with supporting Unicode planes 1-16 in a future update. ID below 0x110000 will now assert. -- Backends: DX12: Added extra ID3D12DescriptorHeap parameter to ImGui_ImplDX12_Init() function. - The value is unused in master branch but will be used by the multi-viewport feature. (#2851) [@obfuscate] - -Other Changes: - -- InputText, Nav: Fixed Home/End key broken when activating Keyboard Navigation. (#787) -- InputText: Filter out ASCII 127 (DEL) emitted by low-level OSX layer, as we are using the Key value. (#2578) -- Layout: Fixed a couple of subtle bounding box vertical positioning issues relating to the handling of text - baseline alignment. The issue would generally manifest when laying out multiple items on a same line, - with varying heights and text baseline offsets. - Some specific examples, e.g. a button with regular frame padding followed by another item with a - multi-line label and no frame padding, such as: multi-line text, small button, tree node item, etc. - The second item was correctly offset to match text baseline, and would interact/display correctly, - but it wouldn't push the contents area boundary low enough. -- Scrollbar: Fixed an issue where scrollbars wouldn't display on the frame following a frame where - all child window contents would be culled. -- ColorPicker: Fixed SV triangle gradient to block (broken in 1.73). (#2864, #2711). [@lewa-j] -- TreeNode: Fixed combination of ImGuiTreeNodeFlags_SpanFullWidth and ImGuiTreeNodeFlags_OpenOnArrow - incorrectly locating the arrow hit position to the left of the frame. (#2451, #2438, #1897) -- TreeNode: The collapsing arrow accepts click even if modifier keys are being held, facilitating - interactions with custom multi-selections patterns. (#2886, #1896, #1861) -- TreeNode: Added IsItemToggledOpen() to explicitly query if item was just open/closed, facilitating - interactions with custom multi-selections patterns. (#1896, #1861) -- DragScalar, SliderScalar, InputScalar: Added p_ prefix to parameter that are pointers to the data - to clarify how they are used, and more comments redirecting to the demo code. (#2844) -- Error handling: Assert if user mistakenly calls End() instead of EndChild() on a child window. (#1651) -- Misc: Optimized storage of window settings data (reducing allocation count). -- Misc: Windows: Do not use _wfopen() if IMGUI_DISABLE_WIN32_FUNCTIONS is defined. (#2815) -- Misc: Windows: Disabled win32 function by default when building with UWP. (#2892, #2895) -- Misc: Using static_assert() when using C++11, instead of our own construct (avoid zealous Clang warnings). -- Misc: Added IMGUI_DISABLE_FILE_FUNCTIONS/IMGUI_DISABLE_DEFAULT_FILE_FUNCTION to nullify or disable - default implementation of ImFileXXX functions linking with fopen/fclose/fread/fwrite. (#2734) -- Docs: Improved and moved FAQ to docs/FAQ.md so it can be readable on the web. [@ButternCream, @ocornut] -- Docs: Moved misc/fonts/README.txt to docs/FONTS.txt. -- Docs: Added permanent redirect from https://www.dearimgui.org/faq to FAQ page. -- Demo: Added simple item reordering demo in Widgets -> Drag and Drop section. (#2823, #143) [@rokups] -- Metrics: Show wire-frame mesh and approximate surface area when hovering ImDrawCmd. [@ShironekoBen] -- Metrics: Expose basic details of each window key/value state storage. -- Examples: DX12: Using IDXGIDebug1::ReportLiveObjects() when DX12_ENABLE_DEBUG_LAYER is enabled. -- Examples: Emscripten: Removed BINARYEN_TRAP_MODE=clamp from Makefile which was removed in Emscripten 1.39.0 - but required prior to 1.39.0, making life easier for absolutely no-one. (#2877, #2878) [@podsvirov] -- Backends: OpenGL2: Explicitly backup, setup and restore GL_TEXTURE_ENV to increase compatibility with - legacy OpenGL applications. (#3000) -- Backends: OpenGL3: Fix building with pre-3.2 GL loaders which do not expose glDrawElementsBaseVertex(), - using runtime GL version to decide if we set ImGuiBackendFlags_RendererHasVtxOffset. (#2866, #2852) [@dpilawa] -- Backends: OSX: Fix using Backspace key. (#2578, #2817, #2818) [@DiligentGraphics] -- Backends: GLFW: Previously installed user callbacks are now restored on shutdown. (#2836) [@malte-v] -- CI: Set up a bunch of continuous-integration tests using GitHub Actions. We now compile many of the example - applications on Windows, Linux, MacOS, iOS, Emscripten. Removed Travis integration. (#2865) [@rokups] - - ------------------------------------------------------------------------ - VERSION 1.73 (Released 2019-09-24) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.73 - -Other Changes: - -- Nav, Scrolling: Added support for Home/End key. (#787) -- ColorEdit: Disable Hue edit when Saturation==0 instead of letting Hue values jump around. -- ColorEdit, ColorPicker: In HSV display of a RGB stored value, attempt to locally preserve Hue - when Saturation==0, which reduces accidentally lossy interactions. (#2722, #2770) [@rokups] -- ColorPicker: Made rendering aware of global style alpha of the picker can be faded out. (#2711) - Note that some elements won't accurately fade down with the same intensity, and the color wheel - when enabled will have small overlap glitches with (style.Alpha < 1.0). -- TabBar: Fixed single-tab not shrinking their width down. -- TabBar: Fixed clicking on a tab larger than tab-bar width creating a bouncing feedback loop. -- TabBar: Feed desired width (sum of unclipped tabs width) into layout system to allow for auto-resize. (#2768) - (before 1.71 tab bars fed the sum of current width which created feedback loops in certain situations). -- TabBar: Improved shrinking for large number of tabs to avoid leaving extraneous space on the right side. - Individuals tabs are given integer-rounded width and remainder is spread between tabs left-to-right. -- Columns, Separator: Fixed a bug where non-visible separators within columns would alter the next row position - differently than visible ones. -- SliderScalar: Improved assert when using U32 or U64 types with a large v_max value. (#2765) [@loicmouton] -- DragInt, DragFloat, DragScalar: Using (v_min > v_max) allows locking any edits to the value. -- DragScalar: Fixed dragging of unsigned values on ARM cpu (float to uint cast is undefined). (#2780) [@dBagrat] -- TreeNode: Added ImGuiTreeNodeFlags_SpanAvailWidth flag. (#2451, #2438, #1897) [@Melix19, @PathogenDavid] - This extends the hit-box to the right-most edge, even if the node is not framed. - (Note: this is not the default in order to allow adding other items on the same line. In the future we will - aim toward refactoring the hit-system to be front-to-back, allowing more natural overlapping of items, - and then we will be able to make this the default.) -- TreeNode: Added ImGuiTreeNodeFlags_SpanFullWidth flag. This extends the hit-box to both the left-most and - right-most edge of the working area, bypassing indentation. -- CollapsingHeader: Added support for ImGuiTreeNodeFlags_Bullet and ImGuiTreeNodeFlags_Leaf on framed nodes, - mostly for consistency. (#2159, #2160) [@goran-w] -- Selectable: Added ImGuiSelectableFlags_AllowItemOverlap flag in public api (was previously internal only). -- Style: Allow style.WindowMenuButtonPosition to be set to ImGuiDir_None to hide the collapse button. (#2634, #2639) -- Font: Better ellipsis ("...") drawing implementation. Instead of drawing three pixel-ey dots (which was glaringly - unfitting with many types of fonts) we first attempt to find a standard ellipsis glyphs within the loaded set. - Otherwise we render ellipsis using '.' from the font from where we trim excessive spacing to make it as narrow - as possible. (#2775) [@rokups] -- ImDrawList: Clarified the name of many parameters so reading the code is a little easier. (#2740) -- ImDrawListSplitter: Fixed merging channels if the last submitted draw command used a different texture. (#2506) -- Using offsetof() when available in C++11. Avoids Clang sanitizer complaining about old-style macros. (#94) -- ImVector: Added find(), find_erase(), find_erase_unsorted() helpers. -- Added a mechanism to compact/free the larger allocations of unused windows (buffers are compacted when - a window is unused for 60 seconds, as per io.ConfigWindowsMemoryCompactTimer = 60.0f). Note that memory - usage has never been reported as a problem, so this is merely a touch of overzealous luxury. (#2636) -- Documentation: Various tweaks and improvements to the README page. [@ker0chan] -- Backends: OpenGL3: Tweaked initialization code allow application calling ImGui_ImplOpenGL3_CreateFontsTexture() - before ImGui_ImplOpenGL3_NewFrame(), which sometimes can be convenient. -- Backends: OpenGL3: Attempt to automatically detect default GL loader by using __has_include. (#2798) [@o-micron] -- Backends: DX11: Fixed GSGetShader() call not passing an initialized instance count, which would - generally make the DX11 debug layer complain (bug added in 1.72). -- Backends: Vulkan: Added support for specifying multisample count. Set 'ImGui_ImplVulkan_InitInfo::MSAASamples' to - one of the VkSampleCountFlagBits values to use, default is non-multisampled as before. (#2705, #2706) [@vilya] -- Examples: OSX: Fix example_apple_opengl2/main.mm not forwarding mouse clicks and drags correctly. (#1961, #2710) - [@intonarumori, @ElectricMagic] -- Misc: Updated stb_rect_pack.h from 0.99 to 1.00 (fixes by @rygorous: off-by-1 bug in best-fit heuristic, - fix handling of rectangles too large to fit inside texture). (#2762) [@tido64] - - ------------------------------------------------------------------------ - VERSION 1.72b (Released 2019-07-31) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.72b - -Other Changes: - -- Nav, Scrolling: Fixed programmatic scroll leading to a slightly incorrect scroll offset when - the window has decorations or a menu-bar (broken in 1.71). This was mostly noticeable when - a keyboard/gamepad movement led to scrolling the view, or using e.g. SetScrollHereY() function. -- Nav: Made hovering non-MenuItem Selectable not re-assign the source item for keyboard navigation. -- Nav: Fixed an issue with NavFlattened window flag (beta) where widgets not entirely fitting - in child window (often selectables because of their protruding sides) would be not considered - as entry points to to navigate toward the child window. (#787) - - ------------------------------------------------------------------------ - VERSION 1.72 (Released 2019-07-27) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.72 - -Breaking Changes: - -- Removed redirecting functions/enums names that were marked obsolete in 1.51 (June 2017): - - ImGuiCol_Column*, ImGuiSetCond_* enums. - - IsItemHoveredRect(), IsPosHoveringAnyWindow(), IsMouseHoveringAnyWindow(), IsMouseHoveringWindow() functions. - - IMGUI_ONCE_UPON_A_FRAME macro. - If you were still using the old names, read "API Breaking Changes" section of imgui.cpp to find out - the new names or equivalent features. -- Renamed ImFontAtlas::CustomRect to ImFontAtlasCustomRect. Kept redirection typedef (will obsolete). -- Removed TreeAdvanceToLabelPos() which is rarely used and only does SetCursorPosX(GetCursorPosX() + GetTreeNodeToLabelSpacing()). - Kept redirection function (will obsolete). (#581, #324) - -Other Changes: - -- Scrolling: Made mouse-wheel scrolling lock the underlying window until the mouse is moved again or - until a short delay expires (~2 seconds). This allow uninterrupted scroll even if child windows are - passing under the mouse cursor. (#2604) -- Scrolling: Made it possible for mouse wheel and navigation-triggered scrolling to override a call to - SetScrollX()/SetScrollY(), making it possible to use a simpler stateless pattern for auto-scrolling: - // (Submit items..) - if (ImGui::GetScrollY() >= ImGui::GetScrollMaxY()) // If scrolling at the already at the bottom.. - ImGui::SetScrollHereY(1.0f); // ..make last item fully visible -- Scrolling: Added SetScrollHereX(), SetScrollFromPosX() for completeness. (#1580) [@kevreco] -- Scrolling: Mouse wheel scrolling while hovering a child window is automatically forwarded to parent window - if ScrollMax is zero on the scrolling axis. - Also still the case if ImGuiWindowFlags_NoScrollWithMouse is set (not new), but previously the forwarding - would be disabled if ImGuiWindowFlags_NoScrollbar was set on the child window, which is not the case - any more. Forwarding can still be disabled by setting ImGuiWindowFlags_NoInputs. (amend #1502, #1380). -- Window: Fixed InnerClipRect right-most coordinates using wrong padding setting (introduced in 1.71). -- Window: Fixed old SetWindowFontScale() api value from not being inherited by child window. Added - comments about the right way to scale your UI (load a font at the right side, rebuild atlas, scale style). -- Scrollbar: Avoid overlapping the opposite side when window (often a child window) is forcibly too small. -- Combo: Hide arrow when there's not enough space even for the square button. -- InputText: Testing for newly added ImGuiKey_KeyPadEnter key. (#2677, #2005) [@amc522] -- TabBar: Fixed unfocused tab bar separator color (was using ImGuiCol_Tab, should use ImGuiCol_TabUnfocusedActive). -- Columns: Fixed a regression from 1.71 where the right-side of the contents rectangle within each column - would wrongly use a WindowPadding.x instead of ItemSpacing.x like it always did. (#125, #2666) -- Columns: Made the right-most edge reaches up to the clipping rectangle (removing half of WindowPadding.x - worth of asymmetrical/extraneous padding, note that there's another half that conservatively has to offset - the right-most column, otherwise it's clipping width won't match the other columns). (#125, #2666) -- Columns: Improved honoring alignment with various values of ItemSpacing.x and WindowPadding.x. (#125, #2666) -- Columns: Made GetColumnOffset() and GetColumnWidth() behave when there's no column set, consistently with - other column functions. (#2683) -- InputTextMultiline: Fixed vertical scrolling tracking glitch. -- Word-wrapping: Fixed overzealous word-wrapping when glyph edge lands exactly on the limit. Because - of this, auto-fitting exactly unwrapped text would make it wrap. (fixes initial 1.15 commit, 78645a7d). -- Style: Attenuated default opacity of ImGuiCol_Separator in Classic and Light styles. -- Style: Added style.ColorButtonPosition (left/right, defaults to ImGuiDir_Right) to move the color button - of ColorEdit3/ColorEdit4 functions to either side of the inputs. -- IO: Added ImGuiKey_KeyPadEnter and support in various back-ends (previously back-ends would need to - specifically redirect key-pad keys to their regular counterpart). This is a temporary attenuating measure - until we actually refactor and add whole sets of keys into the ImGuiKey enum. (#2677, #2005) [@amc522] -- Misc: Made Button(), ColorButton() not trigger an "edited" event leading to IsItemDeactivatedAfterEdit() - returning true. This also effectively make ColorEdit4() not incorrect trigger IsItemDeactivatedAfterEdit() - when clicking the color button to open the picker popup. (#1875) -- Misc: Added IMGUI_DISABLE_METRICS_WINDOW imconfig.h setting to explicitly compile out ShowMetricsWindow(). -- Debug, Metrics: Added "Tools->Item Picker" tool which allow clicking on a widget to break in the debugger - within the item code. The tool calls IM_DEBUG_BREAK() which can be redefined in imconfig.h if needed. -- ImDrawList: Fixed CloneOutput() helper crashing. (#1860) [@gviot] -- ImDrawList::ChannelsSplit(), ImDrawListSplitter: Fixed an issue with merging draw commands between - channel 0 and 1. (#2624) -- ImDrawListSplitter: Fixed memory leak when using low-level split api (was not affecting ImDrawList api, - also this type was added in 1.71 and not advertised as a public-facing feature). -- Fonts: binary_to_compressed_c.cpp: Display an error message if failing to open/read the input font file. -- Demo: Log, Console: Using a simpler stateless pattern for auto-scrolling. -- Demo: Widgets: Showing how to use the format parameter of Slider/Drag functions to display the name - of an enum value instead of the underlying integer value. -- Demo: Renamed the "Help" menu to "Tools" (more accurate). -- Backends: DX10/DX11: Backup, clear and restore Geometry Shader is any is bound when calling renderer. -- Backends: DX11: Clear Hull Shader, Domain Shader, Compute Shader before rendering. Not backing/restoring them. -- Backends: OSX: Disabled default native Mac clipboard copy/paste implementation in core library (added in 1.71), - because it needs application to be linked with '-framework ApplicationServices'. It can be explicitly - enabled back by using '#define IMGUI_ENABLE_OSX_DEFAULT_CLIPBOARD_FUNCTIONS' in imconfig.h. Re-added - equivalent using NSPasteboard api in the imgui_impl_osx.mm experimental back-end. (#2546) -- Backends: SDL2: Added dummy ImGui_ImplSDL2_InitForD3D() function to make D3D support more visible. - (#2482, #2632) [@josiahmanson] -- Examples: Added SDL2+DirectX11 example application. (#2632, #2612, #2482) [@vincenthamm] - - ------------------------------------------------------------------------ - VERSION 1.71 (Released 2019-06-12) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.71 - -Breaking Changes: - -- IO: changed AddInputCharacter(unsigned short c) signature to AddInputCharacter(unsigned int c). -- Renamed SetNextTreeNodeOpen() to SetNextItemOpen(). Kept inline redirection function (will obsolete). -- Window: rendering of child windows outer decorations (e.g. bg color, border, scrollbars) is now - performed as part of their parent window, avoiding the creation of an extraneous draw commands. - If you have overlapping child windows with decorations, and relied on their relative z-order to be - mapped to submission their order, this will affect your rendering. The optimization is disabled - if the parent window has no visual output because it appears to be the most common situation leading - to the creation of overlapping child windows. Please reach out if you are affected by this change! - -Other Changes: - -- Window: clarified behavior of SetNextWindowContentSize(). Content size is defined as the size available - after removal of WindowPadding on each sides. So SetNextWindowContentSize(ImVec2(100,100)) + auto-resize - will always allow submitting a 100x100 item without creating a scrollbar, regarding of WindowPadding. - The exact meaning of ContentSize for decorated windows was previously ill-defined. -- Window: Fixed auto-resize with AlwaysVerticalScrollbar or AlwaysHorizontalScrollbar flags. -- Window: Fixed one case where auto-resize by double-clicking the resize grip would make either scrollbar - appear for a single frame after the resize. -- Separator: Revert 1.70 "Declare its thickness (1.0f) to the layout" change. It's not incorrect - but it breaks existing some layout patterns. Will return back to it when we expose Separator flags. -- Fixed InputScalar, InputScalarN, SliderScalarN, DragScalarN with non-visible label from inserting - style.ItemInnerSpacing.x worth of trailing spacing. -- Fixed InputFloatX, SliderFloatX, DragFloatX functions erroneously reporting IsItemEdited() multiple - times when the text input doesn't match the formatted output value (e.g. input "1" shows "1.000"). - It wasn't much of a problem because we typically use the return value instead of IsItemEdited() here. -- Fixed uses of IsItemDeactivated(), IsItemDeactivatedAfterEdit() on multi-components widgets and - after EndGroup(). (#2550, #1875) -- Fixed crash when appending with BeginMainMenuBar() more than once and no other window are showing. (#2567) -- ColorEdit: Fixed the color picker popup only displaying inputs as HSV instead of showing multiple - options. (#2587, broken in 1.69 by #2384). -- CollapsingHeader: Better clipping when a close button is enabled and it overlaps the label. (#600) -- Scrollbar: Minor bounding box adjustment to cope with various border size. -- Scrollbar, Style: Changed default style.ScrollbarSize from 16 to 14. -- Combo: Fixed rounding not applying with the ImGuiComboFlags_NoArrowButton flag. (#2607) [@DucaRii] -- Nav: Fixed gamepad/keyboard moving of window affecting contents size incorrectly, sometimes leading - to scrollbars appearing during the movement. -- Nav: Fixed rare crash when e.g. releasing Alt-key while focusing a window with a menu at the same - frame as clearing the focus. This was in most noticeable in back-ends such as Glfw and SDL which - emits key release events when focusing another viewport, leading to Alt+clicking on void on another - viewport triggering the issue. (#2609) -- TreeNode, CollapsingHeader: Fixed highlight frame not covering horizontal area fully when using - horizontal scrolling. (#2211, #2579) -- TabBar: Fixed BeginTabBar() within a window with horizontal scrolling from creating a feedback - loop with the horizontal contents size. -- Columns: Fixed Columns() within a window with horizontal scrolling from not covering the full - horizontal area (previously only worked with an explicit contents size). (#125) -- Columns: Fixed Separator from creating an extraneous draw command. (#125) -- Columns: Fixed Selectable with SpanAllColumns flag from creating an extraneous draw command. (#125) -- Style: Added style.WindowMenuButtonPosition (left/right, defaults to ImGuiDir_Left) to move the - collapsing/docking button to the other side of the title bar. -- Style: Made window close button cross slightly smaller. -- Log/Capture: Fixed BeginTabItem() label not being included in a text log/capture. -- ImDrawList: Added ImDrawCmd::VtxOffset value to support large meshes (64k+ vertices) using 16-bit indices. - The renderer back-end needs to set 'io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset' to enable - this, and honor the ImDrawCmd::VtxOffset field. Otherwise the value will always be zero. - This has the advantage of preserving smaller index buffers and allowing to execute on hardware that do not - support 32-bit indices. Most examples back-ends have been modified to support the VtxOffset field. -- ImDrawList: Added ImDrawCmd::IdxOffset value, equivalent to summing element count for each draw command. - This is provided for convenience and consistency with VtxOffset. -- ImDrawCallback: Allow to override the signature of ImDrawCallback by #define-ing it. This is meant to - facilitate custom rendering back-ends passing local render-specific data to the draw callback. -- ImFontAtlas: FreeType: Added RasterizerFlags::Monochrome flag to disable font anti-aliasing. Combine - with RasterizerFlags::MonoHinting for best results. (#2545) [@HolyBlackCat] -- ImFontGlyphRangesBuilder: Fixed unnecessarily over-sized buffer, which incidentally was also not - fully cleared. Fixed edge-case overflow when adding character 0xFFFF. (#2568). [@NIKE3500] -- Demo: Added full "Dear ImGui" prefix to the title of "Dear ImGui Demo" and "Dear ImGui Metrics" windows. -- Backends: Add native Mac clipboard copy/paste default implementation in core library to match what we are - dealing with Win32, and to facilitate integration in custom engines. (#2546) [@andrewwillmott] -- Backends: OSX: imgui_impl_osx: Added mouse cursor support. (#2585, #1873) [@actboy168] -- Examples/Backends: DirectX9/10/11/12, Metal, Vulkan, OpenGL3 (Desktop GL only): Added support for large meshes - (64k+ vertices) with 16-bit indices, enable 'ImGuiBackendFlags_RendererHasVtxOffset' in those back-ends. -- Examples/Backends: Don't filter characters under 0x10000 before calling io.AddInputCharacter(), - the filtering is done in io.AddInputCharacter() itself. This is in prevision for fuller Unicode - support. (#2538, #2541) - - ------------------------------------------------------------------------ - VERSION 1.70 (Released 2019-05-06) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.70 - -Breaking Changes: - -- ImDrawList: Improved algorithm for mitre joints on thick lines, preserving correct thickness - up to 90 degrees angles (e.g. rectangles). If you have custom rendering using thick lines, - they will appear a little thicker now. (#2518) [@rmitton] -- Obsoleted GetContentRegionAvailWidth(), use GetContentRegionAvail().x instead. - Kept inline redirection function. -- Examples: Vulkan: Added MinImageCount/ImageCount fields in ImGui_ImplVulkan_InitInfo, required - during initialization to specify the number of in-flight image requested by swap chains. - (was previously a hard #define IMGUI_VK_QUEUED_FRAMES 2). (#2071, #1677) [@nathanvoglsam] -- Examples: Vulkan: Tidying up the demo/internals helpers (most engine/app should not rely - on them but it is possible you have!). - -Other Changes: - -- ImDrawList: Added ImDrawCallback_ResetRenderState, a special ImDrawList::AddCallback() value - to request the renderer back-end to reset its render state. (#2037, #1639, #2452) - Examples: Added support for ImDrawCallback_ResetRenderState in all renderer back-ends. Each - renderer code setting up initial render state has been moved to a function so it could be - called at the start of rendering and when a ResetRenderState is requested. [@ocornut, @bear24rw] -- InputText: Fixed selection background rendering one frame after the cursor movement when - first transitioning from no-selection to has-selection. (Bug in 1.69) (#2436) [@Nazg-Gul] -- InputText: Work-around for buggy standard libraries where isprint('\t') returns true. (#2467, #1336) -- InputText: Fixed ImGuiInputTextFlags_AllowTabInput leading to two tabs characters being inserted - if the back-end provided both Key and Character input. (#2467, #1336) -- Layout: Added SetNextItemWidth() helper to avoid using PushItemWidth/PopItemWidth() for single items. - Note that SetNextItemWidth() currently only affect the same subset of items as PushItemWidth(), - generally referred to as the large framed+labeled items. Because the new SetNextItemWidth() - function is explicit we may later extend its effect to more items. -- Layout: Fixed PushItemWidth(-width) for right-side alignment laying out some items (button, listbox, etc.) - with negative sizes if the 'width' argument was smaller than the available width at the time of item - submission. -- Window: Fixed window with the AlwaysAutoResize flag unnecessarily extending their hovering boundaries - by a few pixels (this is used to facilitate resizing from borders when available for a given window). - One of the noticeable minor side effect was that navigating menus would have had a tendency to disable - highlight from parent menu items earlier than necessary while approaching the child menu. -- Window: Close button is horizontally aligned with style.FramePadding.x. -- Window: Fixed contents region being off by WindowBorderSize amount on the right when scrollbar is active. -- Window: Fixed SetNextWindowSizeConstraints() with non-rounded positions making windows drift. (#2067, #2530) -- Popups: Closing a popup restores the focused/nav window in place at the time of the popup opening, - instead of restoring the window that was in the window stack at the time of the OpenPopup call. (#2517) - Among other things, this allows opening a popup while no window are focused, and pressing Escape to - clear the focus again. -- Popups: Fixed right-click from closing all popups instead of aiming at the hovered popup level - (regression in 1.67). -- Selectable: With ImGuiSelectableFlags_AllowDoubleClick doesn't return true on the mouse button release - following the double-click. Only first mouse release + second mouse down (double-click) returns true. - Likewise for internal ButtonBehavior() with both _PressedOnClickRelease | _PressedOnDoubleClick. (#2503) -- GetMouseDragDelta(): also returns the delta on the mouse button released frame. (#2419) -- GetMouseDragDelta(): verify that mouse positions are valid otherwise returns zero. -- Inputs: Also add support for horizontal scroll with Shift+Mouse Wheel. (#2424, #1463) [@LucaRood] -- PlotLines, PlotHistogram: Ignore NaN values when calculating min/max bounds. (#2485) -- Columns: Fixed boundary of clipping being off by 1 pixel within the left column. (#125) -- Separator: Declare its thickness (1.0f) to the layout, making items around separator more symmetrical. -- Combo, Slider, Scrollbar: Improve rendering in situation when there's only a few pixels available (<3 pixels). -- Nav: Fixed Drag/Slider functions going into text input mode when keyboard CTRL is held while pressing NavActivate. -- Drag and Drop: Fixed drag source with ImGuiDragDropFlags_SourceAllowNullID and null ID from receiving click - regardless of being covered by another window (it didn't honor correct hovering rules). (#2521) -- ImDrawList: Improved algorithm for mitre joints on thick lines, preserving correct thickness up to 90 degrees - angles, also faster to output. (#2518) [@rmitton] -- Misc: Added IM_MALLOC/IM_FREE macros mimicking IM_NEW/IM_DELETE so user doesn't need to revert - to using the ImGui::MemAlloc()/MemFree() calls directly. -- Misc: Made IMGUI_CHECKVERSION() macro also check for matching size of ImDrawIdx. -- Metrics: Added "Show windows rectangles" tool to visualize the different rectangles. -- Demo: Improved trees in columns demo. -- Examples: OpenGL: Added a dummy GL call + comments in ImGui_ImplOpenGL3_Init() to detect uninitialized - GL function loaders early, and help users understand what they are missing. (#2421) -- Examples: SDL: Added support for SDL_GameController gamepads (enable with ImGuiConfigFlags_NavEnableGamepad). (#2509) [@DJLink] -- Examples: Emscripten: Added Emscripten+SDL+GLES2 example. (#2494, #2492, #2351, #336) [@nicolasnoble, @redblobgames] -- Examples: Metal: Added Glfw+Metal example. (#2527) [@bear24rw] -- Examples: OpenGL3: Minor tweaks + not calling glBindBuffer more than necessary in the render loop. -- Examples: Vulkan: Fixed in-flight buffers issues when using multi-viewports. (#2461, #2348, #2378, #2097) -- Examples: Vulkan: Added missing support for 32-bit indices (#define ImDrawIdx unsigned int). -- Examples: Vulkan: Avoid passing negative coordinates to vkCmdSetScissor, which debug validation layers do not like. -- Examples: Vulkan: Added ImGui_ImplVulkan_SetMinImageCount() to change min image count at runtime. (#2071) [@nathanvoglsam] -- Examples: DirectX9: Fixed erroneous assert in ImGui_ImplDX9_InvalidateDeviceObjects(). (#2454) -- Examples: DirectX10/11/12, Allegro, Marmalade: Render functions early out when display size is zero (minimized). (#2496) -- Examples: GLUT: Fixed existing FreeGLUT example to work with regular GLUT. (#2465) [@andrewwillmott] -- Examples: GLUT: Renamed imgui_impl_freeglut.cpp/.h to imgui_impl_glut.cpp/.h. (#2465) [@andrewwillmott] -- Examples: GLUT: Made io.DeltaTime always > 0. (#2430) -- Examples: Visual Studio: Updated default platform toolset+sdk in vcproj files from v100+sdk7 (vs2010) - to v110+sdk8 (vs2012). This is mostly so we can remove reliance on DXSDK_DIR for the DX10/DX11 example, - which if existing and when switching to recent SDK ends up conflicting and creating warnings. - - ------------------------------------------------------------------------ - VERSION 1.69 (Released 2019-03-13) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.69 - -Breaking Changes: - -- Renamed ColorEdit/ColorPicker's ImGuiColorEditFlags_RGB/_HSV/_HEX flags to respectively - ImGuiColorEditFlags_DisplayRGB/_DisplayHSV/_DisplayHex. This is because the addition of - new flag ImGuiColorEditFlags_InputHSV makes the earlier one ambiguous. - Kept redirection enum values (will obsolete). (#2384) [@haldean] -- Renamed GetOverlayDrawList() to GetForegroundDrawList(). Kept redirection function (will obsolete). (#2391) - -Other Changes: - -- Added GetBackgroundDrawList() helper to quickly get access to a ImDrawList that will be rendered - behind every other windows. (#2391, #545) -- DragScalar, InputScalar, SliderScalar: Added support for u8/s8/u16/s16 data types (ImGuiDataType_S8, etc.) - We are reusing function instances of larger types to reduce code size. (#643, #320, #708, #1011) -- Added InputTextWithHint() to display a description/hint in the text box when no text - has been entered. (#2400) [@Organic-Code, @ocornut] -- Nav: Fixed a tap on AltGR (e.g. German keyboard) from navigating to the menu layer. -- Nav: Fixed Ctrl+Tab keeping active InputText() of a previous window active after the switch. (#2380) -- Fixed IsItemDeactivated()/IsItemDeactivatedAfterEdit() from not correctly returning true - when tabbing out of a focusable widget (Input/Slider/Drag) in most situations. (#2215, #1875) -- InputInt, InputFloat, InputScalar: Fix to keep the label of the +/- buttons centered when - style.FramePadding.x is abnormally larger than style.FramePadding.y. Since the buttons are - meant to be square (to align with e.g. color button) we always use FramePadding.y. (#2367) -- InputInt, InputScalar: +/- buttons now respects the natural type limits instead of - overflowing or underflowing the value. -- InputText: Fixed an edge case crash that would happen if another widget sharing the same ID - is being swapped with an InputText that has yet to be activated. -- InputText: Fixed various display corruption related to swapping the underlying buffer while - a input widget is active (both for writable and read-only paths). Often they would manifest - when manipulating the scrollbar of a multi-line input text. -- ColorEdit, ColorPicker, ColorButton: Added ImGuiColorEditFlags_InputHSV to manipulate color - values encoded as HSV (in order to avoid HSV<>RGB round trips and associated singularities). - (#2383, #2384) [@haldean] -- ColorPicker: Fixed a bug/assertion when displaying a color picker in a collapsed window - while dragging its title bar. (#2389) -- ColorEdit: Fixed tooltip not honoring the ImGuiColorEditFlags_NoAlpha contract of never - reading the 4th float in the array (value was read and discarded). (#2384) [@haldean] -- MenuItem, Selectable: Fixed disabled widget interfering with navigation (fix c2db7f63 in 1.67). -- TabBar: Fixed a crash when using many BeginTabBar() recursively (didn't affect docking). (#2371) -- TabBar: Added extra mis-usage error recovery. Past the assert, common mis-usage don't lead to - hard crashes any more, facilitating integration with scripting languages. (#1651) -- TabBar: Fixed ImGuiTabItemFlags_SetSelected being ignored if the tab is not visible (with - scrolling policy enabled) or if is currently appearing. -- TabBar: Fixed Tab tooltip code making drag and drop tooltip disappear during the frame where - the drag payload activate a tab. -- TabBar: Reworked scrolling policy (when ImGuiTabBarFlags_FittingPolicyScroll is set) to - teleport the view when aiming at a tab far away the visible section, and otherwise accelerate - the scrolling speed to cap the scrolling time to 0.3 seconds. -- Text: Fixed large Text/TextUnformatted calls not feeding their size into layout when starting - below the lower point of the current clipping rectangle. This bug has been there since v1.0! - It was hardly noticeable but would affect the scrolling range, which in turn would affect - some scrolling request functions when called during the appearing frame of a window. -- Plot: Fixed divide-by-zero in PlotLines() when passing a count of 1. (#2387) [@Lectem] -- Log/Capture: Fixed LogXXX functions emitting extraneous leading carriage return. -- Log/Capture: Fixed an issue when empty string on a new line would not emit a carriage return. -- Log/Capture: Fixed LogXXX functions 'auto_open_depth' parameter being treated as an absolute - tree depth instead of a relative one. -- Log/Capture: Fixed CollapsingHeader trailing ascii representation being "#" instead of "##". -- ImFont: Added GetGlyphRangesVietnamese() helper. (#2403) -- Misc: Asserting in NewFrame() if style.WindowMinSize is zero or smaller than (1.0f,1.0f). -- Demo: Using GetBackgroundDrawList() and GetForegroundDrawList() in "Custom Rendering" demo. -- Demo: InputText: Demonstrating use of ImGuiInputTextFlags_CallbackResize. (#2006, #1443, #1008). -- Examples: GLFW, SDL: Preserve DisplayFramebufferScale when main viewport is minimized. - (This is particularly useful for the viewport branch because we are not supporting per-viewport - frame-buffer scale. It fixes windows not refreshing when main viewport is minimized.) (#2416) -- Examples: OpenGL: Fix to be able to run on ES 2.0 / WebGL 1.0. [@rmitton, @gabrielcuvillier] -- Examples: OpenGL: Fix for OSX not supporting OpenGL 4.5, we don't try to read GL_CLIP_ORIGIN - even if the OpenGL headers/loader happens to define the value. (#2366, #2186) -- Examples: Allegro: Added support for touch events (emulating mouse). (#2219) [@dos1] -- Examples: DirectX9: Minor changes to match the other DirectX examples more closely. (#2394) - - ------------------------------------------------------------------------ - VERSION 1.68 (Released 2019-02-19) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.68 - -Breaking Changes: - -- Removed io.DisplayVisibleMin/DisplayVisibleMax (which were marked obsolete and removed from viewport/docking branch already). -- Made it illegal/assert when io.DisplayTime == 0.0f (with an exception for the first frame). - If for some reason your time step calculation gives you a zero value, replace it with a dummy small value! - -Other Changes: - -- Added .editorconfig file for text editors to standardize using spaces. (#2038) [@kudaba] -- ImDrawData: Added FramebufferScale field (currently a copy of the value from io.DisplayFramebufferScale). - This is to allow render functions being written without pulling any data from ImGuiIO, allowing incoming - multi-viewport feature to behave on Retina display and with multiple displays. - If you are not using a custom binding, please update your render function code ahead of time, - and use draw_data->FramebufferScale instead of io.DisplayFramebufferScale. (#2306, #1676) -- Added IsItemActivated() as an extension to the IsItemDeactivated/IsItemDeactivatedAfterEdit functions - which are useful to implement variety of undo patterns. (#820, #956, #1875) -- InputText: Fixed a bug where ESCAPE would not restore the initial value in all situations. (#2321) [@relick] -- InputText: Fixed a bug where ESCAPE would be first captured by the Keyboard Navigation code. (#2321, #787) -- InputText: Fixed redo buffer exhaustion handling (rare) which could corrupt the undo character buffer. (#2333) - The way the redo/undo buffers work would have made it generally unnoticeable to the user. -- Fixed range-version of PushID() and GetID() not honoring the ### operator to restart from the seed value. -- Fixed CloseCurrentPopup() on a child-menu of a modal incorrectly closing the modal. (#2308) -- Tabs: Added ImGuiTabBarFlags_TabListPopupButton flag to show a popup button on manual tab bars. (#261, #351) -- Tabs: Removed ImGuiTabBarFlags_NoTabListPopupButton which was available in 1.67 but actually had zero use. -- Tabs: Fixed a minor clipping glitch when changing style's FramePadding from frame to frame. -- Tabs: Fixed border (when enabled) so it is aligned correctly mid-pixel and appears as bright as other borders. -- Style, Selectable: Added ImGuiStyle::SelectableTextAlign and ImGuiStyleVar_SelectableTextAlign. (#2347) [@haldean] -- Menus: Tweaked horizontal overlap between parent and child menu (to help convey relative depth) - from using style.ItemSpacing.x to style.ItemInnerSpacing.x, the later being expected to be smaller. (#1086) -- RadioButton: Fixed label horizontal alignment to precisely match Checkbox(). -- Window: When resizing from an edge, the border is more visible and better follow the rounded corners. -- Window: Fixed initial width of collapsed windows not taking account of contents width (broken in 1.67). (#2336, #176) -- Scrollbar: Fade out and disable interaction when too small, in order to facilitate using the resize grab on very - small window, as well as reducing visual noise/overlap. -- ListBox: Better optimized when clipped / non-visible. -- InputTextMultiline: Better optimized when clipped / non-visible. -- Font: Fixed high-level ImGui::CalcTextSize() used by most widgets from erroneously subtracting 1.0f*scale to - calculated text width. Among noticeable side-effects, it would make sequences of repeated Text/SameLine calls - not align the same as a single call, and create mismatch between high-level size calculation and those performed - with the lower-level ImDrawList api. (#792) [@SlNPacifist] -- Font: Fixed building atlas when specifying duplicate/overlapping ranges within a same font. (#2353, #2233) -- ImDrawList: Fixed AddCircle(), AddCircleFilled() angle step being off, which was visible when drawing a "circle" - with a small number of segments (e.g. an hexagon). (#2287) [@baktery] -- ImGuiTextBuffer: Added append() function (unformatted). -- ImFontAtlas: Added 0x2000-0x206F general punctuation range to default ChineseFull/ChineseSimplifiedCommon ranges. (#2093) -- ImFontAtlas: FreeType: Added support for imgui allocators + custom FreeType only SetAllocatorFunctions. (#2285) [@Vuhdo] -- ImFontAtlas: FreeType: Fixed using imgui_freetype.cpp in unity builds. (#2302) -- Demo: Fixed "Log" demo not initializing properly, leading to the first line not showing before a Clear. (#2318) [@bluescan] -- Demo: Added "Auto-scroll" option in Log/Console demos. (#2300) [@nicolasnoble, @ocornut] -- Examples: Metal, OpenGL2, OpenGL3, Vulkan: Fixed offsetting of clipping rectangle with ImDrawData::DisplayPos != (0,0) - when the display frame-buffer scale scale is not (1,1). While this doesn't make a difference when using master branch, - this is effectively fixing support for multi-viewport with Mac Retina Displays on those examples. (#2306) [@rasky, @ocornut] - Also using ImDrawData::FramebufferScale instead of io.DisplayFramebufferScale. -- Examples: Clarified the use the ImDrawData::DisplayPos to offset clipping rectangles. -- Examples: Win32: Using GetForegroundWindow()+IsChild() instead of GetActiveWindow() to be compatible with windows created - in a different thread or parent. (#1951, #2087, #2156, #2232) [many people] -- Examples: SDL: Using the SDL_WINDOW_ALLOW_HIGHDPI flag. (#2306, #1676) [@rasky] -- Examples: Win32: Added support for XInput gamepads (if ImGuiConfigFlags_NavEnableGamepad is enabled). -- Examples: Win32: Added support for mouse buttons 4 and 5 via WM_XBUTTON* messages. (#2264) -- Examples: DirectX9: Explicitly disable fog (D3DRS_FOGENABLE) before drawing in case user state has it set. (#2288, #2230) -- Examples: OpenGL2: Added #define GL_SILENCE_DEPRECATION to cope with newer XCode warnings. -- Examples: OpenGL3: Using GLSL 4.10 shaders for any GLSL version over 410 (e.g. 430, 450). (#2329) [@BrutPitt] - - ------------------------------------------------------------------------ - VERSION 1.67 (Released 2019-01-14) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.67 - -Breaking Changes: - -- Made it illegal to call Begin("") with an empty string. This somehow half-worked before but had various undesirable - side-effect because the window would have ID zero. In particular it is causing problems in viewport/docking branches. -- Renamed io.ConfigResizeWindowsFromEdges to io.ConfigWindowsResizeFromEdges and removed its [Beta] mark. - The addition of new configuration options in the Docking branch is pushing for a little reorganization of those names. -- Renamed ImFontAtlas::GlyphRangesBuilder to ImFontGlyphRangesBuilder. Kept redirection typedef (will obsolete). - -Other Changes: -- Added BETA api for Tab Bar/Tabs widgets: (#261, #351) - - Added BeginTabBar(), EndTabBar(), BeginTabItem(), EndTabItem(), SetTabItemClosed() API. - - Added ImGuiTabBarFlags flags for BeginTabBar(). - - Added ImGuiTabItemFlags flags for BeginTabItem(). - - Style: Added ImGuiCol_Tab, ImGuiCol_TabHovered, ImGuiCol_TabActive, ImGuiCol_TabUnfocused, ImGuiCol_TabUnfocusedActive colors. - - Demo: Added Layout->Tabs demo code. - - Demo: Added "Documents" example app showcasing possible use for tabs. - This feature was merged from the Docking branch in order to allow the use of regular tabs in your code. - (It does not provide the docking/splitting/merging of windows available in the Docking branch) -- Added ImGuiWindowFlags_UnsavedDocument window flag to append '*' to title without altering the ID, as a convenience - to avoid using the ### operator. In the Docking branch this also has an effect on tab closing behavior. -- Window, Focus, Popup: Fixed an issue where closing a popup by clicking another window with the _NoMove flag would refocus - the parent window of the popup instead of the newly clicked window. -- Window: Contents size is preserved while a window collapsed. Fix auto-resizing window losing their size for one frame when uncollapsed. -- Window: Contents size is preserved while a window contents is hidden (unless it is hidden for resizing purpose). -- Window: Resizing windows from edge is now enabled by default (io.ConfigWindowsResizeFromEdges=true). Note that - it only works _if_ the back-end sets ImGuiBackendFlags_HasMouseCursors, which the standard back-ends do. -- Window: Added io.ConfigWindowsMoveFromTitleBarOnly option. This is ignored by window with no title bars (often popups). - This affects clamping window within the visible area: with this option enabled title bars need to be visible. (#899) -- Window: Fixed using SetNextWindowPos() on a child window (which wasn't really documented) position the cursor as expected - in the parent window, so there is no mismatch between the layout in parent and the position of the child window. -- InputFloat: When using ImGuiInputTextFlags_ReadOnly the step buttons are disabled. (#2257) -- DragFloat: Fixed broken mouse direction change with power!=1.0. (#2174, #2206) [@Joshhua5] -- Nav: Fixed an keyboard issue where holding Activate/Space for longer than two frames on a button would unnecessary - keep the focus on the parent window, which could steal it from newly appearing windows. (#787) -- Nav: Fixed animated window titles from being updated when displayed in the CTRL+Tab list. (#787) -- Error recovery: Extraneous/undesired calls to End() are now being caught by an assert in the End() function closer - to the user call site (instead of being reported in EndFrame). Past the assert, they don't lead to crashes any more. (#1651) - Missing calls to End(), past the assert, should not lead to crashes or to the fallback Debug window appearing on screen. - Those changes makes it easier to integrate dear imgui with a scripting language allowing, given asserts are redirected - into e.g. an error log and stopping the script execution. -- ImFontAtlas: Stb and FreeType: Atlas width is now properly based on total surface rather than glyph count (unless overridden with TexDesiredWidth). -- ImFontAtlas: Stb and FreeType: Fixed atlas builder so missing glyphs won't influence the atlas texture width. (#2233) -- ImFontAtlas: Stb and FreeType: Fixed atlas builder so duplicate glyphs (when merging fonts) won't be included in the rasterized atlas. -- ImFontAtlas: FreeType: Fixed abnormally high atlas height. -- ImFontAtlas: FreeType: Fixed support for any values of TexGlyphPadding (not just only 1). -- ImDrawList: Optimized some of the functions for performance of debug builds where non-inline function call cost are non-negligible. - (Our test UI scene on VS2015 Debug Win64 with /RTC1 went ~5.9 ms -> ~4.9 ms. In Release same scene stays at ~0.3 ms.) -- IO: Added BackendPlatformUserData, BackendRendererUserData, BackendLanguageUserData void* for storage use by back-ends. -- IO: Renamed InputCharacters[], marked internal as was always intended. Please don't access directly, and use AddInputCharacter() instead! -- IO: AddInputCharacter() goes into a queue which can receive as many characters as needed during the frame. This is useful - for automation to not have an upper limit on typing speed. Will later transition key/mouse to use the event queue later. -- Style: Tweaked default value of style.DisplayWindowPadding from (20,20) to (19,19) so the default style as a value - which is the same as the title bar height. -- Demo: "Simple Layout" and "Style Editor" are now using tabs. -- Demo: Added a few more things under "Child windows" (changing ImGuiCol_ChildBg, positioning child, using IsItemHovered after a child). -- Examples: DirectX10/11/12: Made imgui_impl_dx10/dx11/dx12.cpp link d3dcompiler.lib from the .cpp file to ease integration. -- Examples: Allegro 5: Properly destroy globals on shutdown to allow for restart. (#2262) [@DomRe] - - ------------------------------------------------------------------------ - VERSION 1.66b (Released 2018-12-01) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.66b - -Other Changes: - -- Fixed a text rendering/clipping bug introduced in 1.66 (on 2018-10-12, commit ede3a3b9) that affect single ImDrawList::AddText() - calls with single strings larger than 10k. Text/TextUnformatted() calls were not affected, but e.g. InputText() was. [@pdoane] -- When the focused window become inactive don't restore focus to a window with the ImGuiWindowFlags_NoInputs flag. (#2213) [@zzzyap] -- Separator: Fixed Separator() outputting an extraneous empty line when captured into clipboard/text/file. -- Demo: Added ShowAboutWindow() call, previously was only accessible from the demo window. -- Demo: ShowAboutWindow() now display various Build/Config Information (compiler, os, etc.) that can easily be copied into bug reports. -- Fixed build issue with osxcross and macOS. (#2218) [@dos1] -- Examples: Setting up 'io.BackendPlatformName'/'io.BackendRendererName' fields to the current back-end can be displayed in the About window. -- Examples: SDL: changed the signature of ImGui_ImplSDL2_ProcessEvent() to use a const SDL_Event*. (#2187) - - ------------------------------------------------------------------------ - VERSION 1.66 (Released 2018-11-22) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.66 - -Breaking Changes: - -- Renamed SetScrollHere() to SetScrollHereY(). Kept redirection function (will obsolete). -- Renamed misc/stl/imgui_stl.* to misc/cpp/imgui_stdlib.* in prevision for other C++ helper files. (#2035, #2096) - -Other Changes: - -- Fixed calling SetNextWindowSize()/SetWindowSize() with non-integer values leading to - accidental alteration of window position. We now round the provided size. (#2067) -- Fixed calling DestroyContext() always saving .ini data with the current context instead - of the supplied context pointer. (#2066) -- Nav, Focus: Fixed ImGuiWindowFlags_NoBringToFrontOnFocus windows not being restoring focus - properly after the main menu bar or last focused window is deactivated. -- Nav: Fixed an assert in certain circumstance (mostly when using popups) when mouse positions stop being valid. (#2168) -- Nav: Fixed explicit directional input not re-highlighting current nav item if there is a single item in the window - and highlight has been previously disabled by the mouse. (#787) -- DragFloat: Fixed a situation where dragging with value rounding enabled or with a power curve - erroneously wrapped the value to one of the min/max edge. (#2024, #708, #320, #2075). -- DragFloat: Disabled using power curve when one edge is FLT_MAX (broken in 1.61). (#2024) -- DragFloat: Disabled setting a default drag speed when one edge is FLT_MAX. (#2024) -- SliderAngle: Added optional format argument to alter precision or localize the string. (#2150) [@podsvirov] -- Window: Resizing from edges (with io.ConfigResizeWindowsFromEdges Beta flag) extends the hit region - of root floating windows outside the window, making it easier to resize windows. Resize grips are also - extended accordingly so there are no discontinuity when hovering between borders and corners. (#1495, #822) -- Window: Added ImGuiWindowFlags_NoBackground flag to avoid rendering window background. This is mostly to allow - the creation of new flag combinations, as we could already use SetNextWindowBgAlpha(0.0f). (#1660) [@biojppm, @ocornut] -- Window: Added ImGuiWindowFlags_NoDecoration helper flag which is essentially NoTitleBar+NoResize+NoScrollbar+NoCollapse. -- Window: Added ImGuiWindowFlags_NoMouseInputs which is basically the old ImGuiWindowFlags_NoInputs (essentially - we have renamed ImGuiWindowFlags_NoInputs to ImGuiWindowFlags_NoMouseInputs). Made the new ImGuiWindowFlags_NoInputs - encompass both NoMouseInputs+NoNav, which is consistent with its description. (#1660, #787) -- Window, Inputs: Fixed resizing from edges when io.MousePos is not pixel-rounded by rounding mouse position input. (#2110) -- BeginChild(): Fixed BeginChild(const char*, ...) variation erroneously not applying the ID stack - to the provided string to uniquely identify the child window. This was undoing an intentional change - introduced in 1.50 and broken in 1.60. (#1698, #894, #713). -- TextUnformatted(): Fixed a case where large-text path would read bytes past the text_end marker depending - on the position of new lines in the buffer (it wasn't affecting the output but still not the right thing to do!) -- ListBox(): Fixed frame sizing when items_count==1 unnecessarily showing a scrollbar. (#2173) [@luk1337, @ocornut] -- ListBox(): Tweaked frame sizing so list boxes will look more consistent when FramePadding is far from ItemSpacing. -- RenderText(): Some optimization for very large text buffers, useful for non-optimized builds. -- BeginMenu(): Fixed menu popup horizontal offset being off the item in the menu bar when WindowPadding=0.0f. -- ArrowButton(): Fixed arrow shape being horizontally misaligned by (FramePadding.y-FramePadding.x) if they are different. -- Demo: Split the contents of ShowDemoWindow() into smaller functions as it appears to speed up link time with VS. (#2152) -- Drag and Drop: Added GetDragDropPayload() to peek directly into the payload (if any) from anywhere. (#143) -- ImGuiTextBuffer: Avoid heap allocation when empty. -- ImDrawList: Fixed AddConvexPolyFilled() undefined behavior when passing points_count smaller than 3, - in particular, points_count==0 could lead to a memory stomp if the draw list was previously empty. -- Examples: DirectX10, DirectX11: Removed seemingly unnecessary calls to invalidate and recreate device objects - in the WM_SIZE handler. (#2088) [@ice1000] -- Examples: GLFW: User previously installed GLFW callbacks are now saved and chain-called by the default callbacks. (#1759) -- Examples: OpenGL3: Added support for GL 4.5's glClipControl(GL_UPPER_LEFT). (#2186) -- Examples: OpenGL3+GLFW: Fixed error condition when using the GLAD loader. (#2157) [@blackball] -- Examples: OpenGL3+GLFW/SDL: Made main.cpp compile with IMGUI_IMPL_OPENGL_LOADER_CUSTOM (may be missing init). (#2178) [@doug-moen] -- Examples: SDL2+Vulkan: Fixed application shutdown which could deadlock on Linux + Xorg. (#2181) [@eRabbit0] - - ------------------------------------------------------------------------ - VERSION 1.65 (Released 2018-09-06) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.65 - -Breaking Changes: - -- Renamed stb_truetype.h to imstb_truetype.h, stb_textedit.h to imstb_textedit.h, and - stb_rect_pack.h to imstb_rectpack.h. If you were conveniently using the imgui copy of those - STB headers in your project, you will have to update your include paths. (#1718, #2036) - The reason for this change is to avoid conflicts for projects that may also be importing - their own copy of the STB libraries. Note that imgui's copy of stb_textedit.h is modified. -- Renamed io.ConfigCursorBlink to io.ConfigInputTextCursorBlink. (#1427) - -Other Changes: - -- This is a minor release following the 1.64 refactor, with a little more shuffling of code. -- Clarified and improved the source code sectioning in all files (easier to search or browse sections). -- Nav: Removed the [Beta] tag from various descriptions of the gamepad/keyboard navigation system. - Although it is not perfect and will keep being improved, it is fairly functional and used by many. (#787) -- Fixed a build issue with non-Cygwin GCC under Windows. -- Demo: Added a "Configuration" block to make io.ConfigFlags/io.BackendFlags more prominent. -- Examples: OpenGL3+SDL2: Fixed error condition when using the GLAD loader. (#2059, #2002) [@jiri] - - ------------------------------------------------------------------------ - VERSION 1.64 (Released 2018-08-31) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.64 - -Changes: - -- Moved README, CHANGELOG and TODO files to the docs/ folder. - If you are updating dear imgui by copying files, take the chance to delete the old files. -- Added imgui_widgets.cpp file, extracted and moved widgets code out of imgui.cpp into imgui_widgets.cpp. - Re-ordered some of the code remaining in imgui.cpp. - NONE OF THE FUNCTIONS HAVE CHANGED. THE CODE IS SEMANTICALLY 100% IDENTICAL, BUT _EVERY_ FUNCTIONS HAS BEEN MOVED. - Because of this, any local modifications to imgui.cpp will likely conflict when you update. - If you have any modifications to imgui.cpp, it is suggested that you first update to 1.63, then - isolate your patches. You can peak at imgui_widgets.cpp from 1.64 to get a sense of what is included in it, - then separate your changes into several patches that can more easily be applied to 1.64 on a per-file basis. - What I found worked nicely for me, was to open the diff of the old patches in an interactive merge/diff tool, - search for the corresponding function in the new code and apply the chunks manually. -- As a reminder, if you have any change to imgui.cpp it is a good habit to discuss them on the github, - so a solution applicable on the Master branch can be found. If your company has changes that you cannot - disclose you may also contact me privately. - - ------------------------------------------------------------------------ - VERSION 1.63 (Released 2018-08-29) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.63 - -Breaking Changes: - -- Style: Renamed ImGuiCol_ModalWindowDarkening to ImGuiCol_ModalWindowDimBg for consistency with other features. - Kept redirection enum (will obsolete). -- Changed ImGui::GetTime() return value from float to double to avoid accumulating floating point imprecision over time. -- Removed per-window ImGuiWindowFlags_ResizeFromAnySide Beta flag in favor `io.ConfigResizeWindowsFromEdges=true` to - enable the feature globally. (#1495) - The feature is not currently enabled by default because it is not satisfying enough, but will eventually be. -- InputText: Renamed ImGuiTextEditCallback to ImGuiInputTextCallback, ImGuiTextEditCallbackData to ImGuiInputTextCallbackData - for consistency. Kept redirection types (will obsolete). -- InputText: Removed ImGuiTextEditCallbackData::ReadOnly because it is a duplication of (::Flags & ImGuiInputTextFlags_ReadOnly). -- Renamed IsItemDeactivatedAfterChange() to IsItemDeactivatedAfterEdit() for consistency with new IsItemEdited() API. - Kept redirection function (will obsolete soonish as IsItemDeactivatedAfterChange() is very recent). -- Renamed io.OptCursorBlink to io.ConfigCursorBlink [-> io.ConfigInputTextCursorBlink in 1.65], io.OptMacOSXBehaviors to - io.ConfigMacOSXBehaviors for consistency. (#1427, #473) -- Removed obsolete redirection functions: CollapsingHeader() variation with 2 bools - marked obsolete in v1.49, May 2016. - -Other Changes: - -- ArrowButton: Fixed to honor PushButtonRepeat() setting (and internals' ImGuiItemFlags_ButtonRepeat). -- ArrowButton: Setup current line text baseline so that ArrowButton() + SameLine() + Text() are aligned properly. -- Nav: Added a CTRL+TAB window list and changed the highlight system accordingly. The change is motivated by upcoming - Docking features. (#787) -- Nav: Made CTRL+TAB skip menus + skip the current navigation window if is has the ImGuiWindow_NoNavFocus set. (#787) - While it was previously possible, you won't be able to CTRL-TAB out and immediately back in a window with the - ImGuiWindow_NoNavFocus flag. -- Window: Allow menu and popups windows from ignoring the style.WindowMinSize values so short menus/popups are not padded. (#1909) -- Window: Added global io.ConfigResizeWindowsFromEdges option to enable resizing windows from their edges and from - the lower-left corner. (#1495) -- Window: Collapse button shows hovering highlight + clicking and dragging on it allows to drag the window as well. -- Added IsItemEdited() to query if the last item modified its value (or was pressed). This is equivalent to the bool - returned by most widgets. - It is useful in some situation e.g. using InputText() with ImGuiInputTextFlags_EnterReturnsTrue. (#2034) -- InputText: Added support for buffer size/capacity changes via the ImGuiInputTextFlags_CallbackResize flag. (#2006, #1443, #1008). -- InputText: Fixed not tracking the cursor horizontally when modifying the text buffer through a callback. -- InputText: Fixed minor off-by-one issue when submitting a buffer size smaller than the initial zero-terminated buffer contents. -- InputText: Fixed a few pathological crash cases on single-line InputText widget with multiple millions characters worth of contents. - Because the current text drawing function reserve for a worst-case amount of vertices and how we handle horizontal clipping, - we currently just avoid displaying those single-line widgets when they are over a threshold of 2 millions characters, - until a better solution is found. -- Drag and Drop: Fixed an incorrect assert when dropping a source that is submitted after the target (bug introduced with 1.62 changes - related to the addition of IsItemDeactivated()). (#1875, #143) -- Drag and Drop: Fixed ImGuiDragDropFlags_SourceNoDisableHover to affect hovering state prior to calling IsItemHovered() + fixed description. (#143) -- Drag and Drop: Calling BeginTooltip() between a BeginDragSource()/EndDragSource() or BeginDropTarget()/EndDropTarget() uses adjusted tooltip - settings matching the one created when calling BeginDragSource() without the ImGuiDragDropFlags_SourceNoPreviewTooltip flag. (#143) -- Drag and Drop: Payload stays available and under the mouse if the source stops being submitted, however the tooltip is replaced by "...". (#1725) -- Drag and Drop: Added ImGuiDragDropFlags_SourceAutoExpirePayload flag to force payload to expire if the source stops being submitted. (#1725, #143). -- IsItemHovered(): Added ImGuiHoveredFlags_AllowWhenDisabled flag to query hovered status on disabled items. (#1940, #211) -- Selectable: Added ImGuiSelectableFlags_Disabled flag in the public API. (#211) -- ColorEdit4: Fixed a bug when text input or drag and drop leading to unsaturated HSV values would erroneously alter the resulting color. (#2050) -- Misc: Added optional misc/stl/imgui_stl.h wrapper to use with STL types (e.g. InputText with std::string). (#2006, #1443, #1008) - [*EDIT* renamed to misc/std/imgui_stdlib.h in 1.66] -- Misc: Added IMGUI_VERSION_NUM for easy compile-time testing. (#2025) -- Misc: Added ImGuiMouseCursor_Hand cursor enum + corresponding software cursor. (#1913, 1914) [@aiekick, @ocornut] -- Misc: Tweaked software mouse cursor offset to match the offset of the corresponding Windows 10 cursors. -- Made assertion more clear when trying to call Begin() outside of the NewFrame()..EndFrame() scope. (#1987) -- Fixed assertion when transitioning from an active ID to another within a group, affecting ColorPicker (broken in 1.62). (#2023, #820, #956, #1875). -- Fixed PushID() from keeping alive the new ID Stack top value (if a previously active widget shared the ID it would be erroneously kept alive). -- Fixed horizontal mouse wheel not forwarding the request to the parent window if ImGuiWindowFlags_NoScrollWithMouse is set. (#1463, #1380, #1502) -- Fixed a include build issue for Cygwin in non-POSIX (Win32) mode. (#1917, #1319, #276) -- ImDrawList: Improved handling for worst-case vertices reservation policy when large amount of text (e.g. 1+ million character strings) - are being submitted in a single call. It would typically have crashed InputTextMultiline(). (#200) -- OS/Windows: Fixed missing ImmReleaseContext() call in the default Win32 IME handler. (#1932) [@vby] -- Metrics: Changed io.MetricsActiveWindows to reflect the number of active windows (!= from visible windows), which is useful - for lazy/idle render mechanisms as new windows are typically not visible for one frame. -- Metrics: Added io.MetricsRenderWindow to reflect the number of visible windows. -- Metrics: Added io.MetricsActiveAllocations, moving away from the cross-context global counters than we previously used. (#1565, #1599, #586) -- Demo: Added basic Drag and Drop demo. (#143) -- Demo: Modified the Console example to use InsertChars() in the input text callback instead of poking directly into the buffer. - Although this won't make a difference in the example itself, using InsertChars() will honor the resizing callback properly. (#2006, #1443, #1008). -- Demo: Clarified the use of IsItemHovered()/IsItemActive() right after being in the "Active, Focused, Hovered & Focused Tests" section. -- Examples: Tweaked the main.cpp of each example. -- Examples: Metal: Added Metal rendering backend. (#1929, #1873) [@warrenm] -- Examples: OSX: Added early raw OSX platform backend. (#1873) [@pagghiu, @itamago, @ocornut] -- Examples: Added mac OSX & iOS + Metal example in example_apple_metal/. (#1929, #1873) [@warrenm] -- Examples: Added mac OSX + OpenGL2 example in example_apple_opengl2/. (#1873) -- Examples: OpenGL3: Added shaders more versions of GLSL. (#1938, #1941, #1900, #1513, #1466, etc.) -- Examples: OpenGL3: Tweaked the imgui_impl_opengl3.cpp to work as-is with Emscripten + WebGL 2.0. (#1941). [@o-micron] -- Examples: OpenGL3: Made the example app default to GL 3.0 + GLSL 130 (instead of GL 3.2 + GLSL 150) unless on Mac. -- Examples: OpenGL3: Added error output when shaders fail to compile/link. -- Examples: OpenGL3: Added support for glew and glad OpenGL loaders out of the box. (#2001, #2002) [@jdumas] -- Examples: OpenGL2: Disabling/restoring GL_LIGHTING and GL_COLOR_MATERIAL to increase compatibility with legacy OpenGL applications. (#1996) -- Examples: DirectX10, DirectX11: Fixed unreleased resources in Init and Shutdown functions. (#1944) -- Examples: DirectX11: Querying for IDXGIFactory instead of IDXGIFactory1 to increase compatibility. (#1989) [@matt77hias] -- Examples: Vulkan: Fixed handling of VkSurfaceCapabilitiesKHR::maxImageCount = 0 case. Tweaked present mode selections. -- Examples: Win32, Glfw, SDL: Added support for the ImGuiMouseCursor_Hand cursor. - - ------------------------------------------------------------------------ - VERSION 1.62 (Released 2018-06-22) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.62 - -Breaking Changes: - -- TreeNodeEx(): The helper ImGuiTreeNodeFlags_CollapsingHeader flag now include ImGuiTreeNodeFlags_NoTreePushOnOpen. - The flag was already set by CollapsingHeader(). - The only difference is if you were using TreeNodeEx() manually with ImGuiTreeNodeFlags_CollapsingHeader and without - ImGuiTreeNodeFlags_NoTreePushOnOpen. In this case you can remove the ImGuiTreeNodeFlags_NoTreePushOnOpen flag from - your call (ImGuiTreeNodeFlags_CollapsingHeader & ~ImGuiTreeNodeFlags_NoTreePushOnOpen). (#1864) - This also apply if you were using internal's TreeNodeBehavior() with the ImGuiTreeNodeFlags_CollapsingHeader flag directly. -- ImFontAtlas: Renamed GetGlyphRangesChinese() to GetGlyphRangesChineseFull() to distinguish new smaller variants and - discourage using the full set. (#1859) - -Other Changes: - -- Examples back-ends have been refactored to separate the platform code (e.g. Win32, Glfw, SDL2) from the renderer code (e.g. DirectX11, OpenGL3, Vulkan). - The "Platform" bindings are in charge of: mouse/keyboard/gamepad inputs, cursor shape, timing, etc. - The "Renderer" bindings are in charge of: creating the main font texture, rendering imgui draw data. - before: imgui_impl_dx11.cpp --> after: imgui_impl_win32.cpp + imgui_impl_dx11.cpp - before: imgui_impl_dx12.cpp --> after: imgui_impl_win32.cpp + imgui_impl_dx12.cpp - before: imgui_impl_glfw_gl3.cpp --> after: imgui_impl_glfw.cpp + imgui_impl_opengl2.cpp - before: imgui_impl_glfw_vulkan.cpp --> after: imgui_impl_glfw.cpp + imgui_impl_vulkan.cpp - before: imgui_impl_sdl_gl3.cpp --> after: imgui_impl_sdl2.cpp + imgui_impl_opengl2.cpp - before: imgui_impl_sdl_gl3.cpp --> after: imgui_impl_sdl2.cpp + imgui_impl_opengl3.cpp etc. - - The idea is what we can now easily combine and maintain back-ends and reduce code redundancy. Individual files are - smaller and more reusable. Integration of imgui into a new/custom engine may also be easier as there is less overlap - between "windowing / inputs" and "rendering" code, so you may study or grab one half of the code and not the other. - - This change was motivated by the fact that adding support for the upcoming multi-viewport feature requires more work - from the Platform and Renderer back-ends, and the amount of redundancy across files was becoming too difficult to - maintain. If you use default back-ends, you'll benefit from an easy update path to support multi-viewports later - (for future ImGui 1.7x). - - This is not strictly a breaking change if you keep your old bindings, but when you'll want to fully update your bindings, - expect to have to reshuffle a few things. - - Each example still has its own main.cpp which you may refer you to understand how to initialize and glue everything together. - - Some frameworks (such as the Allegro, Marmalade) handle both the "platform" and "rendering" part, and your custom engine may as well. - - Read examples/README.txt for details. -- Added IsItemDeactivated() to query if the last item was active previously and isn't anymore. Useful for Undo/Redo patterns. (#820, #956, #1875) -- Added IsItemDeactivatedAfterChange() [*EDIT* renamed to IsItemDeactivatedAfterEdit() in 1.63] if the last item was active previously, - is not anymore, and during its active state modified a value. Note that you may still get false positive (e.g. drag value and while - holding return on the same value). (#820, #956, #1875) -- Nav: Added support for PageUp/PageDown (explorer-style: first aim at bottom/top most item, when scroll a page worth of contents). (#787) -- Nav: To keep the navigated item in view we also attempt to scroll the parent window as well as the current window. (#787) -- ColorEdit3, ColorEdit4, ColorButton: Added ImGuiColorEditFlags_NoDragDrop flag to disable ColorEditX as drag target and ColorButton as drag source. (#1826) -- BeginDragDropSource(): Offset tooltip position so it is off the mouse cursor, but also closer to it than regular tooltips, - and not clamped by viewport. (#1739) -- BeginDragDropTarget(): Added ImGuiDragDropFlags_AcceptNoPreviewTooltip flag to request hiding the drag source tooltip - from the target site. (#143) -- BeginCombo(), BeginMainMenuBar(), BeginChildFrame(): Temporary style modification are restored at the end of BeginXXX - instead of EndXXX, to not affect tooltips and child windows. -- Popup: Improved handling of (erroneously) repeating calls to OpenPopup() to not close the popup's child popups. (#1497, #1533, #1865). -- InputTextMultiline(): Fixed double navigation highlight when scrollbar is active. (#787) -- InputText(): Fixed Undo corruption after pasting large amount of text (Redo will still fail when undo buffers are exhausted, - but text won't be corrupted). -- SliderFloat(): When using keyboard/gamepad and a zero precision format string (e.g. "%.0f"), always step in integer units. (#1866) -- ImFontConfig: Added GlyphMinAdvanceX/GlyphMaxAdvanceX settings useful to make a font appears monospaced, particularly useful - for icon fonts. (#1869) -- ImFontAtlas: Added GetGlyphRangesChineseSimplifiedCommon() helper that returns a list of ~2500 most common Simplified Chinese - characters. (#1859) [@JX-Master, @ocornut] -- Examples: OSX: Added imgui_impl_osx.mm binding to be used along with e.g. imgui_impl_opengl2.cpp. (#281, #1870) [@pagghiu, @itamago, @ocornut] -- Examples: GLFW: Made it possible to Shutdown/Init the backend again (by reseting the time storage properly). (#1827) [@ice1000] -- Examples: Win32: Fixed handling of mouse wheel messages to support sub-unit scrolling messages (typically sent by track-pads). (#1874) [@zx64] -- Examples: SDL+Vulkan: Added SDL+Vulkan example. -- Examples: Allegro5: Added support for ImGuiConfigFlags_NoMouseCursorChange flag. Added clipboard support. -- Examples: Allegro5: Unindexing buffers ourselves as Allegro indexed drawing primitives are buggy in the DirectX9 back-end - (will be fixed in Allegro 5.2.5+). -- Examples: DirectX12: Moved the ID3D12GraphicsCommandList* parameter from ImGui_ImplDX12_NewFrame() to ImGui_ImplDX12_RenderDrawData() which makes a lots more sense. (#301) -- Examples: Vulkan: Reordered parameters ImGui_ImplVulkan_RenderDrawData() to be consistent with other bindings, - a good occasion since we refactored the code. -- Examples: FreeGLUT: Added FreeGLUT bindings. Added FreeGLUT+OpenGL2 example. (#801) -- Examples: The functions in imgui_impl_xxx.cpp are prefixed with IMGUI_IMPL_API (which defaults to IMGUI_API) to facilitate - some uses. (#1888) -- Examples: Fixed bindings to use ImGuiMouseCursor_COUNT instead of old name ImGuiMouseCursor_Count_ so they can compile - with IMGUI_DISABLE_OBSOLETE_FUNCTIONS. (#1887) -- Misc: Updated stb_textedit from 1.09 + patches to 1.12 + minor patches. -- Internals: PushItemFlag() flags are inherited by BeginChild(). - - ------------------------------------------------------------------------ - VERSION 1.61 (Released 2018-05-14) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.61 - -Breaking Changes: - -- DragInt(): The default compile-time format string has been changed from "%.0f" to "%d", as we are not using integers internally - any more. If you used DragInt() with custom format strings, make sure you change them to use %d or an integer-compatible format. - To honor backward-compatibility, the DragInt() code will currently parse and modify format strings to replace %*f with %d, - giving time to users to upgrade their code. - If you have IMGUI_DISABLE_OBSOLETE_FUNCTIONS enabled, the code will instead assert! You may run a reg-exp search on your - codebase for e.g. "DragInt.*%f" to you find them. -- InputFloat(): Obsoleted InputFloat() functions taking an optional "int decimal_precision" in favor of an equivalent and more - flexible "const char* format", consistent with other functions. Kept redirection functions (will obsolete). -- Misc: IM_DELETE() helper function added in 1.60 doesn't set the input pointer to NULL, more consistent with standard - expectation and allows passing r-values. - -Other Changes: - -- Added DragScalar, DragScalarN: supports signed/unsigned, 32/64 bits, float/double data types. (#643, #320, #708, #1011) -- Added InputScalar, InputScalarN: supports signed/unsigned, 32/64 bits, float/double data types. (#643, #320, #708, #1011) -- Added SliderScalar, SliderScalarN: supports signed/unsigned, 32/64 bits, float/double data types. (#643, #320, #708, #1011) -- Window: Fixed pop-ups/tooltips/menus not honoring style.DisplaySafeAreaPadding as well as it should have (part of menus - displayed outside the safe area, etc.). -- Window: Fixed windows using the ImGuiWindowFlags_NoSavedSettings flag from not using the same default position as other windows. (#1760) -- Window: Relaxed the internal stack size checker to allow Push/Begin/Pop/.../End patterns to be used with PushStyleColor, PushStyleVar, PushFont without causing a false positive assert. (#1767) -- Window: Fixed the default proportional item width lagging by one frame on resize. -- Columns: Fixed a bug introduced in 1.51 where columns would affect the contents size of their container, often creating - feedback loops when ImGuiWindowFlags_AlwaysAutoResize was used. (#1760) -- Settings: Fixed saving an empty .ini file if CreateContext/DestroyContext are called without a single call to NewFrame(). (#1741) -- Settings: Added LoadIniSettingsFromDisk(), LoadIniSettingsFromMemory(), SaveIniSettingsToDisk(), SaveIniSettingsToMemory() - to manually load/save .ini settings. (#923, #993) -- Settings: Added io.WantSaveIniSettings flag, which is set to notify the application that e.g. SaveIniSettingsToMemory() - should be called. (#923, #993) -- Scrolling: Fixed a case where using SetScrollHere(1.0f) at the bottom of a window on the same frame the window height - has been growing would have the scroll clamped using the previous height. (#1804) -- MenuBar: Made BeginMainMenuBar() honor style.DisplaySafeAreaPadding so the text can be made visible on TV settings that - don't display all pixels. (#1439) [@dougbinks] -- InputText: On Mac OS X, filter out characters when the CMD modifier is held. (#1747) [@sivu] -- InputText: On Mac OS X, support CMD+SHIFT+Z for Redo. CMD+Y is also supported as major apps seems to default to support both. (#1765) [@lfnoise] -- InputText: Fixed returning true when edition is cancelled with ESC and the current buffer matches the initial value. -- InputFloat,InputFloat2,InputFloat3,InputFloat4: Added variations taking a more flexible and consistent optional - "const char* format" parameter instead of "int decimal_precision". This allow using custom formats to display values - in scientific notation, and is generally more consistent with other API. - Obsoleted functions using the optional "int decimal_precision" parameter. (#648, #712) -- DragFloat, DragInt: Cancel mouse tweak when current value is initially past the min/max boundaries and mouse is pushing - in the same direction (keyboard/gamepad version already did this). -- DragFloat, DragInt: Honor natural type limits (e.g. INT_MAX, FLT_MAX) instead of wrapping around. (#708, #320) -- DragFloat, SliderFloat: Fixes to allow input of scientific notation numbers when using CTRL+Click to input the value. (~#648, #1011) -- DragFloat, SliderFloat: Rounding-on-write uses the provided format string instead of parsing the precision from the string, - which allows for finer uses of %e %g etc. (#648, #642) -- DragFloat: Improved computation when using the power curve. Improved lost of input precision with very small steps. - Added an assert than power-curve requires a min/max range. (~#642) -- DragFloat: The 'power' parameter is only honored if the min/max parameter are also setup. -- DragInt, SliderInt: Fixed handling of large integers (we previously passed data around internally as float, which reduced - the range of valid integers). -- ColorEdit: Fixed not being able to pass the ImGuiColorEditFlags_NoAlpha or ImGuiColorEditFlags_HDR flags to SetColorEditOptions(). -- Nav: Fixed hovering a Selectable() with the mouse so that it update the navigation cursor (as it happened in the pre-1.60 navigation branch). (#787) -- Style: Changed default style.DisplaySafeAreaPadding values from (4,4) to (3,3) so it is smaller than FramePadding and has no effect on main menu bar on a computer. (#1439) -- Fonts: When building font atlas, glyphs that are missing in the fonts are not using the glyph slot to render a dummy/default glyph. Saves space and allow merging fonts with - overlapping font ranges such as FontAwesome5 which split out the Brands separately from the Solid fonts. (#1703, #1671) -- Misc: Added IMGUI_CHECKVERSION() macro to compare version string and data structure sizes in order to catch issues with mismatching compilation unit settings. (#1695, #1769) -- Misc: Added IMGUI_DISABLE_MATH_FUNCTIONS in imconfig.h to make it easier to redefine wrappers for std/crt math functions. -- Misc: Fix to allow compiling in unity builds where stb_rectpack/stb_truetype may be already included in the same compilation unit. -- Demo: Simple Overlay: Added a context menu item to enable freely moving the window. -- Demo: Added demo for DragScalar(), InputScalar(), SliderScalar(). (#643) -- Examples: Calling IMGUI_CHECKVERSION() in the main.cpp of every example application. -- Examples: Allegro 5: Added support for 32-bit indices setup via defining ImDrawIdx, to avoid an unnecessary conversion (Allegro 5 doesn't support 16-bit indices). -- Examples: Allegro 5: Renamed bindings from imgui_impl_a5.cpp to imgui_impl_allegro5.cpp. -- Examples: DirectX 9: Saving/restoring Transform because they don't seem to be included in the StateBlock. Setting shading mode to Gouraud. (#1790, #1687) [@sr-tream] -- Examples: SDL: Fixed clipboard paste memory leak in the SDL binding code. (#1803) [@eliasdaler] -- Various minor fixes, tweaks, refactoring, comments. - - ------------------------------------------------------------------------ - VERSION 1.60 (Released 2018-04-07) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.60 - -The gamepad/keyboard navigation branch (which has been in the work since July 2016) has been merged. -Gamepad/keyboard navigation is still marked as Beta and has to be enabled explicitly. -Various internal refactoring have also been done, as part of the navigation work and as part of the upcoming viewport/docking work. - -Breaking Changes: - -- Obsoleted the io.RenderDrawListsFn callback, you can call your graphics engine render function after ImGui::Render(). - e.g. with example backends, call ImDrawData* draw_data = ImGui::GetDrawData(); ImGui_ImplXXXX_RenderDrawData(draw_data). -- Reorganized context handling to be more explicit: (#1599) - - YOU NOW NEED TO CALL ImGui::CreateContext() AT THE BEGINNING OF YOUR APP, AND CALL ImGui::DestroyContext() AT THE END. - - removed Shutdown() function, as DestroyContext() serve this purpose. If you are using an old backend from the examples/ folder, remove the line that calls Shutdown(). - - you may pass a ImFontAtlas* pointer to CreateContext() to share a font atlas between contexts. Otherwise CreateContext() will create its own font atlas instance. - - removed allocator parameters from CreateContext(), they are now setup with SetAllocatorFunctions(), and shared by all contexts. - - removed the default global context and font atlas instance, which were confusing for users of DLL reloading and users of multiple contexts. -- Renamed ImGuiStyleVar_Count_ to ImGuiStyleVar_COUNT and ImGuiMouseCursor_Count_ to ImGuiMouseCursor_COUNT for consistency with other public enums. -- Fonts: Moved sample TTF files from extra_fonts/ to misc/fonts/. If you loaded files directly from the imgui repo you may need to update your paths. -- Fonts: changed ImFont::DisplayOffset.y to defaults to 0 instead of +1. Fixed vertical rounding of Ascent/Descent to match TrueType renderer. - If you were adding or subtracting (not assigning) to ImFont::DisplayOffset check if your fonts are correctly aligned vertically. (#1619) -- BeginDragDropSource(): temporarily removed the optional mouse_button=0 parameter because it is not really usable in many situations at the moment. -- Obsoleted IsAnyWindowHovered() in favor of IsWindowHovered(ImGuiHoveredFlags_AnyWindow). Kept redirection function (will obsolete). -- Obsoleted IsAnyWindowFocused() in favor of IsWindowFocused(ImGuiFocusedFlags_AnyWindow). Kept redirection function (will obsolete). -- Renamed io.WantMoveMouse to io.WantSetMousePos for consistency and ease of understanding (was added in 1.52, not used by core, and honored by some binding ahead of merging the Nav branch). -- Removed ImGuiCol_CloseButton, ImGuiCol_CloseButtonActive, ImGuiCol_CloseButtonHovered style colors as the closing cross uses regular button colors now. -- Renamed ImGuiSizeConstraintCallback to ImGuiSizeCallback, ImGuiSizeConstraintCallbackData to ImGuiSizeCallbackData. -- Removed CalcItemRectClosestPoint() which was weird and not really used by anyone except demo code. If you need it should be easy to replicate on your side (you can find the code in 1.53). -- [EDITED] Window: BeginChild() with an explicit name doesn't include the hash within the internal window name. (#1698) - This change was erroneously introduced, undoing the change done for #894, #713, and not documented properly in the original - 1.60 release Changelog. It was fixed on 2018-09-28 (1.66) and I wrote this paragraph the same day. - -Other Changes: - -- Doc: Added a Changelog file in the repository to ease comparing versions (it goes back to dear imgui 1.48), until now it was only on GitHub. -- Navigation: merged in the gamepad/keyboard navigation (about a million changes!). (#787, #323) - The initial focus was to support game controllers, but keyboard is becoming increasingly and decently usable. -- To use Gamepad Navigation: - - Set io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad to enable. - - Backend: Set io.BackendFlags |= ImGuiBackendFlags_HasGamepad + fill the io.NavInputs[] fields before calling NewFrame(). Read imgui.cpp for more details. - - See https://github.com/ocornut/imgui/issues/1599 for recommended gamepad mapping or download PNG/PSD at http://goo.gl/9LgVZW - - See 'enum ImGuiNavInput_' in imgui.h for a description of inputs. Read imgui.cpp for more details. -- To use Keyboard Navigation: - - Set io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard to enable. NewFrame() will automatically fill io.NavInputs[] based on your io.KeysDown[] + io.KeyMap[] arrays. - - Basic controls: arrows to navigate, Alt to enter menus, Space to activate item, Enter to edit text, Escape to cancel/close, Ctrl-Tab to focus windows, etc. - - When keyboard navigation is active (io.NavActive + ImGuiConfigFlags_NavEnableKeyboard), the io.WantCaptureKeyboard flag will be set. - For more advanced uses, you may want to read from io.NavActive or io.NavVisible. Read imgui.cpp for more details. -- Navigation: SetItemDefaultFocus() sets the navigation position in addition to scrolling. (#787) -- Navigation: Added IsItemFocused(), added IsAnyItemFocused(). (#787) -- Navigation: Added window flags: ImGuiWindowFlags_NoNav (== ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus). -- Navigation: Style: Added ImGuiCol_NavHighlight, ImGuiCol_NavWindowingHighlight colors. (#787) -- Navigation: TreeNode: Added ImGuiTreeNodeFlags_NavLeftJumpsBackHere flag to allow Nav Left direction to jump back to parent tree node from any of its child. (#1079) -- Navigation: IO: Added io.ConfigFlags (input), io.NavActive (output), io.NavVisible (output). (#787) -- Context: Removed the default global context and font atlas instances, which caused various problems to users of multiple contexts and DLL users. (#1565, #1599) - YOU NOW NEED TO CALL ImGui::CreateContext() AT THE BEGINNING OF YOUR APP, AND CALL ImGui::DestroyContext() AT THE END. Existing apps will assert/crash without it. -- Context: Added SetAllocatorFunctions() to rewire memory allocators (as a replacement to previous parameters to CreateContext()). Allocators are shared by all contexts and imgui helpers. (#1565, #586, #992, #1007, #1558) -- Context: You may pass a ImFontAtlas to CreateContext() to specify a font atlas to share. Shared font atlas are not owned by the context and not destroyed along with it. (#1599) -- Context: Added IMGUI_DISABLE_DEFAULT_ALLOCATORS to disable linking with malloc/free. (#1565, #586, #992, #1007, #1558) -- IO: Added io.ConfigFlags for user application to store settings for imgui and for the backend: - - ImGuiConfigFlags_NavEnableKeyboard: Enable keyboard navigation. - - ImGuiConfigFlags_NavEnableGamepad: Enable gamepad navigation (provided ImGuiBackendFlags_HasGamepad is also set by backend). - - ImGuiConfigFlags_NavEnableSetMousePos: Instruct navigation to move the mouse cursor. May be useful on TV/console systems where moving a virtual mouse is awkward. - - ImGuiConfigFlags_NoMouseCursorChange: Instruct backend to not alter mouse cursor shape and visibility (by default the example backend use mouse cursor API of the platform when available) - - ImGuiConfigFlags_NoMouse: Instruct imgui to clear mouse position/buttons in NewFrame(). This allows ignoring the mouse information passed by the backend. - - ImGuiConfigFlags_IsSRGB, ImGuiConfigFlags_IsTouchScreen: Flags for general application use. -- IO: Added io.BackendFlags for backend to store its capabilities (currently: _HasGamepad, _HasMouseCursors, _HasSetMousePos). This will be used more in the next version. -- IO: Added ImGuiKey_Insert, ImGuiKey_Space keys. Setup in all example bindings. (#1541) -- IO: Added Horizontal Mouse Wheel support for horizontal scrolling. (#1463) [@tseeker] -- IO: Added IsAnyMouseDown() helper which is helpful for bindings to handle mouse capturing. -- Window: Clicking on a window with the ImGuiWIndowFlags_NoMove flags takes an ActiveId so we can't hover something else when dragging afterwards. (#1381, #1337) -- Window: IsWindowHovered(): Added ImGuiHoveredFlags_AnyWindow, ImGuiFocusedFlags_AnyWindow flags (See Breaking Changes). Added to demo. (#1382) -- Window: Added SetNextWindowBgAlpha() helper. Particularly helpful since the legacy 5-parameters version of Begin() has been marked as obsolete in 1.53. (#1567) -- Window: Fixed SetNextWindowContentSize() with 0.0f on Y axis (or SetNextWindowContentWidth()) overwriting the contents size. Got broken on Dec 10 (1.53). (#1363) -- ArrowButton: Added ArrowButton() given a cardinal direction (e.g. ImGuiDir_Left). -- InputText: Added alternative clipboard shortcuts: Shift+Delete (cut), CTRL+Insert (copy), Shift+Insert (paste). (#1541) -- InputText: Fixed losing Cursor X position when clicking outside on an item that's submitted after the InputText(). It was only noticeable when restoring focus programmatically. (#1418, #1554) -- InputText: Added ImGuiInputTextFlags_CharsScientific flag to also allow 'e'/'E' for input of values using scientific notation. Automatically used by InputFloat. -- Style: Default style is now StyleColorsDark(), instead of the old StyleColorsClassic(). (#707) -- Style: Enable window border by default. (#707) -- Style: Exposed ImGuiStyleVar_WindowTitleAlign, ImGuiStyleVar_ScrollbarSize, ImGuiStyleVar_ScrollbarRounding, ImGuiStyleVar_GrabRounding + added an assert to reduce accidental breakage. (#1181) -- Style: Added style.MouseCursorScale help when using the software mouse cursor facility. (#939). -- Style: Close button nows display a cross before hovering. Fixed cross positioning being a little off. Uses button colors for highlight when hovering. (#707) -- Popup: OpenPopup() Always reopen existing pop-ups. (Removed imgui_internal.h's OpenPopupEx() which was used for this.) (#1497, #1533). -- Popup: BeginPopupContextItem(), BeginPopupContextWindow(), BeginPopupContextVoid(), OpenPopupOnItemClick() all react on mouse release instead of mouse press. (~#439) -- Popup: Better handling of user mistakenly calling OpenPopup() every frame (with reopen_existing option). The error will now be more visible and easier to understand. (#1497) -- Popup: BeginPopup(): Exposed extra_flags parameter that are passed through to Begin(). (#1533) -- Popup: BeginPopupModal: fixed the conditional test for SetNextWindowPos() which was polling the wrong window, which in practice made the test succeed all the time. -- Tooltip: BeginTooltip() sets ImGuiWindowFlags_NoInputs flag. -- Scrollbar: Fixed ScrollbarY enable test after ScrollbarX has been enabled being a little off (small regression from Nov 2017). (#1574) -- Scrollbar: Fixed ScrollbarX enable test subtracting WindowPadding.x (this has been there since the addition of horizontal scroll bar!). -- Columns: Clear offsets data when columns count changed. (#1525) -- Columns: Fixed a memory leak of ImGuiColumnsSet's Columns vector. (#1529) [@unprompted] -- Columns: Fixed resizing a window very small breaking some columns positioning (broken in 1.53). -- Columns: The available column extent takes consideration of the right-most clipped pixel, so the right-most column may look a little wider but will contain the same amount of visible contents. -- MenuBar: Fixed menu bar pushing a clipping rect outside of its allocated bound (usually unnoticeable). -- TreeNode: nodes with the ImGuiTreeNodeFlags_Leaf flag correctly disable highlight when DragDrop is active. (#143, #581) -- Drag and Drop: Increased payload type string to 32 characters instead of 8. (#143) -- Drag and Drop: TreeNode as drop target displays rectangle over full frame. (#1597, #143) -- DragFloat: Fix/workaround for backends which do not preserve a valid mouse position when dragged out of bounds. (#1559) -- InputFloat: Allow inputing value using scientific notation e.g. "1e+10". -- InputDouble: Added InputDouble() function. We use a format string instead of a decimal_precision parameter to also for "%e" and variants. (#1011) -- Slider, Combo: Use ImGuiCol_FrameBgHovered color when hovered. (#1456) [@stfx] -- Combo: BeginCombo(): Added ImGuiComboFlags_NoArrowButton to disable the arrow button and only display the wide value preview box. -- Combo: BeginCombo(): Added ImGuiComboFlags_NoPreview to disable the preview and only display a square arrow button. -- Combo: Arrow button isn't displayed over frame background so its blended color matches other buttons. Left side of the button isn't rounded. -- PlotLines: plot a flat line if scale_min==scale_max. (#1621) -- Fonts: Changed DisplayOffset.y to defaults to 0 instead of +1. Fixed rounding of Ascent/Descent to match TrueType renderer. - If you were adding or subtracting (not assigning) to ImFont::DisplayOffset check if your fonts are correctly aligned vertically. (#1619) -- Fonts: Updated stb_truetype from 1.14 to stb_truetype 1.19. (w/ include fix from some platforms #1622) -- Fonts: Added optional FreeType rasterizer in misc/freetype. Moved from imgui_club repo. (#618) [@Vuhdo, @mikesart, @ocornut] -- Fonts: Moved extra_fonts/ to misc/fonts/. -- ImFontAtlas: Fixed cfg.MergeMode not reusing existing glyphs if available (always overwrote). -- ImFontAtlas: Handle stb_truetype stbtt_InitFont() and stbtt_PackBegin() possible failures more gracefully, GetTexDataAsRGBA32() won't crash during conversion. (#1527) -- ImFontAtlas: Moved mouse cursor data out of ImGuiContext, fix drawing them with multiple contexts. Also remove the last remaining undesirable dependency on ImGui in imgui_draw.cpp. (#939) -- ImFontAtlas: Added ImFontAtlasFlags_NoPowerOfTwoHeight flag to disable padding font height to nearest power of two. (#1613) -- ImFontAtlas: Added ImFontAtlasFlags_NoMouseCursors flag to disable baking software mouse cursors, mostly to save texture memory on very low end hardware. (#1613) -- ImDrawList: Fixed AddRect() with anti-aliasing disabled (lower-right corner pixel was often missing, rounding looks a little better.) (#1646) -- ImDrawList: Added CloneOutput() helper to facilitate the cloning of ImDrawData or ImDrawList for multi-threaded rendering. -- Misc: Functions passed to libc qsort are explicitly marked cdecl to support compiling with vectorcall as the default calling convention. (#1230, #1611) [@RandyGaul] -- Misc: ImVec2: added [] operator. This is becoming desirable for some code working of either axes independently. Better adding it sooner than later. -- Misc: NewFrame(): Added an assert to detect incorrect filling of the io.KeyMap[] array earlier. (#1555) -- Misc: Added IM_OFFSETOF() helper in imgui.h (previously was in imgui_internal.h) -- Misc: Added IM_NEW(), IM_DELETE() helpers in imgui.h (previously were in imgui_internal.h) -- Misc: Added obsolete redirection function GetItemsLineHeightWithSpacing() (which redirects to GetFrameHeightWithSpacing()), as intended and stated in docs of 1.53. -- Misc: Added misc/natvis/imgui.natvis for visual studio debugger users to easily visualize imgui internal types. Added to examples projects. -- Misc: Added IMGUI_USER_CONFIG to define a custom configuration filename. (#255, #1573, #1144, #41) -- Misc: Added IMGUI_STB_TRUETYPE_FILENAME and IMGUI_STB_RECT_PACK_FILENAME compile time directives to use another version of the stb_ files. -- Misc: Updated stb_rect_pack from 0.10 to 0.11 (minor changes). - (Those flags are not used by ImGui itself, they only exists to make it easy for the engine/backend to pass information to the application in a standard manner.) -- Metrics: Added display of Columns state. -- Demo: Improved Selectable() examples. (#1528) -- Demo: Tweaked the Child demos, added a menu bar to the second child to test some navigation functions. -- Demo: Console: Using ImGuiCol_Text to be more friendly to color changes. -- Demo: Using IM_COL32() instead of ImColor() in ImDrawList centric contexts. Trying to phase out use of the ImColor helper whenever possible. -- Examples: Files in examples/ now include their own changelog so it is easier to occasionally update your bindings if needed. -- Examples: Using Dark theme by default. (#707). Tweaked demo code. -- Examples: Added support for horizontal mouse wheel for API that allows it. (#1463) [@tseeker] -- Examples: All examples now setup the io.BackendFlags to signify they can honor mouse cursors, gamepad, etc. -- Examples: DirectX10: Fixed erroneous call to io.Fonts->ClearInputData() + ClearTexData() that was left in DX10 example but removed in 1.47 (Nov 2015) in every other backends. (#1733) -- Examples: DirectX12: Added DirectX 12 example. (#301) [@jdm3] -- Examples: OpenGL3+GLFW,SDL: Changed GLSL shader version from 330 to 150. (#1466, #1504) -- Examples: OpenGL3+GLFW,SDL: Added a way to override the GLSL version string in the Init function. (#1466, #1504). -- Examples: OpenGL3+GLFW,SDL: Creating VAO in the render function so it can be more easily used by multiple shared OpenGL contexts. (#1217) -- Examples: OpenGL3+GLFW: Using 3.2 context instead of 3.3. (#1466) -- Examples: OpenGL: Setting up glPixelStorei() explicitly before uploading texture. -- Examples: OpenGL: Calls to glPolygonMode() are casting parameters as GLEnum to not fail with more strict bindings. (#1628) [@ilia-glushchenko] -- Examples: Win32 (DirectX9,10,11,12): Added support for mouse cursor shapes. (#1495) -- Examples: Win32 (DirectX9,10,11,12: Support for windows using the CS_DBLCLKS class flag by handling the double-click messages (WM_LBUTTONDBLCLK etc.). (#1538, #754) [@ndandoulakis] -- Examples: Win32 (DirectX9,10,11,12): Made the Win32 proc handlers not assert if there is no active context yet, to be more flexible with creation order. (#1565) -- Examples: GLFW: Added support for mouse cursor shapes (the diagonal resize cursors are unfortunately not supported by GLFW at the moment. (#1495) -- Examples: GLFW: Don't attempt to change the mouse cursor input mode if it is set to GLFW_CURSOR_DISABLED by the application. (#1202) [@PhilCK] -- Examples: SDL: Added support for mouse cursor shapes. (#1626) [@olls] -- Examples: SDL: Using SDL_CaptureMouse() to retrieve coordinates outside of client area when dragging (SDL 2.0.4+ only, otherwise using SDL_WINDOW_INPUT_FOCUS instead of previously SDL_WINDOW_MOUSE_FOCUS). (#1559) -- Examples: SDL: Enabled vsync by default so people don't come at us when the examples are running at 2000 FPS and burning a CPU core. -- Examples: SDL: Using SDL_GetPerformanceCounter() / SDL_GetPerformanceFrequency() to handle frame-rate over 1000 FPS properly. (#996) -- Examples: SDL: Using scan-code exclusively instead of a confusing mixture of scan-codes and key-codes. -- Examples: SDL: Visual Studio: Added .vcxproj file. Using %SDL2_DIR% in the default .vcxproj and build files instead of %SDL_DIR%, the earlier being more standard. -- Examples: Vulkan: Visual Studio: Added .vcxproj file. -- Examples: Apple: Fixed filenames in OSX xcode project. Various other Mac friendly fixes. [@gerryhernandez etc.] -- Examples: Visual Studio: Disabled extraneous function-level check in Release build. -- Various fixes, tweaks, internal refactoring, optimizations, comments. - - ------------------------------------------------------------------------ - VERSION 1.53 (Released 2017-12-25) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.53 - -Breaking Changes: - -- Renamed the emblematic `ShowTestWindow()` function to `ShowDemoWindow()`. Kept redirection function (will obsolete). -- Renamed `GetItemsLineHeightWithSpacing()` to `GetFrameHeightWithSpacing()` for consistency. Kept redirection function (will obsolete). -- Renamed `ImGuiTreeNodeFlags_AllowOverlapMode` flag to `ImGuiTreeNodeFlags_AllowItemOverlap`. Kept redirection enum (will obsolete). -- Obsoleted `IsRootWindowFocused()` in favor of using `IsWindowFocused(ImGuiFocusedFlags_RootWindow)`. Kept redirection function (will obsolete). (#1382) -- Obsoleted `IsRootWindowOrAnyChildFocused()` in favor of using `IsWindowFocused(ImGuiFocusedFlags_RootAndChildWindows)`. Kept redirection function (will obsolete). (#1382) -- Obsoleted `IsRootWindowOrAnyChildHovered()` in favor of using `IsWindowHovered(ImGuiHoveredFlags_RootAndChildWindows)`. Kept redirection function (will obsolete). (#1382) -- Obsoleted `SetNextWindowContentWidth() in favor of using `SetNextWindowContentSize()`. Kept redirection function (will obsolete). -- Renamed `ImGuiTextBuffer::append()` helper to `appendf()`, and `appendv()` to `appendfv()` for consistency. If you copied the 'Log' demo in your code, it uses appendv() so that needs to be renamed. -- ImDrawList: Removed 'bool anti_aliased = true' final parameter of `ImDrawList::AddPolyline()` and `ImDrawList::AddConvexPolyFilled()`. Prefer manipulating ImDrawList::Flags if you need to toggle them during the frame. -- Style, ImDrawList: Renamed `style.AntiAliasedShapes` to `style.AntiAliasedFill` for consistency and as a way to explicitly break code that manipulate those flag at runtime. You can now manipulate ImDrawList::Flags. -- Style, Begin: Removed `ImGuiWindowFlags_ShowBorders` window flag. Borders are now fully set up in the ImGuiStyle structure (see e.g. `style.FrameBorderSize`, `style.WindowBorderSize`, `style.PopupBorderSize`). - Use `ImGui::ShowStyleEditor()` to look them up. - Please note that the style system will keep evolving (hopefully stabilizing in Q1 2018), and so custom styles will probably subtly break over time. - It is recommended that you use the `StyleColorsClassic()`, `StyleColorsDark()`, `StyleColorsLight()` functions. Also see `ShowStyleSelector()`. -- Style: Removed `ImGuiCol_ComboBg` in favor of combo boxes using `ImGuiCol_PopupBg` for consistency. Combo are normal pop-ups. -- Style: Renamed `ImGuiCol_ChildWindowBg` to `ImGuiCol_ChildBg`. -- Style: Renamed `style.ChildWindowRounding` to `style.ChildRounding`, `ImGuiStyleVar_ChildWindowRounding` to `ImGuiStyleVar_ChildRounding`. -- Removed obsolete redirection functions: SetScrollPosHere() - marked obsolete in v1.42, July 2015. -- Removed obsolete redirection functions: GetWindowFont(), GetWindowFontSize() - marked obsolete in v1.48, March 2016. - -Other Changes: - -- Added `io.OptCursorBlink` option to allow disabling cursor blinking. (#1427) [renamed to io.ConfigCursorBlink in 1.63] -- Added `GetOverlayDrawList()` helper to quickly get access to a ImDrawList that will be rendered in front of every windows. -- Added `GetFrameHeight()` helper which returns `(FontSize + style.FramePadding.y * 2)`. -- Drag and Drop: Added Beta API to easily use drag and drop patterns between imgui widgets. - - Setup a source on a widget with `BeginDragDropSource()`, `SetDragDropPayload()`, `EndDragDropSource()` functions. - - Receive data with `BeginDragDropTarget()`, `AcceptDragDropPayload()`, `EndDragDropTarget()`. - - See ImGuiDragDropFlags for various options. - - The ColorEdit4() and ColorButton() widgets now support Drag and Drop. - - The API is tagged as Beta as it still may be subject to small changes. -- Drag and Drop: When drag and drop is active, tree nodes and collapsing header can be opened by hovering on them for 0.7 seconds. -- Renamed io.OSXBehaviors to io.OptMacOSXBehaviors. Should not affect users as the compile-time default is usually enough. (#473, #650) -- Style: Added StyleColorsDark() style. (#707) [@dougbinks] -- Style: Added StyleColorsLight() style. Best used with frame borders + thicker font than the default font. (#707) -- Style: Added style.PopupRounding setting. (#1112) -- Style: Added style.FrameBorderSize, style.WindowBorderSize, style.PopupBorderSize. Removed ImGuiWindowFlags_ShowBorders window flag! - Borders are now fully set up in the ImGuiStyle structure. Use ImGui::ShowStyleEditor() to look them up. (#707, fix #819, #1031) -- Style: Various small changes to the classic style (most noticeably, buttons are now using blue shades). (#707) -- Style: Renamed ImGuiCol_ChildWindowBg to ImGuiCol_ChildBg. -- Style: Renamed style.ChildWindowRounding to style.ChildRounding, ImGuiStyleVar_ChildWindowRounding to ImGuiStyleVar_ChildRounding. -- Style: Removed ImGuiCol_ComboBg in favor of combo boxes using ImGuiCol_PopupBg for consistency. (#707) -- Style: Made the ScaleAllSizes() helper rounds down every values so they are aligned on integers. -- Focus: Added SetItemDefaultFocus(), which in the current (master) branch behave the same as doing `if (IsWindowAppearing()) SetScrollHere()`. - In the navigation branch this will also set the default focus. Prefer using this when creating combo boxes with `BeginCombo()` so your code will be forward-compatible with gamepad/keyboard navigation features. (#787) -- Combo: Pop-up grows horizontally to accommodate for contents that is larger then the parent combo button. -- Combo: Added BeginCombo()/EndCombo() API which allows use to submit content of any form and manage your selection state without relying on indices. -- Combo: Added ImGuiComboFlags_PopupAlignLeft flag to BeginCombo() to prioritize keeping the pop-up on the left side (for small-button-looking combos). -- Combo: Added ImGuiComboFlags_HeightSmall, ImGuiComboFlags_HeightLarge, ImGuiComboFlags_HeightLargest to easily provide desired pop-up height. -- Combo: You can use SetNextWindowSizeConstraints() before BeginCombo() to specify specific pop-up width/height constraints. -- Combo: Offset popup position by border size so that a double border isn't so visible. (#707) -- Combo: Recycling windows by using a stack number instead of a unique id, wasting less memory (like menus do). -- InputText: Added ImGuiInputTextFlags_NoUndoRedo flag. (#1506, #1508) [@ibachar] -- Window: Fixed auto-resize allocating too much space for scrollbar when SizeContents is bigger than maximum window size (fixes c0547d3). (#1417) -- Window: Child windows with MenuBar use regular WindowPadding.y so layout look consistent as child or as a regular window. -- Window: Begin(): Fixed appending into a child window with a second Begin() from a different window stack querying the wrong window for the window->Collapsed test. -- Window: Calling IsItemActive(), IsItemHovered() etc. after a call to Begin() provides item data for the title bar, so you can easily test if the title bar is being hovered, etc. (#823) -- Window: Made it possible to use SetNextWindowPos() on a child window. -- Window: Fixed a one frame glitch. When an appearing window claimed the focus themselves, the title bar wouldn't use the focused color for one frame. -- Window: Added ImGuiWindowFlags_ResizeFromAnySide flag to resize from any borders or from the lower-left corner of a window. This requires your backend to honor GetMouseCursor() requests for full usability. (#822) -- Window: Sizing fixes when using SetNextWindowSize() on individual axises. -- Window: Hide new window for one frame until they calculate their size. Also fixes SetNextWindowPos() given a non-zero pivot. (#1694) -- Window: Made mouse wheel scrolling accommodate better to windows that are smaller than the scroll step. -- Window: SetNextWindowContentSize() adjust for the size of decorations (title bar/menu bar), but _not_ for borders are we consistently make borders not affect layout. - If you need a non-child window of an exact size with border enabled but zero window padding, you'll need to accommodate for the border size yourself. -- Window: Using the ImGuiWindowFlags_NoScrollWithMouse flag on a child window forwards the mouse wheel event to the parent window, unless either ImGuiWindowFlags_NoInputs or ImGuiWindowFlags_NoScrollbar are also set. (#1380, #1502) -- Window: Active Modal window always set the WantCaptureKeyboard flag. (#744) -- Window: Moving window doesn't use accumulating MouseDelta so straying out of imgui boundaries keeps moved imgui window at the same cursor-relative position. -- IsWindowFocused(): Added ImGuiFocusedFlags_ChildWindows flag to include child windows in the focused test. (#1382). -- IsWindowFocused(): Added ImGuiFocusedFlags_RootWindow flag to start focused test from the root (top-most) window. Obsolete IsRootWindowFocused(). (#1382) -- IsWindowHovered(): Added ImGuiHoveredFlags_ChildWindows flag to include child windows in the hovered test. (#1382). -- IsWindowHovered(): Added ImGuiHoveredFlags_RootWindow flag to start hovered test from the root (top-most) window. The combination of both flags obsoletes IsRootWindowOrAnyChildHovered(). (#1382) -- IsWindowHovered(): Fixed return value when an item is active to use the same logic as IsItemHovered(). (#1382, #1404) -- IsWindowHovered(): Always return true when current window is being moved. (#1382) -- Scrollbar: Fixed issues with vertical scrollbar flickering/appearing, typically when manually resizing and using a pattern of filling available height (e.g. full sized BeginChild). -- Scrollbar: Minor graphical fix for when scrollbar don't have enough visible space to display the full grab. -- Scrolling: Fixed padding and scrolling asymmetry where lower/right sides of a window wouldn't use WindowPadding properly + causing minor scrolling glitches. -- Tree: TreePush with zero arguments was ambiguous. Resolved by making it call TreePush(const void*). [@JasonWilkins] -- Tree: Renamed ImGuiTreeNodeFlags_AllowOverlapMode to ImGuiTreeNodeFlags_AllowItemOverlap. (#600, #1330) -- MenuBar: Fixed minor rendering issues on the right size when resizing a window very small and using rounded window corners. -- MenuBar: better software clipping to handle small windows, in particular child window don't have minimum constraints so we need to render clipped menus better. -- BeginMenu(): Tweaked the Arrow/Triangle displayed on child menu items. -- Columns: Clipping columns borders on Y axis on CPU because some Linux GPU drivers appears to be unhappy with triangle spanning large regions. (#125) -- Columns: Added ImGuiColumnsFlags_GrowParentContentsSize to internal API to restore old content sizes behavior (may be obsolete). (#1444, #125) -- Columns: Columns width is no longer lost when dragging a column to the right side of the window, until releasing the mouse button you have a chance to save them. (#1499, #125). [@ggtucker] -- Columns: Fixed dragging when using a same of columns multiple times in the frame. (#125) -- Indent(), Unindent(): Allow passing negative values. -- ColorEdit4(): Made IsItemActive() return true when picker pop-up is active. (#1489) -- ColorEdit4(): Tweaked tooltip so that the color button aligns more correctly with text. -- ColorEdit4(): Support drag and drop. Color buttons can be used as drag sources, and ColorEdit widgets as drag targets. (#143) -- ColorPicker4(): Fixed continuously returning true when holding mouse button on the sat/value/alpha locations. We only return true on value change. (#1489) -- NewFrame(): using literal strings in the most-frequently firing IM_ASSERT expressions to increase the odd of programmers seeing them (especially those who don't use a debugger). -- NewFrame() now asserts if neither Render or EndFrame have been called. Exposed EndFrame(). Made it legal to call EndFrame() more than one. (#1423) -- ImGuiStorage: Added BuildSortByKey() helper to rebuild storage from scratch. -- ImFont: Added GetDebugName() helper. -- ImFontAtlas: Added missing Thai punctuation in the GetGlyphRangesThai() ranges. (#1396) [@nProtect] -- ImDrawList: Removed 'bool anti_aliased = true' final parameter of ImDrawList::AddPolyline() and ImDrawList::AddConvexPolyFilled(). Anti-aliasing is controlled via the regular style.AntiAliased flags. -- ImDrawList: Added ImDrawList::AddImageRounded() helper. (#845) [@thedmd] -- ImDrawList: Refactored to make ImDrawList independent of ImGui. Removed static variable in PathArcToFast() which caused linking issues to some. -- ImDrawList: Exposed ImDrawCornerFlags, replaced occurrences of ~0 with an explicit ImDrawCornerFlags_All. NB: Inversed BotLeft (prev 1<<3, now 1<<2) and BotRight (prev 1<<2, now 1<<3). -- ImVector: Added ImVector::push_front() helper. -- ImVector: Added ImVector::contains() helper. -- ImVector: insert() uses grow_capacity() instead of using grow policy inconsistent with push_back(). -- Internals: Remove requirement to define IMGUI_DEFINE_PLACEMENT_NEW to use the IM_PLACEMENT_NEW macro. (#1103) -- Internals: ButtonBehavior: Fixed ImGuiButtonFlags_NoHoldingActiveID flag from incorrectly setting the ActiveIdClickOffset field. - This had no known effect within imgui code but could have affected custom drag and drop patterns. And it is more correct this way! (#1418) -- Internals: ButtonBehavior: Fixed ImGuiButtonFlags_AllowOverlapMode to avoid temporarily activating widgets on click before they have been correctly double-hovered. (#319, #600) -- Internals: Added SplitterBehavior() helper. (#319) -- Internals: Added IM_NEW(), IM_DELETE() helpers. (#484, #504, #1517) -- Internals: Basic refactor of the settings API which now allows external elements to be loaded/saved. -- Demo: Added ShowFontSelector() showing loaded fonts. -- Demo: Added ShowStyleSelector() to select among default styles. (#707) -- Demo: Renamed the emblematic ShowTestWindow() function to ShowDemoWindow(). -- Demo: Style Editor: Added a "Simplified settings" sections with check-boxes for border size and frame rounding. (#707, #1019) -- Demo: Style Editor: Added combo box to select stock styles and select current font when multiple are loaded. (#707) -- Demo: Style Editor: Using local storage so Save/Revert button makes more sense without code passing its storage. Added horizontal scroll bar. Fixed Save/Revert button to be always accessible. (#1211) -- Demo: Console: Fixed context menu issue. (#1404) -- Demo: Console: Fixed incorrect positioning which was hidden by a minor scroll issue (this would affect people who copied the Console code as is). -- Demo: Constrained Resize: Added more test cases. (#1417) -- Demo: Custom Rendering: Fixed clipping rectangle extruding out of parent window. -- Demo: Layout: Removed unnecessary and misleading BeginChild/EndChild calls. -- Demo: The "Color Picker with Palette" demo supports drag and drop. (#143) -- Demo: Display better mouse cursor info for debugging backends. -- Demo: Stopped using rand() function in demo code. -- Examples: Added a handful of extra comments (about fonts, third-party libraries used in the examples, etc.). -- Examples: DirectX9: Handle loss of D3D9 device (D3DERR_DEVICELOST). (#1464) -- Examples: Added null_example/ which is helpful for quick testing on multiple compilers/settings without relying on graphics library. -- Fix for using alloca() in "Clang with Microsoft Codechain" mode. -- Various fixes, optimizations, comments. - - ------------------------------------------------------------------------ - VERSION 1.52 (2017-10-27) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.52 - -Breaking Changes: - -- IO: `io.MousePos` needs to be set to ImVec2(-FLT_MAX,-FLT_MAX) when mouse is unavailable/missing, instead of ImVec2(-1,-1) as previously) This is needed so we can clear `io.MouseDelta` field when the mouse is made available again. -- Renamed `AlignFirstTextHeightToWidgets()` to `AlignTextToFramePadding()`. Kept inline redirection function (will obsolete). -- Obsoleted the legacy 5 parameters version of Begin(). Please avoid using it. If you need a transparent window background, uses `PushStyleColor()`. The old size parameter there was also misleading and equivalent to calling `SetNextWindowSize(size, ImGuiCond_FirstTimeEver)`. Kept inline redirection function (will obsolete). -- Obsoleted `IsItemHoveredRect()`, `IsMouseHoveringWindow()` in favor of using the newly introduced flags of `IsItemHovered()` and `IsWindowHovered()`. Kept inline redirection function (will obsolete). (#1382) -- Obsoleted 'SetNextWindowPosCenter()' in favor of using 1SetNextWindowPos()` with a pivot value which allows to do the same and more. Keep inline redirection function. -- Removed `IsItemRectHovered()`, `IsWindowRectHovered()` recently introduced in 1.51 which were merely the more consistent/correct names for the above functions which are now obsolete anyway. (#1382) -- Changed `IsWindowHovered()` default parameters behavior to return false if an item is active in another window (e.g. click-dragging item from another window to this window). You can use the newly introduced IsWindowHovered() flags to requests this specific behavior if you need it. (#1382) -- Renamed imconfig.h's `IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCS`/`IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCS` to `IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS`/`IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS` for consistency. -- Renamed ImFont::Glyph to ImFontGlyph. Kept redirection typedef (will obsolete). - -Other Changes: - -- ProgressBar: fixed rendering when straddling rounded area. (#1296) -- SliderFloat, DragFloat: Using scientific notation e.g. "%.1e" in the displayed format string doesn't mistakenly trigger rounding of the value. [@MomentsInGraphics] -- Combo, InputFloat, InputInt: Made the small button on the right side align properly with the equivalent colored button of ColorEdit4(). -- IO: Tweaked logic for `io.WantCaptureMouse` so it now outputs false when e.g. hovering over void while an InputText() is active. (#621) [@pdoane] -- IO: Fixed `io.WantTextInput` from mistakenly outputting true when an activated Drag or Slider was previously turned into an InputText(). (#1317) -- Misc: Added flags to `IsItemHovered()`, `IsWindowHovered()` to access advanced hovering-test behavior. Generally useful for pop-ups and drag and drop behaviors: (relates to ~#439, #1013, #143, #925) - - `ImGuiHoveredFlags_AllowWhenBlockedByPopup` - - `ImGuiHoveredFlags_AllowWhenBlockedByActiveItem` - - `ImGuiHoveredFlags_AllowWhenOverlapped` - - `ImGuiHoveredFlags_RectOnly` -- Input: Added `IsMousePosValid()` helper. -- Input: Added `GetKeyPressedAmount()` to easily measure press count when the repeat rate is faster than the frame rate. -- Input/Focus: Disabled TAB and Shift+TAB when CTRL key is held. -- CheckBox: Now rendering a tick mark instead of a full square. -- ColorEdit4: Added "Copy as..." option in context menu. (#346) -- ColorPicker: Improved ColorPicker hue wheel color interpolation. (#1313) [@thevaber] -- ColorButton: Reduced bordering artifact that would be particularly visible with an opaque Col_FrameBg and FrameRounding enabled. -- ColorButton: Fixed rendering color button with a checkerboard if the transparency comes from the global style.Alpha and not from the actual source color. -- TreeNode: Added `ImGuiTreeNodeFlags_FramePadding` flag to conveniently create a tree node with full padding at the beginning of a line, without having to call `AlignTextToFramePadding()`. -- Trees: Fixed calling `SetNextTreeNodeOpen()` on a collapsed window leaking to the first tree node item of the next frame. -- Layout: Horizontal layout is automatically enforced in a menu bar, so you can use non-MenuItem elements without calling SameLine(). -- Separator: Output a vertical separator when used inside a menu bar (or in general when horizontal layout is active, but that isn't exposed yet!). -- Window: Added `IsWindowAppearing()` helper (helpful e.g. as a condition before initializing some of your own things.). -- Window: Added pivot parameter to `SetNextWindowPos()`, making it possible to center or right align a window. Obsoleted `SetNextWindowPosCenter()`. -- Window: Fixed title bar color of top-most window under a modal window. -- Window: Fixed not being able to move a window by clicking on one of its child window. (#1337, #635) -- Window: Fixed `Begin()` auto-fit calculation code that predict the presence of a scrollbar so it works better when window size constraints are used. -- Window: Fixed calling `Begin()` more than once per frame setting `window_just_activated_by_user` which in turn would set enable the Appearing condition for that frame. -- Window: The implicit "Debug" window now uses a "Debug##Default" identifier instead of "Debug" to allow user creating a window called "Debug" without losing their custom flags. -- Window: Made the `ImGuiWindowFlags_NoMove` flag properly inherited from parent to child. In a setup with ParentWindow (no flag) -> Child (NoMove) -> SubChild (no flag), the user won't be able to move the parent window by clicking on SubChild. (#1381) -- Popups: Pop-ups can be closed with a right-click anywhere, without altering focus under the pop-up. (~#439) -- Popups: `BeginPopupContextItem()`, `BeginPopupContextWindow()` are now setup to allow reopening a context menu by right-clicking again. (~#439) -- Popups: `BeginPopupContextItem()` now supports a NULL string identifier and uses the last item ID if available. -- Popups: Added `OpenPopupOnItemClick()` helper which mimic `BeginPopupContextItem()` but doesn't do the BeginPopup(). -- MenuItem: Only activating on mouse release. [@Urmeli0815] (was already fixed in nav branch). -- MenuItem: Made tick mark thicker (thick mark?). -- MenuItem: Tweaks to be usable inside a menu bar (nb: it looks like a regular menu and thus is misleading, prefer using Button() and regular widgets in menu bar if you need to). (#1387) -- ImDrawList: Fixed a rare draw call merging bug which could lead to undisplayed triangles. (#1172, #1368) -- ImDrawList: Fixed a rare bug in `ChannelsMerge()` when all contents has been clipped, leading to an extraneous draw call being created. (#1172, #1368) -- ImFont: Added `AddGlyph()` building helper for use by custom atlas builders. -- ImFontAtlas: Added support for CustomRect API to submit custom rectangles to be packed into the atlas. You can map them as font glyphs, or use them for custom purposes. - After the atlas is built you can query the position of your rectangles in the texture and then copy your data there. You can use this features to create e.g. full color font-mapped icons. -- ImFontAtlas: Fixed fall-back handling when merging fonts, if a glyph was missing from the second font input it could have used a glyph from the first one. (#1349) [@inolen] -- ImFontAtlas: Fixed memory leak on build failure case when stbtt_InitFont failed (generally due to incorrect or supported font type). (#1391) (@Moka42) -- ImFontConfig: Added `RasterizerMultiply` option to alter the brightness of individual fonts at rasterization time, which may help increasing readability for some. -- ImFontConfig: Added `RasterizerFlags` to pass options to custom rasterizer (e.g. the [imgui_freetype](https://github.com/ocornut/imgui_club/tree/master/imgui_freetype) rasterizer in imgui_club has such options). -- ImVector: added resize() variant with initialization value. -- Misc: Changed the internal name formatting of child windows identifier to use slashes (instead of dots) as separator, more readable. -- Misc: Fixed compilation with `IMGUI_DISABLE_OBSOLETE_FUNCTIONS` defined. -- Misc: Marked all format+va_list functions with format attribute so GCC/Clang can warn about misuses. -- Misc: Fixed compilation on NetBSD due to missing alloca.h (#1319) [@RyuKojiro] -- Misc: Improved warnings compilation for newer versions of Clang. (#1324) (@waywardmonkeys) -- Misc: Added `io.WantMoveMouse flags` (from Nav branch) and honored in Examples applications. Currently unused but trying to spread Examples applications code that supports it. -- Misc: Added `IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS` support in imconfig.h to allow user reimplementing the `ImFormatString()` functions e.g. to use stb_printf(). (#1038) -- Misc: [Windows] Fixed default Win32 `SetClipboardText()` handler leaving the Win32 clipboard handler unclosed on failure. [@pdoane] -- Style: Added `ImGuiStyle::ScaleAllSizes(float)` helper to make it easier to have application transition e.g. from low to high DPI with a matching style. -- Metrics: Draw window bounding boxes when hovering Pos/Size; List all draw layers; Trimming empty commands like Render() does. -- Examples: OpenGL3: Save and restore sampler state. (#1145) [@nlguillemot] -- Examples: OpenGL2, OpenGL3: Save and restore polygon mode. (#1307) [@JJscott] -- Examples: DirectX11: Allow creating device with feature level 10 since we don't really need much for that example. (#1333) -- Examples: DirectX9/10/12: Using the Win32 SetCapture/ReleaseCapture API to read mouse coordinates when they are out of bounds. (#1375) [@Gargaj, @ocornut] -- Tools: Fixed binary_to_compressed_c tool to return 0 when successful. (#1350) [@benvanik] -- Internals: Exposed more helpers and unfinished features in imgui_internal.h. (use at your own risk!). -- Internals: A bunch of internal refactoring, hopefully haven't broken anything! Merged a bunch of internal changes from the upcoming Navigation branch. -- Various tweaks, fixes and documentation changes. - -Beta Navigation Branch: -(Lots of work has been done toward merging the Beta Gamepad/Keyboard Navigation branch (#787) in master.) -(Please note that this branch is always kept up to date with master. If you are using the navigation branch, some of the changes include:) -- Nav: Added `#define IMGUI_HAS_NAV` in imgui.h to ease sharing code between both branches. (#787) -- Nav: MainMenuBar now releases focus when user gets out of the menu layer. (#787) -- Nav: When applying focus to a window with only menus, the menu layer is automatically activated. (#787) -- Nav: Added `ImGuiNavInput_KeyMenu` (~Alt key) aside from ImGuiNavInput_PadMenu input as it is one differentiator of pad vs keyboard that was detrimental to the keyboard experience. Although isn't officially supported, it makes the current experience better. (#787) -- Nav: Move requests now wrap vertically inside Menus and Pop-ups. (#787) -- Nav: Allow to collapse tree nodes with NavLeft and open them with NavRight. (#787, #1079). -- Nav: It's now possible to navigate sibling of a menu-bar while navigating inside one of their child. If a Left<>Right navigation request fails to find a match we forward the request to the root menu. (#787, #126) -- Nav: Fixed `SetItemDefaultFocus` from stealing default focus when we are initializing default focus for a menu bar layer. (#787) -- Nav: Support for fall-back horizontal scrolling with PadLeft/PadRight (nb: fall-back scrolling is only used to navigate windows that have no interactive items). (#787) -- Nav: Fixed tool-tip from being selectable in the window selection list. (#787) -- Nav: `CollapsingHeader(bool*)` variant: fixed for `IsItemHovered()` not working properly in the nav branch. (#600, #787) -- Nav: InputText: Fixed using Up/Down history callback feature when Nav is enabled. (#787) -- Nav: InputTextMultiline: Fixed navigation/selection. Disabled selecting all when activating a multi-line text editor. (#787) -- Nav: More consistently drawing a (thin) navigation rectangle hover filled frames such as tree nodes, collapsing header, menus. (#787) -- Nav: Various internal refactoring. - - ------------------------------------------------------------------------ - VERSION 1.51 (2017-08-24) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.51 - -Breaking Changes: - -Work on dear imgui has been gradually resuming. It means that fixes and new features should be tackled at a faster rate than last year. However, in order to move forward with the library and get rid of some cruft, I have taken the liberty to be a little bit more aggressive than usual with API breaking changes. Read the details below and search for those names in your code! In the grand scheme of things, those changes are small and should not affect everyone, but this is technically our most aggressive release so far in term of API breakage. If you want to be extra forward-facing, you can enable `#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS` in your imconfig.h to disable the obsolete names/redirection. - -- Renamed `IsItemHoveredRect()` to `IsItemRectHovered()`. Kept inline redirection function (will obsolete). -- Renamed `IsMouseHoveringWindow()` to `IsWindowRectHovered()` for consistency. Kept inline redirection function (will obsolete). -- Renamed `IsMouseHoveringAnyWindow()` to `IsAnyWindowHovered()` for consistency. Kept inline redirection function (will obsolete). -- Renamed `ImGuiCol_Columns***` enums to `ImGuiCol_Separator***`. Kept redirection enums (will obsolete). -- Renamed `ImGuiSetCond***` types and enums to `ImGuiCond***`. Kept redirection enums (will obsolete). -- Renamed `GetStyleColName()` to `GetStyleColorName()` for consistency. Unlikely to be used by end-user! -- Added `PushStyleColor(ImGuiCol idx, ImU32 col)` overload, which _might_ cause an "ambiguous call" compilation error if you are using ImColor() with implicit cast. Cast to ImU32 or ImVec4 explicitly to fix. -- Marked the weird `IMGUI_ONCE_UPON_A_FRAME` helper macro as obsolete. Prefer using the more explicit `ImGuiOnceUponAFrame`. -- Changed `ColorEdit4(const char* label, float col[4], bool show_alpha = true)` signature to `ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0)`, where flags 0x01 is a safe no-op (hello dodgy backward compatibility!). The new `ColorEdit4`/`ColorPicker4` functions have lots of available flags! Check and run the demo window, under "Color/Picker Widgets", to understand the various new options. -- Changed signature of `ColorButton(ImVec4 col, bool small_height = false, bool outline_border = true)` to `ColorButton(const char* desc_id, ImVec4 col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0))`. This function was rarely used and was very dodgy (no explicit ID!). -- Changed `BeginPopupContextWindow(bool also_over_items=true, const char* str_id=NULL, int mouse_button=1)` signature to `(const char* str_id=NULL, int mouse_button=1, bool also_over_items=true)`. This is perhaps the most aggressive change in this update, but note that the majority of users relied on default parameters completely, so this will affect only a fraction of users of this already rarely used function. -- Removed `IsPosHoveringAnyWindow()`, which was partly broken and misleading. In the vast majority of cases, people using that function wanted to use `io.WantCaptureMouse` flag. Replaced with IM_ASSERT + comment redirecting user to `io.WantCaptureMouse`. (#1237) -- Removed the old `ValueColor()` helpers, they are equivalent to calling `Text(label)` + `SameLine()` + `ColorButton()`. -- Removed `ColorEditMode()` and `ImGuiColorEditMode` type in favor of `ImGuiColorEditFlags` and parameters to the various Color*() functions. The `SetColorEditOptions()` function allows to initialize default but the user can still change them with right-click context menu. Commenting out your old call to `ColorEditMode()` may just be fine! - -Other Changes: - -- Added flags to `ColorEdit3()`, `ColorEdit4()`. The color edit widget now has a context-menu and access to the color picker. (#346) -- Added flags to `ColorButton()`. (#346) -- Added `ColorPicker3()`, `ColorPicker4()`. The API along with those of the updated `ColorEdit4()` was designed so you may use them in various situation and hopefully compose your own picker if required. There are a bunch of available flags, check the Demo window and comment for `ImGuiColorEditFlags_`. Some of the options it supports are: two color picker types (hue bar + sat/val rectangle, hue wheel + rotating sat/val triangle), display as u8 or float, lifting 0.0..1.0 constraints (currently rgba only), context menus, alpha bar, background checkerboard options, preview tooltip, basic revert. For simple use, calling the existing `ColorEdit4()` function as you did before will be enough, as you can now open the color picker from there. (#346) [@r-lyeh, @nem0, @thennequin, @dariomanesku and @ocornut] -- Added `SetColorEditOptions()` to set default color options (e.g. if you want HSV over RGBA, float over u8, select a default picker mode etc. at startup time without a user intervention. Note that the user can still change options with the context menu unless disabled with `ImGuiColorFlags_NoOptions` or explicitly enforcing a display type/picker mode etc.). -- Added user-facing `IsPopupOpen()` function. (#891) [@mkeeter] -- Added `GetColorU32(u32)` variant that perform the style alpha multiply without a floating-point round trip, and helps makes code more consistent when using ImDrawList APIs. -- Added `PushStyleColor(ImGuiCol idx, ImU32 col)` overload. -- Added `GetStyleColorVec4(ImGuiCol idx)` which is equivalent to accessing `ImGui::GetStyle().Colors[idx]` (aka return the raw style color without alpha alteration). -- ImFontAtlas: Added `GlyphRangesBuilder` helper class, which makes it easier to build custom glyph ranges from your app/game localization data, or add into existing glyph ranges. -- ImFontAtlas: Added `TexGlyphPadding` option. (#1282) [@jadwallis] -- ImFontAtlas: Made it possible to override size of AddFontDefault() (even if it isn't really recommended!). -- ImDrawList: Added `GetClipRectMin()`, `GetClipRectMax()` helpers. -- Fixed Ini saving crash if the ImGuiWindowFlags_NoSavedSettings gets removed from a window after its creation (unlikely!). (#1000) -- Fixed `PushID()`/`PopID()` from marking parent window as Accessed (which needlessly woke up the root "Debug" window when used outside of a regular window). (#747) -- Fixed an assert when calling `CloseCurrentPopup()` twice in a row. [@nem0] -- Window size can be loaded from .ini data even if ImGuiWindowFlags_NoResize flag is set. (#1048, #1056) -- Columns: Added `SetColumnWidth()`. (#913) [@ggtucker] -- Columns: Dragging a column preserve its width by default. (#913) [@ggtucker] -- Columns: Fixed first column appearing wider than others. (#1266) -- Columns: Fixed allocating space on the right-most side with the assumption of a vertical scrollbar. The space is only allocated when needed. (#125, #913, #893, #1138) -- Columns: Fixed the right-most column from registering its content width to the parent window, which led to various issues when using auto-resizing window or e.g. horizontal scrolling. (#519, #125, #913) -- Columns: Refactored some of the columns code internally toward a better API (not yet exposed) + minor optimizations. (#913) [@ggtucker, @ocornut] -- Popups: Most pop-ups windows can be moved by the user after appearing (if they don't have explicit positions provided by caller, or e.g. sub-menu pop-up). The previous restriction was totally arbitrary. (#1252) -- Tooltip: `SetTooltip()` is expanded immediately into a window, honoring current font / styling setting. Add internal mechanism to override tooltips. (#862) -- PlotHistogram: bars are drawn based on zero-line, so negative values are going under. (#828) -- Scrolling: Fixed return values of `GetScrollMaxX()`, `GetScrollMaxY()` when both scrollbars were enabled. Tweak demo to display more data. (#1271) [@degracode] -- Scrolling: Fixes for Vertical Scrollbar not automatically getting enabled if enabled Horizontal Scrollbar straddle the vertical limit. (#1271, #246) -- Scrolling: `SetScrollHere()`, `SetScrollFromPosY()`: Fixed Y scroll aiming when Horizontal Scrollbar is enabled. (#665). -- [Windows] Clipboard: Fixed not closing Win32 clipboard on early open failure path. (#1264) -- Removed an unnecessary dependency on int64_t which failed on some older compilers. -- Demo: Rearranged everything under Widgets in a more consistent way. -- Demo: Columns: Added Horizontal Scrolling demo. Tweaked another Columns demo. (#519, #125, #913) -- Examples: OpenGL: Various makefiles for MINGW, Linux. (#1209, #1229, #1209) [@fr500, @acda] -- Examples: Enabled vsync by default in example applications, so it doesn't confuse people that the sample run at 2000+ fps and waste an entire CPU. (#1213, #1151). -- Various other small fixes, tweaks, comments, optimizations. - - ------------------------------------------------------------------------ - VERSION 1.50 (2017-06-02) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.50 - -Breaking Changes: - -- Added a void* user_data parameter to Clipboard function handlers. (#875) -- SameLine(x) with x>0.0f is now relative to left of column/group if any, and not always to left of window. This was sort of always the intent and hopefully breakage should be minimal. -- Renamed ImDrawList::PathFill() - rarely used directly - to ImDrawList::PathFillConvex() for clarity and consistency. -- Removed ImFontConfig::MergeGlyphCenterV in favor of a more multipurpose ImFontConfig::GlyphOffset. -- Style: style.WindowTitleAlign is now a ImVec2 (ImGuiAlign enum was removed). set to (0.5f,0.5f) for horizontal+vertical centering, (0.0f,0.0f) for upper-left, etc. -- BeginChild(const char*) now applies the stack id to the provided label, consistently with other functions as it should always have been. It shouldn't affect you unless (extremely unlikely) you were appending multiple times to a same child from different locations of the stack id. If that's the case, generate an id with GetId() and use it instead of passing string to BeginChild(). - -Other Changes: - -- InputText(): Added support for CTRL+Backspace (delete word). -- InputText(): OSX uses Super+Arrows for home/end. Add Shortcut+Backspace support. (#650) [@michaelbartnett] -- InputText(): Got rid of individual OSX-specific options in ImGuiIO, added a single io.OSXBehaviors flag. (#473, #650) -- InputText(): Fixed pressing home key on last character when it isn't a trailing \n (#588, #815) -- InputText(): Fixed state corruption/crash bug in stb_textedit.h redo logic when exhausting undo/redo char buffer. (#715. #681) -- InputTextMultiline(): Fixed CTRL+DownArrow moving scrolling out of bounds. -- InputTextMultiline(): Scrollbar fix for when input and latched internal buffers differs in a way that affects vertical scrollbar existence. (#725) -- ImFormatString(): Fixed an overflow handling bug with implementation of vsnprintf() that do not return -1. (#793) -- BeginChild(const char*) now applies stack id to provided label, consistent with other widgets. (#894, #713) -- SameLine() with explicit X position is relative to left of group/columns. (ref #746, #125, #630) -- SliderInt(), SliderFloat() supports reverse direction (where v_min > v_max). (#854) -- SliderInt(), SliderFloat() better support for when v_min==v_max. (#919) -- SliderInt(), SliderFloat() enforces writing back value when interacting, to be consistent with other widgets. (#919) -- SliderInt, SliderFloat(): Fixed edge case where style.GrabMinSize being bigger than slider width can lead to a division by zero. (#919) -- Added IsRectVisible() variation with explicit start-end positions. (#768) [@thedmd] -- Fixed TextUnformatted() clipping bug in the large-text path when horizontal scroll has been applied. (#692, #246) -- Fixed minor text clipping issue in window title when using font straying above usual line. (#699) -- Fixed SetCursorScreenPos() fixed not adjusting CursorMaxPos as well. -- Fixed scrolling offset when using SetScrollY(), SetScrollFromPosY(), SetScrollHere() with menu bar. -- Fixed using IsItemActive() after EndGroup() or any widget using groups. (#840, #479) -- Fixed IsItemActive() lagging by one frame on initial widget activation. (#840) -- Fixed Separator() zero-height bounding box resulting in clipping when laying exactly on top line of clipping rectangle (#860) -- Fixed PlotLines() PlotHistogram() calling with values_count == 0. -- Fixed clicking on a window's void while staying still overzealously marking .ini settings as dirty. (#923) -- Fixed assert triggering when a window has zero rendering but has a callback. (#810) -- Scrollbar: Fixed rendering when sizes are negative to reduce glitches (which can happen with certain style settings and zero WindowMinSize). -- EndGroup(): Made IsItemHovered() work when an item was activated within the group. (#849) -- BulletText(): Fixed stopping to display formatted string after the '##' mark. -- Closing the focused window restore focus to the first active root window in descending z-order .(part of #727) -- Word-wrapping: Fixed a bug where we never wrapped after a 1 character word. [@sronsse] -- Word-wrapping: Fixed TextWrapped() overriding wrap position if one is already set. (#690) -- Word-wrapping: Fixed incorrect testing for negative wrap coordinates, they are perfectly legal. (#706) -- ImGuiListClipper: Fixed automatic-height calc path dumbly having user display element 0 twice. (#661, #716) -- ImGuiListClipper: Fix to behave within column. (#661, #662, #716) -- ImDrawList: Renamed ImDrawList::PathFill() to ImDrawList::PathFillConvex() for clarity. (BREAKING API) -- Columns: End() avoid calling Columns(1) if no columns set is open, not sure why it wasn't the case already (pros: faster, cons: exercise less code). -- ColorButton(): Fix ColorButton showing wrong hex value for alpha. (#1068) [@codecat] -- ColorEdit4(): better preserve inputting value out of 0..255 range, display then clamped in Hexadecimal form. -- Shutdown() clear out some remaining pointers for sanity. (#836) -- Added IMGUI_USE_BGRA_PACKED_COLOR option in imconfig.h (#767, #844) [@thedmd] -- Style: Removed the inconsistent shadow under RenderCollapseTriangle() (~#707) -- Style: Added ButtonTextAlign, ImGuiStyleVar_ButtonTextAlign. (#842) -- ImFont: Allowing to use up to 0xFFFE glyphs in same font (increased from previous 0x8000). -- ImFont: Added GetGlyphRangesThai() helper. [@nProtect] -- ImFont: CalcWordWrapPositionA() fixed font scaling with fallback character. -- ImFont: Calculate and store the approximate texture surface to get an idea of how costly each source font is. -- ImFontConfig: Added GlyphOffset to explicitly offset glyphs at font build time, useful for merged fonts. Removed MergeGlyphCenterV. (BREAKING API) -- Clarified asserts in CheckStacksSize() when there is a stack mismatch. -- Context: Support for #define-ing GImGui and IMGUI_SET_CURRENT_CONTEXT_FUNC to enable custom thread-based hackery (#586) -- Updated stb_truetype.h to 1.14 (added OTF support, removed warnings). (#883, #976) -- Updated stb_rect_pack.h to 0.10 (removed warnings). (#883) -- Added ImGuiMouseCursor_None enum value for convenient usage by app/binding. -- Clipboard: Added a void* user_data parameter to Clipboard function handlers. (#875) (BREAKING API) -- Internals: Refactor internal text alignment options to use ImVec2, removed ImGuiAlign. (#842, #222) -- Internals: Renamed ImLoadFileToMemory to ImFileLoadToMemory to be consistent with ImFileOpen + fix mismatching .h name. (#917) -- OS/Windows: Fixed Windows default clipboard handler leaving its buffer unfreed on application's exit. (#714) -- OS/Windows: No default IME handler when compiling for Windows using GCC. (#738) -- OS/Windows: Now using _wfopen() instead of fopen() to allow passing in paths/filenames with UTF-8 characters. (#917) -- Tools: binary_to_compressed_c: Avoid ?? trigraphs sequences in string outputs which break some older compilers. (#839) -- Demo: Added an extra 3-way columns demo. -- Demo: ShowStyleEditor: show font character map / grid in more details. -- Demo: Console: Fixed a completion bug when multiple candidates are equals and match until the end. -- Demo: Fixed 1-byte off overflow in the ShowStyleEditor() combo usage. (#783) [@bear24rw] -- Examples: Accessing ImVector fields directly, feel less stl-ey. (#810) -- Examples: OpenGL*: Saving/restoring existing scissor rectangle for completeness. (#807) -- Examples: OpenGL*: Saving/restoring active texture number (the value modified by glActiveTexture). (#1087, #1088, #1116) -- Examples: OpenGL*: Saving/restoring separate color/alpha blend functions correctly. (#1120) [@greggman] -- Examples: OpenGL2: Uploading font texture as RGBA32 to increase compatibility with users shaders for beginners. (#824) -- Examples: Vulkan: Countless fixes and improvements. (#785, #804, #910, #1017, #1039, #1041, #1042, #1043, #1080) [@martty, @Loftilus, @ParticlePeter, @SaschaWillems] -- Examples: DirectX9/10/10: Only call SetCursor(NULL) is io.MouseDrawCursor is set. (#585, #909) -- Examples: DirectX9: Explicitly setting viewport to match that other examples are doing. (#937) -- Examples: GLFW+OpenGL3: Fixed Shutdown() calling GL functions with NULL parameters if NewFrame was never called. (#800) -- Examples: GLFW+OpenGL2: Renaming opengl_example/ to opengl2_example/ for clarity. -- Examples: SDL+OpenGL: explicitly setting GL_UNPACK_ROW_LENGTH to reduce issues because SDL changes it. (#752) -- Examples: SDL2: Added build .bat files for Win32. -- Added various links to language/engine bindings. -- Various other minor fixes, tweaks, comments, optimizations. - - ------------------------------------------------------------------------ - VERSION 1.49 (2016-05-09) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.49 - -Breaking Changes: - -- Renamed `SetNextTreeNodeOpened()` to `SetNextTreeNodeOpen()` for consistency, no redirection. -- Removed confusing set of `GetInternalState()`, `GetInternalStateSize()`, `SetInternalState()` functions. Now using `CreateContext()`, `DestroyContext()`, `GetCurrentContext()`, `SetCurrentContext()`. If you were using multiple contexts the change should be obvious and trivial. -- Obsoleted old signature of `CollapsingHeader(const char* label, const char* str_id = NULL, bool display_frame = true, bool default_open = false)`, as extra parameters were badly designed and rarely used. Most uses were using 1 parameter and shouldn't affect you. You can replace the "default_open = true" flag in new API with `CollapsingHeader(label, ImGuiTreeNodeFlags_DefaultOpen)`. -- Changed `ImDrawList::PushClipRect(ImVec4 rect)` to `ImDraw::PushClipRect(ImVec2 min,ImVec2 max,bool intersect_with_current_clip_rect=false)`. Note that higher-level `ImGui::PushClipRect()` is preferable because it will clip at logic/widget level, whereas `ImDrawList::PushClipRect()` only affect your renderer. -- Title bar (using ImGuiCol_TitleBg/ImGuiCol_TitleBgActive colors) isn't rendered over a window background (ImGuiCol_WindowBg color) anymore (see #655). If your TitleBg/TitleBgActive alpha was 1.0f or you are using the default theme it will not affect you. However if your TitleBg/TitleBgActive alpha was <1.0f you need to tweak your custom theme to readjust for the fact that we don't draw a WindowBg background behind the title bar. - This helper function will convert an old TitleBg/TitleBgActive color into a new one with the same visual output, given the OLD color and the OLD WindowBg color. (Or If this is confusing, just pick the RGB value from title bar from an old screenshot and apply this as TitleBg/TitleBgActive. Or you may just create TitleBgActive from a tweaked TitleBg color.) - - ImVec4 ConvertTitleBgCol(const ImVec4& win_bg_col, const ImVec4& title_bg_col) - { - float new_a = 1.0f - ((1.0f - win_bg_col.w) * (1.0f - title_bg_col.w)); - float k = title_bg_col.w / new_a; - return ImVec4((win_bg_col.x * win_bg_col.w + title_bg_col.x) * k, (win_bg_col.y * win_bg_col.w + title_bg_col.y) * k, (win_bg_col.z * win_bg_col.w + title_bg_col.z) * k, new_a); - } - -Other changes: - -- New version of ImGuiListClipper helper calculates item height automatically. See comments and demo code. (#662, #661, #660) -- Added SetNextWindowSizeConstraints() to enable basic min/max and programmatic size constraints on window. Added demo. (#668) -- Added PushClipRect()/PopClipRect() (previously part of imgui_internal.h). Changed ImDrawList::PushClipRect() prototype. (#610) -- Added IsRootWindowOrAnyChildHovered() helper. (#615) -- Added TreeNodeEx() functions. (#581, #600, #190) -- Added ImGuiTreeNodeFlags_Selected flag to display TreeNode as "selected". (#581, #190) -- Added ImGuiTreeNodeFlags_AllowOverlapMode flag. (#600) -- Added ImGuiTreeNodeFlags_NoTreePushOnOpen flag (#590). -- Added ImGuiTreeNodeFlags_NoAutoOpenOnLog flag (previously private). -- Added ImGuiTreeNodeFlags_DefaultOpen flag (previously private). -- Added ImGuiTreeNodeFlags_OpenOnDoubleClick flag. -- Added ImGuiTreeNodeFlags_OpenOnArrow flag. -- Added ImGuiTreeNodeFlags_Leaf flag, always opened, no arrow, for convenience. For simple use case prefer using TreeAdvanceToLabelPos()+Text(). -- Added ImGuiTreeNodeFlags_Bullet flag, to add a bullet to Leaf node or replace Arrow with a bullet. -- Added TreeAdvanceToLabelPos(), GetTreeNodeToLabelSpacing() helpers. (#581, #324) -- Added CreateContext()/DestroyContext()/GetCurrentContext()/SetCurrentContext(). Obsoleted nearly identical GetInternalState()/SetInternalState() functions. (#586, #269) -- Added NewLine() to undo a SameLine() and as a shy reminder that horizontal layout support hasn't been implemented yet. -- Added IsItemClicked() helper. (#581) -- Added CollapsingHeader() variant with close button. (#600) -- Fixed MenuBar missing lower border when borders are enabled. -- InputText(): Fixed clipping of cursor rendering in case it gets out of the box (which can be forced w/ ImGuiInputTextFlags_NoHorizontalScroll. (#601) -- Style: Changed default IndentSpacing from 22 to 21. (#581, #324) -- Style: Fixed TitleBg/TitleBgActive color being rendered above WindowBg color, which was inconsistent and causing visual artifact. (#655) - This broke the meaning of TitleBg and TitleBgActive. Only affect values where Alpha<1.0f. Fixed default theme. Read comments in "API BREAKING CHANGES" section to convert. -- Relative rendering of order of Child windows creation is preserved, to allow more control with overlapping children. (#595) -- Fixed GetWindowContentRegionMax() being off by ScrollbarSize amount when explicit SizeContents is set. -- Indent(), Unindent(): optional non-default indenting width. (#324, #581) -- Bullet(), BulletText(): Slightly bigger. Less polygons. -- ButtonBehavior(): fixed subtle old bug when a repeating button would also return true on mouse release (barely noticeable unless RepeatRate is set to be very slow). (#656) -- BeginMenu(): a menu that becomes disabled while open gets closed down, facilitate user's code. (#126) -- BeginGroup(): fixed using within Columns set. (#630) -- Fixed a lag in reading the currently hovered window when dragging a window. (#635) -- Obsoleted 4 parameters version of CollapsingHeader(). Refactored code into TreeNodeBehavior. (#600, #579) -- Scrollbar: minor fix for top-right rounding of scrollbar background when window has menu bar but no title bar. -- MenuItem(): the check mark renders in disabled color when menu item is disabled. -- Fixed clipping rectangle floating point representation to ensure renderer-side float point operations yield correct results in typical DirectX/GL settings. (#582, 597) -- Fixed GetFrontMostModalRootWindow(), fixing missing fade-out when a combo pop was used stacked over a modal window. (#604) -- ImDrawList: Added AddQuad(), AddQuadFilled() helpers. -- ImDrawList: AddText() refactor, moving some code to ImFont, reserving less unused vertices when large vertical clipping occurs. -- ImFont: Added RenderChar() helper. -- ImFont: Added AddRemapChar() helper. (#609) -- ImFontConfig: Clarified persistence requirement of GlyphRanges array. (#651) -- ImGuiStorage: Added bool helper functions for completeness. -- AddFontFromMemoryCompressedTTF(): Fix ImFontConfig propagation. (#587) -- Renamed majority of use of the word "opened" to "open" for clarity. Renamed SetNextTreeNodeOpened() to SetNextTreeNodeOpen(). (#625, #579) -- Examples: OpenGL3: Saving/restoring glActiveTexture() state. (#602) -- Examples: DirectX9: save/restore all device state. -- Examples: DirectX9: Removed dependency on d3dx9.h, d3dx9.lib, dxguid.lib so it can be used in a DirectXMath.h only environment. (#611) -- Examples: DirectX10/X11: Apply depth-stencil state (no use of depth buffer). (#640, #636) -- Examples: DirectX11/X11: Added comments on removing dependency on D3DCompiler. (#638) -- Examples: SDL: Initialize video+timer subsystem only. -- Examples: Apple/iOS: lowered XCode project deployment target from 10.7 to 10.11. (#598, #575) - - ------------------------------------------------------------------------ - VERSION 1.48 (2016-04-09) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.48 - -Breaking Changes: - -- Consistently honoring exact width passed to PushItemWidth() (when positive), previously it would add extra FramePadding.x*2 over that width. Some hand-tuned layout may be affected slightly. (#346) -- Style: removed `style.WindowFillAlphaDefault` which was confusing and redundant, baked alpha into `ImGuiCol_WindowBg` color. If you had a custom WindowBg color but didn't change WindowFillAlphaDefault, multiply WindowBg alpha component by 0.7. Renamed `ImGuiCol_TooltipBg` to `ImGuiCol_PopupBG`, applies to other types of pop-ups. `bg_alpha` parameter of 5-parameters version of Begin() is an override. (#337) -- InputText(): Added BufTextLen field in ImGuiTextEditCallbackData. Requesting user to update it if the buffer is modified in the callback. Added a temporary length-check assert to minimize panic for the 3 people using the callback. (#541) -- Renamed GetWindowFont() to GetFont(), GetWindowFontSize() to GetFontSize(). Kept inline redirection function (will obsolete). (#340) - -Other Changes: - -- Consistently honoring exact width passed to PushItemWidth(), previously it would add extra FramePadding.x*2 over that width. Some hand-tuned layout may be affected slightly. (#346) -- Fixed clipping of child windows within parent not taking account of child outer clipping boundaries (including scrollbar, etc.). (#506) -- TextUnformatted(): Fixed rare crash bug with large blurb of text (2k+) not finished with a '\n' and fully above the clipping Y line. (#535) -- IO: Added 'KeySuper' field to hold CMD keyboard modifiers for OS X. Updated all examples accordingly. (#473) -- Added ImGuiWindowFlags_ForceVerticalScrollbar, ImGuiWindowFlags_ForceHorizontalScrollbar flags. (#476) -- Added IM_COL32 macros to generate a U32 packed color, convenient for direct use of ImDrawList api. (#346) -- Added GetFontTexUvWhitePixel() helper, convenient for direct use of ImDrawList api. -- Selectable(): Added ImGuiSelectableFlags_AllowDoubleClick flag to allow user reacting on double-click. (@zapolnov) (#516) -- Begin(): made the close button explicitly set the boolean to false instead of toggling it. (#499) -- BeginChild()/EndChild(): fixed incorrect layout to allow widgets submitted after an auto-fitted child window. (#540) -- BeginChild(): Added ImGuiWindowFlags_AlwaysUseWindowPadding flag to ensure non-bordered child window uses window padding. (#462) -- Fixed InputTextMultiLine(), ListBox(), BeginChildFrame(), ProgressBar(): outer frame not honoring bordering. (#462, #503) -- Fixed Image(), ImageButtion() rendering a rectangle 1 px too large on each axis. (#457) -- SetItemAllowOverlap(): Promoted from imgui_internal.h to public imgui.h api. (#517) -- Combo(): Right-most button stays highlighted when pop-up is open. -- Combo(): Display pop-up above if there's isn't enough space below / or select largest side. (#505) -- DragFloat(), SliderFloat(), InputFloat(): fixed cases of erroneously returning true repeatedly after a text input modification (e.g. "0.0" --> "0.000" would keep returning true). (#564) -- DragFloat(): Always apply value when mouse is held/widget active, so that an always-reseting variable (e.g. non saved local) can be passed. -- InputText(): OS X friendly behaviors: Word movement uses ALT key; Shortcuts uses CMD key; Double-clicking text select a single word; Jumping to next word sets cursor to end of current word instead of beginning of current word. (@zhiayang), (#473) -- InputText(): Added BufTextLen in ImGuiTextEditCallbackData. Requesting user to maintain it if buffer is modified. Zero-ing structure properly before use. (#541) -- CheckboxFlags(): Added support for testing/setting multiple flags at the same time. (@DMartinek) (#555) -- TreeNode(), CollapsingHeader() fixed not being able to use "##" sequence in a formatted label. -- ColorEdit4(): Empty label doesn't add InnerSpacing.x, matching behavior of other widgets. (#346) -- ColorEdit4(): Removed unnecessary calls to scanf() when idle in hexadecimal edit mode. -- BeginPopupContextItem(), BeginPopupContextWindow(): added early out optimization. -- CaptureKeyboardFromApp() / CaptureMouseFromApp(): added argument to allow clearing the capture flag. (#533) -- ImDrawList: Fixed index-overflow check broken by AddText() casting current index back to ImDrawIdx. (#514) -- ImDrawList: Fixed incorrect removal of trailing draw command if it is a callback command. -- ImDrawList: Allow windows with only a callback only to be functional. (#524) -- ImDrawList: Fixed ImDrawList::AddRect() which used to render a rectangle 1 px too large on each axis. (#457) -- ImDrawList: Fixed ImDrawList::AddCircle() to fit precisely within bounding box like AddCircleFilled() and AddRectFilled(). (#457) -- ImDrawList: AddCircle(), AddRect() takes optional thickness parameter. -- ImDrawList: Added AddTriangle(). -- ImDrawList: Added PrimQuadUV() helper to ease custom rendering of textured quads (require primitive reserve). -- ImDrawList: Allow AddText(ImFont\* font, float font_size, ...) variant to take NULL/0.0f as default. -- ImFontAtlas: heuristic increase default texture width up for large number of glyphs. (#491) -- ImTextBuffer: Fixed empty() helper which was utterly broken. -- Metrics: allow to inspect individual triangles in draw calls. -- Demo: added more draw primitives in the Custom Rendering example. (#457) -- Demo: extra comments and example for PushItemWidth(-1) patterns. -- Demo: InputText password demo filters out blanks. (#515) -- Demo: Fixed malloc/free mismatch and leak when destructing demo console, if it has been used. (@fungos) (#536) -- Demo: plot code doesn't use ImVector to avoid heap allocation and be more friendly to custom allocator users. (#538) -- Fixed compilation on DragonFly BSD (@mneumann) (#563) -- Examples: Vulkan: Added a Vulkan example (@Loftilus) (#549) -- Examples: DX10, DX11: Saving/restoring most device state so dropping render function in your codebase shouldn't have DX device side-effects. (#570) -- Examples: DX10, DX11: Fixed ImGui_ImplDX??_NewFrame() from recreating device objects if render isn't called (g_pVB not set). -- Examples: OpenGL3: Fix BindVertexArray/BindBuffer order. (@nlguillemot) (#527) -- Examples: OpenGL: skip rendering and calling glViewport() if we have zero-fixed buffer. (#486) -- Examples: SDL2+OpenGL3: Fix context creation options. Made ImGui_ImplSdlGL3_NewFrame() signature match GL2 one. (#468, #463) -- Examples: SDL2+OpenGL2/3: Fix for high-dpi displays. (@nickgravelyn) -- Various extra comments and clarification in the code. -- Various other fixes and optimizations. - - ------------------------------------------------------------------------ - VERSION 1.47 (2015-12-25) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.47 - -Changes: - -- Rebranding "ImGui" -> "dear imgui" as an optional first name to reduce ambiguity with IMGUI term. (#21) -- Added ProgressBar(). (#333) -- InputText(): Added ImGuiInputTextFlags_Password mode: hide display, disable logging/copying to clipboard. (#237, #363, #374) -- Added GetColorU32() helper to retrieve color given enum with global alpha and extra applied. -- Added ImGuiIO::ClearInputCharacters() superfluous helper. -- Fixed ImDrawList draw command merging bug where using PopClipRect() along with PushTextureID()/PopTextureID() functions - would occasionally restore an incorrect clipping rectangle. -- Fixed ImDrawList draw command merging so PushTextureID(XXX)/PopTextureID()/PushTextureID(XXX) sequence are now properly merged. -- Fixed large popups positioning issues when their contents on either axis is larger than DisplaySize, - and WindowPadding < DisplaySafeAreaPadding. -- Fixed border rendering in various situations when using non-pixel aligned glyphs. -- Fixed border rendering of windows to always contain the border within the window. -- Fixed Shutdown() leaking font atlas data if NewFrame() was never called. (#396, #303) -- Fixed int>void\* warnings for 64-bit architectures with fancy warnings enabled. -- Renamed the dubious Color() helpers to ValueColor() - dangerously named, rarely used and probably to be made obsolete. -- InputText(): Fixed and better handling of using keyboard while mouse button if being held and dragging. (#429) -- InputText(): Replace OS IME (Input Method Editor) cursor on top-left when we are not text editing. -- TreeNode(), CollapsingHeader(), Bullet(), BulletText(): various sizing and layout fixes to better support laying out - multiple item with different height on same line. (#414, #282) -- Begin(): Initial window creation with ImGuiWindowFlags_NoBringToFrontOnFocus flag pushes it at the front of global window list. -- BeginPopupContextWindow() and BeginPopupContextVoid() reopen window on subsequent click. (#439) -- ColorEdit4(): Fixed broken tooltip on hovering the color button. (actually fixes #373, #380) -- ImageButton(): uses FrameRounding up to a maximum of available framing size. (#394) -- Columns: Fixed bug with indentation within columns, also making code a bit shorter/faster. (#414, #125) -- Columns: Columns set with no implicit id include the columns count within the id to reduce collisions. (#125) -- Columns: Removed one unnecessary allocation when columns are not used by a window. (#125) -- ImFontAtlas: Tweaked GetGlyphRangesJapanese() so it is easier to modify. -- ImFontAtlas: Updated stb_rect_pack.h to 0.08. -- Metrics: Fixed computing ImDrawCmd bounding box when the draw buffer have been unindexed. -- Demo: Added a simple "Property Editor" demo applet. (#125, #414) -- Demo: Fixed assertion in "Custom Rendering" demo when holding both mouse buttons. (#393) -- Demo: Lots of extra comments, fixes. -- Demo: Tweaks to Style Editor. -- Examples: Not clearing input data/tex data in atlas (will be required for dynamic atlas anyway). -- Examples: Added /Zi (output debug information) to Win32 batch files. -- Examples: Various fixes for resizing window and recreating graphic context. -- Examples: OpenGL2/3: Save/restore viewport as part of default render function. (#392, #441). -- Examples; OpenGL3: Fixed gl3w.c for Linux when compiled with a C++ compiler. (#411) -- Examples: DirectX: Removed assumption about Unicode build in example main.cpp. (#399) -- Examples: DirectX10: Added DirectX10 example. (#424) -- Examples: DirectX11: Downgraded requirement from shader model 5.0 to 4.0. (#420) -- Examples: DirectX11: Removed Debug flag from graphics context. (#415) -- Examples: Added SDL+OpenGL3 example. (#356) - - ------------------------------------------------------------------------ - VERSION 1.46 (2015-10-18) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.46 - -Changes: - -- Begin*(): added ImGuiWindowFlags_NoFocusOnAppearing flag. (#314) -- Begin*(): added ImGuiWindowFlags_NoBringToFrontOnFocus flag. -- Added GetDrawData() alternative to setting a Render function pointer in ImGuiIO structure. -- Added SetClipboardText(), GetClipboardText() helper shortcuts that user code can call directly without reading - from the ImGuiIO structure (to match MemAlloc/MemFree) -- Fixed handling of malformed UTF-8 at the end of a non-zero terminated string range. -- Fixed mouse click detection when passing DeltaTime 0.0. (#338) -- Fixed IsKeyReleased() and IsMouseReleased() returning true on the first frame. -- Fixed using SetNextWindow\* functions on Modal windows with a ImGuiSetCond_Appearing condition. (#377) -- IsMouseHoveringRect(): Added 'bool clip' parameter to disable clipping provided rectangle. (#316) -- InputText(): added ImGuiInputTextFlags_ReadOnly flag. (#211) -- InputText(): lose cursor/undo-stack when reactivating focus is buffer has changed size. -- InputText(): fixed ignoring text inputs when ALT or ALTGR are pressed. (#334) -- InputText(): fixed mouse-dragging not tracking the cursor when text doesn't fit. (#339) -- InputText(): fixed cursor pixel-perfect alignment when horizontally scrolling. -- InputText(): fixed crash when passing a buf_size==0 (which can be of use for read-only selectable text boxes). (#360) -- InputFloat() fixed explicit precision modifier, both display and input were broken. -- PlotHistogram(): improved rendering of histogram with a lot of values. -- Dummy(): creates an item so functions such as IsItemHovered() can be used. -- BeginChildFrame() helper: added the extra_flags parameter. -- Scrollbar: fixed rounding of background + child window consistenly have ChildWindowBg color under ScrollbarBg fill. (#355). -- Scrollbar: background color less translucent in default style so it works better when changing background color. -- Scrollbar: fixed minor rendering offset when borders are enabled. (#365) -- ImDrawList: fixed 1 leak per ImDrawList using the ChannelsSplit() API (via Columns). (#318) -- ImDrawList: fixed rectangle rendering glitches with width/height <= 1/2 and rounding enabled. -- ImDrawList: AddImage() uv parameters default to (0,0) and (1,1). -- ImFontAtlas: Added TexDesiredWidth and tweaked default cheapo best-width choice. (#327) -- ImFontAtlas: Added GetGlyphRangesKorean() helper to retrieve unicode ranges for Korean. (#348) -- ImGuiTextFilter::Draw() helper return bool and build when filter is modified. -- ImGuiTextBuffer: added c_str() helper. -- ColorEdit4(): fixed hovering the color button always showing 1.0 alpha. (#373) -- ColorConvertFloat4ToU32() round the floats instead of truncating them. -- Window: Fixed window lower-right clipping limit so it plays more friendly with both OpenGL and DirectX coordinates. -- Internal: Extracted a EndFrame() function out of Render() but kept it internal/private + clarified some asserts. (#335) -- Internal: Added missing IMGUI_API definitions in imgui_internal.h (#326) -- Internal: ImLoadFileToMemory() return void\* instead of taking void*\* + allow optional int\* file_size. -- Demo: Horizontal scrollbar demo allows to enable simultanaeous scrollbars on both axises. -- Tools: binary_to_compressed_c.cpp: added -nocompress option. -- Examples: Added example for the Marmalade platform. -- Examples: Added batch files to build Windows examples with VS. -- Examples: OpenGL3: Saving/restoring more GL state correctly. (#347) -- Examples: OpenGL2/3: Added msys2/mingw64 target to Makefiles. - - ------------------------------------------------------------------------ - VERSION 1.45 (2015-09-01) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.45 - -Breaking Changes: - -- With the addition of better horizontal scrolling primitives I had to make some consistency fixes. - `GetCursorPos()` `SetCursorPos()` `GetContentRegionMax()` `GetWindowContentRegionMin()` `GetWindowContentRegionMax()` - are now incorporating the scrolling amount. They were incorrectly not incorporating this amount previously. - It PROBABLY shouldn't break anything, but that depends on how you used them. Namely: - - If you always used SetCursorPos() with values relative to GetCursorPos() there shouldn't be a problem. - However if you used absolute coordinates, note that SetCursorPosY(100.0f) will put you at +100 from the initial Y position (which may be scrolled out of the view), NOT at +100 from the window top border. Since there wasn't any official scrolling value on X axis (past just manually moving the cursor) this can only affect you if you used to set absolute coordinates on the Y axis which is hopefully rare/unlikely, and trivial to fix. - - The value of GetWindowContentRegionMax() isn't necessarily close to GetWindowWidth() if horizontally scrolling. - Previously they were roughly interchangeable (roughly because the content region exclude window padding). - -Other Changes: - -- Added Horizontal Scrollbar via ImGuiWindowFlags_HorizontalScroll (#246). -- Added GetScrollX(), GetScrollX(), GetScrollMaxX() apis (#246). -- Added SetNextWindowContentSize(), SetNextWindowContentWidth() to explicitly set the content size of a window, which - define the range of scrollbar. When set explicitly it also define the base value from which widget width are derived. -- Added IO.WantTextInput telling when ImGui is expecting text input, so that e.g. OS on-screen keyboard can be enabled. -- Added printf attribute to printf-like text formatting functions (Clang/GCC). -- Added GetMousePosOnOpeningCurrentPopup() helper. -- Added GetContentRegionAvailWidth() helper. -- Malformed UTF-8 data don't terminate string, output 0xFFFD instead (#307). -- ImDrawList: Added AddBezierCurve(), PathBezierCurveTo() API for cubic bezier curves (#311). -- ImDrawList: Allow to override ImDrawIdx type (#292). -- ImDrawList: Added an assert on overflowing index value (#292). -- ImDrawList: Fixed issues with channels split/merge. Now functional without manually adding a draw cmd. Added comments. -- ImDrawData: Added ScaleClipRects() helper useful when rendering scaled. (#287). -- Fixed Bullet() inconsistent layout behaviour when clipped. -- Fixed IsWindowHovered() not taking account of window hoverability (may be disabled because of a popup). -- Fixed InvisibleButton() not honoring negative size consistently with other widgets that do so. -- Fixed OpenPopup() accessing current window, effectively opening "Debug" when called from an empty window stack. -- TreeNode(): Fixed IsItemHovered() result being inconsistent with interaction visuals (#282). -- TreeNode(): Fixed mouse interaction padding past the node label being accounted for in layout (#282). -- BeginChild(): Passing a ImGuiWindowFlags_NoMove inhibits moving parent window from this child. -- BeginChild() fixed missing rounding for child sizes which leaked into layout and have items misaligned. -- Begin(): Removed default name = "Debug" parameter. We already have a "Debug" window pushed to the stack in the first place so it's not really a useful default. -- Begin(): Minor fixes with windows main clipping rectangle (e.g. child window with border). -- Begin(): Window flags are only read on the first call of the frame. Subsequent calls ignore flags, which allows appending to a window without worryin about flags. -- InputText(): ignore character input when ctrl/alt are held. (Normally those text input are ignored by most wrappers.) (#279). -- Demo: Fixed incorrectly formed string passed to Combo (#298). -- Demo: Added simple Log demo. -- Demo: Added horizontal scrolling example + enabled in console, log and child examples (#246). -- Style: made scrollbars rounded by default. Because nice. Minor menu bar background alpha tweak. (#246) -- Metrics: display indices along with triangles count (#299) and some internal state. -- ImGuiTextFilter::PassFilter() supports string range. Added [] helper to ImGuiTextBuffer. -- ImGuiTextFilter::Draw() default parameter width=0.0f for no override, allow override with negative values. -- Examples: OpenGL2/OpenGL3: fix for retina displays. Default font current lack crispness. -- Examples: OpenGL2/OpenGL3: save/restore more GL state correctly. -- Examples: DirectX9/DirectX11: resizing buffers dynamically (#299). -- Examples: DirectX9/DirectX11: added missing middle mouse button to Windows event handler. -- Examples: DirectX11: fix for Visual Studio 2015 presumably shipping with an updated version of DX11. -- Examples: iOS: fixed missing files in project. - - ------------------------------------------------------------------------ - VERSION 1.44 (2015-08-08) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.44 - -Breaking Changes: - -- imgui.cpp has been split intro extra files: imgui_demo.cpp, imgui_draw.cpp, imgui_internal.h. - Add the two extra .cpp to your project or #include them from another .cpp file. (#219) - -Other Changes: - -- Internal data structure and several useful functions are now exposed in imgui_internal.h. This should make it easier - and more natural to extend ImGui. However please note that none of the content in imgui_internal.h is guaranteed - for forward-compatibility and code using those types/functions may occasionally break. (#219) -- All sample code is in imgui_demo.cpp. Please keep this file in your project and consider allowing your code to call - the ShowTestWindow() function as de-facto guide to ImGui features. It will be stripped out by the linker when unused. -- Added GetContentRegionAvail() helper (basically GetContentRegionMax() - GetCursorPos()). -- Added ImGuiWindowFlags_NoInputs for totally input-passthru window. -- Button(): honor negative size consistently with other widgets that do so (width -100 to align the button 100 pixels - before the right-most position of the contents region). -- InputTextMultiline(): honor negative size consistently with other widgets that do so. -- Combo() clamp popup to lower edge of visible area. -- InputInt(): value doesn't pass through an int>float>int casting chain, fix handling lost of precision with "large" integer. -- InputInt() allow hexadecimal input (awkwardly via ImGuiInputTextFlags_CharsHexadecimal but we will allow format - string in InputInt* later). -- Checkbox(), RadioButton(): fixed scaling of checkbox and radio button for the filling of "active" visual. -- Columns: never assume horizontal space for scrollbar if NoScrollbar flag is explicitly set. -- Slider: fixed using FramePadding between frame and grab visual. Scaling that spacing would look odd. -- Fixed lower-right resize grip hit box not scaling along with its rendered size (#287) -- ImDrawList: Fixed angles in ImDrawList::PathArcTo(), PathArcToFast() (v1.43) being off by an extra PI for no reason. -- ImDrawList: Added ImDrawList::AddText() shorthand helper. -- ImDrawList: Add missing support for anti-aliased thick-lines (#133, also ref #288) -- ImFontAtlas: Added AddFontFromMemoryCompressedBase85TTF() to load base85 encoded font string. Default font encoded - as base85 saves ~100 lines / 26 KB of source code. Added base85 output to the binary_to_compressed_c tool. -- Build fix for MinGW (#276). -- Examples: OpenGL3: Fixed running on script core profiles for OSX (#277). -- Examples: OpenGL3: Simplified code using glBufferData for vertices as well (#277, #278) -- Examples: DirectX11: Clear font texture view to ensure Release() doesn't get called twice (#290). -- Updated to stb_truetype 1.07 (back to vanilla version as our minor changes are now in master & fix unlikely assert - with odd fonts (#280) - - ------------------------------------------------------------------------ - VERSION 1.43 (2015-07-17) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.43 - -Breaking Changes: - -- This is a rather important release and we unfortunately had to break the rendering API. - ImGui now requires you to render indexed vertices instead of non-indexed ones. The fix should be very easy. - Sorry for that! This change is saving a fair amount of CPU/GPU and enables us to get anti-aliasing for a marginal cost. - Each ImDrawList now contains both a vertex buffer and an index buffer. For each command, render ElemCount/3 triangles - using indices from the index buffer. -- If you are using a vanilla copy of one of the imgui_impl_XXXX.cpp provided in the example, you just need to update - your copy and you can ignore the rest. -- The signature of the io.RenderDrawListsFn handler has changed - From: ImGui_XXXX_RenderDrawLists(ImDrawList** const cmd_lists, int cmd_lists_count) - To: ImGui_XXXX_RenderDrawLists(ImDrawData* draw_data) - With: argument 'cmd_lists' -> 'draw_data->CmdLists' - argument 'cmd_lists_count' -> 'draw_data->CmdListsCount' - ImDrawList 'commands' -> 'CmdBuffer' - ImDrawList 'vtx_buffer' -> 'VtxBuffer' - ImDrawList n/a -> 'IdxBuffer' (new) - ImDrawCmd 'vtx_count' -> 'ElemCount' - ImDrawCmd 'clip_rect' -> 'ClipRect' - ImDrawCmd 'user_callback' -> 'UserCallback' - ImDrawCmd 'texture_id' -> 'TextureId' -- If you REALLY cannot render indexed primitives, you can call the draw_data->DeIndexAllBuffers() method to de-index - the buffers. This is slow and a waste of CPU/GPU. Prefer using indexed rendering! - Refer to code in the examples/ folder or ask on the GitHub if you are unsure of how to upgrade. Please upgrade! - -Other Changes: - -- Added anti-aliasing on lines and shapes based on primitives by @MikkoMononen (#133). - Between the use of indexed-rendering and the fact that the entire rendering codebase has been optimized and massaged - enough, with anti-aliasing enabled ImGui 1.43 is now running FASTER than 1.41. - Made some extra effort in making the code run faster in your typical Debug build. -- Anti-aliasing can be disabled in the ImGuiStyle structure via the AntiAliasedLines/AntiAliasedShapes fields for further gains. -- ImDrawList: Added AddPolyline(), AddConvexPolyFilled() with optional anti-aliasing. -- ImDrawList: Added stateful path building and stroking API. PathLineTo(), PathArcTo(), PathRect(), PathFill(), PathStroke() - with optional anti-aliasing. -- ImDrawList: Added AddRectFilledMultiColor() helper. -- ImDrawList: Added multi-channel rendering so out of order elements can be rendered in separate channels and then merged - back together (used by columns). -- ImDrawList: Fixed merging draw commands when equal clip rectangles are in the two first commands. -- ImDrawList: Fixed window draw lists not destructed properly on Shutdown(). -- ImDrawData: Added DeIndexAllBuffers() helper. -- Added lots of new font options ImFontAtlas::AddFont() and the new ImFontConfig structure. - - Added support for oversampling (ImFontConfig: OversampleH, OversampleV) and sub-pixel positioning (ImFontConfig: PixelSnapH). - Oversampling allows sub-pixel positioning but can also be used as a way to get some leeway with scaling fonts without re-rasterizing. - - Added GlyphExtraSpacing option to add extra horizontal spacing between characters (#242). - - Added MergeMode option to merge glyphs from different font inputs into a same font (#182, #232). - - Added FontDataOwnedByAtlas option to keep ownership from the TTF data buffer and request the atlas to make a copy (#220). -- Updated to stb_truetype 1.06 (+ minor mods) with better font rasterization. -- InputText: Added ImGuiInputTextFlags_NoHorizontalScroll flag. -- InputText: Added ImGuiInputTextFlags_AlwaysInsertMode flag. -- InputText: Added HasSelection() helper in ImGuiTextEditCallbackData as a clarification. -- InputText: Fix for using END key on a multi-line text editor (#275) -- Columns: Dispatch render of each column in a sub-draw list and merge on closure, saving a lot of draw calls! (#125) -- Popups: Fixed Combo boxes inside menus. (#272) -- Style: Added GrabRounding setting to make the sliders etc. grabs rounded. -- Changed SameLine() parameters from int to float. -- Fixed incorrect assert triggering when code stole ActiveID from user moving a window by calling e.g. SetKeyboardFocusHere(). -- Fixed CollapsingHeader() label rendering outside its frame in columns context where ClipRect max isn't aligned with the - right-side of the header. -- Metrics window: calculate bounding box of actual vertices when hovering a draw list. -- Examples: Showing more information in the Fonts section. -- Examples: Added a gratuitous About window. -- Examples: Updated all examples code (OpenGL/DX9/DX11/SDL/Allegro/iOS) to use indexed rendering. -- Examples: Fixed the SDL2 example to support Unicode text input (#274). - - ------------------------------------------------------------------------ - VERSION 1.42 (2015-07-08) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.42 - -Breaking Changes: - -- Renamed SetScrollPosHere() to SetScrollHere(). Kept inline redirection function (will obsolete). -- Renamed GetScrollPosY() to GetScrollY(). Necessary to reduce confusion and make scrolling API consistent, - because positions (e.g. cursor position) are not equivalent to scrolling amount. -- Removed obsolete GetDefaultFontData() function that would assert anyway. - If you are updating from <1.30 you'll get a compile error instead of an assertion. (obsoleted 2015/01/11) - -Other Changes: - -- Added SDL2 example application (courtesy of @CedricGuillemet) -- Added iOS example application (courtesy of @joeld42) -- Added Allegro 5 example application (courtesy of @bggd) -- Added TitleBgActive color in style so focused window is made visible. (#253) -- Added CaptureKeyboardFromApp() / CaptureMouseFromApp() to manually enforce inputs capturing. -- Added DragFloatRange2() DragIntRange2() helpers. (#76) -- Added a Y centering ratio to SetScrollFromCursorPos() which can be used to aim the top or bottom of the window. (#150) -- Added SetScrollY(), SetScrollFromPos(), GetCursorStartPos() for manual scrolling manipulations. (#150). -- Added GetKeyIndex() helper for converting from ImGuiKey_\* enum to user's keycodes. Basically pulls from io.KeysMap[]. -- Added missing ImGuiKey_PageUp, ImGuiKey_PageDown so more UI code can be written without referring to implementation-side keycodes. -- MenuItem() can be activated on release. (#245) -- Allowing NewFrame() with DeltaTime==0.0f to not assert. -- Fixed IsMouseDragging(). (#260) -- Fixed PlotLines(), PlotHistogram() using incorrect hovering test so they would show their tooltip even when there is - a popup between mouse and the graph. -- Fixed window padding being reported incorrectly for child windows with borders when parent have no borders. -- Fixed a bug with TextUnformatted() clipping of long text blob when clipping y1 line sits on the first line of text. (#257) -- Fixed text baseline alignment of small button (no padding) after regular buttons. -- Fixed ListBoxHeader() not honoring negative sizes the same way as BeginChild() or BeginChildFrame(). (#263) -- Fixed warnings for more pedantic compiler settings (#258). -- ImVector<> cannot be re-defined anymore, cannot be replaced with std::vector<>. Allowed us to clean up and optimize - lots of code. Yeah! (#262) -- ImDrawList: store pointer to their owner name for easier auditing/debugging. -- Examples: added scroll tracking example with SetScrollFromCursorPos(). -- Examples: metrics windows render clip rectangle when hovering over a draw call. -- Lots of small optimization (particularly to run faster on unoptimized builds) and tidying up. -- Added font links in extra_fonts/ + instructions for using compressed fonts in C array. - - ------------------------------------------------------------------------ - VERSION 1.41 (2015-06-26) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.41 - -Breaking Changes: - -- Changed ImageButton() default bg_col parameter from (0,0,0,1) (black) to (0,0,0,0) (transparent). - Only makes a difference when texture have transparency. -- Changed Selectable() API from (label, selected, size) to (label, selected, flags, size). - Size override should be used very rarely so hopefully it doesn't affect many people. Sorry! - -Other Changes: - -- Added InputTextMultiline() multi-line text editor, vertical scrolling, selection, optimized enough to handle rather - big chunks of text in stateless context (thousands of lines are ok), option for allowing Tab to be input, option - for validating with Return or Ctrl+Return (#200). -- Added modal window API, BeginPopupModal(), follows the popup api scheme. Modal windows can be closed by clicking - outside. By default the rest of the screen is dimmed (using ImGuiCol_ModalWindowDarkening). Modal windows can be stacked. -- Added GetGlyphRangesCyrillic() helper (#237). -- Added SetNextWindowPosCenter() to center a window prior to knowing its size. (#249) -- Added IsWindowHovered() helper. -- Added IsMouseReleased(), IsKeyReleased() helpers to allow to user to avoid tracking them. (#248) -- Allow Set*WindowSize() calls to be used with popups. -- Window: AutoFit can be triggered on each axis separately via SetNextWindowSize(), etc. -- Window: fixed scrolling with mouse wheel while window was collapsed. -- Window: fixed mouse wheel scroll issues. -- DragFloat(), SliderFloat(): Fixed rounding of negative numbers which sometime made the negative lower bound unreachable. -- InputText(): lifted character count limit. -- InputText(): fixes in case of using per-window font scaling. -- Selectable(), MenuItem(): do not use frame rounding for hovering/selection. -- Selectable(): Added flag ImGuiSelectableFlags_DontClosePopups. -- Selectable(): Added flag ImGuiSelectableFlags_SpanAllColumns (#125). -- Combo(): Fixed issue with activating a Combo() not taking active id (#241). -- ColorButton(), ColorEdit4(): fix to ensure that the colored square stays square when non-default padding settings are used. -- BeginChildFrame(): returns bool like BeginChild() for clipping. -- SetScrollPosHere(): takes account of item height + more accurate centering + fixed precision issue. -- ImFont: ignoring '\r'. -- ImFont: added GetCharAdvance() helper. Exposed font Ascent and font Descent. -- ImFont: additional rendering optimizations. -- Metrics windows display storage size. - - ------------------------------------------------------------------------ - VERSION 1.40 (2015-05-31) ------------------------------------------------------------------------ - -Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.40 - -Breaking Changes: - -- The BeginPopup() API (introduced in 1.37) had to be changed to allow for stacked popups and menus. - Use OpenPopup() to toggle the opened state and BeginPopup() to append.** -- The third parameter of Button(), 'repeat_if_held' has been removed. While it's been very rarely used, - some code will possibly break if you didn't rely on the default parameter. - Use PushButtonRepeat()/PopButtonRepeat() to configure repeat. -- Renamed IsRectClipped() to !IsRectVisible() for consistency (opposite return value!). Kept inline redirection function (will obsolete) -- Renamed GetWindowCollapsed() to IsWindowCollapsed() for consistency. Kept inline indirection function (will obsolete). - -Other Changes: - -- Menus: Added a menu system! Menus are typically populated with menu items and sub-menus, but you can add any sort of - widgets in them (buttons, text inputs, sliders, etc.). (#126) -- Menus: Added MenuItem() to append a menu item. Optional shortcut display, acts a button & toggle with checked/unchecked state, - disabled mode. Menu items can be used in any window. -- Menus: Added BeginMenu() to append a sub-menu. Note that you generally want to add sub-menu inside a popup or a menu-bar. - They will work inside a normal window but it will be a bit unusual. -- Menus: Added BeginMenuBar() to append to window menu-bar (set ImGuiWindowFlags_MenuBar to enable). -- Menus: Added BeginMainMenuBar() helper to append to a fullscreen main menu-bar. -- Popups: Support for stacked popups. Each popup level inhibit inputs to lower levels. The menus system is based on this. (#126). -- Popups: Added BeginPopupContextItem(), BeginPopupContextWindow(), BeginPopupContextVoid() to create a popup window on mouse-click. -- Popups: Popups have borders by default (#197), attenuated border alpha in default theme. -- Popups & Tooltip: Fit within display. Handling various positioning/sizing/scrolling edge cases. Better hysteresis when moving - in corners. Tooltip always tries to stay away from mouse-cursor. -- Added ImGuiStorage::GetVoidPtrRef() for manipulating stored void*. -- Added IsKeyDown() IsMouseDown() as convenience and for consistency with existing functions (instead of reading them from IO structures). -- Added Dummy() helper to advance layout by a given size. Unlike InvisibleButton() this doesn't catch any click. -- Added configurable io.KeyRepeatDelay, io.KeyRepeatRate keyboard and mouse repeat rate. -- Added PushButtonRepeat() / PopButtonRepeat() to enable hold-button-to-repeat press on any button. -- Removed the third 'repeat' parameter of Button(). -- Added IsAnyItemHovered() helper. -- Added GetItemsLineHeightWithSpacing() helper. -- Added ImGuiListClipper helper for clipping large list of evenly sized items, to avoid using CalcListClipping() directly. -- Separator: within group start on group horizontal offset. (#205) -- InputText: Fixed incorrect edit state after text buffer is appended to by user via the callback. (#206) -- InputText: CTRL+letter-key shortcuts (e.g. CTRL+C/V/X) makes sure only CTRL is pressed. (#214) -- InputText: Fixed cursor generating a zero-width wire-frame rectangle turning into a division by zero (would go unnoticed - unless you trapped exceptions). -- InputFloatN/InputIntN: Flags parameter added to match scalar versions. (#218) -- Selectable: Horizontal filling not declared to ItemSize() so Selectable(),SameLine() works and we can better auto-fit the window. -- Selectable: Handling text baseline alignment for line that aren't of text height. -- Combo: Empty label doesn't add ItemInnerSpacing alignment, matching other widgets. -- EndGroup: Carries the text base offset from the last line of the group (sort of incorrect but better than nothing, - should use the first line of the group, will implement in the future). -- Columns: distinguish columns-set ID from other widgets as a convenience, added asserts and sailors. -- ListBox: ListBox() function only use public API to encourage creating custom versions. ListBoxHeader() can return false. -- ListBox: Uses ImGuiListClipper and assume items of matching height, so large lists can be handled. -- Plot: overlay label clipped within frame when not fitting. -- Window: Added ImGuiSetCond_Appearing to test the hidden->visible transition in SetWindow***/SetNextWindow*** functions. -- Window: Auto-fitting cancel out one worth of vertical spacing for vertical symmetry (like what group and tooltip do). -- Window: Default item width for auto-resizing windows expressed as a factor of font height, scales better with different font. -- Window: Fixed auto-fit calculation mismatch of whether a scrollbar will be added by maximum height clamping. Also honor NoScrollBar in the case of height clamping, not adding extra horizontal space. -- Window: Hovering require to hover same child window. Reverted 860cf57 (December 3). Might break something if you have - child overlapping items in parent window. -- Window: Fixed appending multiple times to an existing child via multiple BeginChild/EndChild calls to same child name. - Allows a simple form of out-of-order appending. -- Window: Fixed auto-filling child window using WindowMinSize at their minimum size, irrelevant. -- Metrics: Added io.MetricsActiveWindows counter. (#213. -- Metrics: Added io.MetricsAllocs counter (number of active memory allocations). -- Metrics: ShowMetricsWindow() shows popups stack, allocations. -- Style: Added style.DisplayWindowPadding to prevent windows from reaching edges of display (similar to style.DisplaySafeAreaPadding which is still in effect and also affect popups/tooltips). -- Style: Removed style.AutoFitPadding, using style.WindowPadding makes more sense (the default values were already the same). -- Style: Added style.ScrollbarRounding. (#212) -- Style: Added ImGuiCol_TextDisabled for disabled text. Added TextDisabled() helper. -- Style: Added style.WindowTitleAlign alignment options, to e.g. center title on windows. (#222) -- ImVector: tweak growth strategy, matches vector from VS2010. -- ImFontAtlas: Added ClearFonts(), making the different clear funcs more explicit. (#224) -- ImFontAtlas: Fixed appending new fonts without clearing existing fonts. Clearing input data left to application. (#224) -- ImDrawList: Merge draw command better, cases of multiple Begin/End gets merged properly. -- Store common stacked settings contiguously in memory to avoid heap allocation for unused features, and reduce cache misses. -- Shutdown() tests for g.IO.Fonts not being NULL to ease use of multiple ImGui contexts. (#207) -- Added IMGUI_DISABLE_OBSOLETE_FUNCTIONS define to disable the functions that are meant to be removed. -- Examples: Added ? marks with tooltips next to various widgets. Added more comments in the demo window. -- Examples: Added Menu-bar example. -- Examples: Added Simple Layout example. -- Examples: AutoResize demo doesn't use TextWrapped(). -- Examples: Console example uses standard malloc/free, makes more sense as a copy & pastable example. -- Examples: DirectX9/11: Fixed key mapping for down arrow. -- Examples: DirectX9/11: hide OS cursor if ImGui is drawing it. (#155) -- Examples: DirectX11: explicitly set rasterizer state. -- Examples: OpenGL3: Add conditional compilation of forward compat as required by glfw on OSX. (#229) -- Fixed build with Visual Studio 2008 (possibly earlier versions as well). -- Other fixes, comments, tweaks. - - ------------------------------------------------------------------------ - -For older version, see https://github.com/ocornut/imgui/releases - diff --git a/cmake/imgui/docs/FAQ.md b/cmake/imgui/docs/FAQ.md deleted file mode 100644 index d629ff4b..00000000 --- a/cmake/imgui/docs/FAQ.md +++ /dev/null @@ -1,605 +0,0 @@ -# FAQ (Frequenty Asked Questions) - -You may link to this document using short form: - https://www.dearimgui.org/faq -or its real address: - https://github.com/ocornut/imgui/blob/master/docs/FAQ.md -or view this file with any Markdown viewer. - - -## Index - -| **Q&A: Basics** | -:---------------------------------------------------------- | -| [Where is the documentation?](#q-where-is-the-documentation) | -| [What is this library called?](#q-what-is-this-library-called) | -| [Which version should I get?](#q-which-version-should-i-get) | -| **Q&A: Integration** | -| **[How can I tell whether to dispatch mouse/keyboard to Dear ImGui or to my application?](#q-how-can-i-tell-whether-to-dispatch-mousekeyboard-to-dear-imgui-or-to-my-application)** | -| [How can I enable keyboard or gamepad controls?](#q-how-can-i-enable-keyboard-or-gamepad-controls) | -| [How can I use this on a machine without mouse, keyboard or screen? (input share, remote display)](#q-how-can-i-use-this-on-a-machine-without-mouse-keyboard-or-screen-input-share-remote-display) | -| [I integrated Dear ImGui in my engine and the text or lines are blurry..](#q-i-integrated-dear-imgui-in-my-engine-and-the-text-or-lines-are-blurry) | -| [I integrated Dear ImGui in my engine and some elements are clipping or disappearing when I move windows around..](#q-i-integrated-dear-imgui-in-my-engine-and-some-elements-are-clipping-or-disappearing-when-i-move-windows-around) | -| **Q&A: Usage** | -| **[Why are multiple widgets reacting when I interact with a single one?
How can I have multiple widgets with the same label or with an empty label?](#q-why-are-multiple-widgets-reacting-when-i-interact-with-a-single-one-q-how-can-i-have-multiple-widgets-with-the-same-label-or-with-an-empty-label)** | -| [How can I display an image? What is ImTextureID, how does it work?](#q-how-can-i-display-an-image-what-is-imtextureid-how-does-it-work)| -| [How can I use my own math types instead of ImVec2/ImVec4?](#q-how-can-i-use-my-own-math-types-instead-of-imvec2imvec4) | -| [How can I interact with standard C++ types (such as std::string and std::vector)?](#q-how-can-i-interact-with-standard-c-types-such-as-stdstring-and-stdvector) | -| [How can I display custom shapes? (using low-level ImDrawList API)](#q-how-can-i-display-custom-shapes-using-low-level-imdrawlist-api) | -| **Q&A: Fonts, Text** | -| [How can I load a different font than the default?](#q-how-can-i-load-a-different-font-than-the-default) | -| [How can I easily use icons in my application?](#q-how-can-i-easily-use-icons-in-my-application) | -| [How can I load multiple fonts?](#q-how-can-i-load-multiple-fonts) | -| [How can I display and input non-Latin characters such as Chinese, Japanese, Korean, Cyrillic?](#q-how-can-i-display-and-input-non-latin-characters-such-as-chinese-japanese-korean-cyrillic) | -| **Q&A: Concerns** | -| [Who uses Dear ImGui?](#q-who-uses-dear-imgui) | -| [Can you create elaborate/serious tools with Dear ImGui?](#q-can-you-create-elaborateserious-tools-with-dear-imgui) | -| [Can you reskin the look of Dear ImGui?](#q-can-you-reskin-the-look-of-dear-imgui) | -| [Why using C++ (as opposed to C)?](#q-why-using-c-as-opposed-to-c) | -| **Q&A: Community** | -| [How can I help?](#q-how-can-i-help) | - - -# Q&A: Basics - -### Q: Where is the documentation? - -**This library is poorly documented at the moment and expects of the user to be acquainted with C/C++.** -- Dozens of standalone example applications using e.g. OpenGL/DirectX are provided in the [examples/](https://github.com/ocornut/imgui/blob/master/examples/) folder to explain how to integrate Dear ImGui with your own engine/application. You can run those applications and explore them. -- See demo code in [imgui_demo.cpp](https://github.com/ocornut/imgui/blob/master/imgui_demo.cpp) and particularly the `ImGui::ShowDemoWindow()` function. The demo covers most features of Dear ImGui, so you can read the code and see its output. -- See documentation and comments at the top of [imgui.cpp](https://github.com/ocornut/imgui/blob/master/imgui.cpp) + general API comments in [imgui.h](https://github.com/ocornut/imgui/blob/master/imgui.h). -- The [Wiki](https://github.com/ocornut/imgui/wiki) has many resources and links. -- The [Glossary](https://github.com/ocornut/imgui/wiki/Glossary) page may be useful. -- The [Issues](https://github.com/ocornut/imgui/issues) section can be searched for past questions and issues. -- Your programming IDE is your friend, find the type or function declaration to find comments associated to it. -- The `ImGui::ShowMetricsWindow()` function exposes lots of internal information and tools. Although it is primary designed as a debugging tool, having access to that information tends to help understands concepts. - -##### [Return to Index](#index) - ---- - -### Q. What is this library called? - -**This library is called Dear ImGui**. Please refer to it as Dear ImGui (not ImGui, not IMGUI). - -(The library misleadingly started its life in 2014 as "ImGui" due to the fact that I didn't give it a proper name when when I released 1.0, and had no particular expectation that it would take off. However, the term IMGUI (immediate-mode graphical user interface) was coined before and is being used in variety of other situations e.g. Unity uses it own implementation of the IMGUI paradigm. To reduce the ambiguity without affecting existing code bases, I have decided in December 2015 a fully qualified name "Dear ImGui" for this library. - -##### [Return to Index](#index) - ---- - -### Q: Which version should I get? -I occasionally tag [Releases](https://github.com/ocornut/imgui/releases) but it is generally safe and recommended to sync to master/latest. The library is fairly stable and regressions tend to be fixed fast when reported. - -You may use the [docking](https://github.com/ocornut/imgui/tree/docking) branch which includes: -- [Docking features](https://github.com/ocornut/imgui/issues/2109) -- [Multi-viewport features](https://github.com/ocornut/imgui/issues/1542) - -Many projects are using this branch and it is kept in sync with master regularly. - -##### [Return to Index](#index) - ----- - -# Q&A: Integration - -### Q: How can I tell whether to dispatch mouse/keyboard to Dear ImGui or to my application? - -You can read the `io.WantCaptureMouse`, `io.WantCaptureKeyboard` and `io.WantTextInput` flags from the ImGuiIO structure. - -e.g. `if (ImGui::GetIO().WantCaptureMouse) { ... }` - -- When `io.WantCaptureMouse` is set, imgui wants to use your mouse state, and you may want to discard/hide the inputs from the rest of your application. -- When `io.WantCaptureKeyboard` is set, imgui wants to use your keyboard state, and you may want to discard/hide the inputs from the rest of your application. -- When `io.WantTextInput` is set to may want to notify your OS to popup an on-screen keyboard, if available (e.g. on a mobile phone, or console OS). - -**Note:** You should always pass your mouse/keyboard inputs to Dear ImGui, even when the io.WantCaptureXXX flag are set false. - This is because imgui needs to detect that you clicked in the void to unfocus its own windows. - -**Note:** The `io.WantCaptureMouse` is more accurate that any manual attempt to "check if the mouse is hovering a window" (don't do that!). It handle mouse dragging correctly (both dragging that started over your application or over an imgui window) and handle e.g. modal windows blocking inputs. Those flags are updated by `ImGui::NewFrame()`. Preferably read the flags after calling NewFrame() if you can afford it, but reading them before is also perfectly fine, as the bool toggle fairly rarely. If you have on a touch device, you might find use for an early call to `UpdateHoveredWindowAndCaptureFlags()`. - -**Note:** Text input widget releases focus on "Return KeyDown", so the subsequent "Return KeyUp" event that your application receive will typically have `io.WantCaptureKeyboard == false`. Depending on your application logic it may or not be inconvenient. You might want to track which key-downs were targeted for Dear ImGui, e.g. with an array of bool, and filter out the corresponding key-ups.) - -##### [Return to Index](#index) - ---- - -### Q: How can I enable keyboard or gamepad controls? -- The gamepad/keyboard navigation is fairly functional and keeps being improved. The initial focus was to support game controllers, but keyboard is becoming increasingly and decently usable. Gamepad support is particularly useful to use Dear ImGui on a game console (e.g. PS4, Switch, XB1) without a mouse connected! -- Keyboard: set `io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard` to enable. -- Gamepad: set `io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad` to enable (with a supporting back-end). -- See [Control Sheets for Gamepads](http://www.dearimgui.org/controls_sheets) (reference PNG/PSD for for PS4, XB1, Switch gamepads). -- See `USING GAMEPAD/KEYBOARD NAVIGATION CONTROLS` section of [imgui.cpp](https://github.com/ocornut/imgui/blob/master/imgui.cpp) for more details. - -##### [Return to Index](#index) - ---- - -### Q: How can I use this on a machine without mouse, keyboard or screen? (input share, remote display) -- You can share your computer mouse seamlessly with your console/tablet/phone using solutions such as [Synergy](https://symless.com/synergy) -This is the preferred solution for developer productivity. -In particular, the [micro-synergy-client repository](https://github.com/symless/micro-synergy-client) has simple -and portable source code (uSynergy.c/.h) for a small embeddable client that you can use on any platform to connect -to your host computer, based on the Synergy 1.x protocol. Make sure you download the Synergy 1 server on your computer. -Console SDK also sometimes provide equivalent tooling or wrapper for Synergy-like protocols. -- Game console users: consider emulating a mouse cursor with DualShock4 touch pad or a spare analog stick as a mouse-emulation fallback. -- You may also use a third party solution such as [Remote ImGui](https://github.com/JordiRos/remoteimgui) or [imgui-ws](https://github.com/ggerganov/imgui-ws) which sends the vertices to render over the local network, allowing you to use Dear ImGui even on a screen-less machine. See [Wiki](https://github.com/ocornut/imgui/wiki) index for most details. -- For touch inputs, you can increase the hit box of widgets (via the `style.TouchPadding` setting) to accommodate for the lack of precision of touch inputs, but it is recommended you use a mouse or gamepad to allow optimizing for screen real-estate and precision. - -##### [Return to Index](#index) - ---- - -### Q: I integrated Dear ImGui in my engine and the text or lines are blurry.. -In your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f). -Also make sure your orthographic projection matrix and io.DisplaySize matches your actual framebuffer dimension. - -##### [Return to Index](#index) - ---- - -### Q: I integrated Dear ImGui in my engine and some elements are clipping or disappearing when I move windows around.. -You are probably mishandling the clipping rectangles in your render function. -Rectangles provided by ImGui are defined as -`(x1=left,y1=top,x2=right,y2=bottom)` -and **NOT** as -`(x1,y1,width,height)` - -##### [Return to Index](#index) - ---- - -# Q&A: Usage - -### Q: Why are multiple widgets reacting when I interact with a single one?
Q: How can I have multiple widgets with the same label or with an empty label? - -A primer on labels and the ID Stack... - -Dear ImGui internally need to uniquely identify UI elements. -Elements that are typically not clickable (such as calls to the Text functions) don't need an ID. -Interactive widgets (such as calls to Button buttons) need a unique ID. -Unique ID are used internally to track active widgets and occasionally associate state to widgets. -Unique ID are implicitly built from the hash of multiple elements that identify the "path" to the UI element. - -- Unique ID are often derived from a string label and at minimum scoped within their host window: -```c -Begin("MyWindow"); -Button("OK"); // Label = "OK", ID = hash of ("MyWindow" "OK") -Button("Cancel"); // Label = "Cancel", ID = hash of ("MyWindow", "Cancel") -End(); -``` -- Other elements such as tree nodes, etc. also pushes to the ID stack: -```c -Begin("MyWindow"); -if (TreeNode("MyTreeNode")) -{ - Button("OK"); // Label = "OK", ID = hash of ("MyWindow", "MyTreeNode", "OK") - TreePop(); -} -End(); -``` -- Two items labeled "OK" in different windows or different tree locations won't collide: -``` -Begin("MyFirstWindow"); -Button("OK"); // Label = "OK", ID = hash of ("MyFirstWindow", "OK") -End(); -Begin("MyOtherWindow"); -Button("OK"); // Label = "OK", ID = hash of ("MyOtherWindow", "OK") -End(); -``` - -We used "..." above to signify whatever was already pushed to the ID stack previously: - -- If you have a same ID twice in the same location, you'll have a conflict: -```c -Button("OK"); -Button("OK"); // ID collision! Interacting with either button will trigger the first one. -``` -Fear not! this is easy to solve and there are many ways to solve it! - -- Solving ID conflict in a simple/local context: -When passing a label you can optionally specify extra ID information within string itself. -Use "##" to pass a complement to the ID that won't be visible to the end-user. -This helps solving the simple collision cases when you know e.g. at compilation time which items -are going to be created: -```c -Begin("MyWindow"); -Button("Play"); // Label = "Play", ID = hash of ("MyWindow", "Play") -Button("Play##foo1"); // Label = "Play", ID = hash of ("MyWindow", "Play##foo1") // Different from above -Button("Play##foo2"); // Label = "Play", ID = hash of ("MyWindow", "Play##foo2") // Different from above -End(); -``` -- If you want to completely hide the label, but still need an ID: -```c -Checkbox("##On", &b); // Label = "", ID = hash of (..., "##On") // No visible label, just a checkbox! -``` -- Occasionally/rarely you might want change a label while preserving a constant ID. This allows -you to animate labels. For example you may want to include varying information in a window title bar, -but windows are uniquely identified by their ID. Use "###" to pass a label that isn't part of ID: -```c -Button("Hello###ID"); // Label = "Hello", ID = hash of (..., "###ID") -Button("World###ID"); // Label = "World", ID = hash of (..., "###ID") // Same as above, even if the label looks different - -sprintf(buf, "My game (%f FPS)###MyGame", fps); -Begin(buf); // Variable title, ID = hash of "MyGame" -``` -- Solving ID conflict in a more general manner: -Use PushID() / PopID() to create scopes and manipulate the ID stack, as to avoid ID conflicts -within the same window. This is the most convenient way of distinguishing ID when iterating and -creating many UI elements programmatically. -You can push a pointer, a string or an integer value into the ID stack. -Remember that ID are formed from the concatenation of _everything_ pushed into the ID stack. -At each level of the stack we store the seed used for items at this level of the ID stack. -```c -Begin("Window"); -for (int i = 0; i < 100; i++) -{ - PushID(i); // Push i to the id tack - Button("Click"); // Label = "Click", ID = hash of ("Window", i, "Click") - PopID(); -} -for (int i = 0; i < 100; i++) -{ - MyObject* obj = Objects[i]; - PushID(obj); - Button("Click"); // Label = "Click", ID = hash of ("Window", obj pointer, "Click") - PopID(); -} -for (int i = 0; i < 100; i++) -{ - MyObject* obj = Objects[i]; - PushID(obj->Name); - Button("Click"); // Label = "Click", ID = hash of ("Window", obj->Name, "Click") - PopID(); -} -End(); -``` -- You can stack multiple prefixes into the ID stack: -```c -Button("Click"); // Label = "Click", ID = hash of (..., "Click") -PushID("node"); - Button("Click"); // Label = "Click", ID = hash of (..., "node", "Click") - PushID(my_ptr); - Button("Click"); // Label = "Click", ID = hash of (..., "node", my_ptr, "Click") - PopID(); -PopID(); -``` -- Tree nodes implicitly creates a scope for you by calling PushID(). -```c -Button("Click"); // Label = "Click", ID = hash of (..., "Click") -if (TreeNode("node")) // <-- this function call will do a PushID() for you (unless instructed not to, with a special flag) -{ - Button("Click"); // Label = "Click", ID = hash of (..., "node", "Click") - TreePop(); -} -``` -- When working with trees, ID are used to preserve the open/close state of each tree node. -Depending on your use cases you may want to use strings, indices or pointers as ID. -e.g. when following a single pointer that may change over time, using a static string as ID -will preserve your node open/closed state when the targeted object change. -e.g. when displaying a list of objects, using indices or pointers as ID will preserve the -node open/closed state differently. See what makes more sense in your situation! - -##### [Return to Index](#index) - ---- - -### Q: How can I display an image? What is ImTextureID, how does it work? - -Short explanation: -- Refer to [Image Loading and Displaying Examples](https://github.com/ocornut/imgui/wiki/Image-Loading-and-Displaying-Examples) on the [Wiki](https://github.com/ocornut/imgui/wiki). -- You may use functions such as `ImGui::Image()`, `ImGui::ImageButton()` or lower-level `ImDrawList::AddImage()` to emit draw calls that will use your own textures. -- Actual textures are identified in a way that is up to the user/engine. Those identifiers are stored and passed as ImTextureID (void*) value. -- Loading image files from the disk and turning them into a texture is not within the scope of Dear ImGui (for a good reason). - -**Please read documentations or tutorials on your graphics API to understand how to display textures on the screen before moving onward.** - -Long explanation: -- Dear ImGui's job is to create "meshes", defined in a renderer-agnostic format made of draw commands and vertices. At the end of the frame those meshes (ImDrawList) will be displayed by your rendering function. They are made up of textured polygons and the code to render them is generally fairly short (a few dozen lines). In the examples/ folder we provide functions for popular graphics API (OpenGL, DirectX, etc.). -- Each rendering function decides on a data type to represent "textures". The concept of what is a "texture" is entirely tied to your underlying engine/graphics API. - We carry the information to identify a "texture" in the ImTextureID type. -ImTextureID is nothing more that a void*, aka 4/8 bytes worth of data: just enough to store 1 pointer or 1 integer of your choice. -Dear ImGui doesn't know or understand what you are storing in ImTextureID, it merely pass ImTextureID values until they reach your rendering function. -- In the [examples/](https://github.com/ocornut/imgui/tree/master/examples) bindings, for each graphics API binding we decided on a type that is likely to be a good representation for specifying an image from the end-user perspective. This is what the _examples_ rendering functions are using: -``` -OpenGL: -- ImTextureID = GLuint -- See ImGui_ImplOpenGL3_RenderDrawData() function in imgui_impl_opengl3.cpp -``` -``` -DirectX9: -- ImTextureID = LPDIRECT3DTEXTURE9 -- See ImGui_ImplDX9_RenderDrawData() function in imgui_impl_dx9.cpp -``` -``` -DirectX11: -- ImTextureID = ID3D11ShaderResourceView* -- See ImGui_ImplDX11_RenderDrawData() function in imgui_impl_dx11.cpp -``` -``` -DirectX12: -- ImTextureID = D3D12_GPU_DESCRIPTOR_HANDLE -- See ImGui_ImplDX12_RenderDrawData() function in imgui_impl_dx12.cpp -``` -For example, in the OpenGL example binding we store raw OpenGL texture identifier (GLuint) inside ImTextureID. -Whereas in the DirectX11 example binding we store a pointer to ID3D11ShaderResourceView inside ImTextureID, which is a higher-level structure tying together both the texture and information about its format and how to read it. - -- If you have a custom engine built over e.g. OpenGL, instead of passing GLuint around you may decide to use a high-level data type to carry information about the texture as well as how to display it (shaders, etc.). The decision of what to use as ImTextureID can always be made better knowing how your codebase is designed. If your engine has high-level data types for "textures" and "material" then you may want to use them. -If you are starting with OpenGL or DirectX or Vulkan and haven't built much of a rendering engine over them, keeping the default ImTextureID representation suggested by the example bindings is probably the best choice. -(Advanced users may also decide to keep a low-level type in ImTextureID, and use ImDrawList callback and pass information to their renderer) - -User code may do: -```cpp -// Cast our texture type to ImTextureID / void* -MyTexture* texture = g_CoffeeTableTexture; -ImGui::Image((void*)texture, ImVec2(texture->Width, texture->Height)); -``` -The renderer function called after ImGui::Render() will receive that same value that the user code passed: -```cpp -// Cast ImTextureID / void* stored in the draw command as our texture type -MyTexture* texture = (MyTexture*)pcmd->TextureId; -MyEngineBindTexture2D(texture); -``` -Once you understand this design you will understand that loading image files and turning them into displayable textures is not within the scope of Dear ImGui. -This is by design and is actually a good thing, because it means your code has full control over your data types and how you display them. -If you want to display an image file (e.g. PNG file) into the screen, please refer to documentation and tutorials for the graphics API you are using. - -Refer to [Image Loading and Displaying Examples](https://github.com/ocornut/imgui/wiki/Image-Loading-and-Displaying-Examples) on the [Wiki](https://github.com/ocornut/imgui/wiki) to find simplified examples for loading textures with OpenGL, DirectX9 and DirectX11. - -C/C++ tip: a void* is pointer-sized storage. You may safely store any pointer or integer into it by casting your value to ImTextureID / void*, and vice-versa. -Because both end-points (user code and rendering function) are under your control, you know exactly what is stored inside the ImTextureID / void*. -Examples: -```cpp -GLuint my_tex = XXX; -void* my_void_ptr; -my_void_ptr = (void*)(intptr_t)my_tex; // cast a GLuint into a void* (we don't take its address! we literally store the value inside the pointer) -my_tex = (GLuint)(intptr_t)my_void_ptr; // cast a void* into a GLuint - -ID3D11ShaderResourceView* my_dx11_srv = XXX; -void* my_void_ptr; -my_void_ptr = (void*)my_dx11_srv; // cast a ID3D11ShaderResourceView* into an opaque void* -my_dx11_srv = (ID3D11ShaderResourceView*)my_void_ptr; // cast a void* into a ID3D11ShaderResourceView* -``` -Finally, you may call `ImGui::ShowMetricsWindow()` to explore/visualize/understand how the ImDrawList are generated. - -##### [Return to Index](#index) - ---- - -### Q: How can I use my own math types instead of ImVec2/ImVec4? - -You can edit [imconfig.h](https://github.com/ocornut/imgui/blob/master/imconfig.h) and setup the `IM_VEC2_CLASS_EXTRA`/`IM_VEC4_CLASS_EXTRA` macros to add implicit type conversions. -This way you'll be able to use your own types everywhere, e.g. passing `MyVector2` or `glm::vec2` to ImGui functions instead of `ImVec2`. - -##### [Return to Index](#index) - ---- - -### Q: How can I interact with standard C++ types (such as std::string and std::vector)? -- Being highly portable (bindings for several languages, frameworks, programming style, obscure or older platforms/compilers), and aiming for compatibility & performance suitable for every modern real-time game engines, dear imgui does not use any of std C++ types. We use raw types (e.g. char* instead of std::string) because they adapt to more use cases. -- To use ImGui::InputText() with a std::string or any resizable string class, see [misc/cpp/imgui_stdlib.h](https://github.com/ocornut/imgui/blob/master/misc/cpp/imgui_stdlib.h). -- To use combo boxes and list boxes with `std::vector` or any other data structure: the `BeginCombo()/EndCombo()` API -lets you iterate and submit items yourself, so does the `ListBoxHeader()/ListBoxFooter()` API. -Prefer using them over the old and awkward `Combo()/ListBox()` api. -- Generally for most high-level types you should be able to access the underlying data type. -You may write your own one-liner wrappers to facilitate user code (tip: add new functions in ImGui:: namespace from your code). -- Dear ImGui applications often need to make intensive use of strings. It is expected that many of the strings you will pass -to the API are raw literals (free in C/C++) or allocated in a manner that won't incur a large cost on your application. -Please bear in mind that using `std::string` on applications with large amount of UI may incur unsatisfactory performances. -Modern implementations of `std::string` often include small-string optimization (which is often a local buffer) but those -are not configurable and not the same across implementations. -- If you are finding your UI traversal cost to be too large, make sure your string usage is not leading to excessive amount -of heap allocations. Consider using literals, statically sized buffers and your own helper functions. A common pattern -is that you will need to build lots of strings on the fly, and their maximum length can be easily be scoped ahead. -One possible implementation of a helper to facilitate printf-style building of strings: https://github.com/ocornut/Str -This is a small helper where you can instance strings with configurable local buffers length. Many game engines will -provide similar or better string helpers. - -##### [Return to Index](#index) - ---- - -### Q: How can I display custom shapes? (using low-level ImDrawList API) - -- You can use the low-level `ImDrawList` api to render shapes within a window. - -``` -ImGui::Begin("My shapes"); - -ImDrawList* draw_list = ImGui::GetWindowDrawList(); - -// Get the current ImGui cursor position -ImVec2 p = ImGui::GetCursorScreenPos(); - -// Draw a red circle -draw_list->AddCircleFilled(ImVec2(p.x + 50, p.y + 50), 30.0f, IM_COL32(255, 0, 0, 255), 16); - -// Draw a 3 pixel thick yellow line -draw_list->AddLine(ImVec2(p.x, p.y), ImVec2(p.x + 100.0f, p.y + 100.0f), IM_COL32(255, 255, 0, 255), 3.0f); - -// Advance the ImGui cursor to claim space in the window (otherwise the window will appears small and needs to be resized) -ImGui::Dummy(ImVec2(200, 200)); - -ImGui::End(); -``` -![ImDrawList usage](https://raw.githubusercontent.com/wiki/ocornut/imgui/tutorials/CustomRendering01.png) - -- Refer to "Demo > Examples > Custom Rendering" in the demo window and read the code of `ShowExampleAppCustomRendering()` in `imgui_demo.cpp` from more examples. -- To generate colors: you can use the macro `IM_COL32(255,255,255,255)` to generate them at compile time, or use `ImGui::GetColorU32(IM_COL32(255,255,255,255))` or `ImGui::GetColorU32(ImVec4(1.0f,1.0f,1.0f,1.0f))` to generate a color that is multiplied by the current value of `style.Alpha`. -- Math operators: if you have setup `IM_VEC2_CLASS_EXTRA` in `imconfig.h` to bind your own math types, you can use your own math types and their natural operators instead of ImVec2. ImVec2 by default doesn't export any math operators in the public API. You may use `#define IMGUI_DEFINE_MATH_OPERATORS` `#include "imgui_internal.h"` to use the internally defined math operators, but instead prefer using your own math library and set it up in `imconfig.h`. -- You can use `ImGui::GetBackgroundDrawList()` or `ImGui::GetForegroundDrawList()` to access draw lists which will be displayed behind and over every other dear imgui windows (one bg/fg drawlist per viewport). This is very convenient if you need to quickly display something on the screen that is not associated to a dear imgui window. -- You can also create your own dummy window and draw inside it. Call Begin() with the NoBackground | NoDecoration | NoSavedSettings | NoInputs flags (The `ImGuiWindowFlags_NoDecoration` flag itself is a shortcut for NoTitleBar | NoResize | NoScrollbar | NoCollapse). Then you can retrieve the ImDrawList* via GetWindowDrawList() and draw to it in any way you like. -- You can create your own ImDrawList instance. You'll need to initialize them with `ImGui::GetDrawListSharedData()`, or create your own instancing ImDrawListSharedData, and then call your renderer function with your own ImDrawList or ImDrawData data. - -##### [Return to Index](#index) - ---- - -# Q&A: Fonts, Text - -### Q: How can I load a different font than the default? -Use the font atlas to load the TTF/OTF file you want: - -```c -ImGuiIO& io = ImGui::GetIO(); -io.Fonts->AddFontFromFileTTF("myfontfile.ttf", size_in_pixels); -io.Fonts->GetTexDataAsRGBA32() or GetTexDataAsAlpha8() -``` - -Default is ProggyClean.ttf, monospace, rendered at size 13, embedded in dear imgui's source code. - -(Tip: monospace fonts are convenient because they allow to facilitate horizontal alignment directly at the string level.) - -(Read the [docs/FONTS.txt](https://github.com/ocornut/imgui/blob/master/docs/FONTS.txt) file for more details about font loading.) - -New programmers: remember that in C/C++ and most programming languages if you want to use a -backslash \ within a string literal, you need to write it double backslash "\\": - -```c -io.Fonts->AddFontFromFileTTF("MyFolder\MyFont.ttf", size); // WRONG (you are escaping the M here!) -io.Fonts->AddFontFromFileTTF("MyFolder\\MyFont.ttf", size; // CORRECT -io.Fonts->AddFontFromFileTTF("MyFolder/MyFont.ttf", size); // ALSO CORRECT -``` - -##### [Return to Index](#index) - ---- - -### Q: How can I easily use icons in my application? -The most convenient and practical way is to merge an icon font such as FontAwesome inside you -main font. Then you can refer to icons within your strings. -You may want to see `ImFontConfig::GlyphMinAdvanceX` to make your icon look monospace to facilitate alignment. -(Read the [docs/FONTS.txt](https://github.com/ocornut/imgui/blob/master/docs/FONTS.txt) file for more details about icons font loading.) -With some extra effort, you may use colorful icon by registering custom rectangle space inside the font atlas, -and copying your own graphics data into it. See docs/FONTS.txt about using the AddCustomRectFontGlyph API. - -##### [Return to Index](#index) - ---- - -### Q: How can I load multiple fonts? -Use the font atlas to pack them into a single texture: -(Read the [docs/FONTS.txt](https://github.com/ocornut/imgui/blob/master/docs/FONTS.txt) file and the code in ImFontAtlas for more details.) - -```cpp -ImGuiIO& io = ImGui::GetIO(); -ImFont* font0 = io.Fonts->AddFontDefault(); -ImFont* font1 = io.Fonts->AddFontFromFileTTF("myfontfile.ttf", size_in_pixels); -ImFont* font2 = io.Fonts->AddFontFromFileTTF("myfontfile2.ttf", size_in_pixels); -io.Fonts->GetTexDataAsRGBA32() or GetTexDataAsAlpha8() -// the first loaded font gets used by default -// use ImGui::PushFont()/ImGui::PopFont() to change the font at runtime - -// Options -ImFontConfig config; -config.OversampleH = 2; -config.OversampleV = 1; -config.GlyphOffset.y -= 1.0f; // Move everything by 1 pixels up -config.GlyphExtraSpacing.x = 1.0f; // Increase spacing between characters -io.Fonts->AddFontFromFileTTF("myfontfile.ttf", size_pixels, &config); - -// Combine multiple fonts into one (e.g. for icon fonts) -static ImWchar ranges[] = { 0xf000, 0xf3ff, 0 }; -ImFontConfig config; -config.MergeMode = true; -io.Fonts->AddFontDefault(); -io.Fonts->AddFontFromFileTTF("fontawesome-webfont.ttf", 16.0f, &config, ranges); // Merge icon font -io.Fonts->AddFontFromFileTTF("myfontfile.ttf", size_pixels, NULL, &config, io.Fonts->GetGlyphRangesJapanese()); // Merge japanese glyphs -``` - -##### [Return to Index](#index) - ---- - -### Q: How can I display and input non-Latin characters such as Chinese, Japanese, Korean, Cyrillic? -When loading a font, pass custom Unicode ranges to specify the glyphs to load. - -```cpp -// Add default Japanese ranges -io.Fonts->AddFontFromFileTTF("myfontfile.ttf", size_in_pixels, NULL, io.Fonts->GetGlyphRangesJapanese()); - -// Or create your own custom ranges (e.g. for a game you can feed your entire game script and only build the characters the game need) -ImVector ranges; -ImFontGlyphRangesBuilder builder; -builder.AddText("Hello world"); // Add a string (here "Hello world" contains 7 unique characters) -builder.AddChar(0x7262); // Add a specific character -builder.AddRanges(io.Fonts->GetGlyphRangesJapanese()); // Add one of the default ranges -builder.BuildRanges(&ranges); // Build the final result (ordered ranges with all the unique characters submitted) -io.Fonts->AddFontFromFileTTF("myfontfile.ttf", 16.0f, NULL, ranges.Data); -``` - -All your strings needs to use UTF-8 encoding. In C++11 you can encode a string literal in UTF-8 -by using the u8"hello" syntax. Specifying literal in your source code using a local code page -(such as CP-923 for Japanese or CP-1251 for Cyrillic) will NOT work! -Otherwise you can convert yourself to UTF-8 or load text data from file already saved as UTF-8. - -Text input: it is up to your application to pass the right character code by calling `io.AddInputCharacter()`. -The applications in examples/ are doing that. -Windows: you can use the WM_CHAR or WM_UNICHAR or WM_IME_CHAR message (depending if your app is built using Unicode or MultiByte mode). -You may also use MultiByteToWideChar() or ToUnicode() to retrieve Unicode codepoints from MultiByte characters or keyboard state. -Windows: if your language is relying on an Input Method Editor (IME), you copy the HWND of your window to io.ImeWindowHandle in order for -the default implementation of io.ImeSetInputScreenPosFn() to set your Microsoft IME position correctly. - -##### [Return to Index](#index) - ---- - -# Q&A: Concerns - -### Q: Who uses Dear ImGui? - -You may take a look at: - -- [Quotes](https://github.com/ocornut/imgui/wiki/Quotes) -- [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui) -- [Gallery](https://github.com/ocornut/imgui/issues/3075) - -##### [Return to Index](#index) - ---- - -### Q: Can you create elaborate/serious tools with Dear ImGui? - -Yes. People have written game editors, data browsers, debuggers, profilers and all sort of non-trivial tools with the library. In my experience the simplicity of the API is very empowering. Your UI runs close to your live data. Make the tools always-on and everybody in the team will be inclined to create new tools (as opposed to more "offline" UI toolkits where only a fraction of your team effectively creates tools). The list of sponsors below is also an indicator that serious game teams have been using the library. - -Dear ImGui is very programmer centric and the immediate-mode GUI paradigm might require you to readjust some habits before you can realize its full potential. Dear ImGui is about making things that are simple, efficient and powerful. - -Dear ImGui is built to be efficient and scalable toward the needs for AAA-quality applications running all day. The IMGUI paradigm offers different opportunities for optimization that the more typical RMGUI paradigm. - -##### [Return to Index](#index) - ---- - -### Q: Can you reskin the look of Dear ImGui? - -Somehow. You can alter the look of the interface to some degree: changing colors, sizes, padding, rounding, fonts. However, as Dear ImGui is designed and optimized to create debug tools, the amount of skinning you can apply is limited. There is only so much you can stray away from the default look and feel of the interface. Dear ImGui is NOT designed to create user interface for games, although with ingenious use of the low-level API you can do it. - -A reasonably skinned application may look like (screenshot from [#2529](https://github.com/ocornut/imgui/issues/2529#issuecomment-524281119)) -![minipars](https://user-images.githubusercontent.com/314805/63589441-d9794f00-c5b1-11e9-8d96-cfc1b93702f7.png) - -##### [Return to Index](#index) - ---- - -### Q: Why using C++ (as opposed to C)? - -Dear ImGui takes advantage of a few C++ languages features for convenience but nothing anywhere Boost insanity/quagmire. Dear ImGui does NOT require C++11 so it can be used with most old C++ compilers. Dear ImGui doesn't use any C++ header file. Language-wise, function overloading and default parameters are used to make the API easier to use and code more terse. Doing so I believe the API is sitting on a sweet spot and giving up on those features would make the API more cumbersome. Other features such as namespace, constructors and templates (in the case of the ImVector<> class) are also relied on as a convenience. - -There is an auto-generated [c-api for Dear ImGui (cimgui)](https://github.com/cimgui/cimgui) by Sonoro1234 and Stephan Dilly. It is designed for creating binding to other languages. If possible, I would suggest using your target language functionalities to try replicating the function overloading and default parameters used in C++ else the API may be harder to use. Also see [Bindings](https://github.com/ocornut/imgui/wiki/Bindings) for various third-party bindings. - -##### [Return to Index](#index) - ---- - -# Q&A: Community - -### Q: How can I help? -- Businesses: please reach out to `contact AT dearimgui.org` if you work in a place using Dear ImGui! We can discuss ways for your company to fund development via invoiced technical support, maintenance or sponsoring contacts. This is among the most useful thing you can do for Dear ImGui. With increased funding we can hire more people working on this project. -- Individuals: you can support continued maintenance and development via PayPal donations. See [README](https://github.com/ocornut/imgui/blob/master/docs/README.md). -- If you are experienced with Dear ImGui and C++, look at the [GitHub Issues](https://github.com/ocornut/imgui/issues), look at the [Wiki](https://github.com/ocornut/imgui/wiki), read [docs/TODO.txt](https://github.com/ocornut/imgui/blob/master/docs/TODO.txt) and see how you want to help and can help! -- Disclose your usage of Dear ImGui via a dev blog post, a tweet, a screenshot, a mention somewhere etc. -You may post screenshot or links in the [gallery threads](https://github.com/ocornut/imgui/issues/3075). Visuals are ideal as they inspire other programmers. Disclosing your use of dear imgui help the library grow credibility, and help other teams and programmers with taking decisions. -- If you have issues or if you need to hack into the library, even if you don't expect any support it is useful that you share your issues or sometimes incomplete PR. - -##### [Return to Index](#index) - diff --git a/cmake/imgui/docs/FONTS.txt b/cmake/imgui/docs/FONTS.txt deleted file mode 100644 index e3690f14..00000000 --- a/cmake/imgui/docs/FONTS.txt +++ /dev/null @@ -1,376 +0,0 @@ -dear imgui -FONTS DOCUMENTATION - -Also read https://www.dearimgui.org/faq for more fonts related infos. - -The code in imgui.cpp embeds a copy of 'ProggyClean.ttf' (by Tristan Grimmer), -a 13 pixels high, pixel-perfect font used by default. -We embed it font in source code so you can use Dear ImGui without any file system access. - -You may also load external .TTF/.OTF files. -The files in this folder are suggested fonts, provided as a convenience. - -Please read the FAQ: https://www.dearimgui.org/faq -Please use the Discord server: http://discord.dearimgui.org and not the Github issue tracker for basic font loading questions. - - ---------------------------------------- - INDEX: ---------------------------------------- - -- Readme First / FAQ -- Fonts Loading Instructions -- Using Icons -- Using FreeType rasterizer -- Building Custom Glyph Ranges -- Using custom colorful icons -- Embedding Fonts in Source Code -- Credits/Licences for fonts included in repository -- Fonts Links - - ---------------------------------------- - README FIRST / FAQ ---------------------------------------- - -- You can use the style editor ImGui::ShowStyleEditor() in the "Fonts" section to browse your fonts - and understand what's going on if you have an issue. -- Fonts are rasterized in a single texture at the time of calling either of io.Fonts->GetTexDataAsAlpha8()/GetTexDataAsRGBA32()/Build(). -- Make sure your font ranges data are persistent and available at the time the font atlas is being built. -- Use C++11 u8"my text" syntax to encode literal strings as UTF-8. e.g.: - u8"hello" - u8"こんにちは" // this will be encoded as UTF-8 -- If you want to include a backslash \ character in your string literal, you need to double them e.g. "folder\\filename". - Read FAQ for details. - - ---------------------------------------- - FONTS LOADING INSTRUCTIONS ---------------------------------------- - -Load default font: - - ImGuiIO& io = ImGui::GetIO(); - io.Fonts->AddFontDefault(); - -Load .TTF/.OTF file with: - - ImGuiIO& io = ImGui::GetIO(); - io.Fonts->AddFontFromFileTTF("font.ttf", size_pixels); - -Load multiple fonts: - - ImGuiIO& io = ImGui::GetIO(); - ImFont* font1 = io.Fonts->AddFontFromFileTTF("font.ttf", size_pixels); - ImFont* font2 = io.Fonts->AddFontFromFileTTF("anotherfont.otf", size_pixels); - - // Select font at runtime - ImGui::Text("Hello"); // use the default font (which is the first loaded font) - ImGui::PushFont(font2); - ImGui::Text("Hello with another font"); - ImGui::PopFont(); - -For advanced options create a ImFontConfig structure and pass it to the AddFont function (it will be copied internally): - - ImFontConfig config; - config.OversampleH = 2; - config.OversampleV = 1; - config.GlyphExtraSpacing.x = 1.0f; - ImFont* font = io.Fonts->AddFontFromFileTTF("font.ttf", size_pixels, &config); - -Combine two fonts into one: - - // Load a first font - ImFont* font = io.Fonts->AddFontDefault(); - - // Add character ranges and merge into the previous font - // The ranges array is not copied by the AddFont* functions and is used lazily - // so ensure it is available at the time of building or calling GetTexDataAsRGBA32(). - static const ImWchar icons_ranges[] = { 0xf000, 0xf3ff, 0 }; // Will not be copied by AddFont* so keep in scope. - ImFontConfig config; - config.MergeMode = true; - io.Fonts->AddFontFromFileTTF("DroidSans.ttf", 18.0f, &config, io.Fonts->GetGlyphRangesJapanese()); - io.Fonts->AddFontFromFileTTF("fontawesome-webfont.ttf", 18.0f, &config, icons_ranges); - io.Fonts->Build(); - -Font atlas is too large? - -- If you have very large number of glyphs or multiple fonts, the texture may become too big for your graphics API. -- The typical result of failing to upload a texture is if every glyphs appears as white rectangles. -- In particular, using a large range such as GetGlyphRangesChineseSimplifiedCommon() is not recommended - unless you set OversampleH/OversampleV to 1 and use a small font size. -- Mind the fact that some graphics drivers have texture size limitation. -- If you are building a PC application, mind the fact that users may run on hardware with lower specs than yours. - -Some solutions: - - - 1) Reduce glyphs ranges by calculating them from source localization data. - You can use ImFontGlyphRangesBuilder for this purpose, this will be the biggest win! - - 2) You may reduce oversampling, e.g. config.OversampleH = config.OversampleV = 1, this will largely reduce your texture size. - - 3) Set io.Fonts.TexDesiredWidth to specify a texture width to minimize texture height (see comment in ImFontAtlas::Build function). - - 4) Set io.Fonts.Flags |= ImFontAtlasFlags_NoPowerOfTwoHeight; to disable rounding the texture height to the next power of two. - - Read about oversampling here: https://github.com/nothings/stb/blob/master/tests/oversample - - -Add a fourth parameter to bake specific font ranges only: - - // Basic Latin, Extended Latin - io.Fonts->AddFontFromFileTTF("font.ttf", size_pixels, NULL, io.Fonts->GetGlyphRangesDefault()); - - // Default + Selection of 2500 Ideographs used by Simplified Chinese - io.Fonts->AddFontFromFileTTF("font.ttf", size_pixels, NULL, io.Fonts->GetGlyphRangesChineseSimplifiedCommon()); - - // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs - io.Fonts->AddFontFromFileTTF("font.ttf", size_pixels, NULL, io.Fonts->GetGlyphRangesJapanese()); - -See "BUILDING CUSTOM GLYPH RANGES" section to create your own ranges. -Offset font vertically by altering the io.Font->DisplayOffset value: - - ImFont* font = io.Fonts->AddFontFromFileTTF("font.ttf", size_pixels); - font->DisplayOffset.y = 1; // Render 1 pixel down - - ---------------------------------------- - USING ICONS ---------------------------------------- - -Using an icon font (such as FontAwesome: http://fontawesome.io or OpenFontIcons. https://github.com/traverseda/OpenFontIcons) -is an easy and practical way to use icons in your Dear ImGui application. -A common pattern is to merge the icon font within your main font, so you can embed icons directly from your strings without -having to change fonts back and forth. - -To refer to the icon UTF-8 codepoints from your C++ code, you may use those headers files created by Juliette Foucaut: - - https://github.com/juliettef/IconFontCppHeaders - -Those files contains a bunch of named #define which you can use to refer to specific icons of the font, e.g.: - - #define ICON_FA_MUSIC "\xef\x80\x81" - #define ICON_FA_SEARCH "\xef\x80\x82" - -Example Setup: - - // Merge icons into default tool font - #include "IconsFontAwesome.h" - ImGuiIO& io = ImGui::GetIO(); - io.Fonts->AddFontDefault(); - - ImFontConfig config; - config.MergeMode = true; - config.GlyphMinAdvanceX = 13.0f; // Use if you want to make the icon monospaced - static const ImWchar icon_ranges[] = { ICON_MIN_FA, ICON_MAX_FA, 0 }; - io.Fonts->AddFontFromFileTTF("fonts/fontawesome-webfont.ttf", 13.0f, &config, icon_ranges); - -Example Usage: - - // Usage, e.g. - ImGui::Text("%s among %d items", ICON_FA_SEARCH, count); - ImGui::Button(ICON_FA_SEARCH " Search"); - -Important to understand: C string _literals_ can be concatenated at compilation time, e.g. "hello" " world" -ICON_FA_SEARCH is defined as a string literal so this is the same as "A" "B" becoming "AB" - -See Links below for other icons fonts and related tools. - - ---------------------------------------- - FREETYPE RASTERIZER, SMALL FONT SIZES ---------------------------------------- - -Dear ImGui uses imstb_truetype.h to rasterize fonts (with optional oversampling). -This technique and its implementation are not ideal for fonts rendered at _small sizes_, which may appear a -little blurry or hard to read. - -There is an implementation of the ImFontAtlas builder using FreeType that you can use in the misc/freetype/ folder. - -FreeType supports auto-hinting which tends to improve the readability of small fonts. -Note that this code currently creates textures that are unoptimally too large (could be fixed with some work). -Also note that correct sRGB space blending will have an important effect on your font rendering quality. - - ---------------------------------------- - BUILDING CUSTOM GLYPH RANGES ---------------------------------------- - -You can use the ImFontGlyphRangesBuilder helper to create glyph ranges based on text input. -For example: for a game where your script is known, if you can feed your entire script to it and only build the characters the game needs. - - ImVector ranges; - ImFontGlyphRangesBuilder builder; - builder.AddText("Hello world"); // Add a string (here "Hello world" contains 7 unique characters) - builder.AddChar(0x7262); // Add a specific character - builder.AddRanges(io.Fonts->GetGlyphRangesJapanese()); // Add one of the default ranges - builder.BuildRanges(&ranges); // Build the final result (ordered ranges with all the unique characters submitted) - - io.Fonts->AddFontFromFileTTF("myfontfile.ttf", size_in_pixels, NULL, ranges.Data); - io.Fonts->Build(); // Build the atlas while 'ranges' is still in scope and not deleted. - - ---------------------------------------- - USING CUSTOM COLORFUL ICONS ---------------------------------------- - -(This is a BETA api, use if you are familiar with dear imgui and with your rendering back-end) - -You can use the ImFontAtlas::AddCustomRect() and ImFontAtlas::AddCustomRectFontGlyph() api to register rectangles -that will be packed into the font atlas texture. Register them before building the atlas, then call Build(). -You can then use ImFontAtlas::GetCustomRectByIndex(int) to query the position/size of your rectangle within the -texture, and blit/copy any graphics data of your choice into those rectangles. - -Pseudo-code: - - // Add font, then register two custom 13x13 rectangles mapped to glyph 'a' and 'b' of this font - ImFont* font = io.Fonts->AddFontDefault(); - int rect_ids[2]; - rect_ids[0] = io.Fonts->AddCustomRectFontGlyph(font, 'a', 13, 13, 13+1); - rect_ids[1] = io.Fonts->AddCustomRectFontGlyph(font, 'b', 13, 13, 13+1); - - // Build atlas - io.Fonts->Build(); - - // Retrieve texture in RGBA format - unsigned char* tex_pixels = NULL; - int tex_width, tex_height; - io.Fonts->GetTexDataAsRGBA32(&tex_pixels, &tex_width, &tex_height); - - for (int rect_n = 0; rect_n < IM_ARRAYSIZE(rect_ids); rect_n++) - { - int rect_id = rects_ids[rect_n]; - if (const ImFontAtlas::CustomRect* rect = io.Fonts->GetCustomRectByIndex(rect_id)) - { - // Fill the custom rectangle with red pixels (in reality you would draw/copy your bitmap data here!) - for (int y = 0; y < rect->Height; y++) - { - ImU32* p = (ImU32*)tex_pixels + (rect->Y + y) * tex_width + (rect->X); - for (int x = rect->Width; x > 0; x--) - *p++ = IM_COL32(255, 0, 0, 255); - } - } - } - - ---------------------------------------- - EMBEDDING FONTS IN SOURCE CODE ---------------------------------------- - -Compile and use 'binary_to_compressed_c.cpp' to create a compressed C style array that you can embed in source code. -See the documentation in binary_to_compressed_c.cpp for instruction on how to use the tool. -You may find a precompiled version binary_to_compressed_c.exe for Windows instead of demo binaries package (see README). -The tool can optionally output Base85 encoding to reduce the size of _source code_ but the read-only arrays in the -actual binary will be about 20% bigger. - -Then load the font with: - ImFont* font = io.Fonts->AddFontFromMemoryCompressedTTF(compressed_data, compressed_data_size, size_pixels, ...); -or: - ImFont* font = io.Fonts->AddFontFromMemoryCompressedBase85TTF(compressed_data_base85, size_pixels, ...); - - ---------------------------------------- - CREDITS/LICENSES FOR FONTS INCLUDED IN REPOSITORY ---------------------------------------- - -Some fonts are available in the misc/fonts/ folder: - -Roboto-Medium.ttf - - Apache License 2.0 - by Christian Robertson - https://fonts.google.com/specimen/Roboto - -Cousine-Regular.ttf - - by Steve Matteson - Digitized data copyright (c) 2010 Google Corporation. - Licensed under the SIL Open Font License, Version 1.1 - https://fonts.google.com/specimen/Cousine - -DroidSans.ttf - - Copyright (c) Steve Matteson - Apache License, version 2.0 - https://www.fontsquirrel.com/fonts/droid-sans - -ProggyClean.ttf - - Copyright (c) 2004, 2005 Tristan Grimmer - MIT License - recommended loading setting: Size = 13.0, DisplayOffset.Y = +1 - http://www.proggyfonts.net/ - -ProggyTiny.ttf - Copyright (c) 2004, 2005 Tristan Grimmer - MIT License - recommended loading setting: Size = 10.0, DisplayOffset.Y = +1 - http://www.proggyfonts.net/ - -Karla-Regular.ttf - Copyright (c) 2012, Jonathan Pinhorn - SIL OPEN FONT LICENSE Version 1.1 - - ---------------------------------------- - FONTS LINKS ---------------------------------------- - -ICON FONTS - - C/C++ header for icon fonts (#define with code points to use in source code string literals) - https://github.com/juliettef/IconFontCppHeaders - - FontAwesome - https://fortawesome.github.io/Font-Awesome - - OpenFontIcons - https://github.com/traverseda/OpenFontIcons - - Google Icon Fonts - https://design.google.com/icons/ - - Kenney Icon Font (Game Controller Icons) - https://github.com/nicodinh/kenney-icon-font - - IcoMoon - Custom Icon font builder - https://icomoon.io/app - -REGULAR FONTS - - Google Noto Fonts (worldwide languages) - https://www.google.com/get/noto/ - - Open Sans Fonts - https://fonts.google.com/specimen/Open+Sans - - (Japanese) M+ fonts by Coji Morishita are free - http://mplus-fonts.sourceforge.jp/mplus-outline-fonts/index-en.html - -MONOSPACE FONTS (PIXEL PERFECT) - - Proggy Fonts, by Tristan Grimmer - http://www.proggyfonts.net or http://upperbounds.net - - Sweet16, Sweet16 Mono, by Martin Sedlak (Latin + Supplemental + Extended A) - https://github.com/kmar/Sweet16Font - Also include .inl file to use directly in dear imgui. - -MONOSPACE FONTS (REGULAR) - - Google Noto Mono Fonts - https://www.google.com/get/noto/ - - Typefaces for source code beautification - https://github.com/chrissimpkins/codeface - - Programmation fonts - http://s9w.github.io/font_compare/ - - Inconsolata - http://www.levien.com/type/myfonts/inconsolata.html - - Adobe Source Code Pro: Monospaced font family for user interface and coding environments - https://github.com/adobe-fonts/source-code-pro - - Monospace/Fixed Width Programmer's Fonts - http://www.lowing.org/fonts/ - - - Or use Arial Unicode or other Unicode fonts provided with Windows for full characters coverage (not sure of their licensing). diff --git a/cmake/imgui/docs/README.md b/cmake/imgui/docs/README.md deleted file mode 100644 index 3e001024..00000000 --- a/cmake/imgui/docs/README.md +++ /dev/null @@ -1,224 +0,0 @@ -dear imgui -===== -[![Build Status](https://github.com/ocornut/imgui/workflows/build/badge.svg)](https://github.com/ocornut/imgui/actions?workflow=build) - -(This library is available under a free and permissive license, but needs financial support to sustain its continued improvements. In addition to maintenance and stability there are many desirable features yet to be added. If your company is using dear imgui, please consider reaching out.) - -Businesses: support continued development via invoiced technical support, maintenance, sponsoring contracts: -
  _E-mail: contact @ dearimgui dot org_ - -Individuals: support continued maintenance and development with [PayPal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=WGHNC6MBFLZ2S). - ----- - -Dear ImGui is a **bloat-free graphical user interface library for C++**. It outputs optimized vertex buffers that you can render anytime in your 3D-pipeline enabled application. It is fast, portable, renderer agnostic and self-contained (no external dependencies). - -Dear ImGui is designed to **enable fast iterations** and to **empower programmers** to create **content creation tools and visualization / debug tools** (as opposed to UI for the average end-user). It favors simplicity and productivity toward this goal, and lacks certain features normally found in more high-level libraries. - -Dear ImGui is particularly suited to integration in games engine (for tooling), real-time 3D applications, fullscreen applications, embedded applications, or any applications on consoles platforms where operating system features are non-standard. - -| [Usage](#usage) - [How it works](#how-it-works) - [Demo](#demo) - [Integration](#integration) | -:----------------------------------------------------------: | -| [Upcoming changes](#upcoming-changes) - [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-faq) - [How to help](#how-to-help) - [Sponsors](#sponsors) - [Credits](#credits) - [License](#license) | -| [Wiki](https://github.com/ocornut/imgui/wiki) - [Language & frameworks bindings](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) | - -### Usage - -**The core of Dear ImGui is self-contained within a few platform-agnostic files** which you can easily compile in your application/engine. They are all the files in the root folder of the repository (imgui.cpp, imgui.h, imgui_demo.cpp, imgui_draw.cpp etc.). - -**No specific build process is required**. You can add the .cpp files to your existing project. - -You will need a backend to integrate Dear ImGui in your app. The backend passes mouse/keyboard/gamepad inputs and variety of settings to Dear ImGui, and is in charge of rendering the resulting vertices. - -**Backends for a variety of graphics api and rendering platforms** are provided in the [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder, along with example applications. See the [Integration](#integration) section of this document for details. You may also create your own backend. Anywhere where you can render textured triangles, you can render Dear ImGui. - -After Dear ImGui is setup in your application, you can use it from \_anywhere\_ in your program loop: - -Code: -```cp -ImGui::Text("Hello, world %d", 123); -if (ImGui::Button("Save")) - MySaveFunction(); -ImGui::InputText("string", buf, IM_ARRAYSIZE(buf)); -ImGui::SliderFloat("float", &f, 0.0f, 1.0f); -``` -Result: -
![sample code output (dark)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/capture_readme_styles_0001.png) ![sample code output (light)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v175/capture_readme_styles_0002.png) -
_(settings: Dark style (left), Light style (right) / Font: Roboto-Medium, 16px / Rounding: 5)_ - -Code: -```cpp -// Create a window called "My First Tool", with a menu bar. -ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar); -if (ImGui::BeginMenuBar()) -{ - if (ImGui::BeginMenu("File")) - { - if (ImGui::MenuItem("Open..", "Ctrl+O")) { /* Do stuff */ } - if (ImGui::MenuItem("Save", "Ctrl+S")) { /* Do stuff */ } - if (ImGui::MenuItem("Close", "Ctrl+W")) { my_tool_active = false; } - ImGui::EndMenu(); - } - ImGui::EndMenuBar(); -} - -// Edit a color (stored as ~4 floats) -ImGui::ColorEdit4("Color", my_color); - -// Plot some values -const float my_values[] = { 0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f }; -ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values)); - -// Display contents in a scrolling region -ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff"); -ImGui::BeginChild("Scrolling"); -for (int n = 0; n < 50; n++) - ImGui::Text("%04d: Some text", n); -ImGui::EndChild(); -ImGui::End(); -``` -Result: -
![sample code output](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/code_sample_03_color.gif) - -Dear ImGui allows you **create elaborate tools** as well as very short-lived ones. On the extreme side of short-livedness: using the Edit&Continue (hot code reload) feature of modern compilers you can add a few widgets to tweaks variables while your application is running, and remove the code a minute later! Dear ImGui is not just for tweaking values. You can use it to trace a running algorithm by just emitting text commands. You can use it along with your own reflection data to browse your dataset live. You can use it to expose the internals of a subsystem in your engine, to create a logger, an inspection tool, a profiler, a debugger, an entire game making editor/framework, etc. - -### How it works - -Check out the Wiki's [About the IMGUI paradigm](https://github.com/ocornut/imgui/wiki#About-the-IMGUI-paradigm) section if you want to understand the core principles behind the IMGUI paradigm. An IMGUI tries to minimize superfluous state duplication, state synchronization and state retention from the user's point of view. It is less error prone (less code and less bugs) than traditional retained-mode interfaces, and lends itself to create dynamic user interfaces. - -Dear ImGui outputs vertex buffers and command lists that you can easily render in your application. The number of draw calls and state changes required to render them is fairly small. Because Dear ImGui doesn't know or touch graphics state directly, you can call its functions anywhere in your code (e.g. in the middle of a running algorithm, or in the middle of your own rendering process). Refer to the sample applications in the examples/ folder for instructions on how to integrate dear imgui with your existing codebase. - -_A common misunderstanding is to mistake immediate mode gui for immediate mode rendering, which usually implies hammering your driver/GPU with a bunch of inefficient draw calls and state changes as the gui functions are called. This is NOT what Dear ImGui does. Dear ImGui outputs vertex buffers and a small list of draw calls batches. It never touches your GPU directly. The draw call batches are decently optimal and you can render them later, in your app or even remotely._ - -### Demo - -Calling the `ImGui::ShowDemoWindow()` function will create a demo window showcasing variety of features and examples. The code is always available for reference in `imgui_demo.cpp`. - -![screenshot demo](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v167/v167-misc.png) - -You should be able to build the examples from sources (tested on Windows/Mac/Linux). If you don't, let me know! If you want to have a quick look at some Dear ImGui features, you can download Windows binaries of the demo app here: -- [imgui-demo-binaries-20190715.zip](http://www.dearimgui.org/binaries/imgui-demo-binaries-20190715.zip) (Windows binaries, 1.72 WIP, built 2019/07/15, master branch, 5 executables) - -The demo applications are not DPI aware so expect some blurriness on a 4K screen. For DPI awareness in your application, you can load/reload your font at different scale, and scale your style with `style.ScaleAllSizes()`. - -### Integration - -On most platforms and when using C++, **you should be able to use a combination of the [imgui_impl_xxxx](https://github.com/ocornut/imgui/tree/master/examples) files without modification** (e.g. `imgui_impl_win32.cpp` + `imgui_impl_dx11.cpp`). If your engine supports multiple platforms, consider using more of the imgui_impl_xxxx files instead of rewriting them: this will be less work for you and you can get Dear ImGui running immediately. You can _later_ decide to rewrite a custom binding using your custom engine functions if you wish so. - -Integrating Dear ImGui within your custom engine is a matter of 1) wiring mouse/keyboard/gamepad inputs 2) uploading one texture to your GPU/render engine 3) providing a render function that can bind textures and render textured triangles. The [examples/](https://github.com/ocornut/imgui/tree/master/examples) folder is populated with applications doing just that. If you are an experienced programmer at ease with those concepts, it should take you less than two hours to integrate Dear ImGui in your custom engine. **Make sure to spend time reading the [FAQ](https://www.dearimgui.org/faq), comments, and some of the examples/ application!** - -Officially maintained bindings (in repository): -- Renderers: DirectX9, DirectX10, DirectX11, DirectX12, OpenGL (legacy), OpenGL3/ES/ES2 (modern), Vulkan, Metal. -- Platforms: GLFW, SDL2, Win32, Glut, OSX. -- Frameworks: Emscripten, Allegro5, Marmalade. - -Third-party bindings (see [Bindings](https://github.com/ocornut/imgui/wiki/Bindings/) page): -- Languages: C, C#/.Net, ChaiScript, D, Go, Haskell, Haxe/hxcpp, Java, JavaScript, Julia, Kotlin, Lua, Odin, Pascal, PureBasic, Python, Ruby, Rust, Swift... -- Frameworks: AGS/Adventure Game Studio, Amethyst, bsf, Cinder, Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, NanoRT, Nim Game Lib, Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, px_render, Qt/QtDirect3D, SFML, Sokol, Unreal Engine 4, vtk, Win32 GDI. -- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are auto-generated, you can use its json/lua output to generate bindings for other languages. - -Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and ideas. - -### Upcoming Changes - -Some of the goals for 2020 are: -- Finish work on docking, tabs. (see [#2109](https://github.com/ocornut/imgui/issues/2109), in public [docking](https://github.com/ocornut/imgui/tree/docking) branch looking for feedback) -- Finish work on multiple viewports / multiple OS windows. (see [#1542](https://github.com/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut/imgui/tree/docking) branch looking for feedback) -- Finish work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/imgui/issues/787)) -- Finish work on new Tables API (to replace Columns). (see [#2957](https://github.com/ocornut/imgui/issues/2957)) -- Add an automation and testing system, both to test the library and end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435)) -- Make the examples look better, improve styles, improve font support, make the examples hi-DPI and multi-DPI aware. - -### Gallery - -For more user-submitted screenshots of projects using Dear ImGui, check out the [Gallery Threads](https://github.com/ocornut/imgui/issues/3075)! - -Custom engine -[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png) - -Custom engine -[![screenshot tool](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white_preview.jpg)](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v160/editor_white.png) - -[Tracy Profiler](https://bitbucket.org/wolfpld/tracy) -![tracy profiler](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v173/tracy_profiler.jpg) - -### Support, Frequently Asked Questions (FAQ) - -Most common questions will be answered by the [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob/master/docs/FAQ.md) page. - -See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links, references, articles. - -See: [Articles about the IMGUI paradigm](https://github.com/ocornut/imgui/wiki#Articles-about-the-IMGUI-paradigm) to read/learn about the Immediate Mode GUI paradigm. - -If you are new to Dear ImGui and have issues with: compiling, linking, adding fonts, wiring inputs, running or displaying Dear ImGui: you can use [Discord server](http://discord.dearimgui.org). - -Otherwise, for any other questions, bug reports, requests, feedback, you may post on https://github.com/ocornut/imgui/issues. Please read and fill the New Issue template carefully. - -Paid private support is available for business customers (E-mail: _contact @ dearimgui dot org_). - -**Which version should I get?** - -I occasionally tag [Releases](https://github.com/ocornut/imgui/releases) but it is generally safe and recommended to sync to master/latest. The library is fairly stable and regressions tend to be fixed fast when reported. - -You may also peak at the [Multi-Viewport](https://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109) features in the `docking` branch. Many projects are using this branch and it is kept in sync with master regularly. - -**Who uses Dear ImGui?** - -See the [Quotes](https://github.com/ocornut/imgui/wiki/Quotes), [Sponsors](https://github.com/ocornut/imgui/wiki/Sponsors), [Software using dear imgui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui) Wiki pages for an idea of who is using Dear ImGui. Please add your game/software if you can! Also see the [Gallery Threads](https://github.com/ocornut/imgui/issues/3075)! - -How to help ------------ - -**How can I help?** - -- You may participate in the [Discord server](http://discord.dearimgui.org), [GitHub forum/issues](https://github.com/ocornut/imgui/issues). -- You may help with development and submit pull requests! Please understand that by submitting a PR you are also submitting a request for the maintainer to review your code and then take over its maintenance forever. PR should be crafted both in the interest in the end-users and also to ease the maintainer into understanding and accepting it. -- See [Help wanted](https://github.com/ocornut/imgui/wiki/Help-Wanted) on the [Wiki](https://github.com/ocornut/imgui/wiki/) for some more ideas. -- Have your company financially support this project. - -**How can I help financing further development of Dear ImGui?** - -Your contributions are keeping this project alive. The library is available under a free and permissive license, but continued maintenance and development are a full-time endeavor and I would like to grow the team. In addition to maintenance and stability there are many desirable features yet to be added. If your company is using dear imgui, please consider reaching out for invoiced technical support and maintenance contracts. Thank you! - -Businesses: support continued development via invoiced technical support, maintenance, sponsoring contracts: -
  _E-mail: contact @ dearimgui dot org_ - -Individuals: support continued maintenance and development with [PayPal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=WGHNC6MBFLZ2S). - -Sponsors --------- - -Ongoing Dear ImGui development is financially supported by users and private sponsors, recently: - -*Platinum-chocolate sponsors* -- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/all/1), [Google](https://github.com/google/filament), [Nvidia](https://developer.nvidia.com/nvidia-omniverse), [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-library-for-c-dear-imgui/) - -*Double-chocolate and Salty caramel sponsors* -- [Activision](https://careers.activision.com/c/programmingsoftware-engineering-jobs), [DotEmu](http://www.dotemu.com), [Framefield](http://framefield.com), [Hexagon](https://hexagonxalt.com/the-technology/xalt-visualization), [Kylotonn](https://www.kylotonn.com), [Media Molecule](http://www.mediamolecule.com), [Mesh Consultants](https://www.meshconsultants.ca), [Mobigame](http://www.mobigame.net), [Nadeo](https://www.nadeo.com), [Supercell](http://www.supercell.com), [Remedy Entertainment](https://www.remedygames.com/), [Unit 2 Games](https://unit2games.com/) - -From November 2014 to December 2019, ongoing development has also been financially supported by its users on Patreon and through individual donations. Please see [detailed list of Dear ImGui supporters](https://github.com/ocornut/imgui/wiki/Sponsors). - -**THANK YOU to all past and present supporters for helping to keep this project alive and thriving!** - -Dear ImGui is using software and services provided free of charge for open source projects: -- [PVS-Studio](https://www.viva64.com/en/b/0570/) for static analysis. -- [GitHub actions](https://github.com/features/actions) for continuous integration systems. -- [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) for code coverage analysis. - -Credits -------- - -Developed by [Omar Cornut](http://www.miracleworld.net) and every direct or indirect contributors to the GitHub. The early version of this library was developed with the support of [Media Molecule](http://www.mediamolecule.com) and first used internally on the game [Tearaway](http://tearaway.mediamolecule.com) (Vita). - -I first discovered the IMGUI paradigm at [Q-Games](http://www.q-games.com) where Atman Binstock had dropped his own simple implementation in the codebase, which I spent quite some time improving and thinking about. It turned out that Atman was exposed to the concept directly by working with Casey. When I moved to Media Molecule I rewrote a new library trying to overcome the flaws and limitations of the first one I've worked with. It became this library and since then I have spent an unreasonable amount of time iterating and improving it. - -Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT license). - -Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/nothings/stb/) by Sean Barrett (public domain). - -Inspiration, feedback, and testing for early versions: Casey Muratori, Atman Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov, Matt Willis. And everybody posting feedback, questions and patches on the GitHub. - -License -------- - -Dear ImGui is licensed under the MIT License, see [LICENSE.txt](https://github.com/ocornut/imgui/blob/master/LICENSE.txt) for more information. diff --git a/cmake/imgui/docs/TODO.txt b/cmake/imgui/docs/TODO.txt deleted file mode 100644 index 474b5ce5..00000000 --- a/cmake/imgui/docs/TODO.txt +++ /dev/null @@ -1,401 +0,0 @@ -dear imgui -ISSUES & TODO LIST - -Issue numbers (#) refer to github issues listed at https://github.com/ocornut/imgui/issues/XXXX -The list below consist mostly of ideas noted down before they are requested/discussed by users (at which point they usually exist on the github issue tracker). -It's mostly a bunch of personal notes, probably incomplete. Feel free to query if you have any questions. - - - doc/test: add a proper documentation+regression testing system (#435) - - doc/test: checklist app to verify binding/integration of imgui (test inputs, rendering, callback, etc.). - - doc/tips: tips of the day: website? applet in imgui_club? - - doc/wiki: work on the wiki https://github.com/ocornut/imgui/wiki - - - window: preserve/restore relative focus ordering (persistent or not) (#2304) -> also see docking reference to same #. - - window: calling SetNextWindowSize() every frame with <= 0 doesn't do anything, may be useful to allow (particularly when used for a single axis). (#690) - - window: add a way for very transient windows (non-saved, temporary overlay over hundreds of objects) to "clean" up from the global window list. perhaps a lightweight explicit cleanup pass. - - window: auto-fit feedback loop when user relies on any dynamic layout (window width multiplier, column) appears weird to end-user. clarify. - - window: begin with *p_open == false could return false. - - window: get size/pos helpers given names (see discussion in #249) - - window: a collapsed window can be stuck behind the main menu bar? - - window: when window is very small, prioritize resize button over close button. - - window: detect extra End() call that pop the "Debug" window out and assert at End() call site instead of at end of frame. - - window: increase minimum size of a window with menus or fix the menu rendering so that it doesn't look odd. - - window: double-clicking on title bar to minimize isn't consistent, perhaps move to single-click on left-most collapse icon? - - window: expose contents size. (#1045) - - window: using SetWindowPos() inside Begin() and moving the window with the mouse reacts a very ugly glitch. We should just defer the SetWindowPos() call. - - window: GetWindowSize() returns (0,0) when not calculated? (#1045) - - window: investigate better auto-positioning for new windows. - - window: top most window flag? (#2574) - - window: the size_on_first_use path of Begin() can probably be removed - - window/size: manually triggered auto-fit (double-click on grip) shouldn't resize window down to viewport size? - - window/opt: freeze window flag: if not focused/hovered, return false, render with previous ImDrawList. and/or reduce refresh rate. -> this may require enforcing that it is illegal to submit contents if Begin returns false. - - window/child: background options for child windows, border option (disable rounding). - - window/child: allow resizing of child windows (possibly given min/max for each axis?.) - - window/child: the first draw command of a child window could be moved into the current draw command of the parent window (unless child+tooltip?). - - window/child: border could be emitted in parent as well. - - window/child: allow SetNextWindowContentSize() to work on child windows. - - window/clipping: some form of clipping when DisplaySize (or corresponding viewport) is zero. - - window/tab: add a way to signify that a window or docked window requires attention (e.g. blinking title bar). - ! scrolling: exposing horizontal scrolling with Shift+Wheel even when scrollbar is disabled expose lots of issues (#2424, #1463) - - scrolling: while holding down a scrollbar, try to keep the same contents visible (at least while not moving mouse) - - scrolling: allow immediately effective change of scroll after Begin() if we haven't appended items yet. - - scrolling: forward mouse wheel scrolling to parent window when at the edge of scrolling limits? (useful for listbox,tables?) - - scrolling/clipping: separator on the initial position of a window is not visible (cursorpos.y <= clippos.y). (2017-08-20: can't repro) - - scrolling/style: shadows on scrollable areas to denote that there is more contents (see e.g. DaVinci Resolve ui) - - - drawdata: make it easy to clone (or swap?) a full ImDrawData so user can easily save that data if they use threaded rendering. (e.g. #2646) - ! drawlist: add calctextsize func to facilitate consistent code from user pov (currently need to use ImGui or ImFont alternatives!) - - drawlist: end-user probably can't call Clear() directly because we expect a texture to be pushed in the stack. - - drawlist: maintaining bounding box per command would allow to merge draw command when clipping isn't relied on (typical non-scrolling window or non-overflowing column would merge with previous command). - - drawlist: primitives/helpers to manipulate vertices post submission, so e.g. a quad/rect can be resized to fit later submitted content, _without_ using the ChannelSplit api - - drawlist: make it easier to toggle AA per primitive, so we can use e.g. non-AA fill + AA borders more naturally - - drawlist: non-AA strokes have gaps between points (#593, #288), glitch especially on RenderCheckmark() and ColorPicker4(). - - drawlist: would be good to be able to deep copy of ImDrawData (we have a deep copy of ImDrawList now). - - drawlist: rendering: provide a way for imgui to output to a single/global vertex buffer, re-order indices only at the end of the frame (ref: https://gist.github.com/floooh/10388a0afbe08fce9e617d8aefa7d302) - - drawlist: callback: add an extra void* in ImDrawCallback to allow passing render-local data to the callback (would break API). - - drawlist: AddRect vs AddLine position confusing (#2441) - - drawlist: channel splitter should be external helper and not stored in ImDrawList. - - drawlist/opt: store rounded corners in texture to use 1 quad per corner (filled and wireframe) to lower the cost of rounding. (#1962) - - drawlist/opt: AddRect() axis aligned pixel aligned (no-aa) could use 8 triangles instead of 16 and no normal calculation. - - drawlist/opt: thick AA line could be doable in same number of triangles as 1.0 AA line by storing gradient+full color in atlas. - - - main: find a way to preserve relative orders of multiple reappearing windows (so an app toggling between "modes" e.g. fullscreen vs all tools) won't lose relative ordering. - - main: IsItemHovered() make it more consistent for various type of widgets, widgets with multiple components, etc. also effectively IsHovered() region sometimes differs from hot region, e.g tree nodes - - main: IsItemHovered() info stored in a stack? so that 'if TreeNode() { Text; TreePop; } if IsHovered' return the hover state of the TreeNode? - - - widgets: display mode: widget-label, label-widget (aligned on column or using fixed size), label-newline-tab-widget etc. (#395) - - widgets: clean up widgets internal toward exposing everything and stabilizing imgui_internals.h. - - widgets: add visuals for Disabled/ReadOnly mode and expose publicly (#211) - - widgets: add always-allow-overlap mode. This should perhaps be the default? one problem is that highlight after mouse-wheel scrolling gets deferred, makes scrolling more flickery. - - widgets: start exposing PushItemFlag() and ImGuiItemFlags - - widgets: alignment options in style (e.g. center Selectable, Right-Align within Button, etc.) #1260 - - widgets: activate by identifier (trigger button, focus given id) - - widgets: a way to represent "mixed" values, so e.g. all values replaced with *, including check-boxes, colors, etc. with support for multi-components widgets (e.g. SliderFloat3, make only "Y" mixed) (#2644) - - widgets: checkbox: checkbox with custom glyph inside frame. - - widgets: coloredit: keep reporting as active when picker is on? - - widgets: group/scalarn functions: expose more per-component information. e.g. store NextItemData.ComponentIdx set by scalarn function, groups can expose them back somehow. - - selectable: using (size.x == 0.0f) and (SelectableTextAlign.x > 0.0f) followed by SameLine() is currently not supported. - - selectable: generic BeginSelectable()/EndSelectable() mechanism. - - selectable: a way to visualize partial/mixed selection (e.g. parent tree node has children with mixed selection) - - - input text: clean up the mess caused by converting UTF-8 <> wchar. the code is rather inefficient right now and super fragile. - - input text: reorganize event handling, allow CharFilter to modify buffers, allow multiple events? (#541) - - input text: expose CursorPos in char filter event (#816) - - input text: try usage idiom of using InputText with data only exposed through get/set accessors, without extraneous copy/alloc. (#3009) - - input text: access public fields via a non-callback API e.g. InputTextGetState("xxx") that may return NULL if not active. - - input text: flag to disable live update of the user buffer (also applies to float/int text input) (#701) - - input text: hover tooltip could show unclamped text - - input text: option to Tab after an Enter validation. - - input text: add ImGuiInputTextFlags_EnterToApply? (off #218) - - input text: easier ways to update buffer (from source char*) while owned. preserve some sort of cursor position for multi-line text. - - input text: add flag (e.g. ImGuiInputTextFlags_EscapeClearsBuffer) to clear instead of revert. what to do with focus? (also see #2890) - - input text: add discard flag (e.g. ImGuiInputTextFlags_DiscardActiveBuffer) or make it easier to clear active focus for text replacement during edition (#725) - - input text: display bug when clicking a drag/slider after an input text in a different window has all-selected text (order dependent). actually a very old bug but no one appears to have noticed it. - - input text: allow centering/positioning text so that ctrl+clicking Drag or Slider keeps the textual value at the same pixel position. - - input text: decorrelate layout from inputs - e.g. what's the easiest way to implement a nice IP/Mac address input editor? - - input text: global callback system so user can plug in an expression evaluator easily. (#1691) - - input text: force scroll to end or scroll to a given line/contents (so user can implement a log or a search feature) - - input text: a way to preview completion (e.g. disabled text completing from the cursor) - - input text: a side bar that could e.g. preview where errors are. probably left to the user to draw but we'd need to give them the info there. - - input text: a way for the user to provide syntax coloring. - - input text: Shift+TAB with ImGuiInputTextFlags_AllowTabInput could eat preceding blanks, up to tab_count. - - input text: facilitate patterns like if (InputText(..., obj.get_string_ref()) { obj.set_string(...); } relying on internally held buffer. - - input text multi-line: don't directly call AddText() which does an unnecessary vertex reserve for character count prior to clipping. and/or more line-based clipping to AddText(). and/or reorganize TextUnformatted/RenderText for more efficiency for large text (e.g TextUnformatted could clip and log separately, etc). - - input text multi-line: support for cut/paste without selection (cut/paste the current line) - - input text multi-line: line numbers? status bar? (follow up on #200) - - input text multi-line: behave better when user changes input buffer while editing is active (even though it is illegal behavior). namely, the change of buffer can create a scrollbar glitch (#725) - - input text multi-line: better horizontal scrolling support (#383, #1224) - - input text multi-line: single call to AddText() should be coarse clipped on InputTextEx() end. - - input number: optional range min/max for Input*() functions - - input number: holding [-]/[+] buttons could increase the step speed non-linearly (or user-controlled) - - input number: use mouse wheel to step up/down - - input number: applying arithmetics ops (+,-,*,/) messes up with text edit undo stack. - - - layout: helper or a way to express ImGui::SameLine(ImGui::GetCursorStartPos().x + ImGui::CalcItemWidth() + ImGui::GetStyle().ItemInnerSpacing.x); in a simpler manner. - - layout: generalization of the above: a concept equivalent to word processor ruler tab stop ~ mini columns (position in X, no clipping implied) (vaguely relate to #267, #395, also what is used internally for menu items) - - layout: horizontal layout helper (#97) - - layout: horizontal flow until no space left (#404) - - layout: more generic alignment state (left/right/centered) for single items? - - layout: clean up the InputFloatN/SliderFloatN/ColorEdit4 layout code. item width should include frame padding. - - layout: vertical alignment of mixed height items (e.g. buttons) within a same line (#1284) - - layout: null layout mode were items are not rendered but user can query GetItemRectMin()/Max/Size. - - layout: (R&D) local multi-pass layout mode. - - layout: (R&D) bind authored layout data (created by an off-line tool), items fetch their pos/size at submission, self-optimize data structures to stable linear access. - - - group: BeginGroup() needs a border option. (~#1496) - - group: IsHovered() after EndGroup() covers whole aabb rather than the intersection of individual items. Is that desirable? - - group: merge deactivation/activation within same group (fwd WasEdited flag). (#2550) - - - columns: sizing policy (e.g. for each column: fixed size, %, fill, distribute default size among fills) (#513, #125) - - columns: add a conditional parameter to SetColumnOffset() (#513, #125) - - columns: headers. re-orderable. (#513, #125) - - columns: optional sorting modifiers (up/down), sort list so sorting can be done multi-criteria. notify user when sort order changed. - - columns: option to alternate background colors on odd/even scanlines. - - columns: allow columns to recurse. - - columns: allow a same columns set to be interrupted by e.g. CollapsingHeader and resume with columns in sync when moving them. - - columns: sizing is lossy when columns width is very small (default width may turn negative etc.) - - columns: separator function or parameter that works within the column (currently Separator() bypass all columns) (#125) - - columns: flag to add horizontal separator above/below? - - columns/layout: setup minimum line height (equivalent of automatically calling AlignFirstTextHeightToWidgets) - -!- color: the color conversion helpers/types are a mess and needs sorting out. - - color: (api breaking) ImGui::ColorConvertXXX functions should be loose ImColorConvertXX to match imgui_internals.h - - - plot: full featured plot/graph api w/ scrolling, zooming etc. all bell & whistle. why not! - - plot: PlotLines() should use the polygon-stroke facilities, less vertices (currently issues with averaging normals) - - plot: make it easier for user to draw extra stuff into the graph (e.g: draw basis, highlight certain points, 2d plots, multiple plots) - - plot: "smooth" automatic scale over time, user give an input 0.0(full user scale) 1.0(full derived from value) - - plot: option/feature: draw the zero line - - plot: option/feature: draw grid, vertical markers - - plot: option/feature: draw unit - - plot: add a helper e.g. Plot(char* label, float value, float time_span=2.0f) that stores values and Plot them for you - probably another function name. and/or automatically allow to plot ANY displayed value (more reliance on stable ID) - - - clipper: ability to force display 1 item in the list would be convenient (for patterns where we need to set active id etc.) - - clipper: ability to disable the clipping through a simple flag/bool. - - clipper: ability to run without knowing full count in advance. - - clipper: horizontal clipping support. (#2580) - - - separator: expose flags (#759) - - separator: width, thickness, centering (#1643) - - splitter: formalize the splitter idiom into an official api (we want to handle n-way split) (#319) - - - dock: merge docking branch (#2109) - - dock: dock out from a collapsing header? would work nicely but need emitting window to keep submitting the code. - - - tabs: make EndTabBar fail if users doesn't respect BeginTabBar return value, for consistency/future-proofing. - - tabs: persistent order/focus in BeginTabBar() api (#261, #351) - - tabs: TabItem could honor SetNextItemWidth()? - - tabs: explicit api (even if internal) to cleanly manipulate tab order. - - tabs: Mouse wheel over tab bar could scroll? (#2702) - - - - image/image button: misalignment on padded/bordered button? - - image/image button: parameters are confusing, image() has tint_col,border_col whereas imagebutton() has bg_col/tint_col. Even thou they are different parameters ordering could be more consistent. can we fix that? - - image button: not taking an explicit id can be problematic. (#2464, #1390) - - button: provide a button that looks framed. (?) - - slider/drag: ctrl+click when format doesn't include a % character.. disable? display underlying value in default format? (see TempInputTextScalar) - - slider: allow using the [-]/[+] buttons used by InputFloat()/InputInt() - - slider: initial absolute click is imprecise. change to relative movement slider (same as scrollbar). (#1946) - - slider: add dragging-based widgets to edit values with mouse (on 2 axises), saving screen real-estate. - - slider: tint background based on value (e.g. v_min -> v_max, or use 0.0f either side of the sign) - - slider: relative dragging? + precision dragging - - slider: step option (#1183) - - slider style: fill % of the bar instead of positioning a drag. - - knob: rotating knob widget (#942) - - drag float: power/logarithmic slider and drags are weird. (#1316) - - drag float: up/down axis - - drag float: power != 0.0f with current value being outside the range keeps the value stuck. - - drag float: added leeway on edge (e.g. a few invisible steps past the clamp limits) - - - combo: use clipper: make it easier to disable clipper with a single flag. - - combo: flag for BeginCombo to not return true when unchanged (#1182) - - combo: a way/helper to customize the combo preview (#1658) - - combo/listbox: keyboard control. need InputText-like non-active focus + key handling. considering keyboard for custom listbox (pr #203) - - listbox: refactor and clean the begin/end api - - listbox: multiple selection. - - listbox: unselect option (#1208) - - listbox: make it easier/more natural to implement range-select (need some sort of info/ref about the last clicked/focused item that user can translate to an index?) (wip stash) - - listbox: user may want to initial scroll to focus on the one selected value? - - listbox: expose hovered item for a basic ListBox - - listbox: keyboard navigation. - - listbox: disable capturing mouse wheel if the listbox has no scrolling. (#1681) - - listbox: scrolling should track modified selection. - - listbox: future api should allow to enable horizontal scrolling (#2510) - -!- popups/menus: clarify usage of popups id, how MenuItem/Selectable closing parent popups affects the ID, etc. this is quite fishy needs improvement! (#331, #402) - - popups/modal: make modal title bar blink when trying to click outside the modal - - popups: reopening context menu at new position should be the behavior by default? (equivalent to internal OpenPopupEx() with reopen_existing=true) (~#1497) - - popups: if the popup functions took explicit ImGuiID it would allow the user to manage the scope of those ID. (#331) - - popups: clicking outside (to close popup) and holding shouldn't drag window below. - - popups: add variant using global identifier similar to Begin/End (#402) - - popups: border options. richer api like BeginChild() perhaps? (#197) - - - tooltip: drag and drop with tooltip near monitor edges lose/changes its last direction instead of locking one. The drag and drop tooltip should always follow without changing direction. - - tooltip: tooltip that doesn't fit in entire screen seems to lose their "last preferred direction" and may teleport when moving mouse. - - tooltip: allow to set the width of a tooltip to allow TextWrapped() etc. while keeping the height automatic. - - tooltip: tooltips with delay timers? or general timer policy? (instantaneous vs timed): IsItemHovered() with timer + implicit aabb-id for items with no ID. (#1485) - - tooltip: drag tooltip hovering over source widget with IsItemHovered/SetTooltip flickers. - - - menus: menu bars inside modal windows are acting weird. - - status-bar: add a per-window status bar helper similar to what menu-bar does. - - shortcuts: local-style shortcut api, e.g. parse "&Save" - - shortcuts,menus: global-style shortcut api e.g. "Save (CTRL+S)" -> explicit flag for recursing into closed menu - - shortcuts: programmatically access shortcuts "Focus("&Save")) - - menus: menu-bar: main menu-bar could affect clamping of windows position (~ akin to modifying DisplayMin) - - menus: hovering from menu to menu on a menu-bar has 1 frame without any menu, which is a little annoying. ideally either 0 either longer. - - menus: could merge draw call in most cases (how about storing an optional aabb in ImDrawCmd to move the burden of merging in a single spot). - - menus: would be nice if the Selectable() supported horizontal alignment (must be given the equivalent of WorkRect.Max.x matching the position of the shortcut column) - - - tree node: add treenode/treepush int variants? not there because (void*) cast from int warns on some platforms/settings? - - tree node: try to apply scrolling at time of TreePop() if node was just opened and end of node is past scrolling limits? - - tree node / selectable render mismatch which is visible if you use them both next to each other (e.g. cf. property viewer) - - tree node: tweak color scheme to distinguish headers from selected tree node (#581) - - tree node: leaf/non-leaf highlight mismatch. - - tree node/opt: could avoid formatting when clipped (flag assuming we don't care about width/height, assume single line height?) - - - settings: write more decent code to allow saving/loading new fields: columns, selected tree nodes? - - settings: api for per-tool simple persistent data (bool,int,float,columns sizes,etc.) in .ini file (#437) - - settings/persistence: helpers to make TreeNodeBehavior persist (even during dev!) - may need to store some semantic and/or data type in ImGuiStoragePair - - - style: better default styles. (#707) - - style: add a highlighted text color (for headers, etc.) - - style: border types: out-screen, in-screen, etc. (#447) - - style: add window shadow (fading away from the window. Paint-style calculation of vertices alpha after drawlist would be easier) - - style: a concept of "compact style" that the end-user can easily rely on (e.g. PushStyleCompact()?) that maps to other settings? avoid implementing duplicate helpers such as SmallCheckbox(), etc. - - style: try to make PushStyleVar() more robust to incorrect parameters (to be more friendly to edit & continues situation). - - style: global scale setting. - - style: FramePadding could be different for up vs down (#584) - - style: WindowPadding needs to be EVEN as the 0.5 multiplier used on this value probably have a subtle effect on clip rectangle - - style: have a more global HSV setter (e.g. alter hue on all elements). consider replacing active/hovered by offset in HSV space? (#438, #707, #1223) - - style: gradients fill (#1223) ~ 2 bg colors for each fill? tricky with rounded shapes and using textures for corners. - - style editor: color child window height expressed in multiple of line height. - - - log: have more control over the log scope (e.g. stop logging when leaving current tree node scope) - - log: be able to log anything (e.g. right-click on a window/tree-node, shows context menu? log into tty/file/clipboard) - - log: let user copy any window content to clipboard easily (CTRL+C on windows? while moving it? context menu?). code is commented because it fails with multiple Begin/End pairs. - - log: obsolete LogButtons() all together. - - log: LogButtons() options for specifying depth and/or hiding depth slider - - log: enabling log ends up pushing and growing vertices buffersbecause we don't distinguish layout vs render clipping - - - filters: set a current filter that tree node can automatically query to hide themselves - - filters: handle wild-cards (with implicit leading/trailing *), reg-exprs - - filters: fuzzy matches (may use code at blog.forrestthewoods.com/4cffeed33fdb) - - - drag and drop: fix/support/options for overlapping drag sources. - - drag and drop: releasing a drop shows the "..." tooltip for one frame - since e13e598 (#1725) - - drag and drop: drag source on a group object (would need e.g. an invisible button covering group in EndGroup) https://twitter.com/paniq/status/1121446364909535233 - - drag and drop: have some way to know when a drag begin from BeginDragDropSource() pov. (see 2018/01/11 post in #143) - - drag and drop: allow preview tooltip to be submitted from a different place than the drag source. (#1725) - - drag and drop: allow using with other mouse buttons (where activeid won't be set). (#1637) - - drag and drop: make it easier and provide a demo to have tooltip both are source and target site, with a more detailed one on target site (tooltip ordering problem) - - drag and drop: demo with reordering nodes (in a list, or a tree node). (#143) - - drag and drop: test integrating with os drag and drop (make it easy to do a naive WM_DROPFILE integration) - - drag and drop: allow for multiple payload types. (#143) - - drag and drop: make payload optional? payload promise? (see 2018/01/11 post in #143) - - drag and drop: (#143) "both an in-process pointer and a promise to generate a serialized version, for whether the drag ends inside or outside the same process" - - drag and drop: feedback when hovering a region blocked by modal (mouse cursor "NO"?) - - - node/graph editors (#306) (also see https://github.com/ocornut/imgui/wiki#node-editors) - - pie menus patterns (#434) - - markup: simple markup language for color change? (#902) - - - text: selectable text (for copy) as a generic feature (ItemFlags?) - - text: proper alignment options in imgui_internal.h - - text: it's currently impossible to have a window title with "##". perhaps an official workaround would be nice. \ style inhibitor? non-visible ascii code to insert between #? - - text: provided a framed text helper, e.g. https://pastebin.com/1Laxy8bT - - text: refactor TextUnformatted (or underlying function) to more explicitly request if we need width measurement or not - - text link/url button: underlined. should api expose an ID or use text contents as ID? which colors enum to use? - - text/wrapped: should be a more first-class citizen, e.g. wrapped text within a Selectable with known width. - - text/wrapped: custom separator for text wrapping. (#3002) - - text/wrapped: figure out better way to use TextWrapped() in an always auto-resize context (tooltip, etc.) (#249) - - - font: arbitrary line spacing. (#2945) - - font: MergeMode: flags to select overwriting or not (this is now very easy with refactored ImFontAtlasBuildWithStbTruetype) - - font: free the Alpha buffer if user only requested RGBA. -!- font: better CalcTextSizeA() API, at least for simple use cases. current one is horrible (perhaps have simple vs extended versions). - - font: for the purpose of RenderTextEllipsis(), it might be useful that CalcTextSizeA() can ignore the trailing padding? - - font: a CalcTextHeight() helper could run faster than CalcTextSize().y - - font: enforce monospace through ImFontConfig (for icons?) + create dual ImFont output from same input, reusing rasterized data but with different glyphs/AdvanceX - - font: finish CustomRectRegister() to allow mapping Unicode codepoint to custom texture data - - font: remove ID from CustomRect registration, it seems unnecessary! - - font: make it easier to submit own bitmap font (same texture, another texture?). (#2127, #2575) - - font: PushFontSize API (#1018) - - font: MemoryTTF taking ownership confusing/not obvious, maybe default should be opposite? - - font: storing MinAdvanceX per font would allow us to skip calculating line width (under a threshold of character count) in loops looking for block width - - font/demo: add tools to show glyphs used by a text blob, display U16 value, list missing glyphs. - - font/demo: demonstrate use of ImFontGlyphRangesBuilder. - - font/atlas: add a missing Glyphs.reserve() - - font/atlas: incremental updates - - font/atlas: dynamic font atlas to avoid baking huge ranges into bitmap and make scaling easier. - - font/draw: vertical and/or rotated text renderer (#705) - vertical is easier clipping wise - - font/draw: need to be able to specify wrap start position. - - font/draw: better reserve policy for large horizontal block of text (shouldn't reserve for all clipped lines) - - font/draw: underline, squiggle line rendering helpers. - - font: optimization: for monospace font (like the default one) we can trim IndexXAdvance as long as trailing value is == FallbackXAdvance (need to make sure TAB is still correct), would save on cache line. - - font: add support for kerning, probably optional. A) perhaps default to (32..128)^2 matrix ~ 9K entries = 36KB, then hash for non-ascii?. B) or sparse lookup into per-char list? - - font: add a simpler CalcTextSizeA() api? current one ok but not welcome if user needs to call it directly (without going through ImGui::CalcTextSize) - - font: fix AddRemapChar() to work before atlas has been built. - - font: support for unicode codepoints higher than 0xFFFF? (pr #2815) - - font: (api breaking) remove "TTF" from symbol names. also because it now supports OTF. - - font/opt: Considering storing standalone AdvanceX table as 16-bit fixed point integer? - - font/opt: Glyph currently 40 bytes (2+9*4). Consider storing UV as 16 bits integer? (->32 bytes). X0/Y0/X1/Y1 as 16 fixed-point integers? Or X0/Y0 as float and X1/Y1 as fixed8_8? - - - nav: some features such as PageUp/Down/Home/End should probably work without ImGuiConfigFlags_NavEnableKeyboard? (where do we draw the line?) - ! nav: never clear NavId on some setup (e.g. gamepad centric) - - nav: code to focus child-window on restoring NavId appears to have issue: e.g. when focus change is implicit because of window closure. - - nav: configuration flag to disable global shortcuts (currently only CTRL-Tab) ? - - nav: Home/End behavior when navigable item is not fully visible at the edge of scrolling? should be backtrack to keep item into view? - - nav: NavScrollToBringItemIntoView() with item bigger than view should focus top-right? Repro: using Nav in "About Window" - - nav: wrap around logic to allow e.g. grid based layout (pressing NavRight on the right-most element would go to the next row, etc.). see internal's NavMoveRequestTryWrapping(). - - nav: patterns to make it possible for arrows key to update selection - - nav: restore/find nearest NavId when current one disappear (e.g. pressed a button that disappear, or perhaps auto restoring when current button change name) - - nav: SetItemDefaultFocus() level of priority, so widget like Selectable when inside a popup could claim a low-priority default focus on the first selected iem - - nav: NavFlattened: ESC on a flattened child should select something. - - nav: NavFlattened: broken: in typical usage scenario, the items of a fully clipped child are currently not considered to enter into a NavFlattened child. - - nav: NavFlattened: init request doesn't select items that are part of a NavFlattened child - - nav: NavFlattened: cannot access menu-bar of a flattened child window with Alt/menu key (not a very common use case..). - - nav/treenode: Left within a tree node block as a fallback (ImGuiTreeNodeFlags_NavLeftJumpsBackHere by default?) - - nav/menus: pressing left-right on a vertically clipped menu bar tends to jump to the collapse/close buttons. - - nav/menus: allow pressing Menu to leave a sub-menu. - - nav/menus: a way to access the main menu bar with Alt? (currently needs CTRL+TAB) or last focused window menu bar? - - nav/menus: when using the main menu bar, even though we restore focus after, the underlying window loses its title bar highlight during menu manipulation. could we prevent it? - - nav/menus: main menu bar currently cannot restore a NULL focus. Could save NavWindow at the time of being focused, similarly to what popup do? - - nav/menus: Alt,Up could open the first menu (e.g. "File") currently it tends to nav into the window/collapse menu. Do do that we would need custom transition? - - nav/windowing: configure fade-in/fade-out delay on Ctrl+Tab? - - nav/windowing: when CTRL-Tab/windowing is active, the HoveredWindow detection doesn't take account of the window display re-ordering. - - nav: simulate right-click or context activation? (SHIFT+F10) - - nav: tabs should go through most/all widgets (in submission order?). - - nav: esc/enter default behavior for popups, e.g. be able to mark an "ok" or "cancel" button that would get triggered by those keys. - - nav: when activating a button that changes label (without a static ID) or disappear, can we somehow automatically recover into a nearest highlight item? - - nav: there's currently no way to completely clear focus with the keyboard. depending on patterns used by the application to dispatch inputs, it may be desirable. - - focus: preserve ActiveId/focus stack state, e.g. when opening a menu and close it, previously selected InputText() focus gets restored (#622) - - focus: SetKeyboardFocusHere() on with >= 0 offset could be done on same frame (else latch and modulate on beginning of next frame) - - focus: unable to use SetKeyboardFocusHere() on clipped widgets. (#787) - - - inputs: we need an explicit flag about whether the imgui window is focused, to be able to distinguish focused key releases vs alt-tabbing all release behaviors. - - inputs: rework IO system to be able to pass actual ordered/timestamped events. use an event queue? (~#335, #71) - - inputs: support track pad style scrolling & slider edit. - - inputs/io: backspace and arrows in the context of a text input could use system repeat rate. - - inputs/io: clarify/standardize/expose repeat rate and repeat delays (#1808) - - inputs/scrolling: support for smooth scrolling (#2462, #2569) - - - misc: idle: expose "woken up" boolean (set by inputs) and/or animation time (for cursor blink) for back-end to be able stop refreshing easily. - - misc: idle: if cursor blink if the _only_ visible animation, core imgui could rewrite vertex alpha to avoid CPU pass on ImGui:: calls. - - misc: idle: if cursor blink if the _only_ visible animation, could even expose a dirty rectangle that optionally can be leverage by some app to render in a smaller viewport, getting rid of much pixel shading cost. - - misc: no way to run a root-most GetID() with ImGui:: api since there's always a Debug window in the stack. (mentioned in #2960) - - misc: make the ImGuiCond values linear (non-power-of-two). internal storage for ImGuiWindow can use integers to combine into flags (Why?) - - misc: provide a way to compile out the entire implementation while providing a dummy API (e.g. #define IMGUI_DUMMY_IMPL) - - misc: PushItemFlag(): add a flag to disable keyboard capture when used with mouse? (#1682) - - misc: use more size_t in public api? - - misc: possible compile-time support for string view/range instead of char* would e.g. facilitate usage with Rust (#683) - - misc: possible compile-time support for wchar_t instead of char*? - - - remote: make a system like RemoteImGui first-class citizen/project (#75) - - - demo: find a way to demonstrate textures in the examples application, as it such a common issue for new users. - - demo: demonstrate using PushStyleVar() in more details. - - demo: add vertical separator demo - - demo: add virtual scrolling example? - - demo: demonstrate Plot offset - - demo: window size constraint: square demo is broken when resizing from edges (#1975), would need to rework the callback system to solve this - - - examples: window minimize, maximize (#583) - - examples: provide a zero frame-rate/idle example. - - examples: dx11/dx12: try to use new swapchain blit models (#2970) - - backends: apple: example_apple should be using modern GL3. - - backends: glfw: could go idle when minimized? if (glfwGetWindowAttrib(window, GLFW_ICONIFIED)) { glfwWaitEvents(); continue; } // issue: DeltaTime will be super high on resume, perhaps provide a way to let impl know (#440) - - backends: opengl: rename imgui_impl_opengl2 to impl_opengl_legacy and imgui_impl_opengl3 to imgui_impl_opengl? (#1900) - - backends: opengl: could use a single vertex buffer and glBufferSubData for uploads? - - backends: opengl: explicitly disable GL_STENCIL_TEST in bindings. - - backends: opengl: consider gl_lite loader https://github.com/ApoorvaJ/Papaya/blob/3808e39b0f45d4ca4972621c847586e4060c042a/src/libs/gl_lite.h - - backends: vulkan: viewport: support for synchronized swapping of multiple swap chains. - - backends: bgfx: https://gist.github.com/RichardGale/6e2b74bc42b3005e08397236e4be0fd0 - - backends: mscriptem: with refactored examples, we could provide a direct imgui_impl_emscripten platform layer (see eg. https://github.com/floooh/sokol-samples/blob/master/html5/imgui-emsc.cc#L42) - - - optimization: replace vsnprintf with stb_printf? or enable the defines/infrastructure to allow it (#1038) - - optimization: add clipping for multi-component widgets (SliderFloatX, ColorEditX, etc.). one problem is that nav branch can't easily clip parent group when there is a move request. - - optimization: add a flag to disable most of rendering, for the case where the user expect to skip it (#335) - - optimization: fully covered window (covered by another with non-translucent bg + WindowRounding worth of padding) may want to clip rendering. - - optimization: use another hash function than crc32, e.g. FNV1a - - optimization/render: merge command-lists with same clip-rect into one even if they aren't sequential? (as long as in-between clip rectangle don't overlap)? - - optimization: turn some the various stack vectors into statically-sized arrays diff --git a/cmake/imgui/examples/.gitignore b/cmake/imgui/examples/.gitignore deleted file mode 100644 index 2b5671a8..00000000 --- a/cmake/imgui/examples/.gitignore +++ /dev/null @@ -1,46 +0,0 @@ -build/* -*/Debug/* -*/Release/* -*/x64/* -*.o -*.obj -*.exe - -## Visual Studio cruft -.vs/* -*/ipch/* -*.opensdf -*.log -*.pdb -*.ilk -*.user -*.sdf -*.suo -*.VC.db -*.VC.VC.opendb - -## Xcode cruft -.DS_Store -project.xcworkspace -xcuserdata - -## Emscripten output -*.o.tmp -*.out.js -*.out.wasm -example_emscripten/example_emscripten.* - -## Unix executables -example_glfw_opengl2/example_glfw_opengl2 -example_glfw_opengl3/example_glfw_opengl3 -example_glut_opengl2/example_glut_opengl2 -example_null/example_null -example_sdl_opengl2/example_sdl_opengl2 -example_sdl_opengl3/example_sdl_opengl3 - -## Dear ImGui Ini files -imgui.ini - -## JetBrains IDEs -.idea -cmake-build-* diff --git a/cmake/imgui/examples/README.txt b/cmake/imgui/examples/README.txt deleted file mode 100644 index 355d616c..00000000 --- a/cmake/imgui/examples/README.txt +++ /dev/null @@ -1,287 +0,0 @@ ------------------------------------------------------------------------ - dear imgui, v1.76 WIP ------------------------------------------------------------------------ - examples/README.txt - (This is the README file for the examples/ folder. See docs/ for more documentation) ------------------------------------------------------------------------ - -Dear ImGui is highly portable and only requires a few things to run and render: - - - Providing mouse/keyboard inputs - - Uploading the font atlas texture into graphics memory - - Providing a render function to render indexed textured triangles - - Optional: clipboard support, mouse cursor supports, Windows IME support, etc. - -This is essentially what the example bindings in this folder are providing + obligatory portability cruft. - -It is important to understand the difference between the core Dear ImGui library (files in the root folder) -and examples bindings which we are describing here (examples/ folder). -You should be able to write bindings for pretty much any platform and any 3D graphics API. With some extra -effort you can even perform the rendering remotely, on a different machine than the one running the logic. - -This folder contains two things: - - - Example bindings for popular platforms/graphics API, which you can use as is or adapt for your own use. - They are the imgui_impl_XXXX files found in the examples/ folder. - - - Example applications (standalone, ready-to-build) using the aforementioned bindings. - They are the in the XXXX_example/ sub-folders. - -You can find binaries of some of those example applications at: - http://www.dearimgui.org/binaries - - ---------------------------------------- - MISC COMMENTS AND SUGGESTIONS ---------------------------------------- - - - Read FAQ at http://dearimgui.org/faq - - - Please read 'PROGRAMMER GUIDE' in imgui.cpp for notes on how to setup Dear ImGui in your codebase. - Please read the comments and instruction at the top of each file. - - - If you are using of the backend provided here, so you can copy the imgui_impl_xxx.cpp/h files - to your project and use them unmodified. Each imgui_impl_xxxx.cpp comes with its own individual - ChangeLog at the top of the .cpp files, so if you want to update them later it will be easier to - catch up with what changed. - - - Dear ImGui has 0 to 1 frame of lag for most behaviors, at 60 FPS your experience should be pleasant. - However, consider that OS mouse cursors are typically drawn through a specific hardware accelerated path - and will feel smoother than common GPU rendered contents (including Dear ImGui windows). - You may experiment with the io.MouseDrawCursor flag to request Dear ImGui to draw a mouse cursor itself, - to visualize the lag between a hardware cursor and a software cursor. However, rendering a mouse cursor - at 60 FPS will feel slow. It might be beneficial to the user experience to switch to a software rendered - cursor only when an interactive drag is in progress. - Note that some setup or GPU drivers are likely to be causing extra lag depending on their settings. - If you feel that dragging windows feels laggy and you are not sure who to blame: try to build an - application drawing a shape directly under the mouse cursor. - - ---------------------------------------- - EXAMPLE BINDINGS ---------------------------------------- - -Most the example bindings are split in 2 parts: - - - The "Platform" bindings, in charge of: mouse/keyboard/gamepad inputs, cursor shape, timing, windowing. - Examples: Windows (imgui_impl_win32.cpp), GLFW (imgui_impl_glfw.cpp), SDL2 (imgui_impl_sdl.cpp), etc. - - - The "Renderer" bindings, in charge of: creating the main font texture, rendering imgui draw data. - Examples: DirectX11 (imgui_impl_dx11.cpp), GL3 (imgui_impl_opengl3.cpp), Vulkan (imgui_impl_vulkan.cpp), etc. - - - The example _applications_ usually combine 1 platform + 1 renderer binding to create a working program. - Examples: the example_win32_directx11/ application combines imgui_impl_win32.cpp + imgui_impl_dx11.cpp. - - - Some bindings for higher level frameworks carry both "Platform" and "Renderer" parts in one file. - This is the case for Allegro 5 (imgui_impl_allegro5.cpp), Marmalade (imgui_impl_marmalade5.cpp). - - - If you use your own engine, you may decide to use some of existing bindings and/or rewrite some using - your own API. As a recommendation, if you are new to Dear ImGui, try using the existing binding as-is - first, before moving on to rewrite some of the code. Although it is tempting to rewrite both of the - imgui_impl_xxxx files to fit under your coding style, consider that it is not necessary! - In fact, if you are new to Dear ImGui, rewriting them will almost always be harder. - - Example: your engine is built over Windows + DirectX11 but you have your own high-level rendering - system layered over DirectX11. - Suggestion: step 1: try using imgui_impl_win32.cpp + imgui_impl_dx11.cpp first. - Once this work, _if_ you want you can replace the imgui_impl_dx11.cpp code with a custom renderer - using your own functions, etc. - Please consider using the bindings to the lower-level platform/graphics API as-is. - - Example: your engine is multi-platform (consoles, phones, etc.), you have high-level systems everywhere. - Suggestion: step 1: try using a non-portable binding first (e.g. win32 + underlying graphics API)! - This is counter-intuitive, but this will get you running faster! Once you better understand how imgui - works and is bound, you can rewrite the code using your own systems. - - - Road-map: Dear ImGui 1.80 (WIP currently in the "docking" branch) will allows imgui windows to be - seamlessly detached from the main application window. This is achieved using an extra layer to the - platform and renderer bindings, which allows Dear ImGui to communicate platform-specific requests. - If you decide to use unmodified imgui_impl_xxxx.cpp files, you will automatically benefit from - improvements and fixes related to viewports and platform windows without extra work on your side. - - -List of Platforms Bindings in this repository: - - imgui_impl_glfw.cpp ; GLFW (Windows, macOS, Linux, etc.) http://www.glfw.org/ - imgui_impl_osx.mm ; macOS native API (not as feature complete as glfw/sdl back-ends) - imgui_impl_sdl.cpp ; SDL2 (Windows, macOS, Linux, iOS, Android) https://www.libsdl.org - imgui_impl_win32.cpp ; Win32 native API (Windows) - imgui_impl_glut.cpp ; GLUT/FreeGLUT (absolutely not recommended in 2020!) - -List of Renderer Bindings in this repository: - - imgui_impl_dx9.cpp ; DirectX9 - imgui_impl_dx10.cpp ; DirectX10 - imgui_impl_dx11.cpp ; DirectX11 - imgui_impl_dx12.cpp ; DirectX12 - imgui_impl_metal.mm ; Metal (with ObjC) - imgui_impl_opengl2.cpp ; OpenGL 2 (legacy, fixed pipeline <- don't use with modern OpenGL context) - imgui_impl_opengl3.cpp ; OpenGL 3/4, OpenGL ES 2, OpenGL ES 3 (modern programmable pipeline) - imgui_impl_vulkan.cpp ; Vulkan - -List of high-level Frameworks Bindings in this repository: (combine Platform + Renderer) - - imgui_impl_allegro5.cpp - imgui_impl_marmalade.cpp - -Note that Dear ImGui works with Emscripten. The examples_emscripten/ app uses imgui_impl_sdl.cpp and -imgui_impl_opengl3.cpp, but other combinations are possible. - -Third-party framework, graphics API and languages bindings are listed at: - - https://github.com/ocornut/imgui/wiki/Bindings - -Including backends for: - - AGS/Adventure Game Studio, Amethyst, bsf, Cinder, Cocos2d-x, Diligent Engine, Flexium, - GML/Game Maker Studio2, GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, NanoRT, Nim Game Lib, - Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, px_render, Qt/QtDirect3D, SFML, Sokol, - Unreal Engine 4, vtk, Win32 GDI, etc. - -Not sure which to use? -Recommended platform/frameworks: - - GLFW https://github.com/glfw/glfw Use imgui_impl_glfw.cpp - SDL2 https://www.libsdl.org Use imgui_impl_sdl.cpp - Sokol https://github.com/floooh/sokol Use util/sokol_imgui.h in Sokol repository. - -Those will allow you to create portable applications and will solve and abstract away many issues. - - ---------------------------------------- - EXAMPLE APPLICATIONS ---------------------------------------- - -Building: - Unfortunately in 2020 it is still tedious to create and maintain portable build files using external - libraries (the kind we're using here to create a window and render 3D triangles) without relying on - third party software. For most examples here I choose to provide: - - Makefiles for Linux/OSX - - Batch files for Visual Studio 2008+ - - A .sln project file for Visual Studio 2010+ - - Xcode project files for the Apple examples - Please let me know if they don't work with your setup! - You can probably just import the imgui_impl_xxx.cpp/.h files into your own codebase or compile those - directly with a command-line compiler. - - If you are interested in using Cmake to build and links examples, see: - https://github.com/ocornut/imgui/pull/1713 and https://github.com/ocornut/imgui/pull/3027 - - -example_allegro5/ - Allegro 5 example. - = main.cpp + imgui_impl_allegro5.cpp - -example_apple_metal/ - OSX & iOS + Metal. - = main.m + imgui_impl_osx.mm + imgui_impl_metal.mm - It is based on the "cross-platform" game template provided with Xcode as of Xcode 9. - (NB: imgui_impl_osx.mm is currently not as feature complete as other platforms back-ends. - You may prefer to use the GLFW Or SDL back-ends, which will also support Windows and Linux.) - -example_apple_opengl2/ - OSX + OpenGL2. - = main.mm + imgui_impl_osx.mm + imgui_impl_opengl2.cpp - (NB: imgui_impl_osx.mm is currently not as feature complete as other platforms back-ends. - You may prefer to use the GLFW Or SDL back-ends, which will also support Windows and Linux.) - -example_empscripten: - Emcripten + SDL2 + OpenGL3+/ES2/ES3 example. - = main.cpp + imgui_impl_sdl.cpp + imgui_impl_opengl3.cpp - Note that other examples based on SDL or GLFW + OpenGL could easily be modified to work with Emscripten. - We provide this to make the Emscripten differences obvious, and have them not pollute all other examples. - -example_glfw_metal/ - GLFW (Mac) + Metal example. - = main.mm + imgui_impl_glfw.cpp + imgui_impl_metal.mm - -example_glfw_opengl2/ - GLFW + OpenGL2 example (legacy, fixed pipeline). - = main.cpp + imgui_impl_glfw.cpp + imgui_impl_opengl2.cpp - **DO NOT USE OPENGL2 CODE IF YOUR CODE/ENGINE IS USING MODERN OPENGL (SHADERS, VBO, VAO, etc.)** - **Prefer using OPENGL3 code (with gl3w/glew/glad/glbinding, you can replace the OpenGL function loader)** - This code is mostly provided as a reference to learn about Dear ImGui integration, because it is shorter. - If your code is using GL3+ context or any semi modern OpenGL calls, using this renderer is likely to - make things more complicated, will require your code to reset many OpenGL attributes to their initial - state, and might confuse your GPU driver. One star, not recommended. - -example_glfw_opengl3/ - GLFW (Win32, Mac, Linux) + OpenGL3+/ES2/ES3 example (programmable pipeline). - = main.cpp + imgui_impl_glfw.cpp + imgui_impl_opengl3.cpp - This uses more modern OpenGL calls and custom shaders. - Prefer using that if you are using modern OpenGL in your application (anything with shaders). - (Please be mindful that accessing OpenGL3+ functions requires a function loader, which are a frequent - source for confusion for new users. We use a loader in imgui_impl_opengl3.cpp which may be different - from the one your app normally use. Read imgui_impl_opengl3.h for details and how to change it.) - -example_glfw_vulkan/ - GLFW (Win32, Mac, Linux) + Vulkan example. - = main.cpp + imgui_impl_glfw.cpp + imgui_impl_vulkan.cpp - This is quite long and tedious, because: Vulkan. - For this example, the main.cpp file exceptionally use helpers function from imgui_impl_vulkan.h/cpp. - -example_glut_opengl2/ - GLUT (e.g., FreeGLUT on Linux/Windows, GLUT framework on OSX) + OpenGL2. - = main.cpp + imgui_impl_glut.cpp + imgui_impl_opengl2.cpp - Note that GLUT/FreeGLUT is largely obsolete software, prefer using GLFW or SDL. - -example_marmalade/ - Marmalade example using IwGx. - = main.cpp + imgui_impl_marmalade.cpp - -example_null - Null example, compile and link imgui, create context, run headless with no inputs and no graphics output. - = main.cpp - This is used to quickly test compilation of core imgui files in as many setups as possible. - Because this application doesn't create a window nor a graphic context, there's no graphics output. - -example_sdl_directx11/ - SDL2 + DirectX11 example, Windows only. - = main.cpp + imgui_impl_sdl.cpp + imgui_impl_dx11.cpp - This to demonstrate usage of DirectX with SDL. - -example_sdl_metal/ - SDL2 (Mac) + Metal example. - = main.mm + imgui_impl_sdl.cpp + imgui_impl_metal.mm - -example_sdl_opengl2/ - SDL2 (Win32, Mac, Linux etc.) + OpenGL example (legacy, fixed pipeline). - = main.cpp + imgui_impl_sdl.cpp + imgui_impl_opengl2.cpp - **DO NOT USE OPENGL2 CODE IF YOUR CODE/ENGINE IS USING MODERN OPENGL (SHADERS, VBO, VAO, etc.)** - **Prefer using OPENGL3 code (with gl3w/glew/glad/glbinding, you can replace the OpenGL function loader)** - This code is mostly provided as a reference to learn about Dear ImGui integration, because it is shorter. - If your code is using GL3+ context or any semi modern OpenGL calls, using this renderer is likely to - make things more complicated, will require your code to reset many OpenGL attributes to their initial - state, and might confuse your GPU driver. One star, not recommended. - -example_sdl_opengl3/ - SDL2 (Win32, Mac, Linux, etc.) + OpenGL3+/ES2/ES3 example. - = main.cpp + imgui_impl_sdl.cpp + imgui_impl_opengl3.cpp - This uses more modern OpenGL calls and custom shaders. - Prefer using that if you are using modern OpenGL in your application (anything with shaders). - (Please be mindful that accessing OpenGL3+ functions requires a function loader, which are a frequent - source for confusion for new users. We use a loader in imgui_impl_opengl3.cpp which may be different - from the one your app normally use. Read imgui_impl_opengl3.h for details and how to change it.) - -example_sdl_vulkan/ - SDL2 (Win32, Mac, Linux, etc.) + Vulkan example. - = main.cpp + imgui_impl_sdl.cpp + imgui_impl_vulkan.cpp - This is quite long and tedious, because: Vulkan. - For this example, the main.cpp file exceptionally use helpers function from imgui_impl_vulkan.h/cpp. - -example_win32_directx9/ - DirectX9 example, Windows only. - = main.cpp + imgui_impl_win32.cpp + imgui_impl_dx9.cpp - -example_win32_directx10/ - DirectX10 example, Windows only. - = main.cpp + imgui_impl_win32.cpp + imgui_impl_dx10.cpp - -example_win32_directx11/ - DirectX11 example, Windows only. - = main.cpp + imgui_impl_win32.cpp + imgui_impl_dx11.cpp - -example_win32_directx12/ - DirectX12 example, Windows only. - = main.cpp + imgui_impl_win32.cpp + imgui_impl_dx12.cpp - This is quite long and tedious, because: DirectX12. diff --git a/cmake/imgui/examples/example_allegro5/README.md b/cmake/imgui/examples/example_allegro5/README.md deleted file mode 100644 index 10d9d6e9..00000000 --- a/cmake/imgui/examples/example_allegro5/README.md +++ /dev/null @@ -1,35 +0,0 @@ - -# Configuration - -Dear ImGui outputs 16-bit vertex indices by default. -Allegro doesn't support them natively, so we have two solutions: convert the indices manually in imgui_impl_allegro5.cpp, or compile dear imgui with 32-bit indices. -You can either modify imconfig.h that comes with Dear ImGui (easier), or set a C++ preprocessor option IMGUI_USER_CONFIG to find to a filename. -We are providing `imconfig_allegro5.h` that enables 32-bit indices. -Note that the back-end supports _BOTH_ 16-bit and 32-bit indices, but 32-bit indices will be slightly faster as they won't require a manual conversion. - -# How to Build - -### On Ubuntu 14.04+ and macOS - -```bash -g++ -DIMGUI_USER_CONFIG=\"examples/example_allegro5/imconfig_allegro5.h\" -I .. -I ../.. main.cpp ../imgui_impl_allegro5.cpp ../../imgui*.cpp -lallegro -lallegro_main -lallegro_primitives -o allegro5_example -``` - -On macOS, install Allegro with homebrew: `brew install allegro`. - -### On Windows with Visual Studio's CLI - -You may install Allegro using vcpkg: -``` -git clone https://github.com/Microsoft/vcpkg -cd vcpkg -.\bootstrap-vcpkg.bat -.\vcpkg install allegro5 -.\vcpkg integrate install ; optional, automatically register include/libs in Visual Studio -``` - -Build: -``` -set ALLEGRODIR=path_to_your_allegro5_folder -cl /Zi /MD /I %ALLEGRODIR%\include /DIMGUI_USER_CONFIG=\"examples/example_allegro5/imconfig_allegro5.h\" /I .. /I ..\.. main.cpp ..\imgui_impl_allegro5.cpp ..\..\imgui*.cpp /link /LIBPATH:%ALLEGRODIR%\lib allegro-5.0.10-monolith-md.lib user32.lib -``` diff --git a/cmake/imgui/examples/example_allegro5/example_allegro5.vcxproj b/cmake/imgui/examples/example_allegro5/example_allegro5.vcxproj deleted file mode 100644 index c86dcb2b..00000000 --- a/cmake/imgui/examples/example_allegro5/example_allegro5.vcxproj +++ /dev/null @@ -1,179 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {2AE17FDE-F7F3-4CAC-ADAB-0710EDA4F741} - example_allegro5 - 8.1 - - - - Application - true - MultiByte - v110 - - - Application - true - MultiByte - v110 - - - Application - false - true - MultiByte - v110 - - - Application - false - true - MultiByte - v110 - - - - - - - - - - - - - - - - - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - - Level4 - Disabled - ..\..;..;%(AdditionalIncludeDirectories) - - - true - %(AdditionalLibraryDirectories) - opengl32.lib;%(AdditionalDependencies) - Console - msvcrt.lib - - - - - Level4 - Disabled - ..\..;..;%(AdditionalIncludeDirectories) - - - true - %(AdditionalLibraryDirectories) - opengl32.lib;%(AdditionalDependencies) - Console - msvcrt.lib - - - - - Level4 - MaxSpeed - true - true - ..\..;..;$(SolutionDir)\libs\gl3w;%(AdditionalIncludeDirectories) - false - - - true - true - true - %(AdditionalLibraryDirectories) - opengl32.lib;%(AdditionalDependencies) - Console - - - - - - - Level4 - MaxSpeed - true - true - ..\..;..;$(SolutionDir)\libs\gl3w;%(AdditionalIncludeDirectories) - false - - - true - true - true - %(AdditionalLibraryDirectories) - opengl32.lib;%(AdditionalDependencies) - Console - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cmake/imgui/examples/example_allegro5/example_allegro5.vcxproj.filters b/cmake/imgui/examples/example_allegro5/example_allegro5.vcxproj.filters deleted file mode 100644 index 8019ebfd..00000000 --- a/cmake/imgui/examples/example_allegro5/example_allegro5.vcxproj.filters +++ /dev/null @@ -1,55 +0,0 @@ - - - - - {20b90ce4-7fcb-4731-b9a0-075f875de82d} - - - {f18ab499-84e1-499f-8eff-9754361e0e52} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - - - imgui - - - imgui - - - imgui - - - sources - - - sources - - - sources - - - imgui - - - - - imgui - - - imgui - - - imgui - - - sources - - - - - - sources - - - \ No newline at end of file diff --git a/cmake/imgui/examples/example_allegro5/imconfig_allegro5.h b/cmake/imgui/examples/example_allegro5/imconfig_allegro5.h deleted file mode 100644 index 35afa67f..00000000 --- a/cmake/imgui/examples/example_allegro5/imconfig_allegro5.h +++ /dev/null @@ -1,11 +0,0 @@ -//----------------------------------------------------------------------------- -// COMPILE-TIME OPTIONS FOR DEAR IMGUI ALLEGRO 5 EXAMPLE -// See imconfig.h for the full template -// Because Allegro doesn't support 16-bit vertex indices, we enable the compile-time option of imgui to use 32-bit indices -//----------------------------------------------------------------------------- - -#pragma once - -// Use 32-bit vertex indices because Allegro doesn't support 16-bit ones -// This allows us to avoid converting vertices format at runtime -#define ImDrawIdx int diff --git a/cmake/imgui/examples/example_allegro5/main.cpp b/cmake/imgui/examples/example_allegro5/main.cpp deleted file mode 100644 index 5a026840..00000000 --- a/cmake/imgui/examples/example_allegro5/main.cpp +++ /dev/null @@ -1,135 +0,0 @@ -// dear imgui: standalone example application for Allegro 5 -// If you are new to dear imgui, see examples/README.txt and documentation at the top of imgui.cpp. - -#include -#include -#include -#include "imgui.h" -#include "imgui_impl_allegro5.h" - -int main(int, char**) -{ - // Setup Allegro - al_init(); - al_install_keyboard(); - al_install_mouse(); - al_init_primitives_addon(); - al_set_new_display_flags(ALLEGRO_RESIZABLE); - ALLEGRO_DISPLAY* display = al_create_display(1280, 720); - al_set_window_title(display, "Dear ImGui Allegro 5 example"); - ALLEGRO_EVENT_QUEUE* queue = al_create_event_queue(); - al_register_event_source(queue, al_get_display_event_source(display)); - al_register_event_source(queue, al_get_keyboard_event_source()); - al_register_event_source(queue, al_get_mouse_event_source()); - - // Setup Dear ImGui context - IMGUI_CHECKVERSION(); - ImGui::CreateContext(); - ImGuiIO& io = ImGui::GetIO(); (void)io; - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls - - // Setup Dear ImGui style - ImGui::StyleColorsDark(); - //ImGui::StyleColorsClassic(); - - // Setup Platform/Renderer bindings - ImGui_ImplAllegro5_Init(display); - - // Load Fonts - // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. - // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. - // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). - // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. - // - Read 'docs/FONTS.txt' for more instructions and details. - // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! - //io.Fonts->AddFontDefault(); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Roboto-Medium.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Cousine-Regular.ttf", 15.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/DroidSans.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/ProggyTiny.ttf", 10.0f); - //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); - //IM_ASSERT(font != NULL); - - bool show_demo_window = true; - bool show_another_window = false; - ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); - - // Main loop - bool running = true; - while (running) - { - // Poll and handle events (inputs, window resize, etc.) - // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. - // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. - // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. - // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. - ALLEGRO_EVENT ev; - while (al_get_next_event(queue, &ev)) - { - ImGui_ImplAllegro5_ProcessEvent(&ev); - if (ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) - running = false; - if (ev.type == ALLEGRO_EVENT_DISPLAY_RESIZE) - { - ImGui_ImplAllegro5_InvalidateDeviceObjects(); - al_acknowledge_resize(display); - ImGui_ImplAllegro5_CreateDeviceObjects(); - } - } - - // Start the Dear ImGui frame - ImGui_ImplAllegro5_NewFrame(); - ImGui::NewFrame(); - - // 1. Show the big demo window (Most of the sample code is in ImGui::ShowDemoWindow()! You can browse its code to learn more about Dear ImGui!). - if (show_demo_window) - ImGui::ShowDemoWindow(&show_demo_window); - - // 2. Show a simple window that we create ourselves. We use a Begin/End pair to created a named window. - { - static float f = 0.0f; - static int counter = 0; - - ImGui::Begin("Hello, world!"); // Create a window called "Hello, world!" and append into it. - - ImGui::Text("This is some useful text."); // Display some text (you can use a format strings too) - ImGui::Checkbox("Demo Window", &show_demo_window); // Edit bools storing our window open/close state - ImGui::Checkbox("Another Window", &show_another_window); - - ImGui::SliderFloat("float", &f, 0.0f, 1.0f); // Edit 1 float using a slider from 0.0f to 1.0f - ImGui::ColorEdit3("clear color", (float*)&clear_color); // Edit 3 floats representing a color - - if (ImGui::Button("Button")) // Buttons return true when clicked (most widgets return true when edited/activated) - counter++; - ImGui::SameLine(); - ImGui::Text("counter = %d", counter); - - ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); - ImGui::End(); - } - - // 3. Show another simple window. - if (show_another_window) - { - ImGui::Begin("Another Window", &show_another_window); // Pass a pointer to our bool variable (the window will have a closing button that will clear the bool when clicked) - ImGui::Text("Hello from another window!"); - if (ImGui::Button("Close Me")) - show_another_window = false; - ImGui::End(); - } - - // Rendering - ImGui::Render(); - al_clear_to_color(al_map_rgba_f(clear_color.x, clear_color.y, clear_color.z, clear_color.w)); - ImGui_ImplAllegro5_RenderDrawData(ImGui::GetDrawData()); - al_flip_display(); - } - - // Cleanup - ImGui_ImplAllegro5_Shutdown(); - ImGui::DestroyContext(); - al_destroy_event_queue(queue); - al_destroy_display(display); - - return 0; -} diff --git a/cmake/imgui/examples/example_apple_metal/README.md b/cmake/imgui/examples/example_apple_metal/README.md deleted file mode 100644 index 4f620327..00000000 --- a/cmake/imgui/examples/example_apple_metal/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# iOS / OSX Metal example - -## Introduction - -This example shows how to integrate Dear ImGui with Metal. It is based on the "cross-platform" game template provided with Xcode as of Xcode 9. - -(NB: you may still want to use GLFW or SDL which will also support Windows, Linux along with OSX.) - diff --git a/cmake/imgui/examples/example_apple_metal/Shared/AppDelegate.h b/cmake/imgui/examples/example_apple_metal/Shared/AppDelegate.h deleted file mode 100644 index 94878d94..00000000 --- a/cmake/imgui/examples/example_apple_metal/Shared/AppDelegate.h +++ /dev/null @@ -1,18 +0,0 @@ -#import - -#if TARGET_OS_IPHONE - -#import - -@interface AppDelegate : UIResponder -@property (strong, nonatomic) UIWindow *window; -@end - -#else - -#import - -@interface AppDelegate : NSObject -@end - -#endif diff --git a/cmake/imgui/examples/example_apple_metal/Shared/AppDelegate.m b/cmake/imgui/examples/example_apple_metal/Shared/AppDelegate.m deleted file mode 100644 index 6947eb23..00000000 --- a/cmake/imgui/examples/example_apple_metal/Shared/AppDelegate.m +++ /dev/null @@ -1,11 +0,0 @@ -#import "AppDelegate.h" - -@implementation AppDelegate - -#if TARGET_OS_OSX -- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender { - return YES; -} -#endif - -@end diff --git a/cmake/imgui/examples/example_apple_metal/Shared/Renderer.h b/cmake/imgui/examples/example_apple_metal/Shared/Renderer.h deleted file mode 100644 index 81fc6f54..00000000 --- a/cmake/imgui/examples/example_apple_metal/Shared/Renderer.h +++ /dev/null @@ -1,8 +0,0 @@ -#import - -@interface Renderer : NSObject - --(nonnull instancetype)initWithView:(nonnull MTKView *)view; - -@end - diff --git a/cmake/imgui/examples/example_apple_metal/Shared/Renderer.mm b/cmake/imgui/examples/example_apple_metal/Shared/Renderer.mm deleted file mode 100644 index efc3332b..00000000 --- a/cmake/imgui/examples/example_apple_metal/Shared/Renderer.mm +++ /dev/null @@ -1,129 +0,0 @@ -#import "Renderer.h" -#import - -#include "imgui.h" -#include "imgui_impl_metal.h" - -#if TARGET_OS_OSX -#include "imgui_impl_osx.h" -#endif - -@interface Renderer () -@property (nonatomic, strong) id device; -@property (nonatomic, strong) id commandQueue; -@end - -@implementation Renderer - --(nonnull instancetype)initWithView:(nonnull MTKView *)view; -{ - self = [super init]; - if(self) - { - _device = view.device; - _commandQueue = [_device newCommandQueue]; - - IMGUI_CHECKVERSION(); - ImGui::CreateContext(); - ImGui::StyleColorsDark(); - - ImGui_ImplMetal_Init(_device); - } - - return self; -} - -- (void)drawInMTKView:(MTKView *)view -{ - ImGuiIO &io = ImGui::GetIO(); - io.DisplaySize.x = view.bounds.size.width; - io.DisplaySize.y = view.bounds.size.height; - -#if TARGET_OS_OSX - CGFloat framebufferScale = view.window.screen.backingScaleFactor ?: NSScreen.mainScreen.backingScaleFactor; -#else - CGFloat framebufferScale = view.window.screen.scale ?: UIScreen.mainScreen.scale; -#endif - io.DisplayFramebufferScale = ImVec2(framebufferScale, framebufferScale); - - io.DeltaTime = 1 / float(view.preferredFramesPerSecond ?: 60); - - id commandBuffer = [self.commandQueue commandBuffer]; - - static bool show_demo_window = true; - static bool show_another_window = false; - static float clear_color[4] = { 0.28f, 0.36f, 0.5f, 1.0f }; - - MTLRenderPassDescriptor *renderPassDescriptor = view.currentRenderPassDescriptor; - if (renderPassDescriptor != nil) - { - renderPassDescriptor.colorAttachments[0].clearColor = MTLClearColorMake(clear_color[0], clear_color[1], clear_color[2], clear_color[3]); - - // Here, you could do additional rendering work, including other passes as necessary. - - id renderEncoder = [commandBuffer renderCommandEncoderWithDescriptor:renderPassDescriptor]; - [renderEncoder pushDebugGroup:@"ImGui demo"]; - - // Start the Dear ImGui frame - ImGui_ImplMetal_NewFrame(renderPassDescriptor); -#if TARGET_OS_OSX - ImGui_ImplOSX_NewFrame(view); -#endif - ImGui::NewFrame(); - - // 1. Show the big demo window (Most of the sample code is in ImGui::ShowDemoWindow()! You can browse its code to learn more about Dear ImGui!). - if (show_demo_window) - ImGui::ShowDemoWindow(&show_demo_window); - - // 2. Show a simple window that we create ourselves. We use a Begin/End pair to created a named window. - { - static float f = 0.0f; - static int counter = 0; - - ImGui::Begin("Hello, world!"); // Create a window called "Hello, world!" and append into it. - - ImGui::Text("This is some useful text."); // Display some text (you can use a format strings too) - ImGui::Checkbox("Demo Window", &show_demo_window); // Edit bools storing our window open/close state - ImGui::Checkbox("Another Window", &show_another_window); - - ImGui::SliderFloat("float", &f, 0.0f, 1.0f); // Edit 1 float using a slider from 0.0f to 1.0f - ImGui::ColorEdit3("clear color", (float*)&clear_color); // Edit 3 floats representing a color - - if (ImGui::Button("Button")) // Buttons return true when clicked (most widgets return true when edited/activated) - counter++; - ImGui::SameLine(); - ImGui::Text("counter = %d", counter); - - ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); - ImGui::End(); - } - - // 3. Show another simple window. - if (show_another_window) - { - ImGui::Begin("Another Window", &show_another_window); // Pass a pointer to our bool variable (the window will have a closing button that will clear the bool when clicked) - ImGui::Text("Hello from another window!"); - if (ImGui::Button("Close Me")) - show_another_window = false; - ImGui::End(); - } - - // Rendering - ImGui::Render(); - ImDrawData *drawData = ImGui::GetDrawData(); - ImGui_ImplMetal_RenderDrawData(drawData, commandBuffer, renderEncoder); - - [renderEncoder popDebugGroup]; - [renderEncoder endEncoding]; - - [commandBuffer presentDrawable:view.currentDrawable]; - } - - [commandBuffer commit]; -} - -- (void)mtkView:(MTKView *)view drawableSizeWillChange:(CGSize)size -{ -} - -@end diff --git a/cmake/imgui/examples/example_apple_metal/Shared/ViewController.h b/cmake/imgui/examples/example_apple_metal/Shared/ViewController.h deleted file mode 100644 index 137f93e1..00000000 --- a/cmake/imgui/examples/example_apple_metal/Shared/ViewController.h +++ /dev/null @@ -1,19 +0,0 @@ -#import -#import -#import "Renderer.h" - -#if TARGET_OS_IPHONE - -#import - -@interface ViewController : UIViewController -@end - -#else - -#import - -@interface ViewController : NSViewController -@end - -#endif diff --git a/cmake/imgui/examples/example_apple_metal/Shared/ViewController.mm b/cmake/imgui/examples/example_apple_metal/Shared/ViewController.mm deleted file mode 100644 index 73040add..00000000 --- a/cmake/imgui/examples/example_apple_metal/Shared/ViewController.mm +++ /dev/null @@ -1,129 +0,0 @@ -#import "ViewController.h" -#import "Renderer.h" -#include "imgui.h" - -#if TARGET_OS_OSX -#include "imgui_impl_osx.h" -#endif - -@interface ViewController () -@property (nonatomic, readonly) MTKView *mtkView; -@property (nonatomic, strong) Renderer *renderer; -@end - -@implementation ViewController - -- (MTKView *)mtkView { - return (MTKView *)self.view; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.mtkView.device = MTLCreateSystemDefaultDevice(); - - if (!self.mtkView.device) { - NSLog(@"Metal is not supported"); - abort(); - } - - self.renderer = [[Renderer alloc] initWithView:self.mtkView]; - - [self.renderer mtkView:self.mtkView drawableSizeWillChange:self.mtkView.bounds.size]; - - self.mtkView.delegate = self.renderer; - -#if TARGET_OS_OSX - // Add a tracking area in order to receive mouse events whenever the mouse is within the bounds of our view - NSTrackingArea *trackingArea = [[NSTrackingArea alloc] initWithRect:NSZeroRect - options:NSTrackingMouseMoved | NSTrackingInVisibleRect | NSTrackingActiveAlways - owner:self - userInfo:nil]; - [self.view addTrackingArea:trackingArea]; - - // If we want to receive key events, we either need to be in the responder chain of the key view, - // or else we can install a local monitor. The consequence of this heavy-handed approach is that - // we receive events for all controls, not just Dear ImGui widgets. If we had native controls in our - // window, we'd want to be much more careful than just ingesting the complete event stream, though we - // do make an effort to be good citizens by passing along events when Dear ImGui doesn't want to capture. - NSEventMask eventMask = NSEventMaskKeyDown | NSEventMaskKeyUp | NSEventMaskFlagsChanged | NSEventTypeScrollWheel; - [NSEvent addLocalMonitorForEventsMatchingMask:eventMask handler:^NSEvent * _Nullable(NSEvent *event) { - BOOL wantsCapture = ImGui_ImplOSX_HandleEvent(event, self.view); - if (event.type == NSEventTypeKeyDown && wantsCapture) { - return nil; - } else { - return event; - } - - }]; - - ImGui_ImplOSX_Init(); -#endif -} - -#if TARGET_OS_OSX - -- (void)mouseMoved:(NSEvent *)event { - ImGui_ImplOSX_HandleEvent(event, self.view); -} - -- (void)mouseDown:(NSEvent *)event { - ImGui_ImplOSX_HandleEvent(event, self.view); -} - -- (void)mouseUp:(NSEvent *)event { - ImGui_ImplOSX_HandleEvent(event, self.view); -} - -- (void)mouseDragged:(NSEvent *)event { - ImGui_ImplOSX_HandleEvent(event, self.view); -} - -- (void)scrollWheel:(NSEvent *)event { - ImGui_ImplOSX_HandleEvent(event, self.view); -} - -#elif TARGET_OS_IOS - -// This touch mapping is super cheesy/hacky. We treat any touch on the screen -// as if it were a depressed left mouse button, and we don't bother handling -// multitouch correctly at all. This causes the "cursor" to behave very erratically -// when there are multiple active touches. But for demo purposes, single-touch -// interaction actually works surprisingly well. -- (void)updateIOWithTouchEvent:(UIEvent *)event { - UITouch *anyTouch = event.allTouches.anyObject; - CGPoint touchLocation = [anyTouch locationInView:self.view]; - ImGuiIO &io = ImGui::GetIO(); - io.MousePos = ImVec2(touchLocation.x, touchLocation.y); - - BOOL hasActiveTouch = NO; - for (UITouch *touch in event.allTouches) { - if (touch.phase != UITouchPhaseEnded && touch.phase != UITouchPhaseCancelled) { - hasActiveTouch = YES; - break; - } - } - io.MouseDown[0] = hasActiveTouch; -} - -- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { - [self updateIOWithTouchEvent:event]; -} - -- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { - [self updateIOWithTouchEvent:event]; -} - -- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { - [self updateIOWithTouchEvent:event]; -} - -- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { - [self updateIOWithTouchEvent:event]; -} - -#endif - -@end - diff --git a/cmake/imgui/examples/example_apple_metal/Shared/main.m b/cmake/imgui/examples/example_apple_metal/Shared/main.m deleted file mode 100644 index 15938a90..00000000 --- a/cmake/imgui/examples/example_apple_metal/Shared/main.m +++ /dev/null @@ -1,22 +0,0 @@ -#import - -#if TARGET_OS_IPHONE - -#import -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} - -#else - -#import - -int main(int argc, const char * argv[]) { - return NSApplicationMain(argc, argv); -} - -#endif diff --git a/cmake/imgui/examples/example_apple_metal/example_apple_metal.xcodeproj/project.pbxproj b/cmake/imgui/examples/example_apple_metal/example_apple_metal.xcodeproj/project.pbxproj deleted file mode 100644 index f1c10494..00000000 --- a/cmake/imgui/examples/example_apple_metal/example_apple_metal.xcodeproj/project.pbxproj +++ /dev/null @@ -1,539 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 48; - objects = { - -/* Begin PBXBuildFile section */ - 07A82ED82139413D0078D120 /* imgui_widgets.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07A82ED72139413C0078D120 /* imgui_widgets.cpp */; }; - 07A82ED92139418F0078D120 /* imgui_widgets.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07A82ED72139413C0078D120 /* imgui_widgets.cpp */; }; - 8307E7CC20E9F9C900473790 /* ViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8307E7CB20E9F9C900473790 /* ViewController.mm */; }; - 8307E7CF20E9F9C900473790 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8307E7CD20E9F9C900473790 /* Main.storyboard */; }; - 8307E7DE20E9F9C900473790 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 8307E7DD20E9F9C900473790 /* AppDelegate.m */; }; - 8307E7E420E9F9C900473790 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8307E7E220E9F9C900473790 /* Main.storyboard */; }; - 8307E7E720E9F9C900473790 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 8307E7E620E9F9C900473790 /* main.m */; }; - 8307E7E820E9F9C900473790 /* Renderer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8307E7BC20E9F9C700473790 /* Renderer.mm */; }; - 8307E7E920E9F9C900473790 /* Renderer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8307E7BC20E9F9C700473790 /* Renderer.mm */; }; - 836D2A2E20EE208E0098E909 /* imgui_impl_osx.mm in Sources */ = {isa = PBXBuildFile; fileRef = 836D2A2D20EE208E0098E909 /* imgui_impl_osx.mm */; }; - 836D2A3020EE4A180098E909 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 836D2A2F20EE4A180098E909 /* Default-568h@2x.png */; }; - 836D2A3220EE4A900098E909 /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 836D2A3120EE4A900098E909 /* Launch Screen.storyboard */; }; - 83BBE9DE20EB3FFC00295997 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 8307E7E620E9F9C900473790 /* main.m */; }; - 83BBE9DF20EB40AE00295997 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 8307E7DD20E9F9C900473790 /* AppDelegate.m */; }; - 83BBE9E020EB42D000295997 /* ViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8307E7CB20E9F9C900473790 /* ViewController.mm */; }; - 83BBE9E520EB46B900295997 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83BBE9E420EB46B900295997 /* Metal.framework */; }; - 83BBE9E720EB46BD00295997 /* MetalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83BBE9E620EB46BD00295997 /* MetalKit.framework */; }; - 83BBE9E920EB46C100295997 /* ModelIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83BBE9E820EB46C100295997 /* ModelIO.framework */; }; - 83BBE9EC20EB471700295997 /* MetalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83BBE9EA20EB471700295997 /* MetalKit.framework */; }; - 83BBE9ED20EB471700295997 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83BBE9EB20EB471700295997 /* Metal.framework */; }; - 83BBE9EF20EB471C00295997 /* ModelIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83BBE9EE20EB471C00295997 /* ModelIO.framework */; }; - 83BBE9FE20EB54D800295997 /* imgui_impl_metal.mm in Sources */ = {isa = PBXBuildFile; fileRef = 83BBE9FD20EB54D800295997 /* imgui_impl_metal.mm */; }; - 83BBE9FF20EB54D800295997 /* imgui_impl_metal.mm in Sources */ = {isa = PBXBuildFile; fileRef = 83BBE9FD20EB54D800295997 /* imgui_impl_metal.mm */; }; - 83BBEA0520EB54E700295997 /* imgui_draw.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83BBEA0120EB54E700295997 /* imgui_draw.cpp */; }; - 83BBEA0620EB54E700295997 /* imgui_draw.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83BBEA0120EB54E700295997 /* imgui_draw.cpp */; }; - 83BBEA0720EB54E700295997 /* imgui_demo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83BBEA0220EB54E700295997 /* imgui_demo.cpp */; }; - 83BBEA0820EB54E700295997 /* imgui_demo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83BBEA0220EB54E700295997 /* imgui_demo.cpp */; }; - 83BBEA0920EB54E700295997 /* imgui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83BBEA0320EB54E700295997 /* imgui.cpp */; }; - 83BBEA0A20EB54E700295997 /* imgui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83BBEA0320EB54E700295997 /* imgui.cpp */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 07A82ED62139413C0078D120 /* imgui_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = imgui_internal.h; path = ../../imgui_internal.h; sourceTree = ""; }; - 07A82ED72139413C0078D120 /* imgui_widgets.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui_widgets.cpp; path = ../../imgui_widgets.cpp; sourceTree = ""; }; - 8307E7BB20E9F9C700473790 /* Renderer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Renderer.h; sourceTree = ""; }; - 8307E7BC20E9F9C700473790 /* Renderer.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = Renderer.mm; sourceTree = ""; }; - 8307E7C420E9F9C900473790 /* example_apple_metal.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = example_apple_metal.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 8307E7CA20E9F9C900473790 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; - 8307E7CB20E9F9C900473790 /* ViewController.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = ViewController.mm; sourceTree = ""; }; - 8307E7CE20E9F9C900473790 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 8307E7D320E9F9C900473790 /* Info-iOS.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-iOS.plist"; sourceTree = ""; }; - 8307E7DA20E9F9C900473790 /* example_apple_metal.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = example_apple_metal.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 8307E7DC20E9F9C900473790 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - 8307E7DD20E9F9C900473790 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - 8307E7E320E9F9C900473790 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 8307E7E520E9F9C900473790 /* Info-macOS.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-macOS.plist"; sourceTree = ""; }; - 8307E7E620E9F9C900473790 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 836D2A2C20EE208D0098E909 /* imgui_impl_osx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = imgui_impl_osx.h; path = ../../imgui_impl_osx.h; sourceTree = ""; }; - 836D2A2D20EE208E0098E909 /* imgui_impl_osx.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = imgui_impl_osx.mm; path = ../../imgui_impl_osx.mm; sourceTree = ""; }; - 836D2A2F20EE4A180098E909 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; - 836D2A3120EE4A900098E909 /* Launch Screen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = "Launch Screen.storyboard"; sourceTree = ""; }; - 83BBE9E420EB46B900295997 /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.4.sdk/System/Library/Frameworks/Metal.framework; sourceTree = DEVELOPER_DIR; }; - 83BBE9E620EB46BD00295997 /* MetalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MetalKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.4.sdk/System/Library/Frameworks/MetalKit.framework; sourceTree = DEVELOPER_DIR; }; - 83BBE9E820EB46C100295997 /* ModelIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ModelIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.4.sdk/System/Library/Frameworks/ModelIO.framework; sourceTree = DEVELOPER_DIR; }; - 83BBE9EA20EB471700295997 /* MetalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MetalKit.framework; path = System/Library/Frameworks/MetalKit.framework; sourceTree = SDKROOT; }; - 83BBE9EB20EB471700295997 /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; }; - 83BBE9EE20EB471C00295997 /* ModelIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ModelIO.framework; path = System/Library/Frameworks/ModelIO.framework; sourceTree = SDKROOT; }; - 83BBE9FC20EB54D800295997 /* imgui_impl_metal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = imgui_impl_metal.h; path = ../../imgui_impl_metal.h; sourceTree = ""; }; - 83BBE9FD20EB54D800295997 /* imgui_impl_metal.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = imgui_impl_metal.mm; path = ../../imgui_impl_metal.mm; sourceTree = ""; }; - 83BBEA0020EB54E700295997 /* imgui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = imgui.h; path = ../../imgui.h; sourceTree = ""; }; - 83BBEA0120EB54E700295997 /* imgui_draw.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui_draw.cpp; path = ../../imgui_draw.cpp; sourceTree = ""; }; - 83BBEA0220EB54E700295997 /* imgui_demo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui_demo.cpp; path = ../../imgui_demo.cpp; sourceTree = ""; }; - 83BBEA0320EB54E700295997 /* imgui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui.cpp; path = ../../imgui.cpp; sourceTree = ""; }; - 83BBEA0420EB54E700295997 /* imconfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = imconfig.h; path = ../../imconfig.h; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 8307E7C120E9F9C900473790 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 83BBE9E920EB46C100295997 /* ModelIO.framework in Frameworks */, - 83BBE9E720EB46BD00295997 /* MetalKit.framework in Frameworks */, - 83BBE9E520EB46B900295997 /* Metal.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8307E7D720E9F9C900473790 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 83BBE9EF20EB471C00295997 /* ModelIO.framework in Frameworks */, - 83BBE9EC20EB471700295997 /* MetalKit.framework in Frameworks */, - 83BBE9ED20EB471700295997 /* Metal.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 8307E7B520E9F9C700473790 = { - isa = PBXGroup; - children = ( - 83BBE9F020EB544400295997 /* imgui */, - 8307E7BA20E9F9C700473790 /* Shared */, - 8307E7C620E9F9C900473790 /* iOS */, - 8307E7DB20E9F9C900473790 /* macOS */, - 8307E7C520E9F9C900473790 /* Products */, - 83BBE9E320EB46B800295997 /* Frameworks */, - ); - sourceTree = ""; - }; - 8307E7BA20E9F9C700473790 /* Shared */ = { - isa = PBXGroup; - children = ( - 83BBE9FC20EB54D800295997 /* imgui_impl_metal.h */, - 83BBE9FD20EB54D800295997 /* imgui_impl_metal.mm */, - 836D2A2C20EE208D0098E909 /* imgui_impl_osx.h */, - 836D2A2D20EE208E0098E909 /* imgui_impl_osx.mm */, - 8307E7DC20E9F9C900473790 /* AppDelegate.h */, - 8307E7DD20E9F9C900473790 /* AppDelegate.m */, - 8307E7BB20E9F9C700473790 /* Renderer.h */, - 8307E7BC20E9F9C700473790 /* Renderer.mm */, - 8307E7CA20E9F9C900473790 /* ViewController.h */, - 8307E7CB20E9F9C900473790 /* ViewController.mm */, - 8307E7E620E9F9C900473790 /* main.m */, - ); - path = Shared; - sourceTree = ""; - }; - 8307E7C520E9F9C900473790 /* Products */ = { - isa = PBXGroup; - children = ( - 8307E7C420E9F9C900473790 /* example_apple_metal.app */, - 8307E7DA20E9F9C900473790 /* example_apple_metal.app */, - ); - name = Products; - sourceTree = ""; - }; - 8307E7C620E9F9C900473790 /* iOS */ = { - isa = PBXGroup; - children = ( - 836D2A2F20EE4A180098E909 /* Default-568h@2x.png */, - 8307E7CD20E9F9C900473790 /* Main.storyboard */, - 8307E7D320E9F9C900473790 /* Info-iOS.plist */, - 836D2A3120EE4A900098E909 /* Launch Screen.storyboard */, - ); - path = iOS; - sourceTree = ""; - }; - 8307E7DB20E9F9C900473790 /* macOS */ = { - isa = PBXGroup; - children = ( - 8307E7E220E9F9C900473790 /* Main.storyboard */, - 8307E7E520E9F9C900473790 /* Info-macOS.plist */, - ); - path = macOS; - sourceTree = ""; - }; - 83BBE9E320EB46B800295997 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 83BBE9EE20EB471C00295997 /* ModelIO.framework */, - 83BBE9EB20EB471700295997 /* Metal.framework */, - 83BBE9EA20EB471700295997 /* MetalKit.framework */, - 83BBE9E820EB46C100295997 /* ModelIO.framework */, - 83BBE9E620EB46BD00295997 /* MetalKit.framework */, - 83BBE9E420EB46B900295997 /* Metal.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 83BBE9F020EB544400295997 /* imgui */ = { - isa = PBXGroup; - children = ( - 83BBEA0420EB54E700295997 /* imconfig.h */, - 83BBEA0320EB54E700295997 /* imgui.cpp */, - 83BBEA0020EB54E700295997 /* imgui.h */, - 83BBEA0220EB54E700295997 /* imgui_demo.cpp */, - 83BBEA0120EB54E700295997 /* imgui_draw.cpp */, - 07A82ED62139413C0078D120 /* imgui_internal.h */, - 07A82ED72139413C0078D120 /* imgui_widgets.cpp */, - ); - name = imgui; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 8307E7C320E9F9C900473790 /* example_apple_metal_ios */ = { - isa = PBXNativeTarget; - buildConfigurationList = 8307E7F020E9F9C900473790 /* Build configuration list for PBXNativeTarget "example_apple_metal_ios" */; - buildPhases = ( - 8307E7C020E9F9C900473790 /* Sources */, - 8307E7C120E9F9C900473790 /* Frameworks */, - 8307E7C220E9F9C900473790 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = example_apple_metal_ios; - productName = "imguiex iOS"; - productReference = 8307E7C420E9F9C900473790 /* example_apple_metal.app */; - productType = "com.apple.product-type.application"; - }; - 8307E7D920E9F9C900473790 /* example_apple_metal_macos */ = { - isa = PBXNativeTarget; - buildConfigurationList = 8307E7F320E9F9C900473790 /* Build configuration list for PBXNativeTarget "example_apple_metal_macos" */; - buildPhases = ( - 8307E7D620E9F9C900473790 /* Sources */, - 8307E7D720E9F9C900473790 /* Frameworks */, - 8307E7D820E9F9C900473790 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = example_apple_metal_macos; - productName = "imguiex macOS"; - productReference = 8307E7DA20E9F9C900473790 /* example_apple_metal.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 8307E7B620E9F9C700473790 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0940; - ORGANIZATIONNAME = "Warren Moore"; - TargetAttributes = { - 8307E7C320E9F9C900473790 = { - CreatedOnToolsVersion = 9.4.1; - ProvisioningStyle = Automatic; - }; - 8307E7D920E9F9C900473790 = { - CreatedOnToolsVersion = 9.4.1; - ProvisioningStyle = Automatic; - }; - }; - }; - buildConfigurationList = 8307E7B920E9F9C700473790 /* Build configuration list for PBXProject "example_apple_metal" */; - compatibilityVersion = "Xcode 8.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 8307E7B520E9F9C700473790; - productRefGroup = 8307E7C520E9F9C900473790 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 8307E7C320E9F9C900473790 /* example_apple_metal_ios */, - 8307E7D920E9F9C900473790 /* example_apple_metal_macos */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 8307E7C220E9F9C900473790 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 836D2A3220EE4A900098E909 /* Launch Screen.storyboard in Resources */, - 8307E7CF20E9F9C900473790 /* Main.storyboard in Resources */, - 836D2A3020EE4A180098E909 /* Default-568h@2x.png in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8307E7D820E9F9C900473790 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8307E7E420E9F9C900473790 /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 8307E7C020E9F9C900473790 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8307E7E820E9F9C900473790 /* Renderer.mm in Sources */, - 8307E7CC20E9F9C900473790 /* ViewController.mm in Sources */, - 83BBEA0520EB54E700295997 /* imgui_draw.cpp in Sources */, - 83BBE9DF20EB40AE00295997 /* AppDelegate.m in Sources */, - 83BBEA0920EB54E700295997 /* imgui.cpp in Sources */, - 83BBEA0720EB54E700295997 /* imgui_demo.cpp in Sources */, - 83BBE9FE20EB54D800295997 /* imgui_impl_metal.mm in Sources */, - 07A82ED82139413D0078D120 /* imgui_widgets.cpp in Sources */, - 83BBE9DE20EB3FFC00295997 /* main.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8307E7D620E9F9C900473790 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 83BBE9E020EB42D000295997 /* ViewController.mm in Sources */, - 8307E7E920E9F9C900473790 /* Renderer.mm in Sources */, - 83BBEA0620EB54E700295997 /* imgui_draw.cpp in Sources */, - 07A82ED92139418F0078D120 /* imgui_widgets.cpp in Sources */, - 8307E7E720E9F9C900473790 /* main.m in Sources */, - 83BBEA0A20EB54E700295997 /* imgui.cpp in Sources */, - 83BBEA0820EB54E700295997 /* imgui_demo.cpp in Sources */, - 83BBE9FF20EB54D800295997 /* imgui_impl_metal.mm in Sources */, - 836D2A2E20EE208E0098E909 /* imgui_impl_osx.mm in Sources */, - 8307E7DE20E9F9C900473790 /* AppDelegate.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 8307E7CD20E9F9C900473790 /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 8307E7CE20E9F9C900473790 /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 8307E7E220E9F9C900473790 /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 8307E7E320E9F9C900473790 /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 8307E7EE20E9F9C900473790 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - }; - name = Debug; - }; - 8307E7EF20E9F9C900473790 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MTL_ENABLE_DEBUG_INFO = NO; - }; - name = Release; - }; - 8307E7F120E9F9C900473790 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = ""; - INFOPLIST_FILE = "$(SRCROOT)/iOS/Info-iOS.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "org.imgui.example.apple-metal-ios"; - PRODUCT_NAME = example_apple_metal; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 8307E7F220E9F9C900473790 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = ""; - INFOPLIST_FILE = "$(SRCROOT)/iOS/Info-iOS.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "org.imgui.example.apple-metal-ios"; - PRODUCT_NAME = example_apple_metal; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 8307E7F420E9F9C900473790 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = "-"; - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - DEVELOPMENT_TEAM = ""; - INFOPLIST_FILE = "$(SRCROOT)/macOS/Info-macOS.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.12; - PRODUCT_BUNDLE_IDENTIFIER = "org.imgui.example.apple-metal-macos"; - PRODUCT_NAME = example_apple_metal; - SDKROOT = macosx; - }; - name = Debug; - }; - 8307E7F520E9F9C900473790 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = "-"; - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - DEVELOPMENT_TEAM = ""; - INFOPLIST_FILE = "$(SRCROOT)/macOS/Info-macOS.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.12; - PRODUCT_BUNDLE_IDENTIFIER = "org.imgui.example.apple-metal-macos"; - PRODUCT_NAME = example_apple_metal; - SDKROOT = macosx; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 8307E7B920E9F9C700473790 /* Build configuration list for PBXProject "example_apple_metal" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8307E7EE20E9F9C900473790 /* Debug */, - 8307E7EF20E9F9C900473790 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 8307E7F020E9F9C900473790 /* Build configuration list for PBXNativeTarget "example_apple_metal_ios" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8307E7F120E9F9C900473790 /* Debug */, - 8307E7F220E9F9C900473790 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 8307E7F320E9F9C900473790 /* Build configuration list for PBXNativeTarget "example_apple_metal_macos" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8307E7F420E9F9C900473790 /* Debug */, - 8307E7F520E9F9C900473790 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 8307E7B620E9F9C700473790 /* Project object */; -} diff --git a/cmake/imgui/examples/example_apple_metal/iOS/Base.lproj/Main.storyboard b/cmake/imgui/examples/example_apple_metal/iOS/Base.lproj/Main.storyboard deleted file mode 100644 index 24a4009e..00000000 --- a/cmake/imgui/examples/example_apple_metal/iOS/Base.lproj/Main.storyboard +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/cmake/imgui/examples/example_apple_metal/iOS/Default-568h@2x.png b/cmake/imgui/examples/example_apple_metal/iOS/Default-568h@2x.png deleted file mode 100644 index e3ce940a..00000000 Binary files a/cmake/imgui/examples/example_apple_metal/iOS/Default-568h@2x.png and /dev/null differ diff --git a/cmake/imgui/examples/example_apple_metal/iOS/Info-iOS.plist b/cmake/imgui/examples/example_apple_metal/iOS/Info-iOS.plist deleted file mode 100644 index 8d919d1e..00000000 --- a/cmake/imgui/examples/example_apple_metal/iOS/Info-iOS.plist +++ /dev/null @@ -1,51 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - imgui - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - Launch Screen - UIMainStoryboardFile - Main - UIRequiredDeviceCapabilities - - armv7 - metal - - UIRequiresFullScreen - - UIStatusBarHidden - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - UIInterfaceOrientationPortraitUpsideDown - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/cmake/imgui/examples/example_apple_metal/iOS/Launch Screen.storyboard b/cmake/imgui/examples/example_apple_metal/iOS/Launch Screen.storyboard deleted file mode 100644 index 96047e1f..00000000 --- a/cmake/imgui/examples/example_apple_metal/iOS/Launch Screen.storyboard +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/cmake/imgui/examples/example_apple_metal/macOS/Base.lproj/Main.storyboard b/cmake/imgui/examples/example_apple_metal/macOS/Base.lproj/Main.storyboard deleted file mode 100644 index cf414617..00000000 --- a/cmake/imgui/examples/example_apple_metal/macOS/Base.lproj/Main.storyboard +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/cmake/imgui/examples/example_apple_metal/macOS/Info-macOS.plist b/cmake/imgui/examples/example_apple_metal/macOS/Info-macOS.plist deleted file mode 100644 index 52d99204..00000000 --- a/cmake/imgui/examples/example_apple_metal/macOS/Info-macOS.plist +++ /dev/null @@ -1,32 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIconFile - - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - imgui - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - LSMinimumSystemVersion - $(MACOSX_DEPLOYMENT_TARGET) - NSHumanReadableCopyright - Copyright © 2018 Warren Moore. All rights reserved. - NSMainStoryboardFile - Main - NSPrincipalClass - NSApplication - - diff --git a/cmake/imgui/examples/example_apple_opengl2/example_apple_opengl2.xcodeproj/project.pbxproj b/cmake/imgui/examples/example_apple_opengl2/example_apple_opengl2.xcodeproj/project.pbxproj deleted file mode 100644 index 5bdf74b5..00000000 --- a/cmake/imgui/examples/example_apple_opengl2/example_apple_opengl2.xcodeproj/project.pbxproj +++ /dev/null @@ -1,326 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 48; - objects = { - -/* Begin PBXBuildFile section */ - 07A82EDB213941D00078D120 /* imgui_widgets.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07A82EDA213941D00078D120 /* imgui_widgets.cpp */; }; - 4080A99820B02D340036BA46 /* main.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4080A98A20B02CD90036BA46 /* main.mm */; }; - 4080A9A220B034280036BA46 /* imgui_impl_opengl2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4080A99E20B034280036BA46 /* imgui_impl_opengl2.cpp */; }; - 4080A9AD20B0343C0036BA46 /* imgui_demo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4080A9A620B0343C0036BA46 /* imgui_demo.cpp */; }; - 4080A9AE20B0343C0036BA46 /* imgui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4080A9A720B0343C0036BA46 /* imgui.cpp */; }; - 4080A9AF20B0343C0036BA46 /* imgui_draw.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4080A9AA20B0343C0036BA46 /* imgui_draw.cpp */; }; - 4080A9B020B0347A0036BA46 /* imgui_impl_osx.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4080A99F20B034280036BA46 /* imgui_impl_osx.mm */; }; - 4080A9B320B034E40036BA46 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4080A9B220B034E40036BA46 /* Cocoa.framework */; }; - 4080A9B520B034EA0036BA46 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4080A9B420B034EA0036BA46 /* OpenGL.framework */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 4080A96920B029B00036BA46 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = /usr/share/man/man1/; - dstSubfolderSpec = 0; - files = ( - ); - runOnlyForDeploymentPostprocessing = 1; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 07A82EDA213941D00078D120 /* imgui_widgets.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui_widgets.cpp; path = ../../imgui_widgets.cpp; sourceTree = ""; }; - 4080A96B20B029B00036BA46 /* example_osx_opengl2 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = example_osx_opengl2; sourceTree = BUILT_PRODUCTS_DIR; }; - 4080A98A20B02CD90036BA46 /* main.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = main.mm; sourceTree = SOURCE_ROOT; }; - 4080A99E20B034280036BA46 /* imgui_impl_opengl2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui_impl_opengl2.cpp; path = ../imgui_impl_opengl2.cpp; sourceTree = ""; }; - 4080A99F20B034280036BA46 /* imgui_impl_osx.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = imgui_impl_osx.mm; path = ../imgui_impl_osx.mm; sourceTree = ""; }; - 4080A9A020B034280036BA46 /* imgui_impl_opengl2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = imgui_impl_opengl2.h; path = ../imgui_impl_opengl2.h; sourceTree = ""; }; - 4080A9A120B034280036BA46 /* imgui_impl_osx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = imgui_impl_osx.h; path = ../imgui_impl_osx.h; sourceTree = ""; }; - 4080A9A520B0343C0036BA46 /* imgui_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = imgui_internal.h; path = ../../imgui_internal.h; sourceTree = ""; }; - 4080A9A620B0343C0036BA46 /* imgui_demo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui_demo.cpp; path = ../../imgui_demo.cpp; sourceTree = ""; }; - 4080A9A720B0343C0036BA46 /* imgui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui.cpp; path = ../../imgui.cpp; sourceTree = ""; }; - 4080A9A820B0343C0036BA46 /* imgui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = imgui.h; path = ../../imgui.h; sourceTree = ""; }; - 4080A9AA20B0343C0036BA46 /* imgui_draw.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui_draw.cpp; path = ../../imgui_draw.cpp; sourceTree = ""; }; - 4080A9AC20B0343C0036BA46 /* imconfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = imconfig.h; path = ../../imconfig.h; sourceTree = ""; }; - 4080A9B220B034E40036BA46 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; - 4080A9B420B034EA0036BA46 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 4080A96820B029B00036BA46 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 4080A9B520B034EA0036BA46 /* OpenGL.framework in Frameworks */, - 4080A9B320B034E40036BA46 /* Cocoa.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 4080A96220B029B00036BA46 = { - isa = PBXGroup; - children = ( - 4080A9AC20B0343C0036BA46 /* imconfig.h */, - 4080A9A720B0343C0036BA46 /* imgui.cpp */, - 4080A9A820B0343C0036BA46 /* imgui.h */, - 07A82EDA213941D00078D120 /* imgui_widgets.cpp */, - 4080A9A620B0343C0036BA46 /* imgui_demo.cpp */, - 4080A9AA20B0343C0036BA46 /* imgui_draw.cpp */, - 4080A9A520B0343C0036BA46 /* imgui_internal.h */, - 4080A99E20B034280036BA46 /* imgui_impl_opengl2.cpp */, - 4080A9A020B034280036BA46 /* imgui_impl_opengl2.h */, - 4080A9A120B034280036BA46 /* imgui_impl_osx.h */, - 4080A99F20B034280036BA46 /* imgui_impl_osx.mm */, - 4080A98A20B02CD90036BA46 /* main.mm */, - 4080A96C20B029B00036BA46 /* Products */, - 4080A9B120B034E40036BA46 /* Frameworks */, - ); - sourceTree = ""; - }; - 4080A96C20B029B00036BA46 /* Products */ = { - isa = PBXGroup; - children = ( - 4080A96B20B029B00036BA46 /* example_osx_opengl2 */, - ); - name = Products; - sourceTree = ""; - }; - 4080A9B120B034E40036BA46 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 4080A9B420B034EA0036BA46 /* OpenGL.framework */, - 4080A9B220B034E40036BA46 /* Cocoa.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 4080A96A20B029B00036BA46 /* example_osx_opengl2 */ = { - isa = PBXNativeTarget; - buildConfigurationList = 4080A97220B029B00036BA46 /* Build configuration list for PBXNativeTarget "example_osx_opengl2" */; - buildPhases = ( - 4080A96720B029B00036BA46 /* Sources */, - 4080A96820B029B00036BA46 /* Frameworks */, - 4080A96920B029B00036BA46 /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = example_osx_opengl2; - productName = example_osx_opengl2; - productReference = 4080A96B20B029B00036BA46 /* example_osx_opengl2 */; - productType = "com.apple.product-type.tool"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 4080A96320B029B00036BA46 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0930; - ORGANIZATIONNAME = ImGui; - TargetAttributes = { - 4080A96A20B029B00036BA46 = { - CreatedOnToolsVersion = 9.3.1; - ProvisioningStyle = Automatic; - }; - }; - }; - buildConfigurationList = 4080A96620B029B00036BA46 /* Build configuration list for PBXProject "example_apple_opengl2" */; - compatibilityVersion = "Xcode 8.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = 4080A96220B029B00036BA46; - productRefGroup = 4080A96C20B029B00036BA46 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 4080A96A20B029B00036BA46 /* example_osx_opengl2 */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXSourcesBuildPhase section */ - 4080A96720B029B00036BA46 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 4080A99820B02D340036BA46 /* main.mm in Sources */, - 4080A9AD20B0343C0036BA46 /* imgui_demo.cpp in Sources */, - 4080A9AF20B0343C0036BA46 /* imgui_draw.cpp in Sources */, - 4080A9A220B034280036BA46 /* imgui_impl_opengl2.cpp in Sources */, - 4080A9B020B0347A0036BA46 /* imgui_impl_osx.mm in Sources */, - 4080A9AE20B0343C0036BA46 /* imgui.cpp in Sources */, - 07A82EDB213941D00078D120 /* imgui_widgets.cpp in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 4080A97020B029B00036BA46 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.13; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; - }; - name = Debug; - }; - 4080A97120B029B00036BA46 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.13; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = macosx; - }; - name = Release; - }; - 4080A97320B029B00036BA46 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - MACOSX_DEPLOYMENT_TARGET = 10.12; - PRODUCT_NAME = "$(TARGET_NAME)"; - SYSTEM_HEADER_SEARCH_PATHS = ../libs/gl3w; - USER_HEADER_SEARCH_PATHS = ../..; - }; - name = Debug; - }; - 4080A97420B029B00036BA46 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - MACOSX_DEPLOYMENT_TARGET = 10.12; - PRODUCT_NAME = "$(TARGET_NAME)"; - SYSTEM_HEADER_SEARCH_PATHS = ../libs/gl3w; - USER_HEADER_SEARCH_PATHS = ../..; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 4080A96620B029B00036BA46 /* Build configuration list for PBXProject "example_apple_opengl2" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4080A97020B029B00036BA46 /* Debug */, - 4080A97120B029B00036BA46 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 4080A97220B029B00036BA46 /* Build configuration list for PBXNativeTarget "example_osx_opengl2" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4080A97320B029B00036BA46 /* Debug */, - 4080A97420B029B00036BA46 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 4080A96320B029B00036BA46 /* Project object */; -} diff --git a/cmake/imgui/examples/example_apple_opengl2/main.mm b/cmake/imgui/examples/example_apple_opengl2/main.mm deleted file mode 100644 index e8f2768b..00000000 --- a/cmake/imgui/examples/example_apple_opengl2/main.mm +++ /dev/null @@ -1,279 +0,0 @@ -// dear imgui: standalone example application for OSX + OpenGL2, using legacy fixed pipeline -// If you are new to dear imgui, see examples/README.txt and documentation at the top of imgui.cpp. - -#include "imgui.h" -#include "../imgui_impl_osx.h" -#include "../imgui_impl_opengl2.h" -#include -#import -#import -#import - -//----------------------------------------------------------------------------------- -// ImGuiExampleView -//----------------------------------------------------------------------------------- - -@interface ImGuiExampleView : NSOpenGLView -{ - NSTimer* animationTimer; -} -@end - -@implementation ImGuiExampleView - --(void)animationTimerFired:(NSTimer*)timer -{ - [self setNeedsDisplay:YES]; -} - --(void)prepareOpenGL -{ - [super prepareOpenGL]; - -#ifndef DEBUG - GLint swapInterval = 1; - [[self openGLContext] setValues:&swapInterval forParameter:NSOpenGLCPSwapInterval]; - if (swapInterval == 0) - NSLog(@"Error: Cannot set swap interval."); -#endif -} - --(void)updateAndDrawDemoView -{ - // Start the Dear ImGui frame - ImGui_ImplOpenGL2_NewFrame(); - ImGui_ImplOSX_NewFrame(self); - ImGui::NewFrame(); - - // Global data for the demo - static bool show_demo_window = true; - static bool show_another_window = false; - static ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); - - // 1. Show the big demo window (Most of the sample code is in ImGui::ShowDemoWindow()! You can browse its code to learn more about Dear ImGui!). - if (show_demo_window) - ImGui::ShowDemoWindow(&show_demo_window); - - // 2. Show a simple window that we create ourselves. We use a Begin/End pair to created a named window. - { - static float f = 0.0f; - static int counter = 0; - - ImGui::Begin("Hello, world!"); // Create a window called "Hello, world!" and append into it. - - ImGui::Text("This is some useful text."); // Display some text (you can use a format strings too) - ImGui::Checkbox("Demo Window", &show_demo_window); // Edit bools storing our window open/close state - ImGui::Checkbox("Another Window", &show_another_window); - - ImGui::SliderFloat("float", &f, 0.0f, 1.0f); // Edit 1 float using a slider from 0.0f to 1.0f - ImGui::ColorEdit3("clear color", (float*)&clear_color); // Edit 3 floats representing a color - - if (ImGui::Button("Button")) // Buttons return true when clicked (most widgets return true when edited/activated) - counter++; - ImGui::SameLine(); - ImGui::Text("counter = %d", counter); - - ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); - ImGui::End(); - } - - // 3. Show another simple window. - if (show_another_window) - { - ImGui::Begin("Another Window", &show_another_window); // Pass a pointer to our bool variable (the window will have a closing button that will clear the bool when clicked) - ImGui::Text("Hello from another window!"); - if (ImGui::Button("Close Me")) - show_another_window = false; - ImGui::End(); - } - - // Rendering - ImGui::Render(); - [[self openGLContext] makeCurrentContext]; - - ImDrawData* draw_data = ImGui::GetDrawData(); - GLsizei width = (GLsizei)(draw_data->DisplaySize.x * draw_data->FramebufferScale.x); - GLsizei height = (GLsizei)(draw_data->DisplaySize.y * draw_data->FramebufferScale.y); - glViewport(0, 0, width, height); - - glClearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); - glClear(GL_COLOR_BUFFER_BIT); - ImGui_ImplOpenGL2_RenderDrawData(draw_data); - - // Present - [[self openGLContext] flushBuffer]; - - if (!animationTimer) - animationTimer = [NSTimer scheduledTimerWithTimeInterval:0.017 target:self selector:@selector(animationTimerFired:) userInfo:nil repeats:YES]; -} - --(void)reshape -{ - [[self openGLContext] update]; - [self updateAndDrawDemoView]; -} - --(void)drawRect:(NSRect)bounds -{ - [self updateAndDrawDemoView]; -} - --(BOOL)acceptsFirstResponder -{ - return (YES); -} - --(BOOL)becomeFirstResponder -{ - return (YES); -} - --(BOOL)resignFirstResponder -{ - return (YES); -} - --(void)dealloc -{ - animationTimer = nil; -} - -// Forward Mouse/Keyboard events to dear imgui OSX back-end. It returns true when imgui is expecting to use the event. --(void)keyUp:(NSEvent *)event { ImGui_ImplOSX_HandleEvent(event, self); } --(void)keyDown:(NSEvent *)event { ImGui_ImplOSX_HandleEvent(event, self); } --(void)flagsChanged:(NSEvent *)event { ImGui_ImplOSX_HandleEvent(event, self); } --(void)mouseDown:(NSEvent *)event { ImGui_ImplOSX_HandleEvent(event, self); } --(void)mouseUp:(NSEvent *)event { ImGui_ImplOSX_HandleEvent(event, self); } --(void)mouseMoved:(NSEvent *)event { ImGui_ImplOSX_HandleEvent(event, self); } --(void)mouseDragged:(NSEvent *)event { ImGui_ImplOSX_HandleEvent(event, self); } --(void)scrollWheel:(NSEvent *)event { ImGui_ImplOSX_HandleEvent(event, self); } - -@end - -//----------------------------------------------------------------------------------- -// ImGuiExampleAppDelegate -//----------------------------------------------------------------------------------- - -@interface ImGuiExampleAppDelegate : NSObject -@property (nonatomic, readonly) NSWindow* window; -@end - -@implementation ImGuiExampleAppDelegate -@synthesize window = _window; - --(BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)theApplication -{ - return YES; -} - --(NSWindow*)window -{ - if (_window != nil) - return (_window); - - NSRect viewRect = NSMakeRect(100.0, 100.0, 100.0 + 1280.0, 100 + 720.0); - - _window = [[NSWindow alloc] initWithContentRect:viewRect styleMask:NSWindowStyleMaskTitled|NSWindowStyleMaskMiniaturizable|NSWindowStyleMaskResizable|NSWindowStyleMaskClosable backing:NSBackingStoreBuffered defer:YES]; - [_window setTitle:@"Dear ImGui OSX+OpenGL2 Example"]; - [_window setAcceptsMouseMovedEvents:YES]; - [_window setOpaque:YES]; - [_window makeKeyAndOrderFront:NSApp]; - - return (_window); -} - --(void)setupMenu -{ - NSMenu* mainMenuBar = [[NSMenu alloc] init]; - NSMenu* appMenu; - NSMenuItem* menuItem; - - appMenu = [[NSMenu alloc] initWithTitle:@"Dear ImGui OSX+OpenGL2 Example"]; - menuItem = [appMenu addItemWithTitle:@"Quit Dear ImGui OSX+OpenGL2 Example" action:@selector(terminate:) keyEquivalent:@"q"]; - [menuItem setKeyEquivalentModifierMask:NSEventModifierFlagCommand]; - - menuItem = [[NSMenuItem alloc] init]; - [menuItem setSubmenu:appMenu]; - - [mainMenuBar addItem:menuItem]; - - appMenu = nil; - [NSApp setMainMenu:mainMenuBar]; -} - --(void)dealloc -{ - _window = nil; -} - --(void)applicationDidFinishLaunching:(NSNotification *)aNotification -{ - // Make the application a foreground application (else it won't receive keyboard events) - ProcessSerialNumber psn = {0, kCurrentProcess}; - TransformProcessType(&psn, kProcessTransformToForegroundApplication); - - // Menu - [self setupMenu]; - - NSOpenGLPixelFormatAttribute attrs[] = - { - NSOpenGLPFADoubleBuffer, - NSOpenGLPFADepthSize, 32, - 0 - }; - - NSOpenGLPixelFormat* format = [[NSOpenGLPixelFormat alloc] initWithAttributes:attrs]; - ImGuiExampleView* view = [[ImGuiExampleView alloc] initWithFrame:self.window.frame pixelFormat:format]; - format = nil; -#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 - if (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_6) - [view setWantsBestResolutionOpenGLSurface:YES]; -#endif // MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 - [self.window setContentView:view]; - - if ([view openGLContext] == nil) - NSLog(@"No OpenGL Context!"); - - // Setup Dear ImGui context - IMGUI_CHECKVERSION(); - ImGui::CreateContext(); - ImGuiIO& io = ImGui::GetIO(); (void)io; - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls - - // Setup Dear ImGui style - ImGui::StyleColorsDark(); - //ImGui::StyleColorsClassic(); - - // Setup Platform/Renderer bindings - ImGui_ImplOSX_Init(); - ImGui_ImplOpenGL2_Init(); - - // Load Fonts - // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. - // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. - // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). - // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. - // - Read 'docs/FONTS.txt' for more instructions and details. - // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! - //io.Fonts->AddFontDefault(); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Roboto-Medium.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Cousine-Regular.ttf", 15.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/DroidSans.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/ProggyTiny.ttf", 10.0f); - //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); - //IM_ASSERT(font != NULL); -} - -@end - -int main(int argc, const char* argv[]) -{ - @autoreleasepool - { - NSApp = [NSApplication sharedApplication]; - ImGuiExampleAppDelegate* delegate = [[ImGuiExampleAppDelegate alloc] init]; - [[NSApplication sharedApplication] setDelegate:delegate]; - [NSApp run]; - } - return NSApplicationMain(argc, argv); -} diff --git a/cmake/imgui/examples/example_emscripten/README.md b/cmake/imgui/examples/example_emscripten/README.md deleted file mode 100644 index dcb7c1a7..00000000 --- a/cmake/imgui/examples/example_emscripten/README.md +++ /dev/null @@ -1,12 +0,0 @@ - -# How to Build - -- You need to install Emscripten from https://emscripten.org/docs/getting_started/downloads.html, and have the environment variables set, as described in https://emscripten.org/docs/getting_started/downloads.html#installation-instructions - -- Depending on your configuration, in Windows you may need to run `emsdk/emsdk_env.bat` in your console to access the Emscripten command-line tools. - -- Then build using `make` while in the `example_emscripten/` directory. - -- Note that Emscripten 1.39.0 (October 2019) obsoleted the `BINARYEN_TRAP_MODE=clamp` compilation flag which was required with version older than 1.39.0 to avoid rendering artefacts. See [#2877](https://github.com/ocornut/imgui/issues/2877) for details. If you use an older version, uncomment this line in the Makefile: - -`#EMS += -s BINARYEN_TRAP_MODE=clamp` diff --git a/cmake/imgui/examples/example_emscripten/main.cpp b/cmake/imgui/examples/example_emscripten/main.cpp deleted file mode 100644 index f0eb3a2b..00000000 --- a/cmake/imgui/examples/example_emscripten/main.cpp +++ /dev/null @@ -1,173 +0,0 @@ -// dear imgui: standalone example application for Emscripten, using SDL2 + OpenGL3 -// This is mostly the same code as the SDL2 + OpenGL3 example, simply with the modifications needed to run on Emscripten. -// It is possible to combine both code into a single source file that will compile properly on Desktop and using Emscripten. -// See https://github.com/ocornut/imgui/pull/2492 as an example on how to do just that. -// -// If you are new to dear imgui, see examples/README.txt and documentation at the top of imgui.cpp. -// (Emscripten is a C++-to-javascript compiler, used to publish executables for the web. See https://emscripten.org/) - -#include "imgui.h" -#include "imgui_impl_sdl.h" -#include "imgui_impl_opengl3.h" -#include -#include -#include -#include - -// Emscripten requires to have full control over the main loop. We're going to store our SDL book-keeping variables globally. -// Having a single function that acts as a loop prevents us to store state in the stack of said function. So we need some location for this. -SDL_Window* g_Window = NULL; -SDL_GLContext g_GLContext = NULL; - -// For clarity, our main loop code is declared at the end. -void main_loop(void*); - -int main(int, char**) -{ - // Setup SDL - if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_GAMECONTROLLER) != 0) - { - printf("Error: %s\n", SDL_GetError()); - return -1; - } - - // For the browser using Emscripten, we are going to use WebGL1 with GL ES2. See the Makefile. for requirement details. - // It is very likely the generated file won't work in many browsers. Firefox is the only sure bet, but I have successfully - // run this code on Chrome for Android for example. - const char* glsl_version = "#version 100"; - //const char* glsl_version = "#version 300 es"; - SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, 0); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0); - - // Create window with graphics context - SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); - SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); - SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8); - SDL_DisplayMode current; - SDL_GetCurrentDisplayMode(0, ¤t); - SDL_WindowFlags window_flags = (SDL_WindowFlags)(SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI); - g_Window = SDL_CreateWindow("Dear ImGui Emscripten example", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 720, window_flags); - g_GLContext = SDL_GL_CreateContext(g_Window); - if (!g_GLContext) - { - fprintf(stderr, "Failed to initialize WebGL context!\n"); - return 1; - } - SDL_GL_SetSwapInterval(1); // Enable vsync - - // Setup Dear ImGui context - IMGUI_CHECKVERSION(); - ImGui::CreateContext(); - ImGuiIO& io = ImGui::GetIO(); (void)io; - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls - - // For an Emscripten build we are disabling file-system access, so let's not attempt to do a fopen() of the imgui.ini file. - // You may manually call LoadIniSettingsFromMemory() to load settings from your own storage. - io.IniFilename = NULL; - - // Setup Dear ImGui style - ImGui::StyleColorsDark(); - //ImGui::StyleColorsClassic(); - - // Setup Platform/Renderer bindings - ImGui_ImplSDL2_InitForOpenGL(g_Window, g_GLContext); - ImGui_ImplOpenGL3_Init(glsl_version); - - // Load Fonts - // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. - // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. - // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). - // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. - // - Read 'docs/FONTS.txt' for more instructions and details. - // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! - // - Emscripten allows preloading a file or folder to be accessible at runtime. See Makefile for details. - //io.Fonts->AddFontDefault(); -#ifndef IMGUI_DISABLE_FILE_FUNCTIONS - io.Fonts->AddFontFromFileTTF("fonts/Roboto-Medium.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("fonts/Cousine-Regular.ttf", 15.0f); - //io.Fonts->AddFontFromFileTTF("fonts/DroidSans.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("fonts/ProggyTiny.ttf", 10.0f); - //ImFont* font = io.Fonts->AddFontFromFileTTF("fonts/ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); - //IM_ASSERT(font != NULL); -#endif - - // This function call won't return, and will engage in an infinite loop, processing events from the browser, and dispatching them. - emscripten_set_main_loop_arg(main_loop, NULL, 0, true); -} - -void main_loop(void* arg) -{ - ImGuiIO& io = ImGui::GetIO(); - IM_UNUSED(arg); // We can pass this argument as the second parameter of emscripten_set_main_loop_arg(), but we don't use that. - - // Our state (make them static = more or less global) as a convenience to keep the example terse. - static bool show_demo_window = true; - static bool show_another_window = false; - static ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); - - // Poll and handle events (inputs, window resize, etc.) - // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. - // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. - // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. - // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. - SDL_Event event; - while (SDL_PollEvent(&event)) - { - ImGui_ImplSDL2_ProcessEvent(&event); - // Capture events here, based on io.WantCaptureMouse and io.WantCaptureKeyboard - } - - // Start the Dear ImGui frame - ImGui_ImplOpenGL3_NewFrame(); - ImGui_ImplSDL2_NewFrame(g_Window); - ImGui::NewFrame(); - - // 1. Show the big demo window (Most of the sample code is in ImGui::ShowDemoWindow()! You can browse its code to learn more about Dear ImGui!). - if (show_demo_window) - ImGui::ShowDemoWindow(&show_demo_window); - - // 2. Show a simple window that we create ourselves. We use a Begin/End pair to created a named window. - { - static float f = 0.0f; - static int counter = 0; - - ImGui::Begin("Hello, world!"); // Create a window called "Hello, world!" and append into it. - - ImGui::Text("This is some useful text."); // Display some text (you can use a format strings too) - ImGui::Checkbox("Demo Window", &show_demo_window); // Edit bools storing our window open/close state - ImGui::Checkbox("Another Window", &show_another_window); - - ImGui::SliderFloat("float", &f, 0.0f, 1.0f); // Edit 1 float using a slider from 0.0f to 1.0f - ImGui::ColorEdit3("clear color", (float*)&clear_color); // Edit 3 floats representing a color - - if (ImGui::Button("Button")) // Buttons return true when clicked (most widgets return true when edited/activated) - counter++; - ImGui::SameLine(); - ImGui::Text("counter = %d", counter); - - ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); - ImGui::End(); - } - - // 3. Show another simple window. - if (show_another_window) - { - ImGui::Begin("Another Window", &show_another_window); // Pass a pointer to our bool variable (the window will have a closing button that will clear the bool when clicked) - ImGui::Text("Hello from another window!"); - if (ImGui::Button("Close Me")) - show_another_window = false; - ImGui::End(); - } - - // Rendering - ImGui::Render(); - SDL_GL_MakeCurrent(g_Window, g_GLContext); - glViewport(0, 0, (int)io.DisplaySize.x, (int)io.DisplaySize.y); - glClearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); - glClear(GL_COLOR_BUFFER_BIT); - ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); - SDL_GL_SwapWindow(g_Window); -} diff --git a/cmake/imgui/examples/example_emscripten/shell_minimal.html b/cmake/imgui/examples/example_emscripten/shell_minimal.html deleted file mode 100644 index 514385d7..00000000 --- a/cmake/imgui/examples/example_emscripten/shell_minimal.html +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - Dear ImGui Emscripten example - - - - - - {{{ SCRIPT }}} - - diff --git a/cmake/imgui/examples/example_glfw_metal/main.mm b/cmake/imgui/examples/example_glfw_metal/main.mm deleted file mode 100644 index d6f9ae3f..00000000 --- a/cmake/imgui/examples/example_glfw_metal/main.mm +++ /dev/null @@ -1,170 +0,0 @@ -// dear imgui: standalone example application for GLFW + Metal, using programmable pipeline -// If you are new to dear imgui, see examples/README.txt and documentation at the top of imgui.cpp. -// (GLFW is a cross-platform general purpose library for handling windows, inputs, OpenGL/Vulkan/Metal graphics context creation, etc.) - -#include "imgui.h" -#include "imgui_impl_glfw.h" -#include "imgui_impl_metal.h" -#include - -#define GLFW_INCLUDE_NONE -#define GLFW_EXPOSE_NATIVE_COCOA -#include -#include - -#import -#import - -static void glfw_error_callback(int error, const char* description) -{ - fprintf(stderr, "Glfw Error %d: %s\n", error, description); -} - -int main(int, char**) -{ - // Setup Dear ImGui binding - IMGUI_CHECKVERSION(); - ImGui::CreateContext(); - ImGuiIO& io = ImGui::GetIO(); (void)io; - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls - - // Setup style - ImGui::StyleColorsDark(); - //ImGui::StyleColorsClassic(); - - // Load Fonts - // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. - // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. - // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). - // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. - // - Read 'docs/FONTS.txt' for more instructions and details. - // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! - //io.Fonts->AddFontDefault(); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Roboto-Medium.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Cousine-Regular.ttf", 15.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/DroidSans.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/ProggyTiny.ttf", 10.0f); - //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); - //IM_ASSERT(font != NULL); - - // Setup window - glfwSetErrorCallback(glfw_error_callback); - if (!glfwInit()) - return 1; - - // Create window with graphics context - glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API); - GLFWwindow* window = glfwCreateWindow(1280, 720, "Dear ImGui GLFW+Metal example", NULL, NULL); - if (window == NULL) - return 1; - - id device = MTLCreateSystemDefaultDevice();; - id commandQueue = [device newCommandQueue]; - - ImGui_ImplGlfw_InitForOpenGL(window, true); - ImGui_ImplMetal_Init(device); - - NSWindow *nswin = glfwGetCocoaWindow(window); - CAMetalLayer *layer = [CAMetalLayer layer]; - layer.device = device; - layer.pixelFormat = MTLPixelFormatBGRA8Unorm; - nswin.contentView.layer = layer; - nswin.contentView.wantsLayer = YES; - - MTLRenderPassDescriptor *renderPassDescriptor = [MTLRenderPassDescriptor new]; - - // Our state - bool show_demo_window = true; - bool show_another_window = false; - float clear_color[4] = {0.45f, 0.55f, 0.60f, 1.00f}; - - // Main loop - while (!glfwWindowShouldClose(window)) - { - @autoreleasepool - { - // Poll and handle events (inputs, window resize, etc.) - // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. - // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. - // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. - // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. - glfwPollEvents(); - - int width, height; - glfwGetFramebufferSize(window, &width, &height); - layer.drawableSize = CGSizeMake(width, height); - id drawable = [layer nextDrawable]; - - id commandBuffer = [commandQueue commandBuffer]; - renderPassDescriptor.colorAttachments[0].clearColor = MTLClearColorMake(clear_color[0], clear_color[1], clear_color[2], clear_color[3]); - renderPassDescriptor.colorAttachments[0].texture = drawable.texture; - renderPassDescriptor.colorAttachments[0].loadAction = MTLLoadActionClear; - renderPassDescriptor.colorAttachments[0].storeAction = MTLStoreActionStore; - id renderEncoder = [commandBuffer renderCommandEncoderWithDescriptor:renderPassDescriptor]; - [renderEncoder pushDebugGroup:@"ImGui demo"]; - - // Start the Dear ImGui frame - ImGui_ImplMetal_NewFrame(renderPassDescriptor); - ImGui_ImplGlfw_NewFrame(); - ImGui::NewFrame(); - - // 1. Show the big demo window (Most of the sample code is in ImGui::ShowDemoWindow()! You can browse its code to learn more about Dear ImGui!). - if (show_demo_window) - ImGui::ShowDemoWindow(&show_demo_window); - - // 2. Show a simple window that we create ourselves. We use a Begin/End pair to created a named window. - { - static float f = 0.0f; - static int counter = 0; - - ImGui::Begin("Hello, world!"); // Create a window called "Hello, world!" and append into it. - - ImGui::Text("This is some useful text."); // Display some text (you can use a format strings too) - ImGui::Checkbox("Demo Window", &show_demo_window); // Edit bools storing our window open/close state - ImGui::Checkbox("Another Window", &show_another_window); - - ImGui::SliderFloat("float", &f, 0.0f, 1.0f); // Edit 1 float using a slider from 0.0f to 1.0f - ImGui::ColorEdit3("clear color", (float*)&clear_color); // Edit 3 floats representing a color - - if (ImGui::Button("Button")) // Buttons return true when clicked (most widgets return true when edited/activated) - counter++; - ImGui::SameLine(); - ImGui::Text("counter = %d", counter); - - ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); - ImGui::End(); - } - - // 3. Show another simple window. - if (show_another_window) - { - ImGui::Begin("Another Window", &show_another_window); // Pass a pointer to our bool variable (the window will have a closing button that will clear the bool when clicked) - ImGui::Text("Hello from another window!"); - if (ImGui::Button("Close Me")) - show_another_window = false; - ImGui::End(); - } - - // Rendering - ImGui::Render(); - ImGui_ImplMetal_RenderDrawData(ImGui::GetDrawData(), commandBuffer, renderEncoder); - - [renderEncoder popDebugGroup]; - [renderEncoder endEncoding]; - - [commandBuffer presentDrawable:drawable]; - [commandBuffer commit]; - } - } - - // Cleanup - ImGui_ImplMetal_Shutdown(); - ImGui_ImplGlfw_Shutdown(); - ImGui::DestroyContext(); - - glfwDestroyWindow(window); - glfwTerminate(); - - return 0; -} diff --git a/cmake/imgui/examples/example_glfw_opengl2/build_win32.bat b/cmake/imgui/examples/example_glfw_opengl2/build_win32.bat deleted file mode 100644 index 538d9a52..00000000 --- a/cmake/imgui/examples/example_glfw_opengl2/build_win32.bat +++ /dev/null @@ -1,3 +0,0 @@ -@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. -mkdir Debug -cl /nologo /Zi /MD /I .. /I ..\.. /I ..\libs\glfw\include *.cpp ..\imgui_impl_opengl2.cpp ..\imgui_impl_glfw.cpp ..\..\imgui*.cpp /FeDebug/example_glfw_opengl2.exe /FoDebug/ /link /LIBPATH:..\libs\glfw\lib-vc2010-32 glfw3.lib opengl32.lib gdi32.lib shell32.lib diff --git a/cmake/imgui/examples/example_glfw_opengl2/example_glfw_opengl2.vcxproj b/cmake/imgui/examples/example_glfw_opengl2/example_glfw_opengl2.vcxproj deleted file mode 100644 index aac0e00c..00000000 --- a/cmake/imgui/examples/example_glfw_opengl2/example_glfw_opengl2.vcxproj +++ /dev/null @@ -1,180 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {9CDA7840-B7A5-496D-A527-E95571496D18} - example_glfw_opengl2 - 10.0 - - - - Application - true - MultiByte - v142 - - - Application - true - MultiByte - v142 - - - Application - false - true - MultiByte - v142 - - - Application - false - true - MultiByte - v142 - - - - - - - - - - - - - - - - - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - - Level4 - Disabled - ..\..;..;..\libs\glfw\include;%(AdditionalIncludeDirectories) - - - true - ..\libs\glfw\lib-vc2010-32;%(AdditionalLibraryDirectories) - opengl32.lib;glfw3.lib;%(AdditionalDependencies) - Console - msvcrt.lib - - - - - Level4 - Disabled - ..\..;..;..\libs\glfw\include;%(AdditionalIncludeDirectories) - - - true - ..\libs\glfw\lib-vc2010-64;%(AdditionalLibraryDirectories) - opengl32.lib;glfw3.lib;%(AdditionalDependencies) - Console - msvcrt.lib - - - - - Level4 - MaxSpeed - true - true - ..\..;..;..\libs\glfw\include;%(AdditionalIncludeDirectories) - false - - - true - true - true - ..\libs\glfw\lib-vc2010-32;%(AdditionalLibraryDirectories) - opengl32.lib;glfw3.lib;%(AdditionalDependencies) - Console - - - - - - - Level4 - MaxSpeed - true - true - ..\..;..;..\libs\glfw\include;%(AdditionalIncludeDirectories) - false - - - true - true - true - ..\libs\glfw\lib-vc2010-64;%(AdditionalLibraryDirectories) - opengl32.lib;glfw3.lib;%(AdditionalDependencies) - Console - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cmake/imgui/examples/example_glfw_opengl2/example_glfw_opengl2.vcxproj.filters b/cmake/imgui/examples/example_glfw_opengl2/example_glfw_opengl2.vcxproj.filters deleted file mode 100644 index b7a37e68..00000000 --- a/cmake/imgui/examples/example_glfw_opengl2/example_glfw_opengl2.vcxproj.filters +++ /dev/null @@ -1,58 +0,0 @@ - - - - - {c336cfe3-f0c4-464c-9ef0-a9e17a7ff222} - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - - - sources - - - imgui - - - imgui - - - imgui - - - sources - - - sources - - - imgui - - - - - imgui - - - imgui - - - imgui - - - sources - - - sources - - - - - - sources - - - \ No newline at end of file diff --git a/cmake/imgui/examples/example_glfw_opengl2/main.cpp b/cmake/imgui/examples/example_glfw_opengl2/main.cpp deleted file mode 100644 index a50b4637..00000000 --- a/cmake/imgui/examples/example_glfw_opengl2/main.cpp +++ /dev/null @@ -1,158 +0,0 @@ -// dear imgui: standalone example application for GLFW + OpenGL2, using legacy fixed pipeline -// If you are new to dear imgui, see examples/README.txt and documentation at the top of imgui.cpp. -// (GLFW is a cross-platform general purpose library for handling windows, inputs, OpenGL/Vulkan/Metal graphics context creation, etc.) - -// **DO NOT USE THIS CODE IF YOUR CODE/ENGINE IS USING MODERN OPENGL (SHADERS, VBO, VAO, etc.)** -// **Prefer using the code in the example_glfw_opengl2/ folder** -// See imgui_impl_glfw.cpp for details. - -#include "imgui.h" -#include "imgui_impl_glfw.h" -#include "imgui_impl_opengl2.h" -#include -#ifdef __APPLE__ -#define GL_SILENCE_DEPRECATION -#endif -#include - -// [Win32] Our example includes a copy of glfw3.lib pre-compiled with VS2010 to maximize ease of testing and compatibility with old VS compilers. -// To link with VS2010-era libraries, VS2015+ requires linking with legacy_stdio_definitions.lib, which we do using this pragma. -// Your own project should not be affected, as you are likely to link with a newer binary of GLFW that is adequate for your version of Visual Studio. -#if defined(_MSC_VER) && (_MSC_VER >= 1900) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) -#pragma comment(lib, "legacy_stdio_definitions") -#endif - -static void glfw_error_callback(int error, const char* description) -{ - fprintf(stderr, "Glfw Error %d: %s\n", error, description); -} - -int main(int, char**) -{ - // Setup window - glfwSetErrorCallback(glfw_error_callback); - if (!glfwInit()) - return 1; - GLFWwindow* window = glfwCreateWindow(1280, 720, "Dear ImGui GLFW+OpenGL2 example", NULL, NULL); - if (window == NULL) - return 1; - glfwMakeContextCurrent(window); - glfwSwapInterval(1); // Enable vsync - - // Setup Dear ImGui context - IMGUI_CHECKVERSION(); - ImGui::CreateContext(); - ImGuiIO& io = ImGui::GetIO(); (void)io; - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls - - // Setup Dear ImGui style - ImGui::StyleColorsDark(); - //ImGui::StyleColorsClassic(); - - // Setup Platform/Renderer bindings - ImGui_ImplGlfw_InitForOpenGL(window, true); - ImGui_ImplOpenGL2_Init(); - - // Load Fonts - // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. - // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. - // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). - // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. - // - Read 'docs/FONTS.txt' for more instructions and details. - // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! - //io.Fonts->AddFontDefault(); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Roboto-Medium.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Cousine-Regular.ttf", 15.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/DroidSans.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/ProggyTiny.ttf", 10.0f); - //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); - //IM_ASSERT(font != NULL); - - // Our state - bool show_demo_window = true; - bool show_another_window = false; - ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); - - // Main loop - while (!glfwWindowShouldClose(window)) - { - // Poll and handle events (inputs, window resize, etc.) - // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. - // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. - // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. - // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. - glfwPollEvents(); - - // Start the Dear ImGui frame - ImGui_ImplOpenGL2_NewFrame(); - ImGui_ImplGlfw_NewFrame(); - ImGui::NewFrame(); - - // 1. Show the big demo window (Most of the sample code is in ImGui::ShowDemoWindow()! You can browse its code to learn more about Dear ImGui!). - if (show_demo_window) - ImGui::ShowDemoWindow(&show_demo_window); - - // 2. Show a simple window that we create ourselves. We use a Begin/End pair to created a named window. - { - static float f = 0.0f; - static int counter = 0; - - ImGui::Begin("Hello, world!"); // Create a window called "Hello, world!" and append into it. - - ImGui::Text("This is some useful text."); // Display some text (you can use a format strings too) - ImGui::Checkbox("Demo Window", &show_demo_window); // Edit bools storing our window open/close state - ImGui::Checkbox("Another Window", &show_another_window); - - ImGui::SliderFloat("float", &f, 0.0f, 1.0f); // Edit 1 float using a slider from 0.0f to 1.0f - ImGui::ColorEdit3("clear color", (float*)&clear_color); // Edit 3 floats representing a color - - if (ImGui::Button("Button")) // Buttons return true when clicked (most widgets return true when edited/activated) - counter++; - ImGui::SameLine(); - ImGui::Text("counter = %d", counter); - - ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); - ImGui::End(); - } - - // 3. Show another simple window. - if (show_another_window) - { - ImGui::Begin("Another Window", &show_another_window); // Pass a pointer to our bool variable (the window will have a closing button that will clear the bool when clicked) - ImGui::Text("Hello from another window!"); - if (ImGui::Button("Close Me")) - show_another_window = false; - ImGui::End(); - } - - // Rendering - ImGui::Render(); - int display_w, display_h; - glfwGetFramebufferSize(window, &display_w, &display_h); - glViewport(0, 0, display_w, display_h); - glClearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); - glClear(GL_COLOR_BUFFER_BIT); - - // If you are using this code with non-legacy OpenGL header/contexts (which you should not, prefer using imgui_impl_opengl3.cpp!!), - // you may need to backup/reset/restore current shader using the commented lines below. - //GLint last_program; - //glGetIntegerv(GL_CURRENT_PROGRAM, &last_program); - //glUseProgram(0); - ImGui_ImplOpenGL2_RenderDrawData(ImGui::GetDrawData()); - //glUseProgram(last_program); - - glfwMakeContextCurrent(window); - glfwSwapBuffers(window); - } - - // Cleanup - ImGui_ImplOpenGL2_Shutdown(); - ImGui_ImplGlfw_Shutdown(); - ImGui::DestroyContext(); - - glfwDestroyWindow(window); - glfwTerminate(); - - return 0; -} diff --git a/cmake/imgui/examples/example_glfw_opengl3/build_win32.bat b/cmake/imgui/examples/example_glfw_opengl3/build_win32.bat deleted file mode 100644 index e5c15c53..00000000 --- a/cmake/imgui/examples/example_glfw_opengl3/build_win32.bat +++ /dev/null @@ -1,3 +0,0 @@ -@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. -mkdir Debug -cl /nologo /Zi /MD /I .. /I ..\.. /I ..\libs\glfw\include /I ..\libs\gl3w *.cpp ..\imgui_impl_glfw.cpp ..\imgui_impl_opengl3.cpp ..\..\imgui*.cpp ..\libs\gl3w\GL\gl3w.c /FeDebug/example_glfw_opengl3.exe /FoDebug/ /link /LIBPATH:..\libs\glfw\lib-vc2010-32 glfw3.lib opengl32.lib gdi32.lib shell32.lib diff --git a/cmake/imgui/examples/example_glfw_opengl3/example_glfw_opengl3.vcxproj b/cmake/imgui/examples/example_glfw_opengl3/example_glfw_opengl3.vcxproj deleted file mode 100644 index 642ddab7..00000000 --- a/cmake/imgui/examples/example_glfw_opengl3/example_glfw_opengl3.vcxproj +++ /dev/null @@ -1,183 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {4a1fb5ea-22f5-42a8-ab92-1d2df5d47fb9} - example_glfw_opengl3 - 10.0 - - - - Application - true - MultiByte - v142 - - - Application - true - MultiByte - v142 - - - Application - false - true - MultiByte - v142 - - - Application - false - true - MultiByte - v142 - - - - - - - - - - - - - - - - - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - - Level4 - Disabled - ..\..;..;..\libs\glfw\include;..\libs\gl3w;%(AdditionalIncludeDirectories) - - - true - ..\libs\glfw\lib-vc2010-32;%(AdditionalLibraryDirectories) - opengl32.lib;glfw3.lib;%(AdditionalDependencies) - Console - msvcrt.lib - - - - - Level4 - Disabled - ..\..;..;..\libs\glfw\include;..\libs\gl3w;%(AdditionalIncludeDirectories) - - - true - ..\libs\glfw\lib-vc2010-64;%(AdditionalLibraryDirectories) - opengl32.lib;glfw3.lib;%(AdditionalDependencies) - Console - msvcrt.lib - - - - - Level4 - MaxSpeed - true - true - ..\..;..;..\libs\glfw\include;..\libs\gl3w;%(AdditionalIncludeDirectories) - false - - - true - true - true - ..\libs\glfw\lib-vc2010-32;%(AdditionalLibraryDirectories) - opengl32.lib;glfw3.lib;%(AdditionalDependencies) - Console - - - - - - - Level4 - MaxSpeed - true - true - ..\..;..;..\libs\glfw\include;..\libs\gl3w;%(AdditionalIncludeDirectories) - false - - - true - true - true - ..\libs\glfw\lib-vc2010-64;%(AdditionalLibraryDirectories) - opengl32.lib;glfw3.lib;%(AdditionalDependencies) - Console - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cmake/imgui/examples/example_glfw_opengl3/example_glfw_opengl3.vcxproj.filters b/cmake/imgui/examples/example_glfw_opengl3/example_glfw_opengl3.vcxproj.filters deleted file mode 100644 index efb570ce..00000000 --- a/cmake/imgui/examples/example_glfw_opengl3/example_glfw_opengl3.vcxproj.filters +++ /dev/null @@ -1,70 +0,0 @@ - - - - - {20b90ce4-7fcb-4731-b9a0-075f875de82d} - - - {f18ab499-84e1-499f-8eff-9754361e0e52} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {42f99867-3108-43b8-99d0-fabefaf1f2e3} - - - - - sources - - - imgui - - - gl3w - - - imgui - - - imgui - - - sources - - - sources - - - imgui - - - - - imgui - - - imgui - - - gl3w - - - gl3w - - - imgui - - - sources - - - sources - - - - - - sources - - - \ No newline at end of file diff --git a/cmake/imgui/examples/example_glfw_opengl3/main.cpp b/cmake/imgui/examples/example_glfw_opengl3/main.cpp deleted file mode 100644 index 8df734bd..00000000 --- a/cmake/imgui/examples/example_glfw_opengl3/main.cpp +++ /dev/null @@ -1,210 +0,0 @@ -// dear imgui: standalone example application for GLFW + OpenGL 3, using programmable pipeline -// If you are new to dear imgui, see examples/README.txt and documentation at the top of imgui.cpp. -// (GLFW is a cross-platform general purpose library for handling windows, inputs, OpenGL/Vulkan/Metal graphics context creation, etc.) - -#include "imgui.h" -#include "imgui_impl_glfw.h" -#include "imgui_impl_opengl3.h" -#include - -// About Desktop OpenGL function loaders: -// Modern desktop OpenGL doesn't have a standard portable header file to load OpenGL function pointers. -// Helper libraries are often used for this purpose! Here we are supporting a few common ones (gl3w, glew, glad). -// You may use another loader/header of your choice (glext, glLoadGen, etc.), or chose to manually implement your own. -#if defined(IMGUI_IMPL_OPENGL_LOADER_GL3W) -#include // Initialize with gl3wInit() -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLEW) -#include // Initialize with glewInit() -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLAD) -#include // Initialize with gladLoadGL() -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING2) -#define GLFW_INCLUDE_NONE // GLFW including OpenGL headers causes ambiguity or multiple definition errors. -#include // Initialize with glbinding::Binding::initialize() -#include -using namespace gl; -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING3) -#define GLFW_INCLUDE_NONE // GLFW including OpenGL headers causes ambiguity or multiple definition errors. -#include // Initialize with glbinding::initialize() -#include -using namespace gl; -#else -#include IMGUI_IMPL_OPENGL_LOADER_CUSTOM -#endif - -// Include glfw3.h after our OpenGL definitions -#include - -// [Win32] Our example includes a copy of glfw3.lib pre-compiled with VS2010 to maximize ease of testing and compatibility with old VS compilers. -// To link with VS2010-era libraries, VS2015+ requires linking with legacy_stdio_definitions.lib, which we do using this pragma. -// Your own project should not be affected, as you are likely to link with a newer binary of GLFW that is adequate for your version of Visual Studio. -#if defined(_MSC_VER) && (_MSC_VER >= 1900) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) -#pragma comment(lib, "legacy_stdio_definitions") -#endif - -static void glfw_error_callback(int error, const char* description) -{ - fprintf(stderr, "Glfw Error %d: %s\n", error, description); -} - -int main(int, char**) -{ - // Setup window - glfwSetErrorCallback(glfw_error_callback); - if (!glfwInit()) - return 1; - - // Decide GL+GLSL versions -#if __APPLE__ - // GL 3.2 + GLSL 150 - const char* glsl_version = "#version 150"; - glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); - glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2); - glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); // 3.2+ only - glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // Required on Mac -#else - // GL 3.0 + GLSL 130 - const char* glsl_version = "#version 130"; - glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); - glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); - //glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); // 3.2+ only - //glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // 3.0+ only -#endif - - // Create window with graphics context - GLFWwindow* window = glfwCreateWindow(1280, 720, "Dear ImGui GLFW+OpenGL3 example", NULL, NULL); - if (window == NULL) - return 1; - glfwMakeContextCurrent(window); - glfwSwapInterval(1); // Enable vsync - - // Initialize OpenGL loader -#if defined(IMGUI_IMPL_OPENGL_LOADER_GL3W) - bool err = gl3wInit() != 0; -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLEW) - bool err = glewInit() != GLEW_OK; -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLAD) - bool err = gladLoadGL() == 0; -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING2) - bool err = false; - glbinding::Binding::initialize(); -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING3) - bool err = false; - glbinding::initialize([](const char* name) { return (glbinding::ProcAddress)glfwGetProcAddress(name); }); -#else - bool err = false; // If you use IMGUI_IMPL_OPENGL_LOADER_CUSTOM, your loader is likely to requires some form of initialization. -#endif - if (err) - { - fprintf(stderr, "Failed to initialize OpenGL loader!\n"); - return 1; - } - - // Setup Dear ImGui context - IMGUI_CHECKVERSION(); - ImGui::CreateContext(); - ImGuiIO& io = ImGui::GetIO(); (void)io; - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls - - // Setup Dear ImGui style - ImGui::StyleColorsDark(); - //ImGui::StyleColorsClassic(); - - // Setup Platform/Renderer bindings - ImGui_ImplGlfw_InitForOpenGL(window, true); - ImGui_ImplOpenGL3_Init(glsl_version); - - // Load Fonts - // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. - // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. - // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). - // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. - // - Read 'docs/FONTS.txt' for more instructions and details. - // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! - //io.Fonts->AddFontDefault(); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Roboto-Medium.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Cousine-Regular.ttf", 15.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/DroidSans.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/ProggyTiny.ttf", 10.0f); - //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); - //IM_ASSERT(font != NULL); - - // Our state - bool show_demo_window = true; - bool show_another_window = false; - ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); - - // Main loop - while (!glfwWindowShouldClose(window)) - { - // Poll and handle events (inputs, window resize, etc.) - // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. - // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. - // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. - // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. - glfwPollEvents(); - - // Start the Dear ImGui frame - ImGui_ImplOpenGL3_NewFrame(); - ImGui_ImplGlfw_NewFrame(); - ImGui::NewFrame(); - - // 1. Show the big demo window (Most of the sample code is in ImGui::ShowDemoWindow()! You can browse its code to learn more about Dear ImGui!). - if (show_demo_window) - ImGui::ShowDemoWindow(&show_demo_window); - - // 2. Show a simple window that we create ourselves. We use a Begin/End pair to created a named window. - { - static float f = 0.0f; - static int counter = 0; - - ImGui::Begin("Hello, world!"); // Create a window called "Hello, world!" and append into it. - - ImGui::Text("This is some useful text."); // Display some text (you can use a format strings too) - ImGui::Checkbox("Demo Window", &show_demo_window); // Edit bools storing our window open/close state - ImGui::Checkbox("Another Window", &show_another_window); - - ImGui::SliderFloat("float", &f, 0.0f, 1.0f); // Edit 1 float using a slider from 0.0f to 1.0f - ImGui::ColorEdit3("clear color", (float*)&clear_color); // Edit 3 floats representing a color - - if (ImGui::Button("Button")) // Buttons return true when clicked (most widgets return true when edited/activated) - counter++; - ImGui::SameLine(); - ImGui::Text("counter = %d", counter); - - ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); - ImGui::End(); - } - - // 3. Show another simple window. - if (show_another_window) - { - ImGui::Begin("Another Window", &show_another_window); // Pass a pointer to our bool variable (the window will have a closing button that will clear the bool when clicked) - ImGui::Text("Hello from another window!"); - if (ImGui::Button("Close Me")) - show_another_window = false; - ImGui::End(); - } - - // Rendering - ImGui::Render(); - int display_w, display_h; - glfwGetFramebufferSize(window, &display_w, &display_h); - glViewport(0, 0, display_w, display_h); - glClearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); - glClear(GL_COLOR_BUFFER_BIT); - ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); - - glfwSwapBuffers(window); - } - - // Cleanup - ImGui_ImplOpenGL3_Shutdown(); - ImGui_ImplGlfw_Shutdown(); - ImGui::DestroyContext(); - - glfwDestroyWindow(window); - glfwTerminate(); - - return 0; -} diff --git a/cmake/imgui/examples/example_glfw_vulkan/CMakeLists.txt b/cmake/imgui/examples/example_glfw_vulkan/CMakeLists.txt deleted file mode 100644 index 68155ec8..00000000 --- a/cmake/imgui/examples/example_glfw_vulkan/CMakeLists.txt +++ /dev/null @@ -1,41 +0,0 @@ -# Example usage: -# mkdir build -# cd build -# cmake -g "Visual Studio 14 2015" .. - -cmake_minimum_required(VERSION 2.8) -project(imgui_example_glfw_vulkan C CXX) - -if(NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE Debug CACHE STRING "" FORCE) -endif() - -set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DVK_PROTOTYPES") -set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DVK_PROTOTYPES") - -# GLFW -set(GLFW_DIR ../../../glfw) # Set this to point to an up-to-date GLFW repo -option(GLFW_BUILD_EXAMPLES "Build the GLFW example programs" OFF) -option(GLFW_BUILD_TESTS "Build the GLFW test programs" OFF) -option(GLFW_BUILD_DOCS "Build the GLFW documentation" OFF) -option(GLFW_INSTALL "Generate installation target" OFF) -option(GLFW_DOCUMENT_INTERNALS "Include internals in documentation" OFF) -add_subdirectory(${GLFW_DIR} binary_dir EXCLUDE_FROM_ALL) -include_directories(${GLFW_DIR}/include) - -# Dear ImGui -set(IMGUI_DIR ../../) -include_directories(${IMGUI_DIR} ..) - -# Libraries -find_library(VULKAN_LIBRARY - NAMES vulkan vulkan-1) -set(LIBRARIES "glfw;${VULKAN_LIBRARY}") - -# Use vulkan headers from glfw: -include_directories(${GLFW_DIR}/deps) - -file(GLOB sources *.cpp) - -add_executable(example_glfw_vulkan ${sources} ${IMGUI_DIR}/examples/imgui_impl_glfw.cpp ${IMGUI_DIR}/examples/imgui_impl_vulkan.cpp ${IMGUI_DIR}/imgui.cpp ${IMGUI_DIR}/imgui_draw.cpp ${IMGUI_DIR}/imgui_demo.cpp ${IMGUI_DIR}/imgui_widgets.cpp) -target_link_libraries(example_glfw_vulkan ${LIBRARIES}) diff --git a/cmake/imgui/examples/example_glfw_vulkan/build_win32.bat b/cmake/imgui/examples/example_glfw_vulkan/build_win32.bat deleted file mode 100644 index 0d991b9d..00000000 --- a/cmake/imgui/examples/example_glfw_vulkan/build_win32.bat +++ /dev/null @@ -1,7 +0,0 @@ -@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. - -mkdir Debug -cl /nologo /Zi /MD /I .. /I ..\.. /I ..\libs\glfw\include /I %VULKAN_SDK%\include *.cpp ..\imgui_impl_vulkan.cpp ..\imgui_impl_glfw.cpp ..\..\imgui*.cpp /FeDebug/example_glfw_vulkan.exe /FoDebug/ /link /LIBPATH:..\libs\glfw\lib-vc2010-32 /libpath:%VULKAN_SDK%\lib32 glfw3.lib opengl32.lib gdi32.lib shell32.lib vulkan-1.lib - -mkdir Release -cl /nologo /Zi /MD /Ox /Oi /I .. /I ..\.. /I ..\libs\glfw\include /I %VULKAN_SDK%\include *.cpp ..\imgui_impl_vulkan.cpp ..\imgui_impl_glfw.cpp ..\..\imgui*.cpp /FeRelease/example_glfw_vulkan.exe /FoRelease/ /link /LIBPATH:..\libs\glfw\lib-vc2010-32 /libpath:%VULKAN_SDK%\lib32 glfw3.lib opengl32.lib gdi32.lib shell32.lib vulkan-1.lib diff --git a/cmake/imgui/examples/example_glfw_vulkan/build_win64.bat b/cmake/imgui/examples/example_glfw_vulkan/build_win64.bat deleted file mode 100644 index ddedf597..00000000 --- a/cmake/imgui/examples/example_glfw_vulkan/build_win64.bat +++ /dev/null @@ -1,7 +0,0 @@ -@REM Build for Visual Studio compiler. Run your copy of amd64/vcvars32.bat to setup 64-bit command-line compiler. - -mkdir Debug -cl /nologo /Zi /MD /I .. /I ..\.. /I ..\libs\glfw\include /I %VULKAN_SDK%\include *.cpp ..\imgui_impl_vulkan.cpp ..\imgui_impl_glfw.cpp ..\..\imgui*.cpp /FeDebug/example_glfw_vulkan.exe /FoDebug/ /link /LIBPATH:..\libs\glfw\lib-vc2010-64 /libpath:%VULKAN_SDK%\lib glfw3.lib opengl32.lib gdi32.lib shell32.lib vulkan-1.lib - -mkdir Release -cl /nologo /Zi /MD /Ox /Oi /I .. /I ..\.. /I ..\libs\glfw\include /I %VULKAN_SDK%\include *.cpp ..\imgui_impl_vulkan.cpp ..\imgui_impl_glfw.cpp ..\..\imgui*.cpp /FeRelease/example_glfw_vulkan.exe /FoRelease/ /link /LIBPATH:..\libs\glfw\lib-vc2010-64 /libpath:%VULKAN_SDK%\lib glfw3.lib opengl32.lib gdi32.lib shell32.lib vulkan-1.lib diff --git a/cmake/imgui/examples/example_glfw_vulkan/example_glfw_vulkan.vcxproj b/cmake/imgui/examples/example_glfw_vulkan/example_glfw_vulkan.vcxproj deleted file mode 100644 index 9e2c9b38..00000000 --- a/cmake/imgui/examples/example_glfw_vulkan/example_glfw_vulkan.vcxproj +++ /dev/null @@ -1,180 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {57E2DF5A-6FC8-45BB-99DD-91A18C646E80} - example_glfw_vulkan - 8.1 - - - - Application - true - MultiByte - v110 - - - Application - true - MultiByte - v110 - - - Application - false - true - MultiByte - v110 - - - Application - false - true - MultiByte - v110 - - - - - - - - - - - - - - - - - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - - Level4 - Disabled - ..\..;..;%VULKAN_SDK%\include;..\libs\glfw\include;%(AdditionalIncludeDirectories) - - - true - %VULKAN_SDK%\lib32;..\libs\glfw\lib-vc2010-32;%(AdditionalLibraryDirectories) - vulkan-1.lib;glfw3.lib;%(AdditionalDependencies) - Console - msvcrt.lib - - - - - Level4 - Disabled - ..\..;..;%VULKAN_SDK%\include;..\libs\glfw\include;%(AdditionalIncludeDirectories) - - - true - %VULKAN_SDK%\lib;..\libs\glfw\lib-vc2010-64;%(AdditionalLibraryDirectories) - vulkan-1.lib;glfw3.lib;%(AdditionalDependencies) - Console - msvcrt.lib - - - - - Level4 - MaxSpeed - true - true - ..\..;..;%VULKAN_SDK%\include;..\libs\glfw\include;%(AdditionalIncludeDirectories) - false - - - true - true - true - %VULKAN_SDK%\lib32;..\libs\glfw\lib-vc2010-32;%(AdditionalLibraryDirectories) - vulkan-1.lib;glfw3.lib;%(AdditionalDependencies) - Console - - - - - - - Level4 - MaxSpeed - true - true - ..\..;..;%VULKAN_SDK%\include;..\libs\glfw\include;%(AdditionalIncludeDirectories) - false - - - true - true - true - %VULKAN_SDK%\lib;..\libs\glfw\lib-vc2010-64;%(AdditionalLibraryDirectories) - vulkan-1.lib;glfw3.lib;%(AdditionalDependencies) - Console - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cmake/imgui/examples/example_glfw_vulkan/example_glfw_vulkan.vcxproj.filters b/cmake/imgui/examples/example_glfw_vulkan/example_glfw_vulkan.vcxproj.filters deleted file mode 100644 index 98a445d4..00000000 --- a/cmake/imgui/examples/example_glfw_vulkan/example_glfw_vulkan.vcxproj.filters +++ /dev/null @@ -1,58 +0,0 @@ - - - - - {20b90ce4-7fcb-4731-b9a0-075f875de82d} - - - {f18ab499-84e1-499f-8eff-9754361e0e52} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - - - imgui - - - imgui - - - imgui - - - sources - - - sources - - - sources - - - imgui - - - - - imgui - - - imgui - - - imgui - - - sources - - - sources - - - - - - sources - - - \ No newline at end of file diff --git a/cmake/imgui/examples/example_glfw_vulkan/gen_spv.sh b/cmake/imgui/examples/example_glfw_vulkan/gen_spv.sh deleted file mode 100644 index e0d7f3b0..00000000 --- a/cmake/imgui/examples/example_glfw_vulkan/gen_spv.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -glslangValidator -V -x -o glsl_shader.frag.u32 glsl_shader.frag -glslangValidator -V -x -o glsl_shader.vert.u32 glsl_shader.vert diff --git a/cmake/imgui/examples/example_glfw_vulkan/glsl_shader.frag b/cmake/imgui/examples/example_glfw_vulkan/glsl_shader.frag deleted file mode 100644 index ce7e6f72..00000000 --- a/cmake/imgui/examples/example_glfw_vulkan/glsl_shader.frag +++ /dev/null @@ -1,14 +0,0 @@ -#version 450 core -layout(location = 0) out vec4 fColor; - -layout(set=0, binding=0) uniform sampler2D sTexture; - -layout(location = 0) in struct { - vec4 Color; - vec2 UV; -} In; - -void main() -{ - fColor = In.Color * texture(sTexture, In.UV.st); -} diff --git a/cmake/imgui/examples/example_glfw_vulkan/glsl_shader.vert b/cmake/imgui/examples/example_glfw_vulkan/glsl_shader.vert deleted file mode 100644 index 9425365a..00000000 --- a/cmake/imgui/examples/example_glfw_vulkan/glsl_shader.vert +++ /dev/null @@ -1,25 +0,0 @@ -#version 450 core -layout(location = 0) in vec2 aPos; -layout(location = 1) in vec2 aUV; -layout(location = 2) in vec4 aColor; - -layout(push_constant) uniform uPushConstant { - vec2 uScale; - vec2 uTranslate; -} pc; - -out gl_PerVertex { - vec4 gl_Position; -}; - -layout(location = 0) out struct { - vec4 Color; - vec2 UV; -} Out; - -void main() -{ - Out.Color = aColor; - Out.UV = aUV; - gl_Position = vec4(aPos * pc.uScale + pc.uTranslate, 0, 1); -} diff --git a/cmake/imgui/examples/example_glfw_vulkan/main.cpp b/cmake/imgui/examples/example_glfw_vulkan/main.cpp deleted file mode 100644 index 910d4738..00000000 --- a/cmake/imgui/examples/example_glfw_vulkan/main.cpp +++ /dev/null @@ -1,530 +0,0 @@ -// dear imgui: standalone example application for Glfw + Vulkan -// If you are new to dear imgui, see examples/README.txt and documentation at the top of imgui.cpp. - -// Important note to the reader who wish to integrate imgui_impl_vulkan.cpp/.h in their own engine/app. -// - Common ImGui_ImplVulkan_XXX functions and structures are used to interface with imgui_impl_vulkan.cpp/.h. -// You will use those if you want to use this rendering back-end in your engine/app. -// - Helper ImGui_ImplVulkanH_XXX functions and structures are only used by this example (main.cpp) and by -// the back-end itself (imgui_impl_vulkan.cpp), but should PROBABLY NOT be used by your own engine/app code. -// Read comments in imgui_impl_vulkan.h. - -#include "imgui.h" -#include "imgui_impl_glfw.h" -#include "imgui_impl_vulkan.h" -#include // printf, fprintf -#include // abort -#define GLFW_INCLUDE_NONE -#define GLFW_INCLUDE_VULKAN -#include -#include - -// [Win32] Our example includes a copy of glfw3.lib pre-compiled with VS2010 to maximize ease of testing and compatibility with old VS compilers. -// To link with VS2010-era libraries, VS2015+ requires linking with legacy_stdio_definitions.lib, which we do using this pragma. -// Your own project should not be affected, as you are likely to link with a newer binary of GLFW that is adequate for your version of Visual Studio. -#if defined(_MSC_VER) && (_MSC_VER >= 1900) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) -#pragma comment(lib, "legacy_stdio_definitions") -#endif - -//#define IMGUI_UNLIMITED_FRAME_RATE -#ifdef _DEBUG -#define IMGUI_VULKAN_DEBUG_REPORT -#endif - -static VkAllocationCallbacks* g_Allocator = NULL; -static VkInstance g_Instance = VK_NULL_HANDLE; -static VkPhysicalDevice g_PhysicalDevice = VK_NULL_HANDLE; -static VkDevice g_Device = VK_NULL_HANDLE; -static uint32_t g_QueueFamily = (uint32_t)-1; -static VkQueue g_Queue = VK_NULL_HANDLE; -static VkDebugReportCallbackEXT g_DebugReport = VK_NULL_HANDLE; -static VkPipelineCache g_PipelineCache = VK_NULL_HANDLE; -static VkDescriptorPool g_DescriptorPool = VK_NULL_HANDLE; - -static ImGui_ImplVulkanH_Window g_MainWindowData; -static int g_MinImageCount = 2; -static bool g_SwapChainRebuild = false; -static int g_SwapChainResizeWidth = 0; -static int g_SwapChainResizeHeight = 0; - -static void check_vk_result(VkResult err) -{ - if (err == 0) return; - printf("VkResult %d\n", err); - if (err < 0) - abort(); -} - -#ifdef IMGUI_VULKAN_DEBUG_REPORT -static VKAPI_ATTR VkBool32 VKAPI_CALL debug_report(VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char* pLayerPrefix, const char* pMessage, void* pUserData) -{ - (void)flags; (void)object; (void)location; (void)messageCode; (void)pUserData; (void)pLayerPrefix; // Unused arguments - fprintf(stderr, "[vulkan] ObjectType: %i\nMessage: %s\n\n", objectType, pMessage); - return VK_FALSE; -} -#endif // IMGUI_VULKAN_DEBUG_REPORT - -static void SetupVulkan(const char** extensions, uint32_t extensions_count) -{ - VkResult err; - - // Create Vulkan Instance - { - VkInstanceCreateInfo create_info = {}; - create_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; - create_info.enabledExtensionCount = extensions_count; - create_info.ppEnabledExtensionNames = extensions; - -#ifdef IMGUI_VULKAN_DEBUG_REPORT - // Enabling multiple validation layers grouped as LunarG standard validation - const char* layers[] = { "VK_LAYER_LUNARG_standard_validation" }; - create_info.enabledLayerCount = 1; - create_info.ppEnabledLayerNames = layers; - - // Enable debug report extension (we need additional storage, so we duplicate the user array to add our new extension to it) - const char** extensions_ext = (const char**)malloc(sizeof(const char*) * (extensions_count + 1)); - memcpy(extensions_ext, extensions, extensions_count * sizeof(const char*)); - extensions_ext[extensions_count] = "VK_EXT_debug_report"; - create_info.enabledExtensionCount = extensions_count + 1; - create_info.ppEnabledExtensionNames = extensions_ext; - - // Create Vulkan Instance - err = vkCreateInstance(&create_info, g_Allocator, &g_Instance); - check_vk_result(err); - free(extensions_ext); - - // Get the function pointer (required for any extensions) - auto vkCreateDebugReportCallbackEXT = (PFN_vkCreateDebugReportCallbackEXT)vkGetInstanceProcAddr(g_Instance, "vkCreateDebugReportCallbackEXT"); - IM_ASSERT(vkCreateDebugReportCallbackEXT != NULL); - - // Setup the debug report callback - VkDebugReportCallbackCreateInfoEXT debug_report_ci = {}; - debug_report_ci.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT; - debug_report_ci.flags = VK_DEBUG_REPORT_ERROR_BIT_EXT | VK_DEBUG_REPORT_WARNING_BIT_EXT | VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT; - debug_report_ci.pfnCallback = debug_report; - debug_report_ci.pUserData = NULL; - err = vkCreateDebugReportCallbackEXT(g_Instance, &debug_report_ci, g_Allocator, &g_DebugReport); - check_vk_result(err); -#else - // Create Vulkan Instance without any debug feature - err = vkCreateInstance(&create_info, g_Allocator, &g_Instance); - check_vk_result(err); - IM_UNUSED(g_DebugReport); -#endif - } - - // Select GPU - { - uint32_t gpu_count; - err = vkEnumeratePhysicalDevices(g_Instance, &gpu_count, NULL); - check_vk_result(err); - IM_ASSERT(gpu_count > 0); - - VkPhysicalDevice* gpus = (VkPhysicalDevice*)malloc(sizeof(VkPhysicalDevice) * gpu_count); - err = vkEnumeratePhysicalDevices(g_Instance, &gpu_count, gpus); - check_vk_result(err); - - // If a number >1 of GPUs got reported, you should find the best fit GPU for your purpose - // e.g. VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU if available, or with the greatest memory available, etc. - // for sake of simplicity we'll just take the first one, assuming it has a graphics queue family. - g_PhysicalDevice = gpus[0]; - free(gpus); - } - - // Select graphics queue family - { - uint32_t count; - vkGetPhysicalDeviceQueueFamilyProperties(g_PhysicalDevice, &count, NULL); - VkQueueFamilyProperties* queues = (VkQueueFamilyProperties*)malloc(sizeof(VkQueueFamilyProperties) * count); - vkGetPhysicalDeviceQueueFamilyProperties(g_PhysicalDevice, &count, queues); - for (uint32_t i = 0; i < count; i++) - if (queues[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) - { - g_QueueFamily = i; - break; - } - free(queues); - IM_ASSERT(g_QueueFamily != (uint32_t)-1); - } - - // Create Logical Device (with 1 queue) - { - int device_extension_count = 1; - const char* device_extensions[] = { "VK_KHR_swapchain" }; - const float queue_priority[] = { 1.0f }; - VkDeviceQueueCreateInfo queue_info[1] = {}; - queue_info[0].sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; - queue_info[0].queueFamilyIndex = g_QueueFamily; - queue_info[0].queueCount = 1; - queue_info[0].pQueuePriorities = queue_priority; - VkDeviceCreateInfo create_info = {}; - create_info.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; - create_info.queueCreateInfoCount = sizeof(queue_info) / sizeof(queue_info[0]); - create_info.pQueueCreateInfos = queue_info; - create_info.enabledExtensionCount = device_extension_count; - create_info.ppEnabledExtensionNames = device_extensions; - err = vkCreateDevice(g_PhysicalDevice, &create_info, g_Allocator, &g_Device); - check_vk_result(err); - vkGetDeviceQueue(g_Device, g_QueueFamily, 0, &g_Queue); - } - - // Create Descriptor Pool - { - VkDescriptorPoolSize pool_sizes[] = - { - { VK_DESCRIPTOR_TYPE_SAMPLER, 1000 }, - { VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1000 }, - { VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, 1000 }, - { VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1000 }, - { VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, 1000 }, - { VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, 1000 }, - { VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1000 }, - { VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1000 }, - { VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, 1000 }, - { VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, 1000 }, - { VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, 1000 } - }; - VkDescriptorPoolCreateInfo pool_info = {}; - pool_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO; - pool_info.flags = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT; - pool_info.maxSets = 1000 * IM_ARRAYSIZE(pool_sizes); - pool_info.poolSizeCount = (uint32_t)IM_ARRAYSIZE(pool_sizes); - pool_info.pPoolSizes = pool_sizes; - err = vkCreateDescriptorPool(g_Device, &pool_info, g_Allocator, &g_DescriptorPool); - check_vk_result(err); - } -} - -// All the ImGui_ImplVulkanH_XXX structures/functions are optional helpers used by the demo. -// Your real engine/app may not use them. -static void SetupVulkanWindow(ImGui_ImplVulkanH_Window* wd, VkSurfaceKHR surface, int width, int height) -{ - wd->Surface = surface; - - // Check for WSI support - VkBool32 res; - vkGetPhysicalDeviceSurfaceSupportKHR(g_PhysicalDevice, g_QueueFamily, wd->Surface, &res); - if (res != VK_TRUE) - { - fprintf(stderr, "Error no WSI support on physical device 0\n"); - exit(-1); - } - - // Select Surface Format - const VkFormat requestSurfaceImageFormat[] = { VK_FORMAT_B8G8R8A8_UNORM, VK_FORMAT_R8G8B8A8_UNORM, VK_FORMAT_B8G8R8_UNORM, VK_FORMAT_R8G8B8_UNORM }; - const VkColorSpaceKHR requestSurfaceColorSpace = VK_COLORSPACE_SRGB_NONLINEAR_KHR; - wd->SurfaceFormat = ImGui_ImplVulkanH_SelectSurfaceFormat(g_PhysicalDevice, wd->Surface, requestSurfaceImageFormat, (size_t)IM_ARRAYSIZE(requestSurfaceImageFormat), requestSurfaceColorSpace); - - // Select Present Mode -#ifdef IMGUI_UNLIMITED_FRAME_RATE - VkPresentModeKHR present_modes[] = { VK_PRESENT_MODE_MAILBOX_KHR, VK_PRESENT_MODE_IMMEDIATE_KHR, VK_PRESENT_MODE_FIFO_KHR }; -#else - VkPresentModeKHR present_modes[] = { VK_PRESENT_MODE_FIFO_KHR }; -#endif - wd->PresentMode = ImGui_ImplVulkanH_SelectPresentMode(g_PhysicalDevice, wd->Surface, &present_modes[0], IM_ARRAYSIZE(present_modes)); - //printf("[vulkan] Selected PresentMode = %d\n", wd->PresentMode); - - // Create SwapChain, RenderPass, Framebuffer, etc. - IM_ASSERT(g_MinImageCount >= 2); - ImGui_ImplVulkanH_CreateWindow(g_Instance, g_PhysicalDevice, g_Device, wd, g_QueueFamily, g_Allocator, width, height, g_MinImageCount); -} - -static void CleanupVulkan() -{ - vkDestroyDescriptorPool(g_Device, g_DescriptorPool, g_Allocator); - -#ifdef IMGUI_VULKAN_DEBUG_REPORT - // Remove the debug report callback - auto vkDestroyDebugReportCallbackEXT = (PFN_vkDestroyDebugReportCallbackEXT)vkGetInstanceProcAddr(g_Instance, "vkDestroyDebugReportCallbackEXT"); - vkDestroyDebugReportCallbackEXT(g_Instance, g_DebugReport, g_Allocator); -#endif // IMGUI_VULKAN_DEBUG_REPORT - - vkDestroyDevice(g_Device, g_Allocator); - vkDestroyInstance(g_Instance, g_Allocator); -} - -static void CleanupVulkanWindow() -{ - ImGui_ImplVulkanH_DestroyWindow(g_Instance, g_Device, &g_MainWindowData, g_Allocator); -} - -static void FrameRender(ImGui_ImplVulkanH_Window* wd) -{ - VkResult err; - - VkSemaphore image_acquired_semaphore = wd->FrameSemaphores[wd->SemaphoreIndex].ImageAcquiredSemaphore; - VkSemaphore render_complete_semaphore = wd->FrameSemaphores[wd->SemaphoreIndex].RenderCompleteSemaphore; - err = vkAcquireNextImageKHR(g_Device, wd->Swapchain, UINT64_MAX, image_acquired_semaphore, VK_NULL_HANDLE, &wd->FrameIndex); - check_vk_result(err); - - ImGui_ImplVulkanH_Frame* fd = &wd->Frames[wd->FrameIndex]; - { - err = vkWaitForFences(g_Device, 1, &fd->Fence, VK_TRUE, UINT64_MAX); // wait indefinitely instead of periodically checking - check_vk_result(err); - - err = vkResetFences(g_Device, 1, &fd->Fence); - check_vk_result(err); - } - { - err = vkResetCommandPool(g_Device, fd->CommandPool, 0); - check_vk_result(err); - VkCommandBufferBeginInfo info = {}; - info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; - info.flags |= VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT; - err = vkBeginCommandBuffer(fd->CommandBuffer, &info); - check_vk_result(err); - } - { - VkRenderPassBeginInfo info = {}; - info.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; - info.renderPass = wd->RenderPass; - info.framebuffer = fd->Framebuffer; - info.renderArea.extent.width = wd->Width; - info.renderArea.extent.height = wd->Height; - info.clearValueCount = 1; - info.pClearValues = &wd->ClearValue; - vkCmdBeginRenderPass(fd->CommandBuffer, &info, VK_SUBPASS_CONTENTS_INLINE); - } - - // Record Imgui Draw Data and draw funcs into command buffer - ImGui_ImplVulkan_RenderDrawData(ImGui::GetDrawData(), fd->CommandBuffer); - - // Submit command buffer - vkCmdEndRenderPass(fd->CommandBuffer); - { - VkPipelineStageFlags wait_stage = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; - VkSubmitInfo info = {}; - info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; - info.waitSemaphoreCount = 1; - info.pWaitSemaphores = &image_acquired_semaphore; - info.pWaitDstStageMask = &wait_stage; - info.commandBufferCount = 1; - info.pCommandBuffers = &fd->CommandBuffer; - info.signalSemaphoreCount = 1; - info.pSignalSemaphores = &render_complete_semaphore; - - err = vkEndCommandBuffer(fd->CommandBuffer); - check_vk_result(err); - err = vkQueueSubmit(g_Queue, 1, &info, fd->Fence); - check_vk_result(err); - } -} - -static void FramePresent(ImGui_ImplVulkanH_Window* wd) -{ - VkSemaphore render_complete_semaphore = wd->FrameSemaphores[wd->SemaphoreIndex].RenderCompleteSemaphore; - VkPresentInfoKHR info = {}; - info.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR; - info.waitSemaphoreCount = 1; - info.pWaitSemaphores = &render_complete_semaphore; - info.swapchainCount = 1; - info.pSwapchains = &wd->Swapchain; - info.pImageIndices = &wd->FrameIndex; - VkResult err = vkQueuePresentKHR(g_Queue, &info); - check_vk_result(err); - wd->SemaphoreIndex = (wd->SemaphoreIndex + 1) % wd->ImageCount; // Now we can use the next set of semaphores -} - -static void glfw_error_callback(int error, const char* description) -{ - fprintf(stderr, "Glfw Error %d: %s\n", error, description); -} - -static void glfw_resize_callback(GLFWwindow*, int w, int h) -{ - g_SwapChainRebuild = true; - g_SwapChainResizeWidth = w; - g_SwapChainResizeHeight = h; -} - -int main(int, char**) -{ - // Setup GLFW window - glfwSetErrorCallback(glfw_error_callback); - if (!glfwInit()) - return 1; - - glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API); - GLFWwindow* window = glfwCreateWindow(1280, 720, "Dear ImGui GLFW+Vulkan example", NULL, NULL); - - // Setup Vulkan - if (!glfwVulkanSupported()) - { - printf("GLFW: Vulkan Not Supported\n"); - return 1; - } - uint32_t extensions_count = 0; - const char** extensions = glfwGetRequiredInstanceExtensions(&extensions_count); - SetupVulkan(extensions, extensions_count); - - // Create Window Surface - VkSurfaceKHR surface; - VkResult err = glfwCreateWindowSurface(g_Instance, window, g_Allocator, &surface); - check_vk_result(err); - - // Create Framebuffers - int w, h; - glfwGetFramebufferSize(window, &w, &h); - glfwSetFramebufferSizeCallback(window, glfw_resize_callback); - ImGui_ImplVulkanH_Window* wd = &g_MainWindowData; - SetupVulkanWindow(wd, surface, w, h); - - // Setup Dear ImGui context - IMGUI_CHECKVERSION(); - ImGui::CreateContext(); - ImGuiIO& io = ImGui::GetIO(); (void)io; - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls - - // Setup Dear ImGui style - ImGui::StyleColorsDark(); - //ImGui::StyleColorsClassic(); - - // Setup Platform/Renderer bindings - ImGui_ImplGlfw_InitForVulkan(window, true); - ImGui_ImplVulkan_InitInfo init_info = {}; - init_info.Instance = g_Instance; - init_info.PhysicalDevice = g_PhysicalDevice; - init_info.Device = g_Device; - init_info.QueueFamily = g_QueueFamily; - init_info.Queue = g_Queue; - init_info.PipelineCache = g_PipelineCache; - init_info.DescriptorPool = g_DescriptorPool; - init_info.Allocator = g_Allocator; - init_info.MinImageCount = g_MinImageCount; - init_info.ImageCount = wd->ImageCount; - init_info.CheckVkResultFn = check_vk_result; - ImGui_ImplVulkan_Init(&init_info, wd->RenderPass); - - // Load Fonts - // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. - // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. - // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). - // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. - // - Read 'docs/FONTS.txt' for more instructions and details. - // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! - //io.Fonts->AddFontDefault(); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Roboto-Medium.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Cousine-Regular.ttf", 15.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/DroidSans.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/ProggyTiny.ttf", 10.0f); - //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); - //IM_ASSERT(font != NULL); - - // Upload Fonts - { - // Use any command queue - VkCommandPool command_pool = wd->Frames[wd->FrameIndex].CommandPool; - VkCommandBuffer command_buffer = wd->Frames[wd->FrameIndex].CommandBuffer; - - err = vkResetCommandPool(g_Device, command_pool, 0); - check_vk_result(err); - VkCommandBufferBeginInfo begin_info = {}; - begin_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; - begin_info.flags |= VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT; - err = vkBeginCommandBuffer(command_buffer, &begin_info); - check_vk_result(err); - - ImGui_ImplVulkan_CreateFontsTexture(command_buffer); - - VkSubmitInfo end_info = {}; - end_info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; - end_info.commandBufferCount = 1; - end_info.pCommandBuffers = &command_buffer; - err = vkEndCommandBuffer(command_buffer); - check_vk_result(err); - err = vkQueueSubmit(g_Queue, 1, &end_info, VK_NULL_HANDLE); - check_vk_result(err); - - err = vkDeviceWaitIdle(g_Device); - check_vk_result(err); - ImGui_ImplVulkan_DestroyFontUploadObjects(); - } - - // Our state - bool show_demo_window = true; - bool show_another_window = false; - ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); - - // Main loop - while (!glfwWindowShouldClose(window)) - { - // Poll and handle events (inputs, window resize, etc.) - // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. - // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. - // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. - // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. - glfwPollEvents(); - - if (g_SwapChainRebuild) - { - g_SwapChainRebuild = false; - ImGui_ImplVulkan_SetMinImageCount(g_MinImageCount); - ImGui_ImplVulkanH_CreateWindow(g_Instance, g_PhysicalDevice, g_Device, &g_MainWindowData, g_QueueFamily, g_Allocator, g_SwapChainResizeWidth, g_SwapChainResizeHeight, g_MinImageCount); - g_MainWindowData.FrameIndex = 0; - } - - // Start the Dear ImGui frame - ImGui_ImplVulkan_NewFrame(); - ImGui_ImplGlfw_NewFrame(); - ImGui::NewFrame(); - - // 1. Show the big demo window (Most of the sample code is in ImGui::ShowDemoWindow()! You can browse its code to learn more about Dear ImGui!). - if (show_demo_window) - ImGui::ShowDemoWindow(&show_demo_window); - - // 2. Show a simple window that we create ourselves. We use a Begin/End pair to created a named window. - { - static float f = 0.0f; - static int counter = 0; - - ImGui::Begin("Hello, world!"); // Create a window called "Hello, world!" and append into it. - - ImGui::Text("This is some useful text."); // Display some text (you can use a format strings too) - ImGui::Checkbox("Demo Window", &show_demo_window); // Edit bools storing our window open/close state - ImGui::Checkbox("Another Window", &show_another_window); - - ImGui::SliderFloat("float", &f, 0.0f, 1.0f); // Edit 1 float using a slider from 0.0f to 1.0f - ImGui::ColorEdit3("clear color", (float*)&clear_color); // Edit 3 floats representing a color - - if (ImGui::Button("Button")) // Buttons return true when clicked (most widgets return true when edited/activated) - counter++; - ImGui::SameLine(); - ImGui::Text("counter = %d", counter); - - ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); - ImGui::End(); - } - - // 3. Show another simple window. - if (show_another_window) - { - ImGui::Begin("Another Window", &show_another_window); // Pass a pointer to our bool variable (the window will have a closing button that will clear the bool when clicked) - ImGui::Text("Hello from another window!"); - if (ImGui::Button("Close Me")) - show_another_window = false; - ImGui::End(); - } - - // Rendering - ImGui::Render(); - memcpy(&wd->ClearValue.color.float32[0], &clear_color, 4 * sizeof(float)); - FrameRender(wd); - - FramePresent(wd); - } - - // Cleanup - err = vkDeviceWaitIdle(g_Device); - check_vk_result(err); - ImGui_ImplVulkan_Shutdown(); - ImGui_ImplGlfw_Shutdown(); - ImGui::DestroyContext(); - - CleanupVulkanWindow(); - CleanupVulkan(); - - glfwDestroyWindow(window); - glfwTerminate(); - - return 0; -} diff --git a/cmake/imgui/examples/example_glut_opengl2/example_glut_opengl2.vcxproj b/cmake/imgui/examples/example_glut_opengl2/example_glut_opengl2.vcxproj deleted file mode 100644 index 9a239516..00000000 --- a/cmake/imgui/examples/example_glut_opengl2/example_glut_opengl2.vcxproj +++ /dev/null @@ -1,180 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {F90D0333-5FB1-440D-918D-DD39A1B5187E} - example_glut_opengl2 - 8.1 - - - - Application - true - MultiByte - v110 - - - Application - true - MultiByte - v110 - - - Application - false - true - MultiByte - v110 - - - Application - false - true - MultiByte - v110 - - - - - - - - - - - - - - - - - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - - Level4 - Disabled - $(GLUT_INCLUDE_DIR);..\..;%(AdditionalIncludeDirectories) - - - true - $(GLUT_ROOT_PATH)/lib;%(AdditionalLibraryDirectories) - opengl32.lib;freeglut.lib;%(AdditionalDependencies) - Console - msvcrt.lib - - - - - Level4 - Disabled - $(GLUT_INCLUDE_DIR);..\..;%(AdditionalIncludeDirectories) - - - true - $(GLUT_ROOT_PATH)/lib/x64;%(AdditionalLibraryDirectories) - opengl32.lib;freeglut.lib;%(AdditionalDependencies) - Console - msvcrt.lib - - - - - Level4 - MaxSpeed - true - true - $(GLUT_INCLUDE_DIR);..\..;%(AdditionalIncludeDirectories) - false - - - true - true - true - $(GLUT_ROOT_PATH)/lib;%(AdditionalLibraryDirectories) - opengl32.lib;freeglut.lib;%(AdditionalDependencies) - Console - - - - - - - Level4 - MaxSpeed - true - true - $(GLUT_INCLUDE_DIR);..\..;%(AdditionalIncludeDirectories) - false - - - true - true - true - $(GLUT_ROOT_PATH)/lib/x64;%(AdditionalLibraryDirectories) - opengl32.lib;freeglut.lib;%(AdditionalDependencies) - Console - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cmake/imgui/examples/example_glut_opengl2/example_glut_opengl2.vcxproj.filters b/cmake/imgui/examples/example_glut_opengl2/example_glut_opengl2.vcxproj.filters deleted file mode 100644 index 290d43d7..00000000 --- a/cmake/imgui/examples/example_glut_opengl2/example_glut_opengl2.vcxproj.filters +++ /dev/null @@ -1,58 +0,0 @@ - - - - - {c336cfe3-f0c4-464c-9ef0-a9e17a7ff222} - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - - - sources - - - imgui - - - imgui - - - imgui - - - sources - - - sources - - - imgui - - - - - imgui - - - imgui - - - imgui - - - sources - - - sources - - - - - - sources - - - diff --git a/cmake/imgui/examples/example_glut_opengl2/main.cpp b/cmake/imgui/examples/example_glut_opengl2/main.cpp deleted file mode 100644 index d36c1f84..00000000 --- a/cmake/imgui/examples/example_glut_opengl2/main.cpp +++ /dev/null @@ -1,146 +0,0 @@ -// dear imgui: standalone example application for GLUT/FreeGLUT + OpenGL2, using legacy fixed pipeline -// If you are new to dear imgui, see examples/README.txt and documentation at the top of imgui.cpp. - -// !!! GLUT/FreeGLUT IS OBSOLETE SOFTWARE. Using GLUT is not recommended unless you really miss the 90's. !!! -// !!! If someone or something is teaching you GLUT in 2020, you are being abused. Please show some resistance. !!! -// !!! Nowadays, prefer using GLFW or SDL instead! - -#include "imgui.h" -#include "imgui_impl_glut.h" -#include "imgui_impl_opengl2.h" -#ifdef __APPLE__ - #include -#else - #include -#endif - -#ifdef _MSC_VER -#pragma warning (disable: 4505) // unreferenced local function has been removed -#endif - -// Our state -static bool show_demo_window = true; -static bool show_another_window = false; -static ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); - -void my_display_code() -{ - // 1. Show the big demo window (Most of the sample code is in ImGui::ShowDemoWindow()! You can browse its code to learn more about Dear ImGui!). - if (show_demo_window) - ImGui::ShowDemoWindow(&show_demo_window); - - // 2. Show a simple window that we create ourselves. We use a Begin/End pair to created a named window. - { - static float f = 0.0f; - static int counter = 0; - - ImGui::Begin("Hello, world!"); // Create a window called "Hello, world!" and append into it. - - ImGui::Text("This is some useful text."); // Display some text (you can use a format strings too) - ImGui::Checkbox("Demo Window", &show_demo_window); // Edit bools storing our window open/close state - ImGui::Checkbox("Another Window", &show_another_window); - - ImGui::SliderFloat("float", &f, 0.0f, 1.0f); // Edit 1 float using a slider from 0.0f to 1.0f - ImGui::ColorEdit3("clear color", (float*)&clear_color); // Edit 3 floats representing a color - - if (ImGui::Button("Button")) // Buttons return true when clicked (most widgets return true when edited/activated) - counter++; - ImGui::SameLine(); - ImGui::Text("counter = %d", counter); - - ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); - ImGui::End(); - } - - // 3. Show another simple window. - if (show_another_window) - { - ImGui::Begin("Another Window", &show_another_window); // Pass a pointer to our bool variable (the window will have a closing button that will clear the bool when clicked) - ImGui::Text("Hello from another window!"); - if (ImGui::Button("Close Me")) - show_another_window = false; - ImGui::End(); - } -} - -void glut_display_func() -{ - // Start the Dear ImGui frame - ImGui_ImplOpenGL2_NewFrame(); - ImGui_ImplGLUT_NewFrame(); - - my_display_code(); - - // Rendering - ImGui::Render(); - ImGuiIO& io = ImGui::GetIO(); - glViewport(0, 0, (GLsizei)io.DisplaySize.x, (GLsizei)io.DisplaySize.y); - glClearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); - glClear(GL_COLOR_BUFFER_BIT); - //glUseProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound, but prefer using the GL3+ code. - ImGui_ImplOpenGL2_RenderDrawData(ImGui::GetDrawData()); - - glutSwapBuffers(); - glutPostRedisplay(); -} - -// You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. -// - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. -// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. -// Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. - -int main(int argc, char** argv) -{ - // Create GLUT window - glutInit(&argc, argv); -#ifdef __FREEGLUT_EXT_H__ - glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_GLUTMAINLOOP_RETURNS); -#endif - glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_MULTISAMPLE); - glutInitWindowSize(1280, 720); - glutCreateWindow("Dear ImGui GLUT+OpenGL2 Example"); - - // Setup GLUT display function - // We will also call ImGui_ImplGLUT_InstallFuncs() to get all the other functions installed for us, - // otherwise it is possible to install our own functions and call the imgui_impl_glut.h functions ourselves. - glutDisplayFunc(glut_display_func); - - // Setup Dear ImGui context - IMGUI_CHECKVERSION(); - ImGui::CreateContext(); - ImGuiIO& io = ImGui::GetIO(); (void)io; - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls - - // Setup Dear ImGui style - ImGui::StyleColorsDark(); - //ImGui::StyleColorsClassic(); - - // Setup Platform/Renderer bindings - ImGui_ImplGLUT_Init(); - ImGui_ImplGLUT_InstallFuncs(); - ImGui_ImplOpenGL2_Init(); - - // Load Fonts - // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. - // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. - // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). - // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. - // - Read 'docs/FONTS.txt' for more instructions and details. - // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! - //io.Fonts->AddFontDefault(); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Roboto-Medium.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Cousine-Regular.ttf", 15.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/DroidSans.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/ProggyTiny.ttf", 10.0f); - //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); - //IM_ASSERT(font != NULL); - - glutMainLoop(); - - // Cleanup - ImGui_ImplOpenGL2_Shutdown(); - ImGui_ImplGLUT_Shutdown(); - ImGui::DestroyContext(); - - return 0; -} diff --git a/cmake/imgui/examples/example_marmalade/data/app.icf b/cmake/imgui/examples/example_marmalade/data/app.icf deleted file mode 100644 index fcd6585a..00000000 --- a/cmake/imgui/examples/example_marmalade/data/app.icf +++ /dev/null @@ -1,32 +0,0 @@ -# This file is for configuration settings for your -# application. -# -# The syntax is similar to windows .ini files ie -# -# [GroupName] -# Setting = Value -# -# Which can be read by your application using -# e.g s3eConfigGetString("GroupName", "Setting", string) -# -# All settings must be documented in .config.txt files. -# New settings specific to this application should be -# documented in app.config.txt -# -# Some conditional operations are also permitted, see the -# S3E documentation for details. - -[S3E] -MemSize=6000000 -MemSizeDebug=6000000 -DispFixRot=FixedLandscape - -# emulate iphone 5 resolution, change these settings to emulate other display resolution -WinWidth=1136 -WinHeight=640 - -[GX] -DataCacheSize=131070 - -[Util] -#MemoryBreakpoint=1282 diff --git a/cmake/imgui/examples/example_marmalade/main.cpp b/cmake/imgui/examples/example_marmalade/main.cpp deleted file mode 100644 index 82435f20..00000000 --- a/cmake/imgui/examples/example_marmalade/main.cpp +++ /dev/null @@ -1,123 +0,0 @@ -// dear imgui: standalone example application for Marmalade -// If you are new to dear imgui, see examples/README.txt and documentation at the top of imgui.cpp. - -// Copyright (C) 2015 by Giovanni Zito -// This file is part of Dear ImGui - -#include "imgui.h" -#include "imgui_impl_marmalade.h" -#include - -#include -#include -#include - -int main(int, char**) -{ - IwGxInit(); - - // Setup Dear ImGui context - IMGUI_CHECKVERSION(); - ImGui::CreateContext(); - ImGuiIO& io = ImGui::GetIO(); (void)io; - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls - - // Setup Dear ImGui style - ImGui::StyleColorsDark(); - //ImGui::StyleColorsClassic(); - - // Setup Platform/Renderer bindings - ImGui_Marmalade_Init(true); - - // Load Fonts - // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. - // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. - // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). - // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. - // - Read 'docs/FONTS.txt' for more instructions and details. - // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! - //io.Fonts->AddFontDefault(); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Roboto-Medium.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Cousine-Regular.ttf", 15.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/DroidSans.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/ProggyTiny.ttf", 10.0f); - //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); - //IM_ASSERT(font != NULL); - - // Our state - bool show_demo_window = true; - bool show_another_window = false; - ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); - - // Main loop - while (true) - { - if (s3eDeviceCheckQuitRequest()) - break; - - // Poll and handle inputs - // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. - // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. - // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. - // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. - s3eKeyboardUpdate(); - s3ePointerUpdate(); - - // Start the Dear ImGui frame - ImGui_Marmalade_NewFrame(); - ImGui::NewFrame(); - - // 1. Show the big demo window (Most of the sample code is in ImGui::ShowDemoWindow()! You can browse its code to learn more about Dear ImGui!). - if (show_demo_window) - ImGui::ShowDemoWindow(&show_demo_window); - - // 2. Show a simple window that we create ourselves. We use a Begin/End pair to created a named window. - { - static float f = 0.0f; - static int counter = 0; - - ImGui::Begin("Hello, world!"); // Create a window called "Hello, world!" and append into it. - - ImGui::Text("This is some useful text."); // Display some text (you can use a format strings too) - ImGui::Checkbox("Demo Window", &show_demo_window); // Edit bools storing our window open/close state - ImGui::Checkbox("Another Window", &show_another_window); - - ImGui::SliderFloat("float", &f, 0.0f, 1.0f); // Edit 1 float using a slider from 0.0f to 1.0f - ImGui::ColorEdit3("clear color", (float*)&clear_color); // Edit 3 floats representing a color - - if (ImGui::Button("Button")) // Buttons return true when clicked (most widgets return true when edited/activated) - counter++; - ImGui::SameLine(); - ImGui::Text("counter = %d", counter); - - ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); - ImGui::End(); - } - - // 3. Show another simple window. - if (show_another_window) - { - ImGui::Begin("Another Window", &show_another_window); // Pass a pointer to our bool variable (the window will have a closing button that will clear the bool when clicked) - ImGui::Text("Hello from another window!"); - if (ImGui::Button("Close Me")) - show_another_window = false; - ImGui::End(); - } - - // Rendering - ImGui::Render(); - IwGxSetColClear(clear_color.x * 255, clear_color.y * 255, clear_color.z * 255, clear_color.w * 255); - IwGxClear(); - ImGui_Marmalade_RenderDrawData(ImGui::GetDrawData()); - IwGxSwapBuffers(); - - s3eDeviceYield(0); - } - - // Cleanup - ImGui_Marmalade_Shutdown(); - ImGui::DestroyContext(); - IwGxTerminate(); - - return 0; -} diff --git a/cmake/imgui/examples/example_marmalade/marmalade_example.mkb b/cmake/imgui/examples/example_marmalade/marmalade_example.mkb deleted file mode 100644 index 34315b9a..00000000 --- a/cmake/imgui/examples/example_marmalade/marmalade_example.mkb +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env mkb - -# ImGui - standalone example application for Marmalade -# Copyright (C) 2015 by Giovanni Zito -# This file is part of ImGui -# https://github.com/ocornut/imgui - -define IMGUI_DISABLE_INCLUDE_IMCONFIG_H -define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCS -define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCS -define _snprintf=snprintf - -options -{ - optimise-speed=1 -} - -includepaths -{ - .. - ../.. -} - -subprojects -{ - iwgx -} - -files -{ - (.) - ["imgui"] - ../../imgui.cpp - ../../imgui_demo.cpp - ../../imgui_draw.cpp - ../../imgui_widgets.cpp - ../../imconfig.h - ../../imgui.h - ../../imgui_internal.h - - ["imgui","Marmalade binding"] - ../imgui_impl_marmalade.h - ../imgui_impl_marmalade.cpp - main.cpp - -} diff --git a/cmake/imgui/examples/example_null/build_win32.bat b/cmake/imgui/examples/example_null/build_win32.bat deleted file mode 100644 index 38e79148..00000000 --- a/cmake/imgui/examples/example_null/build_win32.bat +++ /dev/null @@ -1,3 +0,0 @@ -@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. -mkdir Debug -cl /nologo /Zi /MD /I ..\.. %* *.cpp ..\..\*.cpp /FeDebug/example_null.exe /FoDebug/ /link gdi32.lib shell32.lib diff --git a/cmake/imgui/examples/example_null/main.cpp b/cmake/imgui/examples/example_null/main.cpp deleted file mode 100644 index aa2f6dba..00000000 --- a/cmake/imgui/examples/example_null/main.cpp +++ /dev/null @@ -1,37 +0,0 @@ -// dear imgui: null/dummy example application -// (compile and link imgui, create context, run headless with NO INPUTS, NO GRAPHICS OUTPUT) -// This is useful to test building, but you cannot interact with anything here! -#include "imgui.h" -#include - -int main(int, char**) -{ - IMGUI_CHECKVERSION(); - ImGui::CreateContext(); - ImGuiIO& io = ImGui::GetIO(); - - // Build atlas - unsigned char* tex_pixels = NULL; - int tex_w, tex_h; - io.Fonts->GetTexDataAsRGBA32(&tex_pixels, &tex_w, &tex_h); - - for (int n = 0; n < 20; n++) - { - printf("NewFrame() %d\n", n); - io.DisplaySize = ImVec2(1920, 1080); - io.DeltaTime = 1.0f / 60.0f; - ImGui::NewFrame(); - - static float f = 0.0f; - ImGui::Text("Hello, world!"); - ImGui::SliderFloat("float", &f, 0.0f, 1.0f); - ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / io.Framerate, io.Framerate); - ImGui::ShowDemoWindow(NULL); - - ImGui::Render(); - } - - printf("DestroyContext()\n"); - ImGui::DestroyContext(); - return 0; -} diff --git a/cmake/imgui/examples/example_sdl_directx11/build_win32.bat b/cmake/imgui/examples/example_sdl_directx11/build_win32.bat deleted file mode 100644 index 8fc702bb..00000000 --- a/cmake/imgui/examples/example_sdl_directx11/build_win32.bat +++ /dev/null @@ -1,8 +0,0 @@ -@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. -set OUT_DIR=Debug -set OUT_EXE=example_sdl_directx11 -set INCLUDES=/I.. /I..\.. /I%SDL2_DIR%\include /I "%WindowsSdkDir%Include\um" /I "%WindowsSdkDir%Include\shared" /I "%DXSDK_DIR%Include" -set SOURCES=main.cpp ..\imgui_impl_sdl.cpp ..\imgui_impl_dx11.cpp ..\..\imgui*.cpp -set LIBS=/libpath:%SDL2_DIR%\lib\x86 SDL2.lib SDL2main.lib /LIBPATH:"%DXSDK_DIR%/Lib/x86" d3d11.lib d3dcompiler.lib -mkdir %OUT_DIR% -cl /nologo /Zi /MD %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console diff --git a/cmake/imgui/examples/example_sdl_directx11/example_sdl_directx11.vcxproj b/cmake/imgui/examples/example_sdl_directx11/example_sdl_directx11.vcxproj deleted file mode 100644 index 804bd500..00000000 --- a/cmake/imgui/examples/example_sdl_directx11/example_sdl_directx11.vcxproj +++ /dev/null @@ -1,181 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {9E1987E3-1F19-45CA-B9C9-D31E791836D8} - example_sdl_directx11 - 8.1 - example_sdl_directx11 - - - - Application - true - MultiByte - v110 - - - Application - true - MultiByte - v110 - - - Application - false - true - MultiByte - v110 - - - Application - false - true - MultiByte - v110 - - - - - - - - - - - - - - - - - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - - Level4 - Disabled - ..\..;..;%SDL2_DIR%\include;%(AdditionalIncludeDirectories) - - - true - %SDL2_DIR%\lib\x86;$(DXSDK_DIR)/Lib/x86;%(AdditionalLibraryDirectories) - SDL2.lib;SDL2main.lib;d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies) - Console - msvcrt.lib - - - - - Level4 - Disabled - ..\..;..;%SDL2_DIR%\include;%(AdditionalIncludeDirectories) - - - true - %SDL2_DIR%\lib\x64;$(DXSDK_DIR)/Lib/x64;%(AdditionalLibraryDirectories) - SDL2.lib;SDL2main.lib;d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies) - Console - msvcrt.lib - - - - - Level4 - MaxSpeed - true - true - ..\..;..;%SDL2_DIR%\include;%(AdditionalIncludeDirectories) - false - - - true - true - true - %SDL2_DIR%\lib\x86;$(DXSDK_DIR)/Lib/x86;%(AdditionalLibraryDirectories) - SDL2.lib;SDL2main.lib;d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies) - Console - - - - - - - Level4 - MaxSpeed - true - true - ..\..;..;%SDL2_DIR%\include;%(AdditionalIncludeDirectories) - false - - - true - true - true - %SDL2_DIR%\lib\x64;$(DXSDK_DIR)/Lib/x64;%(AdditionalLibraryDirectories) - SDL2.lib;SDL2main.lib;d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies) - Console - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cmake/imgui/examples/example_sdl_directx11/example_sdl_directx11.vcxproj.filters b/cmake/imgui/examples/example_sdl_directx11/example_sdl_directx11.vcxproj.filters deleted file mode 100644 index 879f0dbe..00000000 --- a/cmake/imgui/examples/example_sdl_directx11/example_sdl_directx11.vcxproj.filters +++ /dev/null @@ -1,57 +0,0 @@ - - - - - {0587d7a3-f2ce-4d56-b84f-a0005d3bfce6} - - - {08e36723-ce4f-4cff-9662-c40801cf1acf} - - - - - imgui - - - imgui - - - imgui - - - sources - - - sources - - - - - imgui - - - sources - - - imgui - - - imgui - - - sources - - - imgui - - - sources - - - - - - sources - - - \ No newline at end of file diff --git a/cmake/imgui/examples/example_sdl_directx11/main.cpp b/cmake/imgui/examples/example_sdl_directx11/main.cpp deleted file mode 100644 index eadf8ff7..00000000 --- a/cmake/imgui/examples/example_sdl_directx11/main.cpp +++ /dev/null @@ -1,228 +0,0 @@ -// dear imgui: standalone example application for SDL2 + DirectX 11 -// If you are new to dear imgui, see examples/README.txt and documentation at the top of imgui.cpp. -// (SDL is a cross-platform general purpose library for handling windows, inputs, OpenGL/Vulkan/Metal graphics context creation, etc.) - -#include "imgui.h" -#include "imgui_impl_sdl.h" -#include "imgui_impl_dx11.h" -#include -#include -#include -#include - -// Data -static ID3D11Device* g_pd3dDevice = NULL; -static ID3D11DeviceContext* g_pd3dDeviceContext = NULL; -static IDXGISwapChain* g_pSwapChain = NULL; -static ID3D11RenderTargetView* g_mainRenderTargetView = NULL; - -// Forward declarations of helper functions -bool CreateDeviceD3D(HWND hWnd); -void CleanupDeviceD3D(); -void CreateRenderTarget(); -void CleanupRenderTarget(); - -// Main code -int main(int, char**) -{ - // Setup SDL - // (Some versions of SDL before <2.0.10 appears to have performance/stalling issues on a minority of Windows systems, - // depending on whether SDL_INIT_GAMECONTROLLER is enabled or disabled.. updating to latest version of SDL is recommended!) - if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_GAMECONTROLLER) != 0) - { - printf("Error: %s\n", SDL_GetError()); - return -1; - } - - // Setup window - SDL_WindowFlags window_flags = (SDL_WindowFlags)(SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI); - SDL_Window* window = SDL_CreateWindow("Dear ImGui SDL2+DirectX11 example", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 720, window_flags); - SDL_SysWMinfo wmInfo; - SDL_VERSION(&wmInfo.version); - SDL_GetWindowWMInfo(window, &wmInfo); - HWND hwnd = (HWND)wmInfo.info.win.window; - - // Initialize Direct3D - if (!CreateDeviceD3D(hwnd)) - { - CleanupDeviceD3D(); - return 1; - } - - // Setup Dear ImGui context - IMGUI_CHECKVERSION(); - ImGui::CreateContext(); - ImGuiIO& io = ImGui::GetIO(); (void)io; - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls - - // Setup Dear ImGui style - ImGui::StyleColorsDark(); - //ImGui::StyleColorsClassic(); - - // Setup Platform/Renderer bindings - ImGui_ImplSDL2_InitForD3D(window); - ImGui_ImplDX11_Init(g_pd3dDevice, g_pd3dDeviceContext); - - // Load Fonts - // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. - // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. - // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). - // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. - // - Read 'docs/FONTS.txt' for more instructions and details. - // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! - //io.Fonts->AddFontDefault(); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Roboto-Medium.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Cousine-Regular.ttf", 15.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/DroidSans.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/ProggyTiny.ttf", 10.0f); - //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); - //IM_ASSERT(font != NULL); - - // Our state - bool show_demo_window = true; - bool show_another_window = false; - ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); - - // Main loop - bool done = false; - while (!done) - { - // Poll and handle events (inputs, window resize, etc.) - // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. - // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. - // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. - // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. - SDL_Event event; - while (SDL_PollEvent(&event)) - { - ImGui_ImplSDL2_ProcessEvent(&event); - if (event.type == SDL_QUIT) - done = true; - if (event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_CLOSE && event.window.windowID == SDL_GetWindowID(window)) - done = true; - if (event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_RESIZED && event.window.windowID == SDL_GetWindowID(window)) - { - // Release all outstanding references to the swap chain's buffers before resizing. - CleanupRenderTarget(); - g_pSwapChain->ResizeBuffers(0, 0, 0, DXGI_FORMAT_UNKNOWN, 0); - CreateRenderTarget(); - } - } - - // Start the Dear ImGui frame - ImGui_ImplDX11_NewFrame(); - ImGui_ImplSDL2_NewFrame(window); - ImGui::NewFrame(); - - // 1. Show the big demo window (Most of the sample code is in ImGui::ShowDemoWindow()! You can browse its code to learn more about Dear ImGui!). - if (show_demo_window) - ImGui::ShowDemoWindow(&show_demo_window); - - // 2. Show a simple window that we create ourselves. We use a Begin/End pair to created a named window. - { - static float f = 0.0f; - static int counter = 0; - - ImGui::Begin("Hello, world!"); // Create a window called "Hello, world!" and append into it. - - ImGui::Text("This is some useful text."); // Display some text (you can use a format strings too) - ImGui::Checkbox("Demo Window", &show_demo_window); // Edit bools storing our window open/close state - ImGui::Checkbox("Another Window", &show_another_window); - - ImGui::SliderFloat("float", &f, 0.0f, 1.0f); // Edit 1 float using a slider from 0.0f to 1.0f - ImGui::ColorEdit3("clear color", (float*)&clear_color); // Edit 3 floats representing a color - - if (ImGui::Button("Button")) // Buttons return true when clicked (most widgets return true when edited/activated) - counter++; - ImGui::SameLine(); - ImGui::Text("counter = %d", counter); - - ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); - ImGui::End(); - } - - // 3. Show another simple window. - if (show_another_window) - { - ImGui::Begin("Another Window", &show_another_window); // Pass a pointer to our bool variable (the window will have a closing button that will clear the bool when clicked) - ImGui::Text("Hello from another window!"); - if (ImGui::Button("Close Me")) - show_another_window = false; - ImGui::End(); - } - - // Rendering - ImGui::Render(); - g_pd3dDeviceContext->OMSetRenderTargets(1, &g_mainRenderTargetView, NULL); - g_pd3dDeviceContext->ClearRenderTargetView(g_mainRenderTargetView, (float*)&clear_color); - ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData()); - - g_pSwapChain->Present(1, 0); // Present with vsync - //g_pSwapChain->Present(0, 0); // Present without vsync - } - - // Cleanup - ImGui_ImplDX11_Shutdown(); - ImGui_ImplSDL2_Shutdown(); - ImGui::DestroyContext(); - - CleanupDeviceD3D(); - SDL_DestroyWindow(window); - SDL_Quit(); - - return 0; -} - -// Helper functions - -bool CreateDeviceD3D(HWND hWnd) -{ - // Setup swap chain - DXGI_SWAP_CHAIN_DESC sd; - ZeroMemory(&sd, sizeof(sd)); - sd.BufferCount = 2; - sd.BufferDesc.Width = 0; - sd.BufferDesc.Height = 0; - sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - sd.BufferDesc.RefreshRate.Numerator = 60; - sd.BufferDesc.RefreshRate.Denominator = 1; - sd.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH; - sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; - sd.OutputWindow = hWnd; - sd.SampleDesc.Count = 1; - sd.SampleDesc.Quality = 0; - sd.Windowed = TRUE; - sd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD; - - UINT createDeviceFlags = 0; - //createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG; - D3D_FEATURE_LEVEL featureLevel; - const D3D_FEATURE_LEVEL featureLevelArray[2] = { D3D_FEATURE_LEVEL_11_0, D3D_FEATURE_LEVEL_10_0, }; - if (D3D11CreateDeviceAndSwapChain(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, createDeviceFlags, featureLevelArray, 2, D3D11_SDK_VERSION, &sd, &g_pSwapChain, &g_pd3dDevice, &featureLevel, &g_pd3dDeviceContext) != S_OK) - return false; - - CreateRenderTarget(); - return true; -} - -void CleanupDeviceD3D() -{ - CleanupRenderTarget(); - if (g_pSwapChain) { g_pSwapChain->Release(); g_pSwapChain = NULL; } - if (g_pd3dDeviceContext) { g_pd3dDeviceContext->Release(); g_pd3dDeviceContext = NULL; } - if (g_pd3dDevice) { g_pd3dDevice->Release(); g_pd3dDevice = NULL; } -} - -void CreateRenderTarget() -{ - ID3D11Texture2D* pBackBuffer; - g_pSwapChain->GetBuffer(0, IID_PPV_ARGS(&pBackBuffer)); - g_pd3dDevice->CreateRenderTargetView(pBackBuffer, NULL, &g_mainRenderTargetView); - pBackBuffer->Release(); -} - -void CleanupRenderTarget() -{ - if (g_mainRenderTargetView) { g_mainRenderTargetView->Release(); g_mainRenderTargetView = NULL; } -} diff --git a/cmake/imgui/examples/example_sdl_metal/main.mm b/cmake/imgui/examples/example_sdl_metal/main.mm deleted file mode 100644 index 3cb1ea4d..00000000 --- a/cmake/imgui/examples/example_sdl_metal/main.mm +++ /dev/null @@ -1,179 +0,0 @@ -// Dear ImGui: standalone example application for SDL2 + Metal -// If you are new to dear imgui, see examples/README.txt and documentation at the top of imgui.cpp. -// (SDL is a cross-platform general purpose library for handling windows, inputs, OpenGL/Vulkan/Metal graphics context creation, etc.) - -#include "imgui.h" -#include "imgui_impl_sdl.h" -#include "imgui_impl_metal.h" -#include -#include - -#import -#import - -int main(int, char**) -{ - // Setup Dear ImGui binding - IMGUI_CHECKVERSION(); - ImGui::CreateContext(); - ImGuiIO& io = ImGui::GetIO(); (void)io; - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls - - // Setup style - ImGui::StyleColorsDark(); - //ImGui::StyleColorsClassic(); - - // Load Fonts - // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. - // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. - // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). - // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. - // - Read 'docs/FONTS.txt' for more instructions and details. - // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! - //io.Fonts->AddFontDefault(); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Roboto-Medium.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Cousine-Regular.ttf", 15.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/DroidSans.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/ProggyTiny.ttf", 10.0f); - //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); - //IM_ASSERT(font != NULL); - - // Setup SDL - // (Some versions of SDL before <2.0.10 appears to have performance/stalling issues on a minority of Windows systems, - // depending on whether SDL_INIT_GAMECONTROLLER is enabled or disabled.. updating to latest version of SDL is recommended!) - if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_GAMECONTROLLER) != 0) - { - printf("Error: %s\n", SDL_GetError()); - return -1; - } - - // Inform SDL that we will be using metal for rendering. Without this hint initialization of metal renderer may fail. - SDL_SetHint(SDL_HINT_RENDER_DRIVER, "metal"); - - SDL_Window* window = SDL_CreateWindow("Dear ImGui SDL+Metal example", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 720, SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI); - if (window == NULL) - { - printf("Error creating window: %s\n", SDL_GetError()); - return -2; - } - - SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); - if (renderer == NULL) - { - printf("Error creating renderer: %s\n", SDL_GetError()); - return -3; - } - - CAMetalLayer* layer = (__bridge CAMetalLayer*)SDL_RenderGetMetalLayer(renderer); - layer.pixelFormat = MTLPixelFormatBGRA8Unorm; - ImGui_ImplMetal_Init(layer.device); - ImGui_ImplSDL2_InitForMetal(window); - - id commandQueue = [layer.device newCommandQueue]; - MTLRenderPassDescriptor* renderPassDescriptor = [MTLRenderPassDescriptor new]; - - // Our state - bool show_demo_window = true; - bool show_another_window = false; - float clear_color[4] = {0.45f, 0.55f, 0.60f, 1.00f}; - - // Main loop - bool done = false; - while (!done) - { - @autoreleasepool - { - // Poll and handle events (inputs, window resize, etc.) - // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. - // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. - // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. - // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. - SDL_Event event; - while (SDL_PollEvent(&event)) - { - ImGui_ImplSDL2_ProcessEvent(&event); - if (event.type == SDL_QUIT) - done = true; - if (event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_CLOSE && event.window.windowID == SDL_GetWindowID(window)) - done = true; - } - - int width, height; - SDL_GetRendererOutputSize(renderer, &width, &height); - layer.drawableSize = CGSizeMake(width, height); - id drawable = [layer nextDrawable]; - - id commandBuffer = [commandQueue commandBuffer]; - renderPassDescriptor.colorAttachments[0].clearColor = MTLClearColorMake(clear_color[0], clear_color[1], clear_color[2], clear_color[3]); - renderPassDescriptor.colorAttachments[0].texture = drawable.texture; - renderPassDescriptor.colorAttachments[0].loadAction = MTLLoadActionClear; - renderPassDescriptor.colorAttachments[0].storeAction = MTLStoreActionStore; - id renderEncoder = [commandBuffer renderCommandEncoderWithDescriptor:renderPassDescriptor]; - [renderEncoder pushDebugGroup:@"ImGui demo"]; - - // Start the Dear ImGui frame - ImGui_ImplMetal_NewFrame(renderPassDescriptor); - ImGui_ImplSDL2_NewFrame(window); - ImGui::NewFrame(); - - // 1. Show the big demo window (Most of the sample code is in ImGui::ShowDemoWindow()! You can browse its code to learn more about Dear ImGui!). - if (show_demo_window) - ImGui::ShowDemoWindow(&show_demo_window); - - // 2. Show a simple window that we create ourselves. We use a Begin/End pair to created a named window. - { - static float f = 0.0f; - static int counter = 0; - - ImGui::Begin("Hello, world!"); // Create a window called "Hello, world!" and append into it. - - ImGui::Text("This is some useful text."); // Display some text (you can use a format strings too) - ImGui::Checkbox("Demo Window", &show_demo_window); // Edit bools storing our window open/close state - ImGui::Checkbox("Another Window", &show_another_window); - - ImGui::SliderFloat("float", &f, 0.0f, 1.0f); // Edit 1 float using a slider from 0.0f to 1.0f - ImGui::ColorEdit3("clear color", (float*)&clear_color); // Edit 3 floats representing a color - - if (ImGui::Button("Button")) // Buttons return true when clicked (most widgets return true when edited/activated) - counter++; - ImGui::SameLine(); - ImGui::Text("counter = %d", counter); - - ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); - ImGui::End(); - } - - // 3. Show another simple window. - if (show_another_window) - { - ImGui::Begin("Another Window", &show_another_window); // Pass a pointer to our bool variable (the window will have a closing button that will clear the bool when clicked) - ImGui::Text("Hello from another window!"); - if (ImGui::Button("Close Me")) - show_another_window = false; - ImGui::End(); - } - - // Rendering - ImGui::Render(); - ImGui_ImplMetal_RenderDrawData(ImGui::GetDrawData(), commandBuffer, renderEncoder); - - [renderEncoder popDebugGroup]; - [renderEncoder endEncoding]; - - [commandBuffer presentDrawable:drawable]; - [commandBuffer commit]; - } - } - - // Cleanup - ImGui_ImplMetal_Shutdown(); - ImGui_ImplSDL2_Shutdown(); - ImGui::DestroyContext(); - - SDL_DestroyRenderer(renderer); - SDL_DestroyWindow(window); - SDL_Quit(); - - return 0; -} diff --git a/cmake/imgui/examples/example_sdl_opengl2/README.md b/cmake/imgui/examples/example_sdl_opengl2/README.md deleted file mode 100644 index 60a5e377..00000000 --- a/cmake/imgui/examples/example_sdl_opengl2/README.md +++ /dev/null @@ -1,25 +0,0 @@ - -# How to Build - -- On Windows with Visual Studio's CLI - -``` -set SDL2_DIR=path_to_your_sdl2_folder -cl /Zi /MD /I.. /I..\.. /I%SDL2_DIR%\include main.cpp ..\imgui_impl_sdl.cpp ..\imgui_impl_opengl2.cpp ..\..\imgui*.cpp /FeDebug/example_sdl_opengl2.exe /FoDebug/ /link /libpath:%SDL2_DIR%\lib\x86 SDL2.lib SDL2main.lib opengl32.lib /subsystem:console -# ^^ include paths ^^ source files ^^ output exe ^^ output dir ^^ libraries -# or for 64-bit: -cl /Zi /MD /I.. /I..\.. /I%SDL2_DIR%\include main.cpp ..\imgui_impl_sdl.cpp ..\imgui_impl_opengl2.cpp ..\..\imgui*.cpp /FeDebug/example_sdl_opengl2.exe /FoDebug/ /link /libpath:%SDL2_DIR%\lib\x64 SDL2.lib SDL2main.lib opengl32.lib /subsystem:console -``` - -- On Linux and similar Unixes - -``` -c++ `sdl2-config --cflags` -I .. -I ../.. main.cpp ../imgui_impl_sdl.cpp ../imgui_impl_opengl2.cpp ../../imgui*.cpp `sdl2-config --libs` -lGL -``` - -- On Mac OS X - -``` -brew install sdl2 -c++ `sdl2-config --cflags` -I .. -I ../.. main.cpp ../imgui_impl_sdl.cpp ../imgui_impl_opengl2.cpp ../../imgui*.cpp `sdl2-config --libs` -framework OpenGl -``` diff --git a/cmake/imgui/examples/example_sdl_opengl2/build_win32.bat b/cmake/imgui/examples/example_sdl_opengl2/build_win32.bat deleted file mode 100644 index d209b2a2..00000000 --- a/cmake/imgui/examples/example_sdl_opengl2/build_win32.bat +++ /dev/null @@ -1,8 +0,0 @@ -@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. -set OUT_DIR=Debug -set OUT_EXE=example_sdl_opengl2 -set INCLUDES=/I.. /I..\.. /I%SDL2_DIR%\include -set SOURCES=main.cpp ..\imgui_impl_sdl.cpp ..\imgui_impl_opengl2.cpp ..\..\imgui*.cpp -set LIBS=/libpath:%SDL2_DIR%\lib\x86 SDL2.lib SDL2main.lib opengl32.lib -mkdir %OUT_DIR% -cl /nologo /Zi /MD %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console diff --git a/cmake/imgui/examples/example_sdl_opengl2/example_sdl_opengl2.vcxproj b/cmake/imgui/examples/example_sdl_opengl2/example_sdl_opengl2.vcxproj deleted file mode 100644 index 83a6a8a0..00000000 --- a/cmake/imgui/examples/example_sdl_opengl2/example_sdl_opengl2.vcxproj +++ /dev/null @@ -1,180 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {2AE17FDE-F7F3-4CAC-ADAB-0710EDA4F741} - example_sdl_opengl2 - 8.1 - - - - Application - true - MultiByte - v110 - - - Application - true - MultiByte - v110 - - - Application - false - true - MultiByte - v110 - - - Application - false - true - MultiByte - v110 - - - - - - - - - - - - - - - - - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - - Level4 - Disabled - ..\..;..;%SDL2_DIR%\include;%(AdditionalIncludeDirectories) - - - true - %SDL2_DIR%\lib\x86;%(AdditionalLibraryDirectories) - opengl32.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies) - Console - msvcrt.lib - - - - - Level4 - Disabled - ..\..;..;%SDL2_DIR%\include;%(AdditionalIncludeDirectories) - - - true - %SDL2_DIR%\lib\x64;%(AdditionalLibraryDirectories) - opengl32.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies) - Console - msvcrt.lib - - - - - Level4 - MaxSpeed - true - true - ..\..;..;%SDL2_DIR%\include;%(AdditionalIncludeDirectories) - false - - - true - true - true - %SDL2_DIR%\lib\x86;%(AdditionalLibraryDirectories) - opengl32.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies) - Console - - - - - - - Level4 - MaxSpeed - true - true - ..\..;..;%SDL2_DIR%\include;%(AdditionalIncludeDirectories) - false - - - true - true - true - %SDL2_DIR%\lib\x64;%(AdditionalLibraryDirectories) - opengl32.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies) - Console - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cmake/imgui/examples/example_sdl_opengl2/example_sdl_opengl2.vcxproj.filters b/cmake/imgui/examples/example_sdl_opengl2/example_sdl_opengl2.vcxproj.filters deleted file mode 100644 index e0c1bf2e..00000000 --- a/cmake/imgui/examples/example_sdl_opengl2/example_sdl_opengl2.vcxproj.filters +++ /dev/null @@ -1,58 +0,0 @@ - - - - - {20b90ce4-7fcb-4731-b9a0-075f875de82d} - - - {f18ab499-84e1-499f-8eff-9754361e0e52} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - - - imgui - - - imgui - - - imgui - - - sources - - - sources - - - sources - - - imgui - - - - - imgui - - - imgui - - - imgui - - - sources - - - sources - - - - - - sources - - - \ No newline at end of file diff --git a/cmake/imgui/examples/example_sdl_opengl2/main.cpp b/cmake/imgui/examples/example_sdl_opengl2/main.cpp deleted file mode 100644 index ff54ec41..00000000 --- a/cmake/imgui/examples/example_sdl_opengl2/main.cpp +++ /dev/null @@ -1,154 +0,0 @@ -// dear imgui: standalone example application for SDL2 + OpenGL -// If you are new to dear imgui, see examples/README.txt and documentation at the top of imgui.cpp. -// (SDL is a cross-platform general purpose library for handling windows, inputs, OpenGL/Vulkan/Metal graphics context creation, etc.) - -// **DO NOT USE THIS CODE IF YOUR CODE/ENGINE IS USING MODERN OPENGL (SHADERS, VBO, VAO, etc.)** -// **Prefer using the code in the example_sdl_opengl3/ folder** -// See imgui_impl_sdl.cpp for details. - -#include "imgui.h" -#include "imgui_impl_sdl.h" -#include "imgui_impl_opengl2.h" -#include -#include -#include - -// Main code -int main(int, char**) -{ - // Setup SDL - // (Some versions of SDL before <2.0.10 appears to have performance/stalling issues on a minority of Windows systems, - // depending on whether SDL_INIT_GAMECONTROLLER is enabled or disabled.. updating to latest version of SDL is recommended!) - if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_GAMECONTROLLER) != 0) - { - printf("Error: %s\n", SDL_GetError()); - return -1; - } - - // Setup window - SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); - SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); - SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); - SDL_WindowFlags window_flags = (SDL_WindowFlags)(SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI); - SDL_Window* window = SDL_CreateWindow("Dear ImGui SDL2+OpenGL example", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 720, window_flags); - SDL_GLContext gl_context = SDL_GL_CreateContext(window); - SDL_GL_MakeCurrent(window, gl_context); - SDL_GL_SetSwapInterval(1); // Enable vsync - - // Setup Dear ImGui context - IMGUI_CHECKVERSION(); - ImGui::CreateContext(); - ImGuiIO& io = ImGui::GetIO(); (void)io; - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls - - // Setup Dear ImGui style - ImGui::StyleColorsDark(); - //ImGui::StyleColorsClassic(); - - // Setup Platform/Renderer bindings - ImGui_ImplSDL2_InitForOpenGL(window, gl_context); - ImGui_ImplOpenGL2_Init(); - - // Load Fonts - // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. - // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. - // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). - // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. - // - Read 'docs/FONTS.txt' for more instructions and details. - // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! - //io.Fonts->AddFontDefault(); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Roboto-Medium.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Cousine-Regular.ttf", 15.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/DroidSans.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/ProggyTiny.ttf", 10.0f); - //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); - //IM_ASSERT(font != NULL); - - // Our state - bool show_demo_window = true; - bool show_another_window = false; - ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); - - // Main loop - bool done = false; - while (!done) - { - // Poll and handle events (inputs, window resize, etc.) - // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. - // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. - // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. - // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. - SDL_Event event; - while (SDL_PollEvent(&event)) - { - ImGui_ImplSDL2_ProcessEvent(&event); - if (event.type == SDL_QUIT) - done = true; - } - - // Start the Dear ImGui frame - ImGui_ImplOpenGL2_NewFrame(); - ImGui_ImplSDL2_NewFrame(window); - ImGui::NewFrame(); - - // 1. Show the big demo window (Most of the sample code is in ImGui::ShowDemoWindow()! You can browse its code to learn more about Dear ImGui!). - if (show_demo_window) - ImGui::ShowDemoWindow(&show_demo_window); - - // 2. Show a simple window that we create ourselves. We use a Begin/End pair to created a named window. - { - static float f = 0.0f; - static int counter = 0; - - ImGui::Begin("Hello, world!"); // Create a window called "Hello, world!" and append into it. - - ImGui::Text("This is some useful text."); // Display some text (you can use a format strings too) - ImGui::Checkbox("Demo Window", &show_demo_window); // Edit bools storing our window open/close state - ImGui::Checkbox("Another Window", &show_another_window); - - ImGui::SliderFloat("float", &f, 0.0f, 1.0f); // Edit 1 float using a slider from 0.0f to 1.0f - ImGui::ColorEdit3("clear color", (float*)&clear_color); // Edit 3 floats representing a color - - if (ImGui::Button("Button")) // Buttons return true when clicked (most widgets return true when edited/activated) - counter++; - ImGui::SameLine(); - ImGui::Text("counter = %d", counter); - - ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); - ImGui::End(); - } - - // 3. Show another simple window. - if (show_another_window) - { - ImGui::Begin("Another Window", &show_another_window); // Pass a pointer to our bool variable (the window will have a closing button that will clear the bool when clicked) - ImGui::Text("Hello from another window!"); - if (ImGui::Button("Close Me")) - show_another_window = false; - ImGui::End(); - } - - // Rendering - ImGui::Render(); - glViewport(0, 0, (int)io.DisplaySize.x, (int)io.DisplaySize.y); - glClearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); - glClear(GL_COLOR_BUFFER_BIT); - //glUseProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound - ImGui_ImplOpenGL2_RenderDrawData(ImGui::GetDrawData()); - SDL_GL_SwapWindow(window); - } - - // Cleanup - ImGui_ImplOpenGL2_Shutdown(); - ImGui_ImplSDL2_Shutdown(); - ImGui::DestroyContext(); - - SDL_GL_DeleteContext(gl_context); - SDL_DestroyWindow(window); - SDL_Quit(); - - return 0; -} diff --git a/cmake/imgui/examples/example_sdl_opengl3/README.md b/cmake/imgui/examples/example_sdl_opengl3/README.md deleted file mode 100644 index ec21fb78..00000000 --- a/cmake/imgui/examples/example_sdl_opengl3/README.md +++ /dev/null @@ -1,25 +0,0 @@ - -# How to Build - -- On Windows with Visual Studio's CLI - -``` -set SDL2_DIR=path_to_your_sdl2_folder -cl /Zi /MD /I.. /I..\.. /I%SDL2_DIR%\include /I..\libs\gl3w main.cpp ..\imgui_impl_sdl.cpp ..\imgui_impl_opengl3.cpp ..\..\imgui*.cpp ..\libs\gl3w\GL\gl3w.c /FeDebug/example_sdl_opengl3.exe /FoDebug/ /link /libpath:%SDL2_DIR%\lib\x86 SDL2.lib SDL2main.lib opengl32.lib /subsystem:console -# ^^ include paths ^^ source files ^^ output exe ^^ output dir ^^ libraries -# or for 64-bit: -cl /Zi /MD /I.. /I..\.. /I%SDL2_DIR%\include /I..\libs\gl3w main.cpp ..\imgui_impl_sdl.cpp ..\imgui_impl_opengl3.cpp ..\..\imgui*.cpp ..\libs\gl3w\GL\gl3w.c /FeDebug/example_sdl_opengl3.exe /FoDebug/ /link /libpath:%SDL2_DIR%\lib\x64 SDL2.lib SDL2main.lib opengl32.lib /subsystem:console -``` - -- On Linux and similar Unixes - -``` -c++ `sdl2-config --cflags` -I .. -I ../.. -I ../libs/gl3w main.cpp ../imgui_impl_sdl.cpp ../imgui_impl_opengl3.cpp ../../imgui*.cpp ../libs/gl3w/GL/gl3w.c `sdl2-config --libs` -lGL -ldl -``` - -- On Mac OS X - -``` -brew install sdl2 -c++ `sdl2-config --cflags` -I .. -I ../.. -I ../libs/gl3w main.cpp ../imgui_impl_sdl.cpp ../imgui_impl_opengl3.cpp ../../imgui*.cpp ../libs/gl3w/GL/gl3w.c `sdl2-config --libs` -framework OpenGl -framework CoreFoundation -``` diff --git a/cmake/imgui/examples/example_sdl_opengl3/build_win32.bat b/cmake/imgui/examples/example_sdl_opengl3/build_win32.bat deleted file mode 100644 index ce105602..00000000 --- a/cmake/imgui/examples/example_sdl_opengl3/build_win32.bat +++ /dev/null @@ -1,8 +0,0 @@ -@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. -set OUT_DIR=Debug -set OUT_EXE=example_sdl_opengl3 -set INCLUDES=/I.. /I..\.. /I%SDL2_DIR%\include /I..\libs\gl3w -set SOURCES=main.cpp ..\imgui_impl_sdl.cpp ..\imgui_impl_opengl3.cpp ..\..\imgui*.cpp ..\libs\gl3w\GL\gl3w.c -set LIBS=/libpath:%SDL2_DIR%\lib\x86 SDL2.lib SDL2main.lib opengl32.lib -mkdir %OUT_DIR% -cl /nologo /Zi /MD %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console diff --git a/cmake/imgui/examples/example_sdl_opengl3/example_sdl_opengl3.vcxproj b/cmake/imgui/examples/example_sdl_opengl3/example_sdl_opengl3.vcxproj deleted file mode 100644 index 54aaa796..00000000 --- a/cmake/imgui/examples/example_sdl_opengl3/example_sdl_opengl3.vcxproj +++ /dev/null @@ -1,183 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {BBAEB705-1669-40F3-8567-04CF6A991F4C} - example_sdl_opengl3 - 8.1 - - - - Application - true - MultiByte - v110 - - - Application - true - MultiByte - v110 - - - Application - false - true - MultiByte - v110 - - - Application - false - true - MultiByte - v110 - - - - - - - - - - - - - - - - - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - - Level4 - Disabled - ..\..;..;%SDL2_DIR%\include;..\libs\gl3w;%(AdditionalIncludeDirectories) - - - true - %SDL2_DIR%\lib\x86;%(AdditionalLibraryDirectories) - opengl32.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies) - Console - msvcrt.lib - - - - - Level4 - Disabled - ..\..;..;%SDL2_DIR%\include;..\libs\gl3w;%(AdditionalIncludeDirectories) - - - true - %SDL2_DIR%\lib\x64;%(AdditionalLibraryDirectories) - opengl32.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies) - Console - msvcrt.lib - - - - - Level4 - MaxSpeed - true - true - ..\..;..;%SDL2_DIR%\include;..\libs\gl3w;%(AdditionalIncludeDirectories) - false - - - true - true - true - %SDL2_DIR%\lib\x86;%(AdditionalLibraryDirectories) - opengl32.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies) - Console - - - - - - - Level4 - MaxSpeed - true - true - ..\..;..;%SDL2_DIR%\include;..\libs\gl3w;%(AdditionalIncludeDirectories) - false - - - true - true - true - %SDL2_DIR%\lib\x64;%(AdditionalLibraryDirectories) - opengl32.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies) - Console - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cmake/imgui/examples/example_sdl_opengl3/example_sdl_opengl3.vcxproj.filters b/cmake/imgui/examples/example_sdl_opengl3/example_sdl_opengl3.vcxproj.filters deleted file mode 100644 index fbef18ac..00000000 --- a/cmake/imgui/examples/example_sdl_opengl3/example_sdl_opengl3.vcxproj.filters +++ /dev/null @@ -1,70 +0,0 @@ - - - - - {20b90ce4-7fcb-4731-b9a0-075f875de82d} - - - {f18ab499-84e1-499f-8eff-9754361e0e52} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {f9997b32-5479-4756-9ffc-77793ad3764f} - - - - - imgui - - - imgui - - - imgui - - - sources - - - gl3w - - - sources - - - sources - - - imgui - - - - - imgui - - - imgui - - - imgui - - - gl3w - - - gl3w - - - sources - - - sources - - - - - - sources - - - \ No newline at end of file diff --git a/cmake/imgui/examples/example_sdl_opengl3/main.cpp b/cmake/imgui/examples/example_sdl_opengl3/main.cpp deleted file mode 100644 index ae794ef4..00000000 --- a/cmake/imgui/examples/example_sdl_opengl3/main.cpp +++ /dev/null @@ -1,212 +0,0 @@ -// dear imgui: standalone example application for SDL2 + OpenGL -// If you are new to dear imgui, see examples/README.txt and documentation at the top of imgui.cpp. -// (SDL is a cross-platform general purpose library for handling windows, inputs, OpenGL/Vulkan/Metal graphics context creation, etc.) -// (GL3W is a helper library to access OpenGL functions since there is no standard header to access modern OpenGL functions easily. Alternatives are GLEW, Glad, etc.) - -#include "imgui.h" -#include "imgui_impl_sdl.h" -#include "imgui_impl_opengl3.h" -#include -#include - -// About Desktop OpenGL function loaders: -// Modern desktop OpenGL doesn't have a standard portable header file to load OpenGL function pointers. -// Helper libraries are often used for this purpose! Here we are supporting a few common ones (gl3w, glew, glad). -// You may use another loader/header of your choice (glext, glLoadGen, etc.), or chose to manually implement your own. -#if defined(IMGUI_IMPL_OPENGL_LOADER_GL3W) -#include // Initialize with gl3wInit() -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLEW) -#include // Initialize with glewInit() -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLAD) -#include // Initialize with gladLoadGL() -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING2) -#define GLFW_INCLUDE_NONE // GLFW including OpenGL headers causes ambiguity or multiple definition errors. -#include // Initialize with glbinding::Binding::initialize() -#include -using namespace gl; -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING3) -#define GLFW_INCLUDE_NONE // GLFW including OpenGL headers causes ambiguity or multiple definition errors. -#include // Initialize with glbinding::initialize() -#include -using namespace gl; -#else -#include IMGUI_IMPL_OPENGL_LOADER_CUSTOM -#endif - -// Main code -int main(int, char**) -{ - // Setup SDL - // (Some versions of SDL before <2.0.10 appears to have performance/stalling issues on a minority of Windows systems, - // depending on whether SDL_INIT_GAMECONTROLLER is enabled or disabled.. updating to latest version of SDL is recommended!) - if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_GAMECONTROLLER) != 0) - { - printf("Error: %s\n", SDL_GetError()); - return -1; - } - - // Decide GL+GLSL versions -#if __APPLE__ - // GL 3.2 Core + GLSL 150 - const char* glsl_version = "#version 150"; - SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG); // Always required on Mac - SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); -#else - // GL 3.0 + GLSL 130 - const char* glsl_version = "#version 130"; - SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, 0); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0); -#endif - - // Create window with graphics context - SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); - SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); - SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8); - SDL_WindowFlags window_flags = (SDL_WindowFlags)(SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI); - SDL_Window* window = SDL_CreateWindow("Dear ImGui SDL2+OpenGL3 example", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 720, window_flags); - SDL_GLContext gl_context = SDL_GL_CreateContext(window); - SDL_GL_MakeCurrent(window, gl_context); - SDL_GL_SetSwapInterval(1); // Enable vsync - - // Initialize OpenGL loader -#if defined(IMGUI_IMPL_OPENGL_LOADER_GL3W) - bool err = gl3wInit() != 0; -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLEW) - bool err = glewInit() != GLEW_OK; -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLAD) - bool err = gladLoadGL() == 0; -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING2) - bool err = false; - glbinding::Binding::initialize(); -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING3) - bool err = false; - glbinding::initialize([](const char* name) { return (glbinding::ProcAddress)SDL_GL_GetProcAddress(name); }); -#else - bool err = false; // If you use IMGUI_IMPL_OPENGL_LOADER_CUSTOM, your loader is likely to requires some form of initialization. -#endif - if (err) - { - fprintf(stderr, "Failed to initialize OpenGL loader!\n"); - return 1; - } - - // Setup Dear ImGui context - IMGUI_CHECKVERSION(); - ImGui::CreateContext(); - ImGuiIO& io = ImGui::GetIO(); (void)io; - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls - - // Setup Dear ImGui style - ImGui::StyleColorsDark(); - //ImGui::StyleColorsClassic(); - - // Setup Platform/Renderer bindings - ImGui_ImplSDL2_InitForOpenGL(window, gl_context); - ImGui_ImplOpenGL3_Init(glsl_version); - - // Load Fonts - // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. - // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. - // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). - // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. - // - Read 'docs/FONTS.txt' for more instructions and details. - // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! - //io.Fonts->AddFontDefault(); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Roboto-Medium.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Cousine-Regular.ttf", 15.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/DroidSans.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/ProggyTiny.ttf", 10.0f); - //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); - //IM_ASSERT(font != NULL); - - // Our state - bool show_demo_window = true; - bool show_another_window = false; - ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); - - // Main loop - bool done = false; - while (!done) - { - // Poll and handle events (inputs, window resize, etc.) - // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. - // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. - // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. - // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. - SDL_Event event; - while (SDL_PollEvent(&event)) - { - ImGui_ImplSDL2_ProcessEvent(&event); - if (event.type == SDL_QUIT) - done = true; - if (event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_CLOSE && event.window.windowID == SDL_GetWindowID(window)) - done = true; - } - - // Start the Dear ImGui frame - ImGui_ImplOpenGL3_NewFrame(); - ImGui_ImplSDL2_NewFrame(window); - ImGui::NewFrame(); - - // 1. Show the big demo window (Most of the sample code is in ImGui::ShowDemoWindow()! You can browse its code to learn more about Dear ImGui!). - if (show_demo_window) - ImGui::ShowDemoWindow(&show_demo_window); - - // 2. Show a simple window that we create ourselves. We use a Begin/End pair to created a named window. - { - static float f = 0.0f; - static int counter = 0; - - ImGui::Begin("Hello, world!"); // Create a window called "Hello, world!" and append into it. - - ImGui::Text("This is some useful text."); // Display some text (you can use a format strings too) - ImGui::Checkbox("Demo Window", &show_demo_window); // Edit bools storing our window open/close state - ImGui::Checkbox("Another Window", &show_another_window); - - ImGui::SliderFloat("float", &f, 0.0f, 1.0f); // Edit 1 float using a slider from 0.0f to 1.0f - ImGui::ColorEdit3("clear color", (float*)&clear_color); // Edit 3 floats representing a color - - if (ImGui::Button("Button")) // Buttons return true when clicked (most widgets return true when edited/activated) - counter++; - ImGui::SameLine(); - ImGui::Text("counter = %d", counter); - - ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); - ImGui::End(); - } - - // 3. Show another simple window. - if (show_another_window) - { - ImGui::Begin("Another Window", &show_another_window); // Pass a pointer to our bool variable (the window will have a closing button that will clear the bool when clicked) - ImGui::Text("Hello from another window!"); - if (ImGui::Button("Close Me")) - show_another_window = false; - ImGui::End(); - } - - // Rendering - ImGui::Render(); - glViewport(0, 0, (int)io.DisplaySize.x, (int)io.DisplaySize.y); - glClearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); - glClear(GL_COLOR_BUFFER_BIT); - ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); - SDL_GL_SwapWindow(window); - } - - // Cleanup - ImGui_ImplOpenGL3_Shutdown(); - ImGui_ImplSDL2_Shutdown(); - ImGui::DestroyContext(); - - SDL_GL_DeleteContext(gl_context); - SDL_DestroyWindow(window); - SDL_Quit(); - - return 0; -} diff --git a/cmake/imgui/examples/example_sdl_vulkan/example_sdl_vulkan.vcxproj b/cmake/imgui/examples/example_sdl_vulkan/example_sdl_vulkan.vcxproj deleted file mode 100644 index ac701a2a..00000000 --- a/cmake/imgui/examples/example_sdl_vulkan/example_sdl_vulkan.vcxproj +++ /dev/null @@ -1,180 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {BAE3D0B5-9695-4EB1-AD0F-75890EB4A3B3} - example_sdl_vulkan - 8.1 - - - - Application - true - MultiByte - v110 - - - Application - true - MultiByte - v110 - - - Application - false - true - MultiByte - v110 - - - Application - false - true - MultiByte - v110 - - - - - - - - - - - - - - - - - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - $(IncludePath) - - - - Level4 - Disabled - ..\..;..;%VULKAN_SDK%\include;%SDL2_DIR%\include;%(AdditionalIncludeDirectories) - - - true - %VULKAN_SDK%\lib32;%SDL2_DIR%\lib\x86;%(AdditionalLibraryDirectories) - vulkan-1.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies) - Console - msvcrt.lib - - - - - Level4 - Disabled - ..\..;..;%VULKAN_SDK%\include;%SDL2_DIR%\include;%(AdditionalIncludeDirectories) - - - true - %VULKAN_SDK%\lib;%SDL2_DIR%\lib\x64;%(AdditionalLibraryDirectories) - vulkan-1.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies) - Console - msvcrt.lib - - - - - Level4 - MaxSpeed - true - true - ..\..;..;%VULKAN_SDK%\include;%SDL2_DIR%\include;%(AdditionalIncludeDirectories) - false - - - true - true - true - %VULKAN_SDK%\lib32;%SDL2_DIR%\lib\x86;%(AdditionalLibraryDirectories) - vulkan-1.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies) - Console - - - - - - - Level4 - MaxSpeed - true - true - ..\..;..;%VULKAN_SDK%\include;%SDL2_DIR%\include;%(AdditionalIncludeDirectories) - false - - - true - true - true - %VULKAN_SDK%\lib;%SDL2_DIR%\lib\x64;%(AdditionalLibraryDirectories) - vulkan-1.lib;SDL2.lib;SDL2main.lib;%(AdditionalDependencies) - Console - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cmake/imgui/examples/example_sdl_vulkan/example_sdl_vulkan.vcxproj.filters b/cmake/imgui/examples/example_sdl_vulkan/example_sdl_vulkan.vcxproj.filters deleted file mode 100644 index 6f082524..00000000 --- a/cmake/imgui/examples/example_sdl_vulkan/example_sdl_vulkan.vcxproj.filters +++ /dev/null @@ -1,58 +0,0 @@ - - - - - {20b90ce4-7fcb-4731-b9a0-075f875de82d} - - - {f18ab499-84e1-499f-8eff-9754361e0e52} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - - - imgui - - - imgui - - - imgui - - - sources - - - sources - - - sources - - - imgui - - - - - imgui - - - imgui - - - imgui - - - sources - - - sources - - - - - - sources - - - \ No newline at end of file diff --git a/cmake/imgui/examples/example_sdl_vulkan/main.cpp b/cmake/imgui/examples/example_sdl_vulkan/main.cpp deleted file mode 100644 index c4e529e1..00000000 --- a/cmake/imgui/examples/example_sdl_vulkan/main.cpp +++ /dev/null @@ -1,527 +0,0 @@ -// dear imgui: standalone example application for SDL2 + Vulkan -// If you are new to dear imgui, see examples/README.txt and documentation at the top of imgui.cpp. - -// Important note to the reader who wish to integrate imgui_impl_vulkan.cpp/.h in their own engine/app. -// - Common ImGui_ImplVulkan_XXX functions and structures are used to interface with imgui_impl_vulkan.cpp/.h. -// You will use those if you want to use this rendering back-end in your engine/app. -// - Helper ImGui_ImplVulkanH_XXX functions and structures are only used by this example (main.cpp) and by -// the back-end itself (imgui_impl_vulkan.cpp), but should PROBABLY NOT be used by your own engine/app code. -// Read comments in imgui_impl_vulkan.h. - -#include "imgui.h" -#include "imgui_impl_sdl.h" -#include "imgui_impl_vulkan.h" -#include // printf, fprintf -#include // abort -#include -#include -#include - -//#define IMGUI_UNLIMITED_FRAME_RATE -#ifdef _DEBUG -#define IMGUI_VULKAN_DEBUG_REPORT -#endif - -static VkAllocationCallbacks* g_Allocator = NULL; -static VkInstance g_Instance = VK_NULL_HANDLE; -static VkPhysicalDevice g_PhysicalDevice = VK_NULL_HANDLE; -static VkDevice g_Device = VK_NULL_HANDLE; -static uint32_t g_QueueFamily = (uint32_t)-1; -static VkQueue g_Queue = VK_NULL_HANDLE; -static VkDebugReportCallbackEXT g_DebugReport = VK_NULL_HANDLE; -static VkPipelineCache g_PipelineCache = VK_NULL_HANDLE; -static VkDescriptorPool g_DescriptorPool = VK_NULL_HANDLE; - -static ImGui_ImplVulkanH_Window g_MainWindowData; -static uint32_t g_MinImageCount = 2; -static bool g_SwapChainRebuild = false; -static int g_SwapChainResizeWidth = 0; -static int g_SwapChainResizeHeight = 0; - -static void check_vk_result(VkResult err) -{ - if (err == 0) return; - printf("VkResult %d\n", err); - if (err < 0) - abort(); -} - -#ifdef IMGUI_VULKAN_DEBUG_REPORT -static VKAPI_ATTR VkBool32 VKAPI_CALL debug_report(VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char* pLayerPrefix, const char* pMessage, void* pUserData) -{ - (void)flags; (void)object; (void)location; (void)messageCode; (void)pUserData; (void)pLayerPrefix; // Unused arguments - fprintf(stderr, "[vulkan] ObjectType: %i\nMessage: %s\n\n", objectType, pMessage); - return VK_FALSE; -} -#endif // IMGUI_VULKAN_DEBUG_REPORT - -static void SetupVulkan(const char** extensions, uint32_t extensions_count) -{ - VkResult err; - - // Create Vulkan Instance - { - VkInstanceCreateInfo create_info = {}; - create_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; - create_info.enabledExtensionCount = extensions_count; - create_info.ppEnabledExtensionNames = extensions; - -#ifdef IMGUI_VULKAN_DEBUG_REPORT - // Enabling multiple validation layers grouped as LunarG standard validation - const char* layers[] = { "VK_LAYER_LUNARG_standard_validation" }; - create_info.enabledLayerCount = 1; - create_info.ppEnabledLayerNames = layers; - - // Enable debug report extension (we need additional storage, so we duplicate the user array to add our new extension to it) - const char** extensions_ext = (const char**)malloc(sizeof(const char*) * (extensions_count + 1)); - memcpy(extensions_ext, extensions, extensions_count * sizeof(const char*)); - extensions_ext[extensions_count] = "VK_EXT_debug_report"; - create_info.enabledExtensionCount = extensions_count + 1; - create_info.ppEnabledExtensionNames = extensions_ext; - - // Create Vulkan Instance - err = vkCreateInstance(&create_info, g_Allocator, &g_Instance); - check_vk_result(err); - free(extensions_ext); - - // Get the function pointer (required for any extensions) - auto vkCreateDebugReportCallbackEXT = (PFN_vkCreateDebugReportCallbackEXT)vkGetInstanceProcAddr(g_Instance, "vkCreateDebugReportCallbackEXT"); - IM_ASSERT(vkCreateDebugReportCallbackEXT != NULL); - - // Setup the debug report callback - VkDebugReportCallbackCreateInfoEXT debug_report_ci = {}; - debug_report_ci.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT; - debug_report_ci.flags = VK_DEBUG_REPORT_ERROR_BIT_EXT | VK_DEBUG_REPORT_WARNING_BIT_EXT | VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT; - debug_report_ci.pfnCallback = debug_report; - debug_report_ci.pUserData = NULL; - err = vkCreateDebugReportCallbackEXT(g_Instance, &debug_report_ci, g_Allocator, &g_DebugReport); - check_vk_result(err); -#else - // Create Vulkan Instance without any debug feature - err = vkCreateInstance(&create_info, g_Allocator, &g_Instance); - check_vk_result(err); - IM_UNUSED(g_DebugReport); -#endif - } - - // Select GPU - { - uint32_t gpu_count; - err = vkEnumeratePhysicalDevices(g_Instance, &gpu_count, NULL); - check_vk_result(err); - IM_ASSERT(gpu_count > 0); - - VkPhysicalDevice* gpus = (VkPhysicalDevice*)malloc(sizeof(VkPhysicalDevice) * gpu_count); - err = vkEnumeratePhysicalDevices(g_Instance, &gpu_count, gpus); - check_vk_result(err); - - // If a number >1 of GPUs got reported, you should find the best fit GPU for your purpose - // e.g. VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU if available, or with the greatest memory available, etc. - // for sake of simplicity we'll just take the first one, assuming it has a graphics queue family. - g_PhysicalDevice = gpus[0]; - free(gpus); - } - - // Select graphics queue family - { - uint32_t count; - vkGetPhysicalDeviceQueueFamilyProperties(g_PhysicalDevice, &count, NULL); - VkQueueFamilyProperties* queues = (VkQueueFamilyProperties*)malloc(sizeof(VkQueueFamilyProperties) * count); - vkGetPhysicalDeviceQueueFamilyProperties(g_PhysicalDevice, &count, queues); - for (uint32_t i = 0; i < count; i++) - if (queues[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) - { - g_QueueFamily = i; - break; - } - free(queues); - IM_ASSERT(g_QueueFamily != (uint32_t)-1); - } - - // Create Logical Device (with 1 queue) - { - int device_extension_count = 1; - const char* device_extensions[] = { "VK_KHR_swapchain" }; - const float queue_priority[] = { 1.0f }; - VkDeviceQueueCreateInfo queue_info[1] = {}; - queue_info[0].sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; - queue_info[0].queueFamilyIndex = g_QueueFamily; - queue_info[0].queueCount = 1; - queue_info[0].pQueuePriorities = queue_priority; - VkDeviceCreateInfo create_info = {}; - create_info.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; - create_info.queueCreateInfoCount = sizeof(queue_info) / sizeof(queue_info[0]); - create_info.pQueueCreateInfos = queue_info; - create_info.enabledExtensionCount = device_extension_count; - create_info.ppEnabledExtensionNames = device_extensions; - err = vkCreateDevice(g_PhysicalDevice, &create_info, g_Allocator, &g_Device); - check_vk_result(err); - vkGetDeviceQueue(g_Device, g_QueueFamily, 0, &g_Queue); - } - - // Create Descriptor Pool - { - VkDescriptorPoolSize pool_sizes[] = - { - { VK_DESCRIPTOR_TYPE_SAMPLER, 1000 }, - { VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1000 }, - { VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, 1000 }, - { VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1000 }, - { VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, 1000 }, - { VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, 1000 }, - { VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1000 }, - { VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1000 }, - { VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, 1000 }, - { VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, 1000 }, - { VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, 1000 } - }; - VkDescriptorPoolCreateInfo pool_info = {}; - pool_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO; - pool_info.flags = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT; - pool_info.maxSets = 1000 * IM_ARRAYSIZE(pool_sizes); - pool_info.poolSizeCount = (uint32_t)IM_ARRAYSIZE(pool_sizes); - pool_info.pPoolSizes = pool_sizes; - err = vkCreateDescriptorPool(g_Device, &pool_info, g_Allocator, &g_DescriptorPool); - check_vk_result(err); - } -} - -// All the ImGui_ImplVulkanH_XXX structures/functions are optional helpers used by the demo. -// Your real engine/app may not use them. -static void SetupVulkanWindow(ImGui_ImplVulkanH_Window* wd, VkSurfaceKHR surface, int width, int height) -{ - wd->Surface = surface; - - // Check for WSI support - VkBool32 res; - vkGetPhysicalDeviceSurfaceSupportKHR(g_PhysicalDevice, g_QueueFamily, wd->Surface, &res); - if (res != VK_TRUE) - { - fprintf(stderr, "Error no WSI support on physical device 0\n"); - exit(-1); - } - - // Select Surface Format - const VkFormat requestSurfaceImageFormat[] = { VK_FORMAT_B8G8R8A8_UNORM, VK_FORMAT_R8G8B8A8_UNORM, VK_FORMAT_B8G8R8_UNORM, VK_FORMAT_R8G8B8_UNORM }; - const VkColorSpaceKHR requestSurfaceColorSpace = VK_COLORSPACE_SRGB_NONLINEAR_KHR; - wd->SurfaceFormat = ImGui_ImplVulkanH_SelectSurfaceFormat(g_PhysicalDevice, wd->Surface, requestSurfaceImageFormat, (size_t)IM_ARRAYSIZE(requestSurfaceImageFormat), requestSurfaceColorSpace); - - // Select Present Mode -#ifdef IMGUI_UNLIMITED_FRAME_RATE - VkPresentModeKHR present_modes[] = { VK_PRESENT_MODE_MAILBOX_KHR, VK_PRESENT_MODE_IMMEDIATE_KHR, VK_PRESENT_MODE_FIFO_KHR }; -#else - VkPresentModeKHR present_modes[] = { VK_PRESENT_MODE_FIFO_KHR }; -#endif - wd->PresentMode = ImGui_ImplVulkanH_SelectPresentMode(g_PhysicalDevice, wd->Surface, &present_modes[0], IM_ARRAYSIZE(present_modes)); - //printf("[vulkan] Selected PresentMode = %d\n", wd->PresentMode); - - // Create SwapChain, RenderPass, Framebuffer, etc. - IM_ASSERT(g_MinImageCount >= 2); - ImGui_ImplVulkanH_CreateWindow(g_Instance, g_PhysicalDevice, g_Device, wd, g_QueueFamily, g_Allocator, width, height, g_MinImageCount); -} - -static void CleanupVulkan() -{ - vkDestroyDescriptorPool(g_Device, g_DescriptorPool, g_Allocator); - -#ifdef IMGUI_VULKAN_DEBUG_REPORT - // Remove the debug report callback - auto vkDestroyDebugReportCallbackEXT = (PFN_vkDestroyDebugReportCallbackEXT)vkGetInstanceProcAddr(g_Instance, "vkDestroyDebugReportCallbackEXT"); - vkDestroyDebugReportCallbackEXT(g_Instance, g_DebugReport, g_Allocator); -#endif // IMGUI_VULKAN_DEBUG_REPORT - - vkDestroyDevice(g_Device, g_Allocator); - vkDestroyInstance(g_Instance, g_Allocator); -} - -static void CleanupVulkanWindow() -{ - ImGui_ImplVulkanH_DestroyWindow(g_Instance, g_Device, &g_MainWindowData, g_Allocator); -} - -static void FrameRender(ImGui_ImplVulkanH_Window* wd) -{ - VkResult err; - - VkSemaphore image_acquired_semaphore = wd->FrameSemaphores[wd->SemaphoreIndex].ImageAcquiredSemaphore; - VkSemaphore render_complete_semaphore = wd->FrameSemaphores[wd->SemaphoreIndex].RenderCompleteSemaphore; - err = vkAcquireNextImageKHR(g_Device, wd->Swapchain, UINT64_MAX, image_acquired_semaphore, VK_NULL_HANDLE, &wd->FrameIndex); - check_vk_result(err); - - ImGui_ImplVulkanH_Frame* fd = &wd->Frames[wd->FrameIndex]; - { - err = vkWaitForFences(g_Device, 1, &fd->Fence, VK_TRUE, UINT64_MAX); // wait indefinitely instead of periodically checking - check_vk_result(err); - - err = vkResetFences(g_Device, 1, &fd->Fence); - check_vk_result(err); - } - { - err = vkResetCommandPool(g_Device, fd->CommandPool, 0); - check_vk_result(err); - VkCommandBufferBeginInfo info = {}; - info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; - info.flags |= VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT; - err = vkBeginCommandBuffer(fd->CommandBuffer, &info); - check_vk_result(err); - } - { - VkRenderPassBeginInfo info = {}; - info.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; - info.renderPass = wd->RenderPass; - info.framebuffer = fd->Framebuffer; - info.renderArea.extent.width = wd->Width; - info.renderArea.extent.height = wd->Height; - info.clearValueCount = 1; - info.pClearValues = &wd->ClearValue; - vkCmdBeginRenderPass(fd->CommandBuffer, &info, VK_SUBPASS_CONTENTS_INLINE); - } - - // Record Imgui Draw Data and draw funcs into command buffer - ImGui_ImplVulkan_RenderDrawData(ImGui::GetDrawData(), fd->CommandBuffer); - - // Submit command buffer - vkCmdEndRenderPass(fd->CommandBuffer); - { - VkPipelineStageFlags wait_stage = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; - VkSubmitInfo info = {}; - info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; - info.waitSemaphoreCount = 1; - info.pWaitSemaphores = &image_acquired_semaphore; - info.pWaitDstStageMask = &wait_stage; - info.commandBufferCount = 1; - info.pCommandBuffers = &fd->CommandBuffer; - info.signalSemaphoreCount = 1; - info.pSignalSemaphores = &render_complete_semaphore; - - err = vkEndCommandBuffer(fd->CommandBuffer); - check_vk_result(err); - err = vkQueueSubmit(g_Queue, 1, &info, fd->Fence); - check_vk_result(err); - } -} - -static void FramePresent(ImGui_ImplVulkanH_Window* wd) -{ - VkSemaphore render_complete_semaphore = wd->FrameSemaphores[wd->SemaphoreIndex].RenderCompleteSemaphore; - VkPresentInfoKHR info = {}; - info.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR; - info.waitSemaphoreCount = 1; - info.pWaitSemaphores = &render_complete_semaphore; - info.swapchainCount = 1; - info.pSwapchains = &wd->Swapchain; - info.pImageIndices = &wd->FrameIndex; - VkResult err = vkQueuePresentKHR(g_Queue, &info); - check_vk_result(err); - wd->SemaphoreIndex = (wd->SemaphoreIndex + 1) % wd->ImageCount; // Now we can use the next set of semaphores -} - -int main(int, char**) -{ - // Setup SDL - if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_GAMECONTROLLER) != 0) - { - printf("Error: %s\n", SDL_GetError()); - return -1; - } - - // Setup window - SDL_WindowFlags window_flags = (SDL_WindowFlags)(SDL_WINDOW_VULKAN | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI); - SDL_Window* window = SDL_CreateWindow("Dear ImGui SDL2+Vulkan example", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 720, window_flags); - - // Setup Vulkan - uint32_t extensions_count = 0; - SDL_Vulkan_GetInstanceExtensions(window, &extensions_count, NULL); - const char** extensions = new const char*[extensions_count]; - SDL_Vulkan_GetInstanceExtensions(window, &extensions_count, extensions); - SetupVulkan(extensions, extensions_count); - delete[] extensions; - - // Create Window Surface - VkSurfaceKHR surface; - VkResult err; - if (SDL_Vulkan_CreateSurface(window, g_Instance, &surface) == 0) - { - printf("Failed to create Vulkan surface.\n"); - return 1; - } - - // Create Framebuffers - int w, h; - SDL_GetWindowSize(window, &w, &h); - ImGui_ImplVulkanH_Window* wd = &g_MainWindowData; - SetupVulkanWindow(wd, surface, w, h); - - // Setup Dear ImGui context - IMGUI_CHECKVERSION(); - ImGui::CreateContext(); - ImGuiIO& io = ImGui::GetIO(); (void)io; - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls - - // Setup Dear ImGui style - ImGui::StyleColorsDark(); - //ImGui::StyleColorsClassic(); - - // Setup Platform/Renderer bindings - ImGui_ImplSDL2_InitForVulkan(window); - ImGui_ImplVulkan_InitInfo init_info = {}; - init_info.Instance = g_Instance; - init_info.PhysicalDevice = g_PhysicalDevice; - init_info.Device = g_Device; - init_info.QueueFamily = g_QueueFamily; - init_info.Queue = g_Queue; - init_info.PipelineCache = g_PipelineCache; - init_info.DescriptorPool = g_DescriptorPool; - init_info.Allocator = g_Allocator; - init_info.MinImageCount = g_MinImageCount; - init_info.ImageCount = wd->ImageCount; - init_info.CheckVkResultFn = check_vk_result; - ImGui_ImplVulkan_Init(&init_info, wd->RenderPass); - - // Load Fonts - // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. - // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. - // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). - // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. - // - Read 'docs/FONTS.txt' for more instructions and details. - // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! - //io.Fonts->AddFontDefault(); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Roboto-Medium.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Cousine-Regular.ttf", 15.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/DroidSans.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/ProggyTiny.ttf", 10.0f); - //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); - //IM_ASSERT(font != NULL); - - // Upload Fonts - { - // Use any command queue - VkCommandPool command_pool = wd->Frames[wd->FrameIndex].CommandPool; - VkCommandBuffer command_buffer = wd->Frames[wd->FrameIndex].CommandBuffer; - - err = vkResetCommandPool(g_Device, command_pool, 0); - check_vk_result(err); - VkCommandBufferBeginInfo begin_info = {}; - begin_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; - begin_info.flags |= VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT; - err = vkBeginCommandBuffer(command_buffer, &begin_info); - check_vk_result(err); - - ImGui_ImplVulkan_CreateFontsTexture(command_buffer); - - VkSubmitInfo end_info = {}; - end_info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; - end_info.commandBufferCount = 1; - end_info.pCommandBuffers = &command_buffer; - err = vkEndCommandBuffer(command_buffer); - check_vk_result(err); - err = vkQueueSubmit(g_Queue, 1, &end_info, VK_NULL_HANDLE); - check_vk_result(err); - - err = vkDeviceWaitIdle(g_Device); - check_vk_result(err); - ImGui_ImplVulkan_DestroyFontUploadObjects(); - } - - // Our state - bool show_demo_window = true; - bool show_another_window = false; - ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); - - // Main loop - bool done = false; - while (!done) - { - // Poll and handle events (inputs, window resize, etc.) - // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. - // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. - // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. - // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. - SDL_Event event; - while (SDL_PollEvent(&event)) - { - ImGui_ImplSDL2_ProcessEvent(&event); - if (event.type == SDL_QUIT) - done = true; - if (event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_RESIZED && event.window.windowID == SDL_GetWindowID(window)) - { - g_SwapChainResizeWidth = (int)event.window.data1; - g_SwapChainResizeHeight = (int)event.window.data2; - g_SwapChainRebuild = true; - } - } - - if (g_SwapChainRebuild) - { - g_SwapChainRebuild = false; - ImGui_ImplVulkan_SetMinImageCount(g_MinImageCount); - ImGui_ImplVulkanH_CreateWindow(g_Instance, g_PhysicalDevice, g_Device, &g_MainWindowData, g_QueueFamily, g_Allocator, g_SwapChainResizeWidth, g_SwapChainResizeHeight, g_MinImageCount); - g_MainWindowData.FrameIndex = 0; - } - - // Start the Dear ImGui frame - ImGui_ImplVulkan_NewFrame(); - ImGui_ImplSDL2_NewFrame(window); - ImGui::NewFrame(); - - // 1. Show the big demo window (Most of the sample code is in ImGui::ShowDemoWindow()! You can browse its code to learn more about Dear ImGui!). - if (show_demo_window) - ImGui::ShowDemoWindow(&show_demo_window); - - // 2. Show a simple window that we create ourselves. We use a Begin/End pair to created a named window. - { - static float f = 0.0f; - static int counter = 0; - - ImGui::Begin("Hello, world!"); // Create a window called "Hello, world!" and append into it. - - ImGui::Text("This is some useful text."); // Display some text (you can use a format strings too) - ImGui::Checkbox("Demo Window", &show_demo_window); // Edit bools storing our window open/close state - ImGui::Checkbox("Another Window", &show_another_window); - - ImGui::SliderFloat("float", &f, 0.0f, 1.0f); // Edit 1 float using a slider from 0.0f to 1.0f - ImGui::ColorEdit3("clear color", (float*)&clear_color); // Edit 3 floats representing a color - - if (ImGui::Button("Button")) // Buttons return true when clicked (most widgets return true when edited/activated) - counter++; - ImGui::SameLine(); - ImGui::Text("counter = %d", counter); - - ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); - ImGui::End(); - } - - // 3. Show another simple window. - if (show_another_window) - { - ImGui::Begin("Another Window", &show_another_window); // Pass a pointer to our bool variable (the window will have a closing button that will clear the bool when clicked) - ImGui::Text("Hello from another window!"); - if (ImGui::Button("Close Me")) - show_another_window = false; - ImGui::End(); - } - - // Rendering - ImGui::Render(); - memcpy(&wd->ClearValue.color.float32[0], &clear_color, 4 * sizeof(float)); - FrameRender(wd); - - FramePresent(wd); - } - - // Cleanup - err = vkDeviceWaitIdle(g_Device); - check_vk_result(err); - ImGui_ImplVulkan_Shutdown(); - ImGui_ImplSDL2_Shutdown(); - ImGui::DestroyContext(); - - CleanupVulkanWindow(); - CleanupVulkan(); - - SDL_DestroyWindow(window); - SDL_Quit(); - - return 0; -} diff --git a/cmake/imgui/examples/example_win32_directx10/build_win32.bat b/cmake/imgui/examples/example_win32_directx10/build_win32.bat deleted file mode 100644 index d79cb8f7..00000000 --- a/cmake/imgui/examples/example_win32_directx10/build_win32.bat +++ /dev/null @@ -1,4 +0,0 @@ -@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. -mkdir Debug -cl /nologo /Zi /MD /I .. /I ..\.. /I "%WindowsSdkDir%Include\um" /I "%WindowsSdkDir%Include\shared" /I "%DXSDK_DIR%Include" /D UNICODE /D _UNICODE *.cpp ..\imgui_impl_win32.cpp ..\imgui_impl_dx10.cpp ..\..\imgui*.cpp /FeDebug/example_win32_directx10.exe /FoDebug/ /link /LIBPATH:"%DXSDK_DIR%/Lib/x86" d3d10.lib d3dcompiler.lib - diff --git a/cmake/imgui/examples/example_win32_directx10/example_win32_directx10.vcxproj b/cmake/imgui/examples/example_win32_directx10/example_win32_directx10.vcxproj deleted file mode 100644 index 2346cf58..00000000 --- a/cmake/imgui/examples/example_win32_directx10/example_win32_directx10.vcxproj +++ /dev/null @@ -1,170 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {345A953E-A004-4648-B442-DC5F9F11068C} - example_win32_directx10 - 10.0 - - - - Application - true - Unicode - v142 - - - Application - true - Unicode - v142 - - - Application - false - true - Unicode - v142 - - - Application - false - true - Unicode - v142 - - - - - - - - - - - - - - - - - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - - - - Level4 - Disabled - ..\..;..;%(AdditionalIncludeDirectories); - - - true - d3d10.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies) - $(DXSDK_DIR)/Lib/x86;%(AdditionalLibraryDirectories) - Console - - - - - Level4 - Disabled - ..\..;..;%(AdditionalIncludeDirectories); - - - true - d3d10.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies) - $(DXSDK_DIR)/Lib/x64;%(AdditionalLibraryDirectories) - Console - - - - - Level4 - MaxSpeed - true - true - ..\..;..;%(AdditionalIncludeDirectories); - false - - - true - true - true - d3d10.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies) - $(DXSDK_DIR)/Lib/x86;%(AdditionalLibraryDirectories) - Console - - - - - Level4 - MaxSpeed - true - true - ..\..;..;%(AdditionalIncludeDirectories); - false - - - true - true - true - d3d10.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies) - $(DXSDK_DIR)/Lib/x64;%(AdditionalLibraryDirectories) - Console - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cmake/imgui/examples/example_win32_directx10/example_win32_directx10.vcxproj.filters b/cmake/imgui/examples/example_win32_directx10/example_win32_directx10.vcxproj.filters deleted file mode 100644 index 97620028..00000000 --- a/cmake/imgui/examples/example_win32_directx10/example_win32_directx10.vcxproj.filters +++ /dev/null @@ -1,57 +0,0 @@ - - - - - {0587d7a3-f2ce-4d56-b84f-a0005d3bfce6} - - - {08e36723-ce4f-4cff-9662-c40801cf1acf} - - - - - imgui - - - imgui - - - imgui - - - sources - - - sources - - - - - imgui - - - sources - - - imgui - - - imgui - - - sources - - - sources - - - imgui - - - - - - sources - - - \ No newline at end of file diff --git a/cmake/imgui/examples/example_win32_directx10/main.cpp b/cmake/imgui/examples/example_win32_directx10/main.cpp deleted file mode 100644 index 41833cb5..00000000 --- a/cmake/imgui/examples/example_win32_directx10/main.cpp +++ /dev/null @@ -1,238 +0,0 @@ -// dear imgui: standalone example application for DirectX 10 -// If you are new to dear imgui, see examples/README.txt and documentation at the top of imgui.cpp. - -#include "imgui.h" -#include "imgui_impl_win32.h" -#include "imgui_impl_dx10.h" -#include -#include -#define DIRECTINPUT_VERSION 0x0800 -#include -#include - -// Data -static ID3D10Device* g_pd3dDevice = NULL; -static IDXGISwapChain* g_pSwapChain = NULL; -static ID3D10RenderTargetView* g_mainRenderTargetView = NULL; - -// Forward declarations of helper functions -bool CreateDeviceD3D(HWND hWnd); -void CleanupDeviceD3D(); -void CreateRenderTarget(); -void CleanupRenderTarget(); -LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); - -// Main code -int main(int, char**) -{ - // Create application window - WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, WndProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, _T("ImGui Example"), NULL }; - ::RegisterClassEx(&wc); - HWND hwnd = ::CreateWindow(wc.lpszClassName, _T("Dear ImGui DirectX10 Example"), WS_OVERLAPPEDWINDOW, 100, 100, 1280, 800, NULL, NULL, wc.hInstance, NULL); - - // Initialize Direct3D - if (!CreateDeviceD3D(hwnd)) - { - CleanupDeviceD3D(); - ::UnregisterClass(wc.lpszClassName, wc.hInstance); - return 1; - } - - // Show the window - ::ShowWindow(hwnd, SW_SHOWDEFAULT); - ::UpdateWindow(hwnd); - - // Setup Dear ImGui context - IMGUI_CHECKVERSION(); - ImGui::CreateContext(); - ImGuiIO& io = ImGui::GetIO(); (void)io; - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls - - // Setup Dear ImGui style - ImGui::StyleColorsDark(); - //ImGui::StyleColorsClassic(); - - // Setup Platform/Renderer bindings - ImGui_ImplWin32_Init(hwnd); - ImGui_ImplDX10_Init(g_pd3dDevice); - - // Load Fonts - // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. - // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. - // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). - // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. - // - Read 'docs/FONTS.txt' for more instructions and details. - // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! - //io.Fonts->AddFontDefault(); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Roboto-Medium.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Cousine-Regular.ttf", 15.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/DroidSans.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/ProggyTiny.ttf", 10.0f); - //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); - //IM_ASSERT(font != NULL); - - // Our state - bool show_demo_window = true; - bool show_another_window = false; - ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); - - // Main loop - MSG msg; - ZeroMemory(&msg, sizeof(msg)); - while (msg.message != WM_QUIT) - { - // Poll and handle messages (inputs, window resize, etc.) - // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. - // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. - // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. - // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. - if (::PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE)) - { - ::TranslateMessage(&msg); - ::DispatchMessage(&msg); - continue; - } - - // Start the Dear ImGui frame - ImGui_ImplDX10_NewFrame(); - ImGui_ImplWin32_NewFrame(); - ImGui::NewFrame(); - - // 1. Show the big demo window (Most of the sample code is in ImGui::ShowDemoWindow()! You can browse its code to learn more about Dear ImGui!). - if (show_demo_window) - ImGui::ShowDemoWindow(&show_demo_window); - - // 2. Show a simple window that we create ourselves. We use a Begin/End pair to created a named window. - { - static float f = 0.0f; - static int counter = 0; - - ImGui::Begin("Hello, world!"); // Create a window called "Hello, world!" and append into it. - - ImGui::Text("This is some useful text."); // Display some text (you can use a format strings too) - ImGui::Checkbox("Demo Window", &show_demo_window); // Edit bools storing our window open/close state - ImGui::Checkbox("Another Window", &show_another_window); - - ImGui::SliderFloat("float", &f, 0.0f, 1.0f); // Edit 1 float using a slider from 0.0f to 1.0f - ImGui::ColorEdit3("clear color", (float*)&clear_color); // Edit 3 floats representing a color - - if (ImGui::Button("Button")) // Buttons return true when clicked (most widgets return true when edited/activated) - counter++; - ImGui::SameLine(); - ImGui::Text("counter = %d", counter); - - ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); - ImGui::End(); - } - - // 3. Show another simple window. - if (show_another_window) - { - ImGui::Begin("Another Window", &show_another_window); // Pass a pointer to our bool variable (the window will have a closing button that will clear the bool when clicked) - ImGui::Text("Hello from another window!"); - if (ImGui::Button("Close Me")) - show_another_window = false; - ImGui::End(); - } - - // Rendering - ImGui::Render(); - g_pd3dDevice->OMSetRenderTargets(1, &g_mainRenderTargetView, NULL); - g_pd3dDevice->ClearRenderTargetView(g_mainRenderTargetView, (float*)&clear_color); - ImGui_ImplDX10_RenderDrawData(ImGui::GetDrawData()); - - g_pSwapChain->Present(1, 0); // Present with vsync - //g_pSwapChain->Present(0, 0); // Present without vsync - } - - ImGui_ImplDX10_Shutdown(); - ImGui_ImplWin32_Shutdown(); - ImGui::DestroyContext(); - - CleanupDeviceD3D(); - ::DestroyWindow(hwnd); - ::UnregisterClass(wc.lpszClassName, wc.hInstance); - - return 0; -} - -// Helper functions - -bool CreateDeviceD3D(HWND hWnd) -{ - // Setup swap chain - DXGI_SWAP_CHAIN_DESC sd; - ZeroMemory(&sd, sizeof(sd)); - sd.BufferCount = 2; - sd.BufferDesc.Width = 0; - sd.BufferDesc.Height = 0; - sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - sd.BufferDesc.RefreshRate.Numerator = 60; - sd.BufferDesc.RefreshRate.Denominator = 1; - sd.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH; - sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; - sd.OutputWindow = hWnd; - sd.SampleDesc.Count = 1; - sd.SampleDesc.Quality = 0; - sd.Windowed = TRUE; - sd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD; - - UINT createDeviceFlags = 0; - //createDeviceFlags |= D3D10_CREATE_DEVICE_DEBUG; - if (D3D10CreateDeviceAndSwapChain(NULL, D3D10_DRIVER_TYPE_HARDWARE, NULL, createDeviceFlags, D3D10_SDK_VERSION, &sd, &g_pSwapChain, &g_pd3dDevice) != S_OK) - return false; - - CreateRenderTarget(); - return true; -} - -void CleanupDeviceD3D() -{ - CleanupRenderTarget(); - if (g_pSwapChain) { g_pSwapChain->Release(); g_pSwapChain = NULL; } - if (g_pd3dDevice) { g_pd3dDevice->Release(); g_pd3dDevice = NULL; } -} - -void CreateRenderTarget() -{ - ID3D10Texture2D* pBackBuffer; - g_pSwapChain->GetBuffer(0, IID_PPV_ARGS(&pBackBuffer)); - g_pd3dDevice->CreateRenderTargetView(pBackBuffer, NULL, &g_mainRenderTargetView); - pBackBuffer->Release(); -} - -void CleanupRenderTarget() -{ - if (g_mainRenderTargetView) { g_mainRenderTargetView->Release(); g_mainRenderTargetView = NULL; } -} - -// Forward declare message handler from imgui_impl_win32.cpp -extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); - -// Win32 message handler -LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - if (ImGui_ImplWin32_WndProcHandler(hWnd, msg, wParam, lParam)) - return true; - - switch (msg) - { - case WM_SIZE: - if (g_pd3dDevice != NULL && wParam != SIZE_MINIMIZED) - { - CleanupRenderTarget(); - g_pSwapChain->ResizeBuffers(0, (UINT)LOWORD(lParam), (UINT)HIWORD(lParam), DXGI_FORMAT_UNKNOWN, 0); - CreateRenderTarget(); - } - return 0; - case WM_SYSCOMMAND: - if ((wParam & 0xfff0) == SC_KEYMENU) // Disable ALT application menu - return 0; - break; - case WM_DESTROY: - ::PostQuitMessage(0); - return 0; - } - return ::DefWindowProc(hWnd, msg, wParam, lParam); -} diff --git a/cmake/imgui/examples/example_win32_directx11/build_win32.bat b/cmake/imgui/examples/example_win32_directx11/build_win32.bat deleted file mode 100644 index 05e6a6f6..00000000 --- a/cmake/imgui/examples/example_win32_directx11/build_win32.bat +++ /dev/null @@ -1,4 +0,0 @@ -@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. -mkdir Debug -cl /nologo /Zi /MD /I .. /I ..\.. /I "%WindowsSdkDir%Include\um" /I "%WindowsSdkDir%Include\shared" /I "%DXSDK_DIR%Include" /D UNICODE /D _UNICODE *.cpp ..\imgui_impl_dx11.cpp ..\imgui_impl_win32.cpp ..\..\imgui*.cpp /FeDebug/example_win32_directx11.exe /FoDebug/ /link /LIBPATH:"%DXSDK_DIR%/Lib/x86" d3d11.lib d3dcompiler.lib - diff --git a/cmake/imgui/examples/example_win32_directx11/example_win32_directx11.vcxproj b/cmake/imgui/examples/example_win32_directx11/example_win32_directx11.vcxproj deleted file mode 100644 index 1ed9edcf..00000000 --- a/cmake/imgui/examples/example_win32_directx11/example_win32_directx11.vcxproj +++ /dev/null @@ -1,169 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {9F316E83-5AE5-4939-A723-305A94F48005} - example_win32_directx11 - - - - Application - true - Unicode - v142 - - - Application - true - Unicode - v142 - - - Application - false - true - Unicode - v142 - - - Application - false - true - Unicode - v142 - - - - - - - - - - - - - - - - - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - - - - Level4 - Disabled - ..\..;..;%(AdditionalIncludeDirectories); - - - true - d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies) - $(DXSDK_DIR)/Lib/x86;%(AdditionalLibraryDirectories) - Console - - - - - Level4 - Disabled - ..\..;..;%(AdditionalIncludeDirectories); - - - true - d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies) - $(DXSDK_DIR)/Lib/x64;%(AdditionalLibraryDirectories) - Console - - - - - Level4 - MaxSpeed - true - true - ..\..;..;%(AdditionalIncludeDirectories); - false - - - true - true - true - d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies) - $(DXSDK_DIR)/Lib/x86;%(AdditionalLibraryDirectories) - Console - - - - - Level4 - MaxSpeed - true - true - ..\..;..;%(AdditionalIncludeDirectories); - false - - - true - true - true - d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies) - $(DXSDK_DIR)/Lib/x64;%(AdditionalLibraryDirectories) - Console - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cmake/imgui/examples/example_win32_directx11/example_win32_directx11.vcxproj.filters b/cmake/imgui/examples/example_win32_directx11/example_win32_directx11.vcxproj.filters deleted file mode 100644 index 1df6a0c4..00000000 --- a/cmake/imgui/examples/example_win32_directx11/example_win32_directx11.vcxproj.filters +++ /dev/null @@ -1,57 +0,0 @@ - - - - - {0587d7a3-f2ce-4d56-b84f-a0005d3bfce6} - - - {08e36723-ce4f-4cff-9662-c40801cf1acf} - - - - - imgui - - - imgui - - - imgui - - - sources - - - sources - - - - - imgui - - - sources - - - imgui - - - imgui - - - sources - - - sources - - - imgui - - - - - - sources - - - \ No newline at end of file diff --git a/cmake/imgui/examples/example_win32_directx11/main.cpp b/cmake/imgui/examples/example_win32_directx11/main.cpp deleted file mode 100644 index 05de7433..00000000 --- a/cmake/imgui/examples/example_win32_directx11/main.cpp +++ /dev/null @@ -1,242 +0,0 @@ -// dear imgui - standalone example application for DirectX 11 -// If you are new to dear imgui, see examples/README.txt and documentation at the top of imgui.cpp. - -#include "imgui.h" -#include "imgui_impl_win32.h" -#include "imgui_impl_dx11.h" -#include -#define DIRECTINPUT_VERSION 0x0800 -#include -#include - -// Data -static ID3D11Device* g_pd3dDevice = NULL; -static ID3D11DeviceContext* g_pd3dDeviceContext = NULL; -static IDXGISwapChain* g_pSwapChain = NULL; -static ID3D11RenderTargetView* g_mainRenderTargetView = NULL; - -// Forward declarations of helper functions -bool CreateDeviceD3D(HWND hWnd); -void CleanupDeviceD3D(); -void CreateRenderTarget(); -void CleanupRenderTarget(); -LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); - -// Main code -int main(int, char**) -{ - // Create application window - WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, WndProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, _T("ImGui Example"), NULL }; - ::RegisterClassEx(&wc); - HWND hwnd = ::CreateWindow(wc.lpszClassName, _T("Dear ImGui DirectX11 Example"), WS_OVERLAPPEDWINDOW, 100, 100, 1280, 800, NULL, NULL, wc.hInstance, NULL); - - // Initialize Direct3D - if (!CreateDeviceD3D(hwnd)) - { - CleanupDeviceD3D(); - ::UnregisterClass(wc.lpszClassName, wc.hInstance); - return 1; - } - - // Show the window - ::ShowWindow(hwnd, SW_SHOWDEFAULT); - ::UpdateWindow(hwnd); - - // Setup Dear ImGui context - IMGUI_CHECKVERSION(); - ImGui::CreateContext(); - ImGuiIO& io = ImGui::GetIO(); (void)io; - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls - - // Setup Dear ImGui style - ImGui::StyleColorsDark(); - //ImGui::StyleColorsClassic(); - - // Setup Platform/Renderer bindings - ImGui_ImplWin32_Init(hwnd); - ImGui_ImplDX11_Init(g_pd3dDevice, g_pd3dDeviceContext); - - // Load Fonts - // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. - // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. - // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). - // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. - // - Read 'docs/FONTS.txt' for more instructions and details. - // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! - //io.Fonts->AddFontDefault(); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Roboto-Medium.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Cousine-Regular.ttf", 15.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/DroidSans.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/ProggyTiny.ttf", 10.0f); - //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); - //IM_ASSERT(font != NULL); - - // Our state - bool show_demo_window = true; - bool show_another_window = false; - ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); - - // Main loop - MSG msg; - ZeroMemory(&msg, sizeof(msg)); - while (msg.message != WM_QUIT) - { - // Poll and handle messages (inputs, window resize, etc.) - // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. - // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. - // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. - // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. - if (::PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE)) - { - ::TranslateMessage(&msg); - ::DispatchMessage(&msg); - continue; - } - - // Start the Dear ImGui frame - ImGui_ImplDX11_NewFrame(); - ImGui_ImplWin32_NewFrame(); - ImGui::NewFrame(); - - // 1. Show the big demo window (Most of the sample code is in ImGui::ShowDemoWindow()! You can browse its code to learn more about Dear ImGui!). - if (show_demo_window) - ImGui::ShowDemoWindow(&show_demo_window); - - // 2. Show a simple window that we create ourselves. We use a Begin/End pair to created a named window. - { - static float f = 0.0f; - static int counter = 0; - - ImGui::Begin("Hello, world!"); // Create a window called "Hello, world!" and append into it. - - ImGui::Text("This is some useful text."); // Display some text (you can use a format strings too) - ImGui::Checkbox("Demo Window", &show_demo_window); // Edit bools storing our window open/close state - ImGui::Checkbox("Another Window", &show_another_window); - - ImGui::SliderFloat("float", &f, 0.0f, 1.0f); // Edit 1 float using a slider from 0.0f to 1.0f - ImGui::ColorEdit3("clear color", (float*)&clear_color); // Edit 3 floats representing a color - - if (ImGui::Button("Button")) // Buttons return true when clicked (most widgets return true when edited/activated) - counter++; - ImGui::SameLine(); - ImGui::Text("counter = %d", counter); - - ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); - ImGui::End(); - } - - // 3. Show another simple window. - if (show_another_window) - { - ImGui::Begin("Another Window", &show_another_window); // Pass a pointer to our bool variable (the window will have a closing button that will clear the bool when clicked) - ImGui::Text("Hello from another window!"); - if (ImGui::Button("Close Me")) - show_another_window = false; - ImGui::End(); - } - - // Rendering - ImGui::Render(); - g_pd3dDeviceContext->OMSetRenderTargets(1, &g_mainRenderTargetView, NULL); - g_pd3dDeviceContext->ClearRenderTargetView(g_mainRenderTargetView, (float*)&clear_color); - ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData()); - - g_pSwapChain->Present(1, 0); // Present with vsync - //g_pSwapChain->Present(0, 0); // Present without vsync - } - - // Cleanup - ImGui_ImplDX11_Shutdown(); - ImGui_ImplWin32_Shutdown(); - ImGui::DestroyContext(); - - CleanupDeviceD3D(); - ::DestroyWindow(hwnd); - ::UnregisterClass(wc.lpszClassName, wc.hInstance); - - return 0; -} - -// Helper functions - -bool CreateDeviceD3D(HWND hWnd) -{ - // Setup swap chain - DXGI_SWAP_CHAIN_DESC sd; - ZeroMemory(&sd, sizeof(sd)); - sd.BufferCount = 2; - sd.BufferDesc.Width = 0; - sd.BufferDesc.Height = 0; - sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - sd.BufferDesc.RefreshRate.Numerator = 60; - sd.BufferDesc.RefreshRate.Denominator = 1; - sd.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH; - sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; - sd.OutputWindow = hWnd; - sd.SampleDesc.Count = 1; - sd.SampleDesc.Quality = 0; - sd.Windowed = TRUE; - sd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD; - - UINT createDeviceFlags = 0; - //createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG; - D3D_FEATURE_LEVEL featureLevel; - const D3D_FEATURE_LEVEL featureLevelArray[2] = { D3D_FEATURE_LEVEL_11_0, D3D_FEATURE_LEVEL_10_0, }; - if (D3D11CreateDeviceAndSwapChain(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, createDeviceFlags, featureLevelArray, 2, D3D11_SDK_VERSION, &sd, &g_pSwapChain, &g_pd3dDevice, &featureLevel, &g_pd3dDeviceContext) != S_OK) - return false; - - CreateRenderTarget(); - return true; -} - -void CleanupDeviceD3D() -{ - CleanupRenderTarget(); - if (g_pSwapChain) { g_pSwapChain->Release(); g_pSwapChain = NULL; } - if (g_pd3dDeviceContext) { g_pd3dDeviceContext->Release(); g_pd3dDeviceContext = NULL; } - if (g_pd3dDevice) { g_pd3dDevice->Release(); g_pd3dDevice = NULL; } -} - -void CreateRenderTarget() -{ - ID3D11Texture2D* pBackBuffer; - g_pSwapChain->GetBuffer(0, IID_PPV_ARGS(&pBackBuffer)); - g_pd3dDevice->CreateRenderTargetView(pBackBuffer, NULL, &g_mainRenderTargetView); - pBackBuffer->Release(); -} - -void CleanupRenderTarget() -{ - if (g_mainRenderTargetView) { g_mainRenderTargetView->Release(); g_mainRenderTargetView = NULL; } -} - -// Forward declare message handler from imgui_impl_win32.cpp -extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); - -// Win32 message handler -LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - if (ImGui_ImplWin32_WndProcHandler(hWnd, msg, wParam, lParam)) - return true; - - switch (msg) - { - case WM_SIZE: - if (g_pd3dDevice != NULL && wParam != SIZE_MINIMIZED) - { - CleanupRenderTarget(); - g_pSwapChain->ResizeBuffers(0, (UINT)LOWORD(lParam), (UINT)HIWORD(lParam), DXGI_FORMAT_UNKNOWN, 0); - CreateRenderTarget(); - } - return 0; - case WM_SYSCOMMAND: - if ((wParam & 0xfff0) == SC_KEYMENU) // Disable ALT application menu - return 0; - break; - case WM_DESTROY: - ::PostQuitMessage(0); - return 0; - } - return ::DefWindowProc(hWnd, msg, wParam, lParam); -} diff --git a/cmake/imgui/examples/example_win32_directx12/build_win32.bat b/cmake/imgui/examples/example_win32_directx12/build_win32.bat deleted file mode 100644 index 2cd7fcdf..00000000 --- a/cmake/imgui/examples/example_win32_directx12/build_win32.bat +++ /dev/null @@ -1,4 +0,0 @@ -@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. -mkdir Debug -cl /nologo /Zi /MD /I .. /I ..\.. /I "%WindowsSdkDir%Include\um" /I "%WindowsSdkDir%Include\shared" /D UNICODE /D _UNICODE *.cpp ..\imgui_impl_dx12.cpp ..\imgui_impl_win32.cpp ..\..\imgui*.cpp /FeDebug/example_win32_directx12.exe /FoDebug/ /link d3d12.lib d3dcompiler.lib dxgi.lib - diff --git a/cmake/imgui/examples/example_win32_directx12/example_win32_directx12.vcxproj b/cmake/imgui/examples/example_win32_directx12/example_win32_directx12.vcxproj deleted file mode 100644 index dabd6d84..00000000 --- a/cmake/imgui/examples/example_win32_directx12/example_win32_directx12.vcxproj +++ /dev/null @@ -1,167 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {b4cf9797-519d-4afe-a8f4-5141a6b521d3} - example_win32_directx12 - 10.0.14393.0 - - - - Application - true - Unicode - v140 - - - Application - true - Unicode - v140 - - - Application - false - true - Unicode - v140 - - - Application - false - true - Unicode - v140 - - - - - - - - - - - - - - - - - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - - - - Level4 - Disabled - ..\..;..;%(AdditionalIncludeDirectories) - - - true - d3d12.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies) - %(AdditionalLibraryDirectories) - Console - - - - - Level4 - Disabled - ..\..;..;%(AdditionalIncludeDirectories) - - - true - d3d12.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies) - %(AdditionalLibraryDirectories) - Console - - - - - Level4 - MaxSpeed - true - true - ..\..;..;%(AdditionalIncludeDirectories) - - - true - true - true - d3d12.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies) - %(AdditionalLibraryDirectories) - Console - - - - - Level4 - MaxSpeed - true - true - ..\..;..;%(AdditionalIncludeDirectories) - - - true - true - true - d3d12.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies) - %(AdditionalLibraryDirectories) - Console - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cmake/imgui/examples/example_win32_directx12/example_win32_directx12.vcxproj.filters b/cmake/imgui/examples/example_win32_directx12/example_win32_directx12.vcxproj.filters deleted file mode 100644 index 28a25572..00000000 --- a/cmake/imgui/examples/example_win32_directx12/example_win32_directx12.vcxproj.filters +++ /dev/null @@ -1,54 +0,0 @@ - - - - - {fb3d294f-51ec-478e-a627-25831c80fefd} - - - {4f33ddea-9910-456d-b868-4267eb3c2b19} - - - - - imgui - - - imgui - - - imgui - - - sources - - - sources - - - - - imgui - - - sources - - - imgui - - - imgui - - - sources - - - sources - - - imgui - - - - - - \ No newline at end of file diff --git a/cmake/imgui/examples/example_win32_directx12/main.cpp b/cmake/imgui/examples/example_win32_directx12/main.cpp deleted file mode 100644 index 139dea6e..00000000 --- a/cmake/imgui/examples/example_win32_directx12/main.cpp +++ /dev/null @@ -1,460 +0,0 @@ -// dear imgui: standalone example application for DirectX 12 -// If you are new to dear imgui, see examples/README.txt and documentation at the top of imgui.cpp. -// FIXME: 64-bit only for now! (Because sizeof(ImTextureId) == sizeof(void*)) - -#include "imgui.h" -#include "imgui_impl_win32.h" -#include "imgui_impl_dx12.h" -#include -#include -#include - -//#define DX12_ENABLE_DEBUG_LAYER - -#ifdef DX12_ENABLE_DEBUG_LAYER -#include -#pragma comment(lib, "dxguid.lib") -#endif - -struct FrameContext -{ - ID3D12CommandAllocator* CommandAllocator; - UINT64 FenceValue; -}; - -// Data -static int const NUM_FRAMES_IN_FLIGHT = 3; -static FrameContext g_frameContext[NUM_FRAMES_IN_FLIGHT] = {}; -static UINT g_frameIndex = 0; - -static int const NUM_BACK_BUFFERS = 3; -static ID3D12Device* g_pd3dDevice = NULL; -static ID3D12DescriptorHeap* g_pd3dRtvDescHeap = NULL; -static ID3D12DescriptorHeap* g_pd3dSrvDescHeap = NULL; -static ID3D12CommandQueue* g_pd3dCommandQueue = NULL; -static ID3D12GraphicsCommandList* g_pd3dCommandList = NULL; -static ID3D12Fence* g_fence = NULL; -static HANDLE g_fenceEvent = NULL; -static UINT64 g_fenceLastSignaledValue = 0; -static IDXGISwapChain3* g_pSwapChain = NULL; -static HANDLE g_hSwapChainWaitableObject = NULL; -static ID3D12Resource* g_mainRenderTargetResource[NUM_BACK_BUFFERS] = {}; -static D3D12_CPU_DESCRIPTOR_HANDLE g_mainRenderTargetDescriptor[NUM_BACK_BUFFERS] = {}; - -// Forward declarations of helper functions -bool CreateDeviceD3D(HWND hWnd); -void CleanupDeviceD3D(); -void CreateRenderTarget(); -void CleanupRenderTarget(); -void WaitForLastSubmittedFrame(); -FrameContext* WaitForNextFrameResources(); -void ResizeSwapChain(HWND hWnd, int width, int height); -LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); - -// Main code -int main(int, char**) -{ - // Create application window - WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, WndProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, _T("ImGui Example"), NULL }; - ::RegisterClassEx(&wc); - HWND hwnd = ::CreateWindow(wc.lpszClassName, _T("Dear ImGui DirectX12 Example"), WS_OVERLAPPEDWINDOW, 100, 100, 1280, 800, NULL, NULL, wc.hInstance, NULL); - - // Initialize Direct3D - if (!CreateDeviceD3D(hwnd)) - { - CleanupDeviceD3D(); - ::UnregisterClass(wc.lpszClassName, wc.hInstance); - return 1; - } - - // Show the window - ::ShowWindow(hwnd, SW_SHOWDEFAULT); - ::UpdateWindow(hwnd); - - // Setup Dear ImGui context - IMGUI_CHECKVERSION(); - ImGui::CreateContext(); - ImGuiIO& io = ImGui::GetIO(); (void)io; - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls - - // Setup Dear ImGui style - ImGui::StyleColorsDark(); - //ImGui::StyleColorsClassic(); - - // Setup Platform/Renderer bindings - ImGui_ImplWin32_Init(hwnd); - ImGui_ImplDX12_Init(g_pd3dDevice, NUM_FRAMES_IN_FLIGHT, - DXGI_FORMAT_R8G8B8A8_UNORM, g_pd3dSrvDescHeap, - g_pd3dSrvDescHeap->GetCPUDescriptorHandleForHeapStart(), - g_pd3dSrvDescHeap->GetGPUDescriptorHandleForHeapStart()); - - // Load Fonts - // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. - // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. - // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). - // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. - // - Read 'docs/FONTS.txt' for more instructions and details. - // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! - //io.Fonts->AddFontDefault(); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Roboto-Medium.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Cousine-Regular.ttf", 15.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/DroidSans.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/ProggyTiny.ttf", 10.0f); - //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); - //IM_ASSERT(font != NULL); - - // Our state - bool show_demo_window = true; - bool show_another_window = false; - ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); - - // Main loop - MSG msg; - ZeroMemory(&msg, sizeof(msg)); - while (msg.message != WM_QUIT) - { - // Poll and handle messages (inputs, window resize, etc.) - // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. - // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. - // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. - // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. - if (::PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE)) - { - ::TranslateMessage(&msg); - ::DispatchMessage(&msg); - continue; - } - - // Start the Dear ImGui frame - ImGui_ImplDX12_NewFrame(); - ImGui_ImplWin32_NewFrame(); - ImGui::NewFrame(); - - // 1. Show the big demo window (Most of the sample code is in ImGui::ShowDemoWindow()! You can browse its code to learn more about Dear ImGui!). - if (show_demo_window) - ImGui::ShowDemoWindow(&show_demo_window); - - // 2. Show a simple window that we create ourselves. We use a Begin/End pair to created a named window. - { - static float f = 0.0f; - static int counter = 0; - - ImGui::Begin("Hello, world!"); // Create a window called "Hello, world!" and append into it. - - ImGui::Text("This is some useful text."); // Display some text (you can use a format strings too) - ImGui::Checkbox("Demo Window", &show_demo_window); // Edit bools storing our window open/close state - ImGui::Checkbox("Another Window", &show_another_window); - - ImGui::SliderFloat("float", &f, 0.0f, 1.0f); // Edit 1 float using a slider from 0.0f to 1.0f - ImGui::ColorEdit3("clear color", (float*)&clear_color); // Edit 3 floats representing a color - - if (ImGui::Button("Button")) // Buttons return true when clicked (most widgets return true when edited/activated) - counter++; - ImGui::SameLine(); - ImGui::Text("counter = %d", counter); - - ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); - ImGui::End(); - } - - // 3. Show another simple window. - if (show_another_window) - { - ImGui::Begin("Another Window", &show_another_window); // Pass a pointer to our bool variable (the window will have a closing button that will clear the bool when clicked) - ImGui::Text("Hello from another window!"); - if (ImGui::Button("Close Me")) - show_another_window = false; - ImGui::End(); - } - - // Rendering - FrameContext* frameCtxt = WaitForNextFrameResources(); - UINT backBufferIdx = g_pSwapChain->GetCurrentBackBufferIndex(); - frameCtxt->CommandAllocator->Reset(); - - D3D12_RESOURCE_BARRIER barrier = {}; - barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; - barrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; - barrier.Transition.pResource = g_mainRenderTargetResource[backBufferIdx]; - barrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; - barrier.Transition.StateBefore = D3D12_RESOURCE_STATE_PRESENT; - barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_RENDER_TARGET; - - g_pd3dCommandList->Reset(frameCtxt->CommandAllocator, NULL); - g_pd3dCommandList->ResourceBarrier(1, &barrier); - g_pd3dCommandList->ClearRenderTargetView(g_mainRenderTargetDescriptor[backBufferIdx], (float*)&clear_color, 0, NULL); - g_pd3dCommandList->OMSetRenderTargets(1, &g_mainRenderTargetDescriptor[backBufferIdx], FALSE, NULL); - g_pd3dCommandList->SetDescriptorHeaps(1, &g_pd3dSrvDescHeap); - ImGui::Render(); - ImGui_ImplDX12_RenderDrawData(ImGui::GetDrawData(), g_pd3dCommandList); - barrier.Transition.StateBefore = D3D12_RESOURCE_STATE_RENDER_TARGET; - barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_PRESENT; - g_pd3dCommandList->ResourceBarrier(1, &barrier); - g_pd3dCommandList->Close(); - - g_pd3dCommandQueue->ExecuteCommandLists(1, (ID3D12CommandList* const*)&g_pd3dCommandList); - - g_pSwapChain->Present(1, 0); // Present with vsync - //g_pSwapChain->Present(0, 0); // Present without vsync - - UINT64 fenceValue = g_fenceLastSignaledValue + 1; - g_pd3dCommandQueue->Signal(g_fence, fenceValue); - g_fenceLastSignaledValue = fenceValue; - frameCtxt->FenceValue = fenceValue; - } - - WaitForLastSubmittedFrame(); - ImGui_ImplDX12_Shutdown(); - ImGui_ImplWin32_Shutdown(); - ImGui::DestroyContext(); - - CleanupDeviceD3D(); - ::DestroyWindow(hwnd); - ::UnregisterClass(wc.lpszClassName, wc.hInstance); - - return 0; -} - -// Helper functions - -bool CreateDeviceD3D(HWND hWnd) -{ - // Setup swap chain - DXGI_SWAP_CHAIN_DESC1 sd; - { - ZeroMemory(&sd, sizeof(sd)); - sd.BufferCount = NUM_BACK_BUFFERS; - sd.Width = 0; - sd.Height = 0; - sd.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - sd.Flags = DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT; - sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; - sd.SampleDesc.Count = 1; - sd.SampleDesc.Quality = 0; - sd.SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD; - sd.AlphaMode = DXGI_ALPHA_MODE_UNSPECIFIED; - sd.Scaling = DXGI_SCALING_STRETCH; - sd.Stereo = FALSE; - } - -#ifdef DX12_ENABLE_DEBUG_LAYER - ID3D12Debug* pdx12Debug = NULL; - if (SUCCEEDED(D3D12GetDebugInterface(IID_PPV_ARGS(&pdx12Debug)))) - { - pdx12Debug->EnableDebugLayer(); - pdx12Debug->Release(); - } -#endif - - D3D_FEATURE_LEVEL featureLevel = D3D_FEATURE_LEVEL_11_0; - if (D3D12CreateDevice(NULL, featureLevel, IID_PPV_ARGS(&g_pd3dDevice)) != S_OK) - return false; - - { - D3D12_DESCRIPTOR_HEAP_DESC desc = {}; - desc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_RTV; - desc.NumDescriptors = NUM_BACK_BUFFERS; - desc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE; - desc.NodeMask = 1; - if (g_pd3dDevice->CreateDescriptorHeap(&desc, IID_PPV_ARGS(&g_pd3dRtvDescHeap)) != S_OK) - return false; - - SIZE_T rtvDescriptorSize = g_pd3dDevice->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_RTV); - D3D12_CPU_DESCRIPTOR_HANDLE rtvHandle = g_pd3dRtvDescHeap->GetCPUDescriptorHandleForHeapStart(); - for (UINT i = 0; i < NUM_BACK_BUFFERS; i++) - { - g_mainRenderTargetDescriptor[i] = rtvHandle; - rtvHandle.ptr += rtvDescriptorSize; - } - } - - { - D3D12_DESCRIPTOR_HEAP_DESC desc = {}; - desc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV; - desc.NumDescriptors = 1; - desc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE; - if (g_pd3dDevice->CreateDescriptorHeap(&desc, IID_PPV_ARGS(&g_pd3dSrvDescHeap)) != S_OK) - return false; - } - - { - D3D12_COMMAND_QUEUE_DESC desc = {}; - desc.Type = D3D12_COMMAND_LIST_TYPE_DIRECT; - desc.Flags = D3D12_COMMAND_QUEUE_FLAG_NONE; - desc.NodeMask = 1; - if (g_pd3dDevice->CreateCommandQueue(&desc, IID_PPV_ARGS(&g_pd3dCommandQueue)) != S_OK) - return false; - } - - for (UINT i = 0; i < NUM_FRAMES_IN_FLIGHT; i++) - if (g_pd3dDevice->CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE_DIRECT, IID_PPV_ARGS(&g_frameContext[i].CommandAllocator)) != S_OK) - return false; - - if (g_pd3dDevice->CreateCommandList(0, D3D12_COMMAND_LIST_TYPE_DIRECT, g_frameContext[0].CommandAllocator, NULL, IID_PPV_ARGS(&g_pd3dCommandList)) != S_OK || - g_pd3dCommandList->Close() != S_OK) - return false; - - if (g_pd3dDevice->CreateFence(0, D3D12_FENCE_FLAG_NONE, IID_PPV_ARGS(&g_fence)) != S_OK) - return false; - - g_fenceEvent = CreateEvent(NULL, FALSE, FALSE, NULL); - if (g_fenceEvent == NULL) - return false; - - { - IDXGIFactory4* dxgiFactory = NULL; - IDXGISwapChain1* swapChain1 = NULL; - if (CreateDXGIFactory1(IID_PPV_ARGS(&dxgiFactory)) != S_OK || - dxgiFactory->CreateSwapChainForHwnd(g_pd3dCommandQueue, hWnd, &sd, NULL, NULL, &swapChain1) != S_OK || - swapChain1->QueryInterface(IID_PPV_ARGS(&g_pSwapChain)) != S_OK) - return false; - swapChain1->Release(); - dxgiFactory->Release(); - g_pSwapChain->SetMaximumFrameLatency(NUM_BACK_BUFFERS); - g_hSwapChainWaitableObject = g_pSwapChain->GetFrameLatencyWaitableObject(); - } - - CreateRenderTarget(); - return true; -} - -void CleanupDeviceD3D() -{ - CleanupRenderTarget(); - if (g_pSwapChain) { g_pSwapChain->Release(); g_pSwapChain = NULL; } - if (g_hSwapChainWaitableObject != NULL) { CloseHandle(g_hSwapChainWaitableObject); } - for (UINT i = 0; i < NUM_FRAMES_IN_FLIGHT; i++) - if (g_frameContext[i].CommandAllocator) { g_frameContext[i].CommandAllocator->Release(); g_frameContext[i].CommandAllocator = NULL; } - if (g_pd3dCommandQueue) { g_pd3dCommandQueue->Release(); g_pd3dCommandQueue = NULL; } - if (g_pd3dCommandList) { g_pd3dCommandList->Release(); g_pd3dCommandList = NULL; } - if (g_pd3dRtvDescHeap) { g_pd3dRtvDescHeap->Release(); g_pd3dRtvDescHeap = NULL; } - if (g_pd3dSrvDescHeap) { g_pd3dSrvDescHeap->Release(); g_pd3dSrvDescHeap = NULL; } - if (g_fence) { g_fence->Release(); g_fence = NULL; } - if (g_fenceEvent) { CloseHandle(g_fenceEvent); g_fenceEvent = NULL; } - if (g_pd3dDevice) { g_pd3dDevice->Release(); g_pd3dDevice = NULL; } - -#ifdef DX12_ENABLE_DEBUG_LAYER - IDXGIDebug1* pDebug = NULL; - if (SUCCEEDED(DXGIGetDebugInterface1(0, IID_PPV_ARGS(&pDebug)))) - { - pDebug->ReportLiveObjects(DXGI_DEBUG_ALL, DXGI_DEBUG_RLO_SUMMARY); - pDebug->Release(); - } -#endif -} - -void CreateRenderTarget() -{ - for (UINT i = 0; i < NUM_BACK_BUFFERS; i++) - { - ID3D12Resource* pBackBuffer = NULL; - g_pSwapChain->GetBuffer(i, IID_PPV_ARGS(&pBackBuffer)); - g_pd3dDevice->CreateRenderTargetView(pBackBuffer, NULL, g_mainRenderTargetDescriptor[i]); - g_mainRenderTargetResource[i] = pBackBuffer; - } -} - -void CleanupRenderTarget() -{ - WaitForLastSubmittedFrame(); - - for (UINT i = 0; i < NUM_BACK_BUFFERS; i++) - if (g_mainRenderTargetResource[i]) { g_mainRenderTargetResource[i]->Release(); g_mainRenderTargetResource[i] = NULL; } -} - -void WaitForLastSubmittedFrame() -{ - FrameContext* frameCtxt = &g_frameContext[g_frameIndex % NUM_FRAMES_IN_FLIGHT]; - - UINT64 fenceValue = frameCtxt->FenceValue; - if (fenceValue == 0) - return; // No fence was signaled - - frameCtxt->FenceValue = 0; - if (g_fence->GetCompletedValue() >= fenceValue) - return; - - g_fence->SetEventOnCompletion(fenceValue, g_fenceEvent); - WaitForSingleObject(g_fenceEvent, INFINITE); -} - -FrameContext* WaitForNextFrameResources() -{ - UINT nextFrameIndex = g_frameIndex + 1; - g_frameIndex = nextFrameIndex; - - HANDLE waitableObjects[] = { g_hSwapChainWaitableObject, NULL }; - DWORD numWaitableObjects = 1; - - FrameContext* frameCtxt = &g_frameContext[nextFrameIndex % NUM_FRAMES_IN_FLIGHT]; - UINT64 fenceValue = frameCtxt->FenceValue; - if (fenceValue != 0) // means no fence was signaled - { - frameCtxt->FenceValue = 0; - g_fence->SetEventOnCompletion(fenceValue, g_fenceEvent); - waitableObjects[1] = g_fenceEvent; - numWaitableObjects = 2; - } - - WaitForMultipleObjects(numWaitableObjects, waitableObjects, TRUE, INFINITE); - - return frameCtxt; -} - -void ResizeSwapChain(HWND hWnd, int width, int height) -{ - DXGI_SWAP_CHAIN_DESC1 sd; - g_pSwapChain->GetDesc1(&sd); - sd.Width = width; - sd.Height = height; - - IDXGIFactory4* dxgiFactory = NULL; - g_pSwapChain->GetParent(IID_PPV_ARGS(&dxgiFactory)); - - g_pSwapChain->Release(); - CloseHandle(g_hSwapChainWaitableObject); - - IDXGISwapChain1* swapChain1 = NULL; - dxgiFactory->CreateSwapChainForHwnd(g_pd3dCommandQueue, hWnd, &sd, NULL, NULL, &swapChain1); - swapChain1->QueryInterface(IID_PPV_ARGS(&g_pSwapChain)); - swapChain1->Release(); - dxgiFactory->Release(); - - g_pSwapChain->SetMaximumFrameLatency(NUM_BACK_BUFFERS); - - g_hSwapChainWaitableObject = g_pSwapChain->GetFrameLatencyWaitableObject(); - assert(g_hSwapChainWaitableObject != NULL); -} - -// Forward declare message handler from imgui_impl_win32.cpp -extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); - -// Win32 message handler -LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - if (ImGui_ImplWin32_WndProcHandler(hWnd, msg, wParam, lParam)) - return true; - - switch (msg) - { - case WM_SIZE: - if (g_pd3dDevice != NULL && wParam != SIZE_MINIMIZED) - { - ImGui_ImplDX12_InvalidateDeviceObjects(); - CleanupRenderTarget(); - ResizeSwapChain(hWnd, (UINT)LOWORD(lParam), (UINT)HIWORD(lParam)); - CreateRenderTarget(); - ImGui_ImplDX12_CreateDeviceObjects(); - } - return 0; - case WM_SYSCOMMAND: - if ((wParam & 0xfff0) == SC_KEYMENU) // Disable ALT application menu - return 0; - break; - case WM_DESTROY: - ::PostQuitMessage(0); - return 0; - } - return ::DefWindowProc(hWnd, msg, wParam, lParam); -} diff --git a/cmake/imgui/examples/example_win32_directx9/build_win32.bat b/cmake/imgui/examples/example_win32_directx9/build_win32.bat deleted file mode 100644 index 4db27653..00000000 --- a/cmake/imgui/examples/example_win32_directx9/build_win32.bat +++ /dev/null @@ -1,3 +0,0 @@ -@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. -mkdir Debug -cl /nologo /Zi /MD /I .. /I ..\.. /I "%DXSDK_DIR%/Include" /D UNICODE /D _UNICODE *.cpp ..\imgui_impl_dx9.cpp ..\imgui_impl_win32.cpp ..\..\imgui*.cpp /FeDebug/example_win32_directx9.exe /FoDebug/ /link /LIBPATH:"%DXSDK_DIR%/Lib/x86" d3d9.lib diff --git a/cmake/imgui/examples/example_win32_directx9/example_win32_directx9.vcxproj b/cmake/imgui/examples/example_win32_directx9/example_win32_directx9.vcxproj deleted file mode 100644 index ebc42bcf..00000000 --- a/cmake/imgui/examples/example_win32_directx9/example_win32_directx9.vcxproj +++ /dev/null @@ -1,170 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {4165A294-21F2-44CA-9B38-E3F935ABADF5} - example_win32_directx9 - 10.0 - - - - Application - true - Unicode - v142 - - - Application - true - Unicode - v142 - - - Application - false - true - Unicode - v142 - - - Application - false - true - Unicode - v142 - - - - - - - - - - - - - - - - - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - - - $(ProjectDir)$(Configuration)\ - $(ProjectDir)$(Configuration)\ - - - - Level4 - Disabled - ..\..;..;%(AdditionalIncludeDirectories);$(DXSDK_DIR)Include; - - - true - $(DXSDK_DIR)/Lib/x86;%(AdditionalLibraryDirectories) - d3d9.lib;%(AdditionalDependencies) - Console - - - - - Level4 - Disabled - ..\..;..;%(AdditionalIncludeDirectories);$(DXSDK_DIR)Include; - - - true - $(DXSDK_DIR)/Lib/x64;%(AdditionalLibraryDirectories) - d3d9.lib;%(AdditionalDependencies) - Console - - - - - Level4 - MaxSpeed - true - true - ..\..;..;%(AdditionalIncludeDirectories);$(DXSDK_DIR)Include; - false - - - true - true - true - $(DXSDK_DIR)/Lib/x86;%(AdditionalLibraryDirectories) - d3d9.lib;%(AdditionalDependencies) - Console - - - - - Level4 - MaxSpeed - true - true - ..\..;..;%(AdditionalIncludeDirectories);$(DXSDK_DIR)Include; - false - - - true - true - true - $(DXSDK_DIR)/Lib/x64;%(AdditionalLibraryDirectories) - d3d9.lib;%(AdditionalDependencies) - Console - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cmake/imgui/examples/example_win32_directx9/example_win32_directx9.vcxproj.filters b/cmake/imgui/examples/example_win32_directx9/example_win32_directx9.vcxproj.filters deleted file mode 100644 index 914cd260..00000000 --- a/cmake/imgui/examples/example_win32_directx9/example_win32_directx9.vcxproj.filters +++ /dev/null @@ -1,58 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {a82cba23-9de0-45c2-b1e3-2eb1666702de} - - - - - sources - - - imgui - - - imgui - - - imgui - - - sources - - - sources - - - imgui - - - - - imgui - - - imgui - - - imgui - - - sources - - - sources - - - - - - sources - - - \ No newline at end of file diff --git a/cmake/imgui/examples/example_win32_directx9/main.cpp b/cmake/imgui/examples/example_win32_directx9/main.cpp deleted file mode 100644 index 33123625..00000000 --- a/cmake/imgui/examples/example_win32_directx9/main.cpp +++ /dev/null @@ -1,233 +0,0 @@ -// dear imgui: standalone example application for DirectX 9 -// If you are new to dear imgui, see examples/README.txt and documentation at the top of imgui.cpp. - -#include "imgui.h" -#include "imgui_impl_dx9.h" -#include "imgui_impl_win32.h" -#include -#define DIRECTINPUT_VERSION 0x0800 -#include -#include - -// Data -static LPDIRECT3D9 g_pD3D = NULL; -static LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; -static D3DPRESENT_PARAMETERS g_d3dpp = {}; - -// Forward declarations of helper functions -bool CreateDeviceD3D(HWND hWnd); -void CleanupDeviceD3D(); -void ResetDevice(); -LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); - -// Main code -int main(int, char**) -{ - // Create application window - WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, WndProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, _T("ImGui Example"), NULL }; - ::RegisterClassEx(&wc); - HWND hwnd = ::CreateWindow(wc.lpszClassName, _T("Dear ImGui DirectX9 Example"), WS_OVERLAPPEDWINDOW, 100, 100, 1280, 800, NULL, NULL, wc.hInstance, NULL); - - // Initialize Direct3D - if (!CreateDeviceD3D(hwnd)) - { - CleanupDeviceD3D(); - ::UnregisterClass(wc.lpszClassName, wc.hInstance); - return 1; - } - - // Show the window - ::ShowWindow(hwnd, SW_SHOWDEFAULT); - ::UpdateWindow(hwnd); - - // Setup Dear ImGui context - IMGUI_CHECKVERSION(); - ImGui::CreateContext(); - ImGuiIO& io = ImGui::GetIO(); (void)io; - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls - - // Setup Dear ImGui style - ImGui::StyleColorsDark(); - //ImGui::StyleColorsClassic(); - - // Setup Platform/Renderer bindings - ImGui_ImplWin32_Init(hwnd); - ImGui_ImplDX9_Init(g_pd3dDevice); - - // Load Fonts - // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. - // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. - // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). - // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. - // - Read 'docs/FONTS.txt' for more instructions and details. - // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! - //io.Fonts->AddFontDefault(); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Roboto-Medium.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Cousine-Regular.ttf", 15.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/DroidSans.ttf", 16.0f); - //io.Fonts->AddFontFromFileTTF("../../misc/fonts/ProggyTiny.ttf", 10.0f); - //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); - //IM_ASSERT(font != NULL); - - // Our state - bool show_demo_window = true; - bool show_another_window = false; - ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); - - // Main loop - MSG msg; - ZeroMemory(&msg, sizeof(msg)); - while (msg.message != WM_QUIT) - { - // Poll and handle messages (inputs, window resize, etc.) - // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. - // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. - // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. - // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. - if (::PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE)) - { - ::TranslateMessage(&msg); - ::DispatchMessage(&msg); - continue; - } - - // Start the Dear ImGui frame - ImGui_ImplDX9_NewFrame(); - ImGui_ImplWin32_NewFrame(); - ImGui::NewFrame(); - - // 1. Show the big demo window (Most of the sample code is in ImGui::ShowDemoWindow()! You can browse its code to learn more about Dear ImGui!). - if (show_demo_window) - ImGui::ShowDemoWindow(&show_demo_window); - - // 2. Show a simple window that we create ourselves. We use a Begin/End pair to created a named window. - { - static float f = 0.0f; - static int counter = 0; - - ImGui::Begin("Hello, world!"); // Create a window called "Hello, world!" and append into it. - - ImGui::Text("This is some useful text."); // Display some text (you can use a format strings too) - ImGui::Checkbox("Demo Window", &show_demo_window); // Edit bools storing our window open/close state - ImGui::Checkbox("Another Window", &show_another_window); - - ImGui::SliderFloat("float", &f, 0.0f, 1.0f); // Edit 1 float using a slider from 0.0f to 1.0f - ImGui::ColorEdit3("clear color", (float*)&clear_color); // Edit 3 floats representing a color - - if (ImGui::Button("Button")) // Buttons return true when clicked (most widgets return true when edited/activated) - counter++; - ImGui::SameLine(); - ImGui::Text("counter = %d", counter); - - ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); - ImGui::End(); - } - - // 3. Show another simple window. - if (show_another_window) - { - ImGui::Begin("Another Window", &show_another_window); // Pass a pointer to our bool variable (the window will have a closing button that will clear the bool when clicked) - ImGui::Text("Hello from another window!"); - if (ImGui::Button("Close Me")) - show_another_window = false; - ImGui::End(); - } - - // Rendering - ImGui::EndFrame(); - g_pd3dDevice->SetRenderState(D3DRS_ZENABLE, FALSE); - g_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE); - g_pd3dDevice->SetRenderState(D3DRS_SCISSORTESTENABLE, FALSE); - D3DCOLOR clear_col_dx = D3DCOLOR_RGBA((int)(clear_color.x*255.0f), (int)(clear_color.y*255.0f), (int)(clear_color.z*255.0f), (int)(clear_color.w*255.0f)); - g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, clear_col_dx, 1.0f, 0); - if (g_pd3dDevice->BeginScene() >= 0) - { - ImGui::Render(); - ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData()); - g_pd3dDevice->EndScene(); - } - HRESULT result = g_pd3dDevice->Present(NULL, NULL, NULL, NULL); - - // Handle loss of D3D9 device - if (result == D3DERR_DEVICELOST && g_pd3dDevice->TestCooperativeLevel() == D3DERR_DEVICENOTRESET) - ResetDevice(); - } - - ImGui_ImplDX9_Shutdown(); - ImGui_ImplWin32_Shutdown(); - ImGui::DestroyContext(); - - CleanupDeviceD3D(); - ::DestroyWindow(hwnd); - ::UnregisterClass(wc.lpszClassName, wc.hInstance); - - return 0; -} - -// Helper functions - -bool CreateDeviceD3D(HWND hWnd) -{ - if ((g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)) == NULL) - return false; - - // Create the D3DDevice - ZeroMemory(&g_d3dpp, sizeof(g_d3dpp)); - g_d3dpp.Windowed = TRUE; - g_d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; - g_d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; - g_d3dpp.EnableAutoDepthStencil = TRUE; - g_d3dpp.AutoDepthStencilFormat = D3DFMT_D16; - g_d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_ONE; // Present with vsync - //g_d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; // Present without vsync, maximum unthrottled framerate - if (g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &g_d3dpp, &g_pd3dDevice) < 0) - return false; - - return true; -} - -void CleanupDeviceD3D() -{ - if (g_pd3dDevice) { g_pd3dDevice->Release(); g_pd3dDevice = NULL; } - if (g_pD3D) { g_pD3D->Release(); g_pD3D = NULL; } -} - -void ResetDevice() -{ - ImGui_ImplDX9_InvalidateDeviceObjects(); - HRESULT hr = g_pd3dDevice->Reset(&g_d3dpp); - if (hr == D3DERR_INVALIDCALL) - IM_ASSERT(0); - ImGui_ImplDX9_CreateDeviceObjects(); -} - -// Forward declare message handler from imgui_impl_win32.cpp -extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); - -// Win32 message handler -LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - if (ImGui_ImplWin32_WndProcHandler(hWnd, msg, wParam, lParam)) - return true; - - switch (msg) - { - case WM_SIZE: - if (g_pd3dDevice != NULL && wParam != SIZE_MINIMIZED) - { - g_d3dpp.BackBufferWidth = LOWORD(lParam); - g_d3dpp.BackBufferHeight = HIWORD(lParam); - ResetDevice(); - } - return 0; - case WM_SYSCOMMAND: - if ((wParam & 0xfff0) == SC_KEYMENU) // Disable ALT application menu - return 0; - break; - case WM_DESTROY: - ::PostQuitMessage(0); - return 0; - } - return ::DefWindowProc(hWnd, msg, wParam, lParam); -} diff --git a/cmake/imgui/examples/imgui_examples.sln b/cmake/imgui/examples/imgui_examples.sln deleted file mode 100644 index 49b2ff89..00000000 --- a/cmake/imgui/examples/imgui_examples.sln +++ /dev/null @@ -1,68 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "example_win32_directx9", "example_win32_directx9\example_win32_directx9.vcxproj", "{4165A294-21F2-44CA-9B38-E3F935ABADF5}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "example_win32_directx10", "example_win32_directx10\example_win32_directx10.vcxproj", "{345A953E-A004-4648-B442-DC5F9F11068C}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "example_win32_directx11", "example_win32_directx11\example_win32_directx11.vcxproj", "{9F316E83-5AE5-4939-A723-305A94F48005}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "example_glfw_opengl2", "example_glfw_opengl2\example_glfw_opengl2.vcxproj", "{9CDA7840-B7A5-496D-A527-E95571496D18}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "example_glfw_opengl3", "example_glfw_opengl3\example_glfw_opengl3.vcxproj", "{4A1FB5EA-22F5-42A8-AB92-1D2DF5D47FB9}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {9CDA7840-B7A5-496D-A527-E95571496D18}.Debug|Win32.ActiveCfg = Debug|Win32 - {9CDA7840-B7A5-496D-A527-E95571496D18}.Debug|Win32.Build.0 = Debug|Win32 - {9CDA7840-B7A5-496D-A527-E95571496D18}.Debug|x64.ActiveCfg = Debug|x64 - {9CDA7840-B7A5-496D-A527-E95571496D18}.Debug|x64.Build.0 = Debug|x64 - {9CDA7840-B7A5-496D-A527-E95571496D18}.Release|Win32.ActiveCfg = Release|Win32 - {9CDA7840-B7A5-496D-A527-E95571496D18}.Release|Win32.Build.0 = Release|Win32 - {9CDA7840-B7A5-496D-A527-E95571496D18}.Release|x64.ActiveCfg = Release|x64 - {9CDA7840-B7A5-496D-A527-E95571496D18}.Release|x64.Build.0 = Release|x64 - {4165A294-21F2-44CA-9B38-E3F935ABADF5}.Debug|Win32.ActiveCfg = Debug|Win32 - {4165A294-21F2-44CA-9B38-E3F935ABADF5}.Debug|Win32.Build.0 = Debug|Win32 - {4165A294-21F2-44CA-9B38-E3F935ABADF5}.Debug|x64.ActiveCfg = Debug|x64 - {4165A294-21F2-44CA-9B38-E3F935ABADF5}.Debug|x64.Build.0 = Debug|x64 - {4165A294-21F2-44CA-9B38-E3F935ABADF5}.Release|Win32.ActiveCfg = Release|Win32 - {4165A294-21F2-44CA-9B38-E3F935ABADF5}.Release|Win32.Build.0 = Release|Win32 - {4165A294-21F2-44CA-9B38-E3F935ABADF5}.Release|x64.ActiveCfg = Release|x64 - {4165A294-21F2-44CA-9B38-E3F935ABADF5}.Release|x64.Build.0 = Release|x64 - {9F316E83-5AE5-4939-A723-305A94F48005}.Debug|Win32.ActiveCfg = Debug|Win32 - {9F316E83-5AE5-4939-A723-305A94F48005}.Debug|Win32.Build.0 = Debug|Win32 - {9F316E83-5AE5-4939-A723-305A94F48005}.Debug|x64.ActiveCfg = Debug|x64 - {9F316E83-5AE5-4939-A723-305A94F48005}.Debug|x64.Build.0 = Debug|x64 - {9F316E83-5AE5-4939-A723-305A94F48005}.Release|Win32.ActiveCfg = Release|Win32 - {9F316E83-5AE5-4939-A723-305A94F48005}.Release|Win32.Build.0 = Release|Win32 - {9F316E83-5AE5-4939-A723-305A94F48005}.Release|x64.ActiveCfg = Release|x64 - {9F316E83-5AE5-4939-A723-305A94F48005}.Release|x64.Build.0 = Release|x64 - {4A1FB5EA-22F5-42A8-AB92-1D2DF5D47FB9}.Debug|Win32.ActiveCfg = Debug|Win32 - {4A1FB5EA-22F5-42A8-AB92-1D2DF5D47FB9}.Debug|Win32.Build.0 = Debug|Win32 - {4A1FB5EA-22F5-42A8-AB92-1D2DF5D47FB9}.Debug|x64.ActiveCfg = Debug|x64 - {4A1FB5EA-22F5-42A8-AB92-1D2DF5D47FB9}.Debug|x64.Build.0 = Debug|x64 - {4A1FB5EA-22F5-42A8-AB92-1D2DF5D47FB9}.Release|Win32.ActiveCfg = Release|Win32 - {4A1FB5EA-22F5-42A8-AB92-1D2DF5D47FB9}.Release|Win32.Build.0 = Release|Win32 - {4A1FB5EA-22F5-42A8-AB92-1D2DF5D47FB9}.Release|x64.ActiveCfg = Release|x64 - {4A1FB5EA-22F5-42A8-AB92-1D2DF5D47FB9}.Release|x64.Build.0 = Release|x64 - {345A953E-A004-4648-B442-DC5F9F11068C}.Debug|Win32.ActiveCfg = Debug|Win32 - {345A953E-A004-4648-B442-DC5F9F11068C}.Debug|Win32.Build.0 = Debug|Win32 - {345A953E-A004-4648-B442-DC5F9F11068C}.Debug|x64.ActiveCfg = Debug|x64 - {345A953E-A004-4648-B442-DC5F9F11068C}.Debug|x64.Build.0 = Debug|x64 - {345A953E-A004-4648-B442-DC5F9F11068C}.Release|Win32.ActiveCfg = Release|Win32 - {345A953E-A004-4648-B442-DC5F9F11068C}.Release|Win32.Build.0 = Release|Win32 - {345A953E-A004-4648-B442-DC5F9F11068C}.Release|x64.ActiveCfg = Release|x64 - {345A953E-A004-4648-B442-DC5F9F11068C}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/cmake/imgui/examples/imgui_impl_allegro5.cpp b/cmake/imgui/examples/imgui_impl_allegro5.cpp deleted file mode 100644 index 76f74a3f..00000000 --- a/cmake/imgui/examples/imgui_impl_allegro5.cpp +++ /dev/null @@ -1,427 +0,0 @@ -// dear imgui: Renderer + Platform Binding for Allegro 5 -// (Info: Allegro 5 is a cross-platform general purpose library for handling windows, inputs, graphics, etc.) - -// Implemented features: -// [X] Renderer: User texture binding. Use 'ALLEGRO_BITMAP*' as ImTextureID. Read the FAQ about ImTextureID! -// [X] Platform: Clipboard support (from Allegro 5.1.12) -// [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'. -// Issues: -// [ ] Renderer: The renderer is suboptimal as we need to unindex our buffers and convert vertices manually. -// [ ] Platform: Missing gamepad support. - -// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. -// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. -// https://github.com/ocornut/imgui, Original Allegro 5 code by @birthggd - -// CHANGELOG -// (minor and older changes stripped away, please see git history for details) -// 2019-12-05: Inputs: Added support for ImGuiMouseCursor_NotAllowed mouse cursor. -// 2019-07-21: Inputs: Added mapping for ImGuiKey_KeyPadEnter. -// 2019-05-11: Inputs: Don't filter character value from ALLEGRO_EVENT_KEY_CHAR before calling AddInputCharacter(). -// 2019-04-30: Renderer: Added support for special ImDrawCallback_ResetRenderState callback to reset render state. -// 2018-11-30: Platform: Added touchscreen support. -// 2018-11-30: Misc: Setting up io.BackendPlatformName/io.BackendRendererName so they can be displayed in the About Window. -// 2018-06-13: Platform: Added clipboard support (from Allegro 5.1.12). -// 2018-06-13: Renderer: Use draw_data->DisplayPos and draw_data->DisplaySize to setup projection matrix and clipping rectangle. -// 2018-06-13: Renderer: Backup/restore transform and clipping rectangle. -// 2018-06-11: Misc: Setup io.BackendFlags ImGuiBackendFlags_HasMouseCursors flag + honor ImGuiConfigFlags_NoMouseCursorChange flag. -// 2018-04-18: Misc: Renamed file from imgui_impl_a5.cpp to imgui_impl_allegro5.cpp. -// 2018-04-18: Misc: Added support for 32-bit vertex indices to avoid conversion at runtime. Added imconfig_allegro5.h to enforce 32-bit indices when included from imgui.h. -// 2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_ImplAllegro5_RenderDrawData() in the .h file so you can call it yourself. -// 2018-02-06: Misc: Removed call to ImGui::Shutdown() which is not available from 1.60 WIP, user needs to call CreateContext/DestroyContext themselves. -// 2018-02-06: Inputs: Added mapping for ImGuiKey_Space. - -#include // uint64_t -#include // memcpy -#include "imgui.h" -#include "imgui_impl_allegro5.h" - -// Allegro -#include -#include -#ifdef _WIN32 -#include -#endif -#define ALLEGRO_HAS_CLIPBOARD (ALLEGRO_VERSION_INT >= ((5 << 24) | (1 << 16) | (12 << 8))) // Clipboard only supported from Allegro 5.1.12 - -// Visual Studio warnings -#ifdef _MSC_VER -#pragma warning (disable: 4127) // condition expression is constant -#endif - -// Data -static ALLEGRO_DISPLAY* g_Display = NULL; -static ALLEGRO_BITMAP* g_Texture = NULL; -static double g_Time = 0.0; -static ALLEGRO_MOUSE_CURSOR* g_MouseCursorInvisible = NULL; -static ALLEGRO_VERTEX_DECL* g_VertexDecl = NULL; -static char* g_ClipboardTextData = NULL; - -struct ImDrawVertAllegro -{ - ImVec2 pos; - ImVec2 uv; - ALLEGRO_COLOR col; -}; - -static void ImGui_ImplAllegro5_SetupRenderState(ImDrawData* draw_data) -{ - // Setup blending - al_set_blender(ALLEGRO_ADD, ALLEGRO_ALPHA, ALLEGRO_INVERSE_ALPHA); - - // Setup orthographic projection matrix - // Our visible imgui space lies from draw_data->DisplayPos (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). - { - float L = draw_data->DisplayPos.x; - float R = draw_data->DisplayPos.x + draw_data->DisplaySize.x; - float T = draw_data->DisplayPos.y; - float B = draw_data->DisplayPos.y + draw_data->DisplaySize.y; - ALLEGRO_TRANSFORM transform; - al_identity_transform(&transform); - al_use_transform(&transform); - al_orthographic_transform(&transform, L, T, 1.0f, R, B, -1.0f); - al_use_projection_transform(&transform); - } -} - -// Render function. -// (this used to be set in io.RenderDrawListsFn and called by ImGui::Render(), but you can now call this directly from your main loop) -void ImGui_ImplAllegro5_RenderDrawData(ImDrawData* draw_data) -{ - // Avoid rendering when minimized - if (draw_data->DisplaySize.x <= 0.0f || draw_data->DisplaySize.y <= 0.0f) - return; - - // Backup Allegro state that will be modified - ALLEGRO_TRANSFORM last_transform = *al_get_current_transform(); - ALLEGRO_TRANSFORM last_projection_transform = *al_get_current_projection_transform(); - int last_clip_x, last_clip_y, last_clip_w, last_clip_h; - al_get_clipping_rectangle(&last_clip_x, &last_clip_y, &last_clip_w, &last_clip_h); - int last_blender_op, last_blender_src, last_blender_dst; - al_get_blender(&last_blender_op, &last_blender_src, &last_blender_dst); - - // Setup desired render state - ImGui_ImplAllegro5_SetupRenderState(draw_data); - - // Render command lists - for (int n = 0; n < draw_data->CmdListsCount; n++) - { - const ImDrawList* cmd_list = draw_data->CmdLists[n]; - - // Allegro's implementation of al_draw_indexed_prim() for DX9 is completely broken. Unindex our buffers ourselves. - // FIXME-OPT: Unfortunately Allegro doesn't support 32-bit packed colors so we have to convert them to 4 float as well.. - static ImVector vertices; - vertices.resize(cmd_list->IdxBuffer.Size); - for (int i = 0; i < cmd_list->IdxBuffer.Size; i++) - { - const ImDrawVert* src_v = &cmd_list->VtxBuffer[cmd_list->IdxBuffer[i]]; - ImDrawVertAllegro* dst_v = &vertices[i]; - dst_v->pos = src_v->pos; - dst_v->uv = src_v->uv; - unsigned char* c = (unsigned char*)&src_v->col; - dst_v->col = al_map_rgba(c[0], c[1], c[2], c[3]); - } - - const int* indices = NULL; - if (sizeof(ImDrawIdx) == 2) - { - // FIXME-OPT: Unfortunately Allegro doesn't support 16-bit indices.. You can '#define ImDrawIdx int' in imconfig.h to request Dear ImGui to output 32-bit indices. - // Otherwise, we convert them from 16-bit to 32-bit at runtime here, which works perfectly but is a little wasteful. - static ImVector indices_converted; - indices_converted.resize(cmd_list->IdxBuffer.Size); - for (int i = 0; i < cmd_list->IdxBuffer.Size; ++i) - indices_converted[i] = (int)cmd_list->IdxBuffer.Data[i]; - indices = indices_converted.Data; - } - else if (sizeof(ImDrawIdx) == 4) - { - indices = (const int*)cmd_list->IdxBuffer.Data; - } - - // Render command lists - int idx_offset = 0; - ImVec2 clip_off = draw_data->DisplayPos; - for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++) - { - const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i]; - if (pcmd->UserCallback) - { - // User callback, registered via ImDrawList::AddCallback() - // (ImDrawCallback_ResetRenderState is a special callback value used by the user to request the renderer to reset render state.) - if (pcmd->UserCallback == ImDrawCallback_ResetRenderState) - ImGui_ImplAllegro5_SetupRenderState(draw_data); - else - pcmd->UserCallback(cmd_list, pcmd); - } - else - { - // Draw - ALLEGRO_BITMAP* texture = (ALLEGRO_BITMAP*)pcmd->TextureId; - al_set_clipping_rectangle(pcmd->ClipRect.x - clip_off.x, pcmd->ClipRect.y - clip_off.y, pcmd->ClipRect.z - pcmd->ClipRect.x, pcmd->ClipRect.w - pcmd->ClipRect.y); - al_draw_prim(&vertices[0], g_VertexDecl, texture, idx_offset, idx_offset + pcmd->ElemCount, ALLEGRO_PRIM_TRIANGLE_LIST); - } - idx_offset += pcmd->ElemCount; - } - } - - // Restore modified Allegro state - al_set_blender(last_blender_op, last_blender_src, last_blender_dst); - al_set_clipping_rectangle(last_clip_x, last_clip_y, last_clip_w, last_clip_h); - al_use_transform(&last_transform); - al_use_projection_transform(&last_projection_transform); -} - -bool ImGui_ImplAllegro5_CreateDeviceObjects() -{ - // Build texture atlas - ImGuiIO &io = ImGui::GetIO(); - unsigned char* pixels; - int width, height; - io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); - - // Create texture - int flags = al_get_new_bitmap_flags(); - int fmt = al_get_new_bitmap_format(); - al_set_new_bitmap_flags(ALLEGRO_MEMORY_BITMAP|ALLEGRO_MIN_LINEAR|ALLEGRO_MAG_LINEAR); - al_set_new_bitmap_format(ALLEGRO_PIXEL_FORMAT_ABGR_8888_LE); - ALLEGRO_BITMAP* img = al_create_bitmap(width, height); - al_set_new_bitmap_flags(flags); - al_set_new_bitmap_format(fmt); - if (!img) - return false; - - ALLEGRO_LOCKED_REGION *locked_img = al_lock_bitmap(img, al_get_bitmap_format(img), ALLEGRO_LOCK_WRITEONLY); - if (!locked_img) - { - al_destroy_bitmap(img); - return false; - } - memcpy(locked_img->data, pixels, sizeof(int)*width*height); - al_unlock_bitmap(img); - - // Convert software texture to hardware texture. - ALLEGRO_BITMAP* cloned_img = al_clone_bitmap(img); - al_destroy_bitmap(img); - if (!cloned_img) - return false; - - // Store our identifier - io.Fonts->TexID = (void*)cloned_img; - g_Texture = cloned_img; - - // Create an invisible mouse cursor - // Because al_hide_mouse_cursor() seems to mess up with the actual inputs.. - ALLEGRO_BITMAP* mouse_cursor = al_create_bitmap(8,8); - g_MouseCursorInvisible = al_create_mouse_cursor(mouse_cursor, 0, 0); - al_destroy_bitmap(mouse_cursor); - - return true; -} - -void ImGui_ImplAllegro5_InvalidateDeviceObjects() -{ - if (g_Texture) - { - al_destroy_bitmap(g_Texture); - ImGui::GetIO().Fonts->TexID = NULL; - g_Texture = NULL; - } - if (g_MouseCursorInvisible) - { - al_destroy_mouse_cursor(g_MouseCursorInvisible); - g_MouseCursorInvisible = NULL; - } -} - -#if ALLEGRO_HAS_CLIPBOARD -static const char* ImGui_ImplAllegro5_GetClipboardText(void*) -{ - if (g_ClipboardTextData) - al_free(g_ClipboardTextData); - g_ClipboardTextData = al_get_clipboard_text(g_Display); - return g_ClipboardTextData; -} - -static void ImGui_ImplAllegro5_SetClipboardText(void*, const char* text) -{ - al_set_clipboard_text(g_Display, text); -} -#endif - -bool ImGui_ImplAllegro5_Init(ALLEGRO_DISPLAY* display) -{ - g_Display = display; - - // Setup back-end capabilities flags - ImGuiIO& io = ImGui::GetIO(); - io.BackendFlags |= ImGuiBackendFlags_HasMouseCursors; // We can honor GetMouseCursor() values (optional) - io.BackendPlatformName = io.BackendRendererName = "imgui_impl_allegro5"; - - // Create custom vertex declaration. - // Unfortunately Allegro doesn't support 32-bit packed colors so we have to convert them to 4 floats. - // We still use a custom declaration to use 'ALLEGRO_PRIM_TEX_COORD' instead of 'ALLEGRO_PRIM_TEX_COORD_PIXEL' else we can't do a reliable conversion. - ALLEGRO_VERTEX_ELEMENT elems[] = - { - { ALLEGRO_PRIM_POSITION, ALLEGRO_PRIM_FLOAT_2, IM_OFFSETOF(ImDrawVertAllegro, pos) }, - { ALLEGRO_PRIM_TEX_COORD, ALLEGRO_PRIM_FLOAT_2, IM_OFFSETOF(ImDrawVertAllegro, uv) }, - { ALLEGRO_PRIM_COLOR_ATTR, 0, IM_OFFSETOF(ImDrawVertAllegro, col) }, - { 0, 0, 0 } - }; - g_VertexDecl = al_create_vertex_decl(elems, sizeof(ImDrawVertAllegro)); - - io.KeyMap[ImGuiKey_Tab] = ALLEGRO_KEY_TAB; - io.KeyMap[ImGuiKey_LeftArrow] = ALLEGRO_KEY_LEFT; - io.KeyMap[ImGuiKey_RightArrow] = ALLEGRO_KEY_RIGHT; - io.KeyMap[ImGuiKey_UpArrow] = ALLEGRO_KEY_UP; - io.KeyMap[ImGuiKey_DownArrow] = ALLEGRO_KEY_DOWN; - io.KeyMap[ImGuiKey_PageUp] = ALLEGRO_KEY_PGUP; - io.KeyMap[ImGuiKey_PageDown] = ALLEGRO_KEY_PGDN; - io.KeyMap[ImGuiKey_Home] = ALLEGRO_KEY_HOME; - io.KeyMap[ImGuiKey_End] = ALLEGRO_KEY_END; - io.KeyMap[ImGuiKey_Insert] = ALLEGRO_KEY_INSERT; - io.KeyMap[ImGuiKey_Delete] = ALLEGRO_KEY_DELETE; - io.KeyMap[ImGuiKey_Backspace] = ALLEGRO_KEY_BACKSPACE; - io.KeyMap[ImGuiKey_Space] = ALLEGRO_KEY_SPACE; - io.KeyMap[ImGuiKey_Enter] = ALLEGRO_KEY_ENTER; - io.KeyMap[ImGuiKey_Escape] = ALLEGRO_KEY_ESCAPE; - io.KeyMap[ImGuiKey_KeyPadEnter] = ALLEGRO_KEY_PAD_ENTER; - io.KeyMap[ImGuiKey_A] = ALLEGRO_KEY_A; - io.KeyMap[ImGuiKey_C] = ALLEGRO_KEY_C; - io.KeyMap[ImGuiKey_V] = ALLEGRO_KEY_V; - io.KeyMap[ImGuiKey_X] = ALLEGRO_KEY_X; - io.KeyMap[ImGuiKey_Y] = ALLEGRO_KEY_Y; - io.KeyMap[ImGuiKey_Z] = ALLEGRO_KEY_Z; - io.MousePos = ImVec2(-FLT_MAX, -FLT_MAX); - -#if ALLEGRO_HAS_CLIPBOARD - io.SetClipboardTextFn = ImGui_ImplAllegro5_SetClipboardText; - io.GetClipboardTextFn = ImGui_ImplAllegro5_GetClipboardText; - io.ClipboardUserData = NULL; -#endif - - return true; -} - -void ImGui_ImplAllegro5_Shutdown() -{ - ImGui_ImplAllegro5_InvalidateDeviceObjects(); - - g_Display = NULL; - g_Time = 0.0; - - if (g_VertexDecl) - al_destroy_vertex_decl(g_VertexDecl); - g_VertexDecl = NULL; - - if (g_ClipboardTextData) - al_free(g_ClipboardTextData); - g_ClipboardTextData = NULL; -} - -// You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. -// - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. -// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. -// Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. -bool ImGui_ImplAllegro5_ProcessEvent(ALLEGRO_EVENT *ev) -{ - ImGuiIO& io = ImGui::GetIO(); - - switch (ev->type) - { - case ALLEGRO_EVENT_MOUSE_AXES: - if (ev->mouse.display == g_Display) - { - io.MouseWheel += ev->mouse.dz; - io.MouseWheelH += ev->mouse.dw; - io.MousePos = ImVec2(ev->mouse.x, ev->mouse.y); - } - return true; - case ALLEGRO_EVENT_MOUSE_BUTTON_DOWN: - case ALLEGRO_EVENT_MOUSE_BUTTON_UP: - if (ev->mouse.display == g_Display && ev->mouse.button <= 5) - io.MouseDown[ev->mouse.button - 1] = (ev->type == ALLEGRO_EVENT_MOUSE_BUTTON_DOWN); - return true; - case ALLEGRO_EVENT_TOUCH_MOVE: - if (ev->touch.display == g_Display) - io.MousePos = ImVec2(ev->touch.x, ev->touch.y); - return true; - case ALLEGRO_EVENT_TOUCH_BEGIN: - case ALLEGRO_EVENT_TOUCH_END: - case ALLEGRO_EVENT_TOUCH_CANCEL: - if (ev->touch.display == g_Display && ev->touch.primary) - io.MouseDown[0] = (ev->type == ALLEGRO_EVENT_TOUCH_BEGIN); - return true; - case ALLEGRO_EVENT_MOUSE_LEAVE_DISPLAY: - if (ev->mouse.display == g_Display) - io.MousePos = ImVec2(-FLT_MAX, -FLT_MAX); - return true; - case ALLEGRO_EVENT_KEY_CHAR: - if (ev->keyboard.display == g_Display) - io.AddInputCharacter((unsigned int)ev->keyboard.unichar); - return true; - case ALLEGRO_EVENT_KEY_DOWN: - case ALLEGRO_EVENT_KEY_UP: - if (ev->keyboard.display == g_Display) - io.KeysDown[ev->keyboard.keycode] = (ev->type == ALLEGRO_EVENT_KEY_DOWN); - return true; - } - return false; -} - -static void ImGui_ImplAllegro5_UpdateMouseCursor() -{ - ImGuiIO& io = ImGui::GetIO(); - if (io.ConfigFlags & ImGuiConfigFlags_NoMouseCursorChange) - return; - - ImGuiMouseCursor imgui_cursor = ImGui::GetMouseCursor(); - if (io.MouseDrawCursor || imgui_cursor == ImGuiMouseCursor_None) - { - // Hide OS mouse cursor if imgui is drawing it or if it wants no cursor - al_set_mouse_cursor(g_Display, g_MouseCursorInvisible); - } - else - { - ALLEGRO_SYSTEM_MOUSE_CURSOR cursor_id = ALLEGRO_SYSTEM_MOUSE_CURSOR_DEFAULT; - switch (imgui_cursor) - { - case ImGuiMouseCursor_TextInput: cursor_id = ALLEGRO_SYSTEM_MOUSE_CURSOR_EDIT; break; - case ImGuiMouseCursor_ResizeAll: cursor_id = ALLEGRO_SYSTEM_MOUSE_CURSOR_MOVE; break; - case ImGuiMouseCursor_ResizeNS: cursor_id = ALLEGRO_SYSTEM_MOUSE_CURSOR_RESIZE_N; break; - case ImGuiMouseCursor_ResizeEW: cursor_id = ALLEGRO_SYSTEM_MOUSE_CURSOR_RESIZE_E; break; - case ImGuiMouseCursor_ResizeNESW: cursor_id = ALLEGRO_SYSTEM_MOUSE_CURSOR_RESIZE_NE; break; - case ImGuiMouseCursor_ResizeNWSE: cursor_id = ALLEGRO_SYSTEM_MOUSE_CURSOR_RESIZE_NW; break; - case ImGuiMouseCursor_NotAllowed: cursor_id = ALLEGRO_SYSTEM_MOUSE_CURSOR_UNAVAILABLE; break; - } - al_set_system_mouse_cursor(g_Display, cursor_id); - } -} - -void ImGui_ImplAllegro5_NewFrame() -{ - if (!g_Texture) - ImGui_ImplAllegro5_CreateDeviceObjects(); - - ImGuiIO &io = ImGui::GetIO(); - - // Setup display size (every frame to accommodate for window resizing) - int w, h; - w = al_get_display_width(g_Display); - h = al_get_display_height(g_Display); - io.DisplaySize = ImVec2((float)w, (float)h); - - // Setup time step - double current_time = al_get_time(); - io.DeltaTime = g_Time > 0.0 ? (float)(current_time - g_Time) : (float)(1.0f/60.0f); - g_Time = current_time; - - // Setup inputs - ALLEGRO_KEYBOARD_STATE keys; - al_get_keyboard_state(&keys); - io.KeyCtrl = al_key_down(&keys, ALLEGRO_KEY_LCTRL) || al_key_down(&keys, ALLEGRO_KEY_RCTRL); - io.KeyShift = al_key_down(&keys, ALLEGRO_KEY_LSHIFT) || al_key_down(&keys, ALLEGRO_KEY_RSHIFT); - io.KeyAlt = al_key_down(&keys, ALLEGRO_KEY_ALT) || al_key_down(&keys, ALLEGRO_KEY_ALTGR); - io.KeySuper = al_key_down(&keys, ALLEGRO_KEY_LWIN) || al_key_down(&keys, ALLEGRO_KEY_RWIN); - - ImGui_ImplAllegro5_UpdateMouseCursor(); -} diff --git a/cmake/imgui/examples/imgui_impl_allegro5.h b/cmake/imgui/examples/imgui_impl_allegro5.h deleted file mode 100644 index 8b9a47d1..00000000 --- a/cmake/imgui/examples/imgui_impl_allegro5.h +++ /dev/null @@ -1,29 +0,0 @@ -// dear imgui: Renderer + Platform Binding for Allegro 5 -// (Info: Allegro 5 is a cross-platform general purpose library for handling windows, inputs, graphics, etc.) - -// Implemented features: -// [X] Renderer: User texture binding. Use 'ALLEGRO_BITMAP*' as ImTextureID. Read the FAQ about ImTextureID! -// [X] Platform: Clipboard support (from Allegro 5.1.12) -// [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'. -// Issues: -// [ ] Renderer: The renderer is suboptimal as we need to unindex our buffers and convert vertices manually. -// [ ] Platform: Missing gamepad support. - -// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. -// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. -// https://github.com/ocornut/imgui, Original Allegro 5 code by @birthggd - -#pragma once - -struct ALLEGRO_DISPLAY; -union ALLEGRO_EVENT; - -IMGUI_IMPL_API bool ImGui_ImplAllegro5_Init(ALLEGRO_DISPLAY* display); -IMGUI_IMPL_API void ImGui_ImplAllegro5_Shutdown(); -IMGUI_IMPL_API void ImGui_ImplAllegro5_NewFrame(); -IMGUI_IMPL_API void ImGui_ImplAllegro5_RenderDrawData(ImDrawData* draw_data); -IMGUI_IMPL_API bool ImGui_ImplAllegro5_ProcessEvent(ALLEGRO_EVENT* event); - -// Use if you want to reset your rendering device without losing ImGui state. -IMGUI_IMPL_API bool ImGui_ImplAllegro5_CreateDeviceObjects(); -IMGUI_IMPL_API void ImGui_ImplAllegro5_InvalidateDeviceObjects(); diff --git a/cmake/imgui/examples/imgui_impl_dx10.cpp b/cmake/imgui/examples/imgui_impl_dx10.cpp deleted file mode 100644 index 7eb4e5af..00000000 --- a/cmake/imgui/examples/imgui_impl_dx10.cpp +++ /dev/null @@ -1,529 +0,0 @@ -// dear imgui: Renderer for DirectX10 -// This needs to be used along with a Platform Binding (e.g. Win32) - -// Implemented features: -// [X] Renderer: User texture binding. Use 'ID3D10ShaderResourceView*' as ImTextureID. Read the FAQ about ImTextureID! -// [X] Renderer: Support for large meshes (64k+ vertices) with 16-bit indices. - -// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. -// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. -// https://github.com/ocornut/imgui - -// CHANGELOG -// (minor and older changes stripped away, please see git history for details) -// 2019-07-21: DirectX10: Backup, clear and restore Geometry Shader is any is bound when calling ImGui_ImplDX10_RenderDrawData(). -// 2019-05-29: DirectX10: Added support for large mesh (64K+ vertices), enable ImGuiBackendFlags_RendererHasVtxOffset flag. -// 2019-04-30: DirectX10: Added support for special ImDrawCallback_ResetRenderState callback to reset render state. -// 2018-12-03: Misc: Added #pragma comment statement to automatically link with d3dcompiler.lib when using D3DCompile(). -// 2018-11-30: Misc: Setting up io.BackendRendererName so it can be displayed in the About Window. -// 2018-07-13: DirectX10: Fixed unreleased resources in Init and Shutdown functions. -// 2018-06-08: Misc: Extracted imgui_impl_dx10.cpp/.h away from the old combined DX10+Win32 example. -// 2018-06-08: DirectX10: Use draw_data->DisplayPos and draw_data->DisplaySize to setup projection matrix and clipping rectangle. -// 2018-04-09: Misc: Fixed erroneous call to io.Fonts->ClearInputData() + ClearTexData() that was left in DX10 example but removed in 1.47 (Nov 2015) on other back-ends. -// 2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_ImplDX10_RenderDrawData() in the .h file so you can call it yourself. -// 2018-02-06: Misc: Removed call to ImGui::Shutdown() which is not available from 1.60 WIP, user needs to call CreateContext/DestroyContext themselves. -// 2016-05-07: DirectX10: Disabling depth-write. - -#include "imgui.h" -#include "imgui_impl_dx10.h" - -// DirectX -#include -#include -#include -#include -#ifdef _MSC_VER -#pragma comment(lib, "d3dcompiler") // Automatically link with d3dcompiler.lib as we are using D3DCompile() below. -#endif - -// DirectX data -static ID3D10Device* g_pd3dDevice = NULL; -static IDXGIFactory* g_pFactory = NULL; -static ID3D10Buffer* g_pVB = NULL; -static ID3D10Buffer* g_pIB = NULL; -static ID3D10Blob* g_pVertexShaderBlob = NULL; -static ID3D10VertexShader* g_pVertexShader = NULL; -static ID3D10InputLayout* g_pInputLayout = NULL; -static ID3D10Buffer* g_pVertexConstantBuffer = NULL; -static ID3D10Blob* g_pPixelShaderBlob = NULL; -static ID3D10PixelShader* g_pPixelShader = NULL; -static ID3D10SamplerState* g_pFontSampler = NULL; -static ID3D10ShaderResourceView*g_pFontTextureView = NULL; -static ID3D10RasterizerState* g_pRasterizerState = NULL; -static ID3D10BlendState* g_pBlendState = NULL; -static ID3D10DepthStencilState* g_pDepthStencilState = NULL; -static int g_VertexBufferSize = 5000, g_IndexBufferSize = 10000; - -struct VERTEX_CONSTANT_BUFFER -{ - float mvp[4][4]; -}; - -static void ImGui_ImplDX10_SetupRenderState(ImDrawData* draw_data, ID3D10Device* ctx) -{ - // Setup viewport - D3D10_VIEWPORT vp; - memset(&vp, 0, sizeof(D3D10_VIEWPORT)); - vp.Width = (UINT)draw_data->DisplaySize.x; - vp.Height = (UINT)draw_data->DisplaySize.y; - vp.MinDepth = 0.0f; - vp.MaxDepth = 1.0f; - vp.TopLeftX = vp.TopLeftY = 0; - ctx->RSSetViewports(1, &vp); - - // Bind shader and vertex buffers - unsigned int stride = sizeof(ImDrawVert); - unsigned int offset = 0; - ctx->IASetInputLayout(g_pInputLayout); - ctx->IASetVertexBuffers(0, 1, &g_pVB, &stride, &offset); - ctx->IASetIndexBuffer(g_pIB, sizeof(ImDrawIdx) == 2 ? DXGI_FORMAT_R16_UINT : DXGI_FORMAT_R32_UINT, 0); - ctx->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST); - ctx->VSSetShader(g_pVertexShader); - ctx->VSSetConstantBuffers(0, 1, &g_pVertexConstantBuffer); - ctx->PSSetShader(g_pPixelShader); - ctx->PSSetSamplers(0, 1, &g_pFontSampler); - ctx->GSSetShader(NULL); - - // Setup render state - const float blend_factor[4] = { 0.f, 0.f, 0.f, 0.f }; - ctx->OMSetBlendState(g_pBlendState, blend_factor, 0xffffffff); - ctx->OMSetDepthStencilState(g_pDepthStencilState, 0); - ctx->RSSetState(g_pRasterizerState); -} - -// Render function -// (this used to be set in io.RenderDrawListsFn and called by ImGui::Render(), but you can now call this directly from your main loop) -void ImGui_ImplDX10_RenderDrawData(ImDrawData* draw_data) -{ - // Avoid rendering when minimized - if (draw_data->DisplaySize.x <= 0.0f || draw_data->DisplaySize.y <= 0.0f) - return; - - ID3D10Device* ctx = g_pd3dDevice; - - // Create and grow vertex/index buffers if needed - if (!g_pVB || g_VertexBufferSize < draw_data->TotalVtxCount) - { - if (g_pVB) { g_pVB->Release(); g_pVB = NULL; } - g_VertexBufferSize = draw_data->TotalVtxCount + 5000; - D3D10_BUFFER_DESC desc; - memset(&desc, 0, sizeof(D3D10_BUFFER_DESC)); - desc.Usage = D3D10_USAGE_DYNAMIC; - desc.ByteWidth = g_VertexBufferSize * sizeof(ImDrawVert); - desc.BindFlags = D3D10_BIND_VERTEX_BUFFER; - desc.CPUAccessFlags = D3D10_CPU_ACCESS_WRITE; - desc.MiscFlags = 0; - if (ctx->CreateBuffer(&desc, NULL, &g_pVB) < 0) - return; - } - - if (!g_pIB || g_IndexBufferSize < draw_data->TotalIdxCount) - { - if (g_pIB) { g_pIB->Release(); g_pIB = NULL; } - g_IndexBufferSize = draw_data->TotalIdxCount + 10000; - D3D10_BUFFER_DESC desc; - memset(&desc, 0, sizeof(D3D10_BUFFER_DESC)); - desc.Usage = D3D10_USAGE_DYNAMIC; - desc.ByteWidth = g_IndexBufferSize * sizeof(ImDrawIdx); - desc.BindFlags = D3D10_BIND_INDEX_BUFFER; - desc.CPUAccessFlags = D3D10_CPU_ACCESS_WRITE; - if (ctx->CreateBuffer(&desc, NULL, &g_pIB) < 0) - return; - } - - // Copy and convert all vertices into a single contiguous buffer - ImDrawVert* vtx_dst = NULL; - ImDrawIdx* idx_dst = NULL; - g_pVB->Map(D3D10_MAP_WRITE_DISCARD, 0, (void**)&vtx_dst); - g_pIB->Map(D3D10_MAP_WRITE_DISCARD, 0, (void**)&idx_dst); - for (int n = 0; n < draw_data->CmdListsCount; n++) - { - const ImDrawList* cmd_list = draw_data->CmdLists[n]; - memcpy(vtx_dst, cmd_list->VtxBuffer.Data, cmd_list->VtxBuffer.Size * sizeof(ImDrawVert)); - memcpy(idx_dst, cmd_list->IdxBuffer.Data, cmd_list->IdxBuffer.Size * sizeof(ImDrawIdx)); - vtx_dst += cmd_list->VtxBuffer.Size; - idx_dst += cmd_list->IdxBuffer.Size; - } - g_pVB->Unmap(); - g_pIB->Unmap(); - - // Setup orthographic projection matrix into our constant buffer - // Our visible imgui space lies from draw_data->DisplayPos (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayPos is (0,0) for single viewport apps. - { - void* mapped_resource; - if (g_pVertexConstantBuffer->Map(D3D10_MAP_WRITE_DISCARD, 0, &mapped_resource) != S_OK) - return; - VERTEX_CONSTANT_BUFFER* constant_buffer = (VERTEX_CONSTANT_BUFFER*)mapped_resource; - float L = draw_data->DisplayPos.x; - float R = draw_data->DisplayPos.x + draw_data->DisplaySize.x; - float T = draw_data->DisplayPos.y; - float B = draw_data->DisplayPos.y + draw_data->DisplaySize.y; - float mvp[4][4] = - { - { 2.0f/(R-L), 0.0f, 0.0f, 0.0f }, - { 0.0f, 2.0f/(T-B), 0.0f, 0.0f }, - { 0.0f, 0.0f, 0.5f, 0.0f }, - { (R+L)/(L-R), (T+B)/(B-T), 0.5f, 1.0f }, - }; - memcpy(&constant_buffer->mvp, mvp, sizeof(mvp)); - g_pVertexConstantBuffer->Unmap(); - } - - // Backup DX state that will be modified to restore it afterwards (unfortunately this is very ugly looking and verbose. Close your eyes!) - struct BACKUP_DX10_STATE - { - UINT ScissorRectsCount, ViewportsCount; - D3D10_RECT ScissorRects[D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE]; - D3D10_VIEWPORT Viewports[D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE]; - ID3D10RasterizerState* RS; - ID3D10BlendState* BlendState; - FLOAT BlendFactor[4]; - UINT SampleMask; - UINT StencilRef; - ID3D10DepthStencilState* DepthStencilState; - ID3D10ShaderResourceView* PSShaderResource; - ID3D10SamplerState* PSSampler; - ID3D10PixelShader* PS; - ID3D10VertexShader* VS; - ID3D10GeometryShader* GS; - D3D10_PRIMITIVE_TOPOLOGY PrimitiveTopology; - ID3D10Buffer* IndexBuffer, *VertexBuffer, *VSConstantBuffer; - UINT IndexBufferOffset, VertexBufferStride, VertexBufferOffset; - DXGI_FORMAT IndexBufferFormat; - ID3D10InputLayout* InputLayout; - }; - BACKUP_DX10_STATE old; - old.ScissorRectsCount = old.ViewportsCount = D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE; - ctx->RSGetScissorRects(&old.ScissorRectsCount, old.ScissorRects); - ctx->RSGetViewports(&old.ViewportsCount, old.Viewports); - ctx->RSGetState(&old.RS); - ctx->OMGetBlendState(&old.BlendState, old.BlendFactor, &old.SampleMask); - ctx->OMGetDepthStencilState(&old.DepthStencilState, &old.StencilRef); - ctx->PSGetShaderResources(0, 1, &old.PSShaderResource); - ctx->PSGetSamplers(0, 1, &old.PSSampler); - ctx->PSGetShader(&old.PS); - ctx->VSGetShader(&old.VS); - ctx->VSGetConstantBuffers(0, 1, &old.VSConstantBuffer); - ctx->GSGetShader(&old.GS); - ctx->IAGetPrimitiveTopology(&old.PrimitiveTopology); - ctx->IAGetIndexBuffer(&old.IndexBuffer, &old.IndexBufferFormat, &old.IndexBufferOffset); - ctx->IAGetVertexBuffers(0, 1, &old.VertexBuffer, &old.VertexBufferStride, &old.VertexBufferOffset); - ctx->IAGetInputLayout(&old.InputLayout); - - // Setup desired DX state - ImGui_ImplDX10_SetupRenderState(draw_data, ctx); - - // Render command lists - // (Because we merged all buffers into a single one, we maintain our own offset into them) - int global_vtx_offset = 0; - int global_idx_offset = 0; - ImVec2 clip_off = draw_data->DisplayPos; - for (int n = 0; n < draw_data->CmdListsCount; n++) - { - const ImDrawList* cmd_list = draw_data->CmdLists[n]; - for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++) - { - const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i]; - if (pcmd->UserCallback) - { - // User callback, registered via ImDrawList::AddCallback() - // (ImDrawCallback_ResetRenderState is a special callback value used by the user to request the renderer to reset render state.) - if (pcmd->UserCallback == ImDrawCallback_ResetRenderState) - ImGui_ImplDX10_SetupRenderState(draw_data, ctx); - else - pcmd->UserCallback(cmd_list, pcmd); - } - else - { - // Apply scissor/clipping rectangle - const D3D10_RECT r = { (LONG)(pcmd->ClipRect.x - clip_off.x), (LONG)(pcmd->ClipRect.y - clip_off.y), (LONG)(pcmd->ClipRect.z - clip_off.x), (LONG)(pcmd->ClipRect.w - clip_off.y)}; - ctx->RSSetScissorRects(1, &r); - - // Bind texture, Draw - ID3D10ShaderResourceView* texture_srv = (ID3D10ShaderResourceView*)pcmd->TextureId; - ctx->PSSetShaderResources(0, 1, &texture_srv); - ctx->DrawIndexed(pcmd->ElemCount, pcmd->IdxOffset + global_idx_offset, pcmd->VtxOffset + global_vtx_offset); - } - } - global_idx_offset += cmd_list->IdxBuffer.Size; - global_vtx_offset += cmd_list->VtxBuffer.Size; - } - - // Restore modified DX state - ctx->RSSetScissorRects(old.ScissorRectsCount, old.ScissorRects); - ctx->RSSetViewports(old.ViewportsCount, old.Viewports); - ctx->RSSetState(old.RS); if (old.RS) old.RS->Release(); - ctx->OMSetBlendState(old.BlendState, old.BlendFactor, old.SampleMask); if (old.BlendState) old.BlendState->Release(); - ctx->OMSetDepthStencilState(old.DepthStencilState, old.StencilRef); if (old.DepthStencilState) old.DepthStencilState->Release(); - ctx->PSSetShaderResources(0, 1, &old.PSShaderResource); if (old.PSShaderResource) old.PSShaderResource->Release(); - ctx->PSSetSamplers(0, 1, &old.PSSampler); if (old.PSSampler) old.PSSampler->Release(); - ctx->PSSetShader(old.PS); if (old.PS) old.PS->Release(); - ctx->VSSetShader(old.VS); if (old.VS) old.VS->Release(); - ctx->GSSetShader(old.GS); if (old.GS) old.GS->Release(); - ctx->VSSetConstantBuffers(0, 1, &old.VSConstantBuffer); if (old.VSConstantBuffer) old.VSConstantBuffer->Release(); - ctx->IASetPrimitiveTopology(old.PrimitiveTopology); - ctx->IASetIndexBuffer(old.IndexBuffer, old.IndexBufferFormat, old.IndexBufferOffset); if (old.IndexBuffer) old.IndexBuffer->Release(); - ctx->IASetVertexBuffers(0, 1, &old.VertexBuffer, &old.VertexBufferStride, &old.VertexBufferOffset); if (old.VertexBuffer) old.VertexBuffer->Release(); - ctx->IASetInputLayout(old.InputLayout); if (old.InputLayout) old.InputLayout->Release(); -} - -static void ImGui_ImplDX10_CreateFontsTexture() -{ - // Build texture atlas - ImGuiIO& io = ImGui::GetIO(); - unsigned char* pixels; - int width, height; - io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); - - // Upload texture to graphics system - { - D3D10_TEXTURE2D_DESC desc; - ZeroMemory(&desc, sizeof(desc)); - desc.Width = width; - desc.Height = height; - desc.MipLevels = 1; - desc.ArraySize = 1; - desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - desc.SampleDesc.Count = 1; - desc.Usage = D3D10_USAGE_DEFAULT; - desc.BindFlags = D3D10_BIND_SHADER_RESOURCE; - desc.CPUAccessFlags = 0; - - ID3D10Texture2D *pTexture = NULL; - D3D10_SUBRESOURCE_DATA subResource; - subResource.pSysMem = pixels; - subResource.SysMemPitch = desc.Width * 4; - subResource.SysMemSlicePitch = 0; - g_pd3dDevice->CreateTexture2D(&desc, &subResource, &pTexture); - - // Create texture view - D3D10_SHADER_RESOURCE_VIEW_DESC srv_desc; - ZeroMemory(&srv_desc, sizeof(srv_desc)); - srv_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - srv_desc.ViewDimension = D3D10_SRV_DIMENSION_TEXTURE2D; - srv_desc.Texture2D.MipLevels = desc.MipLevels; - srv_desc.Texture2D.MostDetailedMip = 0; - g_pd3dDevice->CreateShaderResourceView(pTexture, &srv_desc, &g_pFontTextureView); - pTexture->Release(); - } - - // Store our identifier - io.Fonts->TexID = (ImTextureID)g_pFontTextureView; - - // Create texture sampler - { - D3D10_SAMPLER_DESC desc; - ZeroMemory(&desc, sizeof(desc)); - desc.Filter = D3D10_FILTER_MIN_MAG_MIP_LINEAR; - desc.AddressU = D3D10_TEXTURE_ADDRESS_WRAP; - desc.AddressV = D3D10_TEXTURE_ADDRESS_WRAP; - desc.AddressW = D3D10_TEXTURE_ADDRESS_WRAP; - desc.MipLODBias = 0.f; - desc.ComparisonFunc = D3D10_COMPARISON_ALWAYS; - desc.MinLOD = 0.f; - desc.MaxLOD = 0.f; - g_pd3dDevice->CreateSamplerState(&desc, &g_pFontSampler); - } -} - -bool ImGui_ImplDX10_CreateDeviceObjects() -{ - if (!g_pd3dDevice) - return false; - if (g_pFontSampler) - ImGui_ImplDX10_InvalidateDeviceObjects(); - - // By using D3DCompile() from / d3dcompiler.lib, we introduce a dependency to a given version of d3dcompiler_XX.dll (see D3DCOMPILER_DLL_A) - // If you would like to use this DX10 sample code but remove this dependency you can: - // 1) compile once, save the compiled shader blobs into a file or source code and pass them to CreateVertexShader()/CreatePixelShader() [preferred solution] - // 2) use code to detect any version of the DLL and grab a pointer to D3DCompile from the DLL. - // See https://github.com/ocornut/imgui/pull/638 for sources and details. - - // Create the vertex shader - { - static const char* vertexShader = - "cbuffer vertexBuffer : register(b0) \ - {\ - float4x4 ProjectionMatrix; \ - };\ - struct VS_INPUT\ - {\ - float2 pos : POSITION;\ - float4 col : COLOR0;\ - float2 uv : TEXCOORD0;\ - };\ - \ - struct PS_INPUT\ - {\ - float4 pos : SV_POSITION;\ - float4 col : COLOR0;\ - float2 uv : TEXCOORD0;\ - };\ - \ - PS_INPUT main(VS_INPUT input)\ - {\ - PS_INPUT output;\ - output.pos = mul( ProjectionMatrix, float4(input.pos.xy, 0.f, 1.f));\ - output.col = input.col;\ - output.uv = input.uv;\ - return output;\ - }"; - - D3DCompile(vertexShader, strlen(vertexShader), NULL, NULL, NULL, "main", "vs_4_0", 0, 0, &g_pVertexShaderBlob, NULL); - if (g_pVertexShaderBlob == NULL) // NB: Pass ID3D10Blob* pErrorBlob to D3DCompile() to get error showing in (const char*)pErrorBlob->GetBufferPointer(). Make sure to Release() the blob! - return false; - if (g_pd3dDevice->CreateVertexShader((DWORD*)g_pVertexShaderBlob->GetBufferPointer(), g_pVertexShaderBlob->GetBufferSize(), &g_pVertexShader) != S_OK) - return false; - - // Create the input layout - D3D10_INPUT_ELEMENT_DESC local_layout[] = - { - { "POSITION", 0, DXGI_FORMAT_R32G32_FLOAT, 0, (size_t)(&((ImDrawVert*)0)->pos), D3D10_INPUT_PER_VERTEX_DATA, 0 }, - { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, (size_t)(&((ImDrawVert*)0)->uv), D3D10_INPUT_PER_VERTEX_DATA, 0 }, - { "COLOR", 0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, (size_t)(&((ImDrawVert*)0)->col), D3D10_INPUT_PER_VERTEX_DATA, 0 }, - }; - if (g_pd3dDevice->CreateInputLayout(local_layout, 3, g_pVertexShaderBlob->GetBufferPointer(), g_pVertexShaderBlob->GetBufferSize(), &g_pInputLayout) != S_OK) - return false; - - // Create the constant buffer - { - D3D10_BUFFER_DESC desc; - desc.ByteWidth = sizeof(VERTEX_CONSTANT_BUFFER); - desc.Usage = D3D10_USAGE_DYNAMIC; - desc.BindFlags = D3D10_BIND_CONSTANT_BUFFER; - desc.CPUAccessFlags = D3D10_CPU_ACCESS_WRITE; - desc.MiscFlags = 0; - g_pd3dDevice->CreateBuffer(&desc, NULL, &g_pVertexConstantBuffer); - } - } - - // Create the pixel shader - { - static const char* pixelShader = - "struct PS_INPUT\ - {\ - float4 pos : SV_POSITION;\ - float4 col : COLOR0;\ - float2 uv : TEXCOORD0;\ - };\ - sampler sampler0;\ - Texture2D texture0;\ - \ - float4 main(PS_INPUT input) : SV_Target\ - {\ - float4 out_col = input.col * texture0.Sample(sampler0, input.uv); \ - return out_col; \ - }"; - - D3DCompile(pixelShader, strlen(pixelShader), NULL, NULL, NULL, "main", "ps_4_0", 0, 0, &g_pPixelShaderBlob, NULL); - if (g_pPixelShaderBlob == NULL) // NB: Pass ID3D10Blob* pErrorBlob to D3DCompile() to get error showing in (const char*)pErrorBlob->GetBufferPointer(). Make sure to Release() the blob! - return false; - if (g_pd3dDevice->CreatePixelShader((DWORD*)g_pPixelShaderBlob->GetBufferPointer(), g_pPixelShaderBlob->GetBufferSize(), &g_pPixelShader) != S_OK) - return false; - } - - // Create the blending setup - { - D3D10_BLEND_DESC desc; - ZeroMemory(&desc, sizeof(desc)); - desc.AlphaToCoverageEnable = false; - desc.BlendEnable[0] = true; - desc.SrcBlend = D3D10_BLEND_SRC_ALPHA; - desc.DestBlend = D3D10_BLEND_INV_SRC_ALPHA; - desc.BlendOp = D3D10_BLEND_OP_ADD; - desc.SrcBlendAlpha = D3D10_BLEND_INV_SRC_ALPHA; - desc.DestBlendAlpha = D3D10_BLEND_ZERO; - desc.BlendOpAlpha = D3D10_BLEND_OP_ADD; - desc.RenderTargetWriteMask[0] = D3D10_COLOR_WRITE_ENABLE_ALL; - g_pd3dDevice->CreateBlendState(&desc, &g_pBlendState); - } - - // Create the rasterizer state - { - D3D10_RASTERIZER_DESC desc; - ZeroMemory(&desc, sizeof(desc)); - desc.FillMode = D3D10_FILL_SOLID; - desc.CullMode = D3D10_CULL_NONE; - desc.ScissorEnable = true; - desc.DepthClipEnable = true; - g_pd3dDevice->CreateRasterizerState(&desc, &g_pRasterizerState); - } - - // Create depth-stencil State - { - D3D10_DEPTH_STENCIL_DESC desc; - ZeroMemory(&desc, sizeof(desc)); - desc.DepthEnable = false; - desc.DepthWriteMask = D3D10_DEPTH_WRITE_MASK_ALL; - desc.DepthFunc = D3D10_COMPARISON_ALWAYS; - desc.StencilEnable = false; - desc.FrontFace.StencilFailOp = desc.FrontFace.StencilDepthFailOp = desc.FrontFace.StencilPassOp = D3D10_STENCIL_OP_KEEP; - desc.FrontFace.StencilFunc = D3D10_COMPARISON_ALWAYS; - desc.BackFace = desc.FrontFace; - g_pd3dDevice->CreateDepthStencilState(&desc, &g_pDepthStencilState); - } - - ImGui_ImplDX10_CreateFontsTexture(); - - return true; -} - -void ImGui_ImplDX10_InvalidateDeviceObjects() -{ - if (!g_pd3dDevice) - return; - - if (g_pFontSampler) { g_pFontSampler->Release(); g_pFontSampler = NULL; } - if (g_pFontTextureView) { g_pFontTextureView->Release(); g_pFontTextureView = NULL; ImGui::GetIO().Fonts->TexID = NULL; } // We copied g_pFontTextureView to io.Fonts->TexID so let's clear that as well. - if (g_pIB) { g_pIB->Release(); g_pIB = NULL; } - if (g_pVB) { g_pVB->Release(); g_pVB = NULL; } - - if (g_pBlendState) { g_pBlendState->Release(); g_pBlendState = NULL; } - if (g_pDepthStencilState) { g_pDepthStencilState->Release(); g_pDepthStencilState = NULL; } - if (g_pRasterizerState) { g_pRasterizerState->Release(); g_pRasterizerState = NULL; } - if (g_pPixelShader) { g_pPixelShader->Release(); g_pPixelShader = NULL; } - if (g_pPixelShaderBlob) { g_pPixelShaderBlob->Release(); g_pPixelShaderBlob = NULL; } - if (g_pVertexConstantBuffer) { g_pVertexConstantBuffer->Release(); g_pVertexConstantBuffer = NULL; } - if (g_pInputLayout) { g_pInputLayout->Release(); g_pInputLayout = NULL; } - if (g_pVertexShader) { g_pVertexShader->Release(); g_pVertexShader = NULL; } - if (g_pVertexShaderBlob) { g_pVertexShaderBlob->Release(); g_pVertexShaderBlob = NULL; } -} - -bool ImGui_ImplDX10_Init(ID3D10Device* device) -{ - // Setup back-end capabilities flags - ImGuiIO& io = ImGui::GetIO(); - io.BackendRendererName = "imgui_impl_dx10"; - io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset; // We can honor the ImDrawCmd::VtxOffset field, allowing for large meshes. - - // Get factory from device - IDXGIDevice* pDXGIDevice = NULL; - IDXGIAdapter* pDXGIAdapter = NULL; - IDXGIFactory* pFactory = NULL; - - if (device->QueryInterface(IID_PPV_ARGS(&pDXGIDevice)) == S_OK) - if (pDXGIDevice->GetParent(IID_PPV_ARGS(&pDXGIAdapter)) == S_OK) - if (pDXGIAdapter->GetParent(IID_PPV_ARGS(&pFactory)) == S_OK) - { - g_pd3dDevice = device; - g_pFactory = pFactory; - } - if (pDXGIDevice) pDXGIDevice->Release(); - if (pDXGIAdapter) pDXGIAdapter->Release(); - g_pd3dDevice->AddRef(); - - return true; -} - -void ImGui_ImplDX10_Shutdown() -{ - ImGui_ImplDX10_InvalidateDeviceObjects(); - if (g_pFactory) { g_pFactory->Release(); g_pFactory = NULL; } - if (g_pd3dDevice) { g_pd3dDevice->Release(); g_pd3dDevice = NULL; } -} - -void ImGui_ImplDX10_NewFrame() -{ - if (!g_pFontSampler) - ImGui_ImplDX10_CreateDeviceObjects(); -} diff --git a/cmake/imgui/examples/imgui_impl_dx10.h b/cmake/imgui/examples/imgui_impl_dx10.h deleted file mode 100644 index 85281d79..00000000 --- a/cmake/imgui/examples/imgui_impl_dx10.h +++ /dev/null @@ -1,23 +0,0 @@ -// dear imgui: Renderer for DirectX10 -// This needs to be used along with a Platform Binding (e.g. Win32) - -// Implemented features: -// [X] Renderer: User texture binding. Use 'ID3D10ShaderResourceView*' as ImTextureID. Read the FAQ about ImTextureID! -// [X] Renderer: Support for large meshes (64k+ vertices) with 16-bit indices. - -// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. -// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. -// https://github.com/ocornut/imgui - -#pragma once - -struct ID3D10Device; - -IMGUI_IMPL_API bool ImGui_ImplDX10_Init(ID3D10Device* device); -IMGUI_IMPL_API void ImGui_ImplDX10_Shutdown(); -IMGUI_IMPL_API void ImGui_ImplDX10_NewFrame(); -IMGUI_IMPL_API void ImGui_ImplDX10_RenderDrawData(ImDrawData* draw_data); - -// Use if you want to reset your rendering device without losing ImGui state. -IMGUI_IMPL_API void ImGui_ImplDX10_InvalidateDeviceObjects(); -IMGUI_IMPL_API bool ImGui_ImplDX10_CreateDeviceObjects(); diff --git a/cmake/imgui/examples/imgui_impl_dx11.cpp b/cmake/imgui/examples/imgui_impl_dx11.cpp deleted file mode 100644 index 97e17ff1..00000000 --- a/cmake/imgui/examples/imgui_impl_dx11.cpp +++ /dev/null @@ -1,544 +0,0 @@ -// dear imgui: Renderer for DirectX11 -// This needs to be used along with a Platform Binding (e.g. Win32) - -// Implemented features: -// [X] Renderer: User texture binding. Use 'ID3D11ShaderResourceView*' as ImTextureID. Read the FAQ about ImTextureID! -// [X] Renderer: Support for large meshes (64k+ vertices) with 16-bit indices. - -// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. -// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp -// https://github.com/ocornut/imgui - -// CHANGELOG -// (minor and older changes stripped away, please see git history for details) -// 2019-08-01: DirectX11: Fixed code querying the Geometry Shader state (would generally error with Debug layer enabled). -// 2019-07-21: DirectX11: Backup, clear and restore Geometry Shader is any is bound when calling ImGui_ImplDX10_RenderDrawData. Clearing Hull/Domain/Compute shaders without backup/restore. -// 2019-05-29: DirectX11: Added support for large mesh (64K+ vertices), enable ImGuiBackendFlags_RendererHasVtxOffset flag. -// 2019-04-30: DirectX11: Added support for special ImDrawCallback_ResetRenderState callback to reset render state. -// 2018-12-03: Misc: Added #pragma comment statement to automatically link with d3dcompiler.lib when using D3DCompile(). -// 2018-11-30: Misc: Setting up io.BackendRendererName so it can be displayed in the About Window. -// 2018-08-01: DirectX11: Querying for IDXGIFactory instead of IDXGIFactory1 to increase compatibility. -// 2018-07-13: DirectX11: Fixed unreleased resources in Init and Shutdown functions. -// 2018-06-08: Misc: Extracted imgui_impl_dx11.cpp/.h away from the old combined DX11+Win32 example. -// 2018-06-08: DirectX11: Use draw_data->DisplayPos and draw_data->DisplaySize to setup projection matrix and clipping rectangle. -// 2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_ImplDX11_RenderDrawData() in the .h file so you can call it yourself. -// 2018-02-06: Misc: Removed call to ImGui::Shutdown() which is not available from 1.60 WIP, user needs to call CreateContext/DestroyContext themselves. -// 2016-05-07: DirectX11: Disabling depth-write. - -#include "imgui.h" -#include "imgui_impl_dx11.h" - -// DirectX -#include -#include -#include -#ifdef _MSC_VER -#pragma comment(lib, "d3dcompiler") // Automatically link with d3dcompiler.lib as we are using D3DCompile() below. -#endif - -// DirectX data -static ID3D11Device* g_pd3dDevice = NULL; -static ID3D11DeviceContext* g_pd3dDeviceContext = NULL; -static IDXGIFactory* g_pFactory = NULL; -static ID3D11Buffer* g_pVB = NULL; -static ID3D11Buffer* g_pIB = NULL; -static ID3D10Blob* g_pVertexShaderBlob = NULL; -static ID3D11VertexShader* g_pVertexShader = NULL; -static ID3D11InputLayout* g_pInputLayout = NULL; -static ID3D11Buffer* g_pVertexConstantBuffer = NULL; -static ID3D10Blob* g_pPixelShaderBlob = NULL; -static ID3D11PixelShader* g_pPixelShader = NULL; -static ID3D11SamplerState* g_pFontSampler = NULL; -static ID3D11ShaderResourceView*g_pFontTextureView = NULL; -static ID3D11RasterizerState* g_pRasterizerState = NULL; -static ID3D11BlendState* g_pBlendState = NULL; -static ID3D11DepthStencilState* g_pDepthStencilState = NULL; -static int g_VertexBufferSize = 5000, g_IndexBufferSize = 10000; - -struct VERTEX_CONSTANT_BUFFER -{ - float mvp[4][4]; -}; - -static void ImGui_ImplDX11_SetupRenderState(ImDrawData* draw_data, ID3D11DeviceContext* ctx) -{ - // Setup viewport - D3D11_VIEWPORT vp; - memset(&vp, 0, sizeof(D3D11_VIEWPORT)); - vp.Width = draw_data->DisplaySize.x; - vp.Height = draw_data->DisplaySize.y; - vp.MinDepth = 0.0f; - vp.MaxDepth = 1.0f; - vp.TopLeftX = vp.TopLeftY = 0; - ctx->RSSetViewports(1, &vp); - - // Setup shader and vertex buffers - unsigned int stride = sizeof(ImDrawVert); - unsigned int offset = 0; - ctx->IASetInputLayout(g_pInputLayout); - ctx->IASetVertexBuffers(0, 1, &g_pVB, &stride, &offset); - ctx->IASetIndexBuffer(g_pIB, sizeof(ImDrawIdx) == 2 ? DXGI_FORMAT_R16_UINT : DXGI_FORMAT_R32_UINT, 0); - ctx->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); - ctx->VSSetShader(g_pVertexShader, NULL, 0); - ctx->VSSetConstantBuffers(0, 1, &g_pVertexConstantBuffer); - ctx->PSSetShader(g_pPixelShader, NULL, 0); - ctx->PSSetSamplers(0, 1, &g_pFontSampler); - ctx->GSSetShader(NULL, NULL, 0); - ctx->HSSetShader(NULL, NULL, 0); // In theory we should backup and restore this as well.. very infrequently used.. - ctx->DSSetShader(NULL, NULL, 0); // In theory we should backup and restore this as well.. very infrequently used.. - ctx->CSSetShader(NULL, NULL, 0); // In theory we should backup and restore this as well.. very infrequently used.. - - // Setup blend state - const float blend_factor[4] = { 0.f, 0.f, 0.f, 0.f }; - ctx->OMSetBlendState(g_pBlendState, blend_factor, 0xffffffff); - ctx->OMSetDepthStencilState(g_pDepthStencilState, 0); - ctx->RSSetState(g_pRasterizerState); -} - -// Render function -// (this used to be set in io.RenderDrawListsFn and called by ImGui::Render(), but you can now call this directly from your main loop) -void ImGui_ImplDX11_RenderDrawData(ImDrawData* draw_data) -{ - // Avoid rendering when minimized - if (draw_data->DisplaySize.x <= 0.0f || draw_data->DisplaySize.y <= 0.0f) - return; - - ID3D11DeviceContext* ctx = g_pd3dDeviceContext; - - // Create and grow vertex/index buffers if needed - if (!g_pVB || g_VertexBufferSize < draw_data->TotalVtxCount) - { - if (g_pVB) { g_pVB->Release(); g_pVB = NULL; } - g_VertexBufferSize = draw_data->TotalVtxCount + 5000; - D3D11_BUFFER_DESC desc; - memset(&desc, 0, sizeof(D3D11_BUFFER_DESC)); - desc.Usage = D3D11_USAGE_DYNAMIC; - desc.ByteWidth = g_VertexBufferSize * sizeof(ImDrawVert); - desc.BindFlags = D3D11_BIND_VERTEX_BUFFER; - desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; - desc.MiscFlags = 0; - if (g_pd3dDevice->CreateBuffer(&desc, NULL, &g_pVB) < 0) - return; - } - if (!g_pIB || g_IndexBufferSize < draw_data->TotalIdxCount) - { - if (g_pIB) { g_pIB->Release(); g_pIB = NULL; } - g_IndexBufferSize = draw_data->TotalIdxCount + 10000; - D3D11_BUFFER_DESC desc; - memset(&desc, 0, sizeof(D3D11_BUFFER_DESC)); - desc.Usage = D3D11_USAGE_DYNAMIC; - desc.ByteWidth = g_IndexBufferSize * sizeof(ImDrawIdx); - desc.BindFlags = D3D11_BIND_INDEX_BUFFER; - desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; - if (g_pd3dDevice->CreateBuffer(&desc, NULL, &g_pIB) < 0) - return; - } - - // Upload vertex/index data into a single contiguous GPU buffer - D3D11_MAPPED_SUBRESOURCE vtx_resource, idx_resource; - if (ctx->Map(g_pVB, 0, D3D11_MAP_WRITE_DISCARD, 0, &vtx_resource) != S_OK) - return; - if (ctx->Map(g_pIB, 0, D3D11_MAP_WRITE_DISCARD, 0, &idx_resource) != S_OK) - return; - ImDrawVert* vtx_dst = (ImDrawVert*)vtx_resource.pData; - ImDrawIdx* idx_dst = (ImDrawIdx*)idx_resource.pData; - for (int n = 0; n < draw_data->CmdListsCount; n++) - { - const ImDrawList* cmd_list = draw_data->CmdLists[n]; - memcpy(vtx_dst, cmd_list->VtxBuffer.Data, cmd_list->VtxBuffer.Size * sizeof(ImDrawVert)); - memcpy(idx_dst, cmd_list->IdxBuffer.Data, cmd_list->IdxBuffer.Size * sizeof(ImDrawIdx)); - vtx_dst += cmd_list->VtxBuffer.Size; - idx_dst += cmd_list->IdxBuffer.Size; - } - ctx->Unmap(g_pVB, 0); - ctx->Unmap(g_pIB, 0); - - // Setup orthographic projection matrix into our constant buffer - // Our visible imgui space lies from draw_data->DisplayPos (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayPos is (0,0) for single viewport apps. - { - D3D11_MAPPED_SUBRESOURCE mapped_resource; - if (ctx->Map(g_pVertexConstantBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mapped_resource) != S_OK) - return; - VERTEX_CONSTANT_BUFFER* constant_buffer = (VERTEX_CONSTANT_BUFFER*)mapped_resource.pData; - float L = draw_data->DisplayPos.x; - float R = draw_data->DisplayPos.x + draw_data->DisplaySize.x; - float T = draw_data->DisplayPos.y; - float B = draw_data->DisplayPos.y + draw_data->DisplaySize.y; - float mvp[4][4] = - { - { 2.0f/(R-L), 0.0f, 0.0f, 0.0f }, - { 0.0f, 2.0f/(T-B), 0.0f, 0.0f }, - { 0.0f, 0.0f, 0.5f, 0.0f }, - { (R+L)/(L-R), (T+B)/(B-T), 0.5f, 1.0f }, - }; - memcpy(&constant_buffer->mvp, mvp, sizeof(mvp)); - ctx->Unmap(g_pVertexConstantBuffer, 0); - } - - // Backup DX state that will be modified to restore it afterwards (unfortunately this is very ugly looking and verbose. Close your eyes!) - struct BACKUP_DX11_STATE - { - UINT ScissorRectsCount, ViewportsCount; - D3D11_RECT ScissorRects[D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE]; - D3D11_VIEWPORT Viewports[D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE]; - ID3D11RasterizerState* RS; - ID3D11BlendState* BlendState; - FLOAT BlendFactor[4]; - UINT SampleMask; - UINT StencilRef; - ID3D11DepthStencilState* DepthStencilState; - ID3D11ShaderResourceView* PSShaderResource; - ID3D11SamplerState* PSSampler; - ID3D11PixelShader* PS; - ID3D11VertexShader* VS; - ID3D11GeometryShader* GS; - UINT PSInstancesCount, VSInstancesCount, GSInstancesCount; - ID3D11ClassInstance *PSInstances[256], *VSInstances[256], *GSInstances[256]; // 256 is max according to PSSetShader documentation - D3D11_PRIMITIVE_TOPOLOGY PrimitiveTopology; - ID3D11Buffer* IndexBuffer, *VertexBuffer, *VSConstantBuffer; - UINT IndexBufferOffset, VertexBufferStride, VertexBufferOffset; - DXGI_FORMAT IndexBufferFormat; - ID3D11InputLayout* InputLayout; - }; - BACKUP_DX11_STATE old; - old.ScissorRectsCount = old.ViewportsCount = D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE; - ctx->RSGetScissorRects(&old.ScissorRectsCount, old.ScissorRects); - ctx->RSGetViewports(&old.ViewportsCount, old.Viewports); - ctx->RSGetState(&old.RS); - ctx->OMGetBlendState(&old.BlendState, old.BlendFactor, &old.SampleMask); - ctx->OMGetDepthStencilState(&old.DepthStencilState, &old.StencilRef); - ctx->PSGetShaderResources(0, 1, &old.PSShaderResource); - ctx->PSGetSamplers(0, 1, &old.PSSampler); - old.PSInstancesCount = old.VSInstancesCount = old.GSInstancesCount = 256; - ctx->PSGetShader(&old.PS, old.PSInstances, &old.PSInstancesCount); - ctx->VSGetShader(&old.VS, old.VSInstances, &old.VSInstancesCount); - ctx->VSGetConstantBuffers(0, 1, &old.VSConstantBuffer); - ctx->GSGetShader(&old.GS, old.GSInstances, &old.GSInstancesCount); - - ctx->IAGetPrimitiveTopology(&old.PrimitiveTopology); - ctx->IAGetIndexBuffer(&old.IndexBuffer, &old.IndexBufferFormat, &old.IndexBufferOffset); - ctx->IAGetVertexBuffers(0, 1, &old.VertexBuffer, &old.VertexBufferStride, &old.VertexBufferOffset); - ctx->IAGetInputLayout(&old.InputLayout); - - // Setup desired DX state - ImGui_ImplDX11_SetupRenderState(draw_data, ctx); - - // Render command lists - // (Because we merged all buffers into a single one, we maintain our own offset into them) - int global_idx_offset = 0; - int global_vtx_offset = 0; - ImVec2 clip_off = draw_data->DisplayPos; - for (int n = 0; n < draw_data->CmdListsCount; n++) - { - const ImDrawList* cmd_list = draw_data->CmdLists[n]; - for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++) - { - const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i]; - if (pcmd->UserCallback != NULL) - { - // User callback, registered via ImDrawList::AddCallback() - // (ImDrawCallback_ResetRenderState is a special callback value used by the user to request the renderer to reset render state.) - if (pcmd->UserCallback == ImDrawCallback_ResetRenderState) - ImGui_ImplDX11_SetupRenderState(draw_data, ctx); - else - pcmd->UserCallback(cmd_list, pcmd); - } - else - { - // Apply scissor/clipping rectangle - const D3D11_RECT r = { (LONG)(pcmd->ClipRect.x - clip_off.x), (LONG)(pcmd->ClipRect.y - clip_off.y), (LONG)(pcmd->ClipRect.z - clip_off.x), (LONG)(pcmd->ClipRect.w - clip_off.y) }; - ctx->RSSetScissorRects(1, &r); - - // Bind texture, Draw - ID3D11ShaderResourceView* texture_srv = (ID3D11ShaderResourceView*)pcmd->TextureId; - ctx->PSSetShaderResources(0, 1, &texture_srv); - ctx->DrawIndexed(pcmd->ElemCount, pcmd->IdxOffset + global_idx_offset, pcmd->VtxOffset + global_vtx_offset); - } - } - global_idx_offset += cmd_list->IdxBuffer.Size; - global_vtx_offset += cmd_list->VtxBuffer.Size; - } - - // Restore modified DX state - ctx->RSSetScissorRects(old.ScissorRectsCount, old.ScissorRects); - ctx->RSSetViewports(old.ViewportsCount, old.Viewports); - ctx->RSSetState(old.RS); if (old.RS) old.RS->Release(); - ctx->OMSetBlendState(old.BlendState, old.BlendFactor, old.SampleMask); if (old.BlendState) old.BlendState->Release(); - ctx->OMSetDepthStencilState(old.DepthStencilState, old.StencilRef); if (old.DepthStencilState) old.DepthStencilState->Release(); - ctx->PSSetShaderResources(0, 1, &old.PSShaderResource); if (old.PSShaderResource) old.PSShaderResource->Release(); - ctx->PSSetSamplers(0, 1, &old.PSSampler); if (old.PSSampler) old.PSSampler->Release(); - ctx->PSSetShader(old.PS, old.PSInstances, old.PSInstancesCount); if (old.PS) old.PS->Release(); - for (UINT i = 0; i < old.PSInstancesCount; i++) if (old.PSInstances[i]) old.PSInstances[i]->Release(); - ctx->VSSetShader(old.VS, old.VSInstances, old.VSInstancesCount); if (old.VS) old.VS->Release(); - ctx->VSSetConstantBuffers(0, 1, &old.VSConstantBuffer); if (old.VSConstantBuffer) old.VSConstantBuffer->Release(); - ctx->GSSetShader(old.GS, old.GSInstances, old.GSInstancesCount); if (old.GS) old.GS->Release(); - for (UINT i = 0; i < old.VSInstancesCount; i++) if (old.VSInstances[i]) old.VSInstances[i]->Release(); - ctx->IASetPrimitiveTopology(old.PrimitiveTopology); - ctx->IASetIndexBuffer(old.IndexBuffer, old.IndexBufferFormat, old.IndexBufferOffset); if (old.IndexBuffer) old.IndexBuffer->Release(); - ctx->IASetVertexBuffers(0, 1, &old.VertexBuffer, &old.VertexBufferStride, &old.VertexBufferOffset); if (old.VertexBuffer) old.VertexBuffer->Release(); - ctx->IASetInputLayout(old.InputLayout); if (old.InputLayout) old.InputLayout->Release(); -} - -static void ImGui_ImplDX11_CreateFontsTexture() -{ - // Build texture atlas - ImGuiIO& io = ImGui::GetIO(); - unsigned char* pixels; - int width, height; - io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); - - // Upload texture to graphics system - { - D3D11_TEXTURE2D_DESC desc; - ZeroMemory(&desc, sizeof(desc)); - desc.Width = width; - desc.Height = height; - desc.MipLevels = 1; - desc.ArraySize = 1; - desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - desc.SampleDesc.Count = 1; - desc.Usage = D3D11_USAGE_DEFAULT; - desc.BindFlags = D3D11_BIND_SHADER_RESOURCE; - desc.CPUAccessFlags = 0; - - ID3D11Texture2D *pTexture = NULL; - D3D11_SUBRESOURCE_DATA subResource; - subResource.pSysMem = pixels; - subResource.SysMemPitch = desc.Width * 4; - subResource.SysMemSlicePitch = 0; - g_pd3dDevice->CreateTexture2D(&desc, &subResource, &pTexture); - - // Create texture view - D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc; - ZeroMemory(&srvDesc, sizeof(srvDesc)); - srvDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; - srvDesc.Texture2D.MipLevels = desc.MipLevels; - srvDesc.Texture2D.MostDetailedMip = 0; - g_pd3dDevice->CreateShaderResourceView(pTexture, &srvDesc, &g_pFontTextureView); - pTexture->Release(); - } - - // Store our identifier - io.Fonts->TexID = (ImTextureID)g_pFontTextureView; - - // Create texture sampler - { - D3D11_SAMPLER_DESC desc; - ZeroMemory(&desc, sizeof(desc)); - desc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; - desc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP; - desc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP; - desc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP; - desc.MipLODBias = 0.f; - desc.ComparisonFunc = D3D11_COMPARISON_ALWAYS; - desc.MinLOD = 0.f; - desc.MaxLOD = 0.f; - g_pd3dDevice->CreateSamplerState(&desc, &g_pFontSampler); - } -} - -bool ImGui_ImplDX11_CreateDeviceObjects() -{ - if (!g_pd3dDevice) - return false; - if (g_pFontSampler) - ImGui_ImplDX11_InvalidateDeviceObjects(); - - // By using D3DCompile() from / d3dcompiler.lib, we introduce a dependency to a given version of d3dcompiler_XX.dll (see D3DCOMPILER_DLL_A) - // If you would like to use this DX11 sample code but remove this dependency you can: - // 1) compile once, save the compiled shader blobs into a file or source code and pass them to CreateVertexShader()/CreatePixelShader() [preferred solution] - // 2) use code to detect any version of the DLL and grab a pointer to D3DCompile from the DLL. - // See https://github.com/ocornut/imgui/pull/638 for sources and details. - - // Create the vertex shader - { - static const char* vertexShader = - "cbuffer vertexBuffer : register(b0) \ - {\ - float4x4 ProjectionMatrix; \ - };\ - struct VS_INPUT\ - {\ - float2 pos : POSITION;\ - float4 col : COLOR0;\ - float2 uv : TEXCOORD0;\ - };\ - \ - struct PS_INPUT\ - {\ - float4 pos : SV_POSITION;\ - float4 col : COLOR0;\ - float2 uv : TEXCOORD0;\ - };\ - \ - PS_INPUT main(VS_INPUT input)\ - {\ - PS_INPUT output;\ - output.pos = mul( ProjectionMatrix, float4(input.pos.xy, 0.f, 1.f));\ - output.col = input.col;\ - output.uv = input.uv;\ - return output;\ - }"; - - D3DCompile(vertexShader, strlen(vertexShader), NULL, NULL, NULL, "main", "vs_4_0", 0, 0, &g_pVertexShaderBlob, NULL); - if (g_pVertexShaderBlob == NULL) // NB: Pass ID3D10Blob* pErrorBlob to D3DCompile() to get error showing in (const char*)pErrorBlob->GetBufferPointer(). Make sure to Release() the blob! - return false; - if (g_pd3dDevice->CreateVertexShader((DWORD*)g_pVertexShaderBlob->GetBufferPointer(), g_pVertexShaderBlob->GetBufferSize(), NULL, &g_pVertexShader) != S_OK) - return false; - - // Create the input layout - D3D11_INPUT_ELEMENT_DESC local_layout[] = - { - { "POSITION", 0, DXGI_FORMAT_R32G32_FLOAT, 0, (size_t)(&((ImDrawVert*)0)->pos), D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, (size_t)(&((ImDrawVert*)0)->uv), D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "COLOR", 0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, (size_t)(&((ImDrawVert*)0)->col), D3D11_INPUT_PER_VERTEX_DATA, 0 }, - }; - if (g_pd3dDevice->CreateInputLayout(local_layout, 3, g_pVertexShaderBlob->GetBufferPointer(), g_pVertexShaderBlob->GetBufferSize(), &g_pInputLayout) != S_OK) - return false; - - // Create the constant buffer - { - D3D11_BUFFER_DESC desc; - desc.ByteWidth = sizeof(VERTEX_CONSTANT_BUFFER); - desc.Usage = D3D11_USAGE_DYNAMIC; - desc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; - desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; - desc.MiscFlags = 0; - g_pd3dDevice->CreateBuffer(&desc, NULL, &g_pVertexConstantBuffer); - } - } - - // Create the pixel shader - { - static const char* pixelShader = - "struct PS_INPUT\ - {\ - float4 pos : SV_POSITION;\ - float4 col : COLOR0;\ - float2 uv : TEXCOORD0;\ - };\ - sampler sampler0;\ - Texture2D texture0;\ - \ - float4 main(PS_INPUT input) : SV_Target\ - {\ - float4 out_col = input.col * texture0.Sample(sampler0, input.uv); \ - return out_col; \ - }"; - - D3DCompile(pixelShader, strlen(pixelShader), NULL, NULL, NULL, "main", "ps_4_0", 0, 0, &g_pPixelShaderBlob, NULL); - if (g_pPixelShaderBlob == NULL) // NB: Pass ID3D10Blob* pErrorBlob to D3DCompile() to get error showing in (const char*)pErrorBlob->GetBufferPointer(). Make sure to Release() the blob! - return false; - if (g_pd3dDevice->CreatePixelShader((DWORD*)g_pPixelShaderBlob->GetBufferPointer(), g_pPixelShaderBlob->GetBufferSize(), NULL, &g_pPixelShader) != S_OK) - return false; - } - - // Create the blending setup - { - D3D11_BLEND_DESC desc; - ZeroMemory(&desc, sizeof(desc)); - desc.AlphaToCoverageEnable = false; - desc.RenderTarget[0].BlendEnable = true; - desc.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA; - desc.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA; - desc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD; - desc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_INV_SRC_ALPHA; - desc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_ZERO; - desc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD; - desc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL; - g_pd3dDevice->CreateBlendState(&desc, &g_pBlendState); - } - - // Create the rasterizer state - { - D3D11_RASTERIZER_DESC desc; - ZeroMemory(&desc, sizeof(desc)); - desc.FillMode = D3D11_FILL_SOLID; - desc.CullMode = D3D11_CULL_NONE; - desc.ScissorEnable = true; - desc.DepthClipEnable = true; - g_pd3dDevice->CreateRasterizerState(&desc, &g_pRasterizerState); - } - - // Create depth-stencil State - { - D3D11_DEPTH_STENCIL_DESC desc; - ZeroMemory(&desc, sizeof(desc)); - desc.DepthEnable = false; - desc.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL; - desc.DepthFunc = D3D11_COMPARISON_ALWAYS; - desc.StencilEnable = false; - desc.FrontFace.StencilFailOp = desc.FrontFace.StencilDepthFailOp = desc.FrontFace.StencilPassOp = D3D11_STENCIL_OP_KEEP; - desc.FrontFace.StencilFunc = D3D11_COMPARISON_ALWAYS; - desc.BackFace = desc.FrontFace; - g_pd3dDevice->CreateDepthStencilState(&desc, &g_pDepthStencilState); - } - - ImGui_ImplDX11_CreateFontsTexture(); - - return true; -} - -void ImGui_ImplDX11_InvalidateDeviceObjects() -{ - if (!g_pd3dDevice) - return; - - if (g_pFontSampler) { g_pFontSampler->Release(); g_pFontSampler = NULL; } - if (g_pFontTextureView) { g_pFontTextureView->Release(); g_pFontTextureView = NULL; ImGui::GetIO().Fonts->TexID = NULL; } // We copied g_pFontTextureView to io.Fonts->TexID so let's clear that as well. - if (g_pIB) { g_pIB->Release(); g_pIB = NULL; } - if (g_pVB) { g_pVB->Release(); g_pVB = NULL; } - - if (g_pBlendState) { g_pBlendState->Release(); g_pBlendState = NULL; } - if (g_pDepthStencilState) { g_pDepthStencilState->Release(); g_pDepthStencilState = NULL; } - if (g_pRasterizerState) { g_pRasterizerState->Release(); g_pRasterizerState = NULL; } - if (g_pPixelShader) { g_pPixelShader->Release(); g_pPixelShader = NULL; } - if (g_pPixelShaderBlob) { g_pPixelShaderBlob->Release(); g_pPixelShaderBlob = NULL; } - if (g_pVertexConstantBuffer) { g_pVertexConstantBuffer->Release(); g_pVertexConstantBuffer = NULL; } - if (g_pInputLayout) { g_pInputLayout->Release(); g_pInputLayout = NULL; } - if (g_pVertexShader) { g_pVertexShader->Release(); g_pVertexShader = NULL; } - if (g_pVertexShaderBlob) { g_pVertexShaderBlob->Release(); g_pVertexShaderBlob = NULL; } -} - -bool ImGui_ImplDX11_Init(ID3D11Device* device, ID3D11DeviceContext* device_context) -{ - // Setup back-end capabilities flags - ImGuiIO& io = ImGui::GetIO(); - io.BackendRendererName = "imgui_impl_dx11"; - io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset; // We can honor the ImDrawCmd::VtxOffset field, allowing for large meshes. - - // Get factory from device - IDXGIDevice* pDXGIDevice = NULL; - IDXGIAdapter* pDXGIAdapter = NULL; - IDXGIFactory* pFactory = NULL; - - if (device->QueryInterface(IID_PPV_ARGS(&pDXGIDevice)) == S_OK) - if (pDXGIDevice->GetParent(IID_PPV_ARGS(&pDXGIAdapter)) == S_OK) - if (pDXGIAdapter->GetParent(IID_PPV_ARGS(&pFactory)) == S_OK) - { - g_pd3dDevice = device; - g_pd3dDeviceContext = device_context; - g_pFactory = pFactory; - } - if (pDXGIDevice) pDXGIDevice->Release(); - if (pDXGIAdapter) pDXGIAdapter->Release(); - g_pd3dDevice->AddRef(); - g_pd3dDeviceContext->AddRef(); - - return true; -} - -void ImGui_ImplDX11_Shutdown() -{ - ImGui_ImplDX11_InvalidateDeviceObjects(); - if (g_pFactory) { g_pFactory->Release(); g_pFactory = NULL; } - if (g_pd3dDevice) { g_pd3dDevice->Release(); g_pd3dDevice = NULL; } - if (g_pd3dDeviceContext) { g_pd3dDeviceContext->Release(); g_pd3dDeviceContext = NULL; } -} - -void ImGui_ImplDX11_NewFrame() -{ - if (!g_pFontSampler) - ImGui_ImplDX11_CreateDeviceObjects(); -} diff --git a/cmake/imgui/examples/imgui_impl_dx11.h b/cmake/imgui/examples/imgui_impl_dx11.h deleted file mode 100644 index c54d4379..00000000 --- a/cmake/imgui/examples/imgui_impl_dx11.h +++ /dev/null @@ -1,24 +0,0 @@ -// dear imgui: Renderer for DirectX11 -// This needs to be used along with a Platform Binding (e.g. Win32) - -// Implemented features: -// [X] Renderer: User texture binding. Use 'ID3D11ShaderResourceView*' as ImTextureID. Read the FAQ about ImTextureID! -// [X] Renderer: Support for large meshes (64k+ vertices) with 16-bit indices. - -// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. -// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. -// https://github.com/ocornut/imgui - -#pragma once - -struct ID3D11Device; -struct ID3D11DeviceContext; - -IMGUI_IMPL_API bool ImGui_ImplDX11_Init(ID3D11Device* device, ID3D11DeviceContext* device_context); -IMGUI_IMPL_API void ImGui_ImplDX11_Shutdown(); -IMGUI_IMPL_API void ImGui_ImplDX11_NewFrame(); -IMGUI_IMPL_API void ImGui_ImplDX11_RenderDrawData(ImDrawData* draw_data); - -// Use if you want to reset your rendering device without losing ImGui state. -IMGUI_IMPL_API void ImGui_ImplDX11_InvalidateDeviceObjects(); -IMGUI_IMPL_API bool ImGui_ImplDX11_CreateDeviceObjects(); diff --git a/cmake/imgui/examples/imgui_impl_dx12.cpp b/cmake/imgui/examples/imgui_impl_dx12.cpp deleted file mode 100644 index e7bb5e9c..00000000 --- a/cmake/imgui/examples/imgui_impl_dx12.cpp +++ /dev/null @@ -1,662 +0,0 @@ -// dear imgui: Renderer for DirectX12 -// This needs to be used along with a Platform Binding (e.g. Win32) - -// Implemented features: -// [X] Renderer: User texture binding. Use 'D3D12_GPU_DESCRIPTOR_HANDLE' as ImTextureID. Read the FAQ about ImTextureID! -// [X] Renderer: Support for large meshes (64k+ vertices) with 16-bit indices. -// Issues: -// [ ] 64-bit only for now! (Because sizeof(ImTextureId) == sizeof(void*)). See github.com/ocornut/imgui/pull/301 - -// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. -// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. -// https://github.com/ocornut/imgui - -// CHANGELOG -// (minor and older changes stripped away, please see git history for details) -// 2019-10-18: DirectX12: *BREAKING CHANGE* Added extra ID3D12DescriptorHeap parameter to ImGui_ImplDX12_Init() function. -// 2019-05-29: DirectX12: Added support for large mesh (64K+ vertices), enable ImGuiBackendFlags_RendererHasVtxOffset flag. -// 2019-04-30: DirectX12: Added support for special ImDrawCallback_ResetRenderState callback to reset render state. -// 2019-03-29: Misc: Various minor tidying up. -// 2018-12-03: Misc: Added #pragma comment statement to automatically link with d3dcompiler.lib when using D3DCompile(). -// 2018-11-30: Misc: Setting up io.BackendRendererName so it can be displayed in the About Window. -// 2018-06-12: DirectX12: Moved the ID3D12GraphicsCommandList* parameter from NewFrame() to RenderDrawData(). -// 2018-06-08: Misc: Extracted imgui_impl_dx12.cpp/.h away from the old combined DX12+Win32 example. -// 2018-06-08: DirectX12: Use draw_data->DisplayPos and draw_data->DisplaySize to setup projection matrix and clipping rectangle (to ease support for future multi-viewport). -// 2018-02-22: Merged into master with all Win32 code synchronized to other examples. - -#include "imgui.h" -#include "imgui_impl_dx12.h" - -// DirectX -#include -#include -#include -#ifdef _MSC_VER -#pragma comment(lib, "d3dcompiler") // Automatically link with d3dcompiler.lib as we are using D3DCompile() below. -#endif - -// DirectX data -static ID3D12Device* g_pd3dDevice = NULL; -static ID3D10Blob* g_pVertexShaderBlob = NULL; -static ID3D10Blob* g_pPixelShaderBlob = NULL; -static ID3D12RootSignature* g_pRootSignature = NULL; -static ID3D12PipelineState* g_pPipelineState = NULL; -static DXGI_FORMAT g_RTVFormat = DXGI_FORMAT_UNKNOWN; -static ID3D12Resource* g_pFontTextureResource = NULL; -static D3D12_CPU_DESCRIPTOR_HANDLE g_hFontSrvCpuDescHandle = {}; -static D3D12_GPU_DESCRIPTOR_HANDLE g_hFontSrvGpuDescHandle = {}; - -struct FrameResources -{ - ID3D12Resource* IndexBuffer; - ID3D12Resource* VertexBuffer; - int IndexBufferSize; - int VertexBufferSize; -}; -static FrameResources* g_pFrameResources = NULL; -static UINT g_numFramesInFlight = 0; -static UINT g_frameIndex = UINT_MAX; - -template -static void SafeRelease(T*& res) -{ - if (res) - res->Release(); - res = NULL; -} - -struct VERTEX_CONSTANT_BUFFER -{ - float mvp[4][4]; -}; - -static void ImGui_ImplDX12_SetupRenderState(ImDrawData* draw_data, ID3D12GraphicsCommandList* ctx, FrameResources* fr) -{ - // Setup orthographic projection matrix into our constant buffer - // Our visible imgui space lies from draw_data->DisplayPos (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). - VERTEX_CONSTANT_BUFFER vertex_constant_buffer; - { - float L = draw_data->DisplayPos.x; - float R = draw_data->DisplayPos.x + draw_data->DisplaySize.x; - float T = draw_data->DisplayPos.y; - float B = draw_data->DisplayPos.y + draw_data->DisplaySize.y; - float mvp[4][4] = - { - { 2.0f/(R-L), 0.0f, 0.0f, 0.0f }, - { 0.0f, 2.0f/(T-B), 0.0f, 0.0f }, - { 0.0f, 0.0f, 0.5f, 0.0f }, - { (R+L)/(L-R), (T+B)/(B-T), 0.5f, 1.0f }, - }; - memcpy(&vertex_constant_buffer.mvp, mvp, sizeof(mvp)); - } - - // Setup viewport - D3D12_VIEWPORT vp; - memset(&vp, 0, sizeof(D3D12_VIEWPORT)); - vp.Width = draw_data->DisplaySize.x; - vp.Height = draw_data->DisplaySize.y; - vp.MinDepth = 0.0f; - vp.MaxDepth = 1.0f; - vp.TopLeftX = vp.TopLeftY = 0.0f; - ctx->RSSetViewports(1, &vp); - - // Bind shader and vertex buffers - unsigned int stride = sizeof(ImDrawVert); - unsigned int offset = 0; - D3D12_VERTEX_BUFFER_VIEW vbv; - memset(&vbv, 0, sizeof(D3D12_VERTEX_BUFFER_VIEW)); - vbv.BufferLocation = fr->VertexBuffer->GetGPUVirtualAddress() + offset; - vbv.SizeInBytes = fr->VertexBufferSize * stride; - vbv.StrideInBytes = stride; - ctx->IASetVertexBuffers(0, 1, &vbv); - D3D12_INDEX_BUFFER_VIEW ibv; - memset(&ibv, 0, sizeof(D3D12_INDEX_BUFFER_VIEW)); - ibv.BufferLocation = fr->IndexBuffer->GetGPUVirtualAddress(); - ibv.SizeInBytes = fr->IndexBufferSize * sizeof(ImDrawIdx); - ibv.Format = sizeof(ImDrawIdx) == 2 ? DXGI_FORMAT_R16_UINT : DXGI_FORMAT_R32_UINT; - ctx->IASetIndexBuffer(&ibv); - ctx->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST); - ctx->SetPipelineState(g_pPipelineState); - ctx->SetGraphicsRootSignature(g_pRootSignature); - ctx->SetGraphicsRoot32BitConstants(0, 16, &vertex_constant_buffer, 0); - - // Setup blend factor - const float blend_factor[4] = { 0.f, 0.f, 0.f, 0.f }; - ctx->OMSetBlendFactor(blend_factor); -} - -// Render function -// (this used to be set in io.RenderDrawListsFn and called by ImGui::Render(), but you can now call this directly from your main loop) -void ImGui_ImplDX12_RenderDrawData(ImDrawData* draw_data, ID3D12GraphicsCommandList* ctx) -{ - // Avoid rendering when minimized - if (draw_data->DisplaySize.x <= 0.0f || draw_data->DisplaySize.y <= 0.0f) - return; - - // FIXME: I'm assuming that this only gets called once per frame! - // If not, we can't just re-allocate the IB or VB, we'll have to do a proper allocator. - g_frameIndex = g_frameIndex + 1; - FrameResources* fr = &g_pFrameResources[g_frameIndex % g_numFramesInFlight]; - - // Create and grow vertex/index buffers if needed - if (fr->VertexBuffer == NULL || fr->VertexBufferSize < draw_data->TotalVtxCount) - { - SafeRelease(fr->VertexBuffer); - fr->VertexBufferSize = draw_data->TotalVtxCount + 5000; - D3D12_HEAP_PROPERTIES props; - memset(&props, 0, sizeof(D3D12_HEAP_PROPERTIES)); - props.Type = D3D12_HEAP_TYPE_UPLOAD; - props.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; - props.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; - D3D12_RESOURCE_DESC desc; - memset(&desc, 0, sizeof(D3D12_RESOURCE_DESC)); - desc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; - desc.Width = fr->VertexBufferSize * sizeof(ImDrawVert); - desc.Height = 1; - desc.DepthOrArraySize = 1; - desc.MipLevels = 1; - desc.Format = DXGI_FORMAT_UNKNOWN; - desc.SampleDesc.Count = 1; - desc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; - desc.Flags = D3D12_RESOURCE_FLAG_NONE; - if (g_pd3dDevice->CreateCommittedResource(&props, D3D12_HEAP_FLAG_NONE, &desc, D3D12_RESOURCE_STATE_GENERIC_READ, NULL, IID_PPV_ARGS(&fr->VertexBuffer)) < 0) - return; - } - if (fr->IndexBuffer == NULL || fr->IndexBufferSize < draw_data->TotalIdxCount) - { - SafeRelease(fr->IndexBuffer); - fr->IndexBufferSize = draw_data->TotalIdxCount + 10000; - D3D12_HEAP_PROPERTIES props; - memset(&props, 0, sizeof(D3D12_HEAP_PROPERTIES)); - props.Type = D3D12_HEAP_TYPE_UPLOAD; - props.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; - props.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; - D3D12_RESOURCE_DESC desc; - memset(&desc, 0, sizeof(D3D12_RESOURCE_DESC)); - desc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; - desc.Width = fr->IndexBufferSize * sizeof(ImDrawIdx); - desc.Height = 1; - desc.DepthOrArraySize = 1; - desc.MipLevels = 1; - desc.Format = DXGI_FORMAT_UNKNOWN; - desc.SampleDesc.Count = 1; - desc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; - desc.Flags = D3D12_RESOURCE_FLAG_NONE; - if (g_pd3dDevice->CreateCommittedResource(&props, D3D12_HEAP_FLAG_NONE, &desc, D3D12_RESOURCE_STATE_GENERIC_READ, NULL, IID_PPV_ARGS(&fr->IndexBuffer)) < 0) - return; - } - - // Upload vertex/index data into a single contiguous GPU buffer - void* vtx_resource, *idx_resource; - D3D12_RANGE range; - memset(&range, 0, sizeof(D3D12_RANGE)); - if (fr->VertexBuffer->Map(0, &range, &vtx_resource) != S_OK) - return; - if (fr->IndexBuffer->Map(0, &range, &idx_resource) != S_OK) - return; - ImDrawVert* vtx_dst = (ImDrawVert*)vtx_resource; - ImDrawIdx* idx_dst = (ImDrawIdx*)idx_resource; - for (int n = 0; n < draw_data->CmdListsCount; n++) - { - const ImDrawList* cmd_list = draw_data->CmdLists[n]; - memcpy(vtx_dst, cmd_list->VtxBuffer.Data, cmd_list->VtxBuffer.Size * sizeof(ImDrawVert)); - memcpy(idx_dst, cmd_list->IdxBuffer.Data, cmd_list->IdxBuffer.Size * sizeof(ImDrawIdx)); - vtx_dst += cmd_list->VtxBuffer.Size; - idx_dst += cmd_list->IdxBuffer.Size; - } - fr->VertexBuffer->Unmap(0, &range); - fr->IndexBuffer->Unmap(0, &range); - - // Setup desired DX state - ImGui_ImplDX12_SetupRenderState(draw_data, ctx, fr); - - // Render command lists - // (Because we merged all buffers into a single one, we maintain our own offset into them) - int global_vtx_offset = 0; - int global_idx_offset = 0; - ImVec2 clip_off = draw_data->DisplayPos; - for (int n = 0; n < draw_data->CmdListsCount; n++) - { - const ImDrawList* cmd_list = draw_data->CmdLists[n]; - for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++) - { - const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i]; - if (pcmd->UserCallback != NULL) - { - // User callback, registered via ImDrawList::AddCallback() - // (ImDrawCallback_ResetRenderState is a special callback value used by the user to request the renderer to reset render state.) - if (pcmd->UserCallback == ImDrawCallback_ResetRenderState) - ImGui_ImplDX12_SetupRenderState(draw_data, ctx, fr); - else - pcmd->UserCallback(cmd_list, pcmd); - } - else - { - // Apply Scissor, Bind texture, Draw - const D3D12_RECT r = { (LONG)(pcmd->ClipRect.x - clip_off.x), (LONG)(pcmd->ClipRect.y - clip_off.y), (LONG)(pcmd->ClipRect.z - clip_off.x), (LONG)(pcmd->ClipRect.w - clip_off.y) }; - ctx->SetGraphicsRootDescriptorTable(1, *(D3D12_GPU_DESCRIPTOR_HANDLE*)&pcmd->TextureId); - ctx->RSSetScissorRects(1, &r); - ctx->DrawIndexedInstanced(pcmd->ElemCount, 1, pcmd->IdxOffset + global_idx_offset, pcmd->VtxOffset + global_vtx_offset, 0); - } - } - global_idx_offset += cmd_list->IdxBuffer.Size; - global_vtx_offset += cmd_list->VtxBuffer.Size; - } -} - -static void ImGui_ImplDX12_CreateFontsTexture() -{ - // Build texture atlas - ImGuiIO& io = ImGui::GetIO(); - unsigned char* pixels; - int width, height; - io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); - - // Upload texture to graphics system - { - D3D12_HEAP_PROPERTIES props; - memset(&props, 0, sizeof(D3D12_HEAP_PROPERTIES)); - props.Type = D3D12_HEAP_TYPE_DEFAULT; - props.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; - props.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; - - D3D12_RESOURCE_DESC desc; - ZeroMemory(&desc, sizeof(desc)); - desc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; - desc.Alignment = 0; - desc.Width = width; - desc.Height = height; - desc.DepthOrArraySize = 1; - desc.MipLevels = 1; - desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - desc.SampleDesc.Count = 1; - desc.SampleDesc.Quality = 0; - desc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; - desc.Flags = D3D12_RESOURCE_FLAG_NONE; - - ID3D12Resource* pTexture = NULL; - g_pd3dDevice->CreateCommittedResource(&props, D3D12_HEAP_FLAG_NONE, &desc, - D3D12_RESOURCE_STATE_COPY_DEST, NULL, IID_PPV_ARGS(&pTexture)); - - UINT uploadPitch = (width * 4 + D3D12_TEXTURE_DATA_PITCH_ALIGNMENT - 1u) & ~(D3D12_TEXTURE_DATA_PITCH_ALIGNMENT - 1u); - UINT uploadSize = height * uploadPitch; - desc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; - desc.Alignment = 0; - desc.Width = uploadSize; - desc.Height = 1; - desc.DepthOrArraySize = 1; - desc.MipLevels = 1; - desc.Format = DXGI_FORMAT_UNKNOWN; - desc.SampleDesc.Count = 1; - desc.SampleDesc.Quality = 0; - desc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; - desc.Flags = D3D12_RESOURCE_FLAG_NONE; - - props.Type = D3D12_HEAP_TYPE_UPLOAD; - props.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; - props.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; - - ID3D12Resource* uploadBuffer = NULL; - HRESULT hr = g_pd3dDevice->CreateCommittedResource(&props, D3D12_HEAP_FLAG_NONE, &desc, - D3D12_RESOURCE_STATE_GENERIC_READ, NULL, IID_PPV_ARGS(&uploadBuffer)); - IM_ASSERT(SUCCEEDED(hr)); - - void* mapped = NULL; - D3D12_RANGE range = { 0, uploadSize }; - hr = uploadBuffer->Map(0, &range, &mapped); - IM_ASSERT(SUCCEEDED(hr)); - for (int y = 0; y < height; y++) - memcpy((void*) ((uintptr_t) mapped + y * uploadPitch), pixels + y * width * 4, width * 4); - uploadBuffer->Unmap(0, &range); - - D3D12_TEXTURE_COPY_LOCATION srcLocation = {}; - srcLocation.pResource = uploadBuffer; - srcLocation.Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT; - srcLocation.PlacedFootprint.Footprint.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - srcLocation.PlacedFootprint.Footprint.Width = width; - srcLocation.PlacedFootprint.Footprint.Height = height; - srcLocation.PlacedFootprint.Footprint.Depth = 1; - srcLocation.PlacedFootprint.Footprint.RowPitch = uploadPitch; - - D3D12_TEXTURE_COPY_LOCATION dstLocation = {}; - dstLocation.pResource = pTexture; - dstLocation.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; - dstLocation.SubresourceIndex = 0; - - D3D12_RESOURCE_BARRIER barrier = {}; - barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; - barrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; - barrier.Transition.pResource = pTexture; - barrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; - barrier.Transition.StateBefore = D3D12_RESOURCE_STATE_COPY_DEST; - barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE; - - ID3D12Fence* fence = NULL; - hr = g_pd3dDevice->CreateFence(0, D3D12_FENCE_FLAG_NONE, IID_PPV_ARGS(&fence)); - IM_ASSERT(SUCCEEDED(hr)); - - HANDLE event = CreateEvent(0, 0, 0, 0); - IM_ASSERT(event != NULL); - - D3D12_COMMAND_QUEUE_DESC queueDesc = {}; - queueDesc.Type = D3D12_COMMAND_LIST_TYPE_DIRECT; - queueDesc.Flags = D3D12_COMMAND_QUEUE_FLAG_NONE; - queueDesc.NodeMask = 1; - - ID3D12CommandQueue* cmdQueue = NULL; - hr = g_pd3dDevice->CreateCommandQueue(&queueDesc, IID_PPV_ARGS(&cmdQueue)); - IM_ASSERT(SUCCEEDED(hr)); - - ID3D12CommandAllocator* cmdAlloc = NULL; - hr = g_pd3dDevice->CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE_DIRECT, IID_PPV_ARGS(&cmdAlloc)); - IM_ASSERT(SUCCEEDED(hr)); - - ID3D12GraphicsCommandList* cmdList = NULL; - hr = g_pd3dDevice->CreateCommandList(0, D3D12_COMMAND_LIST_TYPE_DIRECT, cmdAlloc, NULL, IID_PPV_ARGS(&cmdList)); - IM_ASSERT(SUCCEEDED(hr)); - - cmdList->CopyTextureRegion(&dstLocation, 0, 0, 0, &srcLocation, NULL); - cmdList->ResourceBarrier(1, &barrier); - - hr = cmdList->Close(); - IM_ASSERT(SUCCEEDED(hr)); - - cmdQueue->ExecuteCommandLists(1, (ID3D12CommandList* const*) &cmdList); - hr = cmdQueue->Signal(fence, 1); - IM_ASSERT(SUCCEEDED(hr)); - - fence->SetEventOnCompletion(1, event); - WaitForSingleObject(event, INFINITE); - - cmdList->Release(); - cmdAlloc->Release(); - cmdQueue->Release(); - CloseHandle(event); - fence->Release(); - uploadBuffer->Release(); - - // Create texture view - D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc; - ZeroMemory(&srvDesc, sizeof(srvDesc)); - srvDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; - srvDesc.Texture2D.MipLevels = desc.MipLevels; - srvDesc.Texture2D.MostDetailedMip = 0; - srvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; - g_pd3dDevice->CreateShaderResourceView(pTexture, &srvDesc, g_hFontSrvCpuDescHandle); - SafeRelease(g_pFontTextureResource); - g_pFontTextureResource = pTexture; - } - - // Store our identifier - static_assert(sizeof(ImTextureID) >= sizeof(g_hFontSrvGpuDescHandle.ptr), "Can't pack descriptor handle into TexID, 32-bit not supported yet."); - io.Fonts->TexID = (ImTextureID)g_hFontSrvGpuDescHandle.ptr; -} - -bool ImGui_ImplDX12_CreateDeviceObjects() -{ - if (!g_pd3dDevice) - return false; - if (g_pPipelineState) - ImGui_ImplDX12_InvalidateDeviceObjects(); - - // Create the root signature - { - D3D12_DESCRIPTOR_RANGE descRange = {}; - descRange.RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SRV; - descRange.NumDescriptors = 1; - descRange.BaseShaderRegister = 0; - descRange.RegisterSpace = 0; - descRange.OffsetInDescriptorsFromTableStart = 0; - - D3D12_ROOT_PARAMETER param[2] = {}; - - param[0].ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS; - param[0].Constants.ShaderRegister = 0; - param[0].Constants.RegisterSpace = 0; - param[0].Constants.Num32BitValues = 16; - param[0].ShaderVisibility = D3D12_SHADER_VISIBILITY_VERTEX; - - param[1].ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; - param[1].DescriptorTable.NumDescriptorRanges = 1; - param[1].DescriptorTable.pDescriptorRanges = &descRange; - param[1].ShaderVisibility = D3D12_SHADER_VISIBILITY_PIXEL; - - D3D12_STATIC_SAMPLER_DESC staticSampler = {}; - staticSampler.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR; - staticSampler.AddressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP; - staticSampler.AddressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP; - staticSampler.AddressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP; - staticSampler.MipLODBias = 0.f; - staticSampler.MaxAnisotropy = 0; - staticSampler.ComparisonFunc = D3D12_COMPARISON_FUNC_ALWAYS; - staticSampler.BorderColor = D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK; - staticSampler.MinLOD = 0.f; - staticSampler.MaxLOD = 0.f; - staticSampler.ShaderRegister = 0; - staticSampler.RegisterSpace = 0; - staticSampler.ShaderVisibility = D3D12_SHADER_VISIBILITY_PIXEL; - - D3D12_ROOT_SIGNATURE_DESC desc = {}; - desc.NumParameters = _countof(param); - desc.pParameters = param; - desc.NumStaticSamplers = 1; - desc.pStaticSamplers = &staticSampler; - desc.Flags = - D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT | - D3D12_ROOT_SIGNATURE_FLAG_DENY_HULL_SHADER_ROOT_ACCESS | - D3D12_ROOT_SIGNATURE_FLAG_DENY_DOMAIN_SHADER_ROOT_ACCESS | - D3D12_ROOT_SIGNATURE_FLAG_DENY_GEOMETRY_SHADER_ROOT_ACCESS; - - ID3DBlob* blob = NULL; - if (D3D12SerializeRootSignature(&desc, D3D_ROOT_SIGNATURE_VERSION_1, &blob, NULL) != S_OK) - return false; - - g_pd3dDevice->CreateRootSignature(0, blob->GetBufferPointer(), blob->GetBufferSize(), IID_PPV_ARGS(&g_pRootSignature)); - blob->Release(); - } - - // By using D3DCompile() from / d3dcompiler.lib, we introduce a dependency to a given version of d3dcompiler_XX.dll (see D3DCOMPILER_DLL_A) - // If you would like to use this DX12 sample code but remove this dependency you can: - // 1) compile once, save the compiled shader blobs into a file or source code and pass them to CreateVertexShader()/CreatePixelShader() [preferred solution] - // 2) use code to detect any version of the DLL and grab a pointer to D3DCompile from the DLL. - // See https://github.com/ocornut/imgui/pull/638 for sources and details. - - D3D12_GRAPHICS_PIPELINE_STATE_DESC psoDesc; - memset(&psoDesc, 0, sizeof(D3D12_GRAPHICS_PIPELINE_STATE_DESC)); - psoDesc.NodeMask = 1; - psoDesc.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE; - psoDesc.pRootSignature = g_pRootSignature; - psoDesc.SampleMask = UINT_MAX; - psoDesc.NumRenderTargets = 1; - psoDesc.RTVFormats[0] = g_RTVFormat; - psoDesc.SampleDesc.Count = 1; - psoDesc.Flags = D3D12_PIPELINE_STATE_FLAG_NONE; - - // Create the vertex shader - { - static const char* vertexShader = - "cbuffer vertexBuffer : register(b0) \ - {\ - float4x4 ProjectionMatrix; \ - };\ - struct VS_INPUT\ - {\ - float2 pos : POSITION;\ - float4 col : COLOR0;\ - float2 uv : TEXCOORD0;\ - };\ - \ - struct PS_INPUT\ - {\ - float4 pos : SV_POSITION;\ - float4 col : COLOR0;\ - float2 uv : TEXCOORD0;\ - };\ - \ - PS_INPUT main(VS_INPUT input)\ - {\ - PS_INPUT output;\ - output.pos = mul( ProjectionMatrix, float4(input.pos.xy, 0.f, 1.f));\ - output.col = input.col;\ - output.uv = input.uv;\ - return output;\ - }"; - - D3DCompile(vertexShader, strlen(vertexShader), NULL, NULL, NULL, "main", "vs_5_0", 0, 0, &g_pVertexShaderBlob, NULL); - if (g_pVertexShaderBlob == NULL) // NB: Pass ID3D10Blob* pErrorBlob to D3DCompile() to get error showing in (const char*)pErrorBlob->GetBufferPointer(). Make sure to Release() the blob! - return false; - psoDesc.VS = { g_pVertexShaderBlob->GetBufferPointer(), g_pVertexShaderBlob->GetBufferSize() }; - - // Create the input layout - static D3D12_INPUT_ELEMENT_DESC local_layout[] = { - { "POSITION", 0, DXGI_FORMAT_R32G32_FLOAT, 0, (UINT)IM_OFFSETOF(ImDrawVert, pos), D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, - { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, (UINT)IM_OFFSETOF(ImDrawVert, uv), D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, - { "COLOR", 0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, (UINT)IM_OFFSETOF(ImDrawVert, col), D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, - }; - psoDesc.InputLayout = { local_layout, 3 }; - } - - // Create the pixel shader - { - static const char* pixelShader = - "struct PS_INPUT\ - {\ - float4 pos : SV_POSITION;\ - float4 col : COLOR0;\ - float2 uv : TEXCOORD0;\ - };\ - SamplerState sampler0 : register(s0);\ - Texture2D texture0 : register(t0);\ - \ - float4 main(PS_INPUT input) : SV_Target\ - {\ - float4 out_col = input.col * texture0.Sample(sampler0, input.uv); \ - return out_col; \ - }"; - - D3DCompile(pixelShader, strlen(pixelShader), NULL, NULL, NULL, "main", "ps_5_0", 0, 0, &g_pPixelShaderBlob, NULL); - if (g_pPixelShaderBlob == NULL) // NB: Pass ID3D10Blob* pErrorBlob to D3DCompile() to get error showing in (const char*)pErrorBlob->GetBufferPointer(). Make sure to Release() the blob! - return false; - psoDesc.PS = { g_pPixelShaderBlob->GetBufferPointer(), g_pPixelShaderBlob->GetBufferSize() }; - } - - // Create the blending setup - { - D3D12_BLEND_DESC& desc = psoDesc.BlendState; - desc.AlphaToCoverageEnable = false; - desc.RenderTarget[0].BlendEnable = true; - desc.RenderTarget[0].SrcBlend = D3D12_BLEND_SRC_ALPHA; - desc.RenderTarget[0].DestBlend = D3D12_BLEND_INV_SRC_ALPHA; - desc.RenderTarget[0].BlendOp = D3D12_BLEND_OP_ADD; - desc.RenderTarget[0].SrcBlendAlpha = D3D12_BLEND_INV_SRC_ALPHA; - desc.RenderTarget[0].DestBlendAlpha = D3D12_BLEND_ZERO; - desc.RenderTarget[0].BlendOpAlpha = D3D12_BLEND_OP_ADD; - desc.RenderTarget[0].RenderTargetWriteMask = D3D12_COLOR_WRITE_ENABLE_ALL; - } - - // Create the rasterizer state - { - D3D12_RASTERIZER_DESC& desc = psoDesc.RasterizerState; - desc.FillMode = D3D12_FILL_MODE_SOLID; - desc.CullMode = D3D12_CULL_MODE_NONE; - desc.FrontCounterClockwise = FALSE; - desc.DepthBias = D3D12_DEFAULT_DEPTH_BIAS; - desc.DepthBiasClamp = D3D12_DEFAULT_DEPTH_BIAS_CLAMP; - desc.SlopeScaledDepthBias = D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS; - desc.DepthClipEnable = true; - desc.MultisampleEnable = FALSE; - desc.AntialiasedLineEnable = FALSE; - desc.ForcedSampleCount = 0; - desc.ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF; - } - - // Create depth-stencil State - { - D3D12_DEPTH_STENCIL_DESC& desc = psoDesc.DepthStencilState; - desc.DepthEnable = false; - desc.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL; - desc.DepthFunc = D3D12_COMPARISON_FUNC_ALWAYS; - desc.StencilEnable = false; - desc.FrontFace.StencilFailOp = desc.FrontFace.StencilDepthFailOp = desc.FrontFace.StencilPassOp = D3D12_STENCIL_OP_KEEP; - desc.FrontFace.StencilFunc = D3D12_COMPARISON_FUNC_ALWAYS; - desc.BackFace = desc.FrontFace; - } - - if (g_pd3dDevice->CreateGraphicsPipelineState(&psoDesc, IID_PPV_ARGS(&g_pPipelineState)) != S_OK) - return false; - - ImGui_ImplDX12_CreateFontsTexture(); - - return true; -} - -void ImGui_ImplDX12_InvalidateDeviceObjects() -{ - if (!g_pd3dDevice) - return; - - SafeRelease(g_pVertexShaderBlob); - SafeRelease(g_pPixelShaderBlob); - SafeRelease(g_pRootSignature); - SafeRelease(g_pPipelineState); - SafeRelease(g_pFontTextureResource); - - ImGuiIO& io = ImGui::GetIO(); - io.Fonts->TexID = NULL; // We copied g_pFontTextureView to io.Fonts->TexID so let's clear that as well. - - for (UINT i = 0; i < g_numFramesInFlight; i++) - { - FrameResources* fr = &g_pFrameResources[i]; - SafeRelease(fr->IndexBuffer); - SafeRelease(fr->VertexBuffer); - } -} - -bool ImGui_ImplDX12_Init(ID3D12Device* device, int num_frames_in_flight, DXGI_FORMAT rtv_format, ID3D12DescriptorHeap* cbv_srv_heap, - D3D12_CPU_DESCRIPTOR_HANDLE font_srv_cpu_desc_handle, D3D12_GPU_DESCRIPTOR_HANDLE font_srv_gpu_desc_handle) -{ - // Setup back-end capabilities flags - ImGuiIO& io = ImGui::GetIO(); - io.BackendRendererName = "imgui_impl_dx12"; - io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset; // We can honor the ImDrawCmd::VtxOffset field, allowing for large meshes. - - g_pd3dDevice = device; - g_RTVFormat = rtv_format; - g_hFontSrvCpuDescHandle = font_srv_cpu_desc_handle; - g_hFontSrvGpuDescHandle = font_srv_gpu_desc_handle; - g_pFrameResources = new FrameResources[num_frames_in_flight]; - g_numFramesInFlight = num_frames_in_flight; - g_frameIndex = UINT_MAX; - IM_UNUSED(cbv_srv_heap); // Unused in master branch (will be used by multi-viewports) - - // Create buffers with a default size (they will later be grown as needed) - for (int i = 0; i < num_frames_in_flight; i++) - { - FrameResources* fr = &g_pFrameResources[i]; - fr->IndexBuffer = NULL; - fr->VertexBuffer = NULL; - fr->IndexBufferSize = 10000; - fr->VertexBufferSize = 5000; - } - - return true; -} - -void ImGui_ImplDX12_Shutdown() -{ - ImGui_ImplDX12_InvalidateDeviceObjects(); - delete[] g_pFrameResources; - g_pFrameResources = NULL; - g_pd3dDevice = NULL; - g_hFontSrvCpuDescHandle.ptr = 0; - g_hFontSrvGpuDescHandle.ptr = 0; - g_numFramesInFlight = 0; - g_frameIndex = UINT_MAX; -} - -void ImGui_ImplDX12_NewFrame() -{ - if (!g_pPipelineState) - ImGui_ImplDX12_CreateDeviceObjects(); -} diff --git a/cmake/imgui/examples/imgui_impl_dx12.h b/cmake/imgui/examples/imgui_impl_dx12.h deleted file mode 100644 index 8f307dc5..00000000 --- a/cmake/imgui/examples/imgui_impl_dx12.h +++ /dev/null @@ -1,35 +0,0 @@ -// dear imgui: Renderer for DirectX12 -// This needs to be used along with a Platform Binding (e.g. Win32) - -// Implemented features: -// [X] Renderer: User texture binding. Use 'D3D12_GPU_DESCRIPTOR_HANDLE' as ImTextureID. Read the FAQ about ImTextureID! -// [X] Renderer: Support for large meshes (64k+ vertices) with 16-bit indices. -// Issues: -// [ ] 64-bit only for now! (Because sizeof(ImTextureId) == sizeof(void*)). See github.com/ocornut/imgui/pull/301 - -// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. -// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. -// https://github.com/ocornut/imgui - -#pragma once - -enum DXGI_FORMAT; -struct ID3D12Device; -struct ID3D12DescriptorHeap; -struct ID3D12GraphicsCommandList; -struct D3D12_CPU_DESCRIPTOR_HANDLE; -struct D3D12_GPU_DESCRIPTOR_HANDLE; - -// cmd_list is the command list that the implementation will use to render imgui draw lists. -// Before calling the render function, caller must prepare cmd_list by resetting it and setting the appropriate -// render target and descriptor heap that contains font_srv_cpu_desc_handle/font_srv_gpu_desc_handle. -// font_srv_cpu_desc_handle and font_srv_gpu_desc_handle are handles to a single SRV descriptor to use for the internal font texture. -IMGUI_IMPL_API bool ImGui_ImplDX12_Init(ID3D12Device* device, int num_frames_in_flight, DXGI_FORMAT rtv_format, ID3D12DescriptorHeap* cbv_srv_heap, - D3D12_CPU_DESCRIPTOR_HANDLE font_srv_cpu_desc_handle, D3D12_GPU_DESCRIPTOR_HANDLE font_srv_gpu_desc_handle); -IMGUI_IMPL_API void ImGui_ImplDX12_Shutdown(); -IMGUI_IMPL_API void ImGui_ImplDX12_NewFrame(); -IMGUI_IMPL_API void ImGui_ImplDX12_RenderDrawData(ImDrawData* draw_data, ID3D12GraphicsCommandList* graphics_command_list); - -// Use if you want to reset your rendering device without losing ImGui state. -IMGUI_IMPL_API void ImGui_ImplDX12_InvalidateDeviceObjects(); -IMGUI_IMPL_API bool ImGui_ImplDX12_CreateDeviceObjects(); diff --git a/cmake/imgui/examples/imgui_impl_dx9.cpp b/cmake/imgui/examples/imgui_impl_dx9.cpp deleted file mode 100644 index 03114aa8..00000000 --- a/cmake/imgui/examples/imgui_impl_dx9.cpp +++ /dev/null @@ -1,284 +0,0 @@ -// dear imgui: Renderer for DirectX9 -// This needs to be used along with a Platform Binding (e.g. Win32) - -// Implemented features: -// [X] Renderer: User texture binding. Use 'LPDIRECT3DTEXTURE9' as ImTextureID. Read the FAQ about ImTextureID! -// [X] Renderer: Support for large meshes (64k+ vertices) with 16-bit indices. - -// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. -// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. -// https://github.com/ocornut/imgui - -// CHANGELOG -// (minor and older changes stripped away, please see git history for details) -// 2019-05-29: DirectX9: Added support for large mesh (64K+ vertices), enable ImGuiBackendFlags_RendererHasVtxOffset flag. -// 2019-04-30: DirectX9: Added support for special ImDrawCallback_ResetRenderState callback to reset render state. -// 2019-03-29: Misc: Fixed erroneous assert in ImGui_ImplDX9_InvalidateDeviceObjects(). -// 2019-01-16: Misc: Disabled fog before drawing UI's. Fixes issue #2288. -// 2018-11-30: Misc: Setting up io.BackendRendererName so it can be displayed in the About Window. -// 2018-06-08: Misc: Extracted imgui_impl_dx9.cpp/.h away from the old combined DX9+Win32 example. -// 2018-06-08: DirectX9: Use draw_data->DisplayPos and draw_data->DisplaySize to setup projection matrix and clipping rectangle. -// 2018-05-07: Render: Saving/restoring Transform because they don't seem to be included in the StateBlock. Setting shading mode to Gouraud. -// 2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_ImplDX9_RenderDrawData() in the .h file so you can call it yourself. -// 2018-02-06: Misc: Removed call to ImGui::Shutdown() which is not available from 1.60 WIP, user needs to call CreateContext/DestroyContext themselves. - -#include "imgui.h" -#include "imgui_impl_dx9.h" - -// DirectX -#include -#define DIRECTINPUT_VERSION 0x0800 -#include - -// DirectX data -static LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; -static LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL; -static LPDIRECT3DINDEXBUFFER9 g_pIB = NULL; -static LPDIRECT3DTEXTURE9 g_FontTexture = NULL; -static int g_VertexBufferSize = 5000, g_IndexBufferSize = 10000; - -struct CUSTOMVERTEX -{ - float pos[3]; - D3DCOLOR col; - float uv[2]; -}; -#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1) - -static void ImGui_ImplDX9_SetupRenderState(ImDrawData* draw_data) -{ - // Setup viewport - D3DVIEWPORT9 vp; - vp.X = vp.Y = 0; - vp.Width = (DWORD)draw_data->DisplaySize.x; - vp.Height = (DWORD)draw_data->DisplaySize.y; - vp.MinZ = 0.0f; - vp.MaxZ = 1.0f; - g_pd3dDevice->SetViewport(&vp); - - // Setup render state: fixed-pipeline, alpha-blending, no face culling, no depth testing, shade mode (for gradient) - g_pd3dDevice->SetPixelShader(NULL); - g_pd3dDevice->SetVertexShader(NULL); - g_pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); - g_pd3dDevice->SetRenderState(D3DRS_LIGHTING, FALSE); - g_pd3dDevice->SetRenderState(D3DRS_ZENABLE, FALSE); - g_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE); - g_pd3dDevice->SetRenderState(D3DRS_ALPHATESTENABLE, FALSE); - g_pd3dDevice->SetRenderState(D3DRS_BLENDOP, D3DBLENDOP_ADD); - g_pd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); - g_pd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); - g_pd3dDevice->SetRenderState(D3DRS_SCISSORTESTENABLE, TRUE); - g_pd3dDevice->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD); - g_pd3dDevice->SetRenderState(D3DRS_FOGENABLE, FALSE); - g_pd3dDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE); - g_pd3dDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE); - g_pd3dDevice->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE); - g_pd3dDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE); - g_pd3dDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE); - g_pd3dDevice->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE); - g_pd3dDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); - g_pd3dDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); - - // Setup orthographic projection matrix - // Our visible imgui space lies from draw_data->DisplayPos (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayPos is (0,0) for single viewport apps. - // Being agnostic of whether or can be used, we aren't relying on D3DXMatrixIdentity()/D3DXMatrixOrthoOffCenterLH() or DirectX::XMMatrixIdentity()/DirectX::XMMatrixOrthographicOffCenterLH() - { - float L = draw_data->DisplayPos.x + 0.5f; - float R = draw_data->DisplayPos.x + draw_data->DisplaySize.x + 0.5f; - float T = draw_data->DisplayPos.y + 0.5f; - float B = draw_data->DisplayPos.y + draw_data->DisplaySize.y + 0.5f; - D3DMATRIX mat_identity = { { { 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f } } }; - D3DMATRIX mat_projection = - { { { - 2.0f/(R-L), 0.0f, 0.0f, 0.0f, - 0.0f, 2.0f/(T-B), 0.0f, 0.0f, - 0.0f, 0.0f, 0.5f, 0.0f, - (L+R)/(L-R), (T+B)/(B-T), 0.5f, 1.0f - } } }; - g_pd3dDevice->SetTransform(D3DTS_WORLD, &mat_identity); - g_pd3dDevice->SetTransform(D3DTS_VIEW, &mat_identity); - g_pd3dDevice->SetTransform(D3DTS_PROJECTION, &mat_projection); - } -} - -// Render function. -// (this used to be set in io.RenderDrawListsFn and called by ImGui::Render(), but you can now call this directly from your main loop) -void ImGui_ImplDX9_RenderDrawData(ImDrawData* draw_data) -{ - // Avoid rendering when minimized - if (draw_data->DisplaySize.x <= 0.0f || draw_data->DisplaySize.y <= 0.0f) - return; - - // Create and grow buffers if needed - if (!g_pVB || g_VertexBufferSize < draw_data->TotalVtxCount) - { - if (g_pVB) { g_pVB->Release(); g_pVB = NULL; } - g_VertexBufferSize = draw_data->TotalVtxCount + 5000; - if (g_pd3dDevice->CreateVertexBuffer(g_VertexBufferSize * sizeof(CUSTOMVERTEX), D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL) < 0) - return; - } - if (!g_pIB || g_IndexBufferSize < draw_data->TotalIdxCount) - { - if (g_pIB) { g_pIB->Release(); g_pIB = NULL; } - g_IndexBufferSize = draw_data->TotalIdxCount + 10000; - if (g_pd3dDevice->CreateIndexBuffer(g_IndexBufferSize * sizeof(ImDrawIdx), D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY, sizeof(ImDrawIdx) == 2 ? D3DFMT_INDEX16 : D3DFMT_INDEX32, D3DPOOL_DEFAULT, &g_pIB, NULL) < 0) - return; - } - - // Backup the DX9 state - IDirect3DStateBlock9* d3d9_state_block = NULL; - if (g_pd3dDevice->CreateStateBlock(D3DSBT_ALL, &d3d9_state_block) < 0) - return; - - // Backup the DX9 transform (DX9 documentation suggests that it is included in the StateBlock but it doesn't appear to) - D3DMATRIX last_world, last_view, last_projection; - g_pd3dDevice->GetTransform(D3DTS_WORLD, &last_world); - g_pd3dDevice->GetTransform(D3DTS_VIEW, &last_view); - g_pd3dDevice->GetTransform(D3DTS_PROJECTION, &last_projection); - - // Copy and convert all vertices into a single contiguous buffer, convert colors to DX9 default format. - // FIXME-OPT: This is a waste of resource, the ideal is to use imconfig.h and - // 1) to avoid repacking colors: #define IMGUI_USE_BGRA_PACKED_COLOR - // 2) to avoid repacking vertices: #define IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT struct ImDrawVert { ImVec2 pos; float z; ImU32 col; ImVec2 uv; } - CUSTOMVERTEX* vtx_dst; - ImDrawIdx* idx_dst; - if (g_pVB->Lock(0, (UINT)(draw_data->TotalVtxCount * sizeof(CUSTOMVERTEX)), (void**)&vtx_dst, D3DLOCK_DISCARD) < 0) - return; - if (g_pIB->Lock(0, (UINT)(draw_data->TotalIdxCount * sizeof(ImDrawIdx)), (void**)&idx_dst, D3DLOCK_DISCARD) < 0) - return; - for (int n = 0; n < draw_data->CmdListsCount; n++) - { - const ImDrawList* cmd_list = draw_data->CmdLists[n]; - const ImDrawVert* vtx_src = cmd_list->VtxBuffer.Data; - for (int i = 0; i < cmd_list->VtxBuffer.Size; i++) - { - vtx_dst->pos[0] = vtx_src->pos.x; - vtx_dst->pos[1] = vtx_src->pos.y; - vtx_dst->pos[2] = 0.0f; - vtx_dst->col = (vtx_src->col & 0xFF00FF00) | ((vtx_src->col & 0xFF0000) >> 16) | ((vtx_src->col & 0xFF) << 16); // RGBA --> ARGB for DirectX9 - vtx_dst->uv[0] = vtx_src->uv.x; - vtx_dst->uv[1] = vtx_src->uv.y; - vtx_dst++; - vtx_src++; - } - memcpy(idx_dst, cmd_list->IdxBuffer.Data, cmd_list->IdxBuffer.Size * sizeof(ImDrawIdx)); - idx_dst += cmd_list->IdxBuffer.Size; - } - g_pVB->Unlock(); - g_pIB->Unlock(); - g_pd3dDevice->SetStreamSource(0, g_pVB, 0, sizeof(CUSTOMVERTEX)); - g_pd3dDevice->SetIndices(g_pIB); - g_pd3dDevice->SetFVF(D3DFVF_CUSTOMVERTEX); - - // Setup desired DX state - ImGui_ImplDX9_SetupRenderState(draw_data); - - // Render command lists - // (Because we merged all buffers into a single one, we maintain our own offset into them) - int global_vtx_offset = 0; - int global_idx_offset = 0; - ImVec2 clip_off = draw_data->DisplayPos; - for (int n = 0; n < draw_data->CmdListsCount; n++) - { - const ImDrawList* cmd_list = draw_data->CmdLists[n]; - for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++) - { - const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i]; - if (pcmd->UserCallback != NULL) - { - // User callback, registered via ImDrawList::AddCallback() - // (ImDrawCallback_ResetRenderState is a special callback value used by the user to request the renderer to reset render state.) - if (pcmd->UserCallback == ImDrawCallback_ResetRenderState) - ImGui_ImplDX9_SetupRenderState(draw_data); - else - pcmd->UserCallback(cmd_list, pcmd); - } - else - { - const RECT r = { (LONG)(pcmd->ClipRect.x - clip_off.x), (LONG)(pcmd->ClipRect.y - clip_off.y), (LONG)(pcmd->ClipRect.z - clip_off.x), (LONG)(pcmd->ClipRect.w - clip_off.y) }; - const LPDIRECT3DTEXTURE9 texture = (LPDIRECT3DTEXTURE9)pcmd->TextureId; - g_pd3dDevice->SetTexture(0, texture); - g_pd3dDevice->SetScissorRect(&r); - g_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, pcmd->VtxOffset + global_vtx_offset, 0, (UINT)cmd_list->VtxBuffer.Size, pcmd->IdxOffset + global_idx_offset, pcmd->ElemCount/3); - } - } - global_idx_offset += cmd_list->IdxBuffer.Size; - global_vtx_offset += cmd_list->VtxBuffer.Size; - } - - // Restore the DX9 transform - g_pd3dDevice->SetTransform(D3DTS_WORLD, &last_world); - g_pd3dDevice->SetTransform(D3DTS_VIEW, &last_view); - g_pd3dDevice->SetTransform(D3DTS_PROJECTION, &last_projection); - - // Restore the DX9 state - d3d9_state_block->Apply(); - d3d9_state_block->Release(); -} - -bool ImGui_ImplDX9_Init(IDirect3DDevice9* device) -{ - // Setup back-end capabilities flags - ImGuiIO& io = ImGui::GetIO(); - io.BackendRendererName = "imgui_impl_dx9"; - io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset; // We can honor the ImDrawCmd::VtxOffset field, allowing for large meshes. - - g_pd3dDevice = device; - g_pd3dDevice->AddRef(); - return true; -} - -void ImGui_ImplDX9_Shutdown() -{ - ImGui_ImplDX9_InvalidateDeviceObjects(); - if (g_pd3dDevice) { g_pd3dDevice->Release(); g_pd3dDevice = NULL; } -} - -static bool ImGui_ImplDX9_CreateFontsTexture() -{ - // Build texture atlas - ImGuiIO& io = ImGui::GetIO(); - unsigned char* pixels; - int width, height, bytes_per_pixel; - io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height, &bytes_per_pixel); - - // Upload texture to graphics system - g_FontTexture = NULL; - if (g_pd3dDevice->CreateTexture(width, height, 1, D3DUSAGE_DYNAMIC, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &g_FontTexture, NULL) < 0) - return false; - D3DLOCKED_RECT tex_locked_rect; - if (g_FontTexture->LockRect(0, &tex_locked_rect, NULL, 0) != D3D_OK) - return false; - for (int y = 0; y < height; y++) - memcpy((unsigned char *)tex_locked_rect.pBits + tex_locked_rect.Pitch * y, pixels + (width * bytes_per_pixel) * y, (width * bytes_per_pixel)); - g_FontTexture->UnlockRect(0); - - // Store our identifier - io.Fonts->TexID = (ImTextureID)g_FontTexture; - - return true; -} - -bool ImGui_ImplDX9_CreateDeviceObjects() -{ - if (!g_pd3dDevice) - return false; - if (!ImGui_ImplDX9_CreateFontsTexture()) - return false; - return true; -} - -void ImGui_ImplDX9_InvalidateDeviceObjects() -{ - if (!g_pd3dDevice) - return; - if (g_pVB) { g_pVB->Release(); g_pVB = NULL; } - if (g_pIB) { g_pIB->Release(); g_pIB = NULL; } - if (g_FontTexture) { g_FontTexture->Release(); g_FontTexture = NULL; ImGui::GetIO().Fonts->TexID = NULL; } // We copied g_pFontTextureView to io.Fonts->TexID so let's clear that as well. -} - -void ImGui_ImplDX9_NewFrame() -{ - if (!g_FontTexture) - ImGui_ImplDX9_CreateDeviceObjects(); -} diff --git a/cmake/imgui/examples/imgui_impl_dx9.h b/cmake/imgui/examples/imgui_impl_dx9.h deleted file mode 100644 index b36e95b2..00000000 --- a/cmake/imgui/examples/imgui_impl_dx9.h +++ /dev/null @@ -1,23 +0,0 @@ -// dear imgui: Renderer for DirectX9 -// This needs to be used along with a Platform Binding (e.g. Win32) - -// Implemented features: -// [X] Renderer: User texture binding. Use 'LPDIRECT3DTEXTURE9' as ImTextureID. Read the FAQ about ImTextureID! -// [X] Renderer: Support for large meshes (64k+ vertices) with 16-bit indices. - -// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. -// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. -// https://github.com/ocornut/imgui - -#pragma once - -struct IDirect3DDevice9; - -IMGUI_IMPL_API bool ImGui_ImplDX9_Init(IDirect3DDevice9* device); -IMGUI_IMPL_API void ImGui_ImplDX9_Shutdown(); -IMGUI_IMPL_API void ImGui_ImplDX9_NewFrame(); -IMGUI_IMPL_API void ImGui_ImplDX9_RenderDrawData(ImDrawData* draw_data); - -// Use if you want to reset your rendering device without losing ImGui state. -IMGUI_IMPL_API bool ImGui_ImplDX9_CreateDeviceObjects(); -IMGUI_IMPL_API void ImGui_ImplDX9_InvalidateDeviceObjects(); diff --git a/cmake/imgui/examples/imgui_impl_glfw.cpp b/cmake/imgui/examples/imgui_impl_glfw.cpp deleted file mode 100644 index c496232c..00000000 --- a/cmake/imgui/examples/imgui_impl_glfw.cpp +++ /dev/null @@ -1,369 +0,0 @@ -// dear imgui: Platform Binding for GLFW -// This needs to be used along with a Renderer (e.g. OpenGL3, Vulkan..) -// (Info: GLFW is a cross-platform general purpose library for handling windows, inputs, OpenGL/Vulkan graphics context creation, etc.) -// (Requires: GLFW 3.1+) - -// Implemented features: -// [X] Platform: Clipboard support. -// [X] Platform: Gamepad support. Enable with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'. -// [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange' (note: the resizing cursors requires GLFW 3.4+). -// [X] Platform: Keyboard arrays indexed using GLFW_KEY_* codes, e.g. ImGui::IsKeyPressed(GLFW_KEY_SPACE). - -// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. -// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. -// https://github.com/ocornut/imgui - -// CHANGELOG -// (minor and older changes stripped away, please see git history for details) -// 2020-01-17: Inputs: Disable error callback while assigning mouse cursors because some X11 setup don't have them and it generates errors. -// 2019-12-05: Inputs: Added support for new mouse cursors added in GLFW 3.4+ (resizing cursors, not allowed cursor). -// 2019-10-18: Misc: Previously installed user callbacks are now restored on shutdown. -// 2019-07-21: Inputs: Added mapping for ImGuiKey_KeyPadEnter. -// 2019-05-11: Inputs: Don't filter value from character callback before calling AddInputCharacter(). -// 2019-03-12: Misc: Preserve DisplayFramebufferScale when main window is minimized. -// 2018-11-30: Misc: Setting up io.BackendPlatformName so it can be displayed in the About Window. -// 2018-11-07: Inputs: When installing our GLFW callbacks, we save user's previously installed ones - if any - and chain call them. -// 2018-08-01: Inputs: Workaround for Emscripten which doesn't seem to handle focus related calls. -// 2018-06-29: Inputs: Added support for the ImGuiMouseCursor_Hand cursor. -// 2018-06-08: Misc: Extracted imgui_impl_glfw.cpp/.h away from the old combined GLFW+OpenGL/Vulkan examples. -// 2018-03-20: Misc: Setup io.BackendFlags ImGuiBackendFlags_HasMouseCursors flag + honor ImGuiConfigFlags_NoMouseCursorChange flag. -// 2018-02-20: Inputs: Added support for mouse cursors (ImGui::GetMouseCursor() value, passed to glfwSetCursor()). -// 2018-02-06: Misc: Removed call to ImGui::Shutdown() which is not available from 1.60 WIP, user needs to call CreateContext/DestroyContext themselves. -// 2018-02-06: Inputs: Added mapping for ImGuiKey_Space. -// 2018-01-25: Inputs: Added gamepad support if ImGuiConfigFlags_NavEnableGamepad is set. -// 2018-01-25: Inputs: Honoring the io.WantSetMousePos by repositioning the mouse (when using navigation and ImGuiConfigFlags_NavMoveMouse is set). -// 2018-01-20: Inputs: Added Horizontal Mouse Wheel support. -// 2018-01-18: Inputs: Added mapping for ImGuiKey_Insert. -// 2017-08-25: Inputs: MousePos set to -FLT_MAX,-FLT_MAX when mouse is unavailable/missing (instead of -1,-1). -// 2016-10-15: Misc: Added a void* user_data parameter to Clipboard function handlers. - -#include "imgui.h" -#include "imgui_impl_glfw.h" - -// GLFW -#include -#ifdef _WIN32 -#undef APIENTRY -#define GLFW_EXPOSE_NATIVE_WIN32 -#include // for glfwGetWin32Window -#endif -#define GLFW_HAS_WINDOW_TOPMOST (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3200) // 3.2+ GLFW_FLOATING -#define GLFW_HAS_WINDOW_HOVERED (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3300) // 3.3+ GLFW_HOVERED -#define GLFW_HAS_WINDOW_ALPHA (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3300) // 3.3+ glfwSetWindowOpacity -#define GLFW_HAS_PER_MONITOR_DPI (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3300) // 3.3+ glfwGetMonitorContentScale -#define GLFW_HAS_VULKAN (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3200) // 3.2+ glfwCreateWindowSurface -#ifdef GLFW_RESIZE_NESW_CURSOR // let's be nice to people who pulled GLFW between 2019-04-16 (3.4 define) and 2019-11-29 (cursors defines) // FIXME: Remove when GLFW 3.4 is released? -#define GLFW_HAS_NEW_CURSORS (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3400) // 3.4+ GLFW_RESIZE_ALL_CURSOR, GLFW_RESIZE_NESW_CURSOR, GLFW_RESIZE_NWSE_CURSOR, GLFW_NOT_ALLOWED_CURSOR -#else -#define GLFW_HAS_NEW_CURSORS (0) -#endif - -// Data -enum GlfwClientApi -{ - GlfwClientApi_Unknown, - GlfwClientApi_OpenGL, - GlfwClientApi_Vulkan -}; -static GLFWwindow* g_Window = NULL; // Main window -static GlfwClientApi g_ClientApi = GlfwClientApi_Unknown; -static double g_Time = 0.0; -static bool g_MouseJustPressed[5] = { false, false, false, false, false }; -static GLFWcursor* g_MouseCursors[ImGuiMouseCursor_COUNT] = {}; -static bool g_InstalledCallbacks = false; - -// Chain GLFW callbacks: our callbacks will call the user's previously installed callbacks, if any. -static GLFWmousebuttonfun g_PrevUserCallbackMousebutton = NULL; -static GLFWscrollfun g_PrevUserCallbackScroll = NULL; -static GLFWkeyfun g_PrevUserCallbackKey = NULL; -static GLFWcharfun g_PrevUserCallbackChar = NULL; - -static const char* ImGui_ImplGlfw_GetClipboardText(void* user_data) -{ - return glfwGetClipboardString((GLFWwindow*)user_data); -} - -static void ImGui_ImplGlfw_SetClipboardText(void* user_data, const char* text) -{ - glfwSetClipboardString((GLFWwindow*)user_data, text); -} - -void ImGui_ImplGlfw_MouseButtonCallback(GLFWwindow* window, int button, int action, int mods) -{ - if (g_PrevUserCallbackMousebutton != NULL) - g_PrevUserCallbackMousebutton(window, button, action, mods); - - if (action == GLFW_PRESS && button >= 0 && button < IM_ARRAYSIZE(g_MouseJustPressed)) - g_MouseJustPressed[button] = true; -} - -void ImGui_ImplGlfw_ScrollCallback(GLFWwindow* window, double xoffset, double yoffset) -{ - if (g_PrevUserCallbackScroll != NULL) - g_PrevUserCallbackScroll(window, xoffset, yoffset); - - ImGuiIO& io = ImGui::GetIO(); - io.MouseWheelH += (float)xoffset; - io.MouseWheel += (float)yoffset; -} - -void ImGui_ImplGlfw_KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods) -{ - if (g_PrevUserCallbackKey != NULL) - g_PrevUserCallbackKey(window, key, scancode, action, mods); - - ImGuiIO& io = ImGui::GetIO(); - if (action == GLFW_PRESS) - io.KeysDown[key] = true; - if (action == GLFW_RELEASE) - io.KeysDown[key] = false; - - // Modifiers are not reliable across systems - io.KeyCtrl = io.KeysDown[GLFW_KEY_LEFT_CONTROL] || io.KeysDown[GLFW_KEY_RIGHT_CONTROL]; - io.KeyShift = io.KeysDown[GLFW_KEY_LEFT_SHIFT] || io.KeysDown[GLFW_KEY_RIGHT_SHIFT]; - io.KeyAlt = io.KeysDown[GLFW_KEY_LEFT_ALT] || io.KeysDown[GLFW_KEY_RIGHT_ALT]; -#ifdef _WIN32 - io.KeySuper = false; -#else - io.KeySuper = io.KeysDown[GLFW_KEY_LEFT_SUPER] || io.KeysDown[GLFW_KEY_RIGHT_SUPER]; -#endif -} - -void ImGui_ImplGlfw_CharCallback(GLFWwindow* window, unsigned int c) -{ - if (g_PrevUserCallbackChar != NULL) - g_PrevUserCallbackChar(window, c); - - ImGuiIO& io = ImGui::GetIO(); - io.AddInputCharacter(c); -} - -static bool ImGui_ImplGlfw_Init(GLFWwindow* window, bool install_callbacks, GlfwClientApi client_api) -{ - g_Window = window; - g_Time = 0.0; - - // Setup back-end capabilities flags - ImGuiIO& io = ImGui::GetIO(); - io.BackendFlags |= ImGuiBackendFlags_HasMouseCursors; // We can honor GetMouseCursor() values (optional) - io.BackendFlags |= ImGuiBackendFlags_HasSetMousePos; // We can honor io.WantSetMousePos requests (optional, rarely used) - io.BackendPlatformName = "imgui_impl_glfw"; - - // Keyboard mapping. ImGui will use those indices to peek into the io.KeysDown[] array. - io.KeyMap[ImGuiKey_Tab] = GLFW_KEY_TAB; - io.KeyMap[ImGuiKey_LeftArrow] = GLFW_KEY_LEFT; - io.KeyMap[ImGuiKey_RightArrow] = GLFW_KEY_RIGHT; - io.KeyMap[ImGuiKey_UpArrow] = GLFW_KEY_UP; - io.KeyMap[ImGuiKey_DownArrow] = GLFW_KEY_DOWN; - io.KeyMap[ImGuiKey_PageUp] = GLFW_KEY_PAGE_UP; - io.KeyMap[ImGuiKey_PageDown] = GLFW_KEY_PAGE_DOWN; - io.KeyMap[ImGuiKey_Home] = GLFW_KEY_HOME; - io.KeyMap[ImGuiKey_End] = GLFW_KEY_END; - io.KeyMap[ImGuiKey_Insert] = GLFW_KEY_INSERT; - io.KeyMap[ImGuiKey_Delete] = GLFW_KEY_DELETE; - io.KeyMap[ImGuiKey_Backspace] = GLFW_KEY_BACKSPACE; - io.KeyMap[ImGuiKey_Space] = GLFW_KEY_SPACE; - io.KeyMap[ImGuiKey_Enter] = GLFW_KEY_ENTER; - io.KeyMap[ImGuiKey_Escape] = GLFW_KEY_ESCAPE; - io.KeyMap[ImGuiKey_KeyPadEnter] = GLFW_KEY_KP_ENTER; - io.KeyMap[ImGuiKey_A] = GLFW_KEY_A; - io.KeyMap[ImGuiKey_C] = GLFW_KEY_C; - io.KeyMap[ImGuiKey_V] = GLFW_KEY_V; - io.KeyMap[ImGuiKey_X] = GLFW_KEY_X; - io.KeyMap[ImGuiKey_Y] = GLFW_KEY_Y; - io.KeyMap[ImGuiKey_Z] = GLFW_KEY_Z; - - io.SetClipboardTextFn = ImGui_ImplGlfw_SetClipboardText; - io.GetClipboardTextFn = ImGui_ImplGlfw_GetClipboardText; - io.ClipboardUserData = g_Window; -#if defined(_WIN32) - io.ImeWindowHandle = (void*)glfwGetWin32Window(g_Window); -#endif - - // Create mouse cursors - // (By design, on X11 cursors are user configurable and some cursors may be missing. When a cursor doesn't exist, - // GLFW will emit an error which will often be printed by the app, so we temporarily disable error reporting. - // Missing cursors will return NULL and our _UpdateMouseCursor() function will use the Arrow cursor instead.) - GLFWerrorfun prev_error_callback = glfwSetErrorCallback(NULL); - g_MouseCursors[ImGuiMouseCursor_Arrow] = glfwCreateStandardCursor(GLFW_ARROW_CURSOR); - g_MouseCursors[ImGuiMouseCursor_TextInput] = glfwCreateStandardCursor(GLFW_IBEAM_CURSOR); - g_MouseCursors[ImGuiMouseCursor_ResizeNS] = glfwCreateStandardCursor(GLFW_VRESIZE_CURSOR); - g_MouseCursors[ImGuiMouseCursor_ResizeEW] = glfwCreateStandardCursor(GLFW_HRESIZE_CURSOR); - g_MouseCursors[ImGuiMouseCursor_Hand] = glfwCreateStandardCursor(GLFW_HAND_CURSOR); -#if GLFW_HAS_NEW_CURSORS - g_MouseCursors[ImGuiMouseCursor_ResizeAll] = glfwCreateStandardCursor(GLFW_RESIZE_ALL_CURSOR); - g_MouseCursors[ImGuiMouseCursor_ResizeNESW] = glfwCreateStandardCursor(GLFW_RESIZE_NESW_CURSOR); - g_MouseCursors[ImGuiMouseCursor_ResizeNWSE] = glfwCreateStandardCursor(GLFW_RESIZE_NWSE_CURSOR); - g_MouseCursors[ImGuiMouseCursor_NotAllowed] = glfwCreateStandardCursor(GLFW_NOT_ALLOWED_CURSOR); -#else - g_MouseCursors[ImGuiMouseCursor_ResizeAll] = glfwCreateStandardCursor(GLFW_ARROW_CURSOR); - g_MouseCursors[ImGuiMouseCursor_ResizeNESW] = glfwCreateStandardCursor(GLFW_ARROW_CURSOR); - g_MouseCursors[ImGuiMouseCursor_ResizeNWSE] = glfwCreateStandardCursor(GLFW_ARROW_CURSOR); - g_MouseCursors[ImGuiMouseCursor_NotAllowed] = glfwCreateStandardCursor(GLFW_ARROW_CURSOR); -#endif - glfwSetErrorCallback(prev_error_callback); - - // Chain GLFW callbacks: our callbacks will call the user's previously installed callbacks, if any. - g_PrevUserCallbackMousebutton = NULL; - g_PrevUserCallbackScroll = NULL; - g_PrevUserCallbackKey = NULL; - g_PrevUserCallbackChar = NULL; - if (install_callbacks) - { - g_InstalledCallbacks = true; - g_PrevUserCallbackMousebutton = glfwSetMouseButtonCallback(window, ImGui_ImplGlfw_MouseButtonCallback); - g_PrevUserCallbackScroll = glfwSetScrollCallback(window, ImGui_ImplGlfw_ScrollCallback); - g_PrevUserCallbackKey = glfwSetKeyCallback(window, ImGui_ImplGlfw_KeyCallback); - g_PrevUserCallbackChar = glfwSetCharCallback(window, ImGui_ImplGlfw_CharCallback); - } - - g_ClientApi = client_api; - return true; -} - -bool ImGui_ImplGlfw_InitForOpenGL(GLFWwindow* window, bool install_callbacks) -{ - return ImGui_ImplGlfw_Init(window, install_callbacks, GlfwClientApi_OpenGL); -} - -bool ImGui_ImplGlfw_InitForVulkan(GLFWwindow* window, bool install_callbacks) -{ - return ImGui_ImplGlfw_Init(window, install_callbacks, GlfwClientApi_Vulkan); -} - -void ImGui_ImplGlfw_Shutdown() -{ - if (g_InstalledCallbacks) - { - glfwSetMouseButtonCallback(g_Window, g_PrevUserCallbackMousebutton); - glfwSetScrollCallback(g_Window, g_PrevUserCallbackScroll); - glfwSetKeyCallback(g_Window, g_PrevUserCallbackKey); - glfwSetCharCallback(g_Window, g_PrevUserCallbackChar); - g_InstalledCallbacks = false; - } - - for (ImGuiMouseCursor cursor_n = 0; cursor_n < ImGuiMouseCursor_COUNT; cursor_n++) - { - glfwDestroyCursor(g_MouseCursors[cursor_n]); - g_MouseCursors[cursor_n] = NULL; - } - g_ClientApi = GlfwClientApi_Unknown; -} - -static void ImGui_ImplGlfw_UpdateMousePosAndButtons() -{ - // Update buttons - ImGuiIO& io = ImGui::GetIO(); - for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) - { - // If a mouse press event came, always pass it as "mouse held this frame", so we don't miss click-release events that are shorter than 1 frame. - io.MouseDown[i] = g_MouseJustPressed[i] || glfwGetMouseButton(g_Window, i) != 0; - g_MouseJustPressed[i] = false; - } - - // Update mouse position - const ImVec2 mouse_pos_backup = io.MousePos; - io.MousePos = ImVec2(-FLT_MAX, -FLT_MAX); -#ifdef __EMSCRIPTEN__ - const bool focused = true; // Emscripten -#else - const bool focused = glfwGetWindowAttrib(g_Window, GLFW_FOCUSED) != 0; -#endif - if (focused) - { - if (io.WantSetMousePos) - { - glfwSetCursorPos(g_Window, (double)mouse_pos_backup.x, (double)mouse_pos_backup.y); - } - else - { - double mouse_x, mouse_y; - glfwGetCursorPos(g_Window, &mouse_x, &mouse_y); - io.MousePos = ImVec2((float)mouse_x, (float)mouse_y); - } - } -} - -static void ImGui_ImplGlfw_UpdateMouseCursor() -{ - ImGuiIO& io = ImGui::GetIO(); - if ((io.ConfigFlags & ImGuiConfigFlags_NoMouseCursorChange) || glfwGetInputMode(g_Window, GLFW_CURSOR) == GLFW_CURSOR_DISABLED) - return; - - ImGuiMouseCursor imgui_cursor = ImGui::GetMouseCursor(); - if (imgui_cursor == ImGuiMouseCursor_None || io.MouseDrawCursor) - { - // Hide OS mouse cursor if imgui is drawing it or if it wants no cursor - glfwSetInputMode(g_Window, GLFW_CURSOR, GLFW_CURSOR_HIDDEN); - } - else - { - // Show OS mouse cursor - // FIXME-PLATFORM: Unfocused windows seems to fail changing the mouse cursor with GLFW 3.2, but 3.3 works here. - glfwSetCursor(g_Window, g_MouseCursors[imgui_cursor] ? g_MouseCursors[imgui_cursor] : g_MouseCursors[ImGuiMouseCursor_Arrow]); - glfwSetInputMode(g_Window, GLFW_CURSOR, GLFW_CURSOR_NORMAL); - } -} - -static void ImGui_ImplGlfw_UpdateGamepads() -{ - ImGuiIO& io = ImGui::GetIO(); - memset(io.NavInputs, 0, sizeof(io.NavInputs)); - if ((io.ConfigFlags & ImGuiConfigFlags_NavEnableGamepad) == 0) - return; - - // Update gamepad inputs - #define MAP_BUTTON(NAV_NO, BUTTON_NO) { if (buttons_count > BUTTON_NO && buttons[BUTTON_NO] == GLFW_PRESS) io.NavInputs[NAV_NO] = 1.0f; } - #define MAP_ANALOG(NAV_NO, AXIS_NO, V0, V1) { float v = (axes_count > AXIS_NO) ? axes[AXIS_NO] : V0; v = (v - V0) / (V1 - V0); if (v > 1.0f) v = 1.0f; if (io.NavInputs[NAV_NO] < v) io.NavInputs[NAV_NO] = v; } - int axes_count = 0, buttons_count = 0; - const float* axes = glfwGetJoystickAxes(GLFW_JOYSTICK_1, &axes_count); - const unsigned char* buttons = glfwGetJoystickButtons(GLFW_JOYSTICK_1, &buttons_count); - MAP_BUTTON(ImGuiNavInput_Activate, 0); // Cross / A - MAP_BUTTON(ImGuiNavInput_Cancel, 1); // Circle / B - MAP_BUTTON(ImGuiNavInput_Menu, 2); // Square / X - MAP_BUTTON(ImGuiNavInput_Input, 3); // Triangle / Y - MAP_BUTTON(ImGuiNavInput_DpadLeft, 13); // D-Pad Left - MAP_BUTTON(ImGuiNavInput_DpadRight, 11); // D-Pad Right - MAP_BUTTON(ImGuiNavInput_DpadUp, 10); // D-Pad Up - MAP_BUTTON(ImGuiNavInput_DpadDown, 12); // D-Pad Down - MAP_BUTTON(ImGuiNavInput_FocusPrev, 4); // L1 / LB - MAP_BUTTON(ImGuiNavInput_FocusNext, 5); // R1 / RB - MAP_BUTTON(ImGuiNavInput_TweakSlow, 4); // L1 / LB - MAP_BUTTON(ImGuiNavInput_TweakFast, 5); // R1 / RB - MAP_ANALOG(ImGuiNavInput_LStickLeft, 0, -0.3f, -0.9f); - MAP_ANALOG(ImGuiNavInput_LStickRight,0, +0.3f, +0.9f); - MAP_ANALOG(ImGuiNavInput_LStickUp, 1, +0.3f, +0.9f); - MAP_ANALOG(ImGuiNavInput_LStickDown, 1, -0.3f, -0.9f); - #undef MAP_BUTTON - #undef MAP_ANALOG - if (axes_count > 0 && buttons_count > 0) - io.BackendFlags |= ImGuiBackendFlags_HasGamepad; - else - io.BackendFlags &= ~ImGuiBackendFlags_HasGamepad; -} - -void ImGui_ImplGlfw_NewFrame() -{ - ImGuiIO& io = ImGui::GetIO(); - IM_ASSERT(io.Fonts->IsBuilt() && "Font atlas not built! It is generally built by the renderer back-end. Missing call to renderer _NewFrame() function? e.g. ImGui_ImplOpenGL3_NewFrame()."); - - // Setup display size (every frame to accommodate for window resizing) - int w, h; - int display_w, display_h; - glfwGetWindowSize(g_Window, &w, &h); - glfwGetFramebufferSize(g_Window, &display_w, &display_h); - io.DisplaySize = ImVec2((float)w, (float)h); - if (w > 0 && h > 0) - io.DisplayFramebufferScale = ImVec2((float)display_w / w, (float)display_h / h); - - // Setup time step - double current_time = glfwGetTime(); - io.DeltaTime = g_Time > 0.0 ? (float)(current_time - g_Time) : (float)(1.0f/60.0f); - g_Time = current_time; - - ImGui_ImplGlfw_UpdateMousePosAndButtons(); - ImGui_ImplGlfw_UpdateMouseCursor(); - - // Update game controllers (if enabled and available) - ImGui_ImplGlfw_UpdateGamepads(); -} diff --git a/cmake/imgui/examples/imgui_impl_glfw.h b/cmake/imgui/examples/imgui_impl_glfw.h deleted file mode 100644 index a86790b7..00000000 --- a/cmake/imgui/examples/imgui_impl_glfw.h +++ /dev/null @@ -1,34 +0,0 @@ -// dear imgui: Platform Binding for GLFW -// This needs to be used along with a Renderer (e.g. OpenGL3, Vulkan..) -// (Info: GLFW is a cross-platform general purpose library for handling windows, inputs, OpenGL/Vulkan graphics context creation, etc.) - -// Implemented features: -// [X] Platform: Clipboard support. -// [X] Platform: Gamepad support. Enable with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'. -// [x] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'. FIXME: 3 cursors types are missing from GLFW. -// [X] Platform: Keyboard arrays indexed using GLFW_KEY_* codes, e.g. ImGui::IsKeyPressed(GLFW_KEY_SPACE). - -// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. -// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. -// https://github.com/ocornut/imgui - -// About GLSL version: -// The 'glsl_version' initialization parameter defaults to "#version 150" if NULL. -// Only override if your GL version doesn't handle this GLSL version. Keep NULL if unsure! - -#pragma once - -struct GLFWwindow; - -IMGUI_IMPL_API bool ImGui_ImplGlfw_InitForOpenGL(GLFWwindow* window, bool install_callbacks); -IMGUI_IMPL_API bool ImGui_ImplGlfw_InitForVulkan(GLFWwindow* window, bool install_callbacks); -IMGUI_IMPL_API void ImGui_ImplGlfw_Shutdown(); -IMGUI_IMPL_API void ImGui_ImplGlfw_NewFrame(); - -// GLFW callbacks -// - When calling Init with 'install_callbacks=true': GLFW callbacks will be installed for you. They will call user's previously installed callbacks, if any. -// - When calling Init with 'install_callbacks=false': GLFW callbacks won't be installed. You will need to call those function yourself from your own GLFW callbacks. -IMGUI_IMPL_API void ImGui_ImplGlfw_MouseButtonCallback(GLFWwindow* window, int button, int action, int mods); -IMGUI_IMPL_API void ImGui_ImplGlfw_ScrollCallback(GLFWwindow* window, double xoffset, double yoffset); -IMGUI_IMPL_API void ImGui_ImplGlfw_KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods); -IMGUI_IMPL_API void ImGui_ImplGlfw_CharCallback(GLFWwindow* window, unsigned int c); diff --git a/cmake/imgui/examples/imgui_impl_glut.cpp b/cmake/imgui/examples/imgui_impl_glut.cpp deleted file mode 100644 index 3c17bbfc..00000000 --- a/cmake/imgui/examples/imgui_impl_glut.cpp +++ /dev/null @@ -1,216 +0,0 @@ -// dear imgui: Platform Binding for GLUT/FreeGLUT -// This needs to be used along with a Renderer (e.g. OpenGL2) - -// !!! GLUT/FreeGLUT IS OBSOLETE SOFTWARE. Using GLUT is not recommended unless you really miss the 90's. !!! -// !!! If someone or something is teaching you GLUT in 2020, you are being abused. Please show some resistance. !!! -// !!! Nowadays, prefer using GLFW or SDL instead! - -// Issues: -// [ ] Platform: GLUT is unable to distinguish e.g. Backspace from CTRL+H or TAB from CTRL+I -// [ ] Platform: Missing mouse cursor shape/visibility support. -// [ ] Platform: Missing clipboard support (not supported by Glut). -// [ ] Platform: Missing gamepad support. - -// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. -// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. -// https://github.com/ocornut/imgui - -// CHANGELOG -// (minor and older changes stripped away, please see git history for details) -// 2019-04-03: Misc: Renamed imgui_impl_freeglut.cpp/.h to imgui_impl_glut.cpp/.h. -// 2019-03-25: Misc: Made io.DeltaTime always above zero. -// 2018-11-30: Misc: Setting up io.BackendPlatformName so it can be displayed in the About Window. -// 2018-03-22: Added GLUT Platform binding. - -#include "imgui.h" -#include "imgui_impl_glut.h" -#ifdef __APPLE__ - #include -#else - #include -#endif - -#ifdef _MSC_VER -#pragma warning (disable: 4505) // unreferenced local function has been removed (stb stuff) -#endif - -static int g_Time = 0; // Current time, in milliseconds - -bool ImGui_ImplGLUT_Init() -{ - ImGuiIO& io = ImGui::GetIO(); - -#ifdef FREEGLUT - io.BackendPlatformName ="imgui_impl_glut (freeglut)"; -#else - io.BackendPlatformName ="imgui_impl_glut"; -#endif - - g_Time = 0; - - // Glut has 1 function for characters and one for "special keys". We map the characters in the 0..255 range and the keys above. - io.KeyMap[ImGuiKey_Tab] = '\t'; // == 9 == CTRL+I - io.KeyMap[ImGuiKey_LeftArrow] = 256 + GLUT_KEY_LEFT; - io.KeyMap[ImGuiKey_RightArrow] = 256 + GLUT_KEY_RIGHT; - io.KeyMap[ImGuiKey_UpArrow] = 256 + GLUT_KEY_UP; - io.KeyMap[ImGuiKey_DownArrow] = 256 + GLUT_KEY_DOWN; - io.KeyMap[ImGuiKey_PageUp] = 256 + GLUT_KEY_PAGE_UP; - io.KeyMap[ImGuiKey_PageDown] = 256 + GLUT_KEY_PAGE_DOWN; - io.KeyMap[ImGuiKey_Home] = 256 + GLUT_KEY_HOME; - io.KeyMap[ImGuiKey_End] = 256 + GLUT_KEY_END; - io.KeyMap[ImGuiKey_Insert] = 256 + GLUT_KEY_INSERT; - io.KeyMap[ImGuiKey_Delete] = 127; - io.KeyMap[ImGuiKey_Backspace] = 8; // == CTRL+H - io.KeyMap[ImGuiKey_Space] = ' '; - io.KeyMap[ImGuiKey_Enter] = 13; // == CTRL+M - io.KeyMap[ImGuiKey_Escape] = 27; - io.KeyMap[ImGuiKey_KeyPadEnter] = 13; // == CTRL+M - io.KeyMap[ImGuiKey_A] = 'A'; - io.KeyMap[ImGuiKey_C] = 'C'; - io.KeyMap[ImGuiKey_V] = 'V'; - io.KeyMap[ImGuiKey_X] = 'X'; - io.KeyMap[ImGuiKey_Y] = 'Y'; - io.KeyMap[ImGuiKey_Z] = 'Z'; - - return true; -} - -void ImGui_ImplGLUT_InstallFuncs() -{ - glutReshapeFunc(ImGui_ImplGLUT_ReshapeFunc); - glutMotionFunc(ImGui_ImplGLUT_MotionFunc); - glutPassiveMotionFunc(ImGui_ImplGLUT_MotionFunc); - glutMouseFunc(ImGui_ImplGLUT_MouseFunc); -#ifdef __FREEGLUT_EXT_H__ - glutMouseWheelFunc(ImGui_ImplGLUT_MouseWheelFunc); -#endif - glutKeyboardFunc(ImGui_ImplGLUT_KeyboardFunc); - glutKeyboardUpFunc(ImGui_ImplGLUT_KeyboardUpFunc); - glutSpecialFunc(ImGui_ImplGLUT_SpecialFunc); - glutSpecialUpFunc(ImGui_ImplGLUT_SpecialUpFunc); -} - -void ImGui_ImplGLUT_Shutdown() -{ -} - -void ImGui_ImplGLUT_NewFrame() -{ - // Setup time step - ImGuiIO& io = ImGui::GetIO(); - int current_time = glutGet(GLUT_ELAPSED_TIME); - int delta_time_ms = (current_time - g_Time); - if (delta_time_ms <= 0) - delta_time_ms = 1; - io.DeltaTime = delta_time_ms / 1000.0f; - g_Time = current_time; - - // Start the frame - ImGui::NewFrame(); -} - -static void ImGui_ImplGLUT_UpdateKeyboardMods() -{ - ImGuiIO& io = ImGui::GetIO(); - int mods = glutGetModifiers(); - io.KeyCtrl = (mods & GLUT_ACTIVE_CTRL) != 0; - io.KeyShift = (mods & GLUT_ACTIVE_SHIFT) != 0; - io.KeyAlt = (mods & GLUT_ACTIVE_ALT) != 0; -} - -void ImGui_ImplGLUT_KeyboardFunc(unsigned char c, int x, int y) -{ - // Send character to imgui - //printf("char_down_func %d '%c'\n", c, c); - ImGuiIO& io = ImGui::GetIO(); - if (c >= 32) - io.AddInputCharacter((unsigned int)c); - - // Store letters in KeysDown[] array as both uppercase and lowercase + Handle GLUT translating CTRL+A..CTRL+Z as 1..26. - // This is a hacky mess but GLUT is unable to distinguish e.g. a TAB key from CTRL+I so this is probably the best we can do here. - if (c >= 1 && c <= 26) - io.KeysDown[c] = io.KeysDown[c - 1 + 'a'] = io.KeysDown[c - 1 + 'A'] = true; - else if (c >= 'a' && c <= 'z') - io.KeysDown[c] = io.KeysDown[c - 'a' + 'A'] = true; - else if (c >= 'A' && c <= 'Z') - io.KeysDown[c] = io.KeysDown[c - 'A' + 'a'] = true; - else - io.KeysDown[c] = true; - ImGui_ImplGLUT_UpdateKeyboardMods(); - (void)x; (void)y; // Unused -} - -void ImGui_ImplGLUT_KeyboardUpFunc(unsigned char c, int x, int y) -{ - //printf("char_up_func %d '%c'\n", c, c); - ImGuiIO& io = ImGui::GetIO(); - if (c >= 1 && c <= 26) - io.KeysDown[c] = io.KeysDown[c - 1 + 'a'] = io.KeysDown[c - 1 + 'A'] = false; - else if (c >= 'a' && c <= 'z') - io.KeysDown[c] = io.KeysDown[c - 'a' + 'A'] = false; - else if (c >= 'A' && c <= 'Z') - io.KeysDown[c] = io.KeysDown[c - 'A' + 'a'] = false; - else - io.KeysDown[c] = false; - ImGui_ImplGLUT_UpdateKeyboardMods(); - (void)x; (void)y; // Unused -} - -void ImGui_ImplGLUT_SpecialFunc(int key, int x, int y) -{ - //printf("key_down_func %d\n", key); - ImGuiIO& io = ImGui::GetIO(); - if (key + 256 < IM_ARRAYSIZE(io.KeysDown)) - io.KeysDown[key + 256] = true; - ImGui_ImplGLUT_UpdateKeyboardMods(); - (void)x; (void)y; // Unused -} - -void ImGui_ImplGLUT_SpecialUpFunc(int key, int x, int y) -{ - //printf("key_up_func %d\n", key); - ImGuiIO& io = ImGui::GetIO(); - if (key + 256 < IM_ARRAYSIZE(io.KeysDown)) - io.KeysDown[key + 256] = false; - ImGui_ImplGLUT_UpdateKeyboardMods(); - (void)x; (void)y; // Unused -} - -void ImGui_ImplGLUT_MouseFunc(int glut_button, int state, int x, int y) -{ - ImGuiIO& io = ImGui::GetIO(); - io.MousePos = ImVec2((float)x, (float)y); - int button = -1; - if (glut_button == GLUT_LEFT_BUTTON) button = 0; - if (glut_button == GLUT_RIGHT_BUTTON) button = 1; - if (glut_button == GLUT_MIDDLE_BUTTON) button = 2; - if (button != -1 && state == GLUT_DOWN) - io.MouseDown[button] = true; - if (button != -1 && state == GLUT_UP) - io.MouseDown[button] = false; -} - -#ifdef __FREEGLUT_EXT_H__ -void ImGui_ImplGLUT_MouseWheelFunc(int button, int dir, int x, int y) -{ - ImGuiIO& io = ImGui::GetIO(); - io.MousePos = ImVec2((float)x, (float)y); - if (dir > 0) - io.MouseWheel += 1.0; - else if (dir < 0) - io.MouseWheel -= 1.0; - (void)button; // Unused -} -#endif - -void ImGui_ImplGLUT_ReshapeFunc(int w, int h) -{ - ImGuiIO& io = ImGui::GetIO(); - io.DisplaySize = ImVec2((float)w, (float)h); -} - -void ImGui_ImplGLUT_MotionFunc(int x, int y) -{ - ImGuiIO& io = ImGui::GetIO(); - io.MousePos = ImVec2((float)x, (float)y); -} diff --git a/cmake/imgui/examples/imgui_impl_glut.h b/cmake/imgui/examples/imgui_impl_glut.h deleted file mode 100644 index 0c561207..00000000 --- a/cmake/imgui/examples/imgui_impl_glut.h +++ /dev/null @@ -1,35 +0,0 @@ -// dear imgui: Platform Binding for GLUT/FreeGLUT -// This needs to be used along with a Renderer (e.g. OpenGL2) - -// !!! GLUT/FreeGLUT IS OBSOLETE SOFTWARE. Using GLUT is not recommended unless you really miss the 90's. !!! -// !!! If someone or something is teaching you GLUT in 2020, you are being abused. Please show some resistance. !!! -// !!! Nowadays, prefer using GLFW or SDL instead! - -// Issues: -// [ ] Platform: GLUT is unable to distinguish e.g. Backspace from CTRL+H or TAB from CTRL+I -// [ ] Platform: Missing mouse cursor shape/visibility support. -// [ ] Platform: Missing clipboard support (not supported by Glut). -// [ ] Platform: Missing gamepad support. - -// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. -// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. -// https://github.com/ocornut/imgui - -#pragma once - -IMGUI_IMPL_API bool ImGui_ImplGLUT_Init(); -IMGUI_IMPL_API void ImGui_ImplGLUT_InstallFuncs(); -IMGUI_IMPL_API void ImGui_ImplGLUT_Shutdown(); -IMGUI_IMPL_API void ImGui_ImplGLUT_NewFrame(); - -// You can call ImGui_ImplGLUT_InstallFuncs() to get all those functions installed automatically, -// or call them yourself from your own GLUT handlers. We are using the same weird names as GLUT for consistency.. -//---------------------------------------- GLUT name --------------------------------------------- Decent Name --------- -IMGUI_IMPL_API void ImGui_ImplGLUT_ReshapeFunc(int w, int h); // ~ ResizeFunc -IMGUI_IMPL_API void ImGui_ImplGLUT_MotionFunc(int x, int y); // ~ MouseMoveFunc -IMGUI_IMPL_API void ImGui_ImplGLUT_MouseFunc(int button, int state, int x, int y); // ~ MouseButtonFunc -IMGUI_IMPL_API void ImGui_ImplGLUT_MouseWheelFunc(int button, int dir, int x, int y); // ~ MouseWheelFunc -IMGUI_IMPL_API void ImGui_ImplGLUT_KeyboardFunc(unsigned char c, int x, int y); // ~ CharPressedFunc -IMGUI_IMPL_API void ImGui_ImplGLUT_KeyboardUpFunc(unsigned char c, int x, int y); // ~ CharReleasedFunc -IMGUI_IMPL_API void ImGui_ImplGLUT_SpecialFunc(int key, int x, int y); // ~ KeyPressedFunc -IMGUI_IMPL_API void ImGui_ImplGLUT_SpecialUpFunc(int key, int x, int y); // ~ KeyReleasedFunc diff --git a/cmake/imgui/examples/imgui_impl_marmalade.cpp b/cmake/imgui/examples/imgui_impl_marmalade.cpp deleted file mode 100644 index 0675c6b4..00000000 --- a/cmake/imgui/examples/imgui_impl_marmalade.cpp +++ /dev/null @@ -1,316 +0,0 @@ -// dear imgui: Renderer + Platform Binding for Marmalade + IwGx -// Marmalade code: Copyright (C) 2015 by Giovanni Zito (this file is part of Dear ImGui) - -// Implemented features: -// [X] Renderer: User texture binding. Use 'CIwTexture*' as ImTextureID. Read the FAQ about ImTextureID! -// Missing features: -// [ ] Renderer: Clipping rectangles are not honored. - -// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. -// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. -// https://github.com/ocornut/imgui - -// CHANGELOG -// (minor and older changes stripped away, please see git history for details) -// 2019-07-21: Inputs: Added mapping for ImGuiKey_KeyPadEnter. -// 2019-05-11: Inputs: Don't filter value from character callback before calling AddInputCharacter(). -// 2018-11-30: Misc: Setting up io.BackendPlatformName/io.BackendRendererName so they can be displayed in the About Window. -// 2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_Marmalade_RenderDrawData() in the .h file so you can call it yourself. -// 2018-02-06: Misc: Removed call to ImGui::Shutdown() which is not available from 1.60 WIP, user needs to call CreateContext/DestroyContext themselves. -// 2018-02-06: Inputs: Added mapping for ImGuiKey_Space. - -#include "imgui.h" -#include "imgui_impl_marmalade.h" - -#include -#include -#include -#include -#include - -// Data -static double g_Time = 0.0f; -static bool g_MousePressed[3] = { false, false, false }; -static CIwTexture* g_FontTexture = NULL; -static char* g_ClipboardText = NULL; -static bool g_osdKeyboardEnabled = false; - -// use this setting to scale the interface - e.g. on device you could use 2 or 3 scale factor -static ImVec2 g_RenderScale = ImVec2(1.0f,1.0f); - -// Render function. -// (this used to be set in io.RenderDrawListsFn and called by ImGui::Render(), but you can now call this directly from your main loop) -void ImGui_Marmalade_RenderDrawData(ImDrawData* draw_data) -{ - // Avoid rendering when minimized - if (draw_data->DisplaySize.x <= 0.0f || draw_data->DisplaySize.y <= 0.0f) - return; - - // Render command lists - for (int n = 0; n < draw_data->CmdListsCount; n++) - { - const ImDrawList* cmd_list = draw_data->CmdLists[n]; - const ImDrawIdx* idx_buffer = cmd_list->IdxBuffer.Data; - const int nVert = cmd_list->VtxBuffer.Size; - CIwFVec2* pVertStream = IW_GX_ALLOC(CIwFVec2, nVert); - CIwFVec2* pUVStream = IW_GX_ALLOC(CIwFVec2, nVert); - CIwColour* pColStream = IW_GX_ALLOC(CIwColour, nVert); - - for (int i = 0; i < nVert; i++) - { - // FIXME-OPT: optimize multiplication on GPU using vertex shader/projection matrix. - pVertStream[i].x = cmd_list->VtxBuffer[i].pos.x * g_RenderScale.x; - pVertStream[i].y = cmd_list->VtxBuffer[i].pos.y * g_RenderScale.y; - pUVStream[i].x = cmd_list->VtxBuffer[i].uv.x; - pUVStream[i].y = cmd_list->VtxBuffer[i].uv.y; - pColStream[i] = cmd_list->VtxBuffer[i].col; - } - - IwGxSetVertStreamScreenSpace(pVertStream, nVert); - IwGxSetUVStream(pUVStream); - IwGxSetColStream(pColStream, nVert); - IwGxSetNormStream(0); - - for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++) - { - const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i]; - if (pcmd->UserCallback) - { - pcmd->UserCallback(cmd_list, pcmd); - } - else - { - // FIXME: Not honoring ClipRect fields. - CIwMaterial* pCurrentMaterial = IW_GX_ALLOC_MATERIAL(); - pCurrentMaterial->SetShadeMode(CIwMaterial::SHADE_FLAT); - pCurrentMaterial->SetCullMode(CIwMaterial::CULL_NONE); - pCurrentMaterial->SetFiltering(false); - pCurrentMaterial->SetAlphaMode(CIwMaterial::ALPHA_BLEND); - pCurrentMaterial->SetDepthWriteMode(CIwMaterial::DEPTH_WRITE_NORMAL); - pCurrentMaterial->SetAlphaTestMode(CIwMaterial::ALPHATEST_DISABLED); - pCurrentMaterial->SetTexture((CIwTexture*)pcmd->TextureId); - IwGxSetMaterial(pCurrentMaterial); - IwGxDrawPrims(IW_GX_TRI_LIST, (uint16*)idx_buffer, pcmd->ElemCount); - } - idx_buffer += pcmd->ElemCount; - } - IwGxFlush(); - } - - // TODO: restore modified state (i.e. mvp matrix) -} - -static const char* ImGui_Marmalade_GetClipboardText(void* /*user_data*/) -{ - if (!s3eClipboardAvailable()) - return NULL; - - if (int size = s3eClipboardGetText(NULL, 0)) - { - if (g_ClipboardText) - delete[] g_ClipboardText; - g_ClipboardText = new char[size]; - g_ClipboardText[0] = '\0'; - s3eClipboardGetText(g_ClipboardText, size); - } - - return g_ClipboardText; -} - -static void ImGui_Marmalade_SetClipboardText(void* /*user_data*/, const char* text) -{ - if (s3eClipboardAvailable()) - s3eClipboardSetText(text); -} - -int32 ImGui_Marmalade_PointerButtonEventCallback(void* system_data, void* user_data) -{ - // pEvent->m_Button is of type s3ePointerButton and indicates which mouse - // button was pressed. For touchscreen this should always have the value - // S3E_POINTER_BUTTON_SELECT - s3ePointerEvent* pEvent = (s3ePointerEvent*)system_data; - - if (pEvent->m_Pressed == 1) - { - if (pEvent->m_Button == S3E_POINTER_BUTTON_LEFTMOUSE) - g_MousePressed[0] = true; - if (pEvent->m_Button == S3E_POINTER_BUTTON_RIGHTMOUSE) - g_MousePressed[1] = true; - if (pEvent->m_Button == S3E_POINTER_BUTTON_MIDDLEMOUSE) - g_MousePressed[2] = true; - if (pEvent->m_Button == S3E_POINTER_BUTTON_MOUSEWHEELUP) - io.MouseWheel += pEvent->m_y; - if (pEvent->m_Button == S3E_POINTER_BUTTON_MOUSEWHEELDOWN) - io.MouseWheel += pEvent->m_y; - } - - return 0; -} - -int32 ImGui_Marmalade_KeyCallback(void* system_data, void* user_data) -{ - ImGuiIO& io = ImGui::GetIO(); - s3eKeyboardEvent* e = (s3eKeyboardEvent*)system_data; - if (e->m_Pressed == 1) - io.KeysDown[e->m_Key] = true; - if (e->m_Pressed == 0) - io.KeysDown[e->m_Key] = false; - - io.KeyCtrl = s3eKeyboardGetState(s3eKeyLeftControl) == S3E_KEY_STATE_DOWN || s3eKeyboardGetState(s3eKeyRightControl) == S3E_KEY_STATE_DOWN; - io.KeyShift = s3eKeyboardGetState(s3eKeyLeftShift) == S3E_KEY_STATE_DOWN || s3eKeyboardGetState(s3eKeyRightShift) == S3E_KEY_STATE_DOWN; - io.KeyAlt = s3eKeyboardGetState(s3eKeyLeftAlt) == S3E_KEY_STATE_DOWN || s3eKeyboardGetState(s3eKeyRightAlt) == S3E_KEY_STATE_DOWN; - io.KeySuper = s3eKeyboardGetState(s3eKeyLeftWindows) == S3E_KEY_STATE_DOWN || s3eKeyboardGetState(s3eKeyRightWindows) == S3E_KEY_STATE_DOWN; - - return 0; -} - -int32 ImGui_Marmalade_CharCallback(void* system_data, void* user_data) -{ - ImGuiIO& io = ImGui::GetIO(); - s3eKeyboardCharEvent* e = (s3eKeyboardCharEvent*)system_data; - io.AddInputCharacter((unsigned int)e->m_Char); - - return 0; -} - -bool ImGui_Marmalade_CreateDeviceObjects() -{ - // Build texture atlas - ImGuiIO& io = ImGui::GetIO(); - unsigned char* pixels; - int width, height; - io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); - - // Upload texture to graphics system - g_FontTexture = new CIwTexture(); - g_FontTexture->SetModifiable(true); - CIwImage& image = g_FontTexture->GetImage(); - image.SetFormat(CIwImage::ARGB_8888); - image.SetWidth(width); - image.SetHeight(height); - image.SetBuffers(); // allocates and own buffers - image.ReadTexels(pixels); - g_FontTexture->SetMipMapping(false); - g_FontTexture->SetFiltering(false); - g_FontTexture->Upload(); - - // Store our identifier - io.Fonts->TexID = (ImTextureID)g_FontTexture; - - return true; -} - -void ImGui_Marmalade_InvalidateDeviceObjects() -{ - if (g_ClipboardText) - { - delete[] g_ClipboardText; - g_ClipboardText = NULL; - } - - if (g_FontTexture) - { - delete g_FontTexture; - ImGui::GetIO().Fonts->TexID = 0; - g_FontTexture = NULL; - } -} - -bool ImGui_Marmalade_Init(bool install_callbacks) -{ - ImGuiIO& io = ImGui::GetIO(); - io.BackendPlatformName = io.BackendRendererName = "imgui_impl_marmalade"; - - io.KeyMap[ImGuiKey_Tab] = s3eKeyTab; // Keyboard mapping. ImGui will use those indices to peek into the io.KeysDown[] array. - io.KeyMap[ImGuiKey_LeftArrow] = s3eKeyLeft; - io.KeyMap[ImGuiKey_RightArrow] = s3eKeyRight; - io.KeyMap[ImGuiKey_UpArrow] = s3eKeyUp; - io.KeyMap[ImGuiKey_DownArrow] = s3eKeyDown; - io.KeyMap[ImGuiKey_PageUp] = s3eKeyPageUp; - io.KeyMap[ImGuiKey_PageDown] = s3eKeyPageDown; - io.KeyMap[ImGuiKey_Home] = s3eKeyHome; - io.KeyMap[ImGuiKey_End] = s3eKeyEnd; - io.KeyMap[ImGuiKey_Insert] = s3eKeyInsert; - io.KeyMap[ImGuiKey_Delete] = s3eKeyDelete; - io.KeyMap[ImGuiKey_Backspace] = s3eKeyBackspace; - io.KeyMap[ImGuiKey_Space] = s3eKeySpace; - io.KeyMap[ImGuiKey_Enter] = s3eKeyEnter; - io.KeyMap[ImGuiKey_Escape] = s3eKeyEsc; - io.KeyMap[ImGuiKey_KeyPadEnter] = s3eKeyNumPadEnter; - io.KeyMap[ImGuiKey_A] = s3eKeyA; - io.KeyMap[ImGuiKey_C] = s3eKeyC; - io.KeyMap[ImGuiKey_V] = s3eKeyV; - io.KeyMap[ImGuiKey_X] = s3eKeyX; - io.KeyMap[ImGuiKey_Y] = s3eKeyY; - io.KeyMap[ImGuiKey_Z] = s3eKeyZ; - - io.SetClipboardTextFn = ImGui_Marmalade_SetClipboardText; - io.GetClipboardTextFn = ImGui_Marmalade_GetClipboardText; - - if (install_callbacks) - { - s3ePointerRegister(S3E_POINTER_BUTTON_EVENT, ImGui_Marmalade_PointerButtonEventCallback, 0); - s3eKeyboardRegister(S3E_KEYBOARD_KEY_EVENT, ImGui_Marmalade_KeyCallback, 0); - s3eKeyboardRegister(S3E_KEYBOARD_CHAR_EVENT, ImGui_Marmalade_CharCallback, 0); - } - - return true; -} - -void ImGui_Marmalade_Shutdown() -{ - ImGui_Marmalade_InvalidateDeviceObjects(); -} - -void ImGui_Marmalade_NewFrame() -{ - if (!g_FontTexture) - ImGui_Marmalade_CreateDeviceObjects(); - - ImGuiIO& io = ImGui::GetIO(); - - // Setup display size (every frame to accommodate for window resizing) - int w = IwGxGetScreenWidth(), h = IwGxGetScreenHeight(); - io.DisplaySize = ImVec2((float)w, (float)h); - // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. - io.DisplayFramebufferScale = g_scale; - - // Setup time step - double current_time = s3eTimerGetUST() / 1000.0f; - io.DeltaTime = g_Time > 0.0 ? (float)(current_time - g_Time) : (float)(1.0f/60.0f); - g_Time = current_time; - - double mouse_x, mouse_y; - mouse_x = s3ePointerGetX(); - mouse_y = s3ePointerGetY(); - io.MousePos = ImVec2((float)mouse_x/g_scale.x, (float)mouse_y/g_scale.y); // Mouse position (set to -FLT_MAX,-FLT_MAX if no mouse / on another screen, etc.) - - for (int i = 0; i < 3; i++) - { - io.MouseDown[i] = g_MousePressed[i] || s3ePointerGetState((s3ePointerButton)i) != S3E_POINTER_STATE_UP; // If a mouse press event came, always pass it as "mouse held this frame", so we don't miss click-release events that are shorter than 1 frame. - g_MousePressed[i] = false; - } - - // TODO: Hide OS mouse cursor if ImGui is drawing it - // s3ePointerSetInt(S3E_POINTER_HIDE_CURSOR,(io.MouseDrawCursor ? 0 : 1)); - - // Show/hide OSD keyboard - if (io.WantTextInput) - { - // Some text input widget is active? - if (!g_osdKeyboardEnabled) - { - g_osdKeyboardEnabled = true; - s3eKeyboardSetInt(S3E_KEYBOARD_GET_CHAR, 1); // show OSD keyboard - } - } - else - { - // No text input widget is active - if (g_osdKeyboardEnabled) - { - g_osdKeyboardEnabled = false; - s3eKeyboardSetInt(S3E_KEYBOARD_GET_CHAR, 0); // hide OSD keyboard - } - } -} diff --git a/cmake/imgui/examples/imgui_impl_marmalade.h b/cmake/imgui/examples/imgui_impl_marmalade.h deleted file mode 100644 index 01fbd0d2..00000000 --- a/cmake/imgui/examples/imgui_impl_marmalade.h +++ /dev/null @@ -1,26 +0,0 @@ -// dear imgui: Renderer + Platform Binding for Marmalade + IwGx -// Marmalade code: Copyright (C) 2015 by Giovanni Zito (this file is part of Dear ImGui) - -// Implemented features: -// [X] Renderer: User texture binding. Use 'CIwTexture*' as ImTextureID. Read the FAQ about ImTextureID! - -// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. -// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. -// https://github.com/ocornut/imgui - -#pragma once - -IMGUI_IMPL_API bool ImGui_Marmalade_Init(bool install_callbacks); -IMGUI_IMPL_API void ImGui_Marmalade_Shutdown(); -IMGUI_IMPL_API void ImGui_Marmalade_NewFrame(); -IMGUI_IMPL_API void ImGui_Marmalade_RenderDrawData(ImDrawData* draw_data); - -// Use if you want to reset your rendering device without losing ImGui state. -IMGUI_IMPL_API void ImGui_Marmalade_InvalidateDeviceObjects(); -IMGUI_IMPL_API bool ImGui_Marmalade_CreateDeviceObjects(); - -// Callbacks (installed by default if you enable 'install_callbacks' during initialization) -// You can also handle inputs yourself and use those as a reference. -IMGUI_IMPL_API int32 ImGui_Marmalade_PointerButtonEventCallback(void* system_data, void* user_data); -IMGUI_IMPL_API int32 ImGui_Marmalade_KeyCallback(void* system_data, void* user_data); -IMGUI_IMPL_API int32 ImGui_Marmalade_CharCallback(void* system_data, void* user_data); diff --git a/cmake/imgui/examples/imgui_impl_metal.h b/cmake/imgui/examples/imgui_impl_metal.h deleted file mode 100644 index f09a115d..00000000 --- a/cmake/imgui/examples/imgui_impl_metal.h +++ /dev/null @@ -1,26 +0,0 @@ -// dear imgui: Renderer for Metal -// This needs to be used along with a Platform Binding (e.g. OSX) - -// Implemented features: -// [X] Renderer: User texture binding. Use 'MTLTexture' as ImTextureID. Read the FAQ about ImTextureID! -// [X] Renderer: Support for large meshes (64k+ vertices) with 16-bit indices. - -// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. -// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. -// https://github.com/ocornut/imgui - -@class MTLRenderPassDescriptor; -@protocol MTLDevice, MTLCommandBuffer, MTLRenderCommandEncoder; - -IMGUI_IMPL_API bool ImGui_ImplMetal_Init(id device); -IMGUI_IMPL_API void ImGui_ImplMetal_Shutdown(); -IMGUI_IMPL_API void ImGui_ImplMetal_NewFrame(MTLRenderPassDescriptor *renderPassDescriptor); -IMGUI_IMPL_API void ImGui_ImplMetal_RenderDrawData(ImDrawData* draw_data, - id commandBuffer, - id commandEncoder); - -// Called by Init/NewFrame/Shutdown -IMGUI_IMPL_API bool ImGui_ImplMetal_CreateFontsTexture(id device); -IMGUI_IMPL_API void ImGui_ImplMetal_DestroyFontsTexture(); -IMGUI_IMPL_API bool ImGui_ImplMetal_CreateDeviceObjects(id device); -IMGUI_IMPL_API void ImGui_ImplMetal_DestroyDeviceObjects(); diff --git a/cmake/imgui/examples/imgui_impl_metal.mm b/cmake/imgui/examples/imgui_impl_metal.mm deleted file mode 100644 index 7cdda733..00000000 --- a/cmake/imgui/examples/imgui_impl_metal.mm +++ /dev/null @@ -1,550 +0,0 @@ -// dear imgui: Renderer for Metal -// This needs to be used along with a Platform Binding (e.g. OSX) - -// Implemented features: -// [X] Renderer: User texture binding. Use 'MTLTexture' as ImTextureID. Read the FAQ about ImTextureID! -// [X] Renderer: Support for large meshes (64k+ vertices) with 16-bit indices. - -// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. -// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. -// https://github.com/ocornut/imgui - -// CHANGELOG -// (minor and older changes stripped away, please see git history for details) -// 2019-05-29: Metal: Added support for large mesh (64K+ vertices), enable ImGuiBackendFlags_RendererHasVtxOffset flag. -// 2019-04-30: Metal: Added support for special ImDrawCallback_ResetRenderState callback to reset render state. -// 2019-02-11: Metal: Projecting clipping rectangles correctly using draw_data->FramebufferScale to allow multi-viewports for retina display. -// 2018-11-30: Misc: Setting up io.BackendRendererName so it can be displayed in the About Window. -// 2018-07-05: Metal: Added new Metal backend implementation. - -#include "imgui.h" -#include "imgui_impl_metal.h" - -#import -// #import // Not supported in XCode 9.2. Maybe a macro to detect the SDK version can be used (something like #if MACOS_SDK >= 10.13 ...) -#import - -#pragma mark - Support classes - -// A wrapper around a MTLBuffer object that knows the last time it was reused -@interface MetalBuffer : NSObject -@property (nonatomic, strong) id buffer; -@property (nonatomic, assign) NSTimeInterval lastReuseTime; -- (instancetype)initWithBuffer:(id)buffer; -@end - -// An object that encapsulates the data necessary to uniquely identify a -// render pipeline state. These are used as cache keys. -@interface FramebufferDescriptor : NSObject -@property (nonatomic, assign) unsigned long sampleCount; -@property (nonatomic, assign) MTLPixelFormat colorPixelFormat; -@property (nonatomic, assign) MTLPixelFormat depthPixelFormat; -@property (nonatomic, assign) MTLPixelFormat stencilPixelFormat; -- (instancetype)initWithRenderPassDescriptor:(MTLRenderPassDescriptor *)renderPassDescriptor; -@end - -// A singleton that stores long-lived objects that are needed by the Metal -// renderer backend. Stores the render pipeline state cache and the default -// font texture, and manages the reusable buffer cache. -@interface MetalContext : NSObject -@property (nonatomic, strong) id depthStencilState; -@property (nonatomic, strong) FramebufferDescriptor *framebufferDescriptor; // framebuffer descriptor for current frame; transient -@property (nonatomic, strong) NSMutableDictionary *renderPipelineStateCache; // pipeline cache; keyed on framebuffer descriptors -@property (nonatomic, strong, nullable) id fontTexture; -@property (nonatomic, strong) NSMutableArray *bufferCache; -@property (nonatomic, assign) NSTimeInterval lastBufferCachePurge; -- (void)makeDeviceObjectsWithDevice:(id)device; -- (void)makeFontTextureWithDevice:(id)device; -- (MetalBuffer *)dequeueReusableBufferOfLength:(NSUInteger)length device:(id)device; -- (void)enqueueReusableBuffer:(MetalBuffer *)buffer; -- (id)renderPipelineStateForFrameAndDevice:(id)device; -- (void)emptyRenderPipelineStateCache; -- (void)setupRenderState:(ImDrawData *)drawData - commandBuffer:(id)commandBuffer - commandEncoder:(id)commandEncoder - renderPipelineState:(id)renderPipelineState - vertexBuffer:(MetalBuffer *)vertexBuffer - vertexBufferOffset:(size_t)vertexBufferOffset; -- (void)renderDrawData:(ImDrawData *)drawData - commandBuffer:(id)commandBuffer - commandEncoder:(id)commandEncoder; -@end - -static MetalContext *g_sharedMetalContext = nil; - -#pragma mark - ImGui API implementation - -bool ImGui_ImplMetal_Init(id device) -{ - ImGuiIO& io = ImGui::GetIO(); - io.BackendRendererName = "imgui_impl_metal"; - io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset; // We can honor the ImDrawCmd::VtxOffset field, allowing for large meshes. - - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - g_sharedMetalContext = [[MetalContext alloc] init]; - }); - - ImGui_ImplMetal_CreateDeviceObjects(device); - - return true; -} - -void ImGui_ImplMetal_Shutdown() -{ - ImGui_ImplMetal_DestroyDeviceObjects(); -} - -void ImGui_ImplMetal_NewFrame(MTLRenderPassDescriptor *renderPassDescriptor) -{ - IM_ASSERT(g_sharedMetalContext != nil && "No Metal context. Did you call ImGui_ImplMetal_Init() ?"); - - g_sharedMetalContext.framebufferDescriptor = [[FramebufferDescriptor alloc] initWithRenderPassDescriptor:renderPassDescriptor]; -} - -// Metal Render function. -void ImGui_ImplMetal_RenderDrawData(ImDrawData* draw_data, id commandBuffer, id commandEncoder) -{ - [g_sharedMetalContext renderDrawData:draw_data commandBuffer:commandBuffer commandEncoder:commandEncoder]; -} - -bool ImGui_ImplMetal_CreateFontsTexture(id device) -{ - [g_sharedMetalContext makeFontTextureWithDevice:device]; - - ImGuiIO& io = ImGui::GetIO(); - io.Fonts->TexID = (__bridge void *)g_sharedMetalContext.fontTexture; // ImTextureID == void* - - return (g_sharedMetalContext.fontTexture != nil); -} - -void ImGui_ImplMetal_DestroyFontsTexture() -{ - ImGuiIO& io = ImGui::GetIO(); - g_sharedMetalContext.fontTexture = nil; - io.Fonts->TexID = nullptr; -} - -bool ImGui_ImplMetal_CreateDeviceObjects(id device) -{ - [g_sharedMetalContext makeDeviceObjectsWithDevice:device]; - - ImGui_ImplMetal_CreateFontsTexture(device); - - return true; -} - -void ImGui_ImplMetal_DestroyDeviceObjects() -{ - ImGui_ImplMetal_DestroyFontsTexture(); - [g_sharedMetalContext emptyRenderPipelineStateCache]; -} - -#pragma mark - MetalBuffer implementation - -@implementation MetalBuffer -- (instancetype)initWithBuffer:(id)buffer -{ - if ((self = [super init])) - { - _buffer = buffer; - _lastReuseTime = [NSDate date].timeIntervalSince1970; - } - return self; -} -@end - -#pragma mark - FramebufferDescriptor implementation - -@implementation FramebufferDescriptor -- (instancetype)initWithRenderPassDescriptor:(MTLRenderPassDescriptor *)renderPassDescriptor -{ - if ((self = [super init])) - { - _sampleCount = renderPassDescriptor.colorAttachments[0].texture.sampleCount; - _colorPixelFormat = renderPassDescriptor.colorAttachments[0].texture.pixelFormat; - _depthPixelFormat = renderPassDescriptor.depthAttachment.texture.pixelFormat; - _stencilPixelFormat = renderPassDescriptor.stencilAttachment.texture.pixelFormat; - } - return self; -} - -- (nonnull id)copyWithZone:(nullable NSZone *)zone -{ - FramebufferDescriptor *copy = [[FramebufferDescriptor allocWithZone:zone] init]; - copy.sampleCount = self.sampleCount; - copy.colorPixelFormat = self.colorPixelFormat; - copy.depthPixelFormat = self.depthPixelFormat; - copy.stencilPixelFormat = self.stencilPixelFormat; - return copy; -} - -- (NSUInteger)hash -{ - NSUInteger sc = _sampleCount & 0x3; - NSUInteger cf = _colorPixelFormat & 0x3FF; - NSUInteger df = _depthPixelFormat & 0x3FF; - NSUInteger sf = _stencilPixelFormat & 0x3FF; - NSUInteger hash = (sf << 22) | (df << 12) | (cf << 2) | sc; - return hash; -} - -- (BOOL)isEqual:(id)object -{ - FramebufferDescriptor *other = object; - if (![other isKindOfClass:[FramebufferDescriptor class]]) - return NO; - return other.sampleCount == self.sampleCount && - other.colorPixelFormat == self.colorPixelFormat && - other.depthPixelFormat == self.depthPixelFormat && - other.stencilPixelFormat == self.stencilPixelFormat; -} - -@end - -#pragma mark - MetalContext implementation - -@implementation MetalContext -- (instancetype)init { - if ((self = [super init])) - { - _renderPipelineStateCache = [NSMutableDictionary dictionary]; - _bufferCache = [NSMutableArray array]; - _lastBufferCachePurge = [NSDate date].timeIntervalSince1970; - } - return self; -} - -- (void)makeDeviceObjectsWithDevice:(id)device -{ - MTLDepthStencilDescriptor *depthStencilDescriptor = [[MTLDepthStencilDescriptor alloc] init]; - depthStencilDescriptor.depthWriteEnabled = NO; - depthStencilDescriptor.depthCompareFunction = MTLCompareFunctionAlways; - self.depthStencilState = [device newDepthStencilStateWithDescriptor:depthStencilDescriptor]; -} - -// We are retrieving and uploading the font atlas as a 4-channels RGBA texture here. -// In theory we could call GetTexDataAsAlpha8() and upload a 1-channel texture to save on memory access bandwidth. -// However, using a shader designed for 1-channel texture would make it less obvious to use the ImTextureID facility to render users own textures. -// You can make that change in your implementation. -- (void)makeFontTextureWithDevice:(id)device -{ - ImGuiIO &io = ImGui::GetIO(); - unsigned char* pixels; - int width, height; - io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); - MTLTextureDescriptor *textureDescriptor = [MTLTextureDescriptor texture2DDescriptorWithPixelFormat:MTLPixelFormatRGBA8Unorm - width:width - height:height - mipmapped:NO]; - textureDescriptor.usage = MTLTextureUsageShaderRead; -#if TARGET_OS_OSX - textureDescriptor.storageMode = MTLStorageModeManaged; -#else - textureDescriptor.storageMode = MTLStorageModeShared; -#endif - id texture = [device newTextureWithDescriptor:textureDescriptor]; - [texture replaceRegion:MTLRegionMake2D(0, 0, width, height) mipmapLevel:0 withBytes:pixels bytesPerRow:width * 4]; - self.fontTexture = texture; -} - -- (MetalBuffer *)dequeueReusableBufferOfLength:(NSUInteger)length device:(id)device -{ - NSTimeInterval now = [NSDate date].timeIntervalSince1970; - - // Purge old buffers that haven't been useful for a while - if (now - self.lastBufferCachePurge > 1.0) - { - NSMutableArray *survivors = [NSMutableArray array]; - for (MetalBuffer *candidate in self.bufferCache) - { - if (candidate.lastReuseTime > self.lastBufferCachePurge) - { - [survivors addObject:candidate]; - } - } - self.bufferCache = [survivors mutableCopy]; - self.lastBufferCachePurge = now; - } - - // See if we have a buffer we can reuse - MetalBuffer *bestCandidate = nil; - for (MetalBuffer *candidate in self.bufferCache) - if (candidate.buffer.length >= length && (bestCandidate == nil || bestCandidate.lastReuseTime > candidate.lastReuseTime)) - bestCandidate = candidate; - - if (bestCandidate != nil) - { - [self.bufferCache removeObject:bestCandidate]; - bestCandidate.lastReuseTime = now; - return bestCandidate; - } - - // No luck; make a new buffer - id backing = [device newBufferWithLength:length options:MTLResourceStorageModeShared]; - return [[MetalBuffer alloc] initWithBuffer:backing]; -} - -- (void)enqueueReusableBuffer:(MetalBuffer *)buffer -{ - [self.bufferCache addObject:buffer]; -} - -- (_Nullable id)renderPipelineStateForFrameAndDevice:(id)device -{ - // Try to retrieve a render pipeline state that is compatible with the framebuffer config for this frame - // The hit rate for this cache should be very near 100%. - id renderPipelineState = self.renderPipelineStateCache[self.framebufferDescriptor]; - - if (renderPipelineState == nil) - { - // No luck; make a new render pipeline state - renderPipelineState = [self _renderPipelineStateForFramebufferDescriptor:self.framebufferDescriptor device:device]; - // Cache render pipeline state for later reuse - self.renderPipelineStateCache[self.framebufferDescriptor] = renderPipelineState; - } - - return renderPipelineState; -} - -- (id)_renderPipelineStateForFramebufferDescriptor:(FramebufferDescriptor *)descriptor device:(id)device -{ - NSError *error = nil; - - NSString *shaderSource = @"" - "#include \n" - "using namespace metal;\n" - "\n" - "struct Uniforms {\n" - " float4x4 projectionMatrix;\n" - "};\n" - "\n" - "struct VertexIn {\n" - " float2 position [[attribute(0)]];\n" - " float2 texCoords [[attribute(1)]];\n" - " uchar4 color [[attribute(2)]];\n" - "};\n" - "\n" - "struct VertexOut {\n" - " float4 position [[position]];\n" - " float2 texCoords;\n" - " float4 color;\n" - "};\n" - "\n" - "vertex VertexOut vertex_main(VertexIn in [[stage_in]],\n" - " constant Uniforms &uniforms [[buffer(1)]]) {\n" - " VertexOut out;\n" - " out.position = uniforms.projectionMatrix * float4(in.position, 0, 1);\n" - " out.texCoords = in.texCoords;\n" - " out.color = float4(in.color) / float4(255.0);\n" - " return out;\n" - "}\n" - "\n" - "fragment half4 fragment_main(VertexOut in [[stage_in]],\n" - " texture2d texture [[texture(0)]]) {\n" - " constexpr sampler linearSampler(coord::normalized, min_filter::linear, mag_filter::linear, mip_filter::linear);\n" - " half4 texColor = texture.sample(linearSampler, in.texCoords);\n" - " return half4(in.color) * texColor;\n" - "}\n"; - - id library = [device newLibraryWithSource:shaderSource options:nil error:&error]; - if (library == nil) - { - NSLog(@"Error: failed to create Metal library: %@", error); - return nil; - } - - id vertexFunction = [library newFunctionWithName:@"vertex_main"]; - id fragmentFunction = [library newFunctionWithName:@"fragment_main"]; - - if (vertexFunction == nil || fragmentFunction == nil) - { - NSLog(@"Error: failed to find Metal shader functions in library: %@", error); - return nil; - } - - MTLVertexDescriptor *vertexDescriptor = [MTLVertexDescriptor vertexDescriptor]; - vertexDescriptor.attributes[0].offset = IM_OFFSETOF(ImDrawVert, pos); - vertexDescriptor.attributes[0].format = MTLVertexFormatFloat2; // position - vertexDescriptor.attributes[0].bufferIndex = 0; - vertexDescriptor.attributes[1].offset = IM_OFFSETOF(ImDrawVert, uv); - vertexDescriptor.attributes[1].format = MTLVertexFormatFloat2; // texCoords - vertexDescriptor.attributes[1].bufferIndex = 0; - vertexDescriptor.attributes[2].offset = IM_OFFSETOF(ImDrawVert, col); - vertexDescriptor.attributes[2].format = MTLVertexFormatUChar4; // color - vertexDescriptor.attributes[2].bufferIndex = 0; - vertexDescriptor.layouts[0].stepRate = 1; - vertexDescriptor.layouts[0].stepFunction = MTLVertexStepFunctionPerVertex; - vertexDescriptor.layouts[0].stride = sizeof(ImDrawVert); - - MTLRenderPipelineDescriptor *pipelineDescriptor = [[MTLRenderPipelineDescriptor alloc] init]; - pipelineDescriptor.vertexFunction = vertexFunction; - pipelineDescriptor.fragmentFunction = fragmentFunction; - pipelineDescriptor.vertexDescriptor = vertexDescriptor; - pipelineDescriptor.sampleCount = self.framebufferDescriptor.sampleCount; - pipelineDescriptor.colorAttachments[0].pixelFormat = self.framebufferDescriptor.colorPixelFormat; - pipelineDescriptor.colorAttachments[0].blendingEnabled = YES; - pipelineDescriptor.colorAttachments[0].rgbBlendOperation = MTLBlendOperationAdd; - pipelineDescriptor.colorAttachments[0].alphaBlendOperation = MTLBlendOperationAdd; - pipelineDescriptor.colorAttachments[0].sourceRGBBlendFactor = MTLBlendFactorSourceAlpha; - pipelineDescriptor.colorAttachments[0].sourceAlphaBlendFactor = MTLBlendFactorSourceAlpha; - pipelineDescriptor.colorAttachments[0].destinationRGBBlendFactor = MTLBlendFactorOneMinusSourceAlpha; - pipelineDescriptor.colorAttachments[0].destinationAlphaBlendFactor = MTLBlendFactorOneMinusSourceAlpha; - pipelineDescriptor.depthAttachmentPixelFormat = self.framebufferDescriptor.depthPixelFormat; - pipelineDescriptor.stencilAttachmentPixelFormat = self.framebufferDescriptor.stencilPixelFormat; - - id renderPipelineState = [device newRenderPipelineStateWithDescriptor:pipelineDescriptor error:&error]; - if (error != nil) - { - NSLog(@"Error: failed to create Metal pipeline state: %@", error); - } - - return renderPipelineState; -} - -- (void)emptyRenderPipelineStateCache -{ - [self.renderPipelineStateCache removeAllObjects]; -} - -- (void)setupRenderState:(ImDrawData *)drawData - commandBuffer:(id)commandBuffer - commandEncoder:(id)commandEncoder - renderPipelineState:(id)renderPipelineState - vertexBuffer:(MetalBuffer *)vertexBuffer - vertexBufferOffset:(size_t)vertexBufferOffset -{ - [commandEncoder setCullMode:MTLCullModeNone]; - [commandEncoder setDepthStencilState:g_sharedMetalContext.depthStencilState]; - - // Setup viewport, orthographic projection matrix - // Our visible imgui space lies from draw_data->DisplayPos (top left) to - // draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayMin is typically (0,0) for single viewport apps. - MTLViewport viewport = - { - .originX = 0.0, - .originY = 0.0, - .width = (double)(drawData->DisplaySize.x * drawData->FramebufferScale.x), - .height = (double)(drawData->DisplaySize.y * drawData->FramebufferScale.y), - .znear = 0.0, - .zfar = 1.0 - }; - [commandEncoder setViewport:viewport]; - - float L = drawData->DisplayPos.x; - float R = drawData->DisplayPos.x + drawData->DisplaySize.x; - float T = drawData->DisplayPos.y; - float B = drawData->DisplayPos.y + drawData->DisplaySize.y; - float N = viewport.znear; - float F = viewport.zfar; - const float ortho_projection[4][4] = - { - { 2.0f/(R-L), 0.0f, 0.0f, 0.0f }, - { 0.0f, 2.0f/(T-B), 0.0f, 0.0f }, - { 0.0f, 0.0f, 1/(F-N), 0.0f }, - { (R+L)/(L-R), (T+B)/(B-T), N/(F-N), 1.0f }, - }; - [commandEncoder setVertexBytes:&ortho_projection length:sizeof(ortho_projection) atIndex:1]; - - [commandEncoder setRenderPipelineState:renderPipelineState]; - - [commandEncoder setVertexBuffer:vertexBuffer.buffer offset:0 atIndex:0]; - [commandEncoder setVertexBufferOffset:vertexBufferOffset atIndex:0]; -} - -- (void)renderDrawData:(ImDrawData *)drawData - commandBuffer:(id)commandBuffer - commandEncoder:(id)commandEncoder -{ - // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) - int fb_width = (int)(drawData->DisplaySize.x * drawData->FramebufferScale.x); - int fb_height = (int)(drawData->DisplaySize.y * drawData->FramebufferScale.y); - if (fb_width <= 0 || fb_height <= 0 || drawData->CmdListsCount == 0) - return; - - id renderPipelineState = [self renderPipelineStateForFrameAndDevice:commandBuffer.device]; - - size_t vertexBufferLength = drawData->TotalVtxCount * sizeof(ImDrawVert); - size_t indexBufferLength = drawData->TotalIdxCount * sizeof(ImDrawIdx); - MetalBuffer* vertexBuffer = [self dequeueReusableBufferOfLength:vertexBufferLength device:commandBuffer.device]; - MetalBuffer* indexBuffer = [self dequeueReusableBufferOfLength:indexBufferLength device:commandBuffer.device]; - - [self setupRenderState:drawData commandBuffer:commandBuffer commandEncoder:commandEncoder renderPipelineState:renderPipelineState vertexBuffer:vertexBuffer vertexBufferOffset:0]; - - // Will project scissor/clipping rectangles into framebuffer space - ImVec2 clip_off = drawData->DisplayPos; // (0,0) unless using multi-viewports - ImVec2 clip_scale = drawData->FramebufferScale; // (1,1) unless using retina display which are often (2,2) - - // Render command lists - size_t vertexBufferOffset = 0; - size_t indexBufferOffset = 0; - for (int n = 0; n < drawData->CmdListsCount; n++) - { - const ImDrawList* cmd_list = drawData->CmdLists[n]; - - memcpy((char *)vertexBuffer.buffer.contents + vertexBufferOffset, cmd_list->VtxBuffer.Data, cmd_list->VtxBuffer.Size * sizeof(ImDrawVert)); - memcpy((char *)indexBuffer.buffer.contents + indexBufferOffset, cmd_list->IdxBuffer.Data, cmd_list->IdxBuffer.Size * sizeof(ImDrawIdx)); - - for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++) - { - const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i]; - if (pcmd->UserCallback) - { - // User callback, registered via ImDrawList::AddCallback() - // (ImDrawCallback_ResetRenderState is a special callback value used by the user to request the renderer to reset render state.) - if (pcmd->UserCallback == ImDrawCallback_ResetRenderState) - [self setupRenderState:drawData commandBuffer:commandBuffer commandEncoder:commandEncoder renderPipelineState:renderPipelineState vertexBuffer:vertexBuffer vertexBufferOffset:vertexBufferOffset]; - else - pcmd->UserCallback(cmd_list, pcmd); - } - else - { - // Project scissor/clipping rectangles into framebuffer space - ImVec4 clip_rect; - clip_rect.x = (pcmd->ClipRect.x - clip_off.x) * clip_scale.x; - clip_rect.y = (pcmd->ClipRect.y - clip_off.y) * clip_scale.y; - clip_rect.z = (pcmd->ClipRect.z - clip_off.x) * clip_scale.x; - clip_rect.w = (pcmd->ClipRect.w - clip_off.y) * clip_scale.y; - - if (clip_rect.x < fb_width && clip_rect.y < fb_height && clip_rect.z >= 0.0f && clip_rect.w >= 0.0f) - { - // Apply scissor/clipping rectangle - MTLScissorRect scissorRect = - { - .x = NSUInteger(clip_rect.x), - .y = NSUInteger(clip_rect.y), - .width = NSUInteger(clip_rect.z - clip_rect.x), - .height = NSUInteger(clip_rect.w - clip_rect.y) - }; - [commandEncoder setScissorRect:scissorRect]; - - - // Bind texture, Draw - if (pcmd->TextureId != NULL) - [commandEncoder setFragmentTexture:(__bridge id)(pcmd->TextureId) atIndex:0]; - - [commandEncoder setVertexBufferOffset:(vertexBufferOffset + pcmd->VtxOffset * sizeof(ImDrawVert)) atIndex:0]; - [commandEncoder drawIndexedPrimitives:MTLPrimitiveTypeTriangle - indexCount:pcmd->ElemCount - indexType:sizeof(ImDrawIdx) == 2 ? MTLIndexTypeUInt16 : MTLIndexTypeUInt32 - indexBuffer:indexBuffer.buffer - indexBufferOffset:indexBufferOffset + pcmd->IdxOffset * sizeof(ImDrawIdx)]; - } - } - } - - vertexBufferOffset += cmd_list->VtxBuffer.Size * sizeof(ImDrawVert); - indexBufferOffset += cmd_list->IdxBuffer.Size * sizeof(ImDrawIdx); - } - - __weak id weakSelf = self; - [commandBuffer addCompletedHandler:^(id) - { - dispatch_async(dispatch_get_main_queue(), ^{ - [weakSelf enqueueReusableBuffer:vertexBuffer]; - [weakSelf enqueueReusableBuffer:indexBuffer]; - }); - }]; -} - -@end diff --git a/cmake/imgui/examples/imgui_impl_opengl2.cpp b/cmake/imgui/examples/imgui_impl_opengl2.cpp deleted file mode 100644 index b062697b..00000000 --- a/cmake/imgui/examples/imgui_impl_opengl2.cpp +++ /dev/null @@ -1,248 +0,0 @@ -// dear imgui: Renderer for OpenGL2 (legacy OpenGL, fixed pipeline) -// This needs to be used along with a Platform Binding (e.g. GLFW, SDL, Win32, custom..) - -// Implemented features: -// [X] Renderer: User texture binding. Use 'GLuint' OpenGL texture identifier as void*/ImTextureID. Read the FAQ about ImTextureID! - -// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. -// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. -// https://github.com/ocornut/imgui - -// **DO NOT USE THIS CODE IF YOUR CODE/ENGINE IS USING MODERN OPENGL (SHADERS, VBO, VAO, etc.)** -// **Prefer using the code in imgui_impl_opengl3.cpp** -// This code is mostly provided as a reference to learn how ImGui integration works, because it is shorter to read. -// If your code is using GL3+ context or any semi modern OpenGL calls, using this is likely to make everything more -// complicated, will require your code to reset every single OpenGL attributes to their initial state, and might -// confuse your GPU driver. -// The GL2 code is unable to reset attributes or even call e.g. "glUseProgram(0)" because they don't exist in that API. - -// CHANGELOG -// (minor and older changes stripped away, please see git history for details) -// 2020-01-23: OpenGL: Explicitly backup, setup and restore GL_TEXTURE_ENV to increase compatibility with legacy OpenGL applications. -// 2019-04-30: OpenGL: Added support for special ImDrawCallback_ResetRenderState callback to reset render state. -// 2019-02-11: OpenGL: Projecting clipping rectangles correctly using draw_data->FramebufferScale to allow multi-viewports for retina display. -// 2018-11-30: Misc: Setting up io.BackendRendererName so it can be displayed in the About Window. -// 2018-08-03: OpenGL: Disabling/restoring GL_LIGHTING and GL_COLOR_MATERIAL to increase compatibility with legacy OpenGL applications. -// 2018-06-08: Misc: Extracted imgui_impl_opengl2.cpp/.h away from the old combined GLFW/SDL+OpenGL2 examples. -// 2018-06-08: OpenGL: Use draw_data->DisplayPos and draw_data->DisplaySize to setup projection matrix and clipping rectangle. -// 2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_ImplOpenGL2_RenderDrawData() in the .h file so you can call it yourself. -// 2017-09-01: OpenGL: Save and restore current polygon mode. -// 2016-09-10: OpenGL: Uploading font texture as RGBA32 to increase compatibility with users shaders (not ideal). -// 2016-09-05: OpenGL: Fixed save and restore of current scissor rectangle. - -#include "imgui.h" -#include "imgui_impl_opengl2.h" -#if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier -#include // intptr_t -#else -#include // intptr_t -#endif - -// Include OpenGL header (without an OpenGL loader) requires a bit of fiddling -#if defined(_WIN32) && !defined(APIENTRY) -#define APIENTRY __stdcall // It is customary to use APIENTRY for OpenGL function pointer declarations on all platforms. Additionally, the Windows OpenGL header needs APIENTRY. -#endif -#if defined(_WIN32) && !defined(WINGDIAPI) -#define WINGDIAPI __declspec(dllimport) // Some Windows OpenGL headers need this -#endif -#if defined(__APPLE__) -#define GL_SILENCE_DEPRECATION -#include -#else -#include -#endif - -// OpenGL Data -static GLuint g_FontTexture = 0; - -// Functions -bool ImGui_ImplOpenGL2_Init() -{ - // Setup back-end capabilities flags - ImGuiIO& io = ImGui::GetIO(); - io.BackendRendererName = "imgui_impl_opengl2"; - return true; -} - -void ImGui_ImplOpenGL2_Shutdown() -{ - ImGui_ImplOpenGL2_DestroyDeviceObjects(); -} - -void ImGui_ImplOpenGL2_NewFrame() -{ - if (!g_FontTexture) - ImGui_ImplOpenGL2_CreateDeviceObjects(); -} - -static void ImGui_ImplOpenGL2_SetupRenderState(ImDrawData* draw_data, int fb_width, int fb_height) -{ - // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, vertex/texcoord/color pointers, polygon fill. - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glDisable(GL_CULL_FACE); - glDisable(GL_DEPTH_TEST); - glDisable(GL_LIGHTING); - glDisable(GL_COLOR_MATERIAL); - glEnable(GL_SCISSOR_TEST); - glEnableClientState(GL_VERTEX_ARRAY); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - glEnableClientState(GL_COLOR_ARRAY); - glEnable(GL_TEXTURE_2D); - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - - // If you are using this code with non-legacy OpenGL header/contexts (which you should not, prefer using imgui_impl_opengl3.cpp!!), - // you may need to backup/reset/restore current shader using the lines below. DO NOT MODIFY THIS FILE! Add the code in your calling function: - // GLint last_program; - // glGetIntegerv(GL_CURRENT_PROGRAM, &last_program); - // glUseProgram(0); - // ImGui_ImplOpenGL2_RenderDrawData(...); - // glUseProgram(last_program) - - // Setup viewport, orthographic projection matrix - // Our visible imgui space lies from draw_data->DisplayPos (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayPos is (0,0) for single viewport apps. - glViewport(0, 0, (GLsizei)fb_width, (GLsizei)fb_height); - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - glOrtho(draw_data->DisplayPos.x, draw_data->DisplayPos.x + draw_data->DisplaySize.x, draw_data->DisplayPos.y + draw_data->DisplaySize.y, draw_data->DisplayPos.y, -1.0f, +1.0f); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); -} - -// OpenGL2 Render function. -// (this used to be set in io.RenderDrawListsFn and called by ImGui::Render(), but you can now call this directly from your main loop) -// Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. -void ImGui_ImplOpenGL2_RenderDrawData(ImDrawData* draw_data) -{ - // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) - int fb_width = (int)(draw_data->DisplaySize.x * draw_data->FramebufferScale.x); - int fb_height = (int)(draw_data->DisplaySize.y * draw_data->FramebufferScale.y); - if (fb_width == 0 || fb_height == 0) - return; - - // Backup GL state - GLint last_texture; glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture); - GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode); - GLint last_viewport[4]; glGetIntegerv(GL_VIEWPORT, last_viewport); - GLint last_scissor_box[4]; glGetIntegerv(GL_SCISSOR_BOX, last_scissor_box); - GLint last_tex_env_mode; glGetTexEnviv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, &last_tex_env_mode); - glPushAttrib(GL_ENABLE_BIT | GL_COLOR_BUFFER_BIT | GL_TRANSFORM_BIT); - - // Setup desired GL state - ImGui_ImplOpenGL2_SetupRenderState(draw_data, fb_width, fb_height); - - // Will project scissor/clipping rectangles into framebuffer space - ImVec2 clip_off = draw_data->DisplayPos; // (0,0) unless using multi-viewports - ImVec2 clip_scale = draw_data->FramebufferScale; // (1,1) unless using retina display which are often (2,2) - - // Render command lists - for (int n = 0; n < draw_data->CmdListsCount; n++) - { - const ImDrawList* cmd_list = draw_data->CmdLists[n]; - const ImDrawVert* vtx_buffer = cmd_list->VtxBuffer.Data; - const ImDrawIdx* idx_buffer = cmd_list->IdxBuffer.Data; - glVertexPointer(2, GL_FLOAT, sizeof(ImDrawVert), (const GLvoid*)((const char*)vtx_buffer + IM_OFFSETOF(ImDrawVert, pos))); - glTexCoordPointer(2, GL_FLOAT, sizeof(ImDrawVert), (const GLvoid*)((const char*)vtx_buffer + IM_OFFSETOF(ImDrawVert, uv))); - glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(ImDrawVert), (const GLvoid*)((const char*)vtx_buffer + IM_OFFSETOF(ImDrawVert, col))); - - for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++) - { - const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i]; - if (pcmd->UserCallback) - { - // User callback, registered via ImDrawList::AddCallback() - // (ImDrawCallback_ResetRenderState is a special callback value used by the user to request the renderer to reset render state.) - if (pcmd->UserCallback == ImDrawCallback_ResetRenderState) - ImGui_ImplOpenGL2_SetupRenderState(draw_data, fb_width, fb_height); - else - pcmd->UserCallback(cmd_list, pcmd); - } - else - { - // Project scissor/clipping rectangles into framebuffer space - ImVec4 clip_rect; - clip_rect.x = (pcmd->ClipRect.x - clip_off.x) * clip_scale.x; - clip_rect.y = (pcmd->ClipRect.y - clip_off.y) * clip_scale.y; - clip_rect.z = (pcmd->ClipRect.z - clip_off.x) * clip_scale.x; - clip_rect.w = (pcmd->ClipRect.w - clip_off.y) * clip_scale.y; - - if (clip_rect.x < fb_width && clip_rect.y < fb_height && clip_rect.z >= 0.0f && clip_rect.w >= 0.0f) - { - // Apply scissor/clipping rectangle - glScissor((int)clip_rect.x, (int)(fb_height - clip_rect.w), (int)(clip_rect.z - clip_rect.x), (int)(clip_rect.w - clip_rect.y)); - - // Bind texture, Draw - glBindTexture(GL_TEXTURE_2D, (GLuint)(intptr_t)pcmd->TextureId); - glDrawElements(GL_TRIANGLES, (GLsizei)pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, idx_buffer); - } - } - idx_buffer += pcmd->ElemCount; - } - } - - // Restore modified GL state - glDisableClientState(GL_COLOR_ARRAY); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - glDisableClientState(GL_VERTEX_ARRAY); - glBindTexture(GL_TEXTURE_2D, (GLuint)last_texture); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glPopAttrib(); - glPolygonMode(GL_FRONT, (GLenum)last_polygon_mode[0]); glPolygonMode(GL_BACK, (GLenum)last_polygon_mode[1]); - glViewport(last_viewport[0], last_viewport[1], (GLsizei)last_viewport[2], (GLsizei)last_viewport[3]); - glScissor(last_scissor_box[0], last_scissor_box[1], (GLsizei)last_scissor_box[2], (GLsizei)last_scissor_box[3]); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, last_tex_env_mode); -} - -bool ImGui_ImplOpenGL2_CreateFontsTexture() -{ - // Build texture atlas - ImGuiIO& io = ImGui::GetIO(); - unsigned char* pixels; - int width, height; - io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); // Load as RGBA 32-bit (75% of the memory is wasted, but default font is so small) because it is more likely to be compatible with user's existing shaders. If your ImTextureId represent a higher-level concept than just a GL texture id, consider calling GetTexDataAsAlpha8() instead to save on GPU memory. - - // Upload texture to graphics system - GLint last_texture; - glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture); - glGenTextures(1, &g_FontTexture); - glBindTexture(GL_TEXTURE_2D, g_FontTexture); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels); - - // Store our identifier - io.Fonts->TexID = (ImTextureID)(intptr_t)g_FontTexture; - - // Restore state - glBindTexture(GL_TEXTURE_2D, last_texture); - - return true; -} - -void ImGui_ImplOpenGL2_DestroyFontsTexture() -{ - if (g_FontTexture) - { - ImGuiIO& io = ImGui::GetIO(); - glDeleteTextures(1, &g_FontTexture); - io.Fonts->TexID = 0; - g_FontTexture = 0; - } -} - -bool ImGui_ImplOpenGL2_CreateDeviceObjects() -{ - return ImGui_ImplOpenGL2_CreateFontsTexture(); -} - -void ImGui_ImplOpenGL2_DestroyDeviceObjects() -{ - ImGui_ImplOpenGL2_DestroyFontsTexture(); -} diff --git a/cmake/imgui/examples/imgui_impl_opengl2.h b/cmake/imgui/examples/imgui_impl_opengl2.h deleted file mode 100644 index 009052d7..00000000 --- a/cmake/imgui/examples/imgui_impl_opengl2.h +++ /dev/null @@ -1,30 +0,0 @@ -// dear imgui: Renderer for OpenGL2 (legacy OpenGL, fixed pipeline) -// This needs to be used along with a Platform Binding (e.g. GLFW, SDL, Win32, custom..) - -// Implemented features: -// [X] Renderer: User texture binding. Use 'GLuint' OpenGL texture identifier as void*/ImTextureID. Read the FAQ about ImTextureID! - -// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. -// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. -// https://github.com/ocornut/imgui - -// **DO NOT USE THIS CODE IF YOUR CODE/ENGINE IS USING MODERN OPENGL (SHADERS, VBO, VAO, etc.)** -// **Prefer using the code in imgui_impl_opengl3.cpp** -// This code is mostly provided as a reference to learn how ImGui integration works, because it is shorter to read. -// If your code is using GL3+ context or any semi modern OpenGL calls, using this is likely to make everything more -// complicated, will require your code to reset every single OpenGL attributes to their initial state, and might -// confuse your GPU driver. -// The GL2 code is unable to reset attributes or even call e.g. "glUseProgram(0)" because they don't exist in that API. - -#pragma once - -IMGUI_IMPL_API bool ImGui_ImplOpenGL2_Init(); -IMGUI_IMPL_API void ImGui_ImplOpenGL2_Shutdown(); -IMGUI_IMPL_API void ImGui_ImplOpenGL2_NewFrame(); -IMGUI_IMPL_API void ImGui_ImplOpenGL2_RenderDrawData(ImDrawData* draw_data); - -// Called by Init/NewFrame/Shutdown -IMGUI_IMPL_API bool ImGui_ImplOpenGL2_CreateFontsTexture(); -IMGUI_IMPL_API void ImGui_ImplOpenGL2_DestroyFontsTexture(); -IMGUI_IMPL_API bool ImGui_ImplOpenGL2_CreateDeviceObjects(); -IMGUI_IMPL_API void ImGui_ImplOpenGL2_DestroyDeviceObjects(); diff --git a/cmake/imgui/examples/imgui_impl_opengl3.cpp b/cmake/imgui/examples/imgui_impl_opengl3.cpp deleted file mode 100644 index 2f908f46..00000000 --- a/cmake/imgui/examples/imgui_impl_opengl3.cpp +++ /dev/null @@ -1,687 +0,0 @@ -// dear imgui: Renderer for modern OpenGL with shaders / programmatic pipeline -// - Desktop GL: 2.x 3.x 4.x -// - Embedded GL: ES 2.0 (WebGL 1.0), ES 3.0 (WebGL 2.0) -// This needs to be used along with a Platform Binding (e.g. GLFW, SDL, Win32, custom..) - -// Implemented features: -// [X] Renderer: User texture binding. Use 'GLuint' OpenGL texture identifier as void*/ImTextureID. Read the FAQ about ImTextureID! -// [x] Renderer: Desktop GL only: Support for large meshes (64k+ vertices) with 16-bit indices. - -// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. -// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. -// https://github.com/ocornut/imgui - -// CHANGELOG -// (minor and older changes stripped away, please see git history for details) -// 2020-03-24: OpenGL: Added support for glbinding 2.x OpenGL loader. -// 2020-01-07: OpenGL: Added support for glbinding 3.x OpenGL loader. -// 2019-10-25: OpenGL: Using a combination of GL define and runtime GL version to decide whether to use glDrawElementsBaseVertex(). Fix building with pre-3.2 GL loaders. -// 2019-09-22: OpenGL: Detect default GL loader using __has_include compiler facility. -// 2019-09-16: OpenGL: Tweak initialization code to allow application calling ImGui_ImplOpenGL3_CreateFontsTexture() before the first NewFrame() call. -// 2019-05-29: OpenGL: Desktop GL only: Added support for large mesh (64K+ vertices), enable ImGuiBackendFlags_RendererHasVtxOffset flag. -// 2019-04-30: OpenGL: Added support for special ImDrawCallback_ResetRenderState callback to reset render state. -// 2019-03-29: OpenGL: Not calling glBindBuffer more than necessary in the render loop. -// 2019-03-15: OpenGL: Added a dummy GL call + comments in ImGui_ImplOpenGL3_Init() to detect uninitialized GL function loaders early. -// 2019-03-03: OpenGL: Fix support for ES 2.0 (WebGL 1.0). -// 2019-02-20: OpenGL: Fix for OSX not supporting OpenGL 4.5, we don't try to read GL_CLIP_ORIGIN even if defined by the headers/loader. -// 2019-02-11: OpenGL: Projecting clipping rectangles correctly using draw_data->FramebufferScale to allow multi-viewports for retina display. -// 2019-02-01: OpenGL: Using GLSL 410 shaders for any version over 410 (e.g. 430, 450). -// 2018-11-30: Misc: Setting up io.BackendRendererName so it can be displayed in the About Window. -// 2018-11-13: OpenGL: Support for GL 4.5's glClipControl(GL_UPPER_LEFT) / GL_CLIP_ORIGIN. -// 2018-08-29: OpenGL: Added support for more OpenGL loaders: glew and glad, with comments indicative that any loader can be used. -// 2018-08-09: OpenGL: Default to OpenGL ES 3 on iOS and Android. GLSL version default to "#version 300 ES". -// 2018-07-30: OpenGL: Support for GLSL 300 ES and 410 core. Fixes for Emscripten compilation. -// 2018-07-10: OpenGL: Support for more GLSL versions (based on the GLSL version string). Added error output when shaders fail to compile/link. -// 2018-06-08: Misc: Extracted imgui_impl_opengl3.cpp/.h away from the old combined GLFW/SDL+OpenGL3 examples. -// 2018-06-08: OpenGL: Use draw_data->DisplayPos and draw_data->DisplaySize to setup projection matrix and clipping rectangle. -// 2018-05-25: OpenGL: Removed unnecessary backup/restore of GL_ELEMENT_ARRAY_BUFFER_BINDING since this is part of the VAO state. -// 2018-05-14: OpenGL: Making the call to glBindSampler() optional so 3.2 context won't fail if the function is a NULL pointer. -// 2018-03-06: OpenGL: Added const char* glsl_version parameter to ImGui_ImplOpenGL3_Init() so user can override the GLSL version e.g. "#version 150". -// 2018-02-23: OpenGL: Create the VAO in the render function so the setup can more easily be used with multiple shared GL context. -// 2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_ImplSdlGL3_RenderDrawData() in the .h file so you can call it yourself. -// 2018-01-07: OpenGL: Changed GLSL shader version from 330 to 150. -// 2017-09-01: OpenGL: Save and restore current bound sampler. Save and restore current polygon mode. -// 2017-05-01: OpenGL: Fixed save and restore of current blend func state. -// 2017-05-01: OpenGL: Fixed save and restore of current GL_ACTIVE_TEXTURE. -// 2016-09-05: OpenGL: Fixed save and restore of current scissor rectangle. -// 2016-07-29: OpenGL: Explicitly setting GL_UNPACK_ROW_LENGTH to reduce issues because SDL changes it. (#752) - -//---------------------------------------- -// OpenGL GLSL GLSL -// version version string -//---------------------------------------- -// 2.0 110 "#version 110" -// 2.1 120 "#version 120" -// 3.0 130 "#version 130" -// 3.1 140 "#version 140" -// 3.2 150 "#version 150" -// 3.3 330 "#version 330 core" -// 4.0 400 "#version 400 core" -// 4.1 410 "#version 410 core" -// 4.2 420 "#version 410 core" -// 4.3 430 "#version 430 core" -// ES 2.0 100 "#version 100" = WebGL 1.0 -// ES 3.0 300 "#version 300 es" = WebGL 2.0 -//---------------------------------------- - -#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) -#define _CRT_SECURE_NO_WARNINGS -#endif - -#include "imgui.h" -#include "imgui_impl_opengl3.h" -#include -#if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier -#include // intptr_t -#else -#include // intptr_t -#endif -#if defined(__APPLE__) -#include "TargetConditionals.h" -#endif - -// Auto-enable GLES on matching platforms -#if !defined(IMGUI_IMPL_OPENGL_ES2) && !defined(IMGUI_IMPL_OPENGL_ES3) -#if (defined(__APPLE__) && (TARGET_OS_IOS || TARGET_OS_TV)) || (defined(__ANDROID__)) -#define IMGUI_IMPL_OPENGL_ES3 // iOS, Android -> GL ES 3, "#version 300 es" -#elif defined(__EMSCRIPTEN__) -#define IMGUI_IMPL_OPENGL_ES2 // Emscripten -> GL ES 2, "#version 100" -#endif -#endif - -#if defined(IMGUI_IMPL_OPENGL_ES2) || defined(IMGUI_IMPL_OPENGL_ES3) -#undef IMGUI_IMPL_OPENGL_LOADER_GL3W -#undef IMGUI_IMPL_OPENGL_LOADER_GLEW -#undef IMGUI_IMPL_OPENGL_LOADER_GLAD -#undef IMGUI_IMPL_OPENGL_LOADER_GLBINDING2 -#undef IMGUI_IMPL_OPENGL_LOADER_GLBINDING3 -#undef IMGUI_IMPL_OPENGL_LOADER_CUSTOM -#endif - -// GL includes -#if defined(IMGUI_IMPL_OPENGL_ES2) -#include -#elif defined(IMGUI_IMPL_OPENGL_ES3) -#if (defined(__APPLE__) && (TARGET_OS_IOS || TARGET_OS_TV)) -#include // Use GL ES 3 -#else -#include // Use GL ES 3 -#endif -#else -// About Desktop OpenGL function loaders: -// Modern desktop OpenGL doesn't have a standard portable header file to load OpenGL function pointers. -// Helper libraries are often used for this purpose! Here we are supporting a few common ones (gl3w, glew, glad). -// You may use another loader/header of your choice (glext, glLoadGen, etc.), or chose to manually implement your own. -#if defined(IMGUI_IMPL_OPENGL_LOADER_GL3W) -#include // Needs to be initialized with gl3wInit() in user's code -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLEW) -#include // Needs to be initialized with glewInit() in user's code. -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLAD) -#include // Needs to be initialized with gladLoadGL() in user's code. -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING2) -#define GLFW_INCLUDE_NONE // GLFW including OpenGL headers causes ambiguity or multiple definition errors. -#include // Needs to be initialized with glbinding::Binding::initialize() in user's code. -#include -using namespace gl; -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING3) -#define GLFW_INCLUDE_NONE // GLFW including OpenGL headers causes ambiguity or multiple definition errors. -#include // Needs to be initialized with glbinding::initialize() in user's code. -#include -using namespace gl; -#else -#include IMGUI_IMPL_OPENGL_LOADER_CUSTOM -#endif -#endif - -// Desktop GL 3.2+ has glDrawElementsBaseVertex() which GL ES and WebGL don't have. -#if defined(IMGUI_IMPL_OPENGL_ES2) || defined(IMGUI_IMPL_OPENGL_ES3) || !defined(GL_VERSION_3_2) -#define IMGUI_IMPL_OPENGL_MAY_HAVE_VTX_OFFSET 0 -#else -#define IMGUI_IMPL_OPENGL_MAY_HAVE_VTX_OFFSET 1 -#endif - -// OpenGL Data -static GLuint g_GlVersion = 0; // Extracted at runtime using GL_MAJOR_VERSION, GL_MINOR_VERSION queries. -static char g_GlslVersionString[32] = ""; // Specified by user or detected based on compile time GL settings. -static GLuint g_FontTexture = 0; -static GLuint g_ShaderHandle = 0, g_VertHandle = 0, g_FragHandle = 0; -static int g_AttribLocationTex = 0, g_AttribLocationProjMtx = 0; // Uniforms location -static int g_AttribLocationVtxPos = 0, g_AttribLocationVtxUV = 0, g_AttribLocationVtxColor = 0; // Vertex attributes location -static unsigned int g_VboHandle = 0, g_ElementsHandle = 0; - -// Functions -bool ImGui_ImplOpenGL3_Init(const char* glsl_version) -{ - // Query for GL version -#if !defined(IMGUI_IMPL_OPENGL_ES2) - GLint major, minor; - glGetIntegerv(GL_MAJOR_VERSION, &major); - glGetIntegerv(GL_MINOR_VERSION, &minor); - g_GlVersion = major * 1000 + minor; -#else - g_GlVersion = 2000; // GLES 2 -#endif - - // Setup back-end capabilities flags - ImGuiIO& io = ImGui::GetIO(); - io.BackendRendererName = "imgui_impl_opengl3"; -#if IMGUI_IMPL_OPENGL_MAY_HAVE_VTX_OFFSET - if (g_GlVersion >= 3200) - io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset; // We can honor the ImDrawCmd::VtxOffset field, allowing for large meshes. -#endif - - // Store GLSL version string so we can refer to it later in case we recreate shaders. - // Note: GLSL version is NOT the same as GL version. Leave this to NULL if unsure. -#if defined(IMGUI_IMPL_OPENGL_ES2) - if (glsl_version == NULL) - glsl_version = "#version 100"; -#elif defined(IMGUI_IMPL_OPENGL_ES3) - if (glsl_version == NULL) - glsl_version = "#version 300 es"; -#else - if (glsl_version == NULL) - glsl_version = "#version 130"; -#endif - IM_ASSERT((int)strlen(glsl_version) + 2 < IM_ARRAYSIZE(g_GlslVersionString)); - strcpy(g_GlslVersionString, glsl_version); - strcat(g_GlslVersionString, "\n"); - - // Dummy construct to make it easily visible in the IDE and debugger which GL loader has been selected. - // The code actually never uses the 'gl_loader' variable! It is only here so you can read it! - // If auto-detection fails or doesn't select the same GL loader file as used by your application, - // you are likely to get a crash below. - // You can explicitly select a loader by using '#define IMGUI_IMPL_OPENGL_LOADER_XXX' in imconfig.h or compiler command-line. - const char* gl_loader = "Unknown"; - IM_UNUSED(gl_loader); -#if defined(IMGUI_IMPL_OPENGL_LOADER_GL3W) - gl_loader = "GL3W"; -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLEW) - gl_loader = "GLEW"; -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLAD) - gl_loader = "GLAD"; -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING2) - gl_loader = "glbinding2"; -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING3) - gl_loader = "glbinding3"; -#elif defined(IMGUI_IMPL_OPENGL_LOADER_CUSTOM) - gl_loader = "custom"; -#else - gl_loader = "none"; -#endif - - // Make a dummy GL call (we don't actually need the result) - // IF YOU GET A CRASH HERE: it probably means that you haven't initialized the OpenGL function loader used by this code. - // Desktop OpenGL 3/4 need a function loader. See the IMGUI_IMPL_OPENGL_LOADER_xxx explanation above. - GLint current_texture; - glGetIntegerv(GL_TEXTURE_BINDING_2D, ¤t_texture); - - return true; -} - -void ImGui_ImplOpenGL3_Shutdown() -{ - ImGui_ImplOpenGL3_DestroyDeviceObjects(); -} - -void ImGui_ImplOpenGL3_NewFrame() -{ - if (!g_ShaderHandle) - ImGui_ImplOpenGL3_CreateDeviceObjects(); -} - -static void ImGui_ImplOpenGL3_SetupRenderState(ImDrawData* draw_data, int fb_width, int fb_height, GLuint vertex_array_object) -{ - // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, polygon fill - glEnable(GL_BLEND); - glBlendEquation(GL_FUNC_ADD); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glDisable(GL_CULL_FACE); - glDisable(GL_DEPTH_TEST); - glEnable(GL_SCISSOR_TEST); -#ifdef GL_POLYGON_MODE - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); -#endif - - // Setup viewport, orthographic projection matrix - // Our visible imgui space lies from draw_data->DisplayPos (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayPos is (0,0) for single viewport apps. - glViewport(0, 0, (GLsizei)fb_width, (GLsizei)fb_height); - float L = draw_data->DisplayPos.x; - float R = draw_data->DisplayPos.x + draw_data->DisplaySize.x; - float T = draw_data->DisplayPos.y; - float B = draw_data->DisplayPos.y + draw_data->DisplaySize.y; - const float ortho_projection[4][4] = - { - { 2.0f/(R-L), 0.0f, 0.0f, 0.0f }, - { 0.0f, 2.0f/(T-B), 0.0f, 0.0f }, - { 0.0f, 0.0f, -1.0f, 0.0f }, - { (R+L)/(L-R), (T+B)/(B-T), 0.0f, 1.0f }, - }; - glUseProgram(g_ShaderHandle); - glUniform1i(g_AttribLocationTex, 0); - glUniformMatrix4fv(g_AttribLocationProjMtx, 1, GL_FALSE, &ortho_projection[0][0]); -#ifdef GL_SAMPLER_BINDING - glBindSampler(0, 0); // We use combined texture/sampler state. Applications using GL 3.3 may set that otherwise. -#endif - - (void)vertex_array_object; -#ifndef IMGUI_IMPL_OPENGL_ES2 - glBindVertexArray(vertex_array_object); -#endif - - // Bind vertex/index buffers and setup attributes for ImDrawVert - glBindBuffer(GL_ARRAY_BUFFER, g_VboHandle); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, g_ElementsHandle); - glEnableVertexAttribArray(g_AttribLocationVtxPos); - glEnableVertexAttribArray(g_AttribLocationVtxUV); - glEnableVertexAttribArray(g_AttribLocationVtxColor); - glVertexAttribPointer(g_AttribLocationVtxPos, 2, GL_FLOAT, GL_FALSE, sizeof(ImDrawVert), (GLvoid*)IM_OFFSETOF(ImDrawVert, pos)); - glVertexAttribPointer(g_AttribLocationVtxUV, 2, GL_FLOAT, GL_FALSE, sizeof(ImDrawVert), (GLvoid*)IM_OFFSETOF(ImDrawVert, uv)); - glVertexAttribPointer(g_AttribLocationVtxColor, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ImDrawVert), (GLvoid*)IM_OFFSETOF(ImDrawVert, col)); -} - -// OpenGL3 Render function. -// (this used to be set in io.RenderDrawListsFn and called by ImGui::Render(), but you can now call this directly from your main loop) -// Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. -void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data) -{ - // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) - int fb_width = (int)(draw_data->DisplaySize.x * draw_data->FramebufferScale.x); - int fb_height = (int)(draw_data->DisplaySize.y * draw_data->FramebufferScale.y); - if (fb_width <= 0 || fb_height <= 0) - return; - - // Backup GL state - GLenum last_active_texture; glGetIntegerv(GL_ACTIVE_TEXTURE, (GLint*)&last_active_texture); - glActiveTexture(GL_TEXTURE0); - GLint last_program; glGetIntegerv(GL_CURRENT_PROGRAM, &last_program); - GLint last_texture; glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture); -#ifdef GL_SAMPLER_BINDING - GLint last_sampler; glGetIntegerv(GL_SAMPLER_BINDING, &last_sampler); -#endif - GLint last_array_buffer; glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &last_array_buffer); -#ifndef IMGUI_IMPL_OPENGL_ES2 - GLint last_vertex_array_object; glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &last_vertex_array_object); -#endif -#ifdef GL_POLYGON_MODE - GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode); -#endif - GLint last_viewport[4]; glGetIntegerv(GL_VIEWPORT, last_viewport); - GLint last_scissor_box[4]; glGetIntegerv(GL_SCISSOR_BOX, last_scissor_box); - GLenum last_blend_src_rgb; glGetIntegerv(GL_BLEND_SRC_RGB, (GLint*)&last_blend_src_rgb); - GLenum last_blend_dst_rgb; glGetIntegerv(GL_BLEND_DST_RGB, (GLint*)&last_blend_dst_rgb); - GLenum last_blend_src_alpha; glGetIntegerv(GL_BLEND_SRC_ALPHA, (GLint*)&last_blend_src_alpha); - GLenum last_blend_dst_alpha; glGetIntegerv(GL_BLEND_DST_ALPHA, (GLint*)&last_blend_dst_alpha); - GLenum last_blend_equation_rgb; glGetIntegerv(GL_BLEND_EQUATION_RGB, (GLint*)&last_blend_equation_rgb); - GLenum last_blend_equation_alpha; glGetIntegerv(GL_BLEND_EQUATION_ALPHA, (GLint*)&last_blend_equation_alpha); - GLboolean last_enable_blend = glIsEnabled(GL_BLEND); - GLboolean last_enable_cull_face = glIsEnabled(GL_CULL_FACE); - GLboolean last_enable_depth_test = glIsEnabled(GL_DEPTH_TEST); - GLboolean last_enable_scissor_test = glIsEnabled(GL_SCISSOR_TEST); - bool clip_origin_lower_left = true; -#if defined(GL_CLIP_ORIGIN) && !defined(__APPLE__) - GLenum last_clip_origin = 0; glGetIntegerv(GL_CLIP_ORIGIN, (GLint*)&last_clip_origin); // Support for GL 4.5's glClipControl(GL_UPPER_LEFT) - if (last_clip_origin == GL_UPPER_LEFT) - clip_origin_lower_left = false; -#endif - - // Setup desired GL state - // Recreate the VAO every time (this is to easily allow multiple GL contexts to be rendered to. VAO are not shared among GL contexts) - // The renderer would actually work without any VAO bound, but then our VertexAttrib calls would overwrite the default one currently bound. - GLuint vertex_array_object = 0; -#ifndef IMGUI_IMPL_OPENGL_ES2 - glGenVertexArrays(1, &vertex_array_object); -#endif - ImGui_ImplOpenGL3_SetupRenderState(draw_data, fb_width, fb_height, vertex_array_object); - - // Will project scissor/clipping rectangles into framebuffer space - ImVec2 clip_off = draw_data->DisplayPos; // (0,0) unless using multi-viewports - ImVec2 clip_scale = draw_data->FramebufferScale; // (1,1) unless using retina display which are often (2,2) - - // Render command lists - for (int n = 0; n < draw_data->CmdListsCount; n++) - { - const ImDrawList* cmd_list = draw_data->CmdLists[n]; - - // Upload vertex/index buffers - glBufferData(GL_ARRAY_BUFFER, (GLsizeiptr)cmd_list->VtxBuffer.Size * sizeof(ImDrawVert), (const GLvoid*)cmd_list->VtxBuffer.Data, GL_STREAM_DRAW); - glBufferData(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)cmd_list->IdxBuffer.Size * sizeof(ImDrawIdx), (const GLvoid*)cmd_list->IdxBuffer.Data, GL_STREAM_DRAW); - - for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++) - { - const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i]; - if (pcmd->UserCallback != NULL) - { - // User callback, registered via ImDrawList::AddCallback() - // (ImDrawCallback_ResetRenderState is a special callback value used by the user to request the renderer to reset render state.) - if (pcmd->UserCallback == ImDrawCallback_ResetRenderState) - ImGui_ImplOpenGL3_SetupRenderState(draw_data, fb_width, fb_height, vertex_array_object); - else - pcmd->UserCallback(cmd_list, pcmd); - } - else - { - // Project scissor/clipping rectangles into framebuffer space - ImVec4 clip_rect; - clip_rect.x = (pcmd->ClipRect.x - clip_off.x) * clip_scale.x; - clip_rect.y = (pcmd->ClipRect.y - clip_off.y) * clip_scale.y; - clip_rect.z = (pcmd->ClipRect.z - clip_off.x) * clip_scale.x; - clip_rect.w = (pcmd->ClipRect.w - clip_off.y) * clip_scale.y; - - if (clip_rect.x < fb_width && clip_rect.y < fb_height && clip_rect.z >= 0.0f && clip_rect.w >= 0.0f) - { - // Apply scissor/clipping rectangle - if (clip_origin_lower_left) - glScissor((int)clip_rect.x, (int)(fb_height - clip_rect.w), (int)(clip_rect.z - clip_rect.x), (int)(clip_rect.w - clip_rect.y)); - else - glScissor((int)clip_rect.x, (int)clip_rect.y, (int)clip_rect.z, (int)clip_rect.w); // Support for GL 4.5 rarely used glClipControl(GL_UPPER_LEFT) - - // Bind texture, Draw - glBindTexture(GL_TEXTURE_2D, (GLuint)(intptr_t)pcmd->TextureId); -#if IMGUI_IMPL_OPENGL_MAY_HAVE_VTX_OFFSET - if (g_GlVersion >= 3200) - glDrawElementsBaseVertex(GL_TRIANGLES, (GLsizei)pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, (void*)(intptr_t)(pcmd->IdxOffset * sizeof(ImDrawIdx)), (GLint)pcmd->VtxOffset); - else -#endif - glDrawElements(GL_TRIANGLES, (GLsizei)pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, (void*)(intptr_t)(pcmd->IdxOffset * sizeof(ImDrawIdx))); - } - } - } - } - - // Destroy the temporary VAO -#ifndef IMGUI_IMPL_OPENGL_ES2 - glDeleteVertexArrays(1, &vertex_array_object); -#endif - - // Restore modified GL state - glUseProgram(last_program); - glBindTexture(GL_TEXTURE_2D, last_texture); -#ifdef GL_SAMPLER_BINDING - glBindSampler(0, last_sampler); -#endif - glActiveTexture(last_active_texture); -#ifndef IMGUI_IMPL_OPENGL_ES2 - glBindVertexArray(last_vertex_array_object); -#endif - glBindBuffer(GL_ARRAY_BUFFER, last_array_buffer); - glBlendEquationSeparate(last_blend_equation_rgb, last_blend_equation_alpha); - glBlendFuncSeparate(last_blend_src_rgb, last_blend_dst_rgb, last_blend_src_alpha, last_blend_dst_alpha); - if (last_enable_blend) glEnable(GL_BLEND); else glDisable(GL_BLEND); - if (last_enable_cull_face) glEnable(GL_CULL_FACE); else glDisable(GL_CULL_FACE); - if (last_enable_depth_test) glEnable(GL_DEPTH_TEST); else glDisable(GL_DEPTH_TEST); - if (last_enable_scissor_test) glEnable(GL_SCISSOR_TEST); else glDisable(GL_SCISSOR_TEST); -#ifdef GL_POLYGON_MODE - glPolygonMode(GL_FRONT_AND_BACK, (GLenum)last_polygon_mode[0]); -#endif - glViewport(last_viewport[0], last_viewport[1], (GLsizei)last_viewport[2], (GLsizei)last_viewport[3]); - glScissor(last_scissor_box[0], last_scissor_box[1], (GLsizei)last_scissor_box[2], (GLsizei)last_scissor_box[3]); -} - -bool ImGui_ImplOpenGL3_CreateFontsTexture() -{ - // Build texture atlas - ImGuiIO& io = ImGui::GetIO(); - unsigned char* pixels; - int width, height; - io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); // Load as RGBA 32-bit (75% of the memory is wasted, but default font is so small) because it is more likely to be compatible with user's existing shaders. If your ImTextureId represent a higher-level concept than just a GL texture id, consider calling GetTexDataAsAlpha8() instead to save on GPU memory. - - // Upload texture to graphics system - GLint last_texture; - glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture); - glGenTextures(1, &g_FontTexture); - glBindTexture(GL_TEXTURE_2D, g_FontTexture); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); -#ifdef GL_UNPACK_ROW_LENGTH - glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); -#endif - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels); - - // Store our identifier - io.Fonts->TexID = (ImTextureID)(intptr_t)g_FontTexture; - - // Restore state - glBindTexture(GL_TEXTURE_2D, last_texture); - - return true; -} - -void ImGui_ImplOpenGL3_DestroyFontsTexture() -{ - if (g_FontTexture) - { - ImGuiIO& io = ImGui::GetIO(); - glDeleteTextures(1, &g_FontTexture); - io.Fonts->TexID = 0; - g_FontTexture = 0; - } -} - -// If you get an error please report on github. You may try different GL context version or GLSL version. See GL<>GLSL version table at the top of this file. -static bool CheckShader(GLuint handle, const char* desc) -{ - GLint status = 0, log_length = 0; - glGetShaderiv(handle, GL_COMPILE_STATUS, &status); - glGetShaderiv(handle, GL_INFO_LOG_LENGTH, &log_length); - if ((GLboolean)status == GL_FALSE) - fprintf(stderr, "ERROR: ImGui_ImplOpenGL3_CreateDeviceObjects: failed to compile %s!\n", desc); - if (log_length > 1) - { - ImVector buf; - buf.resize((int)(log_length + 1)); - glGetShaderInfoLog(handle, log_length, NULL, (GLchar*)buf.begin()); - fprintf(stderr, "%s\n", buf.begin()); - } - return (GLboolean)status == GL_TRUE; -} - -// If you get an error please report on GitHub. You may try different GL context version or GLSL version. -static bool CheckProgram(GLuint handle, const char* desc) -{ - GLint status = 0, log_length = 0; - glGetProgramiv(handle, GL_LINK_STATUS, &status); - glGetProgramiv(handle, GL_INFO_LOG_LENGTH, &log_length); - if ((GLboolean)status == GL_FALSE) - fprintf(stderr, "ERROR: ImGui_ImplOpenGL3_CreateDeviceObjects: failed to link %s! (with GLSL '%s')\n", desc, g_GlslVersionString); - if (log_length > 1) - { - ImVector buf; - buf.resize((int)(log_length + 1)); - glGetProgramInfoLog(handle, log_length, NULL, (GLchar*)buf.begin()); - fprintf(stderr, "%s\n", buf.begin()); - } - return (GLboolean)status == GL_TRUE; -} - -bool ImGui_ImplOpenGL3_CreateDeviceObjects() -{ - // Backup GL state - GLint last_texture, last_array_buffer; - glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture); - glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &last_array_buffer); -#ifndef IMGUI_IMPL_OPENGL_ES2 - GLint last_vertex_array; - glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &last_vertex_array); -#endif - - // Parse GLSL version string - int glsl_version = 130; - sscanf(g_GlslVersionString, "#version %d", &glsl_version); - - const GLchar* vertex_shader_glsl_120 = - "uniform mat4 ProjMtx;\n" - "attribute vec2 Position;\n" - "attribute vec2 UV;\n" - "attribute vec4 Color;\n" - "varying vec2 Frag_UV;\n" - "varying vec4 Frag_Color;\n" - "void main()\n" - "{\n" - " Frag_UV = UV;\n" - " Frag_Color = Color;\n" - " gl_Position = ProjMtx * vec4(Position.xy,0,1);\n" - "}\n"; - - const GLchar* vertex_shader_glsl_130 = - "uniform mat4 ProjMtx;\n" - "in vec2 Position;\n" - "in vec2 UV;\n" - "in vec4 Color;\n" - "out vec2 Frag_UV;\n" - "out vec4 Frag_Color;\n" - "void main()\n" - "{\n" - " Frag_UV = UV;\n" - " Frag_Color = Color;\n" - " gl_Position = ProjMtx * vec4(Position.xy,0,1);\n" - "}\n"; - - const GLchar* vertex_shader_glsl_300_es = - "precision mediump float;\n" - "layout (location = 0) in vec2 Position;\n" - "layout (location = 1) in vec2 UV;\n" - "layout (location = 2) in vec4 Color;\n" - "uniform mat4 ProjMtx;\n" - "out vec2 Frag_UV;\n" - "out vec4 Frag_Color;\n" - "void main()\n" - "{\n" - " Frag_UV = UV;\n" - " Frag_Color = Color;\n" - " gl_Position = ProjMtx * vec4(Position.xy,0,1);\n" - "}\n"; - - const GLchar* vertex_shader_glsl_410_core = - "layout (location = 0) in vec2 Position;\n" - "layout (location = 1) in vec2 UV;\n" - "layout (location = 2) in vec4 Color;\n" - "uniform mat4 ProjMtx;\n" - "out vec2 Frag_UV;\n" - "out vec4 Frag_Color;\n" - "void main()\n" - "{\n" - " Frag_UV = UV;\n" - " Frag_Color = Color;\n" - " gl_Position = ProjMtx * vec4(Position.xy,0,1);\n" - "}\n"; - - const GLchar* fragment_shader_glsl_120 = - "#ifdef GL_ES\n" - " precision mediump float;\n" - "#endif\n" - "uniform sampler2D Texture;\n" - "varying vec2 Frag_UV;\n" - "varying vec4 Frag_Color;\n" - "void main()\n" - "{\n" - " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV.st);\n" - "}\n"; - - const GLchar* fragment_shader_glsl_130 = - "uniform sampler2D Texture;\n" - "in vec2 Frag_UV;\n" - "in vec4 Frag_Color;\n" - "out vec4 Out_Color;\n" - "void main()\n" - "{\n" - " Out_Color = Frag_Color * texture(Texture, Frag_UV.st);\n" - "}\n"; - - const GLchar* fragment_shader_glsl_300_es = - "precision mediump float;\n" - "uniform sampler2D Texture;\n" - "in vec2 Frag_UV;\n" - "in vec4 Frag_Color;\n" - "layout (location = 0) out vec4 Out_Color;\n" - "void main()\n" - "{\n" - " Out_Color = Frag_Color * texture(Texture, Frag_UV.st);\n" - "}\n"; - - const GLchar* fragment_shader_glsl_410_core = - "in vec2 Frag_UV;\n" - "in vec4 Frag_Color;\n" - "uniform sampler2D Texture;\n" - "layout (location = 0) out vec4 Out_Color;\n" - "void main()\n" - "{\n" - " Out_Color = Frag_Color * texture(Texture, Frag_UV.st);\n" - "}\n"; - - // Select shaders matching our GLSL versions - const GLchar* vertex_shader = NULL; - const GLchar* fragment_shader = NULL; - if (glsl_version < 130) - { - vertex_shader = vertex_shader_glsl_120; - fragment_shader = fragment_shader_glsl_120; - } - else if (glsl_version >= 410) - { - vertex_shader = vertex_shader_glsl_410_core; - fragment_shader = fragment_shader_glsl_410_core; - } - else if (glsl_version == 300) - { - vertex_shader = vertex_shader_glsl_300_es; - fragment_shader = fragment_shader_glsl_300_es; - } - else - { - vertex_shader = vertex_shader_glsl_130; - fragment_shader = fragment_shader_glsl_130; - } - - // Create shaders - const GLchar* vertex_shader_with_version[2] = { g_GlslVersionString, vertex_shader }; - g_VertHandle = glCreateShader(GL_VERTEX_SHADER); - glShaderSource(g_VertHandle, 2, vertex_shader_with_version, NULL); - glCompileShader(g_VertHandle); - CheckShader(g_VertHandle, "vertex shader"); - - const GLchar* fragment_shader_with_version[2] = { g_GlslVersionString, fragment_shader }; - g_FragHandle = glCreateShader(GL_FRAGMENT_SHADER); - glShaderSource(g_FragHandle, 2, fragment_shader_with_version, NULL); - glCompileShader(g_FragHandle); - CheckShader(g_FragHandle, "fragment shader"); - - g_ShaderHandle = glCreateProgram(); - glAttachShader(g_ShaderHandle, g_VertHandle); - glAttachShader(g_ShaderHandle, g_FragHandle); - glLinkProgram(g_ShaderHandle); - CheckProgram(g_ShaderHandle, "shader program"); - - g_AttribLocationTex = glGetUniformLocation(g_ShaderHandle, "Texture"); - g_AttribLocationProjMtx = glGetUniformLocation(g_ShaderHandle, "ProjMtx"); - g_AttribLocationVtxPos = glGetAttribLocation(g_ShaderHandle, "Position"); - g_AttribLocationVtxUV = glGetAttribLocation(g_ShaderHandle, "UV"); - g_AttribLocationVtxColor = glGetAttribLocation(g_ShaderHandle, "Color"); - - // Create buffers - glGenBuffers(1, &g_VboHandle); - glGenBuffers(1, &g_ElementsHandle); - - ImGui_ImplOpenGL3_CreateFontsTexture(); - - // Restore modified GL state - glBindTexture(GL_TEXTURE_2D, last_texture); - glBindBuffer(GL_ARRAY_BUFFER, last_array_buffer); -#ifndef IMGUI_IMPL_OPENGL_ES2 - glBindVertexArray(last_vertex_array); -#endif - - return true; -} - -void ImGui_ImplOpenGL3_DestroyDeviceObjects() -{ - if (g_VboHandle) { glDeleteBuffers(1, &g_VboHandle); g_VboHandle = 0; } - if (g_ElementsHandle) { glDeleteBuffers(1, &g_ElementsHandle); g_ElementsHandle = 0; } - if (g_ShaderHandle && g_VertHandle) { glDetachShader(g_ShaderHandle, g_VertHandle); } - if (g_ShaderHandle && g_FragHandle) { glDetachShader(g_ShaderHandle, g_FragHandle); } - if (g_VertHandle) { glDeleteShader(g_VertHandle); g_VertHandle = 0; } - if (g_FragHandle) { glDeleteShader(g_FragHandle); g_FragHandle = 0; } - if (g_ShaderHandle) { glDeleteProgram(g_ShaderHandle); g_ShaderHandle = 0; } - - ImGui_ImplOpenGL3_DestroyFontsTexture(); -} diff --git a/cmake/imgui/examples/imgui_impl_opengl3.h b/cmake/imgui/examples/imgui_impl_opengl3.h deleted file mode 100644 index a9a1e199..00000000 --- a/cmake/imgui/examples/imgui_impl_opengl3.h +++ /dev/null @@ -1,70 +0,0 @@ -// dear imgui: Renderer for modern OpenGL with shaders / programmatic pipeline -// - Desktop GL: 2.x 3.x 4.x -// - Embedded GL: ES 2.0 (WebGL 1.0), ES 3.0 (WebGL 2.0) -// This needs to be used along with a Platform Binding (e.g. GLFW, SDL, Win32, custom..) - -// Implemented features: -// [X] Renderer: User texture binding. Use 'GLuint' OpenGL texture identifier as void*/ImTextureID. Read the FAQ about ImTextureID! -// [x] Renderer: Desktop GL only: Support for large meshes (64k+ vertices) with 16-bit indices. - -// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. -// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. -// https://github.com/ocornut/imgui - -// About Desktop OpenGL function loaders: -// Modern desktop OpenGL doesn't have a standard portable header file to load OpenGL function pointers. -// Helper libraries are often used for this purpose! Here we are supporting a few common ones (gl3w, glew, glad). -// You may use another loader/header of your choice (glext, glLoadGen, etc.), or chose to manually implement your own. - -// About GLSL version: -// The 'glsl_version' initialization parameter should be NULL (default) or a "#version XXX" string. -// On computer platform the GLSL version default to "#version 130". On OpenGL ES 3 platform it defaults to "#version 300 es" -// Only override if your GL version doesn't handle this GLSL version. See GLSL version table at the top of imgui_impl_opengl3.cpp. - -#pragma once - -// Backend API -IMGUI_IMPL_API bool ImGui_ImplOpenGL3_Init(const char* glsl_version = NULL); -IMGUI_IMPL_API void ImGui_ImplOpenGL3_Shutdown(); -IMGUI_IMPL_API void ImGui_ImplOpenGL3_NewFrame(); -IMGUI_IMPL_API void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data); - -// (Optional) Called by Init/NewFrame/Shutdown -IMGUI_IMPL_API bool ImGui_ImplOpenGL3_CreateFontsTexture(); -IMGUI_IMPL_API void ImGui_ImplOpenGL3_DestroyFontsTexture(); -IMGUI_IMPL_API bool ImGui_ImplOpenGL3_CreateDeviceObjects(); -IMGUI_IMPL_API void ImGui_ImplOpenGL3_DestroyDeviceObjects(); - -// Specific OpenGL versions -//#define IMGUI_IMPL_OPENGL_ES2 // Auto-detected on Emscripten -//#define IMGUI_IMPL_OPENGL_ES3 // Auto-detected on iOS/Android - -// Desktop OpenGL: attempt to detect default GL loader based on available header files. -// If auto-detection fails or doesn't select the same GL loader file as used by your application, -// you are likely to get a crash in ImGui_ImplOpenGL3_Init(). -// You can explicitly select a loader by using '#define IMGUI_IMPL_OPENGL_LOADER_XXX' in imconfig.h or compiler command-line. -#if !defined(IMGUI_IMPL_OPENGL_LOADER_GL3W) \ - && !defined(IMGUI_IMPL_OPENGL_LOADER_GLEW) \ - && !defined(IMGUI_IMPL_OPENGL_LOADER_GLAD) \ - && !defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING2) \ - && !defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING3) \ - && !defined(IMGUI_IMPL_OPENGL_LOADER_CUSTOM) - #if defined(__has_include) - #if __has_include() - #define IMGUI_IMPL_OPENGL_LOADER_GLEW - #elif __has_include() - #define IMGUI_IMPL_OPENGL_LOADER_GLAD - #elif __has_include() - #define IMGUI_IMPL_OPENGL_LOADER_GL3W - #elif __has_include() - #define IMGUI_IMPL_OPENGL_LOADER_GLBINDING3 - #elif __has_include() - #define IMGUI_IMPL_OPENGL_LOADER_GLBINDING2 - #else - #error "Cannot detect OpenGL loader!" - #endif - #else - #define IMGUI_IMPL_OPENGL_LOADER_GL3W // Default to GL3W - #endif -#endif - diff --git a/cmake/imgui/examples/imgui_impl_osx.h b/cmake/imgui/examples/imgui_impl_osx.h deleted file mode 100644 index fe066eec..00000000 --- a/cmake/imgui/examples/imgui_impl_osx.h +++ /dev/null @@ -1,17 +0,0 @@ -// dear imgui: Platform Binding for OSX / Cocoa -// This needs to be used along with a Renderer (e.g. OpenGL2, OpenGL3, Vulkan, Metal..) -// [ALPHA] Early bindings, not well tested. If you want a portable application, prefer using the GLFW or SDL platform bindings on Mac. - -// Implemented features: -// [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'. -// [X] Platform: OSX clipboard is supported within core Dear ImGui (no specific code in this back-end). -// Issues: -// [ ] Platform: Keys are all generally very broken. Best using [event keycode] and not [event characters].. - -@class NSEvent; -@class NSView; - -IMGUI_API bool ImGui_ImplOSX_Init(); -IMGUI_API void ImGui_ImplOSX_Shutdown(); -IMGUI_API void ImGui_ImplOSX_NewFrame(NSView *_Nullable view); -IMGUI_API bool ImGui_ImplOSX_HandleEvent(NSEvent *_Nonnull event, NSView *_Nullable view); diff --git a/cmake/imgui/examples/imgui_impl_osx.mm b/cmake/imgui/examples/imgui_impl_osx.mm deleted file mode 100644 index 54b23d07..00000000 --- a/cmake/imgui/examples/imgui_impl_osx.mm +++ /dev/null @@ -1,307 +0,0 @@ -// dear imgui: Platform Binding for OSX / Cocoa -// This needs to be used along with a Renderer (e.g. OpenGL2, OpenGL3, Vulkan, Metal..) -// [ALPHA] Early bindings, not well tested. If you want a portable application, prefer using the GLFW or SDL platform bindings on Mac. - -// Implemented features: -// [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'. -// [X] Platform: OSX clipboard is supported within core Dear ImGui (no specific code in this back-end). -// Issues: -// [ ] Platform: Keys are all generally very broken. Best using [event keycode] and not [event characters].. - -#include "imgui.h" -#include "imgui_impl_osx.h" -#import - -// CHANGELOG -// (minor and older changes stripped away, please see git history for details) -// 2019-12-05: Inputs: Added support for ImGuiMouseCursor_NotAllowed mouse cursor. -// 2019-10-11: Inputs: Fix using Backspace key. -// 2019-07-21: Re-added clipboard handlers as they are not enabled by default in core imgui.cpp (reverted 2019-05-18 change). -// 2019-05-28: Inputs: Added mouse cursor shape and visibility support. -// 2019-05-18: Misc: Removed clipboard handlers as they are now supported by core imgui.cpp. -// 2019-05-11: Inputs: Don't filter character values before calling AddInputCharacter() apart from 0xF700..0xFFFF range. -// 2018-11-30: Misc: Setting up io.BackendPlatformName so it can be displayed in the About Window. -// 2018-07-07: Initial version. - -// Data -static CFAbsoluteTime g_Time = 0.0; -static NSCursor* g_MouseCursors[ImGuiMouseCursor_COUNT] = {}; -static bool g_MouseCursorHidden = false; - -// Undocumented methods for creating cursors. -@interface NSCursor() -+ (id)_windowResizeNorthWestSouthEastCursor; -+ (id)_windowResizeNorthEastSouthWestCursor; -+ (id)_windowResizeNorthSouthCursor; -+ (id)_windowResizeEastWestCursor; -@end - -// Functions -bool ImGui_ImplOSX_Init() -{ - ImGuiIO& io = ImGui::GetIO(); - - // Setup back-end capabilities flags - io.BackendFlags |= ImGuiBackendFlags_HasMouseCursors; // We can honor GetMouseCursor() values (optional) - //io.BackendFlags |= ImGuiBackendFlags_HasSetMousePos; // We can honor io.WantSetMousePos requests (optional, rarely used) - //io.BackendFlags |= ImGuiBackendFlags_PlatformHasViewports; // We can create multi-viewports on the Platform side (optional) - //io.BackendFlags |= ImGuiBackendFlags_HasMouseHoveredViewport; // We can set io.MouseHoveredViewport correctly (optional, not easy) - io.BackendPlatformName = "imgui_impl_osx"; - - // Keyboard mapping. Dear ImGui will use those indices to peek into the io.KeyDown[] array. - const int offset_for_function_keys = 256 - 0xF700; - io.KeyMap[ImGuiKey_Tab] = '\t'; - io.KeyMap[ImGuiKey_LeftArrow] = NSLeftArrowFunctionKey + offset_for_function_keys; - io.KeyMap[ImGuiKey_RightArrow] = NSRightArrowFunctionKey + offset_for_function_keys; - io.KeyMap[ImGuiKey_UpArrow] = NSUpArrowFunctionKey + offset_for_function_keys; - io.KeyMap[ImGuiKey_DownArrow] = NSDownArrowFunctionKey + offset_for_function_keys; - io.KeyMap[ImGuiKey_PageUp] = NSPageUpFunctionKey + offset_for_function_keys; - io.KeyMap[ImGuiKey_PageDown] = NSPageDownFunctionKey + offset_for_function_keys; - io.KeyMap[ImGuiKey_Home] = NSHomeFunctionKey + offset_for_function_keys; - io.KeyMap[ImGuiKey_End] = NSEndFunctionKey + offset_for_function_keys; - io.KeyMap[ImGuiKey_Insert] = NSInsertFunctionKey + offset_for_function_keys; - io.KeyMap[ImGuiKey_Delete] = NSDeleteFunctionKey + offset_for_function_keys; - io.KeyMap[ImGuiKey_Backspace] = 127; - io.KeyMap[ImGuiKey_Space] = 32; - io.KeyMap[ImGuiKey_Enter] = 13; - io.KeyMap[ImGuiKey_Escape] = 27; - io.KeyMap[ImGuiKey_KeyPadEnter] = 13; - io.KeyMap[ImGuiKey_A] = 'A'; - io.KeyMap[ImGuiKey_C] = 'C'; - io.KeyMap[ImGuiKey_V] = 'V'; - io.KeyMap[ImGuiKey_X] = 'X'; - io.KeyMap[ImGuiKey_Y] = 'Y'; - io.KeyMap[ImGuiKey_Z] = 'Z'; - - // Load cursors. Some of them are undocumented. - g_MouseCursorHidden = false; - g_MouseCursors[ImGuiMouseCursor_Arrow] = [NSCursor arrowCursor]; - g_MouseCursors[ImGuiMouseCursor_TextInput] = [NSCursor IBeamCursor]; - g_MouseCursors[ImGuiMouseCursor_ResizeAll] = [NSCursor closedHandCursor]; - g_MouseCursors[ImGuiMouseCursor_Hand] = [NSCursor pointingHandCursor]; - g_MouseCursors[ImGuiMouseCursor_NotAllowed] = [NSCursor operationNotAllowedCursor]; - g_MouseCursors[ImGuiMouseCursor_ResizeNS] = [NSCursor respondsToSelector:@selector(_windowResizeNorthSouthCursor)] ? [NSCursor _windowResizeNorthSouthCursor] : [NSCursor resizeUpDownCursor]; - g_MouseCursors[ImGuiMouseCursor_ResizeEW] = [NSCursor respondsToSelector:@selector(_windowResizeEastWestCursor)] ? [NSCursor _windowResizeEastWestCursor] : [NSCursor resizeLeftRightCursor]; - g_MouseCursors[ImGuiMouseCursor_ResizeNESW] = [NSCursor respondsToSelector:@selector(_windowResizeNorthEastSouthWestCursor)] ? [NSCursor _windowResizeNorthEastSouthWestCursor] : [NSCursor closedHandCursor]; - g_MouseCursors[ImGuiMouseCursor_ResizeNWSE] = [NSCursor respondsToSelector:@selector(_windowResizeNorthWestSouthEastCursor)] ? [NSCursor _windowResizeNorthWestSouthEastCursor] : [NSCursor closedHandCursor]; - - // Note that imgui.cpp also include default OSX clipboard handlers which can be enabled - // by adding '#define IMGUI_ENABLE_OSX_DEFAULT_CLIPBOARD_FUNCTIONS' in imconfig.h and adding '-framework ApplicationServices' to your linker command-line. - // Since we are already in ObjC land here, it is easy for us to add a clipboard handler using the NSPasteboard api. - io.SetClipboardTextFn = [](void*, const char* str) -> void - { - NSPasteboard* pasteboard = [NSPasteboard generalPasteboard]; - [pasteboard declareTypes:[NSArray arrayWithObject:NSPasteboardTypeString] owner:nil]; - [pasteboard setString:[NSString stringWithUTF8String:str] forType:NSPasteboardTypeString]; - }; - - io.GetClipboardTextFn = [](void*) -> const char* - { - NSPasteboard* pasteboard = [NSPasteboard generalPasteboard]; - NSString* available = [pasteboard availableTypeFromArray: [NSArray arrayWithObject:NSPasteboardTypeString]]; - if (![available isEqualToString:NSPasteboardTypeString]) - return NULL; - - NSString* string = [pasteboard stringForType:NSPasteboardTypeString]; - if (string == nil) - return NULL; - - const char* string_c = (const char*)[string UTF8String]; - size_t string_len = strlen(string_c); - static ImVector s_clipboard; - s_clipboard.resize((int)string_len + 1); - strcpy(s_clipboard.Data, string_c); - return s_clipboard.Data; - }; - - return true; -} - -void ImGui_ImplOSX_Shutdown() -{ -} - -static void ImGui_ImplOSX_UpdateMouseCursor() -{ - ImGuiIO& io = ImGui::GetIO(); - if (io.ConfigFlags & ImGuiConfigFlags_NoMouseCursorChange) - return; - - ImGuiMouseCursor imgui_cursor = ImGui::GetMouseCursor(); - if (io.MouseDrawCursor || imgui_cursor == ImGuiMouseCursor_None) - { - // Hide OS mouse cursor if imgui is drawing it or if it wants no cursor - if (!g_MouseCursorHidden) - { - g_MouseCursorHidden = true; - [NSCursor hide]; - } - } - else - { - // Show OS mouse cursor - [g_MouseCursors[g_MouseCursors[imgui_cursor] ? imgui_cursor : ImGuiMouseCursor_Arrow] set]; - if (g_MouseCursorHidden) - { - g_MouseCursorHidden = false; - [NSCursor unhide]; - } - } -} - -void ImGui_ImplOSX_NewFrame(NSView* view) -{ - // Setup display size - ImGuiIO& io = ImGui::GetIO(); - if (view) - { - const float dpi = [view.window backingScaleFactor]; - io.DisplaySize = ImVec2((float)view.bounds.size.width, (float)view.bounds.size.height); - io.DisplayFramebufferScale = ImVec2(dpi, dpi); - } - - // Setup time step - if (g_Time == 0.0) - g_Time = CFAbsoluteTimeGetCurrent(); - CFAbsoluteTime current_time = CFAbsoluteTimeGetCurrent(); - io.DeltaTime = current_time - g_Time; - g_Time = current_time; - - ImGui_ImplOSX_UpdateMouseCursor(); -} - -static int mapCharacterToKey(int c) -{ - if (c >= 'a' && c <= 'z') - return c - 'a' + 'A'; - if (c == 25) // SHIFT+TAB -> TAB - return 9; - if (c >= 0 && c < 256) - return c; - if (c >= 0xF700 && c < 0xF700 + 256) - return c - 0xF700 + 256; - return -1; -} - -static void resetKeys() -{ - ImGuiIO& io = ImGui::GetIO(); - for (int n = 0; n < IM_ARRAYSIZE(io.KeysDown); n++) - io.KeysDown[n] = false; -} - -bool ImGui_ImplOSX_HandleEvent(NSEvent* event, NSView* view) -{ - ImGuiIO& io = ImGui::GetIO(); - - if (event.type == NSEventTypeLeftMouseDown || event.type == NSEventTypeRightMouseDown || event.type == NSEventTypeOtherMouseDown) - { - int button = (int)[event buttonNumber]; - if (button >= 0 && button < IM_ARRAYSIZE(io.MouseDown)) - io.MouseDown[button] = true; - return io.WantCaptureMouse; - } - - if (event.type == NSEventTypeLeftMouseUp || event.type == NSEventTypeRightMouseUp || event.type == NSEventTypeOtherMouseUp) - { - int button = (int)[event buttonNumber]; - if (button >= 0 && button < IM_ARRAYSIZE(io.MouseDown)) - io.MouseDown[button] = false; - return io.WantCaptureMouse; - } - - if (event.type == NSEventTypeMouseMoved || event.type == NSEventTypeLeftMouseDragged) - { - NSPoint mousePoint = event.locationInWindow; - mousePoint = [view convertPoint:mousePoint fromView:nil]; - mousePoint = NSMakePoint(mousePoint.x, view.bounds.size.height - mousePoint.y); - io.MousePos = ImVec2(mousePoint.x, mousePoint.y); - } - - if (event.type == NSEventTypeScrollWheel) - { - double wheel_dx = 0.0; - double wheel_dy = 0.0; - - #if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 - if (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_6) - { - wheel_dx = [event scrollingDeltaX]; - wheel_dy = [event scrollingDeltaY]; - if ([event hasPreciseScrollingDeltas]) - { - wheel_dx *= 0.1; - wheel_dy *= 0.1; - } - } - else - #endif // MAC_OS_X_VERSION_MAX_ALLOWED - { - wheel_dx = [event deltaX]; - wheel_dy = [event deltaY]; - } - - if (fabs(wheel_dx) > 0.0) - io.MouseWheelH += wheel_dx * 0.1f; - if (fabs(wheel_dy) > 0.0) - io.MouseWheel += wheel_dy * 0.1f; - return io.WantCaptureMouse; - } - - // FIXME: All the key handling is wrong and broken. Refer to GLFW's cocoa_init.mm and cocoa_window.mm. - if (event.type == NSEventTypeKeyDown) - { - NSString* str = [event characters]; - int len = (int)[str length]; - for (int i = 0; i < len; i++) - { - int c = [str characterAtIndex:i]; - if (!io.KeyCtrl && !(c >= 0xF700 && c <= 0xFFFF) && c != 127) - io.AddInputCharacter((unsigned int)c); - - // We must reset in case we're pressing a sequence of special keys while keeping the command pressed - int key = mapCharacterToKey(c); - if (key != -1 && key < 256 && !io.KeyCtrl) - resetKeys(); - if (key != -1) - io.KeysDown[key] = true; - } - return io.WantCaptureKeyboard; - } - - if (event.type == NSEventTypeKeyUp) - { - NSString* str = [event characters]; - int len = (int)[str length]; - for (int i = 0; i < len; i++) - { - int c = [str characterAtIndex:i]; - int key = mapCharacterToKey(c); - if (key != -1) - io.KeysDown[key] = false; - } - return io.WantCaptureKeyboard; - } - - if (event.type == NSEventTypeFlagsChanged) - { - ImGuiIO& io = ImGui::GetIO(); - unsigned int flags = [event modifierFlags] & NSEventModifierFlagDeviceIndependentFlagsMask; - - bool oldKeyCtrl = io.KeyCtrl; - bool oldKeyShift = io.KeyShift; - bool oldKeyAlt = io.KeyAlt; - bool oldKeySuper = io.KeySuper; - io.KeyCtrl = flags & NSEventModifierFlagControl; - io.KeyShift = flags & NSEventModifierFlagShift; - io.KeyAlt = flags & NSEventModifierFlagOption; - io.KeySuper = flags & NSEventModifierFlagCommand; - - // We must reset them as we will not receive any keyUp event if they where pressed with a modifier - if ((oldKeyShift && !io.KeyShift) || (oldKeyCtrl && !io.KeyCtrl) || (oldKeyAlt && !io.KeyAlt) || (oldKeySuper && !io.KeySuper)) - resetKeys(); - return io.WantCaptureKeyboard; - } - - return false; -} diff --git a/cmake/imgui/examples/imgui_impl_sdl.cpp b/cmake/imgui/examples/imgui_impl_sdl.cpp deleted file mode 100644 index 9fd2cc48..00000000 --- a/cmake/imgui/examples/imgui_impl_sdl.cpp +++ /dev/null @@ -1,367 +0,0 @@ -// dear imgui: Platform Binding for SDL2 -// This needs to be used along with a Renderer (e.g. DirectX11, OpenGL3, Vulkan..) -// (Info: SDL2 is a cross-platform general purpose library for handling windows, inputs, graphics context creation, etc.) -// (Requires: SDL 2.0. Prefer SDL 2.0.4+ for full feature support.) - -// Implemented features: -// [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'. -// [X] Platform: Clipboard support. -// [X] Platform: Keyboard arrays indexed using SDL_SCANCODE_* codes, e.g. ImGui::IsKeyPressed(SDL_SCANCODE_SPACE). -// [X] Platform: Gamepad support. Enabled with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'. -// Missing features: -// [ ] Platform: SDL2 handling of IME under Windows appears to be broken and it explicitly disable the regular Windows IME. You can restore Windows IME by compiling SDL with SDL_DISABLE_WINDOWS_IME. - -// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. -// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. -// https://github.com/ocornut/imgui - -// CHANGELOG -// (minor and older changes stripped away, please see git history for details) -// 2020-02-20: Inputs: Fixed mapping for ImGuiKey_KeyPadEnter (using SDL_SCANCODE_KP_ENTER instead of SDL_SCANCODE_RETURN2). -// 2019-12-17: Inputs: On Wayland, use SDL_GetMouseState (because there is no global mouse state). -// 2019-12-05: Inputs: Added support for ImGuiMouseCursor_NotAllowed mouse cursor. -// 2019-07-21: Inputs: Added mapping for ImGuiKey_KeyPadEnter. -// 2019-04-23: Inputs: Added support for SDL_GameController (if ImGuiConfigFlags_NavEnableGamepad is set by user application). -// 2019-03-12: Misc: Preserve DisplayFramebufferScale when main window is minimized. -// 2018-12-21: Inputs: Workaround for Android/iOS which don't seem to handle focus related calls. -// 2018-11-30: Misc: Setting up io.BackendPlatformName so it can be displayed in the About Window. -// 2018-11-14: Changed the signature of ImGui_ImplSDL2_ProcessEvent() to take a 'const SDL_Event*'. -// 2018-08-01: Inputs: Workaround for Emscripten which doesn't seem to handle focus related calls. -// 2018-06-29: Inputs: Added support for the ImGuiMouseCursor_Hand cursor. -// 2018-06-08: Misc: Extracted imgui_impl_sdl.cpp/.h away from the old combined SDL2+OpenGL/Vulkan examples. -// 2018-06-08: Misc: ImGui_ImplSDL2_InitForOpenGL() now takes a SDL_GLContext parameter. -// 2018-05-09: Misc: Fixed clipboard paste memory leak (we didn't call SDL_FreeMemory on the data returned by SDL_GetClipboardText). -// 2018-03-20: Misc: Setup io.BackendFlags ImGuiBackendFlags_HasMouseCursors flag + honor ImGuiConfigFlags_NoMouseCursorChange flag. -// 2018-02-16: Inputs: Added support for mouse cursors, honoring ImGui::GetMouseCursor() value. -// 2018-02-06: Misc: Removed call to ImGui::Shutdown() which is not available from 1.60 WIP, user needs to call CreateContext/DestroyContext themselves. -// 2018-02-06: Inputs: Added mapping for ImGuiKey_Space. -// 2018-02-05: Misc: Using SDL_GetPerformanceCounter() instead of SDL_GetTicks() to be able to handle very high framerate (1000+ FPS). -// 2018-02-05: Inputs: Keyboard mapping is using scancodes everywhere instead of a confusing mixture of keycodes and scancodes. -// 2018-01-20: Inputs: Added Horizontal Mouse Wheel support. -// 2018-01-19: Inputs: When available (SDL 2.0.4+) using SDL_CaptureMouse() to retrieve coordinates outside of client area when dragging. Otherwise (SDL 2.0.3 and before) testing for SDL_WINDOW_INPUT_FOCUS instead of SDL_WINDOW_MOUSE_FOCUS. -// 2018-01-18: Inputs: Added mapping for ImGuiKey_Insert. -// 2017-08-25: Inputs: MousePos set to -FLT_MAX,-FLT_MAX when mouse is unavailable/missing (instead of -1,-1). -// 2016-10-15: Misc: Added a void* user_data parameter to Clipboard function handlers. - -#include "imgui.h" -#include "imgui_impl_sdl.h" - -// SDL -#include -#include -#if defined(__APPLE__) -#include "TargetConditionals.h" -#endif - -#define SDL_HAS_CAPTURE_AND_GLOBAL_MOUSE SDL_VERSION_ATLEAST(2,0,4) -#define SDL_HAS_VULKAN SDL_VERSION_ATLEAST(2,0,6) - -// Data -static SDL_Window* g_Window = NULL; -static Uint64 g_Time = 0; -static bool g_MousePressed[3] = { false, false, false }; -static SDL_Cursor* g_MouseCursors[ImGuiMouseCursor_COUNT] = {}; -static char* g_ClipboardTextData = NULL; -static bool g_MouseCanUseGlobalState = true; - -static const char* ImGui_ImplSDL2_GetClipboardText(void*) -{ - if (g_ClipboardTextData) - SDL_free(g_ClipboardTextData); - g_ClipboardTextData = SDL_GetClipboardText(); - return g_ClipboardTextData; -} - -static void ImGui_ImplSDL2_SetClipboardText(void*, const char* text) -{ - SDL_SetClipboardText(text); -} - -// You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. -// - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. -// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. -// Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. -// If you have multiple SDL events and some of them are not meant to be used by dear imgui, you may need to filter events based on their windowID field. -bool ImGui_ImplSDL2_ProcessEvent(const SDL_Event* event) -{ - ImGuiIO& io = ImGui::GetIO(); - switch (event->type) - { - case SDL_MOUSEWHEEL: - { - if (event->wheel.x > 0) io.MouseWheelH += 1; - if (event->wheel.x < 0) io.MouseWheelH -= 1; - if (event->wheel.y > 0) io.MouseWheel += 1; - if (event->wheel.y < 0) io.MouseWheel -= 1; - return true; - } - case SDL_MOUSEBUTTONDOWN: - { - if (event->button.button == SDL_BUTTON_LEFT) g_MousePressed[0] = true; - if (event->button.button == SDL_BUTTON_RIGHT) g_MousePressed[1] = true; - if (event->button.button == SDL_BUTTON_MIDDLE) g_MousePressed[2] = true; - return true; - } - case SDL_TEXTINPUT: - { - io.AddInputCharactersUTF8(event->text.text); - return true; - } - case SDL_KEYDOWN: - case SDL_KEYUP: - { - int key = event->key.keysym.scancode; - IM_ASSERT(key >= 0 && key < IM_ARRAYSIZE(io.KeysDown)); - io.KeysDown[key] = (event->type == SDL_KEYDOWN); - io.KeyShift = ((SDL_GetModState() & KMOD_SHIFT) != 0); - io.KeyCtrl = ((SDL_GetModState() & KMOD_CTRL) != 0); - io.KeyAlt = ((SDL_GetModState() & KMOD_ALT) != 0); -#ifdef _WIN32 - io.KeySuper = false; -#else - io.KeySuper = ((SDL_GetModState() & KMOD_GUI) != 0); -#endif - return true; - } - } - return false; -} - -static bool ImGui_ImplSDL2_Init(SDL_Window* window) -{ - g_Window = window; - - // Setup back-end capabilities flags - ImGuiIO& io = ImGui::GetIO(); - io.BackendFlags |= ImGuiBackendFlags_HasMouseCursors; // We can honor GetMouseCursor() values (optional) - io.BackendFlags |= ImGuiBackendFlags_HasSetMousePos; // We can honor io.WantSetMousePos requests (optional, rarely used) - io.BackendPlatformName = "imgui_impl_sdl"; - - // Keyboard mapping. ImGui will use those indices to peek into the io.KeysDown[] array. - io.KeyMap[ImGuiKey_Tab] = SDL_SCANCODE_TAB; - io.KeyMap[ImGuiKey_LeftArrow] = SDL_SCANCODE_LEFT; - io.KeyMap[ImGuiKey_RightArrow] = SDL_SCANCODE_RIGHT; - io.KeyMap[ImGuiKey_UpArrow] = SDL_SCANCODE_UP; - io.KeyMap[ImGuiKey_DownArrow] = SDL_SCANCODE_DOWN; - io.KeyMap[ImGuiKey_PageUp] = SDL_SCANCODE_PAGEUP; - io.KeyMap[ImGuiKey_PageDown] = SDL_SCANCODE_PAGEDOWN; - io.KeyMap[ImGuiKey_Home] = SDL_SCANCODE_HOME; - io.KeyMap[ImGuiKey_End] = SDL_SCANCODE_END; - io.KeyMap[ImGuiKey_Insert] = SDL_SCANCODE_INSERT; - io.KeyMap[ImGuiKey_Delete] = SDL_SCANCODE_DELETE; - io.KeyMap[ImGuiKey_Backspace] = SDL_SCANCODE_BACKSPACE; - io.KeyMap[ImGuiKey_Space] = SDL_SCANCODE_SPACE; - io.KeyMap[ImGuiKey_Enter] = SDL_SCANCODE_RETURN; - io.KeyMap[ImGuiKey_Escape] = SDL_SCANCODE_ESCAPE; - io.KeyMap[ImGuiKey_KeyPadEnter] = SDL_SCANCODE_KP_ENTER; - io.KeyMap[ImGuiKey_A] = SDL_SCANCODE_A; - io.KeyMap[ImGuiKey_C] = SDL_SCANCODE_C; - io.KeyMap[ImGuiKey_V] = SDL_SCANCODE_V; - io.KeyMap[ImGuiKey_X] = SDL_SCANCODE_X; - io.KeyMap[ImGuiKey_Y] = SDL_SCANCODE_Y; - io.KeyMap[ImGuiKey_Z] = SDL_SCANCODE_Z; - - io.SetClipboardTextFn = ImGui_ImplSDL2_SetClipboardText; - io.GetClipboardTextFn = ImGui_ImplSDL2_GetClipboardText; - io.ClipboardUserData = NULL; - - // Load mouse cursors - g_MouseCursors[ImGuiMouseCursor_Arrow] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW); - g_MouseCursors[ImGuiMouseCursor_TextInput] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_IBEAM); - g_MouseCursors[ImGuiMouseCursor_ResizeAll] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZEALL); - g_MouseCursors[ImGuiMouseCursor_ResizeNS] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENS); - g_MouseCursors[ImGuiMouseCursor_ResizeEW] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZEWE); - g_MouseCursors[ImGuiMouseCursor_ResizeNESW] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENESW); - g_MouseCursors[ImGuiMouseCursor_ResizeNWSE] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENWSE); - g_MouseCursors[ImGuiMouseCursor_Hand] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_HAND); - g_MouseCursors[ImGuiMouseCursor_NotAllowed] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_NO); - - // Check and store if we are on Wayland - g_MouseCanUseGlobalState = strncmp(SDL_GetCurrentVideoDriver(), "wayland", 7) != 0; - -#ifdef _WIN32 - SDL_SysWMinfo wmInfo; - SDL_VERSION(&wmInfo.version); - SDL_GetWindowWMInfo(window, &wmInfo); - io.ImeWindowHandle = wmInfo.info.win.window; -#else - (void)window; -#endif - - return true; -} - -bool ImGui_ImplSDL2_InitForOpenGL(SDL_Window* window, void* sdl_gl_context) -{ - (void)sdl_gl_context; // Viewport branch will need this. - return ImGui_ImplSDL2_Init(window); -} - -bool ImGui_ImplSDL2_InitForVulkan(SDL_Window* window) -{ -#if !SDL_HAS_VULKAN - IM_ASSERT(0 && "Unsupported"); -#endif - return ImGui_ImplSDL2_Init(window); -} - -bool ImGui_ImplSDL2_InitForD3D(SDL_Window* window) -{ -#if !defined(_WIN32) - IM_ASSERT(0 && "Unsupported"); -#endif - return ImGui_ImplSDL2_Init(window); -} - -bool ImGui_ImplSDL2_InitForMetal(SDL_Window* window) -{ - return ImGui_ImplSDL2_Init(window); -} - -void ImGui_ImplSDL2_Shutdown() -{ - g_Window = NULL; - - // Destroy last known clipboard data - if (g_ClipboardTextData) - SDL_free(g_ClipboardTextData); - g_ClipboardTextData = NULL; - - // Destroy SDL mouse cursors - for (ImGuiMouseCursor cursor_n = 0; cursor_n < ImGuiMouseCursor_COUNT; cursor_n++) - SDL_FreeCursor(g_MouseCursors[cursor_n]); - memset(g_MouseCursors, 0, sizeof(g_MouseCursors)); -} - -static void ImGui_ImplSDL2_UpdateMousePosAndButtons() -{ - ImGuiIO& io = ImGui::GetIO(); - - // Set OS mouse position if requested (rarely used, only when ImGuiConfigFlags_NavEnableSetMousePos is enabled by user) - if (io.WantSetMousePos) - SDL_WarpMouseInWindow(g_Window, (int)io.MousePos.x, (int)io.MousePos.y); - else - io.MousePos = ImVec2(-FLT_MAX, -FLT_MAX); - - int mx, my; - Uint32 mouse_buttons = SDL_GetMouseState(&mx, &my); - io.MouseDown[0] = g_MousePressed[0] || (mouse_buttons & SDL_BUTTON(SDL_BUTTON_LEFT)) != 0; // If a mouse press event came, always pass it as "mouse held this frame", so we don't miss click-release events that are shorter than 1 frame. - io.MouseDown[1] = g_MousePressed[1] || (mouse_buttons & SDL_BUTTON(SDL_BUTTON_RIGHT)) != 0; - io.MouseDown[2] = g_MousePressed[2] || (mouse_buttons & SDL_BUTTON(SDL_BUTTON_MIDDLE)) != 0; - g_MousePressed[0] = g_MousePressed[1] = g_MousePressed[2] = false; - -#if SDL_HAS_CAPTURE_AND_GLOBAL_MOUSE && !defined(__EMSCRIPTEN__) && !defined(__ANDROID__) && !(defined(__APPLE__) && TARGET_OS_IOS) - SDL_Window* focused_window = SDL_GetKeyboardFocus(); - if (g_Window == focused_window) - { - if (g_MouseCanUseGlobalState) - { - // SDL_GetMouseState() gives mouse position seemingly based on the last window entered/focused(?) - // The creation of a new windows at runtime and SDL_CaptureMouse both seems to severely mess up with that, so we retrieve that position globally. - // Won't use this workaround when on Wayland, as there is no global mouse position. - int wx, wy; - SDL_GetWindowPosition(focused_window, &wx, &wy); - SDL_GetGlobalMouseState(&mx, &my); - mx -= wx; - my -= wy; - } - io.MousePos = ImVec2((float)mx, (float)my); - } - - // SDL_CaptureMouse() let the OS know e.g. that our imgui drag outside the SDL window boundaries shouldn't e.g. trigger the OS window resize cursor. - // The function is only supported from SDL 2.0.4 (released Jan 2016) - bool any_mouse_button_down = ImGui::IsAnyMouseDown(); - SDL_CaptureMouse(any_mouse_button_down ? SDL_TRUE : SDL_FALSE); -#else - if (SDL_GetWindowFlags(g_Window) & SDL_WINDOW_INPUT_FOCUS) - io.MousePos = ImVec2((float)mx, (float)my); -#endif -} - -static void ImGui_ImplSDL2_UpdateMouseCursor() -{ - ImGuiIO& io = ImGui::GetIO(); - if (io.ConfigFlags & ImGuiConfigFlags_NoMouseCursorChange) - return; - - ImGuiMouseCursor imgui_cursor = ImGui::GetMouseCursor(); - if (io.MouseDrawCursor || imgui_cursor == ImGuiMouseCursor_None) - { - // Hide OS mouse cursor if imgui is drawing it or if it wants no cursor - SDL_ShowCursor(SDL_FALSE); - } - else - { - // Show OS mouse cursor - SDL_SetCursor(g_MouseCursors[imgui_cursor] ? g_MouseCursors[imgui_cursor] : g_MouseCursors[ImGuiMouseCursor_Arrow]); - SDL_ShowCursor(SDL_TRUE); - } -} - -static void ImGui_ImplSDL2_UpdateGamepads() -{ - ImGuiIO& io = ImGui::GetIO(); - memset(io.NavInputs, 0, sizeof(io.NavInputs)); - if ((io.ConfigFlags & ImGuiConfigFlags_NavEnableGamepad) == 0) - return; - - // Get gamepad - SDL_GameController* game_controller = SDL_GameControllerOpen(0); - if (!game_controller) - { - io.BackendFlags &= ~ImGuiBackendFlags_HasGamepad; - return; - } - - // Update gamepad inputs - #define MAP_BUTTON(NAV_NO, BUTTON_NO) { io.NavInputs[NAV_NO] = (SDL_GameControllerGetButton(game_controller, BUTTON_NO) != 0) ? 1.0f : 0.0f; } - #define MAP_ANALOG(NAV_NO, AXIS_NO, V0, V1) { float vn = (float)(SDL_GameControllerGetAxis(game_controller, AXIS_NO) - V0) / (float)(V1 - V0); if (vn > 1.0f) vn = 1.0f; if (vn > 0.0f && io.NavInputs[NAV_NO] < vn) io.NavInputs[NAV_NO] = vn; } - const int thumb_dead_zone = 8000; // SDL_gamecontroller.h suggests using this value. - MAP_BUTTON(ImGuiNavInput_Activate, SDL_CONTROLLER_BUTTON_A); // Cross / A - MAP_BUTTON(ImGuiNavInput_Cancel, SDL_CONTROLLER_BUTTON_B); // Circle / B - MAP_BUTTON(ImGuiNavInput_Menu, SDL_CONTROLLER_BUTTON_X); // Square / X - MAP_BUTTON(ImGuiNavInput_Input, SDL_CONTROLLER_BUTTON_Y); // Triangle / Y - MAP_BUTTON(ImGuiNavInput_DpadLeft, SDL_CONTROLLER_BUTTON_DPAD_LEFT); // D-Pad Left - MAP_BUTTON(ImGuiNavInput_DpadRight, SDL_CONTROLLER_BUTTON_DPAD_RIGHT); // D-Pad Right - MAP_BUTTON(ImGuiNavInput_DpadUp, SDL_CONTROLLER_BUTTON_DPAD_UP); // D-Pad Up - MAP_BUTTON(ImGuiNavInput_DpadDown, SDL_CONTROLLER_BUTTON_DPAD_DOWN); // D-Pad Down - MAP_BUTTON(ImGuiNavInput_FocusPrev, SDL_CONTROLLER_BUTTON_LEFTSHOULDER); // L1 / LB - MAP_BUTTON(ImGuiNavInput_FocusNext, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER); // R1 / RB - MAP_BUTTON(ImGuiNavInput_TweakSlow, SDL_CONTROLLER_BUTTON_LEFTSHOULDER); // L1 / LB - MAP_BUTTON(ImGuiNavInput_TweakFast, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER); // R1 / RB - MAP_ANALOG(ImGuiNavInput_LStickLeft, SDL_CONTROLLER_AXIS_LEFTX, -thumb_dead_zone, -32768); - MAP_ANALOG(ImGuiNavInput_LStickRight, SDL_CONTROLLER_AXIS_LEFTX, +thumb_dead_zone, +32767); - MAP_ANALOG(ImGuiNavInput_LStickUp, SDL_CONTROLLER_AXIS_LEFTY, -thumb_dead_zone, -32767); - MAP_ANALOG(ImGuiNavInput_LStickDown, SDL_CONTROLLER_AXIS_LEFTY, +thumb_dead_zone, +32767); - - io.BackendFlags |= ImGuiBackendFlags_HasGamepad; - #undef MAP_BUTTON - #undef MAP_ANALOG -} - -void ImGui_ImplSDL2_NewFrame(SDL_Window* window) -{ - ImGuiIO& io = ImGui::GetIO(); - IM_ASSERT(io.Fonts->IsBuilt() && "Font atlas not built! It is generally built by the renderer back-end. Missing call to renderer _NewFrame() function? e.g. ImGui_ImplOpenGL3_NewFrame()."); - - // Setup display size (every frame to accommodate for window resizing) - int w, h; - int display_w, display_h; - SDL_GetWindowSize(window, &w, &h); - SDL_GL_GetDrawableSize(window, &display_w, &display_h); - io.DisplaySize = ImVec2((float)w, (float)h); - if (w > 0 && h > 0) - io.DisplayFramebufferScale = ImVec2((float)display_w / w, (float)display_h / h); - - // Setup time step (we don't use SDL_GetTicks() because it is using millisecond resolution) - static Uint64 frequency = SDL_GetPerformanceFrequency(); - Uint64 current_time = SDL_GetPerformanceCounter(); - io.DeltaTime = g_Time > 0 ? (float)((double)(current_time - g_Time) / frequency) : (float)(1.0f / 60.0f); - g_Time = current_time; - - ImGui_ImplSDL2_UpdateMousePosAndButtons(); - ImGui_ImplSDL2_UpdateMouseCursor(); - - // Update game controllers (if enabled and available) - ImGui_ImplSDL2_UpdateGamepads(); -} diff --git a/cmake/imgui/examples/imgui_impl_sdl.h b/cmake/imgui/examples/imgui_impl_sdl.h deleted file mode 100644 index a672ca83..00000000 --- a/cmake/imgui/examples/imgui_impl_sdl.h +++ /dev/null @@ -1,28 +0,0 @@ -// dear imgui: Platform Binding for SDL2 -// This needs to be used along with a Renderer (e.g. DirectX11, OpenGL3, Vulkan..) -// (Info: SDL2 is a cross-platform general purpose library for handling windows, inputs, graphics context creation, etc.) - -// Implemented features: -// [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'. -// [X] Platform: Clipboard support. -// [X] Platform: Keyboard arrays indexed using SDL_SCANCODE_* codes, e.g. ImGui::IsKeyPressed(SDL_SCANCODE_SPACE). -// [X] Platform: Gamepad support. Enabled with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'. -// Missing features: -// [ ] Platform: SDL2 handling of IME under Windows appears to be broken and it explicitly disable the regular Windows IME. You can restore Windows IME by compiling SDL with SDL_DISABLE_WINDOWS_IME. - -// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. -// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. -// https://github.com/ocornut/imgui - -#pragma once - -struct SDL_Window; -typedef union SDL_Event SDL_Event; - -IMGUI_IMPL_API bool ImGui_ImplSDL2_InitForOpenGL(SDL_Window* window, void* sdl_gl_context); -IMGUI_IMPL_API bool ImGui_ImplSDL2_InitForVulkan(SDL_Window* window); -IMGUI_IMPL_API bool ImGui_ImplSDL2_InitForD3D(SDL_Window* window); -IMGUI_IMPL_API bool ImGui_ImplSDL2_InitForMetal(SDL_Window* window); -IMGUI_IMPL_API void ImGui_ImplSDL2_Shutdown(); -IMGUI_IMPL_API void ImGui_ImplSDL2_NewFrame(SDL_Window* window); -IMGUI_IMPL_API bool ImGui_ImplSDL2_ProcessEvent(const SDL_Event* event); diff --git a/cmake/imgui/examples/imgui_impl_vulkan.cpp b/cmake/imgui/examples/imgui_impl_vulkan.cpp deleted file mode 100644 index 095a7f26..00000000 --- a/cmake/imgui/examples/imgui_impl_vulkan.cpp +++ /dev/null @@ -1,1222 +0,0 @@ -// dear imgui: Renderer for Vulkan -// This needs to be used along with a Platform Binding (e.g. GLFW, SDL, Win32, custom..) - -// Implemented features: -// [X] Renderer: Support for large meshes (64k+ vertices) with 16-bit indices. -// Missing features: -// [ ] Renderer: User texture binding. Changes of ImTextureID aren't supported by this binding! See https://github.com/ocornut/imgui/pull/914 - -// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. -// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. -// https://github.com/ocornut/imgui - -// The aim of imgui_impl_vulkan.h/.cpp is to be usable in your engine without any modification. -// IF YOU FEEL YOU NEED TO MAKE ANY CHANGE TO THIS CODE, please share them and your feedback at https://github.com/ocornut/imgui/ - -// Important note to the reader who wish to integrate imgui_impl_vulkan.cpp/.h in their own engine/app. -// - Common ImGui_ImplVulkan_XXX functions and structures are used to interface with imgui_impl_vulkan.cpp/.h. -// You will use those if you want to use this rendering back-end in your engine/app. -// - Helper ImGui_ImplVulkanH_XXX functions and structures are only used by this example (main.cpp) and by -// the back-end itself (imgui_impl_vulkan.cpp), but should PROBABLY NOT be used by your own engine/app code. -// Read comments in imgui_impl_vulkan.h. - -// CHANGELOG -// (minor and older changes stripped away, please see git history for details) -// 2019-08-01: Vulkan: Added support for specifying multisample count. Set ImGui_ImplVulkan_InitInfo::MSAASamples to one of the VkSampleCountFlagBits values to use, default is non-multisampled as before. -// 2019-05-29: Vulkan: Added support for large mesh (64K+ vertices), enable ImGuiBackendFlags_RendererHasVtxOffset flag. -// 2019-04-30: Vulkan: Added support for special ImDrawCallback_ResetRenderState callback to reset render state. -// 2019-04-04: *BREAKING CHANGE*: Vulkan: Added ImageCount/MinImageCount fields in ImGui_ImplVulkan_InitInfo, required for initialization (was previously a hard #define IMGUI_VK_QUEUED_FRAMES 2). Added ImGui_ImplVulkan_SetMinImageCount(). -// 2019-04-04: Vulkan: Added VkInstance argument to ImGui_ImplVulkanH_CreateWindow() optional helper. -// 2019-04-04: Vulkan: Avoid passing negative coordinates to vkCmdSetScissor, which debug validation layers do not like. -// 2019-04-01: Vulkan: Support for 32-bit index buffer (#define ImDrawIdx unsigned int). -// 2019-02-16: Vulkan: Viewport and clipping rectangles correctly using draw_data->FramebufferScale to allow retina display. -// 2018-11-30: Misc: Setting up io.BackendRendererName so it can be displayed in the About Window. -// 2018-08-25: Vulkan: Fixed mishandled VkSurfaceCapabilitiesKHR::maxImageCount=0 case. -// 2018-06-22: Inverted the parameters to ImGui_ImplVulkan_RenderDrawData() to be consistent with other bindings. -// 2018-06-08: Misc: Extracted imgui_impl_vulkan.cpp/.h away from the old combined GLFW+Vulkan example. -// 2018-06-08: Vulkan: Use draw_data->DisplayPos and draw_data->DisplaySize to setup projection matrix and clipping rectangle. -// 2018-03-03: Vulkan: Various refactor, created a couple of ImGui_ImplVulkanH_XXX helper that the example can use and that viewport support will use. -// 2018-03-01: Vulkan: Renamed ImGui_ImplVulkan_Init_Info to ImGui_ImplVulkan_InitInfo and fields to match more closely Vulkan terminology. -// 2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback, ImGui_ImplVulkan_Render() calls ImGui_ImplVulkan_RenderDrawData() itself. -// 2018-02-06: Misc: Removed call to ImGui::Shutdown() which is not available from 1.60 WIP, user needs to call CreateContext/DestroyContext themselves. -// 2017-05-15: Vulkan: Fix scissor offset being negative. Fix new Vulkan validation warnings. Set required depth member for buffer image copy. -// 2016-11-13: Vulkan: Fix validation layer warnings and errors and redeclare gl_PerVertex. -// 2016-10-18: Vulkan: Add location decorators & change to use structs as in/out in glsl, update embedded spv (produced with glslangValidator -x). Null the released resources. -// 2016-08-27: Vulkan: Fix Vulkan example for use when a depth buffer is active. - -#include "imgui.h" -#include "imgui_impl_vulkan.h" -#include - -// Reusable buffers used for rendering 1 current in-flight frame, for ImGui_ImplVulkan_RenderDrawData() -// [Please zero-clear before use!] -struct ImGui_ImplVulkanH_FrameRenderBuffers -{ - VkDeviceMemory VertexBufferMemory; - VkDeviceMemory IndexBufferMemory; - VkDeviceSize VertexBufferSize; - VkDeviceSize IndexBufferSize; - VkBuffer VertexBuffer; - VkBuffer IndexBuffer; -}; - -// Each viewport will hold 1 ImGui_ImplVulkanH_WindowRenderBuffers -// [Please zero-clear before use!] -struct ImGui_ImplVulkanH_WindowRenderBuffers -{ - uint32_t Index; - uint32_t Count; - ImGui_ImplVulkanH_FrameRenderBuffers* FrameRenderBuffers; -}; - -// Vulkan data -static ImGui_ImplVulkan_InitInfo g_VulkanInitInfo = {}; -static VkRenderPass g_RenderPass = VK_NULL_HANDLE; -static VkDeviceSize g_BufferMemoryAlignment = 256; -static VkPipelineCreateFlags g_PipelineCreateFlags = 0x00; -static VkDescriptorSetLayout g_DescriptorSetLayout = VK_NULL_HANDLE; -static VkPipelineLayout g_PipelineLayout = VK_NULL_HANDLE; -static VkDescriptorSet g_DescriptorSet = VK_NULL_HANDLE; -static VkPipeline g_Pipeline = VK_NULL_HANDLE; - -// Font data -static VkSampler g_FontSampler = VK_NULL_HANDLE; -static VkDeviceMemory g_FontMemory = VK_NULL_HANDLE; -static VkImage g_FontImage = VK_NULL_HANDLE; -static VkImageView g_FontView = VK_NULL_HANDLE; -static VkDeviceMemory g_UploadBufferMemory = VK_NULL_HANDLE; -static VkBuffer g_UploadBuffer = VK_NULL_HANDLE; - -// Render buffers -static ImGui_ImplVulkanH_WindowRenderBuffers g_MainWindowRenderBuffers; - -// Forward Declarations -bool ImGui_ImplVulkan_CreateDeviceObjects(); -void ImGui_ImplVulkan_DestroyDeviceObjects(); -void ImGui_ImplVulkanH_DestroyFrame(VkDevice device, ImGui_ImplVulkanH_Frame* fd, const VkAllocationCallbacks* allocator); -void ImGui_ImplVulkanH_DestroyFrameSemaphores(VkDevice device, ImGui_ImplVulkanH_FrameSemaphores* fsd, const VkAllocationCallbacks* allocator); -void ImGui_ImplVulkanH_DestroyFrameRenderBuffers(VkDevice device, ImGui_ImplVulkanH_FrameRenderBuffers* buffers, const VkAllocationCallbacks* allocator); -void ImGui_ImplVulkanH_DestroyWindowRenderBuffers(VkDevice device, ImGui_ImplVulkanH_WindowRenderBuffers* buffers, const VkAllocationCallbacks* allocator); -void ImGui_ImplVulkanH_CreateWindowSwapChain(VkPhysicalDevice physical_device, VkDevice device, ImGui_ImplVulkanH_Window* wd, const VkAllocationCallbacks* allocator, int w, int h, uint32_t min_image_count); -void ImGui_ImplVulkanH_CreateWindowCommandBuffers(VkPhysicalDevice physical_device, VkDevice device, ImGui_ImplVulkanH_Window* wd, uint32_t queue_family, const VkAllocationCallbacks* allocator); - -//----------------------------------------------------------------------------- -// SHADERS -//----------------------------------------------------------------------------- - -// glsl_shader.vert, compiled with: -// # glslangValidator -V -x -o glsl_shader.vert.u32 glsl_shader.vert -/* -#version 450 core -layout(location = 0) in vec2 aPos; -layout(location = 1) in vec2 aUV; -layout(location = 2) in vec4 aColor; -layout(push_constant) uniform uPushConstant { vec2 uScale; vec2 uTranslate; } pc; - -out gl_PerVertex { vec4 gl_Position; }; -layout(location = 0) out struct { vec4 Color; vec2 UV; } Out; - -void main() -{ - Out.Color = aColor; - Out.UV = aUV; - gl_Position = vec4(aPos * pc.uScale + pc.uTranslate, 0, 1); -} -*/ -static uint32_t __glsl_shader_vert_spv[] = -{ - 0x07230203,0x00010000,0x00080001,0x0000002e,0x00000000,0x00020011,0x00000001,0x0006000b, - 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, - 0x000a000f,0x00000000,0x00000004,0x6e69616d,0x00000000,0x0000000b,0x0000000f,0x00000015, - 0x0000001b,0x0000001c,0x00030003,0x00000002,0x000001c2,0x00040005,0x00000004,0x6e69616d, - 0x00000000,0x00030005,0x00000009,0x00000000,0x00050006,0x00000009,0x00000000,0x6f6c6f43, - 0x00000072,0x00040006,0x00000009,0x00000001,0x00005655,0x00030005,0x0000000b,0x0074754f, - 0x00040005,0x0000000f,0x6c6f4361,0x0000726f,0x00030005,0x00000015,0x00565561,0x00060005, - 0x00000019,0x505f6c67,0x65567265,0x78657472,0x00000000,0x00060006,0x00000019,0x00000000, - 0x505f6c67,0x7469736f,0x006e6f69,0x00030005,0x0000001b,0x00000000,0x00040005,0x0000001c, - 0x736f5061,0x00000000,0x00060005,0x0000001e,0x73755075,0x6e6f4368,0x6e617473,0x00000074, - 0x00050006,0x0000001e,0x00000000,0x61635375,0x0000656c,0x00060006,0x0000001e,0x00000001, - 0x61725475,0x616c736e,0x00006574,0x00030005,0x00000020,0x00006370,0x00040047,0x0000000b, - 0x0000001e,0x00000000,0x00040047,0x0000000f,0x0000001e,0x00000002,0x00040047,0x00000015, - 0x0000001e,0x00000001,0x00050048,0x00000019,0x00000000,0x0000000b,0x00000000,0x00030047, - 0x00000019,0x00000002,0x00040047,0x0000001c,0x0000001e,0x00000000,0x00050048,0x0000001e, - 0x00000000,0x00000023,0x00000000,0x00050048,0x0000001e,0x00000001,0x00000023,0x00000008, - 0x00030047,0x0000001e,0x00000002,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002, - 0x00030016,0x00000006,0x00000020,0x00040017,0x00000007,0x00000006,0x00000004,0x00040017, - 0x00000008,0x00000006,0x00000002,0x0004001e,0x00000009,0x00000007,0x00000008,0x00040020, - 0x0000000a,0x00000003,0x00000009,0x0004003b,0x0000000a,0x0000000b,0x00000003,0x00040015, - 0x0000000c,0x00000020,0x00000001,0x0004002b,0x0000000c,0x0000000d,0x00000000,0x00040020, - 0x0000000e,0x00000001,0x00000007,0x0004003b,0x0000000e,0x0000000f,0x00000001,0x00040020, - 0x00000011,0x00000003,0x00000007,0x0004002b,0x0000000c,0x00000013,0x00000001,0x00040020, - 0x00000014,0x00000001,0x00000008,0x0004003b,0x00000014,0x00000015,0x00000001,0x00040020, - 0x00000017,0x00000003,0x00000008,0x0003001e,0x00000019,0x00000007,0x00040020,0x0000001a, - 0x00000003,0x00000019,0x0004003b,0x0000001a,0x0000001b,0x00000003,0x0004003b,0x00000014, - 0x0000001c,0x00000001,0x0004001e,0x0000001e,0x00000008,0x00000008,0x00040020,0x0000001f, - 0x00000009,0x0000001e,0x0004003b,0x0000001f,0x00000020,0x00000009,0x00040020,0x00000021, - 0x00000009,0x00000008,0x0004002b,0x00000006,0x00000028,0x00000000,0x0004002b,0x00000006, - 0x00000029,0x3f800000,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8, - 0x00000005,0x0004003d,0x00000007,0x00000010,0x0000000f,0x00050041,0x00000011,0x00000012, - 0x0000000b,0x0000000d,0x0003003e,0x00000012,0x00000010,0x0004003d,0x00000008,0x00000016, - 0x00000015,0x00050041,0x00000017,0x00000018,0x0000000b,0x00000013,0x0003003e,0x00000018, - 0x00000016,0x0004003d,0x00000008,0x0000001d,0x0000001c,0x00050041,0x00000021,0x00000022, - 0x00000020,0x0000000d,0x0004003d,0x00000008,0x00000023,0x00000022,0x00050085,0x00000008, - 0x00000024,0x0000001d,0x00000023,0x00050041,0x00000021,0x00000025,0x00000020,0x00000013, - 0x0004003d,0x00000008,0x00000026,0x00000025,0x00050081,0x00000008,0x00000027,0x00000024, - 0x00000026,0x00050051,0x00000006,0x0000002a,0x00000027,0x00000000,0x00050051,0x00000006, - 0x0000002b,0x00000027,0x00000001,0x00070050,0x00000007,0x0000002c,0x0000002a,0x0000002b, - 0x00000028,0x00000029,0x00050041,0x00000011,0x0000002d,0x0000001b,0x0000000d,0x0003003e, - 0x0000002d,0x0000002c,0x000100fd,0x00010038 -}; - -// glsl_shader.frag, compiled with: -// # glslangValidator -V -x -o glsl_shader.frag.u32 glsl_shader.frag -/* -#version 450 core -layout(location = 0) out vec4 fColor; -layout(set=0, binding=0) uniform sampler2D sTexture; -layout(location = 0) in struct { vec4 Color; vec2 UV; } In; -void main() -{ - fColor = In.Color * texture(sTexture, In.UV.st); -} -*/ -static uint32_t __glsl_shader_frag_spv[] = -{ - 0x07230203,0x00010000,0x00080001,0x0000001e,0x00000000,0x00020011,0x00000001,0x0006000b, - 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, - 0x0007000f,0x00000004,0x00000004,0x6e69616d,0x00000000,0x00000009,0x0000000d,0x00030010, - 0x00000004,0x00000007,0x00030003,0x00000002,0x000001c2,0x00040005,0x00000004,0x6e69616d, - 0x00000000,0x00040005,0x00000009,0x6c6f4366,0x0000726f,0x00030005,0x0000000b,0x00000000, - 0x00050006,0x0000000b,0x00000000,0x6f6c6f43,0x00000072,0x00040006,0x0000000b,0x00000001, - 0x00005655,0x00030005,0x0000000d,0x00006e49,0x00050005,0x00000016,0x78655473,0x65727574, - 0x00000000,0x00040047,0x00000009,0x0000001e,0x00000000,0x00040047,0x0000000d,0x0000001e, - 0x00000000,0x00040047,0x00000016,0x00000022,0x00000000,0x00040047,0x00000016,0x00000021, - 0x00000000,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006, - 0x00000020,0x00040017,0x00000007,0x00000006,0x00000004,0x00040020,0x00000008,0x00000003, - 0x00000007,0x0004003b,0x00000008,0x00000009,0x00000003,0x00040017,0x0000000a,0x00000006, - 0x00000002,0x0004001e,0x0000000b,0x00000007,0x0000000a,0x00040020,0x0000000c,0x00000001, - 0x0000000b,0x0004003b,0x0000000c,0x0000000d,0x00000001,0x00040015,0x0000000e,0x00000020, - 0x00000001,0x0004002b,0x0000000e,0x0000000f,0x00000000,0x00040020,0x00000010,0x00000001, - 0x00000007,0x00090019,0x00000013,0x00000006,0x00000001,0x00000000,0x00000000,0x00000000, - 0x00000001,0x00000000,0x0003001b,0x00000014,0x00000013,0x00040020,0x00000015,0x00000000, - 0x00000014,0x0004003b,0x00000015,0x00000016,0x00000000,0x0004002b,0x0000000e,0x00000018, - 0x00000001,0x00040020,0x00000019,0x00000001,0x0000000a,0x00050036,0x00000002,0x00000004, - 0x00000000,0x00000003,0x000200f8,0x00000005,0x00050041,0x00000010,0x00000011,0x0000000d, - 0x0000000f,0x0004003d,0x00000007,0x00000012,0x00000011,0x0004003d,0x00000014,0x00000017, - 0x00000016,0x00050041,0x00000019,0x0000001a,0x0000000d,0x00000018,0x0004003d,0x0000000a, - 0x0000001b,0x0000001a,0x00050057,0x00000007,0x0000001c,0x00000017,0x0000001b,0x00050085, - 0x00000007,0x0000001d,0x00000012,0x0000001c,0x0003003e,0x00000009,0x0000001d,0x000100fd, - 0x00010038 -}; - -//----------------------------------------------------------------------------- -// FUNCTIONS -//----------------------------------------------------------------------------- - -static uint32_t ImGui_ImplVulkan_MemoryType(VkMemoryPropertyFlags properties, uint32_t type_bits) -{ - ImGui_ImplVulkan_InitInfo* v = &g_VulkanInitInfo; - VkPhysicalDeviceMemoryProperties prop; - vkGetPhysicalDeviceMemoryProperties(v->PhysicalDevice, &prop); - for (uint32_t i = 0; i < prop.memoryTypeCount; i++) - if ((prop.memoryTypes[i].propertyFlags & properties) == properties && type_bits & (1<CheckVkResultFn) - v->CheckVkResultFn(err); -} - -static void CreateOrResizeBuffer(VkBuffer& buffer, VkDeviceMemory& buffer_memory, VkDeviceSize& p_buffer_size, size_t new_size, VkBufferUsageFlagBits usage) -{ - ImGui_ImplVulkan_InitInfo* v = &g_VulkanInitInfo; - VkResult err; - if (buffer != VK_NULL_HANDLE) - vkDestroyBuffer(v->Device, buffer, v->Allocator); - if (buffer_memory != VK_NULL_HANDLE) - vkFreeMemory(v->Device, buffer_memory, v->Allocator); - - VkDeviceSize vertex_buffer_size_aligned = ((new_size - 1) / g_BufferMemoryAlignment + 1) * g_BufferMemoryAlignment; - VkBufferCreateInfo buffer_info = {}; - buffer_info.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO; - buffer_info.size = vertex_buffer_size_aligned; - buffer_info.usage = usage; - buffer_info.sharingMode = VK_SHARING_MODE_EXCLUSIVE; - err = vkCreateBuffer(v->Device, &buffer_info, v->Allocator, &buffer); - check_vk_result(err); - - VkMemoryRequirements req; - vkGetBufferMemoryRequirements(v->Device, buffer, &req); - g_BufferMemoryAlignment = (g_BufferMemoryAlignment > req.alignment) ? g_BufferMemoryAlignment : req.alignment; - VkMemoryAllocateInfo alloc_info = {}; - alloc_info.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO; - alloc_info.allocationSize = req.size; - alloc_info.memoryTypeIndex = ImGui_ImplVulkan_MemoryType(VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT, req.memoryTypeBits); - err = vkAllocateMemory(v->Device, &alloc_info, v->Allocator, &buffer_memory); - check_vk_result(err); - - err = vkBindBufferMemory(v->Device, buffer, buffer_memory, 0); - check_vk_result(err); - p_buffer_size = new_size; -} - -static void ImGui_ImplVulkan_SetupRenderState(ImDrawData* draw_data, VkCommandBuffer command_buffer, ImGui_ImplVulkanH_FrameRenderBuffers* rb, int fb_width, int fb_height) -{ - // Bind pipeline and descriptor sets: - { - vkCmdBindPipeline(command_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS, g_Pipeline); - VkDescriptorSet desc_set[1] = { g_DescriptorSet }; - vkCmdBindDescriptorSets(command_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS, g_PipelineLayout, 0, 1, desc_set, 0, NULL); - } - - // Bind Vertex And Index Buffer: - { - VkBuffer vertex_buffers[1] = { rb->VertexBuffer }; - VkDeviceSize vertex_offset[1] = { 0 }; - vkCmdBindVertexBuffers(command_buffer, 0, 1, vertex_buffers, vertex_offset); - vkCmdBindIndexBuffer(command_buffer, rb->IndexBuffer, 0, sizeof(ImDrawIdx) == 2 ? VK_INDEX_TYPE_UINT16 : VK_INDEX_TYPE_UINT32); - } - - // Setup viewport: - { - VkViewport viewport; - viewport.x = 0; - viewport.y = 0; - viewport.width = (float)fb_width; - viewport.height = (float)fb_height; - viewport.minDepth = 0.0f; - viewport.maxDepth = 1.0f; - vkCmdSetViewport(command_buffer, 0, 1, &viewport); - } - - // Setup scale and translation: - // Our visible imgui space lies from draw_data->DisplayPps (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayPos is (0,0) for single viewport apps. - { - float scale[2]; - scale[0] = 2.0f / draw_data->DisplaySize.x; - scale[1] = 2.0f / draw_data->DisplaySize.y; - float translate[2]; - translate[0] = -1.0f - draw_data->DisplayPos.x * scale[0]; - translate[1] = -1.0f - draw_data->DisplayPos.y * scale[1]; - vkCmdPushConstants(command_buffer, g_PipelineLayout, VK_SHADER_STAGE_VERTEX_BIT, sizeof(float) * 0, sizeof(float) * 2, scale); - vkCmdPushConstants(command_buffer, g_PipelineLayout, VK_SHADER_STAGE_VERTEX_BIT, sizeof(float) * 2, sizeof(float) * 2, translate); - } -} - -// Render function -// (this used to be set in io.RenderDrawListsFn and called by ImGui::Render(), but you can now call this directly from your main loop) -void ImGui_ImplVulkan_RenderDrawData(ImDrawData* draw_data, VkCommandBuffer command_buffer) -{ - // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) - int fb_width = (int)(draw_data->DisplaySize.x * draw_data->FramebufferScale.x); - int fb_height = (int)(draw_data->DisplaySize.y * draw_data->FramebufferScale.y); - if (fb_width <= 0 || fb_height <= 0 || draw_data->TotalVtxCount == 0) - return; - - ImGui_ImplVulkan_InitInfo* v = &g_VulkanInitInfo; - - // Allocate array to store enough vertex/index buffers - ImGui_ImplVulkanH_WindowRenderBuffers* wrb = &g_MainWindowRenderBuffers; - if (wrb->FrameRenderBuffers == NULL) - { - wrb->Index = 0; - wrb->Count = v->ImageCount; - wrb->FrameRenderBuffers = (ImGui_ImplVulkanH_FrameRenderBuffers*)IM_ALLOC(sizeof(ImGui_ImplVulkanH_FrameRenderBuffers) * wrb->Count); - memset(wrb->FrameRenderBuffers, 0, sizeof(ImGui_ImplVulkanH_FrameRenderBuffers) * wrb->Count); - } - IM_ASSERT(wrb->Count == v->ImageCount); - wrb->Index = (wrb->Index + 1) % wrb->Count; - ImGui_ImplVulkanH_FrameRenderBuffers* rb = &wrb->FrameRenderBuffers[wrb->Index]; - - VkResult err; - - // Create or resize the vertex/index buffers - size_t vertex_size = draw_data->TotalVtxCount * sizeof(ImDrawVert); - size_t index_size = draw_data->TotalIdxCount * sizeof(ImDrawIdx); - if (rb->VertexBuffer == VK_NULL_HANDLE || rb->VertexBufferSize < vertex_size) - CreateOrResizeBuffer(rb->VertexBuffer, rb->VertexBufferMemory, rb->VertexBufferSize, vertex_size, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT); - if (rb->IndexBuffer == VK_NULL_HANDLE || rb->IndexBufferSize < index_size) - CreateOrResizeBuffer(rb->IndexBuffer, rb->IndexBufferMemory, rb->IndexBufferSize, index_size, VK_BUFFER_USAGE_INDEX_BUFFER_BIT); - - // Upload vertex/index data into a single contiguous GPU buffer - { - ImDrawVert* vtx_dst = NULL; - ImDrawIdx* idx_dst = NULL; - err = vkMapMemory(v->Device, rb->VertexBufferMemory, 0, vertex_size, 0, (void**)(&vtx_dst)); - check_vk_result(err); - err = vkMapMemory(v->Device, rb->IndexBufferMemory, 0, index_size, 0, (void**)(&idx_dst)); - check_vk_result(err); - for (int n = 0; n < draw_data->CmdListsCount; n++) - { - const ImDrawList* cmd_list = draw_data->CmdLists[n]; - memcpy(vtx_dst, cmd_list->VtxBuffer.Data, cmd_list->VtxBuffer.Size * sizeof(ImDrawVert)); - memcpy(idx_dst, cmd_list->IdxBuffer.Data, cmd_list->IdxBuffer.Size * sizeof(ImDrawIdx)); - vtx_dst += cmd_list->VtxBuffer.Size; - idx_dst += cmd_list->IdxBuffer.Size; - } - VkMappedMemoryRange range[2] = {}; - range[0].sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE; - range[0].memory = rb->VertexBufferMemory; - range[0].size = VK_WHOLE_SIZE; - range[1].sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE; - range[1].memory = rb->IndexBufferMemory; - range[1].size = VK_WHOLE_SIZE; - err = vkFlushMappedMemoryRanges(v->Device, 2, range); - check_vk_result(err); - vkUnmapMemory(v->Device, rb->VertexBufferMemory); - vkUnmapMemory(v->Device, rb->IndexBufferMemory); - } - - // Setup desired Vulkan state - ImGui_ImplVulkan_SetupRenderState(draw_data, command_buffer, rb, fb_width, fb_height); - - // Will project scissor/clipping rectangles into framebuffer space - ImVec2 clip_off = draw_data->DisplayPos; // (0,0) unless using multi-viewports - ImVec2 clip_scale = draw_data->FramebufferScale; // (1,1) unless using retina display which are often (2,2) - - // Render command lists - // (Because we merged all buffers into a single one, we maintain our own offset into them) - int global_vtx_offset = 0; - int global_idx_offset = 0; - for (int n = 0; n < draw_data->CmdListsCount; n++) - { - const ImDrawList* cmd_list = draw_data->CmdLists[n]; - for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++) - { - const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i]; - if (pcmd->UserCallback != NULL) - { - // User callback, registered via ImDrawList::AddCallback() - // (ImDrawCallback_ResetRenderState is a special callback value used by the user to request the renderer to reset render state.) - if (pcmd->UserCallback == ImDrawCallback_ResetRenderState) - ImGui_ImplVulkan_SetupRenderState(draw_data, command_buffer, rb, fb_width, fb_height); - else - pcmd->UserCallback(cmd_list, pcmd); - } - else - { - // Project scissor/clipping rectangles into framebuffer space - ImVec4 clip_rect; - clip_rect.x = (pcmd->ClipRect.x - clip_off.x) * clip_scale.x; - clip_rect.y = (pcmd->ClipRect.y - clip_off.y) * clip_scale.y; - clip_rect.z = (pcmd->ClipRect.z - clip_off.x) * clip_scale.x; - clip_rect.w = (pcmd->ClipRect.w - clip_off.y) * clip_scale.y; - - if (clip_rect.x < fb_width && clip_rect.y < fb_height && clip_rect.z >= 0.0f && clip_rect.w >= 0.0f) - { - // Negative offsets are illegal for vkCmdSetScissor - if (clip_rect.x < 0.0f) - clip_rect.x = 0.0f; - if (clip_rect.y < 0.0f) - clip_rect.y = 0.0f; - - // Apply scissor/clipping rectangle - VkRect2D scissor; - scissor.offset.x = (int32_t)(clip_rect.x); - scissor.offset.y = (int32_t)(clip_rect.y); - scissor.extent.width = (uint32_t)(clip_rect.z - clip_rect.x); - scissor.extent.height = (uint32_t)(clip_rect.w - clip_rect.y); - vkCmdSetScissor(command_buffer, 0, 1, &scissor); - - // Draw - vkCmdDrawIndexed(command_buffer, pcmd->ElemCount, 1, pcmd->IdxOffset + global_idx_offset, pcmd->VtxOffset + global_vtx_offset, 0); - } - } - } - global_idx_offset += cmd_list->IdxBuffer.Size; - global_vtx_offset += cmd_list->VtxBuffer.Size; - } -} - -bool ImGui_ImplVulkan_CreateFontsTexture(VkCommandBuffer command_buffer) -{ - ImGui_ImplVulkan_InitInfo* v = &g_VulkanInitInfo; - ImGuiIO& io = ImGui::GetIO(); - - unsigned char* pixels; - int width, height; - io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); - size_t upload_size = width*height*4*sizeof(char); - - VkResult err; - - // Create the Image: - { - VkImageCreateInfo info = {}; - info.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO; - info.imageType = VK_IMAGE_TYPE_2D; - info.format = VK_FORMAT_R8G8B8A8_UNORM; - info.extent.width = width; - info.extent.height = height; - info.extent.depth = 1; - info.mipLevels = 1; - info.arrayLayers = 1; - info.samples = VK_SAMPLE_COUNT_1_BIT; - info.tiling = VK_IMAGE_TILING_OPTIMAL; - info.usage = VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT; - info.sharingMode = VK_SHARING_MODE_EXCLUSIVE; - info.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; - err = vkCreateImage(v->Device, &info, v->Allocator, &g_FontImage); - check_vk_result(err); - VkMemoryRequirements req; - vkGetImageMemoryRequirements(v->Device, g_FontImage, &req); - VkMemoryAllocateInfo alloc_info = {}; - alloc_info.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO; - alloc_info.allocationSize = req.size; - alloc_info.memoryTypeIndex = ImGui_ImplVulkan_MemoryType(VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, req.memoryTypeBits); - err = vkAllocateMemory(v->Device, &alloc_info, v->Allocator, &g_FontMemory); - check_vk_result(err); - err = vkBindImageMemory(v->Device, g_FontImage, g_FontMemory, 0); - check_vk_result(err); - } - - // Create the Image View: - { - VkImageViewCreateInfo info = {}; - info.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; - info.image = g_FontImage; - info.viewType = VK_IMAGE_VIEW_TYPE_2D; - info.format = VK_FORMAT_R8G8B8A8_UNORM; - info.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; - info.subresourceRange.levelCount = 1; - info.subresourceRange.layerCount = 1; - err = vkCreateImageView(v->Device, &info, v->Allocator, &g_FontView); - check_vk_result(err); - } - - // Update the Descriptor Set: - { - VkDescriptorImageInfo desc_image[1] = {}; - desc_image[0].sampler = g_FontSampler; - desc_image[0].imageView = g_FontView; - desc_image[0].imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; - VkWriteDescriptorSet write_desc[1] = {}; - write_desc[0].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; - write_desc[0].dstSet = g_DescriptorSet; - write_desc[0].descriptorCount = 1; - write_desc[0].descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; - write_desc[0].pImageInfo = desc_image; - vkUpdateDescriptorSets(v->Device, 1, write_desc, 0, NULL); - } - - // Create the Upload Buffer: - { - VkBufferCreateInfo buffer_info = {}; - buffer_info.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO; - buffer_info.size = upload_size; - buffer_info.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT; - buffer_info.sharingMode = VK_SHARING_MODE_EXCLUSIVE; - err = vkCreateBuffer(v->Device, &buffer_info, v->Allocator, &g_UploadBuffer); - check_vk_result(err); - VkMemoryRequirements req; - vkGetBufferMemoryRequirements(v->Device, g_UploadBuffer, &req); - g_BufferMemoryAlignment = (g_BufferMemoryAlignment > req.alignment) ? g_BufferMemoryAlignment : req.alignment; - VkMemoryAllocateInfo alloc_info = {}; - alloc_info.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO; - alloc_info.allocationSize = req.size; - alloc_info.memoryTypeIndex = ImGui_ImplVulkan_MemoryType(VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT, req.memoryTypeBits); - err = vkAllocateMemory(v->Device, &alloc_info, v->Allocator, &g_UploadBufferMemory); - check_vk_result(err); - err = vkBindBufferMemory(v->Device, g_UploadBuffer, g_UploadBufferMemory, 0); - check_vk_result(err); - } - - // Upload to Buffer: - { - char* map = NULL; - err = vkMapMemory(v->Device, g_UploadBufferMemory, 0, upload_size, 0, (void**)(&map)); - check_vk_result(err); - memcpy(map, pixels, upload_size); - VkMappedMemoryRange range[1] = {}; - range[0].sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE; - range[0].memory = g_UploadBufferMemory; - range[0].size = upload_size; - err = vkFlushMappedMemoryRanges(v->Device, 1, range); - check_vk_result(err); - vkUnmapMemory(v->Device, g_UploadBufferMemory); - } - - // Copy to Image: - { - VkImageMemoryBarrier copy_barrier[1] = {}; - copy_barrier[0].sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; - copy_barrier[0].dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; - copy_barrier[0].oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; - copy_barrier[0].newLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; - copy_barrier[0].srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; - copy_barrier[0].dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; - copy_barrier[0].image = g_FontImage; - copy_barrier[0].subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; - copy_barrier[0].subresourceRange.levelCount = 1; - copy_barrier[0].subresourceRange.layerCount = 1; - vkCmdPipelineBarrier(command_buffer, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 0, NULL, 0, NULL, 1, copy_barrier); - - VkBufferImageCopy region = {}; - region.imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; - region.imageSubresource.layerCount = 1; - region.imageExtent.width = width; - region.imageExtent.height = height; - region.imageExtent.depth = 1; - vkCmdCopyBufferToImage(command_buffer, g_UploadBuffer, g_FontImage, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, ®ion); - - VkImageMemoryBarrier use_barrier[1] = {}; - use_barrier[0].sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; - use_barrier[0].srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; - use_barrier[0].dstAccessMask = VK_ACCESS_SHADER_READ_BIT; - use_barrier[0].oldLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; - use_barrier[0].newLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; - use_barrier[0].srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; - use_barrier[0].dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; - use_barrier[0].image = g_FontImage; - use_barrier[0].subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; - use_barrier[0].subresourceRange.levelCount = 1; - use_barrier[0].subresourceRange.layerCount = 1; - vkCmdPipelineBarrier(command_buffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, 0, 0, NULL, 0, NULL, 1, use_barrier); - } - - // Store our identifier - io.Fonts->TexID = (ImTextureID)(intptr_t)g_FontImage; - - return true; -} - -bool ImGui_ImplVulkan_CreateDeviceObjects() -{ - ImGui_ImplVulkan_InitInfo* v = &g_VulkanInitInfo; - VkResult err; - VkShaderModule vert_module; - VkShaderModule frag_module; - - // Create The Shader Modules: - { - VkShaderModuleCreateInfo vert_info = {}; - vert_info.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; - vert_info.codeSize = sizeof(__glsl_shader_vert_spv); - vert_info.pCode = (uint32_t*)__glsl_shader_vert_spv; - err = vkCreateShaderModule(v->Device, &vert_info, v->Allocator, &vert_module); - check_vk_result(err); - VkShaderModuleCreateInfo frag_info = {}; - frag_info.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; - frag_info.codeSize = sizeof(__glsl_shader_frag_spv); - frag_info.pCode = (uint32_t*)__glsl_shader_frag_spv; - err = vkCreateShaderModule(v->Device, &frag_info, v->Allocator, &frag_module); - check_vk_result(err); - } - - if (!g_FontSampler) - { - VkSamplerCreateInfo info = {}; - info.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO; - info.magFilter = VK_FILTER_LINEAR; - info.minFilter = VK_FILTER_LINEAR; - info.mipmapMode = VK_SAMPLER_MIPMAP_MODE_LINEAR; - info.addressModeU = VK_SAMPLER_ADDRESS_MODE_REPEAT; - info.addressModeV = VK_SAMPLER_ADDRESS_MODE_REPEAT; - info.addressModeW = VK_SAMPLER_ADDRESS_MODE_REPEAT; - info.minLod = -1000; - info.maxLod = 1000; - info.maxAnisotropy = 1.0f; - err = vkCreateSampler(v->Device, &info, v->Allocator, &g_FontSampler); - check_vk_result(err); - } - - if (!g_DescriptorSetLayout) - { - VkSampler sampler[1] = {g_FontSampler}; - VkDescriptorSetLayoutBinding binding[1] = {}; - binding[0].descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; - binding[0].descriptorCount = 1; - binding[0].stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT; - binding[0].pImmutableSamplers = sampler; - VkDescriptorSetLayoutCreateInfo info = {}; - info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO; - info.bindingCount = 1; - info.pBindings = binding; - err = vkCreateDescriptorSetLayout(v->Device, &info, v->Allocator, &g_DescriptorSetLayout); - check_vk_result(err); - } - - // Create Descriptor Set: - { - VkDescriptorSetAllocateInfo alloc_info = {}; - alloc_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO; - alloc_info.descriptorPool = v->DescriptorPool; - alloc_info.descriptorSetCount = 1; - alloc_info.pSetLayouts = &g_DescriptorSetLayout; - err = vkAllocateDescriptorSets(v->Device, &alloc_info, &g_DescriptorSet); - check_vk_result(err); - } - - if (!g_PipelineLayout) - { - // Constants: we are using 'vec2 offset' and 'vec2 scale' instead of a full 3d projection matrix - VkPushConstantRange push_constants[1] = {}; - push_constants[0].stageFlags = VK_SHADER_STAGE_VERTEX_BIT; - push_constants[0].offset = sizeof(float) * 0; - push_constants[0].size = sizeof(float) * 4; - VkDescriptorSetLayout set_layout[1] = { g_DescriptorSetLayout }; - VkPipelineLayoutCreateInfo layout_info = {}; - layout_info.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO; - layout_info.setLayoutCount = 1; - layout_info.pSetLayouts = set_layout; - layout_info.pushConstantRangeCount = 1; - layout_info.pPushConstantRanges = push_constants; - err = vkCreatePipelineLayout(v->Device, &layout_info, v->Allocator, &g_PipelineLayout); - check_vk_result(err); - } - - VkPipelineShaderStageCreateInfo stage[2] = {}; - stage[0].sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; - stage[0].stage = VK_SHADER_STAGE_VERTEX_BIT; - stage[0].module = vert_module; - stage[0].pName = "main"; - stage[1].sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; - stage[1].stage = VK_SHADER_STAGE_FRAGMENT_BIT; - stage[1].module = frag_module; - stage[1].pName = "main"; - - VkVertexInputBindingDescription binding_desc[1] = {}; - binding_desc[0].stride = sizeof(ImDrawVert); - binding_desc[0].inputRate = VK_VERTEX_INPUT_RATE_VERTEX; - - VkVertexInputAttributeDescription attribute_desc[3] = {}; - attribute_desc[0].location = 0; - attribute_desc[0].binding = binding_desc[0].binding; - attribute_desc[0].format = VK_FORMAT_R32G32_SFLOAT; - attribute_desc[0].offset = IM_OFFSETOF(ImDrawVert, pos); - attribute_desc[1].location = 1; - attribute_desc[1].binding = binding_desc[0].binding; - attribute_desc[1].format = VK_FORMAT_R32G32_SFLOAT; - attribute_desc[1].offset = IM_OFFSETOF(ImDrawVert, uv); - attribute_desc[2].location = 2; - attribute_desc[2].binding = binding_desc[0].binding; - attribute_desc[2].format = VK_FORMAT_R8G8B8A8_UNORM; - attribute_desc[2].offset = IM_OFFSETOF(ImDrawVert, col); - - VkPipelineVertexInputStateCreateInfo vertex_info = {}; - vertex_info.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO; - vertex_info.vertexBindingDescriptionCount = 1; - vertex_info.pVertexBindingDescriptions = binding_desc; - vertex_info.vertexAttributeDescriptionCount = 3; - vertex_info.pVertexAttributeDescriptions = attribute_desc; - - VkPipelineInputAssemblyStateCreateInfo ia_info = {}; - ia_info.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO; - ia_info.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; - - VkPipelineViewportStateCreateInfo viewport_info = {}; - viewport_info.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO; - viewport_info.viewportCount = 1; - viewport_info.scissorCount = 1; - - VkPipelineRasterizationStateCreateInfo raster_info = {}; - raster_info.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO; - raster_info.polygonMode = VK_POLYGON_MODE_FILL; - raster_info.cullMode = VK_CULL_MODE_NONE; - raster_info.frontFace = VK_FRONT_FACE_COUNTER_CLOCKWISE; - raster_info.lineWidth = 1.0f; - - VkPipelineMultisampleStateCreateInfo ms_info = {}; - ms_info.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO; - if (v->MSAASamples != 0) - ms_info.rasterizationSamples = v->MSAASamples; - else - ms_info.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT; - - VkPipelineColorBlendAttachmentState color_attachment[1] = {}; - color_attachment[0].blendEnable = VK_TRUE; - color_attachment[0].srcColorBlendFactor = VK_BLEND_FACTOR_SRC_ALPHA; - color_attachment[0].dstColorBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA; - color_attachment[0].colorBlendOp = VK_BLEND_OP_ADD; - color_attachment[0].srcAlphaBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA; - color_attachment[0].dstAlphaBlendFactor = VK_BLEND_FACTOR_ZERO; - color_attachment[0].alphaBlendOp = VK_BLEND_OP_ADD; - color_attachment[0].colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT; - - VkPipelineDepthStencilStateCreateInfo depth_info = {}; - depth_info.sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO; - - VkPipelineColorBlendStateCreateInfo blend_info = {}; - blend_info.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO; - blend_info.attachmentCount = 1; - blend_info.pAttachments = color_attachment; - - VkDynamicState dynamic_states[2] = { VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR }; - VkPipelineDynamicStateCreateInfo dynamic_state = {}; - dynamic_state.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO; - dynamic_state.dynamicStateCount = (uint32_t)IM_ARRAYSIZE(dynamic_states); - dynamic_state.pDynamicStates = dynamic_states; - - VkGraphicsPipelineCreateInfo info = {}; - info.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO; - info.flags = g_PipelineCreateFlags; - info.stageCount = 2; - info.pStages = stage; - info.pVertexInputState = &vertex_info; - info.pInputAssemblyState = &ia_info; - info.pViewportState = &viewport_info; - info.pRasterizationState = &raster_info; - info.pMultisampleState = &ms_info; - info.pDepthStencilState = &depth_info; - info.pColorBlendState = &blend_info; - info.pDynamicState = &dynamic_state; - info.layout = g_PipelineLayout; - info.renderPass = g_RenderPass; - err = vkCreateGraphicsPipelines(v->Device, v->PipelineCache, 1, &info, v->Allocator, &g_Pipeline); - check_vk_result(err); - - vkDestroyShaderModule(v->Device, vert_module, v->Allocator); - vkDestroyShaderModule(v->Device, frag_module, v->Allocator); - - return true; -} - -void ImGui_ImplVulkan_DestroyFontUploadObjects() -{ - ImGui_ImplVulkan_InitInfo* v = &g_VulkanInitInfo; - if (g_UploadBuffer) - { - vkDestroyBuffer(v->Device, g_UploadBuffer, v->Allocator); - g_UploadBuffer = VK_NULL_HANDLE; - } - if (g_UploadBufferMemory) - { - vkFreeMemory(v->Device, g_UploadBufferMemory, v->Allocator); - g_UploadBufferMemory = VK_NULL_HANDLE; - } -} - -void ImGui_ImplVulkan_DestroyDeviceObjects() -{ - ImGui_ImplVulkan_InitInfo* v = &g_VulkanInitInfo; - ImGui_ImplVulkanH_DestroyWindowRenderBuffers(v->Device, &g_MainWindowRenderBuffers, v->Allocator); - ImGui_ImplVulkan_DestroyFontUploadObjects(); - - if (g_FontView) { vkDestroyImageView(v->Device, g_FontView, v->Allocator); g_FontView = VK_NULL_HANDLE; } - if (g_FontImage) { vkDestroyImage(v->Device, g_FontImage, v->Allocator); g_FontImage = VK_NULL_HANDLE; } - if (g_FontMemory) { vkFreeMemory(v->Device, g_FontMemory, v->Allocator); g_FontMemory = VK_NULL_HANDLE; } - if (g_FontSampler) { vkDestroySampler(v->Device, g_FontSampler, v->Allocator); g_FontSampler = VK_NULL_HANDLE; } - if (g_DescriptorSetLayout) { vkDestroyDescriptorSetLayout(v->Device, g_DescriptorSetLayout, v->Allocator); g_DescriptorSetLayout = VK_NULL_HANDLE; } - if (g_PipelineLayout) { vkDestroyPipelineLayout(v->Device, g_PipelineLayout, v->Allocator); g_PipelineLayout = VK_NULL_HANDLE; } - if (g_Pipeline) { vkDestroyPipeline(v->Device, g_Pipeline, v->Allocator); g_Pipeline = VK_NULL_HANDLE; } -} - -bool ImGui_ImplVulkan_Init(ImGui_ImplVulkan_InitInfo* info, VkRenderPass render_pass) -{ - // Setup back-end capabilities flags - ImGuiIO& io = ImGui::GetIO(); - io.BackendRendererName = "imgui_impl_vulkan"; - io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset; // We can honor the ImDrawCmd::VtxOffset field, allowing for large meshes. - - IM_ASSERT(info->Instance != VK_NULL_HANDLE); - IM_ASSERT(info->PhysicalDevice != VK_NULL_HANDLE); - IM_ASSERT(info->Device != VK_NULL_HANDLE); - IM_ASSERT(info->Queue != VK_NULL_HANDLE); - IM_ASSERT(info->DescriptorPool != VK_NULL_HANDLE); - IM_ASSERT(info->MinImageCount >= 2); - IM_ASSERT(info->ImageCount >= info->MinImageCount); - IM_ASSERT(render_pass != VK_NULL_HANDLE); - - g_VulkanInitInfo = *info; - g_RenderPass = render_pass; - ImGui_ImplVulkan_CreateDeviceObjects(); - - return true; -} - -void ImGui_ImplVulkan_Shutdown() -{ - ImGui_ImplVulkan_DestroyDeviceObjects(); -} - -void ImGui_ImplVulkan_NewFrame() -{ -} - -void ImGui_ImplVulkan_SetMinImageCount(uint32_t min_image_count) -{ - IM_ASSERT(min_image_count >= 2); - if (g_VulkanInitInfo.MinImageCount == min_image_count) - return; - - ImGui_ImplVulkan_InitInfo* v = &g_VulkanInitInfo; - VkResult err = vkDeviceWaitIdle(v->Device); - check_vk_result(err); - ImGui_ImplVulkanH_DestroyWindowRenderBuffers(v->Device, &g_MainWindowRenderBuffers, v->Allocator); - g_VulkanInitInfo.MinImageCount = min_image_count; -} - - -//------------------------------------------------------------------------- -// Internal / Miscellaneous Vulkan Helpers -// (Used by example's main.cpp. Used by multi-viewport features. PROBABLY NOT used by your own app.) -//------------------------------------------------------------------------- -// You probably do NOT need to use or care about those functions. -// Those functions only exist because: -// 1) they facilitate the readability and maintenance of the multiple main.cpp examples files. -// 2) the upcoming multi-viewport feature will need them internally. -// Generally we avoid exposing any kind of superfluous high-level helpers in the bindings, -// but it is too much code to duplicate everywhere so we exceptionally expose them. -// -// Your engine/app will likely _already_ have code to setup all that stuff (swap chain, render pass, frame buffers, etc.). -// You may read this code to learn about Vulkan, but it is recommended you use you own custom tailored code to do equivalent work. -// (The ImGui_ImplVulkanH_XXX functions do not interact with any of the state used by the regular ImGui_ImplVulkan_XXX functions) -//------------------------------------------------------------------------- - -VkSurfaceFormatKHR ImGui_ImplVulkanH_SelectSurfaceFormat(VkPhysicalDevice physical_device, VkSurfaceKHR surface, const VkFormat* request_formats, int request_formats_count, VkColorSpaceKHR request_color_space) -{ - IM_ASSERT(request_formats != NULL); - IM_ASSERT(request_formats_count > 0); - - // Per Spec Format and View Format are expected to be the same unless VK_IMAGE_CREATE_MUTABLE_BIT was set at image creation - // Assuming that the default behavior is without setting this bit, there is no need for separate Swapchain image and image view format - // Additionally several new color spaces were introduced with Vulkan Spec v1.0.40, - // hence we must make sure that a format with the mostly available color space, VK_COLOR_SPACE_SRGB_NONLINEAR_KHR, is found and used. - uint32_t avail_count; - vkGetPhysicalDeviceSurfaceFormatsKHR(physical_device, surface, &avail_count, NULL); - ImVector avail_format; - avail_format.resize((int)avail_count); - vkGetPhysicalDeviceSurfaceFormatsKHR(physical_device, surface, &avail_count, avail_format.Data); - - // First check if only one format, VK_FORMAT_UNDEFINED, is available, which would imply that any format is available - if (avail_count == 1) - { - if (avail_format[0].format == VK_FORMAT_UNDEFINED) - { - VkSurfaceFormatKHR ret; - ret.format = request_formats[0]; - ret.colorSpace = request_color_space; - return ret; - } - else - { - // No point in searching another format - return avail_format[0]; - } - } - else - { - // Request several formats, the first found will be used - for (int request_i = 0; request_i < request_formats_count; request_i++) - for (uint32_t avail_i = 0; avail_i < avail_count; avail_i++) - if (avail_format[avail_i].format == request_formats[request_i] && avail_format[avail_i].colorSpace == request_color_space) - return avail_format[avail_i]; - - // If none of the requested image formats could be found, use the first available - return avail_format[0]; - } -} - -VkPresentModeKHR ImGui_ImplVulkanH_SelectPresentMode(VkPhysicalDevice physical_device, VkSurfaceKHR surface, const VkPresentModeKHR* request_modes, int request_modes_count) -{ - IM_ASSERT(request_modes != NULL); - IM_ASSERT(request_modes_count > 0); - - // Request a certain mode and confirm that it is available. If not use VK_PRESENT_MODE_FIFO_KHR which is mandatory - uint32_t avail_count = 0; - vkGetPhysicalDeviceSurfacePresentModesKHR(physical_device, surface, &avail_count, NULL); - ImVector avail_modes; - avail_modes.resize((int)avail_count); - vkGetPhysicalDeviceSurfacePresentModesKHR(physical_device, surface, &avail_count, avail_modes.Data); - //for (uint32_t avail_i = 0; avail_i < avail_count; avail_i++) - // printf("[vulkan] avail_modes[%d] = %d\n", avail_i, avail_modes[avail_i]); - - for (int request_i = 0; request_i < request_modes_count; request_i++) - for (uint32_t avail_i = 0; avail_i < avail_count; avail_i++) - if (request_modes[request_i] == avail_modes[avail_i]) - return request_modes[request_i]; - - return VK_PRESENT_MODE_FIFO_KHR; // Always available -} - -void ImGui_ImplVulkanH_CreateWindowCommandBuffers(VkPhysicalDevice physical_device, VkDevice device, ImGui_ImplVulkanH_Window* wd, uint32_t queue_family, const VkAllocationCallbacks* allocator) -{ - IM_ASSERT(physical_device != VK_NULL_HANDLE && device != VK_NULL_HANDLE); - (void)physical_device; - (void)allocator; - - // Create Command Buffers - VkResult err; - for (uint32_t i = 0; i < wd->ImageCount; i++) - { - ImGui_ImplVulkanH_Frame* fd = &wd->Frames[i]; - ImGui_ImplVulkanH_FrameSemaphores* fsd = &wd->FrameSemaphores[i]; - { - VkCommandPoolCreateInfo info = {}; - info.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO; - info.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT; - info.queueFamilyIndex = queue_family; - err = vkCreateCommandPool(device, &info, allocator, &fd->CommandPool); - check_vk_result(err); - } - { - VkCommandBufferAllocateInfo info = {}; - info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO; - info.commandPool = fd->CommandPool; - info.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY; - info.commandBufferCount = 1; - err = vkAllocateCommandBuffers(device, &info, &fd->CommandBuffer); - check_vk_result(err); - } - { - VkFenceCreateInfo info = {}; - info.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO; - info.flags = VK_FENCE_CREATE_SIGNALED_BIT; - err = vkCreateFence(device, &info, allocator, &fd->Fence); - check_vk_result(err); - } - { - VkSemaphoreCreateInfo info = {}; - info.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO; - err = vkCreateSemaphore(device, &info, allocator, &fsd->ImageAcquiredSemaphore); - check_vk_result(err); - err = vkCreateSemaphore(device, &info, allocator, &fsd->RenderCompleteSemaphore); - check_vk_result(err); - } - } -} - -int ImGui_ImplVulkanH_GetMinImageCountFromPresentMode(VkPresentModeKHR present_mode) -{ - if (present_mode == VK_PRESENT_MODE_MAILBOX_KHR) - return 3; - if (present_mode == VK_PRESENT_MODE_FIFO_KHR || present_mode == VK_PRESENT_MODE_FIFO_RELAXED_KHR) - return 2; - if (present_mode == VK_PRESENT_MODE_IMMEDIATE_KHR) - return 1; - IM_ASSERT(0); - return 1; -} - -// Also destroy old swap chain and in-flight frames data, if any. -void ImGui_ImplVulkanH_CreateWindowSwapChain(VkPhysicalDevice physical_device, VkDevice device, ImGui_ImplVulkanH_Window* wd, const VkAllocationCallbacks* allocator, int w, int h, uint32_t min_image_count) -{ - VkResult err; - VkSwapchainKHR old_swapchain = wd->Swapchain; - err = vkDeviceWaitIdle(device); - check_vk_result(err); - - // We don't use ImGui_ImplVulkanH_DestroyWindow() because we want to preserve the old swapchain to create the new one. - // Destroy old Framebuffer - for (uint32_t i = 0; i < wd->ImageCount; i++) - { - ImGui_ImplVulkanH_DestroyFrame(device, &wd->Frames[i], allocator); - ImGui_ImplVulkanH_DestroyFrameSemaphores(device, &wd->FrameSemaphores[i], allocator); - } - IM_FREE(wd->Frames); - IM_FREE(wd->FrameSemaphores); - wd->Frames = NULL; - wd->FrameSemaphores = NULL; - wd->ImageCount = 0; - if (wd->RenderPass) - vkDestroyRenderPass(device, wd->RenderPass, allocator); - - // If min image count was not specified, request different count of images dependent on selected present mode - if (min_image_count == 0) - min_image_count = ImGui_ImplVulkanH_GetMinImageCountFromPresentMode(wd->PresentMode); - - // Create Swapchain - { - VkSwapchainCreateInfoKHR info = {}; - info.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR; - info.surface = wd->Surface; - info.minImageCount = min_image_count; - info.imageFormat = wd->SurfaceFormat.format; - info.imageColorSpace = wd->SurfaceFormat.colorSpace; - info.imageArrayLayers = 1; - info.imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; - info.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE; // Assume that graphics family == present family - info.preTransform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR; - info.compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR; - info.presentMode = wd->PresentMode; - info.clipped = VK_TRUE; - info.oldSwapchain = old_swapchain; - VkSurfaceCapabilitiesKHR cap; - err = vkGetPhysicalDeviceSurfaceCapabilitiesKHR(physical_device, wd->Surface, &cap); - check_vk_result(err); - if (info.minImageCount < cap.minImageCount) - info.minImageCount = cap.minImageCount; - else if (cap.maxImageCount != 0 && info.minImageCount > cap.maxImageCount) - info.minImageCount = cap.maxImageCount; - - if (cap.currentExtent.width == 0xffffffff) - { - info.imageExtent.width = wd->Width = w; - info.imageExtent.height = wd->Height = h; - } - else - { - info.imageExtent.width = wd->Width = cap.currentExtent.width; - info.imageExtent.height = wd->Height = cap.currentExtent.height; - } - err = vkCreateSwapchainKHR(device, &info, allocator, &wd->Swapchain); - check_vk_result(err); - err = vkGetSwapchainImagesKHR(device, wd->Swapchain, &wd->ImageCount, NULL); - check_vk_result(err); - VkImage backbuffers[16] = {}; - IM_ASSERT(wd->ImageCount >= min_image_count); - IM_ASSERT(wd->ImageCount < IM_ARRAYSIZE(backbuffers)); - err = vkGetSwapchainImagesKHR(device, wd->Swapchain, &wd->ImageCount, backbuffers); - check_vk_result(err); - - IM_ASSERT(wd->Frames == NULL); - wd->Frames = (ImGui_ImplVulkanH_Frame*)IM_ALLOC(sizeof(ImGui_ImplVulkanH_Frame) * wd->ImageCount); - wd->FrameSemaphores = (ImGui_ImplVulkanH_FrameSemaphores*)IM_ALLOC(sizeof(ImGui_ImplVulkanH_FrameSemaphores) * wd->ImageCount); - memset(wd->Frames, 0, sizeof(wd->Frames[0]) * wd->ImageCount); - memset(wd->FrameSemaphores, 0, sizeof(wd->FrameSemaphores[0]) * wd->ImageCount); - for (uint32_t i = 0; i < wd->ImageCount; i++) - wd->Frames[i].Backbuffer = backbuffers[i]; - } - if (old_swapchain) - vkDestroySwapchainKHR(device, old_swapchain, allocator); - - // Create the Render Pass - { - VkAttachmentDescription attachment = {}; - attachment.format = wd->SurfaceFormat.format; - attachment.samples = VK_SAMPLE_COUNT_1_BIT; - attachment.loadOp = wd->ClearEnable ? VK_ATTACHMENT_LOAD_OP_CLEAR : VK_ATTACHMENT_LOAD_OP_DONT_CARE; - attachment.storeOp = VK_ATTACHMENT_STORE_OP_STORE; - attachment.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE; - attachment.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE; - attachment.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; - attachment.finalLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR; - VkAttachmentReference color_attachment = {}; - color_attachment.attachment = 0; - color_attachment.layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; - VkSubpassDescription subpass = {}; - subpass.pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS; - subpass.colorAttachmentCount = 1; - subpass.pColorAttachments = &color_attachment; - VkSubpassDependency dependency = {}; - dependency.srcSubpass = VK_SUBPASS_EXTERNAL; - dependency.dstSubpass = 0; - dependency.srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; - dependency.dstStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; - dependency.srcAccessMask = 0; - dependency.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; - VkRenderPassCreateInfo info = {}; - info.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO; - info.attachmentCount = 1; - info.pAttachments = &attachment; - info.subpassCount = 1; - info.pSubpasses = &subpass; - info.dependencyCount = 1; - info.pDependencies = &dependency; - err = vkCreateRenderPass(device, &info, allocator, &wd->RenderPass); - check_vk_result(err); - } - - // Create The Image Views - { - VkImageViewCreateInfo info = {}; - info.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; - info.viewType = VK_IMAGE_VIEW_TYPE_2D; - info.format = wd->SurfaceFormat.format; - info.components.r = VK_COMPONENT_SWIZZLE_R; - info.components.g = VK_COMPONENT_SWIZZLE_G; - info.components.b = VK_COMPONENT_SWIZZLE_B; - info.components.a = VK_COMPONENT_SWIZZLE_A; - VkImageSubresourceRange image_range = { VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1 }; - info.subresourceRange = image_range; - for (uint32_t i = 0; i < wd->ImageCount; i++) - { - ImGui_ImplVulkanH_Frame* fd = &wd->Frames[i]; - info.image = fd->Backbuffer; - err = vkCreateImageView(device, &info, allocator, &fd->BackbufferView); - check_vk_result(err); - } - } - - // Create Framebuffer - { - VkImageView attachment[1]; - VkFramebufferCreateInfo info = {}; - info.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO; - info.renderPass = wd->RenderPass; - info.attachmentCount = 1; - info.pAttachments = attachment; - info.width = wd->Width; - info.height = wd->Height; - info.layers = 1; - for (uint32_t i = 0; i < wd->ImageCount; i++) - { - ImGui_ImplVulkanH_Frame* fd = &wd->Frames[i]; - attachment[0] = fd->BackbufferView; - err = vkCreateFramebuffer(device, &info, allocator, &fd->Framebuffer); - check_vk_result(err); - } - } -} - -void ImGui_ImplVulkanH_CreateWindow(VkInstance instance, VkPhysicalDevice physical_device, VkDevice device, ImGui_ImplVulkanH_Window* wd, uint32_t queue_family, const VkAllocationCallbacks* allocator, int width, int height, uint32_t min_image_count) -{ - (void)instance; - ImGui_ImplVulkanH_CreateWindowSwapChain(physical_device, device, wd, allocator, width, height, min_image_count); - ImGui_ImplVulkanH_CreateWindowCommandBuffers(physical_device, device, wd, queue_family, allocator); -} - -void ImGui_ImplVulkanH_DestroyWindow(VkInstance instance, VkDevice device, ImGui_ImplVulkanH_Window* wd, const VkAllocationCallbacks* allocator) -{ - vkDeviceWaitIdle(device); // FIXME: We could wait on the Queue if we had the queue in wd-> (otherwise VulkanH functions can't use globals) - //vkQueueWaitIdle(g_Queue); - - for (uint32_t i = 0; i < wd->ImageCount; i++) - { - ImGui_ImplVulkanH_DestroyFrame(device, &wd->Frames[i], allocator); - ImGui_ImplVulkanH_DestroyFrameSemaphores(device, &wd->FrameSemaphores[i], allocator); - } - IM_FREE(wd->Frames); - IM_FREE(wd->FrameSemaphores); - wd->Frames = NULL; - wd->FrameSemaphores = NULL; - vkDestroyRenderPass(device, wd->RenderPass, allocator); - vkDestroySwapchainKHR(device, wd->Swapchain, allocator); - vkDestroySurfaceKHR(instance, wd->Surface, allocator); - - *wd = ImGui_ImplVulkanH_Window(); -} - -void ImGui_ImplVulkanH_DestroyFrame(VkDevice device, ImGui_ImplVulkanH_Frame* fd, const VkAllocationCallbacks* allocator) -{ - vkDestroyFence(device, fd->Fence, allocator); - vkFreeCommandBuffers(device, fd->CommandPool, 1, &fd->CommandBuffer); - vkDestroyCommandPool(device, fd->CommandPool, allocator); - fd->Fence = VK_NULL_HANDLE; - fd->CommandBuffer = VK_NULL_HANDLE; - fd->CommandPool = VK_NULL_HANDLE; - - vkDestroyImageView(device, fd->BackbufferView, allocator); - vkDestroyFramebuffer(device, fd->Framebuffer, allocator); -} - -void ImGui_ImplVulkanH_DestroyFrameSemaphores(VkDevice device, ImGui_ImplVulkanH_FrameSemaphores* fsd, const VkAllocationCallbacks* allocator) -{ - vkDestroySemaphore(device, fsd->ImageAcquiredSemaphore, allocator); - vkDestroySemaphore(device, fsd->RenderCompleteSemaphore, allocator); - fsd->ImageAcquiredSemaphore = fsd->RenderCompleteSemaphore = VK_NULL_HANDLE; -} - -void ImGui_ImplVulkanH_DestroyFrameRenderBuffers(VkDevice device, ImGui_ImplVulkanH_FrameRenderBuffers* buffers, const VkAllocationCallbacks* allocator) -{ - if (buffers->VertexBuffer) { vkDestroyBuffer(device, buffers->VertexBuffer, allocator); buffers->VertexBuffer = VK_NULL_HANDLE; } - if (buffers->VertexBufferMemory) { vkFreeMemory(device, buffers->VertexBufferMemory, allocator); buffers->VertexBufferMemory = VK_NULL_HANDLE; } - if (buffers->IndexBuffer) { vkDestroyBuffer(device, buffers->IndexBuffer, allocator); buffers->IndexBuffer = VK_NULL_HANDLE; } - if (buffers->IndexBufferMemory) { vkFreeMemory(device, buffers->IndexBufferMemory, allocator); buffers->IndexBufferMemory = VK_NULL_HANDLE; } - buffers->VertexBufferSize = 0; - buffers->IndexBufferSize = 0; -} - -void ImGui_ImplVulkanH_DestroyWindowRenderBuffers(VkDevice device, ImGui_ImplVulkanH_WindowRenderBuffers* buffers, const VkAllocationCallbacks* allocator) -{ - for (uint32_t n = 0; n < buffers->Count; n++) - ImGui_ImplVulkanH_DestroyFrameRenderBuffers(device, &buffers->FrameRenderBuffers[n], allocator); - IM_FREE(buffers->FrameRenderBuffers); - buffers->FrameRenderBuffers = NULL; - buffers->Index = 0; - buffers->Count = 0; -} diff --git a/cmake/imgui/examples/imgui_impl_vulkan.h b/cmake/imgui/examples/imgui_impl_vulkan.h deleted file mode 100644 index a74cdb5a..00000000 --- a/cmake/imgui/examples/imgui_impl_vulkan.h +++ /dev/null @@ -1,126 +0,0 @@ -// dear imgui: Renderer for Vulkan -// This needs to be used along with a Platform Binding (e.g. GLFW, SDL, Win32, custom..) - -// Implemented features: -// [X] Renderer: Support for large meshes (64k+ vertices) with 16-bit indices. -// Missing features: -// [ ] Renderer: User texture binding. Changes of ImTextureID aren't supported by this binding! See https://github.com/ocornut/imgui/pull/914 - -// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. -// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. -// https://github.com/ocornut/imgui - -// The aim of imgui_impl_vulkan.h/.cpp is to be usable in your engine without any modification. -// IF YOU FEEL YOU NEED TO MAKE ANY CHANGE TO THIS CODE, please share them and your feedback at https://github.com/ocornut/imgui/ - -// Important note to the reader who wish to integrate imgui_impl_vulkan.cpp/.h in their own engine/app. -// - Common ImGui_ImplVulkan_XXX functions and structures are used to interface with imgui_impl_vulkan.cpp/.h. -// You will use those if you want to use this rendering back-end in your engine/app. -// - Helper ImGui_ImplVulkanH_XXX functions and structures are only used by this example (main.cpp) and by -// the back-end itself (imgui_impl_vulkan.cpp), but should PROBABLY NOT be used by your own engine/app code. -// Read comments in imgui_impl_vulkan.h. - -#pragma once - -#include - -// Initialization data, for ImGui_ImplVulkan_Init() -// [Please zero-clear before use!] -struct ImGui_ImplVulkan_InitInfo -{ - VkInstance Instance; - VkPhysicalDevice PhysicalDevice; - VkDevice Device; - uint32_t QueueFamily; - VkQueue Queue; - VkPipelineCache PipelineCache; - VkDescriptorPool DescriptorPool; - uint32_t MinImageCount; // >= 2 - uint32_t ImageCount; // >= MinImageCount - VkSampleCountFlagBits MSAASamples; // >= VK_SAMPLE_COUNT_1_BIT - const VkAllocationCallbacks* Allocator; - void (*CheckVkResultFn)(VkResult err); -}; - -// Called by user code -IMGUI_IMPL_API bool ImGui_ImplVulkan_Init(ImGui_ImplVulkan_InitInfo* info, VkRenderPass render_pass); -IMGUI_IMPL_API void ImGui_ImplVulkan_Shutdown(); -IMGUI_IMPL_API void ImGui_ImplVulkan_NewFrame(); -IMGUI_IMPL_API void ImGui_ImplVulkan_RenderDrawData(ImDrawData* draw_data, VkCommandBuffer command_buffer); -IMGUI_IMPL_API bool ImGui_ImplVulkan_CreateFontsTexture(VkCommandBuffer command_buffer); -IMGUI_IMPL_API void ImGui_ImplVulkan_DestroyFontUploadObjects(); -IMGUI_IMPL_API void ImGui_ImplVulkan_SetMinImageCount(uint32_t min_image_count); // To override MinImageCount after initialization (e.g. if swap chain is recreated) - - -//------------------------------------------------------------------------- -// Internal / Miscellaneous Vulkan Helpers -// (Used by example's main.cpp. Used by multi-viewport features. PROBABLY NOT used by your own engine/app.) -//------------------------------------------------------------------------- -// You probably do NOT need to use or care about those functions. -// Those functions only exist because: -// 1) they facilitate the readability and maintenance of the multiple main.cpp examples files. -// 2) the upcoming multi-viewport feature will need them internally. -// Generally we avoid exposing any kind of superfluous high-level helpers in the bindings, -// but it is too much code to duplicate everywhere so we exceptionally expose them. -// -// Your engine/app will likely _already_ have code to setup all that stuff (swap chain, render pass, frame buffers, etc.). -// You may read this code to learn about Vulkan, but it is recommended you use you own custom tailored code to do equivalent work. -// (The ImGui_ImplVulkanH_XXX functions do not interact with any of the state used by the regular ImGui_ImplVulkan_XXX functions) -//------------------------------------------------------------------------- - -struct ImGui_ImplVulkanH_Frame; -struct ImGui_ImplVulkanH_Window; - -// Helpers -IMGUI_IMPL_API void ImGui_ImplVulkanH_CreateWindow(VkInstance instance, VkPhysicalDevice physical_device, VkDevice device, ImGui_ImplVulkanH_Window* wnd, uint32_t queue_family, const VkAllocationCallbacks* allocator, int w, int h, uint32_t min_image_count); -IMGUI_IMPL_API void ImGui_ImplVulkanH_DestroyWindow(VkInstance instance, VkDevice device, ImGui_ImplVulkanH_Window* wnd, const VkAllocationCallbacks* allocator); -IMGUI_IMPL_API VkSurfaceFormatKHR ImGui_ImplVulkanH_SelectSurfaceFormat(VkPhysicalDevice physical_device, VkSurfaceKHR surface, const VkFormat* request_formats, int request_formats_count, VkColorSpaceKHR request_color_space); -IMGUI_IMPL_API VkPresentModeKHR ImGui_ImplVulkanH_SelectPresentMode(VkPhysicalDevice physical_device, VkSurfaceKHR surface, const VkPresentModeKHR* request_modes, int request_modes_count); -IMGUI_IMPL_API int ImGui_ImplVulkanH_GetMinImageCountFromPresentMode(VkPresentModeKHR present_mode); - -// Helper structure to hold the data needed by one rendering frame -// (Used by example's main.cpp. Used by multi-viewport features. Probably NOT used by your own engine/app.) -// [Please zero-clear before use!] -struct ImGui_ImplVulkanH_Frame -{ - VkCommandPool CommandPool; - VkCommandBuffer CommandBuffer; - VkFence Fence; - VkImage Backbuffer; - VkImageView BackbufferView; - VkFramebuffer Framebuffer; -}; - -struct ImGui_ImplVulkanH_FrameSemaphores -{ - VkSemaphore ImageAcquiredSemaphore; - VkSemaphore RenderCompleteSemaphore; -}; - -// Helper structure to hold the data needed by one rendering context into one OS window -// (Used by example's main.cpp. Used by multi-viewport features. Probably NOT used by your own engine/app.) -struct ImGui_ImplVulkanH_Window -{ - int Width; - int Height; - VkSwapchainKHR Swapchain; - VkSurfaceKHR Surface; - VkSurfaceFormatKHR SurfaceFormat; - VkPresentModeKHR PresentMode; - VkRenderPass RenderPass; - bool ClearEnable; - VkClearValue ClearValue; - uint32_t FrameIndex; // Current frame being rendered to (0 <= FrameIndex < FrameInFlightCount) - uint32_t ImageCount; // Number of simultaneous in-flight frames (returned by vkGetSwapchainImagesKHR, usually derived from min_image_count) - uint32_t SemaphoreIndex; // Current set of swapchain wait semaphores we're using (needs to be distinct from per frame data) - ImGui_ImplVulkanH_Frame* Frames; - ImGui_ImplVulkanH_FrameSemaphores* FrameSemaphores; - - ImGui_ImplVulkanH_Window() - { - memset(this, 0, sizeof(*this)); - PresentMode = VK_PRESENT_MODE_MAX_ENUM_KHR; - ClearEnable = true; - } -}; - diff --git a/cmake/imgui/examples/imgui_impl_win32.cpp b/cmake/imgui/examples/imgui_impl_win32.cpp deleted file mode 100644 index f8868ce6..00000000 --- a/cmake/imgui/examples/imgui_impl_win32.cpp +++ /dev/null @@ -1,441 +0,0 @@ -// dear imgui: Platform Binding for Windows (standard windows API for 32 and 64 bits applications) -// This needs to be used along with a Renderer (e.g. DirectX11, OpenGL3, Vulkan..) - -// Implemented features: -// [X] Platform: Clipboard support (for Win32 this is actually part of core dear imgui) -// [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'. -// [X] Platform: Keyboard arrays indexed using VK_* Virtual Key Codes, e.g. ImGui::IsKeyPressed(VK_SPACE). -// [X] Platform: Gamepad support. Enabled with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'. - -#include "imgui.h" -#include "imgui_impl_win32.h" -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN -#endif -#include -#include - -// Using XInput library for gamepad (with recent Windows SDK this may leads to executables which won't run on Windows 7) -#ifndef IMGUI_IMPL_WIN32_DISABLE_GAMEPAD -#include -#else -#define IMGUI_IMPL_WIN32_DISABLE_LINKING_XINPUT -#endif -#if defined(_MSC_VER) && !defined(IMGUI_IMPL_WIN32_DISABLE_LINKING_XINPUT) -#pragma comment(lib, "xinput") -//#pragma comment(lib, "Xinput9_1_0") -#endif - -// CHANGELOG -// (minor and older changes stripped away, please see git history for details) -// 2020-03-03: Inputs: Calling AddInputCharacterUTF16() to support surrogate pairs leading to codepoint >= 0x10000 (for more complete CJK inputs) -// 2020-02-17: Added ImGui_ImplWin32_EnableDpiAwareness(), ImGui_ImplWin32_GetDpiScaleForHwnd(), ImGui_ImplWin32_GetDpiScaleForMonitor() helper functions. -// 2020-01-14: Inputs: Added support for #define IMGUI_IMPL_WIN32_DISABLE_GAMEPAD/IMGUI_IMPL_WIN32_DISABLE_LINKING_XINPUT. -// 2019-12-05: Inputs: Added support for ImGuiMouseCursor_NotAllowed mouse cursor. -// 2019-05-11: Inputs: Don't filter value from WM_CHAR before calling AddInputCharacter(). -// 2019-01-17: Misc: Using GetForegroundWindow()+IsChild() instead of GetActiveWindow() to be compatible with windows created in a different thread or parent. -// 2019-01-17: Inputs: Added support for mouse buttons 4 and 5 via WM_XBUTTON* messages. -// 2019-01-15: Inputs: Added support for XInput gamepads (if ImGuiConfigFlags_NavEnableGamepad is set by user application). -// 2018-11-30: Misc: Setting up io.BackendPlatformName so it can be displayed in the About Window. -// 2018-06-29: Inputs: Added support for the ImGuiMouseCursor_Hand cursor. -// 2018-06-10: Inputs: Fixed handling of mouse wheel messages to support fine position messages (typically sent by track-pads). -// 2018-06-08: Misc: Extracted imgui_impl_win32.cpp/.h away from the old combined DX9/DX10/DX11/DX12 examples. -// 2018-03-20: Misc: Setup io.BackendFlags ImGuiBackendFlags_HasMouseCursors and ImGuiBackendFlags_HasSetMousePos flags + honor ImGuiConfigFlags_NoMouseCursorChange flag. -// 2018-02-20: Inputs: Added support for mouse cursors (ImGui::GetMouseCursor() value and WM_SETCURSOR message handling). -// 2018-02-06: Inputs: Added mapping for ImGuiKey_Space. -// 2018-02-06: Inputs: Honoring the io.WantSetMousePos by repositioning the mouse (when using navigation and ImGuiConfigFlags_NavMoveMouse is set). -// 2018-02-06: Misc: Removed call to ImGui::Shutdown() which is not available from 1.60 WIP, user needs to call CreateContext/DestroyContext themselves. -// 2018-01-20: Inputs: Added Horizontal Mouse Wheel support. -// 2018-01-08: Inputs: Added mapping for ImGuiKey_Insert. -// 2018-01-05: Inputs: Added WM_LBUTTONDBLCLK double-click handlers for window classes with the CS_DBLCLKS flag. -// 2017-10-23: Inputs: Added WM_SYSKEYDOWN / WM_SYSKEYUP handlers so e.g. the VK_MENU key can be read. -// 2017-10-23: Inputs: Using Win32 ::SetCapture/::GetCapture() to retrieve mouse positions outside the client area when dragging. -// 2016-11-12: Inputs: Only call Win32 ::SetCursor(NULL) when io.MouseDrawCursor is set. - -// Win32 Data -static HWND g_hWnd = NULL; -static INT64 g_Time = 0; -static INT64 g_TicksPerSecond = 0; -static ImGuiMouseCursor g_LastMouseCursor = ImGuiMouseCursor_COUNT; -static bool g_HasGamepad = false; -static bool g_WantUpdateHasGamepad = true; - -// Functions -bool ImGui_ImplWin32_Init(void* hwnd) -{ - if (!::QueryPerformanceFrequency((LARGE_INTEGER *)&g_TicksPerSecond)) - return false; - if (!::QueryPerformanceCounter((LARGE_INTEGER *)&g_Time)) - return false; - - // Setup back-end capabilities flags - g_hWnd = (HWND)hwnd; - ImGuiIO& io = ImGui::GetIO(); - io.BackendFlags |= ImGuiBackendFlags_HasMouseCursors; // We can honor GetMouseCursor() values (optional) - io.BackendFlags |= ImGuiBackendFlags_HasSetMousePos; // We can honor io.WantSetMousePos requests (optional, rarely used) - io.BackendPlatformName = "imgui_impl_win32"; - io.ImeWindowHandle = hwnd; - - // Keyboard mapping. ImGui will use those indices to peek into the io.KeysDown[] array that we will update during the application lifetime. - io.KeyMap[ImGuiKey_Tab] = VK_TAB; - io.KeyMap[ImGuiKey_LeftArrow] = VK_LEFT; - io.KeyMap[ImGuiKey_RightArrow] = VK_RIGHT; - io.KeyMap[ImGuiKey_UpArrow] = VK_UP; - io.KeyMap[ImGuiKey_DownArrow] = VK_DOWN; - io.KeyMap[ImGuiKey_PageUp] = VK_PRIOR; - io.KeyMap[ImGuiKey_PageDown] = VK_NEXT; - io.KeyMap[ImGuiKey_Home] = VK_HOME; - io.KeyMap[ImGuiKey_End] = VK_END; - io.KeyMap[ImGuiKey_Insert] = VK_INSERT; - io.KeyMap[ImGuiKey_Delete] = VK_DELETE; - io.KeyMap[ImGuiKey_Backspace] = VK_BACK; - io.KeyMap[ImGuiKey_Space] = VK_SPACE; - io.KeyMap[ImGuiKey_Enter] = VK_RETURN; - io.KeyMap[ImGuiKey_Escape] = VK_ESCAPE; - io.KeyMap[ImGuiKey_KeyPadEnter] = VK_RETURN; - io.KeyMap[ImGuiKey_A] = 'A'; - io.KeyMap[ImGuiKey_C] = 'C'; - io.KeyMap[ImGuiKey_V] = 'V'; - io.KeyMap[ImGuiKey_X] = 'X'; - io.KeyMap[ImGuiKey_Y] = 'Y'; - io.KeyMap[ImGuiKey_Z] = 'Z'; - - return true; -} - -void ImGui_ImplWin32_Shutdown() -{ - g_hWnd = (HWND)0; -} - -static bool ImGui_ImplWin32_UpdateMouseCursor() -{ - ImGuiIO& io = ImGui::GetIO(); - if (io.ConfigFlags & ImGuiConfigFlags_NoMouseCursorChange) - return false; - - ImGuiMouseCursor imgui_cursor = ImGui::GetMouseCursor(); - if (imgui_cursor == ImGuiMouseCursor_None || io.MouseDrawCursor) - { - // Hide OS mouse cursor if imgui is drawing it or if it wants no cursor - ::SetCursor(NULL); - } - else - { - // Show OS mouse cursor - LPTSTR win32_cursor = IDC_ARROW; - switch (imgui_cursor) - { - case ImGuiMouseCursor_Arrow: win32_cursor = IDC_ARROW; break; - case ImGuiMouseCursor_TextInput: win32_cursor = IDC_IBEAM; break; - case ImGuiMouseCursor_ResizeAll: win32_cursor = IDC_SIZEALL; break; - case ImGuiMouseCursor_ResizeEW: win32_cursor = IDC_SIZEWE; break; - case ImGuiMouseCursor_ResizeNS: win32_cursor = IDC_SIZENS; break; - case ImGuiMouseCursor_ResizeNESW: win32_cursor = IDC_SIZENESW; break; - case ImGuiMouseCursor_ResizeNWSE: win32_cursor = IDC_SIZENWSE; break; - case ImGuiMouseCursor_Hand: win32_cursor = IDC_HAND; break; - case ImGuiMouseCursor_NotAllowed: win32_cursor = IDC_NO; break; - } - ::SetCursor(::LoadCursor(NULL, win32_cursor)); - } - return true; -} - -static void ImGui_ImplWin32_UpdateMousePos() -{ - ImGuiIO& io = ImGui::GetIO(); - - // Set OS mouse position if requested (rarely used, only when ImGuiConfigFlags_NavEnableSetMousePos is enabled by user) - if (io.WantSetMousePos) - { - POINT pos = { (int)io.MousePos.x, (int)io.MousePos.y }; - ::ClientToScreen(g_hWnd, &pos); - ::SetCursorPos(pos.x, pos.y); - } - - // Set mouse position - io.MousePos = ImVec2(-FLT_MAX, -FLT_MAX); - POINT pos; - if (HWND active_window = ::GetForegroundWindow()) - if (active_window == g_hWnd || ::IsChild(active_window, g_hWnd)) - if (::GetCursorPos(&pos) && ::ScreenToClient(g_hWnd, &pos)) - io.MousePos = ImVec2((float)pos.x, (float)pos.y); -} - -// Gamepad navigation mapping -static void ImGui_ImplWin32_UpdateGamepads() -{ -#ifndef IMGUI_IMPL_WIN32_DISABLE_GAMEPAD - ImGuiIO& io = ImGui::GetIO(); - memset(io.NavInputs, 0, sizeof(io.NavInputs)); - if ((io.ConfigFlags & ImGuiConfigFlags_NavEnableGamepad) == 0) - return; - - // Calling XInputGetState() every frame on disconnected gamepads is unfortunately too slow. - // Instead we refresh gamepad availability by calling XInputGetCapabilities() _only_ after receiving WM_DEVICECHANGE. - if (g_WantUpdateHasGamepad) - { - XINPUT_CAPABILITIES caps; - g_HasGamepad = (XInputGetCapabilities(0, XINPUT_FLAG_GAMEPAD, &caps) == ERROR_SUCCESS); - g_WantUpdateHasGamepad = false; - } - - XINPUT_STATE xinput_state; - io.BackendFlags &= ~ImGuiBackendFlags_HasGamepad; - if (g_HasGamepad && XInputGetState(0, &xinput_state) == ERROR_SUCCESS) - { - const XINPUT_GAMEPAD& gamepad = xinput_state.Gamepad; - io.BackendFlags |= ImGuiBackendFlags_HasGamepad; - - #define MAP_BUTTON(NAV_NO, BUTTON_ENUM) { io.NavInputs[NAV_NO] = (gamepad.wButtons & BUTTON_ENUM) ? 1.0f : 0.0f; } - #define MAP_ANALOG(NAV_NO, VALUE, V0, V1) { float vn = (float)(VALUE - V0) / (float)(V1 - V0); if (vn > 1.0f) vn = 1.0f; if (vn > 0.0f && io.NavInputs[NAV_NO] < vn) io.NavInputs[NAV_NO] = vn; } - MAP_BUTTON(ImGuiNavInput_Activate, XINPUT_GAMEPAD_A); // Cross / A - MAP_BUTTON(ImGuiNavInput_Cancel, XINPUT_GAMEPAD_B); // Circle / B - MAP_BUTTON(ImGuiNavInput_Menu, XINPUT_GAMEPAD_X); // Square / X - MAP_BUTTON(ImGuiNavInput_Input, XINPUT_GAMEPAD_Y); // Triangle / Y - MAP_BUTTON(ImGuiNavInput_DpadLeft, XINPUT_GAMEPAD_DPAD_LEFT); // D-Pad Left - MAP_BUTTON(ImGuiNavInput_DpadRight, XINPUT_GAMEPAD_DPAD_RIGHT); // D-Pad Right - MAP_BUTTON(ImGuiNavInput_DpadUp, XINPUT_GAMEPAD_DPAD_UP); // D-Pad Up - MAP_BUTTON(ImGuiNavInput_DpadDown, XINPUT_GAMEPAD_DPAD_DOWN); // D-Pad Down - MAP_BUTTON(ImGuiNavInput_FocusPrev, XINPUT_GAMEPAD_LEFT_SHOULDER); // L1 / LB - MAP_BUTTON(ImGuiNavInput_FocusNext, XINPUT_GAMEPAD_RIGHT_SHOULDER); // R1 / RB - MAP_BUTTON(ImGuiNavInput_TweakSlow, XINPUT_GAMEPAD_LEFT_SHOULDER); // L1 / LB - MAP_BUTTON(ImGuiNavInput_TweakFast, XINPUT_GAMEPAD_RIGHT_SHOULDER); // R1 / RB - MAP_ANALOG(ImGuiNavInput_LStickLeft, gamepad.sThumbLX, -XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE, -32768); - MAP_ANALOG(ImGuiNavInput_LStickRight, gamepad.sThumbLX, +XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE, +32767); - MAP_ANALOG(ImGuiNavInput_LStickUp, gamepad.sThumbLY, +XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE, +32767); - MAP_ANALOG(ImGuiNavInput_LStickDown, gamepad.sThumbLY, -XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE, -32767); - #undef MAP_BUTTON - #undef MAP_ANALOG - } -#endif // #ifndef IMGUI_IMPL_WIN32_DISABLE_GAMEPAD -} - -void ImGui_ImplWin32_NewFrame() -{ - ImGuiIO& io = ImGui::GetIO(); - IM_ASSERT(io.Fonts->IsBuilt() && "Font atlas not built! It is generally built by the renderer back-end. Missing call to renderer _NewFrame() function? e.g. ImGui_ImplOpenGL3_NewFrame()."); - - // Setup display size (every frame to accommodate for window resizing) - RECT rect; - ::GetClientRect(g_hWnd, &rect); - io.DisplaySize = ImVec2((float)(rect.right - rect.left), (float)(rect.bottom - rect.top)); - - // Setup time step - INT64 current_time; - ::QueryPerformanceCounter((LARGE_INTEGER *)¤t_time); - io.DeltaTime = (float)(current_time - g_Time) / g_TicksPerSecond; - g_Time = current_time; - - // Read keyboard modifiers inputs - io.KeyCtrl = (::GetKeyState(VK_CONTROL) & 0x8000) != 0; - io.KeyShift = (::GetKeyState(VK_SHIFT) & 0x8000) != 0; - io.KeyAlt = (::GetKeyState(VK_MENU) & 0x8000) != 0; - io.KeySuper = false; - // io.KeysDown[], io.MousePos, io.MouseDown[], io.MouseWheel: filled by the WndProc handler below. - - // Update OS mouse position - ImGui_ImplWin32_UpdateMousePos(); - - // Update OS mouse cursor with the cursor requested by imgui - ImGuiMouseCursor mouse_cursor = io.MouseDrawCursor ? ImGuiMouseCursor_None : ImGui::GetMouseCursor(); - if (g_LastMouseCursor != mouse_cursor) - { - g_LastMouseCursor = mouse_cursor; - ImGui_ImplWin32_UpdateMouseCursor(); - } - - // Update game controllers (if enabled and available) - ImGui_ImplWin32_UpdateGamepads(); -} - -// Allow compilation with old Windows SDK. MinGW doesn't have default _WIN32_WINNT/WINVER versions. -#ifndef WM_MOUSEHWHEEL -#define WM_MOUSEHWHEEL 0x020E -#endif -#ifndef DBT_DEVNODES_CHANGED -#define DBT_DEVNODES_CHANGED 0x0007 -#endif - -// Win32 message handler (process Win32 mouse/keyboard inputs, etc.) -// Call from your application's message handler. -// When implementing your own back-end, you can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if Dear ImGui wants to use your inputs. -// - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. -// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. -// Generally you may always pass all inputs to Dear ImGui, and hide them from your application based on those two flags. -// PS: In this Win32 handler, we use the capture API (GetCapture/SetCapture/ReleaseCapture) to be able to read mouse coordinates when dragging mouse outside of our window bounds. -// PS: We treat DBLCLK messages as regular mouse down messages, so this code will work on windows classes that have the CS_DBLCLKS flag set. Our own example app code doesn't set this flag. -#if 0 -// Copy this line into your .cpp file to forward declare the function. -extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); -#endif -IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - if (ImGui::GetCurrentContext() == NULL) - return 0; - - ImGuiIO& io = ImGui::GetIO(); - switch (msg) - { - case WM_LBUTTONDOWN: case WM_LBUTTONDBLCLK: - case WM_RBUTTONDOWN: case WM_RBUTTONDBLCLK: - case WM_MBUTTONDOWN: case WM_MBUTTONDBLCLK: - case WM_XBUTTONDOWN: case WM_XBUTTONDBLCLK: - { - int button = 0; - if (msg == WM_LBUTTONDOWN || msg == WM_LBUTTONDBLCLK) { button = 0; } - if (msg == WM_RBUTTONDOWN || msg == WM_RBUTTONDBLCLK) { button = 1; } - if (msg == WM_MBUTTONDOWN || msg == WM_MBUTTONDBLCLK) { button = 2; } - if (msg == WM_XBUTTONDOWN || msg == WM_XBUTTONDBLCLK) { button = (GET_XBUTTON_WPARAM(wParam) == XBUTTON1) ? 3 : 4; } - if (!ImGui::IsAnyMouseDown() && ::GetCapture() == NULL) - ::SetCapture(hwnd); - io.MouseDown[button] = true; - return 0; - } - case WM_LBUTTONUP: - case WM_RBUTTONUP: - case WM_MBUTTONUP: - case WM_XBUTTONUP: - { - int button = 0; - if (msg == WM_LBUTTONUP) { button = 0; } - if (msg == WM_RBUTTONUP) { button = 1; } - if (msg == WM_MBUTTONUP) { button = 2; } - if (msg == WM_XBUTTONUP) { button = (GET_XBUTTON_WPARAM(wParam) == XBUTTON1) ? 3 : 4; } - io.MouseDown[button] = false; - if (!ImGui::IsAnyMouseDown() && ::GetCapture() == hwnd) - ::ReleaseCapture(); - return 0; - } - case WM_MOUSEWHEEL: - io.MouseWheel += (float)GET_WHEEL_DELTA_WPARAM(wParam) / (float)WHEEL_DELTA; - return 0; - case WM_MOUSEHWHEEL: - io.MouseWheelH += (float)GET_WHEEL_DELTA_WPARAM(wParam) / (float)WHEEL_DELTA; - return 0; - case WM_KEYDOWN: - case WM_SYSKEYDOWN: - if (wParam < 256) - io.KeysDown[wParam] = 1; - return 0; - case WM_KEYUP: - case WM_SYSKEYUP: - if (wParam < 256) - io.KeysDown[wParam] = 0; - return 0; - case WM_CHAR: - // You can also use ToAscii()+GetKeyboardState() to retrieve characters. - if (wParam > 0 && wParam < 0x10000) - io.AddInputCharacterUTF16((unsigned short)wParam); - return 0; - case WM_SETCURSOR: - if (LOWORD(lParam) == HTCLIENT && ImGui_ImplWin32_UpdateMouseCursor()) - return 1; - return 0; - case WM_DEVICECHANGE: - if ((UINT)wParam == DBT_DEVNODES_CHANGED) - g_WantUpdateHasGamepad = true; - return 0; - } - return 0; -} - - -//-------------------------------------------------------------------------------------------------------- -// DPI-related helpers (optional) -//-------------------------------------------------------------------------------------------------------- -// - Use to enable DPI awareness without having to create an application manifest. -// - Your own app may already do this via a manifest or explicit calls. This is mostly useful for our examples/ apps. -// - In theory we could call simple functions from Windows SDK such as SetProcessDPIAware(), SetProcessDpiAwareness(), etc. -// but most of the functions provided by Microsoft require Windows 8.1/10+ SDK at compile time and Windows 8/10+ at runtime, -// neither we want to require the user to have. So we dynamically select and load those functions to avoid dependencies. -//--------------------------------------------------------------------------------------------------------- -// This is the scheme successfully used by GLFW (from which we borrowed some of the code) and other apps aiming to be highly portable. -// ImGui_ImplWin32_EnableDpiAwareness() is just a helper called by main.cpp, we don't call it automatically. -// If you are trying to implement your own back-end for your own engine, you may ignore that noise. -//--------------------------------------------------------------------------------------------------------- - -// Implement some of the functions and types normally declared in recent Windows SDK. -#if !defined(_versionhelpers_H_INCLUDED_) && !defined(_INC_VERSIONHELPERS) -static BOOL IsWindowsVersionOrGreater(WORD major, WORD minor, WORD sp) -{ - OSVERSIONINFOEXW osvi = { sizeof(osvi), major, minor, 0, 0, { 0 }, sp }; - DWORD mask = VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR; - ULONGLONG cond = ::VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL); - cond = ::VerSetConditionMask(cond, VER_MINORVERSION, VER_GREATER_EQUAL); - cond = ::VerSetConditionMask(cond, VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL); - return ::VerifyVersionInfoW(&osvi, mask, cond); -} -#define IsWindows8Point1OrGreater() IsWindowsVersionOrGreater(HIBYTE(0x0602), LOBYTE(0x0602), 0) // _WIN32_WINNT_WINBLUE -#endif - -#ifndef DPI_ENUMS_DECLARED -typedef enum { PROCESS_DPI_UNAWARE = 0, PROCESS_SYSTEM_DPI_AWARE = 1, PROCESS_PER_MONITOR_DPI_AWARE = 2 } PROCESS_DPI_AWARENESS; -typedef enum { MDT_EFFECTIVE_DPI = 0, MDT_ANGULAR_DPI = 1, MDT_RAW_DPI = 2, MDT_DEFAULT = MDT_EFFECTIVE_DPI } MONITOR_DPI_TYPE; -#endif -#ifndef _DPI_AWARENESS_CONTEXTS_ -DECLARE_HANDLE(DPI_AWARENESS_CONTEXT); -#define DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE (DPI_AWARENESS_CONTEXT)-3 -#endif -#ifndef DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 -#define DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 (DPI_AWARENESS_CONTEXT)-4 -#endif -typedef HRESULT(WINAPI* PFN_SetProcessDpiAwareness)(PROCESS_DPI_AWARENESS); // Shcore.lib + dll, Windows 8.1+ -typedef HRESULT(WINAPI* PFN_GetDpiForMonitor)(HMONITOR, MONITOR_DPI_TYPE, UINT*, UINT*); // Shcore.lib + dll, Windows 8.1+ -typedef DPI_AWARENESS_CONTEXT(WINAPI* PFN_SetThreadDpiAwarenessContext)(DPI_AWARENESS_CONTEXT); // User32.lib + dll, Windows 10 v1607+ (Creators Update) - -// Helper function to enable DPI awareness without setting up a manifest -void ImGui_ImplWin32_EnableDpiAwareness() -{ - // if (IsWindows10OrGreater()) // This needs a manifest to succeed. Instead we try to grab the function pointer! - { - static HINSTANCE user32_dll = ::LoadLibraryA("user32.dll"); // Reference counted per-process - if (PFN_SetThreadDpiAwarenessContext SetThreadDpiAwarenessContextFn = (PFN_SetThreadDpiAwarenessContext)::GetProcAddress(user32_dll, "SetThreadDpiAwarenessContext")) - { - SetThreadDpiAwarenessContextFn(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2); - return; - } - } - if (IsWindows8Point1OrGreater()) - { - static HINSTANCE shcore_dll = ::LoadLibraryA("shcore.dll"); // Reference counted per-process - if (PFN_SetProcessDpiAwareness SetProcessDpiAwarenessFn = (PFN_SetProcessDpiAwareness)::GetProcAddress(shcore_dll, "SetProcessDpiAwareness")) - { - SetProcessDpiAwarenessFn(PROCESS_PER_MONITOR_DPI_AWARE); - return; - } - } - SetProcessDPIAware(); -} - -#ifdef _MSC_VER -#pragma comment(lib, "gdi32") // Link with gdi32.lib for GetDeviceCaps() -#endif - -float ImGui_ImplWin32_GetDpiScaleForMonitor(void* monitor) -{ - UINT xdpi = 96, ydpi = 96; - if (IsWindows8Point1OrGreater()) - { - static HINSTANCE shcore_dll = ::LoadLibraryA("shcore.dll"); // Reference counted per-process - if (PFN_GetDpiForMonitor GetDpiForMonitorFn = (PFN_GetDpiForMonitor)::GetProcAddress(shcore_dll, "GetDpiForMonitor")) - GetDpiForMonitorFn((HMONITOR)monitor, MDT_EFFECTIVE_DPI, &xdpi, &ydpi); - } - else - { - const HDC dc = ::GetDC(NULL); - xdpi = ::GetDeviceCaps(dc, LOGPIXELSX); - ydpi = ::GetDeviceCaps(dc, LOGPIXELSY); - ::ReleaseDC(NULL, dc); - } - IM_ASSERT(xdpi == ydpi); // Please contact me if you hit this assert! - return xdpi / 96.0f; -} - -float ImGui_ImplWin32_GetDpiScaleForHwnd(void* hwnd) -{ - HMONITOR monitor = ::MonitorFromWindow((HWND)hwnd, MONITOR_DEFAULTTONEAREST); - return ImGui_ImplWin32_GetDpiScaleForMonitor(monitor); -} - -//--------------------------------------------------------------------------------------------------------- diff --git a/cmake/imgui/examples/imgui_impl_win32.h b/cmake/imgui/examples/imgui_impl_win32.h deleted file mode 100644 index daadf317..00000000 --- a/cmake/imgui/examples/imgui_impl_win32.h +++ /dev/null @@ -1,35 +0,0 @@ -// dear imgui: Platform Binding for Windows (standard windows API for 32 and 64 bits applications) -// This needs to be used along with a Renderer (e.g. DirectX11, OpenGL3, Vulkan..) - -// Implemented features: -// [X] Platform: Clipboard support (for Win32 this is actually part of core dear imgui) -// [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'. -// [X] Platform: Keyboard arrays indexed using VK_* Virtual Key Codes, e.g. ImGui::IsKeyPressed(VK_SPACE). -// [X] Platform: Gamepad support. Enabled with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'. - -#pragma once - -IMGUI_IMPL_API bool ImGui_ImplWin32_Init(void* hwnd); -IMGUI_IMPL_API void ImGui_ImplWin32_Shutdown(); -IMGUI_IMPL_API void ImGui_ImplWin32_NewFrame(); - -// Configuration: Disable gamepad support or linking with xinput.lib -//#define IMGUI_IMPL_WIN32_DISABLE_GAMEPAD -//#define IMGUI_IMPL_WIN32_DISABLE_LINKING_XINPUT - -// Win32 message handler -// - Intentionally commented out in a '#if 0' block to avoid dragging dependencies on -// - You can COPY this line into your .cpp code to forward declare the function. -#if 0 -extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); -#endif - -// DPI-related helpers (optional) -// - Use to enable DPI awareness without having to create an application manifest. -// - Your own app may already do this via a manifest or explicit calls. This is mostly useful for our examples/ apps. -// - In theory we could call simple functions from Windows SDK such as SetProcessDPIAware(), SetProcessDpiAwareness(), etc. -// but most of the functions provided by Microsoft require Windows 8.1/10+ SDK at compile time and Windows 8/10+ at runtime, -// neither we want to require the user to have. So we dynamically select and load those functions to avoid dependencies. -IMGUI_IMPL_API void ImGui_ImplWin32_EnableDpiAwareness(); -IMGUI_IMPL_API float ImGui_ImplWin32_GetDpiScaleForHwnd(void* hwnd); // HWND hwnd -IMGUI_IMPL_API float ImGui_ImplWin32_GetDpiScaleForMonitor(void* monitor); // HMONITOR monitor diff --git a/cmake/imgui/examples/libs/gl3w/GL/gl3w.c b/cmake/imgui/examples/libs/gl3w/GL/gl3w.c deleted file mode 100644 index 464e0177..00000000 --- a/cmake/imgui/examples/libs/gl3w/GL/gl3w.c +++ /dev/null @@ -1,1344 +0,0 @@ -#include - -#ifdef _MSC_VER -#pragma warning (disable: 4055) // warning C4055: 'type cast' : from data pointer 'void *' to function pointer -#pragma warning (disable: 4152) // warning C4152: nonstandard extension, function/data pointer conversion in expression -#endif - -#ifdef _WIN32 -#define WIN32_LEAN_AND_MEAN 1 -#include - -static HMODULE libgl; - -static void open_libgl(void) -{ - libgl = LoadLibraryA("opengl32.dll"); -} - -static void close_libgl(void) -{ - FreeLibrary(libgl); -} - -static void *get_proc(const char *proc) -{ - void *res; - - res = wglGetProcAddress(proc); - if (!res) - res = GetProcAddress(libgl, proc); - return res; -} -#elif defined(__APPLE__) || defined(__APPLE_CC__) -#include - -CFBundleRef bundle; -CFURLRef bundleURL; - -static void open_libgl(void) -{ - bundleURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, - CFSTR("/System/Library/Frameworks/OpenGL.framework"), - kCFURLPOSIXPathStyle, true); - - bundle = CFBundleCreate(kCFAllocatorDefault, bundleURL); - assert(bundle != NULL); -} - -static void close_libgl(void) -{ - CFRelease(bundle); - CFRelease(bundleURL); -} - -static void *get_proc(const char *proc) -{ - void *res; - - CFStringRef procname = CFStringCreateWithCString(kCFAllocatorDefault, proc, - kCFStringEncodingASCII); - res = CFBundleGetFunctionPointerForName(bundle, procname); - CFRelease(procname); - return res; -} -#else -#include -#include - -static void *libgl; - -static void open_libgl(void) -{ - libgl = dlopen("libGL.so.1", RTLD_LAZY | RTLD_GLOBAL); -} - -static void close_libgl(void) -{ - dlclose(libgl); -} - -static void *get_proc(const char *proc) -{ - void *res; - - res = (void*)glXGetProcAddress((const GLubyte *) proc); - if (!res) - res = dlsym(libgl, proc); - return res; -} -#endif - -static struct { - int major, minor; -} version; - -static int parse_version(void) -{ - if (!glGetIntegerv) - return -1; - - glGetIntegerv(GL_MAJOR_VERSION, &version.major); - glGetIntegerv(GL_MINOR_VERSION, &version.minor); - - if (version.major < 3) - return -1; - return 0; -} - -static void load_procs(void); - -int gl3wInit(void) -{ - open_libgl(); - load_procs(); - close_libgl(); - return parse_version(); -} - -int gl3wIsSupported(int major, int minor) -{ - if (major < 3) - return 0; - if (version.major == major) - return version.minor >= minor; - return version.major >= major; -} - -void *gl3wGetProcAddress(const char *proc) -{ - return get_proc(proc); -} - -PFNGLCULLFACEPROC gl3wCullFace; -PFNGLFRONTFACEPROC gl3wFrontFace; -PFNGLHINTPROC gl3wHint; -PFNGLLINEWIDTHPROC gl3wLineWidth; -PFNGLPOINTSIZEPROC gl3wPointSize; -PFNGLPOLYGONMODEPROC gl3wPolygonMode; -PFNGLSCISSORPROC gl3wScissor; -PFNGLTEXPARAMETERFPROC gl3wTexParameterf; -PFNGLTEXPARAMETERFVPROC gl3wTexParameterfv; -PFNGLTEXPARAMETERIPROC gl3wTexParameteri; -PFNGLTEXPARAMETERIVPROC gl3wTexParameteriv; -PFNGLTEXIMAGE1DPROC gl3wTexImage1D; -PFNGLTEXIMAGE2DPROC gl3wTexImage2D; -PFNGLDRAWBUFFERPROC gl3wDrawBuffer; -PFNGLCLEARPROC gl3wClear; -PFNGLCLEARCOLORPROC gl3wClearColor; -PFNGLCLEARSTENCILPROC gl3wClearStencil; -PFNGLCLEARDEPTHPROC gl3wClearDepth; -PFNGLSTENCILMASKPROC gl3wStencilMask; -PFNGLCOLORMASKPROC gl3wColorMask; -PFNGLDEPTHMASKPROC gl3wDepthMask; -PFNGLDISABLEPROC gl3wDisable; -PFNGLENABLEPROC gl3wEnable; -PFNGLFINISHPROC gl3wFinish; -PFNGLFLUSHPROC gl3wFlush; -PFNGLBLENDFUNCPROC gl3wBlendFunc; -PFNGLLOGICOPPROC gl3wLogicOp; -PFNGLSTENCILFUNCPROC gl3wStencilFunc; -PFNGLSTENCILOPPROC gl3wStencilOp; -PFNGLDEPTHFUNCPROC gl3wDepthFunc; -PFNGLPIXELSTOREFPROC gl3wPixelStoref; -PFNGLPIXELSTOREIPROC gl3wPixelStorei; -PFNGLREADBUFFERPROC gl3wReadBuffer; -PFNGLREADPIXELSPROC gl3wReadPixels; -PFNGLGETBOOLEANVPROC gl3wGetBooleanv; -PFNGLGETDOUBLEVPROC gl3wGetDoublev; -PFNGLGETERRORPROC gl3wGetError; -PFNGLGETFLOATVPROC gl3wGetFloatv; -PFNGLGETINTEGERVPROC gl3wGetIntegerv; -PFNGLGETSTRINGPROC gl3wGetString; -PFNGLGETTEXIMAGEPROC gl3wGetTexImage; -PFNGLGETTEXPARAMETERFVPROC gl3wGetTexParameterfv; -PFNGLGETTEXPARAMETERIVPROC gl3wGetTexParameteriv; -PFNGLGETTEXLEVELPARAMETERFVPROC gl3wGetTexLevelParameterfv; -PFNGLGETTEXLEVELPARAMETERIVPROC gl3wGetTexLevelParameteriv; -PFNGLISENABLEDPROC gl3wIsEnabled; -PFNGLDEPTHRANGEPROC gl3wDepthRange; -PFNGLVIEWPORTPROC gl3wViewport; -PFNGLDRAWARRAYSPROC gl3wDrawArrays; -PFNGLDRAWELEMENTSPROC gl3wDrawElements; -PFNGLGETPOINTERVPROC gl3wGetPointerv; -PFNGLPOLYGONOFFSETPROC gl3wPolygonOffset; -PFNGLCOPYTEXIMAGE1DPROC gl3wCopyTexImage1D; -PFNGLCOPYTEXIMAGE2DPROC gl3wCopyTexImage2D; -PFNGLCOPYTEXSUBIMAGE1DPROC gl3wCopyTexSubImage1D; -PFNGLCOPYTEXSUBIMAGE2DPROC gl3wCopyTexSubImage2D; -PFNGLTEXSUBIMAGE1DPROC gl3wTexSubImage1D; -PFNGLTEXSUBIMAGE2DPROC gl3wTexSubImage2D; -PFNGLBINDTEXTUREPROC gl3wBindTexture; -PFNGLDELETETEXTURESPROC gl3wDeleteTextures; -PFNGLGENTEXTURESPROC gl3wGenTextures; -PFNGLISTEXTUREPROC gl3wIsTexture; -PFNGLBLENDCOLORPROC gl3wBlendColor; -PFNGLBLENDEQUATIONPROC gl3wBlendEquation; -PFNGLDRAWRANGEELEMENTSPROC gl3wDrawRangeElements; -PFNGLTEXIMAGE3DPROC gl3wTexImage3D; -PFNGLTEXSUBIMAGE3DPROC gl3wTexSubImage3D; -PFNGLCOPYTEXSUBIMAGE3DPROC gl3wCopyTexSubImage3D; -PFNGLACTIVETEXTUREPROC gl3wActiveTexture; -PFNGLSAMPLECOVERAGEPROC gl3wSampleCoverage; -PFNGLCOMPRESSEDTEXIMAGE3DPROC gl3wCompressedTexImage3D; -PFNGLCOMPRESSEDTEXIMAGE2DPROC gl3wCompressedTexImage2D; -PFNGLCOMPRESSEDTEXIMAGE1DPROC gl3wCompressedTexImage1D; -PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC gl3wCompressedTexSubImage3D; -PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC gl3wCompressedTexSubImage2D; -PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC gl3wCompressedTexSubImage1D; -PFNGLGETCOMPRESSEDTEXIMAGEPROC gl3wGetCompressedTexImage; -PFNGLBLENDFUNCSEPARATEPROC gl3wBlendFuncSeparate; -PFNGLMULTIDRAWARRAYSPROC gl3wMultiDrawArrays; -PFNGLMULTIDRAWELEMENTSPROC gl3wMultiDrawElements; -PFNGLPOINTPARAMETERFPROC gl3wPointParameterf; -PFNGLPOINTPARAMETERFVPROC gl3wPointParameterfv; -PFNGLPOINTPARAMETERIPROC gl3wPointParameteri; -PFNGLPOINTPARAMETERIVPROC gl3wPointParameteriv; -PFNGLGENQUERIESPROC gl3wGenQueries; -PFNGLDELETEQUERIESPROC gl3wDeleteQueries; -PFNGLISQUERYPROC gl3wIsQuery; -PFNGLBEGINQUERYPROC gl3wBeginQuery; -PFNGLENDQUERYPROC gl3wEndQuery; -PFNGLGETQUERYIVPROC gl3wGetQueryiv; -PFNGLGETQUERYOBJECTIVPROC gl3wGetQueryObjectiv; -PFNGLGETQUERYOBJECTUIVPROC gl3wGetQueryObjectuiv; -PFNGLBINDBUFFERPROC gl3wBindBuffer; -PFNGLDELETEBUFFERSPROC gl3wDeleteBuffers; -PFNGLGENBUFFERSPROC gl3wGenBuffers; -PFNGLISBUFFERPROC gl3wIsBuffer; -PFNGLBUFFERDATAPROC gl3wBufferData; -PFNGLBUFFERSUBDATAPROC gl3wBufferSubData; -PFNGLGETBUFFERSUBDATAPROC gl3wGetBufferSubData; -PFNGLMAPBUFFERPROC gl3wMapBuffer; -PFNGLUNMAPBUFFERPROC gl3wUnmapBuffer; -PFNGLGETBUFFERPARAMETERIVPROC gl3wGetBufferParameteriv; -PFNGLGETBUFFERPOINTERVPROC gl3wGetBufferPointerv; -PFNGLBLENDEQUATIONSEPARATEPROC gl3wBlendEquationSeparate; -PFNGLDRAWBUFFERSPROC gl3wDrawBuffers; -PFNGLSTENCILOPSEPARATEPROC gl3wStencilOpSeparate; -PFNGLSTENCILFUNCSEPARATEPROC gl3wStencilFuncSeparate; -PFNGLSTENCILMASKSEPARATEPROC gl3wStencilMaskSeparate; -PFNGLATTACHSHADERPROC gl3wAttachShader; -PFNGLBINDATTRIBLOCATIONPROC gl3wBindAttribLocation; -PFNGLCOMPILESHADERPROC gl3wCompileShader; -PFNGLCREATEPROGRAMPROC gl3wCreateProgram; -PFNGLCREATESHADERPROC gl3wCreateShader; -PFNGLDELETEPROGRAMPROC gl3wDeleteProgram; -PFNGLDELETESHADERPROC gl3wDeleteShader; -PFNGLDETACHSHADERPROC gl3wDetachShader; -PFNGLDISABLEVERTEXATTRIBARRAYPROC gl3wDisableVertexAttribArray; -PFNGLENABLEVERTEXATTRIBARRAYPROC gl3wEnableVertexAttribArray; -PFNGLGETACTIVEATTRIBPROC gl3wGetActiveAttrib; -PFNGLGETACTIVEUNIFORMPROC gl3wGetActiveUniform; -PFNGLGETATTACHEDSHADERSPROC gl3wGetAttachedShaders; -PFNGLGETATTRIBLOCATIONPROC gl3wGetAttribLocation; -PFNGLGETPROGRAMIVPROC gl3wGetProgramiv; -PFNGLGETPROGRAMINFOLOGPROC gl3wGetProgramInfoLog; -PFNGLGETSHADERIVPROC gl3wGetShaderiv; -PFNGLGETSHADERINFOLOGPROC gl3wGetShaderInfoLog; -PFNGLGETSHADERSOURCEPROC gl3wGetShaderSource; -PFNGLGETUNIFORMLOCATIONPROC gl3wGetUniformLocation; -PFNGLGETUNIFORMFVPROC gl3wGetUniformfv; -PFNGLGETUNIFORMIVPROC gl3wGetUniformiv; -PFNGLGETVERTEXATTRIBDVPROC gl3wGetVertexAttribdv; -PFNGLGETVERTEXATTRIBFVPROC gl3wGetVertexAttribfv; -PFNGLGETVERTEXATTRIBIVPROC gl3wGetVertexAttribiv; -PFNGLGETVERTEXATTRIBPOINTERVPROC gl3wGetVertexAttribPointerv; -PFNGLISPROGRAMPROC gl3wIsProgram; -PFNGLISSHADERPROC gl3wIsShader; -PFNGLLINKPROGRAMPROC gl3wLinkProgram; -PFNGLSHADERSOURCEPROC gl3wShaderSource; -PFNGLUSEPROGRAMPROC gl3wUseProgram; -PFNGLUNIFORM1FPROC gl3wUniform1f; -PFNGLUNIFORM2FPROC gl3wUniform2f; -PFNGLUNIFORM3FPROC gl3wUniform3f; -PFNGLUNIFORM4FPROC gl3wUniform4f; -PFNGLUNIFORM1IPROC gl3wUniform1i; -PFNGLUNIFORM2IPROC gl3wUniform2i; -PFNGLUNIFORM3IPROC gl3wUniform3i; -PFNGLUNIFORM4IPROC gl3wUniform4i; -PFNGLUNIFORM1FVPROC gl3wUniform1fv; -PFNGLUNIFORM2FVPROC gl3wUniform2fv; -PFNGLUNIFORM3FVPROC gl3wUniform3fv; -PFNGLUNIFORM4FVPROC gl3wUniform4fv; -PFNGLUNIFORM1IVPROC gl3wUniform1iv; -PFNGLUNIFORM2IVPROC gl3wUniform2iv; -PFNGLUNIFORM3IVPROC gl3wUniform3iv; -PFNGLUNIFORM4IVPROC gl3wUniform4iv; -PFNGLUNIFORMMATRIX2FVPROC gl3wUniformMatrix2fv; -PFNGLUNIFORMMATRIX3FVPROC gl3wUniformMatrix3fv; -PFNGLUNIFORMMATRIX4FVPROC gl3wUniformMatrix4fv; -PFNGLVALIDATEPROGRAMPROC gl3wValidateProgram; -PFNGLVERTEXATTRIB1DPROC gl3wVertexAttrib1d; -PFNGLVERTEXATTRIB1DVPROC gl3wVertexAttrib1dv; -PFNGLVERTEXATTRIB1FPROC gl3wVertexAttrib1f; -PFNGLVERTEXATTRIB1FVPROC gl3wVertexAttrib1fv; -PFNGLVERTEXATTRIB1SPROC gl3wVertexAttrib1s; -PFNGLVERTEXATTRIB1SVPROC gl3wVertexAttrib1sv; -PFNGLVERTEXATTRIB2DPROC gl3wVertexAttrib2d; -PFNGLVERTEXATTRIB2DVPROC gl3wVertexAttrib2dv; -PFNGLVERTEXATTRIB2FPROC gl3wVertexAttrib2f; -PFNGLVERTEXATTRIB2FVPROC gl3wVertexAttrib2fv; -PFNGLVERTEXATTRIB2SPROC gl3wVertexAttrib2s; -PFNGLVERTEXATTRIB2SVPROC gl3wVertexAttrib2sv; -PFNGLVERTEXATTRIB3DPROC gl3wVertexAttrib3d; -PFNGLVERTEXATTRIB3DVPROC gl3wVertexAttrib3dv; -PFNGLVERTEXATTRIB3FPROC gl3wVertexAttrib3f; -PFNGLVERTEXATTRIB3FVPROC gl3wVertexAttrib3fv; -PFNGLVERTEXATTRIB3SPROC gl3wVertexAttrib3s; -PFNGLVERTEXATTRIB3SVPROC gl3wVertexAttrib3sv; -PFNGLVERTEXATTRIB4NBVPROC gl3wVertexAttrib4Nbv; -PFNGLVERTEXATTRIB4NIVPROC gl3wVertexAttrib4Niv; -PFNGLVERTEXATTRIB4NSVPROC gl3wVertexAttrib4Nsv; -PFNGLVERTEXATTRIB4NUBPROC gl3wVertexAttrib4Nub; -PFNGLVERTEXATTRIB4NUBVPROC gl3wVertexAttrib4Nubv; -PFNGLVERTEXATTRIB4NUIVPROC gl3wVertexAttrib4Nuiv; -PFNGLVERTEXATTRIB4NUSVPROC gl3wVertexAttrib4Nusv; -PFNGLVERTEXATTRIB4BVPROC gl3wVertexAttrib4bv; -PFNGLVERTEXATTRIB4DPROC gl3wVertexAttrib4d; -PFNGLVERTEXATTRIB4DVPROC gl3wVertexAttrib4dv; -PFNGLVERTEXATTRIB4FPROC gl3wVertexAttrib4f; -PFNGLVERTEXATTRIB4FVPROC gl3wVertexAttrib4fv; -PFNGLVERTEXATTRIB4IVPROC gl3wVertexAttrib4iv; -PFNGLVERTEXATTRIB4SPROC gl3wVertexAttrib4s; -PFNGLVERTEXATTRIB4SVPROC gl3wVertexAttrib4sv; -PFNGLVERTEXATTRIB4UBVPROC gl3wVertexAttrib4ubv; -PFNGLVERTEXATTRIB4UIVPROC gl3wVertexAttrib4uiv; -PFNGLVERTEXATTRIB4USVPROC gl3wVertexAttrib4usv; -PFNGLVERTEXATTRIBPOINTERPROC gl3wVertexAttribPointer; -PFNGLUNIFORMMATRIX2X3FVPROC gl3wUniformMatrix2x3fv; -PFNGLUNIFORMMATRIX3X2FVPROC gl3wUniformMatrix3x2fv; -PFNGLUNIFORMMATRIX2X4FVPROC gl3wUniformMatrix2x4fv; -PFNGLUNIFORMMATRIX4X2FVPROC gl3wUniformMatrix4x2fv; -PFNGLUNIFORMMATRIX3X4FVPROC gl3wUniformMatrix3x4fv; -PFNGLUNIFORMMATRIX4X3FVPROC gl3wUniformMatrix4x3fv; -PFNGLCOLORMASKIPROC gl3wColorMaski; -PFNGLGETBOOLEANI_VPROC gl3wGetBooleani_v; -PFNGLGETINTEGERI_VPROC gl3wGetIntegeri_v; -PFNGLENABLEIPROC gl3wEnablei; -PFNGLDISABLEIPROC gl3wDisablei; -PFNGLISENABLEDIPROC gl3wIsEnabledi; -PFNGLBEGINTRANSFORMFEEDBACKPROC gl3wBeginTransformFeedback; -PFNGLENDTRANSFORMFEEDBACKPROC gl3wEndTransformFeedback; -PFNGLBINDBUFFERRANGEPROC gl3wBindBufferRange; -PFNGLBINDBUFFERBASEPROC gl3wBindBufferBase; -PFNGLTRANSFORMFEEDBACKVARYINGSPROC gl3wTransformFeedbackVaryings; -PFNGLGETTRANSFORMFEEDBACKVARYINGPROC gl3wGetTransformFeedbackVarying; -PFNGLCLAMPCOLORPROC gl3wClampColor; -PFNGLBEGINCONDITIONALRENDERPROC gl3wBeginConditionalRender; -PFNGLENDCONDITIONALRENDERPROC gl3wEndConditionalRender; -PFNGLVERTEXATTRIBIPOINTERPROC gl3wVertexAttribIPointer; -PFNGLGETVERTEXATTRIBIIVPROC gl3wGetVertexAttribIiv; -PFNGLGETVERTEXATTRIBIUIVPROC gl3wGetVertexAttribIuiv; -PFNGLVERTEXATTRIBI1IPROC gl3wVertexAttribI1i; -PFNGLVERTEXATTRIBI2IPROC gl3wVertexAttribI2i; -PFNGLVERTEXATTRIBI3IPROC gl3wVertexAttribI3i; -PFNGLVERTEXATTRIBI4IPROC gl3wVertexAttribI4i; -PFNGLVERTEXATTRIBI1UIPROC gl3wVertexAttribI1ui; -PFNGLVERTEXATTRIBI2UIPROC gl3wVertexAttribI2ui; -PFNGLVERTEXATTRIBI3UIPROC gl3wVertexAttribI3ui; -PFNGLVERTEXATTRIBI4UIPROC gl3wVertexAttribI4ui; -PFNGLVERTEXATTRIBI1IVPROC gl3wVertexAttribI1iv; -PFNGLVERTEXATTRIBI2IVPROC gl3wVertexAttribI2iv; -PFNGLVERTEXATTRIBI3IVPROC gl3wVertexAttribI3iv; -PFNGLVERTEXATTRIBI4IVPROC gl3wVertexAttribI4iv; -PFNGLVERTEXATTRIBI1UIVPROC gl3wVertexAttribI1uiv; -PFNGLVERTEXATTRIBI2UIVPROC gl3wVertexAttribI2uiv; -PFNGLVERTEXATTRIBI3UIVPROC gl3wVertexAttribI3uiv; -PFNGLVERTEXATTRIBI4UIVPROC gl3wVertexAttribI4uiv; -PFNGLVERTEXATTRIBI4BVPROC gl3wVertexAttribI4bv; -PFNGLVERTEXATTRIBI4SVPROC gl3wVertexAttribI4sv; -PFNGLVERTEXATTRIBI4UBVPROC gl3wVertexAttribI4ubv; -PFNGLVERTEXATTRIBI4USVPROC gl3wVertexAttribI4usv; -PFNGLGETUNIFORMUIVPROC gl3wGetUniformuiv; -PFNGLBINDFRAGDATALOCATIONPROC gl3wBindFragDataLocation; -PFNGLGETFRAGDATALOCATIONPROC gl3wGetFragDataLocation; -PFNGLUNIFORM1UIPROC gl3wUniform1ui; -PFNGLUNIFORM2UIPROC gl3wUniform2ui; -PFNGLUNIFORM3UIPROC gl3wUniform3ui; -PFNGLUNIFORM4UIPROC gl3wUniform4ui; -PFNGLUNIFORM1UIVPROC gl3wUniform1uiv; -PFNGLUNIFORM2UIVPROC gl3wUniform2uiv; -PFNGLUNIFORM3UIVPROC gl3wUniform3uiv; -PFNGLUNIFORM4UIVPROC gl3wUniform4uiv; -PFNGLTEXPARAMETERIIVPROC gl3wTexParameterIiv; -PFNGLTEXPARAMETERIUIVPROC gl3wTexParameterIuiv; -PFNGLGETTEXPARAMETERIIVPROC gl3wGetTexParameterIiv; -PFNGLGETTEXPARAMETERIUIVPROC gl3wGetTexParameterIuiv; -PFNGLCLEARBUFFERIVPROC gl3wClearBufferiv; -PFNGLCLEARBUFFERUIVPROC gl3wClearBufferuiv; -PFNGLCLEARBUFFERFVPROC gl3wClearBufferfv; -PFNGLCLEARBUFFERFIPROC gl3wClearBufferfi; -PFNGLGETSTRINGIPROC gl3wGetStringi; -PFNGLDRAWARRAYSINSTANCEDPROC gl3wDrawArraysInstanced; -PFNGLDRAWELEMENTSINSTANCEDPROC gl3wDrawElementsInstanced; -PFNGLTEXBUFFERPROC gl3wTexBuffer; -PFNGLPRIMITIVERESTARTINDEXPROC gl3wPrimitiveRestartIndex; -PFNGLGETINTEGER64I_VPROC gl3wGetInteger64i_v; -PFNGLGETBUFFERPARAMETERI64VPROC gl3wGetBufferParameteri64v; -PFNGLFRAMEBUFFERTEXTUREPROC gl3wFramebufferTexture; -PFNGLVERTEXATTRIBDIVISORPROC gl3wVertexAttribDivisor; -PFNGLMINSAMPLESHADINGPROC gl3wMinSampleShading; -PFNGLBLENDEQUATIONIPROC gl3wBlendEquationi; -PFNGLBLENDEQUATIONSEPARATEIPROC gl3wBlendEquationSeparatei; -PFNGLBLENDFUNCIPROC gl3wBlendFunci; -PFNGLBLENDFUNCSEPARATEIPROC gl3wBlendFuncSeparatei; -PFNGLISRENDERBUFFERPROC gl3wIsRenderbuffer; -PFNGLBINDRENDERBUFFERPROC gl3wBindRenderbuffer; -PFNGLDELETERENDERBUFFERSPROC gl3wDeleteRenderbuffers; -PFNGLGENRENDERBUFFERSPROC gl3wGenRenderbuffers; -PFNGLRENDERBUFFERSTORAGEPROC gl3wRenderbufferStorage; -PFNGLGETRENDERBUFFERPARAMETERIVPROC gl3wGetRenderbufferParameteriv; -PFNGLISFRAMEBUFFERPROC gl3wIsFramebuffer; -PFNGLBINDFRAMEBUFFERPROC gl3wBindFramebuffer; -PFNGLDELETEFRAMEBUFFERSPROC gl3wDeleteFramebuffers; -PFNGLGENFRAMEBUFFERSPROC gl3wGenFramebuffers; -PFNGLCHECKFRAMEBUFFERSTATUSPROC gl3wCheckFramebufferStatus; -PFNGLFRAMEBUFFERTEXTURE1DPROC gl3wFramebufferTexture1D; -PFNGLFRAMEBUFFERTEXTURE2DPROC gl3wFramebufferTexture2D; -PFNGLFRAMEBUFFERTEXTURE3DPROC gl3wFramebufferTexture3D; -PFNGLFRAMEBUFFERRENDERBUFFERPROC gl3wFramebufferRenderbuffer; -PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC gl3wGetFramebufferAttachmentParameteriv; -PFNGLGENERATEMIPMAPPROC gl3wGenerateMipmap; -PFNGLBLITFRAMEBUFFERPROC gl3wBlitFramebuffer; -PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC gl3wRenderbufferStorageMultisample; -PFNGLFRAMEBUFFERTEXTURELAYERPROC gl3wFramebufferTextureLayer; -PFNGLMAPBUFFERRANGEPROC gl3wMapBufferRange; -PFNGLFLUSHMAPPEDBUFFERRANGEPROC gl3wFlushMappedBufferRange; -PFNGLBINDVERTEXARRAYPROC gl3wBindVertexArray; -PFNGLDELETEVERTEXARRAYSPROC gl3wDeleteVertexArrays; -PFNGLGENVERTEXARRAYSPROC gl3wGenVertexArrays; -PFNGLISVERTEXARRAYPROC gl3wIsVertexArray; -PFNGLGETUNIFORMINDICESPROC gl3wGetUniformIndices; -PFNGLGETACTIVEUNIFORMSIVPROC gl3wGetActiveUniformsiv; -PFNGLGETACTIVEUNIFORMNAMEPROC gl3wGetActiveUniformName; -PFNGLGETUNIFORMBLOCKINDEXPROC gl3wGetUniformBlockIndex; -PFNGLGETACTIVEUNIFORMBLOCKIVPROC gl3wGetActiveUniformBlockiv; -PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC gl3wGetActiveUniformBlockName; -PFNGLUNIFORMBLOCKBINDINGPROC gl3wUniformBlockBinding; -PFNGLCOPYBUFFERSUBDATAPROC gl3wCopyBufferSubData; -PFNGLDRAWELEMENTSBASEVERTEXPROC gl3wDrawElementsBaseVertex; -PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC gl3wDrawRangeElementsBaseVertex; -PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC gl3wDrawElementsInstancedBaseVertex; -PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC gl3wMultiDrawElementsBaseVertex; -PFNGLPROVOKINGVERTEXPROC gl3wProvokingVertex; -PFNGLFENCESYNCPROC gl3wFenceSync; -PFNGLISSYNCPROC gl3wIsSync; -PFNGLDELETESYNCPROC gl3wDeleteSync; -PFNGLCLIENTWAITSYNCPROC gl3wClientWaitSync; -PFNGLWAITSYNCPROC gl3wWaitSync; -PFNGLGETINTEGER64VPROC gl3wGetInteger64v; -PFNGLGETSYNCIVPROC gl3wGetSynciv; -PFNGLTEXIMAGE2DMULTISAMPLEPROC gl3wTexImage2DMultisample; -PFNGLTEXIMAGE3DMULTISAMPLEPROC gl3wTexImage3DMultisample; -PFNGLGETMULTISAMPLEFVPROC gl3wGetMultisamplefv; -PFNGLSAMPLEMASKIPROC gl3wSampleMaski; -PFNGLBLENDEQUATIONIARBPROC gl3wBlendEquationiARB; -PFNGLBLENDEQUATIONSEPARATEIARBPROC gl3wBlendEquationSeparateiARB; -PFNGLBLENDFUNCIARBPROC gl3wBlendFunciARB; -PFNGLBLENDFUNCSEPARATEIARBPROC gl3wBlendFuncSeparateiARB; -PFNGLMINSAMPLESHADINGARBPROC gl3wMinSampleShadingARB; -PFNGLNAMEDSTRINGARBPROC gl3wNamedStringARB; -PFNGLDELETENAMEDSTRINGARBPROC gl3wDeleteNamedStringARB; -PFNGLCOMPILESHADERINCLUDEARBPROC gl3wCompileShaderIncludeARB; -PFNGLISNAMEDSTRINGARBPROC gl3wIsNamedStringARB; -PFNGLGETNAMEDSTRINGARBPROC gl3wGetNamedStringARB; -PFNGLGETNAMEDSTRINGIVARBPROC gl3wGetNamedStringivARB; -PFNGLBINDFRAGDATALOCATIONINDEXEDPROC gl3wBindFragDataLocationIndexed; -PFNGLGETFRAGDATAINDEXPROC gl3wGetFragDataIndex; -PFNGLGENSAMPLERSPROC gl3wGenSamplers; -PFNGLDELETESAMPLERSPROC gl3wDeleteSamplers; -PFNGLISSAMPLERPROC gl3wIsSampler; -PFNGLBINDSAMPLERPROC gl3wBindSampler; -PFNGLSAMPLERPARAMETERIPROC gl3wSamplerParameteri; -PFNGLSAMPLERPARAMETERIVPROC gl3wSamplerParameteriv; -PFNGLSAMPLERPARAMETERFPROC gl3wSamplerParameterf; -PFNGLSAMPLERPARAMETERFVPROC gl3wSamplerParameterfv; -PFNGLSAMPLERPARAMETERIIVPROC gl3wSamplerParameterIiv; -PFNGLSAMPLERPARAMETERIUIVPROC gl3wSamplerParameterIuiv; -PFNGLGETSAMPLERPARAMETERIVPROC gl3wGetSamplerParameteriv; -PFNGLGETSAMPLERPARAMETERIIVPROC gl3wGetSamplerParameterIiv; -PFNGLGETSAMPLERPARAMETERFVPROC gl3wGetSamplerParameterfv; -PFNGLGETSAMPLERPARAMETERIUIVPROC gl3wGetSamplerParameterIuiv; -PFNGLQUERYCOUNTERPROC gl3wQueryCounter; -PFNGLGETQUERYOBJECTI64VPROC gl3wGetQueryObjecti64v; -PFNGLGETQUERYOBJECTUI64VPROC gl3wGetQueryObjectui64v; -PFNGLVERTEXP2UIPROC gl3wVertexP2ui; -PFNGLVERTEXP2UIVPROC gl3wVertexP2uiv; -PFNGLVERTEXP3UIPROC gl3wVertexP3ui; -PFNGLVERTEXP3UIVPROC gl3wVertexP3uiv; -PFNGLVERTEXP4UIPROC gl3wVertexP4ui; -PFNGLVERTEXP4UIVPROC gl3wVertexP4uiv; -PFNGLTEXCOORDP1UIPROC gl3wTexCoordP1ui; -PFNGLTEXCOORDP1UIVPROC gl3wTexCoordP1uiv; -PFNGLTEXCOORDP2UIPROC gl3wTexCoordP2ui; -PFNGLTEXCOORDP2UIVPROC gl3wTexCoordP2uiv; -PFNGLTEXCOORDP3UIPROC gl3wTexCoordP3ui; -PFNGLTEXCOORDP3UIVPROC gl3wTexCoordP3uiv; -PFNGLTEXCOORDP4UIPROC gl3wTexCoordP4ui; -PFNGLTEXCOORDP4UIVPROC gl3wTexCoordP4uiv; -PFNGLMULTITEXCOORDP1UIPROC gl3wMultiTexCoordP1ui; -PFNGLMULTITEXCOORDP1UIVPROC gl3wMultiTexCoordP1uiv; -PFNGLMULTITEXCOORDP2UIPROC gl3wMultiTexCoordP2ui; -PFNGLMULTITEXCOORDP2UIVPROC gl3wMultiTexCoordP2uiv; -PFNGLMULTITEXCOORDP3UIPROC gl3wMultiTexCoordP3ui; -PFNGLMULTITEXCOORDP3UIVPROC gl3wMultiTexCoordP3uiv; -PFNGLMULTITEXCOORDP4UIPROC gl3wMultiTexCoordP4ui; -PFNGLMULTITEXCOORDP4UIVPROC gl3wMultiTexCoordP4uiv; -PFNGLNORMALP3UIPROC gl3wNormalP3ui; -PFNGLNORMALP3UIVPROC gl3wNormalP3uiv; -PFNGLCOLORP3UIPROC gl3wColorP3ui; -PFNGLCOLORP3UIVPROC gl3wColorP3uiv; -PFNGLCOLORP4UIPROC gl3wColorP4ui; -PFNGLCOLORP4UIVPROC gl3wColorP4uiv; -PFNGLSECONDARYCOLORP3UIPROC gl3wSecondaryColorP3ui; -PFNGLSECONDARYCOLORP3UIVPROC gl3wSecondaryColorP3uiv; -PFNGLVERTEXATTRIBP1UIPROC gl3wVertexAttribP1ui; -PFNGLVERTEXATTRIBP1UIVPROC gl3wVertexAttribP1uiv; -PFNGLVERTEXATTRIBP2UIPROC gl3wVertexAttribP2ui; -PFNGLVERTEXATTRIBP2UIVPROC gl3wVertexAttribP2uiv; -PFNGLVERTEXATTRIBP3UIPROC gl3wVertexAttribP3ui; -PFNGLVERTEXATTRIBP3UIVPROC gl3wVertexAttribP3uiv; -PFNGLVERTEXATTRIBP4UIPROC gl3wVertexAttribP4ui; -PFNGLVERTEXATTRIBP4UIVPROC gl3wVertexAttribP4uiv; -PFNGLDRAWARRAYSINDIRECTPROC gl3wDrawArraysIndirect; -PFNGLDRAWELEMENTSINDIRECTPROC gl3wDrawElementsIndirect; -PFNGLUNIFORM1DPROC gl3wUniform1d; -PFNGLUNIFORM2DPROC gl3wUniform2d; -PFNGLUNIFORM3DPROC gl3wUniform3d; -PFNGLUNIFORM4DPROC gl3wUniform4d; -PFNGLUNIFORM1DVPROC gl3wUniform1dv; -PFNGLUNIFORM2DVPROC gl3wUniform2dv; -PFNGLUNIFORM3DVPROC gl3wUniform3dv; -PFNGLUNIFORM4DVPROC gl3wUniform4dv; -PFNGLUNIFORMMATRIX2DVPROC gl3wUniformMatrix2dv; -PFNGLUNIFORMMATRIX3DVPROC gl3wUniformMatrix3dv; -PFNGLUNIFORMMATRIX4DVPROC gl3wUniformMatrix4dv; -PFNGLUNIFORMMATRIX2X3DVPROC gl3wUniformMatrix2x3dv; -PFNGLUNIFORMMATRIX2X4DVPROC gl3wUniformMatrix2x4dv; -PFNGLUNIFORMMATRIX3X2DVPROC gl3wUniformMatrix3x2dv; -PFNGLUNIFORMMATRIX3X4DVPROC gl3wUniformMatrix3x4dv; -PFNGLUNIFORMMATRIX4X2DVPROC gl3wUniformMatrix4x2dv; -PFNGLUNIFORMMATRIX4X3DVPROC gl3wUniformMatrix4x3dv; -PFNGLGETUNIFORMDVPROC gl3wGetUniformdv; -PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC gl3wGetSubroutineUniformLocation; -PFNGLGETSUBROUTINEINDEXPROC gl3wGetSubroutineIndex; -PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC gl3wGetActiveSubroutineUniformiv; -PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC gl3wGetActiveSubroutineUniformName; -PFNGLGETACTIVESUBROUTINENAMEPROC gl3wGetActiveSubroutineName; -PFNGLUNIFORMSUBROUTINESUIVPROC gl3wUniformSubroutinesuiv; -PFNGLGETUNIFORMSUBROUTINEUIVPROC gl3wGetUniformSubroutineuiv; -PFNGLGETPROGRAMSTAGEIVPROC gl3wGetProgramStageiv; -PFNGLPATCHPARAMETERIPROC gl3wPatchParameteri; -PFNGLPATCHPARAMETERFVPROC gl3wPatchParameterfv; -PFNGLBINDTRANSFORMFEEDBACKPROC gl3wBindTransformFeedback; -PFNGLDELETETRANSFORMFEEDBACKSPROC gl3wDeleteTransformFeedbacks; -PFNGLGENTRANSFORMFEEDBACKSPROC gl3wGenTransformFeedbacks; -PFNGLISTRANSFORMFEEDBACKPROC gl3wIsTransformFeedback; -PFNGLPAUSETRANSFORMFEEDBACKPROC gl3wPauseTransformFeedback; -PFNGLRESUMETRANSFORMFEEDBACKPROC gl3wResumeTransformFeedback; -PFNGLDRAWTRANSFORMFEEDBACKPROC gl3wDrawTransformFeedback; -PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC gl3wDrawTransformFeedbackStream; -PFNGLBEGINQUERYINDEXEDPROC gl3wBeginQueryIndexed; -PFNGLENDQUERYINDEXEDPROC gl3wEndQueryIndexed; -PFNGLGETQUERYINDEXEDIVPROC gl3wGetQueryIndexediv; -PFNGLRELEASESHADERCOMPILERPROC gl3wReleaseShaderCompiler; -PFNGLSHADERBINARYPROC gl3wShaderBinary; -PFNGLGETSHADERPRECISIONFORMATPROC gl3wGetShaderPrecisionFormat; -PFNGLDEPTHRANGEFPROC gl3wDepthRangef; -PFNGLCLEARDEPTHFPROC gl3wClearDepthf; -PFNGLGETPROGRAMBINARYPROC gl3wGetProgramBinary; -PFNGLPROGRAMBINARYPROC gl3wProgramBinary; -PFNGLPROGRAMPARAMETERIPROC gl3wProgramParameteri; -PFNGLUSEPROGRAMSTAGESPROC gl3wUseProgramStages; -PFNGLACTIVESHADERPROGRAMPROC gl3wActiveShaderProgram; -PFNGLCREATESHADERPROGRAMVPROC gl3wCreateShaderProgramv; -PFNGLBINDPROGRAMPIPELINEPROC gl3wBindProgramPipeline; -PFNGLDELETEPROGRAMPIPELINESPROC gl3wDeleteProgramPipelines; -PFNGLGENPROGRAMPIPELINESPROC gl3wGenProgramPipelines; -PFNGLISPROGRAMPIPELINEPROC gl3wIsProgramPipeline; -PFNGLGETPROGRAMPIPELINEIVPROC gl3wGetProgramPipelineiv; -PFNGLPROGRAMUNIFORM1IPROC gl3wProgramUniform1i; -PFNGLPROGRAMUNIFORM1IVPROC gl3wProgramUniform1iv; -PFNGLPROGRAMUNIFORM1FPROC gl3wProgramUniform1f; -PFNGLPROGRAMUNIFORM1FVPROC gl3wProgramUniform1fv; -PFNGLPROGRAMUNIFORM1DPROC gl3wProgramUniform1d; -PFNGLPROGRAMUNIFORM1DVPROC gl3wProgramUniform1dv; -PFNGLPROGRAMUNIFORM1UIPROC gl3wProgramUniform1ui; -PFNGLPROGRAMUNIFORM1UIVPROC gl3wProgramUniform1uiv; -PFNGLPROGRAMUNIFORM2IPROC gl3wProgramUniform2i; -PFNGLPROGRAMUNIFORM2IVPROC gl3wProgramUniform2iv; -PFNGLPROGRAMUNIFORM2FPROC gl3wProgramUniform2f; -PFNGLPROGRAMUNIFORM2FVPROC gl3wProgramUniform2fv; -PFNGLPROGRAMUNIFORM2DPROC gl3wProgramUniform2d; -PFNGLPROGRAMUNIFORM2DVPROC gl3wProgramUniform2dv; -PFNGLPROGRAMUNIFORM2UIPROC gl3wProgramUniform2ui; -PFNGLPROGRAMUNIFORM2UIVPROC gl3wProgramUniform2uiv; -PFNGLPROGRAMUNIFORM3IPROC gl3wProgramUniform3i; -PFNGLPROGRAMUNIFORM3IVPROC gl3wProgramUniform3iv; -PFNGLPROGRAMUNIFORM3FPROC gl3wProgramUniform3f; -PFNGLPROGRAMUNIFORM3FVPROC gl3wProgramUniform3fv; -PFNGLPROGRAMUNIFORM3DPROC gl3wProgramUniform3d; -PFNGLPROGRAMUNIFORM3DVPROC gl3wProgramUniform3dv; -PFNGLPROGRAMUNIFORM3UIPROC gl3wProgramUniform3ui; -PFNGLPROGRAMUNIFORM3UIVPROC gl3wProgramUniform3uiv; -PFNGLPROGRAMUNIFORM4IPROC gl3wProgramUniform4i; -PFNGLPROGRAMUNIFORM4IVPROC gl3wProgramUniform4iv; -PFNGLPROGRAMUNIFORM4FPROC gl3wProgramUniform4f; -PFNGLPROGRAMUNIFORM4FVPROC gl3wProgramUniform4fv; -PFNGLPROGRAMUNIFORM4DPROC gl3wProgramUniform4d; -PFNGLPROGRAMUNIFORM4DVPROC gl3wProgramUniform4dv; -PFNGLPROGRAMUNIFORM4UIPROC gl3wProgramUniform4ui; -PFNGLPROGRAMUNIFORM4UIVPROC gl3wProgramUniform4uiv; -PFNGLPROGRAMUNIFORMMATRIX2FVPROC gl3wProgramUniformMatrix2fv; -PFNGLPROGRAMUNIFORMMATRIX3FVPROC gl3wProgramUniformMatrix3fv; -PFNGLPROGRAMUNIFORMMATRIX4FVPROC gl3wProgramUniformMatrix4fv; -PFNGLPROGRAMUNIFORMMATRIX2DVPROC gl3wProgramUniformMatrix2dv; -PFNGLPROGRAMUNIFORMMATRIX3DVPROC gl3wProgramUniformMatrix3dv; -PFNGLPROGRAMUNIFORMMATRIX4DVPROC gl3wProgramUniformMatrix4dv; -PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC gl3wProgramUniformMatrix2x3fv; -PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC gl3wProgramUniformMatrix3x2fv; -PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC gl3wProgramUniformMatrix2x4fv; -PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC gl3wProgramUniformMatrix4x2fv; -PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC gl3wProgramUniformMatrix3x4fv; -PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC gl3wProgramUniformMatrix4x3fv; -PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC gl3wProgramUniformMatrix2x3dv; -PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC gl3wProgramUniformMatrix3x2dv; -PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC gl3wProgramUniformMatrix2x4dv; -PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC gl3wProgramUniformMatrix4x2dv; -PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC gl3wProgramUniformMatrix3x4dv; -PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC gl3wProgramUniformMatrix4x3dv; -PFNGLVALIDATEPROGRAMPIPELINEPROC gl3wValidateProgramPipeline; -PFNGLGETPROGRAMPIPELINEINFOLOGPROC gl3wGetProgramPipelineInfoLog; -PFNGLVERTEXATTRIBL1DPROC gl3wVertexAttribL1d; -PFNGLVERTEXATTRIBL2DPROC gl3wVertexAttribL2d; -PFNGLVERTEXATTRIBL3DPROC gl3wVertexAttribL3d; -PFNGLVERTEXATTRIBL4DPROC gl3wVertexAttribL4d; -PFNGLVERTEXATTRIBL1DVPROC gl3wVertexAttribL1dv; -PFNGLVERTEXATTRIBL2DVPROC gl3wVertexAttribL2dv; -PFNGLVERTEXATTRIBL3DVPROC gl3wVertexAttribL3dv; -PFNGLVERTEXATTRIBL4DVPROC gl3wVertexAttribL4dv; -PFNGLVERTEXATTRIBLPOINTERPROC gl3wVertexAttribLPointer; -PFNGLGETVERTEXATTRIBLDVPROC gl3wGetVertexAttribLdv; -PFNGLVIEWPORTARRAYVPROC gl3wViewportArrayv; -PFNGLVIEWPORTINDEXEDFPROC gl3wViewportIndexedf; -PFNGLVIEWPORTINDEXEDFVPROC gl3wViewportIndexedfv; -PFNGLSCISSORARRAYVPROC gl3wScissorArrayv; -PFNGLSCISSORINDEXEDPROC gl3wScissorIndexed; -PFNGLSCISSORINDEXEDVPROC gl3wScissorIndexedv; -PFNGLDEPTHRANGEARRAYVPROC gl3wDepthRangeArrayv; -PFNGLDEPTHRANGEINDEXEDPROC gl3wDepthRangeIndexed; -PFNGLGETFLOATI_VPROC gl3wGetFloati_v; -PFNGLGETDOUBLEI_VPROC gl3wGetDoublei_v; -PFNGLCREATESYNCFROMCLEVENTARBPROC gl3wCreateSyncFromCLeventARB; -PFNGLDEBUGMESSAGECONTROLARBPROC gl3wDebugMessageControlARB; -PFNGLDEBUGMESSAGEINSERTARBPROC gl3wDebugMessageInsertARB; -PFNGLDEBUGMESSAGECALLBACKARBPROC gl3wDebugMessageCallbackARB; -PFNGLGETDEBUGMESSAGELOGARBPROC gl3wGetDebugMessageLogARB; -PFNGLGETGRAPHICSRESETSTATUSARBPROC gl3wGetGraphicsResetStatusARB; -PFNGLGETNTEXIMAGEARBPROC gl3wGetnTexImageARB; -PFNGLREADNPIXELSARBPROC gl3wReadnPixelsARB; -PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC gl3wGetnCompressedTexImageARB; -PFNGLGETNUNIFORMFVARBPROC gl3wGetnUniformfvARB; -PFNGLGETNUNIFORMIVARBPROC gl3wGetnUniformivARB; -PFNGLGETNUNIFORMUIVARBPROC gl3wGetnUniformuivARB; -PFNGLGETNUNIFORMDVARBPROC gl3wGetnUniformdvARB; -PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC gl3wDrawArraysInstancedBaseInstance; -PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC gl3wDrawElementsInstancedBaseInstance; -PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC gl3wDrawElementsInstancedBaseVertexBaseInstance; -PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC gl3wDrawTransformFeedbackInstanced; -PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC gl3wDrawTransformFeedbackStreamInstanced; -PFNGLGETINTERNALFORMATIVPROC gl3wGetInternalformativ; -PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC gl3wGetActiveAtomicCounterBufferiv; -PFNGLBINDIMAGETEXTUREPROC gl3wBindImageTexture; -PFNGLMEMORYBARRIERPROC gl3wMemoryBarrier; -PFNGLTEXSTORAGE1DPROC gl3wTexStorage1D; -PFNGLTEXSTORAGE2DPROC gl3wTexStorage2D; -PFNGLTEXSTORAGE3DPROC gl3wTexStorage3D; -PFNGLTEXTURESTORAGE1DEXTPROC gl3wTextureStorage1DEXT; -PFNGLTEXTURESTORAGE2DEXTPROC gl3wTextureStorage2DEXT; -PFNGLTEXTURESTORAGE3DEXTPROC gl3wTextureStorage3DEXT; -PFNGLDEBUGMESSAGECONTROLPROC gl3wDebugMessageControl; -PFNGLDEBUGMESSAGEINSERTPROC gl3wDebugMessageInsert; -PFNGLDEBUGMESSAGECALLBACKPROC gl3wDebugMessageCallback; -PFNGLGETDEBUGMESSAGELOGPROC gl3wGetDebugMessageLog; -PFNGLPUSHDEBUGGROUPPROC gl3wPushDebugGroup; -PFNGLPOPDEBUGGROUPPROC gl3wPopDebugGroup; -PFNGLOBJECTLABELPROC gl3wObjectLabel; -PFNGLGETOBJECTLABELPROC gl3wGetObjectLabel; -PFNGLOBJECTPTRLABELPROC gl3wObjectPtrLabel; -PFNGLGETOBJECTPTRLABELPROC gl3wGetObjectPtrLabel; -PFNGLCLEARBUFFERDATAPROC gl3wClearBufferData; -PFNGLCLEARBUFFERSUBDATAPROC gl3wClearBufferSubData; -PFNGLCLEARNAMEDBUFFERDATAEXTPROC gl3wClearNamedBufferDataEXT; -PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC gl3wClearNamedBufferSubDataEXT; -PFNGLDISPATCHCOMPUTEPROC gl3wDispatchCompute; -PFNGLDISPATCHCOMPUTEINDIRECTPROC gl3wDispatchComputeIndirect; -PFNGLCOPYIMAGESUBDATAPROC gl3wCopyImageSubData; -PFNGLTEXTUREVIEWPROC gl3wTextureView; -PFNGLBINDVERTEXBUFFERPROC gl3wBindVertexBuffer; -PFNGLVERTEXATTRIBFORMATPROC gl3wVertexAttribFormat; -PFNGLVERTEXATTRIBIFORMATPROC gl3wVertexAttribIFormat; -PFNGLVERTEXATTRIBLFORMATPROC gl3wVertexAttribLFormat; -PFNGLVERTEXATTRIBBINDINGPROC gl3wVertexAttribBinding; -PFNGLVERTEXBINDINGDIVISORPROC gl3wVertexBindingDivisor; -PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC gl3wVertexArrayBindVertexBufferEXT; -PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC gl3wVertexArrayVertexAttribFormatEXT; -PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC gl3wVertexArrayVertexAttribIFormatEXT; -PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC gl3wVertexArrayVertexAttribLFormatEXT; -PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC gl3wVertexArrayVertexAttribBindingEXT; -PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC gl3wVertexArrayVertexBindingDivisorEXT; -PFNGLFRAMEBUFFERPARAMETERIPROC gl3wFramebufferParameteri; -PFNGLGETFRAMEBUFFERPARAMETERIVPROC gl3wGetFramebufferParameteriv; -PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC gl3wNamedFramebufferParameteriEXT; -PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC gl3wGetNamedFramebufferParameterivEXT; -PFNGLGETINTERNALFORMATI64VPROC gl3wGetInternalformati64v; -PFNGLINVALIDATETEXSUBIMAGEPROC gl3wInvalidateTexSubImage; -PFNGLINVALIDATETEXIMAGEPROC gl3wInvalidateTexImage; -PFNGLINVALIDATEBUFFERSUBDATAPROC gl3wInvalidateBufferSubData; -PFNGLINVALIDATEBUFFERDATAPROC gl3wInvalidateBufferData; -PFNGLINVALIDATEFRAMEBUFFERPROC gl3wInvalidateFramebuffer; -PFNGLINVALIDATESUBFRAMEBUFFERPROC gl3wInvalidateSubFramebuffer; -PFNGLMULTIDRAWARRAYSINDIRECTPROC gl3wMultiDrawArraysIndirect; -PFNGLMULTIDRAWELEMENTSINDIRECTPROC gl3wMultiDrawElementsIndirect; -PFNGLGETPROGRAMINTERFACEIVPROC gl3wGetProgramInterfaceiv; -PFNGLGETPROGRAMRESOURCEINDEXPROC gl3wGetProgramResourceIndex; -PFNGLGETPROGRAMRESOURCENAMEPROC gl3wGetProgramResourceName; -PFNGLGETPROGRAMRESOURCEIVPROC gl3wGetProgramResourceiv; -PFNGLGETPROGRAMRESOURCELOCATIONPROC gl3wGetProgramResourceLocation; -PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC gl3wGetProgramResourceLocationIndex; -PFNGLSHADERSTORAGEBLOCKBINDINGPROC gl3wShaderStorageBlockBinding; -PFNGLTEXBUFFERRANGEPROC gl3wTexBufferRange; -PFNGLTEXTUREBUFFERRANGEEXTPROC gl3wTextureBufferRangeEXT; -PFNGLTEXSTORAGE2DMULTISAMPLEPROC gl3wTexStorage2DMultisample; -PFNGLTEXSTORAGE3DMULTISAMPLEPROC gl3wTexStorage3DMultisample; -PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC gl3wTextureStorage2DMultisampleEXT; -PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC gl3wTextureStorage3DMultisampleEXT; - -static void load_procs(void) -{ - gl3wCullFace = (PFNGLCULLFACEPROC) get_proc("glCullFace"); - gl3wFrontFace = (PFNGLFRONTFACEPROC) get_proc("glFrontFace"); - gl3wHint = (PFNGLHINTPROC) get_proc("glHint"); - gl3wLineWidth = (PFNGLLINEWIDTHPROC) get_proc("glLineWidth"); - gl3wPointSize = (PFNGLPOINTSIZEPROC) get_proc("glPointSize"); - gl3wPolygonMode = (PFNGLPOLYGONMODEPROC) get_proc("glPolygonMode"); - gl3wScissor = (PFNGLSCISSORPROC) get_proc("glScissor"); - gl3wTexParameterf = (PFNGLTEXPARAMETERFPROC) get_proc("glTexParameterf"); - gl3wTexParameterfv = (PFNGLTEXPARAMETERFVPROC) get_proc("glTexParameterfv"); - gl3wTexParameteri = (PFNGLTEXPARAMETERIPROC) get_proc("glTexParameteri"); - gl3wTexParameteriv = (PFNGLTEXPARAMETERIVPROC) get_proc("glTexParameteriv"); - gl3wTexImage1D = (PFNGLTEXIMAGE1DPROC) get_proc("glTexImage1D"); - gl3wTexImage2D = (PFNGLTEXIMAGE2DPROC) get_proc("glTexImage2D"); - gl3wDrawBuffer = (PFNGLDRAWBUFFERPROC) get_proc("glDrawBuffer"); - gl3wClear = (PFNGLCLEARPROC) get_proc("glClear"); - gl3wClearColor = (PFNGLCLEARCOLORPROC) get_proc("glClearColor"); - gl3wClearStencil = (PFNGLCLEARSTENCILPROC) get_proc("glClearStencil"); - gl3wClearDepth = (PFNGLCLEARDEPTHPROC) get_proc("glClearDepth"); - gl3wStencilMask = (PFNGLSTENCILMASKPROC) get_proc("glStencilMask"); - gl3wColorMask = (PFNGLCOLORMASKPROC) get_proc("glColorMask"); - gl3wDepthMask = (PFNGLDEPTHMASKPROC) get_proc("glDepthMask"); - gl3wDisable = (PFNGLDISABLEPROC) get_proc("glDisable"); - gl3wEnable = (PFNGLENABLEPROC) get_proc("glEnable"); - gl3wFinish = (PFNGLFINISHPROC) get_proc("glFinish"); - gl3wFlush = (PFNGLFLUSHPROC) get_proc("glFlush"); - gl3wBlendFunc = (PFNGLBLENDFUNCPROC) get_proc("glBlendFunc"); - gl3wLogicOp = (PFNGLLOGICOPPROC) get_proc("glLogicOp"); - gl3wStencilFunc = (PFNGLSTENCILFUNCPROC) get_proc("glStencilFunc"); - gl3wStencilOp = (PFNGLSTENCILOPPROC) get_proc("glStencilOp"); - gl3wDepthFunc = (PFNGLDEPTHFUNCPROC) get_proc("glDepthFunc"); - gl3wPixelStoref = (PFNGLPIXELSTOREFPROC) get_proc("glPixelStoref"); - gl3wPixelStorei = (PFNGLPIXELSTOREIPROC) get_proc("glPixelStorei"); - gl3wReadBuffer = (PFNGLREADBUFFERPROC) get_proc("glReadBuffer"); - gl3wReadPixels = (PFNGLREADPIXELSPROC) get_proc("glReadPixels"); - gl3wGetBooleanv = (PFNGLGETBOOLEANVPROC) get_proc("glGetBooleanv"); - gl3wGetDoublev = (PFNGLGETDOUBLEVPROC) get_proc("glGetDoublev"); - gl3wGetError = (PFNGLGETERRORPROC) get_proc("glGetError"); - gl3wGetFloatv = (PFNGLGETFLOATVPROC) get_proc("glGetFloatv"); - gl3wGetIntegerv = (PFNGLGETINTEGERVPROC) get_proc("glGetIntegerv"); - gl3wGetString = (PFNGLGETSTRINGPROC) get_proc("glGetString"); - gl3wGetTexImage = (PFNGLGETTEXIMAGEPROC) get_proc("glGetTexImage"); - gl3wGetTexParameterfv = (PFNGLGETTEXPARAMETERFVPROC) get_proc("glGetTexParameterfv"); - gl3wGetTexParameteriv = (PFNGLGETTEXPARAMETERIVPROC) get_proc("glGetTexParameteriv"); - gl3wGetTexLevelParameterfv = (PFNGLGETTEXLEVELPARAMETERFVPROC) get_proc("glGetTexLevelParameterfv"); - gl3wGetTexLevelParameteriv = (PFNGLGETTEXLEVELPARAMETERIVPROC) get_proc("glGetTexLevelParameteriv"); - gl3wIsEnabled = (PFNGLISENABLEDPROC) get_proc("glIsEnabled"); - gl3wDepthRange = (PFNGLDEPTHRANGEPROC) get_proc("glDepthRange"); - gl3wViewport = (PFNGLVIEWPORTPROC) get_proc("glViewport"); - gl3wDrawArrays = (PFNGLDRAWARRAYSPROC) get_proc("glDrawArrays"); - gl3wDrawElements = (PFNGLDRAWELEMENTSPROC) get_proc("glDrawElements"); - gl3wGetPointerv = (PFNGLGETPOINTERVPROC) get_proc("glGetPointerv"); - gl3wPolygonOffset = (PFNGLPOLYGONOFFSETPROC) get_proc("glPolygonOffset"); - gl3wCopyTexImage1D = (PFNGLCOPYTEXIMAGE1DPROC) get_proc("glCopyTexImage1D"); - gl3wCopyTexImage2D = (PFNGLCOPYTEXIMAGE2DPROC) get_proc("glCopyTexImage2D"); - gl3wCopyTexSubImage1D = (PFNGLCOPYTEXSUBIMAGE1DPROC) get_proc("glCopyTexSubImage1D"); - gl3wCopyTexSubImage2D = (PFNGLCOPYTEXSUBIMAGE2DPROC) get_proc("glCopyTexSubImage2D"); - gl3wTexSubImage1D = (PFNGLTEXSUBIMAGE1DPROC) get_proc("glTexSubImage1D"); - gl3wTexSubImage2D = (PFNGLTEXSUBIMAGE2DPROC) get_proc("glTexSubImage2D"); - gl3wBindTexture = (PFNGLBINDTEXTUREPROC) get_proc("glBindTexture"); - gl3wDeleteTextures = (PFNGLDELETETEXTURESPROC) get_proc("glDeleteTextures"); - gl3wGenTextures = (PFNGLGENTEXTURESPROC) get_proc("glGenTextures"); - gl3wIsTexture = (PFNGLISTEXTUREPROC) get_proc("glIsTexture"); - gl3wBlendColor = (PFNGLBLENDCOLORPROC) get_proc("glBlendColor"); - gl3wBlendEquation = (PFNGLBLENDEQUATIONPROC) get_proc("glBlendEquation"); - gl3wDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC) get_proc("glDrawRangeElements"); - gl3wTexImage3D = (PFNGLTEXIMAGE3DPROC) get_proc("glTexImage3D"); - gl3wTexSubImage3D = (PFNGLTEXSUBIMAGE3DPROC) get_proc("glTexSubImage3D"); - gl3wCopyTexSubImage3D = (PFNGLCOPYTEXSUBIMAGE3DPROC) get_proc("glCopyTexSubImage3D"); - gl3wActiveTexture = (PFNGLACTIVETEXTUREPROC) get_proc("glActiveTexture"); - gl3wSampleCoverage = (PFNGLSAMPLECOVERAGEPROC) get_proc("glSampleCoverage"); - gl3wCompressedTexImage3D = (PFNGLCOMPRESSEDTEXIMAGE3DPROC) get_proc("glCompressedTexImage3D"); - gl3wCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC) get_proc("glCompressedTexImage2D"); - gl3wCompressedTexImage1D = (PFNGLCOMPRESSEDTEXIMAGE1DPROC) get_proc("glCompressedTexImage1D"); - gl3wCompressedTexSubImage3D = (PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) get_proc("glCompressedTexSubImage3D"); - gl3wCompressedTexSubImage2D = (PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) get_proc("glCompressedTexSubImage2D"); - gl3wCompressedTexSubImage1D = (PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) get_proc("glCompressedTexSubImage1D"); - gl3wGetCompressedTexImage = (PFNGLGETCOMPRESSEDTEXIMAGEPROC) get_proc("glGetCompressedTexImage"); - gl3wBlendFuncSeparate = (PFNGLBLENDFUNCSEPARATEPROC) get_proc("glBlendFuncSeparate"); - gl3wMultiDrawArrays = (PFNGLMULTIDRAWARRAYSPROC) get_proc("glMultiDrawArrays"); - gl3wMultiDrawElements = (PFNGLMULTIDRAWELEMENTSPROC) get_proc("glMultiDrawElements"); - gl3wPointParameterf = (PFNGLPOINTPARAMETERFPROC) get_proc("glPointParameterf"); - gl3wPointParameterfv = (PFNGLPOINTPARAMETERFVPROC) get_proc("glPointParameterfv"); - gl3wPointParameteri = (PFNGLPOINTPARAMETERIPROC) get_proc("glPointParameteri"); - gl3wPointParameteriv = (PFNGLPOINTPARAMETERIVPROC) get_proc("glPointParameteriv"); - gl3wGenQueries = (PFNGLGENQUERIESPROC) get_proc("glGenQueries"); - gl3wDeleteQueries = (PFNGLDELETEQUERIESPROC) get_proc("glDeleteQueries"); - gl3wIsQuery = (PFNGLISQUERYPROC) get_proc("glIsQuery"); - gl3wBeginQuery = (PFNGLBEGINQUERYPROC) get_proc("glBeginQuery"); - gl3wEndQuery = (PFNGLENDQUERYPROC) get_proc("glEndQuery"); - gl3wGetQueryiv = (PFNGLGETQUERYIVPROC) get_proc("glGetQueryiv"); - gl3wGetQueryObjectiv = (PFNGLGETQUERYOBJECTIVPROC) get_proc("glGetQueryObjectiv"); - gl3wGetQueryObjectuiv = (PFNGLGETQUERYOBJECTUIVPROC) get_proc("glGetQueryObjectuiv"); - gl3wBindBuffer = (PFNGLBINDBUFFERPROC) get_proc("glBindBuffer"); - gl3wDeleteBuffers = (PFNGLDELETEBUFFERSPROC) get_proc("glDeleteBuffers"); - gl3wGenBuffers = (PFNGLGENBUFFERSPROC) get_proc("glGenBuffers"); - gl3wIsBuffer = (PFNGLISBUFFERPROC) get_proc("glIsBuffer"); - gl3wBufferData = (PFNGLBUFFERDATAPROC) get_proc("glBufferData"); - gl3wBufferSubData = (PFNGLBUFFERSUBDATAPROC) get_proc("glBufferSubData"); - gl3wGetBufferSubData = (PFNGLGETBUFFERSUBDATAPROC) get_proc("glGetBufferSubData"); - gl3wMapBuffer = (PFNGLMAPBUFFERPROC) get_proc("glMapBuffer"); - gl3wUnmapBuffer = (PFNGLUNMAPBUFFERPROC) get_proc("glUnmapBuffer"); - gl3wGetBufferParameteriv = (PFNGLGETBUFFERPARAMETERIVPROC) get_proc("glGetBufferParameteriv"); - gl3wGetBufferPointerv = (PFNGLGETBUFFERPOINTERVPROC) get_proc("glGetBufferPointerv"); - gl3wBlendEquationSeparate = (PFNGLBLENDEQUATIONSEPARATEPROC) get_proc("glBlendEquationSeparate"); - gl3wDrawBuffers = (PFNGLDRAWBUFFERSPROC) get_proc("glDrawBuffers"); - gl3wStencilOpSeparate = (PFNGLSTENCILOPSEPARATEPROC) get_proc("glStencilOpSeparate"); - gl3wStencilFuncSeparate = (PFNGLSTENCILFUNCSEPARATEPROC) get_proc("glStencilFuncSeparate"); - gl3wStencilMaskSeparate = (PFNGLSTENCILMASKSEPARATEPROC) get_proc("glStencilMaskSeparate"); - gl3wAttachShader = (PFNGLATTACHSHADERPROC) get_proc("glAttachShader"); - gl3wBindAttribLocation = (PFNGLBINDATTRIBLOCATIONPROC) get_proc("glBindAttribLocation"); - gl3wCompileShader = (PFNGLCOMPILESHADERPROC) get_proc("glCompileShader"); - gl3wCreateProgram = (PFNGLCREATEPROGRAMPROC) get_proc("glCreateProgram"); - gl3wCreateShader = (PFNGLCREATESHADERPROC) get_proc("glCreateShader"); - gl3wDeleteProgram = (PFNGLDELETEPROGRAMPROC) get_proc("glDeleteProgram"); - gl3wDeleteShader = (PFNGLDELETESHADERPROC) get_proc("glDeleteShader"); - gl3wDetachShader = (PFNGLDETACHSHADERPROC) get_proc("glDetachShader"); - gl3wDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC) get_proc("glDisableVertexAttribArray"); - gl3wEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC) get_proc("glEnableVertexAttribArray"); - gl3wGetActiveAttrib = (PFNGLGETACTIVEATTRIBPROC) get_proc("glGetActiveAttrib"); - gl3wGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC) get_proc("glGetActiveUniform"); - gl3wGetAttachedShaders = (PFNGLGETATTACHEDSHADERSPROC) get_proc("glGetAttachedShaders"); - gl3wGetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC) get_proc("glGetAttribLocation"); - gl3wGetProgramiv = (PFNGLGETPROGRAMIVPROC) get_proc("glGetProgramiv"); - gl3wGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC) get_proc("glGetProgramInfoLog"); - gl3wGetShaderiv = (PFNGLGETSHADERIVPROC) get_proc("glGetShaderiv"); - gl3wGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC) get_proc("glGetShaderInfoLog"); - gl3wGetShaderSource = (PFNGLGETSHADERSOURCEPROC) get_proc("glGetShaderSource"); - gl3wGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC) get_proc("glGetUniformLocation"); - gl3wGetUniformfv = (PFNGLGETUNIFORMFVPROC) get_proc("glGetUniformfv"); - gl3wGetUniformiv = (PFNGLGETUNIFORMIVPROC) get_proc("glGetUniformiv"); - gl3wGetVertexAttribdv = (PFNGLGETVERTEXATTRIBDVPROC) get_proc("glGetVertexAttribdv"); - gl3wGetVertexAttribfv = (PFNGLGETVERTEXATTRIBFVPROC) get_proc("glGetVertexAttribfv"); - gl3wGetVertexAttribiv = (PFNGLGETVERTEXATTRIBIVPROC) get_proc("glGetVertexAttribiv"); - gl3wGetVertexAttribPointerv = (PFNGLGETVERTEXATTRIBPOINTERVPROC) get_proc("glGetVertexAttribPointerv"); - gl3wIsProgram = (PFNGLISPROGRAMPROC) get_proc("glIsProgram"); - gl3wIsShader = (PFNGLISSHADERPROC) get_proc("glIsShader"); - gl3wLinkProgram = (PFNGLLINKPROGRAMPROC) get_proc("glLinkProgram"); - gl3wShaderSource = (PFNGLSHADERSOURCEPROC) get_proc("glShaderSource"); - gl3wUseProgram = (PFNGLUSEPROGRAMPROC) get_proc("glUseProgram"); - gl3wUniform1f = (PFNGLUNIFORM1FPROC) get_proc("glUniform1f"); - gl3wUniform2f = (PFNGLUNIFORM2FPROC) get_proc("glUniform2f"); - gl3wUniform3f = (PFNGLUNIFORM3FPROC) get_proc("glUniform3f"); - gl3wUniform4f = (PFNGLUNIFORM4FPROC) get_proc("glUniform4f"); - gl3wUniform1i = (PFNGLUNIFORM1IPROC) get_proc("glUniform1i"); - gl3wUniform2i = (PFNGLUNIFORM2IPROC) get_proc("glUniform2i"); - gl3wUniform3i = (PFNGLUNIFORM3IPROC) get_proc("glUniform3i"); - gl3wUniform4i = (PFNGLUNIFORM4IPROC) get_proc("glUniform4i"); - gl3wUniform1fv = (PFNGLUNIFORM1FVPROC) get_proc("glUniform1fv"); - gl3wUniform2fv = (PFNGLUNIFORM2FVPROC) get_proc("glUniform2fv"); - gl3wUniform3fv = (PFNGLUNIFORM3FVPROC) get_proc("glUniform3fv"); - gl3wUniform4fv = (PFNGLUNIFORM4FVPROC) get_proc("glUniform4fv"); - gl3wUniform1iv = (PFNGLUNIFORM1IVPROC) get_proc("glUniform1iv"); - gl3wUniform2iv = (PFNGLUNIFORM2IVPROC) get_proc("glUniform2iv"); - gl3wUniform3iv = (PFNGLUNIFORM3IVPROC) get_proc("glUniform3iv"); - gl3wUniform4iv = (PFNGLUNIFORM4IVPROC) get_proc("glUniform4iv"); - gl3wUniformMatrix2fv = (PFNGLUNIFORMMATRIX2FVPROC) get_proc("glUniformMatrix2fv"); - gl3wUniformMatrix3fv = (PFNGLUNIFORMMATRIX3FVPROC) get_proc("glUniformMatrix3fv"); - gl3wUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC) get_proc("glUniformMatrix4fv"); - gl3wValidateProgram = (PFNGLVALIDATEPROGRAMPROC) get_proc("glValidateProgram"); - gl3wVertexAttrib1d = (PFNGLVERTEXATTRIB1DPROC) get_proc("glVertexAttrib1d"); - gl3wVertexAttrib1dv = (PFNGLVERTEXATTRIB1DVPROC) get_proc("glVertexAttrib1dv"); - gl3wVertexAttrib1f = (PFNGLVERTEXATTRIB1FPROC) get_proc("glVertexAttrib1f"); - gl3wVertexAttrib1fv = (PFNGLVERTEXATTRIB1FVPROC) get_proc("glVertexAttrib1fv"); - gl3wVertexAttrib1s = (PFNGLVERTEXATTRIB1SPROC) get_proc("glVertexAttrib1s"); - gl3wVertexAttrib1sv = (PFNGLVERTEXATTRIB1SVPROC) get_proc("glVertexAttrib1sv"); - gl3wVertexAttrib2d = (PFNGLVERTEXATTRIB2DPROC) get_proc("glVertexAttrib2d"); - gl3wVertexAttrib2dv = (PFNGLVERTEXATTRIB2DVPROC) get_proc("glVertexAttrib2dv"); - gl3wVertexAttrib2f = (PFNGLVERTEXATTRIB2FPROC) get_proc("glVertexAttrib2f"); - gl3wVertexAttrib2fv = (PFNGLVERTEXATTRIB2FVPROC) get_proc("glVertexAttrib2fv"); - gl3wVertexAttrib2s = (PFNGLVERTEXATTRIB2SPROC) get_proc("glVertexAttrib2s"); - gl3wVertexAttrib2sv = (PFNGLVERTEXATTRIB2SVPROC) get_proc("glVertexAttrib2sv"); - gl3wVertexAttrib3d = (PFNGLVERTEXATTRIB3DPROC) get_proc("glVertexAttrib3d"); - gl3wVertexAttrib3dv = (PFNGLVERTEXATTRIB3DVPROC) get_proc("glVertexAttrib3dv"); - gl3wVertexAttrib3f = (PFNGLVERTEXATTRIB3FPROC) get_proc("glVertexAttrib3f"); - gl3wVertexAttrib3fv = (PFNGLVERTEXATTRIB3FVPROC) get_proc("glVertexAttrib3fv"); - gl3wVertexAttrib3s = (PFNGLVERTEXATTRIB3SPROC) get_proc("glVertexAttrib3s"); - gl3wVertexAttrib3sv = (PFNGLVERTEXATTRIB3SVPROC) get_proc("glVertexAttrib3sv"); - gl3wVertexAttrib4Nbv = (PFNGLVERTEXATTRIB4NBVPROC) get_proc("glVertexAttrib4Nbv"); - gl3wVertexAttrib4Niv = (PFNGLVERTEXATTRIB4NIVPROC) get_proc("glVertexAttrib4Niv"); - gl3wVertexAttrib4Nsv = (PFNGLVERTEXATTRIB4NSVPROC) get_proc("glVertexAttrib4Nsv"); - gl3wVertexAttrib4Nub = (PFNGLVERTEXATTRIB4NUBPROC) get_proc("glVertexAttrib4Nub"); - gl3wVertexAttrib4Nubv = (PFNGLVERTEXATTRIB4NUBVPROC) get_proc("glVertexAttrib4Nubv"); - gl3wVertexAttrib4Nuiv = (PFNGLVERTEXATTRIB4NUIVPROC) get_proc("glVertexAttrib4Nuiv"); - gl3wVertexAttrib4Nusv = (PFNGLVERTEXATTRIB4NUSVPROC) get_proc("glVertexAttrib4Nusv"); - gl3wVertexAttrib4bv = (PFNGLVERTEXATTRIB4BVPROC) get_proc("glVertexAttrib4bv"); - gl3wVertexAttrib4d = (PFNGLVERTEXATTRIB4DPROC) get_proc("glVertexAttrib4d"); - gl3wVertexAttrib4dv = (PFNGLVERTEXATTRIB4DVPROC) get_proc("glVertexAttrib4dv"); - gl3wVertexAttrib4f = (PFNGLVERTEXATTRIB4FPROC) get_proc("glVertexAttrib4f"); - gl3wVertexAttrib4fv = (PFNGLVERTEXATTRIB4FVPROC) get_proc("glVertexAttrib4fv"); - gl3wVertexAttrib4iv = (PFNGLVERTEXATTRIB4IVPROC) get_proc("glVertexAttrib4iv"); - gl3wVertexAttrib4s = (PFNGLVERTEXATTRIB4SPROC) get_proc("glVertexAttrib4s"); - gl3wVertexAttrib4sv = (PFNGLVERTEXATTRIB4SVPROC) get_proc("glVertexAttrib4sv"); - gl3wVertexAttrib4ubv = (PFNGLVERTEXATTRIB4UBVPROC) get_proc("glVertexAttrib4ubv"); - gl3wVertexAttrib4uiv = (PFNGLVERTEXATTRIB4UIVPROC) get_proc("glVertexAttrib4uiv"); - gl3wVertexAttrib4usv = (PFNGLVERTEXATTRIB4USVPROC) get_proc("glVertexAttrib4usv"); - gl3wVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC) get_proc("glVertexAttribPointer"); - gl3wUniformMatrix2x3fv = (PFNGLUNIFORMMATRIX2X3FVPROC) get_proc("glUniformMatrix2x3fv"); - gl3wUniformMatrix3x2fv = (PFNGLUNIFORMMATRIX3X2FVPROC) get_proc("glUniformMatrix3x2fv"); - gl3wUniformMatrix2x4fv = (PFNGLUNIFORMMATRIX2X4FVPROC) get_proc("glUniformMatrix2x4fv"); - gl3wUniformMatrix4x2fv = (PFNGLUNIFORMMATRIX4X2FVPROC) get_proc("glUniformMatrix4x2fv"); - gl3wUniformMatrix3x4fv = (PFNGLUNIFORMMATRIX3X4FVPROC) get_proc("glUniformMatrix3x4fv"); - gl3wUniformMatrix4x3fv = (PFNGLUNIFORMMATRIX4X3FVPROC) get_proc("glUniformMatrix4x3fv"); - gl3wColorMaski = (PFNGLCOLORMASKIPROC) get_proc("glColorMaski"); - gl3wGetBooleani_v = (PFNGLGETBOOLEANI_VPROC) get_proc("glGetBooleani_v"); - gl3wGetIntegeri_v = (PFNGLGETINTEGERI_VPROC) get_proc("glGetIntegeri_v"); - gl3wEnablei = (PFNGLENABLEIPROC) get_proc("glEnablei"); - gl3wDisablei = (PFNGLDISABLEIPROC) get_proc("glDisablei"); - gl3wIsEnabledi = (PFNGLISENABLEDIPROC) get_proc("glIsEnabledi"); - gl3wBeginTransformFeedback = (PFNGLBEGINTRANSFORMFEEDBACKPROC) get_proc("glBeginTransformFeedback"); - gl3wEndTransformFeedback = (PFNGLENDTRANSFORMFEEDBACKPROC) get_proc("glEndTransformFeedback"); - gl3wBindBufferRange = (PFNGLBINDBUFFERRANGEPROC) get_proc("glBindBufferRange"); - gl3wBindBufferBase = (PFNGLBINDBUFFERBASEPROC) get_proc("glBindBufferBase"); - gl3wTransformFeedbackVaryings = (PFNGLTRANSFORMFEEDBACKVARYINGSPROC) get_proc("glTransformFeedbackVaryings"); - gl3wGetTransformFeedbackVarying = (PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) get_proc("glGetTransformFeedbackVarying"); - gl3wClampColor = (PFNGLCLAMPCOLORPROC) get_proc("glClampColor"); - gl3wBeginConditionalRender = (PFNGLBEGINCONDITIONALRENDERPROC) get_proc("glBeginConditionalRender"); - gl3wEndConditionalRender = (PFNGLENDCONDITIONALRENDERPROC) get_proc("glEndConditionalRender"); - gl3wVertexAttribIPointer = (PFNGLVERTEXATTRIBIPOINTERPROC) get_proc("glVertexAttribIPointer"); - gl3wGetVertexAttribIiv = (PFNGLGETVERTEXATTRIBIIVPROC) get_proc("glGetVertexAttribIiv"); - gl3wGetVertexAttribIuiv = (PFNGLGETVERTEXATTRIBIUIVPROC) get_proc("glGetVertexAttribIuiv"); - gl3wVertexAttribI1i = (PFNGLVERTEXATTRIBI1IPROC) get_proc("glVertexAttribI1i"); - gl3wVertexAttribI2i = (PFNGLVERTEXATTRIBI2IPROC) get_proc("glVertexAttribI2i"); - gl3wVertexAttribI3i = (PFNGLVERTEXATTRIBI3IPROC) get_proc("glVertexAttribI3i"); - gl3wVertexAttribI4i = (PFNGLVERTEXATTRIBI4IPROC) get_proc("glVertexAttribI4i"); - gl3wVertexAttribI1ui = (PFNGLVERTEXATTRIBI1UIPROC) get_proc("glVertexAttribI1ui"); - gl3wVertexAttribI2ui = (PFNGLVERTEXATTRIBI2UIPROC) get_proc("glVertexAttribI2ui"); - gl3wVertexAttribI3ui = (PFNGLVERTEXATTRIBI3UIPROC) get_proc("glVertexAttribI3ui"); - gl3wVertexAttribI4ui = (PFNGLVERTEXATTRIBI4UIPROC) get_proc("glVertexAttribI4ui"); - gl3wVertexAttribI1iv = (PFNGLVERTEXATTRIBI1IVPROC) get_proc("glVertexAttribI1iv"); - gl3wVertexAttribI2iv = (PFNGLVERTEXATTRIBI2IVPROC) get_proc("glVertexAttribI2iv"); - gl3wVertexAttribI3iv = (PFNGLVERTEXATTRIBI3IVPROC) get_proc("glVertexAttribI3iv"); - gl3wVertexAttribI4iv = (PFNGLVERTEXATTRIBI4IVPROC) get_proc("glVertexAttribI4iv"); - gl3wVertexAttribI1uiv = (PFNGLVERTEXATTRIBI1UIVPROC) get_proc("glVertexAttribI1uiv"); - gl3wVertexAttribI2uiv = (PFNGLVERTEXATTRIBI2UIVPROC) get_proc("glVertexAttribI2uiv"); - gl3wVertexAttribI3uiv = (PFNGLVERTEXATTRIBI3UIVPROC) get_proc("glVertexAttribI3uiv"); - gl3wVertexAttribI4uiv = (PFNGLVERTEXATTRIBI4UIVPROC) get_proc("glVertexAttribI4uiv"); - gl3wVertexAttribI4bv = (PFNGLVERTEXATTRIBI4BVPROC) get_proc("glVertexAttribI4bv"); - gl3wVertexAttribI4sv = (PFNGLVERTEXATTRIBI4SVPROC) get_proc("glVertexAttribI4sv"); - gl3wVertexAttribI4ubv = (PFNGLVERTEXATTRIBI4UBVPROC) get_proc("glVertexAttribI4ubv"); - gl3wVertexAttribI4usv = (PFNGLVERTEXATTRIBI4USVPROC) get_proc("glVertexAttribI4usv"); - gl3wGetUniformuiv = (PFNGLGETUNIFORMUIVPROC) get_proc("glGetUniformuiv"); - gl3wBindFragDataLocation = (PFNGLBINDFRAGDATALOCATIONPROC) get_proc("glBindFragDataLocation"); - gl3wGetFragDataLocation = (PFNGLGETFRAGDATALOCATIONPROC) get_proc("glGetFragDataLocation"); - gl3wUniform1ui = (PFNGLUNIFORM1UIPROC) get_proc("glUniform1ui"); - gl3wUniform2ui = (PFNGLUNIFORM2UIPROC) get_proc("glUniform2ui"); - gl3wUniform3ui = (PFNGLUNIFORM3UIPROC) get_proc("glUniform3ui"); - gl3wUniform4ui = (PFNGLUNIFORM4UIPROC) get_proc("glUniform4ui"); - gl3wUniform1uiv = (PFNGLUNIFORM1UIVPROC) get_proc("glUniform1uiv"); - gl3wUniform2uiv = (PFNGLUNIFORM2UIVPROC) get_proc("glUniform2uiv"); - gl3wUniform3uiv = (PFNGLUNIFORM3UIVPROC) get_proc("glUniform3uiv"); - gl3wUniform4uiv = (PFNGLUNIFORM4UIVPROC) get_proc("glUniform4uiv"); - gl3wTexParameterIiv = (PFNGLTEXPARAMETERIIVPROC) get_proc("glTexParameterIiv"); - gl3wTexParameterIuiv = (PFNGLTEXPARAMETERIUIVPROC) get_proc("glTexParameterIuiv"); - gl3wGetTexParameterIiv = (PFNGLGETTEXPARAMETERIIVPROC) get_proc("glGetTexParameterIiv"); - gl3wGetTexParameterIuiv = (PFNGLGETTEXPARAMETERIUIVPROC) get_proc("glGetTexParameterIuiv"); - gl3wClearBufferiv = (PFNGLCLEARBUFFERIVPROC) get_proc("glClearBufferiv"); - gl3wClearBufferuiv = (PFNGLCLEARBUFFERUIVPROC) get_proc("glClearBufferuiv"); - gl3wClearBufferfv = (PFNGLCLEARBUFFERFVPROC) get_proc("glClearBufferfv"); - gl3wClearBufferfi = (PFNGLCLEARBUFFERFIPROC) get_proc("glClearBufferfi"); - gl3wGetStringi = (PFNGLGETSTRINGIPROC) get_proc("glGetStringi"); - gl3wDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDPROC) get_proc("glDrawArraysInstanced"); - gl3wDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDPROC) get_proc("glDrawElementsInstanced"); - gl3wTexBuffer = (PFNGLTEXBUFFERPROC) get_proc("glTexBuffer"); - gl3wPrimitiveRestartIndex = (PFNGLPRIMITIVERESTARTINDEXPROC) get_proc("glPrimitiveRestartIndex"); - gl3wGetInteger64i_v = (PFNGLGETINTEGER64I_VPROC) get_proc("glGetInteger64i_v"); - gl3wGetBufferParameteri64v = (PFNGLGETBUFFERPARAMETERI64VPROC) get_proc("glGetBufferParameteri64v"); - gl3wFramebufferTexture = (PFNGLFRAMEBUFFERTEXTUREPROC) get_proc("glFramebufferTexture"); - gl3wVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISORPROC) get_proc("glVertexAttribDivisor"); - gl3wMinSampleShading = (PFNGLMINSAMPLESHADINGPROC) get_proc("glMinSampleShading"); - gl3wBlendEquationi = (PFNGLBLENDEQUATIONIPROC) get_proc("glBlendEquationi"); - gl3wBlendEquationSeparatei = (PFNGLBLENDEQUATIONSEPARATEIPROC) get_proc("glBlendEquationSeparatei"); - gl3wBlendFunci = (PFNGLBLENDFUNCIPROC) get_proc("glBlendFunci"); - gl3wBlendFuncSeparatei = (PFNGLBLENDFUNCSEPARATEIPROC) get_proc("glBlendFuncSeparatei"); - gl3wIsRenderbuffer = (PFNGLISRENDERBUFFERPROC) get_proc("glIsRenderbuffer"); - gl3wBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC) get_proc("glBindRenderbuffer"); - gl3wDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC) get_proc("glDeleteRenderbuffers"); - gl3wGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC) get_proc("glGenRenderbuffers"); - gl3wRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC) get_proc("glRenderbufferStorage"); - gl3wGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVPROC) get_proc("glGetRenderbufferParameteriv"); - gl3wIsFramebuffer = (PFNGLISFRAMEBUFFERPROC) get_proc("glIsFramebuffer"); - gl3wBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC) get_proc("glBindFramebuffer"); - gl3wDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC) get_proc("glDeleteFramebuffers"); - gl3wGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC) get_proc("glGenFramebuffers"); - gl3wCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC) get_proc("glCheckFramebufferStatus"); - gl3wFramebufferTexture1D = (PFNGLFRAMEBUFFERTEXTURE1DPROC) get_proc("glFramebufferTexture1D"); - gl3wFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC) get_proc("glFramebufferTexture2D"); - gl3wFramebufferTexture3D = (PFNGLFRAMEBUFFERTEXTURE3DPROC) get_proc("glFramebufferTexture3D"); - gl3wFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC) get_proc("glFramebufferRenderbuffer"); - gl3wGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) get_proc("glGetFramebufferAttachmentParameteriv"); - gl3wGenerateMipmap = (PFNGLGENERATEMIPMAPPROC) get_proc("glGenerateMipmap"); - gl3wBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC) get_proc("glBlitFramebuffer"); - gl3wRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) get_proc("glRenderbufferStorageMultisample"); - gl3wFramebufferTextureLayer = (PFNGLFRAMEBUFFERTEXTURELAYERPROC) get_proc("glFramebufferTextureLayer"); - gl3wMapBufferRange = (PFNGLMAPBUFFERRANGEPROC) get_proc("glMapBufferRange"); - gl3wFlushMappedBufferRange = (PFNGLFLUSHMAPPEDBUFFERRANGEPROC) get_proc("glFlushMappedBufferRange"); - gl3wBindVertexArray = (PFNGLBINDVERTEXARRAYPROC) get_proc("glBindVertexArray"); - gl3wDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC) get_proc("glDeleteVertexArrays"); - gl3wGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC) get_proc("glGenVertexArrays"); - gl3wIsVertexArray = (PFNGLISVERTEXARRAYPROC) get_proc("glIsVertexArray"); - gl3wGetUniformIndices = (PFNGLGETUNIFORMINDICESPROC) get_proc("glGetUniformIndices"); - gl3wGetActiveUniformsiv = (PFNGLGETACTIVEUNIFORMSIVPROC) get_proc("glGetActiveUniformsiv"); - gl3wGetActiveUniformName = (PFNGLGETACTIVEUNIFORMNAMEPROC) get_proc("glGetActiveUniformName"); - gl3wGetUniformBlockIndex = (PFNGLGETUNIFORMBLOCKINDEXPROC) get_proc("glGetUniformBlockIndex"); - gl3wGetActiveUniformBlockiv = (PFNGLGETACTIVEUNIFORMBLOCKIVPROC) get_proc("glGetActiveUniformBlockiv"); - gl3wGetActiveUniformBlockName = (PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) get_proc("glGetActiveUniformBlockName"); - gl3wUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDINGPROC) get_proc("glUniformBlockBinding"); - gl3wCopyBufferSubData = (PFNGLCOPYBUFFERSUBDATAPROC) get_proc("glCopyBufferSubData"); - gl3wDrawElementsBaseVertex = (PFNGLDRAWELEMENTSBASEVERTEXPROC) get_proc("glDrawElementsBaseVertex"); - gl3wDrawRangeElementsBaseVertex = (PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) get_proc("glDrawRangeElementsBaseVertex"); - gl3wDrawElementsInstancedBaseVertex = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) get_proc("glDrawElementsInstancedBaseVertex"); - gl3wMultiDrawElementsBaseVertex = (PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) get_proc("glMultiDrawElementsBaseVertex"); - gl3wProvokingVertex = (PFNGLPROVOKINGVERTEXPROC) get_proc("glProvokingVertex"); - gl3wFenceSync = (PFNGLFENCESYNCPROC) get_proc("glFenceSync"); - gl3wIsSync = (PFNGLISSYNCPROC) get_proc("glIsSync"); - gl3wDeleteSync = (PFNGLDELETESYNCPROC) get_proc("glDeleteSync"); - gl3wClientWaitSync = (PFNGLCLIENTWAITSYNCPROC) get_proc("glClientWaitSync"); - gl3wWaitSync = (PFNGLWAITSYNCPROC) get_proc("glWaitSync"); - gl3wGetInteger64v = (PFNGLGETINTEGER64VPROC) get_proc("glGetInteger64v"); - gl3wGetSynciv = (PFNGLGETSYNCIVPROC) get_proc("glGetSynciv"); - gl3wTexImage2DMultisample = (PFNGLTEXIMAGE2DMULTISAMPLEPROC) get_proc("glTexImage2DMultisample"); - gl3wTexImage3DMultisample = (PFNGLTEXIMAGE3DMULTISAMPLEPROC) get_proc("glTexImage3DMultisample"); - gl3wGetMultisamplefv = (PFNGLGETMULTISAMPLEFVPROC) get_proc("glGetMultisamplefv"); - gl3wSampleMaski = (PFNGLSAMPLEMASKIPROC) get_proc("glSampleMaski"); - gl3wBlendEquationiARB = (PFNGLBLENDEQUATIONIARBPROC) get_proc("glBlendEquationiARB"); - gl3wBlendEquationSeparateiARB = (PFNGLBLENDEQUATIONSEPARATEIARBPROC) get_proc("glBlendEquationSeparateiARB"); - gl3wBlendFunciARB = (PFNGLBLENDFUNCIARBPROC) get_proc("glBlendFunciARB"); - gl3wBlendFuncSeparateiARB = (PFNGLBLENDFUNCSEPARATEIARBPROC) get_proc("glBlendFuncSeparateiARB"); - gl3wMinSampleShadingARB = (PFNGLMINSAMPLESHADINGARBPROC) get_proc("glMinSampleShadingARB"); - gl3wNamedStringARB = (PFNGLNAMEDSTRINGARBPROC) get_proc("glNamedStringARB"); - gl3wDeleteNamedStringARB = (PFNGLDELETENAMEDSTRINGARBPROC) get_proc("glDeleteNamedStringARB"); - gl3wCompileShaderIncludeARB = (PFNGLCOMPILESHADERINCLUDEARBPROC) get_proc("glCompileShaderIncludeARB"); - gl3wIsNamedStringARB = (PFNGLISNAMEDSTRINGARBPROC) get_proc("glIsNamedStringARB"); - gl3wGetNamedStringARB = (PFNGLGETNAMEDSTRINGARBPROC) get_proc("glGetNamedStringARB"); - gl3wGetNamedStringivARB = (PFNGLGETNAMEDSTRINGIVARBPROC) get_proc("glGetNamedStringivARB"); - gl3wBindFragDataLocationIndexed = (PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) get_proc("glBindFragDataLocationIndexed"); - gl3wGetFragDataIndex = (PFNGLGETFRAGDATAINDEXPROC) get_proc("glGetFragDataIndex"); - gl3wGenSamplers = (PFNGLGENSAMPLERSPROC) get_proc("glGenSamplers"); - gl3wDeleteSamplers = (PFNGLDELETESAMPLERSPROC) get_proc("glDeleteSamplers"); - gl3wIsSampler = (PFNGLISSAMPLERPROC) get_proc("glIsSampler"); - gl3wBindSampler = (PFNGLBINDSAMPLERPROC) get_proc("glBindSampler"); - gl3wSamplerParameteri = (PFNGLSAMPLERPARAMETERIPROC) get_proc("glSamplerParameteri"); - gl3wSamplerParameteriv = (PFNGLSAMPLERPARAMETERIVPROC) get_proc("glSamplerParameteriv"); - gl3wSamplerParameterf = (PFNGLSAMPLERPARAMETERFPROC) get_proc("glSamplerParameterf"); - gl3wSamplerParameterfv = (PFNGLSAMPLERPARAMETERFVPROC) get_proc("glSamplerParameterfv"); - gl3wSamplerParameterIiv = (PFNGLSAMPLERPARAMETERIIVPROC) get_proc("glSamplerParameterIiv"); - gl3wSamplerParameterIuiv = (PFNGLSAMPLERPARAMETERIUIVPROC) get_proc("glSamplerParameterIuiv"); - gl3wGetSamplerParameteriv = (PFNGLGETSAMPLERPARAMETERIVPROC) get_proc("glGetSamplerParameteriv"); - gl3wGetSamplerParameterIiv = (PFNGLGETSAMPLERPARAMETERIIVPROC) get_proc("glGetSamplerParameterIiv"); - gl3wGetSamplerParameterfv = (PFNGLGETSAMPLERPARAMETERFVPROC) get_proc("glGetSamplerParameterfv"); - gl3wGetSamplerParameterIuiv = (PFNGLGETSAMPLERPARAMETERIUIVPROC) get_proc("glGetSamplerParameterIuiv"); - gl3wQueryCounter = (PFNGLQUERYCOUNTERPROC) get_proc("glQueryCounter"); - gl3wGetQueryObjecti64v = (PFNGLGETQUERYOBJECTI64VPROC) get_proc("glGetQueryObjecti64v"); - gl3wGetQueryObjectui64v = (PFNGLGETQUERYOBJECTUI64VPROC) get_proc("glGetQueryObjectui64v"); - gl3wVertexP2ui = (PFNGLVERTEXP2UIPROC) get_proc("glVertexP2ui"); - gl3wVertexP2uiv = (PFNGLVERTEXP2UIVPROC) get_proc("glVertexP2uiv"); - gl3wVertexP3ui = (PFNGLVERTEXP3UIPROC) get_proc("glVertexP3ui"); - gl3wVertexP3uiv = (PFNGLVERTEXP3UIVPROC) get_proc("glVertexP3uiv"); - gl3wVertexP4ui = (PFNGLVERTEXP4UIPROC) get_proc("glVertexP4ui"); - gl3wVertexP4uiv = (PFNGLVERTEXP4UIVPROC) get_proc("glVertexP4uiv"); - gl3wTexCoordP1ui = (PFNGLTEXCOORDP1UIPROC) get_proc("glTexCoordP1ui"); - gl3wTexCoordP1uiv = (PFNGLTEXCOORDP1UIVPROC) get_proc("glTexCoordP1uiv"); - gl3wTexCoordP2ui = (PFNGLTEXCOORDP2UIPROC) get_proc("glTexCoordP2ui"); - gl3wTexCoordP2uiv = (PFNGLTEXCOORDP2UIVPROC) get_proc("glTexCoordP2uiv"); - gl3wTexCoordP3ui = (PFNGLTEXCOORDP3UIPROC) get_proc("glTexCoordP3ui"); - gl3wTexCoordP3uiv = (PFNGLTEXCOORDP3UIVPROC) get_proc("glTexCoordP3uiv"); - gl3wTexCoordP4ui = (PFNGLTEXCOORDP4UIPROC) get_proc("glTexCoordP4ui"); - gl3wTexCoordP4uiv = (PFNGLTEXCOORDP4UIVPROC) get_proc("glTexCoordP4uiv"); - gl3wMultiTexCoordP1ui = (PFNGLMULTITEXCOORDP1UIPROC) get_proc("glMultiTexCoordP1ui"); - gl3wMultiTexCoordP1uiv = (PFNGLMULTITEXCOORDP1UIVPROC) get_proc("glMultiTexCoordP1uiv"); - gl3wMultiTexCoordP2ui = (PFNGLMULTITEXCOORDP2UIPROC) get_proc("glMultiTexCoordP2ui"); - gl3wMultiTexCoordP2uiv = (PFNGLMULTITEXCOORDP2UIVPROC) get_proc("glMultiTexCoordP2uiv"); - gl3wMultiTexCoordP3ui = (PFNGLMULTITEXCOORDP3UIPROC) get_proc("glMultiTexCoordP3ui"); - gl3wMultiTexCoordP3uiv = (PFNGLMULTITEXCOORDP3UIVPROC) get_proc("glMultiTexCoordP3uiv"); - gl3wMultiTexCoordP4ui = (PFNGLMULTITEXCOORDP4UIPROC) get_proc("glMultiTexCoordP4ui"); - gl3wMultiTexCoordP4uiv = (PFNGLMULTITEXCOORDP4UIVPROC) get_proc("glMultiTexCoordP4uiv"); - gl3wNormalP3ui = (PFNGLNORMALP3UIPROC) get_proc("glNormalP3ui"); - gl3wNormalP3uiv = (PFNGLNORMALP3UIVPROC) get_proc("glNormalP3uiv"); - gl3wColorP3ui = (PFNGLCOLORP3UIPROC) get_proc("glColorP3ui"); - gl3wColorP3uiv = (PFNGLCOLORP3UIVPROC) get_proc("glColorP3uiv"); - gl3wColorP4ui = (PFNGLCOLORP4UIPROC) get_proc("glColorP4ui"); - gl3wColorP4uiv = (PFNGLCOLORP4UIVPROC) get_proc("glColorP4uiv"); - gl3wSecondaryColorP3ui = (PFNGLSECONDARYCOLORP3UIPROC) get_proc("glSecondaryColorP3ui"); - gl3wSecondaryColorP3uiv = (PFNGLSECONDARYCOLORP3UIVPROC) get_proc("glSecondaryColorP3uiv"); - gl3wVertexAttribP1ui = (PFNGLVERTEXATTRIBP1UIPROC) get_proc("glVertexAttribP1ui"); - gl3wVertexAttribP1uiv = (PFNGLVERTEXATTRIBP1UIVPROC) get_proc("glVertexAttribP1uiv"); - gl3wVertexAttribP2ui = (PFNGLVERTEXATTRIBP2UIPROC) get_proc("glVertexAttribP2ui"); - gl3wVertexAttribP2uiv = (PFNGLVERTEXATTRIBP2UIVPROC) get_proc("glVertexAttribP2uiv"); - gl3wVertexAttribP3ui = (PFNGLVERTEXATTRIBP3UIPROC) get_proc("glVertexAttribP3ui"); - gl3wVertexAttribP3uiv = (PFNGLVERTEXATTRIBP3UIVPROC) get_proc("glVertexAttribP3uiv"); - gl3wVertexAttribP4ui = (PFNGLVERTEXATTRIBP4UIPROC) get_proc("glVertexAttribP4ui"); - gl3wVertexAttribP4uiv = (PFNGLVERTEXATTRIBP4UIVPROC) get_proc("glVertexAttribP4uiv"); - gl3wDrawArraysIndirect = (PFNGLDRAWARRAYSINDIRECTPROC) get_proc("glDrawArraysIndirect"); - gl3wDrawElementsIndirect = (PFNGLDRAWELEMENTSINDIRECTPROC) get_proc("glDrawElementsIndirect"); - gl3wUniform1d = (PFNGLUNIFORM1DPROC) get_proc("glUniform1d"); - gl3wUniform2d = (PFNGLUNIFORM2DPROC) get_proc("glUniform2d"); - gl3wUniform3d = (PFNGLUNIFORM3DPROC) get_proc("glUniform3d"); - gl3wUniform4d = (PFNGLUNIFORM4DPROC) get_proc("glUniform4d"); - gl3wUniform1dv = (PFNGLUNIFORM1DVPROC) get_proc("glUniform1dv"); - gl3wUniform2dv = (PFNGLUNIFORM2DVPROC) get_proc("glUniform2dv"); - gl3wUniform3dv = (PFNGLUNIFORM3DVPROC) get_proc("glUniform3dv"); - gl3wUniform4dv = (PFNGLUNIFORM4DVPROC) get_proc("glUniform4dv"); - gl3wUniformMatrix2dv = (PFNGLUNIFORMMATRIX2DVPROC) get_proc("glUniformMatrix2dv"); - gl3wUniformMatrix3dv = (PFNGLUNIFORMMATRIX3DVPROC) get_proc("glUniformMatrix3dv"); - gl3wUniformMatrix4dv = (PFNGLUNIFORMMATRIX4DVPROC) get_proc("glUniformMatrix4dv"); - gl3wUniformMatrix2x3dv = (PFNGLUNIFORMMATRIX2X3DVPROC) get_proc("glUniformMatrix2x3dv"); - gl3wUniformMatrix2x4dv = (PFNGLUNIFORMMATRIX2X4DVPROC) get_proc("glUniformMatrix2x4dv"); - gl3wUniformMatrix3x2dv = (PFNGLUNIFORMMATRIX3X2DVPROC) get_proc("glUniformMatrix3x2dv"); - gl3wUniformMatrix3x4dv = (PFNGLUNIFORMMATRIX3X4DVPROC) get_proc("glUniformMatrix3x4dv"); - gl3wUniformMatrix4x2dv = (PFNGLUNIFORMMATRIX4X2DVPROC) get_proc("glUniformMatrix4x2dv"); - gl3wUniformMatrix4x3dv = (PFNGLUNIFORMMATRIX4X3DVPROC) get_proc("glUniformMatrix4x3dv"); - gl3wGetUniformdv = (PFNGLGETUNIFORMDVPROC) get_proc("glGetUniformdv"); - gl3wGetSubroutineUniformLocation = (PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) get_proc("glGetSubroutineUniformLocation"); - gl3wGetSubroutineIndex = (PFNGLGETSUBROUTINEINDEXPROC) get_proc("glGetSubroutineIndex"); - gl3wGetActiveSubroutineUniformiv = (PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) get_proc("glGetActiveSubroutineUniformiv"); - gl3wGetActiveSubroutineUniformName = (PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) get_proc("glGetActiveSubroutineUniformName"); - gl3wGetActiveSubroutineName = (PFNGLGETACTIVESUBROUTINENAMEPROC) get_proc("glGetActiveSubroutineName"); - gl3wUniformSubroutinesuiv = (PFNGLUNIFORMSUBROUTINESUIVPROC) get_proc("glUniformSubroutinesuiv"); - gl3wGetUniformSubroutineuiv = (PFNGLGETUNIFORMSUBROUTINEUIVPROC) get_proc("glGetUniformSubroutineuiv"); - gl3wGetProgramStageiv = (PFNGLGETPROGRAMSTAGEIVPROC) get_proc("glGetProgramStageiv"); - gl3wPatchParameteri = (PFNGLPATCHPARAMETERIPROC) get_proc("glPatchParameteri"); - gl3wPatchParameterfv = (PFNGLPATCHPARAMETERFVPROC) get_proc("glPatchParameterfv"); - gl3wBindTransformFeedback = (PFNGLBINDTRANSFORMFEEDBACKPROC) get_proc("glBindTransformFeedback"); - gl3wDeleteTransformFeedbacks = (PFNGLDELETETRANSFORMFEEDBACKSPROC) get_proc("glDeleteTransformFeedbacks"); - gl3wGenTransformFeedbacks = (PFNGLGENTRANSFORMFEEDBACKSPROC) get_proc("glGenTransformFeedbacks"); - gl3wIsTransformFeedback = (PFNGLISTRANSFORMFEEDBACKPROC) get_proc("glIsTransformFeedback"); - gl3wPauseTransformFeedback = (PFNGLPAUSETRANSFORMFEEDBACKPROC) get_proc("glPauseTransformFeedback"); - gl3wResumeTransformFeedback = (PFNGLRESUMETRANSFORMFEEDBACKPROC) get_proc("glResumeTransformFeedback"); - gl3wDrawTransformFeedback = (PFNGLDRAWTRANSFORMFEEDBACKPROC) get_proc("glDrawTransformFeedback"); - gl3wDrawTransformFeedbackStream = (PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) get_proc("glDrawTransformFeedbackStream"); - gl3wBeginQueryIndexed = (PFNGLBEGINQUERYINDEXEDPROC) get_proc("glBeginQueryIndexed"); - gl3wEndQueryIndexed = (PFNGLENDQUERYINDEXEDPROC) get_proc("glEndQueryIndexed"); - gl3wGetQueryIndexediv = (PFNGLGETQUERYINDEXEDIVPROC) get_proc("glGetQueryIndexediv"); - gl3wReleaseShaderCompiler = (PFNGLRELEASESHADERCOMPILERPROC) get_proc("glReleaseShaderCompiler"); - gl3wShaderBinary = (PFNGLSHADERBINARYPROC) get_proc("glShaderBinary"); - gl3wGetShaderPrecisionFormat = (PFNGLGETSHADERPRECISIONFORMATPROC) get_proc("glGetShaderPrecisionFormat"); - gl3wDepthRangef = (PFNGLDEPTHRANGEFPROC) get_proc("glDepthRangef"); - gl3wClearDepthf = (PFNGLCLEARDEPTHFPROC) get_proc("glClearDepthf"); - gl3wGetProgramBinary = (PFNGLGETPROGRAMBINARYPROC) get_proc("glGetProgramBinary"); - gl3wProgramBinary = (PFNGLPROGRAMBINARYPROC) get_proc("glProgramBinary"); - gl3wProgramParameteri = (PFNGLPROGRAMPARAMETERIPROC) get_proc("glProgramParameteri"); - gl3wUseProgramStages = (PFNGLUSEPROGRAMSTAGESPROC) get_proc("glUseProgramStages"); - gl3wActiveShaderProgram = (PFNGLACTIVESHADERPROGRAMPROC) get_proc("glActiveShaderProgram"); - gl3wCreateShaderProgramv = (PFNGLCREATESHADERPROGRAMVPROC) get_proc("glCreateShaderProgramv"); - gl3wBindProgramPipeline = (PFNGLBINDPROGRAMPIPELINEPROC) get_proc("glBindProgramPipeline"); - gl3wDeleteProgramPipelines = (PFNGLDELETEPROGRAMPIPELINESPROC) get_proc("glDeleteProgramPipelines"); - gl3wGenProgramPipelines = (PFNGLGENPROGRAMPIPELINESPROC) get_proc("glGenProgramPipelines"); - gl3wIsProgramPipeline = (PFNGLISPROGRAMPIPELINEPROC) get_proc("glIsProgramPipeline"); - gl3wGetProgramPipelineiv = (PFNGLGETPROGRAMPIPELINEIVPROC) get_proc("glGetProgramPipelineiv"); - gl3wProgramUniform1i = (PFNGLPROGRAMUNIFORM1IPROC) get_proc("glProgramUniform1i"); - gl3wProgramUniform1iv = (PFNGLPROGRAMUNIFORM1IVPROC) get_proc("glProgramUniform1iv"); - gl3wProgramUniform1f = (PFNGLPROGRAMUNIFORM1FPROC) get_proc("glProgramUniform1f"); - gl3wProgramUniform1fv = (PFNGLPROGRAMUNIFORM1FVPROC) get_proc("glProgramUniform1fv"); - gl3wProgramUniform1d = (PFNGLPROGRAMUNIFORM1DPROC) get_proc("glProgramUniform1d"); - gl3wProgramUniform1dv = (PFNGLPROGRAMUNIFORM1DVPROC) get_proc("glProgramUniform1dv"); - gl3wProgramUniform1ui = (PFNGLPROGRAMUNIFORM1UIPROC) get_proc("glProgramUniform1ui"); - gl3wProgramUniform1uiv = (PFNGLPROGRAMUNIFORM1UIVPROC) get_proc("glProgramUniform1uiv"); - gl3wProgramUniform2i = (PFNGLPROGRAMUNIFORM2IPROC) get_proc("glProgramUniform2i"); - gl3wProgramUniform2iv = (PFNGLPROGRAMUNIFORM2IVPROC) get_proc("glProgramUniform2iv"); - gl3wProgramUniform2f = (PFNGLPROGRAMUNIFORM2FPROC) get_proc("glProgramUniform2f"); - gl3wProgramUniform2fv = (PFNGLPROGRAMUNIFORM2FVPROC) get_proc("glProgramUniform2fv"); - gl3wProgramUniform2d = (PFNGLPROGRAMUNIFORM2DPROC) get_proc("glProgramUniform2d"); - gl3wProgramUniform2dv = (PFNGLPROGRAMUNIFORM2DVPROC) get_proc("glProgramUniform2dv"); - gl3wProgramUniform2ui = (PFNGLPROGRAMUNIFORM2UIPROC) get_proc("glProgramUniform2ui"); - gl3wProgramUniform2uiv = (PFNGLPROGRAMUNIFORM2UIVPROC) get_proc("glProgramUniform2uiv"); - gl3wProgramUniform3i = (PFNGLPROGRAMUNIFORM3IPROC) get_proc("glProgramUniform3i"); - gl3wProgramUniform3iv = (PFNGLPROGRAMUNIFORM3IVPROC) get_proc("glProgramUniform3iv"); - gl3wProgramUniform3f = (PFNGLPROGRAMUNIFORM3FPROC) get_proc("glProgramUniform3f"); - gl3wProgramUniform3fv = (PFNGLPROGRAMUNIFORM3FVPROC) get_proc("glProgramUniform3fv"); - gl3wProgramUniform3d = (PFNGLPROGRAMUNIFORM3DPROC) get_proc("glProgramUniform3d"); - gl3wProgramUniform3dv = (PFNGLPROGRAMUNIFORM3DVPROC) get_proc("glProgramUniform3dv"); - gl3wProgramUniform3ui = (PFNGLPROGRAMUNIFORM3UIPROC) get_proc("glProgramUniform3ui"); - gl3wProgramUniform3uiv = (PFNGLPROGRAMUNIFORM3UIVPROC) get_proc("glProgramUniform3uiv"); - gl3wProgramUniform4i = (PFNGLPROGRAMUNIFORM4IPROC) get_proc("glProgramUniform4i"); - gl3wProgramUniform4iv = (PFNGLPROGRAMUNIFORM4IVPROC) get_proc("glProgramUniform4iv"); - gl3wProgramUniform4f = (PFNGLPROGRAMUNIFORM4FPROC) get_proc("glProgramUniform4f"); - gl3wProgramUniform4fv = (PFNGLPROGRAMUNIFORM4FVPROC) get_proc("glProgramUniform4fv"); - gl3wProgramUniform4d = (PFNGLPROGRAMUNIFORM4DPROC) get_proc("glProgramUniform4d"); - gl3wProgramUniform4dv = (PFNGLPROGRAMUNIFORM4DVPROC) get_proc("glProgramUniform4dv"); - gl3wProgramUniform4ui = (PFNGLPROGRAMUNIFORM4UIPROC) get_proc("glProgramUniform4ui"); - gl3wProgramUniform4uiv = (PFNGLPROGRAMUNIFORM4UIVPROC) get_proc("glProgramUniform4uiv"); - gl3wProgramUniformMatrix2fv = (PFNGLPROGRAMUNIFORMMATRIX2FVPROC) get_proc("glProgramUniformMatrix2fv"); - gl3wProgramUniformMatrix3fv = (PFNGLPROGRAMUNIFORMMATRIX3FVPROC) get_proc("glProgramUniformMatrix3fv"); - gl3wProgramUniformMatrix4fv = (PFNGLPROGRAMUNIFORMMATRIX4FVPROC) get_proc("glProgramUniformMatrix4fv"); - gl3wProgramUniformMatrix2dv = (PFNGLPROGRAMUNIFORMMATRIX2DVPROC) get_proc("glProgramUniformMatrix2dv"); - gl3wProgramUniformMatrix3dv = (PFNGLPROGRAMUNIFORMMATRIX3DVPROC) get_proc("glProgramUniformMatrix3dv"); - gl3wProgramUniformMatrix4dv = (PFNGLPROGRAMUNIFORMMATRIX4DVPROC) get_proc("glProgramUniformMatrix4dv"); - gl3wProgramUniformMatrix2x3fv = (PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) get_proc("glProgramUniformMatrix2x3fv"); - gl3wProgramUniformMatrix3x2fv = (PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) get_proc("glProgramUniformMatrix3x2fv"); - gl3wProgramUniformMatrix2x4fv = (PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) get_proc("glProgramUniformMatrix2x4fv"); - gl3wProgramUniformMatrix4x2fv = (PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) get_proc("glProgramUniformMatrix4x2fv"); - gl3wProgramUniformMatrix3x4fv = (PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) get_proc("glProgramUniformMatrix3x4fv"); - gl3wProgramUniformMatrix4x3fv = (PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) get_proc("glProgramUniformMatrix4x3fv"); - gl3wProgramUniformMatrix2x3dv = (PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) get_proc("glProgramUniformMatrix2x3dv"); - gl3wProgramUniformMatrix3x2dv = (PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) get_proc("glProgramUniformMatrix3x2dv"); - gl3wProgramUniformMatrix2x4dv = (PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) get_proc("glProgramUniformMatrix2x4dv"); - gl3wProgramUniformMatrix4x2dv = (PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) get_proc("glProgramUniformMatrix4x2dv"); - gl3wProgramUniformMatrix3x4dv = (PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) get_proc("glProgramUniformMatrix3x4dv"); - gl3wProgramUniformMatrix4x3dv = (PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) get_proc("glProgramUniformMatrix4x3dv"); - gl3wValidateProgramPipeline = (PFNGLVALIDATEPROGRAMPIPELINEPROC) get_proc("glValidateProgramPipeline"); - gl3wGetProgramPipelineInfoLog = (PFNGLGETPROGRAMPIPELINEINFOLOGPROC) get_proc("glGetProgramPipelineInfoLog"); - gl3wVertexAttribL1d = (PFNGLVERTEXATTRIBL1DPROC) get_proc("glVertexAttribL1d"); - gl3wVertexAttribL2d = (PFNGLVERTEXATTRIBL2DPROC) get_proc("glVertexAttribL2d"); - gl3wVertexAttribL3d = (PFNGLVERTEXATTRIBL3DPROC) get_proc("glVertexAttribL3d"); - gl3wVertexAttribL4d = (PFNGLVERTEXATTRIBL4DPROC) get_proc("glVertexAttribL4d"); - gl3wVertexAttribL1dv = (PFNGLVERTEXATTRIBL1DVPROC) get_proc("glVertexAttribL1dv"); - gl3wVertexAttribL2dv = (PFNGLVERTEXATTRIBL2DVPROC) get_proc("glVertexAttribL2dv"); - gl3wVertexAttribL3dv = (PFNGLVERTEXATTRIBL3DVPROC) get_proc("glVertexAttribL3dv"); - gl3wVertexAttribL4dv = (PFNGLVERTEXATTRIBL4DVPROC) get_proc("glVertexAttribL4dv"); - gl3wVertexAttribLPointer = (PFNGLVERTEXATTRIBLPOINTERPROC) get_proc("glVertexAttribLPointer"); - gl3wGetVertexAttribLdv = (PFNGLGETVERTEXATTRIBLDVPROC) get_proc("glGetVertexAttribLdv"); - gl3wViewportArrayv = (PFNGLVIEWPORTARRAYVPROC) get_proc("glViewportArrayv"); - gl3wViewportIndexedf = (PFNGLVIEWPORTINDEXEDFPROC) get_proc("glViewportIndexedf"); - gl3wViewportIndexedfv = (PFNGLVIEWPORTINDEXEDFVPROC) get_proc("glViewportIndexedfv"); - gl3wScissorArrayv = (PFNGLSCISSORARRAYVPROC) get_proc("glScissorArrayv"); - gl3wScissorIndexed = (PFNGLSCISSORINDEXEDPROC) get_proc("glScissorIndexed"); - gl3wScissorIndexedv = (PFNGLSCISSORINDEXEDVPROC) get_proc("glScissorIndexedv"); - gl3wDepthRangeArrayv = (PFNGLDEPTHRANGEARRAYVPROC) get_proc("glDepthRangeArrayv"); - gl3wDepthRangeIndexed = (PFNGLDEPTHRANGEINDEXEDPROC) get_proc("glDepthRangeIndexed"); - gl3wGetFloati_v = (PFNGLGETFLOATI_VPROC) get_proc("glGetFloati_v"); - gl3wGetDoublei_v = (PFNGLGETDOUBLEI_VPROC) get_proc("glGetDoublei_v"); - gl3wCreateSyncFromCLeventARB = (PFNGLCREATESYNCFROMCLEVENTARBPROC) get_proc("glCreateSyncFromCLeventARB"); - gl3wDebugMessageControlARB = (PFNGLDEBUGMESSAGECONTROLARBPROC) get_proc("glDebugMessageControlARB"); - gl3wDebugMessageInsertARB = (PFNGLDEBUGMESSAGEINSERTARBPROC) get_proc("glDebugMessageInsertARB"); - gl3wDebugMessageCallbackARB = (PFNGLDEBUGMESSAGECALLBACKARBPROC) get_proc("glDebugMessageCallbackARB"); - gl3wGetDebugMessageLogARB = (PFNGLGETDEBUGMESSAGELOGARBPROC) get_proc("glGetDebugMessageLogARB"); - gl3wGetGraphicsResetStatusARB = (PFNGLGETGRAPHICSRESETSTATUSARBPROC) get_proc("glGetGraphicsResetStatusARB"); - gl3wGetnTexImageARB = (PFNGLGETNTEXIMAGEARBPROC) get_proc("glGetnTexImageARB"); - gl3wReadnPixelsARB = (PFNGLREADNPIXELSARBPROC) get_proc("glReadnPixelsARB"); - gl3wGetnCompressedTexImageARB = (PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) get_proc("glGetnCompressedTexImageARB"); - gl3wGetnUniformfvARB = (PFNGLGETNUNIFORMFVARBPROC) get_proc("glGetnUniformfvARB"); - gl3wGetnUniformivARB = (PFNGLGETNUNIFORMIVARBPROC) get_proc("glGetnUniformivARB"); - gl3wGetnUniformuivARB = (PFNGLGETNUNIFORMUIVARBPROC) get_proc("glGetnUniformuivARB"); - gl3wGetnUniformdvARB = (PFNGLGETNUNIFORMDVARBPROC) get_proc("glGetnUniformdvARB"); - gl3wDrawArraysInstancedBaseInstance = (PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC) get_proc("glDrawArraysInstancedBaseInstance"); - gl3wDrawElementsInstancedBaseInstance = (PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) get_proc("glDrawElementsInstancedBaseInstance"); - gl3wDrawElementsInstancedBaseVertexBaseInstance = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) get_proc("glDrawElementsInstancedBaseVertexBaseInstance"); - gl3wDrawTransformFeedbackInstanced = (PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC) get_proc("glDrawTransformFeedbackInstanced"); - gl3wDrawTransformFeedbackStreamInstanced = (PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC) get_proc("glDrawTransformFeedbackStreamInstanced"); - gl3wGetInternalformativ = (PFNGLGETINTERNALFORMATIVPROC) get_proc("glGetInternalformativ"); - gl3wGetActiveAtomicCounterBufferiv = (PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC) get_proc("glGetActiveAtomicCounterBufferiv"); - gl3wBindImageTexture = (PFNGLBINDIMAGETEXTUREPROC) get_proc("glBindImageTexture"); - gl3wMemoryBarrier = (PFNGLMEMORYBARRIERPROC) get_proc("glMemoryBarrier"); - gl3wTexStorage1D = (PFNGLTEXSTORAGE1DPROC) get_proc("glTexStorage1D"); - gl3wTexStorage2D = (PFNGLTEXSTORAGE2DPROC) get_proc("glTexStorage2D"); - gl3wTexStorage3D = (PFNGLTEXSTORAGE3DPROC) get_proc("glTexStorage3D"); - gl3wTextureStorage1DEXT = (PFNGLTEXTURESTORAGE1DEXTPROC) get_proc("glTextureStorage1DEXT"); - gl3wTextureStorage2DEXT = (PFNGLTEXTURESTORAGE2DEXTPROC) get_proc("glTextureStorage2DEXT"); - gl3wTextureStorage3DEXT = (PFNGLTEXTURESTORAGE3DEXTPROC) get_proc("glTextureStorage3DEXT"); - gl3wDebugMessageControl = (PFNGLDEBUGMESSAGECONTROLPROC) get_proc("glDebugMessageControl"); - gl3wDebugMessageInsert = (PFNGLDEBUGMESSAGEINSERTPROC) get_proc("glDebugMessageInsert"); - gl3wDebugMessageCallback = (PFNGLDEBUGMESSAGECALLBACKPROC) get_proc("glDebugMessageCallback"); - gl3wGetDebugMessageLog = (PFNGLGETDEBUGMESSAGELOGPROC) get_proc("glGetDebugMessageLog"); - gl3wPushDebugGroup = (PFNGLPUSHDEBUGGROUPPROC) get_proc("glPushDebugGroup"); - gl3wPopDebugGroup = (PFNGLPOPDEBUGGROUPPROC) get_proc("glPopDebugGroup"); - gl3wObjectLabel = (PFNGLOBJECTLABELPROC) get_proc("glObjectLabel"); - gl3wGetObjectLabel = (PFNGLGETOBJECTLABELPROC) get_proc("glGetObjectLabel"); - gl3wObjectPtrLabel = (PFNGLOBJECTPTRLABELPROC) get_proc("glObjectPtrLabel"); - gl3wGetObjectPtrLabel = (PFNGLGETOBJECTPTRLABELPROC) get_proc("glGetObjectPtrLabel"); - gl3wClearBufferData = (PFNGLCLEARBUFFERDATAPROC) get_proc("glClearBufferData"); - gl3wClearBufferSubData = (PFNGLCLEARBUFFERSUBDATAPROC) get_proc("glClearBufferSubData"); - gl3wClearNamedBufferDataEXT = (PFNGLCLEARNAMEDBUFFERDATAEXTPROC) get_proc("glClearNamedBufferDataEXT"); - gl3wClearNamedBufferSubDataEXT = (PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC) get_proc("glClearNamedBufferSubDataEXT"); - gl3wDispatchCompute = (PFNGLDISPATCHCOMPUTEPROC) get_proc("glDispatchCompute"); - gl3wDispatchComputeIndirect = (PFNGLDISPATCHCOMPUTEINDIRECTPROC) get_proc("glDispatchComputeIndirect"); - gl3wCopyImageSubData = (PFNGLCOPYIMAGESUBDATAPROC) get_proc("glCopyImageSubData"); - gl3wTextureView = (PFNGLTEXTUREVIEWPROC) get_proc("glTextureView"); - gl3wBindVertexBuffer = (PFNGLBINDVERTEXBUFFERPROC) get_proc("glBindVertexBuffer"); - gl3wVertexAttribFormat = (PFNGLVERTEXATTRIBFORMATPROC) get_proc("glVertexAttribFormat"); - gl3wVertexAttribIFormat = (PFNGLVERTEXATTRIBIFORMATPROC) get_proc("glVertexAttribIFormat"); - gl3wVertexAttribLFormat = (PFNGLVERTEXATTRIBLFORMATPROC) get_proc("glVertexAttribLFormat"); - gl3wVertexAttribBinding = (PFNGLVERTEXATTRIBBINDINGPROC) get_proc("glVertexAttribBinding"); - gl3wVertexBindingDivisor = (PFNGLVERTEXBINDINGDIVISORPROC) get_proc("glVertexBindingDivisor"); - gl3wVertexArrayBindVertexBufferEXT = (PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC) get_proc("glVertexArrayBindVertexBufferEXT"); - gl3wVertexArrayVertexAttribFormatEXT = (PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC) get_proc("glVertexArrayVertexAttribFormatEXT"); - gl3wVertexArrayVertexAttribIFormatEXT = (PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC) get_proc("glVertexArrayVertexAttribIFormatEXT"); - gl3wVertexArrayVertexAttribLFormatEXT = (PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC) get_proc("glVertexArrayVertexAttribLFormatEXT"); - gl3wVertexArrayVertexAttribBindingEXT = (PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC) get_proc("glVertexArrayVertexAttribBindingEXT"); - gl3wVertexArrayVertexBindingDivisorEXT = (PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC) get_proc("glVertexArrayVertexBindingDivisorEXT"); - gl3wFramebufferParameteri = (PFNGLFRAMEBUFFERPARAMETERIPROC) get_proc("glFramebufferParameteri"); - gl3wGetFramebufferParameteriv = (PFNGLGETFRAMEBUFFERPARAMETERIVPROC) get_proc("glGetFramebufferParameteriv"); - gl3wNamedFramebufferParameteriEXT = (PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC) get_proc("glNamedFramebufferParameteriEXT"); - gl3wGetNamedFramebufferParameterivEXT = (PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC) get_proc("glGetNamedFramebufferParameterivEXT"); - gl3wGetInternalformati64v = (PFNGLGETINTERNALFORMATI64VPROC) get_proc("glGetInternalformati64v"); - gl3wInvalidateTexSubImage = (PFNGLINVALIDATETEXSUBIMAGEPROC) get_proc("glInvalidateTexSubImage"); - gl3wInvalidateTexImage = (PFNGLINVALIDATETEXIMAGEPROC) get_proc("glInvalidateTexImage"); - gl3wInvalidateBufferSubData = (PFNGLINVALIDATEBUFFERSUBDATAPROC) get_proc("glInvalidateBufferSubData"); - gl3wInvalidateBufferData = (PFNGLINVALIDATEBUFFERDATAPROC) get_proc("glInvalidateBufferData"); - gl3wInvalidateFramebuffer = (PFNGLINVALIDATEFRAMEBUFFERPROC) get_proc("glInvalidateFramebuffer"); - gl3wInvalidateSubFramebuffer = (PFNGLINVALIDATESUBFRAMEBUFFERPROC) get_proc("glInvalidateSubFramebuffer"); - gl3wMultiDrawArraysIndirect = (PFNGLMULTIDRAWARRAYSINDIRECTPROC) get_proc("glMultiDrawArraysIndirect"); - gl3wMultiDrawElementsIndirect = (PFNGLMULTIDRAWELEMENTSINDIRECTPROC) get_proc("glMultiDrawElementsIndirect"); - gl3wGetProgramInterfaceiv = (PFNGLGETPROGRAMINTERFACEIVPROC) get_proc("glGetProgramInterfaceiv"); - gl3wGetProgramResourceIndex = (PFNGLGETPROGRAMRESOURCEINDEXPROC) get_proc("glGetProgramResourceIndex"); - gl3wGetProgramResourceName = (PFNGLGETPROGRAMRESOURCENAMEPROC) get_proc("glGetProgramResourceName"); - gl3wGetProgramResourceiv = (PFNGLGETPROGRAMRESOURCEIVPROC) get_proc("glGetProgramResourceiv"); - gl3wGetProgramResourceLocation = (PFNGLGETPROGRAMRESOURCELOCATIONPROC) get_proc("glGetProgramResourceLocation"); - gl3wGetProgramResourceLocationIndex = (PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) get_proc("glGetProgramResourceLocationIndex"); - gl3wShaderStorageBlockBinding = (PFNGLSHADERSTORAGEBLOCKBINDINGPROC) get_proc("glShaderStorageBlockBinding"); - gl3wTexBufferRange = (PFNGLTEXBUFFERRANGEPROC) get_proc("glTexBufferRange"); - gl3wTextureBufferRangeEXT = (PFNGLTEXTUREBUFFERRANGEEXTPROC) get_proc("glTextureBufferRangeEXT"); - gl3wTexStorage2DMultisample = (PFNGLTEXSTORAGE2DMULTISAMPLEPROC) get_proc("glTexStorage2DMultisample"); - gl3wTexStorage3DMultisample = (PFNGLTEXSTORAGE3DMULTISAMPLEPROC) get_proc("glTexStorage3DMultisample"); - gl3wTextureStorage2DMultisampleEXT = (PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC) get_proc("glTextureStorage2DMultisampleEXT"); - gl3wTextureStorage3DMultisampleEXT = (PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC) get_proc("glTextureStorage3DMultisampleEXT"); -} diff --git a/cmake/imgui/examples/libs/gl3w/GL/gl3w.h b/cmake/imgui/examples/libs/gl3w/GL/gl3w.h deleted file mode 100644 index ee563f8d..00000000 --- a/cmake/imgui/examples/libs/gl3w/GL/gl3w.h +++ /dev/null @@ -1,1234 +0,0 @@ -#ifndef __gl3w_h_ -#define __gl3w_h_ - -#include - -#ifndef __gl_h_ -#define __gl_h_ -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* gl3w api */ -int gl3wInit(void); -int gl3wIsSupported(int major, int minor); -void *gl3wGetProcAddress(const char *proc); - -/* OpenGL functions */ -extern PFNGLCULLFACEPROC gl3wCullFace; -extern PFNGLFRONTFACEPROC gl3wFrontFace; -extern PFNGLHINTPROC gl3wHint; -extern PFNGLLINEWIDTHPROC gl3wLineWidth; -extern PFNGLPOINTSIZEPROC gl3wPointSize; -extern PFNGLPOLYGONMODEPROC gl3wPolygonMode; -extern PFNGLSCISSORPROC gl3wScissor; -extern PFNGLTEXPARAMETERFPROC gl3wTexParameterf; -extern PFNGLTEXPARAMETERFVPROC gl3wTexParameterfv; -extern PFNGLTEXPARAMETERIPROC gl3wTexParameteri; -extern PFNGLTEXPARAMETERIVPROC gl3wTexParameteriv; -extern PFNGLTEXIMAGE1DPROC gl3wTexImage1D; -extern PFNGLTEXIMAGE2DPROC gl3wTexImage2D; -extern PFNGLDRAWBUFFERPROC gl3wDrawBuffer; -extern PFNGLCLEARPROC gl3wClear; -extern PFNGLCLEARCOLORPROC gl3wClearColor; -extern PFNGLCLEARSTENCILPROC gl3wClearStencil; -extern PFNGLCLEARDEPTHPROC gl3wClearDepth; -extern PFNGLSTENCILMASKPROC gl3wStencilMask; -extern PFNGLCOLORMASKPROC gl3wColorMask; -extern PFNGLDEPTHMASKPROC gl3wDepthMask; -extern PFNGLDISABLEPROC gl3wDisable; -extern PFNGLENABLEPROC gl3wEnable; -extern PFNGLFINISHPROC gl3wFinish; -extern PFNGLFLUSHPROC gl3wFlush; -extern PFNGLBLENDFUNCPROC gl3wBlendFunc; -extern PFNGLLOGICOPPROC gl3wLogicOp; -extern PFNGLSTENCILFUNCPROC gl3wStencilFunc; -extern PFNGLSTENCILOPPROC gl3wStencilOp; -extern PFNGLDEPTHFUNCPROC gl3wDepthFunc; -extern PFNGLPIXELSTOREFPROC gl3wPixelStoref; -extern PFNGLPIXELSTOREIPROC gl3wPixelStorei; -extern PFNGLREADBUFFERPROC gl3wReadBuffer; -extern PFNGLREADPIXELSPROC gl3wReadPixels; -extern PFNGLGETBOOLEANVPROC gl3wGetBooleanv; -extern PFNGLGETDOUBLEVPROC gl3wGetDoublev; -extern PFNGLGETERRORPROC gl3wGetError; -extern PFNGLGETFLOATVPROC gl3wGetFloatv; -extern PFNGLGETINTEGERVPROC gl3wGetIntegerv; -extern PFNGLGETSTRINGPROC gl3wGetString; -extern PFNGLGETTEXIMAGEPROC gl3wGetTexImage; -extern PFNGLGETTEXPARAMETERFVPROC gl3wGetTexParameterfv; -extern PFNGLGETTEXPARAMETERIVPROC gl3wGetTexParameteriv; -extern PFNGLGETTEXLEVELPARAMETERFVPROC gl3wGetTexLevelParameterfv; -extern PFNGLGETTEXLEVELPARAMETERIVPROC gl3wGetTexLevelParameteriv; -extern PFNGLISENABLEDPROC gl3wIsEnabled; -extern PFNGLDEPTHRANGEPROC gl3wDepthRange; -extern PFNGLVIEWPORTPROC gl3wViewport; -extern PFNGLDRAWARRAYSPROC gl3wDrawArrays; -extern PFNGLDRAWELEMENTSPROC gl3wDrawElements; -extern PFNGLGETPOINTERVPROC gl3wGetPointerv; -extern PFNGLPOLYGONOFFSETPROC gl3wPolygonOffset; -extern PFNGLCOPYTEXIMAGE1DPROC gl3wCopyTexImage1D; -extern PFNGLCOPYTEXIMAGE2DPROC gl3wCopyTexImage2D; -extern PFNGLCOPYTEXSUBIMAGE1DPROC gl3wCopyTexSubImage1D; -extern PFNGLCOPYTEXSUBIMAGE2DPROC gl3wCopyTexSubImage2D; -extern PFNGLTEXSUBIMAGE1DPROC gl3wTexSubImage1D; -extern PFNGLTEXSUBIMAGE2DPROC gl3wTexSubImage2D; -extern PFNGLBINDTEXTUREPROC gl3wBindTexture; -extern PFNGLDELETETEXTURESPROC gl3wDeleteTextures; -extern PFNGLGENTEXTURESPROC gl3wGenTextures; -extern PFNGLISTEXTUREPROC gl3wIsTexture; -extern PFNGLBLENDCOLORPROC gl3wBlendColor; -extern PFNGLBLENDEQUATIONPROC gl3wBlendEquation; -extern PFNGLDRAWRANGEELEMENTSPROC gl3wDrawRangeElements; -extern PFNGLTEXIMAGE3DPROC gl3wTexImage3D; -extern PFNGLTEXSUBIMAGE3DPROC gl3wTexSubImage3D; -extern PFNGLCOPYTEXSUBIMAGE3DPROC gl3wCopyTexSubImage3D; -extern PFNGLACTIVETEXTUREPROC gl3wActiveTexture; -extern PFNGLSAMPLECOVERAGEPROC gl3wSampleCoverage; -extern PFNGLCOMPRESSEDTEXIMAGE3DPROC gl3wCompressedTexImage3D; -extern PFNGLCOMPRESSEDTEXIMAGE2DPROC gl3wCompressedTexImage2D; -extern PFNGLCOMPRESSEDTEXIMAGE1DPROC gl3wCompressedTexImage1D; -extern PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC gl3wCompressedTexSubImage3D; -extern PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC gl3wCompressedTexSubImage2D; -extern PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC gl3wCompressedTexSubImage1D; -extern PFNGLGETCOMPRESSEDTEXIMAGEPROC gl3wGetCompressedTexImage; -extern PFNGLBLENDFUNCSEPARATEPROC gl3wBlendFuncSeparate; -extern PFNGLMULTIDRAWARRAYSPROC gl3wMultiDrawArrays; -extern PFNGLMULTIDRAWELEMENTSPROC gl3wMultiDrawElements; -extern PFNGLPOINTPARAMETERFPROC gl3wPointParameterf; -extern PFNGLPOINTPARAMETERFVPROC gl3wPointParameterfv; -extern PFNGLPOINTPARAMETERIPROC gl3wPointParameteri; -extern PFNGLPOINTPARAMETERIVPROC gl3wPointParameteriv; -extern PFNGLGENQUERIESPROC gl3wGenQueries; -extern PFNGLDELETEQUERIESPROC gl3wDeleteQueries; -extern PFNGLISQUERYPROC gl3wIsQuery; -extern PFNGLBEGINQUERYPROC gl3wBeginQuery; -extern PFNGLENDQUERYPROC gl3wEndQuery; -extern PFNGLGETQUERYIVPROC gl3wGetQueryiv; -extern PFNGLGETQUERYOBJECTIVPROC gl3wGetQueryObjectiv; -extern PFNGLGETQUERYOBJECTUIVPROC gl3wGetQueryObjectuiv; -extern PFNGLBINDBUFFERPROC gl3wBindBuffer; -extern PFNGLDELETEBUFFERSPROC gl3wDeleteBuffers; -extern PFNGLGENBUFFERSPROC gl3wGenBuffers; -extern PFNGLISBUFFERPROC gl3wIsBuffer; -extern PFNGLBUFFERDATAPROC gl3wBufferData; -extern PFNGLBUFFERSUBDATAPROC gl3wBufferSubData; -extern PFNGLGETBUFFERSUBDATAPROC gl3wGetBufferSubData; -extern PFNGLMAPBUFFERPROC gl3wMapBuffer; -extern PFNGLUNMAPBUFFERPROC gl3wUnmapBuffer; -extern PFNGLGETBUFFERPARAMETERIVPROC gl3wGetBufferParameteriv; -extern PFNGLGETBUFFERPOINTERVPROC gl3wGetBufferPointerv; -extern PFNGLBLENDEQUATIONSEPARATEPROC gl3wBlendEquationSeparate; -extern PFNGLDRAWBUFFERSPROC gl3wDrawBuffers; -extern PFNGLSTENCILOPSEPARATEPROC gl3wStencilOpSeparate; -extern PFNGLSTENCILFUNCSEPARATEPROC gl3wStencilFuncSeparate; -extern PFNGLSTENCILMASKSEPARATEPROC gl3wStencilMaskSeparate; -extern PFNGLATTACHSHADERPROC gl3wAttachShader; -extern PFNGLBINDATTRIBLOCATIONPROC gl3wBindAttribLocation; -extern PFNGLCOMPILESHADERPROC gl3wCompileShader; -extern PFNGLCREATEPROGRAMPROC gl3wCreateProgram; -extern PFNGLCREATESHADERPROC gl3wCreateShader; -extern PFNGLDELETEPROGRAMPROC gl3wDeleteProgram; -extern PFNGLDELETESHADERPROC gl3wDeleteShader; -extern PFNGLDETACHSHADERPROC gl3wDetachShader; -extern PFNGLDISABLEVERTEXATTRIBARRAYPROC gl3wDisableVertexAttribArray; -extern PFNGLENABLEVERTEXATTRIBARRAYPROC gl3wEnableVertexAttribArray; -extern PFNGLGETACTIVEATTRIBPROC gl3wGetActiveAttrib; -extern PFNGLGETACTIVEUNIFORMPROC gl3wGetActiveUniform; -extern PFNGLGETATTACHEDSHADERSPROC gl3wGetAttachedShaders; -extern PFNGLGETATTRIBLOCATIONPROC gl3wGetAttribLocation; -extern PFNGLGETPROGRAMIVPROC gl3wGetProgramiv; -extern PFNGLGETPROGRAMINFOLOGPROC gl3wGetProgramInfoLog; -extern PFNGLGETSHADERIVPROC gl3wGetShaderiv; -extern PFNGLGETSHADERINFOLOGPROC gl3wGetShaderInfoLog; -extern PFNGLGETSHADERSOURCEPROC gl3wGetShaderSource; -extern PFNGLGETUNIFORMLOCATIONPROC gl3wGetUniformLocation; -extern PFNGLGETUNIFORMFVPROC gl3wGetUniformfv; -extern PFNGLGETUNIFORMIVPROC gl3wGetUniformiv; -extern PFNGLGETVERTEXATTRIBDVPROC gl3wGetVertexAttribdv; -extern PFNGLGETVERTEXATTRIBFVPROC gl3wGetVertexAttribfv; -extern PFNGLGETVERTEXATTRIBIVPROC gl3wGetVertexAttribiv; -extern PFNGLGETVERTEXATTRIBPOINTERVPROC gl3wGetVertexAttribPointerv; -extern PFNGLISPROGRAMPROC gl3wIsProgram; -extern PFNGLISSHADERPROC gl3wIsShader; -extern PFNGLLINKPROGRAMPROC gl3wLinkProgram; -extern PFNGLSHADERSOURCEPROC gl3wShaderSource; -extern PFNGLUSEPROGRAMPROC gl3wUseProgram; -extern PFNGLUNIFORM1FPROC gl3wUniform1f; -extern PFNGLUNIFORM2FPROC gl3wUniform2f; -extern PFNGLUNIFORM3FPROC gl3wUniform3f; -extern PFNGLUNIFORM4FPROC gl3wUniform4f; -extern PFNGLUNIFORM1IPROC gl3wUniform1i; -extern PFNGLUNIFORM2IPROC gl3wUniform2i; -extern PFNGLUNIFORM3IPROC gl3wUniform3i; -extern PFNGLUNIFORM4IPROC gl3wUniform4i; -extern PFNGLUNIFORM1FVPROC gl3wUniform1fv; -extern PFNGLUNIFORM2FVPROC gl3wUniform2fv; -extern PFNGLUNIFORM3FVPROC gl3wUniform3fv; -extern PFNGLUNIFORM4FVPROC gl3wUniform4fv; -extern PFNGLUNIFORM1IVPROC gl3wUniform1iv; -extern PFNGLUNIFORM2IVPROC gl3wUniform2iv; -extern PFNGLUNIFORM3IVPROC gl3wUniform3iv; -extern PFNGLUNIFORM4IVPROC gl3wUniform4iv; -extern PFNGLUNIFORMMATRIX2FVPROC gl3wUniformMatrix2fv; -extern PFNGLUNIFORMMATRIX3FVPROC gl3wUniformMatrix3fv; -extern PFNGLUNIFORMMATRIX4FVPROC gl3wUniformMatrix4fv; -extern PFNGLVALIDATEPROGRAMPROC gl3wValidateProgram; -extern PFNGLVERTEXATTRIB1DPROC gl3wVertexAttrib1d; -extern PFNGLVERTEXATTRIB1DVPROC gl3wVertexAttrib1dv; -extern PFNGLVERTEXATTRIB1FPROC gl3wVertexAttrib1f; -extern PFNGLVERTEXATTRIB1FVPROC gl3wVertexAttrib1fv; -extern PFNGLVERTEXATTRIB1SPROC gl3wVertexAttrib1s; -extern PFNGLVERTEXATTRIB1SVPROC gl3wVertexAttrib1sv; -extern PFNGLVERTEXATTRIB2DPROC gl3wVertexAttrib2d; -extern PFNGLVERTEXATTRIB2DVPROC gl3wVertexAttrib2dv; -extern PFNGLVERTEXATTRIB2FPROC gl3wVertexAttrib2f; -extern PFNGLVERTEXATTRIB2FVPROC gl3wVertexAttrib2fv; -extern PFNGLVERTEXATTRIB2SPROC gl3wVertexAttrib2s; -extern PFNGLVERTEXATTRIB2SVPROC gl3wVertexAttrib2sv; -extern PFNGLVERTEXATTRIB3DPROC gl3wVertexAttrib3d; -extern PFNGLVERTEXATTRIB3DVPROC gl3wVertexAttrib3dv; -extern PFNGLVERTEXATTRIB3FPROC gl3wVertexAttrib3f; -extern PFNGLVERTEXATTRIB3FVPROC gl3wVertexAttrib3fv; -extern PFNGLVERTEXATTRIB3SPROC gl3wVertexAttrib3s; -extern PFNGLVERTEXATTRIB3SVPROC gl3wVertexAttrib3sv; -extern PFNGLVERTEXATTRIB4NBVPROC gl3wVertexAttrib4Nbv; -extern PFNGLVERTEXATTRIB4NIVPROC gl3wVertexAttrib4Niv; -extern PFNGLVERTEXATTRIB4NSVPROC gl3wVertexAttrib4Nsv; -extern PFNGLVERTEXATTRIB4NUBPROC gl3wVertexAttrib4Nub; -extern PFNGLVERTEXATTRIB4NUBVPROC gl3wVertexAttrib4Nubv; -extern PFNGLVERTEXATTRIB4NUIVPROC gl3wVertexAttrib4Nuiv; -extern PFNGLVERTEXATTRIB4NUSVPROC gl3wVertexAttrib4Nusv; -extern PFNGLVERTEXATTRIB4BVPROC gl3wVertexAttrib4bv; -extern PFNGLVERTEXATTRIB4DPROC gl3wVertexAttrib4d; -extern PFNGLVERTEXATTRIB4DVPROC gl3wVertexAttrib4dv; -extern PFNGLVERTEXATTRIB4FPROC gl3wVertexAttrib4f; -extern PFNGLVERTEXATTRIB4FVPROC gl3wVertexAttrib4fv; -extern PFNGLVERTEXATTRIB4IVPROC gl3wVertexAttrib4iv; -extern PFNGLVERTEXATTRIB4SPROC gl3wVertexAttrib4s; -extern PFNGLVERTEXATTRIB4SVPROC gl3wVertexAttrib4sv; -extern PFNGLVERTEXATTRIB4UBVPROC gl3wVertexAttrib4ubv; -extern PFNGLVERTEXATTRIB4UIVPROC gl3wVertexAttrib4uiv; -extern PFNGLVERTEXATTRIB4USVPROC gl3wVertexAttrib4usv; -extern PFNGLVERTEXATTRIBPOINTERPROC gl3wVertexAttribPointer; -extern PFNGLUNIFORMMATRIX2X3FVPROC gl3wUniformMatrix2x3fv; -extern PFNGLUNIFORMMATRIX3X2FVPROC gl3wUniformMatrix3x2fv; -extern PFNGLUNIFORMMATRIX2X4FVPROC gl3wUniformMatrix2x4fv; -extern PFNGLUNIFORMMATRIX4X2FVPROC gl3wUniformMatrix4x2fv; -extern PFNGLUNIFORMMATRIX3X4FVPROC gl3wUniformMatrix3x4fv; -extern PFNGLUNIFORMMATRIX4X3FVPROC gl3wUniformMatrix4x3fv; -extern PFNGLCOLORMASKIPROC gl3wColorMaski; -extern PFNGLGETBOOLEANI_VPROC gl3wGetBooleani_v; -extern PFNGLGETINTEGERI_VPROC gl3wGetIntegeri_v; -extern PFNGLENABLEIPROC gl3wEnablei; -extern PFNGLDISABLEIPROC gl3wDisablei; -extern PFNGLISENABLEDIPROC gl3wIsEnabledi; -extern PFNGLBEGINTRANSFORMFEEDBACKPROC gl3wBeginTransformFeedback; -extern PFNGLENDTRANSFORMFEEDBACKPROC gl3wEndTransformFeedback; -extern PFNGLBINDBUFFERRANGEPROC gl3wBindBufferRange; -extern PFNGLBINDBUFFERBASEPROC gl3wBindBufferBase; -extern PFNGLTRANSFORMFEEDBACKVARYINGSPROC gl3wTransformFeedbackVaryings; -extern PFNGLGETTRANSFORMFEEDBACKVARYINGPROC gl3wGetTransformFeedbackVarying; -extern PFNGLCLAMPCOLORPROC gl3wClampColor; -extern PFNGLBEGINCONDITIONALRENDERPROC gl3wBeginConditionalRender; -extern PFNGLENDCONDITIONALRENDERPROC gl3wEndConditionalRender; -extern PFNGLVERTEXATTRIBIPOINTERPROC gl3wVertexAttribIPointer; -extern PFNGLGETVERTEXATTRIBIIVPROC gl3wGetVertexAttribIiv; -extern PFNGLGETVERTEXATTRIBIUIVPROC gl3wGetVertexAttribIuiv; -extern PFNGLVERTEXATTRIBI1IPROC gl3wVertexAttribI1i; -extern PFNGLVERTEXATTRIBI2IPROC gl3wVertexAttribI2i; -extern PFNGLVERTEXATTRIBI3IPROC gl3wVertexAttribI3i; -extern PFNGLVERTEXATTRIBI4IPROC gl3wVertexAttribI4i; -extern PFNGLVERTEXATTRIBI1UIPROC gl3wVertexAttribI1ui; -extern PFNGLVERTEXATTRIBI2UIPROC gl3wVertexAttribI2ui; -extern PFNGLVERTEXATTRIBI3UIPROC gl3wVertexAttribI3ui; -extern PFNGLVERTEXATTRIBI4UIPROC gl3wVertexAttribI4ui; -extern PFNGLVERTEXATTRIBI1IVPROC gl3wVertexAttribI1iv; -extern PFNGLVERTEXATTRIBI2IVPROC gl3wVertexAttribI2iv; -extern PFNGLVERTEXATTRIBI3IVPROC gl3wVertexAttribI3iv; -extern PFNGLVERTEXATTRIBI4IVPROC gl3wVertexAttribI4iv; -extern PFNGLVERTEXATTRIBI1UIVPROC gl3wVertexAttribI1uiv; -extern PFNGLVERTEXATTRIBI2UIVPROC gl3wVertexAttribI2uiv; -extern PFNGLVERTEXATTRIBI3UIVPROC gl3wVertexAttribI3uiv; -extern PFNGLVERTEXATTRIBI4UIVPROC gl3wVertexAttribI4uiv; -extern PFNGLVERTEXATTRIBI4BVPROC gl3wVertexAttribI4bv; -extern PFNGLVERTEXATTRIBI4SVPROC gl3wVertexAttribI4sv; -extern PFNGLVERTEXATTRIBI4UBVPROC gl3wVertexAttribI4ubv; -extern PFNGLVERTEXATTRIBI4USVPROC gl3wVertexAttribI4usv; -extern PFNGLGETUNIFORMUIVPROC gl3wGetUniformuiv; -extern PFNGLBINDFRAGDATALOCATIONPROC gl3wBindFragDataLocation; -extern PFNGLGETFRAGDATALOCATIONPROC gl3wGetFragDataLocation; -extern PFNGLUNIFORM1UIPROC gl3wUniform1ui; -extern PFNGLUNIFORM2UIPROC gl3wUniform2ui; -extern PFNGLUNIFORM3UIPROC gl3wUniform3ui; -extern PFNGLUNIFORM4UIPROC gl3wUniform4ui; -extern PFNGLUNIFORM1UIVPROC gl3wUniform1uiv; -extern PFNGLUNIFORM2UIVPROC gl3wUniform2uiv; -extern PFNGLUNIFORM3UIVPROC gl3wUniform3uiv; -extern PFNGLUNIFORM4UIVPROC gl3wUniform4uiv; -extern PFNGLTEXPARAMETERIIVPROC gl3wTexParameterIiv; -extern PFNGLTEXPARAMETERIUIVPROC gl3wTexParameterIuiv; -extern PFNGLGETTEXPARAMETERIIVPROC gl3wGetTexParameterIiv; -extern PFNGLGETTEXPARAMETERIUIVPROC gl3wGetTexParameterIuiv; -extern PFNGLCLEARBUFFERIVPROC gl3wClearBufferiv; -extern PFNGLCLEARBUFFERUIVPROC gl3wClearBufferuiv; -extern PFNGLCLEARBUFFERFVPROC gl3wClearBufferfv; -extern PFNGLCLEARBUFFERFIPROC gl3wClearBufferfi; -extern PFNGLGETSTRINGIPROC gl3wGetStringi; -extern PFNGLDRAWARRAYSINSTANCEDPROC gl3wDrawArraysInstanced; -extern PFNGLDRAWELEMENTSINSTANCEDPROC gl3wDrawElementsInstanced; -extern PFNGLTEXBUFFERPROC gl3wTexBuffer; -extern PFNGLPRIMITIVERESTARTINDEXPROC gl3wPrimitiveRestartIndex; -extern PFNGLGETINTEGER64I_VPROC gl3wGetInteger64i_v; -extern PFNGLGETBUFFERPARAMETERI64VPROC gl3wGetBufferParameteri64v; -extern PFNGLFRAMEBUFFERTEXTUREPROC gl3wFramebufferTexture; -extern PFNGLVERTEXATTRIBDIVISORPROC gl3wVertexAttribDivisor; -extern PFNGLMINSAMPLESHADINGPROC gl3wMinSampleShading; -extern PFNGLBLENDEQUATIONIPROC gl3wBlendEquationi; -extern PFNGLBLENDEQUATIONSEPARATEIPROC gl3wBlendEquationSeparatei; -extern PFNGLBLENDFUNCIPROC gl3wBlendFunci; -extern PFNGLBLENDFUNCSEPARATEIPROC gl3wBlendFuncSeparatei; -extern PFNGLISRENDERBUFFERPROC gl3wIsRenderbuffer; -extern PFNGLBINDRENDERBUFFERPROC gl3wBindRenderbuffer; -extern PFNGLDELETERENDERBUFFERSPROC gl3wDeleteRenderbuffers; -extern PFNGLGENRENDERBUFFERSPROC gl3wGenRenderbuffers; -extern PFNGLRENDERBUFFERSTORAGEPROC gl3wRenderbufferStorage; -extern PFNGLGETRENDERBUFFERPARAMETERIVPROC gl3wGetRenderbufferParameteriv; -extern PFNGLISFRAMEBUFFERPROC gl3wIsFramebuffer; -extern PFNGLBINDFRAMEBUFFERPROC gl3wBindFramebuffer; -extern PFNGLDELETEFRAMEBUFFERSPROC gl3wDeleteFramebuffers; -extern PFNGLGENFRAMEBUFFERSPROC gl3wGenFramebuffers; -extern PFNGLCHECKFRAMEBUFFERSTATUSPROC gl3wCheckFramebufferStatus; -extern PFNGLFRAMEBUFFERTEXTURE1DPROC gl3wFramebufferTexture1D; -extern PFNGLFRAMEBUFFERTEXTURE2DPROC gl3wFramebufferTexture2D; -extern PFNGLFRAMEBUFFERTEXTURE3DPROC gl3wFramebufferTexture3D; -extern PFNGLFRAMEBUFFERRENDERBUFFERPROC gl3wFramebufferRenderbuffer; -extern PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC gl3wGetFramebufferAttachmentParameteriv; -extern PFNGLGENERATEMIPMAPPROC gl3wGenerateMipmap; -extern PFNGLBLITFRAMEBUFFERPROC gl3wBlitFramebuffer; -extern PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC gl3wRenderbufferStorageMultisample; -extern PFNGLFRAMEBUFFERTEXTURELAYERPROC gl3wFramebufferTextureLayer; -extern PFNGLMAPBUFFERRANGEPROC gl3wMapBufferRange; -extern PFNGLFLUSHMAPPEDBUFFERRANGEPROC gl3wFlushMappedBufferRange; -extern PFNGLBINDVERTEXARRAYPROC gl3wBindVertexArray; -extern PFNGLDELETEVERTEXARRAYSPROC gl3wDeleteVertexArrays; -extern PFNGLGENVERTEXARRAYSPROC gl3wGenVertexArrays; -extern PFNGLISVERTEXARRAYPROC gl3wIsVertexArray; -extern PFNGLGETUNIFORMINDICESPROC gl3wGetUniformIndices; -extern PFNGLGETACTIVEUNIFORMSIVPROC gl3wGetActiveUniformsiv; -extern PFNGLGETACTIVEUNIFORMNAMEPROC gl3wGetActiveUniformName; -extern PFNGLGETUNIFORMBLOCKINDEXPROC gl3wGetUniformBlockIndex; -extern PFNGLGETACTIVEUNIFORMBLOCKIVPROC gl3wGetActiveUniformBlockiv; -extern PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC gl3wGetActiveUniformBlockName; -extern PFNGLUNIFORMBLOCKBINDINGPROC gl3wUniformBlockBinding; -extern PFNGLCOPYBUFFERSUBDATAPROC gl3wCopyBufferSubData; -extern PFNGLDRAWELEMENTSBASEVERTEXPROC gl3wDrawElementsBaseVertex; -extern PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC gl3wDrawRangeElementsBaseVertex; -extern PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC gl3wDrawElementsInstancedBaseVertex; -extern PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC gl3wMultiDrawElementsBaseVertex; -extern PFNGLPROVOKINGVERTEXPROC gl3wProvokingVertex; -extern PFNGLFENCESYNCPROC gl3wFenceSync; -extern PFNGLISSYNCPROC gl3wIsSync; -extern PFNGLDELETESYNCPROC gl3wDeleteSync; -extern PFNGLCLIENTWAITSYNCPROC gl3wClientWaitSync; -extern PFNGLWAITSYNCPROC gl3wWaitSync; -extern PFNGLGETINTEGER64VPROC gl3wGetInteger64v; -extern PFNGLGETSYNCIVPROC gl3wGetSynciv; -extern PFNGLTEXIMAGE2DMULTISAMPLEPROC gl3wTexImage2DMultisample; -extern PFNGLTEXIMAGE3DMULTISAMPLEPROC gl3wTexImage3DMultisample; -extern PFNGLGETMULTISAMPLEFVPROC gl3wGetMultisamplefv; -extern PFNGLSAMPLEMASKIPROC gl3wSampleMaski; -extern PFNGLBLENDEQUATIONIARBPROC gl3wBlendEquationiARB; -extern PFNGLBLENDEQUATIONSEPARATEIARBPROC gl3wBlendEquationSeparateiARB; -extern PFNGLBLENDFUNCIARBPROC gl3wBlendFunciARB; -extern PFNGLBLENDFUNCSEPARATEIARBPROC gl3wBlendFuncSeparateiARB; -extern PFNGLMINSAMPLESHADINGARBPROC gl3wMinSampleShadingARB; -extern PFNGLNAMEDSTRINGARBPROC gl3wNamedStringARB; -extern PFNGLDELETENAMEDSTRINGARBPROC gl3wDeleteNamedStringARB; -extern PFNGLCOMPILESHADERINCLUDEARBPROC gl3wCompileShaderIncludeARB; -extern PFNGLISNAMEDSTRINGARBPROC gl3wIsNamedStringARB; -extern PFNGLGETNAMEDSTRINGARBPROC gl3wGetNamedStringARB; -extern PFNGLGETNAMEDSTRINGIVARBPROC gl3wGetNamedStringivARB; -extern PFNGLBINDFRAGDATALOCATIONINDEXEDPROC gl3wBindFragDataLocationIndexed; -extern PFNGLGETFRAGDATAINDEXPROC gl3wGetFragDataIndex; -extern PFNGLGENSAMPLERSPROC gl3wGenSamplers; -extern PFNGLDELETESAMPLERSPROC gl3wDeleteSamplers; -extern PFNGLISSAMPLERPROC gl3wIsSampler; -extern PFNGLBINDSAMPLERPROC gl3wBindSampler; -extern PFNGLSAMPLERPARAMETERIPROC gl3wSamplerParameteri; -extern PFNGLSAMPLERPARAMETERIVPROC gl3wSamplerParameteriv; -extern PFNGLSAMPLERPARAMETERFPROC gl3wSamplerParameterf; -extern PFNGLSAMPLERPARAMETERFVPROC gl3wSamplerParameterfv; -extern PFNGLSAMPLERPARAMETERIIVPROC gl3wSamplerParameterIiv; -extern PFNGLSAMPLERPARAMETERIUIVPROC gl3wSamplerParameterIuiv; -extern PFNGLGETSAMPLERPARAMETERIVPROC gl3wGetSamplerParameteriv; -extern PFNGLGETSAMPLERPARAMETERIIVPROC gl3wGetSamplerParameterIiv; -extern PFNGLGETSAMPLERPARAMETERFVPROC gl3wGetSamplerParameterfv; -extern PFNGLGETSAMPLERPARAMETERIUIVPROC gl3wGetSamplerParameterIuiv; -extern PFNGLQUERYCOUNTERPROC gl3wQueryCounter; -extern PFNGLGETQUERYOBJECTI64VPROC gl3wGetQueryObjecti64v; -extern PFNGLGETQUERYOBJECTUI64VPROC gl3wGetQueryObjectui64v; -extern PFNGLVERTEXP2UIPROC gl3wVertexP2ui; -extern PFNGLVERTEXP2UIVPROC gl3wVertexP2uiv; -extern PFNGLVERTEXP3UIPROC gl3wVertexP3ui; -extern PFNGLVERTEXP3UIVPROC gl3wVertexP3uiv; -extern PFNGLVERTEXP4UIPROC gl3wVertexP4ui; -extern PFNGLVERTEXP4UIVPROC gl3wVertexP4uiv; -extern PFNGLTEXCOORDP1UIPROC gl3wTexCoordP1ui; -extern PFNGLTEXCOORDP1UIVPROC gl3wTexCoordP1uiv; -extern PFNGLTEXCOORDP2UIPROC gl3wTexCoordP2ui; -extern PFNGLTEXCOORDP2UIVPROC gl3wTexCoordP2uiv; -extern PFNGLTEXCOORDP3UIPROC gl3wTexCoordP3ui; -extern PFNGLTEXCOORDP3UIVPROC gl3wTexCoordP3uiv; -extern PFNGLTEXCOORDP4UIPROC gl3wTexCoordP4ui; -extern PFNGLTEXCOORDP4UIVPROC gl3wTexCoordP4uiv; -extern PFNGLMULTITEXCOORDP1UIPROC gl3wMultiTexCoordP1ui; -extern PFNGLMULTITEXCOORDP1UIVPROC gl3wMultiTexCoordP1uiv; -extern PFNGLMULTITEXCOORDP2UIPROC gl3wMultiTexCoordP2ui; -extern PFNGLMULTITEXCOORDP2UIVPROC gl3wMultiTexCoordP2uiv; -extern PFNGLMULTITEXCOORDP3UIPROC gl3wMultiTexCoordP3ui; -extern PFNGLMULTITEXCOORDP3UIVPROC gl3wMultiTexCoordP3uiv; -extern PFNGLMULTITEXCOORDP4UIPROC gl3wMultiTexCoordP4ui; -extern PFNGLMULTITEXCOORDP4UIVPROC gl3wMultiTexCoordP4uiv; -extern PFNGLNORMALP3UIPROC gl3wNormalP3ui; -extern PFNGLNORMALP3UIVPROC gl3wNormalP3uiv; -extern PFNGLCOLORP3UIPROC gl3wColorP3ui; -extern PFNGLCOLORP3UIVPROC gl3wColorP3uiv; -extern PFNGLCOLORP4UIPROC gl3wColorP4ui; -extern PFNGLCOLORP4UIVPROC gl3wColorP4uiv; -extern PFNGLSECONDARYCOLORP3UIPROC gl3wSecondaryColorP3ui; -extern PFNGLSECONDARYCOLORP3UIVPROC gl3wSecondaryColorP3uiv; -extern PFNGLVERTEXATTRIBP1UIPROC gl3wVertexAttribP1ui; -extern PFNGLVERTEXATTRIBP1UIVPROC gl3wVertexAttribP1uiv; -extern PFNGLVERTEXATTRIBP2UIPROC gl3wVertexAttribP2ui; -extern PFNGLVERTEXATTRIBP2UIVPROC gl3wVertexAttribP2uiv; -extern PFNGLVERTEXATTRIBP3UIPROC gl3wVertexAttribP3ui; -extern PFNGLVERTEXATTRIBP3UIVPROC gl3wVertexAttribP3uiv; -extern PFNGLVERTEXATTRIBP4UIPROC gl3wVertexAttribP4ui; -extern PFNGLVERTEXATTRIBP4UIVPROC gl3wVertexAttribP4uiv; -extern PFNGLDRAWARRAYSINDIRECTPROC gl3wDrawArraysIndirect; -extern PFNGLDRAWELEMENTSINDIRECTPROC gl3wDrawElementsIndirect; -extern PFNGLUNIFORM1DPROC gl3wUniform1d; -extern PFNGLUNIFORM2DPROC gl3wUniform2d; -extern PFNGLUNIFORM3DPROC gl3wUniform3d; -extern PFNGLUNIFORM4DPROC gl3wUniform4d; -extern PFNGLUNIFORM1DVPROC gl3wUniform1dv; -extern PFNGLUNIFORM2DVPROC gl3wUniform2dv; -extern PFNGLUNIFORM3DVPROC gl3wUniform3dv; -extern PFNGLUNIFORM4DVPROC gl3wUniform4dv; -extern PFNGLUNIFORMMATRIX2DVPROC gl3wUniformMatrix2dv; -extern PFNGLUNIFORMMATRIX3DVPROC gl3wUniformMatrix3dv; -extern PFNGLUNIFORMMATRIX4DVPROC gl3wUniformMatrix4dv; -extern PFNGLUNIFORMMATRIX2X3DVPROC gl3wUniformMatrix2x3dv; -extern PFNGLUNIFORMMATRIX2X4DVPROC gl3wUniformMatrix2x4dv; -extern PFNGLUNIFORMMATRIX3X2DVPROC gl3wUniformMatrix3x2dv; -extern PFNGLUNIFORMMATRIX3X4DVPROC gl3wUniformMatrix3x4dv; -extern PFNGLUNIFORMMATRIX4X2DVPROC gl3wUniformMatrix4x2dv; -extern PFNGLUNIFORMMATRIX4X3DVPROC gl3wUniformMatrix4x3dv; -extern PFNGLGETUNIFORMDVPROC gl3wGetUniformdv; -extern PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC gl3wGetSubroutineUniformLocation; -extern PFNGLGETSUBROUTINEINDEXPROC gl3wGetSubroutineIndex; -extern PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC gl3wGetActiveSubroutineUniformiv; -extern PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC gl3wGetActiveSubroutineUniformName; -extern PFNGLGETACTIVESUBROUTINENAMEPROC gl3wGetActiveSubroutineName; -extern PFNGLUNIFORMSUBROUTINESUIVPROC gl3wUniformSubroutinesuiv; -extern PFNGLGETUNIFORMSUBROUTINEUIVPROC gl3wGetUniformSubroutineuiv; -extern PFNGLGETPROGRAMSTAGEIVPROC gl3wGetProgramStageiv; -extern PFNGLPATCHPARAMETERIPROC gl3wPatchParameteri; -extern PFNGLPATCHPARAMETERFVPROC gl3wPatchParameterfv; -extern PFNGLBINDTRANSFORMFEEDBACKPROC gl3wBindTransformFeedback; -extern PFNGLDELETETRANSFORMFEEDBACKSPROC gl3wDeleteTransformFeedbacks; -extern PFNGLGENTRANSFORMFEEDBACKSPROC gl3wGenTransformFeedbacks; -extern PFNGLISTRANSFORMFEEDBACKPROC gl3wIsTransformFeedback; -extern PFNGLPAUSETRANSFORMFEEDBACKPROC gl3wPauseTransformFeedback; -extern PFNGLRESUMETRANSFORMFEEDBACKPROC gl3wResumeTransformFeedback; -extern PFNGLDRAWTRANSFORMFEEDBACKPROC gl3wDrawTransformFeedback; -extern PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC gl3wDrawTransformFeedbackStream; -extern PFNGLBEGINQUERYINDEXEDPROC gl3wBeginQueryIndexed; -extern PFNGLENDQUERYINDEXEDPROC gl3wEndQueryIndexed; -extern PFNGLGETQUERYINDEXEDIVPROC gl3wGetQueryIndexediv; -extern PFNGLRELEASESHADERCOMPILERPROC gl3wReleaseShaderCompiler; -extern PFNGLSHADERBINARYPROC gl3wShaderBinary; -extern PFNGLGETSHADERPRECISIONFORMATPROC gl3wGetShaderPrecisionFormat; -extern PFNGLDEPTHRANGEFPROC gl3wDepthRangef; -extern PFNGLCLEARDEPTHFPROC gl3wClearDepthf; -extern PFNGLGETPROGRAMBINARYPROC gl3wGetProgramBinary; -extern PFNGLPROGRAMBINARYPROC gl3wProgramBinary; -extern PFNGLPROGRAMPARAMETERIPROC gl3wProgramParameteri; -extern PFNGLUSEPROGRAMSTAGESPROC gl3wUseProgramStages; -extern PFNGLACTIVESHADERPROGRAMPROC gl3wActiveShaderProgram; -extern PFNGLCREATESHADERPROGRAMVPROC gl3wCreateShaderProgramv; -extern PFNGLBINDPROGRAMPIPELINEPROC gl3wBindProgramPipeline; -extern PFNGLDELETEPROGRAMPIPELINESPROC gl3wDeleteProgramPipelines; -extern PFNGLGENPROGRAMPIPELINESPROC gl3wGenProgramPipelines; -extern PFNGLISPROGRAMPIPELINEPROC gl3wIsProgramPipeline; -extern PFNGLGETPROGRAMPIPELINEIVPROC gl3wGetProgramPipelineiv; -extern PFNGLPROGRAMUNIFORM1IPROC gl3wProgramUniform1i; -extern PFNGLPROGRAMUNIFORM1IVPROC gl3wProgramUniform1iv; -extern PFNGLPROGRAMUNIFORM1FPROC gl3wProgramUniform1f; -extern PFNGLPROGRAMUNIFORM1FVPROC gl3wProgramUniform1fv; -extern PFNGLPROGRAMUNIFORM1DPROC gl3wProgramUniform1d; -extern PFNGLPROGRAMUNIFORM1DVPROC gl3wProgramUniform1dv; -extern PFNGLPROGRAMUNIFORM1UIPROC gl3wProgramUniform1ui; -extern PFNGLPROGRAMUNIFORM1UIVPROC gl3wProgramUniform1uiv; -extern PFNGLPROGRAMUNIFORM2IPROC gl3wProgramUniform2i; -extern PFNGLPROGRAMUNIFORM2IVPROC gl3wProgramUniform2iv; -extern PFNGLPROGRAMUNIFORM2FPROC gl3wProgramUniform2f; -extern PFNGLPROGRAMUNIFORM2FVPROC gl3wProgramUniform2fv; -extern PFNGLPROGRAMUNIFORM2DPROC gl3wProgramUniform2d; -extern PFNGLPROGRAMUNIFORM2DVPROC gl3wProgramUniform2dv; -extern PFNGLPROGRAMUNIFORM2UIPROC gl3wProgramUniform2ui; -extern PFNGLPROGRAMUNIFORM2UIVPROC gl3wProgramUniform2uiv; -extern PFNGLPROGRAMUNIFORM3IPROC gl3wProgramUniform3i; -extern PFNGLPROGRAMUNIFORM3IVPROC gl3wProgramUniform3iv; -extern PFNGLPROGRAMUNIFORM3FPROC gl3wProgramUniform3f; -extern PFNGLPROGRAMUNIFORM3FVPROC gl3wProgramUniform3fv; -extern PFNGLPROGRAMUNIFORM3DPROC gl3wProgramUniform3d; -extern PFNGLPROGRAMUNIFORM3DVPROC gl3wProgramUniform3dv; -extern PFNGLPROGRAMUNIFORM3UIPROC gl3wProgramUniform3ui; -extern PFNGLPROGRAMUNIFORM3UIVPROC gl3wProgramUniform3uiv; -extern PFNGLPROGRAMUNIFORM4IPROC gl3wProgramUniform4i; -extern PFNGLPROGRAMUNIFORM4IVPROC gl3wProgramUniform4iv; -extern PFNGLPROGRAMUNIFORM4FPROC gl3wProgramUniform4f; -extern PFNGLPROGRAMUNIFORM4FVPROC gl3wProgramUniform4fv; -extern PFNGLPROGRAMUNIFORM4DPROC gl3wProgramUniform4d; -extern PFNGLPROGRAMUNIFORM4DVPROC gl3wProgramUniform4dv; -extern PFNGLPROGRAMUNIFORM4UIPROC gl3wProgramUniform4ui; -extern PFNGLPROGRAMUNIFORM4UIVPROC gl3wProgramUniform4uiv; -extern PFNGLPROGRAMUNIFORMMATRIX2FVPROC gl3wProgramUniformMatrix2fv; -extern PFNGLPROGRAMUNIFORMMATRIX3FVPROC gl3wProgramUniformMatrix3fv; -extern PFNGLPROGRAMUNIFORMMATRIX4FVPROC gl3wProgramUniformMatrix4fv; -extern PFNGLPROGRAMUNIFORMMATRIX2DVPROC gl3wProgramUniformMatrix2dv; -extern PFNGLPROGRAMUNIFORMMATRIX3DVPROC gl3wProgramUniformMatrix3dv; -extern PFNGLPROGRAMUNIFORMMATRIX4DVPROC gl3wProgramUniformMatrix4dv; -extern PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC gl3wProgramUniformMatrix2x3fv; -extern PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC gl3wProgramUniformMatrix3x2fv; -extern PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC gl3wProgramUniformMatrix2x4fv; -extern PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC gl3wProgramUniformMatrix4x2fv; -extern PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC gl3wProgramUniformMatrix3x4fv; -extern PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC gl3wProgramUniformMatrix4x3fv; -extern PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC gl3wProgramUniformMatrix2x3dv; -extern PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC gl3wProgramUniformMatrix3x2dv; -extern PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC gl3wProgramUniformMatrix2x4dv; -extern PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC gl3wProgramUniformMatrix4x2dv; -extern PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC gl3wProgramUniformMatrix3x4dv; -extern PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC gl3wProgramUniformMatrix4x3dv; -extern PFNGLVALIDATEPROGRAMPIPELINEPROC gl3wValidateProgramPipeline; -extern PFNGLGETPROGRAMPIPELINEINFOLOGPROC gl3wGetProgramPipelineInfoLog; -extern PFNGLVERTEXATTRIBL1DPROC gl3wVertexAttribL1d; -extern PFNGLVERTEXATTRIBL2DPROC gl3wVertexAttribL2d; -extern PFNGLVERTEXATTRIBL3DPROC gl3wVertexAttribL3d; -extern PFNGLVERTEXATTRIBL4DPROC gl3wVertexAttribL4d; -extern PFNGLVERTEXATTRIBL1DVPROC gl3wVertexAttribL1dv; -extern PFNGLVERTEXATTRIBL2DVPROC gl3wVertexAttribL2dv; -extern PFNGLVERTEXATTRIBL3DVPROC gl3wVertexAttribL3dv; -extern PFNGLVERTEXATTRIBL4DVPROC gl3wVertexAttribL4dv; -extern PFNGLVERTEXATTRIBLPOINTERPROC gl3wVertexAttribLPointer; -extern PFNGLGETVERTEXATTRIBLDVPROC gl3wGetVertexAttribLdv; -extern PFNGLVIEWPORTARRAYVPROC gl3wViewportArrayv; -extern PFNGLVIEWPORTINDEXEDFPROC gl3wViewportIndexedf; -extern PFNGLVIEWPORTINDEXEDFVPROC gl3wViewportIndexedfv; -extern PFNGLSCISSORARRAYVPROC gl3wScissorArrayv; -extern PFNGLSCISSORINDEXEDPROC gl3wScissorIndexed; -extern PFNGLSCISSORINDEXEDVPROC gl3wScissorIndexedv; -extern PFNGLDEPTHRANGEARRAYVPROC gl3wDepthRangeArrayv; -extern PFNGLDEPTHRANGEINDEXEDPROC gl3wDepthRangeIndexed; -extern PFNGLGETFLOATI_VPROC gl3wGetFloati_v; -extern PFNGLGETDOUBLEI_VPROC gl3wGetDoublei_v; -extern PFNGLCREATESYNCFROMCLEVENTARBPROC gl3wCreateSyncFromCLeventARB; -extern PFNGLDEBUGMESSAGECONTROLARBPROC gl3wDebugMessageControlARB; -extern PFNGLDEBUGMESSAGEINSERTARBPROC gl3wDebugMessageInsertARB; -extern PFNGLDEBUGMESSAGECALLBACKARBPROC gl3wDebugMessageCallbackARB; -extern PFNGLGETDEBUGMESSAGELOGARBPROC gl3wGetDebugMessageLogARB; -extern PFNGLGETGRAPHICSRESETSTATUSARBPROC gl3wGetGraphicsResetStatusARB; -extern PFNGLGETNTEXIMAGEARBPROC gl3wGetnTexImageARB; -extern PFNGLREADNPIXELSARBPROC gl3wReadnPixelsARB; -extern PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC gl3wGetnCompressedTexImageARB; -extern PFNGLGETNUNIFORMFVARBPROC gl3wGetnUniformfvARB; -extern PFNGLGETNUNIFORMIVARBPROC gl3wGetnUniformivARB; -extern PFNGLGETNUNIFORMUIVARBPROC gl3wGetnUniformuivARB; -extern PFNGLGETNUNIFORMDVARBPROC gl3wGetnUniformdvARB; -extern PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC gl3wDrawArraysInstancedBaseInstance; -extern PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC gl3wDrawElementsInstancedBaseInstance; -extern PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC gl3wDrawElementsInstancedBaseVertexBaseInstance; -extern PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC gl3wDrawTransformFeedbackInstanced; -extern PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC gl3wDrawTransformFeedbackStreamInstanced; -extern PFNGLGETINTERNALFORMATIVPROC gl3wGetInternalformativ; -extern PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC gl3wGetActiveAtomicCounterBufferiv; -extern PFNGLBINDIMAGETEXTUREPROC gl3wBindImageTexture; -extern PFNGLMEMORYBARRIERPROC gl3wMemoryBarrier; -extern PFNGLTEXSTORAGE1DPROC gl3wTexStorage1D; -extern PFNGLTEXSTORAGE2DPROC gl3wTexStorage2D; -extern PFNGLTEXSTORAGE3DPROC gl3wTexStorage3D; -extern PFNGLTEXTURESTORAGE1DEXTPROC gl3wTextureStorage1DEXT; -extern PFNGLTEXTURESTORAGE2DEXTPROC gl3wTextureStorage2DEXT; -extern PFNGLTEXTURESTORAGE3DEXTPROC gl3wTextureStorage3DEXT; -extern PFNGLDEBUGMESSAGECONTROLPROC gl3wDebugMessageControl; -extern PFNGLDEBUGMESSAGEINSERTPROC gl3wDebugMessageInsert; -extern PFNGLDEBUGMESSAGECALLBACKPROC gl3wDebugMessageCallback; -extern PFNGLGETDEBUGMESSAGELOGPROC gl3wGetDebugMessageLog; -extern PFNGLPUSHDEBUGGROUPPROC gl3wPushDebugGroup; -extern PFNGLPOPDEBUGGROUPPROC gl3wPopDebugGroup; -extern PFNGLOBJECTLABELPROC gl3wObjectLabel; -extern PFNGLGETOBJECTLABELPROC gl3wGetObjectLabel; -extern PFNGLOBJECTPTRLABELPROC gl3wObjectPtrLabel; -extern PFNGLGETOBJECTPTRLABELPROC gl3wGetObjectPtrLabel; -extern PFNGLCLEARBUFFERDATAPROC gl3wClearBufferData; -extern PFNGLCLEARBUFFERSUBDATAPROC gl3wClearBufferSubData; -extern PFNGLCLEARNAMEDBUFFERDATAEXTPROC gl3wClearNamedBufferDataEXT; -extern PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC gl3wClearNamedBufferSubDataEXT; -extern PFNGLDISPATCHCOMPUTEPROC gl3wDispatchCompute; -extern PFNGLDISPATCHCOMPUTEINDIRECTPROC gl3wDispatchComputeIndirect; -extern PFNGLCOPYIMAGESUBDATAPROC gl3wCopyImageSubData; -extern PFNGLTEXTUREVIEWPROC gl3wTextureView; -extern PFNGLBINDVERTEXBUFFERPROC gl3wBindVertexBuffer; -extern PFNGLVERTEXATTRIBFORMATPROC gl3wVertexAttribFormat; -extern PFNGLVERTEXATTRIBIFORMATPROC gl3wVertexAttribIFormat; -extern PFNGLVERTEXATTRIBLFORMATPROC gl3wVertexAttribLFormat; -extern PFNGLVERTEXATTRIBBINDINGPROC gl3wVertexAttribBinding; -extern PFNGLVERTEXBINDINGDIVISORPROC gl3wVertexBindingDivisor; -extern PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC gl3wVertexArrayBindVertexBufferEXT; -extern PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC gl3wVertexArrayVertexAttribFormatEXT; -extern PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC gl3wVertexArrayVertexAttribIFormatEXT; -extern PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC gl3wVertexArrayVertexAttribLFormatEXT; -extern PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC gl3wVertexArrayVertexAttribBindingEXT; -extern PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC gl3wVertexArrayVertexBindingDivisorEXT; -extern PFNGLFRAMEBUFFERPARAMETERIPROC gl3wFramebufferParameteri; -extern PFNGLGETFRAMEBUFFERPARAMETERIVPROC gl3wGetFramebufferParameteriv; -extern PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC gl3wNamedFramebufferParameteriEXT; -extern PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC gl3wGetNamedFramebufferParameterivEXT; -extern PFNGLGETINTERNALFORMATI64VPROC gl3wGetInternalformati64v; -extern PFNGLINVALIDATETEXSUBIMAGEPROC gl3wInvalidateTexSubImage; -extern PFNGLINVALIDATETEXIMAGEPROC gl3wInvalidateTexImage; -extern PFNGLINVALIDATEBUFFERSUBDATAPROC gl3wInvalidateBufferSubData; -extern PFNGLINVALIDATEBUFFERDATAPROC gl3wInvalidateBufferData; -extern PFNGLINVALIDATEFRAMEBUFFERPROC gl3wInvalidateFramebuffer; -extern PFNGLINVALIDATESUBFRAMEBUFFERPROC gl3wInvalidateSubFramebuffer; -extern PFNGLMULTIDRAWARRAYSINDIRECTPROC gl3wMultiDrawArraysIndirect; -extern PFNGLMULTIDRAWELEMENTSINDIRECTPROC gl3wMultiDrawElementsIndirect; -extern PFNGLGETPROGRAMINTERFACEIVPROC gl3wGetProgramInterfaceiv; -extern PFNGLGETPROGRAMRESOURCEINDEXPROC gl3wGetProgramResourceIndex; -extern PFNGLGETPROGRAMRESOURCENAMEPROC gl3wGetProgramResourceName; -extern PFNGLGETPROGRAMRESOURCEIVPROC gl3wGetProgramResourceiv; -extern PFNGLGETPROGRAMRESOURCELOCATIONPROC gl3wGetProgramResourceLocation; -extern PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC gl3wGetProgramResourceLocationIndex; -extern PFNGLSHADERSTORAGEBLOCKBINDINGPROC gl3wShaderStorageBlockBinding; -extern PFNGLTEXBUFFERRANGEPROC gl3wTexBufferRange; -extern PFNGLTEXTUREBUFFERRANGEEXTPROC gl3wTextureBufferRangeEXT; -extern PFNGLTEXSTORAGE2DMULTISAMPLEPROC gl3wTexStorage2DMultisample; -extern PFNGLTEXSTORAGE3DMULTISAMPLEPROC gl3wTexStorage3DMultisample; -extern PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC gl3wTextureStorage2DMultisampleEXT; -extern PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC gl3wTextureStorage3DMultisampleEXT; - -#define glCullFace gl3wCullFace -#define glFrontFace gl3wFrontFace -#define glHint gl3wHint -#define glLineWidth gl3wLineWidth -#define glPointSize gl3wPointSize -#define glPolygonMode gl3wPolygonMode -#define glScissor gl3wScissor -#define glTexParameterf gl3wTexParameterf -#define glTexParameterfv gl3wTexParameterfv -#define glTexParameteri gl3wTexParameteri -#define glTexParameteriv gl3wTexParameteriv -#define glTexImage1D gl3wTexImage1D -#define glTexImage2D gl3wTexImage2D -#define glDrawBuffer gl3wDrawBuffer -#define glClear gl3wClear -#define glClearColor gl3wClearColor -#define glClearStencil gl3wClearStencil -#define glClearDepth gl3wClearDepth -#define glStencilMask gl3wStencilMask -#define glColorMask gl3wColorMask -#define glDepthMask gl3wDepthMask -#define glDisable gl3wDisable -#define glEnable gl3wEnable -#define glFinish gl3wFinish -#define glFlush gl3wFlush -#define glBlendFunc gl3wBlendFunc -#define glLogicOp gl3wLogicOp -#define glStencilFunc gl3wStencilFunc -#define glStencilOp gl3wStencilOp -#define glDepthFunc gl3wDepthFunc -#define glPixelStoref gl3wPixelStoref -#define glPixelStorei gl3wPixelStorei -#define glReadBuffer gl3wReadBuffer -#define glReadPixels gl3wReadPixels -#define glGetBooleanv gl3wGetBooleanv -#define glGetDoublev gl3wGetDoublev -#define glGetError gl3wGetError -#define glGetFloatv gl3wGetFloatv -#define glGetIntegerv gl3wGetIntegerv -#define glGetString gl3wGetString -#define glGetTexImage gl3wGetTexImage -#define glGetTexParameterfv gl3wGetTexParameterfv -#define glGetTexParameteriv gl3wGetTexParameteriv -#define glGetTexLevelParameterfv gl3wGetTexLevelParameterfv -#define glGetTexLevelParameteriv gl3wGetTexLevelParameteriv -#define glIsEnabled gl3wIsEnabled -#define glDepthRange gl3wDepthRange -#define glViewport gl3wViewport -#define glDrawArrays gl3wDrawArrays -#define glDrawElements gl3wDrawElements -#define glGetPointerv gl3wGetPointerv -#define glPolygonOffset gl3wPolygonOffset -#define glCopyTexImage1D gl3wCopyTexImage1D -#define glCopyTexImage2D gl3wCopyTexImage2D -#define glCopyTexSubImage1D gl3wCopyTexSubImage1D -#define glCopyTexSubImage2D gl3wCopyTexSubImage2D -#define glTexSubImage1D gl3wTexSubImage1D -#define glTexSubImage2D gl3wTexSubImage2D -#define glBindTexture gl3wBindTexture -#define glDeleteTextures gl3wDeleteTextures -#define glGenTextures gl3wGenTextures -#define glIsTexture gl3wIsTexture -#define glBlendColor gl3wBlendColor -#define glBlendEquation gl3wBlendEquation -#define glDrawRangeElements gl3wDrawRangeElements -#define glTexImage3D gl3wTexImage3D -#define glTexSubImage3D gl3wTexSubImage3D -#define glCopyTexSubImage3D gl3wCopyTexSubImage3D -#define glActiveTexture gl3wActiveTexture -#define glSampleCoverage gl3wSampleCoverage -#define glCompressedTexImage3D gl3wCompressedTexImage3D -#define glCompressedTexImage2D gl3wCompressedTexImage2D -#define glCompressedTexImage1D gl3wCompressedTexImage1D -#define glCompressedTexSubImage3D gl3wCompressedTexSubImage3D -#define glCompressedTexSubImage2D gl3wCompressedTexSubImage2D -#define glCompressedTexSubImage1D gl3wCompressedTexSubImage1D -#define glGetCompressedTexImage gl3wGetCompressedTexImage -#define glBlendFuncSeparate gl3wBlendFuncSeparate -#define glMultiDrawArrays gl3wMultiDrawArrays -#define glMultiDrawElements gl3wMultiDrawElements -#define glPointParameterf gl3wPointParameterf -#define glPointParameterfv gl3wPointParameterfv -#define glPointParameteri gl3wPointParameteri -#define glPointParameteriv gl3wPointParameteriv -#define glGenQueries gl3wGenQueries -#define glDeleteQueries gl3wDeleteQueries -#define glIsQuery gl3wIsQuery -#define glBeginQuery gl3wBeginQuery -#define glEndQuery gl3wEndQuery -#define glGetQueryiv gl3wGetQueryiv -#define glGetQueryObjectiv gl3wGetQueryObjectiv -#define glGetQueryObjectuiv gl3wGetQueryObjectuiv -#define glBindBuffer gl3wBindBuffer -#define glDeleteBuffers gl3wDeleteBuffers -#define glGenBuffers gl3wGenBuffers -#define glIsBuffer gl3wIsBuffer -#define glBufferData gl3wBufferData -#define glBufferSubData gl3wBufferSubData -#define glGetBufferSubData gl3wGetBufferSubData -#define glMapBuffer gl3wMapBuffer -#define glUnmapBuffer gl3wUnmapBuffer -#define glGetBufferParameteriv gl3wGetBufferParameteriv -#define glGetBufferPointerv gl3wGetBufferPointerv -#define glBlendEquationSeparate gl3wBlendEquationSeparate -#define glDrawBuffers gl3wDrawBuffers -#define glStencilOpSeparate gl3wStencilOpSeparate -#define glStencilFuncSeparate gl3wStencilFuncSeparate -#define glStencilMaskSeparate gl3wStencilMaskSeparate -#define glAttachShader gl3wAttachShader -#define glBindAttribLocation gl3wBindAttribLocation -#define glCompileShader gl3wCompileShader -#define glCreateProgram gl3wCreateProgram -#define glCreateShader gl3wCreateShader -#define glDeleteProgram gl3wDeleteProgram -#define glDeleteShader gl3wDeleteShader -#define glDetachShader gl3wDetachShader -#define glDisableVertexAttribArray gl3wDisableVertexAttribArray -#define glEnableVertexAttribArray gl3wEnableVertexAttribArray -#define glGetActiveAttrib gl3wGetActiveAttrib -#define glGetActiveUniform gl3wGetActiveUniform -#define glGetAttachedShaders gl3wGetAttachedShaders -#define glGetAttribLocation gl3wGetAttribLocation -#define glGetProgramiv gl3wGetProgramiv -#define glGetProgramInfoLog gl3wGetProgramInfoLog -#define glGetShaderiv gl3wGetShaderiv -#define glGetShaderInfoLog gl3wGetShaderInfoLog -#define glGetShaderSource gl3wGetShaderSource -#define glGetUniformLocation gl3wGetUniformLocation -#define glGetUniformfv gl3wGetUniformfv -#define glGetUniformiv gl3wGetUniformiv -#define glGetVertexAttribdv gl3wGetVertexAttribdv -#define glGetVertexAttribfv gl3wGetVertexAttribfv -#define glGetVertexAttribiv gl3wGetVertexAttribiv -#define glGetVertexAttribPointerv gl3wGetVertexAttribPointerv -#define glIsProgram gl3wIsProgram -#define glIsShader gl3wIsShader -#define glLinkProgram gl3wLinkProgram -#define glShaderSource gl3wShaderSource -#define glUseProgram gl3wUseProgram -#define glUniform1f gl3wUniform1f -#define glUniform2f gl3wUniform2f -#define glUniform3f gl3wUniform3f -#define glUniform4f gl3wUniform4f -#define glUniform1i gl3wUniform1i -#define glUniform2i gl3wUniform2i -#define glUniform3i gl3wUniform3i -#define glUniform4i gl3wUniform4i -#define glUniform1fv gl3wUniform1fv -#define glUniform2fv gl3wUniform2fv -#define glUniform3fv gl3wUniform3fv -#define glUniform4fv gl3wUniform4fv -#define glUniform1iv gl3wUniform1iv -#define glUniform2iv gl3wUniform2iv -#define glUniform3iv gl3wUniform3iv -#define glUniform4iv gl3wUniform4iv -#define glUniformMatrix2fv gl3wUniformMatrix2fv -#define glUniformMatrix3fv gl3wUniformMatrix3fv -#define glUniformMatrix4fv gl3wUniformMatrix4fv -#define glValidateProgram gl3wValidateProgram -#define glVertexAttrib1d gl3wVertexAttrib1d -#define glVertexAttrib1dv gl3wVertexAttrib1dv -#define glVertexAttrib1f gl3wVertexAttrib1f -#define glVertexAttrib1fv gl3wVertexAttrib1fv -#define glVertexAttrib1s gl3wVertexAttrib1s -#define glVertexAttrib1sv gl3wVertexAttrib1sv -#define glVertexAttrib2d gl3wVertexAttrib2d -#define glVertexAttrib2dv gl3wVertexAttrib2dv -#define glVertexAttrib2f gl3wVertexAttrib2f -#define glVertexAttrib2fv gl3wVertexAttrib2fv -#define glVertexAttrib2s gl3wVertexAttrib2s -#define glVertexAttrib2sv gl3wVertexAttrib2sv -#define glVertexAttrib3d gl3wVertexAttrib3d -#define glVertexAttrib3dv gl3wVertexAttrib3dv -#define glVertexAttrib3f gl3wVertexAttrib3f -#define glVertexAttrib3fv gl3wVertexAttrib3fv -#define glVertexAttrib3s gl3wVertexAttrib3s -#define glVertexAttrib3sv gl3wVertexAttrib3sv -#define glVertexAttrib4Nbv gl3wVertexAttrib4Nbv -#define glVertexAttrib4Niv gl3wVertexAttrib4Niv -#define glVertexAttrib4Nsv gl3wVertexAttrib4Nsv -#define glVertexAttrib4Nub gl3wVertexAttrib4Nub -#define glVertexAttrib4Nubv gl3wVertexAttrib4Nubv -#define glVertexAttrib4Nuiv gl3wVertexAttrib4Nuiv -#define glVertexAttrib4Nusv gl3wVertexAttrib4Nusv -#define glVertexAttrib4bv gl3wVertexAttrib4bv -#define glVertexAttrib4d gl3wVertexAttrib4d -#define glVertexAttrib4dv gl3wVertexAttrib4dv -#define glVertexAttrib4f gl3wVertexAttrib4f -#define glVertexAttrib4fv gl3wVertexAttrib4fv -#define glVertexAttrib4iv gl3wVertexAttrib4iv -#define glVertexAttrib4s gl3wVertexAttrib4s -#define glVertexAttrib4sv gl3wVertexAttrib4sv -#define glVertexAttrib4ubv gl3wVertexAttrib4ubv -#define glVertexAttrib4uiv gl3wVertexAttrib4uiv -#define glVertexAttrib4usv gl3wVertexAttrib4usv -#define glVertexAttribPointer gl3wVertexAttribPointer -#define glUniformMatrix2x3fv gl3wUniformMatrix2x3fv -#define glUniformMatrix3x2fv gl3wUniformMatrix3x2fv -#define glUniformMatrix2x4fv gl3wUniformMatrix2x4fv -#define glUniformMatrix4x2fv gl3wUniformMatrix4x2fv -#define glUniformMatrix3x4fv gl3wUniformMatrix3x4fv -#define glUniformMatrix4x3fv gl3wUniformMatrix4x3fv -#define glColorMaski gl3wColorMaski -#define glGetBooleani_v gl3wGetBooleani_v -#define glGetIntegeri_v gl3wGetIntegeri_v -#define glEnablei gl3wEnablei -#define glDisablei gl3wDisablei -#define glIsEnabledi gl3wIsEnabledi -#define glBeginTransformFeedback gl3wBeginTransformFeedback -#define glEndTransformFeedback gl3wEndTransformFeedback -#define glBindBufferRange gl3wBindBufferRange -#define glBindBufferBase gl3wBindBufferBase -#define glTransformFeedbackVaryings gl3wTransformFeedbackVaryings -#define glGetTransformFeedbackVarying gl3wGetTransformFeedbackVarying -#define glClampColor gl3wClampColor -#define glBeginConditionalRender gl3wBeginConditionalRender -#define glEndConditionalRender gl3wEndConditionalRender -#define glVertexAttribIPointer gl3wVertexAttribIPointer -#define glGetVertexAttribIiv gl3wGetVertexAttribIiv -#define glGetVertexAttribIuiv gl3wGetVertexAttribIuiv -#define glVertexAttribI1i gl3wVertexAttribI1i -#define glVertexAttribI2i gl3wVertexAttribI2i -#define glVertexAttribI3i gl3wVertexAttribI3i -#define glVertexAttribI4i gl3wVertexAttribI4i -#define glVertexAttribI1ui gl3wVertexAttribI1ui -#define glVertexAttribI2ui gl3wVertexAttribI2ui -#define glVertexAttribI3ui gl3wVertexAttribI3ui -#define glVertexAttribI4ui gl3wVertexAttribI4ui -#define glVertexAttribI1iv gl3wVertexAttribI1iv -#define glVertexAttribI2iv gl3wVertexAttribI2iv -#define glVertexAttribI3iv gl3wVertexAttribI3iv -#define glVertexAttribI4iv gl3wVertexAttribI4iv -#define glVertexAttribI1uiv gl3wVertexAttribI1uiv -#define glVertexAttribI2uiv gl3wVertexAttribI2uiv -#define glVertexAttribI3uiv gl3wVertexAttribI3uiv -#define glVertexAttribI4uiv gl3wVertexAttribI4uiv -#define glVertexAttribI4bv gl3wVertexAttribI4bv -#define glVertexAttribI4sv gl3wVertexAttribI4sv -#define glVertexAttribI4ubv gl3wVertexAttribI4ubv -#define glVertexAttribI4usv gl3wVertexAttribI4usv -#define glGetUniformuiv gl3wGetUniformuiv -#define glBindFragDataLocation gl3wBindFragDataLocation -#define glGetFragDataLocation gl3wGetFragDataLocation -#define glUniform1ui gl3wUniform1ui -#define glUniform2ui gl3wUniform2ui -#define glUniform3ui gl3wUniform3ui -#define glUniform4ui gl3wUniform4ui -#define glUniform1uiv gl3wUniform1uiv -#define glUniform2uiv gl3wUniform2uiv -#define glUniform3uiv gl3wUniform3uiv -#define glUniform4uiv gl3wUniform4uiv -#define glTexParameterIiv gl3wTexParameterIiv -#define glTexParameterIuiv gl3wTexParameterIuiv -#define glGetTexParameterIiv gl3wGetTexParameterIiv -#define glGetTexParameterIuiv gl3wGetTexParameterIuiv -#define glClearBufferiv gl3wClearBufferiv -#define glClearBufferuiv gl3wClearBufferuiv -#define glClearBufferfv gl3wClearBufferfv -#define glClearBufferfi gl3wClearBufferfi -#define glGetStringi gl3wGetStringi -#define glDrawArraysInstanced gl3wDrawArraysInstanced -#define glDrawElementsInstanced gl3wDrawElementsInstanced -#define glTexBuffer gl3wTexBuffer -#define glPrimitiveRestartIndex gl3wPrimitiveRestartIndex -#define glGetInteger64i_v gl3wGetInteger64i_v -#define glGetBufferParameteri64v gl3wGetBufferParameteri64v -#define glFramebufferTexture gl3wFramebufferTexture -#define glVertexAttribDivisor gl3wVertexAttribDivisor -#define glMinSampleShading gl3wMinSampleShading -#define glBlendEquationi gl3wBlendEquationi -#define glBlendEquationSeparatei gl3wBlendEquationSeparatei -#define glBlendFunci gl3wBlendFunci -#define glBlendFuncSeparatei gl3wBlendFuncSeparatei -#define glIsRenderbuffer gl3wIsRenderbuffer -#define glBindRenderbuffer gl3wBindRenderbuffer -#define glDeleteRenderbuffers gl3wDeleteRenderbuffers -#define glGenRenderbuffers gl3wGenRenderbuffers -#define glRenderbufferStorage gl3wRenderbufferStorage -#define glGetRenderbufferParameteriv gl3wGetRenderbufferParameteriv -#define glIsFramebuffer gl3wIsFramebuffer -#define glBindFramebuffer gl3wBindFramebuffer -#define glDeleteFramebuffers gl3wDeleteFramebuffers -#define glGenFramebuffers gl3wGenFramebuffers -#define glCheckFramebufferStatus gl3wCheckFramebufferStatus -#define glFramebufferTexture1D gl3wFramebufferTexture1D -#define glFramebufferTexture2D gl3wFramebufferTexture2D -#define glFramebufferTexture3D gl3wFramebufferTexture3D -#define glFramebufferRenderbuffer gl3wFramebufferRenderbuffer -#define glGetFramebufferAttachmentParameteriv gl3wGetFramebufferAttachmentParameteriv -#define glGenerateMipmap gl3wGenerateMipmap -#define glBlitFramebuffer gl3wBlitFramebuffer -#define glRenderbufferStorageMultisample gl3wRenderbufferStorageMultisample -#define glFramebufferTextureLayer gl3wFramebufferTextureLayer -#define glMapBufferRange gl3wMapBufferRange -#define glFlushMappedBufferRange gl3wFlushMappedBufferRange -#define glBindVertexArray gl3wBindVertexArray -#define glDeleteVertexArrays gl3wDeleteVertexArrays -#define glGenVertexArrays gl3wGenVertexArrays -#define glIsVertexArray gl3wIsVertexArray -#define glGetUniformIndices gl3wGetUniformIndices -#define glGetActiveUniformsiv gl3wGetActiveUniformsiv -#define glGetActiveUniformName gl3wGetActiveUniformName -#define glGetUniformBlockIndex gl3wGetUniformBlockIndex -#define glGetActiveUniformBlockiv gl3wGetActiveUniformBlockiv -#define glGetActiveUniformBlockName gl3wGetActiveUniformBlockName -#define glUniformBlockBinding gl3wUniformBlockBinding -#define glCopyBufferSubData gl3wCopyBufferSubData -#define glDrawElementsBaseVertex gl3wDrawElementsBaseVertex -#define glDrawRangeElementsBaseVertex gl3wDrawRangeElementsBaseVertex -#define glDrawElementsInstancedBaseVertex gl3wDrawElementsInstancedBaseVertex -#define glMultiDrawElementsBaseVertex gl3wMultiDrawElementsBaseVertex -#define glProvokingVertex gl3wProvokingVertex -#define glFenceSync gl3wFenceSync -#define glIsSync gl3wIsSync -#define glDeleteSync gl3wDeleteSync -#define glClientWaitSync gl3wClientWaitSync -#define glWaitSync gl3wWaitSync -#define glGetInteger64v gl3wGetInteger64v -#define glGetSynciv gl3wGetSynciv -#define glTexImage2DMultisample gl3wTexImage2DMultisample -#define glTexImage3DMultisample gl3wTexImage3DMultisample -#define glGetMultisamplefv gl3wGetMultisamplefv -#define glSampleMaski gl3wSampleMaski -#define glBlendEquationiARB gl3wBlendEquationiARB -#define glBlendEquationSeparateiARB gl3wBlendEquationSeparateiARB -#define glBlendFunciARB gl3wBlendFunciARB -#define glBlendFuncSeparateiARB gl3wBlendFuncSeparateiARB -#define glMinSampleShadingARB gl3wMinSampleShadingARB -#define glNamedStringARB gl3wNamedStringARB -#define glDeleteNamedStringARB gl3wDeleteNamedStringARB -#define glCompileShaderIncludeARB gl3wCompileShaderIncludeARB -#define glIsNamedStringARB gl3wIsNamedStringARB -#define glGetNamedStringARB gl3wGetNamedStringARB -#define glGetNamedStringivARB gl3wGetNamedStringivARB -#define glBindFragDataLocationIndexed gl3wBindFragDataLocationIndexed -#define glGetFragDataIndex gl3wGetFragDataIndex -#define glGenSamplers gl3wGenSamplers -#define glDeleteSamplers gl3wDeleteSamplers -#define glIsSampler gl3wIsSampler -#define glBindSampler gl3wBindSampler -#define glSamplerParameteri gl3wSamplerParameteri -#define glSamplerParameteriv gl3wSamplerParameteriv -#define glSamplerParameterf gl3wSamplerParameterf -#define glSamplerParameterfv gl3wSamplerParameterfv -#define glSamplerParameterIiv gl3wSamplerParameterIiv -#define glSamplerParameterIuiv gl3wSamplerParameterIuiv -#define glGetSamplerParameteriv gl3wGetSamplerParameteriv -#define glGetSamplerParameterIiv gl3wGetSamplerParameterIiv -#define glGetSamplerParameterfv gl3wGetSamplerParameterfv -#define glGetSamplerParameterIuiv gl3wGetSamplerParameterIuiv -#define glQueryCounter gl3wQueryCounter -#define glGetQueryObjecti64v gl3wGetQueryObjecti64v -#define glGetQueryObjectui64v gl3wGetQueryObjectui64v -#define glVertexP2ui gl3wVertexP2ui -#define glVertexP2uiv gl3wVertexP2uiv -#define glVertexP3ui gl3wVertexP3ui -#define glVertexP3uiv gl3wVertexP3uiv -#define glVertexP4ui gl3wVertexP4ui -#define glVertexP4uiv gl3wVertexP4uiv -#define glTexCoordP1ui gl3wTexCoordP1ui -#define glTexCoordP1uiv gl3wTexCoordP1uiv -#define glTexCoordP2ui gl3wTexCoordP2ui -#define glTexCoordP2uiv gl3wTexCoordP2uiv -#define glTexCoordP3ui gl3wTexCoordP3ui -#define glTexCoordP3uiv gl3wTexCoordP3uiv -#define glTexCoordP4ui gl3wTexCoordP4ui -#define glTexCoordP4uiv gl3wTexCoordP4uiv -#define glMultiTexCoordP1ui gl3wMultiTexCoordP1ui -#define glMultiTexCoordP1uiv gl3wMultiTexCoordP1uiv -#define glMultiTexCoordP2ui gl3wMultiTexCoordP2ui -#define glMultiTexCoordP2uiv gl3wMultiTexCoordP2uiv -#define glMultiTexCoordP3ui gl3wMultiTexCoordP3ui -#define glMultiTexCoordP3uiv gl3wMultiTexCoordP3uiv -#define glMultiTexCoordP4ui gl3wMultiTexCoordP4ui -#define glMultiTexCoordP4uiv gl3wMultiTexCoordP4uiv -#define glNormalP3ui gl3wNormalP3ui -#define glNormalP3uiv gl3wNormalP3uiv -#define glColorP3ui gl3wColorP3ui -#define glColorP3uiv gl3wColorP3uiv -#define glColorP4ui gl3wColorP4ui -#define glColorP4uiv gl3wColorP4uiv -#define glSecondaryColorP3ui gl3wSecondaryColorP3ui -#define glSecondaryColorP3uiv gl3wSecondaryColorP3uiv -#define glVertexAttribP1ui gl3wVertexAttribP1ui -#define glVertexAttribP1uiv gl3wVertexAttribP1uiv -#define glVertexAttribP2ui gl3wVertexAttribP2ui -#define glVertexAttribP2uiv gl3wVertexAttribP2uiv -#define glVertexAttribP3ui gl3wVertexAttribP3ui -#define glVertexAttribP3uiv gl3wVertexAttribP3uiv -#define glVertexAttribP4ui gl3wVertexAttribP4ui -#define glVertexAttribP4uiv gl3wVertexAttribP4uiv -#define glDrawArraysIndirect gl3wDrawArraysIndirect -#define glDrawElementsIndirect gl3wDrawElementsIndirect -#define glUniform1d gl3wUniform1d -#define glUniform2d gl3wUniform2d -#define glUniform3d gl3wUniform3d -#define glUniform4d gl3wUniform4d -#define glUniform1dv gl3wUniform1dv -#define glUniform2dv gl3wUniform2dv -#define glUniform3dv gl3wUniform3dv -#define glUniform4dv gl3wUniform4dv -#define glUniformMatrix2dv gl3wUniformMatrix2dv -#define glUniformMatrix3dv gl3wUniformMatrix3dv -#define glUniformMatrix4dv gl3wUniformMatrix4dv -#define glUniformMatrix2x3dv gl3wUniformMatrix2x3dv -#define glUniformMatrix2x4dv gl3wUniformMatrix2x4dv -#define glUniformMatrix3x2dv gl3wUniformMatrix3x2dv -#define glUniformMatrix3x4dv gl3wUniformMatrix3x4dv -#define glUniformMatrix4x2dv gl3wUniformMatrix4x2dv -#define glUniformMatrix4x3dv gl3wUniformMatrix4x3dv -#define glGetUniformdv gl3wGetUniformdv -#define glGetSubroutineUniformLocation gl3wGetSubroutineUniformLocation -#define glGetSubroutineIndex gl3wGetSubroutineIndex -#define glGetActiveSubroutineUniformiv gl3wGetActiveSubroutineUniformiv -#define glGetActiveSubroutineUniformName gl3wGetActiveSubroutineUniformName -#define glGetActiveSubroutineName gl3wGetActiveSubroutineName -#define glUniformSubroutinesuiv gl3wUniformSubroutinesuiv -#define glGetUniformSubroutineuiv gl3wGetUniformSubroutineuiv -#define glGetProgramStageiv gl3wGetProgramStageiv -#define glPatchParameteri gl3wPatchParameteri -#define glPatchParameterfv gl3wPatchParameterfv -#define glBindTransformFeedback gl3wBindTransformFeedback -#define glDeleteTransformFeedbacks gl3wDeleteTransformFeedbacks -#define glGenTransformFeedbacks gl3wGenTransformFeedbacks -#define glIsTransformFeedback gl3wIsTransformFeedback -#define glPauseTransformFeedback gl3wPauseTransformFeedback -#define glResumeTransformFeedback gl3wResumeTransformFeedback -#define glDrawTransformFeedback gl3wDrawTransformFeedback -#define glDrawTransformFeedbackStream gl3wDrawTransformFeedbackStream -#define glBeginQueryIndexed gl3wBeginQueryIndexed -#define glEndQueryIndexed gl3wEndQueryIndexed -#define glGetQueryIndexediv gl3wGetQueryIndexediv -#define glReleaseShaderCompiler gl3wReleaseShaderCompiler -#define glShaderBinary gl3wShaderBinary -#define glGetShaderPrecisionFormat gl3wGetShaderPrecisionFormat -#define glDepthRangef gl3wDepthRangef -#define glClearDepthf gl3wClearDepthf -#define glGetProgramBinary gl3wGetProgramBinary -#define glProgramBinary gl3wProgramBinary -#define glProgramParameteri gl3wProgramParameteri -#define glUseProgramStages gl3wUseProgramStages -#define glActiveShaderProgram gl3wActiveShaderProgram -#define glCreateShaderProgramv gl3wCreateShaderProgramv -#define glBindProgramPipeline gl3wBindProgramPipeline -#define glDeleteProgramPipelines gl3wDeleteProgramPipelines -#define glGenProgramPipelines gl3wGenProgramPipelines -#define glIsProgramPipeline gl3wIsProgramPipeline -#define glGetProgramPipelineiv gl3wGetProgramPipelineiv -#define glProgramUniform1i gl3wProgramUniform1i -#define glProgramUniform1iv gl3wProgramUniform1iv -#define glProgramUniform1f gl3wProgramUniform1f -#define glProgramUniform1fv gl3wProgramUniform1fv -#define glProgramUniform1d gl3wProgramUniform1d -#define glProgramUniform1dv gl3wProgramUniform1dv -#define glProgramUniform1ui gl3wProgramUniform1ui -#define glProgramUniform1uiv gl3wProgramUniform1uiv -#define glProgramUniform2i gl3wProgramUniform2i -#define glProgramUniform2iv gl3wProgramUniform2iv -#define glProgramUniform2f gl3wProgramUniform2f -#define glProgramUniform2fv gl3wProgramUniform2fv -#define glProgramUniform2d gl3wProgramUniform2d -#define glProgramUniform2dv gl3wProgramUniform2dv -#define glProgramUniform2ui gl3wProgramUniform2ui -#define glProgramUniform2uiv gl3wProgramUniform2uiv -#define glProgramUniform3i gl3wProgramUniform3i -#define glProgramUniform3iv gl3wProgramUniform3iv -#define glProgramUniform3f gl3wProgramUniform3f -#define glProgramUniform3fv gl3wProgramUniform3fv -#define glProgramUniform3d gl3wProgramUniform3d -#define glProgramUniform3dv gl3wProgramUniform3dv -#define glProgramUniform3ui gl3wProgramUniform3ui -#define glProgramUniform3uiv gl3wProgramUniform3uiv -#define glProgramUniform4i gl3wProgramUniform4i -#define glProgramUniform4iv gl3wProgramUniform4iv -#define glProgramUniform4f gl3wProgramUniform4f -#define glProgramUniform4fv gl3wProgramUniform4fv -#define glProgramUniform4d gl3wProgramUniform4d -#define glProgramUniform4dv gl3wProgramUniform4dv -#define glProgramUniform4ui gl3wProgramUniform4ui -#define glProgramUniform4uiv gl3wProgramUniform4uiv -#define glProgramUniformMatrix2fv gl3wProgramUniformMatrix2fv -#define glProgramUniformMatrix3fv gl3wProgramUniformMatrix3fv -#define glProgramUniformMatrix4fv gl3wProgramUniformMatrix4fv -#define glProgramUniformMatrix2dv gl3wProgramUniformMatrix2dv -#define glProgramUniformMatrix3dv gl3wProgramUniformMatrix3dv -#define glProgramUniformMatrix4dv gl3wProgramUniformMatrix4dv -#define glProgramUniformMatrix2x3fv gl3wProgramUniformMatrix2x3fv -#define glProgramUniformMatrix3x2fv gl3wProgramUniformMatrix3x2fv -#define glProgramUniformMatrix2x4fv gl3wProgramUniformMatrix2x4fv -#define glProgramUniformMatrix4x2fv gl3wProgramUniformMatrix4x2fv -#define glProgramUniformMatrix3x4fv gl3wProgramUniformMatrix3x4fv -#define glProgramUniformMatrix4x3fv gl3wProgramUniformMatrix4x3fv -#define glProgramUniformMatrix2x3dv gl3wProgramUniformMatrix2x3dv -#define glProgramUniformMatrix3x2dv gl3wProgramUniformMatrix3x2dv -#define glProgramUniformMatrix2x4dv gl3wProgramUniformMatrix2x4dv -#define glProgramUniformMatrix4x2dv gl3wProgramUniformMatrix4x2dv -#define glProgramUniformMatrix3x4dv gl3wProgramUniformMatrix3x4dv -#define glProgramUniformMatrix4x3dv gl3wProgramUniformMatrix4x3dv -#define glValidateProgramPipeline gl3wValidateProgramPipeline -#define glGetProgramPipelineInfoLog gl3wGetProgramPipelineInfoLog -#define glVertexAttribL1d gl3wVertexAttribL1d -#define glVertexAttribL2d gl3wVertexAttribL2d -#define glVertexAttribL3d gl3wVertexAttribL3d -#define glVertexAttribL4d gl3wVertexAttribL4d -#define glVertexAttribL1dv gl3wVertexAttribL1dv -#define glVertexAttribL2dv gl3wVertexAttribL2dv -#define glVertexAttribL3dv gl3wVertexAttribL3dv -#define glVertexAttribL4dv gl3wVertexAttribL4dv -#define glVertexAttribLPointer gl3wVertexAttribLPointer -#define glGetVertexAttribLdv gl3wGetVertexAttribLdv -#define glViewportArrayv gl3wViewportArrayv -#define glViewportIndexedf gl3wViewportIndexedf -#define glViewportIndexedfv gl3wViewportIndexedfv -#define glScissorArrayv gl3wScissorArrayv -#define glScissorIndexed gl3wScissorIndexed -#define glScissorIndexedv gl3wScissorIndexedv -#define glDepthRangeArrayv gl3wDepthRangeArrayv -#define glDepthRangeIndexed gl3wDepthRangeIndexed -#define glGetFloati_v gl3wGetFloati_v -#define glGetDoublei_v gl3wGetDoublei_v -#define glCreateSyncFromCLeventARB gl3wCreateSyncFromCLeventARB -#define glDebugMessageControlARB gl3wDebugMessageControlARB -#define glDebugMessageInsertARB gl3wDebugMessageInsertARB -#define glDebugMessageCallbackARB gl3wDebugMessageCallbackARB -#define glGetDebugMessageLogARB gl3wGetDebugMessageLogARB -#define glGetGraphicsResetStatusARB gl3wGetGraphicsResetStatusARB -#define glGetnTexImageARB gl3wGetnTexImageARB -#define glReadnPixelsARB gl3wReadnPixelsARB -#define glGetnCompressedTexImageARB gl3wGetnCompressedTexImageARB -#define glGetnUniformfvARB gl3wGetnUniformfvARB -#define glGetnUniformivARB gl3wGetnUniformivARB -#define glGetnUniformuivARB gl3wGetnUniformuivARB -#define glGetnUniformdvARB gl3wGetnUniformdvARB -#define glDrawArraysInstancedBaseInstance gl3wDrawArraysInstancedBaseInstance -#define glDrawElementsInstancedBaseInstance gl3wDrawElementsInstancedBaseInstance -#define glDrawElementsInstancedBaseVertexBaseInstance gl3wDrawElementsInstancedBaseVertexBaseInstance -#define glDrawTransformFeedbackInstanced gl3wDrawTransformFeedbackInstanced -#define glDrawTransformFeedbackStreamInstanced gl3wDrawTransformFeedbackStreamInstanced -#define glGetInternalformativ gl3wGetInternalformativ -#define glGetActiveAtomicCounterBufferiv gl3wGetActiveAtomicCounterBufferiv -#define glBindImageTexture gl3wBindImageTexture -#define glMemoryBarrier gl3wMemoryBarrier -#define glTexStorage1D gl3wTexStorage1D -#define glTexStorage2D gl3wTexStorage2D -#define glTexStorage3D gl3wTexStorage3D -#define glTextureStorage1DEXT gl3wTextureStorage1DEXT -#define glTextureStorage2DEXT gl3wTextureStorage2DEXT -#define glTextureStorage3DEXT gl3wTextureStorage3DEXT -#define glDebugMessageControl gl3wDebugMessageControl -#define glDebugMessageInsert gl3wDebugMessageInsert -#define glDebugMessageCallback gl3wDebugMessageCallback -#define glGetDebugMessageLog gl3wGetDebugMessageLog -#define glPushDebugGroup gl3wPushDebugGroup -#define glPopDebugGroup gl3wPopDebugGroup -#define glObjectLabel gl3wObjectLabel -#define glGetObjectLabel gl3wGetObjectLabel -#define glObjectPtrLabel gl3wObjectPtrLabel -#define glGetObjectPtrLabel gl3wGetObjectPtrLabel -#define glClearBufferData gl3wClearBufferData -#define glClearBufferSubData gl3wClearBufferSubData -#define glClearNamedBufferDataEXT gl3wClearNamedBufferDataEXT -#define glClearNamedBufferSubDataEXT gl3wClearNamedBufferSubDataEXT -#define glDispatchCompute gl3wDispatchCompute -#define glDispatchComputeIndirect gl3wDispatchComputeIndirect -#define glCopyImageSubData gl3wCopyImageSubData -#define glTextureView gl3wTextureView -#define glBindVertexBuffer gl3wBindVertexBuffer -#define glVertexAttribFormat gl3wVertexAttribFormat -#define glVertexAttribIFormat gl3wVertexAttribIFormat -#define glVertexAttribLFormat gl3wVertexAttribLFormat -#define glVertexAttribBinding gl3wVertexAttribBinding -#define glVertexBindingDivisor gl3wVertexBindingDivisor -#define glVertexArrayBindVertexBufferEXT gl3wVertexArrayBindVertexBufferEXT -#define glVertexArrayVertexAttribFormatEXT gl3wVertexArrayVertexAttribFormatEXT -#define glVertexArrayVertexAttribIFormatEXT gl3wVertexArrayVertexAttribIFormatEXT -#define glVertexArrayVertexAttribLFormatEXT gl3wVertexArrayVertexAttribLFormatEXT -#define glVertexArrayVertexAttribBindingEXT gl3wVertexArrayVertexAttribBindingEXT -#define glVertexArrayVertexBindingDivisorEXT gl3wVertexArrayVertexBindingDivisorEXT -#define glFramebufferParameteri gl3wFramebufferParameteri -#define glGetFramebufferParameteriv gl3wGetFramebufferParameteriv -#define glNamedFramebufferParameteriEXT gl3wNamedFramebufferParameteriEXT -#define glGetNamedFramebufferParameterivEXT gl3wGetNamedFramebufferParameterivEXT -#define glGetInternalformati64v gl3wGetInternalformati64v -#define glInvalidateTexSubImage gl3wInvalidateTexSubImage -#define glInvalidateTexImage gl3wInvalidateTexImage -#define glInvalidateBufferSubData gl3wInvalidateBufferSubData -#define glInvalidateBufferData gl3wInvalidateBufferData -#define glInvalidateFramebuffer gl3wInvalidateFramebuffer -#define glInvalidateSubFramebuffer gl3wInvalidateSubFramebuffer -#define glMultiDrawArraysIndirect gl3wMultiDrawArraysIndirect -#define glMultiDrawElementsIndirect gl3wMultiDrawElementsIndirect -#define glGetProgramInterfaceiv gl3wGetProgramInterfaceiv -#define glGetProgramResourceIndex gl3wGetProgramResourceIndex -#define glGetProgramResourceName gl3wGetProgramResourceName -#define glGetProgramResourceiv gl3wGetProgramResourceiv -#define glGetProgramResourceLocation gl3wGetProgramResourceLocation -#define glGetProgramResourceLocationIndex gl3wGetProgramResourceLocationIndex -#define glShaderStorageBlockBinding gl3wShaderStorageBlockBinding -#define glTexBufferRange gl3wTexBufferRange -#define glTextureBufferRangeEXT gl3wTextureBufferRangeEXT -#define glTexStorage2DMultisample gl3wTexStorage2DMultisample -#define glTexStorage3DMultisample gl3wTexStorage3DMultisample -#define glTextureStorage2DMultisampleEXT gl3wTextureStorage2DMultisampleEXT -#define glTextureStorage3DMultisampleEXT gl3wTextureStorage3DMultisampleEXT - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/cmake/imgui/examples/libs/gl3w/GL/glcorearb.h b/cmake/imgui/examples/libs/gl3w/GL/glcorearb.h deleted file mode 100644 index 07cb03e1..00000000 --- a/cmake/imgui/examples/libs/gl3w/GL/glcorearb.h +++ /dev/null @@ -1,4533 +0,0 @@ -#ifndef __glcorearb_h_ -#define __glcorearb_h_ - -#ifdef __cplusplus -extern "C" { -#endif - -/* -** Copyright (c) 2007-2012 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are furnished to do so, subject to -** the following conditions: -** -** The above copyright notice and this permission notice shall be included -** in all copies or substantial portions of the Materials. -** -** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -*/ - -/* glcorearb.h replaces gl3.h. It is for use with OpenGL core - * profile implementations. - * - * glcorearb.h last updated on $Date: 2012-09-19 19:02:24 -0700 (Wed, 19 Sep 2012) $ - * - * RELEASE NOTES - 2012/09/19 - * - * glcorearb.h should be placed in the same directory as gl.h and - * included as - * ''. - * - * glcorearb.h includes only APIs in the latest OpenGL core profile - * implementation together with APIs in newer ARB extensions which can be - * can be supported by the core profile. It does not, and never will - * include functionality removed from the core profile, such as - * fixed-function vertex and fragment processing. - * - * It is not possible to #include both and either of - * or in the same source file. - * - * Feedback can be given by registering for the Khronos Bugzilla - * (www.khronos.org/bugzilla) and filing issues there under product - * "OpenGL", category "Registry". - */ - -/* Function declaration macros - to move into glplatform.h */ - -#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) -#define WIN32_LEAN_AND_MEAN 1 -#include -#endif - -#ifndef APIENTRY -#define APIENTRY -#endif -#ifndef APIENTRYP -#define APIENTRYP APIENTRY * -#endif -#ifndef GLAPI -#define GLAPI extern -#endif - -/* Base GL types */ - -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef signed char GLbyte; -typedef short GLshort; -typedef int GLint; -typedef int GLsizei; -typedef unsigned char GLubyte; -typedef unsigned short GLushort; -typedef unsigned int GLuint; -typedef unsigned short GLhalf; -typedef float GLfloat; -typedef float GLclampf; -typedef double GLdouble; -typedef double GLclampd; -typedef void GLvoid; - -/*************************************************************/ - -#ifndef GL_VERSION_1_1 -/* AttribMask */ -#define GL_DEPTH_BUFFER_BIT 0x00000100 -#define GL_STENCIL_BUFFER_BIT 0x00000400 -#define GL_COLOR_BUFFER_BIT 0x00004000 -/* Boolean */ -#define GL_FALSE 0 -#define GL_TRUE 1 -/* BeginMode */ -#define GL_POINTS 0x0000 -#define GL_LINES 0x0001 -#define GL_LINE_LOOP 0x0002 -#define GL_LINE_STRIP 0x0003 -#define GL_TRIANGLES 0x0004 -#define GL_TRIANGLE_STRIP 0x0005 -#define GL_TRIANGLE_FAN 0x0006 -#define GL_QUADS 0x0007 -/* AlphaFunction */ -#define GL_NEVER 0x0200 -#define GL_LESS 0x0201 -#define GL_EQUAL 0x0202 -#define GL_LEQUAL 0x0203 -#define GL_GREATER 0x0204 -#define GL_NOTEQUAL 0x0205 -#define GL_GEQUAL 0x0206 -#define GL_ALWAYS 0x0207 -/* BlendingFactorDest */ -#define GL_ZERO 0 -#define GL_ONE 1 -#define GL_SRC_COLOR 0x0300 -#define GL_ONE_MINUS_SRC_COLOR 0x0301 -#define GL_SRC_ALPHA 0x0302 -#define GL_ONE_MINUS_SRC_ALPHA 0x0303 -#define GL_DST_ALPHA 0x0304 -#define GL_ONE_MINUS_DST_ALPHA 0x0305 -/* BlendingFactorSrc */ -#define GL_DST_COLOR 0x0306 -#define GL_ONE_MINUS_DST_COLOR 0x0307 -#define GL_SRC_ALPHA_SATURATE 0x0308 -/* DrawBufferMode */ -#define GL_NONE 0 -#define GL_FRONT_LEFT 0x0400 -#define GL_FRONT_RIGHT 0x0401 -#define GL_BACK_LEFT 0x0402 -#define GL_BACK_RIGHT 0x0403 -#define GL_FRONT 0x0404 -#define GL_BACK 0x0405 -#define GL_LEFT 0x0406 -#define GL_RIGHT 0x0407 -#define GL_FRONT_AND_BACK 0x0408 -/* ErrorCode */ -#define GL_NO_ERROR 0 -#define GL_INVALID_ENUM 0x0500 -#define GL_INVALID_VALUE 0x0501 -#define GL_INVALID_OPERATION 0x0502 -#define GL_OUT_OF_MEMORY 0x0505 -/* FrontFaceDirection */ -#define GL_CW 0x0900 -#define GL_CCW 0x0901 -/* GetPName */ -#define GL_POINT_SIZE 0x0B11 -#define GL_POINT_SIZE_RANGE 0x0B12 -#define GL_POINT_SIZE_GRANULARITY 0x0B13 -#define GL_LINE_SMOOTH 0x0B20 -#define GL_LINE_WIDTH 0x0B21 -#define GL_LINE_WIDTH_RANGE 0x0B22 -#define GL_LINE_WIDTH_GRANULARITY 0x0B23 -#define GL_POLYGON_MODE 0x0B40 -#define GL_POLYGON_SMOOTH 0x0B41 -#define GL_CULL_FACE 0x0B44 -#define GL_CULL_FACE_MODE 0x0B45 -#define GL_FRONT_FACE 0x0B46 -#define GL_DEPTH_RANGE 0x0B70 -#define GL_DEPTH_TEST 0x0B71 -#define GL_DEPTH_WRITEMASK 0x0B72 -#define GL_DEPTH_CLEAR_VALUE 0x0B73 -#define GL_DEPTH_FUNC 0x0B74 -#define GL_STENCIL_TEST 0x0B90 -#define GL_STENCIL_CLEAR_VALUE 0x0B91 -#define GL_STENCIL_FUNC 0x0B92 -#define GL_STENCIL_VALUE_MASK 0x0B93 -#define GL_STENCIL_FAIL 0x0B94 -#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 -#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 -#define GL_STENCIL_REF 0x0B97 -#define GL_STENCIL_WRITEMASK 0x0B98 -#define GL_VIEWPORT 0x0BA2 -#define GL_DITHER 0x0BD0 -#define GL_BLEND_DST 0x0BE0 -#define GL_BLEND_SRC 0x0BE1 -#define GL_BLEND 0x0BE2 -#define GL_LOGIC_OP_MODE 0x0BF0 -#define GL_COLOR_LOGIC_OP 0x0BF2 -#define GL_DRAW_BUFFER 0x0C01 -#define GL_READ_BUFFER 0x0C02 -#define GL_SCISSOR_BOX 0x0C10 -#define GL_SCISSOR_TEST 0x0C11 -#define GL_COLOR_CLEAR_VALUE 0x0C22 -#define GL_COLOR_WRITEMASK 0x0C23 -#define GL_DOUBLEBUFFER 0x0C32 -#define GL_STEREO 0x0C33 -#define GL_LINE_SMOOTH_HINT 0x0C52 -#define GL_POLYGON_SMOOTH_HINT 0x0C53 -#define GL_UNPACK_SWAP_BYTES 0x0CF0 -#define GL_UNPACK_LSB_FIRST 0x0CF1 -#define GL_UNPACK_ROW_LENGTH 0x0CF2 -#define GL_UNPACK_SKIP_ROWS 0x0CF3 -#define GL_UNPACK_SKIP_PIXELS 0x0CF4 -#define GL_UNPACK_ALIGNMENT 0x0CF5 -#define GL_PACK_SWAP_BYTES 0x0D00 -#define GL_PACK_LSB_FIRST 0x0D01 -#define GL_PACK_ROW_LENGTH 0x0D02 -#define GL_PACK_SKIP_ROWS 0x0D03 -#define GL_PACK_SKIP_PIXELS 0x0D04 -#define GL_PACK_ALIGNMENT 0x0D05 -#define GL_MAX_TEXTURE_SIZE 0x0D33 -#define GL_MAX_VIEWPORT_DIMS 0x0D3A -#define GL_SUBPIXEL_BITS 0x0D50 -#define GL_TEXTURE_1D 0x0DE0 -#define GL_TEXTURE_2D 0x0DE1 -#define GL_POLYGON_OFFSET_UNITS 0x2A00 -#define GL_POLYGON_OFFSET_POINT 0x2A01 -#define GL_POLYGON_OFFSET_LINE 0x2A02 -#define GL_POLYGON_OFFSET_FILL 0x8037 -#define GL_POLYGON_OFFSET_FACTOR 0x8038 -#define GL_TEXTURE_BINDING_1D 0x8068 -#define GL_TEXTURE_BINDING_2D 0x8069 -/* GetTextureParameter */ -#define GL_TEXTURE_WIDTH 0x1000 -#define GL_TEXTURE_HEIGHT 0x1001 -#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 -#define GL_TEXTURE_BORDER_COLOR 0x1004 -#define GL_TEXTURE_RED_SIZE 0x805C -#define GL_TEXTURE_GREEN_SIZE 0x805D -#define GL_TEXTURE_BLUE_SIZE 0x805E -#define GL_TEXTURE_ALPHA_SIZE 0x805F -/* HintMode */ -#define GL_DONT_CARE 0x1100 -#define GL_FASTEST 0x1101 -#define GL_NICEST 0x1102 -/* DataType */ -#define GL_BYTE 0x1400 -#define GL_UNSIGNED_BYTE 0x1401 -#define GL_SHORT 0x1402 -#define GL_UNSIGNED_SHORT 0x1403 -#define GL_INT 0x1404 -#define GL_UNSIGNED_INT 0x1405 -#define GL_FLOAT 0x1406 -#define GL_DOUBLE 0x140A -/* ErrorCode */ -#define GL_STACK_OVERFLOW 0x0503 -#define GL_STACK_UNDERFLOW 0x0504 -/* LogicOp */ -#define GL_CLEAR 0x1500 -#define GL_AND 0x1501 -#define GL_AND_REVERSE 0x1502 -#define GL_COPY 0x1503 -#define GL_AND_INVERTED 0x1504 -#define GL_NOOP 0x1505 -#define GL_XOR 0x1506 -#define GL_OR 0x1507 -#define GL_NOR 0x1508 -#define GL_EQUIV 0x1509 -#define GL_INVERT 0x150A -#define GL_OR_REVERSE 0x150B -#define GL_COPY_INVERTED 0x150C -#define GL_OR_INVERTED 0x150D -#define GL_NAND 0x150E -#define GL_SET 0x150F -/* MatrixMode (for gl3.h, FBO attachment type) */ -#define GL_TEXTURE 0x1702 -/* PixelCopyType */ -#define GL_COLOR 0x1800 -#define GL_DEPTH 0x1801 -#define GL_STENCIL 0x1802 -/* PixelFormat */ -#define GL_STENCIL_INDEX 0x1901 -#define GL_DEPTH_COMPONENT 0x1902 -#define GL_RED 0x1903 -#define GL_GREEN 0x1904 -#define GL_BLUE 0x1905 -#define GL_ALPHA 0x1906 -#define GL_RGB 0x1907 -#define GL_RGBA 0x1908 -/* PolygonMode */ -#define GL_POINT 0x1B00 -#define GL_LINE 0x1B01 -#define GL_FILL 0x1B02 -/* StencilOp */ -#define GL_KEEP 0x1E00 -#define GL_REPLACE 0x1E01 -#define GL_INCR 0x1E02 -#define GL_DECR 0x1E03 -/* StringName */ -#define GL_VENDOR 0x1F00 -#define GL_RENDERER 0x1F01 -#define GL_VERSION 0x1F02 -#define GL_EXTENSIONS 0x1F03 -/* TextureMagFilter */ -#define GL_NEAREST 0x2600 -#define GL_LINEAR 0x2601 -/* TextureMinFilter */ -#define GL_NEAREST_MIPMAP_NEAREST 0x2700 -#define GL_LINEAR_MIPMAP_NEAREST 0x2701 -#define GL_NEAREST_MIPMAP_LINEAR 0x2702 -#define GL_LINEAR_MIPMAP_LINEAR 0x2703 -/* TextureParameterName */ -#define GL_TEXTURE_MAG_FILTER 0x2800 -#define GL_TEXTURE_MIN_FILTER 0x2801 -#define GL_TEXTURE_WRAP_S 0x2802 -#define GL_TEXTURE_WRAP_T 0x2803 -/* TextureTarget */ -#define GL_PROXY_TEXTURE_1D 0x8063 -#define GL_PROXY_TEXTURE_2D 0x8064 -/* TextureWrapMode */ -#define GL_REPEAT 0x2901 -/* PixelInternalFormat */ -#define GL_R3_G3_B2 0x2A10 -#define GL_RGB4 0x804F -#define GL_RGB5 0x8050 -#define GL_RGB8 0x8051 -#define GL_RGB10 0x8052 -#define GL_RGB12 0x8053 -#define GL_RGB16 0x8054 -#define GL_RGBA2 0x8055 -#define GL_RGBA4 0x8056 -#define GL_RGB5_A1 0x8057 -#define GL_RGBA8 0x8058 -#define GL_RGB10_A2 0x8059 -#define GL_RGBA12 0x805A -#define GL_RGBA16 0x805B -#endif - -#ifndef GL_VERSION_1_2 -#define GL_UNSIGNED_BYTE_3_3_2 0x8032 -#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 -#define GL_UNSIGNED_INT_8_8_8_8 0x8035 -#define GL_UNSIGNED_INT_10_10_10_2 0x8036 -#define GL_TEXTURE_BINDING_3D 0x806A -#define GL_PACK_SKIP_IMAGES 0x806B -#define GL_PACK_IMAGE_HEIGHT 0x806C -#define GL_UNPACK_SKIP_IMAGES 0x806D -#define GL_UNPACK_IMAGE_HEIGHT 0x806E -#define GL_TEXTURE_3D 0x806F -#define GL_PROXY_TEXTURE_3D 0x8070 -#define GL_TEXTURE_DEPTH 0x8071 -#define GL_TEXTURE_WRAP_R 0x8072 -#define GL_MAX_3D_TEXTURE_SIZE 0x8073 -#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 -#define GL_UNSIGNED_SHORT_5_6_5 0x8363 -#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 -#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 -#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 -#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 -#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 -#define GL_BGR 0x80E0 -#define GL_BGRA 0x80E1 -#define GL_MAX_ELEMENTS_VERTICES 0x80E8 -#define GL_MAX_ELEMENTS_INDICES 0x80E9 -#define GL_CLAMP_TO_EDGE 0x812F -#define GL_TEXTURE_MIN_LOD 0x813A -#define GL_TEXTURE_MAX_LOD 0x813B -#define GL_TEXTURE_BASE_LEVEL 0x813C -#define GL_TEXTURE_MAX_LEVEL 0x813D -#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 -#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 -#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 -#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 -#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E -#endif - -#ifndef GL_ARB_imaging -#define GL_CONSTANT_COLOR 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 -#define GL_CONSTANT_ALPHA 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 -#define GL_BLEND_COLOR 0x8005 -#define GL_FUNC_ADD 0x8006 -#define GL_MIN 0x8007 -#define GL_MAX 0x8008 -#define GL_BLEND_EQUATION 0x8009 -#define GL_FUNC_SUBTRACT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT 0x800B -#endif - -#ifndef GL_VERSION_1_3 -#define GL_TEXTURE0 0x84C0 -#define GL_TEXTURE1 0x84C1 -#define GL_TEXTURE2 0x84C2 -#define GL_TEXTURE3 0x84C3 -#define GL_TEXTURE4 0x84C4 -#define GL_TEXTURE5 0x84C5 -#define GL_TEXTURE6 0x84C6 -#define GL_TEXTURE7 0x84C7 -#define GL_TEXTURE8 0x84C8 -#define GL_TEXTURE9 0x84C9 -#define GL_TEXTURE10 0x84CA -#define GL_TEXTURE11 0x84CB -#define GL_TEXTURE12 0x84CC -#define GL_TEXTURE13 0x84CD -#define GL_TEXTURE14 0x84CE -#define GL_TEXTURE15 0x84CF -#define GL_TEXTURE16 0x84D0 -#define GL_TEXTURE17 0x84D1 -#define GL_TEXTURE18 0x84D2 -#define GL_TEXTURE19 0x84D3 -#define GL_TEXTURE20 0x84D4 -#define GL_TEXTURE21 0x84D5 -#define GL_TEXTURE22 0x84D6 -#define GL_TEXTURE23 0x84D7 -#define GL_TEXTURE24 0x84D8 -#define GL_TEXTURE25 0x84D9 -#define GL_TEXTURE26 0x84DA -#define GL_TEXTURE27 0x84DB -#define GL_TEXTURE28 0x84DC -#define GL_TEXTURE29 0x84DD -#define GL_TEXTURE30 0x84DE -#define GL_TEXTURE31 0x84DF -#define GL_ACTIVE_TEXTURE 0x84E0 -#define GL_MULTISAMPLE 0x809D -#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE 0x809F -#define GL_SAMPLE_COVERAGE 0x80A0 -#define GL_SAMPLE_BUFFERS 0x80A8 -#define GL_SAMPLES 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT 0x80AB -#define GL_TEXTURE_CUBE_MAP 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C -#define GL_COMPRESSED_RGB 0x84ED -#define GL_COMPRESSED_RGBA 0x84EE -#define GL_TEXTURE_COMPRESSION_HINT 0x84EF -#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 -#define GL_TEXTURE_COMPRESSED 0x86A1 -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 -#define GL_CLAMP_TO_BORDER 0x812D -#endif - -#ifndef GL_VERSION_1_4 -#define GL_BLEND_DST_RGB 0x80C8 -#define GL_BLEND_SRC_RGB 0x80C9 -#define GL_BLEND_DST_ALPHA 0x80CA -#define GL_BLEND_SRC_ALPHA 0x80CB -#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 -#define GL_DEPTH_COMPONENT16 0x81A5 -#define GL_DEPTH_COMPONENT24 0x81A6 -#define GL_DEPTH_COMPONENT32 0x81A7 -#define GL_MIRRORED_REPEAT 0x8370 -#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD -#define GL_TEXTURE_LOD_BIAS 0x8501 -#define GL_INCR_WRAP 0x8507 -#define GL_DECR_WRAP 0x8508 -#define GL_TEXTURE_DEPTH_SIZE 0x884A -#define GL_TEXTURE_COMPARE_MODE 0x884C -#define GL_TEXTURE_COMPARE_FUNC 0x884D -#endif - -#ifndef GL_VERSION_1_5 -#define GL_BUFFER_SIZE 0x8764 -#define GL_BUFFER_USAGE 0x8765 -#define GL_QUERY_COUNTER_BITS 0x8864 -#define GL_CURRENT_QUERY 0x8865 -#define GL_QUERY_RESULT 0x8866 -#define GL_QUERY_RESULT_AVAILABLE 0x8867 -#define GL_ARRAY_BUFFER 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER 0x8893 -#define GL_ARRAY_BUFFER_BINDING 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F -#define GL_READ_ONLY 0x88B8 -#define GL_WRITE_ONLY 0x88B9 -#define GL_READ_WRITE 0x88BA -#define GL_BUFFER_ACCESS 0x88BB -#define GL_BUFFER_MAPPED 0x88BC -#define GL_BUFFER_MAP_POINTER 0x88BD -#define GL_STREAM_DRAW 0x88E0 -#define GL_STREAM_READ 0x88E1 -#define GL_STREAM_COPY 0x88E2 -#define GL_STATIC_DRAW 0x88E4 -#define GL_STATIC_READ 0x88E5 -#define GL_STATIC_COPY 0x88E6 -#define GL_DYNAMIC_DRAW 0x88E8 -#define GL_DYNAMIC_READ 0x88E9 -#define GL_DYNAMIC_COPY 0x88EA -#define GL_SAMPLES_PASSED 0x8914 -#define GL_SRC1_ALPHA 0x8589 -#endif - -#ifndef GL_VERSION_2_0 -#define GL_BLEND_EQUATION_RGB 0x8009 -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 -#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 -#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 -#define GL_CURRENT_VERTEX_ATTRIB 0x8626 -#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 -#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 -#define GL_STENCIL_BACK_FUNC 0x8800 -#define GL_STENCIL_BACK_FAIL 0x8801 -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 -#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 -#define GL_MAX_DRAW_BUFFERS 0x8824 -#define GL_DRAW_BUFFER0 0x8825 -#define GL_DRAW_BUFFER1 0x8826 -#define GL_DRAW_BUFFER2 0x8827 -#define GL_DRAW_BUFFER3 0x8828 -#define GL_DRAW_BUFFER4 0x8829 -#define GL_DRAW_BUFFER5 0x882A -#define GL_DRAW_BUFFER6 0x882B -#define GL_DRAW_BUFFER7 0x882C -#define GL_DRAW_BUFFER8 0x882D -#define GL_DRAW_BUFFER9 0x882E -#define GL_DRAW_BUFFER10 0x882F -#define GL_DRAW_BUFFER11 0x8830 -#define GL_DRAW_BUFFER12 0x8831 -#define GL_DRAW_BUFFER13 0x8832 -#define GL_DRAW_BUFFER14 0x8833 -#define GL_DRAW_BUFFER15 0x8834 -#define GL_BLEND_EQUATION_ALPHA 0x883D -#define GL_MAX_VERTEX_ATTRIBS 0x8869 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A -#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 -#define GL_FRAGMENT_SHADER 0x8B30 -#define GL_VERTEX_SHADER 0x8B31 -#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 -#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A -#define GL_MAX_VARYING_FLOATS 0x8B4B -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D -#define GL_SHADER_TYPE 0x8B4F -#define GL_FLOAT_VEC2 0x8B50 -#define GL_FLOAT_VEC3 0x8B51 -#define GL_FLOAT_VEC4 0x8B52 -#define GL_INT_VEC2 0x8B53 -#define GL_INT_VEC3 0x8B54 -#define GL_INT_VEC4 0x8B55 -#define GL_BOOL 0x8B56 -#define GL_BOOL_VEC2 0x8B57 -#define GL_BOOL_VEC3 0x8B58 -#define GL_BOOL_VEC4 0x8B59 -#define GL_FLOAT_MAT2 0x8B5A -#define GL_FLOAT_MAT3 0x8B5B -#define GL_FLOAT_MAT4 0x8B5C -#define GL_SAMPLER_1D 0x8B5D -#define GL_SAMPLER_2D 0x8B5E -#define GL_SAMPLER_3D 0x8B5F -#define GL_SAMPLER_CUBE 0x8B60 -#define GL_SAMPLER_1D_SHADOW 0x8B61 -#define GL_SAMPLER_2D_SHADOW 0x8B62 -#define GL_DELETE_STATUS 0x8B80 -#define GL_COMPILE_STATUS 0x8B81 -#define GL_LINK_STATUS 0x8B82 -#define GL_VALIDATE_STATUS 0x8B83 -#define GL_INFO_LOG_LENGTH 0x8B84 -#define GL_ATTACHED_SHADERS 0x8B85 -#define GL_ACTIVE_UNIFORMS 0x8B86 -#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 -#define GL_SHADER_SOURCE_LENGTH 0x8B88 -#define GL_ACTIVE_ATTRIBUTES 0x8B89 -#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B -#define GL_SHADING_LANGUAGE_VERSION 0x8B8C -#define GL_CURRENT_PROGRAM 0x8B8D -#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 -#define GL_LOWER_LEFT 0x8CA1 -#define GL_UPPER_LEFT 0x8CA2 -#define GL_STENCIL_BACK_REF 0x8CA3 -#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 -#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 -#endif - -#ifndef GL_VERSION_2_1 -#define GL_PIXEL_PACK_BUFFER 0x88EB -#define GL_PIXEL_UNPACK_BUFFER 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF -#define GL_FLOAT_MAT2x3 0x8B65 -#define GL_FLOAT_MAT2x4 0x8B66 -#define GL_FLOAT_MAT3x2 0x8B67 -#define GL_FLOAT_MAT3x4 0x8B68 -#define GL_FLOAT_MAT4x2 0x8B69 -#define GL_FLOAT_MAT4x3 0x8B6A -#define GL_SRGB 0x8C40 -#define GL_SRGB8 0x8C41 -#define GL_SRGB_ALPHA 0x8C42 -#define GL_SRGB8_ALPHA8 0x8C43 -#define GL_COMPRESSED_SRGB 0x8C48 -#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 -#endif - -#ifndef GL_VERSION_3_0 -#define GL_COMPARE_REF_TO_TEXTURE 0x884E -#define GL_CLIP_DISTANCE0 0x3000 -#define GL_CLIP_DISTANCE1 0x3001 -#define GL_CLIP_DISTANCE2 0x3002 -#define GL_CLIP_DISTANCE3 0x3003 -#define GL_CLIP_DISTANCE4 0x3004 -#define GL_CLIP_DISTANCE5 0x3005 -#define GL_CLIP_DISTANCE6 0x3006 -#define GL_CLIP_DISTANCE7 0x3007 -#define GL_MAX_CLIP_DISTANCES 0x0D32 -#define GL_MAJOR_VERSION 0x821B -#define GL_MINOR_VERSION 0x821C -#define GL_NUM_EXTENSIONS 0x821D -#define GL_CONTEXT_FLAGS 0x821E -#define GL_COMPRESSED_RED 0x8225 -#define GL_COMPRESSED_RG 0x8226 -#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x0001 -#define GL_RGBA32F 0x8814 -#define GL_RGB32F 0x8815 -#define GL_RGBA16F 0x881A -#define GL_RGB16F 0x881B -#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD -#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF -#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 -#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 -#define GL_CLAMP_READ_COLOR 0x891C -#define GL_FIXED_ONLY 0x891D -#define GL_MAX_VARYING_COMPONENTS 0x8B4B -#define GL_TEXTURE_1D_ARRAY 0x8C18 -#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 -#define GL_TEXTURE_2D_ARRAY 0x8C1A -#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B -#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C -#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D -#define GL_R11F_G11F_B10F 0x8C3A -#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B -#define GL_RGB9_E5 0x8C3D -#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E -#define GL_TEXTURE_SHARED_SIZE 0x8C3F -#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 -#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 -#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 -#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 -#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 -#define GL_PRIMITIVES_GENERATED 0x8C87 -#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 -#define GL_RASTERIZER_DISCARD 0x8C89 -#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B -#define GL_INTERLEAVED_ATTRIBS 0x8C8C -#define GL_SEPARATE_ATTRIBS 0x8C8D -#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E -#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F -#define GL_RGBA32UI 0x8D70 -#define GL_RGB32UI 0x8D71 -#define GL_RGBA16UI 0x8D76 -#define GL_RGB16UI 0x8D77 -#define GL_RGBA8UI 0x8D7C -#define GL_RGB8UI 0x8D7D -#define GL_RGBA32I 0x8D82 -#define GL_RGB32I 0x8D83 -#define GL_RGBA16I 0x8D88 -#define GL_RGB16I 0x8D89 -#define GL_RGBA8I 0x8D8E -#define GL_RGB8I 0x8D8F -#define GL_RED_INTEGER 0x8D94 -#define GL_GREEN_INTEGER 0x8D95 -#define GL_BLUE_INTEGER 0x8D96 -#define GL_RGB_INTEGER 0x8D98 -#define GL_RGBA_INTEGER 0x8D99 -#define GL_BGR_INTEGER 0x8D9A -#define GL_BGRA_INTEGER 0x8D9B -#define GL_SAMPLER_1D_ARRAY 0x8DC0 -#define GL_SAMPLER_2D_ARRAY 0x8DC1 -#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 -#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 -#define GL_SAMPLER_CUBE_SHADOW 0x8DC5 -#define GL_UNSIGNED_INT_VEC2 0x8DC6 -#define GL_UNSIGNED_INT_VEC3 0x8DC7 -#define GL_UNSIGNED_INT_VEC4 0x8DC8 -#define GL_INT_SAMPLER_1D 0x8DC9 -#define GL_INT_SAMPLER_2D 0x8DCA -#define GL_INT_SAMPLER_3D 0x8DCB -#define GL_INT_SAMPLER_CUBE 0x8DCC -#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE -#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF -#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 -#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 -#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 -#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 -#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 -#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 -#define GL_QUERY_WAIT 0x8E13 -#define GL_QUERY_NO_WAIT 0x8E14 -#define GL_QUERY_BY_REGION_WAIT 0x8E15 -#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 -#define GL_BUFFER_ACCESS_FLAGS 0x911F -#define GL_BUFFER_MAP_LENGTH 0x9120 -#define GL_BUFFER_MAP_OFFSET 0x9121 -/* Reuse tokens from ARB_depth_buffer_float */ -/* reuse GL_DEPTH_COMPONENT32F */ -/* reuse GL_DEPTH32F_STENCIL8 */ -/* reuse GL_FLOAT_32_UNSIGNED_INT_24_8_REV */ -/* Reuse tokens from ARB_framebuffer_object */ -/* reuse GL_INVALID_FRAMEBUFFER_OPERATION */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE */ -/* reuse GL_FRAMEBUFFER_DEFAULT */ -/* reuse GL_FRAMEBUFFER_UNDEFINED */ -/* reuse GL_DEPTH_STENCIL_ATTACHMENT */ -/* reuse GL_INDEX */ -/* reuse GL_MAX_RENDERBUFFER_SIZE */ -/* reuse GL_DEPTH_STENCIL */ -/* reuse GL_UNSIGNED_INT_24_8 */ -/* reuse GL_DEPTH24_STENCIL8 */ -/* reuse GL_TEXTURE_STENCIL_SIZE */ -/* reuse GL_TEXTURE_RED_TYPE */ -/* reuse GL_TEXTURE_GREEN_TYPE */ -/* reuse GL_TEXTURE_BLUE_TYPE */ -/* reuse GL_TEXTURE_ALPHA_TYPE */ -/* reuse GL_TEXTURE_DEPTH_TYPE */ -/* reuse GL_UNSIGNED_NORMALIZED */ -/* reuse GL_FRAMEBUFFER_BINDING */ -/* reuse GL_DRAW_FRAMEBUFFER_BINDING */ -/* reuse GL_RENDERBUFFER_BINDING */ -/* reuse GL_READ_FRAMEBUFFER */ -/* reuse GL_DRAW_FRAMEBUFFER */ -/* reuse GL_READ_FRAMEBUFFER_BINDING */ -/* reuse GL_RENDERBUFFER_SAMPLES */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */ -/* reuse GL_FRAMEBUFFER_COMPLETE */ -/* reuse GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT */ -/* reuse GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT */ -/* reuse GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER */ -/* reuse GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER */ -/* reuse GL_FRAMEBUFFER_UNSUPPORTED */ -/* reuse GL_MAX_COLOR_ATTACHMENTS */ -/* reuse GL_COLOR_ATTACHMENT0 */ -/* reuse GL_COLOR_ATTACHMENT1 */ -/* reuse GL_COLOR_ATTACHMENT2 */ -/* reuse GL_COLOR_ATTACHMENT3 */ -/* reuse GL_COLOR_ATTACHMENT4 */ -/* reuse GL_COLOR_ATTACHMENT5 */ -/* reuse GL_COLOR_ATTACHMENT6 */ -/* reuse GL_COLOR_ATTACHMENT7 */ -/* reuse GL_COLOR_ATTACHMENT8 */ -/* reuse GL_COLOR_ATTACHMENT9 */ -/* reuse GL_COLOR_ATTACHMENT10 */ -/* reuse GL_COLOR_ATTACHMENT11 */ -/* reuse GL_COLOR_ATTACHMENT12 */ -/* reuse GL_COLOR_ATTACHMENT13 */ -/* reuse GL_COLOR_ATTACHMENT14 */ -/* reuse GL_COLOR_ATTACHMENT15 */ -/* reuse GL_DEPTH_ATTACHMENT */ -/* reuse GL_STENCIL_ATTACHMENT */ -/* reuse GL_FRAMEBUFFER */ -/* reuse GL_RENDERBUFFER */ -/* reuse GL_RENDERBUFFER_WIDTH */ -/* reuse GL_RENDERBUFFER_HEIGHT */ -/* reuse GL_RENDERBUFFER_INTERNAL_FORMAT */ -/* reuse GL_STENCIL_INDEX1 */ -/* reuse GL_STENCIL_INDEX4 */ -/* reuse GL_STENCIL_INDEX8 */ -/* reuse GL_STENCIL_INDEX16 */ -/* reuse GL_RENDERBUFFER_RED_SIZE */ -/* reuse GL_RENDERBUFFER_GREEN_SIZE */ -/* reuse GL_RENDERBUFFER_BLUE_SIZE */ -/* reuse GL_RENDERBUFFER_ALPHA_SIZE */ -/* reuse GL_RENDERBUFFER_DEPTH_SIZE */ -/* reuse GL_RENDERBUFFER_STENCIL_SIZE */ -/* reuse GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE */ -/* reuse GL_MAX_SAMPLES */ -/* Reuse tokens from ARB_framebuffer_sRGB */ -/* reuse GL_FRAMEBUFFER_SRGB */ -/* Reuse tokens from ARB_half_float_vertex */ -/* reuse GL_HALF_FLOAT */ -/* Reuse tokens from ARB_map_buffer_range */ -/* reuse GL_MAP_READ_BIT */ -/* reuse GL_MAP_WRITE_BIT */ -/* reuse GL_MAP_INVALIDATE_RANGE_BIT */ -/* reuse GL_MAP_INVALIDATE_BUFFER_BIT */ -/* reuse GL_MAP_FLUSH_EXPLICIT_BIT */ -/* reuse GL_MAP_UNSYNCHRONIZED_BIT */ -/* Reuse tokens from ARB_texture_compression_rgtc */ -/* reuse GL_COMPRESSED_RED_RGTC1 */ -/* reuse GL_COMPRESSED_SIGNED_RED_RGTC1 */ -/* reuse GL_COMPRESSED_RG_RGTC2 */ -/* reuse GL_COMPRESSED_SIGNED_RG_RGTC2 */ -/* Reuse tokens from ARB_texture_rg */ -/* reuse GL_RG */ -/* reuse GL_RG_INTEGER */ -/* reuse GL_R8 */ -/* reuse GL_R16 */ -/* reuse GL_RG8 */ -/* reuse GL_RG16 */ -/* reuse GL_R16F */ -/* reuse GL_R32F */ -/* reuse GL_RG16F */ -/* reuse GL_RG32F */ -/* reuse GL_R8I */ -/* reuse GL_R8UI */ -/* reuse GL_R16I */ -/* reuse GL_R16UI */ -/* reuse GL_R32I */ -/* reuse GL_R32UI */ -/* reuse GL_RG8I */ -/* reuse GL_RG8UI */ -/* reuse GL_RG16I */ -/* reuse GL_RG16UI */ -/* reuse GL_RG32I */ -/* reuse GL_RG32UI */ -/* Reuse tokens from ARB_vertex_array_object */ -/* reuse GL_VERTEX_ARRAY_BINDING */ -#endif - -#ifndef GL_VERSION_3_1 -#define GL_SAMPLER_2D_RECT 0x8B63 -#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 -#define GL_SAMPLER_BUFFER 0x8DC2 -#define GL_INT_SAMPLER_2D_RECT 0x8DCD -#define GL_INT_SAMPLER_BUFFER 0x8DD0 -#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 -#define GL_TEXTURE_BUFFER 0x8C2A -#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B -#define GL_TEXTURE_BINDING_BUFFER 0x8C2C -#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D -#define GL_TEXTURE_RECTANGLE 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 -#define GL_RED_SNORM 0x8F90 -#define GL_RG_SNORM 0x8F91 -#define GL_RGB_SNORM 0x8F92 -#define GL_RGBA_SNORM 0x8F93 -#define GL_R8_SNORM 0x8F94 -#define GL_RG8_SNORM 0x8F95 -#define GL_RGB8_SNORM 0x8F96 -#define GL_RGBA8_SNORM 0x8F97 -#define GL_R16_SNORM 0x8F98 -#define GL_RG16_SNORM 0x8F99 -#define GL_RGB16_SNORM 0x8F9A -#define GL_RGBA16_SNORM 0x8F9B -#define GL_SIGNED_NORMALIZED 0x8F9C -#define GL_PRIMITIVE_RESTART 0x8F9D -#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E -/* Reuse tokens from ARB_copy_buffer */ -/* reuse GL_COPY_READ_BUFFER */ -/* reuse GL_COPY_WRITE_BUFFER */ -/* Reuse tokens from ARB_draw_instanced (none) */ -/* Reuse tokens from ARB_uniform_buffer_object */ -/* reuse GL_UNIFORM_BUFFER */ -/* reuse GL_UNIFORM_BUFFER_BINDING */ -/* reuse GL_UNIFORM_BUFFER_START */ -/* reuse GL_UNIFORM_BUFFER_SIZE */ -/* reuse GL_MAX_VERTEX_UNIFORM_BLOCKS */ -/* reuse GL_MAX_FRAGMENT_UNIFORM_BLOCKS */ -/* reuse GL_MAX_COMBINED_UNIFORM_BLOCKS */ -/* reuse GL_MAX_UNIFORM_BUFFER_BINDINGS */ -/* reuse GL_MAX_UNIFORM_BLOCK_SIZE */ -/* reuse GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS */ -/* reuse GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS */ -/* reuse GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT */ -/* reuse GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH */ -/* reuse GL_ACTIVE_UNIFORM_BLOCKS */ -/* reuse GL_UNIFORM_TYPE */ -/* reuse GL_UNIFORM_SIZE */ -/* reuse GL_UNIFORM_NAME_LENGTH */ -/* reuse GL_UNIFORM_BLOCK_INDEX */ -/* reuse GL_UNIFORM_OFFSET */ -/* reuse GL_UNIFORM_ARRAY_STRIDE */ -/* reuse GL_UNIFORM_MATRIX_STRIDE */ -/* reuse GL_UNIFORM_IS_ROW_MAJOR */ -/* reuse GL_UNIFORM_BLOCK_BINDING */ -/* reuse GL_UNIFORM_BLOCK_DATA_SIZE */ -/* reuse GL_UNIFORM_BLOCK_NAME_LENGTH */ -/* reuse GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS */ -/* reuse GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES */ -/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER */ -/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER */ -/* reuse GL_INVALID_INDEX */ -#endif - -#ifndef GL_VERSION_3_2 -#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 -#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 -#define GL_LINES_ADJACENCY 0x000A -#define GL_LINE_STRIP_ADJACENCY 0x000B -#define GL_TRIANGLES_ADJACENCY 0x000C -#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D -#define GL_PROGRAM_POINT_SIZE 0x8642 -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 -#define GL_GEOMETRY_SHADER 0x8DD9 -#define GL_GEOMETRY_VERTICES_OUT 0x8916 -#define GL_GEOMETRY_INPUT_TYPE 0x8917 -#define GL_GEOMETRY_OUTPUT_TYPE 0x8918 -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 -#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 -#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 -#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 -#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 -#define GL_CONTEXT_PROFILE_MASK 0x9126 -/* reuse GL_MAX_VARYING_COMPONENTS */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */ -/* Reuse tokens from ARB_depth_clamp */ -/* reuse GL_DEPTH_CLAMP */ -/* Reuse tokens from ARB_draw_elements_base_vertex (none) */ -/* Reuse tokens from ARB_fragment_coord_conventions (none) */ -/* Reuse tokens from ARB_provoking_vertex */ -/* reuse GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION */ -/* reuse GL_FIRST_VERTEX_CONVENTION */ -/* reuse GL_LAST_VERTEX_CONVENTION */ -/* reuse GL_PROVOKING_VERTEX */ -/* Reuse tokens from ARB_seamless_cube_map */ -/* reuse GL_TEXTURE_CUBE_MAP_SEAMLESS */ -/* Reuse tokens from ARB_sync */ -/* reuse GL_MAX_SERVER_WAIT_TIMEOUT */ -/* reuse GL_OBJECT_TYPE */ -/* reuse GL_SYNC_CONDITION */ -/* reuse GL_SYNC_STATUS */ -/* reuse GL_SYNC_FLAGS */ -/* reuse GL_SYNC_FENCE */ -/* reuse GL_SYNC_GPU_COMMANDS_COMPLETE */ -/* reuse GL_UNSIGNALED */ -/* reuse GL_SIGNALED */ -/* reuse GL_ALREADY_SIGNALED */ -/* reuse GL_TIMEOUT_EXPIRED */ -/* reuse GL_CONDITION_SATISFIED */ -/* reuse GL_WAIT_FAILED */ -/* reuse GL_TIMEOUT_IGNORED */ -/* reuse GL_SYNC_FLUSH_COMMANDS_BIT */ -/* reuse GL_TIMEOUT_IGNORED */ -/* Reuse tokens from ARB_texture_multisample */ -/* reuse GL_SAMPLE_POSITION */ -/* reuse GL_SAMPLE_MASK */ -/* reuse GL_SAMPLE_MASK_VALUE */ -/* reuse GL_MAX_SAMPLE_MASK_WORDS */ -/* reuse GL_TEXTURE_2D_MULTISAMPLE */ -/* reuse GL_PROXY_TEXTURE_2D_MULTISAMPLE */ -/* reuse GL_TEXTURE_2D_MULTISAMPLE_ARRAY */ -/* reuse GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY */ -/* reuse GL_TEXTURE_BINDING_2D_MULTISAMPLE */ -/* reuse GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY */ -/* reuse GL_TEXTURE_SAMPLES */ -/* reuse GL_TEXTURE_FIXED_SAMPLE_LOCATIONS */ -/* reuse GL_SAMPLER_2D_MULTISAMPLE */ -/* reuse GL_INT_SAMPLER_2D_MULTISAMPLE */ -/* reuse GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE */ -/* reuse GL_SAMPLER_2D_MULTISAMPLE_ARRAY */ -/* reuse GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY */ -/* reuse GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY */ -/* reuse GL_MAX_COLOR_TEXTURE_SAMPLES */ -/* reuse GL_MAX_DEPTH_TEXTURE_SAMPLES */ -/* reuse GL_MAX_INTEGER_SAMPLES */ -/* Don't need to reuse tokens from ARB_vertex_array_bgra since they're already in 1.2 core */ -#endif - -#ifndef GL_VERSION_3_3 -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE -/* Reuse tokens from ARB_blend_func_extended */ -/* reuse GL_SRC1_COLOR */ -/* reuse GL_ONE_MINUS_SRC1_COLOR */ -/* reuse GL_ONE_MINUS_SRC1_ALPHA */ -/* reuse GL_MAX_DUAL_SOURCE_DRAW_BUFFERS */ -/* Reuse tokens from ARB_explicit_attrib_location (none) */ -/* Reuse tokens from ARB_occlusion_query2 */ -/* reuse GL_ANY_SAMPLES_PASSED */ -/* Reuse tokens from ARB_sampler_objects */ -/* reuse GL_SAMPLER_BINDING */ -/* Reuse tokens from ARB_shader_bit_encoding (none) */ -/* Reuse tokens from ARB_texture_rgb10_a2ui */ -/* reuse GL_RGB10_A2UI */ -/* Reuse tokens from ARB_texture_swizzle */ -/* reuse GL_TEXTURE_SWIZZLE_R */ -/* reuse GL_TEXTURE_SWIZZLE_G */ -/* reuse GL_TEXTURE_SWIZZLE_B */ -/* reuse GL_TEXTURE_SWIZZLE_A */ -/* reuse GL_TEXTURE_SWIZZLE_RGBA */ -/* Reuse tokens from ARB_timer_query */ -/* reuse GL_TIME_ELAPSED */ -/* reuse GL_TIMESTAMP */ -/* Reuse tokens from ARB_vertex_type_2_10_10_10_rev */ -/* reuse GL_INT_2_10_10_10_REV */ -#endif - -#ifndef GL_VERSION_4_0 -#define GL_SAMPLE_SHADING 0x8C36 -#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 -#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E -#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F -#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A -#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B -#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C -#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D -#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E -#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F -/* Reuse tokens from ARB_texture_query_lod (none) */ -/* Reuse tokens from ARB_draw_buffers_blend (none) */ -/* Reuse tokens from ARB_draw_indirect */ -/* reuse GL_DRAW_INDIRECT_BUFFER */ -/* reuse GL_DRAW_INDIRECT_BUFFER_BINDING */ -/* Reuse tokens from ARB_gpu_shader5 */ -/* reuse GL_GEOMETRY_SHADER_INVOCATIONS */ -/* reuse GL_MAX_GEOMETRY_SHADER_INVOCATIONS */ -/* reuse GL_MIN_FRAGMENT_INTERPOLATION_OFFSET */ -/* reuse GL_MAX_FRAGMENT_INTERPOLATION_OFFSET */ -/* reuse GL_FRAGMENT_INTERPOLATION_OFFSET_BITS */ -/* reuse GL_MAX_VERTEX_STREAMS */ -/* Reuse tokens from ARB_gpu_shader_fp64 */ -/* reuse GL_DOUBLE_VEC2 */ -/* reuse GL_DOUBLE_VEC3 */ -/* reuse GL_DOUBLE_VEC4 */ -/* reuse GL_DOUBLE_MAT2 */ -/* reuse GL_DOUBLE_MAT3 */ -/* reuse GL_DOUBLE_MAT4 */ -/* reuse GL_DOUBLE_MAT2x3 */ -/* reuse GL_DOUBLE_MAT2x4 */ -/* reuse GL_DOUBLE_MAT3x2 */ -/* reuse GL_DOUBLE_MAT3x4 */ -/* reuse GL_DOUBLE_MAT4x2 */ -/* reuse GL_DOUBLE_MAT4x3 */ -/* Reuse tokens from ARB_shader_subroutine */ -/* reuse GL_ACTIVE_SUBROUTINES */ -/* reuse GL_ACTIVE_SUBROUTINE_UNIFORMS */ -/* reuse GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS */ -/* reuse GL_ACTIVE_SUBROUTINE_MAX_LENGTH */ -/* reuse GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH */ -/* reuse GL_MAX_SUBROUTINES */ -/* reuse GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS */ -/* reuse GL_NUM_COMPATIBLE_SUBROUTINES */ -/* reuse GL_COMPATIBLE_SUBROUTINES */ -/* Reuse tokens from ARB_tessellation_shader */ -/* reuse GL_PATCHES */ -/* reuse GL_PATCH_VERTICES */ -/* reuse GL_PATCH_DEFAULT_INNER_LEVEL */ -/* reuse GL_PATCH_DEFAULT_OUTER_LEVEL */ -/* reuse GL_TESS_CONTROL_OUTPUT_VERTICES */ -/* reuse GL_TESS_GEN_MODE */ -/* reuse GL_TESS_GEN_SPACING */ -/* reuse GL_TESS_GEN_VERTEX_ORDER */ -/* reuse GL_TESS_GEN_POINT_MODE */ -/* reuse GL_ISOLINES */ -/* reuse GL_FRACTIONAL_ODD */ -/* reuse GL_FRACTIONAL_EVEN */ -/* reuse GL_MAX_PATCH_VERTICES */ -/* reuse GL_MAX_TESS_GEN_LEVEL */ -/* reuse GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS */ -/* reuse GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS */ -/* reuse GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS */ -/* reuse GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS */ -/* reuse GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS */ -/* reuse GL_MAX_TESS_PATCH_COMPONENTS */ -/* reuse GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS */ -/* reuse GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS */ -/* reuse GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS */ -/* reuse GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS */ -/* reuse GL_MAX_TESS_CONTROL_INPUT_COMPONENTS */ -/* reuse GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS */ -/* reuse GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS */ -/* reuse GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS */ -/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER */ -/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER */ -/* reuse GL_TESS_EVALUATION_SHADER */ -/* reuse GL_TESS_CONTROL_SHADER */ -/* Reuse tokens from ARB_texture_buffer_object_rgb32 (none) */ -/* Reuse tokens from ARB_transform_feedback2 */ -/* reuse GL_TRANSFORM_FEEDBACK */ -/* reuse GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED */ -/* reuse GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE */ -/* reuse GL_TRANSFORM_FEEDBACK_BINDING */ -/* Reuse tokens from ARB_transform_feedback3 */ -/* reuse GL_MAX_TRANSFORM_FEEDBACK_BUFFERS */ -/* reuse GL_MAX_VERTEX_STREAMS */ -#endif - -#ifndef GL_VERSION_4_1 -/* Reuse tokens from ARB_ES2_compatibility */ -/* reuse GL_FIXED */ -/* reuse GL_IMPLEMENTATION_COLOR_READ_TYPE */ -/* reuse GL_IMPLEMENTATION_COLOR_READ_FORMAT */ -/* reuse GL_LOW_FLOAT */ -/* reuse GL_MEDIUM_FLOAT */ -/* reuse GL_HIGH_FLOAT */ -/* reuse GL_LOW_INT */ -/* reuse GL_MEDIUM_INT */ -/* reuse GL_HIGH_INT */ -/* reuse GL_SHADER_COMPILER */ -/* reuse GL_SHADER_BINARY_FORMATS */ -/* reuse GL_NUM_SHADER_BINARY_FORMATS */ -/* reuse GL_MAX_VERTEX_UNIFORM_VECTORS */ -/* reuse GL_MAX_VARYING_VECTORS */ -/* reuse GL_MAX_FRAGMENT_UNIFORM_VECTORS */ -/* reuse GL_RGB565 */ -/* Reuse tokens from ARB_get_program_binary */ -/* reuse GL_PROGRAM_BINARY_RETRIEVABLE_HINT */ -/* reuse GL_PROGRAM_BINARY_LENGTH */ -/* reuse GL_NUM_PROGRAM_BINARY_FORMATS */ -/* reuse GL_PROGRAM_BINARY_FORMATS */ -/* Reuse tokens from ARB_separate_shader_objects */ -/* reuse GL_VERTEX_SHADER_BIT */ -/* reuse GL_FRAGMENT_SHADER_BIT */ -/* reuse GL_GEOMETRY_SHADER_BIT */ -/* reuse GL_TESS_CONTROL_SHADER_BIT */ -/* reuse GL_TESS_EVALUATION_SHADER_BIT */ -/* reuse GL_ALL_SHADER_BITS */ -/* reuse GL_PROGRAM_SEPARABLE */ -/* reuse GL_ACTIVE_PROGRAM */ -/* reuse GL_PROGRAM_PIPELINE_BINDING */ -/* Reuse tokens from ARB_shader_precision (none) */ -/* Reuse tokens from ARB_vertex_attrib_64bit - all are in GL 3.0 and 4.0 already */ -/* Reuse tokens from ARB_viewport_array - some are in GL 1.1 and ARB_provoking_vertex already */ -/* reuse GL_MAX_VIEWPORTS */ -/* reuse GL_VIEWPORT_SUBPIXEL_BITS */ -/* reuse GL_VIEWPORT_BOUNDS_RANGE */ -/* reuse GL_LAYER_PROVOKING_VERTEX */ -/* reuse GL_VIEWPORT_INDEX_PROVOKING_VERTEX */ -/* reuse GL_UNDEFINED_VERTEX */ -#endif - -#ifndef GL_VERSION_4_2 -/* Reuse tokens from ARB_base_instance (none) */ -/* Reuse tokens from ARB_shading_language_420pack (none) */ -/* Reuse tokens from ARB_transform_feedback_instanced (none) */ -/* Reuse tokens from ARB_compressed_texture_pixel_storage */ -/* reuse GL_UNPACK_COMPRESSED_BLOCK_WIDTH */ -/* reuse GL_UNPACK_COMPRESSED_BLOCK_HEIGHT */ -/* reuse GL_UNPACK_COMPRESSED_BLOCK_DEPTH */ -/* reuse GL_UNPACK_COMPRESSED_BLOCK_SIZE */ -/* reuse GL_PACK_COMPRESSED_BLOCK_WIDTH */ -/* reuse GL_PACK_COMPRESSED_BLOCK_HEIGHT */ -/* reuse GL_PACK_COMPRESSED_BLOCK_DEPTH */ -/* reuse GL_PACK_COMPRESSED_BLOCK_SIZE */ -/* Reuse tokens from ARB_conservative_depth (none) */ -/* Reuse tokens from ARB_internalformat_query */ -/* reuse GL_NUM_SAMPLE_COUNTS */ -/* Reuse tokens from ARB_map_buffer_alignment */ -/* reuse GL_MIN_MAP_BUFFER_ALIGNMENT */ -/* Reuse tokens from ARB_shader_atomic_counters */ -/* reuse GL_ATOMIC_COUNTER_BUFFER */ -/* reuse GL_ATOMIC_COUNTER_BUFFER_BINDING */ -/* reuse GL_ATOMIC_COUNTER_BUFFER_START */ -/* reuse GL_ATOMIC_COUNTER_BUFFER_SIZE */ -/* reuse GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE */ -/* reuse GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS */ -/* reuse GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES */ -/* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER */ -/* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER */ -/* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER */ -/* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER */ -/* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER */ -/* reuse GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS */ -/* reuse GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS */ -/* reuse GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS */ -/* reuse GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS */ -/* reuse GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS */ -/* reuse GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS */ -/* reuse GL_MAX_VERTEX_ATOMIC_COUNTERS */ -/* reuse GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS */ -/* reuse GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS */ -/* reuse GL_MAX_GEOMETRY_ATOMIC_COUNTERS */ -/* reuse GL_MAX_FRAGMENT_ATOMIC_COUNTERS */ -/* reuse GL_MAX_COMBINED_ATOMIC_COUNTERS */ -/* reuse GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE */ -/* reuse GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS */ -/* reuse GL_ACTIVE_ATOMIC_COUNTER_BUFFERS */ -/* reuse GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX */ -/* reuse GL_UNSIGNED_INT_ATOMIC_COUNTER */ -/* Reuse tokens from ARB_shader_image_load_store */ -/* reuse GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT */ -/* reuse GL_ELEMENT_ARRAY_BARRIER_BIT */ -/* reuse GL_UNIFORM_BARRIER_BIT */ -/* reuse GL_TEXTURE_FETCH_BARRIER_BIT */ -/* reuse GL_SHADER_IMAGE_ACCESS_BARRIER_BIT */ -/* reuse GL_COMMAND_BARRIER_BIT */ -/* reuse GL_PIXEL_BUFFER_BARRIER_BIT */ -/* reuse GL_TEXTURE_UPDATE_BARRIER_BIT */ -/* reuse GL_BUFFER_UPDATE_BARRIER_BIT */ -/* reuse GL_FRAMEBUFFER_BARRIER_BIT */ -/* reuse GL_TRANSFORM_FEEDBACK_BARRIER_BIT */ -/* reuse GL_ATOMIC_COUNTER_BARRIER_BIT */ -/* reuse GL_ALL_BARRIER_BITS */ -/* reuse GL_MAX_IMAGE_UNITS */ -/* reuse GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS */ -/* reuse GL_IMAGE_BINDING_NAME */ -/* reuse GL_IMAGE_BINDING_LEVEL */ -/* reuse GL_IMAGE_BINDING_LAYERED */ -/* reuse GL_IMAGE_BINDING_LAYER */ -/* reuse GL_IMAGE_BINDING_ACCESS */ -/* reuse GL_IMAGE_1D */ -/* reuse GL_IMAGE_2D */ -/* reuse GL_IMAGE_3D */ -/* reuse GL_IMAGE_2D_RECT */ -/* reuse GL_IMAGE_CUBE */ -/* reuse GL_IMAGE_BUFFER */ -/* reuse GL_IMAGE_1D_ARRAY */ -/* reuse GL_IMAGE_2D_ARRAY */ -/* reuse GL_IMAGE_CUBE_MAP_ARRAY */ -/* reuse GL_IMAGE_2D_MULTISAMPLE */ -/* reuse GL_IMAGE_2D_MULTISAMPLE_ARRAY */ -/* reuse GL_INT_IMAGE_1D */ -/* reuse GL_INT_IMAGE_2D */ -/* reuse GL_INT_IMAGE_3D */ -/* reuse GL_INT_IMAGE_2D_RECT */ -/* reuse GL_INT_IMAGE_CUBE */ -/* reuse GL_INT_IMAGE_BUFFER */ -/* reuse GL_INT_IMAGE_1D_ARRAY */ -/* reuse GL_INT_IMAGE_2D_ARRAY */ -/* reuse GL_INT_IMAGE_CUBE_MAP_ARRAY */ -/* reuse GL_INT_IMAGE_2D_MULTISAMPLE */ -/* reuse GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY */ -/* reuse GL_UNSIGNED_INT_IMAGE_1D */ -/* reuse GL_UNSIGNED_INT_IMAGE_2D */ -/* reuse GL_UNSIGNED_INT_IMAGE_3D */ -/* reuse GL_UNSIGNED_INT_IMAGE_2D_RECT */ -/* reuse GL_UNSIGNED_INT_IMAGE_CUBE */ -/* reuse GL_UNSIGNED_INT_IMAGE_BUFFER */ -/* reuse GL_UNSIGNED_INT_IMAGE_1D_ARRAY */ -/* reuse GL_UNSIGNED_INT_IMAGE_2D_ARRAY */ -/* reuse GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY */ -/* reuse GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE */ -/* reuse GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY */ -/* reuse GL_MAX_IMAGE_SAMPLES */ -/* reuse GL_IMAGE_BINDING_FORMAT */ -/* reuse GL_IMAGE_FORMAT_COMPATIBILITY_TYPE */ -/* reuse GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE */ -/* reuse GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS */ -/* reuse GL_MAX_VERTEX_IMAGE_UNIFORMS */ -/* reuse GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS */ -/* reuse GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS */ -/* reuse GL_MAX_GEOMETRY_IMAGE_UNIFORMS */ -/* reuse GL_MAX_FRAGMENT_IMAGE_UNIFORMS */ -/* reuse GL_MAX_COMBINED_IMAGE_UNIFORMS */ -/* Reuse tokens from ARB_shading_language_packing (none) */ -/* Reuse tokens from ARB_texture_storage */ -/* reuse GL_TEXTURE_IMMUTABLE_FORMAT */ -#endif - -#ifndef GL_VERSION_4_3 -#define GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9 -#define GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E -/* Reuse tokens from ARB_arrays_of_arrays (none, GLSL only) */ -/* Reuse tokens from ARB_fragment_layer_viewport (none, GLSL only) */ -/* Reuse tokens from ARB_shader_image_size (none, GLSL only) */ -/* Reuse tokens from ARB_ES3_compatibility */ -/* reuse GL_COMPRESSED_RGB8_ETC2 */ -/* reuse GL_COMPRESSED_SRGB8_ETC2 */ -/* reuse GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 */ -/* reuse GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 */ -/* reuse GL_COMPRESSED_RGBA8_ETC2_EAC */ -/* reuse GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC */ -/* reuse GL_COMPRESSED_R11_EAC */ -/* reuse GL_COMPRESSED_SIGNED_R11_EAC */ -/* reuse GL_COMPRESSED_RG11_EAC */ -/* reuse GL_COMPRESSED_SIGNED_RG11_EAC */ -/* reuse GL_PRIMITIVE_RESTART_FIXED_INDEX */ -/* reuse GL_ANY_SAMPLES_PASSED_CONSERVATIVE */ -/* reuse GL_MAX_ELEMENT_INDEX */ -/* Reuse tokens from ARB_clear_buffer_object (none) */ -/* Reuse tokens from ARB_compute_shader */ -/* reuse GL_COMPUTE_SHADER */ -/* reuse GL_MAX_COMPUTE_UNIFORM_BLOCKS */ -/* reuse GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS */ -/* reuse GL_MAX_COMPUTE_IMAGE_UNIFORMS */ -/* reuse GL_MAX_COMPUTE_SHARED_MEMORY_SIZE */ -/* reuse GL_MAX_COMPUTE_UNIFORM_COMPONENTS */ -/* reuse GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS */ -/* reuse GL_MAX_COMPUTE_ATOMIC_COUNTERS */ -/* reuse GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS */ -/* reuse GL_MAX_COMPUTE_LOCAL_INVOCATIONS */ -/* reuse GL_MAX_COMPUTE_WORK_GROUP_COUNT */ -/* reuse GL_MAX_COMPUTE_WORK_GROUP_SIZE */ -/* reuse GL_COMPUTE_LOCAL_WORK_SIZE */ -/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER */ -/* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER */ -/* reuse GL_DISPATCH_INDIRECT_BUFFER */ -/* reuse GL_DISPATCH_INDIRECT_BUFFER_BINDING */ -/* Reuse tokens from ARB_copy_image (none) */ -/* Reuse tokens from KHR_debug */ -/* reuse GL_DEBUG_OUTPUT_SYNCHRONOUS */ -/* reuse GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH */ -/* reuse GL_DEBUG_CALLBACK_FUNCTION */ -/* reuse GL_DEBUG_CALLBACK_USER_PARAM */ -/* reuse GL_DEBUG_SOURCE_API */ -/* reuse GL_DEBUG_SOURCE_WINDOW_SYSTEM */ -/* reuse GL_DEBUG_SOURCE_SHADER_COMPILER */ -/* reuse GL_DEBUG_SOURCE_THIRD_PARTY */ -/* reuse GL_DEBUG_SOURCE_APPLICATION */ -/* reuse GL_DEBUG_SOURCE_OTHER */ -/* reuse GL_DEBUG_TYPE_ERROR */ -/* reuse GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR */ -/* reuse GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR */ -/* reuse GL_DEBUG_TYPE_PORTABILITY */ -/* reuse GL_DEBUG_TYPE_PERFORMANCE */ -/* reuse GL_DEBUG_TYPE_OTHER */ -/* reuse GL_MAX_DEBUG_MESSAGE_LENGTH */ -/* reuse GL_MAX_DEBUG_LOGGED_MESSAGES */ -/* reuse GL_DEBUG_LOGGED_MESSAGES */ -/* reuse GL_DEBUG_SEVERITY_HIGH */ -/* reuse GL_DEBUG_SEVERITY_MEDIUM */ -/* reuse GL_DEBUG_SEVERITY_LOW */ -/* reuse GL_DEBUG_TYPE_MARKER */ -/* reuse GL_DEBUG_TYPE_PUSH_GROUP */ -/* reuse GL_DEBUG_TYPE_POP_GROUP */ -/* reuse GL_DEBUG_SEVERITY_NOTIFICATION */ -/* reuse GL_MAX_DEBUG_GROUP_STACK_DEPTH */ -/* reuse GL_DEBUG_GROUP_STACK_DEPTH */ -/* reuse GL_BUFFER */ -/* reuse GL_SHADER */ -/* reuse GL_PROGRAM */ -/* reuse GL_QUERY */ -/* reuse GL_PROGRAM_PIPELINE */ -/* reuse GL_SAMPLER */ -/* reuse GL_DISPLAY_LIST */ -/* reuse GL_MAX_LABEL_LENGTH */ -/* reuse GL_DEBUG_OUTPUT */ -/* reuse GL_CONTEXT_FLAG_DEBUG_BIT */ -/* reuse GL_STACK_UNDERFLOW */ -/* reuse GL_STACK_OVERFLOW */ -/* Reuse tokens from ARB_explicit_uniform_location */ -/* reuse GL_MAX_UNIFORM_LOCATIONS */ -/* Reuse tokens from ARB_framebuffer_no_attachments */ -/* reuse GL_FRAMEBUFFER_DEFAULT_WIDTH */ -/* reuse GL_FRAMEBUFFER_DEFAULT_HEIGHT */ -/* reuse GL_FRAMEBUFFER_DEFAULT_LAYERS */ -/* reuse GL_FRAMEBUFFER_DEFAULT_SAMPLES */ -/* reuse GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS */ -/* reuse GL_MAX_FRAMEBUFFER_WIDTH */ -/* reuse GL_MAX_FRAMEBUFFER_HEIGHT */ -/* reuse GL_MAX_FRAMEBUFFER_LAYERS */ -/* reuse GL_MAX_FRAMEBUFFER_SAMPLES */ -/* Reuse tokens from ARB_internalformat_query2 */ -/* reuse GL_INTERNALFORMAT_SUPPORTED */ -/* reuse GL_INTERNALFORMAT_PREFERRED */ -/* reuse GL_INTERNALFORMAT_RED_SIZE */ -/* reuse GL_INTERNALFORMAT_GREEN_SIZE */ -/* reuse GL_INTERNALFORMAT_BLUE_SIZE */ -/* reuse GL_INTERNALFORMAT_ALPHA_SIZE */ -/* reuse GL_INTERNALFORMAT_DEPTH_SIZE */ -/* reuse GL_INTERNALFORMAT_STENCIL_SIZE */ -/* reuse GL_INTERNALFORMAT_SHARED_SIZE */ -/* reuse GL_INTERNALFORMAT_RED_TYPE */ -/* reuse GL_INTERNALFORMAT_GREEN_TYPE */ -/* reuse GL_INTERNALFORMAT_BLUE_TYPE */ -/* reuse GL_INTERNALFORMAT_ALPHA_TYPE */ -/* reuse GL_INTERNALFORMAT_DEPTH_TYPE */ -/* reuse GL_INTERNALFORMAT_STENCIL_TYPE */ -/* reuse GL_MAX_WIDTH */ -/* reuse GL_MAX_HEIGHT */ -/* reuse GL_MAX_DEPTH */ -/* reuse GL_MAX_LAYERS */ -/* reuse GL_MAX_COMBINED_DIMENSIONS */ -/* reuse GL_COLOR_COMPONENTS */ -/* reuse GL_DEPTH_COMPONENTS */ -/* reuse GL_STENCIL_COMPONENTS */ -/* reuse GL_COLOR_RENDERABLE */ -/* reuse GL_DEPTH_RENDERABLE */ -/* reuse GL_STENCIL_RENDERABLE */ -/* reuse GL_FRAMEBUFFER_RENDERABLE */ -/* reuse GL_FRAMEBUFFER_RENDERABLE_LAYERED */ -/* reuse GL_FRAMEBUFFER_BLEND */ -/* reuse GL_READ_PIXELS */ -/* reuse GL_READ_PIXELS_FORMAT */ -/* reuse GL_READ_PIXELS_TYPE */ -/* reuse GL_TEXTURE_IMAGE_FORMAT */ -/* reuse GL_TEXTURE_IMAGE_TYPE */ -/* reuse GL_GET_TEXTURE_IMAGE_FORMAT */ -/* reuse GL_GET_TEXTURE_IMAGE_TYPE */ -/* reuse GL_MIPMAP */ -/* reuse GL_MANUAL_GENERATE_MIPMAP */ -/* reuse GL_AUTO_GENERATE_MIPMAP */ -/* reuse GL_COLOR_ENCODING */ -/* reuse GL_SRGB_READ */ -/* reuse GL_SRGB_WRITE */ -/* reuse GL_FILTER */ -/* reuse GL_VERTEX_TEXTURE */ -/* reuse GL_TESS_CONTROL_TEXTURE */ -/* reuse GL_TESS_EVALUATION_TEXTURE */ -/* reuse GL_GEOMETRY_TEXTURE */ -/* reuse GL_FRAGMENT_TEXTURE */ -/* reuse GL_COMPUTE_TEXTURE */ -/* reuse GL_TEXTURE_SHADOW */ -/* reuse GL_TEXTURE_GATHER */ -/* reuse GL_TEXTURE_GATHER_SHADOW */ -/* reuse GL_SHADER_IMAGE_LOAD */ -/* reuse GL_SHADER_IMAGE_STORE */ -/* reuse GL_SHADER_IMAGE_ATOMIC */ -/* reuse GL_IMAGE_TEXEL_SIZE */ -/* reuse GL_IMAGE_COMPATIBILITY_CLASS */ -/* reuse GL_IMAGE_PIXEL_FORMAT */ -/* reuse GL_IMAGE_PIXEL_TYPE */ -/* reuse GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST */ -/* reuse GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST */ -/* reuse GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE */ -/* reuse GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE */ -/* reuse GL_TEXTURE_COMPRESSED_BLOCK_WIDTH */ -/* reuse GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT */ -/* reuse GL_TEXTURE_COMPRESSED_BLOCK_SIZE */ -/* reuse GL_CLEAR_BUFFER */ -/* reuse GL_TEXTURE_VIEW */ -/* reuse GL_VIEW_COMPATIBILITY_CLASS */ -/* reuse GL_FULL_SUPPORT */ -/* reuse GL_CAVEAT_SUPPORT */ -/* reuse GL_IMAGE_CLASS_4_X_32 */ -/* reuse GL_IMAGE_CLASS_2_X_32 */ -/* reuse GL_IMAGE_CLASS_1_X_32 */ -/* reuse GL_IMAGE_CLASS_4_X_16 */ -/* reuse GL_IMAGE_CLASS_2_X_16 */ -/* reuse GL_IMAGE_CLASS_1_X_16 */ -/* reuse GL_IMAGE_CLASS_4_X_8 */ -/* reuse GL_IMAGE_CLASS_2_X_8 */ -/* reuse GL_IMAGE_CLASS_1_X_8 */ -/* reuse GL_IMAGE_CLASS_11_11_10 */ -/* reuse GL_IMAGE_CLASS_10_10_10_2 */ -/* reuse GL_VIEW_CLASS_128_BITS */ -/* reuse GL_VIEW_CLASS_96_BITS */ -/* reuse GL_VIEW_CLASS_64_BITS */ -/* reuse GL_VIEW_CLASS_48_BITS */ -/* reuse GL_VIEW_CLASS_32_BITS */ -/* reuse GL_VIEW_CLASS_24_BITS */ -/* reuse GL_VIEW_CLASS_16_BITS */ -/* reuse GL_VIEW_CLASS_8_BITS */ -/* reuse GL_VIEW_CLASS_S3TC_DXT1_RGB */ -/* reuse GL_VIEW_CLASS_S3TC_DXT1_RGBA */ -/* reuse GL_VIEW_CLASS_S3TC_DXT3_RGBA */ -/* reuse GL_VIEW_CLASS_S3TC_DXT5_RGBA */ -/* reuse GL_VIEW_CLASS_RGTC1_RED */ -/* reuse GL_VIEW_CLASS_RGTC2_RG */ -/* reuse GL_VIEW_CLASS_BPTC_UNORM */ -/* reuse GL_VIEW_CLASS_BPTC_FLOAT */ -/* Reuse tokens from ARB_invalidate_subdata (none) */ -/* Reuse tokens from ARB_multi_draw_indirect (none) */ -/* Reuse tokens from ARB_program_interface_query */ -/* reuse GL_UNIFORM */ -/* reuse GL_UNIFORM_BLOCK */ -/* reuse GL_PROGRAM_INPUT */ -/* reuse GL_PROGRAM_OUTPUT */ -/* reuse GL_BUFFER_VARIABLE */ -/* reuse GL_SHADER_STORAGE_BLOCK */ -/* reuse GL_VERTEX_SUBROUTINE */ -/* reuse GL_TESS_CONTROL_SUBROUTINE */ -/* reuse GL_TESS_EVALUATION_SUBROUTINE */ -/* reuse GL_GEOMETRY_SUBROUTINE */ -/* reuse GL_FRAGMENT_SUBROUTINE */ -/* reuse GL_COMPUTE_SUBROUTINE */ -/* reuse GL_VERTEX_SUBROUTINE_UNIFORM */ -/* reuse GL_TESS_CONTROL_SUBROUTINE_UNIFORM */ -/* reuse GL_TESS_EVALUATION_SUBROUTINE_UNIFORM */ -/* reuse GL_GEOMETRY_SUBROUTINE_UNIFORM */ -/* reuse GL_FRAGMENT_SUBROUTINE_UNIFORM */ -/* reuse GL_COMPUTE_SUBROUTINE_UNIFORM */ -/* reuse GL_TRANSFORM_FEEDBACK_VARYING */ -/* reuse GL_ACTIVE_RESOURCES */ -/* reuse GL_MAX_NAME_LENGTH */ -/* reuse GL_MAX_NUM_ACTIVE_VARIABLES */ -/* reuse GL_MAX_NUM_COMPATIBLE_SUBROUTINES */ -/* reuse GL_NAME_LENGTH */ -/* reuse GL_TYPE */ -/* reuse GL_ARRAY_SIZE */ -/* reuse GL_OFFSET */ -/* reuse GL_BLOCK_INDEX */ -/* reuse GL_ARRAY_STRIDE */ -/* reuse GL_MATRIX_STRIDE */ -/* reuse GL_IS_ROW_MAJOR */ -/* reuse GL_ATOMIC_COUNTER_BUFFER_INDEX */ -/* reuse GL_BUFFER_BINDING */ -/* reuse GL_BUFFER_DATA_SIZE */ -/* reuse GL_NUM_ACTIVE_VARIABLES */ -/* reuse GL_ACTIVE_VARIABLES */ -/* reuse GL_REFERENCED_BY_VERTEX_SHADER */ -/* reuse GL_REFERENCED_BY_TESS_CONTROL_SHADER */ -/* reuse GL_REFERENCED_BY_TESS_EVALUATION_SHADER */ -/* reuse GL_REFERENCED_BY_GEOMETRY_SHADER */ -/* reuse GL_REFERENCED_BY_FRAGMENT_SHADER */ -/* reuse GL_REFERENCED_BY_COMPUTE_SHADER */ -/* reuse GL_TOP_LEVEL_ARRAY_SIZE */ -/* reuse GL_TOP_LEVEL_ARRAY_STRIDE */ -/* reuse GL_LOCATION */ -/* reuse GL_LOCATION_INDEX */ -/* reuse GL_IS_PER_PATCH */ -/* Reuse tokens from ARB_robust_buffer_access_behavior (none) */ -/* Reuse tokens from ARB_shader_storage_buffer_object */ -/* reuse GL_SHADER_STORAGE_BUFFER */ -/* reuse GL_SHADER_STORAGE_BUFFER_BINDING */ -/* reuse GL_SHADER_STORAGE_BUFFER_START */ -/* reuse GL_SHADER_STORAGE_BUFFER_SIZE */ -/* reuse GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS */ -/* reuse GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS */ -/* reuse GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS */ -/* reuse GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS */ -/* reuse GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS */ -/* reuse GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS */ -/* reuse GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS */ -/* reuse GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS */ -/* reuse GL_MAX_SHADER_STORAGE_BLOCK_SIZE */ -/* reuse GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT */ -/* reuse GL_SHADER_STORAGE_BARRIER_BIT */ -/* reuse GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES */ -/* Reuse tokens from ARB_stencil_texturing */ -/* reuse GL_DEPTH_STENCIL_TEXTURE_MODE */ -/* Reuse tokens from ARB_texture_buffer_range */ -/* reuse GL_TEXTURE_BUFFER_OFFSET */ -/* reuse GL_TEXTURE_BUFFER_SIZE */ -/* reuse GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT */ -/* Reuse tokens from ARB_texture_query_levels (none) */ -/* Reuse tokens from ARB_texture_storage_multisample (none) */ -/* Reuse tokens from ARB_texture_view */ -/* reuse GL_TEXTURE_VIEW_MIN_LEVEL */ -/* reuse GL_TEXTURE_VIEW_NUM_LEVELS */ -/* reuse GL_TEXTURE_VIEW_MIN_LAYER */ -/* reuse GL_TEXTURE_VIEW_NUM_LAYERS */ -/* reuse GL_TEXTURE_IMMUTABLE_LEVELS */ -/* Reuse tokens from ARB_vertex_attrib_binding */ -/* reuse GL_VERTEX_ATTRIB_BINDING */ -/* reuse GL_VERTEX_ATTRIB_RELATIVE_OFFSET */ -/* reuse GL_VERTEX_BINDING_DIVISOR */ -/* reuse GL_VERTEX_BINDING_OFFSET */ -/* reuse GL_VERTEX_BINDING_STRIDE */ -/* reuse GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET */ -/* reuse GL_MAX_VERTEX_ATTRIB_BINDINGS */ -#endif - -#ifndef GL_ARB_depth_buffer_float -#define GL_DEPTH_COMPONENT32F 0x8CAC -#define GL_DEPTH32F_STENCIL8 0x8CAD -#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD -#endif - -#ifndef GL_ARB_framebuffer_object -#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 -#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 -#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 -#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 -#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 -#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 -#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 -#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 -#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 -#define GL_FRAMEBUFFER_DEFAULT 0x8218 -#define GL_FRAMEBUFFER_UNDEFINED 0x8219 -#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A -#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 -#define GL_DEPTH_STENCIL 0x84F9 -#define GL_UNSIGNED_INT_24_8 0x84FA -#define GL_DEPTH24_STENCIL8 0x88F0 -#define GL_TEXTURE_STENCIL_SIZE 0x88F1 -#define GL_TEXTURE_RED_TYPE 0x8C10 -#define GL_TEXTURE_GREEN_TYPE 0x8C11 -#define GL_TEXTURE_BLUE_TYPE 0x8C12 -#define GL_TEXTURE_ALPHA_TYPE 0x8C13 -#define GL_TEXTURE_DEPTH_TYPE 0x8C16 -#define GL_UNSIGNED_NORMALIZED 0x8C17 -#define GL_FRAMEBUFFER_BINDING 0x8CA6 -#define GL_DRAW_FRAMEBUFFER_BINDING GL_FRAMEBUFFER_BINDING -#define GL_RENDERBUFFER_BINDING 0x8CA7 -#define GL_READ_FRAMEBUFFER 0x8CA8 -#define GL_DRAW_FRAMEBUFFER 0x8CA9 -#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA -#define GL_RENDERBUFFER_SAMPLES 0x8CAB -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 -#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 -#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB -#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC -#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD -#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF -#define GL_COLOR_ATTACHMENT0 0x8CE0 -#define GL_COLOR_ATTACHMENT1 0x8CE1 -#define GL_COLOR_ATTACHMENT2 0x8CE2 -#define GL_COLOR_ATTACHMENT3 0x8CE3 -#define GL_COLOR_ATTACHMENT4 0x8CE4 -#define GL_COLOR_ATTACHMENT5 0x8CE5 -#define GL_COLOR_ATTACHMENT6 0x8CE6 -#define GL_COLOR_ATTACHMENT7 0x8CE7 -#define GL_COLOR_ATTACHMENT8 0x8CE8 -#define GL_COLOR_ATTACHMENT9 0x8CE9 -#define GL_COLOR_ATTACHMENT10 0x8CEA -#define GL_COLOR_ATTACHMENT11 0x8CEB -#define GL_COLOR_ATTACHMENT12 0x8CEC -#define GL_COLOR_ATTACHMENT13 0x8CED -#define GL_COLOR_ATTACHMENT14 0x8CEE -#define GL_COLOR_ATTACHMENT15 0x8CEF -#define GL_DEPTH_ATTACHMENT 0x8D00 -#define GL_STENCIL_ATTACHMENT 0x8D20 -#define GL_FRAMEBUFFER 0x8D40 -#define GL_RENDERBUFFER 0x8D41 -#define GL_RENDERBUFFER_WIDTH 0x8D42 -#define GL_RENDERBUFFER_HEIGHT 0x8D43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 -#define GL_STENCIL_INDEX1 0x8D46 -#define GL_STENCIL_INDEX4 0x8D47 -#define GL_STENCIL_INDEX8 0x8D48 -#define GL_STENCIL_INDEX16 0x8D49 -#define GL_RENDERBUFFER_RED_SIZE 0x8D50 -#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 -#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 -#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 -#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 -#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 -#define GL_MAX_SAMPLES 0x8D57 -#endif - -#ifndef GL_ARB_framebuffer_sRGB -#define GL_FRAMEBUFFER_SRGB 0x8DB9 -#endif - -#ifndef GL_ARB_half_float_vertex -#define GL_HALF_FLOAT 0x140B -#endif - -#ifndef GL_ARB_map_buffer_range -#define GL_MAP_READ_BIT 0x0001 -#define GL_MAP_WRITE_BIT 0x0002 -#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 -#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 -#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 -#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 -#endif - -#ifndef GL_ARB_texture_compression_rgtc -#define GL_COMPRESSED_RED_RGTC1 0x8DBB -#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC -#define GL_COMPRESSED_RG_RGTC2 0x8DBD -#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE -#endif - -#ifndef GL_ARB_texture_rg -#define GL_RG 0x8227 -#define GL_RG_INTEGER 0x8228 -#define GL_R8 0x8229 -#define GL_R16 0x822A -#define GL_RG8 0x822B -#define GL_RG16 0x822C -#define GL_R16F 0x822D -#define GL_R32F 0x822E -#define GL_RG16F 0x822F -#define GL_RG32F 0x8230 -#define GL_R8I 0x8231 -#define GL_R8UI 0x8232 -#define GL_R16I 0x8233 -#define GL_R16UI 0x8234 -#define GL_R32I 0x8235 -#define GL_R32UI 0x8236 -#define GL_RG8I 0x8237 -#define GL_RG8UI 0x8238 -#define GL_RG16I 0x8239 -#define GL_RG16UI 0x823A -#define GL_RG32I 0x823B -#define GL_RG32UI 0x823C -#endif - -#ifndef GL_ARB_vertex_array_object -#define GL_VERTEX_ARRAY_BINDING 0x85B5 -#endif - -#ifndef GL_ARB_uniform_buffer_object -#define GL_UNIFORM_BUFFER 0x8A11 -#define GL_UNIFORM_BUFFER_BINDING 0x8A28 -#define GL_UNIFORM_BUFFER_START 0x8A29 -#define GL_UNIFORM_BUFFER_SIZE 0x8A2A -#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B -#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C -#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D -#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E -#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F -#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 -#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 -#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 -#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 -#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 -#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 -#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 -#define GL_UNIFORM_TYPE 0x8A37 -#define GL_UNIFORM_SIZE 0x8A38 -#define GL_UNIFORM_NAME_LENGTH 0x8A39 -#define GL_UNIFORM_BLOCK_INDEX 0x8A3A -#define GL_UNIFORM_OFFSET 0x8A3B -#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C -#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D -#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E -#define GL_UNIFORM_BLOCK_BINDING 0x8A3F -#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 -#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 -#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 -#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 -#define GL_INVALID_INDEX 0xFFFFFFFFu -#endif - -#ifndef GL_ARB_copy_buffer -#define GL_COPY_READ_BUFFER_BINDING 0x8F36 -#define GL_COPY_READ_BUFFER GL_COPY_READ_BUFFER_BINDING -#define GL_COPY_WRITE_BUFFER_BINDING 0x8F37 -#define GL_COPY_WRITE_BUFFER GL_COPY_WRITE_BUFFER_BINDING -#endif - -#ifndef GL_ARB_depth_clamp -#define GL_DEPTH_CLAMP 0x864F -#endif - -#ifndef GL_ARB_draw_elements_base_vertex -#endif - -#ifndef GL_ARB_fragment_coord_conventions -#endif - -#ifndef GL_ARB_provoking_vertex -#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C -#define GL_FIRST_VERTEX_CONVENTION 0x8E4D -#define GL_LAST_VERTEX_CONVENTION 0x8E4E -#define GL_PROVOKING_VERTEX 0x8E4F -#endif - -#ifndef GL_ARB_seamless_cube_map -#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F -#endif - -#ifndef GL_ARB_sync -#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 -#define GL_OBJECT_TYPE 0x9112 -#define GL_SYNC_CONDITION 0x9113 -#define GL_SYNC_STATUS 0x9114 -#define GL_SYNC_FLAGS 0x9115 -#define GL_SYNC_FENCE 0x9116 -#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 -#define GL_UNSIGNALED 0x9118 -#define GL_SIGNALED 0x9119 -#define GL_ALREADY_SIGNALED 0x911A -#define GL_TIMEOUT_EXPIRED 0x911B -#define GL_CONDITION_SATISFIED 0x911C -#define GL_WAIT_FAILED 0x911D -#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 -#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull -#endif - -#ifndef GL_ARB_texture_multisample -#define GL_SAMPLE_POSITION 0x8E50 -#define GL_SAMPLE_MASK 0x8E51 -#define GL_SAMPLE_MASK_VALUE 0x8E52 -#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 -#define GL_TEXTURE_2D_MULTISAMPLE 0x9100 -#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 -#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 -#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 -#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 -#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 -#define GL_TEXTURE_SAMPLES 0x9106 -#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 -#define GL_SAMPLER_2D_MULTISAMPLE 0x9108 -#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 -#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A -#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B -#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C -#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D -#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E -#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F -#define GL_MAX_INTEGER_SAMPLES 0x9110 -#endif - -#ifndef GL_ARB_vertex_array_bgra -/* reuse GL_BGRA */ -#endif - -#ifndef GL_ARB_draw_buffers_blend -#endif - -#ifndef GL_ARB_sample_shading -#define GL_SAMPLE_SHADING_ARB 0x8C36 -#define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37 -#endif - -#ifndef GL_ARB_texture_cube_map_array -#define GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A -#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B -#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C -#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D -#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E -#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F -#endif - -#ifndef GL_ARB_texture_gather -#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E -#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F -#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F -#endif - -#ifndef GL_ARB_texture_query_lod -#endif - -#ifndef GL_ARB_shading_language_include -#define GL_SHADER_INCLUDE_ARB 0x8DAE -#define GL_NAMED_STRING_LENGTH_ARB 0x8DE9 -#define GL_NAMED_STRING_TYPE_ARB 0x8DEA -#endif - -#ifndef GL_ARB_texture_compression_bptc -#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C -#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D -#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E -#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F -#endif - -#ifndef GL_ARB_blend_func_extended -#define GL_SRC1_COLOR 0x88F9 -/* reuse GL_SRC1_ALPHA */ -#define GL_ONE_MINUS_SRC1_COLOR 0x88FA -#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB -#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC -#endif - -#ifndef GL_ARB_explicit_attrib_location -#endif - -#ifndef GL_ARB_occlusion_query2 -#define GL_ANY_SAMPLES_PASSED 0x8C2F -#endif - -#ifndef GL_ARB_sampler_objects -#define GL_SAMPLER_BINDING 0x8919 -#endif - -#ifndef GL_ARB_shader_bit_encoding -#endif - -#ifndef GL_ARB_texture_rgb10_a2ui -#define GL_RGB10_A2UI 0x906F -#endif - -#ifndef GL_ARB_texture_swizzle -#define GL_TEXTURE_SWIZZLE_R 0x8E42 -#define GL_TEXTURE_SWIZZLE_G 0x8E43 -#define GL_TEXTURE_SWIZZLE_B 0x8E44 -#define GL_TEXTURE_SWIZZLE_A 0x8E45 -#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 -#endif - -#ifndef GL_ARB_timer_query -#define GL_TIME_ELAPSED 0x88BF -#define GL_TIMESTAMP 0x8E28 -#endif - -#ifndef GL_ARB_vertex_type_2_10_10_10_rev -/* reuse GL_UNSIGNED_INT_2_10_10_10_REV */ -#define GL_INT_2_10_10_10_REV 0x8D9F -#endif - -#ifndef GL_ARB_draw_indirect -#define GL_DRAW_INDIRECT_BUFFER 0x8F3F -#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 -#endif - -#ifndef GL_ARB_gpu_shader5 -#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F -#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A -#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B -#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C -#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D -/* reuse GL_MAX_VERTEX_STREAMS */ -#endif - -#ifndef GL_ARB_gpu_shader_fp64 -/* reuse GL_DOUBLE */ -#define GL_DOUBLE_VEC2 0x8FFC -#define GL_DOUBLE_VEC3 0x8FFD -#define GL_DOUBLE_VEC4 0x8FFE -#define GL_DOUBLE_MAT2 0x8F46 -#define GL_DOUBLE_MAT3 0x8F47 -#define GL_DOUBLE_MAT4 0x8F48 -#define GL_DOUBLE_MAT2x3 0x8F49 -#define GL_DOUBLE_MAT2x4 0x8F4A -#define GL_DOUBLE_MAT3x2 0x8F4B -#define GL_DOUBLE_MAT3x4 0x8F4C -#define GL_DOUBLE_MAT4x2 0x8F4D -#define GL_DOUBLE_MAT4x3 0x8F4E -#endif - -#ifndef GL_ARB_shader_subroutine -#define GL_ACTIVE_SUBROUTINES 0x8DE5 -#define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 -#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 -#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 -#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 -#define GL_MAX_SUBROUTINES 0x8DE7 -#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 -#define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A -#define GL_COMPATIBLE_SUBROUTINES 0x8E4B -/* reuse GL_UNIFORM_SIZE */ -/* reuse GL_UNIFORM_NAME_LENGTH */ -#endif - -#ifndef GL_ARB_tessellation_shader -#define GL_PATCHES 0x000E -#define GL_PATCH_VERTICES 0x8E72 -#define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73 -#define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74 -#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75 -#define GL_TESS_GEN_MODE 0x8E76 -#define GL_TESS_GEN_SPACING 0x8E77 -#define GL_TESS_GEN_VERTEX_ORDER 0x8E78 -#define GL_TESS_GEN_POINT_MODE 0x8E79 -/* reuse GL_TRIANGLES */ -/* reuse GL_QUADS */ -#define GL_ISOLINES 0x8E7A -/* reuse GL_EQUAL */ -#define GL_FRACTIONAL_ODD 0x8E7B -#define GL_FRACTIONAL_EVEN 0x8E7C -/* reuse GL_CCW */ -/* reuse GL_CW */ -#define GL_MAX_PATCH_VERTICES 0x8E7D -#define GL_MAX_TESS_GEN_LEVEL 0x8E7E -#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F -#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80 -#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81 -#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82 -#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83 -#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84 -#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85 -#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86 -#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 -#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A -#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C -#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D -#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E -#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F -#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 -#define GL_TESS_EVALUATION_SHADER 0x8E87 -#define GL_TESS_CONTROL_SHADER 0x8E88 -#endif - -#ifndef GL_ARB_texture_buffer_object_rgb32 -/* reuse GL_RGB32F */ -/* reuse GL_RGB32UI */ -/* reuse GL_RGB32I */ -#endif - -#ifndef GL_ARB_transform_feedback2 -#define GL_TRANSFORM_FEEDBACK 0x8E22 -#define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23 -#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED GL_TRANSFORM_FEEDBACK_PAUSED -#define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24 -#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE GL_TRANSFORM_FEEDBACK_ACTIVE -#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 -#endif - -#ifndef GL_ARB_transform_feedback3 -#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 -#define GL_MAX_VERTEX_STREAMS 0x8E71 -#endif - -#ifndef GL_ARB_ES2_compatibility -#define GL_FIXED 0x140C -#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B -#define GL_LOW_FLOAT 0x8DF0 -#define GL_MEDIUM_FLOAT 0x8DF1 -#define GL_HIGH_FLOAT 0x8DF2 -#define GL_LOW_INT 0x8DF3 -#define GL_MEDIUM_INT 0x8DF4 -#define GL_HIGH_INT 0x8DF5 -#define GL_SHADER_COMPILER 0x8DFA -#define GL_SHADER_BINARY_FORMATS 0x8DF8 -#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 -#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB -#define GL_MAX_VARYING_VECTORS 0x8DFC -#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD -#define GL_RGB565 0x8D62 -#endif - -#ifndef GL_ARB_get_program_binary -#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 -#define GL_PROGRAM_BINARY_LENGTH 0x8741 -#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE -#define GL_PROGRAM_BINARY_FORMATS 0x87FF -#endif - -#ifndef GL_ARB_separate_shader_objects -#define GL_VERTEX_SHADER_BIT 0x00000001 -#define GL_FRAGMENT_SHADER_BIT 0x00000002 -#define GL_GEOMETRY_SHADER_BIT 0x00000004 -#define GL_TESS_CONTROL_SHADER_BIT 0x00000008 -#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010 -#define GL_ALL_SHADER_BITS 0xFFFFFFFF -#define GL_PROGRAM_SEPARABLE 0x8258 -#define GL_ACTIVE_PROGRAM 0x8259 -#define GL_PROGRAM_PIPELINE_BINDING 0x825A -#endif - -#ifndef GL_ARB_shader_precision -#endif - -#ifndef GL_ARB_vertex_attrib_64bit -/* reuse GL_RGB32I */ -/* reuse GL_DOUBLE_VEC2 */ -/* reuse GL_DOUBLE_VEC3 */ -/* reuse GL_DOUBLE_VEC4 */ -/* reuse GL_DOUBLE_MAT2 */ -/* reuse GL_DOUBLE_MAT3 */ -/* reuse GL_DOUBLE_MAT4 */ -/* reuse GL_DOUBLE_MAT2x3 */ -/* reuse GL_DOUBLE_MAT2x4 */ -/* reuse GL_DOUBLE_MAT3x2 */ -/* reuse GL_DOUBLE_MAT3x4 */ -/* reuse GL_DOUBLE_MAT4x2 */ -/* reuse GL_DOUBLE_MAT4x3 */ -#endif - -#ifndef GL_ARB_viewport_array -/* reuse GL_SCISSOR_BOX */ -/* reuse GL_VIEWPORT */ -/* reuse GL_DEPTH_RANGE */ -/* reuse GL_SCISSOR_TEST */ -#define GL_MAX_VIEWPORTS 0x825B -#define GL_VIEWPORT_SUBPIXEL_BITS 0x825C -#define GL_VIEWPORT_BOUNDS_RANGE 0x825D -#define GL_LAYER_PROVOKING_VERTEX 0x825E -#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F -#define GL_UNDEFINED_VERTEX 0x8260 -/* reuse GL_FIRST_VERTEX_CONVENTION */ -/* reuse GL_LAST_VERTEX_CONVENTION */ -/* reuse GL_PROVOKING_VERTEX */ -#endif - -#ifndef GL_ARB_cl_event -#define GL_SYNC_CL_EVENT_ARB 0x8240 -#define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241 -#endif - -#ifndef GL_ARB_debug_output -#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242 -#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243 -#define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244 -#define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245 -#define GL_DEBUG_SOURCE_API_ARB 0x8246 -#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247 -#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248 -#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249 -#define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A -#define GL_DEBUG_SOURCE_OTHER_ARB 0x824B -#define GL_DEBUG_TYPE_ERROR_ARB 0x824C -#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D -#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E -#define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F -#define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 -#define GL_DEBUG_TYPE_OTHER_ARB 0x8251 -#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143 -#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145 -#define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147 -#define GL_DEBUG_SEVERITY_LOW_ARB 0x9148 -#endif - -#ifndef GL_ARB_robustness -/* reuse GL_NO_ERROR */ -#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 -#define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 -#define GL_GUILTY_CONTEXT_RESET_ARB 0x8253 -#define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 -#define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 -#define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 -#define GL_NO_RESET_NOTIFICATION_ARB 0x8261 -#endif - -#ifndef GL_ARB_shader_stencil_export -#endif - -#ifndef GL_ARB_base_instance -#endif - -#ifndef GL_ARB_shading_language_420pack -#endif - -#ifndef GL_ARB_transform_feedback_instanced -#endif - -#ifndef GL_ARB_compressed_texture_pixel_storage -#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127 -#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128 -#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129 -#define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A -#define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B -#define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C -#define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D -#define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E -#endif - -#ifndef GL_ARB_conservative_depth -#endif - -#ifndef GL_ARB_internalformat_query -#define GL_NUM_SAMPLE_COUNTS 0x9380 -#endif - -#ifndef GL_ARB_map_buffer_alignment -#define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC -#endif - -#ifndef GL_ARB_shader_atomic_counters -#define GL_ATOMIC_COUNTER_BUFFER 0x92C0 -#define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1 -#define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2 -#define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3 -#define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4 -#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5 -#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB -#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC -#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD -#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE -#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF -#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0 -#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1 -#define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2 -#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3 -#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4 -#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5 -#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6 -#define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7 -#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8 -#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC -#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9 -#define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA -#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB -#endif - -#ifndef GL_ARB_shader_image_load_store -#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001 -#define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002 -#define GL_UNIFORM_BARRIER_BIT 0x00000004 -#define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008 -#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020 -#define GL_COMMAND_BARRIER_BIT 0x00000040 -#define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080 -#define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100 -#define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200 -#define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400 -#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800 -#define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000 -#define GL_ALL_BARRIER_BITS 0xFFFFFFFF -#define GL_MAX_IMAGE_UNITS 0x8F38 -#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39 -#define GL_IMAGE_BINDING_NAME 0x8F3A -#define GL_IMAGE_BINDING_LEVEL 0x8F3B -#define GL_IMAGE_BINDING_LAYERED 0x8F3C -#define GL_IMAGE_BINDING_LAYER 0x8F3D -#define GL_IMAGE_BINDING_ACCESS 0x8F3E -#define GL_IMAGE_1D 0x904C -#define GL_IMAGE_2D 0x904D -#define GL_IMAGE_3D 0x904E -#define GL_IMAGE_2D_RECT 0x904F -#define GL_IMAGE_CUBE 0x9050 -#define GL_IMAGE_BUFFER 0x9051 -#define GL_IMAGE_1D_ARRAY 0x9052 -#define GL_IMAGE_2D_ARRAY 0x9053 -#define GL_IMAGE_CUBE_MAP_ARRAY 0x9054 -#define GL_IMAGE_2D_MULTISAMPLE 0x9055 -#define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056 -#define GL_INT_IMAGE_1D 0x9057 -#define GL_INT_IMAGE_2D 0x9058 -#define GL_INT_IMAGE_3D 0x9059 -#define GL_INT_IMAGE_2D_RECT 0x905A -#define GL_INT_IMAGE_CUBE 0x905B -#define GL_INT_IMAGE_BUFFER 0x905C -#define GL_INT_IMAGE_1D_ARRAY 0x905D -#define GL_INT_IMAGE_2D_ARRAY 0x905E -#define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F -#define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060 -#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061 -#define GL_UNSIGNED_INT_IMAGE_1D 0x9062 -#define GL_UNSIGNED_INT_IMAGE_2D 0x9063 -#define GL_UNSIGNED_INT_IMAGE_3D 0x9064 -#define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065 -#define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066 -#define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067 -#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068 -#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069 -#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C -#define GL_MAX_IMAGE_SAMPLES 0x906D -#define GL_IMAGE_BINDING_FORMAT 0x906E -#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7 -#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8 -#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9 -#define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA -#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB -#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC -#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD -#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE -#define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF -#endif - -#ifndef GL_ARB_shading_language_packing -#endif - -#ifndef GL_ARB_texture_storage -#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F -#endif - -#ifndef GL_KHR_texture_compression_astc_ldr -#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 -#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 -#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 -#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 -#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 -#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 -#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 -#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 -#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 -#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 -#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA -#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB -#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC -#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD -#endif - -#ifndef GL_KHR_debug -#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 -#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 -#define GL_DEBUG_CALLBACK_FUNCTION 0x8244 -#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 -#define GL_DEBUG_SOURCE_API 0x8246 -#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 -#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 -#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 -#define GL_DEBUG_SOURCE_APPLICATION 0x824A -#define GL_DEBUG_SOURCE_OTHER 0x824B -#define GL_DEBUG_TYPE_ERROR 0x824C -#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D -#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E -#define GL_DEBUG_TYPE_PORTABILITY 0x824F -#define GL_DEBUG_TYPE_PERFORMANCE 0x8250 -#define GL_DEBUG_TYPE_OTHER 0x8251 -#define GL_DEBUG_TYPE_MARKER 0x8268 -#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 -#define GL_DEBUG_TYPE_POP_GROUP 0x826A -#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B -#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C -#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D -#define GL_BUFFER 0x82E0 -#define GL_SHADER 0x82E1 -#define GL_PROGRAM 0x82E2 -#define GL_QUERY 0x82E3 -#define GL_PROGRAM_PIPELINE 0x82E4 -#define GL_SAMPLER 0x82E6 -#define GL_DISPLAY_LIST 0x82E7 -/* DISPLAY_LIST used in compatibility profile only */ -#define GL_MAX_LABEL_LENGTH 0x82E8 -#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 -#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES 0x9145 -#define GL_DEBUG_SEVERITY_HIGH 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM 0x9147 -#define GL_DEBUG_SEVERITY_LOW 0x9148 -#define GL_DEBUG_OUTPUT 0x92E0 -#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 -/* reuse GL_STACK_UNDERFLOW */ -/* reuse GL_STACK_OVERFLOW */ -#endif - -#ifndef GL_ARB_arrays_of_arrays -#endif - -#ifndef GL_ARB_clear_buffer_object -#endif - -#ifndef GL_ARB_compute_shader -#define GL_COMPUTE_SHADER 0x91B9 -#define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB -#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC -#define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD -#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262 -#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263 -#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264 -#define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265 -#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266 -#define GL_MAX_COMPUTE_LOCAL_INVOCATIONS 0x90EB -#define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE -#define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF -#define GL_COMPUTE_LOCAL_WORK_SIZE 0x8267 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED -#define GL_DISPATCH_INDIRECT_BUFFER 0x90EE -#define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF -#define GL_COMPUTE_SHADER_BIT 0x00000020 -#endif - -#ifndef GL_ARB_copy_image -#endif - -#ifndef GL_ARB_texture_view -#define GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB -#define GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC -#define GL_TEXTURE_VIEW_MIN_LAYER 0x82DD -#define GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE -#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF -#endif - -#ifndef GL_ARB_vertex_attrib_binding -#define GL_VERTEX_ATTRIB_BINDING 0x82D4 -#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5 -#define GL_VERTEX_BINDING_DIVISOR 0x82D6 -#define GL_VERTEX_BINDING_OFFSET 0x82D7 -#define GL_VERTEX_BINDING_STRIDE 0x82D8 -#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9 -#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA -#endif - -#ifndef GL_ARB_robustness_isolation -#endif - -#ifndef GL_ARB_ES3_compatibility -#define GL_COMPRESSED_RGB8_ETC2 0x9274 -#define GL_COMPRESSED_SRGB8_ETC2 0x9275 -#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276 -#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277 -#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278 -#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279 -#define GL_COMPRESSED_R11_EAC 0x9270 -#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271 -#define GL_COMPRESSED_RG11_EAC 0x9272 -#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273 -#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 -#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A -#define GL_MAX_ELEMENT_INDEX 0x8D6B -#endif - -#ifndef GL_ARB_explicit_uniform_location -#define GL_MAX_UNIFORM_LOCATIONS 0x826E -#endif - -#ifndef GL_ARB_fragment_layer_viewport -#endif - -#ifndef GL_ARB_framebuffer_no_attachments -#define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310 -#define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311 -#define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312 -#define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313 -#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314 -#define GL_MAX_FRAMEBUFFER_WIDTH 0x9315 -#define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316 -#define GL_MAX_FRAMEBUFFER_LAYERS 0x9317 -#define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318 -#endif - -#ifndef GL_ARB_internalformat_query2 -/* reuse GL_IMAGE_FORMAT_COMPATIBILITY_TYPE */ -/* reuse GL_NUM_SAMPLE_COUNTS */ -/* reuse GL_RENDERBUFFER */ -/* reuse GL_SAMPLES */ -/* reuse GL_TEXTURE_1D */ -/* reuse GL_TEXTURE_1D_ARRAY */ -/* reuse GL_TEXTURE_2D */ -/* reuse GL_TEXTURE_2D_ARRAY */ -/* reuse GL_TEXTURE_3D */ -/* reuse GL_TEXTURE_CUBE_MAP */ -/* reuse GL_TEXTURE_CUBE_MAP_ARRAY */ -/* reuse GL_TEXTURE_RECTANGLE */ -/* reuse GL_TEXTURE_BUFFER */ -/* reuse GL_TEXTURE_2D_MULTISAMPLE */ -/* reuse GL_TEXTURE_2D_MULTISAMPLE_ARRAY */ -/* reuse GL_TEXTURE_COMPRESSED */ -#define GL_INTERNALFORMAT_SUPPORTED 0x826F -#define GL_INTERNALFORMAT_PREFERRED 0x8270 -#define GL_INTERNALFORMAT_RED_SIZE 0x8271 -#define GL_INTERNALFORMAT_GREEN_SIZE 0x8272 -#define GL_INTERNALFORMAT_BLUE_SIZE 0x8273 -#define GL_INTERNALFORMAT_ALPHA_SIZE 0x8274 -#define GL_INTERNALFORMAT_DEPTH_SIZE 0x8275 -#define GL_INTERNALFORMAT_STENCIL_SIZE 0x8276 -#define GL_INTERNALFORMAT_SHARED_SIZE 0x8277 -#define GL_INTERNALFORMAT_RED_TYPE 0x8278 -#define GL_INTERNALFORMAT_GREEN_TYPE 0x8279 -#define GL_INTERNALFORMAT_BLUE_TYPE 0x827A -#define GL_INTERNALFORMAT_ALPHA_TYPE 0x827B -#define GL_INTERNALFORMAT_DEPTH_TYPE 0x827C -#define GL_INTERNALFORMAT_STENCIL_TYPE 0x827D -#define GL_MAX_WIDTH 0x827E -#define GL_MAX_HEIGHT 0x827F -#define GL_MAX_DEPTH 0x8280 -#define GL_MAX_LAYERS 0x8281 -#define GL_MAX_COMBINED_DIMENSIONS 0x8282 -#define GL_COLOR_COMPONENTS 0x8283 -#define GL_DEPTH_COMPONENTS 0x8284 -#define GL_STENCIL_COMPONENTS 0x8285 -#define GL_COLOR_RENDERABLE 0x8286 -#define GL_DEPTH_RENDERABLE 0x8287 -#define GL_STENCIL_RENDERABLE 0x8288 -#define GL_FRAMEBUFFER_RENDERABLE 0x8289 -#define GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A -#define GL_FRAMEBUFFER_BLEND 0x828B -#define GL_READ_PIXELS 0x828C -#define GL_READ_PIXELS_FORMAT 0x828D -#define GL_READ_PIXELS_TYPE 0x828E -#define GL_TEXTURE_IMAGE_FORMAT 0x828F -#define GL_TEXTURE_IMAGE_TYPE 0x8290 -#define GL_GET_TEXTURE_IMAGE_FORMAT 0x8291 -#define GL_GET_TEXTURE_IMAGE_TYPE 0x8292 -#define GL_MIPMAP 0x8293 -#define GL_MANUAL_GENERATE_MIPMAP 0x8294 -#define GL_AUTO_GENERATE_MIPMAP 0x8295 -#define GL_COLOR_ENCODING 0x8296 -#define GL_SRGB_READ 0x8297 -#define GL_SRGB_WRITE 0x8298 -#define GL_SRGB_DECODE_ARB 0x8299 -#define GL_FILTER 0x829A -#define GL_VERTEX_TEXTURE 0x829B -#define GL_TESS_CONTROL_TEXTURE 0x829C -#define GL_TESS_EVALUATION_TEXTURE 0x829D -#define GL_GEOMETRY_TEXTURE 0x829E -#define GL_FRAGMENT_TEXTURE 0x829F -#define GL_COMPUTE_TEXTURE 0x82A0 -#define GL_TEXTURE_SHADOW 0x82A1 -#define GL_TEXTURE_GATHER 0x82A2 -#define GL_TEXTURE_GATHER_SHADOW 0x82A3 -#define GL_SHADER_IMAGE_LOAD 0x82A4 -#define GL_SHADER_IMAGE_STORE 0x82A5 -#define GL_SHADER_IMAGE_ATOMIC 0x82A6 -#define GL_IMAGE_TEXEL_SIZE 0x82A7 -#define GL_IMAGE_COMPATIBILITY_CLASS 0x82A8 -#define GL_IMAGE_PIXEL_FORMAT 0x82A9 -#define GL_IMAGE_PIXEL_TYPE 0x82AA -#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC -#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD -#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE -#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF -#define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1 -#define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2 -#define GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3 -#define GL_CLEAR_BUFFER 0x82B4 -#define GL_TEXTURE_VIEW 0x82B5 -#define GL_VIEW_COMPATIBILITY_CLASS 0x82B6 -#define GL_FULL_SUPPORT 0x82B7 -#define GL_CAVEAT_SUPPORT 0x82B8 -#define GL_IMAGE_CLASS_4_X_32 0x82B9 -#define GL_IMAGE_CLASS_2_X_32 0x82BA -#define GL_IMAGE_CLASS_1_X_32 0x82BB -#define GL_IMAGE_CLASS_4_X_16 0x82BC -#define GL_IMAGE_CLASS_2_X_16 0x82BD -#define GL_IMAGE_CLASS_1_X_16 0x82BE -#define GL_IMAGE_CLASS_4_X_8 0x82BF -#define GL_IMAGE_CLASS_2_X_8 0x82C0 -#define GL_IMAGE_CLASS_1_X_8 0x82C1 -#define GL_IMAGE_CLASS_11_11_10 0x82C2 -#define GL_IMAGE_CLASS_10_10_10_2 0x82C3 -#define GL_VIEW_CLASS_128_BITS 0x82C4 -#define GL_VIEW_CLASS_96_BITS 0x82C5 -#define GL_VIEW_CLASS_64_BITS 0x82C6 -#define GL_VIEW_CLASS_48_BITS 0x82C7 -#define GL_VIEW_CLASS_32_BITS 0x82C8 -#define GL_VIEW_CLASS_24_BITS 0x82C9 -#define GL_VIEW_CLASS_16_BITS 0x82CA -#define GL_VIEW_CLASS_8_BITS 0x82CB -#define GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC -#define GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD -#define GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE -#define GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF -#define GL_VIEW_CLASS_RGTC1_RED 0x82D0 -#define GL_VIEW_CLASS_RGTC2_RG 0x82D1 -#define GL_VIEW_CLASS_BPTC_UNORM 0x82D2 -#define GL_VIEW_CLASS_BPTC_FLOAT 0x82D3 -#endif - -#ifndef GL_ARB_invalidate_subdata -#endif - -#ifndef GL_ARB_multi_draw_indirect -#endif - -#ifndef GL_ARB_program_interface_query -#define GL_UNIFORM 0x92E1 -#define GL_UNIFORM_BLOCK 0x92E2 -#define GL_PROGRAM_INPUT 0x92E3 -#define GL_PROGRAM_OUTPUT 0x92E4 -#define GL_BUFFER_VARIABLE 0x92E5 -#define GL_SHADER_STORAGE_BLOCK 0x92E6 -/* reuse GL_ATOMIC_COUNTER_BUFFER */ -#define GL_VERTEX_SUBROUTINE 0x92E8 -#define GL_TESS_CONTROL_SUBROUTINE 0x92E9 -#define GL_TESS_EVALUATION_SUBROUTINE 0x92EA -#define GL_GEOMETRY_SUBROUTINE 0x92EB -#define GL_FRAGMENT_SUBROUTINE 0x92EC -#define GL_COMPUTE_SUBROUTINE 0x92ED -#define GL_VERTEX_SUBROUTINE_UNIFORM 0x92EE -#define GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF -#define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0 -#define GL_GEOMETRY_SUBROUTINE_UNIFORM 0x92F1 -#define GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2 -#define GL_COMPUTE_SUBROUTINE_UNIFORM 0x92F3 -#define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4 -#define GL_ACTIVE_RESOURCES 0x92F5 -#define GL_MAX_NAME_LENGTH 0x92F6 -#define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7 -#define GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8 -#define GL_NAME_LENGTH 0x92F9 -#define GL_TYPE 0x92FA -#define GL_ARRAY_SIZE 0x92FB -#define GL_OFFSET 0x92FC -#define GL_BLOCK_INDEX 0x92FD -#define GL_ARRAY_STRIDE 0x92FE -#define GL_MATRIX_STRIDE 0x92FF -#define GL_IS_ROW_MAJOR 0x9300 -#define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301 -#define GL_BUFFER_BINDING 0x9302 -#define GL_BUFFER_DATA_SIZE 0x9303 -#define GL_NUM_ACTIVE_VARIABLES 0x9304 -#define GL_ACTIVE_VARIABLES 0x9305 -#define GL_REFERENCED_BY_VERTEX_SHADER 0x9306 -#define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307 -#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308 -#define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309 -#define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A -#define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B -#define GL_TOP_LEVEL_ARRAY_SIZE 0x930C -#define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D -#define GL_LOCATION 0x930E -#define GL_LOCATION_INDEX 0x930F -#define GL_IS_PER_PATCH 0x92E7 -/* reuse GL_NUM_COMPATIBLE_SUBROUTINES */ -/* reuse GL_COMPATIBLE_SUBROUTINES */ -#endif - -#ifndef GL_ARB_robust_buffer_access_behavior -#endif - -#ifndef GL_ARB_shader_image_size -#endif - -#ifndef GL_ARB_shader_storage_buffer_object -#define GL_SHADER_STORAGE_BUFFER 0x90D2 -#define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3 -#define GL_SHADER_STORAGE_BUFFER_START 0x90D4 -#define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5 -#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6 -#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7 -#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8 -#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9 -#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA -#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB -#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC -#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD -#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE -#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF -#define GL_SHADER_STORAGE_BARRIER_BIT 0x2000 -#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS -/* reuse GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS */ -#endif - -#ifndef GL_ARB_stencil_texturing -#define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA -#endif - -#ifndef GL_ARB_texture_buffer_range -#define GL_TEXTURE_BUFFER_OFFSET 0x919D -#define GL_TEXTURE_BUFFER_SIZE 0x919E -#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F -#endif - -#ifndef GL_ARB_texture_query_levels -#endif - -#ifndef GL_ARB_texture_storage_multisample -#endif - - -/*************************************************************/ - -#include -#ifndef GL_VERSION_2_0 -/* GL type for program/shader text */ -typedef char GLchar; -#endif - -#ifndef GL_VERSION_1_5 -/* GL types for handling large vertex buffer objects */ -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -#endif - -#ifndef GL_ARB_vertex_buffer_object -/* GL types for handling large vertex buffer objects */ -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -#endif - -#ifndef GL_ARB_shader_objects -/* GL types for program/shader text and shader object handles */ -typedef char GLcharARB; -typedef unsigned int GLhandleARB; -#endif - -/* GL type for "half" precision (s10e5) float data in host memory */ -#ifndef GL_ARB_half_float_pixel -typedef unsigned short GLhalfARB; -#endif - -#ifndef GL_NV_half_float -typedef unsigned short GLhalfNV; -#endif - -#ifndef GLEXT_64_TYPES_DEFINED -/* This code block is duplicated in glxext.h, so must be protected */ -#define GLEXT_64_TYPES_DEFINED -/* Define int32_t, int64_t, and uint64_t types for UST/MSC */ -/* (as used in the GL_EXT_timer_query extension). */ -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -#include -#elif defined(__sun__) || defined(__digital__) -#include -#if defined(__STDC__) -#if defined(__arch64__) || defined(_LP64) -typedef long int int64_t; -typedef unsigned long int uint64_t; -#else -typedef long long int int64_t; -typedef unsigned long long int uint64_t; -#endif /* __arch64__ */ -#endif /* __STDC__ */ -#elif defined( __VMS ) || defined(__sgi) -#include -#elif defined(__SCO__) || defined(__USLC__) -#include -#elif defined(__UNIXOS2__) || defined(__SOL64__) -typedef long int int32_t; -typedef long long int int64_t; -typedef unsigned long long int uint64_t; -#elif defined(_WIN32) && defined(__GNUC__) -#include -#elif defined(_WIN32) -typedef __int32 int32_t; -typedef __int64 int64_t; -typedef unsigned __int64 uint64_t; -#else -/* Fallback if nothing above works */ -#include -#endif -#endif - -#ifndef GL_EXT_timer_query -typedef int64_t GLint64EXT; -typedef uint64_t GLuint64EXT; -#endif - -#ifndef GL_ARB_sync -typedef int64_t GLint64; -typedef uint64_t GLuint64; -typedef struct __GLsync *GLsync; -#endif - -#ifndef GL_ARB_cl_event -/* These incomplete types let us declare types compatible with OpenCL's cl_context and cl_event */ -struct _cl_context; -struct _cl_event; -#endif - -#ifndef GL_ARB_debug_output -typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam); -#endif - -#ifndef GL_AMD_debug_output -typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam); -#endif - -#ifndef GL_KHR_debug -typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam); -#endif - -#ifndef GL_NV_vdpau_interop -typedef GLintptr GLvdpauSurfaceNV; -#endif - -#ifndef GL_VERSION_1_0 -#define GL_VERSION_1_0 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glCullFace (GLenum mode); -GLAPI void APIENTRY glFrontFace (GLenum mode); -GLAPI void APIENTRY glHint (GLenum target, GLenum mode); -GLAPI void APIENTRY glLineWidth (GLfloat width); -GLAPI void APIENTRY glPointSize (GLfloat size); -GLAPI void APIENTRY glPolygonMode (GLenum face, GLenum mode); -GLAPI void APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param); -GLAPI void APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glTexImage1D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glDrawBuffer (GLenum mode); -GLAPI void APIENTRY glClear (GLbitfield mask); -GLAPI void APIENTRY glClearColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -GLAPI void APIENTRY glClearStencil (GLint s); -GLAPI void APIENTRY glClearDepth (GLdouble depth); -GLAPI void APIENTRY glStencilMask (GLuint mask); -GLAPI void APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -GLAPI void APIENTRY glDepthMask (GLboolean flag); -GLAPI void APIENTRY glDisable (GLenum cap); -GLAPI void APIENTRY glEnable (GLenum cap); -GLAPI void APIENTRY glFinish (void); -GLAPI void APIENTRY glFlush (void); -GLAPI void APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor); -GLAPI void APIENTRY glLogicOp (GLenum opcode); -GLAPI void APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask); -GLAPI void APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass); -GLAPI void APIENTRY glDepthFunc (GLenum func); -GLAPI void APIENTRY glPixelStoref (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPixelStorei (GLenum pname, GLint param); -GLAPI void APIENTRY glReadBuffer (GLenum mode); -GLAPI void APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels); -GLAPI void APIENTRY glGetBooleanv (GLenum pname, GLboolean *params); -GLAPI void APIENTRY glGetDoublev (GLenum pname, GLdouble *params); -GLAPI GLenum APIENTRY glGetError (void); -GLAPI void APIENTRY glGetFloatv (GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetIntegerv (GLenum pname, GLint *params); -GLAPI const GLubyte * APIENTRY glGetString (GLenum name); -GLAPI void APIENTRY glGetTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); -GLAPI void APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetTexLevelParameterfv (GLenum target, GLint level, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetTexLevelParameteriv (GLenum target, GLint level, GLenum pname, GLint *params); -GLAPI GLboolean APIENTRY glIsEnabled (GLenum cap); -GLAPI void APIENTRY glDepthRange (GLdouble near, GLdouble far); -GLAPI void APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCULLFACEPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLFRONTFACEPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLHINTPROC) (GLenum target, GLenum mode); -typedef void (APIENTRYP PFNGLLINEWIDTHPROC) (GLfloat width); -typedef void (APIENTRYP PFNGLPOINTSIZEPROC) (GLfloat size); -typedef void (APIENTRYP PFNGLPOLYGONMODEPROC) (GLenum face, GLenum mode); -typedef void (APIENTRYP PFNGLSCISSORPROC) (GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLTEXPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLTEXPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLTEXPARAMETERIPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLTEXPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLTEXIMAGE1DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXIMAGE2DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLDRAWBUFFERPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLCLEARPROC) (GLbitfield mask); -typedef void (APIENTRYP PFNGLCLEARCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -typedef void (APIENTRYP PFNGLCLEARSTENCILPROC) (GLint s); -typedef void (APIENTRYP PFNGLCLEARDEPTHPROC) (GLdouble depth); -typedef void (APIENTRYP PFNGLSTENCILMASKPROC) (GLuint mask); -typedef void (APIENTRYP PFNGLCOLORMASKPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -typedef void (APIENTRYP PFNGLDEPTHMASKPROC) (GLboolean flag); -typedef void (APIENTRYP PFNGLDISABLEPROC) (GLenum cap); -typedef void (APIENTRYP PFNGLENABLEPROC) (GLenum cap); -typedef void (APIENTRYP PFNGLFINISHPROC) (void); -typedef void (APIENTRYP PFNGLFLUSHPROC) (void); -typedef void (APIENTRYP PFNGLBLENDFUNCPROC) (GLenum sfactor, GLenum dfactor); -typedef void (APIENTRYP PFNGLLOGICOPPROC) (GLenum opcode); -typedef void (APIENTRYP PFNGLSTENCILFUNCPROC) (GLenum func, GLint ref, GLuint mask); -typedef void (APIENTRYP PFNGLSTENCILOPPROC) (GLenum fail, GLenum zfail, GLenum zpass); -typedef void (APIENTRYP PFNGLDEPTHFUNCPROC) (GLenum func); -typedef void (APIENTRYP PFNGLPIXELSTOREFPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPIXELSTOREIPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLREADBUFFERPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLREADPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels); -typedef void (APIENTRYP PFNGLGETBOOLEANVPROC) (GLenum pname, GLboolean *params); -typedef void (APIENTRYP PFNGLGETDOUBLEVPROC) (GLenum pname, GLdouble *params); -typedef GLenum (APIENTRYP PFNGLGETERRORPROC) (void); -typedef void (APIENTRYP PFNGLGETFLOATVPROC) (GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETINTEGERVPROC) (GLenum pname, GLint *params); -typedef const GLubyte * (APIENTRYP PFNGLGETSTRINGPROC) (GLenum name); -typedef void (APIENTRYP PFNGLGETTEXIMAGEPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERFVPROC) (GLenum target, GLint level, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERIVPROC) (GLenum target, GLint level, GLenum pname, GLint *params); -typedef GLboolean (APIENTRYP PFNGLISENABLEDPROC) (GLenum cap); -typedef void (APIENTRYP PFNGLDEPTHRANGEPROC) (GLdouble near, GLdouble far); -typedef void (APIENTRYP PFNGLVIEWPORTPROC) (GLint x, GLint y, GLsizei width, GLsizei height); -#endif - -#ifndef GL_VERSION_1_1 -#define GL_VERSION_1_1 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count); -GLAPI void APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices); -GLAPI void APIENTRY glGetPointerv (GLenum pname, GLvoid* *params); -GLAPI void APIENTRY glPolygonOffset (GLfloat factor, GLfloat units); -GLAPI void APIENTRY glCopyTexImage1D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -GLAPI void APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLAPI void APIENTRY glCopyTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glBindTexture (GLenum target, GLuint texture); -GLAPI void APIENTRY glDeleteTextures (GLsizei n, const GLuint *textures); -GLAPI void APIENTRY glGenTextures (GLsizei n, GLuint *textures); -GLAPI GLboolean APIENTRY glIsTexture (GLuint texture); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWARRAYSPROC) (GLenum mode, GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLDRAWELEMENTSPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices); -typedef void (APIENTRYP PFNGLGETPOINTERVPROC) (GLenum pname, GLvoid* *params); -typedef void (APIENTRYP PFNGLPOLYGONOFFSETPROC) (GLfloat factor, GLfloat units); -typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLBINDTEXTUREPROC) (GLenum target, GLuint texture); -typedef void (APIENTRYP PFNGLDELETETEXTURESPROC) (GLsizei n, const GLuint *textures); -typedef void (APIENTRYP PFNGLGENTEXTURESPROC) (GLsizei n, GLuint *textures); -typedef GLboolean (APIENTRYP PFNGLISTEXTUREPROC) (GLuint texture); -#endif - -#ifndef GL_VERSION_1_2 -#define GL_VERSION_1_2 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -GLAPI void APIENTRY glBlendEquation (GLenum mode); -GLAPI void APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); -GLAPI void APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); -typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#endif - -#ifndef GL_VERSION_1_3 -#define GL_VERSION_1_3 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glActiveTexture (GLenum texture); -GLAPI void APIENTRY glSampleCoverage (GLfloat value, GLboolean invert); -GLAPI void APIENTRY glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glGetCompressedTexImage (GLenum target, GLint level, GLvoid *img); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img); -#endif - -#ifndef GL_VERSION_1_4 -#define GL_VERSION_1_4 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -GLAPI void APIENTRY glMultiDrawArrays (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); -GLAPI void APIENTRY glMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei drawcount); -GLAPI void APIENTRY glPointParameterf (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPointParameterfv (GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glPointParameteri (GLenum pname, GLint param); -GLAPI void APIENTRY glPointParameteriv (GLenum pname, const GLint *params); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei drawcount); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params); -#endif - -#ifndef GL_VERSION_1_5 -#define GL_VERSION_1_5 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glGenQueries (GLsizei n, GLuint *ids); -GLAPI void APIENTRY glDeleteQueries (GLsizei n, const GLuint *ids); -GLAPI GLboolean APIENTRY glIsQuery (GLuint id); -GLAPI void APIENTRY glBeginQuery (GLenum target, GLuint id); -GLAPI void APIENTRY glEndQuery (GLenum target); -GLAPI void APIENTRY glGetQueryiv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetQueryObjectiv (GLuint id, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params); -GLAPI void APIENTRY glBindBuffer (GLenum target, GLuint buffer); -GLAPI void APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers); -GLAPI void APIENTRY glGenBuffers (GLsizei n, GLuint *buffers); -GLAPI GLboolean APIENTRY glIsBuffer (GLuint buffer); -GLAPI void APIENTRY glBufferData (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage); -GLAPI void APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data); -GLAPI void APIENTRY glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data); -GLAPI GLvoid* APIENTRY glMapBuffer (GLenum target, GLenum access); -GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum target); -GLAPI void APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, GLvoid* *params); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); -typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers); -typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); -typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage); -typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data); -typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data); -typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access); -typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, GLvoid* *params); -#endif - -#ifndef GL_VERSION_2_0 -#define GL_VERSION_2_0 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); -GLAPI void APIENTRY glDrawBuffers (GLsizei n, const GLenum *bufs); -GLAPI void APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -GLAPI void APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); -GLAPI void APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); -GLAPI void APIENTRY glAttachShader (GLuint program, GLuint shader); -GLAPI void APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name); -GLAPI void APIENTRY glCompileShader (GLuint shader); -GLAPI GLuint APIENTRY glCreateProgram (void); -GLAPI GLuint APIENTRY glCreateShader (GLenum type); -GLAPI void APIENTRY glDeleteProgram (GLuint program); -GLAPI void APIENTRY glDeleteShader (GLuint shader); -GLAPI void APIENTRY glDetachShader (GLuint program, GLuint shader); -GLAPI void APIENTRY glDisableVertexAttribArray (GLuint index); -GLAPI void APIENTRY glEnableVertexAttribArray (GLuint index); -GLAPI void APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -GLAPI void APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -GLAPI void APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj); -GLAPI GLint APIENTRY glGetAttribLocation (GLuint program, const GLchar *name); -GLAPI void APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -GLAPI void APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -GLAPI void APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); -GLAPI GLint APIENTRY glGetUniformLocation (GLuint program, const GLchar *name); -GLAPI void APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params); -GLAPI void APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params); -GLAPI void APIENTRY glGetVertexAttribdv (GLuint index, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, GLvoid* *pointer); -GLAPI GLboolean APIENTRY glIsProgram (GLuint program); -GLAPI GLboolean APIENTRY glIsShader (GLuint shader); -GLAPI void APIENTRY glLinkProgram (GLuint program); -GLAPI void APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar* const *string, const GLint *length); -GLAPI void APIENTRY glUseProgram (GLuint program); -GLAPI void APIENTRY glUniform1f (GLint location, GLfloat v0); -GLAPI void APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1); -GLAPI void APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI void APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI void APIENTRY glUniform1i (GLint location, GLint v0); -GLAPI void APIENTRY glUniform2i (GLint location, GLint v0, GLint v1); -GLAPI void APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2); -GLAPI void APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI void APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glValidateProgram (GLuint program); -GLAPI void APIENTRY glVertexAttrib1d (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttrib1dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib1f (GLuint index, GLfloat x); -GLAPI void APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib1s (GLuint index, GLshort x); -GLAPI void APIENTRY glVertexAttrib1sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib2d (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttrib2dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y); -GLAPI void APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib2s (GLuint index, GLshort x, GLshort y); -GLAPI void APIENTRY glVertexAttrib2sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttrib3dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glVertexAttrib3sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttrib4Niv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttrib4bv (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttrib4dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib4iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void APIENTRY glVertexAttrib4sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4ubv (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttrib4uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttrib4usv (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); -typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs); -typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask); -typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); -typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); -typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name); -typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader); -typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void); -typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type); -typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader); -typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); -typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); -typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); -typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj); -typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); -typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params); -typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, GLvoid* *pointer); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program); -typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader); -typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar* const *string, const GLint *length); -typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0); -typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_VERSION_2_1 -#define GL_VERSION_2_1 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -#endif - -#ifndef GL_VERSION_3_0 -#define GL_VERSION_3_0 1 -/* OpenGL 3.0 also reuses entry points from these extensions: */ -/* ARB_framebuffer_object */ -/* ARB_map_buffer_range */ -/* ARB_vertex_array_object */ -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glColorMaski (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -GLAPI void APIENTRY glGetBooleani_v (GLenum target, GLuint index, GLboolean *data); -GLAPI void APIENTRY glGetIntegeri_v (GLenum target, GLuint index, GLint *data); -GLAPI void APIENTRY glEnablei (GLenum target, GLuint index); -GLAPI void APIENTRY glDisablei (GLenum target, GLuint index); -GLAPI GLboolean APIENTRY glIsEnabledi (GLenum target, GLuint index); -GLAPI void APIENTRY glBeginTransformFeedback (GLenum primitiveMode); -GLAPI void APIENTRY glEndTransformFeedback (void); -GLAPI void APIENTRY glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI void APIENTRY glBindBufferBase (GLenum target, GLuint index, GLuint buffer); -GLAPI void APIENTRY glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar* const *varyings, GLenum bufferMode); -GLAPI void APIENTRY glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -GLAPI void APIENTRY glClampColor (GLenum target, GLenum clamp); -GLAPI void APIENTRY glBeginConditionalRender (GLuint id, GLenum mode); -GLAPI void APIENTRY glEndConditionalRender (void); -GLAPI void APIENTRY glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glGetVertexAttribIiv (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint *params); -GLAPI void APIENTRY glVertexAttribI1i (GLuint index, GLint x); -GLAPI void APIENTRY glVertexAttribI2i (GLuint index, GLint x, GLint y); -GLAPI void APIENTRY glVertexAttribI3i (GLuint index, GLint x, GLint y, GLint z); -GLAPI void APIENTRY glVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glVertexAttribI1ui (GLuint index, GLuint x); -GLAPI void APIENTRY glVertexAttribI2ui (GLuint index, GLuint x, GLuint y); -GLAPI void APIENTRY glVertexAttribI3ui (GLuint index, GLuint x, GLuint y, GLuint z); -GLAPI void APIENTRY glVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI void APIENTRY glVertexAttribI1iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI2iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI3iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI4iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI1uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI2uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI3uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI4uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI4bv (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttribI4sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttribI4ubv (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttribI4usv (GLuint index, const GLushort *v); -GLAPI void APIENTRY glGetUniformuiv (GLuint program, GLint location, GLuint *params); -GLAPI void APIENTRY glBindFragDataLocation (GLuint program, GLuint color, const GLchar *name); -GLAPI GLint APIENTRY glGetFragDataLocation (GLuint program, const GLchar *name); -GLAPI void APIENTRY glUniform1ui (GLint location, GLuint v0); -GLAPI void APIENTRY glUniform2ui (GLint location, GLuint v0, GLuint v1); -GLAPI void APIENTRY glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI void APIENTRY glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI void APIENTRY glUniform1uiv (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform2uiv (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform3uiv (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform4uiv (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glTexParameterIiv (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glTexParameterIuiv (GLenum target, GLenum pname, const GLuint *params); -GLAPI void APIENTRY glGetTexParameterIiv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetTexParameterIuiv (GLenum target, GLenum pname, GLuint *params); -GLAPI void APIENTRY glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value); -GLAPI void APIENTRY glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value); -GLAPI void APIENTRY glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value); -GLAPI void APIENTRY glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -GLAPI const GLubyte * APIENTRY glGetStringi (GLenum name, GLuint index); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORMASKIPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data); -typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data); -typedef void (APIENTRYP PFNGLENABLEIPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLDISABLEIPROC) (GLenum target, GLuint index); -typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode); -typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC) (void); -typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar* const *varyings, GLenum bufferMode); -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLCLAMPCOLORPROC) (GLenum target, GLenum clamp); -typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC) (GLuint id, GLenum mode); -typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC) (void); -typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC) (GLuint index, GLint x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC) (GLuint index, GLint x, GLint y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC) (GLuint index, GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC) (GLuint index, GLuint x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC) (GLuint index, GLuint x, GLuint y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint *params); -typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC) (GLuint program, GLuint color, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLUNIFORM1UIPROC) (GLint location, GLuint v0); -typedef void (APIENTRYP PFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1); -typedef void (APIENTRYP PFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (APIENTRYP PFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, const GLuint *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint *value); -typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint *value); -typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat *value); -typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -typedef const GLubyte * (APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index); -#endif - -#ifndef GL_VERSION_3_1 -#define GL_VERSION_3_1 1 -/* OpenGL 3.1 also reuses entry points from these extensions: */ -/* ARB_copy_buffer */ -/* ARB_uniform_buffer_object */ -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei instancecount); -GLAPI void APIENTRY glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instancecount); -GLAPI void APIENTRY glTexBuffer (GLenum target, GLenum internalformat, GLuint buffer); -GLAPI void APIENTRY glPrimitiveRestartIndex (GLuint index); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instancecount); -typedef void (APIENTRYP PFNGLTEXBUFFERPROC) (GLenum target, GLenum internalformat, GLuint buffer); -typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC) (GLuint index); -#endif - -#ifndef GL_VERSION_3_2 -#define GL_VERSION_3_2 1 -/* OpenGL 3.2 also reuses entry points from these extensions: */ -/* ARB_draw_elements_base_vertex */ -/* ARB_provoking_vertex */ -/* ARB_sync */ -/* ARB_texture_multisample */ -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glGetInteger64i_v (GLenum target, GLuint index, GLint64 *data); -GLAPI void APIENTRY glGetBufferParameteri64v (GLenum target, GLenum pname, GLint64 *params); -GLAPI void APIENTRY glFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 *params); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); -#endif - -#ifndef GL_VERSION_3_3 -#define GL_VERSION_3_3 1 -/* OpenGL 3.3 also reuses entry points from these extensions: */ -/* ARB_blend_func_extended */ -/* ARB_sampler_objects */ -/* ARB_explicit_attrib_location, but it has none */ -/* ARB_occlusion_query2 (no entry points) */ -/* ARB_shader_bit_encoding (no entry points) */ -/* ARB_texture_rgb10_a2ui (no entry points) */ -/* ARB_texture_swizzle (no entry points) */ -/* ARB_timer_query */ -/* ARB_vertex_type_2_10_10_10_rev */ -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glVertexAttribDivisor (GLuint index, GLuint divisor); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor); -#endif - -#ifndef GL_VERSION_4_0 -#define GL_VERSION_4_0 1 -/* OpenGL 4.0 also reuses entry points from these extensions: */ -/* ARB_texture_query_lod (no entry points) */ -/* ARB_draw_indirect */ -/* ARB_gpu_shader5 (no entry points) */ -/* ARB_gpu_shader_fp64 */ -/* ARB_shader_subroutine */ -/* ARB_tessellation_shader */ -/* ARB_texture_buffer_object_rgb32 (no entry points) */ -/* ARB_texture_cube_map_array (no entry points) */ -/* ARB_texture_gather (no entry points) */ -/* ARB_transform_feedback2 */ -/* ARB_transform_feedback3 */ -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glMinSampleShading (GLfloat value); -GLAPI void APIENTRY glBlendEquationi (GLuint buf, GLenum mode); -GLAPI void APIENTRY glBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -GLAPI void APIENTRY glBlendFunci (GLuint buf, GLenum src, GLenum dst); -GLAPI void APIENTRY glBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMINSAMPLESHADINGPROC) (GLfloat value); -typedef void (APIENTRYP PFNGLBLENDEQUATIONIPROC) (GLuint buf, GLenum mode); -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -typedef void (APIENTRYP PFNGLBLENDFUNCIPROC) (GLuint buf, GLenum src, GLenum dst); -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -#endif - -#ifndef GL_VERSION_4_1 -#define GL_VERSION_4_1 1 -/* OpenGL 4.1 reuses entry points from these extensions: */ -/* ARB_ES2_compatibility */ -/* ARB_get_program_binary */ -/* ARB_separate_shader_objects */ -/* ARB_shader_precision (no entry points) */ -/* ARB_vertex_attrib_64bit */ -/* ARB_viewport_array */ -#endif - -#ifndef GL_VERSION_4_2 -#define GL_VERSION_4_2 1 -/* OpenGL 4.2 reuses entry points from these extensions: */ -/* ARB_base_instance */ -/* ARB_shading_language_420pack (no entry points) */ -/* ARB_transform_feedback_instanced */ -/* ARB_compressed_texture_pixel_storage (no entry points) */ -/* ARB_conservative_depth (no entry points) */ -/* ARB_internalformat_query */ -/* ARB_map_buffer_alignment (no entry points) */ -/* ARB_shader_atomic_counters */ -/* ARB_shader_image_load_store */ -/* ARB_shading_language_packing (no entry points) */ -/* ARB_texture_storage */ -#endif - -#ifndef GL_VERSION_4_3 -#define GL_VERSION_4_3 1 -/* OpenGL 4.3 reuses entry points from these extensions: */ -/* ARB_arrays_of_arrays (no entry points, GLSL only) */ -/* ARB_fragment_layer_viewport (no entry points, GLSL only) */ -/* ARB_shader_image_size (no entry points, GLSL only) */ -/* ARB_ES3_compatibility (no entry points) */ -/* ARB_clear_buffer_object */ -/* ARB_compute_shader */ -/* ARB_copy_image */ -/* KHR_debug (includes ARB_debug_output commands promoted to KHR without suffixes) */ -/* ARB_explicit_uniform_location (no entry points) */ -/* ARB_framebuffer_no_attachments */ -/* ARB_internalformat_query2 */ -/* ARB_invalidate_subdata */ -/* ARB_multi_draw_indirect */ -/* ARB_program_interface_query */ -/* ARB_robust_buffer_access_behavior (no entry points) */ -/* ARB_shader_storage_buffer_object */ -/* ARB_stencil_texturing (no entry points) */ -/* ARB_texture_buffer_range */ -/* ARB_texture_query_levels (no entry points) */ -/* ARB_texture_storage_multisample */ -/* ARB_texture_view */ -/* ARB_vertex_attrib_binding */ -#endif - -#ifndef GL_ARB_depth_buffer_float -#define GL_ARB_depth_buffer_float 1 -#endif - -#ifndef GL_ARB_framebuffer_object -#define GL_ARB_framebuffer_object 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI GLboolean APIENTRY glIsRenderbuffer (GLuint renderbuffer); -GLAPI void APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); -GLAPI void APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers); -GLAPI void APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers); -GLAPI void APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI GLboolean APIENTRY glIsFramebuffer (GLuint framebuffer); -GLAPI void APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); -GLAPI void APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers); -GLAPI void APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers); -GLAPI GLenum APIENTRY glCheckFramebufferStatus (GLenum target); -GLAPI void APIENTRY glFramebufferTexture1D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTexture3D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -GLAPI void APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GLAPI void APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params); -GLAPI void APIENTRY glGenerateMipmap (GLenum target); -GLAPI void APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -GLAPI void APIENTRY glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -#endif /* GLCOREARB_PROTOTYPES */ -typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer); -typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer); -typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer); -typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers); -typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers); -typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target); -typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -#endif - -#ifndef GL_ARB_framebuffer_sRGB -#define GL_ARB_framebuffer_sRGB 1 -#endif - -#ifndef GL_ARB_half_float_vertex -#define GL_ARB_half_float_vertex 1 -#endif - -#ifndef GL_ARB_map_buffer_range -#define GL_ARB_map_buffer_range 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI GLvoid* APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); -GLAPI void APIENTRY glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length); -#endif /* GLCOREARB_PROTOTYPES */ -typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); -typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length); -#endif - -#ifndef GL_ARB_texture_compression_rgtc -#define GL_ARB_texture_compression_rgtc 1 -#endif - -#ifndef GL_ARB_texture_rg -#define GL_ARB_texture_rg 1 -#endif - -#ifndef GL_ARB_vertex_array_object -#define GL_ARB_vertex_array_object 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glBindVertexArray (GLuint array); -GLAPI void APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays); -GLAPI void APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays); -GLAPI GLboolean APIENTRY glIsVertexArray (GLuint array); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array); -typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays); -typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays); -typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array); -#endif - -#ifndef GL_ARB_uniform_buffer_object -#define GL_ARB_uniform_buffer_object 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar* const *uniformNames, GLuint *uniformIndices); -GLAPI void APIENTRY glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetActiveUniformName (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); -GLAPI GLuint APIENTRY glGetUniformBlockIndex (GLuint program, const GLchar *uniformBlockName); -GLAPI void APIENTRY glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); -GLAPI void APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar* const *uniformNames, GLuint *uniformIndices); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC) (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); -typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); -typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); -#endif - -#ifndef GL_ARB_copy_buffer -#define GL_ARB_copy_buffer 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -#endif - -#ifndef GL_ARB_depth_clamp -#define GL_ARB_depth_clamp 1 -#endif - -#ifndef GL_ARB_draw_elements_base_vertex -#define GL_ARB_draw_elements_base_vertex 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex); -GLAPI void APIENTRY glDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex); -GLAPI void APIENTRY glDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instancecount, GLint basevertex); -GLAPI void APIENTRY glMultiDrawElementsBaseVertex (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei drawcount, const GLint *basevertex); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex); -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instancecount, GLint basevertex); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei drawcount, const GLint *basevertex); -#endif - -#ifndef GL_ARB_fragment_coord_conventions -#define GL_ARB_fragment_coord_conventions 1 -#endif - -#ifndef GL_ARB_provoking_vertex -#define GL_ARB_provoking_vertex 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glProvokingVertex (GLenum mode); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC) (GLenum mode); -#endif - -#ifndef GL_ARB_seamless_cube_map -#define GL_ARB_seamless_cube_map 1 -#endif - -#ifndef GL_ARB_sync -#define GL_ARB_sync 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI GLsync APIENTRY glFenceSync (GLenum condition, GLbitfield flags); -GLAPI GLboolean APIENTRY glIsSync (GLsync sync); -GLAPI void APIENTRY glDeleteSync (GLsync sync); -GLAPI GLenum APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); -GLAPI void APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); -GLAPI void APIENTRY glGetInteger64v (GLenum pname, GLint64 *params); -GLAPI void APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -#endif /* GLCOREARB_PROTOTYPES */ -typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags); -typedef GLboolean (APIENTRYP PFNGLISSYNCPROC) (GLsync sync); -typedef void (APIENTRYP PFNGLDELETESYNCPROC) (GLsync sync); -typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); -typedef void (APIENTRYP PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); -typedef void (APIENTRYP PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *params); -typedef void (APIENTRYP PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -#endif - -#ifndef GL_ARB_texture_multisample -#define GL_ARB_texture_multisample 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glTexImage2DMultisample (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glTexImage3DMultisample (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glGetMultisamplefv (GLenum pname, GLuint index, GLfloat *val); -GLAPI void APIENTRY glSampleMaski (GLuint index, GLbitfield mask); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat *val); -typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC) (GLuint index, GLbitfield mask); -#endif - -#ifndef GL_ARB_vertex_array_bgra -#define GL_ARB_vertex_array_bgra 1 -#endif - -#ifndef GL_ARB_draw_buffers_blend -#define GL_ARB_draw_buffers_blend 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glBlendEquationiARB (GLuint buf, GLenum mode); -GLAPI void APIENTRY glBlendEquationSeparateiARB (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -GLAPI void APIENTRY glBlendFunciARB (GLuint buf, GLenum src, GLenum dst); -GLAPI void APIENTRY glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDEQUATIONIARBPROC) (GLuint buf, GLenum mode); -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIARBPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -typedef void (APIENTRYP PFNGLBLENDFUNCIARBPROC) (GLuint buf, GLenum src, GLenum dst); -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIARBPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -#endif - -#ifndef GL_ARB_sample_shading -#define GL_ARB_sample_shading 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glMinSampleShadingARB (GLfloat value); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMINSAMPLESHADINGARBPROC) (GLfloat value); -#endif - -#ifndef GL_ARB_texture_cube_map_array -#define GL_ARB_texture_cube_map_array 1 -#endif - -#ifndef GL_ARB_texture_gather -#define GL_ARB_texture_gather 1 -#endif - -#ifndef GL_ARB_texture_query_lod -#define GL_ARB_texture_query_lod 1 -#endif - -#ifndef GL_ARB_shading_language_include -#define GL_ARB_shading_language_include 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glNamedStringARB (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); -GLAPI void APIENTRY glDeleteNamedStringARB (GLint namelen, const GLchar *name); -GLAPI void APIENTRY glCompileShaderIncludeARB (GLuint shader, GLsizei count, const GLchar* *path, const GLint *length); -GLAPI GLboolean APIENTRY glIsNamedStringARB (GLint namelen, const GLchar *name); -GLAPI void APIENTRY glGetNamedStringARB (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); -GLAPI void APIENTRY glGetNamedStringivARB (GLint namelen, const GLchar *name, GLenum pname, GLint *params); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLNAMEDSTRINGARBPROC) (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); -typedef void (APIENTRYP PFNGLDELETENAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); -typedef void (APIENTRYP PFNGLCOMPILESHADERINCLUDEARBPROC) (GLuint shader, GLsizei count, const GLchar* *path, const GLint *length); -typedef GLboolean (APIENTRYP PFNGLISNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); -typedef void (APIENTRYP PFNGLGETNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); -typedef void (APIENTRYP PFNGLGETNAMEDSTRINGIVARBPROC) (GLint namelen, const GLchar *name, GLenum pname, GLint *params); -#endif - -#ifndef GL_ARB_texture_compression_bptc -#define GL_ARB_texture_compression_bptc 1 -#endif - -#ifndef GL_ARB_blend_func_extended -#define GL_ARB_blend_func_extended 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glBindFragDataLocationIndexed (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); -GLAPI GLint APIENTRY glGetFragDataIndex (GLuint program, const GLchar *name); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC) (GLuint program, const GLchar *name); -#endif - -#ifndef GL_ARB_explicit_attrib_location -#define GL_ARB_explicit_attrib_location 1 -#endif - -#ifndef GL_ARB_occlusion_query2 -#define GL_ARB_occlusion_query2 1 -#endif - -#ifndef GL_ARB_sampler_objects -#define GL_ARB_sampler_objects 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glGenSamplers (GLsizei count, GLuint *samplers); -GLAPI void APIENTRY glDeleteSamplers (GLsizei count, const GLuint *samplers); -GLAPI GLboolean APIENTRY glIsSampler (GLuint sampler); -GLAPI void APIENTRY glBindSampler (GLuint unit, GLuint sampler); -GLAPI void APIENTRY glSamplerParameteri (GLuint sampler, GLenum pname, GLint param); -GLAPI void APIENTRY glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint *param); -GLAPI void APIENTRY glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param); -GLAPI void APIENTRY glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat *param); -GLAPI void APIENTRY glSamplerParameterIiv (GLuint sampler, GLenum pname, const GLint *param); -GLAPI void APIENTRY glSamplerParameterIuiv (GLuint sampler, GLenum pname, const GLuint *param); -GLAPI void APIENTRY glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetSamplerParameterIiv (GLuint sampler, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetSamplerParameterIuiv (GLuint sampler, GLenum pname, GLuint *params); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint *samplers); -typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint *samplers); -typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC) (GLuint sampler); -typedef void (APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint *param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, const GLint *param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, const GLuint *param); -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, GLuint *params); -#endif - -#ifndef GL_ARB_shader_bit_encoding -#define GL_ARB_shader_bit_encoding 1 -#endif - -#ifndef GL_ARB_texture_rgb10_a2ui -#define GL_ARB_texture_rgb10_a2ui 1 -#endif - -#ifndef GL_ARB_texture_swizzle -#define GL_ARB_texture_swizzle 1 -#endif - -#ifndef GL_ARB_timer_query -#define GL_ARB_timer_query 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glQueryCounter (GLuint id, GLenum target); -GLAPI void APIENTRY glGetQueryObjecti64v (GLuint id, GLenum pname, GLint64 *params); -GLAPI void APIENTRY glGetQueryObjectui64v (GLuint id, GLenum pname, GLuint64 *params); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC) (GLuint id, GLenum target); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC) (GLuint id, GLenum pname, GLint64 *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC) (GLuint id, GLenum pname, GLuint64 *params); -#endif - -#ifndef GL_ARB_vertex_type_2_10_10_10_rev -#define GL_ARB_vertex_type_2_10_10_10_rev 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glVertexP2ui (GLenum type, GLuint value); -GLAPI void APIENTRY glVertexP2uiv (GLenum type, const GLuint *value); -GLAPI void APIENTRY glVertexP3ui (GLenum type, GLuint value); -GLAPI void APIENTRY glVertexP3uiv (GLenum type, const GLuint *value); -GLAPI void APIENTRY glVertexP4ui (GLenum type, GLuint value); -GLAPI void APIENTRY glVertexP4uiv (GLenum type, const GLuint *value); -GLAPI void APIENTRY glTexCoordP1ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glTexCoordP1uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glTexCoordP2ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glTexCoordP2uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glTexCoordP3ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glTexCoordP3uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glTexCoordP4ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glTexCoordP4uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glMultiTexCoordP1ui (GLenum texture, GLenum type, GLuint coords); -GLAPI void APIENTRY glMultiTexCoordP1uiv (GLenum texture, GLenum type, const GLuint *coords); -GLAPI void APIENTRY glMultiTexCoordP2ui (GLenum texture, GLenum type, GLuint coords); -GLAPI void APIENTRY glMultiTexCoordP2uiv (GLenum texture, GLenum type, const GLuint *coords); -GLAPI void APIENTRY glMultiTexCoordP3ui (GLenum texture, GLenum type, GLuint coords); -GLAPI void APIENTRY glMultiTexCoordP3uiv (GLenum texture, GLenum type, const GLuint *coords); -GLAPI void APIENTRY glMultiTexCoordP4ui (GLenum texture, GLenum type, GLuint coords); -GLAPI void APIENTRY glMultiTexCoordP4uiv (GLenum texture, GLenum type, const GLuint *coords); -GLAPI void APIENTRY glNormalP3ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glNormalP3uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glColorP3ui (GLenum type, GLuint color); -GLAPI void APIENTRY glColorP3uiv (GLenum type, const GLuint *color); -GLAPI void APIENTRY glColorP4ui (GLenum type, GLuint color); -GLAPI void APIENTRY glColorP4uiv (GLenum type, const GLuint *color); -GLAPI void APIENTRY glSecondaryColorP3ui (GLenum type, GLuint color); -GLAPI void APIENTRY glSecondaryColorP3uiv (GLenum type, const GLuint *color); -GLAPI void APIENTRY glVertexAttribP1ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI void APIENTRY glVertexAttribP1uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI void APIENTRY glVertexAttribP2ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI void APIENTRY glVertexAttribP2uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI void APIENTRY glVertexAttribP3ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI void APIENTRY glVertexAttribP3uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI void APIENTRY glVertexAttribP4ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI void APIENTRY glVertexAttribP4uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXP2UIPROC) (GLenum type, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC) (GLenum type, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXP3UIPROC) (GLenum type, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC) (GLenum type, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXP4UIPROC) (GLenum type, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC) (GLenum type, const GLuint *value); -typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLNORMALP3UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLNORMALP3UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLCOLORP3UIPROC) (GLenum type, GLuint color); -typedef void (APIENTRYP PFNGLCOLORP3UIVPROC) (GLenum type, const GLuint *color); -typedef void (APIENTRYP PFNGLCOLORP4UIPROC) (GLenum type, GLuint color); -typedef void (APIENTRYP PFNGLCOLORP4UIVPROC) (GLenum type, const GLuint *color); -typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC) (GLenum type, GLuint color); -typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC) (GLenum type, const GLuint *color); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -#endif - -#ifndef GL_ARB_draw_indirect -#define GL_ARB_draw_indirect 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glDrawArraysIndirect (GLenum mode, const GLvoid *indirect); -GLAPI void APIENTRY glDrawElementsIndirect (GLenum mode, GLenum type, const GLvoid *indirect); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const GLvoid *indirect); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const GLvoid *indirect); -#endif - -#ifndef GL_ARB_gpu_shader5 -#define GL_ARB_gpu_shader5 1 -#endif - -#ifndef GL_ARB_gpu_shader_fp64 -#define GL_ARB_gpu_shader_fp64 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glUniform1d (GLint location, GLdouble x); -GLAPI void APIENTRY glUniform2d (GLint location, GLdouble x, GLdouble y); -GLAPI void APIENTRY glUniform3d (GLint location, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glUniform4d (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glUniform1dv (GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glUniform2dv (GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glUniform3dv (GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glUniform4dv (GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix2x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix2x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix3x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix3x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix4x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix4x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glGetUniformdv (GLuint program, GLint location, GLdouble *params); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLUNIFORM1DPROC) (GLint location, GLdouble x); -typedef void (APIENTRYP PFNGLUNIFORM2DPROC) (GLint location, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLUNIFORM3DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLUNIFORM4DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLUNIFORM1DVPROC) (GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORM2DVPROC) (GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORM3DVPROC) (GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORM4DVPROC) (GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLGETUNIFORMDVPROC) (GLuint program, GLint location, GLdouble *params); -#endif - -#ifndef GL_ARB_shader_subroutine -#define GL_ARB_shader_subroutine 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI GLint APIENTRY glGetSubroutineUniformLocation (GLuint program, GLenum shadertype, const GLchar *name); -GLAPI GLuint APIENTRY glGetSubroutineIndex (GLuint program, GLenum shadertype, const GLchar *name); -GLAPI void APIENTRY glGetActiveSubroutineUniformiv (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); -GLAPI void APIENTRY glGetActiveSubroutineUniformName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); -GLAPI void APIENTRY glGetActiveSubroutineName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); -GLAPI void APIENTRY glUniformSubroutinesuiv (GLenum shadertype, GLsizei count, const GLuint *indices); -GLAPI void APIENTRY glGetUniformSubroutineuiv (GLenum shadertype, GLint location, GLuint *params); -GLAPI void APIENTRY glGetProgramStageiv (GLuint program, GLenum shadertype, GLenum pname, GLint *values); -#endif /* GLCOREARB_PROTOTYPES */ -typedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint program, GLenum shadertype, const GLchar *name); -typedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC) (GLuint program, GLenum shadertype, const GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); -typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINENAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); -typedef void (APIENTRYP PFNGLUNIFORMSUBROUTINESUIVPROC) (GLenum shadertype, GLsizei count, const GLuint *indices); -typedef void (APIENTRYP PFNGLGETUNIFORMSUBROUTINEUIVPROC) (GLenum shadertype, GLint location, GLuint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMSTAGEIVPROC) (GLuint program, GLenum shadertype, GLenum pname, GLint *values); -#endif - -#ifndef GL_ARB_tessellation_shader -#define GL_ARB_tessellation_shader 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glPatchParameteri (GLenum pname, GLint value); -GLAPI void APIENTRY glPatchParameterfv (GLenum pname, const GLfloat *values); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPATCHPARAMETERIPROC) (GLenum pname, GLint value); -typedef void (APIENTRYP PFNGLPATCHPARAMETERFVPROC) (GLenum pname, const GLfloat *values); -#endif - -#ifndef GL_ARB_texture_buffer_object_rgb32 -#define GL_ARB_texture_buffer_object_rgb32 1 -#endif - -#ifndef GL_ARB_transform_feedback2 -#define GL_ARB_transform_feedback2 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glBindTransformFeedback (GLenum target, GLuint id); -GLAPI void APIENTRY glDeleteTransformFeedbacks (GLsizei n, const GLuint *ids); -GLAPI void APIENTRY glGenTransformFeedbacks (GLsizei n, GLuint *ids); -GLAPI GLboolean APIENTRY glIsTransformFeedback (GLuint id); -GLAPI void APIENTRY glPauseTransformFeedback (void); -GLAPI void APIENTRY glResumeTransformFeedback (void); -GLAPI void APIENTRY glDrawTransformFeedback (GLenum mode, GLuint id); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint *ids); -typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id); -typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC) (void); -typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC) (void); -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKPROC) (GLenum mode, GLuint id); -#endif - -#ifndef GL_ARB_transform_feedback3 -#define GL_ARB_transform_feedback3 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glDrawTransformFeedbackStream (GLenum mode, GLuint id, GLuint stream); -GLAPI void APIENTRY glBeginQueryIndexed (GLenum target, GLuint index, GLuint id); -GLAPI void APIENTRY glEndQueryIndexed (GLenum target, GLuint index); -GLAPI void APIENTRY glGetQueryIndexediv (GLenum target, GLuint index, GLenum pname, GLint *params); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) (GLenum mode, GLuint id, GLuint stream); -typedef void (APIENTRYP PFNGLBEGINQUERYINDEXEDPROC) (GLenum target, GLuint index, GLuint id); -typedef void (APIENTRYP PFNGLENDQUERYINDEXEDPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLGETQUERYINDEXEDIVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); -#endif - -#ifndef GL_ARB_ES2_compatibility -#define GL_ARB_ES2_compatibility 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glReleaseShaderCompiler (void); -GLAPI void APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const GLvoid *binary, GLsizei length); -GLAPI void APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); -GLAPI void APIENTRY glDepthRangef (GLfloat n, GLfloat f); -GLAPI void APIENTRY glClearDepthf (GLfloat d); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void); -typedef void (APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryformat, const GLvoid *binary, GLsizei length); -typedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); -typedef void (APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f); -typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d); -#endif - -#ifndef GL_ARB_get_program_binary -#define GL_ARB_get_program_binary 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary); -GLAPI void APIENTRY glProgramBinary (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length); -GLAPI void APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary); -typedef void (APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value); -#endif - -#ifndef GL_ARB_separate_shader_objects -#define GL_ARB_separate_shader_objects 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program); -GLAPI void APIENTRY glActiveShaderProgram (GLuint pipeline, GLuint program); -GLAPI GLuint APIENTRY glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar* const *strings); -GLAPI void APIENTRY glBindProgramPipeline (GLuint pipeline); -GLAPI void APIENTRY glDeleteProgramPipelines (GLsizei n, const GLuint *pipelines); -GLAPI void APIENTRY glGenProgramPipelines (GLsizei n, GLuint *pipelines); -GLAPI GLboolean APIENTRY glIsProgramPipeline (GLuint pipeline); -GLAPI void APIENTRY glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint *params); -GLAPI void APIENTRY glProgramUniform1i (GLuint program, GLint location, GLint v0); -GLAPI void APIENTRY glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform1f (GLuint program, GLint location, GLfloat v0); -GLAPI void APIENTRY glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform1d (GLuint program, GLint location, GLdouble v0); -GLAPI void APIENTRY glProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform1ui (GLuint program, GLint location, GLuint v0); -GLAPI void APIENTRY glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform2i (GLuint program, GLint location, GLint v0, GLint v1); -GLAPI void APIENTRY glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform2f (GLuint program, GLint location, GLfloat v0, GLfloat v1); -GLAPI void APIENTRY glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform2d (GLuint program, GLint location, GLdouble v0, GLdouble v1); -GLAPI void APIENTRY glProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform2ui (GLuint program, GLint location, GLuint v0, GLuint v1); -GLAPI void APIENTRY glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform3i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -GLAPI void APIENTRY glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform3f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI void APIENTRY glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform3d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); -GLAPI void APIENTRY glProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform3ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI void APIENTRY glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform4i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI void APIENTRY glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform4f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI void APIENTRY glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform4d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); -GLAPI void APIENTRY glProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform4ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI void APIENTRY glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glValidateProgramPipeline (GLuint pipeline); -GLAPI void APIENTRY glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program); -typedef void (APIENTRYP PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program); -typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar* const *strings); -typedef void (APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline); -typedef void (APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint *pipelines); -typedef void (APIENTRYP PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline); -typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DPROC) (GLuint program, GLint location, GLdouble v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline); -typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -#endif - -#ifndef GL_ARB_vertex_attrib_64bit -#define GL_ARB_vertex_attrib_64bit 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glVertexAttribL1d (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttribL2d (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttribL1dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL2dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL3dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL4dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble *params); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVPROC) (GLuint index, GLenum pname, GLdouble *params); -#endif - -#ifndef GL_ARB_viewport_array -#define GL_ARB_viewport_array 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glViewportArrayv (GLuint first, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glViewportIndexedf (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); -GLAPI void APIENTRY glViewportIndexedfv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glScissorArrayv (GLuint first, GLsizei count, const GLint *v); -GLAPI void APIENTRY glScissorIndexed (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); -GLAPI void APIENTRY glScissorIndexedv (GLuint index, const GLint *v); -GLAPI void APIENTRY glDepthRangeArrayv (GLuint first, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glDepthRangeIndexed (GLuint index, GLdouble n, GLdouble f); -GLAPI void APIENTRY glGetFloati_v (GLenum target, GLuint index, GLfloat *data); -GLAPI void APIENTRY glGetDoublei_v (GLenum target, GLuint index, GLdouble *data); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVIEWPORTARRAYVPROC) (GLuint first, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); -typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLSCISSORARRAYVPROC) (GLuint first, GLsizei count, const GLint *v); -typedef void (APIENTRYP PFNGLSCISSORINDEXEDPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLSCISSORINDEXEDVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYVPROC) (GLuint first, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDPROC) (GLuint index, GLdouble n, GLdouble f); -typedef void (APIENTRYP PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat *data); -typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble *data); -#endif - -#ifndef GL_ARB_cl_event -#define GL_ARB_cl_event 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI GLsync APIENTRY glCreateSyncFromCLeventARB (struct _cl_context * context, struct _cl_event * event, GLbitfield flags); -#endif /* GLCOREARB_PROTOTYPES */ -typedef GLsync (APIENTRYP PFNGLCREATESYNCFROMCLEVENTARBPROC) (struct _cl_context * context, struct _cl_event * event, GLbitfield flags); -#endif - -#ifndef GL_ARB_debug_output -#define GL_ARB_debug_output 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glDebugMessageControlARB (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -GLAPI void APIENTRY glDebugMessageInsertARB (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -GLAPI void APIENTRY glDebugMessageCallbackARB (GLDEBUGPROCARB callback, const GLvoid *userParam); -GLAPI GLuint APIENTRY glGetDebugMessageLogARB (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, const GLvoid *userParam); -typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -#endif - -#ifndef GL_ARB_robustness -#define GL_ARB_robustness 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI GLenum APIENTRY glGetGraphicsResetStatusARB (void); -GLAPI void APIENTRY glGetnTexImageARB (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, GLvoid *img); -GLAPI void APIENTRY glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data); -GLAPI void APIENTRY glGetnCompressedTexImageARB (GLenum target, GLint lod, GLsizei bufSize, GLvoid *img); -GLAPI void APIENTRY glGetnUniformfvARB (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); -GLAPI void APIENTRY glGetnUniformivARB (GLuint program, GLint location, GLsizei bufSize, GLint *params); -GLAPI void APIENTRY glGetnUniformuivARB (GLuint program, GLint location, GLsizei bufSize, GLuint *params); -GLAPI void APIENTRY glGetnUniformdvARB (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); -#endif /* GLCOREARB_PROTOTYPES */ -typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSARBPROC) (void); -typedef void (APIENTRYP PFNGLGETNTEXIMAGEARBPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, GLvoid *img); -typedef void (APIENTRYP PFNGLREADNPIXELSARBPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data); -typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLsizei bufSize, GLvoid *img); -typedef void (APIENTRYP PFNGLGETNUNIFORMFVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); -typedef void (APIENTRYP PFNGLGETNUNIFORMIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); -typedef void (APIENTRYP PFNGLGETNUNIFORMUIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params); -typedef void (APIENTRYP PFNGLGETNUNIFORMDVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); -#endif - -#ifndef GL_ARB_shader_stencil_export -#define GL_ARB_shader_stencil_export 1 -#endif - -#ifndef GL_ARB_base_instance -#define GL_ARB_base_instance 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glDrawArraysInstancedBaseInstance (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); -GLAPI void APIENTRY glDrawElementsInstancedBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); -GLAPI void APIENTRY glDrawElementsInstancedBaseVertexBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); -#endif - -#ifndef GL_ARB_shading_language_420pack -#define GL_ARB_shading_language_420pack 1 -#endif - -#ifndef GL_ARB_transform_feedback_instanced -#define GL_ARB_transform_feedback_instanced 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glDrawTransformFeedbackInstanced (GLenum mode, GLuint id, GLsizei instancecount); -GLAPI void APIENTRY glDrawTransformFeedbackStreamInstanced (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC) (GLenum mode, GLuint id, GLsizei instancecount); -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC) (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); -#endif - -#ifndef GL_ARB_compressed_texture_pixel_storage -#define GL_ARB_compressed_texture_pixel_storage 1 -#endif - -#ifndef GL_ARB_conservative_depth -#define GL_ARB_conservative_depth 1 -#endif - -#ifndef GL_ARB_internalformat_query -#define GL_ARB_internalformat_query 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params); -#endif - -#ifndef GL_ARB_map_buffer_alignment -#define GL_ARB_map_buffer_alignment 1 -#endif - -#ifndef GL_ARB_shader_atomic_counters -#define GL_ARB_shader_atomic_counters 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glGetActiveAtomicCounterBufferiv (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC) (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); -#endif - -#ifndef GL_ARB_shader_image_load_store -#define GL_ARB_shader_image_load_store 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glBindImageTexture (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); -GLAPI void APIENTRY glMemoryBarrier (GLbitfield barriers); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREPROC) (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); -typedef void (APIENTRYP PFNGLMEMORYBARRIERPROC) (GLbitfield barriers); -#endif - -#ifndef GL_ARB_shading_language_packing -#define GL_ARB_shading_language_packing 1 -#endif - -#ifndef GL_ARB_texture_storage -#define GL_ARB_texture_storage 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glTexStorage1D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -GLAPI void APIENTRY glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -GLAPI void APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -GLAPI void APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXSTORAGE1DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -typedef void (APIENTRYP PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -#endif - -#ifndef GL_KHR_texture_compression_astc_ldr -#define GL_KHR_texture_compression_astc_ldr 1 -#endif - -#ifndef GL_KHR_debug -#define GL_KHR_debug 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -GLAPI void APIENTRY glDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -GLAPI void APIENTRY glDebugMessageCallback (GLDEBUGPROC callback, const void *userParam); -GLAPI GLuint APIENTRY glGetDebugMessageLog (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -GLAPI void APIENTRY glPushDebugGroup (GLenum source, GLuint id, GLsizei length, const GLchar *message); -GLAPI void APIENTRY glPopDebugGroup (void); -GLAPI void APIENTRY glObjectLabel (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); -GLAPI void APIENTRY glGetObjectLabel (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); -GLAPI void APIENTRY glObjectPtrLabel (const void *ptr, GLsizei length, const GLchar *label); -GLAPI void APIENTRY glGetObjectPtrLabel (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam); -typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -typedef void (APIENTRYP PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message); -typedef void (APIENTRYP PFNGLPOPDEBUGGROUPPROC) (void); -typedef void (APIENTRYP PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); -typedef void (APIENTRYP PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); -typedef void (APIENTRYP PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label); -typedef void (APIENTRYP PFNGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); -#endif - -#ifndef GL_ARB_arrays_of_arrays -#define GL_ARB_arrays_of_arrays 1 -#endif - -#ifndef GL_ARB_clear_buffer_object -#define GL_ARB_clear_buffer_object 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glClearBufferData (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); -GLAPI void APIENTRY glClearBufferSubData (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); -GLAPI void APIENTRY glClearNamedBufferDataEXT (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); -GLAPI void APIENTRY glClearNamedBufferSubDataEXT (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, GLsizeiptr offset, GLsizeiptr size, const void *data); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCLEARBUFFERDATAPROC) (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); -typedef void (APIENTRYP PFNGLCLEARBUFFERSUBDATAPROC) (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); -typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); -typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, GLsizeiptr offset, GLsizeiptr size, const void *data); -#endif - -#ifndef GL_ARB_compute_shader -#define GL_ARB_compute_shader 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glDispatchCompute (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); -GLAPI void APIENTRY glDispatchComputeIndirect (GLintptr indirect); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); -typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEINDIRECTPROC) (GLintptr indirect); -#endif - -#ifndef GL_ARB_copy_image -#define GL_ARB_copy_image 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glCopyImageSubData (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATAPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); -#endif - -#ifndef GL_ARB_texture_view -#define GL_ARB_texture_view 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glTextureView (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXTUREVIEWPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); -#endif - -#ifndef GL_ARB_vertex_attrib_binding -#define GL_ARB_vertex_attrib_binding 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glBindVertexBuffer (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); -GLAPI void APIENTRY glVertexAttribFormat (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); -GLAPI void APIENTRY glVertexAttribIFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -GLAPI void APIENTRY glVertexAttribLFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -GLAPI void APIENTRY glVertexAttribBinding (GLuint attribindex, GLuint bindingindex); -GLAPI void APIENTRY glVertexBindingDivisor (GLuint bindingindex, GLuint divisor); -GLAPI void APIENTRY glVertexArrayBindVertexBufferEXT (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); -GLAPI void APIENTRY glVertexArrayVertexAttribFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); -GLAPI void APIENTRY glVertexArrayVertexAttribIFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -GLAPI void APIENTRY glVertexArrayVertexAttribLFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -GLAPI void APIENTRY glVertexArrayVertexAttribBindingEXT (GLuint vaobj, GLuint attribindex, GLuint bindingindex); -GLAPI void APIENTRY glVertexArrayVertexBindingDivisorEXT (GLuint vaobj, GLuint bindingindex, GLuint divisor); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERPROC) (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); -typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); -typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -typedef void (APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC) (GLuint attribindex, GLuint bindingindex); -typedef void (APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC) (GLuint bindingindex, GLuint divisor); -typedef void (APIENTRYP PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor); -#endif - -#ifndef GL_ARB_robustness_isolation -#define GL_ARB_robustness_isolation 1 -#endif - -#ifndef GL_ARB_ES3_compatibility -#define GL_ARB_ES3_compatibility 1 -#endif - -#ifndef GL_ARB_explicit_uniform_location -#define GL_ARB_explicit_uniform_location 1 -#endif - -#ifndef GL_ARB_fragment_layer_viewport -#define GL_ARB_fragment_layer_viewport 1 -#endif - -#ifndef GL_ARB_framebuffer_no_attachments -#define GL_ARB_framebuffer_no_attachments 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glFramebufferParameteri (GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glGetFramebufferParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glNamedFramebufferParameteriEXT (GLuint framebuffer, GLenum pname, GLint param); -GLAPI void APIENTRY glGetNamedFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC) (GLuint framebuffer, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); -#endif - -#ifndef GL_ARB_internalformat_query2 -#define GL_ARB_internalformat_query2 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glGetInternalformati64v (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETINTERNALFORMATI64VPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params); -#endif - -#ifndef GL_ARB_invalidate_subdata -#define GL_ARB_invalidate_subdata 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glInvalidateTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); -GLAPI void APIENTRY glInvalidateTexImage (GLuint texture, GLint level); -GLAPI void APIENTRY glInvalidateBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr length); -GLAPI void APIENTRY glInvalidateBufferData (GLuint buffer); -GLAPI void APIENTRY glInvalidateFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments); -GLAPI void APIENTRY glInvalidateSubFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLINVALIDATETEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); -typedef void (APIENTRYP PFNGLINVALIDATETEXIMAGEPROC) (GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLINVALIDATEBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); -typedef void (APIENTRYP PFNGLINVALIDATEBUFFERDATAPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments); -typedef void (APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); -#endif - -#ifndef GL_ARB_multi_draw_indirect -#define GL_ARB_multi_draw_indirect 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glMultiDrawArraysIndirect (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); -GLAPI void APIENTRY glMultiDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); -#endif - -#ifndef GL_ARB_program_interface_query -#define GL_ARB_program_interface_query 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glGetProgramInterfaceiv (GLuint program, GLenum programInterface, GLenum pname, GLint *params); -GLAPI GLuint APIENTRY glGetProgramResourceIndex (GLuint program, GLenum programInterface, const GLchar *name); -GLAPI void APIENTRY glGetProgramResourceName (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); -GLAPI void APIENTRY glGetProgramResourceiv (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params); -GLAPI GLint APIENTRY glGetProgramResourceLocation (GLuint program, GLenum programInterface, const GLchar *name); -GLAPI GLint APIENTRY glGetProgramResourceLocationIndex (GLuint program, GLenum programInterface, const GLchar *name); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETPROGRAMINTERFACEIVPROC) (GLuint program, GLenum programInterface, GLenum pname, GLint *params); -typedef GLuint (APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name); -typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCENAMEPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); -typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEIVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params); -typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC) (GLuint program, GLenum programInterface, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name); -#endif - -#ifndef GL_ARB_robust_buffer_access_behavior -#define GL_ARB_robust_buffer_access_behavior 1 -#endif - -#ifndef GL_ARB_shader_image_size -#define GL_ARB_shader_image_size 1 -#endif - -#ifndef GL_ARB_shader_storage_buffer_object -#define GL_ARB_shader_storage_buffer_object 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glShaderStorageBlockBinding (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSHADERSTORAGEBLOCKBINDINGPROC) (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); -#endif - -#ifndef GL_ARB_stencil_texturing -#define GL_ARB_stencil_texturing 1 -#endif - -#ifndef GL_ARB_texture_buffer_range -#define GL_ARB_texture_buffer_range 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glTexBufferRange (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI void APIENTRY glTextureBufferRangeEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXBUFFERRANGEPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEEXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); -#endif - -#ifndef GL_ARB_texture_query_levels -#define GL_ARB_texture_query_levels 1 -#endif - -#ifndef GL_ARB_texture_storage_multisample -#define GL_ARB_texture_storage_multisample 1 -#ifdef GLCOREARB_PROTOTYPES -GLAPI void APIENTRY glTexStorage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glTexStorage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glTextureStorage2DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glTextureStorage3DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -#endif /* GLCOREARB_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXSTORAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -#endif - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/cmake/imgui/examples/libs/glfw/COPYING.txt b/cmake/imgui/examples/libs/glfw/COPYING.txt deleted file mode 100644 index b30c7015..00000000 --- a/cmake/imgui/examples/libs/glfw/COPYING.txt +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2002-2006 Marcus Geelnard -Copyright (c) 2006-2010 Camilla Berglund - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would - be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not - be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. - diff --git a/cmake/imgui/examples/libs/glfw/include/GLFW/glfw3.h b/cmake/imgui/examples/libs/glfw/include/GLFW/glfw3.h deleted file mode 100644 index f8ca3d61..00000000 --- a/cmake/imgui/examples/libs/glfw/include/GLFW/glfw3.h +++ /dev/null @@ -1,4227 +0,0 @@ -/************************************************************************* - * GLFW 3.2 - www.glfw.org - * A library for OpenGL, window and input - *------------------------------------------------------------------------ - * Copyright (c) 2002-2006 Marcus Geelnard - * Copyright (c) 2006-2010 Camilla Berglund - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would - * be appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. - * - *************************************************************************/ - -#ifndef _glfw3_h_ -#define _glfw3_h_ - -#ifdef __cplusplus -extern "C" { -#endif - - -/************************************************************************* - * Doxygen documentation - *************************************************************************/ - -/*! @file glfw3.h - * @brief The header of the GLFW 3 API. - * - * This is the header file of the GLFW 3 API. It defines all its types and - * declares all its functions. - * - * For more information about how to use this file, see @ref build_include. - */ -/*! @defgroup context Context reference - * - * This is the reference documentation for OpenGL and OpenGL ES context related - * functions. For more task-oriented information, see the @ref context_guide. - */ -/*! @defgroup vulkan Vulkan reference - * - * This is the reference documentation for Vulkan related functions and types. - * For more task-oriented information, see the @ref vulkan_guide. - */ -/*! @defgroup init Initialization, version and error reference - * - * This is the reference documentation for initialization and termination of - * the library, version management and error handling. For more task-oriented - * information, see the @ref intro_guide. - */ -/*! @defgroup input Input reference - * - * This is the reference documentation for input related functions and types. - * For more task-oriented information, see the @ref input_guide. - */ -/*! @defgroup monitor Monitor reference - * - * This is the reference documentation for monitor related functions and types. - * For more task-oriented information, see the @ref monitor_guide. - */ -/*! @defgroup window Window reference - * - * This is the reference documentation for window related functions and types, - * including creation, deletion and event polling. For more task-oriented - * information, see the @ref window_guide. - */ - - -/************************************************************************* - * Compiler- and platform-specific preprocessor work - *************************************************************************/ - -/* If we are we on Windows, we want a single define for it. - */ -#if !defined(_WIN32) && (defined(__WIN32__) || defined(WIN32) || defined(__MINGW32__)) - #define _WIN32 -#endif /* _WIN32 */ - -/* It is customary to use APIENTRY for OpenGL function pointer declarations on - * all platforms. Additionally, the Windows OpenGL header needs APIENTRY. - */ -#ifndef APIENTRY - #ifdef _WIN32 - #define APIENTRY __stdcall - #else - #define APIENTRY - #endif -#endif /* APIENTRY */ - -/* Some Windows OpenGL headers need this. - */ -#if !defined(WINGDIAPI) && defined(_WIN32) - #define WINGDIAPI __declspec(dllimport) - #define GLFW_WINGDIAPI_DEFINED -#endif /* WINGDIAPI */ - -/* Some Windows GLU headers need this. - */ -#if !defined(CALLBACK) && defined(_WIN32) - #define CALLBACK __stdcall - #define GLFW_CALLBACK_DEFINED -#endif /* CALLBACK */ - -/* Most Windows GLU headers need wchar_t. - * The OS X OpenGL header blocks the definition of ptrdiff_t by glext.h. - * Include it unconditionally to avoid surprising side-effects. - */ -#include -#include - -/* Include the chosen client API headers. - */ -#if defined(__APPLE__) - #if defined(GLFW_INCLUDE_GLCOREARB) - #include - #if defined(GLFW_INCLUDE_GLEXT) - #include - #endif - #elif !defined(GLFW_INCLUDE_NONE) - #if !defined(GLFW_INCLUDE_GLEXT) - #define GL_GLEXT_LEGACY - #endif - #include - #endif - #if defined(GLFW_INCLUDE_GLU) - #include - #endif -#else - #if defined(GLFW_INCLUDE_GLCOREARB) - #include - #elif defined(GLFW_INCLUDE_ES1) - #include - #if defined(GLFW_INCLUDE_GLEXT) - #include - #endif - #elif defined(GLFW_INCLUDE_ES2) - #include - #if defined(GLFW_INCLUDE_GLEXT) - #include - #endif - #elif defined(GLFW_INCLUDE_ES3) - #include - #if defined(GLFW_INCLUDE_GLEXT) - #include - #endif - #elif defined(GLFW_INCLUDE_ES31) - #include - #if defined(GLFW_INCLUDE_GLEXT) - #include - #endif - #elif defined(GLFW_INCLUDE_VULKAN) - #include - #elif !defined(GLFW_INCLUDE_NONE) - #include - #if defined(GLFW_INCLUDE_GLEXT) - #include - #endif - #endif - #if defined(GLFW_INCLUDE_GLU) - #include - #endif -#endif - -#if defined(GLFW_DLL) && defined(_GLFW_BUILD_DLL) - /* GLFW_DLL must be defined by applications that are linking against the DLL - * version of the GLFW library. _GLFW_BUILD_DLL is defined by the GLFW - * configuration header when compiling the DLL version of the library. - */ - #error "You must not have both GLFW_DLL and _GLFW_BUILD_DLL defined" -#endif - -/* GLFWAPI is used to declare public API functions for export - * from the DLL / shared library / dynamic library. - */ -#if defined(_WIN32) && defined(_GLFW_BUILD_DLL) - /* We are building GLFW as a Win32 DLL */ - #define GLFWAPI __declspec(dllexport) -#elif defined(_WIN32) && defined(GLFW_DLL) - /* We are calling GLFW as a Win32 DLL */ - #define GLFWAPI __declspec(dllimport) -#elif defined(__GNUC__) && defined(_GLFW_BUILD_DLL) - /* We are building GLFW as a shared / dynamic library */ - #define GLFWAPI __attribute__((visibility("default"))) -#else - /* We are building or calling GLFW as a static library */ - #define GLFWAPI -#endif - - -/************************************************************************* - * GLFW API tokens - *************************************************************************/ - -/*! @name GLFW version macros - * @{ */ -/*! @brief The major version number of the GLFW library. - * - * This is incremented when the API is changed in non-compatible ways. - * @ingroup init - */ -#define GLFW_VERSION_MAJOR 3 -/*! @brief The minor version number of the GLFW library. - * - * This is incremented when features are added to the API but it remains - * backward-compatible. - * @ingroup init - */ -#define GLFW_VERSION_MINOR 2 -/*! @brief The revision number of the GLFW library. - * - * This is incremented when a bug fix release is made that does not contain any - * API changes. - * @ingroup init - */ -#define GLFW_VERSION_REVISION 0 -/*! @} */ - -/*! @name Boolean values - * @{ */ -/*! @brief One. - * - * One. Seriously. You don't _need_ to use this symbol in your code. It's - * just semantic sugar for the number 1. You can use `1` or `true` or `_True` - * or `GL_TRUE` or whatever you want. - */ -#define GLFW_TRUE 1 -/*! @brief Zero. - * - * Zero. Seriously. You don't _need_ to use this symbol in your code. It's - * just just semantic sugar for the number 0. You can use `0` or `false` or - * `_False` or `GL_FALSE` or whatever you want. - */ -#define GLFW_FALSE 0 -/*! @} */ - -/*! @name Key and button actions - * @{ */ -/*! @brief The key or mouse button was released. - * - * The key or mouse button was released. - * - * @ingroup input - */ -#define GLFW_RELEASE 0 -/*! @brief The key or mouse button was pressed. - * - * The key or mouse button was pressed. - * - * @ingroup input - */ -#define GLFW_PRESS 1 -/*! @brief The key was held down until it repeated. - * - * The key was held down until it repeated. - * - * @ingroup input - */ -#define GLFW_REPEAT 2 -/*! @} */ - -/*! @defgroup keys Keyboard keys - * - * See [key input](@ref input_key) for how these are used. - * - * These key codes are inspired by the _USB HID Usage Tables v1.12_ (p. 53-60), - * but re-arranged to map to 7-bit ASCII for printable keys (function keys are - * put in the 256+ range). - * - * The naming of the key codes follow these rules: - * - The US keyboard layout is used - * - Names of printable alpha-numeric characters are used (e.g. "A", "R", - * "3", etc.) - * - For non-alphanumeric characters, Unicode:ish names are used (e.g. - * "COMMA", "LEFT_SQUARE_BRACKET", etc.). Note that some names do not - * correspond to the Unicode standard (usually for brevity) - * - Keys that lack a clear US mapping are named "WORLD_x" - * - For non-printable keys, custom names are used (e.g. "F4", - * "BACKSPACE", etc.) - * - * @ingroup input - * @{ - */ - -/* The unknown key */ -#define GLFW_KEY_UNKNOWN -1 - -/* Printable keys */ -#define GLFW_KEY_SPACE 32 -#define GLFW_KEY_APOSTROPHE 39 /* ' */ -#define GLFW_KEY_COMMA 44 /* , */ -#define GLFW_KEY_MINUS 45 /* - */ -#define GLFW_KEY_PERIOD 46 /* . */ -#define GLFW_KEY_SLASH 47 /* / */ -#define GLFW_KEY_0 48 -#define GLFW_KEY_1 49 -#define GLFW_KEY_2 50 -#define GLFW_KEY_3 51 -#define GLFW_KEY_4 52 -#define GLFW_KEY_5 53 -#define GLFW_KEY_6 54 -#define GLFW_KEY_7 55 -#define GLFW_KEY_8 56 -#define GLFW_KEY_9 57 -#define GLFW_KEY_SEMICOLON 59 /* ; */ -#define GLFW_KEY_EQUAL 61 /* = */ -#define GLFW_KEY_A 65 -#define GLFW_KEY_B 66 -#define GLFW_KEY_C 67 -#define GLFW_KEY_D 68 -#define GLFW_KEY_E 69 -#define GLFW_KEY_F 70 -#define GLFW_KEY_G 71 -#define GLFW_KEY_H 72 -#define GLFW_KEY_I 73 -#define GLFW_KEY_J 74 -#define GLFW_KEY_K 75 -#define GLFW_KEY_L 76 -#define GLFW_KEY_M 77 -#define GLFW_KEY_N 78 -#define GLFW_KEY_O 79 -#define GLFW_KEY_P 80 -#define GLFW_KEY_Q 81 -#define GLFW_KEY_R 82 -#define GLFW_KEY_S 83 -#define GLFW_KEY_T 84 -#define GLFW_KEY_U 85 -#define GLFW_KEY_V 86 -#define GLFW_KEY_W 87 -#define GLFW_KEY_X 88 -#define GLFW_KEY_Y 89 -#define GLFW_KEY_Z 90 -#define GLFW_KEY_LEFT_BRACKET 91 /* [ */ -#define GLFW_KEY_BACKSLASH 92 /* \ */ -#define GLFW_KEY_RIGHT_BRACKET 93 /* ] */ -#define GLFW_KEY_GRAVE_ACCENT 96 /* ` */ -#define GLFW_KEY_WORLD_1 161 /* non-US #1 */ -#define GLFW_KEY_WORLD_2 162 /* non-US #2 */ - -/* Function keys */ -#define GLFW_KEY_ESCAPE 256 -#define GLFW_KEY_ENTER 257 -#define GLFW_KEY_TAB 258 -#define GLFW_KEY_BACKSPACE 259 -#define GLFW_KEY_INSERT 260 -#define GLFW_KEY_DELETE 261 -#define GLFW_KEY_RIGHT 262 -#define GLFW_KEY_LEFT 263 -#define GLFW_KEY_DOWN 264 -#define GLFW_KEY_UP 265 -#define GLFW_KEY_PAGE_UP 266 -#define GLFW_KEY_PAGE_DOWN 267 -#define GLFW_KEY_HOME 268 -#define GLFW_KEY_END 269 -#define GLFW_KEY_CAPS_LOCK 280 -#define GLFW_KEY_SCROLL_LOCK 281 -#define GLFW_KEY_NUM_LOCK 282 -#define GLFW_KEY_PRINT_SCREEN 283 -#define GLFW_KEY_PAUSE 284 -#define GLFW_KEY_F1 290 -#define GLFW_KEY_F2 291 -#define GLFW_KEY_F3 292 -#define GLFW_KEY_F4 293 -#define GLFW_KEY_F5 294 -#define GLFW_KEY_F6 295 -#define GLFW_KEY_F7 296 -#define GLFW_KEY_F8 297 -#define GLFW_KEY_F9 298 -#define GLFW_KEY_F10 299 -#define GLFW_KEY_F11 300 -#define GLFW_KEY_F12 301 -#define GLFW_KEY_F13 302 -#define GLFW_KEY_F14 303 -#define GLFW_KEY_F15 304 -#define GLFW_KEY_F16 305 -#define GLFW_KEY_F17 306 -#define GLFW_KEY_F18 307 -#define GLFW_KEY_F19 308 -#define GLFW_KEY_F20 309 -#define GLFW_KEY_F21 310 -#define GLFW_KEY_F22 311 -#define GLFW_KEY_F23 312 -#define GLFW_KEY_F24 313 -#define GLFW_KEY_F25 314 -#define GLFW_KEY_KP_0 320 -#define GLFW_KEY_KP_1 321 -#define GLFW_KEY_KP_2 322 -#define GLFW_KEY_KP_3 323 -#define GLFW_KEY_KP_4 324 -#define GLFW_KEY_KP_5 325 -#define GLFW_KEY_KP_6 326 -#define GLFW_KEY_KP_7 327 -#define GLFW_KEY_KP_8 328 -#define GLFW_KEY_KP_9 329 -#define GLFW_KEY_KP_DECIMAL 330 -#define GLFW_KEY_KP_DIVIDE 331 -#define GLFW_KEY_KP_MULTIPLY 332 -#define GLFW_KEY_KP_SUBTRACT 333 -#define GLFW_KEY_KP_ADD 334 -#define GLFW_KEY_KP_ENTER 335 -#define GLFW_KEY_KP_EQUAL 336 -#define GLFW_KEY_LEFT_SHIFT 340 -#define GLFW_KEY_LEFT_CONTROL 341 -#define GLFW_KEY_LEFT_ALT 342 -#define GLFW_KEY_LEFT_SUPER 343 -#define GLFW_KEY_RIGHT_SHIFT 344 -#define GLFW_KEY_RIGHT_CONTROL 345 -#define GLFW_KEY_RIGHT_ALT 346 -#define GLFW_KEY_RIGHT_SUPER 347 -#define GLFW_KEY_MENU 348 - -#define GLFW_KEY_LAST GLFW_KEY_MENU - -/*! @} */ - -/*! @defgroup mods Modifier key flags - * - * See [key input](@ref input_key) for how these are used. - * - * @ingroup input - * @{ */ - -/*! @brief If this bit is set one or more Shift keys were held down. - */ -#define GLFW_MOD_SHIFT 0x0001 -/*! @brief If this bit is set one or more Control keys were held down. - */ -#define GLFW_MOD_CONTROL 0x0002 -/*! @brief If this bit is set one or more Alt keys were held down. - */ -#define GLFW_MOD_ALT 0x0004 -/*! @brief If this bit is set one or more Super keys were held down. - */ -#define GLFW_MOD_SUPER 0x0008 - -/*! @} */ - -/*! @defgroup buttons Mouse buttons - * - * See [mouse button input](@ref input_mouse_button) for how these are used. - * - * @ingroup input - * @{ */ -#define GLFW_MOUSE_BUTTON_1 0 -#define GLFW_MOUSE_BUTTON_2 1 -#define GLFW_MOUSE_BUTTON_3 2 -#define GLFW_MOUSE_BUTTON_4 3 -#define GLFW_MOUSE_BUTTON_5 4 -#define GLFW_MOUSE_BUTTON_6 5 -#define GLFW_MOUSE_BUTTON_7 6 -#define GLFW_MOUSE_BUTTON_8 7 -#define GLFW_MOUSE_BUTTON_LAST GLFW_MOUSE_BUTTON_8 -#define GLFW_MOUSE_BUTTON_LEFT GLFW_MOUSE_BUTTON_1 -#define GLFW_MOUSE_BUTTON_RIGHT GLFW_MOUSE_BUTTON_2 -#define GLFW_MOUSE_BUTTON_MIDDLE GLFW_MOUSE_BUTTON_3 -/*! @} */ - -/*! @defgroup joysticks Joysticks - * - * See [joystick input](@ref joystick) for how these are used. - * - * @ingroup input - * @{ */ -#define GLFW_JOYSTICK_1 0 -#define GLFW_JOYSTICK_2 1 -#define GLFW_JOYSTICK_3 2 -#define GLFW_JOYSTICK_4 3 -#define GLFW_JOYSTICK_5 4 -#define GLFW_JOYSTICK_6 5 -#define GLFW_JOYSTICK_7 6 -#define GLFW_JOYSTICK_8 7 -#define GLFW_JOYSTICK_9 8 -#define GLFW_JOYSTICK_10 9 -#define GLFW_JOYSTICK_11 10 -#define GLFW_JOYSTICK_12 11 -#define GLFW_JOYSTICK_13 12 -#define GLFW_JOYSTICK_14 13 -#define GLFW_JOYSTICK_15 14 -#define GLFW_JOYSTICK_16 15 -#define GLFW_JOYSTICK_LAST GLFW_JOYSTICK_16 -/*! @} */ - -/*! @defgroup errors Error codes - * - * See [error handling](@ref error_handling) for how these are used. - * - * @ingroup init - * @{ */ -/*! @brief GLFW has not been initialized. - * - * This occurs if a GLFW function was called that must not be called unless the - * library is [initialized](@ref intro_init). - * - * @analysis Application programmer error. Initialize GLFW before calling any - * function that requires initialization. - */ -#define GLFW_NOT_INITIALIZED 0x00010001 -/*! @brief No context is current for this thread. - * - * This occurs if a GLFW function was called that needs and operates on the - * current OpenGL or OpenGL ES context but no context is current on the calling - * thread. One such function is @ref glfwSwapInterval. - * - * @analysis Application programmer error. Ensure a context is current before - * calling functions that require a current context. - */ -#define GLFW_NO_CURRENT_CONTEXT 0x00010002 -/*! @brief One of the arguments to the function was an invalid enum value. - * - * One of the arguments to the function was an invalid enum value, for example - * requesting [GLFW_RED_BITS](@ref window_hints_fb) with @ref - * glfwGetWindowAttrib. - * - * @analysis Application programmer error. Fix the offending call. - */ -#define GLFW_INVALID_ENUM 0x00010003 -/*! @brief One of the arguments to the function was an invalid value. - * - * One of the arguments to the function was an invalid value, for example - * requesting a non-existent OpenGL or OpenGL ES version like 2.7. - * - * Requesting a valid but unavailable OpenGL or OpenGL ES version will instead - * result in a @ref GLFW_VERSION_UNAVAILABLE error. - * - * @analysis Application programmer error. Fix the offending call. - */ -#define GLFW_INVALID_VALUE 0x00010004 -/*! @brief A memory allocation failed. - * - * A memory allocation failed. - * - * @analysis A bug in GLFW or the underlying operating system. Report the bug - * to our [issue tracker](https://github.com/glfw/glfw/issues). - */ -#define GLFW_OUT_OF_MEMORY 0x00010005 -/*! @brief GLFW could not find support for the requested API on the system. - * - * GLFW could not find support for the requested API on the system. - * - * @analysis The installed graphics driver does not support the requested - * API, or does not support it via the chosen context creation backend. - * Below are a few examples. - * - * @par - * Some pre-installed Windows graphics drivers do not support OpenGL. AMD only - * supports OpenGL ES via EGL, while Nvidia and Intel only support it via - * a WGL or GLX extension. OS X does not provide OpenGL ES at all. The Mesa - * EGL, OpenGL and OpenGL ES libraries do not interface with the Nvidia binary - * driver. Older graphics drivers do not support Vulkan. - */ -#define GLFW_API_UNAVAILABLE 0x00010006 -/*! @brief The requested OpenGL or OpenGL ES version is not available. - * - * The requested OpenGL or OpenGL ES version (including any requested context - * or framebuffer hints) is not available on this machine. - * - * @analysis The machine does not support your requirements. If your - * application is sufficiently flexible, downgrade your requirements and try - * again. Otherwise, inform the user that their machine does not match your - * requirements. - * - * @par - * Future invalid OpenGL and OpenGL ES versions, for example OpenGL 4.8 if 5.0 - * comes out before the 4.x series gets that far, also fail with this error and - * not @ref GLFW_INVALID_VALUE, because GLFW cannot know what future versions - * will exist. - */ -#define GLFW_VERSION_UNAVAILABLE 0x00010007 -/*! @brief A platform-specific error occurred that does not match any of the - * more specific categories. - * - * A platform-specific error occurred that does not match any of the more - * specific categories. - * - * @analysis A bug or configuration error in GLFW, the underlying operating - * system or its drivers, or a lack of required resources. Report the issue to - * our [issue tracker](https://github.com/glfw/glfw/issues). - */ -#define GLFW_PLATFORM_ERROR 0x00010008 -/*! @brief The requested format is not supported or available. - * - * If emitted during window creation, the requested pixel format is not - * supported. - * - * If emitted when querying the clipboard, the contents of the clipboard could - * not be converted to the requested format. - * - * @analysis If emitted during window creation, one or more - * [hard constraints](@ref window_hints_hard) did not match any of the - * available pixel formats. If your application is sufficiently flexible, - * downgrade your requirements and try again. Otherwise, inform the user that - * their machine does not match your requirements. - * - * @par - * If emitted when querying the clipboard, ignore the error or report it to - * the user, as appropriate. - */ -#define GLFW_FORMAT_UNAVAILABLE 0x00010009 -/*! @brief The specified window does not have an OpenGL or OpenGL ES context. - * - * A window that does not have an OpenGL or OpenGL ES context was passed to - * a function that requires it to have one. - * - * @analysis Application programmer error. Fix the offending call. - */ -#define GLFW_NO_WINDOW_CONTEXT 0x0001000A -/*! @} */ - -#define GLFW_FOCUSED 0x00020001 -#define GLFW_ICONIFIED 0x00020002 -#define GLFW_RESIZABLE 0x00020003 -#define GLFW_VISIBLE 0x00020004 -#define GLFW_DECORATED 0x00020005 -#define GLFW_AUTO_ICONIFY 0x00020006 -#define GLFW_FLOATING 0x00020007 -#define GLFW_MAXIMIZED 0x00020008 - -#define GLFW_RED_BITS 0x00021001 -#define GLFW_GREEN_BITS 0x00021002 -#define GLFW_BLUE_BITS 0x00021003 -#define GLFW_ALPHA_BITS 0x00021004 -#define GLFW_DEPTH_BITS 0x00021005 -#define GLFW_STENCIL_BITS 0x00021006 -#define GLFW_ACCUM_RED_BITS 0x00021007 -#define GLFW_ACCUM_GREEN_BITS 0x00021008 -#define GLFW_ACCUM_BLUE_BITS 0x00021009 -#define GLFW_ACCUM_ALPHA_BITS 0x0002100A -#define GLFW_AUX_BUFFERS 0x0002100B -#define GLFW_STEREO 0x0002100C -#define GLFW_SAMPLES 0x0002100D -#define GLFW_SRGB_CAPABLE 0x0002100E -#define GLFW_REFRESH_RATE 0x0002100F -#define GLFW_DOUBLEBUFFER 0x00021010 - -#define GLFW_CLIENT_API 0x00022001 -#define GLFW_CONTEXT_VERSION_MAJOR 0x00022002 -#define GLFW_CONTEXT_VERSION_MINOR 0x00022003 -#define GLFW_CONTEXT_REVISION 0x00022004 -#define GLFW_CONTEXT_ROBUSTNESS 0x00022005 -#define GLFW_OPENGL_FORWARD_COMPAT 0x00022006 -#define GLFW_OPENGL_DEBUG_CONTEXT 0x00022007 -#define GLFW_OPENGL_PROFILE 0x00022008 -#define GLFW_CONTEXT_RELEASE_BEHAVIOR 0x00022009 -#define GLFW_CONTEXT_NO_ERROR 0x0002200A - -#define GLFW_NO_API 0 -#define GLFW_OPENGL_API 0x00030001 -#define GLFW_OPENGL_ES_API 0x00030002 - -#define GLFW_NO_ROBUSTNESS 0 -#define GLFW_NO_RESET_NOTIFICATION 0x00031001 -#define GLFW_LOSE_CONTEXT_ON_RESET 0x00031002 - -#define GLFW_OPENGL_ANY_PROFILE 0 -#define GLFW_OPENGL_CORE_PROFILE 0x00032001 -#define GLFW_OPENGL_COMPAT_PROFILE 0x00032002 - -#define GLFW_CURSOR 0x00033001 -#define GLFW_STICKY_KEYS 0x00033002 -#define GLFW_STICKY_MOUSE_BUTTONS 0x00033003 - -#define GLFW_CURSOR_NORMAL 0x00034001 -#define GLFW_CURSOR_HIDDEN 0x00034002 -#define GLFW_CURSOR_DISABLED 0x00034003 - -#define GLFW_ANY_RELEASE_BEHAVIOR 0 -#define GLFW_RELEASE_BEHAVIOR_FLUSH 0x00035001 -#define GLFW_RELEASE_BEHAVIOR_NONE 0x00035002 - -/*! @defgroup shapes Standard cursor shapes - * - * See [standard cursor creation](@ref cursor_standard) for how these are used. - * - * @ingroup input - * @{ */ - -/*! @brief The regular arrow cursor shape. - * - * The regular arrow cursor. - */ -#define GLFW_ARROW_CURSOR 0x00036001 -/*! @brief The text input I-beam cursor shape. - * - * The text input I-beam cursor shape. - */ -#define GLFW_IBEAM_CURSOR 0x00036002 -/*! @brief The crosshair shape. - * - * The crosshair shape. - */ -#define GLFW_CROSSHAIR_CURSOR 0x00036003 -/*! @brief The hand shape. - * - * The hand shape. - */ -#define GLFW_HAND_CURSOR 0x00036004 -/*! @brief The horizontal resize arrow shape. - * - * The horizontal resize arrow shape. - */ -#define GLFW_HRESIZE_CURSOR 0x00036005 -/*! @brief The vertical resize arrow shape. - * - * The vertical resize arrow shape. - */ -#define GLFW_VRESIZE_CURSOR 0x00036006 -/*! @} */ - -#define GLFW_CONNECTED 0x00040001 -#define GLFW_DISCONNECTED 0x00040002 - -#define GLFW_DONT_CARE -1 - - -/************************************************************************* - * GLFW API types - *************************************************************************/ - -/*! @brief Client API function pointer type. - * - * Generic function pointer used for returning client API function pointers - * without forcing a cast from a regular pointer. - * - * @sa @ref context_glext - * @sa glfwGetProcAddress - * - * @since Added in version 3.0. - - * @ingroup context - */ -typedef void (*GLFWglproc)(void); - -/*! @brief Vulkan API function pointer type. - * - * Generic function pointer used for returning Vulkan API function pointers - * without forcing a cast from a regular pointer. - * - * @sa @ref vulkan_proc - * @sa glfwGetInstanceProcAddress - * - * @since Added in version 3.2. - * - * @ingroup vulkan - */ -typedef void (*GLFWvkproc)(void); - -/*! @brief Opaque monitor object. - * - * Opaque monitor object. - * - * @see @ref monitor_object - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -typedef struct GLFWmonitor GLFWmonitor; - -/*! @brief Opaque window object. - * - * Opaque window object. - * - * @see @ref window_object - * - * @since Added in version 3.0. - * - * @ingroup window - */ -typedef struct GLFWwindow GLFWwindow; - -/*! @brief Opaque cursor object. - * - * Opaque cursor object. - * - * @see @ref cursor_object - * - * @since Added in version 3.1. - * - * @ingroup cursor - */ -typedef struct GLFWcursor GLFWcursor; - -/*! @brief The function signature for error callbacks. - * - * This is the function signature for error callback functions. - * - * @param[in] error An [error code](@ref errors). - * @param[in] description A UTF-8 encoded string describing the error. - * - * @sa @ref error_handling - * @sa glfwSetErrorCallback - * - * @since Added in version 3.0. - * - * @ingroup init - */ -typedef void (* GLFWerrorfun)(int,const char*); - -/*! @brief The function signature for window position callbacks. - * - * This is the function signature for window position callback functions. - * - * @param[in] window The window that was moved. - * @param[in] xpos The new x-coordinate, in screen coordinates, of the - * upper-left corner of the client area of the window. - * @param[in] ypos The new y-coordinate, in screen coordinates, of the - * upper-left corner of the client area of the window. - * - * @sa @ref window_pos - * @sa glfwSetWindowPosCallback - * - * @since Added in version 3.0. - * - * @ingroup window - */ -typedef void (* GLFWwindowposfun)(GLFWwindow*,int,int); - -/*! @brief The function signature for window resize callbacks. - * - * This is the function signature for window size callback functions. - * - * @param[in] window The window that was resized. - * @param[in] width The new width, in screen coordinates, of the window. - * @param[in] height The new height, in screen coordinates, of the window. - * - * @sa @ref window_size - * @sa glfwSetWindowSizeCallback - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter. - * - * @ingroup window - */ -typedef void (* GLFWwindowsizefun)(GLFWwindow*,int,int); - -/*! @brief The function signature for window close callbacks. - * - * This is the function signature for window close callback functions. - * - * @param[in] window The window that the user attempted to close. - * - * @sa @ref window_close - * @sa glfwSetWindowCloseCallback - * - * @since Added in version 2.5. - * @glfw3 Added window handle parameter. - * - * @ingroup window - */ -typedef void (* GLFWwindowclosefun)(GLFWwindow*); - -/*! @brief The function signature for window content refresh callbacks. - * - * This is the function signature for window refresh callback functions. - * - * @param[in] window The window whose content needs to be refreshed. - * - * @sa @ref window_refresh - * @sa glfwSetWindowRefreshCallback - * - * @since Added in version 2.5. - * @glfw3 Added window handle parameter. - * - * @ingroup window - */ -typedef void (* GLFWwindowrefreshfun)(GLFWwindow*); - -/*! @brief The function signature for window focus/defocus callbacks. - * - * This is the function signature for window focus callback functions. - * - * @param[in] window The window that gained or lost input focus. - * @param[in] focused `GLFW_TRUE` if the window was given input focus, or - * `GLFW_FALSE` if it lost it. - * - * @sa @ref window_focus - * @sa glfwSetWindowFocusCallback - * - * @since Added in version 3.0. - * - * @ingroup window - */ -typedef void (* GLFWwindowfocusfun)(GLFWwindow*,int); - -/*! @brief The function signature for window iconify/restore callbacks. - * - * This is the function signature for window iconify/restore callback - * functions. - * - * @param[in] window The window that was iconified or restored. - * @param[in] iconified `GLFW_TRUE` if the window was iconified, or - * `GLFW_FALSE` if it was restored. - * - * @sa @ref window_iconify - * @sa glfwSetWindowIconifyCallback - * - * @since Added in version 3.0. - * - * @ingroup window - */ -typedef void (* GLFWwindowiconifyfun)(GLFWwindow*,int); - -/*! @brief The function signature for framebuffer resize callbacks. - * - * This is the function signature for framebuffer resize callback - * functions. - * - * @param[in] window The window whose framebuffer was resized. - * @param[in] width The new width, in pixels, of the framebuffer. - * @param[in] height The new height, in pixels, of the framebuffer. - * - * @sa @ref window_fbsize - * @sa glfwSetFramebufferSizeCallback - * - * @since Added in version 3.0. - * - * @ingroup window - */ -typedef void (* GLFWframebuffersizefun)(GLFWwindow*,int,int); - -/*! @brief The function signature for mouse button callbacks. - * - * This is the function signature for mouse button callback functions. - * - * @param[in] window The window that received the event. - * @param[in] button The [mouse button](@ref buttons) that was pressed or - * released. - * @param[in] action One of `GLFW_PRESS` or `GLFW_RELEASE`. - * @param[in] mods Bit field describing which [modifier keys](@ref mods) were - * held down. - * - * @sa @ref input_mouse_button - * @sa glfwSetMouseButtonCallback - * - * @since Added in version 1.0. - * @glfw3 Added window handle and modifier mask parameters. - * - * @ingroup input - */ -typedef void (* GLFWmousebuttonfun)(GLFWwindow*,int,int,int); - -/*! @brief The function signature for cursor position callbacks. - * - * This is the function signature for cursor position callback functions. - * - * @param[in] window The window that received the event. - * @param[in] xpos The new cursor x-coordinate, relative to the left edge of - * the client area. - * @param[in] ypos The new cursor y-coordinate, relative to the top edge of the - * client area. - * - * @sa @ref cursor_pos - * @sa glfwSetCursorPosCallback - * - * @since Added in version 3.0. Replaces `GLFWmouseposfun`. - * - * @ingroup input - */ -typedef void (* GLFWcursorposfun)(GLFWwindow*,double,double); - -/*! @brief The function signature for cursor enter/leave callbacks. - * - * This is the function signature for cursor enter/leave callback functions. - * - * @param[in] window The window that received the event. - * @param[in] entered `GLFW_TRUE` if the cursor entered the window's client - * area, or `GLFW_FALSE` if it left it. - * - * @sa @ref cursor_enter - * @sa glfwSetCursorEnterCallback - * - * @since Added in version 3.0. - * - * @ingroup input - */ -typedef void (* GLFWcursorenterfun)(GLFWwindow*,int); - -/*! @brief The function signature for scroll callbacks. - * - * This is the function signature for scroll callback functions. - * - * @param[in] window The window that received the event. - * @param[in] xoffset The scroll offset along the x-axis. - * @param[in] yoffset The scroll offset along the y-axis. - * - * @sa @ref scrolling - * @sa glfwSetScrollCallback - * - * @since Added in version 3.0. Replaces `GLFWmousewheelfun`. - * - * @ingroup input - */ -typedef void (* GLFWscrollfun)(GLFWwindow*,double,double); - -/*! @brief The function signature for keyboard key callbacks. - * - * This is the function signature for keyboard key callback functions. - * - * @param[in] window The window that received the event. - * @param[in] key The [keyboard key](@ref keys) that was pressed or released. - * @param[in] scancode The system-specific scancode of the key. - * @param[in] action `GLFW_PRESS`, `GLFW_RELEASE` or `GLFW_REPEAT`. - * @param[in] mods Bit field describing which [modifier keys](@ref mods) were - * held down. - * - * @sa @ref input_key - * @sa glfwSetKeyCallback - * - * @since Added in version 1.0. - * @glfw3 Added window handle, scancode and modifier mask parameters. - * - * @ingroup input - */ -typedef void (* GLFWkeyfun)(GLFWwindow*,int,int,int,int); - -/*! @brief The function signature for Unicode character callbacks. - * - * This is the function signature for Unicode character callback functions. - * - * @param[in] window The window that received the event. - * @param[in] codepoint The Unicode code point of the character. - * - * @sa @ref input_char - * @sa glfwSetCharCallback - * - * @since Added in version 2.4. - * @glfw3 Added window handle parameter. - * - * @ingroup input - */ -typedef void (* GLFWcharfun)(GLFWwindow*,unsigned int); - -/*! @brief The function signature for Unicode character with modifiers - * callbacks. - * - * This is the function signature for Unicode character with modifiers callback - * functions. It is called for each input character, regardless of what - * modifier keys are held down. - * - * @param[in] window The window that received the event. - * @param[in] codepoint The Unicode code point of the character. - * @param[in] mods Bit field describing which [modifier keys](@ref mods) were - * held down. - * - * @sa @ref input_char - * @sa glfwSetCharModsCallback - * - * @since Added in version 3.1. - * - * @ingroup input - */ -typedef void (* GLFWcharmodsfun)(GLFWwindow*,unsigned int,int); - -/*! @brief The function signature for file drop callbacks. - * - * This is the function signature for file drop callbacks. - * - * @param[in] window The window that received the event. - * @param[in] count The number of dropped files. - * @param[in] paths The UTF-8 encoded file and/or directory path names. - * - * @sa @ref path_drop - * @sa glfwSetDropCallback - * - * @since Added in version 3.1. - * - * @ingroup input - */ -typedef void (* GLFWdropfun)(GLFWwindow*,int,const char**); - -/*! @brief The function signature for monitor configuration callbacks. - * - * This is the function signature for monitor configuration callback functions. - * - * @param[in] monitor The monitor that was connected or disconnected. - * @param[in] event One of `GLFW_CONNECTED` or `GLFW_DISCONNECTED`. - * - * @sa @ref monitor_event - * @sa glfwSetMonitorCallback - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -typedef void (* GLFWmonitorfun)(GLFWmonitor*,int); - -/*! @brief The function signature for joystick configuration callbacks. - * - * This is the function signature for joystick configuration callback - * functions. - * - * @param[in] joy The joystick that was connected or disconnected. - * @param[in] event One of `GLFW_CONNECTED` or `GLFW_DISCONNECTED`. - * - * @sa @ref joystick_event - * @sa glfwSetJoystickCallback - * - * @since Added in version 3.2. - * - * @ingroup input - */ -typedef void (* GLFWjoystickfun)(int,int); - -/*! @brief Video mode type. - * - * This describes a single video mode. - * - * @sa @ref monitor_modes - * @sa glfwGetVideoMode glfwGetVideoModes - * - * @since Added in version 1.0. - * @glfw3 Added refresh rate member. - * - * @ingroup monitor - */ -typedef struct GLFWvidmode -{ - /*! The width, in screen coordinates, of the video mode. - */ - int width; - /*! The height, in screen coordinates, of the video mode. - */ - int height; - /*! The bit depth of the red channel of the video mode. - */ - int redBits; - /*! The bit depth of the green channel of the video mode. - */ - int greenBits; - /*! The bit depth of the blue channel of the video mode. - */ - int blueBits; - /*! The refresh rate, in Hz, of the video mode. - */ - int refreshRate; -} GLFWvidmode; - -/*! @brief Gamma ramp. - * - * This describes the gamma ramp for a monitor. - * - * @sa @ref monitor_gamma - * @sa glfwGetGammaRamp glfwSetGammaRamp - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -typedef struct GLFWgammaramp -{ - /*! An array of value describing the response of the red channel. - */ - unsigned short* red; - /*! An array of value describing the response of the green channel. - */ - unsigned short* green; - /*! An array of value describing the response of the blue channel. - */ - unsigned short* blue; - /*! The number of elements in each array. - */ - unsigned int size; -} GLFWgammaramp; - -/*! @brief Image data. - * - * @sa @ref cursor_custom - * - * @since Added in version 2.1. - * @glfw3 Removed format and bytes-per-pixel members. - */ -typedef struct GLFWimage -{ - /*! The width, in pixels, of this image. - */ - int width; - /*! The height, in pixels, of this image. - */ - int height; - /*! The pixel data of this image, arranged left-to-right, top-to-bottom. - */ - unsigned char* pixels; -} GLFWimage; - - -/************************************************************************* - * GLFW API functions - *************************************************************************/ - -/*! @brief Initializes the GLFW library. - * - * This function initializes the GLFW library. Before most GLFW functions can - * be used, GLFW must be initialized, and before an application terminates GLFW - * should be terminated in order to free any resources allocated during or - * after initialization. - * - * If this function fails, it calls @ref glfwTerminate before returning. If it - * succeeds, you should call @ref glfwTerminate before the application exits. - * - * Additional calls to this function after successful initialization but before - * termination will return `GLFW_TRUE` immediately. - * - * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_PLATFORM_ERROR. - * - * @remark @osx This function will change the current directory of the - * application to the `Contents/Resources` subdirectory of the application's - * bundle, if present. This can be disabled with a - * [compile-time option](@ref compile_options_osx). - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref intro_init - * @sa glfwTerminate - * - * @since Added in version 1.0. - * - * @ingroup init - */ -GLFWAPI int glfwInit(void); - -/*! @brief Terminates the GLFW library. - * - * This function destroys all remaining windows and cursors, restores any - * modified gamma ramps and frees any other allocated resources. Once this - * function is called, you must again call @ref glfwInit successfully before - * you will be able to use most GLFW functions. - * - * If GLFW has been successfully initialized, this function should be called - * before the application exits. If initialization fails, there is no need to - * call this function, as it is called by @ref glfwInit before it returns - * failure. - * - * @errors Possible errors include @ref GLFW_PLATFORM_ERROR. - * - * @remark This function may be called before @ref glfwInit. - * - * @warning The contexts of any remaining windows must not be current on any - * other thread when this function is called. - * - * @reentrancy This function must not be called from a callback. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref intro_init - * @sa glfwInit - * - * @since Added in version 1.0. - * - * @ingroup init - */ -GLFWAPI void glfwTerminate(void); - -/*! @brief Retrieves the version of the GLFW library. - * - * This function retrieves the major, minor and revision numbers of the GLFW - * library. It is intended for when you are using GLFW as a shared library and - * want to ensure that you are using the minimum required version. - * - * Any or all of the version arguments may be `NULL`. - * - * @param[out] major Where to store the major version number, or `NULL`. - * @param[out] minor Where to store the minor version number, or `NULL`. - * @param[out] rev Where to store the revision number, or `NULL`. - * - * @errors None. - * - * @remark This function may be called before @ref glfwInit. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref intro_version - * @sa glfwGetVersionString - * - * @since Added in version 1.0. - * - * @ingroup init - */ -GLFWAPI void glfwGetVersion(int* major, int* minor, int* rev); - -/*! @brief Returns a string describing the compile-time configuration. - * - * This function returns the compile-time generated - * [version string](@ref intro_version_string) of the GLFW library binary. It - * describes the version, platform, compiler and any platform-specific - * compile-time options. It should not be confused with the OpenGL or OpenGL - * ES version string, queried with `glGetString`. - * - * __Do not use the version string__ to parse the GLFW library version. The - * @ref glfwGetVersion function provides the version of the running library - * binary in numerical format. - * - * @return The ASCII encoded GLFW version string. - * - * @errors None. - * - * @remark This function may be called before @ref glfwInit. - * - * @pointer_lifetime The returned string is static and compile-time generated. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref intro_version - * @sa glfwGetVersion - * - * @since Added in version 3.0. - * - * @ingroup init - */ -GLFWAPI const char* glfwGetVersionString(void); - -/*! @brief Sets the error callback. - * - * This function sets the error callback, which is called with an error code - * and a human-readable description each time a GLFW error occurs. - * - * The error callback is called on the thread where the error occurred. If you - * are using GLFW from multiple threads, your error callback needs to be - * written accordingly. - * - * Because the description string may have been generated specifically for that - * error, it is not guaranteed to be valid after the callback has returned. If - * you wish to use it after the callback returns, you need to make a copy. - * - * Once set, the error callback remains set even after the library has been - * terminated. - * - * @param[in] cbfun The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set. - * - * @errors None. - * - * @remark This function may be called before @ref glfwInit. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref error_handling - * - * @since Added in version 3.0. - * - * @ingroup init - */ -GLFWAPI GLFWerrorfun glfwSetErrorCallback(GLFWerrorfun cbfun); - -/*! @brief Returns the currently connected monitors. - * - * This function returns an array of handles for all currently connected - * monitors. The primary monitor is always first in the returned array. If no - * monitors were found, this function returns `NULL`. - * - * @param[out] count Where to store the number of monitors in the returned - * array. This is set to zero if an error occurred. - * @return An array of monitor handles, or `NULL` if no monitors were found or - * if an [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @pointer_lifetime The returned array is allocated and freed by GLFW. You - * should not free it yourself. It is guaranteed to be valid only until the - * monitor configuration changes or the library is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_monitors - * @sa @ref monitor_event - * @sa glfwGetPrimaryMonitor - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -GLFWAPI GLFWmonitor** glfwGetMonitors(int* count); - -/*! @brief Returns the primary monitor. - * - * This function returns the primary monitor. This is usually the monitor - * where elements like the task bar or global menu bar are located. - * - * @return The primary monitor, or `NULL` if no monitors were found or if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @remark The primary monitor is always first in the array returned by @ref - * glfwGetMonitors. - * - * @sa @ref monitor_monitors - * @sa glfwGetMonitors - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -GLFWAPI GLFWmonitor* glfwGetPrimaryMonitor(void); - -/*! @brief Returns the position of the monitor's viewport on the virtual screen. - * - * This function returns the position, in screen coordinates, of the upper-left - * corner of the specified monitor. - * - * Any or all of the position arguments may be `NULL`. If an error occurs, all - * non-`NULL` position arguments will be set to zero. - * - * @param[in] monitor The monitor to query. - * @param[out] xpos Where to store the monitor x-coordinate, or `NULL`. - * @param[out] ypos Where to store the monitor y-coordinate, or `NULL`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_properties - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -GLFWAPI void glfwGetMonitorPos(GLFWmonitor* monitor, int* xpos, int* ypos); - -/*! @brief Returns the physical size of the monitor. - * - * This function returns the size, in millimetres, of the display area of the - * specified monitor. - * - * Some systems do not provide accurate monitor size information, either - * because the monitor - * [EDID](https://en.wikipedia.org/wiki/Extended_display_identification_data) - * data is incorrect or because the driver does not report it accurately. - * - * Any or all of the size arguments may be `NULL`. If an error occurs, all - * non-`NULL` size arguments will be set to zero. - * - * @param[in] monitor The monitor to query. - * @param[out] widthMM Where to store the width, in millimetres, of the - * monitor's display area, or `NULL`. - * @param[out] heightMM Where to store the height, in millimetres, of the - * monitor's display area, or `NULL`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @remark @win32 calculates the returned physical size from the - * current resolution and system DPI instead of querying the monitor EDID data. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_properties - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -GLFWAPI void glfwGetMonitorPhysicalSize(GLFWmonitor* monitor, int* widthMM, int* heightMM); - -/*! @brief Returns the name of the specified monitor. - * - * This function returns a human-readable name, encoded as UTF-8, of the - * specified monitor. The name typically reflects the make and model of the - * monitor and is not guaranteed to be unique among the connected monitors. - * - * @param[in] monitor The monitor to query. - * @return The UTF-8 encoded name of the monitor, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @pointer_lifetime The returned string is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the specified monitor is - * disconnected or the library is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_properties - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -GLFWAPI const char* glfwGetMonitorName(GLFWmonitor* monitor); - -/*! @brief Sets the monitor configuration callback. - * - * This function sets the monitor configuration callback, or removes the - * currently set callback. This is called when a monitor is connected to or - * disconnected from the system. - * - * @param[in] cbfun The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_event - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -GLFWAPI GLFWmonitorfun glfwSetMonitorCallback(GLFWmonitorfun cbfun); - -/*! @brief Returns the available video modes for the specified monitor. - * - * This function returns an array of all video modes supported by the specified - * monitor. The returned array is sorted in ascending order, first by color - * bit depth (the sum of all channel depths) and then by resolution area (the - * product of width and height). - * - * @param[in] monitor The monitor to query. - * @param[out] count Where to store the number of video modes in the returned - * array. This is set to zero if an error occurred. - * @return An array of video modes, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The returned array is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the specified monitor is - * disconnected, this function is called again for that monitor or the library - * is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_modes - * @sa glfwGetVideoMode - * - * @since Added in version 1.0. - * @glfw3 Changed to return an array of modes for a specific monitor. - * - * @ingroup monitor - */ -GLFWAPI const GLFWvidmode* glfwGetVideoModes(GLFWmonitor* monitor, int* count); - -/*! @brief Returns the current mode of the specified monitor. - * - * This function returns the current video mode of the specified monitor. If - * you have created a full screen window for that monitor, the return value - * will depend on whether that window is iconified. - * - * @param[in] monitor The monitor to query. - * @return The current mode of the monitor, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The returned array is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the specified monitor is - * disconnected or the library is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_modes - * @sa glfwGetVideoModes - * - * @since Added in version 3.0. Replaces `glfwGetDesktopMode`. - * - * @ingroup monitor - */ -GLFWAPI const GLFWvidmode* glfwGetVideoMode(GLFWmonitor* monitor); - -/*! @brief Generates a gamma ramp and sets it for the specified monitor. - * - * This function generates a 256-element gamma ramp from the specified exponent - * and then calls @ref glfwSetGammaRamp with it. The value must be a finite - * number greater than zero. - * - * @param[in] monitor The monitor whose gamma ramp to set. - * @param[in] gamma The desired exponent. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_gamma - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -GLFWAPI void glfwSetGamma(GLFWmonitor* monitor, float gamma); - -/*! @brief Returns the current gamma ramp for the specified monitor. - * - * This function returns the current gamma ramp of the specified monitor. - * - * @param[in] monitor The monitor to query. - * @return The current gamma ramp, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The returned structure and its arrays are allocated and - * freed by GLFW. You should not free them yourself. They are valid until the - * specified monitor is disconnected, this function is called again for that - * monitor or the library is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_gamma - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -GLFWAPI const GLFWgammaramp* glfwGetGammaRamp(GLFWmonitor* monitor); - -/*! @brief Sets the current gamma ramp for the specified monitor. - * - * This function sets the current gamma ramp for the specified monitor. The - * original gamma ramp for that monitor is saved by GLFW the first time this - * function is called and is restored by @ref glfwTerminate. - * - * @param[in] monitor The monitor whose gamma ramp to set. - * @param[in] ramp The gamma ramp to use. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @remark Gamma ramp sizes other than 256 are not supported by all platforms - * or graphics hardware. - * - * @remark @win32 The gamma ramp size must be 256. - * - * @pointer_lifetime The specified gamma ramp is copied before this function - * returns. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_gamma - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -GLFWAPI void glfwSetGammaRamp(GLFWmonitor* monitor, const GLFWgammaramp* ramp); - -/*! @brief Resets all window hints to their default values. - * - * This function resets all window hints to their - * [default values](@ref window_hints_values). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_hints - * @sa glfwWindowHint - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI void glfwDefaultWindowHints(void); - -/*! @brief Sets the specified window hint to the desired value. - * - * This function sets hints for the next call to @ref glfwCreateWindow. The - * hints, once set, retain their values until changed by a call to @ref - * glfwWindowHint or @ref glfwDefaultWindowHints, or until the library is - * terminated. - * - * This function does not check whether the specified hint values are valid. - * If you set hints to invalid values this will instead be reported by the next - * call to @ref glfwCreateWindow. - * - * @param[in] hint The [window hint](@ref window_hints) to set. - * @param[in] value The new value of the window hint. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_INVALID_ENUM. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_hints - * @sa glfwDefaultWindowHints - * - * @since Added in version 3.0. Replaces `glfwOpenWindowHint`. - * - * @ingroup window - */ -GLFWAPI void glfwWindowHint(int hint, int value); - -/*! @brief Creates a window and its associated context. - * - * This function creates a window and its associated OpenGL or OpenGL ES - * context. Most of the options controlling how the window and its context - * should be created are specified with [window hints](@ref window_hints). - * - * Successful creation does not change which context is current. Before you - * can use the newly created context, you need to - * [make it current](@ref context_current). For information about the `share` - * parameter, see @ref context_sharing. - * - * The created window, framebuffer and context may differ from what you - * requested, as not all parameters and hints are - * [hard constraints](@ref window_hints_hard). This includes the size of the - * window, especially for full screen windows. To query the actual attributes - * of the created window, framebuffer and context, see @ref - * glfwGetWindowAttrib, @ref glfwGetWindowSize and @ref glfwGetFramebufferSize. - * - * To create a full screen window, you need to specify the monitor the window - * will cover. If no monitor is specified, the window will be windowed mode. - * Unless you have a way for the user to choose a specific monitor, it is - * recommended that you pick the primary monitor. For more information on how - * to query connected monitors, see @ref monitor_monitors. - * - * For full screen windows, the specified size becomes the resolution of the - * window's _desired video mode_. As long as a full screen window is not - * iconified, the supported video mode most closely matching the desired video - * mode is set for the specified monitor. For more information about full - * screen windows, including the creation of so called _windowed full screen_ - * or _borderless full screen_ windows, see @ref window_windowed_full_screen. - * - * By default, newly created windows use the placement recommended by the - * window system. To create the window at a specific position, make it - * initially invisible using the [GLFW_VISIBLE](@ref window_hints_wnd) window - * hint, set its [position](@ref window_pos) and then [show](@ref window_hide) - * it. - * - * As long as at least one full screen window is not iconified, the screensaver - * is prohibited from starting. - * - * Window systems put limits on window sizes. Very large or very small window - * dimensions may be overridden by the window system on creation. Check the - * actual [size](@ref window_size) after creation. - * - * The [swap interval](@ref buffer_swap) is not set during window creation and - * the initial value may vary depending on driver settings and defaults. - * - * @param[in] width The desired width, in screen coordinates, of the window. - * This must be greater than zero. - * @param[in] height The desired height, in screen coordinates, of the window. - * This must be greater than zero. - * @param[in] title The initial, UTF-8 encoded window title. - * @param[in] monitor The monitor to use for full screen mode, or `NULL` for - * windowed mode. - * @param[in] share The window whose context to share resources with, or `NULL` - * to not share resources. - * @return The handle of the created window, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_ENUM, @ref GLFW_INVALID_VALUE, @ref GLFW_API_UNAVAILABLE, @ref - * GLFW_VERSION_UNAVAILABLE, @ref GLFW_FORMAT_UNAVAILABLE and @ref - * GLFW_PLATFORM_ERROR. - * - * @remark @win32 Window creation will fail if the Microsoft GDI software - * OpenGL implementation is the only one available. - * - * @remark @win32 If the executable has an icon resource named `GLFW_ICON,` - * it will be set as the icon for the window. If no such icon is present, the - * `IDI_WINLOGO` icon will be used instead. - * - * @remark @win32 The context to share resources with must not be current on - * any other thread. - * - * @remark @osx The GLFW window has no icon, as it is not a document - * window, but the dock icon will be the same as the application bundle's icon. - * For more information on bundles, see the - * [Bundle Programming Guide](https://developer.apple.com/library/mac/documentation/CoreFoundation/Conceptual/CFBundles/) - * in the Mac Developer Library. - * - * @remark @osx The first time a window is created the menu bar is populated - * with common commands like Hide, Quit and About. The About entry opens - * a minimal about dialog with information from the application's bundle. The - * menu bar can be disabled with a - * [compile-time option](@ref compile_options_osx). - * - * @remark @osx On OS X 10.10 and later the window frame will not be rendered - * at full resolution on Retina displays unless the `NSHighResolutionCapable` - * key is enabled in the application bundle's `Info.plist`. For more - * information, see - * [High Resolution Guidelines for OS X](https://developer.apple.com/library/mac/documentation/GraphicsAnimation/Conceptual/HighResolutionOSX/Explained/Explained.html) - * in the Mac Developer Library. The GLFW test and example programs use - * a custom `Info.plist` template for this, which can be found as - * `CMake/MacOSXBundleInfo.plist.in` in the source tree. - * - * @remark @x11 There is no mechanism for setting the window icon yet. - * - * @remark @x11 Some window managers will not respect the placement of - * initially hidden windows. - * - * @remark @x11 Due to the asynchronous nature of X11, it may take a moment for - * a window to reach its requested state. This means you may not be able to - * query the final size, position or other attributes directly after window - * creation. - * - * @reentrancy This function must not be called from a callback. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_creation - * @sa glfwDestroyWindow - * - * @since Added in version 3.0. Replaces `glfwOpenWindow`. - * - * @ingroup window - */ -GLFWAPI GLFWwindow* glfwCreateWindow(int width, int height, const char* title, GLFWmonitor* monitor, GLFWwindow* share); - -/*! @brief Destroys the specified window and its context. - * - * This function destroys the specified window and its context. On calling - * this function, no further callbacks will be called for that window. - * - * If the context of the specified window is current on the main thread, it is - * detached before being destroyed. - * - * @param[in] window The window to destroy. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @note The context of the specified window must not be current on any other - * thread when this function is called. - * - * @reentrancy This function must not be called from a callback. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_creation - * @sa glfwCreateWindow - * - * @since Added in version 3.0. Replaces `glfwCloseWindow`. - * - * @ingroup window - */ -GLFWAPI void glfwDestroyWindow(GLFWwindow* window); - -/*! @brief Checks the close flag of the specified window. - * - * This function returns the value of the close flag of the specified window. - * - * @param[in] window The window to query. - * @return The value of the close flag. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @sa @ref window_close - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI int glfwWindowShouldClose(GLFWwindow* window); - -/*! @brief Sets the close flag of the specified window. - * - * This function sets the value of the close flag of the specified window. - * This can be used to override the user's attempt to close the window, or - * to signal that it should be closed. - * - * @param[in] window The window whose flag to change. - * @param[in] value The new value. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @sa @ref window_close - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI void glfwSetWindowShouldClose(GLFWwindow* window, int value); - -/*! @brief Sets the title of the specified window. - * - * This function sets the window title, encoded as UTF-8, of the specified - * window. - * - * @param[in] window The window whose title to change. - * @param[in] title The UTF-8 encoded window title. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @remark @osx The window title will not be updated until the next time you - * process events. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_title - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter. - * - * @ingroup window - */ -GLFWAPI void glfwSetWindowTitle(GLFWwindow* window, const char* title); - -/*! @brief Sets the icon for the specified window. - * - * This function sets the icon of the specified window. If passed an array of - * candidate images, those of or closest to the sizes desired by the system are - * selected. If no images are specified, the window reverts to its default - * icon. - * - * The desired image sizes varies depending on platform and system settings. - * The selected images will be rescaled as needed. Good sizes include 16x16, - * 32x32 and 48x48. - * - * @param[in] window The window whose icon to set. - * @param[in] count The number of images in the specified array, or zero to - * revert to the default window icon. - * @param[in] images The images to create the icon from. This is ignored if - * count is zero. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The specified image data is copied before this function - * returns. - * - * @remark @osx The GLFW window has no icon, as it is not a document - * window, but the dock icon will be the same as the application bundle's icon. - * For more information on bundles, see the - * [Bundle Programming Guide](https://developer.apple.com/library/mac/documentation/CoreFoundation/Conceptual/CFBundles/) - * in the Mac Developer Library. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_icon - * - * @since Added in version 3.2. - * - * @ingroup window - */ -GLFWAPI void glfwSetWindowIcon(GLFWwindow* window, int count, const GLFWimage* images); - -/*! @brief Retrieves the position of the client area of the specified window. - * - * This function retrieves the position, in screen coordinates, of the - * upper-left corner of the client area of the specified window. - * - * Any or all of the position arguments may be `NULL`. If an error occurs, all - * non-`NULL` position arguments will be set to zero. - * - * @param[in] window The window to query. - * @param[out] xpos Where to store the x-coordinate of the upper-left corner of - * the client area, or `NULL`. - * @param[out] ypos Where to store the y-coordinate of the upper-left corner of - * the client area, or `NULL`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_pos - * @sa glfwSetWindowPos - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI void glfwGetWindowPos(GLFWwindow* window, int* xpos, int* ypos); - -/*! @brief Sets the position of the client area of the specified window. - * - * This function sets the position, in screen coordinates, of the upper-left - * corner of the client area of the specified windowed mode window. If the - * window is a full screen window, this function does nothing. - * - * __Do not use this function__ to move an already visible window unless you - * have very good reasons for doing so, as it will confuse and annoy the user. - * - * The window manager may put limits on what positions are allowed. GLFW - * cannot and should not override these limits. - * - * @param[in] window The window to query. - * @param[in] xpos The x-coordinate of the upper-left corner of the client area. - * @param[in] ypos The y-coordinate of the upper-left corner of the client area. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_pos - * @sa glfwGetWindowPos - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter. - * - * @ingroup window - */ -GLFWAPI void glfwSetWindowPos(GLFWwindow* window, int xpos, int ypos); - -/*! @brief Retrieves the size of the client area of the specified window. - * - * This function retrieves the size, in screen coordinates, of the client area - * of the specified window. If you wish to retrieve the size of the - * framebuffer of the window in pixels, see @ref glfwGetFramebufferSize. - * - * Any or all of the size arguments may be `NULL`. If an error occurs, all - * non-`NULL` size arguments will be set to zero. - * - * @param[in] window The window whose size to retrieve. - * @param[out] width Where to store the width, in screen coordinates, of the - * client area, or `NULL`. - * @param[out] height Where to store the height, in screen coordinates, of the - * client area, or `NULL`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_size - * @sa glfwSetWindowSize - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter. - * - * @ingroup window - */ -GLFWAPI void glfwGetWindowSize(GLFWwindow* window, int* width, int* height); - -/*! @brief Sets the size limits of the specified window. - * - * This function sets the size limits of the client area of the specified - * window. If the window is full screen, the size limits only take effect if - * once it is made windowed. If the window is not resizable, this function - * does nothing. - * - * The size limits are applied immediately to a windowed mode window and may - * cause it to be resized. - * - * @param[in] window The window to set limits for. - * @param[in] minwidth The minimum width, in screen coordinates, of the client - * area, or `GLFW_DONT_CARE`. - * @param[in] minheight The minimum height, in screen coordinates, of the - * client area, or `GLFW_DONT_CARE`. - * @param[in] maxwidth The maximum width, in screen coordinates, of the client - * area, or `GLFW_DONT_CARE`. - * @param[in] maxheight The maximum height, in screen coordinates, of the - * client area, or `GLFW_DONT_CARE`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @remark If you set size limits and an aspect ratio that conflict, the - * results are undefined. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_sizelimits - * @sa glfwSetWindowAspectRatio - * - * @since Added in version 3.2. - * - * @ingroup window - */ -GLFWAPI void glfwSetWindowSizeLimits(GLFWwindow* window, int minwidth, int minheight, int maxwidth, int maxheight); - -/*! @brief Sets the aspect ratio of the specified window. - * - * This function sets the required aspect ratio of the client area of the - * specified window. If the window is full screen, the aspect ratio only takes - * effect once it is made windowed. If the window is not resizable, this - * function does nothing. - * - * The aspect ratio is specified as a numerator and a denominator and both - * values must be greater than zero. For example, the common 16:9 aspect ratio - * is specified as 16 and 9, respectively. - * - * If the numerator and denominator is set to `GLFW_DONT_CARE` then the aspect - * ratio limit is disabled. - * - * The aspect ratio is applied immediately to a windowed mode window and may - * cause it to be resized. - * - * @param[in] window The window to set limits for. - * @param[in] numer The numerator of the desired aspect ratio, or - * `GLFW_DONT_CARE`. - * @param[in] denom The denominator of the desired aspect ratio, or - * `GLFW_DONT_CARE`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR. - * - * @remark If you set size limits and an aspect ratio that conflict, the - * results are undefined. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_sizelimits - * @sa glfwSetWindowSizeLimits - * - * @since Added in version 3.2. - * - * @ingroup window - */ -GLFWAPI void glfwSetWindowAspectRatio(GLFWwindow* window, int numer, int denom); - -/*! @brief Sets the size of the client area of the specified window. - * - * This function sets the size, in screen coordinates, of the client area of - * the specified window. - * - * For full screen windows, this function updates the resolution of its desired - * video mode and switches to the video mode closest to it, without affecting - * the window's context. As the context is unaffected, the bit depths of the - * framebuffer remain unchanged. - * - * If you wish to update the refresh rate of the desired video mode in addition - * to its resolution, see @ref glfwSetWindowMonitor. - * - * The window manager may put limits on what sizes are allowed. GLFW cannot - * and should not override these limits. - * - * @param[in] window The window to resize. - * @param[in] width The desired width, in screen coordinates, of the window - * client area. - * @param[in] height The desired height, in screen coordinates, of the window - * client area. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_size - * @sa glfwGetWindowSize - * @sa glfwSetWindowMonitor - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter. - * - * @ingroup window - */ -GLFWAPI void glfwSetWindowSize(GLFWwindow* window, int width, int height); - -/*! @brief Retrieves the size of the framebuffer of the specified window. - * - * This function retrieves the size, in pixels, of the framebuffer of the - * specified window. If you wish to retrieve the size of the window in screen - * coordinates, see @ref glfwGetWindowSize. - * - * Any or all of the size arguments may be `NULL`. If an error occurs, all - * non-`NULL` size arguments will be set to zero. - * - * @param[in] window The window whose framebuffer to query. - * @param[out] width Where to store the width, in pixels, of the framebuffer, - * or `NULL`. - * @param[out] height Where to store the height, in pixels, of the framebuffer, - * or `NULL`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_fbsize - * @sa glfwSetFramebufferSizeCallback - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI void glfwGetFramebufferSize(GLFWwindow* window, int* width, int* height); - -/*! @brief Retrieves the size of the frame of the window. - * - * This function retrieves the size, in screen coordinates, of each edge of the - * frame of the specified window. This size includes the title bar, if the - * window has one. The size of the frame may vary depending on the - * [window-related hints](@ref window_hints_wnd) used to create it. - * - * Because this function retrieves the size of each window frame edge and not - * the offset along a particular coordinate axis, the retrieved values will - * always be zero or positive. - * - * Any or all of the size arguments may be `NULL`. If an error occurs, all - * non-`NULL` size arguments will be set to zero. - * - * @param[in] window The window whose frame size to query. - * @param[out] left Where to store the size, in screen coordinates, of the left - * edge of the window frame, or `NULL`. - * @param[out] top Where to store the size, in screen coordinates, of the top - * edge of the window frame, or `NULL`. - * @param[out] right Where to store the size, in screen coordinates, of the - * right edge of the window frame, or `NULL`. - * @param[out] bottom Where to store the size, in screen coordinates, of the - * bottom edge of the window frame, or `NULL`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_size - * - * @since Added in version 3.1. - * - * @ingroup window - */ -GLFWAPI void glfwGetWindowFrameSize(GLFWwindow* window, int* left, int* top, int* right, int* bottom); - -/*! @brief Iconifies the specified window. - * - * This function iconifies (minimizes) the specified window if it was - * previously restored. If the window is already iconified, this function does - * nothing. - * - * If the specified window is a full screen window, the original monitor - * resolution is restored until the window is restored. - * - * @param[in] window The window to iconify. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_iconify - * @sa glfwRestoreWindow - * @sa glfwMaximizeWindow - * - * @since Added in version 2.1. - * @glfw3 Added window handle parameter. - * - * @ingroup window - */ -GLFWAPI void glfwIconifyWindow(GLFWwindow* window); - -/*! @brief Restores the specified window. - * - * This function restores the specified window if it was previously iconified - * (minimized) or maximized. If the window is already restored, this function - * does nothing. - * - * If the specified window is a full screen window, the resolution chosen for - * the window is restored on the selected monitor. - * - * @param[in] window The window to restore. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_iconify - * @sa glfwIconifyWindow - * @sa glfwMaximizeWindow - * - * @since Added in version 2.1. - * @glfw3 Added window handle parameter. - * - * @ingroup window - */ -GLFWAPI void glfwRestoreWindow(GLFWwindow* window); - -/*! @brief Maximizes the specified window. - * - * This function maximizes the specified window if it was previously not - * maximized. If the window is already maximized, this function does nothing. - * - * If the specified window is a full screen window, this function does nothing. - * - * @param[in] window The window to maximize. - * - * @par Thread Safety - * This function may only be called from the main thread. - * - * @sa @ref window_iconify - * @sa glfwIconifyWindow - * @sa glfwRestoreWindow - * - * @since Added in GLFW 3.2. - * - * @ingroup window - */ -GLFWAPI void glfwMaximizeWindow(GLFWwindow* window); - -/*! @brief Makes the specified window visible. - * - * This function makes the specified window visible if it was previously - * hidden. If the window is already visible or is in full screen mode, this - * function does nothing. - * - * @param[in] window The window to make visible. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_hide - * @sa glfwHideWindow - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI void glfwShowWindow(GLFWwindow* window); - -/*! @brief Hides the specified window. - * - * This function hides the specified window if it was previously visible. If - * the window is already hidden or is in full screen mode, this function does - * nothing. - * - * @param[in] window The window to hide. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_hide - * @sa glfwShowWindow - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI void glfwHideWindow(GLFWwindow* window); - -/*! @brief Brings the specified window to front and sets input focus. - * - * This function brings the specified window to front and sets input focus. - * The window should already be visible and not iconified. - * - * By default, both windowed and full screen mode windows are focused when - * initially created. Set the [GLFW_FOCUSED](@ref window_hints_wnd) to disable - * this behavior. - * - * __Do not use this function__ to steal focus from other applications unless - * you are certain that is what the user wants. Focus stealing can be - * extremely disruptive. - * - * @param[in] window The window to give input focus. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_focus - * - * @since Added in version 3.2. - * - * @ingroup window - */ -GLFWAPI void glfwFocusWindow(GLFWwindow* window); - -/*! @brief Returns the monitor that the window uses for full screen mode. - * - * This function returns the handle of the monitor that the specified window is - * in full screen on. - * - * @param[in] window The window to query. - * @return The monitor, or `NULL` if the window is in windowed mode or an error - * occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_monitor - * @sa glfwSetWindowMonitor - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI GLFWmonitor* glfwGetWindowMonitor(GLFWwindow* window); - -/*! @brief Sets the mode, monitor, video mode and placement of a window. - * - * This function sets the monitor that the window uses for full screen mode or, - * if the monitor is `NULL`, makes it windowed mode. - * - * When setting a monitor, this function updates the width, height and refresh - * rate of the desired video mode and switches to the video mode closest to it. - * The window position is ignored when setting a monitor. - * - * When the monitor is `NULL`, the position, width and height are used to - * place the window client area. The refresh rate is ignored when no monitor - * is specified. - * - * If you only wish to update the resolution of a full screen window or the - * size of a windowed mode window, see @ref glfwSetWindowSize. - * - * When a window transitions from full screen to windowed mode, this function - * restores any previous window settings such as whether it is decorated, - * floating, resizable, has size or aspect ratio limits, etc.. - * - * @param[in] window The window whose monitor, size or video mode to set. - * @param[in] monitor The desired monitor, or `NULL` to set windowed mode. - * @param[in] xpos The desired x-coordinate of the upper-left corner of the - * client area. - * @param[in] ypos The desired y-coordinate of the upper-left corner of the - * client area. - * @param[in] width The desired with, in screen coordinates, of the client area - * or video mode. - * @param[in] height The desired height, in screen coordinates, of the client - * area or video mode. - * @param[in] refreshRate The desired refresh rate, in Hz, of the video mode. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_monitor - * @sa @ref window_full_screen - * @sa glfwGetWindowMonitor - * @sa glfwSetWindowSize - * - * @since Added in version 3.2. - * - * @ingroup window - */ -GLFWAPI void glfwSetWindowMonitor(GLFWwindow* window, GLFWmonitor* monitor, int xpos, int ypos, int width, int height, int refreshRate); - -/*! @brief Returns an attribute of the specified window. - * - * This function returns the value of an attribute of the specified window or - * its OpenGL or OpenGL ES context. - * - * @param[in] window The window to query. - * @param[in] attrib The [window attribute](@ref window_attribs) whose value to - * return. - * @return The value of the attribute, or zero if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. - * - * @remark Framebuffer related hints are not window attributes. See @ref - * window_attribs_fb for more information. - * - * @remark Zero is a valid value for many window and context related - * attributes so you cannot use a return value of zero as an indication of - * errors. However, this function should not fail as long as it is passed - * valid arguments and the library has been [initialized](@ref intro_init). - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_attribs - * - * @since Added in version 3.0. Replaces `glfwGetWindowParam` and - * `glfwGetGLVersion`. - * - * @ingroup window - */ -GLFWAPI int glfwGetWindowAttrib(GLFWwindow* window, int attrib); - -/*! @brief Sets the user pointer of the specified window. - * - * This function sets the user-defined pointer of the specified window. The - * current value is retained until the window is destroyed. The initial value - * is `NULL`. - * - * @param[in] window The window whose pointer to set. - * @param[in] pointer The new value. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @sa @ref window_userptr - * @sa glfwGetWindowUserPointer - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI void glfwSetWindowUserPointer(GLFWwindow* window, void* pointer); - -/*! @brief Returns the user pointer of the specified window. - * - * This function returns the current value of the user-defined pointer of the - * specified window. The initial value is `NULL`. - * - * @param[in] window The window whose pointer to return. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @sa @ref window_userptr - * @sa glfwSetWindowUserPointer - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI void* glfwGetWindowUserPointer(GLFWwindow* window); - -/*! @brief Sets the position callback for the specified window. - * - * This function sets the position callback of the specified window, which is - * called when the window is moved. The callback is provided with the screen - * position of the upper-left corner of the client area of the window. - * - * @param[in] window The window whose callback to set. - * @param[in] cbfun The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_pos - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI GLFWwindowposfun glfwSetWindowPosCallback(GLFWwindow* window, GLFWwindowposfun cbfun); - -/*! @brief Sets the size callback for the specified window. - * - * This function sets the size callback of the specified window, which is - * called when the window is resized. The callback is provided with the size, - * in screen coordinates, of the client area of the window. - * - * @param[in] window The window whose callback to set. - * @param[in] cbfun The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_size - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter and return value. - * - * @ingroup window - */ -GLFWAPI GLFWwindowsizefun glfwSetWindowSizeCallback(GLFWwindow* window, GLFWwindowsizefun cbfun); - -/*! @brief Sets the close callback for the specified window. - * - * This function sets the close callback of the specified window, which is - * called when the user attempts to close the window, for example by clicking - * the close widget in the title bar. - * - * The close flag is set before this callback is called, but you can modify it - * at any time with @ref glfwSetWindowShouldClose. - * - * The close callback is not triggered by @ref glfwDestroyWindow. - * - * @param[in] window The window whose callback to set. - * @param[in] cbfun The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @remark @osx Selecting Quit from the application menu will trigger the close - * callback for all windows. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_close - * - * @since Added in version 2.5. - * @glfw3 Added window handle parameter and return value. - * - * @ingroup window - */ -GLFWAPI GLFWwindowclosefun glfwSetWindowCloseCallback(GLFWwindow* window, GLFWwindowclosefun cbfun); - -/*! @brief Sets the refresh callback for the specified window. - * - * This function sets the refresh callback of the specified window, which is - * called when the client area of the window needs to be redrawn, for example - * if the window has been exposed after having been covered by another window. - * - * On compositing window systems such as Aero, Compiz or Aqua, where the window - * contents are saved off-screen, this callback may be called only very - * infrequently or never at all. - * - * @param[in] window The window whose callback to set. - * @param[in] cbfun The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_refresh - * - * @since Added in version 2.5. - * @glfw3 Added window handle parameter and return value. - * - * @ingroup window - */ -GLFWAPI GLFWwindowrefreshfun glfwSetWindowRefreshCallback(GLFWwindow* window, GLFWwindowrefreshfun cbfun); - -/*! @brief Sets the focus callback for the specified window. - * - * This function sets the focus callback of the specified window, which is - * called when the window gains or loses input focus. - * - * After the focus callback is called for a window that lost input focus, - * synthetic key and mouse button release events will be generated for all such - * that had been pressed. For more information, see @ref glfwSetKeyCallback - * and @ref glfwSetMouseButtonCallback. - * - * @param[in] window The window whose callback to set. - * @param[in] cbfun The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_focus - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI GLFWwindowfocusfun glfwSetWindowFocusCallback(GLFWwindow* window, GLFWwindowfocusfun cbfun); - -/*! @brief Sets the iconify callback for the specified window. - * - * This function sets the iconification callback of the specified window, which - * is called when the window is iconified or restored. - * - * @param[in] window The window whose callback to set. - * @param[in] cbfun The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_iconify - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI GLFWwindowiconifyfun glfwSetWindowIconifyCallback(GLFWwindow* window, GLFWwindowiconifyfun cbfun); - -/*! @brief Sets the framebuffer resize callback for the specified window. - * - * This function sets the framebuffer resize callback of the specified window, - * which is called when the framebuffer of the specified window is resized. - * - * @param[in] window The window whose callback to set. - * @param[in] cbfun The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_fbsize - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI GLFWframebuffersizefun glfwSetFramebufferSizeCallback(GLFWwindow* window, GLFWframebuffersizefun cbfun); - -/*! @brief Processes all pending events. - * - * This function processes only those events that are already in the event - * queue and then returns immediately. Processing events will cause the window - * and input callbacks associated with those events to be called. - * - * On some platforms, a window move, resize or menu operation will cause event - * processing to block. This is due to how event processing is designed on - * those platforms. You can use the - * [window refresh callback](@ref window_refresh) to redraw the contents of - * your window when necessary during such operations. - * - * On some platforms, certain events are sent directly to the application - * without going through the event queue, causing callbacks to be called - * outside of a call to one of the event processing functions. - * - * Event processing is not required for joystick input to work. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @reentrancy This function must not be called from a callback. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref events - * @sa glfwWaitEvents - * @sa glfwWaitEventsTimeout - * - * @since Added in version 1.0. - * - * @ingroup window - */ -GLFWAPI void glfwPollEvents(void); - -/*! @brief Waits until events are queued and processes them. - * - * This function puts the calling thread to sleep until at least one event is - * available in the event queue. Once one or more events are available, - * it behaves exactly like @ref glfwPollEvents, i.e. the events in the queue - * are processed and the function then returns immediately. Processing events - * will cause the window and input callbacks associated with those events to be - * called. - * - * Since not all events are associated with callbacks, this function may return - * without a callback having been called even if you are monitoring all - * callbacks. - * - * On some platforms, a window move, resize or menu operation will cause event - * processing to block. This is due to how event processing is designed on - * those platforms. You can use the - * [window refresh callback](@ref window_refresh) to redraw the contents of - * your window when necessary during such operations. - * - * On some platforms, certain callbacks may be called outside of a call to one - * of the event processing functions. - * - * If no windows exist, this function returns immediately. For synchronization - * of threads in applications that do not create windows, use your threading - * library of choice. - * - * Event processing is not required for joystick input to work. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @reentrancy This function must not be called from a callback. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref events - * @sa glfwPollEvents - * @sa glfwWaitEventsTimeout - * - * @since Added in version 2.5. - * - * @ingroup window - */ -GLFWAPI void glfwWaitEvents(void); - -/*! @brief Waits with timeout until events are queued and processes them. - * - * This function puts the calling thread to sleep until at least one event is - * available in the event queue, or until the specified timeout is reached. If - * one or more events are available, it behaves exactly like @ref - * glfwPollEvents, i.e. the events in the queue are processed and the function - * then returns immediately. Processing events will cause the window and input - * callbacks associated with those events to be called. - * - * The timeout value must be a positive finite number. - * - * Since not all events are associated with callbacks, this function may return - * without a callback having been called even if you are monitoring all - * callbacks. - * - * On some platforms, a window move, resize or menu operation will cause event - * processing to block. This is due to how event processing is designed on - * those platforms. You can use the - * [window refresh callback](@ref window_refresh) to redraw the contents of - * your window when necessary during such operations. - * - * On some platforms, certain callbacks may be called outside of a call to one - * of the event processing functions. - * - * If no windows exist, this function returns immediately. For synchronization - * of threads in applications that do not create windows, use your threading - * library of choice. - * - * Event processing is not required for joystick input to work. - * - * @param[in] timeout The maximum amount of time, in seconds, to wait. - * - * @reentrancy This function must not be called from a callback. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref events - * @sa glfwPollEvents - * @sa glfwWaitEvents - * - * @since Added in version 3.2. - * - * @ingroup window - */ -GLFWAPI void glfwWaitEventsTimeout(double timeout); - -/*! @brief Posts an empty event to the event queue. - * - * This function posts an empty event from the current thread to the event - * queue, causing @ref glfwWaitEvents to return. - * - * If no windows exist, this function returns immediately. For synchronization - * of threads in applications that do not create windows, use your threading - * library of choice. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref events - * @sa glfwWaitEvents - * - * @since Added in version 3.1. - * - * @ingroup window - */ -GLFWAPI void glfwPostEmptyEvent(void); - -/*! @brief Returns the value of an input option for the specified window. - * - * This function returns the value of an input option for the specified window. - * The mode must be one of `GLFW_CURSOR`, `GLFW_STICKY_KEYS` or - * `GLFW_STICKY_MOUSE_BUTTONS`. - * - * @param[in] window The window to query. - * @param[in] mode One of `GLFW_CURSOR`, `GLFW_STICKY_KEYS` or - * `GLFW_STICKY_MOUSE_BUTTONS`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_INVALID_ENUM. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa glfwSetInputMode - * - * @since Added in version 3.0. - * - * @ingroup input - */ -GLFWAPI int glfwGetInputMode(GLFWwindow* window, int mode); - -/*! @brief Sets an input option for the specified window. - * - * This function sets an input mode option for the specified window. The mode - * must be one of `GLFW_CURSOR`, `GLFW_STICKY_KEYS` or - * `GLFW_STICKY_MOUSE_BUTTONS`. - * - * If the mode is `GLFW_CURSOR`, the value must be one of the following cursor - * modes: - * - `GLFW_CURSOR_NORMAL` makes the cursor visible and behaving normally. - * - `GLFW_CURSOR_HIDDEN` makes the cursor invisible when it is over the client - * area of the window but does not restrict the cursor from leaving. - * - `GLFW_CURSOR_DISABLED` hides and grabs the cursor, providing virtual - * and unlimited cursor movement. This is useful for implementing for - * example 3D camera controls. - * - * If the mode is `GLFW_STICKY_KEYS`, the value must be either `GLFW_TRUE` to - * enable sticky keys, or `GLFW_FALSE` to disable it. If sticky keys are - * enabled, a key press will ensure that @ref glfwGetKey returns `GLFW_PRESS` - * the next time it is called even if the key had been released before the - * call. This is useful when you are only interested in whether keys have been - * pressed but not when or in which order. - * - * If the mode is `GLFW_STICKY_MOUSE_BUTTONS`, the value must be either - * `GLFW_TRUE` to enable sticky mouse buttons, or `GLFW_FALSE` to disable it. - * If sticky mouse buttons are enabled, a mouse button press will ensure that - * @ref glfwGetMouseButton returns `GLFW_PRESS` the next time it is called even - * if the mouse button had been released before the call. This is useful when - * you are only interested in whether mouse buttons have been pressed but not - * when or in which order. - * - * @param[in] window The window whose input mode to set. - * @param[in] mode One of `GLFW_CURSOR`, `GLFW_STICKY_KEYS` or - * `GLFW_STICKY_MOUSE_BUTTONS`. - * @param[in] value The new value of the specified input mode. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa glfwGetInputMode - * - * @since Added in version 3.0. Replaces `glfwEnable` and `glfwDisable`. - * - * @ingroup input - */ -GLFWAPI void glfwSetInputMode(GLFWwindow* window, int mode, int value); - -/*! @brief Returns the localized name of the specified printable key. - * - * This function returns the localized name of the specified printable key. - * This is intended for displaying key bindings to the user. - * - * If the key is `GLFW_KEY_UNKNOWN`, the scancode is used instead, otherwise - * the scancode is ignored. If a non-printable key or (if the key is - * `GLFW_KEY_UNKNOWN`) a scancode that maps to a non-printable key is - * specified, this function returns `NULL`. - * - * This behavior allows you to pass in the arguments passed to the - * [key callback](@ref input_key) without modification. - * - * The printable keys are: - * - `GLFW_KEY_APOSTROPHE` - * - `GLFW_KEY_COMMA` - * - `GLFW_KEY_MINUS` - * - `GLFW_KEY_PERIOD` - * - `GLFW_KEY_SLASH` - * - `GLFW_KEY_SEMICOLON` - * - `GLFW_KEY_EQUAL` - * - `GLFW_KEY_LEFT_BRACKET` - * - `GLFW_KEY_RIGHT_BRACKET` - * - `GLFW_KEY_BACKSLASH` - * - `GLFW_KEY_WORLD_1` - * - `GLFW_KEY_WORLD_2` - * - `GLFW_KEY_0` to `GLFW_KEY_9` - * - `GLFW_KEY_A` to `GLFW_KEY_Z` - * - `GLFW_KEY_KP_0` to `GLFW_KEY_KP_9` - * - `GLFW_KEY_KP_DECIMAL` - * - `GLFW_KEY_KP_DIVIDE` - * - `GLFW_KEY_KP_MULTIPLY` - * - `GLFW_KEY_KP_SUBTRACT` - * - `GLFW_KEY_KP_ADD` - * - `GLFW_KEY_KP_EQUAL` - * - * @param[in] key The key to query, or `GLFW_KEY_UNKNOWN`. - * @param[in] scancode The scancode of the key to query. - * @return The localized name of the key, or `NULL`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The returned string is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the next call to @ref - * glfwGetKeyName, or until the library is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref input_key_name - * - * @since Added in version 3.2. - * - * @ingroup input - */ -GLFWAPI const char* glfwGetKeyName(int key, int scancode); - -/*! @brief Returns the last reported state of a keyboard key for the specified - * window. - * - * This function returns the last state reported for the specified key to the - * specified window. The returned state is one of `GLFW_PRESS` or - * `GLFW_RELEASE`. The higher-level action `GLFW_REPEAT` is only reported to - * the key callback. - * - * If the `GLFW_STICKY_KEYS` input mode is enabled, this function returns - * `GLFW_PRESS` the first time you call it for a key that was pressed, even if - * that key has already been released. - * - * The key functions deal with physical keys, with [key tokens](@ref keys) - * named after their use on the standard US keyboard layout. If you want to - * input text, use the Unicode character callback instead. - * - * The [modifier key bit masks](@ref mods) are not key tokens and cannot be - * used with this function. - * - * __Do not use this function__ to implement [text input](@ref input_char). - * - * @param[in] window The desired window. - * @param[in] key The desired [keyboard key](@ref keys). `GLFW_KEY_UNKNOWN` is - * not a valid key for this function. - * @return One of `GLFW_PRESS` or `GLFW_RELEASE`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_INVALID_ENUM. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref input_key - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter. - * - * @ingroup input - */ -GLFWAPI int glfwGetKey(GLFWwindow* window, int key); - -/*! @brief Returns the last reported state of a mouse button for the specified - * window. - * - * This function returns the last state reported for the specified mouse button - * to the specified window. The returned state is one of `GLFW_PRESS` or - * `GLFW_RELEASE`. - * - * If the `GLFW_STICKY_MOUSE_BUTTONS` input mode is enabled, this function - * `GLFW_PRESS` the first time you call it for a mouse button that was pressed, - * even if that mouse button has already been released. - * - * @param[in] window The desired window. - * @param[in] button The desired [mouse button](@ref buttons). - * @return One of `GLFW_PRESS` or `GLFW_RELEASE`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_INVALID_ENUM. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref input_mouse_button - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter. - * - * @ingroup input - */ -GLFWAPI int glfwGetMouseButton(GLFWwindow* window, int button); - -/*! @brief Retrieves the position of the cursor relative to the client area of - * the window. - * - * This function returns the position of the cursor, in screen coordinates, - * relative to the upper-left corner of the client area of the specified - * window. - * - * If the cursor is disabled (with `GLFW_CURSOR_DISABLED`) then the cursor - * position is unbounded and limited only by the minimum and maximum values of - * a `double`. - * - * The coordinate can be converted to their integer equivalents with the - * `floor` function. Casting directly to an integer type works for positive - * coordinates, but fails for negative ones. - * - * Any or all of the position arguments may be `NULL`. If an error occurs, all - * non-`NULL` position arguments will be set to zero. - * - * @param[in] window The desired window. - * @param[out] xpos Where to store the cursor x-coordinate, relative to the - * left edge of the client area, or `NULL`. - * @param[out] ypos Where to store the cursor y-coordinate, relative to the to - * top edge of the client area, or `NULL`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref cursor_pos - * @sa glfwSetCursorPos - * - * @since Added in version 3.0. Replaces `glfwGetMousePos`. - * - * @ingroup input - */ -GLFWAPI void glfwGetCursorPos(GLFWwindow* window, double* xpos, double* ypos); - -/*! @brief Sets the position of the cursor, relative to the client area of the - * window. - * - * This function sets the position, in screen coordinates, of the cursor - * relative to the upper-left corner of the client area of the specified - * window. The window must have input focus. If the window does not have - * input focus when this function is called, it fails silently. - * - * __Do not use this function__ to implement things like camera controls. GLFW - * already provides the `GLFW_CURSOR_DISABLED` cursor mode that hides the - * cursor, transparently re-centers it and provides unconstrained cursor - * motion. See @ref glfwSetInputMode for more information. - * - * If the cursor mode is `GLFW_CURSOR_DISABLED` then the cursor position is - * unconstrained and limited only by the minimum and maximum values of - * a `double`. - * - * @param[in] window The desired window. - * @param[in] xpos The desired x-coordinate, relative to the left edge of the - * client area. - * @param[in] ypos The desired y-coordinate, relative to the top edge of the - * client area. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @remark @x11 Due to the asynchronous nature of X11, it may take a moment for - * the window focus event to arrive. This means you may not be able to set the - * cursor position directly after window creation. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref cursor_pos - * @sa glfwGetCursorPos - * - * @since Added in version 3.0. Replaces `glfwSetMousePos`. - * - * @ingroup input - */ -GLFWAPI void glfwSetCursorPos(GLFWwindow* window, double xpos, double ypos); - -/*! @brief Creates a custom cursor. - * - * Creates a new custom cursor image that can be set for a window with @ref - * glfwSetCursor. The cursor can be destroyed with @ref glfwDestroyCursor. - * Any remaining cursors are destroyed by @ref glfwTerminate. - * - * The pixels are 32-bit, little-endian, non-premultiplied RGBA, i.e. eight - * bits per channel. They are arranged canonically as packed sequential rows, - * starting from the top-left corner. - * - * The cursor hotspot is specified in pixels, relative to the upper-left corner - * of the cursor image. Like all other coordinate systems in GLFW, the X-axis - * points to the right and the Y-axis points down. - * - * @param[in] image The desired cursor image. - * @param[in] xhot The desired x-coordinate, in pixels, of the cursor hotspot. - * @param[in] yhot The desired y-coordinate, in pixels, of the cursor hotspot. - * @return The handle of the created cursor, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The specified image data is copied before this function - * returns. - * - * @reentrancy This function must not be called from a callback. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref cursor_object - * @sa glfwDestroyCursor - * @sa glfwCreateStandardCursor - * - * @since Added in version 3.1. - * - * @ingroup input - */ -GLFWAPI GLFWcursor* glfwCreateCursor(const GLFWimage* image, int xhot, int yhot); - -/*! @brief Creates a cursor with a standard shape. - * - * Returns a cursor with a [standard shape](@ref shapes), that can be set for - * a window with @ref glfwSetCursor. - * - * @param[in] shape One of the [standard shapes](@ref shapes). - * @return A new cursor ready to use or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. - * - * @reentrancy This function must not be called from a callback. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref cursor_object - * @sa glfwCreateCursor - * - * @since Added in version 3.1. - * - * @ingroup input - */ -GLFWAPI GLFWcursor* glfwCreateStandardCursor(int shape); - -/*! @brief Destroys a cursor. - * - * This function destroys a cursor previously created with @ref - * glfwCreateCursor. Any remaining cursors will be destroyed by @ref - * glfwTerminate. - * - * @param[in] cursor The cursor object to destroy. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @reentrancy This function must not be called from a callback. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref cursor_object - * @sa glfwCreateCursor - * - * @since Added in version 3.1. - * - * @ingroup input - */ -GLFWAPI void glfwDestroyCursor(GLFWcursor* cursor); - -/*! @brief Sets the cursor for the window. - * - * This function sets the cursor image to be used when the cursor is over the - * client area of the specified window. The set cursor will only be visible - * when the [cursor mode](@ref cursor_mode) of the window is - * `GLFW_CURSOR_NORMAL`. - * - * On some platforms, the set cursor may not be visible unless the window also - * has input focus. - * - * @param[in] window The window to set the cursor for. - * @param[in] cursor The cursor to set, or `NULL` to switch back to the default - * arrow cursor. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref cursor_object - * - * @since Added in version 3.1. - * - * @ingroup input - */ -GLFWAPI void glfwSetCursor(GLFWwindow* window, GLFWcursor* cursor); - -/*! @brief Sets the key callback. - * - * This function sets the key callback of the specified window, which is called - * when a key is pressed, repeated or released. - * - * The key functions deal with physical keys, with layout independent - * [key tokens](@ref keys) named after their values in the standard US keyboard - * layout. If you want to input text, use the - * [character callback](@ref glfwSetCharCallback) instead. - * - * When a window loses input focus, it will generate synthetic key release - * events for all pressed keys. You can tell these events from user-generated - * events by the fact that the synthetic ones are generated after the focus - * loss event has been processed, i.e. after the - * [window focus callback](@ref glfwSetWindowFocusCallback) has been called. - * - * The scancode of a key is specific to that platform or sometimes even to that - * machine. Scancodes are intended to allow users to bind keys that don't have - * a GLFW key token. Such keys have `key` set to `GLFW_KEY_UNKNOWN`, their - * state is not saved and so it cannot be queried with @ref glfwGetKey. - * - * Sometimes GLFW needs to generate synthetic key events, in which case the - * scancode may be zero. - * - * @param[in] window The window whose callback to set. - * @param[in] cbfun The new key callback, or `NULL` to remove the currently - * set callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref input_key - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter and return value. - * - * @ingroup input - */ -GLFWAPI GLFWkeyfun glfwSetKeyCallback(GLFWwindow* window, GLFWkeyfun cbfun); - -/*! @brief Sets the Unicode character callback. - * - * This function sets the character callback of the specified window, which is - * called when a Unicode character is input. - * - * The character callback is intended for Unicode text input. As it deals with - * characters, it is keyboard layout dependent, whereas the - * [key callback](@ref glfwSetKeyCallback) is not. Characters do not map 1:1 - * to physical keys, as a key may produce zero, one or more characters. If you - * want to know whether a specific physical key was pressed or released, see - * the key callback instead. - * - * The character callback behaves as system text input normally does and will - * not be called if modifier keys are held down that would prevent normal text - * input on that platform, for example a Super (Command) key on OS X or Alt key - * on Windows. There is a - * [character with modifiers callback](@ref glfwSetCharModsCallback) that - * receives these events. - * - * @param[in] window The window whose callback to set. - * @param[in] cbfun The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref input_char - * - * @since Added in version 2.4. - * @glfw3 Added window handle parameter and return value. - * - * @ingroup input - */ -GLFWAPI GLFWcharfun glfwSetCharCallback(GLFWwindow* window, GLFWcharfun cbfun); - -/*! @brief Sets the Unicode character with modifiers callback. - * - * This function sets the character with modifiers callback of the specified - * window, which is called when a Unicode character is input regardless of what - * modifier keys are used. - * - * The character with modifiers callback is intended for implementing custom - * Unicode character input. For regular Unicode text input, see the - * [character callback](@ref glfwSetCharCallback). Like the character - * callback, the character with modifiers callback deals with characters and is - * keyboard layout dependent. Characters do not map 1:1 to physical keys, as - * a key may produce zero, one or more characters. If you want to know whether - * a specific physical key was pressed or released, see the - * [key callback](@ref glfwSetKeyCallback) instead. - * - * @param[in] window The window whose callback to set. - * @param[in] cbfun The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or an - * error occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref input_char - * - * @since Added in version 3.1. - * - * @ingroup input - */ -GLFWAPI GLFWcharmodsfun glfwSetCharModsCallback(GLFWwindow* window, GLFWcharmodsfun cbfun); - -/*! @brief Sets the mouse button callback. - * - * This function sets the mouse button callback of the specified window, which - * is called when a mouse button is pressed or released. - * - * When a window loses input focus, it will generate synthetic mouse button - * release events for all pressed mouse buttons. You can tell these events - * from user-generated events by the fact that the synthetic ones are generated - * after the focus loss event has been processed, i.e. after the - * [window focus callback](@ref glfwSetWindowFocusCallback) has been called. - * - * @param[in] window The window whose callback to set. - * @param[in] cbfun The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref input_mouse_button - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter and return value. - * - * @ingroup input - */ -GLFWAPI GLFWmousebuttonfun glfwSetMouseButtonCallback(GLFWwindow* window, GLFWmousebuttonfun cbfun); - -/*! @brief Sets the cursor position callback. - * - * This function sets the cursor position callback of the specified window, - * which is called when the cursor is moved. The callback is provided with the - * position, in screen coordinates, relative to the upper-left corner of the - * client area of the window. - * - * @param[in] window The window whose callback to set. - * @param[in] cbfun The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref cursor_pos - * - * @since Added in version 3.0. Replaces `glfwSetMousePosCallback`. - * - * @ingroup input - */ -GLFWAPI GLFWcursorposfun glfwSetCursorPosCallback(GLFWwindow* window, GLFWcursorposfun cbfun); - -/*! @brief Sets the cursor enter/exit callback. - * - * This function sets the cursor boundary crossing callback of the specified - * window, which is called when the cursor enters or leaves the client area of - * the window. - * - * @param[in] window The window whose callback to set. - * @param[in] cbfun The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref cursor_enter - * - * @since Added in version 3.0. - * - * @ingroup input - */ -GLFWAPI GLFWcursorenterfun glfwSetCursorEnterCallback(GLFWwindow* window, GLFWcursorenterfun cbfun); - -/*! @brief Sets the scroll callback. - * - * This function sets the scroll callback of the specified window, which is - * called when a scrolling device is used, such as a mouse wheel or scrolling - * area of a touchpad. - * - * The scroll callback receives all scrolling input, like that from a mouse - * wheel or a touchpad scrolling area. - * - * @param[in] window The window whose callback to set. - * @param[in] cbfun The new scroll callback, or `NULL` to remove the currently - * set callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref scrolling - * - * @since Added in version 3.0. Replaces `glfwSetMouseWheelCallback`. - * - * @ingroup input - */ -GLFWAPI GLFWscrollfun glfwSetScrollCallback(GLFWwindow* window, GLFWscrollfun cbfun); - -/*! @brief Sets the file drop callback. - * - * This function sets the file drop callback of the specified window, which is - * called when one or more dragged files are dropped on the window. - * - * Because the path array and its strings may have been generated specifically - * for that event, they are not guaranteed to be valid after the callback has - * returned. If you wish to use them after the callback returns, you need to - * make a deep copy. - * - * @param[in] window The window whose callback to set. - * @param[in] cbfun The new file drop callback, or `NULL` to remove the - * currently set callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref path_drop - * - * @since Added in version 3.1. - * - * @ingroup input - */ -GLFWAPI GLFWdropfun glfwSetDropCallback(GLFWwindow* window, GLFWdropfun cbfun); - -/*! @brief Returns whether the specified joystick is present. - * - * This function returns whether the specified joystick is present. - * - * @param[in] joy The [joystick](@ref joysticks) to query. - * @return `GLFW_TRUE` if the joystick is present, or `GLFW_FALSE` otherwise. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref joystick - * - * @since Added in version 3.0. Replaces `glfwGetJoystickParam`. - * - * @ingroup input - */ -GLFWAPI int glfwJoystickPresent(int joy); - -/*! @brief Returns the values of all axes of the specified joystick. - * - * This function returns the values of all axes of the specified joystick. - * Each element in the array is a value between -1.0 and 1.0. - * - * Querying a joystick slot with no device present is not an error, but will - * cause this function to return `NULL`. Call @ref glfwJoystickPresent to - * check device presence. - * - * @param[in] joy The [joystick](@ref joysticks) to query. - * @param[out] count Where to store the number of axis values in the returned - * array. This is set to zero if an error occurred. - * @return An array of axis values, or `NULL` if the joystick is not present. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The returned array is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the specified joystick is - * disconnected, this function is called again for that joystick or the library - * is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref joystick_axis - * - * @since Added in version 3.0. Replaces `glfwGetJoystickPos`. - * - * @ingroup input - */ -GLFWAPI const float* glfwGetJoystickAxes(int joy, int* count); - -/*! @brief Returns the state of all buttons of the specified joystick. - * - * This function returns the state of all buttons of the specified joystick. - * Each element in the array is either `GLFW_PRESS` or `GLFW_RELEASE`. - * - * Querying a joystick slot with no device present is not an error, but will - * cause this function to return `NULL`. Call @ref glfwJoystickPresent to - * check device presence. - * - * @param[in] joy The [joystick](@ref joysticks) to query. - * @param[out] count Where to store the number of button states in the returned - * array. This is set to zero if an error occurred. - * @return An array of button states, or `NULL` if the joystick is not present. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The returned array is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the specified joystick is - * disconnected, this function is called again for that joystick or the library - * is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref joystick_button - * - * @since Added in version 2.2. - * @glfw3 Changed to return a dynamic array. - * - * @ingroup input - */ -GLFWAPI const unsigned char* glfwGetJoystickButtons(int joy, int* count); - -/*! @brief Returns the name of the specified joystick. - * - * This function returns the name, encoded as UTF-8, of the specified joystick. - * The returned string is allocated and freed by GLFW. You should not free it - * yourself. - * - * Querying a joystick slot with no device present is not an error, but will - * cause this function to return `NULL`. Call @ref glfwJoystickPresent to - * check device presence. - * - * @param[in] joy The [joystick](@ref joysticks) to query. - * @return The UTF-8 encoded name of the joystick, or `NULL` if the joystick - * is not present. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The returned string is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the specified joystick is - * disconnected, this function is called again for that joystick or the library - * is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref joystick_name - * - * @since Added in version 3.0. - * - * @ingroup input - */ -GLFWAPI const char* glfwGetJoystickName(int joy); - -/*! @brief Sets the joystick configuration callback. - * - * This function sets the joystick configuration callback, or removes the - * currently set callback. This is called when a joystick is connected to or - * disconnected from the system. - * - * @param[in] cbfun The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref joystick_event - * - * @since Added in version 3.2. - * - * @ingroup input - */ -GLFWAPI GLFWjoystickfun glfwSetJoystickCallback(GLFWjoystickfun cbfun); - -/*! @brief Sets the clipboard to the specified string. - * - * This function sets the system clipboard to the specified, UTF-8 encoded - * string. - * - * @param[in] window The window that will own the clipboard contents. - * @param[in] string A UTF-8 encoded string. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The specified string is copied before this function - * returns. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref clipboard - * @sa glfwGetClipboardString - * - * @since Added in version 3.0. - * - * @ingroup input - */ -GLFWAPI void glfwSetClipboardString(GLFWwindow* window, const char* string); - -/*! @brief Returns the contents of the clipboard as a string. - * - * This function returns the contents of the system clipboard, if it contains - * or is convertible to a UTF-8 encoded string. If the clipboard is empty or - * if its contents cannot be converted, `NULL` is returned and a @ref - * GLFW_FORMAT_UNAVAILABLE error is generated. - * - * @param[in] window The window that will request the clipboard contents. - * @return The contents of the clipboard as a UTF-8 encoded string, or `NULL` - * if an [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The returned string is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the next call to @ref - * glfwGetClipboardString or @ref glfwSetClipboardString, or until the library - * is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref clipboard - * @sa glfwSetClipboardString - * - * @since Added in version 3.0. - * - * @ingroup input - */ -GLFWAPI const char* glfwGetClipboardString(GLFWwindow* window); - -/*! @brief Returns the value of the GLFW timer. - * - * This function returns the value of the GLFW timer. Unless the timer has - * been set using @ref glfwSetTime, the timer measures time elapsed since GLFW - * was initialized. - * - * The resolution of the timer is system dependent, but is usually on the order - * of a few micro- or nanoseconds. It uses the highest-resolution monotonic - * time source on each supported platform. - * - * @return The current value, in seconds, or zero if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Reading of the - * internal timer offset is not atomic. - * - * @sa @ref time - * - * @since Added in version 1.0. - * - * @ingroup input - */ -GLFWAPI double glfwGetTime(void); - -/*! @brief Sets the GLFW timer. - * - * This function sets the value of the GLFW timer. It then continues to count - * up from that value. The value must be a positive finite number less than - * or equal to 18446744073.0, which is approximately 584.5 years. - * - * @param[in] time The new value, in seconds. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_INVALID_VALUE. - * - * @remark The upper limit of the timer is calculated as - * floor((264 - 1) / 109) and is due to implementations - * storing nanoseconds in 64 bits. The limit may be increased in the future. - * - * @thread_safety This function may be called from any thread. Writing of the - * internal timer offset is not atomic. - * - * @sa @ref time - * - * @since Added in version 2.2. - * - * @ingroup input - */ -GLFWAPI void glfwSetTime(double time); - -/*! @brief Returns the current value of the raw timer. - * - * This function returns the current value of the raw timer, measured in - * 1 / frequency seconds. To get the frequency, call @ref - * glfwGetTimerFrequency. - * - * @return The value of the timer, or zero if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref time - * @sa glfwGetTimerFrequency - * - * @since Added in version 3.2. - * - * @ingroup input - */ -GLFWAPI uint64_t glfwGetTimerValue(void); - -/*! @brief Returns the frequency, in Hz, of the raw timer. - * - * This function returns the frequency, in Hz, of the raw timer. - * - * @return The frequency of the timer, in Hz, or zero if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref time - * @sa glfwGetTimerValue - * - * @since Added in version 3.2. - * - * @ingroup input - */ -GLFWAPI uint64_t glfwGetTimerFrequency(void); - -/*! @brief Makes the context of the specified window current for the calling - * thread. - * - * This function makes the OpenGL or OpenGL ES context of the specified window - * current on the calling thread. A context can only be made current on - * a single thread at a time and each thread can have only a single current - * context at a time. - * - * By default, making a context non-current implicitly forces a pipeline flush. - * On machines that support `GL_KHR_context_flush_control`, you can control - * whether a context performs this flush by setting the - * [GLFW_CONTEXT_RELEASE_BEHAVIOR](@ref window_hints_ctx) window hint. - * - * The specified window must have an OpenGL or OpenGL ES context. Specifying - * a window without a context will generate a @ref GLFW_NO_WINDOW_CONTEXT - * error. - * - * @param[in] window The window whose context to make current, or `NULL` to - * detach the current context. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_NO_WINDOW_CONTEXT and @ref GLFW_PLATFORM_ERROR. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref context_current - * @sa glfwGetCurrentContext - * - * @since Added in version 3.0. - * - * @ingroup context - */ -GLFWAPI void glfwMakeContextCurrent(GLFWwindow* window); - -/*! @brief Returns the window whose context is current on the calling thread. - * - * This function returns the window whose OpenGL or OpenGL ES context is - * current on the calling thread. - * - * @return The window whose context is current, or `NULL` if no window's - * context is current. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref context_current - * @sa glfwMakeContextCurrent - * - * @since Added in version 3.0. - * - * @ingroup context - */ -GLFWAPI GLFWwindow* glfwGetCurrentContext(void); - -/*! @brief Swaps the front and back buffers of the specified window. - * - * This function swaps the front and back buffers of the specified window when - * rendering with OpenGL or OpenGL ES. If the swap interval is greater than - * zero, the GPU driver waits the specified number of screen updates before - * swapping the buffers. - * - * The specified window must have an OpenGL or OpenGL ES context. Specifying - * a window without a context will generate a @ref GLFW_NO_WINDOW_CONTEXT - * error. - * - * This function does not apply to Vulkan. If you are rendering with Vulkan, - * see `vkQueuePresentKHR` instead. - * - * @param[in] window The window whose buffers to swap. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_NO_WINDOW_CONTEXT and @ref GLFW_PLATFORM_ERROR. - * - * @remark __EGL:__ The context of the specified window must be current on the - * calling thread. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref buffer_swap - * @sa glfwSwapInterval - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter. - * - * @ingroup window - */ -GLFWAPI void glfwSwapBuffers(GLFWwindow* window); - -/*! @brief Sets the swap interval for the current context. - * - * This function sets the swap interval for the current OpenGL or OpenGL ES - * context, i.e. the number of screen updates to wait from the time @ref - * glfwSwapBuffers was called before swapping the buffers and returning. This - * is sometimes called _vertical synchronization_, _vertical retrace - * synchronization_ or just _vsync_. - * - * Contexts that support either of the `WGL_EXT_swap_control_tear` and - * `GLX_EXT_swap_control_tear` extensions also accept negative swap intervals, - * which allow the driver to swap even if a frame arrives a little bit late. - * You can check for the presence of these extensions using @ref - * glfwExtensionSupported. For more information about swap tearing, see the - * extension specifications. - * - * A context must be current on the calling thread. Calling this function - * without a current context will cause a @ref GLFW_NO_CURRENT_CONTEXT error. - * - * This function does not apply to Vulkan. If you are rendering with Vulkan, - * see the present mode of your swapchain instead. - * - * @param[in] interval The minimum number of screen updates to wait for - * until the buffers are swapped by @ref glfwSwapBuffers. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_NO_CURRENT_CONTEXT and @ref GLFW_PLATFORM_ERROR. - * - * @remark This function is not called during context creation, leaving the - * swap interval set to whatever is the default on that platform. This is done - * because some swap interval extensions used by GLFW do not allow the swap - * interval to be reset to zero once it has been set to a non-zero value. - * - * @remark Some GPU drivers do not honor the requested swap interval, either - * because of a user setting that overrides the application's request or due to - * bugs in the driver. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref buffer_swap - * @sa glfwSwapBuffers - * - * @since Added in version 1.0. - * - * @ingroup context - */ -GLFWAPI void glfwSwapInterval(int interval); - -/*! @brief Returns whether the specified extension is available. - * - * This function returns whether the specified - * [API extension](@ref context_glext) is supported by the current OpenGL or - * OpenGL ES context. It searches both for client API extension and context - * creation API extensions. - * - * A context must be current on the calling thread. Calling this function - * without a current context will cause a @ref GLFW_NO_CURRENT_CONTEXT error. - * - * As this functions retrieves and searches one or more extension strings each - * call, it is recommended that you cache its results if it is going to be used - * frequently. The extension strings will not change during the lifetime of - * a context, so there is no danger in doing this. - * - * This function does not apply to Vulkan. If you are using Vulkan, see @ref - * glfwGetRequiredInstanceExtensions, `vkEnumerateInstanceExtensionProperties` - * and `vkEnumerateDeviceExtensionProperties` instead. - * - * @param[in] extension The ASCII encoded name of the extension. - * @return `GLFW_TRUE` if the extension is available, or `GLFW_FALSE` - * otherwise. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_NO_CURRENT_CONTEXT, @ref GLFW_INVALID_VALUE and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref context_glext - * @sa glfwGetProcAddress - * - * @since Added in version 1.0. - * - * @ingroup context - */ -GLFWAPI int glfwExtensionSupported(const char* extension); - -/*! @brief Returns the address of the specified function for the current - * context. - * - * This function returns the address of the specified OpenGL or OpenGL ES - * [core or extension function](@ref context_glext), if it is supported - * by the current context. - * - * A context must be current on the calling thread. Calling this function - * without a current context will cause a @ref GLFW_NO_CURRENT_CONTEXT error. - * - * This function does not apply to Vulkan. If you are rendering with Vulkan, - * see @ref glfwGetInstanceProcAddress, `vkGetInstanceProcAddr` and - * `vkGetDeviceProcAddr` instead. - * - * @param[in] procname The ASCII encoded name of the function. - * @return The address of the function, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_NO_CURRENT_CONTEXT and @ref GLFW_PLATFORM_ERROR. - * - * @remark The address of a given function is not guaranteed to be the same - * between contexts. - * - * @remark This function may return a non-`NULL` address despite the - * associated version or extension not being available. Always check the - * context version or extension string first. - * - * @pointer_lifetime The returned function pointer is valid until the context - * is destroyed or the library is terminated. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref context_glext - * @sa glfwExtensionSupported - * - * @since Added in version 1.0. - * - * @ingroup context - */ -GLFWAPI GLFWglproc glfwGetProcAddress(const char* procname); - -/*! @brief Returns whether the Vulkan loader has been found. - * - * This function returns whether the Vulkan loader has been found. This check - * is performed by @ref glfwInit. - * - * The availability of a Vulkan loader does not by itself guarantee that window - * surface creation or even device creation is possible. Call @ref - * glfwGetRequiredInstanceExtensions to check whether the extensions necessary - * for Vulkan surface creation are available and @ref - * glfwGetPhysicalDevicePresentationSupport to check whether a queue family of - * a physical device supports image presentation. - * - * @return `GLFW_TRUE` if Vulkan is available, or `GLFW_FALSE` otherwise. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref vulkan_support - * - * @since Added in version 3.2. - * - * @ingroup vulkan - */ -GLFWAPI int glfwVulkanSupported(void); - -/*! @brief Returns the Vulkan instance extensions required by GLFW. - * - * This function returns an array of names of Vulkan instance extensions required - * by GLFW for creating Vulkan surfaces for GLFW windows. If successful, the - * list will always contains `VK_KHR_surface`, so if you don't require any - * additional extensions you can pass this list directly to the - * `VkInstanceCreateInfo` struct. - * - * If Vulkan is not available on the machine, this function returns `NULL` and - * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref glfwVulkanSupported - * to check whether Vulkan is available. - * - * If Vulkan is available but no set of extensions allowing window surface - * creation was found, this function returns `NULL`. You may still use Vulkan - * for off-screen rendering and compute work. - * - * @param[out] count Where to store the number of extensions in the returned - * array. This is set to zero if an error occurred. - * @return An array of ASCII encoded extension names, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_API_UNAVAILABLE. - * - * @remarks Additional extensions may be required by future versions of GLFW. - * You should check if any extensions you wish to enable are already in the - * returned array, as it is an error to specify an extension more than once in - * the `VkInstanceCreateInfo` struct. - * - * @pointer_lifetime The returned array is allocated and freed by GLFW. You - * should not free it yourself. It is guaranteed to be valid only until the - * library is terminated. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref vulkan_ext - * @sa glfwCreateWindowSurface - * - * @since Added in version 3.2. - * - * @ingroup vulkan - */ -GLFWAPI const char** glfwGetRequiredInstanceExtensions(uint32_t* count); - -#if defined(VK_VERSION_1_0) - -/*! @brief Returns the address of the specified Vulkan instance function. - * - * This function returns the address of the specified Vulkan core or extension - * function for the specified instance. If instance is set to `NULL` it can - * return any function exported from the Vulkan loader, including at least the - * following functions: - * - * - `vkEnumerateInstanceExtensionProperties` - * - `vkEnumerateInstanceLayerProperties` - * - `vkCreateInstance` - * - `vkGetInstanceProcAddr` - * - * If Vulkan is not available on the machine, this function returns `NULL` and - * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref glfwVulkanSupported - * to check whether Vulkan is available. - * - * This function is equivalent to calling `vkGetInstanceProcAddr` with - * a platform-specific query of the Vulkan loader as a fallback. - * - * @param[in] instance The Vulkan instance to query, or `NULL` to retrieve - * functions related to instance creation. - * @param[in] procname The ASCII encoded name of the function. - * @return The address of the function, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_API_UNAVAILABLE. - * - * @pointer_lifetime The returned function pointer is valid until the library - * is terminated. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref vulkan_proc - * - * @since Added in version 3.2. - * - * @ingroup vulkan - */ -GLFWAPI GLFWvkproc glfwGetInstanceProcAddress(VkInstance instance, const char* procname); - -/*! @brief Returns whether the specified queue family can present images. - * - * This function returns whether the specified queue family of the specified - * physical device supports presentation to the platform GLFW was built for. - * - * If Vulkan or the required window surface creation instance extensions are - * not available on the machine, or if the specified instance was not created - * with the required extensions, this function returns `GLFW_FALSE` and - * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref glfwVulkanSupported - * to check whether Vulkan is available and @ref - * glfwGetRequiredInstanceExtensions to check what instance extensions are - * required. - * - * @param[in] instance The instance that the physical device belongs to. - * @param[in] device The physical device that the queue family belongs to. - * @param[in] queuefamily The index of the queue family to query. - * @return `GLFW_TRUE` if the queue family supports presentation, or - * `GLFW_FALSE` otherwise. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_API_UNAVAILABLE and @ref GLFW_PLATFORM_ERROR. - * - * @thread_safety This function may be called from any thread. For - * synchronization details of Vulkan objects, see the Vulkan specification. - * - * @sa @ref vulkan_present - * - * @since Added in version 3.2. - * - * @ingroup vulkan - */ -GLFWAPI int glfwGetPhysicalDevicePresentationSupport(VkInstance instance, VkPhysicalDevice device, uint32_t queuefamily); - -/*! @brief Creates a Vulkan surface for the specified window. - * - * This function creates a Vulkan surface for the specified window. - * - * If the Vulkan loader was not found at initialization, this function returns - * `VK_ERROR_INITIALIZATION_FAILED` and generates a @ref GLFW_API_UNAVAILABLE - * error. Call @ref glfwVulkanSupported to check whether the Vulkan loader was - * found. - * - * If the required window surface creation instance extensions are not - * available or if the specified instance was not created with these extensions - * enabled, this function returns `VK_ERROR_EXTENSION_NOT_PRESENT` and - * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref - * glfwGetRequiredInstanceExtensions to check what instance extensions are - * required. - * - * The window surface must be destroyed before the specified Vulkan instance. - * It is the responsibility of the caller to destroy the window surface. GLFW - * does not destroy it for you. Call `vkDestroySurfaceKHR` to destroy the - * surface. - * - * @param[in] instance The Vulkan instance to create the surface in. - * @param[in] window The window to create the surface for. - * @param[in] allocator The allocator to use, or `NULL` to use the default - * allocator. - * @param[out] surface Where to store the handle of the surface. This is set - * to `VK_NULL_HANDLE` if an error occurred. - * @return `VK_SUCCESS` if successful, or a Vulkan error code if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_API_UNAVAILABLE and @ref GLFW_PLATFORM_ERROR. - * - * @remarks If an error occurs before the creation call is made, GLFW returns - * the Vulkan error code most appropriate for the error. Appropriate use of - * @ref glfwVulkanSupported and @ref glfwGetRequiredInstanceExtensions should - * eliminate almost all occurrences of these errors. - * - * @thread_safety This function may be called from any thread. For - * synchronization details of Vulkan objects, see the Vulkan specification. - * - * @sa @ref vulkan_surface - * @sa glfwGetRequiredInstanceExtensions - * - * @since Added in version 3.2. - * - * @ingroup vulkan - */ -GLFWAPI VkResult glfwCreateWindowSurface(VkInstance instance, GLFWwindow* window, const VkAllocationCallbacks* allocator, VkSurfaceKHR* surface); - -#endif /*VK_VERSION_1_0*/ - - -/************************************************************************* - * Global definition cleanup - *************************************************************************/ - -/* ------------------- BEGIN SYSTEM/COMPILER SPECIFIC -------------------- */ - -#ifdef GLFW_WINGDIAPI_DEFINED - #undef WINGDIAPI - #undef GLFW_WINGDIAPI_DEFINED -#endif - -#ifdef GLFW_CALLBACK_DEFINED - #undef CALLBACK - #undef GLFW_CALLBACK_DEFINED -#endif - -/* -------------------- END SYSTEM/COMPILER SPECIFIC --------------------- */ - - -#ifdef __cplusplus -} -#endif - -#endif /* _glfw3_h_ */ - diff --git a/cmake/imgui/examples/libs/glfw/include/GLFW/glfw3native.h b/cmake/imgui/examples/libs/glfw/include/GLFW/glfw3native.h deleted file mode 100644 index 9fa955e9..00000000 --- a/cmake/imgui/examples/libs/glfw/include/GLFW/glfw3native.h +++ /dev/null @@ -1,456 +0,0 @@ -/************************************************************************* - * GLFW 3.2 - www.glfw.org - * A library for OpenGL, window and input - *------------------------------------------------------------------------ - * Copyright (c) 2002-2006 Marcus Geelnard - * Copyright (c) 2006-2010 Camilla Berglund - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would - * be appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. - * - *************************************************************************/ - -#ifndef _glfw3_native_h_ -#define _glfw3_native_h_ - -#ifdef __cplusplus -extern "C" { -#endif - - -/************************************************************************* - * Doxygen documentation - *************************************************************************/ - -/*! @file glfw3native.h - * @brief The header of the native access functions. - * - * This is the header file of the native access functions. See @ref native for - * more information. - */ -/*! @defgroup native Native access - * - * **By using the native access functions you assert that you know what you're - * doing and how to fix problems caused by using them. If you don't, you - * shouldn't be using them.** - * - * Before the inclusion of @ref glfw3native.h, you may define exactly one - * window system API macro and zero or more context creation API macros. - * - * The chosen backends must match those the library was compiled for. Failure - * to do this will cause a link-time error. - * - * The available window API macros are: - * * `GLFW_EXPOSE_NATIVE_WIN32` - * * `GLFW_EXPOSE_NATIVE_COCOA` - * * `GLFW_EXPOSE_NATIVE_X11` - * * `GLFW_EXPOSE_NATIVE_WAYLAND` - * * `GLFW_EXPOSE_NATIVE_MIR` - * - * The available context API macros are: - * * `GLFW_EXPOSE_NATIVE_WGL` - * * `GLFW_EXPOSE_NATIVE_NSGL` - * * `GLFW_EXPOSE_NATIVE_GLX` - * * `GLFW_EXPOSE_NATIVE_EGL` - * - * These macros select which of the native access functions that are declared - * and which platform-specific headers to include. It is then up your (by - * definition platform-specific) code to handle which of these should be - * defined. - */ - - -/************************************************************************* - * System headers and types - *************************************************************************/ - -#if defined(GLFW_EXPOSE_NATIVE_WIN32) - // This is a workaround for the fact that glfw3.h needs to export APIENTRY (for - // example to allow applications to correctly declare a GL_ARB_debug_output - // callback) but windows.h assumes no one will define APIENTRY before it does - #undef APIENTRY - #include -#elif defined(GLFW_EXPOSE_NATIVE_COCOA) - #include - #if defined(__OBJC__) - #import - #else - typedef void* id; - #endif -#elif defined(GLFW_EXPOSE_NATIVE_X11) - #include - #include -#elif defined(GLFW_EXPOSE_NATIVE_WAYLAND) - #include -#elif defined(GLFW_EXPOSE_NATIVE_MIR) - #include -#endif - -#if defined(GLFW_EXPOSE_NATIVE_WGL) - /* WGL is declared by windows.h */ -#endif -#if defined(GLFW_EXPOSE_NATIVE_NSGL) - /* NSGL is declared by Cocoa.h */ -#endif -#if defined(GLFW_EXPOSE_NATIVE_GLX) - #include -#endif -#if defined(GLFW_EXPOSE_NATIVE_EGL) - #include -#endif - - -/************************************************************************* - * Functions - *************************************************************************/ - -#if defined(GLFW_EXPOSE_NATIVE_WIN32) -/*! @brief Returns the adapter device name of the specified monitor. - * - * @return The UTF-8 encoded adapter device name (for example `\\.\DISPLAY1`) - * of the specified monitor, or `NULL` if an [error](@ref error_handling) - * occurred. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.1. - * - * @ingroup native - */ -GLFWAPI const char* glfwGetWin32Adapter(GLFWmonitor* monitor); - -/*! @brief Returns the display device name of the specified monitor. - * - * @return The UTF-8 encoded display device name (for example - * `\\.\DISPLAY1\Monitor0`) of the specified monitor, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.1. - * - * @ingroup native - */ -GLFWAPI const char* glfwGetWin32Monitor(GLFWmonitor* monitor); - -/*! @brief Returns the `HWND` of the specified window. - * - * @return The `HWND` of the specified window, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.0. - * - * @ingroup native - */ -GLFWAPI HWND glfwGetWin32Window(GLFWwindow* window); -#endif - -#if defined(GLFW_EXPOSE_NATIVE_WGL) -/*! @brief Returns the `HGLRC` of the specified window. - * - * @return The `HGLRC` of the specified window, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.0. - * - * @ingroup native - */ -GLFWAPI HGLRC glfwGetWGLContext(GLFWwindow* window); -#endif - -#if defined(GLFW_EXPOSE_NATIVE_COCOA) -/*! @brief Returns the `CGDirectDisplayID` of the specified monitor. - * - * @return The `CGDirectDisplayID` of the specified monitor, or - * `kCGNullDirectDisplay` if an [error](@ref error_handling) occurred. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.1. - * - * @ingroup native - */ -GLFWAPI CGDirectDisplayID glfwGetCocoaMonitor(GLFWmonitor* monitor); - -/*! @brief Returns the `NSWindow` of the specified window. - * - * @return The `NSWindow` of the specified window, or `nil` if an - * [error](@ref error_handling) occurred. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.0. - * - * @ingroup native - */ -GLFWAPI id glfwGetCocoaWindow(GLFWwindow* window); -#endif - -#if defined(GLFW_EXPOSE_NATIVE_NSGL) -/*! @brief Returns the `NSOpenGLContext` of the specified window. - * - * @return The `NSOpenGLContext` of the specified window, or `nil` if an - * [error](@ref error_handling) occurred. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.0. - * - * @ingroup native - */ -GLFWAPI id glfwGetNSGLContext(GLFWwindow* window); -#endif - -#if defined(GLFW_EXPOSE_NATIVE_X11) -/*! @brief Returns the `Display` used by GLFW. - * - * @return The `Display` used by GLFW, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.0. - * - * @ingroup native - */ -GLFWAPI Display* glfwGetX11Display(void); - -/*! @brief Returns the `RRCrtc` of the specified monitor. - * - * @return The `RRCrtc` of the specified monitor, or `None` if an - * [error](@ref error_handling) occurred. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.1. - * - * @ingroup native - */ -GLFWAPI RRCrtc glfwGetX11Adapter(GLFWmonitor* monitor); - -/*! @brief Returns the `RROutput` of the specified monitor. - * - * @return The `RROutput` of the specified monitor, or `None` if an - * [error](@ref error_handling) occurred. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.1. - * - * @ingroup native - */ -GLFWAPI RROutput glfwGetX11Monitor(GLFWmonitor* monitor); - -/*! @brief Returns the `Window` of the specified window. - * - * @return The `Window` of the specified window, or `None` if an - * [error](@ref error_handling) occurred. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.0. - * - * @ingroup native - */ -GLFWAPI Window glfwGetX11Window(GLFWwindow* window); -#endif - -#if defined(GLFW_EXPOSE_NATIVE_GLX) -/*! @brief Returns the `GLXContext` of the specified window. - * - * @return The `GLXContext` of the specified window, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.0. - * - * @ingroup native - */ -GLFWAPI GLXContext glfwGetGLXContext(GLFWwindow* window); - -/*! @brief Returns the `GLXWindow` of the specified window. - * - * @return The `GLXWindow` of the specified window, or `None` if an - * [error](@ref error_handling) occurred. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.2. - * - * @ingroup native - */ -GLFWAPI GLXWindow glfwGetGLXWindow(GLFWwindow* window); -#endif - -#if defined(GLFW_EXPOSE_NATIVE_WAYLAND) -/*! @brief Returns the `struct wl_display*` used by GLFW. - * - * @return The `struct wl_display*` used by GLFW, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.2. - * - * @ingroup native - */ -GLFWAPI struct wl_display* glfwGetWaylandDisplay(void); - -/*! @brief Returns the `struct wl_output*` of the specified monitor. - * - * @return The `struct wl_output*` of the specified monitor, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.2. - * - * @ingroup native - */ -GLFWAPI struct wl_output* glfwGetWaylandMonitor(GLFWmonitor* monitor); - -/*! @brief Returns the main `struct wl_surface*` of the specified window. - * - * @return The main `struct wl_surface*` of the specified window, or `NULL` if - * an [error](@ref error_handling) occurred. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.2. - * - * @ingroup native - */ -GLFWAPI struct wl_surface* glfwGetWaylandWindow(GLFWwindow* window); -#endif - -#if defined(GLFW_EXPOSE_NATIVE_MIR) -/*! @brief Returns the `MirConnection*` used by GLFW. - * - * @return The `MirConnection*` used by GLFW, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.2. - * - * @ingroup native - */ -GLFWAPI MirConnection* glfwGetMirDisplay(void); - -/*! @brief Returns the Mir output ID of the specified monitor. - * - * @return The Mir output ID of the specified monitor, or zero if an - * [error](@ref error_handling) occurred. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.2. - * - * @ingroup native - */ -GLFWAPI int glfwGetMirMonitor(GLFWmonitor* monitor); - -/*! @brief Returns the `MirSurface*` of the specified window. - * - * @return The `MirSurface*` of the specified window, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.2. - * - * @ingroup native - */ -GLFWAPI MirSurface* glfwGetMirWindow(GLFWwindow* window); -#endif - -#if defined(GLFW_EXPOSE_NATIVE_EGL) -/*! @brief Returns the `EGLDisplay` used by GLFW. - * - * @return The `EGLDisplay` used by GLFW, or `EGL_NO_DISPLAY` if an - * [error](@ref error_handling) occurred. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.0. - * - * @ingroup native - */ -GLFWAPI EGLDisplay glfwGetEGLDisplay(void); - -/*! @brief Returns the `EGLContext` of the specified window. - * - * @return The `EGLContext` of the specified window, or `EGL_NO_CONTEXT` if an - * [error](@ref error_handling) occurred. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.0. - * - * @ingroup native - */ -GLFWAPI EGLContext glfwGetEGLContext(GLFWwindow* window); - -/*! @brief Returns the `EGLSurface` of the specified window. - * - * @return The `EGLSurface` of the specified window, or `EGL_NO_SURFACE` if an - * [error](@ref error_handling) occurred. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.0. - * - * @ingroup native - */ -GLFWAPI EGLSurface glfwGetEGLSurface(GLFWwindow* window); -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* _glfw3_native_h_ */ - diff --git a/cmake/imgui/examples/libs/glfw/lib-vc2010-32/glfw3.lib b/cmake/imgui/examples/libs/glfw/lib-vc2010-32/glfw3.lib deleted file mode 100644 index 348abecf..00000000 Binary files a/cmake/imgui/examples/libs/glfw/lib-vc2010-32/glfw3.lib and /dev/null differ diff --git a/cmake/imgui/examples/libs/glfw/lib-vc2010-64/glfw3.lib b/cmake/imgui/examples/libs/glfw/lib-vc2010-64/glfw3.lib deleted file mode 100644 index 768f3083..00000000 Binary files a/cmake/imgui/examples/libs/glfw/lib-vc2010-64/glfw3.lib and /dev/null differ diff --git a/cmake/imgui/examples/libs/usynergy/README.txt b/cmake/imgui/examples/libs/usynergy/README.txt deleted file mode 100644 index c86b9096..00000000 --- a/cmake/imgui/examples/libs/usynergy/README.txt +++ /dev/null @@ -1,8 +0,0 @@ - -uSynergy client -- Implementation for the embedded Synergy client library -version 1.0.0, July 7th, 2012 -Copyright (c) 2012 Alex Evans - -This is a copy of the files once found at: - https://github.com/symless/synergy-core/tree/790d108a56ada9caad8e56ff777d444485a69da9/src/micro - diff --git a/cmake/imgui/examples/libs/usynergy/uSynergy.c b/cmake/imgui/examples/libs/usynergy/uSynergy.c deleted file mode 100644 index 8dce47b8..00000000 --- a/cmake/imgui/examples/libs/usynergy/uSynergy.c +++ /dev/null @@ -1,636 +0,0 @@ -/* -uSynergy client -- Implementation for the embedded Synergy client library - version 1.0.0, July 7th, 2012 - -Copyright (c) 2012 Alex Evans - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - - 3. This notice may not be removed or altered from any source - distribution. -*/ -#include "uSynergy.h" -#include -#include - - - -//--------------------------------------------------------------------------------------------------------------------- -// Internal helpers -//--------------------------------------------------------------------------------------------------------------------- - - - -/** -@brief Read 16 bit integer in network byte order and convert to native byte order -**/ -static int16_t sNetToNative16(const unsigned char *value) -{ -#ifdef USYNERGY_LITTLE_ENDIAN - return value[1] | (value[0] << 8); -#else - return value[0] | (value[1] << 8); -#endif -} - - - -/** -@brief Read 32 bit integer in network byte order and convert to native byte order -**/ -static int32_t sNetToNative32(const unsigned char *value) -{ -#ifdef USYNERGY_LITTLE_ENDIAN - return value[3] | (value[2] << 8) | (value[1] << 16) | (value[0] << 24); -#else - return value[0] | (value[1] << 8) | (value[2] << 16) | (value[3] << 24); -#endif -} - - - -/** -@brief Trace text to client -**/ -static void sTrace(uSynergyContext *context, const char* text) -{ - // Don't trace if we don't have a trace function - if (context->m_traceFunc != 0L) - context->m_traceFunc(context->m_cookie, text); -} - - - -/** -@brief Add string to reply packet -**/ -static void sAddString(uSynergyContext *context, const char *string) -{ - size_t len = strlen(string); - memcpy(context->m_replyCur, string, len); - context->m_replyCur += len; -} - - - -/** -@brief Add uint8 to reply packet -**/ -static void sAddUInt8(uSynergyContext *context, uint8_t value) -{ - *context->m_replyCur++ = value; -} - - - -/** -@brief Add uint16 to reply packet -**/ -static void sAddUInt16(uSynergyContext *context, uint16_t value) -{ - uint8_t *reply = context->m_replyCur; - *reply++ = (uint8_t)(value >> 8); - *reply++ = (uint8_t)value; - context->m_replyCur = reply; -} - - - -/** -@brief Add uint32 to reply packet -**/ -static void sAddUInt32(uSynergyContext *context, uint32_t value) -{ - uint8_t *reply = context->m_replyCur; - *reply++ = (uint8_t)(value >> 24); - *reply++ = (uint8_t)(value >> 16); - *reply++ = (uint8_t)(value >> 8); - *reply++ = (uint8_t)value; - context->m_replyCur = reply; -} - - - -/** -@brief Send reply packet -**/ -static uSynergyBool sSendReply(uSynergyContext *context) -{ - // Set header size - uint8_t *reply_buf = context->m_replyBuffer; - uint32_t reply_len = (uint32_t)(context->m_replyCur - reply_buf); /* Total size of reply */ - uint32_t body_len = reply_len - 4; /* Size of body */ - uSynergyBool ret; - reply_buf[0] = (uint8_t)(body_len >> 24); - reply_buf[1] = (uint8_t)(body_len >> 16); - reply_buf[2] = (uint8_t)(body_len >> 8); - reply_buf[3] = (uint8_t)body_len; - - // Send reply - ret = context->m_sendFunc(context->m_cookie, context->m_replyBuffer, reply_len); - - // Reset reply buffer write pointer - context->m_replyCur = context->m_replyBuffer+4; - return ret; -} - - - -/** -@brief Call mouse callback after a mouse event -**/ -static void sSendMouseCallback(uSynergyContext *context) -{ - // Skip if no callback is installed - if (context->m_mouseCallback == 0L) - return; - - // Send callback - context->m_mouseCallback(context->m_cookie, context->m_mouseX, context->m_mouseY, context->m_mouseWheelX, - context->m_mouseWheelY, context->m_mouseButtonLeft, context->m_mouseButtonRight, context->m_mouseButtonMiddle); -} - - - -/** -@brief Send keyboard callback when a key has been pressed or released -**/ -static void sSendKeyboardCallback(uSynergyContext *context, uint16_t key, uint16_t modifiers, uSynergyBool down, uSynergyBool repeat) -{ - // Skip if no callback is installed - if (context->m_keyboardCallback == 0L) - return; - - // Send callback - context->m_keyboardCallback(context->m_cookie, key, modifiers, down, repeat); -} - - - -/** -@brief Send joystick callback -**/ -static void sSendJoystickCallback(uSynergyContext *context, uint8_t joyNum) -{ - int8_t *sticks; - - // Skip if no callback is installed - if (context->m_joystickCallback == 0L) - return; - - // Send callback - sticks = context->m_joystickSticks[joyNum]; - context->m_joystickCallback(context->m_cookie, joyNum, context->m_joystickButtons[joyNum], sticks[0], sticks[1], sticks[2], sticks[3]); -} - - - -/** -@brief Parse a single client message, update state, send callbacks and send replies -**/ -#define USYNERGY_IS_PACKET(pkt_id) memcmp(message+4, pkt_id, 4)==0 -static void sProcessMessage(uSynergyContext *context, const uint8_t *message) -{ - // We have a packet! - if (memcmp(message+4, "Synergy", 7)==0) - { - // Welcome message - // kMsgHello = "Synergy%2i%2i" - // kMsgHelloBack = "Synergy%2i%2i%s" - sAddString(context, "Synergy"); - sAddUInt16(context, USYNERGY_PROTOCOL_MAJOR); - sAddUInt16(context, USYNERGY_PROTOCOL_MINOR); - sAddUInt32(context, (uint32_t)strlen(context->m_clientName)); - sAddString(context, context->m_clientName); - if (!sSendReply(context)) - { - // Send reply failed, let's try to reconnect - sTrace(context, "SendReply failed, trying to reconnect in a second"); - context->m_connected = USYNERGY_FALSE; - context->m_sleepFunc(context->m_cookie, 1000); - } - else - { - // Let's assume we're connected - char buffer[256+1]; - sprintf(buffer, "Connected as client \"%s\"", context->m_clientName); - sTrace(context, buffer); - context->m_hasReceivedHello = USYNERGY_TRUE; - } - return; - } - else if (USYNERGY_IS_PACKET("QINF")) - { - // Screen info. Reply with DINF - // kMsgQInfo = "QINF" - // kMsgDInfo = "DINF%2i%2i%2i%2i%2i%2i%2i" - uint16_t x = 0, y = 0, warp = 0; - sAddString(context, "DINF"); - sAddUInt16(context, x); - sAddUInt16(context, y); - sAddUInt16(context, context->m_clientWidth); - sAddUInt16(context, context->m_clientHeight); - sAddUInt16(context, warp); - sAddUInt16(context, 0); // mx? - sAddUInt16(context, 0); // my? - sSendReply(context); - return; - } - else if (USYNERGY_IS_PACKET("CIAK")) - { - // Do nothing? - // kMsgCInfoAck = "CIAK" - return; - } - else if (USYNERGY_IS_PACKET("CROP")) - { - // Do nothing? - // kMsgCResetOptions = "CROP" - return; - } - else if (USYNERGY_IS_PACKET("CINN")) - { - // Screen enter. Reply with CNOP - // kMsgCEnter = "CINN%2i%2i%4i%2i" - - // Obtain the Synergy sequence number - context->m_sequenceNumber = sNetToNative32(message + 12); - context->m_isCaptured = USYNERGY_TRUE; - - // Call callback - if (context->m_screenActiveCallback != 0L) - context->m_screenActiveCallback(context->m_cookie, USYNERGY_TRUE); - } - else if (USYNERGY_IS_PACKET("COUT")) - { - // Screen leave - // kMsgCLeave = "COUT" - context->m_isCaptured = USYNERGY_FALSE; - - // Call callback - if (context->m_screenActiveCallback != 0L) - context->m_screenActiveCallback(context->m_cookie, USYNERGY_FALSE); - } - else if (USYNERGY_IS_PACKET("DMDN")) - { - // Mouse down - // kMsgDMouseDown = "DMDN%1i" - char btn = message[8]-1; - if (btn==2) - context->m_mouseButtonRight = USYNERGY_TRUE; - else if (btn==1) - context->m_mouseButtonMiddle = USYNERGY_TRUE; - else - context->m_mouseButtonLeft = USYNERGY_TRUE; - sSendMouseCallback(context); - } - else if (USYNERGY_IS_PACKET("DMUP")) - { - // Mouse up - // kMsgDMouseUp = "DMUP%1i" - char btn = message[8]-1; - if (btn==2) - context->m_mouseButtonRight = USYNERGY_FALSE; - else if (btn==1) - context->m_mouseButtonMiddle = USYNERGY_FALSE; - else - context->m_mouseButtonLeft = USYNERGY_FALSE; - sSendMouseCallback(context); - } - else if (USYNERGY_IS_PACKET("DMMV")) - { - // Mouse move. Reply with CNOP - // kMsgDMouseMove = "DMMV%2i%2i" - context->m_mouseX = sNetToNative16(message+8); - context->m_mouseY = sNetToNative16(message+10); - sSendMouseCallback(context); - } - else if (USYNERGY_IS_PACKET("DMWM")) - { - // Mouse wheel - // kMsgDMouseWheel = "DMWM%2i%2i" - // kMsgDMouseWheel1_0 = "DMWM%2i" - context->m_mouseWheelX += sNetToNative16(message+8); - context->m_mouseWheelY += sNetToNative16(message+10); - sSendMouseCallback(context); - } - else if (USYNERGY_IS_PACKET("DKDN")) - { - // Key down - // kMsgDKeyDown = "DKDN%2i%2i%2i" - // kMsgDKeyDown1_0 = "DKDN%2i%2i" - //uint16_t id = sNetToNative16(message+8); - uint16_t mod = sNetToNative16(message+10); - uint16_t key = sNetToNative16(message+12); - sSendKeyboardCallback(context, key, mod, USYNERGY_TRUE, USYNERGY_FALSE); - } - else if (USYNERGY_IS_PACKET("DKRP")) - { - // Key repeat - // kMsgDKeyRepeat = "DKRP%2i%2i%2i%2i" - // kMsgDKeyRepeat1_0 = "DKRP%2i%2i%2i" - uint16_t mod = sNetToNative16(message+10); -// uint16_t count = sNetToNative16(message+12); - uint16_t key = sNetToNative16(message+14); - sSendKeyboardCallback(context, key, mod, USYNERGY_TRUE, USYNERGY_TRUE); - } - else if (USYNERGY_IS_PACKET("DKUP")) - { - // Key up - // kMsgDKeyUp = "DKUP%2i%2i%2i" - // kMsgDKeyUp1_0 = "DKUP%2i%2i" - //uint16 id=Endian::sNetToNative(sbuf[4]); - uint16_t mod = sNetToNative16(message+10); - uint16_t key = sNetToNative16(message+12); - sSendKeyboardCallback(context, key, mod, USYNERGY_FALSE, USYNERGY_FALSE); - } - else if (USYNERGY_IS_PACKET("DGBT")) - { - // Joystick buttons - // kMsgDGameButtons = "DGBT%1i%2i"; - uint8_t joy_num = message[8]; - if (joy_numm_joystickButtons[joy_num] = (message[9] << 8) | message[10]; - sSendJoystickCallback(context, joy_num); - } - } - else if (USYNERGY_IS_PACKET("DGST")) - { - // Joystick sticks - // kMsgDGameSticks = "DGST%1i%1i%1i%1i%1i"; - uint8_t joy_num = message[8]; - if (joy_numm_joystickSticks[joy_num], message+9, 4); - sSendJoystickCallback(context, joy_num); - } - } - else if (USYNERGY_IS_PACKET("DSOP")) - { - // Set options - // kMsgDSetOptions = "DSOP%4I" - } - else if (USYNERGY_IS_PACKET("CALV")) - { - // Keepalive, reply with CALV and then CNOP - // kMsgCKeepAlive = "CALV" - sAddString(context, "CALV"); - sSendReply(context); - // now reply with CNOP - } - else if (USYNERGY_IS_PACKET("DCLP")) - { - // Clipboard message - // kMsgDClipboard = "DCLP%1i%4i%s" - // - // The clipboard message contains: - // 1 uint32: The size of the message - // 4 chars: The identifier ("DCLP") - // 1 uint8: The clipboard index - // 1 uint32: The sequence number. It's zero, because this message is always coming from the server? - // 1 uint32: The total size of the remaining 'string' (as per the Synergy %s string format (which is 1 uint32 for size followed by a char buffer (not necessarily null terminated)). - // 1 uint32: The number of formats present in the message - // And then 'number of formats' times the following: - // 1 uint32: The format of the clipboard data - // 1 uint32: The size n of the clipboard data - // n uint8: The clipboard data - const uint8_t * parse_msg = message+17; - uint32_t num_formats = sNetToNative32(parse_msg); - parse_msg += 4; - for (; num_formats; num_formats--) - { - // Parse clipboard format header - uint32_t format = sNetToNative32(parse_msg); - uint32_t size = sNetToNative32(parse_msg+4); - parse_msg += 8; - - // Call callback - if (context->m_clipboardCallback) - context->m_clipboardCallback(context->m_cookie, format, parse_msg, size); - - parse_msg += size; - } - } - else - { - // Unknown packet, could be any of these - // kMsgCNoop = "CNOP" - // kMsgCClose = "CBYE" - // kMsgCClipboard = "CCLP%1i%4i" - // kMsgCScreenSaver = "CSEC%1i" - // kMsgDKeyRepeat = "DKRP%2i%2i%2i%2i" - // kMsgDKeyRepeat1_0 = "DKRP%2i%2i%2i" - // kMsgDMouseRelMove = "DMRM%2i%2i" - // kMsgEIncompatible = "EICV%2i%2i" - // kMsgEBusy = "EBSY" - // kMsgEUnknown = "EUNK" - // kMsgEBad = "EBAD" - char buffer[64]; - sprintf(buffer, "Unknown packet '%c%c%c%c'", message[4], message[5], message[6], message[7]); - sTrace(context, buffer); - return; - } - - // Reply with CNOP maybe? - sAddString(context, "CNOP"); - sSendReply(context); -} -#undef USYNERGY_IS_PACKET - - - -/** -@brief Mark context as being disconnected -**/ -static void sSetDisconnected(uSynergyContext *context) -{ - context->m_connected = USYNERGY_FALSE; - context->m_hasReceivedHello = USYNERGY_FALSE; - context->m_isCaptured = USYNERGY_FALSE; - context->m_replyCur = context->m_replyBuffer + 4; - context->m_sequenceNumber = 0; -} - - - -/** -@brief Update a connected context -**/ -static void sUpdateContext(uSynergyContext *context) -{ - /* Receive data (blocking) */ - int receive_size = USYNERGY_RECEIVE_BUFFER_SIZE - context->m_receiveOfs; - int num_received = 0; - int packlen = 0; - if (context->m_receiveFunc(context->m_cookie, context->m_receiveBuffer + context->m_receiveOfs, receive_size, &num_received) == USYNERGY_FALSE) - { - /* Receive failed, let's try to reconnect */ - char buffer[128]; - sprintf(buffer, "Receive failed (%d bytes asked, %d bytes received), trying to reconnect in a second", receive_size, num_received); - sTrace(context, buffer); - sSetDisconnected(context); - context->m_sleepFunc(context->m_cookie, 1000); - return; - } - context->m_receiveOfs += num_received; - - /* If we didn't receive any data then we're probably still polling to get connected and - therefore not getting any data back. To avoid overloading the system with a Synergy - thread that would hammer on polling, we let it rest for a bit if there's no data. */ - if (num_received == 0) - context->m_sleepFunc(context->m_cookie, 500); - - /* Check for timeouts */ - if (context->m_hasReceivedHello) - { - uint32_t cur_time = context->m_getTimeFunc(); - if (num_received == 0) - { - /* Timeout after 2 secs of inactivity (we received no CALV) */ - if ((cur_time - context->m_lastMessageTime) > USYNERGY_IDLE_TIMEOUT) - sSetDisconnected(context); - } - else - context->m_lastMessageTime = cur_time; - } - - /* Eat packets */ - for (;;) - { - /* Grab packet length and bail out if the packet goes beyond the end of the buffer */ - packlen = sNetToNative32(context->m_receiveBuffer); - if (packlen+4 > context->m_receiveOfs) - break; - - /* Process message */ - sProcessMessage(context, context->m_receiveBuffer); - - /* Move packet to front of buffer */ - memmove(context->m_receiveBuffer, context->m_receiveBuffer+packlen+4, context->m_receiveOfs-packlen-4); - context->m_receiveOfs -= packlen+4; - } - - /* Throw away over-sized packets */ - if (packlen > USYNERGY_RECEIVE_BUFFER_SIZE) - { - /* Oversized packet, ditch tail end */ - char buffer[128]; - sprintf(buffer, "Oversized packet: '%c%c%c%c' (length %d)", context->m_receiveBuffer[4], context->m_receiveBuffer[5], context->m_receiveBuffer[6], context->m_receiveBuffer[7], packlen); - sTrace(context, buffer); - num_received = context->m_receiveOfs-4; // 4 bytes for the size field - while (num_received != packlen) - { - int buffer_left = packlen - num_received; - int to_receive = buffer_left < USYNERGY_RECEIVE_BUFFER_SIZE ? buffer_left : USYNERGY_RECEIVE_BUFFER_SIZE; - int ditch_received = 0; - if (context->m_receiveFunc(context->m_cookie, context->m_receiveBuffer, to_receive, &ditch_received) == USYNERGY_FALSE) - { - /* Receive failed, let's try to reconnect */ - sTrace(context, "Receive failed, trying to reconnect in a second"); - sSetDisconnected(context); - context->m_sleepFunc(context->m_cookie, 1000); - break; - } - else - { - num_received += ditch_received; - } - } - context->m_receiveOfs = 0; - } -} - - -//--------------------------------------------------------------------------------------------------------------------- -// Public interface -//--------------------------------------------------------------------------------------------------------------------- - - - -/** -@brief Initialize uSynergy context -**/ -void uSynergyInit(uSynergyContext *context) -{ - /* Zero memory */ - memset(context, 0, sizeof(uSynergyContext)); - - /* Initialize to default state */ - sSetDisconnected(context); -} - - -/** -@brief Update uSynergy -**/ -void uSynergyUpdate(uSynergyContext *context) -{ - if (context->m_connected) - { - /* Update context, receive data, call callbacks */ - sUpdateContext(context); - } - else - { - /* Try to connect */ - if (context->m_connectFunc(context->m_cookie)) - context->m_connected = USYNERGY_TRUE; - } -} - - - -/** -@brief Send clipboard data -**/ -void uSynergySendClipboard(uSynergyContext *context, const char *text) -{ - // Calculate maximum size that will fit in a reply packet - uint32_t overhead_size = 4 + /* Message size */ - 4 + /* Message ID */ - 1 + /* Clipboard index */ - 4 + /* Sequence number */ - 4 + /* Rest of message size (because it's a Synergy string from here on) */ - 4 + /* Number of clipboard formats */ - 4 + /* Clipboard format */ - 4; /* Clipboard data length */ - uint32_t max_length = USYNERGY_REPLY_BUFFER_SIZE - overhead_size; - - // Clip text to max length - uint32_t text_length = (uint32_t)strlen(text); - if (text_length > max_length) - { - char buffer[128]; - sprintf(buffer, "Clipboard buffer too small, clipboard truncated at %d characters", max_length); - sTrace(context, buffer); - text_length = max_length; - } - - // Assemble packet - sAddString(context, "DCLP"); - sAddUInt8(context, 0); /* Clipboard index */ - sAddUInt32(context, context->m_sequenceNumber); - sAddUInt32(context, 4+4+4+text_length); /* Rest of message size: numFormats, format, length, data */ - sAddUInt32(context, 1); /* Number of formats (only text for now) */ - sAddUInt32(context, USYNERGY_CLIPBOARD_FORMAT_TEXT); - sAddUInt32(context, text_length); - sAddString(context, text); - sSendReply(context); -} diff --git a/cmake/imgui/examples/libs/usynergy/uSynergy.h b/cmake/imgui/examples/libs/usynergy/uSynergy.h deleted file mode 100644 index cedc3878..00000000 --- a/cmake/imgui/examples/libs/usynergy/uSynergy.h +++ /dev/null @@ -1,420 +0,0 @@ -/* -uSynergy client -- Interface for the embedded Synergy client library - version 1.0.0, July 7th, 2012 - -Copyright (C) 2012 Synergy Si Ltd. -Copyright (c) 2012 Alex Evans - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - - 3. This notice may not be removed or altered from any source - distribution. -*/ -#include - -#ifdef __cplusplus -extern "C" { -#endif - - - -//--------------------------------------------------------------------------------------------------------------------- -// Configuration -//--------------------------------------------------------------------------------------------------------------------- - - - -/** -@brief Determine endianness -**/ -#if defined(USYNERGY_LITTLE_ENDIAN) && defined(USYNERGY_BIG_ENDIAN) - /* Ambiguous: both endians specified */ - #error "Can't define both USYNERGY_LITTLE_ENDIAN and USYNERGY_BIG_ENDIAN" -#elif !defined(USYNERGY_LITTLE_ENDIAN) && !defined(USYNERGY_BIG_ENDIAN) - /* Attempt to auto detect */ - #if defined(__LITTLE_ENDIAN__) || defined(LITTLE_ENDIAN) || (_BYTE_ORDER == _LITTLE_ENDIAN) - #define USYNERGY_LITTLE_ENDIAN - #elif defined(__BIG_ENDIAN__) || defined(BIG_ENDIAN) || (_BYTE_ORDER == _BIG_ENDIAN) - #define USYNERGY_BIG_ENDIAN - #else - #error "Can't detect endian-nes, please defined either USYNERGY_LITTLE_ENDIAN or USYNERGY_BIG_ENDIAN"; - #endif -#else - /* User-specified endian-nes, nothing to do for us */ -#endif - - - -//--------------------------------------------------------------------------------------------------------------------- -// Types and Constants -//--------------------------------------------------------------------------------------------------------------------- - - - -/** -@brief Boolean type -**/ -typedef int uSynergyBool; -#define USYNERGY_FALSE 0 /* False value */ -#define USYNERGY_TRUE 1 /* True value */ - - -/** -@brief User context type - -The uSynergyCookie type is an opaque type that is used by uSynergy to communicate to the client. It is passed along to -callback functions as context. -**/ -typedef struct { int ignored; } * uSynergyCookie; - - - -/** -@brief Clipboard types -**/ -enum uSynergyClipboardFormat -{ - USYNERGY_CLIPBOARD_FORMAT_TEXT = 0, /* Text format, UTF-8, newline is LF */ - USYNERGY_CLIPBOARD_FORMAT_BITMAP = 1, /* Bitmap format, BMP 24/32bpp, BI_RGB */ - USYNERGY_CLIPBOARD_FORMAT_HTML = 2, /* HTML format, HTML fragment, UTF-8, newline is LF */ -}; - - - -/** -@brief Constants and limits -**/ -#define USYNERGY_NUM_JOYSTICKS 4 /* Maximum number of supported joysticks */ - -#define USYNERGY_PROTOCOL_MAJOR 1 /* Major protocol version */ -#define USYNERGY_PROTOCOL_MINOR 4 /* Minor protocol version */ - -#define USYNERGY_IDLE_TIMEOUT 2000 /* Timeout in milliseconds before reconnecting */ - -#define USYNERGY_TRACE_BUFFER_SIZE 1024 /* Maximum length of traced message */ -#define USYNERGY_REPLY_BUFFER_SIZE 1024 /* Maximum size of a reply packet */ -#define USYNERGY_RECEIVE_BUFFER_SIZE 4096 /* Maximum size of an incoming packet */ - - - -/** -@brief Keyboard constants -**/ -#define USYNERGY_MODIFIER_SHIFT 0x0001 /* Shift key modifier */ -#define USYNERGY_MODIFIER_CTRL 0x0002 /* Ctrl key modifier */ -#define USYNERGY_MODIFIER_ALT 0x0004 /* Alt key modifier */ -#define USYNERGY_MODIFIER_META 0x0008 /* Meta key modifier */ -#define USYNERGY_MODIFIER_WIN 0x0010 /* Windows key modifier */ -#define USYNERGY_MODIFIER_ALT_GR 0x0020 /* AltGr key modifier */ -#define USYNERGY_MODIFIER_LEVEL5LOCK 0x0040 /* Level5Lock key modifier */ -#define USYNERGY_MODIFIER_CAPSLOCK 0x1000 /* CapsLock key modifier */ -#define USYNERGY_MODIFIER_NUMLOCK 0x2000 /* NumLock key modifier */ -#define USYNERGY_MODIFIER_SCROLLOCK 0x4000 /* ScrollLock key modifier */ - - - - -//--------------------------------------------------------------------------------------------------------------------- -// Functions and Callbacks -//--------------------------------------------------------------------------------------------------------------------- - - - -/** -@brief Connect function - -This function is called when uSynergy needs to connect to the host. It doesn't imply a network implementation or -destination address, that must all be handled on the user side. The function should return USYNERGY_TRUE if a -connection was established or USYNERGY_FALSE if it could not connect. - -When network errors occur (e.g. uSynergySend or uSynergyReceive fail) then the connect call will be called again -so the implementation of the function must close any old connections and clean up resources before retrying. - -@param cookie Cookie supplied in the Synergy context -**/ -typedef uSynergyBool (*uSynergyConnectFunc)(uSynergyCookie cookie); - - - -/** -@brief Send function - -This function is called when uSynergy needs to send something over the default connection. It should return -USYNERGY_TRUE if sending succeeded and USYNERGY_FALSE otherwise. This function should block until the send -operation is completed. - -@param cookie Cookie supplied in the Synergy context -@param buffer Address of buffer to send -@param length Length of buffer to send -**/ -typedef uSynergyBool (*uSynergySendFunc)(uSynergyCookie cookie, const uint8_t *buffer, int length); - - - -/** -@brief Receive function - -This function is called when uSynergy needs to receive data from the default connection. It should return -USYNERGY_TRUE if receiving data succeeded and USYNERGY_FALSE otherwise. This function should block until data -has been received and wait for data to become available. If @a outLength is set to 0 upon completion it is -assumed that the connection is alive, but still in a connecting state and needs time to settle. - -@param cookie Cookie supplied in the Synergy context -@param buffer Address of buffer to receive data into -@param maxLength Maximum amount of bytes to write into the receive buffer -@param outLength Address of integer that receives the actual amount of bytes written into @a buffer -**/ -typedef uSynergyBool (*uSynergyReceiveFunc)(uSynergyCookie cookie, uint8_t *buffer, int maxLength, int* outLength); - - - -/** -@brief Thread sleep function - -This function is called when uSynergy wants to suspend operation for a while before retrying an operation. It -is mostly used when a socket times out or disconnect occurs to prevent uSynergy from continuously hammering a -network connection in case the network is down. - -@param cookie Cookie supplied in the Synergy context -@param timeMs Time to sleep the current thread (in milliseconds) -**/ -typedef void (*uSynergySleepFunc)(uSynergyCookie cookie, int timeMs); - - - -/** -@brief Get time function - -This function is called when uSynergy needs to know the current time. This is used to determine when timeouts -have occured. The time base should be a cyclic millisecond time value. - -@returns Time value in milliseconds -**/ -typedef uint32_t (*uSynergyGetTimeFunc)(); - - - -/** -@brief Trace function - -This function is called when uSynergy wants to trace something. It is optional to show these messages, but they -are often useful when debugging. uSynergy only traces major events like connecting and disconnecting. Usually -only a single trace is shown when the connection is established and no more trace are called. - -@param cookie Cookie supplied in the Synergy context -@param text Text to be traced -**/ -typedef void (*uSynergyTraceFunc)(uSynergyCookie cookie, const char *text); - - - -/** -@brief Screen active callback - -This callback is called when Synergy makes the screen active or inactive. This -callback is usually sent when the mouse enters or leaves the screen. - -@param cookie Cookie supplied in the Synergy context -@param active Activation flag, 1 if the screen has become active, 0 if the screen has become inactive -**/ -typedef void (*uSynergyScreenActiveCallback)(uSynergyCookie cookie, uSynergyBool active); - - - -/** -@brief Mouse callback - -This callback is called when a mouse events happens. The mouse X and Y position, -wheel and button state is communicated in the message. It's up to the user to -interpret if this is a mouse up, down, double-click or other message. - -@param cookie Cookie supplied in the Synergy context -@param x Mouse X position -@param y Mouse Y position -@param wheelX Mouse wheel X position -@param wheelY Mouse wheel Y position -@param buttonLeft Left button pressed status, 0 for released, 1 for pressed -@param buttonMiddle Middle button pressed status, 0 for released, 1 for pressed -@param buttonRight Right button pressed status, 0 for released, 1 for pressed -**/ -typedef void (*uSynergyMouseCallback)(uSynergyCookie cookie, uint16_t x, uint16_t y, int16_t wheelX, int16_t wheelY, uSynergyBool buttonLeft, uSynergyBool buttonRight, uSynergyBool buttonMiddle); - - - -/** -@brief Key event callback - -This callback is called when a key is pressed or released. - -@param cookie Cookie supplied in the Synergy context -@param key Key code of key that was pressed or released -@param modifiers Status of modifier keys (alt, shift, etc.) -@param down Down or up status, 1 is key is pressed down, 0 if key is released (up) -@param repeat Repeat flag, 1 if the key is down because the key is repeating, 0 if the key is initially pressed by the user -**/ -typedef void (*uSynergyKeyboardCallback)(uSynergyCookie cookie, uint16_t key, uint16_t modifiers, uSynergyBool down, uSynergyBool repeat); - - - -/** -@brief Joystick event callback - -This callback is called when a joystick stick or button changes. It is possible that multiple callbacks are -fired when different sticks or buttons change as these are individual messages in the packet stream. Each -callback will contain all the valid state for the different axes and buttons. The last callback received will -represent the most current joystick state. - -@param cookie Cookie supplied in the Synergy context -@param joyNum Joystick number, always in the range [0 ... USYNERGY_NUM_JOYSTICKS> -@param buttons Button pressed mask -@param leftStickX Left stick X position, in range [-127 ... 127] -@param leftStickY Left stick Y position, in range [-127 ... 127] -@param rightStickX Right stick X position, in range [-127 ... 127] -@param rightStickY Right stick Y position, in range [-127 ... 127] -**/ -typedef void (*uSynergyJoystickCallback)(uSynergyCookie cookie, uint8_t joyNum, uint16_t buttons, int8_t leftStickX, int8_t leftStickY, int8_t rightStickX, int8_t rightStickY); - - - -/** -@brief Clipboard event callback - -This callback is called when something is placed on the clipboard. Multiple callbacks may be fired for -multiple clipboard formats if they are supported. The data provided is read-only and may not be modified -by the application. - -@param cookie Cookie supplied in the Synergy context -@param format Clipboard format -@param data Memory area containing the clipboard raw data -@param size Size of clipboard data -**/ -typedef void (*uSynergyClipboardCallback)(uSynergyCookie cookie, enum uSynergyClipboardFormat format, const uint8_t *data, uint32_t size); - - - -//--------------------------------------------------------------------------------------------------------------------- -// Context -//--------------------------------------------------------------------------------------------------------------------- - - - -/** -@brief uSynergy context -**/ -typedef struct -{ - /* Mandatory configuration data, filled in by client */ - uSynergyConnectFunc m_connectFunc; /* Connect function */ - uSynergySendFunc m_sendFunc; /* Send data function */ - uSynergyReceiveFunc m_receiveFunc; /* Receive data function */ - uSynergySleepFunc m_sleepFunc; /* Thread sleep function */ - uSynergyGetTimeFunc m_getTimeFunc; /* Get current time function */ - const char* m_clientName; /* Name of Synergy Screen / Client */ - uint16_t m_clientWidth; /* Width of screen */ - uint16_t m_clientHeight; /* Height of screen */ - - /* Optional configuration data, filled in by client */ - uSynergyCookie m_cookie; /* Cookie pointer passed to callback functions (can be NULL) */ - uSynergyTraceFunc m_traceFunc; /* Function for tracing status (can be NULL) */ - uSynergyScreenActiveCallback m_screenActiveCallback; /* Callback for entering and leaving screen */ - uSynergyMouseCallback m_mouseCallback; /* Callback for mouse events */ - uSynergyKeyboardCallback m_keyboardCallback; /* Callback for keyboard events */ - uSynergyJoystickCallback m_joystickCallback; /* Callback for joystick events */ - uSynergyClipboardCallback m_clipboardCallback; /* Callback for clipboard events */ - - /* State data, used internall by client, initialized by uSynergyInit() */ - uSynergyBool m_connected; /* Is our socket connected? */ - uSynergyBool m_hasReceivedHello; /* Have we received a 'Hello' from the server? */ - uSynergyBool m_isCaptured; /* Is Synergy active (i.e. this client is receiving input messages?) */ - uint32_t m_lastMessageTime; /* Time at which last message was received */ - uint32_t m_sequenceNumber; /* Packet sequence number */ - uint8_t m_receiveBuffer[USYNERGY_RECEIVE_BUFFER_SIZE]; /* Receive buffer */ - int m_receiveOfs; /* Receive buffer offset */ - uint8_t m_replyBuffer[USYNERGY_REPLY_BUFFER_SIZE]; /* Reply buffer */ - uint8_t* m_replyCur; /* Write offset into reply buffer */ - uint16_t m_mouseX; /* Mouse X position */ - uint16_t m_mouseY; /* Mouse Y position */ - int16_t m_mouseWheelX; /* Mouse wheel X position */ - int16_t m_mouseWheelY; /* Mouse wheel Y position */ - uSynergyBool m_mouseButtonLeft; /* Mouse left button */ - uSynergyBool m_mouseButtonRight; /* Mouse right button */ - uSynergyBool m_mouseButtonMiddle; /* Mouse middle button */ - int8_t m_joystickSticks[USYNERGY_NUM_JOYSTICKS][4]; /* Joystick stick position in 2 axes for 2 sticks */ - uint16_t m_joystickButtons[USYNERGY_NUM_JOYSTICKS]; /* Joystick button state */ -} uSynergyContext; - - - -//--------------------------------------------------------------------------------------------------------------------- -// Interface -//--------------------------------------------------------------------------------------------------------------------- - - - -/** -@brief Initialize uSynergy context - -This function initializes @a context for use. Call this function directly after -creating the context, before filling in any configuration data in it. Not calling -this function will cause undefined behavior. - -@param context Context to be initialized -**/ -extern void uSynergyInit(uSynergyContext *context); - - - -/** -@brief Update uSynergy - -This function updates uSynergy and does the bulk of the work. It does connection management, -receiving data, reconnecting after errors or timeouts and so on. It assumes that networking -operations are blocking and it can suspend the current thread if it needs to wait. It is -best practice to call uSynergyUpdate from a background thread so it is responsive. - -Because uSynergy relies mostly on blocking calls it will mostly stay in thread sleep state -waiting for system mutexes and won't eat much memory. - -uSynergyUpdate doesn't do any memory allocations or have any side effects beyond those of -the callbacks it calls. - -@param context Context to be updated -**/ -extern void uSynergyUpdate(uSynergyContext *context); - - - -/** -@brief Send clipboard data - -This function sets new clipboard data and sends it to the server. Use this function if -your client cuts or copies data onto the clipboard that it needs to share with the -server. - -Currently there is only support for plaintext, but HTML and image data could be -supported with some effort. - -@param context Context to send clipboard data to -@param text Text to set to the clipboard -**/ -extern void uSynergySendClipboard(uSynergyContext *context, const char *text); - - - -#ifdef __cplusplus -}; -#endif diff --git a/cmake/imgui/imconfig.h b/cmake/imgui/imconfig.h deleted file mode 100644 index c6817de7..00000000 --- a/cmake/imgui/imconfig.h +++ /dev/null @@ -1,108 +0,0 @@ -//----------------------------------------------------------------------------- -// COMPILE-TIME OPTIONS FOR DEAR IMGUI -// Runtime options (clipboard callbacks, enabling various features, etc.) can generally be set via the ImGuiIO structure. -// You can use ImGui::SetAllocatorFunctions() before calling ImGui::CreateContext() to rewire memory allocation functions. -//----------------------------------------------------------------------------- -// A) You may edit imconfig.h (and not overwrite it when updating Dear ImGui, or maintain a patch/branch with your modifications to imconfig.h) -// B) or add configuration directives in your own file and compile with #define IMGUI_USER_CONFIG "myfilename.h" -// If you do so you need to make sure that configuration settings are defined consistently _everywhere_ Dear ImGui is used, which include -// the imgui*.cpp files but also _any_ of your code that uses Dear ImGui. This is because some compile-time options have an affect on data structures. -// Defining those options in imconfig.h will ensure every compilation unit gets to see the same data structure layouts. -// Call IMGUI_CHECKVERSION() from your .cpp files to verify that the data structures your files are using are matching the ones imgui.cpp is using. -//----------------------------------------------------------------------------- - -#pragma once - -//---- Define assertion handler. Defaults to calling assert(). -// If your macro uses multiple statements, make sure is enclosed in a 'do { .. } while (0)' block so it can be used as a single statement. -//#define IM_ASSERT(_EXPR) MyAssert(_EXPR) -//#define IM_ASSERT(_EXPR) ((void)(_EXPR)) // Disable asserts - -//---- Define attributes of all API symbols declarations, e.g. for DLL under Windows -// Using dear imgui via a shared library is not recommended, because of function call overhead and because we don't guarantee backward nor forward ABI compatibility. -//#define IMGUI_API __declspec( dllexport ) -//#define IMGUI_API __declspec( dllimport ) - -//---- Don't define obsolete functions/enums/behaviors. Consider enabling from time to time after updating to avoid using soon-to-be obsolete function/names. -//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS - -//---- Disable all of Dear ImGui or don't implement standard windows. -// It is very strongly recommended to NOT disable the demo windows during development. Please read comments in imgui_demo.cpp. -//#define IMGUI_DISABLE // Disable everything: all headers and source files will be empty. -//#define IMGUI_DISABLE_DEMO_WINDOWS // Disable demo windows: ShowDemoWindow()/ShowStyleEditor() will be empty. Not recommended. -//#define IMGUI_DISABLE_METRICS_WINDOW // Disable debug/metrics window: ShowMetricsWindow() will be empty. - -//---- Don't implement some functions to reduce linkage requirements. -//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS // [Win32] Don't implement default clipboard handler. Won't use and link with OpenClipboard/GetClipboardData/CloseClipboard etc. -//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS // [Win32] Don't implement default IME handler. Won't use and link with ImmGetContext/ImmSetCompositionWindow. -//#define IMGUI_DISABLE_WIN32_FUNCTIONS // [Win32] Won't use and link with any Win32 function (clipboard, ime). -//#define IMGUI_ENABLE_OSX_DEFAULT_CLIPBOARD_FUNCTIONS // [OSX] Implement default OSX clipboard handler (need to link with '-framework ApplicationServices', this is why this is not the default). -//#define IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS // Don't implement ImFormatString/ImFormatStringV so you can implement them yourself (e.g. if you don't want to link with vsnprintf) -//#define IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS // Don't implement ImFabs/ImSqrt/ImPow/ImFmod/ImCos/ImSin/ImAcos/ImAtan2 so you can implement them yourself. -//#define IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS // Don't implement ImFileOpen/ImFileClose/ImFileRead/ImFileWrite so you can implement them yourself if you don't want to link with fopen/fclose/fread/fwrite. This will also disable the LogToTTY() function. -//#define IMGUI_DISABLE_DEFAULT_ALLOCATORS // Don't implement default allocators calling malloc()/free() to avoid linking with them. You will need to call ImGui::SetAllocatorFunctions(). - -//---- Include imgui_user.h at the end of imgui.h as a convenience -//#define IMGUI_INCLUDE_IMGUI_USER_H - -//---- Pack colors to BGRA8 instead of RGBA8 (to avoid converting from one to another) -//#define IMGUI_USE_BGRA_PACKED_COLOR - -//---- Use 32-bit for ImWchar (default is 16-bit) to support full unicode code points. -//#define IMGUI_USE_WCHAR32 - -//---- Avoid multiple STB libraries implementations, or redefine path/filenames to prioritize another version -// By default the embedded implementations are declared static and not available outside of imgui cpp files. -//#define IMGUI_STB_TRUETYPE_FILENAME "my_folder/stb_truetype.h" -//#define IMGUI_STB_RECT_PACK_FILENAME "my_folder/stb_rect_pack.h" -//#define IMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION -//#define IMGUI_DISABLE_STB_RECT_PACK_IMPLEMENTATION - -//---- Unless IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS is defined, use the much faster STB sprintf library implementation of vsnprintf instead of the one from the default C library. -// Note that stb_sprintf.h is meant to be provided by the user and available in the include path at compile time. Also, the compatibility checks of the arguments and formats done by clang and GCC will be disabled in order to support the extra formats provided by STB sprintf. -// #define IMGUI_USE_STB_SPRINTF - -//---- Define constructor and implicit cast operators to convert back<>forth between your math types and ImVec2/ImVec4. -// This will be inlined as part of ImVec2 and ImVec4 class declarations. -/* -#define IM_VEC2_CLASS_EXTRA \ - ImVec2(const MyVec2& f) { x = f.x; y = f.y; } \ - operator MyVec2() const { return MyVec2(x,y); } - -#define IM_VEC4_CLASS_EXTRA \ - ImVec4(const MyVec4& f) { x = f.x; y = f.y; z = f.z; w = f.w; } \ - operator MyVec4() const { return MyVec4(x,y,z,w); } -*/ - -//---- Use 32-bit vertex indices (default is 16-bit) is one way to allow large meshes with more than 64K vertices. -// Your renderer back-end will need to support it (most example renderer back-ends support both 16/32-bit indices). -// Another way to allow large meshes while keeping 16-bit indices is to handle ImDrawCmd::VtxOffset in your renderer. -// Read about ImGuiBackendFlags_RendererHasVtxOffset for details. -//#define ImDrawIdx unsigned int - -//---- Override ImDrawCallback signature (will need to modify renderer back-ends accordingly) -//struct ImDrawList; -//struct ImDrawCmd; -//typedef void (*MyImDrawCallback)(const ImDrawList* draw_list, const ImDrawCmd* cmd, void* my_renderer_user_data); -//#define ImDrawCallback MyImDrawCallback - -//---- Debug Tools: Macro to break in Debugger -// (use 'Metrics->Tools->Item Picker' to pick widgets with the mouse and break into them for easy debugging.) -//#define IM_DEBUG_BREAK IM_ASSERT(0) -//#define IM_DEBUG_BREAK __debugbreak() - -//---- Debug Tools: Have the Item Picker break in the ItemAdd() function instead of ItemHoverable(), -// (which comes earlier in the code, will catch a few extra items, allow picking items other than Hovered one.) -// This adds a small runtime cost which is why it is not enabled by default. -//#define IMGUI_DEBUG_TOOL_ITEM_PICKER_EX - -//---- Debug Tools: Enable slower asserts -//#define IMGUI_DEBUG_PARANOID - -//---- Tip: You can add extra functions within the ImGui:: namespace, here or in your own headers files. -/* -namespace ImGui -{ - void MyFunction(const char* name, const MyMatrix44& v); -} -*/ diff --git a/cmake/imgui/imgui.cpp b/cmake/imgui/imgui.cpp deleted file mode 100644 index 5dc479f7..00000000 --- a/cmake/imgui/imgui.cpp +++ /dev/null @@ -1,10379 +0,0 @@ -// dear imgui, v1.76 WIP -// (main code and documentation) - -// Help: -// - Read FAQ at http://dearimgui.org/faq -// - Newcomers, read 'Programmer guide' below for notes on how to setup Dear ImGui in your codebase. -// - Call and read ImGui::ShowDemoWindow() in imgui_demo.cpp for demo code. All applications in examples/ are doing that. -// Read imgui.cpp for details, links and comments. - -// Resources: -// - FAQ http://dearimgui.org/faq -// - Homepage & latest https://github.com/ocornut/imgui -// - Releases & changelog https://github.com/ocornut/imgui/releases -// - Gallery https://github.com/ocornut/imgui/issues/3075 (please post your screenshots/video there!) -// - Glossary https://github.com/ocornut/imgui/wiki/Glossary -// - Wiki https://github.com/ocornut/imgui/wiki -// - Issues & support https://github.com/ocornut/imgui/issues - -// Developed by Omar Cornut and every direct or indirect contributors to the GitHub. -// See LICENSE.txt for copyright and licensing details (standard MIT License). -// This library is free but I need your support to sustain development and maintenance. -// Businesses: you can support continued development via invoiced technical support, maintenance and sponsoring contracts. Please reach out to "contact AT dearimgui.org". -// Individuals: you can support continued development via donations. See docs/README or web page. - -// It is recommended that you don't modify imgui.cpp! It will become difficult for you to update the library. -// Note that 'ImGui::' being a namespace, you can add functions into the namespace from your own source files, without -// modifying imgui.h or imgui.cpp. You may include imgui_internal.h to access internal data structures, but it doesn't -// come with any guarantee of forward compatibility. Discussing your changes on the GitHub Issue Tracker may lead you -// to a better solution or official support for them. - -/* - -Index of this file: - -DOCUMENTATION - -- MISSION STATEMENT -- END-USER GUIDE -- PROGRAMMER GUIDE - - READ FIRST - - HOW TO UPDATE TO A NEWER VERSION OF DEAR IMGUI - - GETTING STARTED WITH INTEGRATING DEAR IMGUI IN YOUR CODE/ENGINE - - HOW A SIMPLE APPLICATION MAY LOOK LIKE (2 variations) - - HOW A SIMPLE RENDERING FUNCTION MAY LOOK LIKE - - USING GAMEPAD/KEYBOARD NAVIGATION CONTROLS -- API BREAKING CHANGES (read me when you update!) -- FREQUENTLY ASKED QUESTIONS (FAQ) - - Read all answers online: https://www.dearimgui.org/faq, or in docs/FAQ.md (with a Markdown viewer) - -CODE -(search for "[SECTION]" in the code to find them) - -// [SECTION] INCLUDES -// [SECTION] FORWARD DECLARATIONS -// [SECTION] CONTEXT AND MEMORY ALLOCATORS -// [SECTION] USER FACING STRUCTURES (ImGuiStyle, ImGuiIO) -// [SECTION] MISC HELPERS/UTILITIES (Geometry functions) -// [SECTION] MISC HELPERS/UTILITIES (String, Format, Hash functions) -// [SECTION] MISC HELPERS/UTILITIES (File functions) -// [SECTION] MISC HELPERS/UTILITIES (ImText* functions) -// [SECTION] MISC HELPERS/UTILITIES (Color functions) -// [SECTION] ImGuiStorage -// [SECTION] ImGuiTextFilter -// [SECTION] ImGuiTextBuffer -// [SECTION] ImGuiListClipper -// [SECTION] STYLING -// [SECTION] RENDER HELPERS -// [SECTION] MAIN CODE (most of the code! lots of stuff, needs tidying up!) -// [SECTION] ERROR CHECKING -// [SECTION] LAYOUT -// [SECTION] SCROLLING -// [SECTION] TOOLTIPS -// [SECTION] POPUPS -// [SECTION] KEYBOARD/GAMEPAD NAVIGATION -// [SECTION] DRAG AND DROP -// [SECTION] LOGGING/CAPTURING -// [SECTION] SETTINGS -// [SECTION] PLATFORM DEPENDENT HELPERS -// [SECTION] METRICS/DEBUG WINDOW - -*/ - -//----------------------------------------------------------------------------- -// DOCUMENTATION -//----------------------------------------------------------------------------- - -/* - - MISSION STATEMENT - ================= - - - Easy to use to create code-driven and data-driven tools. - - Easy to use to create ad hoc short-lived tools and long-lived, more elaborate tools. - - Easy to hack and improve. - - Minimize screen real-estate usage. - - Minimize setup and maintenance. - - Minimize state storage on user side. - - Portable, minimize dependencies, run on target (consoles, phones, etc.). - - Efficient runtime and memory consumption (NB- we do allocate when "growing" content e.g. creating a window,. - opening a tree node for the first time, etc. but a typical frame should not allocate anything). - - Designed for developers and content-creators, not the typical end-user! Some of the weaknesses includes: - - Doesn't look fancy, doesn't animate. - - Limited layout features, intricate layouts are typically crafted in code. - - - END-USER GUIDE - ============== - - - Double-click on title bar to collapse window. - - Click upper right corner to close a window, available when 'bool* p_open' is passed to ImGui::Begin(). - - Click and drag on lower right corner to resize window (double-click to auto fit window to its contents). - - Click and drag on any empty space to move window. - - TAB/SHIFT+TAB to cycle through keyboard editable fields. - - CTRL+Click on a slider or drag box to input value as text. - - Use mouse wheel to scroll. - - Text editor: - - Hold SHIFT or use mouse to select text. - - CTRL+Left/Right to word jump. - - CTRL+Shift+Left/Right to select words. - - CTRL+A our Double-Click to select all. - - CTRL+X,CTRL+C,CTRL+V to use OS clipboard/ - - CTRL+Z,CTRL+Y to undo/redo. - - ESCAPE to revert text to its original value. - - You can apply arithmetic operators +,*,/ on numerical values. Use +- to subtract (because - would set a negative value!) - - Controls are automatically adjusted for OSX to match standard OSX text editing operations. - - General Keyboard controls: enable with ImGuiConfigFlags_NavEnableKeyboard. - - General Gamepad controls: enable with ImGuiConfigFlags_NavEnableGamepad. See suggested mappings in imgui.h ImGuiNavInput_ + download PNG/PSD at http://goo.gl/9LgVZW - - - PROGRAMMER GUIDE - ================ - - READ FIRST - ---------- - - Remember to read the FAQ (https://www.dearimgui.org/faq) - - Your code creates the UI, if your code doesn't run the UI is gone! The UI can be highly dynamic, there are no construction - or destruction steps, less superfluous data retention on your side, less state duplication, less state synchronization, less bugs. - - Call and read ImGui::ShowDemoWindow() for demo code demonstrating most features. - - The library is designed to be built from sources. Avoid pre-compiled binaries and packaged versions. See imconfig.h to configure your build. - - Dear ImGui is an implementation of the IMGUI paradigm (immediate-mode graphical user interface, a term coined by Casey Muratori). - You can learn about IMGUI principles at http://www.johno.se/book/imgui.html, http://mollyrocket.com/861 & more links docs/README.md. - - Dear ImGui is a "single pass" rasterizing implementation of the IMGUI paradigm, aimed at ease of use and high-performances. - For every application frame your UI code will be called only once. This is in contrast to e.g. Unity's own implementation of an IMGUI, - where the UI code is called multiple times ("multiple passes") from a single entry point. There are pros and cons to both approaches. - - Our origin are on the top-left. In axis aligned bounding boxes, Min = top-left, Max = bottom-right. - - This codebase is also optimized to yield decent performances with typical "Debug" builds settings. - - Please make sure you have asserts enabled (IM_ASSERT redirects to assert() by default, but can be redirected). - If you get an assert, read the messages and comments around the assert. - - C++: this is a very C-ish codebase: we don't rely on C++11, we don't include any C++ headers, and ImGui:: is a namespace. - - C++: ImVec2/ImVec4 do not expose math operators by default, because it is expected that you use your own math types. - See FAQ "How can I use my own math types instead of ImVec2/ImVec4?" for details about setting up imconfig.h for that. - However, imgui_internal.h can optionally export math operators for ImVec2/ImVec4, which we use in this codebase. - - C++: pay attention that ImVector<> manipulates plain-old-data and does not honor construction/destruction (avoid using it in your code!). - - HOW TO UPDATE TO A NEWER VERSION OF DEAR IMGUI - ---------------------------------------------- - - Overwrite all the sources files except for imconfig.h (if you have made modification to your copy of imconfig.h) - - Or maintain your own branch where you have imconfig.h modified. - - Read the "API BREAKING CHANGES" section (below). This is where we list occasional API breaking changes. - If a function/type has been renamed / or marked obsolete, try to fix the name in your code before it is permanently removed - from the public API. If you have a problem with a missing function/symbols, search for its name in the code, there will - likely be a comment about it. Please report any issue to the GitHub page! - - Try to keep your copy of dear imgui reasonably up to date. - - GETTING STARTED WITH INTEGRATING DEAR IMGUI IN YOUR CODE/ENGINE - --------------------------------------------------------------- - - Run and study the examples and demo in imgui_demo.cpp to get acquainted with the library. - - In the majority of cases you should be able to use unmodified back-ends files available in the examples/ folder. - - Add the Dear ImGui source files to your projects or using your preferred build system. - It is recommended you build and statically link the .cpp files as part of your project and NOT as shared library (DLL). - - You can later customize the imconfig.h file to tweak some compile-time behavior, such as integrating Dear ImGui types with your own maths types. - - When using Dear ImGui, your programming IDE is your friend: follow the declaration of variables, functions and types to find comments about them. - - Dear ImGui never touches or knows about your GPU state. The only function that knows about GPU is the draw function that you provide. - Effectively it means you can create widgets at any time in your code, regardless of considerations of being in "update" vs "render" - phases of your own application. All rendering information are stored into command-lists that you will retrieve after calling ImGui::Render(). - - Refer to the bindings and demo applications in the examples/ folder for instruction on how to setup your code. - - If you are running over a standard OS with a common graphics API, you should be able to use unmodified imgui_impl_*** files from the examples/ folder. - - HOW A SIMPLE APPLICATION MAY LOOK LIKE - -------------------------------------- - EXHIBIT 1: USING THE EXAMPLE BINDINGS (imgui_impl_XXX.cpp files from the examples/ folder). - - // Application init: create a dear imgui context, setup some options, load fonts - ImGui::CreateContext(); - ImGuiIO& io = ImGui::GetIO(); - // TODO: Set optional io.ConfigFlags values, e.g. 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard' to enable keyboard controls. - // TODO: Fill optional fields of the io structure later. - // TODO: Load TTF/OTF fonts if you don't want to use the default font. - - // Initialize helper Platform and Renderer bindings (here we are using imgui_impl_win32.cpp and imgui_impl_dx11.cpp) - ImGui_ImplWin32_Init(hwnd); - ImGui_ImplDX11_Init(g_pd3dDevice, g_pd3dDeviceContext); - - // Application main loop - while (true) - { - // Feed inputs to dear imgui, start new frame - ImGui_ImplDX11_NewFrame(); - ImGui_ImplWin32_NewFrame(); - ImGui::NewFrame(); - - // Any application code here - ImGui::Text("Hello, world!"); - - // Render dear imgui into screen - ImGui::Render(); - ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData()); - g_pSwapChain->Present(1, 0); - } - - // Shutdown - ImGui_ImplDX11_Shutdown(); - ImGui_ImplWin32_Shutdown(); - ImGui::DestroyContext(); - - EXHIBIT 2: IMPLEMENTING CUSTOM BINDING / CUSTOM ENGINE - - // Application init: create a dear imgui context, setup some options, load fonts - ImGui::CreateContext(); - ImGuiIO& io = ImGui::GetIO(); - // TODO: Set optional io.ConfigFlags values, e.g. 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard' to enable keyboard controls. - // TODO: Fill optional fields of the io structure later. - // TODO: Load TTF/OTF fonts if you don't want to use the default font. - - // Build and load the texture atlas into a texture - // (In the examples/ app this is usually done within the ImGui_ImplXXX_Init() function from one of the demo Renderer) - int width, height; - unsigned char* pixels = NULL; - io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); - - // At this point you've got the texture data and you need to upload that your your graphic system: - // After we have created the texture, store its pointer/identifier (_in whichever format your engine uses_) in 'io.Fonts->TexID'. - // This will be passed back to your via the renderer. Basically ImTextureID == void*. Read FAQ for details about ImTextureID. - MyTexture* texture = MyEngine::CreateTextureFromMemoryPixels(pixels, width, height, TEXTURE_TYPE_RGBA32) - io.Fonts->TexID = (void*)texture; - - // Application main loop - while (true) - { - // Setup low-level inputs, e.g. on Win32: calling GetKeyboardState(), or write to those fields from your Windows message handlers, etc. - // (In the examples/ app this is usually done within the ImGui_ImplXXX_NewFrame() function from one of the demo Platform bindings) - io.DeltaTime = 1.0f/60.0f; // set the time elapsed since the previous frame (in seconds) - io.DisplaySize.x = 1920.0f; // set the current display width - io.DisplaySize.y = 1280.0f; // set the current display height here - io.MousePos = my_mouse_pos; // set the mouse position - io.MouseDown[0] = my_mouse_buttons[0]; // set the mouse button states - io.MouseDown[1] = my_mouse_buttons[1]; - - // Call NewFrame(), after this point you can use ImGui::* functions anytime - // (So you want to try calling NewFrame() as early as you can in your mainloop to be able to use Dear ImGui everywhere) - ImGui::NewFrame(); - - // Most of your application code here - ImGui::Text("Hello, world!"); - MyGameUpdate(); // may use any Dear ImGui functions, e.g. ImGui::Begin("My window"); ImGui::Text("Hello, world!"); ImGui::End(); - MyGameRender(); // may use any Dear ImGui functions as well! - - // Render dear imgui, swap buffers - // (You want to try calling EndFrame/Render as late as you can, to be able to use Dear ImGui in your own game rendering code) - ImGui::EndFrame(); - ImGui::Render(); - ImDrawData* draw_data = ImGui::GetDrawData(); - MyImGuiRenderFunction(draw_data); - SwapBuffers(); - } - - // Shutdown - ImGui::DestroyContext(); - - HOW A SIMPLE RENDERING FUNCTION MAY LOOK LIKE - --------------------------------------------- - void void MyImGuiRenderFunction(ImDrawData* draw_data) - { - // TODO: Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled - // TODO: Setup viewport covering draw_data->DisplayPos to draw_data->DisplayPos + draw_data->DisplaySize - // TODO: Setup orthographic projection matrix cover draw_data->DisplayPos to draw_data->DisplayPos + draw_data->DisplaySize - // TODO: Setup shader: vertex { float2 pos, float2 uv, u32 color }, fragment shader sample color from 1 texture, multiply by vertex color. - for (int n = 0; n < draw_data->CmdListsCount; n++) - { - const ImDrawList* cmd_list = draw_data->CmdLists[n]; - const ImDrawVert* vtx_buffer = cmd_list->VtxBuffer.Data; // vertex buffer generated by Dear ImGui - const ImDrawIdx* idx_buffer = cmd_list->IdxBuffer.Data; // index buffer generated by Dear ImGui - for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++) - { - const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i]; - if (pcmd->UserCallback) - { - pcmd->UserCallback(cmd_list, pcmd); - } - else - { - // The texture for the draw call is specified by pcmd->TextureId. - // The vast majority of draw calls will use the Dear ImGui texture atlas, which value you have set yourself during initialization. - MyEngineBindTexture((MyTexture*)pcmd->TextureId); - - // We are using scissoring to clip some objects. All low-level graphics API should supports it. - // - If your engine doesn't support scissoring yet, you may ignore this at first. You will get some small glitches - // (some elements visible outside their bounds) but you can fix that once everything else works! - // - Clipping coordinates are provided in imgui coordinates space (from draw_data->DisplayPos to draw_data->DisplayPos + draw_data->DisplaySize) - // In a single viewport application, draw_data->DisplayPos will always be (0,0) and draw_data->DisplaySize will always be == io.DisplaySize. - // However, in the interest of supporting multi-viewport applications in the future (see 'viewport' branch on github), - // always subtract draw_data->DisplayPos from clipping bounds to convert them to your viewport space. - // - Note that pcmd->ClipRect contains Min+Max bounds. Some graphics API may use Min+Max, other may use Min+Size (size being Max-Min) - ImVec2 pos = draw_data->DisplayPos; - MyEngineScissor((int)(pcmd->ClipRect.x - pos.x), (int)(pcmd->ClipRect.y - pos.y), (int)(pcmd->ClipRect.z - pos.x), (int)(pcmd->ClipRect.w - pos.y)); - - // Render 'pcmd->ElemCount/3' indexed triangles. - // By default the indices ImDrawIdx are 16-bit, you can change them to 32-bit in imconfig.h if your engine doesn't support 16-bit indices. - MyEngineDrawIndexedTriangles(pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, idx_buffer, vtx_buffer); - } - idx_buffer += pcmd->ElemCount; - } - } - } - - - The examples/ folders contains many actual implementation of the pseudo-codes above. - - When calling NewFrame(), the 'io.WantCaptureMouse', 'io.WantCaptureKeyboard' and 'io.WantTextInput' flags are updated. - They tell you if Dear ImGui intends to use your inputs. When a flag is set you want to hide the corresponding inputs from the - rest of your application. In every cases you need to pass on the inputs to Dear ImGui. - - Refer to the FAQ for more information. Amusingly, it is called a FAQ because people frequently run into the same issues! - - USING GAMEPAD/KEYBOARD NAVIGATION CONTROLS - ------------------------------------------ - - The gamepad/keyboard navigation is fairly functional and keeps being improved. - - Gamepad support is particularly useful to use Dear ImGui on a console system (e.g. PS4, Switch, XB1) without a mouse! - - You can ask questions and report issues at https://github.com/ocornut/imgui/issues/787 - - The initial focus was to support game controllers, but keyboard is becoming increasingly and decently usable. - - Keyboard: - - Set io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard to enable. - NewFrame() will automatically fill io.NavInputs[] based on your io.KeysDown[] + io.KeyMap[] arrays. - - When keyboard navigation is active (io.NavActive + ImGuiConfigFlags_NavEnableKeyboard), the io.WantCaptureKeyboard flag - will be set. For more advanced uses, you may want to read from: - - io.NavActive: true when a window is focused and it doesn't have the ImGuiWindowFlags_NoNavInputs flag set. - - io.NavVisible: true when the navigation cursor is visible (and usually goes false when mouse is used). - - or query focus information with e.g. IsWindowFocused(ImGuiFocusedFlags_AnyWindow), IsItemFocused() etc. functions. - Please reach out if you think the game vs navigation input sharing could be improved. - - Gamepad: - - Set io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad to enable. - - Backend: Set io.BackendFlags |= ImGuiBackendFlags_HasGamepad + fill the io.NavInputs[] fields before calling NewFrame(). - Note that io.NavInputs[] is cleared by EndFrame(). - - See 'enum ImGuiNavInput_' in imgui.h for a description of inputs. For each entry of io.NavInputs[], set the following values: - 0.0f= not held. 1.0f= fully held. Pass intermediate 0.0f..1.0f values for analog triggers/sticks. - - We uses a simple >0.0f test for activation testing, and won't attempt to test for a dead-zone. - Your code will probably need to transform your raw inputs (such as e.g. remapping your 0.2..0.9 raw input range to 0.0..1.0 imgui range, etc.). - - You can download PNG/PSD files depicting the gamepad controls for common controllers at: http://goo.gl/9LgVZW. - - If you need to share inputs between your game and the imgui parts, the easiest approach is to go all-or-nothing, with a buttons combo - to toggle the target. Please reach out if you think the game vs navigation input sharing could be improved. - - Mouse: - - PS4 users: Consider emulating a mouse cursor with DualShock4 touch pad or a spare analog stick as a mouse-emulation fallback. - - Consoles/Tablet/Phone users: Consider using a Synergy 1.x server (on your PC) + uSynergy.c (on your console/tablet/phone app) to share your PC mouse/keyboard. - - On a TV/console system where readability may be lower or mouse inputs may be awkward, you may want to set the ImGuiConfigFlags_NavEnableSetMousePos flag. - Enabling ImGuiConfigFlags_NavEnableSetMousePos + ImGuiBackendFlags_HasSetMousePos instructs dear imgui to move your mouse cursor along with navigation movements. - When enabled, the NewFrame() function may alter 'io.MousePos' and set 'io.WantSetMousePos' to notify you that it wants the mouse cursor to be moved. - When that happens your back-end NEEDS to move the OS or underlying mouse cursor on the next frame. Some of the binding in examples/ do that. - (If you set the NavEnableSetMousePos flag but don't honor 'io.WantSetMousePos' properly, imgui will misbehave as it will see your mouse as moving back and forth!) - (In a setup when you may not have easy control over the mouse cursor, e.g. uSynergy.c doesn't expose moving remote mouse cursor, you may want - to set a boolean to ignore your other external mouse positions until the external source is moved again.) - - - API BREAKING CHANGES - ==================== - - Occasionally introducing changes that are breaking the API. We try to make the breakage minor and easy to fix. - Below is a change-log of API breaking changes only. If you are using one of the functions listed, expect to have to fix some code. - When you are not sure about a old symbol or function name, try using the Search/Find function of your IDE to look for comments or references in all imgui files. - You can read releases logs https://github.com/ocornut/imgui/releases for more details. - - - 2020/01/22 (1.75) - ImDrawList::AddCircle()/AddCircleFilled() functions don't accept negative radius any more. - - 2019/12/17 (1.75) - made Columns() limited to 64 columns by asserting above that limit. While the current code technically supports it, future code may not so we're putting the restriction ahead. - - 2019/12/13 (1.75) - [imgui_internal.h] changed ImRect() default constructor initializes all fields to 0.0f instead of (FLT_MAX,FLT_MAX,-FLT_MAX,-FLT_MAX). If you used ImRect::Add() to create bounding boxes by adding multiple points into it, you may need to fix your initial value. - - 2019/12/08 (1.75) - removed redirecting functions/enums that were marked obsolete in 1.53 (December 2017): - - ShowTestWindow() -> use ShowDemoWindow() - - IsRootWindowFocused() -> use IsWindowFocused(ImGuiFocusedFlags_RootWindow) - - IsRootWindowOrAnyChildFocused() -> use IsWindowFocused(ImGuiFocusedFlags_RootAndChildWindows) - - SetNextWindowContentWidth(w) -> use SetNextWindowContentSize(ImVec2(w, 0.0f) - - GetItemsLineHeightWithSpacing() -> use GetFrameHeightWithSpacing() - - ImGuiCol_ChildWindowBg -> use ImGuiCol_ChildBg - - ImGuiStyleVar_ChildWindowRounding -> use ImGuiStyleVar_ChildRounding - - ImGuiTreeNodeFlags_AllowOverlapMode -> use ImGuiTreeNodeFlags_AllowItemOverlap - - IMGUI_DISABLE_TEST_WINDOWS -> use IMGUI_DISABLE_DEMO_WINDOWS - - 2019/12/08 (1.75) - obsoleted calling ImDrawList::PrimReserve() with a negative count (which was the vaguely documented and rarely if ever used). Instead we added an explicit PrimUnreserve() API. - - 2019/12/06 (1.75) - removed implicit default parameter to IsMouseDragging(int button = 0) to be consistent with other mouse functions (none of the other functions have it). - - 2019/11/21 (1.74) - ImFontAtlas::AddCustomRectRegular() now requires an ID larger than 0x110000 (instead of 0x10000) to conform with supporting Unicode planes 1-16 in a future update. ID below 0x110000 will now assert. - - 2019/11/19 (1.74) - renamed IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS to IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS for consistency. - - 2019/11/19 (1.74) - renamed IMGUI_DISABLE_MATH_FUNCTIONS to IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS for consistency. - - 2019/10/22 (1.74) - removed redirecting functions/enums that were marked obsolete in 1.52 (October 2017): - - Begin() [old 5 args version] -> use Begin() [3 args], use SetNextWindowSize() SetNextWindowBgAlpha() if needed - - IsRootWindowOrAnyChildHovered() -> use IsWindowHovered(ImGuiHoveredFlags_RootAndChildWindows) - - AlignFirstTextHeightToWidgets() -> use AlignTextToFramePadding() - - SetNextWindowPosCenter() -> use SetNextWindowPos() with a pivot of (0.5f, 0.5f) - - ImFont::Glyph -> use ImFontGlyph - - 2019/10/14 (1.74) - inputs: Fixed a miscalculation in the keyboard/mouse "typematic" repeat delay/rate calculation, used by keys and e.g. repeating mouse buttons as well as the GetKeyPressedAmount() function. - if you were using a non-default value for io.KeyRepeatRate (previous default was 0.250), you can add +io.KeyRepeatDelay to it to compensate for the fix. - The function was triggering on: 0.0 and (delay+rate*N) where (N>=1). Fixed formula responds to (N>=0). Effectively it made io.KeyRepeatRate behave like it was set to (io.KeyRepeatRate + io.KeyRepeatDelay). - If you never altered io.KeyRepeatRate nor used GetKeyPressedAmount() this won't affect you. - - 2019/07/15 (1.72) - removed TreeAdvanceToLabelPos() which is rarely used and only does SetCursorPosX(GetCursorPosX() + GetTreeNodeToLabelSpacing()). Kept redirection function (will obsolete). - - 2019/07/12 (1.72) - renamed ImFontAtlas::CustomRect to ImFontAtlasCustomRect. Kept redirection typedef (will obsolete). - - 2019/06/14 (1.72) - removed redirecting functions/enums names that were marked obsolete in 1.51 (June 2017): ImGuiCol_Column*, ImGuiSetCond_*, IsItemHoveredRect(), IsPosHoveringAnyWindow(), IsMouseHoveringAnyWindow(), IsMouseHoveringWindow(), IMGUI_ONCE_UPON_A_FRAME. Grep this log for details and new names, or see how they were implemented until 1.71. - - 2019/06/07 (1.71) - rendering of child window outer decorations (bg color, border, scrollbars) is now performed as part of the parent window. If you have - overlapping child windows in a same parent, and relied on their relative z-order to be mapped to their submission order, this will affect your rendering. - This optimization is disabled if the parent window has no visual output, because it appears to be the most common situation leading to the creation of overlapping child windows. - Please reach out if you are affected. - - 2019/05/13 (1.71) - renamed SetNextTreeNodeOpen() to SetNextItemOpen(). Kept inline redirection function (will obsolete). - - 2019/05/11 (1.71) - changed io.AddInputCharacter(unsigned short c) signature to io.AddInputCharacter(unsigned int c). - - 2019/04/29 (1.70) - improved ImDrawList thick strokes (>1.0f) preserving correct thickness up to 90 degrees angles (e.g. rectangles). If you have custom rendering using thick lines, they will appear thicker now. - - 2019/04/29 (1.70) - removed GetContentRegionAvailWidth(), use GetContentRegionAvail().x instead. Kept inline redirection function (will obsolete). - - 2019/03/04 (1.69) - renamed GetOverlayDrawList() to GetForegroundDrawList(). Kept redirection function (will obsolete). - - 2019/02/26 (1.69) - renamed ImGuiColorEditFlags_RGB/ImGuiColorEditFlags_HSV/ImGuiColorEditFlags_HEX to ImGuiColorEditFlags_DisplayRGB/ImGuiColorEditFlags_DisplayHSV/ImGuiColorEditFlags_DisplayHex. Kept redirection enums (will obsolete). - - 2019/02/14 (1.68) - made it illegal/assert when io.DisplayTime == 0.0f (with an exception for the first frame). If for some reason your time step calculation gives you a zero value, replace it with a dummy small value! - - 2019/02/01 (1.68) - removed io.DisplayVisibleMin/DisplayVisibleMax (which were marked obsolete and removed from viewport/docking branch already). - - 2019/01/06 (1.67) - renamed io.InputCharacters[], marked internal as was always intended. Please don't access directly, and use AddInputCharacter() instead! - - 2019/01/06 (1.67) - renamed ImFontAtlas::GlyphRangesBuilder to ImFontGlyphRangesBuilder. Kept redirection typedef (will obsolete). - - 2018/12/20 (1.67) - made it illegal to call Begin("") with an empty string. This somehow half-worked before but had various undesirable side-effects. - - 2018/12/10 (1.67) - renamed io.ConfigResizeWindowsFromEdges to io.ConfigWindowsResizeFromEdges as we are doing a large pass on configuration flags. - - 2018/10/12 (1.66) - renamed misc/stl/imgui_stl.* to misc/cpp/imgui_stdlib.* in prevision for other C++ helper files. - - 2018/09/28 (1.66) - renamed SetScrollHere() to SetScrollHereY(). Kept redirection function (will obsolete). - - 2018/09/06 (1.65) - renamed stb_truetype.h to imstb_truetype.h, stb_textedit.h to imstb_textedit.h, and stb_rect_pack.h to imstb_rectpack.h. - If you were conveniently using the imgui copy of those STB headers in your project you will have to update your include paths. - - 2018/09/05 (1.65) - renamed io.OptCursorBlink/io.ConfigCursorBlink to io.ConfigInputTextCursorBlink. (#1427) - - 2018/08/31 (1.64) - added imgui_widgets.cpp file, extracted and moved widgets code out of imgui.cpp into imgui_widgets.cpp. Re-ordered some of the code remaining in imgui.cpp. - NONE OF THE FUNCTIONS HAVE CHANGED. THE CODE IS SEMANTICALLY 100% IDENTICAL, BUT _EVERY_ FUNCTION HAS BEEN MOVED. - Because of this, any local modifications to imgui.cpp will likely conflict when you update. Read docs/CHANGELOG.txt for suggestions. - - 2018/08/22 (1.63) - renamed IsItemDeactivatedAfterChange() to IsItemDeactivatedAfterEdit() for consistency with new IsItemEdited() API. Kept redirection function (will obsolete soonish as IsItemDeactivatedAfterChange() is very recent). - - 2018/08/21 (1.63) - renamed ImGuiTextEditCallback to ImGuiInputTextCallback, ImGuiTextEditCallbackData to ImGuiInputTextCallbackData for consistency. Kept redirection types (will obsolete). - - 2018/08/21 (1.63) - removed ImGuiInputTextCallbackData::ReadOnly since it is a duplication of (ImGuiInputTextCallbackData::Flags & ImGuiInputTextFlags_ReadOnly). - - 2018/08/01 (1.63) - removed per-window ImGuiWindowFlags_ResizeFromAnySide beta flag in favor of a global io.ConfigResizeWindowsFromEdges [update 1.67 renamed to ConfigWindowsResizeFromEdges] to enable the feature. - - 2018/08/01 (1.63) - renamed io.OptCursorBlink to io.ConfigCursorBlink [-> io.ConfigInputTextCursorBlink in 1.65], io.OptMacOSXBehaviors to ConfigMacOSXBehaviors for consistency. - - 2018/07/22 (1.63) - changed ImGui::GetTime() return value from float to double to avoid accumulating floating point imprecisions over time. - - 2018/07/08 (1.63) - style: renamed ImGuiCol_ModalWindowDarkening to ImGuiCol_ModalWindowDimBg for consistency with other features. Kept redirection enum (will obsolete). - - 2018/06/08 (1.62) - examples: the imgui_impl_xxx files have been split to separate platform (Win32, Glfw, SDL2, etc.) from renderer (DX11, OpenGL, Vulkan, etc.). - old bindings will still work as is, however prefer using the separated bindings as they will be updated to support multi-viewports. - when adopting new bindings follow the main.cpp code of your preferred examples/ folder to know which functions to call. - in particular, note that old bindings called ImGui::NewFrame() at the end of their ImGui_ImplXXXX_NewFrame() function. - - 2018/06/06 (1.62) - renamed GetGlyphRangesChinese() to GetGlyphRangesChineseFull() to distinguish other variants and discourage using the full set. - - 2018/06/06 (1.62) - TreeNodeEx()/TreeNodeBehavior(): the ImGuiTreeNodeFlags_CollapsingHeader helper now include the ImGuiTreeNodeFlags_NoTreePushOnOpen flag. See Changelog for details. - - 2018/05/03 (1.61) - DragInt(): the default compile-time format string has been changed from "%.0f" to "%d", as we are not using integers internally any more. - If you used DragInt() with custom format strings, make sure you change them to use %d or an integer-compatible format. - To honor backward-compatibility, the DragInt() code will currently parse and modify format strings to replace %*f with %d, giving time to users to upgrade their code. - If you have IMGUI_DISABLE_OBSOLETE_FUNCTIONS enabled, the code will instead assert! You may run a reg-exp search on your codebase for e.g. "DragInt.*%f" to help you find them. - - 2018/04/28 (1.61) - obsoleted InputFloat() functions taking an optional "int decimal_precision" in favor of an equivalent and more flexible "const char* format", - consistent with other functions. Kept redirection functions (will obsolete). - - 2018/04/09 (1.61) - IM_DELETE() helper function added in 1.60 doesn't clear the input _pointer_ reference, more consistent with expectation and allows passing r-value. - - 2018/03/20 (1.60) - renamed io.WantMoveMouse to io.WantSetMousePos for consistency and ease of understanding (was added in 1.52, _not_ used by core and only honored by some binding ahead of merging the Nav branch). - - 2018/03/12 (1.60) - removed ImGuiCol_CloseButton, ImGuiCol_CloseButtonActive, ImGuiCol_CloseButtonHovered as the closing cross uses regular button colors now. - - 2018/03/08 (1.60) - changed ImFont::DisplayOffset.y to default to 0 instead of +1. Fixed rounding of Ascent/Descent to match TrueType renderer. If you were adding or subtracting to ImFont::DisplayOffset check if your fonts are correctly aligned vertically. - - 2018/03/03 (1.60) - renamed ImGuiStyleVar_Count_ to ImGuiStyleVar_COUNT and ImGuiMouseCursor_Count_ to ImGuiMouseCursor_COUNT for consistency with other public enums. - - 2018/02/18 (1.60) - BeginDragDropSource(): temporarily removed the optional mouse_button=0 parameter because it is not really usable in many situations at the moment. - - 2018/02/16 (1.60) - obsoleted the io.RenderDrawListsFn callback, you can call your graphics engine render function after ImGui::Render(). Use ImGui::GetDrawData() to retrieve the ImDrawData* to display. - - 2018/02/07 (1.60) - reorganized context handling to be more explicit, - - YOU NOW NEED TO CALL ImGui::CreateContext() AT THE BEGINNING OF YOUR APP, AND CALL ImGui::DestroyContext() AT THE END. - - removed Shutdown() function, as DestroyContext() serve this purpose. - - you may pass a ImFontAtlas* pointer to CreateContext() to share a font atlas between contexts. Otherwise CreateContext() will create its own font atlas instance. - - removed allocator parameters from CreateContext(), they are now setup with SetAllocatorFunctions(), and shared by all contexts. - - removed the default global context and font atlas instance, which were confusing for users of DLL reloading and users of multiple contexts. - - 2018/01/31 (1.60) - moved sample TTF files from extra_fonts/ to misc/fonts/. If you loaded files directly from the imgui repo you may need to update your paths. - - 2018/01/11 (1.60) - obsoleted IsAnyWindowHovered() in favor of IsWindowHovered(ImGuiHoveredFlags_AnyWindow). Kept redirection function (will obsolete). - - 2018/01/11 (1.60) - obsoleted IsAnyWindowFocused() in favor of IsWindowFocused(ImGuiFocusedFlags_AnyWindow). Kept redirection function (will obsolete). - - 2018/01/03 (1.60) - renamed ImGuiSizeConstraintCallback to ImGuiSizeCallback, ImGuiSizeConstraintCallbackData to ImGuiSizeCallbackData. - - 2017/12/29 (1.60) - removed CalcItemRectClosestPoint() which was weird and not really used by anyone except demo code. If you need it it's easy to replicate on your side. - - 2017/12/24 (1.53) - renamed the emblematic ShowTestWindow() function to ShowDemoWindow(). Kept redirection function (will obsolete). - - 2017/12/21 (1.53) - ImDrawList: renamed style.AntiAliasedShapes to style.AntiAliasedFill for consistency and as a way to explicitly break code that manipulate those flag at runtime. You can now manipulate ImDrawList::Flags - - 2017/12/21 (1.53) - ImDrawList: removed 'bool anti_aliased = true' final parameter of ImDrawList::AddPolyline() and ImDrawList::AddConvexPolyFilled(). Prefer manipulating ImDrawList::Flags if you need to toggle them during the frame. - - 2017/12/14 (1.53) - using the ImGuiWindowFlags_NoScrollWithMouse flag on a child window forwards the mouse wheel event to the parent window, unless either ImGuiWindowFlags_NoInputs or ImGuiWindowFlags_NoScrollbar are also set. - - 2017/12/13 (1.53) - renamed GetItemsLineHeightWithSpacing() to GetFrameHeightWithSpacing(). Kept redirection function (will obsolete). - - 2017/12/13 (1.53) - obsoleted IsRootWindowFocused() in favor of using IsWindowFocused(ImGuiFocusedFlags_RootWindow). Kept redirection function (will obsolete). - - obsoleted IsRootWindowOrAnyChildFocused() in favor of using IsWindowFocused(ImGuiFocusedFlags_RootAndChildWindows). Kept redirection function (will obsolete). - - 2017/12/12 (1.53) - renamed ImGuiTreeNodeFlags_AllowOverlapMode to ImGuiTreeNodeFlags_AllowItemOverlap. Kept redirection enum (will obsolete). - - 2017/12/10 (1.53) - removed SetNextWindowContentWidth(), prefer using SetNextWindowContentSize(). Kept redirection function (will obsolete). - - 2017/11/27 (1.53) - renamed ImGuiTextBuffer::append() helper to appendf(), appendv() to appendfv(). If you copied the 'Log' demo in your code, it uses appendv() so that needs to be renamed. - - 2017/11/18 (1.53) - Style, Begin: removed ImGuiWindowFlags_ShowBorders window flag. Borders are now fully set up in the ImGuiStyle structure (see e.g. style.FrameBorderSize, style.WindowBorderSize). Use ImGui::ShowStyleEditor() to look them up. - Please note that the style system will keep evolving (hopefully stabilizing in Q1 2018), and so custom styles will probably subtly break over time. It is recommended you use the StyleColorsClassic(), StyleColorsDark(), StyleColorsLight() functions. - - 2017/11/18 (1.53) - Style: removed ImGuiCol_ComboBg in favor of combo boxes using ImGuiCol_PopupBg for consistency. - - 2017/11/18 (1.53) - Style: renamed ImGuiCol_ChildWindowBg to ImGuiCol_ChildBg. - - 2017/11/18 (1.53) - Style: renamed style.ChildWindowRounding to style.ChildRounding, ImGuiStyleVar_ChildWindowRounding to ImGuiStyleVar_ChildRounding. - - 2017/11/02 (1.53) - obsoleted IsRootWindowOrAnyChildHovered() in favor of using IsWindowHovered(ImGuiHoveredFlags_RootAndChildWindows); - - 2017/10/24 (1.52) - renamed IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCS/IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCS to IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS/IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS for consistency. - - 2017/10/20 (1.52) - changed IsWindowHovered() default parameters behavior to return false if an item is active in another window (e.g. click-dragging item from another window to this window). You can use the newly introduced IsWindowHovered() flags to requests this specific behavior if you need it. - - 2017/10/20 (1.52) - marked IsItemHoveredRect()/IsMouseHoveringWindow() as obsolete, in favor of using the newly introduced flags for IsItemHovered() and IsWindowHovered(). See https://github.com/ocornut/imgui/issues/1382 for details. - removed the IsItemRectHovered()/IsWindowRectHovered() names introduced in 1.51 since they were merely more consistent names for the two functions we are now obsoleting. - IsItemHoveredRect() --> IsItemHovered(ImGuiHoveredFlags_RectOnly) - IsMouseHoveringAnyWindow() --> IsWindowHovered(ImGuiHoveredFlags_AnyWindow) - IsMouseHoveringWindow() --> IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem) [weird, old behavior] - - 2017/10/17 (1.52) - marked the old 5-parameters version of Begin() as obsolete (still available). Use SetNextWindowSize()+Begin() instead! - - 2017/10/11 (1.52) - renamed AlignFirstTextHeightToWidgets() to AlignTextToFramePadding(). Kept inline redirection function (will obsolete). - - 2017/09/26 (1.52) - renamed ImFont::Glyph to ImFontGlyph. Kept redirection typedef (will obsolete). - - 2017/09/25 (1.52) - removed SetNextWindowPosCenter() because SetNextWindowPos() now has the optional pivot information to do the same and more. Kept redirection function (will obsolete). - - 2017/08/25 (1.52) - io.MousePos needs to be set to ImVec2(-FLT_MAX,-FLT_MAX) when mouse is unavailable/missing. Previously ImVec2(-1,-1) was enough but we now accept negative mouse coordinates. In your binding if you need to support unavailable mouse, make sure to replace "io.MousePos = ImVec2(-1,-1)" with "io.MousePos = ImVec2(-FLT_MAX,-FLT_MAX)". - - 2017/08/22 (1.51) - renamed IsItemHoveredRect() to IsItemRectHovered(). Kept inline redirection function (will obsolete). -> (1.52) use IsItemHovered(ImGuiHoveredFlags_RectOnly)! - - renamed IsMouseHoveringAnyWindow() to IsAnyWindowHovered() for consistency. Kept inline redirection function (will obsolete). - - renamed IsMouseHoveringWindow() to IsWindowRectHovered() for consistency. Kept inline redirection function (will obsolete). - - 2017/08/20 (1.51) - renamed GetStyleColName() to GetStyleColorName() for consistency. - - 2017/08/20 (1.51) - added PushStyleColor(ImGuiCol idx, ImU32 col) overload, which _might_ cause an "ambiguous call" compilation error if you are using ImColor() with implicit cast. Cast to ImU32 or ImVec4 explicily to fix. - - 2017/08/15 (1.51) - marked the weird IMGUI_ONCE_UPON_A_FRAME helper macro as obsolete. prefer using the more explicit ImGuiOnceUponAFrame type. - - 2017/08/15 (1.51) - changed parameter order for BeginPopupContextWindow() from (const char*,int buttons,bool also_over_items) to (const char*,int buttons,bool also_over_items). Note that most calls relied on default parameters completely. - - 2017/08/13 (1.51) - renamed ImGuiCol_Column to ImGuiCol_Separator, ImGuiCol_ColumnHovered to ImGuiCol_SeparatorHovered, ImGuiCol_ColumnActive to ImGuiCol_SeparatorActive. Kept redirection enums (will obsolete). - - 2017/08/11 (1.51) - renamed ImGuiSetCond_Always to ImGuiCond_Always, ImGuiSetCond_Once to ImGuiCond_Once, ImGuiSetCond_FirstUseEver to ImGuiCond_FirstUseEver, ImGuiSetCond_Appearing to ImGuiCond_Appearing. Kept redirection enums (will obsolete). - - 2017/08/09 (1.51) - removed ValueColor() helpers, they are equivalent to calling Text(label) + SameLine() + ColorButton(). - - 2017/08/08 (1.51) - removed ColorEditMode() and ImGuiColorEditMode in favor of ImGuiColorEditFlags and parameters to the various Color*() functions. The SetColorEditOptions() allows to initialize default but the user can still change them with right-click context menu. - - changed prototype of 'ColorEdit4(const char* label, float col[4], bool show_alpha = true)' to 'ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0)', where passing flags = 0x01 is a safe no-op (hello dodgy backward compatibility!). - check and run the demo window, under "Color/Picker Widgets", to understand the various new options. - - changed prototype of rarely used 'ColorButton(ImVec4 col, bool small_height = false, bool outline_border = true)' to 'ColorButton(const char* desc_id, ImVec4 col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0))' - - 2017/07/20 (1.51) - removed IsPosHoveringAnyWindow(ImVec2), which was partly broken and misleading. ASSERT + redirect user to io.WantCaptureMouse - - 2017/05/26 (1.50) - removed ImFontConfig::MergeGlyphCenterV in favor of a more multipurpose ImFontConfig::GlyphOffset. - - 2017/05/01 (1.50) - renamed ImDrawList::PathFill() (rarely used directly) to ImDrawList::PathFillConvex() for clarity. - - 2016/11/06 (1.50) - BeginChild(const char*) now applies the stack id to the provided label, consistently with other functions as it should always have been. It shouldn't affect you unless (extremely unlikely) you were appending multiple times to a same child from different locations of the stack id. If that's the case, generate an id with GetId() and use it instead of passing string to BeginChild(). - - 2016/10/15 (1.50) - avoid 'void* user_data' parameter to io.SetClipboardTextFn/io.GetClipboardTextFn pointers. We pass io.ClipboardUserData to it. - - 2016/09/25 (1.50) - style.WindowTitleAlign is now a ImVec2 (ImGuiAlign enum was removed). set to (0.5f,0.5f) for horizontal+vertical centering, (0.0f,0.0f) for upper-left, etc. - - 2016/07/30 (1.50) - SameLine(x) with x>0.0f is now relative to left of column/group if any, and not always to left of window. This was sort of always the intent and hopefully breakage should be minimal. - - 2016/05/12 (1.49) - title bar (using ImGuiCol_TitleBg/ImGuiCol_TitleBgActive colors) isn't rendered over a window background (ImGuiCol_WindowBg color) anymore. - If your TitleBg/TitleBgActive alpha was 1.0f or you are using the default theme it will not affect you, otherwise if <1.0f you need tweak your custom theme to readjust for the fact that we don't draw a WindowBg background behind the title bar. - This helper function will convert an old TitleBg/TitleBgActive color into a new one with the same visual output, given the OLD color and the OLD WindowBg color: - ImVec4 ConvertTitleBgCol(const ImVec4& win_bg_col, const ImVec4& title_bg_col) { float new_a = 1.0f - ((1.0f - win_bg_col.w) * (1.0f - title_bg_col.w)), k = title_bg_col.w / new_a; return ImVec4((win_bg_col.x * win_bg_col.w + title_bg_col.x) * k, (win_bg_col.y * win_bg_col.w + title_bg_col.y) * k, (win_bg_col.z * win_bg_col.w + title_bg_col.z) * k, new_a); } - If this is confusing, pick the RGB value from title bar from an old screenshot and apply this as TitleBg/TitleBgActive. Or you may just create TitleBgActive from a tweaked TitleBg color. - - 2016/05/07 (1.49) - removed confusing set of GetInternalState(), GetInternalStateSize(), SetInternalState() functions. Now using CreateContext(), DestroyContext(), GetCurrentContext(), SetCurrentContext(). - - 2016/05/02 (1.49) - renamed SetNextTreeNodeOpened() to SetNextTreeNodeOpen(), no redirection. - - 2016/05/01 (1.49) - obsoleted old signature of CollapsingHeader(const char* label, const char* str_id = NULL, bool display_frame = true, bool default_open = false) as extra parameters were badly designed and rarely used. You can replace the "default_open = true" flag in new API with CollapsingHeader(label, ImGuiTreeNodeFlags_DefaultOpen). - - 2016/04/26 (1.49) - changed ImDrawList::PushClipRect(ImVec4 rect) to ImDrawList::PushClipRect(Imvec2 min,ImVec2 max,bool intersect_with_current_clip_rect=false). Note that higher-level ImGui::PushClipRect() is preferable because it will clip at logic/widget level, whereas ImDrawList::PushClipRect() only affect your renderer. - - 2016/04/03 (1.48) - removed style.WindowFillAlphaDefault setting which was redundant. Bake default BG alpha inside style.Colors[ImGuiCol_WindowBg] and all other Bg color values. (ref github issue #337). - - 2016/04/03 (1.48) - renamed ImGuiCol_TooltipBg to ImGuiCol_PopupBg, used by popups/menus and tooltips. popups/menus were previously using ImGuiCol_WindowBg. (ref github issue #337) - - 2016/03/21 (1.48) - renamed GetWindowFont() to GetFont(), GetWindowFontSize() to GetFontSize(). Kept inline redirection function (will obsolete). - - 2016/03/02 (1.48) - InputText() completion/history/always callbacks: if you modify the text buffer manually (without using DeleteChars()/InsertChars() helper) you need to maintain the BufTextLen field. added an assert. - - 2016/01/23 (1.48) - fixed not honoring exact width passed to PushItemWidth(), previously it would add extra FramePadding.x*2 over that width. if you had manual pixel-perfect alignment in place it might affect you. - - 2015/12/27 (1.48) - fixed ImDrawList::AddRect() which used to render a rectangle 1 px too large on each axis. - - 2015/12/04 (1.47) - renamed Color() helpers to ValueColor() - dangerously named, rarely used and probably to be made obsolete. - - 2015/08/29 (1.45) - with the addition of horizontal scrollbar we made various fixes to inconsistencies with dealing with cursor position. - GetCursorPos()/SetCursorPos() functions now include the scrolled amount. It shouldn't affect the majority of users, but take note that SetCursorPosX(100.0f) puts you at +100 from the starting x position which may include scrolling, not at +100 from the window left side. - GetContentRegionMax()/GetWindowContentRegionMin()/GetWindowContentRegionMax() functions allow include the scrolled amount. Typically those were used in cases where no scrolling would happen so it may not be a problem, but watch out! - - 2015/08/29 (1.45) - renamed style.ScrollbarWidth to style.ScrollbarSize - - 2015/08/05 (1.44) - split imgui.cpp into extra files: imgui_demo.cpp imgui_draw.cpp imgui_internal.h that you need to add to your project. - - 2015/07/18 (1.44) - fixed angles in ImDrawList::PathArcTo(), PathArcToFast() (introduced in 1.43) being off by an extra PI for no justifiable reason - - 2015/07/14 (1.43) - add new ImFontAtlas::AddFont() API. For the old AddFont***, moved the 'font_no' parameter of ImFontAtlas::AddFont** functions to the ImFontConfig structure. - you need to render your textured triangles with bilinear filtering to benefit from sub-pixel positioning of text. - - 2015/07/08 (1.43) - switched rendering data to use indexed rendering. this is saving a fair amount of CPU/GPU and enables us to get anti-aliasing for a marginal cost. - this necessary change will break your rendering function! the fix should be very easy. sorry for that :( - - if you are using a vanilla copy of one of the imgui_impl_XXXX.cpp provided in the example, you just need to update your copy and you can ignore the rest. - - the signature of the io.RenderDrawListsFn handler has changed! - old: ImGui_XXXX_RenderDrawLists(ImDrawList** const cmd_lists, int cmd_lists_count) - new: ImGui_XXXX_RenderDrawLists(ImDrawData* draw_data). - parameters: 'cmd_lists' becomes 'draw_data->CmdLists', 'cmd_lists_count' becomes 'draw_data->CmdListsCount' - ImDrawList: 'commands' becomes 'CmdBuffer', 'vtx_buffer' becomes 'VtxBuffer', 'IdxBuffer' is new. - ImDrawCmd: 'vtx_count' becomes 'ElemCount', 'clip_rect' becomes 'ClipRect', 'user_callback' becomes 'UserCallback', 'texture_id' becomes 'TextureId'. - - each ImDrawList now contains both a vertex buffer and an index buffer. For each command, render ElemCount/3 triangles using indices from the index buffer. - - if you REALLY cannot render indexed primitives, you can call the draw_data->DeIndexAllBuffers() method to de-index the buffers. This is slow and a waste of CPU/GPU. Prefer using indexed rendering! - - refer to code in the examples/ folder or ask on the GitHub if you are unsure of how to upgrade. please upgrade! - - 2015/07/10 (1.43) - changed SameLine() parameters from int to float. - - 2015/07/02 (1.42) - renamed SetScrollPosHere() to SetScrollFromCursorPos(). Kept inline redirection function (will obsolete). - - 2015/07/02 (1.42) - renamed GetScrollPosY() to GetScrollY(). Necessary to reduce confusion along with other scrolling functions, because positions (e.g. cursor position) are not equivalent to scrolling amount. - - 2015/06/14 (1.41) - changed ImageButton() default bg_col parameter from (0,0,0,1) (black) to (0,0,0,0) (transparent) - makes a difference when texture have transparence - - 2015/06/14 (1.41) - changed Selectable() API from (label, selected, size) to (label, selected, flags, size). Size override should have been rarely be used. Sorry! - - 2015/05/31 (1.40) - renamed GetWindowCollapsed() to IsWindowCollapsed() for consistency. Kept inline redirection function (will obsolete). - - 2015/05/31 (1.40) - renamed IsRectClipped() to IsRectVisible() for consistency. Note that return value is opposite! Kept inline redirection function (will obsolete). - - 2015/05/27 (1.40) - removed the third 'repeat_if_held' parameter from Button() - sorry! it was rarely used and inconsistent. Use PushButtonRepeat(true) / PopButtonRepeat() to enable repeat on desired buttons. - - 2015/05/11 (1.40) - changed BeginPopup() API, takes a string identifier instead of a bool. ImGui needs to manage the open/closed state of popups. Call OpenPopup() to actually set the "open" state of a popup. BeginPopup() returns true if the popup is opened. - - 2015/05/03 (1.40) - removed style.AutoFitPadding, using style.WindowPadding makes more sense (the default values were already the same). - - 2015/04/13 (1.38) - renamed IsClipped() to IsRectClipped(). Kept inline redirection function until 1.50. - - 2015/04/09 (1.38) - renamed ImDrawList::AddArc() to ImDrawList::AddArcFast() for compatibility with future API - - 2015/04/03 (1.38) - removed ImGuiCol_CheckHovered, ImGuiCol_CheckActive, replaced with the more general ImGuiCol_FrameBgHovered, ImGuiCol_FrameBgActive. - - 2014/04/03 (1.38) - removed support for passing -FLT_MAX..+FLT_MAX as the range for a SliderFloat(). Use DragFloat() or Inputfloat() instead. - - 2015/03/17 (1.36) - renamed GetItemBoxMin()/GetItemBoxMax()/IsMouseHoveringBox() to GetItemRectMin()/GetItemRectMax()/IsMouseHoveringRect(). Kept inline redirection function until 1.50. - - 2015/03/15 (1.36) - renamed style.TreeNodeSpacing to style.IndentSpacing, ImGuiStyleVar_TreeNodeSpacing to ImGuiStyleVar_IndentSpacing - - 2015/03/13 (1.36) - renamed GetWindowIsFocused() to IsWindowFocused(). Kept inline redirection function until 1.50. - - 2015/03/08 (1.35) - renamed style.ScrollBarWidth to style.ScrollbarWidth (casing) - - 2015/02/27 (1.34) - renamed OpenNextNode(bool) to SetNextTreeNodeOpened(bool, ImGuiSetCond). Kept inline redirection function until 1.50. - - 2015/02/27 (1.34) - renamed ImGuiSetCondition_*** to ImGuiSetCond_***, and _FirstUseThisSession becomes _Once. - - 2015/02/11 (1.32) - changed text input callback ImGuiTextEditCallback return type from void-->int. reserved for future use, return 0 for now. - - 2015/02/10 (1.32) - renamed GetItemWidth() to CalcItemWidth() to clarify its evolving behavior - - 2015/02/08 (1.31) - renamed GetTextLineSpacing() to GetTextLineHeightWithSpacing() - - 2015/02/01 (1.31) - removed IO.MemReallocFn (unused) - - 2015/01/19 (1.30) - renamed ImGuiStorage::GetIntPtr()/GetFloatPtr() to GetIntRef()/GetIntRef() because Ptr was conflicting with actual pointer storage functions. - - 2015/01/11 (1.30) - big font/image API change! now loads TTF file. allow for multiple fonts. no need for a PNG loader. - - 2015/01/11 (1.30) - removed GetDefaultFontData(). uses io.Fonts->GetTextureData*() API to retrieve uncompressed pixels. - - old: const void* png_data; unsigned int png_size; ImGui::GetDefaultFontData(NULL, NULL, &png_data, &png_size); [..Upload texture to GPU..]; - - new: unsigned char* pixels; int width, height; io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); [..Upload texture to GPU..]; io.Fonts->TexId = YourTexIdentifier; - you now have more flexibility to load multiple TTF fonts and manage the texture buffer for internal needs. It is now recommended that you sample the font texture with bilinear interpolation. - - 2015/01/11 (1.30) - added texture identifier in ImDrawCmd passed to your render function (we can now render images). make sure to set io.Fonts->TexID. - - 2015/01/11 (1.30) - removed IO.PixelCenterOffset (unnecessary, can be handled in user projection matrix) - - 2015/01/11 (1.30) - removed ImGui::IsItemFocused() in favor of ImGui::IsItemActive() which handles all widgets - - 2014/12/10 (1.18) - removed SetNewWindowDefaultPos() in favor of new generic API SetNextWindowPos(pos, ImGuiSetCondition_FirstUseEver) - - 2014/11/28 (1.17) - moved IO.Font*** options to inside the IO.Font-> structure (FontYOffset, FontTexUvForWhite, FontBaseScale, FontFallbackGlyph) - - 2014/11/26 (1.17) - reworked syntax of IMGUI_ONCE_UPON_A_FRAME helper macro to increase compiler compatibility - - 2014/11/07 (1.15) - renamed IsHovered() to IsItemHovered() - - 2014/10/02 (1.14) - renamed IMGUI_INCLUDE_IMGUI_USER_CPP to IMGUI_INCLUDE_IMGUI_USER_INL and imgui_user.cpp to imgui_user.inl (more IDE friendly) - - 2014/09/25 (1.13) - removed 'text_end' parameter from IO.SetClipboardTextFn (the string is now always zero-terminated for simplicity) - - 2014/09/24 (1.12) - renamed SetFontScale() to SetWindowFontScale() - - 2014/09/24 (1.12) - moved IM_MALLOC/IM_REALLOC/IM_FREE preprocessor defines to IO.MemAllocFn/IO.MemReallocFn/IO.MemFreeFn - - 2014/08/30 (1.09) - removed IO.FontHeight (now computed automatically) - - 2014/08/30 (1.09) - moved IMGUI_FONT_TEX_UV_FOR_WHITE preprocessor define to IO.FontTexUvForWhite - - 2014/08/28 (1.09) - changed the behavior of IO.PixelCenterOffset following various rendering fixes - - - FREQUENTLY ASKED QUESTIONS (FAQ) - ================================ - - Read all answers online: https://www.dearimgui.org/faq, or in docs/FAQ.md (with a Markdown viewer) - Some answers are copied down here to facilitate searching in code. - - Q&A: Basics - =========== - - Q: Where is the documentation? - A: This library is poorly documented at the moment and expects of the user to be acquainted with C/C++. - - Run the examples/ and explore them. - - See demo code in imgui_demo.cpp and particularly the ImGui::ShowDemoWindow() function. - - The demo covers most features of Dear ImGui, so you can read the code and see its output. - - See documentation and comments at the top of imgui.cpp + effectively imgui.h. - - Dozens of standalone example applications using e.g. OpenGL/DirectX are provided in the - examples/ folder to explain how to integrate Dear ImGui with your own engine/application. - - The Wiki (https://github.com/ocornut/imgui/wiki) has many resources and links. - - The Glossary (https://github.com/ocornut/imgui/wiki/Glossary) page also may be useful. - - Your programming IDE is your friend, find the type or function declaration to find comments - associated to it. - - Q: What is this library called? - Q: Which version should I get? - >> This library is called "Dear ImGui", please don't call it "ImGui" :) - >> See https://www.dearimgui.org/faq - - Q&A: Integration - ================ - - Q: How can I tell whether to dispatch mouse/keyboard to Dear ImGui or to my application? - A: You should read the 'io.WantCaptureMouse', 'io.WantCaptureKeyboard' and 'io.WantTextInput' flags! - >> See https://www.dearimgui.org/faq for fully detailed answer. You really want to read this. - - Q. How can I enable keyboard controls? - Q: How can I use this without a mouse, without a keyboard or without a screen? (gamepad, input share, remote display) - Q: I integrated Dear ImGui in my engine and the text or lines are blurry.. - Q: I integrated Dear ImGui in my engine and some elements are clipping or disappearing when I move windows around.. - >> See https://www.dearimgui.org/faq - - Q&A: Usage - ---------- - - Q: Why are multiple widgets reacting when I interact with a single one? - Q: How can I have multiple widgets with the same label or with an empty label? - A: A primer on labels and the ID Stack... - - Dear ImGui internally need to uniquely identify UI elements. - Elements that are typically not clickable (such as calls to the Text functions) don't need an ID. - Interactive widgets (such as calls to Button buttons) need a unique ID. - Unique ID are used internally to track active widgets and occasionally associate state to widgets. - Unique ID are implicitly built from the hash of multiple elements that identify the "path" to the UI element. - - - Unique ID are often derived from a string label: - - Button("OK"); // Label = "OK", ID = hash of (..., "OK") - Button("Cancel"); // Label = "Cancel", ID = hash of (..., "Cancel") - - - ID are uniquely scoped within windows, tree nodes, etc. which all pushes to the ID stack. Having - two buttons labeled "OK" in different windows or different tree locations is fine. - We used "..." above to signify whatever was already pushed to the ID stack previously: - - Begin("MyWindow"); - Button("OK"); // Label = "OK", ID = hash of ("MyWindow", "OK") - End(); - Begin("MyOtherWindow"); - Button("OK"); // Label = "OK", ID = hash of ("MyOtherWindow", "OK") - End(); - - - If you have a same ID twice in the same location, you'll have a conflict: - - Button("OK"); - Button("OK"); // ID collision! Interacting with either button will trigger the first one. - - Fear not! this is easy to solve and there are many ways to solve it! - - - Solving ID conflict in a simple/local context: - When passing a label you can optionally specify extra ID information within string itself. - Use "##" to pass a complement to the ID that won't be visible to the end-user. - This helps solving the simple collision cases when you know e.g. at compilation time which items - are going to be created: - - Begin("MyWindow"); - Button("Play"); // Label = "Play", ID = hash of ("MyWindow", "Play") - Button("Play##foo1"); // Label = "Play", ID = hash of ("MyWindow", "Play##foo1") // Different from above - Button("Play##foo2"); // Label = "Play", ID = hash of ("MyWindow", "Play##foo2") // Different from above - End(); - - - If you want to completely hide the label, but still need an ID: - - Checkbox("##On", &b); // Label = "", ID = hash of (..., "##On") // No visible label, just a checkbox! - - - Occasionally/rarely you might want change a label while preserving a constant ID. This allows - you to animate labels. For example you may want to include varying information in a window title bar, - but windows are uniquely identified by their ID. Use "###" to pass a label that isn't part of ID: - - Button("Hello###ID"); // Label = "Hello", ID = hash of (..., "###ID") - Button("World###ID"); // Label = "World", ID = hash of (..., "###ID") // Same as above, even though the label looks different - - sprintf(buf, "My game (%f FPS)###MyGame", fps); - Begin(buf); // Variable title, ID = hash of "MyGame" - - - Solving ID conflict in a more general manner: - Use PushID() / PopID() to create scopes and manipulate the ID stack, as to avoid ID conflicts - within the same window. This is the most convenient way of distinguishing ID when iterating and - creating many UI elements programmatically. - You can push a pointer, a string or an integer value into the ID stack. - Remember that ID are formed from the concatenation of _everything_ pushed into the ID stack. - At each level of the stack we store the seed used for items at this level of the ID stack. - - Begin("Window"); - for (int i = 0; i < 100; i++) - { - PushID(i); // Push i to the id tack - Button("Click"); // Label = "Click", ID = hash of ("Window", i, "Click") - PopID(); - } - for (int i = 0; i < 100; i++) - { - MyObject* obj = Objects[i]; - PushID(obj); - Button("Click"); // Label = "Click", ID = hash of ("Window", obj pointer, "Click") - PopID(); - } - for (int i = 0; i < 100; i++) - { - MyObject* obj = Objects[i]; - PushID(obj->Name); - Button("Click"); // Label = "Click", ID = hash of ("Window", obj->Name, "Click") - PopID(); - } - End(); - - - You can stack multiple prefixes into the ID stack: - - Button("Click"); // Label = "Click", ID = hash of (..., "Click") - PushID("node"); - Button("Click"); // Label = "Click", ID = hash of (..., "node", "Click") - PushID(my_ptr); - Button("Click"); // Label = "Click", ID = hash of (..., "node", my_ptr, "Click") - PopID(); - PopID(); - - - Tree nodes implicitly creates a scope for you by calling PushID(). - - Button("Click"); // Label = "Click", ID = hash of (..., "Click") - if (TreeNode("node")) // <-- this function call will do a PushID() for you (unless instructed not to, with a special flag) - { - Button("Click"); // Label = "Click", ID = hash of (..., "node", "Click") - TreePop(); - } - - - When working with trees, ID are used to preserve the open/close state of each tree node. - Depending on your use cases you may want to use strings, indices or pointers as ID. - e.g. when following a single pointer that may change over time, using a static string as ID - will preserve your node open/closed state when the targeted object change. - e.g. when displaying a list of objects, using indices or pointers as ID will preserve the - node open/closed state differently. See what makes more sense in your situation! - - Q: How can I display an image? What is ImTextureID, how does it works? - >> See https://www.dearimgui.org/faq and https://github.com/ocornut/imgui/wiki/Image-Loading-and-Displaying-Examples - - Q: How can I use my own math types instead of ImVec2/ImVec4? - Q: How can I interact with standard C++ types (such as std::string and std::vector)? - Q: How can I display custom shapes? (using low-level ImDrawList API) - >> See https://www.dearimgui.org/faq - - Q&A: Fonts, Text - ================ - - Q: How can I load a different font than the default? - Q: How can I easily use icons in my application? - Q: How can I load multiple fonts? - Q: How can I display and input non-Latin characters such as Chinese, Japanese, Korean, Cyrillic? - >> See https://www.dearimgui.org/faq and docs/FONTS.txt - - Q&A: Concerns - ============= - - Q: Who uses Dear ImGui? - Q: Can you create elaborate/serious tools with Dear ImGui? - Q: Can you reskin the look of Dear ImGui? - Q: Why using C++ (as opposed to C)? - >> See https://www.dearimgui.org/faq - - Q&A: Community - ============== - - Q: How can I help? - A: - Businesses: please reach out to "contact AT dearimgui.org" if you work in a place using Dear ImGui! - We can discuss ways for your company to fund development via invoiced technical support, maintenance or sponsoring contacts. - This is among the most useful thing you can do for Dear ImGui. With increased funding we can hire more people working on this project. - - Individuals: you can support continued development via PayPal donations. See README. - - If you are experienced with Dear ImGui and C++, look at the github issues, look at the Wiki, read docs/TODO.txt - and see how you want to help and can help! - - Disclose your usage of Dear ImGui via a dev blog post, a tweet, a screenshot, a mention somewhere etc. - You may post screenshot or links in the gallery threads (github.com/ocornut/imgui/issues/3075). Visuals are ideal as they inspire other programmers. - But even without visuals, disclosing your use of dear imgui help the library grow credibility, and help other teams and programmers with taking decisions. - - If you have issues or if you need to hack into the library, even if you don't expect any support it is useful that you share your issues (on github or privately). - -*/ - -//------------------------------------------------------------------------- -// [SECTION] INCLUDES -//------------------------------------------------------------------------- - -#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) -#define _CRT_SECURE_NO_WARNINGS -#endif - -#include "imgui.h" -#ifndef IMGUI_DISABLE - -#ifndef IMGUI_DEFINE_MATH_OPERATORS -#define IMGUI_DEFINE_MATH_OPERATORS -#endif -#include "imgui_internal.h" - -// System includes -#include // toupper -#include // vsnprintf, sscanf, printf -#if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier -#include // intptr_t -#else -#include // intptr_t -#endif - -// [Windows] OS specific includes (optional) -#if defined(_WIN32) && defined(IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS) && defined(IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS) && defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) -#define IMGUI_DISABLE_WIN32_FUNCTIONS -#endif -#if defined(_WIN32) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN -#endif -#ifndef NOMINMAX -#define NOMINMAX -#endif -#ifndef __MINGW32__ -#include // _wfopen, OpenClipboard -#else -#include -#endif -#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP) // UWP doesn't have all Win32 functions -#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS -#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS -#endif -#endif - -// [Apple] OS specific includes -#if defined(__APPLE__) -#include -#endif - -// Visual Studio warnings -#ifdef _MSC_VER -#pragma warning (disable: 4127) // condition expression is constant -#pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen -#if defined(_MSC_VER) && _MSC_VER >= 1922 // MSVC 2019 16.2 or later -#pragma warning (disable: 5054) // operator '|': deprecated between enumerations of different types -#endif -#endif - -// Clang/GCC warnings with -Weverything -#if defined(__clang__) -#pragma clang diagnostic ignored "-Wunknown-pragmas" // warning : unknown warning group '-Wformat-pedantic *' // not all warnings are known by all clang versions.. so ignoring warnings triggers new warnings on some configuration. great! -#pragma clang diagnostic ignored "-Wold-style-cast" // warning : use of old-style cast // yes, they are more terse. -#pragma clang diagnostic ignored "-Wfloat-equal" // warning : comparing floating point with == or != is unsafe // storing and comparing against same constants (typically 0.0f) is ok. -#pragma clang diagnostic ignored "-Wformat-nonliteral" // warning : format string is not a string literal // passing non-literal to vsnformat(). yes, user passing incorrect format strings can crash the code. -#pragma clang diagnostic ignored "-Wexit-time-destructors" // warning : declaration requires an exit-time destructor // exit-time destruction order is undefined. if MemFree() leads to users code that has been disabled before exit it might cause problems. ImGui coding style welcomes static/globals. -#pragma clang diagnostic ignored "-Wglobal-constructors" // warning : declaration requires a global destructor // similar to above, not sure what the exact difference is. -#pragma clang diagnostic ignored "-Wsign-conversion" // warning : implicit conversion changes signedness // -#pragma clang diagnostic ignored "-Wformat-pedantic" // warning : format specifies type 'void *' but the argument has type 'xxxx *' // unreasonable, would lead to casting every %p arg to void*. probably enabled by -pedantic. -#pragma clang diagnostic ignored "-Wint-to-void-pointer-cast" // warning : cast to 'void *' from smaller integer type 'int' -#if __has_warning("-Wzero-as-null-pointer-constant") -#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" // warning : zero as null pointer constant // some standard header variations use #define NULL 0 -#endif -#if __has_warning("-Wdouble-promotion") -#pragma clang diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function // using printf() is a misery with this as C++ va_arg ellipsis changes float to double. -#endif -#elif defined(__GNUC__) -// We disable -Wpragmas because GCC doesn't provide an has_warning equivalent and some forks/patches may not following the warning/version association. -#pragma GCC diagnostic ignored "-Wpragmas" // warning: unknown option after '#pragma GCC diagnostic' kind -#pragma GCC diagnostic ignored "-Wunused-function" // warning: 'xxxx' defined but not used -#pragma GCC diagnostic ignored "-Wint-to-pointer-cast" // warning: cast to pointer from integer of different size -#pragma GCC diagnostic ignored "-Wformat" // warning: format '%p' expects argument of type 'void*', but argument 6 has type 'ImGuiWindow*' -#pragma GCC diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function -#pragma GCC diagnostic ignored "-Wconversion" // warning: conversion to 'xxxx' from 'xxxx' may alter its value -#pragma GCC diagnostic ignored "-Wformat-nonliteral" // warning: format not a string literal, format string not checked -#pragma GCC diagnostic ignored "-Wstrict-overflow" // warning: assuming signed overflow does not occur when assuming that (X - c) > X is always false -#pragma GCC diagnostic ignored "-Wclass-memaccess" // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead -#endif - -// Debug options -#define IMGUI_DEBUG_NAV_SCORING 0 // Display navigation scoring preview when hovering items. Display last moving direction matches when holding CTRL -#define IMGUI_DEBUG_NAV_RECTS 0 // Display the reference navigation rectangle for each window -#define IMGUI_DEBUG_INI_SETTINGS 0 // Save additional comments in .ini file (particularly helps for Docking, but makes saving slower) - -// When using CTRL+TAB (or Gamepad Square+L/R) we delay the visual a little in order to reduce visual noise doing a fast switch. -static const float NAV_WINDOWING_HIGHLIGHT_DELAY = 0.20f; // Time before the highlight and screen dimming starts fading in -static const float NAV_WINDOWING_LIST_APPEAR_DELAY = 0.15f; // Time before the window list starts to appear - -// Window resizing from edges (when io.ConfigWindowsResizeFromEdges = true and ImGuiBackendFlags_HasMouseCursors is set in io.BackendFlags by back-end) -static const float WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS = 4.0f; // Extend outside and inside windows. Affect FindHoveredWindow(). -static const float WINDOWS_RESIZE_FROM_EDGES_FEEDBACK_TIMER = 0.04f; // Reduce visual noise by only highlighting the border after a certain time. -static const float WINDOWS_MOUSE_WHEEL_SCROLL_LOCK_TIMER = 2.00f; // Lock scrolled window (so it doesn't pick child windows that are scrolling through) for a certaint time, unless mouse moved. - -//------------------------------------------------------------------------- -// [SECTION] FORWARD DECLARATIONS -//------------------------------------------------------------------------- - -static void SetCurrentWindow(ImGuiWindow* window); -static void FindHoveredWindow(); -static ImGuiWindow* CreateNewWindow(const char* name, ImVec2 size, ImGuiWindowFlags flags); -static ImVec2 CalcNextScrollFromScrollTargetAndClamp(ImGuiWindow* window, bool snap_on_edges); - -static void AddDrawListToDrawData(ImVector* out_list, ImDrawList* draw_list); -static void AddWindowToSortBuffer(ImVector* out_sorted_windows, ImGuiWindow* window); - -static ImRect GetViewportRect(); - -// Settings -static void* WindowSettingsHandler_ReadOpen(ImGuiContext*, ImGuiSettingsHandler*, const char* name); -static void WindowSettingsHandler_ReadLine(ImGuiContext*, ImGuiSettingsHandler*, void* entry, const char* line); -static void WindowSettingsHandler_WriteAll(ImGuiContext*, ImGuiSettingsHandler*, ImGuiTextBuffer* buf); - -// Platform Dependents default implementation for IO functions -static const char* GetClipboardTextFn_DefaultImpl(void* user_data); -static void SetClipboardTextFn_DefaultImpl(void* user_data, const char* text); -static void ImeSetInputScreenPosFn_DefaultImpl(int x, int y); - -namespace ImGui -{ -// Navigation -static void NavUpdate(); -static void NavUpdateWindowing(); -static void NavUpdateWindowingOverlay(); -static void NavUpdateMoveResult(); -static float NavUpdatePageUpPageDown(); -static inline void NavUpdateAnyRequestFlag(); -static bool NavScoreItem(ImGuiNavMoveResult* result, ImRect cand); -static void NavProcessItem(ImGuiWindow* window, const ImRect& nav_bb, ImGuiID id); -static ImVec2 NavCalcPreferredRefPos(); -static void NavSaveLastChildNavWindowIntoParent(ImGuiWindow* nav_window); -static ImGuiWindow* NavRestoreLastChildNavWindow(ImGuiWindow* window); -static int FindWindowFocusIndex(ImGuiWindow* window); - -// Error Checking -static void ErrorCheckNewFrameSanityChecks(); -static void ErrorCheckEndFrameSanityChecks(); -static void ErrorCheckBeginEndCompareStacksSize(ImGuiWindow* window, bool write); - -// Misc -static void UpdateSettings(); -static void UpdateMouseInputs(); -static void UpdateMouseWheel(); -static void UpdateTabFocus(); -static void UpdateDebugToolItemPicker(); -static bool UpdateWindowManualResize(ImGuiWindow* window, const ImVec2& size_auto_fit, int* border_held, int resize_grip_count, ImU32 resize_grip_col[4]); -static void RenderWindowOuterBorders(ImGuiWindow* window); -static void RenderWindowDecorations(ImGuiWindow* window, const ImRect& title_bar_rect, bool title_bar_is_highlight, int resize_grip_count, const ImU32 resize_grip_col[4], float resize_grip_draw_size); -static void RenderWindowTitleBarContents(ImGuiWindow* window, const ImRect& title_bar_rect, const char* name, bool* p_open); - -} - -//----------------------------------------------------------------------------- -// [SECTION] CONTEXT AND MEMORY ALLOCATORS -//----------------------------------------------------------------------------- - -// Current context pointer. Implicitly used by all Dear ImGui functions. Always assumed to be != NULL. -// ImGui::CreateContext() will automatically set this pointer if it is NULL. Change to a different context by calling ImGui::SetCurrentContext(). -// 1) Important: globals are not shared across DLL boundaries! If you use DLLs or any form of hot-reloading: you will need to call -// SetCurrentContext() (with the pointer you got from CreateContext) from each unique static/DLL boundary, and after each hot-reloading. -// In your debugger, add GImGui to your watch window and notice how its value changes depending on which location you are currently stepping into. -// 2) Important: Dear ImGui functions are not thread-safe because of this pointer. -// If you want thread-safety to allow N threads to access N different contexts, you can: -// - Change this variable to use thread local storage so each thread can refer to a different context, in imconfig.h: -// struct ImGuiContext; -// extern thread_local ImGuiContext* MyImGuiTLS; -// #define GImGui MyImGuiTLS -// And then define MyImGuiTLS in one of your cpp file. Note that thread_local is a C++11 keyword, earlier C++ uses compiler-specific keyword. -// - Future development aim to make this context pointer explicit to all calls. Also read https://github.com/ocornut/imgui/issues/586 -// - If you need a finite number of contexts, you may compile and use multiple instances of the ImGui code from different namespace. -#ifndef GImGui -ImGuiContext* GImGui = NULL; -#endif - -// Memory Allocator functions. Use SetAllocatorFunctions() to change them. -// If you use DLL hotreloading you might need to call SetAllocatorFunctions() after reloading code from this file. -// Otherwise, you probably don't want to modify them mid-program, and if you use global/static e.g. ImVector<> instances you may need to keep them accessible during program destruction. -#ifndef IMGUI_DISABLE_DEFAULT_ALLOCATORS -static void* MallocWrapper(size_t size, void* user_data) { IM_UNUSED(user_data); return malloc(size); } -static void FreeWrapper(void* ptr, void* user_data) { IM_UNUSED(user_data); free(ptr); } -#else -static void* MallocWrapper(size_t size, void* user_data) { IM_UNUSED(user_data); IM_UNUSED(size); IM_ASSERT(0); return NULL; } -static void FreeWrapper(void* ptr, void* user_data) { IM_UNUSED(user_data); IM_UNUSED(ptr); IM_ASSERT(0); } -#endif - -static void* (*GImAllocatorAllocFunc)(size_t size, void* user_data) = MallocWrapper; -static void (*GImAllocatorFreeFunc)(void* ptr, void* user_data) = FreeWrapper; -static void* GImAllocatorUserData = NULL; - -//----------------------------------------------------------------------------- -// [SECTION] USER FACING STRUCTURES (ImGuiStyle, ImGuiIO) -//----------------------------------------------------------------------------- - -ImGuiStyle::ImGuiStyle() -{ - Alpha = 1.0f; // Global alpha applies to everything in ImGui - WindowPadding = ImVec2(8,8); // Padding within a window - WindowRounding = 7.0f; // Radius of window corners rounding. Set to 0.0f to have rectangular windows - WindowBorderSize = 1.0f; // Thickness of border around windows. Generally set to 0.0f or 1.0f. Other values not well tested. - WindowMinSize = ImVec2(32,32); // Minimum window size - WindowTitleAlign = ImVec2(0.0f,0.5f);// Alignment for title bar text - WindowMenuButtonPosition= ImGuiDir_Left; // Position of the collapsing/docking button in the title bar (left/right). Defaults to ImGuiDir_Left. - ChildRounding = 0.0f; // Radius of child window corners rounding. Set to 0.0f to have rectangular child windows - ChildBorderSize = 1.0f; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. Other values not well tested. - PopupRounding = 0.0f; // Radius of popup window corners rounding. Set to 0.0f to have rectangular child windows - PopupBorderSize = 1.0f; // Thickness of border around popup or tooltip windows. Generally set to 0.0f or 1.0f. Other values not well tested. - FramePadding = ImVec2(4,3); // Padding within a framed rectangle (used by most widgets) - FrameRounding = 0.0f; // Radius of frame corners rounding. Set to 0.0f to have rectangular frames (used by most widgets). - FrameBorderSize = 0.0f; // Thickness of border around frames. Generally set to 0.0f or 1.0f. Other values not well tested. - ItemSpacing = ImVec2(8,4); // Horizontal and vertical spacing between widgets/lines - ItemInnerSpacing = ImVec2(4,4); // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) - TouchExtraPadding = ImVec2(0,0); // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! - IndentSpacing = 21.0f; // Horizontal spacing when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). - ColumnsMinSpacing = 6.0f; // Minimum horizontal spacing between two columns. Preferably > (FramePadding.x + 1). - ScrollbarSize = 14.0f; // Width of the vertical scrollbar, Height of the horizontal scrollbar - ScrollbarRounding = 9.0f; // Radius of grab corners rounding for scrollbar - GrabMinSize = 10.0f; // Minimum width/height of a grab box for slider/scrollbar - GrabRounding = 0.0f; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. - TabRounding = 4.0f; // Radius of upper corners of a tab. Set to 0.0f to have rectangular tabs. - TabBorderSize = 0.0f; // Thickness of border around tabs. - ColorButtonPosition = ImGuiDir_Right; // Side of the color button in the ColorEdit4 widget (left/right). Defaults to ImGuiDir_Right. - ButtonTextAlign = ImVec2(0.5f,0.5f);// Alignment of button text when button is larger than text. - SelectableTextAlign = ImVec2(0.0f,0.0f);// Alignment of selectable text. Defaults to (0.0f, 0.0f) (top-left aligned). It's generally important to keep this left-aligned if you want to lay multiple items on a same line. - DisplayWindowPadding = ImVec2(19,19); // Window position are clamped to be visible within the display area or monitors by at least this amount. Only applies to regular windows. - DisplaySafeAreaPadding = ImVec2(3,3); // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. - MouseCursorScale = 1.0f; // Scale software rendered mouse cursor (when io.MouseDrawCursor is enabled). May be removed later. - AntiAliasedLines = true; // Enable anti-aliasing on lines/borders. Disable if you are really short on CPU/GPU. - AntiAliasedFill = true; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) - CurveTessellationTol = 1.25f; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. - CircleSegmentMaxError = 1.60f; // Maximum error (in pixels) allowed when using AddCircle()/AddCircleFilled() or drawing rounded corner rectangles with no explicit segment count specified. Decrease for higher quality but more geometry. - - // Default theme - ImGui::StyleColorsDark(this); -} - -// To scale your entire UI (e.g. if you want your app to use High DPI or generally be DPI aware) you may use this helper function. Scaling the fonts is done separately and is up to you. -// Important: This operation is lossy because we round all sizes to integer. If you need to change your scale multiples, call this over a freshly initialized ImGuiStyle structure rather than scaling multiple times. -void ImGuiStyle::ScaleAllSizes(float scale_factor) -{ - WindowPadding = ImFloor(WindowPadding * scale_factor); - WindowRounding = ImFloor(WindowRounding * scale_factor); - WindowMinSize = ImFloor(WindowMinSize * scale_factor); - ChildRounding = ImFloor(ChildRounding * scale_factor); - PopupRounding = ImFloor(PopupRounding * scale_factor); - FramePadding = ImFloor(FramePadding * scale_factor); - FrameRounding = ImFloor(FrameRounding * scale_factor); - ItemSpacing = ImFloor(ItemSpacing * scale_factor); - ItemInnerSpacing = ImFloor(ItemInnerSpacing * scale_factor); - TouchExtraPadding = ImFloor(TouchExtraPadding * scale_factor); - IndentSpacing = ImFloor(IndentSpacing * scale_factor); - ColumnsMinSpacing = ImFloor(ColumnsMinSpacing * scale_factor); - ScrollbarSize = ImFloor(ScrollbarSize * scale_factor); - ScrollbarRounding = ImFloor(ScrollbarRounding * scale_factor); - GrabMinSize = ImFloor(GrabMinSize * scale_factor); - GrabRounding = ImFloor(GrabRounding * scale_factor); - TabRounding = ImFloor(TabRounding * scale_factor); - DisplayWindowPadding = ImFloor(DisplayWindowPadding * scale_factor); - DisplaySafeAreaPadding = ImFloor(DisplaySafeAreaPadding * scale_factor); - MouseCursorScale = ImFloor(MouseCursorScale * scale_factor); -} - -ImGuiIO::ImGuiIO() -{ - // Most fields are initialized with zero - memset(this, 0, sizeof(*this)); - IM_ASSERT(IM_ARRAYSIZE(ImGuiIO::MouseDown) == ImGuiMouseButton_COUNT && IM_ARRAYSIZE(ImGuiIO::MouseClicked) == ImGuiMouseButton_COUNT); // Our pre-C++11 IM_STATIC_ASSERT() macros triggers warning on modern compilers so we don't use it here. - - // Settings - ConfigFlags = ImGuiConfigFlags_None; - BackendFlags = ImGuiBackendFlags_None; - DisplaySize = ImVec2(-1.0f, -1.0f); - DeltaTime = 1.0f/60.0f; - IniSavingRate = 5.0f; - IniFilename = "imgui.ini"; - LogFilename = "imgui_log.txt"; - MouseDoubleClickTime = 0.30f; - MouseDoubleClickMaxDist = 6.0f; - for (int i = 0; i < ImGuiKey_COUNT; i++) - KeyMap[i] = -1; - KeyRepeatDelay = 0.275f; - KeyRepeatRate = 0.050f; - UserData = NULL; - - Fonts = NULL; - FontGlobalScale = 1.0f; - FontDefault = NULL; - FontAllowUserScaling = false; - DisplayFramebufferScale = ImVec2(1.0f, 1.0f); - - // Miscellaneous options - MouseDrawCursor = false; -#ifdef __APPLE__ - ConfigMacOSXBehaviors = true; // Set Mac OS X style defaults based on __APPLE__ compile time flag -#else - ConfigMacOSXBehaviors = false; -#endif - ConfigInputTextCursorBlink = true; - ConfigWindowsResizeFromEdges = true; - ConfigWindowsMoveFromTitleBarOnly = false; - ConfigWindowsMemoryCompactTimer = 60.0f; - - // Platform Functions - BackendPlatformName = BackendRendererName = NULL; - BackendPlatformUserData = BackendRendererUserData = BackendLanguageUserData = NULL; - GetClipboardTextFn = GetClipboardTextFn_DefaultImpl; // Platform dependent default implementations - SetClipboardTextFn = SetClipboardTextFn_DefaultImpl; - ClipboardUserData = NULL; - ImeSetInputScreenPosFn = ImeSetInputScreenPosFn_DefaultImpl; - ImeWindowHandle = NULL; - -#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS - RenderDrawListsFn = NULL; -#endif - - // Input (NB: we already have memset zero the entire structure!) - MousePos = ImVec2(-FLT_MAX, -FLT_MAX); - MousePosPrev = ImVec2(-FLT_MAX, -FLT_MAX); - MouseDragThreshold = 6.0f; - for (int i = 0; i < IM_ARRAYSIZE(MouseDownDuration); i++) MouseDownDuration[i] = MouseDownDurationPrev[i] = -1.0f; - for (int i = 0; i < IM_ARRAYSIZE(KeysDownDuration); i++) KeysDownDuration[i] = KeysDownDurationPrev[i] = -1.0f; - for (int i = 0; i < IM_ARRAYSIZE(NavInputsDownDuration); i++) NavInputsDownDuration[i] = -1.0f; -} - -// Pass in translated ASCII characters for text input. -// - with glfw you can get those from the callback set in glfwSetCharCallback() -// - on Windows you can get those using ToAscii+keyboard state, or via the WM_CHAR message -void ImGuiIO::AddInputCharacter(unsigned int c) -{ - InputQueueCharacters.push_back(c > 0 && c <= IM_UNICODE_CODEPOINT_MAX ? (ImWchar)c : IM_UNICODE_CODEPOINT_INVALID); -} - -// UTF16 strings use surrogate pairs to encode codepoints >= 0x10000, so -// we should save the high surrogate. -void ImGuiIO::AddInputCharacterUTF16(ImWchar16 c) -{ - if ((c & 0xFC00) == 0xD800) // High surrogate, must save - { - if (InputQueueSurrogate != 0) - InputQueueCharacters.push_back(0xFFFD); - InputQueueSurrogate = c; - return; - } - - ImWchar cp = c; - if (InputQueueSurrogate != 0) - { - if ((c & 0xFC00) != 0xDC00) // Invalid low surrogate - InputQueueCharacters.push_back(IM_UNICODE_CODEPOINT_INVALID); - else if (IM_UNICODE_CODEPOINT_MAX == (0xFFFF)) // Codepoint will not fit in ImWchar (extra parenthesis around 0xFFFF somehow fixes -Wunreachable-code with Clang) - cp = IM_UNICODE_CODEPOINT_INVALID; - else - cp = (ImWchar)(((InputQueueSurrogate - 0xD800) << 10) + (c - 0xDC00) + 0x10000); - InputQueueSurrogate = 0; - } - InputQueueCharacters.push_back(cp); -} - -void ImGuiIO::AddInputCharactersUTF8(const char* utf8_chars) -{ - while (*utf8_chars != 0) - { - unsigned int c = 0; - utf8_chars += ImTextCharFromUtf8(&c, utf8_chars, NULL); - if (c > 0) - InputQueueCharacters.push_back((ImWchar)c); - } -} - -void ImGuiIO::ClearInputCharacters() -{ - InputQueueCharacters.resize(0); -} - -//----------------------------------------------------------------------------- -// [SECTION] MISC HELPERS/UTILITIES (Geometry functions) -//----------------------------------------------------------------------------- - -ImVec2 ImBezierClosestPoint(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& p, int num_segments) -{ - IM_ASSERT(num_segments > 0); // Use ImBezierClosestPointCasteljau() - ImVec2 p_last = p1; - ImVec2 p_closest; - float p_closest_dist2 = FLT_MAX; - float t_step = 1.0f / (float)num_segments; - for (int i_step = 1; i_step <= num_segments; i_step++) - { - ImVec2 p_current = ImBezierCalc(p1, p2, p3, p4, t_step * i_step); - ImVec2 p_line = ImLineClosestPoint(p_last, p_current, p); - float dist2 = ImLengthSqr(p - p_line); - if (dist2 < p_closest_dist2) - { - p_closest = p_line; - p_closest_dist2 = dist2; - } - p_last = p_current; - } - return p_closest; -} - -// Closely mimics PathBezierToCasteljau() in imgui_draw.cpp -static void BezierClosestPointCasteljauStep(const ImVec2& p, ImVec2& p_closest, ImVec2& p_last, float& p_closest_dist2, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4, float tess_tol, int level) -{ - float dx = x4 - x1; - float dy = y4 - y1; - float d2 = ((x2 - x4) * dy - (y2 - y4) * dx); - float d3 = ((x3 - x4) * dy - (y3 - y4) * dx); - d2 = (d2 >= 0) ? d2 : -d2; - d3 = (d3 >= 0) ? d3 : -d3; - if ((d2+d3) * (d2+d3) < tess_tol * (dx*dx + dy*dy)) - { - ImVec2 p_current(x4, y4); - ImVec2 p_line = ImLineClosestPoint(p_last, p_current, p); - float dist2 = ImLengthSqr(p - p_line); - if (dist2 < p_closest_dist2) - { - p_closest = p_line; - p_closest_dist2 = dist2; - } - p_last = p_current; - } - else if (level < 10) - { - float x12 = (x1+x2)*0.5f, y12 = (y1+y2)*0.5f; - float x23 = (x2+x3)*0.5f, y23 = (y2+y3)*0.5f; - float x34 = (x3+x4)*0.5f, y34 = (y3+y4)*0.5f; - float x123 = (x12+x23)*0.5f, y123 = (y12+y23)*0.5f; - float x234 = (x23+x34)*0.5f, y234 = (y23+y34)*0.5f; - float x1234 = (x123+x234)*0.5f, y1234 = (y123+y234)*0.5f; - BezierClosestPointCasteljauStep(p, p_closest, p_last, p_closest_dist2, x1, y1, x12, y12, x123, y123, x1234, y1234, tess_tol, level + 1); - BezierClosestPointCasteljauStep(p, p_closest, p_last, p_closest_dist2, x1234, y1234, x234, y234, x34, y34, x4, y4, tess_tol, level + 1); - } -} - -// tess_tol is generally the same value you would find in ImGui::GetStyle().CurveTessellationTol -// Because those ImXXX functions are lower-level than ImGui:: we cannot access this value automatically. -ImVec2 ImBezierClosestPointCasteljau(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& p, float tess_tol) -{ - IM_ASSERT(tess_tol > 0.0f); - ImVec2 p_last = p1; - ImVec2 p_closest; - float p_closest_dist2 = FLT_MAX; - BezierClosestPointCasteljauStep(p, p_closest, p_last, p_closest_dist2, p1.x, p1.y, p2.x, p2.y, p3.x, p3.y, p4.x, p4.y, tess_tol, 0); - return p_closest; -} - -ImVec2 ImLineClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& p) -{ - ImVec2 ap = p - a; - ImVec2 ab_dir = b - a; - float dot = ap.x * ab_dir.x + ap.y * ab_dir.y; - if (dot < 0.0f) - return a; - float ab_len_sqr = ab_dir.x * ab_dir.x + ab_dir.y * ab_dir.y; - if (dot > ab_len_sqr) - return b; - return a + ab_dir * dot / ab_len_sqr; -} - -bool ImTriangleContainsPoint(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p) -{ - bool b1 = ((p.x - b.x) * (a.y - b.y) - (p.y - b.y) * (a.x - b.x)) < 0.0f; - bool b2 = ((p.x - c.x) * (b.y - c.y) - (p.y - c.y) * (b.x - c.x)) < 0.0f; - bool b3 = ((p.x - a.x) * (c.y - a.y) - (p.y - a.y) * (c.x - a.x)) < 0.0f; - return ((b1 == b2) && (b2 == b3)); -} - -void ImTriangleBarycentricCoords(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p, float& out_u, float& out_v, float& out_w) -{ - ImVec2 v0 = b - a; - ImVec2 v1 = c - a; - ImVec2 v2 = p - a; - const float denom = v0.x * v1.y - v1.x * v0.y; - out_v = (v2.x * v1.y - v1.x * v2.y) / denom; - out_w = (v0.x * v2.y - v2.x * v0.y) / denom; - out_u = 1.0f - out_v - out_w; -} - -ImVec2 ImTriangleClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p) -{ - ImVec2 proj_ab = ImLineClosestPoint(a, b, p); - ImVec2 proj_bc = ImLineClosestPoint(b, c, p); - ImVec2 proj_ca = ImLineClosestPoint(c, a, p); - float dist2_ab = ImLengthSqr(p - proj_ab); - float dist2_bc = ImLengthSqr(p - proj_bc); - float dist2_ca = ImLengthSqr(p - proj_ca); - float m = ImMin(dist2_ab, ImMin(dist2_bc, dist2_ca)); - if (m == dist2_ab) - return proj_ab; - if (m == dist2_bc) - return proj_bc; - return proj_ca; -} - -//----------------------------------------------------------------------------- -// [SECTION] MISC HELPERS/UTILITIES (String, Format, Hash functions) -//----------------------------------------------------------------------------- - -// Consider using _stricmp/_strnicmp under Windows or strcasecmp/strncasecmp. We don't actually use either ImStricmp/ImStrnicmp in the codebase any more. -int ImStricmp(const char* str1, const char* str2) -{ - int d; - while ((d = toupper(*str2) - toupper(*str1)) == 0 && *str1) { str1++; str2++; } - return d; -} - -int ImStrnicmp(const char* str1, const char* str2, size_t count) -{ - int d = 0; - while (count > 0 && (d = toupper(*str2) - toupper(*str1)) == 0 && *str1) { str1++; str2++; count--; } - return d; -} - -void ImStrncpy(char* dst, const char* src, size_t count) -{ - if (count < 1) - return; - if (count > 1) - strncpy(dst, src, count - 1); - dst[count - 1] = 0; -} - -char* ImStrdup(const char* str) -{ - size_t len = strlen(str); - void* buf = IM_ALLOC(len + 1); - return (char*)memcpy(buf, (const void*)str, len + 1); -} - -char* ImStrdupcpy(char* dst, size_t* p_dst_size, const char* src) -{ - size_t dst_buf_size = p_dst_size ? *p_dst_size : strlen(dst) + 1; - size_t src_size = strlen(src) + 1; - if (dst_buf_size < src_size) - { - IM_FREE(dst); - dst = (char*)IM_ALLOC(src_size); - if (p_dst_size) - *p_dst_size = src_size; - } - return (char*)memcpy(dst, (const void*)src, src_size); -} - -const char* ImStrchrRange(const char* str, const char* str_end, char c) -{ - const char* p = (const char*)memchr(str, (int)c, str_end - str); - return p; -} - -int ImStrlenW(const ImWchar* str) -{ - //return (int)wcslen((const wchar_t*)str); // FIXME-OPT: Could use this when wchar_t are 16-bit - int n = 0; - while (*str++) n++; - return n; -} - -// Find end-of-line. Return pointer will point to either first \n, either str_end. -const char* ImStreolRange(const char* str, const char* str_end) -{ - const char* p = (const char*)memchr(str, '\n', str_end - str); - return p ? p : str_end; -} - -const ImWchar* ImStrbolW(const ImWchar* buf_mid_line, const ImWchar* buf_begin) // find beginning-of-line -{ - while (buf_mid_line > buf_begin && buf_mid_line[-1] != '\n') - buf_mid_line--; - return buf_mid_line; -} - -const char* ImStristr(const char* haystack, const char* haystack_end, const char* needle, const char* needle_end) -{ - if (!needle_end) - needle_end = needle + strlen(needle); - - const char un0 = (char)toupper(*needle); - while ((!haystack_end && *haystack) || (haystack_end && haystack < haystack_end)) - { - if (toupper(*haystack) == un0) - { - const char* b = needle + 1; - for (const char* a = haystack + 1; b < needle_end; a++, b++) - if (toupper(*a) != toupper(*b)) - break; - if (b == needle_end) - return haystack; - } - haystack++; - } - return NULL; -} - -// Trim str by offsetting contents when there's leading data + writing a \0 at the trailing position. We use this in situation where the cost is negligible. -void ImStrTrimBlanks(char* buf) -{ - char* p = buf; - while (p[0] == ' ' || p[0] == '\t') // Leading blanks - p++; - char* p_start = p; - while (*p != 0) // Find end of string - p++; - while (p > p_start && (p[-1] == ' ' || p[-1] == '\t')) // Trailing blanks - p--; - if (p_start != buf) // Copy memory if we had leading blanks - memmove(buf, p_start, p - p_start); - buf[p - p_start] = 0; // Zero terminate -} - -const char* ImStrSkipBlank(const char* str) -{ - while (str[0] == ' ' || str[0] == '\t') - str++; - return str; -} - -// A) MSVC version appears to return -1 on overflow, whereas glibc appears to return total count (which may be >= buf_size). -// Ideally we would test for only one of those limits at runtime depending on the behavior the vsnprintf(), but trying to deduct it at compile time sounds like a pandora can of worm. -// B) When buf==NULL vsnprintf() will return the output size. -#ifndef IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS - -// We support stb_sprintf which is much faster (see: https://github.com/nothings/stb/blob/master/stb_sprintf.h) -// You may set IMGUI_USE_STB_SPRINTF to use our default wrapper, or set IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS -// and setup the wrapper yourself. (FIXME-OPT: Some of our high-level operations such as ImGuiTextBuffer::appendfv() are -// designed using two-passes worst case, which probably could be improved using the stbsp_vsprintfcb() function.) -#ifdef IMGUI_USE_STB_SPRINTF -#define STB_SPRINTF_IMPLEMENTATION -#include "stb_sprintf.h" -#endif - -#if defined(_MSC_VER) && !defined(vsnprintf) -#define vsnprintf _vsnprintf -#endif - -int ImFormatString(char* buf, size_t buf_size, const char* fmt, ...) -{ - va_list args; - va_start(args, fmt); -#ifdef IMGUI_USE_STB_SPRINTF - int w = stbsp_vsnprintf(buf, (int)buf_size, fmt, args); -#else - int w = vsnprintf(buf, buf_size, fmt, args); -#endif - va_end(args); - if (buf == NULL) - return w; - if (w == -1 || w >= (int)buf_size) - w = (int)buf_size - 1; - buf[w] = 0; - return w; -} - -int ImFormatStringV(char* buf, size_t buf_size, const char* fmt, va_list args) -{ -#ifdef IMGUI_USE_STB_SPRINTF - int w = stbsp_vsnprintf(buf, (int)buf_size, fmt, args); -#else - int w = vsnprintf(buf, buf_size, fmt, args); -#endif - if (buf == NULL) - return w; - if (w == -1 || w >= (int)buf_size) - w = (int)buf_size - 1; - buf[w] = 0; - return w; -} -#endif // #ifdef IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS - -// CRC32 needs a 1KB lookup table (not cache friendly) -// Although the code to generate the table is simple and shorter than the table itself, using a const table allows us to easily: -// - avoid an unnecessary branch/memory tap, - keep the ImHashXXX functions usable by static constructors, - make it thread-safe. -static const ImU32 GCrc32LookupTable[256] = -{ - 0x00000000,0x77073096,0xEE0E612C,0x990951BA,0x076DC419,0x706AF48F,0xE963A535,0x9E6495A3,0x0EDB8832,0x79DCB8A4,0xE0D5E91E,0x97D2D988,0x09B64C2B,0x7EB17CBD,0xE7B82D07,0x90BF1D91, - 0x1DB71064,0x6AB020F2,0xF3B97148,0x84BE41DE,0x1ADAD47D,0x6DDDE4EB,0xF4D4B551,0x83D385C7,0x136C9856,0x646BA8C0,0xFD62F97A,0x8A65C9EC,0x14015C4F,0x63066CD9,0xFA0F3D63,0x8D080DF5, - 0x3B6E20C8,0x4C69105E,0xD56041E4,0xA2677172,0x3C03E4D1,0x4B04D447,0xD20D85FD,0xA50AB56B,0x35B5A8FA,0x42B2986C,0xDBBBC9D6,0xACBCF940,0x32D86CE3,0x45DF5C75,0xDCD60DCF,0xABD13D59, - 0x26D930AC,0x51DE003A,0xC8D75180,0xBFD06116,0x21B4F4B5,0x56B3C423,0xCFBA9599,0xB8BDA50F,0x2802B89E,0x5F058808,0xC60CD9B2,0xB10BE924,0x2F6F7C87,0x58684C11,0xC1611DAB,0xB6662D3D, - 0x76DC4190,0x01DB7106,0x98D220BC,0xEFD5102A,0x71B18589,0x06B6B51F,0x9FBFE4A5,0xE8B8D433,0x7807C9A2,0x0F00F934,0x9609A88E,0xE10E9818,0x7F6A0DBB,0x086D3D2D,0x91646C97,0xE6635C01, - 0x6B6B51F4,0x1C6C6162,0x856530D8,0xF262004E,0x6C0695ED,0x1B01A57B,0x8208F4C1,0xF50FC457,0x65B0D9C6,0x12B7E950,0x8BBEB8EA,0xFCB9887C,0x62DD1DDF,0x15DA2D49,0x8CD37CF3,0xFBD44C65, - 0x4DB26158,0x3AB551CE,0xA3BC0074,0xD4BB30E2,0x4ADFA541,0x3DD895D7,0xA4D1C46D,0xD3D6F4FB,0x4369E96A,0x346ED9FC,0xAD678846,0xDA60B8D0,0x44042D73,0x33031DE5,0xAA0A4C5F,0xDD0D7CC9, - 0x5005713C,0x270241AA,0xBE0B1010,0xC90C2086,0x5768B525,0x206F85B3,0xB966D409,0xCE61E49F,0x5EDEF90E,0x29D9C998,0xB0D09822,0xC7D7A8B4,0x59B33D17,0x2EB40D81,0xB7BD5C3B,0xC0BA6CAD, - 0xEDB88320,0x9ABFB3B6,0x03B6E20C,0x74B1D29A,0xEAD54739,0x9DD277AF,0x04DB2615,0x73DC1683,0xE3630B12,0x94643B84,0x0D6D6A3E,0x7A6A5AA8,0xE40ECF0B,0x9309FF9D,0x0A00AE27,0x7D079EB1, - 0xF00F9344,0x8708A3D2,0x1E01F268,0x6906C2FE,0xF762575D,0x806567CB,0x196C3671,0x6E6B06E7,0xFED41B76,0x89D32BE0,0x10DA7A5A,0x67DD4ACC,0xF9B9DF6F,0x8EBEEFF9,0x17B7BE43,0x60B08ED5, - 0xD6D6A3E8,0xA1D1937E,0x38D8C2C4,0x4FDFF252,0xD1BB67F1,0xA6BC5767,0x3FB506DD,0x48B2364B,0xD80D2BDA,0xAF0A1B4C,0x36034AF6,0x41047A60,0xDF60EFC3,0xA867DF55,0x316E8EEF,0x4669BE79, - 0xCB61B38C,0xBC66831A,0x256FD2A0,0x5268E236,0xCC0C7795,0xBB0B4703,0x220216B9,0x5505262F,0xC5BA3BBE,0xB2BD0B28,0x2BB45A92,0x5CB36A04,0xC2D7FFA7,0xB5D0CF31,0x2CD99E8B,0x5BDEAE1D, - 0x9B64C2B0,0xEC63F226,0x756AA39C,0x026D930A,0x9C0906A9,0xEB0E363F,0x72076785,0x05005713,0x95BF4A82,0xE2B87A14,0x7BB12BAE,0x0CB61B38,0x92D28E9B,0xE5D5BE0D,0x7CDCEFB7,0x0BDBDF21, - 0x86D3D2D4,0xF1D4E242,0x68DDB3F8,0x1FDA836E,0x81BE16CD,0xF6B9265B,0x6FB077E1,0x18B74777,0x88085AE6,0xFF0F6A70,0x66063BCA,0x11010B5C,0x8F659EFF,0xF862AE69,0x616BFFD3,0x166CCF45, - 0xA00AE278,0xD70DD2EE,0x4E048354,0x3903B3C2,0xA7672661,0xD06016F7,0x4969474D,0x3E6E77DB,0xAED16A4A,0xD9D65ADC,0x40DF0B66,0x37D83BF0,0xA9BCAE53,0xDEBB9EC5,0x47B2CF7F,0x30B5FFE9, - 0xBDBDF21C,0xCABAC28A,0x53B39330,0x24B4A3A6,0xBAD03605,0xCDD70693,0x54DE5729,0x23D967BF,0xB3667A2E,0xC4614AB8,0x5D681B02,0x2A6F2B94,0xB40BBE37,0xC30C8EA1,0x5A05DF1B,0x2D02EF8D, -}; - -// Known size hash -// It is ok to call ImHashData on a string with known length but the ### operator won't be supported. -// FIXME-OPT: Replace with e.g. FNV1a hash? CRC32 pretty much randomly access 1KB. Need to do proper measurements. -ImU32 ImHashData(const void* data_p, size_t data_size, ImU32 seed) -{ - ImU32 crc = ~seed; - const unsigned char* data = (const unsigned char*)data_p; - const ImU32* crc32_lut = GCrc32LookupTable; - while (data_size-- != 0) - crc = (crc >> 8) ^ crc32_lut[(crc & 0xFF) ^ *data++]; - return ~crc; -} - -// Zero-terminated string hash, with support for ### to reset back to seed value -// We support a syntax of "label###id" where only "###id" is included in the hash, and only "label" gets displayed. -// Because this syntax is rarely used we are optimizing for the common case. -// - If we reach ### in the string we discard the hash so far and reset to the seed. -// - We don't do 'current += 2; continue;' after handling ### to keep the code smaller/faster (measured ~10% diff in Debug build) -// FIXME-OPT: Replace with e.g. FNV1a hash? CRC32 pretty much randomly access 1KB. Need to do proper measurements. -ImU32 ImHashStr(const char* data_p, size_t data_size, ImU32 seed) -{ - seed = ~seed; - ImU32 crc = seed; - const unsigned char* data = (const unsigned char*)data_p; - const ImU32* crc32_lut = GCrc32LookupTable; - if (data_size != 0) - { - while (data_size-- != 0) - { - unsigned char c = *data++; - if (c == '#' && data_size >= 2 && data[0] == '#' && data[1] == '#') - crc = seed; - crc = (crc >> 8) ^ crc32_lut[(crc & 0xFF) ^ c]; - } - } - else - { - while (unsigned char c = *data++) - { - if (c == '#' && data[0] == '#' && data[1] == '#') - crc = seed; - crc = (crc >> 8) ^ crc32_lut[(crc & 0xFF) ^ c]; - } - } - return ~crc; -} - -//----------------------------------------------------------------------------- -// [SECTION] MISC HELPERS/UTILITIES (File functions) -//----------------------------------------------------------------------------- - -// Default file functions -#ifndef IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS - -ImFileHandle ImFileOpen(const char* filename, const char* mode) -{ -#if defined(_WIN32) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) && !defined(__CYGWIN__) && !defined(__GNUC__) - // We need a fopen() wrapper because MSVC/Windows fopen doesn't handle UTF-8 filenames. - // Previously we used ImTextCountCharsFromUtf8/ImTextStrFromUtf8 here but we now need to support ImWchar16 and ImWchar32! - const int filename_wsize = ::MultiByteToWideChar(CP_UTF8, 0, filename, -1, NULL, 0); - const int mode_wsize = ::MultiByteToWideChar(CP_UTF8, 0, mode, -1, NULL, 0); - ImVector buf; - buf.resize(filename_wsize + mode_wsize); - ::MultiByteToWideChar(CP_UTF8, 0, filename, -1, (wchar_t*)&buf[0], filename_wsize); - ::MultiByteToWideChar(CP_UTF8, 0, mode, -1, (wchar_t*)&buf[filename_wsize], mode_wsize); - return ::_wfopen((const wchar_t*)&buf[0], (const wchar_t*)&buf[filename_wsize]); -#else - return fopen(filename, mode); -#endif -} - -// We should in theory be using fseeko()/ftello() with off_t and _fseeki64()/_ftelli64() with __int64, waiting for the PR that does that in a very portable pre-C++11 zero-warnings way. -bool ImFileClose(ImFileHandle f) { return fclose(f) == 0; } -ImU64 ImFileGetSize(ImFileHandle f) { long off = 0, sz = 0; return ((off = ftell(f)) != -1 && !fseek(f, 0, SEEK_END) && (sz = ftell(f)) != -1 && !fseek(f, off, SEEK_SET)) ? (ImU64)sz : (ImU64)-1; } -ImU64 ImFileRead(void* data, ImU64 sz, ImU64 count, ImFileHandle f) { return fread(data, (size_t)sz, (size_t)count, f); } -ImU64 ImFileWrite(const void* data, ImU64 sz, ImU64 count, ImFileHandle f) { return fwrite(data, (size_t)sz, (size_t)count, f); } -#endif // #ifndef IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS - -// Helper: Load file content into memory -// Memory allocated with IM_ALLOC(), must be freed by user using IM_FREE() == ImGui::MemFree() -// This can't really be used with "rt" because fseek size won't match read size. -void* ImFileLoadToMemory(const char* filename, const char* mode, size_t* out_file_size, int padding_bytes) -{ - IM_ASSERT(filename && mode); - if (out_file_size) - *out_file_size = 0; - - ImFileHandle f; - if ((f = ImFileOpen(filename, mode)) == NULL) - return NULL; - - size_t file_size = (size_t)ImFileGetSize(f); - if (file_size == (size_t)-1) - { - ImFileClose(f); - return NULL; - } - - void* file_data = IM_ALLOC(file_size + padding_bytes); - if (file_data == NULL) - { - ImFileClose(f); - return NULL; - } - if (ImFileRead(file_data, 1, file_size, f) != file_size) - { - ImFileClose(f); - IM_FREE(file_data); - return NULL; - } - if (padding_bytes > 0) - memset((void*)(((char*)file_data) + file_size), 0, (size_t)padding_bytes); - - ImFileClose(f); - if (out_file_size) - *out_file_size = file_size; - - return file_data; -} - -//----------------------------------------------------------------------------- -// [SECTION] MISC HELPERS/UTILITIES (ImText* functions) -//----------------------------------------------------------------------------- - -// Convert UTF-8 to 32-bit character, process single character input. -// Based on stb_from_utf8() from github.com/nothings/stb/ -// We handle UTF-8 decoding error by skipping forward. -int ImTextCharFromUtf8(unsigned int* out_char, const char* in_text, const char* in_text_end) -{ - unsigned int c = (unsigned int)-1; - const unsigned char* str = (const unsigned char*)in_text; - if (!(*str & 0x80)) - { - c = (unsigned int)(*str++); - *out_char = c; - return 1; - } - if ((*str & 0xe0) == 0xc0) - { - *out_char = IM_UNICODE_CODEPOINT_INVALID; // will be invalid but not end of string - if (in_text_end && in_text_end - (const char*)str < 2) return 1; - if (*str < 0xc2) return 2; - c = (unsigned int)((*str++ & 0x1f) << 6); - if ((*str & 0xc0) != 0x80) return 2; - c += (*str++ & 0x3f); - *out_char = c; - return 2; - } - if ((*str & 0xf0) == 0xe0) - { - *out_char = IM_UNICODE_CODEPOINT_INVALID; // will be invalid but not end of string - if (in_text_end && in_text_end - (const char*)str < 3) return 1; - if (*str == 0xe0 && (str[1] < 0xa0 || str[1] > 0xbf)) return 3; - if (*str == 0xed && str[1] > 0x9f) return 3; // str[1] < 0x80 is checked below - c = (unsigned int)((*str++ & 0x0f) << 12); - if ((*str & 0xc0) != 0x80) return 3; - c += (unsigned int)((*str++ & 0x3f) << 6); - if ((*str & 0xc0) != 0x80) return 3; - c += (*str++ & 0x3f); - *out_char = c; - return 3; - } - if ((*str & 0xf8) == 0xf0) - { - *out_char = IM_UNICODE_CODEPOINT_INVALID; // will be invalid but not end of string - if (in_text_end && in_text_end - (const char*)str < 4) return 1; - if (*str > 0xf4) return 4; - if (*str == 0xf0 && (str[1] < 0x90 || str[1] > 0xbf)) return 4; - if (*str == 0xf4 && str[1] > 0x8f) return 4; // str[1] < 0x80 is checked below - c = (unsigned int)((*str++ & 0x07) << 18); - if ((*str & 0xc0) != 0x80) return 4; - c += (unsigned int)((*str++ & 0x3f) << 12); - if ((*str & 0xc0) != 0x80) return 4; - c += (unsigned int)((*str++ & 0x3f) << 6); - if ((*str & 0xc0) != 0x80) return 4; - c += (*str++ & 0x3f); - // utf-8 encodings of values used in surrogate pairs are invalid - if ((c & 0xFFFFF800) == 0xD800) return 4; - // If codepoint does not fit in ImWchar, use replacement character U+FFFD instead - if (c > IM_UNICODE_CODEPOINT_MAX) c = IM_UNICODE_CODEPOINT_INVALID; - *out_char = c; - return 4; - } - *out_char = 0; - return 0; -} - -int ImTextStrFromUtf8(ImWchar* buf, int buf_size, const char* in_text, const char* in_text_end, const char** in_text_remaining) -{ - ImWchar* buf_out = buf; - ImWchar* buf_end = buf + buf_size; - while (buf_out < buf_end-1 && (!in_text_end || in_text < in_text_end) && *in_text) - { - unsigned int c; - in_text += ImTextCharFromUtf8(&c, in_text, in_text_end); - if (c == 0) - break; - *buf_out++ = (ImWchar)c; - } - *buf_out = 0; - if (in_text_remaining) - *in_text_remaining = in_text; - return (int)(buf_out - buf); -} - -int ImTextCountCharsFromUtf8(const char* in_text, const char* in_text_end) -{ - int char_count = 0; - while ((!in_text_end || in_text < in_text_end) && *in_text) - { - unsigned int c; - in_text += ImTextCharFromUtf8(&c, in_text, in_text_end); - if (c == 0) - break; - char_count++; - } - return char_count; -} - -// Based on stb_to_utf8() from github.com/nothings/stb/ -static inline int ImTextCharToUtf8(char* buf, int buf_size, unsigned int c) -{ - if (c < 0x80) - { - buf[0] = (char)c; - return 1; - } - if (c < 0x800) - { - if (buf_size < 2) return 0; - buf[0] = (char)(0xc0 + (c >> 6)); - buf[1] = (char)(0x80 + (c & 0x3f)); - return 2; - } - if (c < 0x10000) - { - if (buf_size < 3) return 0; - buf[0] = (char)(0xe0 + (c >> 12)); - buf[1] = (char)(0x80 + ((c>> 6) & 0x3f)); - buf[2] = (char)(0x80 + ((c ) & 0x3f)); - return 3; - } - if (c <= 0x10FFFF) - { - if (buf_size < 4) return 0; - buf[0] = (char)(0xf0 + (c >> 18)); - buf[1] = (char)(0x80 + ((c >> 12) & 0x3f)); - buf[2] = (char)(0x80 + ((c >> 6) & 0x3f)); - buf[3] = (char)(0x80 + ((c ) & 0x3f)); - return 4; - } - // Invalid code point, the max unicode is 0x10FFFF - return 0; -} - -// Not optimal but we very rarely use this function. -int ImTextCountUtf8BytesFromChar(const char* in_text, const char* in_text_end) -{ - unsigned int dummy = 0; - return ImTextCharFromUtf8(&dummy, in_text, in_text_end); -} - -static inline int ImTextCountUtf8BytesFromChar(unsigned int c) -{ - if (c < 0x80) return 1; - if (c < 0x800) return 2; - if (c < 0x10000) return 3; - if (c <= 0x10FFFF) return 4; - return 3; -} - -int ImTextStrToUtf8(char* buf, int buf_size, const ImWchar* in_text, const ImWchar* in_text_end) -{ - char* buf_out = buf; - const char* buf_end = buf + buf_size; - while (buf_out < buf_end-1 && (!in_text_end || in_text < in_text_end) && *in_text) - { - unsigned int c = (unsigned int)(*in_text++); - if (c < 0x80) - *buf_out++ = (char)c; - else - buf_out += ImTextCharToUtf8(buf_out, (int)(buf_end-buf_out-1), c); - } - *buf_out = 0; - return (int)(buf_out - buf); -} - -int ImTextCountUtf8BytesFromStr(const ImWchar* in_text, const ImWchar* in_text_end) -{ - int bytes_count = 0; - while ((!in_text_end || in_text < in_text_end) && *in_text) - { - unsigned int c = (unsigned int)(*in_text++); - if (c < 0x80) - bytes_count++; - else - bytes_count += ImTextCountUtf8BytesFromChar(c); - } - return bytes_count; -} - -//----------------------------------------------------------------------------- -// [SECTION] MISC HELPERS/UTILITIES (Color functions) -// Note: The Convert functions are early design which are not consistent with other API. -//----------------------------------------------------------------------------- - -IMGUI_API ImU32 ImAlphaBlendColors(ImU32 col_a, ImU32 col_b) -{ - float t = ((col_b >> IM_COL32_A_SHIFT) & 0xFF) / 255.f; - int r = ImLerp((int)(col_a >> IM_COL32_R_SHIFT) & 0xFF, (int)(col_b >> IM_COL32_R_SHIFT) & 0xFF, t); - int g = ImLerp((int)(col_a >> IM_COL32_G_SHIFT) & 0xFF, (int)(col_b >> IM_COL32_G_SHIFT) & 0xFF, t); - int b = ImLerp((int)(col_a >> IM_COL32_B_SHIFT) & 0xFF, (int)(col_b >> IM_COL32_B_SHIFT) & 0xFF, t); - return IM_COL32(r, g, b, 0xFF); -} - -ImVec4 ImGui::ColorConvertU32ToFloat4(ImU32 in) -{ - float s = 1.0f/255.0f; - return ImVec4( - ((in >> IM_COL32_R_SHIFT) & 0xFF) * s, - ((in >> IM_COL32_G_SHIFT) & 0xFF) * s, - ((in >> IM_COL32_B_SHIFT) & 0xFF) * s, - ((in >> IM_COL32_A_SHIFT) & 0xFF) * s); -} - -ImU32 ImGui::ColorConvertFloat4ToU32(const ImVec4& in) -{ - ImU32 out; - out = ((ImU32)IM_F32_TO_INT8_SAT(in.x)) << IM_COL32_R_SHIFT; - out |= ((ImU32)IM_F32_TO_INT8_SAT(in.y)) << IM_COL32_G_SHIFT; - out |= ((ImU32)IM_F32_TO_INT8_SAT(in.z)) << IM_COL32_B_SHIFT; - out |= ((ImU32)IM_F32_TO_INT8_SAT(in.w)) << IM_COL32_A_SHIFT; - return out; -} - -// Convert rgb floats ([0-1],[0-1],[0-1]) to hsv floats ([0-1],[0-1],[0-1]), from Foley & van Dam p592 -// Optimized http://lolengine.net/blog/2013/01/13/fast-rgb-to-hsv -void ImGui::ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v) -{ - float K = 0.f; - if (g < b) - { - ImSwap(g, b); - K = -1.f; - } - if (r < g) - { - ImSwap(r, g); - K = -2.f / 6.f - K; - } - - const float chroma = r - (g < b ? g : b); - out_h = ImFabs(K + (g - b) / (6.f * chroma + 1e-20f)); - out_s = chroma / (r + 1e-20f); - out_v = r; -} - -// Convert hsv floats ([0-1],[0-1],[0-1]) to rgb floats ([0-1],[0-1],[0-1]), from Foley & van Dam p593 -// also http://en.wikipedia.org/wiki/HSL_and_HSV -void ImGui::ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b) -{ - if (s == 0.0f) - { - // gray - out_r = out_g = out_b = v; - return; - } - - h = ImFmod(h, 1.0f) / (60.0f/360.0f); - int i = (int)h; - float f = h - (float)i; - float p = v * (1.0f - s); - float q = v * (1.0f - s * f); - float t = v * (1.0f - s * (1.0f - f)); - - switch (i) - { - case 0: out_r = v; out_g = t; out_b = p; break; - case 1: out_r = q; out_g = v; out_b = p; break; - case 2: out_r = p; out_g = v; out_b = t; break; - case 3: out_r = p; out_g = q; out_b = v; break; - case 4: out_r = t; out_g = p; out_b = v; break; - case 5: default: out_r = v; out_g = p; out_b = q; break; - } -} - -//----------------------------------------------------------------------------- -// [SECTION] ImGuiStorage -// Helper: Key->value storage -//----------------------------------------------------------------------------- - -// std::lower_bound but without the bullshit -static ImGuiStorage::ImGuiStoragePair* LowerBound(ImVector& data, ImGuiID key) -{ - ImGuiStorage::ImGuiStoragePair* first = data.Data; - ImGuiStorage::ImGuiStoragePair* last = data.Data + data.Size; - size_t count = (size_t)(last - first); - while (count > 0) - { - size_t count2 = count >> 1; - ImGuiStorage::ImGuiStoragePair* mid = first + count2; - if (mid->key < key) - { - first = ++mid; - count -= count2 + 1; - } - else - { - count = count2; - } - } - return first; -} - -// For quicker full rebuild of a storage (instead of an incremental one), you may add all your contents and then sort once. -void ImGuiStorage::BuildSortByKey() -{ - struct StaticFunc - { - static int IMGUI_CDECL PairCompareByID(const void* lhs, const void* rhs) - { - // We can't just do a subtraction because qsort uses signed integers and subtracting our ID doesn't play well with that. - if (((const ImGuiStoragePair*)lhs)->key > ((const ImGuiStoragePair*)rhs)->key) return +1; - if (((const ImGuiStoragePair*)lhs)->key < ((const ImGuiStoragePair*)rhs)->key) return -1; - return 0; - } - }; - if (Data.Size > 1) - ImQsort(Data.Data, (size_t)Data.Size, sizeof(ImGuiStoragePair), StaticFunc::PairCompareByID); -} - -int ImGuiStorage::GetInt(ImGuiID key, int default_val) const -{ - ImGuiStoragePair* it = LowerBound(const_cast&>(Data), key); - if (it == Data.end() || it->key != key) - return default_val; - return it->val_i; -} - -bool ImGuiStorage::GetBool(ImGuiID key, bool default_val) const -{ - return GetInt(key, default_val ? 1 : 0) != 0; -} - -float ImGuiStorage::GetFloat(ImGuiID key, float default_val) const -{ - ImGuiStoragePair* it = LowerBound(const_cast&>(Data), key); - if (it == Data.end() || it->key != key) - return default_val; - return it->val_f; -} - -void* ImGuiStorage::GetVoidPtr(ImGuiID key) const -{ - ImGuiStoragePair* it = LowerBound(const_cast&>(Data), key); - if (it == Data.end() || it->key != key) - return NULL; - return it->val_p; -} - -// References are only valid until a new value is added to the storage. Calling a Set***() function or a Get***Ref() function invalidates the pointer. -int* ImGuiStorage::GetIntRef(ImGuiID key, int default_val) -{ - ImGuiStoragePair* it = LowerBound(Data, key); - if (it == Data.end() || it->key != key) - it = Data.insert(it, ImGuiStoragePair(key, default_val)); - return &it->val_i; -} - -bool* ImGuiStorage::GetBoolRef(ImGuiID key, bool default_val) -{ - return (bool*)GetIntRef(key, default_val ? 1 : 0); -} - -float* ImGuiStorage::GetFloatRef(ImGuiID key, float default_val) -{ - ImGuiStoragePair* it = LowerBound(Data, key); - if (it == Data.end() || it->key != key) - it = Data.insert(it, ImGuiStoragePair(key, default_val)); - return &it->val_f; -} - -void** ImGuiStorage::GetVoidPtrRef(ImGuiID key, void* default_val) -{ - ImGuiStoragePair* it = LowerBound(Data, key); - if (it == Data.end() || it->key != key) - it = Data.insert(it, ImGuiStoragePair(key, default_val)); - return &it->val_p; -} - -// FIXME-OPT: Need a way to reuse the result of lower_bound when doing GetInt()/SetInt() - not too bad because it only happens on explicit interaction (maximum one a frame) -void ImGuiStorage::SetInt(ImGuiID key, int val) -{ - ImGuiStoragePair* it = LowerBound(Data, key); - if (it == Data.end() || it->key != key) - { - Data.insert(it, ImGuiStoragePair(key, val)); - return; - } - it->val_i = val; -} - -void ImGuiStorage::SetBool(ImGuiID key, bool val) -{ - SetInt(key, val ? 1 : 0); -} - -void ImGuiStorage::SetFloat(ImGuiID key, float val) -{ - ImGuiStoragePair* it = LowerBound(Data, key); - if (it == Data.end() || it->key != key) - { - Data.insert(it, ImGuiStoragePair(key, val)); - return; - } - it->val_f = val; -} - -void ImGuiStorage::SetVoidPtr(ImGuiID key, void* val) -{ - ImGuiStoragePair* it = LowerBound(Data, key); - if (it == Data.end() || it->key != key) - { - Data.insert(it, ImGuiStoragePair(key, val)); - return; - } - it->val_p = val; -} - -void ImGuiStorage::SetAllInt(int v) -{ - for (int i = 0; i < Data.Size; i++) - Data[i].val_i = v; -} - -//----------------------------------------------------------------------------- -// [SECTION] ImGuiTextFilter -//----------------------------------------------------------------------------- - -// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]" -ImGuiTextFilter::ImGuiTextFilter(const char* default_filter) -{ - if (default_filter) - { - ImStrncpy(InputBuf, default_filter, IM_ARRAYSIZE(InputBuf)); - Build(); - } - else - { - InputBuf[0] = 0; - CountGrep = 0; - } -} - -bool ImGuiTextFilter::Draw(const char* label, float width) -{ - if (width != 0.0f) - ImGui::SetNextItemWidth(width); - bool value_changed = ImGui::InputText(label, InputBuf, IM_ARRAYSIZE(InputBuf)); - if (value_changed) - Build(); - return value_changed; -} - -void ImGuiTextFilter::ImGuiTextRange::split(char separator, ImVector* out) const -{ - out->resize(0); - const char* wb = b; - const char* we = wb; - while (we < e) - { - if (*we == separator) - { - out->push_back(ImGuiTextRange(wb, we)); - wb = we + 1; - } - we++; - } - if (wb != we) - out->push_back(ImGuiTextRange(wb, we)); -} - -void ImGuiTextFilter::Build() -{ - Filters.resize(0); - ImGuiTextRange input_range(InputBuf, InputBuf+strlen(InputBuf)); - input_range.split(',', &Filters); - - CountGrep = 0; - for (int i = 0; i != Filters.Size; i++) - { - ImGuiTextRange& f = Filters[i]; - while (f.b < f.e && ImCharIsBlankA(f.b[0])) - f.b++; - while (f.e > f.b && ImCharIsBlankA(f.e[-1])) - f.e--; - if (f.empty()) - continue; - if (Filters[i].b[0] != '-') - CountGrep += 1; - } -} - -bool ImGuiTextFilter::PassFilter(const char* text, const char* text_end) const -{ - if (Filters.empty()) - return true; - - if (text == NULL) - text = ""; - - for (int i = 0; i != Filters.Size; i++) - { - const ImGuiTextRange& f = Filters[i]; - if (f.empty()) - continue; - if (f.b[0] == '-') - { - // Subtract - if (ImStristr(text, text_end, f.b + 1, f.e) != NULL) - return false; - } - else - { - // Grep - if (ImStristr(text, text_end, f.b, f.e) != NULL) - return true; - } - } - - // Implicit * grep - if (CountGrep == 0) - return true; - - return false; -} - -//----------------------------------------------------------------------------- -// [SECTION] ImGuiTextBuffer -//----------------------------------------------------------------------------- - -// On some platform vsnprintf() takes va_list by reference and modifies it. -// va_copy is the 'correct' way to copy a va_list but Visual Studio prior to 2013 doesn't have it. -#ifndef va_copy -#if defined(__GNUC__) || defined(__clang__) -#define va_copy(dest, src) __builtin_va_copy(dest, src) -#else -#define va_copy(dest, src) (dest = src) -#endif -#endif - -char ImGuiTextBuffer::EmptyString[1] = { 0 }; - -void ImGuiTextBuffer::append(const char* str, const char* str_end) -{ - int len = str_end ? (int)(str_end - str) : (int)strlen(str); - - // Add zero-terminator the first time - const int write_off = (Buf.Size != 0) ? Buf.Size : 1; - const int needed_sz = write_off + len; - if (write_off + len >= Buf.Capacity) - { - int new_capacity = Buf.Capacity * 2; - Buf.reserve(needed_sz > new_capacity ? needed_sz : new_capacity); - } - - Buf.resize(needed_sz); - memcpy(&Buf[write_off - 1], str, (size_t)len); - Buf[write_off - 1 + len] = 0; -} - -void ImGuiTextBuffer::appendf(const char* fmt, ...) -{ - va_list args; - va_start(args, fmt); - appendfv(fmt, args); - va_end(args); -} - -// Helper: Text buffer for logging/accumulating text -void ImGuiTextBuffer::appendfv(const char* fmt, va_list args) -{ - va_list args_copy; - va_copy(args_copy, args); - - int len = ImFormatStringV(NULL, 0, fmt, args); // FIXME-OPT: could do a first pass write attempt, likely successful on first pass. - if (len <= 0) - { - va_end(args_copy); - return; - } - - // Add zero-terminator the first time - const int write_off = (Buf.Size != 0) ? Buf.Size : 1; - const int needed_sz = write_off + len; - if (write_off + len >= Buf.Capacity) - { - int new_capacity = Buf.Capacity * 2; - Buf.reserve(needed_sz > new_capacity ? needed_sz : new_capacity); - } - - Buf.resize(needed_sz); - ImFormatStringV(&Buf[write_off - 1], (size_t)len + 1, fmt, args_copy); - va_end(args_copy); -} - -//----------------------------------------------------------------------------- -// [SECTION] ImGuiListClipper -// This is currently not as flexible/powerful as it should be and really confusing/spaghetti, mostly because we changed -// the API mid-way through development and support two ways to using the clipper, needs some rework (see TODO) -//----------------------------------------------------------------------------- - -// Helper to calculate coarse clipping of large list of evenly sized items. -// NB: Prefer using the ImGuiListClipper higher-level helper if you can! Read comments and instructions there on how those use this sort of pattern. -// NB: 'items_count' is only used to clamp the result, if you don't know your count you can use INT_MAX -void ImGui::CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - if (g.LogEnabled) - { - // If logging is active, do not perform any clipping - *out_items_display_start = 0; - *out_items_display_end = items_count; - return; - } - if (window->SkipItems) - { - *out_items_display_start = *out_items_display_end = 0; - return; - } - - // We create the union of the ClipRect and the NavScoringRect which at worst should be 1 page away from ClipRect - ImRect unclipped_rect = window->ClipRect; - if (g.NavMoveRequest) - unclipped_rect.Add(g.NavScoringRectScreen); - - const ImVec2 pos = window->DC.CursorPos; - int start = (int)((unclipped_rect.Min.y - pos.y) / items_height); - int end = (int)((unclipped_rect.Max.y - pos.y) / items_height); - - // When performing a navigation request, ensure we have one item extra in the direction we are moving to - if (g.NavMoveRequest && g.NavMoveClipDir == ImGuiDir_Up) - start--; - if (g.NavMoveRequest && g.NavMoveClipDir == ImGuiDir_Down) - end++; - - start = ImClamp(start, 0, items_count); - end = ImClamp(end + 1, start, items_count); - *out_items_display_start = start; - *out_items_display_end = end; -} - -static void SetCursorPosYAndSetupDummyPrevLine(float pos_y, float line_height) -{ - // Set cursor position and a few other things so that SetScrollHereY() and Columns() can work when seeking cursor. - // FIXME: It is problematic that we have to do that here, because custom/equivalent end-user code would stumble on the same issue. - // The clipper should probably have a 4th step to display the last item in a regular manner. - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - window->DC.CursorPos.y = pos_y; - window->DC.CursorMaxPos.y = ImMax(window->DC.CursorMaxPos.y, pos_y); - window->DC.CursorPosPrevLine.y = window->DC.CursorPos.y - line_height; // Setting those fields so that SetScrollHereY() can properly function after the end of our clipper usage. - window->DC.PrevLineSize.y = (line_height - g.Style.ItemSpacing.y); // If we end up needing more accurate data (to e.g. use SameLine) we may as well make the clipper have a fourth step to let user process and display the last item in their list. - if (ImGuiColumns* columns = window->DC.CurrentColumns) - columns->LineMinY = window->DC.CursorPos.y; // Setting this so that cell Y position are set properly -} - -// Use case A: Begin() called from constructor with items_height<0, then called again from Sync() in StepNo 1 -// Use case B: Begin() called from constructor with items_height>0 -// FIXME-LEGACY: Ideally we should remove the Begin/End functions but they are part of the legacy API we still support. This is why some of the code in Step() calling Begin() and reassign some fields, spaghetti style. -void ImGuiListClipper::Begin(int count, float items_height) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - - StartPosY = window->DC.CursorPos.y; - ItemsHeight = items_height; - ItemsCount = count; - StepNo = 0; - DisplayEnd = DisplayStart = -1; - if (ItemsHeight > 0.0f) - { - ImGui::CalcListClipping(ItemsCount, ItemsHeight, &DisplayStart, &DisplayEnd); // calculate how many to clip/display - if (DisplayStart > 0) - SetCursorPosYAndSetupDummyPrevLine(StartPosY + DisplayStart * ItemsHeight, ItemsHeight); // advance cursor - StepNo = 2; - } -} - -void ImGuiListClipper::End() -{ - if (ItemsCount < 0) - return; - // In theory here we should assert that ImGui::GetCursorPosY() == StartPosY + DisplayEnd * ItemsHeight, but it feels saner to just seek at the end and not assert/crash the user. - if (ItemsCount < INT_MAX) - SetCursorPosYAndSetupDummyPrevLine(StartPosY + ItemsCount * ItemsHeight, ItemsHeight); // advance cursor - ItemsCount = -1; - StepNo = 3; -} - -bool ImGuiListClipper::Step() -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - - if (ItemsCount == 0 || window->SkipItems) - { - ItemsCount = -1; - return false; - } - if (StepNo == 0) // Step 0: the clipper let you process the first element, regardless of it being visible or not, so we can measure the element height. - { - DisplayStart = 0; - DisplayEnd = 1; - StartPosY = window->DC.CursorPos.y; - StepNo = 1; - return true; - } - if (StepNo == 1) // Step 1: the clipper infer height from first element, calculate the actual range of elements to display, and position the cursor before the first element. - { - if (ItemsCount == 1) { ItemsCount = -1; return false; } - float items_height = window->DC.CursorPos.y - StartPosY; - IM_ASSERT(items_height > 0.0f); // If this triggers, it means Item 0 hasn't moved the cursor vertically - Begin(ItemsCount - 1, items_height); - DisplayStart++; - DisplayEnd++; - StepNo = 3; - return true; - } - if (StepNo == 2) // Step 2: dummy step only required if an explicit items_height was passed to constructor or Begin() and user still call Step(). Does nothing and switch to Step 3. - { - IM_ASSERT(DisplayStart >= 0 && DisplayEnd >= 0); - StepNo = 3; - return true; - } - if (StepNo == 3) // Step 3: the clipper validate that we have reached the expected Y position (corresponding to element DisplayEnd), advance the cursor to the end of the list and then returns 'false' to end the loop. - End(); - return false; -} - -//----------------------------------------------------------------------------- -// [SECTION] STYLING -//----------------------------------------------------------------------------- - -ImGuiStyle& ImGui::GetStyle() -{ - IM_ASSERT(GImGui != NULL && "No current context. Did you call ImGui::CreateContext() and ImGui::SetCurrentContext() ?"); - return GImGui->Style; -} - -ImU32 ImGui::GetColorU32(ImGuiCol idx, float alpha_mul) -{ - ImGuiStyle& style = GImGui->Style; - ImVec4 c = style.Colors[idx]; - c.w *= style.Alpha * alpha_mul; - return ColorConvertFloat4ToU32(c); -} - -ImU32 ImGui::GetColorU32(const ImVec4& col) -{ - ImGuiStyle& style = GImGui->Style; - ImVec4 c = col; - c.w *= style.Alpha; - return ColorConvertFloat4ToU32(c); -} - -const ImVec4& ImGui::GetStyleColorVec4(ImGuiCol idx) -{ - ImGuiStyle& style = GImGui->Style; - return style.Colors[idx]; -} - -ImU32 ImGui::GetColorU32(ImU32 col) -{ - ImGuiStyle& style = GImGui->Style; - if (style.Alpha >= 1.0f) - return col; - ImU32 a = (col & IM_COL32_A_MASK) >> IM_COL32_A_SHIFT; - a = (ImU32)(a * style.Alpha); // We don't need to clamp 0..255 because Style.Alpha is in 0..1 range. - return (col & ~IM_COL32_A_MASK) | (a << IM_COL32_A_SHIFT); -} - -// FIXME: This may incur a round-trip (if the end user got their data from a float4) but eventually we aim to store the in-flight colors as ImU32 -void ImGui::PushStyleColor(ImGuiCol idx, ImU32 col) -{ - ImGuiContext& g = *GImGui; - ImGuiColorMod backup; - backup.Col = idx; - backup.BackupValue = g.Style.Colors[idx]; - g.ColorModifiers.push_back(backup); - g.Style.Colors[idx] = ColorConvertU32ToFloat4(col); -} - -void ImGui::PushStyleColor(ImGuiCol idx, const ImVec4& col) -{ - ImGuiContext& g = *GImGui; - ImGuiColorMod backup; - backup.Col = idx; - backup.BackupValue = g.Style.Colors[idx]; - g.ColorModifiers.push_back(backup); - g.Style.Colors[idx] = col; -} - -void ImGui::PopStyleColor(int count) -{ - ImGuiContext& g = *GImGui; - while (count > 0) - { - ImGuiColorMod& backup = g.ColorModifiers.back(); - g.Style.Colors[backup.Col] = backup.BackupValue; - g.ColorModifiers.pop_back(); - count--; - } -} - -struct ImGuiStyleVarInfo -{ - ImGuiDataType Type; - ImU32 Count; - ImU32 Offset; - void* GetVarPtr(ImGuiStyle* style) const { return (void*)((unsigned char*)style + Offset); } -}; - -static const ImGuiStyleVarInfo GStyleVarInfo[] = -{ - { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, Alpha) }, // ImGuiStyleVar_Alpha - { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowPadding) }, // ImGuiStyleVar_WindowPadding - { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowRounding) }, // ImGuiStyleVar_WindowRounding - { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowBorderSize) }, // ImGuiStyleVar_WindowBorderSize - { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowMinSize) }, // ImGuiStyleVar_WindowMinSize - { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowTitleAlign) }, // ImGuiStyleVar_WindowTitleAlign - { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ChildRounding) }, // ImGuiStyleVar_ChildRounding - { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ChildBorderSize) }, // ImGuiStyleVar_ChildBorderSize - { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, PopupRounding) }, // ImGuiStyleVar_PopupRounding - { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, PopupBorderSize) }, // ImGuiStyleVar_PopupBorderSize - { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, FramePadding) }, // ImGuiStyleVar_FramePadding - { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, FrameRounding) }, // ImGuiStyleVar_FrameRounding - { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, FrameBorderSize) }, // ImGuiStyleVar_FrameBorderSize - { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, ItemSpacing) }, // ImGuiStyleVar_ItemSpacing - { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, ItemInnerSpacing) }, // ImGuiStyleVar_ItemInnerSpacing - { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, IndentSpacing) }, // ImGuiStyleVar_IndentSpacing - { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ScrollbarSize) }, // ImGuiStyleVar_ScrollbarSize - { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ScrollbarRounding) }, // ImGuiStyleVar_ScrollbarRounding - { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, GrabMinSize) }, // ImGuiStyleVar_GrabMinSize - { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, GrabRounding) }, // ImGuiStyleVar_GrabRounding - { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, TabRounding) }, // ImGuiStyleVar_TabRounding - { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, ButtonTextAlign) }, // ImGuiStyleVar_ButtonTextAlign - { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, SelectableTextAlign) }, // ImGuiStyleVar_SelectableTextAlign -}; - -static const ImGuiStyleVarInfo* GetStyleVarInfo(ImGuiStyleVar idx) -{ - IM_ASSERT(idx >= 0 && idx < ImGuiStyleVar_COUNT); - IM_ASSERT(IM_ARRAYSIZE(GStyleVarInfo) == ImGuiStyleVar_COUNT); - return &GStyleVarInfo[idx]; -} - -void ImGui::PushStyleVar(ImGuiStyleVar idx, float val) -{ - const ImGuiStyleVarInfo* var_info = GetStyleVarInfo(idx); - if (var_info->Type == ImGuiDataType_Float && var_info->Count == 1) - { - ImGuiContext& g = *GImGui; - float* pvar = (float*)var_info->GetVarPtr(&g.Style); - g.StyleModifiers.push_back(ImGuiStyleMod(idx, *pvar)); - *pvar = val; - return; - } - IM_ASSERT(0 && "Called PushStyleVar() float variant but variable is not a float!"); -} - -void ImGui::PushStyleVar(ImGuiStyleVar idx, const ImVec2& val) -{ - const ImGuiStyleVarInfo* var_info = GetStyleVarInfo(idx); - if (var_info->Type == ImGuiDataType_Float && var_info->Count == 2) - { - ImGuiContext& g = *GImGui; - ImVec2* pvar = (ImVec2*)var_info->GetVarPtr(&g.Style); - g.StyleModifiers.push_back(ImGuiStyleMod(idx, *pvar)); - *pvar = val; - return; - } - IM_ASSERT(0 && "Called PushStyleVar() ImVec2 variant but variable is not a ImVec2!"); -} - -void ImGui::PopStyleVar(int count) -{ - ImGuiContext& g = *GImGui; - while (count > 0) - { - // We avoid a generic memcpy(data, &backup.Backup.., GDataTypeSize[info->Type] * info->Count), the overhead in Debug is not worth it. - ImGuiStyleMod& backup = g.StyleModifiers.back(); - const ImGuiStyleVarInfo* info = GetStyleVarInfo(backup.VarIdx); - void* data = info->GetVarPtr(&g.Style); - if (info->Type == ImGuiDataType_Float && info->Count == 1) { ((float*)data)[0] = backup.BackupFloat[0]; } - else if (info->Type == ImGuiDataType_Float && info->Count == 2) { ((float*)data)[0] = backup.BackupFloat[0]; ((float*)data)[1] = backup.BackupFloat[1]; } - g.StyleModifiers.pop_back(); - count--; - } -} - -const char* ImGui::GetStyleColorName(ImGuiCol idx) -{ - // Create switch-case from enum with regexp: ImGuiCol_{.*}, --> case ImGuiCol_\1: return "\1"; - switch (idx) - { - case ImGuiCol_Text: return "Text"; - case ImGuiCol_TextDisabled: return "TextDisabled"; - case ImGuiCol_WindowBg: return "WindowBg"; - case ImGuiCol_ChildBg: return "ChildBg"; - case ImGuiCol_PopupBg: return "PopupBg"; - case ImGuiCol_Border: return "Border"; - case ImGuiCol_BorderShadow: return "BorderShadow"; - case ImGuiCol_FrameBg: return "FrameBg"; - case ImGuiCol_FrameBgHovered: return "FrameBgHovered"; - case ImGuiCol_FrameBgActive: return "FrameBgActive"; - case ImGuiCol_TitleBg: return "TitleBg"; - case ImGuiCol_TitleBgActive: return "TitleBgActive"; - case ImGuiCol_TitleBgCollapsed: return "TitleBgCollapsed"; - case ImGuiCol_MenuBarBg: return "MenuBarBg"; - case ImGuiCol_ScrollbarBg: return "ScrollbarBg"; - case ImGuiCol_ScrollbarGrab: return "ScrollbarGrab"; - case ImGuiCol_ScrollbarGrabHovered: return "ScrollbarGrabHovered"; - case ImGuiCol_ScrollbarGrabActive: return "ScrollbarGrabActive"; - case ImGuiCol_CheckMark: return "CheckMark"; - case ImGuiCol_SliderGrab: return "SliderGrab"; - case ImGuiCol_SliderGrabActive: return "SliderGrabActive"; - case ImGuiCol_Button: return "Button"; - case ImGuiCol_ButtonHovered: return "ButtonHovered"; - case ImGuiCol_ButtonActive: return "ButtonActive"; - case ImGuiCol_Header: return "Header"; - case ImGuiCol_HeaderHovered: return "HeaderHovered"; - case ImGuiCol_HeaderActive: return "HeaderActive"; - case ImGuiCol_Separator: return "Separator"; - case ImGuiCol_SeparatorHovered: return "SeparatorHovered"; - case ImGuiCol_SeparatorActive: return "SeparatorActive"; - case ImGuiCol_ResizeGrip: return "ResizeGrip"; - case ImGuiCol_ResizeGripHovered: return "ResizeGripHovered"; - case ImGuiCol_ResizeGripActive: return "ResizeGripActive"; - case ImGuiCol_Tab: return "Tab"; - case ImGuiCol_TabHovered: return "TabHovered"; - case ImGuiCol_TabActive: return "TabActive"; - case ImGuiCol_TabUnfocused: return "TabUnfocused"; - case ImGuiCol_TabUnfocusedActive: return "TabUnfocusedActive"; - case ImGuiCol_PlotLines: return "PlotLines"; - case ImGuiCol_PlotLinesHovered: return "PlotLinesHovered"; - case ImGuiCol_PlotHistogram: return "PlotHistogram"; - case ImGuiCol_PlotHistogramHovered: return "PlotHistogramHovered"; - case ImGuiCol_TextSelectedBg: return "TextSelectedBg"; - case ImGuiCol_DragDropTarget: return "DragDropTarget"; - case ImGuiCol_NavHighlight: return "NavHighlight"; - case ImGuiCol_NavWindowingHighlight: return "NavWindowingHighlight"; - case ImGuiCol_NavWindowingDimBg: return "NavWindowingDimBg"; - case ImGuiCol_ModalWindowDimBg: return "ModalWindowDimBg"; - } - IM_ASSERT(0); - return "Unknown"; -} - -//----------------------------------------------------------------------------- -// [SECTION] RENDER HELPERS -// Some of those (internal) functions are currently quite a legacy mess - their signature and behavior will change, -// we need a nicer separation between low-level functions and high-level functions relying on the ImGui context. -// Also see imgui_draw.cpp for some more which have been reworked to not rely on ImGui:: context. -//----------------------------------------------------------------------------- - -const char* ImGui::FindRenderedTextEnd(const char* text, const char* text_end) -{ - const char* text_display_end = text; - if (!text_end) - text_end = (const char*)-1; - - while (text_display_end < text_end && *text_display_end != '\0' && (text_display_end[0] != '#' || text_display_end[1] != '#')) - text_display_end++; - return text_display_end; -} - -// Internal ImGui functions to render text -// RenderText***() functions calls ImDrawList::AddText() calls ImBitmapFont::RenderText() -void ImGui::RenderText(ImVec2 pos, const char* text, const char* text_end, bool hide_text_after_hash) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - - // Hide anything after a '##' string - const char* text_display_end; - if (hide_text_after_hash) - { - text_display_end = FindRenderedTextEnd(text, text_end); - } - else - { - if (!text_end) - text_end = text + strlen(text); // FIXME-OPT - text_display_end = text_end; - } - - if (text != text_display_end) - { - window->DrawList->AddText(g.Font, g.FontSize, pos, GetColorU32(ImGuiCol_Text), text, text_display_end); - if (g.LogEnabled) - LogRenderedText(&pos, text, text_display_end); - } -} - -void ImGui::RenderTextWrapped(ImVec2 pos, const char* text, const char* text_end, float wrap_width) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - - if (!text_end) - text_end = text + strlen(text); // FIXME-OPT - - if (text != text_end) - { - window->DrawList->AddText(g.Font, g.FontSize, pos, GetColorU32(ImGuiCol_Text), text, text_end, wrap_width); - if (g.LogEnabled) - LogRenderedText(&pos, text, text_end); - } -} - -// Default clip_rect uses (pos_min,pos_max) -// Handle clipping on CPU immediately (vs typically let the GPU clip the triangles that are overlapping the clipping rectangle edges) -void ImGui::RenderTextClippedEx(ImDrawList* draw_list, const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_display_end, const ImVec2* text_size_if_known, const ImVec2& align, const ImRect* clip_rect) -{ - // Perform CPU side clipping for single clipped element to avoid using scissor state - ImVec2 pos = pos_min; - const ImVec2 text_size = text_size_if_known ? *text_size_if_known : CalcTextSize(text, text_display_end, false, 0.0f); - - const ImVec2* clip_min = clip_rect ? &clip_rect->Min : &pos_min; - const ImVec2* clip_max = clip_rect ? &clip_rect->Max : &pos_max; - bool need_clipping = (pos.x + text_size.x >= clip_max->x) || (pos.y + text_size.y >= clip_max->y); - if (clip_rect) // If we had no explicit clipping rectangle then pos==clip_min - need_clipping |= (pos.x < clip_min->x) || (pos.y < clip_min->y); - - // Align whole block. We should defer that to the better rendering function when we'll have support for individual line alignment. - if (align.x > 0.0f) pos.x = ImMax(pos.x, pos.x + (pos_max.x - pos.x - text_size.x) * align.x); - if (align.y > 0.0f) pos.y = ImMax(pos.y, pos.y + (pos_max.y - pos.y - text_size.y) * align.y); - - // Render - if (need_clipping) - { - ImVec4 fine_clip_rect(clip_min->x, clip_min->y, clip_max->x, clip_max->y); - draw_list->AddText(NULL, 0.0f, pos, GetColorU32(ImGuiCol_Text), text, text_display_end, 0.0f, &fine_clip_rect); - } - else - { - draw_list->AddText(NULL, 0.0f, pos, GetColorU32(ImGuiCol_Text), text, text_display_end, 0.0f, NULL); - } -} - -void ImGui::RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImVec2& align, const ImRect* clip_rect) -{ - // Hide anything after a '##' string - const char* text_display_end = FindRenderedTextEnd(text, text_end); - const int text_len = (int)(text_display_end - text); - if (text_len == 0) - return; - - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - RenderTextClippedEx(window->DrawList, pos_min, pos_max, text, text_display_end, text_size_if_known, align, clip_rect); - if (g.LogEnabled) - LogRenderedText(&pos_min, text, text_display_end); -} - - -// Another overly complex function until we reorganize everything into a nice all-in-one helper. -// This is made more complex because we have dissociated the layout rectangle (pos_min..pos_max) which define _where_ the ellipsis is, from actual clipping of text and limit of the ellipsis display. -// This is because in the context of tabs we selectively hide part of the text when the Close Button appears, but we don't want the ellipsis to move. -void ImGui::RenderTextEllipsis(ImDrawList* draw_list, const ImVec2& pos_min, const ImVec2& pos_max, float clip_max_x, float ellipsis_max_x, const char* text, const char* text_end_full, const ImVec2* text_size_if_known) -{ - ImGuiContext& g = *GImGui; - if (text_end_full == NULL) - text_end_full = FindRenderedTextEnd(text); - const ImVec2 text_size = text_size_if_known ? *text_size_if_known : CalcTextSize(text, text_end_full, false, 0.0f); - - //draw_list->AddLine(ImVec2(pos_max.x, pos_min.y - 4), ImVec2(pos_max.x, pos_max.y + 4), IM_COL32(0, 0, 255, 255)); - //draw_list->AddLine(ImVec2(ellipsis_max_x, pos_min.y-2), ImVec2(ellipsis_max_x, pos_max.y+2), IM_COL32(0, 255, 0, 255)); - //draw_list->AddLine(ImVec2(clip_max_x, pos_min.y), ImVec2(clip_max_x, pos_max.y), IM_COL32(255, 0, 0, 255)); - // FIXME: We could technically remove (last_glyph->AdvanceX - last_glyph->X1) from text_size.x here and save a few pixels. - if (text_size.x > pos_max.x - pos_min.x) - { - // Hello wo... - // | | | - // min max ellipsis_max - // <-> this is generally some padding value - - const ImFont* font = draw_list->_Data->Font; - const float font_size = draw_list->_Data->FontSize; - const char* text_end_ellipsis = NULL; - - ImWchar ellipsis_char = font->EllipsisChar; - int ellipsis_char_count = 1; - if (ellipsis_char == (ImWchar)-1) - { - ellipsis_char = (ImWchar)'.'; - ellipsis_char_count = 3; - } - const ImFontGlyph* glyph = font->FindGlyph(ellipsis_char); - - float ellipsis_glyph_width = glyph->X1; // Width of the glyph with no padding on either side - float ellipsis_total_width = ellipsis_glyph_width; // Full width of entire ellipsis - - if (ellipsis_char_count > 1) - { - // Full ellipsis size without free spacing after it. - const float spacing_between_dots = 1.0f * (draw_list->_Data->FontSize / font->FontSize); - ellipsis_glyph_width = glyph->X1 - glyph->X0 + spacing_between_dots; - ellipsis_total_width = ellipsis_glyph_width * (float)ellipsis_char_count - spacing_between_dots; - } - - // We can now claim the space between pos_max.x and ellipsis_max.x - const float text_avail_width = ImMax((ImMax(pos_max.x, ellipsis_max_x) - ellipsis_total_width) - pos_min.x, 1.0f); - float text_size_clipped_x = font->CalcTextSizeA(font_size, text_avail_width, 0.0f, text, text_end_full, &text_end_ellipsis).x; - if (text == text_end_ellipsis && text_end_ellipsis < text_end_full) - { - // Always display at least 1 character if there's no room for character + ellipsis - text_end_ellipsis = text + ImTextCountUtf8BytesFromChar(text, text_end_full); - text_size_clipped_x = font->CalcTextSizeA(font_size, FLT_MAX, 0.0f, text, text_end_ellipsis).x; - } - while (text_end_ellipsis > text && ImCharIsBlankA(text_end_ellipsis[-1])) - { - // Trim trailing space before ellipsis (FIXME: Supporting non-ascii blanks would be nice, for this we need a function to backtrack in UTF-8 text) - text_end_ellipsis--; - text_size_clipped_x -= font->CalcTextSizeA(font_size, FLT_MAX, 0.0f, text_end_ellipsis, text_end_ellipsis + 1).x; // Ascii blanks are always 1 byte - } - - // Render text, render ellipsis - RenderTextClippedEx(draw_list, pos_min, ImVec2(clip_max_x, pos_max.y), text, text_end_ellipsis, &text_size, ImVec2(0.0f, 0.0f)); - float ellipsis_x = pos_min.x + text_size_clipped_x; - if (ellipsis_x + ellipsis_total_width <= ellipsis_max_x) - for (int i = 0; i < ellipsis_char_count; i++) - { - font->RenderChar(draw_list, font_size, ImVec2(ellipsis_x, pos_min.y), GetColorU32(ImGuiCol_Text), ellipsis_char); - ellipsis_x += ellipsis_glyph_width; - } - } - else - { - RenderTextClippedEx(draw_list, pos_min, ImVec2(clip_max_x, pos_max.y), text, text_end_full, &text_size, ImVec2(0.0f, 0.0f)); - } - - if (g.LogEnabled) - LogRenderedText(&pos_min, text, text_end_full); -} - -// Render a rectangle shaped with optional rounding and borders -void ImGui::RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool border, float rounding) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - window->DrawList->AddRectFilled(p_min, p_max, fill_col, rounding); - const float border_size = g.Style.FrameBorderSize; - if (border && border_size > 0.0f) - { - window->DrawList->AddRect(p_min+ImVec2(1,1), p_max+ImVec2(1,1), GetColorU32(ImGuiCol_BorderShadow), rounding, ImDrawCornerFlags_All, border_size); - window->DrawList->AddRect(p_min, p_max, GetColorU32(ImGuiCol_Border), rounding, ImDrawCornerFlags_All, border_size); - } -} - -void ImGui::RenderFrameBorder(ImVec2 p_min, ImVec2 p_max, float rounding) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - const float border_size = g.Style.FrameBorderSize; - if (border_size > 0.0f) - { - window->DrawList->AddRect(p_min+ImVec2(1,1), p_max+ImVec2(1,1), GetColorU32(ImGuiCol_BorderShadow), rounding, ImDrawCornerFlags_All, border_size); - window->DrawList->AddRect(p_min, p_max, GetColorU32(ImGuiCol_Border), rounding, ImDrawCornerFlags_All, border_size); - } -} - -void ImGui::RenderNavHighlight(const ImRect& bb, ImGuiID id, ImGuiNavHighlightFlags flags) -{ - ImGuiContext& g = *GImGui; - if (id != g.NavId) - return; - if (g.NavDisableHighlight && !(flags & ImGuiNavHighlightFlags_AlwaysDraw)) - return; - ImGuiWindow* window = g.CurrentWindow; - if (window->DC.NavHideHighlightOneFrame) - return; - - float rounding = (flags & ImGuiNavHighlightFlags_NoRounding) ? 0.0f : g.Style.FrameRounding; - ImRect display_rect = bb; - display_rect.ClipWith(window->ClipRect); - if (flags & ImGuiNavHighlightFlags_TypeDefault) - { - const float THICKNESS = 2.0f; - const float DISTANCE = 3.0f + THICKNESS * 0.5f; - display_rect.Expand(ImVec2(DISTANCE,DISTANCE)); - bool fully_visible = window->ClipRect.Contains(display_rect); - if (!fully_visible) - window->DrawList->PushClipRect(display_rect.Min, display_rect.Max); - window->DrawList->AddRect(display_rect.Min + ImVec2(THICKNESS*0.5f,THICKNESS*0.5f), display_rect.Max - ImVec2(THICKNESS*0.5f,THICKNESS*0.5f), GetColorU32(ImGuiCol_NavHighlight), rounding, ImDrawCornerFlags_All, THICKNESS); - if (!fully_visible) - window->DrawList->PopClipRect(); - } - if (flags & ImGuiNavHighlightFlags_TypeThin) - { - window->DrawList->AddRect(display_rect.Min, display_rect.Max, GetColorU32(ImGuiCol_NavHighlight), rounding, ~0, 1.0f); - } -} - -//----------------------------------------------------------------------------- -// [SECTION] MAIN CODE (most of the code! lots of stuff, needs tidying up!) -//----------------------------------------------------------------------------- - -// ImGuiWindow is mostly a dumb struct. It merely has a constructor and a few helper methods -ImGuiWindow::ImGuiWindow(ImGuiContext* context, const char* name) - : DrawListInst(&context->DrawListSharedData) -{ - Name = ImStrdup(name); - ID = ImHashStr(name); - IDStack.push_back(ID); - Flags = ImGuiWindowFlags_None; - Pos = ImVec2(0.0f, 0.0f); - Size = SizeFull = ImVec2(0.0f, 0.0f); - ContentSize = ContentSizeExplicit = ImVec2(0.0f, 0.0f); - WindowPadding = ImVec2(0.0f, 0.0f); - WindowRounding = 0.0f; - WindowBorderSize = 0.0f; - NameBufLen = (int)strlen(name) + 1; - MoveId = GetID("#MOVE"); - ChildId = 0; - Scroll = ImVec2(0.0f, 0.0f); - ScrollTarget = ImVec2(FLT_MAX, FLT_MAX); - ScrollTargetCenterRatio = ImVec2(0.5f, 0.5f); - ScrollbarSizes = ImVec2(0.0f, 0.0f); - ScrollbarX = ScrollbarY = false; - Active = WasActive = false; - WriteAccessed = false; - Collapsed = false; - WantCollapseToggle = false; - SkipItems = false; - Appearing = false; - Hidden = false; - IsFallbackWindow = false; - HasCloseButton = false; - ResizeBorderHeld = -1; - BeginCount = 0; - BeginOrderWithinParent = -1; - BeginOrderWithinContext = -1; - PopupId = 0; - AutoFitFramesX = AutoFitFramesY = -1; - AutoFitChildAxises = 0x00; - AutoFitOnlyGrows = false; - AutoPosLastDirection = ImGuiDir_None; - HiddenFramesCanSkipItems = HiddenFramesCannotSkipItems = 0; - SetWindowPosAllowFlags = SetWindowSizeAllowFlags = SetWindowCollapsedAllowFlags = ImGuiCond_Always | ImGuiCond_Once | ImGuiCond_FirstUseEver | ImGuiCond_Appearing; - SetWindowPosVal = SetWindowPosPivot = ImVec2(FLT_MAX, FLT_MAX); - - InnerRect = ImRect(0.0f, 0.0f, 0.0f, 0.0f); // Clear so the InnerRect.GetSize() code in Begin() doesn't lead to overflow even if the result isn't used. - - LastFrameActive = -1; - LastTimeActive = -1.0f; - ItemWidthDefault = 0.0f; - FontWindowScale = 1.0f; - SettingsOffset = -1; - - DrawList = &DrawListInst; - DrawList->_OwnerName = Name; - ParentWindow = NULL; - RootWindow = NULL; - RootWindowForTitleBarHighlight = NULL; - RootWindowForNav = NULL; - - NavLastIds[0] = NavLastIds[1] = 0; - NavRectRel[0] = NavRectRel[1] = ImRect(); - NavLastChildNavWindow = NULL; - - MemoryCompacted = false; - MemoryDrawListIdxCapacity = MemoryDrawListVtxCapacity = 0; -} - -ImGuiWindow::~ImGuiWindow() -{ - IM_ASSERT(DrawList == &DrawListInst); - IM_DELETE(Name); - for (int i = 0; i != ColumnsStorage.Size; i++) - ColumnsStorage[i].~ImGuiColumns(); -} - -ImGuiID ImGuiWindow::GetID(const char* str, const char* str_end) -{ - ImGuiID seed = IDStack.back(); - ImGuiID id = ImHashStr(str, str_end ? (str_end - str) : 0, seed); - ImGui::KeepAliveID(id); - return id; -} - -ImGuiID ImGuiWindow::GetID(const void* ptr) -{ - ImGuiID seed = IDStack.back(); - ImGuiID id = ImHashData(&ptr, sizeof(void*), seed); - ImGui::KeepAliveID(id); - return id; -} - -ImGuiID ImGuiWindow::GetID(int n) -{ - ImGuiID seed = IDStack.back(); - ImGuiID id = ImHashData(&n, sizeof(n), seed); - ImGui::KeepAliveID(id); - return id; -} - -ImGuiID ImGuiWindow::GetIDNoKeepAlive(const char* str, const char* str_end) -{ - ImGuiID seed = IDStack.back(); - return ImHashStr(str, str_end ? (str_end - str) : 0, seed); -} - -ImGuiID ImGuiWindow::GetIDNoKeepAlive(const void* ptr) -{ - ImGuiID seed = IDStack.back(); - return ImHashData(&ptr, sizeof(void*), seed); -} - -ImGuiID ImGuiWindow::GetIDNoKeepAlive(int n) -{ - ImGuiID seed = IDStack.back(); - return ImHashData(&n, sizeof(n), seed); -} - -// This is only used in rare/specific situations to manufacture an ID out of nowhere. -ImGuiID ImGuiWindow::GetIDFromRectangle(const ImRect& r_abs) -{ - ImGuiID seed = IDStack.back(); - const int r_rel[4] = { (int)(r_abs.Min.x - Pos.x), (int)(r_abs.Min.y - Pos.y), (int)(r_abs.Max.x - Pos.x), (int)(r_abs.Max.y - Pos.y) }; - ImGuiID id = ImHashData(&r_rel, sizeof(r_rel), seed); - ImGui::KeepAliveID(id); - return id; -} - -static void SetCurrentWindow(ImGuiWindow* window) -{ - ImGuiContext& g = *GImGui; - g.CurrentWindow = window; - if (window) - g.FontSize = g.DrawListSharedData.FontSize = window->CalcFontSize(); -} - -// Free up/compact internal window buffers, we can use this when a window becomes unused. -// This is currently unused by the library, but you may call this yourself for easy GC. -// Not freed: -// - ImGuiWindow, ImGuiWindowSettings, Name -// - StateStorage, ColumnsStorage (may hold useful data) -// This should have no noticeable visual effect. When the window reappear however, expect new allocation/buffer growth/copy cost. -void ImGui::GcCompactTransientWindowBuffers(ImGuiWindow* window) -{ - window->MemoryCompacted = true; - window->MemoryDrawListIdxCapacity = window->DrawList->IdxBuffer.Capacity; - window->MemoryDrawListVtxCapacity = window->DrawList->VtxBuffer.Capacity; - window->IDStack.clear(); - window->DrawList->ClearFreeMemory(); - window->DC.ChildWindows.clear(); - window->DC.ItemFlagsStack.clear(); - window->DC.ItemWidthStack.clear(); - window->DC.TextWrapPosStack.clear(); - window->DC.GroupStack.clear(); -} - -void ImGui::GcAwakeTransientWindowBuffers(ImGuiWindow* window) -{ - // We stored capacity of the ImDrawList buffer to reduce growth-caused allocation/copy when awakening. - // The other buffers tends to amortize much faster. - window->MemoryCompacted = false; - window->DrawList->IdxBuffer.reserve(window->MemoryDrawListIdxCapacity); - window->DrawList->VtxBuffer.reserve(window->MemoryDrawListVtxCapacity); - window->MemoryDrawListIdxCapacity = window->MemoryDrawListVtxCapacity = 0; -} - -void ImGui::SetActiveID(ImGuiID id, ImGuiWindow* window) -{ - ImGuiContext& g = *GImGui; - g.ActiveIdIsJustActivated = (g.ActiveId != id); - if (g.ActiveIdIsJustActivated) - { - g.ActiveIdTimer = 0.0f; - g.ActiveIdHasBeenPressedBefore = false; - g.ActiveIdHasBeenEditedBefore = false; - if (id != 0) - { - g.LastActiveId = id; - g.LastActiveIdTimer = 0.0f; - } - } - g.ActiveId = id; - g.ActiveIdAllowOverlap = false; - g.ActiveIdWindow = window; - g.ActiveIdHasBeenEditedThisFrame = false; - if (id) - { - g.ActiveIdIsAlive = id; - g.ActiveIdSource = (g.NavActivateId == id || g.NavInputId == id || g.NavJustTabbedId == id || g.NavJustMovedToId == id) ? ImGuiInputSource_Nav : ImGuiInputSource_Mouse; - } - - // Clear declaration of inputs claimed by the widget - // (Please note that this is WIP and not all keys/inputs are thoroughly declared by all widgets yet) - g.ActiveIdUsingNavDirMask = 0x00; - g.ActiveIdUsingNavInputMask = 0x00; - g.ActiveIdUsingKeyInputMask = 0x00; -} - -void ImGui::ClearActiveID() -{ - SetActiveID(0, NULL); -} - -void ImGui::SetHoveredID(ImGuiID id) -{ - ImGuiContext& g = *GImGui; - g.HoveredId = id; - g.HoveredIdAllowOverlap = false; - if (id != 0 && g.HoveredIdPreviousFrame != id) - g.HoveredIdTimer = g.HoveredIdNotActiveTimer = 0.0f; -} - -ImGuiID ImGui::GetHoveredID() -{ - ImGuiContext& g = *GImGui; - return g.HoveredId ? g.HoveredId : g.HoveredIdPreviousFrame; -} - -void ImGui::KeepAliveID(ImGuiID id) -{ - ImGuiContext& g = *GImGui; - if (g.ActiveId == id) - g.ActiveIdIsAlive = id; - if (g.ActiveIdPreviousFrame == id) - g.ActiveIdPreviousFrameIsAlive = true; -} - -void ImGui::MarkItemEdited(ImGuiID id) -{ - // This marking is solely to be able to provide info for IsItemDeactivatedAfterEdit(). - // ActiveId might have been released by the time we call this (as in the typical press/release button behavior) but still need need to fill the data. - ImGuiContext& g = *GImGui; - IM_ASSERT(g.ActiveId == id || g.ActiveId == 0 || g.DragDropActive); - IM_UNUSED(id); // Avoid unused variable warnings when asserts are compiled out. - //IM_ASSERT(g.CurrentWindow->DC.LastItemId == id); - g.ActiveIdHasBeenEditedThisFrame = true; - g.ActiveIdHasBeenEditedBefore = true; - g.CurrentWindow->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_Edited; -} - -static inline bool IsWindowContentHoverable(ImGuiWindow* window, ImGuiHoveredFlags flags) -{ - // An active popup disable hovering on other windows (apart from its own children) - // FIXME-OPT: This could be cached/stored within the window. - ImGuiContext& g = *GImGui; - if (g.NavWindow) - if (ImGuiWindow* focused_root_window = g.NavWindow->RootWindow) - if (focused_root_window->WasActive && focused_root_window != window->RootWindow) - { - // For the purpose of those flags we differentiate "standard popup" from "modal popup" - // NB: The order of those two tests is important because Modal windows are also Popups. - if (focused_root_window->Flags & ImGuiWindowFlags_Modal) - return false; - if ((focused_root_window->Flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiHoveredFlags_AllowWhenBlockedByPopup)) - return false; - } - return true; -} - -// This is roughly matching the behavior of internal-facing ItemHoverable() -// - we allow hovering to be true when ActiveId==window->MoveID, so that clicking on non-interactive items such as a Text() item still returns true with IsItemHovered() -// - this should work even for non-interactive items that have no ID, so we cannot use LastItemId -bool ImGui::IsItemHovered(ImGuiHoveredFlags flags) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - if (g.NavDisableMouseHover && !g.NavDisableHighlight) - return IsItemFocused(); - - // Test for bounding box overlap, as updated as ItemAdd() - if (!(window->DC.LastItemStatusFlags & ImGuiItemStatusFlags_HoveredRect)) - return false; - IM_ASSERT((flags & (ImGuiHoveredFlags_RootWindow | ImGuiHoveredFlags_ChildWindows)) == 0); // Flags not supported by this function - - // Test if we are hovering the right window (our window could be behind another window) - // [2017/10/16] Reverted commit 344d48be3 and testing RootWindow instead. I believe it is correct to NOT test for RootWindow but this leaves us unable to use IsItemHovered() after EndChild() itself. - // Until a solution is found I believe reverting to the test from 2017/09/27 is safe since this was the test that has been running for a long while. - //if (g.HoveredWindow != window) - // return false; - if (g.HoveredRootWindow != window->RootWindow && !(flags & ImGuiHoveredFlags_AllowWhenOverlapped)) - return false; - - // Test if another item is active (e.g. being dragged) - if (!(flags & ImGuiHoveredFlags_AllowWhenBlockedByActiveItem)) - if (g.ActiveId != 0 && g.ActiveId != window->DC.LastItemId && !g.ActiveIdAllowOverlap && g.ActiveId != window->MoveId) - return false; - - // Test if interactions on this window are blocked by an active popup or modal. - // The ImGuiHoveredFlags_AllowWhenBlockedByPopup flag will be tested here. - if (!IsWindowContentHoverable(window, flags)) - return false; - - // Test if the item is disabled - if ((window->DC.ItemFlags & ImGuiItemFlags_Disabled) && !(flags & ImGuiHoveredFlags_AllowWhenDisabled)) - return false; - - // Special handling for the dummy item after Begin() which represent the title bar or tab. - // When the window is collapsed (SkipItems==true) that last item will never be overwritten so we need to detect the case. - if (window->DC.LastItemId == window->MoveId && window->WriteAccessed) - return false; - return true; -} - -// Internal facing ItemHoverable() used when submitting widgets. Differs slightly from IsItemHovered(). -bool ImGui::ItemHoverable(const ImRect& bb, ImGuiID id) -{ - ImGuiContext& g = *GImGui; - if (g.HoveredId != 0 && g.HoveredId != id && !g.HoveredIdAllowOverlap) - return false; - - ImGuiWindow* window = g.CurrentWindow; - if (g.HoveredWindow != window) - return false; - if (g.ActiveId != 0 && g.ActiveId != id && !g.ActiveIdAllowOverlap) - return false; - if (!IsMouseHoveringRect(bb.Min, bb.Max)) - return false; - if (g.NavDisableMouseHover || !IsWindowContentHoverable(window, ImGuiHoveredFlags_None)) - return false; - if (window->DC.ItemFlags & ImGuiItemFlags_Disabled) - return false; - - SetHoveredID(id); - - // [DEBUG] Item Picker tool! - // We perform the check here because SetHoveredID() is not frequently called (1~ time a frame), making - // the cost of this tool near-zero. We can get slightly better call-stack and support picking non-hovered - // items if we perform the test in ItemAdd(), but that would incur a small runtime cost. - // #define IMGUI_DEBUG_TOOL_ITEM_PICKER_EX in imconfig.h if you want this check to also be performed in ItemAdd(). - if (g.DebugItemPickerActive && g.HoveredIdPreviousFrame == id) - GetForegroundDrawList()->AddRect(bb.Min, bb.Max, IM_COL32(255, 255, 0, 255)); - if (g.DebugItemPickerBreakId == id) - IM_DEBUG_BREAK(); - - return true; -} - -bool ImGui::IsClippedEx(const ImRect& bb, ImGuiID id, bool clip_even_when_logged) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - if (!bb.Overlaps(window->ClipRect)) - if (id == 0 || id != g.ActiveId) - if (clip_even_when_logged || !g.LogEnabled) - return true; - return false; -} - -// Process TAB/Shift+TAB. Be mindful that this function may _clear_ the ActiveID when tabbing out. -bool ImGui::FocusableItemRegister(ImGuiWindow* window, ImGuiID id) -{ - ImGuiContext& g = *GImGui; - - // Increment counters - const bool is_tab_stop = (window->DC.ItemFlags & (ImGuiItemFlags_NoTabStop | ImGuiItemFlags_Disabled)) == 0; - window->DC.FocusCounterRegular++; - if (is_tab_stop) - window->DC.FocusCounterTabStop++; - - // Process TAB/Shift-TAB to tab *OUT* of the currently focused item. - // (Note that we can always TAB out of a widget that doesn't allow tabbing in) - if (g.ActiveId == id && g.FocusTabPressed && !IsActiveIdUsingKey(ImGuiKey_Tab) && g.FocusRequestNextWindow == NULL) - { - g.FocusRequestNextWindow = window; - g.FocusRequestNextCounterTabStop = window->DC.FocusCounterTabStop + (g.IO.KeyShift ? (is_tab_stop ? -1 : 0) : +1); // Modulo on index will be applied at the end of frame once we've got the total counter of items. - } - - // Handle focus requests - if (g.FocusRequestCurrWindow == window) - { - if (window->DC.FocusCounterRegular == g.FocusRequestCurrCounterRegular) - return true; - if (is_tab_stop && window->DC.FocusCounterTabStop == g.FocusRequestCurrCounterTabStop) - { - g.NavJustTabbedId = id; - return true; - } - - // If another item is about to be focused, we clear our own active id - if (g.ActiveId == id) - ClearActiveID(); - } - - return false; -} - -void ImGui::FocusableItemUnregister(ImGuiWindow* window) -{ - window->DC.FocusCounterRegular--; - window->DC.FocusCounterTabStop--; -} - -float ImGui::CalcWrapWidthForPos(const ImVec2& pos, float wrap_pos_x) -{ - if (wrap_pos_x < 0.0f) - return 0.0f; - - ImGuiWindow* window = GImGui->CurrentWindow; - if (wrap_pos_x == 0.0f) - wrap_pos_x = window->WorkRect.Max.x; - else if (wrap_pos_x > 0.0f) - wrap_pos_x += window->Pos.x - window->Scroll.x; // wrap_pos_x is provided is window local space - - return ImMax(wrap_pos_x - pos.x, 1.0f); -} - -// IM_ALLOC() == ImGui::MemAlloc() -void* ImGui::MemAlloc(size_t size) -{ - if (ImGuiContext* ctx = GImGui) - ctx->IO.MetricsActiveAllocations++; - return GImAllocatorAllocFunc(size, GImAllocatorUserData); -} - -// IM_FREE() == ImGui::MemFree() -void ImGui::MemFree(void* ptr) -{ - if (ptr) - if (ImGuiContext* ctx = GImGui) - ctx->IO.MetricsActiveAllocations--; - return GImAllocatorFreeFunc(ptr, GImAllocatorUserData); -} - -const char* ImGui::GetClipboardText() -{ - ImGuiContext& g = *GImGui; - return g.IO.GetClipboardTextFn ? g.IO.GetClipboardTextFn(g.IO.ClipboardUserData) : ""; -} - -void ImGui::SetClipboardText(const char* text) -{ - ImGuiContext& g = *GImGui; - if (g.IO.SetClipboardTextFn) - g.IO.SetClipboardTextFn(g.IO.ClipboardUserData, text); -} - -const char* ImGui::GetVersion() -{ - return IMGUI_VERSION; -} - -// Internal state access - if you want to share Dear ImGui state between modules (e.g. DLL) or allocate it yourself -// Note that we still point to some static data and members (such as GFontAtlas), so the state instance you end up using will point to the static data within its module -ImGuiContext* ImGui::GetCurrentContext() -{ - return GImGui; -} - -void ImGui::SetCurrentContext(ImGuiContext* ctx) -{ -#ifdef IMGUI_SET_CURRENT_CONTEXT_FUNC - IMGUI_SET_CURRENT_CONTEXT_FUNC(ctx); // For custom thread-based hackery you may want to have control over this. -#else - GImGui = ctx; -#endif -} - -void ImGui::SetAllocatorFunctions(void* (*alloc_func)(size_t sz, void* user_data), void (*free_func)(void* ptr, void* user_data), void* user_data) -{ - GImAllocatorAllocFunc = alloc_func; - GImAllocatorFreeFunc = free_func; - GImAllocatorUserData = user_data; -} - -ImGuiContext* ImGui::CreateContext(ImFontAtlas* shared_font_atlas) -{ - ImGuiContext* ctx = IM_NEW(ImGuiContext)(shared_font_atlas); - if (GImGui == NULL) - SetCurrentContext(ctx); - Initialize(ctx); - return ctx; -} - -void ImGui::DestroyContext(ImGuiContext* ctx) -{ - if (ctx == NULL) - ctx = GImGui; - Shutdown(ctx); - if (GImGui == ctx) - SetCurrentContext(NULL); - IM_DELETE(ctx); -} - -ImGuiIO& ImGui::GetIO() -{ - IM_ASSERT(GImGui != NULL && "No current context. Did you call ImGui::CreateContext() and ImGui::SetCurrentContext() ?"); - return GImGui->IO; -} - -// Same value as passed to the old io.RenderDrawListsFn function. Valid after Render() and until the next call to NewFrame() -ImDrawData* ImGui::GetDrawData() -{ - ImGuiContext& g = *GImGui; - return g.DrawData.Valid ? &g.DrawData : NULL; -} - -double ImGui::GetTime() -{ - return GImGui->Time; -} - -int ImGui::GetFrameCount() -{ - return GImGui->FrameCount; -} - -ImDrawList* ImGui::GetBackgroundDrawList() -{ - return &GImGui->BackgroundDrawList; -} - -ImDrawList* ImGui::GetForegroundDrawList() -{ - return &GImGui->ForegroundDrawList; -} - -ImDrawListSharedData* ImGui::GetDrawListSharedData() -{ - return &GImGui->DrawListSharedData; -} - -void ImGui::StartMouseMovingWindow(ImGuiWindow* window) -{ - // Set ActiveId even if the _NoMove flag is set. Without it, dragging away from a window with _NoMove would activate hover on other windows. - // We _also_ call this when clicking in a window empty space when io.ConfigWindowsMoveFromTitleBarOnly is set, but clear g.MovingWindow afterward. - // This is because we want ActiveId to be set even when the window is not permitted to move. - ImGuiContext& g = *GImGui; - FocusWindow(window); - SetActiveID(window->MoveId, window); - g.NavDisableHighlight = true; - g.ActiveIdClickOffset = g.IO.MousePos - window->RootWindow->Pos; - - bool can_move_window = true; - if ((window->Flags & ImGuiWindowFlags_NoMove) || (window->RootWindow->Flags & ImGuiWindowFlags_NoMove)) - can_move_window = false; - if (can_move_window) - g.MovingWindow = window; -} - -// Handle mouse moving window -// Note: moving window with the navigation keys (Square + d-pad / CTRL+TAB + Arrows) are processed in NavUpdateWindowing() -// FIXME: We don't have strong guarantee that g.MovingWindow stay synched with g.ActiveId == g.MovingWindow->MoveId. -// This is currently enforced by the fact that BeginDragDropSource() is setting all g.ActiveIdUsingXXXX flags to inhibit navigation inputs, -// but if we should more thoroughly test cases where g.ActiveId or g.MovingWindow gets changed and not the other. -void ImGui::UpdateMouseMovingWindowNewFrame() -{ - ImGuiContext& g = *GImGui; - if (g.MovingWindow != NULL) - { - // We actually want to move the root window. g.MovingWindow == window we clicked on (could be a child window). - // We track it to preserve Focus and so that generally ActiveIdWindow == MovingWindow and ActiveId == MovingWindow->MoveId for consistency. - KeepAliveID(g.ActiveId); - IM_ASSERT(g.MovingWindow && g.MovingWindow->RootWindow); - ImGuiWindow* moving_window = g.MovingWindow->RootWindow; - if (g.IO.MouseDown[0] && IsMousePosValid(&g.IO.MousePos)) - { - ImVec2 pos = g.IO.MousePos - g.ActiveIdClickOffset; - if (moving_window->Pos.x != pos.x || moving_window->Pos.y != pos.y) - { - MarkIniSettingsDirty(moving_window); - SetWindowPos(moving_window, pos, ImGuiCond_Always); - } - FocusWindow(g.MovingWindow); - } - else - { - ClearActiveID(); - g.MovingWindow = NULL; - } - } - else - { - // When clicking/dragging from a window that has the _NoMove flag, we still set the ActiveId in order to prevent hovering others. - if (g.ActiveIdWindow && g.ActiveIdWindow->MoveId == g.ActiveId) - { - KeepAliveID(g.ActiveId); - if (!g.IO.MouseDown[0]) - ClearActiveID(); - } - } -} - -// Initiate moving window when clicking on empty space or title bar. -// Handle left-click and right-click focus. -void ImGui::UpdateMouseMovingWindowEndFrame() -{ - ImGuiContext& g = *GImGui; - if (g.ActiveId != 0 || g.HoveredId != 0) - return; - - // Unless we just made a window/popup appear - if (g.NavWindow && g.NavWindow->Appearing) - return; - - // Click to focus window and start moving (after we're done with all our widgets) - if (g.IO.MouseClicked[0]) - { - if (g.HoveredRootWindow != NULL) - { - StartMouseMovingWindow(g.HoveredWindow); - if (g.IO.ConfigWindowsMoveFromTitleBarOnly && !(g.HoveredRootWindow->Flags & ImGuiWindowFlags_NoTitleBar)) - if (!g.HoveredRootWindow->TitleBarRect().Contains(g.IO.MouseClickedPos[0])) - g.MovingWindow = NULL; - } - else if (g.NavWindow != NULL && GetTopMostPopupModal() == NULL) - { - // Clicking on void disable focus - FocusWindow(NULL); - } - } - - // With right mouse button we close popups without changing focus based on where the mouse is aimed - // Instead, focus will be restored to the window under the bottom-most closed popup. - // (The left mouse button path calls FocusWindow on the hovered window, which will lead NewFrame->ClosePopupsOverWindow to trigger) - if (g.IO.MouseClicked[1]) - { - // Find the top-most window between HoveredWindow and the top-most Modal Window. - // This is where we can trim the popup stack. - ImGuiWindow* modal = GetTopMostPopupModal(); - bool hovered_window_above_modal = false; - if (modal == NULL) - hovered_window_above_modal = true; - for (int i = g.Windows.Size - 1; i >= 0 && hovered_window_above_modal == false; i--) - { - ImGuiWindow* window = g.Windows[i]; - if (window == modal) - break; - if (window == g.HoveredWindow) - hovered_window_above_modal = true; - } - ClosePopupsOverWindow(hovered_window_above_modal ? g.HoveredWindow : modal, true); - } -} - -static bool IsWindowActiveAndVisible(ImGuiWindow* window) -{ - return (window->Active) && (!window->Hidden); -} - -static void ImGui::UpdateMouseInputs() -{ - ImGuiContext& g = *GImGui; - - // Round mouse position to avoid spreading non-rounded position (e.g. UpdateManualResize doesn't support them well) - if (IsMousePosValid(&g.IO.MousePos)) - g.IO.MousePos = g.LastValidMousePos = ImFloor(g.IO.MousePos); - - // If mouse just appeared or disappeared (usually denoted by -FLT_MAX components) we cancel out movement in MouseDelta - if (IsMousePosValid(&g.IO.MousePos) && IsMousePosValid(&g.IO.MousePosPrev)) - g.IO.MouseDelta = g.IO.MousePos - g.IO.MousePosPrev; - else - g.IO.MouseDelta = ImVec2(0.0f, 0.0f); - if (g.IO.MouseDelta.x != 0.0f || g.IO.MouseDelta.y != 0.0f) - g.NavDisableMouseHover = false; - - g.IO.MousePosPrev = g.IO.MousePos; - for (int i = 0; i < IM_ARRAYSIZE(g.IO.MouseDown); i++) - { - g.IO.MouseClicked[i] = g.IO.MouseDown[i] && g.IO.MouseDownDuration[i] < 0.0f; - g.IO.MouseReleased[i] = !g.IO.MouseDown[i] && g.IO.MouseDownDuration[i] >= 0.0f; - g.IO.MouseDownDurationPrev[i] = g.IO.MouseDownDuration[i]; - g.IO.MouseDownDuration[i] = g.IO.MouseDown[i] ? (g.IO.MouseDownDuration[i] < 0.0f ? 0.0f : g.IO.MouseDownDuration[i] + g.IO.DeltaTime) : -1.0f; - g.IO.MouseDoubleClicked[i] = false; - if (g.IO.MouseClicked[i]) - { - if ((float)(g.Time - g.IO.MouseClickedTime[i]) < g.IO.MouseDoubleClickTime) - { - ImVec2 delta_from_click_pos = IsMousePosValid(&g.IO.MousePos) ? (g.IO.MousePos - g.IO.MouseClickedPos[i]) : ImVec2(0.0f, 0.0f); - if (ImLengthSqr(delta_from_click_pos) < g.IO.MouseDoubleClickMaxDist * g.IO.MouseDoubleClickMaxDist) - g.IO.MouseDoubleClicked[i] = true; - g.IO.MouseClickedTime[i] = -DBL_MAX; // so the third click isn't turned into a double-click - } - else - { - g.IO.MouseClickedTime[i] = g.Time; - } - g.IO.MouseClickedPos[i] = g.IO.MousePos; - g.IO.MouseDownWasDoubleClick[i] = g.IO.MouseDoubleClicked[i]; - g.IO.MouseDragMaxDistanceAbs[i] = ImVec2(0.0f, 0.0f); - g.IO.MouseDragMaxDistanceSqr[i] = 0.0f; - } - else if (g.IO.MouseDown[i]) - { - // Maintain the maximum distance we reaching from the initial click position, which is used with dragging threshold - ImVec2 delta_from_click_pos = IsMousePosValid(&g.IO.MousePos) ? (g.IO.MousePos - g.IO.MouseClickedPos[i]) : ImVec2(0.0f, 0.0f); - g.IO.MouseDragMaxDistanceSqr[i] = ImMax(g.IO.MouseDragMaxDistanceSqr[i], ImLengthSqr(delta_from_click_pos)); - g.IO.MouseDragMaxDistanceAbs[i].x = ImMax(g.IO.MouseDragMaxDistanceAbs[i].x, delta_from_click_pos.x < 0.0f ? -delta_from_click_pos.x : delta_from_click_pos.x); - g.IO.MouseDragMaxDistanceAbs[i].y = ImMax(g.IO.MouseDragMaxDistanceAbs[i].y, delta_from_click_pos.y < 0.0f ? -delta_from_click_pos.y : delta_from_click_pos.y); - } - if (!g.IO.MouseDown[i] && !g.IO.MouseReleased[i]) - g.IO.MouseDownWasDoubleClick[i] = false; - if (g.IO.MouseClicked[i]) // Clicking any mouse button reactivate mouse hovering which may have been deactivated by gamepad/keyboard navigation - g.NavDisableMouseHover = false; - } -} - -static void StartLockWheelingWindow(ImGuiWindow* window) -{ - ImGuiContext& g = *GImGui; - if (g.WheelingWindow == window) - return; - g.WheelingWindow = window; - g.WheelingWindowRefMousePos = g.IO.MousePos; - g.WheelingWindowTimer = WINDOWS_MOUSE_WHEEL_SCROLL_LOCK_TIMER; -} - -void ImGui::UpdateMouseWheel() -{ - ImGuiContext& g = *GImGui; - - // Reset the locked window if we move the mouse or after the timer elapses - if (g.WheelingWindow != NULL) - { - g.WheelingWindowTimer -= g.IO.DeltaTime; - if (IsMousePosValid() && ImLengthSqr(g.IO.MousePos - g.WheelingWindowRefMousePos) > g.IO.MouseDragThreshold * g.IO.MouseDragThreshold) - g.WheelingWindowTimer = 0.0f; - if (g.WheelingWindowTimer <= 0.0f) - { - g.WheelingWindow = NULL; - g.WheelingWindowTimer = 0.0f; - } - } - - if (g.IO.MouseWheel == 0.0f && g.IO.MouseWheelH == 0.0f) - return; - - ImGuiWindow* window = g.WheelingWindow ? g.WheelingWindow : g.HoveredWindow; - if (!window || window->Collapsed) - return; - - // Zoom / Scale window - // FIXME-OBSOLETE: This is an old feature, it still works but pretty much nobody is using it and may be best redesigned. - if (g.IO.MouseWheel != 0.0f && g.IO.KeyCtrl && g.IO.FontAllowUserScaling) - { - StartLockWheelingWindow(window); - const float new_font_scale = ImClamp(window->FontWindowScale + g.IO.MouseWheel * 0.10f, 0.50f, 2.50f); - const float scale = new_font_scale / window->FontWindowScale; - window->FontWindowScale = new_font_scale; - if (!(window->Flags & ImGuiWindowFlags_ChildWindow)) - { - const ImVec2 offset = window->Size * (1.0f - scale) * (g.IO.MousePos - window->Pos) / window->Size; - SetWindowPos(window, window->Pos + offset, 0); - window->Size = ImFloor(window->Size * scale); - window->SizeFull = ImFloor(window->SizeFull * scale); - } - return; - } - - // Mouse wheel scrolling - // If a child window has the ImGuiWindowFlags_NoScrollWithMouse flag, we give a chance to scroll its parent - - // Vertical Mouse Wheel scrolling - const float wheel_y = (g.IO.MouseWheel != 0.0f && !g.IO.KeyShift) ? g.IO.MouseWheel : 0.0f; - if (wheel_y != 0.0f && !g.IO.KeyCtrl) - { - StartLockWheelingWindow(window); - while ((window->Flags & ImGuiWindowFlags_ChildWindow) && ((window->ScrollMax.y == 0.0f) || ((window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(window->Flags & ImGuiWindowFlags_NoMouseInputs)))) - window = window->ParentWindow; - if (!(window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(window->Flags & ImGuiWindowFlags_NoMouseInputs)) - { - float max_step = window->InnerRect.GetHeight() * 0.67f; - float scroll_step = ImFloor(ImMin(5 * window->CalcFontSize(), max_step)); - SetScrollY(window, window->Scroll.y - wheel_y * scroll_step); - } - } - - // Horizontal Mouse Wheel scrolling, or Vertical Mouse Wheel w/ Shift held - const float wheel_x = (g.IO.MouseWheelH != 0.0f && !g.IO.KeyShift) ? g.IO.MouseWheelH : (g.IO.MouseWheel != 0.0f && g.IO.KeyShift) ? g.IO.MouseWheel : 0.0f; - if (wheel_x != 0.0f && !g.IO.KeyCtrl) - { - StartLockWheelingWindow(window); - while ((window->Flags & ImGuiWindowFlags_ChildWindow) && ((window->ScrollMax.x == 0.0f) || ((window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(window->Flags & ImGuiWindowFlags_NoMouseInputs)))) - window = window->ParentWindow; - if (!(window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(window->Flags & ImGuiWindowFlags_NoMouseInputs)) - { - float max_step = window->InnerRect.GetWidth() * 0.67f; - float scroll_step = ImFloor(ImMin(2 * window->CalcFontSize(), max_step)); - SetScrollX(window, window->Scroll.x - wheel_x * scroll_step); - } - } -} - -void ImGui::UpdateTabFocus() -{ - ImGuiContext& g = *GImGui; - - // Pressing TAB activate widget focus - g.FocusTabPressed = (g.NavWindow && g.NavWindow->Active && !(g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs) && !g.IO.KeyCtrl && IsKeyPressedMap(ImGuiKey_Tab)); - if (g.ActiveId == 0 && g.FocusTabPressed) - { - // Note that SetKeyboardFocusHere() sets the Next fields mid-frame. To be consistent we also - // manipulate the Next fields even, even though they will be turned into Curr fields by the code below. - g.FocusRequestNextWindow = g.NavWindow; - g.FocusRequestNextCounterRegular = INT_MAX; - if (g.NavId != 0 && g.NavIdTabCounter != INT_MAX) - g.FocusRequestNextCounterTabStop = g.NavIdTabCounter + 1 + (g.IO.KeyShift ? -1 : 1); - else - g.FocusRequestNextCounterTabStop = g.IO.KeyShift ? -1 : 0; - } - - // Turn queued focus request into current one - g.FocusRequestCurrWindow = NULL; - g.FocusRequestCurrCounterRegular = g.FocusRequestCurrCounterTabStop = INT_MAX; - if (g.FocusRequestNextWindow != NULL) - { - ImGuiWindow* window = g.FocusRequestNextWindow; - g.FocusRequestCurrWindow = window; - if (g.FocusRequestNextCounterRegular != INT_MAX && window->DC.FocusCounterRegular != -1) - g.FocusRequestCurrCounterRegular = ImModPositive(g.FocusRequestNextCounterRegular, window->DC.FocusCounterRegular + 1); - if (g.FocusRequestNextCounterTabStop != INT_MAX && window->DC.FocusCounterTabStop != -1) - g.FocusRequestCurrCounterTabStop = ImModPositive(g.FocusRequestNextCounterTabStop, window->DC.FocusCounterTabStop + 1); - g.FocusRequestNextWindow = NULL; - g.FocusRequestNextCounterRegular = g.FocusRequestNextCounterTabStop = INT_MAX; - } - - g.NavIdTabCounter = INT_MAX; -} - -// The reason this is exposed in imgui_internal.h is: on touch-based system that don't have hovering, we want to dispatch inputs to the right target (imgui vs imgui+app) -void ImGui::UpdateHoveredWindowAndCaptureFlags() -{ - ImGuiContext& g = *GImGui; - - // Find the window hovered by mouse: - // - Child windows can extend beyond the limit of their parent so we need to derive HoveredRootWindow from HoveredWindow. - // - When moving a window we can skip the search, which also conveniently bypasses the fact that window->WindowRectClipped is lagging as this point of the frame. - // - We also support the moved window toggling the NoInputs flag after moving has started in order to be able to detect windows below it, which is useful for e.g. docking mechanisms. - FindHoveredWindow(); - - // Modal windows prevents cursor from hovering behind them. - ImGuiWindow* modal_window = GetTopMostPopupModal(); - if (modal_window) - if (g.HoveredRootWindow && !IsWindowChildOf(g.HoveredRootWindow, modal_window)) - g.HoveredRootWindow = g.HoveredWindow = NULL; - - // Disabled mouse? - if (g.IO.ConfigFlags & ImGuiConfigFlags_NoMouse) - g.HoveredWindow = g.HoveredRootWindow = NULL; - - // We track click ownership. When clicked outside of a window the click is owned by the application and won't report hovering nor request capture even while dragging over our windows afterward. - int mouse_earliest_button_down = -1; - bool mouse_any_down = false; - for (int i = 0; i < IM_ARRAYSIZE(g.IO.MouseDown); i++) - { - if (g.IO.MouseClicked[i]) - g.IO.MouseDownOwned[i] = (g.HoveredWindow != NULL) || (!g.OpenPopupStack.empty()); - mouse_any_down |= g.IO.MouseDown[i]; - if (g.IO.MouseDown[i]) - if (mouse_earliest_button_down == -1 || g.IO.MouseClickedTime[i] < g.IO.MouseClickedTime[mouse_earliest_button_down]) - mouse_earliest_button_down = i; - } - const bool mouse_avail_to_imgui = (mouse_earliest_button_down == -1) || g.IO.MouseDownOwned[mouse_earliest_button_down]; - - // If mouse was first clicked outside of ImGui bounds we also cancel out hovering. - // FIXME: For patterns of drag and drop across OS windows, we may need to rework/remove this test (first committed 311c0ca9 on 2015/02) - const bool mouse_dragging_extern_payload = g.DragDropActive && (g.DragDropSourceFlags & ImGuiDragDropFlags_SourceExtern) != 0; - if (!mouse_avail_to_imgui && !mouse_dragging_extern_payload) - g.HoveredWindow = g.HoveredRootWindow = NULL; - - // Update io.WantCaptureMouse for the user application (true = dispatch mouse info to imgui, false = dispatch mouse info to Dear ImGui + app) - if (g.WantCaptureMouseNextFrame != -1) - g.IO.WantCaptureMouse = (g.WantCaptureMouseNextFrame != 0); - else - g.IO.WantCaptureMouse = (mouse_avail_to_imgui && (g.HoveredWindow != NULL || mouse_any_down)) || (!g.OpenPopupStack.empty()); - - // Update io.WantCaptureKeyboard for the user application (true = dispatch keyboard info to imgui, false = dispatch keyboard info to Dear ImGui + app) - if (g.WantCaptureKeyboardNextFrame != -1) - g.IO.WantCaptureKeyboard = (g.WantCaptureKeyboardNextFrame != 0); - else - g.IO.WantCaptureKeyboard = (g.ActiveId != 0) || (modal_window != NULL); - if (g.IO.NavActive && (g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard) && !(g.IO.ConfigFlags & ImGuiConfigFlags_NavNoCaptureKeyboard)) - g.IO.WantCaptureKeyboard = true; - - // Update io.WantTextInput flag, this is to allow systems without a keyboard (e.g. mobile, hand-held) to show a software keyboard if possible - g.IO.WantTextInput = (g.WantTextInputNextFrame != -1) ? (g.WantTextInputNextFrame != 0) : false; -} - -static ImGuiKeyModFlags GetMergedKeyModFlags() -{ - ImGuiContext& g = *GImGui; - ImGuiKeyModFlags key_mod_flags = ImGuiKeyModFlags_None; - if (g.IO.KeyCtrl) { key_mod_flags |= ImGuiKeyModFlags_Ctrl; } - if (g.IO.KeyShift) { key_mod_flags |= ImGuiKeyModFlags_Shift; } - if (g.IO.KeyAlt) { key_mod_flags |= ImGuiKeyModFlags_Alt; } - if (g.IO.KeySuper) { key_mod_flags |= ImGuiKeyModFlags_Super; } - return key_mod_flags; -} - -void ImGui::NewFrame() -{ - IM_ASSERT(GImGui != NULL && "No current context. Did you call ImGui::CreateContext() and ImGui::SetCurrentContext() ?"); - ImGuiContext& g = *GImGui; - -#ifdef IMGUI_ENABLE_TEST_ENGINE - ImGuiTestEngineHook_PreNewFrame(&g); -#endif - - // Check and assert for various common IO and Configuration mistakes - ErrorCheckNewFrameSanityChecks(); - - // Load settings on first frame, save settings when modified (after a delay) - UpdateSettings(); - - g.Time += g.IO.DeltaTime; - g.WithinFrameScope = true; - g.FrameCount += 1; - g.TooltipOverrideCount = 0; - g.WindowsActiveCount = 0; - g.MenusIdSubmittedThisFrame.resize(0); - - // Calculate frame-rate for the user, as a purely luxurious feature - g.FramerateSecPerFrameAccum += g.IO.DeltaTime - g.FramerateSecPerFrame[g.FramerateSecPerFrameIdx]; - g.FramerateSecPerFrame[g.FramerateSecPerFrameIdx] = g.IO.DeltaTime; - g.FramerateSecPerFrameIdx = (g.FramerateSecPerFrameIdx + 1) % IM_ARRAYSIZE(g.FramerateSecPerFrame); - g.IO.Framerate = (g.FramerateSecPerFrameAccum > 0.0f) ? (1.0f / (g.FramerateSecPerFrameAccum / (float)IM_ARRAYSIZE(g.FramerateSecPerFrame))) : FLT_MAX; - - // Setup current font and draw list shared data - g.IO.Fonts->Locked = true; - SetCurrentFont(GetDefaultFont()); - IM_ASSERT(g.Font->IsLoaded()); - g.DrawListSharedData.ClipRectFullscreen = ImVec4(0.0f, 0.0f, g.IO.DisplaySize.x, g.IO.DisplaySize.y); - g.DrawListSharedData.CurveTessellationTol = g.Style.CurveTessellationTol; - g.DrawListSharedData.SetCircleSegmentMaxError(g.Style.CircleSegmentMaxError); - g.DrawListSharedData.InitialFlags = ImDrawListFlags_None; - if (g.Style.AntiAliasedLines) - g.DrawListSharedData.InitialFlags |= ImDrawListFlags_AntiAliasedLines; - if (g.Style.AntiAliasedFill) - g.DrawListSharedData.InitialFlags |= ImDrawListFlags_AntiAliasedFill; - if (g.IO.BackendFlags & ImGuiBackendFlags_RendererHasVtxOffset) - g.DrawListSharedData.InitialFlags |= ImDrawListFlags_AllowVtxOffset; - - g.BackgroundDrawList.Clear(); - g.BackgroundDrawList.PushTextureID(g.IO.Fonts->TexID); - g.BackgroundDrawList.PushClipRectFullScreen(); - - g.ForegroundDrawList.Clear(); - g.ForegroundDrawList.PushTextureID(g.IO.Fonts->TexID); - g.ForegroundDrawList.PushClipRectFullScreen(); - - // Mark rendering data as invalid to prevent user who may have a handle on it to use it. - g.DrawData.Clear(); - - // Drag and drop keep the source ID alive so even if the source disappear our state is consistent - if (g.DragDropActive && g.DragDropPayload.SourceId == g.ActiveId) - KeepAliveID(g.DragDropPayload.SourceId); - - // Update HoveredId data - if (!g.HoveredIdPreviousFrame) - g.HoveredIdTimer = 0.0f; - if (!g.HoveredIdPreviousFrame || (g.HoveredId && g.ActiveId == g.HoveredId)) - g.HoveredIdNotActiveTimer = 0.0f; - if (g.HoveredId) - g.HoveredIdTimer += g.IO.DeltaTime; - if (g.HoveredId && g.ActiveId != g.HoveredId) - g.HoveredIdNotActiveTimer += g.IO.DeltaTime; - g.HoveredIdPreviousFrame = g.HoveredId; - g.HoveredId = 0; - g.HoveredIdAllowOverlap = false; - - // Update ActiveId data (clear reference to active widget if the widget isn't alive anymore) - if (g.ActiveIdIsAlive != g.ActiveId && g.ActiveIdPreviousFrame == g.ActiveId && g.ActiveId != 0) - ClearActiveID(); - if (g.ActiveId) - g.ActiveIdTimer += g.IO.DeltaTime; - g.LastActiveIdTimer += g.IO.DeltaTime; - g.ActiveIdPreviousFrame = g.ActiveId; - g.ActiveIdPreviousFrameWindow = g.ActiveIdWindow; - g.ActiveIdPreviousFrameHasBeenEditedBefore = g.ActiveIdHasBeenEditedBefore; - g.ActiveIdIsAlive = 0; - g.ActiveIdHasBeenEditedThisFrame = false; - g.ActiveIdPreviousFrameIsAlive = false; - g.ActiveIdIsJustActivated = false; - if (g.TempInputId != 0 && g.ActiveId != g.TempInputId) - g.TempInputId = 0; - if (g.ActiveId == 0) - { - g.ActiveIdUsingNavDirMask = 0x00; - g.ActiveIdUsingNavInputMask = 0x00; - g.ActiveIdUsingKeyInputMask = 0x00; - } - - // Drag and drop - g.DragDropAcceptIdPrev = g.DragDropAcceptIdCurr; - g.DragDropAcceptIdCurr = 0; - g.DragDropAcceptIdCurrRectSurface = FLT_MAX; - g.DragDropWithinSource = false; - g.DragDropWithinTarget = false; - - // Update keyboard input state - // Synchronize io.KeyMods with individual modifiers io.KeyXXX bools - g.IO.KeyMods = GetMergedKeyModFlags(); - memcpy(g.IO.KeysDownDurationPrev, g.IO.KeysDownDuration, sizeof(g.IO.KeysDownDuration)); - for (int i = 0; i < IM_ARRAYSIZE(g.IO.KeysDown); i++) - g.IO.KeysDownDuration[i] = g.IO.KeysDown[i] ? (g.IO.KeysDownDuration[i] < 0.0f ? 0.0f : g.IO.KeysDownDuration[i] + g.IO.DeltaTime) : -1.0f; - - // Update gamepad/keyboard directional navigation - NavUpdate(); - - // Update mouse input state - UpdateMouseInputs(); - - // Find hovered window - // (needs to be before UpdateMouseMovingWindowNewFrame so we fill g.HoveredWindowUnderMovingWindow on the mouse release frame) - UpdateHoveredWindowAndCaptureFlags(); - - // Handle user moving window with mouse (at the beginning of the frame to avoid input lag or sheering) - UpdateMouseMovingWindowNewFrame(); - - // Background darkening/whitening - if (GetTopMostPopupModal() != NULL || (g.NavWindowingTarget != NULL && g.NavWindowingHighlightAlpha > 0.0f)) - g.DimBgRatio = ImMin(g.DimBgRatio + g.IO.DeltaTime * 6.0f, 1.0f); - else - g.DimBgRatio = ImMax(g.DimBgRatio - g.IO.DeltaTime * 10.0f, 0.0f); - - g.MouseCursor = ImGuiMouseCursor_Arrow; - g.WantCaptureMouseNextFrame = g.WantCaptureKeyboardNextFrame = g.WantTextInputNextFrame = -1; - g.PlatformImePos = ImVec2(1.0f, 1.0f); // OS Input Method Editor showing on top-left of our window by default - - // Mouse wheel scrolling, scale - UpdateMouseWheel(); - - // Update legacy TAB focus - UpdateTabFocus(); - - // Mark all windows as not visible and compact unused memory. - IM_ASSERT(g.WindowsFocusOrder.Size == g.Windows.Size); - const float memory_compact_start_time = (g.IO.ConfigWindowsMemoryCompactTimer >= 0.0f) ? (float)g.Time - g.IO.ConfigWindowsMemoryCompactTimer : FLT_MAX; - for (int i = 0; i != g.Windows.Size; i++) - { - ImGuiWindow* window = g.Windows[i]; - window->WasActive = window->Active; - window->BeginCount = 0; - window->Active = false; - window->WriteAccessed = false; - - // Garbage collect transient buffers of recently unused windows - if (!window->WasActive && !window->MemoryCompacted && window->LastTimeActive < memory_compact_start_time) - GcCompactTransientWindowBuffers(window); - } - - // Closing the focused window restore focus to the first active root window in descending z-order - if (g.NavWindow && !g.NavWindow->WasActive) - FocusTopMostWindowUnderOne(NULL, NULL); - - // No window should be open at the beginning of the frame. - // But in order to allow the user to call NewFrame() multiple times without calling Render(), we are doing an explicit clear. - g.CurrentWindowStack.resize(0); - g.BeginPopupStack.resize(0); - ClosePopupsOverWindow(g.NavWindow, false); - - // [DEBUG] Item picker tool - start with DebugStartItemPicker() - useful to visually select an item and break into its call-stack. - UpdateDebugToolItemPicker(); - - // Create implicit/fallback window - which we will only render it if the user has added something to it. - // We don't use "Debug" to avoid colliding with user trying to create a "Debug" window with custom flags. - // This fallback is particularly important as it avoid ImGui:: calls from crashing. - g.WithinFrameScopeWithImplicitWindow = true; - SetNextWindowSize(ImVec2(400,400), ImGuiCond_FirstUseEver); - Begin("Debug##Default"); - IM_ASSERT(g.CurrentWindow->IsFallbackWindow == true); - -#ifdef IMGUI_ENABLE_TEST_ENGINE - ImGuiTestEngineHook_PostNewFrame(&g); -#endif -} - -// [DEBUG] Item picker tool - start with DebugStartItemPicker() - useful to visually select an item and break into its call-stack. -void ImGui::UpdateDebugToolItemPicker() -{ - ImGuiContext& g = *GImGui; - g.DebugItemPickerBreakId = 0; - if (g.DebugItemPickerActive) - { - const ImGuiID hovered_id = g.HoveredIdPreviousFrame; - ImGui::SetMouseCursor(ImGuiMouseCursor_Hand); - if (ImGui::IsKeyPressedMap(ImGuiKey_Escape)) - g.DebugItemPickerActive = false; - if (ImGui::IsMouseClicked(0) && hovered_id) - { - g.DebugItemPickerBreakId = hovered_id; - g.DebugItemPickerActive = false; - } - ImGui::SetNextWindowBgAlpha(0.60f); - ImGui::BeginTooltip(); - ImGui::Text("HoveredId: 0x%08X", hovered_id); - ImGui::Text("Press ESC to abort picking."); - ImGui::TextColored(GetStyleColorVec4(hovered_id ? ImGuiCol_Text : ImGuiCol_TextDisabled), "Click to break in debugger!"); - ImGui::EndTooltip(); - } -} - -void ImGui::Initialize(ImGuiContext* context) -{ - ImGuiContext& g = *context; - IM_ASSERT(!g.Initialized && !g.SettingsLoaded); - - // Add .ini handle for ImGuiWindow type - { - ImGuiSettingsHandler ini_handler; - ini_handler.TypeName = "Window"; - ini_handler.TypeHash = ImHashStr("Window"); - ini_handler.ReadOpenFn = WindowSettingsHandler_ReadOpen; - ini_handler.ReadLineFn = WindowSettingsHandler_ReadLine; - ini_handler.WriteAllFn = WindowSettingsHandler_WriteAll; - g.SettingsHandlers.push_back(ini_handler); - } - -#ifdef IMGUI_HAS_TABLE - // Add .ini handle for ImGuiTable type - { - ImGuiSettingsHandler ini_handler; - ini_handler.TypeName = "Table"; - ini_handler.TypeHash = ImHashStr("Table"); - ini_handler.ReadOpenFn = TableSettingsHandler_ReadOpen; - ini_handler.ReadLineFn = TableSettingsHandler_ReadLine; - ini_handler.WriteAllFn = TableSettingsHandler_WriteAll; - g.SettingsHandlers.push_back(ini_handler); - } -#endif // #ifdef IMGUI_HAS_TABLE - -#ifdef IMGUI_HAS_DOCK -#endif // #ifdef IMGUI_HAS_DOCK - - g.Initialized = true; -} - -// This function is merely here to free heap allocations. -void ImGui::Shutdown(ImGuiContext* context) -{ - // The fonts atlas can be used prior to calling NewFrame(), so we clear it even if g.Initialized is FALSE (which would happen if we never called NewFrame) - ImGuiContext& g = *context; - if (g.IO.Fonts && g.FontAtlasOwnedByContext) - { - g.IO.Fonts->Locked = false; - IM_DELETE(g.IO.Fonts); - } - g.IO.Fonts = NULL; - - // Cleanup of other data are conditional on actually having initialized Dear ImGui. - if (!g.Initialized) - return; - - // Save settings (unless we haven't attempted to load them: CreateContext/DestroyContext without a call to NewFrame shouldn't save an empty file) - if (g.SettingsLoaded && g.IO.IniFilename != NULL) - { - ImGuiContext* backup_context = GImGui; - SetCurrentContext(context); - SaveIniSettingsToDisk(g.IO.IniFilename); - SetCurrentContext(backup_context); - } - - // Clear everything else - for (int i = 0; i < g.Windows.Size; i++) - IM_DELETE(g.Windows[i]); - g.Windows.clear(); - g.WindowsFocusOrder.clear(); - g.WindowsTempSortBuffer.clear(); - g.CurrentWindow = NULL; - g.CurrentWindowStack.clear(); - g.WindowsById.Clear(); - g.NavWindow = NULL; - g.HoveredWindow = g.HoveredRootWindow = NULL; - g.ActiveIdWindow = g.ActiveIdPreviousFrameWindow = NULL; - g.MovingWindow = NULL; - g.ColorModifiers.clear(); - g.StyleModifiers.clear(); - g.FontStack.clear(); - g.OpenPopupStack.clear(); - g.BeginPopupStack.clear(); - g.DrawDataBuilder.ClearFreeMemory(); - g.BackgroundDrawList.ClearFreeMemory(); - g.ForegroundDrawList.ClearFreeMemory(); - - g.TabBars.Clear(); - g.CurrentTabBarStack.clear(); - g.ShrinkWidthBuffer.clear(); - - g.PrivateClipboard.clear(); - g.MenusIdSubmittedThisFrame.clear(); - g.InputTextState.ClearFreeMemory(); - - g.SettingsWindows.clear(); - g.SettingsHandlers.clear(); - - if (g.LogFile) - { -#ifndef IMGUI_DISABLE_TTY_FUNCTIONS - if (g.LogFile != stdout) -#endif - ImFileClose(g.LogFile); - g.LogFile = NULL; - } - g.LogBuffer.clear(); - - g.Initialized = false; -} - -// FIXME: Add a more explicit sort order in the window structure. -static int IMGUI_CDECL ChildWindowComparer(const void* lhs, const void* rhs) -{ - const ImGuiWindow* const a = *(const ImGuiWindow* const *)lhs; - const ImGuiWindow* const b = *(const ImGuiWindow* const *)rhs; - if (int d = (a->Flags & ImGuiWindowFlags_Popup) - (b->Flags & ImGuiWindowFlags_Popup)) - return d; - if (int d = (a->Flags & ImGuiWindowFlags_Tooltip) - (b->Flags & ImGuiWindowFlags_Tooltip)) - return d; - return (a->BeginOrderWithinParent - b->BeginOrderWithinParent); -} - -static void AddWindowToSortBuffer(ImVector* out_sorted_windows, ImGuiWindow* window) -{ - out_sorted_windows->push_back(window); - if (window->Active) - { - int count = window->DC.ChildWindows.Size; - if (count > 1) - ImQsort(window->DC.ChildWindows.Data, (size_t)count, sizeof(ImGuiWindow*), ChildWindowComparer); - for (int i = 0; i < count; i++) - { - ImGuiWindow* child = window->DC.ChildWindows[i]; - if (child->Active) - AddWindowToSortBuffer(out_sorted_windows, child); - } - } -} - -static void AddDrawListToDrawData(ImVector* out_list, ImDrawList* draw_list) -{ - if (draw_list->CmdBuffer.empty()) - return; - - // Remove trailing command if unused - ImDrawCmd& last_cmd = draw_list->CmdBuffer.back(); - if (last_cmd.ElemCount == 0 && last_cmd.UserCallback == NULL) - { - draw_list->CmdBuffer.pop_back(); - if (draw_list->CmdBuffer.empty()) - return; - } - - // Draw list sanity check. Detect mismatch between PrimReserve() calls and incrementing _VtxCurrentIdx, _VtxWritePtr etc. - // May trigger for you if you are using PrimXXX functions incorrectly. - IM_ASSERT(draw_list->VtxBuffer.Size == 0 || draw_list->_VtxWritePtr == draw_list->VtxBuffer.Data + draw_list->VtxBuffer.Size); - IM_ASSERT(draw_list->IdxBuffer.Size == 0 || draw_list->_IdxWritePtr == draw_list->IdxBuffer.Data + draw_list->IdxBuffer.Size); - if (!(draw_list->Flags & ImDrawListFlags_AllowVtxOffset)) - IM_ASSERT((int)draw_list->_VtxCurrentIdx == draw_list->VtxBuffer.Size); - - // Check that draw_list doesn't use more vertices than indexable (default ImDrawIdx = unsigned short = 2 bytes = 64K vertices per ImDrawList = per window) - // If this assert triggers because you are drawing lots of stuff manually: - // - First, make sure you are coarse clipping yourself and not trying to draw many things outside visible bounds. - // Be mindful that the ImDrawList API doesn't filter vertices. Use the Metrics window to inspect draw list contents. - // - If you want large meshes with more than 64K vertices, you can either: - // (A) Handle the ImDrawCmd::VtxOffset value in your renderer back-end, and set 'io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset'. - // Most example back-ends already support this from 1.71. Pre-1.71 back-ends won't. - // Some graphics API such as GL ES 1/2 don't have a way to offset the starting vertex so it is not supported for them. - // (B) Or handle 32-bit indices in your renderer back-end, and uncomment '#define ImDrawIdx unsigned int' line in imconfig.h. - // Most example back-ends already support this. For example, the OpenGL example code detect index size at compile-time: - // glDrawElements(GL_TRIANGLES, (GLsizei)pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, idx_buffer_offset); - // Your own engine or render API may use different parameters or function calls to specify index sizes. - // 2 and 4 bytes indices are generally supported by most graphics API. - // - If for some reason neither of those solutions works for you, a workaround is to call BeginChild()/EndChild() before reaching - // the 64K limit to split your draw commands in multiple draw lists. - if (sizeof(ImDrawIdx) == 2) - IM_ASSERT(draw_list->_VtxCurrentIdx < (1 << 16) && "Too many vertices in ImDrawList using 16-bit indices. Read comment above"); - - out_list->push_back(draw_list); -} - -static void AddWindowToDrawData(ImVector* out_render_list, ImGuiWindow* window) -{ - ImGuiContext& g = *GImGui; - g.IO.MetricsRenderWindows++; - AddDrawListToDrawData(out_render_list, window->DrawList); - for (int i = 0; i < window->DC.ChildWindows.Size; i++) - { - ImGuiWindow* child = window->DC.ChildWindows[i]; - if (IsWindowActiveAndVisible(child)) // clipped children may have been marked not active - AddWindowToDrawData(out_render_list, child); - } -} - -// Layer is locked for the root window, however child windows may use a different viewport (e.g. extruding menu) -static void AddRootWindowToDrawData(ImGuiWindow* window) -{ - ImGuiContext& g = *GImGui; - int layer = (window->Flags & ImGuiWindowFlags_Tooltip) ? 1 : 0; - AddWindowToDrawData(&g.DrawDataBuilder.Layers[layer], window); -} - -void ImDrawDataBuilder::FlattenIntoSingleLayer() -{ - int n = Layers[0].Size; - int size = n; - for (int i = 1; i < IM_ARRAYSIZE(Layers); i++) - size += Layers[i].Size; - Layers[0].resize(size); - for (int layer_n = 1; layer_n < IM_ARRAYSIZE(Layers); layer_n++) - { - ImVector& layer = Layers[layer_n]; - if (layer.empty()) - continue; - memcpy(&Layers[0][n], &layer[0], layer.Size * sizeof(ImDrawList*)); - n += layer.Size; - layer.resize(0); - } -} - -static void SetupDrawData(ImVector* draw_lists, ImDrawData* draw_data) -{ - ImGuiIO& io = ImGui::GetIO(); - draw_data->Valid = true; - draw_data->CmdLists = (draw_lists->Size > 0) ? draw_lists->Data : NULL; - draw_data->CmdListsCount = draw_lists->Size; - draw_data->TotalVtxCount = draw_data->TotalIdxCount = 0; - draw_data->DisplayPos = ImVec2(0.0f, 0.0f); - draw_data->DisplaySize = io.DisplaySize; - draw_data->FramebufferScale = io.DisplayFramebufferScale; - for (int n = 0; n < draw_lists->Size; n++) - { - draw_data->TotalVtxCount += draw_lists->Data[n]->VtxBuffer.Size; - draw_data->TotalIdxCount += draw_lists->Data[n]->IdxBuffer.Size; - } -} - -// When using this function it is sane to ensure that float are perfectly rounded to integer values, to that e.g. (int)(max.x-min.x) in user's render produce correct result. -void ImGui::PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect) -{ - ImGuiWindow* window = GetCurrentWindow(); - window->DrawList->PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); - window->ClipRect = window->DrawList->_ClipRectStack.back(); -} - -void ImGui::PopClipRect() -{ - ImGuiWindow* window = GetCurrentWindow(); - window->DrawList->PopClipRect(); - window->ClipRect = window->DrawList->_ClipRectStack.back(); -} - -// This is normally called by Render(). You may want to call it directly if you want to avoid calling Render() but the gain will be very minimal. -void ImGui::EndFrame() -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(g.Initialized); - - // Don't process EndFrame() multiple times. - if (g.FrameCountEnded == g.FrameCount) - return; - IM_ASSERT(g.WithinFrameScope && "Forgot to call ImGui::NewFrame()?"); - - ErrorCheckEndFrameSanityChecks(); - - // Notify OS when our Input Method Editor cursor has moved (e.g. CJK inputs using Microsoft IME) - if (g.IO.ImeSetInputScreenPosFn && (g.PlatformImeLastPos.x == FLT_MAX || ImLengthSqr(g.PlatformImeLastPos - g.PlatformImePos) > 0.0001f)) - { - g.IO.ImeSetInputScreenPosFn((int)g.PlatformImePos.x, (int)g.PlatformImePos.y); - g.PlatformImeLastPos = g.PlatformImePos; - } - - // Hide implicit/fallback "Debug" window if it hasn't been used - g.WithinFrameScopeWithImplicitWindow = false; - if (g.CurrentWindow && !g.CurrentWindow->WriteAccessed) - g.CurrentWindow->Active = false; - End(); - - // Show CTRL+TAB list window - if (g.NavWindowingTarget != NULL) - NavUpdateWindowingOverlay(); - - // Drag and Drop: Elapse payload (if delivered, or if source stops being submitted) - if (g.DragDropActive) - { - bool is_delivered = g.DragDropPayload.Delivery; - bool is_elapsed = (g.DragDropPayload.DataFrameCount + 1 < g.FrameCount) && ((g.DragDropSourceFlags & ImGuiDragDropFlags_SourceAutoExpirePayload) || !IsMouseDown(g.DragDropMouseButton)); - if (is_delivered || is_elapsed) - ClearDragDrop(); - } - - // Drag and Drop: Fallback for source tooltip. This is not ideal but better than nothing. - if (g.DragDropActive && g.DragDropSourceFrameCount < g.FrameCount) - { - g.DragDropWithinSource = true; - SetTooltip("..."); - g.DragDropWithinSource = false; - } - - // End frame - g.WithinFrameScope = false; - g.FrameCountEnded = g.FrameCount; - - // Initiate moving window + handle left-click and right-click focus - UpdateMouseMovingWindowEndFrame(); - - // Sort the window list so that all child windows are after their parent - // We cannot do that on FocusWindow() because childs may not exist yet - g.WindowsTempSortBuffer.resize(0); - g.WindowsTempSortBuffer.reserve(g.Windows.Size); - for (int i = 0; i != g.Windows.Size; i++) - { - ImGuiWindow* window = g.Windows[i]; - if (window->Active && (window->Flags & ImGuiWindowFlags_ChildWindow)) // if a child is active its parent will add it - continue; - AddWindowToSortBuffer(&g.WindowsTempSortBuffer, window); - } - - // This usually assert if there is a mismatch between the ImGuiWindowFlags_ChildWindow / ParentWindow values and DC.ChildWindows[] in parents, aka we've done something wrong. - IM_ASSERT(g.Windows.Size == g.WindowsTempSortBuffer.Size); - g.Windows.swap(g.WindowsTempSortBuffer); - g.IO.MetricsActiveWindows = g.WindowsActiveCount; - - // Unlock font atlas - g.IO.Fonts->Locked = false; - - // Clear Input data for next frame - g.IO.MouseWheel = g.IO.MouseWheelH = 0.0f; - g.IO.InputQueueCharacters.resize(0); - memset(g.IO.NavInputs, 0, sizeof(g.IO.NavInputs)); -} - -void ImGui::Render() -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(g.Initialized); - - if (g.FrameCountEnded != g.FrameCount) - EndFrame(); - g.FrameCountRendered = g.FrameCount; - g.IO.MetricsRenderWindows = 0; - g.DrawDataBuilder.Clear(); - - // Add background ImDrawList - if (!g.BackgroundDrawList.VtxBuffer.empty()) - AddDrawListToDrawData(&g.DrawDataBuilder.Layers[0], &g.BackgroundDrawList); - - // Add ImDrawList to render - ImGuiWindow* windows_to_render_top_most[2]; - windows_to_render_top_most[0] = (g.NavWindowingTarget && !(g.NavWindowingTarget->Flags & ImGuiWindowFlags_NoBringToFrontOnFocus)) ? g.NavWindowingTarget->RootWindow : NULL; - windows_to_render_top_most[1] = (g.NavWindowingTarget ? g.NavWindowingList : NULL); - for (int n = 0; n != g.Windows.Size; n++) - { - ImGuiWindow* window = g.Windows[n]; - if (IsWindowActiveAndVisible(window) && (window->Flags & ImGuiWindowFlags_ChildWindow) == 0 && window != windows_to_render_top_most[0] && window != windows_to_render_top_most[1]) - AddRootWindowToDrawData(window); - } - for (int n = 0; n < IM_ARRAYSIZE(windows_to_render_top_most); n++) - if (windows_to_render_top_most[n] && IsWindowActiveAndVisible(windows_to_render_top_most[n])) // NavWindowingTarget is always temporarily displayed as the top-most window - AddRootWindowToDrawData(windows_to_render_top_most[n]); - g.DrawDataBuilder.FlattenIntoSingleLayer(); - - // Draw software mouse cursor if requested - if (g.IO.MouseDrawCursor) - RenderMouseCursor(&g.ForegroundDrawList, g.IO.MousePos, g.Style.MouseCursorScale, g.MouseCursor, IM_COL32_WHITE, IM_COL32_BLACK, IM_COL32(0, 0, 0, 48)); - - // Add foreground ImDrawList - if (!g.ForegroundDrawList.VtxBuffer.empty()) - AddDrawListToDrawData(&g.DrawDataBuilder.Layers[0], &g.ForegroundDrawList); - - // Setup ImDrawData structure for end-user - SetupDrawData(&g.DrawDataBuilder.Layers[0], &g.DrawData); - g.IO.MetricsRenderVertices = g.DrawData.TotalVtxCount; - g.IO.MetricsRenderIndices = g.DrawData.TotalIdxCount; - - // (Legacy) Call the Render callback function. The current prefer way is to let the user retrieve GetDrawData() and call the render function themselves. -#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS - if (g.DrawData.CmdListsCount > 0 && g.IO.RenderDrawListsFn != NULL) - g.IO.RenderDrawListsFn(&g.DrawData); -#endif -} - -// Calculate text size. Text can be multi-line. Optionally ignore text after a ## marker. -// CalcTextSize("") should return ImVec2(0.0f, g.FontSize) -ImVec2 ImGui::CalcTextSize(const char* text, const char* text_end, bool hide_text_after_double_hash, float wrap_width) -{ - ImGuiContext& g = *GImGui; - - const char* text_display_end; - if (hide_text_after_double_hash) - text_display_end = FindRenderedTextEnd(text, text_end); // Hide anything after a '##' string - else - text_display_end = text_end; - - ImFont* font = g.Font; - const float font_size = g.FontSize; - if (text == text_display_end) - return ImVec2(0.0f, font_size); - ImVec2 text_size = font->CalcTextSizeA(font_size, FLT_MAX, wrap_width, text, text_display_end, NULL); - - // Round - text_size.x = IM_FLOOR(text_size.x + 0.95f); - - return text_size; -} - -// Find window given position, search front-to-back -// FIXME: Note that we have an inconsequential lag here: OuterRectClipped is updated in Begin(), so windows moved programatically -// with SetWindowPos() and not SetNextWindowPos() will have that rectangle lagging by a frame at the time FindHoveredWindow() is -// called, aka before the next Begin(). Moving window isn't affected. -static void FindHoveredWindow() -{ - ImGuiContext& g = *GImGui; - - ImGuiWindow* hovered_window = NULL; - if (g.MovingWindow && !(g.MovingWindow->Flags & ImGuiWindowFlags_NoMouseInputs)) - hovered_window = g.MovingWindow; - - ImVec2 padding_regular = g.Style.TouchExtraPadding; - ImVec2 padding_for_resize_from_edges = g.IO.ConfigWindowsResizeFromEdges ? ImMax(g.Style.TouchExtraPadding, ImVec2(WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS, WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS)) : padding_regular; - for (int i = g.Windows.Size - 1; i >= 0; i--) - { - ImGuiWindow* window = g.Windows[i]; - if (!window->Active || window->Hidden) - continue; - if (window->Flags & ImGuiWindowFlags_NoMouseInputs) - continue; - - // Using the clipped AABB, a child window will typically be clipped by its parent (not always) - ImRect bb(window->OuterRectClipped); - if (window->Flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_AlwaysAutoResize)) - bb.Expand(padding_regular); - else - bb.Expand(padding_for_resize_from_edges); - if (!bb.Contains(g.IO.MousePos)) - continue; - - // Those seemingly unnecessary extra tests are because the code here is a little different in viewport/docking branches. - if (hovered_window == NULL) - hovered_window = window; - if (hovered_window) - break; - } - - g.HoveredWindow = hovered_window; - g.HoveredRootWindow = g.HoveredWindow ? g.HoveredWindow->RootWindow : NULL; - -} - -// Test if mouse cursor is hovering given rectangle -// NB- Rectangle is clipped by our current clip setting -// NB- Expand the rectangle to be generous on imprecise inputs systems (g.Style.TouchExtraPadding) -bool ImGui::IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip) -{ - ImGuiContext& g = *GImGui; - - // Clip - ImRect rect_clipped(r_min, r_max); - if (clip) - rect_clipped.ClipWith(g.CurrentWindow->ClipRect); - - // Expand for touch input - const ImRect rect_for_touch(rect_clipped.Min - g.Style.TouchExtraPadding, rect_clipped.Max + g.Style.TouchExtraPadding); - if (!rect_for_touch.Contains(g.IO.MousePos)) - return false; - return true; -} - -int ImGui::GetKeyIndex(ImGuiKey imgui_key) -{ - IM_ASSERT(imgui_key >= 0 && imgui_key < ImGuiKey_COUNT); - ImGuiContext& g = *GImGui; - return g.IO.KeyMap[imgui_key]; -} - -// Note that dear imgui doesn't know the semantic of each entry of io.KeysDown[]! -// Use your own indices/enums according to how your back-end/engine stored them into io.KeysDown[]! -bool ImGui::IsKeyDown(int user_key_index) -{ - if (user_key_index < 0) - return false; - ImGuiContext& g = *GImGui; - IM_ASSERT(user_key_index >= 0 && user_key_index < IM_ARRAYSIZE(g.IO.KeysDown)); - return g.IO.KeysDown[user_key_index]; -} - -// t0 = previous time (e.g.: g.Time - g.IO.DeltaTime) -// t1 = current time (e.g.: g.Time) -// An event is triggered at: -// t = 0.0f t = repeat_delay, t = repeat_delay + repeat_rate*N -int ImGui::CalcTypematicRepeatAmount(float t0, float t1, float repeat_delay, float repeat_rate) -{ - if (t1 == 0.0f) - return 1; - if (t0 >= t1) - return 0; - if (repeat_rate <= 0.0f) - return (t0 < repeat_delay) && (t1 >= repeat_delay); - const int count_t0 = (t0 < repeat_delay) ? -1 : (int)((t0 - repeat_delay) / repeat_rate); - const int count_t1 = (t1 < repeat_delay) ? -1 : (int)((t1 - repeat_delay) / repeat_rate); - const int count = count_t1 - count_t0; - return count; -} - -int ImGui::GetKeyPressedAmount(int key_index, float repeat_delay, float repeat_rate) -{ - ImGuiContext& g = *GImGui; - if (key_index < 0) - return 0; - IM_ASSERT(key_index >= 0 && key_index < IM_ARRAYSIZE(g.IO.KeysDown)); - const float t = g.IO.KeysDownDuration[key_index]; - return CalcTypematicRepeatAmount(t - g.IO.DeltaTime, t, repeat_delay, repeat_rate); -} - -bool ImGui::IsKeyPressed(int user_key_index, bool repeat) -{ - ImGuiContext& g = *GImGui; - if (user_key_index < 0) - return false; - IM_ASSERT(user_key_index >= 0 && user_key_index < IM_ARRAYSIZE(g.IO.KeysDown)); - const float t = g.IO.KeysDownDuration[user_key_index]; - if (t == 0.0f) - return true; - if (repeat && t > g.IO.KeyRepeatDelay) - return GetKeyPressedAmount(user_key_index, g.IO.KeyRepeatDelay, g.IO.KeyRepeatRate) > 0; - return false; -} - -bool ImGui::IsKeyReleased(int user_key_index) -{ - ImGuiContext& g = *GImGui; - if (user_key_index < 0) return false; - IM_ASSERT(user_key_index >= 0 && user_key_index < IM_ARRAYSIZE(g.IO.KeysDown)); - return g.IO.KeysDownDurationPrev[user_key_index] >= 0.0f && !g.IO.KeysDown[user_key_index]; -} - -bool ImGui::IsMouseDown(ImGuiMouseButton button) -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); - return g.IO.MouseDown[button]; -} - -bool ImGui::IsMouseClicked(ImGuiMouseButton button, bool repeat) -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); - const float t = g.IO.MouseDownDuration[button]; - if (t == 0.0f) - return true; - - if (repeat && t > g.IO.KeyRepeatDelay) - { - // FIXME: 2019/05/03: Our old repeat code was wrong here and led to doubling the repeat rate, which made it an ok rate for repeat on mouse hold. - int amount = CalcTypematicRepeatAmount(t - g.IO.DeltaTime, t, g.IO.KeyRepeatDelay, g.IO.KeyRepeatRate * 0.50f); - if (amount > 0) - return true; - } - return false; -} - -bool ImGui::IsMouseReleased(ImGuiMouseButton button) -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); - return g.IO.MouseReleased[button]; -} - -bool ImGui::IsMouseDoubleClicked(ImGuiMouseButton button) -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); - return g.IO.MouseDoubleClicked[button]; -} - -// [Internal] This doesn't test if the button is pressed -bool ImGui::IsMouseDragPastThreshold(ImGuiMouseButton button, float lock_threshold) -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); - if (lock_threshold < 0.0f) - lock_threshold = g.IO.MouseDragThreshold; - return g.IO.MouseDragMaxDistanceSqr[button] >= lock_threshold * lock_threshold; -} - -bool ImGui::IsMouseDragging(ImGuiMouseButton button, float lock_threshold) -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); - if (!g.IO.MouseDown[button]) - return false; - return IsMouseDragPastThreshold(button, lock_threshold); -} - -ImVec2 ImGui::GetMousePos() -{ - ImGuiContext& g = *GImGui; - return g.IO.MousePos; -} - -// NB: prefer to call right after BeginPopup(). At the time Selectable/MenuItem is activated, the popup is already closed! -ImVec2 ImGui::GetMousePosOnOpeningCurrentPopup() -{ - ImGuiContext& g = *GImGui; - if (g.BeginPopupStack.Size > 0) - return g.OpenPopupStack[g.BeginPopupStack.Size-1].OpenMousePos; - return g.IO.MousePos; -} - -// We typically use ImVec2(-FLT_MAX,-FLT_MAX) to denote an invalid mouse position. -bool ImGui::IsMousePosValid(const ImVec2* mouse_pos) -{ - // The assert is only to silence a false-positive in XCode Static Analysis. - // Because GImGui is not dereferenced in every code path, the static analyzer assume that it may be NULL (which it doesn't for other functions). - IM_ASSERT(GImGui != NULL); - const float MOUSE_INVALID = -256000.0f; - ImVec2 p = mouse_pos ? *mouse_pos : GImGui->IO.MousePos; - return p.x >= MOUSE_INVALID && p.y >= MOUSE_INVALID; -} - -bool ImGui::IsAnyMouseDown() -{ - ImGuiContext& g = *GImGui; - for (int n = 0; n < IM_ARRAYSIZE(g.IO.MouseDown); n++) - if (g.IO.MouseDown[n]) - return true; - return false; -} - -// Return the delta from the initial clicking position while the mouse button is clicked or was just released. -// This is locked and return 0.0f until the mouse moves past a distance threshold at least once. -// NB: This is only valid if IsMousePosValid(). Back-ends in theory should always keep mouse position valid when dragging even outside the client window. -ImVec2 ImGui::GetMouseDragDelta(ImGuiMouseButton button, float lock_threshold) -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); - if (lock_threshold < 0.0f) - lock_threshold = g.IO.MouseDragThreshold; - if (g.IO.MouseDown[button] || g.IO.MouseReleased[button]) - if (g.IO.MouseDragMaxDistanceSqr[button] >= lock_threshold * lock_threshold) - if (IsMousePosValid(&g.IO.MousePos) && IsMousePosValid(&g.IO.MouseClickedPos[button])) - return g.IO.MousePos - g.IO.MouseClickedPos[button]; - return ImVec2(0.0f, 0.0f); -} - -void ImGui::ResetMouseDragDelta(ImGuiMouseButton button) -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown)); - // NB: We don't need to reset g.IO.MouseDragMaxDistanceSqr - g.IO.MouseClickedPos[button] = g.IO.MousePos; -} - -ImGuiMouseCursor ImGui::GetMouseCursor() -{ - return GImGui->MouseCursor; -} - -void ImGui::SetMouseCursor(ImGuiMouseCursor cursor_type) -{ - GImGui->MouseCursor = cursor_type; -} - -void ImGui::CaptureKeyboardFromApp(bool capture) -{ - GImGui->WantCaptureKeyboardNextFrame = capture ? 1 : 0; -} - -void ImGui::CaptureMouseFromApp(bool capture) -{ - GImGui->WantCaptureMouseNextFrame = capture ? 1 : 0; -} - -bool ImGui::IsItemActive() -{ - ImGuiContext& g = *GImGui; - if (g.ActiveId) - { - ImGuiWindow* window = g.CurrentWindow; - return g.ActiveId == window->DC.LastItemId; - } - return false; -} - -bool ImGui::IsItemActivated() -{ - ImGuiContext& g = *GImGui; - if (g.ActiveId) - { - ImGuiWindow* window = g.CurrentWindow; - if (g.ActiveId == window->DC.LastItemId && g.ActiveIdPreviousFrame != window->DC.LastItemId) - return true; - } - return false; -} - -bool ImGui::IsItemDeactivated() -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - if (window->DC.LastItemStatusFlags & ImGuiItemStatusFlags_HasDeactivated) - return (window->DC.LastItemStatusFlags & ImGuiItemStatusFlags_Deactivated) != 0; - return (g.ActiveIdPreviousFrame == window->DC.LastItemId && g.ActiveIdPreviousFrame != 0 && g.ActiveId != window->DC.LastItemId); -} - -bool ImGui::IsItemDeactivatedAfterEdit() -{ - ImGuiContext& g = *GImGui; - return IsItemDeactivated() && (g.ActiveIdPreviousFrameHasBeenEditedBefore || (g.ActiveId == 0 && g.ActiveIdHasBeenEditedBefore)); -} - -bool ImGui::IsItemFocused() -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - - if (g.NavId == 0 || g.NavDisableHighlight || g.NavId != window->DC.LastItemId) - return false; - return true; -} - -bool ImGui::IsItemClicked(ImGuiMouseButton mouse_button) -{ - return IsMouseClicked(mouse_button) && IsItemHovered(ImGuiHoveredFlags_None); -} - -bool ImGui::IsItemToggledOpen() -{ - ImGuiContext& g = *GImGui; - return (g.CurrentWindow->DC.LastItemStatusFlags & ImGuiItemStatusFlags_ToggledOpen) ? true : false; -} - -bool ImGui::IsItemToggledSelection() -{ - ImGuiContext& g = *GImGui; - return (g.CurrentWindow->DC.LastItemStatusFlags & ImGuiItemStatusFlags_ToggledSelection) ? true : false; -} - -bool ImGui::IsAnyItemHovered() -{ - ImGuiContext& g = *GImGui; - return g.HoveredId != 0 || g.HoveredIdPreviousFrame != 0; -} - -bool ImGui::IsAnyItemActive() -{ - ImGuiContext& g = *GImGui; - return g.ActiveId != 0; -} - -bool ImGui::IsAnyItemFocused() -{ - ImGuiContext& g = *GImGui; - return g.NavId != 0 && !g.NavDisableHighlight; -} - -bool ImGui::IsItemVisible() -{ - ImGuiWindow* window = GetCurrentWindowRead(); - return window->ClipRect.Overlaps(window->DC.LastItemRect); -} - -bool ImGui::IsItemEdited() -{ - ImGuiWindow* window = GetCurrentWindowRead(); - return (window->DC.LastItemStatusFlags & ImGuiItemStatusFlags_Edited) != 0; -} - -// Allow last item to be overlapped by a subsequent item. Both may be activated during the same frame before the later one takes priority. -void ImGui::SetItemAllowOverlap() -{ - ImGuiContext& g = *GImGui; - if (g.HoveredId == g.CurrentWindow->DC.LastItemId) - g.HoveredIdAllowOverlap = true; - if (g.ActiveId == g.CurrentWindow->DC.LastItemId) - g.ActiveIdAllowOverlap = true; -} - -ImVec2 ImGui::GetItemRectMin() -{ - ImGuiWindow* window = GetCurrentWindowRead(); - return window->DC.LastItemRect.Min; -} - -ImVec2 ImGui::GetItemRectMax() -{ - ImGuiWindow* window = GetCurrentWindowRead(); - return window->DC.LastItemRect.Max; -} - -ImVec2 ImGui::GetItemRectSize() -{ - ImGuiWindow* window = GetCurrentWindowRead(); - return window->DC.LastItemRect.GetSize(); -} - -static ImRect GetViewportRect() -{ - ImGuiContext& g = *GImGui; - return ImRect(0.0f, 0.0f, g.IO.DisplaySize.x, g.IO.DisplaySize.y); -} - -bool ImGui::BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, bool border, ImGuiWindowFlags flags) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* parent_window = g.CurrentWindow; - - flags |= ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_ChildWindow; - flags |= (parent_window->Flags & ImGuiWindowFlags_NoMove); // Inherit the NoMove flag - - // Size - const ImVec2 content_avail = GetContentRegionAvail(); - ImVec2 size = ImFloor(size_arg); - const int auto_fit_axises = ((size.x == 0.0f) ? (1 << ImGuiAxis_X) : 0x00) | ((size.y == 0.0f) ? (1 << ImGuiAxis_Y) : 0x00); - if (size.x <= 0.0f) - size.x = ImMax(content_avail.x + size.x, 4.0f); // Arbitrary minimum child size (0.0f causing too much issues) - if (size.y <= 0.0f) - size.y = ImMax(content_avail.y + size.y, 4.0f); - SetNextWindowSize(size); - - // Build up name. If you need to append to a same child from multiple location in the ID stack, use BeginChild(ImGuiID id) with a stable value. - char title[256]; - if (name) - ImFormatString(title, IM_ARRAYSIZE(title), "%s/%s_%08X", parent_window->Name, name, id); - else - ImFormatString(title, IM_ARRAYSIZE(title), "%s/%08X", parent_window->Name, id); - - const float backup_border_size = g.Style.ChildBorderSize; - if (!border) - g.Style.ChildBorderSize = 0.0f; - bool ret = Begin(title, NULL, flags); - g.Style.ChildBorderSize = backup_border_size; - - ImGuiWindow* child_window = g.CurrentWindow; - child_window->ChildId = id; - child_window->AutoFitChildAxises = (ImS8)auto_fit_axises; - - // Set the cursor to handle case where the user called SetNextWindowPos()+BeginChild() manually. - // While this is not really documented/defined, it seems that the expected thing to do. - if (child_window->BeginCount == 1) - parent_window->DC.CursorPos = child_window->Pos; - - // Process navigation-in immediately so NavInit can run on first frame - if (g.NavActivateId == id && !(flags & ImGuiWindowFlags_NavFlattened) && (child_window->DC.NavLayerActiveMask != 0 || child_window->DC.NavHasScroll)) - { - FocusWindow(child_window); - NavInitWindow(child_window, false); - SetActiveID(id+1, child_window); // Steal ActiveId with a dummy id so that key-press won't activate child item - g.ActiveIdSource = ImGuiInputSource_Nav; - } - return ret; -} - -bool ImGui::BeginChild(const char* str_id, const ImVec2& size_arg, bool border, ImGuiWindowFlags extra_flags) -{ - ImGuiWindow* window = GetCurrentWindow(); - return BeginChildEx(str_id, window->GetID(str_id), size_arg, border, extra_flags); -} - -bool ImGui::BeginChild(ImGuiID id, const ImVec2& size_arg, bool border, ImGuiWindowFlags extra_flags) -{ - IM_ASSERT(id != 0); - return BeginChildEx(NULL, id, size_arg, border, extra_flags); -} - -void ImGui::EndChild() -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - - IM_ASSERT(g.WithinEndChild == false); - IM_ASSERT(window->Flags & ImGuiWindowFlags_ChildWindow); // Mismatched BeginChild()/EndChild() calls - - g.WithinEndChild = true; - if (window->BeginCount > 1) - { - End(); - } - else - { - ImVec2 sz = window->Size; - if (window->AutoFitChildAxises & (1 << ImGuiAxis_X)) // Arbitrary minimum zero-ish child size of 4.0f causes less trouble than a 0.0f - sz.x = ImMax(4.0f, sz.x); - if (window->AutoFitChildAxises & (1 << ImGuiAxis_Y)) - sz.y = ImMax(4.0f, sz.y); - End(); - - ImGuiWindow* parent_window = g.CurrentWindow; - ImRect bb(parent_window->DC.CursorPos, parent_window->DC.CursorPos + sz); - ItemSize(sz); - if ((window->DC.NavLayerActiveMask != 0 || window->DC.NavHasScroll) && !(window->Flags & ImGuiWindowFlags_NavFlattened)) - { - ItemAdd(bb, window->ChildId); - RenderNavHighlight(bb, window->ChildId); - - // When browsing a window that has no activable items (scroll only) we keep a highlight on the child - if (window->DC.NavLayerActiveMask == 0 && window == g.NavWindow) - RenderNavHighlight(ImRect(bb.Min - ImVec2(2,2), bb.Max + ImVec2(2,2)), g.NavId, ImGuiNavHighlightFlags_TypeThin); - } - else - { - // Not navigable into - ItemAdd(bb, 0); - } - } - g.WithinEndChild = false; -} - -// Helper to create a child window / scrolling region that looks like a normal widget frame. -bool ImGui::BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags) -{ - ImGuiContext& g = *GImGui; - const ImGuiStyle& style = g.Style; - PushStyleColor(ImGuiCol_ChildBg, style.Colors[ImGuiCol_FrameBg]); - PushStyleVar(ImGuiStyleVar_ChildRounding, style.FrameRounding); - PushStyleVar(ImGuiStyleVar_ChildBorderSize, style.FrameBorderSize); - PushStyleVar(ImGuiStyleVar_WindowPadding, style.FramePadding); - bool ret = BeginChild(id, size, true, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysUseWindowPadding | extra_flags); - PopStyleVar(3); - PopStyleColor(); - return ret; -} - -void ImGui::EndChildFrame() -{ - EndChild(); -} - -static void SetWindowConditionAllowFlags(ImGuiWindow* window, ImGuiCond flags, bool enabled) -{ - window->SetWindowPosAllowFlags = enabled ? (window->SetWindowPosAllowFlags | flags) : (window->SetWindowPosAllowFlags & ~flags); - window->SetWindowSizeAllowFlags = enabled ? (window->SetWindowSizeAllowFlags | flags) : (window->SetWindowSizeAllowFlags & ~flags); - window->SetWindowCollapsedAllowFlags = enabled ? (window->SetWindowCollapsedAllowFlags | flags) : (window->SetWindowCollapsedAllowFlags & ~flags); -} - -ImGuiWindow* ImGui::FindWindowByID(ImGuiID id) -{ - ImGuiContext& g = *GImGui; - return (ImGuiWindow*)g.WindowsById.GetVoidPtr(id); -} - -ImGuiWindow* ImGui::FindWindowByName(const char* name) -{ - ImGuiID id = ImHashStr(name); - return FindWindowByID(id); -} - -static ImGuiWindow* CreateNewWindow(const char* name, ImVec2 size, ImGuiWindowFlags flags) -{ - ImGuiContext& g = *GImGui; - //IMGUI_DEBUG_LOG("CreateNewWindow '%s', flags = 0x%08X\n", name, flags); - - // Create window the first time - ImGuiWindow* window = IM_NEW(ImGuiWindow)(&g, name); - window->Flags = flags; - g.WindowsById.SetVoidPtr(window->ID, window); - - // Default/arbitrary window position. Use SetNextWindowPos() with the appropriate condition flag to change the initial position of a window. - window->Pos = ImVec2(60, 60); - - // User can disable loading and saving of settings. Tooltip and child windows also don't store settings. - if (!(flags & ImGuiWindowFlags_NoSavedSettings)) - if (ImGuiWindowSettings* settings = ImGui::FindWindowSettings(window->ID)) - { - // Retrieve settings from .ini file - window->SettingsOffset = g.SettingsWindows.offset_from_ptr(settings); - SetWindowConditionAllowFlags(window, ImGuiCond_FirstUseEver, false); - window->Pos = ImVec2(settings->Pos.x, settings->Pos.y); - window->Collapsed = settings->Collapsed; - if (settings->Size.x > 0 && settings->Size.y > 0) - size = ImVec2(settings->Size.x, settings->Size.y); - } - window->Size = window->SizeFull = ImFloor(size); - window->DC.CursorStartPos = window->DC.CursorMaxPos = window->Pos; // So first call to CalcContentSize() doesn't return crazy values - - if ((flags & ImGuiWindowFlags_AlwaysAutoResize) != 0) - { - window->AutoFitFramesX = window->AutoFitFramesY = 2; - window->AutoFitOnlyGrows = false; - } - else - { - if (window->Size.x <= 0.0f) - window->AutoFitFramesX = 2; - if (window->Size.y <= 0.0f) - window->AutoFitFramesY = 2; - window->AutoFitOnlyGrows = (window->AutoFitFramesX > 0) || (window->AutoFitFramesY > 0); - } - - g.WindowsFocusOrder.push_back(window); - if (flags & ImGuiWindowFlags_NoBringToFrontOnFocus) - g.Windows.push_front(window); // Quite slow but rare and only once - else - g.Windows.push_back(window); - return window; -} - -static ImVec2 CalcWindowSizeAfterConstraint(ImGuiWindow* window, ImVec2 new_size) -{ - ImGuiContext& g = *GImGui; - if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSizeConstraint) - { - // Using -1,-1 on either X/Y axis to preserve the current size. - ImRect cr = g.NextWindowData.SizeConstraintRect; - new_size.x = (cr.Min.x >= 0 && cr.Max.x >= 0) ? ImClamp(new_size.x, cr.Min.x, cr.Max.x) : window->SizeFull.x; - new_size.y = (cr.Min.y >= 0 && cr.Max.y >= 0) ? ImClamp(new_size.y, cr.Min.y, cr.Max.y) : window->SizeFull.y; - if (g.NextWindowData.SizeCallback) - { - ImGuiSizeCallbackData data; - data.UserData = g.NextWindowData.SizeCallbackUserData; - data.Pos = window->Pos; - data.CurrentSize = window->SizeFull; - data.DesiredSize = new_size; - g.NextWindowData.SizeCallback(&data); - new_size = data.DesiredSize; - } - new_size.x = IM_FLOOR(new_size.x); - new_size.y = IM_FLOOR(new_size.y); - } - - // Minimum size - if (!(window->Flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_AlwaysAutoResize))) - { - ImGuiWindow* window_for_height = window; - new_size = ImMax(new_size, g.Style.WindowMinSize); - new_size.y = ImMax(new_size.y, window_for_height->TitleBarHeight() + window_for_height->MenuBarHeight() + ImMax(0.0f, g.Style.WindowRounding - 1.0f)); // Reduce artifacts with very small windows - } - return new_size; -} - -static ImVec2 CalcWindowContentSize(ImGuiWindow* window) -{ - if (window->Collapsed) - if (window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0) - return window->ContentSize; - if (window->Hidden && window->HiddenFramesCannotSkipItems == 0 && window->HiddenFramesCanSkipItems > 0) - return window->ContentSize; - - ImVec2 sz; - sz.x = IM_FLOOR((window->ContentSizeExplicit.x != 0.0f) ? window->ContentSizeExplicit.x : window->DC.CursorMaxPos.x - window->DC.CursorStartPos.x); - sz.y = IM_FLOOR((window->ContentSizeExplicit.y != 0.0f) ? window->ContentSizeExplicit.y : window->DC.CursorMaxPos.y - window->DC.CursorStartPos.y); - return sz; -} - -static ImVec2 CalcWindowAutoFitSize(ImGuiWindow* window, const ImVec2& size_contents) -{ - ImGuiContext& g = *GImGui; - ImGuiStyle& style = g.Style; - ImVec2 size_decorations = ImVec2(0.0f, window->TitleBarHeight() + window->MenuBarHeight()); - ImVec2 size_pad = window->WindowPadding * 2.0f; - ImVec2 size_desired = size_contents + size_pad + size_decorations; - if (window->Flags & ImGuiWindowFlags_Tooltip) - { - // Tooltip always resize - return size_desired; - } - else - { - // Maximum window size is determined by the viewport size or monitor size - const bool is_popup = (window->Flags & ImGuiWindowFlags_Popup) != 0; - const bool is_menu = (window->Flags & ImGuiWindowFlags_ChildMenu) != 0; - ImVec2 size_min = style.WindowMinSize; - if (is_popup || is_menu) // Popups and menus bypass style.WindowMinSize by default, but we give then a non-zero minimum size to facilitate understanding problematic cases (e.g. empty popups) - size_min = ImMin(size_min, ImVec2(4.0f, 4.0f)); - ImVec2 size_auto_fit = ImClamp(size_desired, size_min, ImMax(size_min, g.IO.DisplaySize - style.DisplaySafeAreaPadding * 2.0f)); - - // When the window cannot fit all contents (either because of constraints, either because screen is too small), - // we are growing the size on the other axis to compensate for expected scrollbar. FIXME: Might turn bigger than ViewportSize-WindowPadding. - ImVec2 size_auto_fit_after_constraint = CalcWindowSizeAfterConstraint(window, size_auto_fit); - bool will_have_scrollbar_x = (size_auto_fit_after_constraint.x - size_pad.x - size_decorations.x < size_contents.x && !(window->Flags & ImGuiWindowFlags_NoScrollbar) && (window->Flags & ImGuiWindowFlags_HorizontalScrollbar)) || (window->Flags & ImGuiWindowFlags_AlwaysHorizontalScrollbar); - bool will_have_scrollbar_y = (size_auto_fit_after_constraint.y - size_pad.y - size_decorations.y < size_contents.y && !(window->Flags & ImGuiWindowFlags_NoScrollbar)) || (window->Flags & ImGuiWindowFlags_AlwaysVerticalScrollbar); - if (will_have_scrollbar_x) - size_auto_fit.y += style.ScrollbarSize; - if (will_have_scrollbar_y) - size_auto_fit.x += style.ScrollbarSize; - return size_auto_fit; - } -} - -ImVec2 ImGui::CalcWindowExpectedSize(ImGuiWindow* window) -{ - ImVec2 size_contents = CalcWindowContentSize(window); - ImVec2 size_auto_fit = CalcWindowAutoFitSize(window, size_contents); - ImVec2 size_final = CalcWindowSizeAfterConstraint(window, size_auto_fit); - return size_final; -} - -static ImGuiCol GetWindowBgColorIdxFromFlags(ImGuiWindowFlags flags) -{ - if (flags & (ImGuiWindowFlags_Tooltip | ImGuiWindowFlags_Popup)) - return ImGuiCol_PopupBg; - if (flags & ImGuiWindowFlags_ChildWindow) - return ImGuiCol_ChildBg; - return ImGuiCol_WindowBg; -} - -static void CalcResizePosSizeFromAnyCorner(ImGuiWindow* window, const ImVec2& corner_target, const ImVec2& corner_norm, ImVec2* out_pos, ImVec2* out_size) -{ - ImVec2 pos_min = ImLerp(corner_target, window->Pos, corner_norm); // Expected window upper-left - ImVec2 pos_max = ImLerp(window->Pos + window->Size, corner_target, corner_norm); // Expected window lower-right - ImVec2 size_expected = pos_max - pos_min; - ImVec2 size_constrained = CalcWindowSizeAfterConstraint(window, size_expected); - *out_pos = pos_min; - if (corner_norm.x == 0.0f) - out_pos->x -= (size_constrained.x - size_expected.x); - if (corner_norm.y == 0.0f) - out_pos->y -= (size_constrained.y - size_expected.y); - *out_size = size_constrained; -} - -struct ImGuiResizeGripDef -{ - ImVec2 CornerPosN; - ImVec2 InnerDir; - int AngleMin12, AngleMax12; -}; - -static const ImGuiResizeGripDef resize_grip_def[4] = -{ - { ImVec2(1,1), ImVec2(-1,-1), 0, 3 }, // Lower-right - { ImVec2(0,1), ImVec2(+1,-1), 3, 6 }, // Lower-left - { ImVec2(0,0), ImVec2(+1,+1), 6, 9 }, // Upper-left (Unused) - { ImVec2(1,0), ImVec2(-1,+1), 9,12 }, // Upper-right (Unused) -}; - -static ImRect GetResizeBorderRect(ImGuiWindow* window, int border_n, float perp_padding, float thickness) -{ - ImRect rect = window->Rect(); - if (thickness == 0.0f) rect.Max -= ImVec2(1,1); - if (border_n == 0) return ImRect(rect.Min.x + perp_padding, rect.Min.y - thickness, rect.Max.x - perp_padding, rect.Min.y + thickness); // Top - if (border_n == 1) return ImRect(rect.Max.x - thickness, rect.Min.y + perp_padding, rect.Max.x + thickness, rect.Max.y - perp_padding); // Right - if (border_n == 2) return ImRect(rect.Min.x + perp_padding, rect.Max.y - thickness, rect.Max.x - perp_padding, rect.Max.y + thickness); // Bottom - if (border_n == 3) return ImRect(rect.Min.x - thickness, rect.Min.y + perp_padding, rect.Min.x + thickness, rect.Max.y - perp_padding); // Left - IM_ASSERT(0); - return ImRect(); -} - -// 0..3: corners (Lower-right, Lower-left, Unused, Unused) -// 4..7: borders (Top, Right, Bottom, Left) -ImGuiID ImGui::GetWindowResizeID(ImGuiWindow* window, int n) -{ - IM_ASSERT(n >= 0 && n <= 7); - ImGuiID id = window->ID; - id = ImHashStr("#RESIZE", 0, id); - id = ImHashData(&n, sizeof(int), id); - return id; -} - -// Handle resize for: Resize Grips, Borders, Gamepad -// Return true when using auto-fit (double click on resize grip) -static bool ImGui::UpdateWindowManualResize(ImGuiWindow* window, const ImVec2& size_auto_fit, int* border_held, int resize_grip_count, ImU32 resize_grip_col[4]) -{ - ImGuiContext& g = *GImGui; - ImGuiWindowFlags flags = window->Flags; - - if ((flags & ImGuiWindowFlags_NoResize) || (flags & ImGuiWindowFlags_AlwaysAutoResize) || window->AutoFitFramesX > 0 || window->AutoFitFramesY > 0) - return false; - if (window->WasActive == false) // Early out to avoid running this code for e.g. an hidden implicit/fallback Debug window. - return false; - - bool ret_auto_fit = false; - const int resize_border_count = g.IO.ConfigWindowsResizeFromEdges ? 4 : 0; - const float grip_draw_size = IM_FLOOR(ImMax(g.FontSize * 1.35f, window->WindowRounding + 1.0f + g.FontSize * 0.2f)); - const float grip_hover_inner_size = IM_FLOOR(grip_draw_size * 0.75f); - const float grip_hover_outer_size = g.IO.ConfigWindowsResizeFromEdges ? WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS : 0.0f; - - ImVec2 pos_target(FLT_MAX, FLT_MAX); - ImVec2 size_target(FLT_MAX, FLT_MAX); - - // Resize grips and borders are on layer 1 - window->DC.NavLayerCurrent = ImGuiNavLayer_Menu; - window->DC.NavLayerCurrentMask = (1 << ImGuiNavLayer_Menu); - - // Manual resize grips - PushID("#RESIZE"); - for (int resize_grip_n = 0; resize_grip_n < resize_grip_count; resize_grip_n++) - { - const ImGuiResizeGripDef& grip = resize_grip_def[resize_grip_n]; - const ImVec2 corner = ImLerp(window->Pos, window->Pos + window->Size, grip.CornerPosN); - - // Using the FlattenChilds button flag we make the resize button accessible even if we are hovering over a child window - ImRect resize_rect(corner - grip.InnerDir * grip_hover_outer_size, corner + grip.InnerDir * grip_hover_inner_size); - if (resize_rect.Min.x > resize_rect.Max.x) ImSwap(resize_rect.Min.x, resize_rect.Max.x); - if (resize_rect.Min.y > resize_rect.Max.y) ImSwap(resize_rect.Min.y, resize_rect.Max.y); - bool hovered, held; - ButtonBehavior(resize_rect, window->GetID(resize_grip_n), &hovered, &held, ImGuiButtonFlags_FlattenChildren | ImGuiButtonFlags_NoNavFocus); - //GetForegroundDrawList(window)->AddRect(resize_rect.Min, resize_rect.Max, IM_COL32(255, 255, 0, 255)); - if (hovered || held) - g.MouseCursor = (resize_grip_n & 1) ? ImGuiMouseCursor_ResizeNESW : ImGuiMouseCursor_ResizeNWSE; - - if (held && g.IO.MouseDoubleClicked[0] && resize_grip_n == 0) - { - // Manual auto-fit when double-clicking - size_target = CalcWindowSizeAfterConstraint(window, size_auto_fit); - ret_auto_fit = true; - ClearActiveID(); - } - else if (held) - { - // Resize from any of the four corners - // We don't use an incremental MouseDelta but rather compute an absolute target size based on mouse position - ImVec2 corner_target = g.IO.MousePos - g.ActiveIdClickOffset + ImLerp(grip.InnerDir * grip_hover_outer_size, grip.InnerDir * -grip_hover_inner_size, grip.CornerPosN); // Corner of the window corresponding to our corner grip - CalcResizePosSizeFromAnyCorner(window, corner_target, grip.CornerPosN, &pos_target, &size_target); - } - if (resize_grip_n == 0 || held || hovered) - resize_grip_col[resize_grip_n] = GetColorU32(held ? ImGuiCol_ResizeGripActive : hovered ? ImGuiCol_ResizeGripHovered : ImGuiCol_ResizeGrip); - } - for (int border_n = 0; border_n < resize_border_count; border_n++) - { - bool hovered, held; - ImRect border_rect = GetResizeBorderRect(window, border_n, grip_hover_inner_size, WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS); - ButtonBehavior(border_rect, window->GetID(border_n + 4), &hovered, &held, ImGuiButtonFlags_FlattenChildren); - //GetForegroundDrawLists(window)->AddRect(border_rect.Min, border_rect.Max, IM_COL32(255, 255, 0, 255)); - if ((hovered && g.HoveredIdTimer > WINDOWS_RESIZE_FROM_EDGES_FEEDBACK_TIMER) || held) - { - g.MouseCursor = (border_n & 1) ? ImGuiMouseCursor_ResizeEW : ImGuiMouseCursor_ResizeNS; - if (held) - *border_held = border_n; - } - if (held) - { - ImVec2 border_target = window->Pos; - ImVec2 border_posn; - if (border_n == 0) { border_posn = ImVec2(0, 0); border_target.y = (g.IO.MousePos.y - g.ActiveIdClickOffset.y + WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS); } // Top - if (border_n == 1) { border_posn = ImVec2(1, 0); border_target.x = (g.IO.MousePos.x - g.ActiveIdClickOffset.x + WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS); } // Right - if (border_n == 2) { border_posn = ImVec2(0, 1); border_target.y = (g.IO.MousePos.y - g.ActiveIdClickOffset.y + WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS); } // Bottom - if (border_n == 3) { border_posn = ImVec2(0, 0); border_target.x = (g.IO.MousePos.x - g.ActiveIdClickOffset.x + WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS); } // Left - CalcResizePosSizeFromAnyCorner(window, border_target, border_posn, &pos_target, &size_target); - } - } - PopID(); - - // Restore nav layer - window->DC.NavLayerCurrent = ImGuiNavLayer_Main; - window->DC.NavLayerCurrentMask = (1 << ImGuiNavLayer_Main); - - // Navigation resize (keyboard/gamepad) - if (g.NavWindowingTarget && g.NavWindowingTarget->RootWindow == window) - { - ImVec2 nav_resize_delta; - if (g.NavInputSource == ImGuiInputSource_NavKeyboard && g.IO.KeyShift) - nav_resize_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_Keyboard, ImGuiInputReadMode_Down); - if (g.NavInputSource == ImGuiInputSource_NavGamepad) - nav_resize_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_PadDPad, ImGuiInputReadMode_Down); - if (nav_resize_delta.x != 0.0f || nav_resize_delta.y != 0.0f) - { - const float NAV_RESIZE_SPEED = 600.0f; - nav_resize_delta *= ImFloor(NAV_RESIZE_SPEED * g.IO.DeltaTime * ImMin(g.IO.DisplayFramebufferScale.x, g.IO.DisplayFramebufferScale.y)); - g.NavWindowingToggleLayer = false; - g.NavDisableMouseHover = true; - resize_grip_col[0] = GetColorU32(ImGuiCol_ResizeGripActive); - // FIXME-NAV: Should store and accumulate into a separate size buffer to handle sizing constraints properly, right now a constraint will make us stuck. - size_target = CalcWindowSizeAfterConstraint(window, window->SizeFull + nav_resize_delta); - } - } - - // Apply back modified position/size to window - if (size_target.x != FLT_MAX) - { - window->SizeFull = size_target; - MarkIniSettingsDirty(window); - } - if (pos_target.x != FLT_MAX) - { - window->Pos = ImFloor(pos_target); - MarkIniSettingsDirty(window); - } - - window->Size = window->SizeFull; - return ret_auto_fit; -} - -static inline void ClampWindowRect(ImGuiWindow* window, const ImRect& rect, const ImVec2& padding) -{ - ImGuiContext& g = *GImGui; - ImVec2 size_for_clamping = (g.IO.ConfigWindowsMoveFromTitleBarOnly && !(window->Flags & ImGuiWindowFlags_NoTitleBar)) ? ImVec2(window->Size.x, window->TitleBarHeight()) : window->Size; - window->Pos = ImMin(rect.Max - padding, ImMax(window->Pos + size_for_clamping, rect.Min + padding) - size_for_clamping); -} - -static void ImGui::RenderWindowOuterBorders(ImGuiWindow* window) -{ - ImGuiContext& g = *GImGui; - float rounding = window->WindowRounding; - float border_size = window->WindowBorderSize; - if (border_size > 0.0f && !(window->Flags & ImGuiWindowFlags_NoBackground)) - window->DrawList->AddRect(window->Pos, window->Pos + window->Size, GetColorU32(ImGuiCol_Border), rounding, ImDrawCornerFlags_All, border_size); - - int border_held = window->ResizeBorderHeld; - if (border_held != -1) - { - struct ImGuiResizeBorderDef - { - ImVec2 InnerDir; - ImVec2 CornerPosN1, CornerPosN2; - float OuterAngle; - }; - static const ImGuiResizeBorderDef resize_border_def[4] = - { - { ImVec2(0,+1), ImVec2(0,0), ImVec2(1,0), IM_PI*1.50f }, // Top - { ImVec2(-1,0), ImVec2(1,0), ImVec2(1,1), IM_PI*0.00f }, // Right - { ImVec2(0,-1), ImVec2(1,1), ImVec2(0,1), IM_PI*0.50f }, // Bottom - { ImVec2(+1,0), ImVec2(0,1), ImVec2(0,0), IM_PI*1.00f } // Left - }; - const ImGuiResizeBorderDef& def = resize_border_def[border_held]; - ImRect border_r = GetResizeBorderRect(window, border_held, rounding, 0.0f); - window->DrawList->PathArcTo(ImLerp(border_r.Min, border_r.Max, def.CornerPosN1) + ImVec2(0.5f, 0.5f) + def.InnerDir * rounding, rounding, def.OuterAngle - IM_PI*0.25f, def.OuterAngle); - window->DrawList->PathArcTo(ImLerp(border_r.Min, border_r.Max, def.CornerPosN2) + ImVec2(0.5f, 0.5f) + def.InnerDir * rounding, rounding, def.OuterAngle, def.OuterAngle + IM_PI*0.25f); - window->DrawList->PathStroke(GetColorU32(ImGuiCol_SeparatorActive), false, ImMax(2.0f, border_size)); // Thicker than usual - } - if (g.Style.FrameBorderSize > 0 && !(window->Flags & ImGuiWindowFlags_NoTitleBar)) - { - float y = window->Pos.y + window->TitleBarHeight() - 1; - window->DrawList->AddLine(ImVec2(window->Pos.x + border_size, y), ImVec2(window->Pos.x + window->Size.x - border_size, y), GetColorU32(ImGuiCol_Border), g.Style.FrameBorderSize); - } -} - -// Draw background and borders -// Draw and handle scrollbars -void ImGui::RenderWindowDecorations(ImGuiWindow* window, const ImRect& title_bar_rect, bool title_bar_is_highlight, int resize_grip_count, const ImU32 resize_grip_col[4], float resize_grip_draw_size) -{ - ImGuiContext& g = *GImGui; - ImGuiStyle& style = g.Style; - ImGuiWindowFlags flags = window->Flags; - - // Ensure that ScrollBar doesn't read last frame's SkipItems - window->SkipItems = false; - - // Draw window + handle manual resize - // As we highlight the title bar when want_focus is set, multiple reappearing windows will have have their title bar highlighted on their reappearing frame. - const float window_rounding = window->WindowRounding; - const float window_border_size = window->WindowBorderSize; - if (window->Collapsed) - { - // Title bar only - float backup_border_size = style.FrameBorderSize; - g.Style.FrameBorderSize = window->WindowBorderSize; - ImU32 title_bar_col = GetColorU32((title_bar_is_highlight && !g.NavDisableHighlight) ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBgCollapsed); - RenderFrame(title_bar_rect.Min, title_bar_rect.Max, title_bar_col, true, window_rounding); - g.Style.FrameBorderSize = backup_border_size; - } - else - { - // Window background - if (!(flags & ImGuiWindowFlags_NoBackground)) - { - ImU32 bg_col = GetColorU32(GetWindowBgColorIdxFromFlags(flags)); - bool override_alpha = false; - float alpha = 1.0f; - if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasBgAlpha) - { - alpha = g.NextWindowData.BgAlphaVal; - override_alpha = true; - } - if (override_alpha) - bg_col = (bg_col & ~IM_COL32_A_MASK) | (IM_F32_TO_INT8_SAT(alpha) << IM_COL32_A_SHIFT); - window->DrawList->AddRectFilled(window->Pos + ImVec2(0, window->TitleBarHeight()), window->Pos + window->Size, bg_col, window_rounding, (flags & ImGuiWindowFlags_NoTitleBar) ? ImDrawCornerFlags_All : ImDrawCornerFlags_Bot); - } - - // Title bar - if (!(flags & ImGuiWindowFlags_NoTitleBar)) - { - ImU32 title_bar_col = GetColorU32(title_bar_is_highlight ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBg); - window->DrawList->AddRectFilled(title_bar_rect.Min, title_bar_rect.Max, title_bar_col, window_rounding, ImDrawCornerFlags_Top); - } - - // Menu bar - if (flags & ImGuiWindowFlags_MenuBar) - { - ImRect menu_bar_rect = window->MenuBarRect(); - menu_bar_rect.ClipWith(window->Rect()); // Soft clipping, in particular child window don't have minimum size covering the menu bar so this is useful for them. - window->DrawList->AddRectFilled(menu_bar_rect.Min + ImVec2(window_border_size, 0), menu_bar_rect.Max - ImVec2(window_border_size, 0), GetColorU32(ImGuiCol_MenuBarBg), (flags & ImGuiWindowFlags_NoTitleBar) ? window_rounding : 0.0f, ImDrawCornerFlags_Top); - if (style.FrameBorderSize > 0.0f && menu_bar_rect.Max.y < window->Pos.y + window->Size.y) - window->DrawList->AddLine(menu_bar_rect.GetBL(), menu_bar_rect.GetBR(), GetColorU32(ImGuiCol_Border), style.FrameBorderSize); - } - - // Scrollbars - if (window->ScrollbarX) - Scrollbar(ImGuiAxis_X); - if (window->ScrollbarY) - Scrollbar(ImGuiAxis_Y); - - // Render resize grips (after their input handling so we don't have a frame of latency) - if (!(flags & ImGuiWindowFlags_NoResize)) - { - for (int resize_grip_n = 0; resize_grip_n < resize_grip_count; resize_grip_n++) - { - const ImGuiResizeGripDef& grip = resize_grip_def[resize_grip_n]; - const ImVec2 corner = ImLerp(window->Pos, window->Pos + window->Size, grip.CornerPosN); - window->DrawList->PathLineTo(corner + grip.InnerDir * ((resize_grip_n & 1) ? ImVec2(window_border_size, resize_grip_draw_size) : ImVec2(resize_grip_draw_size, window_border_size))); - window->DrawList->PathLineTo(corner + grip.InnerDir * ((resize_grip_n & 1) ? ImVec2(resize_grip_draw_size, window_border_size) : ImVec2(window_border_size, resize_grip_draw_size))); - window->DrawList->PathArcToFast(ImVec2(corner.x + grip.InnerDir.x * (window_rounding + window_border_size), corner.y + grip.InnerDir.y * (window_rounding + window_border_size)), window_rounding, grip.AngleMin12, grip.AngleMax12); - window->DrawList->PathFillConvex(resize_grip_col[resize_grip_n]); - } - } - - // Borders - RenderWindowOuterBorders(window); - } -} - -// Render title text, collapse button, close button -void ImGui::RenderWindowTitleBarContents(ImGuiWindow* window, const ImRect& title_bar_rect, const char* name, bool* p_open) -{ - ImGuiContext& g = *GImGui; - ImGuiStyle& style = g.Style; - ImGuiWindowFlags flags = window->Flags; - - const bool has_close_button = (p_open != NULL); - const bool has_collapse_button = !(flags & ImGuiWindowFlags_NoCollapse) && (style.WindowMenuButtonPosition != ImGuiDir_None); - - // Close & Collapse button are on the Menu NavLayer and don't default focus (unless there's nothing else on that layer) - const ImGuiItemFlags item_flags_backup = window->DC.ItemFlags; - window->DC.ItemFlags |= ImGuiItemFlags_NoNavDefaultFocus; - window->DC.NavLayerCurrent = ImGuiNavLayer_Menu; - window->DC.NavLayerCurrentMask = (1 << ImGuiNavLayer_Menu); - - // Layout buttons - // FIXME: Would be nice to generalize the subtleties expressed here into reusable code. - float pad_l = style.FramePadding.x; - float pad_r = style.FramePadding.x; - float button_sz = g.FontSize; - ImVec2 close_button_pos; - ImVec2 collapse_button_pos; - if (has_close_button) - { - pad_r += button_sz; - close_button_pos = ImVec2(title_bar_rect.Max.x - pad_r - style.FramePadding.x, title_bar_rect.Min.y); - } - if (has_collapse_button && style.WindowMenuButtonPosition == ImGuiDir_Right) - { - pad_r += button_sz; - collapse_button_pos = ImVec2(title_bar_rect.Max.x - pad_r - style.FramePadding.x, title_bar_rect.Min.y); - } - if (has_collapse_button && style.WindowMenuButtonPosition == ImGuiDir_Left) - { - collapse_button_pos = ImVec2(title_bar_rect.Min.x + pad_l - style.FramePadding.x, title_bar_rect.Min.y); - pad_l += button_sz; - } - - // Collapse button (submitting first so it gets priority when choosing a navigation init fallback) - if (has_collapse_button) - if (CollapseButton(window->GetID("#COLLAPSE"), collapse_button_pos)) - window->WantCollapseToggle = true; // Defer actual collapsing to next frame as we are too far in the Begin() function - - // Close button - if (has_close_button) - if (CloseButton(window->GetID("#CLOSE"), close_button_pos)) - *p_open = false; - - window->DC.NavLayerCurrent = ImGuiNavLayer_Main; - window->DC.NavLayerCurrentMask = (1 << ImGuiNavLayer_Main); - window->DC.ItemFlags = item_flags_backup; - - // Title bar text (with: horizontal alignment, avoiding collapse/close button, optional "unsaved document" marker) - // FIXME: Refactor text alignment facilities along with RenderText helpers, this is WAY too much messy code.. - const char* UNSAVED_DOCUMENT_MARKER = "*"; - const float marker_size_x = (flags & ImGuiWindowFlags_UnsavedDocument) ? CalcTextSize(UNSAVED_DOCUMENT_MARKER, NULL, false).x : 0.0f; - const ImVec2 text_size = CalcTextSize(name, NULL, true) + ImVec2(marker_size_x, 0.0f); - - // As a nice touch we try to ensure that centered title text doesn't get affected by visibility of Close/Collapse button, - // while uncentered title text will still reach edges correct. - if (pad_l > style.FramePadding.x) - pad_l += g.Style.ItemInnerSpacing.x; - if (pad_r > style.FramePadding.x) - pad_r += g.Style.ItemInnerSpacing.x; - if (style.WindowTitleAlign.x > 0.0f && style.WindowTitleAlign.x < 1.0f) - { - float centerness = ImSaturate(1.0f - ImFabs(style.WindowTitleAlign.x - 0.5f) * 2.0f); // 0.0f on either edges, 1.0f on center - float pad_extend = ImMin(ImMax(pad_l, pad_r), title_bar_rect.GetWidth() - pad_l - pad_r - text_size.x); - pad_l = ImMax(pad_l, pad_extend * centerness); - pad_r = ImMax(pad_r, pad_extend * centerness); - } - - ImRect layout_r(title_bar_rect.Min.x + pad_l, title_bar_rect.Min.y, title_bar_rect.Max.x - pad_r, title_bar_rect.Max.y); - ImRect clip_r(layout_r.Min.x, layout_r.Min.y, layout_r.Max.x + g.Style.ItemInnerSpacing.x, layout_r.Max.y); - //if (g.IO.KeyCtrl) window->DrawList->AddRect(layout_r.Min, layout_r.Max, IM_COL32(255, 128, 0, 255)); // [DEBUG] - RenderTextClipped(layout_r.Min, layout_r.Max, name, NULL, &text_size, style.WindowTitleAlign, &clip_r); - if (flags & ImGuiWindowFlags_UnsavedDocument) - { - ImVec2 marker_pos = ImVec2(ImMax(layout_r.Min.x, layout_r.Min.x + (layout_r.GetWidth() - text_size.x) * style.WindowTitleAlign.x) + text_size.x, layout_r.Min.y) + ImVec2(2 - marker_size_x, 0.0f); - ImVec2 off = ImVec2(0.0f, IM_FLOOR(-g.FontSize * 0.25f)); - RenderTextClipped(marker_pos + off, layout_r.Max + off, UNSAVED_DOCUMENT_MARKER, NULL, NULL, ImVec2(0, style.WindowTitleAlign.y), &clip_r); - } -} - -void ImGui::UpdateWindowParentAndRootLinks(ImGuiWindow* window, ImGuiWindowFlags flags, ImGuiWindow* parent_window) -{ - window->ParentWindow = parent_window; - window->RootWindow = window->RootWindowForTitleBarHighlight = window->RootWindowForNav = window; - if (parent_window && (flags & ImGuiWindowFlags_ChildWindow) && !(flags & ImGuiWindowFlags_Tooltip)) - window->RootWindow = parent_window->RootWindow; - if (parent_window && !(flags & ImGuiWindowFlags_Modal) && (flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_Popup))) - window->RootWindowForTitleBarHighlight = parent_window->RootWindowForTitleBarHighlight; - while (window->RootWindowForNav->Flags & ImGuiWindowFlags_NavFlattened) - { - IM_ASSERT(window->RootWindowForNav->ParentWindow != NULL); - window->RootWindowForNav = window->RootWindowForNav->ParentWindow; - } -} - -// Push a new Dear ImGui window to add widgets to. -// - A default window called "Debug" is automatically stacked at the beginning of every frame so you can use widgets without explicitly calling a Begin/End pair. -// - Begin/End can be called multiple times during the frame with the same window name to append content. -// - The window name is used as a unique identifier to preserve window information across frames (and save rudimentary information to the .ini file). -// You can use the "##" or "###" markers to use the same label with different id, or same id with different label. See documentation at the top of this file. -// - Return false when window is collapsed, so you can early out in your code. You always need to call ImGui::End() even if false is returned. -// - Passing 'bool* p_open' displays a Close button on the upper-right corner of the window, the pointed value will be set to false when the button is pressed. -bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) -{ - ImGuiContext& g = *GImGui; - const ImGuiStyle& style = g.Style; - IM_ASSERT(name != NULL && name[0] != '\0'); // Window name required - IM_ASSERT(g.WithinFrameScope); // Forgot to call ImGui::NewFrame() - IM_ASSERT(g.FrameCountEnded != g.FrameCount); // Called ImGui::Render() or ImGui::EndFrame() and haven't called ImGui::NewFrame() again yet - - // Find or create - ImGuiWindow* window = FindWindowByName(name); - const bool window_just_created = (window == NULL); - if (window_just_created) - { - ImVec2 size_on_first_use = (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSize) ? g.NextWindowData.SizeVal : ImVec2(0.0f, 0.0f); // Any condition flag will do since we are creating a new window here. - window = CreateNewWindow(name, size_on_first_use, flags); - } - - // Automatically disable manual moving/resizing when NoInputs is set - if ((flags & ImGuiWindowFlags_NoInputs) == ImGuiWindowFlags_NoInputs) - flags |= ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize; - - if (flags & ImGuiWindowFlags_NavFlattened) - IM_ASSERT(flags & ImGuiWindowFlags_ChildWindow); - - const int current_frame = g.FrameCount; - const bool first_begin_of_the_frame = (window->LastFrameActive != current_frame); - window->IsFallbackWindow = (g.CurrentWindowStack.Size == 0 && g.WithinFrameScopeWithImplicitWindow); - - // Update the Appearing flag - bool window_just_activated_by_user = (window->LastFrameActive < current_frame - 1); // Not using !WasActive because the implicit "Debug" window would always toggle off->on - const bool window_just_appearing_after_hidden_for_resize = (window->HiddenFramesCannotSkipItems > 0); - if (flags & ImGuiWindowFlags_Popup) - { - ImGuiPopupData& popup_ref = g.OpenPopupStack[g.BeginPopupStack.Size]; - window_just_activated_by_user |= (window->PopupId != popup_ref.PopupId); // We recycle popups so treat window as activated if popup id changed - window_just_activated_by_user |= (window != popup_ref.Window); - } - window->Appearing = (window_just_activated_by_user || window_just_appearing_after_hidden_for_resize); - if (window->Appearing) - SetWindowConditionAllowFlags(window, ImGuiCond_Appearing, true); - - // Update Flags, LastFrameActive, BeginOrderXXX fields - if (first_begin_of_the_frame) - { - window->Flags = (ImGuiWindowFlags)flags; - window->LastFrameActive = current_frame; - window->LastTimeActive = (float)g.Time; - window->BeginOrderWithinParent = 0; - window->BeginOrderWithinContext = (short)(g.WindowsActiveCount++); - } - else - { - flags = window->Flags; - } - - // Parent window is latched only on the first call to Begin() of the frame, so further append-calls can be done from a different window stack - ImGuiWindow* parent_window_in_stack = g.CurrentWindowStack.empty() ? NULL : g.CurrentWindowStack.back(); - ImGuiWindow* parent_window = first_begin_of_the_frame ? ((flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_Popup)) ? parent_window_in_stack : NULL) : window->ParentWindow; - IM_ASSERT(parent_window != NULL || !(flags & ImGuiWindowFlags_ChildWindow)); - - // We allow window memory to be compacted so recreate the base stack when needed. - if (window->IDStack.Size == 0) - window->IDStack.push_back(window->ID); - - // Add to stack - // We intentionally set g.CurrentWindow to NULL to prevent usage until when the viewport is set, then will call SetCurrentWindow() - g.CurrentWindowStack.push_back(window); - g.CurrentWindow = NULL; - ErrorCheckBeginEndCompareStacksSize(window, true); - if (flags & ImGuiWindowFlags_Popup) - { - ImGuiPopupData& popup_ref = g.OpenPopupStack[g.BeginPopupStack.Size]; - popup_ref.Window = window; - g.BeginPopupStack.push_back(popup_ref); - window->PopupId = popup_ref.PopupId; - } - - if (window_just_appearing_after_hidden_for_resize && !(flags & ImGuiWindowFlags_ChildWindow)) - window->NavLastIds[0] = 0; - - // Update ->RootWindow and others pointers (before any possible call to FocusWindow) - if (first_begin_of_the_frame) - UpdateWindowParentAndRootLinks(window, flags, parent_window); - - // Process SetNextWindow***() calls - bool window_pos_set_by_api = false; - bool window_size_x_set_by_api = false, window_size_y_set_by_api = false; - if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasPos) - { - window_pos_set_by_api = (window->SetWindowPosAllowFlags & g.NextWindowData.PosCond) != 0; - if (window_pos_set_by_api && ImLengthSqr(g.NextWindowData.PosPivotVal) > 0.00001f) - { - // May be processed on the next frame if this is our first frame and we are measuring size - // FIXME: Look into removing the branch so everything can go through this same code path for consistency. - window->SetWindowPosVal = g.NextWindowData.PosVal; - window->SetWindowPosPivot = g.NextWindowData.PosPivotVal; - window->SetWindowPosAllowFlags &= ~(ImGuiCond_Once | ImGuiCond_FirstUseEver | ImGuiCond_Appearing); - } - else - { - SetWindowPos(window, g.NextWindowData.PosVal, g.NextWindowData.PosCond); - } - } - if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSize) - { - window_size_x_set_by_api = (window->SetWindowSizeAllowFlags & g.NextWindowData.SizeCond) != 0 && (g.NextWindowData.SizeVal.x > 0.0f); - window_size_y_set_by_api = (window->SetWindowSizeAllowFlags & g.NextWindowData.SizeCond) != 0 && (g.NextWindowData.SizeVal.y > 0.0f); - SetWindowSize(window, g.NextWindowData.SizeVal, g.NextWindowData.SizeCond); - } - if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasContentSize) - window->ContentSizeExplicit = g.NextWindowData.ContentSizeVal; - else if (first_begin_of_the_frame) - window->ContentSizeExplicit = ImVec2(0.0f, 0.0f); - if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasCollapsed) - SetWindowCollapsed(window, g.NextWindowData.CollapsedVal, g.NextWindowData.CollapsedCond); - if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasFocus) - FocusWindow(window); - if (window->Appearing) - SetWindowConditionAllowFlags(window, ImGuiCond_Appearing, false); - - // When reusing window again multiple times a frame, just append content (don't need to setup again) - if (first_begin_of_the_frame) - { - // Initialize - const bool window_is_child_tooltip = (flags & ImGuiWindowFlags_ChildWindow) && (flags & ImGuiWindowFlags_Tooltip); // FIXME-WIP: Undocumented behavior of Child+Tooltip for pinned tooltip (#1345) - window->Active = true; - window->HasCloseButton = (p_open != NULL); - window->ClipRect = ImVec4(-FLT_MAX,-FLT_MAX,+FLT_MAX,+FLT_MAX); - window->IDStack.resize(1); - - // Restore buffer capacity when woken from a compacted state, to avoid - if (window->MemoryCompacted) - GcAwakeTransientWindowBuffers(window); - - // Update stored window name when it changes (which can _only_ happen with the "###" operator, so the ID would stay unchanged). - // The title bar always display the 'name' parameter, so we only update the string storage if it needs to be visible to the end-user elsewhere. - bool window_title_visible_elsewhere = false; - if (g.NavWindowingList != NULL && (window->Flags & ImGuiWindowFlags_NoNavFocus) == 0) // Window titles visible when using CTRL+TAB - window_title_visible_elsewhere = true; - if (window_title_visible_elsewhere && !window_just_created && strcmp(name, window->Name) != 0) - { - size_t buf_len = (size_t)window->NameBufLen; - window->Name = ImStrdupcpy(window->Name, &buf_len, name); - window->NameBufLen = (int)buf_len; - } - - // UPDATE CONTENTS SIZE, UPDATE HIDDEN STATUS - - // Update contents size from last frame for auto-fitting (or use explicit size) - window->ContentSize = CalcWindowContentSize(window); - if (window->HiddenFramesCanSkipItems > 0) - window->HiddenFramesCanSkipItems--; - if (window->HiddenFramesCannotSkipItems > 0) - window->HiddenFramesCannotSkipItems--; - - // Hide new windows for one frame until they calculate their size - if (window_just_created && (!window_size_x_set_by_api || !window_size_y_set_by_api)) - window->HiddenFramesCannotSkipItems = 1; - - // Hide popup/tooltip window when re-opening while we measure size (because we recycle the windows) - // We reset Size/ContentSize for reappearing popups/tooltips early in this function, so further code won't be tempted to use the old size. - if (window_just_activated_by_user && (flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_Tooltip)) != 0) - { - window->HiddenFramesCannotSkipItems = 1; - if (flags & ImGuiWindowFlags_AlwaysAutoResize) - { - if (!window_size_x_set_by_api) - window->Size.x = window->SizeFull.x = 0.f; - if (!window_size_y_set_by_api) - window->Size.y = window->SizeFull.y = 0.f; - window->ContentSize = ImVec2(0.f, 0.f); - } - } - - // SELECT VIEWPORT - // FIXME-VIEWPORT: In the docking/viewport branch, this is the point where we select the current viewport (which may affect the style) - SetCurrentWindow(window); - - // LOCK BORDER SIZE AND PADDING FOR THE FRAME (so that altering them doesn't cause inconsistencies) - - if (flags & ImGuiWindowFlags_ChildWindow) - window->WindowBorderSize = style.ChildBorderSize; - else - window->WindowBorderSize = ((flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_Tooltip)) && !(flags & ImGuiWindowFlags_Modal)) ? style.PopupBorderSize : style.WindowBorderSize; - window->WindowPadding = style.WindowPadding; - if ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & (ImGuiWindowFlags_AlwaysUseWindowPadding | ImGuiWindowFlags_Popup)) && window->WindowBorderSize == 0.0f) - window->WindowPadding = ImVec2(0.0f, (flags & ImGuiWindowFlags_MenuBar) ? style.WindowPadding.y : 0.0f); - - // Collapse window by double-clicking on title bar - // At this point we don't have a clipping rectangle setup yet, so we can use the title bar area for hit detection and drawing - if (!(flags & ImGuiWindowFlags_NoTitleBar) && !(flags & ImGuiWindowFlags_NoCollapse)) - { - // We don't use a regular button+id to test for double-click on title bar (mostly due to legacy reason, could be fixed), so verify that we don't have items over the title bar. - ImRect title_bar_rect = window->TitleBarRect(); - if (g.HoveredWindow == window && g.HoveredId == 0 && g.HoveredIdPreviousFrame == 0 && IsMouseHoveringRect(title_bar_rect.Min, title_bar_rect.Max) && g.IO.MouseDoubleClicked[0]) - window->WantCollapseToggle = true; - if (window->WantCollapseToggle) - { - window->Collapsed = !window->Collapsed; - MarkIniSettingsDirty(window); - FocusWindow(window); - } - } - else - { - window->Collapsed = false; - } - window->WantCollapseToggle = false; - - // SIZE - - // Calculate auto-fit size, handle automatic resize - const ImVec2 size_auto_fit = CalcWindowAutoFitSize(window, window->ContentSize); - bool use_current_size_for_scrollbar_x = window_just_created; - bool use_current_size_for_scrollbar_y = window_just_created; - if ((flags & ImGuiWindowFlags_AlwaysAutoResize) && !window->Collapsed) - { - // Using SetNextWindowSize() overrides ImGuiWindowFlags_AlwaysAutoResize, so it can be used on tooltips/popups, etc. - if (!window_size_x_set_by_api) - { - window->SizeFull.x = size_auto_fit.x; - use_current_size_for_scrollbar_x = true; - } - if (!window_size_y_set_by_api) - { - window->SizeFull.y = size_auto_fit.y; - use_current_size_for_scrollbar_y = true; - } - } - else if (window->AutoFitFramesX > 0 || window->AutoFitFramesY > 0) - { - // Auto-fit may only grow window during the first few frames - // We still process initial auto-fit on collapsed windows to get a window width, but otherwise don't honor ImGuiWindowFlags_AlwaysAutoResize when collapsed. - if (!window_size_x_set_by_api && window->AutoFitFramesX > 0) - { - window->SizeFull.x = window->AutoFitOnlyGrows ? ImMax(window->SizeFull.x, size_auto_fit.x) : size_auto_fit.x; - use_current_size_for_scrollbar_x = true; - } - if (!window_size_y_set_by_api && window->AutoFitFramesY > 0) - { - window->SizeFull.y = window->AutoFitOnlyGrows ? ImMax(window->SizeFull.y, size_auto_fit.y) : size_auto_fit.y; - use_current_size_for_scrollbar_y = true; - } - if (!window->Collapsed) - MarkIniSettingsDirty(window); - } - - // Apply minimum/maximum window size constraints and final size - window->SizeFull = CalcWindowSizeAfterConstraint(window, window->SizeFull); - window->Size = window->Collapsed && !(flags & ImGuiWindowFlags_ChildWindow) ? window->TitleBarRect().GetSize() : window->SizeFull; - - // Decoration size - const float decoration_up_height = window->TitleBarHeight() + window->MenuBarHeight(); - - // POSITION - - // Popup latch its initial position, will position itself when it appears next frame - if (window_just_activated_by_user) - { - window->AutoPosLastDirection = ImGuiDir_None; - if ((flags & ImGuiWindowFlags_Popup) != 0 && !window_pos_set_by_api) - window->Pos = g.BeginPopupStack.back().OpenPopupPos; - } - - // Position child window - if (flags & ImGuiWindowFlags_ChildWindow) - { - IM_ASSERT(parent_window && parent_window->Active); - window->BeginOrderWithinParent = (short)parent_window->DC.ChildWindows.Size; - parent_window->DC.ChildWindows.push_back(window); - if (!(flags & ImGuiWindowFlags_Popup) && !window_pos_set_by_api && !window_is_child_tooltip) - window->Pos = parent_window->DC.CursorPos; - } - - const bool window_pos_with_pivot = (window->SetWindowPosVal.x != FLT_MAX && window->HiddenFramesCannotSkipItems == 0); - if (window_pos_with_pivot) - SetWindowPos(window, window->SetWindowPosVal - window->SizeFull * window->SetWindowPosPivot, 0); // Position given a pivot (e.g. for centering) - else if ((flags & ImGuiWindowFlags_ChildMenu) != 0) - window->Pos = FindBestWindowPosForPopup(window); - else if ((flags & ImGuiWindowFlags_Popup) != 0 && !window_pos_set_by_api && window_just_appearing_after_hidden_for_resize) - window->Pos = FindBestWindowPosForPopup(window); - else if ((flags & ImGuiWindowFlags_Tooltip) != 0 && !window_pos_set_by_api && !window_is_child_tooltip) - window->Pos = FindBestWindowPosForPopup(window); - - // Clamp position/size so window stays visible within its viewport or monitor - // Ignore zero-sized display explicitly to avoid losing positions if a window manager reports zero-sized window when initializing or minimizing. - ImRect viewport_rect(GetViewportRect()); - if (!window_pos_set_by_api && !(flags & ImGuiWindowFlags_ChildWindow) && window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0) - { - ImVec2 clamp_padding = ImMax(style.DisplayWindowPadding, style.DisplaySafeAreaPadding); - if (viewport_rect.GetWidth() > 0 && viewport_rect.GetHeight() > 0.0f) - { - ClampWindowRect(window, viewport_rect, clamp_padding); - } - } - window->Pos = ImFloor(window->Pos); - - // Lock window rounding for the frame (so that altering them doesn't cause inconsistencies) - window->WindowRounding = (flags & ImGuiWindowFlags_ChildWindow) ? style.ChildRounding : ((flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiWindowFlags_Modal)) ? style.PopupRounding : style.WindowRounding; - - // Apply window focus (new and reactivated windows are moved to front) - bool want_focus = false; - if (window_just_activated_by_user && !(flags & ImGuiWindowFlags_NoFocusOnAppearing)) - { - if (flags & ImGuiWindowFlags_Popup) - want_focus = true; - else if ((flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_Tooltip)) == 0) - want_focus = true; - } - - // Handle manual resize: Resize Grips, Borders, Gamepad - int border_held = -1; - ImU32 resize_grip_col[4] = {}; - const int resize_grip_count = g.IO.ConfigWindowsResizeFromEdges ? 2 : 1; // Allow resize from lower-left if we have the mouse cursor feedback for it. - const float resize_grip_draw_size = IM_FLOOR(ImMax(g.FontSize * 1.35f, window->WindowRounding + 1.0f + g.FontSize * 0.2f)); - if (!window->Collapsed) - if (UpdateWindowManualResize(window, size_auto_fit, &border_held, resize_grip_count, &resize_grip_col[0])) - use_current_size_for_scrollbar_x = use_current_size_for_scrollbar_y = true; - window->ResizeBorderHeld = (signed char)border_held; - - // SCROLLBAR VISIBILITY - - // Update scrollbar visibility (based on the Size that was effective during last frame or the auto-resized Size). - if (!window->Collapsed) - { - // When reading the current size we need to read it after size constraints have been applied. - // When we use InnerRect here we are intentionally reading last frame size, same for ScrollbarSizes values before we set them again. - ImVec2 avail_size_from_current_frame = ImVec2(window->SizeFull.x, window->SizeFull.y - decoration_up_height); - ImVec2 avail_size_from_last_frame = window->InnerRect.GetSize() + window->ScrollbarSizes; - ImVec2 needed_size_from_last_frame = window_just_created ? ImVec2(0, 0) : window->ContentSize + window->WindowPadding * 2.0f; - float size_x_for_scrollbars = use_current_size_for_scrollbar_x ? avail_size_from_current_frame.x : avail_size_from_last_frame.x; - float size_y_for_scrollbars = use_current_size_for_scrollbar_y ? avail_size_from_current_frame.y : avail_size_from_last_frame.y; - //bool scrollbar_y_from_last_frame = window->ScrollbarY; // FIXME: May want to use that in the ScrollbarX expression? How many pros vs cons? - window->ScrollbarY = (flags & ImGuiWindowFlags_AlwaysVerticalScrollbar) || ((needed_size_from_last_frame.y > size_y_for_scrollbars) && !(flags & ImGuiWindowFlags_NoScrollbar)); - window->ScrollbarX = (flags & ImGuiWindowFlags_AlwaysHorizontalScrollbar) || ((needed_size_from_last_frame.x > size_x_for_scrollbars - (window->ScrollbarY ? style.ScrollbarSize : 0.0f)) && !(flags & ImGuiWindowFlags_NoScrollbar) && (flags & ImGuiWindowFlags_HorizontalScrollbar)); - if (window->ScrollbarX && !window->ScrollbarY) - window->ScrollbarY = (needed_size_from_last_frame.y > size_y_for_scrollbars) && !(flags & ImGuiWindowFlags_NoScrollbar); - window->ScrollbarSizes = ImVec2(window->ScrollbarY ? style.ScrollbarSize : 0.0f, window->ScrollbarX ? style.ScrollbarSize : 0.0f); - } - - // UPDATE RECTANGLES (1- THOSE NOT AFFECTED BY SCROLLING) - // Update various regions. Variables they depends on should be set above in this function. - // We set this up after processing the resize grip so that our rectangles doesn't lag by a frame. - - // Outer rectangle - // Not affected by window border size. Used by: - // - FindHoveredWindow() (w/ extra padding when border resize is enabled) - // - Begin() initial clipping rect for drawing window background and borders. - // - Begin() clipping whole child - const ImRect host_rect = ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & ImGuiWindowFlags_Popup) && !window_is_child_tooltip) ? parent_window->ClipRect : viewport_rect; - const ImRect outer_rect = window->Rect(); - const ImRect title_bar_rect = window->TitleBarRect(); - window->OuterRectClipped = outer_rect; - window->OuterRectClipped.ClipWith(host_rect); - - // Inner rectangle - // Not affected by window border size. Used by: - // - InnerClipRect - // - ScrollToBringRectIntoView() - // - NavUpdatePageUpPageDown() - // - Scrollbar() - window->InnerRect.Min.x = window->Pos.x; - window->InnerRect.Min.y = window->Pos.y + decoration_up_height; - window->InnerRect.Max.x = window->Pos.x + window->Size.x - window->ScrollbarSizes.x; - window->InnerRect.Max.y = window->Pos.y + window->Size.y - window->ScrollbarSizes.y; - - // Inner clipping rectangle. - // Will extend a little bit outside the normal work region. - // This is to allow e.g. Selectable or CollapsingHeader or some separators to cover that space. - // Force round operator last to ensure that e.g. (int)(max.x-min.x) in user's render code produce correct result. - // Note that if our window is collapsed we will end up with an inverted (~null) clipping rectangle which is the correct behavior. - // Affected by window/frame border size. Used by: - // - Begin() initial clip rect - float top_border_size = (((flags & ImGuiWindowFlags_MenuBar) || !(flags & ImGuiWindowFlags_NoTitleBar)) ? style.FrameBorderSize : window->WindowBorderSize); - window->InnerClipRect.Min.x = ImFloor(0.5f + window->InnerRect.Min.x + ImMax(ImFloor(window->WindowPadding.x * 0.5f), window->WindowBorderSize)); - window->InnerClipRect.Min.y = ImFloor(0.5f + window->InnerRect.Min.y + top_border_size); - window->InnerClipRect.Max.x = ImFloor(0.5f + window->InnerRect.Max.x - ImMax(ImFloor(window->WindowPadding.x * 0.5f), window->WindowBorderSize)); - window->InnerClipRect.Max.y = ImFloor(0.5f + window->InnerRect.Max.y - window->WindowBorderSize); - window->InnerClipRect.ClipWithFull(host_rect); - - // Default item width. Make it proportional to window size if window manually resizes - if (window->Size.x > 0.0f && !(flags & ImGuiWindowFlags_Tooltip) && !(flags & ImGuiWindowFlags_AlwaysAutoResize)) - window->ItemWidthDefault = ImFloor(window->Size.x * 0.65f); - else - window->ItemWidthDefault = ImFloor(g.FontSize * 16.0f); - - // SCROLLING - - // Lock down maximum scrolling - // The value of ScrollMax are ahead from ScrollbarX/ScrollbarY which is intentionally using InnerRect from previous rect in order to accommodate - // for right/bottom aligned items without creating a scrollbar. - window->ScrollMax.x = ImMax(0.0f, window->ContentSize.x + window->WindowPadding.x * 2.0f - window->InnerRect.GetWidth()); - window->ScrollMax.y = ImMax(0.0f, window->ContentSize.y + window->WindowPadding.y * 2.0f - window->InnerRect.GetHeight()); - - // Apply scrolling - window->Scroll = CalcNextScrollFromScrollTargetAndClamp(window, true); - window->ScrollTarget = ImVec2(FLT_MAX, FLT_MAX); - - // DRAWING - - // Setup draw list and outer clipping rectangle - window->DrawList->Clear(); - window->DrawList->PushTextureID(g.Font->ContainerAtlas->TexID); - PushClipRect(host_rect.Min, host_rect.Max, false); - - // Draw modal window background (darkens what is behind them, all viewports) - const bool dim_bg_for_modal = (flags & ImGuiWindowFlags_Modal) && window == GetTopMostPopupModal() && window->HiddenFramesCannotSkipItems <= 0; - const bool dim_bg_for_window_list = g.NavWindowingTargetAnim && (window == g.NavWindowingTargetAnim->RootWindow); - if (dim_bg_for_modal || dim_bg_for_window_list) - { - const ImU32 dim_bg_col = GetColorU32(dim_bg_for_modal ? ImGuiCol_ModalWindowDimBg : ImGuiCol_NavWindowingDimBg, g.DimBgRatio); - window->DrawList->AddRectFilled(viewport_rect.Min, viewport_rect.Max, dim_bg_col); - } - - // Draw navigation selection/windowing rectangle background - if (dim_bg_for_window_list && window == g.NavWindowingTargetAnim) - { - ImRect bb = window->Rect(); - bb.Expand(g.FontSize); - if (!bb.Contains(viewport_rect)) // Avoid drawing if the window covers all the viewport anyway - window->DrawList->AddRectFilled(bb.Min, bb.Max, GetColorU32(ImGuiCol_NavWindowingHighlight, g.NavWindowingHighlightAlpha * 0.25f), g.Style.WindowRounding); - } - - // Since 1.71, child window can render their decoration (bg color, border, scrollbars, etc.) within their parent to save a draw call. - // When using overlapping child windows, this will break the assumption that child z-order is mapped to submission order. - // We disable this when the parent window has zero vertices, which is a common pattern leading to laying out multiple overlapping child. - // We also disabled this when we have dimming overlay behind this specific one child. - // FIXME: More code may rely on explicit sorting of overlapping child window and would need to disable this somehow. Please get in contact if you are affected. - { - bool render_decorations_in_parent = false; - if ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & ImGuiWindowFlags_Popup) && !window_is_child_tooltip) - if (window->DrawList->CmdBuffer.back().ElemCount == 0 && parent_window->DrawList->VtxBuffer.Size > 0) - render_decorations_in_parent = true; - if (render_decorations_in_parent) - window->DrawList = parent_window->DrawList; - - // Handle title bar, scrollbar, resize grips and resize borders - const ImGuiWindow* window_to_highlight = g.NavWindowingTarget ? g.NavWindowingTarget : g.NavWindow; - const bool title_bar_is_highlight = want_focus || (window_to_highlight && window->RootWindowForTitleBarHighlight == window_to_highlight->RootWindowForTitleBarHighlight); - RenderWindowDecorations(window, title_bar_rect, title_bar_is_highlight, resize_grip_count, resize_grip_col, resize_grip_draw_size); - - if (render_decorations_in_parent) - window->DrawList = &window->DrawListInst; - } - - // Draw navigation selection/windowing rectangle border - if (g.NavWindowingTargetAnim == window) - { - float rounding = ImMax(window->WindowRounding, g.Style.WindowRounding); - ImRect bb = window->Rect(); - bb.Expand(g.FontSize); - if (bb.Contains(viewport_rect)) // If a window fits the entire viewport, adjust its highlight inward - { - bb.Expand(-g.FontSize - 1.0f); - rounding = window->WindowRounding; - } - window->DrawList->AddRect(bb.Min, bb.Max, GetColorU32(ImGuiCol_NavWindowingHighlight, g.NavWindowingHighlightAlpha), rounding, ~0, 3.0f); - } - - // UPDATE RECTANGLES (2- THOSE AFFECTED BY SCROLLING) - - // Work rectangle. - // Affected by window padding and border size. Used by: - // - Columns() for right-most edge - // - TreeNode(), CollapsingHeader() for right-most edge - // - BeginTabBar() for right-most edge - const bool allow_scrollbar_x = !(flags & ImGuiWindowFlags_NoScrollbar) && (flags & ImGuiWindowFlags_HorizontalScrollbar); - const bool allow_scrollbar_y = !(flags & ImGuiWindowFlags_NoScrollbar); - const float work_rect_size_x = (window->ContentSizeExplicit.x != 0.0f ? window->ContentSizeExplicit.x : ImMax(allow_scrollbar_x ? window->ContentSize.x : 0.0f, window->Size.x - window->WindowPadding.x * 2.0f - window->ScrollbarSizes.x)); - const float work_rect_size_y = (window->ContentSizeExplicit.y != 0.0f ? window->ContentSizeExplicit.y : ImMax(allow_scrollbar_y ? window->ContentSize.y : 0.0f, window->Size.y - window->WindowPadding.y * 2.0f - decoration_up_height - window->ScrollbarSizes.y)); - window->WorkRect.Min.x = ImFloor(window->InnerRect.Min.x - window->Scroll.x + ImMax(window->WindowPadding.x, window->WindowBorderSize)); - window->WorkRect.Min.y = ImFloor(window->InnerRect.Min.y - window->Scroll.y + ImMax(window->WindowPadding.y, window->WindowBorderSize)); - window->WorkRect.Max.x = window->WorkRect.Min.x + work_rect_size_x; - window->WorkRect.Max.y = window->WorkRect.Min.y + work_rect_size_y; - - // [LEGACY] Content Region - // FIXME-OBSOLETE: window->ContentRegionRect.Max is currently very misleading / partly faulty, but some BeginChild() patterns relies on it. - // Used by: - // - Mouse wheel scrolling + many other things - window->ContentRegionRect.Min.x = window->Pos.x - window->Scroll.x + window->WindowPadding.x; - window->ContentRegionRect.Min.y = window->Pos.y - window->Scroll.y + window->WindowPadding.y + decoration_up_height; - window->ContentRegionRect.Max.x = window->ContentRegionRect.Min.x + (window->ContentSizeExplicit.x != 0.0f ? window->ContentSizeExplicit.x : (window->Size.x - window->WindowPadding.x * 2.0f - window->ScrollbarSizes.x)); - window->ContentRegionRect.Max.y = window->ContentRegionRect.Min.y + (window->ContentSizeExplicit.y != 0.0f ? window->ContentSizeExplicit.y : (window->Size.y - window->WindowPadding.y * 2.0f - decoration_up_height - window->ScrollbarSizes.y)); - - // Setup drawing context - // (NB: That term "drawing context / DC" lost its meaning a long time ago. Initially was meant to hold transient data only. Nowadays difference between window-> and window->DC-> is dubious.) - window->DC.Indent.x = 0.0f + window->WindowPadding.x - window->Scroll.x; - window->DC.GroupOffset.x = 0.0f; - window->DC.ColumnsOffset.x = 0.0f; - window->DC.CursorStartPos = window->Pos + ImVec2(window->DC.Indent.x + window->DC.ColumnsOffset.x, decoration_up_height + window->WindowPadding.y - window->Scroll.y); - window->DC.CursorPos = window->DC.CursorStartPos; - window->DC.CursorPosPrevLine = window->DC.CursorPos; - window->DC.CursorMaxPos = window->DC.CursorStartPos; - window->DC.CurrLineSize = window->DC.PrevLineSize = ImVec2(0.0f, 0.0f); - window->DC.CurrLineTextBaseOffset = window->DC.PrevLineTextBaseOffset = 0.0f; - - window->DC.NavLayerCurrent = ImGuiNavLayer_Main; - window->DC.NavLayerCurrentMask = (1 << ImGuiNavLayer_Main); - window->DC.NavLayerActiveMask = window->DC.NavLayerActiveMaskNext; - window->DC.NavLayerActiveMaskNext = 0x00; - window->DC.NavFocusScopeIdCurrent = parent_window ? parent_window->DC.NavFocusScopeIdCurrent : 0; - window->DC.NavHideHighlightOneFrame = false; - window->DC.NavHasScroll = (window->ScrollMax.y > 0.0f); - - window->DC.MenuBarAppending = false; - window->DC.MenuBarOffset.x = ImMax(ImMax(window->WindowPadding.x, style.ItemSpacing.x), g.NextWindowData.MenuBarOffsetMinVal.x); - window->DC.MenuBarOffset.y = g.NextWindowData.MenuBarOffsetMinVal.y; - window->DC.MenuColumns.Update(3, style.ItemSpacing.x, window_just_activated_by_user); - window->DC.TreeDepth = 0; - window->DC.TreeJumpToParentOnPopMask = 0x00; - window->DC.ChildWindows.resize(0); - window->DC.StateStorage = &window->StateStorage; - window->DC.CurrentColumns = NULL; - window->DC.LayoutType = ImGuiLayoutType_Vertical; - window->DC.ParentLayoutType = parent_window ? parent_window->DC.LayoutType : ImGuiLayoutType_Vertical; - window->DC.FocusCounterRegular = window->DC.FocusCounterTabStop = -1; - - window->DC.ItemWidth = window->ItemWidthDefault; - window->DC.TextWrapPos = -1.0f; // disabled - window->DC.ItemFlagsStack.resize(0); - window->DC.ItemWidthStack.resize(0); - window->DC.TextWrapPosStack.resize(0); - window->DC.GroupStack.resize(0); - window->DC.ItemFlags = parent_window ? parent_window->DC.ItemFlags : ImGuiItemFlags_Default_; - if (parent_window) - window->DC.ItemFlagsStack.push_back(window->DC.ItemFlags); - - if (window->AutoFitFramesX > 0) - window->AutoFitFramesX--; - if (window->AutoFitFramesY > 0) - window->AutoFitFramesY--; - - // Apply focus (we need to call FocusWindow() AFTER setting DC.CursorStartPos so our initial navigation reference rectangle can start around there) - if (want_focus) - { - FocusWindow(window); - NavInitWindow(window, false); - } - - // Title bar - if (!(flags & ImGuiWindowFlags_NoTitleBar)) - RenderWindowTitleBarContents(window, title_bar_rect, name, p_open); - - // Pressing CTRL+C while holding on a window copy its content to the clipboard - // This works but 1. doesn't handle multiple Begin/End pairs, 2. recursing into another Begin/End pair - so we need to work that out and add better logging scope. - // Maybe we can support CTRL+C on every element? - /* - if (g.ActiveId == move_id) - if (g.IO.KeyCtrl && IsKeyPressedMap(ImGuiKey_C)) - LogToClipboard(); - */ - - // We fill last item data based on Title Bar/Tab, in order for IsItemHovered() and IsItemActive() to be usable after Begin(). - // This is useful to allow creating context menus on title bar only, etc. - window->DC.LastItemId = window->MoveId; - window->DC.LastItemStatusFlags = IsMouseHoveringRect(title_bar_rect.Min, title_bar_rect.Max, false) ? ImGuiItemStatusFlags_HoveredRect : 0; - window->DC.LastItemRect = title_bar_rect; -#ifdef IMGUI_ENABLE_TEST_ENGINE - if (!(window->Flags & ImGuiWindowFlags_NoTitleBar)) - IMGUI_TEST_ENGINE_ITEM_ADD(window->DC.LastItemRect, window->DC.LastItemId); -#endif - } - else - { - // Append - SetCurrentWindow(window); - } - - PushClipRect(window->InnerClipRect.Min, window->InnerClipRect.Max, true); - - // Clear 'accessed' flag last thing (After PushClipRect which will set the flag. We want the flag to stay false when the default "Debug" window is unused) - if (first_begin_of_the_frame) - window->WriteAccessed = false; - - window->BeginCount++; - g.NextWindowData.ClearFlags(); - - if (flags & ImGuiWindowFlags_ChildWindow) - { - // Child window can be out of sight and have "negative" clip windows. - // Mark them as collapsed so commands are skipped earlier (we can't manually collapse them because they have no title bar). - IM_ASSERT((flags & ImGuiWindowFlags_NoTitleBar) != 0); - if (!(flags & ImGuiWindowFlags_AlwaysAutoResize) && window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0) - if (window->OuterRectClipped.Min.x >= window->OuterRectClipped.Max.x || window->OuterRectClipped.Min.y >= window->OuterRectClipped.Max.y) - window->HiddenFramesCanSkipItems = 1; - - // Hide along with parent or if parent is collapsed - if (parent_window && (parent_window->Collapsed || parent_window->HiddenFramesCanSkipItems > 0)) - window->HiddenFramesCanSkipItems = 1; - if (parent_window && (parent_window->Collapsed || parent_window->HiddenFramesCannotSkipItems > 0)) - window->HiddenFramesCannotSkipItems = 1; - } - - // Don't render if style alpha is 0.0 at the time of Begin(). This is arbitrary and inconsistent but has been there for a long while (may remove at some point) - if (style.Alpha <= 0.0f) - window->HiddenFramesCanSkipItems = 1; - - // Update the Hidden flag - window->Hidden = (window->HiddenFramesCanSkipItems > 0) || (window->HiddenFramesCannotSkipItems > 0); - - // Update the SkipItems flag, used to early out of all items functions (no layout required) - bool skip_items = false; - if (window->Collapsed || !window->Active || window->Hidden) - if (window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0 && window->HiddenFramesCannotSkipItems <= 0) - skip_items = true; - window->SkipItems = skip_items; - - return !skip_items; -} - -void ImGui::End() -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - - // Error checking: verify that user hasn't called End() too many times! - if (g.CurrentWindowStack.Size <= 1 && g.WithinFrameScopeWithImplicitWindow) - { - IM_ASSERT_USER_ERROR(g.CurrentWindowStack.Size > 1, "Calling End() too many times!"); - return; - } - IM_ASSERT(g.CurrentWindowStack.Size > 0); - - // Error checking: verify that user doesn't directly call End() on a child window. - if (window->Flags & ImGuiWindowFlags_ChildWindow) - IM_ASSERT_USER_ERROR(g.WithinEndChild, "Must call EndChild() and not End()!"); - - // Close anything that is open - if (window->DC.CurrentColumns) - EndColumns(); - PopClipRect(); // Inner window clip rectangle - - // Stop logging - if (!(window->Flags & ImGuiWindowFlags_ChildWindow)) // FIXME: add more options for scope of logging - LogFinish(); - - // Pop from window stack - g.CurrentWindowStack.pop_back(); - if (window->Flags & ImGuiWindowFlags_Popup) - g.BeginPopupStack.pop_back(); - ErrorCheckBeginEndCompareStacksSize(window, false); - SetCurrentWindow(g.CurrentWindowStack.empty() ? NULL : g.CurrentWindowStack.back()); -} - -void ImGui::BringWindowToFocusFront(ImGuiWindow* window) -{ - ImGuiContext& g = *GImGui; - if (g.WindowsFocusOrder.back() == window) - return; - for (int i = g.WindowsFocusOrder.Size - 2; i >= 0; i--) // We can ignore the top-most window - if (g.WindowsFocusOrder[i] == window) - { - memmove(&g.WindowsFocusOrder[i], &g.WindowsFocusOrder[i + 1], (size_t)(g.WindowsFocusOrder.Size - i - 1) * sizeof(ImGuiWindow*)); - g.WindowsFocusOrder[g.WindowsFocusOrder.Size - 1] = window; - break; - } -} - -void ImGui::BringWindowToDisplayFront(ImGuiWindow* window) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* current_front_window = g.Windows.back(); - if (current_front_window == window || current_front_window->RootWindow == window) - return; - for (int i = g.Windows.Size - 2; i >= 0; i--) // We can ignore the top-most window - if (g.Windows[i] == window) - { - memmove(&g.Windows[i], &g.Windows[i + 1], (size_t)(g.Windows.Size - i - 1) * sizeof(ImGuiWindow*)); - g.Windows[g.Windows.Size - 1] = window; - break; - } -} - -void ImGui::BringWindowToDisplayBack(ImGuiWindow* window) -{ - ImGuiContext& g = *GImGui; - if (g.Windows[0] == window) - return; - for (int i = 0; i < g.Windows.Size; i++) - if (g.Windows[i] == window) - { - memmove(&g.Windows[1], &g.Windows[0], (size_t)i * sizeof(ImGuiWindow*)); - g.Windows[0] = window; - break; - } -} - -// Moving window to front of display and set focus (which happens to be back of our sorted list) -void ImGui::FocusWindow(ImGuiWindow* window) -{ - ImGuiContext& g = *GImGui; - - if (g.NavWindow != window) - { - g.NavWindow = window; - if (window && g.NavDisableMouseHover) - g.NavMousePosDirty = true; - g.NavInitRequest = false; - g.NavId = window ? window->NavLastIds[0] : 0; // Restore NavId - g.NavFocusScopeId = 0; - g.NavIdIsAlive = false; - g.NavLayer = ImGuiNavLayer_Main; - //IMGUI_DEBUG_LOG("FocusWindow(\"%s\")\n", window ? window->Name : NULL); - } - - // Close popups if any - ClosePopupsOverWindow(window, false); - - // Passing NULL allow to disable keyboard focus - if (!window) - return; - - // Move the root window to the top of the pile - IM_ASSERT(window->RootWindow != NULL); - ImGuiWindow* focus_front_window = window->RootWindow; // NB: In docking branch this is window->RootWindowDockStop - ImGuiWindow* display_front_window = window->RootWindow; - - // Steal focus on active widgets - if (focus_front_window->Flags & ImGuiWindowFlags_Popup) // FIXME: This statement may be unnecessary? Need further testing before removing it.. - if (g.ActiveId != 0 && g.ActiveIdWindow && g.ActiveIdWindow->RootWindow != focus_front_window) - ClearActiveID(); - - // Bring to front - BringWindowToFocusFront(focus_front_window); - if (((window->Flags | display_front_window->Flags) & ImGuiWindowFlags_NoBringToFrontOnFocus) == 0) - BringWindowToDisplayFront(display_front_window); -} - -void ImGui::FocusTopMostWindowUnderOne(ImGuiWindow* under_this_window, ImGuiWindow* ignore_window) -{ - ImGuiContext& g = *GImGui; - - int start_idx = g.WindowsFocusOrder.Size - 1; - if (under_this_window != NULL) - { - int under_this_window_idx = FindWindowFocusIndex(under_this_window); - if (under_this_window_idx != -1) - start_idx = under_this_window_idx - 1; - } - for (int i = start_idx; i >= 0; i--) - { - // We may later decide to test for different NoXXXInputs based on the active navigation input (mouse vs nav) but that may feel more confusing to the user. - ImGuiWindow* window = g.WindowsFocusOrder[i]; - if (window != ignore_window && window->WasActive && !(window->Flags & ImGuiWindowFlags_ChildWindow)) - if ((window->Flags & (ImGuiWindowFlags_NoMouseInputs | ImGuiWindowFlags_NoNavInputs)) != (ImGuiWindowFlags_NoMouseInputs | ImGuiWindowFlags_NoNavInputs)) - { - ImGuiWindow* focus_window = NavRestoreLastChildNavWindow(window); - FocusWindow(focus_window); - return; - } - } - FocusWindow(NULL); -} - -void ImGui::SetCurrentFont(ImFont* font) -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(font && font->IsLoaded()); // Font Atlas not created. Did you call io.Fonts->GetTexDataAsRGBA32 / GetTexDataAsAlpha8 ? - IM_ASSERT(font->Scale > 0.0f); - g.Font = font; - g.FontBaseSize = ImMax(1.0f, g.IO.FontGlobalScale * g.Font->FontSize * g.Font->Scale); - g.FontSize = g.CurrentWindow ? g.CurrentWindow->CalcFontSize() : 0.0f; - - ImFontAtlas* atlas = g.Font->ContainerAtlas; - g.DrawListSharedData.TexUvWhitePixel = atlas->TexUvWhitePixel; - g.DrawListSharedData.Font = g.Font; - g.DrawListSharedData.FontSize = g.FontSize; -} - -void ImGui::PushFont(ImFont* font) -{ - ImGuiContext& g = *GImGui; - if (!font) - font = GetDefaultFont(); - SetCurrentFont(font); - g.FontStack.push_back(font); - g.CurrentWindow->DrawList->PushTextureID(font->ContainerAtlas->TexID); -} - -void ImGui::PopFont() -{ - ImGuiContext& g = *GImGui; - g.CurrentWindow->DrawList->PopTextureID(); - g.FontStack.pop_back(); - SetCurrentFont(g.FontStack.empty() ? GetDefaultFont() : g.FontStack.back()); -} - -void ImGui::PushItemFlag(ImGuiItemFlags option, bool enabled) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (enabled) - window->DC.ItemFlags |= option; - else - window->DC.ItemFlags &= ~option; - window->DC.ItemFlagsStack.push_back(window->DC.ItemFlags); -} - -void ImGui::PopItemFlag() -{ - ImGuiWindow* window = GetCurrentWindow(); - window->DC.ItemFlagsStack.pop_back(); - window->DC.ItemFlags = window->DC.ItemFlagsStack.empty() ? ImGuiItemFlags_Default_ : window->DC.ItemFlagsStack.back(); -} - -// FIXME: Look into renaming this once we have settled the new Focus/Activation/TabStop system. -void ImGui::PushAllowKeyboardFocus(bool allow_keyboard_focus) -{ - PushItemFlag(ImGuiItemFlags_NoTabStop, !allow_keyboard_focus); -} - -void ImGui::PopAllowKeyboardFocus() -{ - PopItemFlag(); -} - -void ImGui::PushButtonRepeat(bool repeat) -{ - PushItemFlag(ImGuiItemFlags_ButtonRepeat, repeat); -} - -void ImGui::PopButtonRepeat() -{ - PopItemFlag(); -} - -void ImGui::PushTextWrapPos(float wrap_pos_x) -{ - ImGuiWindow* window = GetCurrentWindow(); - window->DC.TextWrapPos = wrap_pos_x; - window->DC.TextWrapPosStack.push_back(wrap_pos_x); -} - -void ImGui::PopTextWrapPos() -{ - ImGuiWindow* window = GetCurrentWindow(); - window->DC.TextWrapPosStack.pop_back(); - window->DC.TextWrapPos = window->DC.TextWrapPosStack.empty() ? -1.0f : window->DC.TextWrapPosStack.back(); -} - -bool ImGui::IsWindowChildOf(ImGuiWindow* window, ImGuiWindow* potential_parent) -{ - if (window->RootWindow == potential_parent) - return true; - while (window != NULL) - { - if (window == potential_parent) - return true; - window = window->ParentWindow; - } - return false; -} - -bool ImGui::IsWindowHovered(ImGuiHoveredFlags flags) -{ - IM_ASSERT((flags & ImGuiHoveredFlags_AllowWhenOverlapped) == 0); // Flags not supported by this function - ImGuiContext& g = *GImGui; - - if (flags & ImGuiHoveredFlags_AnyWindow) - { - if (g.HoveredWindow == NULL) - return false; - } - else - { - switch (flags & (ImGuiHoveredFlags_RootWindow | ImGuiHoveredFlags_ChildWindows)) - { - case ImGuiHoveredFlags_RootWindow | ImGuiHoveredFlags_ChildWindows: - if (g.HoveredRootWindow != g.CurrentWindow->RootWindow) - return false; - break; - case ImGuiHoveredFlags_RootWindow: - if (g.HoveredWindow != g.CurrentWindow->RootWindow) - return false; - break; - case ImGuiHoveredFlags_ChildWindows: - if (g.HoveredWindow == NULL || !IsWindowChildOf(g.HoveredWindow, g.CurrentWindow)) - return false; - break; - default: - if (g.HoveredWindow != g.CurrentWindow) - return false; - break; - } - } - - if (!IsWindowContentHoverable(g.HoveredWindow, flags)) - return false; - if (!(flags & ImGuiHoveredFlags_AllowWhenBlockedByActiveItem)) - if (g.ActiveId != 0 && !g.ActiveIdAllowOverlap && g.ActiveId != g.HoveredWindow->MoveId) - return false; - return true; -} - -bool ImGui::IsWindowFocused(ImGuiFocusedFlags flags) -{ - ImGuiContext& g = *GImGui; - - if (flags & ImGuiFocusedFlags_AnyWindow) - return g.NavWindow != NULL; - - IM_ASSERT(g.CurrentWindow); // Not inside a Begin()/End() - switch (flags & (ImGuiFocusedFlags_RootWindow | ImGuiFocusedFlags_ChildWindows)) - { - case ImGuiFocusedFlags_RootWindow | ImGuiFocusedFlags_ChildWindows: - return g.NavWindow && g.NavWindow->RootWindow == g.CurrentWindow->RootWindow; - case ImGuiFocusedFlags_RootWindow: - return g.NavWindow == g.CurrentWindow->RootWindow; - case ImGuiFocusedFlags_ChildWindows: - return g.NavWindow && IsWindowChildOf(g.NavWindow, g.CurrentWindow); - default: - return g.NavWindow == g.CurrentWindow; - } -} - -// Can we focus this window with CTRL+TAB (or PadMenu + PadFocusPrev/PadFocusNext) -// Note that NoNavFocus makes the window not reachable with CTRL+TAB but it can still be focused with mouse or programmaticaly. -// If you want a window to never be focused, you may use the e.g. NoInputs flag. -bool ImGui::IsWindowNavFocusable(ImGuiWindow* window) -{ - return window->Active && window == window->RootWindow && !(window->Flags & ImGuiWindowFlags_NoNavFocus); -} - -float ImGui::GetWindowWidth() -{ - ImGuiWindow* window = GImGui->CurrentWindow; - return window->Size.x; -} - -float ImGui::GetWindowHeight() -{ - ImGuiWindow* window = GImGui->CurrentWindow; - return window->Size.y; -} - -ImVec2 ImGui::GetWindowPos() -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - return window->Pos; -} - -void ImGui::SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiCond cond) -{ - // Test condition (NB: bit 0 is always true) and clear flags for next time - if (cond && (window->SetWindowPosAllowFlags & cond) == 0) - return; - - IM_ASSERT(cond == 0 || ImIsPowerOfTwo(cond)); // Make sure the user doesn't attempt to combine multiple condition flags. - window->SetWindowPosAllowFlags &= ~(ImGuiCond_Once | ImGuiCond_FirstUseEver | ImGuiCond_Appearing); - window->SetWindowPosVal = ImVec2(FLT_MAX, FLT_MAX); - - // Set - const ImVec2 old_pos = window->Pos; - window->Pos = ImFloor(pos); - ImVec2 offset = window->Pos - old_pos; - window->DC.CursorPos += offset; // As we happen to move the window while it is being appended to (which is a bad idea - will smear) let's at least offset the cursor - window->DC.CursorMaxPos += offset; // And more importantly we need to offset CursorMaxPos/CursorStartPos this so ContentSize calculation doesn't get affected. - window->DC.CursorStartPos += offset; -} - -void ImGui::SetWindowPos(const ImVec2& pos, ImGuiCond cond) -{ - ImGuiWindow* window = GetCurrentWindowRead(); - SetWindowPos(window, pos, cond); -} - -void ImGui::SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond) -{ - if (ImGuiWindow* window = FindWindowByName(name)) - SetWindowPos(window, pos, cond); -} - -ImVec2 ImGui::GetWindowSize() -{ - ImGuiWindow* window = GetCurrentWindowRead(); - return window->Size; -} - -void ImGui::SetWindowSize(ImGuiWindow* window, const ImVec2& size, ImGuiCond cond) -{ - // Test condition (NB: bit 0 is always true) and clear flags for next time - if (cond && (window->SetWindowSizeAllowFlags & cond) == 0) - return; - - IM_ASSERT(cond == 0 || ImIsPowerOfTwo(cond)); // Make sure the user doesn't attempt to combine multiple condition flags. - window->SetWindowSizeAllowFlags &= ~(ImGuiCond_Once | ImGuiCond_FirstUseEver | ImGuiCond_Appearing); - - // Set - if (size.x > 0.0f) - { - window->AutoFitFramesX = 0; - window->SizeFull.x = IM_FLOOR(size.x); - } - else - { - window->AutoFitFramesX = 2; - window->AutoFitOnlyGrows = false; - } - if (size.y > 0.0f) - { - window->AutoFitFramesY = 0; - window->SizeFull.y = IM_FLOOR(size.y); - } - else - { - window->AutoFitFramesY = 2; - window->AutoFitOnlyGrows = false; - } -} - -void ImGui::SetWindowSize(const ImVec2& size, ImGuiCond cond) -{ - SetWindowSize(GImGui->CurrentWindow, size, cond); -} - -void ImGui::SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond) -{ - if (ImGuiWindow* window = FindWindowByName(name)) - SetWindowSize(window, size, cond); -} - -void ImGui::SetWindowCollapsed(ImGuiWindow* window, bool collapsed, ImGuiCond cond) -{ - // Test condition (NB: bit 0 is always true) and clear flags for next time - if (cond && (window->SetWindowCollapsedAllowFlags & cond) == 0) - return; - window->SetWindowCollapsedAllowFlags &= ~(ImGuiCond_Once | ImGuiCond_FirstUseEver | ImGuiCond_Appearing); - - // Set - window->Collapsed = collapsed; -} - -void ImGui::SetWindowCollapsed(bool collapsed, ImGuiCond cond) -{ - SetWindowCollapsed(GImGui->CurrentWindow, collapsed, cond); -} - -bool ImGui::IsWindowCollapsed() -{ - ImGuiWindow* window = GetCurrentWindowRead(); - return window->Collapsed; -} - -bool ImGui::IsWindowAppearing() -{ - ImGuiWindow* window = GetCurrentWindowRead(); - return window->Appearing; -} - -void ImGui::SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond) -{ - if (ImGuiWindow* window = FindWindowByName(name)) - SetWindowCollapsed(window, collapsed, cond); -} - -void ImGui::SetWindowFocus() -{ - FocusWindow(GImGui->CurrentWindow); -} - -void ImGui::SetWindowFocus(const char* name) -{ - if (name) - { - if (ImGuiWindow* window = FindWindowByName(name)) - FocusWindow(window); - } - else - { - FocusWindow(NULL); - } -} - -void ImGui::SetNextWindowPos(const ImVec2& pos, ImGuiCond cond, const ImVec2& pivot) -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(cond == 0 || ImIsPowerOfTwo(cond)); // Make sure the user doesn't attempt to combine multiple condition flags. - g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasPos; - g.NextWindowData.PosVal = pos; - g.NextWindowData.PosPivotVal = pivot; - g.NextWindowData.PosCond = cond ? cond : ImGuiCond_Always; -} - -void ImGui::SetNextWindowSize(const ImVec2& size, ImGuiCond cond) -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(cond == 0 || ImIsPowerOfTwo(cond)); // Make sure the user doesn't attempt to combine multiple condition flags. - g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasSize; - g.NextWindowData.SizeVal = size; - g.NextWindowData.SizeCond = cond ? cond : ImGuiCond_Always; -} - -void ImGui::SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeCallback custom_callback, void* custom_callback_user_data) -{ - ImGuiContext& g = *GImGui; - g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasSizeConstraint; - g.NextWindowData.SizeConstraintRect = ImRect(size_min, size_max); - g.NextWindowData.SizeCallback = custom_callback; - g.NextWindowData.SizeCallbackUserData = custom_callback_user_data; -} - -// Content size = inner scrollable rectangle, padded with WindowPadding. -// SetNextWindowContentSize(ImVec2(100,100) + ImGuiWindowFlags_AlwaysAutoResize will always allow submitting a 100x100 item. -void ImGui::SetNextWindowContentSize(const ImVec2& size) -{ - ImGuiContext& g = *GImGui; - g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasContentSize; - g.NextWindowData.ContentSizeVal = size; -} - -void ImGui::SetNextWindowCollapsed(bool collapsed, ImGuiCond cond) -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(cond == 0 || ImIsPowerOfTwo(cond)); // Make sure the user doesn't attempt to combine multiple condition flags. - g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasCollapsed; - g.NextWindowData.CollapsedVal = collapsed; - g.NextWindowData.CollapsedCond = cond ? cond : ImGuiCond_Always; -} - -void ImGui::SetNextWindowFocus() -{ - ImGuiContext& g = *GImGui; - g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasFocus; -} - -void ImGui::SetNextWindowBgAlpha(float alpha) -{ - ImGuiContext& g = *GImGui; - g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasBgAlpha; - g.NextWindowData.BgAlphaVal = alpha; -} - -ImDrawList* ImGui::GetWindowDrawList() -{ - ImGuiWindow* window = GetCurrentWindow(); - return window->DrawList; -} - -ImFont* ImGui::GetFont() -{ - return GImGui->Font; -} - -float ImGui::GetFontSize() -{ - return GImGui->FontSize; -} - -ImVec2 ImGui::GetFontTexUvWhitePixel() -{ - return GImGui->DrawListSharedData.TexUvWhitePixel; -} - -void ImGui::SetWindowFontScale(float scale) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = GetCurrentWindow(); - window->FontWindowScale = scale; - g.FontSize = g.DrawListSharedData.FontSize = window->CalcFontSize(); -} - -void ImGui::ActivateItem(ImGuiID id) -{ - ImGuiContext& g = *GImGui; - g.NavNextActivateId = id; -} - -void ImGui::PushFocusScope(ImGuiID id) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - window->IDStack.push_back(window->DC.NavFocusScopeIdCurrent); - window->DC.NavFocusScopeIdCurrent = id; -} - -void ImGui::PopFocusScope() -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - window->DC.NavFocusScopeIdCurrent = window->IDStack.back(); - window->IDStack.pop_back(); -} - -void ImGui::SetKeyboardFocusHere(int offset) -{ - IM_ASSERT(offset >= -1); // -1 is allowed but not below - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - g.FocusRequestNextWindow = window; - g.FocusRequestNextCounterRegular = window->DC.FocusCounterRegular + 1 + offset; - g.FocusRequestNextCounterTabStop = INT_MAX; -} - -void ImGui::SetItemDefaultFocus() -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - if (!window->Appearing) - return; - if (g.NavWindow == window->RootWindowForNav && (g.NavInitRequest || g.NavInitResultId != 0) && g.NavLayer == g.NavWindow->DC.NavLayerCurrent) - { - g.NavInitRequest = false; - g.NavInitResultId = g.NavWindow->DC.LastItemId; - g.NavInitResultRectRel = ImRect(g.NavWindow->DC.LastItemRect.Min - g.NavWindow->Pos, g.NavWindow->DC.LastItemRect.Max - g.NavWindow->Pos); - NavUpdateAnyRequestFlag(); - if (!IsItemVisible()) - SetScrollHereY(); - } -} - -void ImGui::SetStateStorage(ImGuiStorage* tree) -{ - ImGuiWindow* window = GImGui->CurrentWindow; - window->DC.StateStorage = tree ? tree : &window->StateStorage; -} - -ImGuiStorage* ImGui::GetStateStorage() -{ - ImGuiWindow* window = GImGui->CurrentWindow; - return window->DC.StateStorage; -} - -void ImGui::PushID(const char* str_id) -{ - ImGuiWindow* window = GImGui->CurrentWindow; - window->IDStack.push_back(window->GetIDNoKeepAlive(str_id)); -} - -void ImGui::PushID(const char* str_id_begin, const char* str_id_end) -{ - ImGuiWindow* window = GImGui->CurrentWindow; - window->IDStack.push_back(window->GetIDNoKeepAlive(str_id_begin, str_id_end)); -} - -void ImGui::PushID(const void* ptr_id) -{ - ImGuiWindow* window = GImGui->CurrentWindow; - window->IDStack.push_back(window->GetIDNoKeepAlive(ptr_id)); -} - -void ImGui::PushID(int int_id) -{ - ImGuiWindow* window = GImGui->CurrentWindow; - window->IDStack.push_back(window->GetIDNoKeepAlive(int_id)); -} - -// Push a given id value ignoring the ID stack as a seed. -void ImGui::PushOverrideID(ImGuiID id) -{ - ImGuiWindow* window = GImGui->CurrentWindow; - window->IDStack.push_back(id); -} - -void ImGui::PopID() -{ - ImGuiWindow* window = GImGui->CurrentWindow; - window->IDStack.pop_back(); -} - -ImGuiID ImGui::GetID(const char* str_id) -{ - ImGuiWindow* window = GImGui->CurrentWindow; - return window->GetID(str_id); -} - -ImGuiID ImGui::GetID(const char* str_id_begin, const char* str_id_end) -{ - ImGuiWindow* window = GImGui->CurrentWindow; - return window->GetID(str_id_begin, str_id_end); -} - -ImGuiID ImGui::GetID(const void* ptr_id) -{ - ImGuiWindow* window = GImGui->CurrentWindow; - return window->GetID(ptr_id); -} - -bool ImGui::IsRectVisible(const ImVec2& size) -{ - ImGuiWindow* window = GImGui->CurrentWindow; - return window->ClipRect.Overlaps(ImRect(window->DC.CursorPos, window->DC.CursorPos + size)); -} - -bool ImGui::IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max) -{ - ImGuiWindow* window = GImGui->CurrentWindow; - return window->ClipRect.Overlaps(ImRect(rect_min, rect_max)); -} - - -//----------------------------------------------------------------------------- -// [SECTION] ERROR CHECKING -//----------------------------------------------------------------------------- - -// Helper function to verify ABI compatibility between caller code and compiled version of Dear ImGui. -// Verify that the type sizes are matching between the calling file's compilation unit and imgui.cpp's compilation unit -// If the user has inconsistent compilation settings, imgui configuration #define, packing pragma, etc. your user code -// may see different structures than what imgui.cpp sees, which is problematic. -// We usually require settings to be in imconfig.h to make sure that they are accessible to all compilation units involved with Dear ImGui. -bool ImGui::DebugCheckVersionAndDataLayout(const char* version, size_t sz_io, size_t sz_style, size_t sz_vec2, size_t sz_vec4, size_t sz_vert, size_t sz_idx) -{ - bool error = false; - if (strcmp(version, IMGUI_VERSION) != 0) { error = true; IM_ASSERT(strcmp(version, IMGUI_VERSION) == 0 && "Mismatched version string!"); } - if (sz_io != sizeof(ImGuiIO)) { error = true; IM_ASSERT(sz_io == sizeof(ImGuiIO) && "Mismatched struct layout!"); } - if (sz_style != sizeof(ImGuiStyle)) { error = true; IM_ASSERT(sz_style == sizeof(ImGuiStyle) && "Mismatched struct layout!"); } - if (sz_vec2 != sizeof(ImVec2)) { error = true; IM_ASSERT(sz_vec2 == sizeof(ImVec2) && "Mismatched struct layout!"); } - if (sz_vec4 != sizeof(ImVec4)) { error = true; IM_ASSERT(sz_vec4 == sizeof(ImVec4) && "Mismatched struct layout!"); } - if (sz_vert != sizeof(ImDrawVert)) { error = true; IM_ASSERT(sz_vert == sizeof(ImDrawVert) && "Mismatched struct layout!"); } - if (sz_idx != sizeof(ImDrawIdx)) { error = true; IM_ASSERT(sz_idx == sizeof(ImDrawIdx) && "Mismatched struct layout!"); } - return !error; -} - -static void ImGui::ErrorCheckNewFrameSanityChecks() -{ - ImGuiContext& g = *GImGui; - - // Check user data - // (We pass an error message in the assert expression to make it visible to programmers who are not using a debugger, as most assert handlers display their argument) - IM_ASSERT(g.Initialized); - IM_ASSERT((g.IO.DeltaTime > 0.0f || g.FrameCount == 0) && "Need a positive DeltaTime!"); - IM_ASSERT((g.FrameCount == 0 || g.FrameCountEnded == g.FrameCount) && "Forgot to call Render() or EndFrame() at the end of the previous frame?"); - IM_ASSERT(g.IO.DisplaySize.x >= 0.0f && g.IO.DisplaySize.y >= 0.0f && "Invalid DisplaySize value!"); - IM_ASSERT(g.IO.Fonts->Fonts.Size > 0 && "Font Atlas not built. Did you call io.Fonts->GetTexDataAsRGBA32() / GetTexDataAsAlpha8() ?"); - IM_ASSERT(g.IO.Fonts->Fonts[0]->IsLoaded() && "Font Atlas not built. Did you call io.Fonts->GetTexDataAsRGBA32() / GetTexDataAsAlpha8() ?"); - IM_ASSERT(g.Style.CurveTessellationTol > 0.0f && "Invalid style setting!"); - IM_ASSERT(g.Style.CircleSegmentMaxError > 0.0f && "Invalid style setting!"); - IM_ASSERT(g.Style.Alpha >= 0.0f && g.Style.Alpha <= 1.0f && "Invalid style setting. Alpha cannot be negative (allows us to avoid a few clamps in color computations)!"); - IM_ASSERT(g.Style.WindowMinSize.x >= 1.0f && g.Style.WindowMinSize.y >= 1.0f && "Invalid style setting."); - IM_ASSERT(g.Style.WindowMenuButtonPosition == ImGuiDir_None || g.Style.WindowMenuButtonPosition == ImGuiDir_Left || g.Style.WindowMenuButtonPosition == ImGuiDir_Right); - for (int n = 0; n < ImGuiKey_COUNT; n++) - IM_ASSERT(g.IO.KeyMap[n] >= -1 && g.IO.KeyMap[n] < IM_ARRAYSIZE(g.IO.KeysDown) && "io.KeyMap[] contains an out of bound value (need to be 0..512, or -1 for unmapped key)"); - - // Perform simple check: required key mapping (we intentionally do NOT check all keys to not pressure user into setting up everything, but Space is required and was only recently added in 1.60 WIP) - if (g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard) - IM_ASSERT(g.IO.KeyMap[ImGuiKey_Space] != -1 && "ImGuiKey_Space is not mapped, required for keyboard navigation."); - - // Perform simple check: the beta io.ConfigWindowsResizeFromEdges option requires back-end to honor mouse cursor changes and set the ImGuiBackendFlags_HasMouseCursors flag accordingly. - if (g.IO.ConfigWindowsResizeFromEdges && !(g.IO.BackendFlags & ImGuiBackendFlags_HasMouseCursors)) - g.IO.ConfigWindowsResizeFromEdges = false; -} - -static void ImGui::ErrorCheckEndFrameSanityChecks() -{ - ImGuiContext& g = *GImGui; - - // Verify that io.KeyXXX fields haven't been tampered with. Key mods shoudl not be modified between NewFrame() and EndFrame() - const ImGuiKeyModFlags expected_key_mod_flags = GetMergedKeyModFlags(); - IM_ASSERT(g.IO.KeyMods == expected_key_mod_flags && "Mismatching io.KeyCtrl/io.KeyShift/io.KeyAlt/io.KeySuper vs io.KeyMods"); - IM_UNUSED(expected_key_mod_flags); - - // Report when there is a mismatch of Begin/BeginChild vs End/EndChild calls. Important: Remember that the Begin/BeginChild API requires you - // to always call End/EndChild even if Begin/BeginChild returns false! (this is unfortunately inconsistent with most other Begin* API). - if (g.CurrentWindowStack.Size != 1) - { - if (g.CurrentWindowStack.Size > 1) - { - IM_ASSERT_USER_ERROR(g.CurrentWindowStack.Size == 1, "Mismatched Begin/BeginChild vs End/EndChild calls: did you forget to call End/EndChild?"); - while (g.CurrentWindowStack.Size > 1) - End(); - } - else - { - IM_ASSERT_USER_ERROR(g.CurrentWindowStack.Size == 1, "Mismatched Begin/BeginChild vs End/EndChild calls: did you call End/EndChild too much?"); - } - } -} - -// Save and compare stack sizes on Begin()/End() to detect usage errors -// Begin() calls this with write=true -// End() calls this with write=false -static void ImGui::ErrorCheckBeginEndCompareStacksSize(ImGuiWindow* window, bool write) -{ - ImGuiContext& g = *GImGui; - short* p = &window->DC.StackSizesBackup[0]; - - // Window stacks - // NOT checking: DC.ItemWidth, DC.AllowKeyboardFocus, DC.ButtonRepeat, DC.TextWrapPos (per window) to allow user to conveniently push once and not pop (they are cleared on Begin) - { int n = window->IDStack.Size; if (write) *p = (short)n; else IM_ASSERT(*p == n && "PushID/PopID or TreeNode/TreePop Mismatch!"); p++; } // Too few or too many PopID()/TreePop() - { int n = window->DC.GroupStack.Size; if (write) *p = (short)n; else IM_ASSERT(*p == n && "BeginGroup/EndGroup Mismatch!"); p++; } // Too few or too many EndGroup() - - // Global stacks - // For color, style and font stacks there is an incentive to use Push/Begin/Pop/.../End patterns, so we relax our checks a little to allow them. - { int n = g.BeginPopupStack.Size; if (write) *p = (short)n; else IM_ASSERT(*p == n && "BeginMenu/EndMenu or BeginPopup/EndPopup Mismatch!"); p++; }// Too few or too many EndMenu()/EndPopup() - { int n = g.ColorModifiers.Size; if (write) *p = (short)n; else IM_ASSERT(*p >= n && "PushStyleColor/PopStyleColor Mismatch!"); p++; } // Too few or too many PopStyleColor() - { int n = g.StyleModifiers.Size; if (write) *p = (short)n; else IM_ASSERT(*p >= n && "PushStyleVar/PopStyleVar Mismatch!"); p++; } // Too few or too many PopStyleVar() - { int n = g.FontStack.Size; if (write) *p = (short)n; else IM_ASSERT(*p >= n && "PushFont/PopFont Mismatch!"); p++; } // Too few or too many PopFont() - IM_ASSERT(p == window->DC.StackSizesBackup + IM_ARRAYSIZE(window->DC.StackSizesBackup)); -} - - -//----------------------------------------------------------------------------- -// [SECTION] LAYOUT -//----------------------------------------------------------------------------- -// - ItemSize() -// - ItemAdd() -// - SameLine() -// - GetCursorScreenPos() -// - SetCursorScreenPos() -// - GetCursorPos(), GetCursorPosX(), GetCursorPosY() -// - SetCursorPos(), SetCursorPosX(), SetCursorPosY() -// - GetCursorStartPos() -// - Indent() -// - Unindent() -// - SetNextItemWidth() -// - PushItemWidth() -// - PushMultiItemsWidths() -// - PopItemWidth() -// - CalcItemWidth() -// - CalcItemSize() -// - GetTextLineHeight() -// - GetTextLineHeightWithSpacing() -// - GetFrameHeight() -// - GetFrameHeightWithSpacing() -// - GetContentRegionMax() -// - GetContentRegionMaxAbs() [Internal] -// - GetContentRegionAvail(), -// - GetWindowContentRegionMin(), GetWindowContentRegionMax() -// - GetWindowContentRegionWidth() -// - BeginGroup() -// - EndGroup() -// Also see in imgui_widgets: tab bars, columns. -//----------------------------------------------------------------------------- - -// Advance cursor given item size for layout. -// Register minimum needed size so it can extend the bounding box used for auto-fit calculation. -// See comments in ItemAdd() about how/why the size provided to ItemSize() vs ItemAdd() may often different. -void ImGui::ItemSize(const ImVec2& size, float text_baseline_y) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - if (window->SkipItems) - return; - - // We increase the height in this function to accommodate for baseline offset. - // In theory we should be offsetting the starting position (window->DC.CursorPos), that will be the topic of a larger refactor, - // but since ItemSize() is not yet an API that moves the cursor (to handle e.g. wrapping) enlarging the height has the same effect. - const float offset_to_match_baseline_y = (text_baseline_y >= 0) ? ImMax(0.0f, window->DC.CurrLineTextBaseOffset - text_baseline_y) : 0.0f; - const float line_height = ImMax(window->DC.CurrLineSize.y, size.y + offset_to_match_baseline_y); - - // Always align ourselves on pixel boundaries - //if (g.IO.KeyAlt) window->DrawList->AddRect(window->DC.CursorPos, window->DC.CursorPos + ImVec2(size.x, line_height), IM_COL32(255,0,0,200)); // [DEBUG] - window->DC.CursorPosPrevLine.x = window->DC.CursorPos.x + size.x; - window->DC.CursorPosPrevLine.y = window->DC.CursorPos.y; - window->DC.CursorPos.x = IM_FLOOR(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x); // Next line - window->DC.CursorPos.y = IM_FLOOR(window->DC.CursorPos.y + line_height + g.Style.ItemSpacing.y); // Next line - window->DC.CursorMaxPos.x = ImMax(window->DC.CursorMaxPos.x, window->DC.CursorPosPrevLine.x); - window->DC.CursorMaxPos.y = ImMax(window->DC.CursorMaxPos.y, window->DC.CursorPos.y - g.Style.ItemSpacing.y); - //if (g.IO.KeyAlt) window->DrawList->AddCircle(window->DC.CursorMaxPos, 3.0f, IM_COL32(255,0,0,255), 4); // [DEBUG] - - window->DC.PrevLineSize.y = line_height; - window->DC.CurrLineSize.y = 0.0f; - window->DC.PrevLineTextBaseOffset = ImMax(window->DC.CurrLineTextBaseOffset, text_baseline_y); - window->DC.CurrLineTextBaseOffset = 0.0f; - - // Horizontal layout mode - if (window->DC.LayoutType == ImGuiLayoutType_Horizontal) - SameLine(); -} - -void ImGui::ItemSize(const ImRect& bb, float text_baseline_y) -{ - ItemSize(bb.GetSize(), text_baseline_y); -} - -// Declare item bounding box for clipping and interaction. -// Note that the size can be different than the one provided to ItemSize(). Typically, widgets that spread over available surface -// declare their minimum size requirement to ItemSize() and provide a larger region to ItemAdd() which is used drawing/interaction. -bool ImGui::ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb_arg) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - - if (id != 0) - { - // Navigation processing runs prior to clipping early-out - // (a) So that NavInitRequest can be honored, for newly opened windows to select a default widget - // (b) So that we can scroll up/down past clipped items. This adds a small O(N) cost to regular navigation requests - // unfortunately, but it is still limited to one window. It may not scale very well for windows with ten of - // thousands of item, but at least NavMoveRequest is only set on user interaction, aka maximum once a frame. - // We could early out with "if (is_clipped && !g.NavInitRequest) return false;" but when we wouldn't be able - // to reach unclipped widgets. This would work if user had explicit scrolling control (e.g. mapped on a stick). - // We intentionally don't check if g.NavWindow != NULL because g.NavAnyRequest should only be set when it is non null. - // If we crash on a NULL g.NavWindow we need to fix the bug elsewhere. - window->DC.NavLayerActiveMaskNext |= window->DC.NavLayerCurrentMask; - if (g.NavId == id || g.NavAnyRequest) - if (g.NavWindow->RootWindowForNav == window->RootWindowForNav) - if (window == g.NavWindow || ((window->Flags | g.NavWindow->Flags) & ImGuiWindowFlags_NavFlattened)) - NavProcessItem(window, nav_bb_arg ? *nav_bb_arg : bb, id); - - // [DEBUG] Item Picker tool, when enabling the "extended" version we perform the check in ItemAdd() -#ifdef IMGUI_DEBUG_TOOL_ITEM_PICKER_EX - if (id == g.DebugItemPickerBreakId) - { - IM_DEBUG_BREAK(); - g.DebugItemPickerBreakId = 0; - } -#endif - } - - window->DC.LastItemId = id; - window->DC.LastItemRect = bb; - window->DC.LastItemStatusFlags = ImGuiItemStatusFlags_None; - g.NextItemData.Flags = ImGuiNextItemDataFlags_None; - -#ifdef IMGUI_ENABLE_TEST_ENGINE - if (id != 0) - IMGUI_TEST_ENGINE_ITEM_ADD(nav_bb_arg ? *nav_bb_arg : bb, id); -#endif - - // Clipping test - const bool is_clipped = IsClippedEx(bb, id, false); - if (is_clipped) - return false; - //if (g.IO.KeyAlt) window->DrawList->AddRect(bb.Min, bb.Max, IM_COL32(255,255,0,120)); // [DEBUG] - - // We need to calculate this now to take account of the current clipping rectangle (as items like Selectable may change them) - if (IsMouseHoveringRect(bb.Min, bb.Max)) - window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_HoveredRect; - return true; -} - -// Gets back to previous line and continue with horizontal layout -// offset_from_start_x == 0 : follow right after previous item -// offset_from_start_x != 0 : align to specified x position (relative to window/group left) -// spacing_w < 0 : use default spacing if pos_x == 0, no spacing if pos_x != 0 -// spacing_w >= 0 : enforce spacing amount -void ImGui::SameLine(float offset_from_start_x, float spacing_w) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return; - - ImGuiContext& g = *GImGui; - if (offset_from_start_x != 0.0f) - { - if (spacing_w < 0.0f) spacing_w = 0.0f; - window->DC.CursorPos.x = window->Pos.x - window->Scroll.x + offset_from_start_x + spacing_w + window->DC.GroupOffset.x + window->DC.ColumnsOffset.x; - window->DC.CursorPos.y = window->DC.CursorPosPrevLine.y; - } - else - { - if (spacing_w < 0.0f) spacing_w = g.Style.ItemSpacing.x; - window->DC.CursorPos.x = window->DC.CursorPosPrevLine.x + spacing_w; - window->DC.CursorPos.y = window->DC.CursorPosPrevLine.y; - } - window->DC.CurrLineSize = window->DC.PrevLineSize; - window->DC.CurrLineTextBaseOffset = window->DC.PrevLineTextBaseOffset; -} - -ImVec2 ImGui::GetCursorScreenPos() -{ - ImGuiWindow* window = GetCurrentWindowRead(); - return window->DC.CursorPos; -} - -void ImGui::SetCursorScreenPos(const ImVec2& pos) -{ - ImGuiWindow* window = GetCurrentWindow(); - window->DC.CursorPos = pos; - window->DC.CursorMaxPos = ImMax(window->DC.CursorMaxPos, window->DC.CursorPos); -} - -// User generally sees positions in window coordinates. Internally we store CursorPos in absolute screen coordinates because it is more convenient. -// Conversion happens as we pass the value to user, but it makes our naming convention confusing because GetCursorPos() == (DC.CursorPos - window.Pos). May want to rename 'DC.CursorPos'. -ImVec2 ImGui::GetCursorPos() -{ - ImGuiWindow* window = GetCurrentWindowRead(); - return window->DC.CursorPos - window->Pos + window->Scroll; -} - -float ImGui::GetCursorPosX() -{ - ImGuiWindow* window = GetCurrentWindowRead(); - return window->DC.CursorPos.x - window->Pos.x + window->Scroll.x; -} - -float ImGui::GetCursorPosY() -{ - ImGuiWindow* window = GetCurrentWindowRead(); - return window->DC.CursorPos.y - window->Pos.y + window->Scroll.y; -} - -void ImGui::SetCursorPos(const ImVec2& local_pos) -{ - ImGuiWindow* window = GetCurrentWindow(); - window->DC.CursorPos = window->Pos - window->Scroll + local_pos; - window->DC.CursorMaxPos = ImMax(window->DC.CursorMaxPos, window->DC.CursorPos); -} - -void ImGui::SetCursorPosX(float x) -{ - ImGuiWindow* window = GetCurrentWindow(); - window->DC.CursorPos.x = window->Pos.x - window->Scroll.x + x; - window->DC.CursorMaxPos.x = ImMax(window->DC.CursorMaxPos.x, window->DC.CursorPos.x); -} - -void ImGui::SetCursorPosY(float y) -{ - ImGuiWindow* window = GetCurrentWindow(); - window->DC.CursorPos.y = window->Pos.y - window->Scroll.y + y; - window->DC.CursorMaxPos.y = ImMax(window->DC.CursorMaxPos.y, window->DC.CursorPos.y); -} - -ImVec2 ImGui::GetCursorStartPos() -{ - ImGuiWindow* window = GetCurrentWindowRead(); - return window->DC.CursorStartPos - window->Pos; -} - -void ImGui::Indent(float indent_w) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = GetCurrentWindow(); - window->DC.Indent.x += (indent_w != 0.0f) ? indent_w : g.Style.IndentSpacing; - window->DC.CursorPos.x = window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x; -} - -void ImGui::Unindent(float indent_w) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = GetCurrentWindow(); - window->DC.Indent.x -= (indent_w != 0.0f) ? indent_w : g.Style.IndentSpacing; - window->DC.CursorPos.x = window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x; -} - -// Affect large frame+labels widgets only. -void ImGui::SetNextItemWidth(float item_width) -{ - ImGuiContext& g = *GImGui; - g.NextItemData.Flags |= ImGuiNextItemDataFlags_HasWidth; - g.NextItemData.Width = item_width; -} - -void ImGui::PushItemWidth(float item_width) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - window->DC.ItemWidth = (item_width == 0.0f ? window->ItemWidthDefault : item_width); - window->DC.ItemWidthStack.push_back(window->DC.ItemWidth); - g.NextItemData.Flags &= ~ImGuiNextItemDataFlags_HasWidth; -} - -void ImGui::PushMultiItemsWidths(int components, float w_full) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - const ImGuiStyle& style = g.Style; - const float w_item_one = ImMax(1.0f, IM_FLOOR((w_full - (style.ItemInnerSpacing.x) * (components-1)) / (float)components)); - const float w_item_last = ImMax(1.0f, IM_FLOOR(w_full - (w_item_one + style.ItemInnerSpacing.x) * (components-1))); - window->DC.ItemWidthStack.push_back(w_item_last); - for (int i = 0; i < components-1; i++) - window->DC.ItemWidthStack.push_back(w_item_one); - window->DC.ItemWidth = window->DC.ItemWidthStack.back(); - g.NextItemData.Flags &= ~ImGuiNextItemDataFlags_HasWidth; -} - -void ImGui::PopItemWidth() -{ - ImGuiWindow* window = GetCurrentWindow(); - window->DC.ItemWidthStack.pop_back(); - window->DC.ItemWidth = window->DC.ItemWidthStack.empty() ? window->ItemWidthDefault : window->DC.ItemWidthStack.back(); -} - -// Calculate default item width given value passed to PushItemWidth() or SetNextItemWidth(). -// The SetNextItemWidth() data is generally cleared/consumed by ItemAdd() or NextItemData.ClearFlags() -float ImGui::CalcItemWidth() -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - float w; - if (g.NextItemData.Flags & ImGuiNextItemDataFlags_HasWidth) - w = g.NextItemData.Width; - else - w = window->DC.ItemWidth; - if (w < 0.0f) - { - float region_max_x = GetContentRegionMaxAbs().x; - w = ImMax(1.0f, region_max_x - window->DC.CursorPos.x + w); - } - w = IM_FLOOR(w); - return w; -} - -// [Internal] Calculate full item size given user provided 'size' parameter and default width/height. Default width is often == CalcItemWidth(). -// Those two functions CalcItemWidth vs CalcItemSize are awkwardly named because they are not fully symmetrical. -// Note that only CalcItemWidth() is publicly exposed. -// The 4.0f here may be changed to match CalcItemWidth() and/or BeginChild() (right now we have a mismatch which is harmless but undesirable) -ImVec2 ImGui::CalcItemSize(ImVec2 size, float default_w, float default_h) -{ - ImGuiWindow* window = GImGui->CurrentWindow; - - ImVec2 region_max; - if (size.x < 0.0f || size.y < 0.0f) - region_max = GetContentRegionMaxAbs(); - - if (size.x == 0.0f) - size.x = default_w; - else if (size.x < 0.0f) - size.x = ImMax(4.0f, region_max.x - window->DC.CursorPos.x + size.x); - - if (size.y == 0.0f) - size.y = default_h; - else if (size.y < 0.0f) - size.y = ImMax(4.0f, region_max.y - window->DC.CursorPos.y + size.y); - - return size; -} - -float ImGui::GetTextLineHeight() -{ - ImGuiContext& g = *GImGui; - return g.FontSize; -} - -float ImGui::GetTextLineHeightWithSpacing() -{ - ImGuiContext& g = *GImGui; - return g.FontSize + g.Style.ItemSpacing.y; -} - -float ImGui::GetFrameHeight() -{ - ImGuiContext& g = *GImGui; - return g.FontSize + g.Style.FramePadding.y * 2.0f; -} - -float ImGui::GetFrameHeightWithSpacing() -{ - ImGuiContext& g = *GImGui; - return g.FontSize + g.Style.FramePadding.y * 2.0f + g.Style.ItemSpacing.y; -} - -// FIXME: All the Contents Region function are messy or misleading. WE WILL AIM TO OBSOLETE ALL OF THEM WITH A NEW "WORK RECT" API. Thanks for your patience! - -// FIXME: This is in window space (not screen space!). -ImVec2 ImGui::GetContentRegionMax() -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - ImVec2 mx = window->ContentRegionRect.Max - window->Pos; - if (window->DC.CurrentColumns) - mx.x = window->WorkRect.Max.x - window->Pos.x; - return mx; -} - -// [Internal] Absolute coordinate. Saner. This is not exposed until we finishing refactoring work rect features. -ImVec2 ImGui::GetContentRegionMaxAbs() -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - ImVec2 mx = window->ContentRegionRect.Max; - if (window->DC.CurrentColumns) - mx.x = window->WorkRect.Max.x; - return mx; -} - -ImVec2 ImGui::GetContentRegionAvail() -{ - ImGuiWindow* window = GImGui->CurrentWindow; - return GetContentRegionMaxAbs() - window->DC.CursorPos; -} - -// In window space (not screen space!) -ImVec2 ImGui::GetWindowContentRegionMin() -{ - ImGuiWindow* window = GImGui->CurrentWindow; - return window->ContentRegionRect.Min - window->Pos; -} - -ImVec2 ImGui::GetWindowContentRegionMax() -{ - ImGuiWindow* window = GImGui->CurrentWindow; - return window->ContentRegionRect.Max - window->Pos; -} - -float ImGui::GetWindowContentRegionWidth() -{ - ImGuiWindow* window = GImGui->CurrentWindow; - return window->ContentRegionRect.GetWidth(); -} - -// Lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) -void ImGui::BeginGroup() -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = GetCurrentWindow(); - - window->DC.GroupStack.resize(window->DC.GroupStack.Size + 1); - ImGuiGroupData& group_data = window->DC.GroupStack.back(); - group_data.BackupCursorPos = window->DC.CursorPos; - group_data.BackupCursorMaxPos = window->DC.CursorMaxPos; - group_data.BackupIndent = window->DC.Indent; - group_data.BackupGroupOffset = window->DC.GroupOffset; - group_data.BackupCurrLineSize = window->DC.CurrLineSize; - group_data.BackupCurrLineTextBaseOffset = window->DC.CurrLineTextBaseOffset; - group_data.BackupActiveIdIsAlive = g.ActiveIdIsAlive; - group_data.BackupActiveIdPreviousFrameIsAlive = g.ActiveIdPreviousFrameIsAlive; - group_data.EmitItem = true; - - window->DC.GroupOffset.x = window->DC.CursorPos.x - window->Pos.x - window->DC.ColumnsOffset.x; - window->DC.Indent = window->DC.GroupOffset; - window->DC.CursorMaxPos = window->DC.CursorPos; - window->DC.CurrLineSize = ImVec2(0.0f, 0.0f); - if (g.LogEnabled) - g.LogLinePosY = -FLT_MAX; // To enforce Log carriage return -} - -void ImGui::EndGroup() -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = GetCurrentWindow(); - IM_ASSERT(!window->DC.GroupStack.empty()); // Mismatched BeginGroup()/EndGroup() calls - - ImGuiGroupData& group_data = window->DC.GroupStack.back(); - - ImRect group_bb(group_data.BackupCursorPos, ImMax(window->DC.CursorMaxPos, group_data.BackupCursorPos)); - - window->DC.CursorPos = group_data.BackupCursorPos; - window->DC.CursorMaxPos = ImMax(group_data.BackupCursorMaxPos, window->DC.CursorMaxPos); - window->DC.Indent = group_data.BackupIndent; - window->DC.GroupOffset = group_data.BackupGroupOffset; - window->DC.CurrLineSize = group_data.BackupCurrLineSize; - window->DC.CurrLineTextBaseOffset = group_data.BackupCurrLineTextBaseOffset; - if (g.LogEnabled) - g.LogLinePosY = -FLT_MAX; // To enforce Log carriage return - - if (!group_data.EmitItem) - { - window->DC.GroupStack.pop_back(); - return; - } - - window->DC.CurrLineTextBaseOffset = ImMax(window->DC.PrevLineTextBaseOffset, group_data.BackupCurrLineTextBaseOffset); // FIXME: Incorrect, we should grab the base offset from the *first line* of the group but it is hard to obtain now. - ItemSize(group_bb.GetSize()); - ItemAdd(group_bb, 0); - - // If the current ActiveId was declared within the boundary of our group, we copy it to LastItemId so IsItemActive(), IsItemDeactivated() etc. will be functional on the entire group. - // It would be be neater if we replaced window.DC.LastItemId by e.g. 'bool LastItemIsActive', but would put a little more burden on individual widgets. - // Also if you grep for LastItemId you'll notice it is only used in that context. - // (The tests not symmetrical because ActiveIdIsAlive is an ID itself, in order to be able to handle ActiveId being overwritten during the frame.) - const bool group_contains_curr_active_id = (group_data.BackupActiveIdIsAlive != g.ActiveId) && (g.ActiveIdIsAlive == g.ActiveId) && g.ActiveId; - const bool group_contains_prev_active_id = !group_data.BackupActiveIdPreviousFrameIsAlive && g.ActiveIdPreviousFrameIsAlive; - if (group_contains_curr_active_id) - window->DC.LastItemId = g.ActiveId; - else if (group_contains_prev_active_id) - window->DC.LastItemId = g.ActiveIdPreviousFrame; - window->DC.LastItemRect = group_bb; - - // Forward Edited flag - if (group_contains_curr_active_id && g.ActiveIdHasBeenEditedThisFrame) - window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_Edited; - - // Forward Deactivated flag - window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_HasDeactivated; - if (group_contains_prev_active_id && g.ActiveId != g.ActiveIdPreviousFrame) - window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_Deactivated; - - window->DC.GroupStack.pop_back(); - //window->DrawList->AddRect(group_bb.Min, group_bb.Max, IM_COL32(255,0,255,255)); // [Debug] -} - - -//----------------------------------------------------------------------------- -// [SECTION] SCROLLING -//----------------------------------------------------------------------------- - -static ImVec2 CalcNextScrollFromScrollTargetAndClamp(ImGuiWindow* window, bool snap_on_edges) -{ - ImGuiContext& g = *GImGui; - ImVec2 scroll = window->Scroll; - if (window->ScrollTarget.x < FLT_MAX) - { - float cr_x = window->ScrollTargetCenterRatio.x; - float target_x = window->ScrollTarget.x; - if (snap_on_edges && cr_x <= 0.0f && target_x <= window->WindowPadding.x) - target_x = 0.0f; - else if (snap_on_edges && cr_x >= 1.0f && target_x >= window->ContentSize.x + window->WindowPadding.x + g.Style.ItemSpacing.x) - target_x = window->ContentSize.x + window->WindowPadding.x * 2.0f; - scroll.x = target_x - cr_x * (window->SizeFull.x - window->ScrollbarSizes.x); - } - if (window->ScrollTarget.y < FLT_MAX) - { - // 'snap_on_edges' allows for a discontinuity at the edge of scrolling limits to take account of WindowPadding so that scrolling to make the last item visible scroll far enough to see the padding. - float decoration_up_height = window->TitleBarHeight() + window->MenuBarHeight(); - float cr_y = window->ScrollTargetCenterRatio.y; - float target_y = window->ScrollTarget.y; - if (snap_on_edges && cr_y <= 0.0f && target_y <= window->WindowPadding.y) - target_y = 0.0f; - if (snap_on_edges && cr_y >= 1.0f && target_y >= window->ContentSize.y + window->WindowPadding.y + g.Style.ItemSpacing.y) - target_y = window->ContentSize.y + window->WindowPadding.y * 2.0f; - scroll.y = target_y - cr_y * (window->SizeFull.y - window->ScrollbarSizes.y - decoration_up_height); - } - scroll.x = IM_FLOOR(ImMax(scroll.x, 0.0f)); - scroll.y = IM_FLOOR(ImMax(scroll.y, 0.0f)); - if (!window->Collapsed && !window->SkipItems) - { - scroll.x = ImMin(scroll.x, window->ScrollMax.x); - scroll.y = ImMin(scroll.y, window->ScrollMax.y); - } - return scroll; -} - -// Scroll to keep newly navigated item fully into view -ImVec2 ImGui::ScrollToBringRectIntoView(ImGuiWindow* window, const ImRect& item_rect) -{ - ImGuiContext& g = *GImGui; - ImRect window_rect(window->InnerRect.Min - ImVec2(1, 1), window->InnerRect.Max + ImVec2(1, 1)); - //GetForegroundDrawList(window)->AddRect(window_rect.Min, window_rect.Max, IM_COL32_WHITE); // [DEBUG] - - ImVec2 delta_scroll; - if (!window_rect.Contains(item_rect)) - { - if (window->ScrollbarX && item_rect.Min.x < window_rect.Min.x) - SetScrollFromPosX(window, item_rect.Min.x - window->Pos.x + g.Style.ItemSpacing.x, 0.0f); - else if (window->ScrollbarX && item_rect.Max.x >= window_rect.Max.x) - SetScrollFromPosX(window, item_rect.Max.x - window->Pos.x + g.Style.ItemSpacing.x, 1.0f); - if (item_rect.Min.y < window_rect.Min.y) - SetScrollFromPosY(window, item_rect.Min.y - window->Pos.y - g.Style.ItemSpacing.y, 0.0f); - else if (item_rect.Max.y >= window_rect.Max.y) - SetScrollFromPosY(window, item_rect.Max.y - window->Pos.y + g.Style.ItemSpacing.y, 1.0f); - - ImVec2 next_scroll = CalcNextScrollFromScrollTargetAndClamp(window, false); - delta_scroll = next_scroll - window->Scroll; - } - - // Also scroll parent window to keep us into view if necessary - if (window->Flags & ImGuiWindowFlags_ChildWindow) - delta_scroll += ScrollToBringRectIntoView(window->ParentWindow, ImRect(item_rect.Min - delta_scroll, item_rect.Max - delta_scroll)); - - return delta_scroll; -} - -float ImGui::GetScrollX() -{ - ImGuiWindow* window = GImGui->CurrentWindow; - return window->Scroll.x; -} - -float ImGui::GetScrollY() -{ - ImGuiWindow* window = GImGui->CurrentWindow; - return window->Scroll.y; -} - -float ImGui::GetScrollMaxX() -{ - ImGuiWindow* window = GImGui->CurrentWindow; - return window->ScrollMax.x; -} - -float ImGui::GetScrollMaxY() -{ - ImGuiWindow* window = GImGui->CurrentWindow; - return window->ScrollMax.y; -} - -void ImGui::SetScrollX(float scroll_x) -{ - ImGuiWindow* window = GetCurrentWindow(); - window->ScrollTarget.x = scroll_x; - window->ScrollTargetCenterRatio.x = 0.0f; -} - -void ImGui::SetScrollY(float scroll_y) -{ - ImGuiWindow* window = GetCurrentWindow(); - window->ScrollTarget.y = scroll_y; - window->ScrollTargetCenterRatio.y = 0.0f; -} - -void ImGui::SetScrollX(ImGuiWindow* window, float new_scroll_x) -{ - window->ScrollTarget.x = new_scroll_x; - window->ScrollTargetCenterRatio.x = 0.0f; -} - -void ImGui::SetScrollY(ImGuiWindow* window, float new_scroll_y) -{ - window->ScrollTarget.y = new_scroll_y; - window->ScrollTargetCenterRatio.y = 0.0f; -} - - -void ImGui::SetScrollFromPosX(ImGuiWindow* window, float local_x, float center_x_ratio) -{ - // We store a target position so centering can occur on the next frame when we are guaranteed to have a known window size - IM_ASSERT(center_x_ratio >= 0.0f && center_x_ratio <= 1.0f); - window->ScrollTarget.x = IM_FLOOR(local_x + window->Scroll.x); - window->ScrollTargetCenterRatio.x = center_x_ratio; -} - -void ImGui::SetScrollFromPosY(ImGuiWindow* window, float local_y, float center_y_ratio) -{ - // We store a target position so centering can occur on the next frame when we are guaranteed to have a known window size - IM_ASSERT(center_y_ratio >= 0.0f && center_y_ratio <= 1.0f); - const float decoration_up_height = window->TitleBarHeight() + window->MenuBarHeight(); - local_y -= decoration_up_height; - window->ScrollTarget.y = IM_FLOOR(local_y + window->Scroll.y); - window->ScrollTargetCenterRatio.y = center_y_ratio; -} - -void ImGui::SetScrollFromPosX(float local_x, float center_x_ratio) -{ - ImGuiContext& g = *GImGui; - SetScrollFromPosX(g.CurrentWindow, local_x, center_x_ratio); -} - -void ImGui::SetScrollFromPosY(float local_y, float center_y_ratio) -{ - ImGuiContext& g = *GImGui; - SetScrollFromPosY(g.CurrentWindow, local_y, center_y_ratio); -} - -// center_x_ratio: 0.0f left of last item, 0.5f horizontal center of last item, 1.0f right of last item. -void ImGui::SetScrollHereX(float center_x_ratio) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - float target_x = window->DC.LastItemRect.Min.x - window->Pos.x; // Left of last item, in window space - float last_item_width = window->DC.LastItemRect.GetWidth(); - target_x += (last_item_width * center_x_ratio) + (g.Style.ItemSpacing.x * (center_x_ratio - 0.5f) * 2.0f); // Precisely aim before, in the middle or after the last item. - SetScrollFromPosX(target_x, center_x_ratio); -} - -// center_y_ratio: 0.0f top of last item, 0.5f vertical center of last item, 1.0f bottom of last item. -void ImGui::SetScrollHereY(float center_y_ratio) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - float target_y = window->DC.CursorPosPrevLine.y - window->Pos.y; // Top of last item, in window space - target_y += (window->DC.PrevLineSize.y * center_y_ratio) + (g.Style.ItemSpacing.y * (center_y_ratio - 0.5f) * 2.0f); // Precisely aim above, in the middle or below the last line. - SetScrollFromPosY(target_y, center_y_ratio); -} - -//----------------------------------------------------------------------------- -// [SECTION] TOOLTIPS -//----------------------------------------------------------------------------- - -void ImGui::BeginTooltip() -{ - BeginTooltipEx(ImGuiWindowFlags_None, ImGuiTooltipFlags_None); -} - -void ImGui::BeginTooltipEx(ImGuiWindowFlags extra_flags, ImGuiTooltipFlags tooltip_flags) -{ - ImGuiContext& g = *GImGui; - - if (g.DragDropWithinSource || g.DragDropWithinTarget) - { - // The default tooltip position is a little offset to give space to see the context menu (it's also clamped within the current viewport/monitor) - // In the context of a dragging tooltip we try to reduce that offset and we enforce following the cursor. - // Whatever we do we want to call SetNextWindowPos() to enforce a tooltip position and disable clipping the tooltip without our display area, like regular tooltip do. - //ImVec2 tooltip_pos = g.IO.MousePos - g.ActiveIdClickOffset - g.Style.WindowPadding; - ImVec2 tooltip_pos = g.IO.MousePos + ImVec2(16 * g.Style.MouseCursorScale, 8 * g.Style.MouseCursorScale); - SetNextWindowPos(tooltip_pos); - SetNextWindowBgAlpha(g.Style.Colors[ImGuiCol_PopupBg].w * 0.60f); - //PushStyleVar(ImGuiStyleVar_Alpha, g.Style.Alpha * 0.60f); // This would be nice but e.g ColorButton with checkboard has issue with transparent colors :( - tooltip_flags |= ImGuiTooltipFlags_OverridePreviousTooltip; - } - - char window_name[16]; - ImFormatString(window_name, IM_ARRAYSIZE(window_name), "##Tooltip_%02d", g.TooltipOverrideCount); - if (tooltip_flags & ImGuiTooltipFlags_OverridePreviousTooltip) - if (ImGuiWindow* window = FindWindowByName(window_name)) - if (window->Active) - { - // Hide previous tooltip from being displayed. We can't easily "reset" the content of a window so we create a new one. - window->Hidden = true; - window->HiddenFramesCanSkipItems = 1; - ImFormatString(window_name, IM_ARRAYSIZE(window_name), "##Tooltip_%02d", ++g.TooltipOverrideCount); - } - ImGuiWindowFlags flags = ImGuiWindowFlags_Tooltip|ImGuiWindowFlags_NoInputs|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_AlwaysAutoResize; - Begin(window_name, NULL, flags | extra_flags); -} - -void ImGui::EndTooltip() -{ - IM_ASSERT(GetCurrentWindowRead()->Flags & ImGuiWindowFlags_Tooltip); // Mismatched BeginTooltip()/EndTooltip() calls - End(); -} - -void ImGui::SetTooltipV(const char* fmt, va_list args) -{ - BeginTooltipEx(0, ImGuiTooltipFlags_OverridePreviousTooltip); - TextV(fmt, args); - EndTooltip(); -} - -void ImGui::SetTooltip(const char* fmt, ...) -{ - va_list args; - va_start(args, fmt); - SetTooltipV(fmt, args); - va_end(args); -} - -//----------------------------------------------------------------------------- -// [SECTION] POPUPS -//----------------------------------------------------------------------------- - -bool ImGui::IsPopupOpen(ImGuiID id) -{ - ImGuiContext& g = *GImGui; - return g.OpenPopupStack.Size > g.BeginPopupStack.Size && g.OpenPopupStack[g.BeginPopupStack.Size].PopupId == id; -} - -bool ImGui::IsPopupOpen(const char* str_id) -{ - ImGuiContext& g = *GImGui; - return g.OpenPopupStack.Size > g.BeginPopupStack.Size && g.OpenPopupStack[g.BeginPopupStack.Size].PopupId == g.CurrentWindow->GetID(str_id); -} - -ImGuiWindow* ImGui::GetTopMostPopupModal() -{ - ImGuiContext& g = *GImGui; - for (int n = g.OpenPopupStack.Size-1; n >= 0; n--) - if (ImGuiWindow* popup = g.OpenPopupStack.Data[n].Window) - if (popup->Flags & ImGuiWindowFlags_Modal) - return popup; - return NULL; -} - -void ImGui::OpenPopup(const char* str_id) -{ - ImGuiContext& g = *GImGui; - OpenPopupEx(g.CurrentWindow->GetID(str_id)); -} - -// Mark popup as open (toggle toward open state). -// Popups are closed when user click outside, or activate a pressable item, or CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. -// Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). -// One open popup per level of the popup hierarchy (NB: when assigning we reset the Window member of ImGuiPopupRef to NULL) -void ImGui::OpenPopupEx(ImGuiID id) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* parent_window = g.CurrentWindow; - int current_stack_size = g.BeginPopupStack.Size; - ImGuiPopupData popup_ref; // Tagged as new ref as Window will be set back to NULL if we write this into OpenPopupStack. - popup_ref.PopupId = id; - popup_ref.Window = NULL; - popup_ref.SourceWindow = g.NavWindow; - popup_ref.OpenFrameCount = g.FrameCount; - popup_ref.OpenParentId = parent_window->IDStack.back(); - popup_ref.OpenPopupPos = NavCalcPreferredRefPos(); - popup_ref.OpenMousePos = IsMousePosValid(&g.IO.MousePos) ? g.IO.MousePos : popup_ref.OpenPopupPos; - - //IMGUI_DEBUG_LOG("OpenPopupEx(0x%08X)\n", g.FrameCount, id); - if (g.OpenPopupStack.Size < current_stack_size + 1) - { - g.OpenPopupStack.push_back(popup_ref); - } - else - { - // Gently handle the user mistakenly calling OpenPopup() every frame. It is a programming mistake! However, if we were to run the regular code path, the ui - // would become completely unusable because the popup will always be in hidden-while-calculating-size state _while_ claiming focus. Which would be a very confusing - // situation for the programmer. Instead, we silently allow the popup to proceed, it will keep reappearing and the programming error will be more obvious to understand. - if (g.OpenPopupStack[current_stack_size].PopupId == id && g.OpenPopupStack[current_stack_size].OpenFrameCount == g.FrameCount - 1) - { - g.OpenPopupStack[current_stack_size].OpenFrameCount = popup_ref.OpenFrameCount; - } - else - { - // Close child popups if any, then flag popup for open/reopen - g.OpenPopupStack.resize(current_stack_size + 1); - g.OpenPopupStack[current_stack_size] = popup_ref; - } - - // When reopening a popup we first refocus its parent, otherwise if its parent is itself a popup it would get closed by ClosePopupsOverWindow(). - // This is equivalent to what ClosePopupToLevel() does. - //if (g.OpenPopupStack[current_stack_size].PopupId == id) - // FocusWindow(parent_window); - } -} - -void ImGui::ClosePopupsOverWindow(ImGuiWindow* ref_window, bool restore_focus_to_window_under_popup) -{ - ImGuiContext& g = *GImGui; - if (g.OpenPopupStack.empty()) - return; - - // When popups are stacked, clicking on a lower level popups puts focus back to it and close popups above it. - // Don't close our own child popup windows. - int popup_count_to_keep = 0; - if (ref_window) - { - // Find the highest popup which is a descendant of the reference window (generally reference window = NavWindow) - for (; popup_count_to_keep < g.OpenPopupStack.Size; popup_count_to_keep++) - { - ImGuiPopupData& popup = g.OpenPopupStack[popup_count_to_keep]; - if (!popup.Window) - continue; - IM_ASSERT((popup.Window->Flags & ImGuiWindowFlags_Popup) != 0); - if (popup.Window->Flags & ImGuiWindowFlags_ChildWindow) - continue; - - // Trim the stack when popups are not direct descendant of the reference window (the reference window is often the NavWindow) - bool popup_or_descendent_is_ref_window = false; - for (int m = popup_count_to_keep; m < g.OpenPopupStack.Size && !popup_or_descendent_is_ref_window; m++) - if (ImGuiWindow* popup_window = g.OpenPopupStack[m].Window) - if (popup_window->RootWindow == ref_window->RootWindow) - popup_or_descendent_is_ref_window = true; - if (!popup_or_descendent_is_ref_window) - break; - } - } - if (popup_count_to_keep < g.OpenPopupStack.Size) // This test is not required but it allows to set a convenient breakpoint on the statement below - { - //IMGUI_DEBUG_LOG("ClosePopupsOverWindow(%s) -> ClosePopupToLevel(%d)\n", ref_window->Name, popup_count_to_keep); - ClosePopupToLevel(popup_count_to_keep, restore_focus_to_window_under_popup); - } -} - -void ImGui::ClosePopupToLevel(int remaining, bool restore_focus_to_window_under_popup) -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(remaining >= 0 && remaining < g.OpenPopupStack.Size); - ImGuiWindow* focus_window = g.OpenPopupStack[remaining].SourceWindow; - ImGuiWindow* popup_window = g.OpenPopupStack[remaining].Window; - g.OpenPopupStack.resize(remaining); - - if (restore_focus_to_window_under_popup) - { - if (focus_window && !focus_window->WasActive && popup_window) - { - // Fallback - FocusTopMostWindowUnderOne(popup_window, NULL); - } - else - { - if (g.NavLayer == 0 && focus_window) - focus_window = NavRestoreLastChildNavWindow(focus_window); - FocusWindow(focus_window); - } - } -} - -// Close the popup we have begin-ed into. -void ImGui::CloseCurrentPopup() -{ - ImGuiContext& g = *GImGui; - int popup_idx = g.BeginPopupStack.Size - 1; - if (popup_idx < 0 || popup_idx >= g.OpenPopupStack.Size || g.BeginPopupStack[popup_idx].PopupId != g.OpenPopupStack[popup_idx].PopupId) - return; - - // Closing a menu closes its top-most parent popup (unless a modal) - while (popup_idx > 0) - { - ImGuiWindow* popup_window = g.OpenPopupStack[popup_idx].Window; - ImGuiWindow* parent_popup_window = g.OpenPopupStack[popup_idx - 1].Window; - bool close_parent = false; - if (popup_window && (popup_window->Flags & ImGuiWindowFlags_ChildMenu)) - if (parent_popup_window == NULL || !(parent_popup_window->Flags & ImGuiWindowFlags_Modal)) - close_parent = true; - if (!close_parent) - break; - popup_idx--; - } - //IMGUI_DEBUG_LOG("CloseCurrentPopup %d -> %d\n", g.BeginPopupStack.Size - 1, popup_idx); - ClosePopupToLevel(popup_idx, true); - - // A common pattern is to close a popup when selecting a menu item/selectable that will open another window. - // To improve this usage pattern, we avoid nav highlight for a single frame in the parent window. - // Similarly, we could avoid mouse hover highlight in this window but it is less visually problematic. - if (ImGuiWindow* window = g.NavWindow) - window->DC.NavHideHighlightOneFrame = true; -} - -bool ImGui::BeginPopupEx(ImGuiID id, ImGuiWindowFlags flags) -{ - ImGuiContext& g = *GImGui; - if (!IsPopupOpen(id)) - { - g.NextWindowData.ClearFlags(); // We behave like Begin() and need to consume those values - return false; - } - - char name[20]; - if (flags & ImGuiWindowFlags_ChildMenu) - ImFormatString(name, IM_ARRAYSIZE(name), "##Menu_%02d", g.BeginPopupStack.Size); // Recycle windows based on depth - else - ImFormatString(name, IM_ARRAYSIZE(name), "##Popup_%08x", id); // Not recycling, so we can close/open during the same frame - - flags |= ImGuiWindowFlags_Popup; - bool is_open = Begin(name, NULL, flags); - if (!is_open) // NB: Begin can return false when the popup is completely clipped (e.g. zero size display) - EndPopup(); - - return is_open; -} - -bool ImGui::BeginPopup(const char* str_id, ImGuiWindowFlags flags) -{ - ImGuiContext& g = *GImGui; - if (g.OpenPopupStack.Size <= g.BeginPopupStack.Size) // Early out for performance - { - g.NextWindowData.ClearFlags(); // We behave like Begin() and need to consume those values - return false; - } - flags |= ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings; - return BeginPopupEx(g.CurrentWindow->GetID(str_id), flags); -} - -// If 'p_open' is specified for a modal popup window, the popup will have a regular close button which will close the popup. -// Note that popup visibility status is owned by Dear ImGui (and manipulated with e.g. OpenPopup) so the actual value of *p_open is meaningless here. -bool ImGui::BeginPopupModal(const char* name, bool* p_open, ImGuiWindowFlags flags) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - const ImGuiID id = window->GetID(name); - if (!IsPopupOpen(id)) - { - g.NextWindowData.ClearFlags(); // We behave like Begin() and need to consume those values - return false; - } - - // Center modal windows by default - // FIXME: Should test for (PosCond & window->SetWindowPosAllowFlags) with the upcoming window. - if ((g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasPos) == 0) - SetNextWindowPos(g.IO.DisplaySize * 0.5f, ImGuiCond_Appearing, ImVec2(0.5f, 0.5f)); - - flags |= ImGuiWindowFlags_Popup | ImGuiWindowFlags_Modal | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoSavedSettings; - const bool is_open = Begin(name, p_open, flags); - if (!is_open || (p_open && !*p_open)) // NB: is_open can be 'false' when the popup is completely clipped (e.g. zero size display) - { - EndPopup(); - if (is_open) - ClosePopupToLevel(g.BeginPopupStack.Size, true); - return false; - } - return is_open; -} - -void ImGui::EndPopup() -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - IM_ASSERT(window->Flags & ImGuiWindowFlags_Popup); // Mismatched BeginPopup()/EndPopup() calls - IM_ASSERT(g.BeginPopupStack.Size > 0); - - // Make all menus and popups wrap around for now, may need to expose that policy. - NavMoveRequestTryWrapping(window, ImGuiNavMoveFlags_LoopY); - - // Child-popups don't need to be layed out - IM_ASSERT(g.WithinEndChild == false); - if (window->Flags & ImGuiWindowFlags_ChildWindow) - g.WithinEndChild = true; - End(); - g.WithinEndChild = false; -} - -bool ImGui::OpenPopupOnItemClick(const char* str_id, ImGuiMouseButton mouse_button) -{ - ImGuiWindow* window = GImGui->CurrentWindow; - if (IsMouseReleased(mouse_button) && IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup)) - { - ImGuiID id = str_id ? window->GetID(str_id) : window->DC.LastItemId; // If user hasn't passed an ID, we can use the LastItemID. Using LastItemID as a Popup ID won't conflict! - IM_ASSERT(id != 0); // You cannot pass a NULL str_id if the last item has no identifier (e.g. a Text() item) - OpenPopupEx(id); - return true; - } - return false; -} - -// This is a helper to handle the simplest case of associating one named popup to one given widget. -// You may want to handle this on user side if you have specific needs (e.g. tweaking IsItemHovered() parameters). -// You can pass a NULL str_id to use the identifier of the last item. -bool ImGui::BeginPopupContextItem(const char* str_id, ImGuiMouseButton mouse_button) -{ - ImGuiWindow* window = GImGui->CurrentWindow; - if (window->SkipItems) - return false; - ImGuiID id = str_id ? window->GetID(str_id) : window->DC.LastItemId; // If user hasn't passed an ID, we can use the LastItemID. Using LastItemID as a Popup ID won't conflict! - IM_ASSERT(id != 0); // You cannot pass a NULL str_id if the last item has no identifier (e.g. a Text() item) - if (IsMouseReleased(mouse_button) && IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup)) - OpenPopupEx(id); - return BeginPopupEx(id, ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoSavedSettings); -} - -bool ImGui::BeginPopupContextWindow(const char* str_id, ImGuiMouseButton mouse_button, bool also_over_items) -{ - if (!str_id) - str_id = "window_context"; - ImGuiID id = GImGui->CurrentWindow->GetID(str_id); - if (IsMouseReleased(mouse_button) && IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup)) - if (also_over_items || !IsAnyItemHovered()) - OpenPopupEx(id); - return BeginPopupEx(id, ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoSavedSettings); -} - -bool ImGui::BeginPopupContextVoid(const char* str_id, ImGuiMouseButton mouse_button) -{ - if (!str_id) - str_id = "void_context"; - ImGuiID id = GImGui->CurrentWindow->GetID(str_id); - if (IsMouseReleased(mouse_button) && !IsWindowHovered(ImGuiHoveredFlags_AnyWindow)) - OpenPopupEx(id); - return BeginPopupEx(id, ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoSavedSettings); -} - -// r_avoid = the rectangle to avoid (e.g. for tooltip it is a rectangle around the mouse cursor which we want to avoid. for popups it's a small point around the cursor.) -// r_outer = the visible area rectangle, minus safe area padding. If our popup size won't fit because of safe area padding we ignore it. -ImVec2 ImGui::FindBestWindowPosForPopupEx(const ImVec2& ref_pos, const ImVec2& size, ImGuiDir* last_dir, const ImRect& r_outer, const ImRect& r_avoid, ImGuiPopupPositionPolicy policy) -{ - ImVec2 base_pos_clamped = ImClamp(ref_pos, r_outer.Min, r_outer.Max - size); - //GetForegroundDrawList()->AddRect(r_avoid.Min, r_avoid.Max, IM_COL32(255,0,0,255)); - //GetForegroundDrawList()->AddRect(r_outer.Min, r_outer.Max, IM_COL32(0,255,0,255)); - - // Combo Box policy (we want a connecting edge) - if (policy == ImGuiPopupPositionPolicy_ComboBox) - { - const ImGuiDir dir_prefered_order[ImGuiDir_COUNT] = { ImGuiDir_Down, ImGuiDir_Right, ImGuiDir_Left, ImGuiDir_Up }; - for (int n = (*last_dir != ImGuiDir_None) ? -1 : 0; n < ImGuiDir_COUNT; n++) - { - const ImGuiDir dir = (n == -1) ? *last_dir : dir_prefered_order[n]; - if (n != -1 && dir == *last_dir) // Already tried this direction? - continue; - ImVec2 pos; - if (dir == ImGuiDir_Down) pos = ImVec2(r_avoid.Min.x, r_avoid.Max.y); // Below, Toward Right (default) - if (dir == ImGuiDir_Right) pos = ImVec2(r_avoid.Min.x, r_avoid.Min.y - size.y); // Above, Toward Right - if (dir == ImGuiDir_Left) pos = ImVec2(r_avoid.Max.x - size.x, r_avoid.Max.y); // Below, Toward Left - if (dir == ImGuiDir_Up) pos = ImVec2(r_avoid.Max.x - size.x, r_avoid.Min.y - size.y); // Above, Toward Left - if (!r_outer.Contains(ImRect(pos, pos + size))) - continue; - *last_dir = dir; - return pos; - } - } - - // Default popup policy - const ImGuiDir dir_prefered_order[ImGuiDir_COUNT] = { ImGuiDir_Right, ImGuiDir_Down, ImGuiDir_Up, ImGuiDir_Left }; - for (int n = (*last_dir != ImGuiDir_None) ? -1 : 0; n < ImGuiDir_COUNT; n++) - { - const ImGuiDir dir = (n == -1) ? *last_dir : dir_prefered_order[n]; - if (n != -1 && dir == *last_dir) // Already tried this direction? - continue; - float avail_w = (dir == ImGuiDir_Left ? r_avoid.Min.x : r_outer.Max.x) - (dir == ImGuiDir_Right ? r_avoid.Max.x : r_outer.Min.x); - float avail_h = (dir == ImGuiDir_Up ? r_avoid.Min.y : r_outer.Max.y) - (dir == ImGuiDir_Down ? r_avoid.Max.y : r_outer.Min.y); - if (avail_w < size.x || avail_h < size.y) - continue; - ImVec2 pos; - pos.x = (dir == ImGuiDir_Left) ? r_avoid.Min.x - size.x : (dir == ImGuiDir_Right) ? r_avoid.Max.x : base_pos_clamped.x; - pos.y = (dir == ImGuiDir_Up) ? r_avoid.Min.y - size.y : (dir == ImGuiDir_Down) ? r_avoid.Max.y : base_pos_clamped.y; - *last_dir = dir; - return pos; - } - - // Fallback, try to keep within display - *last_dir = ImGuiDir_None; - ImVec2 pos = ref_pos; - pos.x = ImMax(ImMin(pos.x + size.x, r_outer.Max.x) - size.x, r_outer.Min.x); - pos.y = ImMax(ImMin(pos.y + size.y, r_outer.Max.y) - size.y, r_outer.Min.y); - return pos; -} - -ImRect ImGui::GetWindowAllowedExtentRect(ImGuiWindow* window) -{ - IM_UNUSED(window); - ImVec2 padding = GImGui->Style.DisplaySafeAreaPadding; - ImRect r_screen = GetViewportRect(); - r_screen.Expand(ImVec2((r_screen.GetWidth() > padding.x * 2) ? -padding.x : 0.0f, (r_screen.GetHeight() > padding.y * 2) ? -padding.y : 0.0f)); - return r_screen; -} - -ImVec2 ImGui::FindBestWindowPosForPopup(ImGuiWindow* window) -{ - ImGuiContext& g = *GImGui; - - ImRect r_outer = GetWindowAllowedExtentRect(window); - if (window->Flags & ImGuiWindowFlags_ChildMenu) - { - // Child menus typically request _any_ position within the parent menu item, and then we move the new menu outside the parent bounds. - // This is how we end up with child menus appearing (most-commonly) on the right of the parent menu. - IM_ASSERT(g.CurrentWindow == window); - ImGuiWindow* parent_window = g.CurrentWindowStack[g.CurrentWindowStack.Size - 2]; - float horizontal_overlap = g.Style.ItemInnerSpacing.x; // We want some overlap to convey the relative depth of each menu (currently the amount of overlap is hard-coded to style.ItemSpacing.x). - ImRect r_avoid; - if (parent_window->DC.MenuBarAppending) - r_avoid = ImRect(-FLT_MAX, parent_window->ClipRect.Min.y, FLT_MAX, parent_window->ClipRect.Max.y); // Avoid parent menu-bar. If we wanted multi-line menu-bar, we may instead want to have the calling window setup e.g. a NextWindowData.PosConstraintAvoidRect field - else - r_avoid = ImRect(parent_window->Pos.x + horizontal_overlap, -FLT_MAX, parent_window->Pos.x + parent_window->Size.x - horizontal_overlap - parent_window->ScrollbarSizes.x, FLT_MAX); - return FindBestWindowPosForPopupEx(window->Pos, window->Size, &window->AutoPosLastDirection, r_outer, r_avoid); - } - if (window->Flags & ImGuiWindowFlags_Popup) - { - ImRect r_avoid = ImRect(window->Pos.x - 1, window->Pos.y - 1, window->Pos.x + 1, window->Pos.y + 1); - return FindBestWindowPosForPopupEx(window->Pos, window->Size, &window->AutoPosLastDirection, r_outer, r_avoid); - } - if (window->Flags & ImGuiWindowFlags_Tooltip) - { - // Position tooltip (always follows mouse) - float sc = g.Style.MouseCursorScale; - ImVec2 ref_pos = NavCalcPreferredRefPos(); - ImRect r_avoid; - if (!g.NavDisableHighlight && g.NavDisableMouseHover && !(g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableSetMousePos)) - r_avoid = ImRect(ref_pos.x - 16, ref_pos.y - 8, ref_pos.x + 16, ref_pos.y + 8); - else - r_avoid = ImRect(ref_pos.x - 16, ref_pos.y - 8, ref_pos.x + 24 * sc, ref_pos.y + 24 * sc); // FIXME: Hard-coded based on mouse cursor shape expectation. Exact dimension not very important. - ImVec2 pos = FindBestWindowPosForPopupEx(ref_pos, window->Size, &window->AutoPosLastDirection, r_outer, r_avoid); - if (window->AutoPosLastDirection == ImGuiDir_None) - pos = ref_pos + ImVec2(2, 2); // If there's not enough room, for tooltip we prefer avoiding the cursor at all cost even if it means that part of the tooltip won't be visible. - return pos; - } - IM_ASSERT(0); - return window->Pos; -} - -//----------------------------------------------------------------------------- -// [SECTION] KEYBOARD/GAMEPAD NAVIGATION -//----------------------------------------------------------------------------- - -// FIXME-NAV: The existence of SetNavID vs SetNavIDWithRectRel vs SetFocusID is incredibly messy and confusing, -// and needs some explanation or serious refactoring. -void ImGui::SetNavID(ImGuiID id, int nav_layer, ImGuiID focus_scope_id) -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(g.NavWindow); - IM_ASSERT(nav_layer == 0 || nav_layer == 1); - g.NavId = id; - g.NavFocusScopeId = focus_scope_id; - g.NavWindow->NavLastIds[nav_layer] = id; -} - -void ImGui::SetNavIDWithRectRel(ImGuiID id, int nav_layer, ImGuiID focus_scope_id, const ImRect& rect_rel) -{ - ImGuiContext& g = *GImGui; - SetNavID(id, nav_layer, focus_scope_id); - g.NavWindow->NavRectRel[nav_layer] = rect_rel; - g.NavMousePosDirty = true; - g.NavDisableHighlight = false; - g.NavDisableMouseHover = true; -} - -void ImGui::SetFocusID(ImGuiID id, ImGuiWindow* window) -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(id != 0); - - // Assume that SetFocusID() is called in the context where its window->DC.NavLayerCurrent and window->DC.NavFocusScopeIdCurrent are valid. - // Note that window may be != g.CurrentWindow (e.g. SetFocusID call in InputTextEx for multi-line text) - const ImGuiNavLayer nav_layer = window->DC.NavLayerCurrent; - if (g.NavWindow != window) - g.NavInitRequest = false; - g.NavWindow = window; - g.NavId = id; - g.NavLayer = nav_layer; - g.NavFocusScopeId = window->DC.NavFocusScopeIdCurrent; - window->NavLastIds[nav_layer] = id; - if (window->DC.LastItemId == id) - window->NavRectRel[nav_layer] = ImRect(window->DC.LastItemRect.Min - window->Pos, window->DC.LastItemRect.Max - window->Pos); - - if (g.ActiveIdSource == ImGuiInputSource_Nav) - g.NavDisableMouseHover = true; - else - g.NavDisableHighlight = true; -} - -ImGuiDir ImGetDirQuadrantFromDelta(float dx, float dy) -{ - if (ImFabs(dx) > ImFabs(dy)) - return (dx > 0.0f) ? ImGuiDir_Right : ImGuiDir_Left; - return (dy > 0.0f) ? ImGuiDir_Down : ImGuiDir_Up; -} - -static float inline NavScoreItemDistInterval(float a0, float a1, float b0, float b1) -{ - if (a1 < b0) - return a1 - b0; - if (b1 < a0) - return a0 - b1; - return 0.0f; -} - -static void inline NavClampRectToVisibleAreaForMoveDir(ImGuiDir move_dir, ImRect& r, const ImRect& clip_rect) -{ - if (move_dir == ImGuiDir_Left || move_dir == ImGuiDir_Right) - { - r.Min.y = ImClamp(r.Min.y, clip_rect.Min.y, clip_rect.Max.y); - r.Max.y = ImClamp(r.Max.y, clip_rect.Min.y, clip_rect.Max.y); - } - else - { - r.Min.x = ImClamp(r.Min.x, clip_rect.Min.x, clip_rect.Max.x); - r.Max.x = ImClamp(r.Max.x, clip_rect.Min.x, clip_rect.Max.x); - } -} - -// Scoring function for directional navigation. Based on https://gist.github.com/rygorous/6981057 -static bool ImGui::NavScoreItem(ImGuiNavMoveResult* result, ImRect cand) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - if (g.NavLayer != window->DC.NavLayerCurrent) - return false; - - const ImRect& curr = g.NavScoringRectScreen; // Current modified source rect (NB: we've applied Max.x = Min.x in NavUpdate() to inhibit the effect of having varied item width) - g.NavScoringCount++; - - // When entering through a NavFlattened border, we consider child window items as fully clipped for scoring - if (window->ParentWindow == g.NavWindow) - { - IM_ASSERT((window->Flags | g.NavWindow->Flags) & ImGuiWindowFlags_NavFlattened); - if (!window->ClipRect.Overlaps(cand)) - return false; - cand.ClipWithFull(window->ClipRect); // This allows the scored item to not overlap other candidates in the parent window - } - - // We perform scoring on items bounding box clipped by the current clipping rectangle on the other axis (clipping on our movement axis would give us equal scores for all clipped items) - // For example, this ensure that items in one column are not reached when moving vertically from items in another column. - NavClampRectToVisibleAreaForMoveDir(g.NavMoveClipDir, cand, window->ClipRect); - - // Compute distance between boxes - // FIXME-NAV: Introducing biases for vertical navigation, needs to be removed. - float dbx = NavScoreItemDistInterval(cand.Min.x, cand.Max.x, curr.Min.x, curr.Max.x); - float dby = NavScoreItemDistInterval(ImLerp(cand.Min.y, cand.Max.y, 0.2f), ImLerp(cand.Min.y, cand.Max.y, 0.8f), ImLerp(curr.Min.y, curr.Max.y, 0.2f), ImLerp(curr.Min.y, curr.Max.y, 0.8f)); // Scale down on Y to keep using box-distance for vertically touching items - if (dby != 0.0f && dbx != 0.0f) - dbx = (dbx/1000.0f) + ((dbx > 0.0f) ? +1.0f : -1.0f); - float dist_box = ImFabs(dbx) + ImFabs(dby); - - // Compute distance between centers (this is off by a factor of 2, but we only compare center distances with each other so it doesn't matter) - float dcx = (cand.Min.x + cand.Max.x) - (curr.Min.x + curr.Max.x); - float dcy = (cand.Min.y + cand.Max.y) - (curr.Min.y + curr.Max.y); - float dist_center = ImFabs(dcx) + ImFabs(dcy); // L1 metric (need this for our connectedness guarantee) - - // Determine which quadrant of 'curr' our candidate item 'cand' lies in based on distance - ImGuiDir quadrant; - float dax = 0.0f, day = 0.0f, dist_axial = 0.0f; - if (dbx != 0.0f || dby != 0.0f) - { - // For non-overlapping boxes, use distance between boxes - dax = dbx; - day = dby; - dist_axial = dist_box; - quadrant = ImGetDirQuadrantFromDelta(dbx, dby); - } - else if (dcx != 0.0f || dcy != 0.0f) - { - // For overlapping boxes with different centers, use distance between centers - dax = dcx; - day = dcy; - dist_axial = dist_center; - quadrant = ImGetDirQuadrantFromDelta(dcx, dcy); - } - else - { - // Degenerate case: two overlapping buttons with same center, break ties arbitrarily (note that LastItemId here is really the _previous_ item order, but it doesn't matter) - quadrant = (window->DC.LastItemId < g.NavId) ? ImGuiDir_Left : ImGuiDir_Right; - } - -#if IMGUI_DEBUG_NAV_SCORING - char buf[128]; - if (IsMouseHoveringRect(cand.Min, cand.Max)) - { - ImFormatString(buf, IM_ARRAYSIZE(buf), "dbox (%.2f,%.2f->%.4f)\ndcen (%.2f,%.2f->%.4f)\nd (%.2f,%.2f->%.4f)\nnav %c, quadrant %c", dbx, dby, dist_box, dcx, dcy, dist_center, dax, day, dist_axial, "WENS"[g.NavMoveDir], "WENS"[quadrant]); - ImDrawList* draw_list = GetForegroundDrawList(window); - draw_list->AddRect(curr.Min, curr.Max, IM_COL32(255,200,0,100)); - draw_list->AddRect(cand.Min, cand.Max, IM_COL32(255,255,0,200)); - draw_list->AddRectFilled(cand.Max - ImVec2(4,4), cand.Max + CalcTextSize(buf) + ImVec2(4,4), IM_COL32(40,0,0,150)); - draw_list->AddText(g.IO.FontDefault, 13.0f, cand.Max, ~0U, buf); - } - else if (g.IO.KeyCtrl) // Hold to preview score in matching quadrant. Press C to rotate. - { - if (IsKeyPressedMap(ImGuiKey_C)) { g.NavMoveDirLast = (ImGuiDir)((g.NavMoveDirLast + 1) & 3); g.IO.KeysDownDuration[g.IO.KeyMap[ImGuiKey_C]] = 0.01f; } - if (quadrant == g.NavMoveDir) - { - ImFormatString(buf, IM_ARRAYSIZE(buf), "%.0f/%.0f", dist_box, dist_center); - ImDrawList* draw_list = GetForegroundDrawList(window); - draw_list->AddRectFilled(cand.Min, cand.Max, IM_COL32(255, 0, 0, 200)); - draw_list->AddText(g.IO.FontDefault, 13.0f, cand.Min, IM_COL32(255, 255, 255, 255), buf); - } - } - #endif - - // Is it in the quadrant we're interesting in moving to? - bool new_best = false; - if (quadrant == g.NavMoveDir) - { - // Does it beat the current best candidate? - if (dist_box < result->DistBox) - { - result->DistBox = dist_box; - result->DistCenter = dist_center; - return true; - } - if (dist_box == result->DistBox) - { - // Try using distance between center points to break ties - if (dist_center < result->DistCenter) - { - result->DistCenter = dist_center; - new_best = true; - } - else if (dist_center == result->DistCenter) - { - // Still tied! we need to be extra-careful to make sure everything gets linked properly. We consistently break ties by symbolically moving "later" items - // (with higher index) to the right/downwards by an infinitesimal amount since we the current "best" button already (so it must have a lower index), - // this is fairly easy. This rule ensures that all buttons with dx==dy==0 will end up being linked in order of appearance along the x axis. - if (((g.NavMoveDir == ImGuiDir_Up || g.NavMoveDir == ImGuiDir_Down) ? dby : dbx) < 0.0f) // moving bj to the right/down decreases distance - new_best = true; - } - } - } - - // Axial check: if 'curr' has no link at all in some direction and 'cand' lies roughly in that direction, add a tentative link. This will only be kept if no "real" matches - // are found, so it only augments the graph produced by the above method using extra links. (important, since it doesn't guarantee strong connectedness) - // This is just to avoid buttons having no links in a particular direction when there's a suitable neighbor. you get good graphs without this too. - // 2017/09/29: FIXME: This now currently only enabled inside menu bars, ideally we'd disable it everywhere. Menus in particular need to catch failure. For general navigation it feels awkward. - // Disabling it may lead to disconnected graphs when nodes are very spaced out on different axis. Perhaps consider offering this as an option? - if (result->DistBox == FLT_MAX && dist_axial < result->DistAxial) // Check axial match - if (g.NavLayer == 1 && !(g.NavWindow->Flags & ImGuiWindowFlags_ChildMenu)) - if ((g.NavMoveDir == ImGuiDir_Left && dax < 0.0f) || (g.NavMoveDir == ImGuiDir_Right && dax > 0.0f) || (g.NavMoveDir == ImGuiDir_Up && day < 0.0f) || (g.NavMoveDir == ImGuiDir_Down && day > 0.0f)) - { - result->DistAxial = dist_axial; - new_best = true; - } - - return new_best; -} - -// We get there when either NavId == id, or when g.NavAnyRequest is set (which is updated by NavUpdateAnyRequestFlag above) -static void ImGui::NavProcessItem(ImGuiWindow* window, const ImRect& nav_bb, const ImGuiID id) -{ - ImGuiContext& g = *GImGui; - //if (!g.IO.NavActive) // [2017/10/06] Removed this possibly redundant test but I am not sure of all the side-effects yet. Some of the feature here will need to work regardless of using a _NoNavInputs flag. - // return; - - const ImGuiItemFlags item_flags = window->DC.ItemFlags; - const ImRect nav_bb_rel(nav_bb.Min - window->Pos, nav_bb.Max - window->Pos); - - // Process Init Request - if (g.NavInitRequest && g.NavLayer == window->DC.NavLayerCurrent) - { - // Even if 'ImGuiItemFlags_NoNavDefaultFocus' is on (typically collapse/close button) we record the first ResultId so they can be used as a fallback - if (!(item_flags & ImGuiItemFlags_NoNavDefaultFocus) || g.NavInitResultId == 0) - { - g.NavInitResultId = id; - g.NavInitResultRectRel = nav_bb_rel; - } - if (!(item_flags & ImGuiItemFlags_NoNavDefaultFocus)) - { - g.NavInitRequest = false; // Found a match, clear request - NavUpdateAnyRequestFlag(); - } - } - - // Process Move Request (scoring for navigation) - // FIXME-NAV: Consider policy for double scoring (scoring from NavScoringRectScreen + scoring from a rect wrapped according to current wrapping policy) - if ((g.NavId != id || (g.NavMoveRequestFlags & ImGuiNavMoveFlags_AllowCurrentNavId)) && !(item_flags & (ImGuiItemFlags_Disabled|ImGuiItemFlags_NoNav))) - { - ImGuiNavMoveResult* result = (window == g.NavWindow) ? &g.NavMoveResultLocal : &g.NavMoveResultOther; -#if IMGUI_DEBUG_NAV_SCORING - // [DEBUG] Score all items in NavWindow at all times - if (!g.NavMoveRequest) - g.NavMoveDir = g.NavMoveDirLast; - bool new_best = NavScoreItem(result, nav_bb) && g.NavMoveRequest; -#else - bool new_best = g.NavMoveRequest && NavScoreItem(result, nav_bb); -#endif - if (new_best) - { - result->Window = window; - result->ID = id; - result->FocusScopeId = window->DC.NavFocusScopeIdCurrent; - result->RectRel = nav_bb_rel; - } - - // Features like PageUp/PageDown need to maintain a separate score for the visible set of items. - const float VISIBLE_RATIO = 0.70f; - if ((g.NavMoveRequestFlags & ImGuiNavMoveFlags_AlsoScoreVisibleSet) && window->ClipRect.Overlaps(nav_bb)) - if (ImClamp(nav_bb.Max.y, window->ClipRect.Min.y, window->ClipRect.Max.y) - ImClamp(nav_bb.Min.y, window->ClipRect.Min.y, window->ClipRect.Max.y) >= (nav_bb.Max.y - nav_bb.Min.y) * VISIBLE_RATIO) - if (NavScoreItem(&g.NavMoveResultLocalVisibleSet, nav_bb)) - { - result = &g.NavMoveResultLocalVisibleSet; - result->Window = window; - result->ID = id; - result->FocusScopeId = window->DC.NavFocusScopeIdCurrent; - result->RectRel = nav_bb_rel; - } - } - - // Update window-relative bounding box of navigated item - if (g.NavId == id) - { - g.NavWindow = window; // Always refresh g.NavWindow, because some operations such as FocusItem() don't have a window. - g.NavLayer = window->DC.NavLayerCurrent; - g.NavFocusScopeId = window->DC.NavFocusScopeIdCurrent; - g.NavIdIsAlive = true; - g.NavIdTabCounter = window->DC.FocusCounterTabStop; - window->NavRectRel[window->DC.NavLayerCurrent] = nav_bb_rel; // Store item bounding box (relative to window position) - } -} - -bool ImGui::NavMoveRequestButNoResultYet() -{ - ImGuiContext& g = *GImGui; - return g.NavMoveRequest && g.NavMoveResultLocal.ID == 0 && g.NavMoveResultOther.ID == 0; -} - -void ImGui::NavMoveRequestCancel() -{ - ImGuiContext& g = *GImGui; - g.NavMoveRequest = false; - NavUpdateAnyRequestFlag(); -} - -void ImGui::NavMoveRequestForward(ImGuiDir move_dir, ImGuiDir clip_dir, const ImRect& bb_rel, ImGuiNavMoveFlags move_flags) -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(g.NavMoveRequestForward == ImGuiNavForward_None); - NavMoveRequestCancel(); - g.NavMoveDir = move_dir; - g.NavMoveClipDir = clip_dir; - g.NavMoveRequestForward = ImGuiNavForward_ForwardQueued; - g.NavMoveRequestFlags = move_flags; - g.NavWindow->NavRectRel[g.NavLayer] = bb_rel; -} - -void ImGui::NavMoveRequestTryWrapping(ImGuiWindow* window, ImGuiNavMoveFlags move_flags) -{ - ImGuiContext& g = *GImGui; - if (g.NavWindow != window || !NavMoveRequestButNoResultYet() || g.NavMoveRequestForward != ImGuiNavForward_None || g.NavLayer != 0) - return; - IM_ASSERT(move_flags != 0); // No points calling this with no wrapping - ImRect bb_rel = window->NavRectRel[0]; - - ImGuiDir clip_dir = g.NavMoveDir; - if (g.NavMoveDir == ImGuiDir_Left && (move_flags & (ImGuiNavMoveFlags_WrapX | ImGuiNavMoveFlags_LoopX))) - { - bb_rel.Min.x = bb_rel.Max.x = ImMax(window->SizeFull.x, window->ContentSize.x + window->WindowPadding.x * 2.0f) - window->Scroll.x; - if (move_flags & ImGuiNavMoveFlags_WrapX) { bb_rel.TranslateY(-bb_rel.GetHeight()); clip_dir = ImGuiDir_Up; } - NavMoveRequestForward(g.NavMoveDir, clip_dir, bb_rel, move_flags); - } - if (g.NavMoveDir == ImGuiDir_Right && (move_flags & (ImGuiNavMoveFlags_WrapX | ImGuiNavMoveFlags_LoopX))) - { - bb_rel.Min.x = bb_rel.Max.x = -window->Scroll.x; - if (move_flags & ImGuiNavMoveFlags_WrapX) { bb_rel.TranslateY(+bb_rel.GetHeight()); clip_dir = ImGuiDir_Down; } - NavMoveRequestForward(g.NavMoveDir, clip_dir, bb_rel, move_flags); - } - if (g.NavMoveDir == ImGuiDir_Up && (move_flags & (ImGuiNavMoveFlags_WrapY | ImGuiNavMoveFlags_LoopY))) - { - bb_rel.Min.y = bb_rel.Max.y = ImMax(window->SizeFull.y, window->ContentSize.y + window->WindowPadding.y * 2.0f) - window->Scroll.y; - if (move_flags & ImGuiNavMoveFlags_WrapY) { bb_rel.TranslateX(-bb_rel.GetWidth()); clip_dir = ImGuiDir_Left; } - NavMoveRequestForward(g.NavMoveDir, clip_dir, bb_rel, move_flags); - } - if (g.NavMoveDir == ImGuiDir_Down && (move_flags & (ImGuiNavMoveFlags_WrapY | ImGuiNavMoveFlags_LoopY))) - { - bb_rel.Min.y = bb_rel.Max.y = -window->Scroll.y; - if (move_flags & ImGuiNavMoveFlags_WrapY) { bb_rel.TranslateX(+bb_rel.GetWidth()); clip_dir = ImGuiDir_Right; } - NavMoveRequestForward(g.NavMoveDir, clip_dir, bb_rel, move_flags); - } -} - -// FIXME: This could be replaced by updating a frame number in each window when (window == NavWindow) and (NavLayer == 0). -// This way we could find the last focused window among our children. It would be much less confusing this way? -static void ImGui::NavSaveLastChildNavWindowIntoParent(ImGuiWindow* nav_window) -{ - ImGuiWindow* parent_window = nav_window; - while (parent_window && (parent_window->Flags & ImGuiWindowFlags_ChildWindow) != 0 && (parent_window->Flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_ChildMenu)) == 0) - parent_window = parent_window->ParentWindow; - if (parent_window && parent_window != nav_window) - parent_window->NavLastChildNavWindow = nav_window; -} - -// Restore the last focused child. -// Call when we are expected to land on the Main Layer (0) after FocusWindow() -static ImGuiWindow* ImGui::NavRestoreLastChildNavWindow(ImGuiWindow* window) -{ - return window->NavLastChildNavWindow ? window->NavLastChildNavWindow : window; -} - -static void NavRestoreLayer(ImGuiNavLayer layer) -{ - ImGuiContext& g = *GImGui; - g.NavLayer = layer; - if (layer == 0) - g.NavWindow = ImGui::NavRestoreLastChildNavWindow(g.NavWindow); - ImGuiWindow* window = g.NavWindow; - if (layer == 0 && window->NavLastIds[0] != 0) - ImGui::SetNavIDWithRectRel(window->NavLastIds[0], layer, 0, window->NavRectRel[0]); - else - ImGui::NavInitWindow(window, true); -} - -static inline void ImGui::NavUpdateAnyRequestFlag() -{ - ImGuiContext& g = *GImGui; - g.NavAnyRequest = g.NavMoveRequest || g.NavInitRequest || (IMGUI_DEBUG_NAV_SCORING && g.NavWindow != NULL); - if (g.NavAnyRequest) - IM_ASSERT(g.NavWindow != NULL); -} - -// This needs to be called before we submit any widget (aka in or before Begin) -void ImGui::NavInitWindow(ImGuiWindow* window, bool force_reinit) -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(window == g.NavWindow); - bool init_for_nav = false; - if (!(window->Flags & ImGuiWindowFlags_NoNavInputs)) - if (!(window->Flags & ImGuiWindowFlags_ChildWindow) || (window->Flags & ImGuiWindowFlags_Popup) || (window->NavLastIds[0] == 0) || force_reinit) - init_for_nav = true; - //IMGUI_DEBUG_LOG("[Nav] NavInitWindow() init_for_nav=%d, window=\"%s\", layer=%d\n", init_for_nav, window->Name, g.NavLayer); - if (init_for_nav) - { - SetNavID(0, g.NavLayer, 0); - g.NavInitRequest = true; - g.NavInitRequestFromMove = false; - g.NavInitResultId = 0; - g.NavInitResultRectRel = ImRect(); - NavUpdateAnyRequestFlag(); - } - else - { - g.NavId = window->NavLastIds[0]; - g.NavFocusScopeId = 0; - } -} - -static ImVec2 ImGui::NavCalcPreferredRefPos() -{ - ImGuiContext& g = *GImGui; - if (g.NavDisableHighlight || !g.NavDisableMouseHover || !g.NavWindow) - { - // Mouse (we need a fallback in case the mouse becomes invalid after being used) - if (IsMousePosValid(&g.IO.MousePos)) - return g.IO.MousePos; - return g.LastValidMousePos; - } - else - { - // When navigation is active and mouse is disabled, decide on an arbitrary position around the bottom left of the currently navigated item. - const ImRect& rect_rel = g.NavWindow->NavRectRel[g.NavLayer]; - ImVec2 pos = g.NavWindow->Pos + ImVec2(rect_rel.Min.x + ImMin(g.Style.FramePadding.x * 4, rect_rel.GetWidth()), rect_rel.Max.y - ImMin(g.Style.FramePadding.y, rect_rel.GetHeight())); - ImRect visible_rect = GetViewportRect(); - return ImFloor(ImClamp(pos, visible_rect.Min, visible_rect.Max)); // ImFloor() is important because non-integer mouse position application in back-end might be lossy and result in undesirable non-zero delta. - } -} - -float ImGui::GetNavInputAmount(ImGuiNavInput n, ImGuiInputReadMode mode) -{ - ImGuiContext& g = *GImGui; - if (mode == ImGuiInputReadMode_Down) - return g.IO.NavInputs[n]; // Instant, read analog input (0.0f..1.0f, as provided by user) - - const float t = g.IO.NavInputsDownDuration[n]; - if (t < 0.0f && mode == ImGuiInputReadMode_Released) // Return 1.0f when just released, no repeat, ignore analog input. - return (g.IO.NavInputsDownDurationPrev[n] >= 0.0f ? 1.0f : 0.0f); - if (t < 0.0f) - return 0.0f; - if (mode == ImGuiInputReadMode_Pressed) // Return 1.0f when just pressed, no repeat, ignore analog input. - return (t == 0.0f) ? 1.0f : 0.0f; - if (mode == ImGuiInputReadMode_Repeat) - return (float)CalcTypematicRepeatAmount(t - g.IO.DeltaTime, t, g.IO.KeyRepeatDelay * 0.72f, g.IO.KeyRepeatRate * 0.80f); - if (mode == ImGuiInputReadMode_RepeatSlow) - return (float)CalcTypematicRepeatAmount(t - g.IO.DeltaTime, t, g.IO.KeyRepeatDelay * 1.25f, g.IO.KeyRepeatRate * 2.00f); - if (mode == ImGuiInputReadMode_RepeatFast) - return (float)CalcTypematicRepeatAmount(t - g.IO.DeltaTime, t, g.IO.KeyRepeatDelay * 0.72f, g.IO.KeyRepeatRate * 0.30f); - return 0.0f; -} - -ImVec2 ImGui::GetNavInputAmount2d(ImGuiNavDirSourceFlags dir_sources, ImGuiInputReadMode mode, float slow_factor, float fast_factor) -{ - ImVec2 delta(0.0f, 0.0f); - if (dir_sources & ImGuiNavDirSourceFlags_Keyboard) - delta += ImVec2(GetNavInputAmount(ImGuiNavInput_KeyRight_, mode) - GetNavInputAmount(ImGuiNavInput_KeyLeft_, mode), GetNavInputAmount(ImGuiNavInput_KeyDown_, mode) - GetNavInputAmount(ImGuiNavInput_KeyUp_, mode)); - if (dir_sources & ImGuiNavDirSourceFlags_PadDPad) - delta += ImVec2(GetNavInputAmount(ImGuiNavInput_DpadRight, mode) - GetNavInputAmount(ImGuiNavInput_DpadLeft, mode), GetNavInputAmount(ImGuiNavInput_DpadDown, mode) - GetNavInputAmount(ImGuiNavInput_DpadUp, mode)); - if (dir_sources & ImGuiNavDirSourceFlags_PadLStick) - delta += ImVec2(GetNavInputAmount(ImGuiNavInput_LStickRight, mode) - GetNavInputAmount(ImGuiNavInput_LStickLeft, mode), GetNavInputAmount(ImGuiNavInput_LStickDown, mode) - GetNavInputAmount(ImGuiNavInput_LStickUp, mode)); - if (slow_factor != 0.0f && IsNavInputDown(ImGuiNavInput_TweakSlow)) - delta *= slow_factor; - if (fast_factor != 0.0f && IsNavInputDown(ImGuiNavInput_TweakFast)) - delta *= fast_factor; - return delta; -} - -static void ImGui::NavUpdate() -{ - ImGuiContext& g = *GImGui; - g.IO.WantSetMousePos = false; -#if 0 - if (g.NavScoringCount > 0) IMGUI_DEBUG_LOG("NavScoringCount %d for '%s' layer %d (Init:%d, Move:%d)\n", g.FrameCount, g.NavScoringCount, g.NavWindow ? g.NavWindow->Name : "NULL", g.NavLayer, g.NavInitRequest || g.NavInitResultId != 0, g.NavMoveRequest); -#endif - - // Set input source as Gamepad when buttons are pressed (as some features differs when used with Gamepad vs Keyboard) - // (do it before we map Keyboard input!) - bool nav_keyboard_active = (g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard) != 0; - bool nav_gamepad_active = (g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableGamepad) != 0 && (g.IO.BackendFlags & ImGuiBackendFlags_HasGamepad) != 0; - if (nav_gamepad_active) - if (g.IO.NavInputs[ImGuiNavInput_Activate] > 0.0f || g.IO.NavInputs[ImGuiNavInput_Input] > 0.0f || g.IO.NavInputs[ImGuiNavInput_Cancel] > 0.0f || g.IO.NavInputs[ImGuiNavInput_Menu] > 0.0f) - g.NavInputSource = ImGuiInputSource_NavGamepad; - - // Update Keyboard->Nav inputs mapping - if (nav_keyboard_active) - { - #define NAV_MAP_KEY(_KEY, _NAV_INPUT) do { if (IsKeyDown(g.IO.KeyMap[_KEY])) { g.IO.NavInputs[_NAV_INPUT] = 1.0f; g.NavInputSource = ImGuiInputSource_NavKeyboard; } } while (0) - NAV_MAP_KEY(ImGuiKey_Space, ImGuiNavInput_Activate ); - NAV_MAP_KEY(ImGuiKey_Enter, ImGuiNavInput_Input ); - NAV_MAP_KEY(ImGuiKey_Escape, ImGuiNavInput_Cancel ); - NAV_MAP_KEY(ImGuiKey_LeftArrow, ImGuiNavInput_KeyLeft_ ); - NAV_MAP_KEY(ImGuiKey_RightArrow,ImGuiNavInput_KeyRight_); - NAV_MAP_KEY(ImGuiKey_UpArrow, ImGuiNavInput_KeyUp_ ); - NAV_MAP_KEY(ImGuiKey_DownArrow, ImGuiNavInput_KeyDown_ ); - if (g.IO.KeyCtrl) - g.IO.NavInputs[ImGuiNavInput_TweakSlow] = 1.0f; - if (g.IO.KeyShift) - g.IO.NavInputs[ImGuiNavInput_TweakFast] = 1.0f; - if (g.IO.KeyAlt && !g.IO.KeyCtrl) // AltGR is Alt+Ctrl, also even on keyboards without AltGR we don't want Alt+Ctrl to open menu. - g.IO.NavInputs[ImGuiNavInput_KeyMenu_] = 1.0f; - #undef NAV_MAP_KEY - } - memcpy(g.IO.NavInputsDownDurationPrev, g.IO.NavInputsDownDuration, sizeof(g.IO.NavInputsDownDuration)); - for (int i = 0; i < IM_ARRAYSIZE(g.IO.NavInputs); i++) - g.IO.NavInputsDownDuration[i] = (g.IO.NavInputs[i] > 0.0f) ? (g.IO.NavInputsDownDuration[i] < 0.0f ? 0.0f : g.IO.NavInputsDownDuration[i] + g.IO.DeltaTime) : -1.0f; - - // Process navigation init request (select first/default focus) - // In very rare cases g.NavWindow may be null (e.g. clearing focus after requesting an init request, which does happen when releasing Alt while clicking on void) - if (g.NavInitResultId != 0 && (!g.NavDisableHighlight || g.NavInitRequestFromMove) && g.NavWindow) - { - // Apply result from previous navigation init request (will typically select the first item, unless SetItemDefaultFocus() has been called) - //IMGUI_DEBUG_LOG("[Nav] Apply NavInitRequest result: 0x%08X Layer %d in \"%s\"\n", g.NavInitResultId, g.NavLayer, g.NavWindow->Name); - if (g.NavInitRequestFromMove) - SetNavIDWithRectRel(g.NavInitResultId, g.NavLayer, 0, g.NavInitResultRectRel); - else - SetNavID(g.NavInitResultId, g.NavLayer, 0); - g.NavWindow->NavRectRel[g.NavLayer] = g.NavInitResultRectRel; - } - g.NavInitRequest = false; - g.NavInitRequestFromMove = false; - g.NavInitResultId = 0; - g.NavJustMovedToId = 0; - - // Process navigation move request - if (g.NavMoveRequest) - NavUpdateMoveResult(); - - // When a forwarded move request failed, we restore the highlight that we disabled during the forward frame - if (g.NavMoveRequestForward == ImGuiNavForward_ForwardActive) - { - IM_ASSERT(g.NavMoveRequest); - if (g.NavMoveResultLocal.ID == 0 && g.NavMoveResultOther.ID == 0) - g.NavDisableHighlight = false; - g.NavMoveRequestForward = ImGuiNavForward_None; - } - - // Apply application mouse position movement, after we had a chance to process move request result. - if (g.NavMousePosDirty && g.NavIdIsAlive) - { - // Set mouse position given our knowledge of the navigated item position from last frame - if ((g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableSetMousePos) && (g.IO.BackendFlags & ImGuiBackendFlags_HasSetMousePos)) - { - if (!g.NavDisableHighlight && g.NavDisableMouseHover && g.NavWindow) - { - g.IO.MousePos = g.IO.MousePosPrev = NavCalcPreferredRefPos(); - g.IO.WantSetMousePos = true; - } - } - g.NavMousePosDirty = false; - } - g.NavIdIsAlive = false; - g.NavJustTabbedId = 0; - IM_ASSERT(g.NavLayer == 0 || g.NavLayer == 1); - - // Store our return window (for returning from Layer 1 to Layer 0) and clear it as soon as we step back in our own Layer 0 - if (g.NavWindow) - NavSaveLastChildNavWindowIntoParent(g.NavWindow); - if (g.NavWindow && g.NavWindow->NavLastChildNavWindow != NULL && g.NavLayer == 0) - g.NavWindow->NavLastChildNavWindow = NULL; - - // Update CTRL+TAB and Windowing features (hold Square to move/resize/etc.) - NavUpdateWindowing(); - - // Set output flags for user application - g.IO.NavActive = (nav_keyboard_active || nav_gamepad_active) && g.NavWindow && !(g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs); - g.IO.NavVisible = (g.IO.NavActive && g.NavId != 0 && !g.NavDisableHighlight) || (g.NavWindowingTarget != NULL); - - // Process NavCancel input (to close a popup, get back to parent, clear focus) - if (IsNavInputTest(ImGuiNavInput_Cancel, ImGuiInputReadMode_Pressed)) - { - if (g.ActiveId != 0) - { - if (!IsActiveIdUsingNavInput(ImGuiNavInput_Cancel)) - ClearActiveID(); - } - else if (g.NavWindow && (g.NavWindow->Flags & ImGuiWindowFlags_ChildWindow) && !(g.NavWindow->Flags & ImGuiWindowFlags_Popup) && g.NavWindow->ParentWindow) - { - // Exit child window - ImGuiWindow* child_window = g.NavWindow; - ImGuiWindow* parent_window = g.NavWindow->ParentWindow; - IM_ASSERT(child_window->ChildId != 0); - FocusWindow(parent_window); - SetNavID(child_window->ChildId, 0, 0); - // Reassigning with same value, we're being explicit here. - g.NavIdIsAlive = false; // -V1048 - if (g.NavDisableMouseHover) - g.NavMousePosDirty = true; - } - else if (g.OpenPopupStack.Size > 0) - { - // Close open popup/menu - if (!(g.OpenPopupStack.back().Window->Flags & ImGuiWindowFlags_Modal)) - ClosePopupToLevel(g.OpenPopupStack.Size - 1, true); - } - else if (g.NavLayer != 0) - { - // Leave the "menu" layer - NavRestoreLayer(ImGuiNavLayer_Main); - } - else - { - // Clear NavLastId for popups but keep it for regular child window so we can leave one and come back where we were - if (g.NavWindow && ((g.NavWindow->Flags & ImGuiWindowFlags_Popup) || !(g.NavWindow->Flags & ImGuiWindowFlags_ChildWindow))) - g.NavWindow->NavLastIds[0] = 0; - g.NavId = g.NavFocusScopeId = 0; - } - } - - // Process manual activation request - g.NavActivateId = g.NavActivateDownId = g.NavActivatePressedId = g.NavInputId = 0; - if (g.NavId != 0 && !g.NavDisableHighlight && !g.NavWindowingTarget && g.NavWindow && !(g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs)) - { - bool activate_down = IsNavInputDown(ImGuiNavInput_Activate); - bool activate_pressed = activate_down && IsNavInputTest(ImGuiNavInput_Activate, ImGuiInputReadMode_Pressed); - if (g.ActiveId == 0 && activate_pressed) - g.NavActivateId = g.NavId; - if ((g.ActiveId == 0 || g.ActiveId == g.NavId) && activate_down) - g.NavActivateDownId = g.NavId; - if ((g.ActiveId == 0 || g.ActiveId == g.NavId) && activate_pressed) - g.NavActivatePressedId = g.NavId; - if ((g.ActiveId == 0 || g.ActiveId == g.NavId) && IsNavInputTest(ImGuiNavInput_Input, ImGuiInputReadMode_Pressed)) - g.NavInputId = g.NavId; - } - if (g.NavWindow && (g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs)) - g.NavDisableHighlight = true; - if (g.NavActivateId != 0) - IM_ASSERT(g.NavActivateDownId == g.NavActivateId); - g.NavMoveRequest = false; - - // Process programmatic activation request - if (g.NavNextActivateId != 0) - g.NavActivateId = g.NavActivateDownId = g.NavActivatePressedId = g.NavInputId = g.NavNextActivateId; - g.NavNextActivateId = 0; - - // Initiate directional inputs request - if (g.NavMoveRequestForward == ImGuiNavForward_None) - { - g.NavMoveDir = ImGuiDir_None; - g.NavMoveRequestFlags = ImGuiNavMoveFlags_None; - if (g.NavWindow && !g.NavWindowingTarget && !(g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs)) - { - const ImGuiInputReadMode read_mode = ImGuiInputReadMode_Repeat; - if (!IsActiveIdUsingNavDir(ImGuiDir_Left) && (IsNavInputTest(ImGuiNavInput_DpadLeft, read_mode) || IsNavInputTest(ImGuiNavInput_KeyLeft_, read_mode))) { g.NavMoveDir = ImGuiDir_Left; } - if (!IsActiveIdUsingNavDir(ImGuiDir_Right) && (IsNavInputTest(ImGuiNavInput_DpadRight, read_mode) || IsNavInputTest(ImGuiNavInput_KeyRight_, read_mode))) { g.NavMoveDir = ImGuiDir_Right; } - if (!IsActiveIdUsingNavDir(ImGuiDir_Up) && (IsNavInputTest(ImGuiNavInput_DpadUp, read_mode) || IsNavInputTest(ImGuiNavInput_KeyUp_, read_mode))) { g.NavMoveDir = ImGuiDir_Up; } - if (!IsActiveIdUsingNavDir(ImGuiDir_Down) && (IsNavInputTest(ImGuiNavInput_DpadDown, read_mode) || IsNavInputTest(ImGuiNavInput_KeyDown_, read_mode))) { g.NavMoveDir = ImGuiDir_Down; } - } - g.NavMoveClipDir = g.NavMoveDir; - } - else - { - // Forwarding previous request (which has been modified, e.g. wrap around menus rewrite the requests with a starting rectangle at the other side of the window) - // (Preserve g.NavMoveRequestFlags, g.NavMoveClipDir which were set by the NavMoveRequestForward() function) - IM_ASSERT(g.NavMoveDir != ImGuiDir_None && g.NavMoveClipDir != ImGuiDir_None); - IM_ASSERT(g.NavMoveRequestForward == ImGuiNavForward_ForwardQueued); - g.NavMoveRequestForward = ImGuiNavForward_ForwardActive; - } - - // Update PageUp/PageDown/Home/End scroll - // FIXME-NAV: Consider enabling those keys even without the master ImGuiConfigFlags_NavEnableKeyboard flag? - float nav_scoring_rect_offset_y = 0.0f; - if (nav_keyboard_active) - nav_scoring_rect_offset_y = NavUpdatePageUpPageDown(); - - // If we initiate a movement request and have no current NavId, we initiate a InitDefautRequest that will be used as a fallback if the direction fails to find a match - if (g.NavMoveDir != ImGuiDir_None) - { - g.NavMoveRequest = true; - g.NavMoveDirLast = g.NavMoveDir; - } - if (g.NavMoveRequest && g.NavId == 0) - { - //IMGUI_DEBUG_LOG("[Nav] NavInitRequest from move, window \"%s\", layer=%d\n", g.NavWindow->Name, g.NavLayer); - g.NavInitRequest = g.NavInitRequestFromMove = true; - // Reassigning with same value, we're being explicit here. - g.NavInitResultId = 0; // -V1048 - g.NavDisableHighlight = false; - } - NavUpdateAnyRequestFlag(); - - // Scrolling - if (g.NavWindow && !(g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs) && !g.NavWindowingTarget) - { - // *Fallback* manual-scroll with Nav directional keys when window has no navigable item - ImGuiWindow* window = g.NavWindow; - const float scroll_speed = IM_ROUND(window->CalcFontSize() * 100 * g.IO.DeltaTime); // We need round the scrolling speed because sub-pixel scroll isn't reliably supported. - if (window->DC.NavLayerActiveMask == 0x00 && window->DC.NavHasScroll && g.NavMoveRequest) - { - if (g.NavMoveDir == ImGuiDir_Left || g.NavMoveDir == ImGuiDir_Right) - SetScrollX(window, ImFloor(window->Scroll.x + ((g.NavMoveDir == ImGuiDir_Left) ? -1.0f : +1.0f) * scroll_speed)); - if (g.NavMoveDir == ImGuiDir_Up || g.NavMoveDir == ImGuiDir_Down) - SetScrollY(window, ImFloor(window->Scroll.y + ((g.NavMoveDir == ImGuiDir_Up) ? -1.0f : +1.0f) * scroll_speed)); - } - - // *Normal* Manual scroll with NavScrollXXX keys - // Next movement request will clamp the NavId reference rectangle to the visible area, so navigation will resume within those bounds. - ImVec2 scroll_dir = GetNavInputAmount2d(ImGuiNavDirSourceFlags_PadLStick, ImGuiInputReadMode_Down, 1.0f/10.0f, 10.0f); - if (scroll_dir.x != 0.0f && window->ScrollbarX) - { - SetScrollX(window, ImFloor(window->Scroll.x + scroll_dir.x * scroll_speed)); - g.NavMoveFromClampedRefRect = true; - } - if (scroll_dir.y != 0.0f) - { - SetScrollY(window, ImFloor(window->Scroll.y + scroll_dir.y * scroll_speed)); - g.NavMoveFromClampedRefRect = true; - } - } - - // Reset search results - g.NavMoveResultLocal.Clear(); - g.NavMoveResultLocalVisibleSet.Clear(); - g.NavMoveResultOther.Clear(); - - // When we have manually scrolled (without using navigation) and NavId becomes out of bounds, we project its bounding box to the visible area to restart navigation within visible items - if (g.NavMoveRequest && g.NavMoveFromClampedRefRect && g.NavLayer == 0) - { - ImGuiWindow* window = g.NavWindow; - ImRect window_rect_rel(window->InnerRect.Min - window->Pos - ImVec2(1,1), window->InnerRect.Max - window->Pos + ImVec2(1,1)); - if (!window_rect_rel.Contains(window->NavRectRel[g.NavLayer])) - { - float pad = window->CalcFontSize() * 0.5f; - window_rect_rel.Expand(ImVec2(-ImMin(window_rect_rel.GetWidth(), pad), -ImMin(window_rect_rel.GetHeight(), pad))); // Terrible approximation for the intent of starting navigation from first fully visible item - window->NavRectRel[g.NavLayer].ClipWith(window_rect_rel); - g.NavId = g.NavFocusScopeId = 0; - } - g.NavMoveFromClampedRefRect = false; - } - - // For scoring we use a single segment on the left side our current item bounding box (not touching the edge to avoid box overlap with zero-spaced items) - ImRect nav_rect_rel = (g.NavWindow && !g.NavWindow->NavRectRel[g.NavLayer].IsInverted()) ? g.NavWindow->NavRectRel[g.NavLayer] : ImRect(0,0,0,0); - g.NavScoringRectScreen = g.NavWindow ? ImRect(g.NavWindow->Pos + nav_rect_rel.Min, g.NavWindow->Pos + nav_rect_rel.Max) : GetViewportRect(); - g.NavScoringRectScreen.TranslateY(nav_scoring_rect_offset_y); - g.NavScoringRectScreen.Min.x = ImMin(g.NavScoringRectScreen.Min.x + 1.0f, g.NavScoringRectScreen.Max.x); - g.NavScoringRectScreen.Max.x = g.NavScoringRectScreen.Min.x; - IM_ASSERT(!g.NavScoringRectScreen.IsInverted()); // Ensure if we have a finite, non-inverted bounding box here will allows us to remove extraneous ImFabs() calls in NavScoreItem(). - //GetForegroundDrawList()->AddRect(g.NavScoringRectScreen.Min, g.NavScoringRectScreen.Max, IM_COL32(255,200,0,255)); // [DEBUG] - g.NavScoringCount = 0; -#if IMGUI_DEBUG_NAV_RECTS - if (g.NavWindow) - { - ImDrawList* draw_list = GetForegroundDrawList(g.NavWindow); - if (1) { for (int layer = 0; layer < 2; layer++) draw_list->AddRect(g.NavWindow->Pos + g.NavWindow->NavRectRel[layer].Min, g.NavWindow->Pos + g.NavWindow->NavRectRel[layer].Max, IM_COL32(255,200,0,255)); } // [DEBUG] - if (1) { ImU32 col = (!g.NavWindow->Hidden) ? IM_COL32(255,0,255,255) : IM_COL32(255,0,0,255); ImVec2 p = NavCalcPreferredRefPos(); char buf[32]; ImFormatString(buf, 32, "%d", g.NavLayer); draw_list->AddCircleFilled(p, 3.0f, col); draw_list->AddText(NULL, 13.0f, p + ImVec2(8,-4), col, buf); } - } -#endif -} - -// Apply result from previous frame navigation directional move request -static void ImGui::NavUpdateMoveResult() -{ - ImGuiContext& g = *GImGui; - if (g.NavMoveResultLocal.ID == 0 && g.NavMoveResultOther.ID == 0) - { - // In a situation when there is no results but NavId != 0, re-enable the Navigation highlight (because g.NavId is not considered as a possible result) - if (g.NavId != 0) - { - g.NavDisableHighlight = false; - g.NavDisableMouseHover = true; - } - return; - } - - // Select which result to use - ImGuiNavMoveResult* result = (g.NavMoveResultLocal.ID != 0) ? &g.NavMoveResultLocal : &g.NavMoveResultOther; - - // PageUp/PageDown behavior first jumps to the bottom/top mostly visible item, _otherwise_ use the result from the previous/next page. - if (g.NavMoveRequestFlags & ImGuiNavMoveFlags_AlsoScoreVisibleSet) - if (g.NavMoveResultLocalVisibleSet.ID != 0 && g.NavMoveResultLocalVisibleSet.ID != g.NavId) - result = &g.NavMoveResultLocalVisibleSet; - - // Maybe entering a flattened child from the outside? In this case solve the tie using the regular scoring rules. - if (result != &g.NavMoveResultOther && g.NavMoveResultOther.ID != 0 && g.NavMoveResultOther.Window->ParentWindow == g.NavWindow) - if ((g.NavMoveResultOther.DistBox < result->DistBox) || (g.NavMoveResultOther.DistBox == result->DistBox && g.NavMoveResultOther.DistCenter < result->DistCenter)) - result = &g.NavMoveResultOther; - IM_ASSERT(g.NavWindow && result->Window); - - // Scroll to keep newly navigated item fully into view. - if (g.NavLayer == 0) - { - ImVec2 delta_scroll; - if (g.NavMoveRequestFlags & ImGuiNavMoveFlags_ScrollToEdge) - { - float scroll_target = (g.NavMoveDir == ImGuiDir_Up) ? result->Window->ScrollMax.y : 0.0f; - delta_scroll.y = result->Window->Scroll.y - scroll_target; - SetScrollY(result->Window, scroll_target); - } - else - { - ImRect rect_abs = ImRect(result->RectRel.Min + result->Window->Pos, result->RectRel.Max + result->Window->Pos); - delta_scroll = ScrollToBringRectIntoView(result->Window, rect_abs); - } - - // Offset our result position so mouse position can be applied immediately after in NavUpdate() - result->RectRel.TranslateX(-delta_scroll.x); - result->RectRel.TranslateY(-delta_scroll.y); - } - - ClearActiveID(); - g.NavWindow = result->Window; - if (g.NavId != result->ID) - { - // Don't set NavJustMovedToId if just landed on the same spot (which may happen with ImGuiNavMoveFlags_AllowCurrentNavId) - g.NavJustMovedToId = result->ID; - g.NavJustMovedToFocusScopeId = result->FocusScopeId; - - } - SetNavIDWithRectRel(result->ID, g.NavLayer, result->FocusScopeId, result->RectRel); - g.NavMoveFromClampedRefRect = false; -} - -// Handle PageUp/PageDown/Home/End keys -static float ImGui::NavUpdatePageUpPageDown() -{ - ImGuiContext& g = *GImGui; - if (g.NavMoveDir != ImGuiDir_None || g.NavWindow == NULL) - return 0.0f; - if ((g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs) || g.NavWindowingTarget != NULL || g.NavLayer != 0) - return 0.0f; - - ImGuiWindow* window = g.NavWindow; - const bool page_up_held = IsKeyDown(g.IO.KeyMap[ImGuiKey_PageUp]) && !IsActiveIdUsingKey(ImGuiKey_PageUp); - const bool page_down_held = IsKeyDown(g.IO.KeyMap[ImGuiKey_PageDown]) && !IsActiveIdUsingKey(ImGuiKey_PageDown); - const bool home_pressed = IsKeyPressed(g.IO.KeyMap[ImGuiKey_Home]) && !IsActiveIdUsingKey(ImGuiKey_Home); - const bool end_pressed = IsKeyPressed(g.IO.KeyMap[ImGuiKey_End]) && !IsActiveIdUsingKey(ImGuiKey_End); - if (page_up_held != page_down_held || home_pressed != end_pressed) // If either (not both) are pressed - { - if (window->DC.NavLayerActiveMask == 0x00 && window->DC.NavHasScroll) - { - // Fallback manual-scroll when window has no navigable item - if (IsKeyPressed(g.IO.KeyMap[ImGuiKey_PageUp], true)) - SetScrollY(window, window->Scroll.y - window->InnerRect.GetHeight()); - else if (IsKeyPressed(g.IO.KeyMap[ImGuiKey_PageDown], true)) - SetScrollY(window, window->Scroll.y + window->InnerRect.GetHeight()); - else if (home_pressed) - SetScrollY(window, 0.0f); - else if (end_pressed) - SetScrollY(window, window->ScrollMax.y); - } - else - { - ImRect& nav_rect_rel = window->NavRectRel[g.NavLayer]; - const float page_offset_y = ImMax(0.0f, window->InnerRect.GetHeight() - window->CalcFontSize() * 1.0f + nav_rect_rel.GetHeight()); - float nav_scoring_rect_offset_y = 0.0f; - if (IsKeyPressed(g.IO.KeyMap[ImGuiKey_PageUp], true)) - { - nav_scoring_rect_offset_y = -page_offset_y; - g.NavMoveDir = ImGuiDir_Down; // Because our scoring rect is offset up, we request the down direction (so we can always land on the last item) - g.NavMoveClipDir = ImGuiDir_Up; - g.NavMoveRequestFlags = ImGuiNavMoveFlags_AllowCurrentNavId | ImGuiNavMoveFlags_AlsoScoreVisibleSet; - } - else if (IsKeyPressed(g.IO.KeyMap[ImGuiKey_PageDown], true)) - { - nav_scoring_rect_offset_y = +page_offset_y; - g.NavMoveDir = ImGuiDir_Up; // Because our scoring rect is offset down, we request the up direction (so we can always land on the last item) - g.NavMoveClipDir = ImGuiDir_Down; - g.NavMoveRequestFlags = ImGuiNavMoveFlags_AllowCurrentNavId | ImGuiNavMoveFlags_AlsoScoreVisibleSet; - } - else if (home_pressed) - { - // FIXME-NAV: handling of Home/End is assuming that the top/bottom most item will be visible with Scroll.y == 0/ScrollMax.y - // Scrolling will be handled via the ImGuiNavMoveFlags_ScrollToEdge flag, we don't scroll immediately to avoid scrolling happening before nav result. - // Preserve current horizontal position if we have any. - nav_rect_rel.Min.y = nav_rect_rel.Max.y = -window->Scroll.y; - if (nav_rect_rel.IsInverted()) - nav_rect_rel.Min.x = nav_rect_rel.Max.x = 0.0f; - g.NavMoveDir = ImGuiDir_Down; - g.NavMoveRequestFlags = ImGuiNavMoveFlags_AllowCurrentNavId | ImGuiNavMoveFlags_ScrollToEdge; - } - else if (end_pressed) - { - nav_rect_rel.Min.y = nav_rect_rel.Max.y = window->ScrollMax.y + window->SizeFull.y - window->Scroll.y; - if (nav_rect_rel.IsInverted()) - nav_rect_rel.Min.x = nav_rect_rel.Max.x = 0.0f; - g.NavMoveDir = ImGuiDir_Up; - g.NavMoveRequestFlags = ImGuiNavMoveFlags_AllowCurrentNavId | ImGuiNavMoveFlags_ScrollToEdge; - } - return nav_scoring_rect_offset_y; - } - } - return 0.0f; -} - -static int ImGui::FindWindowFocusIndex(ImGuiWindow* window) // FIXME-OPT O(N) -{ - ImGuiContext& g = *GImGui; - for (int i = g.WindowsFocusOrder.Size-1; i >= 0; i--) - if (g.WindowsFocusOrder[i] == window) - return i; - return -1; -} - -static ImGuiWindow* FindWindowNavFocusable(int i_start, int i_stop, int dir) // FIXME-OPT O(N) -{ - ImGuiContext& g = *GImGui; - for (int i = i_start; i >= 0 && i < g.WindowsFocusOrder.Size && i != i_stop; i += dir) - if (ImGui::IsWindowNavFocusable(g.WindowsFocusOrder[i])) - return g.WindowsFocusOrder[i]; - return NULL; -} - -static void NavUpdateWindowingHighlightWindow(int focus_change_dir) -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(g.NavWindowingTarget); - if (g.NavWindowingTarget->Flags & ImGuiWindowFlags_Modal) - return; - - const int i_current = ImGui::FindWindowFocusIndex(g.NavWindowingTarget); - ImGuiWindow* window_target = FindWindowNavFocusable(i_current + focus_change_dir, -INT_MAX, focus_change_dir); - if (!window_target) - window_target = FindWindowNavFocusable((focus_change_dir < 0) ? (g.WindowsFocusOrder.Size - 1) : 0, i_current, focus_change_dir); - if (window_target) // Don't reset windowing target if there's a single window in the list - g.NavWindowingTarget = g.NavWindowingTargetAnim = window_target; - g.NavWindowingToggleLayer = false; -} - -// Windowing management mode -// Keyboard: CTRL+Tab (change focus/move/resize), Alt (toggle menu layer) -// Gamepad: Hold Menu/Square (change focus/move/resize), Tap Menu/Square (toggle menu layer) -static void ImGui::NavUpdateWindowing() -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* apply_focus_window = NULL; - bool apply_toggle_layer = false; - - ImGuiWindow* modal_window = GetTopMostPopupModal(); - if (modal_window != NULL) - { - g.NavWindowingTarget = NULL; - return; - } - - // Fade out - if (g.NavWindowingTargetAnim && g.NavWindowingTarget == NULL) - { - g.NavWindowingHighlightAlpha = ImMax(g.NavWindowingHighlightAlpha - g.IO.DeltaTime * 10.0f, 0.0f); - if (g.DimBgRatio <= 0.0f && g.NavWindowingHighlightAlpha <= 0.0f) - g.NavWindowingTargetAnim = NULL; - } - - // Start CTRL-TAB or Square+L/R window selection - bool start_windowing_with_gamepad = !g.NavWindowingTarget && IsNavInputTest(ImGuiNavInput_Menu, ImGuiInputReadMode_Pressed); - bool start_windowing_with_keyboard = !g.NavWindowingTarget && g.IO.KeyCtrl && IsKeyPressedMap(ImGuiKey_Tab) && (g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard); - if (start_windowing_with_gamepad || start_windowing_with_keyboard) - if (ImGuiWindow* window = g.NavWindow ? g.NavWindow : FindWindowNavFocusable(g.WindowsFocusOrder.Size - 1, -INT_MAX, -1)) - { - g.NavWindowingTarget = g.NavWindowingTargetAnim = window->RootWindow; // FIXME-DOCK: Will need to use RootWindowDockStop - g.NavWindowingTimer = g.NavWindowingHighlightAlpha = 0.0f; - g.NavWindowingToggleLayer = start_windowing_with_keyboard ? false : true; - g.NavInputSource = start_windowing_with_keyboard ? ImGuiInputSource_NavKeyboard : ImGuiInputSource_NavGamepad; - } - - // Gamepad update - g.NavWindowingTimer += g.IO.DeltaTime; - if (g.NavWindowingTarget && g.NavInputSource == ImGuiInputSource_NavGamepad) - { - // Highlight only appears after a brief time holding the button, so that a fast tap on PadMenu (to toggle NavLayer) doesn't add visual noise - g.NavWindowingHighlightAlpha = ImMax(g.NavWindowingHighlightAlpha, ImSaturate((g.NavWindowingTimer - NAV_WINDOWING_HIGHLIGHT_DELAY) / 0.05f)); - - // Select window to focus - const int focus_change_dir = (int)IsNavInputTest(ImGuiNavInput_FocusPrev, ImGuiInputReadMode_RepeatSlow) - (int)IsNavInputTest(ImGuiNavInput_FocusNext, ImGuiInputReadMode_RepeatSlow); - if (focus_change_dir != 0) - { - NavUpdateWindowingHighlightWindow(focus_change_dir); - g.NavWindowingHighlightAlpha = 1.0f; - } - - // Single press toggles NavLayer, long press with L/R apply actual focus on release (until then the window was merely rendered top-most) - if (!IsNavInputDown(ImGuiNavInput_Menu)) - { - g.NavWindowingToggleLayer &= (g.NavWindowingHighlightAlpha < 1.0f); // Once button was held long enough we don't consider it a tap-to-toggle-layer press anymore. - if (g.NavWindowingToggleLayer && g.NavWindow) - apply_toggle_layer = true; - else if (!g.NavWindowingToggleLayer) - apply_focus_window = g.NavWindowingTarget; - g.NavWindowingTarget = NULL; - } - } - - // Keyboard: Focus - if (g.NavWindowingTarget && g.NavInputSource == ImGuiInputSource_NavKeyboard) - { - // Visuals only appears after a brief time after pressing TAB the first time, so that a fast CTRL+TAB doesn't add visual noise - g.NavWindowingHighlightAlpha = ImMax(g.NavWindowingHighlightAlpha, ImSaturate((g.NavWindowingTimer - NAV_WINDOWING_HIGHLIGHT_DELAY) / 0.05f)); // 1.0f - if (IsKeyPressedMap(ImGuiKey_Tab, true)) - NavUpdateWindowingHighlightWindow(g.IO.KeyShift ? +1 : -1); - if (!g.IO.KeyCtrl) - apply_focus_window = g.NavWindowingTarget; - } - - // Keyboard: Press and Release ALT to toggle menu layer - // FIXME: We lack an explicit IO variable for "is the imgui window focused", so compare mouse validity to detect the common case of back-end clearing releases all keys on ALT-TAB - if (IsNavInputTest(ImGuiNavInput_KeyMenu_, ImGuiInputReadMode_Pressed)) - g.NavWindowingToggleLayer = true; - if ((g.ActiveId == 0 || g.ActiveIdAllowOverlap) && g.NavWindowingToggleLayer && IsNavInputTest(ImGuiNavInput_KeyMenu_, ImGuiInputReadMode_Released)) - if (IsMousePosValid(&g.IO.MousePos) == IsMousePosValid(&g.IO.MousePosPrev)) - apply_toggle_layer = true; - - // Move window - if (g.NavWindowingTarget && !(g.NavWindowingTarget->Flags & ImGuiWindowFlags_NoMove)) - { - ImVec2 move_delta; - if (g.NavInputSource == ImGuiInputSource_NavKeyboard && !g.IO.KeyShift) - move_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_Keyboard, ImGuiInputReadMode_Down); - if (g.NavInputSource == ImGuiInputSource_NavGamepad) - move_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_PadLStick, ImGuiInputReadMode_Down); - if (move_delta.x != 0.0f || move_delta.y != 0.0f) - { - const float NAV_MOVE_SPEED = 800.0f; - const float move_speed = ImFloor(NAV_MOVE_SPEED * g.IO.DeltaTime * ImMin(g.IO.DisplayFramebufferScale.x, g.IO.DisplayFramebufferScale.y)); // FIXME: Doesn't code variable framerate very well - SetWindowPos(g.NavWindowingTarget->RootWindow, g.NavWindowingTarget->RootWindow->Pos + move_delta * move_speed, ImGuiCond_Always); - g.NavDisableMouseHover = true; - MarkIniSettingsDirty(g.NavWindowingTarget); - } - } - - // Apply final focus - if (apply_focus_window && (g.NavWindow == NULL || apply_focus_window != g.NavWindow->RootWindow)) - { - ClearActiveID(); - g.NavDisableHighlight = false; - g.NavDisableMouseHover = true; - apply_focus_window = NavRestoreLastChildNavWindow(apply_focus_window); - ClosePopupsOverWindow(apply_focus_window, false); - FocusWindow(apply_focus_window); - if (apply_focus_window->NavLastIds[0] == 0) - NavInitWindow(apply_focus_window, false); - - // If the window only has a menu layer, select it directly - if (apply_focus_window->DC.NavLayerActiveMask == (1 << ImGuiNavLayer_Menu)) - g.NavLayer = ImGuiNavLayer_Menu; - } - if (apply_focus_window) - g.NavWindowingTarget = NULL; - - // Apply menu/layer toggle - if (apply_toggle_layer && g.NavWindow) - { - // Move to parent menu if necessary - ImGuiWindow* new_nav_window = g.NavWindow; - while (new_nav_window->ParentWindow - && (new_nav_window->DC.NavLayerActiveMask & (1 << ImGuiNavLayer_Menu)) == 0 - && (new_nav_window->Flags & ImGuiWindowFlags_ChildWindow) != 0 - && (new_nav_window->Flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_ChildMenu)) == 0) - new_nav_window = new_nav_window->ParentWindow; - if (new_nav_window != g.NavWindow) - { - ImGuiWindow* old_nav_window = g.NavWindow; - FocusWindow(new_nav_window); - new_nav_window->NavLastChildNavWindow = old_nav_window; - } - g.NavDisableHighlight = false; - g.NavDisableMouseHover = true; - - // When entering a regular menu bar with the Alt key, we always reinitialize the navigation ID. - const ImGuiNavLayer new_nav_layer = (g.NavWindow->DC.NavLayerActiveMask & (1 << ImGuiNavLayer_Menu)) ? (ImGuiNavLayer)((int)g.NavLayer ^ 1) : ImGuiNavLayer_Main; - NavRestoreLayer(new_nav_layer); - } -} - -// Window has already passed the IsWindowNavFocusable() -static const char* GetFallbackWindowNameForWindowingList(ImGuiWindow* window) -{ - if (window->Flags & ImGuiWindowFlags_Popup) - return "(Popup)"; - if ((window->Flags & ImGuiWindowFlags_MenuBar) && strcmp(window->Name, "##MainMenuBar") == 0) - return "(Main menu bar)"; - return "(Untitled)"; -} - -// Overlay displayed when using CTRL+TAB. Called by EndFrame(). -void ImGui::NavUpdateWindowingOverlay() -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(g.NavWindowingTarget != NULL); - - if (g.NavWindowingTimer < NAV_WINDOWING_LIST_APPEAR_DELAY) - return; - - if (g.NavWindowingList == NULL) - g.NavWindowingList = FindWindowByName("###NavWindowingList"); - SetNextWindowSizeConstraints(ImVec2(g.IO.DisplaySize.x * 0.20f, g.IO.DisplaySize.y * 0.20f), ImVec2(FLT_MAX, FLT_MAX)); - SetNextWindowPos(g.IO.DisplaySize * 0.5f, ImGuiCond_Always, ImVec2(0.5f, 0.5f)); - PushStyleVar(ImGuiStyleVar_WindowPadding, g.Style.WindowPadding * 2.0f); - Begin("###NavWindowingList", NULL, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoSavedSettings); - for (int n = g.WindowsFocusOrder.Size - 1; n >= 0; n--) - { - ImGuiWindow* window = g.WindowsFocusOrder[n]; - if (!IsWindowNavFocusable(window)) - continue; - const char* label = window->Name; - if (label == FindRenderedTextEnd(label)) - label = GetFallbackWindowNameForWindowingList(window); - Selectable(label, g.NavWindowingTarget == window); - } - End(); - PopStyleVar(); -} - -//----------------------------------------------------------------------------- -// [SECTION] DRAG AND DROP -//----------------------------------------------------------------------------- - -void ImGui::ClearDragDrop() -{ - ImGuiContext& g = *GImGui; - g.DragDropActive = false; - g.DragDropPayload.Clear(); - g.DragDropAcceptFlags = ImGuiDragDropFlags_None; - g.DragDropAcceptIdCurr = g.DragDropAcceptIdPrev = 0; - g.DragDropAcceptIdCurrRectSurface = FLT_MAX; - g.DragDropAcceptFrameCount = -1; - - g.DragDropPayloadBufHeap.clear(); - memset(&g.DragDropPayloadBufLocal, 0, sizeof(g.DragDropPayloadBufLocal)); -} - -// Call when current ID is active. -// When this returns true you need to: a) call SetDragDropPayload() exactly once, b) you may render the payload visual/description, c) call EndDragDropSource() -bool ImGui::BeginDragDropSource(ImGuiDragDropFlags flags) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - - bool source_drag_active = false; - ImGuiID source_id = 0; - ImGuiID source_parent_id = 0; - ImGuiMouseButton mouse_button = ImGuiMouseButton_Left; - if (!(flags & ImGuiDragDropFlags_SourceExtern)) - { - source_id = window->DC.LastItemId; - if (source_id != 0 && g.ActiveId != source_id) // Early out for most common case - return false; - if (g.IO.MouseDown[mouse_button] == false) - return false; - - if (source_id == 0) - { - // If you want to use BeginDragDropSource() on an item with no unique identifier for interaction, such as Text() or Image(), you need to: - // A) Read the explanation below, B) Use the ImGuiDragDropFlags_SourceAllowNullID flag, C) Swallow your programmer pride. - if (!(flags & ImGuiDragDropFlags_SourceAllowNullID)) - { - IM_ASSERT(0); - return false; - } - - // Early out - if ((window->DC.LastItemStatusFlags & ImGuiItemStatusFlags_HoveredRect) == 0 && (g.ActiveId == 0 || g.ActiveIdWindow != window)) - return false; - - // Magic fallback (=somehow reprehensible) to handle items with no assigned ID, e.g. Text(), Image() - // We build a throwaway ID based on current ID stack + relative AABB of items in window. - // THE IDENTIFIER WON'T SURVIVE ANY REPOSITIONING OF THE WIDGET, so if your widget moves your dragging operation will be canceled. - // We don't need to maintain/call ClearActiveID() as releasing the button will early out this function and trigger !ActiveIdIsAlive. - source_id = window->DC.LastItemId = window->GetIDFromRectangle(window->DC.LastItemRect); - bool is_hovered = ItemHoverable(window->DC.LastItemRect, source_id); - if (is_hovered && g.IO.MouseClicked[mouse_button]) - { - SetActiveID(source_id, window); - FocusWindow(window); - } - if (g.ActiveId == source_id) // Allow the underlying widget to display/return hovered during the mouse release frame, else we would get a flicker. - g.ActiveIdAllowOverlap = is_hovered; - } - else - { - g.ActiveIdAllowOverlap = false; - } - if (g.ActiveId != source_id) - return false; - source_parent_id = window->IDStack.back(); - source_drag_active = IsMouseDragging(mouse_button); - - // Disable navigation and key inputs while dragging - g.ActiveIdUsingNavDirMask = ~(ImU32)0; - g.ActiveIdUsingNavInputMask = ~(ImU32)0; - g.ActiveIdUsingKeyInputMask = ~(ImU64)0; - } - else - { - window = NULL; - source_id = ImHashStr("#SourceExtern"); - source_drag_active = true; - } - - if (source_drag_active) - { - if (!g.DragDropActive) - { - IM_ASSERT(source_id != 0); - ClearDragDrop(); - ImGuiPayload& payload = g.DragDropPayload; - payload.SourceId = source_id; - payload.SourceParentId = source_parent_id; - g.DragDropActive = true; - g.DragDropSourceFlags = flags; - g.DragDropMouseButton = mouse_button; - } - g.DragDropSourceFrameCount = g.FrameCount; - g.DragDropWithinSource = true; - - if (!(flags & ImGuiDragDropFlags_SourceNoPreviewTooltip)) - { - // Target can request the Source to not display its tooltip (we use a dedicated flag to make this request explicit) - // We unfortunately can't just modify the source flags and skip the call to BeginTooltip, as caller may be emitting contents. - BeginTooltip(); - if (g.DragDropAcceptIdPrev && (g.DragDropAcceptFlags & ImGuiDragDropFlags_AcceptNoPreviewTooltip)) - { - ImGuiWindow* tooltip_window = g.CurrentWindow; - tooltip_window->SkipItems = true; - tooltip_window->HiddenFramesCanSkipItems = 1; - } - } - - if (!(flags & ImGuiDragDropFlags_SourceNoDisableHover) && !(flags & ImGuiDragDropFlags_SourceExtern)) - window->DC.LastItemStatusFlags &= ~ImGuiItemStatusFlags_HoveredRect; - - return true; - } - return false; -} - -void ImGui::EndDragDropSource() -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(g.DragDropActive); - IM_ASSERT(g.DragDropWithinSource && "Not after a BeginDragDropSource()?"); - - if (!(g.DragDropSourceFlags & ImGuiDragDropFlags_SourceNoPreviewTooltip)) - EndTooltip(); - - // Discard the drag if have not called SetDragDropPayload() - if (g.DragDropPayload.DataFrameCount == -1) - ClearDragDrop(); - g.DragDropWithinSource = false; -} - -// Use 'cond' to choose to submit payload on drag start or every frame -bool ImGui::SetDragDropPayload(const char* type, const void* data, size_t data_size, ImGuiCond cond) -{ - ImGuiContext& g = *GImGui; - ImGuiPayload& payload = g.DragDropPayload; - if (cond == 0) - cond = ImGuiCond_Always; - - IM_ASSERT(type != NULL); - IM_ASSERT(strlen(type) < IM_ARRAYSIZE(payload.DataType) && "Payload type can be at most 32 characters long"); - IM_ASSERT((data != NULL && data_size > 0) || (data == NULL && data_size == 0)); - IM_ASSERT(cond == ImGuiCond_Always || cond == ImGuiCond_Once); - IM_ASSERT(payload.SourceId != 0); // Not called between BeginDragDropSource() and EndDragDropSource() - - if (cond == ImGuiCond_Always || payload.DataFrameCount == -1) - { - // Copy payload - ImStrncpy(payload.DataType, type, IM_ARRAYSIZE(payload.DataType)); - g.DragDropPayloadBufHeap.resize(0); - if (data_size > sizeof(g.DragDropPayloadBufLocal)) - { - // Store in heap - g.DragDropPayloadBufHeap.resize((int)data_size); - payload.Data = g.DragDropPayloadBufHeap.Data; - memcpy(payload.Data, data, data_size); - } - else if (data_size > 0) - { - // Store locally - memset(&g.DragDropPayloadBufLocal, 0, sizeof(g.DragDropPayloadBufLocal)); - payload.Data = g.DragDropPayloadBufLocal; - memcpy(payload.Data, data, data_size); - } - else - { - payload.Data = NULL; - } - payload.DataSize = (int)data_size; - } - payload.DataFrameCount = g.FrameCount; - - return (g.DragDropAcceptFrameCount == g.FrameCount) || (g.DragDropAcceptFrameCount == g.FrameCount - 1); -} - -bool ImGui::BeginDragDropTargetCustom(const ImRect& bb, ImGuiID id) -{ - ImGuiContext& g = *GImGui; - if (!g.DragDropActive) - return false; - - ImGuiWindow* window = g.CurrentWindow; - if (g.HoveredWindow == NULL || window->RootWindow != g.HoveredWindow->RootWindow) - return false; - IM_ASSERT(id != 0); - if (!IsMouseHoveringRect(bb.Min, bb.Max) || (id == g.DragDropPayload.SourceId)) - return false; - if (window->SkipItems) - return false; - - IM_ASSERT(g.DragDropWithinTarget == false); - g.DragDropTargetRect = bb; - g.DragDropTargetId = id; - g.DragDropWithinTarget = true; - return true; -} - -// We don't use BeginDragDropTargetCustom() and duplicate its code because: -// 1) we use LastItemRectHoveredRect which handles items that pushes a temporarily clip rectangle in their code. Calling BeginDragDropTargetCustom(LastItemRect) would not handle them. -// 2) and it's faster. as this code may be very frequently called, we want to early out as fast as we can. -// Also note how the HoveredWindow test is positioned differently in both functions (in both functions we optimize for the cheapest early out case) -bool ImGui::BeginDragDropTarget() -{ - ImGuiContext& g = *GImGui; - if (!g.DragDropActive) - return false; - - ImGuiWindow* window = g.CurrentWindow; - if (!(window->DC.LastItemStatusFlags & ImGuiItemStatusFlags_HoveredRect)) - return false; - if (g.HoveredWindow == NULL || window->RootWindow != g.HoveredWindow->RootWindow) - return false; - - const ImRect& display_rect = (window->DC.LastItemStatusFlags & ImGuiItemStatusFlags_HasDisplayRect) ? window->DC.LastItemDisplayRect : window->DC.LastItemRect; - ImGuiID id = window->DC.LastItemId; - if (id == 0) - id = window->GetIDFromRectangle(display_rect); - if (g.DragDropPayload.SourceId == id) - return false; - - IM_ASSERT(g.DragDropWithinTarget == false); - g.DragDropTargetRect = display_rect; - g.DragDropTargetId = id; - g.DragDropWithinTarget = true; - return true; -} - -bool ImGui::IsDragDropPayloadBeingAccepted() -{ - ImGuiContext& g = *GImGui; - return g.DragDropActive && g.DragDropAcceptIdPrev != 0; -} - -const ImGuiPayload* ImGui::AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - ImGuiPayload& payload = g.DragDropPayload; - IM_ASSERT(g.DragDropActive); // Not called between BeginDragDropTarget() and EndDragDropTarget() ? - IM_ASSERT(payload.DataFrameCount != -1); // Forgot to call EndDragDropTarget() ? - if (type != NULL && !payload.IsDataType(type)) - return NULL; - - // Accept smallest drag target bounding box, this allows us to nest drag targets conveniently without ordering constraints. - // NB: We currently accept NULL id as target. However, overlapping targets requires a unique ID to function! - const bool was_accepted_previously = (g.DragDropAcceptIdPrev == g.DragDropTargetId); - ImRect r = g.DragDropTargetRect; - float r_surface = r.GetWidth() * r.GetHeight(); - if (r_surface < g.DragDropAcceptIdCurrRectSurface) - { - g.DragDropAcceptFlags = flags; - g.DragDropAcceptIdCurr = g.DragDropTargetId; - g.DragDropAcceptIdCurrRectSurface = r_surface; - } - - // Render default drop visuals - payload.Preview = was_accepted_previously; - flags |= (g.DragDropSourceFlags & ImGuiDragDropFlags_AcceptNoDrawDefaultRect); // Source can also inhibit the preview (useful for external sources that lives for 1 frame) - if (!(flags & ImGuiDragDropFlags_AcceptNoDrawDefaultRect) && payload.Preview) - { - // FIXME-DRAG: Settle on a proper default visuals for drop target. - r.Expand(3.5f); - bool push_clip_rect = !window->ClipRect.Contains(r); - if (push_clip_rect) window->DrawList->PushClipRect(r.Min-ImVec2(1,1), r.Max+ImVec2(1,1)); - window->DrawList->AddRect(r.Min, r.Max, GetColorU32(ImGuiCol_DragDropTarget), 0.0f, ~0, 2.0f); - if (push_clip_rect) window->DrawList->PopClipRect(); - } - - g.DragDropAcceptFrameCount = g.FrameCount; - payload.Delivery = was_accepted_previously && !IsMouseDown(g.DragDropMouseButton); // For extern drag sources affecting os window focus, it's easier to just test !IsMouseDown() instead of IsMouseReleased() - if (!payload.Delivery && !(flags & ImGuiDragDropFlags_AcceptBeforeDelivery)) - return NULL; - - return &payload; -} - -const ImGuiPayload* ImGui::GetDragDropPayload() -{ - ImGuiContext& g = *GImGui; - return g.DragDropActive ? &g.DragDropPayload : NULL; -} - -// We don't really use/need this now, but added it for the sake of consistency and because we might need it later. -void ImGui::EndDragDropTarget() -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(g.DragDropActive); - IM_ASSERT(g.DragDropWithinTarget); - g.DragDropWithinTarget = false; -} - -//----------------------------------------------------------------------------- -// [SECTION] LOGGING/CAPTURING -//----------------------------------------------------------------------------- -// All text output from the interface can be captured into tty/file/clipboard. -// By default, tree nodes are automatically opened during logging. -//----------------------------------------------------------------------------- - -// Pass text data straight to log (without being displayed) -void ImGui::LogText(const char* fmt, ...) -{ - ImGuiContext& g = *GImGui; - if (!g.LogEnabled) - return; - - va_list args; - va_start(args, fmt); - if (g.LogFile) - { - g.LogBuffer.Buf.resize(0); - g.LogBuffer.appendfv(fmt, args); - ImFileWrite(g.LogBuffer.c_str(), sizeof(char), (ImU64)g.LogBuffer.size(), g.LogFile); - } - else - { - g.LogBuffer.appendfv(fmt, args); - } - va_end(args); -} - -// Internal version that takes a position to decide on newline placement and pad items according to their depth. -// We split text into individual lines to add current tree level padding -void ImGui::LogRenderedText(const ImVec2* ref_pos, const char* text, const char* text_end) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - - if (!text_end) - text_end = FindRenderedTextEnd(text, text_end); - - const bool log_new_line = ref_pos && (ref_pos->y > g.LogLinePosY + 1); - if (ref_pos) - g.LogLinePosY = ref_pos->y; - if (log_new_line) - g.LogLineFirstItem = true; - - const char* text_remaining = text; - if (g.LogDepthRef > window->DC.TreeDepth) // Re-adjust padding if we have popped out of our starting depth - g.LogDepthRef = window->DC.TreeDepth; - const int tree_depth = (window->DC.TreeDepth - g.LogDepthRef); - for (;;) - { - // Split the string. Each new line (after a '\n') is followed by spacing corresponding to the current depth of our log entry. - // We don't add a trailing \n to allow a subsequent item on the same line to be captured. - const char* line_start = text_remaining; - const char* line_end = ImStreolRange(line_start, text_end); - const bool is_first_line = (line_start == text); - const bool is_last_line = (line_end == text_end); - if (!is_last_line || (line_start != line_end)) - { - const int char_count = (int)(line_end - line_start); - if (log_new_line || !is_first_line) - LogText(IM_NEWLINE "%*s%.*s", tree_depth * 4, "", char_count, line_start); - else if (g.LogLineFirstItem) - LogText("%*s%.*s", tree_depth * 4, "", char_count, line_start); - else - LogText(" %.*s", char_count, line_start); - g.LogLineFirstItem = false; - } - else if (log_new_line) - { - // An empty "" string at a different Y position should output a carriage return. - LogText(IM_NEWLINE); - break; - } - - if (is_last_line) - break; - text_remaining = line_end + 1; - } -} - -// Start logging/capturing text output -void ImGui::LogBegin(ImGuiLogType type, int auto_open_depth) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - IM_ASSERT(g.LogEnabled == false); - IM_ASSERT(g.LogFile == NULL); - IM_ASSERT(g.LogBuffer.empty()); - g.LogEnabled = true; - g.LogType = type; - g.LogDepthRef = window->DC.TreeDepth; - g.LogDepthToExpand = ((auto_open_depth >= 0) ? auto_open_depth : g.LogDepthToExpandDefault); - g.LogLinePosY = FLT_MAX; - g.LogLineFirstItem = true; -} - -void ImGui::LogToTTY(int auto_open_depth) -{ - ImGuiContext& g = *GImGui; - if (g.LogEnabled) - return; - IM_UNUSED(auto_open_depth); -#ifndef IMGUI_DISABLE_TTY_FUNCTIONS - LogBegin(ImGuiLogType_TTY, auto_open_depth); - g.LogFile = stdout; -#endif -} - -// Start logging/capturing text output to given file -void ImGui::LogToFile(int auto_open_depth, const char* filename) -{ - ImGuiContext& g = *GImGui; - if (g.LogEnabled) - return; - - // FIXME: We could probably open the file in text mode "at", however note that clipboard/buffer logging will still - // be subject to outputting OS-incompatible carriage return if within strings the user doesn't use IM_NEWLINE. - // By opening the file in binary mode "ab" we have consistent output everywhere. - if (!filename) - filename = g.IO.LogFilename; - if (!filename || !filename[0]) - return; - ImFileHandle f = ImFileOpen(filename, "ab"); - if (!f) - { - IM_ASSERT(0); - return; - } - - LogBegin(ImGuiLogType_File, auto_open_depth); - g.LogFile = f; -} - -// Start logging/capturing text output to clipboard -void ImGui::LogToClipboard(int auto_open_depth) -{ - ImGuiContext& g = *GImGui; - if (g.LogEnabled) - return; - LogBegin(ImGuiLogType_Clipboard, auto_open_depth); -} - -void ImGui::LogToBuffer(int auto_open_depth) -{ - ImGuiContext& g = *GImGui; - if (g.LogEnabled) - return; - LogBegin(ImGuiLogType_Buffer, auto_open_depth); -} - -void ImGui::LogFinish() -{ - ImGuiContext& g = *GImGui; - if (!g.LogEnabled) - return; - - LogText(IM_NEWLINE); - switch (g.LogType) - { - case ImGuiLogType_TTY: -#ifndef IMGUI_DISABLE_TTY_FUNCTIONS - fflush(g.LogFile); -#endif - break; - case ImGuiLogType_File: - ImFileClose(g.LogFile); - break; - case ImGuiLogType_Buffer: - break; - case ImGuiLogType_Clipboard: - if (!g.LogBuffer.empty()) - SetClipboardText(g.LogBuffer.begin()); - break; - case ImGuiLogType_None: - IM_ASSERT(0); - break; - } - - g.LogEnabled = false; - g.LogType = ImGuiLogType_None; - g.LogFile = NULL; - g.LogBuffer.clear(); -} - -// Helper to display logging buttons -// FIXME-OBSOLETE: We should probably obsolete this and let the user have their own helper (this is one of the oldest function alive!) -void ImGui::LogButtons() -{ - ImGuiContext& g = *GImGui; - - PushID("LogButtons"); -#ifndef IMGUI_DISABLE_TTY_FUNCTIONS - const bool log_to_tty = Button("Log To TTY"); SameLine(); -#else - const bool log_to_tty = false; -#endif - const bool log_to_file = Button("Log To File"); SameLine(); - const bool log_to_clipboard = Button("Log To Clipboard"); SameLine(); - PushAllowKeyboardFocus(false); - SetNextItemWidth(80.0f); - SliderInt("Default Depth", &g.LogDepthToExpandDefault, 0, 9, NULL); - PopAllowKeyboardFocus(); - PopID(); - - // Start logging at the end of the function so that the buttons don't appear in the log - if (log_to_tty) - LogToTTY(); - if (log_to_file) - LogToFile(); - if (log_to_clipboard) - LogToClipboard(); -} - -//----------------------------------------------------------------------------- -// [SECTION] SETTINGS -//----------------------------------------------------------------------------- - -// Called by NewFrame() -void ImGui::UpdateSettings() -{ - // Load settings on first frame (if not explicitly loaded manually before) - ImGuiContext& g = *GImGui; - if (!g.SettingsLoaded) - { - IM_ASSERT(g.SettingsWindows.empty()); - if (g.IO.IniFilename) - LoadIniSettingsFromDisk(g.IO.IniFilename); - g.SettingsLoaded = true; - } - - // Save settings (with a delay after the last modification, so we don't spam disk too much) - if (g.SettingsDirtyTimer > 0.0f) - { - g.SettingsDirtyTimer -= g.IO.DeltaTime; - if (g.SettingsDirtyTimer <= 0.0f) - { - if (g.IO.IniFilename != NULL) - SaveIniSettingsToDisk(g.IO.IniFilename); - else - g.IO.WantSaveIniSettings = true; // Let user know they can call SaveIniSettingsToMemory(). user will need to clear io.WantSaveIniSettings themselves. - g.SettingsDirtyTimer = 0.0f; - } - } -} - -void ImGui::MarkIniSettingsDirty() -{ - ImGuiContext& g = *GImGui; - if (g.SettingsDirtyTimer <= 0.0f) - g.SettingsDirtyTimer = g.IO.IniSavingRate; -} - -void ImGui::MarkIniSettingsDirty(ImGuiWindow* window) -{ - ImGuiContext& g = *GImGui; - if (!(window->Flags & ImGuiWindowFlags_NoSavedSettings)) - if (g.SettingsDirtyTimer <= 0.0f) - g.SettingsDirtyTimer = g.IO.IniSavingRate; -} - -ImGuiWindowSettings* ImGui::CreateNewWindowSettings(const char* name) -{ - ImGuiContext& g = *GImGui; - -#if !IMGUI_DEBUG_INI_SETTINGS - // Skip to the "###" marker if any. We don't skip past to match the behavior of GetID() - // Preserve the full string when IMGUI_DEBUG_INI_SETTINGS is set to make .ini inspection easier. - if (const char* p = strstr(name, "###")) - name = p; -#endif - const size_t name_len = strlen(name); - - // Allocate chunk - const size_t chunk_size = sizeof(ImGuiWindowSettings) + name_len + 1; - ImGuiWindowSettings* settings = g.SettingsWindows.alloc_chunk(chunk_size); - IM_PLACEMENT_NEW(settings) ImGuiWindowSettings(); - settings->ID = ImHashStr(name, name_len); - memcpy(settings->GetName(), name, name_len + 1); // Store with zero terminator - - return settings; -} - -ImGuiWindowSettings* ImGui::FindWindowSettings(ImGuiID id) -{ - ImGuiContext& g = *GImGui; - for (ImGuiWindowSettings* settings = g.SettingsWindows.begin(); settings != NULL; settings = g.SettingsWindows.next_chunk(settings)) - if (settings->ID == id) - return settings; - return NULL; -} - -ImGuiWindowSettings* ImGui::FindOrCreateWindowSettings(const char* name) -{ - if (ImGuiWindowSettings* settings = FindWindowSettings(ImHashStr(name))) - return settings; - return CreateNewWindowSettings(name); -} - -void ImGui::LoadIniSettingsFromDisk(const char* ini_filename) -{ - size_t file_data_size = 0; - char* file_data = (char*)ImFileLoadToMemory(ini_filename, "rb", &file_data_size); - if (!file_data) - return; - LoadIniSettingsFromMemory(file_data, (size_t)file_data_size); - IM_FREE(file_data); -} - -ImGuiSettingsHandler* ImGui::FindSettingsHandler(const char* type_name) -{ - ImGuiContext& g = *GImGui; - const ImGuiID type_hash = ImHashStr(type_name); - for (int handler_n = 0; handler_n < g.SettingsHandlers.Size; handler_n++) - if (g.SettingsHandlers[handler_n].TypeHash == type_hash) - return &g.SettingsHandlers[handler_n]; - return NULL; -} - -// Zero-tolerance, no error reporting, cheap .ini parsing -void ImGui::LoadIniSettingsFromMemory(const char* ini_data, size_t ini_size) -{ - ImGuiContext& g = *GImGui; - IM_ASSERT(g.Initialized); - IM_ASSERT(g.SettingsLoaded == false && g.FrameCount == 0); - - // For user convenience, we allow passing a non zero-terminated string (hence the ini_size parameter). - // For our convenience and to make the code simpler, we'll also write zero-terminators within the buffer. So let's create a writable copy.. - if (ini_size == 0) - ini_size = strlen(ini_data); - char* buf = (char*)IM_ALLOC(ini_size + 1); - char* buf_end = buf + ini_size; - memcpy(buf, ini_data, ini_size); - buf[ini_size] = 0; - - void* entry_data = NULL; - ImGuiSettingsHandler* entry_handler = NULL; - - char* line_end = NULL; - for (char* line = buf; line < buf_end; line = line_end + 1) - { - // Skip new lines markers, then find end of the line - while (*line == '\n' || *line == '\r') - line++; - line_end = line; - while (line_end < buf_end && *line_end != '\n' && *line_end != '\r') - line_end++; - line_end[0] = 0; - if (line[0] == ';') - continue; - if (line[0] == '[' && line_end > line && line_end[-1] == ']') - { - // Parse "[Type][Name]". Note that 'Name' can itself contains [] characters, which is acceptable with the current format and parsing code. - line_end[-1] = 0; - const char* name_end = line_end - 1; - const char* type_start = line + 1; - char* type_end = (char*)(void*)ImStrchrRange(type_start, name_end, ']'); - const char* name_start = type_end ? ImStrchrRange(type_end + 1, name_end, '[') : NULL; - if (!type_end || !name_start) - continue; - *type_end = 0; // Overwrite first ']' - name_start++; // Skip second '[' - entry_handler = FindSettingsHandler(type_start); - entry_data = entry_handler ? entry_handler->ReadOpenFn(&g, entry_handler, name_start) : NULL; - } - else if (entry_handler != NULL && entry_data != NULL) - { - // Let type handler parse the line - entry_handler->ReadLineFn(&g, entry_handler, entry_data, line); - } - } - IM_FREE(buf); - g.SettingsLoaded = true; -} - -void ImGui::SaveIniSettingsToDisk(const char* ini_filename) -{ - ImGuiContext& g = *GImGui; - g.SettingsDirtyTimer = 0.0f; - if (!ini_filename) - return; - - size_t ini_data_size = 0; - const char* ini_data = SaveIniSettingsToMemory(&ini_data_size); - ImFileHandle f = ImFileOpen(ini_filename, "wt"); - if (!f) - return; - ImFileWrite(ini_data, sizeof(char), ini_data_size, f); - ImFileClose(f); -} - -// Call registered handlers (e.g. SettingsHandlerWindow_WriteAll() + custom handlers) to write their stuff into a text buffer -const char* ImGui::SaveIniSettingsToMemory(size_t* out_size) -{ - ImGuiContext& g = *GImGui; - g.SettingsDirtyTimer = 0.0f; - g.SettingsIniData.Buf.resize(0); - g.SettingsIniData.Buf.push_back(0); - for (int handler_n = 0; handler_n < g.SettingsHandlers.Size; handler_n++) - { - ImGuiSettingsHandler* handler = &g.SettingsHandlers[handler_n]; - handler->WriteAllFn(&g, handler, &g.SettingsIniData); - } - if (out_size) - *out_size = (size_t)g.SettingsIniData.size(); - return g.SettingsIniData.c_str(); -} - -static void* WindowSettingsHandler_ReadOpen(ImGuiContext*, ImGuiSettingsHandler*, const char* name) -{ - ImGuiWindowSettings* settings = ImGui::FindWindowSettings(ImHashStr(name)); - if (!settings) - settings = ImGui::CreateNewWindowSettings(name); - return (void*)settings; -} - -static void WindowSettingsHandler_ReadLine(ImGuiContext*, ImGuiSettingsHandler*, void* entry, const char* line) -{ - ImGuiWindowSettings* settings = (ImGuiWindowSettings*)entry; - int x, y; - int i; - if (sscanf(line, "Pos=%i,%i", &x, &y) == 2) settings->Pos = ImVec2ih((short)x, (short)y); - else if (sscanf(line, "Size=%i,%i", &x, &y) == 2) settings->Size = ImVec2ih((short)x, (short)y); - else if (sscanf(line, "Collapsed=%d", &i) == 1) settings->Collapsed = (i != 0); -} - -static void WindowSettingsHandler_WriteAll(ImGuiContext* ctx, ImGuiSettingsHandler* handler, ImGuiTextBuffer* buf) -{ - // Gather data from windows that were active during this session - // (if a window wasn't opened in this session we preserve its settings) - ImGuiContext& g = *ctx; - for (int i = 0; i != g.Windows.Size; i++) - { - ImGuiWindow* window = g.Windows[i]; - if (window->Flags & ImGuiWindowFlags_NoSavedSettings) - continue; - - ImGuiWindowSettings* settings = (window->SettingsOffset != -1) ? g.SettingsWindows.ptr_from_offset(window->SettingsOffset) : ImGui::FindWindowSettings(window->ID); - if (!settings) - { - settings = ImGui::CreateNewWindowSettings(window->Name); - window->SettingsOffset = g.SettingsWindows.offset_from_ptr(settings); - } - IM_ASSERT(settings->ID == window->ID); - settings->Pos = ImVec2ih((short)window->Pos.x, (short)window->Pos.y); - settings->Size = ImVec2ih((short)window->SizeFull.x, (short)window->SizeFull.y); - settings->Collapsed = window->Collapsed; - } - - // Write to text buffer - buf->reserve(buf->size() + g.SettingsWindows.size() * 6); // ballpark reserve - for (ImGuiWindowSettings* settings = g.SettingsWindows.begin(); settings != NULL; settings = g.SettingsWindows.next_chunk(settings)) - { - const char* settings_name = settings->GetName(); - buf->appendf("[%s][%s]\n", handler->TypeName, settings_name); - buf->appendf("Pos=%d,%d\n", settings->Pos.x, settings->Pos.y); - buf->appendf("Size=%d,%d\n", settings->Size.x, settings->Size.y); - buf->appendf("Collapsed=%d\n", settings->Collapsed); - buf->append("\n"); - } -} - - -//----------------------------------------------------------------------------- -// [SECTION] VIEWPORTS, PLATFORM WINDOWS -//----------------------------------------------------------------------------- - -// (this section is filled in the 'docking' branch) - - -//----------------------------------------------------------------------------- -// [SECTION] DOCKING -//----------------------------------------------------------------------------- - -// (this section is filled in the 'docking' branch) - - -//----------------------------------------------------------------------------- -// [SECTION] PLATFORM DEPENDENT HELPERS -//----------------------------------------------------------------------------- - -#if defined(_WIN32) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS) - -#ifdef _MSC_VER -#pragma comment(lib, "user32") -#pragma comment(lib, "kernel32") -#endif - -// Win32 clipboard implementation -static const char* GetClipboardTextFn_DefaultImpl(void*) -{ - static ImVector buf_local; - buf_local.clear(); - if (!::OpenClipboard(NULL)) - return NULL; - HANDLE wbuf_handle = ::GetClipboardData(CF_UNICODETEXT); - if (wbuf_handle == NULL) - { - ::CloseClipboard(); - return NULL; - } - if (const WCHAR* wbuf_global = (const WCHAR*)::GlobalLock(wbuf_handle)) - { - int buf_len = ::WideCharToMultiByte(CP_UTF8, 0, wbuf_global, -1, NULL, 0, NULL, NULL); - buf_local.resize(buf_len); - ::WideCharToMultiByte(CP_UTF8, 0, wbuf_global, -1, buf_local.Data, buf_len, NULL, NULL); - } - ::GlobalUnlock(wbuf_handle); - ::CloseClipboard(); - return buf_local.Data; -} - -static void SetClipboardTextFn_DefaultImpl(void*, const char* text) -{ - if (!::OpenClipboard(NULL)) - return; - const int wbuf_length = ::MultiByteToWideChar(CP_UTF8, 0, text, -1, NULL, 0); - HGLOBAL wbuf_handle = ::GlobalAlloc(GMEM_MOVEABLE, (SIZE_T)wbuf_length * sizeof(WCHAR)); - if (wbuf_handle == NULL) - { - ::CloseClipboard(); - return; - } - WCHAR* wbuf_global = (WCHAR*)::GlobalLock(wbuf_handle); - ::MultiByteToWideChar(CP_UTF8, 0, text, -1, wbuf_global, wbuf_length); - ::GlobalUnlock(wbuf_handle); - ::EmptyClipboard(); - if (::SetClipboardData(CF_UNICODETEXT, wbuf_handle) == NULL) - ::GlobalFree(wbuf_handle); - ::CloseClipboard(); -} - -#elif defined(__APPLE__) && TARGET_OS_OSX && defined(IMGUI_ENABLE_OSX_DEFAULT_CLIPBOARD_FUNCTIONS) - -#include // Use old API to avoid need for separate .mm file -static PasteboardRef main_clipboard = 0; - -// OSX clipboard implementation -// If you enable this you will need to add '-framework ApplicationServices' to your linker command-line! -static void SetClipboardTextFn_DefaultImpl(void*, const char* text) -{ - if (!main_clipboard) - PasteboardCreate(kPasteboardClipboard, &main_clipboard); - PasteboardClear(main_clipboard); - CFDataRef cf_data = CFDataCreate(kCFAllocatorDefault, (const UInt8*)text, strlen(text)); - if (cf_data) - { - PasteboardPutItemFlavor(main_clipboard, (PasteboardItemID)1, CFSTR("public.utf8-plain-text"), cf_data, 0); - CFRelease(cf_data); - } -} - -static const char* GetClipboardTextFn_DefaultImpl(void*) -{ - if (!main_clipboard) - PasteboardCreate(kPasteboardClipboard, &main_clipboard); - PasteboardSynchronize(main_clipboard); - - ItemCount item_count = 0; - PasteboardGetItemCount(main_clipboard, &item_count); - for (ItemCount i = 0; i < item_count; i++) - { - PasteboardItemID item_id = 0; - PasteboardGetItemIdentifier(main_clipboard, i + 1, &item_id); - CFArrayRef flavor_type_array = 0; - PasteboardCopyItemFlavors(main_clipboard, item_id, &flavor_type_array); - for (CFIndex j = 0, nj = CFArrayGetCount(flavor_type_array); j < nj; j++) - { - CFDataRef cf_data; - if (PasteboardCopyItemFlavorData(main_clipboard, item_id, CFSTR("public.utf8-plain-text"), &cf_data) == noErr) - { - static ImVector clipboard_text; - int length = (int)CFDataGetLength(cf_data); - clipboard_text.resize(length + 1); - CFDataGetBytes(cf_data, CFRangeMake(0, length), (UInt8*)clipboard_text.Data); - clipboard_text[length] = 0; - CFRelease(cf_data); - return clipboard_text.Data; - } - } - } - return NULL; -} - -#else - -// Local Dear ImGui-only clipboard implementation, if user hasn't defined better clipboard handlers. -static const char* GetClipboardTextFn_DefaultImpl(void*) -{ - ImGuiContext& g = *GImGui; - return g.PrivateClipboard.empty() ? NULL : g.PrivateClipboard.begin(); -} - -static void SetClipboardTextFn_DefaultImpl(void*, const char* text) -{ - ImGuiContext& g = *GImGui; - g.PrivateClipboard.clear(); - const char* text_end = text + strlen(text); - g.PrivateClipboard.resize((int)(text_end - text) + 1); - memcpy(&g.PrivateClipboard[0], text, (size_t)(text_end - text)); - g.PrivateClipboard[(int)(text_end - text)] = 0; -} - -#endif - -// Win32 API IME support (for Asian languages, etc.) -#if defined(_WIN32) && !defined(__GNUC__) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS) - -#include -#ifdef _MSC_VER -#pragma comment(lib, "imm32") -#endif - -static void ImeSetInputScreenPosFn_DefaultImpl(int x, int y) -{ - // Notify OS Input Method Editor of text input position - ImGuiIO& io = ImGui::GetIO(); - if (HWND hwnd = (HWND)io.ImeWindowHandle) - if (HIMC himc = ::ImmGetContext(hwnd)) - { - COMPOSITIONFORM cf; - cf.ptCurrentPos.x = x; - cf.ptCurrentPos.y = y; - cf.dwStyle = CFS_FORCE_POSITION; - ::ImmSetCompositionWindow(himc, &cf); - ::ImmReleaseContext(hwnd, himc); - } -} - -#else - -static void ImeSetInputScreenPosFn_DefaultImpl(int, int) {} - -#endif - -//----------------------------------------------------------------------------- -// [SECTION] METRICS/DEBUG WINDOW -//----------------------------------------------------------------------------- - -#ifndef IMGUI_DISABLE_METRICS_WINDOW -// Avoid naming collision with imgui_demo.cpp's HelpMarker() for unity builds. -static void MetricsHelpMarker(const char* desc) -{ - ImGui::TextDisabled("(?)"); - if (ImGui::IsItemHovered()) - { - ImGui::BeginTooltip(); - ImGui::PushTextWrapPos(ImGui::GetFontSize() * 35.0f); - ImGui::TextUnformatted(desc); - ImGui::PopTextWrapPos(); - ImGui::EndTooltip(); - } -} - -void ImGui::ShowMetricsWindow(bool* p_open) -{ - if (!ImGui::Begin("Dear ImGui Metrics", p_open)) - { - ImGui::End(); - return; - } - - // Debugging enums - enum { WRT_OuterRect, WRT_OuterRectClipped, WRT_InnerRect, WRT_InnerClipRect, WRT_WorkRect, WRT_Content, WRT_ContentRegionRect, WRT_Count }; // Windows Rect Type - const char* wrt_rects_names[WRT_Count] = { "OuterRect", "OuterRectClipped", "InnerRect", "InnerClipRect", "WorkRect", "Content", "ContentRegionRect" }; - enum { TRT_OuterRect, TRT_WorkRect, TRT_HostClipRect, TRT_InnerClipRect, TRT_BackgroundClipRect, TRT_ColumnsRect, TRT_ColumnsClipRect, TRT_ColumnsContentHeadersUsed, TRT_ColumnsContentHeadersDesired, TRT_ColumnsContentRowsFrozen, TRT_ColumnsContentRowsUnfrozen, TRT_Count }; // Tables Rect Type - const char* trt_rects_names[TRT_Count] = { "OuterRect", "WorkRect", "HostClipRect", "InnerClipRect", "BackgroundClipRect", "ColumnsRect", "ColumnsClipRect", "ColumnsContentHeadersUsed", "ColumnsContentHeadersDesired", "ColumnsContentRowsFrozen", "ColumnsContentRowsUnfrozen" }; - - // State - static bool show_windows_rects = false; - static int show_windows_rect_type = WRT_WorkRect; - static bool show_windows_begin_order = false; - static bool show_tables_rects = false; - static int show_tables_rect_type = TRT_WorkRect; - static bool show_drawcmd_details = true; - - // Basic info - ImGuiContext& g = *GImGui; - ImGuiIO& io = ImGui::GetIO(); - ImGui::Text("Dear ImGui %s", ImGui::GetVersion()); - ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / io.Framerate, io.Framerate); - ImGui::Text("%d vertices, %d indices (%d triangles)", io.MetricsRenderVertices, io.MetricsRenderIndices, io.MetricsRenderIndices / 3); - ImGui::Text("%d active windows (%d visible)", io.MetricsActiveWindows, io.MetricsRenderWindows); - ImGui::Text("%d active allocations", io.MetricsActiveAllocations); - ImGui::Separator(); - - // Helper functions to display common structures: - // - NodeDrawList() - // - NodeColumns() - // - NodeWindow() - // - NodeWindows() - // - NodeTabBar() - // - NodeStorage() - struct Funcs - { - static ImRect GetWindowRect(ImGuiWindow* window, int rect_type) - { - if (rect_type == WRT_OuterRect) { return window->Rect(); } - else if (rect_type == WRT_OuterRectClipped) { return window->OuterRectClipped; } - else if (rect_type == WRT_InnerRect) { return window->InnerRect; } - else if (rect_type == WRT_InnerClipRect) { return window->InnerClipRect; } - else if (rect_type == WRT_WorkRect) { return window->WorkRect; } - else if (rect_type == WRT_Content) { ImVec2 min = window->InnerRect.Min - window->Scroll + window->WindowPadding; return ImRect(min, min + window->ContentSize); } - else if (rect_type == WRT_ContentRegionRect) { return window->ContentRegionRect; } - IM_ASSERT(0); - return ImRect(); - } - - static void NodeDrawList(ImGuiWindow* window, ImDrawList* draw_list, const char* label) - { - bool node_open = ImGui::TreeNode(draw_list, "%s: '%s' %d vtx, %d indices, %d cmds", label, draw_list->_OwnerName ? draw_list->_OwnerName : "", draw_list->VtxBuffer.Size, draw_list->IdxBuffer.Size, draw_list->CmdBuffer.Size); - if (draw_list == ImGui::GetWindowDrawList()) - { - ImGui::SameLine(); - ImGui::TextColored(ImVec4(1.0f,0.4f,0.4f,1.0f), "CURRENTLY APPENDING"); // Can't display stats for active draw list! (we don't have the data double-buffered) - if (node_open) ImGui::TreePop(); - return; - } - - ImDrawList* fg_draw_list = GetForegroundDrawList(window); // Render additional visuals into the top-most draw list - if (window && IsItemHovered()) - fg_draw_list->AddRect(window->Pos, window->Pos + window->Size, IM_COL32(255, 255, 0, 255)); - if (!node_open) - return; - - if (window && !window->WasActive) - ImGui::TextDisabled("Warning: owning Window is inactive. This DrawList is not being rendered!"); - - unsigned int elem_offset = 0; - for (const ImDrawCmd* pcmd = draw_list->CmdBuffer.begin(); pcmd < draw_list->CmdBuffer.end(); elem_offset += pcmd->ElemCount, pcmd++) - { - if (pcmd->UserCallback == NULL && pcmd->ElemCount == 0) - continue; - if (pcmd->UserCallback) - { - ImGui::BulletText("Callback %p, user_data %p", pcmd->UserCallback, pcmd->UserCallbackData); - continue; - } - - ImDrawIdx* idx_buffer = (draw_list->IdxBuffer.Size > 0) ? draw_list->IdxBuffer.Data : NULL; - char buf[300]; - ImFormatString(buf, IM_ARRAYSIZE(buf), "DrawCmd: %4d triangles, Tex 0x%p, ClipRect (%4.0f,%4.0f)-(%4.0f,%4.0f)", - pcmd->ElemCount/3, (void*)(intptr_t)pcmd->TextureId, - pcmd->ClipRect.x, pcmd->ClipRect.y, pcmd->ClipRect.z, pcmd->ClipRect.w); - bool pcmd_node_open = ImGui::TreeNode((void*)(pcmd - draw_list->CmdBuffer.begin()), "%s", buf); - if (show_drawcmd_details && fg_draw_list && ImGui::IsItemHovered()) - { - ImRect clip_rect = pcmd->ClipRect; - ImRect vtxs_rect(FLT_MAX, FLT_MAX, -FLT_MAX, -FLT_MAX); - for (unsigned int i = elem_offset; i < elem_offset + (int)pcmd->ElemCount; i++) - vtxs_rect.Add(draw_list->VtxBuffer[idx_buffer ? idx_buffer[i] : i].pos); - fg_draw_list->AddRect(ImFloor(clip_rect.Min), ImFloor(clip_rect.Max), IM_COL32(255,0,255,255)); - fg_draw_list->AddRect(ImFloor(vtxs_rect.Min), ImFloor(vtxs_rect.Max), IM_COL32(255,255,0,255)); - } - if (!pcmd_node_open) - continue; - - // Calculate approximate coverage area (touched pixel count) - // This will be in pixels squared as long there's no post-scaling happening to the renderer output. - float total_area = 0.0f; - for (unsigned int base_idx = elem_offset; base_idx < (elem_offset + pcmd->ElemCount); base_idx += 3) - { - ImVec2 triangle[3]; - for (int n = 0; n < 3; n++) - triangle[n] = draw_list->VtxBuffer[idx_buffer ? idx_buffer[base_idx + n] : (base_idx + n)].pos; - total_area += ImTriangleArea(triangle[0], triangle[1], triangle[2]); - } - - // Display vertex information summary. Hover to get all triangles drawn in wire-frame - ImFormatString(buf, IM_ARRAYSIZE(buf), "Mesh: ElemCount: %d, VtxOffset: +%d, IdxOffset: +%d, Area: ~%0.f px", pcmd->ElemCount, pcmd->VtxOffset, pcmd->IdxOffset, total_area); - ImGui::Selectable(buf); - if (fg_draw_list && ImGui::IsItemHovered() && show_drawcmd_details) - { - // Draw wire-frame version of everything - ImDrawListFlags backup_flags = fg_draw_list->Flags; - fg_draw_list->Flags &= ~ImDrawListFlags_AntiAliasedLines; // Disable AA on triangle outlines is more readable for very large and thin triangles. - ImRect clip_rect = pcmd->ClipRect; - fg_draw_list->AddRect(ImFloor(clip_rect.Min), ImFloor(clip_rect.Max), IM_COL32(255, 0, 255, 255)); - for (unsigned int base_idx = elem_offset; base_idx < (elem_offset + pcmd->ElemCount); base_idx += 3) - { - ImVec2 triangle[3]; - for (int n = 0; n < 3; n++) - triangle[n] = draw_list->VtxBuffer[idx_buffer ? idx_buffer[base_idx + n] : (base_idx + n)].pos; - fg_draw_list->AddPolyline(triangle, 3, IM_COL32(255, 255, 0, 255), true, 1.0f); - } - fg_draw_list->Flags = backup_flags; - } - - // Display individual triangles/vertices. Hover on to get the corresponding triangle highlighted. - ImGuiListClipper clipper(pcmd->ElemCount/3); // Manually coarse clip our print out of individual vertices to save CPU, only items that may be visible. - while (clipper.Step()) - for (int prim = clipper.DisplayStart, idx_i = elem_offset + clipper.DisplayStart*3; prim < clipper.DisplayEnd; prim++) - { - char *buf_p = buf, *buf_end = buf + IM_ARRAYSIZE(buf); - ImVec2 triangle[3]; - for (int n = 0; n < 3; n++, idx_i++) - { - ImDrawVert& v = draw_list->VtxBuffer[idx_buffer ? idx_buffer[idx_i] : idx_i]; - triangle[n] = v.pos; - buf_p += ImFormatString(buf_p, buf_end - buf_p, "%s %04d: pos (%8.2f,%8.2f), uv (%.6f,%.6f), col %08X\n", - (n == 0) ? "Vert:" : " ", idx_i, v.pos.x, v.pos.y, v.uv.x, v.uv.y, v.col); - } - - ImGui::Selectable(buf, false); - if (fg_draw_list && ImGui::IsItemHovered()) - { - ImDrawListFlags backup_flags = fg_draw_list->Flags; - fg_draw_list->Flags &= ~ImDrawListFlags_AntiAliasedLines; // Disable AA on triangle outlines is more readable for very large and thin triangles. - fg_draw_list->AddPolyline(triangle, 3, IM_COL32(255,255,0,255), true, 1.0f); - fg_draw_list->Flags = backup_flags; - } - } - ImGui::TreePop(); - } - ImGui::TreePop(); - } - - static void NodeColumns(const ImGuiColumns* columns) - { - if (!ImGui::TreeNode((void*)(uintptr_t)columns->ID, "Columns Id: 0x%08X, Count: %d, Flags: 0x%04X", columns->ID, columns->Count, columns->Flags)) - return; - ImGui::BulletText("Width: %.1f (MinX: %.1f, MaxX: %.1f)", columns->OffMaxX - columns->OffMinX, columns->OffMinX, columns->OffMaxX); - for (int column_n = 0; column_n < columns->Columns.Size; column_n++) - ImGui::BulletText("Column %02d: OffsetNorm %.3f (= %.1f px)", column_n, columns->Columns[column_n].OffsetNorm, GetColumnOffsetFromNorm(columns, columns->Columns[column_n].OffsetNorm)); - ImGui::TreePop(); - } - - static void NodeWindows(ImVector& windows, const char* label) - { - if (!ImGui::TreeNode(label, "%s (%d)", label, windows.Size)) - return; - for (int i = 0; i < windows.Size; i++) - { - ImGui::PushID(windows[i]); - Funcs::NodeWindow(windows[i], "Window"); - ImGui::PopID(); - } - ImGui::TreePop(); - } - - static void NodeWindow(ImGuiWindow* window, const char* label) - { - if (window == NULL) - { - ImGui::BulletText("%s: NULL", label); - return; - } - bool open = ImGui::TreeNode(label, "%s '%s', %d @ 0x%p", label, window->Name, (window->Active || window->WasActive), window); - if (ImGui::IsItemHovered() && window->WasActive) - ImGui::GetForegroundDrawList()->AddRect(window->Pos, window->Pos + window->Size, IM_COL32(255, 255, 0, 255)); - if (!open) - return; - ImGuiWindowFlags flags = window->Flags; - NodeDrawList(window, window->DrawList, "DrawList"); - ImGui::BulletText("Pos: (%.1f,%.1f), Size: (%.1f,%.1f), ContentSize (%.1f,%.1f)", window->Pos.x, window->Pos.y, window->Size.x, window->Size.y, window->ContentSize.x, window->ContentSize.y); - ImGui::BulletText("Flags: 0x%08X (%s%s%s%s%s%s%s%s%s..)", flags, - (flags & ImGuiWindowFlags_ChildWindow) ? "Child " : "", (flags & ImGuiWindowFlags_Tooltip) ? "Tooltip " : "", (flags & ImGuiWindowFlags_Popup) ? "Popup " : "", - (flags & ImGuiWindowFlags_Modal) ? "Modal " : "", (flags & ImGuiWindowFlags_ChildMenu) ? "ChildMenu " : "", (flags & ImGuiWindowFlags_NoSavedSettings) ? "NoSavedSettings " : "", - (flags & ImGuiWindowFlags_NoMouseInputs)? "NoMouseInputs":"", (flags & ImGuiWindowFlags_NoNavInputs) ? "NoNavInputs" : "", (flags & ImGuiWindowFlags_AlwaysAutoResize) ? "AlwaysAutoResize" : ""); - ImGui::BulletText("Scroll: (%.2f/%.2f,%.2f/%.2f) Scrollbar:%s%s", window->Scroll.x, window->ScrollMax.x, window->Scroll.y, window->ScrollMax.y, window->ScrollbarX ? "X" : "", window->ScrollbarY ? "Y" : ""); - ImGui::BulletText("Active: %d/%d, WriteAccessed: %d, BeginOrderWithinContext: %d", window->Active, window->WasActive, window->WriteAccessed, (window->Active || window->WasActive) ? window->BeginOrderWithinContext : -1); - ImGui::BulletText("Appearing: %d, Hidden: %d (CanSkip %d Cannot %d), SkipItems: %d", window->Appearing, window->Hidden, window->HiddenFramesCanSkipItems, window->HiddenFramesCannotSkipItems, window->SkipItems); - ImGui::BulletText("NavLastIds: 0x%08X,0x%08X, NavLayerActiveMask: %X", window->NavLastIds[0], window->NavLastIds[1], window->DC.NavLayerActiveMask); - ImGui::BulletText("NavLastChildNavWindow: %s", window->NavLastChildNavWindow ? window->NavLastChildNavWindow->Name : "NULL"); - if (!window->NavRectRel[0].IsInverted()) - ImGui::BulletText("NavRectRel[0]: (%.1f,%.1f)(%.1f,%.1f)", window->NavRectRel[0].Min.x, window->NavRectRel[0].Min.y, window->NavRectRel[0].Max.x, window->NavRectRel[0].Max.y); - else - ImGui::BulletText("NavRectRel[0]: "); - if (window->RootWindow != window) NodeWindow(window->RootWindow, "RootWindow"); - if (window->ParentWindow != NULL) NodeWindow(window->ParentWindow, "ParentWindow"); - if (window->DC.ChildWindows.Size > 0) NodeWindows(window->DC.ChildWindows, "ChildWindows"); - if (window->ColumnsStorage.Size > 0 && ImGui::TreeNode("Columns", "Columns sets (%d)", window->ColumnsStorage.Size)) - { - for (int n = 0; n < window->ColumnsStorage.Size; n++) - NodeColumns(&window->ColumnsStorage[n]); - ImGui::TreePop(); - } - NodeStorage(&window->StateStorage, "Storage"); - ImGui::TreePop(); - } - - static void NodeTabBar(ImGuiTabBar* tab_bar) - { - // Standalone tab bars (not associated to docking/windows functionality) currently hold no discernible strings. - char buf[256]; - char* p = buf; - const char* buf_end = buf + IM_ARRAYSIZE(buf); - p += ImFormatString(p, buf_end - p, "TabBar (%d tabs)%s", tab_bar->Tabs.Size, (tab_bar->PrevFrameVisible < ImGui::GetFrameCount() - 2) ? " *Inactive*" : ""); - if (ImGui::TreeNode(tab_bar, "%s", buf)) - { - for (int tab_n = 0; tab_n < tab_bar->Tabs.Size; tab_n++) - { - const ImGuiTabItem* tab = &tab_bar->Tabs[tab_n]; - ImGui::PushID(tab); - if (ImGui::SmallButton("<")) { TabBarQueueChangeTabOrder(tab_bar, tab, -1); } ImGui::SameLine(0, 2); - if (ImGui::SmallButton(">")) { TabBarQueueChangeTabOrder(tab_bar, tab, +1); } ImGui::SameLine(); - ImGui::Text("%02d%c Tab 0x%08X '%s'", tab_n, (tab->ID == tab_bar->SelectedTabId) ? '*' : ' ', tab->ID, (tab->NameOffset != -1) ? tab_bar->GetTabName(tab) : ""); - ImGui::PopID(); - } - ImGui::TreePop(); - } - } - - static void NodeStorage(ImGuiStorage* storage, const char* label) - { - if (!ImGui::TreeNode(label, "%s: %d entries, %d bytes", label, storage->Data.Size, storage->Data.size_in_bytes())) - return; - for (int n = 0; n < storage->Data.Size; n++) - { - const ImGuiStorage::ImGuiStoragePair& p = storage->Data[n]; - ImGui::BulletText("Key 0x%08X Value { i: %d }", p.key, p.val_i); // Important: we currently don't store a type, real value may not be integer. - } - ImGui::TreePop(); - } - }; - - Funcs::NodeWindows(g.Windows, "Windows"); - //Funcs::NodeWindows(g.WindowsFocusOrder, "WindowsFocusOrder"); - if (ImGui::TreeNode("DrawLists", "Active DrawLists (%d)", g.DrawDataBuilder.Layers[0].Size)) - { - for (int i = 0; i < g.DrawDataBuilder.Layers[0].Size; i++) - Funcs::NodeDrawList(NULL, g.DrawDataBuilder.Layers[0][i], "DrawList"); - ImGui::TreePop(); - } - - // Details for Popups - if (ImGui::TreeNode("Popups", "Popups (%d)", g.OpenPopupStack.Size)) - { - for (int i = 0; i < g.OpenPopupStack.Size; i++) - { - ImGuiWindow* window = g.OpenPopupStack[i].Window; - ImGui::BulletText("PopupID: %08x, Window: '%s'%s%s", g.OpenPopupStack[i].PopupId, window ? window->Name : "NULL", window && (window->Flags & ImGuiWindowFlags_ChildWindow) ? " ChildWindow" : "", window && (window->Flags & ImGuiWindowFlags_ChildMenu) ? " ChildMenu" : ""); - } - ImGui::TreePop(); - } - - // Details for TabBars - if (ImGui::TreeNode("TabBars", "Tab Bars (%d)", g.TabBars.GetSize())) - { - for (int n = 0; n < g.TabBars.GetSize(); n++) - Funcs::NodeTabBar(g.TabBars.GetByIndex(n)); - ImGui::TreePop(); - } - - // Details for Tables - IM_UNUSED(trt_rects_names); - IM_UNUSED(show_tables_rects); - IM_UNUSED(show_tables_rect_type); -#ifdef IMGUI_HAS_TABLE - if (ImGui::TreeNode("Tables", "Tables (%d)", g.Tables.GetSize())) - { - for (int n = 0; n < g.Tables.GetSize(); n++) - Funcs::NodeTable(g.Tables.GetByIndex(n)); - ImGui::TreePop(); - } -#endif // #define IMGUI_HAS_TABLE - - // Details for Docking -#ifdef IMGUI_HAS_DOCK - if (ImGui::TreeNode("Docking")) - { - ImGui::TreePop(); - } -#endif // #define IMGUI_HAS_DOCK - - // Misc Details - if (ImGui::TreeNode("Internal state")) - { - const char* input_source_names[] = { "None", "Mouse", "Nav", "NavKeyboard", "NavGamepad" }; IM_ASSERT(IM_ARRAYSIZE(input_source_names) == ImGuiInputSource_COUNT); - ImGui::Text("HoveredWindow: '%s'", g.HoveredWindow ? g.HoveredWindow->Name : "NULL"); - ImGui::Text("HoveredRootWindow: '%s'", g.HoveredRootWindow ? g.HoveredRootWindow->Name : "NULL"); - ImGui::Text("HoveredId: 0x%08X/0x%08X (%.2f sec), AllowOverlap: %d", g.HoveredId, g.HoveredIdPreviousFrame, g.HoveredIdTimer, g.HoveredIdAllowOverlap); // Data is "in-flight" so depending on when the Metrics window is called we may see current frame information or not - ImGui::Text("ActiveId: 0x%08X/0x%08X (%.2f sec), AllowOverlap: %d, Source: %s", g.ActiveId, g.ActiveIdPreviousFrame, g.ActiveIdTimer, g.ActiveIdAllowOverlap, input_source_names[g.ActiveIdSource]); - ImGui::Text("ActiveIdWindow: '%s'", g.ActiveIdWindow ? g.ActiveIdWindow->Name : "NULL"); - ImGui::Text("MovingWindow: '%s'", g.MovingWindow ? g.MovingWindow->Name : "NULL"); - ImGui::Text("NavWindow: '%s'", g.NavWindow ? g.NavWindow->Name : "NULL"); - ImGui::Text("NavId: 0x%08X, NavLayer: %d", g.NavId, g.NavLayer); - ImGui::Text("NavInputSource: %s", input_source_names[g.NavInputSource]); - ImGui::Text("NavActive: %d, NavVisible: %d", g.IO.NavActive, g.IO.NavVisible); - ImGui::Text("NavActivateId: 0x%08X, NavInputId: 0x%08X", g.NavActivateId, g.NavInputId); - ImGui::Text("NavDisableHighlight: %d, NavDisableMouseHover: %d", g.NavDisableHighlight, g.NavDisableMouseHover); - ImGui::Text("NavWindowingTarget: '%s'", g.NavWindowingTarget ? g.NavWindowingTarget->Name : "NULL"); - ImGui::Text("DragDrop: %d, SourceId = 0x%08X, Payload \"%s\" (%d bytes)", g.DragDropActive, g.DragDropPayload.SourceId, g.DragDropPayload.DataType, g.DragDropPayload.DataSize); - ImGui::TreePop(); - } - - // Tools - if (ImGui::TreeNode("Tools")) - { - // The Item Picker tool is super useful to visually select an item and break into the call-stack of where it was submitted. - if (ImGui::Button("Item Picker..")) - ImGui::DebugStartItemPicker(); - ImGui::SameLine(); - MetricsHelpMarker("Will call the IM_DEBUG_BREAK() macro to break in debugger.\nWarning: If you don't have a debugger attached, this will probably crash."); - - ImGui::Checkbox("Show windows begin order", &show_windows_begin_order); - ImGui::Checkbox("Show windows rectangles", &show_windows_rects); - ImGui::SameLine(); - ImGui::SetNextItemWidth(ImGui::GetFontSize() * 12); - show_windows_rects |= ImGui::Combo("##show_windows_rect_type", &show_windows_rect_type, wrt_rects_names, WRT_Count, WRT_Count); - if (show_windows_rects && g.NavWindow) - { - ImGui::BulletText("'%s':", g.NavWindow->Name); - ImGui::Indent(); - for (int rect_n = 0; rect_n < WRT_Count; rect_n++) - { - ImRect r = Funcs::GetWindowRect(g.NavWindow, rect_n); - ImGui::Text("(%6.1f,%6.1f) (%6.1f,%6.1f) Size (%6.1f,%6.1f) %s", r.Min.x, r.Min.y, r.Max.x, r.Max.y, r.GetWidth(), r.GetHeight(), wrt_rects_names[rect_n]); - } - ImGui::Unindent(); - } - ImGui::Checkbox("Show details when hovering ImDrawCmd node", &show_drawcmd_details); - ImGui::TreePop(); - } - - // Overlay: Display windows Rectangles and Begin Order - if (show_windows_rects || show_windows_begin_order) - { - for (int n = 0; n < g.Windows.Size; n++) - { - ImGuiWindow* window = g.Windows[n]; - if (!window->WasActive) - continue; - ImDrawList* draw_list = GetForegroundDrawList(window); - if (show_windows_rects) - { - ImRect r = Funcs::GetWindowRect(window, show_windows_rect_type); - draw_list->AddRect(r.Min, r.Max, IM_COL32(255, 0, 128, 255)); - } - if (show_windows_begin_order && !(window->Flags & ImGuiWindowFlags_ChildWindow)) - { - char buf[32]; - ImFormatString(buf, IM_ARRAYSIZE(buf), "%d", window->BeginOrderWithinContext); - float font_size = ImGui::GetFontSize(); - draw_list->AddRectFilled(window->Pos, window->Pos + ImVec2(font_size, font_size), IM_COL32(200, 100, 100, 255)); - draw_list->AddText(window->Pos, IM_COL32(255, 255, 255, 255), buf); - } - } - } - -#ifdef IMGUI_HAS_TABLE - // Overlay: Display Tables Rectangles - if (show_tables_rects) - { - for (int table_n = 0; table_n < g.Tables.GetSize(); table_n++) - { - ImGuiTable* table = g.Tables.GetByIndex(table_n); - } - } -#endif // #define IMGUI_HAS_TABLE - -#ifdef IMGUI_HAS_DOCK - // Overlay: Display Docking info - if (show_docking_nodes && g.IO.KeyCtrl) - { - } -#endif // #define IMGUI_HAS_DOCK - - ImGui::End(); -} - -#else - -void ImGui::ShowMetricsWindow(bool*) { } - -#endif - -//----------------------------------------------------------------------------- - -// Include imgui_user.inl at the end of imgui.cpp to access private data/functions that aren't exposed. -// Prefer just including imgui_internal.h from your code rather than using this define. If a declaration is missing from imgui_internal.h add it or request it on the github. -#ifdef IMGUI_INCLUDE_IMGUI_USER_INL -#include "imgui_user.inl" -#endif - -//----------------------------------------------------------------------------- - -#endif // #ifndef IMGUI_DISABLE diff --git a/cmake/imgui/imgui.h b/cmake/imgui/imgui.h deleted file mode 100644 index 098ff637..00000000 --- a/cmake/imgui/imgui.h +++ /dev/null @@ -1,2335 +0,0 @@ -// dear imgui, v1.76 WIP -// (headers) - -// Help: -// - Read FAQ at http://dearimgui.org/faq -// - Newcomers, read 'Programmer guide' in imgui.cpp for notes on how to setup Dear ImGui in your codebase. -// - Call and read ImGui::ShowDemoWindow() in imgui_demo.cpp for demo code. All applications in examples/ are doing that. -// Read imgui.cpp for details, links and comments. - -// Resources: -// - FAQ http://dearimgui.org/faq -// - Homepage & latest https://github.com/ocornut/imgui -// - Releases & changelog https://github.com/ocornut/imgui/releases -// - Gallery https://github.com/ocornut/imgui/issues/3075 (please post your screenshots/video there!) -// - Glossary https://github.com/ocornut/imgui/wiki/Glossary -// - Wiki https://github.com/ocornut/imgui/wiki -// - Issues & support https://github.com/ocornut/imgui/issues - -/* - -Index of this file: -// Header mess -// Forward declarations and basic types -// ImGui API (Dear ImGui end-user API) -// Flags & Enumerations -// Memory allocations macros -// ImVector<> -// ImGuiStyle -// ImGuiIO -// Misc data structures (ImGuiInputTextCallbackData, ImGuiSizeCallbackData, ImGuiPayload) -// Obsolete functions -// Helpers (ImGuiOnceUponAFrame, ImGuiTextFilter, ImGuiTextBuffer, ImGuiStorage, ImGuiListClipper, ImColor) -// Draw List API (ImDrawCallback, ImDrawCmd, ImDrawIdx, ImDrawVert, ImDrawChannel, ImDrawListSplitter, ImDrawListFlags, ImDrawList, ImDrawData) -// Font API (ImFontConfig, ImFontGlyph, ImFontGlyphRangesBuilder, ImFontAtlasFlags, ImFontAtlas, ImFont) - -*/ - -#pragma once - -// Configuration file with compile-time options (edit imconfig.h or #define IMGUI_USER_CONFIG to your own filename) -#ifdef IMGUI_USER_CONFIG -#include IMGUI_USER_CONFIG -#endif -#if !defined(IMGUI_DISABLE_INCLUDE_IMCONFIG_H) || defined(IMGUI_INCLUDE_IMCONFIG_H) -#include "imconfig.h" -#endif - -#ifndef IMGUI_DISABLE - -//----------------------------------------------------------------------------- -// Header mess -//----------------------------------------------------------------------------- - -// Includes -#include // FLT_MIN, FLT_MAX -#include // va_list, va_start, va_end -#include // ptrdiff_t, NULL -#include // memset, memmove, memcpy, strlen, strchr, strcpy, strcmp - -// Version -// (Integer encoded as XYYZZ for use in #if preprocessor conditionals. Work in progress versions typically starts at XYY99 then bounce up to XYY00, XYY01 etc. when release tagging happens) -#define IMGUI_VERSION "1.76 WIP" -#define IMGUI_VERSION_NUM 17502 -#define IMGUI_CHECKVERSION() ImGui::DebugCheckVersionAndDataLayout(IMGUI_VERSION, sizeof(ImGuiIO), sizeof(ImGuiStyle), sizeof(ImVec2), sizeof(ImVec4), sizeof(ImDrawVert), sizeof(ImDrawIdx)) - -// Define attributes of all API symbols declarations (e.g. for DLL under Windows) -// IMGUI_API is used for core imgui functions, IMGUI_IMPL_API is used for the default bindings files (imgui_impl_xxx.h) -// Using dear imgui via a shared library is not recommended, because we don't guarantee backward nor forward ABI compatibility (also function call overhead, as dear imgui is a call-heavy API) -#ifndef IMGUI_API -#define IMGUI_API -#endif -#ifndef IMGUI_IMPL_API -#define IMGUI_IMPL_API IMGUI_API -#endif - -// Helper Macros -#ifndef IM_ASSERT -#include -#define IM_ASSERT(_EXPR) assert(_EXPR) // You can override the default assert handler by editing imconfig.h -#endif -#if !defined(IMGUI_USE_STB_SPRINTF) && (defined(__clang__) || defined(__GNUC__)) -#define IM_FMTARGS(FMT) __attribute__((format(printf, FMT, FMT+1))) // To apply printf-style warnings to our functions. -#define IM_FMTLIST(FMT) __attribute__((format(printf, FMT, 0))) -#else -#define IM_FMTARGS(FMT) -#define IM_FMTLIST(FMT) -#endif -#define IM_ARRAYSIZE(_ARR) ((int)(sizeof(_ARR) / sizeof(*_ARR))) // Size of a static C-style array. Don't use on pointers! -#define IM_UNUSED(_VAR) ((void)_VAR) // Used to silence "unused variable warnings". Often useful as asserts may be stripped out from final builds. -#if (__cplusplus >= 201100) -#define IM_OFFSETOF(_TYPE,_MEMBER) offsetof(_TYPE, _MEMBER) // Offset of _MEMBER within _TYPE. Standardized as offsetof() in C++11 -#else -#define IM_OFFSETOF(_TYPE,_MEMBER) ((size_t)&(((_TYPE*)0)->_MEMBER)) // Offset of _MEMBER within _TYPE. Old style macro. -#endif - -// Warnings -#if defined(__clang__) -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wold-style-cast" -#if __has_warning("-Wzero-as-null-pointer-constant") -#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" -#endif -#elif defined(__GNUC__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wpragmas" // warning: unknown option after '#pragma GCC diagnostic' kind -#pragma GCC diagnostic ignored "-Wclass-memaccess" // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead -#endif - -//----------------------------------------------------------------------------- -// Forward declarations and basic types -//----------------------------------------------------------------------------- - -// Forward declarations -struct ImDrawChannel; // Temporary storage to output draw commands out of order, used by ImDrawListSplitter and ImDrawList::ChannelsSplit() -struct ImDrawCmd; // A single draw command within a parent ImDrawList (generally maps to 1 GPU draw call, unless it is a callback) -struct ImDrawData; // All draw command lists required to render the frame + pos/size coordinates to use for the projection matrix. -struct ImDrawList; // A single draw command list (generally one per window, conceptually you may see this as a dynamic "mesh" builder) -struct ImDrawListSharedData; // Data shared among multiple draw lists (typically owned by parent ImGui context, but you may create one yourself) -struct ImDrawListSplitter; // Helper to split a draw list into different layers which can be drawn into out of order, then flattened back. -struct ImDrawVert; // A single vertex (pos + uv + col = 20 bytes by default. Override layout with IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT) -struct ImFont; // Runtime data for a single font within a parent ImFontAtlas -struct ImFontAtlas; // Runtime data for multiple fonts, bake multiple fonts into a single texture, TTF/OTF font loader -struct ImFontConfig; // Configuration data when adding a font or merging fonts -struct ImFontGlyph; // A single font glyph (code point + coordinates within in ImFontAtlas + offset) -struct ImFontGlyphRangesBuilder; // Helper to build glyph ranges from text/string data -struct ImColor; // Helper functions to create a color that can be converted to either u32 or float4 (*OBSOLETE* please avoid using) -struct ImGuiContext; // Dear ImGui context (opaque structure, unless including imgui_internal.h) -struct ImGuiIO; // Main configuration and I/O between your application and ImGui -struct ImGuiInputTextCallbackData; // Shared state of InputText() when using custom ImGuiInputTextCallback (rare/advanced use) -struct ImGuiListClipper; // Helper to manually clip large list of items -struct ImGuiOnceUponAFrame; // Helper for running a block of code not more than once a frame, used by IMGUI_ONCE_UPON_A_FRAME macro -struct ImGuiPayload; // User data payload for drag and drop operations -struct ImGuiSizeCallbackData; // Callback data when using SetNextWindowSizeConstraints() (rare/advanced use) -struct ImGuiStorage; // Helper for key->value storage -struct ImGuiStyle; // Runtime data for styling/colors -struct ImGuiTextBuffer; // Helper to hold and append into a text buffer (~string builder) -struct ImGuiTextFilter; // Helper to parse and apply text filters (e.g. "aaaaa[,bbbbb][,ccccc]") - -// Enums/Flags (declared as int for compatibility with old C++, to allow using as flags and to not pollute the top of this file) -// - Tip: Use your programming IDE navigation facilities on the names in the _central column_ below to find the actual flags/enum lists! -// In Visual Studio IDE: CTRL+comma ("Edit.NavigateTo") can follow symbols in comments, whereas CTRL+F12 ("Edit.GoToImplementation") cannot. -// With Visual Assist installed: ALT+G ("VAssistX.GoToImplementation") can also follow symbols in comments. -typedef int ImGuiCol; // -> enum ImGuiCol_ // Enum: A color identifier for styling -typedef int ImGuiCond; // -> enum ImGuiCond_ // Enum: A condition for many Set*() functions -typedef int ImGuiDataType; // -> enum ImGuiDataType_ // Enum: A primary data type -typedef int ImGuiDir; // -> enum ImGuiDir_ // Enum: A cardinal direction -typedef int ImGuiKey; // -> enum ImGuiKey_ // Enum: A key identifier (ImGui-side enum) -typedef int ImGuiNavInput; // -> enum ImGuiNavInput_ // Enum: An input identifier for navigation -typedef int ImGuiMouseButton; // -> enum ImGuiMouseButton_ // Enum: A mouse button identifier (0=left, 1=right, 2=middle) -typedef int ImGuiMouseCursor; // -> enum ImGuiMouseCursor_ // Enum: A mouse cursor identifier -typedef int ImGuiStyleVar; // -> enum ImGuiStyleVar_ // Enum: A variable identifier for styling -typedef int ImDrawCornerFlags; // -> enum ImDrawCornerFlags_ // Flags: for ImDrawList::AddRect(), AddRectFilled() etc. -typedef int ImDrawListFlags; // -> enum ImDrawListFlags_ // Flags: for ImDrawList -typedef int ImFontAtlasFlags; // -> enum ImFontAtlasFlags_ // Flags: for ImFontAtlas -typedef int ImGuiBackendFlags; // -> enum ImGuiBackendFlags_ // Flags: for io.BackendFlags -typedef int ImGuiColorEditFlags; // -> enum ImGuiColorEditFlags_ // Flags: for ColorEdit4(), ColorPicker4() etc. -typedef int ImGuiConfigFlags; // -> enum ImGuiConfigFlags_ // Flags: for io.ConfigFlags -typedef int ImGuiComboFlags; // -> enum ImGuiComboFlags_ // Flags: for BeginCombo() -typedef int ImGuiDragDropFlags; // -> enum ImGuiDragDropFlags_ // Flags: for BeginDragDropSource(), AcceptDragDropPayload() -typedef int ImGuiFocusedFlags; // -> enum ImGuiFocusedFlags_ // Flags: for IsWindowFocused() -typedef int ImGuiHoveredFlags; // -> enum ImGuiHoveredFlags_ // Flags: for IsItemHovered(), IsWindowHovered() etc. -typedef int ImGuiInputTextFlags; // -> enum ImGuiInputTextFlags_ // Flags: for InputText(), InputTextMultiline() -typedef int ImGuiKeyModFlags; // -> enum ImGuiKeyModFlags_ // Flags: for io.KeyMods (Ctrl/Shift/Alt/Super) -typedef int ImGuiSelectableFlags; // -> enum ImGuiSelectableFlags_ // Flags: for Selectable() -typedef int ImGuiTabBarFlags; // -> enum ImGuiTabBarFlags_ // Flags: for BeginTabBar() -typedef int ImGuiTabItemFlags; // -> enum ImGuiTabItemFlags_ // Flags: for BeginTabItem() -typedef int ImGuiTreeNodeFlags; // -> enum ImGuiTreeNodeFlags_ // Flags: for TreeNode(), TreeNodeEx(), CollapsingHeader() -typedef int ImGuiWindowFlags; // -> enum ImGuiWindowFlags_ // Flags: for Begin(), BeginChild() - -// Other types -#ifndef ImTextureID // ImTextureID [configurable type: override in imconfig.h with '#define ImTextureID xxx'] -typedef void* ImTextureID; // User data for rendering back-end to identify a texture. This is whatever to you want it to be! read the FAQ about ImTextureID for details. -#endif -typedef unsigned int ImGuiID; // A unique ID used by widgets, typically hashed from a stack of string. -typedef int (*ImGuiInputTextCallback)(ImGuiInputTextCallbackData *data); -typedef void (*ImGuiSizeCallback)(ImGuiSizeCallbackData* data); - -// Decoded character types -// (we generally use UTF-8 encoded string in the API. This is storage specifically for a decoded character used for keyboard input and display) -typedef unsigned short ImWchar16; // A single decoded U16 character/code point. We encode them as multi bytes UTF-8 when used in strings. -typedef unsigned int ImWchar32; // A single decoded U32 character/code point. We encode them as multi bytes UTF-8 when used in strings. -#ifdef IMGUI_USE_WCHAR32 // ImWchar [configurable type: override in imconfig.h with '#define IMGUI_USE_WCHAR32' to support Unicode planes 1-16] -typedef ImWchar32 ImWchar; -#else -typedef ImWchar16 ImWchar; -#endif - -// Basic scalar data types -typedef signed char ImS8; // 8-bit signed integer -typedef unsigned char ImU8; // 8-bit unsigned integer -typedef signed short ImS16; // 16-bit signed integer -typedef unsigned short ImU16; // 16-bit unsigned integer -typedef signed int ImS32; // 32-bit signed integer == int -typedef unsigned int ImU32; // 32-bit unsigned integer (often used to store packed colors) -#if defined(_MSC_VER) && !defined(__clang__) -typedef signed __int64 ImS64; // 64-bit signed integer (pre and post C++11 with Visual Studio) -typedef unsigned __int64 ImU64; // 64-bit unsigned integer (pre and post C++11 with Visual Studio) -#elif (defined(__clang__) || defined(__GNUC__)) && (__cplusplus < 201100) -#include -typedef int64_t ImS64; // 64-bit signed integer (pre C++11) -typedef uint64_t ImU64; // 64-bit unsigned integer (pre C++11) -#else -typedef signed long long ImS64; // 64-bit signed integer (post C++11) -typedef unsigned long long ImU64; // 64-bit unsigned integer (post C++11) -#endif - -// 2D vector (often used to store positions or sizes) -struct ImVec2 -{ - float x, y; - ImVec2() { x = y = 0.0f; } - ImVec2(float _x, float _y) { x = _x; y = _y; } - float operator[] (size_t idx) const { IM_ASSERT(idx <= 1); return (&x)[idx]; } // We very rarely use this [] operator, the assert overhead is fine. - float& operator[] (size_t idx) { IM_ASSERT(idx <= 1); return (&x)[idx]; } // We very rarely use this [] operator, the assert overhead is fine. -#ifdef IM_VEC2_CLASS_EXTRA - IM_VEC2_CLASS_EXTRA // Define additional constructors and implicit cast operators in imconfig.h to convert back and forth between your math types and ImVec2. -#endif -}; - -// 4D vector (often used to store floating-point colors) -struct ImVec4 -{ - float x, y, z, w; - ImVec4() { x = y = z = w = 0.0f; } - ImVec4(float _x, float _y, float _z, float _w) { x = _x; y = _y; z = _z; w = _w; } -#ifdef IM_VEC4_CLASS_EXTRA - IM_VEC4_CLASS_EXTRA // Define additional constructors and implicit cast operators in imconfig.h to convert back and forth between your math types and ImVec4. -#endif -}; - -//----------------------------------------------------------------------------- -// ImGui: Dear ImGui end-user API -// (This is a namespace. You can add extra ImGui:: functions in your own separate file. Please don't modify imgui source files!) -//----------------------------------------------------------------------------- - -namespace ImGui -{ - // Context creation and access - // Each context create its own ImFontAtlas by default. You may instance one yourself and pass it to CreateContext() to share a font atlas between imgui contexts. - // None of those functions is reliant on the current context. - IMGUI_API ImGuiContext* CreateContext(ImFontAtlas* shared_font_atlas = NULL); - IMGUI_API void DestroyContext(ImGuiContext* ctx = NULL); // NULL = destroy current context - IMGUI_API ImGuiContext* GetCurrentContext(); - IMGUI_API void SetCurrentContext(ImGuiContext* ctx); - - // Main - IMGUI_API ImGuiIO& GetIO(); // access the IO structure (mouse/keyboard/gamepad inputs, time, various configuration options/flags) - IMGUI_API ImGuiStyle& GetStyle(); // access the Style structure (colors, sizes). Always use PushStyleCol(), PushStyleVar() to modify style mid-frame! - IMGUI_API void NewFrame(); // start a new Dear ImGui frame, you can submit any command from this point until Render()/EndFrame(). - IMGUI_API void EndFrame(); // ends the Dear ImGui frame. automatically called by Render(). If you don't need to render data (skipping rendering) you may call EndFrame() without Render()... but you'll have wasted CPU already! If you don't need to render, better to not create any windows and not call NewFrame() at all! - IMGUI_API void Render(); // ends the Dear ImGui frame, finalize the draw data. You can get call GetDrawData() to obtain it and run your rendering function (up to v1.60, this used to call io.RenderDrawListsFn(). Nowadays, we allow and prefer calling your render function yourself.) - IMGUI_API ImDrawData* GetDrawData(); // valid after Render() and until the next call to NewFrame(). this is what you have to render. - - // Demo, Debug, Information - IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create Demo window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! - IMGUI_API void ShowAboutWindow(bool* p_open = NULL); // create About window. display Dear ImGui version, credits and build/system information. - IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create Debug/Metrics window. display Dear ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. - IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) - IMGUI_API bool ShowStyleSelector(const char* label); // add style selector block (not a window), essentially a combo listing the default styles. - IMGUI_API void ShowFontSelector(const char* label); // add font selector block (not a window), essentially a combo listing the loaded fonts. - IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). - IMGUI_API const char* GetVersion(); // get the compiled version string e.g. "1.23" (essentially the compiled value for IMGUI_VERSION) - - // Styles - IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); // new, recommended style (default) - IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); // classic imgui style - IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); // best used with borders and a custom, thicker font - - // Windows - // - Begin() = push window to the stack and start appending to it. End() = pop window from the stack. - // - You may append multiple times to the same window during the same frame. - // - Passing 'bool* p_open != NULL' shows a window-closing widget in the upper-right corner of the window, - // which clicking will set the boolean to false when clicked. - // - Begin() return false to indicate the window is collapsed or fully clipped, so you may early out and omit submitting - // anything to the window. Always call a matching End() for each Begin() call, regardless of its return value! - // [Important: due to legacy reason, this is inconsistent with most other functions such as BeginMenu/EndMenu, - // BeginPopup/EndPopup, etc. where the EndXXX call should only be called if the corresponding BeginXXX function - // returned true. Begin and BeginChild are the only odd ones out. Will be fixed in a future update.] - // - Note that the bottom of window stack always contains a window called "Debug". - IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); - IMGUI_API void End(); - - // Child Windows - // - Use child windows to begin into a self-contained independent scrolling/clipping regions within a host window. Child windows can embed their own child. - // - For each independent axis of 'size': ==0.0f: use remaining host window size / >0.0f: fixed size / <0.0f: use remaining window size minus abs(size) / Each axis can use a different mode, e.g. ImVec2(0,400). - // - BeginChild() returns false to indicate the window is collapsed or fully clipped, so you may early out and omit submitting anything to the window. - // Always call a matching EndChild() for each BeginChild() call, regardless of its return value [as with Begin: this is due to legacy reason and inconsistent with most BeginXXX functions apart from the regular Begin() which behaves like BeginChild().] - IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags flags = 0); - IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags flags = 0); - IMGUI_API void EndChild(); - - // Windows Utilities - // - 'current window' = the window we are appending into while inside a Begin()/End() block. 'next window' = next window we will Begin() into. - IMGUI_API bool IsWindowAppearing(); - IMGUI_API bool IsWindowCollapsed(); - IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags=0); // is current window focused? or its root/child, depending on flags. see flags for options. - IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags=0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. NB: If you are trying to check whether your mouse should be dispatched to imgui or to your app, you should use the 'io.WantCaptureMouse' boolean for that! Please read the FAQ! - IMGUI_API ImDrawList* GetWindowDrawList(); // get draw list associated to the current window, to append your own drawing primitives - IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList API) - IMGUI_API ImVec2 GetWindowSize(); // get current window size - IMGUI_API float GetWindowWidth(); // get current window width (shortcut for GetWindowSize().x) - IMGUI_API float GetWindowHeight(); // get current window height (shortcut for GetWindowSize().y) - - // Prefer using SetNextXXX functions (before Begin) rather that SetXXX functions (after Begin). - IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. - IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() - IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Sizes will be rounded down. Use callback to apply non-trivial programmatic constraints. - IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ scrollable client area, which enforce the range of scrollbars). Not including window decorations (title bar, menu bar, etc.) nor WindowPadding. set an axis to 0.0f to leave it automatic. call before Begin() - IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() - IMGUI_API void SetNextWindowFocus(); // set next window to be focused / top-most. call before Begin() - IMGUI_API void SetNextWindowBgAlpha(float alpha); // set next window background color alpha. helper to easily override the Alpha component of ImGuiCol_WindowBg/ChildBg/PopupBg. you may also use ImGuiWindowFlags_NoBackground. - IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. - IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. - IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). - IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / top-most. prefer using SetNextWindowFocus(). - IMGUI_API void SetWindowFontScale(float scale); // set font scale. Adjust IO.FontGlobalScale if you want to scale all windows. This is an old API! For correct scaling, prefer to reload font + rebuild ImFontAtlas + call style.ScaleAllSizes(). - IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. - IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. - IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state - IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / top-most. use NULL to remove focus. - - // Content region - // - Those functions are bound to be redesigned soon (they are confusing, incomplete and return values in local window coordinates which increases confusion) - IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates - IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() - IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates - IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates - IMGUI_API float GetWindowContentRegionWidth(); // - - // Windows Scrolling - IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] - IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] - IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X - IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y - IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] - IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] - IMGUI_API void SetScrollHereX(float center_x_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_x_ratio=0.0: left, 0.5: center, 1.0: right. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. - IMGUI_API void SetScrollHereY(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. - IMGUI_API void SetScrollFromPosX(float local_x, float center_x_ratio = 0.5f); // adjust scrolling amount to make given position visible. Generally GetCursorStartPos() + offset to compute a valid position. - IMGUI_API void SetScrollFromPosY(float local_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position visible. Generally GetCursorStartPos() + offset to compute a valid position. - - // Parameters stacks (shared) - IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font - IMGUI_API void PopFont(); - IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); - IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); - IMGUI_API void PopStyleColor(int count = 1); - IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float val); - IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& val); - IMGUI_API void PopStyleVar(int count = 1); - IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwise use GetColorU32() to get style color with style alpha baked in. - IMGUI_API ImFont* GetFont(); // get current font - IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied - IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API - IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier - IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied - IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied - - // Parameters stacks (current window) - IMGUI_API void PushItemWidth(float item_width); // push width of items for common large "item+label" widgets. >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side). 0.0f = default to ~2/3 of windows width, - IMGUI_API void PopItemWidth(); - IMGUI_API void SetNextItemWidth(float item_width); // set width of the _next_ common large "item+label" widget. >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) - IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position. NOT necessarily the width of last item unlike most 'Item' functions. - IMGUI_API void PushTextWrapPos(float wrap_local_pos_x = 0.0f); // push word-wrapping position for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space - IMGUI_API void PopTextWrapPos(); - IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets - IMGUI_API void PopAllowKeyboardFocus(); - IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. - IMGUI_API void PopButtonRepeat(); - - // Cursor / Layout - // - By "cursor" we mean the current output position. - // - The typical widget behavior is to output themselves at the current cursor position, then move the cursor one line down. - // - You can call SameLine() between widgets to undo the last carriage return and output at the right of the preceeding widget. - // - Attention! We currently have inconsistencies between window-local and absolute positions we will aim to fix with future API: - // Window-local coordinates: SameLine(), GetCursorPos(), SetCursorPos(), GetCursorStartPos(), GetContentRegionMax(), GetWindowContentRegion*(), PushTextWrapPos() - // Absolute coordinate: GetCursorScreenPos(), SetCursorScreenPos(), all ImDrawList:: functions. - IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. - IMGUI_API void SameLine(float offset_from_start_x=0.0f, float spacing=-1.0f); // call between widgets or groups to layout them horizontally. X position given in window coordinates. - IMGUI_API void NewLine(); // undo a SameLine() or force a new line when in an horizontal-layout context. - IMGUI_API void Spacing(); // add vertical spacing. - IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size. unlike InvisibleButton(), Dummy() won't take the mouse click or be navigable into. - IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 - IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 - IMGUI_API void BeginGroup(); // lock horizontal starting position - IMGUI_API void EndGroup(); // unlock horizontal starting position + capture the whole group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) - IMGUI_API ImVec2 GetCursorPos(); // cursor position in window coordinates (relative to window position) - IMGUI_API float GetCursorPosX(); // (some functions are using window-relative coordinates, such as: GetCursorPos, GetCursorStartPos, GetContentRegionMax, GetWindowContentRegion* etc. - IMGUI_API float GetCursorPosY(); // other functions such as GetCursorScreenPos or everything in ImDrawList:: - IMGUI_API void SetCursorPos(const ImVec2& local_pos); // are using the main, absolute coordinate system. - IMGUI_API void SetCursorPosX(float local_x); // GetWindowPos() + GetCursorPos() == GetCursorScreenPos() etc.) - IMGUI_API void SetCursorPosY(float local_y); // - IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position in window coordinates - IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) - IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] - IMGUI_API void AlignTextToFramePadding(); // vertically align upcoming text baseline to FramePadding.y so that it will align properly to regularly framed items (call if you have text on a line before a framed item) - IMGUI_API float GetTextLineHeight(); // ~ FontSize - IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) - IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 - IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) - - // ID stack/scopes - // - Read the FAQ for more details about how ID are handled in dear imgui. If you are creating widgets in a loop you most - // likely want to push a unique identifier (e.g. object pointer, loop index) to uniquely differentiate them. - // - The resulting ID are hashes of the entire stack. - // - You can also use the "Label##foobar" syntax within widget label to distinguish them from each others. - // - In this header file we use the "label"/"name" terminology to denote a string that will be displayed and used as an ID, - // whereas "str_id" denote a string that is only used as an ID and not normally displayed. - IMGUI_API void PushID(const char* str_id); // push string into the ID stack (will hash string). - IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); // push string into the ID stack (will hash string). - IMGUI_API void PushID(const void* ptr_id); // push pointer into the ID stack (will hash pointer). - IMGUI_API void PushID(int int_id); // push integer into the ID stack (will hash integer). - IMGUI_API void PopID(); // pop from the ID stack. - IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself - IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); - IMGUI_API ImGuiID GetID(const void* ptr_id); - - // Widgets: Text - IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. - IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // formatted text - IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); - IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); - IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); - IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); - IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); - IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). - IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); - IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets - IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); - IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() - IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); - - // Widgets: Main - // - Most widgets return true when the value has been changed or when pressed/selected - // - You may also use one of the many IsItemXXX functions (e.g. IsItemActive, IsItemHovered, etc.) to query widget state. - IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button - IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text - IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, frequently useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) - IMGUI_API bool ArrowButton(const char* str_id, ImGuiDir dir); // square button with an arrow shape - IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); - IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding - IMGUI_API bool Checkbox(const char* label, bool* v); - IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); - IMGUI_API bool RadioButton(const char* label, bool active); // use with e.g. if (RadioButton("one", my_value==1)) { my_value = 1; } - IMGUI_API bool RadioButton(const char* label, int* v, int v_button); // shortcut to handle the above pattern when value is an integer - IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); - IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses - - // Widgets: Combo Box - // - The BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it, by creating e.g. Selectable() items. - // - The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. - IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); - IMGUI_API void EndCombo(); // only call EndCombo() if BeginCombo() returns true! - IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); - IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" - IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); - - // Widgets: Drags - // - CTRL+Click on any drag box to turn them into an input box. Manually input values aren't clamped and can go off-bounds. - // - For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x - // - Adjust format string to decorate the value with a prefix, a suffix, or adapt the editing and display precision e.g. "%.3f" -> 1.234; "%5.2f secs" -> 01.23 secs; "Biscuit: %.0f" -> Biscuit: 1; etc. - // - Speed are per-pixel of mouse movement (v_speed=0.2f: mouse needs to move by 5 pixels to increase value by 1). For gamepad/keyboard navigation, minimum speed is Max(v_speed, minimum_step_at_given_precision). - // - Use v_min < v_max to clamp edits to given limits. Note that CTRL+Click manual input can override those limits. - // - Use v_max = FLT_MAX / INT_MAX etc to avoid clamping to a maximum, same with v_min = -FLT_MAX / INT_MIN to avoid clamping to a minimum. - // - Use v_min > v_max to lock edits. - IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound - IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", float power = 1.0f); - IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", float power = 1.0f); - IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", float power = 1.0f); - IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", const char* format_max = NULL, float power = 1.0f); - IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d"); // If v_min >= v_max we have no bound - IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d"); - IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d"); - IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d"); - IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d", const char* format_max = NULL); - IMGUI_API bool DragScalar(const char* label, ImGuiDataType data_type, void* p_data, float v_speed, const void* p_min = NULL, const void* p_max = NULL, const char* format = NULL, float power = 1.0f); - IMGUI_API bool DragScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, float v_speed, const void* p_min = NULL, const void* p_max = NULL, const char* format = NULL, float power = 1.0f); - - // Widgets: Sliders - // - CTRL+Click on any slider to turn them into an input box. Manually input values aren't clamped and can go off-bounds. - // - Adjust format string to decorate the value with a prefix, a suffix, or adapt the editing and display precision e.g. "%.3f" -> 1.234; "%5.2f secs" -> 01.23 secs; "Biscuit: %.0f" -> Biscuit: 1; etc. - IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* format = "%.3f", float power = 1.0f); // adjust format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for power curve sliders - IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* format = "%.3f", float power = 1.0f); - IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* format = "%.3f", float power = 1.0f); - IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* format = "%.3f", float power = 1.0f); - IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f, const char* format = "%.0f deg"); - IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* format = "%d"); - IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* format = "%d"); - IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* format = "%d"); - IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* format = "%d"); - IMGUI_API bool SliderScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format = NULL, float power = 1.0f); - IMGUI_API bool SliderScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, const void* p_min, const void* p_max, const char* format = NULL, float power = 1.0f); - IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* format = "%.3f", float power = 1.0f); - IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* format = "%d"); - IMGUI_API bool VSliderScalar(const char* label, const ImVec2& size, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format = NULL, float power = 1.0f); - - // Widgets: Input with Keyboard - // - If you want to use InputText() with std::string or any custom dynamic string type, see misc/cpp/imgui_stdlib.h and comments in imgui_demo.cpp. - // - Most of the ImGuiInputTextFlags flags are only useful for InputText() and not for InputFloatX, InputIntX, InputDouble etc. - IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = NULL, void* user_data = NULL); - IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = NULL, void* user_data = NULL); - IMGUI_API bool InputTextWithHint(const char* label, const char* hint, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = NULL, void* user_data = NULL); - IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, const char* format = "%.3f", ImGuiInputTextFlags flags = 0); - IMGUI_API bool InputFloat2(const char* label, float v[2], const char* format = "%.3f", ImGuiInputTextFlags flags = 0); - IMGUI_API bool InputFloat3(const char* label, float v[3], const char* format = "%.3f", ImGuiInputTextFlags flags = 0); - IMGUI_API bool InputFloat4(const char* label, float v[4], const char* format = "%.3f", ImGuiInputTextFlags flags = 0); - IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags flags = 0); - IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags flags = 0); - IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags flags = 0); - IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags flags = 0); - IMGUI_API bool InputDouble(const char* label, double* v, double step = 0.0, double step_fast = 0.0, const char* format = "%.6f", ImGuiInputTextFlags flags = 0); - IMGUI_API bool InputScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_step = NULL, const void* p_step_fast = NULL, const char* format = NULL, ImGuiInputTextFlags flags = 0); - IMGUI_API bool InputScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, const void* p_step = NULL, const void* p_step_fast = NULL, const char* format = NULL, ImGuiInputTextFlags flags = 0); - - // Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) - // - Note that in C++ a 'float v[X]' function argument is the _same_ as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. - // - You can pass the address of a first float element out of a contiguous structure, e.g. &myvector.x - IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); - IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); - IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); - IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); - IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. - IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. - - // Widgets: Trees - // - TreeNode functions return true when the node is open, in which case you need to also call TreePop() when you are finished displaying the tree node contents. - IMGUI_API bool TreeNode(const char* label); - IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // helper variation to easily decorelate the id from the displayed string. Read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). - IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " - IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); - IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); - IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); - IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); - IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); - IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); - IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); - IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call TreePush/TreePop yourself if desired. - IMGUI_API void TreePush(const void* ptr_id = NULL); // " - IMGUI_API void TreePop(); // ~ Unindent()+PopId() - IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode - IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). - IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header - IMGUI_API void SetNextItemOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. - - // Widgets: Selectables - // - A selectable highlights when hovered, and can display another color when selected. - // - Neighbors selectable extend their highlight bounds in order to leave no gap between them. This is so a series of selected Selectable appear contiguous. - IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // "bool selected" carry the selection state (read-only). Selectable() is clicked is returns true so you can modify your selection state. size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height - IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // "bool* p_selected" point to the selection state (read-write), as a convenient helper. - - // Widgets: List Boxes - // - FIXME: To be consistent with all the newer API, ListBoxHeader/ListBoxFooter should in reality be called BeginListBox/EndListBox. Will rename them. - IMGUI_API bool ListBox(const char* label, int* current_item, const char* const items[], int items_count, int height_in_items = -1); - IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); - IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. if the function return true, you can output elements then call ListBoxFooter() afterwards. - IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " - IMGUI_API void ListBoxFooter(); // terminate the scrolling region. only call ListBoxFooter() if ListBoxHeader() returned true! - - // Widgets: Data Plotting - IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0, 0), int stride = sizeof(float)); - IMGUI_API void PlotLines(const char* label, float(*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0, 0)); - IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0, 0), int stride = sizeof(float)); - IMGUI_API void PlotHistogram(const char* label, float(*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0, 0)); - - // Widgets: Value() Helpers. - // - Those are merely shortcut to calling Text() with a format string. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) - IMGUI_API void Value(const char* prefix, bool b); - IMGUI_API void Value(const char* prefix, int v); - IMGUI_API void Value(const char* prefix, unsigned int v); - IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); - - // Widgets: Menus - // - Use BeginMenuBar() on a window ImGuiWindowFlags_MenuBar to append to its menu bar. - // - Use BeginMainMenuBar() to create a menu bar at the top of the screen and append to it. - // - Use BeginMenu() to create a menu. You can call BeginMenu() multiple time with the same identifier to append more items to it. - IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). - IMGUI_API void EndMenuBar(); // only call EndMenuBar() if BeginMenuBar() returns true! - IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. - IMGUI_API void EndMainMenuBar(); // only call EndMainMenuBar() if BeginMainMenuBar() returns true! - IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! - IMGUI_API void EndMenu(); // only call EndMenu() if BeginMenu() returns true! - IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment - IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL - - // Tooltips - // - Tooltip are windows following the mouse which do not take focus away. - IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of items). - IMGUI_API void EndTooltip(); - IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set a text-only tooltip, typically use with ImGui::IsItemHovered(). override any previous call to SetTooltip(). - IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); - - // Popups, Modals - // The properties of popups windows are: - // - They block normal mouse hovering detection outside them. (*) - // - Unless modal, they can be closed by clicking anywhere outside them, or by pressing ESCAPE. - // - Their visibility state (~bool) is held internally by imgui instead of being held by the programmer as we are used to with regular Begin() calls. - // User can manipulate the visibility state by calling OpenPopup(). - // - We default to use the right mouse (ImGuiMouseButton_Right=1) for the Popup Context functions. - // (*) You can use IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup) to bypass it and detect hovering even when normally blocked by a popup. - // Those three properties are connected. The library needs to hold their visibility state because it can close popups at any time. - IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). - IMGUI_API bool BeginPopup(const char* str_id, ImGuiWindowFlags flags = 0); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returns true! - IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, ImGuiMouseButton mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! - IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, ImGuiMouseButton mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. - IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, ImGuiMouseButton mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). - IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // modal dialog (regular window with title bar, block interactions behind the modal window, can't close the modal window by clicking outside) - IMGUI_API void EndPopup(); // only call EndPopup() if BeginPopupXXX() returns true! - IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, ImGuiMouseButton mouse_button = 1); // helper to open popup when clicked on last item (note: actually triggers on the mouse _released_ event to be consistent with popup behaviors). return true when just opened. - IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open at the current begin-ed level of the popup stack. - IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. - - // Columns - // - You can also use SameLine(pos_x) to mimic simplified columns. - // - The columns API is work-in-progress and rather lacking (columns are arguably the worst part of dear imgui at the moment!) - // - There is a maximum of 64 columns. - // - Currently working on new 'Tables' api which will replace columns around Q2 2020 (see GitHub #2957). - IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); - IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished - IMGUI_API int GetColumnIndex(); // get current column index - IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column - IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column - IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f - IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column - IMGUI_API int GetColumnsCount(); - - // Tab Bars, Tabs - IMGUI_API bool BeginTabBar(const char* str_id, ImGuiTabBarFlags flags = 0); // create and append into a TabBar - IMGUI_API void EndTabBar(); // only call EndTabBar() if BeginTabBar() returns true! - IMGUI_API bool BeginTabItem(const char* label, bool* p_open = NULL, ImGuiTabItemFlags flags = 0);// create a Tab. Returns true if the Tab is selected. - IMGUI_API void EndTabItem(); // only call EndTabItem() if BeginTabItem() returns true! - IMGUI_API void SetTabItemClosed(const char* tab_or_docked_window_label); // notify TabBar or Docking system of a closed tab/window ahead (useful to reduce visual flicker on reorderable tab bars). For tab-bar: call after BeginTabBar() and before Tab submissions. Otherwise call with a window name. - - // Logging/Capture - // - All text output from the interface can be captured into tty/file/clipboard. By default, tree nodes are automatically opened during logging. - IMGUI_API void LogToTTY(int auto_open_depth = -1); // start logging to tty (stdout) - IMGUI_API void LogToFile(int auto_open_depth = -1, const char* filename = NULL); // start logging to file - IMGUI_API void LogToClipboard(int auto_open_depth = -1); // start logging to OS clipboard - IMGUI_API void LogFinish(); // stop logging (close file, etc.) - IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard - IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) - - // Drag and Drop - // - [BETA API] API may evolve! - IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() - IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t sz, ImGuiCond cond = 0); // type is a user defined string of maximum 32 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. - IMGUI_API void EndDragDropSource(); // only call EndDragDropSource() if BeginDragDropSource() returns true! - IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive a payload. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() - IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. - IMGUI_API void EndDragDropTarget(); // only call EndDragDropTarget() if BeginDragDropTarget() returns true! - IMGUI_API const ImGuiPayload* GetDragDropPayload(); // peek directly into the current payload from anywhere. may return NULL. use ImGuiPayload::IsDataType() to test for the payload type. - - // Clipping - IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); - IMGUI_API void PopClipRect(); - - // Focus, Activation - // - Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHereY()" when applicable to signify "this is the default item" - IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window. - IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. - - // Item/Widgets Utilities - // - Most of the functions are referring to the last/previous item we submitted. - // - See Demo Window under "Widgets->Querying Status" for an interactive visualization of most of those functions. - IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. - IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited. This will continuously return true while holding mouse button on an item. Items that don't interact will always return false) - IMGUI_API bool IsItemFocused(); // is the last item focused for keyboard/gamepad navigation? - IMGUI_API bool IsItemClicked(ImGuiMouseButton mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) == IsMouseClicked(mouse_button) && IsItemHovered() - IMGUI_API bool IsItemVisible(); // is the last item visible? (items may be out of sight because of clipping/scrolling) - IMGUI_API bool IsItemEdited(); // did the last item modify its underlying value this frame? or was pressed? This is generally the same as the "bool" return value of many widgets. - IMGUI_API bool IsItemActivated(); // was the last item just made active (item was previously inactive). - IMGUI_API bool IsItemDeactivated(); // was the last item just made inactive (item was previously active). Useful for Undo/Redo patterns with widgets that requires continuous editing. - IMGUI_API bool IsItemDeactivatedAfterEdit(); // was the last item just made inactive and made a value change when it was active? (e.g. Slider/Drag moved). Useful for Undo/Redo patterns with widgets that requires continuous editing. Note that you may get false positives (some widgets such as Combo()/ListBox()/Selectable() will return true even when clicking an already selected item). - IMGUI_API bool IsItemToggledOpen(); // was the last item open state toggled? set by TreeNode(). - IMGUI_API bool IsAnyItemHovered(); // is any item hovered? - IMGUI_API bool IsAnyItemActive(); // is any item active? - IMGUI_API bool IsAnyItemFocused(); // is any item focused? - IMGUI_API ImVec2 GetItemRectMin(); // get upper-left bounding rectangle of the last item (screen space) - IMGUI_API ImVec2 GetItemRectMax(); // get lower-right bounding rectangle of the last item (screen space) - IMGUI_API ImVec2 GetItemRectSize(); // get size of last item - IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. - - // Miscellaneous Utilities - IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. - IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. - IMGUI_API double GetTime(); // get global imgui time. incremented by io.DeltaTime every frame. - IMGUI_API int GetFrameCount(); // get global imgui frame count. incremented by 1 every frame. - IMGUI_API ImDrawList* GetBackgroundDrawList(); // this draw list will be the first rendering one. Useful to quickly draw shapes/text behind dear imgui contents. - IMGUI_API ImDrawList* GetForegroundDrawList(); // this draw list will be the last rendered one. Useful to quickly draw shapes/text over dear imgui contents. - IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); // you may use this when creating your own ImDrawList instances. - IMGUI_API const char* GetStyleColorName(ImGuiCol idx); // get a string corresponding to the enum value (for display, saving, etc.). - IMGUI_API void SetStateStorage(ImGuiStorage* storage); // replace current window storage with our own (if you want to manipulate it yourself, typically clear subsection of it) - IMGUI_API ImGuiStorage* GetStateStorage(); - IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. - IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame - IMGUI_API void EndChildFrame(); // always call EndChildFrame() regardless of BeginChildFrame() return values (which indicates a collapsed/clipped window) - - // Text Utilities - IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); - - // Color Utilities - IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); - IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); - IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); - IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); - - // Inputs Utilities: Keyboard - // - For 'int user_key_index' you can use your own indices/enums according to how your backend/engine stored them in io.KeysDown[]. - // - We don't know the meaning of those value. You can use GetKeyIndex() to map a ImGuiKey_ value into the user index. - IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] - IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. - IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down)? if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate - IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down)? - IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate - IMGUI_API void CaptureKeyboardFromApp(bool want_capture_keyboard_value = true); // attention: misleading name! manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application to handle). e.g. force capture keyboard when your widget is being hovered. This is equivalent to setting "io.WantCaptureKeyboard = want_capture_keyboard_value"; after the next NewFrame() call. - - // Inputs Utilities: Mouse - // - To refer to a mouse button, you may use named enums in your code e.g. ImGuiMouseButton_Left, ImGuiMouseButton_Right. - // - You can also use regular integer: it is forever guaranteed that 0=Left, 1=Right, 2=Middle. - // - Dragging operations are only reported after mouse has moved a certain distance away from the initial clicking position (see 'lock_threshold' and 'io.MouseDraggingThreshold') - IMGUI_API bool IsMouseDown(ImGuiMouseButton button); // is mouse button held? - IMGUI_API bool IsMouseClicked(ImGuiMouseButton button, bool repeat = false); // did mouse button clicked? (went from !Down to Down) - IMGUI_API bool IsMouseReleased(ImGuiMouseButton button); // did mouse button released? (went from Down to !Down) - IMGUI_API bool IsMouseDoubleClicked(ImGuiMouseButton button); // did mouse button double-clicked? a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. - IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true);// is mouse hovering given bounding rect (in screen space). clipped by current clipping settings, but disregarding of other consideration of focus/window ordering/popup-block. - IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // by convention we use (-FLT_MAX,-FLT_MAX) to denote that there is no mouse available - IMGUI_API bool IsAnyMouseDown(); // is any mouse button held? - IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls - IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve mouse position at the time of opening popup we have BeginPopup() into (helper to avoid user backing that value themselves) - IMGUI_API bool IsMouseDragging(ImGuiMouseButton button, float lock_threshold = -1.0f); // is mouse dragging? (if lock_threshold < -1.0f, uses io.MouseDraggingThreshold) - IMGUI_API ImVec2 GetMouseDragDelta(ImGuiMouseButton button = 0, float lock_threshold = -1.0f); // return the delta from the initial clicking position while the mouse button is pressed or was just released. This is locked and return 0.0f until the mouse moves past a distance threshold at least once (if lock_threshold < -1.0f, uses io.MouseDraggingThreshold) - IMGUI_API void ResetMouseDragDelta(ImGuiMouseButton button = 0); // - IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you - IMGUI_API void SetMouseCursor(ImGuiMouseCursor cursor_type); // set desired cursor type - IMGUI_API void CaptureMouseFromApp(bool want_capture_mouse_value = true); // attention: misleading name! manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application to handle). This is equivalent to setting "io.WantCaptureMouse = want_capture_mouse_value;" after the next NewFrame() call. - - // Clipboard Utilities - // - Also see the LogToClipboard() function to capture GUI into clipboard, or easily output text data to the clipboard. - IMGUI_API const char* GetClipboardText(); - IMGUI_API void SetClipboardText(const char* text); - - // Settings/.Ini Utilities - // - The disk functions are automatically called if io.IniFilename != NULL (default is "imgui.ini"). - // - Set io.IniFilename to NULL to load/save manually. Read io.WantSaveIniSettings description about handling .ini saving manually. - IMGUI_API void LoadIniSettingsFromDisk(const char* ini_filename); // call after CreateContext() and before the first call to NewFrame(). NewFrame() automatically calls LoadIniSettingsFromDisk(io.IniFilename). - IMGUI_API void LoadIniSettingsFromMemory(const char* ini_data, size_t ini_size=0); // call after CreateContext() and before the first call to NewFrame() to provide .ini data from your own data source. - IMGUI_API void SaveIniSettingsToDisk(const char* ini_filename); // this is automatically called (if io.IniFilename is not empty) a few seconds after any modification that should be reflected in the .ini file (and also by DestroyContext). - IMGUI_API const char* SaveIniSettingsToMemory(size_t* out_ini_size = NULL); // return a zero-terminated string with the .ini data which you can save by your own mean. call when io.WantSaveIniSettings is set, then save data by your own mean and clear io.WantSaveIniSettings. - - // Debug Utilities - IMGUI_API bool DebugCheckVersionAndDataLayout(const char* version_str, size_t sz_io, size_t sz_style, size_t sz_vec2, size_t sz_vec4, size_t sz_drawvert, size_t sz_drawidx); // This is called by IMGUI_CHECKVERSION() macro. - - // Memory Allocators - // - All those functions are not reliant on the current context. - // - If you reload the contents of imgui.cpp at runtime, you may need to call SetCurrentContext() + SetAllocatorFunctions() again because we use global storage for those. - IMGUI_API void SetAllocatorFunctions(void* (*alloc_func)(size_t sz, void* user_data), void (*free_func)(void* ptr, void* user_data), void* user_data = NULL); - IMGUI_API void* MemAlloc(size_t size); - IMGUI_API void MemFree(void* ptr); - -} // namespace ImGui - -//----------------------------------------------------------------------------- -// Flags & Enumerations -//----------------------------------------------------------------------------- - -// Flags for ImGui::Begin() -enum ImGuiWindowFlags_ -{ - ImGuiWindowFlags_None = 0, - ImGuiWindowFlags_NoTitleBar = 1 << 0, // Disable title-bar - ImGuiWindowFlags_NoResize = 1 << 1, // Disable user resizing with the lower-right grip - ImGuiWindowFlags_NoMove = 1 << 2, // Disable user moving the window - ImGuiWindowFlags_NoScrollbar = 1 << 3, // Disable scrollbars (window can still scroll with mouse or programmatically) - ImGuiWindowFlags_NoScrollWithMouse = 1 << 4, // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set. - ImGuiWindowFlags_NoCollapse = 1 << 5, // Disable user collapsing window by double-clicking on it - ImGuiWindowFlags_AlwaysAutoResize = 1 << 6, // Resize every window to its content every frame - ImGuiWindowFlags_NoBackground = 1 << 7, // Disable drawing background color (WindowBg, etc.) and outside border. Similar as using SetNextWindowBgAlpha(0.0f). - ImGuiWindowFlags_NoSavedSettings = 1 << 8, // Never load/save settings in .ini file - ImGuiWindowFlags_NoMouseInputs = 1 << 9, // Disable catching mouse, hovering test with pass through. - ImGuiWindowFlags_MenuBar = 1 << 10, // Has a menu-bar - ImGuiWindowFlags_HorizontalScrollbar = 1 << 11, // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section. - ImGuiWindowFlags_NoFocusOnAppearing = 1 << 12, // Disable taking focus when transitioning from hidden to visible state - ImGuiWindowFlags_NoBringToFrontOnFocus = 1 << 13, // Disable bringing window to front when taking focus (e.g. clicking on it or programmatically giving it focus) - ImGuiWindowFlags_AlwaysVerticalScrollbar= 1 << 14, // Always show vertical scrollbar (even if ContentSize.y < Size.y) - ImGuiWindowFlags_AlwaysHorizontalScrollbar=1<< 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x) - ImGuiWindowFlags_AlwaysUseWindowPadding = 1 << 16, // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient) - ImGuiWindowFlags_NoNavInputs = 1 << 18, // No gamepad/keyboard navigation within the window - ImGuiWindowFlags_NoNavFocus = 1 << 19, // No focusing toward this window with gamepad/keyboard navigation (e.g. skipped by CTRL+TAB) - ImGuiWindowFlags_UnsavedDocument = 1 << 20, // Append '*' to title without affecting the ID, as a convenience to avoid using the ### operator. When used in a tab/docking context, tab is selected on closure and closure is deferred by one frame to allow code to cancel the closure (with a confirmation popup, etc.) without flicker. - ImGuiWindowFlags_NoNav = ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus, - ImGuiWindowFlags_NoDecoration = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoCollapse, - ImGuiWindowFlags_NoInputs = ImGuiWindowFlags_NoMouseInputs | ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus, - - // [Internal] - ImGuiWindowFlags_NavFlattened = 1 << 23, // [BETA] Allow gamepad/keyboard navigation to cross over parent border to this child (only use on child that have no scrolling!) - ImGuiWindowFlags_ChildWindow = 1 << 24, // Don't use! For internal use by BeginChild() - ImGuiWindowFlags_Tooltip = 1 << 25, // Don't use! For internal use by BeginTooltip() - ImGuiWindowFlags_Popup = 1 << 26, // Don't use! For internal use by BeginPopup() - ImGuiWindowFlags_Modal = 1 << 27, // Don't use! For internal use by BeginPopupModal() - ImGuiWindowFlags_ChildMenu = 1 << 28 // Don't use! For internal use by BeginMenu() - - // [Obsolete] - //ImGuiWindowFlags_ShowBorders = 1 << 7, // --> Set style.FrameBorderSize=1.0f or style.WindowBorderSize=1.0f to enable borders around items or windows. - //ImGuiWindowFlags_ResizeFromAnySide = 1 << 17, // --> Set io.ConfigWindowsResizeFromEdges=true and make sure mouse cursors are supported by back-end (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors) -}; - -// Flags for ImGui::InputText() -enum ImGuiInputTextFlags_ -{ - ImGuiInputTextFlags_None = 0, - ImGuiInputTextFlags_CharsDecimal = 1 << 0, // Allow 0123456789.+-*/ - ImGuiInputTextFlags_CharsHexadecimal = 1 << 1, // Allow 0123456789ABCDEFabcdef - ImGuiInputTextFlags_CharsUppercase = 1 << 2, // Turn a..z into A..Z - ImGuiInputTextFlags_CharsNoBlank = 1 << 3, // Filter out spaces, tabs - ImGuiInputTextFlags_AutoSelectAll = 1 << 4, // Select entire text when first taking mouse focus - ImGuiInputTextFlags_EnterReturnsTrue = 1 << 5, // Return 'true' when Enter is pressed (as opposed to every time the value was modified). Consider looking at the IsItemDeactivatedAfterEdit() function. - ImGuiInputTextFlags_CallbackCompletion = 1 << 6, // Callback on pressing TAB (for completion handling) - ImGuiInputTextFlags_CallbackHistory = 1 << 7, // Callback on pressing Up/Down arrows (for history handling) - ImGuiInputTextFlags_CallbackAlways = 1 << 8, // Callback on each iteration. User code may query cursor position, modify text buffer. - ImGuiInputTextFlags_CallbackCharFilter = 1 << 9, // Callback on character inputs to replace or discard them. Modify 'EventChar' to replace or discard, or return 1 in callback to discard. - ImGuiInputTextFlags_AllowTabInput = 1 << 10, // Pressing TAB input a '\t' character into the text field - ImGuiInputTextFlags_CtrlEnterForNewLine = 1 << 11, // In multi-line mode, unfocus with Enter, add new line with Ctrl+Enter (default is opposite: unfocus with Ctrl+Enter, add line with Enter). - ImGuiInputTextFlags_NoHorizontalScroll = 1 << 12, // Disable following the cursor horizontally - ImGuiInputTextFlags_AlwaysInsertMode = 1 << 13, // Insert mode - ImGuiInputTextFlags_ReadOnly = 1 << 14, // Read-only mode - ImGuiInputTextFlags_Password = 1 << 15, // Password mode, display all characters as '*' - ImGuiInputTextFlags_NoUndoRedo = 1 << 16, // Disable undo/redo. Note that input text owns the text data while active, if you want to provide your own undo/redo stack you need e.g. to call ClearActiveID(). - ImGuiInputTextFlags_CharsScientific = 1 << 17, // Allow 0123456789.+-*/eE (Scientific notation input) - ImGuiInputTextFlags_CallbackResize = 1 << 18, // Callback on buffer capacity changes request (beyond 'buf_size' parameter value), allowing the string to grow. Notify when the string wants to be resized (for string types which hold a cache of their Size). You will be provided a new BufSize in the callback and NEED to honor it. (see misc/cpp/imgui_stdlib.h for an example of using this) - // [Internal] - ImGuiInputTextFlags_Multiline = 1 << 20, // For internal use by InputTextMultiline() - ImGuiInputTextFlags_NoMarkEdited = 1 << 21 // For internal use by functions using InputText() before reformatting data -}; - -// Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*() -enum ImGuiTreeNodeFlags_ -{ - ImGuiTreeNodeFlags_None = 0, - ImGuiTreeNodeFlags_Selected = 1 << 0, // Draw as selected - ImGuiTreeNodeFlags_Framed = 1 << 1, // Full colored frame (e.g. for CollapsingHeader) - ImGuiTreeNodeFlags_AllowItemOverlap = 1 << 2, // Hit testing to allow subsequent widgets to overlap this one - ImGuiTreeNodeFlags_NoTreePushOnOpen = 1 << 3, // Don't do a TreePush() when open (e.g. for CollapsingHeader) = no extra indent nor pushing on ID stack - ImGuiTreeNodeFlags_NoAutoOpenOnLog = 1 << 4, // Don't automatically and temporarily open node when Logging is active (by default logging will automatically open tree nodes) - ImGuiTreeNodeFlags_DefaultOpen = 1 << 5, // Default node to be open - ImGuiTreeNodeFlags_OpenOnDoubleClick = 1 << 6, // Need double-click to open node - ImGuiTreeNodeFlags_OpenOnArrow = 1 << 7, // Only open when clicking on the arrow part. If ImGuiTreeNodeFlags_OpenOnDoubleClick is also set, single-click arrow or double-click all box to open. - ImGuiTreeNodeFlags_Leaf = 1 << 8, // No collapsing, no arrow (use as a convenience for leaf nodes). - ImGuiTreeNodeFlags_Bullet = 1 << 9, // Display a bullet instead of arrow - ImGuiTreeNodeFlags_FramePadding = 1 << 10, // Use FramePadding (even for an unframed text node) to vertically align text baseline to regular widget height. Equivalent to calling AlignTextToFramePadding(). - ImGuiTreeNodeFlags_SpanAvailWidth = 1 << 11, // Extend hit box to the right-most edge, even if not framed. This is not the default in order to allow adding other items on the same line. In the future we may refactor the hit system to be front-to-back, allowing natural overlaps and then this can become the default. - ImGuiTreeNodeFlags_SpanFullWidth = 1 << 12, // Extend hit box to the left-most and right-most edges (bypass the indented area). - ImGuiTreeNodeFlags_NavLeftJumpsBackHere = 1 << 13, // (WIP) Nav: left direction may move to this TreeNode() from any of its child (items submitted between TreeNode and TreePop) - //ImGuiTreeNodeFlags_NoScrollOnOpen = 1 << 14, // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible - ImGuiTreeNodeFlags_CollapsingHeader = ImGuiTreeNodeFlags_Framed | ImGuiTreeNodeFlags_NoTreePushOnOpen | ImGuiTreeNodeFlags_NoAutoOpenOnLog -}; - -// Flags for ImGui::Selectable() -enum ImGuiSelectableFlags_ -{ - ImGuiSelectableFlags_None = 0, - ImGuiSelectableFlags_DontClosePopups = 1 << 0, // Clicking this don't close parent popup window - ImGuiSelectableFlags_SpanAllColumns = 1 << 1, // Selectable frame can span all columns (text will still fit in current column) - ImGuiSelectableFlags_AllowDoubleClick = 1 << 2, // Generate press events on double clicks too - ImGuiSelectableFlags_Disabled = 1 << 3, // Cannot be selected, display grayed out text - ImGuiSelectableFlags_AllowItemOverlap = 1 << 4 // (WIP) Hit testing to allow subsequent widgets to overlap this one -}; - -// Flags for ImGui::BeginCombo() -enum ImGuiComboFlags_ -{ - ImGuiComboFlags_None = 0, - ImGuiComboFlags_PopupAlignLeft = 1 << 0, // Align the popup toward the left by default - ImGuiComboFlags_HeightSmall = 1 << 1, // Max ~4 items visible. Tip: If you want your combo popup to be a specific size you can use SetNextWindowSizeConstraints() prior to calling BeginCombo() - ImGuiComboFlags_HeightRegular = 1 << 2, // Max ~8 items visible (default) - ImGuiComboFlags_HeightLarge = 1 << 3, // Max ~20 items visible - ImGuiComboFlags_HeightLargest = 1 << 4, // As many fitting items as possible - ImGuiComboFlags_NoArrowButton = 1 << 5, // Display on the preview box without the square arrow button - ImGuiComboFlags_NoPreview = 1 << 6, // Display only a square arrow button - ImGuiComboFlags_HeightMask_ = ImGuiComboFlags_HeightSmall | ImGuiComboFlags_HeightRegular | ImGuiComboFlags_HeightLarge | ImGuiComboFlags_HeightLargest -}; - -// Flags for ImGui::BeginTabBar() -enum ImGuiTabBarFlags_ -{ - ImGuiTabBarFlags_None = 0, - ImGuiTabBarFlags_Reorderable = 1 << 0, // Allow manually dragging tabs to re-order them + New tabs are appended at the end of list - ImGuiTabBarFlags_AutoSelectNewTabs = 1 << 1, // Automatically select new tabs when they appear - ImGuiTabBarFlags_TabListPopupButton = 1 << 2, // Disable buttons to open the tab list popup - ImGuiTabBarFlags_NoCloseWithMiddleMouseButton = 1 << 3, // Disable behavior of closing tabs (that are submitted with p_open != NULL) with middle mouse button. You can still repro this behavior on user's side with if (IsItemHovered() && IsMouseClicked(2)) *p_open = false. - ImGuiTabBarFlags_NoTabListScrollingButtons = 1 << 4, // Disable scrolling buttons (apply when fitting policy is ImGuiTabBarFlags_FittingPolicyScroll) - ImGuiTabBarFlags_NoTooltip = 1 << 5, // Disable tooltips when hovering a tab - ImGuiTabBarFlags_FittingPolicyResizeDown = 1 << 6, // Resize tabs when they don't fit - ImGuiTabBarFlags_FittingPolicyScroll = 1 << 7, // Add scroll buttons when tabs don't fit - ImGuiTabBarFlags_FittingPolicyMask_ = ImGuiTabBarFlags_FittingPolicyResizeDown | ImGuiTabBarFlags_FittingPolicyScroll, - ImGuiTabBarFlags_FittingPolicyDefault_ = ImGuiTabBarFlags_FittingPolicyResizeDown -}; - -// Flags for ImGui::BeginTabItem() -enum ImGuiTabItemFlags_ -{ - ImGuiTabItemFlags_None = 0, - ImGuiTabItemFlags_UnsavedDocument = 1 << 0, // Append '*' to title without affecting the ID, as a convenience to avoid using the ### operator. Also: tab is selected on closure and closure is deferred by one frame to allow code to undo it without flicker. - ImGuiTabItemFlags_SetSelected = 1 << 1, // Trigger flag to programmatically make the tab selected when calling BeginTabItem() - ImGuiTabItemFlags_NoCloseWithMiddleMouseButton = 1 << 2, // Disable behavior of closing tabs (that are submitted with p_open != NULL) with middle mouse button. You can still repro this behavior on user's side with if (IsItemHovered() && IsMouseClicked(2)) *p_open = false. - ImGuiTabItemFlags_NoPushId = 1 << 3 // Don't call PushID(tab->ID)/PopID() on BeginTabItem()/EndTabItem() -}; - -// Flags for ImGui::IsWindowFocused() -enum ImGuiFocusedFlags_ -{ - ImGuiFocusedFlags_None = 0, - ImGuiFocusedFlags_ChildWindows = 1 << 0, // IsWindowFocused(): Return true if any children of the window is focused - ImGuiFocusedFlags_RootWindow = 1 << 1, // IsWindowFocused(): Test from root window (top most parent of the current hierarchy) - ImGuiFocusedFlags_AnyWindow = 1 << 2, // IsWindowFocused(): Return true if any window is focused. Important: If you are trying to tell how to dispatch your low-level inputs, do NOT use this. Use ImGui::GetIO().WantCaptureMouse instead. - ImGuiFocusedFlags_RootAndChildWindows = ImGuiFocusedFlags_RootWindow | ImGuiFocusedFlags_ChildWindows -}; - -// Flags for ImGui::IsItemHovered(), ImGui::IsWindowHovered() -// Note: if you are trying to check whether your mouse should be dispatched to imgui or to your app, you should use the 'io.WantCaptureMouse' boolean for that. Please read the FAQ! -// Note: windows with the ImGuiWindowFlags_NoInputs flag are ignored by IsWindowHovered() calls. -enum ImGuiHoveredFlags_ -{ - ImGuiHoveredFlags_None = 0, // Return true if directly over the item/window, not obstructed by another window, not obstructed by an active popup or modal blocking inputs under them. - ImGuiHoveredFlags_ChildWindows = 1 << 0, // IsWindowHovered() only: Return true if any children of the window is hovered - ImGuiHoveredFlags_RootWindow = 1 << 1, // IsWindowHovered() only: Test from root window (top most parent of the current hierarchy) - ImGuiHoveredFlags_AnyWindow = 1 << 2, // IsWindowHovered() only: Return true if any window is hovered - ImGuiHoveredFlags_AllowWhenBlockedByPopup = 1 << 3, // Return true even if a popup window is normally blocking access to this item/window - //ImGuiHoveredFlags_AllowWhenBlockedByModal = 1 << 4, // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet. - ImGuiHoveredFlags_AllowWhenBlockedByActiveItem = 1 << 5, // Return true even if an active item is blocking access to this item/window. Useful for Drag and Drop patterns. - ImGuiHoveredFlags_AllowWhenOverlapped = 1 << 6, // Return true even if the position is obstructed or overlapped by another window - ImGuiHoveredFlags_AllowWhenDisabled = 1 << 7, // Return true even if the item is disabled - ImGuiHoveredFlags_RectOnly = ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem | ImGuiHoveredFlags_AllowWhenOverlapped, - ImGuiHoveredFlags_RootAndChildWindows = ImGuiHoveredFlags_RootWindow | ImGuiHoveredFlags_ChildWindows -}; - -// Flags for ImGui::BeginDragDropSource(), ImGui::AcceptDragDropPayload() -enum ImGuiDragDropFlags_ -{ - ImGuiDragDropFlags_None = 0, - // BeginDragDropSource() flags - ImGuiDragDropFlags_SourceNoPreviewTooltip = 1 << 0, // By default, a successful call to BeginDragDropSource opens a tooltip so you can display a preview or description of the source contents. This flag disable this behavior. - ImGuiDragDropFlags_SourceNoDisableHover = 1 << 1, // By default, when dragging we clear data so that IsItemHovered() will return false, to avoid subsequent user code submitting tooltips. This flag disable this behavior so you can still call IsItemHovered() on the source item. - ImGuiDragDropFlags_SourceNoHoldToOpenOthers = 1 << 2, // Disable the behavior that allows to open tree nodes and collapsing header by holding over them while dragging a source item. - ImGuiDragDropFlags_SourceAllowNullID = 1 << 3, // Allow items such as Text(), Image() that have no unique identifier to be used as drag source, by manufacturing a temporary identifier based on their window-relative position. This is extremely unusual within the dear imgui ecosystem and so we made it explicit. - ImGuiDragDropFlags_SourceExtern = 1 << 4, // External source (from outside of dear imgui), won't attempt to read current item/window info. Will always return true. Only one Extern source can be active simultaneously. - ImGuiDragDropFlags_SourceAutoExpirePayload = 1 << 5, // Automatically expire the payload if the source cease to be submitted (otherwise payloads are persisting while being dragged) - // AcceptDragDropPayload() flags - ImGuiDragDropFlags_AcceptBeforeDelivery = 1 << 10, // AcceptDragDropPayload() will returns true even before the mouse button is released. You can then call IsDelivery() to test if the payload needs to be delivered. - ImGuiDragDropFlags_AcceptNoDrawDefaultRect = 1 << 11, // Do not draw the default highlight rectangle when hovering over target. - ImGuiDragDropFlags_AcceptNoPreviewTooltip = 1 << 12, // Request hiding the BeginDragDropSource tooltip from the BeginDragDropTarget site. - ImGuiDragDropFlags_AcceptPeekOnly = ImGuiDragDropFlags_AcceptBeforeDelivery | ImGuiDragDropFlags_AcceptNoDrawDefaultRect // For peeking ahead and inspecting the payload before delivery. -}; - -// Standard Drag and Drop payload types. You can define you own payload types using short strings. Types starting with '_' are defined by Dear ImGui. -#define IMGUI_PAYLOAD_TYPE_COLOR_3F "_COL3F" // float[3]: Standard type for colors, without alpha. User code may use this type. -#define IMGUI_PAYLOAD_TYPE_COLOR_4F "_COL4F" // float[4]: Standard type for colors. User code may use this type. - -// A primary data type -enum ImGuiDataType_ -{ - ImGuiDataType_S8, // signed char / char (with sensible compilers) - ImGuiDataType_U8, // unsigned char - ImGuiDataType_S16, // short - ImGuiDataType_U16, // unsigned short - ImGuiDataType_S32, // int - ImGuiDataType_U32, // unsigned int - ImGuiDataType_S64, // long long / __int64 - ImGuiDataType_U64, // unsigned long long / unsigned __int64 - ImGuiDataType_Float, // float - ImGuiDataType_Double, // double - ImGuiDataType_COUNT -}; - -// A cardinal direction -enum ImGuiDir_ -{ - ImGuiDir_None = -1, - ImGuiDir_Left = 0, - ImGuiDir_Right = 1, - ImGuiDir_Up = 2, - ImGuiDir_Down = 3, - ImGuiDir_COUNT -}; - -// User fill ImGuiIO.KeyMap[] array with indices into the ImGuiIO.KeysDown[512] array -enum ImGuiKey_ -{ - ImGuiKey_Tab, - ImGuiKey_LeftArrow, - ImGuiKey_RightArrow, - ImGuiKey_UpArrow, - ImGuiKey_DownArrow, - ImGuiKey_PageUp, - ImGuiKey_PageDown, - ImGuiKey_Home, - ImGuiKey_End, - ImGuiKey_Insert, - ImGuiKey_Delete, - ImGuiKey_Backspace, - ImGuiKey_Space, - ImGuiKey_Enter, - ImGuiKey_Escape, - ImGuiKey_KeyPadEnter, - ImGuiKey_A, // for text edit CTRL+A: select all - ImGuiKey_C, // for text edit CTRL+C: copy - ImGuiKey_V, // for text edit CTRL+V: paste - ImGuiKey_X, // for text edit CTRL+X: cut - ImGuiKey_Y, // for text edit CTRL+Y: redo - ImGuiKey_Z, // for text edit CTRL+Z: undo - ImGuiKey_COUNT -}; - -// To test io.KeyMods (which is a combination of individual fields io.KeyCtrl, io.KeyShift, io.KeyAlt set by user/back-end) -enum ImGuiKeyModFlags_ -{ - ImGuiKeyModFlags_None = 0, - ImGuiKeyModFlags_Ctrl = 1 << 0, - ImGuiKeyModFlags_Shift = 1 << 1, - ImGuiKeyModFlags_Alt = 1 << 2, - ImGuiKeyModFlags_Super = 1 << 3 -}; - -// Gamepad/Keyboard directional navigation -// Keyboard: Set io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard to enable. NewFrame() will automatically fill io.NavInputs[] based on your io.KeysDown[] + io.KeyMap[] arrays. -// Gamepad: Set io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad to enable. Back-end: set ImGuiBackendFlags_HasGamepad and fill the io.NavInputs[] fields before calling NewFrame(). Note that io.NavInputs[] is cleared by EndFrame(). -// Read instructions in imgui.cpp for more details. Download PNG/PSD at http://goo.gl/9LgVZW. -enum ImGuiNavInput_ -{ - // Gamepad Mapping - ImGuiNavInput_Activate, // activate / open / toggle / tweak value // e.g. Cross (PS4), A (Xbox), A (Switch), Space (Keyboard) - ImGuiNavInput_Cancel, // cancel / close / exit // e.g. Circle (PS4), B (Xbox), B (Switch), Escape (Keyboard) - ImGuiNavInput_Input, // text input / on-screen keyboard // e.g. Triang.(PS4), Y (Xbox), X (Switch), Return (Keyboard) - ImGuiNavInput_Menu, // tap: toggle menu / hold: focus, move, resize // e.g. Square (PS4), X (Xbox), Y (Switch), Alt (Keyboard) - ImGuiNavInput_DpadLeft, // move / tweak / resize window (w/ PadMenu) // e.g. D-pad Left/Right/Up/Down (Gamepads), Arrow keys (Keyboard) - ImGuiNavInput_DpadRight, // - ImGuiNavInput_DpadUp, // - ImGuiNavInput_DpadDown, // - ImGuiNavInput_LStickLeft, // scroll / move window (w/ PadMenu) // e.g. Left Analog Stick Left/Right/Up/Down - ImGuiNavInput_LStickRight, // - ImGuiNavInput_LStickUp, // - ImGuiNavInput_LStickDown, // - ImGuiNavInput_FocusPrev, // next window (w/ PadMenu) // e.g. L1 or L2 (PS4), LB or LT (Xbox), L or ZL (Switch) - ImGuiNavInput_FocusNext, // prev window (w/ PadMenu) // e.g. R1 or R2 (PS4), RB or RT (Xbox), R or ZL (Switch) - ImGuiNavInput_TweakSlow, // slower tweaks // e.g. L1 or L2 (PS4), LB or LT (Xbox), L or ZL (Switch) - ImGuiNavInput_TweakFast, // faster tweaks // e.g. R1 or R2 (PS4), RB or RT (Xbox), R or ZL (Switch) - - // [Internal] Don't use directly! This is used internally to differentiate keyboard from gamepad inputs for behaviors that require to differentiate them. - // Keyboard behavior that have no corresponding gamepad mapping (e.g. CTRL+TAB) will be directly reading from io.KeysDown[] instead of io.NavInputs[]. - ImGuiNavInput_KeyMenu_, // toggle menu // = io.KeyAlt - ImGuiNavInput_KeyLeft_, // move left // = Arrow keys - ImGuiNavInput_KeyRight_, // move right - ImGuiNavInput_KeyUp_, // move up - ImGuiNavInput_KeyDown_, // move down - ImGuiNavInput_COUNT, - ImGuiNavInput_InternalStart_ = ImGuiNavInput_KeyMenu_ -}; - -// Configuration flags stored in io.ConfigFlags. Set by user/application. -enum ImGuiConfigFlags_ -{ - ImGuiConfigFlags_None = 0, - ImGuiConfigFlags_NavEnableKeyboard = 1 << 0, // Master keyboard navigation enable flag. NewFrame() will automatically fill io.NavInputs[] based on io.KeysDown[]. - ImGuiConfigFlags_NavEnableGamepad = 1 << 1, // Master gamepad navigation enable flag. This is mostly to instruct your imgui back-end to fill io.NavInputs[]. Back-end also needs to set ImGuiBackendFlags_HasGamepad. - ImGuiConfigFlags_NavEnableSetMousePos = 1 << 2, // Instruct navigation to move the mouse cursor. May be useful on TV/console systems where moving a virtual mouse is awkward. Will update io.MousePos and set io.WantSetMousePos=true. If enabled you MUST honor io.WantSetMousePos requests in your binding, otherwise ImGui will react as if the mouse is jumping around back and forth. - ImGuiConfigFlags_NavNoCaptureKeyboard = 1 << 3, // Instruct navigation to not set the io.WantCaptureKeyboard flag when io.NavActive is set. - ImGuiConfigFlags_NoMouse = 1 << 4, // Instruct imgui to clear mouse position/buttons in NewFrame(). This allows ignoring the mouse information set by the back-end. - ImGuiConfigFlags_NoMouseCursorChange = 1 << 5, // Instruct back-end to not alter mouse cursor shape and visibility. Use if the back-end cursor changes are interfering with yours and you don't want to use SetMouseCursor() to change mouse cursor. You may want to honor requests from imgui by reading GetMouseCursor() yourself instead. - - // User storage (to allow your back-end/engine to communicate to code that may be shared between multiple projects. Those flags are not used by core Dear ImGui) - ImGuiConfigFlags_IsSRGB = 1 << 20, // Application is SRGB-aware. - ImGuiConfigFlags_IsTouchScreen = 1 << 21 // Application is using a touch screen instead of a mouse. -}; - -// Back-end capabilities flags stored in io.BackendFlags. Set by imgui_impl_xxx or custom back-end. -enum ImGuiBackendFlags_ -{ - ImGuiBackendFlags_None = 0, - ImGuiBackendFlags_HasGamepad = 1 << 0, // Back-end Platform supports gamepad and currently has one connected. - ImGuiBackendFlags_HasMouseCursors = 1 << 1, // Back-end Platform supports honoring GetMouseCursor() value to change the OS cursor shape. - ImGuiBackendFlags_HasSetMousePos = 1 << 2, // Back-end Platform supports io.WantSetMousePos requests to reposition the OS mouse position (only used if ImGuiConfigFlags_NavEnableSetMousePos is set). - ImGuiBackendFlags_RendererHasVtxOffset = 1 << 3 // Back-end Renderer supports ImDrawCmd::VtxOffset. This enables output of large meshes (64K+ vertices) while still using 16-bit indices. -}; - -// Enumeration for PushStyleColor() / PopStyleColor() -enum ImGuiCol_ -{ - ImGuiCol_Text, - ImGuiCol_TextDisabled, - ImGuiCol_WindowBg, // Background of normal windows - ImGuiCol_ChildBg, // Background of child windows - ImGuiCol_PopupBg, // Background of popups, menus, tooltips windows - ImGuiCol_Border, - ImGuiCol_BorderShadow, - ImGuiCol_FrameBg, // Background of checkbox, radio button, plot, slider, text input - ImGuiCol_FrameBgHovered, - ImGuiCol_FrameBgActive, - ImGuiCol_TitleBg, - ImGuiCol_TitleBgActive, - ImGuiCol_TitleBgCollapsed, - ImGuiCol_MenuBarBg, - ImGuiCol_ScrollbarBg, - ImGuiCol_ScrollbarGrab, - ImGuiCol_ScrollbarGrabHovered, - ImGuiCol_ScrollbarGrabActive, - ImGuiCol_CheckMark, - ImGuiCol_SliderGrab, - ImGuiCol_SliderGrabActive, - ImGuiCol_Button, - ImGuiCol_ButtonHovered, - ImGuiCol_ButtonActive, - ImGuiCol_Header, // Header* colors are used for CollapsingHeader, TreeNode, Selectable, MenuItem - ImGuiCol_HeaderHovered, - ImGuiCol_HeaderActive, - ImGuiCol_Separator, - ImGuiCol_SeparatorHovered, - ImGuiCol_SeparatorActive, - ImGuiCol_ResizeGrip, - ImGuiCol_ResizeGripHovered, - ImGuiCol_ResizeGripActive, - ImGuiCol_Tab, - ImGuiCol_TabHovered, - ImGuiCol_TabActive, - ImGuiCol_TabUnfocused, - ImGuiCol_TabUnfocusedActive, - ImGuiCol_PlotLines, - ImGuiCol_PlotLinesHovered, - ImGuiCol_PlotHistogram, - ImGuiCol_PlotHistogramHovered, - ImGuiCol_TextSelectedBg, - ImGuiCol_DragDropTarget, - ImGuiCol_NavHighlight, // Gamepad/keyboard: current highlighted item - ImGuiCol_NavWindowingHighlight, // Highlight window when using CTRL+TAB - ImGuiCol_NavWindowingDimBg, // Darken/colorize entire screen behind the CTRL+TAB window list, when active - ImGuiCol_ModalWindowDimBg, // Darken/colorize entire screen behind a modal window, when one is active - ImGuiCol_COUNT - - // Obsolete names (will be removed) -#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS - , ImGuiCol_ModalWindowDarkening = ImGuiCol_ModalWindowDimBg // [renamed in 1.63] - //, ImGuiCol_CloseButton, ImGuiCol_CloseButtonActive, ImGuiCol_CloseButtonHovered// [unused since 1.60+] the close button now uses regular button colors. -#endif -}; - -// Enumeration for PushStyleVar() / PopStyleVar() to temporarily modify the ImGuiStyle structure. -// - The enum only refers to fields of ImGuiStyle which makes sense to be pushed/popped inside UI code. -// During initialization or between frames, feel free to just poke into ImGuiStyle directly. -// - Tip: Use your programming IDE navigation facilities on the names in the _second column_ below to find the actual members and their description. -// In Visual Studio IDE: CTRL+comma ("Edit.NavigateTo") can follow symbols in comments, whereas CTRL+F12 ("Edit.GoToImplementation") cannot. -// With Visual Assist installed: ALT+G ("VAssistX.GoToImplementation") can also follow symbols in comments. -// - When changing this enum, you need to update the associated internal table GStyleVarInfo[] accordingly. This is where we link enum values to members offset/type. -enum ImGuiStyleVar_ -{ - // Enum name --------------------- // Member in ImGuiStyle structure (see ImGuiStyle for descriptions) - ImGuiStyleVar_Alpha, // float Alpha - ImGuiStyleVar_WindowPadding, // ImVec2 WindowPadding - ImGuiStyleVar_WindowRounding, // float WindowRounding - ImGuiStyleVar_WindowBorderSize, // float WindowBorderSize - ImGuiStyleVar_WindowMinSize, // ImVec2 WindowMinSize - ImGuiStyleVar_WindowTitleAlign, // ImVec2 WindowTitleAlign - ImGuiStyleVar_ChildRounding, // float ChildRounding - ImGuiStyleVar_ChildBorderSize, // float ChildBorderSize - ImGuiStyleVar_PopupRounding, // float PopupRounding - ImGuiStyleVar_PopupBorderSize, // float PopupBorderSize - ImGuiStyleVar_FramePadding, // ImVec2 FramePadding - ImGuiStyleVar_FrameRounding, // float FrameRounding - ImGuiStyleVar_FrameBorderSize, // float FrameBorderSize - ImGuiStyleVar_ItemSpacing, // ImVec2 ItemSpacing - ImGuiStyleVar_ItemInnerSpacing, // ImVec2 ItemInnerSpacing - ImGuiStyleVar_IndentSpacing, // float IndentSpacing - ImGuiStyleVar_ScrollbarSize, // float ScrollbarSize - ImGuiStyleVar_ScrollbarRounding, // float ScrollbarRounding - ImGuiStyleVar_GrabMinSize, // float GrabMinSize - ImGuiStyleVar_GrabRounding, // float GrabRounding - ImGuiStyleVar_TabRounding, // float TabRounding - ImGuiStyleVar_ButtonTextAlign, // ImVec2 ButtonTextAlign - ImGuiStyleVar_SelectableTextAlign, // ImVec2 SelectableTextAlign - ImGuiStyleVar_COUNT - - // Obsolete names (will be removed) -#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS - , ImGuiStyleVar_Count_ = ImGuiStyleVar_COUNT // [renamed in 1.60] -#endif -}; - -// Flags for ColorEdit3() / ColorEdit4() / ColorPicker3() / ColorPicker4() / ColorButton() -enum ImGuiColorEditFlags_ -{ - ImGuiColorEditFlags_None = 0, - ImGuiColorEditFlags_NoAlpha = 1 << 1, // // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (will only read 3 components from the input pointer). - ImGuiColorEditFlags_NoPicker = 1 << 2, // // ColorEdit: disable picker when clicking on colored square. - ImGuiColorEditFlags_NoOptions = 1 << 3, // // ColorEdit: disable toggling options menu when right-clicking on inputs/small preview. - ImGuiColorEditFlags_NoSmallPreview = 1 << 4, // // ColorEdit, ColorPicker: disable colored square preview next to the inputs. (e.g. to show only the inputs) - ImGuiColorEditFlags_NoInputs = 1 << 5, // // ColorEdit, ColorPicker: disable inputs sliders/text widgets (e.g. to show only the small preview colored square). - ImGuiColorEditFlags_NoTooltip = 1 << 6, // // ColorEdit, ColorPicker, ColorButton: disable tooltip when hovering the preview. - ImGuiColorEditFlags_NoLabel = 1 << 7, // // ColorEdit, ColorPicker: disable display of inline text label (the label is still forwarded to the tooltip and picker). - ImGuiColorEditFlags_NoSidePreview = 1 << 8, // // ColorPicker: disable bigger color preview on right side of the picker, use small colored square preview instead. - ImGuiColorEditFlags_NoDragDrop = 1 << 9, // // ColorEdit: disable drag and drop target. ColorButton: disable drag and drop source. - ImGuiColorEditFlags_NoBorder = 1 << 10, // // ColorButton: disable border (which is enforced by default) - - // User Options (right-click on widget to change some of them). - ImGuiColorEditFlags_AlphaBar = 1 << 16, // // ColorEdit, ColorPicker: show vertical alpha bar/gradient in picker. - ImGuiColorEditFlags_AlphaPreview = 1 << 17, // // ColorEdit, ColorPicker, ColorButton: display preview as a transparent color over a checkerboard, instead of opaque. - ImGuiColorEditFlags_AlphaPreviewHalf= 1 << 18, // // ColorEdit, ColorPicker, ColorButton: display half opaque / half checkerboard, instead of opaque. - ImGuiColorEditFlags_HDR = 1 << 19, // // (WIP) ColorEdit: Currently only disable 0.0f..1.0f limits in RGBA edition (note: you probably want to use ImGuiColorEditFlags_Float flag as well). - ImGuiColorEditFlags_DisplayRGB = 1 << 20, // [Display] // ColorEdit: override _display_ type among RGB/HSV/Hex. ColorPicker: select any combination using one or more of RGB/HSV/Hex. - ImGuiColorEditFlags_DisplayHSV = 1 << 21, // [Display] // " - ImGuiColorEditFlags_DisplayHex = 1 << 22, // [Display] // " - ImGuiColorEditFlags_Uint8 = 1 << 23, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0..255. - ImGuiColorEditFlags_Float = 1 << 24, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0.0f..1.0f floats instead of 0..255 integers. No round-trip of value via integers. - ImGuiColorEditFlags_PickerHueBar = 1 << 25, // [Picker] // ColorPicker: bar for Hue, rectangle for Sat/Value. - ImGuiColorEditFlags_PickerHueWheel = 1 << 26, // [Picker] // ColorPicker: wheel for Hue, triangle for Sat/Value. - ImGuiColorEditFlags_InputRGB = 1 << 27, // [Input] // ColorEdit, ColorPicker: input and output data in RGB format. - ImGuiColorEditFlags_InputHSV = 1 << 28, // [Input] // ColorEdit, ColorPicker: input and output data in HSV format. - - // Defaults Options. You can set application defaults using SetColorEditOptions(). The intent is that you probably don't want to - // override them in most of your calls. Let the user choose via the option menu and/or call SetColorEditOptions() once during startup. - ImGuiColorEditFlags__OptionsDefault = ImGuiColorEditFlags_Uint8|ImGuiColorEditFlags_DisplayRGB|ImGuiColorEditFlags_InputRGB|ImGuiColorEditFlags_PickerHueBar, - - // [Internal] Masks - ImGuiColorEditFlags__DisplayMask = ImGuiColorEditFlags_DisplayRGB|ImGuiColorEditFlags_DisplayHSV|ImGuiColorEditFlags_DisplayHex, - ImGuiColorEditFlags__DataTypeMask = ImGuiColorEditFlags_Uint8|ImGuiColorEditFlags_Float, - ImGuiColorEditFlags__PickerMask = ImGuiColorEditFlags_PickerHueWheel|ImGuiColorEditFlags_PickerHueBar, - ImGuiColorEditFlags__InputMask = ImGuiColorEditFlags_InputRGB|ImGuiColorEditFlags_InputHSV - - // Obsolete names (will be removed) -#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS - , ImGuiColorEditFlags_RGB = ImGuiColorEditFlags_DisplayRGB, ImGuiColorEditFlags_HSV = ImGuiColorEditFlags_DisplayHSV, ImGuiColorEditFlags_HEX = ImGuiColorEditFlags_DisplayHex // [renamed in 1.69] -#endif -}; - -// Identify a mouse button. -// Those values are guaranteed to be stable and we frequently use 0/1 directly. Named enums provided for convenience. -enum ImGuiMouseButton_ -{ - ImGuiMouseButton_Left = 0, - ImGuiMouseButton_Right = 1, - ImGuiMouseButton_Middle = 2, - ImGuiMouseButton_COUNT = 5 -}; - -// Enumeration for GetMouseCursor() -// User code may request binding to display given cursor by calling SetMouseCursor(), which is why we have some cursors that are marked unused here -enum ImGuiMouseCursor_ -{ - ImGuiMouseCursor_None = -1, - ImGuiMouseCursor_Arrow = 0, - ImGuiMouseCursor_TextInput, // When hovering over InputText, etc. - ImGuiMouseCursor_ResizeAll, // (Unused by Dear ImGui functions) - ImGuiMouseCursor_ResizeNS, // When hovering over an horizontal border - ImGuiMouseCursor_ResizeEW, // When hovering over a vertical border or a column - ImGuiMouseCursor_ResizeNESW, // When hovering over the bottom-left corner of a window - ImGuiMouseCursor_ResizeNWSE, // When hovering over the bottom-right corner of a window - ImGuiMouseCursor_Hand, // (Unused by Dear ImGui functions. Use for e.g. hyperlinks) - ImGuiMouseCursor_NotAllowed, // When hovering something with disallowed interaction. Usually a crossed circle. - ImGuiMouseCursor_COUNT - - // Obsolete names (will be removed) -#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS - , ImGuiMouseCursor_Count_ = ImGuiMouseCursor_COUNT // [renamed in 1.60] -#endif -}; - -// Enumeration for ImGui::SetWindow***(), SetNextWindow***(), SetNextItem***() functions -// Represent a condition. -// Important: Treat as a regular enum! Do NOT combine multiple values using binary operators! All the functions above treat 0 as a shortcut to ImGuiCond_Always. -enum ImGuiCond_ -{ - ImGuiCond_Always = 1 << 0, // Set the variable - ImGuiCond_Once = 1 << 1, // Set the variable once per runtime session (only the first call with succeed) - ImGuiCond_FirstUseEver = 1 << 2, // Set the variable if the object/window has no persistently saved data (no entry in .ini file) - ImGuiCond_Appearing = 1 << 3 // Set the variable if the object/window is appearing after being hidden/inactive (or the first time) -}; - -//----------------------------------------------------------------------------- -// Helpers: Memory allocations macros -// IM_MALLOC(), IM_FREE(), IM_NEW(), IM_PLACEMENT_NEW(), IM_DELETE() -// We call C++ constructor on own allocated memory via the placement "new(ptr) Type()" syntax. -// Defining a custom placement new() with a dummy parameter allows us to bypass including which on some platforms complains when user has disabled exceptions. -//----------------------------------------------------------------------------- - -struct ImNewDummy {}; -inline void* operator new(size_t, ImNewDummy, void* ptr) { return ptr; } -inline void operator delete(void*, ImNewDummy, void*) {} // This is only required so we can use the symmetrical new() -#define IM_ALLOC(_SIZE) ImGui::MemAlloc(_SIZE) -#define IM_FREE(_PTR) ImGui::MemFree(_PTR) -#define IM_PLACEMENT_NEW(_PTR) new(ImNewDummy(), _PTR) -#define IM_NEW(_TYPE) new(ImNewDummy(), ImGui::MemAlloc(sizeof(_TYPE))) _TYPE -template void IM_DELETE(T* p) { if (p) { p->~T(); ImGui::MemFree(p); } } - -//----------------------------------------------------------------------------- -// Helper: ImVector<> -// Lightweight std::vector<>-like class to avoid dragging dependencies (also, some implementations of STL with debug enabled are absurdly slow, we bypass it so our code runs fast in debug). -//----------------------------------------------------------------------------- -// - You generally do NOT need to care or use this ever. But we need to make it available in imgui.h because some of our public structures are relying on it. -// - We use std-like naming convention here, which is a little unusual for this codebase. -// - Important: clear() frees memory, resize(0) keep the allocated buffer. We use resize(0) a lot to intentionally recycle allocated buffers across frames and amortize our costs. -// - Important: our implementation does NOT call C++ constructors/destructors, we treat everything as raw data! This is intentional but be extra mindful of that, -// Do NOT use this class as a std::vector replacement in your own code! Many of the structures used by dear imgui can be safely initialized by a zero-memset. -//----------------------------------------------------------------------------- - -template -struct ImVector -{ - int Size; - int Capacity; - T* Data; - - // Provide standard typedefs but we don't use them ourselves. - typedef T value_type; - typedef value_type* iterator; - typedef const value_type* const_iterator; - - // Constructors, destructor - inline ImVector() { Size = Capacity = 0; Data = NULL; } - inline ImVector(const ImVector& src) { Size = Capacity = 0; Data = NULL; operator=(src); } - inline ImVector& operator=(const ImVector& src) { clear(); resize(src.Size); memcpy(Data, src.Data, (size_t)Size * sizeof(T)); return *this; } - inline ~ImVector() { if (Data) IM_FREE(Data); } - - inline bool empty() const { return Size == 0; } - inline int size() const { return Size; } - inline int size_in_bytes() const { return Size * (int)sizeof(T); } - inline int capacity() const { return Capacity; } - inline T& operator[](int i) { IM_ASSERT(i < Size); return Data[i]; } - inline const T& operator[](int i) const { IM_ASSERT(i < Size); return Data[i]; } - - inline void clear() { if (Data) { Size = Capacity = 0; IM_FREE(Data); Data = NULL; } } - inline T* begin() { return Data; } - inline const T* begin() const { return Data; } - inline T* end() { return Data + Size; } - inline const T* end() const { return Data + Size; } - inline T& front() { IM_ASSERT(Size > 0); return Data[0]; } - inline const T& front() const { IM_ASSERT(Size > 0); return Data[0]; } - inline T& back() { IM_ASSERT(Size > 0); return Data[Size - 1]; } - inline const T& back() const { IM_ASSERT(Size > 0); return Data[Size - 1]; } - inline void swap(ImVector& rhs) { int rhs_size = rhs.Size; rhs.Size = Size; Size = rhs_size; int rhs_cap = rhs.Capacity; rhs.Capacity = Capacity; Capacity = rhs_cap; T* rhs_data = rhs.Data; rhs.Data = Data; Data = rhs_data; } - - inline int _grow_capacity(int sz) const { int new_capacity = Capacity ? (Capacity + Capacity/2) : 8; return new_capacity > sz ? new_capacity : sz; } - inline void resize(int new_size) { if (new_size > Capacity) reserve(_grow_capacity(new_size)); Size = new_size; } - inline void resize(int new_size, const T& v) { if (new_size > Capacity) reserve(_grow_capacity(new_size)); if (new_size > Size) for (int n = Size; n < new_size; n++) memcpy(&Data[n], &v, sizeof(v)); Size = new_size; } - inline void shrink(int new_size) { IM_ASSERT(new_size <= Size); Size = new_size; } // Resize a vector to a smaller size, guaranteed not to cause a reallocation - inline void reserve(int new_capacity) { if (new_capacity <= Capacity) return; T* new_data = (T*)IM_ALLOC((size_t)new_capacity * sizeof(T)); if (Data) { memcpy(new_data, Data, (size_t)Size * sizeof(T)); IM_FREE(Data); } Data = new_data; Capacity = new_capacity; } - - // NB: It is illegal to call push_back/push_front/insert with a reference pointing inside the ImVector data itself! e.g. v.push_back(v[10]) is forbidden. - inline void push_back(const T& v) { if (Size == Capacity) reserve(_grow_capacity(Size + 1)); memcpy(&Data[Size], &v, sizeof(v)); Size++; } - inline void pop_back() { IM_ASSERT(Size > 0); Size--; } - inline void push_front(const T& v) { if (Size == 0) push_back(v); else insert(Data, v); } - inline T* erase(const T* it) { IM_ASSERT(it >= Data && it < Data+Size); const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + 1, ((size_t)Size - (size_t)off - 1) * sizeof(T)); Size--; return Data + off; } - inline T* erase(const T* it, const T* it_last){ IM_ASSERT(it >= Data && it < Data+Size && it_last > it && it_last <= Data+Size); const ptrdiff_t count = it_last - it; const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + count, ((size_t)Size - (size_t)off - count) * sizeof(T)); Size -= (int)count; return Data + off; } - inline T* erase_unsorted(const T* it) { IM_ASSERT(it >= Data && it < Data+Size); const ptrdiff_t off = it - Data; if (it < Data+Size-1) memcpy(Data + off, Data + Size - 1, sizeof(T)); Size--; return Data + off; } - inline T* insert(const T* it, const T& v) { IM_ASSERT(it >= Data && it <= Data+Size); const ptrdiff_t off = it - Data; if (Size == Capacity) reserve(_grow_capacity(Size + 1)); if (off < (int)Size) memmove(Data + off + 1, Data + off, ((size_t)Size - (size_t)off) * sizeof(T)); memcpy(&Data[off], &v, sizeof(v)); Size++; return Data + off; } - inline bool contains(const T& v) const { const T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data++ == v) return true; return false; } - inline T* find(const T& v) { T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data == v) break; else ++data; return data; } - inline const T* find(const T& v) const { const T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data == v) break; else ++data; return data; } - inline bool find_erase(const T& v) { const T* it = find(v); if (it < Data + Size) { erase(it); return true; } return false; } - inline bool find_erase_unsorted(const T& v) { const T* it = find(v); if (it < Data + Size) { erase_unsorted(it); return true; } return false; } - inline int index_from_ptr(const T* it) const { IM_ASSERT(it >= Data && it < Data + Size); const ptrdiff_t off = it - Data; return (int)off; } -}; - -//----------------------------------------------------------------------------- -// ImGuiStyle -// You may modify the ImGui::GetStyle() main instance during initialization and before NewFrame(). -// During the frame, use ImGui::PushStyleVar(ImGuiStyleVar_XXXX)/PopStyleVar() to alter the main style values, -// and ImGui::PushStyleColor(ImGuiCol_XXX)/PopStyleColor() for colors. -//----------------------------------------------------------------------------- - -struct ImGuiStyle -{ - float Alpha; // Global alpha applies to everything in Dear ImGui. - ImVec2 WindowPadding; // Padding within a window. - float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows. - float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly). - ImVec2 WindowMinSize; // Minimum window size. This is a global setting. If you want to constraint individual windows, use SetNextWindowSizeConstraints(). - ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. - ImGuiDir WindowMenuButtonPosition; // Side of the collapsing/docking button in the title bar (None/Left/Right). Defaults to ImGuiDir_Left. - float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. - float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly). - float PopupRounding; // Radius of popup window corners rounding. (Note that tooltip windows use WindowRounding) - float PopupBorderSize; // Thickness of border around popup/tooltip windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly). - ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets). - float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). - float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly). - ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines. - ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label). - ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! - float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). - float ColumnsMinSpacing; // Minimum horizontal spacing between two columns. Preferably > (FramePadding.x + 1). - float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar. - float ScrollbarRounding; // Radius of grab corners for scrollbar. - float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. - float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. - float TabRounding; // Radius of upper corners of a tab. Set to 0.0f to have rectangular tabs. - float TabBorderSize; // Thickness of border around tabs. - ImGuiDir ColorButtonPosition; // Side of the color button in the ColorEdit4 widget (left/right). Defaults to ImGuiDir_Right. - ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f, 0.5f) (centered). - ImVec2 SelectableTextAlign; // Alignment of selectable text. Defaults to (0.0f, 0.0f) (top-left aligned). It's generally important to keep this left-aligned if you want to lay multiple items on a same line. - ImVec2 DisplayWindowPadding; // Window position are clamped to be visible within the display area by at least this amount. Only applies to regular windows. - ImVec2 DisplaySafeAreaPadding; // If you cannot see the edges of your screen (e.g. on a TV) increase the safe area padding. Apply to popups/tooltips as well regular windows. NB: Prefer configuring your TV sets correctly! - float MouseCursorScale; // Scale software rendered mouse cursor (when io.MouseDrawCursor is enabled). May be removed later. - bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. - bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) - float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. - float CircleSegmentMaxError; // Maximum error (in pixels) allowed when using AddCircle()/AddCircleFilled() or drawing rounded corner rectangles with no explicit segment count specified. Decrease for higher quality but more geometry. - ImVec4 Colors[ImGuiCol_COUNT]; - - IMGUI_API ImGuiStyle(); - IMGUI_API void ScaleAllSizes(float scale_factor); -}; - -//----------------------------------------------------------------------------- -// ImGuiIO -// Communicate most settings and inputs/outputs to Dear ImGui using this structure. -// Access via ImGui::GetIO(). Read 'Programmer guide' section in .cpp file for general usage. -//----------------------------------------------------------------------------- - -struct ImGuiIO -{ - //------------------------------------------------------------------ - // Configuration (fill once) // Default value - //------------------------------------------------------------------ - - ImGuiConfigFlags ConfigFlags; // = 0 // See ImGuiConfigFlags_ enum. Set by user/application. Gamepad/keyboard navigation options, etc. - ImGuiBackendFlags BackendFlags; // = 0 // See ImGuiBackendFlags_ enum. Set by back-end (imgui_impl_xxx files or custom back-end) to communicate features supported by the back-end. - ImVec2 DisplaySize; // // Main display size, in pixels. - float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. - float IniSavingRate; // = 5.0f // Minimum time between saving positions/sizes to .ini file, in seconds. - const char* IniFilename; // = "imgui.ini" // Path to .ini file. Set NULL to disable automatic .ini loading/saving, if e.g. you want to manually load/save from memory. - const char* LogFilename; // = "imgui_log.txt"// Path to .log file (default parameter to ImGui::LogToFile when no file is specified). - float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. - float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. - float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging. - int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array which represent your "native" keyboard state. - float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). - float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. - void* UserData; // = NULL // Store your own data for retrieval by callbacks. - - ImFontAtlas*Fonts; // // Font atlas: load, rasterize and pack one or more fonts into a single texture. - float FontGlobalScale; // = 1.0f // Global scale all fonts - bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. - ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. - ImVec2 DisplayFramebufferScale; // = (1, 1) // For retina display or other situations where window coordinates are different from framebuffer coordinates. This generally ends up in ImDrawData::FramebufferScale. - - // Miscellaneous options - bool MouseDrawCursor; // = false // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). Cannot be easily renamed to 'io.ConfigXXX' because this is frequently used by back-end implementations. - bool ConfigMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl (was called io.OptMacOSXBehaviors prior to 1.63) - bool ConfigInputTextCursorBlink; // = true // Set to false to disable blinking cursor, for users who consider it distracting. (was called: io.OptCursorBlink prior to 1.63) - bool ConfigWindowsResizeFromEdges; // = true // Enable resizing of windows from their edges and from the lower-left corner. This requires (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors) because it needs mouse cursor feedback. (This used to be a per-window ImGuiWindowFlags_ResizeFromAnySide flag) - bool ConfigWindowsMoveFromTitleBarOnly; // = false // [BETA] Set to true to only allow moving windows when clicked+dragged from the title bar. Windows without a title bar are not affected. - float ConfigWindowsMemoryCompactTimer;// = 60.0f // [BETA] Compact window memory usage when unused. Set to -1.0f to disable. - - //------------------------------------------------------------------ - // Platform Functions - // (the imgui_impl_xxxx back-end files are setting those up for you) - //------------------------------------------------------------------ - - // Optional: Platform/Renderer back-end name (informational only! will be displayed in About Window) + User data for back-end/wrappers to store their own stuff. - const char* BackendPlatformName; // = NULL - const char* BackendRendererName; // = NULL - void* BackendPlatformUserData; // = NULL // User data for platform back-end - void* BackendRendererUserData; // = NULL // User data for renderer back-end - void* BackendLanguageUserData; // = NULL // User data for non C++ programming language back-end - - // Optional: Access OS clipboard - // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) - const char* (*GetClipboardTextFn)(void* user_data); - void (*SetClipboardTextFn)(void* user_data, const char* text); - void* ClipboardUserData; - - // Optional: Notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME on Windows) - // (default to use native imm32 api on Windows) - void (*ImeSetInputScreenPosFn)(int x, int y); - void* ImeWindowHandle; // = NULL // (Windows) Set this to your HWND to get automatic IME cursor positioning. - -#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS - // [OBSOLETE since 1.60+] Rendering function, will be automatically called in Render(). Please call your rendering function yourself now! - // You can obtain the ImDrawData* by calling ImGui::GetDrawData() after Render(). See example applications if you are unsure of how to implement this. - void (*RenderDrawListsFn)(ImDrawData* data); -#else - // This is only here to keep ImGuiIO the same size/layout, so that IMGUI_DISABLE_OBSOLETE_FUNCTIONS can exceptionally be used outside of imconfig.h. - void* RenderDrawListsFnUnused; -#endif - - //------------------------------------------------------------------ - // Input - Fill before calling NewFrame() - //------------------------------------------------------------------ - - ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) - bool MouseDown[5]; // Mouse buttons: 0=left, 1=right, 2=middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. - float MouseWheel; // Mouse wheel Vertical: 1 unit scrolls about 5 lines text. - float MouseWheelH; // Mouse wheel Horizontal. Most users don't have a mouse with an horizontal wheel, may not be filled by all back-ends. - bool KeyCtrl; // Keyboard modifier pressed: Control - bool KeyShift; // Keyboard modifier pressed: Shift - bool KeyAlt; // Keyboard modifier pressed: Alt - bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows - bool KeysDown[512]; // Keyboard keys that are pressed (ideally left in the "native" order your engine has access to keyboard keys, so you can use your own defines/enums for keys). - float NavInputs[ImGuiNavInput_COUNT]; // Gamepad inputs. Cleared back to zero by EndFrame(). Keyboard keys will be auto-mapped and be written here by NewFrame(). - - // Functions - IMGUI_API void AddInputCharacter(unsigned int c); // Queue new character input - IMGUI_API void AddInputCharacterUTF16(ImWchar16 c); // Queue new character input from an UTF-16 character, it can be a surrogate - IMGUI_API void AddInputCharactersUTF8(const char* str); // Queue new characters input from an UTF-8 string - IMGUI_API void ClearInputCharacters(); // Clear the text input buffer manually - - //------------------------------------------------------------------ - // Output - Retrieve after calling NewFrame() - //------------------------------------------------------------------ - - bool WantCaptureMouse; // When io.WantCaptureMouse is true, imgui will use the mouse inputs, do not dispatch them to your main game/application (in both cases, always pass on mouse inputs to imgui). (e.g. unclicked mouse is hovering over an imgui window, widget is active, mouse was clicked over an imgui window, etc.). - bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, imgui will use the keyboard inputs, do not dispatch them to your main game/application (in both cases, always pass keyboard inputs to imgui). (e.g. InputText active, or an imgui window is focused and navigation is enabled, etc.). - bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). - bool WantSetMousePos; // MousePos has been altered, back-end should reposition mouse on next frame. Set only when ImGuiConfigFlags_NavEnableSetMousePos flag is enabled. - bool WantSaveIniSettings; // When manual .ini load/save is active (io.IniFilename == NULL), this will be set to notify your application that you can call SaveIniSettingsToMemory() and save yourself. IMPORTANT: You need to clear io.WantSaveIniSettings yourself. - bool NavActive; // Directional navigation is currently allowed (will handle ImGuiKey_NavXXX events) = a window is focused and it doesn't use the ImGuiWindowFlags_NoNavInputs flag. - bool NavVisible; // Directional navigation is visible and allowed (will handle ImGuiKey_NavXXX events). - float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames - int MetricsRenderVertices; // Vertices output during last call to Render() - int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 - int MetricsRenderWindows; // Number of visible windows - int MetricsActiveWindows; // Number of active windows - int MetricsActiveAllocations; // Number of active allocations, updated by MemAlloc/MemFree based on current context. May be off if you have multiple imgui contexts. - ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. - - //------------------------------------------------------------------ - // [Internal] Dear ImGui will maintain those fields. Forward compatibility not guaranteed! - //------------------------------------------------------------------ - - ImGuiKeyModFlags KeyMods; // Key mods flags (same as io.KeyCtrl/KeyShift/KeyAlt/KeySuper but merged into flags), updated by NewFrame() - ImVec2 MousePosPrev; // Previous mouse position (note that MouseDelta is not necessary == MousePos-MousePosPrev, in case either position is invalid) - ImVec2 MouseClickedPos[5]; // Position at time of clicking - double MouseClickedTime[5]; // Time of last click (used to figure out double-click) - bool MouseClicked[5]; // Mouse button went from !Down to Down - bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? - bool MouseReleased[5]; // Mouse button went from Down to !Down - bool MouseDownOwned[5]; // Track if button was clicked inside a dear imgui window. We don't request mouse capture from the application if click started outside ImGui bounds. - bool MouseDownWasDoubleClick[5]; // Track if button down was a double-click - float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) - float MouseDownDurationPrev[5]; // Previous time the mouse button has been down - ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point - float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point - float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) - float KeysDownDurationPrev[512]; // Previous duration the key has been down - float NavInputsDownDuration[ImGuiNavInput_COUNT]; - float NavInputsDownDurationPrev[ImGuiNavInput_COUNT]; - ImWchar16 InputQueueSurrogate; // For AddInputCharacterUTF16 - ImVector InputQueueCharacters; // Queue of _characters_ input (obtained by platform back-end). Fill using AddInputCharacter() helper. - - IMGUI_API ImGuiIO(); -}; - -//----------------------------------------------------------------------------- -// Misc data structures -//----------------------------------------------------------------------------- - -// Shared state of InputText(), passed as an argument to your callback when a ImGuiInputTextFlags_Callback* flag is used. -// The callback function should return 0 by default. -// Callbacks (follow a flag name and see comments in ImGuiInputTextFlags_ declarations for more details) -// - ImGuiInputTextFlags_CallbackCompletion: Callback on pressing TAB -// - ImGuiInputTextFlags_CallbackHistory: Callback on pressing Up/Down arrows -// - ImGuiInputTextFlags_CallbackAlways: Callback on each iteration -// - ImGuiInputTextFlags_CallbackCharFilter: Callback on character inputs to replace or discard them. Modify 'EventChar' to replace or discard, or return 1 in callback to discard. -// - ImGuiInputTextFlags_CallbackResize: Callback on buffer capacity changes request (beyond 'buf_size' parameter value), allowing the string to grow. -struct ImGuiInputTextCallbackData -{ - ImGuiInputTextFlags EventFlag; // One ImGuiInputTextFlags_Callback* // Read-only - ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only - void* UserData; // What user passed to InputText() // Read-only - - // Arguments for the different callback events - // - To modify the text buffer in a callback, prefer using the InsertChars() / DeleteChars() function. InsertChars() will take care of calling the resize callback if necessary. - // - If you know your edits are not going to resize the underlying buffer allocation, you may modify the contents of 'Buf[]' directly. You need to update 'BufTextLen' accordingly (0 <= BufTextLen < BufSize) and set 'BufDirty'' to true so InputText can update its internal state. - ImWchar EventChar; // Character input // Read-write // [CharFilter] Replace character with another one, or set to zero to drop. return 1 is equivalent to setting EventChar=0; - ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only // [Completion,History] - char* Buf; // Text buffer // Read-write // [Resize] Can replace pointer / [Completion,History,Always] Only write to pointed data, don't replace the actual pointer! - int BufTextLen; // Text length (in bytes) // Read-write // [Resize,Completion,History,Always] Exclude zero-terminator storage. In C land: == strlen(some_text), in C++ land: string.length() - int BufSize; // Buffer size (in bytes) = capacity+1 // Read-only // [Resize,Completion,History,Always] Include zero-terminator storage. In C land == ARRAYSIZE(my_char_array), in C++ land: string.capacity()+1 - bool BufDirty; // Set if you modify Buf/BufTextLen! // Write // [Completion,History,Always] - int CursorPos; // // Read-write // [Completion,History,Always] - int SelectionStart; // // Read-write // [Completion,History,Always] == to SelectionEnd when no selection) - int SelectionEnd; // // Read-write // [Completion,History,Always] - - // Helper functions for text manipulation. - // Use those function to benefit from the CallbackResize behaviors. Calling those function reset the selection. - IMGUI_API ImGuiInputTextCallbackData(); - IMGUI_API void DeleteChars(int pos, int bytes_count); - IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); - bool HasSelection() const { return SelectionStart != SelectionEnd; } -}; - -// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). -// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. -struct ImGuiSizeCallbackData -{ - void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() - ImVec2 Pos; // Read-only. Window position, for reference. - ImVec2 CurrentSize; // Read-only. Current window size. - ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. -}; - -// Data payload for Drag and Drop operations: AcceptDragDropPayload(), GetDragDropPayload() -struct ImGuiPayload -{ - // Members - void* Data; // Data (copied and owned by dear imgui) - int DataSize; // Data size - - // [Internal] - ImGuiID SourceId; // Source item id - ImGuiID SourceParentId; // Source parent id (if available) - int DataFrameCount; // Data timestamp - char DataType[32+1]; // Data type tag (short user-supplied string, 32 characters max) - bool Preview; // Set when AcceptDragDropPayload() was called and mouse has been hovering the target item (nb: handle overlapping drag targets) - bool Delivery; // Set when AcceptDragDropPayload() was called and mouse button is released over the target item. - - ImGuiPayload() { Clear(); } - void Clear() { SourceId = SourceParentId = 0; Data = NULL; DataSize = 0; memset(DataType, 0, sizeof(DataType)); DataFrameCount = -1; Preview = Delivery = false; } - bool IsDataType(const char* type) const { return DataFrameCount != -1 && strcmp(type, DataType) == 0; } - bool IsPreview() const { return Preview; } - bool IsDelivery() const { return Delivery; } -}; - -//----------------------------------------------------------------------------- -// Obsolete functions (Will be removed! Read 'API BREAKING CHANGES' section in imgui.cpp for details) -// Please keep your copy of dear imgui up to date! Occasionally set '#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS' in imconfig.h to stay ahead. -//----------------------------------------------------------------------------- - -#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS -namespace ImGui -{ - // OBSOLETED in 1.72 (from July 2019) - static inline void TreeAdvanceToLabelPos() { SetCursorPosX(GetCursorPosX() + GetTreeNodeToLabelSpacing()); } - // OBSOLETED in 1.71 (from June 2019) - static inline void SetNextTreeNodeOpen(bool open, ImGuiCond cond = 0) { SetNextItemOpen(open, cond); } - // OBSOLETED in 1.70 (from May 2019) - static inline float GetContentRegionAvailWidth() { return GetContentRegionAvail().x; } - // OBSOLETED in 1.69 (from Mar 2019) - static inline ImDrawList* GetOverlayDrawList() { return GetForegroundDrawList(); } - // OBSOLETED in 1.66 (from Sep 2018) - static inline void SetScrollHere(float center_ratio=0.5f){ SetScrollHereY(center_ratio); } - // OBSOLETED in 1.63 (between Aug 2018 and Sept 2018) - static inline bool IsItemDeactivatedAfterChange() { return IsItemDeactivatedAfterEdit(); } - // OBSOLETED in 1.61 (between Apr 2018 and Aug 2018) - IMGUI_API bool InputFloat(const char* label, float* v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags flags = 0); // Use the 'const char* format' version instead of 'decimal_precision'! - IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision, ImGuiInputTextFlags flags = 0); - IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision, ImGuiInputTextFlags flags = 0); - IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision, ImGuiInputTextFlags flags = 0); - // OBSOLETED in 1.60 (between Dec 2017 and Apr 2018) - static inline bool IsAnyWindowFocused() { return IsWindowFocused(ImGuiFocusedFlags_AnyWindow); } - static inline bool IsAnyWindowHovered() { return IsWindowHovered(ImGuiHoveredFlags_AnyWindow); } - static inline ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = 0.f) { IM_UNUSED(on_edge); IM_UNUSED(outward); IM_ASSERT(0); return pos; } -} -typedef ImGuiInputTextCallback ImGuiTextEditCallback; // OBSOLETED in 1.63 (from Aug 2018): made the names consistent -typedef ImGuiInputTextCallbackData ImGuiTextEditCallbackData; -#endif - -//----------------------------------------------------------------------------- -// Helpers -//----------------------------------------------------------------------------- - -// Helper: Unicode defines -#define IM_UNICODE_CODEPOINT_INVALID 0xFFFD // Invalid Unicode code point (standard value). -#ifdef IMGUI_USE_WCHAR32 -#define IM_UNICODE_CODEPOINT_MAX 0x10FFFF // Maximum Unicode code point supported by this build. -#else -#define IM_UNICODE_CODEPOINT_MAX 0xFFFF // Maximum Unicode code point supported by this build. -#endif - -// Helper: Execute a block of code at maximum once a frame. Convenient if you want to quickly create an UI within deep-nested code that runs multiple times every frame. -// Usage: static ImGuiOnceUponAFrame oaf; if (oaf) ImGui::Text("This will be called only once per frame"); -struct ImGuiOnceUponAFrame -{ - ImGuiOnceUponAFrame() { RefFrame = -1; } - mutable int RefFrame; - operator bool() const { int current_frame = ImGui::GetFrameCount(); if (RefFrame == current_frame) return false; RefFrame = current_frame; return true; } -}; - -// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]" -struct ImGuiTextFilter -{ - IMGUI_API ImGuiTextFilter(const char* default_filter = ""); - IMGUI_API bool Draw(const char* label = "Filter (inc,-exc)", float width = 0.0f); // Helper calling InputText+Build - IMGUI_API bool PassFilter(const char* text, const char* text_end = NULL) const; - IMGUI_API void Build(); - void Clear() { InputBuf[0] = 0; Build(); } - bool IsActive() const { return !Filters.empty(); } - - // [Internal] - struct ImGuiTextRange - { - const char* b; - const char* e; - - ImGuiTextRange() { b = e = NULL; } - ImGuiTextRange(const char* _b, const char* _e) { b = _b; e = _e; } - bool empty() const { return b == e; } - IMGUI_API void split(char separator, ImVector* out) const; - }; - char InputBuf[256]; - ImVectorFilters; - int CountGrep; -}; - -// Helper: Growable text buffer for logging/accumulating text -// (this could be called 'ImGuiTextBuilder' / 'ImGuiStringBuilder') -struct ImGuiTextBuffer -{ - ImVector Buf; - IMGUI_API static char EmptyString[1]; - - ImGuiTextBuffer() { } - inline char operator[](int i) const { IM_ASSERT(Buf.Data != NULL); return Buf.Data[i]; } - const char* begin() const { return Buf.Data ? &Buf.front() : EmptyString; } - const char* end() const { return Buf.Data ? &Buf.back() : EmptyString; } // Buf is zero-terminated, so end() will point on the zero-terminator - int size() const { return Buf.Size ? Buf.Size - 1 : 0; } - bool empty() const { return Buf.Size <= 1; } - void clear() { Buf.clear(); } - void reserve(int capacity) { Buf.reserve(capacity); } - const char* c_str() const { return Buf.Data ? Buf.Data : EmptyString; } - IMGUI_API void append(const char* str, const char* str_end = NULL); - IMGUI_API void appendf(const char* fmt, ...) IM_FMTARGS(2); - IMGUI_API void appendfv(const char* fmt, va_list args) IM_FMTLIST(2); -}; - -// Helper: Key->Value storage -// Typically you don't have to worry about this since a storage is held within each Window. -// We use it to e.g. store collapse state for a tree (Int 0/1) -// This is optimized for efficient lookup (dichotomy into a contiguous buffer) and rare insertion (typically tied to user interactions aka max once a frame) -// You can use it as custom user storage for temporary values. Declare your own storage if, for example: -// - You want to manipulate the open/close state of a particular sub-tree in your interface (tree node uses Int 0/1 to store their state). -// - You want to store custom debug data easily without adding or editing structures in your code (probably not efficient, but convenient) -// Types are NOT stored, so it is up to you to make sure your Key don't collide with different types. -struct ImGuiStorage -{ - // [Internal] - struct ImGuiStoragePair - { - ImGuiID key; - union { int val_i; float val_f; void* val_p; }; - ImGuiStoragePair(ImGuiID _key, int _val_i) { key = _key; val_i = _val_i; } - ImGuiStoragePair(ImGuiID _key, float _val_f) { key = _key; val_f = _val_f; } - ImGuiStoragePair(ImGuiID _key, void* _val_p) { key = _key; val_p = _val_p; } - }; - - ImVector Data; - - // - Get***() functions find pair, never add/allocate. Pairs are sorted so a query is O(log N) - // - Set***() functions find pair, insertion on demand if missing. - // - Sorted insertion is costly, paid once. A typical frame shouldn't need to insert any new pair. - void Clear() { Data.clear(); } - IMGUI_API int GetInt(ImGuiID key, int default_val = 0) const; - IMGUI_API void SetInt(ImGuiID key, int val); - IMGUI_API bool GetBool(ImGuiID key, bool default_val = false) const; - IMGUI_API void SetBool(ImGuiID key, bool val); - IMGUI_API float GetFloat(ImGuiID key, float default_val = 0.0f) const; - IMGUI_API void SetFloat(ImGuiID key, float val); - IMGUI_API void* GetVoidPtr(ImGuiID key) const; // default_val is NULL - IMGUI_API void SetVoidPtr(ImGuiID key, void* val); - - // - Get***Ref() functions finds pair, insert on demand if missing, return pointer. Useful if you intend to do Get+Set. - // - References are only valid until a new value is added to the storage. Calling a Set***() function or a Get***Ref() function invalidates the pointer. - // - A typical use case where this is convenient for quick hacking (e.g. add storage during a live Edit&Continue session if you can't modify existing struct) - // float* pvar = ImGui::GetFloatRef(key); ImGui::SliderFloat("var", pvar, 0, 100.0f); some_var += *pvar; - IMGUI_API int* GetIntRef(ImGuiID key, int default_val = 0); - IMGUI_API bool* GetBoolRef(ImGuiID key, bool default_val = false); - IMGUI_API float* GetFloatRef(ImGuiID key, float default_val = 0.0f); - IMGUI_API void** GetVoidPtrRef(ImGuiID key, void* default_val = NULL); - - // Use on your own storage if you know only integer are being stored (open/close all tree nodes) - IMGUI_API void SetAllInt(int val); - - // For quicker full rebuild of a storage (instead of an incremental one), you may add all your contents and then sort once. - IMGUI_API void BuildSortByKey(); -}; - -// Helper: Manually clip large list of items. -// If you are submitting lots of evenly spaced items and you have a random access to the list, you can perform coarse clipping based on visibility to save yourself from processing those items at all. -// The clipper calculates the range of visible items and advance the cursor to compensate for the non-visible items we have skipped. -// ImGui already clip items based on their bounds but it needs to measure text size to do so. Coarse clipping before submission makes this cost and your own data fetching/submission cost null. -// Usage: -// ImGuiListClipper clipper(1000); // we have 1000 elements, evenly spaced. -// while (clipper.Step()) -// for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) -// ImGui::Text("line number %d", i); -// - Step 0: the clipper let you process the first element, regardless of it being visible or not, so we can measure the element height (step skipped if we passed a known height as second arg to constructor). -// - Step 1: the clipper infer height from first element, calculate the actual range of elements to display, and position the cursor before the first element. -// - (Step 2: dummy step only required if an explicit items_height was passed to constructor or Begin() and user call Step(). Does nothing and switch to Step 3.) -// - Step 3: the clipper validate that we have reached the expected Y position (corresponding to element DisplayEnd), advance the cursor to the end of the list and then returns 'false' to end the loop. -struct ImGuiListClipper -{ - int DisplayStart, DisplayEnd; - int ItemsCount; - - // [Internal] - int StepNo; - float ItemsHeight; - float StartPosY; - - // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). - // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). - // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). - ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). - ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. - - IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. - IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. - IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. -}; - -// Helpers macros to generate 32-bit encoded colors -#ifdef IMGUI_USE_BGRA_PACKED_COLOR -#define IM_COL32_R_SHIFT 16 -#define IM_COL32_G_SHIFT 8 -#define IM_COL32_B_SHIFT 0 -#define IM_COL32_A_SHIFT 24 -#define IM_COL32_A_MASK 0xFF000000 -#else -#define IM_COL32_R_SHIFT 0 -#define IM_COL32_G_SHIFT 8 -#define IM_COL32_B_SHIFT 16 -#define IM_COL32_A_SHIFT 24 -#define IM_COL32_A_MASK 0xFF000000 -#endif -#define IM_COL32(R,G,B,A) (((ImU32)(A)<>IM_COL32_R_SHIFT)&0xFF) * sc; Value.y = (float)((rgba>>IM_COL32_G_SHIFT)&0xFF) * sc; Value.z = (float)((rgba>>IM_COL32_B_SHIFT)&0xFF) * sc; Value.w = (float)((rgba>>IM_COL32_A_SHIFT)&0xFF) * sc; } - ImColor(float r, float g, float b, float a = 1.0f) { Value.x = r; Value.y = g; Value.z = b; Value.w = a; } - ImColor(const ImVec4& col) { Value = col; } - inline operator ImU32() const { return ImGui::ColorConvertFloat4ToU32(Value); } - inline operator ImVec4() const { return Value; } - - // FIXME-OBSOLETE: May need to obsolete/cleanup those helpers. - inline void SetHSV(float h, float s, float v, float a = 1.0f){ ImGui::ColorConvertHSVtoRGB(h, s, v, Value.x, Value.y, Value.z); Value.w = a; } - static ImColor HSV(float h, float s, float v, float a = 1.0f) { float r,g,b; ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); return ImColor(r,g,b,a); } -}; - -//----------------------------------------------------------------------------- -// Draw List API (ImDrawCmd, ImDrawIdx, ImDrawVert, ImDrawChannel, ImDrawListSplitter, ImDrawListFlags, ImDrawList, ImDrawData) -// Hold a series of drawing commands. The user provides a renderer for ImDrawData which essentially contains an array of ImDrawList. -//----------------------------------------------------------------------------- - -// ImDrawCallback: Draw callbacks for advanced uses [configurable type: override in imconfig.h] -// NB: You most likely do NOT need to use draw callbacks just to create your own widget or customized UI rendering, -// you can poke into the draw list for that! Draw callback may be useful for example to: -// A) Change your GPU render state, -// B) render a complex 3D scene inside a UI element without an intermediate texture/render target, etc. -// The expected behavior from your rendering function is 'if (cmd.UserCallback != NULL) { cmd.UserCallback(parent_list, cmd); } else { RenderTriangles() }' -// If you want to override the signature of ImDrawCallback, you can simply use e.g. '#define ImDrawCallback MyDrawCallback' (in imconfig.h) + update rendering back-end accordingly. -#ifndef ImDrawCallback -typedef void (*ImDrawCallback)(const ImDrawList* parent_list, const ImDrawCmd* cmd); -#endif - -// Special Draw callback value to request renderer back-end to reset the graphics/render state. -// The renderer back-end needs to handle this special value, otherwise it will crash trying to call a function at this address. -// This is useful for example if you submitted callbacks which you know have altered the render state and you want it to be restored. -// It is not done by default because they are many perfectly useful way of altering render state for imgui contents (e.g. changing shader/blending settings before an Image call). -#define ImDrawCallback_ResetRenderState (ImDrawCallback)(-1) - -// Typically, 1 command = 1 GPU draw call (unless command is a callback) -// Pre 1.71 back-ends will typically ignore the VtxOffset/IdxOffset fields. When 'io.BackendFlags & ImGuiBackendFlags_RendererHasVtxOffset' -// is enabled, those fields allow us to render meshes larger than 64K vertices while keeping 16-bit indices. -struct ImDrawCmd -{ - unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. - ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2). Subtract ImDrawData->DisplayPos to get clipping rectangle in "viewport" coordinates - ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. - unsigned int VtxOffset; // Start offset in vertex buffer. Pre-1.71 or without ImGuiBackendFlags_RendererHasVtxOffset: always 0. With ImGuiBackendFlags_RendererHasVtxOffset: may be >0 to support meshes larger than 64K vertices with 16-bit indices. - unsigned int IdxOffset; // Start offset in index buffer. Always equal to sum of ElemCount drawn so far. - ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. - void* UserCallbackData; // The draw callback code can access this. - - ImDrawCmd() { ElemCount = 0; TextureId = (ImTextureID)NULL; VtxOffset = IdxOffset = 0; UserCallback = NULL; UserCallbackData = NULL; } -}; - -// Vertex index, default to 16-bit -// To allow large meshes with 16-bit indices: set 'io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset' and handle ImDrawCmd::VtxOffset in the renderer back-end (recommended). -// To use 32-bit indices: override with '#define ImDrawIdx unsigned int' in imconfig.h. -#ifndef ImDrawIdx -typedef unsigned short ImDrawIdx; -#endif - -// Vertex layout -#ifndef IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT -struct ImDrawVert -{ - ImVec2 pos; - ImVec2 uv; - ImU32 col; -}; -#else -// You can override the vertex format layout by defining IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT in imconfig.h -// The code expect ImVec2 pos (8 bytes), ImVec2 uv (8 bytes), ImU32 col (4 bytes), but you can re-order them or add other fields as needed to simplify integration in your engine. -// The type has to be described within the macro (you can either declare the struct or use a typedef). This is because ImVec2/ImU32 are likely not declared a the time you'd want to set your type up. -// NOTE: IMGUI DOESN'T CLEAR THE STRUCTURE AND DOESN'T CALL A CONSTRUCTOR SO ANY CUSTOM FIELD WILL BE UNINITIALIZED. IF YOU ADD EXTRA FIELDS (SUCH AS A 'Z' COORDINATES) YOU WILL NEED TO CLEAR THEM DURING RENDER OR TO IGNORE THEM. -IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT; -#endif - -// For use by ImDrawListSplitter. -struct ImDrawChannel -{ - ImVector _CmdBuffer; - ImVector _IdxBuffer; -}; - -// Split/Merge functions are used to split the draw list into different layers which can be drawn into out of order. -// This is used by the Columns api, so items of each column can be batched together in a same draw call. -struct ImDrawListSplitter -{ - int _Current; // Current channel number (0) - int _Count; // Number of active channels (1+) - ImVector _Channels; // Draw channels (not resized down so _Count might be < Channels.Size) - - inline ImDrawListSplitter() { Clear(); } - inline ~ImDrawListSplitter() { ClearFreeMemory(); } - inline void Clear() { _Current = 0; _Count = 1; } // Do not clear Channels[] so our allocations are reused next frame - IMGUI_API void ClearFreeMemory(); - IMGUI_API void Split(ImDrawList* draw_list, int count); - IMGUI_API void Merge(ImDrawList* draw_list); - IMGUI_API void SetCurrentChannel(ImDrawList* draw_list, int channel_idx); -}; - -enum ImDrawCornerFlags_ -{ - ImDrawCornerFlags_None = 0, - ImDrawCornerFlags_TopLeft = 1 << 0, // 0x1 - ImDrawCornerFlags_TopRight = 1 << 1, // 0x2 - ImDrawCornerFlags_BotLeft = 1 << 2, // 0x4 - ImDrawCornerFlags_BotRight = 1 << 3, // 0x8 - ImDrawCornerFlags_Top = ImDrawCornerFlags_TopLeft | ImDrawCornerFlags_TopRight, // 0x3 - ImDrawCornerFlags_Bot = ImDrawCornerFlags_BotLeft | ImDrawCornerFlags_BotRight, // 0xC - ImDrawCornerFlags_Left = ImDrawCornerFlags_TopLeft | ImDrawCornerFlags_BotLeft, // 0x5 - ImDrawCornerFlags_Right = ImDrawCornerFlags_TopRight | ImDrawCornerFlags_BotRight, // 0xA - ImDrawCornerFlags_All = 0xF // In your function calls you may use ~0 (= all bits sets) instead of ImDrawCornerFlags_All, as a convenience -}; - -enum ImDrawListFlags_ -{ - ImDrawListFlags_None = 0, - ImDrawListFlags_AntiAliasedLines = 1 << 0, // Lines are anti-aliased (*2 the number of triangles for 1.0f wide line, otherwise *3 the number of triangles) - ImDrawListFlags_AntiAliasedFill = 1 << 1, // Filled shapes have anti-aliased edges (*2 the number of vertices) - ImDrawListFlags_AllowVtxOffset = 1 << 2 // Can emit 'VtxOffset > 0' to allow large meshes. Set when 'ImGuiBackendFlags_RendererHasVtxOffset' is enabled. -}; - -// Draw command list -// This is the low-level list of polygons that ImGui:: functions are filling. At the end of the frame, -// all command lists are passed to your ImGuiIO::RenderDrawListFn function for rendering. -// Each dear imgui window contains its own ImDrawList. You can use ImGui::GetWindowDrawList() to -// access the current window draw list and draw custom primitives. -// You can interleave normal ImGui:: calls and adding primitives to the current draw list. -// All positions are generally in pixel coordinates (top-left at (0,0), bottom-right at io.DisplaySize), but you are totally free to apply whatever transformation matrix to want to the data (if you apply such transformation you'll want to apply it to ClipRect as well) -// Important: Primitives are always added to the list and not culled (culling is done at higher-level by ImGui:: functions), if you use this API a lot consider coarse culling your drawn objects. -struct ImDrawList -{ - // This is what you have to render - ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. - ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those - ImVector VtxBuffer; // Vertex buffer. - ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. - - // [Internal, used while building lists] - const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) - const char* _OwnerName; // Pointer to owner window's name for debugging - unsigned int _VtxCurrentOffset; // [Internal] Always 0 unless 'Flags & ImDrawListFlags_AllowVtxOffset'. - unsigned int _VtxCurrentIdx; // [Internal] Generally == VtxBuffer.Size unless we are past 64K vertices, in which case this gets reset to 0. - ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) - ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) - ImVector _ClipRectStack; // [Internal] - ImVector _TextureIdStack; // [Internal] - ImVector _Path; // [Internal] current path building - ImDrawListSplitter _Splitter; // [Internal] for channels api - - // If you want to create ImDrawList instances, pass them ImGui::GetDrawListSharedData() or create and use your own ImDrawListSharedData (so you can use ImDrawList without ImGui) - ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } - ~ImDrawList() { ClearFreeMemory(); } - IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) - IMGUI_API void PushClipRectFullScreen(); - IMGUI_API void PopClipRect(); - IMGUI_API void PushTextureID(ImTextureID texture_id); - IMGUI_API void PopTextureID(); - inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } - inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } - - // Primitives - // - For rectangular primitives, "p_min" and "p_max" represent the upper-left and lower-right corners. - // - For circle primitives, use "num_segments == 0" to automatically calculate tessellation (preferred). - // In future versions we will use textures to provide cheaper and higher-quality circles. - // Use AddNgon() and AddNgonFilled() functions if you need to guaranteed a specific number of sides. - IMGUI_API void AddLine(const ImVec2& p1, const ImVec2& p2, ImU32 col, float thickness = 1.0f); - IMGUI_API void AddRect(const ImVec2& p_min, const ImVec2& p_max, ImU32 col, float rounding = 0.0f, ImDrawCornerFlags rounding_corners = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right (== upper-left + size), rounding_corners_flags: 4 bits corresponding to which corner to round - IMGUI_API void AddRectFilled(const ImVec2& p_min, const ImVec2& p_max, ImU32 col, float rounding = 0.0f, ImDrawCornerFlags rounding_corners = ImDrawCornerFlags_All); // a: upper-left, b: lower-right (== upper-left + size) - IMGUI_API void AddRectFilledMultiColor(const ImVec2& p_min, const ImVec2& p_max, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); - IMGUI_API void AddQuad(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col, float thickness = 1.0f); - IMGUI_API void AddQuadFilled(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col); - IMGUI_API void AddTriangle(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, ImU32 col, float thickness = 1.0f); - IMGUI_API void AddTriangleFilled(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, ImU32 col); - IMGUI_API void AddCircle(const ImVec2& center, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); - IMGUI_API void AddCircleFilled(const ImVec2& center, float radius, ImU32 col, int num_segments = 12); - IMGUI_API void AddNgon(const ImVec2& center, float radius, ImU32 col, int num_segments, float thickness = 1.0f); - IMGUI_API void AddNgonFilled(const ImVec2& center, float radius, ImU32 col, int num_segments); - IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); - IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); - IMGUI_API void AddPolyline(const ImVec2* points, int num_points, ImU32 col, bool closed, float thickness); - IMGUI_API void AddConvexPolyFilled(const ImVec2* points, int num_points, ImU32 col); // Note: Anti-aliased filling requires points to be in clockwise order. - IMGUI_API void AddBezierCurve(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col, float thickness, int num_segments = 0); - - // Image primitives - // - Read FAQ to understand what ImTextureID is. - // - "p_min" and "p_max" represent the upper-left and lower-right corners of the rectangle. - // - "uv_min" and "uv_max" represent the normalized texture coordinates to use for those corners. Using (0,0)->(1,1) texture coordinates will generally display the entire texture. - IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& p_min, const ImVec2& p_max, const ImVec2& uv_min = ImVec2(0, 0), const ImVec2& uv_max = ImVec2(1, 1), ImU32 col = IM_COL32_WHITE); - IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& uv1 = ImVec2(0, 0), const ImVec2& uv2 = ImVec2(1, 0), const ImVec2& uv3 = ImVec2(1, 1), const ImVec2& uv4 = ImVec2(0, 1), ImU32 col = IM_COL32_WHITE); - IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& p_min, const ImVec2& p_max, const ImVec2& uv_min, const ImVec2& uv_max, ImU32 col, float rounding, ImDrawCornerFlags rounding_corners = ImDrawCornerFlags_All); - - // Stateful path API, add points then finish with PathFillConvex() or PathStroke() - inline void PathClear() { _Path.Size = 0; } - inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } - inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path.Data[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } - inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); _Path.Size = 0; } // Note: Anti-aliased filling requires points to be in clockwise order. - inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); _Path.Size = 0; } - IMGUI_API void PathArcTo(const ImVec2& center, float radius, float a_min, float a_max, int num_segments = 10); - IMGUI_API void PathArcToFast(const ImVec2& center, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle - IMGUI_API void PathBezierCurveTo(const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, int num_segments = 0); - IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, ImDrawCornerFlags rounding_corners = ImDrawCornerFlags_All); - - // Advanced - IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. - IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible - IMGUI_API ImDrawList* CloneOutput() const; // Create a clone of the CmdBuffer/IdxBuffer/VtxBuffer. - - // Advanced: Channels - // - Use to split render into layers. By switching channels to can render out-of-order (e.g. submit FG primitives before BG primitives) - // - Use to minimize draw calls (e.g. if going back-and-forth between multiple clipping rectangles, prefer to append into separate channels then merge at the end) - // - FIXME-OBSOLETE: This API shouldn't have been in ImDrawList in the first place! - // Prefer using your own persistent copy of ImDrawListSplitter as you can stack them. - // Using the ImDrawList::ChannelsXXXX you cannot stack a split over another. - inline void ChannelsSplit(int count) { _Splitter.Split(this, count); } - inline void ChannelsMerge() { _Splitter.Merge(this); } - inline void ChannelsSetCurrent(int n) { _Splitter.SetCurrentChannel(this, n); } - - // Internal helpers - // NB: all primitives needs to be reserved via PrimReserve() beforehand! - IMGUI_API void Clear(); - IMGUI_API void ClearFreeMemory(); - IMGUI_API void PrimReserve(int idx_count, int vtx_count); - IMGUI_API void PrimUnreserve(int idx_count, int vtx_count); - IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) - IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); - IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); - inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } - inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } - inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } - IMGUI_API void UpdateClipRect(); - IMGUI_API void UpdateTextureID(); -}; - -// All draw data to render a Dear ImGui frame -// (NB: the style and the naming convention here is a little inconsistent, we currently preserve them for backward compatibility purpose, -// as this is one of the oldest structure exposed by the library! Basically, ImDrawList == CmdList) -struct ImDrawData -{ - bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. - ImDrawList** CmdLists; // Array of ImDrawList* to render. The ImDrawList are owned by ImGuiContext and only pointed to from here. - int CmdListsCount; // Number of ImDrawList* to render - int TotalIdxCount; // For convenience, sum of all ImDrawList's IdxBuffer.Size - int TotalVtxCount; // For convenience, sum of all ImDrawList's VtxBuffer.Size - ImVec2 DisplayPos; // Upper-left position of the viewport to render (== upper-left of the orthogonal projection matrix to use) - ImVec2 DisplaySize; // Size of the viewport to render (== io.DisplaySize for the main viewport) (DisplayPos + DisplaySize == lower-right of the orthogonal projection matrix to use) - ImVec2 FramebufferScale; // Amount of pixels for each unit of DisplaySize. Based on io.DisplayFramebufferScale. Generally (1,1) on normal display, (2,2) on OSX with Retina display. - - // Functions - ImDrawData() { Valid = false; Clear(); } - ~ImDrawData() { Clear(); } - void Clear() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; DisplayPos = DisplaySize = FramebufferScale = ImVec2(0.f, 0.f); } // The ImDrawList are owned by ImGuiContext! - IMGUI_API void DeIndexAllBuffers(); // Helper to convert all buffers from indexed to non-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! - IMGUI_API void ScaleClipRects(const ImVec2& fb_scale); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than Dear ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. -}; - -//----------------------------------------------------------------------------- -// Font API (ImFontConfig, ImFontGlyph, ImFontAtlasFlags, ImFontAtlas, ImFontGlyphRangesBuilder, ImFont) -//----------------------------------------------------------------------------- - -struct ImFontConfig -{ - void* FontData; // // TTF/OTF data - int FontDataSize; // // TTF/OTF data size - bool FontDataOwnedByAtlas; // true // TTF/OTF data ownership taken by the container ImFontAtlas (will delete memory itself). - int FontNo; // 0 // Index of font within TTF/OTF file - float SizePixels; // // Size in pixels for rasterizer (more or less maps to the resulting font height). - int OversampleH; // 3 // Rasterize at higher quality for sub-pixel positioning. Read https://github.com/nothings/stb/blob/master/tests/oversample/README.md for details. - int OversampleV; // 1 // Rasterize at higher quality for sub-pixel positioning. We don't use sub-pixel positions on the Y axis. - bool PixelSnapH; // false // Align every glyph to pixel boundary. Useful e.g. if you are merging a non-pixel aligned font with the default font. If enabled, you can set OversampleH/V to 1. - ImVec2 GlyphExtraSpacing; // 0, 0 // Extra spacing (in pixels) between glyphs. Only X axis is supported for now. - ImVec2 GlyphOffset; // 0, 0 // Offset all glyphs from this font input. - const ImWchar* GlyphRanges; // NULL // Pointer to a user-provided list of Unicode range (2 value per range, values are inclusive, zero-terminated list). THE ARRAY DATA NEEDS TO PERSIST AS LONG AS THE FONT IS ALIVE. - float GlyphMinAdvanceX; // 0 // Minimum AdvanceX for glyphs, set Min to align font icons, set both Min/Max to enforce mono-space font - float GlyphMaxAdvanceX; // FLT_MAX // Maximum AdvanceX for glyphs - bool MergeMode; // false // Merge into previous ImFont, so you can combine multiple inputs font into one ImFont (e.g. ASCII font + icons + Japanese glyphs). You may want to use GlyphOffset.y when merge font of different heights. - unsigned int RasterizerFlags; // 0x00 // Settings for custom font rasterizer (e.g. ImGuiFreeType). Leave as zero if you aren't using one. - float RasterizerMultiply; // 1.0f // Brighten (>1.0f) or darken (<1.0f) font output. Brightening small fonts may be a good workaround to make them more readable. - ImWchar EllipsisChar; // -1 // Explicitly specify unicode codepoint of ellipsis character. When fonts are being merged first specified ellipsis will be used. - - // [Internal] - char Name[40]; // Name (strictly to ease debugging) - ImFont* DstFont; - - IMGUI_API ImFontConfig(); -}; - -// Hold rendering data for one glyph. -// (Note: some language parsers may fail to convert the 31+1 bitfield members, in this case maybe drop store a single u32 or we can rework this) -struct ImFontGlyph -{ - unsigned int Codepoint : 31; // 0x0000..0xFFFF - unsigned int Visible : 1; // Flag to allow early out when rendering - float AdvanceX; // Distance to next character (= data from font + ImFontConfig::GlyphExtraSpacing.x baked in) - float X0, Y0, X1, Y1; // Glyph corners - float U0, V0, U1, V1; // Texture coordinates -}; - -// Helper to build glyph ranges from text/string data. Feed your application strings/characters to it then call BuildRanges(). -// This is essentially a tightly packed of vector of 64k booleans = 8KB storage. -struct ImFontGlyphRangesBuilder -{ - ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) - - ImFontGlyphRangesBuilder() { Clear(); } - inline void Clear() { int size_in_bytes = (IM_UNICODE_CODEPOINT_MAX + 1) / 8; UsedChars.resize(size_in_bytes / (int)sizeof(ImU32)); memset(UsedChars.Data, 0, (size_t)size_in_bytes); } - inline bool GetBit(size_t n) const { int off = (int)(n >> 5); ImU32 mask = 1u << (n & 31); return (UsedChars[off] & mask) != 0; } // Get bit n in the array - inline void SetBit(size_t n) { int off = (int)(n >> 5); ImU32 mask = 1u << (n & 31); UsedChars[off] |= mask; } // Set bit n in the array - inline void AddChar(ImWchar c) { SetBit(c); } // Add character - IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) - IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault()) to force add all of ASCII/Latin+Ext - IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges -}; - -// See ImFontAtlas::AddCustomRectXXX functions. -struct ImFontAtlasCustomRect -{ - unsigned int ID; // Input // User ID. Use < 0x110000 to map into a font glyph, >= 0x110000 for other/internal/custom texture data. - unsigned short Width, Height; // Input // Desired rectangle dimension - unsigned short X, Y; // Output // Packed position in Atlas - float GlyphAdvanceX; // Input // For custom font glyphs only (ID < 0x110000): glyph xadvance - ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID < 0x110000): glyph display offset - ImFont* Font; // Input // For custom font glyphs only (ID < 0x110000): target font - ImFontAtlasCustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } - bool IsPacked() const { return X != 0xFFFF; } -}; - -enum ImFontAtlasFlags_ -{ - ImFontAtlasFlags_None = 0, - ImFontAtlasFlags_NoPowerOfTwoHeight = 1 << 0, // Don't round the height to next power of two - ImFontAtlasFlags_NoMouseCursors = 1 << 1 // Don't build software mouse cursors into the atlas -}; - -// Load and rasterize multiple TTF/OTF fonts into a same texture. The font atlas will build a single texture holding: -// - One or more fonts. -// - Custom graphics data needed to render the shapes needed by Dear ImGui. -// - Mouse cursor shapes for software cursor rendering (unless setting 'Flags |= ImFontAtlasFlags_NoMouseCursors' in the font atlas). -// It is the user-code responsibility to setup/build the atlas, then upload the pixel data into a texture accessible by your graphics api. -// - Optionally, call any of the AddFont*** functions. If you don't call any, the default font embedded in the code will be loaded for you. -// - Call GetTexDataAsAlpha8() or GetTexDataAsRGBA32() to build and retrieve pixels data. -// - Upload the pixels data into a texture within your graphics system (see imgui_impl_xxxx.cpp examples) -// - Call SetTexID(my_tex_id); and pass the pointer/identifier to your texture in a format natural to your graphics API. -// This value will be passed back to you during rendering to identify the texture. Read FAQ entry about ImTextureID for more details. -// Common pitfalls: -// - If you pass a 'glyph_ranges' array to AddFont*** functions, you need to make sure that your array persist up until the -// atlas is build (when calling GetTexData*** or Build()). We only copy the pointer, not the data. -// - Important: By default, AddFontFromMemoryTTF() takes ownership of the data. Even though we are not writing to it, we will free the pointer on destruction. -// You can set font_cfg->FontDataOwnedByAtlas=false to keep ownership of your data and it won't be freed, -// - Even though many functions are suffixed with "TTF", OTF data is supported just as well. -// - This is an old API and it is currently awkward for those and and various other reasons! We will address them in the future! -struct ImFontAtlas -{ - IMGUI_API ImFontAtlas(); - IMGUI_API ~ImFontAtlas(); - IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); - IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); - IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); - IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after destruction of the atlas. Set font_cfg->FontDataOwnedByAtlas=false to keep ownership of your data and it won't be freed. - IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. - IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. - IMGUI_API void ClearInputData(); // Clear input data (all ImFontConfig structures including sizes, TTF data, glyph ranges, etc.) = all the data used to build the texture and fonts. - IMGUI_API void ClearTexData(); // Clear output texture data (CPU side). Saves RAM once the texture has been copied to graphics memory. - IMGUI_API void ClearFonts(); // Clear output font data (glyphs storage, UV coordinates). - IMGUI_API void Clear(); // Clear all input and output. - - // Build atlas, retrieve pixel data. - // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). - // The pitch is always = Width * BytesPerPixels (1 or 4) - // Building in RGBA32 format is provided for convenience and compatibility, but note that unless you manually manipulate or copy color data into - // the texture (e.g. when using the AddCustomRect*** api), then the RGB pixels emitted will always be white (~75% of memory/bandwidth waste. - IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. - IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel - IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel - bool IsBuilt() const { return Fonts.Size > 0 && (TexPixelsAlpha8 != NULL || TexPixelsRGBA32 != NULL); } - void SetTexID(ImTextureID id) { TexID = id; } - - //------------------------------------------- - // Glyph Ranges - //------------------------------------------- - - // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) - // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. - // NB: Consider using ImFontGlyphRangesBuilder to build glyph ranges from textual data. - IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin - IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters - IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs - IMGUI_API const ImWchar* GetGlyphRangesChineseFull(); // Default + Half-Width + Japanese Hiragana/Katakana + full set of about 21000 CJK Unified Ideographs - IMGUI_API const ImWchar* GetGlyphRangesChineseSimplifiedCommon();// Default + Half-Width + Japanese Hiragana/Katakana + set of 2500 CJK Unified Ideographs for common simplified Chinese - IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters - IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters - IMGUI_API const ImWchar* GetGlyphRangesVietnamese(); // Default + Vietnamese characters - - //------------------------------------------- - // [BETA] Custom Rectangles/Glyphs API - //------------------------------------------- - - // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. - // After calling Build(), you can query the rectangle position and render your pixels. - // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), - // so you can render e.g. custom colorful icons and use them as regular glyphs. - // Read docs/FONTS.txt for more details about using colorful icons. - IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x110000. Id >= 0x80000000 are reserved for ImGui and ImDrawList - IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x110000 to register a rectangle to map into a specific font. - const ImFontAtlasCustomRect*GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } - - // [Internal] - IMGUI_API void CalcCustomRectUV(const ImFontAtlasCustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max) const; - IMGUI_API bool GetMouseCursorTexData(ImGuiMouseCursor cursor, ImVec2* out_offset, ImVec2* out_size, ImVec2 out_uv_border[2], ImVec2 out_uv_fill[2]); - - //------------------------------------------- - // Members - //------------------------------------------- - - bool Locked; // Marked as Locked by ImGui::NewFrame() so attempt to modify the atlas will assert. - ImFontAtlasFlags Flags; // Build flags (see ImFontAtlasFlags_) - ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. - int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. - int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. If your rendering method doesn't rely on bilinear filtering you may set this to 0. - - // [Internal] - // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. - unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight - unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 - int TexWidth; // Texture width calculated during Build(). - int TexHeight; // Texture height calculated during Build(). - ImVec2 TexUvScale; // = (1.0f/TexWidth, 1.0f/TexHeight) - ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel - ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. - ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. - ImVector ConfigData; // Internal data - int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList - -#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS - typedef ImFontAtlasCustomRect CustomRect; // OBSOLETED in 1.72+ - typedef ImFontGlyphRangesBuilder GlyphRangesBuilder; // OBSOLETED in 1.67+ -#endif -}; - -// Font runtime data and rendering -// ImFontAtlas automatically loads a default embedded font for you when you call GetTexDataAsAlpha8() or GetTexDataAsRGBA32(). -struct ImFont -{ - // Members: Hot ~20/24 bytes (for CalcTextSize) - ImVector IndexAdvanceX; // 12-16 // out // // Sparse. Glyphs->AdvanceX in a directly indexable way (cache-friendly for CalcTextSize functions which only this this info, and are often bottleneck in large UI). - float FallbackAdvanceX; // 4 // out // = FallbackGlyph->AdvanceX - float FontSize; // 4 // in // // Height of characters/line, set during loading (don't change after loading) - - // Members: Hot ~36/48 bytes (for CalcTextSize + render loop) - ImVector IndexLookup; // 12-16 // out // // Sparse. Index glyphs by Unicode code-point. - ImVector Glyphs; // 12-16 // out // // All glyphs. - const ImFontGlyph* FallbackGlyph; // 4-8 // out // = FindGlyph(FontFallbackChar) - ImVec2 DisplayOffset; // 8 // in // = (0,0) // Offset font rendering by xx pixels - - // Members: Cold ~32/40 bytes - ImFontAtlas* ContainerAtlas; // 4-8 // out // // What we has been loaded into - const ImFontConfig* ConfigData; // 4-8 // in // // Pointer within ContainerAtlas->ConfigData - short ConfigDataCount; // 2 // in // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. - ImWchar FallbackChar; // 2 // in // = '?' // Replacement character if a glyph isn't found. Only set via SetFallbackChar() - ImWchar EllipsisChar; // 2 // out // = -1 // Character used for ellipsis rendering. - bool DirtyLookupTables; // 1 // out // - float Scale; // 4 // in // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetWindowFontScale() - float Ascent, Descent; // 4+4 // out // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] - int MetricsTotalSurface;// 4 // out // // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) - ImU8 Used4kPagesMap[(IM_UNICODE_CODEPOINT_MAX+1)/4096/8]; // 2 bytes if ImWchar=ImWchar16, 34 bytes if ImWchar==ImWchar32. Store 1-bit for each block of 4K codepoints that has one active glyph. This is mainly used to facilitate iterations accross all used codepoints. - - // Methods - IMGUI_API ImFont(); - IMGUI_API ~ImFont(); - IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; - IMGUI_API const ImFontGlyph*FindGlyphNoFallback(ImWchar c) const; - float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } - bool IsLoaded() const { return ContainerAtlas != NULL; } - const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } - - // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. - // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. - IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 - IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; - IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, ImWchar c) const; - IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; - - // [Internal] Don't use! - IMGUI_API void BuildLookupTable(); - IMGUI_API void ClearOutputData(); - IMGUI_API void GrowIndex(int new_size); - IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); - IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. - IMGUI_API void SetGlyphVisible(ImWchar c, bool visible); - IMGUI_API void SetFallbackChar(ImWchar c); - IMGUI_API bool IsGlyphRangeUnused(unsigned int c_begin, unsigned int c_last); -}; - -#if defined(__clang__) -#pragma clang diagnostic pop -#elif defined(__GNUC__) -#pragma GCC diagnostic pop -#endif - -// Include imgui_user.h at the end of imgui.h (convenient for user to only explicitly include vanilla imgui.h) -#ifdef IMGUI_INCLUDE_IMGUI_USER_H -#include "imgui_user.h" -#endif - -#endif // #ifndef IMGUI_DISABLE diff --git a/cmake/imgui/imgui_demo.cpp b/cmake/imgui/imgui_demo.cpp deleted file mode 100644 index 28a5940e..00000000 --- a/cmake/imgui/imgui_demo.cpp +++ /dev/null @@ -1,4917 +0,0 @@ -// dear imgui, v1.76 WIP -// (demo code) - -// Help: -// - Read FAQ at http://dearimgui.org/faq -// - Newcomers, read 'Programmer guide' in imgui.cpp for notes on how to setup Dear ImGui in your codebase. -// - Call and read ImGui::ShowDemoWindow() in imgui_demo.cpp for demo code. All applications in examples/ are doing that. -// Read imgui.cpp for more details, documentation and comments. -// Get latest version at https://github.com/ocornut/imgui - -// Message to the person tempted to delete this file when integrating Dear ImGui into their code base: -// Do NOT remove this file from your project! Think again! It is the most useful reference code that you and other coders -// will want to refer to and call. Have the ImGui::ShowDemoWindow() function wired in an always-available debug menu of -// your game/app! Removing this file from your project is hindering access to documentation for everyone in your team, -// likely leading you to poorer usage of the library. -// Everything in this file will be stripped out by the linker if you don't call ImGui::ShowDemoWindow(). -// If you want to link core Dear ImGui in your shipped builds but want a thorough guarantee that the demo will not be linked, -// you can setup your imconfig.h with #define IMGUI_DISABLE_DEMO_WINDOWS and those functions will be empty. -// In other situation, whenever you have Dear ImGui available you probably want this to be available for reference. -// Thank you, -// -Your beloved friend, imgui_demo.cpp (which you won't delete) - -// Message to beginner C/C++ programmers about the meaning of the 'static' keyword: -// In this demo code, we frequently we use 'static' variables inside functions. A static variable persist across calls, so it is -// essentially like a global variable but declared inside the scope of the function. We do this as a way to gather code and data -// in the same place, to make the demo source code faster to read, faster to write, and smaller in size. -// It also happens to be a convenient way of storing simple UI related information as long as your function doesn't need to be -// reentrant or used in multiple threads. This might be a pattern you will want to use in your code, but most of the real data -// you would be editing is likely going to be stored outside your functions. - -// The Demo code in this file is designed to be easy to copy-and-paste in into your application! -// Because of this: -// - We never omit the ImGui:: namespace when calling functions, even though most of our code is already in the same namespace. -// - We try to declare static variables in the local scope, as close as possible to the code using them. -// - We never use any of the helpers/facilities used internally by Dear ImGui, unless it has been exposed in the public API (imgui.h). -// - We never use maths operators on ImVec2/ImVec4. For other of our sources files, they are provided by imgui_internal.h w/ IMGUI_DEFINE_MATH_OPERATORS. -// For your own sources file they are optional and require you either enable those, either provide your own via IM_VEC2_CLASS_EXTRA in imconfig.h. -// Because we don't want to assume anything about your support of maths operators, we don't use them in imgui_demo.cpp. - -/* - -Index of this file: - -// [SECTION] Forward Declarations, Helpers -// [SECTION] Demo Window / ShowDemoWindow() -// [SECTION] About Window / ShowAboutWindow() -// [SECTION] Style Editor / ShowStyleEditor() -// [SECTION] Example App: Main Menu Bar / ShowExampleAppMainMenuBar() -// [SECTION] Example App: Debug Console / ShowExampleAppConsole() -// [SECTION] Example App: Debug Log / ShowExampleAppLog() -// [SECTION] Example App: Simple Layout / ShowExampleAppLayout() -// [SECTION] Example App: Property Editor / ShowExampleAppPropertyEditor() -// [SECTION] Example App: Long Text / ShowExampleAppLongText() -// [SECTION] Example App: Auto Resize / ShowExampleAppAutoResize() -// [SECTION] Example App: Constrained Resize / ShowExampleAppConstrainedResize() -// [SECTION] Example App: Simple Overlay / ShowExampleAppSimpleOverlay() -// [SECTION] Example App: Manipulating Window Titles / ShowExampleAppWindowTitles() -// [SECTION] Example App: Custom Rendering using ImDrawList API / ShowExampleAppCustomRendering() -// [SECTION] Example App: Documents Handling / ShowExampleAppDocuments() - -*/ - -#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) -#define _CRT_SECURE_NO_WARNINGS -#endif - -#include "imgui.h" -#ifndef IMGUI_DISABLE - -#include // toupper -#include // INT_MIN, INT_MAX -#include // sqrtf, powf, cosf, sinf, floorf, ceilf -#include // vsnprintf, sscanf, printf -#include // NULL, malloc, free, atoi -#if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier -#include // intptr_t -#else -#include // intptr_t -#endif - -#ifdef _MSC_VER -#pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen -#endif -#if defined(__clang__) -#pragma clang diagnostic ignored "-Wold-style-cast" // warning : use of old-style cast // yes, they are more terse. -#pragma clang diagnostic ignored "-Wdeprecated-declarations" // warning : 'xx' is deprecated: The POSIX name for this item.. // for strdup used in demo code (so user can copy & paste the code) -#pragma clang diagnostic ignored "-Wint-to-void-pointer-cast" // warning : cast to 'void *' from smaller integer type 'int' -#pragma clang diagnostic ignored "-Wformat-security" // warning : warning: format string is not a string literal -#pragma clang diagnostic ignored "-Wexit-time-destructors" // warning : declaration requires an exit-time destructor // exit-time destruction order is undefined. if MemFree() leads to users code that has been disabled before exit it might cause problems. ImGui coding style welcomes static/globals. -#pragma clang diagnostic ignored "-Wunused-macros" // warning : warning: macro is not used // we define snprintf/vsnprintf on Windows so they are available, but not always used. -#if __has_warning("-Wzero-as-null-pointer-constant") -#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" // warning : zero as null pointer constant // some standard header variations use #define NULL 0 -#endif -#if __has_warning("-Wdouble-promotion") -#pragma clang diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function // using printf() is a misery with this as C++ va_arg ellipsis changes float to double. -#endif -#if __has_warning("-Wreserved-id-macro") -#pragma clang diagnostic ignored "-Wreserved-id-macro" // warning : macro name is a reserved identifier // -#endif -#elif defined(__GNUC__) -#pragma GCC diagnostic ignored "-Wpragmas" // warning: unknown option after '#pragma GCC diagnostic' kind -#pragma GCC diagnostic ignored "-Wint-to-pointer-cast" // warning: cast to pointer from integer of different size -#pragma GCC diagnostic ignored "-Wformat-security" // warning : format string is not a string literal (potentially insecure) -#pragma GCC diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function -#pragma GCC diagnostic ignored "-Wconversion" // warning: conversion to 'xxxx' from 'xxxx' may alter its value -#pragma GCC diagnostic ignored "-Wmisleading-indentation" // [__GNUC__ >= 6] warning: this 'if' clause does not guard this statement // GCC 6.0+ only. See #883 on GitHub. -#endif - -// Play it nice with Windows users (Update: since 2018-05, Notepad finally appears to support Unix-style carriage returns!) -#ifdef _WIN32 -#define IM_NEWLINE "\r\n" -#else -#define IM_NEWLINE "\n" -#endif - -#if defined(_MSC_VER) && !defined(snprintf) -#define snprintf _snprintf -#endif -#if defined(_MSC_VER) && !defined(vsnprintf) -#define vsnprintf _vsnprintf -#endif - -//----------------------------------------------------------------------------- -// [SECTION] Forward Declarations, Helpers -//----------------------------------------------------------------------------- - -#if !defined(IMGUI_DISABLE_DEMO_WINDOWS) - -// Forward Declarations -static void ShowExampleAppDocuments(bool* p_open); -static void ShowExampleAppMainMenuBar(); -static void ShowExampleAppConsole(bool* p_open); -static void ShowExampleAppLog(bool* p_open); -static void ShowExampleAppLayout(bool* p_open); -static void ShowExampleAppPropertyEditor(bool* p_open); -static void ShowExampleAppLongText(bool* p_open); -static void ShowExampleAppAutoResize(bool* p_open); -static void ShowExampleAppConstrainedResize(bool* p_open); -static void ShowExampleAppSimpleOverlay(bool* p_open); -static void ShowExampleAppWindowTitles(bool* p_open); -static void ShowExampleAppCustomRendering(bool* p_open); -static void ShowExampleMenuFile(); - -// Helper to display a little (?) mark which shows a tooltip when hovered. -// In your own code you may want to display an actual icon if you are using a merged icon fonts (see docs/FONTS.txt) -static void HelpMarker(const char* desc) -{ - ImGui::TextDisabled("(?)"); - if (ImGui::IsItemHovered()) - { - ImGui::BeginTooltip(); - ImGui::PushTextWrapPos(ImGui::GetFontSize() * 35.0f); - ImGui::TextUnformatted(desc); - ImGui::PopTextWrapPos(); - ImGui::EndTooltip(); - } -} - -// Helper to display basic user controls. -void ImGui::ShowUserGuide() -{ - ImGuiIO& io = ImGui::GetIO(); - ImGui::BulletText("Double-click on title bar to collapse window."); - ImGui::BulletText("Click and drag on lower corner to resize window\n(double-click to auto fit window to its contents)."); - ImGui::BulletText("CTRL+Click on a slider or drag box to input value as text."); - ImGui::BulletText("TAB/SHIFT+TAB to cycle through keyboard editable fields."); - if (io.FontAllowUserScaling) - ImGui::BulletText("CTRL+Mouse Wheel to zoom window contents."); - ImGui::BulletText("While inputing text:\n"); - ImGui::Indent(); - ImGui::BulletText("CTRL+Left/Right to word jump."); - ImGui::BulletText("CTRL+A or double-click to select all."); - ImGui::BulletText("CTRL+X/C/V to use clipboard cut/copy/paste."); - ImGui::BulletText("CTRL+Z,CTRL+Y to undo/redo."); - ImGui::BulletText("ESCAPE to revert."); - ImGui::BulletText("You can apply arithmetic operators +,*,/ on numerical values.\nUse +- to subtract."); - ImGui::Unindent(); - ImGui::BulletText("With keyboard navigation enabled:"); - ImGui::Indent(); - ImGui::BulletText("Arrow keys to navigate."); - ImGui::BulletText("Space to activate a widget."); - ImGui::BulletText("Return to input text into a widget."); - ImGui::BulletText("Escape to deactivate a widget, close popup, exit child window."); - ImGui::BulletText("Alt to jump to the menu layer of a window."); - ImGui::BulletText("CTRL+Tab to select a window."); - ImGui::Unindent(); -} - -//----------------------------------------------------------------------------- -// [SECTION] Demo Window / ShowDemoWindow() -//----------------------------------------------------------------------------- -// - ShowDemoWindowWidgets() -// - ShowDemoWindowLayout() -// - ShowDemoWindowPopups() -// - ShowDemoWindowColumns() -// - ShowDemoWindowMisc() -//----------------------------------------------------------------------------- - -// We split the contents of the big ShowDemoWindow() function into smaller functions (because the link time of very large functions grow non-linearly) -static void ShowDemoWindowWidgets(); -static void ShowDemoWindowLayout(); -static void ShowDemoWindowPopups(); -static void ShowDemoWindowColumns(); -static void ShowDemoWindowMisc(); - -// Demonstrate most Dear ImGui features (this is big function!) -// You may execute this function to experiment with the UI and understand what it does. You may then search for keywords in the code when you are interested by a specific feature. -void ImGui::ShowDemoWindow(bool* p_open) -{ - IM_ASSERT(ImGui::GetCurrentContext() != NULL && "Missing dear imgui context. Refer to examples app!"); // Exceptionally add an extra assert here for people confused with initial dear imgui setup - - // Examples Apps (accessible from the "Examples" menu) - static bool show_app_documents = false; - static bool show_app_main_menu_bar = false; - static bool show_app_console = false; - static bool show_app_log = false; - static bool show_app_layout = false; - static bool show_app_property_editor = false; - static bool show_app_long_text = false; - static bool show_app_auto_resize = false; - static bool show_app_constrained_resize = false; - static bool show_app_simple_overlay = false; - static bool show_app_window_titles = false; - static bool show_app_custom_rendering = false; - - if (show_app_documents) ShowExampleAppDocuments(&show_app_documents); - if (show_app_main_menu_bar) ShowExampleAppMainMenuBar(); - if (show_app_console) ShowExampleAppConsole(&show_app_console); - if (show_app_log) ShowExampleAppLog(&show_app_log); - if (show_app_layout) ShowExampleAppLayout(&show_app_layout); - if (show_app_property_editor) ShowExampleAppPropertyEditor(&show_app_property_editor); - if (show_app_long_text) ShowExampleAppLongText(&show_app_long_text); - if (show_app_auto_resize) ShowExampleAppAutoResize(&show_app_auto_resize); - if (show_app_constrained_resize) ShowExampleAppConstrainedResize(&show_app_constrained_resize); - if (show_app_simple_overlay) ShowExampleAppSimpleOverlay(&show_app_simple_overlay); - if (show_app_window_titles) ShowExampleAppWindowTitles(&show_app_window_titles); - if (show_app_custom_rendering) ShowExampleAppCustomRendering(&show_app_custom_rendering); - - // Dear ImGui Apps (accessible from the "Tools" menu) - static bool show_app_metrics = false; - static bool show_app_style_editor = false; - static bool show_app_about = false; - - if (show_app_metrics) { ImGui::ShowMetricsWindow(&show_app_metrics); } - if (show_app_style_editor) { ImGui::Begin("Style Editor", &show_app_style_editor); ImGui::ShowStyleEditor(); ImGui::End(); } - if (show_app_about) { ImGui::ShowAboutWindow(&show_app_about); } - - // Demonstrate the various window flags. Typically you would just use the default! - static bool no_titlebar = false; - static bool no_scrollbar = false; - static bool no_menu = false; - static bool no_move = false; - static bool no_resize = false; - static bool no_collapse = false; - static bool no_close = false; - static bool no_nav = false; - static bool no_background = false; - static bool no_bring_to_front = false; - - ImGuiWindowFlags window_flags = 0; - if (no_titlebar) window_flags |= ImGuiWindowFlags_NoTitleBar; - if (no_scrollbar) window_flags |= ImGuiWindowFlags_NoScrollbar; - if (!no_menu) window_flags |= ImGuiWindowFlags_MenuBar; - if (no_move) window_flags |= ImGuiWindowFlags_NoMove; - if (no_resize) window_flags |= ImGuiWindowFlags_NoResize; - if (no_collapse) window_flags |= ImGuiWindowFlags_NoCollapse; - if (no_nav) window_flags |= ImGuiWindowFlags_NoNav; - if (no_background) window_flags |= ImGuiWindowFlags_NoBackground; - if (no_bring_to_front) window_flags |= ImGuiWindowFlags_NoBringToFrontOnFocus; - if (no_close) p_open = NULL; // Don't pass our bool* to Begin - - // We specify a default position/size in case there's no data in the .ini file. Typically this isn't required! We only do it to make the Demo applications a little more welcoming. - ImGui::SetNextWindowPos(ImVec2(650, 20), ImGuiCond_FirstUseEver); - ImGui::SetNextWindowSize(ImVec2(550, 680), ImGuiCond_FirstUseEver); - - // Main body of the Demo window starts here. - if (!ImGui::Begin("Dear ImGui Demo", p_open, window_flags)) - { - // Early out if the window is collapsed, as an optimization. - ImGui::End(); - return; - } - - // Most "big" widgets share a common width settings by default. - //ImGui::PushItemWidth(ImGui::GetWindowWidth() * 0.65f); // Use 2/3 of the space for widgets and 1/3 for labels (default) - ImGui::PushItemWidth(ImGui::GetFontSize() * -12); // Use fixed width for labels (by passing a negative value), the rest goes to widgets. We choose a width proportional to our font size. - - // Menu Bar - if (ImGui::BeginMenuBar()) - { - if (ImGui::BeginMenu("Menu")) - { - ShowExampleMenuFile(); - ImGui::EndMenu(); - } - if (ImGui::BeginMenu("Examples")) - { - ImGui::MenuItem("Main menu bar", NULL, &show_app_main_menu_bar); - ImGui::MenuItem("Console", NULL, &show_app_console); - ImGui::MenuItem("Log", NULL, &show_app_log); - ImGui::MenuItem("Simple layout", NULL, &show_app_layout); - ImGui::MenuItem("Property editor", NULL, &show_app_property_editor); - ImGui::MenuItem("Long text display", NULL, &show_app_long_text); - ImGui::MenuItem("Auto-resizing window", NULL, &show_app_auto_resize); - ImGui::MenuItem("Constrained-resizing window", NULL, &show_app_constrained_resize); - ImGui::MenuItem("Simple overlay", NULL, &show_app_simple_overlay); - ImGui::MenuItem("Manipulating window titles", NULL, &show_app_window_titles); - ImGui::MenuItem("Custom rendering", NULL, &show_app_custom_rendering); - ImGui::MenuItem("Documents", NULL, &show_app_documents); - ImGui::EndMenu(); - } - if (ImGui::BeginMenu("Tools")) - { - ImGui::MenuItem("Metrics", NULL, &show_app_metrics); - ImGui::MenuItem("Style Editor", NULL, &show_app_style_editor); - ImGui::MenuItem("About Dear ImGui", NULL, &show_app_about); - ImGui::EndMenu(); - } - ImGui::EndMenuBar(); - } - - ImGui::Text("dear imgui says hello. (%s)", IMGUI_VERSION); - ImGui::Spacing(); - - if (ImGui::CollapsingHeader("Help")) - { - ImGui::Text("ABOUT THIS DEMO:"); - ImGui::BulletText("Sections below are demonstrating many aspects of the library."); - ImGui::BulletText("The \"Examples\" menu above leads to more demo contents."); - ImGui::BulletText("The \"Tools\" menu above gives access to: About Box, Style Editor,\n" - "and Metrics (general purpose Dear ImGui debugging tool)."); - ImGui::Separator(); - - ImGui::Text("PROGRAMMER GUIDE:"); - ImGui::BulletText("See the ShowDemoWindow() code in imgui_demo.cpp. <- you are here!"); - ImGui::BulletText("See comments in imgui.cpp."); - ImGui::BulletText("See example applications in the examples/ folder."); - ImGui::BulletText("Read the FAQ at http://www.dearimgui.org/faq/"); - ImGui::BulletText("Set 'io.ConfigFlags |= NavEnableKeyboard' for keyboard controls."); - ImGui::BulletText("Set 'io.ConfigFlags |= NavEnableGamepad' for gamepad controls."); - ImGui::Separator(); - - ImGui::Text("USER GUIDE:"); - ImGui::ShowUserGuide(); - } - - if (ImGui::CollapsingHeader("Configuration")) - { - ImGuiIO& io = ImGui::GetIO(); - - if (ImGui::TreeNode("Configuration##2")) - { - ImGui::CheckboxFlags("io.ConfigFlags: NavEnableKeyboard", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NavEnableKeyboard); - ImGui::CheckboxFlags("io.ConfigFlags: NavEnableGamepad", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NavEnableGamepad); - ImGui::SameLine(); HelpMarker("Required back-end to feed in gamepad inputs in io.NavInputs[] and set io.BackendFlags |= ImGuiBackendFlags_HasGamepad.\n\nRead instructions in imgui.cpp for details."); - ImGui::CheckboxFlags("io.ConfigFlags: NavEnableSetMousePos", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NavEnableSetMousePos); - ImGui::SameLine(); HelpMarker("Instruct navigation to move the mouse cursor. See comment for ImGuiConfigFlags_NavEnableSetMousePos."); - ImGui::CheckboxFlags("io.ConfigFlags: NoMouse", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NoMouse); - if (io.ConfigFlags & ImGuiConfigFlags_NoMouse) // Create a way to restore this flag otherwise we could be stuck completely! - { - if (fmodf((float)ImGui::GetTime(), 0.40f) < 0.20f) - { - ImGui::SameLine(); - ImGui::Text("<>"); - } - if (ImGui::IsKeyPressed(ImGui::GetKeyIndex(ImGuiKey_Space))) - io.ConfigFlags &= ~ImGuiConfigFlags_NoMouse; - } - ImGui::CheckboxFlags("io.ConfigFlags: NoMouseCursorChange", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NoMouseCursorChange); - ImGui::SameLine(); HelpMarker("Instruct back-end to not alter mouse cursor shape and visibility."); - ImGui::Checkbox("io.ConfigInputTextCursorBlink", &io.ConfigInputTextCursorBlink); - ImGui::SameLine(); HelpMarker("Set to false to disable blinking cursor, for users who consider it distracting"); - ImGui::Checkbox("io.ConfigWindowsResizeFromEdges", &io.ConfigWindowsResizeFromEdges); - ImGui::SameLine(); HelpMarker("Enable resizing of windows from their edges and from the lower-left corner.\nThis requires (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors) because it needs mouse cursor feedback."); - ImGui::Checkbox("io.ConfigWindowsMoveFromTitleBarOnly", &io.ConfigWindowsMoveFromTitleBarOnly); - ImGui::Checkbox("io.MouseDrawCursor", &io.MouseDrawCursor); - ImGui::SameLine(); HelpMarker("Instruct Dear ImGui to render a mouse cursor for you. Note that a mouse cursor rendered via your application GPU rendering path will feel more laggy than hardware cursor, but will be more in sync with your other visuals.\n\nSome desktop applications may use both kinds of cursors (e.g. enable software cursor only when resizing/dragging something)."); - ImGui::TreePop(); - ImGui::Separator(); - } - - if (ImGui::TreeNode("Backend Flags")) - { - HelpMarker("Those flags are set by the back-ends (imgui_impl_xxx files) to specify their capabilities.\nHere we expose then as read-only fields to avoid breaking interactions with your back-end."); - ImGuiBackendFlags backend_flags = io.BackendFlags; // Make a local copy to avoid modifying actual back-end flags. - ImGui::CheckboxFlags("io.BackendFlags: HasGamepad", (unsigned int *)&backend_flags, ImGuiBackendFlags_HasGamepad); - ImGui::CheckboxFlags("io.BackendFlags: HasMouseCursors", (unsigned int *)&backend_flags, ImGuiBackendFlags_HasMouseCursors); - ImGui::CheckboxFlags("io.BackendFlags: HasSetMousePos", (unsigned int *)&backend_flags, ImGuiBackendFlags_HasSetMousePos); - ImGui::CheckboxFlags("io.BackendFlags: RendererHasVtxOffset", (unsigned int *)&backend_flags, ImGuiBackendFlags_RendererHasVtxOffset); - ImGui::TreePop(); - ImGui::Separator(); - } - - if (ImGui::TreeNode("Style")) - { - HelpMarker("The same contents can be accessed in 'Tools->Style Editor' or by calling the ShowStyleEditor() function."); - ImGui::ShowStyleEditor(); - ImGui::TreePop(); - ImGui::Separator(); - } - - if (ImGui::TreeNode("Capture/Logging")) - { - ImGui::TextWrapped("The logging API redirects all text output so you can easily capture the content of a window or a block. Tree nodes can be automatically expanded."); - HelpMarker("Try opening any of the contents below in this window and then click one of the \"Log To\" button."); - ImGui::LogButtons(); - ImGui::TextWrapped("You can also call ImGui::LogText() to output directly to the log without a visual output."); - if (ImGui::Button("Copy \"Hello, world!\" to clipboard")) - { - ImGui::LogToClipboard(); - ImGui::LogText("Hello, world!"); - ImGui::LogFinish(); - } - ImGui::TreePop(); - } - } - - if (ImGui::CollapsingHeader("Window options")) - { - ImGui::Checkbox("No titlebar", &no_titlebar); ImGui::SameLine(150); - ImGui::Checkbox("No scrollbar", &no_scrollbar); ImGui::SameLine(300); - ImGui::Checkbox("No menu", &no_menu); - ImGui::Checkbox("No move", &no_move); ImGui::SameLine(150); - ImGui::Checkbox("No resize", &no_resize); ImGui::SameLine(300); - ImGui::Checkbox("No collapse", &no_collapse); - ImGui::Checkbox("No close", &no_close); ImGui::SameLine(150); - ImGui::Checkbox("No nav", &no_nav); ImGui::SameLine(300); - ImGui::Checkbox("No background", &no_background); - ImGui::Checkbox("No bring to front", &no_bring_to_front); - } - - // All demo contents - ShowDemoWindowWidgets(); - ShowDemoWindowLayout(); - ShowDemoWindowPopups(); - ShowDemoWindowColumns(); - ShowDemoWindowMisc(); - - // End of ShowDemoWindow() - ImGui::End(); -} - -static void ShowDemoWindowWidgets() -{ - if (!ImGui::CollapsingHeader("Widgets")) - return; - - if (ImGui::TreeNode("Basic")) - { - static int clicked = 0; - if (ImGui::Button("Button")) - clicked++; - if (clicked & 1) - { - ImGui::SameLine(); - ImGui::Text("Thanks for clicking me!"); - } - - static bool check = true; - ImGui::Checkbox("checkbox", &check); - - static int e = 0; - ImGui::RadioButton("radio a", &e, 0); ImGui::SameLine(); - ImGui::RadioButton("radio b", &e, 1); ImGui::SameLine(); - ImGui::RadioButton("radio c", &e, 2); - - // Color buttons, demonstrate using PushID() to add unique identifier in the ID stack, and changing style. - for (int i = 0; i < 7; i++) - { - if (i > 0) - ImGui::SameLine(); - ImGui::PushID(i); - ImGui::PushStyleColor(ImGuiCol_Button, (ImVec4)ImColor::HSV(i/7.0f, 0.6f, 0.6f)); - ImGui::PushStyleColor(ImGuiCol_ButtonHovered, (ImVec4)ImColor::HSV(i/7.0f, 0.7f, 0.7f)); - ImGui::PushStyleColor(ImGuiCol_ButtonActive, (ImVec4)ImColor::HSV(i/7.0f, 0.8f, 0.8f)); - ImGui::Button("Click"); - ImGui::PopStyleColor(3); - ImGui::PopID(); - } - - // Use AlignTextToFramePadding() to align text baseline to the baseline of framed elements (otherwise a Text+SameLine+Button sequence will have the text a little too high by default) - ImGui::AlignTextToFramePadding(); - ImGui::Text("Hold to repeat:"); - ImGui::SameLine(); - - // Arrow buttons with Repeater - static int counter = 0; - float spacing = ImGui::GetStyle().ItemInnerSpacing.x; - ImGui::PushButtonRepeat(true); - if (ImGui::ArrowButton("##left", ImGuiDir_Left)) { counter--; } - ImGui::SameLine(0.0f, spacing); - if (ImGui::ArrowButton("##right", ImGuiDir_Right)) { counter++; } - ImGui::PopButtonRepeat(); - ImGui::SameLine(); - ImGui::Text("%d", counter); - - ImGui::Text("Hover over me"); - if (ImGui::IsItemHovered()) - ImGui::SetTooltip("I am a tooltip"); - - ImGui::SameLine(); - ImGui::Text("- or me"); - if (ImGui::IsItemHovered()) - { - ImGui::BeginTooltip(); - ImGui::Text("I am a fancy tooltip"); - static float arr[] = { 0.6f, 0.1f, 1.0f, 0.5f, 0.92f, 0.1f, 0.2f }; - ImGui::PlotLines("Curve", arr, IM_ARRAYSIZE(arr)); - ImGui::EndTooltip(); - } - - ImGui::Separator(); - - ImGui::LabelText("label", "Value"); - - { - // Using the _simplified_ one-liner Combo() api here - // See "Combo" section for examples of how to use the more complete BeginCombo()/EndCombo() api. - const char* items[] = { "AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK", "LLLLLLL", "MMMM", "OOOOOOO" }; - static int item_current = 0; - ImGui::Combo("combo", &item_current, items, IM_ARRAYSIZE(items)); - ImGui::SameLine(); HelpMarker("Refer to the \"Combo\" section below for an explanation of the full BeginCombo/EndCombo API, and demonstration of various flags.\n"); - } - - { - // To wire InputText() with std::string or any other custom string type, - // see the "Text Input > Resize Callback" section of this demo, and the misc/cpp/imgui_stdlib.h file. - static char str0[128] = "Hello, world!"; - ImGui::InputText("input text", str0, IM_ARRAYSIZE(str0)); - ImGui::SameLine(); HelpMarker("USER:\nHold SHIFT or use mouse to select text.\n" "CTRL+Left/Right to word jump.\n" "CTRL+A or double-click to select all.\n" "CTRL+X,CTRL+C,CTRL+V clipboard.\n" "CTRL+Z,CTRL+Y undo/redo.\n" "ESCAPE to revert.\n\nPROGRAMMER:\nYou can use the ImGuiInputTextFlags_CallbackResize facility if you need to wire InputText() to a dynamic string type. See misc/cpp/imgui_stdlib.h for an example (this is not demonstrated in imgui_demo.cpp)."); - - static char str1[128] = ""; - ImGui::InputTextWithHint("input text (w/ hint)", "enter text here", str1, IM_ARRAYSIZE(str1)); - - static int i0 = 123; - ImGui::InputInt("input int", &i0); - ImGui::SameLine(); HelpMarker("You can apply arithmetic operators +,*,/ on numerical values.\n e.g. [ 100 ], input \'*2\', result becomes [ 200 ]\nUse +- to subtract.\n"); - - static float f0 = 0.001f; - ImGui::InputFloat("input float", &f0, 0.01f, 1.0f, "%.3f"); - - static double d0 = 999999.00000001; - ImGui::InputDouble("input double", &d0, 0.01f, 1.0f, "%.8f"); - - static float f1 = 1.e10f; - ImGui::InputFloat("input scientific", &f1, 0.0f, 0.0f, "%e"); - ImGui::SameLine(); HelpMarker("You can input value using the scientific notation,\n e.g. \"1e+8\" becomes \"100000000\".\n"); - - static float vec4a[4] = { 0.10f, 0.20f, 0.30f, 0.44f }; - ImGui::InputFloat3("input float3", vec4a); - } - - { - static int i1 = 50, i2 = 42; - ImGui::DragInt("drag int", &i1, 1); - ImGui::SameLine(); HelpMarker("Click and drag to edit value.\nHold SHIFT/ALT for faster/slower edit.\nDouble-click or CTRL+click to input value."); - - ImGui::DragInt("drag int 0..100", &i2, 1, 0, 100, "%d%%"); - - static float f1=1.00f, f2=0.0067f; - ImGui::DragFloat("drag float", &f1, 0.005f); - ImGui::DragFloat("drag small float", &f2, 0.0001f, 0.0f, 0.0f, "%.06f ns"); - } - - { - static int i1=0; - ImGui::SliderInt("slider int", &i1, -1, 3); - ImGui::SameLine(); HelpMarker("CTRL+click to input value."); - - static float f1=0.123f, f2=0.0f; - ImGui::SliderFloat("slider float", &f1, 0.0f, 1.0f, "ratio = %.3f"); - ImGui::SliderFloat("slider float (curve)", &f2, -10.0f, 10.0f, "%.4f", 2.0f); - - static float angle = 0.0f; - ImGui::SliderAngle("slider angle", &angle); - - // Using the format string to display a name instead of an integer. - // Here we completely omit '%d' from the format string, so it'll only display a name. - // This technique can also be used with DragInt(). - enum Element { Element_Fire, Element_Earth, Element_Air, Element_Water, Element_COUNT }; - const char* element_names[Element_COUNT] = { "Fire", "Earth", "Air", "Water" }; - static int current_element = Element_Fire; - const char* current_element_name = (current_element >= 0 && current_element < Element_COUNT) ? element_names[current_element] : "Unknown"; - ImGui::SliderInt("slider enum", ¤t_element, 0, Element_COUNT - 1, current_element_name); - ImGui::SameLine(); HelpMarker("Using the format string parameter to display a name instead of the underlying integer."); - } - - { - static float col1[3] = { 1.0f,0.0f,0.2f }; - static float col2[4] = { 0.4f,0.7f,0.0f,0.5f }; - ImGui::ColorEdit3("color 1", col1); - ImGui::SameLine(); HelpMarker("Click on the colored square to open a color picker.\nClick and hold to use drag and drop.\nRight-click on the colored square to show options.\nCTRL+click on individual component to input value.\n"); - - ImGui::ColorEdit4("color 2", col2); - } - - { - // List box - const char* listbox_items[] = { "Apple", "Banana", "Cherry", "Kiwi", "Mango", "Orange", "Pineapple", "Strawberry", "Watermelon" }; - static int listbox_item_current = 1; - ImGui::ListBox("listbox\n(single select)", &listbox_item_current, listbox_items, IM_ARRAYSIZE(listbox_items), 4); - - //static int listbox_item_current2 = 2; - //ImGui::SetNextItemWidth(-1); - //ImGui::ListBox("##listbox2", &listbox_item_current2, listbox_items, IM_ARRAYSIZE(listbox_items), 4); - } - - ImGui::TreePop(); - } - - // Testing ImGuiOnceUponAFrame helper. - //static ImGuiOnceUponAFrame once; - //for (int i = 0; i < 5; i++) - // if (once) - // ImGui::Text("This will be displayed only once."); - - if (ImGui::TreeNode("Trees")) - { - if (ImGui::TreeNode("Basic trees")) - { - for (int i = 0; i < 5; i++) - { - // Use SetNextItemOpen() so set the default state of a node to be open. - // We could also use TreeNodeEx() with the ImGuiTreeNodeFlags_DefaultOpen flag to achieve the same thing! - if (i == 0) - ImGui::SetNextItemOpen(true, ImGuiCond_Once); - - if (ImGui::TreeNode((void*)(intptr_t)i, "Child %d", i)) - { - ImGui::Text("blah blah"); - ImGui::SameLine(); - if (ImGui::SmallButton("button")) {} - ImGui::TreePop(); - } - } - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Advanced, with Selectable nodes")) - { - HelpMarker("This is a more typical looking tree with selectable nodes.\nClick to select, CTRL+Click to toggle, click on arrows or double-click to open."); - static ImGuiTreeNodeFlags base_flags = ImGuiTreeNodeFlags_OpenOnArrow | ImGuiTreeNodeFlags_OpenOnDoubleClick | ImGuiTreeNodeFlags_SpanAvailWidth; - static bool align_label_with_current_x_position = false; - ImGui::CheckboxFlags("ImGuiTreeNodeFlags_OpenOnArrow", (unsigned int*)&base_flags, ImGuiTreeNodeFlags_OpenOnArrow); - ImGui::CheckboxFlags("ImGuiTreeNodeFlags_OpenOnDoubleClick", (unsigned int*)&base_flags, ImGuiTreeNodeFlags_OpenOnDoubleClick); - ImGui::CheckboxFlags("ImGuiTreeNodeFlags_SpanAvailWidth", (unsigned int*)&base_flags, ImGuiTreeNodeFlags_SpanAvailWidth); ImGui::SameLine(); HelpMarker("Extend hit area to all available width instead of allowing more items to be layed out after the node."); - ImGui::CheckboxFlags("ImGuiTreeNodeFlags_SpanFullWidth", (unsigned int*)&base_flags, ImGuiTreeNodeFlags_SpanFullWidth); - ImGui::Checkbox("Align label with current X position", &align_label_with_current_x_position); - ImGui::Text("Hello!"); - if (align_label_with_current_x_position) - ImGui::Unindent(ImGui::GetTreeNodeToLabelSpacing()); - - static int selection_mask = (1 << 2); // Dumb representation of what may be user-side selection state. You may carry selection state inside or outside your objects in whatever format you see fit. - int node_clicked = -1; // Temporary storage of what node we have clicked to process selection at the end of the loop. May be a pointer to your own node type, etc. - for (int i = 0; i < 6; i++) - { - // Disable the default open on single-click behavior and pass in Selected flag according to our selection state. - ImGuiTreeNodeFlags node_flags = base_flags; - const bool is_selected = (selection_mask & (1 << i)) != 0; - if (is_selected) - node_flags |= ImGuiTreeNodeFlags_Selected; - if (i < 3) - { - // Items 0..2 are Tree Node - bool node_open = ImGui::TreeNodeEx((void*)(intptr_t)i, node_flags, "Selectable Node %d", i); - if (ImGui::IsItemClicked()) - node_clicked = i; - if (node_open) - { - ImGui::BulletText("Blah blah\nBlah Blah"); - ImGui::TreePop(); - } - } - else - { - // Items 3..5 are Tree Leaves - // The only reason we use TreeNode at all is to allow selection of the leaf. - // Otherwise we can use BulletText() or advance the cursor by GetTreeNodeToLabelSpacing() and call Text(). - node_flags |= ImGuiTreeNodeFlags_Leaf | ImGuiTreeNodeFlags_NoTreePushOnOpen; // ImGuiTreeNodeFlags_Bullet - ImGui::TreeNodeEx((void*)(intptr_t)i, node_flags, "Selectable Leaf %d", i); - if (ImGui::IsItemClicked()) - node_clicked = i; - } - } - if (node_clicked != -1) - { - // Update selection state. Process outside of tree loop to avoid visual inconsistencies during the clicking-frame. - if (ImGui::GetIO().KeyCtrl) - selection_mask ^= (1 << node_clicked); // CTRL+click to toggle - else //if (!(selection_mask & (1 << node_clicked))) // Depending on selection behavior you want, this commented bit preserve selection when clicking on item that is part of the selection - selection_mask = (1 << node_clicked); // Click to single-select - } - if (align_label_with_current_x_position) - ImGui::Indent(ImGui::GetTreeNodeToLabelSpacing()); - ImGui::TreePop(); - } - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Collapsing Headers")) - { - static bool closable_group = true; - ImGui::Checkbox("Show 2nd header", &closable_group); - if (ImGui::CollapsingHeader("Header", ImGuiTreeNodeFlags_None)) - { - ImGui::Text("IsItemHovered: %d", ImGui::IsItemHovered()); - for (int i = 0; i < 5; i++) - ImGui::Text("Some content %d", i); - } - if (ImGui::CollapsingHeader("Header with a close button", &closable_group)) - { - ImGui::Text("IsItemHovered: %d", ImGui::IsItemHovered()); - for (int i = 0; i < 5; i++) - ImGui::Text("More content %d", i); - } - /* - if (ImGui::CollapsingHeader("Header with a bullet", ImGuiTreeNodeFlags_Bullet)) - ImGui::Text("IsItemHovered: %d", ImGui::IsItemHovered()); - */ - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Bullets")) - { - ImGui::BulletText("Bullet point 1"); - ImGui::BulletText("Bullet point 2\nOn multiple lines"); - if (ImGui::TreeNode("Tree node")) - { - ImGui::BulletText("Another bullet point"); - ImGui::TreePop(); - } - ImGui::Bullet(); ImGui::Text("Bullet point 3 (two calls)"); - ImGui::Bullet(); ImGui::SmallButton("Button"); - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Text")) - { - if (ImGui::TreeNode("Colored Text")) - { - // Using shortcut. You can use PushStyleColor()/PopStyleColor() for more flexibility. - ImGui::TextColored(ImVec4(1.0f,0.0f,1.0f,1.0f), "Pink"); - ImGui::TextColored(ImVec4(1.0f,1.0f,0.0f,1.0f), "Yellow"); - ImGui::TextDisabled("Disabled"); - ImGui::SameLine(); HelpMarker("The TextDisabled color is stored in ImGuiStyle."); - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Word Wrapping")) - { - // Using shortcut. You can use PushTextWrapPos()/PopTextWrapPos() for more flexibility. - ImGui::TextWrapped("This text should automatically wrap on the edge of the window. The current implementation for text wrapping follows simple rules suitable for English and possibly other languages."); - ImGui::Spacing(); - - static float wrap_width = 200.0f; - ImGui::SliderFloat("Wrap width", &wrap_width, -20, 600, "%.0f"); - - ImGui::Text("Test paragraph 1:"); - ImVec2 pos = ImGui::GetCursorScreenPos(); - ImGui::GetWindowDrawList()->AddRectFilled(ImVec2(pos.x + wrap_width, pos.y), ImVec2(pos.x + wrap_width + 10, pos.y + ImGui::GetTextLineHeight()), IM_COL32(255,0,255,255)); - ImGui::PushTextWrapPos(ImGui::GetCursorPos().x + wrap_width); - ImGui::Text("The lazy dog is a good dog. This paragraph is made to fit within %.0f pixels. Testing a 1 character word. The quick brown fox jumps over the lazy dog.", wrap_width); - ImGui::GetWindowDrawList()->AddRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax(), IM_COL32(255,255,0,255)); - ImGui::PopTextWrapPos(); - - ImGui::Text("Test paragraph 2:"); - pos = ImGui::GetCursorScreenPos(); - ImGui::GetWindowDrawList()->AddRectFilled(ImVec2(pos.x + wrap_width, pos.y), ImVec2(pos.x + wrap_width + 10, pos.y + ImGui::GetTextLineHeight()), IM_COL32(255,0,255,255)); - ImGui::PushTextWrapPos(ImGui::GetCursorPos().x + wrap_width); - ImGui::Text("aaaaaaaa bbbbbbbb, c cccccccc,dddddddd. d eeeeeeee ffffffff. gggggggg!hhhhhhhh"); - ImGui::GetWindowDrawList()->AddRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax(), IM_COL32(255,255,0,255)); - ImGui::PopTextWrapPos(); - - ImGui::TreePop(); - } - - if (ImGui::TreeNode("UTF-8 Text")) - { - // UTF-8 test with Japanese characters - // (Needs a suitable font, try Noto, or Arial Unicode, or M+ fonts. Read docs/FONTS.txt for details.) - // - From C++11 you can use the u8"my text" syntax to encode literal strings as UTF-8 - // - For earlier compiler, you may be able to encode your sources as UTF-8 (e.g. Visual Studio save your file as 'UTF-8 without signature') - // - FOR THIS DEMO FILE ONLY, BECAUSE WE WANT TO SUPPORT OLD COMPILERS, WE ARE *NOT* INCLUDING RAW UTF-8 CHARACTERS IN THIS SOURCE FILE. - // Instead we are encoding a few strings with hexadecimal constants. Don't do this in your application! - // Please use u8"text in any language" in your application! - // Note that characters values are preserved even by InputText() if the font cannot be displayed, so you can safely copy & paste garbled characters into another application. - ImGui::TextWrapped("CJK text will only appears if the font was loaded with the appropriate CJK character ranges. Call io.Font->AddFontFromFileTTF() manually to load extra character ranges. Read docs/FONTS.txt for details."); - ImGui::Text("Hiragana: \xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91\xe3\x81\x93 (kakikukeko)"); // Normally we would use u8"blah blah" with the proper characters directly in the string. - ImGui::Text("Kanjis: \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e (nihongo)"); - static char buf[32] = "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e"; - //static char buf[32] = u8"NIHONGO"; // <- this is how you would write it with C++11, using real kanjis - ImGui::InputText("UTF-8 input", buf, IM_ARRAYSIZE(buf)); - ImGui::TreePop(); - } - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Images")) - { - ImGuiIO& io = ImGui::GetIO(); - ImGui::TextWrapped("Below we are displaying the font texture (which is the only texture we have access to in this demo). Use the 'ImTextureID' type as storage to pass pointers or identifier to your own texture data. Hover the texture for a zoomed view!"); - - // Here we are grabbing the font texture because that's the only one we have access to inside the demo code. - // Remember that ImTextureID is just storage for whatever you want it to be, it is essentially a value that will be passed to the render function inside the ImDrawCmd structure. - // If you use one of the default imgui_impl_XXXX.cpp renderer, they all have comments at the top of their file to specify what they expect to be stored in ImTextureID. - // (for example, the imgui_impl_dx11.cpp renderer expect a 'ID3D11ShaderResourceView*' pointer. The imgui_impl_opengl3.cpp renderer expect a GLuint OpenGL texture identifier etc.) - // If you decided that ImTextureID = MyEngineTexture*, then you can pass your MyEngineTexture* pointers to ImGui::Image(), and gather width/height through your own functions, etc. - // Using ShowMetricsWindow() as a "debugger" to inspect the draw data that are being passed to your render will help you debug issues if you are confused about this. - // Consider using the lower-level ImDrawList::AddImage() API, via ImGui::GetWindowDrawList()->AddImage(). - ImTextureID my_tex_id = io.Fonts->TexID; - float my_tex_w = (float)io.Fonts->TexWidth; - float my_tex_h = (float)io.Fonts->TexHeight; - - ImGui::Text("%.0fx%.0f", my_tex_w, my_tex_h); - ImVec2 pos = ImGui::GetCursorScreenPos(); - ImGui::Image(my_tex_id, ImVec2(my_tex_w, my_tex_h), ImVec2(0,0), ImVec2(1,1), ImVec4(1.0f,1.0f,1.0f,1.0f), ImVec4(1.0f,1.0f,1.0f,0.5f)); - if (ImGui::IsItemHovered()) - { - ImGui::BeginTooltip(); - float region_sz = 32.0f; - float region_x = io.MousePos.x - pos.x - region_sz * 0.5f; if (region_x < 0.0f) region_x = 0.0f; else if (region_x > my_tex_w - region_sz) region_x = my_tex_w - region_sz; - float region_y = io.MousePos.y - pos.y - region_sz * 0.5f; if (region_y < 0.0f) region_y = 0.0f; else if (region_y > my_tex_h - region_sz) region_y = my_tex_h - region_sz; - float zoom = 4.0f; - ImGui::Text("Min: (%.2f, %.2f)", region_x, region_y); - ImGui::Text("Max: (%.2f, %.2f)", region_x + region_sz, region_y + region_sz); - ImVec2 uv0 = ImVec2((region_x) / my_tex_w, (region_y) / my_tex_h); - ImVec2 uv1 = ImVec2((region_x + region_sz) / my_tex_w, (region_y + region_sz) / my_tex_h); - ImGui::Image(my_tex_id, ImVec2(region_sz * zoom, region_sz * zoom), uv0, uv1, ImVec4(1.0f, 1.0f, 1.0f, 1.0f), ImVec4(1.0f, 1.0f, 1.0f, 0.5f)); - ImGui::EndTooltip(); - } - ImGui::TextWrapped("And now some textured buttons.."); - static int pressed_count = 0; - for (int i = 0; i < 8; i++) - { - ImGui::PushID(i); - int frame_padding = -1 + i; // -1 = uses default padding - if (ImGui::ImageButton(my_tex_id, ImVec2(32,32), ImVec2(0,0), ImVec2(32.0f/my_tex_w,32/my_tex_h), frame_padding, ImVec4(0.0f,0.0f,0.0f,1.0f))) - pressed_count += 1; - ImGui::PopID(); - ImGui::SameLine(); - } - ImGui::NewLine(); - ImGui::Text("Pressed %d times.", pressed_count); - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Combo")) - { - // Expose flags as checkbox for the demo - static ImGuiComboFlags flags = 0; - ImGui::CheckboxFlags("ImGuiComboFlags_PopupAlignLeft", (unsigned int*)&flags, ImGuiComboFlags_PopupAlignLeft); - ImGui::SameLine(); HelpMarker("Only makes a difference if the popup is larger than the combo"); - if (ImGui::CheckboxFlags("ImGuiComboFlags_NoArrowButton", (unsigned int*)&flags, ImGuiComboFlags_NoArrowButton)) - flags &= ~ImGuiComboFlags_NoPreview; // Clear the other flag, as we cannot combine both - if (ImGui::CheckboxFlags("ImGuiComboFlags_NoPreview", (unsigned int*)&flags, ImGuiComboFlags_NoPreview)) - flags &= ~ImGuiComboFlags_NoArrowButton; // Clear the other flag, as we cannot combine both - - // General BeginCombo() API, you have full control over your selection data and display type. - // (your selection data could be an index, a pointer to the object, an id for the object, a flag stored in the object itself, etc.) - const char* items[] = { "AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK", "LLLLLLL", "MMMM", "OOOOOOO" }; - static const char* item_current = items[0]; // Here our selection is a single pointer stored outside the object. - if (ImGui::BeginCombo("combo 1", item_current, flags)) // The second parameter is the label previewed before opening the combo. - { - for (int n = 0; n < IM_ARRAYSIZE(items); n++) - { - bool is_selected = (item_current == items[n]); - if (ImGui::Selectable(items[n], is_selected)) - item_current = items[n]; - if (is_selected) - ImGui::SetItemDefaultFocus(); // Set the initial focus when opening the combo (scrolling + for keyboard navigation support in the upcoming navigation branch) - } - ImGui::EndCombo(); - } - - // Simplified one-liner Combo() API, using values packed in a single constant string - static int item_current_2 = 0; - ImGui::Combo("combo 2 (one-liner)", &item_current_2, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); - - // Simplified one-liner Combo() using an array of const char* - static int item_current_3 = -1; // If the selection isn't within 0..count, Combo won't display a preview - ImGui::Combo("combo 3 (array)", &item_current_3, items, IM_ARRAYSIZE(items)); - - // Simplified one-liner Combo() using an accessor function - struct FuncHolder { static bool ItemGetter(void* data, int idx, const char** out_str) { *out_str = ((const char**)data)[idx]; return true; } }; - static int item_current_4 = 0; - ImGui::Combo("combo 4 (function)", &item_current_4, &FuncHolder::ItemGetter, items, IM_ARRAYSIZE(items)); - - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Selectables")) - { - // Selectable() has 2 overloads: - // - The one taking "bool selected" as a read-only selection information. When Selectable() has been clicked is returns true and you can alter selection state accordingly. - // - The one taking "bool* p_selected" as a read-write selection information (convenient in some cases) - // The earlier is more flexible, as in real application your selection may be stored in a different manner (in flags within objects, as an external list, etc). - if (ImGui::TreeNode("Basic")) - { - static bool selection[5] = { false, true, false, false, false }; - ImGui::Selectable("1. I am selectable", &selection[0]); - ImGui::Selectable("2. I am selectable", &selection[1]); - ImGui::Text("3. I am not selectable"); - ImGui::Selectable("4. I am selectable", &selection[3]); - if (ImGui::Selectable("5. I am double clickable", selection[4], ImGuiSelectableFlags_AllowDoubleClick)) - if (ImGui::IsMouseDoubleClicked(0)) - selection[4] = !selection[4]; - ImGui::TreePop(); - } - if (ImGui::TreeNode("Selection State: Single Selection")) - { - static int selected = -1; - for (int n = 0; n < 5; n++) - { - char buf[32]; - sprintf(buf, "Object %d", n); - if (ImGui::Selectable(buf, selected == n)) - selected = n; - } - ImGui::TreePop(); - } - if (ImGui::TreeNode("Selection State: Multiple Selection")) - { - HelpMarker("Hold CTRL and click to select multiple items."); - static bool selection[5] = { false, false, false, false, false }; - for (int n = 0; n < 5; n++) - { - char buf[32]; - sprintf(buf, "Object %d", n); - if (ImGui::Selectable(buf, selection[n])) - { - if (!ImGui::GetIO().KeyCtrl) // Clear selection when CTRL is not held - memset(selection, 0, sizeof(selection)); - selection[n] ^= 1; - } - } - ImGui::TreePop(); - } - if (ImGui::TreeNode("Rendering more text into the same line")) - { - // Using the Selectable() override that takes "bool* p_selected" parameter and toggle your booleans automatically. - static bool selected[3] = { false, false, false }; - ImGui::Selectable("main.c", &selected[0]); ImGui::SameLine(300); ImGui::Text(" 2,345 bytes"); - ImGui::Selectable("Hello.cpp", &selected[1]); ImGui::SameLine(300); ImGui::Text("12,345 bytes"); - ImGui::Selectable("Hello.h", &selected[2]); ImGui::SameLine(300); ImGui::Text(" 2,345 bytes"); - ImGui::TreePop(); - } - if (ImGui::TreeNode("In columns")) - { - ImGui::Columns(3, NULL, false); - static bool selected[16] = {}; - for (int i = 0; i < 16; i++) - { - char label[32]; sprintf(label, "Item %d", i); - if (ImGui::Selectable(label, &selected[i])) {} - ImGui::NextColumn(); - } - ImGui::Columns(1); - ImGui::TreePop(); - } - if (ImGui::TreeNode("Grid")) - { - static bool selected[4*4] = { true, false, false, false, false, true, false, false, false, false, true, false, false, false, false, true }; - for (int i = 0; i < 4*4; i++) - { - ImGui::PushID(i); - if (ImGui::Selectable("Sailor", &selected[i], 0, ImVec2(50,50))) - { - // Note: We _unnecessarily_ test for both x/y and i here only to silence some static analyzer. The second part of each test is unnecessary. - int x = i % 4; - int y = i / 4; - if (x > 0) { selected[i - 1] ^= 1; } - if (x < 3 && i < 15) { selected[i + 1] ^= 1; } - if (y > 0 && i > 3) { selected[i - 4] ^= 1; } - if (y < 3 && i < 12) { selected[i + 4] ^= 1; } - } - if ((i % 4) < 3) ImGui::SameLine(); - ImGui::PopID(); - } - ImGui::TreePop(); - } - if (ImGui::TreeNode("Alignment")) - { - HelpMarker("By default, Selectables uses style.SelectableTextAlign but it can be overriden on a per-item basis using PushStyleVar(). You'll probably want to always keep your default situation to left-align otherwise it becomes difficult to layout multiple items on a same line"); - static bool selected[3*3] = { true, false, true, false, true, false, true, false, true }; - for (int y = 0; y < 3; y++) - { - for (int x = 0; x < 3; x++) - { - ImVec2 alignment = ImVec2((float)x / 2.0f, (float)y / 2.0f); - char name[32]; - sprintf(name, "(%.1f,%.1f)", alignment.x, alignment.y); - if (x > 0) ImGui::SameLine(); - ImGui::PushStyleVar(ImGuiStyleVar_SelectableTextAlign, alignment); - ImGui::Selectable(name, &selected[3*y+x], ImGuiSelectableFlags_None, ImVec2(80,80)); - ImGui::PopStyleVar(); - } - } - ImGui::TreePop(); - } - ImGui::TreePop(); - } - - // To wire InputText() with std::string or any other custom string type, - // see the "Text Input > Resize Callback" section of this demo, and the misc/cpp/imgui_stdlib.h file. - if (ImGui::TreeNode("Text Input")) - { - if (ImGui::TreeNode("Multi-line Text Input")) - { - // Note: we are using a fixed-sized buffer for simplicity here. See ImGuiInputTextFlags_CallbackResize - // and the code in misc/cpp/imgui_stdlib.h for how to setup InputText() for dynamically resizing strings. - static char text[1024 * 16] = - "/*\n" - " The Pentium F00F bug, shorthand for F0 0F C7 C8,\n" - " the hexadecimal encoding of one offending instruction,\n" - " more formally, the invalid operand with locked CMPXCHG8B\n" - " instruction bug, is a design flaw in the majority of\n" - " Intel Pentium, Pentium MMX, and Pentium OverDrive\n" - " processors (all in the P5 microarchitecture).\n" - "*/\n\n" - "label:\n" - "\tlock cmpxchg8b eax\n"; - - static ImGuiInputTextFlags flags = ImGuiInputTextFlags_AllowTabInput; - HelpMarker("You can use the ImGuiInputTextFlags_CallbackResize facility if you need to wire InputTextMultiline() to a dynamic string type. See misc/cpp/imgui_stdlib.h for an example. (This is not demonstrated in imgui_demo.cpp because we don't want to include in here)"); - ImGui::CheckboxFlags("ImGuiInputTextFlags_ReadOnly", (unsigned int*)&flags, ImGuiInputTextFlags_ReadOnly); - ImGui::CheckboxFlags("ImGuiInputTextFlags_AllowTabInput", (unsigned int*)&flags, ImGuiInputTextFlags_AllowTabInput); - ImGui::CheckboxFlags("ImGuiInputTextFlags_CtrlEnterForNewLine", (unsigned int*)&flags, ImGuiInputTextFlags_CtrlEnterForNewLine); - ImGui::InputTextMultiline("##source", text, IM_ARRAYSIZE(text), ImVec2(-FLT_MIN, ImGui::GetTextLineHeight() * 16), flags); - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Filtered Text Input")) - { - static char buf1[64] = ""; ImGui::InputText("default", buf1, 64); - static char buf2[64] = ""; ImGui::InputText("decimal", buf2, 64, ImGuiInputTextFlags_CharsDecimal); - static char buf3[64] = ""; ImGui::InputText("hexadecimal", buf3, 64, ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase); - static char buf4[64] = ""; ImGui::InputText("uppercase", buf4, 64, ImGuiInputTextFlags_CharsUppercase); - static char buf5[64] = ""; ImGui::InputText("no blank", buf5, 64, ImGuiInputTextFlags_CharsNoBlank); - struct TextFilters { static int FilterImGuiLetters(ImGuiInputTextCallbackData* data) { if (data->EventChar < 256 && strchr("imgui", (char)data->EventChar)) return 0; return 1; } }; - static char buf6[64] = ""; ImGui::InputText("\"imgui\" letters", buf6, 64, ImGuiInputTextFlags_CallbackCharFilter, TextFilters::FilterImGuiLetters); - - ImGui::Text("Password input"); - static char password[64] = "password123"; - ImGui::InputText("password", password, IM_ARRAYSIZE(password), ImGuiInputTextFlags_Password); - ImGui::SameLine(); HelpMarker("Display all characters as '*'.\nDisable clipboard cut and copy.\nDisable logging.\n"); - ImGui::InputTextWithHint("password (w/ hint)", "", password, IM_ARRAYSIZE(password), ImGuiInputTextFlags_Password); - ImGui::InputText("password (clear)", password, IM_ARRAYSIZE(password)); - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Resize Callback")) - { - // To wire InputText() with std::string or any other custom string type, - // you can use the ImGuiInputTextFlags_CallbackResize flag + create a custom ImGui::InputText() wrapper using your prefered type. - // See misc/cpp/imgui_stdlib.h for an implementation of this using std::string. - HelpMarker("Demonstrate using ImGuiInputTextFlags_CallbackResize to wire your resizable string type to InputText().\n\nSee misc/cpp/imgui_stdlib.h for an implementation of this for std::string."); - struct Funcs - { - static int MyResizeCallback(ImGuiInputTextCallbackData* data) - { - if (data->EventFlag == ImGuiInputTextFlags_CallbackResize) - { - ImVector* my_str = (ImVector*)data->UserData; - IM_ASSERT(my_str->begin() == data->Buf); - my_str->resize(data->BufSize); // NB: On resizing calls, generally data->BufSize == data->BufTextLen + 1 - data->Buf = my_str->begin(); - } - return 0; - } - - // Tip: Because ImGui:: is a namespace you would typicall add your own function into the namespace in your own source files. - // For example, you may add a function called ImGui::InputText(const char* label, MyString* my_str). - static bool MyInputTextMultiline(const char* label, ImVector* my_str, const ImVec2& size = ImVec2(0, 0), ImGuiInputTextFlags flags = 0) - { - IM_ASSERT((flags & ImGuiInputTextFlags_CallbackResize) == 0); - return ImGui::InputTextMultiline(label, my_str->begin(), (size_t)my_str->size(), size, flags | ImGuiInputTextFlags_CallbackResize, Funcs::MyResizeCallback, (void*)my_str); - } - }; - - // For this demo we are using ImVector as a string container. - // Note that because we need to store a terminating zero character, our size/capacity are 1 more than usually reported by a typical string class. - static ImVector my_str; - if (my_str.empty()) - my_str.push_back(0); - Funcs::MyInputTextMultiline("##MyStr", &my_str, ImVec2(-FLT_MIN, ImGui::GetTextLineHeight() * 16)); - ImGui::Text("Data: %p\nSize: %d\nCapacity: %d", (void*)my_str.begin(), my_str.size(), my_str.capacity()); - ImGui::TreePop(); - } - - ImGui::TreePop(); - } - - // Plot/Graph widgets are currently fairly limited. - // Consider writing your own plotting widget, or using a third-party one (see "Wiki->Useful Widgets", or github.com/ocornut/imgui/issues/2747) - if (ImGui::TreeNode("Plots Widgets")) - { - static bool animate = true; - ImGui::Checkbox("Animate", &animate); - - static float arr[] = { 0.6f, 0.1f, 1.0f, 0.5f, 0.92f, 0.1f, 0.2f }; - ImGui::PlotLines("Frame Times", arr, IM_ARRAYSIZE(arr)); - - // Create a dummy array of contiguous float values to plot - // Tip: If your float aren't contiguous but part of a structure, you can pass a pointer to your first float and the sizeof() of your structure in the Stride parameter. - static float values[90] = {}; - static int values_offset = 0; - static double refresh_time = 0.0; - if (!animate || refresh_time == 0.0) - refresh_time = ImGui::GetTime(); - while (refresh_time < ImGui::GetTime()) // Create dummy data at fixed 60 hz rate for the demo - { - static float phase = 0.0f; - values[values_offset] = cosf(phase); - values_offset = (values_offset+1) % IM_ARRAYSIZE(values); - phase += 0.10f*values_offset; - refresh_time += 1.0f/60.0f; - } - - // Plots can display overlay texts - // (in this example, we will display an average value) - { - float average = 0.0f; - for (int n = 0; n < IM_ARRAYSIZE(values); n++) - average += values[n]; - average /= (float)IM_ARRAYSIZE(values); - char overlay[32]; - sprintf(overlay, "avg %f", average); - ImGui::PlotLines("Lines", values, IM_ARRAYSIZE(values), values_offset, overlay, -1.0f, 1.0f, ImVec2(0,80)); - } - ImGui::PlotHistogram("Histogram", arr, IM_ARRAYSIZE(arr), 0, NULL, 0.0f, 1.0f, ImVec2(0,80)); - - // Use functions to generate output - // FIXME: This is rather awkward because current plot API only pass in indices. We probably want an API passing floats and user provide sample rate/count. - struct Funcs - { - static float Sin(void*, int i) { return sinf(i * 0.1f); } - static float Saw(void*, int i) { return (i & 1) ? 1.0f : -1.0f; } - }; - static int func_type = 0, display_count = 70; - ImGui::Separator(); - ImGui::SetNextItemWidth(100); - ImGui::Combo("func", &func_type, "Sin\0Saw\0"); - ImGui::SameLine(); - ImGui::SliderInt("Sample count", &display_count, 1, 400); - float (*func)(void*, int) = (func_type == 0) ? Funcs::Sin : Funcs::Saw; - ImGui::PlotLines("Lines", func, NULL, display_count, 0, NULL, -1.0f, 1.0f, ImVec2(0,80)); - ImGui::PlotHistogram("Histogram", func, NULL, display_count, 0, NULL, -1.0f, 1.0f, ImVec2(0,80)); - ImGui::Separator(); - - // Animate a simple progress bar - static float progress = 0.0f, progress_dir = 1.0f; - if (animate) - { - progress += progress_dir * 0.4f * ImGui::GetIO().DeltaTime; - if (progress >= +1.1f) { progress = +1.1f; progress_dir *= -1.0f; } - if (progress <= -0.1f) { progress = -0.1f; progress_dir *= -1.0f; } - } - - // Typically we would use ImVec2(-1.0f,0.0f) or ImVec2(-FLT_MIN,0.0f) to use all available width, - // or ImVec2(width,0.0f) for a specified width. ImVec2(0.0f,0.0f) uses ItemWidth. - ImGui::ProgressBar(progress, ImVec2(0.0f,0.0f)); - ImGui::SameLine(0.0f, ImGui::GetStyle().ItemInnerSpacing.x); - ImGui::Text("Progress Bar"); - - float progress_saturated = (progress < 0.0f) ? 0.0f : (progress > 1.0f) ? 1.0f : progress; - char buf[32]; - sprintf(buf, "%d/%d", (int)(progress_saturated*1753), 1753); - ImGui::ProgressBar(progress, ImVec2(0.f,0.f), buf); - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Color/Picker Widgets")) - { - static ImVec4 color = ImVec4(114.0f/255.0f, 144.0f/255.0f, 154.0f/255.0f, 200.0f/255.0f); - - static bool alpha_preview = true; - static bool alpha_half_preview = false; - static bool drag_and_drop = true; - static bool options_menu = true; - static bool hdr = false; - ImGui::Checkbox("With Alpha Preview", &alpha_preview); - ImGui::Checkbox("With Half Alpha Preview", &alpha_half_preview); - ImGui::Checkbox("With Drag and Drop", &drag_and_drop); - ImGui::Checkbox("With Options Menu", &options_menu); ImGui::SameLine(); HelpMarker("Right-click on the individual color widget to show options."); - ImGui::Checkbox("With HDR", &hdr); ImGui::SameLine(); HelpMarker("Currently all this does is to lift the 0..1 limits on dragging widgets."); - ImGuiColorEditFlags misc_flags = (hdr ? ImGuiColorEditFlags_HDR : 0) | (drag_and_drop ? 0 : ImGuiColorEditFlags_NoDragDrop) | (alpha_half_preview ? ImGuiColorEditFlags_AlphaPreviewHalf : (alpha_preview ? ImGuiColorEditFlags_AlphaPreview : 0)) | (options_menu ? 0 : ImGuiColorEditFlags_NoOptions); - - ImGui::Text("Color widget:"); - ImGui::SameLine(); HelpMarker("Click on the colored square to open a color picker.\nCTRL+click on individual component to input value.\n"); - ImGui::ColorEdit3("MyColor##1", (float*)&color, misc_flags); - - ImGui::Text("Color widget HSV with Alpha:"); - ImGui::ColorEdit4("MyColor##2", (float*)&color, ImGuiColorEditFlags_DisplayHSV | misc_flags); - - ImGui::Text("Color widget with Float Display:"); - ImGui::ColorEdit4("MyColor##2f", (float*)&color, ImGuiColorEditFlags_Float | misc_flags); - - ImGui::Text("Color button with Picker:"); - ImGui::SameLine(); HelpMarker("With the ImGuiColorEditFlags_NoInputs flag you can hide all the slider/text inputs.\nWith the ImGuiColorEditFlags_NoLabel flag you can pass a non-empty label which will only be used for the tooltip and picker popup."); - ImGui::ColorEdit4("MyColor##3", (float*)&color, ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel | misc_flags); - - ImGui::Text("Color button with Custom Picker Popup:"); - - // Generate a dummy default palette. The palette will persist and can be edited. - static bool saved_palette_init = true; - static ImVec4 saved_palette[32] = {}; - if (saved_palette_init) - { - for (int n = 0; n < IM_ARRAYSIZE(saved_palette); n++) - { - ImGui::ColorConvertHSVtoRGB(n / 31.0f, 0.8f, 0.8f, saved_palette[n].x, saved_palette[n].y, saved_palette[n].z); - saved_palette[n].w = 1.0f; // Alpha - } - saved_palette_init = false; - } - - static ImVec4 backup_color; - bool open_popup = ImGui::ColorButton("MyColor##3b", color, misc_flags); - ImGui::SameLine(0, ImGui::GetStyle().ItemInnerSpacing.x); - open_popup |= ImGui::Button("Palette"); - if (open_popup) - { - ImGui::OpenPopup("mypicker"); - backup_color = color; - } - if (ImGui::BeginPopup("mypicker")) - { - ImGui::Text("MY CUSTOM COLOR PICKER WITH AN AMAZING PALETTE!"); - ImGui::Separator(); - ImGui::ColorPicker4("##picker", (float*)&color, misc_flags | ImGuiColorEditFlags_NoSidePreview | ImGuiColorEditFlags_NoSmallPreview); - ImGui::SameLine(); - - ImGui::BeginGroup(); // Lock X position - ImGui::Text("Current"); - ImGui::ColorButton("##current", color, ImGuiColorEditFlags_NoPicker | ImGuiColorEditFlags_AlphaPreviewHalf, ImVec2(60,40)); - ImGui::Text("Previous"); - if (ImGui::ColorButton("##previous", backup_color, ImGuiColorEditFlags_NoPicker | ImGuiColorEditFlags_AlphaPreviewHalf, ImVec2(60,40))) - color = backup_color; - ImGui::Separator(); - ImGui::Text("Palette"); - for (int n = 0; n < IM_ARRAYSIZE(saved_palette); n++) - { - ImGui::PushID(n); - if ((n % 8) != 0) - ImGui::SameLine(0.0f, ImGui::GetStyle().ItemSpacing.y); - if (ImGui::ColorButton("##palette", saved_palette[n], ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_NoPicker | ImGuiColorEditFlags_NoTooltip, ImVec2(20,20))) - color = ImVec4(saved_palette[n].x, saved_palette[n].y, saved_palette[n].z, color.w); // Preserve alpha! - - // Allow user to drop colors into each palette entry - // (Note that ColorButton is already a drag source by default, unless using ImGuiColorEditFlags_NoDragDrop) - if (ImGui::BeginDragDropTarget()) - { - if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F)) - memcpy((float*)&saved_palette[n], payload->Data, sizeof(float) * 3); - if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F)) - memcpy((float*)&saved_palette[n], payload->Data, sizeof(float) * 4); - ImGui::EndDragDropTarget(); - } - - ImGui::PopID(); - } - ImGui::EndGroup(); - ImGui::EndPopup(); - } - - ImGui::Text("Color button only:"); - static bool no_border = false; - ImGui::Checkbox("ImGuiColorEditFlags_NoBorder", &no_border); - ImGui::ColorButton("MyColor##3c", *(ImVec4*)&color, misc_flags | (no_border ? ImGuiColorEditFlags_NoBorder : 0), ImVec2(80,80)); - - ImGui::Text("Color picker:"); - static bool alpha = true; - static bool alpha_bar = true; - static bool side_preview = true; - static bool ref_color = false; - static ImVec4 ref_color_v(1.0f,0.0f,1.0f,0.5f); - static int display_mode = 0; - static int picker_mode = 0; - ImGui::Checkbox("With Alpha", &alpha); - ImGui::Checkbox("With Alpha Bar", &alpha_bar); - ImGui::Checkbox("With Side Preview", &side_preview); - if (side_preview) - { - ImGui::SameLine(); - ImGui::Checkbox("With Ref Color", &ref_color); - if (ref_color) - { - ImGui::SameLine(); - ImGui::ColorEdit4("##RefColor", &ref_color_v.x, ImGuiColorEditFlags_NoInputs | misc_flags); - } - } - ImGui::Combo("Display Mode", &display_mode, "Auto/Current\0None\0RGB Only\0HSV Only\0Hex Only\0"); - ImGui::SameLine(); HelpMarker("ColorEdit defaults to displaying RGB inputs if you don't specify a display mode, but the user can change it with a right-click.\n\nColorPicker defaults to displaying RGB+HSV+Hex if you don't specify a display mode.\n\nYou can change the defaults using SetColorEditOptions()."); - ImGui::Combo("Picker Mode", &picker_mode, "Auto/Current\0Hue bar + SV rect\0Hue wheel + SV triangle\0"); - ImGui::SameLine(); HelpMarker("User can right-click the picker to change mode."); - ImGuiColorEditFlags flags = misc_flags; - if (!alpha) flags |= ImGuiColorEditFlags_NoAlpha; // This is by default if you call ColorPicker3() instead of ColorPicker4() - if (alpha_bar) flags |= ImGuiColorEditFlags_AlphaBar; - if (!side_preview) flags |= ImGuiColorEditFlags_NoSidePreview; - if (picker_mode == 1) flags |= ImGuiColorEditFlags_PickerHueBar; - if (picker_mode == 2) flags |= ImGuiColorEditFlags_PickerHueWheel; - if (display_mode == 1) flags |= ImGuiColorEditFlags_NoInputs; // Disable all RGB/HSV/Hex displays - if (display_mode == 2) flags |= ImGuiColorEditFlags_DisplayRGB; // Override display mode - if (display_mode == 3) flags |= ImGuiColorEditFlags_DisplayHSV; - if (display_mode == 4) flags |= ImGuiColorEditFlags_DisplayHex; - ImGui::ColorPicker4("MyColor##4", (float*)&color, flags, ref_color ? &ref_color_v.x : NULL); - - ImGui::Text("Programmatically set defaults:"); - ImGui::SameLine(); HelpMarker("SetColorEditOptions() is designed to allow you to set boot-time default.\nWe don't have Push/Pop functions because you can force options on a per-widget basis if needed, and the user can change non-forced ones with the options menu.\nWe don't have a getter to avoid encouraging you to persistently save values that aren't forward-compatible."); - if (ImGui::Button("Default: Uint8 + HSV + Hue Bar")) - ImGui::SetColorEditOptions(ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_DisplayHSV | ImGuiColorEditFlags_PickerHueBar); - if (ImGui::Button("Default: Float + HDR + Hue Wheel")) - ImGui::SetColorEditOptions(ImGuiColorEditFlags_Float | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_PickerHueWheel); - - // HSV encoded support (to avoid RGB<>HSV round trips and singularities when S==0 or V==0) - static ImVec4 color_stored_as_hsv(0.23f, 1.0f, 1.0f, 1.0f); - ImGui::Spacing(); - ImGui::Text("HSV encoded colors"); - ImGui::SameLine(); HelpMarker("By default, colors are given to ColorEdit and ColorPicker in RGB, but ImGuiColorEditFlags_InputHSV allows you to store colors as HSV and pass them to ColorEdit and ColorPicker as HSV. This comes with the added benefit that you can manipulate hue values with the picker even when saturation or value are zero."); - ImGui::Text("Color widget with InputHSV:"); - ImGui::ColorEdit4("HSV shown as RGB##1", (float*)&color_stored_as_hsv, ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_InputHSV | ImGuiColorEditFlags_Float); - ImGui::ColorEdit4("HSV shown as HSV##1", (float*)&color_stored_as_hsv, ImGuiColorEditFlags_DisplayHSV | ImGuiColorEditFlags_InputHSV | ImGuiColorEditFlags_Float); - ImGui::DragFloat4("Raw HSV values", (float*)&color_stored_as_hsv, 0.01f, 0.0f, 1.0f); - - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Range Widgets")) - { - static float begin = 10, end = 90; - static int begin_i = 100, end_i = 1000; - ImGui::DragFloatRange2("range", &begin, &end, 0.25f, 0.0f, 100.0f, "Min: %.1f %%", "Max: %.1f %%"); - ImGui::DragIntRange2("range int (no bounds)", &begin_i, &end_i, 5, 0, 0, "Min: %d units", "Max: %d units"); - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Data Types")) - { - // The DragScalar/InputScalar/SliderScalar functions allow various data types: signed/unsigned int/long long and float/double - // To avoid polluting the public API with all possible combinations, we use the ImGuiDataType enum to pass the type, - // and passing all arguments by address. - // This is the reason the test code below creates local variables to hold "zero" "one" etc. for each types. - // In practice, if you frequently use a given type that is not covered by the normal API entry points, you can wrap it - // yourself inside a 1 line function which can take typed argument as value instead of void*, and then pass their address - // to the generic function. For example: - // bool MySliderU64(const char *label, u64* value, u64 min = 0, u64 max = 0, const char* format = "%lld") - // { - // return SliderScalar(label, ImGuiDataType_U64, value, &min, &max, format); - // } - - // Limits (as helper variables that we can take the address of) - // Note that the SliderScalar function has a maximum usable range of half the natural type maximum, hence the /2 below. - #ifndef LLONG_MIN - ImS64 LLONG_MIN = -9223372036854775807LL - 1; - ImS64 LLONG_MAX = 9223372036854775807LL; - ImU64 ULLONG_MAX = (2ULL * 9223372036854775807LL + 1); - #endif - const char s8_zero = 0, s8_one = 1, s8_fifty = 50, s8_min = -128, s8_max = 127; - const ImU8 u8_zero = 0, u8_one = 1, u8_fifty = 50, u8_min = 0, u8_max = 255; - const short s16_zero = 0, s16_one = 1, s16_fifty = 50, s16_min = -32768, s16_max = 32767; - const ImU16 u16_zero = 0, u16_one = 1, u16_fifty = 50, u16_min = 0, u16_max = 65535; - const ImS32 s32_zero = 0, s32_one = 1, s32_fifty = 50, s32_min = INT_MIN/2, s32_max = INT_MAX/2, s32_hi_a = INT_MAX/2 - 100, s32_hi_b = INT_MAX/2; - const ImU32 u32_zero = 0, u32_one = 1, u32_fifty = 50, u32_min = 0, u32_max = UINT_MAX/2, u32_hi_a = UINT_MAX/2 - 100, u32_hi_b = UINT_MAX/2; - const ImS64 s64_zero = 0, s64_one = 1, s64_fifty = 50, s64_min = LLONG_MIN/2, s64_max = LLONG_MAX/2, s64_hi_a = LLONG_MAX/2 - 100, s64_hi_b = LLONG_MAX/2; - const ImU64 u64_zero = 0, u64_one = 1, u64_fifty = 50, u64_min = 0, u64_max = ULLONG_MAX/2, u64_hi_a = ULLONG_MAX/2 - 100, u64_hi_b = ULLONG_MAX/2; - const float f32_zero = 0.f, f32_one = 1.f, f32_lo_a = -10000000000.0f, f32_hi_a = +10000000000.0f; - const double f64_zero = 0., f64_one = 1., f64_lo_a = -1000000000000000.0, f64_hi_a = +1000000000000000.0; - - // State - static char s8_v = 127; - static ImU8 u8_v = 255; - static short s16_v = 32767; - static ImU16 u16_v = 65535; - static ImS32 s32_v = -1; - static ImU32 u32_v = (ImU32)-1; - static ImS64 s64_v = -1; - static ImU64 u64_v = (ImU64)-1; - static float f32_v = 0.123f; - static double f64_v = 90000.01234567890123456789; - - const float drag_speed = 0.2f; - static bool drag_clamp = false; - ImGui::Text("Drags:"); - ImGui::Checkbox("Clamp integers to 0..50", &drag_clamp); ImGui::SameLine(); HelpMarker("As with every widgets in dear imgui, we never modify values unless there is a user interaction.\nYou can override the clamping limits by using CTRL+Click to input a value."); - ImGui::DragScalar("drag s8", ImGuiDataType_S8, &s8_v, drag_speed, drag_clamp ? &s8_zero : NULL, drag_clamp ? &s8_fifty : NULL); - ImGui::DragScalar("drag u8", ImGuiDataType_U8, &u8_v, drag_speed, drag_clamp ? &u8_zero : NULL, drag_clamp ? &u8_fifty : NULL, "%u ms"); - ImGui::DragScalar("drag s16", ImGuiDataType_S16, &s16_v, drag_speed, drag_clamp ? &s16_zero : NULL, drag_clamp ? &s16_fifty : NULL); - ImGui::DragScalar("drag u16", ImGuiDataType_U16, &u16_v, drag_speed, drag_clamp ? &u16_zero : NULL, drag_clamp ? &u16_fifty : NULL, "%u ms"); - ImGui::DragScalar("drag s32", ImGuiDataType_S32, &s32_v, drag_speed, drag_clamp ? &s32_zero : NULL, drag_clamp ? &s32_fifty : NULL); - ImGui::DragScalar("drag u32", ImGuiDataType_U32, &u32_v, drag_speed, drag_clamp ? &u32_zero : NULL, drag_clamp ? &u32_fifty : NULL, "%u ms"); - ImGui::DragScalar("drag s64", ImGuiDataType_S64, &s64_v, drag_speed, drag_clamp ? &s64_zero : NULL, drag_clamp ? &s64_fifty : NULL); - ImGui::DragScalar("drag u64", ImGuiDataType_U64, &u64_v, drag_speed, drag_clamp ? &u64_zero : NULL, drag_clamp ? &u64_fifty : NULL); - ImGui::DragScalar("drag float", ImGuiDataType_Float, &f32_v, 0.005f, &f32_zero, &f32_one, "%f", 1.0f); - ImGui::DragScalar("drag float ^2", ImGuiDataType_Float, &f32_v, 0.005f, &f32_zero, &f32_one, "%f", 2.0f); ImGui::SameLine(); HelpMarker("You can use the 'power' parameter to increase tweaking precision on one side of the range."); - ImGui::DragScalar("drag double", ImGuiDataType_Double, &f64_v, 0.0005f, &f64_zero, NULL, "%.10f grams", 1.0f); - ImGui::DragScalar("drag double ^2", ImGuiDataType_Double, &f64_v, 0.0005f, &f64_zero, &f64_one, "0 < %.10f < 1", 2.0f); - - ImGui::Text("Sliders"); - ImGui::SliderScalar("slider s8 full", ImGuiDataType_S8, &s8_v, &s8_min, &s8_max, "%d"); - ImGui::SliderScalar("slider u8 full", ImGuiDataType_U8, &u8_v, &u8_min, &u8_max, "%u"); - ImGui::SliderScalar("slider s16 full", ImGuiDataType_S16, &s16_v, &s16_min, &s16_max, "%d"); - ImGui::SliderScalar("slider u16 full", ImGuiDataType_U16, &u16_v, &u16_min, &u16_max, "%u"); - ImGui::SliderScalar("slider s32 low", ImGuiDataType_S32, &s32_v, &s32_zero, &s32_fifty,"%d"); - ImGui::SliderScalar("slider s32 high", ImGuiDataType_S32, &s32_v, &s32_hi_a, &s32_hi_b, "%d"); - ImGui::SliderScalar("slider s32 full", ImGuiDataType_S32, &s32_v, &s32_min, &s32_max, "%d"); - ImGui::SliderScalar("slider u32 low", ImGuiDataType_U32, &u32_v, &u32_zero, &u32_fifty,"%u"); - ImGui::SliderScalar("slider u32 high", ImGuiDataType_U32, &u32_v, &u32_hi_a, &u32_hi_b, "%u"); - ImGui::SliderScalar("slider u32 full", ImGuiDataType_U32, &u32_v, &u32_min, &u32_max, "%u"); - ImGui::SliderScalar("slider s64 low", ImGuiDataType_S64, &s64_v, &s64_zero, &s64_fifty,"%I64d"); - ImGui::SliderScalar("slider s64 high", ImGuiDataType_S64, &s64_v, &s64_hi_a, &s64_hi_b, "%I64d"); - ImGui::SliderScalar("slider s64 full", ImGuiDataType_S64, &s64_v, &s64_min, &s64_max, "%I64d"); - ImGui::SliderScalar("slider u64 low", ImGuiDataType_U64, &u64_v, &u64_zero, &u64_fifty,"%I64u ms"); - ImGui::SliderScalar("slider u64 high", ImGuiDataType_U64, &u64_v, &u64_hi_a, &u64_hi_b, "%I64u ms"); - ImGui::SliderScalar("slider u64 full", ImGuiDataType_U64, &u64_v, &u64_min, &u64_max, "%I64u ms"); - ImGui::SliderScalar("slider float low", ImGuiDataType_Float, &f32_v, &f32_zero, &f32_one); - ImGui::SliderScalar("slider float low^2", ImGuiDataType_Float, &f32_v, &f32_zero, &f32_one, "%.10f", 2.0f); - ImGui::SliderScalar("slider float high", ImGuiDataType_Float, &f32_v, &f32_lo_a, &f32_hi_a, "%e"); - ImGui::SliderScalar("slider double low", ImGuiDataType_Double, &f64_v, &f64_zero, &f64_one, "%.10f grams", 1.0f); - ImGui::SliderScalar("slider double low^2",ImGuiDataType_Double, &f64_v, &f64_zero, &f64_one, "%.10f", 2.0f); - ImGui::SliderScalar("slider double high", ImGuiDataType_Double, &f64_v, &f64_lo_a, &f64_hi_a, "%e grams", 1.0f); - - static bool inputs_step = true; - ImGui::Text("Inputs"); - ImGui::Checkbox("Show step buttons", &inputs_step); - ImGui::InputScalar("input s8", ImGuiDataType_S8, &s8_v, inputs_step ? &s8_one : NULL, NULL, "%d"); - ImGui::InputScalar("input u8", ImGuiDataType_U8, &u8_v, inputs_step ? &u8_one : NULL, NULL, "%u"); - ImGui::InputScalar("input s16", ImGuiDataType_S16, &s16_v, inputs_step ? &s16_one : NULL, NULL, "%d"); - ImGui::InputScalar("input u16", ImGuiDataType_U16, &u16_v, inputs_step ? &u16_one : NULL, NULL, "%u"); - ImGui::InputScalar("input s32", ImGuiDataType_S32, &s32_v, inputs_step ? &s32_one : NULL, NULL, "%d"); - ImGui::InputScalar("input s32 hex", ImGuiDataType_S32, &s32_v, inputs_step ? &s32_one : NULL, NULL, "%08X", ImGuiInputTextFlags_CharsHexadecimal); - ImGui::InputScalar("input u32", ImGuiDataType_U32, &u32_v, inputs_step ? &u32_one : NULL, NULL, "%u"); - ImGui::InputScalar("input u32 hex", ImGuiDataType_U32, &u32_v, inputs_step ? &u32_one : NULL, NULL, "%08X", ImGuiInputTextFlags_CharsHexadecimal); - ImGui::InputScalar("input s64", ImGuiDataType_S64, &s64_v, inputs_step ? &s64_one : NULL); - ImGui::InputScalar("input u64", ImGuiDataType_U64, &u64_v, inputs_step ? &u64_one : NULL); - ImGui::InputScalar("input float", ImGuiDataType_Float, &f32_v, inputs_step ? &f32_one : NULL); - ImGui::InputScalar("input double", ImGuiDataType_Double, &f64_v, inputs_step ? &f64_one : NULL); - - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Multi-component Widgets")) - { - static float vec4f[4] = { 0.10f, 0.20f, 0.30f, 0.44f }; - static int vec4i[4] = { 1, 5, 100, 255 }; - - ImGui::InputFloat2("input float2", vec4f); - ImGui::DragFloat2("drag float2", vec4f, 0.01f, 0.0f, 1.0f); - ImGui::SliderFloat2("slider float2", vec4f, 0.0f, 1.0f); - ImGui::InputInt2("input int2", vec4i); - ImGui::DragInt2("drag int2", vec4i, 1, 0, 255); - ImGui::SliderInt2("slider int2", vec4i, 0, 255); - ImGui::Spacing(); - - ImGui::InputFloat3("input float3", vec4f); - ImGui::DragFloat3("drag float3", vec4f, 0.01f, 0.0f, 1.0f); - ImGui::SliderFloat3("slider float3", vec4f, 0.0f, 1.0f); - ImGui::InputInt3("input int3", vec4i); - ImGui::DragInt3("drag int3", vec4i, 1, 0, 255); - ImGui::SliderInt3("slider int3", vec4i, 0, 255); - ImGui::Spacing(); - - ImGui::InputFloat4("input float4", vec4f); - ImGui::DragFloat4("drag float4", vec4f, 0.01f, 0.0f, 1.0f); - ImGui::SliderFloat4("slider float4", vec4f, 0.0f, 1.0f); - ImGui::InputInt4("input int4", vec4i); - ImGui::DragInt4("drag int4", vec4i, 1, 0, 255); - ImGui::SliderInt4("slider int4", vec4i, 0, 255); - - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Vertical Sliders")) - { - const float spacing = 4; - ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(spacing, spacing)); - - static int int_value = 0; - ImGui::VSliderInt("##int", ImVec2(18,160), &int_value, 0, 5); - ImGui::SameLine(); - - static float values[7] = { 0.0f, 0.60f, 0.35f, 0.9f, 0.70f, 0.20f, 0.0f }; - ImGui::PushID("set1"); - for (int i = 0; i < 7; i++) - { - if (i > 0) ImGui::SameLine(); - ImGui::PushID(i); - ImGui::PushStyleColor(ImGuiCol_FrameBg, (ImVec4)ImColor::HSV(i/7.0f, 0.5f, 0.5f)); - ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, (ImVec4)ImColor::HSV(i/7.0f, 0.6f, 0.5f)); - ImGui::PushStyleColor(ImGuiCol_FrameBgActive, (ImVec4)ImColor::HSV(i/7.0f, 0.7f, 0.5f)); - ImGui::PushStyleColor(ImGuiCol_SliderGrab, (ImVec4)ImColor::HSV(i/7.0f, 0.9f, 0.9f)); - ImGui::VSliderFloat("##v", ImVec2(18,160), &values[i], 0.0f, 1.0f, ""); - if (ImGui::IsItemActive() || ImGui::IsItemHovered()) - ImGui::SetTooltip("%.3f", values[i]); - ImGui::PopStyleColor(4); - ImGui::PopID(); - } - ImGui::PopID(); - - ImGui::SameLine(); - ImGui::PushID("set2"); - static float values2[4] = { 0.20f, 0.80f, 0.40f, 0.25f }; - const int rows = 3; - const ImVec2 small_slider_size(18, (float)(int)((160.0f - (rows - 1) * spacing) / rows)); - for (int nx = 0; nx < 4; nx++) - { - if (nx > 0) ImGui::SameLine(); - ImGui::BeginGroup(); - for (int ny = 0; ny < rows; ny++) - { - ImGui::PushID(nx*rows+ny); - ImGui::VSliderFloat("##v", small_slider_size, &values2[nx], 0.0f, 1.0f, ""); - if (ImGui::IsItemActive() || ImGui::IsItemHovered()) - ImGui::SetTooltip("%.3f", values2[nx]); - ImGui::PopID(); - } - ImGui::EndGroup(); - } - ImGui::PopID(); - - ImGui::SameLine(); - ImGui::PushID("set3"); - for (int i = 0; i < 4; i++) - { - if (i > 0) ImGui::SameLine(); - ImGui::PushID(i); - ImGui::PushStyleVar(ImGuiStyleVar_GrabMinSize, 40); - ImGui::VSliderFloat("##v", ImVec2(40,160), &values[i], 0.0f, 1.0f, "%.2f\nsec"); - ImGui::PopStyleVar(); - ImGui::PopID(); - } - ImGui::PopID(); - ImGui::PopStyleVar(); - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Drag and Drop")) - { - if (ImGui::TreeNode("Drag and drop in standard widgets")) - { - // ColorEdit widgets automatically act as drag source and drag target. - // They are using standardized payload strings IMGUI_PAYLOAD_TYPE_COLOR_3F and IMGUI_PAYLOAD_TYPE_COLOR_4F to allow your own widgets - // to use colors in their drag and drop interaction. Also see the demo in Color Picker -> Palette demo. - HelpMarker("You can drag from the colored squares."); - static float col1[3] = { 1.0f, 0.0f, 0.2f }; - static float col2[4] = { 0.4f, 0.7f, 0.0f, 0.5f }; - ImGui::ColorEdit3("color 1", col1); - ImGui::ColorEdit4("color 2", col2); - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Drag and drop to copy/swap items")) - { - enum Mode - { - Mode_Copy, - Mode_Move, - Mode_Swap - }; - static int mode = 0; - if (ImGui::RadioButton("Copy", mode == Mode_Copy)) { mode = Mode_Copy; } ImGui::SameLine(); - if (ImGui::RadioButton("Move", mode == Mode_Move)) { mode = Mode_Move; } ImGui::SameLine(); - if (ImGui::RadioButton("Swap", mode == Mode_Swap)) { mode = Mode_Swap; } - static const char* names[9] = { "Bobby", "Beatrice", "Betty", "Brianna", "Barry", "Bernard", "Bibi", "Blaine", "Bryn" }; - for (int n = 0; n < IM_ARRAYSIZE(names); n++) - { - ImGui::PushID(n); - if ((n % 3) != 0) - ImGui::SameLine(); - ImGui::Button(names[n], ImVec2(60,60)); - - // Our buttons are both drag sources and drag targets here! - if (ImGui::BeginDragDropSource(ImGuiDragDropFlags_None)) - { - ImGui::SetDragDropPayload("DND_DEMO_CELL", &n, sizeof(int)); // Set payload to carry the index of our item (could be anything) - if (mode == Mode_Copy) { ImGui::Text("Copy %s", names[n]); } // Display preview (could be anything, e.g. when dragging an image we could decide to display the filename and a small preview of the image, etc.) - if (mode == Mode_Move) { ImGui::Text("Move %s", names[n]); } - if (mode == Mode_Swap) { ImGui::Text("Swap %s", names[n]); } - ImGui::EndDragDropSource(); - } - if (ImGui::BeginDragDropTarget()) - { - if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload("DND_DEMO_CELL")) - { - IM_ASSERT(payload->DataSize == sizeof(int)); - int payload_n = *(const int*)payload->Data; - if (mode == Mode_Copy) - { - names[n] = names[payload_n]; - } - if (mode == Mode_Move) - { - names[n] = names[payload_n]; - names[payload_n] = ""; - } - if (mode == Mode_Swap) - { - const char* tmp = names[n]; - names[n] = names[payload_n]; - names[payload_n] = tmp; - } - } - ImGui::EndDragDropTarget(); - } - ImGui::PopID(); - } - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Drag to reorder items (simple)")) - { - // Simple reordering - HelpMarker("We don't use the drag and drop api at all here! Instead we query when the item is held but not hovered, and order items accordingly."); - static const char* item_names[] = { "Item One", "Item Two", "Item Three", "Item Four", "Item Five" }; - for (int n = 0; n < IM_ARRAYSIZE(item_names); n++) - { - const char* item = item_names[n]; - ImGui::Selectable(item); - - if (ImGui::IsItemActive() && !ImGui::IsItemHovered()) - { - int n_next = n + (ImGui::GetMouseDragDelta(0).y < 0.f ? -1 : 1); - if (n_next >= 0 && n_next < IM_ARRAYSIZE(item_names)) - { - item_names[n] = item_names[n_next]; - item_names[n_next] = item; - ImGui::ResetMouseDragDelta(); - } - } - } - ImGui::TreePop(); - } - - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Querying Status (Active/Focused/Hovered etc.)")) - { - // Submit an item (various types available) so we can query their status in the following block. - static int item_type = 1; - ImGui::Combo("Item Type", &item_type, "Text\0Button\0Button (w/ repeat)\0Checkbox\0SliderFloat\0InputText\0InputFloat\0InputFloat3\0ColorEdit4\0MenuItem\0TreeNode\0TreeNode (w/ double-click)\0ListBox\0", 20); - ImGui::SameLine(); - HelpMarker("Testing how various types of items are interacting with the IsItemXXX functions."); - bool ret = false; - static bool b = false; - static float col4f[4] = { 1.0f, 0.5, 0.0f, 1.0f }; - static char str[16] = {}; - if (item_type == 0) { ImGui::Text("ITEM: Text"); } // Testing text items with no identifier/interaction - if (item_type == 1) { ret = ImGui::Button("ITEM: Button"); } // Testing button - if (item_type == 2) { ImGui::PushButtonRepeat(true); ret = ImGui::Button("ITEM: Button"); ImGui::PopButtonRepeat(); } // Testing button (with repeater) - if (item_type == 3) { ret = ImGui::Checkbox("ITEM: Checkbox", &b); } // Testing checkbox - if (item_type == 4) { ret = ImGui::SliderFloat("ITEM: SliderFloat", &col4f[0], 0.0f, 1.0f); } // Testing basic item - if (item_type == 5) { ret = ImGui::InputText("ITEM: InputText", &str[0], IM_ARRAYSIZE(str)); } // Testing input text (which handles tabbing) - if (item_type == 6) { ret = ImGui::InputFloat("ITEM: InputFloat", col4f, 1.0f); } // Testing +/- buttons on scalar input - if (item_type == 7) { ret = ImGui::InputFloat3("ITEM: InputFloat3", col4f); } // Testing multi-component items (IsItemXXX flags are reported merged) - if (item_type == 8) { ret = ImGui::ColorEdit4("ITEM: ColorEdit4", col4f); } // Testing multi-component items (IsItemXXX flags are reported merged) - if (item_type == 9) { ret = ImGui::MenuItem("ITEM: MenuItem"); } // Testing menu item (they use ImGuiButtonFlags_PressedOnRelease button policy) - if (item_type == 10){ ret = ImGui::TreeNode("ITEM: TreeNode"); if (ret) ImGui::TreePop(); } // Testing tree node - if (item_type == 11){ ret = ImGui::TreeNodeEx("ITEM: TreeNode w/ ImGuiTreeNodeFlags_OpenOnDoubleClick", ImGuiTreeNodeFlags_OpenOnDoubleClick | ImGuiTreeNodeFlags_NoTreePushOnOpen); } // Testing tree node with ImGuiButtonFlags_PressedOnDoubleClick button policy. - if (item_type == 12){ const char* items[] = { "Apple", "Banana", "Cherry", "Kiwi" }; static int current = 1; ret = ImGui::ListBox("ITEM: ListBox", ¤t, items, IM_ARRAYSIZE(items), IM_ARRAYSIZE(items)); } - - // Display the value of IsItemHovered() and other common item state functions. - // Note that the ImGuiHoveredFlags_XXX flags can be combined. - // Because BulletText is an item itself and that would affect the output of IsItemXXX functions, - // we query every state in a single call to avoid storing them and to simplify the code - ImGui::BulletText( - "Return value = %d\n" - "IsItemFocused() = %d\n" - "IsItemHovered() = %d\n" - "IsItemHovered(_AllowWhenBlockedByPopup) = %d\n" - "IsItemHovered(_AllowWhenBlockedByActiveItem) = %d\n" - "IsItemHovered(_AllowWhenOverlapped) = %d\n" - "IsItemHovered(_RectOnly) = %d\n" - "IsItemActive() = %d\n" - "IsItemEdited() = %d\n" - "IsItemActivated() = %d\n" - "IsItemDeactivated() = %d\n" - "IsItemDeactivatedAfterEdit() = %d\n" - "IsItemVisible() = %d\n" - "IsItemClicked() = %d\n" - "IsItemToggledOpen() = %d\n" - "GetItemRectMin() = (%.1f, %.1f)\n" - "GetItemRectMax() = (%.1f, %.1f)\n" - "GetItemRectSize() = (%.1f, %.1f)", - ret, - ImGui::IsItemFocused(), - ImGui::IsItemHovered(), - ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup), - ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByActiveItem), - ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenOverlapped), - ImGui::IsItemHovered(ImGuiHoveredFlags_RectOnly), - ImGui::IsItemActive(), - ImGui::IsItemEdited(), - ImGui::IsItemActivated(), - ImGui::IsItemDeactivated(), - ImGui::IsItemDeactivatedAfterEdit(), - ImGui::IsItemVisible(), - ImGui::IsItemClicked(), - ImGui::IsItemToggledOpen(), - ImGui::GetItemRectMin().x, ImGui::GetItemRectMin().y, - ImGui::GetItemRectMax().x, ImGui::GetItemRectMax().y, - ImGui::GetItemRectSize().x, ImGui::GetItemRectSize().y - ); - - static bool embed_all_inside_a_child_window = false; - ImGui::Checkbox("Embed everything inside a child window (for additional testing)", &embed_all_inside_a_child_window); - if (embed_all_inside_a_child_window) - ImGui::BeginChild("outer_child", ImVec2(0, ImGui::GetFontSize() * 20), true); - - // Testing IsWindowFocused() function with its various flags. - // Note that the ImGuiFocusedFlags_XXX flags can be combined. - ImGui::BulletText( - "IsWindowFocused() = %d\n" - "IsWindowFocused(_ChildWindows) = %d\n" - "IsWindowFocused(_ChildWindows|_RootWindow) = %d\n" - "IsWindowFocused(_RootWindow) = %d\n" - "IsWindowFocused(_AnyWindow) = %d\n", - ImGui::IsWindowFocused(), - ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows), - ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows | ImGuiFocusedFlags_RootWindow), - ImGui::IsWindowFocused(ImGuiFocusedFlags_RootWindow), - ImGui::IsWindowFocused(ImGuiFocusedFlags_AnyWindow)); - - // Testing IsWindowHovered() function with its various flags. - // Note that the ImGuiHoveredFlags_XXX flags can be combined. - ImGui::BulletText( - "IsWindowHovered() = %d\n" - "IsWindowHovered(_AllowWhenBlockedByPopup) = %d\n" - "IsWindowHovered(_AllowWhenBlockedByActiveItem) = %d\n" - "IsWindowHovered(_ChildWindows) = %d\n" - "IsWindowHovered(_ChildWindows|_RootWindow) = %d\n" - "IsWindowHovered(_ChildWindows|_AllowWhenBlockedByPopup) = %d\n" - "IsWindowHovered(_RootWindow) = %d\n" - "IsWindowHovered(_AnyWindow) = %d\n", - ImGui::IsWindowHovered(), - ImGui::IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup), - ImGui::IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByActiveItem), - ImGui::IsWindowHovered(ImGuiHoveredFlags_ChildWindows), - ImGui::IsWindowHovered(ImGuiHoveredFlags_ChildWindows | ImGuiHoveredFlags_RootWindow), - ImGui::IsWindowHovered(ImGuiHoveredFlags_ChildWindows | ImGuiHoveredFlags_AllowWhenBlockedByPopup), - ImGui::IsWindowHovered(ImGuiHoveredFlags_RootWindow), - ImGui::IsWindowHovered(ImGuiHoveredFlags_AnyWindow)); - - ImGui::BeginChild("child", ImVec2(0, 50), true); - ImGui::Text("This is another child window for testing the _ChildWindows flag."); - ImGui::EndChild(); - if (embed_all_inside_a_child_window) - ImGui::EndChild(); - - static char dummy_str[] = "This is a dummy field to be able to tab-out of the widgets above."; - ImGui::InputText("dummy", dummy_str, IM_ARRAYSIZE(dummy_str), ImGuiInputTextFlags_ReadOnly); - - // Calling IsItemHovered() after begin returns the hovered status of the title bar. - // This is useful in particular if you want to create a context menu (with BeginPopupContextItem) associated to the title bar of a window. - static bool test_window = false; - ImGui::Checkbox("Hovered/Active tests after Begin() for title bar testing", &test_window); - if (test_window) - { - ImGui::Begin("Title bar Hovered/Active tests", &test_window); - if (ImGui::BeginPopupContextItem()) // <-- This is using IsItemHovered() - { - if (ImGui::MenuItem("Close")) { test_window = false; } - ImGui::EndPopup(); - } - ImGui::Text( - "IsItemHovered() after begin = %d (== is title bar hovered)\n" - "IsItemActive() after begin = %d (== is window being clicked/moved)\n", - ImGui::IsItemHovered(), ImGui::IsItemActive()); - ImGui::End(); - } - - ImGui::TreePop(); - } -} - -static void ShowDemoWindowLayout() -{ - if (!ImGui::CollapsingHeader("Layout")) - return; - - if (ImGui::TreeNode("Child windows")) - { - HelpMarker("Use child windows to begin into a self-contained independent scrolling/clipping regions within a host window."); - static bool disable_mouse_wheel = false; - static bool disable_menu = false; - ImGui::Checkbox("Disable Mouse Wheel", &disable_mouse_wheel); - ImGui::Checkbox("Disable Menu", &disable_menu); - - static int line = 50; - bool goto_line = ImGui::Button("Goto"); - ImGui::SameLine(); - ImGui::SetNextItemWidth(100); - goto_line |= ImGui::InputInt("##Line", &line, 0, 0, ImGuiInputTextFlags_EnterReturnsTrue); - - // Child 1: no border, enable horizontal scrollbar - { - ImGuiWindowFlags window_flags = ImGuiWindowFlags_HorizontalScrollbar | (disable_mouse_wheel ? ImGuiWindowFlags_NoScrollWithMouse : 0); - ImGui::BeginChild("ChildL", ImVec2(ImGui::GetWindowContentRegionWidth() * 0.5f, 260), false, window_flags); - for (int i = 0; i < 100; i++) - { - ImGui::Text("%04d: scrollable region", i); - if (goto_line && line == i) - ImGui::SetScrollHereY(); - } - if (goto_line && line >= 100) - ImGui::SetScrollHereY(); - ImGui::EndChild(); - } - - ImGui::SameLine(); - - // Child 2: rounded border - { - ImGuiWindowFlags window_flags = (disable_mouse_wheel ? ImGuiWindowFlags_NoScrollWithMouse : 0) | (disable_menu ? 0 : ImGuiWindowFlags_MenuBar); - ImGui::PushStyleVar(ImGuiStyleVar_ChildRounding, 5.0f); - ImGui::BeginChild("ChildR", ImVec2(0, 260), true, window_flags); - if (!disable_menu && ImGui::BeginMenuBar()) - { - if (ImGui::BeginMenu("Menu")) - { - ShowExampleMenuFile(); - ImGui::EndMenu(); - } - ImGui::EndMenuBar(); - } - ImGui::Columns(2); - for (int i = 0; i < 100; i++) - { - char buf[32]; - sprintf(buf, "%03d", i); - ImGui::Button(buf, ImVec2(-FLT_MIN, 0.0f)); - ImGui::NextColumn(); - } - ImGui::EndChild(); - ImGui::PopStyleVar(); - } - - ImGui::Separator(); - - // Demonstrate a few extra things - // - Changing ImGuiCol_ChildBg (which is transparent black in default styles) - // - Using SetCursorPos() to position the child window (because the child window is an item from the POV of the parent window) - // You can also call SetNextWindowPos() to position the child window. The parent window will effectively layout from this position. - // - Using ImGui::GetItemRectMin/Max() to query the "item" state (because the child window is an item from the POV of the parent window) - // See "Widgets" -> "Querying Status (Active/Focused/Hovered etc.)" section for more details about this. - { - ImGui::SetCursorPosX(ImGui::GetCursorPosX() + 10); - ImGui::PushStyleColor(ImGuiCol_ChildBg, IM_COL32(255, 0, 0, 100)); - ImGui::BeginChild("Red", ImVec2(200, 100), true, ImGuiWindowFlags_None); - for (int n = 0; n < 50; n++) - ImGui::Text("Some test %d", n); - ImGui::EndChild(); - ImVec2 child_rect_min = ImGui::GetItemRectMin(); - ImVec2 child_rect_max = ImGui::GetItemRectMax(); - ImGui::PopStyleColor(); - ImGui::Text("Rect of child window is: (%.0f,%.0f) (%.0f,%.0f)", child_rect_min.x, child_rect_min.y, child_rect_max.x, child_rect_max.y); - } - - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Widgets Width")) - { - // Use SetNextItemWidth() to set the width of a single upcoming item. - // Use PushItemWidth()/PopItemWidth() to set the width of a group of items. - static float f = 0.0f; - ImGui::Text("SetNextItemWidth/PushItemWidth(100)"); - ImGui::SameLine(); HelpMarker("Fixed width."); - ImGui::SetNextItemWidth(100); - ImGui::DragFloat("float##1", &f); - - ImGui::Text("SetNextItemWidth/PushItemWidth(GetWindowWidth() * 0.5f)"); - ImGui::SameLine(); HelpMarker("Half of window width."); - ImGui::SetNextItemWidth(ImGui::GetWindowWidth() * 0.5f); - ImGui::DragFloat("float##2", &f); - - ImGui::Text("SetNextItemWidth/PushItemWidth(GetContentRegionAvail().x * 0.5f)"); - ImGui::SameLine(); HelpMarker("Half of available width.\n(~ right-cursor_pos)\n(works within a column set)"); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x * 0.5f); - ImGui::DragFloat("float##3", &f); - - ImGui::Text("SetNextItemWidth/PushItemWidth(-100)"); - ImGui::SameLine(); HelpMarker("Align to right edge minus 100"); - ImGui::SetNextItemWidth(-100); - ImGui::DragFloat("float##4", &f); - - // Demonstrate using PushItemWidth to surround three items. Calling SetNextItemWidth() before each of them would have the same effect. - ImGui::Text("SetNextItemWidth/PushItemWidth(-1)"); - ImGui::SameLine(); HelpMarker("Align to right edge"); - ImGui::PushItemWidth(-1); - ImGui::DragFloat("##float5a", &f); - ImGui::DragFloat("##float5b", &f); - ImGui::DragFloat("##float5c", &f); - ImGui::PopItemWidth(); - - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Basic Horizontal Layout")) - { - ImGui::TextWrapped("(Use ImGui::SameLine() to keep adding items to the right of the preceding item)"); - - // Text - ImGui::Text("Two items: Hello"); ImGui::SameLine(); - ImGui::TextColored(ImVec4(1,1,0,1), "Sailor"); - - // Adjust spacing - ImGui::Text("More spacing: Hello"); ImGui::SameLine(0, 20); - ImGui::TextColored(ImVec4(1,1,0,1), "Sailor"); - - // Button - ImGui::AlignTextToFramePadding(); - ImGui::Text("Normal buttons"); ImGui::SameLine(); - ImGui::Button("Banana"); ImGui::SameLine(); - ImGui::Button("Apple"); ImGui::SameLine(); - ImGui::Button("Corniflower"); - - // Button - ImGui::Text("Small buttons"); ImGui::SameLine(); - ImGui::SmallButton("Like this one"); ImGui::SameLine(); - ImGui::Text("can fit within a text block."); - - // Aligned to arbitrary position. Easy/cheap column. - ImGui::Text("Aligned"); - ImGui::SameLine(150); ImGui::Text("x=150"); - ImGui::SameLine(300); ImGui::Text("x=300"); - ImGui::Text("Aligned"); - ImGui::SameLine(150); ImGui::SmallButton("x=150"); - ImGui::SameLine(300); ImGui::SmallButton("x=300"); - - // Checkbox - static bool c1 = false, c2 = false, c3 = false, c4 = false; - ImGui::Checkbox("My", &c1); ImGui::SameLine(); - ImGui::Checkbox("Tailor", &c2); ImGui::SameLine(); - ImGui::Checkbox("Is", &c3); ImGui::SameLine(); - ImGui::Checkbox("Rich", &c4); - - // Various - static float f0 = 1.0f, f1 = 2.0f, f2 = 3.0f; - ImGui::PushItemWidth(80); - const char* items[] = { "AAAA", "BBBB", "CCCC", "DDDD" }; - static int item = -1; - ImGui::Combo("Combo", &item, items, IM_ARRAYSIZE(items)); ImGui::SameLine(); - ImGui::SliderFloat("X", &f0, 0.0f, 5.0f); ImGui::SameLine(); - ImGui::SliderFloat("Y", &f1, 0.0f, 5.0f); ImGui::SameLine(); - ImGui::SliderFloat("Z", &f2, 0.0f, 5.0f); - ImGui::PopItemWidth(); - - ImGui::PushItemWidth(80); - ImGui::Text("Lists:"); - static int selection[4] = { 0, 1, 2, 3 }; - for (int i = 0; i < 4; i++) - { - if (i > 0) ImGui::SameLine(); - ImGui::PushID(i); - ImGui::ListBox("", &selection[i], items, IM_ARRAYSIZE(items)); - ImGui::PopID(); - //if (ImGui::IsItemHovered()) ImGui::SetTooltip("ListBox %d hovered", i); - } - ImGui::PopItemWidth(); - - // Dummy - ImVec2 button_sz(40, 40); - ImGui::Button("A", button_sz); ImGui::SameLine(); - ImGui::Dummy(button_sz); ImGui::SameLine(); - ImGui::Button("B", button_sz); - - // Manually wrapping (we should eventually provide this as an automatic layout feature, but for now you can do it manually) - ImGui::Text("Manually wrapping:"); - ImGuiStyle& style = ImGui::GetStyle(); - int buttons_count = 20; - float window_visible_x2 = ImGui::GetWindowPos().x + ImGui::GetWindowContentRegionMax().x; - for (int n = 0; n < buttons_count; n++) - { - ImGui::PushID(n); - ImGui::Button("Box", button_sz); - float last_button_x2 = ImGui::GetItemRectMax().x; - float next_button_x2 = last_button_x2 + style.ItemSpacing.x + button_sz.x; // Expected position if next button was on same line - if (n + 1 < buttons_count && next_button_x2 < window_visible_x2) - ImGui::SameLine(); - ImGui::PopID(); - } - - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Tabs")) - { - if (ImGui::TreeNode("Basic")) - { - ImGuiTabBarFlags tab_bar_flags = ImGuiTabBarFlags_None; - if (ImGui::BeginTabBar("MyTabBar", tab_bar_flags)) - { - if (ImGui::BeginTabItem("Avocado")) - { - ImGui::Text("This is the Avocado tab!\nblah blah blah blah blah"); - ImGui::EndTabItem(); - } - if (ImGui::BeginTabItem("Broccoli")) - { - ImGui::Text("This is the Broccoli tab!\nblah blah blah blah blah"); - ImGui::EndTabItem(); - } - if (ImGui::BeginTabItem("Cucumber")) - { - ImGui::Text("This is the Cucumber tab!\nblah blah blah blah blah"); - ImGui::EndTabItem(); - } - ImGui::EndTabBar(); - } - ImGui::Separator(); - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Advanced & Close Button")) - { - // Expose a couple of the available flags. In most cases you may just call BeginTabBar() with no flags (0). - static ImGuiTabBarFlags tab_bar_flags = ImGuiTabBarFlags_Reorderable; - ImGui::CheckboxFlags("ImGuiTabBarFlags_Reorderable", (unsigned int*)&tab_bar_flags, ImGuiTabBarFlags_Reorderable); - ImGui::CheckboxFlags("ImGuiTabBarFlags_AutoSelectNewTabs", (unsigned int*)&tab_bar_flags, ImGuiTabBarFlags_AutoSelectNewTabs); - ImGui::CheckboxFlags("ImGuiTabBarFlags_TabListPopupButton", (unsigned int*)&tab_bar_flags, ImGuiTabBarFlags_TabListPopupButton); - ImGui::CheckboxFlags("ImGuiTabBarFlags_NoCloseWithMiddleMouseButton", (unsigned int*)&tab_bar_flags, ImGuiTabBarFlags_NoCloseWithMiddleMouseButton); - if ((tab_bar_flags & ImGuiTabBarFlags_FittingPolicyMask_) == 0) - tab_bar_flags |= ImGuiTabBarFlags_FittingPolicyDefault_; - if (ImGui::CheckboxFlags("ImGuiTabBarFlags_FittingPolicyResizeDown", (unsigned int*)&tab_bar_flags, ImGuiTabBarFlags_FittingPolicyResizeDown)) - tab_bar_flags &= ~(ImGuiTabBarFlags_FittingPolicyMask_ ^ ImGuiTabBarFlags_FittingPolicyResizeDown); - if (ImGui::CheckboxFlags("ImGuiTabBarFlags_FittingPolicyScroll", (unsigned int*)&tab_bar_flags, ImGuiTabBarFlags_FittingPolicyScroll)) - tab_bar_flags &= ~(ImGuiTabBarFlags_FittingPolicyMask_ ^ ImGuiTabBarFlags_FittingPolicyScroll); - - // Tab Bar - const char* names[4] = { "Artichoke", "Beetroot", "Celery", "Daikon" }; - static bool opened[4] = { true, true, true, true }; // Persistent user state - for (int n = 0; n < IM_ARRAYSIZE(opened); n++) - { - if (n > 0) { ImGui::SameLine(); } - ImGui::Checkbox(names[n], &opened[n]); - } - - // Passing a bool* to BeginTabItem() is similar to passing one to Begin(): the underlying bool will be set to false when the tab is closed. - if (ImGui::BeginTabBar("MyTabBar", tab_bar_flags)) - { - for (int n = 0; n < IM_ARRAYSIZE(opened); n++) - if (opened[n] && ImGui::BeginTabItem(names[n], &opened[n], ImGuiTabItemFlags_None)) - { - ImGui::Text("This is the %s tab!", names[n]); - if (n & 1) - ImGui::Text("I am an odd tab."); - ImGui::EndTabItem(); - } - ImGui::EndTabBar(); - } - ImGui::Separator(); - ImGui::TreePop(); - } - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Groups")) - { - HelpMarker("BeginGroup() basically locks the horizontal position for new line. EndGroup() bundles the whole group so that you can use \"item\" functions such as IsItemHovered()/IsItemActive() or SameLine() etc. on the whole group."); - ImGui::BeginGroup(); - { - ImGui::BeginGroup(); - ImGui::Button("AAA"); - ImGui::SameLine(); - ImGui::Button("BBB"); - ImGui::SameLine(); - ImGui::BeginGroup(); - ImGui::Button("CCC"); - ImGui::Button("DDD"); - ImGui::EndGroup(); - ImGui::SameLine(); - ImGui::Button("EEE"); - ImGui::EndGroup(); - if (ImGui::IsItemHovered()) - ImGui::SetTooltip("First group hovered"); - } - // Capture the group size and create widgets using the same size - ImVec2 size = ImGui::GetItemRectSize(); - const float values[5] = { 0.5f, 0.20f, 0.80f, 0.60f, 0.25f }; - ImGui::PlotHistogram("##values", values, IM_ARRAYSIZE(values), 0, NULL, 0.0f, 1.0f, size); - - ImGui::Button("ACTION", ImVec2((size.x - ImGui::GetStyle().ItemSpacing.x)*0.5f, size.y)); - ImGui::SameLine(); - ImGui::Button("REACTION", ImVec2((size.x - ImGui::GetStyle().ItemSpacing.x)*0.5f, size.y)); - ImGui::EndGroup(); - ImGui::SameLine(); - - ImGui::Button("LEVERAGE\nBUZZWORD", size); - ImGui::SameLine(); - - if (ImGui::ListBoxHeader("List", size)) - { - ImGui::Selectable("Selected", true); - ImGui::Selectable("Not Selected", false); - ImGui::ListBoxFooter(); - } - - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Text Baseline Alignment")) - { - { - ImGui::BulletText("Text baseline:"); - ImGui::SameLine(); - HelpMarker("This is testing the vertical alignment that gets applied on text to keep it aligned with widgets. Lines only composed of text or \"small\" widgets fit in less vertical spaces than lines with normal widgets."); - ImGui::Indent(); - - ImGui::Text("KO Blahblah"); ImGui::SameLine(); - ImGui::Button("Some framed item"); ImGui::SameLine(); - HelpMarker("Baseline of button will look misaligned with text.."); - - // If your line starts with text, call AlignTextToFramePadding() to align text to upcoming widgets. - // Because we don't know what's coming after the Text() statement, we need to move the text baseline down by FramePadding.y - ImGui::AlignTextToFramePadding(); - ImGui::Text("OK Blahblah"); ImGui::SameLine(); - ImGui::Button("Some framed item"); ImGui::SameLine(); - HelpMarker("We call AlignTextToFramePadding() to vertically align the text baseline by +FramePadding.y"); - - // SmallButton() uses the same vertical padding as Text - ImGui::Button("TEST##1"); ImGui::SameLine(); - ImGui::Text("TEST"); ImGui::SameLine(); - ImGui::SmallButton("TEST##2"); - - // If your line starts with text, call AlignTextToFramePadding() to align text to upcoming widgets. - ImGui::AlignTextToFramePadding(); - ImGui::Text("Text aligned to framed item"); ImGui::SameLine(); - ImGui::Button("Item##1"); ImGui::SameLine(); - ImGui::Text("Item"); ImGui::SameLine(); - ImGui::SmallButton("Item##2"); ImGui::SameLine(); - ImGui::Button("Item##3"); - - ImGui::Unindent(); - } - - ImGui::Spacing(); - - { - ImGui::BulletText("Multi-line text:"); - ImGui::Indent(); - ImGui::Text("One\nTwo\nThree"); ImGui::SameLine(); - ImGui::Text("Hello\nWorld"); ImGui::SameLine(); - ImGui::Text("Banana"); - - ImGui::Text("Banana"); ImGui::SameLine(); - ImGui::Text("Hello\nWorld"); ImGui::SameLine(); - ImGui::Text("One\nTwo\nThree"); - - ImGui::Button("HOP##1"); ImGui::SameLine(); - ImGui::Text("Banana"); ImGui::SameLine(); - ImGui::Text("Hello\nWorld"); ImGui::SameLine(); - ImGui::Text("Banana"); - - ImGui::Button("HOP##2"); ImGui::SameLine(); - ImGui::Text("Hello\nWorld"); ImGui::SameLine(); - ImGui::Text("Banana"); - ImGui::Unindent(); - } - - ImGui::Spacing(); - - { - ImGui::BulletText("Misc items:"); - ImGui::Indent(); - - // SmallButton() sets FramePadding to zero. Text baseline is aligned to match baseline of previous Button - ImGui::Button("80x80", ImVec2(80, 80)); - ImGui::SameLine(); - ImGui::Button("50x50", ImVec2(50, 50)); - ImGui::SameLine(); - ImGui::Button("Button()"); - ImGui::SameLine(); - ImGui::SmallButton("SmallButton()"); - - // Tree - const float spacing = ImGui::GetStyle().ItemInnerSpacing.x; - ImGui::Button("Button##1"); - ImGui::SameLine(0.0f, spacing); - if (ImGui::TreeNode("Node##1")) { for (int i = 0; i < 6; i++) ImGui::BulletText("Item %d..", i); ImGui::TreePop(); } // Dummy tree data - - ImGui::AlignTextToFramePadding(); // Vertically align text node a bit lower so it'll be vertically centered with upcoming widget. Otherwise you can use SmallButton (smaller fit). - bool node_open = ImGui::TreeNode("Node##2");// Common mistake to avoid: if we want to SameLine after TreeNode we need to do it before we add child content. - ImGui::SameLine(0.0f, spacing); ImGui::Button("Button##2"); - if (node_open) { for (int i = 0; i < 6; i++) ImGui::BulletText("Item %d..", i); ImGui::TreePop(); } // Dummy tree data - - // Bullet - ImGui::Button("Button##3"); - ImGui::SameLine(0.0f, spacing); - ImGui::BulletText("Bullet text"); - - ImGui::AlignTextToFramePadding(); - ImGui::BulletText("Node"); - ImGui::SameLine(0.0f, spacing); ImGui::Button("Button##4"); - ImGui::Unindent(); - } - - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Scrolling")) - { - // Vertical scroll functions - HelpMarker("Use SetScrollHereY() or SetScrollFromPosY() to scroll to a given vertical position."); - - static int track_item = 50; - static bool enable_track = true; - static bool enable_extra_decorations = false; - static float scroll_to_off_px = 0.0f; - static float scroll_to_pos_px = 200.0f; - - ImGui::Checkbox("Decoration", &enable_extra_decorations); - ImGui::SameLine(); - HelpMarker("We expose this for testing because scrolling sometimes had issues with window decoration such as menu-bars."); - - ImGui::Checkbox("Track", &enable_track); - ImGui::PushItemWidth(100); - ImGui::SameLine(140); enable_track |= ImGui::DragInt("##item", &track_item, 0.25f, 0, 99, "Item = %d"); - - bool scroll_to_off = ImGui::Button("Scroll Offset"); - ImGui::SameLine(140); scroll_to_off |= ImGui::DragFloat("##off", &scroll_to_off_px, 1.00f, 0, FLT_MAX, "+%.0f px"); - - bool scroll_to_pos = ImGui::Button("Scroll To Pos"); - ImGui::SameLine(140); scroll_to_pos |= ImGui::DragFloat("##pos", &scroll_to_pos_px, 1.00f, -10, FLT_MAX, "X/Y = %.0f px"); - ImGui::PopItemWidth(); - - if (scroll_to_off || scroll_to_pos) - enable_track = false; - - ImGuiStyle& style = ImGui::GetStyle(); - float child_w = (ImGui::GetContentRegionAvail().x - 4 * style.ItemSpacing.x) / 5; - if (child_w < 1.0f) - child_w = 1.0f; - ImGui::PushID("##VerticalScrolling"); - for (int i = 0; i < 5; i++) - { - if (i > 0) ImGui::SameLine(); - ImGui::BeginGroup(); - const char* names[] = { "Top", "25%", "Center", "75%", "Bottom" }; - ImGui::TextUnformatted(names[i]); - - ImGuiWindowFlags child_flags = enable_extra_decorations ? ImGuiWindowFlags_MenuBar : 0; - bool window_visible = ImGui::BeginChild(ImGui::GetID((void*)(intptr_t)i), ImVec2(child_w, 200.0f), true, child_flags); - if (ImGui::BeginMenuBar()) - { - ImGui::TextUnformatted("abc"); - ImGui::EndMenuBar(); - } - if (scroll_to_off) - ImGui::SetScrollY(scroll_to_off_px); - if (scroll_to_pos) - ImGui::SetScrollFromPosY(ImGui::GetCursorStartPos().y + scroll_to_pos_px, i * 0.25f); - if (window_visible) // Avoid calling SetScrollHereY when running with culled items - { - for (int item = 0; item < 100; item++) - { - if (enable_track && item == track_item) - { - ImGui::TextColored(ImVec4(1, 1, 0, 1), "Item %d", item); - ImGui::SetScrollHereY(i * 0.25f); // 0.0f:top, 0.5f:center, 1.0f:bottom - } - else - { - ImGui::Text("Item %d", item); - } - } - } - float scroll_y = ImGui::GetScrollY(); - float scroll_max_y = ImGui::GetScrollMaxY(); - ImGui::EndChild(); - ImGui::Text("%.0f/%.0f", scroll_y, scroll_max_y); - ImGui::EndGroup(); - } - ImGui::PopID(); - - // Horizontal scroll functions - ImGui::Spacing(); - HelpMarker("Use SetScrollHereX() or SetScrollFromPosX() to scroll to a given horizontal position.\n\nUsing the \"Scroll To Pos\" button above will make the discontinuity at edges visible: scrolling to the top/bottom/left/right-most item will add an additional WindowPadding to reflect on reaching the edge of the list.\n\nBecause the clipping rectangle of most window hides half worth of WindowPadding on the left/right, using SetScrollFromPosX(+1) will usually result in clipped text whereas the equivalent SetScrollFromPosY(+1) wouldn't."); - ImGui::PushID("##HorizontalScrolling"); - for (int i = 0; i < 5; i++) - { - float child_height = ImGui::GetTextLineHeight() + style.ScrollbarSize + style.WindowPadding.y * 2.0f; - ImGuiWindowFlags child_flags = ImGuiWindowFlags_HorizontalScrollbar | (enable_extra_decorations ? ImGuiWindowFlags_AlwaysVerticalScrollbar : 0); - bool window_visible = ImGui::BeginChild(ImGui::GetID((void*)(intptr_t)i), ImVec2(-100, child_height), true, child_flags); - if (scroll_to_off) - ImGui::SetScrollX(scroll_to_off_px); - if (scroll_to_pos) - ImGui::SetScrollFromPosX(ImGui::GetCursorStartPos().x + scroll_to_pos_px, i * 0.25f); - if (window_visible) // Avoid calling SetScrollHereY when running with culled items - { - for (int item = 0; item < 100; item++) - { - if (enable_track && item == track_item) - { - ImGui::TextColored(ImVec4(1, 1, 0, 1), "Item %d", item); - ImGui::SetScrollHereX(i * 0.25f); // 0.0f:left, 0.5f:center, 1.0f:right - } - else - { - ImGui::Text("Item %d", item); - } - ImGui::SameLine(); - } - } - float scroll_x = ImGui::GetScrollX(); - float scroll_max_x = ImGui::GetScrollMaxX(); - ImGui::EndChild(); - ImGui::SameLine(); - const char* names[] = { "Left", "25%", "Center", "75%", "Right" }; - ImGui::Text("%s\n%.0f/%.0f", names[i], scroll_x, scroll_max_x); - ImGui::Spacing(); - } - ImGui::PopID(); - - // Miscellaneous Horizontal Scrolling Demo - HelpMarker("Horizontal scrolling for a window has to be enabled explicitly via the ImGuiWindowFlags_HorizontalScrollbar flag.\n\nYou may want to explicitly specify content width by calling SetNextWindowContentWidth() before Begin()."); - static int lines = 7; - ImGui::SliderInt("Lines", &lines, 1, 15); - ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 3.0f); - ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(2.0f, 1.0f)); - ImGui::BeginChild("scrolling", ImVec2(0, ImGui::GetFrameHeightWithSpacing() * 7 + 30), true, ImGuiWindowFlags_HorizontalScrollbar); - for (int line = 0; line < lines; line++) - { - // Display random stuff (for the sake of this trivial demo we are using basic Button+SameLine. If you want to create your own time line for a real application you may be better off - // manipulating the cursor position yourself, aka using SetCursorPos/SetCursorScreenPos to position the widgets yourself. You may also want to use the lower-level ImDrawList API) - int num_buttons = 10 + ((line & 1) ? line * 9 : line * 3); - for (int n = 0; n < num_buttons; n++) - { - if (n > 0) ImGui::SameLine(); - ImGui::PushID(n + line * 1000); - char num_buf[16]; - sprintf(num_buf, "%d", n); - const char* label = (!(n%15)) ? "FizzBuzz" : (!(n%3)) ? "Fizz" : (!(n%5)) ? "Buzz" : num_buf; - float hue = n*0.05f; - ImGui::PushStyleColor(ImGuiCol_Button, (ImVec4)ImColor::HSV(hue, 0.6f, 0.6f)); - ImGui::PushStyleColor(ImGuiCol_ButtonHovered, (ImVec4)ImColor::HSV(hue, 0.7f, 0.7f)); - ImGui::PushStyleColor(ImGuiCol_ButtonActive, (ImVec4)ImColor::HSV(hue, 0.8f, 0.8f)); - ImGui::Button(label, ImVec2(40.0f + sinf((float)(line + n)) * 20.0f, 0.0f)); - ImGui::PopStyleColor(3); - ImGui::PopID(); - } - } - float scroll_x = ImGui::GetScrollX(); - float scroll_max_x = ImGui::GetScrollMaxX(); - ImGui::EndChild(); - ImGui::PopStyleVar(2); - float scroll_x_delta = 0.0f; - ImGui::SmallButton("<<"); if (ImGui::IsItemActive()) { scroll_x_delta = -ImGui::GetIO().DeltaTime * 1000.0f; } ImGui::SameLine(); - ImGui::Text("Scroll from code"); ImGui::SameLine(); - ImGui::SmallButton(">>"); if (ImGui::IsItemActive()) { scroll_x_delta = +ImGui::GetIO().DeltaTime * 1000.0f; } ImGui::SameLine(); - ImGui::Text("%.0f/%.0f", scroll_x, scroll_max_x); - if (scroll_x_delta != 0.0f) - { - ImGui::BeginChild("scrolling"); // Demonstrate a trick: you can use Begin to set yourself in the context of another window (here we are already out of your child window) - ImGui::SetScrollX(ImGui::GetScrollX() + scroll_x_delta); - ImGui::EndChild(); - } - ImGui::Spacing(); - - static bool show_horizontal_contents_size_demo_window = false; - ImGui::Checkbox("Show Horizontal contents size demo window", &show_horizontal_contents_size_demo_window); - - if (show_horizontal_contents_size_demo_window) - { - static bool show_h_scrollbar = true; - static bool show_button = true; - static bool show_tree_nodes = true; - static bool show_text_wrapped = false; - static bool show_columns = true; - static bool show_tab_bar = true; - static bool show_child = false; - static bool explicit_content_size = false; - static float contents_size_x = 300.0f; - if (explicit_content_size) - ImGui::SetNextWindowContentSize(ImVec2(contents_size_x, 0.0f)); - ImGui::Begin("Horizontal contents size demo window", &show_horizontal_contents_size_demo_window, show_h_scrollbar ? ImGuiWindowFlags_HorizontalScrollbar : 0); - ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(2, 0)); - ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(2, 0)); - HelpMarker("Test of different widgets react and impact the work rectangle growing when horizontal scrolling is enabled.\n\nUse 'Metrics->Tools->Show windows rectangles' to visualize rectangles."); - ImGui::Checkbox("H-scrollbar", &show_h_scrollbar); - ImGui::Checkbox("Button", &show_button); // Will grow contents size (unless explicitly overwritten) - ImGui::Checkbox("Tree nodes", &show_tree_nodes); // Will grow contents size and display highlight over full width - ImGui::Checkbox("Text wrapped", &show_text_wrapped);// Will grow and use contents size - ImGui::Checkbox("Columns", &show_columns); // Will use contents size - ImGui::Checkbox("Tab bar", &show_tab_bar); // Will use contents size - ImGui::Checkbox("Child", &show_child); // Will grow and use contents size - ImGui::Checkbox("Explicit content size", &explicit_content_size); - ImGui::Text("Scroll %.1f/%.1f %.1f/%.1f", ImGui::GetScrollX(), ImGui::GetScrollMaxX(), ImGui::GetScrollY(), ImGui::GetScrollMaxY()); - if (explicit_content_size) - { - ImGui::SameLine(); - ImGui::SetNextItemWidth(100); - ImGui::DragFloat("##csx", &contents_size_x); - ImVec2 p = ImGui::GetCursorScreenPos(); - ImGui::GetWindowDrawList()->AddRectFilled(p, ImVec2(p.x + 10, p.y + 10), IM_COL32_WHITE); - ImGui::GetWindowDrawList()->AddRectFilled(ImVec2(p.x + contents_size_x - 10, p.y), ImVec2(p.x + contents_size_x, p.y + 10), IM_COL32_WHITE); - ImGui::Dummy(ImVec2(0, 10)); - } - ImGui::PopStyleVar(2); - ImGui::Separator(); - if (show_button) - { - ImGui::Button("this is a 300-wide button", ImVec2(300, 0)); - } - if (show_tree_nodes) - { - bool open = true; - if (ImGui::TreeNode("this is a tree node")) - { - if (ImGui::TreeNode("another one of those tree node...")) - { - ImGui::Text("Some tree contents"); - ImGui::TreePop(); - } - ImGui::TreePop(); - } - ImGui::CollapsingHeader("CollapsingHeader", &open); - } - if (show_text_wrapped) - { - ImGui::TextWrapped("This text should automatically wrap on the edge of the work rectangle."); - } - if (show_columns) - { - ImGui::Columns(4); - for (int n = 0; n < 4; n++) - { - ImGui::Text("Width %.2f", ImGui::GetColumnWidth()); - ImGui::NextColumn(); - } - ImGui::Columns(1); - } - if (show_tab_bar && ImGui::BeginTabBar("Hello")) - { - if (ImGui::BeginTabItem("OneOneOne")) { ImGui::EndTabItem(); } - if (ImGui::BeginTabItem("TwoTwoTwo")) { ImGui::EndTabItem(); } - if (ImGui::BeginTabItem("ThreeThreeThree")) { ImGui::EndTabItem(); } - if (ImGui::BeginTabItem("FourFourFour")) { ImGui::EndTabItem(); } - ImGui::EndTabBar(); - } - if (show_child) - { - ImGui::BeginChild("child", ImVec2(0,0), true); - ImGui::EndChild(); - } - ImGui::End(); - } - - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Clipping")) - { - static ImVec2 size(100, 100), offset(50, 20); - ImGui::TextWrapped("On a per-widget basis we are occasionally clipping text CPU-side if it won't fit in its frame. Otherwise we are doing coarser clipping + passing a scissor rectangle to the renderer. The system is designed to try minimizing both execution and CPU/GPU rendering cost."); - ImGui::DragFloat2("size", (float*)&size, 0.5f, 1.0f, 200.0f, "%.0f"); - ImGui::TextWrapped("(Click and drag)"); - ImVec2 pos = ImGui::GetCursorScreenPos(); - ImVec4 clip_rect(pos.x, pos.y, pos.x + size.x, pos.y + size.y); - ImGui::InvisibleButton("##dummy", size); - if (ImGui::IsItemActive() && ImGui::IsMouseDragging(0)) { offset.x += ImGui::GetIO().MouseDelta.x; offset.y += ImGui::GetIO().MouseDelta.y; } - ImGui::GetWindowDrawList()->AddRectFilled(pos, ImVec2(pos.x + size.x, pos.y + size.y), IM_COL32(90, 90, 120, 255)); - ImGui::GetWindowDrawList()->AddText(ImGui::GetFont(), ImGui::GetFontSize()*2.0f, ImVec2(pos.x + offset.x, pos.y + offset.y), IM_COL32(255, 255, 255, 255), "Line 1 hello\nLine 2 clip me!", NULL, 0.0f, &clip_rect); - ImGui::TreePop(); - } -} - -static void ShowDemoWindowPopups() -{ - if (!ImGui::CollapsingHeader("Popups & Modal windows")) - return; - - // The properties of popups windows are: - // - They block normal mouse hovering detection outside them. (*) - // - Unless modal, they can be closed by clicking anywhere outside them, or by pressing ESCAPE. - // - Their visibility state (~bool) is held internally by Dear ImGui instead of being held by the programmer as we are used to with regular Begin() calls. - // User can manipulate the visibility state by calling OpenPopup(). - // (*) One can use IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup) to bypass it and detect hovering even when normally blocked by a popup. - // Those three properties are connected. The library needs to hold their visibility state because it can close popups at any time. - - // Typical use for regular windows: - // bool my_tool_is_active = false; if (ImGui::Button("Open")) my_tool_is_active = true; [...] if (my_tool_is_active) Begin("My Tool", &my_tool_is_active) { [...] } End(); - // Typical use for popups: - // if (ImGui::Button("Open")) ImGui::OpenPopup("MyPopup"); if (ImGui::BeginPopup("MyPopup") { [...] EndPopup(); } - - // With popups we have to go through a library call (here OpenPopup) to manipulate the visibility state. - // This may be a bit confusing at first but it should quickly make sense. Follow on the examples below. - - if (ImGui::TreeNode("Popups")) - { - ImGui::TextWrapped("When a popup is active, it inhibits interacting with windows that are behind the popup. Clicking outside the popup closes it."); - - static int selected_fish = -1; - const char* names[] = { "Bream", "Haddock", "Mackerel", "Pollock", "Tilefish" }; - static bool toggles[] = { true, false, false, false, false }; - - // Simple selection popup - // (If you want to show the current selection inside the Button itself, you may want to build a string using the "###" operator to preserve a constant ID with a variable label) - if (ImGui::Button("Select..")) - ImGui::OpenPopup("my_select_popup"); - ImGui::SameLine(); - ImGui::TextUnformatted(selected_fish == -1 ? "" : names[selected_fish]); - if (ImGui::BeginPopup("my_select_popup")) - { - ImGui::Text("Aquarium"); - ImGui::Separator(); - for (int i = 0; i < IM_ARRAYSIZE(names); i++) - if (ImGui::Selectable(names[i])) - selected_fish = i; - ImGui::EndPopup(); - } - - // Showing a menu with toggles - if (ImGui::Button("Toggle..")) - ImGui::OpenPopup("my_toggle_popup"); - if (ImGui::BeginPopup("my_toggle_popup")) - { - for (int i = 0; i < IM_ARRAYSIZE(names); i++) - ImGui::MenuItem(names[i], "", &toggles[i]); - if (ImGui::BeginMenu("Sub-menu")) - { - ImGui::MenuItem("Click me"); - ImGui::EndMenu(); - } - - ImGui::Separator(); - ImGui::Text("Tooltip here"); - if (ImGui::IsItemHovered()) - ImGui::SetTooltip("I am a tooltip over a popup"); - - if (ImGui::Button("Stacked Popup")) - ImGui::OpenPopup("another popup"); - if (ImGui::BeginPopup("another popup")) - { - for (int i = 0; i < IM_ARRAYSIZE(names); i++) - ImGui::MenuItem(names[i], "", &toggles[i]); - if (ImGui::BeginMenu("Sub-menu")) - { - ImGui::MenuItem("Click me"); - if (ImGui::Button("Stacked Popup")) - ImGui::OpenPopup("another popup"); - if (ImGui::BeginPopup("another popup")) - { - ImGui::Text("I am the last one here."); - ImGui::EndPopup(); - } - ImGui::EndMenu(); - } - ImGui::EndPopup(); - } - ImGui::EndPopup(); - } - - // Call the more complete ShowExampleMenuFile which we use in various places of this demo - if (ImGui::Button("File Menu..")) - ImGui::OpenPopup("my_file_popup"); - if (ImGui::BeginPopup("my_file_popup")) - { - ShowExampleMenuFile(); - ImGui::EndPopup(); - } - - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Context menus")) - { - // BeginPopupContextItem() is a helper to provide common/simple popup behavior of essentially doing: - // if (IsItemHovered() && IsMouseReleased(0)) - // OpenPopup(id); - // return BeginPopup(id); - // For more advanced uses you may want to replicate and cuztomize this code. This the comments inside BeginPopupContextItem() implementation. - static float value = 0.5f; - ImGui::Text("Value = %.3f (<-- right-click here)", value); - if (ImGui::BeginPopupContextItem("item context menu")) - { - if (ImGui::Selectable("Set to zero")) value = 0.0f; - if (ImGui::Selectable("Set to PI")) value = 3.1415f; - ImGui::SetNextItemWidth(-1); - ImGui::DragFloat("##Value", &value, 0.1f, 0.0f, 0.0f); - ImGui::EndPopup(); - } - - // We can also use OpenPopupOnItemClick() which is the same as BeginPopupContextItem() but without the Begin call. - // So here we will make it that clicking on the text field with the right mouse button (1) will toggle the visibility of the popup above. - ImGui::Text("(You can also right-click me to open the same popup as above.)"); - ImGui::OpenPopupOnItemClick("item context menu", 1); - - // When used after an item that has an ID (here the Button), we can skip providing an ID to BeginPopupContextItem(). - // BeginPopupContextItem() will use the last item ID as the popup ID. - // In addition here, we want to include your editable label inside the button label. We use the ### operator to override the ID (read FAQ about ID for details) - static char name[32] = "Label1"; - char buf[64]; sprintf(buf, "Button: %s###Button", name); // ### operator override ID ignoring the preceding label - ImGui::Button(buf); - if (ImGui::BeginPopupContextItem()) - { - ImGui::Text("Edit name:"); - ImGui::InputText("##edit", name, IM_ARRAYSIZE(name)); - if (ImGui::Button("Close")) - ImGui::CloseCurrentPopup(); - ImGui::EndPopup(); - } - ImGui::SameLine(); ImGui::Text("(<-- right-click here)"); - - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Modals")) - { - ImGui::TextWrapped("Modal windows are like popups but the user cannot close them by clicking outside the window."); - - if (ImGui::Button("Delete..")) - ImGui::OpenPopup("Delete?"); - - if (ImGui::BeginPopupModal("Delete?", NULL, ImGuiWindowFlags_AlwaysAutoResize)) - { - ImGui::Text("All those beautiful files will be deleted.\nThis operation cannot be undone!\n\n"); - ImGui::Separator(); - - //static int dummy_i = 0; - //ImGui::Combo("Combo", &dummy_i, "Delete\0Delete harder\0"); - - static bool dont_ask_me_next_time = false; - ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0, 0)); - ImGui::Checkbox("Don't ask me next time", &dont_ask_me_next_time); - ImGui::PopStyleVar(); - - if (ImGui::Button("OK", ImVec2(120, 0))) { ImGui::CloseCurrentPopup(); } - ImGui::SetItemDefaultFocus(); - ImGui::SameLine(); - if (ImGui::Button("Cancel", ImVec2(120, 0))) { ImGui::CloseCurrentPopup(); } - ImGui::EndPopup(); - } - - if (ImGui::Button("Stacked modals..")) - ImGui::OpenPopup("Stacked 1"); - if (ImGui::BeginPopupModal("Stacked 1", NULL, ImGuiWindowFlags_MenuBar)) - { - if (ImGui::BeginMenuBar()) - { - if (ImGui::BeginMenu("File")) - { - if (ImGui::MenuItem("Dummy menu item")) {} - ImGui::EndMenu(); - } - ImGui::EndMenuBar(); - } - ImGui::Text("Hello from Stacked The First\nUsing style.Colors[ImGuiCol_ModalWindowDimBg] behind it."); - - // Testing behavior of widgets stacking their own regular popups over the modal. - static int item = 1; - static float color[4] = { 0.4f,0.7f,0.0f,0.5f }; - ImGui::Combo("Combo", &item, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); - ImGui::ColorEdit4("color", color); - - if (ImGui::Button("Add another modal..")) - ImGui::OpenPopup("Stacked 2"); - - // Also demonstrate passing a bool* to BeginPopupModal(), this will create a regular close button which will close the popup. - // Note that the visibility state of popups is owned by imgui, so the input value of the bool actually doesn't matter here. - bool dummy_open = true; - if (ImGui::BeginPopupModal("Stacked 2", &dummy_open)) - { - ImGui::Text("Hello from Stacked The Second!"); - if (ImGui::Button("Close")) - ImGui::CloseCurrentPopup(); - ImGui::EndPopup(); - } - - if (ImGui::Button("Close")) - ImGui::CloseCurrentPopup(); - ImGui::EndPopup(); - } - - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Menus inside a regular window")) - { - ImGui::TextWrapped("Below we are testing adding menu items to a regular window. It's rather unusual but should work!"); - ImGui::Separator(); - // NB: As a quirk in this very specific example, we want to differentiate the parent of this menu from the parent of the various popup menus above. - // To do so we are encloding the items in a PushID()/PopID() block to make them two different menusets. If we don't, opening any popup above and hovering our menu here - // would open it. This is because once a menu is active, we allow to switch to a sibling menu by just hovering on it, which is the desired behavior for regular menus. - ImGui::PushID("foo"); - ImGui::MenuItem("Menu item", "CTRL+M"); - if (ImGui::BeginMenu("Menu inside a regular window")) - { - ShowExampleMenuFile(); - ImGui::EndMenu(); - } - ImGui::PopID(); - ImGui::Separator(); - ImGui::TreePop(); - } -} - -static void ShowDemoWindowColumns() -{ - if (!ImGui::CollapsingHeader("Columns")) - return; - - ImGui::PushID("Columns"); - - static bool disable_indent = false; - ImGui::Checkbox("Disable tree indentation", &disable_indent); - ImGui::SameLine(); - HelpMarker("Disable the indenting of tree nodes so demo columns can use the full window width."); - if (disable_indent) - ImGui::PushStyleVar(ImGuiStyleVar_IndentSpacing, 0.0f); - - // Basic columns - if (ImGui::TreeNode("Basic")) - { - ImGui::Text("Without border:"); - ImGui::Columns(3, "mycolumns3", false); // 3-ways, no border - ImGui::Separator(); - for (int n = 0; n < 14; n++) - { - char label[32]; - sprintf(label, "Item %d", n); - if (ImGui::Selectable(label)) {} - //if (ImGui::Button(label, ImVec2(-FLT_MIN,0.0f))) {} - ImGui::NextColumn(); - } - ImGui::Columns(1); - ImGui::Separator(); - - ImGui::Text("With border:"); - ImGui::Columns(4, "mycolumns"); // 4-ways, with border - ImGui::Separator(); - ImGui::Text("ID"); ImGui::NextColumn(); - ImGui::Text("Name"); ImGui::NextColumn(); - ImGui::Text("Path"); ImGui::NextColumn(); - ImGui::Text("Hovered"); ImGui::NextColumn(); - ImGui::Separator(); - const char* names[3] = { "One", "Two", "Three" }; - const char* paths[3] = { "/path/one", "/path/two", "/path/three" }; - static int selected = -1; - for (int i = 0; i < 3; i++) - { - char label[32]; - sprintf(label, "%04d", i); - if (ImGui::Selectable(label, selected == i, ImGuiSelectableFlags_SpanAllColumns)) - selected = i; - bool hovered = ImGui::IsItemHovered(); - ImGui::NextColumn(); - ImGui::Text(names[i]); ImGui::NextColumn(); - ImGui::Text(paths[i]); ImGui::NextColumn(); - ImGui::Text("%d", hovered); ImGui::NextColumn(); - } - ImGui::Columns(1); - ImGui::Separator(); - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Borders")) - { - // NB: Future columns API should allow automatic horizontal borders. - static bool h_borders = true; - static bool v_borders = true; - static int columns_count = 4; - const int lines_count = 3; - ImGui::SetNextItemWidth(ImGui::GetFontSize() * 8); - ImGui::DragInt("##columns_count", &columns_count, 0.1f, 2, 10, "%d columns"); - if (columns_count < 2) - columns_count = 2; - ImGui::SameLine(); - ImGui::Checkbox("horizontal", &h_borders); - ImGui::SameLine(); - ImGui::Checkbox("vertical", &v_borders); - ImGui::Columns(columns_count, NULL, v_borders); - for (int i = 0; i < columns_count * lines_count; i++) - { - if (h_borders && ImGui::GetColumnIndex() == 0) - ImGui::Separator(); - ImGui::Text("%c%c%c", 'a' + i, 'a' + i, 'a' + i); - ImGui::Text("Width %.2f", ImGui::GetColumnWidth()); - ImGui::Text("Avail %.2f", ImGui::GetContentRegionAvail().x); - ImGui::Text("Offset %.2f", ImGui::GetColumnOffset()); - ImGui::Text("Long text that is likely to clip"); - ImGui::Button("Button", ImVec2(-FLT_MIN, 0.0f)); - ImGui::NextColumn(); - } - ImGui::Columns(1); - if (h_borders) - ImGui::Separator(); - ImGui::TreePop(); - } - - // Create multiple items in a same cell before switching to next column - if (ImGui::TreeNode("Mixed items")) - { - ImGui::Columns(3, "mixed"); - ImGui::Separator(); - - ImGui::Text("Hello"); - ImGui::Button("Banana"); - ImGui::NextColumn(); - - ImGui::Text("ImGui"); - ImGui::Button("Apple"); - static float foo = 1.0f; - ImGui::InputFloat("red", &foo, 0.05f, 0, "%.3f"); - ImGui::Text("An extra line here."); - ImGui::NextColumn(); - - ImGui::Text("Sailor"); - ImGui::Button("Corniflower"); - static float bar = 1.0f; - ImGui::InputFloat("blue", &bar, 0.05f, 0, "%.3f"); - ImGui::NextColumn(); - - if (ImGui::CollapsingHeader("Category A")) { ImGui::Text("Blah blah blah"); } ImGui::NextColumn(); - if (ImGui::CollapsingHeader("Category B")) { ImGui::Text("Blah blah blah"); } ImGui::NextColumn(); - if (ImGui::CollapsingHeader("Category C")) { ImGui::Text("Blah blah blah"); } ImGui::NextColumn(); - ImGui::Columns(1); - ImGui::Separator(); - ImGui::TreePop(); - } - - // Word wrapping - if (ImGui::TreeNode("Word-wrapping")) - { - ImGui::Columns(2, "word-wrapping"); - ImGui::Separator(); - ImGui::TextWrapped("The quick brown fox jumps over the lazy dog."); - ImGui::TextWrapped("Hello Left"); - ImGui::NextColumn(); - ImGui::TextWrapped("The quick brown fox jumps over the lazy dog."); - ImGui::TextWrapped("Hello Right"); - ImGui::Columns(1); - ImGui::Separator(); - ImGui::TreePop(); - } - - // Scrolling columns - /* - if (ImGui::TreeNode("Vertical Scrolling")) - { - ImGui::BeginChild("##header", ImVec2(0, ImGui::GetTextLineHeightWithSpacing()+ImGui::GetStyle().ItemSpacing.y)); - ImGui::Columns(3); - ImGui::Text("ID"); ImGui::NextColumn(); - ImGui::Text("Name"); ImGui::NextColumn(); - ImGui::Text("Path"); ImGui::NextColumn(); - ImGui::Columns(1); - ImGui::Separator(); - ImGui::EndChild(); - ImGui::BeginChild("##scrollingregion", ImVec2(0, 60)); - ImGui::Columns(3); - for (int i = 0; i < 10; i++) - { - ImGui::Text("%04d", i); ImGui::NextColumn(); - ImGui::Text("Foobar"); ImGui::NextColumn(); - ImGui::Text("/path/foobar/%04d/", i); ImGui::NextColumn(); - } - ImGui::Columns(1); - ImGui::EndChild(); - ImGui::TreePop(); - } - */ - - if (ImGui::TreeNode("Horizontal Scrolling")) - { - ImGui::SetNextWindowContentSize(ImVec2(1500.0f, 0.0f)); - ImGui::BeginChild("##ScrollingRegion", ImVec2(0, ImGui::GetFontSize() * 20), false, ImGuiWindowFlags_HorizontalScrollbar); - ImGui::Columns(10); - int ITEMS_COUNT = 2000; - ImGuiListClipper clipper(ITEMS_COUNT); // Also demonstrate using the clipper for large list - while (clipper.Step()) - { - for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) - for (int j = 0; j < 10; j++) - { - ImGui::Text("Line %d Column %d...", i, j); - ImGui::NextColumn(); - } - } - ImGui::Columns(1); - ImGui::EndChild(); - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Tree")) - { - ImGui::Columns(2, "tree", true); - for (int x = 0; x < 3; x++) - { - bool open1 = ImGui::TreeNode((void*)(intptr_t)x, "Node%d", x); - ImGui::NextColumn(); - ImGui::Text("Node contents"); - ImGui::NextColumn(); - if (open1) - { - for (int y = 0; y < 3; y++) - { - bool open2 = ImGui::TreeNode((void*)(intptr_t)y, "Node%d.%d", x, y); - ImGui::NextColumn(); - ImGui::Text("Node contents"); - if (open2) - { - ImGui::Text("Even more contents"); - if (ImGui::TreeNode("Tree in column")) - { - ImGui::Text("The quick brown fox jumps over the lazy dog"); - ImGui::TreePop(); - } - } - ImGui::NextColumn(); - if (open2) - ImGui::TreePop(); - } - ImGui::TreePop(); - } - } - ImGui::Columns(1); - ImGui::TreePop(); - } - - if (disable_indent) - ImGui::PopStyleVar(); - ImGui::PopID(); -} - -static void ShowDemoWindowMisc() -{ - if (ImGui::CollapsingHeader("Filtering")) - { - // Helper class to easy setup a text filter. - // You may want to implement a more feature-full filtering scheme in your own application. - static ImGuiTextFilter filter; - ImGui::Text("Filter usage:\n" - " \"\" display all lines\n" - " \"xxx\" display lines containing \"xxx\"\n" - " \"xxx,yyy\" display lines containing \"xxx\" or \"yyy\"\n" - " \"-xxx\" hide lines containing \"xxx\""); - filter.Draw(); - const char* lines[] = { "aaa1.c", "bbb1.c", "ccc1.c", "aaa2.cpp", "bbb2.cpp", "ccc2.cpp", "abc.h", "hello, world" }; - for (int i = 0; i < IM_ARRAYSIZE(lines); i++) - if (filter.PassFilter(lines[i])) - ImGui::BulletText("%s", lines[i]); - } - - if (ImGui::CollapsingHeader("Inputs, Navigation & Focus")) - { - ImGuiIO& io = ImGui::GetIO(); - - // Display ImGuiIO output flags - ImGui::Text("WantCaptureMouse: %d", io.WantCaptureMouse); - ImGui::Text("WantCaptureKeyboard: %d", io.WantCaptureKeyboard); - ImGui::Text("WantTextInput: %d", io.WantTextInput); - ImGui::Text("WantSetMousePos: %d", io.WantSetMousePos); - ImGui::Text("NavActive: %d, NavVisible: %d", io.NavActive, io.NavVisible); - - // Display Keyboard/Mouse state - if (ImGui::TreeNode("Keyboard, Mouse & Navigation State")) - { - if (ImGui::IsMousePosValid()) - ImGui::Text("Mouse pos: (%g, %g)", io.MousePos.x, io.MousePos.y); - else - ImGui::Text("Mouse pos: "); - ImGui::Text("Mouse delta: (%g, %g)", io.MouseDelta.x, io.MouseDelta.y); - ImGui::Text("Mouse down:"); for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (io.MouseDownDuration[i] >= 0.0f) { ImGui::SameLine(); ImGui::Text("b%d (%.02f secs)", i, io.MouseDownDuration[i]); } - ImGui::Text("Mouse clicked:"); for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui::IsMouseClicked(i)) { ImGui::SameLine(); ImGui::Text("b%d", i); } - ImGui::Text("Mouse dbl-clicked:"); for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui::IsMouseDoubleClicked(i)) { ImGui::SameLine(); ImGui::Text("b%d", i); } - ImGui::Text("Mouse released:"); for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui::IsMouseReleased(i)) { ImGui::SameLine(); ImGui::Text("b%d", i); } - ImGui::Text("Mouse wheel: %.1f", io.MouseWheel); - - ImGui::Text("Keys down:"); for (int i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (io.KeysDownDuration[i] >= 0.0f) { ImGui::SameLine(); ImGui::Text("%d (0x%X) (%.02f secs)", i, i, io.KeysDownDuration[i]); } - ImGui::Text("Keys pressed:"); for (int i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (ImGui::IsKeyPressed(i)) { ImGui::SameLine(); ImGui::Text("%d (0x%X)", i, i); } - ImGui::Text("Keys release:"); for (int i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (ImGui::IsKeyReleased(i)) { ImGui::SameLine(); ImGui::Text("%d (0x%X)", i, i); } - ImGui::Text("Keys mods: %s%s%s%s", io.KeyCtrl ? "CTRL " : "", io.KeyShift ? "SHIFT " : "", io.KeyAlt ? "ALT " : "", io.KeySuper ? "SUPER " : ""); - ImGui::Text("Chars queue:"); for (int i = 0; i < io.InputQueueCharacters.Size; i++) { ImWchar c = io.InputQueueCharacters[i]; ImGui::SameLine(); ImGui::Text("\'%c\' (0x%04X)", (c > ' ' && c <= 255) ? (char)c : '?', c); } // FIXME: We should convert 'c' to UTF-8 here but the functions are not public. - - ImGui::Text("NavInputs down:"); for (int i = 0; i < IM_ARRAYSIZE(io.NavInputs); i++) if (io.NavInputs[i] > 0.0f) { ImGui::SameLine(); ImGui::Text("[%d] %.2f", i, io.NavInputs[i]); } - ImGui::Text("NavInputs pressed:"); for (int i = 0; i < IM_ARRAYSIZE(io.NavInputs); i++) if (io.NavInputsDownDuration[i] == 0.0f) { ImGui::SameLine(); ImGui::Text("[%d]", i); } - ImGui::Text("NavInputs duration:"); for (int i = 0; i < IM_ARRAYSIZE(io.NavInputs); i++) if (io.NavInputsDownDuration[i] >= 0.0f) { ImGui::SameLine(); ImGui::Text("[%d] %.2f", i, io.NavInputsDownDuration[i]); } - - ImGui::Button("Hovering me sets the\nkeyboard capture flag"); - if (ImGui::IsItemHovered()) - ImGui::CaptureKeyboardFromApp(true); - ImGui::SameLine(); - ImGui::Button("Holding me clears the\nthe keyboard capture flag"); - if (ImGui::IsItemActive()) - ImGui::CaptureKeyboardFromApp(false); - - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Tabbing")) - { - ImGui::Text("Use TAB/SHIFT+TAB to cycle through keyboard editable fields."); - static char buf[32] = "dummy"; - ImGui::InputText("1", buf, IM_ARRAYSIZE(buf)); - ImGui::InputText("2", buf, IM_ARRAYSIZE(buf)); - ImGui::InputText("3", buf, IM_ARRAYSIZE(buf)); - ImGui::PushAllowKeyboardFocus(false); - ImGui::InputText("4 (tab skip)", buf, IM_ARRAYSIZE(buf)); - //ImGui::SameLine(); HelpMarker("Use ImGui::PushAllowKeyboardFocus(bool)\nto disable tabbing through certain widgets."); - ImGui::PopAllowKeyboardFocus(); - ImGui::InputText("5", buf, IM_ARRAYSIZE(buf)); - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Focus from code")) - { - bool focus_1 = ImGui::Button("Focus on 1"); ImGui::SameLine(); - bool focus_2 = ImGui::Button("Focus on 2"); ImGui::SameLine(); - bool focus_3 = ImGui::Button("Focus on 3"); - int has_focus = 0; - static char buf[128] = "click on a button to set focus"; - - if (focus_1) ImGui::SetKeyboardFocusHere(); - ImGui::InputText("1", buf, IM_ARRAYSIZE(buf)); - if (ImGui::IsItemActive()) has_focus = 1; - - if (focus_2) ImGui::SetKeyboardFocusHere(); - ImGui::InputText("2", buf, IM_ARRAYSIZE(buf)); - if (ImGui::IsItemActive()) has_focus = 2; - - ImGui::PushAllowKeyboardFocus(false); - if (focus_3) ImGui::SetKeyboardFocusHere(); - ImGui::InputText("3 (tab skip)", buf, IM_ARRAYSIZE(buf)); - if (ImGui::IsItemActive()) has_focus = 3; - ImGui::PopAllowKeyboardFocus(); - - if (has_focus) - ImGui::Text("Item with focus: %d", has_focus); - else - ImGui::Text("Item with focus: "); - - // Use >= 0 parameter to SetKeyboardFocusHere() to focus an upcoming item - static float f3[3] = { 0.0f, 0.0f, 0.0f }; - int focus_ahead = -1; - if (ImGui::Button("Focus on X")) { focus_ahead = 0; } ImGui::SameLine(); - if (ImGui::Button("Focus on Y")) { focus_ahead = 1; } ImGui::SameLine(); - if (ImGui::Button("Focus on Z")) { focus_ahead = 2; } - if (focus_ahead != -1) ImGui::SetKeyboardFocusHere(focus_ahead); - ImGui::SliderFloat3("Float3", &f3[0], 0.0f, 1.0f); - - ImGui::TextWrapped("NB: Cursor & selection are preserved when refocusing last used item in code."); - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Dragging")) - { - ImGui::TextWrapped("You can use ImGui::GetMouseDragDelta(0) to query for the dragged amount on any widget."); - for (int button = 0; button < 3; button++) - ImGui::Text("IsMouseDragging(%d):\n w/ default threshold: %d,\n w/ zero threshold: %d\n w/ large threshold: %d", - button, ImGui::IsMouseDragging(button), ImGui::IsMouseDragging(button, 0.0f), ImGui::IsMouseDragging(button, 20.0f)); - - ImGui::Button("Drag Me"); - if (ImGui::IsItemActive()) - ImGui::GetForegroundDrawList()->AddLine(io.MouseClickedPos[0], io.MousePos, ImGui::GetColorU32(ImGuiCol_Button), 4.0f); // Draw a line between the button and the mouse cursor - - // Drag operations gets "unlocked" when the mouse has moved past a certain threshold (the default threshold is stored in io.MouseDragThreshold) - // You can request a lower or higher threshold using the second parameter of IsMouseDragging() and GetMouseDragDelta() - ImVec2 value_raw = ImGui::GetMouseDragDelta(0, 0.0f); - ImVec2 value_with_lock_threshold = ImGui::GetMouseDragDelta(0); - ImVec2 mouse_delta = io.MouseDelta; - ImGui::Text("GetMouseDragDelta(0):\n w/ default threshold: (%.1f, %.1f),\n w/ zero threshold: (%.1f, %.1f)\nMouseDelta: (%.1f, %.1f)", value_with_lock_threshold.x, value_with_lock_threshold.y, value_raw.x, value_raw.y, mouse_delta.x, mouse_delta.y); - ImGui::TreePop(); - } - - if (ImGui::TreeNode("Mouse cursors")) - { - const char* mouse_cursors_names[] = { "Arrow", "TextInput", "ResizeAll", "ResizeNS", "ResizeEW", "ResizeNESW", "ResizeNWSE", "Hand", "NotAllowed" }; - IM_ASSERT(IM_ARRAYSIZE(mouse_cursors_names) == ImGuiMouseCursor_COUNT); - - ImGui::Text("Current mouse cursor = %d: %s", ImGui::GetMouseCursor(), mouse_cursors_names[ImGui::GetMouseCursor()]); - ImGui::Text("Hover to see mouse cursors:"); - ImGui::SameLine(); HelpMarker("Your application can render a different mouse cursor based on what ImGui::GetMouseCursor() returns. If software cursor rendering (io.MouseDrawCursor) is set ImGui will draw the right cursor for you, otherwise your backend needs to handle it."); - for (int i = 0; i < ImGuiMouseCursor_COUNT; i++) - { - char label[32]; - sprintf(label, "Mouse cursor %d: %s", i, mouse_cursors_names[i]); - ImGui::Bullet(); ImGui::Selectable(label, false); - if (ImGui::IsItemHovered() || ImGui::IsItemFocused()) - ImGui::SetMouseCursor(i); - } - ImGui::TreePop(); - } - } -} - -//----------------------------------------------------------------------------- -// [SECTION] About Window / ShowAboutWindow() -// Access from Dear ImGui Demo -> Tools -> About -//----------------------------------------------------------------------------- - -void ImGui::ShowAboutWindow(bool* p_open) -{ - if (!ImGui::Begin("About Dear ImGui", p_open, ImGuiWindowFlags_AlwaysAutoResize)) - { - ImGui::End(); - return; - } - ImGui::Text("Dear ImGui %s", ImGui::GetVersion()); - ImGui::Separator(); - ImGui::Text("By Omar Cornut and all Dear ImGui contributors."); - ImGui::Text("Dear ImGui is licensed under the MIT License, see LICENSE for more information."); - - static bool show_config_info = false; - ImGui::Checkbox("Config/Build Information", &show_config_info); - if (show_config_info) - { - ImGuiIO& io = ImGui::GetIO(); - ImGuiStyle& style = ImGui::GetStyle(); - - bool copy_to_clipboard = ImGui::Button("Copy to clipboard"); - ImGui::BeginChildFrame(ImGui::GetID("cfginfos"), ImVec2(0, ImGui::GetTextLineHeightWithSpacing() * 18), ImGuiWindowFlags_NoMove); - if (copy_to_clipboard) - { - ImGui::LogToClipboard(); - ImGui::LogText("```\n"); // Back quotes will make the text appears without formatting when pasting to GitHub - } - - ImGui::Text("Dear ImGui %s (%d)", IMGUI_VERSION, IMGUI_VERSION_NUM); - ImGui::Separator(); - ImGui::Text("sizeof(size_t): %d, sizeof(ImDrawIdx): %d, sizeof(ImDrawVert): %d", (int)sizeof(size_t), (int)sizeof(ImDrawIdx), (int)sizeof(ImDrawVert)); - ImGui::Text("define: __cplusplus=%d", (int)__cplusplus); -#ifdef IMGUI_DISABLE_OBSOLETE_FUNCTIONS - ImGui::Text("define: IMGUI_DISABLE_OBSOLETE_FUNCTIONS"); -#endif -#ifdef IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS - ImGui::Text("define: IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS"); -#endif -#ifdef IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS - ImGui::Text("define: IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS"); -#endif -#ifdef IMGUI_DISABLE_WIN32_FUNCTIONS - ImGui::Text("define: IMGUI_DISABLE_WIN32_FUNCTIONS"); -#endif -#ifdef IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS - ImGui::Text("define: IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS"); -#endif -#ifdef IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS - ImGui::Text("define: IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS"); -#endif -#ifdef IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS - ImGui::Text("define: IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS"); -#endif -#ifdef IMGUI_DISABLE_FILE_FUNCTIONS - ImGui::Text("define: IMGUI_DISABLE_FILE_FUNCTIONS"); -#endif -#ifdef IMGUI_DISABLE_DEFAULT_ALLOCATORS - ImGui::Text("define: IMGUI_DISABLE_DEFAULT_ALLOCATORS"); -#endif -#ifdef IMGUI_USE_BGRA_PACKED_COLOR - ImGui::Text("define: IMGUI_USE_BGRA_PACKED_COLOR"); -#endif -#ifdef _WIN32 - ImGui::Text("define: _WIN32"); -#endif -#ifdef _WIN64 - ImGui::Text("define: _WIN64"); -#endif -#ifdef __linux__ - ImGui::Text("define: __linux__"); -#endif -#ifdef __APPLE__ - ImGui::Text("define: __APPLE__"); -#endif -#ifdef _MSC_VER - ImGui::Text("define: _MSC_VER=%d", _MSC_VER); -#endif -#ifdef __MINGW32__ - ImGui::Text("define: __MINGW32__"); -#endif -#ifdef __MINGW64__ - ImGui::Text("define: __MINGW64__"); -#endif -#ifdef __GNUC__ - ImGui::Text("define: __GNUC__=%d", (int)__GNUC__); -#endif -#ifdef __clang_version__ - ImGui::Text("define: __clang_version__=%s", __clang_version__); -#endif - ImGui::Separator(); - ImGui::Text("io.BackendPlatformName: %s", io.BackendPlatformName ? io.BackendPlatformName : "NULL"); - ImGui::Text("io.BackendRendererName: %s", io.BackendRendererName ? io.BackendRendererName : "NULL"); - ImGui::Text("io.ConfigFlags: 0x%08X", io.ConfigFlags); - if (io.ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard) ImGui::Text(" NavEnableKeyboard"); - if (io.ConfigFlags & ImGuiConfigFlags_NavEnableGamepad) ImGui::Text(" NavEnableGamepad"); - if (io.ConfigFlags & ImGuiConfigFlags_NavEnableSetMousePos) ImGui::Text(" NavEnableSetMousePos"); - if (io.ConfigFlags & ImGuiConfigFlags_NavNoCaptureKeyboard) ImGui::Text(" NavNoCaptureKeyboard"); - if (io.ConfigFlags & ImGuiConfigFlags_NoMouse) ImGui::Text(" NoMouse"); - if (io.ConfigFlags & ImGuiConfigFlags_NoMouseCursorChange) ImGui::Text(" NoMouseCursorChange"); - if (io.MouseDrawCursor) ImGui::Text("io.MouseDrawCursor"); - if (io.ConfigMacOSXBehaviors) ImGui::Text("io.ConfigMacOSXBehaviors"); - if (io.ConfigInputTextCursorBlink) ImGui::Text("io.ConfigInputTextCursorBlink"); - if (io.ConfigWindowsResizeFromEdges) ImGui::Text("io.ConfigWindowsResizeFromEdges"); - if (io.ConfigWindowsMoveFromTitleBarOnly) ImGui::Text("io.ConfigWindowsMoveFromTitleBarOnly"); - if (io.ConfigWindowsMemoryCompactTimer >= 0.0f) ImGui::Text("io.ConfigWindowsMemoryCompactTimer = %.1ff", io.ConfigWindowsMemoryCompactTimer); - ImGui::Text("io.BackendFlags: 0x%08X", io.BackendFlags); - if (io.BackendFlags & ImGuiBackendFlags_HasGamepad) ImGui::Text(" HasGamepad"); - if (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors) ImGui::Text(" HasMouseCursors"); - if (io.BackendFlags & ImGuiBackendFlags_HasSetMousePos) ImGui::Text(" HasSetMousePos"); - if (io.BackendFlags & ImGuiBackendFlags_RendererHasVtxOffset) ImGui::Text(" RendererHasVtxOffset"); - ImGui::Separator(); - ImGui::Text("io.Fonts: %d fonts, Flags: 0x%08X, TexSize: %d,%d", io.Fonts->Fonts.Size, io.Fonts->Flags, io.Fonts->TexWidth, io.Fonts->TexHeight); - ImGui::Text("io.DisplaySize: %.2f,%.2f", io.DisplaySize.x, io.DisplaySize.y); - ImGui::Text("io.DisplayFramebufferScale: %.2f,%.2f", io.DisplayFramebufferScale.x, io.DisplayFramebufferScale.y); - ImGui::Separator(); - ImGui::Text("style.WindowPadding: %.2f,%.2f", style.WindowPadding.x, style.WindowPadding.y); - ImGui::Text("style.WindowBorderSize: %.2f", style.WindowBorderSize); - ImGui::Text("style.FramePadding: %.2f,%.2f", style.FramePadding.x, style.FramePadding.y); - ImGui::Text("style.FrameRounding: %.2f", style.FrameRounding); - ImGui::Text("style.FrameBorderSize: %.2f", style.FrameBorderSize); - ImGui::Text("style.ItemSpacing: %.2f,%.2f", style.ItemSpacing.x, style.ItemSpacing.y); - ImGui::Text("style.ItemInnerSpacing: %.2f,%.2f", style.ItemInnerSpacing.x, style.ItemInnerSpacing.y); - - if (copy_to_clipboard) - { - ImGui::LogText("\n```\n"); - ImGui::LogFinish(); - } - ImGui::EndChildFrame(); - } - ImGui::End(); -} - -//----------------------------------------------------------------------------- -// [SECTION] Style Editor / ShowStyleEditor() -//----------------------------------------------------------------------------- -// - ShowStyleSelector() -// - ShowFontSelector() -// - ShowStyleEditor() -//----------------------------------------------------------------------------- - -// Demo helper function to select among default colors. See ShowStyleEditor() for more advanced options. -// Here we use the simplified Combo() api that packs items into a single literal string. Useful for quick combo boxes where the choices are known locally. -bool ImGui::ShowStyleSelector(const char* label) -{ - static int style_idx = -1; - if (ImGui::Combo(label, &style_idx, "Classic\0Dark\0Light\0")) - { - switch (style_idx) - { - case 0: ImGui::StyleColorsClassic(); break; - case 1: ImGui::StyleColorsDark(); break; - case 2: ImGui::StyleColorsLight(); break; - } - return true; - } - return false; -} - -// Demo helper function to select among loaded fonts. -// Here we use the regular BeginCombo()/EndCombo() api which is more the more flexible one. -void ImGui::ShowFontSelector(const char* label) -{ - ImGuiIO& io = ImGui::GetIO(); - ImFont* font_current = ImGui::GetFont(); - if (ImGui::BeginCombo(label, font_current->GetDebugName())) - { - for (int n = 0; n < io.Fonts->Fonts.Size; n++) - { - ImFont* font = io.Fonts->Fonts[n]; - ImGui::PushID((void*)font); - if (ImGui::Selectable(font->GetDebugName(), font == font_current)) - io.FontDefault = font; - ImGui::PopID(); - } - ImGui::EndCombo(); - } - ImGui::SameLine(); - HelpMarker( - "- Load additional fonts with io.Fonts->AddFontFromFileTTF().\n" - "- The font atlas is built when calling io.Fonts->GetTexDataAsXXXX() or io.Fonts->Build().\n" - "- Read FAQ and docs/FONTS.txt for more details.\n" - "- If you need to add/remove fonts at runtime (e.g. for DPI change), do it before calling NewFrame()."); -} - -void ImGui::ShowStyleEditor(ImGuiStyle* ref) -{ - // You can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it compares to an internally stored reference) - ImGuiStyle& style = ImGui::GetStyle(); - static ImGuiStyle ref_saved_style; - - // Default to using internal storage as reference - static bool init = true; - if (init && ref == NULL) - ref_saved_style = style; - init = false; - if (ref == NULL) - ref = &ref_saved_style; - - ImGui::PushItemWidth(ImGui::GetWindowWidth() * 0.50f); - - if (ImGui::ShowStyleSelector("Colors##Selector")) - ref_saved_style = style; - ImGui::ShowFontSelector("Fonts##Selector"); - - // Simplified Settings - if (ImGui::SliderFloat("FrameRounding", &style.FrameRounding, 0.0f, 12.0f, "%.0f")) - style.GrabRounding = style.FrameRounding; // Make GrabRounding always the same value as FrameRounding - { bool window_border = (style.WindowBorderSize > 0.0f); if (ImGui::Checkbox("WindowBorder", &window_border)) style.WindowBorderSize = window_border ? 1.0f : 0.0f; } - ImGui::SameLine(); - { bool frame_border = (style.FrameBorderSize > 0.0f); if (ImGui::Checkbox("FrameBorder", &frame_border)) style.FrameBorderSize = frame_border ? 1.0f : 0.0f; } - ImGui::SameLine(); - { bool popup_border = (style.PopupBorderSize > 0.0f); if (ImGui::Checkbox("PopupBorder", &popup_border)) style.PopupBorderSize = popup_border ? 1.0f : 0.0f; } - - // Save/Revert button - if (ImGui::Button("Save Ref")) - *ref = ref_saved_style = style; - ImGui::SameLine(); - if (ImGui::Button("Revert Ref")) - style = *ref; - ImGui::SameLine(); - HelpMarker("Save/Revert in local non-persistent storage. Default Colors definition are not affected. Use \"Export\" below to save them somewhere."); - - ImGui::Separator(); - - if (ImGui::BeginTabBar("##tabs", ImGuiTabBarFlags_None)) - { - if (ImGui::BeginTabItem("Sizes")) - { - ImGui::Text("Main"); - ImGui::SliderFloat2("WindowPadding", (float*)&style.WindowPadding, 0.0f, 20.0f, "%.0f"); - ImGui::SliderFloat2("FramePadding", (float*)&style.FramePadding, 0.0f, 20.0f, "%.0f"); - ImGui::SliderFloat2("ItemSpacing", (float*)&style.ItemSpacing, 0.0f, 20.0f, "%.0f"); - ImGui::SliderFloat2("ItemInnerSpacing", (float*)&style.ItemInnerSpacing, 0.0f, 20.0f, "%.0f"); - ImGui::SliderFloat2("TouchExtraPadding", (float*)&style.TouchExtraPadding, 0.0f, 10.0f, "%.0f"); - ImGui::SliderFloat("IndentSpacing", &style.IndentSpacing, 0.0f, 30.0f, "%.0f"); - ImGui::SliderFloat("ScrollbarSize", &style.ScrollbarSize, 1.0f, 20.0f, "%.0f"); - ImGui::SliderFloat("GrabMinSize", &style.GrabMinSize, 1.0f, 20.0f, "%.0f"); - ImGui::Text("Borders"); - ImGui::SliderFloat("WindowBorderSize", &style.WindowBorderSize, 0.0f, 1.0f, "%.0f"); - ImGui::SliderFloat("ChildBorderSize", &style.ChildBorderSize, 0.0f, 1.0f, "%.0f"); - ImGui::SliderFloat("PopupBorderSize", &style.PopupBorderSize, 0.0f, 1.0f, "%.0f"); - ImGui::SliderFloat("FrameBorderSize", &style.FrameBorderSize, 0.0f, 1.0f, "%.0f"); - ImGui::SliderFloat("TabBorderSize", &style.TabBorderSize, 0.0f, 1.0f, "%.0f"); - ImGui::Text("Rounding"); - ImGui::SliderFloat("WindowRounding", &style.WindowRounding, 0.0f, 12.0f, "%.0f"); - ImGui::SliderFloat("ChildRounding", &style.ChildRounding, 0.0f, 12.0f, "%.0f"); - ImGui::SliderFloat("FrameRounding", &style.FrameRounding, 0.0f, 12.0f, "%.0f"); - ImGui::SliderFloat("PopupRounding", &style.PopupRounding, 0.0f, 12.0f, "%.0f"); - ImGui::SliderFloat("ScrollbarRounding", &style.ScrollbarRounding, 0.0f, 12.0f, "%.0f"); - ImGui::SliderFloat("GrabRounding", &style.GrabRounding, 0.0f, 12.0f, "%.0f"); - ImGui::SliderFloat("TabRounding", &style.TabRounding, 0.0f, 12.0f, "%.0f"); - ImGui::Text("Alignment"); - ImGui::SliderFloat2("WindowTitleAlign", (float*)&style.WindowTitleAlign, 0.0f, 1.0f, "%.2f"); - int window_menu_button_position = style.WindowMenuButtonPosition + 1; - if (ImGui::Combo("WindowMenuButtonPosition", (int*)&window_menu_button_position, "None\0Left\0Right\0")) - style.WindowMenuButtonPosition = window_menu_button_position - 1; - ImGui::Combo("ColorButtonPosition", (int*)&style.ColorButtonPosition, "Left\0Right\0"); - ImGui::SliderFloat2("ButtonTextAlign", (float*)&style.ButtonTextAlign, 0.0f, 1.0f, "%.2f"); ImGui::SameLine(); HelpMarker("Alignment applies when a button is larger than its text content."); - ImGui::SliderFloat2("SelectableTextAlign", (float*)&style.SelectableTextAlign, 0.0f, 1.0f, "%.2f"); ImGui::SameLine(); HelpMarker("Alignment applies when a selectable is larger than its text content."); - ImGui::Text("Safe Area Padding"); ImGui::SameLine(); HelpMarker("Adjust if you cannot see the edges of your screen (e.g. on a TV where scaling has not been configured)."); - ImGui::SliderFloat2("DisplaySafeAreaPadding", (float*)&style.DisplaySafeAreaPadding, 0.0f, 30.0f, "%.0f"); - ImGui::EndTabItem(); - } - - if (ImGui::BeginTabItem("Colors")) - { - static int output_dest = 0; - static bool output_only_modified = true; - if (ImGui::Button("Export")) - { - if (output_dest == 0) - ImGui::LogToClipboard(); - else - ImGui::LogToTTY(); - ImGui::LogText("ImVec4* colors = ImGui::GetStyle().Colors;" IM_NEWLINE); - for (int i = 0; i < ImGuiCol_COUNT; i++) - { - const ImVec4& col = style.Colors[i]; - const char* name = ImGui::GetStyleColorName(i); - if (!output_only_modified || memcmp(&col, &ref->Colors[i], sizeof(ImVec4)) != 0) - ImGui::LogText("colors[ImGuiCol_%s]%*s= ImVec4(%.2ff, %.2ff, %.2ff, %.2ff);" IM_NEWLINE, name, 23 - (int)strlen(name), "", col.x, col.y, col.z, col.w); - } - ImGui::LogFinish(); - } - ImGui::SameLine(); ImGui::SetNextItemWidth(120); ImGui::Combo("##output_type", &output_dest, "To Clipboard\0To TTY\0"); - ImGui::SameLine(); ImGui::Checkbox("Only Modified Colors", &output_only_modified); - - static ImGuiTextFilter filter; - filter.Draw("Filter colors", ImGui::GetFontSize() * 16); - - static ImGuiColorEditFlags alpha_flags = 0; - if (ImGui::RadioButton("Opaque", alpha_flags == 0)) { alpha_flags = 0; } ImGui::SameLine(); - if (ImGui::RadioButton("Alpha", alpha_flags == ImGuiColorEditFlags_AlphaPreview)) { alpha_flags = ImGuiColorEditFlags_AlphaPreview; } ImGui::SameLine(); - if (ImGui::RadioButton("Both", alpha_flags == ImGuiColorEditFlags_AlphaPreviewHalf)) { alpha_flags = ImGuiColorEditFlags_AlphaPreviewHalf; } ImGui::SameLine(); - HelpMarker("In the color list:\nLeft-click on colored square to open color picker,\nRight-click to open edit options menu."); - - ImGui::BeginChild("##colors", ImVec2(0, 0), true, ImGuiWindowFlags_AlwaysVerticalScrollbar | ImGuiWindowFlags_AlwaysHorizontalScrollbar | ImGuiWindowFlags_NavFlattened); - ImGui::PushItemWidth(-160); - for (int i = 0; i < ImGuiCol_COUNT; i++) - { - const char* name = ImGui::GetStyleColorName(i); - if (!filter.PassFilter(name)) - continue; - ImGui::PushID(i); - ImGui::ColorEdit4("##color", (float*)&style.Colors[i], ImGuiColorEditFlags_AlphaBar | alpha_flags); - if (memcmp(&style.Colors[i], &ref->Colors[i], sizeof(ImVec4)) != 0) - { - // Tips: in a real user application, you may want to merge and use an icon font into the main font, so instead of "Save"/"Revert" you'd use icons. - // Read the FAQ and docs/FONTS.txt about using icon fonts. It's really easy and super convenient! - ImGui::SameLine(0.0f, style.ItemInnerSpacing.x); if (ImGui::Button("Save")) ref->Colors[i] = style.Colors[i]; - ImGui::SameLine(0.0f, style.ItemInnerSpacing.x); if (ImGui::Button("Revert")) style.Colors[i] = ref->Colors[i]; - } - ImGui::SameLine(0.0f, style.ItemInnerSpacing.x); - ImGui::TextUnformatted(name); - ImGui::PopID(); - } - ImGui::PopItemWidth(); - ImGui::EndChild(); - - ImGui::EndTabItem(); - } - - if (ImGui::BeginTabItem("Fonts")) - { - ImGuiIO& io = ImGui::GetIO(); - ImFontAtlas* atlas = io.Fonts; - HelpMarker("Read FAQ and docs/FONTS.txt for details on font loading."); - ImGui::PushItemWidth(120); - for (int i = 0; i < atlas->Fonts.Size; i++) - { - ImFont* font = atlas->Fonts[i]; - ImGui::PushID(font); - bool font_details_opened = ImGui::TreeNode(font, "Font %d: \"%s\"\n%.2f px, %d glyphs, %d file(s)", i, font->ConfigData ? font->ConfigData[0].Name : "", font->FontSize, font->Glyphs.Size, font->ConfigDataCount); - ImGui::SameLine(); if (ImGui::SmallButton("Set as default")) { io.FontDefault = font; } - if (font_details_opened) - { - ImGui::PushFont(font); - ImGui::Text("The quick brown fox jumps over the lazy dog"); - ImGui::PopFont(); - ImGui::DragFloat("Font scale", &font->Scale, 0.005f, 0.3f, 2.0f, "%.1f"); // Scale only this font - ImGui::SameLine(); HelpMarker("Note than the default embedded font is NOT meant to be scaled.\n\nFont are currently rendered into bitmaps at a given size at the time of building the atlas. You may oversample them to get some flexibility with scaling. You can also render at multiple sizes and select which one to use at runtime.\n\n(Glimmer of hope: the atlas system should hopefully be rewritten in the future to make scaling more natural and automatic.)"); - ImGui::InputFloat("Font offset", &font->DisplayOffset.y, 1, 1, "%.0f"); - ImGui::Text("Ascent: %f, Descent: %f, Height: %f", font->Ascent, font->Descent, font->Ascent - font->Descent); - ImGui::Text("Fallback character: '%c' (U+%04X)", font->FallbackChar, font->FallbackChar); - ImGui::Text("Ellipsis character: '%c' (U+%04X)", font->EllipsisChar, font->EllipsisChar); - const float surface_sqrt = sqrtf((float)font->MetricsTotalSurface); - ImGui::Text("Texture Area: about %d px ~%dx%d px", font->MetricsTotalSurface, (int)surface_sqrt, (int)surface_sqrt); - for (int config_i = 0; config_i < font->ConfigDataCount; config_i++) - if (font->ConfigData) - if (const ImFontConfig* cfg = &font->ConfigData[config_i]) - ImGui::BulletText("Input %d: \'%s\', Oversample: (%d,%d), PixelSnapH: %d", config_i, cfg->Name, cfg->OversampleH, cfg->OversampleV, cfg->PixelSnapH); - if (ImGui::TreeNode("Glyphs", "Glyphs (%d)", font->Glyphs.Size)) - { - // Display all glyphs of the fonts in separate pages of 256 characters - for (unsigned int base = 0; base <= IM_UNICODE_CODEPOINT_MAX; base += 256) - { - // Skip ahead if a large bunch of glyphs are not present in the font (test in chunks of 4k) - // This is only a small optimization to reduce the number of iterations when IM_UNICODE_MAX_CODEPOINT is large. - // (if ImWchar==ImWchar32 we will do at least about 272 queries here) - if (!(base & 4095) && font->IsGlyphRangeUnused(base, base + 4095)) - { - base += 4096 - 256; - continue; - } - - int count = 0; - for (unsigned int n = 0; n < 256; n++) - count += font->FindGlyphNoFallback((ImWchar)(base + n)) ? 1 : 0; - if (count > 0 && ImGui::TreeNode((void*)(intptr_t)base, "U+%04X..U+%04X (%d %s)", base, base + 255, count, count > 1 ? "glyphs" : "glyph")) - { - float cell_size = font->FontSize * 1; - float cell_spacing = style.ItemSpacing.y; - ImVec2 base_pos = ImGui::GetCursorScreenPos(); - ImDrawList* draw_list = ImGui::GetWindowDrawList(); - for (unsigned int n = 0; n < 256; n++) - { - ImVec2 cell_p1(base_pos.x + (n % 16) * (cell_size + cell_spacing), base_pos.y + (n / 16) * (cell_size + cell_spacing)); - ImVec2 cell_p2(cell_p1.x + cell_size, cell_p1.y + cell_size); - const ImFontGlyph* glyph = font->FindGlyphNoFallback((ImWchar)(base + n)); - draw_list->AddRect(cell_p1, cell_p2, glyph ? IM_COL32(255, 255, 255, 100) : IM_COL32(255, 255, 255, 50)); - if (glyph) - font->RenderChar(draw_list, cell_size, cell_p1, ImGui::GetColorU32(ImGuiCol_Text), (ImWchar)(base + n)); // We use ImFont::RenderChar as a shortcut because we don't have UTF-8 conversion functions available to generate a string. - if (glyph && ImGui::IsMouseHoveringRect(cell_p1, cell_p2)) - { - ImGui::BeginTooltip(); - ImGui::Text("Codepoint: U+%04X", base + n); - ImGui::Separator(); - ImGui::Text("Visible: %d", glyph->Visible); - ImGui::Text("AdvanceX: %.1f", glyph->AdvanceX); - ImGui::Text("Pos: (%.2f,%.2f)->(%.2f,%.2f)", glyph->X0, glyph->Y0, glyph->X1, glyph->Y1); - ImGui::Text("UV: (%.3f,%.3f)->(%.3f,%.3f)", glyph->U0, glyph->V0, glyph->U1, glyph->V1); - ImGui::EndTooltip(); - } - } - ImGui::Dummy(ImVec2((cell_size + cell_spacing) * 16, (cell_size + cell_spacing) * 16)); - ImGui::TreePop(); - } - } - ImGui::TreePop(); - } - ImGui::TreePop(); - } - ImGui::PopID(); - } - if (ImGui::TreeNode("Atlas texture", "Atlas texture (%dx%d pixels)", atlas->TexWidth, atlas->TexHeight)) - { - ImVec4 tint_col = ImVec4(1.0f, 1.0f, 1.0f, 1.0f); - ImVec4 border_col = ImVec4(1.0f, 1.0f, 1.0f, 0.5f); - ImGui::Image(atlas->TexID, ImVec2((float)atlas->TexWidth, (float)atlas->TexHeight), ImVec2(0, 0), ImVec2(1, 1), tint_col, border_col); - ImGui::TreePop(); - } - - HelpMarker("Those are old settings provided for convenience.\nHowever, the _correct_ way of scaling your UI is currently to reload your font at the designed size, rebuild the font atlas, and call style.ScaleAllSizes() on a reference ImGuiStyle structure."); - static float window_scale = 1.0f; - if (ImGui::DragFloat("window scale", &window_scale, 0.005f, 0.3f, 2.0f, "%.2f")) // scale only this window - ImGui::SetWindowFontScale(window_scale); - ImGui::DragFloat("global scale", &io.FontGlobalScale, 0.005f, 0.3f, 2.0f, "%.2f"); // scale everything - ImGui::PopItemWidth(); - - ImGui::EndTabItem(); - } - - if (ImGui::BeginTabItem("Rendering")) - { - ImGui::Checkbox("Anti-aliased lines", &style.AntiAliasedLines); ImGui::SameLine(); HelpMarker("When disabling anti-aliasing lines, you'll probably want to disable borders in your style as well."); - ImGui::Checkbox("Anti-aliased fill", &style.AntiAliasedFill); - ImGui::PushItemWidth(100); - ImGui::DragFloat("Curve Tessellation Tolerance", &style.CurveTessellationTol, 0.02f, 0.10f, 10.0f, "%.2f"); - if (style.CurveTessellationTol < 0.10f) style.CurveTessellationTol = 0.10f; - ImGui::DragFloat("Circle segment Max Error", &style.CircleSegmentMaxError, 0.01f, 0.10f, 10.0f, "%.2f"); - ImGui::DragFloat("Global Alpha", &style.Alpha, 0.005f, 0.20f, 1.0f, "%.2f"); // Not exposing zero here so user doesn't "lose" the UI (zero alpha clips all widgets). But application code could have a toggle to switch between zero and non-zero. - ImGui::PopItemWidth(); - - ImGui::EndTabItem(); - } - - ImGui::EndTabBar(); - } - - ImGui::PopItemWidth(); -} - -//----------------------------------------------------------------------------- -// [SECTION] Example App: Main Menu Bar / ShowExampleAppMainMenuBar() -//----------------------------------------------------------------------------- -// - ShowExampleAppMainMenuBar() -// - ShowExampleMenuFile() -//----------------------------------------------------------------------------- - -// Demonstrate creating a "main" fullscreen menu bar and populating it. -// Note the difference between BeginMainMenuBar() and BeginMenuBar(): -// - BeginMenuBar() = menu-bar inside current window we Begin()-ed into (the window needs the ImGuiWindowFlags_MenuBar flag) -// - BeginMainMenuBar() = helper to create menu-bar-sized window at the top of the main viewport + call BeginMenuBar() into it. -static void ShowExampleAppMainMenuBar() -{ - if (ImGui::BeginMainMenuBar()) - { - if (ImGui::BeginMenu("File")) - { - ShowExampleMenuFile(); - ImGui::EndMenu(); - } - if (ImGui::BeginMenu("Edit")) - { - if (ImGui::MenuItem("Undo", "CTRL+Z")) {} - if (ImGui::MenuItem("Redo", "CTRL+Y", false, false)) {} // Disabled item - ImGui::Separator(); - if (ImGui::MenuItem("Cut", "CTRL+X")) {} - if (ImGui::MenuItem("Copy", "CTRL+C")) {} - if (ImGui::MenuItem("Paste", "CTRL+V")) {} - ImGui::EndMenu(); - } - ImGui::EndMainMenuBar(); - } -} - -// Note that shortcuts are currently provided for display only (future version will add flags to BeginMenu to process shortcuts) -static void ShowExampleMenuFile() -{ - ImGui::MenuItem("(dummy menu)", NULL, false, false); - if (ImGui::MenuItem("New")) {} - if (ImGui::MenuItem("Open", "Ctrl+O")) {} - if (ImGui::BeginMenu("Open Recent")) - { - ImGui::MenuItem("fish_hat.c"); - ImGui::MenuItem("fish_hat.inl"); - ImGui::MenuItem("fish_hat.h"); - if (ImGui::BeginMenu("More..")) - { - ImGui::MenuItem("Hello"); - ImGui::MenuItem("Sailor"); - if (ImGui::BeginMenu("Recurse..")) - { - ShowExampleMenuFile(); - ImGui::EndMenu(); - } - ImGui::EndMenu(); - } - ImGui::EndMenu(); - } - if (ImGui::MenuItem("Save", "Ctrl+S")) {} - if (ImGui::MenuItem("Save As..")) {} - - ImGui::Separator(); - if (ImGui::BeginMenu("Options")) - { - static bool enabled = true; - ImGui::MenuItem("Enabled", "", &enabled); - ImGui::BeginChild("child", ImVec2(0, 60), true); - for (int i = 0; i < 10; i++) - ImGui::Text("Scrolling Text %d", i); - ImGui::EndChild(); - static float f = 0.5f; - static int n = 0; - ImGui::SliderFloat("Value", &f, 0.0f, 1.0f); - ImGui::InputFloat("Input", &f, 0.1f); - ImGui::Combo("Combo", &n, "Yes\0No\0Maybe\0\0"); - ImGui::EndMenu(); - } - - if (ImGui::BeginMenu("Colors")) - { - float sz = ImGui::GetTextLineHeight(); - for (int i = 0; i < ImGuiCol_COUNT; i++) - { - const char* name = ImGui::GetStyleColorName((ImGuiCol)i); - ImVec2 p = ImGui::GetCursorScreenPos(); - ImGui::GetWindowDrawList()->AddRectFilled(p, ImVec2(p.x+sz, p.y+sz), ImGui::GetColorU32((ImGuiCol)i)); - ImGui::Dummy(ImVec2(sz, sz)); - ImGui::SameLine(); - ImGui::MenuItem(name); - } - ImGui::EndMenu(); - } - - // Here we demonstrate appending again to the "Options" menu (which we already created above) - // Of course in this demo it is a little bit silly that this function calls BeginMenu("Options") twice. - // In a real code-base using it would make senses to use this feature from very different code locations. - if (ImGui::BeginMenu("Options")) // <-- Append! - { - static bool b = true; - ImGui::Checkbox("SomeOption", &b); - ImGui::EndMenu(); - } - - if (ImGui::BeginMenu("Disabled", false)) // Disabled - { - IM_ASSERT(0); - } - if (ImGui::MenuItem("Checked", NULL, true)) {} - if (ImGui::MenuItem("Quit", "Alt+F4")) {} -} - -//----------------------------------------------------------------------------- -// [SECTION] Example App: Debug Console / ShowExampleAppConsole() -//----------------------------------------------------------------------------- - -// Demonstrate creating a simple console window, with scrolling, filtering, completion and history. -// For the console example, here we are using a more C++ like approach of declaring a class to hold the data and the functions. -struct ExampleAppConsole -{ - char InputBuf[256]; - ImVector Items; - ImVector Commands; - ImVector History; - int HistoryPos; // -1: new line, 0..History.Size-1 browsing history. - ImGuiTextFilter Filter; - bool AutoScroll; - bool ScrollToBottom; - - ExampleAppConsole() - { - ClearLog(); - memset(InputBuf, 0, sizeof(InputBuf)); - HistoryPos = -1; - Commands.push_back("HELP"); - Commands.push_back("HISTORY"); - Commands.push_back("CLEAR"); - Commands.push_back("CLASSIFY"); // "classify" is only here to provide an example of "C"+[tab] completing to "CL" and displaying matches. - AutoScroll = true; - ScrollToBottom = false; - AddLog("Welcome to Dear ImGui!"); - } - ~ExampleAppConsole() - { - ClearLog(); - for (int i = 0; i < History.Size; i++) - free(History[i]); - } - - // Portable helpers - static int Stricmp(const char* str1, const char* str2) { int d; while ((d = toupper(*str2) - toupper(*str1)) == 0 && *str1) { str1++; str2++; } return d; } - static int Strnicmp(const char* str1, const char* str2, int n) { int d = 0; while (n > 0 && (d = toupper(*str2) - toupper(*str1)) == 0 && *str1) { str1++; str2++; n--; } return d; } - static char* Strdup(const char *str) { size_t len = strlen(str) + 1; void* buf = malloc(len); IM_ASSERT(buf); return (char*)memcpy(buf, (const void*)str, len); } - static void Strtrim(char* str) { char* str_end = str + strlen(str); while (str_end > str && str_end[-1] == ' ') str_end--; *str_end = 0; } - - void ClearLog() - { - for (int i = 0; i < Items.Size; i++) - free(Items[i]); - Items.clear(); - } - - void AddLog(const char* fmt, ...) IM_FMTARGS(2) - { - // FIXME-OPT - char buf[1024]; - va_list args; - va_start(args, fmt); - vsnprintf(buf, IM_ARRAYSIZE(buf), fmt, args); - buf[IM_ARRAYSIZE(buf)-1] = 0; - va_end(args); - Items.push_back(Strdup(buf)); - } - - void Draw(const char* title, bool* p_open) - { - ImGui::SetNextWindowSize(ImVec2(520,600), ImGuiCond_FirstUseEver); - if (!ImGui::Begin(title, p_open)) - { - ImGui::End(); - return; - } - - // As a specific feature guaranteed by the library, after calling Begin() the last Item represent the title bar. So e.g. IsItemHovered() will return true when hovering the title bar. - // Here we create a context menu only available from the title bar. - if (ImGui::BeginPopupContextItem()) - { - if (ImGui::MenuItem("Close Console")) - *p_open = false; - ImGui::EndPopup(); - } - - ImGui::TextWrapped("This example implements a console with basic coloring, completion and history. A more elaborate implementation may want to store entries along with extra data such as timestamp, emitter, etc."); - ImGui::TextWrapped("Enter 'HELP' for help, press TAB to use text completion."); - - // TODO: display items starting from the bottom - - if (ImGui::SmallButton("Add Dummy Text")) { AddLog("%d some text", Items.Size); AddLog("some more text"); AddLog("display very important message here!"); } ImGui::SameLine(); - if (ImGui::SmallButton("Add Dummy Error")) { AddLog("[error] something went wrong"); } ImGui::SameLine(); - if (ImGui::SmallButton("Clear")) { ClearLog(); } ImGui::SameLine(); - bool copy_to_clipboard = ImGui::SmallButton("Copy"); - //static float t = 0.0f; if (ImGui::GetTime() - t > 0.02f) { t = ImGui::GetTime(); AddLog("Spam %f", t); } - - ImGui::Separator(); - - // Options menu - if (ImGui::BeginPopup("Options")) - { - ImGui::Checkbox("Auto-scroll", &AutoScroll); - ImGui::EndPopup(); - } - - // Options, Filter - if (ImGui::Button("Options")) - ImGui::OpenPopup("Options"); - ImGui::SameLine(); - Filter.Draw("Filter (\"incl,-excl\") (\"error\")", 180); - ImGui::Separator(); - - const float footer_height_to_reserve = ImGui::GetStyle().ItemSpacing.y + ImGui::GetFrameHeightWithSpacing(); // 1 separator, 1 input text - ImGui::BeginChild("ScrollingRegion", ImVec2(0, -footer_height_to_reserve), false, ImGuiWindowFlags_HorizontalScrollbar); // Leave room for 1 separator + 1 InputText - if (ImGui::BeginPopupContextWindow()) - { - if (ImGui::Selectable("Clear")) ClearLog(); - ImGui::EndPopup(); - } - - // Display every line as a separate entry so we can change their color or add custom widgets. If you only want raw text you can use ImGui::TextUnformatted(log.begin(), log.end()); - // NB- if you have thousands of entries this approach may be too inefficient and may require user-side clipping to only process visible items. - // You can seek and display only the lines that are visible using the ImGuiListClipper helper, if your elements are evenly spaced and you have cheap random access to the elements. - // To use the clipper we could replace the 'for (int i = 0; i < Items.Size; i++)' loop with: - // ImGuiListClipper clipper(Items.Size); - // while (clipper.Step()) - // for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) - // However, note that you can not use this code as is if a filter is active because it breaks the 'cheap random-access' property. We would need random-access on the post-filtered list. - // A typical application wanting coarse clipping and filtering may want to pre-compute an array of indices that passed the filtering test, recomputing this array when user changes the filter, - // and appending newly elements as they are inserted. This is left as a task to the user until we can manage to improve this example code! - // If your items are of variable size you may want to implement code similar to what ImGuiListClipper does. Or split your data into fixed height items to allow random-seeking into your list. - ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(4,1)); // Tighten spacing - if (copy_to_clipboard) - ImGui::LogToClipboard(); - for (int i = 0; i < Items.Size; i++) - { - const char* item = Items[i]; - if (!Filter.PassFilter(item)) - continue; - - // Normally you would store more information in your item (e.g. make Items[] an array of structure, store color/type etc.) - bool pop_color = false; - if (strstr(item, "[error]")) { ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 0.4f, 0.4f, 1.0f)); pop_color = true; } - else if (strncmp(item, "# ", 2) == 0) { ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 0.8f, 0.6f, 1.0f)); pop_color = true; } - ImGui::TextUnformatted(item); - if (pop_color) - ImGui::PopStyleColor(); - } - if (copy_to_clipboard) - ImGui::LogFinish(); - - if (ScrollToBottom || (AutoScroll && ImGui::GetScrollY() >= ImGui::GetScrollMaxY())) - ImGui::SetScrollHereY(1.0f); - ScrollToBottom = false; - - ImGui::PopStyleVar(); - ImGui::EndChild(); - ImGui::Separator(); - - // Command-line - bool reclaim_focus = false; - if (ImGui::InputText("Input", InputBuf, IM_ARRAYSIZE(InputBuf), ImGuiInputTextFlags_EnterReturnsTrue|ImGuiInputTextFlags_CallbackCompletion|ImGuiInputTextFlags_CallbackHistory, &TextEditCallbackStub, (void*)this)) - { - char* s = InputBuf; - Strtrim(s); - if (s[0]) - ExecCommand(s); - strcpy(s, ""); - reclaim_focus = true; - } - - // Auto-focus on window apparition - ImGui::SetItemDefaultFocus(); - if (reclaim_focus) - ImGui::SetKeyboardFocusHere(-1); // Auto focus previous widget - - ImGui::End(); - } - - void ExecCommand(const char* command_line) - { - AddLog("# %s\n", command_line); - - // Insert into history. First find match and delete it so it can be pushed to the back. This isn't trying to be smart or optimal. - HistoryPos = -1; - for (int i = History.Size-1; i >= 0; i--) - if (Stricmp(History[i], command_line) == 0) - { - free(History[i]); - History.erase(History.begin() + i); - break; - } - History.push_back(Strdup(command_line)); - - // Process command - if (Stricmp(command_line, "CLEAR") == 0) - { - ClearLog(); - } - else if (Stricmp(command_line, "HELP") == 0) - { - AddLog("Commands:"); - for (int i = 0; i < Commands.Size; i++) - AddLog("- %s", Commands[i]); - } - else if (Stricmp(command_line, "HISTORY") == 0) - { - int first = History.Size - 10; - for (int i = first > 0 ? first : 0; i < History.Size; i++) - AddLog("%3d: %s\n", i, History[i]); - } - else - { - AddLog("Unknown command: '%s'\n", command_line); - } - - // On commad input, we scroll to bottom even if AutoScroll==false - ScrollToBottom = true; - } - - static int TextEditCallbackStub(ImGuiInputTextCallbackData* data) // In C++11 you are better off using lambdas for this sort of forwarding callbacks - { - ExampleAppConsole* console = (ExampleAppConsole*)data->UserData; - return console->TextEditCallback(data); - } - - int TextEditCallback(ImGuiInputTextCallbackData* data) - { - //AddLog("cursor: %d, selection: %d-%d", data->CursorPos, data->SelectionStart, data->SelectionEnd); - switch (data->EventFlag) - { - case ImGuiInputTextFlags_CallbackCompletion: - { - // Example of TEXT COMPLETION - - // Locate beginning of current word - const char* word_end = data->Buf + data->CursorPos; - const char* word_start = word_end; - while (word_start > data->Buf) - { - const char c = word_start[-1]; - if (c == ' ' || c == '\t' || c == ',' || c == ';') - break; - word_start--; - } - - // Build a list of candidates - ImVector candidates; - for (int i = 0; i < Commands.Size; i++) - if (Strnicmp(Commands[i], word_start, (int)(word_end-word_start)) == 0) - candidates.push_back(Commands[i]); - - if (candidates.Size == 0) - { - // No match - AddLog("No match for \"%.*s\"!\n", (int)(word_end-word_start), word_start); - } - else if (candidates.Size == 1) - { - // Single match. Delete the beginning of the word and replace it entirely so we've got nice casing - data->DeleteChars((int)(word_start-data->Buf), (int)(word_end-word_start)); - data->InsertChars(data->CursorPos, candidates[0]); - data->InsertChars(data->CursorPos, " "); - } - else - { - // Multiple matches. Complete as much as we can, so inputing "C" will complete to "CL" and display "CLEAR" and "CLASSIFY" - int match_len = (int)(word_end - word_start); - for (;;) - { - int c = 0; - bool all_candidates_matches = true; - for (int i = 0; i < candidates.Size && all_candidates_matches; i++) - if (i == 0) - c = toupper(candidates[i][match_len]); - else if (c == 0 || c != toupper(candidates[i][match_len])) - all_candidates_matches = false; - if (!all_candidates_matches) - break; - match_len++; - } - - if (match_len > 0) - { - data->DeleteChars((int)(word_start - data->Buf), (int)(word_end-word_start)); - data->InsertChars(data->CursorPos, candidates[0], candidates[0] + match_len); - } - - // List matches - AddLog("Possible matches:\n"); - for (int i = 0; i < candidates.Size; i++) - AddLog("- %s\n", candidates[i]); - } - - break; - } - case ImGuiInputTextFlags_CallbackHistory: - { - // Example of HISTORY - const int prev_history_pos = HistoryPos; - if (data->EventKey == ImGuiKey_UpArrow) - { - if (HistoryPos == -1) - HistoryPos = History.Size - 1; - else if (HistoryPos > 0) - HistoryPos--; - } - else if (data->EventKey == ImGuiKey_DownArrow) - { - if (HistoryPos != -1) - if (++HistoryPos >= History.Size) - HistoryPos = -1; - } - - // A better implementation would preserve the data on the current input line along with cursor position. - if (prev_history_pos != HistoryPos) - { - const char* history_str = (HistoryPos >= 0) ? History[HistoryPos] : ""; - data->DeleteChars(0, data->BufTextLen); - data->InsertChars(0, history_str); - } - } - } - return 0; - } -}; - -static void ShowExampleAppConsole(bool* p_open) -{ - static ExampleAppConsole console; - console.Draw("Example: Console", p_open); -} - -//----------------------------------------------------------------------------- -// [SECTION] Example App: Debug Log / ShowExampleAppLog() -//----------------------------------------------------------------------------- - -// Usage: -// static ExampleAppLog my_log; -// my_log.AddLog("Hello %d world\n", 123); -// my_log.Draw("title"); -struct ExampleAppLog -{ - ImGuiTextBuffer Buf; - ImGuiTextFilter Filter; - ImVector LineOffsets; // Index to lines offset. We maintain this with AddLog() calls, allowing us to have a random access on lines - bool AutoScroll; // Keep scrolling if already at the bottom - - ExampleAppLog() - { - AutoScroll = true; - Clear(); - } - - void Clear() - { - Buf.clear(); - LineOffsets.clear(); - LineOffsets.push_back(0); - } - - void AddLog(const char* fmt, ...) IM_FMTARGS(2) - { - int old_size = Buf.size(); - va_list args; - va_start(args, fmt); - Buf.appendfv(fmt, args); - va_end(args); - for (int new_size = Buf.size(); old_size < new_size; old_size++) - if (Buf[old_size] == '\n') - LineOffsets.push_back(old_size + 1); - } - - void Draw(const char* title, bool* p_open = NULL) - { - if (!ImGui::Begin(title, p_open)) - { - ImGui::End(); - return; - } - - // Options menu - if (ImGui::BeginPopup("Options")) - { - ImGui::Checkbox("Auto-scroll", &AutoScroll); - ImGui::EndPopup(); - } - - // Main window - if (ImGui::Button("Options")) - ImGui::OpenPopup("Options"); - ImGui::SameLine(); - bool clear = ImGui::Button("Clear"); - ImGui::SameLine(); - bool copy = ImGui::Button("Copy"); - ImGui::SameLine(); - Filter.Draw("Filter", -100.0f); - - ImGui::Separator(); - ImGui::BeginChild("scrolling", ImVec2(0,0), false, ImGuiWindowFlags_HorizontalScrollbar); - - if (clear) - Clear(); - if (copy) - ImGui::LogToClipboard(); - - ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0, 0)); - const char* buf = Buf.begin(); - const char* buf_end = Buf.end(); - if (Filter.IsActive()) - { - // In this example we don't use the clipper when Filter is enabled. - // This is because we don't have a random access on the result on our filter. - // A real application processing logs with ten of thousands of entries may want to store the result of search/filter. - // especially if the filtering function is not trivial (e.g. reg-exp). - for (int line_no = 0; line_no < LineOffsets.Size; line_no++) - { - const char* line_start = buf + LineOffsets[line_no]; - const char* line_end = (line_no + 1 < LineOffsets.Size) ? (buf + LineOffsets[line_no + 1] - 1) : buf_end; - if (Filter.PassFilter(line_start, line_end)) - ImGui::TextUnformatted(line_start, line_end); - } - } - else - { - // The simplest and easy way to display the entire buffer: - // ImGui::TextUnformatted(buf_begin, buf_end); - // And it'll just work. TextUnformatted() has specialization for large blob of text and will fast-forward to skip non-visible lines. - // Here we instead demonstrate using the clipper to only process lines that are within the visible area. - // If you have tens of thousands of items and their processing cost is non-negligible, coarse clipping them on your side is recommended. - // Using ImGuiListClipper requires A) random access into your data, and B) items all being the same height, - // both of which we can handle since we an array pointing to the beginning of each line of text. - // When using the filter (in the block of code above) we don't have random access into the data to display anymore, which is why we don't use the clipper. - // Storing or skimming through the search result would make it possible (and would be recommended if you want to search through tens of thousands of entries) - ImGuiListClipper clipper; - clipper.Begin(LineOffsets.Size); - while (clipper.Step()) - { - for (int line_no = clipper.DisplayStart; line_no < clipper.DisplayEnd; line_no++) - { - const char* line_start = buf + LineOffsets[line_no]; - const char* line_end = (line_no + 1 < LineOffsets.Size) ? (buf + LineOffsets[line_no + 1] - 1) : buf_end; - ImGui::TextUnformatted(line_start, line_end); - } - } - clipper.End(); - } - ImGui::PopStyleVar(); - - if (AutoScroll && ImGui::GetScrollY() >= ImGui::GetScrollMaxY()) - ImGui::SetScrollHereY(1.0f); - - ImGui::EndChild(); - ImGui::End(); - } -}; - -// Demonstrate creating a simple log window with basic filtering. -static void ShowExampleAppLog(bool* p_open) -{ - static ExampleAppLog log; - - // For the demo: add a debug button _BEFORE_ the normal log window contents - // We take advantage of a rarely used feature: multiple calls to Begin()/End() are appending to the _same_ window. - // Most of the contents of the window will be added by the log.Draw() call. - ImGui::SetNextWindowSize(ImVec2(500, 400), ImGuiCond_FirstUseEver); - ImGui::Begin("Example: Log", p_open); - if (ImGui::SmallButton("[Debug] Add 5 entries")) - { - static int counter = 0; - for (int n = 0; n < 5; n++) - { - const char* categories[3] = { "info", "warn", "error" }; - const char* words[] = { "Bumfuzzled", "Cattywampus", "Snickersnee", "Abibliophobia", "Absquatulate", "Nincompoop", "Pauciloquent" }; - log.AddLog("[%05d] [%s] Hello, current time is %.1f, here's a word: '%s'\n", - ImGui::GetFrameCount(), categories[counter % IM_ARRAYSIZE(categories)], ImGui::GetTime(), words[counter % IM_ARRAYSIZE(words)]); - counter++; - } - } - ImGui::End(); - - // Actually call in the regular Log helper (which will Begin() into the same window as we just did) - log.Draw("Example: Log", p_open); -} - -//----------------------------------------------------------------------------- -// [SECTION] Example App: Simple Layout / ShowExampleAppLayout() -//----------------------------------------------------------------------------- - -// Demonstrate create a window with multiple child windows. -static void ShowExampleAppLayout(bool* p_open) -{ - ImGui::SetNextWindowSize(ImVec2(500, 440), ImGuiCond_FirstUseEver); - if (ImGui::Begin("Example: Simple layout", p_open, ImGuiWindowFlags_MenuBar)) - { - if (ImGui::BeginMenuBar()) - { - if (ImGui::BeginMenu("File")) - { - if (ImGui::MenuItem("Close")) *p_open = false; - ImGui::EndMenu(); - } - ImGui::EndMenuBar(); - } - - // left - static int selected = 0; - ImGui::BeginChild("left pane", ImVec2(150, 0), true); - for (int i = 0; i < 100; i++) - { - char label[128]; - sprintf(label, "MyObject %d", i); - if (ImGui::Selectable(label, selected == i)) - selected = i; - } - ImGui::EndChild(); - ImGui::SameLine(); - - // right - ImGui::BeginGroup(); - ImGui::BeginChild("item view", ImVec2(0, -ImGui::GetFrameHeightWithSpacing())); // Leave room for 1 line below us - ImGui::Text("MyObject: %d", selected); - ImGui::Separator(); - if (ImGui::BeginTabBar("##Tabs", ImGuiTabBarFlags_None)) - { - if (ImGui::BeginTabItem("Description")) - { - ImGui::TextWrapped("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. "); - ImGui::EndTabItem(); - } - if (ImGui::BeginTabItem("Details")) - { - ImGui::Text("ID: 0123456789"); - ImGui::EndTabItem(); - } - ImGui::EndTabBar(); - } - ImGui::EndChild(); - if (ImGui::Button("Revert")) {} - ImGui::SameLine(); - if (ImGui::Button("Save")) {} - ImGui::EndGroup(); - } - ImGui::End(); -} - -//----------------------------------------------------------------------------- -// [SECTION] Example App: Property Editor / ShowExampleAppPropertyEditor() -//----------------------------------------------------------------------------- - -// Demonstrate create a simple property editor. -static void ShowExampleAppPropertyEditor(bool* p_open) -{ - ImGui::SetNextWindowSize(ImVec2(430,450), ImGuiCond_FirstUseEver); - if (!ImGui::Begin("Example: Property editor", p_open)) - { - ImGui::End(); - return; - } - - HelpMarker("This example shows how you may implement a property editor using two columns.\nAll objects/fields data are dummies here.\nRemember that in many simple cases, you can use ImGui::SameLine(xxx) to position\nyour cursor horizontally instead of using the Columns() API."); - - ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(2,2)); - ImGui::Columns(2); - ImGui::Separator(); - - struct funcs - { - static void ShowDummyObject(const char* prefix, int uid) - { - ImGui::PushID(uid); // Use object uid as identifier. Most commonly you could also use the object pointer as a base ID. - ImGui::AlignTextToFramePadding(); // Text and Tree nodes are less high than regular widgets, here we add vertical spacing to make the tree lines equal high. - bool node_open = ImGui::TreeNode("Object", "%s_%u", prefix, uid); - ImGui::NextColumn(); - ImGui::AlignTextToFramePadding(); - ImGui::Text("my sailor is rich"); - ImGui::NextColumn(); - if (node_open) - { - static float dummy_members[8] = { 0.0f,0.0f,1.0f,3.1416f,100.0f,999.0f }; - for (int i = 0; i < 8; i++) - { - ImGui::PushID(i); // Use field index as identifier. - if (i < 2) - { - ShowDummyObject("Child", 424242); - } - else - { - // Here we use a TreeNode to highlight on hover (we could use e.g. Selectable as well) - ImGui::AlignTextToFramePadding(); - ImGui::TreeNodeEx("Field", ImGuiTreeNodeFlags_Leaf | ImGuiTreeNodeFlags_NoTreePushOnOpen | ImGuiTreeNodeFlags_Bullet, "Field_%d", i); - ImGui::NextColumn(); - ImGui::SetNextItemWidth(-1); - if (i >= 5) - ImGui::InputFloat("##value", &dummy_members[i], 1.0f); - else - ImGui::DragFloat("##value", &dummy_members[i], 0.01f); - ImGui::NextColumn(); - } - ImGui::PopID(); - } - ImGui::TreePop(); - } - ImGui::PopID(); - } - }; - - // Iterate dummy objects with dummy members (all the same data) - for (int obj_i = 0; obj_i < 3; obj_i++) - funcs::ShowDummyObject("Object", obj_i); - - ImGui::Columns(1); - ImGui::Separator(); - ImGui::PopStyleVar(); - ImGui::End(); -} - -//----------------------------------------------------------------------------- -// [SECTION] Example App: Long Text / ShowExampleAppLongText() -//----------------------------------------------------------------------------- - -// Demonstrate/test rendering huge amount of text, and the incidence of clipping. -static void ShowExampleAppLongText(bool* p_open) -{ - ImGui::SetNextWindowSize(ImVec2(520,600), ImGuiCond_FirstUseEver); - if (!ImGui::Begin("Example: Long text display", p_open)) - { - ImGui::End(); - return; - } - - static int test_type = 0; - static ImGuiTextBuffer log; - static int lines = 0; - ImGui::Text("Printing unusually long amount of text."); - ImGui::Combo("Test type", &test_type, "Single call to TextUnformatted()\0Multiple calls to Text(), clipped\0Multiple calls to Text(), not clipped (slow)\0"); - ImGui::Text("Buffer contents: %d lines, %d bytes", lines, log.size()); - if (ImGui::Button("Clear")) { log.clear(); lines = 0; } - ImGui::SameLine(); - if (ImGui::Button("Add 1000 lines")) - { - for (int i = 0; i < 1000; i++) - log.appendf("%i The quick brown fox jumps over the lazy dog\n", lines+i); - lines += 1000; - } - ImGui::BeginChild("Log"); - switch (test_type) - { - case 0: - // Single call to TextUnformatted() with a big buffer - ImGui::TextUnformatted(log.begin(), log.end()); - break; - case 1: - { - // Multiple calls to Text(), manually coarsely clipped - demonstrate how to use the ImGuiListClipper helper. - ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0,0)); - ImGuiListClipper clipper(lines); - while (clipper.Step()) - for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) - ImGui::Text("%i The quick brown fox jumps over the lazy dog", i); - ImGui::PopStyleVar(); - break; - } - case 2: - // Multiple calls to Text(), not clipped (slow) - ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0,0)); - for (int i = 0; i < lines; i++) - ImGui::Text("%i The quick brown fox jumps over the lazy dog", i); - ImGui::PopStyleVar(); - break; - } - ImGui::EndChild(); - ImGui::End(); -} - -//----------------------------------------------------------------------------- -// [SECTION] Example App: Auto Resize / ShowExampleAppAutoResize() -//----------------------------------------------------------------------------- - -// Demonstrate creating a window which gets auto-resized according to its content. -static void ShowExampleAppAutoResize(bool* p_open) -{ - if (!ImGui::Begin("Example: Auto-resizing window", p_open, ImGuiWindowFlags_AlwaysAutoResize)) - { - ImGui::End(); - return; - } - - static int lines = 10; - ImGui::Text("Window will resize every-frame to the size of its content.\nNote that you probably don't want to query the window size to\noutput your content because that would create a feedback loop."); - ImGui::SliderInt("Number of lines", &lines, 1, 20); - for (int i = 0; i < lines; i++) - ImGui::Text("%*sThis is line %d", i * 4, "", i); // Pad with space to extend size horizontally - ImGui::End(); -} - -//----------------------------------------------------------------------------- -// [SECTION] Example App: Constrained Resize / ShowExampleAppConstrainedResize() -//----------------------------------------------------------------------------- - -// Demonstrate creating a window with custom resize constraints. -static void ShowExampleAppConstrainedResize(bool* p_open) -{ - struct CustomConstraints // Helper functions to demonstrate programmatic constraints - { - static void Square(ImGuiSizeCallbackData* data) { data->DesiredSize.x = data->DesiredSize.y = (data->DesiredSize.x > data->DesiredSize.y ? data->DesiredSize.x : data->DesiredSize.y); } - static void Step(ImGuiSizeCallbackData* data) { float step = (float)(int)(intptr_t)data->UserData; data->DesiredSize = ImVec2((int)(data->DesiredSize.x / step + 0.5f) * step, (int)(data->DesiredSize.y / step + 0.5f) * step); } - }; - - static bool auto_resize = false; - static int type = 0; - static int display_lines = 10; - if (type == 0) ImGui::SetNextWindowSizeConstraints(ImVec2(-1, 0), ImVec2(-1, FLT_MAX)); // Vertical only - if (type == 1) ImGui::SetNextWindowSizeConstraints(ImVec2(0, -1), ImVec2(FLT_MAX, -1)); // Horizontal only - if (type == 2) ImGui::SetNextWindowSizeConstraints(ImVec2(100, 100), ImVec2(FLT_MAX, FLT_MAX)); // Width > 100, Height > 100 - if (type == 3) ImGui::SetNextWindowSizeConstraints(ImVec2(400, -1), ImVec2(500, -1)); // Width 400-500 - if (type == 4) ImGui::SetNextWindowSizeConstraints(ImVec2(-1, 400), ImVec2(-1, 500)); // Height 400-500 - if (type == 5) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0), ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Square); // Always Square - if (type == 6) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0), ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Step, (void*)(intptr_t)100); // Fixed Step - - ImGuiWindowFlags flags = auto_resize ? ImGuiWindowFlags_AlwaysAutoResize : 0; - if (ImGui::Begin("Example: Constrained Resize", p_open, flags)) - { - const char* desc[] = - { - "Resize vertical only", - "Resize horizontal only", - "Width > 100, Height > 100", - "Width 400-500", - "Height 400-500", - "Custom: Always Square", - "Custom: Fixed Steps (100)", - }; - if (ImGui::Button("200x200")) { ImGui::SetWindowSize(ImVec2(200, 200)); } ImGui::SameLine(); - if (ImGui::Button("500x500")) { ImGui::SetWindowSize(ImVec2(500, 500)); } ImGui::SameLine(); - if (ImGui::Button("800x200")) { ImGui::SetWindowSize(ImVec2(800, 200)); } - ImGui::SetNextItemWidth(200); - ImGui::Combo("Constraint", &type, desc, IM_ARRAYSIZE(desc)); - ImGui::SetNextItemWidth(200); - ImGui::DragInt("Lines", &display_lines, 0.2f, 1, 100); - ImGui::Checkbox("Auto-resize", &auto_resize); - for (int i = 0; i < display_lines; i++) - ImGui::Text("%*sHello, sailor! Making this line long enough for the example.", i * 4, ""); - } - ImGui::End(); -} - -//----------------------------------------------------------------------------- -// [SECTION] Example App: Simple Overlay / ShowExampleAppSimpleOverlay() -//----------------------------------------------------------------------------- - -// Demonstrate creating a simple static window with no decoration + a context-menu to choose which corner of the screen to use. -static void ShowExampleAppSimpleOverlay(bool* p_open) -{ - const float DISTANCE = 10.0f; - static int corner = 0; - ImGuiIO& io = ImGui::GetIO(); - if (corner != -1) - { - ImVec2 window_pos = ImVec2((corner & 1) ? io.DisplaySize.x - DISTANCE : DISTANCE, (corner & 2) ? io.DisplaySize.y - DISTANCE : DISTANCE); - ImVec2 window_pos_pivot = ImVec2((corner & 1) ? 1.0f : 0.0f, (corner & 2) ? 1.0f : 0.0f); - ImGui::SetNextWindowPos(window_pos, ImGuiCond_Always, window_pos_pivot); - } - ImGui::SetNextWindowBgAlpha(0.35f); // Transparent background - if (ImGui::Begin("Example: Simple overlay", p_open, (corner != -1 ? ImGuiWindowFlags_NoMove : 0) | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav)) - { - ImGui::Text("Simple overlay\n" "in the corner of the screen.\n" "(right-click to change position)"); - ImGui::Separator(); - if (ImGui::IsMousePosValid()) - ImGui::Text("Mouse Position: (%.1f,%.1f)", io.MousePos.x, io.MousePos.y); - else - ImGui::Text("Mouse Position: "); - if (ImGui::BeginPopupContextWindow()) - { - if (ImGui::MenuItem("Custom", NULL, corner == -1)) corner = -1; - if (ImGui::MenuItem("Top-left", NULL, corner == 0)) corner = 0; - if (ImGui::MenuItem("Top-right", NULL, corner == 1)) corner = 1; - if (ImGui::MenuItem("Bottom-left", NULL, corner == 2)) corner = 2; - if (ImGui::MenuItem("Bottom-right", NULL, corner == 3)) corner = 3; - if (p_open && ImGui::MenuItem("Close")) *p_open = false; - ImGui::EndPopup(); - } - } - ImGui::End(); -} - -//----------------------------------------------------------------------------- -// [SECTION] Example App: Manipulating Window Titles / ShowExampleAppWindowTitles() -//----------------------------------------------------------------------------- - -// Demonstrate using "##" and "###" in identifiers to manipulate ID generation. -// This apply to all regular items as well. Read FAQ section "How can I have multiple widgets with the same label? Can I have widget without a label? (Yes). A primer on the purpose of labels/IDs." for details. -static void ShowExampleAppWindowTitles(bool*) -{ - // By default, Windows are uniquely identified by their title. - // You can use the "##" and "###" markers to manipulate the display/ID. - - // Using "##" to display same title but have unique identifier. - ImGui::SetNextWindowPos(ImVec2(100, 100), ImGuiCond_FirstUseEver); - ImGui::Begin("Same title as another window##1"); - ImGui::Text("This is window 1.\nMy title is the same as window 2, but my identifier is unique."); - ImGui::End(); - - ImGui::SetNextWindowPos(ImVec2(100, 200), ImGuiCond_FirstUseEver); - ImGui::Begin("Same title as another window##2"); - ImGui::Text("This is window 2.\nMy title is the same as window 1, but my identifier is unique."); - ImGui::End(); - - // Using "###" to display a changing title but keep a static identifier "AnimatedTitle" - char buf[128]; - sprintf(buf, "Animated title %c %d###AnimatedTitle", "|/-\\"[(int)(ImGui::GetTime() / 0.25f) & 3], ImGui::GetFrameCount()); - ImGui::SetNextWindowPos(ImVec2(100, 300), ImGuiCond_FirstUseEver); - ImGui::Begin(buf); - ImGui::Text("This window has a changing title."); - ImGui::End(); -} - -//----------------------------------------------------------------------------- -// [SECTION] Example App: Custom Rendering using ImDrawList API / ShowExampleAppCustomRendering() -//----------------------------------------------------------------------------- - -// Demonstrate using the low-level ImDrawList to draw custom shapes. -static void ShowExampleAppCustomRendering(bool* p_open) -{ - if (!ImGui::Begin("Example: Custom rendering", p_open)) - { - ImGui::End(); - return; - } - - // Tip: If you do a lot of custom rendering, you probably want to use your own geometrical types and benefit of overloaded operators, etc. - // Define IM_VEC2_CLASS_EXTRA in imconfig.h to create implicit conversions between your types and ImVec2/ImVec4. - // ImGui defines overloaded operators but they are internal to imgui.cpp and not exposed outside (to avoid messing with your types) - // In this example we are not using the maths operators! - ImDrawList* draw_list = ImGui::GetWindowDrawList(); - - if (ImGui::BeginTabBar("##TabBar")) - { - if (ImGui::BeginTabItem("Primitives")) - { - ImGui::PushItemWidth(-ImGui::GetFontSize() * 10); - - // Draw gradients - // (note that those are currently exacerbating our sRGB/Linear issues) - ImGui::Text("Gradients"); - ImVec2 gradient_size = ImVec2(ImGui::CalcItemWidth(), ImGui::GetFrameHeight()); - { - ImVec2 p = ImGui::GetCursorScreenPos(); - ImU32 col_a = ImGui::GetColorU32(ImVec4(0.0f, 0.0f, 0.0f, 1.0f)); - ImU32 col_b = ImGui::GetColorU32(ImVec4(1.0f, 1.0f, 1.0f, 1.0f)); - draw_list->AddRectFilledMultiColor(p, ImVec2(p.x + gradient_size.x, p.y + gradient_size.y), col_a, col_b, col_b, col_a); - ImGui::InvisibleButton("##gradient1", gradient_size); - } - { - ImVec2 p = ImGui::GetCursorScreenPos(); - ImU32 col_a = ImGui::GetColorU32(ImVec4(0.0f, 1.0f, 0.0f, 1.0f)); - ImU32 col_b = ImGui::GetColorU32(ImVec4(1.0f, 0.0f, 0.0f, 1.0f)); - draw_list->AddRectFilledMultiColor(p, ImVec2(p.x + gradient_size.x, p.y + gradient_size.y), col_a, col_b, col_b, col_a); - ImGui::InvisibleButton("##gradient2", gradient_size); - } - - // Draw a bunch of primitives - ImGui::Text("All primitives"); - static float sz = 36.0f; - static float thickness = 3.0f; - static int ngon_sides = 6; - static bool circle_segments_override = false; - static int circle_segments_override_v = 12; - static ImVec4 colf = ImVec4(1.0f, 1.0f, 0.4f, 1.0f); - ImGui::DragFloat("Size", &sz, 0.2f, 2.0f, 72.0f, "%.0f"); - ImGui::DragFloat("Thickness", &thickness, 0.05f, 1.0f, 8.0f, "%.02f"); - ImGui::SliderInt("N-gon sides", &ngon_sides, 3, 12); - ImGui::Checkbox("##circlesegmentoverride", &circle_segments_override); - ImGui::SameLine(0.0f, ImGui::GetStyle().ItemInnerSpacing.x); - if (ImGui::SliderInt("Circle segments", &circle_segments_override_v, 3, 40)) - circle_segments_override = true; - ImGui::ColorEdit4("Color", &colf.x); - const ImVec2 p = ImGui::GetCursorScreenPos(); - const ImU32 col = ImColor(colf); - const float spacing = 10.0f; - const ImDrawCornerFlags corners_none = 0; - const ImDrawCornerFlags corners_all = ImDrawCornerFlags_All; - const ImDrawCornerFlags corners_tl_br = ImDrawCornerFlags_TopLeft | ImDrawCornerFlags_BotRight; - const int circle_segments = circle_segments_override ? circle_segments_override_v : 0; - float x = p.x + 4.0f, y = p.y + 4.0f; - for (int n = 0; n < 2; n++) - { - // First line uses a thickness of 1.0f, second line uses the configurable thickness - float th = (n == 0) ? 1.0f : thickness; - draw_list->AddNgon(ImVec2(x + sz*0.5f, y + sz*0.5f), sz*0.5f, col, ngon_sides, th); x += sz + spacing; // N-gon - draw_list->AddCircle(ImVec2(x + sz*0.5f, y + sz*0.5f), sz*0.5f, col, circle_segments, th); x += sz + spacing; // Circle - draw_list->AddRect(ImVec2(x, y), ImVec2(x + sz, y + sz), col, 0.0f, corners_none, th); x += sz + spacing; // Square - draw_list->AddRect(ImVec2(x, y), ImVec2(x + sz, y + sz), col, 10.0f, corners_all, th); x += sz + spacing; // Square with all rounded corners - draw_list->AddRect(ImVec2(x, y), ImVec2(x + sz, y + sz), col, 10.0f, corners_tl_br, th); x += sz + spacing; // Square with two rounded corners - draw_list->AddTriangle(ImVec2(x+sz*0.5f,y), ImVec2(x+sz, y+sz-0.5f), ImVec2(x, y+sz-0.5f), col, th); x += sz + spacing; // Triangle - draw_list->AddTriangle(ImVec2(x+sz*0.2f,y), ImVec2(x, y+sz-0.5f), ImVec2(x+sz*0.4f, y+sz-0.5f), col, th); x += sz*0.4f + spacing; // Thin triangle - draw_list->AddLine(ImVec2(x, y), ImVec2(x + sz, y), col, th); x += sz + spacing; // Horizontal line (note: drawing a filled rectangle will be faster!) - draw_list->AddLine(ImVec2(x, y), ImVec2(x, y + sz), col, th); x += spacing; // Vertical line (note: drawing a filled rectangle will be faster!) - draw_list->AddLine(ImVec2(x, y), ImVec2(x + sz, y + sz), col, th); x += sz + spacing; // Diagonal line - draw_list->AddBezierCurve(ImVec2(x, y), ImVec2(x + sz*1.3f, y + sz*0.3f), ImVec2(x + sz - sz*1.3f, y + sz - sz*0.3f), ImVec2(x + sz, y + sz), col, th); - x = p.x + 4; - y += sz + spacing; - } - draw_list->AddNgonFilled(ImVec2(x + sz * 0.5f, y + sz * 0.5f), sz*0.5f, col, ngon_sides); x += sz + spacing; // N-gon - draw_list->AddCircleFilled(ImVec2(x + sz*0.5f, y + sz*0.5f), sz*0.5f, col, circle_segments);x += sz + spacing; // Circle - draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + sz, y + sz), col); x += sz + spacing; // Square - draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + sz, y + sz), col, 10.0f); x += sz + spacing; // Square with all rounded corners - draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + sz, y + sz), col, 10.0f, corners_tl_br); x += sz + spacing; // Square with two rounded corners - draw_list->AddTriangleFilled(ImVec2(x+sz*0.5f,y), ImVec2(x+sz, y+sz-0.5f), ImVec2(x, y+sz-0.5f), col); x += sz + spacing; // Triangle - draw_list->AddTriangleFilled(ImVec2(x+sz*0.2f,y), ImVec2(x, y+sz-0.5f), ImVec2(x+sz*0.4f, y+sz-0.5f), col); x += sz*0.4f + spacing; // Thin triangle - draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + sz, y + thickness), col); x += sz + spacing; // Horizontal line (faster than AddLine, but only handle integer thickness) - draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + thickness, y + sz), col); x += spacing*2.0f; // Vertical line (faster than AddLine, but only handle integer thickness) - draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + 1, y + 1), col); x += sz; // Pixel (faster than AddLine) - draw_list->AddRectFilledMultiColor(ImVec2(x, y), ImVec2(x + sz, y + sz), IM_COL32(0, 0, 0, 255), IM_COL32(255, 0, 0, 255), IM_COL32(255, 255, 0, 255), IM_COL32(0, 255, 0, 255)); - ImGui::Dummy(ImVec2((sz + spacing) * 9.8f, (sz + spacing) * 3)); - - ImGui::PopItemWidth(); - ImGui::EndTabItem(); - } - - if (ImGui::BeginTabItem("Canvas")) - { - static ImVector points; - static bool adding_line = false; - if (ImGui::Button("Clear")) points.clear(); - if (points.Size >= 2) { ImGui::SameLine(); if (ImGui::Button("Undo")) { points.pop_back(); points.pop_back(); } } - ImGui::Text("Left-click and drag to add lines,\nRight-click to undo"); - - // Here we are using InvisibleButton() as a convenience to 1) advance the cursor and 2) allows us to use IsItemHovered() - // But you can also draw directly and poll mouse/keyboard by yourself. You can manipulate the cursor using GetCursorPos() and SetCursorPos(). - // If you only use the ImDrawList API, you can notify the owner window of its extends by using SetCursorPos(max). - ImVec2 canvas_pos = ImGui::GetCursorScreenPos(); // ImDrawList API uses screen coordinates! - ImVec2 canvas_size = ImGui::GetContentRegionAvail(); // Resize canvas to what's available - if (canvas_size.x < 50.0f) canvas_size.x = 50.0f; - if (canvas_size.y < 50.0f) canvas_size.y = 50.0f; - draw_list->AddRectFilledMultiColor(canvas_pos, ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), IM_COL32(50, 50, 50, 255), IM_COL32(50, 50, 60, 255), IM_COL32(60, 60, 70, 255), IM_COL32(50, 50, 60, 255)); - draw_list->AddRect(canvas_pos, ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), IM_COL32(255, 255, 255, 255)); - - bool adding_preview = false; - ImGui::InvisibleButton("canvas", canvas_size); - ImVec2 mouse_pos_in_canvas = ImVec2(ImGui::GetIO().MousePos.x - canvas_pos.x, ImGui::GetIO().MousePos.y - canvas_pos.y); - if (adding_line) - { - adding_preview = true; - points.push_back(mouse_pos_in_canvas); - if (!ImGui::IsMouseDown(0)) - adding_line = adding_preview = false; - } - if (ImGui::IsItemHovered()) - { - if (!adding_line && ImGui::IsMouseClicked(0)) - { - points.push_back(mouse_pos_in_canvas); - adding_line = true; - } - if (ImGui::IsMouseClicked(1) && !points.empty()) - { - adding_line = adding_preview = false; - points.pop_back(); - points.pop_back(); - } - } - draw_list->PushClipRect(canvas_pos, ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), true); // clip lines within the canvas (if we resize it, etc.) - for (int i = 0; i < points.Size - 1; i += 2) - draw_list->AddLine(ImVec2(canvas_pos.x + points[i].x, canvas_pos.y + points[i].y), ImVec2(canvas_pos.x + points[i + 1].x, canvas_pos.y + points[i + 1].y), IM_COL32(255, 255, 0, 255), 2.0f); - draw_list->PopClipRect(); - if (adding_preview) - points.pop_back(); - ImGui::EndTabItem(); - } - - if (ImGui::BeginTabItem("BG/FG draw lists")) - { - static bool draw_bg = true; - static bool draw_fg = true; - ImGui::Checkbox("Draw in Background draw list", &draw_bg); - ImGui::SameLine(); HelpMarker("The Background draw list will be rendered below every Dear ImGui windows."); - ImGui::Checkbox("Draw in Foreground draw list", &draw_fg); - ImGui::SameLine(); HelpMarker("The Foreground draw list will be rendered over every Dear ImGui windows."); - ImVec2 window_pos = ImGui::GetWindowPos(); - ImVec2 window_size = ImGui::GetWindowSize(); - ImVec2 window_center = ImVec2(window_pos.x + window_size.x * 0.5f, window_pos.y + window_size.y * 0.5f); - if (draw_bg) - ImGui::GetBackgroundDrawList()->AddCircle(window_center, window_size.x * 0.6f, IM_COL32(255, 0, 0, 200), 0, 10+4); - if (draw_fg) - ImGui::GetForegroundDrawList()->AddCircle(window_center, window_size.y * 0.6f, IM_COL32(0, 255, 0, 200), 0, 10); - ImGui::EndTabItem(); - } - - ImGui::EndTabBar(); - } - - ImGui::End(); -} - -//----------------------------------------------------------------------------- -// [SECTION] Example App: Documents Handling / ShowExampleAppDocuments() -//----------------------------------------------------------------------------- - -// Simplified structure to mimic a Document model -struct MyDocument -{ - const char* Name; // Document title - bool Open; // Set when the document is open (in this demo, we keep an array of all available documents to simplify the demo) - bool OpenPrev; // Copy of Open from last update. - bool Dirty; // Set when the document has been modified - bool WantClose; // Set when the document - ImVec4 Color; // An arbitrary variable associated to the document - - MyDocument(const char* name, bool open = true, const ImVec4& color = ImVec4(1.0f,1.0f,1.0f,1.0f)) - { - Name = name; - Open = OpenPrev = open; - Dirty = false; - WantClose = false; - Color = color; - } - void DoOpen() { Open = true; } - void DoQueueClose() { WantClose = true; } - void DoForceClose() { Open = false; Dirty = false; } - void DoSave() { Dirty = false; } - - // Display dummy contents for the Document - static void DisplayContents(MyDocument* doc) - { - ImGui::PushID(doc); - ImGui::Text("Document \"%s\"", doc->Name); - ImGui::PushStyleColor(ImGuiCol_Text, doc->Color); - ImGui::TextWrapped("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."); - ImGui::PopStyleColor(); - if (ImGui::Button("Modify", ImVec2(100, 0))) - doc->Dirty = true; - ImGui::SameLine(); - if (ImGui::Button("Save", ImVec2(100, 0))) - doc->DoSave(); - ImGui::ColorEdit3("color", &doc->Color.x); // Useful to test drag and drop and hold-dragged-to-open-tab behavior. - ImGui::PopID(); - } - - // Display context menu for the Document - static void DisplayContextMenu(MyDocument* doc) - { - if (!ImGui::BeginPopupContextItem()) - return; - - char buf[256]; - sprintf(buf, "Save %s", doc->Name); - if (ImGui::MenuItem(buf, "CTRL+S", false, doc->Open)) - doc->DoSave(); - if (ImGui::MenuItem("Close", "CTRL+W", false, doc->Open)) - doc->DoQueueClose(); - ImGui::EndPopup(); - } -}; - -struct ExampleAppDocuments -{ - ImVector Documents; - - ExampleAppDocuments() - { - Documents.push_back(MyDocument("Lettuce", true, ImVec4(0.4f, 0.8f, 0.4f, 1.0f))); - Documents.push_back(MyDocument("Eggplant", true, ImVec4(0.8f, 0.5f, 1.0f, 1.0f))); - Documents.push_back(MyDocument("Carrot", true, ImVec4(1.0f, 0.8f, 0.5f, 1.0f))); - Documents.push_back(MyDocument("Tomato", false, ImVec4(1.0f, 0.3f, 0.4f, 1.0f))); - Documents.push_back(MyDocument("A Rather Long Title", false)); - Documents.push_back(MyDocument("Some Document", false)); - } -}; - -// [Optional] Notify the system of Tabs/Windows closure that happened outside the regular tab interface. -// If a tab has been closed programmatically (aka closed from another source such as the Checkbox() in the demo, as opposed -// to clicking on the regular tab closing button) and stops being submitted, it will take a frame for the tab bar to notice its absence. -// During this frame there will be a gap in the tab bar, and if the tab that has disappeared was the selected one, the tab bar -// will report no selected tab during the frame. This will effectively give the impression of a flicker for one frame. -// We call SetTabItemClosed() to manually notify the Tab Bar or Docking system of removed tabs to avoid this glitch. -// Note that this completely optional, and only affect tab bars with the ImGuiTabBarFlags_Reorderable flag. -static void NotifyOfDocumentsClosedElsewhere(ExampleAppDocuments& app) -{ - for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++) - { - MyDocument* doc = &app.Documents[doc_n]; - if (!doc->Open && doc->OpenPrev) - ImGui::SetTabItemClosed(doc->Name); - doc->OpenPrev = doc->Open; - } -} - -void ShowExampleAppDocuments(bool* p_open) -{ - static ExampleAppDocuments app; - - // Options - static bool opt_reorderable = true; - static ImGuiTabBarFlags opt_fitting_flags = ImGuiTabBarFlags_FittingPolicyDefault_; - - bool window_contents_visible = ImGui::Begin("Example: Documents", p_open, ImGuiWindowFlags_MenuBar); - if (!window_contents_visible) - { - ImGui::End(); - return; - } - - // Menu - if (ImGui::BeginMenuBar()) - { - if (ImGui::BeginMenu("File")) - { - int open_count = 0; - for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++) - open_count += app.Documents[doc_n].Open ? 1 : 0; - - if (ImGui::BeginMenu("Open", open_count < app.Documents.Size)) - { - for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++) - { - MyDocument* doc = &app.Documents[doc_n]; - if (!doc->Open) - if (ImGui::MenuItem(doc->Name)) - doc->DoOpen(); - } - ImGui::EndMenu(); - } - if (ImGui::MenuItem("Close All Documents", NULL, false, open_count > 0)) - for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++) - app.Documents[doc_n].DoQueueClose(); - if (ImGui::MenuItem("Exit", "Alt+F4")) {} - ImGui::EndMenu(); - } - ImGui::EndMenuBar(); - } - - // [Debug] List documents with one checkbox for each - for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++) - { - MyDocument* doc = &app.Documents[doc_n]; - if (doc_n > 0) - ImGui::SameLine(); - ImGui::PushID(doc); - if (ImGui::Checkbox(doc->Name, &doc->Open)) - if (!doc->Open) - doc->DoForceClose(); - ImGui::PopID(); - } - - ImGui::Separator(); - - // Submit Tab Bar and Tabs - { - ImGuiTabBarFlags tab_bar_flags = (opt_fitting_flags) | (opt_reorderable ? ImGuiTabBarFlags_Reorderable : 0); - if (ImGui::BeginTabBar("##tabs", tab_bar_flags)) - { - if (opt_reorderable) - NotifyOfDocumentsClosedElsewhere(app); - - // [DEBUG] Stress tests - //if ((ImGui::GetFrameCount() % 30) == 0) docs[1].Open ^= 1; // [DEBUG] Automatically show/hide a tab. Test various interactions e.g. dragging with this on. - //if (ImGui::GetIO().KeyCtrl) ImGui::SetTabItemSelected(docs[1].Name); // [DEBUG] Test SetTabItemSelected(), probably not very useful as-is anyway.. - - // Submit Tabs - for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++) - { - MyDocument* doc = &app.Documents[doc_n]; - if (!doc->Open) - continue; - - ImGuiTabItemFlags tab_flags = (doc->Dirty ? ImGuiTabItemFlags_UnsavedDocument : 0); - bool visible = ImGui::BeginTabItem(doc->Name, &doc->Open, tab_flags); - - // Cancel attempt to close when unsaved add to save queue so we can display a popup. - if (!doc->Open && doc->Dirty) - { - doc->Open = true; - doc->DoQueueClose(); - } - - MyDocument::DisplayContextMenu(doc); - if (visible) - { - MyDocument::DisplayContents(doc); - ImGui::EndTabItem(); - } - } - - ImGui::EndTabBar(); - } - } - - // Update closing queue - static ImVector close_queue; - if (close_queue.empty()) - { - // Close queue is locked once we started a popup - for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++) - { - MyDocument* doc = &app.Documents[doc_n]; - if (doc->WantClose) - { - doc->WantClose = false; - close_queue.push_back(doc); - } - } - } - - // Display closing confirmation UI - if (!close_queue.empty()) - { - int close_queue_unsaved_documents = 0; - for (int n = 0; n < close_queue.Size; n++) - if (close_queue[n]->Dirty) - close_queue_unsaved_documents++; - - if (close_queue_unsaved_documents == 0) - { - // Close documents when all are unsaved - for (int n = 0; n < close_queue.Size; n++) - close_queue[n]->DoForceClose(); - close_queue.clear(); - } - else - { - if (!ImGui::IsPopupOpen("Save?")) - ImGui::OpenPopup("Save?"); - if (ImGui::BeginPopupModal("Save?")) - { - ImGui::Text("Save change to the following items?"); - ImGui::SetNextItemWidth(-1.0f); - if (ImGui::ListBoxHeader("##", close_queue_unsaved_documents, 6)) - { - for (int n = 0; n < close_queue.Size; n++) - if (close_queue[n]->Dirty) - ImGui::Text("%s", close_queue[n]->Name); - ImGui::ListBoxFooter(); - } - - if (ImGui::Button("Yes", ImVec2(80, 0))) - { - for (int n = 0; n < close_queue.Size; n++) - { - if (close_queue[n]->Dirty) - close_queue[n]->DoSave(); - close_queue[n]->DoForceClose(); - } - close_queue.clear(); - ImGui::CloseCurrentPopup(); - } - ImGui::SameLine(); - if (ImGui::Button("No", ImVec2(80, 0))) - { - for (int n = 0; n < close_queue.Size; n++) - close_queue[n]->DoForceClose(); - close_queue.clear(); - ImGui::CloseCurrentPopup(); - } - ImGui::SameLine(); - if (ImGui::Button("Cancel", ImVec2(80, 0))) - { - close_queue.clear(); - ImGui::CloseCurrentPopup(); - } - ImGui::EndPopup(); - } - } - } - - ImGui::End(); -} - -// End of Demo code -#else - -void ImGui::ShowAboutWindow(bool*) {} -void ImGui::ShowDemoWindow(bool*) {} -void ImGui::ShowUserGuide() {} -void ImGui::ShowStyleEditor(ImGuiStyle*) {} - -#endif - -#endif // #ifndef IMGUI_DISABLE diff --git a/cmake/imgui/imgui_draw.cpp b/cmake/imgui/imgui_draw.cpp deleted file mode 100644 index 87c81edc..00000000 --- a/cmake/imgui/imgui_draw.cpp +++ /dev/null @@ -1,3594 +0,0 @@ -// dear imgui, v1.76 WIP -// (drawing and font code) - -/* - -Index of this file: - -// [SECTION] STB libraries implementation -// [SECTION] Style functions -// [SECTION] ImDrawList -// [SECTION] ImDrawListSplitter -// [SECTION] ImDrawData -// [SECTION] Helpers ShadeVertsXXX functions -// [SECTION] ImFontConfig -// [SECTION] ImFontAtlas -// [SECTION] ImFontAtlas glyph ranges helpers -// [SECTION] ImFontGlyphRangesBuilder -// [SECTION] ImFont -// [SECTION] ImGui Internal Render Helpers -// [SECTION] Decompression code -// [SECTION] Default font data (ProggyClean.ttf) - -*/ - -#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) -#define _CRT_SECURE_NO_WARNINGS -#endif - -#include "imgui.h" -#ifndef IMGUI_DISABLE - -#ifndef IMGUI_DEFINE_MATH_OPERATORS -#define IMGUI_DEFINE_MATH_OPERATORS -#endif -#include "imgui_internal.h" - -#include // vsnprintf, sscanf, printf -#if !defined(alloca) -#if defined(__GLIBC__) || defined(__sun) || defined(__CYGWIN__) || defined(__APPLE__) || defined(__SWITCH__) -#include // alloca (glibc uses . Note that Cygwin may have _WIN32 defined, so the order matters here) -#elif defined(_WIN32) -#include // alloca -#if !defined(alloca) -#define alloca _alloca // for clang with MS Codegen -#endif -#else -#include // alloca -#endif -#endif - -// Visual Studio warnings -#ifdef _MSC_VER -#pragma warning (disable: 4127) // condition expression is constant -#pragma warning (disable: 4505) // unreferenced local function has been removed (stb stuff) -#pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen -#endif - -// Clang/GCC warnings with -Weverything -#if defined(__clang__) -#pragma clang diagnostic ignored "-Wold-style-cast" // warning : use of old-style cast // yes, they are more terse. -#pragma clang diagnostic ignored "-Wfloat-equal" // warning : comparing floating point with == or != is unsafe // storing and comparing against same constants ok. -#pragma clang diagnostic ignored "-Wglobal-constructors" // warning : declaration requires a global destructor // similar to above, not sure what the exact difference is. -#pragma clang diagnostic ignored "-Wsign-conversion" // warning : implicit conversion changes signedness // -#if __has_warning("-Wzero-as-null-pointer-constant") -#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" // warning : zero as null pointer constant // some standard header variations use #define NULL 0 -#endif -#if __has_warning("-Wcomma") -#pragma clang diagnostic ignored "-Wcomma" // warning : possible misuse of comma operator here // -#endif -#if __has_warning("-Wreserved-id-macro") -#pragma clang diagnostic ignored "-Wreserved-id-macro" // warning : macro name is a reserved identifier // -#endif -#if __has_warning("-Wdouble-promotion") -#pragma clang diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function // using printf() is a misery with this as C++ va_arg ellipsis changes float to double. -#endif -#elif defined(__GNUC__) -#pragma GCC diagnostic ignored "-Wpragmas" // warning: unknown option after '#pragma GCC diagnostic' kind -#pragma GCC diagnostic ignored "-Wunused-function" // warning: 'xxxx' defined but not used -#pragma GCC diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function -#pragma GCC diagnostic ignored "-Wconversion" // warning: conversion to 'xxxx' from 'xxxx' may alter its value -#pragma GCC diagnostic ignored "-Wstack-protector" // warning: stack protector not protecting local variables: variable length buffer -#pragma GCC diagnostic ignored "-Wclass-memaccess" // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead -#endif - -//------------------------------------------------------------------------- -// [SECTION] STB libraries implementation -//------------------------------------------------------------------------- - -// Compile time options: -//#define IMGUI_STB_NAMESPACE ImStb -//#define IMGUI_STB_TRUETYPE_FILENAME "my_folder/stb_truetype.h" -//#define IMGUI_STB_RECT_PACK_FILENAME "my_folder/stb_rect_pack.h" -//#define IMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION -//#define IMGUI_DISABLE_STB_RECT_PACK_IMPLEMENTATION - -#ifdef IMGUI_STB_NAMESPACE -namespace IMGUI_STB_NAMESPACE -{ -#endif - -#ifdef _MSC_VER -#pragma warning (push) -#pragma warning (disable: 4456) // declaration of 'xx' hides previous local declaration -#endif - -#if defined(__clang__) -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunused-function" -#pragma clang diagnostic ignored "-Wmissing-prototypes" -#pragma clang diagnostic ignored "-Wimplicit-fallthrough" -#pragma clang diagnostic ignored "-Wcast-qual" // warning : cast from 'const xxxx *' to 'xxx *' drops const qualifier // -#endif - -#if defined(__GNUC__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wtype-limits" // warning: comparison is always true due to limited range of data type [-Wtype-limits] -#pragma GCC diagnostic ignored "-Wcast-qual" // warning: cast from type 'const xxxx *' to type 'xxxx *' casts away qualifiers -#endif - -#ifndef STB_RECT_PACK_IMPLEMENTATION // in case the user already have an implementation in the _same_ compilation unit (e.g. unity builds) -#ifndef IMGUI_DISABLE_STB_RECT_PACK_IMPLEMENTATION -#define STBRP_STATIC -#define STBRP_ASSERT(x) IM_ASSERT(x) -#define STBRP_SORT ImQsort -#define STB_RECT_PACK_IMPLEMENTATION -#endif -#ifdef IMGUI_STB_RECT_PACK_FILENAME -#include IMGUI_STB_RECT_PACK_FILENAME -#else -#include "imstb_rectpack.h" -#endif -#endif - -#ifndef STB_TRUETYPE_IMPLEMENTATION // in case the user already have an implementation in the _same_ compilation unit (e.g. unity builds) -#ifndef IMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION -#define STBTT_malloc(x,u) ((void)(u), IM_ALLOC(x)) -#define STBTT_free(x,u) ((void)(u), IM_FREE(x)) -#define STBTT_assert(x) IM_ASSERT(x) -#define STBTT_fmod(x,y) ImFmod(x,y) -#define STBTT_sqrt(x) ImSqrt(x) -#define STBTT_pow(x,y) ImPow(x,y) -#define STBTT_fabs(x) ImFabs(x) -#define STBTT_ifloor(x) ((int)ImFloorStd(x)) -#define STBTT_iceil(x) ((int)ImCeil(x)) -#define STBTT_STATIC -#define STB_TRUETYPE_IMPLEMENTATION -#else -#define STBTT_DEF extern -#endif -#ifdef IMGUI_STB_TRUETYPE_FILENAME -#include IMGUI_STB_TRUETYPE_FILENAME -#else -#include "imstb_truetype.h" -#endif -#endif - -#if defined(__GNUC__) -#pragma GCC diagnostic pop -#endif - -#if defined(__clang__) -#pragma clang diagnostic pop -#endif - -#if defined(_MSC_VER) -#pragma warning (pop) -#endif - -#ifdef IMGUI_STB_NAMESPACE -} // namespace ImStb -using namespace IMGUI_STB_NAMESPACE; -#endif - -//----------------------------------------------------------------------------- -// [SECTION] Style functions -//----------------------------------------------------------------------------- - -void ImGui::StyleColorsDark(ImGuiStyle* dst) -{ - ImGuiStyle* style = dst ? dst : &ImGui::GetStyle(); - ImVec4* colors = style->Colors; - - colors[ImGuiCol_Text] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); - colors[ImGuiCol_TextDisabled] = ImVec4(0.50f, 0.50f, 0.50f, 1.00f); - colors[ImGuiCol_WindowBg] = ImVec4(0.06f, 0.06f, 0.06f, 0.94f); - colors[ImGuiCol_ChildBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); - colors[ImGuiCol_PopupBg] = ImVec4(0.08f, 0.08f, 0.08f, 0.94f); - colors[ImGuiCol_Border] = ImVec4(0.43f, 0.43f, 0.50f, 0.50f); - colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); - colors[ImGuiCol_FrameBg] = ImVec4(0.16f, 0.29f, 0.48f, 0.54f); - colors[ImGuiCol_FrameBgHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.40f); - colors[ImGuiCol_FrameBgActive] = ImVec4(0.26f, 0.59f, 0.98f, 0.67f); - colors[ImGuiCol_TitleBg] = ImVec4(0.04f, 0.04f, 0.04f, 1.00f); - colors[ImGuiCol_TitleBgActive] = ImVec4(0.16f, 0.29f, 0.48f, 1.00f); - colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.00f, 0.00f, 0.00f, 0.51f); - colors[ImGuiCol_MenuBarBg] = ImVec4(0.14f, 0.14f, 0.14f, 1.00f); - colors[ImGuiCol_ScrollbarBg] = ImVec4(0.02f, 0.02f, 0.02f, 0.53f); - colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.31f, 0.31f, 0.31f, 1.00f); - colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.41f, 0.41f, 0.41f, 1.00f); - colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.51f, 0.51f, 0.51f, 1.00f); - colors[ImGuiCol_CheckMark] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f); - colors[ImGuiCol_SliderGrab] = ImVec4(0.24f, 0.52f, 0.88f, 1.00f); - colors[ImGuiCol_SliderGrabActive] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f); - colors[ImGuiCol_Button] = ImVec4(0.26f, 0.59f, 0.98f, 0.40f); - colors[ImGuiCol_ButtonHovered] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f); - colors[ImGuiCol_ButtonActive] = ImVec4(0.06f, 0.53f, 0.98f, 1.00f); - colors[ImGuiCol_Header] = ImVec4(0.26f, 0.59f, 0.98f, 0.31f); - colors[ImGuiCol_HeaderHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.80f); - colors[ImGuiCol_HeaderActive] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f); - colors[ImGuiCol_Separator] = colors[ImGuiCol_Border]; - colors[ImGuiCol_SeparatorHovered] = ImVec4(0.10f, 0.40f, 0.75f, 0.78f); - colors[ImGuiCol_SeparatorActive] = ImVec4(0.10f, 0.40f, 0.75f, 1.00f); - colors[ImGuiCol_ResizeGrip] = ImVec4(0.26f, 0.59f, 0.98f, 0.25f); - colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.67f); - colors[ImGuiCol_ResizeGripActive] = ImVec4(0.26f, 0.59f, 0.98f, 0.95f); - colors[ImGuiCol_Tab] = ImLerp(colors[ImGuiCol_Header], colors[ImGuiCol_TitleBgActive], 0.80f); - colors[ImGuiCol_TabHovered] = colors[ImGuiCol_HeaderHovered]; - colors[ImGuiCol_TabActive] = ImLerp(colors[ImGuiCol_HeaderActive], colors[ImGuiCol_TitleBgActive], 0.60f); - colors[ImGuiCol_TabUnfocused] = ImLerp(colors[ImGuiCol_Tab], colors[ImGuiCol_TitleBg], 0.80f); - colors[ImGuiCol_TabUnfocusedActive] = ImLerp(colors[ImGuiCol_TabActive], colors[ImGuiCol_TitleBg], 0.40f); - colors[ImGuiCol_PlotLines] = ImVec4(0.61f, 0.61f, 0.61f, 1.00f); - colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.00f, 0.43f, 0.35f, 1.00f); - colors[ImGuiCol_PlotHistogram] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f); - colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.60f, 0.00f, 1.00f); - colors[ImGuiCol_TextSelectedBg] = ImVec4(0.26f, 0.59f, 0.98f, 0.35f); - colors[ImGuiCol_DragDropTarget] = ImVec4(1.00f, 1.00f, 0.00f, 0.90f); - colors[ImGuiCol_NavHighlight] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f); - colors[ImGuiCol_NavWindowingHighlight] = ImVec4(1.00f, 1.00f, 1.00f, 0.70f); - colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.20f); - colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.35f); -} - -void ImGui::StyleColorsClassic(ImGuiStyle* dst) -{ - ImGuiStyle* style = dst ? dst : &ImGui::GetStyle(); - ImVec4* colors = style->Colors; - - colors[ImGuiCol_Text] = ImVec4(0.90f, 0.90f, 0.90f, 1.00f); - colors[ImGuiCol_TextDisabled] = ImVec4(0.60f, 0.60f, 0.60f, 1.00f); - colors[ImGuiCol_WindowBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.70f); - colors[ImGuiCol_ChildBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); - colors[ImGuiCol_PopupBg] = ImVec4(0.11f, 0.11f, 0.14f, 0.92f); - colors[ImGuiCol_Border] = ImVec4(0.50f, 0.50f, 0.50f, 0.50f); - colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); - colors[ImGuiCol_FrameBg] = ImVec4(0.43f, 0.43f, 0.43f, 0.39f); - colors[ImGuiCol_FrameBgHovered] = ImVec4(0.47f, 0.47f, 0.69f, 0.40f); - colors[ImGuiCol_FrameBgActive] = ImVec4(0.42f, 0.41f, 0.64f, 0.69f); - colors[ImGuiCol_TitleBg] = ImVec4(0.27f, 0.27f, 0.54f, 0.83f); - colors[ImGuiCol_TitleBgActive] = ImVec4(0.32f, 0.32f, 0.63f, 0.87f); - colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.40f, 0.40f, 0.80f, 0.20f); - colors[ImGuiCol_MenuBarBg] = ImVec4(0.40f, 0.40f, 0.55f, 0.80f); - colors[ImGuiCol_ScrollbarBg] = ImVec4(0.20f, 0.25f, 0.30f, 0.60f); - colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.40f, 0.40f, 0.80f, 0.30f); - colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.40f, 0.40f, 0.80f, 0.40f); - colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.41f, 0.39f, 0.80f, 0.60f); - colors[ImGuiCol_CheckMark] = ImVec4(0.90f, 0.90f, 0.90f, 0.50f); - colors[ImGuiCol_SliderGrab] = ImVec4(1.00f, 1.00f, 1.00f, 0.30f); - colors[ImGuiCol_SliderGrabActive] = ImVec4(0.41f, 0.39f, 0.80f, 0.60f); - colors[ImGuiCol_Button] = ImVec4(0.35f, 0.40f, 0.61f, 0.62f); - colors[ImGuiCol_ButtonHovered] = ImVec4(0.40f, 0.48f, 0.71f, 0.79f); - colors[ImGuiCol_ButtonActive] = ImVec4(0.46f, 0.54f, 0.80f, 1.00f); - colors[ImGuiCol_Header] = ImVec4(0.40f, 0.40f, 0.90f, 0.45f); - colors[ImGuiCol_HeaderHovered] = ImVec4(0.45f, 0.45f, 0.90f, 0.80f); - colors[ImGuiCol_HeaderActive] = ImVec4(0.53f, 0.53f, 0.87f, 0.80f); - colors[ImGuiCol_Separator] = ImVec4(0.50f, 0.50f, 0.50f, 0.60f); - colors[ImGuiCol_SeparatorHovered] = ImVec4(0.60f, 0.60f, 0.70f, 1.00f); - colors[ImGuiCol_SeparatorActive] = ImVec4(0.70f, 0.70f, 0.90f, 1.00f); - colors[ImGuiCol_ResizeGrip] = ImVec4(1.00f, 1.00f, 1.00f, 0.16f); - colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.78f, 0.82f, 1.00f, 0.60f); - colors[ImGuiCol_ResizeGripActive] = ImVec4(0.78f, 0.82f, 1.00f, 0.90f); - colors[ImGuiCol_Tab] = ImLerp(colors[ImGuiCol_Header], colors[ImGuiCol_TitleBgActive], 0.80f); - colors[ImGuiCol_TabHovered] = colors[ImGuiCol_HeaderHovered]; - colors[ImGuiCol_TabActive] = ImLerp(colors[ImGuiCol_HeaderActive], colors[ImGuiCol_TitleBgActive], 0.60f); - colors[ImGuiCol_TabUnfocused] = ImLerp(colors[ImGuiCol_Tab], colors[ImGuiCol_TitleBg], 0.80f); - colors[ImGuiCol_TabUnfocusedActive] = ImLerp(colors[ImGuiCol_TabActive], colors[ImGuiCol_TitleBg], 0.40f); - colors[ImGuiCol_PlotLines] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); - colors[ImGuiCol_PlotLinesHovered] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f); - colors[ImGuiCol_PlotHistogram] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f); - colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.60f, 0.00f, 1.00f); - colors[ImGuiCol_TextSelectedBg] = ImVec4(0.00f, 0.00f, 1.00f, 0.35f); - colors[ImGuiCol_DragDropTarget] = ImVec4(1.00f, 1.00f, 0.00f, 0.90f); - colors[ImGuiCol_NavHighlight] = colors[ImGuiCol_HeaderHovered]; - colors[ImGuiCol_NavWindowingHighlight] = ImVec4(1.00f, 1.00f, 1.00f, 0.70f); - colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.20f); - colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.20f, 0.20f, 0.20f, 0.35f); -} - -// Those light colors are better suited with a thicker font than the default one + FrameBorder -void ImGui::StyleColorsLight(ImGuiStyle* dst) -{ - ImGuiStyle* style = dst ? dst : &ImGui::GetStyle(); - ImVec4* colors = style->Colors; - - colors[ImGuiCol_Text] = ImVec4(0.00f, 0.00f, 0.00f, 1.00f); - colors[ImGuiCol_TextDisabled] = ImVec4(0.60f, 0.60f, 0.60f, 1.00f); - colors[ImGuiCol_WindowBg] = ImVec4(0.94f, 0.94f, 0.94f, 1.00f); - colors[ImGuiCol_ChildBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); - colors[ImGuiCol_PopupBg] = ImVec4(1.00f, 1.00f, 1.00f, 0.98f); - colors[ImGuiCol_Border] = ImVec4(0.00f, 0.00f, 0.00f, 0.30f); - colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); - colors[ImGuiCol_FrameBg] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); - colors[ImGuiCol_FrameBgHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.40f); - colors[ImGuiCol_FrameBgActive] = ImVec4(0.26f, 0.59f, 0.98f, 0.67f); - colors[ImGuiCol_TitleBg] = ImVec4(0.96f, 0.96f, 0.96f, 1.00f); - colors[ImGuiCol_TitleBgActive] = ImVec4(0.82f, 0.82f, 0.82f, 1.00f); - colors[ImGuiCol_TitleBgCollapsed] = ImVec4(1.00f, 1.00f, 1.00f, 0.51f); - colors[ImGuiCol_MenuBarBg] = ImVec4(0.86f, 0.86f, 0.86f, 1.00f); - colors[ImGuiCol_ScrollbarBg] = ImVec4(0.98f, 0.98f, 0.98f, 0.53f); - colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.69f, 0.69f, 0.69f, 0.80f); - colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.49f, 0.49f, 0.49f, 0.80f); - colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.49f, 0.49f, 0.49f, 1.00f); - colors[ImGuiCol_CheckMark] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f); - colors[ImGuiCol_SliderGrab] = ImVec4(0.26f, 0.59f, 0.98f, 0.78f); - colors[ImGuiCol_SliderGrabActive] = ImVec4(0.46f, 0.54f, 0.80f, 0.60f); - colors[ImGuiCol_Button] = ImVec4(0.26f, 0.59f, 0.98f, 0.40f); - colors[ImGuiCol_ButtonHovered] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f); - colors[ImGuiCol_ButtonActive] = ImVec4(0.06f, 0.53f, 0.98f, 1.00f); - colors[ImGuiCol_Header] = ImVec4(0.26f, 0.59f, 0.98f, 0.31f); - colors[ImGuiCol_HeaderHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.80f); - colors[ImGuiCol_HeaderActive] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f); - colors[ImGuiCol_Separator] = ImVec4(0.39f, 0.39f, 0.39f, 0.62f); - colors[ImGuiCol_SeparatorHovered] = ImVec4(0.14f, 0.44f, 0.80f, 0.78f); - colors[ImGuiCol_SeparatorActive] = ImVec4(0.14f, 0.44f, 0.80f, 1.00f); - colors[ImGuiCol_ResizeGrip] = ImVec4(0.80f, 0.80f, 0.80f, 0.56f); - colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.67f); - colors[ImGuiCol_ResizeGripActive] = ImVec4(0.26f, 0.59f, 0.98f, 0.95f); - colors[ImGuiCol_Tab] = ImLerp(colors[ImGuiCol_Header], colors[ImGuiCol_TitleBgActive], 0.90f); - colors[ImGuiCol_TabHovered] = colors[ImGuiCol_HeaderHovered]; - colors[ImGuiCol_TabActive] = ImLerp(colors[ImGuiCol_HeaderActive], colors[ImGuiCol_TitleBgActive], 0.60f); - colors[ImGuiCol_TabUnfocused] = ImLerp(colors[ImGuiCol_Tab], colors[ImGuiCol_TitleBg], 0.80f); - colors[ImGuiCol_TabUnfocusedActive] = ImLerp(colors[ImGuiCol_TabActive], colors[ImGuiCol_TitleBg], 0.40f); - colors[ImGuiCol_PlotLines] = ImVec4(0.39f, 0.39f, 0.39f, 1.00f); - colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.00f, 0.43f, 0.35f, 1.00f); - colors[ImGuiCol_PlotHistogram] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f); - colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.45f, 0.00f, 1.00f); - colors[ImGuiCol_TextSelectedBg] = ImVec4(0.26f, 0.59f, 0.98f, 0.35f); - colors[ImGuiCol_DragDropTarget] = ImVec4(0.26f, 0.59f, 0.98f, 0.95f); - colors[ImGuiCol_NavHighlight] = colors[ImGuiCol_HeaderHovered]; - colors[ImGuiCol_NavWindowingHighlight] = ImVec4(0.70f, 0.70f, 0.70f, 0.70f); - colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.20f, 0.20f, 0.20f, 0.20f); - colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.20f, 0.20f, 0.20f, 0.35f); -} - -//----------------------------------------------------------------------------- -// ImDrawList -//----------------------------------------------------------------------------- - -ImDrawListSharedData::ImDrawListSharedData() -{ - Font = NULL; - FontSize = 0.0f; - CurveTessellationTol = 0.0f; - CircleSegmentMaxError = 0.0f; - ClipRectFullscreen = ImVec4(-8192.0f, -8192.0f, +8192.0f, +8192.0f); - InitialFlags = ImDrawListFlags_None; - - // Lookup tables - for (int i = 0; i < IM_ARRAYSIZE(ArcFastVtx); i++) - { - const float a = ((float)i * 2 * IM_PI) / (float)IM_ARRAYSIZE(ArcFastVtx); - ArcFastVtx[i] = ImVec2(ImCos(a), ImSin(a)); - } - memset(CircleSegmentCounts, 0, sizeof(CircleSegmentCounts)); // This will be set by SetCircleSegmentMaxError() -} - -void ImDrawListSharedData::SetCircleSegmentMaxError(float max_error) -{ - if (CircleSegmentMaxError == max_error) - return; - CircleSegmentMaxError = max_error; - for (int i = 0; i < IM_ARRAYSIZE(CircleSegmentCounts); i++) - { - const float radius = i + 1.0f; - const int segment_count = IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC(radius, CircleSegmentMaxError); - CircleSegmentCounts[i] = (ImU8)ImMin(segment_count, 255); - } -} - -void ImDrawList::Clear() -{ - CmdBuffer.resize(0); - IdxBuffer.resize(0); - VtxBuffer.resize(0); - Flags = _Data ? _Data->InitialFlags : ImDrawListFlags_None; - _VtxCurrentOffset = 0; - _VtxCurrentIdx = 0; - _VtxWritePtr = NULL; - _IdxWritePtr = NULL; - _ClipRectStack.resize(0); - _TextureIdStack.resize(0); - _Path.resize(0); - _Splitter.Clear(); -} - -void ImDrawList::ClearFreeMemory() -{ - CmdBuffer.clear(); - IdxBuffer.clear(); - VtxBuffer.clear(); - _VtxCurrentIdx = 0; - _VtxWritePtr = NULL; - _IdxWritePtr = NULL; - _ClipRectStack.clear(); - _TextureIdStack.clear(); - _Path.clear(); - _Splitter.ClearFreeMemory(); -} - -ImDrawList* ImDrawList::CloneOutput() const -{ - ImDrawList* dst = IM_NEW(ImDrawList(_Data)); - dst->CmdBuffer = CmdBuffer; - dst->IdxBuffer = IdxBuffer; - dst->VtxBuffer = VtxBuffer; - dst->Flags = Flags; - return dst; -} - -// Using macros because C++ is a terrible language, we want guaranteed inline, no code in header, and no overhead in Debug builds -#define GetCurrentClipRect() (_ClipRectStack.Size ? _ClipRectStack.Data[_ClipRectStack.Size-1] : _Data->ClipRectFullscreen) -#define GetCurrentTextureId() (_TextureIdStack.Size ? _TextureIdStack.Data[_TextureIdStack.Size-1] : (ImTextureID)NULL) - -void ImDrawList::AddDrawCmd() -{ - ImDrawCmd draw_cmd; - draw_cmd.ClipRect = GetCurrentClipRect(); - draw_cmd.TextureId = GetCurrentTextureId(); - draw_cmd.VtxOffset = _VtxCurrentOffset; - draw_cmd.IdxOffset = IdxBuffer.Size; - - IM_ASSERT(draw_cmd.ClipRect.x <= draw_cmd.ClipRect.z && draw_cmd.ClipRect.y <= draw_cmd.ClipRect.w); - CmdBuffer.push_back(draw_cmd); -} - -void ImDrawList::AddCallback(ImDrawCallback callback, void* callback_data) -{ - ImDrawCmd* current_cmd = CmdBuffer.Size ? &CmdBuffer.back() : NULL; - if (!current_cmd || current_cmd->ElemCount != 0 || current_cmd->UserCallback != NULL) - { - AddDrawCmd(); - current_cmd = &CmdBuffer.back(); - } - current_cmd->UserCallback = callback; - current_cmd->UserCallbackData = callback_data; - - AddDrawCmd(); // Force a new command after us (see comment below) -} - -// Our scheme may appears a bit unusual, basically we want the most-common calls AddLine AddRect etc. to not have to perform any check so we always have a command ready in the stack. -// The cost of figuring out if a new command has to be added or if we can merge is paid in those Update** functions only. -void ImDrawList::UpdateClipRect() -{ - // If current command is used with different settings we need to add a new command - const ImVec4 curr_clip_rect = GetCurrentClipRect(); - ImDrawCmd* curr_cmd = CmdBuffer.Size > 0 ? &CmdBuffer.Data[CmdBuffer.Size-1] : NULL; - if (!curr_cmd || (curr_cmd->ElemCount != 0 && memcmp(&curr_cmd->ClipRect, &curr_clip_rect, sizeof(ImVec4)) != 0) || curr_cmd->UserCallback != NULL) - { - AddDrawCmd(); - return; - } - - // Try to merge with previous command if it matches, else use current command - ImDrawCmd* prev_cmd = CmdBuffer.Size > 1 ? curr_cmd - 1 : NULL; - if (curr_cmd->ElemCount == 0 && prev_cmd && memcmp(&prev_cmd->ClipRect, &curr_clip_rect, sizeof(ImVec4)) == 0 && prev_cmd->TextureId == GetCurrentTextureId() && prev_cmd->UserCallback == NULL) - CmdBuffer.pop_back(); - else - curr_cmd->ClipRect = curr_clip_rect; -} - -void ImDrawList::UpdateTextureID() -{ - // If current command is used with different settings we need to add a new command - const ImTextureID curr_texture_id = GetCurrentTextureId(); - ImDrawCmd* curr_cmd = CmdBuffer.Size ? &CmdBuffer.back() : NULL; - if (!curr_cmd || (curr_cmd->ElemCount != 0 && curr_cmd->TextureId != curr_texture_id) || curr_cmd->UserCallback != NULL) - { - AddDrawCmd(); - return; - } - - // Try to merge with previous command if it matches, else use current command - ImDrawCmd* prev_cmd = CmdBuffer.Size > 1 ? curr_cmd - 1 : NULL; - if (curr_cmd->ElemCount == 0 && prev_cmd && prev_cmd->TextureId == curr_texture_id && memcmp(&prev_cmd->ClipRect, &GetCurrentClipRect(), sizeof(ImVec4)) == 0 && prev_cmd->UserCallback == NULL) - CmdBuffer.pop_back(); - else - curr_cmd->TextureId = curr_texture_id; -} - -#undef GetCurrentClipRect -#undef GetCurrentTextureId - -// Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) -void ImDrawList::PushClipRect(ImVec2 cr_min, ImVec2 cr_max, bool intersect_with_current_clip_rect) -{ - ImVec4 cr(cr_min.x, cr_min.y, cr_max.x, cr_max.y); - if (intersect_with_current_clip_rect && _ClipRectStack.Size) - { - ImVec4 current = _ClipRectStack.Data[_ClipRectStack.Size-1]; - if (cr.x < current.x) cr.x = current.x; - if (cr.y < current.y) cr.y = current.y; - if (cr.z > current.z) cr.z = current.z; - if (cr.w > current.w) cr.w = current.w; - } - cr.z = ImMax(cr.x, cr.z); - cr.w = ImMax(cr.y, cr.w); - - _ClipRectStack.push_back(cr); - UpdateClipRect(); -} - -void ImDrawList::PushClipRectFullScreen() -{ - PushClipRect(ImVec2(_Data->ClipRectFullscreen.x, _Data->ClipRectFullscreen.y), ImVec2(_Data->ClipRectFullscreen.z, _Data->ClipRectFullscreen.w)); -} - -void ImDrawList::PopClipRect() -{ - IM_ASSERT(_ClipRectStack.Size > 0); - _ClipRectStack.pop_back(); - UpdateClipRect(); -} - -void ImDrawList::PushTextureID(ImTextureID texture_id) -{ - _TextureIdStack.push_back(texture_id); - UpdateTextureID(); -} - -void ImDrawList::PopTextureID() -{ - IM_ASSERT(_TextureIdStack.Size > 0); - _TextureIdStack.pop_back(); - UpdateTextureID(); -} - -// Reserve space for a number of vertices and indices. -// You must finish filling your reserved data before calling PrimReserve() again, as it may reallocate or -// submit the intermediate results. PrimUnreserve() can be used to release unused allocations. -void ImDrawList::PrimReserve(int idx_count, int vtx_count) -{ - // Large mesh support (when enabled) - IM_ASSERT_PARANOID(idx_count >= 0 && vtx_count >= 0); - if (sizeof(ImDrawIdx) == 2 && (_VtxCurrentIdx + vtx_count >= (1 << 16)) && (Flags & ImDrawListFlags_AllowVtxOffset)) - { - _VtxCurrentOffset = VtxBuffer.Size; - _VtxCurrentIdx = 0; - AddDrawCmd(); - } - - ImDrawCmd& draw_cmd = CmdBuffer.Data[CmdBuffer.Size - 1]; - draw_cmd.ElemCount += idx_count; - - int vtx_buffer_old_size = VtxBuffer.Size; - VtxBuffer.resize(vtx_buffer_old_size + vtx_count); - _VtxWritePtr = VtxBuffer.Data + vtx_buffer_old_size; - - int idx_buffer_old_size = IdxBuffer.Size; - IdxBuffer.resize(idx_buffer_old_size + idx_count); - _IdxWritePtr = IdxBuffer.Data + idx_buffer_old_size; -} - -// Release the a number of reserved vertices/indices from the end of the last reservation made with PrimReserve(). -void ImDrawList::PrimUnreserve(int idx_count, int vtx_count) -{ - IM_ASSERT_PARANOID(idx_count >= 0 && vtx_count >= 0); - - ImDrawCmd& draw_cmd = CmdBuffer.Data[CmdBuffer.Size - 1]; - draw_cmd.ElemCount -= idx_count; - VtxBuffer.shrink(VtxBuffer.Size - vtx_count); - IdxBuffer.shrink(IdxBuffer.Size - idx_count); -} - -// Fully unrolled with inline call to keep our debug builds decently fast. -void ImDrawList::PrimRect(const ImVec2& a, const ImVec2& c, ImU32 col) -{ - ImVec2 b(c.x, a.y), d(a.x, c.y), uv(_Data->TexUvWhitePixel); - ImDrawIdx idx = (ImDrawIdx)_VtxCurrentIdx; - _IdxWritePtr[0] = idx; _IdxWritePtr[1] = (ImDrawIdx)(idx+1); _IdxWritePtr[2] = (ImDrawIdx)(idx+2); - _IdxWritePtr[3] = idx; _IdxWritePtr[4] = (ImDrawIdx)(idx+2); _IdxWritePtr[5] = (ImDrawIdx)(idx+3); - _VtxWritePtr[0].pos = a; _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col; - _VtxWritePtr[1].pos = b; _VtxWritePtr[1].uv = uv; _VtxWritePtr[1].col = col; - _VtxWritePtr[2].pos = c; _VtxWritePtr[2].uv = uv; _VtxWritePtr[2].col = col; - _VtxWritePtr[3].pos = d; _VtxWritePtr[3].uv = uv; _VtxWritePtr[3].col = col; - _VtxWritePtr += 4; - _VtxCurrentIdx += 4; - _IdxWritePtr += 6; -} - -void ImDrawList::PrimRectUV(const ImVec2& a, const ImVec2& c, const ImVec2& uv_a, const ImVec2& uv_c, ImU32 col) -{ - ImVec2 b(c.x, a.y), d(a.x, c.y), uv_b(uv_c.x, uv_a.y), uv_d(uv_a.x, uv_c.y); - ImDrawIdx idx = (ImDrawIdx)_VtxCurrentIdx; - _IdxWritePtr[0] = idx; _IdxWritePtr[1] = (ImDrawIdx)(idx+1); _IdxWritePtr[2] = (ImDrawIdx)(idx+2); - _IdxWritePtr[3] = idx; _IdxWritePtr[4] = (ImDrawIdx)(idx+2); _IdxWritePtr[5] = (ImDrawIdx)(idx+3); - _VtxWritePtr[0].pos = a; _VtxWritePtr[0].uv = uv_a; _VtxWritePtr[0].col = col; - _VtxWritePtr[1].pos = b; _VtxWritePtr[1].uv = uv_b; _VtxWritePtr[1].col = col; - _VtxWritePtr[2].pos = c; _VtxWritePtr[2].uv = uv_c; _VtxWritePtr[2].col = col; - _VtxWritePtr[3].pos = d; _VtxWritePtr[3].uv = uv_d; _VtxWritePtr[3].col = col; - _VtxWritePtr += 4; - _VtxCurrentIdx += 4; - _IdxWritePtr += 6; -} - -void ImDrawList::PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col) -{ - ImDrawIdx idx = (ImDrawIdx)_VtxCurrentIdx; - _IdxWritePtr[0] = idx; _IdxWritePtr[1] = (ImDrawIdx)(idx+1); _IdxWritePtr[2] = (ImDrawIdx)(idx+2); - _IdxWritePtr[3] = idx; _IdxWritePtr[4] = (ImDrawIdx)(idx+2); _IdxWritePtr[5] = (ImDrawIdx)(idx+3); - _VtxWritePtr[0].pos = a; _VtxWritePtr[0].uv = uv_a; _VtxWritePtr[0].col = col; - _VtxWritePtr[1].pos = b; _VtxWritePtr[1].uv = uv_b; _VtxWritePtr[1].col = col; - _VtxWritePtr[2].pos = c; _VtxWritePtr[2].uv = uv_c; _VtxWritePtr[2].col = col; - _VtxWritePtr[3].pos = d; _VtxWritePtr[3].uv = uv_d; _VtxWritePtr[3].col = col; - _VtxWritePtr += 4; - _VtxCurrentIdx += 4; - _IdxWritePtr += 6; -} - -// On AddPolyline() and AddConvexPolyFilled() we intentionally avoid using ImVec2 and superflous function calls to optimize debug/non-inlined builds. -// Those macros expects l-values. -#define IM_NORMALIZE2F_OVER_ZERO(VX,VY) do { float d2 = VX*VX + VY*VY; if (d2 > 0.0f) { float inv_len = 1.0f / ImSqrt(d2); VX *= inv_len; VY *= inv_len; } } while (0) -#define IM_FIXNORMAL2F(VX,VY) do { float d2 = VX*VX + VY*VY; if (d2 < 0.5f) d2 = 0.5f; float inv_lensq = 1.0f / d2; VX *= inv_lensq; VY *= inv_lensq; } while (0) - -// TODO: Thickness anti-aliased lines cap are missing their AA fringe. -// We avoid using the ImVec2 math operators here to reduce cost to a minimum for debug/non-inlined builds. -void ImDrawList::AddPolyline(const ImVec2* points, const int points_count, ImU32 col, bool closed, float thickness) -{ - if (points_count < 2) - return; - - const ImVec2 uv = _Data->TexUvWhitePixel; - - int count = points_count; - if (!closed) - count = points_count-1; - - const bool thick_line = thickness > 1.0f; - if (Flags & ImDrawListFlags_AntiAliasedLines) - { - // Anti-aliased stroke - const float AA_SIZE = 1.0f; - const ImU32 col_trans = col & ~IM_COL32_A_MASK; - - const int idx_count = thick_line ? count*18 : count*12; - const int vtx_count = thick_line ? points_count*4 : points_count*3; - PrimReserve(idx_count, vtx_count); - - // Temporary buffer - ImVec2* temp_normals = (ImVec2*)alloca(points_count * (thick_line ? 5 : 3) * sizeof(ImVec2)); //-V630 - ImVec2* temp_points = temp_normals + points_count; - - for (int i1 = 0; i1 < count; i1++) - { - const int i2 = (i1+1) == points_count ? 0 : i1+1; - float dx = points[i2].x - points[i1].x; - float dy = points[i2].y - points[i1].y; - IM_NORMALIZE2F_OVER_ZERO(dx, dy); - temp_normals[i1].x = dy; - temp_normals[i1].y = -dx; - } - if (!closed) - temp_normals[points_count-1] = temp_normals[points_count-2]; - - if (!thick_line) - { - if (!closed) - { - temp_points[0] = points[0] + temp_normals[0] * AA_SIZE; - temp_points[1] = points[0] - temp_normals[0] * AA_SIZE; - temp_points[(points_count-1)*2+0] = points[points_count-1] + temp_normals[points_count-1] * AA_SIZE; - temp_points[(points_count-1)*2+1] = points[points_count-1] - temp_normals[points_count-1] * AA_SIZE; - } - - // FIXME-OPT: Merge the different loops, possibly remove the temporary buffer. - unsigned int idx1 = _VtxCurrentIdx; - for (int i1 = 0; i1 < count; i1++) - { - const int i2 = (i1+1) == points_count ? 0 : i1+1; - unsigned int idx2 = (i1+1) == points_count ? _VtxCurrentIdx : idx1+3; - - // Average normals - float dm_x = (temp_normals[i1].x + temp_normals[i2].x) * 0.5f; - float dm_y = (temp_normals[i1].y + temp_normals[i2].y) * 0.5f; - IM_FIXNORMAL2F(dm_x, dm_y); - dm_x *= AA_SIZE; - dm_y *= AA_SIZE; - - // Add temporary vertexes - ImVec2* out_vtx = &temp_points[i2*2]; - out_vtx[0].x = points[i2].x + dm_x; - out_vtx[0].y = points[i2].y + dm_y; - out_vtx[1].x = points[i2].x - dm_x; - out_vtx[1].y = points[i2].y - dm_y; - - // Add indexes - _IdxWritePtr[0] = (ImDrawIdx)(idx2+0); _IdxWritePtr[1] = (ImDrawIdx)(idx1+0); _IdxWritePtr[2] = (ImDrawIdx)(idx1+2); - _IdxWritePtr[3] = (ImDrawIdx)(idx1+2); _IdxWritePtr[4] = (ImDrawIdx)(idx2+2); _IdxWritePtr[5] = (ImDrawIdx)(idx2+0); - _IdxWritePtr[6] = (ImDrawIdx)(idx2+1); _IdxWritePtr[7] = (ImDrawIdx)(idx1+1); _IdxWritePtr[8] = (ImDrawIdx)(idx1+0); - _IdxWritePtr[9] = (ImDrawIdx)(idx1+0); _IdxWritePtr[10]= (ImDrawIdx)(idx2+0); _IdxWritePtr[11]= (ImDrawIdx)(idx2+1); - _IdxWritePtr += 12; - - idx1 = idx2; - } - - // Add vertexes - for (int i = 0; i < points_count; i++) - { - _VtxWritePtr[0].pos = points[i]; _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col; - _VtxWritePtr[1].pos = temp_points[i*2+0]; _VtxWritePtr[1].uv = uv; _VtxWritePtr[1].col = col_trans; - _VtxWritePtr[2].pos = temp_points[i*2+1]; _VtxWritePtr[2].uv = uv; _VtxWritePtr[2].col = col_trans; - _VtxWritePtr += 3; - } - } - else - { - const float half_inner_thickness = (thickness - AA_SIZE) * 0.5f; - if (!closed) - { - temp_points[0] = points[0] + temp_normals[0] * (half_inner_thickness + AA_SIZE); - temp_points[1] = points[0] + temp_normals[0] * (half_inner_thickness); - temp_points[2] = points[0] - temp_normals[0] * (half_inner_thickness); - temp_points[3] = points[0] - temp_normals[0] * (half_inner_thickness + AA_SIZE); - temp_points[(points_count-1)*4+0] = points[points_count-1] + temp_normals[points_count-1] * (half_inner_thickness + AA_SIZE); - temp_points[(points_count-1)*4+1] = points[points_count-1] + temp_normals[points_count-1] * (half_inner_thickness); - temp_points[(points_count-1)*4+2] = points[points_count-1] - temp_normals[points_count-1] * (half_inner_thickness); - temp_points[(points_count-1)*4+3] = points[points_count-1] - temp_normals[points_count-1] * (half_inner_thickness + AA_SIZE); - } - - // FIXME-OPT: Merge the different loops, possibly remove the temporary buffer. - unsigned int idx1 = _VtxCurrentIdx; - for (int i1 = 0; i1 < count; i1++) - { - const int i2 = (i1+1) == points_count ? 0 : i1+1; - unsigned int idx2 = (i1+1) == points_count ? _VtxCurrentIdx : idx1+4; - - // Average normals - float dm_x = (temp_normals[i1].x + temp_normals[i2].x) * 0.5f; - float dm_y = (temp_normals[i1].y + temp_normals[i2].y) * 0.5f; - IM_FIXNORMAL2F(dm_x, dm_y); - float dm_out_x = dm_x * (half_inner_thickness + AA_SIZE); - float dm_out_y = dm_y * (half_inner_thickness + AA_SIZE); - float dm_in_x = dm_x * half_inner_thickness; - float dm_in_y = dm_y * half_inner_thickness; - - // Add temporary vertexes - ImVec2* out_vtx = &temp_points[i2*4]; - out_vtx[0].x = points[i2].x + dm_out_x; - out_vtx[0].y = points[i2].y + dm_out_y; - out_vtx[1].x = points[i2].x + dm_in_x; - out_vtx[1].y = points[i2].y + dm_in_y; - out_vtx[2].x = points[i2].x - dm_in_x; - out_vtx[2].y = points[i2].y - dm_in_y; - out_vtx[3].x = points[i2].x - dm_out_x; - out_vtx[3].y = points[i2].y - dm_out_y; - - // Add indexes - _IdxWritePtr[0] = (ImDrawIdx)(idx2+1); _IdxWritePtr[1] = (ImDrawIdx)(idx1+1); _IdxWritePtr[2] = (ImDrawIdx)(idx1+2); - _IdxWritePtr[3] = (ImDrawIdx)(idx1+2); _IdxWritePtr[4] = (ImDrawIdx)(idx2+2); _IdxWritePtr[5] = (ImDrawIdx)(idx2+1); - _IdxWritePtr[6] = (ImDrawIdx)(idx2+1); _IdxWritePtr[7] = (ImDrawIdx)(idx1+1); _IdxWritePtr[8] = (ImDrawIdx)(idx1+0); - _IdxWritePtr[9] = (ImDrawIdx)(idx1+0); _IdxWritePtr[10] = (ImDrawIdx)(idx2+0); _IdxWritePtr[11] = (ImDrawIdx)(idx2+1); - _IdxWritePtr[12] = (ImDrawIdx)(idx2+2); _IdxWritePtr[13] = (ImDrawIdx)(idx1+2); _IdxWritePtr[14] = (ImDrawIdx)(idx1+3); - _IdxWritePtr[15] = (ImDrawIdx)(idx1+3); _IdxWritePtr[16] = (ImDrawIdx)(idx2+3); _IdxWritePtr[17] = (ImDrawIdx)(idx2+2); - _IdxWritePtr += 18; - - idx1 = idx2; - } - - // Add vertexes - for (int i = 0; i < points_count; i++) - { - _VtxWritePtr[0].pos = temp_points[i*4+0]; _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col_trans; - _VtxWritePtr[1].pos = temp_points[i*4+1]; _VtxWritePtr[1].uv = uv; _VtxWritePtr[1].col = col; - _VtxWritePtr[2].pos = temp_points[i*4+2]; _VtxWritePtr[2].uv = uv; _VtxWritePtr[2].col = col; - _VtxWritePtr[3].pos = temp_points[i*4+3]; _VtxWritePtr[3].uv = uv; _VtxWritePtr[3].col = col_trans; - _VtxWritePtr += 4; - } - } - _VtxCurrentIdx += (ImDrawIdx)vtx_count; - } - else - { - // Non Anti-aliased Stroke - const int idx_count = count*6; - const int vtx_count = count*4; // FIXME-OPT: Not sharing edges - PrimReserve(idx_count, vtx_count); - - for (int i1 = 0; i1 < count; i1++) - { - const int i2 = (i1+1) == points_count ? 0 : i1+1; - const ImVec2& p1 = points[i1]; - const ImVec2& p2 = points[i2]; - - float dx = p2.x - p1.x; - float dy = p2.y - p1.y; - IM_NORMALIZE2F_OVER_ZERO(dx, dy); - dx *= (thickness * 0.5f); - dy *= (thickness * 0.5f); - - _VtxWritePtr[0].pos.x = p1.x + dy; _VtxWritePtr[0].pos.y = p1.y - dx; _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col; - _VtxWritePtr[1].pos.x = p2.x + dy; _VtxWritePtr[1].pos.y = p2.y - dx; _VtxWritePtr[1].uv = uv; _VtxWritePtr[1].col = col; - _VtxWritePtr[2].pos.x = p2.x - dy; _VtxWritePtr[2].pos.y = p2.y + dx; _VtxWritePtr[2].uv = uv; _VtxWritePtr[2].col = col; - _VtxWritePtr[3].pos.x = p1.x - dy; _VtxWritePtr[3].pos.y = p1.y + dx; _VtxWritePtr[3].uv = uv; _VtxWritePtr[3].col = col; - _VtxWritePtr += 4; - - _IdxWritePtr[0] = (ImDrawIdx)(_VtxCurrentIdx); _IdxWritePtr[1] = (ImDrawIdx)(_VtxCurrentIdx+1); _IdxWritePtr[2] = (ImDrawIdx)(_VtxCurrentIdx+2); - _IdxWritePtr[3] = (ImDrawIdx)(_VtxCurrentIdx); _IdxWritePtr[4] = (ImDrawIdx)(_VtxCurrentIdx+2); _IdxWritePtr[5] = (ImDrawIdx)(_VtxCurrentIdx+3); - _IdxWritePtr += 6; - _VtxCurrentIdx += 4; - } - } -} - -// We intentionally avoid using ImVec2 and its math operators here to reduce cost to a minimum for debug/non-inlined builds. -void ImDrawList::AddConvexPolyFilled(const ImVec2* points, const int points_count, ImU32 col) -{ - if (points_count < 3) - return; - - const ImVec2 uv = _Data->TexUvWhitePixel; - - if (Flags & ImDrawListFlags_AntiAliasedFill) - { - // Anti-aliased Fill - const float AA_SIZE = 1.0f; - const ImU32 col_trans = col & ~IM_COL32_A_MASK; - const int idx_count = (points_count-2)*3 + points_count*6; - const int vtx_count = (points_count*2); - PrimReserve(idx_count, vtx_count); - - // Add indexes for fill - unsigned int vtx_inner_idx = _VtxCurrentIdx; - unsigned int vtx_outer_idx = _VtxCurrentIdx+1; - for (int i = 2; i < points_count; i++) - { - _IdxWritePtr[0] = (ImDrawIdx)(vtx_inner_idx); _IdxWritePtr[1] = (ImDrawIdx)(vtx_inner_idx+((i-1)<<1)); _IdxWritePtr[2] = (ImDrawIdx)(vtx_inner_idx+(i<<1)); - _IdxWritePtr += 3; - } - - // Compute normals - ImVec2* temp_normals = (ImVec2*)alloca(points_count * sizeof(ImVec2)); //-V630 - for (int i0 = points_count-1, i1 = 0; i1 < points_count; i0 = i1++) - { - const ImVec2& p0 = points[i0]; - const ImVec2& p1 = points[i1]; - float dx = p1.x - p0.x; - float dy = p1.y - p0.y; - IM_NORMALIZE2F_OVER_ZERO(dx, dy); - temp_normals[i0].x = dy; - temp_normals[i0].y = -dx; - } - - for (int i0 = points_count-1, i1 = 0; i1 < points_count; i0 = i1++) - { - // Average normals - const ImVec2& n0 = temp_normals[i0]; - const ImVec2& n1 = temp_normals[i1]; - float dm_x = (n0.x + n1.x) * 0.5f; - float dm_y = (n0.y + n1.y) * 0.5f; - IM_FIXNORMAL2F(dm_x, dm_y); - dm_x *= AA_SIZE * 0.5f; - dm_y *= AA_SIZE * 0.5f; - - // Add vertices - _VtxWritePtr[0].pos.x = (points[i1].x - dm_x); _VtxWritePtr[0].pos.y = (points[i1].y - dm_y); _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col; // Inner - _VtxWritePtr[1].pos.x = (points[i1].x + dm_x); _VtxWritePtr[1].pos.y = (points[i1].y + dm_y); _VtxWritePtr[1].uv = uv; _VtxWritePtr[1].col = col_trans; // Outer - _VtxWritePtr += 2; - - // Add indexes for fringes - _IdxWritePtr[0] = (ImDrawIdx)(vtx_inner_idx+(i1<<1)); _IdxWritePtr[1] = (ImDrawIdx)(vtx_inner_idx+(i0<<1)); _IdxWritePtr[2] = (ImDrawIdx)(vtx_outer_idx+(i0<<1)); - _IdxWritePtr[3] = (ImDrawIdx)(vtx_outer_idx+(i0<<1)); _IdxWritePtr[4] = (ImDrawIdx)(vtx_outer_idx+(i1<<1)); _IdxWritePtr[5] = (ImDrawIdx)(vtx_inner_idx+(i1<<1)); - _IdxWritePtr += 6; - } - _VtxCurrentIdx += (ImDrawIdx)vtx_count; - } - else - { - // Non Anti-aliased Fill - const int idx_count = (points_count-2)*3; - const int vtx_count = points_count; - PrimReserve(idx_count, vtx_count); - for (int i = 0; i < vtx_count; i++) - { - _VtxWritePtr[0].pos = points[i]; _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col; - _VtxWritePtr++; - } - for (int i = 2; i < points_count; i++) - { - _IdxWritePtr[0] = (ImDrawIdx)(_VtxCurrentIdx); _IdxWritePtr[1] = (ImDrawIdx)(_VtxCurrentIdx+i-1); _IdxWritePtr[2] = (ImDrawIdx)(_VtxCurrentIdx+i); - _IdxWritePtr += 3; - } - _VtxCurrentIdx += (ImDrawIdx)vtx_count; - } -} - -void ImDrawList::PathArcToFast(const ImVec2& center, float radius, int a_min_of_12, int a_max_of_12) -{ - if (radius == 0.0f || a_min_of_12 > a_max_of_12) - { - _Path.push_back(center); - return; - } - - // For legacy reason the PathArcToFast() always takes angles where 2*PI is represented by 12, - // but it is possible to set IM_DRAWLIST_ARCFAST_TESSELATION_MULTIPLIER to a higher value. This should compile to a no-op otherwise. -#if IM_DRAWLIST_ARCFAST_TESSELLATION_MULTIPLIER != 1 - a_min_of_12 *= IM_DRAWLIST_ARCFAST_TESSELLATION_MULTIPLIER; - a_max_of_12 *= IM_DRAWLIST_ARCFAST_TESSELLATION_MULTIPLIER; -#endif - - _Path.reserve(_Path.Size + (a_max_of_12 - a_min_of_12 + 1)); - for (int a = a_min_of_12; a <= a_max_of_12; a++) - { - const ImVec2& c = _Data->ArcFastVtx[a % IM_ARRAYSIZE(_Data->ArcFastVtx)]; - _Path.push_back(ImVec2(center.x + c.x * radius, center.y + c.y * radius)); - } -} - -void ImDrawList::PathArcTo(const ImVec2& center, float radius, float a_min, float a_max, int num_segments) -{ - if (radius == 0.0f) - { - _Path.push_back(center); - return; - } - - // Note that we are adding a point at both a_min and a_max. - // If you are trying to draw a full closed circle you don't want the overlapping points! - _Path.reserve(_Path.Size + (num_segments + 1)); - for (int i = 0; i <= num_segments; i++) - { - const float a = a_min + ((float)i / (float)num_segments) * (a_max - a_min); - _Path.push_back(ImVec2(center.x + ImCos(a) * radius, center.y + ImSin(a) * radius)); - } -} - -ImVec2 ImBezierCalc(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, float t) -{ - float u = 1.0f - t; - float w1 = u*u*u; - float w2 = 3*u*u*t; - float w3 = 3*u*t*t; - float w4 = t*t*t; - return ImVec2(w1*p1.x + w2*p2.x + w3*p3.x + w4*p4.x, w1*p1.y + w2*p2.y + w3*p3.y + w4*p4.y); -} - -// Closely mimics BezierClosestPointCasteljauStep() in imgui.cpp -static void PathBezierToCasteljau(ImVector* path, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4, float tess_tol, int level) -{ - float dx = x4 - x1; - float dy = y4 - y1; - float d2 = ((x2 - x4) * dy - (y2 - y4) * dx); - float d3 = ((x3 - x4) * dy - (y3 - y4) * dx); - d2 = (d2 >= 0) ? d2 : -d2; - d3 = (d3 >= 0) ? d3 : -d3; - if ((d2+d3) * (d2+d3) < tess_tol * (dx*dx + dy*dy)) - { - path->push_back(ImVec2(x4, y4)); - } - else if (level < 10) - { - float x12 = (x1+x2)*0.5f, y12 = (y1+y2)*0.5f; - float x23 = (x2+x3)*0.5f, y23 = (y2+y3)*0.5f; - float x34 = (x3+x4)*0.5f, y34 = (y3+y4)*0.5f; - float x123 = (x12+x23)*0.5f, y123 = (y12+y23)*0.5f; - float x234 = (x23+x34)*0.5f, y234 = (y23+y34)*0.5f; - float x1234 = (x123+x234)*0.5f, y1234 = (y123+y234)*0.5f; - PathBezierToCasteljau(path, x1,y1, x12,y12, x123,y123, x1234,y1234, tess_tol, level+1); - PathBezierToCasteljau(path, x1234,y1234, x234,y234, x34,y34, x4,y4, tess_tol, level+1); - } -} - -void ImDrawList::PathBezierCurveTo(const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, int num_segments) -{ - ImVec2 p1 = _Path.back(); - if (num_segments == 0) - { - PathBezierToCasteljau(&_Path, p1.x, p1.y, p2.x, p2.y, p3.x, p3.y, p4.x, p4.y, _Data->CurveTessellationTol, 0); // Auto-tessellated - } - else - { - float t_step = 1.0f / (float)num_segments; - for (int i_step = 1; i_step <= num_segments; i_step++) - _Path.push_back(ImBezierCalc(p1, p2, p3, p4, t_step * i_step)); - } -} - -void ImDrawList::PathRect(const ImVec2& a, const ImVec2& b, float rounding, ImDrawCornerFlags rounding_corners) -{ - rounding = ImMin(rounding, ImFabs(b.x - a.x) * ( ((rounding_corners & ImDrawCornerFlags_Top) == ImDrawCornerFlags_Top) || ((rounding_corners & ImDrawCornerFlags_Bot) == ImDrawCornerFlags_Bot) ? 0.5f : 1.0f ) - 1.0f); - rounding = ImMin(rounding, ImFabs(b.y - a.y) * ( ((rounding_corners & ImDrawCornerFlags_Left) == ImDrawCornerFlags_Left) || ((rounding_corners & ImDrawCornerFlags_Right) == ImDrawCornerFlags_Right) ? 0.5f : 1.0f ) - 1.0f); - - if (rounding <= 0.0f || rounding_corners == 0) - { - PathLineTo(a); - PathLineTo(ImVec2(b.x, a.y)); - PathLineTo(b); - PathLineTo(ImVec2(a.x, b.y)); - } - else - { - const float rounding_tl = (rounding_corners & ImDrawCornerFlags_TopLeft) ? rounding : 0.0f; - const float rounding_tr = (rounding_corners & ImDrawCornerFlags_TopRight) ? rounding : 0.0f; - const float rounding_br = (rounding_corners & ImDrawCornerFlags_BotRight) ? rounding : 0.0f; - const float rounding_bl = (rounding_corners & ImDrawCornerFlags_BotLeft) ? rounding : 0.0f; - PathArcToFast(ImVec2(a.x + rounding_tl, a.y + rounding_tl), rounding_tl, 6, 9); - PathArcToFast(ImVec2(b.x - rounding_tr, a.y + rounding_tr), rounding_tr, 9, 12); - PathArcToFast(ImVec2(b.x - rounding_br, b.y - rounding_br), rounding_br, 0, 3); - PathArcToFast(ImVec2(a.x + rounding_bl, b.y - rounding_bl), rounding_bl, 3, 6); - } -} - -void ImDrawList::AddLine(const ImVec2& p1, const ImVec2& p2, ImU32 col, float thickness) -{ - if ((col & IM_COL32_A_MASK) == 0) - return; - PathLineTo(p1 + ImVec2(0.5f, 0.5f)); - PathLineTo(p2 + ImVec2(0.5f, 0.5f)); - PathStroke(col, false, thickness); -} - -// p_min = upper-left, p_max = lower-right -// Note we don't render 1 pixels sized rectangles properly. -void ImDrawList::AddRect(const ImVec2& p_min, const ImVec2& p_max, ImU32 col, float rounding, ImDrawCornerFlags rounding_corners, float thickness) -{ - if ((col & IM_COL32_A_MASK) == 0) - return; - if (Flags & ImDrawListFlags_AntiAliasedLines) - PathRect(p_min + ImVec2(0.50f,0.50f), p_max - ImVec2(0.50f,0.50f), rounding, rounding_corners); - else - PathRect(p_min + ImVec2(0.50f,0.50f), p_max - ImVec2(0.49f,0.49f), rounding, rounding_corners); // Better looking lower-right corner and rounded non-AA shapes. - PathStroke(col, true, thickness); -} - -void ImDrawList::AddRectFilled(const ImVec2& p_min, const ImVec2& p_max, ImU32 col, float rounding, ImDrawCornerFlags rounding_corners) -{ - if ((col & IM_COL32_A_MASK) == 0) - return; - if (rounding > 0.0f) - { - PathRect(p_min, p_max, rounding, rounding_corners); - PathFillConvex(col); - } - else - { - PrimReserve(6, 4); - PrimRect(p_min, p_max, col); - } -} - -// p_min = upper-left, p_max = lower-right -void ImDrawList::AddRectFilledMultiColor(const ImVec2& p_min, const ImVec2& p_max, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left) -{ - if (((col_upr_left | col_upr_right | col_bot_right | col_bot_left) & IM_COL32_A_MASK) == 0) - return; - - const ImVec2 uv = _Data->TexUvWhitePixel; - PrimReserve(6, 4); - PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx+1)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx+2)); - PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx+2)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx+3)); - PrimWriteVtx(p_min, uv, col_upr_left); - PrimWriteVtx(ImVec2(p_max.x, p_min.y), uv, col_upr_right); - PrimWriteVtx(p_max, uv, col_bot_right); - PrimWriteVtx(ImVec2(p_min.x, p_max.y), uv, col_bot_left); -} - -void ImDrawList::AddQuad(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col, float thickness) -{ - if ((col & IM_COL32_A_MASK) == 0) - return; - - PathLineTo(p1); - PathLineTo(p2); - PathLineTo(p3); - PathLineTo(p4); - PathStroke(col, true, thickness); -} - -void ImDrawList::AddQuadFilled(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col) -{ - if ((col & IM_COL32_A_MASK) == 0) - return; - - PathLineTo(p1); - PathLineTo(p2); - PathLineTo(p3); - PathLineTo(p4); - PathFillConvex(col); -} - -void ImDrawList::AddTriangle(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, ImU32 col, float thickness) -{ - if ((col & IM_COL32_A_MASK) == 0) - return; - - PathLineTo(p1); - PathLineTo(p2); - PathLineTo(p3); - PathStroke(col, true, thickness); -} - -void ImDrawList::AddTriangleFilled(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, ImU32 col) -{ - if ((col & IM_COL32_A_MASK) == 0) - return; - - PathLineTo(p1); - PathLineTo(p2); - PathLineTo(p3); - PathFillConvex(col); -} - -void ImDrawList::AddCircle(const ImVec2& center, float radius, ImU32 col, int num_segments, float thickness) -{ - if ((col & IM_COL32_A_MASK) == 0 || radius <= 0.0f) - return; - - // Obtain segment count - if (num_segments <= 0) - { - // Automatic segment count - const int radius_idx = (int)radius - 1; - if (radius_idx < IM_ARRAYSIZE(_Data->CircleSegmentCounts)) - num_segments = _Data->CircleSegmentCounts[radius_idx]; // Use cached value - else - num_segments = IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC(radius, _Data->CircleSegmentMaxError); - } - else - { - // Explicit segment count (still clamp to avoid drawing insanely tessellated shapes) - num_segments = ImClamp(num_segments, 3, IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MAX); - } - - // Because we are filling a closed shape we remove 1 from the count of segments/points - const float a_max = (IM_PI * 2.0f) * ((float)num_segments - 1.0f) / (float)num_segments; - if (num_segments == 12) - PathArcToFast(center, radius - 0.5f, 0, 12); - else - PathArcTo(center, radius - 0.5f, 0.0f, a_max, num_segments - 1); - PathStroke(col, true, thickness); -} - -void ImDrawList::AddCircleFilled(const ImVec2& center, float radius, ImU32 col, int num_segments) -{ - if ((col & IM_COL32_A_MASK) == 0 || radius <= 0.0f) - return; - - // Obtain segment count - if (num_segments <= 0) - { - // Automatic segment count - const int radius_idx = (int)radius - 1; - if (radius_idx < IM_ARRAYSIZE(_Data->CircleSegmentCounts)) - num_segments = _Data->CircleSegmentCounts[radius_idx]; // Use cached value - else - num_segments = IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC(radius, _Data->CircleSegmentMaxError); - } - else - { - // Explicit segment count (still clamp to avoid drawing insanely tessellated shapes) - num_segments = ImClamp(num_segments, 3, IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MAX); - } - - // Because we are filling a closed shape we remove 1 from the count of segments/points - const float a_max = (IM_PI * 2.0f) * ((float)num_segments - 1.0f) / (float)num_segments; - if (num_segments == 12) - PathArcToFast(center, radius, 0, 12); - else - PathArcTo(center, radius, 0.0f, a_max, num_segments - 1); - PathFillConvex(col); -} - -// Guaranteed to honor 'num_segments' -void ImDrawList::AddNgon(const ImVec2& center, float radius, ImU32 col, int num_segments, float thickness) -{ - if ((col & IM_COL32_A_MASK) == 0 || num_segments <= 2) - return; - - // Because we are filling a closed shape we remove 1 from the count of segments/points - const float a_max = (IM_PI * 2.0f) * ((float)num_segments - 1.0f) / (float)num_segments; - PathArcTo(center, radius - 0.5f, 0.0f, a_max, num_segments - 1); - PathStroke(col, true, thickness); -} - -// Guaranteed to honor 'num_segments' -void ImDrawList::AddNgonFilled(const ImVec2& center, float radius, ImU32 col, int num_segments) -{ - if ((col & IM_COL32_A_MASK) == 0 || num_segments <= 2) - return; - - // Because we are filling a closed shape we remove 1 from the count of segments/points - const float a_max = (IM_PI * 2.0f) * ((float)num_segments - 1.0f) / (float)num_segments; - PathArcTo(center, radius, 0.0f, a_max, num_segments - 1); - PathFillConvex(col); -} - -// Cubic Bezier takes 4 controls points -void ImDrawList::AddBezierCurve(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col, float thickness, int num_segments) -{ - if ((col & IM_COL32_A_MASK) == 0) - return; - - PathLineTo(p1); - PathBezierCurveTo(p2, p3, p4, num_segments); - PathStroke(col, false, thickness); -} - -void ImDrawList::AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end, float wrap_width, const ImVec4* cpu_fine_clip_rect) -{ - if ((col & IM_COL32_A_MASK) == 0) - return; - - if (text_end == NULL) - text_end = text_begin + strlen(text_begin); - if (text_begin == text_end) - return; - - // Pull default font/size from the shared ImDrawListSharedData instance - if (font == NULL) - font = _Data->Font; - if (font_size == 0.0f) - font_size = _Data->FontSize; - - IM_ASSERT(font->ContainerAtlas->TexID == _TextureIdStack.back()); // Use high-level ImGui::PushFont() or low-level ImDrawList::PushTextureId() to change font. - - ImVec4 clip_rect = _ClipRectStack.back(); - if (cpu_fine_clip_rect) - { - clip_rect.x = ImMax(clip_rect.x, cpu_fine_clip_rect->x); - clip_rect.y = ImMax(clip_rect.y, cpu_fine_clip_rect->y); - clip_rect.z = ImMin(clip_rect.z, cpu_fine_clip_rect->z); - clip_rect.w = ImMin(clip_rect.w, cpu_fine_clip_rect->w); - } - font->RenderText(this, font_size, pos, col, clip_rect, text_begin, text_end, wrap_width, cpu_fine_clip_rect != NULL); -} - -void ImDrawList::AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end) -{ - AddText(NULL, 0.0f, pos, col, text_begin, text_end); -} - -void ImDrawList::AddImage(ImTextureID user_texture_id, const ImVec2& p_min, const ImVec2& p_max, const ImVec2& uv_min, const ImVec2& uv_max, ImU32 col) -{ - if ((col & IM_COL32_A_MASK) == 0) - return; - - const bool push_texture_id = _TextureIdStack.empty() || user_texture_id != _TextureIdStack.back(); - if (push_texture_id) - PushTextureID(user_texture_id); - - PrimReserve(6, 4); - PrimRectUV(p_min, p_max, uv_min, uv_max, col); - - if (push_texture_id) - PopTextureID(); -} - -void ImDrawList::AddImageQuad(ImTextureID user_texture_id, const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& uv1, const ImVec2& uv2, const ImVec2& uv3, const ImVec2& uv4, ImU32 col) -{ - if ((col & IM_COL32_A_MASK) == 0) - return; - - const bool push_texture_id = _TextureIdStack.empty() || user_texture_id != _TextureIdStack.back(); - if (push_texture_id) - PushTextureID(user_texture_id); - - PrimReserve(6, 4); - PrimQuadUV(p1, p2, p3, p4, uv1, uv2, uv3, uv4, col); - - if (push_texture_id) - PopTextureID(); -} - -void ImDrawList::AddImageRounded(ImTextureID user_texture_id, const ImVec2& p_min, const ImVec2& p_max, const ImVec2& uv_min, const ImVec2& uv_max, ImU32 col, float rounding, ImDrawCornerFlags rounding_corners) -{ - if ((col & IM_COL32_A_MASK) == 0) - return; - - if (rounding <= 0.0f || (rounding_corners & ImDrawCornerFlags_All) == 0) - { - AddImage(user_texture_id, p_min, p_max, uv_min, uv_max, col); - return; - } - - const bool push_texture_id = _TextureIdStack.empty() || user_texture_id != _TextureIdStack.back(); - if (push_texture_id) - PushTextureID(user_texture_id); - - int vert_start_idx = VtxBuffer.Size; - PathRect(p_min, p_max, rounding, rounding_corners); - PathFillConvex(col); - int vert_end_idx = VtxBuffer.Size; - ImGui::ShadeVertsLinearUV(this, vert_start_idx, vert_end_idx, p_min, p_max, uv_min, uv_max, true); - - if (push_texture_id) - PopTextureID(); -} - - -//----------------------------------------------------------------------------- -// ImDrawListSplitter -//----------------------------------------------------------------------------- -// FIXME: This may be a little confusing, trying to be a little too low-level/optimal instead of just doing vector swap.. -//----------------------------------------------------------------------------- - -void ImDrawListSplitter::ClearFreeMemory() -{ - for (int i = 0; i < _Channels.Size; i++) - { - if (i == _Current) - memset(&_Channels[i], 0, sizeof(_Channels[i])); // Current channel is a copy of CmdBuffer/IdxBuffer, don't destruct again - _Channels[i]._CmdBuffer.clear(); - _Channels[i]._IdxBuffer.clear(); - } - _Current = 0; - _Count = 1; - _Channels.clear(); -} - -void ImDrawListSplitter::Split(ImDrawList* draw_list, int channels_count) -{ - IM_ASSERT(_Current == 0 && _Count <= 1 && "Nested channel splitting is not supported. Please use separate instances of ImDrawListSplitter."); - int old_channels_count = _Channels.Size; - if (old_channels_count < channels_count) - _Channels.resize(channels_count); - _Count = channels_count; - - // Channels[] (24/32 bytes each) hold storage that we'll swap with draw_list->_CmdBuffer/_IdxBuffer - // The content of Channels[0] at this point doesn't matter. We clear it to make state tidy in a debugger but we don't strictly need to. - // When we switch to the next channel, we'll copy draw_list->_CmdBuffer/_IdxBuffer into Channels[0] and then Channels[1] into draw_list->CmdBuffer/_IdxBuffer - memset(&_Channels[0], 0, sizeof(ImDrawChannel)); - for (int i = 1; i < channels_count; i++) - { - if (i >= old_channels_count) - { - IM_PLACEMENT_NEW(&_Channels[i]) ImDrawChannel(); - } - else - { - _Channels[i]._CmdBuffer.resize(0); - _Channels[i]._IdxBuffer.resize(0); - } - if (_Channels[i]._CmdBuffer.Size == 0) - { - ImDrawCmd draw_cmd; - draw_cmd.ClipRect = draw_list->_ClipRectStack.back(); - draw_cmd.TextureId = draw_list->_TextureIdStack.back(); - _Channels[i]._CmdBuffer.push_back(draw_cmd); - } - } -} - -static inline bool CanMergeDrawCommands(ImDrawCmd* a, ImDrawCmd* b) -{ - return memcmp(&a->ClipRect, &b->ClipRect, sizeof(a->ClipRect)) == 0 && a->TextureId == b->TextureId && a->VtxOffset == b->VtxOffset && !a->UserCallback && !b->UserCallback; -} - -void ImDrawListSplitter::Merge(ImDrawList* draw_list) -{ - // Note that we never use or rely on channels.Size because it is merely a buffer that we never shrink back to 0 to keep all sub-buffers ready for use. - if (_Count <= 1) - return; - - SetCurrentChannel(draw_list, 0); - if (draw_list->CmdBuffer.Size != 0 && draw_list->CmdBuffer.back().ElemCount == 0) - draw_list->CmdBuffer.pop_back(); - - // Calculate our final buffer sizes. Also fix the incorrect IdxOffset values in each command. - int new_cmd_buffer_count = 0; - int new_idx_buffer_count = 0; - ImDrawCmd* last_cmd = (_Count > 0 && draw_list->CmdBuffer.Size > 0) ? &draw_list->CmdBuffer.back() : NULL; - int idx_offset = last_cmd ? last_cmd->IdxOffset + last_cmd->ElemCount : 0; - for (int i = 1; i < _Count; i++) - { - ImDrawChannel& ch = _Channels[i]; - if (ch._CmdBuffer.Size > 0 && ch._CmdBuffer.back().ElemCount == 0) - ch._CmdBuffer.pop_back(); - if (ch._CmdBuffer.Size > 0 && last_cmd != NULL && CanMergeDrawCommands(last_cmd, &ch._CmdBuffer[0])) - { - // Merge previous channel last draw command with current channel first draw command if matching. - last_cmd->ElemCount += ch._CmdBuffer[0].ElemCount; - idx_offset += ch._CmdBuffer[0].ElemCount; - ch._CmdBuffer.erase(ch._CmdBuffer.Data); // FIXME-OPT: Improve for multiple merges. - } - if (ch._CmdBuffer.Size > 0) - last_cmd = &ch._CmdBuffer.back(); - new_cmd_buffer_count += ch._CmdBuffer.Size; - new_idx_buffer_count += ch._IdxBuffer.Size; - for (int cmd_n = 0; cmd_n < ch._CmdBuffer.Size; cmd_n++) - { - ch._CmdBuffer.Data[cmd_n].IdxOffset = idx_offset; - idx_offset += ch._CmdBuffer.Data[cmd_n].ElemCount; - } - } - draw_list->CmdBuffer.resize(draw_list->CmdBuffer.Size + new_cmd_buffer_count); - draw_list->IdxBuffer.resize(draw_list->IdxBuffer.Size + new_idx_buffer_count); - - // Write commands and indices in order (they are fairly small structures, we don't copy vertices only indices) - ImDrawCmd* cmd_write = draw_list->CmdBuffer.Data + draw_list->CmdBuffer.Size - new_cmd_buffer_count; - ImDrawIdx* idx_write = draw_list->IdxBuffer.Data + draw_list->IdxBuffer.Size - new_idx_buffer_count; - for (int i = 1; i < _Count; i++) - { - ImDrawChannel& ch = _Channels[i]; - if (int sz = ch._CmdBuffer.Size) { memcpy(cmd_write, ch._CmdBuffer.Data, sz * sizeof(ImDrawCmd)); cmd_write += sz; } - if (int sz = ch._IdxBuffer.Size) { memcpy(idx_write, ch._IdxBuffer.Data, sz * sizeof(ImDrawIdx)); idx_write += sz; } - } - draw_list->_IdxWritePtr = idx_write; - draw_list->UpdateClipRect(); // We call this instead of AddDrawCmd(), so that empty channels won't produce an extra draw call. - draw_list->UpdateTextureID(); - _Count = 1; -} - -void ImDrawListSplitter::SetCurrentChannel(ImDrawList* draw_list, int idx) -{ - IM_ASSERT(idx >= 0 && idx < _Count); - if (_Current == idx) - return; - // Overwrite ImVector (12/16 bytes), four times. This is merely a silly optimization instead of doing .swap() - memcpy(&_Channels.Data[_Current]._CmdBuffer, &draw_list->CmdBuffer, sizeof(draw_list->CmdBuffer)); - memcpy(&_Channels.Data[_Current]._IdxBuffer, &draw_list->IdxBuffer, sizeof(draw_list->IdxBuffer)); - _Current = idx; - memcpy(&draw_list->CmdBuffer, &_Channels.Data[idx]._CmdBuffer, sizeof(draw_list->CmdBuffer)); - memcpy(&draw_list->IdxBuffer, &_Channels.Data[idx]._IdxBuffer, sizeof(draw_list->IdxBuffer)); - draw_list->_IdxWritePtr = draw_list->IdxBuffer.Data + draw_list->IdxBuffer.Size; -} - -//----------------------------------------------------------------------------- -// [SECTION] ImDrawData -//----------------------------------------------------------------------------- - -// For backward compatibility: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! -void ImDrawData::DeIndexAllBuffers() -{ - ImVector new_vtx_buffer; - TotalVtxCount = TotalIdxCount = 0; - for (int i = 0; i < CmdListsCount; i++) - { - ImDrawList* cmd_list = CmdLists[i]; - if (cmd_list->IdxBuffer.empty()) - continue; - new_vtx_buffer.resize(cmd_list->IdxBuffer.Size); - for (int j = 0; j < cmd_list->IdxBuffer.Size; j++) - new_vtx_buffer[j] = cmd_list->VtxBuffer[cmd_list->IdxBuffer[j]]; - cmd_list->VtxBuffer.swap(new_vtx_buffer); - cmd_list->IdxBuffer.resize(0); - TotalVtxCount += cmd_list->VtxBuffer.Size; - } -} - -// Helper to scale the ClipRect field of each ImDrawCmd. -// Use if your final output buffer is at a different scale than draw_data->DisplaySize, -// or if there is a difference between your window resolution and framebuffer resolution. -void ImDrawData::ScaleClipRects(const ImVec2& fb_scale) -{ - for (int i = 0; i < CmdListsCount; i++) - { - ImDrawList* cmd_list = CmdLists[i]; - for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++) - { - ImDrawCmd* cmd = &cmd_list->CmdBuffer[cmd_i]; - cmd->ClipRect = ImVec4(cmd->ClipRect.x * fb_scale.x, cmd->ClipRect.y * fb_scale.y, cmd->ClipRect.z * fb_scale.x, cmd->ClipRect.w * fb_scale.y); - } - } -} - -//----------------------------------------------------------------------------- -// [SECTION] Helpers ShadeVertsXXX functions -//----------------------------------------------------------------------------- - -// Generic linear color gradient, write to RGB fields, leave A untouched. -void ImGui::ShadeVertsLinearColorGradientKeepAlpha(ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, ImVec2 gradient_p0, ImVec2 gradient_p1, ImU32 col0, ImU32 col1) -{ - ImVec2 gradient_extent = gradient_p1 - gradient_p0; - float gradient_inv_length2 = 1.0f / ImLengthSqr(gradient_extent); - ImDrawVert* vert_start = draw_list->VtxBuffer.Data + vert_start_idx; - ImDrawVert* vert_end = draw_list->VtxBuffer.Data + vert_end_idx; - for (ImDrawVert* vert = vert_start; vert < vert_end; vert++) - { - float d = ImDot(vert->pos - gradient_p0, gradient_extent); - float t = ImClamp(d * gradient_inv_length2, 0.0f, 1.0f); - int r = ImLerp((int)(col0 >> IM_COL32_R_SHIFT) & 0xFF, (int)(col1 >> IM_COL32_R_SHIFT) & 0xFF, t); - int g = ImLerp((int)(col0 >> IM_COL32_G_SHIFT) & 0xFF, (int)(col1 >> IM_COL32_G_SHIFT) & 0xFF, t); - int b = ImLerp((int)(col0 >> IM_COL32_B_SHIFT) & 0xFF, (int)(col1 >> IM_COL32_B_SHIFT) & 0xFF, t); - vert->col = (r << IM_COL32_R_SHIFT) | (g << IM_COL32_G_SHIFT) | (b << IM_COL32_B_SHIFT) | (vert->col & IM_COL32_A_MASK); - } -} - -// Distribute UV over (a, b) rectangle -void ImGui::ShadeVertsLinearUV(ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, bool clamp) -{ - const ImVec2 size = b - a; - const ImVec2 uv_size = uv_b - uv_a; - const ImVec2 scale = ImVec2( - size.x != 0.0f ? (uv_size.x / size.x) : 0.0f, - size.y != 0.0f ? (uv_size.y / size.y) : 0.0f); - - ImDrawVert* vert_start = draw_list->VtxBuffer.Data + vert_start_idx; - ImDrawVert* vert_end = draw_list->VtxBuffer.Data + vert_end_idx; - if (clamp) - { - const ImVec2 min = ImMin(uv_a, uv_b); - const ImVec2 max = ImMax(uv_a, uv_b); - for (ImDrawVert* vertex = vert_start; vertex < vert_end; ++vertex) - vertex->uv = ImClamp(uv_a + ImMul(ImVec2(vertex->pos.x, vertex->pos.y) - a, scale), min, max); - } - else - { - for (ImDrawVert* vertex = vert_start; vertex < vert_end; ++vertex) - vertex->uv = uv_a + ImMul(ImVec2(vertex->pos.x, vertex->pos.y) - a, scale); - } -} - -//----------------------------------------------------------------------------- -// [SECTION] ImFontConfig -//----------------------------------------------------------------------------- - -ImFontConfig::ImFontConfig() -{ - FontData = NULL; - FontDataSize = 0; - FontDataOwnedByAtlas = true; - FontNo = 0; - SizePixels = 0.0f; - OversampleH = 3; // FIXME: 2 may be a better default? - OversampleV = 1; - PixelSnapH = false; - GlyphExtraSpacing = ImVec2(0.0f, 0.0f); - GlyphOffset = ImVec2(0.0f, 0.0f); - GlyphRanges = NULL; - GlyphMinAdvanceX = 0.0f; - GlyphMaxAdvanceX = FLT_MAX; - MergeMode = false; - RasterizerFlags = 0x00; - RasterizerMultiply = 1.0f; - EllipsisChar = (ImWchar)-1; - memset(Name, 0, sizeof(Name)); - DstFont = NULL; -} - -//----------------------------------------------------------------------------- -// [SECTION] ImFontAtlas -//----------------------------------------------------------------------------- - -// A work of art lies ahead! (. = white layer, X = black layer, others are blank) -// The white texels on the top left are the ones we'll use everywhere in Dear ImGui to render filled shapes. -const int FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF = 108; -const int FONT_ATLAS_DEFAULT_TEX_DATA_H = 27; -const unsigned int FONT_ATLAS_DEFAULT_TEX_DATA_ID = 0x80000000; -static const char FONT_ATLAS_DEFAULT_TEX_DATA_PIXELS[FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF * FONT_ATLAS_DEFAULT_TEX_DATA_H + 1] = -{ - "..- -XXXXXXX- X - X -XXXXXXX - XXXXXXX- XX " - "..- -X.....X- X.X - X.X -X.....X - X.....X- X..X " - "--- -XXX.XXX- X...X - X...X -X....X - X....X- X..X " - "X - X.X - X.....X - X.....X -X...X - X...X- X..X " - "XX - X.X -X.......X- X.......X -X..X.X - X.X..X- X..X " - "X.X - X.X -XXXX.XXXX- XXXX.XXXX -X.X X.X - X.X X.X- X..XXX " - "X..X - X.X - X.X - X.X -XX X.X - X.X XX- X..X..XXX " - "X...X - X.X - X.X - XX X.X XX - X.X - X.X - X..X..X..XX " - "X....X - X.X - X.X - X.X X.X X.X - X.X - X.X - X..X..X..X.X " - "X.....X - X.X - X.X - X..X X.X X..X - X.X - X.X -XXX X..X..X..X..X" - "X......X - X.X - X.X - X...XXXXXX.XXXXXX...X - X.X XX-XX X.X -X..XX........X..X" - "X.......X - X.X - X.X -X.....................X- X.X X.X-X.X X.X -X...X...........X" - "X........X - X.X - X.X - X...XXXXXX.XXXXXX...X - X.X..X-X..X.X - X..............X" - "X.........X -XXX.XXX- X.X - X..X X.X X..X - X...X-X...X - X.............X" - "X..........X-X.....X- X.X - X.X X.X X.X - X....X-X....X - X.............X" - "X......XXXXX-XXXXXXX- X.X - XX X.X XX - X.....X-X.....X - X............X" - "X...X..X --------- X.X - X.X - XXXXXXX-XXXXXXX - X...........X " - "X..X X..X - -XXXX.XXXX- XXXX.XXXX ------------------------------------- X..........X " - "X.X X..X - -X.......X- X.......X - XX XX - - X..........X " - "XX X..X - - X.....X - X.....X - X.X X.X - - X........X " - " X..X - X...X - X...X - X..X X..X - - X........X " - " XX - X.X - X.X - X...XXXXXXXXXXXXX...X - - XXXXXXXXXX " - "------------ - X - X -X.....................X- ------------------" - " ----------------------------------- X...XXXXXXXXXXXXX...X - " - " - X..X X..X - " - " - X.X X.X - " - " - XX XX - " -}; - -static const ImVec2 FONT_ATLAS_DEFAULT_TEX_CURSOR_DATA[ImGuiMouseCursor_COUNT][3] = -{ - // Pos ........ Size ......... Offset ...... - { ImVec2( 0,3), ImVec2(12,19), ImVec2( 0, 0) }, // ImGuiMouseCursor_Arrow - { ImVec2(13,0), ImVec2( 7,16), ImVec2( 1, 8) }, // ImGuiMouseCursor_TextInput - { ImVec2(31,0), ImVec2(23,23), ImVec2(11,11) }, // ImGuiMouseCursor_ResizeAll - { ImVec2(21,0), ImVec2( 9,23), ImVec2( 4,11) }, // ImGuiMouseCursor_ResizeNS - { ImVec2(55,18),ImVec2(23, 9), ImVec2(11, 4) }, // ImGuiMouseCursor_ResizeEW - { ImVec2(73,0), ImVec2(17,17), ImVec2( 8, 8) }, // ImGuiMouseCursor_ResizeNESW - { ImVec2(55,0), ImVec2(17,17), ImVec2( 8, 8) }, // ImGuiMouseCursor_ResizeNWSE - { ImVec2(91,0), ImVec2(17,22), ImVec2( 5, 0) }, // ImGuiMouseCursor_Hand -}; - -ImFontAtlas::ImFontAtlas() -{ - Locked = false; - Flags = ImFontAtlasFlags_None; - TexID = (ImTextureID)NULL; - TexDesiredWidth = 0; - TexGlyphPadding = 1; - - TexPixelsAlpha8 = NULL; - TexPixelsRGBA32 = NULL; - TexWidth = TexHeight = 0; - TexUvScale = ImVec2(0.0f, 0.0f); - TexUvWhitePixel = ImVec2(0.0f, 0.0f); - for (int n = 0; n < IM_ARRAYSIZE(CustomRectIds); n++) - CustomRectIds[n] = -1; -} - -ImFontAtlas::~ImFontAtlas() -{ - IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!"); - Clear(); -} - -void ImFontAtlas::ClearInputData() -{ - IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!"); - for (int i = 0; i < ConfigData.Size; i++) - if (ConfigData[i].FontData && ConfigData[i].FontDataOwnedByAtlas) - { - IM_FREE(ConfigData[i].FontData); - ConfigData[i].FontData = NULL; - } - - // When clearing this we lose access to the font name and other information used to build the font. - for (int i = 0; i < Fonts.Size; i++) - if (Fonts[i]->ConfigData >= ConfigData.Data && Fonts[i]->ConfigData < ConfigData.Data + ConfigData.Size) - { - Fonts[i]->ConfigData = NULL; - Fonts[i]->ConfigDataCount = 0; - } - ConfigData.clear(); - CustomRects.clear(); - for (int n = 0; n < IM_ARRAYSIZE(CustomRectIds); n++) - CustomRectIds[n] = -1; -} - -void ImFontAtlas::ClearTexData() -{ - IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!"); - if (TexPixelsAlpha8) - IM_FREE(TexPixelsAlpha8); - if (TexPixelsRGBA32) - IM_FREE(TexPixelsRGBA32); - TexPixelsAlpha8 = NULL; - TexPixelsRGBA32 = NULL; -} - -void ImFontAtlas::ClearFonts() -{ - IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!"); - for (int i = 0; i < Fonts.Size; i++) - IM_DELETE(Fonts[i]); - Fonts.clear(); -} - -void ImFontAtlas::Clear() -{ - ClearInputData(); - ClearTexData(); - ClearFonts(); -} - -void ImFontAtlas::GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel) -{ - // Build atlas on demand - if (TexPixelsAlpha8 == NULL) - { - if (ConfigData.empty()) - AddFontDefault(); - Build(); - } - - *out_pixels = TexPixelsAlpha8; - if (out_width) *out_width = TexWidth; - if (out_height) *out_height = TexHeight; - if (out_bytes_per_pixel) *out_bytes_per_pixel = 1; -} - -void ImFontAtlas::GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel) -{ - // Convert to RGBA32 format on demand - // Although it is likely to be the most commonly used format, our font rendering is 1 channel / 8 bpp - if (!TexPixelsRGBA32) - { - unsigned char* pixels = NULL; - GetTexDataAsAlpha8(&pixels, NULL, NULL); - if (pixels) - { - TexPixelsRGBA32 = (unsigned int*)IM_ALLOC((size_t)TexWidth * (size_t)TexHeight * 4); - const unsigned char* src = pixels; - unsigned int* dst = TexPixelsRGBA32; - for (int n = TexWidth * TexHeight; n > 0; n--) - *dst++ = IM_COL32(255, 255, 255, (unsigned int)(*src++)); - } - } - - *out_pixels = (unsigned char*)TexPixelsRGBA32; - if (out_width) *out_width = TexWidth; - if (out_height) *out_height = TexHeight; - if (out_bytes_per_pixel) *out_bytes_per_pixel = 4; -} - -ImFont* ImFontAtlas::AddFont(const ImFontConfig* font_cfg) -{ - IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!"); - IM_ASSERT(font_cfg->FontData != NULL && font_cfg->FontDataSize > 0); - IM_ASSERT(font_cfg->SizePixels > 0.0f); - - // Create new font - if (!font_cfg->MergeMode) - Fonts.push_back(IM_NEW(ImFont)); - else - IM_ASSERT(!Fonts.empty() && "Cannot use MergeMode for the first font"); // When using MergeMode make sure that a font has already been added before. You can use ImGui::GetIO().Fonts->AddFontDefault() to add the default imgui font. - - ConfigData.push_back(*font_cfg); - ImFontConfig& new_font_cfg = ConfigData.back(); - if (new_font_cfg.DstFont == NULL) - new_font_cfg.DstFont = Fonts.back(); - if (!new_font_cfg.FontDataOwnedByAtlas) - { - new_font_cfg.FontData = IM_ALLOC(new_font_cfg.FontDataSize); - new_font_cfg.FontDataOwnedByAtlas = true; - memcpy(new_font_cfg.FontData, font_cfg->FontData, (size_t)new_font_cfg.FontDataSize); - } - - if (new_font_cfg.DstFont->EllipsisChar == (ImWchar)-1) - new_font_cfg.DstFont->EllipsisChar = font_cfg->EllipsisChar; - - // Invalidate texture - ClearTexData(); - return new_font_cfg.DstFont; -} - -// Default font TTF is compressed with stb_compress then base85 encoded (see misc/fonts/binary_to_compressed_c.cpp for encoder) -static unsigned int stb_decompress_length(const unsigned char *input); -static unsigned int stb_decompress(unsigned char *output, const unsigned char *input, unsigned int length); -static const char* GetDefaultCompressedFontDataTTFBase85(); -static unsigned int Decode85Byte(char c) { return c >= '\\' ? c-36 : c-35; } -static void Decode85(const unsigned char* src, unsigned char* dst) -{ - while (*src) - { - unsigned int tmp = Decode85Byte(src[0]) + 85*(Decode85Byte(src[1]) + 85*(Decode85Byte(src[2]) + 85*(Decode85Byte(src[3]) + 85*Decode85Byte(src[4])))); - dst[0] = ((tmp >> 0) & 0xFF); dst[1] = ((tmp >> 8) & 0xFF); dst[2] = ((tmp >> 16) & 0xFF); dst[3] = ((tmp >> 24) & 0xFF); // We can't assume little-endianness. - src += 5; - dst += 4; - } -} - -// Load embedded ProggyClean.ttf at size 13, disable oversampling -ImFont* ImFontAtlas::AddFontDefault(const ImFontConfig* font_cfg_template) -{ - ImFontConfig font_cfg = font_cfg_template ? *font_cfg_template : ImFontConfig(); - if (!font_cfg_template) - { - font_cfg.OversampleH = font_cfg.OversampleV = 1; - font_cfg.PixelSnapH = true; - } - if (font_cfg.SizePixels <= 0.0f) - font_cfg.SizePixels = 13.0f * 1.0f; - if (font_cfg.Name[0] == '\0') - ImFormatString(font_cfg.Name, IM_ARRAYSIZE(font_cfg.Name), "ProggyClean.ttf, %dpx", (int)font_cfg.SizePixels); - font_cfg.EllipsisChar = (ImWchar)0x0085; - - const char* ttf_compressed_base85 = GetDefaultCompressedFontDataTTFBase85(); - const ImWchar* glyph_ranges = font_cfg.GlyphRanges != NULL ? font_cfg.GlyphRanges : GetGlyphRangesDefault(); - ImFont* font = AddFontFromMemoryCompressedBase85TTF(ttf_compressed_base85, font_cfg.SizePixels, &font_cfg, glyph_ranges); - font->DisplayOffset.y = 1.0f; - return font; -} - -ImFont* ImFontAtlas::AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg_template, const ImWchar* glyph_ranges) -{ - IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!"); - size_t data_size = 0; - void* data = ImFileLoadToMemory(filename, "rb", &data_size, 0); - if (!data) - { - IM_ASSERT_USER_ERROR(0, "Could not load font file!"); - return NULL; - } - ImFontConfig font_cfg = font_cfg_template ? *font_cfg_template : ImFontConfig(); - if (font_cfg.Name[0] == '\0') - { - // Store a short copy of filename into into the font name for convenience - const char* p; - for (p = filename + strlen(filename); p > filename && p[-1] != '/' && p[-1] != '\\'; p--) {} - ImFormatString(font_cfg.Name, IM_ARRAYSIZE(font_cfg.Name), "%s, %.0fpx", p, size_pixels); - } - return AddFontFromMemoryTTF(data, (int)data_size, size_pixels, &font_cfg, glyph_ranges); -} - -// NB: Transfer ownership of 'ttf_data' to ImFontAtlas, unless font_cfg_template->FontDataOwnedByAtlas == false. Owned TTF buffer will be deleted after Build(). -ImFont* ImFontAtlas::AddFontFromMemoryTTF(void* ttf_data, int ttf_size, float size_pixels, const ImFontConfig* font_cfg_template, const ImWchar* glyph_ranges) -{ - IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!"); - ImFontConfig font_cfg = font_cfg_template ? *font_cfg_template : ImFontConfig(); - IM_ASSERT(font_cfg.FontData == NULL); - font_cfg.FontData = ttf_data; - font_cfg.FontDataSize = ttf_size; - font_cfg.SizePixels = size_pixels; - if (glyph_ranges) - font_cfg.GlyphRanges = glyph_ranges; - return AddFont(&font_cfg); -} - -ImFont* ImFontAtlas::AddFontFromMemoryCompressedTTF(const void* compressed_ttf_data, int compressed_ttf_size, float size_pixels, const ImFontConfig* font_cfg_template, const ImWchar* glyph_ranges) -{ - const unsigned int buf_decompressed_size = stb_decompress_length((const unsigned char*)compressed_ttf_data); - unsigned char* buf_decompressed_data = (unsigned char *)IM_ALLOC(buf_decompressed_size); - stb_decompress(buf_decompressed_data, (const unsigned char*)compressed_ttf_data, (unsigned int)compressed_ttf_size); - - ImFontConfig font_cfg = font_cfg_template ? *font_cfg_template : ImFontConfig(); - IM_ASSERT(font_cfg.FontData == NULL); - font_cfg.FontDataOwnedByAtlas = true; - return AddFontFromMemoryTTF(buf_decompressed_data, (int)buf_decompressed_size, size_pixels, &font_cfg, glyph_ranges); -} - -ImFont* ImFontAtlas::AddFontFromMemoryCompressedBase85TTF(const char* compressed_ttf_data_base85, float size_pixels, const ImFontConfig* font_cfg, const ImWchar* glyph_ranges) -{ - int compressed_ttf_size = (((int)strlen(compressed_ttf_data_base85) + 4) / 5) * 4; - void* compressed_ttf = IM_ALLOC((size_t)compressed_ttf_size); - Decode85((const unsigned char*)compressed_ttf_data_base85, (unsigned char*)compressed_ttf); - ImFont* font = AddFontFromMemoryCompressedTTF(compressed_ttf, compressed_ttf_size, size_pixels, font_cfg, glyph_ranges); - IM_FREE(compressed_ttf); - return font; -} - -int ImFontAtlas::AddCustomRectRegular(unsigned int id, int width, int height) -{ - // Breaking change on 2019/11/21 (1.74): ImFontAtlas::AddCustomRectRegular() now requires an ID >= 0x110000 (instead of >= 0x10000) - IM_ASSERT(id >= 0x110000); - IM_ASSERT(width > 0 && width <= 0xFFFF); - IM_ASSERT(height > 0 && height <= 0xFFFF); - ImFontAtlasCustomRect r; - r.ID = id; - r.Width = (unsigned short)width; - r.Height = (unsigned short)height; - CustomRects.push_back(r); - return CustomRects.Size - 1; // Return index -} - -int ImFontAtlas::AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset) -{ - IM_ASSERT(font != NULL); - IM_ASSERT(width > 0 && width <= 0xFFFF); - IM_ASSERT(height > 0 && height <= 0xFFFF); - ImFontAtlasCustomRect r; - r.ID = id; - r.Width = (unsigned short)width; - r.Height = (unsigned short)height; - r.GlyphAdvanceX = advance_x; - r.GlyphOffset = offset; - r.Font = font; - CustomRects.push_back(r); - return CustomRects.Size - 1; // Return index -} - -void ImFontAtlas::CalcCustomRectUV(const ImFontAtlasCustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max) const -{ - IM_ASSERT(TexWidth > 0 && TexHeight > 0); // Font atlas needs to be built before we can calculate UV coordinates - IM_ASSERT(rect->IsPacked()); // Make sure the rectangle has been packed - *out_uv_min = ImVec2((float)rect->X * TexUvScale.x, (float)rect->Y * TexUvScale.y); - *out_uv_max = ImVec2((float)(rect->X + rect->Width) * TexUvScale.x, (float)(rect->Y + rect->Height) * TexUvScale.y); -} - -bool ImFontAtlas::GetMouseCursorTexData(ImGuiMouseCursor cursor_type, ImVec2* out_offset, ImVec2* out_size, ImVec2 out_uv_border[2], ImVec2 out_uv_fill[2]) -{ - if (cursor_type <= ImGuiMouseCursor_None || cursor_type >= ImGuiMouseCursor_COUNT) - return false; - if (Flags & ImFontAtlasFlags_NoMouseCursors) - return false; - - IM_ASSERT(CustomRectIds[0] != -1); - ImFontAtlasCustomRect& r = CustomRects[CustomRectIds[0]]; - IM_ASSERT(r.ID == FONT_ATLAS_DEFAULT_TEX_DATA_ID); - ImVec2 pos = FONT_ATLAS_DEFAULT_TEX_CURSOR_DATA[cursor_type][0] + ImVec2((float)r.X, (float)r.Y); - ImVec2 size = FONT_ATLAS_DEFAULT_TEX_CURSOR_DATA[cursor_type][1]; - *out_size = size; - *out_offset = FONT_ATLAS_DEFAULT_TEX_CURSOR_DATA[cursor_type][2]; - out_uv_border[0] = (pos) * TexUvScale; - out_uv_border[1] = (pos + size) * TexUvScale; - pos.x += FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF + 1; - out_uv_fill[0] = (pos) * TexUvScale; - out_uv_fill[1] = (pos + size) * TexUvScale; - return true; -} - -bool ImFontAtlas::Build() -{ - IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!"); - return ImFontAtlasBuildWithStbTruetype(this); -} - -void ImFontAtlasBuildMultiplyCalcLookupTable(unsigned char out_table[256], float in_brighten_factor) -{ - for (unsigned int i = 0; i < 256; i++) - { - unsigned int value = (unsigned int)(i * in_brighten_factor); - out_table[i] = value > 255 ? 255 : (value & 0xFF); - } -} - -void ImFontAtlasBuildMultiplyRectAlpha8(const unsigned char table[256], unsigned char* pixels, int x, int y, int w, int h, int stride) -{ - unsigned char* data = pixels + x + y * stride; - for (int j = h; j > 0; j--, data += stride) - for (int i = 0; i < w; i++) - data[i] = table[data[i]]; -} - -// Temporary data for one source font (multiple source fonts can be merged into one destination ImFont) -// (C++03 doesn't allow instancing ImVector<> with function-local types so we declare the type here.) -struct ImFontBuildSrcData -{ - stbtt_fontinfo FontInfo; - stbtt_pack_range PackRange; // Hold the list of codepoints to pack (essentially points to Codepoints.Data) - stbrp_rect* Rects; // Rectangle to pack. We first fill in their size and the packer will give us their position. - stbtt_packedchar* PackedChars; // Output glyphs - const ImWchar* SrcRanges; // Ranges as requested by user (user is allowed to request too much, e.g. 0x0020..0xFFFF) - int DstIndex; // Index into atlas->Fonts[] and dst_tmp_array[] - int GlyphsHighest; // Highest requested codepoint - int GlyphsCount; // Glyph count (excluding missing glyphs and glyphs already set by an earlier source font) - ImBitVector GlyphsSet; // Glyph bit map (random access, 1-bit per codepoint. This will be a maximum of 8KB) - ImVector GlyphsList; // Glyph codepoints list (flattened version of GlyphsMap) -}; - -// Temporary data for one destination ImFont* (multiple source fonts can be merged into one destination ImFont) -struct ImFontBuildDstData -{ - int SrcCount; // Number of source fonts targeting this destination font. - int GlyphsHighest; - int GlyphsCount; - ImBitVector GlyphsSet; // This is used to resolve collision when multiple sources are merged into a same destination font. -}; - -static void UnpackBitVectorToFlatIndexList(const ImBitVector* in, ImVector* out) -{ - IM_ASSERT(sizeof(in->Storage.Data[0]) == sizeof(int)); - const ImU32* it_begin = in->Storage.begin(); - const ImU32* it_end = in->Storage.end(); - for (const ImU32* it = it_begin; it < it_end; it++) - if (ImU32 entries_32 = *it) - for (ImU32 bit_n = 0; bit_n < 32; bit_n++) - if (entries_32 & ((ImU32)1 << bit_n)) - out->push_back((int)(((it - it_begin) << 5) + bit_n)); -} - -bool ImFontAtlasBuildWithStbTruetype(ImFontAtlas* atlas) -{ - IM_ASSERT(atlas->ConfigData.Size > 0); - - ImFontAtlasBuildInit(atlas); - - // Clear atlas - atlas->TexID = (ImTextureID)NULL; - atlas->TexWidth = atlas->TexHeight = 0; - atlas->TexUvScale = ImVec2(0.0f, 0.0f); - atlas->TexUvWhitePixel = ImVec2(0.0f, 0.0f); - atlas->ClearTexData(); - - // Temporary storage for building - ImVector src_tmp_array; - ImVector dst_tmp_array; - src_tmp_array.resize(atlas->ConfigData.Size); - dst_tmp_array.resize(atlas->Fonts.Size); - memset(src_tmp_array.Data, 0, (size_t)src_tmp_array.size_in_bytes()); - memset(dst_tmp_array.Data, 0, (size_t)dst_tmp_array.size_in_bytes()); - - // 1. Initialize font loading structure, check font data validity - for (int src_i = 0; src_i < atlas->ConfigData.Size; src_i++) - { - ImFontBuildSrcData& src_tmp = src_tmp_array[src_i]; - ImFontConfig& cfg = atlas->ConfigData[src_i]; - IM_ASSERT(cfg.DstFont && (!cfg.DstFont->IsLoaded() || cfg.DstFont->ContainerAtlas == atlas)); - - // Find index from cfg.DstFont (we allow the user to set cfg.DstFont. Also it makes casual debugging nicer than when storing indices) - src_tmp.DstIndex = -1; - for (int output_i = 0; output_i < atlas->Fonts.Size && src_tmp.DstIndex == -1; output_i++) - if (cfg.DstFont == atlas->Fonts[output_i]) - src_tmp.DstIndex = output_i; - IM_ASSERT(src_tmp.DstIndex != -1); // cfg.DstFont not pointing within atlas->Fonts[] array? - if (src_tmp.DstIndex == -1) - return false; - - // Initialize helper structure for font loading and verify that the TTF/OTF data is correct - const int font_offset = stbtt_GetFontOffsetForIndex((unsigned char*)cfg.FontData, cfg.FontNo); - IM_ASSERT(font_offset >= 0 && "FontData is incorrect, or FontNo cannot be found."); - if (!stbtt_InitFont(&src_tmp.FontInfo, (unsigned char*)cfg.FontData, font_offset)) - return false; - - // Measure highest codepoints - ImFontBuildDstData& dst_tmp = dst_tmp_array[src_tmp.DstIndex]; - src_tmp.SrcRanges = cfg.GlyphRanges ? cfg.GlyphRanges : atlas->GetGlyphRangesDefault(); - for (const ImWchar* src_range = src_tmp.SrcRanges; src_range[0] && src_range[1]; src_range += 2) - src_tmp.GlyphsHighest = ImMax(src_tmp.GlyphsHighest, (int)src_range[1]); - dst_tmp.SrcCount++; - dst_tmp.GlyphsHighest = ImMax(dst_tmp.GlyphsHighest, src_tmp.GlyphsHighest); - } - - // 2. For every requested codepoint, check for their presence in the font data, and handle redundancy or overlaps between source fonts to avoid unused glyphs. - int total_glyphs_count = 0; - for (int src_i = 0; src_i < src_tmp_array.Size; src_i++) - { - ImFontBuildSrcData& src_tmp = src_tmp_array[src_i]; - ImFontBuildDstData& dst_tmp = dst_tmp_array[src_tmp.DstIndex]; - src_tmp.GlyphsSet.Create(src_tmp.GlyphsHighest + 1); - if (dst_tmp.GlyphsSet.Storage.empty()) - dst_tmp.GlyphsSet.Create(dst_tmp.GlyphsHighest + 1); - - for (const ImWchar* src_range = src_tmp.SrcRanges; src_range[0] && src_range[1]; src_range += 2) - for (unsigned int codepoint = src_range[0]; codepoint <= src_range[1]; codepoint++) - { - if (dst_tmp.GlyphsSet.TestBit(codepoint)) // Don't overwrite existing glyphs. We could make this an option for MergeMode (e.g. MergeOverwrite==true) - continue; - if (!stbtt_FindGlyphIndex(&src_tmp.FontInfo, codepoint)) // It is actually in the font? - continue; - - // Add to avail set/counters - src_tmp.GlyphsCount++; - dst_tmp.GlyphsCount++; - src_tmp.GlyphsSet.SetBit(codepoint); - dst_tmp.GlyphsSet.SetBit(codepoint); - total_glyphs_count++; - } - } - - // 3. Unpack our bit map into a flat list (we now have all the Unicode points that we know are requested _and_ available _and_ not overlapping another) - for (int src_i = 0; src_i < src_tmp_array.Size; src_i++) - { - ImFontBuildSrcData& src_tmp = src_tmp_array[src_i]; - src_tmp.GlyphsList.reserve(src_tmp.GlyphsCount); - UnpackBitVectorToFlatIndexList(&src_tmp.GlyphsSet, &src_tmp.GlyphsList); - src_tmp.GlyphsSet.Clear(); - IM_ASSERT(src_tmp.GlyphsList.Size == src_tmp.GlyphsCount); - } - for (int dst_i = 0; dst_i < dst_tmp_array.Size; dst_i++) - dst_tmp_array[dst_i].GlyphsSet.Clear(); - dst_tmp_array.clear(); - - // Allocate packing character data and flag packed characters buffer as non-packed (x0=y0=x1=y1=0) - // (We technically don't need to zero-clear buf_rects, but let's do it for the sake of sanity) - ImVector buf_rects; - ImVector buf_packedchars; - buf_rects.resize(total_glyphs_count); - buf_packedchars.resize(total_glyphs_count); - memset(buf_rects.Data, 0, (size_t)buf_rects.size_in_bytes()); - memset(buf_packedchars.Data, 0, (size_t)buf_packedchars.size_in_bytes()); - - // 4. Gather glyphs sizes so we can pack them in our virtual canvas. - int total_surface = 0; - int buf_rects_out_n = 0; - int buf_packedchars_out_n = 0; - for (int src_i = 0; src_i < src_tmp_array.Size; src_i++) - { - ImFontBuildSrcData& src_tmp = src_tmp_array[src_i]; - if (src_tmp.GlyphsCount == 0) - continue; - - src_tmp.Rects = &buf_rects[buf_rects_out_n]; - src_tmp.PackedChars = &buf_packedchars[buf_packedchars_out_n]; - buf_rects_out_n += src_tmp.GlyphsCount; - buf_packedchars_out_n += src_tmp.GlyphsCount; - - // Convert our ranges in the format stb_truetype wants - ImFontConfig& cfg = atlas->ConfigData[src_i]; - src_tmp.PackRange.font_size = cfg.SizePixels; - src_tmp.PackRange.first_unicode_codepoint_in_range = 0; - src_tmp.PackRange.array_of_unicode_codepoints = src_tmp.GlyphsList.Data; - src_tmp.PackRange.num_chars = src_tmp.GlyphsList.Size; - src_tmp.PackRange.chardata_for_range = src_tmp.PackedChars; - src_tmp.PackRange.h_oversample = (unsigned char)cfg.OversampleH; - src_tmp.PackRange.v_oversample = (unsigned char)cfg.OversampleV; - - // Gather the sizes of all rectangles we will need to pack (this loop is based on stbtt_PackFontRangesGatherRects) - const float scale = (cfg.SizePixels > 0) ? stbtt_ScaleForPixelHeight(&src_tmp.FontInfo, cfg.SizePixels) : stbtt_ScaleForMappingEmToPixels(&src_tmp.FontInfo, -cfg.SizePixels); - const int padding = atlas->TexGlyphPadding; - for (int glyph_i = 0; glyph_i < src_tmp.GlyphsList.Size; glyph_i++) - { - int x0, y0, x1, y1; - const int glyph_index_in_font = stbtt_FindGlyphIndex(&src_tmp.FontInfo, src_tmp.GlyphsList[glyph_i]); - IM_ASSERT(glyph_index_in_font != 0); - stbtt_GetGlyphBitmapBoxSubpixel(&src_tmp.FontInfo, glyph_index_in_font, scale * cfg.OversampleH, scale * cfg.OversampleV, 0, 0, &x0, &y0, &x1, &y1); - src_tmp.Rects[glyph_i].w = (stbrp_coord)(x1 - x0 + padding + cfg.OversampleH - 1); - src_tmp.Rects[glyph_i].h = (stbrp_coord)(y1 - y0 + padding + cfg.OversampleV - 1); - total_surface += src_tmp.Rects[glyph_i].w * src_tmp.Rects[glyph_i].h; - } - } - - // We need a width for the skyline algorithm, any width! - // The exact width doesn't really matter much, but some API/GPU have texture size limitations and increasing width can decrease height. - // User can override TexDesiredWidth and TexGlyphPadding if they wish, otherwise we use a simple heuristic to select the width based on expected surface. - const int surface_sqrt = (int)ImSqrt((float)total_surface) + 1; - atlas->TexHeight = 0; - if (atlas->TexDesiredWidth > 0) - atlas->TexWidth = atlas->TexDesiredWidth; - else - atlas->TexWidth = (surface_sqrt >= 4096*0.7f) ? 4096 : (surface_sqrt >= 2048*0.7f) ? 2048 : (surface_sqrt >= 1024*0.7f) ? 1024 : 512; - - // 5. Start packing - // Pack our extra data rectangles first, so it will be on the upper-left corner of our texture (UV will have small values). - const int TEX_HEIGHT_MAX = 1024 * 32; - stbtt_pack_context spc = {}; - stbtt_PackBegin(&spc, NULL, atlas->TexWidth, TEX_HEIGHT_MAX, 0, atlas->TexGlyphPadding, NULL); - ImFontAtlasBuildPackCustomRects(atlas, spc.pack_info); - - // 6. Pack each source font. No rendering yet, we are working with rectangles in an infinitely tall texture at this point. - for (int src_i = 0; src_i < src_tmp_array.Size; src_i++) - { - ImFontBuildSrcData& src_tmp = src_tmp_array[src_i]; - if (src_tmp.GlyphsCount == 0) - continue; - - stbrp_pack_rects((stbrp_context*)spc.pack_info, src_tmp.Rects, src_tmp.GlyphsCount); - - // Extend texture height and mark missing glyphs as non-packed so we won't render them. - // FIXME: We are not handling packing failure here (would happen if we got off TEX_HEIGHT_MAX or if a single if larger than TexWidth?) - for (int glyph_i = 0; glyph_i < src_tmp.GlyphsCount; glyph_i++) - if (src_tmp.Rects[glyph_i].was_packed) - atlas->TexHeight = ImMax(atlas->TexHeight, src_tmp.Rects[glyph_i].y + src_tmp.Rects[glyph_i].h); - } - - // 7. Allocate texture - atlas->TexHeight = (atlas->Flags & ImFontAtlasFlags_NoPowerOfTwoHeight) ? (atlas->TexHeight + 1) : ImUpperPowerOfTwo(atlas->TexHeight); - atlas->TexUvScale = ImVec2(1.0f / atlas->TexWidth, 1.0f / atlas->TexHeight); - atlas->TexPixelsAlpha8 = (unsigned char*)IM_ALLOC(atlas->TexWidth * atlas->TexHeight); - memset(atlas->TexPixelsAlpha8, 0, atlas->TexWidth * atlas->TexHeight); - spc.pixels = atlas->TexPixelsAlpha8; - spc.height = atlas->TexHeight; - - // 8. Render/rasterize font characters into the texture - for (int src_i = 0; src_i < src_tmp_array.Size; src_i++) - { - ImFontConfig& cfg = atlas->ConfigData[src_i]; - ImFontBuildSrcData& src_tmp = src_tmp_array[src_i]; - if (src_tmp.GlyphsCount == 0) - continue; - - stbtt_PackFontRangesRenderIntoRects(&spc, &src_tmp.FontInfo, &src_tmp.PackRange, 1, src_tmp.Rects); - - // Apply multiply operator - if (cfg.RasterizerMultiply != 1.0f) - { - unsigned char multiply_table[256]; - ImFontAtlasBuildMultiplyCalcLookupTable(multiply_table, cfg.RasterizerMultiply); - stbrp_rect* r = &src_tmp.Rects[0]; - for (int glyph_i = 0; glyph_i < src_tmp.GlyphsCount; glyph_i++, r++) - if (r->was_packed) - ImFontAtlasBuildMultiplyRectAlpha8(multiply_table, atlas->TexPixelsAlpha8, r->x, r->y, r->w, r->h, atlas->TexWidth * 1); - } - src_tmp.Rects = NULL; - } - - // End packing - stbtt_PackEnd(&spc); - buf_rects.clear(); - - // 9. Setup ImFont and glyphs for runtime - for (int src_i = 0; src_i < src_tmp_array.Size; src_i++) - { - ImFontBuildSrcData& src_tmp = src_tmp_array[src_i]; - if (src_tmp.GlyphsCount == 0) - continue; - - ImFontConfig& cfg = atlas->ConfigData[src_i]; - ImFont* dst_font = cfg.DstFont; // We can have multiple input fonts writing into a same destination font (when using MergeMode=true) - - const float font_scale = stbtt_ScaleForPixelHeight(&src_tmp.FontInfo, cfg.SizePixels); - int unscaled_ascent, unscaled_descent, unscaled_line_gap; - stbtt_GetFontVMetrics(&src_tmp.FontInfo, &unscaled_ascent, &unscaled_descent, &unscaled_line_gap); - - const float ascent = ImFloor(unscaled_ascent * font_scale + ((unscaled_ascent > 0.0f) ? +1 : -1)); - const float descent = ImFloor(unscaled_descent * font_scale + ((unscaled_descent > 0.0f) ? +1 : -1)); - ImFontAtlasBuildSetupFont(atlas, dst_font, &cfg, ascent, descent); - const float font_off_x = cfg.GlyphOffset.x; - const float font_off_y = cfg.GlyphOffset.y + IM_ROUND(dst_font->Ascent); - - for (int glyph_i = 0; glyph_i < src_tmp.GlyphsCount; glyph_i++) - { - const int codepoint = src_tmp.GlyphsList[glyph_i]; - const stbtt_packedchar& pc = src_tmp.PackedChars[glyph_i]; - - const float char_advance_x_org = pc.xadvance; - const float char_advance_x_mod = ImClamp(char_advance_x_org, cfg.GlyphMinAdvanceX, cfg.GlyphMaxAdvanceX); - float char_off_x = font_off_x; - if (char_advance_x_org != char_advance_x_mod) - char_off_x += cfg.PixelSnapH ? ImFloor((char_advance_x_mod - char_advance_x_org) * 0.5f) : (char_advance_x_mod - char_advance_x_org) * 0.5f; - - // Register glyph - stbtt_aligned_quad q; - float dummy_x = 0.0f, dummy_y = 0.0f; - stbtt_GetPackedQuad(src_tmp.PackedChars, atlas->TexWidth, atlas->TexHeight, glyph_i, &dummy_x, &dummy_y, &q, 0); - dst_font->AddGlyph((ImWchar)codepoint, q.x0 + char_off_x, q.y0 + font_off_y, q.x1 + char_off_x, q.y1 + font_off_y, q.s0, q.t0, q.s1, q.t1, char_advance_x_mod); - } - } - - // Cleanup temporary (ImVector doesn't honor destructor) - for (int src_i = 0; src_i < src_tmp_array.Size; src_i++) - src_tmp_array[src_i].~ImFontBuildSrcData(); - - ImFontAtlasBuildFinish(atlas); - return true; -} - -// Register default custom rectangles (this is called/shared by both the stb_truetype and the FreeType builder) -void ImFontAtlasBuildInit(ImFontAtlas* atlas) -{ - if (atlas->CustomRectIds[0] >= 0) - return; - if (!(atlas->Flags & ImFontAtlasFlags_NoMouseCursors)) - atlas->CustomRectIds[0] = atlas->AddCustomRectRegular(FONT_ATLAS_DEFAULT_TEX_DATA_ID, FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF*2+1, FONT_ATLAS_DEFAULT_TEX_DATA_H); - else - atlas->CustomRectIds[0] = atlas->AddCustomRectRegular(FONT_ATLAS_DEFAULT_TEX_DATA_ID, 2, 2); -} - -void ImFontAtlasBuildSetupFont(ImFontAtlas* atlas, ImFont* font, ImFontConfig* font_config, float ascent, float descent) -{ - if (!font_config->MergeMode) - { - font->ClearOutputData(); - font->FontSize = font_config->SizePixels; - font->ConfigData = font_config; - font->ContainerAtlas = atlas; - font->Ascent = ascent; - font->Descent = descent; - } - font->ConfigDataCount++; -} - -void ImFontAtlasBuildPackCustomRects(ImFontAtlas* atlas, void* stbrp_context_opaque) -{ - stbrp_context* pack_context = (stbrp_context*)stbrp_context_opaque; - IM_ASSERT(pack_context != NULL); - - ImVector& user_rects = atlas->CustomRects; - IM_ASSERT(user_rects.Size >= 1); // We expect at least the default custom rects to be registered, else something went wrong. - - ImVector pack_rects; - pack_rects.resize(user_rects.Size); - memset(pack_rects.Data, 0, (size_t)pack_rects.size_in_bytes()); - for (int i = 0; i < user_rects.Size; i++) - { - pack_rects[i].w = user_rects[i].Width; - pack_rects[i].h = user_rects[i].Height; - } - stbrp_pack_rects(pack_context, &pack_rects[0], pack_rects.Size); - for (int i = 0; i < pack_rects.Size; i++) - if (pack_rects[i].was_packed) - { - user_rects[i].X = pack_rects[i].x; - user_rects[i].Y = pack_rects[i].y; - IM_ASSERT(pack_rects[i].w == user_rects[i].Width && pack_rects[i].h == user_rects[i].Height); - atlas->TexHeight = ImMax(atlas->TexHeight, pack_rects[i].y + pack_rects[i].h); - } -} - -static void ImFontAtlasBuildRenderDefaultTexData(ImFontAtlas* atlas) -{ - IM_ASSERT(atlas->CustomRectIds[0] >= 0); - IM_ASSERT(atlas->TexPixelsAlpha8 != NULL); - ImFontAtlasCustomRect& r = atlas->CustomRects[atlas->CustomRectIds[0]]; - IM_ASSERT(r.ID == FONT_ATLAS_DEFAULT_TEX_DATA_ID); - IM_ASSERT(r.IsPacked()); - - const int w = atlas->TexWidth; - if (!(atlas->Flags & ImFontAtlasFlags_NoMouseCursors)) - { - // Render/copy pixels - IM_ASSERT(r.Width == FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF * 2 + 1 && r.Height == FONT_ATLAS_DEFAULT_TEX_DATA_H); - for (int y = 0, n = 0; y < FONT_ATLAS_DEFAULT_TEX_DATA_H; y++) - for (int x = 0; x < FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF; x++, n++) - { - const int offset0 = (int)(r.X + x) + (int)(r.Y + y) * w; - const int offset1 = offset0 + FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF + 1; - atlas->TexPixelsAlpha8[offset0] = FONT_ATLAS_DEFAULT_TEX_DATA_PIXELS[n] == '.' ? 0xFF : 0x00; - atlas->TexPixelsAlpha8[offset1] = FONT_ATLAS_DEFAULT_TEX_DATA_PIXELS[n] == 'X' ? 0xFF : 0x00; - } - } - else - { - IM_ASSERT(r.Width == 2 && r.Height == 2); - const int offset = (int)(r.X) + (int)(r.Y) * w; - atlas->TexPixelsAlpha8[offset] = atlas->TexPixelsAlpha8[offset + 1] = atlas->TexPixelsAlpha8[offset + w] = atlas->TexPixelsAlpha8[offset + w + 1] = 0xFF; - } - atlas->TexUvWhitePixel = ImVec2((r.X + 0.5f) * atlas->TexUvScale.x, (r.Y + 0.5f) * atlas->TexUvScale.y); -} - -void ImFontAtlasBuildFinish(ImFontAtlas* atlas) -{ - // Render into our custom data block - ImFontAtlasBuildRenderDefaultTexData(atlas); - - // Register custom rectangle glyphs - for (int i = 0; i < atlas->CustomRects.Size; i++) - { - const ImFontAtlasCustomRect& r = atlas->CustomRects[i]; - if (r.Font == NULL || r.ID >= 0x110000) - continue; - - IM_ASSERT(r.Font->ContainerAtlas == atlas); - ImVec2 uv0, uv1; - atlas->CalcCustomRectUV(&r, &uv0, &uv1); - r.Font->AddGlyph((ImWchar)r.ID, r.GlyphOffset.x, r.GlyphOffset.y, r.GlyphOffset.x + r.Width, r.GlyphOffset.y + r.Height, uv0.x, uv0.y, uv1.x, uv1.y, r.GlyphAdvanceX); - } - - // Build all fonts lookup tables - for (int i = 0; i < atlas->Fonts.Size; i++) - if (atlas->Fonts[i]->DirtyLookupTables) - atlas->Fonts[i]->BuildLookupTable(); - - // Ellipsis character is required for rendering elided text. We prefer using U+2026 (horizontal ellipsis). - // However some old fonts may contain ellipsis at U+0085. Here we auto-detect most suitable ellipsis character. - // FIXME: Also note that 0x2026 is currently seldomly included in our font ranges. Because of this we are more likely to use three individual dots. - for (int i = 0; i < atlas->Fonts.size(); i++) - { - ImFont* font = atlas->Fonts[i]; - if (font->EllipsisChar != (ImWchar)-1) - continue; - const ImWchar ellipsis_variants[] = { (ImWchar)0x2026, (ImWchar)0x0085 }; - for (int j = 0; j < IM_ARRAYSIZE(ellipsis_variants); j++) - if (font->FindGlyphNoFallback(ellipsis_variants[j]) != NULL) // Verify glyph exists - { - font->EllipsisChar = ellipsis_variants[j]; - break; - } - } -} - -// Retrieve list of range (2 int per range, values are inclusive) -const ImWchar* ImFontAtlas::GetGlyphRangesDefault() -{ - static const ImWchar ranges[] = - { - 0x0020, 0x00FF, // Basic Latin + Latin Supplement - 0, - }; - return &ranges[0]; -} - -const ImWchar* ImFontAtlas::GetGlyphRangesKorean() -{ - static const ImWchar ranges[] = - { - 0x0020, 0x00FF, // Basic Latin + Latin Supplement - 0x3131, 0x3163, // Korean alphabets - 0xAC00, 0xD79D, // Korean characters - 0, - }; - return &ranges[0]; -} - -const ImWchar* ImFontAtlas::GetGlyphRangesChineseFull() -{ - static const ImWchar ranges[] = - { - 0x0020, 0x00FF, // Basic Latin + Latin Supplement - 0x2000, 0x206F, // General Punctuation - 0x3000, 0x30FF, // CJK Symbols and Punctuations, Hiragana, Katakana - 0x31F0, 0x31FF, // Katakana Phonetic Extensions - 0xFF00, 0xFFEF, // Half-width characters - 0x4e00, 0x9FAF, // CJK Ideograms - 0, - }; - return &ranges[0]; -} - -static void UnpackAccumulativeOffsetsIntoRanges(int base_codepoint, const short* accumulative_offsets, int accumulative_offsets_count, ImWchar* out_ranges) -{ - for (int n = 0; n < accumulative_offsets_count; n++, out_ranges += 2) - { - out_ranges[0] = out_ranges[1] = (ImWchar)(base_codepoint + accumulative_offsets[n]); - base_codepoint += accumulative_offsets[n]; - } - out_ranges[0] = 0; -} - -//------------------------------------------------------------------------- -// [SECTION] ImFontAtlas glyph ranges helpers -//------------------------------------------------------------------------- - -const ImWchar* ImFontAtlas::GetGlyphRangesChineseSimplifiedCommon() -{ - // Store 2500 regularly used characters for Simplified Chinese. - // Sourced from https://zh.wiktionary.org/wiki/%E9%99%84%E5%BD%95:%E7%8E%B0%E4%BB%A3%E6%B1%89%E8%AF%AD%E5%B8%B8%E7%94%A8%E5%AD%97%E8%A1%A8 - // This table covers 97.97% of all characters used during the month in July, 1987. - // You can use ImFontGlyphRangesBuilder to create your own ranges derived from this, by merging existing ranges or adding new characters. - // (Stored as accumulative offsets from the initial unicode codepoint 0x4E00. This encoding is designed to helps us compact the source code size.) - static const short accumulative_offsets_from_0x4E00[] = - { - 0,1,2,4,1,1,1,1,2,1,3,2,1,2,2,1,1,1,1,1,5,2,1,2,3,3,3,2,2,4,1,1,1,2,1,5,2,3,1,2,1,2,1,1,2,1,1,2,2,1,4,1,1,1,1,5,10,1,2,19,2,1,2,1,2,1,2,1,2, - 1,5,1,6,3,2,1,2,2,1,1,1,4,8,5,1,1,4,1,1,3,1,2,1,5,1,2,1,1,1,10,1,1,5,2,4,6,1,4,2,2,2,12,2,1,1,6,1,1,1,4,1,1,4,6,5,1,4,2,2,4,10,7,1,1,4,2,4, - 2,1,4,3,6,10,12,5,7,2,14,2,9,1,1,6,7,10,4,7,13,1,5,4,8,4,1,1,2,28,5,6,1,1,5,2,5,20,2,2,9,8,11,2,9,17,1,8,6,8,27,4,6,9,20,11,27,6,68,2,2,1,1, - 1,2,1,2,2,7,6,11,3,3,1,1,3,1,2,1,1,1,1,1,3,1,1,8,3,4,1,5,7,2,1,4,4,8,4,2,1,2,1,1,4,5,6,3,6,2,12,3,1,3,9,2,4,3,4,1,5,3,3,1,3,7,1,5,1,1,1,1,2, - 3,4,5,2,3,2,6,1,1,2,1,7,1,7,3,4,5,15,2,2,1,5,3,22,19,2,1,1,1,1,2,5,1,1,1,6,1,1,12,8,2,9,18,22,4,1,1,5,1,16,1,2,7,10,15,1,1,6,2,4,1,2,4,1,6, - 1,1,3,2,4,1,6,4,5,1,2,1,1,2,1,10,3,1,3,2,1,9,3,2,5,7,2,19,4,3,6,1,1,1,1,1,4,3,2,1,1,1,2,5,3,1,1,1,2,2,1,1,2,1,1,2,1,3,1,1,1,3,7,1,4,1,1,2,1, - 1,2,1,2,4,4,3,8,1,1,1,2,1,3,5,1,3,1,3,4,6,2,2,14,4,6,6,11,9,1,15,3,1,28,5,2,5,5,3,1,3,4,5,4,6,14,3,2,3,5,21,2,7,20,10,1,2,19,2,4,28,28,2,3, - 2,1,14,4,1,26,28,42,12,40,3,52,79,5,14,17,3,2,2,11,3,4,6,3,1,8,2,23,4,5,8,10,4,2,7,3,5,1,1,6,3,1,2,2,2,5,28,1,1,7,7,20,5,3,29,3,17,26,1,8,4, - 27,3,6,11,23,5,3,4,6,13,24,16,6,5,10,25,35,7,3,2,3,3,14,3,6,2,6,1,4,2,3,8,2,1,1,3,3,3,4,1,1,13,2,2,4,5,2,1,14,14,1,2,2,1,4,5,2,3,1,14,3,12, - 3,17,2,16,5,1,2,1,8,9,3,19,4,2,2,4,17,25,21,20,28,75,1,10,29,103,4,1,2,1,1,4,2,4,1,2,3,24,2,2,2,1,1,2,1,3,8,1,1,1,2,1,1,3,1,1,1,6,1,5,3,1,1, - 1,3,4,1,1,5,2,1,5,6,13,9,16,1,1,1,1,3,2,3,2,4,5,2,5,2,2,3,7,13,7,2,2,1,1,1,1,2,3,3,2,1,6,4,9,2,1,14,2,14,2,1,18,3,4,14,4,11,41,15,23,15,23, - 176,1,3,4,1,1,1,1,5,3,1,2,3,7,3,1,1,2,1,2,4,4,6,2,4,1,9,7,1,10,5,8,16,29,1,1,2,2,3,1,3,5,2,4,5,4,1,1,2,2,3,3,7,1,6,10,1,17,1,44,4,6,2,1,1,6, - 5,4,2,10,1,6,9,2,8,1,24,1,2,13,7,8,8,2,1,4,1,3,1,3,3,5,2,5,10,9,4,9,12,2,1,6,1,10,1,1,7,7,4,10,8,3,1,13,4,3,1,6,1,3,5,2,1,2,17,16,5,2,16,6, - 1,4,2,1,3,3,6,8,5,11,11,1,3,3,2,4,6,10,9,5,7,4,7,4,7,1,1,4,2,1,3,6,8,7,1,6,11,5,5,3,24,9,4,2,7,13,5,1,8,82,16,61,1,1,1,4,2,2,16,10,3,8,1,1, - 6,4,2,1,3,1,1,1,4,3,8,4,2,2,1,1,1,1,1,6,3,5,1,1,4,6,9,2,1,1,1,2,1,7,2,1,6,1,5,4,4,3,1,8,1,3,3,1,3,2,2,2,2,3,1,6,1,2,1,2,1,3,7,1,8,2,1,2,1,5, - 2,5,3,5,10,1,2,1,1,3,2,5,11,3,9,3,5,1,1,5,9,1,2,1,5,7,9,9,8,1,3,3,3,6,8,2,3,2,1,1,32,6,1,2,15,9,3,7,13,1,3,10,13,2,14,1,13,10,2,1,3,10,4,15, - 2,15,15,10,1,3,9,6,9,32,25,26,47,7,3,2,3,1,6,3,4,3,2,8,5,4,1,9,4,2,2,19,10,6,2,3,8,1,2,2,4,2,1,9,4,4,4,6,4,8,9,2,3,1,1,1,1,3,5,5,1,3,8,4,6, - 2,1,4,12,1,5,3,7,13,2,5,8,1,6,1,2,5,14,6,1,5,2,4,8,15,5,1,23,6,62,2,10,1,1,8,1,2,2,10,4,2,2,9,2,1,1,3,2,3,1,5,3,3,2,1,3,8,1,1,1,11,3,1,1,4, - 3,7,1,14,1,2,3,12,5,2,5,1,6,7,5,7,14,11,1,3,1,8,9,12,2,1,11,8,4,4,2,6,10,9,13,1,1,3,1,5,1,3,2,4,4,1,18,2,3,14,11,4,29,4,2,7,1,3,13,9,2,2,5, - 3,5,20,7,16,8,5,72,34,6,4,22,12,12,28,45,36,9,7,39,9,191,1,1,1,4,11,8,4,9,2,3,22,1,1,1,1,4,17,1,7,7,1,11,31,10,2,4,8,2,3,2,1,4,2,16,4,32,2, - 3,19,13,4,9,1,5,2,14,8,1,1,3,6,19,6,5,1,16,6,2,10,8,5,1,2,3,1,5,5,1,11,6,6,1,3,3,2,6,3,8,1,1,4,10,7,5,7,7,5,8,9,2,1,3,4,1,1,3,1,3,3,2,6,16, - 1,4,6,3,1,10,6,1,3,15,2,9,2,10,25,13,9,16,6,2,2,10,11,4,3,9,1,2,6,6,5,4,30,40,1,10,7,12,14,33,6,3,6,7,3,1,3,1,11,14,4,9,5,12,11,49,18,51,31, - 140,31,2,2,1,5,1,8,1,10,1,4,4,3,24,1,10,1,3,6,6,16,3,4,5,2,1,4,2,57,10,6,22,2,22,3,7,22,6,10,11,36,18,16,33,36,2,5,5,1,1,1,4,10,1,4,13,2,7, - 5,2,9,3,4,1,7,43,3,7,3,9,14,7,9,1,11,1,1,3,7,4,18,13,1,14,1,3,6,10,73,2,2,30,6,1,11,18,19,13,22,3,46,42,37,89,7,3,16,34,2,2,3,9,1,7,1,1,1,2, - 2,4,10,7,3,10,3,9,5,28,9,2,6,13,7,3,1,3,10,2,7,2,11,3,6,21,54,85,2,1,4,2,2,1,39,3,21,2,2,5,1,1,1,4,1,1,3,4,15,1,3,2,4,4,2,3,8,2,20,1,8,7,13, - 4,1,26,6,2,9,34,4,21,52,10,4,4,1,5,12,2,11,1,7,2,30,12,44,2,30,1,1,3,6,16,9,17,39,82,2,2,24,7,1,7,3,16,9,14,44,2,1,2,1,2,3,5,2,4,1,6,7,5,3, - 2,6,1,11,5,11,2,1,18,19,8,1,3,24,29,2,1,3,5,2,2,1,13,6,5,1,46,11,3,5,1,1,5,8,2,10,6,12,6,3,7,11,2,4,16,13,2,5,1,1,2,2,5,2,28,5,2,23,10,8,4, - 4,22,39,95,38,8,14,9,5,1,13,5,4,3,13,12,11,1,9,1,27,37,2,5,4,4,63,211,95,2,2,2,1,3,5,2,1,1,2,2,1,1,1,3,2,4,1,2,1,1,5,2,2,1,1,2,3,1,3,1,1,1, - 3,1,4,2,1,3,6,1,1,3,7,15,5,3,2,5,3,9,11,4,2,22,1,6,3,8,7,1,4,28,4,16,3,3,25,4,4,27,27,1,4,1,2,2,7,1,3,5,2,28,8,2,14,1,8,6,16,25,3,3,3,14,3, - 3,1,1,2,1,4,6,3,8,4,1,1,1,2,3,6,10,6,2,3,18,3,2,5,5,4,3,1,5,2,5,4,23,7,6,12,6,4,17,11,9,5,1,1,10,5,12,1,1,11,26,33,7,3,6,1,17,7,1,5,12,1,11, - 2,4,1,8,14,17,23,1,2,1,7,8,16,11,9,6,5,2,6,4,16,2,8,14,1,11,8,9,1,1,1,9,25,4,11,19,7,2,15,2,12,8,52,7,5,19,2,16,4,36,8,1,16,8,24,26,4,6,2,9, - 5,4,36,3,28,12,25,15,37,27,17,12,59,38,5,32,127,1,2,9,17,14,4,1,2,1,1,8,11,50,4,14,2,19,16,4,17,5,4,5,26,12,45,2,23,45,104,30,12,8,3,10,2,2, - 3,3,1,4,20,7,2,9,6,15,2,20,1,3,16,4,11,15,6,134,2,5,59,1,2,2,2,1,9,17,3,26,137,10,211,59,1,2,4,1,4,1,1,1,2,6,2,3,1,1,2,3,2,3,1,3,4,4,2,3,3, - 1,4,3,1,7,2,2,3,1,2,1,3,3,3,2,2,3,2,1,3,14,6,1,3,2,9,6,15,27,9,34,145,1,1,2,1,1,1,1,2,1,1,1,1,2,2,2,3,1,2,1,1,1,2,3,5,8,3,5,2,4,1,3,2,2,2,12, - 4,1,1,1,10,4,5,1,20,4,16,1,15,9,5,12,2,9,2,5,4,2,26,19,7,1,26,4,30,12,15,42,1,6,8,172,1,1,4,2,1,1,11,2,2,4,2,1,2,1,10,8,1,2,1,4,5,1,2,5,1,8, - 4,1,3,4,2,1,6,2,1,3,4,1,2,1,1,1,1,12,5,7,2,4,3,1,1,1,3,3,6,1,2,2,3,3,3,2,1,2,12,14,11,6,6,4,12,2,8,1,7,10,1,35,7,4,13,15,4,3,23,21,28,52,5, - 26,5,6,1,7,10,2,7,53,3,2,1,1,1,2,163,532,1,10,11,1,3,3,4,8,2,8,6,2,2,23,22,4,2,2,4,2,1,3,1,3,3,5,9,8,2,1,2,8,1,10,2,12,21,20,15,105,2,3,1,1, - 3,2,3,1,1,2,5,1,4,15,11,19,1,1,1,1,5,4,5,1,1,2,5,3,5,12,1,2,5,1,11,1,1,15,9,1,4,5,3,26,8,2,1,3,1,1,15,19,2,12,1,2,5,2,7,2,19,2,20,6,26,7,5, - 2,2,7,34,21,13,70,2,128,1,1,2,1,1,2,1,1,3,2,2,2,15,1,4,1,3,4,42,10,6,1,49,85,8,1,2,1,1,4,4,2,3,6,1,5,7,4,3,211,4,1,2,1,2,5,1,2,4,2,2,6,5,6, - 10,3,4,48,100,6,2,16,296,5,27,387,2,2,3,7,16,8,5,38,15,39,21,9,10,3,7,59,13,27,21,47,5,21,6 - }; - static ImWchar base_ranges[] = // not zero-terminated - { - 0x0020, 0x00FF, // Basic Latin + Latin Supplement - 0x2000, 0x206F, // General Punctuation - 0x3000, 0x30FF, // CJK Symbols and Punctuations, Hiragana, Katakana - 0x31F0, 0x31FF, // Katakana Phonetic Extensions - 0xFF00, 0xFFEF // Half-width characters - }; - static ImWchar full_ranges[IM_ARRAYSIZE(base_ranges) + IM_ARRAYSIZE(accumulative_offsets_from_0x4E00) * 2 + 1] = { 0 }; - if (!full_ranges[0]) - { - memcpy(full_ranges, base_ranges, sizeof(base_ranges)); - UnpackAccumulativeOffsetsIntoRanges(0x4E00, accumulative_offsets_from_0x4E00, IM_ARRAYSIZE(accumulative_offsets_from_0x4E00), full_ranges + IM_ARRAYSIZE(base_ranges)); - } - return &full_ranges[0]; -} - -const ImWchar* ImFontAtlas::GetGlyphRangesJapanese() -{ - // 1946 common ideograms code points for Japanese - // Sourced from http://theinstructionlimit.com/common-kanji-character-ranges-for-xna-spritefont-rendering - // FIXME: Source a list of the revised 2136 Joyo Kanji list from 2010 and rebuild this. - // You can use ImFontGlyphRangesBuilder to create your own ranges derived from this, by merging existing ranges or adding new characters. - // (Stored as accumulative offsets from the initial unicode codepoint 0x4E00. This encoding is designed to helps us compact the source code size.) - static const short accumulative_offsets_from_0x4E00[] = - { - 0,1,2,4,1,1,1,1,2,1,6,2,2,1,8,5,7,11,1,2,10,10,8,2,4,20,2,11,8,2,1,2,1,6,2,1,7,5,3,7,1,1,13,7,9,1,4,6,1,2,1,10,1,1,9,2,2,4,5,6,14,1,1,9,3,18, - 5,4,2,2,10,7,1,1,1,3,2,4,3,23,2,10,12,2,14,2,4,13,1,6,10,3,1,7,13,6,4,13,5,2,3,17,2,2,5,7,6,4,1,7,14,16,6,13,9,15,1,1,7,16,4,7,1,19,9,2,7,15, - 2,6,5,13,25,4,14,13,11,25,1,1,1,2,1,2,2,3,10,11,3,3,1,1,4,4,2,1,4,9,1,4,3,5,5,2,7,12,11,15,7,16,4,5,16,2,1,1,6,3,3,1,1,2,7,6,6,7,1,4,7,6,1,1, - 2,1,12,3,3,9,5,8,1,11,1,2,3,18,20,4,1,3,6,1,7,3,5,5,7,2,2,12,3,1,4,2,3,2,3,11,8,7,4,17,1,9,25,1,1,4,2,2,4,1,2,7,1,1,1,3,1,2,6,16,1,2,1,1,3,12, - 20,2,5,20,8,7,6,2,1,1,1,1,6,2,1,2,10,1,1,6,1,3,1,2,1,4,1,12,4,1,3,1,1,1,1,1,10,4,7,5,13,1,15,1,1,30,11,9,1,15,38,14,1,32,17,20,1,9,31,2,21,9, - 4,49,22,2,1,13,1,11,45,35,43,55,12,19,83,1,3,2,3,13,2,1,7,3,18,3,13,8,1,8,18,5,3,7,25,24,9,24,40,3,17,24,2,1,6,2,3,16,15,6,7,3,12,1,9,7,3,3, - 3,15,21,5,16,4,5,12,11,11,3,6,3,2,31,3,2,1,1,23,6,6,1,4,2,6,5,2,1,1,3,3,22,2,6,2,3,17,3,2,4,5,1,9,5,1,1,6,15,12,3,17,2,14,2,8,1,23,16,4,2,23, - 8,15,23,20,12,25,19,47,11,21,65,46,4,3,1,5,6,1,2,5,26,2,1,1,3,11,1,1,1,2,1,2,3,1,1,10,2,3,1,1,1,3,6,3,2,2,6,6,9,2,2,2,6,2,5,10,2,4,1,2,1,2,2, - 3,1,1,3,1,2,9,23,9,2,1,1,1,1,5,3,2,1,10,9,6,1,10,2,31,25,3,7,5,40,1,15,6,17,7,27,180,1,3,2,2,1,1,1,6,3,10,7,1,3,6,17,8,6,2,2,1,3,5,5,8,16,14, - 15,1,1,4,1,2,1,1,1,3,2,7,5,6,2,5,10,1,4,2,9,1,1,11,6,1,44,1,3,7,9,5,1,3,1,1,10,7,1,10,4,2,7,21,15,7,2,5,1,8,3,4,1,3,1,6,1,4,2,1,4,10,8,1,4,5, - 1,5,10,2,7,1,10,1,1,3,4,11,10,29,4,7,3,5,2,3,33,5,2,19,3,1,4,2,6,31,11,1,3,3,3,1,8,10,9,12,11,12,8,3,14,8,6,11,1,4,41,3,1,2,7,13,1,5,6,2,6,12, - 12,22,5,9,4,8,9,9,34,6,24,1,1,20,9,9,3,4,1,7,2,2,2,6,2,28,5,3,6,1,4,6,7,4,2,1,4,2,13,6,4,4,3,1,8,8,3,2,1,5,1,2,2,3,1,11,11,7,3,6,10,8,6,16,16, - 22,7,12,6,21,5,4,6,6,3,6,1,3,2,1,2,8,29,1,10,1,6,13,6,6,19,31,1,13,4,4,22,17,26,33,10,4,15,12,25,6,67,10,2,3,1,6,10,2,6,2,9,1,9,4,4,1,2,16,2, - 5,9,2,3,8,1,8,3,9,4,8,6,4,8,11,3,2,1,1,3,26,1,7,5,1,11,1,5,3,5,2,13,6,39,5,1,5,2,11,6,10,5,1,15,5,3,6,19,21,22,2,4,1,6,1,8,1,4,8,2,4,2,2,9,2, - 1,1,1,4,3,6,3,12,7,1,14,2,4,10,2,13,1,17,7,3,2,1,3,2,13,7,14,12,3,1,29,2,8,9,15,14,9,14,1,3,1,6,5,9,11,3,38,43,20,7,7,8,5,15,12,19,15,81,8,7, - 1,5,73,13,37,28,8,8,1,15,18,20,165,28,1,6,11,8,4,14,7,15,1,3,3,6,4,1,7,14,1,1,11,30,1,5,1,4,14,1,4,2,7,52,2,6,29,3,1,9,1,21,3,5,1,26,3,11,14, - 11,1,17,5,1,2,1,3,2,8,1,2,9,12,1,1,2,3,8,3,24,12,7,7,5,17,3,3,3,1,23,10,4,4,6,3,1,16,17,22,3,10,21,16,16,6,4,10,2,1,1,2,8,8,6,5,3,3,3,39,25, - 15,1,1,16,6,7,25,15,6,6,12,1,22,13,1,4,9,5,12,2,9,1,12,28,8,3,5,10,22,60,1,2,40,4,61,63,4,1,13,12,1,4,31,12,1,14,89,5,16,6,29,14,2,5,49,18,18, - 5,29,33,47,1,17,1,19,12,2,9,7,39,12,3,7,12,39,3,1,46,4,12,3,8,9,5,31,15,18,3,2,2,66,19,13,17,5,3,46,124,13,57,34,2,5,4,5,8,1,1,1,4,3,1,17,5, - 3,5,3,1,8,5,6,3,27,3,26,7,12,7,2,17,3,7,18,78,16,4,36,1,2,1,6,2,1,39,17,7,4,13,4,4,4,1,10,4,2,4,6,3,10,1,19,1,26,2,4,33,2,73,47,7,3,8,2,4,15, - 18,1,29,2,41,14,1,21,16,41,7,39,25,13,44,2,2,10,1,13,7,1,7,3,5,20,4,8,2,49,1,10,6,1,6,7,10,7,11,16,3,12,20,4,10,3,1,2,11,2,28,9,2,4,7,2,15,1, - 27,1,28,17,4,5,10,7,3,24,10,11,6,26,3,2,7,2,2,49,16,10,16,15,4,5,27,61,30,14,38,22,2,7,5,1,3,12,23,24,17,17,3,3,2,4,1,6,2,7,5,1,1,5,1,1,9,4, - 1,3,6,1,8,2,8,4,14,3,5,11,4,1,3,32,1,19,4,1,13,11,5,2,1,8,6,8,1,6,5,13,3,23,11,5,3,16,3,9,10,1,24,3,198,52,4,2,2,5,14,5,4,22,5,20,4,11,6,41, - 1,5,2,2,11,5,2,28,35,8,22,3,18,3,10,7,5,3,4,1,5,3,8,9,3,6,2,16,22,4,5,5,3,3,18,23,2,6,23,5,27,8,1,33,2,12,43,16,5,2,3,6,1,20,4,2,9,7,1,11,2, - 10,3,14,31,9,3,25,18,20,2,5,5,26,14,1,11,17,12,40,19,9,6,31,83,2,7,9,19,78,12,14,21,76,12,113,79,34,4,1,1,61,18,85,10,2,2,13,31,11,50,6,33,159, - 179,6,6,7,4,4,2,4,2,5,8,7,20,32,22,1,3,10,6,7,28,5,10,9,2,77,19,13,2,5,1,4,4,7,4,13,3,9,31,17,3,26,2,6,6,5,4,1,7,11,3,4,2,1,6,2,20,4,1,9,2,6, - 3,7,1,1,1,20,2,3,1,6,2,3,6,2,4,8,1,5,13,8,4,11,23,1,10,6,2,1,3,21,2,2,4,24,31,4,10,10,2,5,192,15,4,16,7,9,51,1,2,1,1,5,1,1,2,1,3,5,3,1,3,4,1, - 3,1,3,3,9,8,1,2,2,2,4,4,18,12,92,2,10,4,3,14,5,25,16,42,4,14,4,2,21,5,126,30,31,2,1,5,13,3,22,5,6,6,20,12,1,14,12,87,3,19,1,8,2,9,9,3,3,23,2, - 3,7,6,3,1,2,3,9,1,3,1,6,3,2,1,3,11,3,1,6,10,3,2,3,1,2,1,5,1,1,11,3,6,4,1,7,2,1,2,5,5,34,4,14,18,4,19,7,5,8,2,6,79,1,5,2,14,8,2,9,2,1,36,28,16, - 4,1,1,1,2,12,6,42,39,16,23,7,15,15,3,2,12,7,21,64,6,9,28,8,12,3,3,41,59,24,51,55,57,294,9,9,2,6,2,15,1,2,13,38,90,9,9,9,3,11,7,1,1,1,5,6,3,2, - 1,2,2,3,8,1,4,4,1,5,7,1,4,3,20,4,9,1,1,1,5,5,17,1,5,2,6,2,4,1,4,5,7,3,18,11,11,32,7,5,4,7,11,127,8,4,3,3,1,10,1,1,6,21,14,1,16,1,7,1,3,6,9,65, - 51,4,3,13,3,10,1,1,12,9,21,110,3,19,24,1,1,10,62,4,1,29,42,78,28,20,18,82,6,3,15,6,84,58,253,15,155,264,15,21,9,14,7,58,40,39, - }; - static ImWchar base_ranges[] = // not zero-terminated - { - 0x0020, 0x00FF, // Basic Latin + Latin Supplement - 0x3000, 0x30FF, // CJK Symbols and Punctuations, Hiragana, Katakana - 0x31F0, 0x31FF, // Katakana Phonetic Extensions - 0xFF00, 0xFFEF // Half-width characters - }; - static ImWchar full_ranges[IM_ARRAYSIZE(base_ranges) + IM_ARRAYSIZE(accumulative_offsets_from_0x4E00)*2 + 1] = { 0 }; - if (!full_ranges[0]) - { - memcpy(full_ranges, base_ranges, sizeof(base_ranges)); - UnpackAccumulativeOffsetsIntoRanges(0x4E00, accumulative_offsets_from_0x4E00, IM_ARRAYSIZE(accumulative_offsets_from_0x4E00), full_ranges + IM_ARRAYSIZE(base_ranges)); - } - return &full_ranges[0]; -} - -const ImWchar* ImFontAtlas::GetGlyphRangesCyrillic() -{ - static const ImWchar ranges[] = - { - 0x0020, 0x00FF, // Basic Latin + Latin Supplement - 0x0400, 0x052F, // Cyrillic + Cyrillic Supplement - 0x2DE0, 0x2DFF, // Cyrillic Extended-A - 0xA640, 0xA69F, // Cyrillic Extended-B - 0, - }; - return &ranges[0]; -} - -const ImWchar* ImFontAtlas::GetGlyphRangesThai() -{ - static const ImWchar ranges[] = - { - 0x0020, 0x00FF, // Basic Latin - 0x2010, 0x205E, // Punctuations - 0x0E00, 0x0E7F, // Thai - 0, - }; - return &ranges[0]; -} - -const ImWchar* ImFontAtlas::GetGlyphRangesVietnamese() -{ - static const ImWchar ranges[] = - { - 0x0020, 0x00FF, // Basic Latin - 0x0102, 0x0103, - 0x0110, 0x0111, - 0x0128, 0x0129, - 0x0168, 0x0169, - 0x01A0, 0x01A1, - 0x01AF, 0x01B0, - 0x1EA0, 0x1EF9, - 0, - }; - return &ranges[0]; -} - -//----------------------------------------------------------------------------- -// [SECTION] ImFontGlyphRangesBuilder -//----------------------------------------------------------------------------- - -void ImFontGlyphRangesBuilder::AddText(const char* text, const char* text_end) -{ - while (text_end ? (text < text_end) : *text) - { - unsigned int c = 0; - int c_len = ImTextCharFromUtf8(&c, text, text_end); - text += c_len; - if (c_len == 0) - break; - AddChar((ImWchar)c); - } -} - -void ImFontGlyphRangesBuilder::AddRanges(const ImWchar* ranges) -{ - for (; ranges[0]; ranges += 2) - for (ImWchar c = ranges[0]; c <= ranges[1]; c++) - AddChar(c); -} - -void ImFontGlyphRangesBuilder::BuildRanges(ImVector* out_ranges) -{ - const int max_codepoint = IM_UNICODE_CODEPOINT_MAX; - for (int n = 0; n <= max_codepoint; n++) - if (GetBit(n)) - { - out_ranges->push_back((ImWchar)n); - while (n < max_codepoint && GetBit(n + 1)) - n++; - out_ranges->push_back((ImWchar)n); - } - out_ranges->push_back(0); -} - -//----------------------------------------------------------------------------- -// [SECTION] ImFont -//----------------------------------------------------------------------------- - -ImFont::ImFont() -{ - FontSize = 0.0f; - FallbackAdvanceX = 0.0f; - FallbackChar = (ImWchar)'?'; - EllipsisChar = (ImWchar)-1; - DisplayOffset = ImVec2(0.0f, 0.0f); - FallbackGlyph = NULL; - ContainerAtlas = NULL; - ConfigData = NULL; - ConfigDataCount = 0; - DirtyLookupTables = false; - Scale = 1.0f; - Ascent = Descent = 0.0f; - MetricsTotalSurface = 0; - memset(Used4kPagesMap, 0, sizeof(Used4kPagesMap)); -} - -ImFont::~ImFont() -{ - ClearOutputData(); -} - -void ImFont::ClearOutputData() -{ - FontSize = 0.0f; - FallbackAdvanceX = 0.0f; - Glyphs.clear(); - IndexAdvanceX.clear(); - IndexLookup.clear(); - FallbackGlyph = NULL; - ContainerAtlas = NULL; - DirtyLookupTables = true; - Ascent = Descent = 0.0f; - MetricsTotalSurface = 0; -} - -void ImFont::BuildLookupTable() -{ - int max_codepoint = 0; - for (int i = 0; i != Glyphs.Size; i++) - max_codepoint = ImMax(max_codepoint, (int)Glyphs[i].Codepoint); - - // Build lookup table - IM_ASSERT(Glyphs.Size < 0xFFFF); // -1 is reserved - IndexAdvanceX.clear(); - IndexLookup.clear(); - DirtyLookupTables = false; - memset(Used4kPagesMap, 0, sizeof(Used4kPagesMap)); - GrowIndex(max_codepoint + 1); - for (int i = 0; i < Glyphs.Size; i++) - { - int codepoint = (int)Glyphs[i].Codepoint; - IndexAdvanceX[codepoint] = Glyphs[i].AdvanceX; - IndexLookup[codepoint] = (ImWchar)i; - - // Mark 4K page as used - const int page_n = codepoint / 4096; - Used4kPagesMap[page_n >> 3] |= 1 << (page_n & 7); - } - - // Create a glyph to handle TAB - // FIXME: Needs proper TAB handling but it needs to be contextualized (or we could arbitrary say that each string starts at "column 0" ?) - if (FindGlyph((ImWchar)' ')) - { - if (Glyphs.back().Codepoint != '\t') // So we can call this function multiple times (FIXME: Flaky) - Glyphs.resize(Glyphs.Size + 1); - ImFontGlyph& tab_glyph = Glyphs.back(); - tab_glyph = *FindGlyph((ImWchar)' '); - tab_glyph.Codepoint = '\t'; - tab_glyph.AdvanceX *= IM_TABSIZE; - IndexAdvanceX[(int)tab_glyph.Codepoint] = (float)tab_glyph.AdvanceX; - IndexLookup[(int)tab_glyph.Codepoint] = (ImWchar)(Glyphs.Size-1); - } - - // Mark special glyphs as not visible (note that AddGlyph already mark as non-visible glyphs with zero-size polygons) - SetGlyphVisible((ImWchar)' ', false); - SetGlyphVisible((ImWchar)'\t', false); - - // Setup fall-backs - FallbackGlyph = FindGlyphNoFallback(FallbackChar); - FallbackAdvanceX = FallbackGlyph ? FallbackGlyph->AdvanceX : 0.0f; - for (int i = 0; i < max_codepoint + 1; i++) - if (IndexAdvanceX[i] < 0.0f) - IndexAdvanceX[i] = FallbackAdvanceX; -} - -// API is designed this way to avoid exposing the 4K page size -// e.g. use with IsGlyphRangeUnused(0, 255) -bool ImFont::IsGlyphRangeUnused(unsigned int c_begin, unsigned int c_last) -{ - unsigned int page_begin = (c_begin / 4096); - unsigned int page_last = (c_last / 4096); - for (unsigned int page_n = page_begin; page_n <= page_last; page_n++) - if ((page_n >> 3) < sizeof(Used4kPagesMap)) - if (Used4kPagesMap[page_n >> 3] & (1 << (page_n & 7))) - return false; - return true; -} - -void ImFont::SetGlyphVisible(ImWchar c, bool visible) -{ - if (ImFontGlyph* glyph = (ImFontGlyph*)(void*)FindGlyph((ImWchar)c)) - glyph->Visible = visible ? 1 : 0; -} - -void ImFont::SetFallbackChar(ImWchar c) -{ - FallbackChar = c; - BuildLookupTable(); -} - -void ImFont::GrowIndex(int new_size) -{ - IM_ASSERT(IndexAdvanceX.Size == IndexLookup.Size); - if (new_size <= IndexLookup.Size) - return; - IndexAdvanceX.resize(new_size, -1.0f); - IndexLookup.resize(new_size, (ImWchar)-1); -} - -// x0/y0/x1/y1 are offset from the character upper-left layout position, in pixels. Therefore x0/y0 are often fairly close to zero. -// Not to be mistaken with texture coordinates, which are held by u0/v0/u1/v1 in normalized format (0.0..1.0 on each texture axis). -void ImFont::AddGlyph(ImWchar codepoint, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x) -{ - Glyphs.resize(Glyphs.Size + 1); - ImFontGlyph& glyph = Glyphs.back(); - glyph.Codepoint = (unsigned int)codepoint; - glyph.Visible = (x0 != x1) && (y0 != y1); - glyph.X0 = x0; - glyph.Y0 = y0; - glyph.X1 = x1; - glyph.Y1 = y1; - glyph.U0 = u0; - glyph.V0 = v0; - glyph.U1 = u1; - glyph.V1 = v1; - glyph.AdvanceX = advance_x + ConfigData->GlyphExtraSpacing.x; // Bake spacing into AdvanceX - - if (ConfigData->PixelSnapH) - glyph.AdvanceX = IM_ROUND(glyph.AdvanceX); - - // Compute rough surface usage metrics (+1 to account for average padding, +0.99 to round) - DirtyLookupTables = true; - MetricsTotalSurface += (int)((glyph.U1 - glyph.U0) * ContainerAtlas->TexWidth + 1.99f) * (int)((glyph.V1 - glyph.V0) * ContainerAtlas->TexHeight + 1.99f); -} - -void ImFont::AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst) -{ - IM_ASSERT(IndexLookup.Size > 0); // Currently this can only be called AFTER the font has been built, aka after calling ImFontAtlas::GetTexDataAs*() function. - unsigned int index_size = (unsigned int)IndexLookup.Size; - - if (dst < index_size && IndexLookup.Data[dst] == (ImWchar)-1 && !overwrite_dst) // 'dst' already exists - return; - if (src >= index_size && dst >= index_size) // both 'dst' and 'src' don't exist -> no-op - return; - - GrowIndex(dst + 1); - IndexLookup[dst] = (src < index_size) ? IndexLookup.Data[src] : (ImWchar)-1; - IndexAdvanceX[dst] = (src < index_size) ? IndexAdvanceX.Data[src] : 1.0f; -} - -const ImFontGlyph* ImFont::FindGlyph(ImWchar c) const -{ - if (c >= (size_t)IndexLookup.Size) - return FallbackGlyph; - const ImWchar i = IndexLookup.Data[c]; - if (i == (ImWchar)-1) - return FallbackGlyph; - return &Glyphs.Data[i]; -} - -const ImFontGlyph* ImFont::FindGlyphNoFallback(ImWchar c) const -{ - if (c >= (size_t)IndexLookup.Size) - return NULL; - const ImWchar i = IndexLookup.Data[c]; - if (i == (ImWchar)-1) - return NULL; - return &Glyphs.Data[i]; -} - -const char* ImFont::CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const -{ - // Simple word-wrapping for English, not full-featured. Please submit failing cases! - // FIXME: Much possible improvements (don't cut things like "word !", "word!!!" but cut within "word,,,,", more sensible support for punctuations, support for Unicode punctuations, etc.) - - // For references, possible wrap point marked with ^ - // "aaa bbb, ccc,ddd. eee fff. ggg!" - // ^ ^ ^ ^ ^__ ^ ^ - - // List of hardcoded separators: .,;!?'" - - // Skip extra blanks after a line returns (that includes not counting them in width computation) - // e.g. "Hello world" --> "Hello" "World" - - // Cut words that cannot possibly fit within one line. - // e.g.: "The tropical fish" with ~5 characters worth of width --> "The tr" "opical" "fish" - - float line_width = 0.0f; - float word_width = 0.0f; - float blank_width = 0.0f; - wrap_width /= scale; // We work with unscaled widths to avoid scaling every characters - - const char* word_end = text; - const char* prev_word_end = NULL; - bool inside_word = true; - - const char* s = text; - while (s < text_end) - { - unsigned int c = (unsigned int)*s; - const char* next_s; - if (c < 0x80) - next_s = s + 1; - else - next_s = s + ImTextCharFromUtf8(&c, s, text_end); - if (c == 0) - break; - - if (c < 32) - { - if (c == '\n') - { - line_width = word_width = blank_width = 0.0f; - inside_word = true; - s = next_s; - continue; - } - if (c == '\r') - { - s = next_s; - continue; - } - } - - const float char_width = ((int)c < IndexAdvanceX.Size ? IndexAdvanceX.Data[c] : FallbackAdvanceX); - if (ImCharIsBlankW(c)) - { - if (inside_word) - { - line_width += blank_width; - blank_width = 0.0f; - word_end = s; - } - blank_width += char_width; - inside_word = false; - } - else - { - word_width += char_width; - if (inside_word) - { - word_end = next_s; - } - else - { - prev_word_end = word_end; - line_width += word_width + blank_width; - word_width = blank_width = 0.0f; - } - - // Allow wrapping after punctuation. - inside_word = !(c == '.' || c == ',' || c == ';' || c == '!' || c == '?' || c == '\"'); - } - - // We ignore blank width at the end of the line (they can be skipped) - if (line_width + word_width > wrap_width) - { - // Words that cannot possibly fit within an entire line will be cut anywhere. - if (word_width < wrap_width) - s = prev_word_end ? prev_word_end : word_end; - break; - } - - s = next_s; - } - - return s; -} - -ImVec2 ImFont::CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end, const char** remaining) const -{ - if (!text_end) - text_end = text_begin + strlen(text_begin); // FIXME-OPT: Need to avoid this. - - const float line_height = size; - const float scale = size / FontSize; - - ImVec2 text_size = ImVec2(0,0); - float line_width = 0.0f; - - const bool word_wrap_enabled = (wrap_width > 0.0f); - const char* word_wrap_eol = NULL; - - const char* s = text_begin; - while (s < text_end) - { - if (word_wrap_enabled) - { - // Calculate how far we can render. Requires two passes on the string data but keeps the code simple and not intrusive for what's essentially an uncommon feature. - if (!word_wrap_eol) - { - word_wrap_eol = CalcWordWrapPositionA(scale, s, text_end, wrap_width - line_width); - if (word_wrap_eol == s) // Wrap_width is too small to fit anything. Force displaying 1 character to minimize the height discontinuity. - word_wrap_eol++; // +1 may not be a character start point in UTF-8 but it's ok because we use s >= word_wrap_eol below - } - - if (s >= word_wrap_eol) - { - if (text_size.x < line_width) - text_size.x = line_width; - text_size.y += line_height; - line_width = 0.0f; - word_wrap_eol = NULL; - - // Wrapping skips upcoming blanks - while (s < text_end) - { - const char c = *s; - if (ImCharIsBlankA(c)) { s++; } else if (c == '\n') { s++; break; } else { break; } - } - continue; - } - } - - // Decode and advance source - const char* prev_s = s; - unsigned int c = (unsigned int)*s; - if (c < 0x80) - { - s += 1; - } - else - { - s += ImTextCharFromUtf8(&c, s, text_end); - if (c == 0) // Malformed UTF-8? - break; - } - - if (c < 32) - { - if (c == '\n') - { - text_size.x = ImMax(text_size.x, line_width); - text_size.y += line_height; - line_width = 0.0f; - continue; - } - if (c == '\r') - continue; - } - - const float char_width = ((int)c < IndexAdvanceX.Size ? IndexAdvanceX.Data[c] : FallbackAdvanceX) * scale; - if (line_width + char_width >= max_width) - { - s = prev_s; - break; - } - - line_width += char_width; - } - - if (text_size.x < line_width) - text_size.x = line_width; - - if (line_width > 0 || text_size.y == 0.0f) - text_size.y += line_height; - - if (remaining) - *remaining = s; - - return text_size; -} - -void ImFont::RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, ImWchar c) const -{ - const ImFontGlyph* glyph = FindGlyph(c); - if (!glyph || !glyph->Visible) - return; - float scale = (size >= 0.0f) ? (size / FontSize) : 1.0f; - pos.x = IM_FLOOR(pos.x + DisplayOffset.x); - pos.y = IM_FLOOR(pos.y + DisplayOffset.y); - draw_list->PrimReserve(6, 4); - draw_list->PrimRectUV(ImVec2(pos.x + glyph->X0 * scale, pos.y + glyph->Y0 * scale), ImVec2(pos.x + glyph->X1 * scale, pos.y + glyph->Y1 * scale), ImVec2(glyph->U0, glyph->V0), ImVec2(glyph->U1, glyph->V1), col); -} - -void ImFont::RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width, bool cpu_fine_clip) const -{ - if (!text_end) - text_end = text_begin + strlen(text_begin); // ImGui:: functions generally already provides a valid text_end, so this is merely to handle direct calls. - - // Align to be pixel perfect - pos.x = IM_FLOOR(pos.x + DisplayOffset.x); - pos.y = IM_FLOOR(pos.y + DisplayOffset.y); - float x = pos.x; - float y = pos.y; - if (y > clip_rect.w) - return; - - const float scale = size / FontSize; - const float line_height = FontSize * scale; - const bool word_wrap_enabled = (wrap_width > 0.0f); - const char* word_wrap_eol = NULL; - - // Fast-forward to first visible line - const char* s = text_begin; - if (y + line_height < clip_rect.y && !word_wrap_enabled) - while (y + line_height < clip_rect.y && s < text_end) - { - s = (const char*)memchr(s, '\n', text_end - s); - s = s ? s + 1 : text_end; - y += line_height; - } - - // For large text, scan for the last visible line in order to avoid over-reserving in the call to PrimReserve() - // Note that very large horizontal line will still be affected by the issue (e.g. a one megabyte string buffer without a newline will likely crash atm) - if (text_end - s > 10000 && !word_wrap_enabled) - { - const char* s_end = s; - float y_end = y; - while (y_end < clip_rect.w && s_end < text_end) - { - s_end = (const char*)memchr(s_end, '\n', text_end - s_end); - s_end = s_end ? s_end + 1 : text_end; - y_end += line_height; - } - text_end = s_end; - } - if (s == text_end) - return; - - // Reserve vertices for remaining worse case (over-reserving is useful and easily amortized) - const int vtx_count_max = (int)(text_end - s) * 4; - const int idx_count_max = (int)(text_end - s) * 6; - const int idx_expected_size = draw_list->IdxBuffer.Size + idx_count_max; - draw_list->PrimReserve(idx_count_max, vtx_count_max); - - ImDrawVert* vtx_write = draw_list->_VtxWritePtr; - ImDrawIdx* idx_write = draw_list->_IdxWritePtr; - unsigned int vtx_current_idx = draw_list->_VtxCurrentIdx; - - while (s < text_end) - { - if (word_wrap_enabled) - { - // Calculate how far we can render. Requires two passes on the string data but keeps the code simple and not intrusive for what's essentially an uncommon feature. - if (!word_wrap_eol) - { - word_wrap_eol = CalcWordWrapPositionA(scale, s, text_end, wrap_width - (x - pos.x)); - if (word_wrap_eol == s) // Wrap_width is too small to fit anything. Force displaying 1 character to minimize the height discontinuity. - word_wrap_eol++; // +1 may not be a character start point in UTF-8 but it's ok because we use s >= word_wrap_eol below - } - - if (s >= word_wrap_eol) - { - x = pos.x; - y += line_height; - word_wrap_eol = NULL; - - // Wrapping skips upcoming blanks - while (s < text_end) - { - const char c = *s; - if (ImCharIsBlankA(c)) { s++; } else if (c == '\n') { s++; break; } else { break; } - } - continue; - } - } - - // Decode and advance source - unsigned int c = (unsigned int)*s; - if (c < 0x80) - { - s += 1; - } - else - { - s += ImTextCharFromUtf8(&c, s, text_end); - if (c == 0) // Malformed UTF-8? - break; - } - - if (c < 32) - { - if (c == '\n') - { - x = pos.x; - y += line_height; - if (y > clip_rect.w) - break; // break out of main loop - continue; - } - if (c == '\r') - continue; - } - - const ImFontGlyph* glyph = FindGlyph((ImWchar)c); - if (glyph == NULL) - continue; - - float char_width = glyph->AdvanceX * scale; - if (glyph->Visible) - { - // We don't do a second finer clipping test on the Y axis as we've already skipped anything before clip_rect.y and exit once we pass clip_rect.w - float x1 = x + glyph->X0 * scale; - float x2 = x + glyph->X1 * scale; - float y1 = y + glyph->Y0 * scale; - float y2 = y + glyph->Y1 * scale; - if (x1 <= clip_rect.z && x2 >= clip_rect.x) - { - // Render a character - float u1 = glyph->U0; - float v1 = glyph->V0; - float u2 = glyph->U1; - float v2 = glyph->V1; - - // CPU side clipping used to fit text in their frame when the frame is too small. Only does clipping for axis aligned quads. - if (cpu_fine_clip) - { - if (x1 < clip_rect.x) - { - u1 = u1 + (1.0f - (x2 - clip_rect.x) / (x2 - x1)) * (u2 - u1); - x1 = clip_rect.x; - } - if (y1 < clip_rect.y) - { - v1 = v1 + (1.0f - (y2 - clip_rect.y) / (y2 - y1)) * (v2 - v1); - y1 = clip_rect.y; - } - if (x2 > clip_rect.z) - { - u2 = u1 + ((clip_rect.z - x1) / (x2 - x1)) * (u2 - u1); - x2 = clip_rect.z; - } - if (y2 > clip_rect.w) - { - v2 = v1 + ((clip_rect.w - y1) / (y2 - y1)) * (v2 - v1); - y2 = clip_rect.w; - } - if (y1 >= y2) - { - x += char_width; - continue; - } - } - - // We are NOT calling PrimRectUV() here because non-inlined causes too much overhead in a debug builds. Inlined here: - { - idx_write[0] = (ImDrawIdx)(vtx_current_idx); idx_write[1] = (ImDrawIdx)(vtx_current_idx+1); idx_write[2] = (ImDrawIdx)(vtx_current_idx+2); - idx_write[3] = (ImDrawIdx)(vtx_current_idx); idx_write[4] = (ImDrawIdx)(vtx_current_idx+2); idx_write[5] = (ImDrawIdx)(vtx_current_idx+3); - vtx_write[0].pos.x = x1; vtx_write[0].pos.y = y1; vtx_write[0].col = col; vtx_write[0].uv.x = u1; vtx_write[0].uv.y = v1; - vtx_write[1].pos.x = x2; vtx_write[1].pos.y = y1; vtx_write[1].col = col; vtx_write[1].uv.x = u2; vtx_write[1].uv.y = v1; - vtx_write[2].pos.x = x2; vtx_write[2].pos.y = y2; vtx_write[2].col = col; vtx_write[2].uv.x = u2; vtx_write[2].uv.y = v2; - vtx_write[3].pos.x = x1; vtx_write[3].pos.y = y2; vtx_write[3].col = col; vtx_write[3].uv.x = u1; vtx_write[3].uv.y = v2; - vtx_write += 4; - vtx_current_idx += 4; - idx_write += 6; - } - } - } - x += char_width; - } - - // Give back unused vertices (clipped ones, blanks) ~ this is essentially a PrimUnreserve() action. - draw_list->VtxBuffer.Size = (int)(vtx_write - draw_list->VtxBuffer.Data); // Same as calling shrink() - draw_list->IdxBuffer.Size = (int)(idx_write - draw_list->IdxBuffer.Data); - draw_list->CmdBuffer[draw_list->CmdBuffer.Size-1].ElemCount -= (idx_expected_size - draw_list->IdxBuffer.Size); - draw_list->_VtxWritePtr = vtx_write; - draw_list->_IdxWritePtr = idx_write; - draw_list->_VtxCurrentIdx = vtx_current_idx; -} - -//----------------------------------------------------------------------------- -// [SECTION] ImGui Internal Render Helpers -//----------------------------------------------------------------------------- -// Vaguely redesigned to stop accessing ImGui global state: -// - RenderArrow() -// - RenderBullet() -// - RenderCheckMark() -// - RenderMouseCursor() -// - RenderArrowPointingAt() -// - RenderRectFilledRangeH() -//----------------------------------------------------------------------------- -// Function in need of a redesign (legacy mess) -// - RenderColorRectWithAlphaCheckerboard() -//----------------------------------------------------------------------------- - -// Render an arrow aimed to be aligned with text (p_min is a position in the same space text would be positioned). To e.g. denote expanded/collapsed state -void ImGui::RenderArrow(ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale) -{ - const float h = draw_list->_Data->FontSize * 1.00f; - float r = h * 0.40f * scale; - ImVec2 center = pos + ImVec2(h * 0.50f, h * 0.50f * scale); - - ImVec2 a, b, c; - switch (dir) - { - case ImGuiDir_Up: - case ImGuiDir_Down: - if (dir == ImGuiDir_Up) r = -r; - a = ImVec2(+0.000f, +0.750f) * r; - b = ImVec2(-0.866f, -0.750f) * r; - c = ImVec2(+0.866f, -0.750f) * r; - break; - case ImGuiDir_Left: - case ImGuiDir_Right: - if (dir == ImGuiDir_Left) r = -r; - a = ImVec2(+0.750f, +0.000f) * r; - b = ImVec2(-0.750f, +0.866f) * r; - c = ImVec2(-0.750f, -0.866f) * r; - break; - case ImGuiDir_None: - case ImGuiDir_COUNT: - IM_ASSERT(0); - break; - } - draw_list->AddTriangleFilled(center + a, center + b, center + c, col); -} - -void ImGui::RenderBullet(ImDrawList* draw_list, ImVec2 pos, ImU32 col) -{ - draw_list->AddCircleFilled(pos, draw_list->_Data->FontSize * 0.20f, col, 8); -} - -void ImGui::RenderCheckMark(ImDrawList* draw_list, ImVec2 pos, ImU32 col, float sz) -{ - float thickness = ImMax(sz / 5.0f, 1.0f); - sz -= thickness * 0.5f; - pos += ImVec2(thickness * 0.25f, thickness * 0.25f); - - float third = sz / 3.0f; - float bx = pos.x + third; - float by = pos.y + sz - third * 0.5f; - draw_list->PathLineTo(ImVec2(bx - third, by - third)); - draw_list->PathLineTo(ImVec2(bx, by)); - draw_list->PathLineTo(ImVec2(bx + third * 2.0f, by - third * 2.0f)); - draw_list->PathStroke(col, false, thickness); -} - -void ImGui::RenderMouseCursor(ImDrawList* draw_list, ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow) -{ - if (mouse_cursor == ImGuiMouseCursor_None) - return; - IM_ASSERT(mouse_cursor > ImGuiMouseCursor_None && mouse_cursor < ImGuiMouseCursor_COUNT); - - ImFontAtlas* font_atlas = draw_list->_Data->Font->ContainerAtlas; - ImVec2 offset, size, uv[4]; - if (font_atlas->GetMouseCursorTexData(mouse_cursor, &offset, &size, &uv[0], &uv[2])) - { - pos -= offset; - const ImTextureID tex_id = font_atlas->TexID; - draw_list->PushTextureID(tex_id); - draw_list->AddImage(tex_id, pos + ImVec2(1,0)*scale, pos + ImVec2(1,0)*scale + size*scale, uv[2], uv[3], col_shadow); - draw_list->AddImage(tex_id, pos + ImVec2(2,0)*scale, pos + ImVec2(2,0)*scale + size*scale, uv[2], uv[3], col_shadow); - draw_list->AddImage(tex_id, pos, pos + size*scale, uv[2], uv[3], col_border); - draw_list->AddImage(tex_id, pos, pos + size*scale, uv[0], uv[1], col_fill); - draw_list->PopTextureID(); - } -} - -// Render an arrow. 'pos' is position of the arrow tip. half_sz.x is length from base to tip. half_sz.y is length on each side. -void ImGui::RenderArrowPointingAt(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, ImGuiDir direction, ImU32 col) -{ - switch (direction) - { - case ImGuiDir_Left: draw_list->AddTriangleFilled(ImVec2(pos.x + half_sz.x, pos.y - half_sz.y), ImVec2(pos.x + half_sz.x, pos.y + half_sz.y), pos, col); return; - case ImGuiDir_Right: draw_list->AddTriangleFilled(ImVec2(pos.x - half_sz.x, pos.y + half_sz.y), ImVec2(pos.x - half_sz.x, pos.y - half_sz.y), pos, col); return; - case ImGuiDir_Up: draw_list->AddTriangleFilled(ImVec2(pos.x + half_sz.x, pos.y + half_sz.y), ImVec2(pos.x - half_sz.x, pos.y + half_sz.y), pos, col); return; - case ImGuiDir_Down: draw_list->AddTriangleFilled(ImVec2(pos.x - half_sz.x, pos.y - half_sz.y), ImVec2(pos.x + half_sz.x, pos.y - half_sz.y), pos, col); return; - case ImGuiDir_None: case ImGuiDir_COUNT: break; // Fix warnings - } -} - -static inline float ImAcos01(float x) -{ - if (x <= 0.0f) return IM_PI * 0.5f; - if (x >= 1.0f) return 0.0f; - return ImAcos(x); - //return (-0.69813170079773212f * x * x - 0.87266462599716477f) * x + 1.5707963267948966f; // Cheap approximation, may be enough for what we do. -} - -// FIXME: Cleanup and move code to ImDrawList. -void ImGui::RenderRectFilledRangeH(ImDrawList* draw_list, const ImRect& rect, ImU32 col, float x_start_norm, float x_end_norm, float rounding) -{ - if (x_end_norm == x_start_norm) - return; - if (x_start_norm > x_end_norm) - ImSwap(x_start_norm, x_end_norm); - - ImVec2 p0 = ImVec2(ImLerp(rect.Min.x, rect.Max.x, x_start_norm), rect.Min.y); - ImVec2 p1 = ImVec2(ImLerp(rect.Min.x, rect.Max.x, x_end_norm), rect.Max.y); - if (rounding == 0.0f) - { - draw_list->AddRectFilled(p0, p1, col, 0.0f); - return; - } - - rounding = ImClamp(ImMin((rect.Max.x - rect.Min.x) * 0.5f, (rect.Max.y - rect.Min.y) * 0.5f) - 1.0f, 0.0f, rounding); - const float inv_rounding = 1.0f / rounding; - const float arc0_b = ImAcos01(1.0f - (p0.x - rect.Min.x) * inv_rounding); - const float arc0_e = ImAcos01(1.0f - (p1.x - rect.Min.x) * inv_rounding); - const float half_pi = IM_PI * 0.5f; // We will == compare to this because we know this is the exact value ImAcos01 can return. - const float x0 = ImMax(p0.x, rect.Min.x + rounding); - if (arc0_b == arc0_e) - { - draw_list->PathLineTo(ImVec2(x0, p1.y)); - draw_list->PathLineTo(ImVec2(x0, p0.y)); - } - else if (arc0_b == 0.0f && arc0_e == half_pi) - { - draw_list->PathArcToFast(ImVec2(x0, p1.y - rounding), rounding, 3, 6); // BL - draw_list->PathArcToFast(ImVec2(x0, p0.y + rounding), rounding, 6, 9); // TR - } - else - { - draw_list->PathArcTo(ImVec2(x0, p1.y - rounding), rounding, IM_PI - arc0_e, IM_PI - arc0_b, 3); // BL - draw_list->PathArcTo(ImVec2(x0, p0.y + rounding), rounding, IM_PI + arc0_b, IM_PI + arc0_e, 3); // TR - } - if (p1.x > rect.Min.x + rounding) - { - const float arc1_b = ImAcos01(1.0f - (rect.Max.x - p1.x) * inv_rounding); - const float arc1_e = ImAcos01(1.0f - (rect.Max.x - p0.x) * inv_rounding); - const float x1 = ImMin(p1.x, rect.Max.x - rounding); - if (arc1_b == arc1_e) - { - draw_list->PathLineTo(ImVec2(x1, p0.y)); - draw_list->PathLineTo(ImVec2(x1, p1.y)); - } - else if (arc1_b == 0.0f && arc1_e == half_pi) - { - draw_list->PathArcToFast(ImVec2(x1, p0.y + rounding), rounding, 9, 12); // TR - draw_list->PathArcToFast(ImVec2(x1, p1.y - rounding), rounding, 0, 3); // BR - } - else - { - draw_list->PathArcTo(ImVec2(x1, p0.y + rounding), rounding, -arc1_e, -arc1_b, 3); // TR - draw_list->PathArcTo(ImVec2(x1, p1.y - rounding), rounding, +arc1_b, +arc1_e, 3); // BR - } - } - draw_list->PathFillConvex(col); -} - -// Helper for ColorPicker4() -// NB: This is rather brittle and will show artifact when rounding this enabled if rounded corners overlap multiple cells. Caller currently responsible for avoiding that. -// Spent a non reasonable amount of time trying to getting this right for ColorButton with rounding+anti-aliasing+ImGuiColorEditFlags_HalfAlphaPreview flag + various grid sizes and offsets, and eventually gave up... probably more reasonable to disable rounding alltogether. -// FIXME: uses ImGui::GetColorU32 -void ImGui::RenderColorRectWithAlphaCheckerboard(ImDrawList* draw_list, ImVec2 p_min, ImVec2 p_max, ImU32 col, float grid_step, ImVec2 grid_off, float rounding, int rounding_corners_flags) -{ - if (((col & IM_COL32_A_MASK) >> IM_COL32_A_SHIFT) < 0xFF) - { - ImU32 col_bg1 = ImGui::GetColorU32(ImAlphaBlendColors(IM_COL32(204, 204, 204, 255), col)); - ImU32 col_bg2 = ImGui::GetColorU32(ImAlphaBlendColors(IM_COL32(128, 128, 128, 255), col)); - draw_list->AddRectFilled(p_min, p_max, col_bg1, rounding, rounding_corners_flags); - - int yi = 0; - for (float y = p_min.y + grid_off.y; y < p_max.y; y += grid_step, yi++) - { - float y1 = ImClamp(y, p_min.y, p_max.y), y2 = ImMin(y + grid_step, p_max.y); - if (y2 <= y1) - continue; - for (float x = p_min.x + grid_off.x + (yi & 1) * grid_step; x < p_max.x; x += grid_step * 2.0f) - { - float x1 = ImClamp(x, p_min.x, p_max.x), x2 = ImMin(x + grid_step, p_max.x); - if (x2 <= x1) - continue; - int rounding_corners_flags_cell = 0; - if (y1 <= p_min.y) { if (x1 <= p_min.x) rounding_corners_flags_cell |= ImDrawCornerFlags_TopLeft; if (x2 >= p_max.x) rounding_corners_flags_cell |= ImDrawCornerFlags_TopRight; } - if (y2 >= p_max.y) { if (x1 <= p_min.x) rounding_corners_flags_cell |= ImDrawCornerFlags_BotLeft; if (x2 >= p_max.x) rounding_corners_flags_cell |= ImDrawCornerFlags_BotRight; } - rounding_corners_flags_cell &= rounding_corners_flags; - draw_list->AddRectFilled(ImVec2(x1, y1), ImVec2(x2, y2), col_bg2, rounding_corners_flags_cell ? rounding : 0.0f, rounding_corners_flags_cell); - } - } - } - else - { - draw_list->AddRectFilled(p_min, p_max, col, rounding, rounding_corners_flags); - } -} - -//----------------------------------------------------------------------------- -// [SECTION] Decompression code -//----------------------------------------------------------------------------- -// Compressed with stb_compress() then converted to a C array and encoded as base85. -// Use the program in misc/fonts/binary_to_compressed_c.cpp to create the array from a TTF file. -// The purpose of encoding as base85 instead of "0x00,0x01,..." style is only save on _source code_ size. -// Decompression from stb.h (public domain) by Sean Barrett https://github.com/nothings/stb/blob/master/stb.h -//----------------------------------------------------------------------------- - -static unsigned int stb_decompress_length(const unsigned char *input) -{ - return (input[8] << 24) + (input[9] << 16) + (input[10] << 8) + input[11]; -} - -static unsigned char *stb__barrier_out_e, *stb__barrier_out_b; -static const unsigned char *stb__barrier_in_b; -static unsigned char *stb__dout; -static void stb__match(const unsigned char *data, unsigned int length) -{ - // INVERSE of memmove... write each byte before copying the next... - IM_ASSERT(stb__dout + length <= stb__barrier_out_e); - if (stb__dout + length > stb__barrier_out_e) { stb__dout += length; return; } - if (data < stb__barrier_out_b) { stb__dout = stb__barrier_out_e+1; return; } - while (length--) *stb__dout++ = *data++; -} - -static void stb__lit(const unsigned char *data, unsigned int length) -{ - IM_ASSERT(stb__dout + length <= stb__barrier_out_e); - if (stb__dout + length > stb__barrier_out_e) { stb__dout += length; return; } - if (data < stb__barrier_in_b) { stb__dout = stb__barrier_out_e+1; return; } - memcpy(stb__dout, data, length); - stb__dout += length; -} - -#define stb__in2(x) ((i[x] << 8) + i[(x)+1]) -#define stb__in3(x) ((i[x] << 16) + stb__in2((x)+1)) -#define stb__in4(x) ((i[x] << 24) + stb__in3((x)+1)) - -static const unsigned char *stb_decompress_token(const unsigned char *i) -{ - if (*i >= 0x20) { // use fewer if's for cases that expand small - if (*i >= 0x80) stb__match(stb__dout-i[1]-1, i[0] - 0x80 + 1), i += 2; - else if (*i >= 0x40) stb__match(stb__dout-(stb__in2(0) - 0x4000 + 1), i[2]+1), i += 3; - else /* *i >= 0x20 */ stb__lit(i+1, i[0] - 0x20 + 1), i += 1 + (i[0] - 0x20 + 1); - } else { // more ifs for cases that expand large, since overhead is amortized - if (*i >= 0x18) stb__match(stb__dout-(stb__in3(0) - 0x180000 + 1), i[3]+1), i += 4; - else if (*i >= 0x10) stb__match(stb__dout-(stb__in3(0) - 0x100000 + 1), stb__in2(3)+1), i += 5; - else if (*i >= 0x08) stb__lit(i+2, stb__in2(0) - 0x0800 + 1), i += 2 + (stb__in2(0) - 0x0800 + 1); - else if (*i == 0x07) stb__lit(i+3, stb__in2(1) + 1), i += 3 + (stb__in2(1) + 1); - else if (*i == 0x06) stb__match(stb__dout-(stb__in3(1)+1), i[4]+1), i += 5; - else if (*i == 0x04) stb__match(stb__dout-(stb__in3(1)+1), stb__in2(4)+1), i += 6; - } - return i; -} - -static unsigned int stb_adler32(unsigned int adler32, unsigned char *buffer, unsigned int buflen) -{ - const unsigned long ADLER_MOD = 65521; - unsigned long s1 = adler32 & 0xffff, s2 = adler32 >> 16; - unsigned long blocklen = buflen % 5552; - - unsigned long i; - while (buflen) { - for (i=0; i + 7 < blocklen; i += 8) { - s1 += buffer[0], s2 += s1; - s1 += buffer[1], s2 += s1; - s1 += buffer[2], s2 += s1; - s1 += buffer[3], s2 += s1; - s1 += buffer[4], s2 += s1; - s1 += buffer[5], s2 += s1; - s1 += buffer[6], s2 += s1; - s1 += buffer[7], s2 += s1; - - buffer += 8; - } - - for (; i < blocklen; ++i) - s1 += *buffer++, s2 += s1; - - s1 %= ADLER_MOD, s2 %= ADLER_MOD; - buflen -= blocklen; - blocklen = 5552; - } - return (unsigned int)(s2 << 16) + (unsigned int)s1; -} - -static unsigned int stb_decompress(unsigned char *output, const unsigned char *i, unsigned int /*length*/) -{ - if (stb__in4(0) != 0x57bC0000) return 0; - if (stb__in4(4) != 0) return 0; // error! stream is > 4GB - const unsigned int olen = stb_decompress_length(i); - stb__barrier_in_b = i; - stb__barrier_out_e = output + olen; - stb__barrier_out_b = output; - i += 16; - - stb__dout = output; - for (;;) { - const unsigned char *old_i = i; - i = stb_decompress_token(i); - if (i == old_i) { - if (*i == 0x05 && i[1] == 0xfa) { - IM_ASSERT(stb__dout == output + olen); - if (stb__dout != output + olen) return 0; - if (stb_adler32(1, output, olen) != (unsigned int) stb__in4(2)) - return 0; - return olen; - } else { - IM_ASSERT(0); /* NOTREACHED */ - return 0; - } - } - IM_ASSERT(stb__dout <= output + olen); - if (stb__dout > output + olen) - return 0; - } -} - -//----------------------------------------------------------------------------- -// [SECTION] Default font data (ProggyClean.ttf) -//----------------------------------------------------------------------------- -// ProggyClean.ttf -// Copyright (c) 2004, 2005 Tristan Grimmer -// MIT license (see License.txt in http://www.upperbounds.net/download/ProggyClean.ttf.zip) -// Download and more information at http://upperbounds.net -//----------------------------------------------------------------------------- -// File: 'ProggyClean.ttf' (41208 bytes) -// Exported using misc/fonts/binary_to_compressed_c.cpp (with compression + base85 string encoding). -// The purpose of encoding as base85 instead of "0x00,0x01,..." style is only save on _source code_ size. -//----------------------------------------------------------------------------- -static const char proggy_clean_ttf_compressed_data_base85[11980+1] = - "7])#######hV0qs'/###[),##/l:$#Q6>##5[n42>c-TH`->>#/e>11NNV=Bv(*:.F?uu#(gRU.o0XGH`$vhLG1hxt9?W`#,5LsCp#-i>.r$<$6pD>Lb';9Crc6tgXmKVeU2cD4Eo3R/" - "2*>]b(MC;$jPfY.;h^`IWM9Qo#t'X#(v#Y9w0#1D$CIf;W'#pWUPXOuxXuU(H9M(1=Ke$$'5F%)]0^#0X@U.a$FBjVQTSDgEKnIS7EM9>ZY9w0#L;>>#Mx&4Mvt//L[MkA#W@lK.N'[0#7RL_&#w+F%HtG9M#XL`N&.,GM4Pg;--VsM.M0rJfLH2eTM`*oJMHRC`N" - "kfimM2J,W-jXS:)r0wK#@Fge$U>`w'N7G#$#fB#$E^$#:9:hk+eOe--6x)F7*E%?76%^GMHePW-Z5l'&GiF#$956:rS?dA#fiK:)Yr+`�j@'DbG&#^$PG.Ll+DNa&VZ>1i%h1S9u5o@YaaW$e+bROPOpxTO7Stwi1::iB1q)C_=dV26J;2,]7op$]uQr@_V7$q^%lQwtuHY]=DX,n3L#0PHDO4f9>dC@O>HBuKPpP*E,N+b3L#lpR/MrTEH.IAQk.a>D[.e;mc." - "x]Ip.PH^'/aqUO/$1WxLoW0[iLAw=4h(9.`G" - "CRUxHPeR`5Mjol(dUWxZa(>STrPkrJiWx`5U7F#.g*jrohGg`cg:lSTvEY/EV_7H4Q9[Z%cnv;JQYZ5q.l7Zeas:HOIZOB?Ggv:[7MI2k).'2($5FNP&EQ(,)" - "U]W]+fh18.vsai00);D3@4ku5P?DP8aJt+;qUM]=+b'8@;mViBKx0DE[-auGl8:PJ&Dj+M6OC]O^((##]`0i)drT;-7X`=-H3[igUnPG-NZlo.#k@h#=Ork$m>a>$-?Tm$UV(?#P6YY#" - "'/###xe7q.73rI3*pP/$1>s9)W,JrM7SN]'/4C#v$U`0#V.[0>xQsH$fEmPMgY2u7Kh(G%siIfLSoS+MK2eTM$=5,M8p`A.;_R%#u[K#$x4AG8.kK/HSB==-'Ie/QTtG?-.*^N-4B/ZM" - "_3YlQC7(p7q)&](`6_c)$/*JL(L-^(]$wIM`dPtOdGA,U3:w2M-0+WomX2u7lqM2iEumMTcsF?-aT=Z-97UEnXglEn1K-bnEO`gu" - "Ft(c%=;Am_Qs@jLooI&NX;]0#j4#F14;gl8-GQpgwhrq8'=l_f-b49'UOqkLu7-##oDY2L(te+Mch&gLYtJ,MEtJfLh'x'M=$CS-ZZ%P]8bZ>#S?YY#%Q&q'3^Fw&?D)UDNrocM3A76/" - "/oL?#h7gl85[qW/NDOk%16ij;+:1a'iNIdb-ou8.P*w,v5#EI$TWS>Pot-R*H'-SEpA:g)f+O$%%`kA#G=8RMmG1&O`>to8bC]T&$,n.LoO>29sp3dt-52U%VM#q7'DHpg+#Z9%H[Ket`e;)f#Km8&+DC$I46>#Kr]]u-[=99tts1.qb#q72g1WJO81q+eN'03'eM>&1XxY-caEnO" - "j%2n8)),?ILR5^.Ibn<-X-Mq7[a82Lq:F&#ce+S9wsCK*x`569E8ew'He]h:sI[2LM$[guka3ZRd6:t%IG:;$%YiJ:Nq=?eAw;/:nnDq0(CYcMpG)qLN4$##&J-XTt,%OVU4)S1+R-#dg0/Nn?Ku1^0f$B*P:Rowwm-`0PKjYDDM'3]d39VZHEl4,.j']Pk-M.h^&:0FACm$maq-&sgw0t7/6(^xtk%" - "LuH88Fj-ekm>GA#_>568x6(OFRl-IZp`&b,_P'$MhLbxfc$mj`,O;&%W2m`Zh:/)Uetw:aJ%]K9h:TcF]u_-Sj9,VK3M.*'&0D[Ca]J9gp8,kAW]" - "%(?A%R$f<->Zts'^kn=-^@c4%-pY6qI%J%1IGxfLU9CP8cbPlXv);C=b),<2mOvP8up,UVf3839acAWAW-W?#ao/^#%KYo8fRULNd2.>%m]UK:n%r$'sw]J;5pAoO_#2mO3n,'=H5(et" - "Hg*`+RLgv>=4U8guD$I%D:W>-r5V*%j*W:Kvej.Lp$'?;++O'>()jLR-^u68PHm8ZFWe+ej8h:9r6L*0//c&iH&R8pRbA#Kjm%upV1g:" - "a_#Ur7FuA#(tRh#.Y5K+@?3<-8m0$PEn;J:rh6?I6uG<-`wMU'ircp0LaE_OtlMb&1#6T.#FDKu#1Lw%u%+GM+X'e?YLfjM[VO0MbuFp7;>Q&#WIo)0@F%q7c#4XAXN-U&VBpqB>0ie&jhZ[?iLR@@_AvA-iQC(=ksRZRVp7`.=+NpBC%rh&3]R:8XDmE5^V8O(x<-+k?'(^](H.aREZSi,#1:[IXaZFOm<-ui#qUq2$##Ri;u75OK#(RtaW-K-F`S+cF]uN`-KMQ%rP/Xri.LRcB##=YL3BgM/3M" - "D?@f&1'BW-)Ju#bmmWCMkk&#TR`C,5d>g)F;t,4:@_l8G/5h4vUd%&%950:VXD'QdWoY-F$BtUwmfe$YqL'8(PWX(" - "P?^@Po3$##`MSs?DWBZ/S>+4%>fX,VWv/w'KD`LP5IbH;rTV>n3cEK8U#bX]l-/V+^lj3;vlMb&[5YQ8#pekX9JP3XUC72L,,?+Ni&co7ApnO*5NK,((W-i:$,kp'UDAO(G0Sq7MVjJs" - "bIu)'Z,*[>br5fX^:FPAWr-m2KgLQ_nN6'8uTGT5g)uLv:873UpTLgH+#FgpH'_o1780Ph8KmxQJ8#H72L4@768@Tm&Q" - "h4CB/5OvmA&,Q&QbUoi$a_%3M01H)4x7I^&KQVgtFnV+;[Pc>[m4k//,]1?#`VY[Jr*3&&slRfLiVZJ:]?=K3Sw=[$=uRB?3xk48@aege0jT6'N#(q%.O=?2S]u*(m<-" - "V8J'(1)G][68hW$5'q[GC&5j`TE?m'esFGNRM)j,ffZ?-qx8;->g4t*:CIP/[Qap7/9'#(1sao7w-.qNUdkJ)tCF&#B^;xGvn2r9FEPFFFcL@.iFNkTve$m%#QvQS8U@)2Z+3K:AKM5i" - "sZ88+dKQ)W6>J%CL`.d*(B`-n8D9oK-XV1q['-5k'cAZ69e;D_?$ZPP&s^+7])$*$#@QYi9,5P r+$%CE=68>K8r0=dSC%%(@p7" - ".m7jilQ02'0-VWAgTlGW'b)Tq7VT9q^*^$$.:&N@@" - "$&)WHtPm*5_rO0&e%K&#-30j(E4#'Zb.o/(Tpm$>K'f@[PvFl,hfINTNU6u'0pao7%XUp9]5.>%h`8_=VYbxuel.NTSsJfLacFu3B'lQSu/m6-Oqem8T+oE--$0a/k]uj9EwsG>%veR*" - "hv^BFpQj:K'#SJ,sB-'#](j.Lg92rTw-*n%@/;39rrJF,l#qV%OrtBeC6/,;qB3ebNW[?,Hqj2L.1NP&GjUR=1D8QaS3Up&@*9wP?+lo7b?@%'k4`p0Z$22%K3+iCZj?XJN4Nm&+YF]u" - "@-W$U%VEQ/,,>>#)D#%8cY#YZ?=,`Wdxu/ae&#" - "w6)R89tI#6@s'(6Bf7a&?S=^ZI_kS&ai`&=tE72L_D,;^R)7[$so8lKN%5/$(vdfq7+ebA#" - "u1p]ovUKW&Y%q]'>$1@-[xfn$7ZTp7mM,G,Ko7a&Gu%G[RMxJs[0MM%wci.LFDK)(%:_i2B5CsR8&9Z&#=mPEnm0f`<&c)QL5uJ#%u%lJj+D-r;BoFDoS97h5g)E#o:&S4weDF,9^Hoe`h*L+_a*NrLW-1pG_&2UdB8" - "6e%B/:=>)N4xeW.*wft-;$'58-ESqr#U`'6AQ]m&6/`Z>#S?YY#Vc;r7U2&326d=w&H####?TZ`*4?&.MK?LP8Vxg>$[QXc%QJv92.(Db*B)gb*BM9dM*hJMAo*c&#" - "b0v=Pjer]$gG&JXDf->'StvU7505l9$AFvgYRI^&<^b68?j#q9QX4SM'RO#&sL1IM.rJfLUAj221]d##DW=m83u5;'bYx,*Sl0hL(W;;$doB&O/TQ:(Z^xBdLjLV#*8U_72Lh+2Q8Cj0i:6hp&$C/:p(HK>T8Y[gHQ4`4)'$Ab(Nof%V'8hL&#SfD07&6D@M.*J:;$-rv29'M]8qMv-tLp,'886iaC=Hb*YJoKJ,(j%K=H`K.v9HggqBIiZu'QvBT.#=)0ukruV&.)3=(^1`o*Pj4<-#MJ+gLq9-##@HuZPN0]u:h7.T..G:;$/Usj(T7`Q8tT72LnYl<-qx8;-HV7Q-&Xdx%1a,hC=0u+HlsV>nuIQL-5" - "_>@kXQtMacfD.m-VAb8;IReM3$wf0''hra*so568'Ip&vRs849'MRYSp%:t:h5qSgwpEr$B>Q,;s(C#$)`svQuF$##-D,##,g68@2[T;.XSdN9Qe)rpt._K-#5wF)sP'##p#C0c%-Gb%" - "hd+<-j'Ai*x&&HMkT]C'OSl##5RG[JXaHN;d'uA#x._U;.`PU@(Z3dt4r152@:v,'R.Sj'w#0<-;kPI)FfJ&#AYJ&#//)>-k=m=*XnK$>=)72L]0I%>.G690a:$##<,);?;72#?x9+d;" - "^V'9;jY@;)br#q^YQpx:X#Te$Z^'=-=bGhLf:D6&bNwZ9-ZD#n^9HhLMr5G;']d&6'wYmTFmLq9wI>P(9mI[>kC-ekLC/R&CH+s'B;K-M6$EB%is00:" - "+A4[7xks.LrNk0&E)wILYF@2L'0Nb$+pv<(2.768/FrY&h$^3i&@+G%JT'<-,v`3;_)I9M^AE]CN?Cl2AZg+%4iTpT3$U4O]GKx'm9)b@p7YsvK3w^YR-" - "CdQ*:Ir<($u&)#(&?L9Rg3H)4fiEp^iI9O8KnTj,]H?D*r7'M;PwZ9K0E^k&-cpI;.p/6_vwoFMV<->#%Xi.LxVnrU(4&8/P+:hLSKj$#U%]49t'I:rgMi'FL@a:0Y-uA[39',(vbma*" - "hU%<-SRF`Tt:542R_VV$p@[p8DV[A,?1839FWdFTi1O*H&#(AL8[_P%.M>v^-))qOT*F5Cq0`Ye%+$B6i:7@0IXSsDiWP,##P`%/L-" - "S(qw%sf/@%#B6;/U7K]uZbi^Oc^2n%t<)'mEVE''n`WnJra$^TKvX5B>;_aSEK',(hwa0:i4G?.Bci.(X[?b*($,=-n<.Q%`(X=?+@Am*Js0&=3bh8K]mL69=Lb,OcZV/);TTm8VI;?%OtJ<(b4mq7M6:u?KRdFl*:xP?Yb.5)%w_I?7uk5JC+FS(m#i'k.'a0i)9<7b'fs'59hq$*5Uhv##pi^8+hIEBF`nvo`;'l0.^S1<-wUK2/Coh58KKhLj" - "M=SO*rfO`+qC`W-On.=AJ56>>i2@2LH6A:&5q`?9I3@@'04&p2/LVa*T-4<-i3;M9UvZd+N7>b*eIwg:CC)c<>nO&#$(>.Z-I&J(Q0Hd5Q%7Co-b`-cP)hI;*_F]u`Rb[.j8_Q/<&>uu+VsH$sM9TA%?)(vmJ80),P7E>)tjD%2L=-t#fK[%`v=Q8WlA2);Sa" - ">gXm8YB`1d@K#n]76-a$U,mF%Ul:#/'xoFM9QX-$.QN'>" - "[%$Z$uF6pA6Ki2O5:8w*vP1<-1`[G,)-m#>0`P&#eb#.3i)rtB61(o'$?X3B2Qft^ae_5tKL9MUe9b*sLEQ95C&`=G?@Mj=wh*'3E>=-<)Gt*Iw)'QG:`@I" - "wOf7&]1i'S01B+Ev/Nac#9S;=;YQpg_6U`*kVY39xK,[/6Aj7:'1Bm-_1EYfa1+o&o4hp7KN_Q(OlIo@S%;jVdn0'1h19w,WQhLI)3S#f$2(eb,jr*b;3Vw]*7NH%$c4Vs,eD9>XW8?N]o+(*pgC%/72LV-uW%iewS8W6m2rtCpo'RS1R84=@paTKt)>=%&1[)*vp'u+x,VrwN;&]kuO9JDbg=pO$J*.jVe;u'm0dr9l,<*wMK*Oe=g8lV_KEBFkO'oU]^=[-792#ok,)" - "i]lR8qQ2oA8wcRCZ^7w/Njh;?.stX?Q1>S1q4Bn$)K1<-rGdO'$Wr.Lc.CG)$/*JL4tNR/,SVO3,aUw'DJN:)Ss;wGn9A32ijw%FL+Z0Fn.U9;reSq)bmI32U==5ALuG&#Vf1398/pVo" - "1*c-(aY168o<`JsSbk-,1N;$>0:OUas(3:8Z972LSfF8eb=c-;>SPw7.6hn3m`9^Xkn(r.qS[0;T%&Qc=+STRxX'q1BNk3&*eu2;&8q$&x>Q#Q7^Tf+6<(d%ZVmj2bDi%.3L2n+4W'$P" - "iDDG)g,r%+?,$@?uou5tSe2aN_AQU*'IAO" - "URQ##V^Fv-XFbGM7Fl(N<3DhLGF%q.1rC$#:T__&Pi68%0xi_&[qFJ(77j_&JWoF.V735&T,[R*:xFR*K5>>#`bW-?4Ne_&6Ne_&6Ne_&n`kr-#GJcM6X;uM6X;uM(.a..^2TkL%oR(#" - ";u.T%fAr%4tJ8&><1=GHZ_+m9/#H1F^R#SC#*N=BA9(D?v[UiFY>>^8p,KKF.W]L29uLkLlu/+4T" - "w$)F./^n3+rlo+DB;5sIYGNk+i1t-69Jg--0pao7Sm#K)pdHW&;LuDNH@H>#/X-TI(;P>#,Gc>#0Su>#4`1?#8lC?#xL$#B.`$#F:r$#JF.%#NR@%#R_R%#Vke%#Zww%#_-4^Rh%Sflr-k'MS.o?.5/sWel/wpEM0%3'/1)K^f1-d>G21&v(35>V`39V7A4=onx4" - "A1OY5EI0;6Ibgr6M$HS7Q<)58C5w,;WoA*#[%T*#`1g*#d=#+#hI5+#lUG+#pbY+#tnl+#x$),#&1;,#*=M,#.I`,#2Ur,#6b.-#;w[H#iQtA#m^0B#qjBB#uvTB##-hB#'9$C#+E6C#" - "/QHC#3^ZC#7jmC#;v)D#?,)4kMYD4lVu`4m`:&5niUA5@(A5BA1]PBB:xlBCC=2CDLXMCEUtiCf&0g2'tN?PGT4CPGT4CPGT4CPGT4CPGT4CPGT4CPGT4CP" - "GT4CPGT4CPGT4CPGT4CPGT4CPGT4CP-qekC`.9kEg^+F$kwViFJTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5o,^<-28ZI'O?;xp" - "O?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xp;7q-#lLYI:xvD=#"; - -static const char* GetDefaultCompressedFontDataTTFBase85() -{ - return proggy_clean_ttf_compressed_data_base85; -} - -#endif // #ifndef IMGUI_DISABLE diff --git a/cmake/imgui/imgui_impl_glfw.cpp b/cmake/imgui/imgui_impl_glfw.cpp deleted file mode 100644 index c496232c..00000000 --- a/cmake/imgui/imgui_impl_glfw.cpp +++ /dev/null @@ -1,369 +0,0 @@ -// dear imgui: Platform Binding for GLFW -// This needs to be used along with a Renderer (e.g. OpenGL3, Vulkan..) -// (Info: GLFW is a cross-platform general purpose library for handling windows, inputs, OpenGL/Vulkan graphics context creation, etc.) -// (Requires: GLFW 3.1+) - -// Implemented features: -// [X] Platform: Clipboard support. -// [X] Platform: Gamepad support. Enable with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'. -// [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange' (note: the resizing cursors requires GLFW 3.4+). -// [X] Platform: Keyboard arrays indexed using GLFW_KEY_* codes, e.g. ImGui::IsKeyPressed(GLFW_KEY_SPACE). - -// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. -// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. -// https://github.com/ocornut/imgui - -// CHANGELOG -// (minor and older changes stripped away, please see git history for details) -// 2020-01-17: Inputs: Disable error callback while assigning mouse cursors because some X11 setup don't have them and it generates errors. -// 2019-12-05: Inputs: Added support for new mouse cursors added in GLFW 3.4+ (resizing cursors, not allowed cursor). -// 2019-10-18: Misc: Previously installed user callbacks are now restored on shutdown. -// 2019-07-21: Inputs: Added mapping for ImGuiKey_KeyPadEnter. -// 2019-05-11: Inputs: Don't filter value from character callback before calling AddInputCharacter(). -// 2019-03-12: Misc: Preserve DisplayFramebufferScale when main window is minimized. -// 2018-11-30: Misc: Setting up io.BackendPlatformName so it can be displayed in the About Window. -// 2018-11-07: Inputs: When installing our GLFW callbacks, we save user's previously installed ones - if any - and chain call them. -// 2018-08-01: Inputs: Workaround for Emscripten which doesn't seem to handle focus related calls. -// 2018-06-29: Inputs: Added support for the ImGuiMouseCursor_Hand cursor. -// 2018-06-08: Misc: Extracted imgui_impl_glfw.cpp/.h away from the old combined GLFW+OpenGL/Vulkan examples. -// 2018-03-20: Misc: Setup io.BackendFlags ImGuiBackendFlags_HasMouseCursors flag + honor ImGuiConfigFlags_NoMouseCursorChange flag. -// 2018-02-20: Inputs: Added support for mouse cursors (ImGui::GetMouseCursor() value, passed to glfwSetCursor()). -// 2018-02-06: Misc: Removed call to ImGui::Shutdown() which is not available from 1.60 WIP, user needs to call CreateContext/DestroyContext themselves. -// 2018-02-06: Inputs: Added mapping for ImGuiKey_Space. -// 2018-01-25: Inputs: Added gamepad support if ImGuiConfigFlags_NavEnableGamepad is set. -// 2018-01-25: Inputs: Honoring the io.WantSetMousePos by repositioning the mouse (when using navigation and ImGuiConfigFlags_NavMoveMouse is set). -// 2018-01-20: Inputs: Added Horizontal Mouse Wheel support. -// 2018-01-18: Inputs: Added mapping for ImGuiKey_Insert. -// 2017-08-25: Inputs: MousePos set to -FLT_MAX,-FLT_MAX when mouse is unavailable/missing (instead of -1,-1). -// 2016-10-15: Misc: Added a void* user_data parameter to Clipboard function handlers. - -#include "imgui.h" -#include "imgui_impl_glfw.h" - -// GLFW -#include -#ifdef _WIN32 -#undef APIENTRY -#define GLFW_EXPOSE_NATIVE_WIN32 -#include // for glfwGetWin32Window -#endif -#define GLFW_HAS_WINDOW_TOPMOST (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3200) // 3.2+ GLFW_FLOATING -#define GLFW_HAS_WINDOW_HOVERED (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3300) // 3.3+ GLFW_HOVERED -#define GLFW_HAS_WINDOW_ALPHA (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3300) // 3.3+ glfwSetWindowOpacity -#define GLFW_HAS_PER_MONITOR_DPI (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3300) // 3.3+ glfwGetMonitorContentScale -#define GLFW_HAS_VULKAN (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3200) // 3.2+ glfwCreateWindowSurface -#ifdef GLFW_RESIZE_NESW_CURSOR // let's be nice to people who pulled GLFW between 2019-04-16 (3.4 define) and 2019-11-29 (cursors defines) // FIXME: Remove when GLFW 3.4 is released? -#define GLFW_HAS_NEW_CURSORS (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3400) // 3.4+ GLFW_RESIZE_ALL_CURSOR, GLFW_RESIZE_NESW_CURSOR, GLFW_RESIZE_NWSE_CURSOR, GLFW_NOT_ALLOWED_CURSOR -#else -#define GLFW_HAS_NEW_CURSORS (0) -#endif - -// Data -enum GlfwClientApi -{ - GlfwClientApi_Unknown, - GlfwClientApi_OpenGL, - GlfwClientApi_Vulkan -}; -static GLFWwindow* g_Window = NULL; // Main window -static GlfwClientApi g_ClientApi = GlfwClientApi_Unknown; -static double g_Time = 0.0; -static bool g_MouseJustPressed[5] = { false, false, false, false, false }; -static GLFWcursor* g_MouseCursors[ImGuiMouseCursor_COUNT] = {}; -static bool g_InstalledCallbacks = false; - -// Chain GLFW callbacks: our callbacks will call the user's previously installed callbacks, if any. -static GLFWmousebuttonfun g_PrevUserCallbackMousebutton = NULL; -static GLFWscrollfun g_PrevUserCallbackScroll = NULL; -static GLFWkeyfun g_PrevUserCallbackKey = NULL; -static GLFWcharfun g_PrevUserCallbackChar = NULL; - -static const char* ImGui_ImplGlfw_GetClipboardText(void* user_data) -{ - return glfwGetClipboardString((GLFWwindow*)user_data); -} - -static void ImGui_ImplGlfw_SetClipboardText(void* user_data, const char* text) -{ - glfwSetClipboardString((GLFWwindow*)user_data, text); -} - -void ImGui_ImplGlfw_MouseButtonCallback(GLFWwindow* window, int button, int action, int mods) -{ - if (g_PrevUserCallbackMousebutton != NULL) - g_PrevUserCallbackMousebutton(window, button, action, mods); - - if (action == GLFW_PRESS && button >= 0 && button < IM_ARRAYSIZE(g_MouseJustPressed)) - g_MouseJustPressed[button] = true; -} - -void ImGui_ImplGlfw_ScrollCallback(GLFWwindow* window, double xoffset, double yoffset) -{ - if (g_PrevUserCallbackScroll != NULL) - g_PrevUserCallbackScroll(window, xoffset, yoffset); - - ImGuiIO& io = ImGui::GetIO(); - io.MouseWheelH += (float)xoffset; - io.MouseWheel += (float)yoffset; -} - -void ImGui_ImplGlfw_KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods) -{ - if (g_PrevUserCallbackKey != NULL) - g_PrevUserCallbackKey(window, key, scancode, action, mods); - - ImGuiIO& io = ImGui::GetIO(); - if (action == GLFW_PRESS) - io.KeysDown[key] = true; - if (action == GLFW_RELEASE) - io.KeysDown[key] = false; - - // Modifiers are not reliable across systems - io.KeyCtrl = io.KeysDown[GLFW_KEY_LEFT_CONTROL] || io.KeysDown[GLFW_KEY_RIGHT_CONTROL]; - io.KeyShift = io.KeysDown[GLFW_KEY_LEFT_SHIFT] || io.KeysDown[GLFW_KEY_RIGHT_SHIFT]; - io.KeyAlt = io.KeysDown[GLFW_KEY_LEFT_ALT] || io.KeysDown[GLFW_KEY_RIGHT_ALT]; -#ifdef _WIN32 - io.KeySuper = false; -#else - io.KeySuper = io.KeysDown[GLFW_KEY_LEFT_SUPER] || io.KeysDown[GLFW_KEY_RIGHT_SUPER]; -#endif -} - -void ImGui_ImplGlfw_CharCallback(GLFWwindow* window, unsigned int c) -{ - if (g_PrevUserCallbackChar != NULL) - g_PrevUserCallbackChar(window, c); - - ImGuiIO& io = ImGui::GetIO(); - io.AddInputCharacter(c); -} - -static bool ImGui_ImplGlfw_Init(GLFWwindow* window, bool install_callbacks, GlfwClientApi client_api) -{ - g_Window = window; - g_Time = 0.0; - - // Setup back-end capabilities flags - ImGuiIO& io = ImGui::GetIO(); - io.BackendFlags |= ImGuiBackendFlags_HasMouseCursors; // We can honor GetMouseCursor() values (optional) - io.BackendFlags |= ImGuiBackendFlags_HasSetMousePos; // We can honor io.WantSetMousePos requests (optional, rarely used) - io.BackendPlatformName = "imgui_impl_glfw"; - - // Keyboard mapping. ImGui will use those indices to peek into the io.KeysDown[] array. - io.KeyMap[ImGuiKey_Tab] = GLFW_KEY_TAB; - io.KeyMap[ImGuiKey_LeftArrow] = GLFW_KEY_LEFT; - io.KeyMap[ImGuiKey_RightArrow] = GLFW_KEY_RIGHT; - io.KeyMap[ImGuiKey_UpArrow] = GLFW_KEY_UP; - io.KeyMap[ImGuiKey_DownArrow] = GLFW_KEY_DOWN; - io.KeyMap[ImGuiKey_PageUp] = GLFW_KEY_PAGE_UP; - io.KeyMap[ImGuiKey_PageDown] = GLFW_KEY_PAGE_DOWN; - io.KeyMap[ImGuiKey_Home] = GLFW_KEY_HOME; - io.KeyMap[ImGuiKey_End] = GLFW_KEY_END; - io.KeyMap[ImGuiKey_Insert] = GLFW_KEY_INSERT; - io.KeyMap[ImGuiKey_Delete] = GLFW_KEY_DELETE; - io.KeyMap[ImGuiKey_Backspace] = GLFW_KEY_BACKSPACE; - io.KeyMap[ImGuiKey_Space] = GLFW_KEY_SPACE; - io.KeyMap[ImGuiKey_Enter] = GLFW_KEY_ENTER; - io.KeyMap[ImGuiKey_Escape] = GLFW_KEY_ESCAPE; - io.KeyMap[ImGuiKey_KeyPadEnter] = GLFW_KEY_KP_ENTER; - io.KeyMap[ImGuiKey_A] = GLFW_KEY_A; - io.KeyMap[ImGuiKey_C] = GLFW_KEY_C; - io.KeyMap[ImGuiKey_V] = GLFW_KEY_V; - io.KeyMap[ImGuiKey_X] = GLFW_KEY_X; - io.KeyMap[ImGuiKey_Y] = GLFW_KEY_Y; - io.KeyMap[ImGuiKey_Z] = GLFW_KEY_Z; - - io.SetClipboardTextFn = ImGui_ImplGlfw_SetClipboardText; - io.GetClipboardTextFn = ImGui_ImplGlfw_GetClipboardText; - io.ClipboardUserData = g_Window; -#if defined(_WIN32) - io.ImeWindowHandle = (void*)glfwGetWin32Window(g_Window); -#endif - - // Create mouse cursors - // (By design, on X11 cursors are user configurable and some cursors may be missing. When a cursor doesn't exist, - // GLFW will emit an error which will often be printed by the app, so we temporarily disable error reporting. - // Missing cursors will return NULL and our _UpdateMouseCursor() function will use the Arrow cursor instead.) - GLFWerrorfun prev_error_callback = glfwSetErrorCallback(NULL); - g_MouseCursors[ImGuiMouseCursor_Arrow] = glfwCreateStandardCursor(GLFW_ARROW_CURSOR); - g_MouseCursors[ImGuiMouseCursor_TextInput] = glfwCreateStandardCursor(GLFW_IBEAM_CURSOR); - g_MouseCursors[ImGuiMouseCursor_ResizeNS] = glfwCreateStandardCursor(GLFW_VRESIZE_CURSOR); - g_MouseCursors[ImGuiMouseCursor_ResizeEW] = glfwCreateStandardCursor(GLFW_HRESIZE_CURSOR); - g_MouseCursors[ImGuiMouseCursor_Hand] = glfwCreateStandardCursor(GLFW_HAND_CURSOR); -#if GLFW_HAS_NEW_CURSORS - g_MouseCursors[ImGuiMouseCursor_ResizeAll] = glfwCreateStandardCursor(GLFW_RESIZE_ALL_CURSOR); - g_MouseCursors[ImGuiMouseCursor_ResizeNESW] = glfwCreateStandardCursor(GLFW_RESIZE_NESW_CURSOR); - g_MouseCursors[ImGuiMouseCursor_ResizeNWSE] = glfwCreateStandardCursor(GLFW_RESIZE_NWSE_CURSOR); - g_MouseCursors[ImGuiMouseCursor_NotAllowed] = glfwCreateStandardCursor(GLFW_NOT_ALLOWED_CURSOR); -#else - g_MouseCursors[ImGuiMouseCursor_ResizeAll] = glfwCreateStandardCursor(GLFW_ARROW_CURSOR); - g_MouseCursors[ImGuiMouseCursor_ResizeNESW] = glfwCreateStandardCursor(GLFW_ARROW_CURSOR); - g_MouseCursors[ImGuiMouseCursor_ResizeNWSE] = glfwCreateStandardCursor(GLFW_ARROW_CURSOR); - g_MouseCursors[ImGuiMouseCursor_NotAllowed] = glfwCreateStandardCursor(GLFW_ARROW_CURSOR); -#endif - glfwSetErrorCallback(prev_error_callback); - - // Chain GLFW callbacks: our callbacks will call the user's previously installed callbacks, if any. - g_PrevUserCallbackMousebutton = NULL; - g_PrevUserCallbackScroll = NULL; - g_PrevUserCallbackKey = NULL; - g_PrevUserCallbackChar = NULL; - if (install_callbacks) - { - g_InstalledCallbacks = true; - g_PrevUserCallbackMousebutton = glfwSetMouseButtonCallback(window, ImGui_ImplGlfw_MouseButtonCallback); - g_PrevUserCallbackScroll = glfwSetScrollCallback(window, ImGui_ImplGlfw_ScrollCallback); - g_PrevUserCallbackKey = glfwSetKeyCallback(window, ImGui_ImplGlfw_KeyCallback); - g_PrevUserCallbackChar = glfwSetCharCallback(window, ImGui_ImplGlfw_CharCallback); - } - - g_ClientApi = client_api; - return true; -} - -bool ImGui_ImplGlfw_InitForOpenGL(GLFWwindow* window, bool install_callbacks) -{ - return ImGui_ImplGlfw_Init(window, install_callbacks, GlfwClientApi_OpenGL); -} - -bool ImGui_ImplGlfw_InitForVulkan(GLFWwindow* window, bool install_callbacks) -{ - return ImGui_ImplGlfw_Init(window, install_callbacks, GlfwClientApi_Vulkan); -} - -void ImGui_ImplGlfw_Shutdown() -{ - if (g_InstalledCallbacks) - { - glfwSetMouseButtonCallback(g_Window, g_PrevUserCallbackMousebutton); - glfwSetScrollCallback(g_Window, g_PrevUserCallbackScroll); - glfwSetKeyCallback(g_Window, g_PrevUserCallbackKey); - glfwSetCharCallback(g_Window, g_PrevUserCallbackChar); - g_InstalledCallbacks = false; - } - - for (ImGuiMouseCursor cursor_n = 0; cursor_n < ImGuiMouseCursor_COUNT; cursor_n++) - { - glfwDestroyCursor(g_MouseCursors[cursor_n]); - g_MouseCursors[cursor_n] = NULL; - } - g_ClientApi = GlfwClientApi_Unknown; -} - -static void ImGui_ImplGlfw_UpdateMousePosAndButtons() -{ - // Update buttons - ImGuiIO& io = ImGui::GetIO(); - for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) - { - // If a mouse press event came, always pass it as "mouse held this frame", so we don't miss click-release events that are shorter than 1 frame. - io.MouseDown[i] = g_MouseJustPressed[i] || glfwGetMouseButton(g_Window, i) != 0; - g_MouseJustPressed[i] = false; - } - - // Update mouse position - const ImVec2 mouse_pos_backup = io.MousePos; - io.MousePos = ImVec2(-FLT_MAX, -FLT_MAX); -#ifdef __EMSCRIPTEN__ - const bool focused = true; // Emscripten -#else - const bool focused = glfwGetWindowAttrib(g_Window, GLFW_FOCUSED) != 0; -#endif - if (focused) - { - if (io.WantSetMousePos) - { - glfwSetCursorPos(g_Window, (double)mouse_pos_backup.x, (double)mouse_pos_backup.y); - } - else - { - double mouse_x, mouse_y; - glfwGetCursorPos(g_Window, &mouse_x, &mouse_y); - io.MousePos = ImVec2((float)mouse_x, (float)mouse_y); - } - } -} - -static void ImGui_ImplGlfw_UpdateMouseCursor() -{ - ImGuiIO& io = ImGui::GetIO(); - if ((io.ConfigFlags & ImGuiConfigFlags_NoMouseCursorChange) || glfwGetInputMode(g_Window, GLFW_CURSOR) == GLFW_CURSOR_DISABLED) - return; - - ImGuiMouseCursor imgui_cursor = ImGui::GetMouseCursor(); - if (imgui_cursor == ImGuiMouseCursor_None || io.MouseDrawCursor) - { - // Hide OS mouse cursor if imgui is drawing it or if it wants no cursor - glfwSetInputMode(g_Window, GLFW_CURSOR, GLFW_CURSOR_HIDDEN); - } - else - { - // Show OS mouse cursor - // FIXME-PLATFORM: Unfocused windows seems to fail changing the mouse cursor with GLFW 3.2, but 3.3 works here. - glfwSetCursor(g_Window, g_MouseCursors[imgui_cursor] ? g_MouseCursors[imgui_cursor] : g_MouseCursors[ImGuiMouseCursor_Arrow]); - glfwSetInputMode(g_Window, GLFW_CURSOR, GLFW_CURSOR_NORMAL); - } -} - -static void ImGui_ImplGlfw_UpdateGamepads() -{ - ImGuiIO& io = ImGui::GetIO(); - memset(io.NavInputs, 0, sizeof(io.NavInputs)); - if ((io.ConfigFlags & ImGuiConfigFlags_NavEnableGamepad) == 0) - return; - - // Update gamepad inputs - #define MAP_BUTTON(NAV_NO, BUTTON_NO) { if (buttons_count > BUTTON_NO && buttons[BUTTON_NO] == GLFW_PRESS) io.NavInputs[NAV_NO] = 1.0f; } - #define MAP_ANALOG(NAV_NO, AXIS_NO, V0, V1) { float v = (axes_count > AXIS_NO) ? axes[AXIS_NO] : V0; v = (v - V0) / (V1 - V0); if (v > 1.0f) v = 1.0f; if (io.NavInputs[NAV_NO] < v) io.NavInputs[NAV_NO] = v; } - int axes_count = 0, buttons_count = 0; - const float* axes = glfwGetJoystickAxes(GLFW_JOYSTICK_1, &axes_count); - const unsigned char* buttons = glfwGetJoystickButtons(GLFW_JOYSTICK_1, &buttons_count); - MAP_BUTTON(ImGuiNavInput_Activate, 0); // Cross / A - MAP_BUTTON(ImGuiNavInput_Cancel, 1); // Circle / B - MAP_BUTTON(ImGuiNavInput_Menu, 2); // Square / X - MAP_BUTTON(ImGuiNavInput_Input, 3); // Triangle / Y - MAP_BUTTON(ImGuiNavInput_DpadLeft, 13); // D-Pad Left - MAP_BUTTON(ImGuiNavInput_DpadRight, 11); // D-Pad Right - MAP_BUTTON(ImGuiNavInput_DpadUp, 10); // D-Pad Up - MAP_BUTTON(ImGuiNavInput_DpadDown, 12); // D-Pad Down - MAP_BUTTON(ImGuiNavInput_FocusPrev, 4); // L1 / LB - MAP_BUTTON(ImGuiNavInput_FocusNext, 5); // R1 / RB - MAP_BUTTON(ImGuiNavInput_TweakSlow, 4); // L1 / LB - MAP_BUTTON(ImGuiNavInput_TweakFast, 5); // R1 / RB - MAP_ANALOG(ImGuiNavInput_LStickLeft, 0, -0.3f, -0.9f); - MAP_ANALOG(ImGuiNavInput_LStickRight,0, +0.3f, +0.9f); - MAP_ANALOG(ImGuiNavInput_LStickUp, 1, +0.3f, +0.9f); - MAP_ANALOG(ImGuiNavInput_LStickDown, 1, -0.3f, -0.9f); - #undef MAP_BUTTON - #undef MAP_ANALOG - if (axes_count > 0 && buttons_count > 0) - io.BackendFlags |= ImGuiBackendFlags_HasGamepad; - else - io.BackendFlags &= ~ImGuiBackendFlags_HasGamepad; -} - -void ImGui_ImplGlfw_NewFrame() -{ - ImGuiIO& io = ImGui::GetIO(); - IM_ASSERT(io.Fonts->IsBuilt() && "Font atlas not built! It is generally built by the renderer back-end. Missing call to renderer _NewFrame() function? e.g. ImGui_ImplOpenGL3_NewFrame()."); - - // Setup display size (every frame to accommodate for window resizing) - int w, h; - int display_w, display_h; - glfwGetWindowSize(g_Window, &w, &h); - glfwGetFramebufferSize(g_Window, &display_w, &display_h); - io.DisplaySize = ImVec2((float)w, (float)h); - if (w > 0 && h > 0) - io.DisplayFramebufferScale = ImVec2((float)display_w / w, (float)display_h / h); - - // Setup time step - double current_time = glfwGetTime(); - io.DeltaTime = g_Time > 0.0 ? (float)(current_time - g_Time) : (float)(1.0f/60.0f); - g_Time = current_time; - - ImGui_ImplGlfw_UpdateMousePosAndButtons(); - ImGui_ImplGlfw_UpdateMouseCursor(); - - // Update game controllers (if enabled and available) - ImGui_ImplGlfw_UpdateGamepads(); -} diff --git a/cmake/imgui/imgui_impl_glfw.h b/cmake/imgui/imgui_impl_glfw.h deleted file mode 100644 index a86790b7..00000000 --- a/cmake/imgui/imgui_impl_glfw.h +++ /dev/null @@ -1,34 +0,0 @@ -// dear imgui: Platform Binding for GLFW -// This needs to be used along with a Renderer (e.g. OpenGL3, Vulkan..) -// (Info: GLFW is a cross-platform general purpose library for handling windows, inputs, OpenGL/Vulkan graphics context creation, etc.) - -// Implemented features: -// [X] Platform: Clipboard support. -// [X] Platform: Gamepad support. Enable with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'. -// [x] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'. FIXME: 3 cursors types are missing from GLFW. -// [X] Platform: Keyboard arrays indexed using GLFW_KEY_* codes, e.g. ImGui::IsKeyPressed(GLFW_KEY_SPACE). - -// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. -// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. -// https://github.com/ocornut/imgui - -// About GLSL version: -// The 'glsl_version' initialization parameter defaults to "#version 150" if NULL. -// Only override if your GL version doesn't handle this GLSL version. Keep NULL if unsure! - -#pragma once - -struct GLFWwindow; - -IMGUI_IMPL_API bool ImGui_ImplGlfw_InitForOpenGL(GLFWwindow* window, bool install_callbacks); -IMGUI_IMPL_API bool ImGui_ImplGlfw_InitForVulkan(GLFWwindow* window, bool install_callbacks); -IMGUI_IMPL_API void ImGui_ImplGlfw_Shutdown(); -IMGUI_IMPL_API void ImGui_ImplGlfw_NewFrame(); - -// GLFW callbacks -// - When calling Init with 'install_callbacks=true': GLFW callbacks will be installed for you. They will call user's previously installed callbacks, if any. -// - When calling Init with 'install_callbacks=false': GLFW callbacks won't be installed. You will need to call those function yourself from your own GLFW callbacks. -IMGUI_IMPL_API void ImGui_ImplGlfw_MouseButtonCallback(GLFWwindow* window, int button, int action, int mods); -IMGUI_IMPL_API void ImGui_ImplGlfw_ScrollCallback(GLFWwindow* window, double xoffset, double yoffset); -IMGUI_IMPL_API void ImGui_ImplGlfw_KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods); -IMGUI_IMPL_API void ImGui_ImplGlfw_CharCallback(GLFWwindow* window, unsigned int c); diff --git a/cmake/imgui/imgui_impl_opengl3.cpp b/cmake/imgui/imgui_impl_opengl3.cpp deleted file mode 100644 index 2f908f46..00000000 --- a/cmake/imgui/imgui_impl_opengl3.cpp +++ /dev/null @@ -1,687 +0,0 @@ -// dear imgui: Renderer for modern OpenGL with shaders / programmatic pipeline -// - Desktop GL: 2.x 3.x 4.x -// - Embedded GL: ES 2.0 (WebGL 1.0), ES 3.0 (WebGL 2.0) -// This needs to be used along with a Platform Binding (e.g. GLFW, SDL, Win32, custom..) - -// Implemented features: -// [X] Renderer: User texture binding. Use 'GLuint' OpenGL texture identifier as void*/ImTextureID. Read the FAQ about ImTextureID! -// [x] Renderer: Desktop GL only: Support for large meshes (64k+ vertices) with 16-bit indices. - -// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. -// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. -// https://github.com/ocornut/imgui - -// CHANGELOG -// (minor and older changes stripped away, please see git history for details) -// 2020-03-24: OpenGL: Added support for glbinding 2.x OpenGL loader. -// 2020-01-07: OpenGL: Added support for glbinding 3.x OpenGL loader. -// 2019-10-25: OpenGL: Using a combination of GL define and runtime GL version to decide whether to use glDrawElementsBaseVertex(). Fix building with pre-3.2 GL loaders. -// 2019-09-22: OpenGL: Detect default GL loader using __has_include compiler facility. -// 2019-09-16: OpenGL: Tweak initialization code to allow application calling ImGui_ImplOpenGL3_CreateFontsTexture() before the first NewFrame() call. -// 2019-05-29: OpenGL: Desktop GL only: Added support for large mesh (64K+ vertices), enable ImGuiBackendFlags_RendererHasVtxOffset flag. -// 2019-04-30: OpenGL: Added support for special ImDrawCallback_ResetRenderState callback to reset render state. -// 2019-03-29: OpenGL: Not calling glBindBuffer more than necessary in the render loop. -// 2019-03-15: OpenGL: Added a dummy GL call + comments in ImGui_ImplOpenGL3_Init() to detect uninitialized GL function loaders early. -// 2019-03-03: OpenGL: Fix support for ES 2.0 (WebGL 1.0). -// 2019-02-20: OpenGL: Fix for OSX not supporting OpenGL 4.5, we don't try to read GL_CLIP_ORIGIN even if defined by the headers/loader. -// 2019-02-11: OpenGL: Projecting clipping rectangles correctly using draw_data->FramebufferScale to allow multi-viewports for retina display. -// 2019-02-01: OpenGL: Using GLSL 410 shaders for any version over 410 (e.g. 430, 450). -// 2018-11-30: Misc: Setting up io.BackendRendererName so it can be displayed in the About Window. -// 2018-11-13: OpenGL: Support for GL 4.5's glClipControl(GL_UPPER_LEFT) / GL_CLIP_ORIGIN. -// 2018-08-29: OpenGL: Added support for more OpenGL loaders: glew and glad, with comments indicative that any loader can be used. -// 2018-08-09: OpenGL: Default to OpenGL ES 3 on iOS and Android. GLSL version default to "#version 300 ES". -// 2018-07-30: OpenGL: Support for GLSL 300 ES and 410 core. Fixes for Emscripten compilation. -// 2018-07-10: OpenGL: Support for more GLSL versions (based on the GLSL version string). Added error output when shaders fail to compile/link. -// 2018-06-08: Misc: Extracted imgui_impl_opengl3.cpp/.h away from the old combined GLFW/SDL+OpenGL3 examples. -// 2018-06-08: OpenGL: Use draw_data->DisplayPos and draw_data->DisplaySize to setup projection matrix and clipping rectangle. -// 2018-05-25: OpenGL: Removed unnecessary backup/restore of GL_ELEMENT_ARRAY_BUFFER_BINDING since this is part of the VAO state. -// 2018-05-14: OpenGL: Making the call to glBindSampler() optional so 3.2 context won't fail if the function is a NULL pointer. -// 2018-03-06: OpenGL: Added const char* glsl_version parameter to ImGui_ImplOpenGL3_Init() so user can override the GLSL version e.g. "#version 150". -// 2018-02-23: OpenGL: Create the VAO in the render function so the setup can more easily be used with multiple shared GL context. -// 2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_ImplSdlGL3_RenderDrawData() in the .h file so you can call it yourself. -// 2018-01-07: OpenGL: Changed GLSL shader version from 330 to 150. -// 2017-09-01: OpenGL: Save and restore current bound sampler. Save and restore current polygon mode. -// 2017-05-01: OpenGL: Fixed save and restore of current blend func state. -// 2017-05-01: OpenGL: Fixed save and restore of current GL_ACTIVE_TEXTURE. -// 2016-09-05: OpenGL: Fixed save and restore of current scissor rectangle. -// 2016-07-29: OpenGL: Explicitly setting GL_UNPACK_ROW_LENGTH to reduce issues because SDL changes it. (#752) - -//---------------------------------------- -// OpenGL GLSL GLSL -// version version string -//---------------------------------------- -// 2.0 110 "#version 110" -// 2.1 120 "#version 120" -// 3.0 130 "#version 130" -// 3.1 140 "#version 140" -// 3.2 150 "#version 150" -// 3.3 330 "#version 330 core" -// 4.0 400 "#version 400 core" -// 4.1 410 "#version 410 core" -// 4.2 420 "#version 410 core" -// 4.3 430 "#version 430 core" -// ES 2.0 100 "#version 100" = WebGL 1.0 -// ES 3.0 300 "#version 300 es" = WebGL 2.0 -//---------------------------------------- - -#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) -#define _CRT_SECURE_NO_WARNINGS -#endif - -#include "imgui.h" -#include "imgui_impl_opengl3.h" -#include -#if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier -#include // intptr_t -#else -#include // intptr_t -#endif -#if defined(__APPLE__) -#include "TargetConditionals.h" -#endif - -// Auto-enable GLES on matching platforms -#if !defined(IMGUI_IMPL_OPENGL_ES2) && !defined(IMGUI_IMPL_OPENGL_ES3) -#if (defined(__APPLE__) && (TARGET_OS_IOS || TARGET_OS_TV)) || (defined(__ANDROID__)) -#define IMGUI_IMPL_OPENGL_ES3 // iOS, Android -> GL ES 3, "#version 300 es" -#elif defined(__EMSCRIPTEN__) -#define IMGUI_IMPL_OPENGL_ES2 // Emscripten -> GL ES 2, "#version 100" -#endif -#endif - -#if defined(IMGUI_IMPL_OPENGL_ES2) || defined(IMGUI_IMPL_OPENGL_ES3) -#undef IMGUI_IMPL_OPENGL_LOADER_GL3W -#undef IMGUI_IMPL_OPENGL_LOADER_GLEW -#undef IMGUI_IMPL_OPENGL_LOADER_GLAD -#undef IMGUI_IMPL_OPENGL_LOADER_GLBINDING2 -#undef IMGUI_IMPL_OPENGL_LOADER_GLBINDING3 -#undef IMGUI_IMPL_OPENGL_LOADER_CUSTOM -#endif - -// GL includes -#if defined(IMGUI_IMPL_OPENGL_ES2) -#include -#elif defined(IMGUI_IMPL_OPENGL_ES3) -#if (defined(__APPLE__) && (TARGET_OS_IOS || TARGET_OS_TV)) -#include // Use GL ES 3 -#else -#include // Use GL ES 3 -#endif -#else -// About Desktop OpenGL function loaders: -// Modern desktop OpenGL doesn't have a standard portable header file to load OpenGL function pointers. -// Helper libraries are often used for this purpose! Here we are supporting a few common ones (gl3w, glew, glad). -// You may use another loader/header of your choice (glext, glLoadGen, etc.), or chose to manually implement your own. -#if defined(IMGUI_IMPL_OPENGL_LOADER_GL3W) -#include // Needs to be initialized with gl3wInit() in user's code -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLEW) -#include // Needs to be initialized with glewInit() in user's code. -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLAD) -#include // Needs to be initialized with gladLoadGL() in user's code. -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING2) -#define GLFW_INCLUDE_NONE // GLFW including OpenGL headers causes ambiguity or multiple definition errors. -#include // Needs to be initialized with glbinding::Binding::initialize() in user's code. -#include -using namespace gl; -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING3) -#define GLFW_INCLUDE_NONE // GLFW including OpenGL headers causes ambiguity or multiple definition errors. -#include // Needs to be initialized with glbinding::initialize() in user's code. -#include -using namespace gl; -#else -#include IMGUI_IMPL_OPENGL_LOADER_CUSTOM -#endif -#endif - -// Desktop GL 3.2+ has glDrawElementsBaseVertex() which GL ES and WebGL don't have. -#if defined(IMGUI_IMPL_OPENGL_ES2) || defined(IMGUI_IMPL_OPENGL_ES3) || !defined(GL_VERSION_3_2) -#define IMGUI_IMPL_OPENGL_MAY_HAVE_VTX_OFFSET 0 -#else -#define IMGUI_IMPL_OPENGL_MAY_HAVE_VTX_OFFSET 1 -#endif - -// OpenGL Data -static GLuint g_GlVersion = 0; // Extracted at runtime using GL_MAJOR_VERSION, GL_MINOR_VERSION queries. -static char g_GlslVersionString[32] = ""; // Specified by user or detected based on compile time GL settings. -static GLuint g_FontTexture = 0; -static GLuint g_ShaderHandle = 0, g_VertHandle = 0, g_FragHandle = 0; -static int g_AttribLocationTex = 0, g_AttribLocationProjMtx = 0; // Uniforms location -static int g_AttribLocationVtxPos = 0, g_AttribLocationVtxUV = 0, g_AttribLocationVtxColor = 0; // Vertex attributes location -static unsigned int g_VboHandle = 0, g_ElementsHandle = 0; - -// Functions -bool ImGui_ImplOpenGL3_Init(const char* glsl_version) -{ - // Query for GL version -#if !defined(IMGUI_IMPL_OPENGL_ES2) - GLint major, minor; - glGetIntegerv(GL_MAJOR_VERSION, &major); - glGetIntegerv(GL_MINOR_VERSION, &minor); - g_GlVersion = major * 1000 + minor; -#else - g_GlVersion = 2000; // GLES 2 -#endif - - // Setup back-end capabilities flags - ImGuiIO& io = ImGui::GetIO(); - io.BackendRendererName = "imgui_impl_opengl3"; -#if IMGUI_IMPL_OPENGL_MAY_HAVE_VTX_OFFSET - if (g_GlVersion >= 3200) - io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset; // We can honor the ImDrawCmd::VtxOffset field, allowing for large meshes. -#endif - - // Store GLSL version string so we can refer to it later in case we recreate shaders. - // Note: GLSL version is NOT the same as GL version. Leave this to NULL if unsure. -#if defined(IMGUI_IMPL_OPENGL_ES2) - if (glsl_version == NULL) - glsl_version = "#version 100"; -#elif defined(IMGUI_IMPL_OPENGL_ES3) - if (glsl_version == NULL) - glsl_version = "#version 300 es"; -#else - if (glsl_version == NULL) - glsl_version = "#version 130"; -#endif - IM_ASSERT((int)strlen(glsl_version) + 2 < IM_ARRAYSIZE(g_GlslVersionString)); - strcpy(g_GlslVersionString, glsl_version); - strcat(g_GlslVersionString, "\n"); - - // Dummy construct to make it easily visible in the IDE and debugger which GL loader has been selected. - // The code actually never uses the 'gl_loader' variable! It is only here so you can read it! - // If auto-detection fails or doesn't select the same GL loader file as used by your application, - // you are likely to get a crash below. - // You can explicitly select a loader by using '#define IMGUI_IMPL_OPENGL_LOADER_XXX' in imconfig.h or compiler command-line. - const char* gl_loader = "Unknown"; - IM_UNUSED(gl_loader); -#if defined(IMGUI_IMPL_OPENGL_LOADER_GL3W) - gl_loader = "GL3W"; -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLEW) - gl_loader = "GLEW"; -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLAD) - gl_loader = "GLAD"; -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING2) - gl_loader = "glbinding2"; -#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING3) - gl_loader = "glbinding3"; -#elif defined(IMGUI_IMPL_OPENGL_LOADER_CUSTOM) - gl_loader = "custom"; -#else - gl_loader = "none"; -#endif - - // Make a dummy GL call (we don't actually need the result) - // IF YOU GET A CRASH HERE: it probably means that you haven't initialized the OpenGL function loader used by this code. - // Desktop OpenGL 3/4 need a function loader. See the IMGUI_IMPL_OPENGL_LOADER_xxx explanation above. - GLint current_texture; - glGetIntegerv(GL_TEXTURE_BINDING_2D, ¤t_texture); - - return true; -} - -void ImGui_ImplOpenGL3_Shutdown() -{ - ImGui_ImplOpenGL3_DestroyDeviceObjects(); -} - -void ImGui_ImplOpenGL3_NewFrame() -{ - if (!g_ShaderHandle) - ImGui_ImplOpenGL3_CreateDeviceObjects(); -} - -static void ImGui_ImplOpenGL3_SetupRenderState(ImDrawData* draw_data, int fb_width, int fb_height, GLuint vertex_array_object) -{ - // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, polygon fill - glEnable(GL_BLEND); - glBlendEquation(GL_FUNC_ADD); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glDisable(GL_CULL_FACE); - glDisable(GL_DEPTH_TEST); - glEnable(GL_SCISSOR_TEST); -#ifdef GL_POLYGON_MODE - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); -#endif - - // Setup viewport, orthographic projection matrix - // Our visible imgui space lies from draw_data->DisplayPos (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayPos is (0,0) for single viewport apps. - glViewport(0, 0, (GLsizei)fb_width, (GLsizei)fb_height); - float L = draw_data->DisplayPos.x; - float R = draw_data->DisplayPos.x + draw_data->DisplaySize.x; - float T = draw_data->DisplayPos.y; - float B = draw_data->DisplayPos.y + draw_data->DisplaySize.y; - const float ortho_projection[4][4] = - { - { 2.0f/(R-L), 0.0f, 0.0f, 0.0f }, - { 0.0f, 2.0f/(T-B), 0.0f, 0.0f }, - { 0.0f, 0.0f, -1.0f, 0.0f }, - { (R+L)/(L-R), (T+B)/(B-T), 0.0f, 1.0f }, - }; - glUseProgram(g_ShaderHandle); - glUniform1i(g_AttribLocationTex, 0); - glUniformMatrix4fv(g_AttribLocationProjMtx, 1, GL_FALSE, &ortho_projection[0][0]); -#ifdef GL_SAMPLER_BINDING - glBindSampler(0, 0); // We use combined texture/sampler state. Applications using GL 3.3 may set that otherwise. -#endif - - (void)vertex_array_object; -#ifndef IMGUI_IMPL_OPENGL_ES2 - glBindVertexArray(vertex_array_object); -#endif - - // Bind vertex/index buffers and setup attributes for ImDrawVert - glBindBuffer(GL_ARRAY_BUFFER, g_VboHandle); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, g_ElementsHandle); - glEnableVertexAttribArray(g_AttribLocationVtxPos); - glEnableVertexAttribArray(g_AttribLocationVtxUV); - glEnableVertexAttribArray(g_AttribLocationVtxColor); - glVertexAttribPointer(g_AttribLocationVtxPos, 2, GL_FLOAT, GL_FALSE, sizeof(ImDrawVert), (GLvoid*)IM_OFFSETOF(ImDrawVert, pos)); - glVertexAttribPointer(g_AttribLocationVtxUV, 2, GL_FLOAT, GL_FALSE, sizeof(ImDrawVert), (GLvoid*)IM_OFFSETOF(ImDrawVert, uv)); - glVertexAttribPointer(g_AttribLocationVtxColor, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ImDrawVert), (GLvoid*)IM_OFFSETOF(ImDrawVert, col)); -} - -// OpenGL3 Render function. -// (this used to be set in io.RenderDrawListsFn and called by ImGui::Render(), but you can now call this directly from your main loop) -// Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. -void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data) -{ - // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) - int fb_width = (int)(draw_data->DisplaySize.x * draw_data->FramebufferScale.x); - int fb_height = (int)(draw_data->DisplaySize.y * draw_data->FramebufferScale.y); - if (fb_width <= 0 || fb_height <= 0) - return; - - // Backup GL state - GLenum last_active_texture; glGetIntegerv(GL_ACTIVE_TEXTURE, (GLint*)&last_active_texture); - glActiveTexture(GL_TEXTURE0); - GLint last_program; glGetIntegerv(GL_CURRENT_PROGRAM, &last_program); - GLint last_texture; glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture); -#ifdef GL_SAMPLER_BINDING - GLint last_sampler; glGetIntegerv(GL_SAMPLER_BINDING, &last_sampler); -#endif - GLint last_array_buffer; glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &last_array_buffer); -#ifndef IMGUI_IMPL_OPENGL_ES2 - GLint last_vertex_array_object; glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &last_vertex_array_object); -#endif -#ifdef GL_POLYGON_MODE - GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode); -#endif - GLint last_viewport[4]; glGetIntegerv(GL_VIEWPORT, last_viewport); - GLint last_scissor_box[4]; glGetIntegerv(GL_SCISSOR_BOX, last_scissor_box); - GLenum last_blend_src_rgb; glGetIntegerv(GL_BLEND_SRC_RGB, (GLint*)&last_blend_src_rgb); - GLenum last_blend_dst_rgb; glGetIntegerv(GL_BLEND_DST_RGB, (GLint*)&last_blend_dst_rgb); - GLenum last_blend_src_alpha; glGetIntegerv(GL_BLEND_SRC_ALPHA, (GLint*)&last_blend_src_alpha); - GLenum last_blend_dst_alpha; glGetIntegerv(GL_BLEND_DST_ALPHA, (GLint*)&last_blend_dst_alpha); - GLenum last_blend_equation_rgb; glGetIntegerv(GL_BLEND_EQUATION_RGB, (GLint*)&last_blend_equation_rgb); - GLenum last_blend_equation_alpha; glGetIntegerv(GL_BLEND_EQUATION_ALPHA, (GLint*)&last_blend_equation_alpha); - GLboolean last_enable_blend = glIsEnabled(GL_BLEND); - GLboolean last_enable_cull_face = glIsEnabled(GL_CULL_FACE); - GLboolean last_enable_depth_test = glIsEnabled(GL_DEPTH_TEST); - GLboolean last_enable_scissor_test = glIsEnabled(GL_SCISSOR_TEST); - bool clip_origin_lower_left = true; -#if defined(GL_CLIP_ORIGIN) && !defined(__APPLE__) - GLenum last_clip_origin = 0; glGetIntegerv(GL_CLIP_ORIGIN, (GLint*)&last_clip_origin); // Support for GL 4.5's glClipControl(GL_UPPER_LEFT) - if (last_clip_origin == GL_UPPER_LEFT) - clip_origin_lower_left = false; -#endif - - // Setup desired GL state - // Recreate the VAO every time (this is to easily allow multiple GL contexts to be rendered to. VAO are not shared among GL contexts) - // The renderer would actually work without any VAO bound, but then our VertexAttrib calls would overwrite the default one currently bound. - GLuint vertex_array_object = 0; -#ifndef IMGUI_IMPL_OPENGL_ES2 - glGenVertexArrays(1, &vertex_array_object); -#endif - ImGui_ImplOpenGL3_SetupRenderState(draw_data, fb_width, fb_height, vertex_array_object); - - // Will project scissor/clipping rectangles into framebuffer space - ImVec2 clip_off = draw_data->DisplayPos; // (0,0) unless using multi-viewports - ImVec2 clip_scale = draw_data->FramebufferScale; // (1,1) unless using retina display which are often (2,2) - - // Render command lists - for (int n = 0; n < draw_data->CmdListsCount; n++) - { - const ImDrawList* cmd_list = draw_data->CmdLists[n]; - - // Upload vertex/index buffers - glBufferData(GL_ARRAY_BUFFER, (GLsizeiptr)cmd_list->VtxBuffer.Size * sizeof(ImDrawVert), (const GLvoid*)cmd_list->VtxBuffer.Data, GL_STREAM_DRAW); - glBufferData(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)cmd_list->IdxBuffer.Size * sizeof(ImDrawIdx), (const GLvoid*)cmd_list->IdxBuffer.Data, GL_STREAM_DRAW); - - for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++) - { - const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i]; - if (pcmd->UserCallback != NULL) - { - // User callback, registered via ImDrawList::AddCallback() - // (ImDrawCallback_ResetRenderState is a special callback value used by the user to request the renderer to reset render state.) - if (pcmd->UserCallback == ImDrawCallback_ResetRenderState) - ImGui_ImplOpenGL3_SetupRenderState(draw_data, fb_width, fb_height, vertex_array_object); - else - pcmd->UserCallback(cmd_list, pcmd); - } - else - { - // Project scissor/clipping rectangles into framebuffer space - ImVec4 clip_rect; - clip_rect.x = (pcmd->ClipRect.x - clip_off.x) * clip_scale.x; - clip_rect.y = (pcmd->ClipRect.y - clip_off.y) * clip_scale.y; - clip_rect.z = (pcmd->ClipRect.z - clip_off.x) * clip_scale.x; - clip_rect.w = (pcmd->ClipRect.w - clip_off.y) * clip_scale.y; - - if (clip_rect.x < fb_width && clip_rect.y < fb_height && clip_rect.z >= 0.0f && clip_rect.w >= 0.0f) - { - // Apply scissor/clipping rectangle - if (clip_origin_lower_left) - glScissor((int)clip_rect.x, (int)(fb_height - clip_rect.w), (int)(clip_rect.z - clip_rect.x), (int)(clip_rect.w - clip_rect.y)); - else - glScissor((int)clip_rect.x, (int)clip_rect.y, (int)clip_rect.z, (int)clip_rect.w); // Support for GL 4.5 rarely used glClipControl(GL_UPPER_LEFT) - - // Bind texture, Draw - glBindTexture(GL_TEXTURE_2D, (GLuint)(intptr_t)pcmd->TextureId); -#if IMGUI_IMPL_OPENGL_MAY_HAVE_VTX_OFFSET - if (g_GlVersion >= 3200) - glDrawElementsBaseVertex(GL_TRIANGLES, (GLsizei)pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, (void*)(intptr_t)(pcmd->IdxOffset * sizeof(ImDrawIdx)), (GLint)pcmd->VtxOffset); - else -#endif - glDrawElements(GL_TRIANGLES, (GLsizei)pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, (void*)(intptr_t)(pcmd->IdxOffset * sizeof(ImDrawIdx))); - } - } - } - } - - // Destroy the temporary VAO -#ifndef IMGUI_IMPL_OPENGL_ES2 - glDeleteVertexArrays(1, &vertex_array_object); -#endif - - // Restore modified GL state - glUseProgram(last_program); - glBindTexture(GL_TEXTURE_2D, last_texture); -#ifdef GL_SAMPLER_BINDING - glBindSampler(0, last_sampler); -#endif - glActiveTexture(last_active_texture); -#ifndef IMGUI_IMPL_OPENGL_ES2 - glBindVertexArray(last_vertex_array_object); -#endif - glBindBuffer(GL_ARRAY_BUFFER, last_array_buffer); - glBlendEquationSeparate(last_blend_equation_rgb, last_blend_equation_alpha); - glBlendFuncSeparate(last_blend_src_rgb, last_blend_dst_rgb, last_blend_src_alpha, last_blend_dst_alpha); - if (last_enable_blend) glEnable(GL_BLEND); else glDisable(GL_BLEND); - if (last_enable_cull_face) glEnable(GL_CULL_FACE); else glDisable(GL_CULL_FACE); - if (last_enable_depth_test) glEnable(GL_DEPTH_TEST); else glDisable(GL_DEPTH_TEST); - if (last_enable_scissor_test) glEnable(GL_SCISSOR_TEST); else glDisable(GL_SCISSOR_TEST); -#ifdef GL_POLYGON_MODE - glPolygonMode(GL_FRONT_AND_BACK, (GLenum)last_polygon_mode[0]); -#endif - glViewport(last_viewport[0], last_viewport[1], (GLsizei)last_viewport[2], (GLsizei)last_viewport[3]); - glScissor(last_scissor_box[0], last_scissor_box[1], (GLsizei)last_scissor_box[2], (GLsizei)last_scissor_box[3]); -} - -bool ImGui_ImplOpenGL3_CreateFontsTexture() -{ - // Build texture atlas - ImGuiIO& io = ImGui::GetIO(); - unsigned char* pixels; - int width, height; - io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); // Load as RGBA 32-bit (75% of the memory is wasted, but default font is so small) because it is more likely to be compatible with user's existing shaders. If your ImTextureId represent a higher-level concept than just a GL texture id, consider calling GetTexDataAsAlpha8() instead to save on GPU memory. - - // Upload texture to graphics system - GLint last_texture; - glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture); - glGenTextures(1, &g_FontTexture); - glBindTexture(GL_TEXTURE_2D, g_FontTexture); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); -#ifdef GL_UNPACK_ROW_LENGTH - glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); -#endif - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels); - - // Store our identifier - io.Fonts->TexID = (ImTextureID)(intptr_t)g_FontTexture; - - // Restore state - glBindTexture(GL_TEXTURE_2D, last_texture); - - return true; -} - -void ImGui_ImplOpenGL3_DestroyFontsTexture() -{ - if (g_FontTexture) - { - ImGuiIO& io = ImGui::GetIO(); - glDeleteTextures(1, &g_FontTexture); - io.Fonts->TexID = 0; - g_FontTexture = 0; - } -} - -// If you get an error please report on github. You may try different GL context version or GLSL version. See GL<>GLSL version table at the top of this file. -static bool CheckShader(GLuint handle, const char* desc) -{ - GLint status = 0, log_length = 0; - glGetShaderiv(handle, GL_COMPILE_STATUS, &status); - glGetShaderiv(handle, GL_INFO_LOG_LENGTH, &log_length); - if ((GLboolean)status == GL_FALSE) - fprintf(stderr, "ERROR: ImGui_ImplOpenGL3_CreateDeviceObjects: failed to compile %s!\n", desc); - if (log_length > 1) - { - ImVector buf; - buf.resize((int)(log_length + 1)); - glGetShaderInfoLog(handle, log_length, NULL, (GLchar*)buf.begin()); - fprintf(stderr, "%s\n", buf.begin()); - } - return (GLboolean)status == GL_TRUE; -} - -// If you get an error please report on GitHub. You may try different GL context version or GLSL version. -static bool CheckProgram(GLuint handle, const char* desc) -{ - GLint status = 0, log_length = 0; - glGetProgramiv(handle, GL_LINK_STATUS, &status); - glGetProgramiv(handle, GL_INFO_LOG_LENGTH, &log_length); - if ((GLboolean)status == GL_FALSE) - fprintf(stderr, "ERROR: ImGui_ImplOpenGL3_CreateDeviceObjects: failed to link %s! (with GLSL '%s')\n", desc, g_GlslVersionString); - if (log_length > 1) - { - ImVector buf; - buf.resize((int)(log_length + 1)); - glGetProgramInfoLog(handle, log_length, NULL, (GLchar*)buf.begin()); - fprintf(stderr, "%s\n", buf.begin()); - } - return (GLboolean)status == GL_TRUE; -} - -bool ImGui_ImplOpenGL3_CreateDeviceObjects() -{ - // Backup GL state - GLint last_texture, last_array_buffer; - glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture); - glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &last_array_buffer); -#ifndef IMGUI_IMPL_OPENGL_ES2 - GLint last_vertex_array; - glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &last_vertex_array); -#endif - - // Parse GLSL version string - int glsl_version = 130; - sscanf(g_GlslVersionString, "#version %d", &glsl_version); - - const GLchar* vertex_shader_glsl_120 = - "uniform mat4 ProjMtx;\n" - "attribute vec2 Position;\n" - "attribute vec2 UV;\n" - "attribute vec4 Color;\n" - "varying vec2 Frag_UV;\n" - "varying vec4 Frag_Color;\n" - "void main()\n" - "{\n" - " Frag_UV = UV;\n" - " Frag_Color = Color;\n" - " gl_Position = ProjMtx * vec4(Position.xy,0,1);\n" - "}\n"; - - const GLchar* vertex_shader_glsl_130 = - "uniform mat4 ProjMtx;\n" - "in vec2 Position;\n" - "in vec2 UV;\n" - "in vec4 Color;\n" - "out vec2 Frag_UV;\n" - "out vec4 Frag_Color;\n" - "void main()\n" - "{\n" - " Frag_UV = UV;\n" - " Frag_Color = Color;\n" - " gl_Position = ProjMtx * vec4(Position.xy,0,1);\n" - "}\n"; - - const GLchar* vertex_shader_glsl_300_es = - "precision mediump float;\n" - "layout (location = 0) in vec2 Position;\n" - "layout (location = 1) in vec2 UV;\n" - "layout (location = 2) in vec4 Color;\n" - "uniform mat4 ProjMtx;\n" - "out vec2 Frag_UV;\n" - "out vec4 Frag_Color;\n" - "void main()\n" - "{\n" - " Frag_UV = UV;\n" - " Frag_Color = Color;\n" - " gl_Position = ProjMtx * vec4(Position.xy,0,1);\n" - "}\n"; - - const GLchar* vertex_shader_glsl_410_core = - "layout (location = 0) in vec2 Position;\n" - "layout (location = 1) in vec2 UV;\n" - "layout (location = 2) in vec4 Color;\n" - "uniform mat4 ProjMtx;\n" - "out vec2 Frag_UV;\n" - "out vec4 Frag_Color;\n" - "void main()\n" - "{\n" - " Frag_UV = UV;\n" - " Frag_Color = Color;\n" - " gl_Position = ProjMtx * vec4(Position.xy,0,1);\n" - "}\n"; - - const GLchar* fragment_shader_glsl_120 = - "#ifdef GL_ES\n" - " precision mediump float;\n" - "#endif\n" - "uniform sampler2D Texture;\n" - "varying vec2 Frag_UV;\n" - "varying vec4 Frag_Color;\n" - "void main()\n" - "{\n" - " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV.st);\n" - "}\n"; - - const GLchar* fragment_shader_glsl_130 = - "uniform sampler2D Texture;\n" - "in vec2 Frag_UV;\n" - "in vec4 Frag_Color;\n" - "out vec4 Out_Color;\n" - "void main()\n" - "{\n" - " Out_Color = Frag_Color * texture(Texture, Frag_UV.st);\n" - "}\n"; - - const GLchar* fragment_shader_glsl_300_es = - "precision mediump float;\n" - "uniform sampler2D Texture;\n" - "in vec2 Frag_UV;\n" - "in vec4 Frag_Color;\n" - "layout (location = 0) out vec4 Out_Color;\n" - "void main()\n" - "{\n" - " Out_Color = Frag_Color * texture(Texture, Frag_UV.st);\n" - "}\n"; - - const GLchar* fragment_shader_glsl_410_core = - "in vec2 Frag_UV;\n" - "in vec4 Frag_Color;\n" - "uniform sampler2D Texture;\n" - "layout (location = 0) out vec4 Out_Color;\n" - "void main()\n" - "{\n" - " Out_Color = Frag_Color * texture(Texture, Frag_UV.st);\n" - "}\n"; - - // Select shaders matching our GLSL versions - const GLchar* vertex_shader = NULL; - const GLchar* fragment_shader = NULL; - if (glsl_version < 130) - { - vertex_shader = vertex_shader_glsl_120; - fragment_shader = fragment_shader_glsl_120; - } - else if (glsl_version >= 410) - { - vertex_shader = vertex_shader_glsl_410_core; - fragment_shader = fragment_shader_glsl_410_core; - } - else if (glsl_version == 300) - { - vertex_shader = vertex_shader_glsl_300_es; - fragment_shader = fragment_shader_glsl_300_es; - } - else - { - vertex_shader = vertex_shader_glsl_130; - fragment_shader = fragment_shader_glsl_130; - } - - // Create shaders - const GLchar* vertex_shader_with_version[2] = { g_GlslVersionString, vertex_shader }; - g_VertHandle = glCreateShader(GL_VERTEX_SHADER); - glShaderSource(g_VertHandle, 2, vertex_shader_with_version, NULL); - glCompileShader(g_VertHandle); - CheckShader(g_VertHandle, "vertex shader"); - - const GLchar* fragment_shader_with_version[2] = { g_GlslVersionString, fragment_shader }; - g_FragHandle = glCreateShader(GL_FRAGMENT_SHADER); - glShaderSource(g_FragHandle, 2, fragment_shader_with_version, NULL); - glCompileShader(g_FragHandle); - CheckShader(g_FragHandle, "fragment shader"); - - g_ShaderHandle = glCreateProgram(); - glAttachShader(g_ShaderHandle, g_VertHandle); - glAttachShader(g_ShaderHandle, g_FragHandle); - glLinkProgram(g_ShaderHandle); - CheckProgram(g_ShaderHandle, "shader program"); - - g_AttribLocationTex = glGetUniformLocation(g_ShaderHandle, "Texture"); - g_AttribLocationProjMtx = glGetUniformLocation(g_ShaderHandle, "ProjMtx"); - g_AttribLocationVtxPos = glGetAttribLocation(g_ShaderHandle, "Position"); - g_AttribLocationVtxUV = glGetAttribLocation(g_ShaderHandle, "UV"); - g_AttribLocationVtxColor = glGetAttribLocation(g_ShaderHandle, "Color"); - - // Create buffers - glGenBuffers(1, &g_VboHandle); - glGenBuffers(1, &g_ElementsHandle); - - ImGui_ImplOpenGL3_CreateFontsTexture(); - - // Restore modified GL state - glBindTexture(GL_TEXTURE_2D, last_texture); - glBindBuffer(GL_ARRAY_BUFFER, last_array_buffer); -#ifndef IMGUI_IMPL_OPENGL_ES2 - glBindVertexArray(last_vertex_array); -#endif - - return true; -} - -void ImGui_ImplOpenGL3_DestroyDeviceObjects() -{ - if (g_VboHandle) { glDeleteBuffers(1, &g_VboHandle); g_VboHandle = 0; } - if (g_ElementsHandle) { glDeleteBuffers(1, &g_ElementsHandle); g_ElementsHandle = 0; } - if (g_ShaderHandle && g_VertHandle) { glDetachShader(g_ShaderHandle, g_VertHandle); } - if (g_ShaderHandle && g_FragHandle) { glDetachShader(g_ShaderHandle, g_FragHandle); } - if (g_VertHandle) { glDeleteShader(g_VertHandle); g_VertHandle = 0; } - if (g_FragHandle) { glDeleteShader(g_FragHandle); g_FragHandle = 0; } - if (g_ShaderHandle) { glDeleteProgram(g_ShaderHandle); g_ShaderHandle = 0; } - - ImGui_ImplOpenGL3_DestroyFontsTexture(); -} diff --git a/cmake/imgui/imgui_impl_opengl3.h b/cmake/imgui/imgui_impl_opengl3.h deleted file mode 100644 index a9a1e199..00000000 --- a/cmake/imgui/imgui_impl_opengl3.h +++ /dev/null @@ -1,70 +0,0 @@ -// dear imgui: Renderer for modern OpenGL with shaders / programmatic pipeline -// - Desktop GL: 2.x 3.x 4.x -// - Embedded GL: ES 2.0 (WebGL 1.0), ES 3.0 (WebGL 2.0) -// This needs to be used along with a Platform Binding (e.g. GLFW, SDL, Win32, custom..) - -// Implemented features: -// [X] Renderer: User texture binding. Use 'GLuint' OpenGL texture identifier as void*/ImTextureID. Read the FAQ about ImTextureID! -// [x] Renderer: Desktop GL only: Support for large meshes (64k+ vertices) with 16-bit indices. - -// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. -// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. -// https://github.com/ocornut/imgui - -// About Desktop OpenGL function loaders: -// Modern desktop OpenGL doesn't have a standard portable header file to load OpenGL function pointers. -// Helper libraries are often used for this purpose! Here we are supporting a few common ones (gl3w, glew, glad). -// You may use another loader/header of your choice (glext, glLoadGen, etc.), or chose to manually implement your own. - -// About GLSL version: -// The 'glsl_version' initialization parameter should be NULL (default) or a "#version XXX" string. -// On computer platform the GLSL version default to "#version 130". On OpenGL ES 3 platform it defaults to "#version 300 es" -// Only override if your GL version doesn't handle this GLSL version. See GLSL version table at the top of imgui_impl_opengl3.cpp. - -#pragma once - -// Backend API -IMGUI_IMPL_API bool ImGui_ImplOpenGL3_Init(const char* glsl_version = NULL); -IMGUI_IMPL_API void ImGui_ImplOpenGL3_Shutdown(); -IMGUI_IMPL_API void ImGui_ImplOpenGL3_NewFrame(); -IMGUI_IMPL_API void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data); - -// (Optional) Called by Init/NewFrame/Shutdown -IMGUI_IMPL_API bool ImGui_ImplOpenGL3_CreateFontsTexture(); -IMGUI_IMPL_API void ImGui_ImplOpenGL3_DestroyFontsTexture(); -IMGUI_IMPL_API bool ImGui_ImplOpenGL3_CreateDeviceObjects(); -IMGUI_IMPL_API void ImGui_ImplOpenGL3_DestroyDeviceObjects(); - -// Specific OpenGL versions -//#define IMGUI_IMPL_OPENGL_ES2 // Auto-detected on Emscripten -//#define IMGUI_IMPL_OPENGL_ES3 // Auto-detected on iOS/Android - -// Desktop OpenGL: attempt to detect default GL loader based on available header files. -// If auto-detection fails or doesn't select the same GL loader file as used by your application, -// you are likely to get a crash in ImGui_ImplOpenGL3_Init(). -// You can explicitly select a loader by using '#define IMGUI_IMPL_OPENGL_LOADER_XXX' in imconfig.h or compiler command-line. -#if !defined(IMGUI_IMPL_OPENGL_LOADER_GL3W) \ - && !defined(IMGUI_IMPL_OPENGL_LOADER_GLEW) \ - && !defined(IMGUI_IMPL_OPENGL_LOADER_GLAD) \ - && !defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING2) \ - && !defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING3) \ - && !defined(IMGUI_IMPL_OPENGL_LOADER_CUSTOM) - #if defined(__has_include) - #if __has_include() - #define IMGUI_IMPL_OPENGL_LOADER_GLEW - #elif __has_include() - #define IMGUI_IMPL_OPENGL_LOADER_GLAD - #elif __has_include() - #define IMGUI_IMPL_OPENGL_LOADER_GL3W - #elif __has_include() - #define IMGUI_IMPL_OPENGL_LOADER_GLBINDING3 - #elif __has_include() - #define IMGUI_IMPL_OPENGL_LOADER_GLBINDING2 - #else - #error "Cannot detect OpenGL loader!" - #endif - #else - #define IMGUI_IMPL_OPENGL_LOADER_GL3W // Default to GL3W - #endif -#endif - diff --git a/cmake/imgui/imgui_internal.h b/cmake/imgui/imgui_internal.h deleted file mode 100644 index eb5c82e7..00000000 --- a/cmake/imgui/imgui_internal.h +++ /dev/null @@ -1,1949 +0,0 @@ -// dear imgui, v1.76 WIP -// (internal structures/api) - -// You may use this file to debug, understand or extend ImGui features but we don't provide any guarantee of forward compatibility! -// Set: -// #define IMGUI_DEFINE_MATH_OPERATORS -// To implement maths operators for ImVec2 (disabled by default to not collide with using IM_VEC2_CLASS_EXTRA along with your own math types+operators) - -/* - -Index of this file: -// Header mess -// Forward declarations -// STB libraries includes -// Context pointer -// Generic helpers -// Misc data structures -// Main imgui context -// Tab bar, tab item -// Internal API - -*/ - -#pragma once -#ifndef IMGUI_DISABLE - -//----------------------------------------------------------------------------- -// Header mess -//----------------------------------------------------------------------------- - -#ifndef IMGUI_VERSION -#error Must include imgui.h before imgui_internal.h -#endif - -#include // FILE*, sscanf -#include // NULL, malloc, free, qsort, atoi, atof -#include // sqrtf, fabsf, fmodf, powf, floorf, ceilf, cosf, sinf -#include // INT_MIN, INT_MAX - -// Visual Studio warnings -#ifdef _MSC_VER -#pragma warning (push) -#pragma warning (disable: 4251) // class 'xxx' needs to have dll-interface to be used by clients of struct 'xxx' // when IMGUI_API is set to__declspec(dllexport) -#endif - -// Clang/GCC warnings with -Weverything -#if defined(__clang__) -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunused-function" // for stb_textedit.h -#pragma clang diagnostic ignored "-Wmissing-prototypes" // for stb_textedit.h -#pragma clang diagnostic ignored "-Wold-style-cast" -#if __has_warning("-Wzero-as-null-pointer-constant") -#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" -#endif -#if __has_warning("-Wdouble-promotion") -#pragma clang diagnostic ignored "-Wdouble-promotion" -#endif -#elif defined(__GNUC__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wpragmas" // warning: unknown option after '#pragma GCC diagnostic' kind -#pragma GCC diagnostic ignored "-Wclass-memaccess" // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead -#endif - -// Legacy defines -#ifdef IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS // Renamed in 1.74 -#error Use IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS -#endif -#ifdef IMGUI_DISABLE_MATH_FUNCTIONS // Renamed in 1.74 -#error Use IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS -#endif - -//----------------------------------------------------------------------------- -// Forward declarations -//----------------------------------------------------------------------------- - -struct ImBitVector; // Store 1-bit per value -struct ImRect; // An axis-aligned rectangle (2 points) -struct ImDrawDataBuilder; // Helper to build a ImDrawData instance -struct ImDrawListSharedData; // Data shared between all ImDrawList instances -struct ImGuiColorMod; // Stacked color modifier, backup of modified data so we can restore it -struct ImGuiColumnData; // Storage data for a single column -struct ImGuiColumns; // Storage data for a columns set -struct ImGuiContext; // Main Dear ImGui context -struct ImGuiDataTypeInfo; // Type information associated to a ImGuiDataType enum -struct ImGuiGroupData; // Stacked storage data for BeginGroup()/EndGroup() -struct ImGuiInputTextState; // Internal state of the currently focused/edited text input box -struct ImGuiItemHoveredDataBackup; // Backup and restore IsItemHovered() internal data -struct ImGuiMenuColumns; // Simple column measurement, currently used for MenuItem() only -struct ImGuiNavMoveResult; // Result of a directional navigation move query result -struct ImGuiNextWindowData; // Storage for SetNextWindow** functions -struct ImGuiNextItemData; // Storage for SetNextItem** functions -struct ImGuiPopupData; // Storage for current popup stack -struct ImGuiSettingsHandler; // Storage for one type registered in the .ini file -struct ImGuiStyleMod; // Stacked style modifier, backup of modified data so we can restore it -struct ImGuiTabBar; // Storage for a tab bar -struct ImGuiTabItem; // Storage for a tab item (within a tab bar) -struct ImGuiWindow; // Storage for one window -struct ImGuiWindowTempData; // Temporary storage for one window (that's the data which in theory we could ditch at the end of the frame) -struct ImGuiWindowSettings; // Storage for a window .ini settings (we keep one of those even if the actual window wasn't instanced during this session) - -// Use your programming IDE "Go to definition" facility on the names of the center columns to find the actual flags/enum lists. -typedef int ImGuiLayoutType; // -> enum ImGuiLayoutType_ // Enum: Horizontal or vertical -typedef int ImGuiButtonFlags; // -> enum ImGuiButtonFlags_ // Flags: for ButtonEx(), ButtonBehavior() -typedef int ImGuiColumnsFlags; // -> enum ImGuiColumnsFlags_ // Flags: BeginColumns() -typedef int ImGuiDragFlags; // -> enum ImGuiDragFlags_ // Flags: for DragBehavior() -typedef int ImGuiItemFlags; // -> enum ImGuiItemFlags_ // Flags: for PushItemFlag() -typedef int ImGuiItemStatusFlags; // -> enum ImGuiItemStatusFlags_ // Flags: for DC.LastItemStatusFlags -typedef int ImGuiNavHighlightFlags; // -> enum ImGuiNavHighlightFlags_ // Flags: for RenderNavHighlight() -typedef int ImGuiNavDirSourceFlags; // -> enum ImGuiNavDirSourceFlags_ // Flags: for GetNavInputAmount2d() -typedef int ImGuiNavMoveFlags; // -> enum ImGuiNavMoveFlags_ // Flags: for navigation requests -typedef int ImGuiNextItemDataFlags; // -> enum ImGuiNextItemDataFlags_ // Flags: for SetNextItemXXX() functions -typedef int ImGuiNextWindowDataFlags; // -> enum ImGuiNextWindowDataFlags_// Flags: for SetNextWindowXXX() functions -typedef int ImGuiSeparatorFlags; // -> enum ImGuiSeparatorFlags_ // Flags: for SeparatorEx() -typedef int ImGuiSliderFlags; // -> enum ImGuiSliderFlags_ // Flags: for SliderBehavior() -typedef int ImGuiTextFlags; // -> enum ImGuiTextFlags_ // Flags: for TextEx() -typedef int ImGuiTooltipFlags; // -> enum ImGuiTooltipFlags_ // Flags: for BeginTooltipEx() - -//------------------------------------------------------------------------- -// STB libraries includes -//------------------------------------------------------------------------- - -namespace ImStb -{ - -#undef STB_TEXTEDIT_STRING -#undef STB_TEXTEDIT_CHARTYPE -#define STB_TEXTEDIT_STRING ImGuiInputTextState -#define STB_TEXTEDIT_CHARTYPE ImWchar -#define STB_TEXTEDIT_GETWIDTH_NEWLINE -1.0f -#define STB_TEXTEDIT_UNDOSTATECOUNT 99 -#define STB_TEXTEDIT_UNDOCHARCOUNT 999 -#include "imstb_textedit.h" - -} // namespace ImStb - -//----------------------------------------------------------------------------- -// Context pointer -//----------------------------------------------------------------------------- - -#ifndef GImGui -extern IMGUI_API ImGuiContext* GImGui; // Current implicit context pointer -#endif - -//----------------------------------------------------------------------------- -// Macros -//----------------------------------------------------------------------------- - -// Debug Logging -#ifndef IMGUI_DEBUG_LOG -#define IMGUI_DEBUG_LOG(_FMT,...) printf("[%05d] " _FMT, GImGui->FrameCount, __VA_ARGS__) -#endif - -// Static Asserts -#if (__cplusplus >= 201100) -#define IM_STATIC_ASSERT(_COND) static_assert(_COND, "") -#else -#define IM_STATIC_ASSERT(_COND) typedef char static_assertion_##__line__[(_COND)?1:-1] -#endif - -// "Paranoid" Debug Asserts are meant to only be enabled during specific debugging/work, otherwise would slow down the code too much. -// We currently don't have many of those so the effect is currently negligible, but onward intent to add more aggressive ones in the code. -//#define IMGUI_DEBUG_PARANOID -#ifdef IMGUI_DEBUG_PARANOID -#define IM_ASSERT_PARANOID(_EXPR) IM_ASSERT(_EXPR) -#else -#define IM_ASSERT_PARANOID(_EXPR) -#endif - -// Error handling -// Down the line in some frameworks/languages we would like to have a way to redirect those to the programmer and recover from more faults. -#ifndef IM_ASSERT_USER_ERROR -#define IM_ASSERT_USER_ERROR(_EXP,_MSG) IM_ASSERT((_EXP) && _MSG) // Recoverable User Error -#endif - -// Misc Macros -#define IM_PI 3.14159265358979323846f -#ifdef _WIN32 -#define IM_NEWLINE "\r\n" // Play it nice with Windows users (Update: since 2018-05, Notepad finally appears to support Unix-style carriage returns!) -#else -#define IM_NEWLINE "\n" -#endif -#define IM_TABSIZE (4) -#define IM_F32_TO_INT8_UNBOUND(_VAL) ((int)((_VAL) * 255.0f + ((_VAL)>=0 ? 0.5f : -0.5f))) // Unsaturated, for display purpose -#define IM_F32_TO_INT8_SAT(_VAL) ((int)(ImSaturate(_VAL) * 255.0f + 0.5f)) // Saturated, always output 0..255 -#define IM_FLOOR(_VAL) ((float)(int)(_VAL)) // ImFloor() is not inlined in MSVC debug builds -#define IM_ROUND(_VAL) ((float)(int)((_VAL) + 0.5f)) // - -// Enforce cdecl calling convention for functions called by the standard library, in case compilation settings changed the default to e.g. __vectorcall -#ifdef _MSC_VER -#define IMGUI_CDECL __cdecl -#else -#define IMGUI_CDECL -#endif - -//----------------------------------------------------------------------------- -// Generic helpers -// Note that the ImXXX helpers functions are lower-level than ImGui functions. -// ImGui functions or the ImGui context are never called/used from other ImXXX functions. -//----------------------------------------------------------------------------- -// - Helpers: Misc -// - Helpers: Bit manipulation -// - Helpers: String, Formatting -// - Helpers: UTF-8 <> wchar conversions -// - Helpers: ImVec2/ImVec4 operators -// - Helpers: Maths -// - Helpers: Geometry -// - Helpers: Bit arrays -// - Helper: ImBitVector -// - Helper: ImPool<> -// - Helper: ImChunkStream<> -//----------------------------------------------------------------------------- - -// Helpers: Misc -#define ImQsort qsort -IMGUI_API ImU32 ImHashData(const void* data, size_t data_size, ImU32 seed = 0); -IMGUI_API ImU32 ImHashStr(const char* data, size_t data_size = 0, ImU32 seed = 0); -#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS -static inline ImU32 ImHash(const void* data, int size, ImU32 seed = 0) { return size ? ImHashData(data, (size_t)size, seed) : ImHashStr((const char*)data, 0, seed); } // [moved to ImHashStr/ImHashData in 1.68] -#endif - -// Helpers: Color Blending -IMGUI_API ImU32 ImAlphaBlendColors(ImU32 col_a, ImU32 col_b); - -// Helpers: Bit manipulation -static inline bool ImIsPowerOfTwo(int v) { return v != 0 && (v & (v - 1)) == 0; } -static inline int ImUpperPowerOfTwo(int v) { v--; v |= v >> 1; v |= v >> 2; v |= v >> 4; v |= v >> 8; v |= v >> 16; v++; return v; } - -// Helpers: String, Formatting -IMGUI_API int ImStricmp(const char* str1, const char* str2); -IMGUI_API int ImStrnicmp(const char* str1, const char* str2, size_t count); -IMGUI_API void ImStrncpy(char* dst, const char* src, size_t count); -IMGUI_API char* ImStrdup(const char* str); -IMGUI_API char* ImStrdupcpy(char* dst, size_t* p_dst_size, const char* str); -IMGUI_API const char* ImStrchrRange(const char* str_begin, const char* str_end, char c); -IMGUI_API int ImStrlenW(const ImWchar* str); -IMGUI_API const char* ImStreolRange(const char* str, const char* str_end); // End end-of-line -IMGUI_API const ImWchar*ImStrbolW(const ImWchar* buf_mid_line, const ImWchar* buf_begin); // Find beginning-of-line -IMGUI_API const char* ImStristr(const char* haystack, const char* haystack_end, const char* needle, const char* needle_end); -IMGUI_API void ImStrTrimBlanks(char* str); -IMGUI_API const char* ImStrSkipBlank(const char* str); -IMGUI_API int ImFormatString(char* buf, size_t buf_size, const char* fmt, ...) IM_FMTARGS(3); -IMGUI_API int ImFormatStringV(char* buf, size_t buf_size, const char* fmt, va_list args) IM_FMTLIST(3); -IMGUI_API const char* ImParseFormatFindStart(const char* format); -IMGUI_API const char* ImParseFormatFindEnd(const char* format); -IMGUI_API const char* ImParseFormatTrimDecorations(const char* format, char* buf, size_t buf_size); -IMGUI_API int ImParseFormatPrecision(const char* format, int default_value); -static inline bool ImCharIsBlankA(char c) { return c == ' ' || c == '\t'; } -static inline bool ImCharIsBlankW(unsigned int c) { return c == ' ' || c == '\t' || c == 0x3000; } - -// Helpers: UTF-8 <> wchar conversions -IMGUI_API int ImTextStrToUtf8(char* buf, int buf_size, const ImWchar* in_text, const ImWchar* in_text_end); // return output UTF-8 bytes count -IMGUI_API int ImTextCharFromUtf8(unsigned int* out_char, const char* in_text, const char* in_text_end); // read one character. return input UTF-8 bytes count -IMGUI_API int ImTextStrFromUtf8(ImWchar* buf, int buf_size, const char* in_text, const char* in_text_end, const char** in_remaining = NULL); // return input UTF-8 bytes count -IMGUI_API int ImTextCountCharsFromUtf8(const char* in_text, const char* in_text_end); // return number of UTF-8 code-points (NOT bytes count) -IMGUI_API int ImTextCountUtf8BytesFromChar(const char* in_text, const char* in_text_end); // return number of bytes to express one char in UTF-8 -IMGUI_API int ImTextCountUtf8BytesFromStr(const ImWchar* in_text, const ImWchar* in_text_end); // return number of bytes to express string in UTF-8 - -// Helpers: ImVec2/ImVec4 operators -// We are keeping those disabled by default so they don't leak in user space, to allow user enabling implicit cast operators between ImVec2 and their own types (using IM_VEC2_CLASS_EXTRA etc.) -// We unfortunately don't have a unary- operator for ImVec2 because this would needs to be defined inside the class itself. -#ifdef IMGUI_DEFINE_MATH_OPERATORS -static inline ImVec2 operator*(const ImVec2& lhs, const float rhs) { return ImVec2(lhs.x*rhs, lhs.y*rhs); } -static inline ImVec2 operator/(const ImVec2& lhs, const float rhs) { return ImVec2(lhs.x/rhs, lhs.y/rhs); } -static inline ImVec2 operator+(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x+rhs.x, lhs.y+rhs.y); } -static inline ImVec2 operator-(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x-rhs.x, lhs.y-rhs.y); } -static inline ImVec2 operator*(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x*rhs.x, lhs.y*rhs.y); } -static inline ImVec2 operator/(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x/rhs.x, lhs.y/rhs.y); } -static inline ImVec2& operator*=(ImVec2& lhs, const float rhs) { lhs.x *= rhs; lhs.y *= rhs; return lhs; } -static inline ImVec2& operator/=(ImVec2& lhs, const float rhs) { lhs.x /= rhs; lhs.y /= rhs; return lhs; } -static inline ImVec2& operator+=(ImVec2& lhs, const ImVec2& rhs) { lhs.x += rhs.x; lhs.y += rhs.y; return lhs; } -static inline ImVec2& operator-=(ImVec2& lhs, const ImVec2& rhs) { lhs.x -= rhs.x; lhs.y -= rhs.y; return lhs; } -static inline ImVec2& operator*=(ImVec2& lhs, const ImVec2& rhs) { lhs.x *= rhs.x; lhs.y *= rhs.y; return lhs; } -static inline ImVec2& operator/=(ImVec2& lhs, const ImVec2& rhs) { lhs.x /= rhs.x; lhs.y /= rhs.y; return lhs; } -static inline ImVec4 operator+(const ImVec4& lhs, const ImVec4& rhs) { return ImVec4(lhs.x+rhs.x, lhs.y+rhs.y, lhs.z+rhs.z, lhs.w+rhs.w); } -static inline ImVec4 operator-(const ImVec4& lhs, const ImVec4& rhs) { return ImVec4(lhs.x-rhs.x, lhs.y-rhs.y, lhs.z-rhs.z, lhs.w-rhs.w); } -static inline ImVec4 operator*(const ImVec4& lhs, const ImVec4& rhs) { return ImVec4(lhs.x*rhs.x, lhs.y*rhs.y, lhs.z*rhs.z, lhs.w*rhs.w); } -#endif - -// Helpers: File System -#ifdef IMGUI_DISABLE_FILE_FUNCTIONS -#define IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS -typedef void* ImFileHandle; -static inline ImFileHandle ImFileOpen(const char*, const char*) { return NULL; } -static inline bool ImFileClose(ImFileHandle) { return false; } -static inline ImU64 ImFileGetSize(ImFileHandle) { return (ImU64)-1; } -static inline ImU64 ImFileRead(void*, ImU64, ImU64, ImFileHandle) { return 0; } -static inline ImU64 ImFileWrite(const void*, ImU64, ImU64, ImFileHandle) { return 0; } -#endif - -#ifndef IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS -typedef FILE* ImFileHandle; -IMGUI_API ImFileHandle ImFileOpen(const char* filename, const char* mode); -IMGUI_API bool ImFileClose(ImFileHandle file); -IMGUI_API ImU64 ImFileGetSize(ImFileHandle file); -IMGUI_API ImU64 ImFileRead(void* data, ImU64 size, ImU64 count, ImFileHandle file); -IMGUI_API ImU64 ImFileWrite(const void* data, ImU64 size, ImU64 count, ImFileHandle file); -#else -#define IMGUI_DISABLE_TTY_FUNCTIONS // Can't use stdout, fflush if we are not using default file functions -#endif -IMGUI_API void* ImFileLoadToMemory(const char* filename, const char* mode, size_t* out_file_size = NULL, int padding_bytes = 0); - -// Helpers: Maths -// - Wrapper for standard libs functions. (Note that imgui_demo.cpp does _not_ use them to keep the code easy to copy) -#ifndef IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS -#define ImFabs(X) fabsf(X) -#define ImSqrt(X) sqrtf(X) -#define ImFmod(X, Y) fmodf((X), (Y)) -#define ImCos(X) cosf(X) -#define ImSin(X) sinf(X) -#define ImAcos(X) acosf(X) -#define ImAtan2(Y, X) atan2f((Y), (X)) -#define ImAtof(STR) atof(STR) -#define ImFloorStd(X) floorf(X) // We already uses our own ImFloor() { return (float)(int)v } internally so the standard one wrapper is named differently (it's used by e.g. stb_truetype) -#define ImCeil(X) ceilf(X) -static inline float ImPow(float x, float y) { return powf(x, y); } // DragBehaviorT/SliderBehaviorT uses ImPow with either float/double and need the precision -static inline double ImPow(double x, double y) { return pow(x, y); } -#endif -// - ImMin/ImMax/ImClamp/ImLerp/ImSwap are used by widgets which support variety of types: signed/unsigned int/long long float/double -// (Exceptionally using templates here but we could also redefine them for those types) -template static inline T ImMin(T lhs, T rhs) { return lhs < rhs ? lhs : rhs; } -template static inline T ImMax(T lhs, T rhs) { return lhs >= rhs ? lhs : rhs; } -template static inline T ImClamp(T v, T mn, T mx) { return (v < mn) ? mn : (v > mx) ? mx : v; } -template static inline T ImLerp(T a, T b, float t) { return (T)(a + (b - a) * t); } -template static inline void ImSwap(T& a, T& b) { T tmp = a; a = b; b = tmp; } -template static inline T ImAddClampOverflow(T a, T b, T mn, T mx) { if (b < 0 && (a < mn - b)) return mn; if (b > 0 && (a > mx - b)) return mx; return a + b; } -template static inline T ImSubClampOverflow(T a, T b, T mn, T mx) { if (b > 0 && (a < mn + b)) return mn; if (b < 0 && (a > mx + b)) return mx; return a - b; } -// - Misc maths helpers -static inline ImVec2 ImMin(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x < rhs.x ? lhs.x : rhs.x, lhs.y < rhs.y ? lhs.y : rhs.y); } -static inline ImVec2 ImMax(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x >= rhs.x ? lhs.x : rhs.x, lhs.y >= rhs.y ? lhs.y : rhs.y); } -static inline ImVec2 ImClamp(const ImVec2& v, const ImVec2& mn, ImVec2 mx) { return ImVec2((v.x < mn.x) ? mn.x : (v.x > mx.x) ? mx.x : v.x, (v.y < mn.y) ? mn.y : (v.y > mx.y) ? mx.y : v.y); } -static inline ImVec2 ImLerp(const ImVec2& a, const ImVec2& b, float t) { return ImVec2(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t); } -static inline ImVec2 ImLerp(const ImVec2& a, const ImVec2& b, const ImVec2& t) { return ImVec2(a.x + (b.x - a.x) * t.x, a.y + (b.y - a.y) * t.y); } -static inline ImVec4 ImLerp(const ImVec4& a, const ImVec4& b, float t) { return ImVec4(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t, a.z + (b.z - a.z) * t, a.w + (b.w - a.w) * t); } -static inline float ImSaturate(float f) { return (f < 0.0f) ? 0.0f : (f > 1.0f) ? 1.0f : f; } -static inline float ImLengthSqr(const ImVec2& lhs) { return lhs.x*lhs.x + lhs.y*lhs.y; } -static inline float ImLengthSqr(const ImVec4& lhs) { return lhs.x*lhs.x + lhs.y*lhs.y + lhs.z*lhs.z + lhs.w*lhs.w; } -static inline float ImInvLength(const ImVec2& lhs, float fail_value) { float d = lhs.x*lhs.x + lhs.y*lhs.y; if (d > 0.0f) return 1.0f / ImSqrt(d); return fail_value; } -static inline float ImFloor(float f) { return (float)(int)(f); } -static inline ImVec2 ImFloor(const ImVec2& v) { return ImVec2((float)(int)(v.x), (float)(int)(v.y)); } -static inline int ImModPositive(int a, int b) { return (a + b) % b; } -static inline float ImDot(const ImVec2& a, const ImVec2& b) { return a.x * b.x + a.y * b.y; } -static inline ImVec2 ImRotate(const ImVec2& v, float cos_a, float sin_a) { return ImVec2(v.x * cos_a - v.y * sin_a, v.x * sin_a + v.y * cos_a); } -static inline float ImLinearSweep(float current, float target, float speed) { if (current < target) return ImMin(current + speed, target); if (current > target) return ImMax(current - speed, target); return current; } -static inline ImVec2 ImMul(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x * rhs.x, lhs.y * rhs.y); } - -// Helpers: Geometry -IMGUI_API ImVec2 ImBezierCalc(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, float t); // Cubic Bezier -IMGUI_API ImVec2 ImBezierClosestPoint(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& p, int num_segments); // For curves with explicit number of segments -IMGUI_API ImVec2 ImBezierClosestPointCasteljau(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& p, float tess_tol);// For auto-tessellated curves you can use tess_tol = style.CurveTessellationTol -IMGUI_API ImVec2 ImLineClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& p); -IMGUI_API bool ImTriangleContainsPoint(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p); -IMGUI_API ImVec2 ImTriangleClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p); -IMGUI_API void ImTriangleBarycentricCoords(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p, float& out_u, float& out_v, float& out_w); -inline float ImTriangleArea(const ImVec2& a, const ImVec2& b, const ImVec2& c) { return ImFabs((a.x * (b.y - c.y)) + (b.x * (c.y - a.y)) + (c.x * (a.y - b.y))) * 0.5f; } -IMGUI_API ImGuiDir ImGetDirQuadrantFromDelta(float dx, float dy); - -// Helpers: Bit arrays -inline bool ImBitArrayTestBit(const ImU32* arr, int n) { ImU32 mask = (ImU32)1 << (n & 31); return (arr[n >> 5] & mask) != 0; } -inline void ImBitArrayClearBit(ImU32* arr, int n) { ImU32 mask = (ImU32)1 << (n & 31); arr[n >> 5] &= ~mask; } -inline void ImBitArraySetBit(ImU32* arr, int n) { ImU32 mask = (ImU32)1 << (n & 31); arr[n >> 5] |= mask; } -inline void ImBitArraySetBitRange(ImU32* arr, int n, int n2) -{ - while (n <= n2) - { - int a_mod = (n & 31); - int b_mod = ((n2 >= n + 31) ? 31 : (n2 & 31)) + 1; - ImU32 mask = (ImU32)(((ImU64)1 << b_mod) - 1) & ~(ImU32)(((ImU64)1 << a_mod) - 1); - arr[n >> 5] |= mask; - n = (n + 32) & ~31; - } -} - -// Helper: ImBitVector -// Store 1-bit per value. -struct IMGUI_API ImBitVector -{ - ImVector Storage; - void Create(int sz) { Storage.resize((sz + 31) >> 5); memset(Storage.Data, 0, (size_t)Storage.Size * sizeof(Storage.Data[0])); } - void Clear() { Storage.clear(); } - bool TestBit(int n) const { IM_ASSERT(n < (Storage.Size << 5)); return ImBitArrayTestBit(Storage.Data, n); } - void SetBit(int n) { IM_ASSERT(n < (Storage.Size << 5)); ImBitArraySetBit(Storage.Data, n); } - void ClearBit(int n) { IM_ASSERT(n < (Storage.Size << 5)); ImBitArrayClearBit(Storage.Data, n); } -}; - -// Helper: ImPool<> -// Basic keyed storage for contiguous instances, slow/amortized insertion, O(1) indexable, O(Log N) queries by ID over a dense/hot buffer, -// Honor constructor/destructor. Add/remove invalidate all pointers. Indexes have the same lifetime as the associated object. -typedef int ImPoolIdx; -template -struct IMGUI_API ImPool -{ - ImVector Buf; // Contiguous data - ImGuiStorage Map; // ID->Index - ImPoolIdx FreeIdx; // Next free idx to use - - ImPool() { FreeIdx = 0; } - ~ImPool() { Clear(); } - T* GetByKey(ImGuiID key) { int idx = Map.GetInt(key, -1); return (idx != -1) ? &Buf[idx] : NULL; } - T* GetByIndex(ImPoolIdx n) { return &Buf[n]; } - ImPoolIdx GetIndex(const T* p) const { IM_ASSERT(p >= Buf.Data && p < Buf.Data + Buf.Size); return (ImPoolIdx)(p - Buf.Data); } - T* GetOrAddByKey(ImGuiID key) { int* p_idx = Map.GetIntRef(key, -1); if (*p_idx != -1) return &Buf[*p_idx]; *p_idx = FreeIdx; return Add(); } - bool Contains(const T* p) const { return (p >= Buf.Data && p < Buf.Data + Buf.Size); } - void Clear() { for (int n = 0; n < Map.Data.Size; n++) { int idx = Map.Data[n].val_i; if (idx != -1) Buf[idx].~T(); } Map.Clear(); Buf.clear(); FreeIdx = 0; } - T* Add() { int idx = FreeIdx; if (idx == Buf.Size) { Buf.resize(Buf.Size + 1); FreeIdx++; } else { FreeIdx = *(int*)&Buf[idx]; } IM_PLACEMENT_NEW(&Buf[idx]) T(); return &Buf[idx]; } - void Remove(ImGuiID key, const T* p) { Remove(key, GetIndex(p)); } - void Remove(ImGuiID key, ImPoolIdx idx) { Buf[idx].~T(); *(int*)&Buf[idx] = FreeIdx; FreeIdx = idx; Map.SetInt(key, -1); } - void Reserve(int capacity) { Buf.reserve(capacity); Map.Data.reserve(capacity); } - int GetSize() const { return Buf.Size; } -}; - -// Helper: ImChunkStream<> -// Build and iterate a contiguous stream of variable-sized structures. -// This is used by Settings to store persistent data while reducing allocation count. -// We store the chunk size first, and align the final size on 4 bytes boundaries (this what the '(X + 3) & ~3' statement is for) -// The tedious/zealous amount of casting is to avoid -Wcast-align warnings. -template -struct IMGUI_API ImChunkStream -{ - ImVector Buf; - - void clear() { Buf.clear(); } - bool empty() const { return Buf.Size == 0; } - int size() const { return Buf.Size; } - T* alloc_chunk(size_t sz) { size_t HDR_SZ = 4; sz = ((HDR_SZ + sz) + 3u) & ~3u; int off = Buf.Size; Buf.resize(off + (int)sz); ((int*)(void*)(Buf.Data + off))[0] = (int)sz; return (T*)(void*)(Buf.Data + off + (int)HDR_SZ); } - T* begin() { size_t HDR_SZ = 4; if (!Buf.Data) return NULL; return (T*)(void*)(Buf.Data + HDR_SZ); } - T* next_chunk(T* p) { size_t HDR_SZ = 4; IM_ASSERT(p >= begin() && p < end()); p = (T*)(void*)((char*)(void*)p + chunk_size(p)); if (p == (T*)(void*)((char*)end() + HDR_SZ)) return (T*)0; IM_ASSERT(p < end()); return p; } - int chunk_size(const T* p) { return ((const int*)p)[-1]; } - T* end() { return (T*)(void*)(Buf.Data + Buf.Size); } - int offset_from_ptr(const T* p) { IM_ASSERT(p >= begin() && p < end()); const ptrdiff_t off = (const char*)p - Buf.Data; return (int)off; } - T* ptr_from_offset(int off) { IM_ASSERT(off >= 4 && off < Buf.Size); return (T*)(void*)(Buf.Data + off); } -}; - -//----------------------------------------------------------------------------- -// Misc data structures -//----------------------------------------------------------------------------- - -enum ImGuiButtonFlags_ -{ - ImGuiButtonFlags_None = 0, - ImGuiButtonFlags_Repeat = 1 << 0, // hold to repeat - ImGuiButtonFlags_PressedOnClick = 1 << 1, // return true on click (mouse down event) - ImGuiButtonFlags_PressedOnClickRelease = 1 << 2, // [Default] return true on click + release on same item <-- this is what the majority of Button are using - ImGuiButtonFlags_PressedOnClickReleaseAnywhere = 1 << 3, // return true on click + release even if the release event is not done while hovering the item - ImGuiButtonFlags_PressedOnRelease = 1 << 4, // return true on release (default requires click+release) - ImGuiButtonFlags_PressedOnDoubleClick = 1 << 5, // return true on double-click (default requires click+release) - ImGuiButtonFlags_PressedOnDragDropHold = 1 << 6, // return true when held into while we are drag and dropping another item (used by e.g. tree nodes, collapsing headers) - ImGuiButtonFlags_FlattenChildren = 1 << 7, // allow interactions even if a child window is overlapping - ImGuiButtonFlags_AllowItemOverlap = 1 << 8, // require previous frame HoveredId to either match id or be null before being usable, use along with SetItemAllowOverlap() - ImGuiButtonFlags_DontClosePopups = 1 << 9, // disable automatically closing parent popup on press // [UNUSED] - ImGuiButtonFlags_Disabled = 1 << 10, // disable interactions - ImGuiButtonFlags_AlignTextBaseLine = 1 << 11, // vertically align button to match text baseline - ButtonEx() only // FIXME: Should be removed and handled by SmallButton(), not possible currently because of DC.CursorPosPrevLine - ImGuiButtonFlags_NoKeyModifiers = 1 << 12, // disable mouse interaction if a key modifier is held - ImGuiButtonFlags_NoHoldingActiveId = 1 << 13, // don't set ActiveId while holding the mouse (ImGuiButtonFlags_PressedOnClick only) - ImGuiButtonFlags_NoNavFocus = 1 << 14, // don't override navigation focus when activated - ImGuiButtonFlags_NoHoveredOnFocus = 1 << 15, // don't report as hovered when nav focus is on this item - ImGuiButtonFlags_MouseButtonLeft = 1 << 16, // [Default] react on left mouse button - ImGuiButtonFlags_MouseButtonRight = 1 << 17, // react on right mouse button - ImGuiButtonFlags_MouseButtonMiddle = 1 << 18, // react on center mouse button - - ImGuiButtonFlags_MouseButtonMask_ = ImGuiButtonFlags_MouseButtonLeft | ImGuiButtonFlags_MouseButtonRight | ImGuiButtonFlags_MouseButtonMiddle, - ImGuiButtonFlags_MouseButtonShift_ = 16, - ImGuiButtonFlags_MouseButtonDefault_ = ImGuiButtonFlags_MouseButtonLeft, - ImGuiButtonFlags_PressedOnMask_ = ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_PressedOnClickRelease | ImGuiButtonFlags_PressedOnClickReleaseAnywhere | ImGuiButtonFlags_PressedOnRelease | ImGuiButtonFlags_PressedOnDoubleClick | ImGuiButtonFlags_PressedOnDragDropHold, - ImGuiButtonFlags_PressedOnDefault_ = ImGuiButtonFlags_PressedOnClickRelease -}; - -enum ImGuiSliderFlags_ -{ - ImGuiSliderFlags_None = 0, - ImGuiSliderFlags_Vertical = 1 << 0 -}; - -enum ImGuiDragFlags_ -{ - ImGuiDragFlags_None = 0, - ImGuiDragFlags_Vertical = 1 << 0 -}; - -enum ImGuiColumnsFlags_ -{ - // Default: 0 - ImGuiColumnsFlags_None = 0, - ImGuiColumnsFlags_NoBorder = 1 << 0, // Disable column dividers - ImGuiColumnsFlags_NoResize = 1 << 1, // Disable resizing columns when clicking on the dividers - ImGuiColumnsFlags_NoPreserveWidths = 1 << 2, // Disable column width preservation when adjusting columns - ImGuiColumnsFlags_NoForceWithinWindow = 1 << 3, // Disable forcing columns to fit within window - ImGuiColumnsFlags_GrowParentContentsSize= 1 << 4 // (WIP) Restore pre-1.51 behavior of extending the parent window contents size but _without affecting the columns width at all_. Will eventually remove. -}; - -// Extend ImGuiSelectableFlags_ -enum ImGuiSelectableFlagsPrivate_ -{ - // NB: need to be in sync with last value of ImGuiSelectableFlags_ - ImGuiSelectableFlags_NoHoldingActiveID = 1 << 20, - ImGuiSelectableFlags_SelectOnClick = 1 << 21, // Override button behavior to react on Click (default is Click+Release) - ImGuiSelectableFlags_SelectOnRelease = 1 << 22, // Override button behavior to react on Release (default is Click+Release) - ImGuiSelectableFlags_SpanAvailWidth = 1 << 23, // Span all avail width even if we declared less for layout purpose. FIXME: We may be able to remove this (added in 6251d379, 2bcafc86 for menus) - ImGuiSelectableFlags_DrawHoveredWhenHeld= 1 << 24, // Always show active when held, even is not hovered. This concept could probably be renamed/formalized somehow. - ImGuiSelectableFlags_SetNavIdOnHover = 1 << 25 -}; - -// Extend ImGuiTreeNodeFlags_ -enum ImGuiTreeNodeFlagsPrivate_ -{ - ImGuiTreeNodeFlags_ClipLabelForTrailingButton = 1 << 20 -}; - -enum ImGuiSeparatorFlags_ -{ - ImGuiSeparatorFlags_None = 0, - ImGuiSeparatorFlags_Horizontal = 1 << 0, // Axis default to current layout type, so generally Horizontal unless e.g. in a menu bar - ImGuiSeparatorFlags_Vertical = 1 << 1, - ImGuiSeparatorFlags_SpanAllColumns = 1 << 2 -}; - -// Transient per-window flags, reset at the beginning of the frame. For child window, inherited from parent on first Begin(). -// This is going to be exposed in imgui.h when stabilized enough. -enum ImGuiItemFlags_ -{ - ImGuiItemFlags_None = 0, - ImGuiItemFlags_NoTabStop = 1 << 0, // false - ImGuiItemFlags_ButtonRepeat = 1 << 1, // false // Button() will return true multiple times based on io.KeyRepeatDelay and io.KeyRepeatRate settings. - ImGuiItemFlags_Disabled = 1 << 2, // false // [BETA] Disable interactions but doesn't affect visuals yet. See github.com/ocornut/imgui/issues/211 - ImGuiItemFlags_NoNav = 1 << 3, // false - ImGuiItemFlags_NoNavDefaultFocus = 1 << 4, // false - ImGuiItemFlags_SelectableDontClosePopup = 1 << 5, // false // MenuItem/Selectable() automatically closes current Popup window - ImGuiItemFlags_MixedValue = 1 << 6, // false // [BETA] Represent a mixed/indeterminate value, generally multi-selection where values differ. Currently only supported by Checkbox() (later should support all sorts of widgets) - ImGuiItemFlags_Default_ = 0 -}; - -// Storage for LastItem data -enum ImGuiItemStatusFlags_ -{ - ImGuiItemStatusFlags_None = 0, - ImGuiItemStatusFlags_HoveredRect = 1 << 0, - ImGuiItemStatusFlags_HasDisplayRect = 1 << 1, - ImGuiItemStatusFlags_Edited = 1 << 2, // Value exposed by item was edited in the current frame (should match the bool return value of most widgets) - ImGuiItemStatusFlags_ToggledSelection = 1 << 3, // Set when Selectable(), TreeNode() reports toggling a selection. We can't report "Selected" because reporting the change allows us to handle clipping with less issues. - ImGuiItemStatusFlags_ToggledOpen = 1 << 4, // Set when TreeNode() reports toggling their open state. - ImGuiItemStatusFlags_HasDeactivated = 1 << 5, // Set if the widget/group is able to provide data for the ImGuiItemStatusFlags_Deactivated flag. - ImGuiItemStatusFlags_Deactivated = 1 << 6 // Only valid if ImGuiItemStatusFlags_HasDeactivated is set. - -#ifdef IMGUI_ENABLE_TEST_ENGINE - , // [imgui_tests only] - ImGuiItemStatusFlags_Openable = 1 << 10, // - ImGuiItemStatusFlags_Opened = 1 << 11, // - ImGuiItemStatusFlags_Checkable = 1 << 12, // - ImGuiItemStatusFlags_Checked = 1 << 13 // -#endif -}; - -enum ImGuiTextFlags_ -{ - ImGuiTextFlags_None = 0, - ImGuiTextFlags_NoWidthForLargeClippedText = 1 << 0 -}; - -enum ImGuiTooltipFlags_ -{ - ImGuiTooltipFlags_None = 0, - ImGuiTooltipFlags_OverridePreviousTooltip = 1 << 0 // Override will clear/ignore previously submitted tooltip (defaults to append) -}; - -// FIXME: this is in development, not exposed/functional as a generic feature yet. -// Horizontal/Vertical enums are fixed to 0/1 so they may be used to index ImVec2 -enum ImGuiLayoutType_ -{ - ImGuiLayoutType_Horizontal = 0, - ImGuiLayoutType_Vertical = 1 -}; - -enum ImGuiLogType -{ - ImGuiLogType_None = 0, - ImGuiLogType_TTY, - ImGuiLogType_File, - ImGuiLogType_Buffer, - ImGuiLogType_Clipboard -}; - -// X/Y enums are fixed to 0/1 so they may be used to index ImVec2 -enum ImGuiAxis -{ - ImGuiAxis_None = -1, - ImGuiAxis_X = 0, - ImGuiAxis_Y = 1 -}; - -enum ImGuiPlotType -{ - ImGuiPlotType_Lines, - ImGuiPlotType_Histogram -}; - -enum ImGuiInputSource -{ - ImGuiInputSource_None = 0, - ImGuiInputSource_Mouse, - ImGuiInputSource_Nav, - ImGuiInputSource_NavKeyboard, // Only used occasionally for storage, not tested/handled by most code - ImGuiInputSource_NavGamepad, // " - ImGuiInputSource_COUNT -}; - -// FIXME-NAV: Clarify/expose various repeat delay/rate -enum ImGuiInputReadMode -{ - ImGuiInputReadMode_Down, - ImGuiInputReadMode_Pressed, - ImGuiInputReadMode_Released, - ImGuiInputReadMode_Repeat, - ImGuiInputReadMode_RepeatSlow, - ImGuiInputReadMode_RepeatFast -}; - -enum ImGuiNavHighlightFlags_ -{ - ImGuiNavHighlightFlags_None = 0, - ImGuiNavHighlightFlags_TypeDefault = 1 << 0, - ImGuiNavHighlightFlags_TypeThin = 1 << 1, - ImGuiNavHighlightFlags_AlwaysDraw = 1 << 2, // Draw rectangular highlight if (g.NavId == id) _even_ when using the mouse. - ImGuiNavHighlightFlags_NoRounding = 1 << 3 -}; - -enum ImGuiNavDirSourceFlags_ -{ - ImGuiNavDirSourceFlags_None = 0, - ImGuiNavDirSourceFlags_Keyboard = 1 << 0, - ImGuiNavDirSourceFlags_PadDPad = 1 << 1, - ImGuiNavDirSourceFlags_PadLStick = 1 << 2 -}; - -enum ImGuiNavMoveFlags_ -{ - ImGuiNavMoveFlags_None = 0, - ImGuiNavMoveFlags_LoopX = 1 << 0, // On failed request, restart from opposite side - ImGuiNavMoveFlags_LoopY = 1 << 1, - ImGuiNavMoveFlags_WrapX = 1 << 2, // On failed request, request from opposite side one line down (when NavDir==right) or one line up (when NavDir==left) - ImGuiNavMoveFlags_WrapY = 1 << 3, // This is not super useful for provided for completeness - ImGuiNavMoveFlags_AllowCurrentNavId = 1 << 4, // Allow scoring and considering the current NavId as a move target candidate. This is used when the move source is offset (e.g. pressing PageDown actually needs to send a Up move request, if we are pressing PageDown from the bottom-most item we need to stay in place) - ImGuiNavMoveFlags_AlsoScoreVisibleSet = 1 << 5, // Store alternate result in NavMoveResultLocalVisibleSet that only comprise elements that are already fully visible. - ImGuiNavMoveFlags_ScrollToEdge = 1 << 6 -}; - -enum ImGuiNavForward -{ - ImGuiNavForward_None, - ImGuiNavForward_ForwardQueued, - ImGuiNavForward_ForwardActive -}; - -enum ImGuiNavLayer -{ - ImGuiNavLayer_Main = 0, // Main scrolling layer - ImGuiNavLayer_Menu = 1, // Menu layer (access with Alt/ImGuiNavInput_Menu) - ImGuiNavLayer_COUNT -}; - -enum ImGuiPopupPositionPolicy -{ - ImGuiPopupPositionPolicy_Default, - ImGuiPopupPositionPolicy_ComboBox -}; - -// 1D vector (this odd construct is used to facilitate the transition between 1D and 2D, and the maintenance of some branches/patches) -struct ImVec1 -{ - float x; - ImVec1() { x = 0.0f; } - ImVec1(float _x) { x = _x; } -}; - -// 2D vector (half-size integer) -struct ImVec2ih -{ - short x, y; - ImVec2ih() { x = y = 0; } - ImVec2ih(short _x, short _y) { x = _x; y = _y; } - explicit ImVec2ih(const ImVec2& rhs) { x = (short)rhs.x; y = (short)rhs.y; } -}; - -// 2D axis aligned bounding-box -// NB: we can't rely on ImVec2 math operators being available here -struct IMGUI_API ImRect -{ - ImVec2 Min; // Upper-left - ImVec2 Max; // Lower-right - - ImRect() : Min(0.0f, 0.0f), Max(0.0f, 0.0f) {} - ImRect(const ImVec2& min, const ImVec2& max) : Min(min), Max(max) {} - ImRect(const ImVec4& v) : Min(v.x, v.y), Max(v.z, v.w) {} - ImRect(float x1, float y1, float x2, float y2) : Min(x1, y1), Max(x2, y2) {} - - ImVec2 GetCenter() const { return ImVec2((Min.x + Max.x) * 0.5f, (Min.y + Max.y) * 0.5f); } - ImVec2 GetSize() const { return ImVec2(Max.x - Min.x, Max.y - Min.y); } - float GetWidth() const { return Max.x - Min.x; } - float GetHeight() const { return Max.y - Min.y; } - ImVec2 GetTL() const { return Min; } // Top-left - ImVec2 GetTR() const { return ImVec2(Max.x, Min.y); } // Top-right - ImVec2 GetBL() const { return ImVec2(Min.x, Max.y); } // Bottom-left - ImVec2 GetBR() const { return Max; } // Bottom-right - bool Contains(const ImVec2& p) const { return p.x >= Min.x && p.y >= Min.y && p.x < Max.x && p.y < Max.y; } - bool Contains(const ImRect& r) const { return r.Min.x >= Min.x && r.Min.y >= Min.y && r.Max.x <= Max.x && r.Max.y <= Max.y; } - bool Overlaps(const ImRect& r) const { return r.Min.y < Max.y && r.Max.y > Min.y && r.Min.x < Max.x && r.Max.x > Min.x; } - void Add(const ImVec2& p) { if (Min.x > p.x) Min.x = p.x; if (Min.y > p.y) Min.y = p.y; if (Max.x < p.x) Max.x = p.x; if (Max.y < p.y) Max.y = p.y; } - void Add(const ImRect& r) { if (Min.x > r.Min.x) Min.x = r.Min.x; if (Min.y > r.Min.y) Min.y = r.Min.y; if (Max.x < r.Max.x) Max.x = r.Max.x; if (Max.y < r.Max.y) Max.y = r.Max.y; } - void Expand(const float amount) { Min.x -= amount; Min.y -= amount; Max.x += amount; Max.y += amount; } - void Expand(const ImVec2& amount) { Min.x -= amount.x; Min.y -= amount.y; Max.x += amount.x; Max.y += amount.y; } - void Translate(const ImVec2& d) { Min.x += d.x; Min.y += d.y; Max.x += d.x; Max.y += d.y; } - void TranslateX(float dx) { Min.x += dx; Max.x += dx; } - void TranslateY(float dy) { Min.y += dy; Max.y += dy; } - void ClipWith(const ImRect& r) { Min = ImMax(Min, r.Min); Max = ImMin(Max, r.Max); } // Simple version, may lead to an inverted rectangle, which is fine for Contains/Overlaps test but not for display. - void ClipWithFull(const ImRect& r) { Min = ImClamp(Min, r.Min, r.Max); Max = ImClamp(Max, r.Min, r.Max); } // Full version, ensure both points are fully clipped. - void Floor() { Min.x = IM_FLOOR(Min.x); Min.y = IM_FLOOR(Min.y); Max.x = IM_FLOOR(Max.x); Max.y = IM_FLOOR(Max.y); } - bool IsInverted() const { return Min.x > Max.x || Min.y > Max.y; } -}; - -// Type information associated to one ImGuiDataType. Retrieve with DataTypeGetInfo(). -struct ImGuiDataTypeInfo -{ - size_t Size; // Size in byte - const char* PrintFmt; // Default printf format for the type - const char* ScanFmt; // Default scanf format for the type -}; - -// Stacked color modifier, backup of modified data so we can restore it -struct ImGuiColorMod -{ - ImGuiCol Col; - ImVec4 BackupValue; -}; - -// Stacked style modifier, backup of modified data so we can restore it. Data type inferred from the variable. -struct ImGuiStyleMod -{ - ImGuiStyleVar VarIdx; - union { int BackupInt[2]; float BackupFloat[2]; }; - ImGuiStyleMod(ImGuiStyleVar idx, int v) { VarIdx = idx; BackupInt[0] = v; } - ImGuiStyleMod(ImGuiStyleVar idx, float v) { VarIdx = idx; BackupFloat[0] = v; } - ImGuiStyleMod(ImGuiStyleVar idx, ImVec2 v) { VarIdx = idx; BackupFloat[0] = v.x; BackupFloat[1] = v.y; } -}; - -// Stacked storage data for BeginGroup()/EndGroup() -struct ImGuiGroupData -{ - ImVec2 BackupCursorPos; - ImVec2 BackupCursorMaxPos; - ImVec1 BackupIndent; - ImVec1 BackupGroupOffset; - ImVec2 BackupCurrLineSize; - float BackupCurrLineTextBaseOffset; - ImGuiID BackupActiveIdIsAlive; - bool BackupActiveIdPreviousFrameIsAlive; - bool EmitItem; -}; - -// Simple column measurement, currently used for MenuItem() only.. This is very short-sighted/throw-away code and NOT a generic helper. -struct IMGUI_API ImGuiMenuColumns -{ - float Spacing; - float Width, NextWidth; - float Pos[3], NextWidths[3]; - - ImGuiMenuColumns(); - void Update(int count, float spacing, bool clear); - float DeclColumns(float w0, float w1, float w2); - float CalcExtraSpace(float avail_w) const; -}; - -// Internal state of the currently focused/edited text input box -// For a given item ID, access with ImGui::GetInputTextState() -struct IMGUI_API ImGuiInputTextState -{ - ImGuiID ID; // widget id owning the text state - int CurLenW, CurLenA; // we need to maintain our buffer length in both UTF-8 and wchar format. UTF-8 length is valid even if TextA is not. - ImVector TextW; // edit buffer, we need to persist but can't guarantee the persistence of the user-provided buffer. so we copy into own buffer. - ImVector TextA; // temporary UTF8 buffer for callbacks and other operations. this is not updated in every code-path! size=capacity. - ImVector InitialTextA; // backup of end-user buffer at the time of focus (in UTF-8, unaltered) - bool TextAIsValid; // temporary UTF8 buffer is not initially valid before we make the widget active (until then we pull the data from user argument) - int BufCapacityA; // end-user buffer capacity - float ScrollX; // horizontal scrolling/offset - ImStb::STB_TexteditState Stb; // state for stb_textedit.h - float CursorAnim; // timer for cursor blink, reset on every user action so the cursor reappears immediately - bool CursorFollow; // set when we want scrolling to follow the current cursor position (not always!) - bool SelectedAllMouseLock; // after a double-click to select all, we ignore further mouse drags to update selection - ImGuiInputTextFlags UserFlags; // Temporarily set while we call user's callback - ImGuiInputTextCallback UserCallback; // " - void* UserCallbackData; // " - - ImGuiInputTextState() { memset(this, 0, sizeof(*this)); } - void ClearText() { CurLenW = CurLenA = 0; TextW[0] = 0; TextA[0] = 0; CursorClamp(); } - void ClearFreeMemory() { TextW.clear(); TextA.clear(); InitialTextA.clear(); } - int GetUndoAvailCount() const { return Stb.undostate.undo_point; } - int GetRedoAvailCount() const { return STB_TEXTEDIT_UNDOSTATECOUNT - Stb.undostate.redo_point; } - void OnKeyPressed(int key); // Cannot be inline because we call in code in stb_textedit.h implementation - - // Cursor & Selection - void CursorAnimReset() { CursorAnim = -0.30f; } // After a user-input the cursor stays on for a while without blinking - void CursorClamp() { Stb.cursor = ImMin(Stb.cursor, CurLenW); Stb.select_start = ImMin(Stb.select_start, CurLenW); Stb.select_end = ImMin(Stb.select_end, CurLenW); } - bool HasSelection() const { return Stb.select_start != Stb.select_end; } - void ClearSelection() { Stb.select_start = Stb.select_end = Stb.cursor; } - void SelectAll() { Stb.select_start = 0; Stb.cursor = Stb.select_end = CurLenW; Stb.has_preferred_x = 0; } -}; - -// Windows data saved in imgui.ini file -// Because we never destroy or rename ImGuiWindowSettings, we can store the names in a separate buffer easily. -// (this is designed to be stored in a ImChunkStream buffer, with the variable-length Name following our structure) -struct ImGuiWindowSettings -{ - ImGuiID ID; - ImVec2ih Pos; - ImVec2ih Size; - bool Collapsed; - - ImGuiWindowSettings() { ID = 0; Pos = Size = ImVec2ih(0, 0); Collapsed = false; } - char* GetName() { return (char*)(this + 1); } -}; - -struct ImGuiSettingsHandler -{ - const char* TypeName; // Short description stored in .ini file. Disallowed characters: '[' ']' - ImGuiID TypeHash; // == ImHashStr(TypeName) - void* (*ReadOpenFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler, const char* name); // Read: Called when entering into a new ini entry e.g. "[Window][Name]" - void (*ReadLineFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler, void* entry, const char* line); // Read: Called for every line of text within an ini entry - void (*WriteAllFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler, ImGuiTextBuffer* out_buf); // Write: Output every entries into 'out_buf' - void* UserData; - - ImGuiSettingsHandler() { memset(this, 0, sizeof(*this)); } -}; - -// Storage for current popup stack -struct ImGuiPopupData -{ - ImGuiID PopupId; // Set on OpenPopup() - ImGuiWindow* Window; // Resolved on BeginPopup() - may stay unresolved if user never calls OpenPopup() - ImGuiWindow* SourceWindow; // Set on OpenPopup() copy of NavWindow at the time of opening the popup - int OpenFrameCount; // Set on OpenPopup() - ImGuiID OpenParentId; // Set on OpenPopup(), we need this to differentiate multiple menu sets from each others (e.g. inside menu bar vs loose menu items) - ImVec2 OpenPopupPos; // Set on OpenPopup(), preferred popup position (typically == OpenMousePos when using mouse) - ImVec2 OpenMousePos; // Set on OpenPopup(), copy of mouse position at the time of opening popup - - ImGuiPopupData() { PopupId = 0; Window = SourceWindow = NULL; OpenFrameCount = -1; OpenParentId = 0; } -}; - -struct ImGuiColumnData -{ - float OffsetNorm; // Column start offset, normalized 0.0 (far left) -> 1.0 (far right) - float OffsetNormBeforeResize; - ImGuiColumnsFlags Flags; // Not exposed - ImRect ClipRect; - - ImGuiColumnData() { OffsetNorm = OffsetNormBeforeResize = 0.0f; Flags = ImGuiColumnsFlags_None; } -}; - -struct ImGuiColumns -{ - ImGuiID ID; - ImGuiColumnsFlags Flags; - bool IsFirstFrame; - bool IsBeingResized; - int Current; - int Count; - float OffMinX, OffMaxX; // Offsets from HostWorkRect.Min.x - float LineMinY, LineMaxY; - float HostCursorPosY; // Backup of CursorPos at the time of BeginColumns() - float HostCursorMaxPosX; // Backup of CursorMaxPos at the time of BeginColumns() - ImRect HostClipRect; // Backup of ClipRect at the time of BeginColumns() - ImRect HostWorkRect; // Backup of WorkRect at the time of BeginColumns() - ImVector Columns; - ImDrawListSplitter Splitter; - - ImGuiColumns() { Clear(); } - void Clear() - { - ID = 0; - Flags = ImGuiColumnsFlags_None; - IsFirstFrame = false; - IsBeingResized = false; - Current = 0; - Count = 1; - OffMinX = OffMaxX = 0.0f; - LineMinY = LineMaxY = 0.0f; - HostCursorPosY = 0.0f; - HostCursorMaxPosX = 0.0f; - Columns.clear(); - } -}; - -// ImDrawList: Helper function to calculate a circle's segment count given its radius and a "maximum error" value. -#define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MIN 12 -#define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MAX 512 -#define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC(_RAD,_MAXERROR) ImClamp((int)((IM_PI * 2.0f) / ImAcos(((_RAD) - (_MAXERROR)) / (_RAD))), IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MIN, IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MAX) - -// ImDrawList: You may set this to higher values (e.g. 2 or 3) to increase tessellation of fast rounded corners path. -#ifndef IM_DRAWLIST_ARCFAST_TESSELLATION_MULTIPLIER -#define IM_DRAWLIST_ARCFAST_TESSELLATION_MULTIPLIER 1 -#endif - -// Data shared between all ImDrawList instances -// You may want to create your own instance of this if you want to use ImDrawList completely without ImGui. In that case, watch out for future changes to this structure. -struct IMGUI_API ImDrawListSharedData -{ - ImVec2 TexUvWhitePixel; // UV of white pixel in the atlas - ImFont* Font; // Current/default font (optional, for simplified AddText overload) - float FontSize; // Current/default font size (optional, for simplified AddText overload) - float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() - float CircleSegmentMaxError; // Number of circle segments to use per pixel of radius for AddCircle() etc - ImVec4 ClipRectFullscreen; // Value for PushClipRectFullscreen() - ImDrawListFlags InitialFlags; // Initial flags at the beginning of the frame (it is possible to alter flags on a per-drawlist basis afterwards) - - // [Internal] Lookup tables - ImVec2 ArcFastVtx[12 * IM_DRAWLIST_ARCFAST_TESSELLATION_MULTIPLIER]; // FIXME: Bake rounded corners fill/borders in atlas - ImU8 CircleSegmentCounts[64]; // Precomputed segment count for given radius (array index + 1) before we calculate it dynamically (to avoid calculation overhead) - - ImDrawListSharedData(); - void SetCircleSegmentMaxError(float max_error); -}; - -struct ImDrawDataBuilder -{ - ImVector Layers[2]; // Global layers for: regular, tooltip - - void Clear() { for (int n = 0; n < IM_ARRAYSIZE(Layers); n++) Layers[n].resize(0); } - void ClearFreeMemory() { for (int n = 0; n < IM_ARRAYSIZE(Layers); n++) Layers[n].clear(); } - IMGUI_API void FlattenIntoSingleLayer(); -}; - -struct ImGuiNavMoveResult -{ - ImGuiWindow* Window; // Best candidate window - ImGuiID ID; // Best candidate ID - ImGuiID FocusScopeId; // Best candidate focus scope ID - float DistBox; // Best candidate box distance to current NavId - float DistCenter; // Best candidate center distance to current NavId - float DistAxial; - ImRect RectRel; // Best candidate bounding box in window relative space - - ImGuiNavMoveResult() { Clear(); } - void Clear() { Window = NULL; ID = FocusScopeId = 0; DistBox = DistCenter = DistAxial = FLT_MAX; RectRel = ImRect(); } -}; - -enum ImGuiNextWindowDataFlags_ -{ - ImGuiNextWindowDataFlags_None = 0, - ImGuiNextWindowDataFlags_HasPos = 1 << 0, - ImGuiNextWindowDataFlags_HasSize = 1 << 1, - ImGuiNextWindowDataFlags_HasContentSize = 1 << 2, - ImGuiNextWindowDataFlags_HasCollapsed = 1 << 3, - ImGuiNextWindowDataFlags_HasSizeConstraint = 1 << 4, - ImGuiNextWindowDataFlags_HasFocus = 1 << 5, - ImGuiNextWindowDataFlags_HasBgAlpha = 1 << 6 -}; - -// Storage for SetNexWindow** functions -struct ImGuiNextWindowData -{ - ImGuiNextWindowDataFlags Flags; - ImGuiCond PosCond; - ImGuiCond SizeCond; - ImGuiCond CollapsedCond; - ImVec2 PosVal; - ImVec2 PosPivotVal; - ImVec2 SizeVal; - ImVec2 ContentSizeVal; - bool CollapsedVal; - ImRect SizeConstraintRect; - ImGuiSizeCallback SizeCallback; - void* SizeCallbackUserData; - float BgAlphaVal; // Override background alpha - ImVec2 MenuBarOffsetMinVal; // *Always on* This is not exposed publicly, so we don't clear it. - - ImGuiNextWindowData() { memset(this, 0, sizeof(*this)); } - inline void ClearFlags() { Flags = ImGuiNextWindowDataFlags_None; } -}; - -enum ImGuiNextItemDataFlags_ -{ - ImGuiNextItemDataFlags_None = 0, - ImGuiNextItemDataFlags_HasWidth = 1 << 0, - ImGuiNextItemDataFlags_HasOpen = 1 << 1 -}; - -struct ImGuiNextItemData -{ - ImGuiNextItemDataFlags Flags; - float Width; // Set by SetNextItemWidth() - ImGuiID FocusScopeId; // Set by SetNextItemMultiSelectData() (!= 0 signify value has been set, so it's an alternate version of HasSelectionData, we don't use Flags for this because they are cleared too early. This is mostly used for debugging) - ImGuiCond OpenCond; - bool OpenVal; // Set by SetNextItemOpen() - - ImGuiNextItemData() { memset(this, 0, sizeof(*this)); } - inline void ClearFlags() { Flags = ImGuiNextItemDataFlags_None; } // Also cleared manually by ItemAdd()! -}; - -//----------------------------------------------------------------------------- -// Tabs -//----------------------------------------------------------------------------- - -struct ImGuiShrinkWidthItem -{ - int Index; - float Width; -}; - -struct ImGuiPtrOrIndex -{ - void* Ptr; // Either field can be set, not both. e.g. Dock node tab bars are loose while BeginTabBar() ones are in a pool. - int Index; // Usually index in a main pool. - - ImGuiPtrOrIndex(void* ptr) { Ptr = ptr; Index = -1; } - ImGuiPtrOrIndex(int index) { Ptr = NULL; Index = index; } -}; - -//----------------------------------------------------------------------------- -// Main Dear ImGui context -//----------------------------------------------------------------------------- - -struct ImGuiContext -{ - bool Initialized; - bool FontAtlasOwnedByContext; // IO.Fonts-> is owned by the ImGuiContext and will be destructed along with it. - ImGuiIO IO; - ImGuiStyle Style; - ImFont* Font; // (Shortcut) == FontStack.empty() ? IO.Font : FontStack.back() - float FontSize; // (Shortcut) == FontBaseSize * g.CurrentWindow->FontWindowScale == window->FontSize(). Text height for current window. - float FontBaseSize; // (Shortcut) == IO.FontGlobalScale * Font->Scale * Font->FontSize. Base text height. - ImDrawListSharedData DrawListSharedData; - double Time; - int FrameCount; - int FrameCountEnded; - int FrameCountRendered; - bool WithinFrameScope; // Set by NewFrame(), cleared by EndFrame() - bool WithinFrameScopeWithImplicitWindow; // Set by NewFrame(), cleared by EndFrame() when the implicit debug window has been pushed - bool WithinEndChild; // Set within EndChild() - - // Windows state - ImVector Windows; // Windows, sorted in display order, back to front - ImVector WindowsFocusOrder; // Windows, sorted in focus order, back to front. (FIXME: We could only store root windows here! Need to sort out the Docking equivalent which is RootWindowDockStop and is unfortunately a little more dynamic) - ImVector WindowsTempSortBuffer; // Temporary buffer used in EndFrame() to reorder windows so parents are kept before their child - ImVector CurrentWindowStack; - ImGuiStorage WindowsById; // Map window's ImGuiID to ImGuiWindow* - int WindowsActiveCount; // Number of unique windows submitted by frame - ImGuiWindow* CurrentWindow; // Window being drawn into - ImGuiWindow* HoveredWindow; // Will catch mouse inputs - ImGuiWindow* HoveredRootWindow; // Will catch mouse inputs (for focus/move only) - ImGuiWindow* MovingWindow; // Track the window we clicked on (in order to preserve focus). The actually window that is moved is generally MovingWindow->RootWindow. - ImGuiWindow* WheelingWindow; // Track the window we started mouse-wheeling on. Until a timer elapse or mouse has moved, generally keep scrolling the same window even if during the course of scrolling the mouse ends up hovering a child window. - ImVec2 WheelingWindowRefMousePos; - float WheelingWindowTimer; - - // Item/widgets state and tracking information - ImGuiID HoveredId; // Hovered widget - bool HoveredIdAllowOverlap; - ImGuiID HoveredIdPreviousFrame; - float HoveredIdTimer; // Measure contiguous hovering time - float HoveredIdNotActiveTimer; // Measure contiguous hovering time where the item has not been active - ImGuiID ActiveId; // Active widget - ImGuiID ActiveIdIsAlive; // Active widget has been seen this frame (we can't use a bool as the ActiveId may change within the frame) - float ActiveIdTimer; - bool ActiveIdIsJustActivated; // Set at the time of activation for one frame - bool ActiveIdAllowOverlap; // Active widget allows another widget to steal active id (generally for overlapping widgets, but not always) - bool ActiveIdHasBeenPressedBefore; // Track whether the active id led to a press (this is to allow changing between PressOnClick and PressOnRelease without pressing twice). Used by range_select branch. - bool ActiveIdHasBeenEditedBefore; // Was the value associated to the widget Edited over the course of the Active state. - bool ActiveIdHasBeenEditedThisFrame; - ImU32 ActiveIdUsingNavDirMask; // Active widget will want to read those directional navigation requests (e.g. can activate a button and move away from it) - ImU32 ActiveIdUsingNavInputMask; // Active widget will want to read those nav inputs. - ImU64 ActiveIdUsingKeyInputMask; // Active widget will want to read those key inputs. When we grow the ImGuiKey enum we'll need to either to order the enum to make useful keys come first, either redesign this into e.g. a small array. - ImVec2 ActiveIdClickOffset; // Clicked offset from upper-left corner, if applicable (currently only set by ButtonBehavior) - ImGuiWindow* ActiveIdWindow; - ImGuiInputSource ActiveIdSource; // Activating with mouse or nav (gamepad/keyboard) - int ActiveIdMouseButton; - ImGuiID ActiveIdPreviousFrame; - bool ActiveIdPreviousFrameIsAlive; - bool ActiveIdPreviousFrameHasBeenEditedBefore; - ImGuiWindow* ActiveIdPreviousFrameWindow; - ImGuiID LastActiveId; // Store the last non-zero ActiveId, useful for animation. - float LastActiveIdTimer; // Store the last non-zero ActiveId timer since the beginning of activation, useful for animation. - - // Next window/item data - ImGuiNextWindowData NextWindowData; // Storage for SetNextWindow** functions - ImGuiNextItemData NextItemData; // Storage for SetNextItem** functions - - // Shared stacks - ImVector ColorModifiers; // Stack for PushStyleColor()/PopStyleColor() - ImVector StyleModifiers; // Stack for PushStyleVar()/PopStyleVar() - ImVector FontStack; // Stack for PushFont()/PopFont() - ImVectorOpenPopupStack; // Which popups are open (persistent) - ImVectorBeginPopupStack; // Which level of BeginPopup() we are in (reset every frame) - - // Gamepad/keyboard Navigation - ImGuiWindow* NavWindow; // Focused window for navigation. Could be called 'FocusWindow' - ImGuiID NavId; // Focused item for navigation - ImGuiID NavFocusScopeId; - ImGuiID NavActivateId; // ~~ (g.ActiveId == 0) && IsNavInputPressed(ImGuiNavInput_Activate) ? NavId : 0, also set when calling ActivateItem() - ImGuiID NavActivateDownId; // ~~ IsNavInputDown(ImGuiNavInput_Activate) ? NavId : 0 - ImGuiID NavActivatePressedId; // ~~ IsNavInputPressed(ImGuiNavInput_Activate) ? NavId : 0 - ImGuiID NavInputId; // ~~ IsNavInputPressed(ImGuiNavInput_Input) ? NavId : 0 - ImGuiID NavJustTabbedId; // Just tabbed to this id. - ImGuiID NavJustMovedToId; // Just navigated to this id (result of a successfully MoveRequest). - ImGuiID NavJustMovedToFocusScopeId; // Just navigated to this focus scope id (result of a successfully MoveRequest). - ImGuiID NavNextActivateId; // Set by ActivateItem(), queued until next frame. - ImGuiInputSource NavInputSource; // Keyboard or Gamepad mode? THIS WILL ONLY BE None or NavGamepad or NavKeyboard. - ImRect NavScoringRectScreen; // Rectangle used for scoring, in screen space. Based of window->DC.NavRefRectRel[], modified for directional navigation scoring. - int NavScoringCount; // Metrics for debugging - ImGuiNavLayer NavLayer; // Layer we are navigating on. For now the system is hard-coded for 0=main contents and 1=menu/title bar, may expose layers later. - int NavIdTabCounter; // == NavWindow->DC.FocusIdxTabCounter at time of NavId processing - bool NavIdIsAlive; // Nav widget has been seen this frame ~~ NavRefRectRel is valid - bool NavMousePosDirty; // When set we will update mouse position if (io.ConfigFlags & ImGuiConfigFlags_NavEnableSetMousePos) if set (NB: this not enabled by default) - bool NavDisableHighlight; // When user starts using mouse, we hide gamepad/keyboard highlight (NB: but they are still available, which is why NavDisableHighlight isn't always != NavDisableMouseHover) - bool NavDisableMouseHover; // When user starts using gamepad/keyboard, we hide mouse hovering highlight until mouse is touched again. - bool NavAnyRequest; // ~~ NavMoveRequest || NavInitRequest - bool NavInitRequest; // Init request for appearing window to select first item - bool NavInitRequestFromMove; - ImGuiID NavInitResultId; - ImRect NavInitResultRectRel; - bool NavMoveFromClampedRefRect; // Set by manual scrolling, if we scroll to a point where NavId isn't visible we reset navigation from visible items - bool NavMoveRequest; // Move request for this frame - ImGuiNavMoveFlags NavMoveRequestFlags; - ImGuiNavForward NavMoveRequestForward; // None / ForwardQueued / ForwardActive (this is used to navigate sibling parent menus from a child menu) - ImGuiDir NavMoveDir, NavMoveDirLast; // Direction of the move request (left/right/up/down), direction of the previous move request - ImGuiDir NavMoveClipDir; // FIXME-NAV: Describe the purpose of this better. Might want to rename? - ImGuiNavMoveResult NavMoveResultLocal; // Best move request candidate within NavWindow - ImGuiNavMoveResult NavMoveResultLocalVisibleSet; // Best move request candidate within NavWindow that are mostly visible (when using ImGuiNavMoveFlags_AlsoScoreVisibleSet flag) - ImGuiNavMoveResult NavMoveResultOther; // Best move request candidate within NavWindow's flattened hierarchy (when using ImGuiWindowFlags_NavFlattened flag) - - // Navigation: Windowing (CTRL+TAB, holding Menu button + directional pads to move/resize) - ImGuiWindow* NavWindowingTarget; // When selecting a window (holding Menu+FocusPrev/Next, or equivalent of CTRL-TAB) this window is temporarily displayed top-most. - ImGuiWindow* NavWindowingTargetAnim; // Record of last valid NavWindowingTarget until DimBgRatio and NavWindowingHighlightAlpha becomes 0.0f - ImGuiWindow* NavWindowingList; - float NavWindowingTimer; - float NavWindowingHighlightAlpha; - bool NavWindowingToggleLayer; - - // Legacy Focus/Tabbing system (older than Nav, active even if Nav is disabled, misnamed. FIXME-NAV: This needs a redesign!) - ImGuiWindow* FocusRequestCurrWindow; // - ImGuiWindow* FocusRequestNextWindow; // - int FocusRequestCurrCounterRegular; // Any item being requested for focus, stored as an index (we on layout to be stable between the frame pressing TAB and the next frame, semi-ouch) - int FocusRequestCurrCounterTabStop; // Tab item being requested for focus, stored as an index - int FocusRequestNextCounterRegular; // Stored for next frame - int FocusRequestNextCounterTabStop; // " - bool FocusTabPressed; // - - // Render - ImDrawData DrawData; // Main ImDrawData instance to pass render information to the user - ImDrawDataBuilder DrawDataBuilder; - float DimBgRatio; // 0.0..1.0 animation when fading in a dimming background (for modal window and CTRL+TAB list) - ImDrawList BackgroundDrawList; // First draw list to be rendered. - ImDrawList ForegroundDrawList; // Last draw list to be rendered. This is where we the render software mouse cursor (if io.MouseDrawCursor is set) and most debug overlays. - ImGuiMouseCursor MouseCursor; - - // Drag and Drop - bool DragDropActive; - bool DragDropWithinSource; // Set when within a BeginDragDropXXX/EndDragDropXXX block for a drag source. - bool DragDropWithinTarget; // Set when within a BeginDragDropXXX/EndDragDropXXX block for a drag target. - ImGuiDragDropFlags DragDropSourceFlags; - int DragDropSourceFrameCount; - int DragDropMouseButton; - ImGuiPayload DragDropPayload; - ImRect DragDropTargetRect; // Store rectangle of current target candidate (we favor small targets when overlapping) - ImGuiID DragDropTargetId; - ImGuiDragDropFlags DragDropAcceptFlags; - float DragDropAcceptIdCurrRectSurface; // Target item surface (we resolve overlapping targets by prioritizing the smaller surface) - ImGuiID DragDropAcceptIdCurr; // Target item id (set at the time of accepting the payload) - ImGuiID DragDropAcceptIdPrev; // Target item id from previous frame (we need to store this to allow for overlapping drag and drop targets) - int DragDropAcceptFrameCount; // Last time a target expressed a desire to accept the source - ImVector DragDropPayloadBufHeap; // We don't expose the ImVector<> directly, ImGuiPayload only holds pointer+size - unsigned char DragDropPayloadBufLocal[16]; // Local buffer for small payloads - - // Tab bars - ImGuiTabBar* CurrentTabBar; - ImPool TabBars; - ImVector CurrentTabBarStack; - ImVector ShrinkWidthBuffer; - - // Widget state - ImVec2 LastValidMousePos; - ImGuiInputTextState InputTextState; - ImFont InputTextPasswordFont; - ImGuiID TempInputId; // Temporary text input when CTRL+clicking on a slider, etc. - ImGuiColorEditFlags ColorEditOptions; // Store user options for color edit widgets - float ColorEditLastHue; // Backup of last Hue associated to LastColor[3], so we can restore Hue in lossy RGB<>HSV round trips - float ColorEditLastSat; // Backup of last Saturation associated to LastColor[3], so we can restore Saturation in lossy RGB<>HSV round trips - float ColorEditLastColor[3]; - ImVec4 ColorPickerRef; // Initial/reference color at the time of opening the color picker. - bool DragCurrentAccumDirty; - float DragCurrentAccum; // Accumulator for dragging modification. Always high-precision, not rounded by end-user precision settings - float DragSpeedDefaultRatio; // If speed == 0.0f, uses (max-min) * DragSpeedDefaultRatio - float ScrollbarClickDeltaToGrabCenter; // Distance between mouse and center of grab box, normalized in parent space. Use storage? - int TooltipOverrideCount; - ImVector PrivateClipboard; // If no custom clipboard handler is defined - ImVector MenusIdSubmittedThisFrame; // A list of menu IDs that were rendered at least once - - // Platform support - ImVec2 PlatformImePos; // Cursor position request & last passed to the OS Input Method Editor - ImVec2 PlatformImeLastPos; - - // Settings - bool SettingsLoaded; - float SettingsDirtyTimer; // Save .ini Settings to memory when time reaches zero - ImGuiTextBuffer SettingsIniData; // In memory .ini settings - ImVector SettingsHandlers; // List of .ini settings handlers - ImChunkStream SettingsWindows; // ImGuiWindow .ini settings entries - - // Capture/Logging - bool LogEnabled; - ImGuiLogType LogType; - ImFileHandle LogFile; // If != NULL log to stdout/ file - ImGuiTextBuffer LogBuffer; // Accumulation buffer when log to clipboard. This is pointer so our GImGui static constructor doesn't call heap allocators. - float LogLinePosY; - bool LogLineFirstItem; - int LogDepthRef; - int LogDepthToExpand; - int LogDepthToExpandDefault; // Default/stored value for LogDepthMaxExpand if not specified in the LogXXX function call. - - // Debug Tools - bool DebugItemPickerActive; - ImGuiID DebugItemPickerBreakId; // Will call IM_DEBUG_BREAK() when encountering this id - - // Misc - float FramerateSecPerFrame[120]; // Calculate estimate of framerate for user over the last 2 seconds. - int FramerateSecPerFrameIdx; - float FramerateSecPerFrameAccum; - int WantCaptureMouseNextFrame; // Explicit capture via CaptureKeyboardFromApp()/CaptureMouseFromApp() sets those flags - int WantCaptureKeyboardNextFrame; - int WantTextInputNextFrame; - char TempBuffer[1024*3+1]; // Temporary text buffer - - ImGuiContext(ImFontAtlas* shared_font_atlas) : BackgroundDrawList(&DrawListSharedData), ForegroundDrawList(&DrawListSharedData) - { - Initialized = false; - Font = NULL; - FontSize = FontBaseSize = 0.0f; - FontAtlasOwnedByContext = shared_font_atlas ? false : true; - IO.Fonts = shared_font_atlas ? shared_font_atlas : IM_NEW(ImFontAtlas)(); - Time = 0.0f; - FrameCount = 0; - FrameCountEnded = FrameCountRendered = -1; - WithinFrameScope = WithinFrameScopeWithImplicitWindow = WithinEndChild = false; - - WindowsActiveCount = 0; - CurrentWindow = NULL; - HoveredWindow = NULL; - HoveredRootWindow = NULL; - MovingWindow = NULL; - WheelingWindow = NULL; - WheelingWindowTimer = 0.0f; - - HoveredId = 0; - HoveredIdAllowOverlap = false; - HoveredIdPreviousFrame = 0; - HoveredIdTimer = HoveredIdNotActiveTimer = 0.0f; - ActiveId = 0; - ActiveIdIsAlive = 0; - ActiveIdTimer = 0.0f; - ActiveIdIsJustActivated = false; - ActiveIdAllowOverlap = false; - ActiveIdHasBeenPressedBefore = false; - ActiveIdHasBeenEditedBefore = false; - ActiveIdHasBeenEditedThisFrame = false; - ActiveIdUsingNavDirMask = 0x00; - ActiveIdUsingNavInputMask = 0x00; - ActiveIdUsingKeyInputMask = 0x00; - ActiveIdClickOffset = ImVec2(-1,-1); - ActiveIdWindow = NULL; - ActiveIdSource = ImGuiInputSource_None; - ActiveIdMouseButton = 0; - ActiveIdPreviousFrame = 0; - ActiveIdPreviousFrameIsAlive = false; - ActiveIdPreviousFrameHasBeenEditedBefore = false; - ActiveIdPreviousFrameWindow = NULL; - LastActiveId = 0; - LastActiveIdTimer = 0.0f; - - NavWindow = NULL; - NavId = NavFocusScopeId = NavActivateId = NavActivateDownId = NavActivatePressedId = NavInputId = 0; - NavJustTabbedId = NavJustMovedToId = NavJustMovedToFocusScopeId = NavNextActivateId = 0; - NavInputSource = ImGuiInputSource_None; - NavScoringRectScreen = ImRect(); - NavScoringCount = 0; - NavLayer = ImGuiNavLayer_Main; - NavIdTabCounter = INT_MAX; - NavIdIsAlive = false; - NavMousePosDirty = false; - NavDisableHighlight = true; - NavDisableMouseHover = false; - NavAnyRequest = false; - NavInitRequest = false; - NavInitRequestFromMove = false; - NavInitResultId = 0; - NavMoveFromClampedRefRect = false; - NavMoveRequest = false; - NavMoveRequestFlags = ImGuiNavMoveFlags_None; - NavMoveRequestForward = ImGuiNavForward_None; - NavMoveDir = NavMoveDirLast = NavMoveClipDir = ImGuiDir_None; - - NavWindowingTarget = NavWindowingTargetAnim = NavWindowingList = NULL; - NavWindowingTimer = NavWindowingHighlightAlpha = 0.0f; - NavWindowingToggleLayer = false; - - FocusRequestCurrWindow = FocusRequestNextWindow = NULL; - FocusRequestCurrCounterRegular = FocusRequestCurrCounterTabStop = INT_MAX; - FocusRequestNextCounterRegular = FocusRequestNextCounterTabStop = INT_MAX; - FocusTabPressed = false; - - DimBgRatio = 0.0f; - BackgroundDrawList._OwnerName = "##Background"; // Give it a name for debugging - ForegroundDrawList._OwnerName = "##Foreground"; // Give it a name for debugging - MouseCursor = ImGuiMouseCursor_Arrow; - - DragDropActive = DragDropWithinSource = DragDropWithinTarget = false; - DragDropSourceFlags = ImGuiDragDropFlags_None; - DragDropSourceFrameCount = -1; - DragDropMouseButton = -1; - DragDropTargetId = 0; - DragDropAcceptFlags = ImGuiDragDropFlags_None; - DragDropAcceptIdCurrRectSurface = 0.0f; - DragDropAcceptIdPrev = DragDropAcceptIdCurr = 0; - DragDropAcceptFrameCount = -1; - memset(DragDropPayloadBufLocal, 0, sizeof(DragDropPayloadBufLocal)); - - CurrentTabBar = NULL; - - LastValidMousePos = ImVec2(0.0f, 0.0f); - TempInputId = 0; - ColorEditOptions = ImGuiColorEditFlags__OptionsDefault; - ColorEditLastHue = ColorEditLastSat = 0.0f; - ColorEditLastColor[0] = ColorEditLastColor[1] = ColorEditLastColor[2] = FLT_MAX; - DragCurrentAccumDirty = false; - DragCurrentAccum = 0.0f; - DragSpeedDefaultRatio = 1.0f / 100.0f; - ScrollbarClickDeltaToGrabCenter = 0.0f; - TooltipOverrideCount = 0; - - PlatformImePos = PlatformImeLastPos = ImVec2(FLT_MAX, FLT_MAX); - - SettingsLoaded = false; - SettingsDirtyTimer = 0.0f; - - LogEnabled = false; - LogType = ImGuiLogType_None; - LogFile = NULL; - LogLinePosY = FLT_MAX; - LogLineFirstItem = false; - LogDepthRef = 0; - LogDepthToExpand = LogDepthToExpandDefault = 2; - - DebugItemPickerActive = false; - DebugItemPickerBreakId = 0; - - memset(FramerateSecPerFrame, 0, sizeof(FramerateSecPerFrame)); - FramerateSecPerFrameIdx = 0; - FramerateSecPerFrameAccum = 0.0f; - WantCaptureMouseNextFrame = WantCaptureKeyboardNextFrame = WantTextInputNextFrame = -1; - memset(TempBuffer, 0, sizeof(TempBuffer)); - } -}; - -//----------------------------------------------------------------------------- -// ImGuiWindow -//----------------------------------------------------------------------------- - -// Transient per-window data, reset at the beginning of the frame. This used to be called ImGuiDrawContext, hence the DC variable name in ImGuiWindow. -// FIXME: That's theory, in practice the delimitation between ImGuiWindow and ImGuiWindowTempData is quite tenuous and could be reconsidered. -struct IMGUI_API ImGuiWindowTempData -{ - // Layout - ImVec2 CursorPos; // Current emitting position, in absolute coordinates. - ImVec2 CursorPosPrevLine; - ImVec2 CursorStartPos; // Initial position after Begin(), generally ~ window position + WindowPadding. - ImVec2 CursorMaxPos; // Used to implicitly calculate the size of our contents, always growing during the frame. Used to calculate window->ContentSize at the beginning of next frame - ImVec2 CurrLineSize; - ImVec2 PrevLineSize; - float CurrLineTextBaseOffset; // Baseline offset (0.0f by default on a new line, generally == style.FramePadding.y when a framed item has been added). - float PrevLineTextBaseOffset; - ImVec1 Indent; // Indentation / start position from left of window (increased by TreePush/TreePop, etc.) - ImVec1 ColumnsOffset; // Offset to the current column (if ColumnsCurrent > 0). FIXME: This and the above should be a stack to allow use cases like Tree->Column->Tree. Need revamp columns API. - ImVec1 GroupOffset; - - // Last item status - ImGuiID LastItemId; // ID for last item - ImGuiItemStatusFlags LastItemStatusFlags; // Status flags for last item (see ImGuiItemStatusFlags_) - ImRect LastItemRect; // Interaction rect for last item - ImRect LastItemDisplayRect; // End-user display rect for last item (only valid if LastItemStatusFlags & ImGuiItemStatusFlags_HasDisplayRect) - - // Keyboard/Gamepad navigation - ImGuiNavLayer NavLayerCurrent; // Current layer, 0..31 (we currently only use 0..1) - int NavLayerCurrentMask; // = (1 << NavLayerCurrent) used by ItemAdd prior to clipping. - int NavLayerActiveMask; // Which layer have been written to (result from previous frame) - int NavLayerActiveMaskNext; // Which layer have been written to (buffer for current frame) - ImGuiID NavFocusScopeIdCurrent; // Current focus scope ID while appending - bool NavHideHighlightOneFrame; - bool NavHasScroll; // Set when scrolling can be used (ScrollMax > 0.0f) - - // Miscellaneous - bool MenuBarAppending; // FIXME: Remove this - ImVec2 MenuBarOffset; // MenuBarOffset.x is sort of equivalent of a per-layer CursorPos.x, saved/restored as we switch to the menu bar. The only situation when MenuBarOffset.y is > 0 if when (SafeAreaPadding.y > FramePadding.y), often used on TVs. - ImGuiMenuColumns MenuColumns; // Simplified columns storage for menu items measurement - int TreeDepth; // Current tree depth. - ImU32 TreeJumpToParentOnPopMask; // Store a copy of !g.NavIdIsAlive for TreeDepth 0..31.. Could be turned into a ImU64 if necessary. - ImVector ChildWindows; - ImGuiStorage* StateStorage; // Current persistent per-window storage (store e.g. tree node open/close state) - ImGuiColumns* CurrentColumns; // Current columns set - ImGuiLayoutType LayoutType; - ImGuiLayoutType ParentLayoutType; // Layout type of parent window at the time of Begin() - int FocusCounterRegular; // (Legacy Focus/Tabbing system) Sequential counter, start at -1 and increase as assigned via FocusableItemRegister() (FIXME-NAV: Needs redesign) - int FocusCounterTabStop; // (Legacy Focus/Tabbing system) Same, but only count widgets which you can Tab through. - - // Local parameters stacks - // We store the current settings outside of the vectors to increase memory locality (reduce cache misses). The vectors are rarely modified. Also it allows us to not heap allocate for short-lived windows which are not using those settings. - ImGuiItemFlags ItemFlags; // == ItemFlagsStack.back() [empty == ImGuiItemFlags_Default] - float ItemWidth; // == ItemWidthStack.back(). 0.0: default, >0.0: width in pixels, <0.0: align xx pixels to the right of window - float TextWrapPos; // == TextWrapPosStack.back() [empty == -1.0f] - ImVectorItemFlagsStack; - ImVector ItemWidthStack; - ImVector TextWrapPosStack; - ImVectorGroupStack; - short StackSizesBackup[6]; // Store size of various stacks for asserting - - ImGuiWindowTempData() - { - CursorPos = CursorPosPrevLine = CursorStartPos = CursorMaxPos = ImVec2(0.0f, 0.0f); - CurrLineSize = PrevLineSize = ImVec2(0.0f, 0.0f); - CurrLineTextBaseOffset = PrevLineTextBaseOffset = 0.0f; - Indent = ImVec1(0.0f); - ColumnsOffset = ImVec1(0.0f); - GroupOffset = ImVec1(0.0f); - - LastItemId = 0; - LastItemStatusFlags = ImGuiItemStatusFlags_None; - LastItemRect = LastItemDisplayRect = ImRect(); - - NavLayerActiveMask = NavLayerActiveMaskNext = 0x00; - NavLayerCurrent = ImGuiNavLayer_Main; - NavLayerCurrentMask = (1 << ImGuiNavLayer_Main); - NavFocusScopeIdCurrent = 0; - NavHideHighlightOneFrame = false; - NavHasScroll = false; - - MenuBarAppending = false; - MenuBarOffset = ImVec2(0.0f, 0.0f); - TreeDepth = 0; - TreeJumpToParentOnPopMask = 0x00; - StateStorage = NULL; - CurrentColumns = NULL; - LayoutType = ParentLayoutType = ImGuiLayoutType_Vertical; - FocusCounterRegular = FocusCounterTabStop = -1; - - ItemFlags = ImGuiItemFlags_Default_; - ItemWidth = 0.0f; - TextWrapPos = -1.0f; - memset(StackSizesBackup, 0, sizeof(StackSizesBackup)); - } -}; - -// Storage for one window -struct IMGUI_API ImGuiWindow -{ - char* Name; // Window name, owned by the window. - ImGuiID ID; // == ImHashStr(Name) - ImGuiWindowFlags Flags; // See enum ImGuiWindowFlags_ - ImVec2 Pos; // Position (always rounded-up to nearest pixel) - ImVec2 Size; // Current size (==SizeFull or collapsed title bar size) - ImVec2 SizeFull; // Size when non collapsed - ImVec2 ContentSize; // Size of contents/scrollable client area (calculated from the extents reach of the cursor) from previous frame. Does not include window decoration or window padding. - ImVec2 ContentSizeExplicit; // Size of contents/scrollable client area explicitly request by the user via SetNextWindowContentSize(). - ImVec2 WindowPadding; // Window padding at the time of Begin(). - float WindowRounding; // Window rounding at the time of Begin(). - float WindowBorderSize; // Window border size at the time of Begin(). - int NameBufLen; // Size of buffer storing Name. May be larger than strlen(Name)! - ImGuiID MoveId; // == window->GetID("#MOVE") - ImGuiID ChildId; // ID of corresponding item in parent window (for navigation to return from child window to parent window) - ImVec2 Scroll; - ImVec2 ScrollMax; - ImVec2 ScrollTarget; // target scroll position. stored as cursor position with scrolling canceled out, so the highest point is always 0.0f. (FLT_MAX for no change) - ImVec2 ScrollTargetCenterRatio; // 0.0f = scroll so that target position is at top, 0.5f = scroll so that target position is centered - ImVec2 ScrollbarSizes; // Size taken by scrollbars on each axis - bool ScrollbarX, ScrollbarY; // Are scrollbars visible? - bool Active; // Set to true on Begin(), unless Collapsed - bool WasActive; - bool WriteAccessed; // Set to true when any widget access the current window - bool Collapsed; // Set when collapsing window to become only title-bar - bool WantCollapseToggle; - bool SkipItems; // Set when items can safely be all clipped (e.g. window not visible or collapsed) - bool Appearing; // Set during the frame where the window is appearing (or re-appearing) - bool Hidden; // Do not display (== (HiddenFrames*** > 0)) - bool IsFallbackWindow; // Set on the "Debug##Default" window. - bool HasCloseButton; // Set when the window has a close button (p_open != NULL) - signed char ResizeBorderHeld; // Current border being held for resize (-1: none, otherwise 0-3) - short BeginCount; // Number of Begin() during the current frame (generally 0 or 1, 1+ if appending via multiple Begin/End pairs) - short BeginOrderWithinParent; // Order within immediate parent window, if we are a child window. Otherwise 0. - short BeginOrderWithinContext; // Order within entire imgui context. This is mostly used for debugging submission order related issues. - ImGuiID PopupId; // ID in the popup stack when this window is used as a popup/menu (because we use generic Name/ID for recycling) - ImS8 AutoFitFramesX, AutoFitFramesY; - ImS8 AutoFitChildAxises; - bool AutoFitOnlyGrows; - ImGuiDir AutoPosLastDirection; - int HiddenFramesCanSkipItems; // Hide the window for N frames - int HiddenFramesCannotSkipItems; // Hide the window for N frames while allowing items to be submitted so we can measure their size - ImGuiCond SetWindowPosAllowFlags; // store acceptable condition flags for SetNextWindowPos() use. - ImGuiCond SetWindowSizeAllowFlags; // store acceptable condition flags for SetNextWindowSize() use. - ImGuiCond SetWindowCollapsedAllowFlags; // store acceptable condition flags for SetNextWindowCollapsed() use. - ImVec2 SetWindowPosVal; // store window position when using a non-zero Pivot (position set needs to be processed when we know the window size) - ImVec2 SetWindowPosPivot; // store window pivot for positioning. ImVec2(0,0) when positioning from top-left corner; ImVec2(0.5f,0.5f) for centering; ImVec2(1,1) for bottom right. - - ImVector IDStack; // ID stack. ID are hashes seeded with the value at the top of the stack. (In theory this should be in the TempData structure) - ImGuiWindowTempData DC; // Temporary per-window data, reset at the beginning of the frame. This used to be called ImGuiDrawContext, hence the "DC" variable name. - - // The best way to understand what those rectangles are is to use the 'Metrics -> Tools -> Show windows rectangles' viewer. - // The main 'OuterRect', omitted as a field, is window->Rect(). - ImRect OuterRectClipped; // == Window->Rect() just after setup in Begin(). == window->Rect() for root window. - ImRect InnerRect; // Inner rectangle (omit title bar, menu bar, scroll bar) - ImRect InnerClipRect; // == InnerRect shrunk by WindowPadding*0.5f on each side, clipped within viewport or parent clip rect. - ImRect WorkRect; // Cover the whole scrolling region, shrunk by WindowPadding*1.0f on each side. This is meant to replace ContentRegionRect over time (from 1.71+ onward). - ImRect ClipRect; // Current clipping/scissoring rectangle, evolve as we are using PushClipRect(), etc. == DrawList->clip_rect_stack.back(). - ImRect ContentRegionRect; // FIXME: This is currently confusing/misleading. It is essentially WorkRect but not handling of scrolling. We currently rely on it as right/bottom aligned sizing operation need some size to rely on. - - int LastFrameActive; // Last frame number the window was Active. - float LastTimeActive; // Last timestamp the window was Active (using float as we don't need high precision there) - float ItemWidthDefault; - ImGuiStorage StateStorage; - ImVector ColumnsStorage; - float FontWindowScale; // User scale multiplier per-window, via SetWindowFontScale() - int SettingsOffset; // Offset into SettingsWindows[] (offsets are always valid as we only grow the array from the back) - - ImDrawList* DrawList; // == &DrawListInst (for backward compatibility reason with code using imgui_internal.h we keep this a pointer) - ImDrawList DrawListInst; - ImGuiWindow* ParentWindow; // If we are a child _or_ popup window, this is pointing to our parent. Otherwise NULL. - ImGuiWindow* RootWindow; // Point to ourself or first ancestor that is not a child window. - ImGuiWindow* RootWindowForTitleBarHighlight; // Point to ourself or first ancestor which will display TitleBgActive color when this window is active. - ImGuiWindow* RootWindowForNav; // Point to ourself or first ancestor which doesn't have the NavFlattened flag. - - ImGuiWindow* NavLastChildNavWindow; // When going to the menu bar, we remember the child window we came from. (This could probably be made implicit if we kept g.Windows sorted by last focused including child window.) - ImGuiID NavLastIds[ImGuiNavLayer_COUNT]; // Last known NavId for this window, per layer (0/1) - ImRect NavRectRel[ImGuiNavLayer_COUNT]; // Reference rectangle, in window relative space - - bool MemoryCompacted; - int MemoryDrawListIdxCapacity; - int MemoryDrawListVtxCapacity; - -public: - ImGuiWindow(ImGuiContext* context, const char* name); - ~ImGuiWindow(); - - ImGuiID GetID(const char* str, const char* str_end = NULL); - ImGuiID GetID(const void* ptr); - ImGuiID GetID(int n); - ImGuiID GetIDNoKeepAlive(const char* str, const char* str_end = NULL); - ImGuiID GetIDNoKeepAlive(const void* ptr); - ImGuiID GetIDNoKeepAlive(int n); - ImGuiID GetIDFromRectangle(const ImRect& r_abs); - - // We don't use g.FontSize because the window may be != g.CurrentWidow. - ImRect Rect() const { return ImRect(Pos.x, Pos.y, Pos.x+Size.x, Pos.y+Size.y); } - float CalcFontSize() const { ImGuiContext& g = *GImGui; float scale = g.FontBaseSize * FontWindowScale; if (ParentWindow) scale *= ParentWindow->FontWindowScale; return scale; } - float TitleBarHeight() const { ImGuiContext& g = *GImGui; return (Flags & ImGuiWindowFlags_NoTitleBar) ? 0.0f : CalcFontSize() + g.Style.FramePadding.y * 2.0f; } - ImRect TitleBarRect() const { return ImRect(Pos, ImVec2(Pos.x + SizeFull.x, Pos.y + TitleBarHeight())); } - float MenuBarHeight() const { ImGuiContext& g = *GImGui; return (Flags & ImGuiWindowFlags_MenuBar) ? DC.MenuBarOffset.y + CalcFontSize() + g.Style.FramePadding.y * 2.0f : 0.0f; } - ImRect MenuBarRect() const { float y1 = Pos.y + TitleBarHeight(); return ImRect(Pos.x, y1, Pos.x + SizeFull.x, y1 + MenuBarHeight()); } -}; - -// Backup and restore just enough data to be able to use IsItemHovered() on item A after another B in the same window has overwritten the data. -struct ImGuiItemHoveredDataBackup -{ - ImGuiID LastItemId; - ImGuiItemStatusFlags LastItemStatusFlags; - ImRect LastItemRect; - ImRect LastItemDisplayRect; - - ImGuiItemHoveredDataBackup() { Backup(); } - void Backup() { ImGuiWindow* window = GImGui->CurrentWindow; LastItemId = window->DC.LastItemId; LastItemStatusFlags = window->DC.LastItemStatusFlags; LastItemRect = window->DC.LastItemRect; LastItemDisplayRect = window->DC.LastItemDisplayRect; } - void Restore() const { ImGuiWindow* window = GImGui->CurrentWindow; window->DC.LastItemId = LastItemId; window->DC.LastItemStatusFlags = LastItemStatusFlags; window->DC.LastItemRect = LastItemRect; window->DC.LastItemDisplayRect = LastItemDisplayRect; } -}; - -//----------------------------------------------------------------------------- -// Tab bar, tab item -//----------------------------------------------------------------------------- - -// Extend ImGuiTabBarFlags_ -enum ImGuiTabBarFlagsPrivate_ -{ - ImGuiTabBarFlags_DockNode = 1 << 20, // Part of a dock node [we don't use this in the master branch but it facilitate branch syncing to keep this around] - ImGuiTabBarFlags_IsFocused = 1 << 21, - ImGuiTabBarFlags_SaveSettings = 1 << 22 // FIXME: Settings are handled by the docking system, this only request the tab bar to mark settings dirty when reordering tabs -}; - -// Extend ImGuiTabItemFlags_ -enum ImGuiTabItemFlagsPrivate_ -{ - ImGuiTabItemFlags_NoCloseButton = 1 << 20 // Track whether p_open was set or not (we'll need this info on the next frame to recompute ContentWidth during layout) -}; - -// Storage for one active tab item (sizeof() 26~32 bytes) -struct ImGuiTabItem -{ - ImGuiID ID; - ImGuiTabItemFlags Flags; - int LastFrameVisible; - int LastFrameSelected; // This allows us to infer an ordered list of the last activated tabs with little maintenance - int NameOffset; // When Window==NULL, offset to name within parent ImGuiTabBar::TabsNames - float Offset; // Position relative to beginning of tab - float Width; // Width currently displayed - float ContentWidth; // Width of actual contents, stored during BeginTabItem() call - - ImGuiTabItem() { ID = 0; Flags = ImGuiTabItemFlags_None; LastFrameVisible = LastFrameSelected = -1; NameOffset = -1; Offset = Width = ContentWidth = 0.0f; } -}; - -// Storage for a tab bar (sizeof() 92~96 bytes) -struct ImGuiTabBar -{ - ImVector Tabs; - ImGuiID ID; // Zero for tab-bars used by docking - ImGuiID SelectedTabId; // Selected tab/window - ImGuiID NextSelectedTabId; - ImGuiID VisibleTabId; // Can occasionally be != SelectedTabId (e.g. when previewing contents for CTRL+TAB preview) - int CurrFrameVisible; - int PrevFrameVisible; - ImRect BarRect; - float LastTabContentHeight; // Record the height of contents submitted below the tab bar - float OffsetMax; // Distance from BarRect.Min.x, locked during layout - float OffsetMaxIdeal; // Ideal offset if all tabs were visible and not clipped - float OffsetNextTab; // Distance from BarRect.Min.x, incremented with each BeginTabItem() call, not used if ImGuiTabBarFlags_Reorderable if set. - float ScrollingAnim; - float ScrollingTarget; - float ScrollingTargetDistToVisibility; - float ScrollingSpeed; - ImGuiTabBarFlags Flags; - ImGuiID ReorderRequestTabId; - ImS8 ReorderRequestDir; - bool WantLayout; - bool VisibleTabWasSubmitted; - short LastTabItemIdx; // For BeginTabItem()/EndTabItem() - ImVec2 FramePadding; // style.FramePadding locked at the time of BeginTabBar() - ImGuiTextBuffer TabsNames; // For non-docking tab bar we re-append names in a contiguous buffer. - - ImGuiTabBar(); - int GetTabOrder(const ImGuiTabItem* tab) const { return Tabs.index_from_ptr(tab); } - const char* GetTabName(const ImGuiTabItem* tab) const - { - IM_ASSERT(tab->NameOffset != -1 && tab->NameOffset < TabsNames.Buf.Size); - return TabsNames.Buf.Data + tab->NameOffset; - } -}; - -//----------------------------------------------------------------------------- -// Internal API -// No guarantee of forward compatibility here. -//----------------------------------------------------------------------------- - -namespace ImGui -{ - // Windows - // We should always have a CurrentWindow in the stack (there is an implicit "Debug" window) - // If this ever crash because g.CurrentWindow is NULL it means that either - // - ImGui::NewFrame() has never been called, which is illegal. - // - You are calling ImGui functions after ImGui::EndFrame()/ImGui::Render() and before the next ImGui::NewFrame(), which is also illegal. - inline ImGuiWindow* GetCurrentWindowRead() { ImGuiContext& g = *GImGui; return g.CurrentWindow; } - inline ImGuiWindow* GetCurrentWindow() { ImGuiContext& g = *GImGui; g.CurrentWindow->WriteAccessed = true; return g.CurrentWindow; } - IMGUI_API ImGuiWindow* FindWindowByID(ImGuiID id); - IMGUI_API ImGuiWindow* FindWindowByName(const char* name); - IMGUI_API void UpdateWindowParentAndRootLinks(ImGuiWindow* window, ImGuiWindowFlags flags, ImGuiWindow* parent_window); - IMGUI_API ImVec2 CalcWindowExpectedSize(ImGuiWindow* window); - IMGUI_API bool IsWindowChildOf(ImGuiWindow* window, ImGuiWindow* potential_parent); - IMGUI_API bool IsWindowNavFocusable(ImGuiWindow* window); - IMGUI_API ImRect GetWindowAllowedExtentRect(ImGuiWindow* window); - IMGUI_API void SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiCond cond = 0); - IMGUI_API void SetWindowSize(ImGuiWindow* window, const ImVec2& size, ImGuiCond cond = 0); - IMGUI_API void SetWindowCollapsed(ImGuiWindow* window, bool collapsed, ImGuiCond cond = 0); - - // Windows: Display Order and Focus Order - IMGUI_API void FocusWindow(ImGuiWindow* window); - IMGUI_API void FocusTopMostWindowUnderOne(ImGuiWindow* under_this_window, ImGuiWindow* ignore_window); - IMGUI_API void BringWindowToFocusFront(ImGuiWindow* window); - IMGUI_API void BringWindowToDisplayFront(ImGuiWindow* window); - IMGUI_API void BringWindowToDisplayBack(ImGuiWindow* window); - - // Fonts, drawing - IMGUI_API void SetCurrentFont(ImFont* font); - inline ImFont* GetDefaultFont() { ImGuiContext& g = *GImGui; return g.IO.FontDefault ? g.IO.FontDefault : g.IO.Fonts->Fonts[0]; } - inline ImDrawList* GetForegroundDrawList(ImGuiWindow* window) { IM_UNUSED(window); ImGuiContext& g = *GImGui; return &g.ForegroundDrawList; } // This seemingly unnecessary wrapper simplifies compatibility between the 'master' and 'docking' branches. - - // Init - IMGUI_API void Initialize(ImGuiContext* context); - IMGUI_API void Shutdown(ImGuiContext* context); // Since 1.60 this is a _private_ function. You can call DestroyContext() to destroy the context created by CreateContext(). - - // NewFrame - IMGUI_API void UpdateHoveredWindowAndCaptureFlags(); - IMGUI_API void StartMouseMovingWindow(ImGuiWindow* window); - IMGUI_API void UpdateMouseMovingWindowNewFrame(); - IMGUI_API void UpdateMouseMovingWindowEndFrame(); - - // Settings - IMGUI_API void MarkIniSettingsDirty(); - IMGUI_API void MarkIniSettingsDirty(ImGuiWindow* window); - IMGUI_API ImGuiWindowSettings* CreateNewWindowSettings(const char* name); - IMGUI_API ImGuiWindowSettings* FindWindowSettings(ImGuiID id); - IMGUI_API ImGuiWindowSettings* FindOrCreateWindowSettings(const char* name); - IMGUI_API ImGuiSettingsHandler* FindSettingsHandler(const char* type_name); - - // Scrolling - IMGUI_API void SetScrollX(ImGuiWindow* window, float new_scroll_x); - IMGUI_API void SetScrollY(ImGuiWindow* window, float new_scroll_y); - IMGUI_API void SetScrollFromPosX(ImGuiWindow* window, float local_x, float center_x_ratio = 0.5f); - IMGUI_API void SetScrollFromPosY(ImGuiWindow* window, float local_y, float center_y_ratio = 0.5f); - IMGUI_API ImVec2 ScrollToBringRectIntoView(ImGuiWindow* window, const ImRect& item_rect); - - // Basic Accessors - inline ImGuiID GetItemID() { ImGuiContext& g = *GImGui; return g.CurrentWindow->DC.LastItemId; } - inline ImGuiItemStatusFlags GetItemStatusFlags() { ImGuiContext& g = *GImGui; return g.CurrentWindow->DC.LastItemStatusFlags; } - inline ImGuiID GetActiveID() { ImGuiContext& g = *GImGui; return g.ActiveId; } - inline ImGuiID GetFocusID() { ImGuiContext& g = *GImGui; return g.NavId; } - IMGUI_API void SetActiveID(ImGuiID id, ImGuiWindow* window); - IMGUI_API void SetFocusID(ImGuiID id, ImGuiWindow* window); - IMGUI_API void ClearActiveID(); - IMGUI_API ImGuiID GetHoveredID(); - IMGUI_API void SetHoveredID(ImGuiID id); - IMGUI_API void KeepAliveID(ImGuiID id); - IMGUI_API void MarkItemEdited(ImGuiID id); // Mark data associated to given item as "edited", used by IsItemDeactivatedAfterEdit() function. - IMGUI_API void PushOverrideID(ImGuiID id); // Push given value at the top of the ID stack (whereas PushID combines old and new hashes) - - // Basic Helpers for widget code - IMGUI_API void ItemSize(const ImVec2& size, float text_baseline_y = -1.0f); - IMGUI_API void ItemSize(const ImRect& bb, float text_baseline_y = -1.0f); - IMGUI_API bool ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb = NULL); - IMGUI_API bool ItemHoverable(const ImRect& bb, ImGuiID id); - IMGUI_API bool IsClippedEx(const ImRect& bb, ImGuiID id, bool clip_even_when_logged); - IMGUI_API bool FocusableItemRegister(ImGuiWindow* window, ImGuiID id); // Return true if focus is requested - IMGUI_API void FocusableItemUnregister(ImGuiWindow* window); - IMGUI_API ImVec2 CalcItemSize(ImVec2 size, float default_w, float default_h); - IMGUI_API float CalcWrapWidthForPos(const ImVec2& pos, float wrap_pos_x); - IMGUI_API void PushMultiItemsWidths(int components, float width_full); - IMGUI_API void PushItemFlag(ImGuiItemFlags option, bool enabled); - IMGUI_API void PopItemFlag(); - IMGUI_API bool IsItemToggledSelection(); // Was the last item selection toggled? (after Selectable(), TreeNode() etc. We only returns toggle _event_ in order to handle clipping correctly) - IMGUI_API ImVec2 GetContentRegionMaxAbs(); - IMGUI_API void ShrinkWidths(ImGuiShrinkWidthItem* items, int count, float width_excess); - - // Logging/Capture - IMGUI_API void LogBegin(ImGuiLogType type, int auto_open_depth); // -> BeginCapture() when we design v2 api, for now stay under the radar by using the old name. - IMGUI_API void LogToBuffer(int auto_open_depth = -1); // Start logging/capturing to internal buffer - - // Popups, Modals, Tooltips - IMGUI_API bool BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, bool border, ImGuiWindowFlags flags); - IMGUI_API void OpenPopupEx(ImGuiID id); - IMGUI_API void ClosePopupToLevel(int remaining, bool restore_focus_to_window_under_popup); - IMGUI_API void ClosePopupsOverWindow(ImGuiWindow* ref_window, bool restore_focus_to_window_under_popup); - IMGUI_API bool IsPopupOpen(ImGuiID id); // Test for id within current popup stack level (currently begin-ed into); this doesn't scan the whole popup stack! - IMGUI_API bool BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags); - IMGUI_API void BeginTooltipEx(ImGuiWindowFlags extra_flags, ImGuiTooltipFlags tooltip_flags); - IMGUI_API ImGuiWindow* GetTopMostPopupModal(); - IMGUI_API ImVec2 FindBestWindowPosForPopup(ImGuiWindow* window); - IMGUI_API ImVec2 FindBestWindowPosForPopupEx(const ImVec2& ref_pos, const ImVec2& size, ImGuiDir* last_dir, const ImRect& r_outer, const ImRect& r_avoid, ImGuiPopupPositionPolicy policy = ImGuiPopupPositionPolicy_Default); - - // Navigation - IMGUI_API void NavInitWindow(ImGuiWindow* window, bool force_reinit); - IMGUI_API bool NavMoveRequestButNoResultYet(); - IMGUI_API void NavMoveRequestCancel(); - IMGUI_API void NavMoveRequestForward(ImGuiDir move_dir, ImGuiDir clip_dir, const ImRect& bb_rel, ImGuiNavMoveFlags move_flags); - IMGUI_API void NavMoveRequestTryWrapping(ImGuiWindow* window, ImGuiNavMoveFlags move_flags); - IMGUI_API float GetNavInputAmount(ImGuiNavInput n, ImGuiInputReadMode mode); - IMGUI_API ImVec2 GetNavInputAmount2d(ImGuiNavDirSourceFlags dir_sources, ImGuiInputReadMode mode, float slow_factor = 0.0f, float fast_factor = 0.0f); - IMGUI_API int CalcTypematicRepeatAmount(float t0, float t1, float repeat_delay, float repeat_rate); - IMGUI_API void ActivateItem(ImGuiID id); // Remotely activate a button, checkbox, tree node etc. given its unique ID. activation is queued and processed on the next frame when the item is encountered again. - IMGUI_API void SetNavID(ImGuiID id, int nav_layer, ImGuiID focus_scope_id); - IMGUI_API void SetNavIDWithRectRel(ImGuiID id, int nav_layer, ImGuiID focus_scope_id, const ImRect& rect_rel); - - // Focus scope (WIP) - IMGUI_API void PushFocusScope(ImGuiID id); // Note: this is storing in same stack as IDStack, so Push/Pop mismatch will be reported there. - IMGUI_API void PopFocusScope(); - inline ImGuiID GetFocusScopeID() { ImGuiContext& g = *GImGui; return g.NavFocusScopeId; } - - // Inputs - // FIXME: Eventually we should aim to move e.g. IsActiveIdUsingKey() into IsKeyXXX functions. - inline bool IsActiveIdUsingNavDir(ImGuiDir dir) { ImGuiContext& g = *GImGui; return (g.ActiveIdUsingNavDirMask & (1 << dir)) != 0; } - inline bool IsActiveIdUsingNavInput(ImGuiNavInput input) { ImGuiContext& g = *GImGui; return (g.ActiveIdUsingNavInputMask & (1 << input)) != 0; } - inline bool IsActiveIdUsingKey(ImGuiKey key) { ImGuiContext& g = *GImGui; IM_ASSERT(key < 64); return (g.ActiveIdUsingKeyInputMask & ((ImU64)1 << key)) != 0; } - IMGUI_API bool IsMouseDragPastThreshold(ImGuiMouseButton button, float lock_threshold = -1.0f); - inline bool IsKeyPressedMap(ImGuiKey key, bool repeat = true) { ImGuiContext& g = *GImGui; const int key_index = g.IO.KeyMap[key]; return (key_index >= 0) ? IsKeyPressed(key_index, repeat) : false; } - inline bool IsNavInputDown(ImGuiNavInput n) { ImGuiContext& g = *GImGui; return g.IO.NavInputs[n] > 0.0f; } - inline bool IsNavInputTest(ImGuiNavInput n, ImGuiInputReadMode rm) { return (GetNavInputAmount(n, rm) > 0.0f); } - - // Drag and Drop - IMGUI_API bool BeginDragDropTargetCustom(const ImRect& bb, ImGuiID id); - IMGUI_API void ClearDragDrop(); - IMGUI_API bool IsDragDropPayloadBeingAccepted(); - - // Internal Columns API (this is not exposed because we will encourage transitioning to the Tables api) - IMGUI_API void BeginColumns(const char* str_id, int count, ImGuiColumnsFlags flags = 0); // setup number of columns. use an identifier to distinguish multiple column sets. close with EndColumns(). - IMGUI_API void EndColumns(); // close columns - IMGUI_API void PushColumnClipRect(int column_index); - IMGUI_API void PushColumnsBackground(); - IMGUI_API void PopColumnsBackground(); - IMGUI_API ImGuiID GetColumnsID(const char* str_id, int count); - IMGUI_API ImGuiColumns* FindOrCreateColumns(ImGuiWindow* window, ImGuiID id); - IMGUI_API float GetColumnOffsetFromNorm(const ImGuiColumns* columns, float offset_norm); - IMGUI_API float GetColumnNormFromOffset(const ImGuiColumns* columns, float offset); - - // Tab Bars - IMGUI_API bool BeginTabBarEx(ImGuiTabBar* tab_bar, const ImRect& bb, ImGuiTabBarFlags flags); - IMGUI_API ImGuiTabItem* TabBarFindTabByID(ImGuiTabBar* tab_bar, ImGuiID tab_id); - IMGUI_API void TabBarRemoveTab(ImGuiTabBar* tab_bar, ImGuiID tab_id); - IMGUI_API void TabBarCloseTab(ImGuiTabBar* tab_bar, ImGuiTabItem* tab); - IMGUI_API void TabBarQueueChangeTabOrder(ImGuiTabBar* tab_bar, const ImGuiTabItem* tab, int dir); - IMGUI_API bool TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open, ImGuiTabItemFlags flags); - IMGUI_API ImVec2 TabItemCalcSize(const char* label, bool has_close_button); - IMGUI_API void TabItemBackground(ImDrawList* draw_list, const ImRect& bb, ImGuiTabItemFlags flags, ImU32 col); - IMGUI_API bool TabItemLabelAndCloseButton(ImDrawList* draw_list, const ImRect& bb, ImGuiTabItemFlags flags, ImVec2 frame_padding, const char* label, ImGuiID tab_id, ImGuiID close_button_id); - - // Render helpers - // AVOID USING OUTSIDE OF IMGUI.CPP! NOT FOR PUBLIC CONSUMPTION. THOSE FUNCTIONS ARE A MESS. THEIR SIGNATURE AND BEHAVIOR WILL CHANGE, THEY NEED TO BE REFACTORED INTO SOMETHING DECENT. - // NB: All position are in absolute pixels coordinates (we are never using window coordinates internally) - IMGUI_API void RenderText(ImVec2 pos, const char* text, const char* text_end = NULL, bool hide_text_after_hash = true); - IMGUI_API void RenderTextWrapped(ImVec2 pos, const char* text, const char* text_end, float wrap_width); - IMGUI_API void RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImVec2& align = ImVec2(0,0), const ImRect* clip_rect = NULL); - IMGUI_API void RenderTextClippedEx(ImDrawList* draw_list, const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImVec2& align = ImVec2(0, 0), const ImRect* clip_rect = NULL); - IMGUI_API void RenderTextEllipsis(ImDrawList* draw_list, const ImVec2& pos_min, const ImVec2& pos_max, float clip_max_x, float ellipsis_max_x, const char* text, const char* text_end, const ImVec2* text_size_if_known); - IMGUI_API void RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool border = true, float rounding = 0.0f); - IMGUI_API void RenderFrameBorder(ImVec2 p_min, ImVec2 p_max, float rounding = 0.0f); - IMGUI_API void RenderColorRectWithAlphaCheckerboard(ImDrawList* draw_list, ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, float grid_step, ImVec2 grid_off, float rounding = 0.0f, int rounding_corners_flags = ~0); - IMGUI_API void RenderNavHighlight(const ImRect& bb, ImGuiID id, ImGuiNavHighlightFlags flags = ImGuiNavHighlightFlags_TypeDefault); // Navigation highlight - IMGUI_API const char* FindRenderedTextEnd(const char* text, const char* text_end = NULL); // Find the optional ## from which we stop displaying text. - IMGUI_API void LogRenderedText(const ImVec2* ref_pos, const char* text, const char* text_end = NULL); - - // Render helpers (those functions don't access any ImGui state!) - IMGUI_API void RenderArrow(ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale = 1.0f); - IMGUI_API void RenderBullet(ImDrawList* draw_list, ImVec2 pos, ImU32 col); - IMGUI_API void RenderCheckMark(ImDrawList* draw_list, ImVec2 pos, ImU32 col, float sz); - IMGUI_API void RenderMouseCursor(ImDrawList* draw_list, ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow); - IMGUI_API void RenderArrowPointingAt(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, ImGuiDir direction, ImU32 col); - IMGUI_API void RenderRectFilledRangeH(ImDrawList* draw_list, const ImRect& rect, ImU32 col, float x_start_norm, float x_end_norm, float rounding); - -#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS - // [1.71: 2019/06/07: Updating prototypes of some of the internal functions. Leaving those for reference for a short while] - inline void RenderArrow(ImVec2 pos, ImGuiDir dir, float scale=1.0f) { ImGuiWindow* window = GetCurrentWindow(); RenderArrow(window->DrawList, pos, GetColorU32(ImGuiCol_Text), dir, scale); } - inline void RenderBullet(ImVec2 pos) { ImGuiWindow* window = GetCurrentWindow(); RenderBullet(window->DrawList, pos, GetColorU32(ImGuiCol_Text)); } -#endif - - // Widgets - IMGUI_API void TextEx(const char* text, const char* text_end = NULL, ImGuiTextFlags flags = 0); - IMGUI_API bool ButtonEx(const char* label, const ImVec2& size_arg = ImVec2(0,0), ImGuiButtonFlags flags = 0); - IMGUI_API bool CloseButton(ImGuiID id, const ImVec2& pos); - IMGUI_API bool CollapseButton(ImGuiID id, const ImVec2& pos); - IMGUI_API bool ArrowButtonEx(const char* str_id, ImGuiDir dir, ImVec2 size_arg, ImGuiButtonFlags flags = 0); - IMGUI_API void Scrollbar(ImGuiAxis axis); - IMGUI_API bool ScrollbarEx(const ImRect& bb, ImGuiID id, ImGuiAxis axis, float* p_scroll_v, float avail_v, float contents_v, ImDrawCornerFlags rounding_corners); - IMGUI_API ImGuiID GetWindowScrollbarID(ImGuiWindow* window, ImGuiAxis axis); - IMGUI_API ImGuiID GetWindowResizeID(ImGuiWindow* window, int n); // 0..3: corners, 4..7: borders - IMGUI_API void SeparatorEx(ImGuiSeparatorFlags flags); - - // Widgets low-level behaviors - IMGUI_API bool ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool* out_held, ImGuiButtonFlags flags = 0); - IMGUI_API bool DragBehavior(ImGuiID id, ImGuiDataType data_type, void* p_v, float v_speed, const void* p_min, const void* p_max, const char* format, float power, ImGuiDragFlags flags); - IMGUI_API bool SliderBehavior(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, void* p_v, const void* p_min, const void* p_max, const char* format, float power, ImGuiSliderFlags flags, ImRect* out_grab_bb); - IMGUI_API bool SplitterBehavior(const ImRect& bb, ImGuiID id, ImGuiAxis axis, float* size1, float* size2, float min_size1, float min_size2, float hover_extend = 0.0f, float hover_visibility_delay = 0.0f); - IMGUI_API bool TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* label, const char* label_end = NULL); - IMGUI_API bool TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags = 0); // Consume previous SetNextItemOpen() data, if any. May return true when logging - IMGUI_API void TreePushOverrideID(ImGuiID id); - - // Template functions are instantiated in imgui_widgets.cpp for a finite number of types. - // To use them externally (for custom widget) you may need an "extern template" statement in your code in order to link to existing instances and silence Clang warnings (see #2036). - // e.g. " extern template IMGUI_API float RoundScalarWithFormatT(const char* format, ImGuiDataType data_type, float v); " - template IMGUI_API bool DragBehaviorT(ImGuiDataType data_type, T* v, float v_speed, T v_min, T v_max, const char* format, float power, ImGuiDragFlags flags); - template IMGUI_API bool SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, T* v, T v_min, T v_max, const char* format, float power, ImGuiSliderFlags flags, ImRect* out_grab_bb); - template IMGUI_API float SliderCalcRatioFromValueT(ImGuiDataType data_type, T v, T v_min, T v_max, float power, float linear_zero_pos); - template IMGUI_API T RoundScalarWithFormatT(const char* format, ImGuiDataType data_type, T v); - - // Data type helpers - IMGUI_API const ImGuiDataTypeInfo* DataTypeGetInfo(ImGuiDataType data_type); - IMGUI_API int DataTypeFormatString(char* buf, int buf_size, ImGuiDataType data_type, const void* p_data, const char* format); - IMGUI_API void DataTypeApplyOp(ImGuiDataType data_type, int op, void* output, void* arg_1, const void* arg_2); - IMGUI_API bool DataTypeApplyOpFromText(const char* buf, const char* initial_value_buf, ImGuiDataType data_type, void* p_data, const char* format); - - // InputText - IMGUI_API bool InputTextEx(const char* label, const char* hint, char* buf, int buf_size, const ImVec2& size_arg, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback = NULL, void* user_data = NULL); - IMGUI_API bool TempInputText(const ImRect& bb, ImGuiID id, const char* label, char* buf, int buf_size, ImGuiInputTextFlags flags); - IMGUI_API bool TempInputScalar(const ImRect& bb, ImGuiID id, const char* label, ImGuiDataType data_type, void* p_data, const char* format); - inline bool TempInputIsActive(ImGuiID id) { ImGuiContext& g = *GImGui; return (g.ActiveId == id && g.TempInputId == id); } - inline ImGuiInputTextState* GetInputTextState(ImGuiID id) { ImGuiContext& g = *GImGui; return (g.InputTextState.ID == id) ? &g.InputTextState : NULL; } // Get input text state if active - - // Color - IMGUI_API void ColorTooltip(const char* text, const float* col, ImGuiColorEditFlags flags); - IMGUI_API void ColorEditOptionsPopup(const float* col, ImGuiColorEditFlags flags); - IMGUI_API void ColorPickerOptionsPopup(const float* ref_col, ImGuiColorEditFlags flags); - - // Plot - IMGUI_API void PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 frame_size); - - // Shade functions (write over already created vertices) - IMGUI_API void ShadeVertsLinearColorGradientKeepAlpha(ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, ImVec2 gradient_p0, ImVec2 gradient_p1, ImU32 col0, ImU32 col1); - IMGUI_API void ShadeVertsLinearUV(ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, bool clamp); - - // Garbage collection - IMGUI_API void GcCompactTransientWindowBuffers(ImGuiWindow* window); - IMGUI_API void GcAwakeTransientWindowBuffers(ImGuiWindow* window); - - // Debug Tools - inline void DebugDrawItemRect(ImU32 col = IM_COL32(255,0,0,255)) { ImGuiContext& g = *GImGui; ImGuiWindow* window = g.CurrentWindow; GetForegroundDrawList(window)->AddRect(window->DC.LastItemRect.Min, window->DC.LastItemRect.Max, col); } - inline void DebugStartItemPicker() { ImGuiContext& g = *GImGui; g.DebugItemPickerActive = true; } - -} // namespace ImGui - -// ImFontAtlas internals -IMGUI_API bool ImFontAtlasBuildWithStbTruetype(ImFontAtlas* atlas); -IMGUI_API void ImFontAtlasBuildInit(ImFontAtlas* atlas); -IMGUI_API void ImFontAtlasBuildSetupFont(ImFontAtlas* atlas, ImFont* font, ImFontConfig* font_config, float ascent, float descent); -IMGUI_API void ImFontAtlasBuildPackCustomRects(ImFontAtlas* atlas, void* stbrp_context_opaque); -IMGUI_API void ImFontAtlasBuildFinish(ImFontAtlas* atlas); -IMGUI_API void ImFontAtlasBuildMultiplyCalcLookupTable(unsigned char out_table[256], float in_multiply_factor); -IMGUI_API void ImFontAtlasBuildMultiplyRectAlpha8(const unsigned char table[256], unsigned char* pixels, int x, int y, int w, int h, int stride); - -// Debug Tools -// Use 'Metrics->Tools->Item Picker' to break into the call-stack of a specific item. -#ifndef IM_DEBUG_BREAK -#if defined(__clang__) -#define IM_DEBUG_BREAK() __builtin_debugtrap() -#elif defined (_MSC_VER) -#define IM_DEBUG_BREAK() __debugbreak() -#else -#define IM_DEBUG_BREAK() IM_ASSERT(0) // It is expected that you define IM_DEBUG_BREAK() into something that will break nicely in a debugger! -#endif -#endif // #ifndef IM_DEBUG_BREAK - -// Test Engine Hooks (imgui_tests) -//#define IMGUI_ENABLE_TEST_ENGINE -#ifdef IMGUI_ENABLE_TEST_ENGINE -extern void ImGuiTestEngineHook_PreNewFrame(ImGuiContext* ctx); -extern void ImGuiTestEngineHook_PostNewFrame(ImGuiContext* ctx); -extern void ImGuiTestEngineHook_ItemAdd(ImGuiContext* ctx, const ImRect& bb, ImGuiID id); -extern void ImGuiTestEngineHook_ItemInfo(ImGuiContext* ctx, ImGuiID id, const char* label, ImGuiItemStatusFlags flags); -extern void ImGuiTestEngineHook_Log(ImGuiContext* ctx, const char* fmt, ...); -#define IMGUI_TEST_ENGINE_ITEM_ADD(_BB, _ID) ImGuiTestEngineHook_ItemAdd(&g, _BB, _ID) // Register item bounding box -#define IMGUI_TEST_ENGINE_ITEM_INFO(_ID, _LABEL, _FLAGS) ImGuiTestEngineHook_ItemInfo(&g, _ID, _LABEL, _FLAGS) // Register item label and status flags (optional) -#define IMGUI_TEST_ENGINE_LOG(_FMT, ...) ImGuiTestEngineHook_Log(&g, _FMT, __VA_ARGS__) // Custom log entry from user land into test log -#else -#define IMGUI_TEST_ENGINE_ITEM_ADD(_BB, _ID) do { } while (0) -#define IMGUI_TEST_ENGINE_ITEM_INFO(_ID, _LABEL, _FLAGS) do { } while (0) -#define IMGUI_TEST_ENGINE_LOG(_FMT, ...) do { } while (0) -#endif - -#if defined(__clang__) -#pragma clang diagnostic pop -#elif defined(__GNUC__) -#pragma GCC diagnostic pop -#endif - -#ifdef _MSC_VER -#pragma warning (pop) -#endif - -#endif // #ifndef IMGUI_DISABLE diff --git a/cmake/imgui/imgui_widgets.cpp b/cmake/imgui/imgui_widgets.cpp deleted file mode 100644 index 3a360b96..00000000 --- a/cmake/imgui/imgui_widgets.cpp +++ /dev/null @@ -1,7708 +0,0 @@ -// dear imgui, v1.76 WIP -// (widgets code) - -/* - -Index of this file: - -// [SECTION] Forward Declarations -// [SECTION] Widgets: Text, etc. -// [SECTION] Widgets: Main (Button, Image, Checkbox, RadioButton, ProgressBar, Bullet, etc.) -// [SECTION] Widgets: Low-level Layout helpers (Spacing, Dummy, NewLine, Separator, etc.) -// [SECTION] Widgets: ComboBox -// [SECTION] Data Type and Data Formatting Helpers -// [SECTION] Widgets: DragScalar, DragFloat, DragInt, etc. -// [SECTION] Widgets: SliderScalar, SliderFloat, SliderInt, etc. -// [SECTION] Widgets: InputScalar, InputFloat, InputInt, etc. -// [SECTION] Widgets: InputText, InputTextMultiline -// [SECTION] Widgets: ColorEdit, ColorPicker, ColorButton, etc. -// [SECTION] Widgets: TreeNode, CollapsingHeader, etc. -// [SECTION] Widgets: Selectable -// [SECTION] Widgets: ListBox -// [SECTION] Widgets: PlotLines, PlotHistogram -// [SECTION] Widgets: Value helpers -// [SECTION] Widgets: MenuItem, BeginMenu, EndMenu, etc. -// [SECTION] Widgets: BeginTabBar, EndTabBar, etc. -// [SECTION] Widgets: BeginTabItem, EndTabItem, etc. -// [SECTION] Widgets: Columns, BeginColumns, EndColumns, etc. - -*/ - -#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) -#define _CRT_SECURE_NO_WARNINGS -#endif - -#include "imgui.h" -#ifndef IMGUI_DISABLE - -#ifndef IMGUI_DEFINE_MATH_OPERATORS -#define IMGUI_DEFINE_MATH_OPERATORS -#endif -#include "imgui_internal.h" - -#include // toupper -#if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier -#include // intptr_t -#else -#include // intptr_t -#endif - -// Visual Studio warnings -#ifdef _MSC_VER -#pragma warning (disable: 4127) // condition expression is constant -#pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen -#if defined(_MSC_VER) && _MSC_VER >= 1922 // MSVC 2019 16.2 or later -#pragma warning (disable: 5054) // operator '|': deprecated between enumerations of different types -#endif -#endif - -// Clang/GCC warnings with -Weverything -#if defined(__clang__) -#pragma clang diagnostic ignored "-Wold-style-cast" // warning : use of old-style cast // yes, they are more terse. -#pragma clang diagnostic ignored "-Wfloat-equal" // warning : comparing floating point with == or != is unsafe // storing and comparing against same constants (typically 0.0f) is ok. -#pragma clang diagnostic ignored "-Wformat-nonliteral" // warning : format string is not a string literal // passing non-literal to vsnformat(). yes, user passing incorrect format strings can crash the code. -#pragma clang diagnostic ignored "-Wsign-conversion" // warning : implicit conversion changes signedness // -#if __has_warning("-Wzero-as-null-pointer-constant") -#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" // warning : zero as null pointer constant // some standard header variations use #define NULL 0 -#endif -#if __has_warning("-Wdouble-promotion") -#pragma clang diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function // using printf() is a misery with this as C++ va_arg ellipsis changes float to double. -#endif -#if __has_warning("-Wdeprecated-enum-enum-conversion") -#pragma clang diagnostic ignored "-Wdeprecated-enum-enum-conversion" // warning: bitwise operation between different enumeration types ('XXXFlags_' and 'XXXFlagsPrivate_') is deprecated -#endif -#elif defined(__GNUC__) -#pragma GCC diagnostic ignored "-Wpragmas" // warning: unknown option after '#pragma GCC diagnostic' kind -#pragma GCC diagnostic ignored "-Wformat-nonliteral" // warning: format not a string literal, format string not checked -#pragma GCC diagnostic ignored "-Wclass-memaccess" // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead -#endif - -//------------------------------------------------------------------------- -// Data -//------------------------------------------------------------------------- - -// Those MIN/MAX values are not define because we need to point to them -static const signed char IM_S8_MIN = -128; -static const signed char IM_S8_MAX = 127; -static const unsigned char IM_U8_MIN = 0; -static const unsigned char IM_U8_MAX = 0xFF; -static const signed short IM_S16_MIN = -32768; -static const signed short IM_S16_MAX = 32767; -static const unsigned short IM_U16_MIN = 0; -static const unsigned short IM_U16_MAX = 0xFFFF; -static const ImS32 IM_S32_MIN = INT_MIN; // (-2147483647 - 1), (0x80000000); -static const ImS32 IM_S32_MAX = INT_MAX; // (2147483647), (0x7FFFFFFF) -static const ImU32 IM_U32_MIN = 0; -static const ImU32 IM_U32_MAX = UINT_MAX; // (0xFFFFFFFF) -#ifdef LLONG_MIN -static const ImS64 IM_S64_MIN = LLONG_MIN; // (-9223372036854775807ll - 1ll); -static const ImS64 IM_S64_MAX = LLONG_MAX; // (9223372036854775807ll); -#else -static const ImS64 IM_S64_MIN = -9223372036854775807LL - 1; -static const ImS64 IM_S64_MAX = 9223372036854775807LL; -#endif -static const ImU64 IM_U64_MIN = 0; -#ifdef ULLONG_MAX -static const ImU64 IM_U64_MAX = ULLONG_MAX; // (0xFFFFFFFFFFFFFFFFull); -#else -static const ImU64 IM_U64_MAX = (2ULL * 9223372036854775807LL + 1); -#endif - -//------------------------------------------------------------------------- -// [SECTION] Forward Declarations -//------------------------------------------------------------------------- - -// For InputTextEx() -static bool InputTextFilterCharacter(unsigned int* p_char, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data); -static int InputTextCalcTextLenAndLineCount(const char* text_begin, const char** out_text_end); -static ImVec2 InputTextCalcTextSizeW(const ImWchar* text_begin, const ImWchar* text_end, const ImWchar** remaining = NULL, ImVec2* out_offset = NULL, bool stop_on_new_line = false); - -//------------------------------------------------------------------------- -// [SECTION] Widgets: Text, etc. -//------------------------------------------------------------------------- -// - TextEx() [Internal] -// - TextUnformatted() -// - Text() -// - TextV() -// - TextColored() -// - TextColoredV() -// - TextDisabled() -// - TextDisabledV() -// - TextWrapped() -// - TextWrappedV() -// - LabelText() -// - LabelTextV() -// - BulletText() -// - BulletTextV() -//------------------------------------------------------------------------- - -void ImGui::TextEx(const char* text, const char* text_end, ImGuiTextFlags flags) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return; - - ImGuiContext& g = *GImGui; - IM_ASSERT(text != NULL); - const char* text_begin = text; - if (text_end == NULL) - text_end = text + strlen(text); // FIXME-OPT - - const ImVec2 text_pos(window->DC.CursorPos.x, window->DC.CursorPos.y + window->DC.CurrLineTextBaseOffset); - const float wrap_pos_x = window->DC.TextWrapPos; - const bool wrap_enabled = (wrap_pos_x >= 0.0f); - if (text_end - text > 2000 && !wrap_enabled) - { - // Long text! - // Perform manual coarse clipping to optimize for long multi-line text - // - From this point we will only compute the width of lines that are visible. Optimization only available when word-wrapping is disabled. - // - We also don't vertically center the text within the line full height, which is unlikely to matter because we are likely the biggest and only item on the line. - // - We use memchr(), pay attention that well optimized versions of those str/mem functions are much faster than a casually written loop. - const char* line = text; - const float line_height = GetTextLineHeight(); - ImVec2 text_size(0,0); - - // Lines to skip (can't skip when logging text) - ImVec2 pos = text_pos; - if (!g.LogEnabled) - { - int lines_skippable = (int)((window->ClipRect.Min.y - text_pos.y) / line_height); - if (lines_skippable > 0) - { - int lines_skipped = 0; - while (line < text_end && lines_skipped < lines_skippable) - { - const char* line_end = (const char*)memchr(line, '\n', text_end - line); - if (!line_end) - line_end = text_end; - if ((flags & ImGuiTextFlags_NoWidthForLargeClippedText) == 0) - text_size.x = ImMax(text_size.x, CalcTextSize(line, line_end).x); - line = line_end + 1; - lines_skipped++; - } - pos.y += lines_skipped * line_height; - } - } - - // Lines to render - if (line < text_end) - { - ImRect line_rect(pos, pos + ImVec2(FLT_MAX, line_height)); - while (line < text_end) - { - if (IsClippedEx(line_rect, 0, false)) - break; - - const char* line_end = (const char*)memchr(line, '\n', text_end - line); - if (!line_end) - line_end = text_end; - text_size.x = ImMax(text_size.x, CalcTextSize(line, line_end).x); - RenderText(pos, line, line_end, false); - line = line_end + 1; - line_rect.Min.y += line_height; - line_rect.Max.y += line_height; - pos.y += line_height; - } - - // Count remaining lines - int lines_skipped = 0; - while (line < text_end) - { - const char* line_end = (const char*)memchr(line, '\n', text_end - line); - if (!line_end) - line_end = text_end; - if ((flags & ImGuiTextFlags_NoWidthForLargeClippedText) == 0) - text_size.x = ImMax(text_size.x, CalcTextSize(line, line_end).x); - line = line_end + 1; - lines_skipped++; - } - pos.y += lines_skipped * line_height; - } - text_size.y = (pos - text_pos).y; - - ImRect bb(text_pos, text_pos + text_size); - ItemSize(text_size, 0.0f); - ItemAdd(bb, 0); - } - else - { - const float wrap_width = wrap_enabled ? CalcWrapWidthForPos(window->DC.CursorPos, wrap_pos_x) : 0.0f; - const ImVec2 text_size = CalcTextSize(text_begin, text_end, false, wrap_width); - - ImRect bb(text_pos, text_pos + text_size); - ItemSize(text_size, 0.0f); - if (!ItemAdd(bb, 0)) - return; - - // Render (we don't hide text after ## in this end-user function) - RenderTextWrapped(bb.Min, text_begin, text_end, wrap_width); - } -} - -void ImGui::TextUnformatted(const char* text, const char* text_end) -{ - TextEx(text, text_end, ImGuiTextFlags_NoWidthForLargeClippedText); -} - -void ImGui::Text(const char* fmt, ...) -{ - va_list args; - va_start(args, fmt); - TextV(fmt, args); - va_end(args); -} - -void ImGui::TextV(const char* fmt, va_list args) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return; - - ImGuiContext& g = *GImGui; - const char* text_end = g.TempBuffer + ImFormatStringV(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), fmt, args); - TextEx(g.TempBuffer, text_end, ImGuiTextFlags_NoWidthForLargeClippedText); -} - -void ImGui::TextColored(const ImVec4& col, const char* fmt, ...) -{ - va_list args; - va_start(args, fmt); - TextColoredV(col, fmt, args); - va_end(args); -} - -void ImGui::TextColoredV(const ImVec4& col, const char* fmt, va_list args) -{ - PushStyleColor(ImGuiCol_Text, col); - TextV(fmt, args); - PopStyleColor(); -} - -void ImGui::TextDisabled(const char* fmt, ...) -{ - va_list args; - va_start(args, fmt); - TextDisabledV(fmt, args); - va_end(args); -} - -void ImGui::TextDisabledV(const char* fmt, va_list args) -{ - PushStyleColor(ImGuiCol_Text, GImGui->Style.Colors[ImGuiCol_TextDisabled]); - TextV(fmt, args); - PopStyleColor(); -} - -void ImGui::TextWrapped(const char* fmt, ...) -{ - va_list args; - va_start(args, fmt); - TextWrappedV(fmt, args); - va_end(args); -} - -void ImGui::TextWrappedV(const char* fmt, va_list args) -{ - ImGuiWindow* window = GetCurrentWindow(); - bool need_backup = (window->DC.TextWrapPos < 0.0f); // Keep existing wrap position if one is already set - if (need_backup) - PushTextWrapPos(0.0f); - TextV(fmt, args); - if (need_backup) - PopTextWrapPos(); -} - -void ImGui::LabelText(const char* label, const char* fmt, ...) -{ - va_list args; - va_start(args, fmt); - LabelTextV(label, fmt, args); - va_end(args); -} - -// Add a label+text combo aligned to other label+value widgets -void ImGui::LabelTextV(const char* label, const char* fmt, va_list args) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return; - - ImGuiContext& g = *GImGui; - const ImGuiStyle& style = g.Style; - const float w = CalcItemWidth(); - - const ImVec2 label_size = CalcTextSize(label, NULL, true); - const ImRect value_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y*2)); - const ImRect total_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w + (label_size.x > 0.0f ? style.ItemInnerSpacing.x : 0.0f), style.FramePadding.y*2) + label_size); - ItemSize(total_bb, style.FramePadding.y); - if (!ItemAdd(total_bb, 0)) - return; - - // Render - const char* value_text_begin = &g.TempBuffer[0]; - const char* value_text_end = value_text_begin + ImFormatStringV(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), fmt, args); - RenderTextClipped(value_bb.Min, value_bb.Max, value_text_begin, value_text_end, NULL, ImVec2(0.0f,0.5f)); - if (label_size.x > 0.0f) - RenderText(ImVec2(value_bb.Max.x + style.ItemInnerSpacing.x, value_bb.Min.y + style.FramePadding.y), label); -} - -void ImGui::BulletText(const char* fmt, ...) -{ - va_list args; - va_start(args, fmt); - BulletTextV(fmt, args); - va_end(args); -} - -// Text with a little bullet aligned to the typical tree node. -void ImGui::BulletTextV(const char* fmt, va_list args) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return; - - ImGuiContext& g = *GImGui; - const ImGuiStyle& style = g.Style; - - const char* text_begin = g.TempBuffer; - const char* text_end = text_begin + ImFormatStringV(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), fmt, args); - const ImVec2 label_size = CalcTextSize(text_begin, text_end, false); - const ImVec2 total_size = ImVec2(g.FontSize + (label_size.x > 0.0f ? (label_size.x + style.FramePadding.x * 2) : 0.0f), label_size.y); // Empty text doesn't add padding - ImVec2 pos = window->DC.CursorPos; - pos.y += window->DC.CurrLineTextBaseOffset; - ItemSize(total_size, 0.0f); - const ImRect bb(pos, pos + total_size); - if (!ItemAdd(bb, 0)) - return; - - // Render - ImU32 text_col = GetColorU32(ImGuiCol_Text); - RenderBullet(window->DrawList, bb.Min + ImVec2(style.FramePadding.x + g.FontSize*0.5f, g.FontSize*0.5f), text_col); - RenderText(bb.Min + ImVec2(g.FontSize + style.FramePadding.x * 2, 0.0f), text_begin, text_end, false); -} - -//------------------------------------------------------------------------- -// [SECTION] Widgets: Main -//------------------------------------------------------------------------- -// - ButtonBehavior() [Internal] -// - Button() -// - SmallButton() -// - InvisibleButton() -// - ArrowButton() -// - CloseButton() [Internal] -// - CollapseButton() [Internal] -// - ScrollbarEx() [Internal] -// - Scrollbar() [Internal] -// - Image() -// - ImageButton() -// - Checkbox() -// - CheckboxFlags() -// - RadioButton() -// - ProgressBar() -// - Bullet() -//------------------------------------------------------------------------- - -// The ButtonBehavior() function is key to many interactions and used by many/most widgets. -// Because we handle so many cases (keyboard/gamepad navigation, drag and drop) and many specific behavior (via ImGuiButtonFlags_), -// this code is a little complex. -// By far the most common path is interacting with the Mouse using the default ImGuiButtonFlags_PressedOnClickRelease button behavior. -// See the series of events below and the corresponding state reported by dear imgui: -//------------------------------------------------------------------------------------------------------------------------------------------------ -// with PressedOnClickRelease: return-value IsItemHovered() IsItemActive() IsItemActivated() IsItemDeactivated() IsItemClicked() -// Frame N+0 (mouse is outside bb) - - - - - - -// Frame N+1 (mouse moves inside bb) - true - - - - -// Frame N+2 (mouse button is down) - true true true - true -// Frame N+3 (mouse button is down) - true true - - - -// Frame N+4 (mouse moves outside bb) - - true - - - -// Frame N+5 (mouse moves inside bb) - true true - - - -// Frame N+6 (mouse button is released) true true - - true - -// Frame N+7 (mouse button is released) - true - - - - -// Frame N+8 (mouse moves outside bb) - - - - - - -//------------------------------------------------------------------------------------------------------------------------------------------------ -// with PressedOnClick: return-value IsItemHovered() IsItemActive() IsItemActivated() IsItemDeactivated() IsItemClicked() -// Frame N+2 (mouse button is down) true true true true - true -// Frame N+3 (mouse button is down) - true true - - - -// Frame N+6 (mouse button is released) - true - - true - -// Frame N+7 (mouse button is released) - true - - - - -//------------------------------------------------------------------------------------------------------------------------------------------------ -// with PressedOnRelease: return-value IsItemHovered() IsItemActive() IsItemActivated() IsItemDeactivated() IsItemClicked() -// Frame N+2 (mouse button is down) - true - - - true -// Frame N+3 (mouse button is down) - true - - - - -// Frame N+6 (mouse button is released) true true - - - - -// Frame N+7 (mouse button is released) - true - - - - -//------------------------------------------------------------------------------------------------------------------------------------------------ -// with PressedOnDoubleClick: return-value IsItemHovered() IsItemActive() IsItemActivated() IsItemDeactivated() IsItemClicked() -// Frame N+0 (mouse button is down) - true - - - true -// Frame N+1 (mouse button is down) - true - - - - -// Frame N+2 (mouse button is released) - true - - - - -// Frame N+3 (mouse button is released) - true - - - - -// Frame N+4 (mouse button is down) true true true true - true -// Frame N+5 (mouse button is down) - true true - - - -// Frame N+6 (mouse button is released) - true - - true - -// Frame N+7 (mouse button is released) - true - - - - -//------------------------------------------------------------------------------------------------------------------------------------------------ -// Note that some combinations are supported, -// - PressedOnDragDropHold can generally be associated with any flag. -// - PressedOnDoubleClick can be associated by PressedOnClickRelease/PressedOnRelease, in which case the second release event won't be reported. -//------------------------------------------------------------------------------------------------------------------------------------------------ -// The behavior of the return-value changes when ImGuiButtonFlags_Repeat is set: -// Repeat+ Repeat+ Repeat+ Repeat+ -// PressedOnClickRelease PressedOnClick PressedOnRelease PressedOnDoubleClick -//------------------------------------------------------------------------------------------------------------------------------------------------- -// Frame N+0 (mouse button is down) - true - true -// ... - - - - -// Frame N + RepeatDelay true true - true -// ... - - - - -// Frame N + RepeatDelay + RepeatRate*N true true - true -//------------------------------------------------------------------------------------------------------------------------------------------------- - -bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool* out_held, ImGuiButtonFlags flags) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = GetCurrentWindow(); - - if (flags & ImGuiButtonFlags_Disabled) - { - if (out_hovered) *out_hovered = false; - if (out_held) *out_held = false; - if (g.ActiveId == id) ClearActiveID(); - return false; - } - - // Default only reacts to left mouse button - if ((flags & ImGuiButtonFlags_MouseButtonMask_) == 0) - flags |= ImGuiButtonFlags_MouseButtonDefault_; - - // Default behavior requires click + release inside bounding box - if ((flags & ImGuiButtonFlags_PressedOnMask_) == 0) - flags |= ImGuiButtonFlags_PressedOnDefault_; - - ImGuiWindow* backup_hovered_window = g.HoveredWindow; - const bool flatten_hovered_children = (flags & ImGuiButtonFlags_FlattenChildren) && g.HoveredRootWindow == window; - if (flatten_hovered_children) - g.HoveredWindow = window; - -#ifdef IMGUI_ENABLE_TEST_ENGINE - if (id != 0 && window->DC.LastItemId != id) - ImGuiTestEngineHook_ItemAdd(&g, bb, id); -#endif - - bool pressed = false; - bool hovered = ItemHoverable(bb, id); - - // Drag source doesn't report as hovered - if (hovered && g.DragDropActive && g.DragDropPayload.SourceId == id && !(g.DragDropSourceFlags & ImGuiDragDropFlags_SourceNoDisableHover)) - hovered = false; - - // Special mode for Drag and Drop where holding button pressed for a long time while dragging another item triggers the button - if (g.DragDropActive && (flags & ImGuiButtonFlags_PressedOnDragDropHold) && !(g.DragDropSourceFlags & ImGuiDragDropFlags_SourceNoHoldToOpenOthers)) - if (IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByActiveItem)) - { - hovered = true; - SetHoveredID(id); - if (CalcTypematicRepeatAmount(g.HoveredIdTimer + 0.0001f - g.IO.DeltaTime, g.HoveredIdTimer + 0.0001f, 0.70f, 0.00f)) - { - pressed = true; - FocusWindow(window); - } - } - - if (flatten_hovered_children) - g.HoveredWindow = backup_hovered_window; - - // AllowOverlap mode (rarely used) requires previous frame HoveredId to be null or to match. This allows using patterns where a later submitted widget overlaps a previous one. - if (hovered && (flags & ImGuiButtonFlags_AllowItemOverlap) && (g.HoveredIdPreviousFrame != id && g.HoveredIdPreviousFrame != 0)) - hovered = false; - - // Mouse handling - if (hovered) - { - if (!(flags & ImGuiButtonFlags_NoKeyModifiers) || (!g.IO.KeyCtrl && !g.IO.KeyShift && !g.IO.KeyAlt)) - { - // Poll buttons - int mouse_button_clicked = -1; - int mouse_button_released = -1; - if ((flags & ImGuiButtonFlags_MouseButtonLeft) && g.IO.MouseClicked[0]) { mouse_button_clicked = 0; } - else if ((flags & ImGuiButtonFlags_MouseButtonRight) && g.IO.MouseClicked[1]) { mouse_button_clicked = 1; } - else if ((flags & ImGuiButtonFlags_MouseButtonMiddle) && g.IO.MouseClicked[2]) { mouse_button_clicked = 2; } - if ((flags & ImGuiButtonFlags_MouseButtonLeft) && g.IO.MouseReleased[0]) { mouse_button_released = 0; } - else if ((flags & ImGuiButtonFlags_MouseButtonRight) && g.IO.MouseReleased[1]) { mouse_button_released = 1; } - else if ((flags & ImGuiButtonFlags_MouseButtonMiddle) && g.IO.MouseReleased[2]) { mouse_button_released = 2; } - - if (mouse_button_clicked != -1 && g.ActiveId != id) - { - if (flags & (ImGuiButtonFlags_PressedOnClickRelease | ImGuiButtonFlags_PressedOnClickReleaseAnywhere)) - { - SetActiveID(id, window); - g.ActiveIdMouseButton = mouse_button_clicked; - if (!(flags & ImGuiButtonFlags_NoNavFocus)) - SetFocusID(id, window); - FocusWindow(window); - } - if ((flags & ImGuiButtonFlags_PressedOnClick) || ((flags & ImGuiButtonFlags_PressedOnDoubleClick) && g.IO.MouseDoubleClicked[mouse_button_clicked])) - { - pressed = true; - if (flags & ImGuiButtonFlags_NoHoldingActiveId) - ClearActiveID(); - else - SetActiveID(id, window); // Hold on ID - g.ActiveIdMouseButton = mouse_button_clicked; - FocusWindow(window); - } - } - if ((flags & ImGuiButtonFlags_PressedOnRelease) && mouse_button_released != -1) - { - // Repeat mode trumps on release behavior - if (!((flags & ImGuiButtonFlags_Repeat) && g.IO.MouseDownDurationPrev[mouse_button_released] >= g.IO.KeyRepeatDelay)) - pressed = true; - ClearActiveID(); - } - - // 'Repeat' mode acts when held regardless of _PressedOn flags (see table above). - // Relies on repeat logic of IsMouseClicked() but we may as well do it ourselves if we end up exposing finer RepeatDelay/RepeatRate settings. - if (g.ActiveId == id && (flags & ImGuiButtonFlags_Repeat)) - if (g.IO.MouseDownDuration[g.ActiveIdMouseButton] > 0.0f && IsMouseClicked(g.ActiveIdMouseButton, true)) - pressed = true; - } - - if (pressed) - g.NavDisableHighlight = true; - } - - // Gamepad/Keyboard navigation - // We report navigated item as hovered but we don't set g.HoveredId to not interfere with mouse. - if (g.NavId == id && !g.NavDisableHighlight && g.NavDisableMouseHover && (g.ActiveId == 0 || g.ActiveId == id || g.ActiveId == window->MoveId)) - if (!(flags & ImGuiButtonFlags_NoHoveredOnFocus)) - hovered = true; - if (g.NavActivateDownId == id) - { - bool nav_activated_by_code = (g.NavActivateId == id); - bool nav_activated_by_inputs = IsNavInputTest(ImGuiNavInput_Activate, (flags & ImGuiButtonFlags_Repeat) ? ImGuiInputReadMode_Repeat : ImGuiInputReadMode_Pressed); - if (nav_activated_by_code || nav_activated_by_inputs) - pressed = true; - if (nav_activated_by_code || nav_activated_by_inputs || g.ActiveId == id) - { - // Set active id so it can be queried by user via IsItemActive(), equivalent of holding the mouse button. - g.NavActivateId = id; // This is so SetActiveId assign a Nav source - SetActiveID(id, window); - if ((nav_activated_by_code || nav_activated_by_inputs) && !(flags & ImGuiButtonFlags_NoNavFocus)) - SetFocusID(id, window); - } - } - - bool held = false; - if (g.ActiveId == id) - { - if (g.ActiveIdSource == ImGuiInputSource_Mouse) - { - if (g.ActiveIdIsJustActivated) - g.ActiveIdClickOffset = g.IO.MousePos - bb.Min; - - const int mouse_button = g.ActiveIdMouseButton; - IM_ASSERT(mouse_button >= 0 && mouse_button < ImGuiMouseButton_COUNT); - if (g.IO.MouseDown[mouse_button]) - { - held = true; - } - else - { - bool release_in = hovered && (flags & ImGuiButtonFlags_PressedOnClickRelease) != 0; - bool release_anywhere = (flags & ImGuiButtonFlags_PressedOnClickReleaseAnywhere) != 0; - if ((release_in || release_anywhere) && !g.DragDropActive) - { - bool is_double_click_release = (flags & ImGuiButtonFlags_PressedOnDoubleClick) && g.IO.MouseDownWasDoubleClick[mouse_button]; - bool is_repeating_already = (flags & ImGuiButtonFlags_Repeat) && g.IO.MouseDownDurationPrev[mouse_button] >= g.IO.KeyRepeatDelay; // Repeat mode trumps - if (!is_double_click_release && !is_repeating_already) - pressed = true; - } - ClearActiveID(); - } - if (!(flags & ImGuiButtonFlags_NoNavFocus)) - g.NavDisableHighlight = true; - } - else if (g.ActiveIdSource == ImGuiInputSource_Nav) - { - if (g.NavActivateDownId != id) - ClearActiveID(); - } - if (pressed) - g.ActiveIdHasBeenPressedBefore = true; - } - - if (out_hovered) *out_hovered = hovered; - if (out_held) *out_held = held; - - return pressed; -} - -bool ImGui::ButtonEx(const char* label, const ImVec2& size_arg, ImGuiButtonFlags flags) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - - ImGuiContext& g = *GImGui; - const ImGuiStyle& style = g.Style; - const ImGuiID id = window->GetID(label); - const ImVec2 label_size = CalcTextSize(label, NULL, true); - - ImVec2 pos = window->DC.CursorPos; - if ((flags & ImGuiButtonFlags_AlignTextBaseLine) && style.FramePadding.y < window->DC.CurrLineTextBaseOffset) // Try to vertically align buttons that are smaller/have no padding so that text baseline matches (bit hacky, since it shouldn't be a flag) - pos.y += window->DC.CurrLineTextBaseOffset - style.FramePadding.y; - ImVec2 size = CalcItemSize(size_arg, label_size.x + style.FramePadding.x * 2.0f, label_size.y + style.FramePadding.y * 2.0f); - - const ImRect bb(pos, pos + size); - ItemSize(size, style.FramePadding.y); - if (!ItemAdd(bb, id)) - return false; - - if (window->DC.ItemFlags & ImGuiItemFlags_ButtonRepeat) - flags |= ImGuiButtonFlags_Repeat; - bool hovered, held; - bool pressed = ButtonBehavior(bb, id, &hovered, &held, flags); - - // Render - const ImU32 col = GetColorU32((held && hovered) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button); - RenderNavHighlight(bb, id); - RenderFrame(bb.Min, bb.Max, col, true, style.FrameRounding); - RenderTextClipped(bb.Min + style.FramePadding, bb.Max - style.FramePadding, label, NULL, &label_size, style.ButtonTextAlign, &bb); - - // Automatically close popups - //if (pressed && !(flags & ImGuiButtonFlags_DontClosePopups) && (window->Flags & ImGuiWindowFlags_Popup)) - // CloseCurrentPopup(); - - IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.LastItemStatusFlags); - return pressed; -} - -bool ImGui::Button(const char* label, const ImVec2& size_arg) -{ - return ButtonEx(label, size_arg, 0); -} - -// Small buttons fits within text without additional vertical spacing. -bool ImGui::SmallButton(const char* label) -{ - ImGuiContext& g = *GImGui; - float backup_padding_y = g.Style.FramePadding.y; - g.Style.FramePadding.y = 0.0f; - bool pressed = ButtonEx(label, ImVec2(0, 0), ImGuiButtonFlags_AlignTextBaseLine); - g.Style.FramePadding.y = backup_padding_y; - return pressed; -} - -// Tip: use ImGui::PushID()/PopID() to push indices or pointers in the ID stack. -// Then you can keep 'str_id' empty or the same for all your buttons (instead of creating a string based on a non-string id) -bool ImGui::InvisibleButton(const char* str_id, const ImVec2& size_arg) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - - // Cannot use zero-size for InvisibleButton(). Unlike Button() there is not way to fallback using the label size. - IM_ASSERT(size_arg.x != 0.0f && size_arg.y != 0.0f); - - const ImGuiID id = window->GetID(str_id); - ImVec2 size = CalcItemSize(size_arg, 0.0f, 0.0f); - const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size); - ItemSize(size); - if (!ItemAdd(bb, id)) - return false; - - bool hovered, held; - bool pressed = ButtonBehavior(bb, id, &hovered, &held); - - return pressed; -} - -bool ImGui::ArrowButtonEx(const char* str_id, ImGuiDir dir, ImVec2 size, ImGuiButtonFlags flags) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - - ImGuiContext& g = *GImGui; - const ImGuiID id = window->GetID(str_id); - const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size); - const float default_size = GetFrameHeight(); - ItemSize(size, (size.y >= default_size) ? g.Style.FramePadding.y : -1.0f); - if (!ItemAdd(bb, id)) - return false; - - if (window->DC.ItemFlags & ImGuiItemFlags_ButtonRepeat) - flags |= ImGuiButtonFlags_Repeat; - - bool hovered, held; - bool pressed = ButtonBehavior(bb, id, &hovered, &held, flags); - - // Render - const ImU32 bg_col = GetColorU32((held && hovered) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button); - const ImU32 text_col = GetColorU32(ImGuiCol_Text); - RenderNavHighlight(bb, id); - RenderFrame(bb.Min, bb.Max, bg_col, true, g.Style.FrameRounding); - RenderArrow(window->DrawList, bb.Min + ImVec2(ImMax(0.0f, (size.x - g.FontSize) * 0.5f), ImMax(0.0f, (size.y - g.FontSize) * 0.5f)), text_col, dir); - - return pressed; -} - -bool ImGui::ArrowButton(const char* str_id, ImGuiDir dir) -{ - float sz = GetFrameHeight(); - return ArrowButtonEx(str_id, dir, ImVec2(sz, sz), ImGuiButtonFlags_None); -} - -// Button to close a window -bool ImGui::CloseButton(ImGuiID id, const ImVec2& pos)//, float size) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - - // We intentionally allow interaction when clipped so that a mechanical Alt,Right,Validate sequence close a window. - // (this isn't the regular behavior of buttons, but it doesn't affect the user much because navigation tends to keep items visible). - const ImRect bb(pos, pos + ImVec2(g.FontSize, g.FontSize) + g.Style.FramePadding * 2.0f); - bool is_clipped = !ItemAdd(bb, id); - - bool hovered, held; - bool pressed = ButtonBehavior(bb, id, &hovered, &held); - if (is_clipped) - return pressed; - - // Render - ImU32 col = GetColorU32(held ? ImGuiCol_ButtonActive : ImGuiCol_ButtonHovered); - ImVec2 center = bb.GetCenter(); - if (hovered) - window->DrawList->AddCircleFilled(center, ImMax(2.0f, g.FontSize * 0.5f + 1.0f), col, 12); - - float cross_extent = g.FontSize * 0.5f * 0.7071f - 1.0f; - ImU32 cross_col = GetColorU32(ImGuiCol_Text); - center -= ImVec2(0.5f, 0.5f); - window->DrawList->AddLine(center + ImVec2(+cross_extent,+cross_extent), center + ImVec2(-cross_extent,-cross_extent), cross_col, 1.0f); - window->DrawList->AddLine(center + ImVec2(+cross_extent,-cross_extent), center + ImVec2(-cross_extent,+cross_extent), cross_col, 1.0f); - - return pressed; -} - -bool ImGui::CollapseButton(ImGuiID id, const ImVec2& pos) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - - ImRect bb(pos, pos + ImVec2(g.FontSize, g.FontSize) + g.Style.FramePadding * 2.0f); - ItemAdd(bb, id); - bool hovered, held; - bool pressed = ButtonBehavior(bb, id, &hovered, &held, ImGuiButtonFlags_None); - - // Render - ImU32 bg_col = GetColorU32((held && hovered) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button); - ImU32 text_col = GetColorU32(ImGuiCol_Text); - ImVec2 center = bb.GetCenter(); - if (hovered || held) - window->DrawList->AddCircleFilled(center/*+ ImVec2(0.0f, -0.5f)*/, g.FontSize * 0.5f + 1.0f, bg_col, 12); - RenderArrow(window->DrawList, bb.Min + g.Style.FramePadding, text_col, window->Collapsed ? ImGuiDir_Right : ImGuiDir_Down, 1.0f); - - // Switch to moving the window after mouse is moved beyond the initial drag threshold - if (IsItemActive() && IsMouseDragging(0)) - StartMouseMovingWindow(window); - - return pressed; -} - -ImGuiID ImGui::GetWindowScrollbarID(ImGuiWindow* window, ImGuiAxis axis) -{ - return window->GetIDNoKeepAlive(axis == ImGuiAxis_X ? "#SCROLLX" : "#SCROLLY"); -} - -// Vertical/Horizontal scrollbar -// The entire piece of code below is rather confusing because: -// - We handle absolute seeking (when first clicking outside the grab) and relative manipulation (afterward or when clicking inside the grab) -// - We store values as normalized ratio and in a form that allows the window content to change while we are holding on a scrollbar -// - We handle both horizontal and vertical scrollbars, which makes the terminology not ideal. -// Still, the code should probably be made simpler.. -bool ImGui::ScrollbarEx(const ImRect& bb_frame, ImGuiID id, ImGuiAxis axis, float* p_scroll_v, float size_avail_v, float size_contents_v, ImDrawCornerFlags rounding_corners) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - if (window->SkipItems) - return false; - - const float bb_frame_width = bb_frame.GetWidth(); - const float bb_frame_height = bb_frame.GetHeight(); - if (bb_frame_width <= 0.0f || bb_frame_height <= 0.0f) - return false; - - // When we are too small, start hiding and disabling the grab (this reduce visual noise on very small window and facilitate using the resize grab) - float alpha = 1.0f; - if ((axis == ImGuiAxis_Y) && bb_frame_height < g.FontSize + g.Style.FramePadding.y * 2.0f) - alpha = ImSaturate((bb_frame_height - g.FontSize) / (g.Style.FramePadding.y * 2.0f)); - if (alpha <= 0.0f) - return false; - - const ImGuiStyle& style = g.Style; - const bool allow_interaction = (alpha >= 1.0f); - const bool horizontal = (axis == ImGuiAxis_X); - - ImRect bb = bb_frame; - bb.Expand(ImVec2(-ImClamp(IM_FLOOR((bb_frame_width - 2.0f) * 0.5f), 0.0f, 3.0f), -ImClamp(IM_FLOOR((bb_frame_height - 2.0f) * 0.5f), 0.0f, 3.0f))); - - // V denote the main, longer axis of the scrollbar (= height for a vertical scrollbar) - const float scrollbar_size_v = horizontal ? bb.GetWidth() : bb.GetHeight(); - - // Calculate the height of our grabbable box. It generally represent the amount visible (vs the total scrollable amount) - // But we maintain a minimum size in pixel to allow for the user to still aim inside. - IM_ASSERT(ImMax(size_contents_v, size_avail_v) > 0.0f); // Adding this assert to check if the ImMax(XXX,1.0f) is still needed. PLEASE CONTACT ME if this triggers. - const float win_size_v = ImMax(ImMax(size_contents_v, size_avail_v), 1.0f); - const float grab_h_pixels = ImClamp(scrollbar_size_v * (size_avail_v / win_size_v), style.GrabMinSize, scrollbar_size_v); - const float grab_h_norm = grab_h_pixels / scrollbar_size_v; - - // Handle input right away. None of the code of Begin() is relying on scrolling position before calling Scrollbar(). - bool held = false; - bool hovered = false; - ButtonBehavior(bb, id, &hovered, &held, ImGuiButtonFlags_NoNavFocus); - - float scroll_max = ImMax(1.0f, size_contents_v - size_avail_v); - float scroll_ratio = ImSaturate(*p_scroll_v / scroll_max); - float grab_v_norm = scroll_ratio * (scrollbar_size_v - grab_h_pixels) / scrollbar_size_v; - if (held && allow_interaction && grab_h_norm < 1.0f) - { - float scrollbar_pos_v = horizontal ? bb.Min.x : bb.Min.y; - float mouse_pos_v = horizontal ? g.IO.MousePos.x : g.IO.MousePos.y; - - // Click position in scrollbar normalized space (0.0f->1.0f) - const float clicked_v_norm = ImSaturate((mouse_pos_v - scrollbar_pos_v) / scrollbar_size_v); - SetHoveredID(id); - - bool seek_absolute = false; - if (g.ActiveIdIsJustActivated) - { - // On initial click calculate the distance between mouse and the center of the grab - seek_absolute = (clicked_v_norm < grab_v_norm || clicked_v_norm > grab_v_norm + grab_h_norm); - if (seek_absolute) - g.ScrollbarClickDeltaToGrabCenter = 0.0f; - else - g.ScrollbarClickDeltaToGrabCenter = clicked_v_norm - grab_v_norm - grab_h_norm * 0.5f; - } - - // Apply scroll - // It is ok to modify Scroll here because we are being called in Begin() after the calculation of ContentSize and before setting up our starting position - const float scroll_v_norm = ImSaturate((clicked_v_norm - g.ScrollbarClickDeltaToGrabCenter - grab_h_norm * 0.5f) / (1.0f - grab_h_norm)); - *p_scroll_v = IM_ROUND(scroll_v_norm * scroll_max);//(win_size_contents_v - win_size_v)); - - // Update values for rendering - scroll_ratio = ImSaturate(*p_scroll_v / scroll_max); - grab_v_norm = scroll_ratio * (scrollbar_size_v - grab_h_pixels) / scrollbar_size_v; - - // Update distance to grab now that we have seeked and saturated - if (seek_absolute) - g.ScrollbarClickDeltaToGrabCenter = clicked_v_norm - grab_v_norm - grab_h_norm * 0.5f; - } - - // Render - window->DrawList->AddRectFilled(bb_frame.Min, bb_frame.Max, GetColorU32(ImGuiCol_ScrollbarBg), window->WindowRounding, rounding_corners); - const ImU32 grab_col = GetColorU32(held ? ImGuiCol_ScrollbarGrabActive : hovered ? ImGuiCol_ScrollbarGrabHovered : ImGuiCol_ScrollbarGrab, alpha); - ImRect grab_rect; - if (horizontal) - grab_rect = ImRect(ImLerp(bb.Min.x, bb.Max.x, grab_v_norm), bb.Min.y, ImLerp(bb.Min.x, bb.Max.x, grab_v_norm) + grab_h_pixels, bb.Max.y); - else - grab_rect = ImRect(bb.Min.x, ImLerp(bb.Min.y, bb.Max.y, grab_v_norm), bb.Max.x, ImLerp(bb.Min.y, bb.Max.y, grab_v_norm) + grab_h_pixels); - window->DrawList->AddRectFilled(grab_rect.Min, grab_rect.Max, grab_col, style.ScrollbarRounding); - - return held; -} - -void ImGui::Scrollbar(ImGuiAxis axis) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - - const ImGuiID id = GetWindowScrollbarID(window, axis); - KeepAliveID(id); - - // Calculate scrollbar bounding box - const ImRect outer_rect = window->Rect(); - const ImRect inner_rect = window->InnerRect; - const float border_size = window->WindowBorderSize; - const float scrollbar_size = window->ScrollbarSizes[axis ^ 1]; - IM_ASSERT(scrollbar_size > 0.0f); - const float other_scrollbar_size = window->ScrollbarSizes[axis]; - ImDrawCornerFlags rounding_corners = (other_scrollbar_size <= 0.0f) ? ImDrawCornerFlags_BotRight : 0; - ImRect bb; - if (axis == ImGuiAxis_X) - { - bb.Min = ImVec2(inner_rect.Min.x, ImMax(outer_rect.Min.y, outer_rect.Max.y - border_size - scrollbar_size)); - bb.Max = ImVec2(inner_rect.Max.x, outer_rect.Max.y); - rounding_corners |= ImDrawCornerFlags_BotLeft; - } - else - { - bb.Min = ImVec2(ImMax(outer_rect.Min.x, outer_rect.Max.x - border_size - scrollbar_size), inner_rect.Min.y); - bb.Max = ImVec2(outer_rect.Max.x, window->InnerRect.Max.y); - rounding_corners |= ((window->Flags & ImGuiWindowFlags_NoTitleBar) && !(window->Flags & ImGuiWindowFlags_MenuBar)) ? ImDrawCornerFlags_TopRight : 0; - } - ScrollbarEx(bb, id, axis, &window->Scroll[axis], inner_rect.Max[axis] - inner_rect.Min[axis], window->ContentSize[axis] + window->WindowPadding[axis] * 2.0f, rounding_corners); -} - -void ImGui::Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0, const ImVec2& uv1, const ImVec4& tint_col, const ImVec4& border_col) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return; - - ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size); - if (border_col.w > 0.0f) - bb.Max += ImVec2(2, 2); - ItemSize(bb); - if (!ItemAdd(bb, 0)) - return; - - if (border_col.w > 0.0f) - { - window->DrawList->AddRect(bb.Min, bb.Max, GetColorU32(border_col), 0.0f); - window->DrawList->AddImage(user_texture_id, bb.Min + ImVec2(1, 1), bb.Max - ImVec2(1, 1), uv0, uv1, GetColorU32(tint_col)); - } - else - { - window->DrawList->AddImage(user_texture_id, bb.Min, bb.Max, uv0, uv1, GetColorU32(tint_col)); - } -} - -// frame_padding < 0: uses FramePadding from style (default) -// frame_padding = 0: no framing -// frame_padding > 0: set framing size -// The color used are the button colors. -bool ImGui::ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0, const ImVec2& uv1, int frame_padding, const ImVec4& bg_col, const ImVec4& tint_col) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - - ImGuiContext& g = *GImGui; - const ImGuiStyle& style = g.Style; - - // Default to using texture ID as ID. User can still push string/integer prefixes. - // We could hash the size/uv to create a unique ID but that would prevent the user from animating UV. - PushID((void*)(intptr_t)user_texture_id); - const ImGuiID id = window->GetID("#image"); - PopID(); - - const ImVec2 padding = (frame_padding >= 0) ? ImVec2((float)frame_padding, (float)frame_padding) : style.FramePadding; - const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size + padding * 2); - const ImRect image_bb(window->DC.CursorPos + padding, window->DC.CursorPos + padding + size); - ItemSize(bb); - if (!ItemAdd(bb, id)) - return false; - - bool hovered, held; - bool pressed = ButtonBehavior(bb, id, &hovered, &held); - - // Render - const ImU32 col = GetColorU32((held && hovered) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button); - RenderNavHighlight(bb, id); - RenderFrame(bb.Min, bb.Max, col, true, ImClamp((float)ImMin(padding.x, padding.y), 0.0f, style.FrameRounding)); - if (bg_col.w > 0.0f) - window->DrawList->AddRectFilled(image_bb.Min, image_bb.Max, GetColorU32(bg_col)); - window->DrawList->AddImage(user_texture_id, image_bb.Min, image_bb.Max, uv0, uv1, GetColorU32(tint_col)); - - return pressed; -} - -bool ImGui::Checkbox(const char* label, bool* v) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - - ImGuiContext& g = *GImGui; - const ImGuiStyle& style = g.Style; - const ImGuiID id = window->GetID(label); - const ImVec2 label_size = CalcTextSize(label, NULL, true); - - const float square_sz = GetFrameHeight(); - const ImVec2 pos = window->DC.CursorPos; - const ImRect total_bb(pos, pos + ImVec2(square_sz + (label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f), label_size.y + style.FramePadding.y * 2.0f)); - ItemSize(total_bb, style.FramePadding.y); - if (!ItemAdd(total_bb, id)) - return false; - - bool hovered, held; - bool pressed = ButtonBehavior(total_bb, id, &hovered, &held); - if (pressed) - { - *v = !(*v); - MarkItemEdited(id); - } - - const ImRect check_bb(pos, pos + ImVec2(square_sz, square_sz)); - RenderNavHighlight(total_bb, id); - RenderFrame(check_bb.Min, check_bb.Max, GetColorU32((held && hovered) ? ImGuiCol_FrameBgActive : hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg), true, style.FrameRounding); - ImU32 check_col = GetColorU32(ImGuiCol_CheckMark); - if (window->DC.ItemFlags & ImGuiItemFlags_MixedValue) - { - // Undocumented tristate/mixed/indeterminate checkbox (#2644) - ImVec2 pad(ImMax(1.0f, IM_FLOOR(square_sz / 3.6f)), ImMax(1.0f, IM_FLOOR(square_sz / 3.6f))); - window->DrawList->AddRectFilled(check_bb.Min + pad, check_bb.Max - pad, check_col, style.FrameRounding); - } - else if (*v) - { - const float pad = ImMax(1.0f, IM_FLOOR(square_sz / 6.0f)); - RenderCheckMark(window->DrawList, check_bb.Min + ImVec2(pad, pad), check_col, square_sz - pad*2.0f); - } - - if (g.LogEnabled) - LogRenderedText(&total_bb.Min, *v ? "[x]" : "[ ]"); - if (label_size.x > 0.0f) - RenderText(ImVec2(check_bb.Max.x + style.ItemInnerSpacing.x, check_bb.Min.y + style.FramePadding.y), label); - - IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags | ImGuiItemStatusFlags_Checkable | (*v ? ImGuiItemStatusFlags_Checked : 0)); - return pressed; -} - -bool ImGui::CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value) -{ - bool v = ((*flags & flags_value) == flags_value); - bool pressed = Checkbox(label, &v); - if (pressed) - { - if (v) - *flags |= flags_value; - else - *flags &= ~flags_value; - } - - return pressed; -} - -bool ImGui::RadioButton(const char* label, bool active) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - - ImGuiContext& g = *GImGui; - const ImGuiStyle& style = g.Style; - const ImGuiID id = window->GetID(label); - const ImVec2 label_size = CalcTextSize(label, NULL, true); - - const float square_sz = GetFrameHeight(); - const ImVec2 pos = window->DC.CursorPos; - const ImRect check_bb(pos, pos + ImVec2(square_sz, square_sz)); - const ImRect total_bb(pos, pos + ImVec2(square_sz + (label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f), label_size.y + style.FramePadding.y * 2.0f)); - ItemSize(total_bb, style.FramePadding.y); - if (!ItemAdd(total_bb, id)) - return false; - - ImVec2 center = check_bb.GetCenter(); - center.x = IM_ROUND(center.x); - center.y = IM_ROUND(center.y); - const float radius = (square_sz - 1.0f) * 0.5f; - - bool hovered, held; - bool pressed = ButtonBehavior(total_bb, id, &hovered, &held); - if (pressed) - MarkItemEdited(id); - - RenderNavHighlight(total_bb, id); - window->DrawList->AddCircleFilled(center, radius, GetColorU32((held && hovered) ? ImGuiCol_FrameBgActive : hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg), 16); - if (active) - { - const float pad = ImMax(1.0f, IM_FLOOR(square_sz / 6.0f)); - window->DrawList->AddCircleFilled(center, radius - pad, GetColorU32(ImGuiCol_CheckMark), 16); - } - - if (style.FrameBorderSize > 0.0f) - { - window->DrawList->AddCircle(center + ImVec2(1,1), radius, GetColorU32(ImGuiCol_BorderShadow), 16, style.FrameBorderSize); - window->DrawList->AddCircle(center, radius, GetColorU32(ImGuiCol_Border), 16, style.FrameBorderSize); - } - - if (g.LogEnabled) - LogRenderedText(&total_bb.Min, active ? "(x)" : "( )"); - if (label_size.x > 0.0f) - RenderText(ImVec2(check_bb.Max.x + style.ItemInnerSpacing.x, check_bb.Min.y + style.FramePadding.y), label); - - return pressed; -} - -// FIXME: This would work nicely if it was a public template, e.g. 'template RadioButton(const char* label, T* v, T v_button)', but I'm not sure how we would expose it.. -bool ImGui::RadioButton(const char* label, int* v, int v_button) -{ - const bool pressed = RadioButton(label, *v == v_button); - if (pressed) - *v = v_button; - return pressed; -} - -// size_arg (for each axis) < 0.0f: align to end, 0.0f: auto, > 0.0f: specified size -void ImGui::ProgressBar(float fraction, const ImVec2& size_arg, const char* overlay) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return; - - ImGuiContext& g = *GImGui; - const ImGuiStyle& style = g.Style; - - ImVec2 pos = window->DC.CursorPos; - ImVec2 size = CalcItemSize(size_arg, CalcItemWidth(), g.FontSize + style.FramePadding.y*2.0f); - ImRect bb(pos, pos + size); - ItemSize(size, style.FramePadding.y); - if (!ItemAdd(bb, 0)) - return; - - // Render - fraction = ImSaturate(fraction); - RenderFrame(bb.Min, bb.Max, GetColorU32(ImGuiCol_FrameBg), true, style.FrameRounding); - bb.Expand(ImVec2(-style.FrameBorderSize, -style.FrameBorderSize)); - const ImVec2 fill_br = ImVec2(ImLerp(bb.Min.x, bb.Max.x, fraction), bb.Max.y); - RenderRectFilledRangeH(window->DrawList, bb, GetColorU32(ImGuiCol_PlotHistogram), 0.0f, fraction, style.FrameRounding); - - // Default displaying the fraction as percentage string, but user can override it - char overlay_buf[32]; - if (!overlay) - { - ImFormatString(overlay_buf, IM_ARRAYSIZE(overlay_buf), "%.0f%%", fraction*100+0.01f); - overlay = overlay_buf; - } - - ImVec2 overlay_size = CalcTextSize(overlay, NULL); - if (overlay_size.x > 0.0f) - RenderTextClipped(ImVec2(ImClamp(fill_br.x + style.ItemSpacing.x, bb.Min.x, bb.Max.x - overlay_size.x - style.ItemInnerSpacing.x), bb.Min.y), bb.Max, overlay, NULL, &overlay_size, ImVec2(0.0f,0.5f), &bb); -} - -void ImGui::Bullet() -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return; - - ImGuiContext& g = *GImGui; - const ImGuiStyle& style = g.Style; - const float line_height = ImMax(ImMin(window->DC.CurrLineSize.y, g.FontSize + g.Style.FramePadding.y*2), g.FontSize); - const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(g.FontSize, line_height)); - ItemSize(bb); - if (!ItemAdd(bb, 0)) - { - SameLine(0, style.FramePadding.x*2); - return; - } - - // Render and stay on same line - ImU32 text_col = GetColorU32(ImGuiCol_Text); - RenderBullet(window->DrawList, bb.Min + ImVec2(style.FramePadding.x + g.FontSize*0.5f, line_height*0.5f), text_col); - SameLine(0, style.FramePadding.x * 2.0f); -} - -//------------------------------------------------------------------------- -// [SECTION] Widgets: Low-level Layout helpers -//------------------------------------------------------------------------- -// - Spacing() -// - Dummy() -// - NewLine() -// - AlignTextToFramePadding() -// - SeparatorEx() [Internal] -// - Separator() -// - SplitterBehavior() [Internal] -// - ShrinkWidths() [Internal] -//------------------------------------------------------------------------- - -void ImGui::Spacing() -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return; - ItemSize(ImVec2(0,0)); -} - -void ImGui::Dummy(const ImVec2& size) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return; - - const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size); - ItemSize(size); - ItemAdd(bb, 0); -} - -void ImGui::NewLine() -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return; - - ImGuiContext& g = *GImGui; - const ImGuiLayoutType backup_layout_type = window->DC.LayoutType; - window->DC.LayoutType = ImGuiLayoutType_Vertical; - if (window->DC.CurrLineSize.y > 0.0f) // In the event that we are on a line with items that is smaller that FontSize high, we will preserve its height. - ItemSize(ImVec2(0,0)); - else - ItemSize(ImVec2(0.0f, g.FontSize)); - window->DC.LayoutType = backup_layout_type; -} - -void ImGui::AlignTextToFramePadding() -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return; - - ImGuiContext& g = *GImGui; - window->DC.CurrLineSize.y = ImMax(window->DC.CurrLineSize.y, g.FontSize + g.Style.FramePadding.y * 2); - window->DC.CurrLineTextBaseOffset = ImMax(window->DC.CurrLineTextBaseOffset, g.Style.FramePadding.y); -} - -// Horizontal/vertical separating line -void ImGui::SeparatorEx(ImGuiSeparatorFlags flags) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return; - - ImGuiContext& g = *GImGui; - IM_ASSERT(ImIsPowerOfTwo(flags & (ImGuiSeparatorFlags_Horizontal | ImGuiSeparatorFlags_Vertical))); // Check that only 1 option is selected - - float thickness_draw = 1.0f; - float thickness_layout = 0.0f; - if (flags & ImGuiSeparatorFlags_Vertical) - { - // Vertical separator, for menu bars (use current line height). Not exposed because it is misleading and it doesn't have an effect on regular layout. - float y1 = window->DC.CursorPos.y; - float y2 = window->DC.CursorPos.y + window->DC.CurrLineSize.y; - const ImRect bb(ImVec2(window->DC.CursorPos.x, y1), ImVec2(window->DC.CursorPos.x + thickness_draw, y2)); - ItemSize(ImVec2(thickness_layout, 0.0f)); - if (!ItemAdd(bb, 0)) - return; - - // Draw - window->DrawList->AddLine(ImVec2(bb.Min.x, bb.Min.y), ImVec2(bb.Min.x, bb.Max.y), GetColorU32(ImGuiCol_Separator)); - if (g.LogEnabled) - LogText(" |"); - } - else if (flags & ImGuiSeparatorFlags_Horizontal) - { - // Horizontal Separator - float x1 = window->Pos.x; - float x2 = window->Pos.x + window->Size.x; - if (!window->DC.GroupStack.empty()) - x1 += window->DC.Indent.x; - - ImGuiColumns* columns = (flags & ImGuiSeparatorFlags_SpanAllColumns) ? window->DC.CurrentColumns : NULL; - if (columns) - PushColumnsBackground(); - - // We don't provide our width to the layout so that it doesn't get feed back into AutoFit - const ImRect bb(ImVec2(x1, window->DC.CursorPos.y), ImVec2(x2, window->DC.CursorPos.y + thickness_draw)); - ItemSize(ImVec2(0.0f, thickness_layout)); - const bool item_visible = ItemAdd(bb, 0); - if (item_visible) - { - // Draw - window->DrawList->AddLine(bb.Min, ImVec2(bb.Max.x, bb.Min.y), GetColorU32(ImGuiCol_Separator)); - if (g.LogEnabled) - LogRenderedText(&bb.Min, "--------------------------------"); - } - if (columns) - { - PopColumnsBackground(); - columns->LineMinY = window->DC.CursorPos.y; - } - } -} - -void ImGui::Separator() -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - if (window->SkipItems) - return; - - // Those flags should eventually be overridable by the user - ImGuiSeparatorFlags flags = (window->DC.LayoutType == ImGuiLayoutType_Horizontal) ? ImGuiSeparatorFlags_Vertical : ImGuiSeparatorFlags_Horizontal; - flags |= ImGuiSeparatorFlags_SpanAllColumns; - SeparatorEx(flags); -} - -// Using 'hover_visibility_delay' allows us to hide the highlight and mouse cursor for a short time, which can be convenient to reduce visual noise. -bool ImGui::SplitterBehavior(const ImRect& bb, ImGuiID id, ImGuiAxis axis, float* size1, float* size2, float min_size1, float min_size2, float hover_extend, float hover_visibility_delay) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - - const ImGuiItemFlags item_flags_backup = window->DC.ItemFlags; - window->DC.ItemFlags |= ImGuiItemFlags_NoNav | ImGuiItemFlags_NoNavDefaultFocus; - bool item_add = ItemAdd(bb, id); - window->DC.ItemFlags = item_flags_backup; - if (!item_add) - return false; - - bool hovered, held; - ImRect bb_interact = bb; - bb_interact.Expand(axis == ImGuiAxis_Y ? ImVec2(0.0f, hover_extend) : ImVec2(hover_extend, 0.0f)); - ButtonBehavior(bb_interact, id, &hovered, &held, ImGuiButtonFlags_FlattenChildren | ImGuiButtonFlags_AllowItemOverlap); - if (g.ActiveId != id) - SetItemAllowOverlap(); - - if (held || (g.HoveredId == id && g.HoveredIdPreviousFrame == id && g.HoveredIdTimer >= hover_visibility_delay)) - SetMouseCursor(axis == ImGuiAxis_Y ? ImGuiMouseCursor_ResizeNS : ImGuiMouseCursor_ResizeEW); - - ImRect bb_render = bb; - if (held) - { - ImVec2 mouse_delta_2d = g.IO.MousePos - g.ActiveIdClickOffset - bb_interact.Min; - float mouse_delta = (axis == ImGuiAxis_Y) ? mouse_delta_2d.y : mouse_delta_2d.x; - - // Minimum pane size - float size_1_maximum_delta = ImMax(0.0f, *size1 - min_size1); - float size_2_maximum_delta = ImMax(0.0f, *size2 - min_size2); - if (mouse_delta < -size_1_maximum_delta) - mouse_delta = -size_1_maximum_delta; - if (mouse_delta > size_2_maximum_delta) - mouse_delta = size_2_maximum_delta; - - // Apply resize - if (mouse_delta != 0.0f) - { - if (mouse_delta < 0.0f) - IM_ASSERT(*size1 + mouse_delta >= min_size1); - if (mouse_delta > 0.0f) - IM_ASSERT(*size2 - mouse_delta >= min_size2); - *size1 += mouse_delta; - *size2 -= mouse_delta; - bb_render.Translate((axis == ImGuiAxis_X) ? ImVec2(mouse_delta, 0.0f) : ImVec2(0.0f, mouse_delta)); - MarkItemEdited(id); - } - } - - // Render - const ImU32 col = GetColorU32(held ? ImGuiCol_SeparatorActive : (hovered && g.HoveredIdTimer >= hover_visibility_delay) ? ImGuiCol_SeparatorHovered : ImGuiCol_Separator); - window->DrawList->AddRectFilled(bb_render.Min, bb_render.Max, col, 0.0f); - - return held; -} - -static int IMGUI_CDECL ShrinkWidthItemComparer(const void* lhs, const void* rhs) -{ - const ImGuiShrinkWidthItem* a = (const ImGuiShrinkWidthItem*)lhs; - const ImGuiShrinkWidthItem* b = (const ImGuiShrinkWidthItem*)rhs; - if (int d = (int)(b->Width - a->Width)) - return d; - return (b->Index - a->Index); -} - -// Shrink excess width from a set of item, by removing width from the larger items first. -void ImGui::ShrinkWidths(ImGuiShrinkWidthItem* items, int count, float width_excess) -{ - if (count == 1) - { - items[0].Width = ImMax(items[0].Width - width_excess, 1.0f); - return; - } - ImQsort(items, (size_t)count, sizeof(ImGuiShrinkWidthItem), ShrinkWidthItemComparer); - int count_same_width = 1; - while (width_excess > 0.0f && count_same_width < count) - { - while (count_same_width < count && items[0].Width <= items[count_same_width].Width) - count_same_width++; - float max_width_to_remove_per_item = (count_same_width < count) ? (items[0].Width - items[count_same_width].Width) : (items[0].Width - 1.0f); - float width_to_remove_per_item = ImMin(width_excess / count_same_width, max_width_to_remove_per_item); - for (int item_n = 0; item_n < count_same_width; item_n++) - items[item_n].Width -= width_to_remove_per_item; - width_excess -= width_to_remove_per_item * count_same_width; - } - - // Round width and redistribute remainder left-to-right (could make it an option of the function?) - // Ensure that e.g. the right-most tab of a shrunk tab-bar always reaches exactly at the same distance from the right-most edge of the tab bar separator. - width_excess = 0.0f; - for (int n = 0; n < count; n++) - { - float width_rounded = ImFloor(items[n].Width); - width_excess += items[n].Width - width_rounded; - items[n].Width = width_rounded; - } - if (width_excess > 0.0f) - for (int n = 0; n < count; n++) - if (items[n].Index < (int)(width_excess + 0.01f)) - items[n].Width += 1.0f; -} - -//------------------------------------------------------------------------- -// [SECTION] Widgets: ComboBox -//------------------------------------------------------------------------- -// - BeginCombo() -// - EndCombo() -// - Combo() -//------------------------------------------------------------------------- - -static float CalcMaxPopupHeightFromItemCount(int items_count) -{ - ImGuiContext& g = *GImGui; - if (items_count <= 0) - return FLT_MAX; - return (g.FontSize + g.Style.ItemSpacing.y) * items_count - g.Style.ItemSpacing.y + (g.Style.WindowPadding.y * 2); -} - -bool ImGui::BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags) -{ - // Always consume the SetNextWindowSizeConstraint() call in our early return paths - ImGuiContext& g = *GImGui; - bool has_window_size_constraint = (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSizeConstraint) != 0; - g.NextWindowData.Flags &= ~ImGuiNextWindowDataFlags_HasSizeConstraint; - - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - - IM_ASSERT((flags & (ImGuiComboFlags_NoArrowButton | ImGuiComboFlags_NoPreview)) != (ImGuiComboFlags_NoArrowButton | ImGuiComboFlags_NoPreview)); // Can't use both flags together - - const ImGuiStyle& style = g.Style; - const ImGuiID id = window->GetID(label); - - const float arrow_size = (flags & ImGuiComboFlags_NoArrowButton) ? 0.0f : GetFrameHeight(); - const ImVec2 label_size = CalcTextSize(label, NULL, true); - const float expected_w = CalcItemWidth(); - const float w = (flags & ImGuiComboFlags_NoPreview) ? arrow_size : expected_w; - const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y*2.0f)); - const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f)); - ItemSize(total_bb, style.FramePadding.y); - if (!ItemAdd(total_bb, id, &frame_bb)) - return false; - - bool hovered, held; - bool pressed = ButtonBehavior(frame_bb, id, &hovered, &held); - bool popup_open = IsPopupOpen(id); - - const ImU32 frame_col = GetColorU32(hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg); - const float value_x2 = ImMax(frame_bb.Min.x, frame_bb.Max.x - arrow_size); - RenderNavHighlight(frame_bb, id); - if (!(flags & ImGuiComboFlags_NoPreview)) - window->DrawList->AddRectFilled(frame_bb.Min, ImVec2(value_x2, frame_bb.Max.y), frame_col, style.FrameRounding, (flags & ImGuiComboFlags_NoArrowButton) ? ImDrawCornerFlags_All : ImDrawCornerFlags_Left); - if (!(flags & ImGuiComboFlags_NoArrowButton)) - { - ImU32 bg_col = GetColorU32((popup_open || hovered) ? ImGuiCol_ButtonHovered : ImGuiCol_Button); - ImU32 text_col = GetColorU32(ImGuiCol_Text); - window->DrawList->AddRectFilled(ImVec2(value_x2, frame_bb.Min.y), frame_bb.Max, bg_col, style.FrameRounding, (w <= arrow_size) ? ImDrawCornerFlags_All : ImDrawCornerFlags_Right); - if (value_x2 + arrow_size - style.FramePadding.x <= frame_bb.Max.x) - RenderArrow(window->DrawList, ImVec2(value_x2 + style.FramePadding.y, frame_bb.Min.y + style.FramePadding.y), text_col, ImGuiDir_Down, 1.0f); - } - RenderFrameBorder(frame_bb.Min, frame_bb.Max, style.FrameRounding); - if (preview_value != NULL && !(flags & ImGuiComboFlags_NoPreview)) - RenderTextClipped(frame_bb.Min + style.FramePadding, ImVec2(value_x2, frame_bb.Max.y), preview_value, NULL, NULL, ImVec2(0.0f,0.0f)); - if (label_size.x > 0) - RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label); - - if ((pressed || g.NavActivateId == id) && !popup_open) - { - if (window->DC.NavLayerCurrent == 0) - window->NavLastIds[0] = id; - OpenPopupEx(id); - popup_open = true; - } - - if (!popup_open) - return false; - - if (has_window_size_constraint) - { - g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasSizeConstraint; - g.NextWindowData.SizeConstraintRect.Min.x = ImMax(g.NextWindowData.SizeConstraintRect.Min.x, w); - } - else - { - if ((flags & ImGuiComboFlags_HeightMask_) == 0) - flags |= ImGuiComboFlags_HeightRegular; - IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiComboFlags_HeightMask_)); // Only one - int popup_max_height_in_items = -1; - if (flags & ImGuiComboFlags_HeightRegular) popup_max_height_in_items = 8; - else if (flags & ImGuiComboFlags_HeightSmall) popup_max_height_in_items = 4; - else if (flags & ImGuiComboFlags_HeightLarge) popup_max_height_in_items = 20; - SetNextWindowSizeConstraints(ImVec2(w, 0.0f), ImVec2(FLT_MAX, CalcMaxPopupHeightFromItemCount(popup_max_height_in_items))); - } - - char name[16]; - ImFormatString(name, IM_ARRAYSIZE(name), "##Combo_%02d", g.BeginPopupStack.Size); // Recycle windows based on depth - - // Peak into expected window size so we can position it - if (ImGuiWindow* popup_window = FindWindowByName(name)) - if (popup_window->WasActive) - { - ImVec2 size_expected = CalcWindowExpectedSize(popup_window); - if (flags & ImGuiComboFlags_PopupAlignLeft) - popup_window->AutoPosLastDirection = ImGuiDir_Left; - ImRect r_outer = GetWindowAllowedExtentRect(popup_window); - ImVec2 pos = FindBestWindowPosForPopupEx(frame_bb.GetBL(), size_expected, &popup_window->AutoPosLastDirection, r_outer, frame_bb, ImGuiPopupPositionPolicy_ComboBox); - SetNextWindowPos(pos); - } - - // We don't use BeginPopupEx() solely because we have a custom name string, which we could make an argument to BeginPopupEx() - ImGuiWindowFlags window_flags = ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_Popup | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoMove; - - // Horizontally align ourselves with the framed text - PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(style.FramePadding.x, style.WindowPadding.y)); - bool ret = Begin(name, NULL, window_flags); - PopStyleVar(); - if (!ret) - { - EndPopup(); - IM_ASSERT(0); // This should never happen as we tested for IsPopupOpen() above - return false; - } - return true; -} - -void ImGui::EndCombo() -{ - EndPopup(); -} - -// Getter for the old Combo() API: const char*[] -static bool Items_ArrayGetter(void* data, int idx, const char** out_text) -{ - const char* const* items = (const char* const*)data; - if (out_text) - *out_text = items[idx]; - return true; -} - -// Getter for the old Combo() API: "item1\0item2\0item3\0" -static bool Items_SingleStringGetter(void* data, int idx, const char** out_text) -{ - // FIXME-OPT: we could pre-compute the indices to fasten this. But only 1 active combo means the waste is limited. - const char* items_separated_by_zeros = (const char*)data; - int items_count = 0; - const char* p = items_separated_by_zeros; - while (*p) - { - if (idx == items_count) - break; - p += strlen(p) + 1; - items_count++; - } - if (!*p) - return false; - if (out_text) - *out_text = p; - return true; -} - -// Old API, prefer using BeginCombo() nowadays if you can. -bool ImGui::Combo(const char* label, int* current_item, bool (*items_getter)(void*, int, const char**), void* data, int items_count, int popup_max_height_in_items) -{ - ImGuiContext& g = *GImGui; - - // Call the getter to obtain the preview string which is a parameter to BeginCombo() - const char* preview_value = NULL; - if (*current_item >= 0 && *current_item < items_count) - items_getter(data, *current_item, &preview_value); - - // The old Combo() API exposed "popup_max_height_in_items". The new more general BeginCombo() API doesn't have/need it, but we emulate it here. - if (popup_max_height_in_items != -1 && !(g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSizeConstraint)) - SetNextWindowSizeConstraints(ImVec2(0,0), ImVec2(FLT_MAX, CalcMaxPopupHeightFromItemCount(popup_max_height_in_items))); - - if (!BeginCombo(label, preview_value, ImGuiComboFlags_None)) - return false; - - // Display items - // FIXME-OPT: Use clipper (but we need to disable it on the appearing frame to make sure our call to SetItemDefaultFocus() is processed) - bool value_changed = false; - for (int i = 0; i < items_count; i++) - { - PushID((void*)(intptr_t)i); - const bool item_selected = (i == *current_item); - const char* item_text; - if (!items_getter(data, i, &item_text)) - item_text = "*Unknown item*"; - if (Selectable(item_text, item_selected)) - { - value_changed = true; - *current_item = i; - } - if (item_selected) - SetItemDefaultFocus(); - PopID(); - } - - EndCombo(); - return value_changed; -} - -// Combo box helper allowing to pass an array of strings. -bool ImGui::Combo(const char* label, int* current_item, const char* const items[], int items_count, int height_in_items) -{ - const bool value_changed = Combo(label, current_item, Items_ArrayGetter, (void*)items, items_count, height_in_items); - return value_changed; -} - -// Combo box helper allowing to pass all items in a single string literal holding multiple zero-terminated items "item1\0item2\0" -bool ImGui::Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int height_in_items) -{ - int items_count = 0; - const char* p = items_separated_by_zeros; // FIXME-OPT: Avoid computing this, or at least only when combo is open - while (*p) - { - p += strlen(p) + 1; - items_count++; - } - bool value_changed = Combo(label, current_item, Items_SingleStringGetter, (void*)items_separated_by_zeros, items_count, height_in_items); - return value_changed; -} - -//------------------------------------------------------------------------- -// [SECTION] Data Type and Data Formatting Helpers [Internal] -//------------------------------------------------------------------------- -// - PatchFormatStringFloatToInt() -// - DataTypeGetInfo() -// - DataTypeFormatString() -// - DataTypeApplyOp() -// - DataTypeApplyOpFromText() -// - GetMinimumStepAtDecimalPrecision -// - RoundScalarWithFormat<>() -//------------------------------------------------------------------------- - -static const ImGuiDataTypeInfo GDataTypeInfo[] = -{ - { sizeof(char), "%d", "%d" }, // ImGuiDataType_S8 - { sizeof(unsigned char), "%u", "%u" }, - { sizeof(short), "%d", "%d" }, // ImGuiDataType_S16 - { sizeof(unsigned short), "%u", "%u" }, - { sizeof(int), "%d", "%d" }, // ImGuiDataType_S32 - { sizeof(unsigned int), "%u", "%u" }, -#ifdef _MSC_VER - { sizeof(ImS64), "%I64d","%I64d" }, // ImGuiDataType_S64 - { sizeof(ImU64), "%I64u","%I64u" }, -#else - { sizeof(ImS64), "%lld", "%lld" }, // ImGuiDataType_S64 - { sizeof(ImU64), "%llu", "%llu" }, -#endif - { sizeof(float), "%f", "%f" }, // ImGuiDataType_Float (float are promoted to double in va_arg) - { sizeof(double), "%f", "%lf" }, // ImGuiDataType_Double -}; -IM_STATIC_ASSERT(IM_ARRAYSIZE(GDataTypeInfo) == ImGuiDataType_COUNT); - -// FIXME-LEGACY: Prior to 1.61 our DragInt() function internally used floats and because of this the compile-time default value for format was "%.0f". -// Even though we changed the compile-time default, we expect users to have carried %f around, which would break the display of DragInt() calls. -// To honor backward compatibility we are rewriting the format string, unless IMGUI_DISABLE_OBSOLETE_FUNCTIONS is enabled. What could possibly go wrong?! -static const char* PatchFormatStringFloatToInt(const char* fmt) -{ - if (fmt[0] == '%' && fmt[1] == '.' && fmt[2] == '0' && fmt[3] == 'f' && fmt[4] == 0) // Fast legacy path for "%.0f" which is expected to be the most common case. - return "%d"; - const char* fmt_start = ImParseFormatFindStart(fmt); // Find % (if any, and ignore %%) - const char* fmt_end = ImParseFormatFindEnd(fmt_start); // Find end of format specifier, which itself is an exercise of confidence/recklessness (because snprintf is dependent on libc or user). - if (fmt_end > fmt_start && fmt_end[-1] == 'f') - { -#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS - if (fmt_start == fmt && fmt_end[0] == 0) - return "%d"; - ImGuiContext& g = *GImGui; - ImFormatString(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), "%.*s%%d%s", (int)(fmt_start - fmt), fmt, fmt_end); // Honor leading and trailing decorations, but lose alignment/precision. - return g.TempBuffer; -#else - IM_ASSERT(0 && "DragInt(): Invalid format string!"); // Old versions used a default parameter of "%.0f", please replace with e.g. "%d" -#endif - } - return fmt; -} - -const ImGuiDataTypeInfo* ImGui::DataTypeGetInfo(ImGuiDataType data_type) -{ - IM_ASSERT(data_type >= 0 && data_type < ImGuiDataType_COUNT); - return &GDataTypeInfo[data_type]; -} - -int ImGui::DataTypeFormatString(char* buf, int buf_size, ImGuiDataType data_type, const void* p_data, const char* format) -{ - // Signedness doesn't matter when pushing integer arguments - if (data_type == ImGuiDataType_S32 || data_type == ImGuiDataType_U32) - return ImFormatString(buf, buf_size, format, *(const ImU32*)p_data); - if (data_type == ImGuiDataType_S64 || data_type == ImGuiDataType_U64) - return ImFormatString(buf, buf_size, format, *(const ImU64*)p_data); - if (data_type == ImGuiDataType_Float) - return ImFormatString(buf, buf_size, format, *(const float*)p_data); - if (data_type == ImGuiDataType_Double) - return ImFormatString(buf, buf_size, format, *(const double*)p_data); - if (data_type == ImGuiDataType_S8) - return ImFormatString(buf, buf_size, format, *(const ImS8*)p_data); - if (data_type == ImGuiDataType_U8) - return ImFormatString(buf, buf_size, format, *(const ImU8*)p_data); - if (data_type == ImGuiDataType_S16) - return ImFormatString(buf, buf_size, format, *(const ImS16*)p_data); - if (data_type == ImGuiDataType_U16) - return ImFormatString(buf, buf_size, format, *(const ImU16*)p_data); - IM_ASSERT(0); - return 0; -} - -void ImGui::DataTypeApplyOp(ImGuiDataType data_type, int op, void* output, void* arg1, const void* arg2) -{ - IM_ASSERT(op == '+' || op == '-'); - switch (data_type) - { - case ImGuiDataType_S8: - if (op == '+') { *(ImS8*)output = ImAddClampOverflow(*(const ImS8*)arg1, *(const ImS8*)arg2, IM_S8_MIN, IM_S8_MAX); } - if (op == '-') { *(ImS8*)output = ImSubClampOverflow(*(const ImS8*)arg1, *(const ImS8*)arg2, IM_S8_MIN, IM_S8_MAX); } - return; - case ImGuiDataType_U8: - if (op == '+') { *(ImU8*)output = ImAddClampOverflow(*(const ImU8*)arg1, *(const ImU8*)arg2, IM_U8_MIN, IM_U8_MAX); } - if (op == '-') { *(ImU8*)output = ImSubClampOverflow(*(const ImU8*)arg1, *(const ImU8*)arg2, IM_U8_MIN, IM_U8_MAX); } - return; - case ImGuiDataType_S16: - if (op == '+') { *(ImS16*)output = ImAddClampOverflow(*(const ImS16*)arg1, *(const ImS16*)arg2, IM_S16_MIN, IM_S16_MAX); } - if (op == '-') { *(ImS16*)output = ImSubClampOverflow(*(const ImS16*)arg1, *(const ImS16*)arg2, IM_S16_MIN, IM_S16_MAX); } - return; - case ImGuiDataType_U16: - if (op == '+') { *(ImU16*)output = ImAddClampOverflow(*(const ImU16*)arg1, *(const ImU16*)arg2, IM_U16_MIN, IM_U16_MAX); } - if (op == '-') { *(ImU16*)output = ImSubClampOverflow(*(const ImU16*)arg1, *(const ImU16*)arg2, IM_U16_MIN, IM_U16_MAX); } - return; - case ImGuiDataType_S32: - if (op == '+') { *(ImS32*)output = ImAddClampOverflow(*(const ImS32*)arg1, *(const ImS32*)arg2, IM_S32_MIN, IM_S32_MAX); } - if (op == '-') { *(ImS32*)output = ImSubClampOverflow(*(const ImS32*)arg1, *(const ImS32*)arg2, IM_S32_MIN, IM_S32_MAX); } - return; - case ImGuiDataType_U32: - if (op == '+') { *(ImU32*)output = ImAddClampOverflow(*(const ImU32*)arg1, *(const ImU32*)arg2, IM_U32_MIN, IM_U32_MAX); } - if (op == '-') { *(ImU32*)output = ImSubClampOverflow(*(const ImU32*)arg1, *(const ImU32*)arg2, IM_U32_MIN, IM_U32_MAX); } - return; - case ImGuiDataType_S64: - if (op == '+') { *(ImS64*)output = ImAddClampOverflow(*(const ImS64*)arg1, *(const ImS64*)arg2, IM_S64_MIN, IM_S64_MAX); } - if (op == '-') { *(ImS64*)output = ImSubClampOverflow(*(const ImS64*)arg1, *(const ImS64*)arg2, IM_S64_MIN, IM_S64_MAX); } - return; - case ImGuiDataType_U64: - if (op == '+') { *(ImU64*)output = ImAddClampOverflow(*(const ImU64*)arg1, *(const ImU64*)arg2, IM_U64_MIN, IM_U64_MAX); } - if (op == '-') { *(ImU64*)output = ImSubClampOverflow(*(const ImU64*)arg1, *(const ImU64*)arg2, IM_U64_MIN, IM_U64_MAX); } - return; - case ImGuiDataType_Float: - if (op == '+') { *(float*)output = *(const float*)arg1 + *(const float*)arg2; } - if (op == '-') { *(float*)output = *(const float*)arg1 - *(const float*)arg2; } - return; - case ImGuiDataType_Double: - if (op == '+') { *(double*)output = *(const double*)arg1 + *(const double*)arg2; } - if (op == '-') { *(double*)output = *(const double*)arg1 - *(const double*)arg2; } - return; - case ImGuiDataType_COUNT: break; - } - IM_ASSERT(0); -} - -// User can input math operators (e.g. +100) to edit a numerical values. -// NB: This is _not_ a full expression evaluator. We should probably add one and replace this dumb mess.. -bool ImGui::DataTypeApplyOpFromText(const char* buf, const char* initial_value_buf, ImGuiDataType data_type, void* p_data, const char* format) -{ - while (ImCharIsBlankA(*buf)) - buf++; - - // We don't support '-' op because it would conflict with inputing negative value. - // Instead you can use +-100 to subtract from an existing value - char op = buf[0]; - if (op == '+' || op == '*' || op == '/') - { - buf++; - while (ImCharIsBlankA(*buf)) - buf++; - } - else - { - op = 0; - } - if (!buf[0]) - return false; - - // Copy the value in an opaque buffer so we can compare at the end of the function if it changed at all. - IM_ASSERT(data_type < ImGuiDataType_COUNT); - int data_backup[2]; - const ImGuiDataTypeInfo* type_info = ImGui::DataTypeGetInfo(data_type); - IM_ASSERT(type_info->Size <= sizeof(data_backup)); - memcpy(data_backup, p_data, type_info->Size); - - if (format == NULL) - format = type_info->ScanFmt; - - // FIXME-LEGACY: The aim is to remove those operators and write a proper expression evaluator at some point.. - int arg1i = 0; - if (data_type == ImGuiDataType_S32) - { - int* v = (int*)p_data; - int arg0i = *v; - float arg1f = 0.0f; - if (op && sscanf(initial_value_buf, format, &arg0i) < 1) - return false; - // Store operand in a float so we can use fractional value for multipliers (*1.1), but constant always parsed as integer so we can fit big integers (e.g. 2000000003) past float precision - if (op == '+') { if (sscanf(buf, "%d", &arg1i)) *v = (int)(arg0i + arg1i); } // Add (use "+-" to subtract) - else if (op == '*') { if (sscanf(buf, "%f", &arg1f)) *v = (int)(arg0i * arg1f); } // Multiply - else if (op == '/') { if (sscanf(buf, "%f", &arg1f) && arg1f != 0.0f) *v = (int)(arg0i / arg1f); } // Divide - else { if (sscanf(buf, format, &arg1i) == 1) *v = arg1i; } // Assign constant - } - else if (data_type == ImGuiDataType_Float) - { - // For floats we have to ignore format with precision (e.g. "%.2f") because sscanf doesn't take them in - format = "%f"; - float* v = (float*)p_data; - float arg0f = *v, arg1f = 0.0f; - if (op && sscanf(initial_value_buf, format, &arg0f) < 1) - return false; - if (sscanf(buf, format, &arg1f) < 1) - return false; - if (op == '+') { *v = arg0f + arg1f; } // Add (use "+-" to subtract) - else if (op == '*') { *v = arg0f * arg1f; } // Multiply - else if (op == '/') { if (arg1f != 0.0f) *v = arg0f / arg1f; } // Divide - else { *v = arg1f; } // Assign constant - } - else if (data_type == ImGuiDataType_Double) - { - format = "%lf"; // scanf differentiate float/double unlike printf which forces everything to double because of ellipsis - double* v = (double*)p_data; - double arg0f = *v, arg1f = 0.0; - if (op && sscanf(initial_value_buf, format, &arg0f) < 1) - return false; - if (sscanf(buf, format, &arg1f) < 1) - return false; - if (op == '+') { *v = arg0f + arg1f; } // Add (use "+-" to subtract) - else if (op == '*') { *v = arg0f * arg1f; } // Multiply - else if (op == '/') { if (arg1f != 0.0f) *v = arg0f / arg1f; } // Divide - else { *v = arg1f; } // Assign constant - } - else if (data_type == ImGuiDataType_U32 || data_type == ImGuiDataType_S64 || data_type == ImGuiDataType_U64) - { - // All other types assign constant - // We don't bother handling support for legacy operators since they are a little too crappy. Instead we will later implement a proper expression evaluator in the future. - sscanf(buf, format, p_data); - } - else - { - // Small types need a 32-bit buffer to receive the result from scanf() - int v32; - sscanf(buf, format, &v32); - if (data_type == ImGuiDataType_S8) - *(ImS8*)p_data = (ImS8)ImClamp(v32, (int)IM_S8_MIN, (int)IM_S8_MAX); - else if (data_type == ImGuiDataType_U8) - *(ImU8*)p_data = (ImU8)ImClamp(v32, (int)IM_U8_MIN, (int)IM_U8_MAX); - else if (data_type == ImGuiDataType_S16) - *(ImS16*)p_data = (ImS16)ImClamp(v32, (int)IM_S16_MIN, (int)IM_S16_MAX); - else if (data_type == ImGuiDataType_U16) - *(ImU16*)p_data = (ImU16)ImClamp(v32, (int)IM_U16_MIN, (int)IM_U16_MAX); - else - IM_ASSERT(0); - } - - return memcmp(data_backup, p_data, type_info->Size) != 0; -} - -static float GetMinimumStepAtDecimalPrecision(int decimal_precision) -{ - static const float min_steps[10] = { 1.0f, 0.1f, 0.01f, 0.001f, 0.0001f, 0.00001f, 0.000001f, 0.0000001f, 0.00000001f, 0.000000001f }; - if (decimal_precision < 0) - return FLT_MIN; - return (decimal_precision < IM_ARRAYSIZE(min_steps)) ? min_steps[decimal_precision] : ImPow(10.0f, (float)-decimal_precision); -} - -template -static const char* ImAtoi(const char* src, TYPE* output) -{ - int negative = 0; - if (*src == '-') { negative = 1; src++; } - if (*src == '+') { src++; } - TYPE v = 0; - while (*src >= '0' && *src <= '9') - v = (v * 10) + (*src++ - '0'); - *output = negative ? -v : v; - return src; -} - -template -TYPE ImGui::RoundScalarWithFormatT(const char* format, ImGuiDataType data_type, TYPE v) -{ - const char* fmt_start = ImParseFormatFindStart(format); - if (fmt_start[0] != '%' || fmt_start[1] == '%') // Don't apply if the value is not visible in the format string - return v; - char v_str[64]; - ImFormatString(v_str, IM_ARRAYSIZE(v_str), fmt_start, v); - const char* p = v_str; - while (*p == ' ') - p++; - if (data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double) - v = (TYPE)ImAtof(p); - else - ImAtoi(p, (SIGNEDTYPE*)&v); - return v; -} - -//------------------------------------------------------------------------- -// [SECTION] Widgets: DragScalar, DragFloat, DragInt, etc. -//------------------------------------------------------------------------- -// - DragBehaviorT<>() [Internal] -// - DragBehavior() [Internal] -// - DragScalar() -// - DragScalarN() -// - DragFloat() -// - DragFloat2() -// - DragFloat3() -// - DragFloat4() -// - DragFloatRange2() -// - DragInt() -// - DragInt2() -// - DragInt3() -// - DragInt4() -// - DragIntRange2() -//------------------------------------------------------------------------- - -// This is called by DragBehavior() when the widget is active (held by mouse or being manipulated with Nav controls) -template -bool ImGui::DragBehaviorT(ImGuiDataType data_type, TYPE* v, float v_speed, const TYPE v_min, const TYPE v_max, const char* format, float power, ImGuiDragFlags flags) -{ - ImGuiContext& g = *GImGui; - const ImGuiAxis axis = (flags & ImGuiDragFlags_Vertical) ? ImGuiAxis_Y : ImGuiAxis_X; - const bool is_decimal = (data_type == ImGuiDataType_Float) || (data_type == ImGuiDataType_Double); - const bool is_clamped = (v_min < v_max); - const bool is_power = (power != 1.0f && is_decimal && is_clamped && (v_max - v_min < FLT_MAX)); - const bool is_locked = (v_min > v_max); - if (is_locked) - return false; - - // Default tweak speed - if (v_speed == 0.0f && is_clamped && (v_max - v_min < FLT_MAX)) - v_speed = (float)((v_max - v_min) * g.DragSpeedDefaultRatio); - - // Inputs accumulates into g.DragCurrentAccum, which is flushed into the current value as soon as it makes a difference with our precision settings - float adjust_delta = 0.0f; - if (g.ActiveIdSource == ImGuiInputSource_Mouse && IsMousePosValid() && g.IO.MouseDragMaxDistanceSqr[0] > 1.0f*1.0f) - { - adjust_delta = g.IO.MouseDelta[axis]; - if (g.IO.KeyAlt) - adjust_delta *= 1.0f / 100.0f; - if (g.IO.KeyShift) - adjust_delta *= 10.0f; - } - else if (g.ActiveIdSource == ImGuiInputSource_Nav) - { - int decimal_precision = is_decimal ? ImParseFormatPrecision(format, 3) : 0; - adjust_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_Keyboard | ImGuiNavDirSourceFlags_PadDPad, ImGuiInputReadMode_RepeatFast, 1.0f / 10.0f, 10.0f)[axis]; - v_speed = ImMax(v_speed, GetMinimumStepAtDecimalPrecision(decimal_precision)); - } - adjust_delta *= v_speed; - - // For vertical drag we currently assume that Up=higher value (like we do with vertical sliders). This may become a parameter. - if (axis == ImGuiAxis_Y) - adjust_delta = -adjust_delta; - - // Clear current value on activation - // Avoid altering values and clamping when we are _already_ past the limits and heading in the same direction, so e.g. if range is 0..255, current value is 300 and we are pushing to the right side, keep the 300. - bool is_just_activated = g.ActiveIdIsJustActivated; - bool is_already_past_limits_and_pushing_outward = is_clamped && ((*v >= v_max && adjust_delta > 0.0f) || (*v <= v_min && adjust_delta < 0.0f)); - bool is_drag_direction_change_with_power = is_power && ((adjust_delta < 0 && g.DragCurrentAccum > 0) || (adjust_delta > 0 && g.DragCurrentAccum < 0)); - if (is_just_activated || is_already_past_limits_and_pushing_outward || is_drag_direction_change_with_power) - { - g.DragCurrentAccum = 0.0f; - g.DragCurrentAccumDirty = false; - } - else if (adjust_delta != 0.0f) - { - g.DragCurrentAccum += adjust_delta; - g.DragCurrentAccumDirty = true; - } - - if (!g.DragCurrentAccumDirty) - return false; - - TYPE v_cur = *v; - FLOATTYPE v_old_ref_for_accum_remainder = (FLOATTYPE)0.0f; - - if (is_power) - { - // Offset + round to user desired precision, with a curve on the v_min..v_max range to get more precision on one side of the range - FLOATTYPE v_old_norm_curved = ImPow((FLOATTYPE)(v_cur - v_min) / (FLOATTYPE)(v_max - v_min), (FLOATTYPE)1.0f / power); - FLOATTYPE v_new_norm_curved = v_old_norm_curved + (g.DragCurrentAccum / (v_max - v_min)); - v_cur = v_min + (SIGNEDTYPE)ImPow(ImSaturate((float)v_new_norm_curved), power) * (v_max - v_min); - v_old_ref_for_accum_remainder = v_old_norm_curved; - } - else - { - v_cur += (SIGNEDTYPE)g.DragCurrentAccum; - } - - // Round to user desired precision based on format string - v_cur = RoundScalarWithFormatT(format, data_type, v_cur); - - // Preserve remainder after rounding has been applied. This also allow slow tweaking of values. - g.DragCurrentAccumDirty = false; - if (is_power) - { - FLOATTYPE v_cur_norm_curved = ImPow((FLOATTYPE)(v_cur - v_min) / (FLOATTYPE)(v_max - v_min), (FLOATTYPE)1.0f / power); - g.DragCurrentAccum -= (float)(v_cur_norm_curved - v_old_ref_for_accum_remainder); - } - else - { - g.DragCurrentAccum -= (float)((SIGNEDTYPE)v_cur - (SIGNEDTYPE)*v); - } - - // Lose zero sign for float/double - if (v_cur == (TYPE)-0) - v_cur = (TYPE)0; - - // Clamp values (+ handle overflow/wrap-around for integer types) - if (*v != v_cur && is_clamped) - { - if (v_cur < v_min || (v_cur > *v && adjust_delta < 0.0f && !is_decimal)) - v_cur = v_min; - if (v_cur > v_max || (v_cur < *v && adjust_delta > 0.0f && !is_decimal)) - v_cur = v_max; - } - - // Apply result - if (*v == v_cur) - return false; - *v = v_cur; - return true; -} - -bool ImGui::DragBehavior(ImGuiID id, ImGuiDataType data_type, void* p_v, float v_speed, const void* p_min, const void* p_max, const char* format, float power, ImGuiDragFlags flags) -{ - ImGuiContext& g = *GImGui; - if (g.ActiveId == id) - { - if (g.ActiveIdSource == ImGuiInputSource_Mouse && !g.IO.MouseDown[0]) - ClearActiveID(); - else if (g.ActiveIdSource == ImGuiInputSource_Nav && g.NavActivatePressedId == id && !g.ActiveIdIsJustActivated) - ClearActiveID(); - } - if (g.ActiveId != id) - return false; - - switch (data_type) - { - case ImGuiDataType_S8: { ImS32 v32 = (ImS32)*(ImS8*)p_v; bool r = DragBehaviorT(ImGuiDataType_S32, &v32, v_speed, p_min ? *(const ImS8*) p_min : IM_S8_MIN, p_max ? *(const ImS8*)p_max : IM_S8_MAX, format, power, flags); if (r) *(ImS8*)p_v = (ImS8)v32; return r; } - case ImGuiDataType_U8: { ImU32 v32 = (ImU32)*(ImU8*)p_v; bool r = DragBehaviorT(ImGuiDataType_U32, &v32, v_speed, p_min ? *(const ImU8*) p_min : IM_U8_MIN, p_max ? *(const ImU8*)p_max : IM_U8_MAX, format, power, flags); if (r) *(ImU8*)p_v = (ImU8)v32; return r; } - case ImGuiDataType_S16: { ImS32 v32 = (ImS32)*(ImS16*)p_v; bool r = DragBehaviorT(ImGuiDataType_S32, &v32, v_speed, p_min ? *(const ImS16*)p_min : IM_S16_MIN, p_max ? *(const ImS16*)p_max : IM_S16_MAX, format, power, flags); if (r) *(ImS16*)p_v = (ImS16)v32; return r; } - case ImGuiDataType_U16: { ImU32 v32 = (ImU32)*(ImU16*)p_v; bool r = DragBehaviorT(ImGuiDataType_U32, &v32, v_speed, p_min ? *(const ImU16*)p_min : IM_U16_MIN, p_max ? *(const ImU16*)p_max : IM_U16_MAX, format, power, flags); if (r) *(ImU16*)p_v = (ImU16)v32; return r; } - case ImGuiDataType_S32: return DragBehaviorT(data_type, (ImS32*)p_v, v_speed, p_min ? *(const ImS32* )p_min : IM_S32_MIN, p_max ? *(const ImS32* )p_max : IM_S32_MAX, format, power, flags); - case ImGuiDataType_U32: return DragBehaviorT(data_type, (ImU32*)p_v, v_speed, p_min ? *(const ImU32* )p_min : IM_U32_MIN, p_max ? *(const ImU32* )p_max : IM_U32_MAX, format, power, flags); - case ImGuiDataType_S64: return DragBehaviorT(data_type, (ImS64*)p_v, v_speed, p_min ? *(const ImS64* )p_min : IM_S64_MIN, p_max ? *(const ImS64* )p_max : IM_S64_MAX, format, power, flags); - case ImGuiDataType_U64: return DragBehaviorT(data_type, (ImU64*)p_v, v_speed, p_min ? *(const ImU64* )p_min : IM_U64_MIN, p_max ? *(const ImU64* )p_max : IM_U64_MAX, format, power, flags); - case ImGuiDataType_Float: return DragBehaviorT(data_type, (float*)p_v, v_speed, p_min ? *(const float* )p_min : -FLT_MAX, p_max ? *(const float* )p_max : FLT_MAX, format, power, flags); - case ImGuiDataType_Double: return DragBehaviorT(data_type, (double*)p_v, v_speed, p_min ? *(const double*)p_min : -DBL_MAX, p_max ? *(const double*)p_max : DBL_MAX, format, power, flags); - case ImGuiDataType_COUNT: break; - } - IM_ASSERT(0); - return false; -} - -// Note: p_data, p_min and p_max are _pointers_ to a memory address holding the data. For a Drag widget, p_min and p_max are optional. -// Read code of e.g. SliderFloat(), SliderInt() etc. or examples in 'Demo->Widgets->Data Types' to understand how to use this function directly. -bool ImGui::DragScalar(const char* label, ImGuiDataType data_type, void* p_data, float v_speed, const void* p_min, const void* p_max, const char* format, float power) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - - if (power != 1.0f) - IM_ASSERT(p_min != NULL && p_max != NULL); // When using a power curve the drag needs to have known bounds - - ImGuiContext& g = *GImGui; - const ImGuiStyle& style = g.Style; - const ImGuiID id = window->GetID(label); - const float w = CalcItemWidth(); - const ImVec2 label_size = CalcTextSize(label, NULL, true); - const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y*2.0f)); - const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f)); - - ItemSize(total_bb, style.FramePadding.y); - if (!ItemAdd(total_bb, id, &frame_bb)) - return false; - - // Default format string when passing NULL - if (format == NULL) - format = DataTypeGetInfo(data_type)->PrintFmt; - else if (data_type == ImGuiDataType_S32 && strcmp(format, "%d") != 0) // (FIXME-LEGACY: Patch old "%.0f" format string to use "%d", read function more details.) - format = PatchFormatStringFloatToInt(format); - - // Tabbing or CTRL-clicking on Drag turns it into an input box - const bool hovered = ItemHoverable(frame_bb, id); - bool temp_input_is_active = TempInputIsActive(id); - bool temp_input_start = false; - if (!temp_input_is_active) - { - const bool focus_requested = FocusableItemRegister(window, id); - const bool clicked = (hovered && g.IO.MouseClicked[0]); - const bool double_clicked = (hovered && g.IO.MouseDoubleClicked[0]); - if (focus_requested || clicked || double_clicked || g.NavActivateId == id || g.NavInputId == id) - { - SetActiveID(id, window); - SetFocusID(id, window); - FocusWindow(window); - g.ActiveIdUsingNavDirMask = (1 << ImGuiDir_Left) | (1 << ImGuiDir_Right); - if (focus_requested || (clicked && g.IO.KeyCtrl) || double_clicked || g.NavInputId == id) - { - temp_input_start = true; - FocusableItemUnregister(window); - } - } - } - if (temp_input_is_active || temp_input_start) - return TempInputScalar(frame_bb, id, label, data_type, p_data, format); - - // Draw frame - const ImU32 frame_col = GetColorU32(g.ActiveId == id ? ImGuiCol_FrameBgActive : g.HoveredId == id ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg); - RenderNavHighlight(frame_bb, id); - RenderFrame(frame_bb.Min, frame_bb.Max, frame_col, true, style.FrameRounding); - - // Drag behavior - const bool value_changed = DragBehavior(id, data_type, p_data, v_speed, p_min, p_max, format, power, ImGuiDragFlags_None); - if (value_changed) - MarkItemEdited(id); - - // Display value using user-provided display format so user can add prefix/suffix/decorations to the value. - char value_buf[64]; - const char* value_buf_end = value_buf + DataTypeFormatString(value_buf, IM_ARRAYSIZE(value_buf), data_type, p_data, format); - RenderTextClipped(frame_bb.Min, frame_bb.Max, value_buf, value_buf_end, NULL, ImVec2(0.5f, 0.5f)); - - if (label_size.x > 0.0f) - RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label); - - IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags); - return value_changed; -} - -bool ImGui::DragScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, float v_speed, const void* p_min, const void* p_max, const char* format, float power) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - - ImGuiContext& g = *GImGui; - bool value_changed = false; - BeginGroup(); - PushID(label); - PushMultiItemsWidths(components, CalcItemWidth()); - size_t type_size = GDataTypeInfo[data_type].Size; - for (int i = 0; i < components; i++) - { - PushID(i); - if (i > 0) - SameLine(0, g.Style.ItemInnerSpacing.x); - value_changed |= DragScalar("", data_type, p_data, v_speed, p_min, p_max, format, power); - PopID(); - PopItemWidth(); - p_data = (void*)((char*)p_data + type_size); - } - PopID(); - - const char* label_end = FindRenderedTextEnd(label); - if (label != label_end) - { - SameLine(0, g.Style.ItemInnerSpacing.x); - TextEx(label, label_end); - } - - EndGroup(); - return value_changed; -} - -bool ImGui::DragFloat(const char* label, float* v, float v_speed, float v_min, float v_max, const char* format, float power) -{ - return DragScalar(label, ImGuiDataType_Float, v, v_speed, &v_min, &v_max, format, power); -} - -bool ImGui::DragFloat2(const char* label, float v[2], float v_speed, float v_min, float v_max, const char* format, float power) -{ - return DragScalarN(label, ImGuiDataType_Float, v, 2, v_speed, &v_min, &v_max, format, power); -} - -bool ImGui::DragFloat3(const char* label, float v[3], float v_speed, float v_min, float v_max, const char* format, float power) -{ - return DragScalarN(label, ImGuiDataType_Float, v, 3, v_speed, &v_min, &v_max, format, power); -} - -bool ImGui::DragFloat4(const char* label, float v[4], float v_speed, float v_min, float v_max, const char* format, float power) -{ - return DragScalarN(label, ImGuiDataType_Float, v, 4, v_speed, &v_min, &v_max, format, power); -} - -bool ImGui::DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed, float v_min, float v_max, const char* format, const char* format_max, float power) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - - ImGuiContext& g = *GImGui; - PushID(label); - BeginGroup(); - PushMultiItemsWidths(2, CalcItemWidth()); - - bool value_changed = DragFloat("##min", v_current_min, v_speed, (v_min >= v_max) ? -FLT_MAX : v_min, (v_min >= v_max) ? *v_current_max : ImMin(v_max, *v_current_max), format, power); - PopItemWidth(); - SameLine(0, g.Style.ItemInnerSpacing.x); - value_changed |= DragFloat("##max", v_current_max, v_speed, (v_min >= v_max) ? *v_current_min : ImMax(v_min, *v_current_min), (v_min >= v_max) ? FLT_MAX : v_max, format_max ? format_max : format, power); - PopItemWidth(); - SameLine(0, g.Style.ItemInnerSpacing.x); - - TextEx(label, FindRenderedTextEnd(label)); - EndGroup(); - PopID(); - return value_changed; -} - -// NB: v_speed is float to allow adjusting the drag speed with more precision -bool ImGui::DragInt(const char* label, int* v, float v_speed, int v_min, int v_max, const char* format) -{ - return DragScalar(label, ImGuiDataType_S32, v, v_speed, &v_min, &v_max, format); -} - -bool ImGui::DragInt2(const char* label, int v[2], float v_speed, int v_min, int v_max, const char* format) -{ - return DragScalarN(label, ImGuiDataType_S32, v, 2, v_speed, &v_min, &v_max, format); -} - -bool ImGui::DragInt3(const char* label, int v[3], float v_speed, int v_min, int v_max, const char* format) -{ - return DragScalarN(label, ImGuiDataType_S32, v, 3, v_speed, &v_min, &v_max, format); -} - -bool ImGui::DragInt4(const char* label, int v[4], float v_speed, int v_min, int v_max, const char* format) -{ - return DragScalarN(label, ImGuiDataType_S32, v, 4, v_speed, &v_min, &v_max, format); -} - -bool ImGui::DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed, int v_min, int v_max, const char* format, const char* format_max) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - - ImGuiContext& g = *GImGui; - PushID(label); - BeginGroup(); - PushMultiItemsWidths(2, CalcItemWidth()); - - bool value_changed = DragInt("##min", v_current_min, v_speed, (v_min >= v_max) ? INT_MIN : v_min, (v_min >= v_max) ? *v_current_max : ImMin(v_max, *v_current_max), format); - PopItemWidth(); - SameLine(0, g.Style.ItemInnerSpacing.x); - value_changed |= DragInt("##max", v_current_max, v_speed, (v_min >= v_max) ? *v_current_min : ImMax(v_min, *v_current_min), (v_min >= v_max) ? INT_MAX : v_max, format_max ? format_max : format); - PopItemWidth(); - SameLine(0, g.Style.ItemInnerSpacing.x); - - TextEx(label, FindRenderedTextEnd(label)); - EndGroup(); - PopID(); - - return value_changed; -} - -//------------------------------------------------------------------------- -// [SECTION] Widgets: SliderScalar, SliderFloat, SliderInt, etc. -//------------------------------------------------------------------------- -// - SliderBehaviorT<>() [Internal] -// - SliderBehavior() [Internal] -// - SliderScalar() -// - SliderScalarN() -// - SliderFloat() -// - SliderFloat2() -// - SliderFloat3() -// - SliderFloat4() -// - SliderAngle() -// - SliderInt() -// - SliderInt2() -// - SliderInt3() -// - SliderInt4() -// - VSliderScalar() -// - VSliderFloat() -// - VSliderInt() -//------------------------------------------------------------------------- - -template -float ImGui::SliderCalcRatioFromValueT(ImGuiDataType data_type, TYPE v, TYPE v_min, TYPE v_max, float power, float linear_zero_pos) -{ - if (v_min == v_max) - return 0.0f; - - const bool is_power = (power != 1.0f) && (data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double); - const TYPE v_clamped = (v_min < v_max) ? ImClamp(v, v_min, v_max) : ImClamp(v, v_max, v_min); - if (is_power) - { - if (v_clamped < 0.0f) - { - const float f = 1.0f - (float)((v_clamped - v_min) / (ImMin((TYPE)0, v_max) - v_min)); - return (1.0f - ImPow(f, 1.0f/power)) * linear_zero_pos; - } - else - { - const float f = (float)((v_clamped - ImMax((TYPE)0, v_min)) / (v_max - ImMax((TYPE)0, v_min))); - return linear_zero_pos + ImPow(f, 1.0f/power) * (1.0f - linear_zero_pos); - } - } - - // Linear slider - return (float)((FLOATTYPE)(v_clamped - v_min) / (FLOATTYPE)(v_max - v_min)); -} - -// FIXME: Move some of the code into SliderBehavior(). Current responsability is larger than what the equivalent DragBehaviorT<> does, we also do some rendering, etc. -template -bool ImGui::SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, TYPE* v, const TYPE v_min, const TYPE v_max, const char* format, float power, ImGuiSliderFlags flags, ImRect* out_grab_bb) -{ - ImGuiContext& g = *GImGui; - const ImGuiStyle& style = g.Style; - - const ImGuiAxis axis = (flags & ImGuiSliderFlags_Vertical) ? ImGuiAxis_Y : ImGuiAxis_X; - const bool is_decimal = (data_type == ImGuiDataType_Float) || (data_type == ImGuiDataType_Double); - const bool is_power = (power != 1.0f) && is_decimal; - - const float grab_padding = 2.0f; - const float slider_sz = (bb.Max[axis] - bb.Min[axis]) - grab_padding * 2.0f; - float grab_sz = style.GrabMinSize; - SIGNEDTYPE v_range = (v_min < v_max ? v_max - v_min : v_min - v_max); - if (!is_decimal && v_range >= 0) // v_range < 0 may happen on integer overflows - grab_sz = ImMax((float)(slider_sz / (v_range + 1)), style.GrabMinSize); // For integer sliders: if possible have the grab size represent 1 unit - grab_sz = ImMin(grab_sz, slider_sz); - const float slider_usable_sz = slider_sz - grab_sz; - const float slider_usable_pos_min = bb.Min[axis] + grab_padding + grab_sz * 0.5f; - const float slider_usable_pos_max = bb.Max[axis] - grab_padding - grab_sz * 0.5f; - - // For power curve sliders that cross over sign boundary we want the curve to be symmetric around 0.0f - float linear_zero_pos; // 0.0->1.0f - if (is_power && v_min * v_max < 0.0f) - { - // Different sign - const FLOATTYPE linear_dist_min_to_0 = ImPow(v_min >= 0 ? (FLOATTYPE)v_min : -(FLOATTYPE)v_min, (FLOATTYPE)1.0f / power); - const FLOATTYPE linear_dist_max_to_0 = ImPow(v_max >= 0 ? (FLOATTYPE)v_max : -(FLOATTYPE)v_max, (FLOATTYPE)1.0f / power); - linear_zero_pos = (float)(linear_dist_min_to_0 / (linear_dist_min_to_0 + linear_dist_max_to_0)); - } - else - { - // Same sign - linear_zero_pos = v_min < 0.0f ? 1.0f : 0.0f; - } - - // Process interacting with the slider - bool value_changed = false; - if (g.ActiveId == id) - { - bool set_new_value = false; - float clicked_t = 0.0f; - if (g.ActiveIdSource == ImGuiInputSource_Mouse) - { - if (!g.IO.MouseDown[0]) - { - ClearActiveID(); - } - else - { - const float mouse_abs_pos = g.IO.MousePos[axis]; - clicked_t = (slider_usable_sz > 0.0f) ? ImClamp((mouse_abs_pos - slider_usable_pos_min) / slider_usable_sz, 0.0f, 1.0f) : 0.0f; - if (axis == ImGuiAxis_Y) - clicked_t = 1.0f - clicked_t; - set_new_value = true; - } - } - else if (g.ActiveIdSource == ImGuiInputSource_Nav) - { - const ImVec2 delta2 = GetNavInputAmount2d(ImGuiNavDirSourceFlags_Keyboard | ImGuiNavDirSourceFlags_PadDPad, ImGuiInputReadMode_RepeatFast, 0.0f, 0.0f); - float delta = (axis == ImGuiAxis_X) ? delta2.x : -delta2.y; - if (g.NavActivatePressedId == id && !g.ActiveIdIsJustActivated) - { - ClearActiveID(); - } - else if (delta != 0.0f) - { - clicked_t = SliderCalcRatioFromValueT(data_type, *v, v_min, v_max, power, linear_zero_pos); - const int decimal_precision = is_decimal ? ImParseFormatPrecision(format, 3) : 0; - if ((decimal_precision > 0) || is_power) - { - delta /= 100.0f; // Gamepad/keyboard tweak speeds in % of slider bounds - if (IsNavInputDown(ImGuiNavInput_TweakSlow)) - delta /= 10.0f; - } - else - { - if ((v_range >= -100.0f && v_range <= 100.0f) || IsNavInputDown(ImGuiNavInput_TweakSlow)) - delta = ((delta < 0.0f) ? -1.0f : +1.0f) / (float)v_range; // Gamepad/keyboard tweak speeds in integer steps - else - delta /= 100.0f; - } - if (IsNavInputDown(ImGuiNavInput_TweakFast)) - delta *= 10.0f; - set_new_value = true; - if ((clicked_t >= 1.0f && delta > 0.0f) || (clicked_t <= 0.0f && delta < 0.0f)) // This is to avoid applying the saturation when already past the limits - set_new_value = false; - else - clicked_t = ImSaturate(clicked_t + delta); - } - } - - if (set_new_value) - { - TYPE v_new; - if (is_power) - { - // Account for power curve scale on both sides of the zero - if (clicked_t < linear_zero_pos) - { - // Negative: rescale to the negative range before powering - float a = 1.0f - (clicked_t / linear_zero_pos); - a = ImPow(a, power); - v_new = ImLerp(ImMin(v_max, (TYPE)0), v_min, a); - } - else - { - // Positive: rescale to the positive range before powering - float a; - if (ImFabs(linear_zero_pos - 1.0f) > 1.e-6f) - a = (clicked_t - linear_zero_pos) / (1.0f - linear_zero_pos); - else - a = clicked_t; - a = ImPow(a, power); - v_new = ImLerp(ImMax(v_min, (TYPE)0), v_max, a); - } - } - else - { - // Linear slider - if (is_decimal) - { - v_new = ImLerp(v_min, v_max, clicked_t); - } - else - { - // For integer values we want the clicking position to match the grab box so we round above - // This code is carefully tuned to work with large values (e.g. high ranges of U64) while preserving this property.. - FLOATTYPE v_new_off_f = (v_max - v_min) * clicked_t; - TYPE v_new_off_floor = (TYPE)(v_new_off_f); - TYPE v_new_off_round = (TYPE)(v_new_off_f + (FLOATTYPE)0.5); - if (v_new_off_floor < v_new_off_round) - v_new = v_min + v_new_off_round; - else - v_new = v_min + v_new_off_floor; - } - } - - // Round to user desired precision based on format string - v_new = RoundScalarWithFormatT(format, data_type, v_new); - - // Apply result - if (*v != v_new) - { - *v = v_new; - value_changed = true; - } - } - } - - if (slider_sz < 1.0f) - { - *out_grab_bb = ImRect(bb.Min, bb.Min); - } - else - { - // Output grab position so it can be displayed by the caller - float grab_t = SliderCalcRatioFromValueT(data_type, *v, v_min, v_max, power, linear_zero_pos); - if (axis == ImGuiAxis_Y) - grab_t = 1.0f - grab_t; - const float grab_pos = ImLerp(slider_usable_pos_min, slider_usable_pos_max, grab_t); - if (axis == ImGuiAxis_X) - *out_grab_bb = ImRect(grab_pos - grab_sz * 0.5f, bb.Min.y + grab_padding, grab_pos + grab_sz * 0.5f, bb.Max.y - grab_padding); - else - *out_grab_bb = ImRect(bb.Min.x + grab_padding, grab_pos - grab_sz * 0.5f, bb.Max.x - grab_padding, grab_pos + grab_sz * 0.5f); - } - - return value_changed; -} - -// For 32-bit and larger types, slider bounds are limited to half the natural type range. -// So e.g. an integer Slider between INT_MAX-10 and INT_MAX will fail, but an integer Slider between INT_MAX/2-10 and INT_MAX/2 will be ok. -// It would be possible to lift that limitation with some work but it doesn't seem to be worth it for sliders. -bool ImGui::SliderBehavior(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, void* p_v, const void* p_min, const void* p_max, const char* format, float power, ImGuiSliderFlags flags, ImRect* out_grab_bb) -{ - switch (data_type) - { - case ImGuiDataType_S8: { ImS32 v32 = (ImS32)*(ImS8*)p_v; bool r = SliderBehaviorT(bb, id, ImGuiDataType_S32, &v32, *(const ImS8*)p_min, *(const ImS8*)p_max, format, power, flags, out_grab_bb); if (r) *(ImS8*)p_v = (ImS8)v32; return r; } - case ImGuiDataType_U8: { ImU32 v32 = (ImU32)*(ImU8*)p_v; bool r = SliderBehaviorT(bb, id, ImGuiDataType_U32, &v32, *(const ImU8*)p_min, *(const ImU8*)p_max, format, power, flags, out_grab_bb); if (r) *(ImU8*)p_v = (ImU8)v32; return r; } - case ImGuiDataType_S16: { ImS32 v32 = (ImS32)*(ImS16*)p_v; bool r = SliderBehaviorT(bb, id, ImGuiDataType_S32, &v32, *(const ImS16*)p_min, *(const ImS16*)p_max, format, power, flags, out_grab_bb); if (r) *(ImS16*)p_v = (ImS16)v32; return r; } - case ImGuiDataType_U16: { ImU32 v32 = (ImU32)*(ImU16*)p_v; bool r = SliderBehaviorT(bb, id, ImGuiDataType_U32, &v32, *(const ImU16*)p_min, *(const ImU16*)p_max, format, power, flags, out_grab_bb); if (r) *(ImU16*)p_v = (ImU16)v32; return r; } - case ImGuiDataType_S32: - IM_ASSERT(*(const ImS32*)p_min >= IM_S32_MIN/2 && *(const ImS32*)p_max <= IM_S32_MAX/2); - return SliderBehaviorT(bb, id, data_type, (ImS32*)p_v, *(const ImS32*)p_min, *(const ImS32*)p_max, format, power, flags, out_grab_bb); - case ImGuiDataType_U32: - IM_ASSERT(*(const ImU32*)p_max <= IM_U32_MAX/2); - return SliderBehaviorT(bb, id, data_type, (ImU32*)p_v, *(const ImU32*)p_min, *(const ImU32*)p_max, format, power, flags, out_grab_bb); - case ImGuiDataType_S64: - IM_ASSERT(*(const ImS64*)p_min >= IM_S64_MIN/2 && *(const ImS64*)p_max <= IM_S64_MAX/2); - return SliderBehaviorT(bb, id, data_type, (ImS64*)p_v, *(const ImS64*)p_min, *(const ImS64*)p_max, format, power, flags, out_grab_bb); - case ImGuiDataType_U64: - IM_ASSERT(*(const ImU64*)p_max <= IM_U64_MAX/2); - return SliderBehaviorT(bb, id, data_type, (ImU64*)p_v, *(const ImU64*)p_min, *(const ImU64*)p_max, format, power, flags, out_grab_bb); - case ImGuiDataType_Float: - IM_ASSERT(*(const float*)p_min >= -FLT_MAX/2.0f && *(const float*)p_max <= FLT_MAX/2.0f); - return SliderBehaviorT(bb, id, data_type, (float*)p_v, *(const float*)p_min, *(const float*)p_max, format, power, flags, out_grab_bb); - case ImGuiDataType_Double: - IM_ASSERT(*(const double*)p_min >= -DBL_MAX/2.0f && *(const double*)p_max <= DBL_MAX/2.0f); - return SliderBehaviorT(bb, id, data_type, (double*)p_v, *(const double*)p_min, *(const double*)p_max, format, power, flags, out_grab_bb); - case ImGuiDataType_COUNT: break; - } - IM_ASSERT(0); - return false; -} - -// Note: p_data, p_min and p_max are _pointers_ to a memory address holding the data. For a slider, they are all required. -// Read code of e.g. SliderFloat(), SliderInt() etc. or examples in 'Demo->Widgets->Data Types' to understand how to use this function directly. -bool ImGui::SliderScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format, float power) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - - ImGuiContext& g = *GImGui; - const ImGuiStyle& style = g.Style; - const ImGuiID id = window->GetID(label); - const float w = CalcItemWidth(); - - const ImVec2 label_size = CalcTextSize(label, NULL, true); - const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y*2.0f)); - const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f)); - - ItemSize(total_bb, style.FramePadding.y); - if (!ItemAdd(total_bb, id, &frame_bb)) - return false; - - // Default format string when passing NULL - if (format == NULL) - format = DataTypeGetInfo(data_type)->PrintFmt; - else if (data_type == ImGuiDataType_S32 && strcmp(format, "%d") != 0) // (FIXME-LEGACY: Patch old "%.0f" format string to use "%d", read function more details.) - format = PatchFormatStringFloatToInt(format); - - // Tabbing or CTRL-clicking on Slider turns it into an input box - const bool hovered = ItemHoverable(frame_bb, id); - bool temp_input_is_active = TempInputIsActive(id); - bool temp_input_start = false; - if (!temp_input_is_active) - { - const bool focus_requested = FocusableItemRegister(window, id); - const bool clicked = (hovered && g.IO.MouseClicked[0]); - if (focus_requested || clicked || g.NavActivateId == id || g.NavInputId == id) - { - SetActiveID(id, window); - SetFocusID(id, window); - FocusWindow(window); - g.ActiveIdUsingNavDirMask |= (1 << ImGuiDir_Left) | (1 << ImGuiDir_Right); - if (focus_requested || (clicked && g.IO.KeyCtrl) || g.NavInputId == id) - { - temp_input_start = true; - FocusableItemUnregister(window); - } - } - } - if (temp_input_is_active || temp_input_start) - return TempInputScalar(frame_bb, id, label, data_type, p_data, format); - - // Draw frame - const ImU32 frame_col = GetColorU32(g.ActiveId == id ? ImGuiCol_FrameBgActive : g.HoveredId == id ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg); - RenderNavHighlight(frame_bb, id); - RenderFrame(frame_bb.Min, frame_bb.Max, frame_col, true, g.Style.FrameRounding); - - // Slider behavior - ImRect grab_bb; - const bool value_changed = SliderBehavior(frame_bb, id, data_type, p_data, p_min, p_max, format, power, ImGuiSliderFlags_None, &grab_bb); - if (value_changed) - MarkItemEdited(id); - - // Render grab - if (grab_bb.Max.x > grab_bb.Min.x) - window->DrawList->AddRectFilled(grab_bb.Min, grab_bb.Max, GetColorU32(g.ActiveId == id ? ImGuiCol_SliderGrabActive : ImGuiCol_SliderGrab), style.GrabRounding); - - // Display value using user-provided display format so user can add prefix/suffix/decorations to the value. - char value_buf[64]; - const char* value_buf_end = value_buf + DataTypeFormatString(value_buf, IM_ARRAYSIZE(value_buf), data_type, p_data, format); - RenderTextClipped(frame_bb.Min, frame_bb.Max, value_buf, value_buf_end, NULL, ImVec2(0.5f,0.5f)); - - if (label_size.x > 0.0f) - RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label); - - IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags); - return value_changed; -} - -// Add multiple sliders on 1 line for compact edition of multiple components -bool ImGui::SliderScalarN(const char* label, ImGuiDataType data_type, void* v, int components, const void* v_min, const void* v_max, const char* format, float power) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - - ImGuiContext& g = *GImGui; - bool value_changed = false; - BeginGroup(); - PushID(label); - PushMultiItemsWidths(components, CalcItemWidth()); - size_t type_size = GDataTypeInfo[data_type].Size; - for (int i = 0; i < components; i++) - { - PushID(i); - if (i > 0) - SameLine(0, g.Style.ItemInnerSpacing.x); - value_changed |= SliderScalar("", data_type, v, v_min, v_max, format, power); - PopID(); - PopItemWidth(); - v = (void*)((char*)v + type_size); - } - PopID(); - - const char* label_end = FindRenderedTextEnd(label); - if (label != label_end) - { - SameLine(0, g.Style.ItemInnerSpacing.x); - TextEx(label, label_end); - } - - EndGroup(); - return value_changed; -} - -bool ImGui::SliderFloat(const char* label, float* v, float v_min, float v_max, const char* format, float power) -{ - return SliderScalar(label, ImGuiDataType_Float, v, &v_min, &v_max, format, power); -} - -bool ImGui::SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* format, float power) -{ - return SliderScalarN(label, ImGuiDataType_Float, v, 2, &v_min, &v_max, format, power); -} - -bool ImGui::SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* format, float power) -{ - return SliderScalarN(label, ImGuiDataType_Float, v, 3, &v_min, &v_max, format, power); -} - -bool ImGui::SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* format, float power) -{ - return SliderScalarN(label, ImGuiDataType_Float, v, 4, &v_min, &v_max, format, power); -} - -bool ImGui::SliderAngle(const char* label, float* v_rad, float v_degrees_min, float v_degrees_max, const char* format) -{ - if (format == NULL) - format = "%.0f deg"; - float v_deg = (*v_rad) * 360.0f / (2*IM_PI); - bool value_changed = SliderFloat(label, &v_deg, v_degrees_min, v_degrees_max, format, 1.0f); - *v_rad = v_deg * (2*IM_PI) / 360.0f; - return value_changed; -} - -bool ImGui::SliderInt(const char* label, int* v, int v_min, int v_max, const char* format) -{ - return SliderScalar(label, ImGuiDataType_S32, v, &v_min, &v_max, format); -} - -bool ImGui::SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* format) -{ - return SliderScalarN(label, ImGuiDataType_S32, v, 2, &v_min, &v_max, format); -} - -bool ImGui::SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* format) -{ - return SliderScalarN(label, ImGuiDataType_S32, v, 3, &v_min, &v_max, format); -} - -bool ImGui::SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* format) -{ - return SliderScalarN(label, ImGuiDataType_S32, v, 4, &v_min, &v_max, format); -} - -bool ImGui::VSliderScalar(const char* label, const ImVec2& size, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format, float power) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - - ImGuiContext& g = *GImGui; - const ImGuiStyle& style = g.Style; - const ImGuiID id = window->GetID(label); - - const ImVec2 label_size = CalcTextSize(label, NULL, true); - const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + size); - const ImRect bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f)); - - ItemSize(bb, style.FramePadding.y); - if (!ItemAdd(frame_bb, id)) - return false; - - // Default format string when passing NULL - if (format == NULL) - format = DataTypeGetInfo(data_type)->PrintFmt; - else if (data_type == ImGuiDataType_S32 && strcmp(format, "%d") != 0) // (FIXME-LEGACY: Patch old "%.0f" format string to use "%d", read function more details.) - format = PatchFormatStringFloatToInt(format); - - const bool hovered = ItemHoverable(frame_bb, id); - if ((hovered && g.IO.MouseClicked[0]) || g.NavActivateId == id || g.NavInputId == id) - { - SetActiveID(id, window); - SetFocusID(id, window); - FocusWindow(window); - g.ActiveIdUsingNavDirMask |= (1 << ImGuiDir_Up) | (1 << ImGuiDir_Down); - } - - // Draw frame - const ImU32 frame_col = GetColorU32(g.ActiveId == id ? ImGuiCol_FrameBgActive : g.HoveredId == id ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg); - RenderNavHighlight(frame_bb, id); - RenderFrame(frame_bb.Min, frame_bb.Max, frame_col, true, g.Style.FrameRounding); - - // Slider behavior - ImRect grab_bb; - const bool value_changed = SliderBehavior(frame_bb, id, data_type, p_data, p_min, p_max, format, power, ImGuiSliderFlags_Vertical, &grab_bb); - if (value_changed) - MarkItemEdited(id); - - // Render grab - if (grab_bb.Max.y > grab_bb.Min.y) - window->DrawList->AddRectFilled(grab_bb.Min, grab_bb.Max, GetColorU32(g.ActiveId == id ? ImGuiCol_SliderGrabActive : ImGuiCol_SliderGrab), style.GrabRounding); - - // Display value using user-provided display format so user can add prefix/suffix/decorations to the value. - // For the vertical slider we allow centered text to overlap the frame padding - char value_buf[64]; - const char* value_buf_end = value_buf + DataTypeFormatString(value_buf, IM_ARRAYSIZE(value_buf), data_type, p_data, format); - RenderTextClipped(ImVec2(frame_bb.Min.x, frame_bb.Min.y + style.FramePadding.y), frame_bb.Max, value_buf, value_buf_end, NULL, ImVec2(0.5f,0.0f)); - if (label_size.x > 0.0f) - RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label); - - return value_changed; -} - -bool ImGui::VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* format, float power) -{ - return VSliderScalar(label, size, ImGuiDataType_Float, v, &v_min, &v_max, format, power); -} - -bool ImGui::VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* format) -{ - return VSliderScalar(label, size, ImGuiDataType_S32, v, &v_min, &v_max, format); -} - -//------------------------------------------------------------------------- -// [SECTION] Widgets: InputScalar, InputFloat, InputInt, etc. -//------------------------------------------------------------------------- -// - ImParseFormatFindStart() [Internal] -// - ImParseFormatFindEnd() [Internal] -// - ImParseFormatTrimDecorations() [Internal] -// - ImParseFormatPrecision() [Internal] -// - TempInputTextScalar() [Internal] -// - InputScalar() -// - InputScalarN() -// - InputFloat() -// - InputFloat2() -// - InputFloat3() -// - InputFloat4() -// - InputInt() -// - InputInt2() -// - InputInt3() -// - InputInt4() -// - InputDouble() -//------------------------------------------------------------------------- - -// We don't use strchr() because our strings are usually very short and often start with '%' -const char* ImParseFormatFindStart(const char* fmt) -{ - while (char c = fmt[0]) - { - if (c == '%' && fmt[1] != '%') - return fmt; - else if (c == '%') - fmt++; - fmt++; - } - return fmt; -} - -const char* ImParseFormatFindEnd(const char* fmt) -{ - // Printf/scanf types modifiers: I/L/h/j/l/t/w/z. Other uppercase letters qualify as types aka end of the format. - if (fmt[0] != '%') - return fmt; - const unsigned int ignored_uppercase_mask = (1 << ('I'-'A')) | (1 << ('L'-'A')); - const unsigned int ignored_lowercase_mask = (1 << ('h'-'a')) | (1 << ('j'-'a')) | (1 << ('l'-'a')) | (1 << ('t'-'a')) | (1 << ('w'-'a')) | (1 << ('z'-'a')); - for (char c; (c = *fmt) != 0; fmt++) - { - if (c >= 'A' && c <= 'Z' && ((1 << (c - 'A')) & ignored_uppercase_mask) == 0) - return fmt + 1; - if (c >= 'a' && c <= 'z' && ((1 << (c - 'a')) & ignored_lowercase_mask) == 0) - return fmt + 1; - } - return fmt; -} - -// Extract the format out of a format string with leading or trailing decorations -// fmt = "blah blah" -> return fmt -// fmt = "%.3f" -> return fmt -// fmt = "hello %.3f" -> return fmt + 6 -// fmt = "%.3f hello" -> return buf written with "%.3f" -const char* ImParseFormatTrimDecorations(const char* fmt, char* buf, size_t buf_size) -{ - const char* fmt_start = ImParseFormatFindStart(fmt); - if (fmt_start[0] != '%') - return fmt; - const char* fmt_end = ImParseFormatFindEnd(fmt_start); - if (fmt_end[0] == 0) // If we only have leading decoration, we don't need to copy the data. - return fmt_start; - ImStrncpy(buf, fmt_start, ImMin((size_t)(fmt_end - fmt_start) + 1, buf_size)); - return buf; -} - -// Parse display precision back from the display format string -// FIXME: This is still used by some navigation code path to infer a minimum tweak step, but we should aim to rework widgets so it isn't needed. -int ImParseFormatPrecision(const char* fmt, int default_precision) -{ - fmt = ImParseFormatFindStart(fmt); - if (fmt[0] != '%') - return default_precision; - fmt++; - while (*fmt >= '0' && *fmt <= '9') - fmt++; - int precision = INT_MAX; - if (*fmt == '.') - { - fmt = ImAtoi(fmt + 1, &precision); - if (precision < 0 || precision > 99) - precision = default_precision; - } - if (*fmt == 'e' || *fmt == 'E') // Maximum precision with scientific notation - precision = -1; - if ((*fmt == 'g' || *fmt == 'G') && precision == INT_MAX) - precision = -1; - return (precision == INT_MAX) ? default_precision : precision; -} - -// Create text input in place of another active widget (e.g. used when doing a CTRL+Click on drag/slider widgets) -// FIXME: Facilitate using this in variety of other situations. -bool ImGui::TempInputText(const ImRect& bb, ImGuiID id, const char* label, char* buf, int buf_size, ImGuiInputTextFlags flags) -{ - // On the first frame, g.TempInputTextId == 0, then on subsequent frames it becomes == id. - // We clear ActiveID on the first frame to allow the InputText() taking it back. - ImGuiContext& g = *GImGui; - const bool init = (g.TempInputId != id); - if (init) - ClearActiveID(); - - g.CurrentWindow->DC.CursorPos = bb.Min; - bool value_changed = InputTextEx(label, NULL, buf, buf_size, bb.GetSize(), flags); - if (init) - { - // First frame we started displaying the InputText widget, we expect it to take the active id. - IM_ASSERT(g.ActiveId == id); - g.TempInputId = g.ActiveId; - } - return value_changed; -} - -bool ImGui::TempInputScalar(const ImRect& bb, ImGuiID id, const char* label, ImGuiDataType data_type, void* p_data, const char* format) -{ - ImGuiContext& g = *GImGui; - - char fmt_buf[32]; - char data_buf[32]; - format = ImParseFormatTrimDecorations(format, fmt_buf, IM_ARRAYSIZE(fmt_buf)); - DataTypeFormatString(data_buf, IM_ARRAYSIZE(data_buf), data_type, p_data, format); - ImStrTrimBlanks(data_buf); - - ImGuiInputTextFlags flags = ImGuiInputTextFlags_AutoSelectAll | ImGuiInputTextFlags_NoMarkEdited; - flags |= ((data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double) ? ImGuiInputTextFlags_CharsScientific : ImGuiInputTextFlags_CharsDecimal); - bool value_changed = TempInputText(bb, id, label, data_buf, IM_ARRAYSIZE(data_buf), flags); - if (value_changed) - { - value_changed = DataTypeApplyOpFromText(data_buf, g.InputTextState.InitialTextA.Data, data_type, p_data, NULL); - if (value_changed) - MarkItemEdited(id); - } - return value_changed; -} - -// Note: p_data, p_step, p_step_fast are _pointers_ to a memory address holding the data. For an Input widget, p_step and p_step_fast are optional. -// Read code of e.g. InputFloat(), InputInt() etc. or examples in 'Demo->Widgets->Data Types' to understand how to use this function directly. -bool ImGui::InputScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_step, const void* p_step_fast, const char* format, ImGuiInputTextFlags flags) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - - ImGuiContext& g = *GImGui; - ImGuiStyle& style = g.Style; - - if (format == NULL) - format = DataTypeGetInfo(data_type)->PrintFmt; - - char buf[64]; - DataTypeFormatString(buf, IM_ARRAYSIZE(buf), data_type, p_data, format); - - bool value_changed = false; - if ((flags & (ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsScientific)) == 0) - flags |= ImGuiInputTextFlags_CharsDecimal; - flags |= ImGuiInputTextFlags_AutoSelectAll; - flags |= ImGuiInputTextFlags_NoMarkEdited; // We call MarkItemEdited() ourselve by comparing the actual data rather than the string. - - if (p_step != NULL) - { - const float button_size = GetFrameHeight(); - - BeginGroup(); // The only purpose of the group here is to allow the caller to query item data e.g. IsItemActive() - PushID(label); - SetNextItemWidth(ImMax(1.0f, CalcItemWidth() - (button_size + style.ItemInnerSpacing.x) * 2)); - if (InputText("", buf, IM_ARRAYSIZE(buf), flags)) // PushId(label) + "" gives us the expected ID from outside point of view - value_changed = DataTypeApplyOpFromText(buf, g.InputTextState.InitialTextA.Data, data_type, p_data, format); - - // Step buttons - const ImVec2 backup_frame_padding = style.FramePadding; - style.FramePadding.x = style.FramePadding.y; - ImGuiButtonFlags button_flags = ImGuiButtonFlags_Repeat | ImGuiButtonFlags_DontClosePopups; - if (flags & ImGuiInputTextFlags_ReadOnly) - button_flags |= ImGuiButtonFlags_Disabled; - SameLine(0, style.ItemInnerSpacing.x); - if (ButtonEx("-", ImVec2(button_size, button_size), button_flags)) - { - DataTypeApplyOp(data_type, '-', p_data, p_data, g.IO.KeyCtrl && p_step_fast ? p_step_fast : p_step); - value_changed = true; - } - SameLine(0, style.ItemInnerSpacing.x); - if (ButtonEx("+", ImVec2(button_size, button_size), button_flags)) - { - DataTypeApplyOp(data_type, '+', p_data, p_data, g.IO.KeyCtrl && p_step_fast ? p_step_fast : p_step); - value_changed = true; - } - - const char* label_end = FindRenderedTextEnd(label); - if (label != label_end) - { - SameLine(0, style.ItemInnerSpacing.x); - TextEx(label, label_end); - } - style.FramePadding = backup_frame_padding; - - PopID(); - EndGroup(); - } - else - { - if (InputText(label, buf, IM_ARRAYSIZE(buf), flags)) - value_changed = DataTypeApplyOpFromText(buf, g.InputTextState.InitialTextA.Data, data_type, p_data, format); - } - if (value_changed) - MarkItemEdited(window->DC.LastItemId); - - return value_changed; -} - -bool ImGui::InputScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, const void* p_step, const void* p_step_fast, const char* format, ImGuiInputTextFlags flags) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - - ImGuiContext& g = *GImGui; - bool value_changed = false; - BeginGroup(); - PushID(label); - PushMultiItemsWidths(components, CalcItemWidth()); - size_t type_size = GDataTypeInfo[data_type].Size; - for (int i = 0; i < components; i++) - { - PushID(i); - if (i > 0) - SameLine(0, g.Style.ItemInnerSpacing.x); - value_changed |= InputScalar("", data_type, p_data, p_step, p_step_fast, format, flags); - PopID(); - PopItemWidth(); - p_data = (void*)((char*)p_data + type_size); - } - PopID(); - - const char* label_end = FindRenderedTextEnd(label); - if (label != label_end) - { - SameLine(0.0f, g.Style.ItemInnerSpacing.x); - TextEx(label, label_end); - } - - EndGroup(); - return value_changed; -} - -bool ImGui::InputFloat(const char* label, float* v, float step, float step_fast, const char* format, ImGuiInputTextFlags flags) -{ - flags |= ImGuiInputTextFlags_CharsScientific; - return InputScalar(label, ImGuiDataType_Float, (void*)v, (void*)(step>0.0f ? &step : NULL), (void*)(step_fast>0.0f ? &step_fast : NULL), format, flags); -} - -bool ImGui::InputFloat2(const char* label, float v[2], const char* format, ImGuiInputTextFlags flags) -{ - return InputScalarN(label, ImGuiDataType_Float, v, 2, NULL, NULL, format, flags); -} - -bool ImGui::InputFloat3(const char* label, float v[3], const char* format, ImGuiInputTextFlags flags) -{ - return InputScalarN(label, ImGuiDataType_Float, v, 3, NULL, NULL, format, flags); -} - -bool ImGui::InputFloat4(const char* label, float v[4], const char* format, ImGuiInputTextFlags flags) -{ - return InputScalarN(label, ImGuiDataType_Float, v, 4, NULL, NULL, format, flags); -} - -// Prefer using "const char* format" directly, which is more flexible and consistent with other API. -#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS -bool ImGui::InputFloat(const char* label, float* v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags flags) -{ - char format[16] = "%f"; - if (decimal_precision >= 0) - ImFormatString(format, IM_ARRAYSIZE(format), "%%.%df", decimal_precision); - return InputFloat(label, v, step, step_fast, format, flags); -} - -bool ImGui::InputFloat2(const char* label, float v[2], int decimal_precision, ImGuiInputTextFlags flags) -{ - char format[16] = "%f"; - if (decimal_precision >= 0) - ImFormatString(format, IM_ARRAYSIZE(format), "%%.%df", decimal_precision); - return InputScalarN(label, ImGuiDataType_Float, v, 2, NULL, NULL, format, flags); -} - -bool ImGui::InputFloat3(const char* label, float v[3], int decimal_precision, ImGuiInputTextFlags flags) -{ - char format[16] = "%f"; - if (decimal_precision >= 0) - ImFormatString(format, IM_ARRAYSIZE(format), "%%.%df", decimal_precision); - return InputScalarN(label, ImGuiDataType_Float, v, 3, NULL, NULL, format, flags); -} - -bool ImGui::InputFloat4(const char* label, float v[4], int decimal_precision, ImGuiInputTextFlags flags) -{ - char format[16] = "%f"; - if (decimal_precision >= 0) - ImFormatString(format, IM_ARRAYSIZE(format), "%%.%df", decimal_precision); - return InputScalarN(label, ImGuiDataType_Float, v, 4, NULL, NULL, format, flags); -} -#endif // IMGUI_DISABLE_OBSOLETE_FUNCTIONS - -bool ImGui::InputInt(const char* label, int* v, int step, int step_fast, ImGuiInputTextFlags flags) -{ - // Hexadecimal input provided as a convenience but the flag name is awkward. Typically you'd use InputText() to parse your own data, if you want to handle prefixes. - const char* format = (flags & ImGuiInputTextFlags_CharsHexadecimal) ? "%08X" : "%d"; - return InputScalar(label, ImGuiDataType_S32, (void*)v, (void*)(step>0 ? &step : NULL), (void*)(step_fast>0 ? &step_fast : NULL), format, flags); -} - -bool ImGui::InputInt2(const char* label, int v[2], ImGuiInputTextFlags flags) -{ - return InputScalarN(label, ImGuiDataType_S32, v, 2, NULL, NULL, "%d", flags); -} - -bool ImGui::InputInt3(const char* label, int v[3], ImGuiInputTextFlags flags) -{ - return InputScalarN(label, ImGuiDataType_S32, v, 3, NULL, NULL, "%d", flags); -} - -bool ImGui::InputInt4(const char* label, int v[4], ImGuiInputTextFlags flags) -{ - return InputScalarN(label, ImGuiDataType_S32, v, 4, NULL, NULL, "%d", flags); -} - -bool ImGui::InputDouble(const char* label, double* v, double step, double step_fast, const char* format, ImGuiInputTextFlags flags) -{ - flags |= ImGuiInputTextFlags_CharsScientific; - return InputScalar(label, ImGuiDataType_Double, (void*)v, (void*)(step>0.0 ? &step : NULL), (void*)(step_fast>0.0 ? &step_fast : NULL), format, flags); -} - -//------------------------------------------------------------------------- -// [SECTION] Widgets: InputText, InputTextMultiline, InputTextWithHint -//------------------------------------------------------------------------- -// - InputText() -// - InputTextWithHint() -// - InputTextMultiline() -// - InputTextEx() [Internal] -//------------------------------------------------------------------------- - -bool ImGui::InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data) -{ - IM_ASSERT(!(flags & ImGuiInputTextFlags_Multiline)); // call InputTextMultiline() - return InputTextEx(label, NULL, buf, (int)buf_size, ImVec2(0,0), flags, callback, user_data); -} - -bool ImGui::InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data) -{ - return InputTextEx(label, NULL, buf, (int)buf_size, size, flags | ImGuiInputTextFlags_Multiline, callback, user_data); -} - -bool ImGui::InputTextWithHint(const char* label, const char* hint, char* buf, size_t buf_size, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data) -{ - IM_ASSERT(!(flags & ImGuiInputTextFlags_Multiline)); // call InputTextMultiline() - return InputTextEx(label, hint, buf, (int)buf_size, ImVec2(0, 0), flags, callback, user_data); -} - -static int InputTextCalcTextLenAndLineCount(const char* text_begin, const char** out_text_end) -{ - int line_count = 0; - const char* s = text_begin; - while (char c = *s++) // We are only matching for \n so we can ignore UTF-8 decoding - if (c == '\n') - line_count++; - s--; - if (s[0] != '\n' && s[0] != '\r') - line_count++; - *out_text_end = s; - return line_count; -} - -static ImVec2 InputTextCalcTextSizeW(const ImWchar* text_begin, const ImWchar* text_end, const ImWchar** remaining, ImVec2* out_offset, bool stop_on_new_line) -{ - ImGuiContext& g = *GImGui; - ImFont* font = g.Font; - const float line_height = g.FontSize; - const float scale = line_height / font->FontSize; - - ImVec2 text_size = ImVec2(0,0); - float line_width = 0.0f; - - const ImWchar* s = text_begin; - while (s < text_end) - { - unsigned int c = (unsigned int)(*s++); - if (c == '\n') - { - text_size.x = ImMax(text_size.x, line_width); - text_size.y += line_height; - line_width = 0.0f; - if (stop_on_new_line) - break; - continue; - } - if (c == '\r') - continue; - - const float char_width = font->GetCharAdvance((ImWchar)c) * scale; - line_width += char_width; - } - - if (text_size.x < line_width) - text_size.x = line_width; - - if (out_offset) - *out_offset = ImVec2(line_width, text_size.y + line_height); // offset allow for the possibility of sitting after a trailing \n - - if (line_width > 0 || text_size.y == 0.0f) // whereas size.y will ignore the trailing \n - text_size.y += line_height; - - if (remaining) - *remaining = s; - - return text_size; -} - -// Wrapper for stb_textedit.h to edit text (our wrapper is for: statically sized buffer, single-line, wchar characters. InputText converts between UTF-8 and wchar) -namespace ImStb -{ - -static int STB_TEXTEDIT_STRINGLEN(const STB_TEXTEDIT_STRING* obj) { return obj->CurLenW; } -static ImWchar STB_TEXTEDIT_GETCHAR(const STB_TEXTEDIT_STRING* obj, int idx) { return obj->TextW[idx]; } -static float STB_TEXTEDIT_GETWIDTH(STB_TEXTEDIT_STRING* obj, int line_start_idx, int char_idx) { ImWchar c = obj->TextW[line_start_idx + char_idx]; if (c == '\n') return STB_TEXTEDIT_GETWIDTH_NEWLINE; ImGuiContext& g = *GImGui; return g.Font->GetCharAdvance(c) * (g.FontSize / g.Font->FontSize); } -static int STB_TEXTEDIT_KEYTOTEXT(int key) { return key >= 0x200000 ? 0 : key; } -static ImWchar STB_TEXTEDIT_NEWLINE = '\n'; -static void STB_TEXTEDIT_LAYOUTROW(StbTexteditRow* r, STB_TEXTEDIT_STRING* obj, int line_start_idx) -{ - const ImWchar* text = obj->TextW.Data; - const ImWchar* text_remaining = NULL; - const ImVec2 size = InputTextCalcTextSizeW(text + line_start_idx, text + obj->CurLenW, &text_remaining, NULL, true); - r->x0 = 0.0f; - r->x1 = size.x; - r->baseline_y_delta = size.y; - r->ymin = 0.0f; - r->ymax = size.y; - r->num_chars = (int)(text_remaining - (text + line_start_idx)); -} - -static bool is_separator(unsigned int c) { return ImCharIsBlankW(c) || c==',' || c==';' || c=='(' || c==')' || c=='{' || c=='}' || c=='[' || c==']' || c=='|'; } -static int is_word_boundary_from_right(STB_TEXTEDIT_STRING* obj, int idx) { return idx > 0 ? (is_separator( obj->TextW[idx-1] ) && !is_separator( obj->TextW[idx] ) ) : 1; } -static int STB_TEXTEDIT_MOVEWORDLEFT_IMPL(STB_TEXTEDIT_STRING* obj, int idx) { idx--; while (idx >= 0 && !is_word_boundary_from_right(obj, idx)) idx--; return idx < 0 ? 0 : idx; } -#ifdef __APPLE__ // FIXME: Move setting to IO structure -static int is_word_boundary_from_left(STB_TEXTEDIT_STRING* obj, int idx) { return idx > 0 ? (!is_separator( obj->TextW[idx-1] ) && is_separator( obj->TextW[idx] ) ) : 1; } -static int STB_TEXTEDIT_MOVEWORDRIGHT_IMPL(STB_TEXTEDIT_STRING* obj, int idx) { idx++; int len = obj->CurLenW; while (idx < len && !is_word_boundary_from_left(obj, idx)) idx++; return idx > len ? len : idx; } -#else -static int STB_TEXTEDIT_MOVEWORDRIGHT_IMPL(STB_TEXTEDIT_STRING* obj, int idx) { idx++; int len = obj->CurLenW; while (idx < len && !is_word_boundary_from_right(obj, idx)) idx++; return idx > len ? len : idx; } -#endif -#define STB_TEXTEDIT_MOVEWORDLEFT STB_TEXTEDIT_MOVEWORDLEFT_IMPL // They need to be #define for stb_textedit.h -#define STB_TEXTEDIT_MOVEWORDRIGHT STB_TEXTEDIT_MOVEWORDRIGHT_IMPL - -static void STB_TEXTEDIT_DELETECHARS(STB_TEXTEDIT_STRING* obj, int pos, int n) -{ - ImWchar* dst = obj->TextW.Data + pos; - - // We maintain our buffer length in both UTF-8 and wchar formats - obj->CurLenA -= ImTextCountUtf8BytesFromStr(dst, dst + n); - obj->CurLenW -= n; - - // Offset remaining text (FIXME-OPT: Use memmove) - const ImWchar* src = obj->TextW.Data + pos + n; - while (ImWchar c = *src++) - *dst++ = c; - *dst = '\0'; -} - -static bool STB_TEXTEDIT_INSERTCHARS(STB_TEXTEDIT_STRING* obj, int pos, const ImWchar* new_text, int new_text_len) -{ - const bool is_resizable = (obj->UserFlags & ImGuiInputTextFlags_CallbackResize) != 0; - const int text_len = obj->CurLenW; - IM_ASSERT(pos <= text_len); - - const int new_text_len_utf8 = ImTextCountUtf8BytesFromStr(new_text, new_text + new_text_len); - if (!is_resizable && (new_text_len_utf8 + obj->CurLenA + 1 > obj->BufCapacityA)) - return false; - - // Grow internal buffer if needed - if (new_text_len + text_len + 1 > obj->TextW.Size) - { - if (!is_resizable) - return false; - IM_ASSERT(text_len < obj->TextW.Size); - obj->TextW.resize(text_len + ImClamp(new_text_len * 4, 32, ImMax(256, new_text_len)) + 1); - } - - ImWchar* text = obj->TextW.Data; - if (pos != text_len) - memmove(text + pos + new_text_len, text + pos, (size_t)(text_len - pos) * sizeof(ImWchar)); - memcpy(text + pos, new_text, (size_t)new_text_len * sizeof(ImWchar)); - - obj->CurLenW += new_text_len; - obj->CurLenA += new_text_len_utf8; - obj->TextW[obj->CurLenW] = '\0'; - - return true; -} - -// We don't use an enum so we can build even with conflicting symbols (if another user of stb_textedit.h leak their STB_TEXTEDIT_K_* symbols) -#define STB_TEXTEDIT_K_LEFT 0x200000 // keyboard input to move cursor left -#define STB_TEXTEDIT_K_RIGHT 0x200001 // keyboard input to move cursor right -#define STB_TEXTEDIT_K_UP 0x200002 // keyboard input to move cursor up -#define STB_TEXTEDIT_K_DOWN 0x200003 // keyboard input to move cursor down -#define STB_TEXTEDIT_K_LINESTART 0x200004 // keyboard input to move cursor to start of line -#define STB_TEXTEDIT_K_LINEEND 0x200005 // keyboard input to move cursor to end of line -#define STB_TEXTEDIT_K_TEXTSTART 0x200006 // keyboard input to move cursor to start of text -#define STB_TEXTEDIT_K_TEXTEND 0x200007 // keyboard input to move cursor to end of text -#define STB_TEXTEDIT_K_DELETE 0x200008 // keyboard input to delete selection or character under cursor -#define STB_TEXTEDIT_K_BACKSPACE 0x200009 // keyboard input to delete selection or character left of cursor -#define STB_TEXTEDIT_K_UNDO 0x20000A // keyboard input to perform undo -#define STB_TEXTEDIT_K_REDO 0x20000B // keyboard input to perform redo -#define STB_TEXTEDIT_K_WORDLEFT 0x20000C // keyboard input to move cursor left one word -#define STB_TEXTEDIT_K_WORDRIGHT 0x20000D // keyboard input to move cursor right one word -#define STB_TEXTEDIT_K_SHIFT 0x400000 - -#define STB_TEXTEDIT_IMPLEMENTATION -#include "imstb_textedit.h" - -// stb_textedit internally allows for a single undo record to do addition and deletion, but somehow, calling -// the stb_textedit_paste() function creates two separate records, so we perform it manually. (FIXME: Report to nothings/stb?) -static void stb_textedit_replace(STB_TEXTEDIT_STRING* str, STB_TexteditState* state, const STB_TEXTEDIT_CHARTYPE* text, int text_len) -{ - stb_text_makeundo_replace(str, state, 0, str->CurLenW, text_len); - ImStb::STB_TEXTEDIT_DELETECHARS(str, 0, str->CurLenW); - if (text_len <= 0) - return; - if (ImStb::STB_TEXTEDIT_INSERTCHARS(str, 0, text, text_len)) - { - state->cursor = text_len; - state->has_preferred_x = 0; - return; - } - IM_ASSERT(0); // Failed to insert character, normally shouldn't happen because of how we currently use stb_textedit_replace() -} - -} // namespace ImStb - -void ImGuiInputTextState::OnKeyPressed(int key) -{ - stb_textedit_key(this, &Stb, key); - CursorFollow = true; - CursorAnimReset(); -} - -ImGuiInputTextCallbackData::ImGuiInputTextCallbackData() -{ - memset(this, 0, sizeof(*this)); -} - -// Public API to manipulate UTF-8 text -// We expose UTF-8 to the user (unlike the STB_TEXTEDIT_* functions which are manipulating wchar) -// FIXME: The existence of this rarely exercised code path is a bit of a nuisance. -void ImGuiInputTextCallbackData::DeleteChars(int pos, int bytes_count) -{ - IM_ASSERT(pos + bytes_count <= BufTextLen); - char* dst = Buf + pos; - const char* src = Buf + pos + bytes_count; - while (char c = *src++) - *dst++ = c; - *dst = '\0'; - - if (CursorPos + bytes_count >= pos) - CursorPos -= bytes_count; - else if (CursorPos >= pos) - CursorPos = pos; - SelectionStart = SelectionEnd = CursorPos; - BufDirty = true; - BufTextLen -= bytes_count; -} - -void ImGuiInputTextCallbackData::InsertChars(int pos, const char* new_text, const char* new_text_end) -{ - const bool is_resizable = (Flags & ImGuiInputTextFlags_CallbackResize) != 0; - const int new_text_len = new_text_end ? (int)(new_text_end - new_text) : (int)strlen(new_text); - if (new_text_len + BufTextLen >= BufSize) - { - if (!is_resizable) - return; - - // Contrary to STB_TEXTEDIT_INSERTCHARS() this is working in the UTF8 buffer, hence the midly similar code (until we remove the U16 buffer alltogether!) - ImGuiContext& g = *GImGui; - ImGuiInputTextState* edit_state = &g.InputTextState; - IM_ASSERT(edit_state->ID != 0 && g.ActiveId == edit_state->ID); - IM_ASSERT(Buf == edit_state->TextA.Data); - int new_buf_size = BufTextLen + ImClamp(new_text_len * 4, 32, ImMax(256, new_text_len)) + 1; - edit_state->TextA.reserve(new_buf_size + 1); - Buf = edit_state->TextA.Data; - BufSize = edit_state->BufCapacityA = new_buf_size; - } - - if (BufTextLen != pos) - memmove(Buf + pos + new_text_len, Buf + pos, (size_t)(BufTextLen - pos)); - memcpy(Buf + pos, new_text, (size_t)new_text_len * sizeof(char)); - Buf[BufTextLen + new_text_len] = '\0'; - - if (CursorPos >= pos) - CursorPos += new_text_len; - SelectionStart = SelectionEnd = CursorPos; - BufDirty = true; - BufTextLen += new_text_len; -} - -// Return false to discard a character. -static bool InputTextFilterCharacter(unsigned int* p_char, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data) -{ - unsigned int c = *p_char; - - // Filter non-printable (NB: isprint is unreliable! see #2467) - if (c < 0x20) - { - bool pass = false; - pass |= (c == '\n' && (flags & ImGuiInputTextFlags_Multiline)); - pass |= (c == '\t' && (flags & ImGuiInputTextFlags_AllowTabInput)); - if (!pass) - return false; - } - - // We ignore Ascii representation of delete (emitted from Backspace on OSX, see #2578, #2817) - if (c == 127) - return false; - - // Filter private Unicode range. GLFW on OSX seems to send private characters for special keys like arrow keys (FIXME) - if (c >= 0xE000 && c <= 0xF8FF) - return false; - - // Filter Unicode ranges we are not handling in this build. - if (c > IM_UNICODE_CODEPOINT_MAX) - return false; - - // Generic named filters - if (flags & (ImGuiInputTextFlags_CharsDecimal | ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase | ImGuiInputTextFlags_CharsNoBlank | ImGuiInputTextFlags_CharsScientific)) - { - if (flags & ImGuiInputTextFlags_CharsDecimal) - if (!(c >= '0' && c <= '9') && (c != '.') && (c != '-') && (c != '+') && (c != '*') && (c != '/')) - return false; - - if (flags & ImGuiInputTextFlags_CharsScientific) - if (!(c >= '0' && c <= '9') && (c != '.') && (c != '-') && (c != '+') && (c != '*') && (c != '/') && (c != 'e') && (c != 'E')) - return false; - - if (flags & ImGuiInputTextFlags_CharsHexadecimal) - if (!(c >= '0' && c <= '9') && !(c >= 'a' && c <= 'f') && !(c >= 'A' && c <= 'F')) - return false; - - if (flags & ImGuiInputTextFlags_CharsUppercase) - if (c >= 'a' && c <= 'z') - *p_char = (c += (unsigned int)('A'-'a')); - - if (flags & ImGuiInputTextFlags_CharsNoBlank) - if (ImCharIsBlankW(c)) - return false; - } - - // Custom callback filter - if (flags & ImGuiInputTextFlags_CallbackCharFilter) - { - ImGuiInputTextCallbackData callback_data; - memset(&callback_data, 0, sizeof(ImGuiInputTextCallbackData)); - callback_data.EventFlag = ImGuiInputTextFlags_CallbackCharFilter; - callback_data.EventChar = (ImWchar)c; - callback_data.Flags = flags; - callback_data.UserData = user_data; - if (callback(&callback_data) != 0) - return false; - *p_char = callback_data.EventChar; - if (!callback_data.EventChar) - return false; - } - - return true; -} - -// Edit a string of text -// - buf_size account for the zero-terminator, so a buf_size of 6 can hold "Hello" but not "Hello!". -// This is so we can easily call InputText() on static arrays using ARRAYSIZE() and to match -// Note that in std::string world, capacity() would omit 1 byte used by the zero-terminator. -// - When active, hold on a privately held copy of the text (and apply back to 'buf'). So changing 'buf' while the InputText is active has no effect. -// - If you want to use ImGui::InputText() with std::string, see misc/cpp/imgui_stdlib.h -// (FIXME: Rather confusing and messy function, among the worse part of our codebase, expecting to rewrite a V2 at some point.. Partly because we are -// doing UTF8 > U16 > UTF8 conversions on the go to easily interface with stb_textedit. Ideally should stay in UTF-8 all the time. See https://github.com/nothings/stb/issues/188) -bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_size, const ImVec2& size_arg, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* callback_user_data) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - - IM_ASSERT(!((flags & ImGuiInputTextFlags_CallbackHistory) && (flags & ImGuiInputTextFlags_Multiline))); // Can't use both together (they both use up/down keys) - IM_ASSERT(!((flags & ImGuiInputTextFlags_CallbackCompletion) && (flags & ImGuiInputTextFlags_AllowTabInput))); // Can't use both together (they both use tab key) - - ImGuiContext& g = *GImGui; - ImGuiIO& io = g.IO; - const ImGuiStyle& style = g.Style; - - const bool RENDER_SELECTION_WHEN_INACTIVE = false; - const bool is_multiline = (flags & ImGuiInputTextFlags_Multiline) != 0; - const bool is_readonly = (flags & ImGuiInputTextFlags_ReadOnly) != 0; - const bool is_password = (flags & ImGuiInputTextFlags_Password) != 0; - const bool is_undoable = (flags & ImGuiInputTextFlags_NoUndoRedo) == 0; - const bool is_resizable = (flags & ImGuiInputTextFlags_CallbackResize) != 0; - if (is_resizable) - IM_ASSERT(callback != NULL); // Must provide a callback if you set the ImGuiInputTextFlags_CallbackResize flag! - - if (is_multiline) // Open group before calling GetID() because groups tracks id created within their scope, - BeginGroup(); - const ImGuiID id = window->GetID(label); - const ImVec2 label_size = CalcTextSize(label, NULL, true); - const ImVec2 frame_size = CalcItemSize(size_arg, CalcItemWidth(), (is_multiline ? g.FontSize * 8.0f : label_size.y) + style.FramePadding.y*2.0f); // Arbitrary default of 8 lines high for multi-line - const ImVec2 total_size = ImVec2(frame_size.x + (label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f), frame_size.y); - - const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + frame_size); - const ImRect total_bb(frame_bb.Min, frame_bb.Min + total_size); - - ImGuiWindow* draw_window = window; - ImVec2 inner_size = frame_size; - if (is_multiline) - { - if (!ItemAdd(total_bb, id, &frame_bb)) - { - ItemSize(total_bb, style.FramePadding.y); - EndGroup(); - return false; - } - - // We reproduce the contents of BeginChildFrame() in order to provide 'label' so our window internal data are easier to read/debug. - PushStyleColor(ImGuiCol_ChildBg, style.Colors[ImGuiCol_FrameBg]); - PushStyleVar(ImGuiStyleVar_ChildRounding, style.FrameRounding); - PushStyleVar(ImGuiStyleVar_ChildBorderSize, style.FrameBorderSize); - PushStyleVar(ImGuiStyleVar_WindowPadding, style.FramePadding); - bool child_visible = BeginChildEx(label, id, frame_bb.GetSize(), true, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysUseWindowPadding); - PopStyleVar(3); - PopStyleColor(); - if (!child_visible) - { - EndChild(); - EndGroup(); - return false; - } - draw_window = g.CurrentWindow; // Child window - draw_window->DC.NavLayerActiveMaskNext |= draw_window->DC.NavLayerCurrentMask; // This is to ensure that EndChild() will display a navigation highlight so we can "enter" into it. - inner_size.x -= draw_window->ScrollbarSizes.x; - } - else - { - ItemSize(total_bb, style.FramePadding.y); - if (!ItemAdd(total_bb, id, &frame_bb)) - return false; - } - const bool hovered = ItemHoverable(frame_bb, id); - if (hovered) - g.MouseCursor = ImGuiMouseCursor_TextInput; - - // We are only allowed to access the state if we are already the active widget. - ImGuiInputTextState* state = GetInputTextState(id); - - const bool focus_requested = FocusableItemRegister(window, id); - const bool focus_requested_by_code = focus_requested && (g.FocusRequestCurrWindow == window && g.FocusRequestCurrCounterRegular == window->DC.FocusCounterRegular); - const bool focus_requested_by_tab = focus_requested && !focus_requested_by_code; - - const bool user_clicked = hovered && io.MouseClicked[0]; - const bool user_nav_input_start = (g.ActiveId != id) && ((g.NavInputId == id) || (g.NavActivateId == id && g.NavInputSource == ImGuiInputSource_NavKeyboard)); - const bool user_scroll_finish = is_multiline && state != NULL && g.ActiveId == 0 && g.ActiveIdPreviousFrame == GetWindowScrollbarID(draw_window, ImGuiAxis_Y); - const bool user_scroll_active = is_multiline && state != NULL && g.ActiveId == GetWindowScrollbarID(draw_window, ImGuiAxis_Y); - - bool clear_active_id = false; - bool select_all = (g.ActiveId != id) && ((flags & ImGuiInputTextFlags_AutoSelectAll) != 0 || user_nav_input_start) && (!is_multiline); - - const bool init_make_active = (focus_requested || user_clicked || user_scroll_finish || user_nav_input_start); - const bool init_state = (init_make_active || user_scroll_active); - if (init_state && g.ActiveId != id) - { - // Access state even if we don't own it yet. - state = &g.InputTextState; - state->CursorAnimReset(); - - // Take a copy of the initial buffer value (both in original UTF-8 format and converted to wchar) - // From the moment we focused we are ignoring the content of 'buf' (unless we are in read-only mode) - const int buf_len = (int)strlen(buf); - state->InitialTextA.resize(buf_len + 1); // UTF-8. we use +1 to make sure that .Data is always pointing to at least an empty string. - memcpy(state->InitialTextA.Data, buf, buf_len + 1); - - // Start edition - const char* buf_end = NULL; - state->TextW.resize(buf_size + 1); // wchar count <= UTF-8 count. we use +1 to make sure that .Data is always pointing to at least an empty string. - state->TextA.resize(0); - state->TextAIsValid = false; // TextA is not valid yet (we will display buf until then) - state->CurLenW = ImTextStrFromUtf8(state->TextW.Data, buf_size, buf, NULL, &buf_end); - state->CurLenA = (int)(buf_end - buf); // We can't get the result from ImStrncpy() above because it is not UTF-8 aware. Here we'll cut off malformed UTF-8. - - // Preserve cursor position and undo/redo stack if we come back to same widget - // FIXME: For non-readonly widgets we might be able to require that TextAIsValid && TextA == buf ? (untested) and discard undo stack if user buffer has changed. - const bool recycle_state = (state->ID == id); - if (recycle_state) - { - // Recycle existing cursor/selection/undo stack but clamp position - // Note a single mouse click will override the cursor/position immediately by calling stb_textedit_click handler. - state->CursorClamp(); - } - else - { - state->ID = id; - state->ScrollX = 0.0f; - stb_textedit_initialize_state(&state->Stb, !is_multiline); - if (!is_multiline && focus_requested_by_code) - select_all = true; - } - if (flags & ImGuiInputTextFlags_AlwaysInsertMode) - state->Stb.insert_mode = 1; - if (!is_multiline && (focus_requested_by_tab || (user_clicked && io.KeyCtrl))) - select_all = true; - } - - if (g.ActiveId != id && init_make_active) - { - IM_ASSERT(state && state->ID == id); - SetActiveID(id, window); - SetFocusID(id, window); - FocusWindow(window); - - // Declare our inputs - IM_ASSERT(ImGuiNavInput_COUNT < 32); - g.ActiveIdUsingNavDirMask |= (1 << ImGuiDir_Left) | (1 << ImGuiDir_Right); - if (is_multiline || (flags & ImGuiInputTextFlags_CallbackHistory)) - g.ActiveIdUsingNavDirMask |= (1 << ImGuiDir_Up) | (1 << ImGuiDir_Down); - g.ActiveIdUsingNavInputMask |= (1 << ImGuiNavInput_Cancel); - g.ActiveIdUsingKeyInputMask |= ((ImU64)1 << ImGuiKey_Home) | ((ImU64)1 << ImGuiKey_End); - if (is_multiline) - g.ActiveIdUsingKeyInputMask |= ((ImU64)1 << ImGuiKey_PageUp) | ((ImU64)1 << ImGuiKey_PageDown); // FIXME-NAV: Page up/down actually not supported yet by widget, but claim them ahead. - if (flags & (ImGuiInputTextFlags_CallbackCompletion | ImGuiInputTextFlags_AllowTabInput)) // Disable keyboard tabbing out as we will use the \t character. - g.ActiveIdUsingKeyInputMask |= ((ImU64)1 << ImGuiKey_Tab); - } - - // We have an edge case if ActiveId was set through another widget (e.g. widget being swapped), clear id immediately (don't wait until the end of the function) - if (g.ActiveId == id && state == NULL) - ClearActiveID(); - - // Release focus when we click outside - if (g.ActiveId == id && io.MouseClicked[0] && !init_state && !init_make_active) //-V560 - clear_active_id = true; - - // Lock the decision of whether we are going to take the path displaying the cursor or selection - const bool render_cursor = (g.ActiveId == id) || (state && user_scroll_active); - bool render_selection = state && state->HasSelection() && (RENDER_SELECTION_WHEN_INACTIVE || render_cursor); - bool value_changed = false; - bool enter_pressed = false; - - // When read-only we always use the live data passed to the function - // FIXME-OPT: Because our selection/cursor code currently needs the wide text we need to convert it when active, which is not ideal :( - if (is_readonly && state != NULL && (render_cursor || render_selection)) - { - const char* buf_end = NULL; - state->TextW.resize(buf_size + 1); - state->CurLenW = ImTextStrFromUtf8(state->TextW.Data, state->TextW.Size, buf, NULL, &buf_end); - state->CurLenA = (int)(buf_end - buf); - state->CursorClamp(); - render_selection &= state->HasSelection(); - } - - // Select the buffer to render. - const bool buf_display_from_state = (render_cursor || render_selection || g.ActiveId == id) && !is_readonly && state && state->TextAIsValid; - const bool is_displaying_hint = (hint != NULL && (buf_display_from_state ? state->TextA.Data : buf)[0] == 0); - - // Password pushes a temporary font with only a fallback glyph - if (is_password && !is_displaying_hint) - { - const ImFontGlyph* glyph = g.Font->FindGlyph('*'); - ImFont* password_font = &g.InputTextPasswordFont; - password_font->FontSize = g.Font->FontSize; - password_font->Scale = g.Font->Scale; - password_font->DisplayOffset = g.Font->DisplayOffset; - password_font->Ascent = g.Font->Ascent; - password_font->Descent = g.Font->Descent; - password_font->ContainerAtlas = g.Font->ContainerAtlas; - password_font->FallbackGlyph = glyph; - password_font->FallbackAdvanceX = glyph->AdvanceX; - IM_ASSERT(password_font->Glyphs.empty() && password_font->IndexAdvanceX.empty() && password_font->IndexLookup.empty()); - PushFont(password_font); - } - - // Process mouse inputs and character inputs - int backup_current_text_length = 0; - if (g.ActiveId == id) - { - IM_ASSERT(state != NULL); - backup_current_text_length = state->CurLenA; - state->BufCapacityA = buf_size; - state->UserFlags = flags; - state->UserCallback = callback; - state->UserCallbackData = callback_user_data; - - // Although we are active we don't prevent mouse from hovering other elements unless we are interacting right now with the widget. - // Down the line we should have a cleaner library-wide concept of Selected vs Active. - g.ActiveIdAllowOverlap = !io.MouseDown[0]; - g.WantTextInputNextFrame = 1; - - // Edit in progress - const float mouse_x = (io.MousePos.x - frame_bb.Min.x - style.FramePadding.x) + state->ScrollX; - const float mouse_y = (is_multiline ? (io.MousePos.y - draw_window->DC.CursorPos.y - style.FramePadding.y) : (g.FontSize*0.5f)); - - const bool is_osx = io.ConfigMacOSXBehaviors; - if (select_all || (hovered && !is_osx && io.MouseDoubleClicked[0])) - { - state->SelectAll(); - state->SelectedAllMouseLock = true; - } - else if (hovered && is_osx && io.MouseDoubleClicked[0]) - { - // Double-click select a word only, OS X style (by simulating keystrokes) - state->OnKeyPressed(STB_TEXTEDIT_K_WORDLEFT); - state->OnKeyPressed(STB_TEXTEDIT_K_WORDRIGHT | STB_TEXTEDIT_K_SHIFT); - } - else if (io.MouseClicked[0] && !state->SelectedAllMouseLock) - { - if (hovered) - { - stb_textedit_click(state, &state->Stb, mouse_x, mouse_y); - state->CursorAnimReset(); - } - } - else if (io.MouseDown[0] && !state->SelectedAllMouseLock && (io.MouseDelta.x != 0.0f || io.MouseDelta.y != 0.0f)) - { - stb_textedit_drag(state, &state->Stb, mouse_x, mouse_y); - state->CursorAnimReset(); - state->CursorFollow = true; - } - if (state->SelectedAllMouseLock && !io.MouseDown[0]) - state->SelectedAllMouseLock = false; - - // It is ill-defined whether the back-end needs to send a \t character when pressing the TAB keys. - // Win32 and GLFW naturally do it but not SDL. - const bool ignore_char_inputs = (io.KeyCtrl && !io.KeyAlt) || (is_osx && io.KeySuper); - if ((flags & ImGuiInputTextFlags_AllowTabInput) && IsKeyPressedMap(ImGuiKey_Tab) && !ignore_char_inputs && !io.KeyShift && !is_readonly) - if (!io.InputQueueCharacters.contains('\t')) - { - unsigned int c = '\t'; // Insert TAB - if (InputTextFilterCharacter(&c, flags, callback, callback_user_data)) - state->OnKeyPressed((int)c); - } - - // Process regular text input (before we check for Return because using some IME will effectively send a Return?) - // We ignore CTRL inputs, but need to allow ALT+CTRL as some keyboards (e.g. German) use AltGR (which _is_ Alt+Ctrl) to input certain characters. - if (io.InputQueueCharacters.Size > 0) - { - if (!ignore_char_inputs && !is_readonly && !user_nav_input_start) - for (int n = 0; n < io.InputQueueCharacters.Size; n++) - { - // Insert character if they pass filtering - unsigned int c = (unsigned int)io.InputQueueCharacters[n]; - if (c == '\t' && io.KeyShift) - continue; - if (InputTextFilterCharacter(&c, flags, callback, callback_user_data)) - state->OnKeyPressed((int)c); - } - - // Consume characters - io.InputQueueCharacters.resize(0); - } - } - - // Process other shortcuts/key-presses - bool cancel_edit = false; - if (g.ActiveId == id && !g.ActiveIdIsJustActivated && !clear_active_id) - { - IM_ASSERT(state != NULL); - const int k_mask = (io.KeyShift ? STB_TEXTEDIT_K_SHIFT : 0); - const bool is_osx = io.ConfigMacOSXBehaviors; - const bool is_shortcut_key = (is_osx ? (io.KeySuper && !io.KeyCtrl) : (io.KeyCtrl && !io.KeySuper)) && !io.KeyAlt && !io.KeyShift; // OS X style: Shortcuts using Cmd/Super instead of Ctrl - const bool is_osx_shift_shortcut = is_osx && io.KeySuper && io.KeyShift && !io.KeyCtrl && !io.KeyAlt; - const bool is_wordmove_key_down = is_osx ? io.KeyAlt : io.KeyCtrl; // OS X style: Text editing cursor movement using Alt instead of Ctrl - const bool is_startend_key_down = is_osx && io.KeySuper && !io.KeyCtrl && !io.KeyAlt; // OS X style: Line/Text Start and End using Cmd+Arrows instead of Home/End - const bool is_ctrl_key_only = io.KeyCtrl && !io.KeyShift && !io.KeyAlt && !io.KeySuper; - const bool is_shift_key_only = io.KeyShift && !io.KeyCtrl && !io.KeyAlt && !io.KeySuper; - - const bool is_cut = ((is_shortcut_key && IsKeyPressedMap(ImGuiKey_X)) || (is_shift_key_only && IsKeyPressedMap(ImGuiKey_Delete))) && !is_readonly && !is_password && (!is_multiline || state->HasSelection()); - const bool is_copy = ((is_shortcut_key && IsKeyPressedMap(ImGuiKey_C)) || (is_ctrl_key_only && IsKeyPressedMap(ImGuiKey_Insert))) && !is_password && (!is_multiline || state->HasSelection()); - const bool is_paste = ((is_shortcut_key && IsKeyPressedMap(ImGuiKey_V)) || (is_shift_key_only && IsKeyPressedMap(ImGuiKey_Insert))) && !is_readonly; - const bool is_undo = ((is_shortcut_key && IsKeyPressedMap(ImGuiKey_Z)) && !is_readonly && is_undoable); - const bool is_redo = ((is_shortcut_key && IsKeyPressedMap(ImGuiKey_Y)) || (is_osx_shift_shortcut && IsKeyPressedMap(ImGuiKey_Z))) && !is_readonly && is_undoable; - - if (IsKeyPressedMap(ImGuiKey_LeftArrow)) { state->OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_LINESTART : is_wordmove_key_down ? STB_TEXTEDIT_K_WORDLEFT : STB_TEXTEDIT_K_LEFT) | k_mask); } - else if (IsKeyPressedMap(ImGuiKey_RightArrow)) { state->OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_LINEEND : is_wordmove_key_down ? STB_TEXTEDIT_K_WORDRIGHT : STB_TEXTEDIT_K_RIGHT) | k_mask); } - else if (IsKeyPressedMap(ImGuiKey_UpArrow) && is_multiline) { if (io.KeyCtrl) SetScrollY(draw_window, ImMax(draw_window->Scroll.y - g.FontSize, 0.0f)); else state->OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_TEXTSTART : STB_TEXTEDIT_K_UP) | k_mask); } - else if (IsKeyPressedMap(ImGuiKey_DownArrow) && is_multiline) { if (io.KeyCtrl) SetScrollY(draw_window, ImMin(draw_window->Scroll.y + g.FontSize, GetScrollMaxY())); else state->OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_TEXTEND : STB_TEXTEDIT_K_DOWN) | k_mask); } - else if (IsKeyPressedMap(ImGuiKey_Home)) { state->OnKeyPressed(io.KeyCtrl ? STB_TEXTEDIT_K_TEXTSTART | k_mask : STB_TEXTEDIT_K_LINESTART | k_mask); } - else if (IsKeyPressedMap(ImGuiKey_End)) { state->OnKeyPressed(io.KeyCtrl ? STB_TEXTEDIT_K_TEXTEND | k_mask : STB_TEXTEDIT_K_LINEEND | k_mask); } - else if (IsKeyPressedMap(ImGuiKey_Delete) && !is_readonly) { state->OnKeyPressed(STB_TEXTEDIT_K_DELETE | k_mask); } - else if (IsKeyPressedMap(ImGuiKey_Backspace) && !is_readonly) - { - if (!state->HasSelection()) - { - if (is_wordmove_key_down) - state->OnKeyPressed(STB_TEXTEDIT_K_WORDLEFT|STB_TEXTEDIT_K_SHIFT); - else if (is_osx && io.KeySuper && !io.KeyAlt && !io.KeyCtrl) - state->OnKeyPressed(STB_TEXTEDIT_K_LINESTART|STB_TEXTEDIT_K_SHIFT); - } - state->OnKeyPressed(STB_TEXTEDIT_K_BACKSPACE | k_mask); - } - else if (IsKeyPressedMap(ImGuiKey_Enter) || IsKeyPressedMap(ImGuiKey_KeyPadEnter)) - { - bool ctrl_enter_for_new_line = (flags & ImGuiInputTextFlags_CtrlEnterForNewLine) != 0; - if (!is_multiline || (ctrl_enter_for_new_line && !io.KeyCtrl) || (!ctrl_enter_for_new_line && io.KeyCtrl)) - { - enter_pressed = clear_active_id = true; - } - else if (!is_readonly) - { - unsigned int c = '\n'; // Insert new line - if (InputTextFilterCharacter(&c, flags, callback, callback_user_data)) - state->OnKeyPressed((int)c); - } - } - else if (IsKeyPressedMap(ImGuiKey_Escape)) - { - clear_active_id = cancel_edit = true; - } - else if (is_undo || is_redo) - { - state->OnKeyPressed(is_undo ? STB_TEXTEDIT_K_UNDO : STB_TEXTEDIT_K_REDO); - state->ClearSelection(); - } - else if (is_shortcut_key && IsKeyPressedMap(ImGuiKey_A)) - { - state->SelectAll(); - state->CursorFollow = true; - } - else if (is_cut || is_copy) - { - // Cut, Copy - if (io.SetClipboardTextFn) - { - const int ib = state->HasSelection() ? ImMin(state->Stb.select_start, state->Stb.select_end) : 0; - const int ie = state->HasSelection() ? ImMax(state->Stb.select_start, state->Stb.select_end) : state->CurLenW; - const int clipboard_data_len = ImTextCountUtf8BytesFromStr(state->TextW.Data + ib, state->TextW.Data + ie) + 1; - char* clipboard_data = (char*)IM_ALLOC(clipboard_data_len * sizeof(char)); - ImTextStrToUtf8(clipboard_data, clipboard_data_len, state->TextW.Data + ib, state->TextW.Data + ie); - SetClipboardText(clipboard_data); - MemFree(clipboard_data); - } - if (is_cut) - { - if (!state->HasSelection()) - state->SelectAll(); - state->CursorFollow = true; - stb_textedit_cut(state, &state->Stb); - } - } - else if (is_paste) - { - if (const char* clipboard = GetClipboardText()) - { - // Filter pasted buffer - const int clipboard_len = (int)strlen(clipboard); - ImWchar* clipboard_filtered = (ImWchar*)IM_ALLOC((clipboard_len+1) * sizeof(ImWchar)); - int clipboard_filtered_len = 0; - for (const char* s = clipboard; *s; ) - { - unsigned int c; - s += ImTextCharFromUtf8(&c, s, NULL); - if (c == 0) - break; - if (!InputTextFilterCharacter(&c, flags, callback, callback_user_data)) - continue; - clipboard_filtered[clipboard_filtered_len++] = (ImWchar)c; - } - clipboard_filtered[clipboard_filtered_len] = 0; - if (clipboard_filtered_len > 0) // If everything was filtered, ignore the pasting operation - { - stb_textedit_paste(state, &state->Stb, clipboard_filtered, clipboard_filtered_len); - state->CursorFollow = true; - } - MemFree(clipboard_filtered); - } - } - - // Update render selection flag after events have been handled, so selection highlight can be displayed during the same frame. - render_selection |= state->HasSelection() && (RENDER_SELECTION_WHEN_INACTIVE || render_cursor); - } - - // Process callbacks and apply result back to user's buffer. - if (g.ActiveId == id) - { - IM_ASSERT(state != NULL); - const char* apply_new_text = NULL; - int apply_new_text_length = 0; - if (cancel_edit) - { - // Restore initial value. Only return true if restoring to the initial value changes the current buffer contents. - if (!is_readonly && strcmp(buf, state->InitialTextA.Data) != 0) - { - // Push records into the undo stack so we can CTRL+Z the revert operation itself - apply_new_text = state->InitialTextA.Data; - apply_new_text_length = state->InitialTextA.Size - 1; - ImVector w_text; - if (apply_new_text_length > 0) - { - w_text.resize(ImTextCountCharsFromUtf8(apply_new_text, apply_new_text + apply_new_text_length) + 1); - ImTextStrFromUtf8(w_text.Data, w_text.Size, apply_new_text, apply_new_text + apply_new_text_length); - } - stb_textedit_replace(state, &state->Stb, w_text.Data, (apply_new_text_length > 0) ? (w_text.Size - 1) : 0); - } - } - - // When using 'ImGuiInputTextFlags_EnterReturnsTrue' as a special case we reapply the live buffer back to the input buffer before clearing ActiveId, even though strictly speaking it wasn't modified on this frame. - // If we didn't do that, code like InputInt() with ImGuiInputTextFlags_EnterReturnsTrue would fail. - // This also allows the user to use InputText() with ImGuiInputTextFlags_EnterReturnsTrue without maintaining any user-side storage (please note that if you use this property along ImGuiInputTextFlags_CallbackResize you can end up with your temporary string object unnecessarily allocating once a frame, either store your string data, either if you don't then don't use ImGuiInputTextFlags_CallbackResize). - bool apply_edit_back_to_user_buffer = !cancel_edit || (enter_pressed && (flags & ImGuiInputTextFlags_EnterReturnsTrue) != 0); - if (apply_edit_back_to_user_buffer) - { - // Apply new value immediately - copy modified buffer back - // Note that as soon as the input box is active, the in-widget value gets priority over any underlying modification of the input buffer - // FIXME: We actually always render 'buf' when calling DrawList->AddText, making the comment above incorrect. - // FIXME-OPT: CPU waste to do this every time the widget is active, should mark dirty state from the stb_textedit callbacks. - if (!is_readonly) - { - state->TextAIsValid = true; - state->TextA.resize(state->TextW.Size * 4 + 1); - ImTextStrToUtf8(state->TextA.Data, state->TextA.Size, state->TextW.Data, NULL); - } - - // User callback - if ((flags & (ImGuiInputTextFlags_CallbackCompletion | ImGuiInputTextFlags_CallbackHistory | ImGuiInputTextFlags_CallbackAlways)) != 0) - { - IM_ASSERT(callback != NULL); - - // The reason we specify the usage semantic (Completion/History) is that Completion needs to disable keyboard TABBING at the moment. - ImGuiInputTextFlags event_flag = 0; - ImGuiKey event_key = ImGuiKey_COUNT; - if ((flags & ImGuiInputTextFlags_CallbackCompletion) != 0 && IsKeyPressedMap(ImGuiKey_Tab)) - { - event_flag = ImGuiInputTextFlags_CallbackCompletion; - event_key = ImGuiKey_Tab; - } - else if ((flags & ImGuiInputTextFlags_CallbackHistory) != 0 && IsKeyPressedMap(ImGuiKey_UpArrow)) - { - event_flag = ImGuiInputTextFlags_CallbackHistory; - event_key = ImGuiKey_UpArrow; - } - else if ((flags & ImGuiInputTextFlags_CallbackHistory) != 0 && IsKeyPressedMap(ImGuiKey_DownArrow)) - { - event_flag = ImGuiInputTextFlags_CallbackHistory; - event_key = ImGuiKey_DownArrow; - } - else if (flags & ImGuiInputTextFlags_CallbackAlways) - event_flag = ImGuiInputTextFlags_CallbackAlways; - - if (event_flag) - { - ImGuiInputTextCallbackData callback_data; - memset(&callback_data, 0, sizeof(ImGuiInputTextCallbackData)); - callback_data.EventFlag = event_flag; - callback_data.Flags = flags; - callback_data.UserData = callback_user_data; - - callback_data.EventKey = event_key; - callback_data.Buf = state->TextA.Data; - callback_data.BufTextLen = state->CurLenA; - callback_data.BufSize = state->BufCapacityA; - callback_data.BufDirty = false; - - // We have to convert from wchar-positions to UTF-8-positions, which can be pretty slow (an incentive to ditch the ImWchar buffer, see https://github.com/nothings/stb/issues/188) - ImWchar* text = state->TextW.Data; - const int utf8_cursor_pos = callback_data.CursorPos = ImTextCountUtf8BytesFromStr(text, text + state->Stb.cursor); - const int utf8_selection_start = callback_data.SelectionStart = ImTextCountUtf8BytesFromStr(text, text + state->Stb.select_start); - const int utf8_selection_end = callback_data.SelectionEnd = ImTextCountUtf8BytesFromStr(text, text + state->Stb.select_end); - - // Call user code - callback(&callback_data); - - // Read back what user may have modified - IM_ASSERT(callback_data.Buf == state->TextA.Data); // Invalid to modify those fields - IM_ASSERT(callback_data.BufSize == state->BufCapacityA); - IM_ASSERT(callback_data.Flags == flags); - if (callback_data.CursorPos != utf8_cursor_pos) { state->Stb.cursor = ImTextCountCharsFromUtf8(callback_data.Buf, callback_data.Buf + callback_data.CursorPos); state->CursorFollow = true; } - if (callback_data.SelectionStart != utf8_selection_start) { state->Stb.select_start = ImTextCountCharsFromUtf8(callback_data.Buf, callback_data.Buf + callback_data.SelectionStart); } - if (callback_data.SelectionEnd != utf8_selection_end) { state->Stb.select_end = ImTextCountCharsFromUtf8(callback_data.Buf, callback_data.Buf + callback_data.SelectionEnd); } - if (callback_data.BufDirty) - { - IM_ASSERT(callback_data.BufTextLen == (int)strlen(callback_data.Buf)); // You need to maintain BufTextLen if you change the text! - if (callback_data.BufTextLen > backup_current_text_length && is_resizable) - state->TextW.resize(state->TextW.Size + (callback_data.BufTextLen - backup_current_text_length)); - state->CurLenW = ImTextStrFromUtf8(state->TextW.Data, state->TextW.Size, callback_data.Buf, NULL); - state->CurLenA = callback_data.BufTextLen; // Assume correct length and valid UTF-8 from user, saves us an extra strlen() - state->CursorAnimReset(); - } - } - } - - // Will copy result string if modified - if (!is_readonly && strcmp(state->TextA.Data, buf) != 0) - { - apply_new_text = state->TextA.Data; - apply_new_text_length = state->CurLenA; - } - } - - // Copy result to user buffer - if (apply_new_text) - { - // We cannot test for 'backup_current_text_length != apply_new_text_length' here because we have no guarantee that the size - // of our owned buffer matches the size of the string object held by the user, and by design we allow InputText() to be used - // without any storage on user's side. - IM_ASSERT(apply_new_text_length >= 0); - if (is_resizable) - { - ImGuiInputTextCallbackData callback_data; - callback_data.EventFlag = ImGuiInputTextFlags_CallbackResize; - callback_data.Flags = flags; - callback_data.Buf = buf; - callback_data.BufTextLen = apply_new_text_length; - callback_data.BufSize = ImMax(buf_size, apply_new_text_length + 1); - callback_data.UserData = callback_user_data; - callback(&callback_data); - buf = callback_data.Buf; - buf_size = callback_data.BufSize; - apply_new_text_length = ImMin(callback_data.BufTextLen, buf_size - 1); - IM_ASSERT(apply_new_text_length <= buf_size); - } - //IMGUI_DEBUG_LOG("InputText(\"%s\"): apply_new_text length %d\n", label, apply_new_text_length); - - // If the underlying buffer resize was denied or not carried to the next frame, apply_new_text_length+1 may be >= buf_size. - ImStrncpy(buf, apply_new_text, ImMin(apply_new_text_length + 1, buf_size)); - value_changed = true; - } - - // Clear temporary user storage - state->UserFlags = 0; - state->UserCallback = NULL; - state->UserCallbackData = NULL; - } - - // Release active ID at the end of the function (so e.g. pressing Return still does a final application of the value) - if (clear_active_id && g.ActiveId == id) - ClearActiveID(); - - // Render frame - if (!is_multiline) - { - RenderNavHighlight(frame_bb, id); - RenderFrame(frame_bb.Min, frame_bb.Max, GetColorU32(ImGuiCol_FrameBg), true, style.FrameRounding); - } - - const ImVec4 clip_rect(frame_bb.Min.x, frame_bb.Min.y, frame_bb.Min.x + inner_size.x, frame_bb.Min.y + inner_size.y); // Not using frame_bb.Max because we have adjusted size - ImVec2 draw_pos = is_multiline ? draw_window->DC.CursorPos : frame_bb.Min + style.FramePadding; - ImVec2 text_size(0.0f, 0.0f); - - // Set upper limit of single-line InputTextEx() at 2 million characters strings. The current pathological worst case is a long line - // without any carriage return, which would makes ImFont::RenderText() reserve too many vertices and probably crash. Avoid it altogether. - // Note that we only use this limit on single-line InputText(), so a pathologically large line on a InputTextMultiline() would still crash. - const int buf_display_max_length = 2 * 1024 * 1024; - const char* buf_display = buf_display_from_state ? state->TextA.Data : buf; //-V595 - const char* buf_display_end = NULL; // We have specialized paths below for setting the length - if (is_displaying_hint) - { - buf_display = hint; - buf_display_end = hint + strlen(hint); - } - - // Render text. We currently only render selection when the widget is active or while scrolling. - // FIXME: We could remove the '&& render_cursor' to keep rendering selection when inactive. - if (render_cursor || render_selection) - { - IM_ASSERT(state != NULL); - if (!is_displaying_hint) - buf_display_end = buf_display + state->CurLenA; - - // Render text (with cursor and selection) - // This is going to be messy. We need to: - // - Display the text (this alone can be more easily clipped) - // - Handle scrolling, highlight selection, display cursor (those all requires some form of 1d->2d cursor position calculation) - // - Measure text height (for scrollbar) - // We are attempting to do most of that in **one main pass** to minimize the computation cost (non-negligible for large amount of text) + 2nd pass for selection rendering (we could merge them by an extra refactoring effort) - // FIXME: This should occur on buf_display but we'd need to maintain cursor/select_start/select_end for UTF-8. - const ImWchar* text_begin = state->TextW.Data; - ImVec2 cursor_offset, select_start_offset; - - { - // Find lines numbers straddling 'cursor' (slot 0) and 'select_start' (slot 1) positions. - const ImWchar* searches_input_ptr[2] = { NULL, NULL }; - int searches_result_line_no[2] = { -1000, -1000 }; - int searches_remaining = 0; - if (render_cursor) - { - searches_input_ptr[0] = text_begin + state->Stb.cursor; - searches_result_line_no[0] = -1; - searches_remaining++; - } - if (render_selection) - { - searches_input_ptr[1] = text_begin + ImMin(state->Stb.select_start, state->Stb.select_end); - searches_result_line_no[1] = -1; - searches_remaining++; - } - - // Iterate all lines to find our line numbers - // In multi-line mode, we never exit the loop until all lines are counted, so add one extra to the searches_remaining counter. - searches_remaining += is_multiline ? 1 : 0; - int line_count = 0; - //for (const ImWchar* s = text_begin; (s = (const ImWchar*)wcschr((const wchar_t*)s, (wchar_t)'\n')) != NULL; s++) // FIXME-OPT: Could use this when wchar_t are 16-bit - for (const ImWchar* s = text_begin; *s != 0; s++) - if (*s == '\n') - { - line_count++; - if (searches_result_line_no[0] == -1 && s >= searches_input_ptr[0]) { searches_result_line_no[0] = line_count; if (--searches_remaining <= 0) break; } - if (searches_result_line_no[1] == -1 && s >= searches_input_ptr[1]) { searches_result_line_no[1] = line_count; if (--searches_remaining <= 0) break; } - } - line_count++; - if (searches_result_line_no[0] == -1) - searches_result_line_no[0] = line_count; - if (searches_result_line_no[1] == -1) - searches_result_line_no[1] = line_count; - - // Calculate 2d position by finding the beginning of the line and measuring distance - cursor_offset.x = InputTextCalcTextSizeW(ImStrbolW(searches_input_ptr[0], text_begin), searches_input_ptr[0]).x; - cursor_offset.y = searches_result_line_no[0] * g.FontSize; - if (searches_result_line_no[1] >= 0) - { - select_start_offset.x = InputTextCalcTextSizeW(ImStrbolW(searches_input_ptr[1], text_begin), searches_input_ptr[1]).x; - select_start_offset.y = searches_result_line_no[1] * g.FontSize; - } - - // Store text height (note that we haven't calculated text width at all, see GitHub issues #383, #1224) - if (is_multiline) - text_size = ImVec2(inner_size.x, line_count * g.FontSize); - } - - // Scroll - if (render_cursor && state->CursorFollow) - { - // Horizontal scroll in chunks of quarter width - if (!(flags & ImGuiInputTextFlags_NoHorizontalScroll)) - { - const float scroll_increment_x = inner_size.x * 0.25f; - if (cursor_offset.x < state->ScrollX) - state->ScrollX = IM_FLOOR(ImMax(0.0f, cursor_offset.x - scroll_increment_x)); - else if (cursor_offset.x - inner_size.x >= state->ScrollX) - state->ScrollX = IM_FLOOR(cursor_offset.x - inner_size.x + scroll_increment_x); - } - else - { - state->ScrollX = 0.0f; - } - - // Vertical scroll - if (is_multiline) - { - float scroll_y = draw_window->Scroll.y; - if (cursor_offset.y - g.FontSize < scroll_y) - scroll_y = ImMax(0.0f, cursor_offset.y - g.FontSize); - else if (cursor_offset.y - inner_size.y >= scroll_y) - scroll_y = cursor_offset.y - inner_size.y; - draw_pos.y += (draw_window->Scroll.y - scroll_y); // Manipulate cursor pos immediately avoid a frame of lag - draw_window->Scroll.y = scroll_y; - } - - state->CursorFollow = false; - } - - // Draw selection - const ImVec2 draw_scroll = ImVec2(state->ScrollX, 0.0f); - if (render_selection) - { - const ImWchar* text_selected_begin = text_begin + ImMin(state->Stb.select_start, state->Stb.select_end); - const ImWchar* text_selected_end = text_begin + ImMax(state->Stb.select_start, state->Stb.select_end); - - ImU32 bg_color = GetColorU32(ImGuiCol_TextSelectedBg, render_cursor ? 1.0f : 0.6f); // FIXME: current code flow mandate that render_cursor is always true here, we are leaving the transparent one for tests. - float bg_offy_up = is_multiline ? 0.0f : -1.0f; // FIXME: those offsets should be part of the style? they don't play so well with multi-line selection. - float bg_offy_dn = is_multiline ? 0.0f : 2.0f; - ImVec2 rect_pos = draw_pos + select_start_offset - draw_scroll; - for (const ImWchar* p = text_selected_begin; p < text_selected_end; ) - { - if (rect_pos.y > clip_rect.w + g.FontSize) - break; - if (rect_pos.y < clip_rect.y) - { - //p = (const ImWchar*)wmemchr((const wchar_t*)p, '\n', text_selected_end - p); // FIXME-OPT: Could use this when wchar_t are 16-bit - //p = p ? p + 1 : text_selected_end; - while (p < text_selected_end) - if (*p++ == '\n') - break; - } - else - { - ImVec2 rect_size = InputTextCalcTextSizeW(p, text_selected_end, &p, NULL, true); - if (rect_size.x <= 0.0f) rect_size.x = IM_FLOOR(g.Font->GetCharAdvance((ImWchar)' ') * 0.50f); // So we can see selected empty lines - ImRect rect(rect_pos + ImVec2(0.0f, bg_offy_up - g.FontSize), rect_pos +ImVec2(rect_size.x, bg_offy_dn)); - rect.ClipWith(clip_rect); - if (rect.Overlaps(clip_rect)) - draw_window->DrawList->AddRectFilled(rect.Min, rect.Max, bg_color); - } - rect_pos.x = draw_pos.x - draw_scroll.x; - rect_pos.y += g.FontSize; - } - } - - // We test for 'buf_display_max_length' as a way to avoid some pathological cases (e.g. single-line 1 MB string) which would make ImDrawList crash. - if (is_multiline || (buf_display_end - buf_display) < buf_display_max_length) - { - ImU32 col = GetColorU32(is_displaying_hint ? ImGuiCol_TextDisabled : ImGuiCol_Text); - draw_window->DrawList->AddText(g.Font, g.FontSize, draw_pos - draw_scroll, col, buf_display, buf_display_end, 0.0f, is_multiline ? NULL : &clip_rect); - } - - // Draw blinking cursor - if (render_cursor) - { - state->CursorAnim += io.DeltaTime; - bool cursor_is_visible = (!g.IO.ConfigInputTextCursorBlink) || (state->CursorAnim <= 0.0f) || ImFmod(state->CursorAnim, 1.20f) <= 0.80f; - ImVec2 cursor_screen_pos = draw_pos + cursor_offset - draw_scroll; - ImRect cursor_screen_rect(cursor_screen_pos.x, cursor_screen_pos.y - g.FontSize + 0.5f, cursor_screen_pos.x + 1.0f, cursor_screen_pos.y - 1.5f); - if (cursor_is_visible && cursor_screen_rect.Overlaps(clip_rect)) - draw_window->DrawList->AddLine(cursor_screen_rect.Min, cursor_screen_rect.GetBL(), GetColorU32(ImGuiCol_Text)); - - // Notify OS of text input position for advanced IME (-1 x offset so that Windows IME can cover our cursor. Bit of an extra nicety.) - if (!is_readonly) - g.PlatformImePos = ImVec2(cursor_screen_pos.x - 1.0f, cursor_screen_pos.y - g.FontSize); - } - } - else - { - // Render text only (no selection, no cursor) - if (is_multiline) - text_size = ImVec2(inner_size.x, InputTextCalcTextLenAndLineCount(buf_display, &buf_display_end) * g.FontSize); // We don't need width - else if (!is_displaying_hint && g.ActiveId == id) - buf_display_end = buf_display + state->CurLenA; - else if (!is_displaying_hint) - buf_display_end = buf_display + strlen(buf_display); - - if (is_multiline || (buf_display_end - buf_display) < buf_display_max_length) - { - ImU32 col = GetColorU32(is_displaying_hint ? ImGuiCol_TextDisabled : ImGuiCol_Text); - draw_window->DrawList->AddText(g.Font, g.FontSize, draw_pos, col, buf_display, buf_display_end, 0.0f, is_multiline ? NULL : &clip_rect); - } - } - - if (is_multiline) - { - Dummy(text_size + ImVec2(0.0f, g.FontSize)); // Always add room to scroll an extra line - EndChild(); - EndGroup(); - } - - if (is_password && !is_displaying_hint) - PopFont(); - - // Log as text - if (g.LogEnabled && !(is_password && !is_displaying_hint)) - LogRenderedText(&draw_pos, buf_display, buf_display_end); - - if (label_size.x > 0) - RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label); - - if (value_changed && !(flags & ImGuiInputTextFlags_NoMarkEdited)) - MarkItemEdited(id); - - IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags); - if ((flags & ImGuiInputTextFlags_EnterReturnsTrue) != 0) - return enter_pressed; - else - return value_changed; -} - -//------------------------------------------------------------------------- -// [SECTION] Widgets: ColorEdit, ColorPicker, ColorButton, etc. -//------------------------------------------------------------------------- -// - ColorEdit3() -// - ColorEdit4() -// - ColorPicker3() -// - RenderColorRectWithAlphaCheckerboard() [Internal] -// - ColorPicker4() -// - ColorButton() -// - SetColorEditOptions() -// - ColorTooltip() [Internal] -// - ColorEditOptionsPopup() [Internal] -// - ColorPickerOptionsPopup() [Internal] -//------------------------------------------------------------------------- - -bool ImGui::ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags) -{ - return ColorEdit4(label, col, flags | ImGuiColorEditFlags_NoAlpha); -} - -// Edit colors components (each component in 0.0f..1.0f range). -// See enum ImGuiColorEditFlags_ for available options. e.g. Only access 3 floats if ImGuiColorEditFlags_NoAlpha flag is set. -// With typical options: Left-click on colored square to open color picker. Right-click to open option menu. CTRL-Click over input fields to edit them and TAB to go to next item. -bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - - ImGuiContext& g = *GImGui; - const ImGuiStyle& style = g.Style; - const float square_sz = GetFrameHeight(); - const float w_full = CalcItemWidth(); - const float w_button = (flags & ImGuiColorEditFlags_NoSmallPreview) ? 0.0f : (square_sz + style.ItemInnerSpacing.x); - const float w_inputs = w_full - w_button; - const char* label_display_end = FindRenderedTextEnd(label); - g.NextItemData.ClearFlags(); - - BeginGroup(); - PushID(label); - - // If we're not showing any slider there's no point in doing any HSV conversions - const ImGuiColorEditFlags flags_untouched = flags; - if (flags & ImGuiColorEditFlags_NoInputs) - flags = (flags & (~ImGuiColorEditFlags__DisplayMask)) | ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_NoOptions; - - // Context menu: display and modify options (before defaults are applied) - if (!(flags & ImGuiColorEditFlags_NoOptions)) - ColorEditOptionsPopup(col, flags); - - // Read stored options - if (!(flags & ImGuiColorEditFlags__DisplayMask)) - flags |= (g.ColorEditOptions & ImGuiColorEditFlags__DisplayMask); - if (!(flags & ImGuiColorEditFlags__DataTypeMask)) - flags |= (g.ColorEditOptions & ImGuiColorEditFlags__DataTypeMask); - if (!(flags & ImGuiColorEditFlags__PickerMask)) - flags |= (g.ColorEditOptions & ImGuiColorEditFlags__PickerMask); - if (!(flags & ImGuiColorEditFlags__InputMask)) - flags |= (g.ColorEditOptions & ImGuiColorEditFlags__InputMask); - flags |= (g.ColorEditOptions & ~(ImGuiColorEditFlags__DisplayMask | ImGuiColorEditFlags__DataTypeMask | ImGuiColorEditFlags__PickerMask | ImGuiColorEditFlags__InputMask)); - IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__DisplayMask)); // Check that only 1 is selected - IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__InputMask)); // Check that only 1 is selected - - const bool alpha = (flags & ImGuiColorEditFlags_NoAlpha) == 0; - const bool hdr = (flags & ImGuiColorEditFlags_HDR) != 0; - const int components = alpha ? 4 : 3; - - // Convert to the formats we need - float f[4] = { col[0], col[1], col[2], alpha ? col[3] : 1.0f }; - if ((flags & ImGuiColorEditFlags_InputHSV) && (flags & ImGuiColorEditFlags_DisplayRGB)) - ColorConvertHSVtoRGB(f[0], f[1], f[2], f[0], f[1], f[2]); - else if ((flags & ImGuiColorEditFlags_InputRGB) && (flags & ImGuiColorEditFlags_DisplayHSV)) - { - // Hue is lost when converting from greyscale rgb (saturation=0). Restore it. - ColorConvertRGBtoHSV(f[0], f[1], f[2], f[0], f[1], f[2]); - if (memcmp(g.ColorEditLastColor, col, sizeof(float) * 3) == 0) - { - if (f[1] == 0) - f[0] = g.ColorEditLastHue; - if (f[2] == 0) - f[1] = g.ColorEditLastSat; - } - } - int i[4] = { IM_F32_TO_INT8_UNBOUND(f[0]), IM_F32_TO_INT8_UNBOUND(f[1]), IM_F32_TO_INT8_UNBOUND(f[2]), IM_F32_TO_INT8_UNBOUND(f[3]) }; - - bool value_changed = false; - bool value_changed_as_float = false; - - const ImVec2 pos = window->DC.CursorPos; - const float inputs_offset_x = (style.ColorButtonPosition == ImGuiDir_Left) ? w_button : 0.0f; - window->DC.CursorPos.x = pos.x + inputs_offset_x; - - if ((flags & (ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_DisplayHSV)) != 0 && (flags & ImGuiColorEditFlags_NoInputs) == 0) - { - // RGB/HSV 0..255 Sliders - const float w_item_one = ImMax(1.0f, IM_FLOOR((w_inputs - (style.ItemInnerSpacing.x) * (components-1)) / (float)components)); - const float w_item_last = ImMax(1.0f, IM_FLOOR(w_inputs - (w_item_one + style.ItemInnerSpacing.x) * (components-1))); - - const bool hide_prefix = (w_item_one <= CalcTextSize((flags & ImGuiColorEditFlags_Float) ? "M:0.000" : "M:000").x); - static const char* ids[4] = { "##X", "##Y", "##Z", "##W" }; - static const char* fmt_table_int[3][4] = - { - { "%3d", "%3d", "%3d", "%3d" }, // Short display - { "R:%3d", "G:%3d", "B:%3d", "A:%3d" }, // Long display for RGBA - { "H:%3d", "S:%3d", "V:%3d", "A:%3d" } // Long display for HSVA - }; - static const char* fmt_table_float[3][4] = - { - { "%0.3f", "%0.3f", "%0.3f", "%0.3f" }, // Short display - { "R:%0.3f", "G:%0.3f", "B:%0.3f", "A:%0.3f" }, // Long display for RGBA - { "H:%0.3f", "S:%0.3f", "V:%0.3f", "A:%0.3f" } // Long display for HSVA - }; - const int fmt_idx = hide_prefix ? 0 : (flags & ImGuiColorEditFlags_DisplayHSV) ? 2 : 1; - - for (int n = 0; n < components; n++) - { - if (n > 0) - SameLine(0, style.ItemInnerSpacing.x); - SetNextItemWidth((n + 1 < components) ? w_item_one : w_item_last); - - // FIXME: When ImGuiColorEditFlags_HDR flag is passed HS values snap in weird ways when SV values go below 0. - if (flags & ImGuiColorEditFlags_Float) - { - value_changed |= DragFloat(ids[n], &f[n], 1.0f/255.0f, 0.0f, hdr ? 0.0f : 1.0f, fmt_table_float[fmt_idx][n]); - value_changed_as_float |= value_changed; - } - else - { - value_changed |= DragInt(ids[n], &i[n], 1.0f, 0, hdr ? 0 : 255, fmt_table_int[fmt_idx][n]); - } - if (!(flags & ImGuiColorEditFlags_NoOptions)) - OpenPopupOnItemClick("context"); - } - } - else if ((flags & ImGuiColorEditFlags_DisplayHex) != 0 && (flags & ImGuiColorEditFlags_NoInputs) == 0) - { - // RGB Hexadecimal Input - char buf[64]; - if (alpha) - ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X%02X", ImClamp(i[0],0,255), ImClamp(i[1],0,255), ImClamp(i[2],0,255), ImClamp(i[3],0,255)); - else - ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X", ImClamp(i[0],0,255), ImClamp(i[1],0,255), ImClamp(i[2],0,255)); - SetNextItemWidth(w_inputs); - if (InputText("##Text", buf, IM_ARRAYSIZE(buf), ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase)) - { - value_changed = true; - char* p = buf; - while (*p == '#' || ImCharIsBlankA(*p)) - p++; - i[0] = i[1] = i[2] = i[3] = 0; - if (alpha) - sscanf(p, "%02X%02X%02X%02X", (unsigned int*)&i[0], (unsigned int*)&i[1], (unsigned int*)&i[2], (unsigned int*)&i[3]); // Treat at unsigned (%X is unsigned) - else - sscanf(p, "%02X%02X%02X", (unsigned int*)&i[0], (unsigned int*)&i[1], (unsigned int*)&i[2]); - } - if (!(flags & ImGuiColorEditFlags_NoOptions)) - OpenPopupOnItemClick("context"); - } - - ImGuiWindow* picker_active_window = NULL; - if (!(flags & ImGuiColorEditFlags_NoSmallPreview)) - { - const float button_offset_x = ((flags & ImGuiColorEditFlags_NoInputs) || (style.ColorButtonPosition == ImGuiDir_Left)) ? 0.0f : w_inputs + style.ItemInnerSpacing.x; - window->DC.CursorPos = ImVec2(pos.x + button_offset_x, pos.y); - - const ImVec4 col_v4(col[0], col[1], col[2], alpha ? col[3] : 1.0f); - if (ColorButton("##ColorButton", col_v4, flags)) - { - if (!(flags & ImGuiColorEditFlags_NoPicker)) - { - // Store current color and open a picker - g.ColorPickerRef = col_v4; - OpenPopup("picker"); - SetNextWindowPos(window->DC.LastItemRect.GetBL() + ImVec2(-1,style.ItemSpacing.y)); - } - } - if (!(flags & ImGuiColorEditFlags_NoOptions)) - OpenPopupOnItemClick("context"); - - if (BeginPopup("picker")) - { - picker_active_window = g.CurrentWindow; - if (label != label_display_end) - { - TextEx(label, label_display_end); - Spacing(); - } - ImGuiColorEditFlags picker_flags_to_forward = ImGuiColorEditFlags__DataTypeMask | ImGuiColorEditFlags__PickerMask | ImGuiColorEditFlags__InputMask | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaBar; - ImGuiColorEditFlags picker_flags = (flags_untouched & picker_flags_to_forward) | ImGuiColorEditFlags__DisplayMask | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_AlphaPreviewHalf; - SetNextItemWidth(square_sz * 12.0f); // Use 256 + bar sizes? - value_changed |= ColorPicker4("##picker", col, picker_flags, &g.ColorPickerRef.x); - EndPopup(); - } - } - - if (label != label_display_end && !(flags & ImGuiColorEditFlags_NoLabel)) - { - const float text_offset_x = (flags & ImGuiColorEditFlags_NoInputs) ? w_button : w_full + style.ItemInnerSpacing.x; - window->DC.CursorPos = ImVec2(pos.x + text_offset_x, pos.y + style.FramePadding.y); - TextEx(label, label_display_end); - } - - // Convert back - if (value_changed && picker_active_window == NULL) - { - if (!value_changed_as_float) - for (int n = 0; n < 4; n++) - f[n] = i[n] / 255.0f; - if ((flags & ImGuiColorEditFlags_DisplayHSV) && (flags & ImGuiColorEditFlags_InputRGB)) - { - g.ColorEditLastHue = f[0]; - g.ColorEditLastSat = f[1]; - ColorConvertHSVtoRGB(f[0], f[1], f[2], f[0], f[1], f[2]); - memcpy(g.ColorEditLastColor, f, sizeof(float) * 3); - } - if ((flags & ImGuiColorEditFlags_DisplayRGB) && (flags & ImGuiColorEditFlags_InputHSV)) - ColorConvertRGBtoHSV(f[0], f[1], f[2], f[0], f[1], f[2]); - - col[0] = f[0]; - col[1] = f[1]; - col[2] = f[2]; - if (alpha) - col[3] = f[3]; - } - - PopID(); - EndGroup(); - - // Drag and Drop Target - // NB: The flag test is merely an optional micro-optimization, BeginDragDropTarget() does the same test. - if ((window->DC.LastItemStatusFlags & ImGuiItemStatusFlags_HoveredRect) && !(flags & ImGuiColorEditFlags_NoDragDrop) && BeginDragDropTarget()) - { - bool accepted_drag_drop = false; - if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F)) - { - memcpy((float*)col, payload->Data, sizeof(float) * 3); // Preserve alpha if any //-V512 - value_changed = accepted_drag_drop = true; - } - if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F)) - { - memcpy((float*)col, payload->Data, sizeof(float) * components); - value_changed = accepted_drag_drop = true; - } - - // Drag-drop payloads are always RGB - if (accepted_drag_drop && (flags & ImGuiColorEditFlags_InputHSV)) - ColorConvertRGBtoHSV(col[0], col[1], col[2], col[0], col[1], col[2]); - EndDragDropTarget(); - } - - // When picker is being actively used, use its active id so IsItemActive() will function on ColorEdit4(). - if (picker_active_window && g.ActiveId != 0 && g.ActiveIdWindow == picker_active_window) - window->DC.LastItemId = g.ActiveId; - - if (value_changed) - MarkItemEdited(window->DC.LastItemId); - - return value_changed; -} - -bool ImGui::ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags) -{ - float col4[4] = { col[0], col[1], col[2], 1.0f }; - if (!ColorPicker4(label, col4, flags | ImGuiColorEditFlags_NoAlpha)) - return false; - col[0] = col4[0]; col[1] = col4[1]; col[2] = col4[2]; - return true; -} - -// Helper for ColorPicker4() -static void RenderArrowsForVerticalBar(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, float bar_w, float alpha) -{ - ImU32 alpha8 = IM_F32_TO_INT8_SAT(alpha); - ImGui::RenderArrowPointingAt(draw_list, ImVec2(pos.x + half_sz.x + 1, pos.y), ImVec2(half_sz.x + 2, half_sz.y + 1), ImGuiDir_Right, IM_COL32(0,0,0,alpha8)); - ImGui::RenderArrowPointingAt(draw_list, ImVec2(pos.x + half_sz.x, pos.y), half_sz, ImGuiDir_Right, IM_COL32(255,255,255,alpha8)); - ImGui::RenderArrowPointingAt(draw_list, ImVec2(pos.x + bar_w - half_sz.x - 1, pos.y), ImVec2(half_sz.x + 2, half_sz.y + 1), ImGuiDir_Left, IM_COL32(0,0,0,alpha8)); - ImGui::RenderArrowPointingAt(draw_list, ImVec2(pos.x + bar_w - half_sz.x, pos.y), half_sz, ImGuiDir_Left, IM_COL32(255,255,255,alpha8)); -} - -// Note: ColorPicker4() only accesses 3 floats if ImGuiColorEditFlags_NoAlpha flag is set. -// (In C++ the 'float col[4]' notation for a function argument is equivalent to 'float* col', we only specify a size to facilitate understanding of the code.) -// FIXME: we adjust the big color square height based on item width, which may cause a flickering feedback loop (if automatic height makes a vertical scrollbar appears, affecting automatic width..) -// FIXME: this is trying to be aware of style.Alpha but not fully correct. Also, the color wheel will have overlapping glitches with (style.Alpha < 1.0) -bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags, const float* ref_col) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - - ImDrawList* draw_list = window->DrawList; - ImGuiStyle& style = g.Style; - ImGuiIO& io = g.IO; - - const float width = CalcItemWidth(); - g.NextItemData.ClearFlags(); - - PushID(label); - BeginGroup(); - - if (!(flags & ImGuiColorEditFlags_NoSidePreview)) - flags |= ImGuiColorEditFlags_NoSmallPreview; - - // Context menu: display and store options. - if (!(flags & ImGuiColorEditFlags_NoOptions)) - ColorPickerOptionsPopup(col, flags); - - // Read stored options - if (!(flags & ImGuiColorEditFlags__PickerMask)) - flags |= ((g.ColorEditOptions & ImGuiColorEditFlags__PickerMask) ? g.ColorEditOptions : ImGuiColorEditFlags__OptionsDefault) & ImGuiColorEditFlags__PickerMask; - if (!(flags & ImGuiColorEditFlags__InputMask)) - flags |= ((g.ColorEditOptions & ImGuiColorEditFlags__InputMask) ? g.ColorEditOptions : ImGuiColorEditFlags__OptionsDefault) & ImGuiColorEditFlags__InputMask; - IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__PickerMask)); // Check that only 1 is selected - IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__InputMask)); // Check that only 1 is selected - if (!(flags & ImGuiColorEditFlags_NoOptions)) - flags |= (g.ColorEditOptions & ImGuiColorEditFlags_AlphaBar); - - // Setup - int components = (flags & ImGuiColorEditFlags_NoAlpha) ? 3 : 4; - bool alpha_bar = (flags & ImGuiColorEditFlags_AlphaBar) && !(flags & ImGuiColorEditFlags_NoAlpha); - ImVec2 picker_pos = window->DC.CursorPos; - float square_sz = GetFrameHeight(); - float bars_width = square_sz; // Arbitrary smallish width of Hue/Alpha picking bars - float sv_picker_size = ImMax(bars_width * 1, width - (alpha_bar ? 2 : 1) * (bars_width + style.ItemInnerSpacing.x)); // Saturation/Value picking box - float bar0_pos_x = picker_pos.x + sv_picker_size + style.ItemInnerSpacing.x; - float bar1_pos_x = bar0_pos_x + bars_width + style.ItemInnerSpacing.x; - float bars_triangles_half_sz = IM_FLOOR(bars_width * 0.20f); - - float backup_initial_col[4]; - memcpy(backup_initial_col, col, components * sizeof(float)); - - float wheel_thickness = sv_picker_size * 0.08f; - float wheel_r_outer = sv_picker_size * 0.50f; - float wheel_r_inner = wheel_r_outer - wheel_thickness; - ImVec2 wheel_center(picker_pos.x + (sv_picker_size + bars_width)*0.5f, picker_pos.y + sv_picker_size*0.5f); - - // Note: the triangle is displayed rotated with triangle_pa pointing to Hue, but most coordinates stays unrotated for logic. - float triangle_r = wheel_r_inner - (int)(sv_picker_size * 0.027f); - ImVec2 triangle_pa = ImVec2(triangle_r, 0.0f); // Hue point. - ImVec2 triangle_pb = ImVec2(triangle_r * -0.5f, triangle_r * -0.866025f); // Black point. - ImVec2 triangle_pc = ImVec2(triangle_r * -0.5f, triangle_r * +0.866025f); // White point. - - float H = col[0], S = col[1], V = col[2]; - float R = col[0], G = col[1], B = col[2]; - if (flags & ImGuiColorEditFlags_InputRGB) - { - // Hue is lost when converting from greyscale rgb (saturation=0). Restore it. - ColorConvertRGBtoHSV(R, G, B, H, S, V); - if (memcmp(g.ColorEditLastColor, col, sizeof(float) * 3) == 0) - { - if (S == 0) - H = g.ColorEditLastHue; - if (V == 0) - S = g.ColorEditLastSat; - } - } - else if (flags & ImGuiColorEditFlags_InputHSV) - { - ColorConvertHSVtoRGB(H, S, V, R, G, B); - } - - bool value_changed = false, value_changed_h = false, value_changed_sv = false; - - PushItemFlag(ImGuiItemFlags_NoNav, true); - if (flags & ImGuiColorEditFlags_PickerHueWheel) - { - // Hue wheel + SV triangle logic - InvisibleButton("hsv", ImVec2(sv_picker_size + style.ItemInnerSpacing.x + bars_width, sv_picker_size)); - if (IsItemActive()) - { - ImVec2 initial_off = g.IO.MouseClickedPos[0] - wheel_center; - ImVec2 current_off = g.IO.MousePos - wheel_center; - float initial_dist2 = ImLengthSqr(initial_off); - if (initial_dist2 >= (wheel_r_inner-1)*(wheel_r_inner-1) && initial_dist2 <= (wheel_r_outer+1)*(wheel_r_outer+1)) - { - // Interactive with Hue wheel - H = ImAtan2(current_off.y, current_off.x) / IM_PI*0.5f; - if (H < 0.0f) - H += 1.0f; - value_changed = value_changed_h = true; - } - float cos_hue_angle = ImCos(-H * 2.0f * IM_PI); - float sin_hue_angle = ImSin(-H * 2.0f * IM_PI); - if (ImTriangleContainsPoint(triangle_pa, triangle_pb, triangle_pc, ImRotate(initial_off, cos_hue_angle, sin_hue_angle))) - { - // Interacting with SV triangle - ImVec2 current_off_unrotated = ImRotate(current_off, cos_hue_angle, sin_hue_angle); - if (!ImTriangleContainsPoint(triangle_pa, triangle_pb, triangle_pc, current_off_unrotated)) - current_off_unrotated = ImTriangleClosestPoint(triangle_pa, triangle_pb, triangle_pc, current_off_unrotated); - float uu, vv, ww; - ImTriangleBarycentricCoords(triangle_pa, triangle_pb, triangle_pc, current_off_unrotated, uu, vv, ww); - V = ImClamp(1.0f - vv, 0.0001f, 1.0f); - S = ImClamp(uu / V, 0.0001f, 1.0f); - value_changed = value_changed_sv = true; - } - } - if (!(flags & ImGuiColorEditFlags_NoOptions)) - OpenPopupOnItemClick("context"); - } - else if (flags & ImGuiColorEditFlags_PickerHueBar) - { - // SV rectangle logic - InvisibleButton("sv", ImVec2(sv_picker_size, sv_picker_size)); - if (IsItemActive()) - { - S = ImSaturate((io.MousePos.x - picker_pos.x) / (sv_picker_size-1)); - V = 1.0f - ImSaturate((io.MousePos.y - picker_pos.y) / (sv_picker_size-1)); - value_changed = value_changed_sv = true; - } - if (!(flags & ImGuiColorEditFlags_NoOptions)) - OpenPopupOnItemClick("context"); - - // Hue bar logic - SetCursorScreenPos(ImVec2(bar0_pos_x, picker_pos.y)); - InvisibleButton("hue", ImVec2(bars_width, sv_picker_size)); - if (IsItemActive()) - { - H = ImSaturate((io.MousePos.y - picker_pos.y) / (sv_picker_size-1)); - value_changed = value_changed_h = true; - } - } - - // Alpha bar logic - if (alpha_bar) - { - SetCursorScreenPos(ImVec2(bar1_pos_x, picker_pos.y)); - InvisibleButton("alpha", ImVec2(bars_width, sv_picker_size)); - if (IsItemActive()) - { - col[3] = 1.0f - ImSaturate((io.MousePos.y - picker_pos.y) / (sv_picker_size-1)); - value_changed = true; - } - } - PopItemFlag(); // ImGuiItemFlags_NoNav - - if (!(flags & ImGuiColorEditFlags_NoSidePreview)) - { - SameLine(0, style.ItemInnerSpacing.x); - BeginGroup(); - } - - if (!(flags & ImGuiColorEditFlags_NoLabel)) - { - const char* label_display_end = FindRenderedTextEnd(label); - if (label != label_display_end) - { - if ((flags & ImGuiColorEditFlags_NoSidePreview)) - SameLine(0, style.ItemInnerSpacing.x); - TextEx(label, label_display_end); - } - } - - if (!(flags & ImGuiColorEditFlags_NoSidePreview)) - { - PushItemFlag(ImGuiItemFlags_NoNavDefaultFocus, true); - ImVec4 col_v4(col[0], col[1], col[2], (flags & ImGuiColorEditFlags_NoAlpha) ? 1.0f : col[3]); - if ((flags & ImGuiColorEditFlags_NoLabel)) - Text("Current"); - - ImGuiColorEditFlags sub_flags_to_forward = ImGuiColorEditFlags__InputMask | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf | ImGuiColorEditFlags_NoTooltip; - ColorButton("##current", col_v4, (flags & sub_flags_to_forward), ImVec2(square_sz * 3, square_sz * 2)); - if (ref_col != NULL) - { - Text("Original"); - ImVec4 ref_col_v4(ref_col[0], ref_col[1], ref_col[2], (flags & ImGuiColorEditFlags_NoAlpha) ? 1.0f : ref_col[3]); - if (ColorButton("##original", ref_col_v4, (flags & sub_flags_to_forward), ImVec2(square_sz * 3, square_sz * 2))) - { - memcpy(col, ref_col, components * sizeof(float)); - value_changed = true; - } - } - PopItemFlag(); - EndGroup(); - } - - // Convert back color to RGB - if (value_changed_h || value_changed_sv) - { - if (flags & ImGuiColorEditFlags_InputRGB) - { - ColorConvertHSVtoRGB(H >= 1.0f ? H - 10 * 1e-6f : H, S > 0.0f ? S : 10*1e-6f, V > 0.0f ? V : 1e-6f, col[0], col[1], col[2]); - g.ColorEditLastHue = H; - g.ColorEditLastSat = S; - memcpy(g.ColorEditLastColor, col, sizeof(float) * 3); - } - else if (flags & ImGuiColorEditFlags_InputHSV) - { - col[0] = H; - col[1] = S; - col[2] = V; - } - } - - // R,G,B and H,S,V slider color editor - bool value_changed_fix_hue_wrap = false; - if ((flags & ImGuiColorEditFlags_NoInputs) == 0) - { - PushItemWidth((alpha_bar ? bar1_pos_x : bar0_pos_x) + bars_width - picker_pos.x); - ImGuiColorEditFlags sub_flags_to_forward = ImGuiColorEditFlags__DataTypeMask | ImGuiColorEditFlags__InputMask | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_NoOptions | ImGuiColorEditFlags_NoSmallPreview | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf; - ImGuiColorEditFlags sub_flags = (flags & sub_flags_to_forward) | ImGuiColorEditFlags_NoPicker; - if (flags & ImGuiColorEditFlags_DisplayRGB || (flags & ImGuiColorEditFlags__DisplayMask) == 0) - if (ColorEdit4("##rgb", col, sub_flags | ImGuiColorEditFlags_DisplayRGB)) - { - // FIXME: Hackily differenciating using the DragInt (ActiveId != 0 && !ActiveIdAllowOverlap) vs. using the InputText or DropTarget. - // For the later we don't want to run the hue-wrap canceling code. If you are well versed in HSV picker please provide your input! (See #2050) - value_changed_fix_hue_wrap = (g.ActiveId != 0 && !g.ActiveIdAllowOverlap); - value_changed = true; - } - if (flags & ImGuiColorEditFlags_DisplayHSV || (flags & ImGuiColorEditFlags__DisplayMask) == 0) - value_changed |= ColorEdit4("##hsv", col, sub_flags | ImGuiColorEditFlags_DisplayHSV); - if (flags & ImGuiColorEditFlags_DisplayHex || (flags & ImGuiColorEditFlags__DisplayMask) == 0) - value_changed |= ColorEdit4("##hex", col, sub_flags | ImGuiColorEditFlags_DisplayHex); - PopItemWidth(); - } - - // Try to cancel hue wrap (after ColorEdit4 call), if any - if (value_changed_fix_hue_wrap && (flags & ImGuiColorEditFlags_InputRGB)) - { - float new_H, new_S, new_V; - ColorConvertRGBtoHSV(col[0], col[1], col[2], new_H, new_S, new_V); - if (new_H <= 0 && H > 0) - { - if (new_V <= 0 && V != new_V) - ColorConvertHSVtoRGB(H, S, new_V <= 0 ? V * 0.5f : new_V, col[0], col[1], col[2]); - else if (new_S <= 0) - ColorConvertHSVtoRGB(H, new_S <= 0 ? S * 0.5f : new_S, new_V, col[0], col[1], col[2]); - } - } - - if (value_changed) - { - if (flags & ImGuiColorEditFlags_InputRGB) - { - R = col[0]; - G = col[1]; - B = col[2]; - ColorConvertRGBtoHSV(R, G, B, H, S, V); - if (memcmp(g.ColorEditLastColor, col, sizeof(float) * 3) == 0) // Fix local Hue as display below will use it immediately. - { - if (S == 0) - H = g.ColorEditLastHue; - if (V == 0) - S = g.ColorEditLastSat; - } - } - else if (flags & ImGuiColorEditFlags_InputHSV) - { - H = col[0]; - S = col[1]; - V = col[2]; - ColorConvertHSVtoRGB(H, S, V, R, G, B); - } - } - - const int style_alpha8 = IM_F32_TO_INT8_SAT(style.Alpha); - const ImU32 col_black = IM_COL32(0,0,0,style_alpha8); - const ImU32 col_white = IM_COL32(255,255,255,style_alpha8); - const ImU32 col_midgrey = IM_COL32(128,128,128,style_alpha8); - const ImU32 col_hues[6 + 1] = { IM_COL32(255,0,0,style_alpha8), IM_COL32(255,255,0,style_alpha8), IM_COL32(0,255,0,style_alpha8), IM_COL32(0,255,255,style_alpha8), IM_COL32(0,0,255,style_alpha8), IM_COL32(255,0,255,style_alpha8), IM_COL32(255,0,0,style_alpha8) }; - - ImVec4 hue_color_f(1, 1, 1, style.Alpha); ColorConvertHSVtoRGB(H, 1, 1, hue_color_f.x, hue_color_f.y, hue_color_f.z); - ImU32 hue_color32 = ColorConvertFloat4ToU32(hue_color_f); - ImU32 user_col32_striped_of_alpha = ColorConvertFloat4ToU32(ImVec4(R, G, B, style.Alpha)); // Important: this is still including the main rendering/style alpha!! - - ImVec2 sv_cursor_pos; - - if (flags & ImGuiColorEditFlags_PickerHueWheel) - { - // Render Hue Wheel - const float aeps = 0.5f / wheel_r_outer; // Half a pixel arc length in radians (2pi cancels out). - const int segment_per_arc = ImMax(4, (int)wheel_r_outer / 12); - for (int n = 0; n < 6; n++) - { - const float a0 = (n) /6.0f * 2.0f * IM_PI - aeps; - const float a1 = (n+1.0f)/6.0f * 2.0f * IM_PI + aeps; - const int vert_start_idx = draw_list->VtxBuffer.Size; - draw_list->PathArcTo(wheel_center, (wheel_r_inner + wheel_r_outer)*0.5f, a0, a1, segment_per_arc); - draw_list->PathStroke(col_white, false, wheel_thickness); - const int vert_end_idx = draw_list->VtxBuffer.Size; - - // Paint colors over existing vertices - ImVec2 gradient_p0(wheel_center.x + ImCos(a0) * wheel_r_inner, wheel_center.y + ImSin(a0) * wheel_r_inner); - ImVec2 gradient_p1(wheel_center.x + ImCos(a1) * wheel_r_inner, wheel_center.y + ImSin(a1) * wheel_r_inner); - ShadeVertsLinearColorGradientKeepAlpha(draw_list, vert_start_idx, vert_end_idx, gradient_p0, gradient_p1, col_hues[n], col_hues[n+1]); - } - - // Render Cursor + preview on Hue Wheel - float cos_hue_angle = ImCos(H * 2.0f * IM_PI); - float sin_hue_angle = ImSin(H * 2.0f * IM_PI); - ImVec2 hue_cursor_pos(wheel_center.x + cos_hue_angle * (wheel_r_inner+wheel_r_outer)*0.5f, wheel_center.y + sin_hue_angle * (wheel_r_inner+wheel_r_outer)*0.5f); - float hue_cursor_rad = value_changed_h ? wheel_thickness * 0.65f : wheel_thickness * 0.55f; - int hue_cursor_segments = ImClamp((int)(hue_cursor_rad / 1.4f), 9, 32); - draw_list->AddCircleFilled(hue_cursor_pos, hue_cursor_rad, hue_color32, hue_cursor_segments); - draw_list->AddCircle(hue_cursor_pos, hue_cursor_rad+1, col_midgrey, hue_cursor_segments); - draw_list->AddCircle(hue_cursor_pos, hue_cursor_rad, col_white, hue_cursor_segments); - - // Render SV triangle (rotated according to hue) - ImVec2 tra = wheel_center + ImRotate(triangle_pa, cos_hue_angle, sin_hue_angle); - ImVec2 trb = wheel_center + ImRotate(triangle_pb, cos_hue_angle, sin_hue_angle); - ImVec2 trc = wheel_center + ImRotate(triangle_pc, cos_hue_angle, sin_hue_angle); - ImVec2 uv_white = GetFontTexUvWhitePixel(); - draw_list->PrimReserve(6, 6); - draw_list->PrimVtx(tra, uv_white, hue_color32); - draw_list->PrimVtx(trb, uv_white, hue_color32); - draw_list->PrimVtx(trc, uv_white, col_white); - draw_list->PrimVtx(tra, uv_white, 0); - draw_list->PrimVtx(trb, uv_white, col_black); - draw_list->PrimVtx(trc, uv_white, 0); - draw_list->AddTriangle(tra, trb, trc, col_midgrey, 1.5f); - sv_cursor_pos = ImLerp(ImLerp(trc, tra, ImSaturate(S)), trb, ImSaturate(1 - V)); - } - else if (flags & ImGuiColorEditFlags_PickerHueBar) - { - // Render SV Square - draw_list->AddRectFilledMultiColor(picker_pos, picker_pos + ImVec2(sv_picker_size, sv_picker_size), col_white, hue_color32, hue_color32, col_white); - draw_list->AddRectFilledMultiColor(picker_pos, picker_pos + ImVec2(sv_picker_size, sv_picker_size), 0, 0, col_black, col_black); - RenderFrameBorder(picker_pos, picker_pos + ImVec2(sv_picker_size, sv_picker_size), 0.0f); - sv_cursor_pos.x = ImClamp(IM_ROUND(picker_pos.x + ImSaturate(S) * sv_picker_size), picker_pos.x + 2, picker_pos.x + sv_picker_size - 2); // Sneakily prevent the circle to stick out too much - sv_cursor_pos.y = ImClamp(IM_ROUND(picker_pos.y + ImSaturate(1 - V) * sv_picker_size), picker_pos.y + 2, picker_pos.y + sv_picker_size - 2); - - // Render Hue Bar - for (int i = 0; i < 6; ++i) - draw_list->AddRectFilledMultiColor(ImVec2(bar0_pos_x, picker_pos.y + i * (sv_picker_size / 6)), ImVec2(bar0_pos_x + bars_width, picker_pos.y + (i + 1) * (sv_picker_size / 6)), col_hues[i], col_hues[i], col_hues[i + 1], col_hues[i + 1]); - float bar0_line_y = IM_ROUND(picker_pos.y + H * sv_picker_size); - RenderFrameBorder(ImVec2(bar0_pos_x, picker_pos.y), ImVec2(bar0_pos_x + bars_width, picker_pos.y + sv_picker_size), 0.0f); - RenderArrowsForVerticalBar(draw_list, ImVec2(bar0_pos_x - 1, bar0_line_y), ImVec2(bars_triangles_half_sz + 1, bars_triangles_half_sz), bars_width + 2.0f, style.Alpha); - } - - // Render cursor/preview circle (clamp S/V within 0..1 range because floating points colors may lead HSV values to be out of range) - float sv_cursor_rad = value_changed_sv ? 10.0f : 6.0f; - draw_list->AddCircleFilled(sv_cursor_pos, sv_cursor_rad, user_col32_striped_of_alpha, 12); - draw_list->AddCircle(sv_cursor_pos, sv_cursor_rad+1, col_midgrey, 12); - draw_list->AddCircle(sv_cursor_pos, sv_cursor_rad, col_white, 12); - - // Render alpha bar - if (alpha_bar) - { - float alpha = ImSaturate(col[3]); - ImRect bar1_bb(bar1_pos_x, picker_pos.y, bar1_pos_x + bars_width, picker_pos.y + sv_picker_size); - RenderColorRectWithAlphaCheckerboard(draw_list, bar1_bb.Min, bar1_bb.Max, 0, bar1_bb.GetWidth() / 2.0f, ImVec2(0.0f, 0.0f)); - draw_list->AddRectFilledMultiColor(bar1_bb.Min, bar1_bb.Max, user_col32_striped_of_alpha, user_col32_striped_of_alpha, user_col32_striped_of_alpha & ~IM_COL32_A_MASK, user_col32_striped_of_alpha & ~IM_COL32_A_MASK); - float bar1_line_y = IM_ROUND(picker_pos.y + (1.0f - alpha) * sv_picker_size); - RenderFrameBorder(bar1_bb.Min, bar1_bb.Max, 0.0f); - RenderArrowsForVerticalBar(draw_list, ImVec2(bar1_pos_x - 1, bar1_line_y), ImVec2(bars_triangles_half_sz + 1, bars_triangles_half_sz), bars_width + 2.0f, style.Alpha); - } - - EndGroup(); - - if (value_changed && memcmp(backup_initial_col, col, components * sizeof(float)) == 0) - value_changed = false; - if (value_changed) - MarkItemEdited(window->DC.LastItemId); - - PopID(); - - return value_changed; -} - -// A little colored square. Return true when clicked. -// FIXME: May want to display/ignore the alpha component in the color display? Yet show it in the tooltip. -// 'desc_id' is not called 'label' because we don't display it next to the button, but only in the tooltip. -// Note that 'col' may be encoded in HSV if ImGuiColorEditFlags_InputHSV is set. -bool ImGui::ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags, ImVec2 size) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - - ImGuiContext& g = *GImGui; - const ImGuiID id = window->GetID(desc_id); - float default_size = GetFrameHeight(); - if (size.x == 0.0f) - size.x = default_size; - if (size.y == 0.0f) - size.y = default_size; - const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size); - ItemSize(bb, (size.y >= default_size) ? g.Style.FramePadding.y : 0.0f); - if (!ItemAdd(bb, id)) - return false; - - bool hovered, held; - bool pressed = ButtonBehavior(bb, id, &hovered, &held); - - if (flags & ImGuiColorEditFlags_NoAlpha) - flags &= ~(ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf); - - ImVec4 col_rgb = col; - if (flags & ImGuiColorEditFlags_InputHSV) - ColorConvertHSVtoRGB(col_rgb.x, col_rgb.y, col_rgb.z, col_rgb.x, col_rgb.y, col_rgb.z); - - ImVec4 col_rgb_without_alpha(col_rgb.x, col_rgb.y, col_rgb.z, 1.0f); - float grid_step = ImMin(size.x, size.y) / 2.99f; - float rounding = ImMin(g.Style.FrameRounding, grid_step * 0.5f); - ImRect bb_inner = bb; - float off = 0.0f; - if ((flags & ImGuiColorEditFlags_NoBorder) == 0) - { - off = -0.75f; // The border (using Col_FrameBg) tends to look off when color is near-opaque and rounding is enabled. This offset seemed like a good middle ground to reduce those artifacts. - bb_inner.Expand(off); - } - if ((flags & ImGuiColorEditFlags_AlphaPreviewHalf) && col_rgb.w < 1.0f) - { - float mid_x = IM_ROUND((bb_inner.Min.x + bb_inner.Max.x) * 0.5f); - RenderColorRectWithAlphaCheckerboard(window->DrawList, ImVec2(bb_inner.Min.x + grid_step, bb_inner.Min.y), bb_inner.Max, GetColorU32(col_rgb), grid_step, ImVec2(-grid_step + off, off), rounding, ImDrawCornerFlags_TopRight| ImDrawCornerFlags_BotRight); - window->DrawList->AddRectFilled(bb_inner.Min, ImVec2(mid_x, bb_inner.Max.y), GetColorU32(col_rgb_without_alpha), rounding, ImDrawCornerFlags_TopLeft|ImDrawCornerFlags_BotLeft); - } - else - { - // Because GetColorU32() multiplies by the global style Alpha and we don't want to display a checkerboard if the source code had no alpha - ImVec4 col_source = (flags & ImGuiColorEditFlags_AlphaPreview) ? col_rgb : col_rgb_without_alpha; - if (col_source.w < 1.0f) - RenderColorRectWithAlphaCheckerboard(window->DrawList, bb_inner.Min, bb_inner.Max, GetColorU32(col_source), grid_step, ImVec2(off, off), rounding); - else - window->DrawList->AddRectFilled(bb_inner.Min, bb_inner.Max, GetColorU32(col_source), rounding, ImDrawCornerFlags_All); - } - RenderNavHighlight(bb, id); - if ((flags & ImGuiColorEditFlags_NoBorder) == 0) - { - if (g.Style.FrameBorderSize > 0.0f) - RenderFrameBorder(bb.Min, bb.Max, rounding); - else - window->DrawList->AddRect(bb.Min, bb.Max, GetColorU32(ImGuiCol_FrameBg), rounding); // Color button are often in need of some sort of border - } - - // Drag and Drop Source - // NB: The ActiveId test is merely an optional micro-optimization, BeginDragDropSource() does the same test. - if (g.ActiveId == id && !(flags & ImGuiColorEditFlags_NoDragDrop) && BeginDragDropSource()) - { - if (flags & ImGuiColorEditFlags_NoAlpha) - SetDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F, &col_rgb, sizeof(float) * 3, ImGuiCond_Once); - else - SetDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F, &col_rgb, sizeof(float) * 4, ImGuiCond_Once); - ColorButton(desc_id, col, flags); - SameLine(); - TextEx("Color"); - EndDragDropSource(); - } - - // Tooltip - if (!(flags & ImGuiColorEditFlags_NoTooltip) && hovered) - ColorTooltip(desc_id, &col.x, flags & (ImGuiColorEditFlags__InputMask | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf)); - - return pressed; -} - -// Initialize/override default color options -void ImGui::SetColorEditOptions(ImGuiColorEditFlags flags) -{ - ImGuiContext& g = *GImGui; - if ((flags & ImGuiColorEditFlags__DisplayMask) == 0) - flags |= ImGuiColorEditFlags__OptionsDefault & ImGuiColorEditFlags__DisplayMask; - if ((flags & ImGuiColorEditFlags__DataTypeMask) == 0) - flags |= ImGuiColorEditFlags__OptionsDefault & ImGuiColorEditFlags__DataTypeMask; - if ((flags & ImGuiColorEditFlags__PickerMask) == 0) - flags |= ImGuiColorEditFlags__OptionsDefault & ImGuiColorEditFlags__PickerMask; - if ((flags & ImGuiColorEditFlags__InputMask) == 0) - flags |= ImGuiColorEditFlags__OptionsDefault & ImGuiColorEditFlags__InputMask; - IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__DisplayMask)); // Check only 1 option is selected - IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__DataTypeMask)); // Check only 1 option is selected - IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__PickerMask)); // Check only 1 option is selected - IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__InputMask)); // Check only 1 option is selected - g.ColorEditOptions = flags; -} - -// Note: only access 3 floats if ImGuiColorEditFlags_NoAlpha flag is set. -void ImGui::ColorTooltip(const char* text, const float* col, ImGuiColorEditFlags flags) -{ - ImGuiContext& g = *GImGui; - - BeginTooltipEx(0, ImGuiTooltipFlags_OverridePreviousTooltip); - const char* text_end = text ? FindRenderedTextEnd(text, NULL) : text; - if (text_end > text) - { - TextEx(text, text_end); - Separator(); - } - - ImVec2 sz(g.FontSize * 3 + g.Style.FramePadding.y * 2, g.FontSize * 3 + g.Style.FramePadding.y * 2); - ImVec4 cf(col[0], col[1], col[2], (flags & ImGuiColorEditFlags_NoAlpha) ? 1.0f : col[3]); - int cr = IM_F32_TO_INT8_SAT(col[0]), cg = IM_F32_TO_INT8_SAT(col[1]), cb = IM_F32_TO_INT8_SAT(col[2]), ca = (flags & ImGuiColorEditFlags_NoAlpha) ? 255 : IM_F32_TO_INT8_SAT(col[3]); - ColorButton("##preview", cf, (flags & (ImGuiColorEditFlags__InputMask | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf)) | ImGuiColorEditFlags_NoTooltip, sz); - SameLine(); - if ((flags & ImGuiColorEditFlags_InputRGB) || !(flags & ImGuiColorEditFlags__InputMask)) - { - if (flags & ImGuiColorEditFlags_NoAlpha) - Text("#%02X%02X%02X\nR: %d, G: %d, B: %d\n(%.3f, %.3f, %.3f)", cr, cg, cb, cr, cg, cb, col[0], col[1], col[2]); - else - Text("#%02X%02X%02X%02X\nR:%d, G:%d, B:%d, A:%d\n(%.3f, %.3f, %.3f, %.3f)", cr, cg, cb, ca, cr, cg, cb, ca, col[0], col[1], col[2], col[3]); - } - else if (flags & ImGuiColorEditFlags_InputHSV) - { - if (flags & ImGuiColorEditFlags_NoAlpha) - Text("H: %.3f, S: %.3f, V: %.3f", col[0], col[1], col[2]); - else - Text("H: %.3f, S: %.3f, V: %.3f, A: %.3f", col[0], col[1], col[2], col[3]); - } - EndTooltip(); -} - -void ImGui::ColorEditOptionsPopup(const float* col, ImGuiColorEditFlags flags) -{ - bool allow_opt_inputs = !(flags & ImGuiColorEditFlags__DisplayMask); - bool allow_opt_datatype = !(flags & ImGuiColorEditFlags__DataTypeMask); - if ((!allow_opt_inputs && !allow_opt_datatype) || !BeginPopup("context")) - return; - ImGuiContext& g = *GImGui; - ImGuiColorEditFlags opts = g.ColorEditOptions; - if (allow_opt_inputs) - { - if (RadioButton("RGB", (opts & ImGuiColorEditFlags_DisplayRGB) != 0)) opts = (opts & ~ImGuiColorEditFlags__DisplayMask) | ImGuiColorEditFlags_DisplayRGB; - if (RadioButton("HSV", (opts & ImGuiColorEditFlags_DisplayHSV) != 0)) opts = (opts & ~ImGuiColorEditFlags__DisplayMask) | ImGuiColorEditFlags_DisplayHSV; - if (RadioButton("Hex", (opts & ImGuiColorEditFlags_DisplayHex) != 0)) opts = (opts & ~ImGuiColorEditFlags__DisplayMask) | ImGuiColorEditFlags_DisplayHex; - } - if (allow_opt_datatype) - { - if (allow_opt_inputs) Separator(); - if (RadioButton("0..255", (opts & ImGuiColorEditFlags_Uint8) != 0)) opts = (opts & ~ImGuiColorEditFlags__DataTypeMask) | ImGuiColorEditFlags_Uint8; - if (RadioButton("0.00..1.00", (opts & ImGuiColorEditFlags_Float) != 0)) opts = (opts & ~ImGuiColorEditFlags__DataTypeMask) | ImGuiColorEditFlags_Float; - } - - if (allow_opt_inputs || allow_opt_datatype) - Separator(); - if (Button("Copy as..", ImVec2(-1,0))) - OpenPopup("Copy"); - if (BeginPopup("Copy")) - { - int cr = IM_F32_TO_INT8_SAT(col[0]), cg = IM_F32_TO_INT8_SAT(col[1]), cb = IM_F32_TO_INT8_SAT(col[2]), ca = (flags & ImGuiColorEditFlags_NoAlpha) ? 255 : IM_F32_TO_INT8_SAT(col[3]); - char buf[64]; - ImFormatString(buf, IM_ARRAYSIZE(buf), "(%.3ff, %.3ff, %.3ff, %.3ff)", col[0], col[1], col[2], (flags & ImGuiColorEditFlags_NoAlpha) ? 1.0f : col[3]); - if (Selectable(buf)) - SetClipboardText(buf); - ImFormatString(buf, IM_ARRAYSIZE(buf), "(%d,%d,%d,%d)", cr, cg, cb, ca); - if (Selectable(buf)) - SetClipboardText(buf); - ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X", cr, cg, cb); - if (Selectable(buf)) - SetClipboardText(buf); - if (!(flags & ImGuiColorEditFlags_NoAlpha)) - { - ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X%02X", cr, cg, cb, ca); - if (Selectable(buf)) - SetClipboardText(buf); - } - EndPopup(); - } - - g.ColorEditOptions = opts; - EndPopup(); -} - -void ImGui::ColorPickerOptionsPopup(const float* ref_col, ImGuiColorEditFlags flags) -{ - bool allow_opt_picker = !(flags & ImGuiColorEditFlags__PickerMask); - bool allow_opt_alpha_bar = !(flags & ImGuiColorEditFlags_NoAlpha) && !(flags & ImGuiColorEditFlags_AlphaBar); - if ((!allow_opt_picker && !allow_opt_alpha_bar) || !BeginPopup("context")) - return; - ImGuiContext& g = *GImGui; - if (allow_opt_picker) - { - ImVec2 picker_size(g.FontSize * 8, ImMax(g.FontSize * 8 - (GetFrameHeight() + g.Style.ItemInnerSpacing.x), 1.0f)); // FIXME: Picker size copied from main picker function - PushItemWidth(picker_size.x); - for (int picker_type = 0; picker_type < 2; picker_type++) - { - // Draw small/thumbnail version of each picker type (over an invisible button for selection) - if (picker_type > 0) Separator(); - PushID(picker_type); - ImGuiColorEditFlags picker_flags = ImGuiColorEditFlags_NoInputs|ImGuiColorEditFlags_NoOptions|ImGuiColorEditFlags_NoLabel|ImGuiColorEditFlags_NoSidePreview|(flags & ImGuiColorEditFlags_NoAlpha); - if (picker_type == 0) picker_flags |= ImGuiColorEditFlags_PickerHueBar; - if (picker_type == 1) picker_flags |= ImGuiColorEditFlags_PickerHueWheel; - ImVec2 backup_pos = GetCursorScreenPos(); - if (Selectable("##selectable", false, 0, picker_size)) // By default, Selectable() is closing popup - g.ColorEditOptions = (g.ColorEditOptions & ~ImGuiColorEditFlags__PickerMask) | (picker_flags & ImGuiColorEditFlags__PickerMask); - SetCursorScreenPos(backup_pos); - ImVec4 dummy_ref_col; - memcpy(&dummy_ref_col, ref_col, sizeof(float) * ((picker_flags & ImGuiColorEditFlags_NoAlpha) ? 3 : 4)); - ColorPicker4("##dummypicker", &dummy_ref_col.x, picker_flags); - PopID(); - } - PopItemWidth(); - } - if (allow_opt_alpha_bar) - { - if (allow_opt_picker) Separator(); - CheckboxFlags("Alpha Bar", (unsigned int*)&g.ColorEditOptions, ImGuiColorEditFlags_AlphaBar); - } - EndPopup(); -} - -//------------------------------------------------------------------------- -// [SECTION] Widgets: TreeNode, CollapsingHeader, etc. -//------------------------------------------------------------------------- -// - TreeNode() -// - TreeNodeV() -// - TreeNodeEx() -// - TreeNodeExV() -// - TreeNodeBehavior() [Internal] -// - TreePush() -// - TreePop() -// - GetTreeNodeToLabelSpacing() -// - SetNextItemOpen() -// - CollapsingHeader() -//------------------------------------------------------------------------- - -bool ImGui::TreeNode(const char* str_id, const char* fmt, ...) -{ - va_list args; - va_start(args, fmt); - bool is_open = TreeNodeExV(str_id, 0, fmt, args); - va_end(args); - return is_open; -} - -bool ImGui::TreeNode(const void* ptr_id, const char* fmt, ...) -{ - va_list args; - va_start(args, fmt); - bool is_open = TreeNodeExV(ptr_id, 0, fmt, args); - va_end(args); - return is_open; -} - -bool ImGui::TreeNode(const char* label) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - return TreeNodeBehavior(window->GetID(label), 0, label, NULL); -} - -bool ImGui::TreeNodeV(const char* str_id, const char* fmt, va_list args) -{ - return TreeNodeExV(str_id, 0, fmt, args); -} - -bool ImGui::TreeNodeV(const void* ptr_id, const char* fmt, va_list args) -{ - return TreeNodeExV(ptr_id, 0, fmt, args); -} - -bool ImGui::TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - - return TreeNodeBehavior(window->GetID(label), flags, label, NULL); -} - -bool ImGui::TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) -{ - va_list args; - va_start(args, fmt); - bool is_open = TreeNodeExV(str_id, flags, fmt, args); - va_end(args); - return is_open; -} - -bool ImGui::TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) -{ - va_list args; - va_start(args, fmt); - bool is_open = TreeNodeExV(ptr_id, flags, fmt, args); - va_end(args); - return is_open; -} - -bool ImGui::TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - - ImGuiContext& g = *GImGui; - const char* label_end = g.TempBuffer + ImFormatStringV(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), fmt, args); - return TreeNodeBehavior(window->GetID(str_id), flags, g.TempBuffer, label_end); -} - -bool ImGui::TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - - ImGuiContext& g = *GImGui; - const char* label_end = g.TempBuffer + ImFormatStringV(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), fmt, args); - return TreeNodeBehavior(window->GetID(ptr_id), flags, g.TempBuffer, label_end); -} - -bool ImGui::TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags) -{ - if (flags & ImGuiTreeNodeFlags_Leaf) - return true; - - // We only write to the tree storage if the user clicks (or explicitly use the SetNextItemOpen function) - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - ImGuiStorage* storage = window->DC.StateStorage; - - bool is_open; - if (g.NextItemData.Flags & ImGuiNextItemDataFlags_HasOpen) - { - if (g.NextItemData.OpenCond & ImGuiCond_Always) - { - is_open = g.NextItemData.OpenVal; - storage->SetInt(id, is_open); - } - else - { - // We treat ImGuiCond_Once and ImGuiCond_FirstUseEver the same because tree node state are not saved persistently. - const int stored_value = storage->GetInt(id, -1); - if (stored_value == -1) - { - is_open = g.NextItemData.OpenVal; - storage->SetInt(id, is_open); - } - else - { - is_open = stored_value != 0; - } - } - } - else - { - is_open = storage->GetInt(id, (flags & ImGuiTreeNodeFlags_DefaultOpen) ? 1 : 0) != 0; - } - - // When logging is enabled, we automatically expand tree nodes (but *NOT* collapsing headers.. seems like sensible behavior). - // NB- If we are above max depth we still allow manually opened nodes to be logged. - if (g.LogEnabled && !(flags & ImGuiTreeNodeFlags_NoAutoOpenOnLog) && (window->DC.TreeDepth - g.LogDepthRef) < g.LogDepthToExpand) - is_open = true; - - return is_open; -} - -bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* label, const char* label_end) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - - ImGuiContext& g = *GImGui; - const ImGuiStyle& style = g.Style; - const bool display_frame = (flags & ImGuiTreeNodeFlags_Framed) != 0; - const ImVec2 padding = (display_frame || (flags & ImGuiTreeNodeFlags_FramePadding)) ? style.FramePadding : ImVec2(style.FramePadding.x, ImMin(window->DC.CurrLineTextBaseOffset, style.FramePadding.y)); - - if (!label_end) - label_end = FindRenderedTextEnd(label); - const ImVec2 label_size = CalcTextSize(label, label_end, false); - - // We vertically grow up to current line height up the typical widget height. - const float frame_height = ImMax(ImMin(window->DC.CurrLineSize.y, g.FontSize + style.FramePadding.y*2), label_size.y + padding.y*2); - ImRect frame_bb; - frame_bb.Min.x = (flags & ImGuiTreeNodeFlags_SpanFullWidth) ? window->WorkRect.Min.x : window->DC.CursorPos.x; - frame_bb.Min.y = window->DC.CursorPos.y; - frame_bb.Max.x = window->WorkRect.Max.x; - frame_bb.Max.y = window->DC.CursorPos.y + frame_height; - if (display_frame) - { - // Framed header expand a little outside the default padding, to the edge of InnerClipRect - // (FIXME: May remove this at some point and make InnerClipRect align with WindowPadding.x instead of WindowPadding.x*0.5f) - frame_bb.Min.x -= IM_FLOOR(window->WindowPadding.x * 0.5f - 1.0f); - frame_bb.Max.x += IM_FLOOR(window->WindowPadding.x * 0.5f); - } - - const float text_offset_x = g.FontSize + (display_frame ? padding.x*3 : padding.x*2); // Collapser arrow width + Spacing - const float text_offset_y = ImMax(padding.y, window->DC.CurrLineTextBaseOffset); // Latch before ItemSize changes it - const float text_width = g.FontSize + (label_size.x > 0.0f ? label_size.x + padding.x*2 : 0.0f); // Include collapser - ImVec2 text_pos(window->DC.CursorPos.x + text_offset_x, window->DC.CursorPos.y + text_offset_y); - ItemSize(ImVec2(text_width, frame_height), padding.y); - - // For regular tree nodes, we arbitrary allow to click past 2 worth of ItemSpacing - ImRect interact_bb = frame_bb; - if (!display_frame && (flags & (ImGuiTreeNodeFlags_SpanAvailWidth | ImGuiTreeNodeFlags_SpanFullWidth)) == 0) - interact_bb.Max.x = frame_bb.Min.x + text_width + style.ItemSpacing.x * 2.0f; - - // Store a flag for the current depth to tell if we will allow closing this node when navigating one of its child. - // For this purpose we essentially compare if g.NavIdIsAlive went from 0 to 1 between TreeNode() and TreePop(). - // This is currently only support 32 level deep and we are fine with (1 << Depth) overflowing into a zero. - const bool is_leaf = (flags & ImGuiTreeNodeFlags_Leaf) != 0; - bool is_open = TreeNodeBehaviorIsOpen(id, flags); - if (is_open && !g.NavIdIsAlive && (flags & ImGuiTreeNodeFlags_NavLeftJumpsBackHere) && !(flags & ImGuiTreeNodeFlags_NoTreePushOnOpen)) - window->DC.TreeJumpToParentOnPopMask |= (1 << window->DC.TreeDepth); - - bool item_add = ItemAdd(interact_bb, id); - window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_HasDisplayRect; - window->DC.LastItemDisplayRect = frame_bb; - - if (!item_add) - { - if (is_open && !(flags & ImGuiTreeNodeFlags_NoTreePushOnOpen)) - TreePushOverrideID(id); - IMGUI_TEST_ENGINE_ITEM_INFO(window->DC.LastItemId, label, window->DC.ItemFlags | (is_leaf ? 0 : ImGuiItemStatusFlags_Openable) | (is_open ? ImGuiItemStatusFlags_Opened : 0)); - return is_open; - } - - // Flags that affects opening behavior: - // - 0 (default) .................... single-click anywhere to open - // - OpenOnDoubleClick .............. double-click anywhere to open - // - OpenOnArrow .................... single-click on arrow to open - // - OpenOnDoubleClick|OpenOnArrow .. single-click on arrow or double-click anywhere to open - ImGuiButtonFlags button_flags = 0; - if (flags & ImGuiTreeNodeFlags_AllowItemOverlap) - button_flags |= ImGuiButtonFlags_AllowItemOverlap; - if (flags & ImGuiTreeNodeFlags_OpenOnDoubleClick) - button_flags |= ImGuiButtonFlags_PressedOnDoubleClick | ((flags & ImGuiTreeNodeFlags_OpenOnArrow) ? ImGuiButtonFlags_PressedOnClickRelease : 0); - else - button_flags |= ImGuiButtonFlags_PressedOnClickRelease; - if (!is_leaf) - button_flags |= ImGuiButtonFlags_PressedOnDragDropHold; - - // We allow clicking on the arrow section with keyboard modifiers held, in order to easily - // allow browsing a tree while preserving selection with code implementing multi-selection patterns. - // When clicking on the rest of the tree node we always disallow keyboard modifiers. - const float hit_padding_x = style.TouchExtraPadding.x; - const float arrow_hit_x1 = (text_pos.x - text_offset_x) - hit_padding_x; - const float arrow_hit_x2 = (text_pos.x - text_offset_x) + (g.FontSize + padding.x * 2.0f) + hit_padding_x; - if (window != g.HoveredWindow || !(g.IO.MousePos.x >= arrow_hit_x1 && g.IO.MousePos.x < arrow_hit_x2)) - button_flags |= ImGuiButtonFlags_NoKeyModifiers; - - bool selected = (flags & ImGuiTreeNodeFlags_Selected) != 0; - const bool was_selected = selected; - - bool hovered, held; - bool pressed = ButtonBehavior(interact_bb, id, &hovered, &held, button_flags); - bool toggled = false; - if (!is_leaf) - { - if (pressed) - { - if ((flags & (ImGuiTreeNodeFlags_OpenOnArrow | ImGuiTreeNodeFlags_OpenOnDoubleClick)) == 0 || (g.NavActivateId == id)) - toggled = true; - if (flags & ImGuiTreeNodeFlags_OpenOnArrow) - toggled |= (g.IO.MousePos.x >= arrow_hit_x1 && g.IO.MousePos.x < arrow_hit_x2) && (!g.NavDisableMouseHover); // Lightweight equivalent of IsMouseHoveringRect() since ButtonBehavior() already did the job - if ((flags & ImGuiTreeNodeFlags_OpenOnDoubleClick) && g.IO.MouseDoubleClicked[0]) - toggled = true; - if (g.DragDropActive && is_open) // When using Drag and Drop "hold to open" we keep the node highlighted after opening, but never close it again. - toggled = false; - } - - if (g.NavId == id && g.NavMoveRequest && g.NavMoveDir == ImGuiDir_Left && is_open) - { - toggled = true; - NavMoveRequestCancel(); - } - if (g.NavId == id && g.NavMoveRequest && g.NavMoveDir == ImGuiDir_Right && !is_open) // If there's something upcoming on the line we may want to give it the priority? - { - toggled = true; - NavMoveRequestCancel(); - } - - if (toggled) - { - is_open = !is_open; - window->DC.StateStorage->SetInt(id, is_open); - window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_ToggledOpen; - } - } - if (flags & ImGuiTreeNodeFlags_AllowItemOverlap) - SetItemAllowOverlap(); - - // In this branch, TreeNodeBehavior() cannot toggle the selection so this will never trigger. - if (selected != was_selected) //-V547 - window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_ToggledSelection; - - // Render - const ImU32 text_col = GetColorU32(ImGuiCol_Text); - ImGuiNavHighlightFlags nav_highlight_flags = ImGuiNavHighlightFlags_TypeThin; - if (display_frame) - { - // Framed type - const ImU32 bg_col = GetColorU32((held && hovered) ? ImGuiCol_HeaderActive : hovered ? ImGuiCol_HeaderHovered : ImGuiCol_Header); - RenderFrame(frame_bb.Min, frame_bb.Max, bg_col, true, style.FrameRounding); - RenderNavHighlight(frame_bb, id, nav_highlight_flags); - if (flags & ImGuiTreeNodeFlags_Bullet) - RenderBullet(window->DrawList, ImVec2(text_pos.x - text_offset_x * 0.60f, text_pos.y + g.FontSize * 0.5f), text_col); - else if (!is_leaf) - RenderArrow(window->DrawList, ImVec2(text_pos.x - text_offset_x + padding.x, text_pos.y), text_col, is_open ? ImGuiDir_Down : ImGuiDir_Right, 1.0f); - else // Leaf without bullet, left-adjusted text - text_pos.x -= text_offset_x; - if (flags & ImGuiTreeNodeFlags_ClipLabelForTrailingButton) - frame_bb.Max.x -= g.FontSize + style.FramePadding.x; - if (g.LogEnabled) - { - // NB: '##' is normally used to hide text (as a library-wide feature), so we need to specify the text range to make sure the ## aren't stripped out here. - const char log_prefix[] = "\n##"; - const char log_suffix[] = "##"; - LogRenderedText(&text_pos, log_prefix, log_prefix+3); - RenderTextClipped(text_pos, frame_bb.Max, label, label_end, &label_size); - LogRenderedText(&text_pos, log_suffix, log_suffix+2); - } - else - { - RenderTextClipped(text_pos, frame_bb.Max, label, label_end, &label_size); - } - } - else - { - // Unframed typed for tree nodes - if (hovered || selected) - { - const ImU32 bg_col = GetColorU32((held && hovered) ? ImGuiCol_HeaderActive : hovered ? ImGuiCol_HeaderHovered : ImGuiCol_Header); - RenderFrame(frame_bb.Min, frame_bb.Max, bg_col, false); - RenderNavHighlight(frame_bb, id, nav_highlight_flags); - } - if (flags & ImGuiTreeNodeFlags_Bullet) - RenderBullet(window->DrawList, ImVec2(text_pos.x - text_offset_x * 0.5f, text_pos.y + g.FontSize * 0.5f), text_col); - else if (!is_leaf) - RenderArrow(window->DrawList, ImVec2(text_pos.x - text_offset_x + padding.x, text_pos.y + g.FontSize * 0.15f), text_col, is_open ? ImGuiDir_Down : ImGuiDir_Right, 0.70f); - if (g.LogEnabled) - LogRenderedText(&text_pos, ">"); - RenderText(text_pos, label, label_end, false); - } - - if (is_open && !(flags & ImGuiTreeNodeFlags_NoTreePushOnOpen)) - TreePushOverrideID(id); - IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags | (is_leaf ? 0 : ImGuiItemStatusFlags_Openable) | (is_open ? ImGuiItemStatusFlags_Opened : 0)); - return is_open; -} - -void ImGui::TreePush(const char* str_id) -{ - ImGuiWindow* window = GetCurrentWindow(); - Indent(); - window->DC.TreeDepth++; - PushID(str_id ? str_id : "#TreePush"); -} - -void ImGui::TreePush(const void* ptr_id) -{ - ImGuiWindow* window = GetCurrentWindow(); - Indent(); - window->DC.TreeDepth++; - PushID(ptr_id ? ptr_id : (const void*)"#TreePush"); -} - -void ImGui::TreePushOverrideID(ImGuiID id) -{ - ImGuiWindow* window = GetCurrentWindow(); - Indent(); - window->DC.TreeDepth++; - window->IDStack.push_back(id); -} - -void ImGui::TreePop() -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - Unindent(); - - window->DC.TreeDepth--; - ImU32 tree_depth_mask = (1 << window->DC.TreeDepth); - - // Handle Left arrow to move to parent tree node (when ImGuiTreeNodeFlags_NavLeftJumpsBackHere is enabled) - if (g.NavMoveDir == ImGuiDir_Left && g.NavWindow == window && NavMoveRequestButNoResultYet()) - if (g.NavIdIsAlive && (window->DC.TreeJumpToParentOnPopMask & tree_depth_mask)) - { - SetNavID(window->IDStack.back(), g.NavLayer, 0); - NavMoveRequestCancel(); - } - window->DC.TreeJumpToParentOnPopMask &= tree_depth_mask - 1; - - IM_ASSERT(window->IDStack.Size > 1); // There should always be 1 element in the IDStack (pushed during window creation). If this triggers you called TreePop/PopID too much. - PopID(); -} - -// Horizontal distance preceding label when using TreeNode() or Bullet() -float ImGui::GetTreeNodeToLabelSpacing() -{ - ImGuiContext& g = *GImGui; - return g.FontSize + (g.Style.FramePadding.x * 2.0f); -} - -// Set next TreeNode/CollapsingHeader open state. -void ImGui::SetNextItemOpen(bool is_open, ImGuiCond cond) -{ - ImGuiContext& g = *GImGui; - if (g.CurrentWindow->SkipItems) - return; - g.NextItemData.Flags |= ImGuiNextItemDataFlags_HasOpen; - g.NextItemData.OpenVal = is_open; - g.NextItemData.OpenCond = cond ? cond : ImGuiCond_Always; -} - -// CollapsingHeader returns true when opened but do not indent nor push into the ID stack (because of the ImGuiTreeNodeFlags_NoTreePushOnOpen flag). -// This is basically the same as calling TreeNodeEx(label, ImGuiTreeNodeFlags_CollapsingHeader). You can remove the _NoTreePushOnOpen flag if you want behavior closer to normal TreeNode(). -bool ImGui::CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - - return TreeNodeBehavior(window->GetID(label), flags | ImGuiTreeNodeFlags_CollapsingHeader, label); -} - -bool ImGui::CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - - if (p_open && !*p_open) - return false; - - ImGuiID id = window->GetID(label); - flags |= ImGuiTreeNodeFlags_CollapsingHeader; - if (p_open) - flags |= ImGuiTreeNodeFlags_AllowItemOverlap | ImGuiTreeNodeFlags_ClipLabelForTrailingButton; - bool is_open = TreeNodeBehavior(id, flags, label); - if (p_open) - { - // Create a small overlapping close button - // FIXME: We can evolve this into user accessible helpers to add extra buttons on title bars, headers, etc. - // FIXME: CloseButton can overlap into text, need find a way to clip the text somehow. - ImGuiContext& g = *GImGui; - ImGuiItemHoveredDataBackup last_item_backup; - float button_size = g.FontSize; - float button_x = ImMax(window->DC.LastItemRect.Min.x, window->DC.LastItemRect.Max.x - g.Style.FramePadding.x * 2.0f - button_size); - float button_y = window->DC.LastItemRect.Min.y; - if (CloseButton(window->GetID((void*)((intptr_t)id + 1)), ImVec2(button_x, button_y))) - *p_open = false; - last_item_backup.Restore(); - } - - return is_open; -} - -//------------------------------------------------------------------------- -// [SECTION] Widgets: Selectable -//------------------------------------------------------------------------- -// - Selectable() -//------------------------------------------------------------------------- - -// Tip: pass a non-visible label (e.g. "##dummy") then you can use the space to draw other text or image. -// But you need to make sure the ID is unique, e.g. enclose calls in PushID/PopID or use ##unique_id. -// With this scheme, ImGuiSelectableFlags_SpanAllColumns and ImGuiSelectableFlags_AllowItemOverlap are also frequently used flags. -// FIXME: Selectable() with (size.x == 0.0f) and (SelectableTextAlign.x > 0.0f) followed by SameLine() is currently not supported. -bool ImGui::Selectable(const char* label, bool selected, ImGuiSelectableFlags flags, const ImVec2& size_arg) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - - ImGuiContext& g = *GImGui; - const ImGuiStyle& style = g.Style; - - if ((flags & ImGuiSelectableFlags_SpanAllColumns) && window->DC.CurrentColumns) // FIXME-OPT: Avoid if vertically clipped. - PushColumnsBackground(); - - // Submit label or explicit size to ItemSize(), whereas ItemAdd() will submit a larger/spanning rectangle. - ImGuiID id = window->GetID(label); - ImVec2 label_size = CalcTextSize(label, NULL, true); - ImVec2 size(size_arg.x != 0.0f ? size_arg.x : label_size.x, size_arg.y != 0.0f ? size_arg.y : label_size.y); - ImVec2 pos = window->DC.CursorPos; - pos.y += window->DC.CurrLineTextBaseOffset; - ItemSize(size, 0.0f); - - // Fill horizontal space - const float min_x = (flags & ImGuiSelectableFlags_SpanAllColumns) ? window->ContentRegionRect.Min.x : pos.x; - const float max_x = (flags & ImGuiSelectableFlags_SpanAllColumns) ? window->ContentRegionRect.Max.x : GetContentRegionMaxAbs().x; - if (size_arg.x == 0.0f || (flags & ImGuiSelectableFlags_SpanAvailWidth)) - size.x = ImMax(label_size.x, max_x - min_x); - - // Text stays at the submission position, but bounding box may be extended on both sides - const ImVec2 text_min = pos; - const ImVec2 text_max(min_x + size.x, pos.y + size.y); - - // Selectables are meant to be tightly packed together with no click-gap, so we extend their box to cover spacing between selectable. - ImRect bb_enlarged(min_x, pos.y, text_max.x, text_max.y); - const float spacing_x = style.ItemSpacing.x; - const float spacing_y = style.ItemSpacing.y; - const float spacing_L = IM_FLOOR(spacing_x * 0.50f); - const float spacing_U = IM_FLOOR(spacing_y * 0.50f); - bb_enlarged.Min.x -= spacing_L; - bb_enlarged.Min.y -= spacing_U; - bb_enlarged.Max.x += (spacing_x - spacing_L); - bb_enlarged.Max.y += (spacing_y - spacing_U); - //if (g.IO.KeyCtrl) { GetForegroundDrawList()->AddRect(bb_align.Min, bb_align.Max, IM_COL32(255, 0, 0, 255)); } - //if (g.IO.KeyCtrl) { GetForegroundDrawList()->AddRect(bb_enlarged.Min, bb_enlarged.Max, IM_COL32(0, 255, 0, 255)); } - - bool item_add; - if (flags & ImGuiSelectableFlags_Disabled) - { - ImGuiItemFlags backup_item_flags = window->DC.ItemFlags; - window->DC.ItemFlags |= ImGuiItemFlags_Disabled | ImGuiItemFlags_NoNavDefaultFocus; - item_add = ItemAdd(bb_enlarged, id); - window->DC.ItemFlags = backup_item_flags; - } - else - { - item_add = ItemAdd(bb_enlarged, id); - } - if (!item_add) - { - if ((flags & ImGuiSelectableFlags_SpanAllColumns) && window->DC.CurrentColumns) - PopColumnsBackground(); - return false; - } - - // We use NoHoldingActiveID on menus so user can click and _hold_ on a menu then drag to browse child entries - ImGuiButtonFlags button_flags = 0; - if (flags & ImGuiSelectableFlags_NoHoldingActiveID) { button_flags |= ImGuiButtonFlags_NoHoldingActiveId; } - if (flags & ImGuiSelectableFlags_SelectOnClick) { button_flags |= ImGuiButtonFlags_PressedOnClick; } - if (flags & ImGuiSelectableFlags_SelectOnRelease) { button_flags |= ImGuiButtonFlags_PressedOnRelease; } - if (flags & ImGuiSelectableFlags_Disabled) { button_flags |= ImGuiButtonFlags_Disabled; } - if (flags & ImGuiSelectableFlags_AllowDoubleClick) { button_flags |= ImGuiButtonFlags_PressedOnClickRelease | ImGuiButtonFlags_PressedOnDoubleClick; } - if (flags & ImGuiSelectableFlags_AllowItemOverlap) { button_flags |= ImGuiButtonFlags_AllowItemOverlap; } - - if (flags & ImGuiSelectableFlags_Disabled) - selected = false; - - const bool was_selected = selected; - bool hovered, held; - bool pressed = ButtonBehavior(bb_enlarged, id, &hovered, &held, button_flags); - - // Update NavId when clicking or when Hovering (this doesn't happen on most widgets), so navigation can be resumed with gamepad/keyboard - if (pressed || (hovered && (flags & ImGuiSelectableFlags_SetNavIdOnHover))) - { - if (!g.NavDisableMouseHover && g.NavWindow == window && g.NavLayer == window->DC.NavLayerCurrent) - { - g.NavDisableHighlight = true; - SetNavID(id, window->DC.NavLayerCurrent, window->DC.NavFocusScopeIdCurrent); - } - } - if (pressed) - MarkItemEdited(id); - - if (flags & ImGuiSelectableFlags_AllowItemOverlap) - SetItemAllowOverlap(); - - // In this branch, Selectable() cannot toggle the selection so this will never trigger. - if (selected != was_selected) //-V547 - window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_ToggledSelection; - - // Render - if (held && (flags & ImGuiSelectableFlags_DrawHoveredWhenHeld)) - hovered = true; - if (hovered || selected) - { - const ImU32 col = GetColorU32((held && hovered) ? ImGuiCol_HeaderActive : hovered ? ImGuiCol_HeaderHovered : ImGuiCol_Header); - RenderFrame(bb_enlarged.Min, bb_enlarged.Max, col, false, 0.0f); - RenderNavHighlight(bb_enlarged, id, ImGuiNavHighlightFlags_TypeThin | ImGuiNavHighlightFlags_NoRounding); - } - - if ((flags & ImGuiSelectableFlags_SpanAllColumns) && window->DC.CurrentColumns) - PopColumnsBackground(); - - if (flags & ImGuiSelectableFlags_Disabled) PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); - RenderTextClipped(text_min, text_max, label, NULL, &label_size, style.SelectableTextAlign, &bb_enlarged); - if (flags & ImGuiSelectableFlags_Disabled) PopStyleColor(); - - // Automatically close popups - if (pressed && (window->Flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiSelectableFlags_DontClosePopups) && !(window->DC.ItemFlags & ImGuiItemFlags_SelectableDontClosePopup)) - CloseCurrentPopup(); - - IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags); - return pressed; -} - -bool ImGui::Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags, const ImVec2& size_arg) -{ - if (Selectable(label, *p_selected, flags, size_arg)) - { - *p_selected = !*p_selected; - return true; - } - return false; -} - -//------------------------------------------------------------------------- -// [SECTION] Widgets: ListBox -//------------------------------------------------------------------------- -// - ListBox() -// - ListBoxHeader() -// - ListBoxFooter() -//------------------------------------------------------------------------- -// FIXME: This is an old API. We should redesign some of it, rename ListBoxHeader->BeginListBox, ListBoxFooter->EndListBox -// and promote using them over existing ListBox() functions, similarly to change with combo boxes. -//------------------------------------------------------------------------- - -// FIXME: In principle this function should be called BeginListBox(). We should rename it after re-evaluating if we want to keep the same signature. -// Helper to calculate the size of a listbox and display a label on the right. -// Tip: To have a list filling the entire window width, PushItemWidth(-1) and pass an non-visible label e.g. "##empty" -bool ImGui::ListBoxHeader(const char* label, const ImVec2& size_arg) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - - const ImGuiStyle& style = g.Style; - const ImGuiID id = GetID(label); - const ImVec2 label_size = CalcTextSize(label, NULL, true); - - // Size default to hold ~7 items. Fractional number of items helps seeing that we can scroll down/up without looking at scrollbar. - ImVec2 size = CalcItemSize(size_arg, CalcItemWidth(), GetTextLineHeightWithSpacing() * 7.4f + style.ItemSpacing.y); - ImVec2 frame_size = ImVec2(size.x, ImMax(size.y, label_size.y)); - ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + frame_size); - ImRect bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f)); - window->DC.LastItemRect = bb; // Forward storage for ListBoxFooter.. dodgy. - g.NextItemData.ClearFlags(); - - if (!IsRectVisible(bb.Min, bb.Max)) - { - ItemSize(bb.GetSize(), style.FramePadding.y); - ItemAdd(bb, 0, &frame_bb); - return false; - } - - BeginGroup(); - if (label_size.x > 0) - RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label); - - BeginChildFrame(id, frame_bb.GetSize()); - return true; -} - -// FIXME: In principle this function should be called EndListBox(). We should rename it after re-evaluating if we want to keep the same signature. -bool ImGui::ListBoxHeader(const char* label, int items_count, int height_in_items) -{ - // Size default to hold ~7.25 items. - // We add +25% worth of item height to allow the user to see at a glance if there are more items up/down, without looking at the scrollbar. - // We don't add this extra bit if items_count <= height_in_items. It is slightly dodgy, because it means a dynamic list of items will make the widget resize occasionally when it crosses that size. - // I am expecting that someone will come and complain about this behavior in a remote future, then we can advise on a better solution. - if (height_in_items < 0) - height_in_items = ImMin(items_count, 7); - const ImGuiStyle& style = GetStyle(); - float height_in_items_f = (height_in_items < items_count) ? (height_in_items + 0.25f) : (height_in_items + 0.00f); - - // We include ItemSpacing.y so that a list sized for the exact number of items doesn't make a scrollbar appears. We could also enforce that by passing a flag to BeginChild(). - ImVec2 size; - size.x = 0.0f; - size.y = ImFloor(GetTextLineHeightWithSpacing() * height_in_items_f + style.FramePadding.y * 2.0f); - return ListBoxHeader(label, size); -} - -// FIXME: In principle this function should be called EndListBox(). We should rename it after re-evaluating if we want to keep the same signature. -void ImGui::ListBoxFooter() -{ - ImGuiWindow* parent_window = GetCurrentWindow()->ParentWindow; - const ImRect bb = parent_window->DC.LastItemRect; - const ImGuiStyle& style = GetStyle(); - - EndChildFrame(); - - // Redeclare item size so that it includes the label (we have stored the full size in LastItemRect) - // We call SameLine() to restore DC.CurrentLine* data - SameLine(); - parent_window->DC.CursorPos = bb.Min; - ItemSize(bb, style.FramePadding.y); - EndGroup(); -} - -bool ImGui::ListBox(const char* label, int* current_item, const char* const items[], int items_count, int height_items) -{ - const bool value_changed = ListBox(label, current_item, Items_ArrayGetter, (void*)items, items_count, height_items); - return value_changed; -} - -bool ImGui::ListBox(const char* label, int* current_item, bool (*items_getter)(void*, int, const char**), void* data, int items_count, int height_in_items) -{ - if (!ListBoxHeader(label, items_count, height_in_items)) - return false; - - // Assume all items have even height (= 1 line of text). If you need items of different or variable sizes you can create a custom version of ListBox() in your code without using the clipper. - ImGuiContext& g = *GImGui; - bool value_changed = false; - ImGuiListClipper clipper(items_count, GetTextLineHeightWithSpacing()); // We know exactly our line height here so we pass it as a minor optimization, but generally you don't need to. - while (clipper.Step()) - for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) - { - const bool item_selected = (i == *current_item); - const char* item_text; - if (!items_getter(data, i, &item_text)) - item_text = "*Unknown item*"; - - PushID(i); - if (Selectable(item_text, item_selected)) - { - *current_item = i; - value_changed = true; - } - if (item_selected) - SetItemDefaultFocus(); - PopID(); - } - ListBoxFooter(); - if (value_changed) - MarkItemEdited(g.CurrentWindow->DC.LastItemId); - - return value_changed; -} - -//------------------------------------------------------------------------- -// [SECTION] Widgets: PlotLines, PlotHistogram -//------------------------------------------------------------------------- -// - PlotEx() [Internal] -// - PlotLines() -// - PlotHistogram() -//------------------------------------------------------------------------- - -void ImGui::PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 frame_size) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return; - - ImGuiContext& g = *GImGui; - const ImGuiStyle& style = g.Style; - const ImGuiID id = window->GetID(label); - - const ImVec2 label_size = CalcTextSize(label, NULL, true); - if (frame_size.x == 0.0f) - frame_size.x = CalcItemWidth(); - if (frame_size.y == 0.0f) - frame_size.y = label_size.y + (style.FramePadding.y * 2); - - const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + frame_size); - const ImRect inner_bb(frame_bb.Min + style.FramePadding, frame_bb.Max - style.FramePadding); - const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0)); - ItemSize(total_bb, style.FramePadding.y); - if (!ItemAdd(total_bb, 0, &frame_bb)) - return; - const bool hovered = ItemHoverable(frame_bb, id); - - // Determine scale from values if not specified - if (scale_min == FLT_MAX || scale_max == FLT_MAX) - { - float v_min = FLT_MAX; - float v_max = -FLT_MAX; - for (int i = 0; i < values_count; i++) - { - const float v = values_getter(data, i); - if (v != v) // Ignore NaN values - continue; - v_min = ImMin(v_min, v); - v_max = ImMax(v_max, v); - } - if (scale_min == FLT_MAX) - scale_min = v_min; - if (scale_max == FLT_MAX) - scale_max = v_max; - } - - RenderFrame(frame_bb.Min, frame_bb.Max, GetColorU32(ImGuiCol_FrameBg), true, style.FrameRounding); - - const int values_count_min = (plot_type == ImGuiPlotType_Lines) ? 2 : 1; - if (values_count >= values_count_min) - { - int res_w = ImMin((int)frame_size.x, values_count) + ((plot_type == ImGuiPlotType_Lines) ? -1 : 0); - int item_count = values_count + ((plot_type == ImGuiPlotType_Lines) ? -1 : 0); - - // Tooltip on hover - int v_hovered = -1; - if (hovered && inner_bb.Contains(g.IO.MousePos)) - { - const float t = ImClamp((g.IO.MousePos.x - inner_bb.Min.x) / (inner_bb.Max.x - inner_bb.Min.x), 0.0f, 0.9999f); - const int v_idx = (int)(t * item_count); - IM_ASSERT(v_idx >= 0 && v_idx < values_count); - - const float v0 = values_getter(data, (v_idx + values_offset) % values_count); - const float v1 = values_getter(data, (v_idx + 1 + values_offset) % values_count); - if (plot_type == ImGuiPlotType_Lines) - SetTooltip("%d: %8.4g\n%d: %8.4g", v_idx, v0, v_idx+1, v1); - else if (plot_type == ImGuiPlotType_Histogram) - SetTooltip("%d: %8.4g", v_idx, v0); - v_hovered = v_idx; - } - - const float t_step = 1.0f / (float)res_w; - const float inv_scale = (scale_min == scale_max) ? 0.0f : (1.0f / (scale_max - scale_min)); - - float v0 = values_getter(data, (0 + values_offset) % values_count); - float t0 = 0.0f; - ImVec2 tp0 = ImVec2( t0, 1.0f - ImSaturate((v0 - scale_min) * inv_scale) ); // Point in the normalized space of our target rectangle - float histogram_zero_line_t = (scale_min * scale_max < 0.0f) ? (-scale_min * inv_scale) : (scale_min < 0.0f ? 0.0f : 1.0f); // Where does the zero line stands - - const ImU32 col_base = GetColorU32((plot_type == ImGuiPlotType_Lines) ? ImGuiCol_PlotLines : ImGuiCol_PlotHistogram); - const ImU32 col_hovered = GetColorU32((plot_type == ImGuiPlotType_Lines) ? ImGuiCol_PlotLinesHovered : ImGuiCol_PlotHistogramHovered); - - for (int n = 0; n < res_w; n++) - { - const float t1 = t0 + t_step; - const int v1_idx = (int)(t0 * item_count + 0.5f); - IM_ASSERT(v1_idx >= 0 && v1_idx < values_count); - const float v1 = values_getter(data, (v1_idx + values_offset + 1) % values_count); - const ImVec2 tp1 = ImVec2( t1, 1.0f - ImSaturate((v1 - scale_min) * inv_scale) ); - - // NB: Draw calls are merged together by the DrawList system. Still, we should render our batch are lower level to save a bit of CPU. - ImVec2 pos0 = ImLerp(inner_bb.Min, inner_bb.Max, tp0); - ImVec2 pos1 = ImLerp(inner_bb.Min, inner_bb.Max, (plot_type == ImGuiPlotType_Lines) ? tp1 : ImVec2(tp1.x, histogram_zero_line_t)); - if (plot_type == ImGuiPlotType_Lines) - { - window->DrawList->AddLine(pos0, pos1, v_hovered == v1_idx ? col_hovered : col_base); - } - else if (plot_type == ImGuiPlotType_Histogram) - { - if (pos1.x >= pos0.x + 2.0f) - pos1.x -= 1.0f; - window->DrawList->AddRectFilled(pos0, pos1, v_hovered == v1_idx ? col_hovered : col_base); - } - - t0 = t1; - tp0 = tp1; - } - } - - // Text overlay - if (overlay_text) - RenderTextClipped(ImVec2(frame_bb.Min.x, frame_bb.Min.y + style.FramePadding.y), frame_bb.Max, overlay_text, NULL, NULL, ImVec2(0.5f,0.0f)); - - if (label_size.x > 0.0f) - RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, inner_bb.Min.y), label); -} - -struct ImGuiPlotArrayGetterData -{ - const float* Values; - int Stride; - - ImGuiPlotArrayGetterData(const float* values, int stride) { Values = values; Stride = stride; } -}; - -static float Plot_ArrayGetter(void* data, int idx) -{ - ImGuiPlotArrayGetterData* plot_data = (ImGuiPlotArrayGetterData*)data; - const float v = *(const float*)(const void*)((const unsigned char*)plot_data->Values + (size_t)idx * plot_data->Stride); - return v; -} - -void ImGui::PlotLines(const char* label, const float* values, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 graph_size, int stride) -{ - ImGuiPlotArrayGetterData data(values, stride); - PlotEx(ImGuiPlotType_Lines, label, &Plot_ArrayGetter, (void*)&data, values_count, values_offset, overlay_text, scale_min, scale_max, graph_size); -} - -void ImGui::PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 graph_size) -{ - PlotEx(ImGuiPlotType_Lines, label, values_getter, data, values_count, values_offset, overlay_text, scale_min, scale_max, graph_size); -} - -void ImGui::PlotHistogram(const char* label, const float* values, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 graph_size, int stride) -{ - ImGuiPlotArrayGetterData data(values, stride); - PlotEx(ImGuiPlotType_Histogram, label, &Plot_ArrayGetter, (void*)&data, values_count, values_offset, overlay_text, scale_min, scale_max, graph_size); -} - -void ImGui::PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 graph_size) -{ - PlotEx(ImGuiPlotType_Histogram, label, values_getter, data, values_count, values_offset, overlay_text, scale_min, scale_max, graph_size); -} - -//------------------------------------------------------------------------- -// [SECTION] Widgets: Value helpers -// Those is not very useful, legacy API. -//------------------------------------------------------------------------- -// - Value() -//------------------------------------------------------------------------- - -void ImGui::Value(const char* prefix, bool b) -{ - Text("%s: %s", prefix, (b ? "true" : "false")); -} - -void ImGui::Value(const char* prefix, int v) -{ - Text("%s: %d", prefix, v); -} - -void ImGui::Value(const char* prefix, unsigned int v) -{ - Text("%s: %d", prefix, v); -} - -void ImGui::Value(const char* prefix, float v, const char* float_format) -{ - if (float_format) - { - char fmt[64]; - ImFormatString(fmt, IM_ARRAYSIZE(fmt), "%%s: %s", float_format); - Text(fmt, prefix, v); - } - else - { - Text("%s: %.3f", prefix, v); - } -} - -//------------------------------------------------------------------------- -// [SECTION] MenuItem, BeginMenu, EndMenu, etc. -//------------------------------------------------------------------------- -// - ImGuiMenuColumns [Internal] -// - BeginMenuBar() -// - EndMenuBar() -// - BeginMainMenuBar() -// - EndMainMenuBar() -// - BeginMenu() -// - EndMenu() -// - MenuItem() -//------------------------------------------------------------------------- - -// Helpers for internal use -ImGuiMenuColumns::ImGuiMenuColumns() -{ - Spacing = Width = NextWidth = 0.0f; - memset(Pos, 0, sizeof(Pos)); - memset(NextWidths, 0, sizeof(NextWidths)); -} - -void ImGuiMenuColumns::Update(int count, float spacing, bool clear) -{ - IM_ASSERT(count == IM_ARRAYSIZE(Pos)); - IM_UNUSED(count); - Width = NextWidth = 0.0f; - Spacing = spacing; - if (clear) - memset(NextWidths, 0, sizeof(NextWidths)); - for (int i = 0; i < IM_ARRAYSIZE(Pos); i++) - { - if (i > 0 && NextWidths[i] > 0.0f) - Width += Spacing; - Pos[i] = IM_FLOOR(Width); - Width += NextWidths[i]; - NextWidths[i] = 0.0f; - } -} - -float ImGuiMenuColumns::DeclColumns(float w0, float w1, float w2) // not using va_arg because they promote float to double -{ - NextWidth = 0.0f; - NextWidths[0] = ImMax(NextWidths[0], w0); - NextWidths[1] = ImMax(NextWidths[1], w1); - NextWidths[2] = ImMax(NextWidths[2], w2); - for (int i = 0; i < IM_ARRAYSIZE(Pos); i++) - NextWidth += NextWidths[i] + ((i > 0 && NextWidths[i] > 0.0f) ? Spacing : 0.0f); - return ImMax(Width, NextWidth); -} - -float ImGuiMenuColumns::CalcExtraSpace(float avail_w) const -{ - return ImMax(0.0f, avail_w - Width); -} - -// FIXME: Provided a rectangle perhaps e.g. a BeginMenuBarEx() could be used anywhere.. -// Currently the main responsibility of this function being to setup clip-rect + horizontal layout + menu navigation layer. -// Ideally we also want this to be responsible for claiming space out of the main window scrolling rectangle, in which case ImGuiWindowFlags_MenuBar will become unnecessary. -// Then later the same system could be used for multiple menu-bars, scrollbars, side-bars. -bool ImGui::BeginMenuBar() -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - if (!(window->Flags & ImGuiWindowFlags_MenuBar)) - return false; - - IM_ASSERT(!window->DC.MenuBarAppending); - BeginGroup(); // Backup position on layer 0 // FIXME: Misleading to use a group for that backup/restore - PushID("##menubar"); - - // We don't clip with current window clipping rectangle as it is already set to the area below. However we clip with window full rect. - // We remove 1 worth of rounding to Max.x to that text in long menus and small windows don't tend to display over the lower-right rounded area, which looks particularly glitchy. - ImRect bar_rect = window->MenuBarRect(); - ImRect clip_rect(IM_ROUND(bar_rect.Min.x + window->WindowBorderSize), IM_ROUND(bar_rect.Min.y + window->WindowBorderSize), IM_ROUND(ImMax(bar_rect.Min.x, bar_rect.Max.x - ImMax(window->WindowRounding, window->WindowBorderSize))), IM_ROUND(bar_rect.Max.y)); - clip_rect.ClipWith(window->OuterRectClipped); - PushClipRect(clip_rect.Min, clip_rect.Max, false); - - window->DC.CursorPos = ImVec2(bar_rect.Min.x + window->DC.MenuBarOffset.x, bar_rect.Min.y + window->DC.MenuBarOffset.y); - window->DC.LayoutType = ImGuiLayoutType_Horizontal; - window->DC.NavLayerCurrent = ImGuiNavLayer_Menu; - window->DC.NavLayerCurrentMask = (1 << ImGuiNavLayer_Menu); - window->DC.MenuBarAppending = true; - AlignTextToFramePadding(); - return true; -} - -void ImGui::EndMenuBar() -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return; - ImGuiContext& g = *GImGui; - - // Nav: When a move request within one of our child menu failed, capture the request to navigate among our siblings. - if (NavMoveRequestButNoResultYet() && (g.NavMoveDir == ImGuiDir_Left || g.NavMoveDir == ImGuiDir_Right) && (g.NavWindow->Flags & ImGuiWindowFlags_ChildMenu)) - { - ImGuiWindow* nav_earliest_child = g.NavWindow; - while (nav_earliest_child->ParentWindow && (nav_earliest_child->ParentWindow->Flags & ImGuiWindowFlags_ChildMenu)) - nav_earliest_child = nav_earliest_child->ParentWindow; - if (nav_earliest_child->ParentWindow == window && nav_earliest_child->DC.ParentLayoutType == ImGuiLayoutType_Horizontal && g.NavMoveRequestForward == ImGuiNavForward_None) - { - // To do so we claim focus back, restore NavId and then process the movement request for yet another frame. - // This involve a one-frame delay which isn't very problematic in this situation. We could remove it by scoring in advance for multiple window (probably not worth the hassle/cost) - const ImGuiNavLayer layer = ImGuiNavLayer_Menu; - IM_ASSERT(window->DC.NavLayerActiveMaskNext & (1 << layer)); // Sanity check - FocusWindow(window); - SetNavIDWithRectRel(window->NavLastIds[layer], layer, 0, window->NavRectRel[layer]); - g.NavLayer = layer; - g.NavDisableHighlight = true; // Hide highlight for the current frame so we don't see the intermediary selection. - g.NavMoveRequestForward = ImGuiNavForward_ForwardQueued; - NavMoveRequestCancel(); - } - } - - IM_ASSERT(window->Flags & ImGuiWindowFlags_MenuBar); - IM_ASSERT(window->DC.MenuBarAppending); - PopClipRect(); - PopID(); - window->DC.MenuBarOffset.x = window->DC.CursorPos.x - window->MenuBarRect().Min.x; // Save horizontal position so next append can reuse it. This is kinda equivalent to a per-layer CursorPos. - window->DC.GroupStack.back().EmitItem = false; - EndGroup(); // Restore position on layer 0 - window->DC.LayoutType = ImGuiLayoutType_Vertical; - window->DC.NavLayerCurrent = ImGuiNavLayer_Main; - window->DC.NavLayerCurrentMask = (1 << ImGuiNavLayer_Main); - window->DC.MenuBarAppending = false; -} - -// For the main menu bar, which cannot be moved, we honor g.Style.DisplaySafeAreaPadding to ensure text can be visible on a TV set. -bool ImGui::BeginMainMenuBar() -{ - ImGuiContext& g = *GImGui; - g.NextWindowData.MenuBarOffsetMinVal = ImVec2(g.Style.DisplaySafeAreaPadding.x, ImMax(g.Style.DisplaySafeAreaPadding.y - g.Style.FramePadding.y, 0.0f)); - SetNextWindowPos(ImVec2(0.0f, 0.0f)); - SetNextWindowSize(ImVec2(g.IO.DisplaySize.x, g.NextWindowData.MenuBarOffsetMinVal.y + g.FontBaseSize + g.Style.FramePadding.y)); - PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f); - PushStyleVar(ImGuiStyleVar_WindowMinSize, ImVec2(0, 0)); - ImGuiWindowFlags window_flags = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_MenuBar; - bool is_open = Begin("##MainMenuBar", NULL, window_flags) && BeginMenuBar(); - PopStyleVar(2); - g.NextWindowData.MenuBarOffsetMinVal = ImVec2(0.0f, 0.0f); - if (!is_open) - { - End(); - return false; - } - return true; //-V1020 -} - -void ImGui::EndMainMenuBar() -{ - EndMenuBar(); - - // When the user has left the menu layer (typically: closed menus through activation of an item), we restore focus to the previous window - // FIXME: With this strategy we won't be able to restore a NULL focus. - ImGuiContext& g = *GImGui; - if (g.CurrentWindow == g.NavWindow && g.NavLayer == 0 && !g.NavAnyRequest) - FocusTopMostWindowUnderOne(g.NavWindow, NULL); - - End(); -} - -bool ImGui::BeginMenu(const char* label, bool enabled) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - - ImGuiContext& g = *GImGui; - const ImGuiStyle& style = g.Style; - const ImGuiID id = window->GetID(label); - bool menu_is_open = IsPopupOpen(id); - - // Sub-menus are ChildWindow so that mouse can be hovering across them (otherwise top-most popup menu would steal focus and not allow hovering on parent menu) - ImGuiWindowFlags flags = ImGuiWindowFlags_ChildMenu | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoNavFocus; - if (window->Flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_ChildMenu)) - flags |= ImGuiWindowFlags_ChildWindow; - - // If a menu with same the ID was already submitted, we will append to it, matching the behavior of Begin(). - // We are relying on a O(N) search - so O(N log N) over the frame - which seems like the most efficient for the expected small amount of BeginMenu() calls per frame. - // If somehow this is ever becoming a problem we can switch to use e.g. a ImGuiStorager mapping key to last frame used. - if (g.MenusIdSubmittedThisFrame.contains(id)) - { - if (menu_is_open) - menu_is_open = BeginPopupEx(id, flags); // menu_is_open can be 'false' when the popup is completely clipped (e.g. zero size display) - else - g.NextWindowData.ClearFlags(); // we behave like Begin() and need to consume those values - return menu_is_open; - } - - // Tag menu as used. Next time BeginMenu() with same ID is called it will append to existing menu - g.MenusIdSubmittedThisFrame.push_back(id); - - ImVec2 label_size = CalcTextSize(label, NULL, true); - bool pressed; - bool menuset_is_open = !(window->Flags & ImGuiWindowFlags_Popup) && (g.OpenPopupStack.Size > g.BeginPopupStack.Size && g.OpenPopupStack[g.BeginPopupStack.Size].OpenParentId == window->IDStack.back()); - ImGuiWindow* backed_nav_window = g.NavWindow; - if (menuset_is_open) - g.NavWindow = window; // Odd hack to allow hovering across menus of a same menu-set (otherwise we wouldn't be able to hover parent) - - // The reference position stored in popup_pos will be used by Begin() to find a suitable position for the child menu, - // However the final position is going to be different! It is choosen by FindBestWindowPosForPopup(). - // e.g. Menus tend to overlap each other horizontally to amplify relative Z-ordering. - ImVec2 popup_pos, pos = window->DC.CursorPos; - if (window->DC.LayoutType == ImGuiLayoutType_Horizontal) - { - // Menu inside an horizontal menu bar - // Selectable extend their highlight by half ItemSpacing in each direction. - // For ChildMenu, the popup position will be overwritten by the call to FindBestWindowPosForPopup() in Begin() - popup_pos = ImVec2(pos.x - 1.0f - IM_FLOOR(style.ItemSpacing.x * 0.5f), pos.y - style.FramePadding.y + window->MenuBarHeight()); - window->DC.CursorPos.x += IM_FLOOR(style.ItemSpacing.x * 0.5f); - PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(style.ItemSpacing.x * 2.0f, style.ItemSpacing.y)); - float w = label_size.x; - pressed = Selectable(label, menu_is_open, ImGuiSelectableFlags_NoHoldingActiveID | ImGuiSelectableFlags_SelectOnClick | ImGuiSelectableFlags_DontClosePopups | (!enabled ? ImGuiSelectableFlags_Disabled : 0), ImVec2(w, 0.0f)); - PopStyleVar(); - window->DC.CursorPos.x += IM_FLOOR(style.ItemSpacing.x * (-1.0f + 0.5f)); // -1 spacing to compensate the spacing added when Selectable() did a SameLine(). It would also work to call SameLine() ourselves after the PopStyleVar(). - } - else - { - // Menu inside a menu - // (In a typical menu window where all items are BeginMenu() or MenuItem() calls, extra_w will always be 0.0f. - // Only when they are other items sticking out we're going to add spacing, yet only register minimum width into the layout system. - popup_pos = ImVec2(pos.x, pos.y - style.WindowPadding.y); - float min_w = window->DC.MenuColumns.DeclColumns(label_size.x, 0.0f, IM_FLOOR(g.FontSize * 1.20f)); // Feedback to next frame - float extra_w = ImMax(0.0f, GetContentRegionAvail().x - min_w); - pressed = Selectable(label, menu_is_open, ImGuiSelectableFlags_NoHoldingActiveID | ImGuiSelectableFlags_SelectOnClick | ImGuiSelectableFlags_DontClosePopups | ImGuiSelectableFlags_SpanAvailWidth | (!enabled ? ImGuiSelectableFlags_Disabled : 0), ImVec2(min_w, 0.0f)); - ImU32 text_col = GetColorU32(enabled ? ImGuiCol_Text : ImGuiCol_TextDisabled); - RenderArrow(window->DrawList, pos + ImVec2(window->DC.MenuColumns.Pos[2] + extra_w + g.FontSize * 0.30f, 0.0f), text_col, ImGuiDir_Right); - } - - const bool hovered = enabled && ItemHoverable(window->DC.LastItemRect, id); - if (menuset_is_open) - g.NavWindow = backed_nav_window; - - bool want_open = false; - bool want_close = false; - if (window->DC.LayoutType == ImGuiLayoutType_Vertical) // (window->Flags & (ImGuiWindowFlags_Popup|ImGuiWindowFlags_ChildMenu)) - { - // Close menu when not hovering it anymore unless we are moving roughly in the direction of the menu - // Implement http://bjk5.com/post/44698559168/breaking-down-amazons-mega-dropdown to avoid using timers, so menus feels more reactive. - bool moving_toward_other_child_menu = false; - - ImGuiWindow* child_menu_window = (g.BeginPopupStack.Size < g.OpenPopupStack.Size && g.OpenPopupStack[g.BeginPopupStack.Size].SourceWindow == window) ? g.OpenPopupStack[g.BeginPopupStack.Size].Window : NULL; - if (g.HoveredWindow == window && child_menu_window != NULL && !(window->Flags & ImGuiWindowFlags_MenuBar)) - { - // FIXME-DPI: Values should be derived from a master "scale" factor. - ImRect next_window_rect = child_menu_window->Rect(); - ImVec2 ta = g.IO.MousePos - g.IO.MouseDelta; - ImVec2 tb = (window->Pos.x < child_menu_window->Pos.x) ? next_window_rect.GetTL() : next_window_rect.GetTR(); - ImVec2 tc = (window->Pos.x < child_menu_window->Pos.x) ? next_window_rect.GetBL() : next_window_rect.GetBR(); - float extra = ImClamp(ImFabs(ta.x - tb.x) * 0.30f, 5.0f, 30.0f); // add a bit of extra slack. - ta.x += (window->Pos.x < child_menu_window->Pos.x) ? -0.5f : +0.5f; // to avoid numerical issues - tb.y = ta.y + ImMax((tb.y - extra) - ta.y, -100.0f); // triangle is maximum 200 high to limit the slope and the bias toward large sub-menus // FIXME: Multiply by fb_scale? - tc.y = ta.y + ImMin((tc.y + extra) - ta.y, +100.0f); - moving_toward_other_child_menu = ImTriangleContainsPoint(ta, tb, tc, g.IO.MousePos); - //GetForegroundDrawList()->AddTriangleFilled(ta, tb, tc, moving_within_opened_triangle ? IM_COL32(0,128,0,128) : IM_COL32(128,0,0,128)); // [DEBUG] - } - if (menu_is_open && !hovered && g.HoveredWindow == window && g.HoveredIdPreviousFrame != 0 && g.HoveredIdPreviousFrame != id && !moving_toward_other_child_menu) - want_close = true; - - if (!menu_is_open && hovered && pressed) // Click to open - want_open = true; - else if (!menu_is_open && hovered && !moving_toward_other_child_menu) // Hover to open - want_open = true; - - if (g.NavActivateId == id) - { - want_close = menu_is_open; - want_open = !menu_is_open; - } - if (g.NavId == id && g.NavMoveRequest && g.NavMoveDir == ImGuiDir_Right) // Nav-Right to open - { - want_open = true; - NavMoveRequestCancel(); - } - } - else - { - // Menu bar - if (menu_is_open && pressed && menuset_is_open) // Click an open menu again to close it - { - want_close = true; - want_open = menu_is_open = false; - } - else if (pressed || (hovered && menuset_is_open && !menu_is_open)) // First click to open, then hover to open others - { - want_open = true; - } - else if (g.NavId == id && g.NavMoveRequest && g.NavMoveDir == ImGuiDir_Down) // Nav-Down to open - { - want_open = true; - NavMoveRequestCancel(); - } - } - - if (!enabled) // explicitly close if an open menu becomes disabled, facilitate users code a lot in pattern such as 'if (BeginMenu("options", has_object)) { ..use object.. }' - want_close = true; - if (want_close && IsPopupOpen(id)) - ClosePopupToLevel(g.BeginPopupStack.Size, true); - - IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags | ImGuiItemStatusFlags_Openable | (menu_is_open ? ImGuiItemStatusFlags_Opened : 0)); - - if (!menu_is_open && want_open && g.OpenPopupStack.Size > g.BeginPopupStack.Size) - { - // Don't recycle same menu level in the same frame, first close the other menu and yield for a frame. - OpenPopup(label); - return false; - } - - menu_is_open |= want_open; - if (want_open) - OpenPopup(label); - - if (menu_is_open) - { - SetNextWindowPos(popup_pos, ImGuiCond_Always); - menu_is_open = BeginPopupEx(id, flags); // menu_is_open can be 'false' when the popup is completely clipped (e.g. zero size display) - } - else - { - g.NextWindowData.ClearFlags(); // We behave like Begin() and need to consume those values - } - - return menu_is_open; -} - -void ImGui::EndMenu() -{ - // Nav: When a left move request _within our child menu_ failed, close ourselves (the _parent_ menu). - // A menu doesn't close itself because EndMenuBar() wants the catch the last Left<>Right inputs. - // However, it means that with the current code, a BeginMenu() from outside another menu or a menu-bar won't be closable with the Left direction. - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - if (g.NavWindow && g.NavWindow->ParentWindow == window && g.NavMoveDir == ImGuiDir_Left && NavMoveRequestButNoResultYet() && window->DC.LayoutType == ImGuiLayoutType_Vertical) - { - ClosePopupToLevel(g.BeginPopupStack.Size, true); - NavMoveRequestCancel(); - } - - EndPopup(); -} - -bool ImGui::MenuItem(const char* label, const char* shortcut, bool selected, bool enabled) -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems) - return false; - - ImGuiContext& g = *GImGui; - ImGuiStyle& style = g.Style; - ImVec2 pos = window->DC.CursorPos; - ImVec2 label_size = CalcTextSize(label, NULL, true); - - // We've been using the equivalent of ImGuiSelectableFlags_SetNavIdOnHover on all Selectable() since early Nav system days (commit 43ee5d73), - // but I am unsure whether this should be kept at all. For now moved it to be an opt-in feature used by menus only. - ImGuiSelectableFlags flags = ImGuiSelectableFlags_SelectOnRelease | ImGuiSelectableFlags_SetNavIdOnHover | (enabled ? 0 : ImGuiSelectableFlags_Disabled); - bool pressed; - if (window->DC.LayoutType == ImGuiLayoutType_Horizontal) - { - // Mimic the exact layout spacing of BeginMenu() to allow MenuItem() inside a menu bar, which is a little misleading but may be useful - // Note that in this situation we render neither the shortcut neither the selected tick mark - float w = label_size.x; - window->DC.CursorPos.x += IM_FLOOR(style.ItemSpacing.x * 0.5f); - PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(style.ItemSpacing.x * 2.0f, style.ItemSpacing.y)); - pressed = Selectable(label, false, flags, ImVec2(w, 0.0f)); - PopStyleVar(); - window->DC.CursorPos.x += IM_FLOOR(style.ItemSpacing.x * (-1.0f + 0.5f)); // -1 spacing to compensate the spacing added when Selectable() did a SameLine(). It would also work to call SameLine() ourselves after the PopStyleVar(). - } - else - { - // Menu item inside a vertical menu - // (In a typical menu window where all items are BeginMenu() or MenuItem() calls, extra_w will always be 0.0f. - // Only when they are other items sticking out we're going to add spacing, yet only register minimum width into the layout system. - float shortcut_w = shortcut ? CalcTextSize(shortcut, NULL).x : 0.0f; - float min_w = window->DC.MenuColumns.DeclColumns(label_size.x, shortcut_w, IM_FLOOR(g.FontSize * 1.20f)); // Feedback for next frame - float extra_w = ImMax(0.0f, GetContentRegionAvail().x - min_w); - pressed = Selectable(label, false, flags | ImGuiSelectableFlags_SpanAvailWidth, ImVec2(min_w, 0.0f)); - if (shortcut_w > 0.0f) - { - PushStyleColor(ImGuiCol_Text, g.Style.Colors[ImGuiCol_TextDisabled]); - RenderText(pos + ImVec2(window->DC.MenuColumns.Pos[1] + extra_w, 0.0f), shortcut, NULL, false); - PopStyleColor(); - } - if (selected) - RenderCheckMark(window->DrawList, pos + ImVec2(window->DC.MenuColumns.Pos[2] + extra_w + g.FontSize * 0.40f, g.FontSize * 0.134f * 0.5f), GetColorU32(enabled ? ImGuiCol_Text : ImGuiCol_TextDisabled), g.FontSize * 0.866f); - } - - IMGUI_TEST_ENGINE_ITEM_INFO(window->DC.LastItemId, label, window->DC.ItemFlags | ImGuiItemStatusFlags_Checkable | (selected ? ImGuiItemStatusFlags_Checked : 0)); - return pressed; -} - -bool ImGui::MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled) -{ - if (MenuItem(label, shortcut, p_selected ? *p_selected : false, enabled)) - { - if (p_selected) - *p_selected = !*p_selected; - return true; - } - return false; -} - -//------------------------------------------------------------------------- -// [SECTION] Widgets: BeginTabBar, EndTabBar, etc. -//------------------------------------------------------------------------- -// - BeginTabBar() -// - BeginTabBarEx() [Internal] -// - EndTabBar() -// - TabBarLayout() [Internal] -// - TabBarCalcTabID() [Internal] -// - TabBarCalcMaxTabWidth() [Internal] -// - TabBarFindTabById() [Internal] -// - TabBarRemoveTab() [Internal] -// - TabBarCloseTab() [Internal] -// - TabBarScrollClamp()v -// - TabBarScrollToTab() [Internal] -// - TabBarQueueChangeTabOrder() [Internal] -// - TabBarScrollingButtons() [Internal] -// - TabBarTabListPopupButton() [Internal] -//------------------------------------------------------------------------- - -namespace ImGui -{ - static void TabBarLayout(ImGuiTabBar* tab_bar); - static ImU32 TabBarCalcTabID(ImGuiTabBar* tab_bar, const char* label); - static float TabBarCalcMaxTabWidth(); - static float TabBarScrollClamp(ImGuiTabBar* tab_bar, float scrolling); - static void TabBarScrollToTab(ImGuiTabBar* tab_bar, ImGuiTabItem* tab); - static ImGuiTabItem* TabBarScrollingButtons(ImGuiTabBar* tab_bar); - static ImGuiTabItem* TabBarTabListPopupButton(ImGuiTabBar* tab_bar); -} - -ImGuiTabBar::ImGuiTabBar() -{ - ID = 0; - SelectedTabId = NextSelectedTabId = VisibleTabId = 0; - CurrFrameVisible = PrevFrameVisible = -1; - LastTabContentHeight = 0.0f; - OffsetMax = OffsetMaxIdeal = OffsetNextTab = 0.0f; - ScrollingAnim = ScrollingTarget = ScrollingTargetDistToVisibility = ScrollingSpeed = 0.0f; - Flags = ImGuiTabBarFlags_None; - ReorderRequestTabId = 0; - ReorderRequestDir = 0; - WantLayout = VisibleTabWasSubmitted = false; - LastTabItemIdx = -1; -} - -static int IMGUI_CDECL TabItemComparerByVisibleOffset(const void* lhs, const void* rhs) -{ - const ImGuiTabItem* a = (const ImGuiTabItem*)lhs; - const ImGuiTabItem* b = (const ImGuiTabItem*)rhs; - return (int)(a->Offset - b->Offset); -} - -static ImGuiTabBar* GetTabBarFromTabBarRef(const ImGuiPtrOrIndex& ref) -{ - ImGuiContext& g = *GImGui; - return ref.Ptr ? (ImGuiTabBar*)ref.Ptr : g.TabBars.GetByIndex(ref.Index); -} - -static ImGuiPtrOrIndex GetTabBarRefFromTabBar(ImGuiTabBar* tab_bar) -{ - ImGuiContext& g = *GImGui; - if (g.TabBars.Contains(tab_bar)) - return ImGuiPtrOrIndex(g.TabBars.GetIndex(tab_bar)); - return ImGuiPtrOrIndex(tab_bar); -} - -bool ImGui::BeginTabBar(const char* str_id, ImGuiTabBarFlags flags) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - if (window->SkipItems) - return false; - - ImGuiID id = window->GetID(str_id); - ImGuiTabBar* tab_bar = g.TabBars.GetOrAddByKey(id); - ImRect tab_bar_bb = ImRect(window->DC.CursorPos.x, window->DC.CursorPos.y, window->WorkRect.Max.x, window->DC.CursorPos.y + g.FontSize + g.Style.FramePadding.y * 2); - tab_bar->ID = id; - return BeginTabBarEx(tab_bar, tab_bar_bb, flags | ImGuiTabBarFlags_IsFocused); -} - -bool ImGui::BeginTabBarEx(ImGuiTabBar* tab_bar, const ImRect& tab_bar_bb, ImGuiTabBarFlags flags) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - if (window->SkipItems) - return false; - - if ((flags & ImGuiTabBarFlags_DockNode) == 0) - PushOverrideID(tab_bar->ID); - - // Add to stack - g.CurrentTabBarStack.push_back(GetTabBarRefFromTabBar(tab_bar)); - g.CurrentTabBar = tab_bar; - - if (tab_bar->CurrFrameVisible == g.FrameCount) - { - //IMGUI_DEBUG_LOG("BeginTabBarEx already called this frame\n", g.FrameCount); - IM_ASSERT(0); - return true; - } - - // When toggling back from ordered to manually-reorderable, shuffle tabs to enforce the last visible order. - // Otherwise, the most recently inserted tabs would move at the end of visible list which can be a little too confusing or magic for the user. - if ((flags & ImGuiTabBarFlags_Reorderable) && !(tab_bar->Flags & ImGuiTabBarFlags_Reorderable) && tab_bar->Tabs.Size > 1 && tab_bar->PrevFrameVisible != -1) - ImQsort(tab_bar->Tabs.Data, tab_bar->Tabs.Size, sizeof(ImGuiTabItem), TabItemComparerByVisibleOffset); - - // Flags - if ((flags & ImGuiTabBarFlags_FittingPolicyMask_) == 0) - flags |= ImGuiTabBarFlags_FittingPolicyDefault_; - - tab_bar->Flags = flags; - tab_bar->BarRect = tab_bar_bb; - tab_bar->WantLayout = true; // Layout will be done on the first call to ItemTab() - tab_bar->PrevFrameVisible = tab_bar->CurrFrameVisible; - tab_bar->CurrFrameVisible = g.FrameCount; - tab_bar->FramePadding = g.Style.FramePadding; - - // Layout - ItemSize(ImVec2(tab_bar->OffsetMaxIdeal, tab_bar->BarRect.GetHeight()), tab_bar->FramePadding.y); - window->DC.CursorPos.x = tab_bar->BarRect.Min.x; - - // Draw separator - const ImU32 col = GetColorU32((flags & ImGuiTabBarFlags_IsFocused) ? ImGuiCol_TabActive : ImGuiCol_TabUnfocusedActive); - const float y = tab_bar->BarRect.Max.y - 1.0f; - { - const float separator_min_x = tab_bar->BarRect.Min.x - IM_FLOOR(window->WindowPadding.x * 0.5f); - const float separator_max_x = tab_bar->BarRect.Max.x + IM_FLOOR(window->WindowPadding.x * 0.5f); - window->DrawList->AddLine(ImVec2(separator_min_x, y), ImVec2(separator_max_x, y), col, 1.0f); - } - return true; -} - -void ImGui::EndTabBar() -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - if (window->SkipItems) - return; - - ImGuiTabBar* tab_bar = g.CurrentTabBar; - if (tab_bar == NULL) - { - IM_ASSERT_USER_ERROR(tab_bar != NULL, "Mismatched BeginTabBar()/EndTabBar()!"); - return; - } - if (tab_bar->WantLayout) - TabBarLayout(tab_bar); - - // Restore the last visible height if no tab is visible, this reduce vertical flicker/movement when a tabs gets removed without calling SetTabItemClosed(). - const bool tab_bar_appearing = (tab_bar->PrevFrameVisible + 1 < g.FrameCount); - if (tab_bar->VisibleTabWasSubmitted || tab_bar->VisibleTabId == 0 || tab_bar_appearing) - tab_bar->LastTabContentHeight = ImMax(window->DC.CursorPos.y - tab_bar->BarRect.Max.y, 0.0f); - else - window->DC.CursorPos.y = tab_bar->BarRect.Max.y + tab_bar->LastTabContentHeight; - - if ((tab_bar->Flags & ImGuiTabBarFlags_DockNode) == 0) - PopID(); - - g.CurrentTabBarStack.pop_back(); - g.CurrentTabBar = g.CurrentTabBarStack.empty() ? NULL : GetTabBarFromTabBarRef(g.CurrentTabBarStack.back()); -} - -// This is called only once a frame before by the first call to ItemTab() -// The reason we're not calling it in BeginTabBar() is to leave a chance to the user to call the SetTabItemClosed() functions. -static void ImGui::TabBarLayout(ImGuiTabBar* tab_bar) -{ - ImGuiContext& g = *GImGui; - tab_bar->WantLayout = false; - - // Garbage collect - int tab_dst_n = 0; - for (int tab_src_n = 0; tab_src_n < tab_bar->Tabs.Size; tab_src_n++) - { - ImGuiTabItem* tab = &tab_bar->Tabs[tab_src_n]; - if (tab->LastFrameVisible < tab_bar->PrevFrameVisible) - { - if (tab->ID == tab_bar->SelectedTabId) - tab_bar->SelectedTabId = 0; - continue; - } - if (tab_dst_n != tab_src_n) - tab_bar->Tabs[tab_dst_n] = tab_bar->Tabs[tab_src_n]; - tab_dst_n++; - } - if (tab_bar->Tabs.Size != tab_dst_n) - tab_bar->Tabs.resize(tab_dst_n); - - // Setup next selected tab - ImGuiID scroll_track_selected_tab_id = 0; - if (tab_bar->NextSelectedTabId) - { - tab_bar->SelectedTabId = tab_bar->NextSelectedTabId; - tab_bar->NextSelectedTabId = 0; - scroll_track_selected_tab_id = tab_bar->SelectedTabId; - } - - // Process order change request (we could probably process it when requested but it's just saner to do it in a single spot). - if (tab_bar->ReorderRequestTabId != 0) - { - if (ImGuiTabItem* tab1 = TabBarFindTabByID(tab_bar, tab_bar->ReorderRequestTabId)) - { - //IM_ASSERT(tab_bar->Flags & ImGuiTabBarFlags_Reorderable); // <- this may happen when using debug tools - int tab2_order = tab_bar->GetTabOrder(tab1) + tab_bar->ReorderRequestDir; - if (tab2_order >= 0 && tab2_order < tab_bar->Tabs.Size) - { - ImGuiTabItem* tab2 = &tab_bar->Tabs[tab2_order]; - ImGuiTabItem item_tmp = *tab1; - *tab1 = *tab2; - *tab2 = item_tmp; - if (tab2->ID == tab_bar->SelectedTabId) - scroll_track_selected_tab_id = tab2->ID; - tab1 = tab2 = NULL; - } - if (tab_bar->Flags & ImGuiTabBarFlags_SaveSettings) - MarkIniSettingsDirty(); - } - tab_bar->ReorderRequestTabId = 0; - } - - // Tab List Popup (will alter tab_bar->BarRect and therefore the available width!) - const bool tab_list_popup_button = (tab_bar->Flags & ImGuiTabBarFlags_TabListPopupButton) != 0; - if (tab_list_popup_button) - if (ImGuiTabItem* tab_to_select = TabBarTabListPopupButton(tab_bar)) // NB: Will alter BarRect.Max.x! - scroll_track_selected_tab_id = tab_bar->SelectedTabId = tab_to_select->ID; - - // Compute ideal widths - g.ShrinkWidthBuffer.resize(tab_bar->Tabs.Size); - float width_total_contents = 0.0f; - ImGuiTabItem* most_recently_selected_tab = NULL; - bool found_selected_tab_id = false; - for (int tab_n = 0; tab_n < tab_bar->Tabs.Size; tab_n++) - { - ImGuiTabItem* tab = &tab_bar->Tabs[tab_n]; - IM_ASSERT(tab->LastFrameVisible >= tab_bar->PrevFrameVisible); - - if (most_recently_selected_tab == NULL || most_recently_selected_tab->LastFrameSelected < tab->LastFrameSelected) - most_recently_selected_tab = tab; - if (tab->ID == tab_bar->SelectedTabId) - found_selected_tab_id = true; - - // Refresh tab width immediately, otherwise changes of style e.g. style.FramePadding.x would noticeably lag in the tab bar. - // Additionally, when using TabBarAddTab() to manipulate tab bar order we occasionally insert new tabs that don't have a width yet, - // and we cannot wait for the next BeginTabItem() call. We cannot compute this width within TabBarAddTab() because font size depends on the active window. - const char* tab_name = tab_bar->GetTabName(tab); - const bool has_close_button = (tab->Flags & ImGuiTabItemFlags_NoCloseButton) ? false : true; - tab->ContentWidth = TabItemCalcSize(tab_name, has_close_button).x; - - width_total_contents += (tab_n > 0 ? g.Style.ItemInnerSpacing.x : 0.0f) + tab->ContentWidth; - - // Store data so we can build an array sorted by width if we need to shrink tabs down - g.ShrinkWidthBuffer[tab_n].Index = tab_n; - g.ShrinkWidthBuffer[tab_n].Width = tab->ContentWidth; - } - - // Compute width - const float initial_offset_x = 0.0f; // g.Style.ItemInnerSpacing.x; - const float width_avail = ImMax(tab_bar->BarRect.GetWidth() - initial_offset_x, 0.0f); - float width_excess = (width_avail < width_total_contents) ? (width_total_contents - width_avail) : 0.0f; - if (width_excess > 0.0f && (tab_bar->Flags & ImGuiTabBarFlags_FittingPolicyResizeDown)) - { - // If we don't have enough room, resize down the largest tabs first - ShrinkWidths(g.ShrinkWidthBuffer.Data, g.ShrinkWidthBuffer.Size, width_excess); - for (int tab_n = 0; tab_n < tab_bar->Tabs.Size; tab_n++) - tab_bar->Tabs[g.ShrinkWidthBuffer[tab_n].Index].Width = IM_FLOOR(g.ShrinkWidthBuffer[tab_n].Width); - } - else - { - const float tab_max_width = TabBarCalcMaxTabWidth(); - for (int tab_n = 0; tab_n < tab_bar->Tabs.Size; tab_n++) - { - ImGuiTabItem* tab = &tab_bar->Tabs[tab_n]; - tab->Width = ImMin(tab->ContentWidth, tab_max_width); - IM_ASSERT(tab->Width > 0.0f); - } - } - - // Layout all active tabs - float offset_x = initial_offset_x; - float offset_x_ideal = offset_x; - tab_bar->OffsetNextTab = offset_x; // This is used by non-reorderable tab bar where the submission order is always honored. - for (int tab_n = 0; tab_n < tab_bar->Tabs.Size; tab_n++) - { - ImGuiTabItem* tab = &tab_bar->Tabs[tab_n]; - tab->Offset = offset_x; - if (scroll_track_selected_tab_id == 0 && g.NavJustMovedToId == tab->ID) - scroll_track_selected_tab_id = tab->ID; - offset_x += tab->Width + g.Style.ItemInnerSpacing.x; - offset_x_ideal += tab->ContentWidth + g.Style.ItemInnerSpacing.x; - } - tab_bar->OffsetMax = ImMax(offset_x - g.Style.ItemInnerSpacing.x, 0.0f); - tab_bar->OffsetMaxIdeal = ImMax(offset_x_ideal - g.Style.ItemInnerSpacing.x, 0.0f); - - // Horizontal scrolling buttons - const bool scrolling_buttons = (tab_bar->OffsetMax > tab_bar->BarRect.GetWidth() && tab_bar->Tabs.Size > 1) && !(tab_bar->Flags & ImGuiTabBarFlags_NoTabListScrollingButtons) && (tab_bar->Flags & ImGuiTabBarFlags_FittingPolicyScroll); - if (scrolling_buttons) - if (ImGuiTabItem* tab_to_select = TabBarScrollingButtons(tab_bar)) // NB: Will alter BarRect.Max.x! - scroll_track_selected_tab_id = tab_bar->SelectedTabId = tab_to_select->ID; - - // If we have lost the selected tab, select the next most recently active one - if (found_selected_tab_id == false) - tab_bar->SelectedTabId = 0; - if (tab_bar->SelectedTabId == 0 && tab_bar->NextSelectedTabId == 0 && most_recently_selected_tab != NULL) - scroll_track_selected_tab_id = tab_bar->SelectedTabId = most_recently_selected_tab->ID; - - // Lock in visible tab - tab_bar->VisibleTabId = tab_bar->SelectedTabId; - tab_bar->VisibleTabWasSubmitted = false; - - // Update scrolling - if (scroll_track_selected_tab_id) - if (ImGuiTabItem* scroll_track_selected_tab = TabBarFindTabByID(tab_bar, scroll_track_selected_tab_id)) - TabBarScrollToTab(tab_bar, scroll_track_selected_tab); - tab_bar->ScrollingAnim = TabBarScrollClamp(tab_bar, tab_bar->ScrollingAnim); - tab_bar->ScrollingTarget = TabBarScrollClamp(tab_bar, tab_bar->ScrollingTarget); - if (tab_bar->ScrollingAnim != tab_bar->ScrollingTarget) - { - // Scrolling speed adjust itself so we can always reach our target in 1/3 seconds. - // Teleport if we are aiming far off the visible line - tab_bar->ScrollingSpeed = ImMax(tab_bar->ScrollingSpeed, 70.0f * g.FontSize); - tab_bar->ScrollingSpeed = ImMax(tab_bar->ScrollingSpeed, ImFabs(tab_bar->ScrollingTarget - tab_bar->ScrollingAnim) / 0.3f); - const bool teleport = (tab_bar->PrevFrameVisible + 1 < g.FrameCount) || (tab_bar->ScrollingTargetDistToVisibility > 10.0f * g.FontSize); - tab_bar->ScrollingAnim = teleport ? tab_bar->ScrollingTarget : ImLinearSweep(tab_bar->ScrollingAnim, tab_bar->ScrollingTarget, g.IO.DeltaTime * tab_bar->ScrollingSpeed); - } - else - { - tab_bar->ScrollingSpeed = 0.0f; - } - - // Clear name buffers - if ((tab_bar->Flags & ImGuiTabBarFlags_DockNode) == 0) - tab_bar->TabsNames.Buf.resize(0); -} - -// Dockables uses Name/ID in the global namespace. Non-dockable items use the ID stack. -static ImU32 ImGui::TabBarCalcTabID(ImGuiTabBar* tab_bar, const char* label) -{ - if (tab_bar->Flags & ImGuiTabBarFlags_DockNode) - { - ImGuiID id = ImHashStr(label); - KeepAliveID(id); - return id; - } - else - { - ImGuiWindow* window = GImGui->CurrentWindow; - return window->GetID(label); - } -} - -static float ImGui::TabBarCalcMaxTabWidth() -{ - ImGuiContext& g = *GImGui; - return g.FontSize * 20.0f; -} - -ImGuiTabItem* ImGui::TabBarFindTabByID(ImGuiTabBar* tab_bar, ImGuiID tab_id) -{ - if (tab_id != 0) - for (int n = 0; n < tab_bar->Tabs.Size; n++) - if (tab_bar->Tabs[n].ID == tab_id) - return &tab_bar->Tabs[n]; - return NULL; -} - -// The *TabId fields be already set by the docking system _before_ the actual TabItem was created, so we clear them regardless. -void ImGui::TabBarRemoveTab(ImGuiTabBar* tab_bar, ImGuiID tab_id) -{ - if (ImGuiTabItem* tab = TabBarFindTabByID(tab_bar, tab_id)) - tab_bar->Tabs.erase(tab); - if (tab_bar->VisibleTabId == tab_id) { tab_bar->VisibleTabId = 0; } - if (tab_bar->SelectedTabId == tab_id) { tab_bar->SelectedTabId = 0; } - if (tab_bar->NextSelectedTabId == tab_id) { tab_bar->NextSelectedTabId = 0; } -} - -// Called on manual closure attempt -void ImGui::TabBarCloseTab(ImGuiTabBar* tab_bar, ImGuiTabItem* tab) -{ - if ((tab_bar->VisibleTabId == tab->ID) && !(tab->Flags & ImGuiTabItemFlags_UnsavedDocument)) - { - // This will remove a frame of lag for selecting another tab on closure. - // However we don't run it in the case where the 'Unsaved' flag is set, so user gets a chance to fully undo the closure - tab->LastFrameVisible = -1; - tab_bar->SelectedTabId = tab_bar->NextSelectedTabId = 0; - } - else if ((tab_bar->VisibleTabId != tab->ID) && (tab->Flags & ImGuiTabItemFlags_UnsavedDocument)) - { - // Actually select before expecting closure - tab_bar->NextSelectedTabId = tab->ID; - } -} - -static float ImGui::TabBarScrollClamp(ImGuiTabBar* tab_bar, float scrolling) -{ - scrolling = ImMin(scrolling, tab_bar->OffsetMax - tab_bar->BarRect.GetWidth()); - return ImMax(scrolling, 0.0f); -} - -static void ImGui::TabBarScrollToTab(ImGuiTabBar* tab_bar, ImGuiTabItem* tab) -{ - ImGuiContext& g = *GImGui; - float margin = g.FontSize * 1.0f; // When to scroll to make Tab N+1 visible always make a bit of N visible to suggest more scrolling area (since we don't have a scrollbar) - int order = tab_bar->GetTabOrder(tab); - float tab_x1 = tab->Offset + (order > 0 ? -margin : 0.0f); - float tab_x2 = tab->Offset + tab->Width + (order + 1 < tab_bar->Tabs.Size ? margin : 1.0f); - tab_bar->ScrollingTargetDistToVisibility = 0.0f; - if (tab_bar->ScrollingTarget > tab_x1 || (tab_x2 - tab_x1 >= tab_bar->BarRect.GetWidth())) - { - tab_bar->ScrollingTargetDistToVisibility = ImMax(tab_bar->ScrollingAnim - tab_x2, 0.0f); - tab_bar->ScrollingTarget = tab_x1; - } - else if (tab_bar->ScrollingTarget < tab_x2 - tab_bar->BarRect.GetWidth()) - { - tab_bar->ScrollingTargetDistToVisibility = ImMax((tab_x1 - tab_bar->BarRect.GetWidth()) - tab_bar->ScrollingAnim, 0.0f); - tab_bar->ScrollingTarget = tab_x2 - tab_bar->BarRect.GetWidth(); - } -} - -void ImGui::TabBarQueueChangeTabOrder(ImGuiTabBar* tab_bar, const ImGuiTabItem* tab, int dir) -{ - IM_ASSERT(dir == -1 || dir == +1); - IM_ASSERT(tab_bar->ReorderRequestTabId == 0); - tab_bar->ReorderRequestTabId = tab->ID; - tab_bar->ReorderRequestDir = (ImS8)dir; -} - -static ImGuiTabItem* ImGui::TabBarScrollingButtons(ImGuiTabBar* tab_bar) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - - const ImVec2 arrow_button_size(g.FontSize - 2.0f, g.FontSize + g.Style.FramePadding.y * 2.0f); - const float scrolling_buttons_width = arrow_button_size.x * 2.0f; - - const ImVec2 backup_cursor_pos = window->DC.CursorPos; - //window->DrawList->AddRect(ImVec2(tab_bar->BarRect.Max.x - scrolling_buttons_width, tab_bar->BarRect.Min.y), ImVec2(tab_bar->BarRect.Max.x, tab_bar->BarRect.Max.y), IM_COL32(255,0,0,255)); - - const ImRect avail_bar_rect = tab_bar->BarRect; - bool want_clip_rect = !avail_bar_rect.Contains(ImRect(window->DC.CursorPos, window->DC.CursorPos + ImVec2(scrolling_buttons_width, 0.0f))); - if (want_clip_rect) - PushClipRect(tab_bar->BarRect.Min, tab_bar->BarRect.Max + ImVec2(g.Style.ItemInnerSpacing.x, 0.0f), true); - - ImGuiTabItem* tab_to_select = NULL; - - int select_dir = 0; - ImVec4 arrow_col = g.Style.Colors[ImGuiCol_Text]; - arrow_col.w *= 0.5f; - - PushStyleColor(ImGuiCol_Text, arrow_col); - PushStyleColor(ImGuiCol_Button, ImVec4(0, 0, 0, 0)); - const float backup_repeat_delay = g.IO.KeyRepeatDelay; - const float backup_repeat_rate = g.IO.KeyRepeatRate; - g.IO.KeyRepeatDelay = 0.250f; - g.IO.KeyRepeatRate = 0.200f; - window->DC.CursorPos = ImVec2(tab_bar->BarRect.Max.x - scrolling_buttons_width, tab_bar->BarRect.Min.y); - if (ArrowButtonEx("##<", ImGuiDir_Left, arrow_button_size, ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_Repeat)) - select_dir = -1; - window->DC.CursorPos = ImVec2(tab_bar->BarRect.Max.x - scrolling_buttons_width + arrow_button_size.x, tab_bar->BarRect.Min.y); - if (ArrowButtonEx("##>", ImGuiDir_Right, arrow_button_size, ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_Repeat)) - select_dir = +1; - PopStyleColor(2); - g.IO.KeyRepeatRate = backup_repeat_rate; - g.IO.KeyRepeatDelay = backup_repeat_delay; - - if (want_clip_rect) - PopClipRect(); - - if (select_dir != 0) - if (ImGuiTabItem* tab_item = TabBarFindTabByID(tab_bar, tab_bar->SelectedTabId)) - { - int selected_order = tab_bar->GetTabOrder(tab_item); - int target_order = selected_order + select_dir; - tab_to_select = &tab_bar->Tabs[(target_order >= 0 && target_order < tab_bar->Tabs.Size) ? target_order : selected_order]; // If we are at the end of the list, still scroll to make our tab visible - } - window->DC.CursorPos = backup_cursor_pos; - tab_bar->BarRect.Max.x -= scrolling_buttons_width + 1.0f; - - return tab_to_select; -} - -static ImGuiTabItem* ImGui::TabBarTabListPopupButton(ImGuiTabBar* tab_bar) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - - // We use g.Style.FramePadding.y to match the square ArrowButton size - const float tab_list_popup_button_width = g.FontSize + g.Style.FramePadding.y; - const ImVec2 backup_cursor_pos = window->DC.CursorPos; - window->DC.CursorPos = ImVec2(tab_bar->BarRect.Min.x - g.Style.FramePadding.y, tab_bar->BarRect.Min.y); - tab_bar->BarRect.Min.x += tab_list_popup_button_width; - - ImVec4 arrow_col = g.Style.Colors[ImGuiCol_Text]; - arrow_col.w *= 0.5f; - PushStyleColor(ImGuiCol_Text, arrow_col); - PushStyleColor(ImGuiCol_Button, ImVec4(0, 0, 0, 0)); - bool open = BeginCombo("##v", NULL, ImGuiComboFlags_NoPreview); - PopStyleColor(2); - - ImGuiTabItem* tab_to_select = NULL; - if (open) - { - for (int tab_n = 0; tab_n < tab_bar->Tabs.Size; tab_n++) - { - ImGuiTabItem* tab = &tab_bar->Tabs[tab_n]; - const char* tab_name = tab_bar->GetTabName(tab); - if (Selectable(tab_name, tab_bar->SelectedTabId == tab->ID)) - tab_to_select = tab; - } - EndCombo(); - } - - window->DC.CursorPos = backup_cursor_pos; - return tab_to_select; -} - -//------------------------------------------------------------------------- -// [SECTION] Widgets: BeginTabItem, EndTabItem, etc. -//------------------------------------------------------------------------- -// - BeginTabItem() -// - EndTabItem() -// - TabItemEx() [Internal] -// - SetTabItemClosed() -// - TabItemCalcSize() [Internal] -// - TabItemBackground() [Internal] -// - TabItemLabelAndCloseButton() [Internal] -//------------------------------------------------------------------------- - -bool ImGui::BeginTabItem(const char* label, bool* p_open, ImGuiTabItemFlags flags) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - if (window->SkipItems) - return false; - - ImGuiTabBar* tab_bar = g.CurrentTabBar; - if (tab_bar == NULL) - { - IM_ASSERT_USER_ERROR(tab_bar, "BeginTabItem() Needs to be called between BeginTabBar() and EndTabBar()!"); - return false; - } - bool ret = TabItemEx(tab_bar, label, p_open, flags); - if (ret && !(flags & ImGuiTabItemFlags_NoPushId)) - { - ImGuiTabItem* tab = &tab_bar->Tabs[tab_bar->LastTabItemIdx]; - PushOverrideID(tab->ID); // We already hashed 'label' so push into the ID stack directly instead of doing another hash through PushID(label) - } - return ret; -} - -void ImGui::EndTabItem() -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - if (window->SkipItems) - return; - - ImGuiTabBar* tab_bar = g.CurrentTabBar; - if (tab_bar == NULL) - { - IM_ASSERT(tab_bar != NULL && "Needs to be called between BeginTabBar() and EndTabBar()!"); - return; - } - IM_ASSERT(tab_bar->LastTabItemIdx >= 0); - ImGuiTabItem* tab = &tab_bar->Tabs[tab_bar->LastTabItemIdx]; - if (!(tab->Flags & ImGuiTabItemFlags_NoPushId)) - window->IDStack.pop_back(); -} - -bool ImGui::TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open, ImGuiTabItemFlags flags) -{ - // Layout whole tab bar if not already done - if (tab_bar->WantLayout) - TabBarLayout(tab_bar); - - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - if (window->SkipItems) - return false; - - const ImGuiStyle& style = g.Style; - const ImGuiID id = TabBarCalcTabID(tab_bar, label); - - // If the user called us with *p_open == false, we early out and don't render. We make a dummy call to ItemAdd() so that attempts to use a contextual popup menu with an implicit ID won't use an older ID. - if (p_open && !*p_open) - { - PushItemFlag(ImGuiItemFlags_NoNav | ImGuiItemFlags_NoNavDefaultFocus, true); - ItemAdd(ImRect(), id); - PopItemFlag(); - return false; - } - - // Store into ImGuiTabItemFlags_NoCloseButton, also honor ImGuiTabItemFlags_NoCloseButton passed by user (although not documented) - if (flags & ImGuiTabItemFlags_NoCloseButton) - p_open = NULL; - else if (p_open == NULL) - flags |= ImGuiTabItemFlags_NoCloseButton; - - // Calculate tab contents size - ImVec2 size = TabItemCalcSize(label, p_open != NULL); - - // Acquire tab data - ImGuiTabItem* tab = TabBarFindTabByID(tab_bar, id); - bool tab_is_new = false; - if (tab == NULL) - { - tab_bar->Tabs.push_back(ImGuiTabItem()); - tab = &tab_bar->Tabs.back(); - tab->ID = id; - tab->Width = size.x; - tab_is_new = true; - } - tab_bar->LastTabItemIdx = (short)tab_bar->Tabs.index_from_ptr(tab); - tab->ContentWidth = size.x; - - const bool tab_bar_appearing = (tab_bar->PrevFrameVisible + 1 < g.FrameCount); - const bool tab_bar_focused = (tab_bar->Flags & ImGuiTabBarFlags_IsFocused) != 0; - const bool tab_appearing = (tab->LastFrameVisible + 1 < g.FrameCount); - tab->LastFrameVisible = g.FrameCount; - tab->Flags = flags; - - // Append name with zero-terminator - tab->NameOffset = tab_bar->TabsNames.size(); - tab_bar->TabsNames.append(label, label + strlen(label) + 1); - - // If we are not reorderable, always reset offset based on submission order. - // (We already handled layout and sizing using the previous known order, but sizing is not affected by order!) - if (!tab_appearing && !(tab_bar->Flags & ImGuiTabBarFlags_Reorderable)) - { - tab->Offset = tab_bar->OffsetNextTab; - tab_bar->OffsetNextTab += tab->Width + g.Style.ItemInnerSpacing.x; - } - - // Update selected tab - if (tab_appearing && (tab_bar->Flags & ImGuiTabBarFlags_AutoSelectNewTabs) && tab_bar->NextSelectedTabId == 0) - if (!tab_bar_appearing || tab_bar->SelectedTabId == 0) - tab_bar->NextSelectedTabId = id; // New tabs gets activated - if ((flags & ImGuiTabItemFlags_SetSelected) && (tab_bar->SelectedTabId != id)) // SetSelected can only be passed on explicit tab bar - tab_bar->NextSelectedTabId = id; - - // Lock visibility - bool tab_contents_visible = (tab_bar->VisibleTabId == id); - if (tab_contents_visible) - tab_bar->VisibleTabWasSubmitted = true; - - // On the very first frame of a tab bar we let first tab contents be visible to minimize appearing glitches - if (!tab_contents_visible && tab_bar->SelectedTabId == 0 && tab_bar_appearing) - if (tab_bar->Tabs.Size == 1 && !(tab_bar->Flags & ImGuiTabBarFlags_AutoSelectNewTabs)) - tab_contents_visible = true; - - if (tab_appearing && !(tab_bar_appearing && !tab_is_new)) - { - PushItemFlag(ImGuiItemFlags_NoNav | ImGuiItemFlags_NoNavDefaultFocus, true); - ItemAdd(ImRect(), id); - PopItemFlag(); - return tab_contents_visible; - } - - if (tab_bar->SelectedTabId == id) - tab->LastFrameSelected = g.FrameCount; - - // Backup current layout position - const ImVec2 backup_main_cursor_pos = window->DC.CursorPos; - - // Layout - size.x = tab->Width; - window->DC.CursorPos = tab_bar->BarRect.Min + ImVec2(IM_FLOOR(tab->Offset - tab_bar->ScrollingAnim), 0.0f); - ImVec2 pos = window->DC.CursorPos; - ImRect bb(pos, pos + size); - - // We don't have CPU clipping primitives to clip the CloseButton (until it becomes a texture), so need to add an extra draw call (temporary in the case of vertical animation) - bool want_clip_rect = (bb.Min.x < tab_bar->BarRect.Min.x) || (bb.Max.x > tab_bar->BarRect.Max.x); - if (want_clip_rect) - PushClipRect(ImVec2(ImMax(bb.Min.x, tab_bar->BarRect.Min.x), bb.Min.y - 1), ImVec2(tab_bar->BarRect.Max.x, bb.Max.y), true); - - ImVec2 backup_cursor_max_pos = window->DC.CursorMaxPos; - ItemSize(bb.GetSize(), style.FramePadding.y); - window->DC.CursorMaxPos = backup_cursor_max_pos; - - if (!ItemAdd(bb, id)) - { - if (want_clip_rect) - PopClipRect(); - window->DC.CursorPos = backup_main_cursor_pos; - return tab_contents_visible; - } - - // Click to Select a tab - ImGuiButtonFlags button_flags = (ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_AllowItemOverlap); - if (g.DragDropActive) - button_flags |= ImGuiButtonFlags_PressedOnDragDropHold; - bool hovered, held; - bool pressed = ButtonBehavior(bb, id, &hovered, &held, button_flags); - if (pressed) - tab_bar->NextSelectedTabId = id; - hovered |= (g.HoveredId == id); - - // Allow the close button to overlap unless we are dragging (in which case we don't want any overlapping tabs to be hovered) - if (!held) - SetItemAllowOverlap(); - - // Drag and drop: re-order tabs - if (held && !tab_appearing && IsMouseDragging(0)) - { - if (!g.DragDropActive && (tab_bar->Flags & ImGuiTabBarFlags_Reorderable)) - { - // While moving a tab it will jump on the other side of the mouse, so we also test for MouseDelta.x - if (g.IO.MouseDelta.x < 0.0f && g.IO.MousePos.x < bb.Min.x) - { - if (tab_bar->Flags & ImGuiTabBarFlags_Reorderable) - TabBarQueueChangeTabOrder(tab_bar, tab, -1); - } - else if (g.IO.MouseDelta.x > 0.0f && g.IO.MousePos.x > bb.Max.x) - { - if (tab_bar->Flags & ImGuiTabBarFlags_Reorderable) - TabBarQueueChangeTabOrder(tab_bar, tab, +1); - } - } - } - -#if 0 - if (hovered && g.HoveredIdNotActiveTimer > 0.50f && bb.GetWidth() < tab->ContentWidth) - { - // Enlarge tab display when hovering - bb.Max.x = bb.Min.x + IM_FLOOR(ImLerp(bb.GetWidth(), tab->ContentWidth, ImSaturate((g.HoveredIdNotActiveTimer - 0.40f) * 6.0f))); - display_draw_list = GetForegroundDrawList(window); - TabItemBackground(display_draw_list, bb, flags, GetColorU32(ImGuiCol_TitleBgActive)); - } -#endif - - // Render tab shape - ImDrawList* display_draw_list = window->DrawList; - const ImU32 tab_col = GetColorU32((held || hovered) ? ImGuiCol_TabHovered : tab_contents_visible ? (tab_bar_focused ? ImGuiCol_TabActive : ImGuiCol_TabUnfocusedActive) : (tab_bar_focused ? ImGuiCol_Tab : ImGuiCol_TabUnfocused)); - TabItemBackground(display_draw_list, bb, flags, tab_col); - RenderNavHighlight(bb, id); - - // Select with right mouse button. This is so the common idiom for context menu automatically highlight the current widget. - const bool hovered_unblocked = IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup); - if (hovered_unblocked && (IsMouseClicked(1) || IsMouseReleased(1))) - tab_bar->NextSelectedTabId = id; - - if (tab_bar->Flags & ImGuiTabBarFlags_NoCloseWithMiddleMouseButton) - flags |= ImGuiTabItemFlags_NoCloseWithMiddleMouseButton; - - // Render tab label, process close button - const ImGuiID close_button_id = p_open ? window->GetID((void*)((intptr_t)id + 1)) : 0; - bool just_closed = TabItemLabelAndCloseButton(display_draw_list, bb, flags, tab_bar->FramePadding, label, id, close_button_id); - if (just_closed && p_open != NULL) - { - *p_open = false; - TabBarCloseTab(tab_bar, tab); - } - - // Restore main window position so user can draw there - if (want_clip_rect) - PopClipRect(); - window->DC.CursorPos = backup_main_cursor_pos; - - // Tooltip (FIXME: Won't work over the close button because ItemOverlap systems messes up with HoveredIdTimer) - // We test IsItemHovered() to discard e.g. when another item is active or drag and drop over the tab bar (which g.HoveredId ignores) - if (g.HoveredId == id && !held && g.HoveredIdNotActiveTimer > 0.50f && IsItemHovered()) - if (!(tab_bar->Flags & ImGuiTabBarFlags_NoTooltip)) - SetTooltip("%.*s", (int)(FindRenderedTextEnd(label) - label), label); - - return tab_contents_visible; -} - -// [Public] This is call is 100% optional but it allows to remove some one-frame glitches when a tab has been unexpectedly removed. -// To use it to need to call the function SetTabItemClosed() after BeginTabBar() and before any call to BeginTabItem() -void ImGui::SetTabItemClosed(const char* label) -{ - ImGuiContext& g = *GImGui; - bool is_within_manual_tab_bar = g.CurrentTabBar && !(g.CurrentTabBar->Flags & ImGuiTabBarFlags_DockNode); - if (is_within_manual_tab_bar) - { - ImGuiTabBar* tab_bar = g.CurrentTabBar; - IM_ASSERT(tab_bar->WantLayout); // Needs to be called AFTER BeginTabBar() and BEFORE the first call to BeginTabItem() - ImGuiID tab_id = TabBarCalcTabID(tab_bar, label); - TabBarRemoveTab(tab_bar, tab_id); - } -} - -ImVec2 ImGui::TabItemCalcSize(const char* label, bool has_close_button) -{ - ImGuiContext& g = *GImGui; - ImVec2 label_size = CalcTextSize(label, NULL, true); - ImVec2 size = ImVec2(label_size.x + g.Style.FramePadding.x, label_size.y + g.Style.FramePadding.y * 2.0f); - if (has_close_button) - size.x += g.Style.FramePadding.x + (g.Style.ItemInnerSpacing.x + g.FontSize); // We use Y intentionally to fit the close button circle. - else - size.x += g.Style.FramePadding.x + 1.0f; - return ImVec2(ImMin(size.x, TabBarCalcMaxTabWidth()), size.y); -} - -void ImGui::TabItemBackground(ImDrawList* draw_list, const ImRect& bb, ImGuiTabItemFlags flags, ImU32 col) -{ - // While rendering tabs, we trim 1 pixel off the top of our bounding box so they can fit within a regular frame height while looking "detached" from it. - ImGuiContext& g = *GImGui; - const float width = bb.GetWidth(); - IM_UNUSED(flags); - IM_ASSERT(width > 0.0f); - const float rounding = ImMax(0.0f, ImMin(g.Style.TabRounding, width * 0.5f - 1.0f)); - const float y1 = bb.Min.y + 1.0f; - const float y2 = bb.Max.y - 1.0f; - draw_list->PathLineTo(ImVec2(bb.Min.x, y2)); - draw_list->PathArcToFast(ImVec2(bb.Min.x + rounding, y1 + rounding), rounding, 6, 9); - draw_list->PathArcToFast(ImVec2(bb.Max.x - rounding, y1 + rounding), rounding, 9, 12); - draw_list->PathLineTo(ImVec2(bb.Max.x, y2)); - draw_list->PathFillConvex(col); - if (g.Style.TabBorderSize > 0.0f) - { - draw_list->PathLineTo(ImVec2(bb.Min.x + 0.5f, y2)); - draw_list->PathArcToFast(ImVec2(bb.Min.x + rounding + 0.5f, y1 + rounding + 0.5f), rounding, 6, 9); - draw_list->PathArcToFast(ImVec2(bb.Max.x - rounding - 0.5f, y1 + rounding + 0.5f), rounding, 9, 12); - draw_list->PathLineTo(ImVec2(bb.Max.x - 0.5f, y2)); - draw_list->PathStroke(GetColorU32(ImGuiCol_Border), false, g.Style.TabBorderSize); - } -} - -// Render text label (with custom clipping) + Unsaved Document marker + Close Button logic -// We tend to lock style.FramePadding for a given tab-bar, hence the 'frame_padding' parameter. -bool ImGui::TabItemLabelAndCloseButton(ImDrawList* draw_list, const ImRect& bb, ImGuiTabItemFlags flags, ImVec2 frame_padding, const char* label, ImGuiID tab_id, ImGuiID close_button_id) -{ - ImGuiContext& g = *GImGui; - ImVec2 label_size = CalcTextSize(label, NULL, true); - if (bb.GetWidth() <= 1.0f) - return false; - - // Render text label (with clipping + alpha gradient) + unsaved marker - const char* TAB_UNSAVED_MARKER = "*"; - ImRect text_pixel_clip_bb(bb.Min.x + frame_padding.x, bb.Min.y + frame_padding.y, bb.Max.x - frame_padding.x, bb.Max.y); - if (flags & ImGuiTabItemFlags_UnsavedDocument) - { - text_pixel_clip_bb.Max.x -= CalcTextSize(TAB_UNSAVED_MARKER, NULL, false).x; - ImVec2 unsaved_marker_pos(ImMin(bb.Min.x + frame_padding.x + label_size.x + 2, text_pixel_clip_bb.Max.x), bb.Min.y + frame_padding.y + IM_FLOOR(-g.FontSize * 0.25f)); - RenderTextClippedEx(draw_list, unsaved_marker_pos, bb.Max - frame_padding, TAB_UNSAVED_MARKER, NULL, NULL); - } - ImRect text_ellipsis_clip_bb = text_pixel_clip_bb; - - // Close Button - // We are relying on a subtle and confusing distinction between 'hovered' and 'g.HoveredId' which happens because we are using ImGuiButtonFlags_AllowOverlapMode + SetItemAllowOverlap() - // 'hovered' will be true when hovering the Tab but NOT when hovering the close button - // 'g.HoveredId==id' will be true when hovering the Tab including when hovering the close button - // 'g.ActiveId==close_button_id' will be true when we are holding on the close button, in which case both hovered booleans are false - bool close_button_pressed = false; - bool close_button_visible = false; - if (close_button_id != 0) - if (g.HoveredId == tab_id || g.HoveredId == close_button_id || g.ActiveId == close_button_id) - close_button_visible = true; - if (close_button_visible) - { - ImGuiItemHoveredDataBackup last_item_backup; - const float close_button_sz = g.FontSize; - PushStyleVar(ImGuiStyleVar_FramePadding, frame_padding); - if (CloseButton(close_button_id, ImVec2(bb.Max.x - frame_padding.x * 2.0f - close_button_sz, bb.Min.y))) - close_button_pressed = true; - PopStyleVar(); - last_item_backup.Restore(); - - // Close with middle mouse button - if (!(flags & ImGuiTabItemFlags_NoCloseWithMiddleMouseButton) && IsMouseClicked(2)) - close_button_pressed = true; - - text_pixel_clip_bb.Max.x -= close_button_sz; - } - - float ellipsis_max_x = close_button_visible ? text_pixel_clip_bb.Max.x : bb.Max.x - 1.0f; - RenderTextEllipsis(draw_list, text_ellipsis_clip_bb.Min, text_ellipsis_clip_bb.Max, text_pixel_clip_bb.Max.x, ellipsis_max_x, label, NULL, &label_size); - - return close_button_pressed; -} - - -//------------------------------------------------------------------------- -// [SECTION] Widgets: Columns, BeginColumns, EndColumns, etc. -// In the current version, Columns are very weak. Needs to be replaced with a more full-featured system. -//------------------------------------------------------------------------- -// - GetColumnIndex() -// - GetColumnCount() -// - GetColumnOffset() -// - GetColumnWidth() -// - SetColumnOffset() -// - SetColumnWidth() -// - PushColumnClipRect() [Internal] -// - PushColumnsBackground() [Internal] -// - PopColumnsBackground() [Internal] -// - FindOrCreateColumns() [Internal] -// - GetColumnsID() [Internal] -// - BeginColumns() -// - NextColumn() -// - EndColumns() -// - Columns() -//------------------------------------------------------------------------- - -int ImGui::GetColumnIndex() -{ - ImGuiWindow* window = GetCurrentWindowRead(); - return window->DC.CurrentColumns ? window->DC.CurrentColumns->Current : 0; -} - -int ImGui::GetColumnsCount() -{ - ImGuiWindow* window = GetCurrentWindowRead(); - return window->DC.CurrentColumns ? window->DC.CurrentColumns->Count : 1; -} - -float ImGui::GetColumnOffsetFromNorm(const ImGuiColumns* columns, float offset_norm) -{ - return offset_norm * (columns->OffMaxX - columns->OffMinX); -} - -float ImGui::GetColumnNormFromOffset(const ImGuiColumns* columns, float offset) -{ - return offset / (columns->OffMaxX - columns->OffMinX); -} - -static const float COLUMNS_HIT_RECT_HALF_WIDTH = 4.0f; - -static float GetDraggedColumnOffset(ImGuiColumns* columns, int column_index) -{ - // Active (dragged) column always follow mouse. The reason we need this is that dragging a column to the right edge of an auto-resizing - // window creates a feedback loop because we store normalized positions. So while dragging we enforce absolute positioning. - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - IM_ASSERT(column_index > 0); // We are not supposed to drag column 0. - IM_ASSERT(g.ActiveId == columns->ID + ImGuiID(column_index)); - - float x = g.IO.MousePos.x - g.ActiveIdClickOffset.x + COLUMNS_HIT_RECT_HALF_WIDTH - window->Pos.x; - x = ImMax(x, ImGui::GetColumnOffset(column_index - 1) + g.Style.ColumnsMinSpacing); - if ((columns->Flags & ImGuiColumnsFlags_NoPreserveWidths)) - x = ImMin(x, ImGui::GetColumnOffset(column_index + 1) - g.Style.ColumnsMinSpacing); - - return x; -} - -float ImGui::GetColumnOffset(int column_index) -{ - ImGuiWindow* window = GetCurrentWindowRead(); - ImGuiColumns* columns = window->DC.CurrentColumns; - if (columns == NULL) - return 0.0f; - - if (column_index < 0) - column_index = columns->Current; - IM_ASSERT(column_index < columns->Columns.Size); - - const float t = columns->Columns[column_index].OffsetNorm; - const float x_offset = ImLerp(columns->OffMinX, columns->OffMaxX, t); - return x_offset; -} - -static float GetColumnWidthEx(ImGuiColumns* columns, int column_index, bool before_resize = false) -{ - if (column_index < 0) - column_index = columns->Current; - - float offset_norm; - if (before_resize) - offset_norm = columns->Columns[column_index + 1].OffsetNormBeforeResize - columns->Columns[column_index].OffsetNormBeforeResize; - else - offset_norm = columns->Columns[column_index + 1].OffsetNorm - columns->Columns[column_index].OffsetNorm; - return ImGui::GetColumnOffsetFromNorm(columns, offset_norm); -} - -float ImGui::GetColumnWidth(int column_index) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - ImGuiColumns* columns = window->DC.CurrentColumns; - if (columns == NULL) - return GetContentRegionAvail().x; - - if (column_index < 0) - column_index = columns->Current; - return GetColumnOffsetFromNorm(columns, columns->Columns[column_index + 1].OffsetNorm - columns->Columns[column_index].OffsetNorm); -} - -void ImGui::SetColumnOffset(int column_index, float offset) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = g.CurrentWindow; - ImGuiColumns* columns = window->DC.CurrentColumns; - IM_ASSERT(columns != NULL); - - if (column_index < 0) - column_index = columns->Current; - IM_ASSERT(column_index < columns->Columns.Size); - - const bool preserve_width = !(columns->Flags & ImGuiColumnsFlags_NoPreserveWidths) && (column_index < columns->Count-1); - const float width = preserve_width ? GetColumnWidthEx(columns, column_index, columns->IsBeingResized) : 0.0f; - - if (!(columns->Flags & ImGuiColumnsFlags_NoForceWithinWindow)) - offset = ImMin(offset, columns->OffMaxX - g.Style.ColumnsMinSpacing * (columns->Count - column_index)); - columns->Columns[column_index].OffsetNorm = GetColumnNormFromOffset(columns, offset - columns->OffMinX); - - if (preserve_width) - SetColumnOffset(column_index + 1, offset + ImMax(g.Style.ColumnsMinSpacing, width)); -} - -void ImGui::SetColumnWidth(int column_index, float width) -{ - ImGuiWindow* window = GetCurrentWindowRead(); - ImGuiColumns* columns = window->DC.CurrentColumns; - IM_ASSERT(columns != NULL); - - if (column_index < 0) - column_index = columns->Current; - SetColumnOffset(column_index + 1, GetColumnOffset(column_index) + width); -} - -void ImGui::PushColumnClipRect(int column_index) -{ - ImGuiWindow* window = GetCurrentWindowRead(); - ImGuiColumns* columns = window->DC.CurrentColumns; - if (column_index < 0) - column_index = columns->Current; - - ImGuiColumnData* column = &columns->Columns[column_index]; - PushClipRect(column->ClipRect.Min, column->ClipRect.Max, false); -} - -// Get into the columns background draw command (which is generally the same draw command as before we called BeginColumns) -void ImGui::PushColumnsBackground() -{ - ImGuiWindow* window = GetCurrentWindowRead(); - ImGuiColumns* columns = window->DC.CurrentColumns; - if (columns->Count == 1) - return; - columns->Splitter.SetCurrentChannel(window->DrawList, 0); - int cmd_size = window->DrawList->CmdBuffer.Size; - PushClipRect(columns->HostClipRect.Min, columns->HostClipRect.Max, false); - IM_UNUSED(cmd_size); - IM_ASSERT(cmd_size == window->DrawList->CmdBuffer.Size); // Being in channel 0 this should not have created an ImDrawCmd -} - -void ImGui::PopColumnsBackground() -{ - ImGuiWindow* window = GetCurrentWindowRead(); - ImGuiColumns* columns = window->DC.CurrentColumns; - if (columns->Count == 1) - return; - columns->Splitter.SetCurrentChannel(window->DrawList, columns->Current + 1); - PopClipRect(); -} - -ImGuiColumns* ImGui::FindOrCreateColumns(ImGuiWindow* window, ImGuiID id) -{ - // We have few columns per window so for now we don't need bother much with turning this into a faster lookup. - for (int n = 0; n < window->ColumnsStorage.Size; n++) - if (window->ColumnsStorage[n].ID == id) - return &window->ColumnsStorage[n]; - - window->ColumnsStorage.push_back(ImGuiColumns()); - ImGuiColumns* columns = &window->ColumnsStorage.back(); - columns->ID = id; - return columns; -} - -ImGuiID ImGui::GetColumnsID(const char* str_id, int columns_count) -{ - ImGuiWindow* window = GetCurrentWindow(); - - // Differentiate column ID with an arbitrary prefix for cases where users name their columns set the same as another widget. - // In addition, when an identifier isn't explicitly provided we include the number of columns in the hash to make it uniquer. - PushID(0x11223347 + (str_id ? 0 : columns_count)); - ImGuiID id = window->GetID(str_id ? str_id : "columns"); - PopID(); - - return id; -} - -void ImGui::BeginColumns(const char* str_id, int columns_count, ImGuiColumnsFlags flags) -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = GetCurrentWindow(); - - IM_ASSERT(columns_count >= 1 && columns_count <= 64); // Maximum 64 columns - IM_ASSERT(window->DC.CurrentColumns == NULL); // Nested columns are currently not supported - - // Acquire storage for the columns set - ImGuiID id = GetColumnsID(str_id, columns_count); - ImGuiColumns* columns = FindOrCreateColumns(window, id); - IM_ASSERT(columns->ID == id); - columns->Current = 0; - columns->Count = columns_count; - columns->Flags = flags; - window->DC.CurrentColumns = columns; - - columns->HostCursorPosY = window->DC.CursorPos.y; - columns->HostCursorMaxPosX = window->DC.CursorMaxPos.x; - columns->HostClipRect = window->ClipRect; - columns->HostWorkRect = window->WorkRect; - - // Set state for first column - // We aim so that the right-most column will have the same clipping width as other after being clipped by parent ClipRect - const float column_padding = g.Style.ItemSpacing.x; - const float half_clip_extend_x = ImFloor(ImMax(window->WindowPadding.x * 0.5f, window->WindowBorderSize)); - const float max_1 = window->WorkRect.Max.x + column_padding - ImMax(column_padding - window->WindowPadding.x, 0.0f); - const float max_2 = window->WorkRect.Max.x + half_clip_extend_x; - columns->OffMinX = window->DC.Indent.x - column_padding + ImMax(column_padding - window->WindowPadding.x, 0.0f); - columns->OffMaxX = ImMax(ImMin(max_1, max_2) - window->Pos.x, columns->OffMinX + 1.0f); - columns->LineMinY = columns->LineMaxY = window->DC.CursorPos.y; - - // Clear data if columns count changed - if (columns->Columns.Size != 0 && columns->Columns.Size != columns_count + 1) - columns->Columns.resize(0); - - // Initialize default widths - columns->IsFirstFrame = (columns->Columns.Size == 0); - if (columns->Columns.Size == 0) - { - columns->Columns.reserve(columns_count + 1); - for (int n = 0; n < columns_count + 1; n++) - { - ImGuiColumnData column; - column.OffsetNorm = n / (float)columns_count; - columns->Columns.push_back(column); - } - } - - for (int n = 0; n < columns_count; n++) - { - // Compute clipping rectangle - ImGuiColumnData* column = &columns->Columns[n]; - float clip_x1 = IM_ROUND(window->Pos.x + GetColumnOffset(n)); - float clip_x2 = IM_ROUND(window->Pos.x + GetColumnOffset(n + 1) - 1.0f); - column->ClipRect = ImRect(clip_x1, -FLT_MAX, clip_x2, +FLT_MAX); - column->ClipRect.ClipWith(window->ClipRect); - } - - if (columns->Count > 1) - { - columns->Splitter.Split(window->DrawList, 1 + columns->Count); - columns->Splitter.SetCurrentChannel(window->DrawList, 1); - PushColumnClipRect(0); - } - - // We don't generally store Indent.x inside ColumnsOffset because it may be manipulated by the user. - float offset_0 = GetColumnOffset(columns->Current); - float offset_1 = GetColumnOffset(columns->Current + 1); - float width = offset_1 - offset_0; - PushItemWidth(width * 0.65f); - window->DC.ColumnsOffset.x = ImMax(column_padding - window->WindowPadding.x, 0.0f); - window->DC.CursorPos.x = IM_FLOOR(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x); - window->WorkRect.Max.x = window->Pos.x + offset_1 - column_padding; -} - -void ImGui::NextColumn() -{ - ImGuiWindow* window = GetCurrentWindow(); - if (window->SkipItems || window->DC.CurrentColumns == NULL) - return; - - ImGuiContext& g = *GImGui; - ImGuiColumns* columns = window->DC.CurrentColumns; - - if (columns->Count == 1) - { - window->DC.CursorPos.x = IM_FLOOR(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x); - IM_ASSERT(columns->Current == 0); - return; - } - PopItemWidth(); - PopClipRect(); - - const float column_padding = g.Style.ItemSpacing.x; - columns->LineMaxY = ImMax(columns->LineMaxY, window->DC.CursorPos.y); - if (++columns->Current < columns->Count) - { - // Columns 1+ ignore IndentX (by canceling it out) - // FIXME-COLUMNS: Unnecessary, could be locked? - window->DC.ColumnsOffset.x = GetColumnOffset(columns->Current) - window->DC.Indent.x + column_padding; - columns->Splitter.SetCurrentChannel(window->DrawList, columns->Current + 1); - } - else - { - // New row/line - // Column 0 honor IndentX - window->DC.ColumnsOffset.x = ImMax(column_padding - window->WindowPadding.x, 0.0f); - columns->Splitter.SetCurrentChannel(window->DrawList, 1); - columns->Current = 0; - columns->LineMinY = columns->LineMaxY; - } - window->DC.CursorPos.x = IM_FLOOR(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x); - window->DC.CursorPos.y = columns->LineMinY; - window->DC.CurrLineSize = ImVec2(0.0f, 0.0f); - window->DC.CurrLineTextBaseOffset = 0.0f; - - PushColumnClipRect(columns->Current); // FIXME-COLUMNS: Could it be an overwrite? - - // FIXME-COLUMNS: Share code with BeginColumns() - move code on columns setup. - float offset_0 = GetColumnOffset(columns->Current); - float offset_1 = GetColumnOffset(columns->Current + 1); - float width = offset_1 - offset_0; - PushItemWidth(width * 0.65f); - window->WorkRect.Max.x = window->Pos.x + offset_1 - column_padding; -} - -void ImGui::EndColumns() -{ - ImGuiContext& g = *GImGui; - ImGuiWindow* window = GetCurrentWindow(); - ImGuiColumns* columns = window->DC.CurrentColumns; - IM_ASSERT(columns != NULL); - - PopItemWidth(); - if (columns->Count > 1) - { - PopClipRect(); - columns->Splitter.Merge(window->DrawList); - } - - const ImGuiColumnsFlags flags = columns->Flags; - columns->LineMaxY = ImMax(columns->LineMaxY, window->DC.CursorPos.y); - window->DC.CursorPos.y = columns->LineMaxY; - if (!(flags & ImGuiColumnsFlags_GrowParentContentsSize)) - window->DC.CursorMaxPos.x = columns->HostCursorMaxPosX; // Restore cursor max pos, as columns don't grow parent - - // Draw columns borders and handle resize - // The IsBeingResized flag ensure we preserve pre-resize columns width so back-and-forth are not lossy - bool is_being_resized = false; - if (!(flags & ImGuiColumnsFlags_NoBorder) && !window->SkipItems) - { - // We clip Y boundaries CPU side because very long triangles are mishandled by some GPU drivers. - const float y1 = ImMax(columns->HostCursorPosY, window->ClipRect.Min.y); - const float y2 = ImMin(window->DC.CursorPos.y, window->ClipRect.Max.y); - int dragging_column = -1; - for (int n = 1; n < columns->Count; n++) - { - ImGuiColumnData* column = &columns->Columns[n]; - float x = window->Pos.x + GetColumnOffset(n); - const ImGuiID column_id = columns->ID + ImGuiID(n); - const float column_hit_hw = COLUMNS_HIT_RECT_HALF_WIDTH; - const ImRect column_hit_rect(ImVec2(x - column_hit_hw, y1), ImVec2(x + column_hit_hw, y2)); - KeepAliveID(column_id); - if (IsClippedEx(column_hit_rect, column_id, false)) - continue; - - bool hovered = false, held = false; - if (!(flags & ImGuiColumnsFlags_NoResize)) - { - ButtonBehavior(column_hit_rect, column_id, &hovered, &held); - if (hovered || held) - g.MouseCursor = ImGuiMouseCursor_ResizeEW; - if (held && !(column->Flags & ImGuiColumnsFlags_NoResize)) - dragging_column = n; - } - - // Draw column - const ImU32 col = GetColorU32(held ? ImGuiCol_SeparatorActive : hovered ? ImGuiCol_SeparatorHovered : ImGuiCol_Separator); - const float xi = IM_FLOOR(x); - window->DrawList->AddLine(ImVec2(xi, y1 + 1.0f), ImVec2(xi, y2), col); - } - - // Apply dragging after drawing the column lines, so our rendered lines are in sync with how items were displayed during the frame. - if (dragging_column != -1) - { - if (!columns->IsBeingResized) - for (int n = 0; n < columns->Count + 1; n++) - columns->Columns[n].OffsetNormBeforeResize = columns->Columns[n].OffsetNorm; - columns->IsBeingResized = is_being_resized = true; - float x = GetDraggedColumnOffset(columns, dragging_column); - SetColumnOffset(dragging_column, x); - } - } - columns->IsBeingResized = is_being_resized; - - window->WorkRect = columns->HostWorkRect; - window->DC.CurrentColumns = NULL; - window->DC.ColumnsOffset.x = 0.0f; - window->DC.CursorPos.x = IM_FLOOR(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x); -} - -// [2018-03: This is currently the only public API, while we are working on making BeginColumns/EndColumns user-facing] -void ImGui::Columns(int columns_count, const char* id, bool border) -{ - ImGuiWindow* window = GetCurrentWindow(); - IM_ASSERT(columns_count >= 1); - - ImGuiColumnsFlags flags = (border ? 0 : ImGuiColumnsFlags_NoBorder); - //flags |= ImGuiColumnsFlags_NoPreserveWidths; // NB: Legacy behavior - ImGuiColumns* columns = window->DC.CurrentColumns; - if (columns != NULL && columns->Count == columns_count && columns->Flags == flags) - return; - - if (columns != NULL) - EndColumns(); - - if (columns_count != 1) - BeginColumns(id, columns_count, flags); -} - -//------------------------------------------------------------------------- - -#endif // #ifndef IMGUI_DISABLE diff --git a/cmake/imgui/imstb_rectpack.h b/cmake/imgui/imstb_rectpack.h deleted file mode 100644 index ff2a85df..00000000 --- a/cmake/imgui/imstb_rectpack.h +++ /dev/null @@ -1,639 +0,0 @@ -// [DEAR IMGUI] -// This is a slightly modified version of stb_rect_pack.h 1.00. -// Those changes would need to be pushed into nothings/stb: -// - Added STBRP__CDECL -// Grep for [DEAR IMGUI] to find the changes. - -// stb_rect_pack.h - v1.00 - public domain - rectangle packing -// Sean Barrett 2014 -// -// Useful for e.g. packing rectangular textures into an atlas. -// Does not do rotation. -// -// Not necessarily the awesomest packing method, but better than -// the totally naive one in stb_truetype (which is primarily what -// this is meant to replace). -// -// Has only had a few tests run, may have issues. -// -// More docs to come. -// -// No memory allocations; uses qsort() and assert() from stdlib. -// Can override those by defining STBRP_SORT and STBRP_ASSERT. -// -// This library currently uses the Skyline Bottom-Left algorithm. -// -// Please note: better rectangle packers are welcome! Please -// implement them to the same API, but with a different init -// function. -// -// Credits -// -// Library -// Sean Barrett -// Minor features -// Martins Mozeiko -// github:IntellectualKitty -// -// Bugfixes / warning fixes -// Jeremy Jaussaud -// Fabian Giesen -// -// Version history: -// -// 1.00 (2019-02-25) avoid small space waste; gracefully fail too-wide rectangles -// 0.99 (2019-02-07) warning fixes -// 0.11 (2017-03-03) return packing success/fail result -// 0.10 (2016-10-25) remove cast-away-const to avoid warnings -// 0.09 (2016-08-27) fix compiler warnings -// 0.08 (2015-09-13) really fix bug with empty rects (w=0 or h=0) -// 0.07 (2015-09-13) fix bug with empty rects (w=0 or h=0) -// 0.06 (2015-04-15) added STBRP_SORT to allow replacing qsort -// 0.05: added STBRP_ASSERT to allow replacing assert -// 0.04: fixed minor bug in STBRP_LARGE_RECTS support -// 0.01: initial release -// -// LICENSE -// -// See end of file for license information. - -////////////////////////////////////////////////////////////////////////////// -// -// INCLUDE SECTION -// - -#ifndef STB_INCLUDE_STB_RECT_PACK_H -#define STB_INCLUDE_STB_RECT_PACK_H - -#define STB_RECT_PACK_VERSION 1 - -#ifdef STBRP_STATIC -#define STBRP_DEF static -#else -#define STBRP_DEF extern -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct stbrp_context stbrp_context; -typedef struct stbrp_node stbrp_node; -typedef struct stbrp_rect stbrp_rect; - -#ifdef STBRP_LARGE_RECTS -typedef int stbrp_coord; -#else -typedef unsigned short stbrp_coord; -#endif - -STBRP_DEF int stbrp_pack_rects (stbrp_context *context, stbrp_rect *rects, int num_rects); -// Assign packed locations to rectangles. The rectangles are of type -// 'stbrp_rect' defined below, stored in the array 'rects', and there -// are 'num_rects' many of them. -// -// Rectangles which are successfully packed have the 'was_packed' flag -// set to a non-zero value and 'x' and 'y' store the minimum location -// on each axis (i.e. bottom-left in cartesian coordinates, top-left -// if you imagine y increasing downwards). Rectangles which do not fit -// have the 'was_packed' flag set to 0. -// -// You should not try to access the 'rects' array from another thread -// while this function is running, as the function temporarily reorders -// the array while it executes. -// -// To pack into another rectangle, you need to call stbrp_init_target -// again. To continue packing into the same rectangle, you can call -// this function again. Calling this multiple times with multiple rect -// arrays will probably produce worse packing results than calling it -// a single time with the full rectangle array, but the option is -// available. -// -// The function returns 1 if all of the rectangles were successfully -// packed and 0 otherwise. - -struct stbrp_rect -{ - // reserved for your use: - int id; - - // input: - stbrp_coord w, h; - - // output: - stbrp_coord x, y; - int was_packed; // non-zero if valid packing - -}; // 16 bytes, nominally - - -STBRP_DEF void stbrp_init_target (stbrp_context *context, int width, int height, stbrp_node *nodes, int num_nodes); -// Initialize a rectangle packer to: -// pack a rectangle that is 'width' by 'height' in dimensions -// using temporary storage provided by the array 'nodes', which is 'num_nodes' long -// -// You must call this function every time you start packing into a new target. -// -// There is no "shutdown" function. The 'nodes' memory must stay valid for -// the following stbrp_pack_rects() call (or calls), but can be freed after -// the call (or calls) finish. -// -// Note: to guarantee best results, either: -// 1. make sure 'num_nodes' >= 'width' -// or 2. call stbrp_allow_out_of_mem() defined below with 'allow_out_of_mem = 1' -// -// If you don't do either of the above things, widths will be quantized to multiples -// of small integers to guarantee the algorithm doesn't run out of temporary storage. -// -// If you do #2, then the non-quantized algorithm will be used, but the algorithm -// may run out of temporary storage and be unable to pack some rectangles. - -STBRP_DEF void stbrp_setup_allow_out_of_mem (stbrp_context *context, int allow_out_of_mem); -// Optionally call this function after init but before doing any packing to -// change the handling of the out-of-temp-memory scenario, described above. -// If you call init again, this will be reset to the default (false). - - -STBRP_DEF void stbrp_setup_heuristic (stbrp_context *context, int heuristic); -// Optionally select which packing heuristic the library should use. Different -// heuristics will produce better/worse results for different data sets. -// If you call init again, this will be reset to the default. - -enum -{ - STBRP_HEURISTIC_Skyline_default=0, - STBRP_HEURISTIC_Skyline_BL_sortHeight = STBRP_HEURISTIC_Skyline_default, - STBRP_HEURISTIC_Skyline_BF_sortHeight -}; - - -////////////////////////////////////////////////////////////////////////////// -// -// the details of the following structures don't matter to you, but they must -// be visible so you can handle the memory allocations for them - -struct stbrp_node -{ - stbrp_coord x,y; - stbrp_node *next; -}; - -struct stbrp_context -{ - int width; - int height; - int align; - int init_mode; - int heuristic; - int num_nodes; - stbrp_node *active_head; - stbrp_node *free_head; - stbrp_node extra[2]; // we allocate two extra nodes so optimal user-node-count is 'width' not 'width+2' -}; - -#ifdef __cplusplus -} -#endif - -#endif - -////////////////////////////////////////////////////////////////////////////// -// -// IMPLEMENTATION SECTION -// - -#ifdef STB_RECT_PACK_IMPLEMENTATION -#ifndef STBRP_SORT -#include -#define STBRP_SORT qsort -#endif - -#ifndef STBRP_ASSERT -#include -#define STBRP_ASSERT assert -#endif - -// [DEAR IMGUI] Added STBRP__CDECL -#ifdef _MSC_VER -#define STBRP__NOTUSED(v) (void)(v) -#define STBRP__CDECL __cdecl -#else -#define STBRP__NOTUSED(v) (void)sizeof(v) -#define STBRP__CDECL -#endif - -enum -{ - STBRP__INIT_skyline = 1 -}; - -STBRP_DEF void stbrp_setup_heuristic(stbrp_context *context, int heuristic) -{ - switch (context->init_mode) { - case STBRP__INIT_skyline: - STBRP_ASSERT(heuristic == STBRP_HEURISTIC_Skyline_BL_sortHeight || heuristic == STBRP_HEURISTIC_Skyline_BF_sortHeight); - context->heuristic = heuristic; - break; - default: - STBRP_ASSERT(0); - } -} - -STBRP_DEF void stbrp_setup_allow_out_of_mem(stbrp_context *context, int allow_out_of_mem) -{ - if (allow_out_of_mem) - // if it's ok to run out of memory, then don't bother aligning them; - // this gives better packing, but may fail due to OOM (even though - // the rectangles easily fit). @TODO a smarter approach would be to only - // quantize once we've hit OOM, then we could get rid of this parameter. - context->align = 1; - else { - // if it's not ok to run out of memory, then quantize the widths - // so that num_nodes is always enough nodes. - // - // I.e. num_nodes * align >= width - // align >= width / num_nodes - // align = ceil(width/num_nodes) - - context->align = (context->width + context->num_nodes-1) / context->num_nodes; - } -} - -STBRP_DEF void stbrp_init_target(stbrp_context *context, int width, int height, stbrp_node *nodes, int num_nodes) -{ - int i; -#ifndef STBRP_LARGE_RECTS - STBRP_ASSERT(width <= 0xffff && height <= 0xffff); -#endif - - for (i=0; i < num_nodes-1; ++i) - nodes[i].next = &nodes[i+1]; - nodes[i].next = NULL; - context->init_mode = STBRP__INIT_skyline; - context->heuristic = STBRP_HEURISTIC_Skyline_default; - context->free_head = &nodes[0]; - context->active_head = &context->extra[0]; - context->width = width; - context->height = height; - context->num_nodes = num_nodes; - stbrp_setup_allow_out_of_mem(context, 0); - - // node 0 is the full width, node 1 is the sentinel (lets us not store width explicitly) - context->extra[0].x = 0; - context->extra[0].y = 0; - context->extra[0].next = &context->extra[1]; - context->extra[1].x = (stbrp_coord) width; -#ifdef STBRP_LARGE_RECTS - context->extra[1].y = (1<<30); -#else - context->extra[1].y = 65535; -#endif - context->extra[1].next = NULL; -} - -// find minimum y position if it starts at x1 -static int stbrp__skyline_find_min_y(stbrp_context *c, stbrp_node *first, int x0, int width, int *pwaste) -{ - stbrp_node *node = first; - int x1 = x0 + width; - int min_y, visited_width, waste_area; - - STBRP__NOTUSED(c); - - STBRP_ASSERT(first->x <= x0); - - #if 0 - // skip in case we're past the node - while (node->next->x <= x0) - ++node; - #else - STBRP_ASSERT(node->next->x > x0); // we ended up handling this in the caller for efficiency - #endif - - STBRP_ASSERT(node->x <= x0); - - min_y = 0; - waste_area = 0; - visited_width = 0; - while (node->x < x1) { - if (node->y > min_y) { - // raise min_y higher. - // we've accounted for all waste up to min_y, - // but we'll now add more waste for everything we've visted - waste_area += visited_width * (node->y - min_y); - min_y = node->y; - // the first time through, visited_width might be reduced - if (node->x < x0) - visited_width += node->next->x - x0; - else - visited_width += node->next->x - node->x; - } else { - // add waste area - int under_width = node->next->x - node->x; - if (under_width + visited_width > width) - under_width = width - visited_width; - waste_area += under_width * (min_y - node->y); - visited_width += under_width; - } - node = node->next; - } - - *pwaste = waste_area; - return min_y; -} - -typedef struct -{ - int x,y; - stbrp_node **prev_link; -} stbrp__findresult; - -static stbrp__findresult stbrp__skyline_find_best_pos(stbrp_context *c, int width, int height) -{ - int best_waste = (1<<30), best_x, best_y = (1 << 30); - stbrp__findresult fr; - stbrp_node **prev, *node, *tail, **best = NULL; - - // align to multiple of c->align - width = (width + c->align - 1); - width -= width % c->align; - STBRP_ASSERT(width % c->align == 0); - - // if it can't possibly fit, bail immediately - if (width > c->width || height > c->height) { - fr.prev_link = NULL; - fr.x = fr.y = 0; - return fr; - } - - node = c->active_head; - prev = &c->active_head; - while (node->x + width <= c->width) { - int y,waste; - y = stbrp__skyline_find_min_y(c, node, node->x, width, &waste); - if (c->heuristic == STBRP_HEURISTIC_Skyline_BL_sortHeight) { // actually just want to test BL - // bottom left - if (y < best_y) { - best_y = y; - best = prev; - } - } else { - // best-fit - if (y + height <= c->height) { - // can only use it if it first vertically - if (y < best_y || (y == best_y && waste < best_waste)) { - best_y = y; - best_waste = waste; - best = prev; - } - } - } - prev = &node->next; - node = node->next; - } - - best_x = (best == NULL) ? 0 : (*best)->x; - - // if doing best-fit (BF), we also have to try aligning right edge to each node position - // - // e.g, if fitting - // - // ____________________ - // |____________________| - // - // into - // - // | | - // | ____________| - // |____________| - // - // then right-aligned reduces waste, but bottom-left BL is always chooses left-aligned - // - // This makes BF take about 2x the time - - if (c->heuristic == STBRP_HEURISTIC_Skyline_BF_sortHeight) { - tail = c->active_head; - node = c->active_head; - prev = &c->active_head; - // find first node that's admissible - while (tail->x < width) - tail = tail->next; - while (tail) { - int xpos = tail->x - width; - int y,waste; - STBRP_ASSERT(xpos >= 0); - // find the left position that matches this - while (node->next->x <= xpos) { - prev = &node->next; - node = node->next; - } - STBRP_ASSERT(node->next->x > xpos && node->x <= xpos); - y = stbrp__skyline_find_min_y(c, node, xpos, width, &waste); - if (y + height <= c->height) { - if (y <= best_y) { - if (y < best_y || waste < best_waste || (waste==best_waste && xpos < best_x)) { - best_x = xpos; - STBRP_ASSERT(y <= best_y); - best_y = y; - best_waste = waste; - best = prev; - } - } - } - tail = tail->next; - } - } - - fr.prev_link = best; - fr.x = best_x; - fr.y = best_y; - return fr; -} - -static stbrp__findresult stbrp__skyline_pack_rectangle(stbrp_context *context, int width, int height) -{ - // find best position according to heuristic - stbrp__findresult res = stbrp__skyline_find_best_pos(context, width, height); - stbrp_node *node, *cur; - - // bail if: - // 1. it failed - // 2. the best node doesn't fit (we don't always check this) - // 3. we're out of memory - if (res.prev_link == NULL || res.y + height > context->height || context->free_head == NULL) { - res.prev_link = NULL; - return res; - } - - // on success, create new node - node = context->free_head; - node->x = (stbrp_coord) res.x; - node->y = (stbrp_coord) (res.y + height); - - context->free_head = node->next; - - // insert the new node into the right starting point, and - // let 'cur' point to the remaining nodes needing to be - // stiched back in - - cur = *res.prev_link; - if (cur->x < res.x) { - // preserve the existing one, so start testing with the next one - stbrp_node *next = cur->next; - cur->next = node; - cur = next; - } else { - *res.prev_link = node; - } - - // from here, traverse cur and free the nodes, until we get to one - // that shouldn't be freed - while (cur->next && cur->next->x <= res.x + width) { - stbrp_node *next = cur->next; - // move the current node to the free list - cur->next = context->free_head; - context->free_head = cur; - cur = next; - } - - // stitch the list back in - node->next = cur; - - if (cur->x < res.x + width) - cur->x = (stbrp_coord) (res.x + width); - -#ifdef _DEBUG - cur = context->active_head; - while (cur->x < context->width) { - STBRP_ASSERT(cur->x < cur->next->x); - cur = cur->next; - } - STBRP_ASSERT(cur->next == NULL); - - { - int count=0; - cur = context->active_head; - while (cur) { - cur = cur->next; - ++count; - } - cur = context->free_head; - while (cur) { - cur = cur->next; - ++count; - } - STBRP_ASSERT(count == context->num_nodes+2); - } -#endif - - return res; -} - -// [DEAR IMGUI] Added STBRP__CDECL -static int STBRP__CDECL rect_height_compare(const void *a, const void *b) -{ - const stbrp_rect *p = (const stbrp_rect *) a; - const stbrp_rect *q = (const stbrp_rect *) b; - if (p->h > q->h) - return -1; - if (p->h < q->h) - return 1; - return (p->w > q->w) ? -1 : (p->w < q->w); -} - -// [DEAR IMGUI] Added STBRP__CDECL -static int STBRP__CDECL rect_original_order(const void *a, const void *b) -{ - const stbrp_rect *p = (const stbrp_rect *) a; - const stbrp_rect *q = (const stbrp_rect *) b; - return (p->was_packed < q->was_packed) ? -1 : (p->was_packed > q->was_packed); -} - -#ifdef STBRP_LARGE_RECTS -#define STBRP__MAXVAL 0xffffffff -#else -#define STBRP__MAXVAL 0xffff -#endif - -STBRP_DEF int stbrp_pack_rects(stbrp_context *context, stbrp_rect *rects, int num_rects) -{ - int i, all_rects_packed = 1; - - // we use the 'was_packed' field internally to allow sorting/unsorting - for (i=0; i < num_rects; ++i) { - rects[i].was_packed = i; - } - - // sort according to heuristic - STBRP_SORT(rects, num_rects, sizeof(rects[0]), rect_height_compare); - - for (i=0; i < num_rects; ++i) { - if (rects[i].w == 0 || rects[i].h == 0) { - rects[i].x = rects[i].y = 0; // empty rect needs no space - } else { - stbrp__findresult fr = stbrp__skyline_pack_rectangle(context, rects[i].w, rects[i].h); - if (fr.prev_link) { - rects[i].x = (stbrp_coord) fr.x; - rects[i].y = (stbrp_coord) fr.y; - } else { - rects[i].x = rects[i].y = STBRP__MAXVAL; - } - } - } - - // unsort - STBRP_SORT(rects, num_rects, sizeof(rects[0]), rect_original_order); - - // set was_packed flags and all_rects_packed status - for (i=0; i < num_rects; ++i) { - rects[i].was_packed = !(rects[i].x == STBRP__MAXVAL && rects[i].y == STBRP__MAXVAL); - if (!rects[i].was_packed) - all_rects_packed = 0; - } - - // return the all_rects_packed status - return all_rects_packed; -} -#endif - -/* ------------------------------------------------------------------------------- -This software is available under 2 licenses -- choose whichever you prefer. ------------------------------------------------------------------------------- -ALTERNATIVE A - MIT License -Copyright (c) 2017 Sean Barrett -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ------------------------------------------------------------------------------- -ALTERNATIVE B - Public Domain (www.unlicense.org) -This is free and unencumbered software released into the public domain. -Anyone is free to copy, modify, publish, use, compile, sell, or distribute this -software, either in source code form or as a compiled binary, for any purpose, -commercial or non-commercial, and by any means. -In jurisdictions that recognize copyright laws, the author or authors of this -software dedicate any and all copyright interest in the software to the public -domain. We make this dedication for the benefit of the public at large and to -the detriment of our heirs and successors. We intend this dedication to be an -overt act of relinquishment in perpetuity of all present and future rights to -this software under copyright law. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ------------------------------------------------------------------------------- -*/ diff --git a/cmake/imgui/imstb_textedit.h b/cmake/imgui/imstb_textedit.h deleted file mode 100644 index 2077d02a..00000000 --- a/cmake/imgui/imstb_textedit.h +++ /dev/null @@ -1,1417 +0,0 @@ -// [DEAR IMGUI] -// This is a slightly modified version of stb_textedit.h 1.13. -// Those changes would need to be pushed into nothings/stb: -// - Fix in stb_textedit_discard_redo (see https://github.com/nothings/stb/issues/321) -// Grep for [DEAR IMGUI] to find the changes. - -// stb_textedit.h - v1.13 - public domain - Sean Barrett -// Development of this library was sponsored by RAD Game Tools -// -// This C header file implements the guts of a multi-line text-editing -// widget; you implement display, word-wrapping, and low-level string -// insertion/deletion, and stb_textedit will map user inputs into -// insertions & deletions, plus updates to the cursor position, -// selection state, and undo state. -// -// It is intended for use in games and other systems that need to build -// their own custom widgets and which do not have heavy text-editing -// requirements (this library is not recommended for use for editing large -// texts, as its performance does not scale and it has limited undo). -// -// Non-trivial behaviors are modelled after Windows text controls. -// -// -// LICENSE -// -// See end of file for license information. -// -// -// DEPENDENCIES -// -// Uses the C runtime function 'memmove', which you can override -// by defining STB_TEXTEDIT_memmove before the implementation. -// Uses no other functions. Performs no runtime allocations. -// -// -// VERSION HISTORY -// -// 1.13 (2019-02-07) fix bug in undo size management -// 1.12 (2018-01-29) user can change STB_TEXTEDIT_KEYTYPE, fix redo to avoid crash -// 1.11 (2017-03-03) fix HOME on last line, dragging off single-line textfield -// 1.10 (2016-10-25) supress warnings about casting away const with -Wcast-qual -// 1.9 (2016-08-27) customizable move-by-word -// 1.8 (2016-04-02) better keyboard handling when mouse button is down -// 1.7 (2015-09-13) change y range handling in case baseline is non-0 -// 1.6 (2015-04-15) allow STB_TEXTEDIT_memmove -// 1.5 (2014-09-10) add support for secondary keys for OS X -// 1.4 (2014-08-17) fix signed/unsigned warnings -// 1.3 (2014-06-19) fix mouse clicking to round to nearest char boundary -// 1.2 (2014-05-27) fix some RAD types that had crept into the new code -// 1.1 (2013-12-15) move-by-word (requires STB_TEXTEDIT_IS_SPACE ) -// 1.0 (2012-07-26) improve documentation, initial public release -// 0.3 (2012-02-24) bugfixes, single-line mode; insert mode -// 0.2 (2011-11-28) fixes to undo/redo -// 0.1 (2010-07-08) initial version -// -// ADDITIONAL CONTRIBUTORS -// -// Ulf Winklemann: move-by-word in 1.1 -// Fabian Giesen: secondary key inputs in 1.5 -// Martins Mozeiko: STB_TEXTEDIT_memmove in 1.6 -// -// Bugfixes: -// Scott Graham -// Daniel Keller -// Omar Cornut -// Dan Thompson -// -// USAGE -// -// This file behaves differently depending on what symbols you define -// before including it. -// -// -// Header-file mode: -// -// If you do not define STB_TEXTEDIT_IMPLEMENTATION before including this, -// it will operate in "header file" mode. In this mode, it declares a -// single public symbol, STB_TexteditState, which encapsulates the current -// state of a text widget (except for the string, which you will store -// separately). -// -// To compile in this mode, you must define STB_TEXTEDIT_CHARTYPE to a -// primitive type that defines a single character (e.g. char, wchar_t, etc). -// -// To save space or increase undo-ability, you can optionally define the -// following things that are used by the undo system: -// -// STB_TEXTEDIT_POSITIONTYPE small int type encoding a valid cursor position -// STB_TEXTEDIT_UNDOSTATECOUNT the number of undo states to allow -// STB_TEXTEDIT_UNDOCHARCOUNT the number of characters to store in the undo buffer -// -// If you don't define these, they are set to permissive types and -// moderate sizes. The undo system does no memory allocations, so -// it grows STB_TexteditState by the worst-case storage which is (in bytes): -// -// [4 + 3 * sizeof(STB_TEXTEDIT_POSITIONTYPE)] * STB_TEXTEDIT_UNDOSTATE_COUNT -// + sizeof(STB_TEXTEDIT_CHARTYPE) * STB_TEXTEDIT_UNDOCHAR_COUNT -// -// -// Implementation mode: -// -// If you define STB_TEXTEDIT_IMPLEMENTATION before including this, it -// will compile the implementation of the text edit widget, depending -// on a large number of symbols which must be defined before the include. -// -// The implementation is defined only as static functions. You will then -// need to provide your own APIs in the same file which will access the -// static functions. -// -// The basic concept is that you provide a "string" object which -// behaves like an array of characters. stb_textedit uses indices to -// refer to positions in the string, implicitly representing positions -// in the displayed textedit. This is true for both plain text and -// rich text; even with rich text stb_truetype interacts with your -// code as if there was an array of all the displayed characters. -// -// Symbols that must be the same in header-file and implementation mode: -// -// STB_TEXTEDIT_CHARTYPE the character type -// STB_TEXTEDIT_POSITIONTYPE small type that is a valid cursor position -// STB_TEXTEDIT_UNDOSTATECOUNT the number of undo states to allow -// STB_TEXTEDIT_UNDOCHARCOUNT the number of characters to store in the undo buffer -// -// Symbols you must define for implementation mode: -// -// STB_TEXTEDIT_STRING the type of object representing a string being edited, -// typically this is a wrapper object with other data you need -// -// STB_TEXTEDIT_STRINGLEN(obj) the length of the string (ideally O(1)) -// STB_TEXTEDIT_LAYOUTROW(&r,obj,n) returns the results of laying out a line of characters -// starting from character #n (see discussion below) -// STB_TEXTEDIT_GETWIDTH(obj,n,i) returns the pixel delta from the xpos of the i'th character -// to the xpos of the i+1'th char for a line of characters -// starting at character #n (i.e. accounts for kerning -// with previous char) -// STB_TEXTEDIT_KEYTOTEXT(k) maps a keyboard input to an insertable character -// (return type is int, -1 means not valid to insert) -// STB_TEXTEDIT_GETCHAR(obj,i) returns the i'th character of obj, 0-based -// STB_TEXTEDIT_NEWLINE the character returned by _GETCHAR() we recognize -// as manually wordwrapping for end-of-line positioning -// -// STB_TEXTEDIT_DELETECHARS(obj,i,n) delete n characters starting at i -// STB_TEXTEDIT_INSERTCHARS(obj,i,c*,n) insert n characters at i (pointed to by STB_TEXTEDIT_CHARTYPE*) -// -// STB_TEXTEDIT_K_SHIFT a power of two that is or'd in to a keyboard input to represent the shift key -// -// STB_TEXTEDIT_K_LEFT keyboard input to move cursor left -// STB_TEXTEDIT_K_RIGHT keyboard input to move cursor right -// STB_TEXTEDIT_K_UP keyboard input to move cursor up -// STB_TEXTEDIT_K_DOWN keyboard input to move cursor down -// STB_TEXTEDIT_K_LINESTART keyboard input to move cursor to start of line // e.g. HOME -// STB_TEXTEDIT_K_LINEEND keyboard input to move cursor to end of line // e.g. END -// STB_TEXTEDIT_K_TEXTSTART keyboard input to move cursor to start of text // e.g. ctrl-HOME -// STB_TEXTEDIT_K_TEXTEND keyboard input to move cursor to end of text // e.g. ctrl-END -// STB_TEXTEDIT_K_DELETE keyboard input to delete selection or character under cursor -// STB_TEXTEDIT_K_BACKSPACE keyboard input to delete selection or character left of cursor -// STB_TEXTEDIT_K_UNDO keyboard input to perform undo -// STB_TEXTEDIT_K_REDO keyboard input to perform redo -// -// Optional: -// STB_TEXTEDIT_K_INSERT keyboard input to toggle insert mode -// STB_TEXTEDIT_IS_SPACE(ch) true if character is whitespace (e.g. 'isspace'), -// required for default WORDLEFT/WORDRIGHT handlers -// STB_TEXTEDIT_MOVEWORDLEFT(obj,i) custom handler for WORDLEFT, returns index to move cursor to -// STB_TEXTEDIT_MOVEWORDRIGHT(obj,i) custom handler for WORDRIGHT, returns index to move cursor to -// STB_TEXTEDIT_K_WORDLEFT keyboard input to move cursor left one word // e.g. ctrl-LEFT -// STB_TEXTEDIT_K_WORDRIGHT keyboard input to move cursor right one word // e.g. ctrl-RIGHT -// STB_TEXTEDIT_K_LINESTART2 secondary keyboard input to move cursor to start of line -// STB_TEXTEDIT_K_LINEEND2 secondary keyboard input to move cursor to end of line -// STB_TEXTEDIT_K_TEXTSTART2 secondary keyboard input to move cursor to start of text -// STB_TEXTEDIT_K_TEXTEND2 secondary keyboard input to move cursor to end of text -// -// Todo: -// STB_TEXTEDIT_K_PGUP keyboard input to move cursor up a page -// STB_TEXTEDIT_K_PGDOWN keyboard input to move cursor down a page -// -// Keyboard input must be encoded as a single integer value; e.g. a character code -// and some bitflags that represent shift states. to simplify the interface, SHIFT must -// be a bitflag, so we can test the shifted state of cursor movements to allow selection, -// i.e. (STB_TEXTED_K_RIGHT|STB_TEXTEDIT_K_SHIFT) should be shifted right-arrow. -// -// You can encode other things, such as CONTROL or ALT, in additional bits, and -// then test for their presence in e.g. STB_TEXTEDIT_K_WORDLEFT. For example, -// my Windows implementations add an additional CONTROL bit, and an additional KEYDOWN -// bit. Then all of the STB_TEXTEDIT_K_ values bitwise-or in the KEYDOWN bit, -// and I pass both WM_KEYDOWN and WM_CHAR events to the "key" function in the -// API below. The control keys will only match WM_KEYDOWN events because of the -// keydown bit I add, and STB_TEXTEDIT_KEYTOTEXT only tests for the KEYDOWN -// bit so it only decodes WM_CHAR events. -// -// STB_TEXTEDIT_LAYOUTROW returns information about the shape of one displayed -// row of characters assuming they start on the i'th character--the width and -// the height and the number of characters consumed. This allows this library -// to traverse the entire layout incrementally. You need to compute word-wrapping -// here. -// -// Each textfield keeps its own insert mode state, which is not how normal -// applications work. To keep an app-wide insert mode, update/copy the -// "insert_mode" field of STB_TexteditState before/after calling API functions. -// -// API -// -// void stb_textedit_initialize_state(STB_TexteditState *state, int is_single_line) -// -// void stb_textedit_click(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, float x, float y) -// void stb_textedit_drag(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, float x, float y) -// int stb_textedit_cut(STB_TEXTEDIT_STRING *str, STB_TexteditState *state) -// int stb_textedit_paste(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXTEDIT_CHARTYPE *text, int len) -// void stb_textedit_key(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXEDIT_KEYTYPE key) -// -// Each of these functions potentially updates the string and updates the -// state. -// -// initialize_state: -// set the textedit state to a known good default state when initially -// constructing the textedit. -// -// click: -// call this with the mouse x,y on a mouse down; it will update the cursor -// and reset the selection start/end to the cursor point. the x,y must -// be relative to the text widget, with (0,0) being the top left. -// -// drag: -// call this with the mouse x,y on a mouse drag/up; it will update the -// cursor and the selection end point -// -// cut: -// call this to delete the current selection; returns true if there was -// one. you should FIRST copy the current selection to the system paste buffer. -// (To copy, just copy the current selection out of the string yourself.) -// -// paste: -// call this to paste text at the current cursor point or over the current -// selection if there is one. -// -// key: -// call this for keyboard inputs sent to the textfield. you can use it -// for "key down" events or for "translated" key events. if you need to -// do both (as in Win32), or distinguish Unicode characters from control -// inputs, set a high bit to distinguish the two; then you can define the -// various definitions like STB_TEXTEDIT_K_LEFT have the is-key-event bit -// set, and make STB_TEXTEDIT_KEYTOCHAR check that the is-key-event bit is -// clear. STB_TEXTEDIT_KEYTYPE defaults to int, but you can #define it to -// anything other type you wante before including. -// -// -// When rendering, you can read the cursor position and selection state from -// the STB_TexteditState. -// -// -// Notes: -// -// This is designed to be usable in IMGUI, so it allows for the possibility of -// running in an IMGUI that has NOT cached the multi-line layout. For this -// reason, it provides an interface that is compatible with computing the -// layout incrementally--we try to make sure we make as few passes through -// as possible. (For example, to locate the mouse pointer in the text, we -// could define functions that return the X and Y positions of characters -// and binary search Y and then X, but if we're doing dynamic layout this -// will run the layout algorithm many times, so instead we manually search -// forward in one pass. Similar logic applies to e.g. up-arrow and -// down-arrow movement.) -// -// If it's run in a widget that *has* cached the layout, then this is less -// efficient, but it's not horrible on modern computers. But you wouldn't -// want to edit million-line files with it. - - -//////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////// -//// -//// Header-file mode -//// -//// - -#ifndef INCLUDE_STB_TEXTEDIT_H -#define INCLUDE_STB_TEXTEDIT_H - -//////////////////////////////////////////////////////////////////////// -// -// STB_TexteditState -// -// Definition of STB_TexteditState which you should store -// per-textfield; it includes cursor position, selection state, -// and undo state. -// - -#ifndef STB_TEXTEDIT_UNDOSTATECOUNT -#define STB_TEXTEDIT_UNDOSTATECOUNT 99 -#endif -#ifndef STB_TEXTEDIT_UNDOCHARCOUNT -#define STB_TEXTEDIT_UNDOCHARCOUNT 999 -#endif -#ifndef STB_TEXTEDIT_CHARTYPE -#define STB_TEXTEDIT_CHARTYPE int -#endif -#ifndef STB_TEXTEDIT_POSITIONTYPE -#define STB_TEXTEDIT_POSITIONTYPE int -#endif - -typedef struct -{ - // private data - STB_TEXTEDIT_POSITIONTYPE where; - STB_TEXTEDIT_POSITIONTYPE insert_length; - STB_TEXTEDIT_POSITIONTYPE delete_length; - int char_storage; -} StbUndoRecord; - -typedef struct -{ - // private data - StbUndoRecord undo_rec [STB_TEXTEDIT_UNDOSTATECOUNT]; - STB_TEXTEDIT_CHARTYPE undo_char[STB_TEXTEDIT_UNDOCHARCOUNT]; - short undo_point, redo_point; - int undo_char_point, redo_char_point; -} StbUndoState; - -typedef struct -{ - ///////////////////// - // - // public data - // - - int cursor; - // position of the text cursor within the string - - int select_start; // selection start point - int select_end; - // selection start and end point in characters; if equal, no selection. - // note that start may be less than or greater than end (e.g. when - // dragging the mouse, start is where the initial click was, and you - // can drag in either direction) - - unsigned char insert_mode; - // each textfield keeps its own insert mode state. to keep an app-wide - // insert mode, copy this value in/out of the app state - - ///////////////////// - // - // private data - // - unsigned char cursor_at_end_of_line; // not implemented yet - unsigned char initialized; - unsigned char has_preferred_x; - unsigned char single_line; - unsigned char padding1, padding2, padding3; - float preferred_x; // this determines where the cursor up/down tries to seek to along x - StbUndoState undostate; -} STB_TexteditState; - - -//////////////////////////////////////////////////////////////////////// -// -// StbTexteditRow -// -// Result of layout query, used by stb_textedit to determine where -// the text in each row is. - -// result of layout query -typedef struct -{ - float x0,x1; // starting x location, end x location (allows for align=right, etc) - float baseline_y_delta; // position of baseline relative to previous row's baseline - float ymin,ymax; // height of row above and below baseline - int num_chars; -} StbTexteditRow; -#endif //INCLUDE_STB_TEXTEDIT_H - - -//////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////// -//// -//// Implementation mode -//// -//// - - -// implementation isn't include-guarded, since it might have indirectly -// included just the "header" portion -#ifdef STB_TEXTEDIT_IMPLEMENTATION - -#ifndef STB_TEXTEDIT_memmove -#include -#define STB_TEXTEDIT_memmove memmove -#endif - - -///////////////////////////////////////////////////////////////////////////// -// -// Mouse input handling -// - -// traverse the layout to locate the nearest character to a display position -static int stb_text_locate_coord(STB_TEXTEDIT_STRING *str, float x, float y) -{ - StbTexteditRow r; - int n = STB_TEXTEDIT_STRINGLEN(str); - float base_y = 0, prev_x; - int i=0, k; - - r.x0 = r.x1 = 0; - r.ymin = r.ymax = 0; - r.num_chars = 0; - - // search rows to find one that straddles 'y' - while (i < n) { - STB_TEXTEDIT_LAYOUTROW(&r, str, i); - if (r.num_chars <= 0) - return n; - - if (i==0 && y < base_y + r.ymin) - return 0; - - if (y < base_y + r.ymax) - break; - - i += r.num_chars; - base_y += r.baseline_y_delta; - } - - // below all text, return 'after' last character - if (i >= n) - return n; - - // check if it's before the beginning of the line - if (x < r.x0) - return i; - - // check if it's before the end of the line - if (x < r.x1) { - // search characters in row for one that straddles 'x' - prev_x = r.x0; - for (k=0; k < r.num_chars; ++k) { - float w = STB_TEXTEDIT_GETWIDTH(str, i, k); - if (x < prev_x+w) { - if (x < prev_x+w/2) - return k+i; - else - return k+i+1; - } - prev_x += w; - } - // shouldn't happen, but if it does, fall through to end-of-line case - } - - // if the last character is a newline, return that. otherwise return 'after' the last character - if (STB_TEXTEDIT_GETCHAR(str, i+r.num_chars-1) == STB_TEXTEDIT_NEWLINE) - return i+r.num_chars-1; - else - return i+r.num_chars; -} - -// API click: on mouse down, move the cursor to the clicked location, and reset the selection -static void stb_textedit_click(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, float x, float y) -{ - // In single-line mode, just always make y = 0. This lets the drag keep working if the mouse - // goes off the top or bottom of the text - if( state->single_line ) - { - StbTexteditRow r; - STB_TEXTEDIT_LAYOUTROW(&r, str, 0); - y = r.ymin; - } - - state->cursor = stb_text_locate_coord(str, x, y); - state->select_start = state->cursor; - state->select_end = state->cursor; - state->has_preferred_x = 0; -} - -// API drag: on mouse drag, move the cursor and selection endpoint to the clicked location -static void stb_textedit_drag(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, float x, float y) -{ - int p = 0; - - // In single-line mode, just always make y = 0. This lets the drag keep working if the mouse - // goes off the top or bottom of the text - if( state->single_line ) - { - StbTexteditRow r; - STB_TEXTEDIT_LAYOUTROW(&r, str, 0); - y = r.ymin; - } - - if (state->select_start == state->select_end) - state->select_start = state->cursor; - - p = stb_text_locate_coord(str, x, y); - state->cursor = state->select_end = p; -} - -///////////////////////////////////////////////////////////////////////////// -// -// Keyboard input handling -// - -// forward declarations -static void stb_text_undo(STB_TEXTEDIT_STRING *str, STB_TexteditState *state); -static void stb_text_redo(STB_TEXTEDIT_STRING *str, STB_TexteditState *state); -static void stb_text_makeundo_delete(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int length); -static void stb_text_makeundo_insert(STB_TexteditState *state, int where, int length); -static void stb_text_makeundo_replace(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int old_length, int new_length); - -typedef struct -{ - float x,y; // position of n'th character - float height; // height of line - int first_char, length; // first char of row, and length - int prev_first; // first char of previous row -} StbFindState; - -// find the x/y location of a character, and remember info about the previous row in -// case we get a move-up event (for page up, we'll have to rescan) -static void stb_textedit_find_charpos(StbFindState *find, STB_TEXTEDIT_STRING *str, int n, int single_line) -{ - StbTexteditRow r; - int prev_start = 0; - int z = STB_TEXTEDIT_STRINGLEN(str); - int i=0, first; - - if (n == z) { - // if it's at the end, then find the last line -- simpler than trying to - // explicitly handle this case in the regular code - if (single_line) { - STB_TEXTEDIT_LAYOUTROW(&r, str, 0); - find->y = 0; - find->first_char = 0; - find->length = z; - find->height = r.ymax - r.ymin; - find->x = r.x1; - } else { - find->y = 0; - find->x = 0; - find->height = 1; - while (i < z) { - STB_TEXTEDIT_LAYOUTROW(&r, str, i); - prev_start = i; - i += r.num_chars; - } - find->first_char = i; - find->length = 0; - find->prev_first = prev_start; - } - return; - } - - // search rows to find the one that straddles character n - find->y = 0; - - for(;;) { - STB_TEXTEDIT_LAYOUTROW(&r, str, i); - if (n < i + r.num_chars) - break; - prev_start = i; - i += r.num_chars; - find->y += r.baseline_y_delta; - } - - find->first_char = first = i; - find->length = r.num_chars; - find->height = r.ymax - r.ymin; - find->prev_first = prev_start; - - // now scan to find xpos - find->x = r.x0; - for (i=0; first+i < n; ++i) - find->x += STB_TEXTEDIT_GETWIDTH(str, first, i); -} - -#define STB_TEXT_HAS_SELECTION(s) ((s)->select_start != (s)->select_end) - -// make the selection/cursor state valid if client altered the string -static void stb_textedit_clamp(STB_TEXTEDIT_STRING *str, STB_TexteditState *state) -{ - int n = STB_TEXTEDIT_STRINGLEN(str); - if (STB_TEXT_HAS_SELECTION(state)) { - if (state->select_start > n) state->select_start = n; - if (state->select_end > n) state->select_end = n; - // if clamping forced them to be equal, move the cursor to match - if (state->select_start == state->select_end) - state->cursor = state->select_start; - } - if (state->cursor > n) state->cursor = n; -} - -// delete characters while updating undo -static void stb_textedit_delete(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int len) -{ - stb_text_makeundo_delete(str, state, where, len); - STB_TEXTEDIT_DELETECHARS(str, where, len); - state->has_preferred_x = 0; -} - -// delete the section -static void stb_textedit_delete_selection(STB_TEXTEDIT_STRING *str, STB_TexteditState *state) -{ - stb_textedit_clamp(str, state); - if (STB_TEXT_HAS_SELECTION(state)) { - if (state->select_start < state->select_end) { - stb_textedit_delete(str, state, state->select_start, state->select_end - state->select_start); - state->select_end = state->cursor = state->select_start; - } else { - stb_textedit_delete(str, state, state->select_end, state->select_start - state->select_end); - state->select_start = state->cursor = state->select_end; - } - state->has_preferred_x = 0; - } -} - -// canoncialize the selection so start <= end -static void stb_textedit_sortselection(STB_TexteditState *state) -{ - if (state->select_end < state->select_start) { - int temp = state->select_end; - state->select_end = state->select_start; - state->select_start = temp; - } -} - -// move cursor to first character of selection -static void stb_textedit_move_to_first(STB_TexteditState *state) -{ - if (STB_TEXT_HAS_SELECTION(state)) { - stb_textedit_sortselection(state); - state->cursor = state->select_start; - state->select_end = state->select_start; - state->has_preferred_x = 0; - } -} - -// move cursor to last character of selection -static void stb_textedit_move_to_last(STB_TEXTEDIT_STRING *str, STB_TexteditState *state) -{ - if (STB_TEXT_HAS_SELECTION(state)) { - stb_textedit_sortselection(state); - stb_textedit_clamp(str, state); - state->cursor = state->select_end; - state->select_start = state->select_end; - state->has_preferred_x = 0; - } -} - -#ifdef STB_TEXTEDIT_IS_SPACE -static int is_word_boundary( STB_TEXTEDIT_STRING *str, int idx ) -{ - return idx > 0 ? (STB_TEXTEDIT_IS_SPACE( STB_TEXTEDIT_GETCHAR(str,idx-1) ) && !STB_TEXTEDIT_IS_SPACE( STB_TEXTEDIT_GETCHAR(str, idx) ) ) : 1; -} - -#ifndef STB_TEXTEDIT_MOVEWORDLEFT -static int stb_textedit_move_to_word_previous( STB_TEXTEDIT_STRING *str, int c ) -{ - --c; // always move at least one character - while( c >= 0 && !is_word_boundary( str, c ) ) - --c; - - if( c < 0 ) - c = 0; - - return c; -} -#define STB_TEXTEDIT_MOVEWORDLEFT stb_textedit_move_to_word_previous -#endif - -#ifndef STB_TEXTEDIT_MOVEWORDRIGHT -static int stb_textedit_move_to_word_next( STB_TEXTEDIT_STRING *str, int c ) -{ - const int len = STB_TEXTEDIT_STRINGLEN(str); - ++c; // always move at least one character - while( c < len && !is_word_boundary( str, c ) ) - ++c; - - if( c > len ) - c = len; - - return c; -} -#define STB_TEXTEDIT_MOVEWORDRIGHT stb_textedit_move_to_word_next -#endif - -#endif - -// update selection and cursor to match each other -static void stb_textedit_prep_selection_at_cursor(STB_TexteditState *state) -{ - if (!STB_TEXT_HAS_SELECTION(state)) - state->select_start = state->select_end = state->cursor; - else - state->cursor = state->select_end; -} - -// API cut: delete selection -static int stb_textedit_cut(STB_TEXTEDIT_STRING *str, STB_TexteditState *state) -{ - if (STB_TEXT_HAS_SELECTION(state)) { - stb_textedit_delete_selection(str,state); // implicitly clamps - state->has_preferred_x = 0; - return 1; - } - return 0; -} - -// API paste: replace existing selection with passed-in text -static int stb_textedit_paste_internal(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXTEDIT_CHARTYPE *text, int len) -{ - // if there's a selection, the paste should delete it - stb_textedit_clamp(str, state); - stb_textedit_delete_selection(str,state); - // try to insert the characters - if (STB_TEXTEDIT_INSERTCHARS(str, state->cursor, text, len)) { - stb_text_makeundo_insert(state, state->cursor, len); - state->cursor += len; - state->has_preferred_x = 0; - return 1; - } - // remove the undo since we didn't actually insert the characters - if (state->undostate.undo_point) - --state->undostate.undo_point; - return 0; -} - -#ifndef STB_TEXTEDIT_KEYTYPE -#define STB_TEXTEDIT_KEYTYPE int -#endif - -// API key: process a keyboard input -static void stb_textedit_key(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXTEDIT_KEYTYPE key) -{ -retry: - switch (key) { - default: { - int c = STB_TEXTEDIT_KEYTOTEXT(key); - if (c > 0) { - STB_TEXTEDIT_CHARTYPE ch = (STB_TEXTEDIT_CHARTYPE) c; - - // can't add newline in single-line mode - if (c == '\n' && state->single_line) - break; - - if (state->insert_mode && !STB_TEXT_HAS_SELECTION(state) && state->cursor < STB_TEXTEDIT_STRINGLEN(str)) { - stb_text_makeundo_replace(str, state, state->cursor, 1, 1); - STB_TEXTEDIT_DELETECHARS(str, state->cursor, 1); - if (STB_TEXTEDIT_INSERTCHARS(str, state->cursor, &ch, 1)) { - ++state->cursor; - state->has_preferred_x = 0; - } - } else { - stb_textedit_delete_selection(str,state); // implicitly clamps - if (STB_TEXTEDIT_INSERTCHARS(str, state->cursor, &ch, 1)) { - stb_text_makeundo_insert(state, state->cursor, 1); - ++state->cursor; - state->has_preferred_x = 0; - } - } - } - break; - } - -#ifdef STB_TEXTEDIT_K_INSERT - case STB_TEXTEDIT_K_INSERT: - state->insert_mode = !state->insert_mode; - break; -#endif - - case STB_TEXTEDIT_K_UNDO: - stb_text_undo(str, state); - state->has_preferred_x = 0; - break; - - case STB_TEXTEDIT_K_REDO: - stb_text_redo(str, state); - state->has_preferred_x = 0; - break; - - case STB_TEXTEDIT_K_LEFT: - // if currently there's a selection, move cursor to start of selection - if (STB_TEXT_HAS_SELECTION(state)) - stb_textedit_move_to_first(state); - else - if (state->cursor > 0) - --state->cursor; - state->has_preferred_x = 0; - break; - - case STB_TEXTEDIT_K_RIGHT: - // if currently there's a selection, move cursor to end of selection - if (STB_TEXT_HAS_SELECTION(state)) - stb_textedit_move_to_last(str, state); - else - ++state->cursor; - stb_textedit_clamp(str, state); - state->has_preferred_x = 0; - break; - - case STB_TEXTEDIT_K_LEFT | STB_TEXTEDIT_K_SHIFT: - stb_textedit_clamp(str, state); - stb_textedit_prep_selection_at_cursor(state); - // move selection left - if (state->select_end > 0) - --state->select_end; - state->cursor = state->select_end; - state->has_preferred_x = 0; - break; - -#ifdef STB_TEXTEDIT_MOVEWORDLEFT - case STB_TEXTEDIT_K_WORDLEFT: - if (STB_TEXT_HAS_SELECTION(state)) - stb_textedit_move_to_first(state); - else { - state->cursor = STB_TEXTEDIT_MOVEWORDLEFT(str, state->cursor); - stb_textedit_clamp( str, state ); - } - break; - - case STB_TEXTEDIT_K_WORDLEFT | STB_TEXTEDIT_K_SHIFT: - if( !STB_TEXT_HAS_SELECTION( state ) ) - stb_textedit_prep_selection_at_cursor(state); - - state->cursor = STB_TEXTEDIT_MOVEWORDLEFT(str, state->cursor); - state->select_end = state->cursor; - - stb_textedit_clamp( str, state ); - break; -#endif - -#ifdef STB_TEXTEDIT_MOVEWORDRIGHT - case STB_TEXTEDIT_K_WORDRIGHT: - if (STB_TEXT_HAS_SELECTION(state)) - stb_textedit_move_to_last(str, state); - else { - state->cursor = STB_TEXTEDIT_MOVEWORDRIGHT(str, state->cursor); - stb_textedit_clamp( str, state ); - } - break; - - case STB_TEXTEDIT_K_WORDRIGHT | STB_TEXTEDIT_K_SHIFT: - if( !STB_TEXT_HAS_SELECTION( state ) ) - stb_textedit_prep_selection_at_cursor(state); - - state->cursor = STB_TEXTEDIT_MOVEWORDRIGHT(str, state->cursor); - state->select_end = state->cursor; - - stb_textedit_clamp( str, state ); - break; -#endif - - case STB_TEXTEDIT_K_RIGHT | STB_TEXTEDIT_K_SHIFT: - stb_textedit_prep_selection_at_cursor(state); - // move selection right - ++state->select_end; - stb_textedit_clamp(str, state); - state->cursor = state->select_end; - state->has_preferred_x = 0; - break; - - case STB_TEXTEDIT_K_DOWN: - case STB_TEXTEDIT_K_DOWN | STB_TEXTEDIT_K_SHIFT: { - StbFindState find; - StbTexteditRow row; - int i, sel = (key & STB_TEXTEDIT_K_SHIFT) != 0; - - if (state->single_line) { - // on windows, up&down in single-line behave like left&right - key = STB_TEXTEDIT_K_RIGHT | (key & STB_TEXTEDIT_K_SHIFT); - goto retry; - } - - if (sel) - stb_textedit_prep_selection_at_cursor(state); - else if (STB_TEXT_HAS_SELECTION(state)) - stb_textedit_move_to_last(str,state); - - // compute current position of cursor point - stb_textedit_clamp(str, state); - stb_textedit_find_charpos(&find, str, state->cursor, state->single_line); - - // now find character position down a row - if (find.length) { - float goal_x = state->has_preferred_x ? state->preferred_x : find.x; - float x; - int start = find.first_char + find.length; - state->cursor = start; - STB_TEXTEDIT_LAYOUTROW(&row, str, state->cursor); - x = row.x0; - for (i=0; i < row.num_chars; ++i) { - float dx = STB_TEXTEDIT_GETWIDTH(str, start, i); - #ifdef STB_TEXTEDIT_GETWIDTH_NEWLINE - if (dx == STB_TEXTEDIT_GETWIDTH_NEWLINE) - break; - #endif - x += dx; - if (x > goal_x) - break; - ++state->cursor; - } - stb_textedit_clamp(str, state); - - state->has_preferred_x = 1; - state->preferred_x = goal_x; - - if (sel) - state->select_end = state->cursor; - } - break; - } - - case STB_TEXTEDIT_K_UP: - case STB_TEXTEDIT_K_UP | STB_TEXTEDIT_K_SHIFT: { - StbFindState find; - StbTexteditRow row; - int i, sel = (key & STB_TEXTEDIT_K_SHIFT) != 0; - - if (state->single_line) { - // on windows, up&down become left&right - key = STB_TEXTEDIT_K_LEFT | (key & STB_TEXTEDIT_K_SHIFT); - goto retry; - } - - if (sel) - stb_textedit_prep_selection_at_cursor(state); - else if (STB_TEXT_HAS_SELECTION(state)) - stb_textedit_move_to_first(state); - - // compute current position of cursor point - stb_textedit_clamp(str, state); - stb_textedit_find_charpos(&find, str, state->cursor, state->single_line); - - // can only go up if there's a previous row - if (find.prev_first != find.first_char) { - // now find character position up a row - float goal_x = state->has_preferred_x ? state->preferred_x : find.x; - float x; - state->cursor = find.prev_first; - STB_TEXTEDIT_LAYOUTROW(&row, str, state->cursor); - x = row.x0; - for (i=0; i < row.num_chars; ++i) { - float dx = STB_TEXTEDIT_GETWIDTH(str, find.prev_first, i); - #ifdef STB_TEXTEDIT_GETWIDTH_NEWLINE - if (dx == STB_TEXTEDIT_GETWIDTH_NEWLINE) - break; - #endif - x += dx; - if (x > goal_x) - break; - ++state->cursor; - } - stb_textedit_clamp(str, state); - - state->has_preferred_x = 1; - state->preferred_x = goal_x; - - if (sel) - state->select_end = state->cursor; - } - break; - } - - case STB_TEXTEDIT_K_DELETE: - case STB_TEXTEDIT_K_DELETE | STB_TEXTEDIT_K_SHIFT: - if (STB_TEXT_HAS_SELECTION(state)) - stb_textedit_delete_selection(str, state); - else { - int n = STB_TEXTEDIT_STRINGLEN(str); - if (state->cursor < n) - stb_textedit_delete(str, state, state->cursor, 1); - } - state->has_preferred_x = 0; - break; - - case STB_TEXTEDIT_K_BACKSPACE: - case STB_TEXTEDIT_K_BACKSPACE | STB_TEXTEDIT_K_SHIFT: - if (STB_TEXT_HAS_SELECTION(state)) - stb_textedit_delete_selection(str, state); - else { - stb_textedit_clamp(str, state); - if (state->cursor > 0) { - stb_textedit_delete(str, state, state->cursor-1, 1); - --state->cursor; - } - } - state->has_preferred_x = 0; - break; - -#ifdef STB_TEXTEDIT_K_TEXTSTART2 - case STB_TEXTEDIT_K_TEXTSTART2: -#endif - case STB_TEXTEDIT_K_TEXTSTART: - state->cursor = state->select_start = state->select_end = 0; - state->has_preferred_x = 0; - break; - -#ifdef STB_TEXTEDIT_K_TEXTEND2 - case STB_TEXTEDIT_K_TEXTEND2: -#endif - case STB_TEXTEDIT_K_TEXTEND: - state->cursor = STB_TEXTEDIT_STRINGLEN(str); - state->select_start = state->select_end = 0; - state->has_preferred_x = 0; - break; - -#ifdef STB_TEXTEDIT_K_TEXTSTART2 - case STB_TEXTEDIT_K_TEXTSTART2 | STB_TEXTEDIT_K_SHIFT: -#endif - case STB_TEXTEDIT_K_TEXTSTART | STB_TEXTEDIT_K_SHIFT: - stb_textedit_prep_selection_at_cursor(state); - state->cursor = state->select_end = 0; - state->has_preferred_x = 0; - break; - -#ifdef STB_TEXTEDIT_K_TEXTEND2 - case STB_TEXTEDIT_K_TEXTEND2 | STB_TEXTEDIT_K_SHIFT: -#endif - case STB_TEXTEDIT_K_TEXTEND | STB_TEXTEDIT_K_SHIFT: - stb_textedit_prep_selection_at_cursor(state); - state->cursor = state->select_end = STB_TEXTEDIT_STRINGLEN(str); - state->has_preferred_x = 0; - break; - - -#ifdef STB_TEXTEDIT_K_LINESTART2 - case STB_TEXTEDIT_K_LINESTART2: -#endif - case STB_TEXTEDIT_K_LINESTART: - stb_textedit_clamp(str, state); - stb_textedit_move_to_first(state); - if (state->single_line) - state->cursor = 0; - else while (state->cursor > 0 && STB_TEXTEDIT_GETCHAR(str, state->cursor-1) != STB_TEXTEDIT_NEWLINE) - --state->cursor; - state->has_preferred_x = 0; - break; - -#ifdef STB_TEXTEDIT_K_LINEEND2 - case STB_TEXTEDIT_K_LINEEND2: -#endif - case STB_TEXTEDIT_K_LINEEND: { - int n = STB_TEXTEDIT_STRINGLEN(str); - stb_textedit_clamp(str, state); - stb_textedit_move_to_first(state); - if (state->single_line) - state->cursor = n; - else while (state->cursor < n && STB_TEXTEDIT_GETCHAR(str, state->cursor) != STB_TEXTEDIT_NEWLINE) - ++state->cursor; - state->has_preferred_x = 0; - break; - } - -#ifdef STB_TEXTEDIT_K_LINESTART2 - case STB_TEXTEDIT_K_LINESTART2 | STB_TEXTEDIT_K_SHIFT: -#endif - case STB_TEXTEDIT_K_LINESTART | STB_TEXTEDIT_K_SHIFT: - stb_textedit_clamp(str, state); - stb_textedit_prep_selection_at_cursor(state); - if (state->single_line) - state->cursor = 0; - else while (state->cursor > 0 && STB_TEXTEDIT_GETCHAR(str, state->cursor-1) != STB_TEXTEDIT_NEWLINE) - --state->cursor; - state->select_end = state->cursor; - state->has_preferred_x = 0; - break; - -#ifdef STB_TEXTEDIT_K_LINEEND2 - case STB_TEXTEDIT_K_LINEEND2 | STB_TEXTEDIT_K_SHIFT: -#endif - case STB_TEXTEDIT_K_LINEEND | STB_TEXTEDIT_K_SHIFT: { - int n = STB_TEXTEDIT_STRINGLEN(str); - stb_textedit_clamp(str, state); - stb_textedit_prep_selection_at_cursor(state); - if (state->single_line) - state->cursor = n; - else while (state->cursor < n && STB_TEXTEDIT_GETCHAR(str, state->cursor) != STB_TEXTEDIT_NEWLINE) - ++state->cursor; - state->select_end = state->cursor; - state->has_preferred_x = 0; - break; - } - -// @TODO: -// STB_TEXTEDIT_K_PGUP - move cursor up a page -// STB_TEXTEDIT_K_PGDOWN - move cursor down a page - } -} - -///////////////////////////////////////////////////////////////////////////// -// -// Undo processing -// -// @OPTIMIZE: the undo/redo buffer should be circular - -static void stb_textedit_flush_redo(StbUndoState *state) -{ - state->redo_point = STB_TEXTEDIT_UNDOSTATECOUNT; - state->redo_char_point = STB_TEXTEDIT_UNDOCHARCOUNT; -} - -// discard the oldest entry in the undo list -static void stb_textedit_discard_undo(StbUndoState *state) -{ - if (state->undo_point > 0) { - // if the 0th undo state has characters, clean those up - if (state->undo_rec[0].char_storage >= 0) { - int n = state->undo_rec[0].insert_length, i; - // delete n characters from all other records - state->undo_char_point -= n; - STB_TEXTEDIT_memmove(state->undo_char, state->undo_char + n, (size_t) (state->undo_char_point*sizeof(STB_TEXTEDIT_CHARTYPE))); - for (i=0; i < state->undo_point; ++i) - if (state->undo_rec[i].char_storage >= 0) - state->undo_rec[i].char_storage -= n; // @OPTIMIZE: get rid of char_storage and infer it - } - --state->undo_point; - STB_TEXTEDIT_memmove(state->undo_rec, state->undo_rec+1, (size_t) (state->undo_point*sizeof(state->undo_rec[0]))); - } -} - -// discard the oldest entry in the redo list--it's bad if this -// ever happens, but because undo & redo have to store the actual -// characters in different cases, the redo character buffer can -// fill up even though the undo buffer didn't -static void stb_textedit_discard_redo(StbUndoState *state) -{ - int k = STB_TEXTEDIT_UNDOSTATECOUNT-1; - - if (state->redo_point <= k) { - // if the k'th undo state has characters, clean those up - if (state->undo_rec[k].char_storage >= 0) { - int n = state->undo_rec[k].insert_length, i; - // move the remaining redo character data to the end of the buffer - state->redo_char_point += n; - STB_TEXTEDIT_memmove(state->undo_char + state->redo_char_point, state->undo_char + state->redo_char_point-n, (size_t) ((STB_TEXTEDIT_UNDOCHARCOUNT - state->redo_char_point)*sizeof(STB_TEXTEDIT_CHARTYPE))); - // adjust the position of all the other records to account for above memmove - for (i=state->redo_point; i < k; ++i) - if (state->undo_rec[i].char_storage >= 0) - state->undo_rec[i].char_storage += n; - } - // now move all the redo records towards the end of the buffer; the first one is at 'redo_point' - // {DEAR IMGUI] - size_t move_size = (size_t)((STB_TEXTEDIT_UNDOSTATECOUNT - state->redo_point - 1) * sizeof(state->undo_rec[0])); - const char* buf_begin = (char*)state->undo_rec; (void)buf_begin; - const char* buf_end = (char*)state->undo_rec + sizeof(state->undo_rec); (void)buf_end; - IM_ASSERT(((char*)(state->undo_rec + state->redo_point)) >= buf_begin); - IM_ASSERT(((char*)(state->undo_rec + state->redo_point + 1) + move_size) <= buf_end); - STB_TEXTEDIT_memmove(state->undo_rec + state->redo_point+1, state->undo_rec + state->redo_point, move_size); - - // now move redo_point to point to the new one - ++state->redo_point; - } -} - -static StbUndoRecord *stb_text_create_undo_record(StbUndoState *state, int numchars) -{ - // any time we create a new undo record, we discard redo - stb_textedit_flush_redo(state); - - // if we have no free records, we have to make room, by sliding the - // existing records down - if (state->undo_point == STB_TEXTEDIT_UNDOSTATECOUNT) - stb_textedit_discard_undo(state); - - // if the characters to store won't possibly fit in the buffer, we can't undo - if (numchars > STB_TEXTEDIT_UNDOCHARCOUNT) { - state->undo_point = 0; - state->undo_char_point = 0; - return NULL; - } - - // if we don't have enough free characters in the buffer, we have to make room - while (state->undo_char_point + numchars > STB_TEXTEDIT_UNDOCHARCOUNT) - stb_textedit_discard_undo(state); - - return &state->undo_rec[state->undo_point++]; -} - -static STB_TEXTEDIT_CHARTYPE *stb_text_createundo(StbUndoState *state, int pos, int insert_len, int delete_len) -{ - StbUndoRecord *r = stb_text_create_undo_record(state, insert_len); - if (r == NULL) - return NULL; - - r->where = pos; - r->insert_length = (STB_TEXTEDIT_POSITIONTYPE) insert_len; - r->delete_length = (STB_TEXTEDIT_POSITIONTYPE) delete_len; - - if (insert_len == 0) { - r->char_storage = -1; - return NULL; - } else { - r->char_storage = state->undo_char_point; - state->undo_char_point += insert_len; - return &state->undo_char[r->char_storage]; - } -} - -static void stb_text_undo(STB_TEXTEDIT_STRING *str, STB_TexteditState *state) -{ - StbUndoState *s = &state->undostate; - StbUndoRecord u, *r; - if (s->undo_point == 0) - return; - - // we need to do two things: apply the undo record, and create a redo record - u = s->undo_rec[s->undo_point-1]; - r = &s->undo_rec[s->redo_point-1]; - r->char_storage = -1; - - r->insert_length = u.delete_length; - r->delete_length = u.insert_length; - r->where = u.where; - - if (u.delete_length) { - // if the undo record says to delete characters, then the redo record will - // need to re-insert the characters that get deleted, so we need to store - // them. - - // there are three cases: - // there's enough room to store the characters - // characters stored for *redoing* don't leave room for redo - // characters stored for *undoing* don't leave room for redo - // if the last is true, we have to bail - - if (s->undo_char_point + u.delete_length >= STB_TEXTEDIT_UNDOCHARCOUNT) { - // the undo records take up too much character space; there's no space to store the redo characters - r->insert_length = 0; - } else { - int i; - - // there's definitely room to store the characters eventually - while (s->undo_char_point + u.delete_length > s->redo_char_point) { - // should never happen: - if (s->redo_point == STB_TEXTEDIT_UNDOSTATECOUNT) - return; - // there's currently not enough room, so discard a redo record - stb_textedit_discard_redo(s); - } - r = &s->undo_rec[s->redo_point-1]; - - r->char_storage = s->redo_char_point - u.delete_length; - s->redo_char_point = s->redo_char_point - u.delete_length; - - // now save the characters - for (i=0; i < u.delete_length; ++i) - s->undo_char[r->char_storage + i] = STB_TEXTEDIT_GETCHAR(str, u.where + i); - } - - // now we can carry out the deletion - STB_TEXTEDIT_DELETECHARS(str, u.where, u.delete_length); - } - - // check type of recorded action: - if (u.insert_length) { - // easy case: was a deletion, so we need to insert n characters - STB_TEXTEDIT_INSERTCHARS(str, u.where, &s->undo_char[u.char_storage], u.insert_length); - s->undo_char_point -= u.insert_length; - } - - state->cursor = u.where + u.insert_length; - - s->undo_point--; - s->redo_point--; -} - -static void stb_text_redo(STB_TEXTEDIT_STRING *str, STB_TexteditState *state) -{ - StbUndoState *s = &state->undostate; - StbUndoRecord *u, r; - if (s->redo_point == STB_TEXTEDIT_UNDOSTATECOUNT) - return; - - // we need to do two things: apply the redo record, and create an undo record - u = &s->undo_rec[s->undo_point]; - r = s->undo_rec[s->redo_point]; - - // we KNOW there must be room for the undo record, because the redo record - // was derived from an undo record - - u->delete_length = r.insert_length; - u->insert_length = r.delete_length; - u->where = r.where; - u->char_storage = -1; - - if (r.delete_length) { - // the redo record requires us to delete characters, so the undo record - // needs to store the characters - - if (s->undo_char_point + u->insert_length > s->redo_char_point) { - u->insert_length = 0; - u->delete_length = 0; - } else { - int i; - u->char_storage = s->undo_char_point; - s->undo_char_point = s->undo_char_point + u->insert_length; - - // now save the characters - for (i=0; i < u->insert_length; ++i) - s->undo_char[u->char_storage + i] = STB_TEXTEDIT_GETCHAR(str, u->where + i); - } - - STB_TEXTEDIT_DELETECHARS(str, r.where, r.delete_length); - } - - if (r.insert_length) { - // easy case: need to insert n characters - STB_TEXTEDIT_INSERTCHARS(str, r.where, &s->undo_char[r.char_storage], r.insert_length); - s->redo_char_point += r.insert_length; - } - - state->cursor = r.where + r.insert_length; - - s->undo_point++; - s->redo_point++; -} - -static void stb_text_makeundo_insert(STB_TexteditState *state, int where, int length) -{ - stb_text_createundo(&state->undostate, where, 0, length); -} - -static void stb_text_makeundo_delete(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int length) -{ - int i; - STB_TEXTEDIT_CHARTYPE *p = stb_text_createundo(&state->undostate, where, length, 0); - if (p) { - for (i=0; i < length; ++i) - p[i] = STB_TEXTEDIT_GETCHAR(str, where+i); - } -} - -static void stb_text_makeundo_replace(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int old_length, int new_length) -{ - int i; - STB_TEXTEDIT_CHARTYPE *p = stb_text_createundo(&state->undostate, where, old_length, new_length); - if (p) { - for (i=0; i < old_length; ++i) - p[i] = STB_TEXTEDIT_GETCHAR(str, where+i); - } -} - -// reset the state to default -static void stb_textedit_clear_state(STB_TexteditState *state, int is_single_line) -{ - state->undostate.undo_point = 0; - state->undostate.undo_char_point = 0; - state->undostate.redo_point = STB_TEXTEDIT_UNDOSTATECOUNT; - state->undostate.redo_char_point = STB_TEXTEDIT_UNDOCHARCOUNT; - state->select_end = state->select_start = 0; - state->cursor = 0; - state->has_preferred_x = 0; - state->preferred_x = 0; - state->cursor_at_end_of_line = 0; - state->initialized = 1; - state->single_line = (unsigned char) is_single_line; - state->insert_mode = 0; -} - -// API initialize -static void stb_textedit_initialize_state(STB_TexteditState *state, int is_single_line) -{ - stb_textedit_clear_state(state, is_single_line); -} - -#if defined(__GNUC__) || defined(__clang__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wcast-qual" -#endif - -static int stb_textedit_paste(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXTEDIT_CHARTYPE const *ctext, int len) -{ - return stb_textedit_paste_internal(str, state, (STB_TEXTEDIT_CHARTYPE *) ctext, len); -} - -#if defined(__GNUC__) || defined(__clang__) -#pragma GCC diagnostic pop -#endif - -#endif//STB_TEXTEDIT_IMPLEMENTATION - -/* ------------------------------------------------------------------------------- -This software is available under 2 licenses -- choose whichever you prefer. ------------------------------------------------------------------------------- -ALTERNATIVE A - MIT License -Copyright (c) 2017 Sean Barrett -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ------------------------------------------------------------------------------- -ALTERNATIVE B - Public Domain (www.unlicense.org) -This is free and unencumbered software released into the public domain. -Anyone is free to copy, modify, publish, use, compile, sell, or distribute this -software, either in source code form or as a compiled binary, for any purpose, -commercial or non-commercial, and by any means. -In jurisdictions that recognize copyright laws, the author or authors of this -software dedicate any and all copyright interest in the software to the public -domain. We make this dedication for the benefit of the public at large and to -the detriment of our heirs and successors. We intend this dedication to be an -overt act of relinquishment in perpetuity of all present and future rights to -this software under copyright law. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ------------------------------------------------------------------------------- -*/ diff --git a/cmake/imgui/imstb_truetype.h b/cmake/imgui/imstb_truetype.h deleted file mode 100644 index b4bdbd86..00000000 --- a/cmake/imgui/imstb_truetype.h +++ /dev/null @@ -1,4903 +0,0 @@ -// [DEAR IMGUI] -// This is a slightly modified version of stb_truetype.h 1.20. -// Mostly fixing for compiler and static analyzer warnings. -// Grep for [DEAR IMGUI] to find the changes. - -// stb_truetype.h - v1.20 - public domain -// authored from 2009-2016 by Sean Barrett / RAD Game Tools -// -// This library processes TrueType files: -// parse files -// extract glyph metrics -// extract glyph shapes -// render glyphs to one-channel bitmaps with antialiasing (box filter) -// render glyphs to one-channel SDF bitmaps (signed-distance field/function) -// -// Todo: -// non-MS cmaps -// crashproof on bad data -// hinting? (no longer patented) -// cleartype-style AA? -// optimize: use simple memory allocator for intermediates -// optimize: build edge-list directly from curves -// optimize: rasterize directly from curves? -// -// ADDITIONAL CONTRIBUTORS -// -// Mikko Mononen: compound shape support, more cmap formats -// Tor Andersson: kerning, subpixel rendering -// Dougall Johnson: OpenType / Type 2 font handling -// Daniel Ribeiro Maciel: basic GPOS-based kerning -// -// Misc other: -// Ryan Gordon -// Simon Glass -// github:IntellectualKitty -// Imanol Celaya -// Daniel Ribeiro Maciel -// -// Bug/warning reports/fixes: -// "Zer" on mollyrocket Fabian "ryg" Giesen -// Cass Everitt Martins Mozeiko -// stoiko (Haemimont Games) Cap Petschulat -// Brian Hook Omar Cornut -// Walter van Niftrik github:aloucks -// David Gow Peter LaValle -// David Given Sergey Popov -// Ivan-Assen Ivanov Giumo X. Clanjor -// Anthony Pesch Higor Euripedes -// Johan Duparc Thomas Fields -// Hou Qiming Derek Vinyard -// Rob Loach Cort Stratton -// Kenney Phillis Jr. github:oyvindjam -// Brian Costabile github:vassvik -// -// VERSION HISTORY -// -// 1.20 (2019-02-07) PackFontRange skips missing codepoints; GetScaleFontVMetrics() -// 1.19 (2018-02-11) GPOS kerning, STBTT_fmod -// 1.18 (2018-01-29) add missing function -// 1.17 (2017-07-23) make more arguments const; doc fix -// 1.16 (2017-07-12) SDF support -// 1.15 (2017-03-03) make more arguments const -// 1.14 (2017-01-16) num-fonts-in-TTC function -// 1.13 (2017-01-02) support OpenType fonts, certain Apple fonts -// 1.12 (2016-10-25) suppress warnings about casting away const with -Wcast-qual -// 1.11 (2016-04-02) fix unused-variable warning -// 1.10 (2016-04-02) user-defined fabs(); rare memory leak; remove duplicate typedef -// 1.09 (2016-01-16) warning fix; avoid crash on outofmem; use allocation userdata properly -// 1.08 (2015-09-13) document stbtt_Rasterize(); fixes for vertical & horizontal edges -// 1.07 (2015-08-01) allow PackFontRanges to accept arrays of sparse codepoints; -// variant PackFontRanges to pack and render in separate phases; -// fix stbtt_GetFontOFfsetForIndex (never worked for non-0 input?); -// fixed an assert() bug in the new rasterizer -// replace assert() with STBTT_assert() in new rasterizer -// -// Full history can be found at the end of this file. -// -// LICENSE -// -// See end of file for license information. -// -// USAGE -// -// Include this file in whatever places need to refer to it. In ONE C/C++ -// file, write: -// #define STB_TRUETYPE_IMPLEMENTATION -// before the #include of this file. This expands out the actual -// implementation into that C/C++ file. -// -// To make the implementation private to the file that generates the implementation, -// #define STBTT_STATIC -// -// Simple 3D API (don't ship this, but it's fine for tools and quick start) -// stbtt_BakeFontBitmap() -- bake a font to a bitmap for use as texture -// stbtt_GetBakedQuad() -- compute quad to draw for a given char -// -// Improved 3D API (more shippable): -// #include "stb_rect_pack.h" -- optional, but you really want it -// stbtt_PackBegin() -// stbtt_PackSetOversampling() -- for improved quality on small fonts -// stbtt_PackFontRanges() -- pack and renders -// stbtt_PackEnd() -// stbtt_GetPackedQuad() -// -// "Load" a font file from a memory buffer (you have to keep the buffer loaded) -// stbtt_InitFont() -// stbtt_GetFontOffsetForIndex() -- indexing for TTC font collections -// stbtt_GetNumberOfFonts() -- number of fonts for TTC font collections -// -// Render a unicode codepoint to a bitmap -// stbtt_GetCodepointBitmap() -- allocates and returns a bitmap -// stbtt_MakeCodepointBitmap() -- renders into bitmap you provide -// stbtt_GetCodepointBitmapBox() -- how big the bitmap must be -// -// Character advance/positioning -// stbtt_GetCodepointHMetrics() -// stbtt_GetFontVMetrics() -// stbtt_GetFontVMetricsOS2() -// stbtt_GetCodepointKernAdvance() -// -// Starting with version 1.06, the rasterizer was replaced with a new, -// faster and generally-more-precise rasterizer. The new rasterizer more -// accurately measures pixel coverage for anti-aliasing, except in the case -// where multiple shapes overlap, in which case it overestimates the AA pixel -// coverage. Thus, anti-aliasing of intersecting shapes may look wrong. If -// this turns out to be a problem, you can re-enable the old rasterizer with -// #define STBTT_RASTERIZER_VERSION 1 -// which will incur about a 15% speed hit. -// -// ADDITIONAL DOCUMENTATION -// -// Immediately after this block comment are a series of sample programs. -// -// After the sample programs is the "header file" section. This section -// includes documentation for each API function. -// -// Some important concepts to understand to use this library: -// -// Codepoint -// Characters are defined by unicode codepoints, e.g. 65 is -// uppercase A, 231 is lowercase c with a cedilla, 0x7e30 is -// the hiragana for "ma". -// -// Glyph -// A visual character shape (every codepoint is rendered as -// some glyph) -// -// Glyph index -// A font-specific integer ID representing a glyph -// -// Baseline -// Glyph shapes are defined relative to a baseline, which is the -// bottom of uppercase characters. Characters extend both above -// and below the baseline. -// -// Current Point -// As you draw text to the screen, you keep track of a "current point" -// which is the origin of each character. The current point's vertical -// position is the baseline. Even "baked fonts" use this model. -// -// Vertical Font Metrics -// The vertical qualities of the font, used to vertically position -// and space the characters. See docs for stbtt_GetFontVMetrics. -// -// Font Size in Pixels or Points -// The preferred interface for specifying font sizes in stb_truetype -// is to specify how tall the font's vertical extent should be in pixels. -// If that sounds good enough, skip the next paragraph. -// -// Most font APIs instead use "points", which are a common typographic -// measurement for describing font size, defined as 72 points per inch. -// stb_truetype provides a point API for compatibility. However, true -// "per inch" conventions don't make much sense on computer displays -// since different monitors have different number of pixels per -// inch. For example, Windows traditionally uses a convention that -// there are 96 pixels per inch, thus making 'inch' measurements have -// nothing to do with inches, and thus effectively defining a point to -// be 1.333 pixels. Additionally, the TrueType font data provides -// an explicit scale factor to scale a given font's glyphs to points, -// but the author has observed that this scale factor is often wrong -// for non-commercial fonts, thus making fonts scaled in points -// according to the TrueType spec incoherently sized in practice. -// -// DETAILED USAGE: -// -// Scale: -// Select how high you want the font to be, in points or pixels. -// Call ScaleForPixelHeight or ScaleForMappingEmToPixels to compute -// a scale factor SF that will be used by all other functions. -// -// Baseline: -// You need to select a y-coordinate that is the baseline of where -// your text will appear. Call GetFontBoundingBox to get the baseline-relative -// bounding box for all characters. SF*-y0 will be the distance in pixels -// that the worst-case character could extend above the baseline, so if -// you want the top edge of characters to appear at the top of the -// screen where y=0, then you would set the baseline to SF*-y0. -// -// Current point: -// Set the current point where the first character will appear. The -// first character could extend left of the current point; this is font -// dependent. You can either choose a current point that is the leftmost -// point and hope, or add some padding, or check the bounding box or -// left-side-bearing of the first character to be displayed and set -// the current point based on that. -// -// Displaying a character: -// Compute the bounding box of the character. It will contain signed values -// relative to . I.e. if it returns x0,y0,x1,y1, -// then the character should be displayed in the rectangle from -// to = 32 && *text < 128) { - stbtt_aligned_quad q; - stbtt_GetBakedQuad(cdata, 512,512, *text-32, &x,&y,&q,1);//1=opengl & d3d10+,0=d3d9 - glTexCoord2f(q.s0,q.t1); glVertex2f(q.x0,q.y0); - glTexCoord2f(q.s1,q.t1); glVertex2f(q.x1,q.y0); - glTexCoord2f(q.s1,q.t0); glVertex2f(q.x1,q.y1); - glTexCoord2f(q.s0,q.t0); glVertex2f(q.x0,q.y1); - } - ++text; - } - glEnd(); -} -#endif -// -// -////////////////////////////////////////////////////////////////////////////// -// -// Complete program (this compiles): get a single bitmap, print as ASCII art -// -#if 0 -#include -#define STB_TRUETYPE_IMPLEMENTATION // force following include to generate implementation -#include "stb_truetype.h" - -char ttf_buffer[1<<25]; - -int main(int argc, char **argv) -{ - stbtt_fontinfo font; - unsigned char *bitmap; - int w,h,i,j,c = (argc > 1 ? atoi(argv[1]) : 'a'), s = (argc > 2 ? atoi(argv[2]) : 20); - - fread(ttf_buffer, 1, 1<<25, fopen(argc > 3 ? argv[3] : "c:/windows/fonts/arialbd.ttf", "rb")); - - stbtt_InitFont(&font, ttf_buffer, stbtt_GetFontOffsetForIndex(ttf_buffer,0)); - bitmap = stbtt_GetCodepointBitmap(&font, 0,stbtt_ScaleForPixelHeight(&font, s), c, &w, &h, 0,0); - - for (j=0; j < h; ++j) { - for (i=0; i < w; ++i) - putchar(" .:ioVM@"[bitmap[j*w+i]>>5]); - putchar('\n'); - } - return 0; -} -#endif -// -// Output: -// -// .ii. -// @@@@@@. -// V@Mio@@o -// :i. V@V -// :oM@@M -// :@@@MM@M -// @@o o@M -// :@@. M@M -// @@@o@@@@ -// :M@@V:@@. -// -////////////////////////////////////////////////////////////////////////////// -// -// Complete program: print "Hello World!" banner, with bugs -// -#if 0 -char buffer[24<<20]; -unsigned char screen[20][79]; - -int main(int arg, char **argv) -{ - stbtt_fontinfo font; - int i,j,ascent,baseline,ch=0; - float scale, xpos=2; // leave a little padding in case the character extends left - char *text = "Heljo World!"; // intentionally misspelled to show 'lj' brokenness - - fread(buffer, 1, 1000000, fopen("c:/windows/fonts/arialbd.ttf", "rb")); - stbtt_InitFont(&font, buffer, 0); - - scale = stbtt_ScaleForPixelHeight(&font, 15); - stbtt_GetFontVMetrics(&font, &ascent,0,0); - baseline = (int) (ascent*scale); - - while (text[ch]) { - int advance,lsb,x0,y0,x1,y1; - float x_shift = xpos - (float) floor(xpos); - stbtt_GetCodepointHMetrics(&font, text[ch], &advance, &lsb); - stbtt_GetCodepointBitmapBoxSubpixel(&font, text[ch], scale,scale,x_shift,0, &x0,&y0,&x1,&y1); - stbtt_MakeCodepointBitmapSubpixel(&font, &screen[baseline + y0][(int) xpos + x0], x1-x0,y1-y0, 79, scale,scale,x_shift,0, text[ch]); - // note that this stomps the old data, so where character boxes overlap (e.g. 'lj') it's wrong - // because this API is really for baking character bitmaps into textures. if you want to render - // a sequence of characters, you really need to render each bitmap to a temp buffer, then - // "alpha blend" that into the working buffer - xpos += (advance * scale); - if (text[ch+1]) - xpos += scale*stbtt_GetCodepointKernAdvance(&font, text[ch],text[ch+1]); - ++ch; - } - - for (j=0; j < 20; ++j) { - for (i=0; i < 78; ++i) - putchar(" .:ioVM@"[screen[j][i]>>5]); - putchar('\n'); - } - - return 0; -} -#endif - - -////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// -//// -//// INTEGRATION WITH YOUR CODEBASE -//// -//// The following sections allow you to supply alternate definitions -//// of C library functions used by stb_truetype, e.g. if you don't -//// link with the C runtime library. - -#ifdef STB_TRUETYPE_IMPLEMENTATION - // #define your own (u)stbtt_int8/16/32 before including to override this - #ifndef stbtt_uint8 - typedef unsigned char stbtt_uint8; - typedef signed char stbtt_int8; - typedef unsigned short stbtt_uint16; - typedef signed short stbtt_int16; - typedef unsigned int stbtt_uint32; - typedef signed int stbtt_int32; - #endif - - typedef char stbtt__check_size32[sizeof(stbtt_int32)==4 ? 1 : -1]; - typedef char stbtt__check_size16[sizeof(stbtt_int16)==2 ? 1 : -1]; - - // e.g. #define your own STBTT_ifloor/STBTT_iceil() to avoid math.h - #ifndef STBTT_ifloor - #include - #define STBTT_ifloor(x) ((int) floor(x)) - #define STBTT_iceil(x) ((int) ceil(x)) - #endif - - #ifndef STBTT_sqrt - #include - #define STBTT_sqrt(x) sqrt(x) - #define STBTT_pow(x,y) pow(x,y) - #endif - - #ifndef STBTT_fmod - #include - #define STBTT_fmod(x,y) fmod(x,y) - #endif - - #ifndef STBTT_cos - #include - #define STBTT_cos(x) cos(x) - #define STBTT_acos(x) acos(x) - #endif - - #ifndef STBTT_fabs - #include - #define STBTT_fabs(x) fabs(x) - #endif - - // #define your own functions "STBTT_malloc" / "STBTT_free" to avoid malloc.h - #ifndef STBTT_malloc - #include - #define STBTT_malloc(x,u) ((void)(u),malloc(x)) - #define STBTT_free(x,u) ((void)(u),free(x)) - #endif - - #ifndef STBTT_assert - #include - #define STBTT_assert(x) assert(x) - #endif - - #ifndef STBTT_strlen - #include - #define STBTT_strlen(x) strlen(x) - #endif - - #ifndef STBTT_memcpy - #include - #define STBTT_memcpy memcpy - #define STBTT_memset memset - #endif -#endif - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -//// -//// INTERFACE -//// -//// - -#ifndef __STB_INCLUDE_STB_TRUETYPE_H__ -#define __STB_INCLUDE_STB_TRUETYPE_H__ - -#ifdef STBTT_STATIC -#define STBTT_DEF static -#else -#define STBTT_DEF extern -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -// private structure -typedef struct -{ - unsigned char *data; - int cursor; - int size; -} stbtt__buf; - -////////////////////////////////////////////////////////////////////////////// -// -// TEXTURE BAKING API -// -// If you use this API, you only have to call two functions ever. -// - -typedef struct -{ - unsigned short x0,y0,x1,y1; // coordinates of bbox in bitmap - float xoff,yoff,xadvance; -} stbtt_bakedchar; - -STBTT_DEF int stbtt_BakeFontBitmap(const unsigned char *data, int offset, // font location (use offset=0 for plain .ttf) - float pixel_height, // height of font in pixels - unsigned char *pixels, int pw, int ph, // bitmap to be filled in - int first_char, int num_chars, // characters to bake - stbtt_bakedchar *chardata); // you allocate this, it's num_chars long -// if return is positive, the first unused row of the bitmap -// if return is negative, returns the negative of the number of characters that fit -// if return is 0, no characters fit and no rows were used -// This uses a very crappy packing. - -typedef struct -{ - float x0,y0,s0,t0; // top-left - float x1,y1,s1,t1; // bottom-right -} stbtt_aligned_quad; - -STBTT_DEF void stbtt_GetBakedQuad(const stbtt_bakedchar *chardata, int pw, int ph, // same data as above - int char_index, // character to display - float *xpos, float *ypos, // pointers to current position in screen pixel space - stbtt_aligned_quad *q, // output: quad to draw - int opengl_fillrule); // true if opengl fill rule; false if DX9 or earlier -// Call GetBakedQuad with char_index = 'character - first_char', and it -// creates the quad you need to draw and advances the current position. -// -// The coordinate system used assumes y increases downwards. -// -// Characters will extend both above and below the current position; -// see discussion of "BASELINE" above. -// -// It's inefficient; you might want to c&p it and optimize it. - -STBTT_DEF void stbtt_GetScaledFontVMetrics(const unsigned char *fontdata, int index, float size, float *ascent, float *descent, float *lineGap); -// Query the font vertical metrics without having to create a font first. - - -////////////////////////////////////////////////////////////////////////////// -// -// NEW TEXTURE BAKING API -// -// This provides options for packing multiple fonts into one atlas, not -// perfectly but better than nothing. - -typedef struct -{ - unsigned short x0,y0,x1,y1; // coordinates of bbox in bitmap - float xoff,yoff,xadvance; - float xoff2,yoff2; -} stbtt_packedchar; - -typedef struct stbtt_pack_context stbtt_pack_context; -typedef struct stbtt_fontinfo stbtt_fontinfo; -#ifndef STB_RECT_PACK_VERSION -typedef struct stbrp_rect stbrp_rect; -#endif - -STBTT_DEF int stbtt_PackBegin(stbtt_pack_context *spc, unsigned char *pixels, int width, int height, int stride_in_bytes, int padding, void *alloc_context); -// Initializes a packing context stored in the passed-in stbtt_pack_context. -// Future calls using this context will pack characters into the bitmap passed -// in here: a 1-channel bitmap that is width * height. stride_in_bytes is -// the distance from one row to the next (or 0 to mean they are packed tightly -// together). "padding" is the amount of padding to leave between each -// character (normally you want '1' for bitmaps you'll use as textures with -// bilinear filtering). -// -// Returns 0 on failure, 1 on success. - -STBTT_DEF void stbtt_PackEnd (stbtt_pack_context *spc); -// Cleans up the packing context and frees all memory. - -#define STBTT_POINT_SIZE(x) (-(x)) - -STBTT_DEF int stbtt_PackFontRange(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, float font_size, - int first_unicode_char_in_range, int num_chars_in_range, stbtt_packedchar *chardata_for_range); -// Creates character bitmaps from the font_index'th font found in fontdata (use -// font_index=0 if you don't know what that is). It creates num_chars_in_range -// bitmaps for characters with unicode values starting at first_unicode_char_in_range -// and increasing. Data for how to render them is stored in chardata_for_range; -// pass these to stbtt_GetPackedQuad to get back renderable quads. -// -// font_size is the full height of the character from ascender to descender, -// as computed by stbtt_ScaleForPixelHeight. To use a point size as computed -// by stbtt_ScaleForMappingEmToPixels, wrap the point size in STBTT_POINT_SIZE() -// and pass that result as 'font_size': -// ..., 20 , ... // font max minus min y is 20 pixels tall -// ..., STBTT_POINT_SIZE(20), ... // 'M' is 20 pixels tall - -typedef struct -{ - float font_size; - int first_unicode_codepoint_in_range; // if non-zero, then the chars are continuous, and this is the first codepoint - int *array_of_unicode_codepoints; // if non-zero, then this is an array of unicode codepoints - int num_chars; - stbtt_packedchar *chardata_for_range; // output - unsigned char h_oversample, v_oversample; // don't set these, they're used internally -} stbtt_pack_range; - -STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, stbtt_pack_range *ranges, int num_ranges); -// Creates character bitmaps from multiple ranges of characters stored in -// ranges. This will usually create a better-packed bitmap than multiple -// calls to stbtt_PackFontRange. Note that you can call this multiple -// times within a single PackBegin/PackEnd. - -STBTT_DEF void stbtt_PackSetOversampling(stbtt_pack_context *spc, unsigned int h_oversample, unsigned int v_oversample); -// Oversampling a font increases the quality by allowing higher-quality subpixel -// positioning, and is especially valuable at smaller text sizes. -// -// This function sets the amount of oversampling for all following calls to -// stbtt_PackFontRange(s) or stbtt_PackFontRangesGatherRects for a given -// pack context. The default (no oversampling) is achieved by h_oversample=1 -// and v_oversample=1. The total number of pixels required is -// h_oversample*v_oversample larger than the default; for example, 2x2 -// oversampling requires 4x the storage of 1x1. For best results, render -// oversampled textures with bilinear filtering. Look at the readme in -// stb/tests/oversample for information about oversampled fonts -// -// To use with PackFontRangesGather etc., you must set it before calls -// call to PackFontRangesGatherRects. - -STBTT_DEF void stbtt_PackSetSkipMissingCodepoints(stbtt_pack_context *spc, int skip); -// If skip != 0, this tells stb_truetype to skip any codepoints for which -// there is no corresponding glyph. If skip=0, which is the default, then -// codepoints without a glyph recived the font's "missing character" glyph, -// typically an empty box by convention. - -STBTT_DEF void stbtt_GetPackedQuad(const stbtt_packedchar *chardata, int pw, int ph, // same data as above - int char_index, // character to display - float *xpos, float *ypos, // pointers to current position in screen pixel space - stbtt_aligned_quad *q, // output: quad to draw - int align_to_integer); - -STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects); -STBTT_DEF void stbtt_PackFontRangesPackRects(stbtt_pack_context *spc, stbrp_rect *rects, int num_rects); -STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects); -// Calling these functions in sequence is roughly equivalent to calling -// stbtt_PackFontRanges(). If you more control over the packing of multiple -// fonts, or if you want to pack custom data into a font texture, take a look -// at the source to of stbtt_PackFontRanges() and create a custom version -// using these functions, e.g. call GatherRects multiple times, -// building up a single array of rects, then call PackRects once, -// then call RenderIntoRects repeatedly. This may result in a -// better packing than calling PackFontRanges multiple times -// (or it may not). - -// this is an opaque structure that you shouldn't mess with which holds -// all the context needed from PackBegin to PackEnd. -struct stbtt_pack_context { - void *user_allocator_context; - void *pack_info; - int width; - int height; - int stride_in_bytes; - int padding; - int skip_missing; - unsigned int h_oversample, v_oversample; - unsigned char *pixels; - void *nodes; -}; - -////////////////////////////////////////////////////////////////////////////// -// -// FONT LOADING -// -// - -STBTT_DEF int stbtt_GetNumberOfFonts(const unsigned char *data); -// This function will determine the number of fonts in a font file. TrueType -// collection (.ttc) files may contain multiple fonts, while TrueType font -// (.ttf) files only contain one font. The number of fonts can be used for -// indexing with the previous function where the index is between zero and one -// less than the total fonts. If an error occurs, -1 is returned. - -STBTT_DEF int stbtt_GetFontOffsetForIndex(const unsigned char *data, int index); -// Each .ttf/.ttc file may have more than one font. Each font has a sequential -// index number starting from 0. Call this function to get the font offset for -// a given index; it returns -1 if the index is out of range. A regular .ttf -// file will only define one font and it always be at offset 0, so it will -// return '0' for index 0, and -1 for all other indices. - -// The following structure is defined publicly so you can declare one on -// the stack or as a global or etc, but you should treat it as opaque. -struct stbtt_fontinfo -{ - void * userdata; - unsigned char * data; // pointer to .ttf file - int fontstart; // offset of start of font - - int numGlyphs; // number of glyphs, needed for range checking - - int loca,head,glyf,hhea,hmtx,kern,gpos; // table locations as offset from start of .ttf - int index_map; // a cmap mapping for our chosen character encoding - int indexToLocFormat; // format needed to map from glyph index to glyph - - stbtt__buf cff; // cff font data - stbtt__buf charstrings; // the charstring index - stbtt__buf gsubrs; // global charstring subroutines index - stbtt__buf subrs; // private charstring subroutines index - stbtt__buf fontdicts; // array of font dicts - stbtt__buf fdselect; // map from glyph to fontdict -}; - -STBTT_DEF int stbtt_InitFont(stbtt_fontinfo *info, const unsigned char *data, int offset); -// Given an offset into the file that defines a font, this function builds -// the necessary cached info for the rest of the system. You must allocate -// the stbtt_fontinfo yourself, and stbtt_InitFont will fill it out. You don't -// need to do anything special to free it, because the contents are pure -// value data with no additional data structures. Returns 0 on failure. - - -////////////////////////////////////////////////////////////////////////////// -// -// CHARACTER TO GLYPH-INDEX CONVERSIOn - -STBTT_DEF int stbtt_FindGlyphIndex(const stbtt_fontinfo *info, int unicode_codepoint); -// If you're going to perform multiple operations on the same character -// and you want a speed-up, call this function with the character you're -// going to process, then use glyph-based functions instead of the -// codepoint-based functions. -// Returns 0 if the character codepoint is not defined in the font. - - -////////////////////////////////////////////////////////////////////////////// -// -// CHARACTER PROPERTIES -// - -STBTT_DEF float stbtt_ScaleForPixelHeight(const stbtt_fontinfo *info, float pixels); -// computes a scale factor to produce a font whose "height" is 'pixels' tall. -// Height is measured as the distance from the highest ascender to the lowest -// descender; in other words, it's equivalent to calling stbtt_GetFontVMetrics -// and computing: -// scale = pixels / (ascent - descent) -// so if you prefer to measure height by the ascent only, use a similar calculation. - -STBTT_DEF float stbtt_ScaleForMappingEmToPixels(const stbtt_fontinfo *info, float pixels); -// computes a scale factor to produce a font whose EM size is mapped to -// 'pixels' tall. This is probably what traditional APIs compute, but -// I'm not positive. - -STBTT_DEF void stbtt_GetFontVMetrics(const stbtt_fontinfo *info, int *ascent, int *descent, int *lineGap); -// ascent is the coordinate above the baseline the font extends; descent -// is the coordinate below the baseline the font extends (i.e. it is typically negative) -// lineGap is the spacing between one row's descent and the next row's ascent... -// so you should advance the vertical position by "*ascent - *descent + *lineGap" -// these are expressed in unscaled coordinates, so you must multiply by -// the scale factor for a given size - -STBTT_DEF int stbtt_GetFontVMetricsOS2(const stbtt_fontinfo *info, int *typoAscent, int *typoDescent, int *typoLineGap); -// analogous to GetFontVMetrics, but returns the "typographic" values from the OS/2 -// table (specific to MS/Windows TTF files). -// -// Returns 1 on success (table present), 0 on failure. - -STBTT_DEF void stbtt_GetFontBoundingBox(const stbtt_fontinfo *info, int *x0, int *y0, int *x1, int *y1); -// the bounding box around all possible characters - -STBTT_DEF void stbtt_GetCodepointHMetrics(const stbtt_fontinfo *info, int codepoint, int *advanceWidth, int *leftSideBearing); -// leftSideBearing is the offset from the current horizontal position to the left edge of the character -// advanceWidth is the offset from the current horizontal position to the next horizontal position -// these are expressed in unscaled coordinates - -STBTT_DEF int stbtt_GetCodepointKernAdvance(const stbtt_fontinfo *info, int ch1, int ch2); -// an additional amount to add to the 'advance' value between ch1 and ch2 - -STBTT_DEF int stbtt_GetCodepointBox(const stbtt_fontinfo *info, int codepoint, int *x0, int *y0, int *x1, int *y1); -// Gets the bounding box of the visible part of the glyph, in unscaled coordinates - -STBTT_DEF void stbtt_GetGlyphHMetrics(const stbtt_fontinfo *info, int glyph_index, int *advanceWidth, int *leftSideBearing); -STBTT_DEF int stbtt_GetGlyphKernAdvance(const stbtt_fontinfo *info, int glyph1, int glyph2); -STBTT_DEF int stbtt_GetGlyphBox(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1); -// as above, but takes one or more glyph indices for greater efficiency - - -////////////////////////////////////////////////////////////////////////////// -// -// GLYPH SHAPES (you probably don't need these, but they have to go before -// the bitmaps for C declaration-order reasons) -// - -#ifndef STBTT_vmove // you can predefine these to use different values (but why?) - enum { - STBTT_vmove=1, - STBTT_vline, - STBTT_vcurve, - STBTT_vcubic - }; -#endif - -#ifndef stbtt_vertex // you can predefine this to use different values - // (we share this with other code at RAD) - #define stbtt_vertex_type short // can't use stbtt_int16 because that's not visible in the header file - typedef struct - { - stbtt_vertex_type x,y,cx,cy,cx1,cy1; - unsigned char type,padding; - } stbtt_vertex; -#endif - -STBTT_DEF int stbtt_IsGlyphEmpty(const stbtt_fontinfo *info, int glyph_index); -// returns non-zero if nothing is drawn for this glyph - -STBTT_DEF int stbtt_GetCodepointShape(const stbtt_fontinfo *info, int unicode_codepoint, stbtt_vertex **vertices); -STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **vertices); -// returns # of vertices and fills *vertices with the pointer to them -// these are expressed in "unscaled" coordinates -// -// The shape is a series of contours. Each one starts with -// a STBTT_moveto, then consists of a series of mixed -// STBTT_lineto and STBTT_curveto segments. A lineto -// draws a line from previous endpoint to its x,y; a curveto -// draws a quadratic bezier from previous endpoint to -// its x,y, using cx,cy as the bezier control point. - -STBTT_DEF void stbtt_FreeShape(const stbtt_fontinfo *info, stbtt_vertex *vertices); -// frees the data allocated above - -////////////////////////////////////////////////////////////////////////////// -// -// BITMAP RENDERING -// - -STBTT_DEF void stbtt_FreeBitmap(unsigned char *bitmap, void *userdata); -// frees the bitmap allocated below - -STBTT_DEF unsigned char *stbtt_GetCodepointBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int codepoint, int *width, int *height, int *xoff, int *yoff); -// allocates a large-enough single-channel 8bpp bitmap and renders the -// specified character/glyph at the specified scale into it, with -// antialiasing. 0 is no coverage (transparent), 255 is fully covered (opaque). -// *width & *height are filled out with the width & height of the bitmap, -// which is stored left-to-right, top-to-bottom. -// -// xoff/yoff are the offset it pixel space from the glyph origin to the top-left of the bitmap - -STBTT_DEF unsigned char *stbtt_GetCodepointBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint, int *width, int *height, int *xoff, int *yoff); -// the same as stbtt_GetCodepoitnBitmap, but you can specify a subpixel -// shift for the character - -STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int codepoint); -// the same as stbtt_GetCodepointBitmap, but you pass in storage for the bitmap -// in the form of 'output', with row spacing of 'out_stride' bytes. the bitmap -// is clipped to out_w/out_h bytes. Call stbtt_GetCodepointBitmapBox to get the -// width and height and positioning info for it first. - -STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint); -// same as stbtt_MakeCodepointBitmap, but you can specify a subpixel -// shift for the character - -STBTT_DEF void stbtt_MakeCodepointBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int oversample_x, int oversample_y, float *sub_x, float *sub_y, int codepoint); -// same as stbtt_MakeCodepointBitmapSubpixel, but prefiltering -// is performed (see stbtt_PackSetOversampling) - -STBTT_DEF void stbtt_GetCodepointBitmapBox(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1); -// get the bbox of the bitmap centered around the glyph origin; so the -// bitmap width is ix1-ix0, height is iy1-iy0, and location to place -// the bitmap top left is (leftSideBearing*scale,iy0). -// (Note that the bitmap uses y-increases-down, but the shape uses -// y-increases-up, so CodepointBitmapBox and CodepointBox are inverted.) - -STBTT_DEF void stbtt_GetCodepointBitmapBoxSubpixel(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1); -// same as stbtt_GetCodepointBitmapBox, but you can specify a subpixel -// shift for the character - -// the following functions are equivalent to the above functions, but operate -// on glyph indices instead of Unicode codepoints (for efficiency) -STBTT_DEF unsigned char *stbtt_GetGlyphBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int glyph, int *width, int *height, int *xoff, int *yoff); -STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int glyph, int *width, int *height, int *xoff, int *yoff); -STBTT_DEF void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int glyph); -STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int glyph); -STBTT_DEF void stbtt_MakeGlyphBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int oversample_x, int oversample_y, float *sub_x, float *sub_y, int glyph); -STBTT_DEF void stbtt_GetGlyphBitmapBox(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1); -STBTT_DEF void stbtt_GetGlyphBitmapBoxSubpixel(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y,float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1); - - -// @TODO: don't expose this structure -typedef struct -{ - int w,h,stride; - unsigned char *pixels; -} stbtt__bitmap; - -// rasterize a shape with quadratic beziers into a bitmap -STBTT_DEF void stbtt_Rasterize(stbtt__bitmap *result, // 1-channel bitmap to draw into - float flatness_in_pixels, // allowable error of curve in pixels - stbtt_vertex *vertices, // array of vertices defining shape - int num_verts, // number of vertices in above array - float scale_x, float scale_y, // scale applied to input vertices - float shift_x, float shift_y, // translation applied to input vertices - int x_off, int y_off, // another translation applied to input - int invert, // if non-zero, vertically flip shape - void *userdata); // context for to STBTT_MALLOC - -////////////////////////////////////////////////////////////////////////////// -// -// Signed Distance Function (or Field) rendering - -STBTT_DEF void stbtt_FreeSDF(unsigned char *bitmap, void *userdata); -// frees the SDF bitmap allocated below - -STBTT_DEF unsigned char * stbtt_GetGlyphSDF(const stbtt_fontinfo *info, float scale, int glyph, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff); -STBTT_DEF unsigned char * stbtt_GetCodepointSDF(const stbtt_fontinfo *info, float scale, int codepoint, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff); -// These functions compute a discretized SDF field for a single character, suitable for storing -// in a single-channel texture, sampling with bilinear filtering, and testing against -// larger than some threshold to produce scalable fonts. -// info -- the font -// scale -- controls the size of the resulting SDF bitmap, same as it would be creating a regular bitmap -// glyph/codepoint -- the character to generate the SDF for -// padding -- extra "pixels" around the character which are filled with the distance to the character (not 0), -// which allows effects like bit outlines -// onedge_value -- value 0-255 to test the SDF against to reconstruct the character (i.e. the isocontour of the character) -// pixel_dist_scale -- what value the SDF should increase by when moving one SDF "pixel" away from the edge (on the 0..255 scale) -// if positive, > onedge_value is inside; if negative, < onedge_value is inside -// width,height -- output height & width of the SDF bitmap (including padding) -// xoff,yoff -- output origin of the character -// return value -- a 2D array of bytes 0..255, width*height in size -// -// pixel_dist_scale & onedge_value are a scale & bias that allows you to make -// optimal use of the limited 0..255 for your application, trading off precision -// and special effects. SDF values outside the range 0..255 are clamped to 0..255. -// -// Example: -// scale = stbtt_ScaleForPixelHeight(22) -// padding = 5 -// onedge_value = 180 -// pixel_dist_scale = 180/5.0 = 36.0 -// -// This will create an SDF bitmap in which the character is about 22 pixels -// high but the whole bitmap is about 22+5+5=32 pixels high. To produce a filled -// shape, sample the SDF at each pixel and fill the pixel if the SDF value -// is greater than or equal to 180/255. (You'll actually want to antialias, -// which is beyond the scope of this example.) Additionally, you can compute -// offset outlines (e.g. to stroke the character border inside & outside, -// or only outside). For example, to fill outside the character up to 3 SDF -// pixels, you would compare against (180-36.0*3)/255 = 72/255. The above -// choice of variables maps a range from 5 pixels outside the shape to -// 2 pixels inside the shape to 0..255; this is intended primarily for apply -// outside effects only (the interior range is needed to allow proper -// antialiasing of the font at *smaller* sizes) -// -// The function computes the SDF analytically at each SDF pixel, not by e.g. -// building a higher-res bitmap and approximating it. In theory the quality -// should be as high as possible for an SDF of this size & representation, but -// unclear if this is true in practice (perhaps building a higher-res bitmap -// and computing from that can allow drop-out prevention). -// -// The algorithm has not been optimized at all, so expect it to be slow -// if computing lots of characters or very large sizes. - - - -////////////////////////////////////////////////////////////////////////////// -// -// Finding the right font... -// -// You should really just solve this offline, keep your own tables -// of what font is what, and don't try to get it out of the .ttf file. -// That's because getting it out of the .ttf file is really hard, because -// the names in the file can appear in many possible encodings, in many -// possible languages, and e.g. if you need a case-insensitive comparison, -// the details of that depend on the encoding & language in a complex way -// (actually underspecified in truetype, but also gigantic). -// -// But you can use the provided functions in two possible ways: -// stbtt_FindMatchingFont() will use *case-sensitive* comparisons on -// unicode-encoded names to try to find the font you want; -// you can run this before calling stbtt_InitFont() -// -// stbtt_GetFontNameString() lets you get any of the various strings -// from the file yourself and do your own comparisons on them. -// You have to have called stbtt_InitFont() first. - - -STBTT_DEF int stbtt_FindMatchingFont(const unsigned char *fontdata, const char *name, int flags); -// returns the offset (not index) of the font that matches, or -1 if none -// if you use STBTT_MACSTYLE_DONTCARE, use a font name like "Arial Bold". -// if you use any other flag, use a font name like "Arial"; this checks -// the 'macStyle' header field; i don't know if fonts set this consistently -#define STBTT_MACSTYLE_DONTCARE 0 -#define STBTT_MACSTYLE_BOLD 1 -#define STBTT_MACSTYLE_ITALIC 2 -#define STBTT_MACSTYLE_UNDERSCORE 4 -#define STBTT_MACSTYLE_NONE 8 // <= not same as 0, this makes us check the bitfield is 0 - -STBTT_DEF int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len1, const char *s2, int len2); -// returns 1/0 whether the first string interpreted as utf8 is identical to -// the second string interpreted as big-endian utf16... useful for strings from next func - -STBTT_DEF const char *stbtt_GetFontNameString(const stbtt_fontinfo *font, int *length, int platformID, int encodingID, int languageID, int nameID); -// returns the string (which may be big-endian double byte, e.g. for unicode) -// and puts the length in bytes in *length. -// -// some of the values for the IDs are below; for more see the truetype spec: -// http://developer.apple.com/textfonts/TTRefMan/RM06/Chap6name.html -// http://www.microsoft.com/typography/otspec/name.htm - -enum { // platformID - STBTT_PLATFORM_ID_UNICODE =0, - STBTT_PLATFORM_ID_MAC =1, - STBTT_PLATFORM_ID_ISO =2, - STBTT_PLATFORM_ID_MICROSOFT =3 -}; - -enum { // encodingID for STBTT_PLATFORM_ID_UNICODE - STBTT_UNICODE_EID_UNICODE_1_0 =0, - STBTT_UNICODE_EID_UNICODE_1_1 =1, - STBTT_UNICODE_EID_ISO_10646 =2, - STBTT_UNICODE_EID_UNICODE_2_0_BMP=3, - STBTT_UNICODE_EID_UNICODE_2_0_FULL=4 -}; - -enum { // encodingID for STBTT_PLATFORM_ID_MICROSOFT - STBTT_MS_EID_SYMBOL =0, - STBTT_MS_EID_UNICODE_BMP =1, - STBTT_MS_EID_SHIFTJIS =2, - STBTT_MS_EID_UNICODE_FULL =10 -}; - -enum { // encodingID for STBTT_PLATFORM_ID_MAC; same as Script Manager codes - STBTT_MAC_EID_ROMAN =0, STBTT_MAC_EID_ARABIC =4, - STBTT_MAC_EID_JAPANESE =1, STBTT_MAC_EID_HEBREW =5, - STBTT_MAC_EID_CHINESE_TRAD =2, STBTT_MAC_EID_GREEK =6, - STBTT_MAC_EID_KOREAN =3, STBTT_MAC_EID_RUSSIAN =7 -}; - -enum { // languageID for STBTT_PLATFORM_ID_MICROSOFT; same as LCID... - // problematic because there are e.g. 16 english LCIDs and 16 arabic LCIDs - STBTT_MS_LANG_ENGLISH =0x0409, STBTT_MS_LANG_ITALIAN =0x0410, - STBTT_MS_LANG_CHINESE =0x0804, STBTT_MS_LANG_JAPANESE =0x0411, - STBTT_MS_LANG_DUTCH =0x0413, STBTT_MS_LANG_KOREAN =0x0412, - STBTT_MS_LANG_FRENCH =0x040c, STBTT_MS_LANG_RUSSIAN =0x0419, - STBTT_MS_LANG_GERMAN =0x0407, STBTT_MS_LANG_SPANISH =0x0409, - STBTT_MS_LANG_HEBREW =0x040d, STBTT_MS_LANG_SWEDISH =0x041D -}; - -enum { // languageID for STBTT_PLATFORM_ID_MAC - STBTT_MAC_LANG_ENGLISH =0 , STBTT_MAC_LANG_JAPANESE =11, - STBTT_MAC_LANG_ARABIC =12, STBTT_MAC_LANG_KOREAN =23, - STBTT_MAC_LANG_DUTCH =4 , STBTT_MAC_LANG_RUSSIAN =32, - STBTT_MAC_LANG_FRENCH =1 , STBTT_MAC_LANG_SPANISH =6 , - STBTT_MAC_LANG_GERMAN =2 , STBTT_MAC_LANG_SWEDISH =5 , - STBTT_MAC_LANG_HEBREW =10, STBTT_MAC_LANG_CHINESE_SIMPLIFIED =33, - STBTT_MAC_LANG_ITALIAN =3 , STBTT_MAC_LANG_CHINESE_TRAD =19 -}; - -#ifdef __cplusplus -} -#endif - -#endif // __STB_INCLUDE_STB_TRUETYPE_H__ - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -//// -//// IMPLEMENTATION -//// -//// - -#ifdef STB_TRUETYPE_IMPLEMENTATION - -#ifndef STBTT_MAX_OVERSAMPLE -#define STBTT_MAX_OVERSAMPLE 8 -#endif - -#if STBTT_MAX_OVERSAMPLE > 255 -#error "STBTT_MAX_OVERSAMPLE cannot be > 255" -#endif - -typedef int stbtt__test_oversample_pow2[(STBTT_MAX_OVERSAMPLE & (STBTT_MAX_OVERSAMPLE-1)) == 0 ? 1 : -1]; - -#ifndef STBTT_RASTERIZER_VERSION -#define STBTT_RASTERIZER_VERSION 2 -#endif - -#ifdef _MSC_VER -#define STBTT__NOTUSED(v) (void)(v) -#else -#define STBTT__NOTUSED(v) (void)sizeof(v) -#endif - -////////////////////////////////////////////////////////////////////////// -// -// stbtt__buf helpers to parse data from file -// - -static stbtt_uint8 stbtt__buf_get8(stbtt__buf *b) -{ - if (b->cursor >= b->size) - return 0; - return b->data[b->cursor++]; -} - -static stbtt_uint8 stbtt__buf_peek8(stbtt__buf *b) -{ - if (b->cursor >= b->size) - return 0; - return b->data[b->cursor]; -} - -static void stbtt__buf_seek(stbtt__buf *b, int o) -{ - STBTT_assert(!(o > b->size || o < 0)); - b->cursor = (o > b->size || o < 0) ? b->size : o; -} - -static void stbtt__buf_skip(stbtt__buf *b, int o) -{ - stbtt__buf_seek(b, b->cursor + o); -} - -static stbtt_uint32 stbtt__buf_get(stbtt__buf *b, int n) -{ - stbtt_uint32 v = 0; - int i; - STBTT_assert(n >= 1 && n <= 4); - for (i = 0; i < n; i++) - v = (v << 8) | stbtt__buf_get8(b); - return v; -} - -static stbtt__buf stbtt__new_buf(const void *p, size_t size) -{ - stbtt__buf r; - STBTT_assert(size < 0x40000000); - r.data = (stbtt_uint8*) p; - r.size = (int) size; - r.cursor = 0; - return r; -} - -#define stbtt__buf_get16(b) stbtt__buf_get((b), 2) -#define stbtt__buf_get32(b) stbtt__buf_get((b), 4) - -static stbtt__buf stbtt__buf_range(const stbtt__buf *b, int o, int s) -{ - stbtt__buf r = stbtt__new_buf(NULL, 0); - if (o < 0 || s < 0 || o > b->size || s > b->size - o) return r; - r.data = b->data + o; - r.size = s; - return r; -} - -static stbtt__buf stbtt__cff_get_index(stbtt__buf *b) -{ - int count, start, offsize; - start = b->cursor; - count = stbtt__buf_get16(b); - if (count) { - offsize = stbtt__buf_get8(b); - STBTT_assert(offsize >= 1 && offsize <= 4); - stbtt__buf_skip(b, offsize * count); - stbtt__buf_skip(b, stbtt__buf_get(b, offsize) - 1); - } - return stbtt__buf_range(b, start, b->cursor - start); -} - -static stbtt_uint32 stbtt__cff_int(stbtt__buf *b) -{ - int b0 = stbtt__buf_get8(b); - if (b0 >= 32 && b0 <= 246) return b0 - 139; - else if (b0 >= 247 && b0 <= 250) return (b0 - 247)*256 + stbtt__buf_get8(b) + 108; - else if (b0 >= 251 && b0 <= 254) return -(b0 - 251)*256 - stbtt__buf_get8(b) - 108; - else if (b0 == 28) return stbtt__buf_get16(b); - else if (b0 == 29) return stbtt__buf_get32(b); - STBTT_assert(0); - return 0; -} - -static void stbtt__cff_skip_operand(stbtt__buf *b) { - int v, b0 = stbtt__buf_peek8(b); - STBTT_assert(b0 >= 28); - if (b0 == 30) { - stbtt__buf_skip(b, 1); - while (b->cursor < b->size) { - v = stbtt__buf_get8(b); - if ((v & 0xF) == 0xF || (v >> 4) == 0xF) - break; - } - } else { - stbtt__cff_int(b); - } -} - -static stbtt__buf stbtt__dict_get(stbtt__buf *b, int key) -{ - stbtt__buf_seek(b, 0); - while (b->cursor < b->size) { - int start = b->cursor, end, op; - while (stbtt__buf_peek8(b) >= 28) - stbtt__cff_skip_operand(b); - end = b->cursor; - op = stbtt__buf_get8(b); - if (op == 12) op = stbtt__buf_get8(b) | 0x100; - if (op == key) return stbtt__buf_range(b, start, end-start); - } - return stbtt__buf_range(b, 0, 0); -} - -static void stbtt__dict_get_ints(stbtt__buf *b, int key, int outcount, stbtt_uint32 *out) -{ - int i; - stbtt__buf operands = stbtt__dict_get(b, key); - for (i = 0; i < outcount && operands.cursor < operands.size; i++) - out[i] = stbtt__cff_int(&operands); -} - -static int stbtt__cff_index_count(stbtt__buf *b) -{ - stbtt__buf_seek(b, 0); - return stbtt__buf_get16(b); -} - -static stbtt__buf stbtt__cff_index_get(stbtt__buf b, int i) -{ - int count, offsize, start, end; - stbtt__buf_seek(&b, 0); - count = stbtt__buf_get16(&b); - offsize = stbtt__buf_get8(&b); - STBTT_assert(i >= 0 && i < count); - STBTT_assert(offsize >= 1 && offsize <= 4); - stbtt__buf_skip(&b, i*offsize); - start = stbtt__buf_get(&b, offsize); - end = stbtt__buf_get(&b, offsize); - return stbtt__buf_range(&b, 2+(count+1)*offsize+start, end - start); -} - -////////////////////////////////////////////////////////////////////////// -// -// accessors to parse data from file -// - -// on platforms that don't allow misaligned reads, if we want to allow -// truetype fonts that aren't padded to alignment, define ALLOW_UNALIGNED_TRUETYPE - -#define ttBYTE(p) (* (stbtt_uint8 *) (p)) -#define ttCHAR(p) (* (stbtt_int8 *) (p)) -#define ttFixed(p) ttLONG(p) - -static stbtt_uint16 ttUSHORT(stbtt_uint8 *p) { return p[0]*256 + p[1]; } -static stbtt_int16 ttSHORT(stbtt_uint8 *p) { return p[0]*256 + p[1]; } -static stbtt_uint32 ttULONG(stbtt_uint8 *p) { return (p[0]<<24) + (p[1]<<16) + (p[2]<<8) + p[3]; } -static stbtt_int32 ttLONG(stbtt_uint8 *p) { return (p[0]<<24) + (p[1]<<16) + (p[2]<<8) + p[3]; } - -#define stbtt_tag4(p,c0,c1,c2,c3) ((p)[0] == (c0) && (p)[1] == (c1) && (p)[2] == (c2) && (p)[3] == (c3)) -#define stbtt_tag(p,str) stbtt_tag4(p,str[0],str[1],str[2],str[3]) - -static int stbtt__isfont(stbtt_uint8 *font) -{ - // check the version number - if (stbtt_tag4(font, '1',0,0,0)) return 1; // TrueType 1 - if (stbtt_tag(font, "typ1")) return 1; // TrueType with type 1 font -- we don't support this! - if (stbtt_tag(font, "OTTO")) return 1; // OpenType with CFF - if (stbtt_tag4(font, 0,1,0,0)) return 1; // OpenType 1.0 - if (stbtt_tag(font, "true")) return 1; // Apple specification for TrueType fonts - return 0; -} - -// @OPTIMIZE: binary search -static stbtt_uint32 stbtt__find_table(stbtt_uint8 *data, stbtt_uint32 fontstart, const char *tag) -{ - stbtt_int32 num_tables = ttUSHORT(data+fontstart+4); - stbtt_uint32 tabledir = fontstart + 12; - stbtt_int32 i; - for (i=0; i < num_tables; ++i) { - stbtt_uint32 loc = tabledir + 16*i; - if (stbtt_tag(data+loc+0, tag)) - return ttULONG(data+loc+8); - } - return 0; -} - -static int stbtt_GetFontOffsetForIndex_internal(unsigned char *font_collection, int index) -{ - // if it's just a font, there's only one valid index - if (stbtt__isfont(font_collection)) - return index == 0 ? 0 : -1; - - // check if it's a TTC - if (stbtt_tag(font_collection, "ttcf")) { - // version 1? - if (ttULONG(font_collection+4) == 0x00010000 || ttULONG(font_collection+4) == 0x00020000) { - stbtt_int32 n = ttLONG(font_collection+8); - if (index >= n) - return -1; - return ttULONG(font_collection+12+index*4); - } - } - return -1; -} - -static int stbtt_GetNumberOfFonts_internal(unsigned char *font_collection) -{ - // if it's just a font, there's only one valid font - if (stbtt__isfont(font_collection)) - return 1; - - // check if it's a TTC - if (stbtt_tag(font_collection, "ttcf")) { - // version 1? - if (ttULONG(font_collection+4) == 0x00010000 || ttULONG(font_collection+4) == 0x00020000) { - return ttLONG(font_collection+8); - } - } - return 0; -} - -static stbtt__buf stbtt__get_subrs(stbtt__buf cff, stbtt__buf fontdict) -{ - stbtt_uint32 subrsoff = 0, private_loc[2] = { 0, 0 }; - stbtt__buf pdict; - stbtt__dict_get_ints(&fontdict, 18, 2, private_loc); - if (!private_loc[1] || !private_loc[0]) return stbtt__new_buf(NULL, 0); - pdict = stbtt__buf_range(&cff, private_loc[1], private_loc[0]); - stbtt__dict_get_ints(&pdict, 19, 1, &subrsoff); - if (!subrsoff) return stbtt__new_buf(NULL, 0); - stbtt__buf_seek(&cff, private_loc[1]+subrsoff); - return stbtt__cff_get_index(&cff); -} - -static int stbtt_InitFont_internal(stbtt_fontinfo *info, unsigned char *data, int fontstart) -{ - stbtt_uint32 cmap, t; - stbtt_int32 i,numTables; - - info->data = data; - info->fontstart = fontstart; - info->cff = stbtt__new_buf(NULL, 0); - - cmap = stbtt__find_table(data, fontstart, "cmap"); // required - info->loca = stbtt__find_table(data, fontstart, "loca"); // required - info->head = stbtt__find_table(data, fontstart, "head"); // required - info->glyf = stbtt__find_table(data, fontstart, "glyf"); // required - info->hhea = stbtt__find_table(data, fontstart, "hhea"); // required - info->hmtx = stbtt__find_table(data, fontstart, "hmtx"); // required - info->kern = stbtt__find_table(data, fontstart, "kern"); // not required - info->gpos = stbtt__find_table(data, fontstart, "GPOS"); // not required - - if (!cmap || !info->head || !info->hhea || !info->hmtx) - return 0; - if (info->glyf) { - // required for truetype - if (!info->loca) return 0; - } else { - // initialization for CFF / Type2 fonts (OTF) - stbtt__buf b, topdict, topdictidx; - stbtt_uint32 cstype = 2, charstrings = 0, fdarrayoff = 0, fdselectoff = 0; - stbtt_uint32 cff; - - cff = stbtt__find_table(data, fontstart, "CFF "); - if (!cff) return 0; - - info->fontdicts = stbtt__new_buf(NULL, 0); - info->fdselect = stbtt__new_buf(NULL, 0); - - // @TODO this should use size from table (not 512MB) - info->cff = stbtt__new_buf(data+cff, 512*1024*1024); - b = info->cff; - - // read the header - stbtt__buf_skip(&b, 2); - stbtt__buf_seek(&b, stbtt__buf_get8(&b)); // hdrsize - - // @TODO the name INDEX could list multiple fonts, - // but we just use the first one. - stbtt__cff_get_index(&b); // name INDEX - topdictidx = stbtt__cff_get_index(&b); - topdict = stbtt__cff_index_get(topdictidx, 0); - stbtt__cff_get_index(&b); // string INDEX - info->gsubrs = stbtt__cff_get_index(&b); - - stbtt__dict_get_ints(&topdict, 17, 1, &charstrings); - stbtt__dict_get_ints(&topdict, 0x100 | 6, 1, &cstype); - stbtt__dict_get_ints(&topdict, 0x100 | 36, 1, &fdarrayoff); - stbtt__dict_get_ints(&topdict, 0x100 | 37, 1, &fdselectoff); - info->subrs = stbtt__get_subrs(b, topdict); - - // we only support Type 2 charstrings - if (cstype != 2) return 0; - if (charstrings == 0) return 0; - - if (fdarrayoff) { - // looks like a CID font - if (!fdselectoff) return 0; - stbtt__buf_seek(&b, fdarrayoff); - info->fontdicts = stbtt__cff_get_index(&b); - info->fdselect = stbtt__buf_range(&b, fdselectoff, b.size-fdselectoff); - } - - stbtt__buf_seek(&b, charstrings); - info->charstrings = stbtt__cff_get_index(&b); - } - - t = stbtt__find_table(data, fontstart, "maxp"); - if (t) - info->numGlyphs = ttUSHORT(data+t+4); - else - info->numGlyphs = 0xffff; - - // find a cmap encoding table we understand *now* to avoid searching - // later. (todo: could make this installable) - // the same regardless of glyph. - numTables = ttUSHORT(data + cmap + 2); - info->index_map = 0; - for (i=0; i < numTables; ++i) { - stbtt_uint32 encoding_record = cmap + 4 + 8 * i; - // find an encoding we understand: - switch(ttUSHORT(data+encoding_record)) { - case STBTT_PLATFORM_ID_MICROSOFT: - switch (ttUSHORT(data+encoding_record+2)) { - case STBTT_MS_EID_UNICODE_BMP: - case STBTT_MS_EID_UNICODE_FULL: - // MS/Unicode - info->index_map = cmap + ttULONG(data+encoding_record+4); - break; - } - break; - case STBTT_PLATFORM_ID_UNICODE: - // Mac/iOS has these - // all the encodingIDs are unicode, so we don't bother to check it - info->index_map = cmap + ttULONG(data+encoding_record+4); - break; - } - } - if (info->index_map == 0) - return 0; - - info->indexToLocFormat = ttUSHORT(data+info->head + 50); - return 1; -} - -STBTT_DEF int stbtt_FindGlyphIndex(const stbtt_fontinfo *info, int unicode_codepoint) -{ - stbtt_uint8 *data = info->data; - stbtt_uint32 index_map = info->index_map; - - stbtt_uint16 format = ttUSHORT(data + index_map + 0); - if (format == 0) { // apple byte encoding - stbtt_int32 bytes = ttUSHORT(data + index_map + 2); - if (unicode_codepoint < bytes-6) - return ttBYTE(data + index_map + 6 + unicode_codepoint); - return 0; - } else if (format == 6) { - stbtt_uint32 first = ttUSHORT(data + index_map + 6); - stbtt_uint32 count = ttUSHORT(data + index_map + 8); - if ((stbtt_uint32) unicode_codepoint >= first && (stbtt_uint32) unicode_codepoint < first+count) - return ttUSHORT(data + index_map + 10 + (unicode_codepoint - first)*2); - return 0; - } else if (format == 2) { - STBTT_assert(0); // @TODO: high-byte mapping for japanese/chinese/korean - return 0; - } else if (format == 4) { // standard mapping for windows fonts: binary search collection of ranges - stbtt_uint16 segcount = ttUSHORT(data+index_map+6) >> 1; - stbtt_uint16 searchRange = ttUSHORT(data+index_map+8) >> 1; - stbtt_uint16 entrySelector = ttUSHORT(data+index_map+10); - stbtt_uint16 rangeShift = ttUSHORT(data+index_map+12) >> 1; - - // do a binary search of the segments - stbtt_uint32 endCount = index_map + 14; - stbtt_uint32 search = endCount; - - if (unicode_codepoint > 0xffff) - return 0; - - // they lie from endCount .. endCount + segCount - // but searchRange is the nearest power of two, so... - if (unicode_codepoint >= ttUSHORT(data + search + rangeShift*2)) - search += rangeShift*2; - - // now decrement to bias correctly to find smallest - search -= 2; - while (entrySelector) { - stbtt_uint16 end; - searchRange >>= 1; - end = ttUSHORT(data + search + searchRange*2); - if (unicode_codepoint > end) - search += searchRange*2; - --entrySelector; - } - search += 2; - - { - stbtt_uint16 offset, start; - stbtt_uint16 item = (stbtt_uint16) ((search - endCount) >> 1); - - STBTT_assert(unicode_codepoint <= ttUSHORT(data + endCount + 2*item)); - start = ttUSHORT(data + index_map + 14 + segcount*2 + 2 + 2*item); - if (unicode_codepoint < start) - return 0; - - offset = ttUSHORT(data + index_map + 14 + segcount*6 + 2 + 2*item); - if (offset == 0) - return (stbtt_uint16) (unicode_codepoint + ttSHORT(data + index_map + 14 + segcount*4 + 2 + 2*item)); - - return ttUSHORT(data + offset + (unicode_codepoint-start)*2 + index_map + 14 + segcount*6 + 2 + 2*item); - } - } else if (format == 12 || format == 13) { - stbtt_uint32 ngroups = ttULONG(data+index_map+12); - stbtt_int32 low,high; - low = 0; high = (stbtt_int32)ngroups; - // Binary search the right group. - while (low < high) { - stbtt_int32 mid = low + ((high-low) >> 1); // rounds down, so low <= mid < high - stbtt_uint32 start_char = ttULONG(data+index_map+16+mid*12); - stbtt_uint32 end_char = ttULONG(data+index_map+16+mid*12+4); - if ((stbtt_uint32) unicode_codepoint < start_char) - high = mid; - else if ((stbtt_uint32) unicode_codepoint > end_char) - low = mid+1; - else { - stbtt_uint32 start_glyph = ttULONG(data+index_map+16+mid*12+8); - if (format == 12) - return start_glyph + unicode_codepoint-start_char; - else // format == 13 - return start_glyph; - } - } - return 0; // not found - } - // @TODO - STBTT_assert(0); - return 0; -} - -STBTT_DEF int stbtt_GetCodepointShape(const stbtt_fontinfo *info, int unicode_codepoint, stbtt_vertex **vertices) -{ - return stbtt_GetGlyphShape(info, stbtt_FindGlyphIndex(info, unicode_codepoint), vertices); -} - -static void stbtt_setvertex(stbtt_vertex *v, stbtt_uint8 type, stbtt_int32 x, stbtt_int32 y, stbtt_int32 cx, stbtt_int32 cy) -{ - v->type = type; - v->x = (stbtt_int16) x; - v->y = (stbtt_int16) y; - v->cx = (stbtt_int16) cx; - v->cy = (stbtt_int16) cy; -} - -static int stbtt__GetGlyfOffset(const stbtt_fontinfo *info, int glyph_index) -{ - int g1,g2; - - STBTT_assert(!info->cff.size); - - if (glyph_index >= info->numGlyphs) return -1; // glyph index out of range - if (info->indexToLocFormat >= 2) return -1; // unknown index->glyph map format - - if (info->indexToLocFormat == 0) { - g1 = info->glyf + ttUSHORT(info->data + info->loca + glyph_index * 2) * 2; - g2 = info->glyf + ttUSHORT(info->data + info->loca + glyph_index * 2 + 2) * 2; - } else { - g1 = info->glyf + ttULONG (info->data + info->loca + glyph_index * 4); - g2 = info->glyf + ttULONG (info->data + info->loca + glyph_index * 4 + 4); - } - - return g1==g2 ? -1 : g1; // if length is 0, return -1 -} - -static int stbtt__GetGlyphInfoT2(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1); - -STBTT_DEF int stbtt_GetGlyphBox(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1) -{ - if (info->cff.size) { - stbtt__GetGlyphInfoT2(info, glyph_index, x0, y0, x1, y1); - } else { - int g = stbtt__GetGlyfOffset(info, glyph_index); - if (g < 0) return 0; - - if (x0) *x0 = ttSHORT(info->data + g + 2); - if (y0) *y0 = ttSHORT(info->data + g + 4); - if (x1) *x1 = ttSHORT(info->data + g + 6); - if (y1) *y1 = ttSHORT(info->data + g + 8); - } - return 1; -} - -STBTT_DEF int stbtt_GetCodepointBox(const stbtt_fontinfo *info, int codepoint, int *x0, int *y0, int *x1, int *y1) -{ - return stbtt_GetGlyphBox(info, stbtt_FindGlyphIndex(info,codepoint), x0,y0,x1,y1); -} - -STBTT_DEF int stbtt_IsGlyphEmpty(const stbtt_fontinfo *info, int glyph_index) -{ - stbtt_int16 numberOfContours; - int g; - if (info->cff.size) - return stbtt__GetGlyphInfoT2(info, glyph_index, NULL, NULL, NULL, NULL) == 0; - g = stbtt__GetGlyfOffset(info, glyph_index); - if (g < 0) return 1; - numberOfContours = ttSHORT(info->data + g); - return numberOfContours == 0; -} - -static int stbtt__close_shape(stbtt_vertex *vertices, int num_vertices, int was_off, int start_off, - stbtt_int32 sx, stbtt_int32 sy, stbtt_int32 scx, stbtt_int32 scy, stbtt_int32 cx, stbtt_int32 cy) -{ - if (start_off) { - if (was_off) - stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, (cx+scx)>>1, (cy+scy)>>1, cx,cy); - stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, sx,sy,scx,scy); - } else { - if (was_off) - stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve,sx,sy,cx,cy); - else - stbtt_setvertex(&vertices[num_vertices++], STBTT_vline,sx,sy,0,0); - } - return num_vertices; -} - -static int stbtt__GetGlyphShapeTT(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **pvertices) -{ - stbtt_int16 numberOfContours; - stbtt_uint8 *endPtsOfContours; - stbtt_uint8 *data = info->data; - stbtt_vertex *vertices=0; - int num_vertices=0; - int g = stbtt__GetGlyfOffset(info, glyph_index); - - *pvertices = NULL; - - if (g < 0) return 0; - - numberOfContours = ttSHORT(data + g); - - if (numberOfContours > 0) { - stbtt_uint8 flags=0,flagcount; - stbtt_int32 ins, i,j=0,m,n, next_move, was_off=0, off, start_off=0; - stbtt_int32 x,y,cx,cy,sx,sy, scx,scy; - stbtt_uint8 *points; - endPtsOfContours = (data + g + 10); - ins = ttUSHORT(data + g + 10 + numberOfContours * 2); - points = data + g + 10 + numberOfContours * 2 + 2 + ins; - - n = 1+ttUSHORT(endPtsOfContours + numberOfContours*2-2); - - m = n + 2*numberOfContours; // a loose bound on how many vertices we might need - vertices = (stbtt_vertex *) STBTT_malloc(m * sizeof(vertices[0]), info->userdata); - if (vertices == 0) - return 0; - - next_move = 0; - flagcount=0; - - // in first pass, we load uninterpreted data into the allocated array - // above, shifted to the end of the array so we won't overwrite it when - // we create our final data starting from the front - - off = m - n; // starting offset for uninterpreted data, regardless of how m ends up being calculated - - // first load flags - - for (i=0; i < n; ++i) { - if (flagcount == 0) { - flags = *points++; - if (flags & 8) - flagcount = *points++; - } else - --flagcount; - vertices[off+i].type = flags; - } - - // now load x coordinates - x=0; - for (i=0; i < n; ++i) { - flags = vertices[off+i].type; - if (flags & 2) { - stbtt_int16 dx = *points++; - x += (flags & 16) ? dx : -dx; // ??? - } else { - if (!(flags & 16)) { - x = x + (stbtt_int16) (points[0]*256 + points[1]); - points += 2; - } - } - vertices[off+i].x = (stbtt_int16) x; - } - - // now load y coordinates - y=0; - for (i=0; i < n; ++i) { - flags = vertices[off+i].type; - if (flags & 4) { - stbtt_int16 dy = *points++; - y += (flags & 32) ? dy : -dy; // ??? - } else { - if (!(flags & 32)) { - y = y + (stbtt_int16) (points[0]*256 + points[1]); - points += 2; - } - } - vertices[off+i].y = (stbtt_int16) y; - } - - // now convert them to our format - num_vertices=0; - sx = sy = cx = cy = scx = scy = 0; - for (i=0; i < n; ++i) { - flags = vertices[off+i].type; - x = (stbtt_int16) vertices[off+i].x; - y = (stbtt_int16) vertices[off+i].y; - - if (next_move == i) { - if (i != 0) - num_vertices = stbtt__close_shape(vertices, num_vertices, was_off, start_off, sx,sy,scx,scy,cx,cy); - - // now start the new one - start_off = !(flags & 1); - if (start_off) { - // if we start off with an off-curve point, then when we need to find a point on the curve - // where we can start, and we need to save some state for when we wraparound. - scx = x; - scy = y; - if (!(vertices[off+i+1].type & 1)) { - // next point is also a curve point, so interpolate an on-point curve - sx = (x + (stbtt_int32) vertices[off+i+1].x) >> 1; - sy = (y + (stbtt_int32) vertices[off+i+1].y) >> 1; - } else { - // otherwise just use the next point as our start point - sx = (stbtt_int32) vertices[off+i+1].x; - sy = (stbtt_int32) vertices[off+i+1].y; - ++i; // we're using point i+1 as the starting point, so skip it - } - } else { - sx = x; - sy = y; - } - stbtt_setvertex(&vertices[num_vertices++], STBTT_vmove,sx,sy,0,0); - was_off = 0; - next_move = 1 + ttUSHORT(endPtsOfContours+j*2); - ++j; - } else { - if (!(flags & 1)) { // if it's a curve - if (was_off) // two off-curve control points in a row means interpolate an on-curve midpoint - stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, (cx+x)>>1, (cy+y)>>1, cx, cy); - cx = x; - cy = y; - was_off = 1; - } else { - if (was_off) - stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, x,y, cx, cy); - else - stbtt_setvertex(&vertices[num_vertices++], STBTT_vline, x,y,0,0); - was_off = 0; - } - } - } - num_vertices = stbtt__close_shape(vertices, num_vertices, was_off, start_off, sx,sy,scx,scy,cx,cy); - } else if (numberOfContours == -1) { - // Compound shapes. - int more = 1; - stbtt_uint8 *comp = data + g + 10; - num_vertices = 0; - vertices = 0; - while (more) { - stbtt_uint16 flags, gidx; - int comp_num_verts = 0, i; - stbtt_vertex *comp_verts = 0, *tmp = 0; - float mtx[6] = {1,0,0,1,0,0}, m, n; - - flags = ttSHORT(comp); comp+=2; - gidx = ttSHORT(comp); comp+=2; - - if (flags & 2) { // XY values - if (flags & 1) { // shorts - mtx[4] = ttSHORT(comp); comp+=2; - mtx[5] = ttSHORT(comp); comp+=2; - } else { - mtx[4] = ttCHAR(comp); comp+=1; - mtx[5] = ttCHAR(comp); comp+=1; - } - } - else { - // @TODO handle matching point - STBTT_assert(0); - } - if (flags & (1<<3)) { // WE_HAVE_A_SCALE - mtx[0] = mtx[3] = ttSHORT(comp)/16384.0f; comp+=2; - mtx[1] = mtx[2] = 0; - } else if (flags & (1<<6)) { // WE_HAVE_AN_X_AND_YSCALE - mtx[0] = ttSHORT(comp)/16384.0f; comp+=2; - mtx[1] = mtx[2] = 0; - mtx[3] = ttSHORT(comp)/16384.0f; comp+=2; - } else if (flags & (1<<7)) { // WE_HAVE_A_TWO_BY_TWO - mtx[0] = ttSHORT(comp)/16384.0f; comp+=2; - mtx[1] = ttSHORT(comp)/16384.0f; comp+=2; - mtx[2] = ttSHORT(comp)/16384.0f; comp+=2; - mtx[3] = ttSHORT(comp)/16384.0f; comp+=2; - } - - // Find transformation scales. - m = (float) STBTT_sqrt(mtx[0]*mtx[0] + mtx[1]*mtx[1]); - n = (float) STBTT_sqrt(mtx[2]*mtx[2] + mtx[3]*mtx[3]); - - // Get indexed glyph. - comp_num_verts = stbtt_GetGlyphShape(info, gidx, &comp_verts); - if (comp_num_verts > 0) { - // Transform vertices. - for (i = 0; i < comp_num_verts; ++i) { - stbtt_vertex* v = &comp_verts[i]; - stbtt_vertex_type x,y; - x=v->x; y=v->y; - v->x = (stbtt_vertex_type)(m * (mtx[0]*x + mtx[2]*y + mtx[4])); - v->y = (stbtt_vertex_type)(n * (mtx[1]*x + mtx[3]*y + mtx[5])); - x=v->cx; y=v->cy; - v->cx = (stbtt_vertex_type)(m * (mtx[0]*x + mtx[2]*y + mtx[4])); - v->cy = (stbtt_vertex_type)(n * (mtx[1]*x + mtx[3]*y + mtx[5])); - } - // Append vertices. - tmp = (stbtt_vertex*)STBTT_malloc((num_vertices+comp_num_verts)*sizeof(stbtt_vertex), info->userdata); - if (!tmp) { - if (vertices) STBTT_free(vertices, info->userdata); - if (comp_verts) STBTT_free(comp_verts, info->userdata); - return 0; - } - if (num_vertices > 0) STBTT_memcpy(tmp, vertices, num_vertices*sizeof(stbtt_vertex)); //-V595 - STBTT_memcpy(tmp+num_vertices, comp_verts, comp_num_verts*sizeof(stbtt_vertex)); - if (vertices) STBTT_free(vertices, info->userdata); - vertices = tmp; - STBTT_free(comp_verts, info->userdata); - num_vertices += comp_num_verts; - } - // More components ? - more = flags & (1<<5); - } - } else if (numberOfContours < 0) { - // @TODO other compound variations? - STBTT_assert(0); - } else { - // numberOfCounters == 0, do nothing - } - - *pvertices = vertices; - return num_vertices; -} - -typedef struct -{ - int bounds; - int started; - float first_x, first_y; - float x, y; - stbtt_int32 min_x, max_x, min_y, max_y; - - stbtt_vertex *pvertices; - int num_vertices; -} stbtt__csctx; - -#define STBTT__CSCTX_INIT(bounds) {bounds,0, 0,0, 0,0, 0,0,0,0, NULL, 0} - -static void stbtt__track_vertex(stbtt__csctx *c, stbtt_int32 x, stbtt_int32 y) -{ - if (x > c->max_x || !c->started) c->max_x = x; - if (y > c->max_y || !c->started) c->max_y = y; - if (x < c->min_x || !c->started) c->min_x = x; - if (y < c->min_y || !c->started) c->min_y = y; - c->started = 1; -} - -static void stbtt__csctx_v(stbtt__csctx *c, stbtt_uint8 type, stbtt_int32 x, stbtt_int32 y, stbtt_int32 cx, stbtt_int32 cy, stbtt_int32 cx1, stbtt_int32 cy1) -{ - if (c->bounds) { - stbtt__track_vertex(c, x, y); - if (type == STBTT_vcubic) { - stbtt__track_vertex(c, cx, cy); - stbtt__track_vertex(c, cx1, cy1); - } - } else { - stbtt_setvertex(&c->pvertices[c->num_vertices], type, x, y, cx, cy); - c->pvertices[c->num_vertices].cx1 = (stbtt_int16) cx1; - c->pvertices[c->num_vertices].cy1 = (stbtt_int16) cy1; - } - c->num_vertices++; -} - -static void stbtt__csctx_close_shape(stbtt__csctx *ctx) -{ - if (ctx->first_x != ctx->x || ctx->first_y != ctx->y) - stbtt__csctx_v(ctx, STBTT_vline, (int)ctx->first_x, (int)ctx->first_y, 0, 0, 0, 0); -} - -static void stbtt__csctx_rmove_to(stbtt__csctx *ctx, float dx, float dy) -{ - stbtt__csctx_close_shape(ctx); - ctx->first_x = ctx->x = ctx->x + dx; - ctx->first_y = ctx->y = ctx->y + dy; - stbtt__csctx_v(ctx, STBTT_vmove, (int)ctx->x, (int)ctx->y, 0, 0, 0, 0); -} - -static void stbtt__csctx_rline_to(stbtt__csctx *ctx, float dx, float dy) -{ - ctx->x += dx; - ctx->y += dy; - stbtt__csctx_v(ctx, STBTT_vline, (int)ctx->x, (int)ctx->y, 0, 0, 0, 0); -} - -static void stbtt__csctx_rccurve_to(stbtt__csctx *ctx, float dx1, float dy1, float dx2, float dy2, float dx3, float dy3) -{ - float cx1 = ctx->x + dx1; - float cy1 = ctx->y + dy1; - float cx2 = cx1 + dx2; - float cy2 = cy1 + dy2; - ctx->x = cx2 + dx3; - ctx->y = cy2 + dy3; - stbtt__csctx_v(ctx, STBTT_vcubic, (int)ctx->x, (int)ctx->y, (int)cx1, (int)cy1, (int)cx2, (int)cy2); -} - -static stbtt__buf stbtt__get_subr(stbtt__buf idx, int n) -{ - int count = stbtt__cff_index_count(&idx); - int bias = 107; - if (count >= 33900) - bias = 32768; - else if (count >= 1240) - bias = 1131; - n += bias; - if (n < 0 || n >= count) - return stbtt__new_buf(NULL, 0); - return stbtt__cff_index_get(idx, n); -} - -static stbtt__buf stbtt__cid_get_glyph_subrs(const stbtt_fontinfo *info, int glyph_index) -{ - stbtt__buf fdselect = info->fdselect; - int nranges, start, end, v, fmt, fdselector = -1, i; - - stbtt__buf_seek(&fdselect, 0); - fmt = stbtt__buf_get8(&fdselect); - if (fmt == 0) { - // untested - stbtt__buf_skip(&fdselect, glyph_index); - fdselector = stbtt__buf_get8(&fdselect); - } else if (fmt == 3) { - nranges = stbtt__buf_get16(&fdselect); - start = stbtt__buf_get16(&fdselect); - for (i = 0; i < nranges; i++) { - v = stbtt__buf_get8(&fdselect); - end = stbtt__buf_get16(&fdselect); - if (glyph_index >= start && glyph_index < end) { - fdselector = v; - break; - } - start = end; - } - } - if (fdselector == -1) stbtt__new_buf(NULL, 0); - return stbtt__get_subrs(info->cff, stbtt__cff_index_get(info->fontdicts, fdselector)); -} - -static int stbtt__run_charstring(const stbtt_fontinfo *info, int glyph_index, stbtt__csctx *c) -{ - int in_header = 1, maskbits = 0, subr_stack_height = 0, sp = 0, v, i, b0; - int has_subrs = 0, clear_stack; - float s[48]; - stbtt__buf subr_stack[10], subrs = info->subrs, b; - float f; - -#define STBTT__CSERR(s) (0) - - // this currently ignores the initial width value, which isn't needed if we have hmtx - b = stbtt__cff_index_get(info->charstrings, glyph_index); - while (b.cursor < b.size) { - i = 0; - clear_stack = 1; - b0 = stbtt__buf_get8(&b); - switch (b0) { - // @TODO implement hinting - case 0x13: // hintmask - case 0x14: // cntrmask - if (in_header) - maskbits += (sp / 2); // implicit "vstem" - in_header = 0; - stbtt__buf_skip(&b, (maskbits + 7) / 8); - break; - - case 0x01: // hstem - case 0x03: // vstem - case 0x12: // hstemhm - case 0x17: // vstemhm - maskbits += (sp / 2); - break; - - case 0x15: // rmoveto - in_header = 0; - if (sp < 2) return STBTT__CSERR("rmoveto stack"); - stbtt__csctx_rmove_to(c, s[sp-2], s[sp-1]); - break; - case 0x04: // vmoveto - in_header = 0; - if (sp < 1) return STBTT__CSERR("vmoveto stack"); - stbtt__csctx_rmove_to(c, 0, s[sp-1]); - break; - case 0x16: // hmoveto - in_header = 0; - if (sp < 1) return STBTT__CSERR("hmoveto stack"); - stbtt__csctx_rmove_to(c, s[sp-1], 0); - break; - - case 0x05: // rlineto - if (sp < 2) return STBTT__CSERR("rlineto stack"); - for (; i + 1 < sp; i += 2) - stbtt__csctx_rline_to(c, s[i], s[i+1]); - break; - - // hlineto/vlineto and vhcurveto/hvcurveto alternate horizontal and vertical - // starting from a different place. - - case 0x07: // vlineto - if (sp < 1) return STBTT__CSERR("vlineto stack"); - goto vlineto; - case 0x06: // hlineto - if (sp < 1) return STBTT__CSERR("hlineto stack"); - for (;;) { - if (i >= sp) break; - stbtt__csctx_rline_to(c, s[i], 0); - i++; - vlineto: - if (i >= sp) break; - stbtt__csctx_rline_to(c, 0, s[i]); - i++; - } - break; - - case 0x1F: // hvcurveto - if (sp < 4) return STBTT__CSERR("hvcurveto stack"); - goto hvcurveto; - case 0x1E: // vhcurveto - if (sp < 4) return STBTT__CSERR("vhcurveto stack"); - for (;;) { - if (i + 3 >= sp) break; - stbtt__csctx_rccurve_to(c, 0, s[i], s[i+1], s[i+2], s[i+3], (sp - i == 5) ? s[i + 4] : 0.0f); - i += 4; - hvcurveto: - if (i + 3 >= sp) break; - stbtt__csctx_rccurve_to(c, s[i], 0, s[i+1], s[i+2], (sp - i == 5) ? s[i+4] : 0.0f, s[i+3]); - i += 4; - } - break; - - case 0x08: // rrcurveto - if (sp < 6) return STBTT__CSERR("rcurveline stack"); - for (; i + 5 < sp; i += 6) - stbtt__csctx_rccurve_to(c, s[i], s[i+1], s[i+2], s[i+3], s[i+4], s[i+5]); - break; - - case 0x18: // rcurveline - if (sp < 8) return STBTT__CSERR("rcurveline stack"); - for (; i + 5 < sp - 2; i += 6) - stbtt__csctx_rccurve_to(c, s[i], s[i+1], s[i+2], s[i+3], s[i+4], s[i+5]); - if (i + 1 >= sp) return STBTT__CSERR("rcurveline stack"); - stbtt__csctx_rline_to(c, s[i], s[i+1]); - break; - - case 0x19: // rlinecurve - if (sp < 8) return STBTT__CSERR("rlinecurve stack"); - for (; i + 1 < sp - 6; i += 2) - stbtt__csctx_rline_to(c, s[i], s[i+1]); - if (i + 5 >= sp) return STBTT__CSERR("rlinecurve stack"); - stbtt__csctx_rccurve_to(c, s[i], s[i+1], s[i+2], s[i+3], s[i+4], s[i+5]); - break; - - case 0x1A: // vvcurveto - case 0x1B: // hhcurveto - if (sp < 4) return STBTT__CSERR("(vv|hh)curveto stack"); - f = 0.0; - if (sp & 1) { f = s[i]; i++; } - for (; i + 3 < sp; i += 4) { - if (b0 == 0x1B) - stbtt__csctx_rccurve_to(c, s[i], f, s[i+1], s[i+2], s[i+3], 0.0); - else - stbtt__csctx_rccurve_to(c, f, s[i], s[i+1], s[i+2], 0.0, s[i+3]); - f = 0.0; - } - break; - - case 0x0A: // callsubr - if (!has_subrs) { - if (info->fdselect.size) - subrs = stbtt__cid_get_glyph_subrs(info, glyph_index); - has_subrs = 1; - } - // fallthrough - case 0x1D: // callgsubr - if (sp < 1) return STBTT__CSERR("call(g|)subr stack"); - v = (int) s[--sp]; - if (subr_stack_height >= 10) return STBTT__CSERR("recursion limit"); - subr_stack[subr_stack_height++] = b; - b = stbtt__get_subr(b0 == 0x0A ? subrs : info->gsubrs, v); - if (b.size == 0) return STBTT__CSERR("subr not found"); - b.cursor = 0; - clear_stack = 0; - break; - - case 0x0B: // return - if (subr_stack_height <= 0) return STBTT__CSERR("return outside subr"); - b = subr_stack[--subr_stack_height]; - clear_stack = 0; - break; - - case 0x0E: // endchar - stbtt__csctx_close_shape(c); - return 1; - - case 0x0C: { // two-byte escape - float dx1, dx2, dx3, dx4, dx5, dx6, dy1, dy2, dy3, dy4, dy5, dy6; - float dx, dy; - int b1 = stbtt__buf_get8(&b); - switch (b1) { - // @TODO These "flex" implementations ignore the flex-depth and resolution, - // and always draw beziers. - case 0x22: // hflex - if (sp < 7) return STBTT__CSERR("hflex stack"); - dx1 = s[0]; - dx2 = s[1]; - dy2 = s[2]; - dx3 = s[3]; - dx4 = s[4]; - dx5 = s[5]; - dx6 = s[6]; - stbtt__csctx_rccurve_to(c, dx1, 0, dx2, dy2, dx3, 0); - stbtt__csctx_rccurve_to(c, dx4, 0, dx5, -dy2, dx6, 0); - break; - - case 0x23: // flex - if (sp < 13) return STBTT__CSERR("flex stack"); - dx1 = s[0]; - dy1 = s[1]; - dx2 = s[2]; - dy2 = s[3]; - dx3 = s[4]; - dy3 = s[5]; - dx4 = s[6]; - dy4 = s[7]; - dx5 = s[8]; - dy5 = s[9]; - dx6 = s[10]; - dy6 = s[11]; - //fd is s[12] - stbtt__csctx_rccurve_to(c, dx1, dy1, dx2, dy2, dx3, dy3); - stbtt__csctx_rccurve_to(c, dx4, dy4, dx5, dy5, dx6, dy6); - break; - - case 0x24: // hflex1 - if (sp < 9) return STBTT__CSERR("hflex1 stack"); - dx1 = s[0]; - dy1 = s[1]; - dx2 = s[2]; - dy2 = s[3]; - dx3 = s[4]; - dx4 = s[5]; - dx5 = s[6]; - dy5 = s[7]; - dx6 = s[8]; - stbtt__csctx_rccurve_to(c, dx1, dy1, dx2, dy2, dx3, 0); - stbtt__csctx_rccurve_to(c, dx4, 0, dx5, dy5, dx6, -(dy1+dy2+dy5)); - break; - - case 0x25: // flex1 - if (sp < 11) return STBTT__CSERR("flex1 stack"); - dx1 = s[0]; - dy1 = s[1]; - dx2 = s[2]; - dy2 = s[3]; - dx3 = s[4]; - dy3 = s[5]; - dx4 = s[6]; - dy4 = s[7]; - dx5 = s[8]; - dy5 = s[9]; - dx6 = dy6 = s[10]; - dx = dx1+dx2+dx3+dx4+dx5; - dy = dy1+dy2+dy3+dy4+dy5; - if (STBTT_fabs(dx) > STBTT_fabs(dy)) - dy6 = -dy; - else - dx6 = -dx; - stbtt__csctx_rccurve_to(c, dx1, dy1, dx2, dy2, dx3, dy3); - stbtt__csctx_rccurve_to(c, dx4, dy4, dx5, dy5, dx6, dy6); - break; - - default: - return STBTT__CSERR("unimplemented"); - } - } break; - - default: - if (b0 != 255 && b0 != 28 && (b0 < 32 || b0 > 254)) //-V560 - return STBTT__CSERR("reserved operator"); - - // push immediate - if (b0 == 255) { - f = (float)(stbtt_int32)stbtt__buf_get32(&b) / 0x10000; - } else { - stbtt__buf_skip(&b, -1); - f = (float)(stbtt_int16)stbtt__cff_int(&b); - } - if (sp >= 48) return STBTT__CSERR("push stack overflow"); - s[sp++] = f; - clear_stack = 0; - break; - } - if (clear_stack) sp = 0; - } - return STBTT__CSERR("no endchar"); - -#undef STBTT__CSERR -} - -static int stbtt__GetGlyphShapeT2(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **pvertices) -{ - // runs the charstring twice, once to count and once to output (to avoid realloc) - stbtt__csctx count_ctx = STBTT__CSCTX_INIT(1); - stbtt__csctx output_ctx = STBTT__CSCTX_INIT(0); - if (stbtt__run_charstring(info, glyph_index, &count_ctx)) { - *pvertices = (stbtt_vertex*)STBTT_malloc(count_ctx.num_vertices*sizeof(stbtt_vertex), info->userdata); - output_ctx.pvertices = *pvertices; - if (stbtt__run_charstring(info, glyph_index, &output_ctx)) { - STBTT_assert(output_ctx.num_vertices == count_ctx.num_vertices); - return output_ctx.num_vertices; - } - } - *pvertices = NULL; - return 0; -} - -static int stbtt__GetGlyphInfoT2(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1) -{ - stbtt__csctx c = STBTT__CSCTX_INIT(1); - int r = stbtt__run_charstring(info, glyph_index, &c); - if (x0) *x0 = r ? c.min_x : 0; - if (y0) *y0 = r ? c.min_y : 0; - if (x1) *x1 = r ? c.max_x : 0; - if (y1) *y1 = r ? c.max_y : 0; - return r ? c.num_vertices : 0; -} - -STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **pvertices) -{ - if (!info->cff.size) - return stbtt__GetGlyphShapeTT(info, glyph_index, pvertices); - else - return stbtt__GetGlyphShapeT2(info, glyph_index, pvertices); -} - -STBTT_DEF void stbtt_GetGlyphHMetrics(const stbtt_fontinfo *info, int glyph_index, int *advanceWidth, int *leftSideBearing) -{ - stbtt_uint16 numOfLongHorMetrics = ttUSHORT(info->data+info->hhea + 34); - if (glyph_index < numOfLongHorMetrics) { - if (advanceWidth) *advanceWidth = ttSHORT(info->data + info->hmtx + 4*glyph_index); - if (leftSideBearing) *leftSideBearing = ttSHORT(info->data + info->hmtx + 4*glyph_index + 2); - } else { - if (advanceWidth) *advanceWidth = ttSHORT(info->data + info->hmtx + 4*(numOfLongHorMetrics-1)); - if (leftSideBearing) *leftSideBearing = ttSHORT(info->data + info->hmtx + 4*numOfLongHorMetrics + 2*(glyph_index - numOfLongHorMetrics)); - } -} - -static int stbtt__GetGlyphKernInfoAdvance(const stbtt_fontinfo *info, int glyph1, int glyph2) -{ - stbtt_uint8 *data = info->data + info->kern; - stbtt_uint32 needle, straw; - int l, r, m; - - // we only look at the first table. it must be 'horizontal' and format 0. - if (!info->kern) - return 0; - if (ttUSHORT(data+2) < 1) // number of tables, need at least 1 - return 0; - if (ttUSHORT(data+8) != 1) // horizontal flag must be set in format - return 0; - - l = 0; - r = ttUSHORT(data+10) - 1; - needle = glyph1 << 16 | glyph2; - while (l <= r) { - m = (l + r) >> 1; - straw = ttULONG(data+18+(m*6)); // note: unaligned read - if (needle < straw) - r = m - 1; - else if (needle > straw) - l = m + 1; - else - return ttSHORT(data+22+(m*6)); - } - return 0; -} - -static stbtt_int32 stbtt__GetCoverageIndex(stbtt_uint8 *coverageTable, int glyph) -{ - stbtt_uint16 coverageFormat = ttUSHORT(coverageTable); - switch(coverageFormat) { - case 1: { - stbtt_uint16 glyphCount = ttUSHORT(coverageTable + 2); - - // Binary search. - stbtt_int32 l=0, r=glyphCount-1, m; - int straw, needle=glyph; - while (l <= r) { - stbtt_uint8 *glyphArray = coverageTable + 4; - stbtt_uint16 glyphID; - m = (l + r) >> 1; - glyphID = ttUSHORT(glyphArray + 2 * m); - straw = glyphID; - if (needle < straw) - r = m - 1; - else if (needle > straw) - l = m + 1; - else { - return m; - } - } - } break; - - case 2: { - stbtt_uint16 rangeCount = ttUSHORT(coverageTable + 2); - stbtt_uint8 *rangeArray = coverageTable + 4; - - // Binary search. - stbtt_int32 l=0, r=rangeCount-1, m; - int strawStart, strawEnd, needle=glyph; - while (l <= r) { - stbtt_uint8 *rangeRecord; - m = (l + r) >> 1; - rangeRecord = rangeArray + 6 * m; - strawStart = ttUSHORT(rangeRecord); - strawEnd = ttUSHORT(rangeRecord + 2); - if (needle < strawStart) - r = m - 1; - else if (needle > strawEnd) - l = m + 1; - else { - stbtt_uint16 startCoverageIndex = ttUSHORT(rangeRecord + 4); - return startCoverageIndex + glyph - strawStart; - } - } - } break; - - default: { - // There are no other cases. - STBTT_assert(0); - } break; - } - - return -1; -} - -static stbtt_int32 stbtt__GetGlyphClass(stbtt_uint8 *classDefTable, int glyph) -{ - stbtt_uint16 classDefFormat = ttUSHORT(classDefTable); - switch(classDefFormat) - { - case 1: { - stbtt_uint16 startGlyphID = ttUSHORT(classDefTable + 2); - stbtt_uint16 glyphCount = ttUSHORT(classDefTable + 4); - stbtt_uint8 *classDef1ValueArray = classDefTable + 6; - - if (glyph >= startGlyphID && glyph < startGlyphID + glyphCount) - return (stbtt_int32)ttUSHORT(classDef1ValueArray + 2 * (glyph - startGlyphID)); - - // [DEAR IMGUI] Commented to fix static analyzer warning - //classDefTable = classDef1ValueArray + 2 * glyphCount; - } break; - - case 2: { - stbtt_uint16 classRangeCount = ttUSHORT(classDefTable + 2); - stbtt_uint8 *classRangeRecords = classDefTable + 4; - - // Binary search. - stbtt_int32 l=0, r=classRangeCount-1, m; - int strawStart, strawEnd, needle=glyph; - while (l <= r) { - stbtt_uint8 *classRangeRecord; - m = (l + r) >> 1; - classRangeRecord = classRangeRecords + 6 * m; - strawStart = ttUSHORT(classRangeRecord); - strawEnd = ttUSHORT(classRangeRecord + 2); - if (needle < strawStart) - r = m - 1; - else if (needle > strawEnd) - l = m + 1; - else - return (stbtt_int32)ttUSHORT(classRangeRecord + 4); - } - - // [DEAR IMGUI] Commented to fix static analyzer warning - //classDefTable = classRangeRecords + 6 * classRangeCount; - } break; - - default: { - // There are no other cases. - STBTT_assert(0); - } break; - } - - return -1; -} - -// Define to STBTT_assert(x) if you want to break on unimplemented formats. -#define STBTT_GPOS_TODO_assert(x) - -static stbtt_int32 stbtt__GetGlyphGPOSInfoAdvance(const stbtt_fontinfo *info, int glyph1, int glyph2) -{ - stbtt_uint16 lookupListOffset; - stbtt_uint8 *lookupList; - stbtt_uint16 lookupCount; - stbtt_uint8 *data; - stbtt_int32 i; - - if (!info->gpos) return 0; - - data = info->data + info->gpos; - - if (ttUSHORT(data+0) != 1) return 0; // Major version 1 - if (ttUSHORT(data+2) != 0) return 0; // Minor version 0 - - lookupListOffset = ttUSHORT(data+8); - lookupList = data + lookupListOffset; - lookupCount = ttUSHORT(lookupList); - - for (i=0; i> 1; - pairValue = pairValueArray + (2 + valueRecordPairSizeInBytes) * m; - secondGlyph = ttUSHORT(pairValue); - straw = secondGlyph; - if (needle < straw) - r = m - 1; - else if (needle > straw) - l = m + 1; - else { - stbtt_int16 xAdvance = ttSHORT(pairValue + 2); - return xAdvance; - } - } - } break; - - case 2: { - stbtt_uint16 valueFormat1 = ttUSHORT(table + 4); - stbtt_uint16 valueFormat2 = ttUSHORT(table + 6); - - stbtt_uint16 classDef1Offset = ttUSHORT(table + 8); - stbtt_uint16 classDef2Offset = ttUSHORT(table + 10); - int glyph1class = stbtt__GetGlyphClass(table + classDef1Offset, glyph1); - int glyph2class = stbtt__GetGlyphClass(table + classDef2Offset, glyph2); - - stbtt_uint16 class1Count = ttUSHORT(table + 12); - stbtt_uint16 class2Count = ttUSHORT(table + 14); - STBTT_assert(glyph1class < class1Count); - STBTT_assert(glyph2class < class2Count); - - // TODO: Support more formats. - STBTT_GPOS_TODO_assert(valueFormat1 == 4); - if (valueFormat1 != 4) return 0; - STBTT_GPOS_TODO_assert(valueFormat2 == 0); - if (valueFormat2 != 0) return 0; - - if (glyph1class >= 0 && glyph1class < class1Count && glyph2class >= 0 && glyph2class < class2Count) { - stbtt_uint8 *class1Records = table + 16; - stbtt_uint8 *class2Records = class1Records + 2 * (glyph1class * class2Count); - stbtt_int16 xAdvance = ttSHORT(class2Records + 2 * glyph2class); - return xAdvance; - } - } break; - - default: { - // There are no other cases. - STBTT_assert(0); - break; - } // [DEAR IMGUI] removed ; - } - } - break; - } // [DEAR IMGUI] removed ; - - default: - // TODO: Implement other stuff. - break; - } - } - - return 0; -} - -STBTT_DEF int stbtt_GetGlyphKernAdvance(const stbtt_fontinfo *info, int g1, int g2) -{ - int xAdvance = 0; - - if (info->gpos) - xAdvance += stbtt__GetGlyphGPOSInfoAdvance(info, g1, g2); - - if (info->kern) - xAdvance += stbtt__GetGlyphKernInfoAdvance(info, g1, g2); - - return xAdvance; -} - -STBTT_DEF int stbtt_GetCodepointKernAdvance(const stbtt_fontinfo *info, int ch1, int ch2) -{ - if (!info->kern && !info->gpos) // if no kerning table, don't waste time looking up both codepoint->glyphs - return 0; - return stbtt_GetGlyphKernAdvance(info, stbtt_FindGlyphIndex(info,ch1), stbtt_FindGlyphIndex(info,ch2)); -} - -STBTT_DEF void stbtt_GetCodepointHMetrics(const stbtt_fontinfo *info, int codepoint, int *advanceWidth, int *leftSideBearing) -{ - stbtt_GetGlyphHMetrics(info, stbtt_FindGlyphIndex(info,codepoint), advanceWidth, leftSideBearing); -} - -STBTT_DEF void stbtt_GetFontVMetrics(const stbtt_fontinfo *info, int *ascent, int *descent, int *lineGap) -{ - if (ascent ) *ascent = ttSHORT(info->data+info->hhea + 4); - if (descent) *descent = ttSHORT(info->data+info->hhea + 6); - if (lineGap) *lineGap = ttSHORT(info->data+info->hhea + 8); -} - -STBTT_DEF int stbtt_GetFontVMetricsOS2(const stbtt_fontinfo *info, int *typoAscent, int *typoDescent, int *typoLineGap) -{ - int tab = stbtt__find_table(info->data, info->fontstart, "OS/2"); - if (!tab) - return 0; - if (typoAscent ) *typoAscent = ttSHORT(info->data+tab + 68); - if (typoDescent) *typoDescent = ttSHORT(info->data+tab + 70); - if (typoLineGap) *typoLineGap = ttSHORT(info->data+tab + 72); - return 1; -} - -STBTT_DEF void stbtt_GetFontBoundingBox(const stbtt_fontinfo *info, int *x0, int *y0, int *x1, int *y1) -{ - *x0 = ttSHORT(info->data + info->head + 36); - *y0 = ttSHORT(info->data + info->head + 38); - *x1 = ttSHORT(info->data + info->head + 40); - *y1 = ttSHORT(info->data + info->head + 42); -} - -STBTT_DEF float stbtt_ScaleForPixelHeight(const stbtt_fontinfo *info, float height) -{ - int fheight = ttSHORT(info->data + info->hhea + 4) - ttSHORT(info->data + info->hhea + 6); - return (float) height / fheight; -} - -STBTT_DEF float stbtt_ScaleForMappingEmToPixels(const stbtt_fontinfo *info, float pixels) -{ - int unitsPerEm = ttUSHORT(info->data + info->head + 18); - return pixels / unitsPerEm; -} - -STBTT_DEF void stbtt_FreeShape(const stbtt_fontinfo *info, stbtt_vertex *v) -{ - STBTT_free(v, info->userdata); -} - -////////////////////////////////////////////////////////////////////////////// -// -// antialiasing software rasterizer -// - -STBTT_DEF void stbtt_GetGlyphBitmapBoxSubpixel(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y,float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1) -{ - int x0=0,y0=0,x1,y1; // =0 suppresses compiler warning - if (!stbtt_GetGlyphBox(font, glyph, &x0,&y0,&x1,&y1)) { - // e.g. space character - if (ix0) *ix0 = 0; - if (iy0) *iy0 = 0; - if (ix1) *ix1 = 0; - if (iy1) *iy1 = 0; - } else { - // move to integral bboxes (treating pixels as little squares, what pixels get touched)? - if (ix0) *ix0 = STBTT_ifloor( x0 * scale_x + shift_x); - if (iy0) *iy0 = STBTT_ifloor(-y1 * scale_y + shift_y); - if (ix1) *ix1 = STBTT_iceil ( x1 * scale_x + shift_x); - if (iy1) *iy1 = STBTT_iceil (-y0 * scale_y + shift_y); - } -} - -STBTT_DEF void stbtt_GetGlyphBitmapBox(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1) -{ - stbtt_GetGlyphBitmapBoxSubpixel(font, glyph, scale_x, scale_y,0.0f,0.0f, ix0, iy0, ix1, iy1); -} - -STBTT_DEF void stbtt_GetCodepointBitmapBoxSubpixel(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1) -{ - stbtt_GetGlyphBitmapBoxSubpixel(font, stbtt_FindGlyphIndex(font,codepoint), scale_x, scale_y,shift_x,shift_y, ix0,iy0,ix1,iy1); -} - -STBTT_DEF void stbtt_GetCodepointBitmapBox(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1) -{ - stbtt_GetCodepointBitmapBoxSubpixel(font, codepoint, scale_x, scale_y,0.0f,0.0f, ix0,iy0,ix1,iy1); -} - -////////////////////////////////////////////////////////////////////////////// -// -// Rasterizer - -typedef struct stbtt__hheap_chunk -{ - struct stbtt__hheap_chunk *next; -} stbtt__hheap_chunk; - -typedef struct stbtt__hheap -{ - struct stbtt__hheap_chunk *head; - void *first_free; - int num_remaining_in_head_chunk; -} stbtt__hheap; - -static void *stbtt__hheap_alloc(stbtt__hheap *hh, size_t size, void *userdata) -{ - if (hh->first_free) { - void *p = hh->first_free; - hh->first_free = * (void **) p; - return p; - } else { - if (hh->num_remaining_in_head_chunk == 0) { - int count = (size < 32 ? 2000 : size < 128 ? 800 : 100); - stbtt__hheap_chunk *c = (stbtt__hheap_chunk *) STBTT_malloc(sizeof(stbtt__hheap_chunk) + size * count, userdata); - if (c == NULL) - return NULL; - c->next = hh->head; - hh->head = c; - hh->num_remaining_in_head_chunk = count; - } - --hh->num_remaining_in_head_chunk; - return (char *) (hh->head) + sizeof(stbtt__hheap_chunk) + size * hh->num_remaining_in_head_chunk; - } -} - -static void stbtt__hheap_free(stbtt__hheap *hh, void *p) -{ - *(void **) p = hh->first_free; - hh->first_free = p; -} - -static void stbtt__hheap_cleanup(stbtt__hheap *hh, void *userdata) -{ - stbtt__hheap_chunk *c = hh->head; - while (c) { - stbtt__hheap_chunk *n = c->next; - STBTT_free(c, userdata); - c = n; - } -} - -typedef struct stbtt__edge { - float x0,y0, x1,y1; - int invert; -} stbtt__edge; - - -typedef struct stbtt__active_edge -{ - struct stbtt__active_edge *next; - #if STBTT_RASTERIZER_VERSION==1 - int x,dx; - float ey; - int direction; - #elif STBTT_RASTERIZER_VERSION==2 - float fx,fdx,fdy; - float direction; - float sy; - float ey; - #else - #error "Unrecognized value of STBTT_RASTERIZER_VERSION" - #endif -} stbtt__active_edge; - -#if STBTT_RASTERIZER_VERSION == 1 -#define STBTT_FIXSHIFT 10 -#define STBTT_FIX (1 << STBTT_FIXSHIFT) -#define STBTT_FIXMASK (STBTT_FIX-1) - -static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__edge *e, int off_x, float start_point, void *userdata) -{ - stbtt__active_edge *z = (stbtt__active_edge *) stbtt__hheap_alloc(hh, sizeof(*z), userdata); - float dxdy = (e->x1 - e->x0) / (e->y1 - e->y0); - STBTT_assert(z != NULL); - if (!z) return z; - - // round dx down to avoid overshooting - if (dxdy < 0) - z->dx = -STBTT_ifloor(STBTT_FIX * -dxdy); - else - z->dx = STBTT_ifloor(STBTT_FIX * dxdy); - - z->x = STBTT_ifloor(STBTT_FIX * e->x0 + z->dx * (start_point - e->y0)); // use z->dx so when we offset later it's by the same amount - z->x -= off_x * STBTT_FIX; - - z->ey = e->y1; - z->next = 0; - z->direction = e->invert ? 1 : -1; - return z; -} -#elif STBTT_RASTERIZER_VERSION == 2 -static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__edge *e, int off_x, float start_point, void *userdata) -{ - stbtt__active_edge *z = (stbtt__active_edge *) stbtt__hheap_alloc(hh, sizeof(*z), userdata); - float dxdy = (e->x1 - e->x0) / (e->y1 - e->y0); - STBTT_assert(z != NULL); - //STBTT_assert(e->y0 <= start_point); - if (!z) return z; - z->fdx = dxdy; - z->fdy = dxdy != 0.0f ? (1.0f/dxdy) : 0.0f; - z->fx = e->x0 + dxdy * (start_point - e->y0); - z->fx -= off_x; - z->direction = e->invert ? 1.0f : -1.0f; - z->sy = e->y0; - z->ey = e->y1; - z->next = 0; - return z; -} -#else -#error "Unrecognized value of STBTT_RASTERIZER_VERSION" -#endif - -#if STBTT_RASTERIZER_VERSION == 1 -// note: this routine clips fills that extend off the edges... ideally this -// wouldn't happen, but it could happen if the truetype glyph bounding boxes -// are wrong, or if the user supplies a too-small bitmap -static void stbtt__fill_active_edges(unsigned char *scanline, int len, stbtt__active_edge *e, int max_weight) -{ - // non-zero winding fill - int x0=0, w=0; - - while (e) { - if (w == 0) { - // if we're currently at zero, we need to record the edge start point - x0 = e->x; w += e->direction; - } else { - int x1 = e->x; w += e->direction; - // if we went to zero, we need to draw - if (w == 0) { - int i = x0 >> STBTT_FIXSHIFT; - int j = x1 >> STBTT_FIXSHIFT; - - if (i < len && j >= 0) { - if (i == j) { - // x0,x1 are the same pixel, so compute combined coverage - scanline[i] = scanline[i] + (stbtt_uint8) ((x1 - x0) * max_weight >> STBTT_FIXSHIFT); - } else { - if (i >= 0) // add antialiasing for x0 - scanline[i] = scanline[i] + (stbtt_uint8) (((STBTT_FIX - (x0 & STBTT_FIXMASK)) * max_weight) >> STBTT_FIXSHIFT); - else - i = -1; // clip - - if (j < len) // add antialiasing for x1 - scanline[j] = scanline[j] + (stbtt_uint8) (((x1 & STBTT_FIXMASK) * max_weight) >> STBTT_FIXSHIFT); - else - j = len; // clip - - for (++i; i < j; ++i) // fill pixels between x0 and x1 - scanline[i] = scanline[i] + (stbtt_uint8) max_weight; - } - } - } - } - - e = e->next; - } -} - -static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__edge *e, int n, int vsubsample, int off_x, int off_y, void *userdata) -{ - stbtt__hheap hh = { 0, 0, 0 }; - stbtt__active_edge *active = NULL; - int y,j=0; - int max_weight = (255 / vsubsample); // weight per vertical scanline - int s; // vertical subsample index - unsigned char scanline_data[512], *scanline; - - if (result->w > 512) - scanline = (unsigned char *) STBTT_malloc(result->w, userdata); - else - scanline = scanline_data; - - y = off_y * vsubsample; - e[n].y0 = (off_y + result->h) * (float) vsubsample + 1; - - while (j < result->h) { - STBTT_memset(scanline, 0, result->w); - for (s=0; s < vsubsample; ++s) { - // find center of pixel for this scanline - float scan_y = y + 0.5f; - stbtt__active_edge **step = &active; - - // update all active edges; - // remove all active edges that terminate before the center of this scanline - while (*step) { - stbtt__active_edge * z = *step; - if (z->ey <= scan_y) { - *step = z->next; // delete from list - STBTT_assert(z->direction); - z->direction = 0; - stbtt__hheap_free(&hh, z); - } else { - z->x += z->dx; // advance to position for current scanline - step = &((*step)->next); // advance through list - } - } - - // resort the list if needed - for(;;) { - int changed=0; - step = &active; - while (*step && (*step)->next) { - if ((*step)->x > (*step)->next->x) { - stbtt__active_edge *t = *step; - stbtt__active_edge *q = t->next; - - t->next = q->next; - q->next = t; - *step = q; - changed = 1; - } - step = &(*step)->next; - } - if (!changed) break; - } - - // insert all edges that start before the center of this scanline -- omit ones that also end on this scanline - while (e->y0 <= scan_y) { - if (e->y1 > scan_y) { - stbtt__active_edge *z = stbtt__new_active(&hh, e, off_x, scan_y, userdata); - if (z != NULL) { - // find insertion point - if (active == NULL) - active = z; - else if (z->x < active->x) { - // insert at front - z->next = active; - active = z; - } else { - // find thing to insert AFTER - stbtt__active_edge *p = active; - while (p->next && p->next->x < z->x) - p = p->next; - // at this point, p->next->x is NOT < z->x - z->next = p->next; - p->next = z; - } - } - } - ++e; - } - - // now process all active edges in XOR fashion - if (active) - stbtt__fill_active_edges(scanline, result->w, active, max_weight); - - ++y; - } - STBTT_memcpy(result->pixels + j * result->stride, scanline, result->w); - ++j; - } - - stbtt__hheap_cleanup(&hh, userdata); - - if (scanline != scanline_data) - STBTT_free(scanline, userdata); -} - -#elif STBTT_RASTERIZER_VERSION == 2 - -// the edge passed in here does not cross the vertical line at x or the vertical line at x+1 -// (i.e. it has already been clipped to those) -static void stbtt__handle_clipped_edge(float *scanline, int x, stbtt__active_edge *e, float x0, float y0, float x1, float y1) -{ - if (y0 == y1) return; - STBTT_assert(y0 < y1); - STBTT_assert(e->sy <= e->ey); - if (y0 > e->ey) return; - if (y1 < e->sy) return; - if (y0 < e->sy) { - x0 += (x1-x0) * (e->sy - y0) / (y1-y0); - y0 = e->sy; - } - if (y1 > e->ey) { - x1 += (x1-x0) * (e->ey - y1) / (y1-y0); - y1 = e->ey; - } - - if (x0 == x) - STBTT_assert(x1 <= x+1); - else if (x0 == x+1) - STBTT_assert(x1 >= x); - else if (x0 <= x) - STBTT_assert(x1 <= x); - else if (x0 >= x+1) - STBTT_assert(x1 >= x+1); - else - STBTT_assert(x1 >= x && x1 <= x+1); - - if (x0 <= x && x1 <= x) - scanline[x] += e->direction * (y1-y0); - else if (x0 >= x+1 && x1 >= x+1) - ; - else { - STBTT_assert(x0 >= x && x0 <= x+1 && x1 >= x && x1 <= x+1); - scanline[x] += e->direction * (y1-y0) * (1-((x0-x)+(x1-x))/2); // coverage = 1 - average x position - } -} - -static void stbtt__fill_active_edges_new(float *scanline, float *scanline_fill, int len, stbtt__active_edge *e, float y_top) -{ - float y_bottom = y_top+1; - - while (e) { - // brute force every pixel - - // compute intersection points with top & bottom - STBTT_assert(e->ey >= y_top); - - if (e->fdx == 0) { - float x0 = e->fx; - if (x0 < len) { - if (x0 >= 0) { - stbtt__handle_clipped_edge(scanline,(int) x0,e, x0,y_top, x0,y_bottom); - stbtt__handle_clipped_edge(scanline_fill-1,(int) x0+1,e, x0,y_top, x0,y_bottom); - } else { - stbtt__handle_clipped_edge(scanline_fill-1,0,e, x0,y_top, x0,y_bottom); - } - } - } else { - float x0 = e->fx; - float dx = e->fdx; - float xb = x0 + dx; - float x_top, x_bottom; - float sy0,sy1; - float dy = e->fdy; - STBTT_assert(e->sy <= y_bottom && e->ey >= y_top); - - // compute endpoints of line segment clipped to this scanline (if the - // line segment starts on this scanline. x0 is the intersection of the - // line with y_top, but that may be off the line segment. - if (e->sy > y_top) { - x_top = x0 + dx * (e->sy - y_top); - sy0 = e->sy; - } else { - x_top = x0; - sy0 = y_top; - } - if (e->ey < y_bottom) { - x_bottom = x0 + dx * (e->ey - y_top); - sy1 = e->ey; - } else { - x_bottom = xb; - sy1 = y_bottom; - } - - if (x_top >= 0 && x_bottom >= 0 && x_top < len && x_bottom < len) { - // from here on, we don't have to range check x values - - if ((int) x_top == (int) x_bottom) { - float height; - // simple case, only spans one pixel - int x = (int) x_top; - height = sy1 - sy0; - STBTT_assert(x >= 0 && x < len); - scanline[x] += e->direction * (1-((x_top - x) + (x_bottom-x))/2) * height; - scanline_fill[x] += e->direction * height; // everything right of this pixel is filled - } else { - int x,x1,x2; - float y_crossing, step, sign, area; - // covers 2+ pixels - if (x_top > x_bottom) { - // flip scanline vertically; signed area is the same - float t; - sy0 = y_bottom - (sy0 - y_top); - sy1 = y_bottom - (sy1 - y_top); - t = sy0, sy0 = sy1, sy1 = t; - t = x_bottom, x_bottom = x_top, x_top = t; - dx = -dx; - dy = -dy; - t = x0, x0 = xb, xb = t; - // [DEAR IMGUI] Fix static analyzer warning - (void)dx; // [ImGui: fix static analyzer warning] - } - - x1 = (int) x_top; - x2 = (int) x_bottom; - // compute intersection with y axis at x1+1 - y_crossing = (x1+1 - x0) * dy + y_top; - - sign = e->direction; - // area of the rectangle covered from y0..y_crossing - area = sign * (y_crossing-sy0); - // area of the triangle (x_top,y0), (x+1,y0), (x+1,y_crossing) - scanline[x1] += area * (1-((x_top - x1)+(x1+1-x1))/2); - - step = sign * dy; - for (x = x1+1; x < x2; ++x) { - scanline[x] += area + step/2; - area += step; - } - y_crossing += dy * (x2 - (x1+1)); - - STBTT_assert(STBTT_fabs(area) <= 1.01f); - - scanline[x2] += area + sign * (1-((x2-x2)+(x_bottom-x2))/2) * (sy1-y_crossing); - - scanline_fill[x2] += sign * (sy1-sy0); - } - } else { - // if edge goes outside of box we're drawing, we require - // clipping logic. since this does not match the intended use - // of this library, we use a different, very slow brute - // force implementation - int x; - for (x=0; x < len; ++x) { - // cases: - // - // there can be up to two intersections with the pixel. any intersection - // with left or right edges can be handled by splitting into two (or three) - // regions. intersections with top & bottom do not necessitate case-wise logic. - // - // the old way of doing this found the intersections with the left & right edges, - // then used some simple logic to produce up to three segments in sorted order - // from top-to-bottom. however, this had a problem: if an x edge was epsilon - // across the x border, then the corresponding y position might not be distinct - // from the other y segment, and it might ignored as an empty segment. to avoid - // that, we need to explicitly produce segments based on x positions. - - // rename variables to clearly-defined pairs - float y0 = y_top; - float x1 = (float) (x); - float x2 = (float) (x+1); - float x3 = xb; - float y3 = y_bottom; - - // x = e->x + e->dx * (y-y_top) - // (y-y_top) = (x - e->x) / e->dx - // y = (x - e->x) / e->dx + y_top - float y1 = (x - x0) / dx + y_top; - float y2 = (x+1 - x0) / dx + y_top; - - if (x0 < x1 && x3 > x2) { // three segments descending down-right - stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x1,y1); - stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x2,y2); - stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x3,y3); - } else if (x3 < x1 && x0 > x2) { // three segments descending down-left - stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x2,y2); - stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x1,y1); - stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x3,y3); - } else if (x0 < x1 && x3 > x1) { // two segments across x, down-right - stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x1,y1); - stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x3,y3); - } else if (x3 < x1 && x0 > x1) { // two segments across x, down-left - stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x1,y1); - stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x3,y3); - } else if (x0 < x2 && x3 > x2) { // two segments across x+1, down-right - stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x2,y2); - stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x3,y3); - } else if (x3 < x2 && x0 > x2) { // two segments across x+1, down-left - stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x2,y2); - stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x3,y3); - } else { // one segment - stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x3,y3); - } - } - } - } - e = e->next; - } -} - -// directly AA rasterize edges w/o supersampling -static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__edge *e, int n, int vsubsample, int off_x, int off_y, void *userdata) -{ - stbtt__hheap hh = { 0, 0, 0 }; - stbtt__active_edge *active = NULL; - int y,j=0, i; - float scanline_data[129], *scanline, *scanline2; - - STBTT__NOTUSED(vsubsample); - - if (result->w > 64) - scanline = (float *) STBTT_malloc((result->w*2+1) * sizeof(float), userdata); - else - scanline = scanline_data; - - scanline2 = scanline + result->w; - - y = off_y; - e[n].y0 = (float) (off_y + result->h) + 1; - - while (j < result->h) { - // find center of pixel for this scanline - float scan_y_top = y + 0.0f; - float scan_y_bottom = y + 1.0f; - stbtt__active_edge **step = &active; - - STBTT_memset(scanline , 0, result->w*sizeof(scanline[0])); - STBTT_memset(scanline2, 0, (result->w+1)*sizeof(scanline[0])); - - // update all active edges; - // remove all active edges that terminate before the top of this scanline - while (*step) { - stbtt__active_edge * z = *step; - if (z->ey <= scan_y_top) { - *step = z->next; // delete from list - STBTT_assert(z->direction); - z->direction = 0; - stbtt__hheap_free(&hh, z); - } else { - step = &((*step)->next); // advance through list - } - } - - // insert all edges that start before the bottom of this scanline - while (e->y0 <= scan_y_bottom) { - if (e->y0 != e->y1) { - stbtt__active_edge *z = stbtt__new_active(&hh, e, off_x, scan_y_top, userdata); - if (z != NULL) { - if (j == 0 && off_y != 0) { - if (z->ey < scan_y_top) { - // this can happen due to subpixel positioning and some kind of fp rounding error i think - z->ey = scan_y_top; - } - } - STBTT_assert(z->ey >= scan_y_top); // if we get really unlucky a tiny bit of an edge can be out of bounds - // insert at front - z->next = active; - active = z; - } - } - ++e; - } - - // now process all active edges - if (active) - stbtt__fill_active_edges_new(scanline, scanline2+1, result->w, active, scan_y_top); - - { - float sum = 0; - for (i=0; i < result->w; ++i) { - float k; - int m; - sum += scanline2[i]; - k = scanline[i] + sum; - k = (float) STBTT_fabs(k)*255 + 0.5f; - m = (int) k; - if (m > 255) m = 255; - result->pixels[j*result->stride + i] = (unsigned char) m; - } - } - // advance all the edges - step = &active; - while (*step) { - stbtt__active_edge *z = *step; - z->fx += z->fdx; // advance to position for current scanline - step = &((*step)->next); // advance through list - } - - ++y; - ++j; - } - - stbtt__hheap_cleanup(&hh, userdata); - - if (scanline != scanline_data) - STBTT_free(scanline, userdata); -} -#else -#error "Unrecognized value of STBTT_RASTERIZER_VERSION" -#endif - -#define STBTT__COMPARE(a,b) ((a)->y0 < (b)->y0) - -static void stbtt__sort_edges_ins_sort(stbtt__edge *p, int n) -{ - int i,j; - for (i=1; i < n; ++i) { - stbtt__edge t = p[i], *a = &t; - j = i; - while (j > 0) { - stbtt__edge *b = &p[j-1]; - int c = STBTT__COMPARE(a,b); - if (!c) break; - p[j] = p[j-1]; - --j; - } - if (i != j) - p[j] = t; - } -} - -static void stbtt__sort_edges_quicksort(stbtt__edge *p, int n) -{ - /* threshold for transitioning to insertion sort */ - while (n > 12) { - stbtt__edge t; - int c01,c12,c,m,i,j; - - /* compute median of three */ - m = n >> 1; - c01 = STBTT__COMPARE(&p[0],&p[m]); - c12 = STBTT__COMPARE(&p[m],&p[n-1]); - /* if 0 >= mid >= end, or 0 < mid < end, then use mid */ - if (c01 != c12) { - /* otherwise, we'll need to swap something else to middle */ - int z; - c = STBTT__COMPARE(&p[0],&p[n-1]); - /* 0>mid && midn => n; 0 0 */ - /* 0n: 0>n => 0; 0 n */ - z = (c == c12) ? 0 : n-1; - t = p[z]; - p[z] = p[m]; - p[m] = t; - } - /* now p[m] is the median-of-three */ - /* swap it to the beginning so it won't move around */ - t = p[0]; - p[0] = p[m]; - p[m] = t; - - /* partition loop */ - i=1; - j=n-1; - for(;;) { - /* handling of equality is crucial here */ - /* for sentinels & efficiency with duplicates */ - for (;;++i) { - if (!STBTT__COMPARE(&p[i], &p[0])) break; - } - for (;;--j) { - if (!STBTT__COMPARE(&p[0], &p[j])) break; - } - /* make sure we haven't crossed */ - if (i >= j) break; - t = p[i]; - p[i] = p[j]; - p[j] = t; - - ++i; - --j; - } - /* recurse on smaller side, iterate on larger */ - if (j < (n-i)) { - stbtt__sort_edges_quicksort(p,j); - p = p+i; - n = n-i; - } else { - stbtt__sort_edges_quicksort(p+i, n-i); - n = j; - } - } -} - -static void stbtt__sort_edges(stbtt__edge *p, int n) -{ - stbtt__sort_edges_quicksort(p, n); - stbtt__sort_edges_ins_sort(p, n); -} - -typedef struct -{ - float x,y; -} stbtt__point; - -static void stbtt__rasterize(stbtt__bitmap *result, stbtt__point *pts, int *wcount, int windings, float scale_x, float scale_y, float shift_x, float shift_y, int off_x, int off_y, int invert, void *userdata) -{ - float y_scale_inv = invert ? -scale_y : scale_y; - stbtt__edge *e; - int n,i,j,k,m; -#if STBTT_RASTERIZER_VERSION == 1 - int vsubsample = result->h < 8 ? 15 : 5; -#elif STBTT_RASTERIZER_VERSION == 2 - int vsubsample = 1; -#else - #error "Unrecognized value of STBTT_RASTERIZER_VERSION" -#endif - // vsubsample should divide 255 evenly; otherwise we won't reach full opacity - - // now we have to blow out the windings into explicit edge lists - n = 0; - for (i=0; i < windings; ++i) - n += wcount[i]; - - e = (stbtt__edge *) STBTT_malloc(sizeof(*e) * (n+1), userdata); // add an extra one as a sentinel - if (e == 0) return; - n = 0; - - m=0; - for (i=0; i < windings; ++i) { - stbtt__point *p = pts + m; - m += wcount[i]; - j = wcount[i]-1; - for (k=0; k < wcount[i]; j=k++) { - int a=k,b=j; - // skip the edge if horizontal - if (p[j].y == p[k].y) - continue; - // add edge from j to k to the list - e[n].invert = 0; - if (invert ? p[j].y > p[k].y : p[j].y < p[k].y) { - e[n].invert = 1; - a=j,b=k; - } - e[n].x0 = p[a].x * scale_x + shift_x; - e[n].y0 = (p[a].y * y_scale_inv + shift_y) * vsubsample; - e[n].x1 = p[b].x * scale_x + shift_x; - e[n].y1 = (p[b].y * y_scale_inv + shift_y) * vsubsample; - ++n; - } - } - - // now sort the edges by their highest point (should snap to integer, and then by x) - //STBTT_sort(e, n, sizeof(e[0]), stbtt__edge_compare); - stbtt__sort_edges(e, n); - - // now, traverse the scanlines and find the intersections on each scanline, use xor winding rule - stbtt__rasterize_sorted_edges(result, e, n, vsubsample, off_x, off_y, userdata); - - STBTT_free(e, userdata); -} - -static void stbtt__add_point(stbtt__point *points, int n, float x, float y) -{ - if (!points) return; // during first pass, it's unallocated - points[n].x = x; - points[n].y = y; -} - -// tessellate until threshold p is happy... @TODO warped to compensate for non-linear stretching -static int stbtt__tesselate_curve(stbtt__point *points, int *num_points, float x0, float y0, float x1, float y1, float x2, float y2, float objspace_flatness_squared, int n) -{ - // midpoint - float mx = (x0 + 2*x1 + x2)/4; - float my = (y0 + 2*y1 + y2)/4; - // versus directly drawn line - float dx = (x0+x2)/2 - mx; - float dy = (y0+y2)/2 - my; - if (n > 16) // 65536 segments on one curve better be enough! - return 1; - if (dx*dx+dy*dy > objspace_flatness_squared) { // half-pixel error allowed... need to be smaller if AA - stbtt__tesselate_curve(points, num_points, x0,y0, (x0+x1)/2.0f,(y0+y1)/2.0f, mx,my, objspace_flatness_squared,n+1); - stbtt__tesselate_curve(points, num_points, mx,my, (x1+x2)/2.0f,(y1+y2)/2.0f, x2,y2, objspace_flatness_squared,n+1); - } else { - stbtt__add_point(points, *num_points,x2,y2); - *num_points = *num_points+1; - } - return 1; -} - -static void stbtt__tesselate_cubic(stbtt__point *points, int *num_points, float x0, float y0, float x1, float y1, float x2, float y2, float x3, float y3, float objspace_flatness_squared, int n) -{ - // @TODO this "flatness" calculation is just made-up nonsense that seems to work well enough - float dx0 = x1-x0; - float dy0 = y1-y0; - float dx1 = x2-x1; - float dy1 = y2-y1; - float dx2 = x3-x2; - float dy2 = y3-y2; - float dx = x3-x0; - float dy = y3-y0; - float longlen = (float) (STBTT_sqrt(dx0*dx0+dy0*dy0)+STBTT_sqrt(dx1*dx1+dy1*dy1)+STBTT_sqrt(dx2*dx2+dy2*dy2)); - float shortlen = (float) STBTT_sqrt(dx*dx+dy*dy); - float flatness_squared = longlen*longlen-shortlen*shortlen; - - if (n > 16) // 65536 segments on one curve better be enough! - return; - - if (flatness_squared > objspace_flatness_squared) { - float x01 = (x0+x1)/2; - float y01 = (y0+y1)/2; - float x12 = (x1+x2)/2; - float y12 = (y1+y2)/2; - float x23 = (x2+x3)/2; - float y23 = (y2+y3)/2; - - float xa = (x01+x12)/2; - float ya = (y01+y12)/2; - float xb = (x12+x23)/2; - float yb = (y12+y23)/2; - - float mx = (xa+xb)/2; - float my = (ya+yb)/2; - - stbtt__tesselate_cubic(points, num_points, x0,y0, x01,y01, xa,ya, mx,my, objspace_flatness_squared,n+1); - stbtt__tesselate_cubic(points, num_points, mx,my, xb,yb, x23,y23, x3,y3, objspace_flatness_squared,n+1); - } else { - stbtt__add_point(points, *num_points,x3,y3); - *num_points = *num_points+1; - } -} - -// returns number of contours -static stbtt__point *stbtt_FlattenCurves(stbtt_vertex *vertices, int num_verts, float objspace_flatness, int **contour_lengths, int *num_contours, void *userdata) -{ - stbtt__point *points=0; - int num_points=0; - - float objspace_flatness_squared = objspace_flatness * objspace_flatness; - int i,n=0,start=0, pass; - - // count how many "moves" there are to get the contour count - for (i=0; i < num_verts; ++i) - if (vertices[i].type == STBTT_vmove) - ++n; - - *num_contours = n; - if (n == 0) return 0; - - *contour_lengths = (int *) STBTT_malloc(sizeof(**contour_lengths) * n, userdata); - - if (*contour_lengths == 0) { - *num_contours = 0; - return 0; - } - - // make two passes through the points so we don't need to realloc - for (pass=0; pass < 2; ++pass) { - float x=0,y=0; - if (pass == 1) { - points = (stbtt__point *) STBTT_malloc(num_points * sizeof(points[0]), userdata); - if (points == NULL) goto error; - } - num_points = 0; - n= -1; - for (i=0; i < num_verts; ++i) { - switch (vertices[i].type) { - case STBTT_vmove: - // start the next contour - if (n >= 0) - (*contour_lengths)[n] = num_points - start; - ++n; - start = num_points; - - x = vertices[i].x, y = vertices[i].y; - stbtt__add_point(points, num_points++, x,y); - break; - case STBTT_vline: - x = vertices[i].x, y = vertices[i].y; - stbtt__add_point(points, num_points++, x, y); - break; - case STBTT_vcurve: - stbtt__tesselate_curve(points, &num_points, x,y, - vertices[i].cx, vertices[i].cy, - vertices[i].x, vertices[i].y, - objspace_flatness_squared, 0); - x = vertices[i].x, y = vertices[i].y; - break; - case STBTT_vcubic: - stbtt__tesselate_cubic(points, &num_points, x,y, - vertices[i].cx, vertices[i].cy, - vertices[i].cx1, vertices[i].cy1, - vertices[i].x, vertices[i].y, - objspace_flatness_squared, 0); - x = vertices[i].x, y = vertices[i].y; - break; - } - } - (*contour_lengths)[n] = num_points - start; - } - - return points; -error: - STBTT_free(points, userdata); - STBTT_free(*contour_lengths, userdata); - *contour_lengths = 0; - *num_contours = 0; - return NULL; -} - -STBTT_DEF void stbtt_Rasterize(stbtt__bitmap *result, float flatness_in_pixels, stbtt_vertex *vertices, int num_verts, float scale_x, float scale_y, float shift_x, float shift_y, int x_off, int y_off, int invert, void *userdata) -{ - float scale = scale_x > scale_y ? scale_y : scale_x; - int winding_count = 0; - int *winding_lengths = NULL; - stbtt__point *windings = stbtt_FlattenCurves(vertices, num_verts, flatness_in_pixels / scale, &winding_lengths, &winding_count, userdata); - if (windings) { - stbtt__rasterize(result, windings, winding_lengths, winding_count, scale_x, scale_y, shift_x, shift_y, x_off, y_off, invert, userdata); - STBTT_free(winding_lengths, userdata); - STBTT_free(windings, userdata); - } -} - -STBTT_DEF void stbtt_FreeBitmap(unsigned char *bitmap, void *userdata) -{ - STBTT_free(bitmap, userdata); -} - -STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int glyph, int *width, int *height, int *xoff, int *yoff) -{ - int ix0,iy0,ix1,iy1; - stbtt__bitmap gbm; - stbtt_vertex *vertices; - int num_verts = stbtt_GetGlyphShape(info, glyph, &vertices); - - if (scale_x == 0) scale_x = scale_y; - if (scale_y == 0) { - if (scale_x == 0) { - STBTT_free(vertices, info->userdata); - return NULL; - } - scale_y = scale_x; - } - - stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale_x, scale_y, shift_x, shift_y, &ix0,&iy0,&ix1,&iy1); - - // now we get the size - gbm.w = (ix1 - ix0); - gbm.h = (iy1 - iy0); - gbm.pixels = NULL; // in case we error - - if (width ) *width = gbm.w; - if (height) *height = gbm.h; - if (xoff ) *xoff = ix0; - if (yoff ) *yoff = iy0; - - if (gbm.w && gbm.h) { - gbm.pixels = (unsigned char *) STBTT_malloc(gbm.w * gbm.h, info->userdata); - if (gbm.pixels) { - gbm.stride = gbm.w; - - stbtt_Rasterize(&gbm, 0.35f, vertices, num_verts, scale_x, scale_y, shift_x, shift_y, ix0, iy0, 1, info->userdata); - } - } - STBTT_free(vertices, info->userdata); - return gbm.pixels; -} - -STBTT_DEF unsigned char *stbtt_GetGlyphBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int glyph, int *width, int *height, int *xoff, int *yoff) -{ - return stbtt_GetGlyphBitmapSubpixel(info, scale_x, scale_y, 0.0f, 0.0f, glyph, width, height, xoff, yoff); -} - -STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int glyph) -{ - int ix0,iy0; - stbtt_vertex *vertices; - int num_verts = stbtt_GetGlyphShape(info, glyph, &vertices); - stbtt__bitmap gbm; - - stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale_x, scale_y, shift_x, shift_y, &ix0,&iy0,0,0); - gbm.pixels = output; - gbm.w = out_w; - gbm.h = out_h; - gbm.stride = out_stride; - - if (gbm.w && gbm.h) - stbtt_Rasterize(&gbm, 0.35f, vertices, num_verts, scale_x, scale_y, shift_x, shift_y, ix0,iy0, 1, info->userdata); - - STBTT_free(vertices, info->userdata); -} - -STBTT_DEF void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int glyph) -{ - stbtt_MakeGlyphBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, 0.0f,0.0f, glyph); -} - -STBTT_DEF unsigned char *stbtt_GetCodepointBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint, int *width, int *height, int *xoff, int *yoff) -{ - return stbtt_GetGlyphBitmapSubpixel(info, scale_x, scale_y,shift_x,shift_y, stbtt_FindGlyphIndex(info,codepoint), width,height,xoff,yoff); -} - -STBTT_DEF void stbtt_MakeCodepointBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int oversample_x, int oversample_y, float *sub_x, float *sub_y, int codepoint) -{ - stbtt_MakeGlyphBitmapSubpixelPrefilter(info, output, out_w, out_h, out_stride, scale_x, scale_y, shift_x, shift_y, oversample_x, oversample_y, sub_x, sub_y, stbtt_FindGlyphIndex(info,codepoint)); -} - -STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint) -{ - stbtt_MakeGlyphBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, shift_x, shift_y, stbtt_FindGlyphIndex(info,codepoint)); -} - -STBTT_DEF unsigned char *stbtt_GetCodepointBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int codepoint, int *width, int *height, int *xoff, int *yoff) -{ - return stbtt_GetCodepointBitmapSubpixel(info, scale_x, scale_y, 0.0f,0.0f, codepoint, width,height,xoff,yoff); -} - -STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int codepoint) -{ - stbtt_MakeCodepointBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, 0.0f,0.0f, codepoint); -} - -////////////////////////////////////////////////////////////////////////////// -// -// bitmap baking -// -// This is SUPER-CRAPPY packing to keep source code small - -static int stbtt_BakeFontBitmap_internal(unsigned char *data, int offset, // font location (use offset=0 for plain .ttf) - float pixel_height, // height of font in pixels - unsigned char *pixels, int pw, int ph, // bitmap to be filled in - int first_char, int num_chars, // characters to bake - stbtt_bakedchar *chardata) -{ - float scale; - int x,y,bottom_y, i; - stbtt_fontinfo f; - f.userdata = NULL; - if (!stbtt_InitFont(&f, data, offset)) - return -1; - STBTT_memset(pixels, 0, pw*ph); // background of 0 around pixels - x=y=1; - bottom_y = 1; - - scale = stbtt_ScaleForPixelHeight(&f, pixel_height); - - for (i=0; i < num_chars; ++i) { - int advance, lsb, x0,y0,x1,y1,gw,gh; - int g = stbtt_FindGlyphIndex(&f, first_char + i); - stbtt_GetGlyphHMetrics(&f, g, &advance, &lsb); - stbtt_GetGlyphBitmapBox(&f, g, scale,scale, &x0,&y0,&x1,&y1); - gw = x1-x0; - gh = y1-y0; - if (x + gw + 1 >= pw) - y = bottom_y, x = 1; // advance to next row - if (y + gh + 1 >= ph) // check if it fits vertically AFTER potentially moving to next row - return -i; - STBTT_assert(x+gw < pw); - STBTT_assert(y+gh < ph); - stbtt_MakeGlyphBitmap(&f, pixels+x+y*pw, gw,gh,pw, scale,scale, g); - chardata[i].x0 = (stbtt_int16) x; - chardata[i].y0 = (stbtt_int16) y; - chardata[i].x1 = (stbtt_int16) (x + gw); - chardata[i].y1 = (stbtt_int16) (y + gh); - chardata[i].xadvance = scale * advance; - chardata[i].xoff = (float) x0; - chardata[i].yoff = (float) y0; - x = x + gw + 1; - if (y+gh+1 > bottom_y) - bottom_y = y+gh+1; - } - return bottom_y; -} - -STBTT_DEF void stbtt_GetBakedQuad(const stbtt_bakedchar *chardata, int pw, int ph, int char_index, float *xpos, float *ypos, stbtt_aligned_quad *q, int opengl_fillrule) -{ - float d3d_bias = opengl_fillrule ? 0 : -0.5f; - float ipw = 1.0f / pw, iph = 1.0f / ph; - const stbtt_bakedchar *b = chardata + char_index; - int round_x = STBTT_ifloor((*xpos + b->xoff) + 0.5f); - int round_y = STBTT_ifloor((*ypos + b->yoff) + 0.5f); - - q->x0 = round_x + d3d_bias; - q->y0 = round_y + d3d_bias; - q->x1 = round_x + b->x1 - b->x0 + d3d_bias; - q->y1 = round_y + b->y1 - b->y0 + d3d_bias; - - q->s0 = b->x0 * ipw; - q->t0 = b->y0 * iph; - q->s1 = b->x1 * ipw; - q->t1 = b->y1 * iph; - - *xpos += b->xadvance; -} - -////////////////////////////////////////////////////////////////////////////// -// -// rectangle packing replacement routines if you don't have stb_rect_pack.h -// - -#ifndef STB_RECT_PACK_VERSION - -typedef int stbrp_coord; - -//////////////////////////////////////////////////////////////////////////////////// -// // -// // -// COMPILER WARNING ?!?!? // -// // -// // -// if you get a compile warning due to these symbols being defined more than // -// once, move #include "stb_rect_pack.h" before #include "stb_truetype.h" // -// // -//////////////////////////////////////////////////////////////////////////////////// - -typedef struct -{ - int width,height; - int x,y,bottom_y; -} stbrp_context; - -typedef struct -{ - unsigned char x; -} stbrp_node; - -struct stbrp_rect -{ - stbrp_coord x,y; - int id,w,h,was_packed; -}; - -static void stbrp_init_target(stbrp_context *con, int pw, int ph, stbrp_node *nodes, int num_nodes) -{ - con->width = pw; - con->height = ph; - con->x = 0; - con->y = 0; - con->bottom_y = 0; - STBTT__NOTUSED(nodes); - STBTT__NOTUSED(num_nodes); -} - -static void stbrp_pack_rects(stbrp_context *con, stbrp_rect *rects, int num_rects) -{ - int i; - for (i=0; i < num_rects; ++i) { - if (con->x + rects[i].w > con->width) { - con->x = 0; - con->y = con->bottom_y; - } - if (con->y + rects[i].h > con->height) - break; - rects[i].x = con->x; - rects[i].y = con->y; - rects[i].was_packed = 1; - con->x += rects[i].w; - if (con->y + rects[i].h > con->bottom_y) - con->bottom_y = con->y + rects[i].h; - } - for ( ; i < num_rects; ++i) - rects[i].was_packed = 0; -} -#endif - -////////////////////////////////////////////////////////////////////////////// -// -// bitmap baking -// -// This is SUPER-AWESOME (tm Ryan Gordon) packing using stb_rect_pack.h. If -// stb_rect_pack.h isn't available, it uses the BakeFontBitmap strategy. - -STBTT_DEF int stbtt_PackBegin(stbtt_pack_context *spc, unsigned char *pixels, int pw, int ph, int stride_in_bytes, int padding, void *alloc_context) -{ - stbrp_context *context = (stbrp_context *) STBTT_malloc(sizeof(*context) ,alloc_context); - int num_nodes = pw - padding; - stbrp_node *nodes = (stbrp_node *) STBTT_malloc(sizeof(*nodes ) * num_nodes,alloc_context); - - if (context == NULL || nodes == NULL) { - if (context != NULL) STBTT_free(context, alloc_context); - if (nodes != NULL) STBTT_free(nodes , alloc_context); - return 0; - } - - spc->user_allocator_context = alloc_context; - spc->width = pw; - spc->height = ph; - spc->pixels = pixels; - spc->pack_info = context; - spc->nodes = nodes; - spc->padding = padding; - spc->stride_in_bytes = stride_in_bytes != 0 ? stride_in_bytes : pw; - spc->h_oversample = 1; - spc->v_oversample = 1; - spc->skip_missing = 0; - - stbrp_init_target(context, pw-padding, ph-padding, nodes, num_nodes); - - if (pixels) - STBTT_memset(pixels, 0, pw*ph); // background of 0 around pixels - - return 1; -} - -STBTT_DEF void stbtt_PackEnd (stbtt_pack_context *spc) -{ - STBTT_free(spc->nodes , spc->user_allocator_context); - STBTT_free(spc->pack_info, spc->user_allocator_context); -} - -STBTT_DEF void stbtt_PackSetOversampling(stbtt_pack_context *spc, unsigned int h_oversample, unsigned int v_oversample) -{ - STBTT_assert(h_oversample <= STBTT_MAX_OVERSAMPLE); - STBTT_assert(v_oversample <= STBTT_MAX_OVERSAMPLE); - if (h_oversample <= STBTT_MAX_OVERSAMPLE) - spc->h_oversample = h_oversample; - if (v_oversample <= STBTT_MAX_OVERSAMPLE) - spc->v_oversample = v_oversample; -} - -STBTT_DEF void stbtt_PackSetSkipMissingCodepoints(stbtt_pack_context *spc, int skip) -{ - spc->skip_missing = skip; -} - -#define STBTT__OVER_MASK (STBTT_MAX_OVERSAMPLE-1) - -static void stbtt__h_prefilter(unsigned char *pixels, int w, int h, int stride_in_bytes, unsigned int kernel_width) -{ - unsigned char buffer[STBTT_MAX_OVERSAMPLE]; - int safe_w = w - kernel_width; - int j; - STBTT_memset(buffer, 0, STBTT_MAX_OVERSAMPLE); // suppress bogus warning from VS2013 -analyze - for (j=0; j < h; ++j) { - int i; - unsigned int total; - STBTT_memset(buffer, 0, kernel_width); - - total = 0; - - // make kernel_width a constant in common cases so compiler can optimize out the divide - switch (kernel_width) { - case 2: - for (i=0; i <= safe_w; ++i) { - total += pixels[i] - buffer[i & STBTT__OVER_MASK]; - buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i]; - pixels[i] = (unsigned char) (total / 2); - } - break; - case 3: - for (i=0; i <= safe_w; ++i) { - total += pixels[i] - buffer[i & STBTT__OVER_MASK]; - buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i]; - pixels[i] = (unsigned char) (total / 3); - } - break; - case 4: - for (i=0; i <= safe_w; ++i) { - total += pixels[i] - buffer[i & STBTT__OVER_MASK]; - buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i]; - pixels[i] = (unsigned char) (total / 4); - } - break; - case 5: - for (i=0; i <= safe_w; ++i) { - total += pixels[i] - buffer[i & STBTT__OVER_MASK]; - buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i]; - pixels[i] = (unsigned char) (total / 5); - } - break; - default: - for (i=0; i <= safe_w; ++i) { - total += pixels[i] - buffer[i & STBTT__OVER_MASK]; - buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i]; - pixels[i] = (unsigned char) (total / kernel_width); - } - break; - } - - for (; i < w; ++i) { - STBTT_assert(pixels[i] == 0); - total -= buffer[i & STBTT__OVER_MASK]; - pixels[i] = (unsigned char) (total / kernel_width); - } - - pixels += stride_in_bytes; - } -} - -static void stbtt__v_prefilter(unsigned char *pixels, int w, int h, int stride_in_bytes, unsigned int kernel_width) -{ - unsigned char buffer[STBTT_MAX_OVERSAMPLE]; - int safe_h = h - kernel_width; - int j; - STBTT_memset(buffer, 0, STBTT_MAX_OVERSAMPLE); // suppress bogus warning from VS2013 -analyze - for (j=0; j < w; ++j) { - int i; - unsigned int total; - STBTT_memset(buffer, 0, kernel_width); - - total = 0; - - // make kernel_width a constant in common cases so compiler can optimize out the divide - switch (kernel_width) { - case 2: - for (i=0; i <= safe_h; ++i) { - total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK]; - buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes]; - pixels[i*stride_in_bytes] = (unsigned char) (total / 2); - } - break; - case 3: - for (i=0; i <= safe_h; ++i) { - total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK]; - buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes]; - pixels[i*stride_in_bytes] = (unsigned char) (total / 3); - } - break; - case 4: - for (i=0; i <= safe_h; ++i) { - total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK]; - buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes]; - pixels[i*stride_in_bytes] = (unsigned char) (total / 4); - } - break; - case 5: - for (i=0; i <= safe_h; ++i) { - total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK]; - buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes]; - pixels[i*stride_in_bytes] = (unsigned char) (total / 5); - } - break; - default: - for (i=0; i <= safe_h; ++i) { - total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK]; - buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes]; - pixels[i*stride_in_bytes] = (unsigned char) (total / kernel_width); - } - break; - } - - for (; i < h; ++i) { - STBTT_assert(pixels[i*stride_in_bytes] == 0); - total -= buffer[i & STBTT__OVER_MASK]; - pixels[i*stride_in_bytes] = (unsigned char) (total / kernel_width); - } - - pixels += 1; - } -} - -static float stbtt__oversample_shift(int oversample) -{ - if (!oversample) - return 0.0f; - - // The prefilter is a box filter of width "oversample", - // which shifts phase by (oversample - 1)/2 pixels in - // oversampled space. We want to shift in the opposite - // direction to counter this. - return (float)-(oversample - 1) / (2.0f * (float)oversample); -} - -// rects array must be big enough to accommodate all characters in the given ranges -STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects) -{ - int i,j,k; - - k=0; - for (i=0; i < num_ranges; ++i) { - float fh = ranges[i].font_size; - float scale = fh > 0 ? stbtt_ScaleForPixelHeight(info, fh) : stbtt_ScaleForMappingEmToPixels(info, -fh); - ranges[i].h_oversample = (unsigned char) spc->h_oversample; - ranges[i].v_oversample = (unsigned char) spc->v_oversample; - for (j=0; j < ranges[i].num_chars; ++j) { - int x0,y0,x1,y1; - int codepoint = ranges[i].array_of_unicode_codepoints == NULL ? ranges[i].first_unicode_codepoint_in_range + j : ranges[i].array_of_unicode_codepoints[j]; - int glyph = stbtt_FindGlyphIndex(info, codepoint); - if (glyph == 0 && spc->skip_missing) { - rects[k].w = rects[k].h = 0; - } else { - stbtt_GetGlyphBitmapBoxSubpixel(info,glyph, - scale * spc->h_oversample, - scale * spc->v_oversample, - 0,0, - &x0,&y0,&x1,&y1); - rects[k].w = (stbrp_coord) (x1-x0 + spc->padding + spc->h_oversample-1); - rects[k].h = (stbrp_coord) (y1-y0 + spc->padding + spc->v_oversample-1); - } - ++k; - } - } - - return k; -} - -STBTT_DEF void stbtt_MakeGlyphBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int prefilter_x, int prefilter_y, float *sub_x, float *sub_y, int glyph) -{ - stbtt_MakeGlyphBitmapSubpixel(info, - output, - out_w - (prefilter_x - 1), - out_h - (prefilter_y - 1), - out_stride, - scale_x, - scale_y, - shift_x, - shift_y, - glyph); - - if (prefilter_x > 1) - stbtt__h_prefilter(output, out_w, out_h, out_stride, prefilter_x); - - if (prefilter_y > 1) - stbtt__v_prefilter(output, out_w, out_h, out_stride, prefilter_y); - - *sub_x = stbtt__oversample_shift(prefilter_x); - *sub_y = stbtt__oversample_shift(prefilter_y); -} - -// rects array must be big enough to accommodate all characters in the given ranges -STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects) -{ - int i,j,k, return_value = 1; - - // save current values - int old_h_over = spc->h_oversample; - int old_v_over = spc->v_oversample; - - k = 0; - for (i=0; i < num_ranges; ++i) { - float fh = ranges[i].font_size; - float scale = fh > 0 ? stbtt_ScaleForPixelHeight(info, fh) : stbtt_ScaleForMappingEmToPixels(info, -fh); - float recip_h,recip_v,sub_x,sub_y; - spc->h_oversample = ranges[i].h_oversample; - spc->v_oversample = ranges[i].v_oversample; - recip_h = 1.0f / spc->h_oversample; - recip_v = 1.0f / spc->v_oversample; - sub_x = stbtt__oversample_shift(spc->h_oversample); - sub_y = stbtt__oversample_shift(spc->v_oversample); - for (j=0; j < ranges[i].num_chars; ++j) { - stbrp_rect *r = &rects[k]; - if (r->was_packed && r->w != 0 && r->h != 0) { - stbtt_packedchar *bc = &ranges[i].chardata_for_range[j]; - int advance, lsb, x0,y0,x1,y1; - int codepoint = ranges[i].array_of_unicode_codepoints == NULL ? ranges[i].first_unicode_codepoint_in_range + j : ranges[i].array_of_unicode_codepoints[j]; - int glyph = stbtt_FindGlyphIndex(info, codepoint); - stbrp_coord pad = (stbrp_coord) spc->padding; - - // pad on left and top - r->x += pad; - r->y += pad; - r->w -= pad; - r->h -= pad; - stbtt_GetGlyphHMetrics(info, glyph, &advance, &lsb); - stbtt_GetGlyphBitmapBox(info, glyph, - scale * spc->h_oversample, - scale * spc->v_oversample, - &x0,&y0,&x1,&y1); - stbtt_MakeGlyphBitmapSubpixel(info, - spc->pixels + r->x + r->y*spc->stride_in_bytes, - r->w - spc->h_oversample+1, - r->h - spc->v_oversample+1, - spc->stride_in_bytes, - scale * spc->h_oversample, - scale * spc->v_oversample, - 0,0, - glyph); - - if (spc->h_oversample > 1) - stbtt__h_prefilter(spc->pixels + r->x + r->y*spc->stride_in_bytes, - r->w, r->h, spc->stride_in_bytes, - spc->h_oversample); - - if (spc->v_oversample > 1) - stbtt__v_prefilter(spc->pixels + r->x + r->y*spc->stride_in_bytes, - r->w, r->h, spc->stride_in_bytes, - spc->v_oversample); - - bc->x0 = (stbtt_int16) r->x; - bc->y0 = (stbtt_int16) r->y; - bc->x1 = (stbtt_int16) (r->x + r->w); - bc->y1 = (stbtt_int16) (r->y + r->h); - bc->xadvance = scale * advance; - bc->xoff = (float) x0 * recip_h + sub_x; - bc->yoff = (float) y0 * recip_v + sub_y; - bc->xoff2 = (x0 + r->w) * recip_h + sub_x; - bc->yoff2 = (y0 + r->h) * recip_v + sub_y; - } else { - return_value = 0; // if any fail, report failure - } - - ++k; - } - } - - // restore original values - spc->h_oversample = old_h_over; - spc->v_oversample = old_v_over; - - return return_value; -} - -STBTT_DEF void stbtt_PackFontRangesPackRects(stbtt_pack_context *spc, stbrp_rect *rects, int num_rects) -{ - stbrp_pack_rects((stbrp_context *) spc->pack_info, rects, num_rects); -} - -STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, stbtt_pack_range *ranges, int num_ranges) -{ - stbtt_fontinfo info; - int i,j,n, return_value; // [DEAR IMGUI] removed = 1 - //stbrp_context *context = (stbrp_context *) spc->pack_info; - stbrp_rect *rects; - - // flag all characters as NOT packed - for (i=0; i < num_ranges; ++i) - for (j=0; j < ranges[i].num_chars; ++j) - ranges[i].chardata_for_range[j].x0 = - ranges[i].chardata_for_range[j].y0 = - ranges[i].chardata_for_range[j].x1 = - ranges[i].chardata_for_range[j].y1 = 0; - - n = 0; - for (i=0; i < num_ranges; ++i) - n += ranges[i].num_chars; - - rects = (stbrp_rect *) STBTT_malloc(sizeof(*rects) * n, spc->user_allocator_context); - if (rects == NULL) - return 0; - - info.userdata = spc->user_allocator_context; - stbtt_InitFont(&info, fontdata, stbtt_GetFontOffsetForIndex(fontdata,font_index)); - - n = stbtt_PackFontRangesGatherRects(spc, &info, ranges, num_ranges, rects); - - stbtt_PackFontRangesPackRects(spc, rects, n); - - return_value = stbtt_PackFontRangesRenderIntoRects(spc, &info, ranges, num_ranges, rects); - - STBTT_free(rects, spc->user_allocator_context); - return return_value; -} - -STBTT_DEF int stbtt_PackFontRange(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, float font_size, - int first_unicode_codepoint_in_range, int num_chars_in_range, stbtt_packedchar *chardata_for_range) -{ - stbtt_pack_range range; - range.first_unicode_codepoint_in_range = first_unicode_codepoint_in_range; - range.array_of_unicode_codepoints = NULL; - range.num_chars = num_chars_in_range; - range.chardata_for_range = chardata_for_range; - range.font_size = font_size; - return stbtt_PackFontRanges(spc, fontdata, font_index, &range, 1); -} - -STBTT_DEF void stbtt_GetScaledFontVMetrics(const unsigned char *fontdata, int index, float size, float *ascent, float *descent, float *lineGap) -{ - int i_ascent, i_descent, i_lineGap; - float scale; - stbtt_fontinfo info; - stbtt_InitFont(&info, fontdata, stbtt_GetFontOffsetForIndex(fontdata, index)); - scale = size > 0 ? stbtt_ScaleForPixelHeight(&info, size) : stbtt_ScaleForMappingEmToPixels(&info, -size); - stbtt_GetFontVMetrics(&info, &i_ascent, &i_descent, &i_lineGap); - *ascent = (float) i_ascent * scale; - *descent = (float) i_descent * scale; - *lineGap = (float) i_lineGap * scale; -} - -STBTT_DEF void stbtt_GetPackedQuad(const stbtt_packedchar *chardata, int pw, int ph, int char_index, float *xpos, float *ypos, stbtt_aligned_quad *q, int align_to_integer) -{ - float ipw = 1.0f / pw, iph = 1.0f / ph; - const stbtt_packedchar *b = chardata + char_index; - - if (align_to_integer) { - float x = (float) STBTT_ifloor((*xpos + b->xoff) + 0.5f); - float y = (float) STBTT_ifloor((*ypos + b->yoff) + 0.5f); - q->x0 = x; - q->y0 = y; - q->x1 = x + b->xoff2 - b->xoff; - q->y1 = y + b->yoff2 - b->yoff; - } else { - q->x0 = *xpos + b->xoff; - q->y0 = *ypos + b->yoff; - q->x1 = *xpos + b->xoff2; - q->y1 = *ypos + b->yoff2; - } - - q->s0 = b->x0 * ipw; - q->t0 = b->y0 * iph; - q->s1 = b->x1 * ipw; - q->t1 = b->y1 * iph; - - *xpos += b->xadvance; -} - -////////////////////////////////////////////////////////////////////////////// -// -// sdf computation -// - -#define STBTT_min(a,b) ((a) < (b) ? (a) : (b)) -#define STBTT_max(a,b) ((a) < (b) ? (b) : (a)) - -static int stbtt__ray_intersect_bezier(float orig[2], float ray[2], float q0[2], float q1[2], float q2[2], float hits[2][2]) -{ - float q0perp = q0[1]*ray[0] - q0[0]*ray[1]; - float q1perp = q1[1]*ray[0] - q1[0]*ray[1]; - float q2perp = q2[1]*ray[0] - q2[0]*ray[1]; - float roperp = orig[1]*ray[0] - orig[0]*ray[1]; - - float a = q0perp - 2*q1perp + q2perp; - float b = q1perp - q0perp; - float c = q0perp - roperp; - - float s0 = 0., s1 = 0.; - int num_s = 0; - - if (a != 0.0) { - float discr = b*b - a*c; - if (discr > 0.0) { - float rcpna = -1 / a; - float d = (float) STBTT_sqrt(discr); - s0 = (b+d) * rcpna; - s1 = (b-d) * rcpna; - if (s0 >= 0.0 && s0 <= 1.0) - num_s = 1; - if (d > 0.0 && s1 >= 0.0 && s1 <= 1.0) { - if (num_s == 0) s0 = s1; - ++num_s; - } - } - } else { - // 2*b*s + c = 0 - // s = -c / (2*b) - s0 = c / (-2 * b); - if (s0 >= 0.0 && s0 <= 1.0) - num_s = 1; - } - - if (num_s == 0) - return 0; - else { - float rcp_len2 = 1 / (ray[0]*ray[0] + ray[1]*ray[1]); - float rayn_x = ray[0] * rcp_len2, rayn_y = ray[1] * rcp_len2; - - float q0d = q0[0]*rayn_x + q0[1]*rayn_y; - float q1d = q1[0]*rayn_x + q1[1]*rayn_y; - float q2d = q2[0]*rayn_x + q2[1]*rayn_y; - float rod = orig[0]*rayn_x + orig[1]*rayn_y; - - float q10d = q1d - q0d; - float q20d = q2d - q0d; - float q0rd = q0d - rod; - - hits[0][0] = q0rd + s0*(2.0f - 2.0f*s0)*q10d + s0*s0*q20d; - hits[0][1] = a*s0+b; - - if (num_s > 1) { - hits[1][0] = q0rd + s1*(2.0f - 2.0f*s1)*q10d + s1*s1*q20d; - hits[1][1] = a*s1+b; - return 2; - } else { - return 1; - } - } -} - -static int equal(float *a, float *b) -{ - return (a[0] == b[0] && a[1] == b[1]); -} - -static int stbtt__compute_crossings_x(float x, float y, int nverts, stbtt_vertex *verts) -{ - int i; - float orig[2], ray[2] = { 1, 0 }; - float y_frac; - int winding = 0; - - orig[0] = x; - //orig[1] = y; // [DEAR IMGUI] commmented double assignment - - // make sure y never passes through a vertex of the shape - y_frac = (float) STBTT_fmod(y, 1.0f); - if (y_frac < 0.01f) - y += 0.01f; - else if (y_frac > 0.99f) - y -= 0.01f; - orig[1] = y; - - // test a ray from (-infinity,y) to (x,y) - for (i=0; i < nverts; ++i) { - if (verts[i].type == STBTT_vline) { - int x0 = (int) verts[i-1].x, y0 = (int) verts[i-1].y; - int x1 = (int) verts[i ].x, y1 = (int) verts[i ].y; - if (y > STBTT_min(y0,y1) && y < STBTT_max(y0,y1) && x > STBTT_min(x0,x1)) { - float x_inter = (y - y0) / (y1 - y0) * (x1-x0) + x0; - if (x_inter < x) - winding += (y0 < y1) ? 1 : -1; - } - } - if (verts[i].type == STBTT_vcurve) { - int x0 = (int) verts[i-1].x , y0 = (int) verts[i-1].y ; - int x1 = (int) verts[i ].cx, y1 = (int) verts[i ].cy; - int x2 = (int) verts[i ].x , y2 = (int) verts[i ].y ; - int ax = STBTT_min(x0,STBTT_min(x1,x2)), ay = STBTT_min(y0,STBTT_min(y1,y2)); - int by = STBTT_max(y0,STBTT_max(y1,y2)); - if (y > ay && y < by && x > ax) { - float q0[2],q1[2],q2[2]; - float hits[2][2]; - q0[0] = (float)x0; - q0[1] = (float)y0; - q1[0] = (float)x1; - q1[1] = (float)y1; - q2[0] = (float)x2; - q2[1] = (float)y2; - if (equal(q0,q1) || equal(q1,q2)) { - x0 = (int)verts[i-1].x; - y0 = (int)verts[i-1].y; - x1 = (int)verts[i ].x; - y1 = (int)verts[i ].y; - if (y > STBTT_min(y0,y1) && y < STBTT_max(y0,y1) && x > STBTT_min(x0,x1)) { - float x_inter = (y - y0) / (y1 - y0) * (x1-x0) + x0; - if (x_inter < x) - winding += (y0 < y1) ? 1 : -1; - } - } else { - int num_hits = stbtt__ray_intersect_bezier(orig, ray, q0, q1, q2, hits); - if (num_hits >= 1) - if (hits[0][0] < 0) - winding += (hits[0][1] < 0 ? -1 : 1); - if (num_hits >= 2) - if (hits[1][0] < 0) - winding += (hits[1][1] < 0 ? -1 : 1); - } - } - } - } - return winding; -} - -static float stbtt__cuberoot( float x ) -{ - if (x<0) - return -(float) STBTT_pow(-x,1.0f/3.0f); - else - return (float) STBTT_pow( x,1.0f/3.0f); -} - -// x^3 + c*x^2 + b*x + a = 0 -static int stbtt__solve_cubic(float a, float b, float c, float* r) -{ - float s = -a / 3; - float p = b - a*a / 3; - float q = a * (2*a*a - 9*b) / 27 + c; - float p3 = p*p*p; - float d = q*q + 4*p3 / 27; - if (d >= 0) { - float z = (float) STBTT_sqrt(d); - float u = (-q + z) / 2; - float v = (-q - z) / 2; - u = stbtt__cuberoot(u); - v = stbtt__cuberoot(v); - r[0] = s + u + v; - return 1; - } else { - float u = (float) STBTT_sqrt(-p/3); - float v = (float) STBTT_acos(-STBTT_sqrt(-27/p3) * q / 2) / 3; // p3 must be negative, since d is negative - float m = (float) STBTT_cos(v); - float n = (float) STBTT_cos(v-3.141592/2)*1.732050808f; - r[0] = s + u * 2 * m; - r[1] = s - u * (m + n); - r[2] = s - u * (m - n); - - //STBTT_assert( STBTT_fabs(((r[0]+a)*r[0]+b)*r[0]+c) < 0.05f); // these asserts may not be safe at all scales, though they're in bezier t parameter units so maybe? - //STBTT_assert( STBTT_fabs(((r[1]+a)*r[1]+b)*r[1]+c) < 0.05f); - //STBTT_assert( STBTT_fabs(((r[2]+a)*r[2]+b)*r[2]+c) < 0.05f); - return 3; - } -} - -STBTT_DEF unsigned char * stbtt_GetGlyphSDF(const stbtt_fontinfo *info, float scale, int glyph, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff) -{ - float scale_x = scale, scale_y = scale; - int ix0,iy0,ix1,iy1; - int w,h; - unsigned char *data; - - // if one scale is 0, use same scale for both - if (scale_x == 0) scale_x = scale_y; - if (scale_y == 0) { - if (scale_x == 0) return NULL; // if both scales are 0, return NULL - scale_y = scale_x; - } - - stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale, scale, 0.0f,0.0f, &ix0,&iy0,&ix1,&iy1); - - // if empty, return NULL - if (ix0 == ix1 || iy0 == iy1) - return NULL; - - ix0 -= padding; - iy0 -= padding; - ix1 += padding; - iy1 += padding; - - w = (ix1 - ix0); - h = (iy1 - iy0); - - if (width ) *width = w; - if (height) *height = h; - if (xoff ) *xoff = ix0; - if (yoff ) *yoff = iy0; - - // invert for y-downwards bitmaps - scale_y = -scale_y; - - { - int x,y,i,j; - float *precompute; - stbtt_vertex *verts; - int num_verts = stbtt_GetGlyphShape(info, glyph, &verts); - data = (unsigned char *) STBTT_malloc(w * h, info->userdata); - precompute = (float *) STBTT_malloc(num_verts * sizeof(float), info->userdata); - - for (i=0,j=num_verts-1; i < num_verts; j=i++) { - if (verts[i].type == STBTT_vline) { - float x0 = verts[i].x*scale_x, y0 = verts[i].y*scale_y; - float x1 = verts[j].x*scale_x, y1 = verts[j].y*scale_y; - float dist = (float) STBTT_sqrt((x1-x0)*(x1-x0) + (y1-y0)*(y1-y0)); - precompute[i] = (dist == 0) ? 0.0f : 1.0f / dist; - } else if (verts[i].type == STBTT_vcurve) { - float x2 = verts[j].x *scale_x, y2 = verts[j].y *scale_y; - float x1 = verts[i].cx*scale_x, y1 = verts[i].cy*scale_y; - float x0 = verts[i].x *scale_x, y0 = verts[i].y *scale_y; - float bx = x0 - 2*x1 + x2, by = y0 - 2*y1 + y2; - float len2 = bx*bx + by*by; - if (len2 != 0.0f) - precompute[i] = 1.0f / (bx*bx + by*by); - else - precompute[i] = 0.0f; - } else - precompute[i] = 0.0f; - } - - for (y=iy0; y < iy1; ++y) { - for (x=ix0; x < ix1; ++x) { - float val; - float min_dist = 999999.0f; - float sx = (float) x + 0.5f; - float sy = (float) y + 0.5f; - float x_gspace = (sx / scale_x); - float y_gspace = (sy / scale_y); - - int winding = stbtt__compute_crossings_x(x_gspace, y_gspace, num_verts, verts); // @OPTIMIZE: this could just be a rasterization, but needs to be line vs. non-tesselated curves so a new path - - for (i=0; i < num_verts; ++i) { - float x0 = verts[i].x*scale_x, y0 = verts[i].y*scale_y; - - // check against every point here rather than inside line/curve primitives -- @TODO: wrong if multiple 'moves' in a row produce a garbage point, and given culling, probably more efficient to do within line/curve - float dist2 = (x0-sx)*(x0-sx) + (y0-sy)*(y0-sy); - if (dist2 < min_dist*min_dist) - min_dist = (float) STBTT_sqrt(dist2); - - if (verts[i].type == STBTT_vline) { - float x1 = verts[i-1].x*scale_x, y1 = verts[i-1].y*scale_y; - - // coarse culling against bbox - //if (sx > STBTT_min(x0,x1)-min_dist && sx < STBTT_max(x0,x1)+min_dist && - // sy > STBTT_min(y0,y1)-min_dist && sy < STBTT_max(y0,y1)+min_dist) - float dist = (float) STBTT_fabs((x1-x0)*(y0-sy) - (y1-y0)*(x0-sx)) * precompute[i]; - STBTT_assert(i != 0); - if (dist < min_dist) { - // check position along line - // x' = x0 + t*(x1-x0), y' = y0 + t*(y1-y0) - // minimize (x'-sx)*(x'-sx)+(y'-sy)*(y'-sy) - float dx = x1-x0, dy = y1-y0; - float px = x0-sx, py = y0-sy; - // minimize (px+t*dx)^2 + (py+t*dy)^2 = px*px + 2*px*dx*t + t^2*dx*dx + py*py + 2*py*dy*t + t^2*dy*dy - // derivative: 2*px*dx + 2*py*dy + (2*dx*dx+2*dy*dy)*t, set to 0 and solve - float t = -(px*dx + py*dy) / (dx*dx + dy*dy); - if (t >= 0.0f && t <= 1.0f) - min_dist = dist; - } - } else if (verts[i].type == STBTT_vcurve) { - float x2 = verts[i-1].x *scale_x, y2 = verts[i-1].y *scale_y; - float x1 = verts[i ].cx*scale_x, y1 = verts[i ].cy*scale_y; - float box_x0 = STBTT_min(STBTT_min(x0,x1),x2); - float box_y0 = STBTT_min(STBTT_min(y0,y1),y2); - float box_x1 = STBTT_max(STBTT_max(x0,x1),x2); - float box_y1 = STBTT_max(STBTT_max(y0,y1),y2); - // coarse culling against bbox to avoid computing cubic unnecessarily - if (sx > box_x0-min_dist && sx < box_x1+min_dist && sy > box_y0-min_dist && sy < box_y1+min_dist) { - int num=0; - float ax = x1-x0, ay = y1-y0; - float bx = x0 - 2*x1 + x2, by = y0 - 2*y1 + y2; - float mx = x0 - sx, my = y0 - sy; - float res[3],px,py,t,it; - float a_inv = precompute[i]; - if (a_inv == 0.0) { // if a_inv is 0, it's 2nd degree so use quadratic formula - float a = 3*(ax*bx + ay*by); - float b = 2*(ax*ax + ay*ay) + (mx*bx+my*by); - float c = mx*ax+my*ay; - if (a == 0.0) { // if a is 0, it's linear - if (b != 0.0) { - res[num++] = -c/b; - } - } else { - float discriminant = b*b - 4*a*c; - if (discriminant < 0) - num = 0; - else { - float root = (float) STBTT_sqrt(discriminant); - res[0] = (-b - root)/(2*a); - res[1] = (-b + root)/(2*a); - num = 2; // don't bother distinguishing 1-solution case, as code below will still work - } - } - } else { - float b = 3*(ax*bx + ay*by) * a_inv; // could precompute this as it doesn't depend on sample point - float c = (2*(ax*ax + ay*ay) + (mx*bx+my*by)) * a_inv; - float d = (mx*ax+my*ay) * a_inv; - num = stbtt__solve_cubic(b, c, d, res); - } - if (num >= 1 && res[0] >= 0.0f && res[0] <= 1.0f) { - t = res[0], it = 1.0f - t; - px = it*it*x0 + 2*t*it*x1 + t*t*x2; - py = it*it*y0 + 2*t*it*y1 + t*t*y2; - dist2 = (px-sx)*(px-sx) + (py-sy)*(py-sy); - if (dist2 < min_dist * min_dist) - min_dist = (float) STBTT_sqrt(dist2); - } - if (num >= 2 && res[1] >= 0.0f && res[1] <= 1.0f) { - t = res[1], it = 1.0f - t; - px = it*it*x0 + 2*t*it*x1 + t*t*x2; - py = it*it*y0 + 2*t*it*y1 + t*t*y2; - dist2 = (px-sx)*(px-sx) + (py-sy)*(py-sy); - if (dist2 < min_dist * min_dist) - min_dist = (float) STBTT_sqrt(dist2); - } - if (num >= 3 && res[2] >= 0.0f && res[2] <= 1.0f) { - t = res[2], it = 1.0f - t; - px = it*it*x0 + 2*t*it*x1 + t*t*x2; - py = it*it*y0 + 2*t*it*y1 + t*t*y2; - dist2 = (px-sx)*(px-sx) + (py-sy)*(py-sy); - if (dist2 < min_dist * min_dist) - min_dist = (float) STBTT_sqrt(dist2); - } - } - } - } - if (winding == 0) - min_dist = -min_dist; // if outside the shape, value is negative - val = onedge_value + pixel_dist_scale * min_dist; - if (val < 0) - val = 0; - else if (val > 255) - val = 255; - data[(y-iy0)*w+(x-ix0)] = (unsigned char) val; - } - } - STBTT_free(precompute, info->userdata); - STBTT_free(verts, info->userdata); - } - return data; -} - -STBTT_DEF unsigned char * stbtt_GetCodepointSDF(const stbtt_fontinfo *info, float scale, int codepoint, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff) -{ - return stbtt_GetGlyphSDF(info, scale, stbtt_FindGlyphIndex(info, codepoint), padding, onedge_value, pixel_dist_scale, width, height, xoff, yoff); -} - -STBTT_DEF void stbtt_FreeSDF(unsigned char *bitmap, void *userdata) -{ - STBTT_free(bitmap, userdata); -} - -////////////////////////////////////////////////////////////////////////////// -// -// font name matching -- recommended not to use this -// - -// check if a utf8 string contains a prefix which is the utf16 string; if so return length of matching utf8 string -static stbtt_int32 stbtt__CompareUTF8toUTF16_bigendian_prefix(stbtt_uint8 *s1, stbtt_int32 len1, stbtt_uint8 *s2, stbtt_int32 len2) -{ - stbtt_int32 i=0; - - // convert utf16 to utf8 and compare the results while converting - while (len2) { - stbtt_uint16 ch = s2[0]*256 + s2[1]; - if (ch < 0x80) { - if (i >= len1) return -1; - if (s1[i++] != ch) return -1; - } else if (ch < 0x800) { - if (i+1 >= len1) return -1; - if (s1[i++] != 0xc0 + (ch >> 6)) return -1; - if (s1[i++] != 0x80 + (ch & 0x3f)) return -1; - } else if (ch >= 0xd800 && ch < 0xdc00) { - stbtt_uint32 c; - stbtt_uint16 ch2 = s2[2]*256 + s2[3]; - if (i+3 >= len1) return -1; - c = ((ch - 0xd800) << 10) + (ch2 - 0xdc00) + 0x10000; - if (s1[i++] != 0xf0 + (c >> 18)) return -1; - if (s1[i++] != 0x80 + ((c >> 12) & 0x3f)) return -1; - if (s1[i++] != 0x80 + ((c >> 6) & 0x3f)) return -1; - if (s1[i++] != 0x80 + ((c ) & 0x3f)) return -1; - s2 += 2; // plus another 2 below - len2 -= 2; - } else if (ch >= 0xdc00 && ch < 0xe000) { - return -1; - } else { - if (i+2 >= len1) return -1; - if (s1[i++] != 0xe0 + (ch >> 12)) return -1; - if (s1[i++] != 0x80 + ((ch >> 6) & 0x3f)) return -1; - if (s1[i++] != 0x80 + ((ch ) & 0x3f)) return -1; - } - s2 += 2; - len2 -= 2; - } - return i; -} - -static int stbtt_CompareUTF8toUTF16_bigendian_internal(char *s1, int len1, char *s2, int len2) -{ - return len1 == stbtt__CompareUTF8toUTF16_bigendian_prefix((stbtt_uint8*) s1, len1, (stbtt_uint8*) s2, len2); -} - -// returns results in whatever encoding you request... but note that 2-byte encodings -// will be BIG-ENDIAN... use stbtt_CompareUTF8toUTF16_bigendian() to compare -STBTT_DEF const char *stbtt_GetFontNameString(const stbtt_fontinfo *font, int *length, int platformID, int encodingID, int languageID, int nameID) -{ - stbtt_int32 i,count,stringOffset; - stbtt_uint8 *fc = font->data; - stbtt_uint32 offset = font->fontstart; - stbtt_uint32 nm = stbtt__find_table(fc, offset, "name"); - if (!nm) return NULL; - - count = ttUSHORT(fc+nm+2); - stringOffset = nm + ttUSHORT(fc+nm+4); - for (i=0; i < count; ++i) { - stbtt_uint32 loc = nm + 6 + 12 * i; - if (platformID == ttUSHORT(fc+loc+0) && encodingID == ttUSHORT(fc+loc+2) - && languageID == ttUSHORT(fc+loc+4) && nameID == ttUSHORT(fc+loc+6)) { - *length = ttUSHORT(fc+loc+8); - return (const char *) (fc+stringOffset+ttUSHORT(fc+loc+10)); - } - } - return NULL; -} - -static int stbtt__matchpair(stbtt_uint8 *fc, stbtt_uint32 nm, stbtt_uint8 *name, stbtt_int32 nlen, stbtt_int32 target_id, stbtt_int32 next_id) -{ - stbtt_int32 i; - stbtt_int32 count = ttUSHORT(fc+nm+2); - stbtt_int32 stringOffset = nm + ttUSHORT(fc+nm+4); - - for (i=0; i < count; ++i) { - stbtt_uint32 loc = nm + 6 + 12 * i; - stbtt_int32 id = ttUSHORT(fc+loc+6); - if (id == target_id) { - // find the encoding - stbtt_int32 platform = ttUSHORT(fc+loc+0), encoding = ttUSHORT(fc+loc+2), language = ttUSHORT(fc+loc+4); - - // is this a Unicode encoding? - if (platform == 0 || (platform == 3 && encoding == 1) || (platform == 3 && encoding == 10)) { - stbtt_int32 slen = ttUSHORT(fc+loc+8); - stbtt_int32 off = ttUSHORT(fc+loc+10); - - // check if there's a prefix match - stbtt_int32 matchlen = stbtt__CompareUTF8toUTF16_bigendian_prefix(name, nlen, fc+stringOffset+off,slen); - if (matchlen >= 0) { - // check for target_id+1 immediately following, with same encoding & language - if (i+1 < count && ttUSHORT(fc+loc+12+6) == next_id && ttUSHORT(fc+loc+12) == platform && ttUSHORT(fc+loc+12+2) == encoding && ttUSHORT(fc+loc+12+4) == language) { - slen = ttUSHORT(fc+loc+12+8); - off = ttUSHORT(fc+loc+12+10); - if (slen == 0) { - if (matchlen == nlen) - return 1; - } else if (matchlen < nlen && name[matchlen] == ' ') { - ++matchlen; - if (stbtt_CompareUTF8toUTF16_bigendian_internal((char*) (name+matchlen), nlen-matchlen, (char*)(fc+stringOffset+off),slen)) - return 1; - } - } else { - // if nothing immediately following - if (matchlen == nlen) - return 1; - } - } - } - - // @TODO handle other encodings - } - } - return 0; -} - -static int stbtt__matches(stbtt_uint8 *fc, stbtt_uint32 offset, stbtt_uint8 *name, stbtt_int32 flags) -{ - stbtt_int32 nlen = (stbtt_int32) STBTT_strlen((char *) name); - stbtt_uint32 nm,hd; - if (!stbtt__isfont(fc+offset)) return 0; - - // check italics/bold/underline flags in macStyle... - if (flags) { - hd = stbtt__find_table(fc, offset, "head"); - if ((ttUSHORT(fc+hd+44) & 7) != (flags & 7)) return 0; - } - - nm = stbtt__find_table(fc, offset, "name"); - if (!nm) return 0; - - if (flags) { - // if we checked the macStyle flags, then just check the family and ignore the subfamily - if (stbtt__matchpair(fc, nm, name, nlen, 16, -1)) return 1; - if (stbtt__matchpair(fc, nm, name, nlen, 1, -1)) return 1; - if (stbtt__matchpair(fc, nm, name, nlen, 3, -1)) return 1; - } else { - if (stbtt__matchpair(fc, nm, name, nlen, 16, 17)) return 1; - if (stbtt__matchpair(fc, nm, name, nlen, 1, 2)) return 1; - if (stbtt__matchpair(fc, nm, name, nlen, 3, -1)) return 1; - } - - return 0; -} - -static int stbtt_FindMatchingFont_internal(unsigned char *font_collection, char *name_utf8, stbtt_int32 flags) -{ - stbtt_int32 i; - for (i=0;;++i) { - stbtt_int32 off = stbtt_GetFontOffsetForIndex(font_collection, i); - if (off < 0) return off; - if (stbtt__matches((stbtt_uint8 *) font_collection, off, (stbtt_uint8*) name_utf8, flags)) - return off; - } -} - -#if defined(__GNUC__) || defined(__clang__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wcast-qual" -#endif - -STBTT_DEF int stbtt_BakeFontBitmap(const unsigned char *data, int offset, - float pixel_height, unsigned char *pixels, int pw, int ph, - int first_char, int num_chars, stbtt_bakedchar *chardata) -{ - return stbtt_BakeFontBitmap_internal((unsigned char *) data, offset, pixel_height, pixels, pw, ph, first_char, num_chars, chardata); -} - -STBTT_DEF int stbtt_GetFontOffsetForIndex(const unsigned char *data, int index) -{ - return stbtt_GetFontOffsetForIndex_internal((unsigned char *) data, index); -} - -STBTT_DEF int stbtt_GetNumberOfFonts(const unsigned char *data) -{ - return stbtt_GetNumberOfFonts_internal((unsigned char *) data); -} - -STBTT_DEF int stbtt_InitFont(stbtt_fontinfo *info, const unsigned char *data, int offset) -{ - return stbtt_InitFont_internal(info, (unsigned char *) data, offset); -} - -STBTT_DEF int stbtt_FindMatchingFont(const unsigned char *fontdata, const char *name, int flags) -{ - return stbtt_FindMatchingFont_internal((unsigned char *) fontdata, (char *) name, flags); -} - -STBTT_DEF int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len1, const char *s2, int len2) -{ - return stbtt_CompareUTF8toUTF16_bigendian_internal((char *) s1, len1, (char *) s2, len2); -} - -#if defined(__GNUC__) || defined(__clang__) -#pragma GCC diagnostic pop -#endif - -#endif // STB_TRUETYPE_IMPLEMENTATION - - -// FULL VERSION HISTORY -// -// 1.19 (2018-02-11) OpenType GPOS kerning (horizontal only), STBTT_fmod -// 1.18 (2018-01-29) add missing function -// 1.17 (2017-07-23) make more arguments const; doc fix -// 1.16 (2017-07-12) SDF support -// 1.15 (2017-03-03) make more arguments const -// 1.14 (2017-01-16) num-fonts-in-TTC function -// 1.13 (2017-01-02) support OpenType fonts, certain Apple fonts -// 1.12 (2016-10-25) suppress warnings about casting away const with -Wcast-qual -// 1.11 (2016-04-02) fix unused-variable warning -// 1.10 (2016-04-02) allow user-defined fabs() replacement -// fix memory leak if fontsize=0.0 -// fix warning from duplicate typedef -// 1.09 (2016-01-16) warning fix; avoid crash on outofmem; use alloc userdata for PackFontRanges -// 1.08 (2015-09-13) document stbtt_Rasterize(); fixes for vertical & horizontal edges -// 1.07 (2015-08-01) allow PackFontRanges to accept arrays of sparse codepoints; -// allow PackFontRanges to pack and render in separate phases; -// fix stbtt_GetFontOFfsetForIndex (never worked for non-0 input?); -// fixed an assert() bug in the new rasterizer -// replace assert() with STBTT_assert() in new rasterizer -// 1.06 (2015-07-14) performance improvements (~35% faster on x86 and x64 on test machine) -// also more precise AA rasterizer, except if shapes overlap -// remove need for STBTT_sort -// 1.05 (2015-04-15) fix misplaced definitions for STBTT_STATIC -// 1.04 (2015-04-15) typo in example -// 1.03 (2015-04-12) STBTT_STATIC, fix memory leak in new packing, various fixes -// 1.02 (2014-12-10) fix various warnings & compile issues w/ stb_rect_pack, C++ -// 1.01 (2014-12-08) fix subpixel position when oversampling to exactly match -// non-oversampled; STBTT_POINT_SIZE for packed case only -// 1.00 (2014-12-06) add new PackBegin etc. API, w/ support for oversampling -// 0.99 (2014-09-18) fix multiple bugs with subpixel rendering (ryg) -// 0.9 (2014-08-07) support certain mac/iOS fonts without an MS platformID -// 0.8b (2014-07-07) fix a warning -// 0.8 (2014-05-25) fix a few more warnings -// 0.7 (2013-09-25) bugfix: subpixel glyph bug fixed in 0.5 had come back -// 0.6c (2012-07-24) improve documentation -// 0.6b (2012-07-20) fix a few more warnings -// 0.6 (2012-07-17) fix warnings; added stbtt_ScaleForMappingEmToPixels, -// stbtt_GetFontBoundingBox, stbtt_IsGlyphEmpty -// 0.5 (2011-12-09) bugfixes: -// subpixel glyph renderer computed wrong bounding box -// first vertex of shape can be off-curve (FreeSans) -// 0.4b (2011-12-03) fixed an error in the font baking example -// 0.4 (2011-12-01) kerning, subpixel rendering (tor) -// bugfixes for: -// codepoint-to-glyph conversion using table fmt=12 -// codepoint-to-glyph conversion using table fmt=4 -// stbtt_GetBakedQuad with non-square texture (Zer) -// updated Hello World! sample to use kerning and subpixel -// fixed some warnings -// 0.3 (2009-06-24) cmap fmt=12, compound shapes (MM) -// userdata, malloc-from-userdata, non-zero fill (stb) -// 0.2 (2009-03-11) Fix unsigned/signed char warnings -// 0.1 (2009-03-09) First public release -// - -/* ------------------------------------------------------------------------------- -This software is available under 2 licenses -- choose whichever you prefer. ------------------------------------------------------------------------------- -ALTERNATIVE A - MIT License -Copyright (c) 2017 Sean Barrett -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ------------------------------------------------------------------------------- -ALTERNATIVE B - Public Domain (www.unlicense.org) -This is free and unencumbered software released into the public domain. -Anyone is free to copy, modify, publish, use, compile, sell, or distribute this -software, either in source code form or as a compiled binary, for any purpose, -commercial or non-commercial, and by any means. -In jurisdictions that recognize copyright laws, the author or authors of this -software dedicate any and all copyright interest in the software to the public -domain. We make this dedication for the benefit of the public at large and to -the detriment of our heirs and successors. We intend this dedication to be an -overt act of relinquishment in perpetuity of all present and future rights to -this software under copyright law. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ------------------------------------------------------------------------------- -*/ diff --git a/cmake/imgui/misc/README.txt b/cmake/imgui/misc/README.txt deleted file mode 100644 index 86900089..00000000 --- a/cmake/imgui/misc/README.txt +++ /dev/null @@ -1,24 +0,0 @@ - -misc/cpp/ - InputText() wrappers for C++ standard library (STL) type: std::string. - This is also an example of how you may wrap your own similar types. - -misc/fonts/ - Fonts loading/merging instructions (e.g. How to handle glyph ranges, how to merge icons fonts). - Command line tool "binary_to_compressed_c" to create compressed arrays to embed data in source code. - Suggested fonts and links. - -misc/freetype/ - Font atlas builder/rasterizer using FreeType instead of stb_truetype. - Benefit from better FreeType rasterization, in particular for small fonts. - -misc/natvis/ - Natvis file to describe dear imgui types in the Visual Studio debugger. - With this, types like ImVector<> will be displayed nicely in the debugger. - You can include this file a Visual Studio project file, or install it in Visual Studio folder. - -misc/single_file/ - Single-file header stub. - We use this to validate compiling all *.cpp files in a same compilation unit. - Users of that technique (also called "Unity builds") can generally provide this themselves, - so we don't really recommend you use this in your projects. diff --git a/cmake/imgui/misc/cpp/README.txt b/cmake/imgui/misc/cpp/README.txt deleted file mode 100644 index 8d5982e0..00000000 --- a/cmake/imgui/misc/cpp/README.txt +++ /dev/null @@ -1,10 +0,0 @@ - -imgui_stdlib.h + imgui_stdlib.cpp - InputText() wrappers for C++ standard library (STL) type: std::string. - This is also an example of how you may wrap your own similar types. - -imgui_scoped.h - [Experimental, not currently in main repository] - Additional header file with some RAII-style wrappers for common Dear ImGui functions. - Try by merging: https://github.com/ocornut/imgui/pull/2197 - Discuss at: https://github.com/ocornut/imgui/issues/2096 diff --git a/cmake/imgui/misc/cpp/imgui_stdlib.cpp b/cmake/imgui/misc/cpp/imgui_stdlib.cpp deleted file mode 100644 index fda60f4d..00000000 --- a/cmake/imgui/misc/cpp/imgui_stdlib.cpp +++ /dev/null @@ -1,77 +0,0 @@ -// imgui_stdlib.cpp -// Wrappers for C++ standard library (STL) types (std::string, etc.) -// This is also an example of how you may wrap your own similar types. - -// Compatibility: -// - std::string support is only guaranteed to work from C++11. -// If you try to use it pre-C++11, please share your findings (w/ info about compiler/architecture) - -// Changelog: -// - v0.10: Initial version. Added InputText() / InputTextMultiline() calls with std::string - -#include "imgui.h" -#include "imgui_stdlib.h" - -struct InputTextCallback_UserData -{ - std::string* Str; - ImGuiInputTextCallback ChainCallback; - void* ChainCallbackUserData; -}; - -static int InputTextCallback(ImGuiInputTextCallbackData* data) -{ - InputTextCallback_UserData* user_data = (InputTextCallback_UserData*)data->UserData; - if (data->EventFlag == ImGuiInputTextFlags_CallbackResize) - { - // Resize string callback - // If for some reason we refuse the new length (BufTextLen) and/or capacity (BufSize) we need to set them back to what we want. - std::string* str = user_data->Str; - IM_ASSERT(data->Buf == str->c_str()); - str->resize(data->BufTextLen); - data->Buf = (char*)str->c_str(); - } - else if (user_data->ChainCallback) - { - // Forward to user callback, if any - data->UserData = user_data->ChainCallbackUserData; - return user_data->ChainCallback(data); - } - return 0; -} - -bool ImGui::InputText(const char* label, std::string* str, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data) -{ - IM_ASSERT((flags & ImGuiInputTextFlags_CallbackResize) == 0); - flags |= ImGuiInputTextFlags_CallbackResize; - - InputTextCallback_UserData cb_user_data; - cb_user_data.Str = str; - cb_user_data.ChainCallback = callback; - cb_user_data.ChainCallbackUserData = user_data; - return InputText(label, (char*)str->c_str(), str->capacity() + 1, flags, InputTextCallback, &cb_user_data); -} - -bool ImGui::InputTextMultiline(const char* label, std::string* str, const ImVec2& size, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data) -{ - IM_ASSERT((flags & ImGuiInputTextFlags_CallbackResize) == 0); - flags |= ImGuiInputTextFlags_CallbackResize; - - InputTextCallback_UserData cb_user_data; - cb_user_data.Str = str; - cb_user_data.ChainCallback = callback; - cb_user_data.ChainCallbackUserData = user_data; - return InputTextMultiline(label, (char*)str->c_str(), str->capacity() + 1, size, flags, InputTextCallback, &cb_user_data); -} - -bool ImGui::InputTextWithHint(const char* label, const char* hint, std::string* str, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data) -{ - IM_ASSERT((flags & ImGuiInputTextFlags_CallbackResize) == 0); - flags |= ImGuiInputTextFlags_CallbackResize; - - InputTextCallback_UserData cb_user_data; - cb_user_data.Str = str; - cb_user_data.ChainCallback = callback; - cb_user_data.ChainCallbackUserData = user_data; - return InputTextWithHint(label, hint, (char*)str->c_str(), str->capacity() + 1, flags, InputTextCallback, &cb_user_data); -} diff --git a/cmake/imgui/misc/cpp/imgui_stdlib.h b/cmake/imgui/misc/cpp/imgui_stdlib.h deleted file mode 100644 index 5bccb032..00000000 --- a/cmake/imgui/misc/cpp/imgui_stdlib.h +++ /dev/null @@ -1,23 +0,0 @@ -// imgui_stdlib.h -// Wrappers for C++ standard library (STL) types (std::string, etc.) -// This is also an example of how you may wrap your own similar types. - -// Compatibility: -// - std::string support is only guaranteed to work from C++11. -// If you try to use it pre-C++11, please share your findings (w/ info about compiler/architecture) - -// Changelog: -// - v0.10: Initial version. Added InputText() / InputTextMultiline() calls with std::string - -#pragma once - -#include - -namespace ImGui -{ - // ImGui::InputText() with std::string - // Because text input needs dynamic resizing, we need to setup a callback to grow the capacity - IMGUI_API bool InputText(const char* label, std::string* str, ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = NULL, void* user_data = NULL); - IMGUI_API bool InputTextMultiline(const char* label, std::string* str, const ImVec2& size = ImVec2(0, 0), ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = NULL, void* user_data = NULL); - IMGUI_API bool InputTextWithHint(const char* label, const char* hint, std::string* str, ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = NULL, void* user_data = NULL); -} diff --git a/cmake/imgui/misc/fonts/Cousine-Regular.ttf b/cmake/imgui/misc/fonts/Cousine-Regular.ttf deleted file mode 100644 index 70a0bf90..00000000 Binary files a/cmake/imgui/misc/fonts/Cousine-Regular.ttf and /dev/null differ diff --git a/cmake/imgui/misc/fonts/DroidSans.ttf b/cmake/imgui/misc/fonts/DroidSans.ttf deleted file mode 100644 index 767c63ad..00000000 Binary files a/cmake/imgui/misc/fonts/DroidSans.ttf and /dev/null differ diff --git a/cmake/imgui/misc/fonts/Karla-Regular.ttf b/cmake/imgui/misc/fonts/Karla-Regular.ttf deleted file mode 100644 index 81b3de6e..00000000 Binary files a/cmake/imgui/misc/fonts/Karla-Regular.ttf and /dev/null differ diff --git a/cmake/imgui/misc/fonts/ProggyClean.ttf b/cmake/imgui/misc/fonts/ProggyClean.ttf deleted file mode 100644 index 0270cdfe..00000000 Binary files a/cmake/imgui/misc/fonts/ProggyClean.ttf and /dev/null differ diff --git a/cmake/imgui/misc/fonts/ProggyTiny.ttf b/cmake/imgui/misc/fonts/ProggyTiny.ttf deleted file mode 100644 index 1c4312c3..00000000 Binary files a/cmake/imgui/misc/fonts/ProggyTiny.ttf and /dev/null differ diff --git a/cmake/imgui/misc/fonts/Roboto-Medium.ttf b/cmake/imgui/misc/fonts/Roboto-Medium.ttf deleted file mode 100644 index 39c63d74..00000000 Binary files a/cmake/imgui/misc/fonts/Roboto-Medium.ttf and /dev/null differ diff --git a/cmake/imgui/misc/fonts/binary_to_compressed_c.cpp b/cmake/imgui/misc/fonts/binary_to_compressed_c.cpp deleted file mode 100644 index 4c6f1200..00000000 --- a/cmake/imgui/misc/fonts/binary_to_compressed_c.cpp +++ /dev/null @@ -1,384 +0,0 @@ -// dear imgui -// (binary_to_compressed_c.cpp) -// Helper tool to turn a file into a C array, if you want to embed font data in your source code. - -// The data is first compressed with stb_compress() to reduce source code size, -// then encoded in Base85 to fit in a string so we can fit roughly 4 bytes of compressed data into 5 bytes of source code (suggested by @mmalex) -// (If we used 32-bit constants it would require take 11 bytes of source code to encode 4 bytes, and be endianness dependent) -// Note that even with compression, the output array is likely to be bigger than the binary file.. -// Load compressed TTF fonts with ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF() - -// Build with, e.g: -// # cl.exe binary_to_compressed_c.cpp -// # gcc binary_to_compressed_c.cpp -// You can also find a precompiled Windows binary in the binary/demo package available from https://github.com/ocornut/imgui - -// Usage: -// binary_to_compressed_c.exe [-base85] [-nocompress] -// Usage example: -// # binary_to_compressed_c.exe myfont.ttf MyFont > myfont.cpp -// # binary_to_compressed_c.exe -base85 myfont.ttf MyFont > myfont.cpp - -#define _CRT_SECURE_NO_WARNINGS -#include -#include -#include -#include - -// stb_compress* from stb.h - declaration -typedef unsigned int stb_uint; -typedef unsigned char stb_uchar; -stb_uint stb_compress(stb_uchar *out,stb_uchar *in,stb_uint len); - -static bool binary_to_compressed_c(const char* filename, const char* symbol, bool use_base85_encoding, bool use_compression); - -int main(int argc, char** argv) -{ - if (argc < 3) - { - printf("Syntax: %s [-base85] [-nocompress] \n", argv[0]); - return 0; - } - - int argn = 1; - bool use_base85_encoding = false; - bool use_compression = true; - if (argv[argn][0] == '-') - { - if (strcmp(argv[argn], "-base85") == 0) { use_base85_encoding = true; argn++; } - else if (strcmp(argv[argn], "-nocompress") == 0) { use_compression = false; argn++; } - else - { - fprintf(stderr, "Unknown argument: '%s'\n", argv[argn]); - return 1; - } - } - - bool ret = binary_to_compressed_c(argv[argn], argv[argn+1], use_base85_encoding, use_compression); - if (!ret) - fprintf(stderr, "Error opening or reading file: '%s'\n", argv[argn]); - return ret ? 0 : 1; -} - -char Encode85Byte(unsigned int x) -{ - x = (x % 85) + 35; - return (x>='\\') ? x+1 : x; -} - -bool binary_to_compressed_c(const char* filename, const char* symbol, bool use_base85_encoding, bool use_compression) -{ - // Read file - FILE* f = fopen(filename, "rb"); - if (!f) return false; - int data_sz; - if (fseek(f, 0, SEEK_END) || (data_sz = (int)ftell(f)) == -1 || fseek(f, 0, SEEK_SET)) { fclose(f); return false; } - char* data = new char[data_sz+4]; - if (fread(data, 1, data_sz, f) != (size_t)data_sz) { fclose(f); delete[] data; return false; } - memset((void*)(((char*)data) + data_sz), 0, 4); - fclose(f); - - // Compress - int maxlen = data_sz + 512 + (data_sz >> 2) + sizeof(int); // total guess - char* compressed = use_compression ? new char[maxlen] : data; - int compressed_sz = use_compression ? stb_compress((stb_uchar*)compressed, (stb_uchar*)data, data_sz) : data_sz; - if (use_compression) - memset(compressed + compressed_sz, 0, maxlen - compressed_sz); - - // Output as Base85 encoded - FILE* out = stdout; - fprintf(out, "// File: '%s' (%d bytes)\n", filename, (int)data_sz); - fprintf(out, "// Exported using binary_to_compressed_c.cpp\n"); - const char* compressed_str = use_compression ? "compressed_" : ""; - if (use_base85_encoding) - { - fprintf(out, "static const char %s_%sdata_base85[%d+1] =\n \"", symbol, compressed_str, (int)((compressed_sz+3)/4)*5); - char prev_c = 0; - for (int src_i = 0; src_i < compressed_sz; src_i += 4) - { - // This is made a little more complicated by the fact that ??X sequences are interpreted as trigraphs by old C/C++ compilers. So we need to escape pairs of ??. - unsigned int d = *(unsigned int*)(compressed + src_i); - for (unsigned int n5 = 0; n5 < 5; n5++, d /= 85) - { - char c = Encode85Byte(d); - fprintf(out, (c == '?' && prev_c == '?') ? "\\%c" : "%c", c); - prev_c = c; - } - if ((src_i % 112) == 112-4) - fprintf(out, "\"\n \""); - } - fprintf(out, "\";\n\n"); - } - else - { - fprintf(out, "static const unsigned int %s_%ssize = %d;\n", symbol, compressed_str, (int)compressed_sz); - fprintf(out, "static const unsigned int %s_%sdata[%d/4] =\n{", symbol, compressed_str, (int)((compressed_sz+3)/4)*4); - int column = 0; - for (int i = 0; i < compressed_sz; i += 4) - { - unsigned int d = *(unsigned int*)(compressed + i); - if ((column++ % 12) == 0) - fprintf(out, "\n 0x%08x, ", d); - else - fprintf(out, "0x%08x, ", d); - } - fprintf(out, "\n};\n\n"); - } - - // Cleanup - delete[] data; - if (use_compression) - delete[] compressed; - return true; -} - -// stb_compress* from stb.h - definition - -//////////////////// compressor /////////////////////// - -static stb_uint stb_adler32(stb_uint adler32, stb_uchar *buffer, stb_uint buflen) -{ - const unsigned long ADLER_MOD = 65521; - unsigned long s1 = adler32 & 0xffff, s2 = adler32 >> 16; - unsigned long blocklen, i; - - blocklen = buflen % 5552; - while (buflen) { - for (i=0; i + 7 < blocklen; i += 8) { - s1 += buffer[0], s2 += s1; - s1 += buffer[1], s2 += s1; - s1 += buffer[2], s2 += s1; - s1 += buffer[3], s2 += s1; - s1 += buffer[4], s2 += s1; - s1 += buffer[5], s2 += s1; - s1 += buffer[6], s2 += s1; - s1 += buffer[7], s2 += s1; - - buffer += 8; - } - - for (; i < blocklen; ++i) - s1 += *buffer++, s2 += s1; - - s1 %= ADLER_MOD, s2 %= ADLER_MOD; - buflen -= blocklen; - blocklen = 5552; - } - return (s2 << 16) + s1; -} - -static unsigned int stb_matchlen(stb_uchar *m1, stb_uchar *m2, stb_uint maxlen) -{ - stb_uint i; - for (i=0; i < maxlen; ++i) - if (m1[i] != m2[i]) return i; - return i; -} - -// simple implementation that just takes the source data in a big block - -static stb_uchar *stb__out; -static FILE *stb__outfile; -static stb_uint stb__outbytes; - -static void stb__write(unsigned char v) -{ - fputc(v, stb__outfile); - ++stb__outbytes; -} - -//#define stb_out(v) (stb__out ? *stb__out++ = (stb_uchar) (v) : stb__write((stb_uchar) (v))) -#define stb_out(v) do { if (stb__out) *stb__out++ = (stb_uchar) (v); else stb__write((stb_uchar) (v)); } while (0) - -static void stb_out2(stb_uint v) { stb_out(v >> 8); stb_out(v); } -static void stb_out3(stb_uint v) { stb_out(v >> 16); stb_out(v >> 8); stb_out(v); } -static void stb_out4(stb_uint v) { stb_out(v >> 24); stb_out(v >> 16); stb_out(v >> 8 ); stb_out(v); } - -static void outliterals(stb_uchar *in, int numlit) -{ - while (numlit > 65536) { - outliterals(in,65536); - in += 65536; - numlit -= 65536; - } - - if (numlit == 0) ; - else if (numlit <= 32) stb_out (0x000020 + numlit-1); - else if (numlit <= 2048) stb_out2(0x000800 + numlit-1); - else /* numlit <= 65536) */ stb_out3(0x070000 + numlit-1); - - if (stb__out) { - memcpy(stb__out,in,numlit); - stb__out += numlit; - } else - fwrite(in, 1, numlit, stb__outfile); -} - -static int stb__window = 0x40000; // 256K - -static int stb_not_crap(int best, int dist) -{ - return ((best > 2 && dist <= 0x00100) - || (best > 5 && dist <= 0x04000) - || (best > 7 && dist <= 0x80000)); -} - -static stb_uint stb__hashsize = 32768; - -// note that you can play with the hashing functions all you -// want without needing to change the decompressor -#define stb__hc(q,h,c) (((h) << 7) + ((h) >> 25) + q[c]) -#define stb__hc2(q,h,c,d) (((h) << 14) + ((h) >> 18) + (q[c] << 7) + q[d]) -#define stb__hc3(q,c,d,e) ((q[c] << 14) + (q[d] << 7) + q[e]) - -static unsigned int stb__running_adler; - -static int stb_compress_chunk(stb_uchar *history, - stb_uchar *start, - stb_uchar *end, - int length, - int *pending_literals, - stb_uchar **chash, - stb_uint mask) -{ - (void)history; - int window = stb__window; - stb_uint match_max; - stb_uchar *lit_start = start - *pending_literals; - stb_uchar *q = start; - -#define STB__SCRAMBLE(h) (((h) + ((h) >> 16)) & mask) - - // stop short of the end so we don't scan off the end doing - // the hashing; this means we won't compress the last few bytes - // unless they were part of something longer - while (q < start+length && q+12 < end) { - int m; - stb_uint h1,h2,h3,h4, h; - stb_uchar *t; - int best = 2, dist=0; - - if (q+65536 > end) - match_max = end-q; - else - match_max = 65536; - -#define stb__nc(b,d) ((d) <= window && ((b) > 9 || stb_not_crap(b,d))) - -#define STB__TRY(t,p) /* avoid retrying a match we already tried */ \ - if (p ? dist != q-t : 1) \ - if ((m = stb_matchlen(t, q, match_max)) > best) \ - if (stb__nc(m,q-(t))) \ - best = m, dist = q - (t) - - // rather than search for all matches, only try 4 candidate locations, - // chosen based on 4 different hash functions of different lengths. - // this strategy is inspired by LZO; hashing is unrolled here using the - // 'hc' macro - h = stb__hc3(q,0, 1, 2); h1 = STB__SCRAMBLE(h); - t = chash[h1]; if (t) STB__TRY(t,0); - h = stb__hc2(q,h, 3, 4); h2 = STB__SCRAMBLE(h); - h = stb__hc2(q,h, 5, 6); t = chash[h2]; if (t) STB__TRY(t,1); - h = stb__hc2(q,h, 7, 8); h3 = STB__SCRAMBLE(h); - h = stb__hc2(q,h, 9,10); t = chash[h3]; if (t) STB__TRY(t,1); - h = stb__hc2(q,h,11,12); h4 = STB__SCRAMBLE(h); - t = chash[h4]; if (t) STB__TRY(t,1); - - // because we use a shared hash table, can only update it - // _after_ we've probed all of them - chash[h1] = chash[h2] = chash[h3] = chash[h4] = q; - - if (best > 2) - assert(dist > 0); - - // see if our best match qualifies - if (best < 3) { // fast path literals - ++q; - } else if (best > 2 && best <= 0x80 && dist <= 0x100) { - outliterals(lit_start, q-lit_start); lit_start = (q += best); - stb_out(0x80 + best-1); - stb_out(dist-1); - } else if (best > 5 && best <= 0x100 && dist <= 0x4000) { - outliterals(lit_start, q-lit_start); lit_start = (q += best); - stb_out2(0x4000 + dist-1); - stb_out(best-1); - } else if (best > 7 && best <= 0x100 && dist <= 0x80000) { - outliterals(lit_start, q-lit_start); lit_start = (q += best); - stb_out3(0x180000 + dist-1); - stb_out(best-1); - } else if (best > 8 && best <= 0x10000 && dist <= 0x80000) { - outliterals(lit_start, q-lit_start); lit_start = (q += best); - stb_out3(0x100000 + dist-1); - stb_out2(best-1); - } else if (best > 9 && dist <= 0x1000000) { - if (best > 65536) best = 65536; - outliterals(lit_start, q-lit_start); lit_start = (q += best); - if (best <= 0x100) { - stb_out(0x06); - stb_out3(dist-1); - stb_out(best-1); - } else { - stb_out(0x04); - stb_out3(dist-1); - stb_out2(best-1); - } - } else { // fallback literals if no match was a balanced tradeoff - ++q; - } - } - - // if we didn't get all the way, add the rest to literals - if (q-start < length) - q = start+length; - - // the literals are everything from lit_start to q - *pending_literals = (q - lit_start); - - stb__running_adler = stb_adler32(stb__running_adler, start, q - start); - return q - start; -} - -static int stb_compress_inner(stb_uchar *input, stb_uint length) -{ - int literals = 0; - stb_uint len,i; - - stb_uchar **chash; - chash = (stb_uchar**) malloc(stb__hashsize * sizeof(stb_uchar*)); - if (chash == NULL) return 0; // failure - for (i=0; i < stb__hashsize; ++i) - chash[i] = NULL; - - // stream signature - stb_out(0x57); stb_out(0xbc); - stb_out2(0); - - stb_out4(0); // 64-bit length requires 32-bit leading 0 - stb_out4(length); - stb_out4(stb__window); - - stb__running_adler = 1; - - len = stb_compress_chunk(input, input, input+length, length, &literals, chash, stb__hashsize-1); - assert(len == length); - - outliterals(input+length - literals, literals); - - free(chash); - - stb_out2(0x05fa); // end opcode - - stb_out4(stb__running_adler); - - return 1; // success -} - -stb_uint stb_compress(stb_uchar *out, stb_uchar *input, stb_uint length) -{ - stb__out = out; - stb__outfile = NULL; - - stb_compress_inner(input, length); - - return stb__out - out; -} diff --git a/cmake/imgui/misc/freetype/README.md b/cmake/imgui/misc/freetype/README.md deleted file mode 100644 index e565097a..00000000 --- a/cmake/imgui/misc/freetype/README.md +++ /dev/null @@ -1,132 +0,0 @@ -# imgui_freetype - -Build font atlases using FreeType instead of stb_truetype (which is the default font rasterizer in Dear ImGui). -
by @vuhdo, @mikesart, @ocornut. - -### Usage - -1. Get latest FreeType binaries or build yourself (under Windows you may use vcpkg with `vcpkg install freetype`, `vcpkg integrate install`). -2. Add imgui_freetype.h/cpp alongside your imgui sources. -3. Include imgui_freetype.h after imgui.h. -4. Call `ImGuiFreeType::BuildFontAtlas()` *BEFORE* calling `ImFontAtlas::GetTexDataAsRGBA32()` or `ImFontAtlas::Build()` (so normal Build() won't be called): - -```cpp -// See ImGuiFreeType::RasterizationFlags -unsigned int flags = ImGuiFreeType::NoHinting; -ImGuiFreeType::BuildFontAtlas(io.Fonts, flags); -io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); -``` - -### Gamma Correct Blending - -FreeType assumes blending in linear space rather than gamma space. -See FreeType note for [FT_Render_Glyph](https://www.freetype.org/freetype2/docs/reference/ft2-base_interface.html#FT_Render_Glyph). -For correct results you need to be using sRGB and convert to linear space in the pixel shader output. -The default Dear ImGui styles will be impacted by this change (alpha values will need tweaking). - -### Test code Usage -```cpp -#include "misc/freetype/imgui_freetype.h" -#include "misc/freetype/imgui_freetype.cpp" - -// Load various small fonts -ImGuiIO& io = ImGui::GetIO(); -io.Fonts->AddFontFromFileTTF("../../misc/fonts/Roboto-Medium.ttf", 13.0f); -io.Fonts->AddFontFromFileTTF("../../misc/fonts/Cousine-Regular.ttf", 13.0f); -io.Fonts->AddFontDefault(); - -FreeTypeTest freetype_test; - -// Main Loop -while (true) -{ - if (freetype_test.UpdateRebuild()) - { - // REUPLOAD FONT TEXTURE TO GPU - ImGui_ImplXXX_DestroyDeviceObjects(); - ImGui_ImplXXX_CreateDeviceObjects(); - } - ImGui::NewFrame(); - freetype_test.ShowFreetypeOptionsWindow(); - ... -} -``` - -### Test code -```cpp -#include "misc/freetype/imgui_freetype.h" -#include "misc/freetype/imgui_freetype.cpp" - -struct FreeTypeTest -{ - enum FontBuildMode - { - FontBuildMode_FreeType, - FontBuildMode_Stb - }; - - FontBuildMode BuildMode; - bool WantRebuild; - float FontsMultiply; - int FontsPadding; - unsigned int FontsFlags; - - FreeTypeTest() - { - BuildMode = FontBuildMode_FreeType; - WantRebuild = true; - FontsMultiply = 1.0f; - FontsPadding = 1; - FontsFlags = 0; - } - - // Call _BEFORE_ NewFrame() - bool UpdateRebuild() - { - if (!WantRebuild) - return false; - ImGuiIO& io = ImGui::GetIO(); - io.Fonts->TexGlyphPadding = FontsPadding; - for (int n = 0; n < io.Fonts->ConfigData.Size; n++) - { - ImFontConfig* font_config = (ImFontConfig*)&io.Fonts->ConfigData[n]; - font_config->RasterizerMultiply = FontsMultiply; - font_config->RasterizerFlags = (BuildMode == FontBuildMode_FreeType) ? FontsFlags : 0x00; - } - if (BuildMode == FontBuildMode_FreeType) - ImGuiFreeType::BuildFontAtlas(io.Fonts, FontsFlags); - else if (BuildMode == FontBuildMode_Stb) - io.Fonts->Build(); - WantRebuild = false; - return true; - } - - // Call to draw interface - void ShowFreetypeOptionsWindow() - { - ImGui::Begin("FreeType Options"); - ImGui::ShowFontSelector("Fonts"); - WantRebuild |= ImGui::RadioButton("FreeType", (int*)&BuildMode, FontBuildMode_FreeType); - ImGui::SameLine(); - WantRebuild |= ImGui::RadioButton("Stb (Default)", (int*)&BuildMode, FontBuildMode_Stb); - WantRebuild |= ImGui::DragFloat("Multiply", &FontsMultiply, 0.001f, 0.0f, 2.0f); - WantRebuild |= ImGui::DragInt("Padding", &FontsPadding, 0.1f, 0, 16); - if (BuildMode == FontBuildMode_FreeType) - { - WantRebuild |= ImGui::CheckboxFlags("NoHinting", &FontsFlags, ImGuiFreeType::NoHinting); - WantRebuild |= ImGui::CheckboxFlags("NoAutoHint", &FontsFlags, ImGuiFreeType::NoAutoHint); - WantRebuild |= ImGui::CheckboxFlags("ForceAutoHint", &FontsFlags, ImGuiFreeType::ForceAutoHint); - WantRebuild |= ImGui::CheckboxFlags("LightHinting", &FontsFlags, ImGuiFreeType::LightHinting); - WantRebuild |= ImGui::CheckboxFlags("MonoHinting", &FontsFlags, ImGuiFreeType::MonoHinting); - WantRebuild |= ImGui::CheckboxFlags("Bold", &FontsFlags, ImGuiFreeType::Bold); - WantRebuild |= ImGui::CheckboxFlags("Oblique", &FontsFlags, ImGuiFreeType::Oblique); - WantRebuild |= ImGui::CheckboxFlags("Monochrome", &FontsFlags, ImGuiFreeType::Monochrome); - } - ImGui::End(); - } -}; -``` - -### Known issues -- `cfg.OversampleH`, `OversampleV` are ignored (but perhaps not so necessary with this rasterizer). - diff --git a/cmake/imgui/misc/freetype/imgui_freetype.cpp b/cmake/imgui/misc/freetype/imgui_freetype.cpp deleted file mode 100644 index 93a56163..00000000 --- a/cmake/imgui/misc/freetype/imgui_freetype.cpp +++ /dev/null @@ -1,681 +0,0 @@ -// Wrapper to use FreeType (instead of stb_truetype) for Dear ImGui -// Get latest version at https://github.com/ocornut/imgui/tree/master/misc/freetype -// Original code by @vuhdo (Aleksei Skriabin). Improvements by @mikesart. Maintained and v0.60+ by @ocornut. - -// Changelog: -// - v0.50: (2017/08/16) imported from https://github.com/Vuhdo/imgui_freetype into http://www.github.com/ocornut/imgui_club, updated for latest changes in ImFontAtlas, minor tweaks. -// - v0.51: (2017/08/26) cleanup, optimizations, support for ImFontConfig::RasterizerFlags, ImFontConfig::RasterizerMultiply. -// - v0.52: (2017/09/26) fixes for imgui internal changes. -// - v0.53: (2017/10/22) minor inconsequential change to match change in master (removed an unnecessary statement). -// - v0.54: (2018/01/22) fix for addition of ImFontAtlas::TexUvscale member. -// - v0.55: (2018/02/04) moved to main imgui repository (away from http://www.github.com/ocornut/imgui_club) -// - v0.56: (2018/06/08) added support for ImFontConfig::GlyphMinAdvanceX, GlyphMaxAdvanceX. -// - v0.60: (2019/01/10) re-factored to match big update in STB builder. fixed texture height waste. fixed redundant glyphs when merging. support for glyph padding. -// - v0.61: (2019/01/15) added support for imgui allocators + added FreeType only override function SetAllocatorFunctions(). -// - v0.62: (2019/02/09) added RasterizerFlags::Monochrome flag to disable font anti-aliasing (combine with ::MonoHinting for best results!) - -// Gamma Correct Blending: -// FreeType assumes blending in linear space rather than gamma space. -// See https://www.freetype.org/freetype2/docs/reference/ft2-base_interface.html#FT_Render_Glyph -// For correct results you need to be using sRGB and convert to linear space in the pixel shader output. -// The default imgui styles will be impacted by this change (alpha values will need tweaking). - -// FIXME: cfg.OversampleH, OversampleV are not supported (but perhaps not so necessary with this rasterizer). - -#include "imgui_freetype.h" -#include "imgui_internal.h" // ImMin,ImMax,ImFontAtlasBuild*, -#include -#include -#include FT_FREETYPE_H // -#include FT_MODULE_H // -#include FT_GLYPH_H // -#include FT_SYNTHESIS_H // - -#ifdef _MSC_VER -#pragma warning (disable: 4505) // unreferenced local function has been removed (stb stuff) -#endif - -#if defined(__GNUC__) -#pragma GCC diagnostic ignored "-Wpragmas" // warning: unknown option after '#pragma GCC diagnostic' kind -#pragma GCC diagnostic ignored "-Wunused-function" // warning: 'xxxx' defined but not used -#endif - -namespace -{ - // Glyph metrics: - // -------------- - // - // xmin xmax - // | | - // |<-------- width -------->| - // | | - // | +-------------------------+----------------- ymax - // | | ggggggggg ggggg | ^ ^ - // | | g:::::::::ggg::::g | | | - // | | g:::::::::::::::::g | | | - // | | g::::::ggggg::::::gg | | | - // | | g:::::g g:::::g | | | - // offsetX -|-------->| g:::::g g:::::g | offsetY | - // | | g:::::g g:::::g | | | - // | | g::::::g g:::::g | | | - // | | g:::::::ggggg:::::g | | | - // | | g::::::::::::::::g | | height - // | | gg::::::::::::::g | | | - // baseline ---*---------|---- gggggggg::::::g-----*-------- | - // / | | g:::::g | | - // origin | | gggggg g:::::g | | - // | | g:::::gg gg:::::g | | - // | | g::::::ggg:::::::g | | - // | | gg:::::::::::::g | | - // | | ggg::::::ggg | | - // | | gggggg | v - // | +-------------------------+----------------- ymin - // | | - // |------------- advanceX ----------->| - - /// A structure that describe a glyph. - struct GlyphInfo - { - int Width; // Glyph's width in pixels. - int Height; // Glyph's height in pixels. - FT_Int OffsetX; // The distance from the origin ("pen position") to the left of the glyph. - FT_Int OffsetY; // The distance from the origin to the top of the glyph. This is usually a value < 0. - float AdvanceX; // The distance from the origin to the origin of the next glyph. This is usually a value > 0. - }; - - // Font parameters and metrics. - struct FontInfo - { - uint32_t PixelHeight; // Size this font was generated with. - float Ascender; // The pixel extents above the baseline in pixels (typically positive). - float Descender; // The extents below the baseline in pixels (typically negative). - float LineSpacing; // The baseline-to-baseline distance. Note that it usually is larger than the sum of the ascender and descender taken as absolute values. There is also no guarantee that no glyphs extend above or below subsequent baselines when using this distance. Think of it as a value the designer of the font finds appropriate. - float LineGap; // The spacing in pixels between one row's descent and the next row's ascent. - float MaxAdvanceWidth; // This field gives the maximum horizontal cursor advance for all glyphs in the font. - }; - - // FreeType glyph rasterizer. - // NB: No ctor/dtor, explicitly call Init()/Shutdown() - struct FreeTypeFont - { - bool InitFont(FT_Library ft_library, const ImFontConfig& cfg, unsigned int extra_user_flags); // Initialize from an external data buffer. Doesn't copy data, and you must ensure it stays valid up to this object lifetime. - void CloseFont(); - void SetPixelHeight(int pixel_height); // Change font pixel size. All following calls to RasterizeGlyph() will use this size - const FT_Glyph_Metrics* LoadGlyph(uint32_t in_codepoint); - const FT_Bitmap* RenderGlyphAndGetInfo(GlyphInfo* out_glyph_info); - void BlitGlyph(const FT_Bitmap* ft_bitmap, uint8_t* dst, uint32_t dst_pitch, unsigned char* multiply_table = NULL); - ~FreeTypeFont() { CloseFont(); } - - // [Internals] - FontInfo Info; // Font descriptor of the current font. - FT_Face Face; - unsigned int UserFlags; // = ImFontConfig::RasterizerFlags - FT_Int32 LoadFlags; - FT_Render_Mode RenderMode; - }; - - // From SDL_ttf: Handy routines for converting from fixed point - #define FT_CEIL(X) (((X + 63) & -64) / 64) - - bool FreeTypeFont::InitFont(FT_Library ft_library, const ImFontConfig& cfg, unsigned int extra_user_flags) - { - FT_Error error = FT_New_Memory_Face(ft_library, (uint8_t*)cfg.FontData, (uint32_t)cfg.FontDataSize, (uint32_t)cfg.FontNo, &Face); - if (error != 0) - return false; - error = FT_Select_Charmap(Face, FT_ENCODING_UNICODE); - if (error != 0) - return false; - - memset(&Info, 0, sizeof(Info)); - SetPixelHeight((uint32_t)cfg.SizePixels); - - // Convert to FreeType flags (NB: Bold and Oblique are processed separately) - UserFlags = cfg.RasterizerFlags | extra_user_flags; - LoadFlags = FT_LOAD_NO_BITMAP; - if (UserFlags & ImGuiFreeType::NoHinting) - LoadFlags |= FT_LOAD_NO_HINTING; - if (UserFlags & ImGuiFreeType::NoAutoHint) - LoadFlags |= FT_LOAD_NO_AUTOHINT; - if (UserFlags & ImGuiFreeType::ForceAutoHint) - LoadFlags |= FT_LOAD_FORCE_AUTOHINT; - if (UserFlags & ImGuiFreeType::LightHinting) - LoadFlags |= FT_LOAD_TARGET_LIGHT; - else if (UserFlags & ImGuiFreeType::MonoHinting) - LoadFlags |= FT_LOAD_TARGET_MONO; - else - LoadFlags |= FT_LOAD_TARGET_NORMAL; - - if (UserFlags & ImGuiFreeType::Monochrome) - RenderMode = FT_RENDER_MODE_MONO; - else - RenderMode = FT_RENDER_MODE_NORMAL; - - return true; - } - - void FreeTypeFont::CloseFont() - { - if (Face) - { - FT_Done_Face(Face); - Face = NULL; - } - } - - void FreeTypeFont::SetPixelHeight(int pixel_height) - { - // Vuhdo: I'm not sure how to deal with font sizes properly. As far as I understand, currently ImGui assumes that the 'pixel_height' - // is a maximum height of an any given glyph, i.e. it's the sum of font's ascender and descender. Seems strange to me. - // NB: FT_Set_Pixel_Sizes() doesn't seem to get us the same result. - FT_Size_RequestRec req; - req.type = FT_SIZE_REQUEST_TYPE_REAL_DIM; - req.width = 0; - req.height = (uint32_t)pixel_height * 64; - req.horiResolution = 0; - req.vertResolution = 0; - FT_Request_Size(Face, &req); - - // Update font info - FT_Size_Metrics metrics = Face->size->metrics; - Info.PixelHeight = (uint32_t)pixel_height; - Info.Ascender = (float)FT_CEIL(metrics.ascender); - Info.Descender = (float)FT_CEIL(metrics.descender); - Info.LineSpacing = (float)FT_CEIL(metrics.height); - Info.LineGap = (float)FT_CEIL(metrics.height - metrics.ascender + metrics.descender); - Info.MaxAdvanceWidth = (float)FT_CEIL(metrics.max_advance); - } - - const FT_Glyph_Metrics* FreeTypeFont::LoadGlyph(uint32_t codepoint) - { - uint32_t glyph_index = FT_Get_Char_Index(Face, codepoint); - if (glyph_index == 0) - return NULL; - FT_Error error = FT_Load_Glyph(Face, glyph_index, LoadFlags); - if (error) - return NULL; - - // Need an outline for this to work - FT_GlyphSlot slot = Face->glyph; - IM_ASSERT(slot->format == FT_GLYPH_FORMAT_OUTLINE); - - // Apply convenience transform (this is not picking from real "Bold"/"Italic" fonts! Merely applying FreeType helper transform. Oblique == Slanting) - if (UserFlags & ImGuiFreeType::Bold) - FT_GlyphSlot_Embolden(slot); - if (UserFlags & ImGuiFreeType::Oblique) - { - FT_GlyphSlot_Oblique(slot); - //FT_BBox bbox; - //FT_Outline_Get_BBox(&slot->outline, &bbox); - //slot->metrics.width = bbox.xMax - bbox.xMin; - //slot->metrics.height = bbox.yMax - bbox.yMin; - } - - return &slot->metrics; - } - - const FT_Bitmap* FreeTypeFont::RenderGlyphAndGetInfo(GlyphInfo* out_glyph_info) - { - FT_GlyphSlot slot = Face->glyph; - FT_Error error = FT_Render_Glyph(slot, RenderMode); - if (error != 0) - return NULL; - - FT_Bitmap* ft_bitmap = &Face->glyph->bitmap; - out_glyph_info->Width = (int)ft_bitmap->width; - out_glyph_info->Height = (int)ft_bitmap->rows; - out_glyph_info->OffsetX = Face->glyph->bitmap_left; - out_glyph_info->OffsetY = -Face->glyph->bitmap_top; - out_glyph_info->AdvanceX = (float)FT_CEIL(slot->advance.x); - - return ft_bitmap; - } - - void FreeTypeFont::BlitGlyph(const FT_Bitmap* ft_bitmap, uint8_t* dst, uint32_t dst_pitch, unsigned char* multiply_table) - { - IM_ASSERT(ft_bitmap != NULL); - const uint32_t w = ft_bitmap->width; - const uint32_t h = ft_bitmap->rows; - const uint8_t* src = ft_bitmap->buffer; - const uint32_t src_pitch = ft_bitmap->pitch; - - switch (ft_bitmap->pixel_mode) - { - case FT_PIXEL_MODE_GRAY: // Grayscale image, 1 byte per pixel. - { - if (multiply_table == NULL) - { - for (uint32_t y = 0; y < h; y++, src += src_pitch, dst += dst_pitch) - memcpy(dst, src, w); - } - else - { - for (uint32_t y = 0; y < h; y++, src += src_pitch, dst += dst_pitch) - for (uint32_t x = 0; x < w; x++) - dst[x] = multiply_table[src[x]]; - } - break; - } - case FT_PIXEL_MODE_MONO: // Monochrome image, 1 bit per pixel. The bits in each byte are ordered from MSB to LSB. - { - uint8_t color0 = multiply_table ? multiply_table[0] : 0; - uint8_t color1 = multiply_table ? multiply_table[255] : 255; - for (uint32_t y = 0; y < h; y++, src += src_pitch, dst += dst_pitch) - { - uint8_t bits = 0; - const uint8_t* bits_ptr = src; - for (uint32_t x = 0; x < w; x++, bits <<= 1) - { - if ((x & 7) == 0) - bits = *bits_ptr++; - dst[x] = (bits & 0x80) ? color1 : color0; - } - } - break; - } - default: - IM_ASSERT(0 && "FreeTypeFont::BlitGlyph(): Unknown bitmap pixel mode!"); - } - } -} - -#ifndef STB_RECT_PACK_IMPLEMENTATION // in case the user already have an implementation in the _same_ compilation unit (e.g. unity builds) -#ifndef IMGUI_DISABLE_STB_RECT_PACK_IMPLEMENTATION -#define STBRP_ASSERT(x) IM_ASSERT(x) -#define STBRP_STATIC -#define STB_RECT_PACK_IMPLEMENTATION -#endif -#ifdef IMGUI_STB_RECT_PACK_FILENAME -#include IMGUI_STB_RECT_PACK_FILENAME -#else -#include "imstb_rectpack.h" -#endif -#endif - -struct ImFontBuildSrcGlyphFT -{ - GlyphInfo Info; - uint32_t Codepoint; - unsigned char* BitmapData; // Point within one of the dst_tmp_bitmap_buffers[] array -}; - -struct ImFontBuildSrcDataFT -{ - FreeTypeFont Font; - stbrp_rect* Rects; // Rectangle to pack. We first fill in their size and the packer will give us their position. - const ImWchar* SrcRanges; // Ranges as requested by user (user is allowed to request too much, e.g. 0x0020..0xFFFF) - int DstIndex; // Index into atlas->Fonts[] and dst_tmp_array[] - int GlyphsHighest; // Highest requested codepoint - int GlyphsCount; // Glyph count (excluding missing glyphs and glyphs already set by an earlier source font) - ImBitVector GlyphsSet; // Glyph bit map (random access, 1-bit per codepoint. This will be a maximum of 8KB) - ImVector GlyphsList; -}; - -// Temporary data for one destination ImFont* (multiple source fonts can be merged into one destination ImFont) -struct ImFontBuildDstDataFT -{ - int SrcCount; // Number of source fonts targeting this destination font. - int GlyphsHighest; - int GlyphsCount; - ImBitVector GlyphsSet; // This is used to resolve collision when multiple sources are merged into a same destination font. -}; - -bool ImFontAtlasBuildWithFreeType(FT_Library ft_library, ImFontAtlas* atlas, unsigned int extra_flags) -{ - IM_ASSERT(atlas->ConfigData.Size > 0); - - ImFontAtlasBuildInit(atlas); - - // Clear atlas - atlas->TexID = (ImTextureID)NULL; - atlas->TexWidth = atlas->TexHeight = 0; - atlas->TexUvScale = ImVec2(0.0f, 0.0f); - atlas->TexUvWhitePixel = ImVec2(0.0f, 0.0f); - atlas->ClearTexData(); - - // Temporary storage for building - ImVector src_tmp_array; - ImVector dst_tmp_array; - src_tmp_array.resize(atlas->ConfigData.Size); - dst_tmp_array.resize(atlas->Fonts.Size); - memset(src_tmp_array.Data, 0, (size_t)src_tmp_array.size_in_bytes()); - memset(dst_tmp_array.Data, 0, (size_t)dst_tmp_array.size_in_bytes()); - - // 1. Initialize font loading structure, check font data validity - for (int src_i = 0; src_i < atlas->ConfigData.Size; src_i++) - { - ImFontBuildSrcDataFT& src_tmp = src_tmp_array[src_i]; - ImFontConfig& cfg = atlas->ConfigData[src_i]; - FreeTypeFont& font_face = src_tmp.Font; - IM_ASSERT(cfg.DstFont && (!cfg.DstFont->IsLoaded() || cfg.DstFont->ContainerAtlas == atlas)); - - // Find index from cfg.DstFont (we allow the user to set cfg.DstFont. Also it makes casual debugging nicer than when storing indices) - src_tmp.DstIndex = -1; - for (int output_i = 0; output_i < atlas->Fonts.Size && src_tmp.DstIndex == -1; output_i++) - if (cfg.DstFont == atlas->Fonts[output_i]) - src_tmp.DstIndex = output_i; - IM_ASSERT(src_tmp.DstIndex != -1); // cfg.DstFont not pointing within atlas->Fonts[] array? - if (src_tmp.DstIndex == -1) - return false; - - // Load font - if (!font_face.InitFont(ft_library, cfg, extra_flags)) - return false; - - // Measure highest codepoints - ImFontBuildDstDataFT& dst_tmp = dst_tmp_array[src_tmp.DstIndex]; - src_tmp.SrcRanges = cfg.GlyphRanges ? cfg.GlyphRanges : atlas->GetGlyphRangesDefault(); - for (const ImWchar* src_range = src_tmp.SrcRanges; src_range[0] && src_range[1]; src_range += 2) - src_tmp.GlyphsHighest = ImMax(src_tmp.GlyphsHighest, (int)src_range[1]); - dst_tmp.SrcCount++; - dst_tmp.GlyphsHighest = ImMax(dst_tmp.GlyphsHighest, src_tmp.GlyphsHighest); - } - - // 2. For every requested codepoint, check for their presence in the font data, and handle redundancy or overlaps between source fonts to avoid unused glyphs. - int total_glyphs_count = 0; - for (int src_i = 0; src_i < src_tmp_array.Size; src_i++) - { - ImFontBuildSrcDataFT& src_tmp = src_tmp_array[src_i]; - ImFontBuildDstDataFT& dst_tmp = dst_tmp_array[src_tmp.DstIndex]; - src_tmp.GlyphsSet.Create(src_tmp.GlyphsHighest + 1); - if (dst_tmp.GlyphsSet.Storage.empty()) - dst_tmp.GlyphsSet.Create(dst_tmp.GlyphsHighest + 1); - - for (const ImWchar* src_range = src_tmp.SrcRanges; src_range[0] && src_range[1]; src_range += 2) - for (int codepoint = src_range[0]; codepoint <= src_range[1]; codepoint++) - { - if (dst_tmp.GlyphsSet.TestBit(codepoint)) // Don't overwrite existing glyphs. We could make this an option (e.g. MergeOverwrite) - continue; - uint32_t glyph_index = FT_Get_Char_Index(src_tmp.Font.Face, codepoint); // It is actually in the font? (FIXME-OPT: We are not storing the glyph_index..) - if (glyph_index == 0) - continue; - - // Add to avail set/counters - src_tmp.GlyphsCount++; - dst_tmp.GlyphsCount++; - src_tmp.GlyphsSet.SetBit(codepoint); - dst_tmp.GlyphsSet.SetBit(codepoint); - total_glyphs_count++; - } - } - - // 3. Unpack our bit map into a flat list (we now have all the Unicode points that we know are requested _and_ available _and_ not overlapping another) - for (int src_i = 0; src_i < src_tmp_array.Size; src_i++) - { - ImFontBuildSrcDataFT& src_tmp = src_tmp_array[src_i]; - src_tmp.GlyphsList.reserve(src_tmp.GlyphsCount); - - IM_ASSERT(sizeof(src_tmp.GlyphsSet.Storage.Data[0]) == sizeof(ImU32)); - const ImU32* it_begin = src_tmp.GlyphsSet.Storage.begin(); - const ImU32* it_end = src_tmp.GlyphsSet.Storage.end(); - for (const ImU32* it = it_begin; it < it_end; it++) - if (ImU32 entries_32 = *it) - for (ImU32 bit_n = 0; bit_n < 32; bit_n++) - if (entries_32 & ((ImU32)1 << bit_n)) - { - ImFontBuildSrcGlyphFT src_glyph; - memset(&src_glyph, 0, sizeof(src_glyph)); - src_glyph.Codepoint = (ImWchar)(((it - it_begin) << 5) + bit_n); - //src_glyph.GlyphIndex = 0; // FIXME-OPT: We had this info in the previous step and lost it.. - src_tmp.GlyphsList.push_back(src_glyph); - } - src_tmp.GlyphsSet.Clear(); - IM_ASSERT(src_tmp.GlyphsList.Size == src_tmp.GlyphsCount); - } - for (int dst_i = 0; dst_i < dst_tmp_array.Size; dst_i++) - dst_tmp_array[dst_i].GlyphsSet.Clear(); - dst_tmp_array.clear(); - - // Allocate packing character data and flag packed characters buffer as non-packed (x0=y0=x1=y1=0) - // (We technically don't need to zero-clear buf_rects, but let's do it for the sake of sanity) - ImVector buf_rects; - buf_rects.resize(total_glyphs_count); - memset(buf_rects.Data, 0, (size_t)buf_rects.size_in_bytes()); - - // Allocate temporary rasterization data buffers. - // We could not find a way to retrieve accurate glyph size without rendering them. - // (e.g. slot->metrics->width not always matching bitmap->width, especially considering the Oblique transform) - // We allocate in chunks of 256 KB to not waste too much extra memory ahead. Hopefully users of FreeType won't find the temporary allocations. - const int BITMAP_BUFFERS_CHUNK_SIZE = 256 * 1024; - int buf_bitmap_current_used_bytes = 0; - ImVector buf_bitmap_buffers; - buf_bitmap_buffers.push_back((unsigned char*)IM_ALLOC(BITMAP_BUFFERS_CHUNK_SIZE)); - - // 4. Gather glyphs sizes so we can pack them in our virtual canvas. - // 8. Render/rasterize font characters into the texture - int total_surface = 0; - int buf_rects_out_n = 0; - for (int src_i = 0; src_i < src_tmp_array.Size; src_i++) - { - ImFontBuildSrcDataFT& src_tmp = src_tmp_array[src_i]; - ImFontConfig& cfg = atlas->ConfigData[src_i]; - if (src_tmp.GlyphsCount == 0) - continue; - - src_tmp.Rects = &buf_rects[buf_rects_out_n]; - buf_rects_out_n += src_tmp.GlyphsCount; - - // Compute multiply table if requested - const bool multiply_enabled = (cfg.RasterizerMultiply != 1.0f); - unsigned char multiply_table[256]; - if (multiply_enabled) - ImFontAtlasBuildMultiplyCalcLookupTable(multiply_table, cfg.RasterizerMultiply); - - // Gather the sizes of all rectangles we will need to pack - const int padding = atlas->TexGlyphPadding; - for (int glyph_i = 0; glyph_i < src_tmp.GlyphsList.Size; glyph_i++) - { - ImFontBuildSrcGlyphFT& src_glyph = src_tmp.GlyphsList[glyph_i]; - - const FT_Glyph_Metrics* metrics = src_tmp.Font.LoadGlyph(src_glyph.Codepoint); - IM_ASSERT(metrics != NULL); - if (metrics == NULL) - continue; - - // Render glyph into a bitmap (currently held by FreeType) - const FT_Bitmap* ft_bitmap = src_tmp.Font.RenderGlyphAndGetInfo(&src_glyph.Info); - IM_ASSERT(ft_bitmap); - - // Allocate new temporary chunk if needed - const int bitmap_size_in_bytes = src_glyph.Info.Width * src_glyph.Info.Height; - if (buf_bitmap_current_used_bytes + bitmap_size_in_bytes > BITMAP_BUFFERS_CHUNK_SIZE) - { - buf_bitmap_current_used_bytes = 0; - buf_bitmap_buffers.push_back((unsigned char*)IM_ALLOC(BITMAP_BUFFERS_CHUNK_SIZE)); - } - - // Blit rasterized pixels to our temporary buffer and keep a pointer to it. - src_glyph.BitmapData = buf_bitmap_buffers.back() + buf_bitmap_current_used_bytes; - buf_bitmap_current_used_bytes += bitmap_size_in_bytes; - src_tmp.Font.BlitGlyph(ft_bitmap, src_glyph.BitmapData, src_glyph.Info.Width * 1, multiply_enabled ? multiply_table : NULL); - - src_tmp.Rects[glyph_i].w = (stbrp_coord)(src_glyph.Info.Width + padding); - src_tmp.Rects[glyph_i].h = (stbrp_coord)(src_glyph.Info.Height + padding); - total_surface += src_tmp.Rects[glyph_i].w * src_tmp.Rects[glyph_i].h; - } - } - - // We need a width for the skyline algorithm, any width! - // The exact width doesn't really matter much, but some API/GPU have texture size limitations and increasing width can decrease height. - // User can override TexDesiredWidth and TexGlyphPadding if they wish, otherwise we use a simple heuristic to select the width based on expected surface. - const int surface_sqrt = (int)ImSqrt((float)total_surface) + 1; - atlas->TexHeight = 0; - if (atlas->TexDesiredWidth > 0) - atlas->TexWidth = atlas->TexDesiredWidth; - else - atlas->TexWidth = (surface_sqrt >= 4096*0.7f) ? 4096 : (surface_sqrt >= 2048*0.7f) ? 2048 : (surface_sqrt >= 1024*0.7f) ? 1024 : 512; - - // 5. Start packing - // Pack our extra data rectangles first, so it will be on the upper-left corner of our texture (UV will have small values). - const int TEX_HEIGHT_MAX = 1024 * 32; - const int num_nodes_for_packing_algorithm = atlas->TexWidth - atlas->TexGlyphPadding; - ImVector pack_nodes; - pack_nodes.resize(num_nodes_for_packing_algorithm); - stbrp_context pack_context; - stbrp_init_target(&pack_context, atlas->TexWidth, TEX_HEIGHT_MAX, pack_nodes.Data, pack_nodes.Size); - ImFontAtlasBuildPackCustomRects(atlas, &pack_context); - - // 6. Pack each source font. No rendering yet, we are working with rectangles in an infinitely tall texture at this point. - for (int src_i = 0; src_i < src_tmp_array.Size; src_i++) - { - ImFontBuildSrcDataFT& src_tmp = src_tmp_array[src_i]; - if (src_tmp.GlyphsCount == 0) - continue; - - stbrp_pack_rects(&pack_context, src_tmp.Rects, src_tmp.GlyphsCount); - - // Extend texture height and mark missing glyphs as non-packed so we won't render them. - // FIXME: We are not handling packing failure here (would happen if we got off TEX_HEIGHT_MAX or if a single if larger than TexWidth?) - for (int glyph_i = 0; glyph_i < src_tmp.GlyphsCount; glyph_i++) - if (src_tmp.Rects[glyph_i].was_packed) - atlas->TexHeight = ImMax(atlas->TexHeight, src_tmp.Rects[glyph_i].y + src_tmp.Rects[glyph_i].h); - } - - // 7. Allocate texture - atlas->TexHeight = (atlas->Flags & ImFontAtlasFlags_NoPowerOfTwoHeight) ? (atlas->TexHeight + 1) : ImUpperPowerOfTwo(atlas->TexHeight); - atlas->TexUvScale = ImVec2(1.0f / atlas->TexWidth, 1.0f / atlas->TexHeight); - atlas->TexPixelsAlpha8 = (unsigned char*)IM_ALLOC(atlas->TexWidth * atlas->TexHeight); - memset(atlas->TexPixelsAlpha8, 0, atlas->TexWidth * atlas->TexHeight); - - // 8. Copy rasterized font characters back into the main texture - // 9. Setup ImFont and glyphs for runtime - for (int src_i = 0; src_i < src_tmp_array.Size; src_i++) - { - ImFontBuildSrcDataFT& src_tmp = src_tmp_array[src_i]; - if (src_tmp.GlyphsCount == 0) - continue; - - ImFontConfig& cfg = atlas->ConfigData[src_i]; - ImFont* dst_font = cfg.DstFont; // We can have multiple input fonts writing into a same destination font (when using MergeMode=true) - - const float ascent = src_tmp.Font.Info.Ascender; - const float descent = src_tmp.Font.Info.Descender; - ImFontAtlasBuildSetupFont(atlas, dst_font, &cfg, ascent, descent); - const float font_off_x = cfg.GlyphOffset.x; - const float font_off_y = cfg.GlyphOffset.y + IM_ROUND(dst_font->Ascent); - - const int padding = atlas->TexGlyphPadding; - for (int glyph_i = 0; glyph_i < src_tmp.GlyphsCount; glyph_i++) - { - ImFontBuildSrcGlyphFT& src_glyph = src_tmp.GlyphsList[glyph_i]; - stbrp_rect& pack_rect = src_tmp.Rects[glyph_i]; - IM_ASSERT(pack_rect.was_packed); - - GlyphInfo& info = src_glyph.Info; - IM_ASSERT(info.Width + padding <= pack_rect.w); - IM_ASSERT(info.Height + padding <= pack_rect.h); - const int tx = pack_rect.x + padding; - const int ty = pack_rect.y + padding; - - // Blit from temporary buffer to final texture - size_t blit_src_stride = (size_t)src_glyph.Info.Width; - size_t blit_dst_stride = (size_t)atlas->TexWidth; - unsigned char* blit_src = src_glyph.BitmapData; - unsigned char* blit_dst = atlas->TexPixelsAlpha8 + (ty * blit_dst_stride) + tx; - for (int y = info.Height; y > 0; y--, blit_dst += blit_dst_stride, blit_src += blit_src_stride) - memcpy(blit_dst, blit_src, blit_src_stride); - - float char_advance_x_org = info.AdvanceX; - float char_advance_x_mod = ImClamp(char_advance_x_org, cfg.GlyphMinAdvanceX, cfg.GlyphMaxAdvanceX); - float char_off_x = font_off_x; - if (char_advance_x_org != char_advance_x_mod) - char_off_x += cfg.PixelSnapH ? IM_FLOOR((char_advance_x_mod - char_advance_x_org) * 0.5f) : (char_advance_x_mod - char_advance_x_org) * 0.5f; - - // Register glyph - float x0 = info.OffsetX + char_off_x; - float y0 = info.OffsetY + font_off_y; - float x1 = x0 + info.Width; - float y1 = y0 + info.Height; - float u0 = (tx) / (float)atlas->TexWidth; - float v0 = (ty) / (float)atlas->TexHeight; - float u1 = (tx + info.Width) / (float)atlas->TexWidth; - float v1 = (ty + info.Height) / (float)atlas->TexHeight; - dst_font->AddGlyph((ImWchar)src_glyph.Codepoint, x0, y0, x1, y1, u0, v0, u1, v1, char_advance_x_mod); - } - - src_tmp.Rects = NULL; - } - - // Cleanup - for (int buf_i = 0; buf_i < buf_bitmap_buffers.Size; buf_i++) - IM_FREE(buf_bitmap_buffers[buf_i]); - for (int src_i = 0; src_i < src_tmp_array.Size; src_i++) - src_tmp_array[src_i].~ImFontBuildSrcDataFT(); - - ImFontAtlasBuildFinish(atlas); - - return true; -} - -// Default memory allocators -static void* ImFreeTypeDefaultAllocFunc(size_t size, void* user_data) { IM_UNUSED(user_data); return IM_ALLOC(size); } -static void ImFreeTypeDefaultFreeFunc(void* ptr, void* user_data) { IM_UNUSED(user_data); IM_FREE(ptr); } - -// Current memory allocators -static void* (*GImFreeTypeAllocFunc)(size_t size, void* user_data) = ImFreeTypeDefaultAllocFunc; -static void (*GImFreeTypeFreeFunc)(void* ptr, void* user_data) = ImFreeTypeDefaultFreeFunc; -static void* GImFreeTypeAllocatorUserData = NULL; - -// FreeType memory allocation callbacks -static void* FreeType_Alloc(FT_Memory /*memory*/, long size) -{ - return GImFreeTypeAllocFunc((size_t)size, GImFreeTypeAllocatorUserData); -} - -static void FreeType_Free(FT_Memory /*memory*/, void* block) -{ - GImFreeTypeFreeFunc(block, GImFreeTypeAllocatorUserData); -} - -static void* FreeType_Realloc(FT_Memory /*memory*/, long cur_size, long new_size, void* block) -{ - // Implement realloc() as we don't ask user to provide it. - if (block == NULL) - return GImFreeTypeAllocFunc((size_t)new_size, GImFreeTypeAllocatorUserData); - - if (new_size == 0) - { - GImFreeTypeFreeFunc(block, GImFreeTypeAllocatorUserData); - return NULL; - } - - if (new_size > cur_size) - { - void* new_block = GImFreeTypeAllocFunc((size_t)new_size, GImFreeTypeAllocatorUserData); - memcpy(new_block, block, (size_t)cur_size); - GImFreeTypeFreeFunc(block, GImFreeTypeAllocatorUserData); - return new_block; - } - - return block; -} - -bool ImGuiFreeType::BuildFontAtlas(ImFontAtlas* atlas, unsigned int extra_flags) -{ - // FreeType memory management: https://www.freetype.org/freetype2/docs/design/design-4.html - FT_MemoryRec_ memory_rec = {}; - memory_rec.user = NULL; - memory_rec.alloc = &FreeType_Alloc; - memory_rec.free = &FreeType_Free; - memory_rec.realloc = &FreeType_Realloc; - - // https://www.freetype.org/freetype2/docs/reference/ft2-module_management.html#FT_New_Library - FT_Library ft_library; - FT_Error error = FT_New_Library(&memory_rec, &ft_library); - if (error != 0) - return false; - - // If you don't call FT_Add_Default_Modules() the rest of code may work, but FreeType won't use our custom allocator. - FT_Add_Default_Modules(ft_library); - - bool ret = ImFontAtlasBuildWithFreeType(ft_library, atlas, extra_flags); - FT_Done_Library(ft_library); - - return ret; -} - -void ImGuiFreeType::SetAllocatorFunctions(void* (*alloc_func)(size_t sz, void* user_data), void (*free_func)(void* ptr, void* user_data), void* user_data) -{ - GImFreeTypeAllocFunc = alloc_func; - GImFreeTypeFreeFunc = free_func; - GImFreeTypeAllocatorUserData = user_data; -} diff --git a/cmake/imgui/misc/freetype/imgui_freetype.h b/cmake/imgui/misc/freetype/imgui_freetype.h deleted file mode 100644 index d65c7724..00000000 --- a/cmake/imgui/misc/freetype/imgui_freetype.h +++ /dev/null @@ -1,36 +0,0 @@ -// Wrapper to use FreeType (instead of stb_truetype) for Dear ImGui -// Get latest version at https://github.com/ocornut/imgui/tree/master/misc/freetype -// Original code by @Vuhdo (Aleksei Skriabin), maintained by @ocornut - -#pragma once - -#include "imgui.h" // IMGUI_API, ImFontAtlas - -namespace ImGuiFreeType -{ - // Hinting greatly impacts visuals (and glyph sizes). - // When disabled, FreeType generates blurrier glyphs, more or less matches the stb's output. - // The Default hinting mode usually looks good, but may distort glyphs in an unusual way. - // The Light hinting mode generates fuzzier glyphs but better matches Microsoft's rasterizer. - - // You can set those flags on a per font basis in ImFontConfig::RasterizerFlags. - // Use the 'extra_flags' parameter of BuildFontAtlas() to force a flag on all your fonts. - enum RasterizerFlags - { - // By default, hinting is enabled and the font's native hinter is preferred over the auto-hinter. - NoHinting = 1 << 0, // Disable hinting. This generally generates 'blurrier' bitmap glyphs when the glyph are rendered in any of the anti-aliased modes. - NoAutoHint = 1 << 1, // Disable auto-hinter. - ForceAutoHint = 1 << 2, // Indicates that the auto-hinter is preferred over the font's native hinter. - LightHinting = 1 << 3, // A lighter hinting algorithm for gray-level modes. Many generated glyphs are fuzzier but better resemble their original shape. This is achieved by snapping glyphs to the pixel grid only vertically (Y-axis), as is done by Microsoft's ClearType and Adobe's proprietary font renderer. This preserves inter-glyph spacing in horizontal text. - MonoHinting = 1 << 4, // Strong hinting algorithm that should only be used for monochrome output. - Bold = 1 << 5, // Styling: Should we artificially embolden the font? - Oblique = 1 << 6, // Styling: Should we slant the font, emulating italic style? - Monochrome = 1 << 7 // Disable anti-aliasing. Combine this with MonoHinting for best results! - }; - - IMGUI_API bool BuildFontAtlas(ImFontAtlas* atlas, unsigned int extra_flags = 0); - - // By default ImGuiFreeType will use IM_ALLOC()/IM_FREE(). - // However, as FreeType does lots of allocations we provide a way for the user to redirect it to a separate memory heap if desired: - IMGUI_API void SetAllocatorFunctions(void* (*alloc_func)(size_t sz, void* user_data), void (*free_func)(void* ptr, void* user_data), void* user_data = NULL); -} diff --git a/cmake/imgui/misc/natvis/README.txt b/cmake/imgui/misc/natvis/README.txt deleted file mode 100644 index 1219db45..00000000 --- a/cmake/imgui/misc/natvis/README.txt +++ /dev/null @@ -1,4 +0,0 @@ - -Natvis file to describe dear imgui types in the Visual Studio debugger. -With this, types like ImVector<> will be displayed nicely in the debugger. -You can include this file a Visual Studio project file, or install it in Visual Studio folder. diff --git a/cmake/imgui/misc/natvis/imgui.natvis b/cmake/imgui/misc/natvis/imgui.natvis deleted file mode 100644 index cc768bfb..00000000 --- a/cmake/imgui/misc/natvis/imgui.natvis +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - {{Size={Size} Capacity={Capacity}}} - - - Size - Data - - - - - - {{x={x,g} y={y,g}}} - - - - {{x={x,g} y={y,g} z={z,g} w={w,g}}} - - - - {{Min=({Min.x,g} {Min.y,g}) Max=({Max.x,g} {Max.y,g}) Size=({Max.x-Min.x,g} {Max.y-Min.y,g})}} - - Min - Max - Max.x - Min.x - Max.y - Min.y - - - - - {{Name {Name,s} Active {(Active||WasActive)?1:0,d} Child {(Flags & 0x01000000)?1:0,d} Popup {(Flags & 0x04000000)?1:0,d} Hidden {(Hidden)?1:0,d}} - - - \ No newline at end of file diff --git a/cmake/imgui/misc/single_file/imgui_single_file.h b/cmake/imgui/misc/single_file/imgui_single_file.h deleted file mode 100644 index a556931c..00000000 --- a/cmake/imgui/misc/single_file/imgui_single_file.h +++ /dev/null @@ -1,17 +0,0 @@ -// imgui_single_file.h -// We use this to validate compiling all *.cpp files in a same compilation unit. -// Users of that technique (also called "Unity builds") can generally provide this themselves, -// so we don't really recommend you use this in your projects. - -// Do this: -// #define IMGUI_IMPLEMENTATION -// Before you include this file in *one* C++ file to create the implementation. -// Using this in your project will leak the contents of imgui_internal.h and ImVec2 operators in this compilation unit. -#include "../../imgui.h" - -#ifdef IMGUI_IMPLEMENTATION -#include "../../imgui.cpp" -#include "../../imgui_demo.cpp" -#include "../../imgui_draw.cpp" -#include "../../imgui_widgets.cpp" -#endif diff --git a/cmake/reactphysics3d/src/collision/Collider.cpp b/cmake/reactphysics3d/src/collision/Collider.cpp index c615b27c..cdd30525 100644 --- a/cmake/reactphysics3d/src/collision/Collider.cpp +++ b/cmake/reactphysics3d/src/collision/Collider.cpp @@ -1,27 +1,27 @@ /******************************************************************************** -* ReactPhysics3D physics library, http://www.reactphysics3d.com * -* Copyright (c) 2010-2022 Daniel Chappuis * -********************************************************************************* -* * -* This software is provided 'as-is', without any express or implied warranty. * -* In no event will the authors be held liable for any damages arising from the * -* use of this software. * -* * -* Permission is granted to anyone to use this software for any purpose, * -* including commercial applications, and to alter it and redistribute it * -* freely, subject to the following restrictions: * -* * -* 1. The origin of this software must not be misrepresented; you must not claim * -* that you wrote the original software. If you use this software in a * -* product, an acknowledgment in the product documentation would be * -* appreciated but is not required. * -* * -* 2. Altered source versions must be plainly marked as such, and must not be * -* misrepresented as being the original software. * -* * -* 3. This notice may not be removed or altered from any source distribution. * -* * -********************************************************************************/ + * ReactPhysics3D physics library, http://www.reactphysics3d.com * Copyright (c) + *2010-2022 Daniel Chappuis * + ********************************************************************************* + * * + * This software is provided 'as-is', without any express or implied warranty. * + * In no event will the authors be held liable for any damages arising from the + ** use of this software. * + * * + * Permission is granted to anyone to use this software for any purpose, * + * including commercial applications, and to alter it and redistribute it * + * freely, subject to the following restrictions: * + * * + * 1. The origin of this software must not be misrepresented; you must not claim + ** that you wrote the original software. If you use this software in a * + * product, an acknowledgment in the product documentation would be * + * appreciated but is not required. * + * * + * 2. Altered source versions must be plainly marked as such, and must not be * + * misrepresented as being the original software. * + * * + * 3. This notice may not be removed or altered from any source distribution. * + * * + ********************************************************************************/ // Libraries #include @@ -37,19 +37,19 @@ using namespace reactphysics3d; /** * @param body Pointer to the parent body * @param shape Pointer to the collision shape - * @param transform Transformation from collision shape local-space to body local-space + * @param transform Transformation from collision shape local-space to body + * local-space * @param mass Mass of the collision shape (in kilograms) */ -Collider::Collider(Entity entity, CollisionBody* body, MemoryManager& memoryManager) - :mMemoryManager(memoryManager), mEntity(entity), mBody(body), - mUserData(nullptr) { - -} +Collider::Collider(Entity entity, CollisionBody* body, + MemoryManager& memoryManager) + : mMemoryManager(memoryManager), + mEntity(entity), + mBody(body), + mUserData(nullptr) {} // Destructor -Collider::~Collider() { - -} +Collider::~Collider() {} // Return true if a point is inside the collision shape /** @@ -57,11 +57,13 @@ Collider::~Collider() { * @return True if the point is inside the collision shape */ bool Collider::testPointInside(const Vector3& worldPoint) { - const Transform localToWorld = mBody->mWorld.mTransformComponents.getTransform(mBody->getEntity()) * - mBody->mWorld.mCollidersComponents.getLocalToBodyTransform(mEntity); - const Vector3 localPoint = localToWorld.getInverse() * worldPoint; - const CollisionShape* collisionShape = mBody->mWorld.mCollidersComponents.getCollisionShape(mEntity); - return collisionShape->testPointInside(localPoint, this); + const Transform localToWorld = + mBody->mWorld.mTransformComponents.getTransform(mBody->getEntity()) * + mBody->mWorld.mCollidersComponents.getLocalToBodyTransform(mEntity); + const Vector3 localPoint = localToWorld.getInverse() * worldPoint; + const CollisionShape* collisionShape = + mBody->mWorld.mCollidersComponents.getCollisionShape(mEntity); + return collisionShape->testPointInside(localPoint, this); } // Set the collision category bits @@ -69,59 +71,73 @@ bool Collider::testPointInside(const Vector3& worldPoint) { * @param collisionCategoryBits The collision category bits mask of the collider */ void Collider::setCollisionCategoryBits(unsigned short collisionCategoryBits) { + mBody->mWorld.mCollidersComponents.setCollisionCategoryBits( + mEntity, collisionCategoryBits); - mBody->mWorld.mCollidersComponents.setCollisionCategoryBits(mEntity, collisionCategoryBits); - - int broadPhaseId = mBody->mWorld.mCollidersComponents.getBroadPhaseId(mEntity); + int broadPhaseId = + mBody->mWorld.mCollidersComponents.getBroadPhaseId(mEntity); - // Ask the broad-phase collision detection to test this collider next frame - mBody->mWorld.mCollisionDetection.askForBroadPhaseCollisionCheck(this); + // Ask the broad-phase collision detection to test this collider next frame + mBody->mWorld.mCollisionDetection.askForBroadPhaseCollisionCheck(this); - RP3D_LOG(mBody->mWorld.mConfig.worldName, Logger::Level::Information, Logger::Category::Collider, - "Collider " + std::to_string(broadPhaseId) + ": Set collisionCategoryBits=" + - std::to_string(collisionCategoryBits), __FILE__, __LINE__); + RP3D_LOG(mBody->mWorld.mConfig.worldName, Logger::Level::Information, + Logger::Category::Collider, + "Collider " + std::to_string(broadPhaseId) + + ": Set collisionCategoryBits=" + + std::to_string(collisionCategoryBits), + __FILE__, __LINE__); } // Set the collision bits mask /** - * @param collideWithMaskBits The bits mask that specifies with which collision category this shape will collide + * @param collideWithMaskBits The bits mask that specifies with which collision + * category this shape will collide */ void Collider::setCollideWithMaskBits(unsigned short collideWithMaskBits) { + mBody->mWorld.mCollidersComponents.setCollideWithMaskBits( + mEntity, collideWithMaskBits); - mBody->mWorld.mCollidersComponents.setCollideWithMaskBits(mEntity, collideWithMaskBits); + int broadPhaseId = + mBody->mWorld.mCollidersComponents.getBroadPhaseId(mEntity); - int broadPhaseId = mBody->mWorld.mCollidersComponents.getBroadPhaseId(mEntity); + // Ask the broad-phase collision detection to test this collider next frame + mBody->mWorld.mCollisionDetection.askForBroadPhaseCollisionCheck(this); - // Ask the broad-phase collision detection to test this collider next frame - mBody->mWorld.mCollisionDetection.askForBroadPhaseCollisionCheck(this); - - RP3D_LOG(mBody->mWorld.mConfig.worldName, Logger::Level::Information, Logger::Category::Collider, - "Collider" + std::to_string(broadPhaseId) + ": Set collideWithMaskBits=" + - std::to_string(collideWithMaskBits), __FILE__, __LINE__); + RP3D_LOG( + mBody->mWorld.mConfig.worldName, Logger::Level::Information, + Logger::Category::Collider, + "Collider" + std::to_string(broadPhaseId) + + ": Set collideWithMaskBits=" + std::to_string(collideWithMaskBits), + __FILE__, __LINE__); } // Set the local to body transform /** - * @param transform The transform from local-space of the collider into the local-space of the body + * @param transform The transform from local-space of the collider into the + * local-space of the body */ void Collider::setLocalToBodyTransform(const Transform& transform) { - - mBody->mWorld.mCollidersComponents.setLocalToBodyTransform(mEntity, transform); - - // Update the local-to-world transform - const Transform& bodyTransform = mBody->mWorld.mTransformComponents.getTransform(mBody->getEntity()); - mBody->mWorld.mCollidersComponents.setLocalToWorldTransform(mEntity, bodyTransform * transform); - - RigidBody* rigidBody = static_cast(mBody); - if (rigidBody != nullptr) { - rigidBody->setIsSleeping(false); - } - - mBody->mWorld.mCollisionDetection.updateCollider(mEntity); - - RP3D_LOG(mBody->mWorld.mConfig.worldName, Logger::Level::Information, Logger::Category::Collider, - "Collider " + std::to_string(getBroadPhaseId()) + ": Set localToBodyTransform=" + - transform.to_string(), __FILE__, __LINE__); + mBody->mWorld.mCollidersComponents.setLocalToBodyTransform(mEntity, + transform); + + // Update the local-to-world transform + const Transform& bodyTransform = + mBody->mWorld.mTransformComponents.getTransform(mBody->getEntity()); + mBody->mWorld.mCollidersComponents.setLocalToWorldTransform( + mEntity, bodyTransform * transform); + + RigidBody* rigidBody = dynamic_cast(mBody); + if (rigidBody != nullptr) { + rigidBody->setIsSleeping(false); + } + + mBody->mWorld.mCollisionDetection.updateCollider(mEntity); + + RP3D_LOG(mBody->mWorld.mConfig.worldName, Logger::Level::Information, + Logger::Category::Collider, + "Collider " + std::to_string(getBroadPhaseId()) + + ": Set localToBodyTransform=" + transform.to_string(), + __FILE__, __LINE__); } // Return the AABB of the collider in world-space @@ -129,10 +145,11 @@ void Collider::setLocalToBodyTransform(const Transform& transform) { * @return The AABB of the collider in world-space */ const AABB Collider::getWorldAABB() const { - AABB aabb; - CollisionShape* collisionShape = mBody->mWorld.mCollidersComponents.getCollisionShape(mEntity); - collisionShape->computeAABB(aabb, getLocalToWorldTransform()); - return aabb; + AABB aabb; + CollisionShape* collisionShape = + mBody->mWorld.mCollidersComponents.getCollisionShape(mEntity); + collisionShape->computeAABB(aabb, getLocalToWorldTransform()); + return aabb; } // Return a pointer to the collision shape @@ -140,7 +157,7 @@ const AABB Collider::getWorldAABB() const { * @return Pointer to the collision shape */ CollisionShape* Collider::getCollisionShape() { - return mBody->mWorld.mCollidersComponents.getCollisionShape(mEntity); + return mBody->mWorld.mCollidersComponents.getCollisionShape(mEntity); } // Return a const pointer to the collision shape @@ -148,12 +165,12 @@ CollisionShape* Collider::getCollisionShape() { * @return Pointer to the collision shape */ const CollisionShape* Collider::getCollisionShape() const { - return mBody->mWorld.mCollidersComponents.getCollisionShape(mEntity); + return mBody->mWorld.mCollidersComponents.getCollisionShape(mEntity); } // Return the broad-phase id int Collider::getBroadPhaseId() const { - return mBody->mWorld.mCollidersComponents.getBroadPhaseId(mEntity); + return mBody->mWorld.mCollidersComponents.getBroadPhaseId(mEntity); } // Return the local to parent body transform @@ -162,7 +179,7 @@ int Collider::getBroadPhaseId() const { * to the local-space of the body */ const Transform& Collider::getLocalToBodyTransform() const { - return mBody->mWorld.mCollidersComponents.getLocalToBodyTransform(mEntity); + return mBody->mWorld.mCollidersComponents.getLocalToBodyTransform(mEntity); } // Raycast method with feedback information @@ -173,24 +190,28 @@ const Transform& Collider::getLocalToBodyTransform() const { * @return True if the ray hits the collision shape */ bool Collider::raycast(const Ray& ray, RaycastInfo& raycastInfo) { - - // If the corresponding body is not active, it cannot be hit by rays - if (!mBody->isActive()) return false; - - // Convert the ray into the local-space of the collision shape - const Transform localToWorldTransform = mBody->mWorld.mCollidersComponents.getLocalToWorldTransform(mEntity); - const Transform worldToLocalTransform = localToWorldTransform.getInverse(); - Ray rayLocal(worldToLocalTransform * ray.point1, worldToLocalTransform * ray.point2, ray.maxFraction); - - const CollisionShape* collisionShape = mBody->mWorld.mCollidersComponents.getCollisionShape(mEntity); - bool isHit = collisionShape->raycast(rayLocal, raycastInfo, this, mMemoryManager.getPoolAllocator()); - - // Convert the raycast info into world-space - raycastInfo.worldPoint = localToWorldTransform * raycastInfo.worldPoint; - raycastInfo.worldNormal = localToWorldTransform.getOrientation() * raycastInfo.worldNormal; - raycastInfo.worldNormal.normalize(); - - return isHit; + // If the corresponding body is not active, it cannot be hit by rays + if (!mBody->isActive()) return false; + + // Convert the ray into the local-space of the collision shape + const Transform localToWorldTransform = + mBody->mWorld.mCollidersComponents.getLocalToWorldTransform(mEntity); + const Transform worldToLocalTransform = localToWorldTransform.getInverse(); + Ray rayLocal(worldToLocalTransform * ray.point1, + worldToLocalTransform * ray.point2, ray.maxFraction); + + const CollisionShape* collisionShape = + mBody->mWorld.mCollidersComponents.getCollisionShape(mEntity); + bool isHit = collisionShape->raycast(rayLocal, raycastInfo, this, + mMemoryManager.getPoolAllocator()); + + // Convert the raycast info into world-space + raycastInfo.worldPoint = localToWorldTransform * raycastInfo.worldPoint; + raycastInfo.worldNormal = + localToWorldTransform.getOrientation() * raycastInfo.worldNormal; + raycastInfo.worldNormal.normalize(); + + return isHit; } // Return the collision category bits @@ -198,20 +219,24 @@ bool Collider::raycast(const Ray& ray, RaycastInfo& raycastInfo) { * @return The collision category bits mask of the collider */ unsigned short Collider::getCollisionCategoryBits() const { - return mBody->mWorld.mCollidersComponents.getCollisionCategoryBits(mEntity); + return mBody->mWorld.mCollidersComponents.getCollisionCategoryBits(mEntity); } // Return the collision bits mask /** - * @return The bits mask that specifies with which collision category this shape will collide + * @return The bits mask that specifies with which collision category this shape + * will collide */ unsigned short Collider::getCollideWithMaskBits() const { - return mBody->mWorld.mCollidersComponents.getCollideWithMaskBits(mEntity); + return mBody->mWorld.mCollidersComponents.getCollideWithMaskBits(mEntity); } -// Notify the collider that the size of the collision shape has been changed by the user -void Collider::setHasCollisionShapeChangedSize(bool hasCollisionShapeChangedSize) { - mBody->mWorld.mCollidersComponents.setHasCollisionShapeChangedSize(mEntity, hasCollisionShapeChangedSize); +// Notify the collider that the size of the collision shape has been changed by +// the user +void Collider::setHasCollisionShapeChangedSize( + bool hasCollisionShapeChangedSize) { + mBody->mWorld.mCollidersComponents.setHasCollisionShapeChangedSize( + mEntity, hasCollisionShapeChangedSize); } // Set a new material for this rigid body @@ -219,11 +244,13 @@ void Collider::setHasCollisionShapeChangedSize(bool hasCollisionShapeChangedSize * @param material The material you want to set to the body */ void Collider::setMaterial(const Material& material) { + mBody->mWorld.mCollidersComponents.setMaterial(mEntity, material); - mBody->mWorld.mCollidersComponents.setMaterial(mEntity, material); - - RP3D_LOG(mBody->mWorld.mConfig.worldName, Logger::Level::Information, Logger::Category::Collider, - "Collider " + std::to_string(mEntity.id) + ": Set Material" + material.to_string(), __FILE__, __LINE__); + RP3D_LOG(mBody->mWorld.mConfig.worldName, Logger::Level::Information, + Logger::Category::Collider, + "Collider " + std::to_string(mEntity.id) + ": Set Material" + + material.to_string(), + __FILE__, __LINE__); } // Return the local to world transform @@ -232,7 +259,7 @@ void Collider::setMaterial(const Material& material) { * shape to the world-space */ const Transform Collider::getLocalToWorldTransform() const { - return mBody->mWorld.mCollidersComponents.getLocalToWorldTransform(mEntity); + return mBody->mWorld.mCollidersComponents.getLocalToWorldTransform(mEntity); } // Return true if the collider is a trigger @@ -240,15 +267,16 @@ const Transform Collider::getLocalToWorldTransform() const { * @return True if this collider is a trigger and false otherwise */ bool Collider::getIsTrigger() const { - return mBody->mWorld.mCollidersComponents.getIsTrigger(mEntity); + return mBody->mWorld.mCollidersComponents.getIsTrigger(mEntity); } // Set whether the collider is a trigger /** - * @param isTrigger True if you want to set this collider as a trigger and false otherwise + * @param isTrigger True if you want to set this collider as a trigger and false + * otherwise */ void Collider::setIsTrigger(bool isTrigger) const { - mBody->mWorld.mCollidersComponents.setIsTrigger(mEntity, isTrigger); + mBody->mWorld.mCollidersComponents.setIsTrigger(mEntity, isTrigger); } // Return a reference to the material properties of the collider @@ -256,20 +284,18 @@ void Collider::setIsTrigger(bool isTrigger) const { * @return A reference to the material of the body */ Material& Collider::getMaterial() { - return mBody->mWorld.mCollidersComponents.getMaterial(mEntity); + return mBody->mWorld.mCollidersComponents.getMaterial(mEntity); } #ifdef IS_RP3D_PROFILING_ENABLED - // Set the profiler void Collider::setProfiler(Profiler* profiler) { + mProfiler = profiler; - mProfiler = profiler; - - CollisionShape* collisionShape = mBody->mWorld.mCollidersComponents.getCollisionShape(mEntity); - collisionShape->setProfiler(profiler); + CollisionShape* collisionShape = + mBody->mWorld.mCollidersComponents.getCollisionShape(mEntity); + collisionShape->setProfiler(profiler); } #endif - diff --git a/dlls/RakNet_DLL_Release_x64.dll b/dlls/RakNet_DLL_Release_x64.dll new file mode 100644 index 00000000..505ca991 Binary files /dev/null and b/dlls/RakNet_DLL_Release_x64.dll differ diff --git a/lib/DLL_vc9_DLL_Release_x64.lib b/lib/DLL_vc9_DLL_Release_x64.lib new file mode 100644 index 00000000..3d20f6b3 Binary files /dev/null and b/lib/DLL_vc9_DLL_Release_x64.lib differ diff --git a/cmake/raknet/Lib/LibStatic_vc9_LibStatic_Release_x64.lib b/lib/LibStatic_vc9_LibStatic_Release_x64.lib similarity index 100% rename from cmake/raknet/Lib/LibStatic_vc9_LibStatic_Release_x64.lib rename to lib/LibStatic_vc9_LibStatic_Release_x64.lib diff --git a/lib/RakNet_DLL_Release_x64.lib b/lib/RakNet_DLL_Release_x64.lib new file mode 100644 index 00000000..e4fdc5fe Binary files /dev/null and b/lib/RakNet_DLL_Release_x64.lib differ diff --git a/lib/SLikeNet_LibStatic_Release_x64.lib b/lib/SLikeNet_LibStatic_Release_x64.lib new file mode 100644 index 00000000..f0ccd06d Binary files /dev/null and b/lib/SLikeNet_LibStatic_Release_x64.lib differ diff --git a/lib/assimp-vc143-mt.lib b/lib/assimp-vc143-mt.lib new file mode 100644 index 00000000..4451b76a Binary files /dev/null and b/lib/assimp-vc143-mt.lib differ diff --git a/resources/game/ECSScene/_MasterCreation.lua b/resources/game/ECSScene/_MasterCreation.lua new file mode 100644 index 00000000..7e3c1de6 --- /dev/null +++ b/resources/game/ECSScene/_MasterCreation.lua @@ -0,0 +1,23 @@ +--dofile "game/ECSScene/_Materials.lua" +dofile "game/ECSScene/_statemachine.lua" +Collections.clear_collections() + +--Scene.add_game_object("game/ECSScene/game_objects/Cat.lua") +Scene.add_game_object("game/ECSScene/game_objects/moonlight.lua") +Scene.add_game_object("game/ECSScene/game_objects/player.lua") +Scene.add_game_object("game/ECSScene/game_objects/flashlight.lua") +--Scene.add_game_object("game/ECSScene/game_objects/boat.lua") +--Scene.add_game_object("game/ECSScene/game_objects/escape_boat.lua") +--Scene.add_game_object("game/ECSScene/game_objects/lighthouse.lua") +Scene.add_game_object("game/ECSScene/game_objects/water.lua") +--Scene.add_game_object("game/ECSScene/game_objects/big_arrow.lua") +--Scene.add_game_object("game/ECSScene/game_objects/terrain.lua") +--Scene.add_game_object("game/ECSScene/game_objects/duck.lua") + +--AI game objects +--Scene.add_game_object("game/ECSScene/game_objects/AI/duck.lua") +--Scene.add_game_object("game/ECSScene/game_objects/AI/duckTwo.lua") + + + +Skybox.use_skybox("nightsky") diff --git a/resources/game/ECSScene/_Materials.lua b/resources/game/ECSScene/_Materials.lua new file mode 100644 index 00000000..456aa847 --- /dev/null +++ b/resources/game/ECSScene/_Materials.lua @@ -0,0 +1,67 @@ + +--Model.load_model("cat", "models/12221_Cat_v1_l3.obj") +--Model.load_model("boat", "models/boat1obj.obj") +--Model.load_model("lighthouse", "models/Beacon.obj") +--Model.load_model("big_arrow", "models/BigArrow.obj") +--Model.load_model("TheDen", "models/TheDen.obj") +Model.load_model("GlassInScene", "models/Glass.obj") +Model.load_model("Sphere", "models/sphere.obj") + + +--Small models/objects + +Model.load_model("laptop", "models/laptop.obj") +Model.load_model("tissue_box", "models/tissuebox.obj") +Model.load_model("pizza_box", "models/pizzabox.obj") +Model.load_model("marker", "models/marker.obj") +Model.load_model("book1", "models/book1.obj") +Model.load_model("book2", "models/book2.obj") +Model.load_model("book3", "models/book3.obj") +Model.load_model("book4", "models/book4.obj") +Model.load_model("book5", "models/book5.obj") +Model.load_model("rubix_cube", "models/rubixcube.obj") +Model.load_model("calculator", "models/calculator.obj") +Model.load_model("chair", "models/chair.obj") + + +--Md2.load_md2_model("duck", "models/DuckPersonNew.md2") + + +--Texture.load_texture("water", "textures/water.png") +--Texture.load_texture("sand", "textures/sand.jpg") +--Texture.load_texture("rock", "textures/rock.jpg") +--Texture.load_texture("snow", "textures/snow.jpg") +--Texture.load_texture("grass", "textures/grass2.jpg") +Texture.load_texture("credits", "textures/reflexbullet.png") +--Texture.load_texture("duck", "textures/DuckPerson.png") +Texture.load_texture("Chair", "textures/chair.jpg") +Material.load_material("shiny", 256.0, 4.0) + + +Audio.load_audio("duckandcover", "sounds/gamefast.wav") + + +--Terrain.load_terrain("terrain", "textures/newheightmap.png") + + +Skybox.load_skybox("nightsky", { + right = "textures/skyboxes/nightsky/nightsky_rt.tga", + left = "textures/skyboxes/nightsky/nightsky_lf.tga", + top = "textures/skyboxes/nightsky/nightsky_up.tga", + bottom = "textures/skyboxes/nightsky/nightsky_dn.tga", + front = "textures/skyboxes/nightsky/nightsky_bk.tga", + back = "textures/skyboxes/nightsky/nightsky_ft.tga" +}) + + +Mesh.load_mesh("water", + { + -10.0, 0.0, -10.0, 0.0, 0.0, 0.0, -1.0, 0.0, + 10.0, 0.0, -10.0, 100.0, 0.0, 0.0, -1.0, 0.0, + -10.0, 0.0, 10.0, 0.0, 100.0, 0.0, -1.0, 0.0, + 10.0, 0.0, 10.0, 100.0, 100.0, 0.0, -1.0, 0.0 + }, + { + 0, 2, 1, 1, 2, 3, 0, 1, 2, 1, 3, 2 + } +) diff --git a/resources/game/ECSScene/_statemachine.lua b/resources/game/ECSScene/_statemachine.lua new file mode 100644 index 00000000..89217ba8 --- /dev/null +++ b/resources/game/ECSScene/_statemachine.lua @@ -0,0 +1,113 @@ +------------------------------------------------------------------------------ + +-- create the global state + +------------------------------------------------------------------------------- +state_global = {} + +state_global["enter"] = function(ecs, entity) + +end + +state_global["execute"] = function(ecs, entity) + --print("in global state - statemachine.lua") + + --local transform = entity:get_transform_component() + --local position = transform.position + --print(position.x) +end + +state_global["exit"] = function(ecs, entity) + +end + +state_global["onMessage"] = function(ecs, entity, msg) +print("Incomming message in global state") +end + + +------------------------------------------------------------------------------- + +-- create the patrol state + +------------------------------------------------------------------------------- +state_patrol = {} + +state_patrol["enter"] = function(ecs, entity) + print("entering patrol") +end + +state_patrol["execute"] = function(ecs, entity) + statemachine_helper.change_state(ecs, entity, "state_flee") +end + + +state_patrol["exit"] = function(ecs, entity) + print("exiting patrol") +end + +state_patrol["onMessage"] = function(ecs, entity, msg) +print("Incomming message in patrol state") +end + + +------------------------------------------------------------------------------- + +-- create the flee state + +------------------------------------------------------------------------------- +state_flee = {} + +state_flee["enter"] = function(ecs, entity) + print("entering flee") +end + +state_flee["execute"] = function(ecs, entity) + --print("in flee state - statemachine.lua") +end + + +state_flee["exit"] = function(ecs, entity) + print("exiting flee") +end + +state_flee["onMessage"] = function(ecs, entity, msg) +print("Incomming message in flee state") + if(msg.msg == 0) then + print("Will stop being a baby") + statemachine_helper.change_state(ecs, entity, "state_patrol") + end +end + + +------------------------------------------------------------------------------- + +-- create the chad state + +------------------------------------------------------------------------------- +state_chad = {} + +state_chad["enter"] = function(ecs, entity) + print("entering chad") +end + +state_chad["execute"] = function(ecs, entity) + + local transform = entity:get_transform_component() + local position = transform.position + + --statemachine_helper.send_area_message(ecs, entity, 100, 0, var) + --local target = Math.vec3.new(250, position.y, position.z) + --statemachine_helper.follow_waypoint(entity, target, 10, "terrain") + statemachine_helper.look_for_enemy(ecs, entity, 90, 100) + +end + + +state_chad["exit"] = function(ecs, entity) + +end + +state_chad["onMessage"] = function(ecs, entity, msg) +print("Incomming message in chad state") +end \ No newline at end of file diff --git a/resources/game/ECSScene/game_objects/AI/duck.lua b/resources/game/ECSScene/game_objects/AI/duck.lua new file mode 100644 index 00000000..5a1adb20 --- /dev/null +++ b/resources/game/ECSScene/game_objects/AI/duck.lua @@ -0,0 +1,38 @@ +entity = { + name = "duck", + + transform = { + position = { + x = 20, + y = -5, + z = 0 + }, + rotation = { + x = -90, + y = 0, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "cat", + material_name = "shiny" + }, + + statemachine = { + current_state = "state_patrol", + global_state = "state_global", + previous_state = "state_patrol", + + var = { + faction = 1, + health = 100, + damage = 10 + } + } +} diff --git a/resources/game/ECSScene/game_objects/AI/duckTwo.lua b/resources/game/ECSScene/game_objects/AI/duckTwo.lua new file mode 100644 index 00000000..ea7d3444 --- /dev/null +++ b/resources/game/ECSScene/game_objects/AI/duckTwo.lua @@ -0,0 +1,38 @@ +entity = { + name = "chad duck", + + transform = { + position = { + x = -20, + y = 10, + z = 0 + }, + rotation = { + x = -90, + y = 0, + z = 0 + }, + scale = { + x = 0.25, + y = 0.25, + z = 0.25 + } + }, + + model = { + model_name = "cat", + material_name = "shiny" + }, + + statemachine = { + current_state = "state_chad", + global_state = "state_global", + previous_state = "state_chad", + + var = { + faction = 1, + health = 100, + damage = 10 + } + } +} diff --git a/resources/game/ECSScene/game_objects/Cat.lua b/resources/game/ECSScene/game_objects/Cat.lua new file mode 100644 index 00000000..5a4ef295 --- /dev/null +++ b/resources/game/ECSScene/game_objects/Cat.lua @@ -0,0 +1,26 @@ +entity = { + name = "Cat", + + transform = { + position = { + x = 0, + y = 0, + z = 0 + }, + rotation = { + x = -90, + y = 0, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "cat", + material_name = "shiny" + } +} diff --git a/resources/game/ECSScene/game_objects/big_arrow.lua b/resources/game/ECSScene/game_objects/big_arrow.lua new file mode 100644 index 00000000..078f74db --- /dev/null +++ b/resources/game/ECSScene/game_objects/big_arrow.lua @@ -0,0 +1,18 @@ +entity = { + name = "Big arrow", + + transform = { + position = { x = 15, y = 70, z = 210 }, + rotation = { + x = 0, + y = 45, + z = 0 + }, + scale = { x = 3, y = 3, z = 3 } + }, + + model = { + model_name = "big_arrow", + material_name = "shiny" + } +} diff --git a/resources/game/ECSScene/game_objects/boat.lua b/resources/game/ECSScene/game_objects/boat.lua new file mode 100644 index 00000000..a659277b --- /dev/null +++ b/resources/game/ECSScene/game_objects/boat.lua @@ -0,0 +1,30 @@ +entity = { + name = "Boat", + + transform = { + position = { + x = 100, + y = 2.5, + z = 75 + }, + rotation = { + x = 0, + y = -180, + z = 0 + }, + scale = { + x = 0.5, + y = 0.5, + z = 0.5 + } + }, + + model = { + model_name = "boat", + material_name = "shiny" + }, + + script = { + lua_script = "game/ECSScene/scripts/boat_script.lua" + } +} diff --git a/resources/game/ECSScene/game_objects/duck.lua b/resources/game/ECSScene/game_objects/duck.lua new file mode 100644 index 00000000..ebdc36ef --- /dev/null +++ b/resources/game/ECSScene/game_objects/duck.lua @@ -0,0 +1,27 @@ +entity = { + name = "Duck", + + transform = { + position = { + x = 0, + y = 2, + z = 0 + }, + rotation = { + x = 0, + y = 0, + z = 0 + }, + scale = { + x = 2, + y = 2, + z = 2 + } + }, + + md2_animation = { + md2_name = "duck", + texture_name = "duck", + material_name = "shiny" + } +} diff --git a/resources/game/ECSScene/game_objects/escape_boat.lua b/resources/game/ECSScene/game_objects/escape_boat.lua new file mode 100644 index 00000000..51b2f261 --- /dev/null +++ b/resources/game/ECSScene/game_objects/escape_boat.lua @@ -0,0 +1,30 @@ +entity = { + name = "Escape boat", + + transform = { + position = { + x = 12, + y = 2.5, + z = 210 + }, + rotation = { + x = 0, + y = 50, + z = 0 + }, + scale = { + x = 0.5, + y = 0.5, + z = 0.5 + } + }, + + model = { + model_name = "boat", + material_name = "shiny" + }, + + script = { + lua_script = "game/ECSScene/scripts/boat_script.lua" + } +} diff --git a/resources/game/ECSScene/game_objects/flashlight.lua b/resources/game/ECSScene/game_objects/flashlight.lua new file mode 100644 index 00000000..20ff22a0 --- /dev/null +++ b/resources/game/ECSScene/game_objects/flashlight.lua @@ -0,0 +1,28 @@ +entity = { + name = "Flashlight", + + spot_light = { + shadow_width = 1024, + shadow_height = 1024, + near_plane = 0.1, + far_plane = 100, + + color = { r = 1, g = 1, b = 1 }, + + ambient_intensity = 0, + diffuse_intensity = 1, + + position = { x = 0, y = 0, z = 0 }, + direction = { x = 0, y = 0, z = 0 }, + + constant = 1, + linear = 0, + quadratic = 0, + + edge = 15, + }, + + script = { + lua_script = "game/ECSScene/scripts/flashlight_script.lua" + } +} diff --git a/resources/game/ECSScene/game_objects/lighthouse.lua b/resources/game/ECSScene/game_objects/lighthouse.lua new file mode 100644 index 00000000..78e30997 --- /dev/null +++ b/resources/game/ECSScene/game_objects/lighthouse.lua @@ -0,0 +1,90 @@ +entity = { + name = "Lighthouse", + + transform = { + position = { + x = -50, + y = 2, + z = 0 + }, + rotation = { + x = 270, + y = 0, + z = 0 + }, + scale = { + x = 0.2, + y = 0.2, + z = 0.2 + }, + }, + + script = { + lua_script = "game/ECSScene/scripts/lighthouse_script.lua" + }, + + model = { + model_name = "lighthouse", + material_name = "shiny" + }, + + point_light = { + shadow_width = 1024, + shadow_height = 1024, + near_plane = 0.1, + far_plane = 100, + + color = { + r = 1, + g = 1, + b = 1 + }, + + ambient_intensity = 0, + diffuse_intensity = 1, + + position = { + x = -50, + y = 40, + z = 0 + }, + + constant = 0, + linear = 0, + quadratic = 1 + }, + + spot_light = { + shadow_width = 1024, + shadow_height = 1024, + near_plane = 0.1, + far_plane = 100, + + color = { + r = 1, + g = 1, + b = 1 + }, + + ambient_intensity = 0, + diffuse_intensity = 2, + + position = { + x = -50.0, + y = 40.0, + z = 0.0 + }, + + constant = 1, + linear = 0, + quadratic = 0, + + direction = { + x = 0.87, + y = -0.2, + z = 0.44 + }, + + edge = 10 + } +} diff --git a/resources/game/ECSScene/game_objects/moonlight.lua b/resources/game/ECSScene/game_objects/moonlight.lua new file mode 100644 index 00000000..6f105ad0 --- /dev/null +++ b/resources/game/ECSScene/game_objects/moonlight.lua @@ -0,0 +1,29 @@ +entity = { + name = "Moonlight", + + directional_light = { + shadow_width = 1024, + shadow_height = 1024, + near_plane = 1.0, + far_plane = 256.0, + ortho_left = -64.0, + ortho_right = 64.0, + ortho_bottom = -64.0, + ortho_top = 64.0, + + color = { + r = 0.72, + g = 0.72, + b = 0.72 + }, + + ambient_intensity = 1, + diffuse_intensity = 1, + + direction = { + x = -15, + y = -15, + z = 18.5 + } + } +} diff --git a/resources/game/ECSScene/game_objects/player.lua b/resources/game/ECSScene/game_objects/player.lua new file mode 100644 index 00000000..62afba44 --- /dev/null +++ b/resources/game/ECSScene/game_objects/player.lua @@ -0,0 +1,7 @@ +entity = { + name = "Player", + + script = { + lua_script = "game/ECSScene/scripts/player_script.lua" + } +} diff --git a/resources/game/ECSScene/game_objects/terrain.lua b/resources/game/ECSScene/game_objects/terrain.lua new file mode 100644 index 00000000..451088c9 --- /dev/null +++ b/resources/game/ECSScene/game_objects/terrain.lua @@ -0,0 +1,34 @@ +entity = { + name = "Terrain", + + transform = { + position = { + x = 0, + y = 0, + z = 0 + }, + rotation = { + x = 0, + y = 0, + z = 0 + }, + scale = { + x = 2, + y = 0.05, + z = 2 + } + }, + + terrain = { + terrain_name = "terrain", + texture_name = "grass", + material_name = "shiny", + detailmap_name = "grass", + + pathfinding = { --relative to height map values (not in game coordinates) + min_value = 60.0, + max_value = 256.0, + max_distance = 100.0 + } + } +} diff --git a/resources/game/ECSScene/game_objects/water.lua b/resources/game/ECSScene/game_objects/water.lua new file mode 100644 index 00000000..44871ccc --- /dev/null +++ b/resources/game/ECSScene/game_objects/water.lua @@ -0,0 +1,20 @@ +entity = { + name = "Water", + + transform = { + -- Position set internally in the water_script.lua + position = { x = 0, y = 0, z = 0 }, + rotation = { x = 0, y = 0, z = 0 }, + scale = { x = 100, y = 1, z = 100 } + }, + + mesh = { + mesh_name = "water", + texture_name = "water", + material_name = "shiny" + }, + + script = { + lua_script = "game/ECSScene/scripts/water_script.lua" + } +} diff --git a/resources/game/ECSScene/scripts/boat_script.lua b/resources/game/ECSScene/scripts/boat_script.lua new file mode 100644 index 00000000..35bb2b59 --- /dev/null +++ b/resources/game/ECSScene/scripts/boat_script.lua @@ -0,0 +1,13 @@ +var = {} + +function init(ecs, entity) + local transform = entity:get_transform_component() + + local boat_pos = Audio.vec3df.new(transform.position.x, transform.position.y, transform.position.z) + + Audio.play_3d_sound("duckandcover", boat_pos, true, 5.0) +end + +function update(ecs, entity) + +end diff --git a/resources/game/ECSScene/scripts/credits_menu.lua b/resources/game/ECSScene/scripts/credits_menu.lua new file mode 100644 index 00000000..6818c6da --- /dev/null +++ b/resources/game/ECSScene/scripts/credits_menu.lua @@ -0,0 +1,11 @@ +gui_setWindowSize(640, 480, 2) +gui_setWindowPos(320, 0, 1) +gui_begin("Credits") +gui_text("Credits") +gui_image("credits") +local exit = gui_button("EXIT", 150, 50) +gui_end() + +if exit then + Window.close() +end diff --git a/resources/game/ECSScene/scripts/flashlight_script.lua b/resources/game/ECSScene/scripts/flashlight_script.lua new file mode 100644 index 00000000..516b8eca --- /dev/null +++ b/resources/game/ECSScene/scripts/flashlight_script.lua @@ -0,0 +1,14 @@ +var = {} + +function init(ecs, entity) + +end + +function update(ecs, entity) + local spotlight = entity:get_spot_light_component() + + spotlight.position = Camera.get_position() + spotlight.direction = Camera.get_direction() + + spotlight.position.y = spotlight.position.y - 0.3; +end diff --git a/resources/game/ECSScene/scripts/lighthouse_script.lua b/resources/game/ECSScene/scripts/lighthouse_script.lua new file mode 100644 index 00000000..fdfc8ad1 --- /dev/null +++ b/resources/game/ECSScene/scripts/lighthouse_script.lua @@ -0,0 +1,20 @@ +var = { + light_ori_position = Math.vec3.new(-50, 40, 0) +} + +function init(ecs, entity) + +end + +function update(ecs, entity) + local spotlight_rotation = Math.euler_to_quat(Math.vec3.new(0, Math.radians(0.01), 0)) + + local spotlight = entity:get_spot_light_component() + local pointlight = entity:get_point_light_component() + + spotlight.direction = Math.mul(spotlight_rotation, spotlight.direction) + + local pointlight_translate = Math.mul(Math.normalize(Math.vec3.new(spotlight.direction.x, 0, spotlight.direction.z)), 5) + + pointlight.position = Math.add(var.light_ori_position, pointlight_translate) +end diff --git a/resources/game/ECSScene/scripts/network_chat_read_menu.lua b/resources/game/ECSScene/scripts/network_chat_read_menu.lua new file mode 100644 index 00000000..4982cad6 --- /dev/null +++ b/resources/game/ECSScene/scripts/network_chat_read_menu.lua @@ -0,0 +1,14 @@ +gui_setWindowSize(300, 300, 2) +gui_setWindowPos(300, 500, 1) + +gui_begin("Chat reader") + gui_text("Chat Window") + if chatLog == nil then + chatLog = "This is the beginning of the chat log\n" + end + if network_get_message() ~= " " then + chatLog = chatLog .. network_get_message() + end + gui_text(chatLog) + +gui_end() diff --git a/resources/game/ECSScene/scripts/network_chat_send_menu.lua b/resources/game/ECSScene/scripts/network_chat_send_menu.lua new file mode 100644 index 00000000..19355322 --- /dev/null +++ b/resources/game/ECSScene/scripts/network_chat_send_menu.lua @@ -0,0 +1,22 @@ +gui_setWindowSize(300, 300, 2) +gui_setWindowPos(0, 500, 1) + +gui_begin("Chat sender") + +local message = gui_luaInputText("Message: ") +if network_return_message() ~= nil then + savedMessage = network_return_message() +else + savedMessage = "" +end +gui_text(savedMessage) +local send = gui_button("Send", 300, 50) + + +network_retain_message(message) + +if send then + network_send_message() +end + +gui_end() diff --git a/resources/game/ECSScene/scripts/network_menu.lua b/resources/game/ECSScene/scripts/network_menu.lua new file mode 100644 index 00000000..a4a3d5f4 --- /dev/null +++ b/resources/game/ECSScene/scripts/network_menu.lua @@ -0,0 +1,49 @@ +gui_setWindowSize(300, 300, 2) +gui_setWindowPos(500, 0, 1) + +gui_begin("Network Menu") + +gui_text("--This is the network test menu--") +local Init = gui_button("Init", 150, 50) +local Start = gui_button("Start Server", 150, 50) +local ServerIP = gui_luaInputText("Enter Server IP: ") +if network_return_IP() ~= nil then + fullIP = network_return_IP() +else + fullIP = "" +end +gui_text(fullIP) +local Connect = gui_button("Connect", 150, 50) +--local Exit = gui_button("Exit Menu", 150, 50) + +if (network_connection_status() == true) then + gui_text("You are connected!") + else + gui_text("You are not connected") +end + +gui_end() + +network_retain_IP(ServerIP) + +if (Init) then + create_network_manager(true) +end + + +if(Start) then + start_server(true) +end + +if(Connect) then + network_client_connect() +end + +if(network_connection_status()) then + dofile "game/ECSScene/scripts/network_chat_send_menu.lua" + dofile "game/ECSScene/scripts/network_chat_read_menu.lua" +end + +if(Time.is_paused()==false) then + network_terminate() +end diff --git a/resources/game/ECSScene/scripts/pause_menu.lua b/resources/game/ECSScene/scripts/pause_menu.lua new file mode 100644 index 00000000..e2d9f121 --- /dev/null +++ b/resources/game/ECSScene/scripts/pause_menu.lua @@ -0,0 +1,34 @@ +gui_setWindowSize(300, 300, 2) +gui_setWindowPos(0, 0, 1) + +gui_begin("Pause Menu") + +gui_text("--Game is currently paused--") +local unpause = gui_button("UNPAUSE", 150, 50) +local save = gui_button("SAVE", 150, 50) +local load = gui_button("LOAD", 150, 50) +local credits = gui_button("EXIT", 150, 50) +gui_text("gui frame rate: " .. gui_guiFrameRate()) + +gui_end() + +if (unpause) then + Window.set_cursor_visible(false) + Time.set_pause(false) +end + +if (save) then + setBoolData("save_game", true); +end + +if (load) then + setBoolData("load_game", true); +end + +if (credits) then + setBoolData("show_credits", true) +end + +if (getBoolData("show_credits", false)) then + dofile "game/ECSScene/scripts/credits_menu.lua" +end diff --git a/resources/game/ECSScene/scripts/player_script.lua b/resources/game/ECSScene/scripts/player_script.lua new file mode 100644 index 00000000..e952f02b --- /dev/null +++ b/resources/game/ECSScene/scripts/player_script.lua @@ -0,0 +1,73 @@ +var = { + speed = 1.0 +} + +function init(ecs, entity) +end + +function update(ecs, entity) + if (Input.get_key_state("w"):is_key_hold()) then + Camera.move(Movement.forward, Time.get_delta_time() * var.speed) + end + + if (Input.get_key_state("a"):is_key_hold()) then + Camera.move(Movement.left, Time.get_delta_time() * var.speed) + end + + if (Input.get_key_state("s"):is_key_hold()) then + Camera.move(Movement.backward, Time.get_delta_time() * var.speed) + end + + if (Input.get_key_state("d"):is_key_hold()) then + Camera.move(Movement.right, Time.get_delta_time() * var.speed) + end + + if (Input.get_key_state("z"):is_key_pressed()) then + Camera.toggle_noclip() + + if (Camera.is_noclip()) then + DebugLogger.log_color("warning", "You are cheating!", GUI.vec4.new(1.0, 0.0, 0.0, 1.0)) + end + end + + if (Input.get_key_state("f11"):is_key_pressed()) then + Window.set_fullscreen(not Window.is_fullscreen()) + end + + if (Input.get_key_state("escape"):is_key_pressed()) then + Window.set_cursor_visible(not Window.is_cursor_visible()) + Time.set_pause(not Time.is_paused()) + if (Time.is_paused()) then + DebugLogger.log("info", "Game is paused.") + else + DebugLogger.log("info", "Game is unpaused.") + end + + end + + if (Input.get_key_state("k"):is_key_pressed()) then + Renderer.toggle_wireframe() + end + + if (Input.get_key_state("q"):is_key_pressed()) then + var.speed = var.speed / 2 + end + + if (Input.get_key_state("e"):is_key_pressed()) then + var.speed = var.speed * 2 + end + + if (not Camera.is_noclip()) then + local transform = entity:get_transform_component() + + transform.position = Camera.get_position() + transform.position.y = 1.65 + Terrain.get_height("terrain", transform.position, Math.vec3.new(2, 0.05, 2)) + + Camera.set_position(transform.position) + end + + if (Time.is_paused()) then + dofile "game/ECSScene/scripts/pause_menu.lua" + dofile "game/ECSScene/scripts/network_menu.lua" + end +end diff --git a/resources/game/ECSScene/scripts/water_script.lua b/resources/game/ECSScene/scripts/water_script.lua new file mode 100644 index 00000000..26833b44 --- /dev/null +++ b/resources/game/ECSScene/scripts/water_script.lua @@ -0,0 +1,26 @@ +var = { + water_position = Math.vec3.new(0, 2.5, 0), + offset_multiplier = Math.vec3.new(1.1, 1.2, 1.7), + intensity = Math.vec3.new(5, 10, 5), + time = 0.0, +} + +function init(ecs, entity) + +end + +function update(ecs, entity) + var.time = var.time + Time.get_delta_time() + + local water_movement = Math.div(Math.sin(Math.mul(var.time, var.offset_multiplier)), var.intensity) + + local transform = entity:get_transform_component() + + transform.position = Math.add(var.water_position, water_movement) + + -- ECS.each_mesh(ecs, function(entity) + -- local transform = entity:get_transform_component() + + -- print(transform.position.x .. " " .. transform.position.y .. " " .. transform.position.z) + -- end) +end diff --git a/resources/scripts/AI/Duck.lua b/resources/game/TestScene/AI/Duck.lua similarity index 98% rename from resources/scripts/AI/Duck.lua rename to resources/game/TestScene/AI/Duck.lua index 2dffd312..8c150c2a 100644 --- a/resources/scripts/AI/Duck.lua +++ b/resources/game/TestScene/AI/Duck.lua @@ -40,6 +40,7 @@ baseObject = { linearDamping = 0.999, angularDamping = 0.999, sleep = 1, + savable = true, numOfColliders = 1 } diff --git a/resources/scripts/AI/Ghost.lua b/resources/game/TestScene/AI/Ghost.lua similarity index 98% rename from resources/scripts/AI/Ghost.lua rename to resources/game/TestScene/AI/Ghost.lua index 53ef1fce..8bd3b1d5 100644 --- a/resources/scripts/AI/Ghost.lua +++ b/resources/game/TestScene/AI/Ghost.lua @@ -41,6 +41,7 @@ baseObject = { linearDamping = 0.999, angularDamping = 0.999, sleep = 1, + savable = true, numOfColliders = 1 } diff --git a/resources/scripts/AI/Human.lua b/resources/game/TestScene/AI/Human.lua similarity index 97% rename from resources/scripts/AI/Human.lua rename to resources/game/TestScene/AI/Human.lua index 270c9736..8071dc51 100644 --- a/resources/scripts/AI/Human.lua +++ b/resources/game/TestScene/AI/Human.lua @@ -25,6 +25,7 @@ baseObject = { linearDamping = 0, angularDamping = 0, sleep = 1, + savable = true, numOfColliders = 1 } diff --git a/resources/scripts/AI/_MasterCreation.lua b/resources/game/TestScene/AI/_MasterCreation.lua similarity index 99% rename from resources/scripts/AI/_MasterCreation.lua rename to resources/game/TestScene/AI/_MasterCreation.lua index 7797ece6..ce957b9a 100644 --- a/resources/scripts/AI/_MasterCreation.lua +++ b/resources/game/TestScene/AI/_MasterCreation.lua @@ -1,3 +1,4 @@ + --Player addGameObject("scripts/AI/player.lua") addGameObject("scripts/AI/guihealthBar.lua") diff --git a/resources/scripts/AI/guihealthBar.lua b/resources/game/TestScene/AI/guihealthBar.lua similarity index 87% rename from resources/scripts/AI/guihealthBar.lua rename to resources/game/TestScene/AI/guihealthBar.lua index 4b2fa523..e603ccc0 100644 --- a/resources/scripts/AI/guihealthBar.lua +++ b/resources/game/TestScene/AI/guihealthBar.lua @@ -9,7 +9,8 @@ baseObject = { angle = 0, xScale = 1, yScale = 1, - zScale = 1 + zScale = 1, + savable = true } script = "scripts/AI/healthBar.lua" diff --git a/resources/scripts/AI/healthBar.lua b/resources/game/TestScene/AI/healthBar.lua similarity index 72% rename from resources/scripts/AI/healthBar.lua rename to resources/game/TestScene/AI/healthBar.lua index c35953f4..5cb23dc9 100644 --- a/resources/scripts/AI/healthBar.lua +++ b/resources/game/TestScene/AI/healthBar.lua @@ -1,4 +1,4 @@ -if(get_pause_game() == false and get_load() == false) then +if(get_pause_game() == false and getBoolData("load_game", false) == false) then gui_setWindowSize(600, 50, 2) gui_setWindowPos(0, 0, 2) gui_begin("HEALTH") diff --git a/resources/scripts/AI/player.lua b/resources/game/TestScene/AI/player.lua similarity index 97% rename from resources/scripts/AI/player.lua rename to resources/game/TestScene/AI/player.lua index 0c55b163..001c785a 100644 --- a/resources/scripts/AI/player.lua +++ b/resources/game/TestScene/AI/player.lua @@ -7,6 +7,7 @@ baseObject = { yRotation = 1, zRotation = 0, angle = 90, + savable = true, xScale = 0.0001, yScale = 0.0001, zScale = 0.0001, diff --git a/resources/scripts/AI/setupPlayerFSM.lua b/resources/game/TestScene/AI/setupPlayerFSM.lua similarity index 100% rename from resources/scripts/AI/setupPlayerFSM.lua rename to resources/game/TestScene/AI/setupPlayerFSM.lua diff --git a/resources/scripts/AI/statemachine.lua b/resources/game/TestScene/AI/statemachine.lua similarity index 89% rename from resources/scripts/AI/statemachine.lua rename to resources/game/TestScene/AI/statemachine.lua index dedfc8a3..4b050959 100644 --- a/resources/scripts/AI/statemachine.lua +++ b/resources/game/TestScene/AI/statemachine.lua @@ -12,7 +12,7 @@ end state_player["execute"] = function(player) if(player.dead) then - load_game(true) + setBoolData("load_game", true) end local pos = vector2D.new() @@ -49,11 +49,10 @@ end state_global["execute"] = function(player) - --print("in global") - if(player.health <= 0) then - player.dead = true - end - + print("in global state - statemachine.lua") + --if(player.health <= 0) then + -- player.dead = true + --end end @@ -67,76 +66,6 @@ state_global["onMessage"] = function(player, msg) end -------------------------------------------------------------------------------- - --- create the idle state - -------------------------------------------------------------------------------- -state_idle = {} - - -state_idle["enter"] = function(player) - -end - - -state_idle["execute"] = function(player) - if(player.dead == true) then - print("Entity: ", player.id, " | Faction: ", player.faction, " | Idle -> Death", " | Reason: Health 0") - player:getFSM():changeState("state_death") - end - - local pos = vector2D.new() - pos:set(camera_pos_x(), camera_pos_z()) - player:set_target_position(pos.x, pos.y) - - local playerX = player:getX() - local playerZ = player:getZ() - - local distance = vector2Length(pos.x - playerX, pos.y - playerZ) - - - if (distance < 5) then - player:moveNPC(camera_pos_x(), camera_pos_z(), 0.1) - else - --player:pathfindToPoint(playerX, playerZ, pos.x, pos.y) - --player:followWaypoint(false) - if(player:followWaypoint(false)) then - player:pathfindToPoint(playerX, playerZ, pos.x, pos.y) - end - end -end - - -state_idle["exit"] = function(player) - -end - -state_idle["onMessage"] = function(player, msg) - if (msg.msg == 2) then - player.health = player.health - msg.extraInfo - end - - -end - - - - - - - - - - - - - - - - - - @@ -228,7 +157,7 @@ end state_chase["execute"] = function(player) - resetSaveTime() + setIntData("last_save_time", current_time()) if(player:watchForEnemy(15) == false) then print("Entity: ", player.id, " | Faction: ", player.faction, " | Chase -> Patrol", " | Reason: Target lost") @@ -275,7 +204,7 @@ end state_attack["execute"] = function(player) player:stopMovement(); - resetSaveTime() + setIntData("last_save_time", current_time()) local entityMgr = entityManager.new() local target = entityMgr.getEntity(player.target_id) @@ -497,7 +426,7 @@ end state_ghost_chase["execute"] = function(player) - resetSaveTime() + setIntData("last_save_time", current_time()) if(player:watchForEnemy(12) == false) then print("Entity: ", player.id, " | Faction: ", player.faction, " | Ghsot Chase -> Ghost Idle", " | Reason: Target lost") diff --git a/resources/scripts/Arrow.lua b/resources/game/TestScene/Arrow.lua similarity index 93% rename from resources/scripts/Arrow.lua rename to resources/game/TestScene/Arrow.lua index 5aa40468..ba4dd135 100644 --- a/resources/scripts/Arrow.lua +++ b/resources/game/TestScene/Arrow.lua @@ -7,6 +7,7 @@ baseObject = { yRotation = 0, zRotation = -1.2, angle = 90, + savable = true, xScale = 0.6, yScale = 0.6, zScale = 0.6 diff --git a/resources/scripts/Boat.lua b/resources/game/TestScene/Boat.lua similarity index 97% rename from resources/scripts/Boat.lua rename to resources/game/TestScene/Boat.lua index 8bb8cca4..2d566ae3 100644 --- a/resources/scripts/Boat.lua +++ b/resources/game/TestScene/Boat.lua @@ -7,6 +7,7 @@ baseObject = { yRotation = 1, zRotation = 0, angle = -180, + savable = true, xScale = 0.5, yScale = 0.5, zScale = 0.5, diff --git a/resources/scripts/Bow.lua b/resources/game/TestScene/Bow.lua similarity index 93% rename from resources/scripts/Bow.lua rename to resources/game/TestScene/Bow.lua index 8558225c..d3c7a729 100644 --- a/resources/scripts/Bow.lua +++ b/resources/game/TestScene/Bow.lua @@ -7,6 +7,7 @@ baseObject = { yRotation = 0, zRotation = 0, angle = 90, + savable = true, xScale = 0.3, yScale = 0.3, zScale = 0.3 diff --git a/resources/scripts/Cat.lua b/resources/game/TestScene/Cat.lua similarity index 97% rename from resources/scripts/Cat.lua rename to resources/game/TestScene/Cat.lua index 41b7c862..7736dacd 100644 --- a/resources/scripts/Cat.lua +++ b/resources/game/TestScene/Cat.lua @@ -11,6 +11,7 @@ baseObject = { yRotation = 0, zRotation = 0, angle = -90, + savable = true, xScale = 0.1, yScale = 0.1, zScale = 0.1, diff --git a/resources/scripts/CatPhysics.lua b/resources/game/TestScene/CatPhysics.lua similarity index 97% rename from resources/scripts/CatPhysics.lua rename to resources/game/TestScene/CatPhysics.lua index 6ace7cfd..787648d0 100644 --- a/resources/scripts/CatPhysics.lua +++ b/resources/game/TestScene/CatPhysics.lua @@ -7,6 +7,7 @@ baseObject = { yRotation = 0, zRotation = 0, angle = -90, + savable = true, xScale = 0.1, yScale = 0.1, zScale = 0.1, diff --git a/resources/scripts/CatPhysics2.lua b/resources/game/TestScene/CatPhysics2.lua similarity index 96% rename from resources/scripts/CatPhysics2.lua rename to resources/game/TestScene/CatPhysics2.lua index bd2bc20f..ceed17fe 100644 --- a/resources/scripts/CatPhysics2.lua +++ b/resources/game/TestScene/CatPhysics2.lua @@ -7,6 +7,7 @@ baseObject = { yRotation = 0, zRotation = 0, angle = -90, + savable = true, xScale = 0.1, yScale = 0.1, zScale = 0.1, diff --git a/resources/scripts/EscapeBoat.lua b/resources/game/TestScene/EscapeBoat.lua similarity index 97% rename from resources/scripts/EscapeBoat.lua rename to resources/game/TestScene/EscapeBoat.lua index 03c90289..00e2ff78 100644 --- a/resources/scripts/EscapeBoat.lua +++ b/resources/game/TestScene/EscapeBoat.lua @@ -7,6 +7,7 @@ baseObject = { yRotation = 1, zRotation = 0, angle = 50, + savable = true, xScale = 1, yScale = 1, zScale = 1, diff --git a/resources/scripts/Ghost.lua b/resources/game/TestScene/Ghost.lua similarity index 100% rename from resources/scripts/Ghost.lua rename to resources/game/TestScene/Ghost.lua diff --git a/resources/scripts/Human.lua b/resources/game/TestScene/Human.lua similarity index 100% rename from resources/scripts/Human.lua rename to resources/game/TestScene/Human.lua diff --git a/resources/scripts/Lighthouse.lua b/resources/game/TestScene/Lighthouse.lua similarity index 93% rename from resources/scripts/Lighthouse.lua rename to resources/game/TestScene/Lighthouse.lua index 215795e0..2de62dc3 100644 --- a/resources/scripts/Lighthouse.lua +++ b/resources/game/TestScene/Lighthouse.lua @@ -7,6 +7,7 @@ baseObject = { yRotation = 0, zRotation = 0, angle = 270, + savable = true, xScale = 0.2, yScale = 0.2, zScale = 0.2 diff --git a/resources/scripts/Opponent.lua b/resources/game/TestScene/Opponent.lua similarity index 94% rename from resources/scripts/Opponent.lua rename to resources/game/TestScene/Opponent.lua index c14ec13d..e3037ac4 100644 --- a/resources/scripts/Opponent.lua +++ b/resources/game/TestScene/Opponent.lua @@ -7,6 +7,7 @@ baseObject = { yRotation = 0, zRotation = 0, angle = -90, + savable = false, xScale = 0.01, yScale = 0.01, zScale = 0.01 diff --git a/resources/scripts/Rock.lua b/resources/game/TestScene/Rock.lua similarity index 97% rename from resources/scripts/Rock.lua rename to resources/game/TestScene/Rock.lua index c54efbce..4de1f609 100644 --- a/resources/scripts/Rock.lua +++ b/resources/game/TestScene/Rock.lua @@ -11,6 +11,7 @@ baseObject = { yRotation = 0, zRotation = 0, angle = 1, + savable = true, xScale = 0.1, yScale = 0.1, zScale = 0.1, diff --git a/resources/scripts/Tree.lua b/resources/game/TestScene/Tree.lua similarity index 97% rename from resources/scripts/Tree.lua rename to resources/game/TestScene/Tree.lua index 561509f9..77d78faa 100644 --- a/resources/scripts/Tree.lua +++ b/resources/game/TestScene/Tree.lua @@ -37,6 +37,7 @@ baseObject = { linearDamping = 0, angularDamping = 0, sleep = 1, + savable = true, numOfColliders = 1 } diff --git a/resources/scripts/Water.lua b/resources/game/TestScene/Water.lua similarity index 94% rename from resources/scripts/Water.lua rename to resources/game/TestScene/Water.lua index f44a4d8e..382748b1 100644 --- a/resources/scripts/Water.lua +++ b/resources/game/TestScene/Water.lua @@ -7,6 +7,7 @@ baseObject = { yRotation = 1, zRotation = 0, angle = 0, + savable = true, xScale = 1, yScale = 1, zScale = 1 diff --git a/resources/scripts/_MasterCreation.lua b/resources/game/TestScene/_MasterCreation.lua similarity index 94% rename from resources/scripts/_MasterCreation.lua rename to resources/game/TestScene/_MasterCreation.lua index 3d39aa2b..b78c3ee9 100644 --- a/resources/scripts/_MasterCreation.lua +++ b/resources/game/TestScene/_MasterCreation.lua @@ -1,5 +1,6 @@ addGameObject("scripts/terrain.lua") -addGameObject("scripts/skybox.lua") +--addGameObject("scripts/skybox.lua") + addGameObject("scripts/moonlight.lua") addGameObject("scripts/lighthouse_pointlight.lua") addGameObject("scripts/lighthouse_spotlight.lua") @@ -49,3 +50,4 @@ addGameObject("scripts/gui/EndGame.lua") addGameObject("scripts/gui/EndGameNetworkedPvP.lua") addGameObject("scripts/EscapeBoat.lua") addGameObject("scripts/bigArrow.lua") +addGameObject("scripts/input_setup.lua") diff --git a/resources/scripts/_Materials.lua b/resources/game/TestScene/_Materials.lua similarity index 100% rename from resources/scripts/_Materials.lua rename to resources/game/TestScene/_Materials.lua diff --git a/resources/scripts/_Sounds.lua b/resources/game/TestScene/_Sounds.lua similarity index 100% rename from resources/scripts/_Sounds.lua rename to resources/game/TestScene/_Sounds.lua diff --git a/resources/scripts/basicMenu.lua b/resources/game/TestScene/basicMenu.lua similarity index 100% rename from resources/scripts/basicMenu.lua rename to resources/game/TestScene/basicMenu.lua diff --git a/resources/scripts/bigArrow.lua b/resources/game/TestScene/bigArrow.lua similarity index 97% rename from resources/scripts/bigArrow.lua rename to resources/game/TestScene/bigArrow.lua index cc540bb0..b8ff26b3 100644 --- a/resources/scripts/bigArrow.lua +++ b/resources/game/TestScene/bigArrow.lua @@ -7,6 +7,7 @@ baseObject = { yRotation = 1, zRotation = 0, angle = 45, + savable = true, xScale = 3, yScale = 3, zScale = 3, diff --git a/resources/scripts/bullet.lua b/resources/game/TestScene/bullet.lua similarity index 98% rename from resources/scripts/bullet.lua rename to resources/game/TestScene/bullet.lua index c0ea3770..ec2a24a5 100644 --- a/resources/scripts/bullet.lua +++ b/resources/game/TestScene/bullet.lua @@ -7,6 +7,7 @@ baseObject = { yRotation = camera_look_x(), zRotation = camera_look_x(), angle = -90, + savable = true, xScale = 0.01, yScale = 0.01, zScale = 0.01, diff --git a/resources/scripts/bulletLogic.lua b/resources/game/TestScene/bulletLogic.lua similarity index 100% rename from resources/scripts/bulletLogic.lua rename to resources/game/TestScene/bulletLogic.lua diff --git a/resources/scripts/chatMenuRead.lua b/resources/game/TestScene/chatMenuRead.lua similarity index 100% rename from resources/scripts/chatMenuRead.lua rename to resources/game/TestScene/chatMenuRead.lua diff --git a/resources/scripts/chatMenuReadSetup.lua b/resources/game/TestScene/chatMenuReadSetup.lua similarity index 92% rename from resources/scripts/chatMenuReadSetup.lua rename to resources/game/TestScene/chatMenuReadSetup.lua index f518e8f5..be0d9ef0 100644 --- a/resources/scripts/chatMenuReadSetup.lua +++ b/resources/game/TestScene/chatMenuReadSetup.lua @@ -7,6 +7,7 @@ baseObject = { yRotation = 1, zRotation = 0, angle = 0, + savable = true, xScale = 1, yScale = 1, zScale = 1 diff --git a/resources/scripts/chatMenuSend.lua b/resources/game/TestScene/chatMenuSend.lua similarity index 100% rename from resources/scripts/chatMenuSend.lua rename to resources/game/TestScene/chatMenuSend.lua diff --git a/resources/scripts/chatMenuSendSetup.lua b/resources/game/TestScene/chatMenuSendSetup.lua similarity index 92% rename from resources/scripts/chatMenuSendSetup.lua rename to resources/game/TestScene/chatMenuSendSetup.lua index 2efca120..a207bb75 100644 --- a/resources/scripts/chatMenuSendSetup.lua +++ b/resources/game/TestScene/chatMenuSendSetup.lua @@ -7,6 +7,7 @@ baseObject = { yRotation = 1, zRotation = 0, angle = 0, + savable = true, xScale = 1, yScale = 1, zScale = 1 diff --git a/resources/scripts/creator.lua b/resources/game/TestScene/creator.lua similarity index 91% rename from resources/scripts/creator.lua rename to resources/game/TestScene/creator.lua index 3cffb453..8a7d324c 100644 --- a/resources/scripts/creator.lua +++ b/resources/game/TestScene/creator.lua @@ -7,6 +7,7 @@ baseObject = { yRotation = 1, zRotation = 0, angle = 0, + savable = true, xScale = 1, yScale = 1, zScale = 1, diff --git a/resources/scripts/credits.lua b/resources/game/TestScene/credits.lua similarity index 85% rename from resources/scripts/credits.lua rename to resources/game/TestScene/credits.lua index f55d9b97..5414ced2 100644 --- a/resources/scripts/credits.lua +++ b/resources/game/TestScene/credits.lua @@ -1,4 +1,4 @@ -if get_credits() then +if getBoolData("show_credits", false) then gui_setWindowSize(640, 480, 2) gui_setWindowPos(320, 0, 1) gui_begin("Credits") diff --git a/resources/scripts/credits_setup.lua b/resources/game/TestScene/credits_setup.lua similarity index 92% rename from resources/scripts/credits_setup.lua rename to resources/game/TestScene/credits_setup.lua index 673f8cc5..9721815d 100644 --- a/resources/scripts/credits_setup.lua +++ b/resources/game/TestScene/credits_setup.lua @@ -7,6 +7,7 @@ baseObject = { yRotation = 1, zRotation = 0, angle = 0, + savable = true, xScale = 1, yScale = 1, zScale = 1 diff --git a/resources/scripts/destroyer.lua b/resources/game/TestScene/destroyer.lua similarity index 100% rename from resources/scripts/destroyer.lua rename to resources/game/TestScene/destroyer.lua diff --git a/resources/game/TestScene/ecs.lua b/resources/game/TestScene/ecs.lua new file mode 100644 index 00000000..4c63c63c --- /dev/null +++ b/resources/game/TestScene/ecs.lua @@ -0,0 +1,17 @@ +entity = { + transform = { + position = { + x = 10, + y = 5, + z = 10 + } + } + + model = { + + } + + script = { + lua_script = "ecs_script.lua" + } +} \ No newline at end of file diff --git a/resources/game/TestScene/ecs_script.lua b/resources/game/TestScene/ecs_script.lua new file mode 100644 index 00000000..896c4193 --- /dev/null +++ b/resources/game/TestScene/ecs_script.lua @@ -0,0 +1,11 @@ +this = { + health = 100 +} + +function init(entity) + +end + +function update(entity) + +end diff --git a/resources/scripts/gui/EndGame.lua b/resources/game/TestScene/gui/EndGame.lua similarity index 92% rename from resources/scripts/gui/EndGame.lua rename to resources/game/TestScene/gui/EndGame.lua index 406a9785..9742694d 100644 --- a/resources/scripts/gui/EndGame.lua +++ b/resources/game/TestScene/gui/EndGame.lua @@ -7,6 +7,7 @@ baseObject = { yRotation = 1, zRotation = 0, angle = 0, + savable = true, xScale = 1, yScale = 1, zScale = 1 diff --git a/resources/scripts/gui/EndGameNetworkedPvP.lua b/resources/game/TestScene/gui/EndGameNetworkedPvP.lua similarity index 92% rename from resources/scripts/gui/EndGameNetworkedPvP.lua rename to resources/game/TestScene/gui/EndGameNetworkedPvP.lua index 0b1e6aaa..6412dbed 100644 --- a/resources/scripts/gui/EndGameNetworkedPvP.lua +++ b/resources/game/TestScene/gui/EndGameNetworkedPvP.lua @@ -7,6 +7,7 @@ baseObject = { yRotation = 1, zRotation = 0, angle = 0, + savable = true, xScale = 1, yScale = 1, zScale = 1 diff --git a/resources/scripts/gui/EndMenu.lua b/resources/game/TestScene/gui/EndMenu.lua similarity index 79% rename from resources/scripts/gui/EndMenu.lua rename to resources/game/TestScene/gui/EndMenu.lua index b72673fc..18625223 100644 --- a/resources/scripts/gui/EndMenu.lua +++ b/resources/game/TestScene/gui/EndMenu.lua @@ -10,13 +10,13 @@ end if completed then - if(get_pause_game() == false) then + if(getBoolData("pause_game", true) == false) then local pos = Audio.vec3df.new(camera_pos_x(), camera_pos_y(), camera_pos_z()) Audio.play_3d_sound("congrats", pos, false, 5.0) end set_pause_game(true) - + setBoolData("pause_game", true) gui_setWindowSize(250, 260, 1) @@ -26,8 +26,8 @@ if completed then local isPressed = gui_button("Restart game", 200, 50) if isPressed == true then - load_from_scratch(true) - load_game(true) + setBoolData("reload_game", true) + setBoolData("load_game", true) end gui_end() end \ No newline at end of file diff --git a/resources/scripts/gui/EndMenuNetworkedPvP.lua b/resources/game/TestScene/gui/EndMenuNetworkedPvP.lua similarity index 100% rename from resources/scripts/gui/EndMenuNetworkedPvP.lua rename to resources/game/TestScene/gui/EndMenuNetworkedPvP.lua diff --git a/resources/scripts/guiBasic.lua b/resources/game/TestScene/guiBasic.lua similarity index 100% rename from resources/scripts/guiBasic.lua rename to resources/game/TestScene/guiBasic.lua diff --git a/resources/scripts/gunSetup.lua b/resources/game/TestScene/gunSetup.lua similarity index 80% rename from resources/scripts/gunSetup.lua rename to resources/game/TestScene/gunSetup.lua index 2c762a47..d708529d 100644 --- a/resources/scripts/gunSetup.lua +++ b/resources/game/TestScene/gunSetup.lua @@ -7,6 +7,7 @@ baseObject = { yRotation = 1, zRotation = 0, angle = 0, + savable = true, xScale = 1, yScale = 1, zScale = 1 @@ -14,4 +15,4 @@ baseObject = { script = "scripts/shootGun.lua" -set_shot_delay(0.25) +setFloatData("shot_delay", 0.25) diff --git a/resources/scripts/helpMenu.lua b/resources/game/TestScene/helpMenu.lua similarity index 85% rename from resources/scripts/helpMenu.lua rename to resources/game/TestScene/helpMenu.lua index 917c2f3d..6b388cf4 100644 --- a/resources/scripts/helpMenu.lua +++ b/resources/game/TestScene/helpMenu.lua @@ -1,5 +1,4 @@ - -if get_help_menu() then +if getBoolData("help_menu", false) then gui_setWindowSize(250, 260, 1) gui_setWindowPos(300, 0, 1) gui_begin("Help Menu") @@ -10,7 +9,7 @@ if get_help_menu() then gui_text(" - Wireframe : k") gui_text(" - Movement : WASD") gui_text(" - Look : Mouse") - gui_text(" - Shoot : Space") + gui_text(" - Shoot : Left mouse") gui_text(" - Networking : n") gui_text(" - PvP : p") gui_text("Objective:") @@ -18,4 +17,4 @@ if get_help_menu() then gui_text(" - Shoot to distract ducks") gui_text(" - Find the boat") gui_end() -end \ No newline at end of file +end diff --git a/resources/scripts/helpMenuSetup.lua b/resources/game/TestScene/helpMenuSetup.lua similarity index 92% rename from resources/scripts/helpMenuSetup.lua rename to resources/game/TestScene/helpMenuSetup.lua index 9e4cb676..85d5fcda 100644 --- a/resources/scripts/helpMenuSetup.lua +++ b/resources/game/TestScene/helpMenuSetup.lua @@ -7,6 +7,7 @@ baseObject = { yRotation = 1, zRotation = 0, angle = 0, + savable = true, xScale = 1, yScale = 1, zScale = 1 diff --git a/resources/game/TestScene/input_script.lua b/resources/game/TestScene/input_script.lua new file mode 100644 index 00000000..26c8bd00 --- /dev/null +++ b/resources/game/TestScene/input_script.lua @@ -0,0 +1,53 @@ +if (Input.get_key_state("escape"):is_key_pressed()) then + set_pause_game(not get_pause_game()) +end + +if (Input.get_key_state("n"):is_key_pressed()) then + exit_network_menu(not get_network_menu()) +end + +if (Input.get_key_state("p"):is_key_pressed()) then + exit_pvp_network_menu(not get_pvp_network_menu()) +end + +if (Input.get_key_state("m"):is_key_pressed()) then + setBoolData("help_menu", not getBoolData("help_menu", false)) +end + +if (Input.get_key_state("x"):is_key_pressed()) then + setBoolData("show_credits", not getBoolData("show_credits", false)) +end + +if (Input.get_key_state("k"):is_key_pressed()) then + Renderer.toggle_wireframe() +end + +if (not get_pause_game()) then + set_move_dir_x(0) + set_move_dir_y(0) + set_move_dir_z(0) + + if (Input.get_key_state("w"):is_key_hold()) then + calculate_direction(Movement.forward) + end + + if (Input.get_key_state("a"):is_key_hold()) then + calculate_direction(Movement.left) + end + + if (Input.get_key_state("s"):is_key_hold()) then + calculate_direction(Movement.backward) + end + + if (Input.get_key_state("d"):is_key_hold()) then + calculate_direction(Movement.right) + end + + if (Input.get_key_state("z"):is_key_pressed()) then + toggle_noclip() + end + + if (Input.get_mouse_key_state("mouse1"):is_key_pressed()) then + setBoolData("should_shoot", true) + end +end diff --git a/resources/game/TestScene/input_setup.lua b/resources/game/TestScene/input_setup.lua new file mode 100644 index 00000000..3aa8ab9f --- /dev/null +++ b/resources/game/TestScene/input_setup.lua @@ -0,0 +1,16 @@ +baseObject = { + type = "ScriptableObject", + xPos = 0, + yPos = 0, + zPos = 0, + xRotation = 0, + yRotation = 1, + zRotation = 0, + angle = 0, + savable = true, + xScale = 1, + yScale = 1, + zScale = 1 +} + +script = "scripts/input_script.lua" diff --git a/resources/scripts/lighthouse_pointlight.lua b/resources/game/TestScene/lighthouse_pointlight.lua similarity index 86% rename from resources/scripts/lighthouse_pointlight.lua rename to resources/game/TestScene/lighthouse_pointlight.lua index 4aca90ca..8bf58599 100644 --- a/resources/scripts/lighthouse_pointlight.lua +++ b/resources/game/TestScene/lighthouse_pointlight.lua @@ -1,5 +1,6 @@ baseObject = { - type = "PointLight" + type = "PointLight", + savable = true } light = { diff --git a/resources/scripts/lighthouse_spotlight.lua b/resources/game/TestScene/lighthouse_spotlight.lua similarity index 89% rename from resources/scripts/lighthouse_spotlight.lua rename to resources/game/TestScene/lighthouse_spotlight.lua index f4511b80..cf9c8703 100644 --- a/resources/scripts/lighthouse_spotlight.lua +++ b/resources/game/TestScene/lighthouse_spotlight.lua @@ -1,5 +1,6 @@ baseObject = { - type = "SpotLight" + type = "SpotLight", + savable = true } light = { diff --git a/resources/scripts/moonlight.lua b/resources/game/TestScene/moonlight.lua similarity index 81% rename from resources/scripts/moonlight.lua rename to resources/game/TestScene/moonlight.lua index f5f89112..21744fe9 100644 --- a/resources/scripts/moonlight.lua +++ b/resources/game/TestScene/moonlight.lua @@ -1,5 +1,6 @@ baseObject = { - type = "DirectionalLight" + type = "DirectionalLight", + savable = true } light = { diff --git a/resources/scripts/networkMenu.lua b/resources/game/TestScene/networkMenu.lua similarity index 100% rename from resources/scripts/networkMenu.lua rename to resources/game/TestScene/networkMenu.lua diff --git a/resources/scripts/networkMenuPvP.lua b/resources/game/TestScene/networkMenuPvP.lua similarity index 100% rename from resources/scripts/networkMenuPvP.lua rename to resources/game/TestScene/networkMenuPvP.lua diff --git a/resources/scripts/networkMenuPvPSetup.lua b/resources/game/TestScene/networkMenuPvPSetup.lua similarity index 92% rename from resources/scripts/networkMenuPvPSetup.lua rename to resources/game/TestScene/networkMenuPvPSetup.lua index d82eb362..cc918dbc 100644 --- a/resources/scripts/networkMenuPvPSetup.lua +++ b/resources/game/TestScene/networkMenuPvPSetup.lua @@ -7,6 +7,7 @@ baseObject = { yRotation = 1, zRotation = 0, angle = 0, + savable = true, xScale = 1, yScale = 1, zScale = 1 diff --git a/resources/scripts/networkMenuSetup.lua b/resources/game/TestScene/networkMenuSetup.lua similarity index 92% rename from resources/scripts/networkMenuSetup.lua rename to resources/game/TestScene/networkMenuSetup.lua index 5453a663..b75f51d0 100644 --- a/resources/scripts/networkMenuSetup.lua +++ b/resources/game/TestScene/networkMenuSetup.lua @@ -7,6 +7,7 @@ baseObject = { yRotation = 1, zRotation = 0, angle = 0, + savable = true, xScale = 1, yScale = 1, zScale = 1 diff --git a/resources/scripts/pauseMenu.lua b/resources/game/TestScene/pauseMenu.lua similarity index 73% rename from resources/scripts/pauseMenu.lua rename to resources/game/TestScene/pauseMenu.lua index f293ea08..2729f6c8 100644 --- a/resources/scripts/pauseMenu.lua +++ b/resources/game/TestScene/pauseMenu.lua @@ -18,15 +18,17 @@ if paused then end if save then - save_game(true) + setBoolData("save_game", true) + setIntData("last_save_time", current_time()) end if load then - load_game(true) + setBoolData("load_game", true) + setIntData("last_load_time", current_time()) end if credits then - set_credits(true) + setBoolData("show_credits", true) end diff --git a/resources/scripts/pauseMenuSetup.lua b/resources/game/TestScene/pauseMenuSetup.lua similarity index 92% rename from resources/scripts/pauseMenuSetup.lua rename to resources/game/TestScene/pauseMenuSetup.lua index 0410c426..1741b6f3 100644 --- a/resources/scripts/pauseMenuSetup.lua +++ b/resources/game/TestScene/pauseMenuSetup.lua @@ -7,6 +7,7 @@ baseObject = { yRotation = 1, zRotation = 0, angle = 0, + savable = true, xScale = 1, yScale = 1, zScale = 1 diff --git a/resources/scripts/player.lua b/resources/game/TestScene/player.lua similarity index 91% rename from resources/scripts/player.lua rename to resources/game/TestScene/player.lua index f3f6017e..1b27719c 100644 --- a/resources/scripts/player.lua +++ b/resources/game/TestScene/player.lua @@ -7,10 +7,11 @@ baseObject = { yRotation = 0, zRotation = 0, angle = 0.01, + savable = true, xScale = 1, yScale = 1, zScale = 1, - move_speed = 3 + move_speed = 20 } script = "scripts/playerScript.lua" diff --git a/resources/scripts/playerScript.lua b/resources/game/TestScene/playerScript.lua similarity index 56% rename from resources/scripts/playerScript.lua rename to resources/game/TestScene/playerScript.lua index 1a9712d7..fedff6ab 100644 --- a/resources/scripts/playerScript.lua +++ b/resources/game/TestScene/playerScript.lua @@ -1,18 +1,20 @@ if camera_pos_y() < 2.5 then if get_pause_game() == false then - local check = current_time() - time_since_last_load() + local check = current_time() - getIntData("last_load_time", -5) if check > 5 then - load_game(true) + setIntData("last_load_time", current_time()) + setBoolData("load_game", true) end end else - local time = current_time() - time_since_last_save() + local time = current_time() - getIntData("last_save_time", -15) if time > 15 then - save_game(true) + setIntData("last_save_time", current_time()) + setBoolData("save_game", true) print("Checkpoint - 15 seconds passed since last encounter") end - time = current_time() - time_since_last_load() + time = current_time() - getIntData("last_load_time", -5) if time < 10 then gui_setWindowSize(300, 100, 1) gui_setWindowPos(700, 0, 1) diff --git a/resources/scripts/save/veryCool.txt b/resources/game/TestScene/save/veryCool.txt similarity index 100% rename from resources/scripts/save/veryCool.txt rename to resources/game/TestScene/save/veryCool.txt diff --git a/resources/game/TestScene/shootGun.lua b/resources/game/TestScene/shootGun.lua new file mode 100644 index 00000000..a482eba3 --- /dev/null +++ b/resources/game/TestScene/shootGun.lua @@ -0,0 +1,7 @@ +if getBoolData("should_shoot", false) == true then + if current_time() - getFloatData("last_shot", 0) > getFloatData("shot_delay", 0.25) then + addGameObject("scripts/bullet.lua") + setBoolData("should_shoot", false) + setFloatData("last_shot", current_time()) + end +end diff --git a/resources/scripts/skybox.lua b/resources/game/TestScene/skybox.lua similarity index 91% rename from resources/scripts/skybox.lua rename to resources/game/TestScene/skybox.lua index 5e09e40f..0f51270f 100644 --- a/resources/scripts/skybox.lua +++ b/resources/game/TestScene/skybox.lua @@ -1,5 +1,6 @@ baseObject = { - type = "Skybox" + type = "Skybox", + savable = true } skybox_faces = { @@ -9,4 +10,4 @@ skybox_faces = { bottom_face = "textures/skyboxes/nightsky/nightsky_dn.tga", back_face = "textures/skyboxes/nightsky/nightsky_bk.tga", front_face = "textures/skyboxes/nightsky/nightsky_ft.tga" -} +} \ No newline at end of file diff --git a/resources/scripts/terrain.lua b/resources/game/TestScene/terrain.lua similarity index 96% rename from resources/scripts/terrain.lua rename to resources/game/TestScene/terrain.lua index dc32c2ea..7d7e78ed 100644 --- a/resources/scripts/terrain.lua +++ b/resources/game/TestScene/terrain.lua @@ -7,6 +7,7 @@ baseObject = { yRotation = 1, zRotation = 0, angle = 0, + savable = true, xScale = 2, yScale = 0.05, zScale = 2 diff --git a/resources/scripts/testscript.lua b/resources/game/TestScene/testscript.lua similarity index 100% rename from resources/scripts/testscript.lua rename to resources/game/TestScene/testscript.lua diff --git a/resources/game/TheDen/Collections.lua b/resources/game/TheDen/Collections.lua new file mode 100644 index 00000000..845abd58 --- /dev/null +++ b/resources/game/TheDen/Collections.lua @@ -0,0 +1,17 @@ +--Collection ids start at 0 and increase by 1 + +--Collections::add_collection(name, parent_collection_id) +Collections.clear_collections() +Collections.add_collection("Lights", -1) --0 +Collections.add_collection("Indoor Lights", 0) --1 +Collections.add_collection("World", -1) --2 +Collections.add_collection("World Collision Boxes", 2) --3 +Collections.add_collection("Small objects", -1) --4 +Collections.add_collection("Books", 4) --5 +Collections.add_collection("Laptops", 4) --6 +Collections.add_collection("Pizza boxes", 4) --7 +Collections.add_collection("Other", 4) --8 +Collections.add_collection("Chairs", 4) --9 + + + diff --git a/resources/game/TheDen/_MasterCreation.lua b/resources/game/TheDen/_MasterCreation.lua new file mode 100644 index 00000000..0fb88850 --- /dev/null +++ b/resources/game/TheDen/_MasterCreation.lua @@ -0,0 +1,65 @@ +dofile("game/TheDen/Collections.lua") + +Texture.load_texture("credits", "textures/reflexbullet.png") + +Scene.add_game_object("game/TheDen/prefabs/Glass.lua") +--Scene.add_game_object("game/TheDen/prefabs/TheDen.lua") +Scene.add_game_object("game/TheDen/prefabs/cube.lua") +Scene.add_game_object("game/TheDen/prefabs/cubeTwo.lua") +Scene.add_game_object("game/TheDen/prefabs/player.lua") +Scene.add_game_object("game/TheDen/prefabs/sphere.lua") +Scene.add_game_object("game/TheDen/prefabs/TheDenCollisions.lua") +Scene.add_game_object("game/TheDen/prefabs/CabinetCollisions.lua") +Scene.add_game_object("game/TheDen/prefabs/lights/sunlight.lua") +Scene.add_game_object("game/TheDen/prefabs/lights/theater_light.lua") +Scene.add_game_object("game/TheDen/prefabs/lights/middle_lights/middle_light1.lua") +Scene.add_game_object("game/TheDen/prefabs/lights/middle_lights/middle_light2.lua") +Scene.add_game_object("game/TheDen/prefabs/lights/middle_lights/middle_light3.lua") +Scene.add_game_object("game/TheDen/prefabs/lights/left_lights/left_light1.lua") +Scene.add_game_object("game/TheDen/prefabs/lights/right_lights/right_light1.lua") +Scene.add_game_object("game/TheDen/prefabs/lights/right_lights/right_light2.lua") +Scene.add_game_object("game/TheDen/prefabs/lights/right_lights/right_light3.lua") + + +--laptops +Scene.add_game_object("game/TheDen/prefabs/small_objects/laptops/laptop_one.lua") +Scene.add_game_object("game/TheDen/prefabs/small_objects/laptops/laptop_two.lua") +Scene.add_game_object("game/TheDen/prefabs/small_objects/laptops/laptop_three.lua") +Scene.add_game_object("game/TheDen/prefabs/small_objects/laptops/laptop_four.lua") +Scene.add_game_object("game/TheDen/prefabs/small_objects/laptops/laptop_five.lua") +--pizza +Scene.add_game_object("game/TheDen/prefabs/small_objects/pizzaboxes/pizza_box_one.lua") +Scene.add_game_object("game/TheDen/prefabs/small_objects/pizzaboxes/pizza_box_two.lua") +Scene.add_game_object("game/TheDen/prefabs/small_objects/pizzaboxes/pizza_box_three.lua") +Scene.add_game_object("game/TheDen/prefabs/small_objects/pizzaboxes/pizza_box_four.lua") +Scene.add_game_object("game/TheDen/prefabs/small_objects/pizzaboxes/pizza_box_five.lua") +--books +Scene.add_game_object("game/TheDen/prefabs/small_objects/books/book1s/book1_one.lua") +Scene.add_game_object("game/TheDen/prefabs/small_objects/books/book1s/book1_two.lua") +Scene.add_game_object("game/TheDen/prefabs/small_objects/books/book2s/book2_one.lua") +Scene.add_game_object("game/TheDen/prefabs/small_objects/books/book2s/book2_two.lua") +Scene.add_game_object("game/TheDen/prefabs/small_objects/books/book2s/book2_three.lua") +Scene.add_game_object("game/TheDen/prefabs/small_objects/books/book3s/book3_one.lua") +Scene.add_game_object("game/TheDen/prefabs/small_objects/books/book4s/book4_one.lua") +Scene.add_game_object("game/TheDen/prefabs/small_objects/books/book4s/book4_two.lua") +Scene.add_game_object("game/TheDen/prefabs/small_objects/books/book5s/book5_one.lua") +Scene.add_game_object("game/TheDen/prefabs/small_objects/books/book5s/book5_two.lua") +--Calculators +Scene.add_game_object("game/TheDen/prefabs/small_objects/calculators/calculator_one.lua") +Scene.add_game_object("game/TheDen/prefabs/small_objects/calculators/calculator_two.lua") +--Ribux cubes +Scene.add_game_object("game/TheDen/prefabs/small_objects/rubix_cubes/rubix_cube_one.lua") +--tissue boxes +Scene.add_game_object("game/TheDen/prefabs/small_objects/tissue_boxes/tissue_box_one.lua") +Scene.add_game_object("game/TheDen/prefabs/small_objects/tissue_boxes/tissue_box_two.lua") +--markers +Scene.add_game_object("game/TheDen/prefabs/small_objects/markers/marker_one.lua") +Scene.add_game_object("game/TheDen/prefabs/small_objects/markers/marker_two.lua") +--Chairs +Scene.add_game_object("game/TheDen/prefabs/small_objects/chairs/chair_one.lua") +Scene.add_game_object("game/TheDen/prefabs/small_objects/chairs/chair_two.lua") +Scene.add_game_object("game/TheDen/prefabs/small_objects/chairs/chair_three.lua") +Scene.add_game_object("game/TheDen/prefabs/small_objects/chairs/chair_four.lua") +Scene.add_game_object("game/TheDen/prefabs/small_objects/chairs/chair_five.lua") + +Skybox.use_skybox("default") diff --git a/resources/game/TheDen/prefabs/CabinetCollisions.lua b/resources/game/TheDen/prefabs/CabinetCollisions.lua new file mode 100644 index 00000000..350d8813 --- /dev/null +++ b/resources/game/TheDen/prefabs/CabinetCollisions.lua @@ -0,0 +1,37 @@ +entity = { + name = "CabinetCollisions", + collection_id = 3, + + transform = { + position = { + x = 62.465, + y = 1.5, + z = -2.455 + }, + rotation = { + x = 0, + y = 5, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + rigidbody = { + using_react_start = false, + gravity_on = false, + can_sleep = true, + is_trigger = false, + linear_drag = 0.1, + angular_drag = 0.1, + rb_type = 0 + }, + + script = { + lua_script = "game/TheDen/scripts/CabinetCollisions_script.lua" + } + +} diff --git a/resources/game/TheDen/prefabs/Glass.lua b/resources/game/TheDen/prefabs/Glass.lua new file mode 100644 index 00000000..741691c9 --- /dev/null +++ b/resources/game/TheDen/prefabs/Glass.lua @@ -0,0 +1,27 @@ +entity = { + name = "Glass", + collection_id = 2, + + transform = { + position = { + x = 50, + y = 0, + z = 0 + }, + rotation = { + x = 0, + y = 0, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "GlassInScene", + material_name = "shiny" + } +} diff --git a/resources/game/TheDen/prefabs/TheDen.lua b/resources/game/TheDen/prefabs/TheDen.lua new file mode 100644 index 00000000..1e62a197 --- /dev/null +++ b/resources/game/TheDen/prefabs/TheDen.lua @@ -0,0 +1,27 @@ +entity = { + name = "TheDen", + collection_id = 2, + + transform = { + position = { + x = 50, + y = 0, + z = 0 + }, + rotation = { + x = 0, + y = 0, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "TheDen", + material_name = "default" + } +} diff --git a/resources/game/TheDen/prefabs/TheDenCollisions.lua b/resources/game/TheDen/prefabs/TheDenCollisions.lua new file mode 100644 index 00000000..a7e5c8fa --- /dev/null +++ b/resources/game/TheDen/prefabs/TheDenCollisions.lua @@ -0,0 +1,33 @@ +entity = { + name = "TheDenCollisions", + collection_id = 3, + + transform = { + position = { + x = 50, + y = 0, + z = 0 + }, + rotation = { + x = 0, + y = 0, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + rigidbody = { + using_react_start = false, + gravity_on = false, + can_sleep = true, + is_trigger = false, + linear_drag = 0.1, + angular_drag = 0.1, + rb_type = 0, + collider_obj_data = "models/TheDenCollisions.obj" + }, +} diff --git a/resources/game/TheDen/prefabs/cube.lua b/resources/game/TheDen/prefabs/cube.lua new file mode 100644 index 00000000..ee8bbc55 --- /dev/null +++ b/resources/game/TheDen/prefabs/cube.lua @@ -0,0 +1,40 @@ +entity = { + name = "Last Block", + + transform = { + position = { + x = 45, + y = 10, + z = 0 + }, + rotation = { + x = 0, + y = 0, + z = 0 + }, + scale = { + x = 0.045, + y = 0.45, + z = 0.3 + } + }, + + model = { + model_name = "default", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = false, + can_sleep = true, + is_trigger = false, + linear_drag = 0.1, + angular_drag = 0.1, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/rb_add_script.lua" + } +} diff --git a/resources/game/TheDen/prefabs/cubeTwo.lua b/resources/game/TheDen/prefabs/cubeTwo.lua new file mode 100644 index 00000000..4f496bdc --- /dev/null +++ b/resources/game/TheDen/prefabs/cubeTwo.lua @@ -0,0 +1,41 @@ +entity = { + name = "First Block", + + transform = { + position = { + x = 50, + y = 10, + z = 0 + }, + rotation = { + x = 45, + y = 90, + z = 0 + }, + scale = { + x = 0.045, + y = 0.45, + z = 0.3 + } + }, + + model = { + model_name = "default", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = false, + can_sleep = true, + is_trigger = false, + linear_drag = 0.1, + angular_drag = 0.1, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/rb_add_script.lua" + } + +} diff --git a/resources/game/TheDen/prefabs/lights/left_lights/left_light1.lua b/resources/game/TheDen/prefabs/lights/left_lights/left_light1.lua new file mode 100644 index 00000000..95c1f4e6 --- /dev/null +++ b/resources/game/TheDen/prefabs/lights/left_lights/left_light1.lua @@ -0,0 +1,30 @@ +entity = { + name = "Left corridor light 1", + collection_id = 1, + + point_light = { + shadow_width = 512, + shadow_height = 512, + near_plane = 0.1, + far_plane = 128, + + color = { + r = 1, + g = 1, + b = 1 + }, + + ambient_intensity = 1, + diffuse_intensity = 1, + + position = { + x = 40, + y = 2.5, + z = 1 + }, + + constant = 0, + linear = 0, + quadratic = 1 + } +} diff --git a/resources/game/TheDen/prefabs/lights/middle_lights/middle_light1.lua b/resources/game/TheDen/prefabs/lights/middle_lights/middle_light1.lua new file mode 100644 index 00000000..a8eaf13e --- /dev/null +++ b/resources/game/TheDen/prefabs/lights/middle_lights/middle_light1.lua @@ -0,0 +1,30 @@ +entity = { + name = "Middle light 1", + collection_id = 1, + + point_light = { + shadow_width = 512, + shadow_height = 512, + near_plane = 0.1, + far_plane = 128, + + color = { + r = 1, + g = 1, + b = 1 + }, + + ambient_intensity = 1, + diffuse_intensity = 1, + + position = { + x = 54, + y = 2.5, + z = -1.275 + }, + + constant = 0, + linear = 0, + quadratic = 1 + } +} diff --git a/resources/game/TheDen/prefabs/lights/middle_lights/middle_light2.lua b/resources/game/TheDen/prefabs/lights/middle_lights/middle_light2.lua new file mode 100644 index 00000000..03552c5c --- /dev/null +++ b/resources/game/TheDen/prefabs/lights/middle_lights/middle_light2.lua @@ -0,0 +1,30 @@ +entity = { + name = "Middle light 2", + collection_id = 1, + + point_light = { + shadow_width = 512, + shadow_height = 512, + near_plane = 0.1, + far_plane = 128, + + color = { + r = 1, + g = 1, + b = 1 + }, + + ambient_intensity = 1, + diffuse_intensity = 1, + + position = { + x = 52, + y = 2.5, + z = -1.275 + }, + + constant = 0, + linear = 0, + quadratic = 1 + } +} diff --git a/resources/game/TheDen/prefabs/lights/middle_lights/middle_light3.lua b/resources/game/TheDen/prefabs/lights/middle_lights/middle_light3.lua new file mode 100644 index 00000000..07bb7e4b --- /dev/null +++ b/resources/game/TheDen/prefabs/lights/middle_lights/middle_light3.lua @@ -0,0 +1,30 @@ +entity = { + name = "Middle light 3", + collection_id = 1, + + point_light = { + shadow_width = 512, + shadow_height = 512, + near_plane = 0.1, + far_plane = 128, + + color = { + r = 1, + g = 1, + b = 1 + }, + + ambient_intensity = 1, + diffuse_intensity = 1, + + position = { + x = 46, + y = 2, + z = -1.275 + }, + + constant = 0, + linear = 0, + quadratic = 1 + } +} diff --git a/resources/game/TheDen/prefabs/lights/right_lights/right_light1.lua b/resources/game/TheDen/prefabs/lights/right_lights/right_light1.lua new file mode 100644 index 00000000..79509004 --- /dev/null +++ b/resources/game/TheDen/prefabs/lights/right_lights/right_light1.lua @@ -0,0 +1,30 @@ +entity = { + name = "Right corridor light 1", + collection_id = 1, + + point_light = { + shadow_width = 512, + shadow_height = 512, + near_plane = 0.1, + far_plane = 128, + + color = { + r = 1, + g = 1, + b = 1 + }, + + ambient_intensity = 1, + diffuse_intensity = 1, + + position = { + x = 47, + y = 2.5, + z = -5.25 + }, + + constant = 0, + linear = 0, + quadratic = 1 + } +} diff --git a/resources/game/TheDen/prefabs/lights/right_lights/right_light2.lua b/resources/game/TheDen/prefabs/lights/right_lights/right_light2.lua new file mode 100644 index 00000000..3c2f4f44 --- /dev/null +++ b/resources/game/TheDen/prefabs/lights/right_lights/right_light2.lua @@ -0,0 +1,30 @@ +entity = { + name = "Right corridor light 2", + collection_id = 1, + + point_light = { + shadow_width = 512, + shadow_height = 512, + near_plane = 0.1, + far_plane = 128, + + color = { + r = 1, + g = 1, + b = 1 + }, + + ambient_intensity = 1, + diffuse_intensity = 1, + + position = { + x = 42, + y = 2.5, + z = -5.25 + }, + + constant = 0, + linear = 0, + quadratic = 1 + } +} diff --git a/resources/game/TheDen/prefabs/lights/right_lights/right_light3.lua b/resources/game/TheDen/prefabs/lights/right_lights/right_light3.lua new file mode 100644 index 00000000..e906407a --- /dev/null +++ b/resources/game/TheDen/prefabs/lights/right_lights/right_light3.lua @@ -0,0 +1,30 @@ +entity = { + name = "Right corridor light 3", + collection_id = 1, + + point_light = { + shadow_width = 512, + shadow_height = 512, + near_plane = 0.1, + far_plane = 128, + + color = { + r = 1, + g = 1, + b = 1 + }, + + ambient_intensity = 1, + diffuse_intensity = 1, + + position = { + x = 37, + y = 2.5, + z = -5.25 + }, + + constant = 0, + linear = 0, + quadratic = 1 + } +} diff --git a/resources/game/TheDen/prefabs/lights/sunlight.lua b/resources/game/TheDen/prefabs/lights/sunlight.lua new file mode 100644 index 00000000..d74cad7d --- /dev/null +++ b/resources/game/TheDen/prefabs/lights/sunlight.lua @@ -0,0 +1,30 @@ +entity = { + name = "Sunlight", + collection_id = 0, + + directional_light = { + shadow_width = 1024, + shadow_height = 1024, + near_plane = 1.0, + far_plane = 256, + ortho_left = -64.0, + ortho_right = 0.0, + ortho_bottom = -32.0, + ortho_top = 32.0, + + color = { + r = 1, + g = 1, + b = 1 + }, + + ambient_intensity = 0.05, + diffuse_intensity = 0.2, + + direction = { + x = 0.5, + y = -0.371, + z = 0.78 + } + } +} diff --git a/resources/game/TheDen/prefabs/lights/theater_light.lua b/resources/game/TheDen/prefabs/lights/theater_light.lua new file mode 100644 index 00000000..c13acf3d --- /dev/null +++ b/resources/game/TheDen/prefabs/lights/theater_light.lua @@ -0,0 +1,64 @@ +entity = { + name = "Theater light", + collection_id = 1, + + point_light = { + shadow_width = 512, + shadow_height = 512, + near_plane = 0.1, + far_plane = 128, + + color = { + r = 1, + g = 0.83, + b = 0.5 + }, + + ambient_intensity = 0.2, + diffuse_intensity = 1, + + position = { + x = 57, + y = 2.5, + z = -5.456 + }, + + constant = 0, + linear = 0, + quadratic = 0.25 + }, + + spot_light = { + shadow_width = 512, + shadow_height = 512, + near_plane = 0.1, + far_plane = 128, + + color = { + r = 1, + g = 0.83, + b = 0.5 + }, + + ambient_intensity = 0, + diffuse_intensity = 1, + + position = { + x = 57, + y = 2.5, + z = -5.456 + }, + + constant = 0, + linear = 0.1, + quadratic = 0, + + direction = { + x = 0.987, + y = -0.5, + z = 0.0 + }, + + edge = 20 + } +} diff --git a/resources/game/TheDen/prefabs/player.lua b/resources/game/TheDen/prefabs/player.lua new file mode 100644 index 00000000..e072013f --- /dev/null +++ b/resources/game/TheDen/prefabs/player.lua @@ -0,0 +1,37 @@ +entity = { + name = "Player", + + transform = { + position = { + x = 48, + y = 2, + z = 0 + }, + rotation = { + x = 0, + y = 0, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + rigidbody = { + using_react_start = false, + gravity_on = true, + can_sleep = true, + is_trigger = false, + linear_drag = 5, + angular_drag = 0.1, + rb_type = 0 + }, + + script = { + lua_script = "game/TheDen/scripts/player_script.lua" + } + + +} diff --git a/resources/game/TheDen/prefabs/small_objects/books/book1s/book1_one.lua b/resources/game/TheDen/prefabs/small_objects/books/book1s/book1_one.lua new file mode 100644 index 00000000..952c0dca --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/books/book1s/book1_one.lua @@ -0,0 +1,41 @@ +entity = { + name = "book1", + collection_id = 5, + + transform = { + position = { + x = 43.5, + y = 0.805, + z = -2 + }, + rotation = { + x = 0, + y = -51.9, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "book1", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = true, + can_sleep = true, + is_trigger = false, + linear_drag = 0.5, + angular_drag = 0.5, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/book1_script.lua" + } +} diff --git a/resources/game/TheDen/prefabs/small_objects/books/book1s/book1_two.lua b/resources/game/TheDen/prefabs/small_objects/books/book1s/book1_two.lua new file mode 100644 index 00000000..bd7271e1 --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/books/book1s/book1_two.lua @@ -0,0 +1,41 @@ +entity = { + name = "book1", + collection_id = 5, + + transform = { + position = { + x = 46.4, + y = 0.805, + z = -0.4 + }, + rotation = { + x = 0, + y = -71, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "book1", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = true, + can_sleep = true, + is_trigger = false, + linear_drag = 0.5, + angular_drag = 0.5, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/book1_script.lua" + } +} diff --git a/resources/game/TheDen/prefabs/small_objects/books/book2s/book2_one.lua b/resources/game/TheDen/prefabs/small_objects/books/book2s/book2_one.lua new file mode 100644 index 00000000..e943873a --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/books/book2s/book2_one.lua @@ -0,0 +1,41 @@ +entity = { + name = "book2", + collection_id = 5, + + transform = { + position = { + x = 49.2, + y = 0.825, + z = -1 + }, + rotation = { + x = 0, + y = -300, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "book2", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = true, + can_sleep = true, + is_trigger = false, + linear_drag = 0.5, + angular_drag = 0.5, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/book2_script.lua" + } +} diff --git a/resources/game/TheDen/prefabs/small_objects/books/book2s/book2_three.lua b/resources/game/TheDen/prefabs/small_objects/books/book2s/book2_three.lua new file mode 100644 index 00000000..4af8ba06 --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/books/book2s/book2_three.lua @@ -0,0 +1,41 @@ +entity = { + name = "book2", + collection_id = 5, + + transform = { + position = { + x = 43, + y = 0.825, + z = -2 + }, + rotation = { + x = 0, + y = -43.5, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "book2", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = true, + can_sleep = true, + is_trigger = false, + linear_drag = 0.5, + angular_drag = 0.5, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/book2_script.lua" + } +} diff --git a/resources/game/TheDen/prefabs/small_objects/books/book2s/book2_two.lua b/resources/game/TheDen/prefabs/small_objects/books/book2s/book2_two.lua new file mode 100644 index 00000000..66533418 --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/books/book2s/book2_two.lua @@ -0,0 +1,41 @@ +entity = { + name = "book2", + collection_id = 5, + + transform = { + position = { + x = 45.8, + y = 0.825, + z = -1 + }, + rotation = { + x = 0, + y = -152, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "book2", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = true, + can_sleep = true, + is_trigger = false, + linear_drag = 0.5, + angular_drag = 0.5, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/book2_script.lua" + } +} diff --git a/resources/game/TheDen/prefabs/small_objects/books/book3s/book3_one.lua b/resources/game/TheDen/prefabs/small_objects/books/book3s/book3_one.lua new file mode 100644 index 00000000..5954f12f --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/books/book3s/book3_one.lua @@ -0,0 +1,41 @@ +entity = { + name = "book3", + collection_id = 5, + + transform = { + position = { + x = 46.5, + y = 0.805, + z = -1.6 + }, + rotation = { + x = 0, + y = -58.3, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "book3", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = true, + can_sleep = true, + is_trigger = false, + linear_drag = 0.5, + angular_drag = 0.5, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/book3_script.lua" + } +} diff --git a/resources/game/TheDen/prefabs/small_objects/books/book4s/book4_one.lua b/resources/game/TheDen/prefabs/small_objects/books/book4s/book4_one.lua new file mode 100644 index 00000000..48b8cdaa --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/books/book4s/book4_one.lua @@ -0,0 +1,41 @@ +entity = { + name = "book4", + collection_id = 5, + + transform = { + position = { + x = 46.3, + y = 0.805, + z = -1.8 + }, + rotation = { + x = 0, + y = -282, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "book4", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = true, + can_sleep = true, + is_trigger = false, + linear_drag = 0.5, + angular_drag = 0.5, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/book4-5_script.lua" + } +} diff --git a/resources/game/TheDen/prefabs/small_objects/books/book4s/book4_two.lua b/resources/game/TheDen/prefabs/small_objects/books/book4s/book4_two.lua new file mode 100644 index 00000000..a4f3c778 --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/books/book4s/book4_two.lua @@ -0,0 +1,41 @@ +entity = { + name = "book4", + collection_id = 5, + + transform = { + position = { + x = 43.1, + y = 0.805, + z = -0.3 + }, + rotation = { + x = 0, + y = -232.8, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "book4", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = true, + can_sleep = true, + is_trigger = false, + linear_drag = 0.5, + angular_drag = 0.5, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/book4-5_script.lua" + } +} diff --git a/resources/game/TheDen/prefabs/small_objects/books/book5s/book5_one.lua b/resources/game/TheDen/prefabs/small_objects/books/book5s/book5_one.lua new file mode 100644 index 00000000..f1b6492b --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/books/book5s/book5_one.lua @@ -0,0 +1,41 @@ +entity = { + name = "book5", + collection_id = 5, + + transform = { + position = { + x = 43.5, + y = 0.805, + z = -1.2 + }, + rotation = { + x = 0, + y = -203, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "book5", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = true, + can_sleep = true, + is_trigger = false, + linear_drag = 0.5, + angular_drag = 0.5, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/book4-5_script.lua" + } +} diff --git a/resources/game/TheDen/prefabs/small_objects/books/book5s/book5_two.lua b/resources/game/TheDen/prefabs/small_objects/books/book5s/book5_two.lua new file mode 100644 index 00000000..3e8e6e48 --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/books/book5s/book5_two.lua @@ -0,0 +1,41 @@ +entity = { + name = "book5", + collection_id = 5, + + transform = { + position = { + x = 43.1, + y = 0.805, + z = -1.6 + }, + rotation = { + x = 0, + y = -58.8, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "book5", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = true, + can_sleep = true, + is_trigger = false, + linear_drag = 0.5, + angular_drag = 0.5, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/book4-5_script.lua" + } +} diff --git a/resources/game/TheDen/prefabs/small_objects/calculators/calculator_one.lua b/resources/game/TheDen/prefabs/small_objects/calculators/calculator_one.lua new file mode 100644 index 00000000..1bfad117 --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/calculators/calculator_one.lua @@ -0,0 +1,41 @@ +entity = { + name = "calculator", + collection_id = 8, + + transform = { + position = { + x = 45.5, + y = 0.795, + z = -2.1 + }, + rotation = { + x = 0, + y = -71, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "calculator", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = true, + can_sleep = true, + is_trigger = false, + linear_drag = 0.5, + angular_drag = 0.5, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/calculator_script.lua" + } +} diff --git a/resources/game/TheDen/prefabs/small_objects/calculators/calculator_two.lua b/resources/game/TheDen/prefabs/small_objects/calculators/calculator_two.lua new file mode 100644 index 00000000..90f51a22 --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/calculators/calculator_two.lua @@ -0,0 +1,41 @@ +entity = { + name = "calculator", + collection_id = 8, + + transform = { + position = { + x = 43.3, + y = 0.795, + z = -2.2 + }, + rotation = { + x = 0, + y = -119, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "calculator", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = true, + can_sleep = true, + is_trigger = false, + linear_drag = 0.5, + angular_drag = 0.5, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/calculator_script.lua" + } +} diff --git a/resources/game/TheDen/prefabs/small_objects/chairs/chair_five.lua b/resources/game/TheDen/prefabs/small_objects/chairs/chair_five.lua new file mode 100644 index 00000000..98b8723e --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/chairs/chair_five.lua @@ -0,0 +1,41 @@ +entity = { + name = "chair_5", + collection_id = 9, + + transform = { + position = { + x = 36.4, + y = 0.4, + z = -6.9 + }, + rotation = { + x = 0, + y = 45, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "chair", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = true, + can_sleep = true, + is_trigger = false, + linear_drag = 0.5, + angular_drag = 0.5, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/chair_script.lua" + } +} diff --git a/resources/game/TheDen/prefabs/small_objects/chairs/chair_four.lua b/resources/game/TheDen/prefabs/small_objects/chairs/chair_four.lua new file mode 100644 index 00000000..c7ef5278 --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/chairs/chair_four.lua @@ -0,0 +1,41 @@ +entity = { + name = "chair_4", + collection_id = 9, + + transform = { + position = { + x = 46.5, + y = 0.4, + z = -5.3 + }, + rotation = { + x = 0, + y = 30, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "chair", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = true, + can_sleep = true, + is_trigger = false, + linear_drag = 0.5, + angular_drag = 0.5, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/chair_script.lua" + } +} diff --git a/resources/game/TheDen/prefabs/small_objects/chairs/chair_one.lua b/resources/game/TheDen/prefabs/small_objects/chairs/chair_one.lua new file mode 100644 index 00000000..3096521f --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/chairs/chair_one.lua @@ -0,0 +1,41 @@ +entity = { + name = "chair_1", + collection_id = 9, + + transform = { + position = { + x = 44, + y = 0.4, + z = -5.25 + }, + rotation = { + x = 0, + y = -90, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "chair", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = true, + can_sleep = true, + is_trigger = false, + linear_drag = 0.5, + angular_drag = 0.5, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/chair_script.lua" + } +} diff --git a/resources/game/TheDen/prefabs/small_objects/chairs/chair_three.lua b/resources/game/TheDen/prefabs/small_objects/chairs/chair_three.lua new file mode 100644 index 00000000..b497c9de --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/chairs/chair_three.lua @@ -0,0 +1,41 @@ +entity = { + name = "chair_3", + collection_id = 9, + + transform = { + position = { + x = 44.5, + y = 0.4, + z = -6.2 + }, + rotation = { + x = 0, + y = 0, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "chair", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = true, + can_sleep = true, + is_trigger = false, + linear_drag = 0.5, + angular_drag = 0.5, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/chair_script.lua" + } +} diff --git a/resources/game/TheDen/prefabs/small_objects/chairs/chair_two.lua b/resources/game/TheDen/prefabs/small_objects/chairs/chair_two.lua new file mode 100644 index 00000000..feeb85b4 --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/chairs/chair_two.lua @@ -0,0 +1,41 @@ +entity = { + name = "chair_2", + collection_id = 9, + + transform = { + position = { + x = 45.4, + y = 0.4, + z = -5 + }, + rotation = { + x = 0, + y = 0, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "chair", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = true, + can_sleep = true, + is_trigger = false, + linear_drag = 0.5, + angular_drag = 0.5, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/chair_script.lua" + } +} diff --git a/resources/game/TheDen/prefabs/small_objects/laptops/laptop_five.lua b/resources/game/TheDen/prefabs/small_objects/laptops/laptop_five.lua new file mode 100644 index 00000000..685620e6 --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/laptops/laptop_five.lua @@ -0,0 +1,41 @@ +entity = { + name = "laptop", + collection_id = 6, + + transform = { + position = { + x = 56.5, + y = 0.75, + z = -5.8 + }, + rotation = { + x = 0, + y = -241.3, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "laptop", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = true, + can_sleep = true, + is_trigger = false, + linear_drag = 0.5, + angular_drag = 0.5, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/laptop_script.lua" + } +} diff --git a/resources/game/TheDen/prefabs/small_objects/laptops/laptop_four.lua b/resources/game/TheDen/prefabs/small_objects/laptops/laptop_four.lua new file mode 100644 index 00000000..caad27ea --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/laptops/laptop_four.lua @@ -0,0 +1,41 @@ +entity = { + name = "laptop", + collection_id = 6, + + transform = { + position = { + x = 56.5, + y = 0.75, + z = -6.8 + }, + rotation = { + x = 0, + y = -313.3, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "laptop", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = true, + can_sleep = true, + is_trigger = false, + linear_drag = 0.5, + angular_drag = 0.5, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/laptop_script.lua" + } +} diff --git a/resources/game/TheDen/prefabs/small_objects/laptops/laptop_one.lua b/resources/game/TheDen/prefabs/small_objects/laptops/laptop_one.lua new file mode 100644 index 00000000..a3608401 --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/laptops/laptop_one.lua @@ -0,0 +1,41 @@ +entity = { + name = "laptop", + collection_id = 6, + + transform = { + position = { + x = 45.7, + y = 0.925, + z = -1.5 + }, + rotation = { + x = 0, + y = -143.3, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "laptop", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = true, + can_sleep = true, + is_trigger = false, + linear_drag = 0.5, + angular_drag = 0.5, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/laptop_script.lua" + } +} diff --git a/resources/game/TheDen/prefabs/small_objects/laptops/laptop_three.lua b/resources/game/TheDen/prefabs/small_objects/laptops/laptop_three.lua new file mode 100644 index 00000000..74f6806f --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/laptops/laptop_three.lua @@ -0,0 +1,41 @@ +entity = { + name = "laptop", + collection_id = 6, + + transform = { + position = { + x = 49.2, + y = 0.925, + z = -0.6 + }, + rotation = { + x = 0, + y = -286.3, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "laptop", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = true, + can_sleep = true, + is_trigger = false, + linear_drag = 0.5, + angular_drag = 0.5, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/laptop_script.lua" + } +} diff --git a/resources/game/TheDen/prefabs/small_objects/laptops/laptop_two.lua b/resources/game/TheDen/prefabs/small_objects/laptops/laptop_two.lua new file mode 100644 index 00000000..9f672a44 --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/laptops/laptop_two.lua @@ -0,0 +1,41 @@ +entity = { + name = "laptop", + collection_id = 6, + + transform = { + position = { + x = 49.2, + y = 0.925, + z = -1.8 + }, + rotation = { + x = 0, + y = -239.3, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "laptop", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = true, + can_sleep = true, + is_trigger = false, + linear_drag = 0.5, + angular_drag = 0.5, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/laptop_script.lua" + } +} diff --git a/resources/game/TheDen/prefabs/small_objects/markers/marker_one.lua b/resources/game/TheDen/prefabs/small_objects/markers/marker_one.lua new file mode 100644 index 00000000..618c4c67 --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/markers/marker_one.lua @@ -0,0 +1,27 @@ +entity = { + name = "marker", + collection_id = 8, + + transform = { + position = { + x = 43, + y = 0.795, + z = -0.8 + }, + rotation = { + x = -90, + y = -147, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "marker", + material_name = "default" + } +} diff --git a/resources/game/TheDen/prefabs/small_objects/markers/marker_two.lua b/resources/game/TheDen/prefabs/small_objects/markers/marker_two.lua new file mode 100644 index 00000000..f7256739 --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/markers/marker_two.lua @@ -0,0 +1,27 @@ +entity = { + name = "marker", + collection_id = 8, + + transform = { + position = { + x = 43, + y = 0.795, + z = -0.6 + }, + rotation = { + x = -90, + y = -86, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "marker", + material_name = "default" + } +} diff --git a/resources/game/TheDen/prefabs/small_objects/pizzaboxes/pizza_box_five.lua b/resources/game/TheDen/prefabs/small_objects/pizzaboxes/pizza_box_five.lua new file mode 100644 index 00000000..d6eaf94a --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/pizzaboxes/pizza_box_five.lua @@ -0,0 +1,41 @@ +entity = { + name = "pizza_box", + collection_id = 7, + + transform = { + position = { + x = 45, + y = 0.82, + z = -5.3 + }, + rotation = { + x = 0, + y = -204.7, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "pizza_box", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = true, + can_sleep = true, + is_trigger = false, + linear_drag = 0.5, + angular_drag = 0.5, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/pizza_box_script.lua" + } +} diff --git a/resources/game/TheDen/prefabs/small_objects/pizzaboxes/pizza_box_four.lua b/resources/game/TheDen/prefabs/small_objects/pizzaboxes/pizza_box_four.lua new file mode 100644 index 00000000..99c9decd --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/pizzaboxes/pizza_box_four.lua @@ -0,0 +1,41 @@ +entity = { + name = "pizza_box", + collection_id = 7, + + transform = { + position = { + x = 45.7, + y = 0.82, + z = -4.9 + }, + rotation = { + x = 0, + y = -153.6, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "pizza_box", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = true, + can_sleep = true, + is_trigger = false, + linear_drag = 0.5, + angular_drag = 0.5, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/pizza_box_script.lua" + } +} diff --git a/resources/game/TheDen/prefabs/small_objects/pizzaboxes/pizza_box_one.lua b/resources/game/TheDen/prefabs/small_objects/pizzaboxes/pizza_box_one.lua new file mode 100644 index 00000000..d92b7738 --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/pizzaboxes/pizza_box_one.lua @@ -0,0 +1,41 @@ +entity = { + name = "pizza_box", + collection_id = 7, + + transform = { + position = { + x = 44.7, + y = 0.82, + z = -5.8 + }, + rotation = { + x = 0, + y = -12, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "pizza_box", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = true, + can_sleep = true, + is_trigger = false, + linear_drag = 0.5, + angular_drag = 0.5, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/pizza_box_script.lua" + } +} diff --git a/resources/game/TheDen/prefabs/small_objects/pizzaboxes/pizza_box_three.lua b/resources/game/TheDen/prefabs/small_objects/pizzaboxes/pizza_box_three.lua new file mode 100644 index 00000000..94f6bae5 --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/pizzaboxes/pizza_box_three.lua @@ -0,0 +1,41 @@ +entity = { + name = "pizza_box", + collection_id = 7, + + transform = { + position = { + x = 45.5, + y = 0.88, + z = -5.8 + }, + rotation = { + x = 0, + y = -89.7, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "pizza_box", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = true, + can_sleep = true, + is_trigger = false, + linear_drag = 0.5, + angular_drag = 0.5, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/pizza_box_script.lua" + } +} diff --git a/resources/game/TheDen/prefabs/small_objects/pizzaboxes/pizza_box_two.lua b/resources/game/TheDen/prefabs/small_objects/pizzaboxes/pizza_box_two.lua new file mode 100644 index 00000000..fcd7ab0a --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/pizzaboxes/pizza_box_two.lua @@ -0,0 +1,41 @@ +entity = { + name = "pizza_box", + collection_id = 7, + + transform = { + position = { + x = 45.5, + y = 0.82, + z = -5.8 + }, + rotation = { + x = 0, + y = 11.8, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "pizza_box", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = true, + can_sleep = true, + is_trigger = false, + linear_drag = 0.5, + angular_drag = 0.5, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/pizza_box_script.lua" + } +} diff --git a/resources/game/TheDen/prefabs/small_objects/rubix_cubes/rubix_cube_one.lua b/resources/game/TheDen/prefabs/small_objects/rubix_cubes/rubix_cube_one.lua new file mode 100644 index 00000000..9d1617aa --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/rubix_cubes/rubix_cube_one.lua @@ -0,0 +1,41 @@ +entity = { + name = "rubix_cube", + collection_id = 8, + + transform = { + position = { + x = 56.7, + y = 0.63, + z = -4.7 + }, + rotation = { + x = 0, + y = -241.9, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "rubix_cube", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = true, + can_sleep = true, + is_trigger = false, + linear_drag = 0.5, + angular_drag = 0.5, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/rubix_cube_script.lua" + } +} diff --git a/resources/game/TheDen/prefabs/small_objects/tissue_boxes/tissue_box_one.lua b/resources/game/TheDen/prefabs/small_objects/tissue_boxes/tissue_box_one.lua new file mode 100644 index 00000000..4e335c5e --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/tissue_boxes/tissue_box_one.lua @@ -0,0 +1,41 @@ +entity = { + name = "tissue_box", + collection_id = 8, + + transform = { + position = { + x = 46.3, + y = 0.83, + z = -1 + }, + rotation = { + x = 0, + y = -263.9, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "tissue_box", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = true, + can_sleep = true, + is_trigger = false, + linear_drag = 0.5, + angular_drag = 0.5, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/tissue_box_script.lua" + } +} diff --git a/resources/game/TheDen/prefabs/small_objects/tissue_boxes/tissue_box_two.lua b/resources/game/TheDen/prefabs/small_objects/tissue_boxes/tissue_box_two.lua new file mode 100644 index 00000000..8365a09c --- /dev/null +++ b/resources/game/TheDen/prefabs/small_objects/tissue_boxes/tissue_box_two.lua @@ -0,0 +1,41 @@ +entity = { + name = "tissue_box", + collection_id = 8, + + transform = { + position = { + x = 45.3, + y = 0.835, + z = -5.5 + }, + rotation = { + x = 0, + y = -215, + z = 0 + }, + scale = { + x = 1, + y = 1, + z = 1 + } + }, + + model = { + model_name = "tissue_box", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = true, + can_sleep = true, + is_trigger = false, + linear_drag = 0.5, + angular_drag = 0.5, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/tissue_box_script.lua" + } +} diff --git a/resources/game/TheDen/prefabs/sphere.lua b/resources/game/TheDen/prefabs/sphere.lua new file mode 100644 index 00000000..a9be4222 --- /dev/null +++ b/resources/game/TheDen/prefabs/sphere.lua @@ -0,0 +1,40 @@ +entity = { + name = "Sphere", + + transform = { + position = { + x = 50.25, + y = 10, + z = -2 + }, + rotation = { + x = 0, + y = 0, + z = 0 + }, + scale = { + x = 0.05, + y = 0.05, + z = 0.05 + } + }, + + model = { + model_name = "Sphere", + material_name = "default" + }, + + rigidbody = { + using_react_start = false, + gravity_on = false, + can_sleep = true, + is_trigger = false, + linear_drag = 0.1, + angular_drag = 0.1, + rb_type = 2 + }, + + script = { + lua_script = "game/TheDen/scripts/rb_sphere_add.lua" + } +} diff --git a/resources/game/TheDen/scripts/CabinetCollisions_script.lua b/resources/game/TheDen/scripts/CabinetCollisions_script.lua new file mode 100644 index 00000000..8ea3a2cc --- /dev/null +++ b/resources/game/TheDen/scripts/CabinetCollisions_script.lua @@ -0,0 +1,11 @@ +var = { +} + +function init(ecs, entity) + if(not entity:any_rigidbody_component()) then + entity:add_rigidbody_component() + end + local rb = entity:get_rigidbody_component() + rb.type = 0 + rb:add_box_collider(Math.vec3.new(0, 0, 0), Math.vec3.new(0, 0, 0), Math.vec3.new(4.98, 3.1, 1.8), 0.5, 0.5, 0.5) +end diff --git a/resources/game/TheDen/scripts/TheDenCollisions_script.lua b/resources/game/TheDen/scripts/TheDenCollisions_script.lua new file mode 100644 index 00000000..15d20b48 --- /dev/null +++ b/resources/game/TheDen/scripts/TheDenCollisions_script.lua @@ -0,0 +1,15 @@ +var = { +} + +function init(ecs, entity) + if(not entity:any_rigidbody_component()) then + entity:add_rigidbody_component() + end + local rb = entity:get_rigidbody_component() + rb.type = 0 + LoadOBJCollider(rb, "models/TheDenCollisions.obj") +end + +function update(ecs, entity) + +end diff --git a/resources/game/TheDen/scripts/book1_script.lua b/resources/game/TheDen/scripts/book1_script.lua new file mode 100644 index 00000000..72d8ee8c --- /dev/null +++ b/resources/game/TheDen/scripts/book1_script.lua @@ -0,0 +1,8 @@ +var = { +} + +function init(ecs, entity) + local rb = entity:get_rigidbody_component() + rb:add_box_collider(Math.vec3.new(0, 0, 0), Math.vec3.new(0, 0, 0), Math.vec3.new(0.15, 0.03, 0.21), 0.5, 0.1, 0.5) + +end \ No newline at end of file diff --git a/resources/game/TheDen/scripts/book2_script.lua b/resources/game/TheDen/scripts/book2_script.lua new file mode 100644 index 00000000..71815105 --- /dev/null +++ b/resources/game/TheDen/scripts/book2_script.lua @@ -0,0 +1,8 @@ +var = { +} + +function init(ecs, entity) + local rb = entity:get_rigidbody_component() + rb:add_box_collider(Math.vec3.new(0, 0, 0), Math.vec3.new(0, 0, 0), Math.vec3.new(0.186, 0.07, 0.23), 0.5, 0.1, 0.5) + +end \ No newline at end of file diff --git a/resources/game/TheDen/scripts/book3_script.lua b/resources/game/TheDen/scripts/book3_script.lua new file mode 100644 index 00000000..5a632b7a --- /dev/null +++ b/resources/game/TheDen/scripts/book3_script.lua @@ -0,0 +1,8 @@ +var = { +} + +function init(ecs, entity) + local rb = entity:get_rigidbody_component() + rb:add_box_collider(Math.vec3.new(0, 0, 0), Math.vec3.new(0, 0, 0), Math.vec3.new(0.18, 0.022, 0.26), 0.5, 0.1, 0.5) + +end \ No newline at end of file diff --git a/resources/game/TheDen/scripts/book4-5_script.lua b/resources/game/TheDen/scripts/book4-5_script.lua new file mode 100644 index 00000000..c30d0de0 --- /dev/null +++ b/resources/game/TheDen/scripts/book4-5_script.lua @@ -0,0 +1,8 @@ +var = { +} + +function init(ecs, entity) + local rb = entity:get_rigidbody_component() + rb:add_box_collider(Math.vec3.new(0, 0, 0), Math.vec3.new(0, 0, 0), Math.vec3.new(0.18, 0.036, 0.27), 0.5, 0.1, 0.5) + +end \ No newline at end of file diff --git a/resources/game/TheDen/scripts/calculator_script.lua b/resources/game/TheDen/scripts/calculator_script.lua new file mode 100644 index 00000000..1a63a06c --- /dev/null +++ b/resources/game/TheDen/scripts/calculator_script.lua @@ -0,0 +1,8 @@ +var = { +} + +function init(ecs, entity) + local rb = entity:get_rigidbody_component() + rb:add_box_collider(Math.vec3.new(0, 0, 0), Math.vec3.new(0, 0, 0), Math.vec3.new(0.08, 0.02, 0.18), 0.5, 0.1, 0.5) + +end \ No newline at end of file diff --git a/resources/game/TheDen/scripts/chair_script.lua b/resources/game/TheDen/scripts/chair_script.lua new file mode 100644 index 00000000..2036fae3 --- /dev/null +++ b/resources/game/TheDen/scripts/chair_script.lua @@ -0,0 +1,12 @@ +var = { +} + +function init(ecs, entity) + local rb = entity:get_rigidbody_component() + rb:add_box_collider(Math.vec3.new(0, 0.06, -0.05), Math.vec3.new(0, 0, 0), Math.vec3.new(0.54, 0.05, 0.4), 0.5, 2, 0.25) + rb:add_box_collider(Math.vec3.new(0.262, -0.15, -0.29), Math.vec3.new(9, 0, 0), Math.vec3.new(0.02, 0.45, 0.02), 0.5, 3, 0.25) + rb:add_box_collider(Math.vec3.new(-0.262, -0.15, -0.29), Math.vec3.new(9, 0, 0), Math.vec3.new(0.02, 0.45, 0.02), 0.5, 3, 0.25) + rb:add_box_collider(Math.vec3.new(0.262, -0.14, 0.23), Math.vec3.new(-15, 0, 0), Math.vec3.new(0.02, 0.45, 0.02), 0.5, 3, 0.25) + rb:add_box_collider(Math.vec3.new(-0.262, -0.14, 0.23), Math.vec3.new(-15, 0, 0), Math.vec3.new(0.02, 0.45, 0.02), 0.5, 3, 0.25) + +end diff --git a/resources/game/TheDen/scripts/chat_menu_read.lua b/resources/game/TheDen/scripts/chat_menu_read.lua new file mode 100644 index 00000000..6a65d8fc --- /dev/null +++ b/resources/game/TheDen/scripts/chat_menu_read.lua @@ -0,0 +1,16 @@ + gui_setWindowSize(300, 400, 4) + gui_setWindowPos(200, 500, 4) + gui_begin("Chat reader") + + gui_text("--Game is currently NOT paused--") + gui_text("Chat Window") + if chatLog == nil then + chatLog = "This is the beginning of the chat log\n" + end + if network_get_message() ~= " " then + chatLog = chatLog .. network_get_message() + --chatLog = chatLog .. "\nValid Message\n" + end + gui_text(chatLog) + + gui_end() \ No newline at end of file diff --git a/resources/game/TheDen/scripts/chat_menu_send.lua b/resources/game/TheDen/scripts/chat_menu_send.lua new file mode 100644 index 00000000..7a63b999 --- /dev/null +++ b/resources/game/TheDen/scripts/chat_menu_send.lua @@ -0,0 +1,22 @@ + gui_setWindowSize(400, 300, 4) + gui_setWindowPos(100, 500, 4) + gui_begin("Chat sender") + + gui_text("--Game is currently NOT paused--") + local message = gui_luaInputText("Message: ") + if network_return_message() ~= nil then + savedMessage = network_return_message() + else + savedMessage = "" + end + gui_text(savedMessage) + local send = gui_button("Send", 300, 50) + + + network_retain_message(message) + + if send then + network_send_message() + end + + gui_end() \ No newline at end of file diff --git a/resources/game/TheDen/scripts/credits_menu.lua b/resources/game/TheDen/scripts/credits_menu.lua new file mode 100644 index 00000000..6818c6da --- /dev/null +++ b/resources/game/TheDen/scripts/credits_menu.lua @@ -0,0 +1,11 @@ +gui_setWindowSize(640, 480, 2) +gui_setWindowPos(320, 0, 1) +gui_begin("Credits") +gui_text("Credits") +gui_image("credits") +local exit = gui_button("EXIT", 150, 50) +gui_end() + +if exit then + Window.close() +end diff --git a/resources/game/TheDen/scripts/laptop_script.lua b/resources/game/TheDen/scripts/laptop_script.lua new file mode 100644 index 00000000..a39eb07c --- /dev/null +++ b/resources/game/TheDen/scripts/laptop_script.lua @@ -0,0 +1,8 @@ +var = { +} + +function init(ecs, entity) + local rb = entity:get_rigidbody_component() + rb:add_box_collider(Math.vec3.new(0, -0.12, 0), Math.vec3.new(0, 0, 0), Math.vec3.new(0.38, 0.034, 0.27), 0.5, 2, 0.25) + rb:add_box_collider(Math.vec3.new(0, 0.01, -0.135), Math.vec3.new(0, 0, 0), Math.vec3.new(0.38, 0.24, 0.034), 0.5, 0.5, 0.25) +end \ No newline at end of file diff --git a/resources/game/TheDen/scripts/network_menu.lua b/resources/game/TheDen/scripts/network_menu.lua new file mode 100644 index 00000000..69cc2ce6 --- /dev/null +++ b/resources/game/TheDen/scripts/network_menu.lua @@ -0,0 +1,64 @@ +if Time.is_paused() then + gui_setWindowSize(700, 400, 4) + gui_setWindowPos(0, 300, 4) + gui_begin("Network Menu") + + gui_text("--Game is currently NOT paused--") + local initialise = gui_button("INITIALISE", 150, 50) + local start = gui_button("Start Server", 150, 50) + local ip = gui_luaInputText("Enter Server IP: ") + if network_return_IP() ~= nil then + fullIP = network_return_IP() + else + fullIP = "" + end + gui_text(fullIP) + local username = gui_luaInputText("Username: ") + if network_return_username() ~= nil then + fullusername = network_return_username() + else + fullusername = "" + end + gui_text("Your username is: " .. fullusername) + local saveUsername = gui_button("Save username", 200, 50) + local connect = gui_button("Connect to server (127.0.0.1 if on same PC)", 300, 50) + + local back = gui_button("Disconnect",150,50) + + network_retain_IP(ip) + + network_retain_username(username) + + if initialise then + create_network_manager(true) + end + + if start then + start_server(true) + end + + if(saveUsername) then + network_set_username() + end + + if connect then + network_client_connect() + end + + + if network_connection_status() == true then + gui_text("You are connected!") + dofile "game/TheDen/scripts/chat_menu_send.lua" + dofile "game/TheDen/scripts/chat_menu_read.lua" + else + gui_text("You are not connected") + end + + if back then + network_terminate() + exit_network_menu(false) + end + + + gui_end() +end \ No newline at end of file diff --git a/resources/game/TheDen/scripts/pause_menu.lua b/resources/game/TheDen/scripts/pause_menu.lua new file mode 100644 index 00000000..598fa740 --- /dev/null +++ b/resources/game/TheDen/scripts/pause_menu.lua @@ -0,0 +1,34 @@ +gui_setWindowSize(300, 300, 2) +gui_setWindowPos(0, 0, 1) + +gui_begin("Pause Menu") + +gui_text("--Game is currently paused--") +local unpause = gui_button("UNPAUSE", 150, 50) +local save = gui_button("SAVE", 150, 50) +local load = gui_button("LOAD", 150, 50) +local credits = gui_button("EXIT", 150, 50) +gui_text("gui frame rate: " .. gui_guiFrameRate()) + +gui_end() + +if (unpause) then + Window.set_cursor_visible(false) + Time.set_pause(false) +end + +if (save) then + setBoolData("save_game", true); +end + +if (load) then + setBoolData("load_game", true); +end + +if (credits) then + setBoolData("show_credits", true) +end + +if (getBoolData("show_credits", false)) then + dofile "game/TheDen/scripts/credits_menu.lua" +end diff --git a/resources/game/TheDen/scripts/pizza_box_script.lua b/resources/game/TheDen/scripts/pizza_box_script.lua new file mode 100644 index 00000000..7bfd38c2 --- /dev/null +++ b/resources/game/TheDen/scripts/pizza_box_script.lua @@ -0,0 +1,8 @@ +var = { +} + +function init(ecs, entity) + local rb = entity:get_rigidbody_component() + rb:add_box_collider(Math.vec3.new(0, 0, 0), Math.vec3.new(0, 0, 0), Math.vec3.new(0.3, 0.05, 0.3), 0.5, 2, 0.25) + +end diff --git a/resources/game/TheDen/scripts/player_script.lua b/resources/game/TheDen/scripts/player_script.lua new file mode 100644 index 00000000..c68a35bc --- /dev/null +++ b/resources/game/TheDen/scripts/player_script.lua @@ -0,0 +1,167 @@ +var = { + speed = 2 +} + +function init(ecs, entity) + Window.set_cursor_visible(true) + Time.set_pause(true) + Camera.toggle_noclip() + + local rb = entity:get_rigidbody_component() + rb:add_box_collider(Math.vec3.new(0, -0.8, 0), Math.vec3.new(0, 0, 0), Math.vec3.new(0.5, 1.8, 0.5), 0.5, 80, 0.1) +end + +function update(ecs, entity) + if (Input.get_key_state("v"):is_key_pressed()) then + Scene.load_scene("duckandcover3") + end + + if (not Camera.is_noclip() and entity:any_rigidbody_component()) then + PhysicsMovement(ecs, entity) + else + PositionMovement(ecs, entity) + end + + if (Input.get_key_state("z"):is_key_pressed()) then + Camera.toggle_noclip() + + local rb = entity:get_rigidbody_component() + if (Camera.is_noclip()) then + DebugLogger.log_color("warning", "You are cheating!", GUI.vec4.new(1.0, 0.0, 0.0, 1.0)) + rb.type = 0 + else + rb.type = 2 + end + end + + if (Input.get_key_state("f11"):is_key_pressed()) then + Window.set_fullscreen(not Window.is_fullscreen()) + end + + if (Input.get_key_state("escape"):is_key_pressed()) then + Window.set_cursor_visible(not Window.is_cursor_visible()) + Time.set_pause(not Time.is_paused()) + if (Time.is_paused()) then + DebugLogger.log("info", "Game is paused.") + else + DebugLogger.log("info", "Game is unpaused.") + end + + end + + if (Input.get_key_state("k"):is_key_pressed()) then + Renderer.toggle_wireframe() + end + + if (Input.get_key_state("q"):is_key_pressed()) then + var.speed = var.speed / 2 + end + + if (Input.get_key_state("e"):is_key_pressed()) then + var.speed = var.speed * 2 + end + + if (Input.get_key_state("x"):is_key_pressed()) then + local cam_dir = Camera.get_direction() + local cam_pos = Camera.get_position() + + DebugLogger.log("info", "Camera position: " .. cam_pos.x .. ", " .. cam_pos.y .. ", " .. cam_pos.z) + DebugLogger.log("info", "Camera direction:" .. cam_dir.x .. ", " .. cam_dir.y .. ", " .. cam_dir.z) + end + + if (Time.is_paused()) then + dofile "game/TheDen/scripts/pause_menu.lua" + dofile "game/TheDen/scripts/network_menu.lua" + end +end + +function PositionMovement(ecs, entity) + local transform_component = entity:get_transform_component() + local transform = transform_component.position + + Camera.set_position(transform) + + if (Input.get_key_state("w"):is_key_hold()) then + Camera.move(Movement.forward, Time.get_delta_time() * var.speed) + end + + if (Input.get_key_state("a"):is_key_hold()) then + Camera.move(Movement.left, Time.get_delta_time() * var.speed) + end + + if (Input.get_key_state("s"):is_key_hold()) then + Camera.move(Movement.backward, Time.get_delta_time() * var.speed) + end + + if (Input.get_key_state("d"):is_key_hold()) then + Camera.move(Movement.right, Time.get_delta_time() * var.speed) + end + + transform_component.position = Camera.get_position() + + if (entity:any_rigidbody_component()) then + local rb_comp = entity:get_rigidbody_component() + rb_comp:set_transform(transform_component.position, Math.vec3.new(0, 0, 0)) + rb_comp.velocity = Math.vec3.new(0, 0, 0) + rb_comp.angular_velocity = Math.vec3.new(0, 0, 0) + end +end + +function PhysicsMovement(ecs, entity) + local rb_comp = entity:get_rigidbody_component() + local speed = 1000 * var.speed + local speed_vec = Math.vec3.new(speed, speed * 0, speed) + local const_direction = Camera.get_direction() + const_direction.y = 0 + const_direction = Math.normalize(const_direction) + local direction = const_direction + local force_vector = Math.vec3.new(0, 0, 0) + + if (Input.get_key_state("w"):is_key_hold()) then + direction = Math.mul(const_direction, speed_vec) + force_vector = Math.add(force_vector, direction) + end + + if (Input.get_key_state("s"):is_key_hold()) then + direction = Math.mul(const_direction, speed_vec) + direction = Math.mul(-1, direction) + force_vector = Math.add(force_vector, direction) + end + + local up_vector = Math.vec3.new(0, 1, 0) + if (const_direction.x == 0 and const_direction.y == 1 and const_direction.z == 0) then + up_vector.x = 1 + up_vector.y = 0 + end + + local strafe_vector = Math.cross(const_direction, up_vector) + if (Input.get_key_state("d"):is_key_hold()) then + direction = Math.mul(strafe_vector, speed_vec) + force_vector = Math.add(force_vector, direction) + end + + if (Input.get_key_state("a"):is_key_hold()) then + direction = Math.mul(strafe_vector, speed_vec) + direction = Math.mul(-1, direction) + force_vector = Math.add(force_vector, direction) + end + + rb_comp:add_force(force_vector, Apply.LOCAL) + + local velocity = rb_comp.velocity + local velocity_y = velocity.y + velocity.y = 0 + local ratio = Math.length(velocity) / var.speed + if (ratio > 1) then + velocity = Math.div(velocity, ratio) + velocity.y = velocity_y + rb_comp.velocity = velocity + end + + + rb_comp.angular_velocity = Math.vec3.new(0, 0, 0) + local transform_component = entity:get_transform_component() + local transform = transform_component.position + rb_comp:set_transform(transform, Math.vec3.new(0, 0, 0)) + Camera.set_position(transform) +end diff --git a/resources/game/TheDen/scripts/rb_add_script.lua b/resources/game/TheDen/scripts/rb_add_script.lua new file mode 100644 index 00000000..6382a037 --- /dev/null +++ b/resources/game/TheDen/scripts/rb_add_script.lua @@ -0,0 +1,19 @@ +var = { +} + +function init(ecs, entity) + --entity:add_rigidbody_component() + local rb = entity:get_rigidbody_component() + --rb:add_box_collider(Math.vec3.new(0, 0, 0), Math.vec3.new(0, 0, 0), Math.vec3.new(0.09, 0.9, 0.6), 0.5, 2, 0.5) + + --"Chair" + rb:add_box_collider(Math.vec3.new(0, 0, 0), Math.vec3.new(0, 0, 90), Math.vec3.new(0.1, 0.9, 0.9), 0.5, 2, 0.5) + rb:add_box_collider(Math.vec3.new(0.4, 0, 0.4), Math.vec3.new(0, 0, 0), Math.vec3.new(0.1, 0.5, 0.1), 0.5, 2, 0.5) + rb:add_box_collider(Math.vec3.new(-0.4, 0, 0.4), Math.vec3.new(0, 0, 0), Math.vec3.new(0.1, 0.5, 0.1), 0.5, 2, 0.5) + rb:add_box_collider(Math.vec3.new(0.4, 0, -0.4), Math.vec3.new(0, 0, 0), Math.vec3.new(0.1, 0.5, 0.1), 0.5, 2, 0.5) + rb:add_box_collider(Math.vec3.new(-0.4, 0, -0.4), Math.vec3.new(0, 0, 0), Math.vec3.new(0.1, 0.5, 0.1), 0.5, 2, 0.5) +end + +function update(ecs, entity) + +end diff --git a/resources/game/TheDen/scripts/rb_sphere_add.lua b/resources/game/TheDen/scripts/rb_sphere_add.lua new file mode 100644 index 00000000..23bc42ec --- /dev/null +++ b/resources/game/TheDen/scripts/rb_sphere_add.lua @@ -0,0 +1,44 @@ +var = { +} + +function init(ecs, entity) + --entity:add_rigidbody_component() + local rb = entity:get_rigidbody_component() + rb:add_sphere_collider(Math.vec3.new(0, 0, 0), Math.vec3.new(0, 0, 0), 0.05, 0.5, 0.1, 0.85) +end + +function update(ecs, entity) + local transform_component = entity:get_transform_component() + local transform = transform_component.position + local update = false + + if (Input.get_key_state("f"):is_key_pressed()) then + DebugLogger.log_color("Physics", "Firing projectile!", GUI.vec4.new(1.0, 0.0, 0.0, 1.0)) + local rb_component = entity:get_rigidbody_component() + rb_component:add_force(Math.vec3.new(0, 0, 2), Apply.LOCAL) + end + + if (Input.get_key_state("g"):is_key_pressed()) then + transform = Math.add(transform, Math.vec3.new(0, 0, 0.01)) + update = true + end + + if (Input.get_key_state("j"):is_key_pressed()) then + transform = Math.add(transform, Math.vec3.new(0, 0, -0.01)) + update = true + end + + if (Input.get_key_state("y"):is_key_pressed()) then + transform = Math.add(transform, Math.vec3.new(0, 0.01, 0)) + update = true + end + + if (Input.get_key_state("h"):is_key_pressed()) then + transform = Math.add(transform, Math.vec3.new(0, -0.01, 0)) + update = true + end + + if (update == true) then + transform_component.position = transform + end +end diff --git a/resources/game/TheDen/scripts/rubix_cube_script.lua b/resources/game/TheDen/scripts/rubix_cube_script.lua new file mode 100644 index 00000000..3b737ac4 --- /dev/null +++ b/resources/game/TheDen/scripts/rubix_cube_script.lua @@ -0,0 +1,7 @@ +var = { +} + +function init(ecs, entity) + local rb = entity:get_rigidbody_component() + rb:add_box_collider(Math.vec3.new(0, 0, 0), Math.vec3.new(0, 0, 0), Math.vec3.new(0.06, 0.06, 0.06), 0.5, 0.1, 0.5) +end diff --git a/resources/game/_Scenes.lua b/resources/game/_Scenes.lua new file mode 100644 index 00000000..96585a05 --- /dev/null +++ b/resources/game/_Scenes.lua @@ -0,0 +1,6 @@ +dofile("game/ECSScene/_Materials.lua") + +Scene.create_scene("duckandcover3", "game/ECSScene/_MasterCreation.lua") +Scene.create_scene("TheDen", "game/TheDen/_MasterCreation.lua") + +Scene.load_scene("TheDen") diff --git a/resources/models/Glass.mtl b/resources/models/Glass.mtl new file mode 100644 index 00000000..d85d28a9 --- /dev/null +++ b/resources/models/Glass.mtl @@ -0,0 +1,24 @@ +# Blender 3.1.0 MTL File: 'TheDen.blend' +# www.blender.org + +newmtl DarkGlass +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd DarkGlass.png + +newmtl DarkGlass.006 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd DarkGlass.png diff --git a/resources/models/Glass.obj b/resources/models/Glass.obj new file mode 100644 index 00000000..25afab3a --- /dev/null +++ b/resources/models/Glass.obj @@ -0,0 +1,632 @@ +# Blender 3.1.0 +# www.blender.org +mtllib Glass.mtl +o Guild Meeting room glass wall +v -7.616777 3.000000 -2.856165 +v -7.616777 0.000000 -2.856165 +v -7.616777 3.000000 -2.681315 +v -7.616777 0.000000 -2.681315 +v -11.945494 3.000000 -2.856165 +v -11.945494 0.000000 -2.856165 +v -11.945494 3.000000 -2.681315 +v -11.945494 0.000000 -2.681315 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.0874 +vn -2.1644 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 2.1644 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0874 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl DarkGlass +f 1/1/1 5/5/1 7/9/1 3/3/1 +f 4/4/2 3/3/2 7/10/2 8/12/2 +f 8/13/3 7/11/3 5/6/3 6/8/3 +f 6/7/4 2/2/4 4/4/4 8/14/4 +f 2/2/5 1/1/5 3/3/5 4/4/5 +f 6/8/6 5/6/6 1/1/6 2/2/6 +o door glass +v 4.969746 2.369494 1.849593 +v 4.969746 0.035466 1.849593 +v 4.969746 2.369494 1.916273 +v 4.969746 0.035466 1.916273 +v 4.139520 2.369494 1.849593 +v 4.139520 0.035466 1.849593 +v 4.139520 2.369494 1.916273 +v 4.139520 0.035466 1.916273 +vn -0.0000 1.1670 -0.0000 +vn -0.0000 -0.0000 0.0333 +vn -0.4204 -0.0000 -0.0000 +vn -0.0000 -1.1670 -0.0000 +vn 0.4204 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0333 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl DarkGlass +f 9/15/7 13/19/7 15/23/7 11/17/7 +f 12/18/8 11/17/8 15/24/8 16/26/8 +f 16/27/9 15/25/9 13/20/9 14/22/9 +f 14/21/10 10/16/10 12/18/10 16/28/10 +f 10/16/11 9/15/11 11/17/11 12/18/11 +f 14/22/12 13/20/12 9/15/12 10/16/12 +o door glass.001 +v 7.430086 2.369494 1.849593 +v 7.430086 0.035466 1.849593 +v 7.430086 2.369494 1.916273 +v 7.430086 0.035466 1.916273 +v 6.578794 2.369494 1.849593 +v 6.578794 0.035466 1.849593 +v 6.578794 2.369494 1.916273 +v 6.578794 0.035466 1.916273 +vn -0.0000 1.1670 -0.0000 +vn -0.0000 -0.0000 0.0333 +vn -0.4311 -0.0000 -0.0000 +vn -0.0000 -1.1670 -0.0000 +vn 0.4311 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0333 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl DarkGlass +f 17/29/13 21/33/13 23/37/13 19/31/13 +f 20/32/14 19/31/14 23/38/14 24/40/14 +f 24/41/15 23/39/15 21/34/15 22/36/15 +f 22/35/16 18/30/16 20/32/16 24/42/16 +f 18/30/17 17/29/17 19/31/17 20/32/17 +f 22/36/18 21/34/18 17/29/18 18/30/18 +o door glass.002 +v -6.602953 2.369494 1.849593 +v -6.602953 0.035466 1.849593 +v -6.602953 2.369494 1.916273 +v -6.602953 0.035466 1.916273 +v -7.387035 2.369494 1.849593 +v -7.387035 0.035466 1.849593 +v -7.387035 2.369494 1.916273 +v -7.387035 0.035466 1.916273 +vn -0.0000 1.1670 -0.0000 +vn -0.0000 -0.0000 0.0333 +vn -0.3970 -0.0000 -0.0000 +vn -0.0000 -1.1670 -0.0000 +vn 0.3970 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0333 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl DarkGlass +f 25/43/19 29/47/19 31/51/19 27/45/19 +f 28/46/20 27/45/20 31/52/20 32/54/20 +f 32/55/21 31/53/21 29/48/21 30/50/21 +f 30/49/22 26/44/22 28/46/22 32/56/22 +f 26/44/23 25/43/23 27/45/23 28/46/23 +f 30/50/24 29/48/24 25/43/24 26/44/24 +o door glass.003 +v -10.779345 2.369494 1.849593 +v -10.779345 0.035466 1.849593 +v -10.779345 2.369494 1.916273 +v -10.779345 0.035466 1.916273 +v -11.563426 2.369494 1.849593 +v -11.563426 0.035466 1.849593 +v -11.563426 2.369494 1.916273 +v -11.563426 0.035466 1.916273 +vn -0.0000 1.1670 -0.0000 +vn -0.0000 -0.0000 0.0333 +vn -0.3970 -0.0000 -0.0000 +vn -0.0000 -1.1670 -0.0000 +vn 0.3970 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0333 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl DarkGlass +f 33/57/25 37/61/25 39/65/25 35/59/25 +f 36/60/26 35/59/26 39/66/26 40/68/26 +f 40/69/27 39/67/27 37/62/27 38/64/27 +f 38/63/28 34/58/28 36/60/28 40/70/28 +f 34/58/29 33/57/29 35/59/29 36/60/29 +f 38/64/30 37/62/30 33/57/30 34/58/30 +o GuildClubs Glass wall +v -7.896138 2.428760 1.845285 +v -7.896138 0.000000 1.845285 +v -7.896138 2.428760 2.020135 +v -7.896138 0.000000 2.020135 +v -10.707726 2.428760 1.845285 +v -10.707726 0.000000 1.845285 +v -10.707726 2.428760 2.020135 +v -10.707726 0.000000 2.020135 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.0874 +vn -2.7944 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 2.7944 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0874 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl DarkGlass +f 41/71/31 45/75/31 47/79/31 43/73/31 +f 44/74/32 43/73/32 47/80/32 48/82/32 +f 48/83/33 47/81/33 45/76/33 46/78/33 +f 46/77/34 42/72/34 44/74/34 48/84/34 +f 42/72/35 41/71/35 43/73/35 44/74/35 +f 46/78/36 45/76/36 41/71/36 42/72/36 +o parent & care/guild meeting glass wall.001 +v 6.493647 2.428760 1.845285 +v 6.493647 0.000000 1.845285 +v 6.493647 2.428760 2.020135 +v 6.493647 0.000000 2.020135 +v 5.057119 2.428760 1.845285 +v 5.057119 0.000000 1.845285 +v 5.057119 2.428760 2.020135 +v 5.057119 0.000000 2.020135 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.0874 +vn -0.7183 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 0.7183 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0874 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl DarkGlass +f 49/85/37 53/89/37 55/93/37 51/87/37 +f 52/88/38 51/87/38 55/94/38 56/96/38 +f 56/97/39 55/95/39 53/90/39 54/92/39 +f 54/91/40 50/86/40 52/88/40 56/98/40 +f 50/86/41 49/85/41 51/87/41 52/88/41 +f 54/92/42 53/90/42 49/85/42 50/86/42 +o Theatrette - Bottom Left glass wall +v 4.812383 2.400000 -3.141650 +v 4.812383 0.000000 -3.141650 +v 7.760053 2.400000 -3.141650 +v 7.760053 0.000000 -3.141650 +v 4.812383 2.400000 -2.941650 +v 4.812383 0.000000 -2.941650 +v 7.760053 2.400000 -2.941650 +v 7.760053 0.000000 -2.941650 +vn -0.0000 1.5000 -0.0000 +vn 1.4738 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.1000 +vn -0.0000 -1.5000 -0.0000 +vn -0.0000 -0.0000 -0.1000 +vn -1.4738 -0.0000 -0.0000 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl DarkGlass +f 57/99/43 61/103/43 63/107/43 59/101/43 +f 60/102/44 59/101/44 63/108/44 64/110/44 +f 64/111/45 63/109/45 61/104/45 62/106/45 +f 62/105/46 58/100/46 60/102/46 64/112/46 +f 58/100/47 57/99/47 59/101/47 60/102/47 +f 62/106/48 61/104/48 57/99/48 58/100/48 +o Theatrette - glass wall +v 4.996949 2.400000 -7.482034 +v 4.996949 0.000000 -7.482034 +v 4.996949 2.400000 -3.135219 +v 4.996949 0.000000 -3.135219 +v 4.796949 2.400000 -7.482034 +v 4.796949 0.000000 -7.482034 +v 4.796949 2.400000 -3.135219 +v 4.796949 0.000000 -3.135219 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 2.3487 +vn -0.1000 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 0.1000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -2.3487 +vt 0.505000 0.505000 +vt 0.495000 0.505000 +vt 0.505000 0.515000 +vt 0.495000 0.515000 +vt 0.525000 0.505000 +vt 0.505000 0.485000 +vt 0.475000 0.505000 +vt 0.495000 0.485000 +vt 0.525000 0.515000 +vt 0.505000 0.525000 +vt 0.505000 0.475000 +vt 0.495000 0.525000 +vt 0.495000 0.475000 +vt 0.475000 0.515000 +s 0 +usemtl DarkGlass +f 65/113/49 69/117/49 71/121/49 67/115/49 +f 68/116/50 67/115/50 71/122/50 72/124/50 +f 72/125/51 71/123/51 69/118/51 70/120/51 +f 70/119/52 66/114/52 68/116/52 72/126/52 +f 66/114/53 65/113/53 67/115/53 68/116/53 +f 70/120/54 69/118/54 65/113/54 66/114/54 +o door glass.004 +v 9.436151 2.369494 1.849593 +v 9.436151 0.035466 1.849593 +v 9.436151 2.369494 1.916273 +v 9.436151 0.035466 1.916273 +v 8.584858 2.369494 1.849593 +v 8.584858 0.035466 1.849593 +v 8.584858 2.369494 1.916273 +v 8.584858 0.035466 1.916273 +vn -0.0000 1.1670 -0.0000 +vn -0.0000 -0.0000 0.0333 +vn -0.4311 -0.0000 -0.0000 +vn -0.0000 -1.1670 -0.0000 +vn 0.4311 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0333 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl DarkGlass +f 73/127/55 77/131/55 79/135/55 75/129/55 +f 76/130/56 75/129/56 79/136/56 80/138/56 +f 80/139/57 79/137/57 77/132/57 78/134/57 +f 78/133/58 74/128/58 76/130/58 80/140/58 +f 74/128/59 73/127/59 75/129/59 76/130/59 +f 78/134/60 77/132/60 73/127/60 74/128/60 +o parent & care/guild meeting glass wall.002 +v 8.498414 2.428760 1.845285 +v 8.498414 0.000000 1.845285 +v 8.498414 2.428760 2.020135 +v 8.498414 0.000000 2.020135 +v 7.682133 2.428760 1.845285 +v 7.682133 0.000000 1.845285 +v 7.682133 2.428760 2.020135 +v 7.682133 0.000000 2.020135 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.0874 +vn -0.5790 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 0.5790 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0874 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl DarkGlass +f 81/141/61 85/145/61 87/149/61 83/143/61 +f 84/144/62 83/143/62 87/150/62 88/152/62 +f 88/153/63 87/151/63 85/146/63 86/148/63 +f 86/147/64 82/142/64 84/144/64 88/154/64 +f 82/142/65 81/141/65 83/143/65 84/144/65 +f 86/148/66 85/146/66 81/141/66 82/142/66 +o door glass.005 +v -11.753670 2.369494 0.445672 +v -11.753670 0.035466 0.445672 +v -11.753670 2.369494 0.378992 +v -11.753670 0.035466 0.378992 +v -10.969588 2.369494 0.445672 +v -10.969588 0.035466 0.445672 +v -10.969588 2.369494 0.378992 +v -10.969588 0.035466 0.378992 +vn -0.0000 1.1670 -0.0000 +vn -0.0000 -0.0000 -0.0333 +vn 0.3970 -0.0000 -0.0000 +vn -0.0000 -1.1670 -0.0000 +vn -0.3970 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.0333 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl DarkGlass.006 +f 89/155/67 93/159/67 95/163/67 91/157/67 +f 92/158/68 91/157/68 95/164/68 96/166/68 +f 96/167/69 95/165/69 93/160/69 94/162/69 +f 94/161/70 90/156/70 92/158/70 96/168/70 +f 90/156/71 89/155/71 91/157/71 92/158/71 +f 94/162/72 93/160/72 89/155/72 90/156/72 +o door glass.006 +v -9.598523 2.369494 0.445672 +v -9.598523 0.035466 0.445672 +v -9.598523 2.369494 0.378992 +v -9.598523 0.035466 0.378992 +v -8.814442 2.369494 0.445672 +v -8.814442 0.035466 0.445672 +v -8.814442 2.369494 0.378992 +v -8.814442 0.035466 0.378992 +vn -0.0000 1.1670 -0.0000 +vn -0.0000 -0.0000 -0.0333 +vn 0.3970 -0.0000 -0.0000 +vn -0.0000 -1.1670 -0.0000 +vn -0.3970 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.0333 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl DarkGlass +f 97/169/73 101/173/73 103/177/73 99/171/73 +f 100/172/74 99/171/74 103/178/74 104/180/74 +f 104/181/75 103/179/75 101/174/75 102/176/75 +f 102/175/76 98/170/76 100/172/76 104/182/76 +f 98/170/77 97/169/77 99/171/77 100/172/77 +f 102/176/78 101/174/78 97/169/78 98/170/78 +o GuildClubs Glass wall.001 +v -9.836330 3.000000 0.285856 +v -9.836330 0.000000 0.285856 +v -9.836330 3.000000 0.447051 +v -9.836330 0.000000 0.447051 +v -10.889849 3.000000 0.285856 +v -10.889849 0.000000 0.285856 +v -10.889849 3.000000 0.447051 +v -10.889849 0.000000 0.447051 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.0874 +vn -1.0471 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 1.0471 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0874 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl DarkGlass +f 105/183/79 109/187/79 111/191/79 107/185/79 +f 108/186/80 107/185/80 111/192/80 112/194/80 +f 112/195/81 111/193/81 109/188/81 110/190/81 +f 110/189/82 106/184/82 108/186/82 112/196/82 +f 106/184/83 105/183/83 107/185/83 108/186/83 +f 110/190/84 109/188/84 105/183/84 106/184/84 +o GuildClubs Glass wall.002 +v -7.718474 3.000000 0.285856 +v -7.718474 0.000000 0.285856 +v -7.718474 3.000000 0.447051 +v -7.718474 0.000000 0.447051 +v -8.732753 3.000000 0.285856 +v -8.732753 0.000000 0.285856 +v -8.732753 3.000000 0.447051 +v -8.732753 0.000000 0.447051 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.0874 +vn -1.0471 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 1.0471 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0874 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl DarkGlass +f 113/197/85 117/201/85 119/205/85 115/199/85 +f 116/200/86 115/199/86 119/206/86 120/208/86 +f 120/209/87 119/207/87 117/202/87 118/204/87 +f 118/203/88 114/198/88 116/200/88 120/210/88 +f 114/198/89 113/197/89 115/199/89 116/200/89 +f 118/204/90 117/202/90 113/197/90 114/198/90 +o GuildClubs Glass wall.003 +v -3.759587 2.428760 1.845285 +v -3.759587 0.000000 1.845285 +v -3.759587 2.428760 2.020135 +v -3.759587 0.000000 2.020135 +v -6.525830 2.428760 1.845285 +v -6.525830 0.000000 1.845285 +v -6.525830 2.428760 2.020135 +v -6.525830 0.000000 2.020135 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.0874 +vn -2.7944 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 2.7944 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0874 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl DarkGlass +f 121/211/91 125/215/91 127/219/91 123/213/91 +f 124/214/92 123/213/92 127/220/92 128/222/92 +f 128/223/93 127/221/93 125/216/93 126/218/93 +f 126/217/94 122/212/94 124/214/94 128/224/94 +f 122/212/95 121/211/95 123/213/95 124/214/95 +f 126/218/96 125/216/96 121/211/96 122/212/96 +o Main - Top +v 4.832432 2.428760 -7.753190 +v 4.832432 0.000000 -7.753190 +v 4.832432 2.428760 -7.453190 +v 4.832432 0.000000 -7.453190 +v -14.512302 2.428760 -7.753190 +v -14.512302 0.000000 -7.753190 +v -14.512302 2.428760 -7.453190 +v -14.512302 0.000000 -7.453190 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.1500 +vn -9.6724 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 9.6724 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1500 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl DarkGlass +f 129/225/97 133/229/97 135/233/97 131/227/97 +f 132/228/98 131/227/98 135/234/98 136/236/98 +f 136/237/99 135/235/99 133/230/99 134/232/99 +f 134/231/100 130/226/100 132/228/100 136/238/100 +f 130/226/101 129/225/101 131/227/101 132/228/101 +f 134/232/102 133/230/102 129/225/102 130/226/102 diff --git a/resources/models/StaticObjectFromTheater.mtl b/resources/models/StaticObjectFromTheater.mtl new file mode 100644 index 00000000..e0eb08f0 --- /dev/null +++ b/resources/models/StaticObjectFromTheater.mtl @@ -0,0 +1,13 @@ +# Blender 3.1.0 MTL File: 'TheDen.blend' +# www.blender.org + +newmtl Wood +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd wood.png diff --git a/resources/models/StaticObjectFromTheater.obj b/resources/models/StaticObjectFromTheater.obj new file mode 100644 index 00000000..b51bb452 --- /dev/null +++ b/resources/models/StaticObjectFromTheater.obj @@ -0,0 +1,114 @@ +# Blender 3.1.0 +# www.blender.org +mtllib StaticObjectFromTheater.mtl +o Theatrette - Bottom.001 +v 4.808777 0.500000 -7.482163 +v 4.808777 0.000000 -7.482163 +v 4.808777 0.500000 -2.789483 +v 4.808777 0.000000 -2.789483 +v 3.808777 0.500000 -7.482163 +v 3.808777 0.000000 -7.482163 +v 3.808777 0.500000 -2.789483 +v 3.808777 0.000000 -2.789483 +vn -0.0000 0.2500 -0.0000 +vn -0.0000 -0.0000 2.3463 +vn -0.5000 -0.0000 -0.0000 +vn -0.0000 -0.2500 -0.0000 +vn 0.5000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -2.3463 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl Wood +f 1/1/1 5/5/1 7/9/1 3/3/1 +f 4/4/2 3/3/2 7/10/2 8/12/2 +f 8/13/3 7/11/3 5/6/3 6/8/3 +f 6/7/4 2/2/4 4/4/4 8/14/4 +f 2/2/5 1/1/5 3/3/5 4/4/5 +f 6/8/6 5/6/6 1/1/6 2/2/6 +o Theatrette - Bottom.002 +v 5.849507 0.600000 -7.479465 +v 5.849507 0.000000 -7.479465 +v 5.849507 0.600000 -3.127929 +v 5.849507 0.000000 -3.127929 +v 4.849507 0.600000 -7.479465 +v 4.849507 0.000000 -7.479465 +v 4.849507 0.600000 -3.127929 +v 4.849507 0.000000 -3.127929 +vn -0.0000 0.3000 -0.0000 +vn -0.0000 -0.0000 2.1758 +vn -0.5000 -0.0000 -0.0000 +vn -0.0000 -0.3000 -0.0000 +vn 0.5000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -2.1758 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl Wood +f 9/15/7 13/19/7 15/23/7 11/17/7 +f 12/18/8 11/17/8 15/24/8 16/26/8 +f 16/27/9 15/25/9 13/20/9 14/22/9 +f 14/21/10 10/16/10 12/18/10 16/28/10 +f 10/16/11 9/15/11 11/17/11 12/18/11 +f 14/22/12 13/20/12 9/15/12 10/16/12 +o Theatrette - Bottom.003 +v 6.842932 0.300000 -7.479465 +v 6.842932 0.000000 -7.479465 +v 6.842932 0.300000 -3.127929 +v 6.842932 0.000000 -3.127929 +v 5.842932 0.300000 -7.479465 +v 5.842932 0.000000 -7.479465 +v 5.842932 0.300000 -3.127929 +v 5.842932 0.000000 -3.127929 +vn -0.0000 0.1500 -0.0000 +vn -0.0000 -0.0000 2.1758 +vn -0.5000 -0.0000 -0.0000 +vn -0.0000 -0.1500 -0.0000 +vn 0.5000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -2.1758 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl Wood +f 17/29/13 21/33/13 23/37/13 19/31/13 +f 20/32/14 19/31/14 23/38/14 24/40/14 +f 24/41/15 23/39/15 21/34/15 22/36/15 +f 22/35/16 18/30/16 20/32/16 24/42/16 +f 18/30/17 17/29/17 19/31/17 20/32/17 +f 22/36/18 21/34/18 17/29/18 18/30/18 diff --git a/resources/models/TheDen.glb b/resources/models/TheDen.glb new file mode 100644 index 00000000..78be8340 Binary files /dev/null and b/resources/models/TheDen.glb differ diff --git a/resources/models/TheDen.mtl b/resources/models/TheDen.mtl new file mode 100644 index 00000000..d58b7dce --- /dev/null +++ b/resources/models/TheDen.mtl @@ -0,0 +1,728 @@ +# Blender 3.1.0 MTL File: 'TheDen.blend' +# www.blender.org + +newmtl Bin +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd Bin.png + +newmtl Book1 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd book 1.png + +newmtl Book1.001 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd book 1.png + +newmtl Book1.002 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd book 1.png + +newmtl Book1.003 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd book 1.png + +newmtl Book1.004 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd book 1.png + +newmtl Book1.005 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd book 1.png + +newmtl Book1.006 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd book 1.png + +newmtl Book1.007 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd book 1.png + +newmtl Book1.008 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd book 1.png + +newmtl Book1.009 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd book 1.png + +newmtl Book1.010 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd book 1.png + +newmtl Book_2 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd book 2.png + +newmtl Book_2.001 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd book 2.png + +newmtl CabnetDoors +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd CabinetDoors.png + +newmtl CabnetDoors.023 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd CabinetDoors.png + +newmtl Carpet +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd Carpet.png + +newmtl CeilingCabling +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd CeilingCabling.png + +newmtl ChairTexture +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd ChairTexture.png + +newmtl Computer +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd Computer.png + +newmtl Computer.007 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd Computer.png + +newmtl Computer.008 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd Computer.png + +newmtl Computer.009 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd Computer.png + +newmtl Computer.010 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd Computer.png + +newmtl CornerRoom +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd CornerRoom.png + +newmtl DarkWall +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd DarkWall.png + +newmtl ElevatorAndStairs +Ns 250.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd ElevatorAndStairs.png + +newmtl Generic_walls +Ns 250.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd GenericWalls.png + +newmtl Generic_walls.003 +Ns 250.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd GenericWalls.png + +newmtl GlassDoor +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd GlassDoor.png + +newmtl GlassDoor.007 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd GlassDoor.png + +newmtl GlassDoor.008 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd GlassDoor.png + +newmtl Material.057 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd GenericWalls.png + +newmtl Material.061 +Ns 250.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd chair.jpg + +newmtl Material.063 +Ns 250.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd chair.jpg + +newmtl Material.064 +Ns 250.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd chair.jpg + +newmtl Material.066 +Ns 250.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd chair.jpg + +newmtl Material.067 +Ns 250.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd chair.jpg + +newmtl Material.068 +Ns 250.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd chair.jpg + +newmtl Material.069 +Ns 250.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd chair.jpg + +newmtl Material.070 +Ns 250.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd chair.jpg + +newmtl Material.071 +Ns 250.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd chair.jpg + +newmtl Material.072 +Ns 250.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd chair.jpg + +newmtl Material.073 +Ns 250.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd chair.jpg + +newmtl Material.074 +Ns 250.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd chair.jpg + +newmtl Material.075 +Ns 250.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd chair.jpg + +newmtl Material.076 +Ns 250.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd chair.jpg + +newmtl Pillars +Ns 250.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd pillarsAndroof.png + +newmtl Pizza +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd pizza.png + +newmtl Pizza.001 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd pizza.png + +newmtl Pizza.002 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd pizza.png + +newmtl Pizza.003 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd pizza.png + +newmtl Pizza.004 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd pizza.png + +newmtl Pizza.005 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd pizza.png + +newmtl Tissuebox +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd tissuebox.png + +newmtl WallPattern +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd WallPattern.png + +newmtl Wood +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd wood.png + +newmtl Wood.001 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd wood.png + +newmtl Wood.003 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd wood.png + +newmtl Wood.009 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd wood.png + +newmtl book_3 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd book 3.png + +newmtl book_3.001 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd book 3.png + +newmtl calculator +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd Calculator.png + +newmtl floor +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd floor.png + +newmtl marker +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd marker.png + +newmtl rubixcube +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd rubixcube.png diff --git a/resources/models/TheDen.obj b/resources/models/TheDen.obj new file mode 100644 index 00000000..6e44fc94 --- /dev/null +++ b/resources/models/TheDen.obj @@ -0,0 +1,114399 @@ +# Blender 3.1.0 +# www.blender.org +mtllib TheDen.mtl +o door.008 +v -0.127038 2.428759 -7.521700 +v -0.127038 -0.023799 -7.521700 +v -0.127038 2.428759 -7.452261 +v -0.127038 -0.023799 -7.452261 +v -1.240494 2.428759 -7.521700 +v -1.240494 -0.023799 -7.521700 +v -1.240494 2.428759 -7.452261 +v -1.240494 -0.023799 -7.452261 +v -0.127038 2.244086 -7.521700 +v -0.127038 0.160874 -7.521700 +v -1.240494 0.160874 -7.452261 +v -1.240494 2.244086 -7.452261 +v -0.127038 2.244086 -7.452261 +v -0.127038 0.160874 -7.452261 +v -1.240494 2.244086 -7.521700 +v -1.240494 0.160874 -7.521700 +v -0.300624 -0.023799 -7.521700 +v -1.066909 -0.023799 -7.521700 +v -0.300624 2.428760 -7.452261 +v -1.066909 2.428760 -7.452261 +v -1.066909 -0.023799 -7.452261 +v -0.300624 -0.023799 -7.452261 +v -1.066909 2.428760 -7.521700 +v -0.300624 2.428760 -7.521700 +v -1.066909 0.160874 -7.521700 +v -0.300624 0.160874 -7.521700 +v -1.066909 2.244086 -7.521700 +v -0.300624 2.244086 -7.521700 +v -0.300624 0.160874 -7.452261 +v -1.066909 0.160874 -7.452261 +v -0.300624 2.244086 -7.452261 +v -1.066909 2.244086 -7.452261 +v -1.240494 0.873035 -7.452261 +v -1.240494 1.130972 -7.452261 +v -1.240494 1.130972 -7.521700 +v -1.240494 0.873035 -7.521700 +v -1.066909 1.130972 -7.452261 +v -1.066909 0.873035 -7.452261 +v -1.066909 1.130972 -7.521700 +v -1.066909 0.873035 -7.521700 +vn -0.0000 1.2263 -0.0000 +vn -0.0000 -0.0000 0.0347 +vn -0.5638 -0.0000 -0.0000 +vn -0.0000 -1.2263 -0.0000 +vn 0.5638 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0347 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.685000 +vt 0.585000 0.925000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.525000 0.085000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.585000 0.095000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.405000 0.515000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.515000 +vt 0.895000 0.665000 +vt 0.385000 0.565000 +vt 0.385000 0.565000 +vt 0.895000 0.665000 +vt 0.525000 0.085000 +vt 0.405000 0.515000 +vt 0.405000 0.515000 +vt 0.525000 0.085000 +vt 0.385000 0.515000 +vt 0.405000 0.085000 +vt 0.405000 0.085000 +vt 0.385000 0.515000 +vt 0.495000 0.085000 +vt 0.475934 0.925000 +vt 0.945000 0.685000 +vt 0.455000 0.085000 +vt 0.322601 0.925000 +vt 0.945000 0.685000 +vt 0.915000 0.665000 +vt 0.715000 0.975000 +vt 0.322601 0.925000 +vt 0.925000 0.665000 +vt 0.715000 0.015000 +vt 0.475934 0.925000 +vt 0.395000 0.515000 +vt 0.455000 0.085000 +vt 0.405000 0.515000 +vt 0.495000 0.085000 +vt 0.915000 0.665000 +vt 0.395000 0.565000 +vt 0.245000 0.975000 +vt 0.405000 0.565000 +vt 0.925000 0.665000 +vt 0.245000 0.015000 +s 0 +usemtl GlassDoor +f 23/50/1 5/9/1 7/13/1 20/44/1 +f 32/69/2 20/43/2 7/14/2 12/27/2 +f 12/26/3 7/15/3 5/9/3 15/33/3 +f 17/38/4 2/4/4 4/7/4 22/48/4 +f 9/20/5 1/2/5 3/6/5 13/28/5 +f 28/62/6 24/51/6 1/1/6 9/19/6 +f 17/37/6 26/57/6 10/21/6 2/3/6 +f 26/57/6 28/62/6 9/19/6 10/21/6 +f 2/4/5 10/22/5 14/30/5 4/7/5 +f 10/23/5 9/20/5 13/28/5 14/31/5 +f 8/16/3 11/25/3 16/36/3 6/12/3 +f 34/73/3 12/26/3 15/33/3 35/76/3 +f 21/45/2 30/66/2 11/24/2 8/17/2 +f 37/84/2 32/69/2 12/27/2 34/74/2 +f 14/32/2 13/29/2 31/68/2 29/63/2 +f 27/60/4 28/61/4 31/67/4 32/70/4 +f 4/8/2 14/32/2 29/63/2 22/47/2 +f 22/47/2 29/63/2 30/66/2 21/45/2 +f 35/77/6 15/34/6 27/59/6 39/87/6 +f 29/64/3 31/67/3 28/61/3 26/56/3 +f 6/11/6 16/35/6 25/55/6 18/39/6 +f 18/39/6 25/55/6 26/57/6 17/37/6 +f 15/34/6 5/10/6 23/49/6 27/59/6 +f 27/59/6 23/49/6 24/51/6 28/62/6 +f 6/12/4 18/40/4 21/46/4 8/18/4 +f 18/40/4 17/38/4 22/48/4 21/46/4 +f 13/29/2 3/5/2 19/41/2 31/68/2 +f 31/68/2 19/41/2 20/43/2 32/69/2 +f 1/2/1 24/52/1 19/42/1 3/6/1 +f 24/52/1 23/50/1 20/44/1 19/42/1 +f 37/83/5 39/88/5 27/60/5 32/70/5 +f 25/53/1 30/65/1 29/64/1 26/58/1 +f 30/65/5 25/54/5 40/90/5 38/85/5 +f 38/85/5 40/90/5 39/88/5 37/83/5 +f 16/35/6 36/80/6 40/91/6 25/55/6 +f 36/81/6 35/78/6 39/89/6 40/92/6 +f 30/66/2 38/86/2 33/71/2 11/24/2 +f 38/86/2 37/84/2 34/74/2 33/71/2 +f 11/25/3 33/72/3 36/82/3 16/36/3 +f 33/72/3 34/75/3 35/79/3 36/82/3 +o Main - Left.002 +v -9.707244 3.000000 -7.681386 +v -9.707244 0.000000 -7.681386 +v -9.707244 3.000000 -7.451387 +v -9.707244 0.000000 -7.451387 +v -9.937243 3.000000 -7.681386 +v -9.937243 0.000000 -7.681386 +v -9.937243 3.000000 -7.451387 +v -9.937243 0.000000 -7.451387 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.1150 +vn -0.1150 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 0.1150 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1150 +vt 0.625000 0.500000 +vt 0.717500 0.991250 +vt 0.351500 0.991750 +vt 0.375000 0.500000 +vt 0.717500 0.009250 +vt 0.351500 0.019750 +vt 0.625000 0.750000 +vt 0.650500 0.140750 +vt 0.533500 0.991250 +vt 0.554500 0.140750 +vt 0.375000 0.750000 +vt 0.533500 0.009250 +vt 0.875000 0.500000 +vt 0.542500 0.991250 +vt 0.523500 0.993750 +vt 0.542500 0.004250 +vt 0.125000 0.500000 +vt 0.523500 0.021750 +vt 0.875000 0.750000 +vt 0.650500 0.859250 +vt 0.692500 0.991250 +vt 0.554500 0.859250 +vt 0.692500 0.004250 +vt 0.125000 0.750000 +s 0 +usemtl Pillars +f 41/93/7 45/105/7 47/111/7 43/99/7 +f 44/102/8 43/100/8 47/112/8 48/114/8 +f 48/115/9 47/113/9 45/106/9 46/108/9 +f 46/109/10 42/96/10 44/103/10 48/116/10 +f 42/97/11 41/94/11 43/101/11 44/104/11 +f 46/110/12 45/107/12 41/95/12 42/98/12 +o Main - Mid.003 +v -4.583330 3.000000 -7.681386 +v -4.583330 0.000000 -7.681386 +v -4.583330 3.000000 -7.451387 +v -4.583330 0.000000 -7.451387 +v -4.813330 3.000000 -7.681386 +v -4.813330 0.000000 -7.681386 +v -4.813330 3.000000 -7.451387 +v -4.813330 0.000000 -7.451387 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.1150 +vn -0.1150 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 0.1150 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1150 +vt 0.625000 0.500000 +vt 0.679500 0.020750 +vt 0.523500 0.834750 +vt 0.375000 0.500000 +vt 0.679500 0.927750 +vt 0.523500 0.048750 +vt 0.625000 0.750000 +vt 0.519500 0.997250 +vt 0.549500 0.020750 +vt 0.519500 0.037250 +vt 0.375000 0.750000 +vt 0.549500 0.927750 +vt 0.875000 0.500000 +vt 0.547500 0.882250 +vt 0.673500 0.834750 +vt 0.547500 0.065250 +vt 0.125000 0.500000 +vt 0.673500 0.048750 +vt 0.875000 0.750000 +vt 0.347500 0.995750 +vt 0.679500 0.882250 +vt 0.347500 0.035750 +vt 0.679500 0.065250 +vt 0.125000 0.750000 +s 0 +usemtl Pillars +f 49/117/13 53/129/13 55/135/13 51/123/13 +f 52/126/14 51/124/14 55/136/14 56/138/14 +f 56/139/15 55/137/15 53/130/15 54/132/15 +f 54/133/16 50/120/16 52/127/16 56/140/16 +f 50/121/17 49/118/17 51/125/17 52/128/17 +f 54/134/18 53/131/18 49/119/18 50/122/18 +o Main - Mid.004 +v 0.107729 3.000000 -7.681386 +v 0.107729 0.000000 -7.681386 +v 0.107729 3.000000 -7.451387 +v 0.107729 0.000000 -7.451387 +v -0.122271 3.000000 -7.681386 +v -0.122271 0.000000 -7.681386 +v -0.122271 3.000000 -7.451387 +v -0.122271 0.000000 -7.451387 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.1150 +vn -0.1150 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 0.1150 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1150 +vt 0.625000 0.500000 +vt 0.682500 0.995250 +vt 0.686500 0.041250 +vt 0.375000 0.500000 +vt 0.682500 0.000250 +vt 0.686500 0.903250 +vt 0.625000 0.750000 +vt 0.559500 0.007750 +vt 0.544500 0.995250 +vt 0.559500 0.995750 +vt 0.375000 0.750000 +vt 0.544500 0.000250 +vt 0.875000 0.500000 +vt 0.698500 0.069250 +vt 0.562500 0.041250 +vt 0.698500 0.880250 +vt 0.125000 0.500000 +vt 0.562500 0.903250 +vt 0.875000 0.750000 +vt 0.699500 0.007750 +vt 0.534500 0.069250 +vt 0.699500 0.995750 +vt 0.534500 0.880250 +vt 0.125000 0.750000 +s 0 +usemtl Pillars +f 57/141/19 61/153/19 63/159/19 59/147/19 +f 60/150/20 59/148/20 63/160/20 64/162/20 +f 64/163/21 63/161/21 61/154/21 62/156/21 +f 62/157/22 58/144/22 60/151/22 64/164/22 +f 58/145/23 57/142/23 59/149/23 60/152/23 +f 62/158/24 61/155/24 57/143/24 58/146/24 +o door.009 +v -1.237376 2.428759 -7.521700 +v -1.237376 -0.023799 -7.521700 +v -1.237376 2.428759 -7.452261 +v -1.237376 -0.023799 -7.452261 +v -2.350833 2.428759 -7.521700 +v -2.350833 -0.023799 -7.521700 +v -2.350833 2.428759 -7.452261 +v -2.350833 -0.023799 -7.452261 +v -1.237376 2.244086 -7.521700 +v -1.237376 0.160874 -7.521700 +v -2.350833 0.160874 -7.452261 +v -2.350833 2.244086 -7.452261 +v -1.237376 2.244086 -7.452261 +v -1.237376 0.160874 -7.452261 +v -2.350833 2.244086 -7.521700 +v -2.350833 0.160874 -7.521700 +v -1.410963 -0.023799 -7.521700 +v -2.177247 -0.023799 -7.521700 +v -1.410963 2.428760 -7.452261 +v -2.177247 2.428760 -7.452261 +v -2.177247 -0.023799 -7.452261 +v -1.410963 -0.023799 -7.452261 +v -2.177247 2.428760 -7.521700 +v -1.410963 2.428760 -7.521700 +v -2.177247 0.160874 -7.521700 +v -1.410963 0.160874 -7.521700 +v -2.177247 2.244086 -7.521700 +v -1.410963 2.244086 -7.521700 +v -1.410963 0.160874 -7.452261 +v -2.177247 0.160874 -7.452261 +v -1.410963 2.244086 -7.452261 +v -2.177247 2.244086 -7.452261 +v -2.350833 0.873035 -7.452261 +v -2.350833 1.130972 -7.452261 +v -2.350833 1.130972 -7.521700 +v -2.350833 0.873035 -7.521700 +v -2.177247 1.130972 -7.452261 +v -2.177247 0.873035 -7.452261 +v -2.177247 1.130972 -7.521700 +v -2.177247 0.873035 -7.521700 +vn -0.0000 1.2263 -0.0000 +vn -0.0000 -0.0000 0.0347 +vn -0.5638 -0.0000 -0.0000 +vn -0.0000 -1.2263 -0.0000 +vn 0.5638 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0347 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.685000 +vt 0.585000 0.925000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.525000 0.085000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.585000 0.095000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.405000 0.515000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.515000 +vt 0.895000 0.665000 +vt 0.385000 0.565000 +vt 0.385000 0.565000 +vt 0.895000 0.665000 +vt 0.525000 0.085000 +vt 0.405000 0.515000 +vt 0.405000 0.515000 +vt 0.525000 0.085000 +vt 0.385000 0.515000 +vt 0.405000 0.085000 +vt 0.405000 0.085000 +vt 0.385000 0.515000 +vt 0.495000 0.085000 +vt 0.475934 0.925000 +vt 0.945000 0.685000 +vt 0.455000 0.085000 +vt 0.322601 0.925000 +vt 0.945000 0.685000 +vt 0.915000 0.665000 +vt 0.715000 0.975000 +vt 0.322601 0.925000 +vt 0.925000 0.665000 +vt 0.715000 0.015000 +vt 0.475934 0.925000 +vt 0.395000 0.515000 +vt 0.455000 0.085000 +vt 0.405000 0.515000 +vt 0.495000 0.085000 +vt 0.915000 0.665000 +vt 0.395000 0.565000 +vt 0.245000 0.975000 +vt 0.405000 0.565000 +vt 0.925000 0.665000 +vt 0.245000 0.015000 +s 0 +usemtl GlassDoor +f 87/214/25 69/173/25 71/177/25 84/208/25 +f 96/233/26 84/207/26 71/178/26 76/191/26 +f 76/190/27 71/179/27 69/173/27 79/197/27 +f 81/202/28 66/168/28 68/171/28 86/212/28 +f 73/184/29 65/166/29 67/170/29 77/192/29 +f 92/226/30 88/215/30 65/165/30 73/183/30 +f 81/201/30 90/221/30 74/185/30 66/167/30 +f 90/221/30 92/226/30 73/183/30 74/185/30 +f 66/168/29 74/186/29 78/194/29 68/171/29 +f 74/187/29 73/184/29 77/192/29 78/195/29 +f 72/180/27 75/189/27 80/200/27 70/176/27 +f 98/237/27 76/190/27 79/197/27 99/240/27 +f 85/209/26 94/230/26 75/188/26 72/181/26 +f 101/248/26 96/233/26 76/191/26 98/238/26 +f 78/196/26 77/193/26 95/232/26 93/227/26 +f 91/224/28 92/225/28 95/231/28 96/234/28 +f 68/172/26 78/196/26 93/227/26 86/211/26 +f 86/211/26 93/227/26 94/230/26 85/209/26 +f 99/241/30 79/198/30 91/223/30 103/251/30 +f 93/228/27 95/231/27 92/225/27 90/220/27 +f 70/175/30 80/199/30 89/219/30 82/203/30 +f 82/203/30 89/219/30 90/221/30 81/201/30 +f 79/198/30 69/174/30 87/213/30 91/223/30 +f 91/223/30 87/213/30 88/215/30 92/226/30 +f 70/176/28 82/204/28 85/210/28 72/182/28 +f 82/204/28 81/202/28 86/212/28 85/210/28 +f 77/193/26 67/169/26 83/205/26 95/232/26 +f 95/232/26 83/205/26 84/207/26 96/233/26 +f 65/166/25 88/216/25 83/206/25 67/170/25 +f 88/216/25 87/214/25 84/208/25 83/206/25 +f 101/247/29 103/252/29 91/224/29 96/234/29 +f 89/217/25 94/229/25 93/228/25 90/222/25 +f 94/229/29 89/218/29 104/254/29 102/249/29 +f 102/249/29 104/254/29 103/252/29 101/247/29 +f 80/199/30 100/244/30 104/255/30 89/219/30 +f 100/245/30 99/242/30 103/253/30 104/256/30 +f 94/230/26 102/250/26 97/235/26 75/188/26 +f 102/250/26 101/248/26 98/238/26 97/235/26 +f 75/189/27 97/236/27 100/246/27 80/200/27 +f 97/236/27 98/239/27 99/243/27 100/246/27 +o door.010 +v -2.349019 2.428759 -7.521700 +v -2.349019 -0.023799 -7.521700 +v -2.349019 2.428759 -7.452261 +v -2.349019 -0.023799 -7.452261 +v -3.462475 2.428759 -7.521700 +v -3.462475 -0.023799 -7.521700 +v -3.462475 2.428759 -7.452261 +v -3.462475 -0.023799 -7.452261 +v -2.349019 2.244086 -7.521700 +v -2.349019 0.160874 -7.521700 +v -3.462475 0.160874 -7.452261 +v -3.462475 2.244086 -7.452261 +v -2.349019 2.244086 -7.452261 +v -2.349019 0.160874 -7.452261 +v -3.462475 2.244086 -7.521700 +v -3.462475 0.160874 -7.521700 +v -2.522605 -0.023799 -7.521700 +v -3.288890 -0.023799 -7.521700 +v -2.522605 2.428760 -7.452261 +v -3.288890 2.428760 -7.452261 +v -3.288890 -0.023799 -7.452261 +v -2.522605 -0.023799 -7.452261 +v -3.288890 2.428760 -7.521700 +v -2.522605 2.428760 -7.521700 +v -3.288890 0.160874 -7.521700 +v -2.522605 0.160874 -7.521700 +v -3.288890 2.244086 -7.521700 +v -2.522605 2.244086 -7.521700 +v -2.522605 0.160874 -7.452261 +v -3.288890 0.160874 -7.452261 +v -2.522605 2.244086 -7.452261 +v -3.288890 2.244086 -7.452261 +v -3.462475 0.873035 -7.452261 +v -3.462475 1.130972 -7.452261 +v -3.462475 1.130972 -7.521700 +v -3.462475 0.873035 -7.521700 +v -3.288890 1.130972 -7.452261 +v -3.288890 0.873035 -7.452261 +v -3.288890 1.130972 -7.521700 +v -3.288890 0.873035 -7.521700 +vn -0.0000 1.2263 -0.0000 +vn -0.0000 -0.0000 0.0347 +vn -0.5638 -0.0000 -0.0000 +vn -0.0000 -1.2263 -0.0000 +vn 0.5638 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0347 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.685000 +vt 0.585000 0.925000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.525000 0.085000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.585000 0.095000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.405000 0.515000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.515000 +vt 0.895000 0.665000 +vt 0.385000 0.565000 +vt 0.385000 0.565000 +vt 0.895000 0.665000 +vt 0.525000 0.085000 +vt 0.405000 0.515000 +vt 0.405000 0.515000 +vt 0.525000 0.085000 +vt 0.385000 0.515000 +vt 0.405000 0.085000 +vt 0.405000 0.085000 +vt 0.385000 0.515000 +vt 0.495000 0.085000 +vt 0.475934 0.925000 +vt 0.945000 0.685000 +vt 0.455000 0.085000 +vt 0.322601 0.925000 +vt 0.945000 0.685000 +vt 0.915000 0.665000 +vt 0.715000 0.975000 +vt 0.322601 0.925000 +vt 0.925000 0.665000 +vt 0.715000 0.015000 +vt 0.475934 0.925000 +vt 0.395000 0.515000 +vt 0.455000 0.085000 +vt 0.405000 0.515000 +vt 0.495000 0.085000 +vt 0.915000 0.665000 +vt 0.395000 0.565000 +vt 0.245000 0.975000 +vt 0.405000 0.565000 +vt 0.925000 0.665000 +vt 0.245000 0.015000 +s 0 +usemtl GlassDoor +f 127/306/31 109/265/31 111/269/31 124/300/31 +f 136/325/32 124/299/32 111/270/32 116/283/32 +f 116/282/33 111/271/33 109/265/33 119/289/33 +f 121/294/34 106/260/34 108/263/34 126/304/34 +f 113/276/35 105/258/35 107/262/35 117/284/35 +f 132/318/36 128/307/36 105/257/36 113/275/36 +f 121/293/36 130/313/36 114/277/36 106/259/36 +f 130/313/36 132/318/36 113/275/36 114/277/36 +f 106/260/35 114/278/35 118/286/35 108/263/35 +f 114/279/35 113/276/35 117/284/35 118/287/35 +f 112/272/33 115/281/33 120/292/33 110/268/33 +f 138/329/33 116/282/33 119/289/33 139/332/33 +f 125/301/32 134/322/32 115/280/32 112/273/32 +f 141/340/32 136/325/32 116/283/32 138/330/32 +f 118/288/32 117/285/32 135/324/32 133/319/32 +f 131/316/34 132/317/34 135/323/34 136/326/34 +f 108/264/32 118/288/32 133/319/32 126/303/32 +f 126/303/32 133/319/32 134/322/32 125/301/32 +f 139/333/36 119/290/36 131/315/36 143/343/36 +f 133/320/33 135/323/33 132/317/33 130/312/33 +f 110/267/36 120/291/36 129/311/36 122/295/36 +f 122/295/36 129/311/36 130/313/36 121/293/36 +f 119/290/36 109/266/36 127/305/36 131/315/36 +f 131/315/36 127/305/36 128/307/36 132/318/36 +f 110/268/34 122/296/34 125/302/34 112/274/34 +f 122/296/34 121/294/34 126/304/34 125/302/34 +f 117/285/32 107/261/32 123/297/32 135/324/32 +f 135/324/32 123/297/32 124/299/32 136/325/32 +f 105/258/31 128/308/31 123/298/31 107/262/31 +f 128/308/31 127/306/31 124/300/31 123/298/31 +f 141/339/35 143/344/35 131/316/35 136/326/35 +f 129/309/31 134/321/31 133/320/31 130/314/31 +f 134/321/35 129/310/35 144/346/35 142/341/35 +f 142/341/35 144/346/35 143/344/35 141/339/35 +f 120/291/36 140/336/36 144/347/36 129/311/36 +f 140/337/36 139/334/36 143/345/36 144/348/36 +f 134/322/32 142/342/32 137/327/32 115/280/32 +f 142/342/32 141/340/32 138/330/32 137/327/32 +f 115/281/33 137/328/33 140/338/33 120/292/33 +f 137/328/33 138/331/33 139/335/33 140/338/33 +o door.011 +v -3.462805 2.428759 -7.521700 +v -3.462805 -0.023799 -7.521700 +v -3.462805 2.428759 -7.452261 +v -3.462805 -0.023799 -7.452261 +v -4.576262 2.428759 -7.521700 +v -4.576262 -0.023799 -7.521700 +v -4.576262 2.428759 -7.452261 +v -4.576262 -0.023799 -7.452261 +v -3.462805 2.244086 -7.521700 +v -3.462805 0.160874 -7.521700 +v -4.576262 0.160874 -7.452261 +v -4.576262 2.244086 -7.452261 +v -3.462805 2.244086 -7.452261 +v -3.462805 0.160874 -7.452261 +v -4.576262 2.244086 -7.521700 +v -4.576262 0.160874 -7.521700 +v -3.636391 -0.023799 -7.521700 +v -4.402676 -0.023799 -7.521700 +v -3.636391 2.428760 -7.452261 +v -4.402676 2.428760 -7.452261 +v -4.402676 -0.023799 -7.452261 +v -3.636391 -0.023799 -7.452261 +v -4.402676 2.428760 -7.521700 +v -3.636391 2.428760 -7.521700 +v -4.402676 0.160874 -7.521700 +v -3.636391 0.160874 -7.521700 +v -4.402676 2.244086 -7.521700 +v -3.636391 2.244086 -7.521700 +v -3.636391 0.160874 -7.452261 +v -4.402676 0.160874 -7.452261 +v -3.636391 2.244086 -7.452261 +v -4.402676 2.244086 -7.452261 +v -4.576262 0.873035 -7.452261 +v -4.576262 1.130972 -7.452261 +v -4.576262 1.130972 -7.521700 +v -4.576262 0.873035 -7.521700 +v -4.402676 1.130972 -7.452261 +v -4.402676 0.873035 -7.452261 +v -4.402676 1.130972 -7.521700 +v -4.402676 0.873035 -7.521700 +vn -0.0000 1.2263 -0.0000 +vn -0.0000 -0.0000 0.0347 +vn -0.5638 -0.0000 -0.0000 +vn -0.0000 -1.2263 -0.0000 +vn 0.5638 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0347 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.685000 +vt 0.585000 0.925000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.525000 0.085000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.585000 0.095000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.405000 0.515000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.515000 +vt 0.895000 0.665000 +vt 0.385000 0.565000 +vt 0.385000 0.565000 +vt 0.895000 0.665000 +vt 0.525000 0.085000 +vt 0.405000 0.515000 +vt 0.405000 0.515000 +vt 0.525000 0.085000 +vt 0.385000 0.515000 +vt 0.405000 0.085000 +vt 0.405000 0.085000 +vt 0.385000 0.515000 +vt 0.495000 0.085000 +vt 0.475934 0.925000 +vt 0.945000 0.685000 +vt 0.455000 0.085000 +vt 0.322601 0.925000 +vt 0.945000 0.685000 +vt 0.915000 0.665000 +vt 0.715000 0.975000 +vt 0.322601 0.925000 +vt 0.925000 0.665000 +vt 0.715000 0.015000 +vt 0.475934 0.925000 +vt 0.395000 0.515000 +vt 0.455000 0.085000 +vt 0.405000 0.515000 +vt 0.495000 0.085000 +vt 0.915000 0.665000 +vt 0.395000 0.565000 +vt 0.245000 0.975000 +vt 0.405000 0.565000 +vt 0.925000 0.665000 +vt 0.245000 0.015000 +s 0 +usemtl GlassDoor +f 167/398/37 149/357/37 151/361/37 164/392/37 +f 176/417/38 164/391/38 151/362/38 156/375/38 +f 156/374/39 151/363/39 149/357/39 159/381/39 +f 161/386/40 146/352/40 148/355/40 166/396/40 +f 153/368/41 145/350/41 147/354/41 157/376/41 +f 172/410/42 168/399/42 145/349/42 153/367/42 +f 161/385/42 170/405/42 154/369/42 146/351/42 +f 170/405/42 172/410/42 153/367/42 154/369/42 +f 146/352/41 154/370/41 158/378/41 148/355/41 +f 154/371/41 153/368/41 157/376/41 158/379/41 +f 152/364/39 155/373/39 160/384/39 150/360/39 +f 178/421/39 156/374/39 159/381/39 179/424/39 +f 165/393/38 174/414/38 155/372/38 152/365/38 +f 181/432/38 176/417/38 156/375/38 178/422/38 +f 158/380/38 157/377/38 175/416/38 173/411/38 +f 171/408/40 172/409/40 175/415/40 176/418/40 +f 148/356/38 158/380/38 173/411/38 166/395/38 +f 166/395/38 173/411/38 174/414/38 165/393/38 +f 179/425/42 159/382/42 171/407/42 183/435/42 +f 173/412/39 175/415/39 172/409/39 170/404/39 +f 150/359/42 160/383/42 169/403/42 162/387/42 +f 162/387/42 169/403/42 170/405/42 161/385/42 +f 159/382/42 149/358/42 167/397/42 171/407/42 +f 171/407/42 167/397/42 168/399/42 172/410/42 +f 150/360/40 162/388/40 165/394/40 152/366/40 +f 162/388/40 161/386/40 166/396/40 165/394/40 +f 157/377/38 147/353/38 163/389/38 175/416/38 +f 175/416/38 163/389/38 164/391/38 176/417/38 +f 145/350/37 168/400/37 163/390/37 147/354/37 +f 168/400/37 167/398/37 164/392/37 163/390/37 +f 181/431/41 183/436/41 171/408/41 176/418/41 +f 169/401/37 174/413/37 173/412/37 170/406/37 +f 174/413/41 169/402/41 184/438/41 182/433/41 +f 182/433/41 184/438/41 183/436/41 181/431/41 +f 160/383/42 180/428/42 184/439/42 169/403/42 +f 180/429/42 179/426/42 183/437/42 184/440/42 +f 174/414/38 182/434/38 177/419/38 155/372/38 +f 182/434/38 181/432/38 178/422/38 177/419/38 +f 155/373/39 177/420/39 180/430/39 160/384/39 +f 177/420/39 178/423/39 179/427/39 180/430/39 +o door.012 +v -8.474792 2.428759 -7.521700 +v -8.474792 -0.023799 -7.521700 +v -8.474792 2.428759 -7.452261 +v -8.474792 -0.023799 -7.452261 +v -9.700809 2.428759 -7.521700 +v -9.700809 -0.023799 -7.521700 +v -9.700809 2.428759 -7.452261 +v -9.700809 -0.023799 -7.452261 +v -8.474792 2.244086 -7.521700 +v -8.474792 0.160874 -7.521700 +v -9.700809 0.160874 -7.452261 +v -9.700809 2.244086 -7.452261 +v -8.474792 2.244086 -7.452261 +v -8.474792 0.160874 -7.452261 +v -9.700809 2.244086 -7.521700 +v -9.700809 0.160874 -7.521700 +v -8.665926 -0.023799 -7.521700 +v -9.509676 -0.023799 -7.521700 +v -8.665926 2.428760 -7.452261 +v -9.509676 2.428760 -7.452261 +v -9.509676 -0.023799 -7.452261 +v -8.665926 -0.023799 -7.452261 +v -9.509676 2.428760 -7.521700 +v -8.665926 2.428760 -7.521700 +v -9.509676 0.160874 -7.521700 +v -8.665926 0.160874 -7.521700 +v -9.509676 2.244086 -7.521700 +v -8.665926 2.244086 -7.521700 +v -8.665926 0.160874 -7.452261 +v -9.509676 0.160874 -7.452261 +v -8.665926 2.244086 -7.452261 +v -9.509676 2.244086 -7.452261 +v -9.700809 0.873035 -7.452261 +v -9.700809 1.130972 -7.452261 +v -9.700809 1.130972 -7.521700 +v -9.700809 0.873035 -7.521700 +v -9.509676 1.130972 -7.452261 +v -9.509676 0.873035 -7.452261 +v -9.509676 1.130972 -7.521700 +v -9.509676 0.873035 -7.521700 +vn -0.0000 1.2263 -0.0000 +vn -0.0000 -0.0000 0.0347 +vn -0.6208 -0.0000 -0.0000 +vn -0.0000 -1.2263 -0.0000 +vn 0.6208 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0347 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.685000 +vt 0.585000 0.925000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.525000 0.085000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.585000 0.095000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.405000 0.515000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.515000 +vt 0.895000 0.665000 +vt 0.385000 0.565000 +vt 0.385000 0.565000 +vt 0.895000 0.665000 +vt 0.525000 0.085000 +vt 0.405000 0.515000 +vt 0.405000 0.515000 +vt 0.525000 0.085000 +vt 0.385000 0.515000 +vt 0.405000 0.085000 +vt 0.405000 0.085000 +vt 0.385000 0.515000 +vt 0.495000 0.085000 +vt 0.475934 0.925000 +vt 0.945000 0.685000 +vt 0.455000 0.085000 +vt 0.322601 0.925000 +vt 0.945000 0.685000 +vt 0.915000 0.665000 +vt 0.715000 0.975000 +vt 0.322601 0.925000 +vt 0.925000 0.665000 +vt 0.715000 0.015000 +vt 0.475934 0.925000 +vt 0.395000 0.515000 +vt 0.455000 0.085000 +vt 0.405000 0.515000 +vt 0.495000 0.085000 +vt 0.915000 0.665000 +vt 0.395000 0.565000 +vt 0.245000 0.975000 +vt 0.405000 0.565000 +vt 0.925000 0.665000 +vt 0.245000 0.015000 +s 0 +usemtl GlassDoor +f 207/490/43 189/449/43 191/453/43 204/484/43 +f 216/509/44 204/483/44 191/454/44 196/467/44 +f 196/466/45 191/455/45 189/449/45 199/473/45 +f 201/478/46 186/444/46 188/447/46 206/488/46 +f 193/460/47 185/442/47 187/446/47 197/468/47 +f 212/502/48 208/491/48 185/441/48 193/459/48 +f 201/477/48 210/497/48 194/461/48 186/443/48 +f 210/497/48 212/502/48 193/459/48 194/461/48 +f 186/444/47 194/462/47 198/470/47 188/447/47 +f 194/463/47 193/460/47 197/468/47 198/471/47 +f 192/456/45 195/465/45 200/476/45 190/452/45 +f 218/513/45 196/466/45 199/473/45 219/516/45 +f 205/485/44 214/506/44 195/464/44 192/457/44 +f 221/524/44 216/509/44 196/467/44 218/514/44 +f 198/472/44 197/469/44 215/508/44 213/503/44 +f 211/500/46 212/501/46 215/507/46 216/510/46 +f 188/448/44 198/472/44 213/503/44 206/487/44 +f 206/487/44 213/503/44 214/506/44 205/485/44 +f 219/517/48 199/474/48 211/499/48 223/527/48 +f 213/504/45 215/507/45 212/501/45 210/496/45 +f 190/451/48 200/475/48 209/495/48 202/479/48 +f 202/479/48 209/495/48 210/497/48 201/477/48 +f 199/474/48 189/450/48 207/489/48 211/499/48 +f 211/499/48 207/489/48 208/491/48 212/502/48 +f 190/452/46 202/480/46 205/486/46 192/458/46 +f 202/480/46 201/478/46 206/488/46 205/486/46 +f 197/469/44 187/445/44 203/481/44 215/508/44 +f 215/508/44 203/481/44 204/483/44 216/509/44 +f 185/442/43 208/492/43 203/482/43 187/446/43 +f 208/492/43 207/490/43 204/484/43 203/482/43 +f 221/523/47 223/528/47 211/500/47 216/510/47 +f 209/493/43 214/505/43 213/504/43 210/498/43 +f 214/505/47 209/494/47 224/530/47 222/525/47 +f 222/525/47 224/530/47 223/528/47 221/523/47 +f 200/475/48 220/520/48 224/531/48 209/495/48 +f 220/521/48 219/518/48 223/529/48 224/532/48 +f 214/506/44 222/526/44 217/511/44 195/464/44 +f 222/526/44 221/524/44 218/514/44 217/511/44 +f 195/465/45 217/512/45 220/522/45 200/476/45 +f 217/512/45 218/515/45 219/519/45 220/522/45 +o door.013 +v -7.248411 2.428759 -7.521700 +v -7.248411 -0.023799 -7.521700 +v -7.248411 2.428759 -7.452261 +v -7.248411 -0.023799 -7.452261 +v -8.474429 2.428759 -7.521700 +v -8.474429 -0.023799 -7.521700 +v -8.474429 2.428759 -7.452261 +v -8.474429 -0.023799 -7.452261 +v -7.248411 2.244086 -7.521700 +v -7.248411 0.160874 -7.521700 +v -8.474429 0.160874 -7.452261 +v -8.474429 2.244086 -7.452261 +v -7.248411 2.244086 -7.452261 +v -7.248411 0.160874 -7.452261 +v -8.474429 2.244086 -7.521700 +v -8.474429 0.160874 -7.521700 +v -7.439546 -0.023799 -7.521700 +v -8.283296 -0.023799 -7.521700 +v -7.439546 2.428760 -7.452261 +v -8.283296 2.428760 -7.452261 +v -8.283296 -0.023799 -7.452261 +v -7.439546 -0.023799 -7.452261 +v -8.283296 2.428760 -7.521700 +v -7.439546 2.428760 -7.521700 +v -8.283296 0.160874 -7.521700 +v -7.439546 0.160874 -7.521700 +v -8.283296 2.244086 -7.521700 +v -7.439546 2.244086 -7.521700 +v -7.439546 0.160874 -7.452261 +v -8.283296 0.160874 -7.452261 +v -7.439546 2.244086 -7.452261 +v -8.283296 2.244086 -7.452261 +v -8.474429 0.873035 -7.452261 +v -8.474429 1.130972 -7.452261 +v -8.474429 1.130972 -7.521700 +v -8.474429 0.873035 -7.521700 +v -8.283296 1.130972 -7.452261 +v -8.283296 0.873035 -7.452261 +v -8.283296 1.130972 -7.521700 +v -8.283296 0.873035 -7.521700 +vn -0.0000 1.2263 -0.0000 +vn -0.0000 -0.0000 0.0347 +vn -0.6208 -0.0000 -0.0000 +vn -0.0000 -1.2263 -0.0000 +vn 0.6208 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0347 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.685000 +vt 0.585000 0.925000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.525000 0.085000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.585000 0.095000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.405000 0.515000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.515000 +vt 0.895000 0.665000 +vt 0.385000 0.565000 +vt 0.385000 0.565000 +vt 0.895000 0.665000 +vt 0.525000 0.085000 +vt 0.405000 0.515000 +vt 0.405000 0.515000 +vt 0.525000 0.085000 +vt 0.385000 0.515000 +vt 0.405000 0.085000 +vt 0.405000 0.085000 +vt 0.385000 0.515000 +vt 0.495000 0.085000 +vt 0.475934 0.925000 +vt 0.945000 0.685000 +vt 0.455000 0.085000 +vt 0.322601 0.925000 +vt 0.945000 0.685000 +vt 0.915000 0.665000 +vt 0.715000 0.975000 +vt 0.322601 0.925000 +vt 0.925000 0.665000 +vt 0.715000 0.015000 +vt 0.475934 0.925000 +vt 0.395000 0.515000 +vt 0.455000 0.085000 +vt 0.405000 0.515000 +vt 0.495000 0.085000 +vt 0.915000 0.665000 +vt 0.395000 0.565000 +vt 0.245000 0.975000 +vt 0.405000 0.565000 +vt 0.925000 0.665000 +vt 0.245000 0.015000 +s 0 +usemtl GlassDoor +f 247/582/49 229/541/49 231/545/49 244/576/49 +f 256/601/50 244/575/50 231/546/50 236/559/50 +f 236/558/51 231/547/51 229/541/51 239/565/51 +f 241/570/52 226/536/52 228/539/52 246/580/52 +f 233/552/53 225/534/53 227/538/53 237/560/53 +f 252/594/54 248/583/54 225/533/54 233/551/54 +f 241/569/54 250/589/54 234/553/54 226/535/54 +f 250/589/54 252/594/54 233/551/54 234/553/54 +f 226/536/53 234/554/53 238/562/53 228/539/53 +f 234/555/53 233/552/53 237/560/53 238/563/53 +f 232/548/51 235/557/51 240/568/51 230/544/51 +f 258/605/51 236/558/51 239/565/51 259/608/51 +f 245/577/50 254/598/50 235/556/50 232/549/50 +f 261/616/50 256/601/50 236/559/50 258/606/50 +f 238/564/50 237/561/50 255/600/50 253/595/50 +f 251/592/52 252/593/52 255/599/52 256/602/52 +f 228/540/50 238/564/50 253/595/50 246/579/50 +f 246/579/50 253/595/50 254/598/50 245/577/50 +f 259/609/54 239/566/54 251/591/54 263/619/54 +f 253/596/51 255/599/51 252/593/51 250/588/51 +f 230/543/54 240/567/54 249/587/54 242/571/54 +f 242/571/54 249/587/54 250/589/54 241/569/54 +f 239/566/54 229/542/54 247/581/54 251/591/54 +f 251/591/54 247/581/54 248/583/54 252/594/54 +f 230/544/52 242/572/52 245/578/52 232/550/52 +f 242/572/52 241/570/52 246/580/52 245/578/52 +f 237/561/50 227/537/50 243/573/50 255/600/50 +f 255/600/50 243/573/50 244/575/50 256/601/50 +f 225/534/49 248/584/49 243/574/49 227/538/49 +f 248/584/49 247/582/49 244/576/49 243/574/49 +f 261/615/53 263/620/53 251/592/53 256/602/53 +f 249/585/49 254/597/49 253/596/49 250/590/49 +f 254/597/53 249/586/53 264/622/53 262/617/53 +f 262/617/53 264/622/53 263/620/53 261/615/53 +f 240/567/54 260/612/54 264/623/54 249/587/54 +f 260/613/54 259/610/54 263/621/54 264/624/54 +f 254/598/50 262/618/50 257/603/50 235/556/50 +f 262/618/50 261/616/50 258/606/50 257/603/50 +f 235/557/51 257/604/51 260/614/51 240/568/51 +f 257/604/51 258/607/51 259/611/51 260/614/51 +o door.014 +v -6.024391 2.428759 -7.521700 +v -6.024391 -0.023799 -7.521700 +v -6.024391 2.428759 -7.452261 +v -6.024391 -0.023799 -7.452261 +v -7.250409 2.428759 -7.521700 +v -7.250409 -0.023799 -7.521700 +v -7.250409 2.428759 -7.452261 +v -7.250409 -0.023799 -7.452261 +v -6.024391 2.244086 -7.521700 +v -6.024391 0.160874 -7.521700 +v -7.250409 0.160874 -7.452261 +v -7.250409 2.244086 -7.452261 +v -6.024391 2.244086 -7.452261 +v -6.024391 0.160874 -7.452261 +v -7.250409 2.244086 -7.521700 +v -7.250409 0.160874 -7.521700 +v -6.215526 -0.023799 -7.521700 +v -7.059275 -0.023799 -7.521700 +v -6.215526 2.428760 -7.452261 +v -7.059275 2.428760 -7.452261 +v -7.059275 -0.023799 -7.452261 +v -6.215526 -0.023799 -7.452261 +v -7.059275 2.428760 -7.521700 +v -6.215526 2.428760 -7.521700 +v -7.059275 0.160874 -7.521700 +v -6.215526 0.160874 -7.521700 +v -7.059275 2.244086 -7.521700 +v -6.215526 2.244086 -7.521700 +v -6.215526 0.160874 -7.452261 +v -7.059275 0.160874 -7.452261 +v -6.215526 2.244086 -7.452261 +v -7.059275 2.244086 -7.452261 +v -7.250409 0.873035 -7.452261 +v -7.250409 1.130972 -7.452261 +v -7.250409 1.130972 -7.521700 +v -7.250409 0.873035 -7.521700 +v -7.059275 1.130972 -7.452261 +v -7.059275 0.873035 -7.452261 +v -7.059275 1.130972 -7.521700 +v -7.059275 0.873035 -7.521700 +vn -0.0000 1.2263 -0.0000 +vn -0.0000 -0.0000 0.0347 +vn -0.6208 -0.0000 -0.0000 +vn -0.0000 -1.2263 -0.0000 +vn 0.6208 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0347 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.685000 +vt 0.585000 0.925000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.525000 0.085000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.585000 0.095000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.405000 0.515000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.515000 +vt 0.895000 0.665000 +vt 0.385000 0.565000 +vt 0.385000 0.565000 +vt 0.895000 0.665000 +vt 0.525000 0.085000 +vt 0.405000 0.515000 +vt 0.405000 0.515000 +vt 0.525000 0.085000 +vt 0.385000 0.515000 +vt 0.405000 0.085000 +vt 0.405000 0.085000 +vt 0.385000 0.515000 +vt 0.495000 0.085000 +vt 0.475934 0.925000 +vt 0.945000 0.685000 +vt 0.455000 0.085000 +vt 0.322601 0.925000 +vt 0.945000 0.685000 +vt 0.915000 0.665000 +vt 0.715000 0.975000 +vt 0.322601 0.925000 +vt 0.925000 0.665000 +vt 0.715000 0.015000 +vt 0.475934 0.925000 +vt 0.395000 0.515000 +vt 0.455000 0.085000 +vt 0.405000 0.515000 +vt 0.495000 0.085000 +vt 0.915000 0.665000 +vt 0.395000 0.565000 +vt 0.245000 0.975000 +vt 0.405000 0.565000 +vt 0.925000 0.665000 +vt 0.245000 0.015000 +s 0 +usemtl GlassDoor +f 287/674/55 269/633/55 271/637/55 284/668/55 +f 296/693/56 284/667/56 271/638/56 276/651/56 +f 276/650/57 271/639/57 269/633/57 279/657/57 +f 281/662/58 266/628/58 268/631/58 286/672/58 +f 273/644/59 265/626/59 267/630/59 277/652/59 +f 292/686/60 288/675/60 265/625/60 273/643/60 +f 281/661/60 290/681/60 274/645/60 266/627/60 +f 290/681/60 292/686/60 273/643/60 274/645/60 +f 266/628/59 274/646/59 278/654/59 268/631/59 +f 274/647/59 273/644/59 277/652/59 278/655/59 +f 272/640/57 275/649/57 280/660/57 270/636/57 +f 298/697/57 276/650/57 279/657/57 299/700/57 +f 285/669/56 294/690/56 275/648/56 272/641/56 +f 301/708/56 296/693/56 276/651/56 298/698/56 +f 278/656/56 277/653/56 295/692/56 293/687/56 +f 291/684/58 292/685/58 295/691/58 296/694/58 +f 268/632/56 278/656/56 293/687/56 286/671/56 +f 286/671/56 293/687/56 294/690/56 285/669/56 +f 299/701/60 279/658/60 291/683/60 303/711/60 +f 293/688/57 295/691/57 292/685/57 290/680/57 +f 270/635/60 280/659/60 289/679/60 282/663/60 +f 282/663/60 289/679/60 290/681/60 281/661/60 +f 279/658/60 269/634/60 287/673/60 291/683/60 +f 291/683/60 287/673/60 288/675/60 292/686/60 +f 270/636/58 282/664/58 285/670/58 272/642/58 +f 282/664/58 281/662/58 286/672/58 285/670/58 +f 277/653/56 267/629/56 283/665/56 295/692/56 +f 295/692/56 283/665/56 284/667/56 296/693/56 +f 265/626/55 288/676/55 283/666/55 267/630/55 +f 288/676/55 287/674/55 284/668/55 283/666/55 +f 301/707/59 303/712/59 291/684/59 296/694/59 +f 289/677/55 294/689/55 293/688/55 290/682/55 +f 294/689/59 289/678/59 304/714/59 302/709/59 +f 302/709/59 304/714/59 303/712/59 301/707/59 +f 280/659/60 300/704/60 304/715/60 289/679/60 +f 300/705/60 299/702/60 303/713/60 304/716/60 +f 294/690/56 302/710/56 297/695/56 275/648/56 +f 302/710/56 301/708/56 298/698/56 297/695/56 +f 275/649/57 297/696/57 300/706/57 280/660/57 +f 297/696/57 298/699/57 299/703/57 300/706/57 +o door.015 +v -4.801806 2.428759 -7.521700 +v -4.801806 -0.023799 -7.521700 +v -4.801806 2.428759 -7.452261 +v -4.801806 -0.023799 -7.452261 +v -6.027824 2.428759 -7.521700 +v -6.027824 -0.023799 -7.521700 +v -6.027824 2.428759 -7.452261 +v -6.027824 -0.023799 -7.452261 +v -4.801806 2.244086 -7.521700 +v -4.801806 0.160874 -7.521700 +v -6.027824 0.160874 -7.452261 +v -6.027824 2.244086 -7.452261 +v -4.801806 2.244086 -7.452261 +v -4.801806 0.160874 -7.452261 +v -6.027824 2.244086 -7.521700 +v -6.027824 0.160874 -7.521700 +v -4.992941 -0.023799 -7.521700 +v -5.836691 -0.023799 -7.521700 +v -4.992941 2.428760 -7.452261 +v -5.836691 2.428760 -7.452261 +v -5.836691 -0.023799 -7.452261 +v -4.992941 -0.023799 -7.452261 +v -5.836691 2.428760 -7.521700 +v -4.992941 2.428760 -7.521700 +v -5.836691 0.160874 -7.521700 +v -4.992941 0.160874 -7.521700 +v -5.836691 2.244086 -7.521700 +v -4.992941 2.244086 -7.521700 +v -4.992941 0.160874 -7.452261 +v -5.836691 0.160874 -7.452261 +v -4.992941 2.244086 -7.452261 +v -5.836691 2.244086 -7.452261 +v -6.027824 0.873035 -7.452261 +v -6.027824 1.130972 -7.452261 +v -6.027824 1.130972 -7.521700 +v -6.027824 0.873035 -7.521700 +v -5.836691 1.130972 -7.452261 +v -5.836691 0.873035 -7.452261 +v -5.836691 1.130972 -7.521700 +v -5.836691 0.873035 -7.521700 +vn -0.0000 1.2263 -0.0000 +vn -0.0000 -0.0000 0.0347 +vn -0.6208 -0.0000 -0.0000 +vn -0.0000 -1.2263 -0.0000 +vn 0.6208 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0347 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.685000 +vt 0.585000 0.925000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.525000 0.085000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.585000 0.095000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.405000 0.515000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.515000 +vt 0.895000 0.665000 +vt 0.385000 0.565000 +vt 0.385000 0.565000 +vt 0.895000 0.665000 +vt 0.525000 0.085000 +vt 0.405000 0.515000 +vt 0.405000 0.515000 +vt 0.525000 0.085000 +vt 0.385000 0.515000 +vt 0.405000 0.085000 +vt 0.405000 0.085000 +vt 0.385000 0.515000 +vt 0.495000 0.085000 +vt 0.475934 0.925000 +vt 0.945000 0.685000 +vt 0.455000 0.085000 +vt 0.322601 0.925000 +vt 0.945000 0.685000 +vt 0.915000 0.665000 +vt 0.715000 0.975000 +vt 0.322601 0.925000 +vt 0.925000 0.665000 +vt 0.715000 0.015000 +vt 0.475934 0.925000 +vt 0.395000 0.515000 +vt 0.455000 0.085000 +vt 0.405000 0.515000 +vt 0.495000 0.085000 +vt 0.915000 0.665000 +vt 0.395000 0.565000 +vt 0.245000 0.975000 +vt 0.405000 0.565000 +vt 0.925000 0.665000 +vt 0.245000 0.015000 +s 0 +usemtl GlassDoor +f 327/766/61 309/725/61 311/729/61 324/760/61 +f 336/785/62 324/759/62 311/730/62 316/743/62 +f 316/742/63 311/731/63 309/725/63 319/749/63 +f 321/754/64 306/720/64 308/723/64 326/764/64 +f 313/736/65 305/718/65 307/722/65 317/744/65 +f 332/778/66 328/767/66 305/717/66 313/735/66 +f 321/753/66 330/773/66 314/737/66 306/719/66 +f 330/773/66 332/778/66 313/735/66 314/737/66 +f 306/720/65 314/738/65 318/746/65 308/723/65 +f 314/739/65 313/736/65 317/744/65 318/747/65 +f 312/732/63 315/741/63 320/752/63 310/728/63 +f 338/789/63 316/742/63 319/749/63 339/792/63 +f 325/761/62 334/782/62 315/740/62 312/733/62 +f 341/800/62 336/785/62 316/743/62 338/790/62 +f 318/748/62 317/745/62 335/784/62 333/779/62 +f 331/776/64 332/777/64 335/783/64 336/786/64 +f 308/724/62 318/748/62 333/779/62 326/763/62 +f 326/763/62 333/779/62 334/782/62 325/761/62 +f 339/793/66 319/750/66 331/775/66 343/803/66 +f 333/780/63 335/783/63 332/777/63 330/772/63 +f 310/727/66 320/751/66 329/771/66 322/755/66 +f 322/755/66 329/771/66 330/773/66 321/753/66 +f 319/750/66 309/726/66 327/765/66 331/775/66 +f 331/775/66 327/765/66 328/767/66 332/778/66 +f 310/728/64 322/756/64 325/762/64 312/734/64 +f 322/756/64 321/754/64 326/764/64 325/762/64 +f 317/745/62 307/721/62 323/757/62 335/784/62 +f 335/784/62 323/757/62 324/759/62 336/785/62 +f 305/718/61 328/768/61 323/758/61 307/722/61 +f 328/768/61 327/766/61 324/760/61 323/758/61 +f 341/799/65 343/804/65 331/776/65 336/786/65 +f 329/769/61 334/781/61 333/780/61 330/774/61 +f 334/781/65 329/770/65 344/806/65 342/801/65 +f 342/801/65 344/806/65 343/804/65 341/799/65 +f 320/751/66 340/796/66 344/807/66 329/771/66 +f 340/797/66 339/794/66 343/805/66 344/808/66 +f 334/782/62 342/802/62 337/787/62 315/740/62 +f 342/802/62 341/800/62 338/790/62 337/787/62 +f 315/741/63 337/788/63 340/798/63 320/752/63 +f 337/788/63 338/791/63 339/795/63 340/798/63 +o door.016 +v -9.916738 2.428759 -7.521700 +v -9.916738 -0.023799 -7.521700 +v -9.916738 2.428759 -7.452261 +v -9.916738 -0.023799 -7.452261 +v -11.326849 2.428759 -7.521700 +v -11.326849 -0.023799 -7.521700 +v -11.326849 2.428759 -7.452261 +v -11.326849 -0.023799 -7.452261 +v -9.916738 2.244086 -7.521700 +v -9.916738 0.160874 -7.521700 +v -11.326849 0.160874 -7.452261 +v -11.326849 2.244086 -7.452261 +v -9.916738 2.244086 -7.452261 +v -9.916738 0.160874 -7.452261 +v -11.326849 2.244086 -7.521700 +v -11.326849 0.160874 -7.521700 +v -10.136572 -0.023799 -7.521700 +v -11.107016 -0.023799 -7.521700 +v -10.136572 2.428760 -7.452261 +v -11.107016 2.428760 -7.452261 +v -11.107016 -0.023799 -7.452261 +v -10.136572 -0.023799 -7.452261 +v -11.107016 2.428760 -7.521700 +v -10.136572 2.428760 -7.521700 +v -11.107016 0.160874 -7.521700 +v -10.136572 0.160874 -7.521700 +v -11.107016 2.244086 -7.521700 +v -10.136572 2.244086 -7.521700 +v -10.136572 0.160874 -7.452261 +v -11.107016 0.160874 -7.452261 +v -10.136572 2.244086 -7.452261 +v -11.107016 2.244086 -7.452261 +v -11.326849 0.873035 -7.452261 +v -11.326849 1.130972 -7.452261 +v -11.326849 1.130972 -7.521700 +v -11.326849 0.873035 -7.521700 +v -11.107016 1.130972 -7.452261 +v -11.107016 0.873035 -7.452261 +v -11.107016 1.130972 -7.521700 +v -11.107016 0.873035 -7.521700 +vn -0.0000 1.2263 -0.0000 +vn -0.0000 -0.0000 0.0347 +vn -0.7140 -0.0000 -0.0000 +vn -0.0000 -1.2263 -0.0000 +vn 0.7140 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0347 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.685000 +vt 0.585000 0.925000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.525000 0.085000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.585000 0.095000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.405000 0.515000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.515000 +vt 0.895000 0.665000 +vt 0.385000 0.565000 +vt 0.385000 0.565000 +vt 0.895000 0.665000 +vt 0.525000 0.085000 +vt 0.405000 0.515000 +vt 0.405000 0.515000 +vt 0.525000 0.085000 +vt 0.385000 0.515000 +vt 0.405000 0.085000 +vt 0.405000 0.085000 +vt 0.385000 0.515000 +vt 0.495000 0.085000 +vt 0.475934 0.925000 +vt 0.945000 0.685000 +vt 0.455000 0.085000 +vt 0.322601 0.925000 +vt 0.945000 0.685000 +vt 0.915000 0.665000 +vt 0.715000 0.975000 +vt 0.322601 0.925000 +vt 0.925000 0.665000 +vt 0.715000 0.015000 +vt 0.475934 0.925000 +vt 0.395000 0.515000 +vt 0.455000 0.085000 +vt 0.405000 0.515000 +vt 0.495000 0.085000 +vt 0.915000 0.665000 +vt 0.395000 0.565000 +vt 0.245000 0.975000 +vt 0.405000 0.565000 +vt 0.925000 0.665000 +vt 0.245000 0.015000 +s 0 +usemtl GlassDoor.007 +f 367/858/67 349/817/67 351/821/67 364/852/67 +f 376/877/68 364/851/68 351/822/68 356/835/68 +f 356/834/69 351/823/69 349/817/69 359/841/69 +f 361/846/70 346/812/70 348/815/70 366/856/70 +f 353/828/71 345/810/71 347/814/71 357/836/71 +f 372/870/72 368/859/72 345/809/72 353/827/72 +f 361/845/72 370/865/72 354/829/72 346/811/72 +f 370/865/72 372/870/72 353/827/72 354/829/72 +f 346/812/71 354/830/71 358/838/71 348/815/71 +f 354/831/71 353/828/71 357/836/71 358/839/71 +f 352/824/69 355/833/69 360/844/69 350/820/69 +f 378/881/69 356/834/69 359/841/69 379/884/69 +f 365/853/68 374/874/68 355/832/68 352/825/68 +f 381/892/68 376/877/68 356/835/68 378/882/68 +f 358/840/68 357/837/68 375/876/68 373/871/68 +f 371/868/70 372/869/70 375/875/70 376/878/70 +f 348/816/68 358/840/68 373/871/68 366/855/68 +f 366/855/68 373/871/68 374/874/68 365/853/68 +f 379/885/72 359/842/72 371/867/72 383/895/72 +f 373/872/69 375/875/69 372/869/69 370/864/69 +f 350/819/72 360/843/72 369/863/72 362/847/72 +f 362/847/72 369/863/72 370/865/72 361/845/72 +f 359/842/72 349/818/72 367/857/72 371/867/72 +f 371/867/72 367/857/72 368/859/72 372/870/72 +f 350/820/70 362/848/70 365/854/70 352/826/70 +f 362/848/70 361/846/70 366/856/70 365/854/70 +f 357/837/68 347/813/68 363/849/68 375/876/68 +f 375/876/68 363/849/68 364/851/68 376/877/68 +f 345/810/67 368/860/67 363/850/67 347/814/67 +f 368/860/67 367/858/67 364/852/67 363/850/67 +f 381/891/71 383/896/71 371/868/71 376/878/71 +f 369/861/67 374/873/67 373/872/67 370/866/67 +f 374/873/71 369/862/71 384/898/71 382/893/71 +f 382/893/71 384/898/71 383/896/71 381/891/71 +f 360/843/72 380/888/72 384/899/72 369/863/72 +f 380/889/72 379/886/72 383/897/72 384/900/72 +f 374/874/68 382/894/68 377/879/68 355/832/68 +f 382/894/68 381/892/68 378/882/68 377/879/68 +f 355/833/69 377/880/69 380/890/69 360/844/69 +f 377/880/69 378/883/69 379/887/69 380/890/69 +o door.017 +v -11.322902 2.428759 -7.521700 +v -11.322902 -0.023799 -7.521700 +v -11.322902 2.428759 -7.452261 +v -11.322902 -0.023799 -7.452261 +v -12.733013 2.428759 -7.521700 +v -12.733013 -0.023799 -7.521700 +v -12.733013 2.428759 -7.452261 +v -12.733013 -0.023799 -7.452261 +v -11.322902 2.244086 -7.521700 +v -11.322902 0.160874 -7.521700 +v -12.733013 0.160874 -7.452261 +v -12.733013 2.244086 -7.452261 +v -11.322902 2.244086 -7.452261 +v -11.322902 0.160874 -7.452261 +v -12.733013 2.244086 -7.521700 +v -12.733013 0.160874 -7.521700 +v -11.542736 -0.023799 -7.521700 +v -12.513180 -0.023799 -7.521700 +v -11.542736 2.428760 -7.452261 +v -12.513180 2.428760 -7.452261 +v -12.513180 -0.023799 -7.452261 +v -11.542736 -0.023799 -7.452261 +v -12.513180 2.428760 -7.521700 +v -11.542736 2.428760 -7.521700 +v -12.513180 0.160874 -7.521700 +v -11.542736 0.160874 -7.521700 +v -12.513180 2.244086 -7.521700 +v -11.542736 2.244086 -7.521700 +v -11.542736 0.160874 -7.452261 +v -12.513180 0.160874 -7.452261 +v -11.542736 2.244086 -7.452261 +v -12.513180 2.244086 -7.452261 +v -12.733013 0.873035 -7.452261 +v -12.733013 1.130972 -7.452261 +v -12.733013 1.130972 -7.521700 +v -12.733013 0.873035 -7.521700 +v -12.513180 1.130972 -7.452261 +v -12.513180 0.873035 -7.452261 +v -12.513180 1.130972 -7.521700 +v -12.513180 0.873035 -7.521700 +vn -0.0000 1.2263 -0.0000 +vn -0.0000 -0.0000 0.0347 +vn -0.7140 -0.0000 -0.0000 +vn -0.0000 -1.2263 -0.0000 +vn 0.7140 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0347 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.685000 +vt 0.585000 0.925000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.525000 0.085000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.585000 0.095000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.405000 0.515000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.515000 +vt 0.895000 0.665000 +vt 0.385000 0.565000 +vt 0.385000 0.565000 +vt 0.895000 0.665000 +vt 0.525000 0.085000 +vt 0.405000 0.515000 +vt 0.405000 0.515000 +vt 0.525000 0.085000 +vt 0.385000 0.515000 +vt 0.405000 0.085000 +vt 0.405000 0.085000 +vt 0.385000 0.515000 +vt 0.495000 0.085000 +vt 0.475934 0.925000 +vt 0.945000 0.685000 +vt 0.455000 0.085000 +vt 0.322601 0.925000 +vt 0.945000 0.685000 +vt 0.915000 0.665000 +vt 0.715000 0.975000 +vt 0.322601 0.925000 +vt 0.925000 0.665000 +vt 0.715000 0.015000 +vt 0.475934 0.925000 +vt 0.395000 0.515000 +vt 0.455000 0.085000 +vt 0.405000 0.515000 +vt 0.495000 0.085000 +vt 0.915000 0.665000 +vt 0.395000 0.565000 +vt 0.245000 0.975000 +vt 0.405000 0.565000 +vt 0.925000 0.665000 +vt 0.245000 0.015000 +s 0 +usemtl GlassDoor +f 407/950/73 389/909/73 391/913/73 404/944/73 +f 416/969/74 404/943/74 391/914/74 396/927/74 +f 396/926/75 391/915/75 389/909/75 399/933/75 +f 401/938/76 386/904/76 388/907/76 406/948/76 +f 393/920/77 385/902/77 387/906/77 397/928/77 +f 412/962/78 408/951/78 385/901/78 393/919/78 +f 401/937/78 410/957/78 394/921/78 386/903/78 +f 410/957/78 412/962/78 393/919/78 394/921/78 +f 386/904/77 394/922/77 398/930/77 388/907/77 +f 394/923/77 393/920/77 397/928/77 398/931/77 +f 392/916/75 395/925/75 400/936/75 390/912/75 +f 418/973/75 396/926/75 399/933/75 419/976/75 +f 405/945/74 414/966/74 395/924/74 392/917/74 +f 421/984/74 416/969/74 396/927/74 418/974/74 +f 398/932/74 397/929/74 415/968/74 413/963/74 +f 411/960/76 412/961/76 415/967/76 416/970/76 +f 388/908/74 398/932/74 413/963/74 406/947/74 +f 406/947/74 413/963/74 414/966/74 405/945/74 +f 419/977/78 399/934/78 411/959/78 423/987/78 +f 413/964/75 415/967/75 412/961/75 410/956/75 +f 390/911/78 400/935/78 409/955/78 402/939/78 +f 402/939/78 409/955/78 410/957/78 401/937/78 +f 399/934/78 389/910/78 407/949/78 411/959/78 +f 411/959/78 407/949/78 408/951/78 412/962/78 +f 390/912/76 402/940/76 405/946/76 392/918/76 +f 402/940/76 401/938/76 406/948/76 405/946/76 +f 397/929/74 387/905/74 403/941/74 415/968/74 +f 415/968/74 403/941/74 404/943/74 416/969/74 +f 385/902/73 408/952/73 403/942/73 387/906/73 +f 408/952/73 407/950/73 404/944/73 403/942/73 +f 421/983/77 423/988/77 411/960/77 416/970/77 +f 409/953/73 414/965/73 413/964/73 410/958/73 +f 414/965/77 409/954/77 424/990/77 422/985/77 +f 422/985/77 424/990/77 423/988/77 421/983/77 +f 400/935/78 420/980/78 424/991/78 409/955/78 +f 420/981/78 419/978/78 423/989/78 424/992/78 +f 414/966/74 422/986/74 417/971/74 395/924/74 +f 422/986/74 421/984/74 418/974/74 417/971/74 +f 395/925/75 417/972/75 420/982/75 400/936/75 +f 417/972/75 418/975/75 419/979/75 420/982/75 +o door.018 +v -12.730716 2.428759 -7.521700 +v -12.730716 -0.023799 -7.521700 +v -12.730716 2.428759 -7.452261 +v -12.730716 -0.023799 -7.452261 +v -14.140827 2.428759 -7.521700 +v -14.140827 -0.023799 -7.521700 +v -14.140827 2.428759 -7.452261 +v -14.140827 -0.023799 -7.452261 +v -12.730716 2.244086 -7.521700 +v -12.730716 0.160874 -7.521700 +v -14.140827 0.160874 -7.452261 +v -14.140827 2.244086 -7.452261 +v -12.730716 2.244086 -7.452261 +v -12.730716 0.160874 -7.452261 +v -14.140827 2.244086 -7.521700 +v -14.140827 0.160874 -7.521700 +v -12.950550 -0.023799 -7.521700 +v -13.920994 -0.023799 -7.521700 +v -12.950550 2.428760 -7.452261 +v -13.920994 2.428760 -7.452261 +v -13.920994 -0.023799 -7.452261 +v -12.950550 -0.023799 -7.452261 +v -13.920994 2.428760 -7.521700 +v -12.950550 2.428760 -7.521700 +v -13.920994 0.160874 -7.521700 +v -12.950550 0.160874 -7.521700 +v -13.920994 2.244086 -7.521700 +v -12.950550 2.244086 -7.521700 +v -12.950550 0.160874 -7.452261 +v -13.920994 0.160874 -7.452261 +v -12.950550 2.244086 -7.452261 +v -13.920994 2.244086 -7.452261 +v -14.140827 0.873035 -7.452261 +v -14.140827 1.130972 -7.452261 +v -14.140827 1.130972 -7.521700 +v -14.140827 0.873035 -7.521700 +v -13.920994 1.130972 -7.452261 +v -13.920994 0.873035 -7.452261 +v -13.920994 1.130972 -7.521700 +v -13.920994 0.873035 -7.521700 +vn -0.0000 1.2263 -0.0000 +vn -0.0000 -0.0000 0.0347 +vn -0.7140 -0.0000 -0.0000 +vn -0.0000 -1.2263 -0.0000 +vn 0.7140 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0347 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.685000 +vt 0.585000 0.925000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.525000 0.085000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.585000 0.095000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.405000 0.515000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.515000 +vt 0.895000 0.665000 +vt 0.385000 0.565000 +vt 0.385000 0.565000 +vt 0.895000 0.665000 +vt 0.525000 0.085000 +vt 0.405000 0.515000 +vt 0.405000 0.515000 +vt 0.525000 0.085000 +vt 0.385000 0.515000 +vt 0.405000 0.085000 +vt 0.405000 0.085000 +vt 0.385000 0.515000 +vt 0.495000 0.085000 +vt 0.475934 0.925000 +vt 0.945000 0.685000 +vt 0.455000 0.085000 +vt 0.322601 0.925000 +vt 0.945000 0.685000 +vt 0.915000 0.665000 +vt 0.715000 0.975000 +vt 0.322601 0.925000 +vt 0.925000 0.665000 +vt 0.715000 0.015000 +vt 0.475934 0.925000 +vt 0.395000 0.515000 +vt 0.455000 0.085000 +vt 0.405000 0.515000 +vt 0.495000 0.085000 +vt 0.915000 0.665000 +vt 0.395000 0.565000 +vt 0.245000 0.975000 +vt 0.405000 0.565000 +vt 0.925000 0.665000 +vt 0.245000 0.015000 +s 0 +usemtl GlassDoor +f 447/1042/79 429/1001/79 431/1005/79 444/1036/79 +f 456/1061/80 444/1035/80 431/1006/80 436/1019/80 +f 436/1018/81 431/1007/81 429/1001/81 439/1025/81 +f 441/1030/82 426/996/82 428/999/82 446/1040/82 +f 433/1012/83 425/994/83 427/998/83 437/1020/83 +f 452/1054/84 448/1043/84 425/993/84 433/1011/84 +f 441/1029/84 450/1049/84 434/1013/84 426/995/84 +f 450/1049/84 452/1054/84 433/1011/84 434/1013/84 +f 426/996/83 434/1014/83 438/1022/83 428/999/83 +f 434/1015/83 433/1012/83 437/1020/83 438/1023/83 +f 432/1008/81 435/1017/81 440/1028/81 430/1004/81 +f 458/1065/81 436/1018/81 439/1025/81 459/1068/81 +f 445/1037/80 454/1058/80 435/1016/80 432/1009/80 +f 461/1076/80 456/1061/80 436/1019/80 458/1066/80 +f 438/1024/80 437/1021/80 455/1060/80 453/1055/80 +f 451/1052/82 452/1053/82 455/1059/82 456/1062/82 +f 428/1000/80 438/1024/80 453/1055/80 446/1039/80 +f 446/1039/80 453/1055/80 454/1058/80 445/1037/80 +f 459/1069/84 439/1026/84 451/1051/84 463/1079/84 +f 453/1056/81 455/1059/81 452/1053/81 450/1048/81 +f 430/1003/84 440/1027/84 449/1047/84 442/1031/84 +f 442/1031/84 449/1047/84 450/1049/84 441/1029/84 +f 439/1026/84 429/1002/84 447/1041/84 451/1051/84 +f 451/1051/84 447/1041/84 448/1043/84 452/1054/84 +f 430/1004/82 442/1032/82 445/1038/82 432/1010/82 +f 442/1032/82 441/1030/82 446/1040/82 445/1038/82 +f 437/1021/80 427/997/80 443/1033/80 455/1060/80 +f 455/1060/80 443/1033/80 444/1035/80 456/1061/80 +f 425/994/79 448/1044/79 443/1034/79 427/998/79 +f 448/1044/79 447/1042/79 444/1036/79 443/1034/79 +f 461/1075/83 463/1080/83 451/1052/83 456/1062/83 +f 449/1045/79 454/1057/79 453/1056/79 450/1050/79 +f 454/1057/83 449/1046/83 464/1082/83 462/1077/83 +f 462/1077/83 464/1082/83 463/1080/83 461/1075/83 +f 440/1027/84 460/1072/84 464/1083/84 449/1047/84 +f 460/1073/84 459/1070/84 463/1081/84 464/1084/84 +f 454/1058/80 462/1078/80 457/1063/80 435/1016/80 +f 462/1078/80 461/1076/80 458/1066/80 457/1063/80 +f 435/1017/81 457/1064/81 460/1074/81 440/1028/81 +f 457/1064/81 458/1067/81 459/1071/81 460/1074/81 +o door.019 +v 2.480903 2.428759 -7.521700 +v 2.480903 -0.023799 -7.521700 +v 2.480903 2.428759 -7.452261 +v 2.480903 -0.023799 -7.452261 +v 0.074247 2.428759 -7.521700 +v 0.074247 -0.023799 -7.521700 +v 0.074247 2.428759 -7.452261 +v 0.074247 -0.023799 -7.452261 +v 2.480903 2.244086 -7.521700 +v 2.480903 0.160874 -7.521700 +v 0.074247 0.160874 -7.452261 +v 0.074247 2.244086 -7.452261 +v 2.480903 2.244086 -7.452261 +v 2.480903 0.160874 -7.452261 +v 0.074247 2.244086 -7.521700 +v 0.074247 0.160874 -7.521700 +v 2.105708 -0.023799 -7.521700 +v 0.449440 -0.023799 -7.521700 +v 2.105708 2.428760 -7.452261 +v 0.449440 2.428760 -7.452261 +v 0.449440 -0.023799 -7.452261 +v 2.105708 -0.023799 -7.452261 +v 0.449440 2.428760 -7.521700 +v 2.105708 2.428760 -7.521700 +v 0.449440 0.160874 -7.521700 +v 2.105708 0.160874 -7.521700 +v 0.449440 2.244086 -7.521700 +v 2.105708 2.244086 -7.521700 +v 2.105708 0.160874 -7.452261 +v 0.449440 0.160874 -7.452261 +v 2.105708 2.244086 -7.452261 +v 0.449440 2.244086 -7.452261 +v 0.074247 0.873035 -7.452261 +v 0.074247 1.130972 -7.452261 +v 0.074247 1.130972 -7.521700 +v 0.074247 0.873035 -7.521700 +v 0.449440 1.130972 -7.452261 +v 0.449440 0.873035 -7.452261 +v 0.449440 1.130972 -7.521700 +v 0.449440 0.873035 -7.521700 +vn -0.0000 1.2263 -0.0000 +vn -0.0000 -0.0000 0.0347 +vn -1.2186 -0.0000 -0.0000 +vn -0.0000 -1.2263 -0.0000 +vn 1.2186 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0347 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.685000 +vt 0.585000 0.925000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.525000 0.085000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.585000 0.095000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.405000 0.515000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.515000 +vt 0.895000 0.665000 +vt 0.385000 0.565000 +vt 0.385000 0.565000 +vt 0.895000 0.665000 +vt 0.525000 0.085000 +vt 0.405000 0.515000 +vt 0.405000 0.515000 +vt 0.525000 0.085000 +vt 0.385000 0.515000 +vt 0.405000 0.085000 +vt 0.405000 0.085000 +vt 0.385000 0.515000 +vt 0.495000 0.085000 +vt 0.475934 0.925000 +vt 0.945000 0.685000 +vt 0.455000 0.085000 +vt 0.322601 0.925000 +vt 0.945000 0.685000 +vt 0.915000 0.665000 +vt 0.715000 0.975000 +vt 0.322601 0.925000 +vt 0.925000 0.665000 +vt 0.715000 0.015000 +vt 0.475934 0.925000 +vt 0.395000 0.515000 +vt 0.455000 0.085000 +vt 0.405000 0.515000 +vt 0.495000 0.085000 +vt 0.915000 0.665000 +vt 0.395000 0.565000 +vt 0.245000 0.975000 +vt 0.405000 0.565000 +vt 0.925000 0.665000 +vt 0.245000 0.015000 +s 0 +usemtl GlassDoor +f 487/1134/85 469/1093/85 471/1097/85 484/1128/85 +f 496/1153/86 484/1127/86 471/1098/86 476/1111/86 +f 476/1110/87 471/1099/87 469/1093/87 479/1117/87 +f 481/1122/88 466/1088/88 468/1091/88 486/1132/88 +f 473/1104/89 465/1086/89 467/1090/89 477/1112/89 +f 492/1146/90 488/1135/90 465/1085/90 473/1103/90 +f 481/1121/90 490/1141/90 474/1105/90 466/1087/90 +f 490/1141/90 492/1146/90 473/1103/90 474/1105/90 +f 466/1088/89 474/1106/89 478/1114/89 468/1091/89 +f 474/1107/89 473/1104/89 477/1112/89 478/1115/89 +f 472/1100/87 475/1109/87 480/1120/87 470/1096/87 +f 498/1157/87 476/1110/87 479/1117/87 499/1160/87 +f 485/1129/86 494/1150/86 475/1108/86 472/1101/86 +f 501/1168/86 496/1153/86 476/1111/86 498/1158/86 +f 478/1116/86 477/1113/86 495/1152/86 493/1147/86 +f 491/1144/88 492/1145/88 495/1151/88 496/1154/88 +f 468/1092/86 478/1116/86 493/1147/86 486/1131/86 +f 486/1131/86 493/1147/86 494/1150/86 485/1129/86 +f 499/1161/90 479/1118/90 491/1143/90 503/1171/90 +f 493/1148/87 495/1151/87 492/1145/87 490/1140/87 +f 470/1095/90 480/1119/90 489/1139/90 482/1123/90 +f 482/1123/90 489/1139/90 490/1141/90 481/1121/90 +f 479/1118/90 469/1094/90 487/1133/90 491/1143/90 +f 491/1143/90 487/1133/90 488/1135/90 492/1146/90 +f 470/1096/88 482/1124/88 485/1130/88 472/1102/88 +f 482/1124/88 481/1122/88 486/1132/88 485/1130/88 +f 477/1113/86 467/1089/86 483/1125/86 495/1152/86 +f 495/1152/86 483/1125/86 484/1127/86 496/1153/86 +f 465/1086/85 488/1136/85 483/1126/85 467/1090/85 +f 488/1136/85 487/1134/85 484/1128/85 483/1126/85 +f 501/1167/89 503/1172/89 491/1144/89 496/1154/89 +f 489/1137/85 494/1149/85 493/1148/85 490/1142/85 +f 494/1149/89 489/1138/89 504/1174/89 502/1169/89 +f 502/1169/89 504/1174/89 503/1172/89 501/1167/89 +f 480/1119/90 500/1164/90 504/1175/90 489/1139/90 +f 500/1165/90 499/1162/90 503/1173/90 504/1176/90 +f 494/1150/86 502/1170/86 497/1155/86 475/1108/86 +f 502/1170/86 501/1168/86 498/1158/86 497/1155/86 +f 475/1109/87 497/1156/87 500/1166/87 480/1120/87 +f 497/1156/87 498/1159/87 499/1163/87 500/1166/87 +o door.020 +v 4.880819 2.428759 -7.521700 +v 4.880819 -0.023799 -7.521700 +v 4.880819 2.428759 -7.452261 +v 4.880819 -0.023799 -7.452261 +v 2.474163 2.428759 -7.521700 +v 2.474163 -0.023799 -7.521700 +v 2.474163 2.428759 -7.452261 +v 2.474163 -0.023799 -7.452261 +v 4.880819 2.244086 -7.521700 +v 4.880819 0.160874 -7.521700 +v 2.474164 0.160874 -7.452261 +v 2.474164 2.244086 -7.452261 +v 4.880819 2.244086 -7.452261 +v 4.880819 0.160874 -7.452261 +v 2.474164 2.244086 -7.521700 +v 2.474164 0.160874 -7.521700 +v 4.505625 -0.023799 -7.521700 +v 2.849356 -0.023799 -7.521700 +v 4.505625 2.428760 -7.452261 +v 2.849356 2.428760 -7.452261 +v 2.849356 -0.023799 -7.452261 +v 4.505625 -0.023799 -7.452261 +v 2.849356 2.428760 -7.521700 +v 4.505625 2.428760 -7.521700 +v 2.849356 0.160874 -7.521700 +v 4.505625 0.160874 -7.521700 +v 2.849356 2.244086 -7.521700 +v 4.505625 2.244086 -7.521700 +v 4.505625 0.160874 -7.452261 +v 2.849356 0.160874 -7.452261 +v 4.505625 2.244086 -7.452261 +v 2.849356 2.244086 -7.452261 +v 2.474164 0.873035 -7.452261 +v 2.474164 1.130972 -7.452261 +v 2.474164 1.130972 -7.521700 +v 2.474164 0.873035 -7.521700 +v 2.849356 1.130972 -7.452261 +v 2.849356 0.873035 -7.452261 +v 2.849356 1.130972 -7.521700 +v 2.849356 0.873035 -7.521700 +vn -0.0000 1.2263 -0.0000 +vn -0.0000 -0.0000 0.0347 +vn -1.2186 -0.0000 -0.0000 +vn -0.0000 -1.2263 -0.0000 +vn 1.2186 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0347 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.685000 +vt 0.585000 0.925000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.525000 0.085000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.585000 0.095000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.405000 0.515000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.515000 +vt 0.895000 0.665000 +vt 0.385000 0.565000 +vt 0.385000 0.565000 +vt 0.895000 0.665000 +vt 0.525000 0.085000 +vt 0.405000 0.515000 +vt 0.405000 0.515000 +vt 0.525000 0.085000 +vt 0.385000 0.515000 +vt 0.405000 0.085000 +vt 0.405000 0.085000 +vt 0.385000 0.515000 +vt 0.495000 0.085000 +vt 0.475934 0.925000 +vt 0.945000 0.685000 +vt 0.455000 0.085000 +vt 0.322601 0.925000 +vt 0.945000 0.685000 +vt 0.915000 0.665000 +vt 0.715000 0.975000 +vt 0.322601 0.925000 +vt 0.925000 0.665000 +vt 0.715000 0.015000 +vt 0.475934 0.925000 +vt 0.395000 0.515000 +vt 0.455000 0.085000 +vt 0.405000 0.515000 +vt 0.495000 0.085000 +vt 0.915000 0.665000 +vt 0.395000 0.565000 +vt 0.245000 0.975000 +vt 0.405000 0.565000 +vt 0.925000 0.665000 +vt 0.245000 0.015000 +s 0 +usemtl GlassDoor +f 527/1226/91 509/1185/91 511/1189/91 524/1220/91 +f 536/1245/92 524/1219/92 511/1190/92 516/1203/92 +f 516/1202/93 511/1191/93 509/1185/93 519/1209/93 +f 521/1214/94 506/1180/94 508/1183/94 526/1224/94 +f 513/1196/95 505/1178/95 507/1182/95 517/1204/95 +f 532/1238/96 528/1227/96 505/1177/96 513/1195/96 +f 521/1213/96 530/1233/96 514/1197/96 506/1179/96 +f 530/1233/96 532/1238/96 513/1195/96 514/1197/96 +f 506/1180/95 514/1198/95 518/1206/95 508/1183/95 +f 514/1199/95 513/1196/95 517/1204/95 518/1207/95 +f 512/1192/93 515/1201/93 520/1212/93 510/1188/93 +f 538/1249/93 516/1202/93 519/1209/93 539/1252/93 +f 525/1221/92 534/1242/92 515/1200/92 512/1193/92 +f 541/1260/92 536/1245/92 516/1203/92 538/1250/92 +f 518/1208/92 517/1205/92 535/1244/92 533/1239/92 +f 531/1236/94 532/1237/94 535/1243/94 536/1246/94 +f 508/1184/92 518/1208/92 533/1239/92 526/1223/92 +f 526/1223/92 533/1239/92 534/1242/92 525/1221/92 +f 539/1253/96 519/1210/96 531/1235/96 543/1263/96 +f 533/1240/93 535/1243/93 532/1237/93 530/1232/93 +f 510/1187/96 520/1211/96 529/1231/96 522/1215/96 +f 522/1215/96 529/1231/96 530/1233/96 521/1213/96 +f 519/1210/96 509/1186/96 527/1225/96 531/1235/96 +f 531/1235/96 527/1225/96 528/1227/96 532/1238/96 +f 510/1188/94 522/1216/94 525/1222/94 512/1194/94 +f 522/1216/94 521/1214/94 526/1224/94 525/1222/94 +f 517/1205/92 507/1181/92 523/1217/92 535/1244/92 +f 535/1244/92 523/1217/92 524/1219/92 536/1245/92 +f 505/1178/91 528/1228/91 523/1218/91 507/1182/91 +f 528/1228/91 527/1226/91 524/1220/91 523/1218/91 +f 541/1259/95 543/1264/95 531/1236/95 536/1246/95 +f 529/1229/91 534/1241/91 533/1240/91 530/1234/91 +f 534/1241/95 529/1230/95 544/1266/95 542/1261/95 +f 542/1261/95 544/1266/95 543/1264/95 541/1259/95 +f 520/1211/96 540/1256/96 544/1267/96 529/1231/96 +f 540/1257/96 539/1254/96 543/1265/96 544/1268/96 +f 534/1242/92 542/1262/92 537/1247/92 515/1200/92 +f 542/1262/92 541/1260/92 538/1250/92 537/1247/92 +f 515/1201/93 537/1248/93 540/1258/93 520/1212/93 +f 537/1248/93 538/1251/93 539/1255/93 540/1258/93 +o Theatrette - Top +v 14.549971 3.000000 -7.753190 +v 14.549971 0.000000 -7.753190 +v 14.549971 3.000000 -7.453190 +v 14.549971 0.000000 -7.453190 +v 4.825087 3.000000 -7.753190 +v 4.825087 0.000000 -7.753190 +v 4.825087 3.000000 -7.453190 +v 4.825087 0.000000 -7.453190 +v 9.687529 0.000000 -7.753190 +v 9.687529 3.000000 -7.453190 +v 9.687529 0.000000 -7.453190 +v 9.687529 3.000000 -7.753190 +v 4.825087 1.500000 -7.453190 +v 7.256308 3.000000 -7.453190 +v 7.256308 0.000000 -7.453190 +v 9.687529 1.500000 -7.453190 +v 7.256308 1.500000 -7.453190 +v 4.825087 2.250000 -7.453190 +v 6.040697 3.000000 -7.453190 +v 8.471918 0.000000 -7.453190 +v 9.687529 0.750000 -7.453190 +v 4.825087 0.750000 -7.453190 +v 8.471918 3.000000 -7.453190 +v 6.040697 0.000000 -7.453190 +v 9.687529 2.250000 -7.453190 +v 6.040697 1.500000 -7.453190 +v 8.471918 1.500000 -7.453190 +v 7.256308 0.750000 -7.453190 +v 7.256308 2.250000 -7.453190 +v 8.471918 2.250000 -7.453190 +v 8.471918 0.750000 -7.453190 +v 6.040697 0.750000 -7.453190 +v 6.040697 2.250000 -7.453190 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.1500 +vn -4.8624 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 4.8624 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1500 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.471094 0.768981 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.471094 0.768981 +vt 0.875000 0.500000 +vt 0.495573 0.802315 +vt 0.625000 0.250000 +vt 0.495573 0.802315 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.875000 0.750000 +vt 0.364323 0.650463 +vt 0.495573 0.802315 +vt 0.495573 0.802315 +vt 0.125000 0.750000 +vt 0.002865 0.649537 +vt 0.375000 0.375000 +vt 0.250000 0.500000 +vt 0.471094 0.768981 +vt 0.750000 0.750000 +vt 0.365365 0.006944 +vt 0.250000 0.750000 +vt 0.471094 0.768981 +vt 0.002865 0.006944 +vt 0.625000 0.375000 +vt 0.750000 0.500000 +vt 0.495573 0.802315 +vt 0.365365 0.649537 +vt 0.002865 0.649537 +vt 0.812500 0.750000 +vt 0.365365 0.649537 +vt 0.365365 0.006944 +vt 0.187500 0.750000 +vt 0.002865 0.649537 +vt 0.002865 0.006944 +vt 0.471094 0.768981 +vt 0.002865 0.006944 +vt 0.365365 0.006944 +vt 0.365365 0.649537 +vt 0.002865 0.649537 +vt 0.365365 0.006944 +vt 0.002865 0.006944 +vt 0.003906 0.650463 +vt 0.495573 0.802315 +vt 0.365365 0.649537 +vt 0.843750 0.750000 +vt 0.364323 0.006019 +vt 0.365365 0.649537 +vt 0.218750 0.750000 +vt 0.002865 0.006944 +vt 0.002865 0.649537 +vt 0.471094 0.768981 +vt 0.365365 0.006944 +vt 0.002865 0.006944 +vt 0.495573 0.802315 +vt 0.002865 0.649537 +vt 0.365365 0.649537 +vt 0.781250 0.750000 +vt 0.365365 0.006944 +vt 0.365365 0.649537 +vt 0.156250 0.750000 +vt 0.002865 0.006944 +vt 0.002865 0.649537 +vt 0.471094 0.768981 +vt 0.365365 0.006944 +vt 0.002865 0.006944 +vt 0.365365 0.006944 +vt 0.365365 0.649537 +vt 0.002865 0.006944 +vt 0.002865 0.649537 +vt 0.365365 0.006944 +vt 0.002865 0.006944 +vt 0.002865 0.649537 +vt 0.365365 0.649537 +vt 0.002865 0.649537 +vt 0.365365 0.649537 +vt 0.365365 0.006944 +vt 0.002865 0.006944 +vt 0.002865 0.649537 +vt 0.365365 0.649537 +vt 0.365365 0.006944 +vt 0.002865 0.006944 +vt 0.002865 0.006944 +vt 0.365365 0.006944 +vt 0.365365 0.649537 +vt 0.002865 0.649537 +vt 0.002865 0.006944 +vt 0.365365 0.006944 +vt 0.365365 0.649537 +vt 0.002865 0.649537 +vt 0.002865 0.006944 +vt 0.365365 0.006944 +vt 0.365365 0.649537 +vt 0.002865 0.649537 +vt 0.003906 0.006019 +vt 0.365365 0.006944 +vt 0.365365 0.649537 +vt 0.002865 0.649537 +s 0 +usemtl Generic_walls +f 556/1296/97 549/1275/97 551/1281/97 563/1316/97 558/1300/97 567/1328/97 554/1290/97 +f 577/1365/98 563/1317/98 551/1282/98 562/1313/98 +f 552/1284/99 566/1325/99 557/1297/99 562/1314/99 551/1283/99 549/1276/99 550/1278/99 +f 553/1288/100 546/1270/100 548/1273/100 555/1292/100 +f 546/1270/101 545/1269/101 547/1272/101 548/1273/101 +f 553/1287/102 556/1295/102 545/1269/102 546/1270/102 +f 550/1279/102 549/1277/102 556/1295/102 553/1287/102 +f 550/1280/100 553/1288/100 555/1292/100 564/1319/100 559/1303/100 568/1331/100 552/1285/100 +f 548/1274/98 547/1271/98 554/1289/98 569/1334/98 560/1306/98 565/1322/98 555/1293/98 +f 545/1269/97 556/1296/97 554/1290/97 547/1272/97 +f 576/1361/98 570/1337/98 557/1298/98 566/1326/98 +f 575/1357/98 571/1341/98 561/1309/98 572/1345/98 +f 574/1353/98 567/1329/98 558/1301/98 573/1349/98 +f 571/1342/98 574/1354/98 573/1350/98 561/1310/98 +f 560/1307/98 569/1335/98 574/1355/98 571/1343/98 +f 569/1336/98 554/1291/98 567/1330/98 574/1356/98 +f 564/1320/98 575/1358/98 572/1346/98 559/1304/98 +f 555/1294/98 565/1323/98 575/1359/98 564/1321/98 +f 565/1324/98 560/1308/98 571/1344/98 575/1360/98 +f 568/1332/98 576/1362/98 566/1327/98 552/1286/98 +f 559/1305/98 572/1347/98 576/1363/98 568/1333/98 +f 572/1348/98 561/1311/98 570/1338/98 576/1364/98 +f 570/1339/98 577/1366/98 562/1315/98 557/1299/98 +f 561/1312/98 573/1351/98 577/1367/98 570/1340/98 +f 573/1352/98 558/1302/98 563/1318/98 577/1368/98 +o Theatrette - Right +v 14.736256 3.000000 -8.988426 +v 14.736256 0.000000 -8.988426 +v 14.736256 3.000000 -2.732091 +v 14.736256 0.000000 -2.732091 +v 14.536255 3.000000 -8.988426 +v 14.536255 0.000000 -8.988426 +v 14.536255 3.000000 -2.732091 +v 14.536255 0.000000 -2.732091 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 3.1282 +vn -0.1000 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 0.1000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -3.1282 +vt 0.425000 0.635000 +vt 0.455000 0.635000 +vt 0.425000 0.605000 +vt 0.455000 0.605000 +vt 0.395000 0.635000 +vt 0.425000 0.655000 +vt 0.485000 0.635000 +vt 0.455000 0.655000 +vt 0.395000 0.605000 +vt 0.425000 0.575000 +vt 0.425000 0.685000 +vt 0.455000 0.575000 +vt 0.455000 0.685000 +vt 0.485000 0.605000 +s 0 +usemtl GlassDoor.007 +f 578/1369/103 582/1373/103 584/1377/103 580/1371/103 +f 581/1372/104 580/1371/104 584/1378/104 585/1380/104 +f 585/1381/105 584/1379/105 582/1374/105 583/1376/105 +f 583/1375/106 579/1370/106 581/1372/106 585/1382/106 +f 579/1370/107 578/1369/107 580/1371/107 581/1372/107 +f 583/1376/108 582/1374/108 578/1369/108 579/1370/108 +o Theatrette - Bottom +v 10.028015 3.000000 -3.035820 +v 10.028015 0.000000 -3.035820 +v 10.028015 3.000000 1.913385 +v 10.028015 0.000000 1.913385 +v 9.706530 3.000000 -3.035820 +v 9.706530 0.000000 -3.035820 +v 9.706530 3.000000 1.913385 +v 9.706530 0.000000 1.913385 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 2.4746 +vn -2.7216 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 2.7216 -0.0000 -0.0000 +vn -0.0000 -0.0000 -2.4746 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.001389 0.917917 +vt 0.625000 0.250000 +vt 0.001389 0.108750 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.999722 0.917917 +vt 0.375000 1.000000 +vt 0.999722 0.108750 +vt 0.125000 0.750000 +s 0 +usemtl ElevatorAndStairs +f 586/1383/109 590/1387/109 592/1393/109 588/1385/109 +f 589/1386/110 588/1385/110 592/1394/110 593/1396/110 +f 593/1397/111 592/1395/111 590/1388/111 591/1390/111 +f 591/1391/112 587/1384/112 589/1386/112 593/1398/112 +f 587/1384/113 586/1383/113 588/1385/113 589/1386/113 +f 591/1392/114 590/1389/114 586/1383/114 587/1384/114 +o Bottom Wall +v -16.465733 3.000000 6.956784 +v -16.465733 0.000000 6.956784 +v 16.209827 3.000000 6.956782 +v 16.209827 0.000000 6.956782 +v -16.465733 3.000000 7.156784 +v -16.465733 0.000000 7.156784 +v 16.209827 3.000000 7.156783 +v 16.209827 0.000000 7.156783 +vn -0.0000 1.5000 -0.0000 +vn 16.3378 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.1000 +vn -0.0000 -1.5000 -0.0000 +vn -0.0000 -0.0000 -0.1000 +vn -16.3378 -0.0000 -0.0000 +vt 0.960500 0.812750 +vt 0.625000 0.500000 +vt 0.796500 0.812750 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.960500 0.975750 +vt 0.375000 0.750000 +vt 0.796500 0.975750 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl Pillars +f 594/1400/115 598/1407/115 600/1411/115 596/1403/115 +f 597/1405/116 596/1403/116 600/1412/116 601/1414/116 +f 601/1415/117 600/1413/117 598/1408/117 599/1410/117 +f 599/1409/118 595/1402/118 597/1405/118 601/1416/118 +f 595/1401/119 594/1399/119 596/1404/119 597/1406/119 +f 599/1410/120 598/1408/120 594/1400/120 595/1402/120 +o Main - Left +v -14.119953 3.000000 -7.582060 +v -14.119953 0.000000 -7.582060 +v -14.119953 3.000000 -0.032380 +v -14.119953 0.000000 -0.032380 +v -14.719954 3.000000 -7.582060 +v -14.719954 0.000000 -7.582060 +v -14.719954 3.000000 -0.032380 +v -14.719954 0.000000 -0.032380 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 3.7748 +vn -0.3000 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 0.3000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -3.7748 +vt 0.951500 0.833750 +vt 0.625000 0.500000 +vt 0.791500 0.833750 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.940500 0.817250 +vt 0.951500 0.993750 +vt 0.782500 0.817250 +vt 0.375000 0.750000 +vt 0.791500 0.993750 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.940500 0.975250 +vt 0.625000 0.000000 +vt 0.782500 0.975250 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl Pillars +f 602/1418/121 606/1427/121 608/1431/121 604/1421/121 +f 605/1424/122 604/1422/122 608/1432/122 609/1434/122 +f 609/1435/123 608/1433/123 606/1428/123 607/1430/123 +f 607/1429/124 603/1420/124 605/1425/124 609/1436/124 +f 603/1419/125 602/1417/125 604/1423/125 605/1426/125 +f 607/1430/126 606/1428/126 602/1418/126 603/1420/126 +o Main - Bottom Left +v -14.680416 3.000000 -0.449812 +v -14.680416 0.000000 -0.449812 +v -14.680416 3.000000 7.099865 +v -14.680416 0.000000 7.099865 +v -14.880417 3.000000 -0.449812 +v -14.880417 0.000000 -0.449812 +v -14.880417 3.000000 7.099865 +v -14.880417 0.000000 7.099865 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 3.7748 +vn -0.1000 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 0.1000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -3.7748 +vt 0.952865 0.172685 +vt 0.625000 0.500000 +vt 0.047656 0.172685 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.952865 1.078241 +vt 0.375000 0.750000 +vt 0.047656 1.078241 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl DarkWall +f 610/1438/127 614/1445/127 616/1449/127 612/1441/127 +f 613/1443/128 612/1441/128 616/1450/128 617/1452/128 +f 617/1453/129 616/1451/129 614/1446/129 615/1448/129 +f 615/1447/130 611/1440/130 613/1443/130 617/1454/130 +f 611/1439/131 610/1437/131 612/1442/131 613/1444/131 +f 615/1448/132 614/1446/132 610/1438/132 611/1440/132 +o Theatrette - Bottom Angled +v 14.712255 2.944234 -3.553771 +v 14.712255 0.000000 -3.553771 +v 14.787019 2.944234 -2.699226 +v 14.787019 0.000000 -2.699226 +v 9.755196 2.944234 -3.120084 +v 9.755196 0.000000 -3.120084 +v 9.829959 2.944234 -2.265540 +v 9.829959 0.000000 -2.265540 +v 13.472991 0.000000 -3.445349 +v 12.233726 0.000000 -3.336927 +v 10.994461 0.000000 -3.228506 +v 13.547753 2.944234 -2.590805 +v 12.308489 2.944234 -2.482383 +v 11.069223 2.944234 -2.373961 +v 11.069223 0.000000 -2.373961 +v 12.308489 0.000000 -2.482383 +v 13.547753 0.000000 -2.590805 +v 10.994461 2.944234 -3.228506 +v 12.233726 2.944234 -3.336927 +v 13.472991 2.944234 -3.445349 +vn -0.0000 1.5000 -0.0000 +vn 0.2157 -0.0000 2.4652 +vn -2.7112 -0.0000 0.2372 +vn -0.0000 -1.5000 -0.0000 +vn 2.7112 -0.0000 -0.2372 +vn -0.2157 -0.0000 -2.4652 +vt 0.935500 0.976750 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.935500 0.018250 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.968125 0.974500 +vt 0.375000 0.250000 +vt 0.968125 0.035500 +vt 0.125000 0.500000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +vt 0.082500 0.018250 +vt 0.044500 0.006750 +vt 0.312500 0.500000 +vt 0.031875 0.010500 +vt 0.939500 0.006750 +vt 0.250000 0.500000 +vt 0.046875 0.035500 +vt 0.965625 0.010500 +vt 0.187500 0.500000 +vt 0.625000 0.812500 +vt 0.687500 0.750000 +vt 0.625000 0.875000 +vt 0.750000 0.750000 +vt 0.625000 0.937500 +vt 0.812500 0.750000 +vt 0.187500 0.750000 +vt 0.375000 0.937500 +vt 0.250000 0.750000 +vt 0.375000 0.875000 +vt 0.312500 0.750000 +vt 0.375000 0.812500 +vt 0.046875 0.974500 +vt 0.965625 0.961500 +vt 0.812500 0.500000 +vt 0.031875 0.961500 +vt 0.939500 0.993750 +vt 0.750000 0.500000 +vt 0.082500 0.976750 +vt 0.044500 0.993750 +vt 0.687500 0.500000 +s 0 +usemtl CabnetDoors +f 635/1496/133 622/1461/133 624/1467/133 631/1487/133 +f 632/1489/134 631/1486/134 624/1468/134 625/1470/134 +f 625/1471/135 624/1469/135 622/1462/135 623/1464/135 +f 626/1475/136 619/1457/136 621/1460/136 634/1492/136 +f 619/1457/137 618/1456/137 620/1459/137 621/1460/137 +f 626/1473/138 637/1500/138 618/1455/138 619/1458/138 +f 623/1465/138 622/1463/138 635/1494/138 628/1479/138 +f 628/1480/138 635/1495/138 636/1497/138 627/1476/138 +f 627/1477/138 636/1498/138 637/1501/138 626/1474/138 +f 623/1466/136 628/1481/136 632/1488/136 625/1472/136 +f 628/1481/136 627/1478/136 633/1490/136 632/1488/136 +f 627/1478/136 626/1475/136 634/1492/136 633/1490/136 +f 621/1460/134 620/1459/134 629/1482/134 634/1493/134 +f 634/1493/134 629/1482/134 630/1484/134 633/1491/134 +f 633/1491/134 630/1484/134 631/1486/134 632/1489/134 +f 618/1456/133 637/1502/133 629/1483/133 620/1459/133 +f 637/1502/133 636/1499/133 630/1485/133 629/1483/133 +f 636/1499/133 635/1496/133 631/1487/133 630/1485/133 +o Main - Top.001 +v 4.832432 2.945703 -7.753190 +v 4.832432 2.428760 -7.753190 +v 4.832432 2.945703 -7.453190 +v 4.832432 2.428760 -7.453190 +v -14.512302 2.945703 -7.753190 +v -14.512302 2.428760 -7.753190 +v -14.512302 2.945703 -7.453190 +v -14.512302 2.428760 -7.453190 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.1500 +vn -9.6724 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 9.6724 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1500 +vt 0.501302 0.500463 +vt 0.498698 0.500463 +vt 0.501302 0.502315 +vt 0.498698 0.502315 +vt 0.503385 0.500463 +vt 0.501302 0.497685 +vt 0.496615 0.500463 +vt 0.498698 0.497685 +vt 0.503385 0.502315 +vt 0.501302 0.505093 +vt 0.501302 0.494907 +vt 0.498698 0.505093 +vt 0.498698 0.494907 +vt 0.496615 0.502315 +s 0 +usemtl DarkWall +f 638/1503/139 642/1507/139 644/1511/139 640/1505/139 +f 641/1506/140 640/1505/140 644/1512/140 645/1514/140 +f 645/1515/141 644/1513/141 642/1508/141 643/1510/141 +f 643/1509/142 639/1504/142 641/1506/142 645/1516/142 +f 639/1504/143 638/1503/143 640/1505/143 641/1506/143 +f 643/1510/144 642/1508/144 638/1503/144 639/1504/144 +o Theatrette - Mid Bottom +v 9.933788 3.000000 -3.198536 +v 9.933788 0.000000 -3.198536 +v 9.933788 3.000000 -2.904123 +v 9.933788 0.000000 -2.904123 +v 9.703789 3.000000 -3.198536 +v 9.703789 0.000000 -3.198536 +v 9.703789 3.000000 -2.904123 +v 9.703789 0.000000 -2.904123 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.1472 +vn -0.1150 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 0.1150 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1472 +vt 0.625000 0.500000 +vt 0.144500 0.987250 +vt 0.375000 0.500000 +vt 0.144500 0.013250 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.557500 0.983250 +vt 0.014500 0.987250 +vt 0.557500 0.025250 +vt 0.125000 0.500000 +vt 0.014500 0.013250 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.703500 0.983250 +vt 0.375000 1.000000 +vt 0.703500 0.025250 +vt 0.125000 0.750000 +s 0 +usemtl Pillars +f 646/1517/145 650/1523/145 652/1529/145 648/1521/145 +f 649/1522/146 648/1521/146 652/1530/146 653/1532/146 +f 653/1533/147 652/1531/147 650/1524/147 651/1526/147 +f 651/1527/148 647/1519/148 649/1522/148 653/1534/148 +f 647/1519/149 646/1517/149 648/1521/149 649/1522/149 +f 651/1528/150 650/1525/150 646/1518/150 647/1520/150 +o Main - Mid +v 0.107729 3.000000 -3.069562 +v 0.107729 0.000000 -3.069562 +v 0.107729 3.000000 -2.839562 +v 0.107729 0.000000 -2.839562 +v -0.122271 3.000000 -3.069562 +v -0.122271 0.000000 -3.069562 +v -0.122271 3.000000 -2.839562 +v -0.122271 0.000000 -2.839562 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.1150 +vn -0.1150 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 0.1150 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1150 +vt 0.625000 0.500000 +vt 0.682500 0.995250 +vt 0.686500 0.041250 +vt 0.375000 0.500000 +vt 0.682500 0.000250 +vt 0.686500 0.903250 +vt 0.625000 0.750000 +vt 0.559500 0.007750 +vt 0.544500 0.995250 +vt 0.559500 0.995750 +vt 0.375000 0.750000 +vt 0.544500 0.000250 +vt 0.875000 0.500000 +vt 0.698500 0.069250 +vt 0.562500 0.041250 +vt 0.698500 0.880250 +vt 0.125000 0.500000 +vt 0.562500 0.903250 +vt 0.875000 0.750000 +vt 0.699500 0.007750 +vt 0.534500 0.069250 +vt 0.699500 0.995750 +vt 0.534500 0.880250 +vt 0.125000 0.750000 +s 0 +usemtl Pillars +f 654/1535/151 658/1547/151 660/1553/151 656/1541/151 +f 657/1544/152 656/1542/152 660/1554/152 661/1556/152 +f 661/1557/153 660/1555/153 658/1548/153 659/1550/153 +f 659/1551/154 655/1538/154 657/1545/154 661/1558/154 +f 655/1539/155 654/1536/155 656/1543/155 657/1546/155 +f 659/1552/156 658/1549/156 654/1537/156 655/1540/156 +o Main - Left.001 +v -9.707244 3.000000 -3.069562 +v -9.707244 0.000000 -3.069562 +v -9.707244 3.000000 -2.839562 +v -9.707244 0.000000 -2.839562 +v -9.937243 3.000000 -3.069562 +v -9.937243 0.000000 -3.069562 +v -9.937243 3.000000 -2.839562 +v -9.937243 0.000000 -2.839562 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.1150 +vn -0.1150 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 0.1150 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1150 +vt 0.625000 0.500000 +vt 0.717500 0.991250 +vt 0.351500 0.991750 +vt 0.375000 0.500000 +vt 0.717500 0.009250 +vt 0.351500 0.019750 +vt 0.625000 0.750000 +vt 0.650500 0.140750 +vt 0.533500 0.991250 +vt 0.554500 0.140750 +vt 0.375000 0.750000 +vt 0.533500 0.009250 +vt 0.875000 0.500000 +vt 0.542500 0.991250 +vt 0.523500 0.993750 +vt 0.542500 0.004250 +vt 0.125000 0.500000 +vt 0.523500 0.021750 +vt 0.875000 0.750000 +vt 0.650500 0.859250 +vt 0.692500 0.991250 +vt 0.554500 0.859250 +vt 0.692500 0.004250 +vt 0.125000 0.750000 +s 0 +usemtl Pillars +f 662/1559/157 666/1571/157 668/1577/157 664/1565/157 +f 665/1568/158 664/1566/158 668/1578/158 669/1580/158 +f 669/1581/159 668/1579/159 666/1572/159 667/1574/159 +f 667/1575/160 663/1562/160 665/1569/160 669/1582/160 +f 663/1563/161 662/1560/161 664/1567/161 665/1570/161 +f 667/1576/162 666/1573/162 662/1561/162 663/1564/162 +o Main - Mid.001 +v -4.583330 3.000000 -3.069562 +v -4.583330 0.000000 -3.069562 +v -4.583330 3.000000 -2.839562 +v -4.583330 0.000000 -2.839562 +v -4.813330 3.000000 -3.069562 +v -4.813330 0.000000 -3.069562 +v -4.813330 3.000000 -2.839562 +v -4.813330 0.000000 -2.839562 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.1150 +vn -0.1150 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 0.1150 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1150 +vt 0.625000 0.500000 +vt 0.679500 0.020750 +vt 0.523500 0.834750 +vt 0.375000 0.500000 +vt 0.679500 0.927750 +vt 0.523500 0.048750 +vt 0.625000 0.750000 +vt 0.519500 0.997250 +vt 0.549500 0.020750 +vt 0.519500 0.037250 +vt 0.375000 0.750000 +vt 0.549500 0.927750 +vt 0.875000 0.500000 +vt 0.547500 0.882250 +vt 0.673500 0.834750 +vt 0.547500 0.065250 +vt 0.125000 0.500000 +vt 0.673500 0.048750 +vt 0.875000 0.750000 +vt 0.347500 0.995750 +vt 0.679500 0.882250 +vt 0.347500 0.035750 +vt 0.679500 0.065250 +vt 0.125000 0.750000 +s 0 +usemtl Pillars +f 670/1583/163 674/1595/163 676/1601/163 672/1589/163 +f 673/1592/164 672/1590/164 676/1602/164 677/1604/164 +f 677/1605/165 676/1603/165 674/1596/165 675/1598/165 +f 675/1599/166 671/1586/166 673/1593/166 677/1606/166 +f 671/1587/167 670/1584/167 672/1591/167 673/1594/167 +f 675/1600/168 674/1597/168 670/1585/168 671/1588/168 +o Main - Mid.002 +v 4.993284 3.000000 -3.014522 +v 4.993284 0.000000 -3.014522 +v 4.993284 3.000000 -2.784522 +v 4.993284 0.000000 -2.784522 +v 4.793606 3.000000 -3.014522 +v 4.793606 0.000000 -3.014522 +v 4.793606 3.000000 -2.784522 +v 4.793606 0.000000 -2.784522 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.1150 +vn -0.0998 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 0.0998 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1150 +vt 0.625000 0.500000 +vt 0.682500 0.995250 +vt 0.686500 0.041250 +vt 0.375000 0.500000 +vt 0.682500 0.000250 +vt 0.686500 0.903250 +vt 0.625000 0.750000 +vt 0.559500 0.007750 +vt 0.544500 0.995250 +vt 0.559500 0.995750 +vt 0.375000 0.750000 +vt 0.544500 0.000250 +vt 0.875000 0.500000 +vt 0.698500 0.069250 +vt 0.562500 0.041250 +vt 0.698500 0.880250 +vt 0.125000 0.500000 +vt 0.562500 0.903250 +vt 0.875000 0.750000 +vt 0.699500 0.007750 +vt 0.534500 0.069250 +vt 0.699500 0.995750 +vt 0.534500 0.880250 +vt 0.125000 0.750000 +s 0 +usemtl Pillars +f 678/1607/169 682/1619/169 684/1625/169 680/1613/169 +f 681/1616/170 680/1614/170 684/1626/170 685/1628/170 +f 685/1629/171 684/1627/171 682/1620/171 683/1622/171 +f 683/1623/172 679/1610/172 681/1617/172 685/1630/172 +f 679/1611/173 678/1608/173 680/1615/173 681/1618/173 +f 683/1624/174 682/1621/174 678/1609/174 679/1612/174 +o Right wall +v 14.982503 3.000000 -0.108476 +v 14.982503 0.000000 -0.108476 +v 14.982503 3.000000 8.251924 +v 14.982503 0.000000 8.251924 +v 14.782502 3.000000 -0.108476 +v 14.782502 0.000000 -0.108476 +v 14.782502 3.000000 8.251924 +v 14.782502 0.000000 8.251924 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 4.1802 +vn -0.1000 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 0.1000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -4.1802 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.475000 0.695000 +vt 0.625000 0.250000 +vt 0.365000 0.695000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.475000 0.585000 +vt 0.375000 1.000000 +vt 0.365000 0.585000 +vt 0.125000 0.750000 +s 0 +usemtl GlassDoor.007 +f 686/1631/175 690/1635/175 692/1641/175 688/1633/175 +f 689/1634/176 688/1633/176 692/1642/176 693/1644/176 +f 693/1645/177 692/1643/177 690/1636/177 691/1638/177 +f 691/1639/178 687/1632/178 689/1634/178 693/1646/178 +f 687/1632/179 686/1631/179 688/1633/179 689/1634/179 +f 691/1640/180 690/1637/180 686/1631/180 687/1632/180 +o Top wall +v 15.491978 2.434595 1.845285 +v 15.491978 0.000000 1.845285 +v 15.491978 2.434595 2.020135 +v 15.491978 0.000000 2.020135 +v 9.517607 2.434595 1.845285 +v 9.517607 0.000000 1.845285 +v 9.517607 2.434595 2.020135 +v 9.517607 0.000000 2.020135 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.0874 +vn -2.9872 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 2.9872 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0874 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl DarkWall +f 694/1647/181 698/1651/181 700/1655/181 696/1649/181 +f 697/1650/182 696/1649/182 700/1656/182 701/1658/182 +f 701/1659/183 700/1657/183 698/1652/183 699/1654/183 +f 699/1653/184 695/1648/184 697/1650/184 701/1660/184 +f 695/1648/185 694/1647/185 696/1649/185 697/1650/185 +f 699/1654/186 698/1652/186 694/1647/186 695/1648/186 +o Council/Guild Volunteer +v 7.510768 3.000000 1.856653 +v 7.510768 0.000000 1.856653 +v 7.685618 3.000000 1.856653 +v 7.685618 0.000000 1.856653 +v 7.510768 3.000000 7.343447 +v 7.510768 0.000000 7.343447 +v 7.685618 3.000000 7.343447 +v 7.685618 0.000000 7.343447 +vn -0.0000 1.5000 -0.0000 +vn 0.0874 -0.0000 -0.0000 +vn -0.0000 -0.0000 2.7434 +vn -0.0000 -1.5000 -0.0000 +vn -0.0000 -0.0000 -2.7434 +vn -0.0874 -0.0000 -0.0000 +vt 0.862500 0.908250 +vt 0.893500 0.938750 +vt 0.891500 0.954750 +vt 0.838500 0.908250 +vt 0.878500 0.938750 +vt 0.877500 0.954750 +vt 0.862500 0.932250 +vt 0.891500 0.937750 +vt 0.893500 0.953750 +vt 0.876500 0.937750 +vt 0.838500 0.932250 +vt 0.878500 0.953750 +vt 0.887500 0.908250 +vt 0.862500 0.883750 +vt 0.891500 0.941250 +vt 0.838500 0.883750 +vt 0.814500 0.908250 +vt 0.877500 0.941250 +vt 0.887500 0.932250 +vt 0.891500 0.952750 +vt 0.862500 0.859750 +vt 0.876500 0.952750 +vt 0.838500 0.859750 +vt 0.814500 0.932250 +s 0 +usemtl Pillars +f 702/1661/187 706/1673/187 708/1679/187 704/1667/187 +f 705/1670/188 704/1668/188 708/1680/188 709/1682/188 +f 709/1683/189 708/1681/189 706/1674/189 707/1676/189 +f 707/1677/190 703/1664/190 705/1671/190 709/1684/190 +f 703/1665/191 702/1662/191 704/1669/191 705/1672/191 +f 707/1678/192 706/1675/192 702/1663/192 703/1666/192 +o Guild Volunteer +v 5.058735 3.000000 1.856653 +v 5.058735 0.000000 1.856653 +v 5.233585 3.000000 1.856653 +v 5.233585 0.000000 1.856653 +v 5.058735 3.000000 7.343447 +v 5.058735 0.000000 7.343447 +v 5.233585 3.000000 7.343447 +v 5.233585 0.000000 7.343447 +vn -0.0000 1.5000 -0.0000 +vn 0.0874 -0.0000 -0.0000 +vn -0.0000 -0.0000 2.7434 +vn -0.0000 -1.5000 -0.0000 +vn -0.0000 -0.0000 -2.7434 +vn -0.0874 -0.0000 -0.0000 +vt 0.871500 0.872250 +vt 0.880500 0.872250 +vt 0.871500 0.862750 +vt 0.880500 0.862750 +vt 0.862500 0.872250 +vt 0.871500 0.881250 +vt 0.889500 0.872250 +vt 0.880500 0.881250 +vt 0.862500 0.862750 +vt 0.871500 0.853250 +vt 0.871500 0.890750 +vt 0.880500 0.853250 +vt 0.880500 0.890750 +vt 0.889500 0.862750 +s 0 +usemtl Pillars +f 710/1685/193 714/1689/193 716/1693/193 712/1687/193 +f 713/1688/194 712/1687/194 716/1694/194 717/1696/194 +f 717/1697/195 716/1695/195 714/1690/195 715/1692/195 +f 715/1691/196 711/1686/196 713/1688/196 717/1698/196 +f 711/1686/197 710/1685/197 712/1687/197 713/1688/197 +f 715/1692/198 714/1690/198 710/1685/198 711/1686/198 +o Guild Volunteer/Parents&Care +v 2.565317 3.000000 1.856653 +v 2.565317 0.000000 1.856653 +v 2.740168 3.000000 1.856653 +v 2.740168 0.000000 1.856653 +v 2.565318 3.000000 7.343447 +v 2.565318 0.000000 7.343447 +v 2.740168 3.000000 7.343447 +v 2.740168 0.000000 7.343447 +vn -0.0000 1.5000 -0.0000 +vn 0.0874 -0.0000 -0.0000 +vn -0.0000 -0.0000 2.7434 +vn -0.0000 -1.5000 -0.0000 +vn -0.0000 -0.0000 -2.7434 +vn -0.0874 -0.0000 -0.0000 +vt 0.887500 0.882750 +vt 0.864500 0.882750 +vt 0.887500 0.905250 +vt 0.864500 0.905250 +vt 0.909500 0.882750 +vt 0.887500 0.859750 +vt 0.842500 0.882750 +vt 0.864500 0.859750 +vt 0.909500 0.905250 +vt 0.887500 0.927750 +vt 0.887500 0.837250 +vt 0.864500 0.927750 +vt 0.864500 0.837250 +vt 0.842500 0.905250 +s 0 +usemtl Pillars +f 718/1699/199 722/1703/199 724/1707/199 720/1701/199 +f 721/1702/200 720/1701/200 724/1708/200 725/1710/200 +f 725/1711/201 724/1709/201 722/1704/201 723/1706/201 +f 723/1705/202 719/1700/202 721/1702/202 725/1712/202 +f 719/1700/203 718/1699/203 720/1701/203 721/1702/203 +f 723/1706/204 722/1704/204 718/1699/204 719/1700/204 +o Parents&Care/GuildClubs +v -3.781415 3.000000 1.856653 +v -3.781415 0.000000 1.856653 +v -3.606565 3.000000 1.856653 +v -3.606565 0.000000 1.856653 +v -3.781415 3.000000 7.343447 +v -3.781415 0.000000 7.343447 +v -3.606565 3.000000 7.343447 +v -3.606565 0.000000 7.343447 +v -3.781415 0.000000 4.600050 +v -3.781415 1.500000 1.856653 +v -3.781415 1.500000 7.343447 +v -3.781415 3.000000 4.600050 +v -3.781415 1.500000 4.600050 +vn -0.0000 1.5000 -0.0000 +vn 0.0874 -0.0000 -0.0000 +vn -0.0000 -0.0000 2.7434 +vn -0.0000 -1.5000 -0.0000 +vn -0.0000 -0.0000 -2.7434 +vn -0.0874 -0.0000 -0.0000 +vt 0.625000 0.500000 +vt 0.517969 0.761574 +vt 0.364323 0.653241 +vt 0.375000 0.500000 +vt 0.517969 0.761574 +vt 0.003906 0.653241 +vt 0.625000 0.750000 +vt 0.517969 0.761574 +vt 0.375000 0.750000 +vt 0.517969 0.761574 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.364323 0.003241 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.003906 0.003241 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +vt 0.250000 0.500000 +vt 0.003906 0.003241 +vt 0.003906 0.653241 +vt 0.517969 0.761574 +vt 0.003906 0.653241 +vt 0.364323 0.653241 +vt 0.500000 0.250000 +vt 0.364323 0.003241 +vt 0.003906 0.003241 +vt 0.750000 0.500000 +vt 0.364323 0.003241 +vt 0.364323 0.653241 +vt 0.003906 0.003241 +vt 0.364323 0.003241 +vt 0.364323 0.653241 +vt 0.003906 0.653241 +s 0 +usemtl Generic_walls +f 726/1713/205 737/1744/205 730/1723/205 732/1729/205 728/1719/205 +f 729/1721/206 728/1719/206 732/1730/206 733/1732/206 +f 733/1733/207 732/1731/207 730/1724/207 736/1741/207 731/1726/207 +f 731/1727/208 734/1735/208 727/1716/208 729/1721/208 733/1734/208 +f 727/1717/209 735/1738/209 726/1714/209 728/1720/209 729/1722/209 +f 738/1747/210 737/1745/210 726/1715/210 735/1739/210 +f 734/1736/210 738/1748/210 735/1740/210 727/1718/210 +f 731/1728/210 736/1742/210 738/1749/210 734/1737/210 +f 736/1743/210 730/1725/210 737/1746/210 738/1750/210 +o GuildClubs +v -7.790079 3.000000 1.856653 +v -7.790079 0.000000 1.856653 +v -7.615229 3.000000 1.856653 +v -7.615229 0.000000 1.856653 +v -7.790079 3.000000 7.343447 +v -7.790079 0.000000 7.343447 +v -7.615229 3.000000 7.343447 +v -7.615229 0.000000 7.343447 +v -7.790079 0.000000 4.600050 +v -7.790079 1.500000 1.856653 +v -7.615229 1.500000 7.343447 +v -7.615229 1.500000 1.856653 +v -7.790079 1.500000 7.343447 +v -7.615229 3.000000 4.600050 +v -7.615229 0.000000 4.600050 +v -7.790079 3.000000 4.600050 +v -7.790079 1.500000 4.600050 +v -7.615229 1.500000 4.600050 +vn -0.0000 1.5000 -0.0000 +vn 0.0874 -0.0000 -0.0000 +vn -0.0000 -0.0000 2.7434 +vn -0.0000 -1.5000 -0.0000 +vn -0.0000 -0.0000 -2.7434 +vn -0.0874 -0.0000 -0.0000 +vt 0.482031 0.818056 +vt 0.355469 0.627315 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.012760 0.627315 +vt 0.482031 0.818056 +vt 0.482031 0.818056 +vt 0.355469 0.029167 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.482031 0.818056 +vt 0.012760 0.029167 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.355469 0.029167 +vt 0.012760 0.029167 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.355469 0.627315 +vt 0.625000 0.000000 +vt 0.125000 0.750000 +vt 0.375000 0.000000 +vt 0.012760 0.627315 +vt 0.012760 0.029167 +vt 0.012760 0.627315 +vt 0.250000 0.500000 +vt 0.012760 0.627315 +vt 0.355469 0.627315 +vt 0.482031 0.818056 +vt 0.012760 0.627315 +vt 0.500000 0.000000 +vt 0.355469 0.627315 +vt 0.482031 0.818056 +vt 0.355469 0.029167 +vt 0.012760 0.029167 +vt 0.355469 0.029167 +vt 0.012760 0.029167 +vt 0.500000 0.250000 +vt 0.355469 0.029167 +vt 0.355469 0.627315 +vt 0.750000 0.750000 +vt 0.250000 0.750000 +vt 0.012760 0.029167 +vt 0.012760 0.627315 +vt 0.355469 0.029167 +vt 0.355469 0.627315 +vt 0.750000 0.500000 +vt 0.012760 0.029167 +vt 0.355469 0.029167 +vt 0.355469 0.627315 +vt 0.012760 0.627315 +vt 0.012760 0.029167 +vt 0.355469 0.029167 +vt 0.355469 0.627315 +vt 0.012760 0.627315 +s 0 +usemtl Generic_walls +f 754/1798/211 743/1763/211 745/1769/211 752/1792/211 +f 756/1803/212 752/1790/212 745/1770/212 749/1781/212 +f 749/1782/213 745/1771/213 743/1764/213 751/1789/213 +f 747/1777/214 740/1754/214 742/1760/214 753/1793/214 +f 748/1780/215 739/1751/215 741/1757/215 750/1784/215 +f 755/1799/216 754/1796/216 739/1752/216 748/1778/216 +f 747/1775/216 755/1800/216 748/1779/216 740/1755/216 +f 744/1766/216 751/1787/216 755/1801/216 747/1776/216 +f 751/1788/216 743/1765/216 754/1797/216 755/1802/216 +f 740/1756/215 748/1780/215 750/1784/215 742/1761/215 +f 744/1767/214 747/1777/214 753/1793/214 746/1772/214 +f 746/1773/213 749/1782/213 751/1789/213 744/1768/213 +f 753/1794/212 756/1804/212 749/1783/212 746/1774/212 +f 742/1762/212 750/1785/212 756/1805/212 753/1795/212 +f 750/1786/212 741/1758/212 752/1791/212 756/1806/212 +f 739/1753/211 754/1798/211 752/1792/211 741/1759/211 +o GuildClubs left wall +v -11.816638 3.000000 1.846944 +v -11.816638 0.000000 1.846944 +v -11.641788 3.000000 1.846944 +v -11.641788 0.000000 1.846944 +v -11.816638 3.000000 7.343447 +v -11.816638 0.000000 7.343447 +v -11.641788 3.000000 7.343447 +v -11.641788 0.000000 7.343447 +v -11.641788 1.500000 7.343447 +v -11.641788 1.500000 1.846944 +v -11.641788 3.000000 4.595195 +v -11.641788 0.000000 4.595195 +v -11.641788 1.500000 4.595195 +vn -0.0000 1.5000 -0.0000 +vn 0.0874 -0.0000 -0.0000 +vn -0.0000 -0.0000 2.7434 +vn -0.0000 -1.5000 -0.0000 +vn -0.0000 -0.0000 -2.7434 +vn -0.0874 -0.0000 -0.0000 +vt 0.625000 0.500000 +vt 0.496094 0.777315 +vt 0.500260 0.375463 +vt 0.375000 0.500000 +vt 0.496094 0.777315 +vt 0.500260 0.375463 +vt 0.625000 0.750000 +vt 0.496094 0.777315 +vt 0.361198 0.002315 +vt 0.375000 0.750000 +vt 0.496094 0.777315 +vt 0.007031 0.002315 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.500260 0.375463 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.500260 0.375463 +vt 0.875000 0.750000 +vt 0.361198 0.654167 +vt 0.625000 0.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +vt 0.007031 0.654167 +vt 0.007031 0.654167 +vt 0.500000 0.000000 +vt 0.361198 0.654167 +vt 0.496094 0.777315 +vt 0.361198 0.002315 +vt 0.007031 0.002315 +vt 0.750000 0.750000 +vt 0.361198 0.002315 +vt 0.361198 0.654167 +vt 0.250000 0.750000 +vt 0.007031 0.002315 +vt 0.007031 0.654167 +vt 0.007031 0.002315 +vt 0.361198 0.002315 +vt 0.361198 0.654167 +vt 0.007031 0.654167 +s 0 +usemtl Generic_walls +f 757/1807/217 761/1819/217 763/1825/217 767/1837/217 759/1813/217 +f 769/1843/218 767/1838/218 763/1826/218 765/1831/218 +f 764/1828/219 765/1832/219 763/1827/219 761/1820/219 762/1822/219 +f 762/1823/220 758/1810/220 760/1816/220 768/1840/220 764/1829/220 +f 758/1811/221 757/1808/221 759/1814/221 766/1834/221 760/1817/221 +f 762/1824/222 761/1821/222 757/1809/222 758/1812/222 +f 768/1841/218 769/1844/218 765/1833/218 764/1830/218 +f 760/1818/218 766/1835/218 769/1845/218 768/1842/218 +f 766/1836/218 759/1815/218 767/1839/218 769/1846/218 +o door +v 5.057120 2.428760 1.848213 +v 5.057120 -0.023800 1.848213 +v 5.057120 2.428760 1.917652 +v 5.057120 -0.023800 1.917652 +v 4.051410 2.428760 1.848213 +v 4.051410 -0.023800 1.848213 +v 4.051410 2.428760 1.917652 +v 4.051410 -0.023800 1.917652 +v 5.057120 2.244086 1.848213 +v 5.057120 0.160874 1.848213 +v 4.051410 0.160874 1.917652 +v 4.051410 2.244086 1.917652 +v 5.057120 2.244086 1.917652 +v 5.057120 0.160874 1.917652 +v 4.051410 2.244086 1.848213 +v 4.051410 0.160874 1.848213 +v 4.900331 -0.023799 1.848213 +v 4.208198 -0.023799 1.848213 +v 4.900331 2.428760 1.917652 +v 4.208198 2.428760 1.917652 +v 4.208198 -0.023799 1.917652 +v 4.900331 -0.023799 1.917652 +v 4.208198 2.428760 1.848213 +v 4.900331 2.428760 1.848213 +v 4.208198 0.160874 1.848213 +v 4.900331 0.160874 1.848213 +v 4.208198 2.244086 1.848213 +v 4.900331 2.244086 1.848213 +v 4.900331 0.160874 1.917652 +v 4.208198 0.160874 1.917652 +v 4.900331 2.244086 1.917652 +v 4.208198 2.244086 1.917652 +v 4.051410 0.873035 1.917652 +v 4.051410 1.130972 1.917652 +v 4.051410 1.130972 1.848213 +v 4.051410 0.873035 1.848213 +v 4.208198 1.130972 1.917652 +v 4.208198 0.873035 1.917652 +v 4.208198 1.130972 1.848213 +v 4.208198 0.873035 1.848213 +vn -0.0000 1.2263 -0.0000 +vn -0.0000 -0.0000 0.0347 +vn -0.5093 -0.0000 -0.0000 +vn -0.0000 -1.2263 -0.0000 +vn 0.5093 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0347 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.685000 +vt 0.585000 0.925000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.525000 0.085000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.585000 0.095000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.405000 0.515000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.515000 +vt 0.895000 0.665000 +vt 0.385000 0.565000 +vt 0.385000 0.565000 +vt 0.895000 0.665000 +vt 0.525000 0.085000 +vt 0.405000 0.515000 +vt 0.405000 0.515000 +vt 0.525000 0.085000 +vt 0.385000 0.515000 +vt 0.405000 0.085000 +vt 0.405000 0.085000 +vt 0.385000 0.515000 +vt 0.495000 0.085000 +vt 0.475934 0.925000 +vt 0.945000 0.685000 +vt 0.455000 0.085000 +vt 0.322601 0.925000 +vt 0.945000 0.685000 +vt 0.915000 0.665000 +vt 0.715000 0.975000 +vt 0.322601 0.925000 +vt 0.925000 0.665000 +vt 0.715000 0.015000 +vt 0.475934 0.925000 +vt 0.395000 0.515000 +vt 0.455000 0.085000 +vt 0.405000 0.515000 +vt 0.495000 0.085000 +vt 0.915000 0.665000 +vt 0.395000 0.565000 +vt 0.245000 0.975000 +vt 0.405000 0.565000 +vt 0.925000 0.665000 +vt 0.245000 0.015000 +s 0 +usemtl GlassDoor +f 792/1896/223 774/1855/223 776/1859/223 789/1890/223 +f 801/1915/224 789/1889/224 776/1860/224 781/1873/224 +f 781/1872/225 776/1861/225 774/1855/225 784/1879/225 +f 786/1884/226 771/1850/226 773/1853/226 791/1894/226 +f 778/1866/227 770/1848/227 772/1852/227 782/1874/227 +f 797/1908/228 793/1897/228 770/1847/228 778/1865/228 +f 786/1883/228 795/1903/228 779/1867/228 771/1849/228 +f 795/1903/228 797/1908/228 778/1865/228 779/1867/228 +f 771/1850/227 779/1868/227 783/1876/227 773/1853/227 +f 779/1869/227 778/1866/227 782/1874/227 783/1877/227 +f 777/1862/225 780/1871/225 785/1882/225 775/1858/225 +f 803/1919/225 781/1872/225 784/1879/225 804/1922/225 +f 790/1891/224 799/1912/224 780/1870/224 777/1863/224 +f 806/1930/224 801/1915/224 781/1873/224 803/1920/224 +f 783/1878/224 782/1875/224 800/1914/224 798/1909/224 +f 796/1906/226 797/1907/226 800/1913/226 801/1916/226 +f 773/1854/224 783/1878/224 798/1909/224 791/1893/224 +f 791/1893/224 798/1909/224 799/1912/224 790/1891/224 +f 804/1923/228 784/1880/228 796/1905/228 808/1933/228 +f 798/1910/225 800/1913/225 797/1907/225 795/1902/225 +f 775/1857/228 785/1881/228 794/1901/228 787/1885/228 +f 787/1885/228 794/1901/228 795/1903/228 786/1883/228 +f 784/1880/228 774/1856/228 792/1895/228 796/1905/228 +f 796/1905/228 792/1895/228 793/1897/228 797/1908/228 +f 775/1858/226 787/1886/226 790/1892/226 777/1864/226 +f 787/1886/226 786/1884/226 791/1894/226 790/1892/226 +f 782/1875/224 772/1851/224 788/1887/224 800/1914/224 +f 800/1914/224 788/1887/224 789/1889/224 801/1915/224 +f 770/1848/223 793/1898/223 788/1888/223 772/1852/223 +f 793/1898/223 792/1896/223 789/1890/223 788/1888/223 +f 806/1929/227 808/1934/227 796/1906/227 801/1916/227 +f 794/1899/223 799/1911/223 798/1910/223 795/1904/223 +f 799/1911/227 794/1900/227 809/1936/227 807/1931/227 +f 807/1931/227 809/1936/227 808/1934/227 806/1929/227 +f 785/1881/228 805/1926/228 809/1937/228 794/1901/228 +f 805/1927/228 804/1924/228 808/1935/228 809/1938/228 +f 799/1912/224 807/1932/224 802/1917/224 780/1870/224 +f 807/1932/224 806/1930/224 803/1920/224 802/1917/224 +f 780/1871/225 802/1918/225 805/1928/225 785/1882/225 +f 802/1918/225 803/1921/225 804/1925/225 805/1928/225 +o door.001 +v 7.519677 2.428760 1.848213 +v 7.519677 -0.023800 1.848213 +v 7.519677 2.428760 1.917652 +v 7.519677 -0.023800 1.917652 +v 6.488448 2.428760 1.848213 +v 6.488448 -0.023800 1.848213 +v 6.488448 2.428760 1.917652 +v 6.488448 -0.023800 1.917652 +v 7.519677 2.244086 1.848213 +v 7.519677 0.160874 1.848213 +v 6.488448 0.160874 1.917652 +v 6.488448 2.244086 1.917652 +v 7.519677 2.244086 1.917652 +v 7.519677 0.160874 1.917652 +v 6.488448 2.244086 1.848213 +v 6.488448 0.160874 1.848213 +v 7.358910 -0.023799 1.848213 +v 6.649215 -0.023799 1.848213 +v 7.358910 2.428759 1.917652 +v 6.649215 2.428759 1.917652 +v 6.649215 -0.023799 1.917652 +v 7.358910 -0.023799 1.917652 +v 6.649215 2.428759 1.848213 +v 7.358910 2.428759 1.848213 +v 6.649215 0.160874 1.848213 +v 7.358910 0.160874 1.848213 +v 6.649215 2.244086 1.848213 +v 7.358910 2.244086 1.848213 +v 7.358910 0.160874 1.917652 +v 6.649215 0.160874 1.917652 +v 7.358910 2.244086 1.917652 +v 6.649215 2.244086 1.917652 +v 6.488448 0.873035 1.917652 +v 6.488448 1.130972 1.917652 +v 6.488448 1.130972 1.848213 +v 6.488448 0.873035 1.848213 +v 6.649215 1.130972 1.917652 +v 6.649215 0.873035 1.917652 +v 6.649215 1.130972 1.848213 +v 6.649215 0.873035 1.848213 +vn -0.0000 1.2263 -0.0000 +vn -0.0000 -0.0000 0.0347 +vn -0.5222 -0.0000 -0.0000 +vn -0.0000 -1.2263 -0.0000 +vn 0.5222 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0347 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.685000 +vt 0.585000 0.925000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.525000 0.085000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.585000 0.095000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.405000 0.515000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.515000 +vt 0.895000 0.665000 +vt 0.385000 0.565000 +vt 0.385000 0.565000 +vt 0.895000 0.665000 +vt 0.525000 0.085000 +vt 0.405000 0.515000 +vt 0.405000 0.515000 +vt 0.525000 0.085000 +vt 0.385000 0.515000 +vt 0.405000 0.085000 +vt 0.405000 0.085000 +vt 0.385000 0.515000 +vt 0.495000 0.085000 +vt 0.475934 0.925000 +vt 0.945000 0.685000 +vt 0.455000 0.085000 +vt 0.322601 0.925000 +vt 0.945000 0.685000 +vt 0.915000 0.665000 +vt 0.715000 0.975000 +vt 0.322601 0.925000 +vt 0.925000 0.665000 +vt 0.715000 0.015000 +vt 0.475934 0.925000 +vt 0.395000 0.515000 +vt 0.455000 0.085000 +vt 0.405000 0.515000 +vt 0.495000 0.085000 +vt 0.915000 0.665000 +vt 0.395000 0.565000 +vt 0.245000 0.975000 +vt 0.405000 0.565000 +vt 0.925000 0.665000 +vt 0.245000 0.015000 +s 0 +usemtl GlassDoor +f 832/1988/229 814/1947/229 816/1951/229 829/1982/229 +f 841/2007/230 829/1981/230 816/1952/230 821/1965/230 +f 821/1964/231 816/1953/231 814/1947/231 824/1971/231 +f 826/1976/232 811/1942/232 813/1945/232 831/1986/232 +f 818/1958/233 810/1940/233 812/1944/233 822/1966/233 +f 837/2000/234 833/1989/234 810/1939/234 818/1957/234 +f 826/1975/234 835/1995/234 819/1959/234 811/1941/234 +f 835/1995/234 837/2000/234 818/1957/234 819/1959/234 +f 811/1942/233 819/1960/233 823/1968/233 813/1945/233 +f 819/1961/233 818/1958/233 822/1966/233 823/1969/233 +f 817/1954/231 820/1963/231 825/1974/231 815/1950/231 +f 843/2011/231 821/1964/231 824/1971/231 844/2014/231 +f 830/1983/230 839/2004/230 820/1962/230 817/1955/230 +f 846/2022/230 841/2007/230 821/1965/230 843/2012/230 +f 823/1970/230 822/1967/230 840/2006/230 838/2001/230 +f 836/1998/232 837/1999/232 840/2005/232 841/2008/232 +f 813/1946/230 823/1970/230 838/2001/230 831/1985/230 +f 831/1985/230 838/2001/230 839/2004/230 830/1983/230 +f 844/2015/234 824/1972/234 836/1997/234 848/2025/234 +f 838/2002/231 840/2005/231 837/1999/231 835/1994/231 +f 815/1949/234 825/1973/234 834/1993/234 827/1977/234 +f 827/1977/234 834/1993/234 835/1995/234 826/1975/234 +f 824/1972/234 814/1948/234 832/1987/234 836/1997/234 +f 836/1997/234 832/1987/234 833/1989/234 837/2000/234 +f 815/1950/232 827/1978/232 830/1984/232 817/1956/232 +f 827/1978/232 826/1976/232 831/1986/232 830/1984/232 +f 822/1967/230 812/1943/230 828/1979/230 840/2006/230 +f 840/2006/230 828/1979/230 829/1981/230 841/2007/230 +f 810/1940/229 833/1990/229 828/1980/229 812/1944/229 +f 833/1990/229 832/1988/229 829/1982/229 828/1980/229 +f 846/2021/233 848/2026/233 836/1998/233 841/2008/233 +f 834/1991/229 839/2003/229 838/2002/229 835/1996/229 +f 839/2003/233 834/1992/233 849/2028/233 847/2023/233 +f 847/2023/233 849/2028/233 848/2026/233 846/2021/233 +f 825/1973/234 845/2018/234 849/2029/234 834/1993/234 +f 845/2019/234 844/2016/234 848/2027/234 849/2030/234 +f 839/2004/230 847/2024/230 842/2009/230 820/1962/230 +f 847/2024/230 846/2022/230 843/2012/230 842/2009/230 +f 820/1963/231 842/2010/231 845/2020/231 825/1974/231 +f 842/2010/231 843/2013/231 844/2017/231 845/2020/231 +o door.002 +v -6.520435 2.428760 1.848213 +v -6.520435 -0.023800 1.848213 +v -6.520435 2.428760 1.917652 +v -6.520435 -0.023800 1.917652 +v -7.470248 2.428760 1.848213 +v -7.470248 -0.023800 1.848213 +v -7.470248 2.428760 1.917652 +v -7.470248 -0.023800 1.917652 +v -6.520435 2.244086 1.848213 +v -6.520435 0.160874 1.848213 +v -7.470247 0.160874 1.917652 +v -7.470247 2.244086 1.917652 +v -6.520435 2.244086 1.917652 +v -6.520435 0.160874 1.917652 +v -7.470247 2.244086 1.848213 +v -7.470247 0.160874 1.848213 +v -6.668510 -0.023799 1.848213 +v -7.322174 -0.023799 1.848213 +v -6.668510 2.428759 1.917652 +v -7.322174 2.428759 1.917652 +v -7.322174 -0.023799 1.917652 +v -6.668510 -0.023799 1.917652 +v -7.322174 2.428759 1.848213 +v -6.668510 2.428759 1.848213 +v -7.322174 0.160874 1.848213 +v -6.668510 0.160874 1.848213 +v -7.322174 2.244086 1.848213 +v -6.668510 2.244086 1.848213 +v -6.668510 0.160874 1.917652 +v -7.322174 0.160874 1.917652 +v -6.668510 2.244086 1.917652 +v -7.322174 2.244086 1.917652 +v -7.470247 0.873035 1.917652 +v -7.470247 1.130972 1.917652 +v -7.470247 1.130972 1.848213 +v -7.470247 0.873035 1.848213 +v -7.322174 1.130972 1.917652 +v -7.322174 0.873035 1.917652 +v -7.322174 1.130972 1.848213 +v -7.322174 0.873035 1.848213 +vn -0.0000 1.2263 -0.0000 +vn -0.0000 -0.0000 0.0347 +vn -0.4809 -0.0000 -0.0000 +vn -0.0000 -1.2263 -0.0000 +vn 0.4809 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0347 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.685000 +vt 0.585000 0.925000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.525000 0.085000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.585000 0.095000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.405000 0.515000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.515000 +vt 0.895000 0.665000 +vt 0.385000 0.565000 +vt 0.385000 0.565000 +vt 0.895000 0.665000 +vt 0.525000 0.085000 +vt 0.405000 0.515000 +vt 0.405000 0.515000 +vt 0.525000 0.085000 +vt 0.385000 0.515000 +vt 0.405000 0.085000 +vt 0.405000 0.085000 +vt 0.385000 0.515000 +vt 0.495000 0.085000 +vt 0.475934 0.925000 +vt 0.945000 0.685000 +vt 0.455000 0.085000 +vt 0.322601 0.925000 +vt 0.945000 0.685000 +vt 0.915000 0.665000 +vt 0.715000 0.975000 +vt 0.322601 0.925000 +vt 0.925000 0.665000 +vt 0.715000 0.015000 +vt 0.475934 0.925000 +vt 0.395000 0.515000 +vt 0.455000 0.085000 +vt 0.405000 0.515000 +vt 0.495000 0.085000 +vt 0.915000 0.665000 +vt 0.395000 0.565000 +vt 0.245000 0.975000 +vt 0.405000 0.565000 +vt 0.925000 0.665000 +vt 0.245000 0.015000 +s 0 +usemtl GlassDoor +f 872/2080/235 854/2039/235 856/2043/235 869/2074/235 +f 881/2099/236 869/2073/236 856/2044/236 861/2057/236 +f 861/2056/237 856/2045/237 854/2039/237 864/2063/237 +f 866/2068/238 851/2034/238 853/2037/238 871/2078/238 +f 858/2050/239 850/2032/239 852/2036/239 862/2058/239 +f 877/2092/240 873/2081/240 850/2031/240 858/2049/240 +f 866/2067/240 875/2087/240 859/2051/240 851/2033/240 +f 875/2087/240 877/2092/240 858/2049/240 859/2051/240 +f 851/2034/239 859/2052/239 863/2060/239 853/2037/239 +f 859/2053/239 858/2050/239 862/2058/239 863/2061/239 +f 857/2046/237 860/2055/237 865/2066/237 855/2042/237 +f 883/2103/237 861/2056/237 864/2063/237 884/2106/237 +f 870/2075/236 879/2096/236 860/2054/236 857/2047/236 +f 886/2114/236 881/2099/236 861/2057/236 883/2104/236 +f 863/2062/236 862/2059/236 880/2098/236 878/2093/236 +f 876/2090/238 877/2091/238 880/2097/238 881/2100/238 +f 853/2038/236 863/2062/236 878/2093/236 871/2077/236 +f 871/2077/236 878/2093/236 879/2096/236 870/2075/236 +f 884/2107/240 864/2064/240 876/2089/240 888/2117/240 +f 878/2094/237 880/2097/237 877/2091/237 875/2086/237 +f 855/2041/240 865/2065/240 874/2085/240 867/2069/240 +f 867/2069/240 874/2085/240 875/2087/240 866/2067/240 +f 864/2064/240 854/2040/240 872/2079/240 876/2089/240 +f 876/2089/240 872/2079/240 873/2081/240 877/2092/240 +f 855/2042/238 867/2070/238 870/2076/238 857/2048/238 +f 867/2070/238 866/2068/238 871/2078/238 870/2076/238 +f 862/2059/236 852/2035/236 868/2071/236 880/2098/236 +f 880/2098/236 868/2071/236 869/2073/236 881/2099/236 +f 850/2032/235 873/2082/235 868/2072/235 852/2036/235 +f 873/2082/235 872/2080/235 869/2074/235 868/2072/235 +f 886/2113/239 888/2118/239 876/2090/239 881/2100/239 +f 874/2083/235 879/2095/235 878/2094/235 875/2088/235 +f 879/2095/239 874/2084/239 889/2120/239 887/2115/239 +f 887/2115/239 889/2120/239 888/2118/239 886/2113/239 +f 865/2065/240 885/2110/240 889/2121/240 874/2085/240 +f 885/2111/240 884/2108/240 888/2119/240 889/2122/240 +f 879/2096/236 887/2116/236 882/2101/236 860/2054/236 +f 887/2116/236 886/2114/236 883/2104/236 882/2101/236 +f 860/2055/237 882/2102/237 885/2112/237 865/2066/237 +f 882/2102/237 883/2105/237 884/2109/237 885/2112/237 +o door.003 +v -10.696827 2.428760 1.848213 +v -10.696827 -0.023800 1.848213 +v -10.696827 2.428760 1.917652 +v -10.696827 -0.023800 1.917652 +v -11.646639 2.428760 1.848213 +v -11.646639 -0.023800 1.848213 +v -11.646639 2.428760 1.917652 +v -11.646639 -0.023800 1.917652 +v -10.696827 2.244086 1.848213 +v -10.696827 0.160874 1.848213 +v -11.646639 0.160874 1.917652 +v -11.646639 2.244086 1.917652 +v -10.696827 2.244086 1.917652 +v -10.696827 0.160874 1.917652 +v -11.646639 2.244086 1.848213 +v -11.646639 0.160874 1.848213 +v -10.844901 -0.023799 1.848213 +v -11.498566 -0.023799 1.848213 +v -10.844901 2.428759 1.917652 +v -11.498566 2.428759 1.917652 +v -11.498566 -0.023799 1.917652 +v -10.844901 -0.023799 1.917652 +v -11.498566 2.428759 1.848213 +v -10.844901 2.428759 1.848213 +v -11.498566 0.160874 1.848213 +v -10.844901 0.160874 1.848213 +v -11.498566 2.244086 1.848213 +v -10.844901 2.244086 1.848213 +v -10.844901 0.160874 1.917652 +v -11.498566 0.160874 1.917652 +v -10.844901 2.244086 1.917652 +v -11.498566 2.244086 1.917652 +v -11.646639 0.873035 1.917652 +v -11.646639 1.130972 1.917652 +v -11.646639 1.130972 1.848213 +v -11.646639 0.873035 1.848213 +v -11.498566 1.130972 1.917652 +v -11.498566 0.873035 1.917652 +v -11.498566 1.130972 1.848213 +v -11.498566 0.873035 1.848213 +vn -0.0000 1.2263 -0.0000 +vn -0.0000 -0.0000 0.0347 +vn -0.4809 -0.0000 -0.0000 +vn -0.0000 -1.2263 -0.0000 +vn 0.4809 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0347 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.685000 +vt 0.585000 0.925000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.525000 0.085000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.585000 0.095000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.405000 0.515000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.515000 +vt 0.895000 0.665000 +vt 0.385000 0.565000 +vt 0.385000 0.565000 +vt 0.895000 0.665000 +vt 0.525000 0.085000 +vt 0.405000 0.515000 +vt 0.405000 0.515000 +vt 0.525000 0.085000 +vt 0.385000 0.515000 +vt 0.405000 0.085000 +vt 0.405000 0.085000 +vt 0.385000 0.515000 +vt 0.495000 0.085000 +vt 0.475934 0.925000 +vt 0.945000 0.685000 +vt 0.455000 0.085000 +vt 0.322601 0.925000 +vt 0.945000 0.685000 +vt 0.915000 0.665000 +vt 0.715000 0.975000 +vt 0.322601 0.925000 +vt 0.925000 0.665000 +vt 0.715000 0.015000 +vt 0.475934 0.925000 +vt 0.395000 0.515000 +vt 0.455000 0.085000 +vt 0.405000 0.515000 +vt 0.495000 0.085000 +vt 0.915000 0.665000 +vt 0.395000 0.565000 +vt 0.245000 0.975000 +vt 0.405000 0.565000 +vt 0.925000 0.665000 +vt 0.245000 0.015000 +s 0 +usemtl GlassDoor +f 912/2172/241 894/2131/241 896/2135/241 909/2166/241 +f 921/2191/242 909/2165/242 896/2136/242 901/2149/242 +f 901/2148/243 896/2137/243 894/2131/243 904/2155/243 +f 906/2160/244 891/2126/244 893/2129/244 911/2170/244 +f 898/2142/245 890/2124/245 892/2128/245 902/2150/245 +f 917/2184/246 913/2173/246 890/2123/246 898/2141/246 +f 906/2159/246 915/2179/246 899/2143/246 891/2125/246 +f 915/2179/246 917/2184/246 898/2141/246 899/2143/246 +f 891/2126/245 899/2144/245 903/2152/245 893/2129/245 +f 899/2145/245 898/2142/245 902/2150/245 903/2153/245 +f 897/2138/243 900/2147/243 905/2158/243 895/2134/243 +f 923/2195/243 901/2148/243 904/2155/243 924/2198/243 +f 910/2167/242 919/2188/242 900/2146/242 897/2139/242 +f 926/2206/242 921/2191/242 901/2149/242 923/2196/242 +f 903/2154/242 902/2151/242 920/2190/242 918/2185/242 +f 916/2182/244 917/2183/244 920/2189/244 921/2192/244 +f 893/2130/242 903/2154/242 918/2185/242 911/2169/242 +f 911/2169/242 918/2185/242 919/2188/242 910/2167/242 +f 924/2199/246 904/2156/246 916/2181/246 928/2209/246 +f 918/2186/243 920/2189/243 917/2183/243 915/2178/243 +f 895/2133/246 905/2157/246 914/2177/246 907/2161/246 +f 907/2161/246 914/2177/246 915/2179/246 906/2159/246 +f 904/2156/246 894/2132/246 912/2171/246 916/2181/246 +f 916/2181/246 912/2171/246 913/2173/246 917/2184/246 +f 895/2134/244 907/2162/244 910/2168/244 897/2140/244 +f 907/2162/244 906/2160/244 911/2170/244 910/2168/244 +f 902/2151/242 892/2127/242 908/2163/242 920/2190/242 +f 920/2190/242 908/2163/242 909/2165/242 921/2191/242 +f 890/2124/241 913/2174/241 908/2164/241 892/2128/241 +f 913/2174/241 912/2172/241 909/2166/241 908/2164/241 +f 926/2205/245 928/2210/245 916/2182/245 921/2192/245 +f 914/2175/241 919/2187/241 918/2186/241 915/2180/241 +f 919/2187/245 914/2176/245 929/2212/245 927/2207/245 +f 927/2207/245 929/2212/245 928/2210/245 926/2205/245 +f 905/2157/246 925/2202/246 929/2213/246 914/2177/246 +f 925/2203/246 924/2200/246 928/2211/246 929/2214/246 +f 919/2188/242 927/2208/242 922/2193/242 900/2146/242 +f 927/2208/242 926/2206/242 923/2196/242 922/2193/242 +f 900/2147/243 922/2194/243 925/2204/243 905/2158/243 +f 922/2194/243 923/2197/243 924/2201/243 925/2204/243 +o door.004 +v 9.525742 2.428760 1.848213 +v 9.525742 -0.023800 1.848213 +v 9.525742 2.428760 1.917652 +v 9.525742 -0.023800 1.917652 +v 8.494513 2.428760 1.848213 +v 8.494513 -0.023800 1.848213 +v 8.494513 2.428760 1.917652 +v 8.494513 -0.023800 1.917652 +v 9.525742 2.244086 1.848213 +v 9.525742 0.160874 1.848213 +v 8.494513 0.160874 1.917652 +v 8.494513 2.244086 1.917652 +v 9.525742 2.244086 1.917652 +v 9.525742 0.160874 1.917652 +v 8.494513 2.244086 1.848213 +v 8.494513 0.160874 1.848213 +v 9.364974 -0.023799 1.848213 +v 8.655279 -0.023799 1.848213 +v 9.364974 2.428759 1.917652 +v 8.655279 2.428759 1.917652 +v 8.655279 -0.023799 1.917652 +v 9.364974 -0.023799 1.917652 +v 8.655279 2.428759 1.848213 +v 9.364974 2.428759 1.848213 +v 8.655279 0.160874 1.848213 +v 9.364974 0.160874 1.848213 +v 8.655279 2.244086 1.848213 +v 9.364974 2.244086 1.848213 +v 9.364974 0.160874 1.917652 +v 8.655279 0.160874 1.917652 +v 9.364974 2.244086 1.917652 +v 8.655279 2.244086 1.917652 +v 8.494513 0.873035 1.917652 +v 8.494513 1.130972 1.917652 +v 8.494513 1.130972 1.848213 +v 8.494513 0.873035 1.848213 +v 8.655279 1.130972 1.917652 +v 8.655279 0.873035 1.917652 +v 8.655279 1.130972 1.848213 +v 8.655279 0.873035 1.848213 +vn -0.0000 1.2263 -0.0000 +vn -0.0000 -0.0000 0.0347 +vn -0.5222 -0.0000 -0.0000 +vn -0.0000 -1.2263 -0.0000 +vn 0.5222 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0347 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.685000 +vt 0.585000 0.925000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.525000 0.085000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.585000 0.095000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.405000 0.515000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.515000 +vt 0.895000 0.665000 +vt 0.385000 0.565000 +vt 0.385000 0.565000 +vt 0.895000 0.665000 +vt 0.525000 0.085000 +vt 0.405000 0.515000 +vt 0.405000 0.515000 +vt 0.525000 0.085000 +vt 0.385000 0.515000 +vt 0.405000 0.085000 +vt 0.405000 0.085000 +vt 0.385000 0.515000 +vt 0.495000 0.085000 +vt 0.475934 0.925000 +vt 0.945000 0.685000 +vt 0.455000 0.085000 +vt 0.322601 0.925000 +vt 0.945000 0.685000 +vt 0.915000 0.665000 +vt 0.715000 0.975000 +vt 0.322601 0.925000 +vt 0.925000 0.665000 +vt 0.715000 0.015000 +vt 0.475934 0.925000 +vt 0.395000 0.515000 +vt 0.455000 0.085000 +vt 0.405000 0.515000 +vt 0.495000 0.085000 +vt 0.915000 0.665000 +vt 0.395000 0.565000 +vt 0.245000 0.975000 +vt 0.405000 0.565000 +vt 0.925000 0.665000 +vt 0.245000 0.015000 +s 0 +usemtl GlassDoor +f 952/2264/247 934/2223/247 936/2227/247 949/2258/247 +f 961/2283/248 949/2257/248 936/2228/248 941/2241/248 +f 941/2240/249 936/2229/249 934/2223/249 944/2247/249 +f 946/2252/250 931/2218/250 933/2221/250 951/2262/250 +f 938/2234/251 930/2216/251 932/2220/251 942/2242/251 +f 957/2276/252 953/2265/252 930/2215/252 938/2233/252 +f 946/2251/252 955/2271/252 939/2235/252 931/2217/252 +f 955/2271/252 957/2276/252 938/2233/252 939/2235/252 +f 931/2218/251 939/2236/251 943/2244/251 933/2221/251 +f 939/2237/251 938/2234/251 942/2242/251 943/2245/251 +f 937/2230/249 940/2239/249 945/2250/249 935/2226/249 +f 963/2287/249 941/2240/249 944/2247/249 964/2290/249 +f 950/2259/248 959/2280/248 940/2238/248 937/2231/248 +f 966/2298/248 961/2283/248 941/2241/248 963/2288/248 +f 943/2246/248 942/2243/248 960/2282/248 958/2277/248 +f 956/2274/250 957/2275/250 960/2281/250 961/2284/250 +f 933/2222/248 943/2246/248 958/2277/248 951/2261/248 +f 951/2261/248 958/2277/248 959/2280/248 950/2259/248 +f 964/2291/252 944/2248/252 956/2273/252 968/2301/252 +f 958/2278/249 960/2281/249 957/2275/249 955/2270/249 +f 935/2225/252 945/2249/252 954/2269/252 947/2253/252 +f 947/2253/252 954/2269/252 955/2271/252 946/2251/252 +f 944/2248/252 934/2224/252 952/2263/252 956/2273/252 +f 956/2273/252 952/2263/252 953/2265/252 957/2276/252 +f 935/2226/250 947/2254/250 950/2260/250 937/2232/250 +f 947/2254/250 946/2252/250 951/2262/250 950/2260/250 +f 942/2243/248 932/2219/248 948/2255/248 960/2282/248 +f 960/2282/248 948/2255/248 949/2257/248 961/2283/248 +f 930/2216/247 953/2266/247 948/2256/247 932/2220/247 +f 953/2266/247 952/2264/247 949/2258/247 948/2256/247 +f 966/2297/251 968/2302/251 956/2274/251 961/2284/251 +f 954/2267/247 959/2279/247 958/2278/247 955/2272/247 +f 959/2279/251 954/2268/251 969/2304/251 967/2299/251 +f 967/2299/251 969/2304/251 968/2302/251 966/2297/251 +f 945/2249/252 965/2294/252 969/2305/252 954/2269/252 +f 965/2295/252 964/2292/252 968/2303/252 969/2306/252 +f 959/2280/248 967/2300/248 962/2285/248 940/2238/248 +f 967/2300/248 966/2298/248 963/2288/248 962/2285/248 +f 940/2239/249 962/2286/249 965/2296/249 945/2250/249 +f 962/2286/249 963/2289/249 964/2293/249 965/2296/249 +o door.005 +v -11.836187 2.428760 0.452536 +v -11.836187 -0.023800 0.452536 +v -11.836187 2.428760 0.383097 +v -11.836187 -0.023800 0.383097 +v -10.886375 2.428760 0.452536 +v -10.886375 -0.023800 0.452536 +v -10.886375 2.428760 0.383096 +v -10.886375 -0.023800 0.383096 +v -11.836187 2.244086 0.452536 +v -11.836187 0.160874 0.452536 +v -10.886375 0.160874 0.383096 +v -10.886375 2.244086 0.383096 +v -11.836187 2.244086 0.383097 +v -11.836187 0.160874 0.383097 +v -10.886375 2.244087 0.452535 +v -10.886375 0.160874 0.452536 +v -11.688113 -0.023799 0.452536 +v -11.034449 -0.023799 0.452536 +v -11.688113 2.428759 0.383097 +v -11.034449 2.428759 0.383096 +v -11.034449 -0.023799 0.383096 +v -11.688113 -0.023799 0.383097 +v -11.034449 2.428759 0.452536 +v -11.688113 2.428759 0.452536 +v -11.034449 0.160874 0.452536 +v -11.688113 0.160874 0.452536 +v -11.034449 2.244087 0.452535 +v -11.688113 2.244086 0.452536 +v -11.688113 0.160874 0.383097 +v -11.034449 0.160874 0.383096 +v -11.688113 2.244086 0.383097 +v -11.034449 2.244086 0.383096 +v -10.886375 0.873035 0.383096 +v -10.886375 1.130972 0.383096 +v -10.886375 1.130973 0.452535 +v -10.886375 0.873035 0.452536 +v -11.034449 1.130972 0.383096 +v -11.034449 0.873035 0.383096 +v -11.034449 1.130973 0.452535 +v -11.034449 0.873035 0.452536 +vn -0.0000 1.2263 -0.0000 +vn -0.0000 -0.0000 -0.0347 +vn 0.4809 -0.0000 -0.0000 +vn -0.0000 -1.2263 -0.0000 +vn -0.4809 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.0347 +vn -0.0000 -0.0001 0.0347 +vn -0.0000 0.0001 0.0347 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.685000 +vt 0.585000 0.925000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.525000 0.085000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.585000 0.095000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.405000 0.515000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.515000 +vt 0.895000 0.665000 +vt 0.385000 0.565000 +vt 0.385000 0.565000 +vt 0.895000 0.665000 +vt 0.525000 0.085000 +vt 0.405000 0.515000 +vt 0.405000 0.515000 +vt 0.525000 0.085000 +vt 0.385000 0.515000 +vt 0.405000 0.085000 +vt 0.405000 0.085000 +vt 0.385000 0.515000 +vt 0.495000 0.085000 +vt 0.265000 0.025000 +vt 0.475934 0.925000 +vt 0.945000 0.685000 +vt 0.455000 0.085000 +vt 0.265000 0.985000 +vt 0.322601 0.925000 +vt 0.945000 0.685000 +vt 0.915000 0.665000 +vt 0.715000 0.975000 +vt 0.322601 0.925000 +vt 0.925000 0.665000 +vt 0.715000 0.015000 +vt 0.475934 0.925000 +vt 0.455000 0.085000 +vt 0.395000 0.515000 +vt 0.735000 0.985000 +vt 0.405000 0.515000 +vt 0.495000 0.085000 +vt 0.735000 0.025000 +vt 0.915000 0.665000 +vt 0.395000 0.565000 +vt 0.245000 0.975000 +vt 0.405000 0.565000 +vt 0.925000 0.665000 +vt 0.245000 0.015000 +s 0 +usemtl GlassDoor +f 992/2356/253 974/2315/253 976/2319/253 989/2350/253 +f 1001/2375/254 989/2349/254 976/2320/254 981/2333/254 +f 981/2332/255 976/2321/255 974/2315/255 984/2339/255 +f 986/2344/256 971/2310/256 973/2313/256 991/2354/256 +f 978/2326/257 970/2308/257 972/2312/257 982/2334/257 +f 997/2368/258 993/2357/258 970/2307/258 978/2325/258 +f 986/2343/258 995/2363/258 979/2327/258 971/2309/258 +f 995/2363/258 997/2368/258 978/2325/258 979/2327/258 +f 971/2310/257 979/2328/257 983/2336/257 973/2313/257 +f 979/2329/257 978/2326/257 982/2334/257 983/2337/257 +f 977/2322/255 980/2331/255 985/2342/255 975/2318/255 +f 1003/2380/255 981/2332/255 984/2339/255 1004/2384/255 +f 990/2351/254 999/2372/254 980/2330/254 977/2323/254 +f 1006/2391/254 1001/2375/254 981/2333/254 1003/2381/254 +f 983/2338/254 982/2335/254 1000/2374/254 998/2369/254 +f 996/2366/256 997/2367/256 1000/2373/256 1001/2376/256 +f 973/2314/254 983/2338/254 998/2369/254 991/2353/254 +f 991/2353/254 998/2369/254 999/2372/254 990/2351/254 +f 1004/2385/258 984/2340/258 996/2365/258 1008/2397/258 +f 998/2370/255 1000/2373/255 997/2367/255 995/2362/255 +f 975/2317/258 985/2341/258 994/2361/258 987/2345/258 +f 987/2345/258 994/2361/258 995/2363/258 986/2343/258 +f 984/2340/259 974/2316/259 992/2355/259 996/2365/259 +f 996/2365/259 992/2355/259 993/2357/259 997/2368/259 +f 975/2318/256 987/2346/256 990/2352/256 977/2324/256 +f 987/2346/256 986/2344/256 991/2354/256 990/2352/256 +f 982/2335/254 972/2311/254 988/2347/254 1000/2374/254 +f 1000/2374/254 988/2347/254 989/2349/254 1001/2375/254 +f 970/2308/253 993/2358/253 988/2348/253 972/2312/253 +f 993/2358/253 992/2356/253 989/2350/253 988/2348/253 +f 1006/2392/257 1008/2398/257 996/2366/257 1001/2376/257 +f 994/2359/253 999/2371/253 998/2370/253 995/2364/253 +f 999/2371/257 994/2360/257 1009/2400/257 1007/2394/257 +f 1007/2394/257 1009/2400/257 1008/2398/257 1006/2392/257 +f 985/2341/258 1005/2388/258 1009/2401/258 994/2361/258 +f 1005/2389/260 1004/2386/260 1008/2399/260 1009/2402/260 +f 999/2372/254 1007/2395/254 1002/2377/254 980/2330/254 +f 1007/2396/254 1006/2393/254 1003/2382/254 1002/2378/254 +f 980/2331/255 1002/2379/255 1005/2390/255 985/2342/255 +f 1002/2379/255 1003/2383/255 1004/2387/255 1005/2390/255 +o door.006 +v -9.681041 2.428760 0.447052 +v -9.681041 -0.023800 0.447052 +v -9.681041 2.428760 0.377612 +v -9.681041 -0.023800 0.377612 +v -8.731229 2.428760 0.447051 +v -8.731229 -0.023800 0.447051 +v -8.731229 2.428760 0.377612 +v -8.731229 -0.023800 0.377612 +v -9.681041 2.244086 0.447052 +v -9.681041 0.160874 0.447052 +v -8.731229 0.160874 0.377612 +v -8.731229 2.244086 0.377612 +v -9.681041 2.244086 0.377612 +v -9.681041 0.160874 0.377612 +v -8.731229 2.244086 0.447051 +v -8.731229 0.160874 0.447051 +v -9.532967 -0.023799 0.447052 +v -8.879302 -0.023799 0.447051 +v -9.532967 2.428759 0.377612 +v -8.879302 2.428759 0.377612 +v -8.879302 -0.023799 0.377612 +v -9.532967 -0.023799 0.377612 +v -8.879302 2.428759 0.447051 +v -9.532967 2.428759 0.447052 +v -8.879302 0.160874 0.447051 +v -9.532967 0.160874 0.447052 +v -8.879302 2.244086 0.447051 +v -9.532967 2.244086 0.447052 +v -9.532967 0.160874 0.377612 +v -8.879302 0.160874 0.377612 +v -9.532967 2.244086 0.377612 +v -8.879302 2.244086 0.377612 +v -8.731229 0.873035 0.377612 +v -8.731229 1.130972 0.377612 +v -8.731229 1.130972 0.447051 +v -8.731229 0.873035 0.447051 +v -8.879302 1.130972 0.377612 +v -8.879302 0.873035 0.377612 +v -8.879302 1.130972 0.447051 +v -8.879302 0.873035 0.447051 +vn -0.0000 1.2263 -0.0000 +vn -0.0000 -0.0000 -0.0347 +vn 0.4809 -0.0000 -0.0000 +vn -0.0000 -1.2263 -0.0000 +vn -0.4809 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.0347 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.685000 +vt 0.585000 0.925000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.525000 0.085000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.585000 0.095000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.405000 0.515000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.515000 +vt 0.895000 0.665000 +vt 0.385000 0.565000 +vt 0.385000 0.565000 +vt 0.895000 0.665000 +vt 0.525000 0.085000 +vt 0.405000 0.515000 +vt 0.405000 0.515000 +vt 0.525000 0.085000 +vt 0.385000 0.515000 +vt 0.405000 0.085000 +vt 0.405000 0.085000 +vt 0.385000 0.515000 +vt 0.495000 0.085000 +vt 0.235000 0.025000 +vt 0.475934 0.925000 +vt 0.945000 0.685000 +vt 0.455000 0.085000 +vt 0.235000 0.965000 +vt 0.322601 0.925000 +vt 0.945000 0.685000 +vt 0.915000 0.665000 +vt 0.715000 0.975000 +vt 0.322601 0.925000 +vt 0.925000 0.665000 +vt 0.715000 0.015000 +vt 0.475934 0.925000 +vt 0.455000 0.085000 +vt 0.395000 0.515000 +vt 0.725000 0.965000 +vt 0.405000 0.515000 +vt 0.495000 0.085000 +vt 0.725000 0.025000 +vt 0.915000 0.665000 +vt 0.395000 0.565000 +vt 0.245000 0.975000 +vt 0.405000 0.565000 +vt 0.925000 0.665000 +vt 0.245000 0.015000 +s 0 +usemtl GlassDoor +f 1032/2452/261 1014/2411/261 1016/2415/261 1029/2446/261 +f 1041/2471/262 1029/2445/262 1016/2416/262 1021/2429/262 +f 1021/2428/263 1016/2417/263 1014/2411/263 1024/2435/263 +f 1026/2440/264 1011/2406/264 1013/2409/264 1031/2450/264 +f 1018/2422/265 1010/2404/265 1012/2408/265 1022/2430/265 +f 1037/2464/266 1033/2453/266 1010/2403/266 1018/2421/266 +f 1026/2439/266 1035/2459/266 1019/2423/266 1011/2405/266 +f 1035/2459/266 1037/2464/266 1018/2421/266 1019/2423/266 +f 1011/2406/265 1019/2424/265 1023/2432/265 1013/2409/265 +f 1019/2425/265 1018/2422/265 1022/2430/265 1023/2433/265 +f 1017/2418/263 1020/2427/263 1025/2438/263 1015/2414/263 +f 1043/2476/263 1021/2428/263 1024/2435/263 1044/2480/263 +f 1030/2447/262 1039/2468/262 1020/2426/262 1017/2419/262 +f 1046/2487/262 1041/2471/262 1021/2429/262 1043/2477/262 +f 1023/2434/262 1022/2431/262 1040/2470/262 1038/2465/262 +f 1036/2462/264 1037/2463/264 1040/2469/264 1041/2472/264 +f 1013/2410/262 1023/2434/262 1038/2465/262 1031/2449/262 +f 1031/2449/262 1038/2465/262 1039/2468/262 1030/2447/262 +f 1044/2481/266 1024/2436/266 1036/2461/266 1048/2493/266 +f 1038/2466/263 1040/2469/263 1037/2463/263 1035/2458/263 +f 1015/2413/266 1025/2437/266 1034/2457/266 1027/2441/266 +f 1027/2441/266 1034/2457/266 1035/2459/266 1026/2439/266 +f 1024/2436/266 1014/2412/266 1032/2451/266 1036/2461/266 +f 1036/2461/266 1032/2451/266 1033/2453/266 1037/2464/266 +f 1015/2414/264 1027/2442/264 1030/2448/264 1017/2420/264 +f 1027/2442/264 1026/2440/264 1031/2450/264 1030/2448/264 +f 1022/2431/262 1012/2407/262 1028/2443/262 1040/2470/262 +f 1040/2470/262 1028/2443/262 1029/2445/262 1041/2471/262 +f 1010/2404/261 1033/2454/261 1028/2444/261 1012/2408/261 +f 1033/2454/261 1032/2452/261 1029/2446/261 1028/2444/261 +f 1046/2488/265 1048/2494/265 1036/2462/265 1041/2472/265 +f 1034/2455/261 1039/2467/261 1038/2466/261 1035/2460/261 +f 1039/2467/265 1034/2456/265 1049/2496/265 1047/2490/265 +f 1047/2490/265 1049/2496/265 1048/2494/265 1046/2488/265 +f 1025/2437/266 1045/2484/266 1049/2497/266 1034/2457/266 +f 1045/2485/266 1044/2482/266 1048/2495/266 1049/2498/266 +f 1039/2468/262 1047/2491/262 1042/2473/262 1020/2426/262 +f 1047/2492/262 1046/2489/262 1043/2478/262 1042/2474/262 +f 1020/2427/263 1042/2475/263 1045/2486/263 1025/2438/263 +f 1042/2475/263 1043/2479/263 1044/2483/263 1045/2486/263 +o door.007 +v -0.181244 2.428759 1.848213 +v -0.181244 -0.023799 1.848213 +v -0.181244 2.428759 1.917652 +v -0.181244 -0.023799 1.917652 +v -1.114820 2.428759 1.848213 +v -1.114820 -0.023799 1.848213 +v -1.114820 2.428759 1.917652 +v -1.114820 -0.023799 1.917652 +v -0.181245 2.244086 1.848213 +v -0.181245 0.160874 1.848213 +v -1.114820 0.160874 1.917652 +v -1.114820 2.244086 1.917652 +v -0.181245 2.244086 1.917652 +v -0.181245 0.160874 1.917652 +v -1.114820 2.244086 1.848213 +v -1.114820 0.160874 1.848213 +v -0.326788 -0.023799 1.848213 +v -0.969277 -0.023799 1.848213 +v -0.326788 2.428760 1.917652 +v -0.969277 2.428760 1.917652 +v -0.969277 -0.023799 1.917652 +v -0.326788 -0.023799 1.917652 +v -0.969277 2.428760 1.848213 +v -0.326788 2.428760 1.848213 +v -0.969277 0.160874 1.848213 +v -0.326788 0.160874 1.848213 +v -0.969277 2.244086 1.848213 +v -0.326788 2.244086 1.848213 +v -0.326788 0.160874 1.917652 +v -0.969277 0.160874 1.917652 +v -0.326788 2.244086 1.917652 +v -0.969277 2.244086 1.917652 +v -1.114820 0.873035 1.917652 +v -1.114820 1.130972 1.917652 +v -1.114820 1.130972 1.848213 +v -1.114820 0.873035 1.848213 +v -0.969277 1.130972 1.917652 +v -0.969277 0.873035 1.917652 +v -0.969277 1.130972 1.848213 +v -0.969277 0.873035 1.848213 +vn -0.0000 1.2263 -0.0000 +vn -0.0000 -0.0000 0.0347 +vn -0.4727 -0.0000 -0.0000 +vn -0.0000 -1.2263 -0.0000 +vn 0.4727 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0347 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.685000 +vt 0.585000 0.925000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.525000 0.085000 +vt 0.585000 0.925000 +vt 0.945000 0.685000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.585000 0.095000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.935000 0.665000 +vt 0.585000 0.925000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.405000 0.085000 +vt 0.945000 0.675000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.525000 0.085000 +vt 0.585000 0.095000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.895000 0.665000 +vt 0.945000 0.685000 +vt 0.405000 0.515000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.565000 +vt 0.935000 0.665000 +vt 0.405000 0.515000 +vt 0.895000 0.665000 +vt 0.385000 0.565000 +vt 0.385000 0.565000 +vt 0.895000 0.665000 +vt 0.525000 0.085000 +vt 0.405000 0.515000 +vt 0.405000 0.515000 +vt 0.525000 0.085000 +vt 0.385000 0.515000 +vt 0.405000 0.085000 +vt 0.405000 0.085000 +vt 0.385000 0.515000 +vt 0.495000 0.085000 +vt 0.475934 0.925000 +vt 0.945000 0.685000 +vt 0.455000 0.085000 +vt 0.322601 0.925000 +vt 0.945000 0.685000 +vt 0.915000 0.665000 +vt 0.715000 0.975000 +vt 0.322601 0.925000 +vt 0.925000 0.665000 +vt 0.715000 0.015000 +vt 0.475934 0.925000 +vt 0.395000 0.515000 +vt 0.455000 0.085000 +vt 0.405000 0.515000 +vt 0.495000 0.085000 +vt 0.915000 0.665000 +vt 0.395000 0.565000 +vt 0.245000 0.975000 +vt 0.405000 0.565000 +vt 0.925000 0.665000 +vt 0.245000 0.015000 +s 0 +usemtl GlassDoor.008 +f 1072/2548/267 1054/2507/267 1056/2511/267 1069/2542/267 +f 1081/2567/268 1069/2541/268 1056/2512/268 1061/2525/268 +f 1061/2524/269 1056/2513/269 1054/2507/269 1064/2531/269 +f 1066/2536/270 1051/2502/270 1053/2505/270 1071/2546/270 +f 1058/2518/271 1050/2500/271 1052/2504/271 1062/2526/271 +f 1077/2560/272 1073/2549/272 1050/2499/272 1058/2517/272 +f 1066/2535/272 1075/2555/272 1059/2519/272 1051/2501/272 +f 1075/2555/272 1077/2560/272 1058/2517/272 1059/2519/272 +f 1051/2502/271 1059/2520/271 1063/2528/271 1053/2505/271 +f 1059/2521/271 1058/2518/271 1062/2526/271 1063/2529/271 +f 1057/2514/269 1060/2523/269 1065/2534/269 1055/2510/269 +f 1083/2571/269 1061/2524/269 1064/2531/269 1084/2574/269 +f 1070/2543/268 1079/2564/268 1060/2522/268 1057/2515/268 +f 1086/2582/268 1081/2567/268 1061/2525/268 1083/2572/268 +f 1063/2530/268 1062/2527/268 1080/2566/268 1078/2561/268 +f 1076/2558/270 1077/2559/270 1080/2565/270 1081/2568/270 +f 1053/2506/268 1063/2530/268 1078/2561/268 1071/2545/268 +f 1071/2545/268 1078/2561/268 1079/2564/268 1070/2543/268 +f 1084/2575/272 1064/2532/272 1076/2557/272 1088/2585/272 +f 1078/2562/269 1080/2565/269 1077/2559/269 1075/2554/269 +f 1055/2509/272 1065/2533/272 1074/2553/272 1067/2537/272 +f 1067/2537/272 1074/2553/272 1075/2555/272 1066/2535/272 +f 1064/2532/272 1054/2508/272 1072/2547/272 1076/2557/272 +f 1076/2557/272 1072/2547/272 1073/2549/272 1077/2560/272 +f 1055/2510/270 1067/2538/270 1070/2544/270 1057/2516/270 +f 1067/2538/270 1066/2536/270 1071/2546/270 1070/2544/270 +f 1062/2527/268 1052/2503/268 1068/2539/268 1080/2566/268 +f 1080/2566/268 1068/2539/268 1069/2541/268 1081/2567/268 +f 1050/2500/267 1073/2550/267 1068/2540/267 1052/2504/267 +f 1073/2550/267 1072/2548/267 1069/2542/267 1068/2540/267 +f 1086/2581/271 1088/2586/271 1076/2558/271 1081/2568/271 +f 1074/2551/267 1079/2563/267 1078/2562/267 1075/2556/267 +f 1079/2563/271 1074/2552/271 1089/2588/271 1087/2583/271 +f 1087/2583/271 1089/2588/271 1088/2586/271 1086/2581/271 +f 1065/2533/272 1085/2578/272 1089/2589/272 1074/2553/272 +f 1085/2579/272 1084/2576/272 1088/2587/272 1089/2590/272 +f 1079/2564/268 1087/2584/268 1082/2569/268 1060/2522/268 +f 1087/2584/268 1086/2582/268 1083/2572/268 1082/2569/268 +f 1060/2523/269 1082/2570/269 1085/2580/269 1065/2534/269 +f 1082/2570/269 1083/2573/269 1084/2577/269 1085/2580/269 +o door middle +v -0.240217 2.369494 1.849593 +v -0.240217 0.035466 1.849593 +v -0.240217 2.369494 1.916273 +v -0.240217 0.035466 1.916273 +v -1.070443 2.369494 1.849593 +v -1.070443 0.035466 1.849593 +v -1.070443 2.369494 1.916273 +v -1.070443 0.035466 1.916273 +vn -0.0000 1.1670 -0.0000 +vn -0.0000 -0.0000 0.0333 +vn -0.4204 -0.0000 -0.0000 +vn -0.0000 -1.1670 -0.0000 +vn 0.4204 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0333 +vt 0.625000 0.500000 +vt 0.014648 1.991211 +vt 0.375000 0.500000 +vt 0.014648 -1.047852 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.999023 1.991211 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.999023 -1.047852 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl WallPattern +f 1090/2591/273 1094/2597/273 1096/2603/273 1092/2595/273 +f 1093/2596/274 1092/2595/274 1096/2604/274 1097/2606/274 +f 1097/2607/275 1096/2605/275 1094/2598/275 1095/2600/275 +f 1095/2601/276 1091/2593/276 1093/2596/276 1097/2608/276 +f 1091/2593/277 1090/2591/277 1092/2595/277 1093/2596/277 +f 1095/2602/278 1094/2599/278 1090/2592/278 1091/2594/278 +o Chair +v 3.782868 0.415382 6.009298 +v 3.782868 0.429951 6.009298 +v 3.772173 0.429951 6.057751 +v 3.685536 0.429951 6.450253 +v 3.674842 0.429951 6.498705 +v 3.674842 0.415382 6.498705 +v 3.685536 0.415382 6.450253 +v 3.772173 0.415382 6.057751 +v 3.299251 0.429951 6.415801 +v 3.299251 0.415382 6.415801 +v 3.299251 0.400812 6.415801 +v 3.309083 0.400812 6.371254 +v 3.685536 0.400812 6.450253 +v 3.674842 0.400812 6.498705 +v 3.407277 0.415382 5.926394 +v 3.407277 0.429951 5.926394 +v 3.397444 0.415382 5.970941 +v 3.397444 0.429951 5.970941 +v 3.407277 0.400812 5.926394 +v 3.397444 0.400812 5.970941 +v 3.782868 0.400812 6.009298 +v 3.772173 0.400812 6.057751 +v 3.703760 0.432961 6.484087 +v 3.706982 0.432961 6.469489 +v 3.702591 0.421009 6.468520 +v 3.699369 0.421009 6.483118 +v 3.714920 0.426967 6.471241 +v 3.711698 0.426967 6.485839 +v 3.800560 0.419106 6.034228 +v 3.797384 0.419106 6.048617 +v 3.809713 0.425064 6.051339 +v 3.812890 0.425064 6.036949 +v 3.805089 0.434699 6.035227 +v 3.801912 0.434699 6.049617 +v 3.721016 0.431853 6.472586 +v 3.717793 0.431853 6.487185 +v 3.815945 0.433592 6.052714 +v 3.819122 0.433592 6.038325 +v 3.831099 0.592772 6.040968 +v 3.817066 0.593879 6.037871 +v 3.715738 0.592141 6.486731 +v 3.718960 0.592141 6.472133 +v 3.729771 0.591033 6.489829 +v 3.747741 0.829840 6.493795 +v 3.733707 0.830948 6.490697 +v 3.849069 0.831579 6.044935 +v 3.835036 0.832686 6.041837 +v 3.732993 0.591033 6.475230 +v 3.813890 0.593879 6.052261 +v 3.827923 0.592772 6.055358 +v 3.723735 0.830737 6.488496 +v 3.741878 0.870951 6.468887 +v 3.733010 0.870348 6.466929 +v 3.821876 0.832325 6.054023 +v 3.825052 0.832325 6.039634 +v 3.823973 0.869634 6.063202 +v 3.819960 0.864490 6.079541 +v 3.750963 0.829840 6.479197 +v 3.808188 0.608202 6.035912 +v 3.831859 0.832686 6.056227 +v 3.845893 0.831579 6.059325 +v 3.736930 0.830948 6.476099 +v 3.754516 0.869953 6.471677 +v 3.706870 0.606614 6.484774 +v 3.710093 0.606614 6.470175 +v 3.726958 0.830737 6.473898 +v 3.805012 0.608202 6.050301 +v 3.832850 0.870373 6.065162 +v 3.828838 0.865229 6.081501 +v 3.841477 0.864232 6.084291 +v 3.751638 0.913073 6.396288 +v 3.759728 0.914244 6.397596 +v 3.820109 0.911897 6.137554 +v 3.812229 0.911148 6.135447 +v 3.758255 0.867524 6.453868 +v 3.745617 0.868521 6.451078 +v 3.760957 0.902898 6.387969 +v 3.774571 0.901824 6.390974 +v 3.736748 0.867919 6.449121 +v 3.845490 0.869376 6.067952 +v 3.817221 0.900855 6.146689 +v 3.830834 0.899781 6.149694 +v 3.833722 0.910823 6.140559 +v 3.773341 0.913170 6.400600 +v 3.809791 0.901346 6.142983 +v 3.752868 0.901727 6.386661 +v 3.309083 0.415382 6.371254 +v 3.309083 0.429951 6.371254 +v 3.487210 0.438060 6.459511 +v 3.485951 0.443651 6.465215 +v 3.613955 0.443651 6.493469 +v 3.615214 0.438060 6.487765 +v 3.615176 0.429976 6.487938 +v 3.646850 0.437950 6.494749 +v 3.644259 0.430300 6.494358 +v 3.482965 0.429903 6.478742 +v 3.483003 0.437987 6.478570 +v 3.355001 0.437987 6.450316 +v 3.354963 0.429903 6.450488 +v 3.356206 0.443828 6.444855 +v 3.325054 0.439408 6.437979 +v 3.326131 0.434055 6.443944 +v 3.485967 0.424135 6.465144 +v 3.484225 0.424311 6.473038 +v 3.356222 0.424311 6.444784 +v 3.357964 0.424135 6.436890 +v 3.484209 0.443828 6.473109 +v 3.357948 0.443651 6.436961 +v 3.611007 0.437987 6.506824 +v 3.612213 0.443828 6.501363 +v 3.487172 0.429976 6.459684 +v 3.359169 0.429976 6.431430 +v 3.613971 0.424135 6.493398 +v 3.612228 0.424311 6.501292 +v 3.329251 0.426646 6.444812 +v 3.332694 0.421521 6.439590 +v 3.326866 0.439247 6.430100 +v 3.334506 0.421360 6.431712 +v 3.333429 0.426713 6.425749 +v 3.610969 0.429903 6.506996 +v 3.642620 0.437881 6.513802 +v 3.645669 0.443408 6.508748 +v 3.641210 0.424773 6.499411 +v 3.639523 0.424940 6.507317 +v 3.640030 0.430231 6.513410 +v 3.359207 0.438060 6.431257 +v 3.671883 0.420977 6.500455 +v 3.667187 0.416357 6.505144 +v 3.665550 0.416497 6.513062 +v 3.667632 0.420919 6.519503 +v 3.672501 0.427313 6.520397 +v 3.647356 0.443241 6.500842 +v 3.690813 0.402967 6.524619 +v 3.697441 0.407418 6.525902 +v 3.676752 0.427371 6.501348 +v 3.701707 0.407458 6.506857 +v 3.695079 0.403008 6.505575 +v 3.677197 0.431932 6.515707 +v 3.703408 0.410634 6.521492 +v 3.678834 0.431793 6.507790 +v 3.705006 0.410537 6.513567 +v 3.719035 0.380352 6.510682 +v 3.711355 0.378323 6.509168 +v 3.714759 0.380334 6.529725 +v 3.721485 0.381800 6.525483 +v 3.723061 0.381756 6.517552 +v 3.689112 0.399792 6.509984 +v 3.687513 0.399889 6.517910 +v 3.736741 0.345795 6.528850 +v 3.738316 0.345756 6.520919 +v 3.704628 0.376856 6.513409 +v 3.726508 0.342751 6.512513 +v 3.719739 0.341467 6.516744 +v 3.707080 0.378304 6.528210 +v 3.703053 0.376901 6.521339 +v 3.718164 0.341506 6.524675 +v 3.722232 0.342735 6.531555 +v 3.262329 0.349401 6.409873 +v 3.270131 0.348454 6.411777 +v 3.229993 -0.002953 6.402916 +v 3.222190 -0.002007 6.401014 +v 3.729971 0.344511 6.533082 +v 3.814616 0.001491 6.551766 +v 3.821387 0.002774 6.547534 +v 3.253735 0.350077 6.422237 +v 3.255648 0.350056 6.414381 +v 3.215509 -0.001352 6.405521 +v 3.213596 -0.001331 6.413377 +v 3.811154 -0.000270 6.531195 +v 3.804384 -0.001553 6.535428 +v 3.734248 0.344527 6.514040 +v 3.294837 0.425574 6.431309 +v 3.297814 0.421603 6.437693 +v 3.330309 0.434122 6.424879 +v 3.301969 0.421652 6.418623 +v 3.296705 0.425454 6.423443 +v 3.308828 0.412305 6.434323 +v 3.310697 0.412185 6.426456 +v 3.307720 0.416156 6.420074 +v 3.280778 0.403231 6.413946 +v 3.274364 0.405075 6.418512 +v 3.290468 0.398698 6.430270 +v 3.292372 0.398640 6.422412 +v 3.288193 0.400566 6.415764 +v 3.303566 0.416106 6.439143 +v 3.277639 0.371230 6.419160 +v 3.273272 0.372479 6.412470 +v 3.284054 0.400542 6.434836 +v 3.269135 0.372464 6.431543 +v 3.275727 0.371267 6.427016 +v 3.272459 0.405133 6.426370 +v 3.259006 0.375406 6.415122 +v 3.257096 0.375443 6.422978 +v 3.276639 0.403207 6.433019 +v 3.261461 0.374194 6.429669 +v 3.258194 0.349392 6.428947 +v 3.265995 0.348446 6.430850 +v 3.265599 0.374209 6.410595 +v 3.274591 0.347770 6.418487 +v 3.272677 0.347791 6.426343 +v 3.232538 -0.003617 6.417483 +v 3.234451 -0.003637 6.409627 +v 3.818893 0.001507 6.532723 +v 3.225856 -0.002962 6.421990 +v 3.806878 -0.000286 6.550238 +v 3.812885 0.000611 6.541481 +v 3.802810 -0.001514 6.543359 +v 3.822961 0.002736 6.539603 +v 3.224024 -0.002484 6.411502 +v 3.218055 -0.002015 6.420088 +v 3.600055 0.438060 5.948275 +v 3.598796 0.443651 5.953978 +v 3.726800 0.443651 5.982232 +v 3.728059 0.438060 5.976529 +v 3.728021 0.429976 5.976700 +v 3.759694 0.437950 5.983511 +v 3.757104 0.430300 5.983120 +v 3.469066 0.424311 5.933547 +v 3.467808 0.429903 5.939250 +v 3.442095 0.426646 5.933575 +v 3.445539 0.421521 5.928354 +v 3.598812 0.424135 5.953907 +v 3.597069 0.424311 5.961801 +v 3.470809 0.424135 5.925653 +v 3.597054 0.443828 5.961872 +v 3.470793 0.443651 5.925724 +v 3.469051 0.443828 5.933618 +v 3.595848 0.437987 5.967333 +v 3.467845 0.437987 5.939079 +v 3.723852 0.437987 5.995587 +v 3.725057 0.443828 5.990126 +v 3.600017 0.429976 5.948446 +v 3.472014 0.429976 5.920192 +v 3.726815 0.424135 5.982161 +v 3.725073 0.424311 5.990055 +v 3.439710 0.439247 5.918863 +v 3.437899 0.439408 5.926742 +v 3.447351 0.421360 5.920475 +v 3.446274 0.426713 5.914511 +v 3.472052 0.438060 5.920021 +v 3.443154 0.434122 5.913642 +v 3.595810 0.429903 5.967505 +v 3.723814 0.429903 5.995759 +v 3.755465 0.437881 6.002564 +v 3.758514 0.443408 5.997511 +v 3.754055 0.424773 5.988173 +v 3.752368 0.424940 5.996080 +v 3.752875 0.430231 6.002173 +v 3.760201 0.443241 5.989605 +v 3.790042 0.431932 6.004470 +v 3.791679 0.431793 5.996553 +v 3.784728 0.420977 5.989217 +v 3.780033 0.416357 5.993907 +v 3.778395 0.416497 6.001824 +v 3.780477 0.420919 6.008266 +v 3.800358 0.399889 6.006672 +v 3.803657 0.402967 6.013382 +v 3.801957 0.399792 5.998747 +v 3.785346 0.427313 6.009160 +v 3.810286 0.407418 6.014665 +v 3.789597 0.427371 5.990112 +v 3.814552 0.407458 5.995620 +v 3.807924 0.403008 5.994337 +v 3.831880 0.380352 5.999445 +v 3.824200 0.378323 5.997930 +v 3.816252 0.410634 6.010255 +v 3.827604 0.380334 6.018488 +v 3.834330 0.381800 6.014246 +v 3.817851 0.410537 6.002330 +v 3.835906 0.381756 6.006315 +v 3.842816 0.344511 6.021846 +v 3.849586 0.345795 6.017613 +v 3.851160 0.345756 6.009682 +v 3.847093 0.344527 6.002803 +v 3.817473 0.376856 6.002172 +v 3.839353 0.342751 6.001275 +v 3.832584 0.341467 6.005507 +v 3.819925 0.378304 6.016973 +v 3.815898 0.376901 6.010103 +v 3.375174 0.349401 5.898637 +v 3.382976 0.348454 5.900539 +v 3.342838 -0.002953 5.891679 +v 3.335035 -0.002007 5.889777 +v 3.927461 0.001491 6.040529 +v 3.934231 0.002774 6.036297 +v 3.366579 0.350077 5.911000 +v 3.368493 0.350056 5.903143 +v 3.328354 -0.001352 5.894284 +v 3.326440 -0.001331 5.902140 +v 3.923998 -0.000270 6.019958 +v 3.917229 -0.001553 6.024191 +v 3.835077 0.342735 6.020318 +v 3.831009 0.341506 6.013438 +v 3.414814 0.421652 5.907386 +v 3.409550 0.425454 5.912206 +v 3.421673 0.412305 5.923086 +v 3.423542 0.412185 5.915220 +v 3.420565 0.416156 5.908836 +v 3.438975 0.434055 5.932706 +v 3.401038 0.400566 5.904526 +v 3.393623 0.403231 5.902709 +v 3.405217 0.398640 5.911175 +v 3.416411 0.416106 5.927906 +v 3.396898 0.400542 5.923599 +v 3.403312 0.398698 5.919033 +v 3.407682 0.425574 5.920072 +v 3.387209 0.405075 5.907275 +v 3.385303 0.405133 5.915133 +v 3.410659 0.421603 5.926456 +v 3.381979 0.372464 5.920306 +v 3.388572 0.371267 5.915780 +v 3.371851 0.375406 5.903885 +v 3.369940 0.375443 5.911742 +v 3.389484 0.403207 5.921782 +v 3.374306 0.374194 5.918432 +v 3.371039 0.349392 5.917711 +v 3.378443 0.374209 5.899358 +v 3.390482 0.371230 5.907922 +v 3.385521 0.347791 5.915106 +v 3.387435 0.347770 5.907250 +v 3.386117 0.372479 5.901232 +v 3.345383 -0.003617 5.906246 +v 3.347296 -0.003637 5.898390 +v 3.931738 0.001507 6.021486 +v 3.919722 -0.000286 6.039001 +v 3.378840 0.348446 5.919613 +v 3.338701 -0.002962 5.910753 +v 3.925730 0.000611 6.030243 +v 3.915655 -0.001514 6.032122 +v 3.935806 0.002736 6.028366 +v 3.336869 -0.002484 5.900265 +v 3.330900 -0.002015 5.908851 +vn 0.9765 -0.0000 0.2155 +vn -0.2155 -0.0000 0.9765 +vn -0.0000 -1.0000 -0.0000 +vn 0.2155 -0.0000 -0.9765 +vn -0.9765 -0.0000 -0.2155 +vn -0.1163 0.9929 -0.0257 +vn 0.2574 -0.9646 0.0568 +vn 0.4167 -0.9044 0.0920 +vn 0.7053 -0.0911 -0.7031 +vn 0.1584 -0.9868 0.0350 +vn -0.1674 0.9852 -0.0369 +vn 0.3098 -0.0779 0.9476 +vn 0.5027 -0.1146 0.8568 +vn 0.7907 -0.0987 -0.6041 +vn 0.6019 -0.7874 0.1329 +vn 0.7818 -0.5992 0.1726 +vn -0.9736 0.0768 -0.2149 +vn 0.9736 -0.0768 0.2149 +vn -0.1339 -0.2916 0.9471 +vn -0.2070 0.5027 0.8393 +vn -0.9704 0.1047 -0.2175 +vn -0.9713 0.1119 -0.2101 +vn -0.9720 0.1062 -0.2096 +vn 0.7049 -0.0656 0.7063 +vn -0.1495 0.4967 0.8550 +vn -0.9731 0.0768 -0.2172 +vn -0.8244 -0.5359 -0.1820 +vn 0.1534 0.5287 -0.8348 +vn -0.2163 -0.6113 0.7613 +vn -0.5092 -0.8531 -0.1136 +vn -0.8258 -0.5326 -0.1855 +vn -0.8244 -0.5337 -0.1885 +vn -0.8272 -0.5315 -0.1826 +vn -0.1121 0.9931 -0.0342 +vn -0.0401 0.9648 -0.2597 +vn -0.0320 0.9584 -0.2838 +vn 0.0346 -0.8811 -0.4716 +vn 0.3249 -0.8634 -0.3860 +vn 0.6315 -0.7743 -0.0397 +vn 0.1338 -0.5705 -0.8103 +vn 0.8988 -0.3669 -0.2399 +vn 0.8667 -0.3997 -0.2983 +vn 0.9759 -0.0465 0.2131 +vn -0.9698 0.1108 -0.2173 +vn -0.9695 0.1116 -0.2182 +vn 0.9724 -0.0794 0.2196 +vn 0.2229 0.5223 -0.8231 +vn 0.9744 -0.0401 0.2213 +vn -0.9700 0.1101 -0.2166 +vn 0.9731 -0.0584 0.2227 +vn 0.5467 -0.7742 0.3190 +vn 0.9722 -0.0813 0.2195 +vn 0.9732 -0.0847 0.2139 +vn 0.9710 -0.0769 0.2266 +vn -0.0449 0.8588 0.5103 +vn 0.1281 0.9633 -0.2359 +vn 0.0767 0.9970 0.0088 +vn 0.1283 0.9630 -0.2368 +vn -0.1815 0.8610 0.4751 +vn -0.9731 0.0845 -0.2144 +vn -0.9718 0.0831 -0.2207 +vn -0.9718 0.0796 -0.2219 +vn -0.9709 0.0778 -0.2265 +vn -0.1684 -0.8773 0.4494 +vn -0.1262 -0.9658 0.2267 +vn -0.9741 0.0880 -0.2081 +vn 0.9742 -0.0886 0.2076 +vn 0.1716 0.8673 -0.4673 +vn 0.0422 0.8695 -0.4921 +vn -0.9739 0.0744 -0.2144 +vn -0.9712 0.0849 -0.2225 +vn -0.0766 -0.9970 -0.0094 +vn 0.9743 -0.0732 0.2132 +vn -0.9744 0.0723 -0.2128 +vn -0.0000 1.0000 -0.0000 +vn 0.1490 0.7224 -0.6752 +vn 0.1508 0.7268 -0.6700 +vn 0.1508 0.7269 -0.6700 +vn 0.2156 -0.0225 -0.9762 +vn 0.2152 -0.0215 -0.9763 +vn 0.2091 -0.0204 -0.9777 +vn -0.2155 0.0218 0.9763 +vn -0.2168 0.0219 0.9760 +vn -0.2169 0.0219 0.9759 +vn -0.2460 0.6937 0.6769 +vn -0.0047 -0.9998 0.0213 +vn 0.0047 0.9998 -0.0214 +vn -0.1557 0.6915 0.7054 +vn -0.1520 0.6962 0.7016 +vn 0.0106 0.9997 -0.0198 +vn 0.1557 -0.6915 -0.7054 +vn -0.0621 -0.7257 0.6852 +vn -0.1293 0.9903 -0.0504 +vn 0.2352 -0.6955 -0.6789 +vn -0.1491 -0.7223 0.6753 +vn -0.2155 0.0221 0.9762 +vn -0.1483 0.7008 0.6977 +vn 0.0176 -0.9995 0.0255 +vn -0.2088 0.0214 0.9777 +vn -0.2152 0.0224 0.9763 +vn -0.0574 -0.6683 -0.7417 +vn -0.3668 -0.6972 0.6160 +vn -0.2992 -0.9532 -0.0444 +vn -0.2023 0.0183 0.9791 +vn -0.2079 0.0214 0.9779 +vn 0.0164 0.9997 -0.0182 +vn -0.1348 -0.7326 0.6672 +vn 0.1526 0.7313 -0.6648 +vn 0.1649 -0.7022 -0.6926 +vn -0.1971 0.0132 0.9803 +vn -0.2014 0.0178 0.9794 +vn 0.2028 -0.0175 -0.9791 +vn 0.2084 -0.0205 -0.9778 +vn 0.2021 -0.0172 -0.9792 +vn 0.1978 -0.0124 -0.9802 +vn 0.2693 0.5509 0.7899 +vn 0.5884 0.5748 -0.5687 +vn 0.3314 0.9421 0.0514 +vn 0.3832 0.6901 -0.6139 +vn 0.0727 0.6614 0.7465 +vn 0.1975 -0.0119 -0.9802 +vn 0.1961 -0.0090 -0.9805 +vn 0.4205 0.3812 0.8233 +vn 0.7462 0.3978 -0.5338 +vn 0.8260 0.5403 0.1606 +vn -0.5843 -0.8044 -0.1073 +vn -0.5751 -0.5868 0.5700 +vn -0.2571 -0.5625 -0.7858 +vn 0.6113 0.7833 0.1132 +vn 0.9002 0.3980 0.1767 +vn -0.4692 -0.2790 -0.8379 +vn -0.7990 -0.2912 0.5261 +vn -0.8991 -0.4005 -0.1764 +vn -0.1956 0.0092 0.9806 +vn -0.1969 0.0122 0.9804 +vn -0.8072 -0.5692 -0.1565 +vn -0.7373 -0.4135 0.5342 +vn -0.4127 -0.3964 -0.8201 +vn 0.2367 -0.0027 -0.9716 +vn 0.2367 -0.0025 -0.9716 +vn 0.4991 0.1694 0.8498 +vn -0.9650 0.1162 -0.2353 +vn -0.4991 -0.1695 -0.8498 +vn 0.7995 0.2899 -0.5261 +vn 0.4696 0.2777 0.8381 +vn 0.1967 -0.0080 -0.9804 +vn 0.1957 -0.0055 -0.9807 +vn -0.1948 0.0054 0.9808 +vn -0.1953 0.0070 0.9807 +vn -0.4296 0.6472 0.6297 +vn -0.1431 0.6748 -0.7240 +vn 0.3397 -0.9356 0.0961 +vn 0.2185 -0.0216 -0.9756 +vn 0.2237 -0.0207 -0.9744 +vn 0.2294 -0.0182 -0.9732 +vn 0.2245 -0.0205 -0.9743 +vn 0.0512 0.7239 -0.6880 +vn -0.2187 0.0227 0.9755 +vn -0.2239 0.0218 0.9744 +vn 0.1076 -0.9932 0.0455 +vn 0.2183 -0.0222 -0.9756 +vn -0.3350 0.5630 -0.7555 +vn 0.5677 -0.8103 0.1454 +vn 0.2340 -0.0112 -0.9722 +vn 0.2304 -0.0173 -0.9729 +vn 0.5741 -0.5801 -0.5778 +vn -0.2246 0.0211 0.9742 +vn -0.2297 0.0187 0.9731 +vn -0.3938 0.9128 -0.1083 +vn 0.1172 -0.6896 0.7146 +vn 0.4032 -0.6617 -0.6321 +vn 0.7544 -0.3366 -0.5635 +vn 0.4799 -0.3512 0.8040 +vn -0.8580 0.4682 -0.2112 +vn -0.2344 0.0114 0.9721 +vn -0.2307 0.0175 0.9729 +vn -0.2350 0.0104 0.9719 +vn -0.2368 0.0032 0.9716 +vn -0.6099 0.5405 0.5795 +vn -0.6452 0.7463 -0.1633 +vn 0.3017 -0.6033 0.7382 +vn -0.9627 0.1344 -0.2348 +vn -0.2366 0.0027 0.9716 +vn -0.8254 0.0928 0.5569 +vn -0.8259 0.0866 0.5571 +vn -0.5507 0.0969 -0.8291 +vn -0.5511 0.0905 -0.8295 +vn -0.5511 0.0904 -0.8295 +vn 0.2358 -0.0030 -0.9718 +vn 0.2340 -0.0100 -0.9722 +vn 0.8507 -0.4821 0.2095 +vn -0.4827 0.3437 -0.8055 +vn -0.7575 0.3294 0.5637 +vn 0.9649 -0.1162 0.2354 +vn 0.1948 -0.0053 -0.9808 +vn 0.5512 -0.0898 0.8295 +vn 0.5516 -0.0839 0.8299 +vn -0.1949 0.0053 0.9808 +vn 0.5509 -0.0956 0.8291 +vn 0.8255 -0.0916 -0.5570 +vn 0.8259 -0.0860 -0.5572 +vn 0.8260 -0.0859 -0.5572 +vn 0.9630 -0.1319 0.2350 +vn 0.2146 -0.9756 0.0474 +vn 0.2146 -0.9756 0.0473 +vn -0.1144 -0.9931 -0.0252 +vn -0.1143 -0.9931 -0.0252 +vn -0.1143 -0.9931 -0.0253 +vn -0.1144 -0.9931 -0.0253 +vn -0.8330 -0.1770 0.5242 +vn -0.2366 0.0025 0.9716 +vn 0.8330 0.1770 -0.5242 +vn 0.8264 -0.0803 -0.5573 +vn -0.9512 -0.2449 -0.1876 +vn -0.8264 0.0803 0.5573 +vn 0.9512 0.2449 0.1876 +vn -0.5516 0.0839 -0.8299 +vn 0.2155 -0.0221 -0.9762 +vn 0.2152 -0.0224 -0.9763 +vn 0.2088 -0.0214 -0.9777 +vn 0.2352 -0.6956 -0.6789 +vn 0.2168 -0.0219 -0.9760 +vn 0.2169 -0.0219 -0.9759 +vn 0.2239 -0.0218 -0.9744 +vn 0.2188 -0.0228 -0.9755 +vn -0.2156 0.0224 0.9762 +vn 0.2155 -0.0218 -0.9763 +vn -0.0575 -0.6683 -0.7416 +vn 0.1649 -0.7023 -0.6926 +vn -0.5843 -0.8044 -0.1074 +vn 0.2023 -0.0183 -0.9792 +vn 0.2079 -0.0214 -0.9779 +vn 0.2014 -0.0178 -0.9793 +vn 0.1971 -0.0131 -0.9803 +vn 0.1969 -0.0123 -0.9803 +vn 0.1956 -0.0092 -0.9806 +vn -0.2572 -0.5626 -0.7857 +vn 0.4696 0.2777 0.8380 +vn -0.4692 -0.2790 -0.8378 +vn -0.1955 0.0091 0.9807 +vn -0.1969 0.0123 0.9803 +vn 0.2366 -0.0027 -0.9716 +vn 0.2366 -0.0025 -0.9716 +vn 0.4991 0.1695 0.8498 +vn -0.4992 -0.1695 -0.8498 +vn 0.1953 -0.0070 -0.9807 +vn 0.1944 -0.0057 -0.9809 +vn -0.1948 0.0055 0.9808 +vn 0.2297 -0.0187 -0.9731 +vn 0.2246 -0.0210 -0.9742 +vn 0.4032 -0.6618 -0.6321 +vn -0.2183 0.0221 0.9756 +vn 0.2344 -0.0114 -0.9721 +vn 0.2307 -0.0176 -0.9729 +vn 0.5741 -0.5802 -0.5777 +vn 0.9630 -0.1319 0.2348 +vn 0.2350 -0.0104 -0.9719 +vn 0.2368 -0.0032 -0.9716 +vn 0.7545 -0.3367 -0.5634 +vn 0.8507 -0.4821 0.2094 +vn 0.9650 -0.1162 0.2353 +vn 0.1949 -0.0053 -0.9808 +vn 0.8256 -0.0916 -0.5568 +vn 0.8260 -0.0860 -0.5570 +vn 0.8260 -0.0859 -0.5570 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt 0.686647 0.000000 +vt 0.870176 0.996278 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.782584 0.965408 +vt 0.870573 0.970227 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.833010 0.965282 +vt 0.908785 0.026051 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.968598 0.070112 +vt 0.979071 0.026051 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.968598 0.371019 +vt 0.757324 0.262250 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.173427 0.241164 +vt 0.758439 0.080128 +vt -0.973130 0.033128 +vt -0.123087 0.241439 +vt 0.978437 0.000000 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt 0.737072 0.000128 +vt 0.908263 0.000000 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.409642 -0.009898 +vt 0.677629 0.482142 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.240570 0.058726 +vt 0.669677 0.481452 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.786789 0.246652 +vt 0.991724 0.699406 +vt 0.928489 0.277215 +vt 0.873308 0.505274 +vt 0.786789 0.155990 +vt 0.958960 0.029326 +vt 0.991724 0.483440 +vt 0.977373 0.702462 +vt -0.140978 0.246673 +vt 0.958492 0.010078 +vt -0.156145 0.246590 +vt 0.929566 0.080357 +vt -0.144664 0.252235 +vt 0.984385 0.731379 +vt 0.945934 0.020741 +vt -0.159831 0.252152 +vt 0.984385 0.500820 +vt 0.989649 0.087406 +vt 0.706860 0.007022 +vt 0.847263 0.989602 +vt 0.686599 0.714388 +vt 0.721837 0.007060 +vt 0.884682 0.006674 +vt 0.720919 0.017861 +vt 0.673632 0.527027 +vt 0.872079 0.017335 +vt 0.705942 0.017823 +vt 0.673632 0.731676 +vt 0.690157 0.523535 +vt 0.802894 0.958412 +vt 0.847659 0.963551 +vt 0.695298 0.714388 +vt 0.661237 0.495044 +vt 0.817871 0.958374 +vt 0.885205 0.032725 +vt 0.661237 0.722645 +vt 0.693293 0.503638 +vt 0.944329 0.029337 +vt 0.981154 0.731379 +vt 0.977373 0.486830 +vt 0.989649 0.263822 +vt 0.873305 0.723869 +vt 0.981154 0.500820 +vt 0.870573 0.032734 +vt 0.693293 0.761173 +vt 0.679412 0.527027 +vt 0.695298 0.493838 +vt 0.679412 0.731676 +vt 0.826600 0.493835 +vt 0.826977 0.731673 +vt 0.826600 0.714385 +vt 0.814491 0.495042 +vt 0.122435 0.638558 +vt 0.015922 0.839080 +vt 0.835047 0.699404 +vt 0.993361 0.510073 +vt 0.758428 0.504317 +vt 0.072861 0.638558 +vt 0.015474 0.619132 +vt 0.835047 0.483438 +vt 0.845328 0.702461 +vt 0.015197 0.626266 +vt 0.014109 0.491099 +vt 0.993356 0.728667 +vt 0.758425 0.722912 +vt 0.833436 0.500823 +vt 0.891028 0.725398 +vt 0.672547 0.500827 +vt 0.752235 0.729690 +vt 0.667246 0.727168 +vt 0.891033 0.506802 +vt 0.752238 0.507120 +vt 0.071993 0.783837 +vt 0.969610 0.493832 +vt 0.987699 0.731670 +vt 0.641343 0.509140 +vt 0.689355 0.726560 +vt 0.969610 0.714382 +vt 0.122436 0.783837 +vt 0.641344 0.743247 +vt 0.833436 0.731382 +vt 0.845328 0.486829 +vt 0.814491 0.722643 +vt 0.825052 0.503733 +vt 0.016195 0.832047 +vt 0.634466 0.494220 +vt 0.825052 0.761267 +vt 0.826977 0.527024 +vt 0.022424 0.783234 +vt 0.035852 0.889154 +vt 0.043016 0.971597 +vt 0.706398 0.505224 +vt 0.072863 0.808180 +vt 0.028940 0.807392 +vt 0.010039 0.882150 +vt 0.137154 0.974703 +vt 0.631023 0.892124 +vt 0.649326 0.890699 +vt 0.121379 0.984023 +vt 0.648470 0.892315 +vt 0.072864 0.783142 +vt 0.043889 0.943476 +vt 0.078385 0.805896 +vt 0.075977 0.941215 +vt 0.613560 0.946909 +vt 0.672547 0.731385 +vt 0.701510 0.486829 +vt 0.669481 0.490576 +vt 0.072863 0.646796 +vt 0.648470 0.506013 +vt 0.080915 0.841605 +vt 0.968560 0.503835 +vt 0.102906 0.865583 +vt 0.634467 0.887149 +vt 0.987699 0.527021 +vt 0.968560 0.761369 +vt 0.690090 0.495972 +vt 0.701510 0.702461 +vt 0.603150 0.865583 +vt 0.014109 0.884028 +vt 0.706395 0.729929 +vt 0.816556 0.714481 +vt 0.023239 0.646888 +vt 0.040534 0.495932 +vt 0.081188 0.621686 +vt 0.007711 0.495744 +vt 0.041481 0.497122 +vt 0.080911 0.628820 +vt 0.003028 0.888966 +vt 0.041481 0.887645 +vt 0.060838 0.971173 +vt 0.631023 0.505822 +vt 0.649326 0.500176 +vt 0.081188 0.834572 +vt 0.805889 0.743046 +vt 0.122312 0.806766 +vt 0.988155 0.503653 +vt 0.115555 0.935422 +vt 0.904138 0.912557 +vt 0.988155 0.735605 +vt 0.813022 0.494763 +vt 0.890960 0.912565 +vt 0.735836 0.641861 +vt 0.693936 0.468644 +vt 0.027417 0.833361 +vt 0.420996 0.961603 +vt 0.032040 0.784613 +vt 0.284612 0.483847 +vt 0.656925 0.504187 +vt 0.681549 0.720168 +vt 0.066750 0.834450 +vt 0.299225 0.449509 +vt 0.999708 0.720167 +vt 0.989627 0.743247 +vt 0.121899 0.832034 +vt 0.693936 0.449159 +vt 0.420996 0.999935 +vt 0.008277 0.862094 +vt 0.082562 0.831201 +vt 0.741580 0.718717 +vt 0.678836 0.505353 +vt 0.815743 0.487362 +vt 0.741523 0.585977 +vt 0.678836 0.699564 +vt 0.553315 0.945729 +vt 0.982243 0.588758 +vt 0.460393 1.018433 +vt 0.949871 0.788878 +vt 0.982305 0.727355 +vt 0.668954 0.502598 +vt 0.949657 0.691167 +vt 0.979056 0.490574 +vt 0.078628 0.952623 +vt 0.035428 0.887064 +vt 0.812426 0.730862 +vt 0.971935 0.642457 +vt 0.805889 0.532195 +vt 0.173975 1.012235 +vt 0.908785 0.976444 +vt 0.726484 0.788878 +vt 0.984477 0.500479 +vt 0.894591 0.976453 +vt 0.737043 0.505375 +vt 0.726270 0.691167 +vt 0.987420 0.694407 +vt 0.999899 0.506981 +vt 0.968797 0.500648 +vt 0.989626 0.516135 +vt 0.652223 0.697892 +vt 0.656922 0.730164 +vt 0.681740 0.506981 +vt 0.985798 0.713641 +vt 0.053549 0.993732 +vt 0.043551 0.873068 +vt 0.522988 0.991572 +vt 0.062665 0.961706 +vt 0.169656 0.991799 +vt 0.060838 0.809705 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +s 1 +usemtl Material.061 +f 1098/2610/279 1099/2614/279 1100/2619/279 1101/2623/279 1102/2627/279 1103/2633/279 1104/2636/279 1105/2639/279 +f 1103/2632/280 1102/2628/280 1106/2643/280 1107/2646/280 +f 1108/2648/281 1109/2652/281 1110/2654/281 1111/2655/281 +f 1112/2659/282 1113/2660/282 1099/2615/282 1098/2609/282 +f 1113/2661/283 1112/2658/283 1114/2663/283 1115/2664/283 +f 1116/2666/283 1117/2669/283 1114/2663/283 1112/2658/283 +f 1116/2667/282 1112/2659/282 1098/2609/282 1118/2671/282 +f 1111/2656/280 1103/2632/280 1107/2646/280 1108/2649/280 +f 1118/2672/279 1098/2610/279 1105/2639/279 1104/2636/279 1103/2633/279 1111/2657/279 1110/2653/279 1119/2675/279 +f 1101/2624/284 1102/2629/284 1120/2678/284 1121/2682/284 +f 1111/2657/279 1110/2653/279 1104/2636/279 1103/2633/279 +f 1105/2640/283 1098/2611/283 1118/2673/283 1119/2676/283 +f 1103/2634/285 1104/2637/285 1122/2686/285 1123/2688/285 +f 1123/2688/286 1122/2686/286 1124/2690/286 1125/2693/286 +f 1126/2696/286 1129/2704/286 1128/2701/286 1127/2699/286 +f 1104/2638/287 1101/2625/287 1121/2683/287 1122/2687/287 +f 1098/2612/288 1126/2696/288 1127/2699/288 1105/2641/288 +f 1100/2620/289 1131/2711/289 1130/2707/289 1099/2616/289 +f 1105/2642/290 1127/2700/290 1131/2712/290 1100/2621/290 +f 1102/2630/291 1103/2635/291 1123/2689/291 1120/2680/291 +f 1099/2617/292 1130/2708/292 1126/2697/292 1098/2613/292 +f 1125/2694/293 1124/2691/293 1132/2716/293 1133/2720/293 +f 1134/2723/294 1128/2702/294 1129/2705/294 1135/2725/294 +f 1130/2709/282 1137/2728/282 1136/2726/282 1135/2724/282 +f 1122/2687/282 1121/2683/282 1132/2715/282 1124/2692/282 +f 1121/2684/295 1120/2679/295 1138/2732/295 1139/2737/295 +f 1130/2709/282 1135/2724/282 1129/2706/282 1126/2698/282 +f 1120/2680/280 1123/2689/280 1125/2695/280 1133/2718/280 +f 1127/2700/280 1128/2703/280 1134/2721/280 1131/2712/280 +f 1138/2733/280 1140/2741/280 1141/2744/280 1142/2748/280 +f 1137/2728/282 1144/2755/282 1143/2751/282 1136/2726/282 +f 1120/2681/280 1133/2719/280 1140/2742/280 1138/2734/280 +f 1133/2720/296 1132/2716/296 1145/2758/296 1140/2743/296 +f 1131/2713/295 1146/2760/295 1137/2729/295 1130/2710/295 +f 1134/2722/280 1147/2764/280 1146/2761/297 1131/2714/280 +f 1135/2725/296 1136/2727/296 1147/2765/296 1134/2723/296 +f 1132/2717/282 1121/2685/282 1139/2738/282 1145/2759/282 +f 1148/2766/298 1142/2750/298 1149/2770/298 1150/2771/298 +f 1151/2773/299 1154/2781/300 1153/2779/301 1152/2776/301 +f 1140/2743/296 1145/2758/296 1155/2783/296 1141/2745/296 +f 1137/2730/282 1156/2786/282 1152/2778/282 1144/2756/282 +f 1147/2764/280 1158/2793/280 1157/2789/302 1146/2761/297 +f 1145/2759/282 1139/2738/282 1159/2795/282 1155/2784/282 +f 1136/2727/296 1143/2752/296 1158/2792/296 1147/2765/296 +f 1142/2749/303 1141/2746/303 1160/2798/303 1149/2769/303 +f 1138/2735/280 1142/2750/280 1148/2766/280 1161/2800/280 +f 1162/2803/304 1161/2801/295 1148/2767/295 1163/2806/304 +f 1164/2809/304 1151/2774/304 1152/2777/295 1156/2787/295 +f 1162/2804/304 1163/2807/304 1151/2775/304 1164/2810/304 +f 1146/2762/305 1164/2811/305 1156/2788/305 1137/2731/305 +f 1152/2778/306 1153/2780/306 1165/2813/306 1144/2756/306 +f 1158/2793/307 1167/2817/307 1166/2814/307 1157/2789/307 +f 1139/2739/308 1162/2805/309 1164/2811/310 1146/2762/297 +f 1139/2739/308 1138/2736/311 1161/2802/311 1162/2805/309 +f 1168/2821/312 1169/2825/312 1170/2829/313 1171/2833/314 +f 1172/2837/315 1173/2840/316 1174/2843/317 1175/2846/315 +f 1155/2784/318 1159/2795/319 1173/2841/320 1172/2838/318 +f 1141/2747/321 1155/2785/321 1172/2839/321 1160/2799/321 +f 1163/2807/322 1176/2850/323 1154/2782/300 1151/2775/299 +f 1157/2790/302 1166/2815/324 1173/2842/320 1159/2796/319 +f 1144/2757/325 1165/2812/325 1177/2854/325 1143/2753/325 +f 1143/2754/326 1177/2852/326 1167/2818/326 1158/2794/326 +f 1163/2808/322 1148/2768/327 1150/2772/327 1176/2851/323 +f 1166/2815/328 1178/2855/329 1174/2844/317 1173/2842/316 +f 1179/2858/330 1180/2862/331 1181/2866/332 1175/2847/332 +f 1149/2769/333 1160/2798/333 1181/2867/333 1169/2826/333 +f 1170/2830/334 1169/2827/335 1181/2868/335 1180/2863/336 +f 1150/2771/337 1149/2770/337 1169/2828/337 1168/2822/337 +f 1171/2834/338 1182/2870/339 1183/2873/340 1168/2823/341 +f 1167/2819/342 1179/2859/343 1178/2856/329 1166/2816/342 +f 1154/2781/344 1182/2871/339 1171/2835/338 1153/2779/344 +f 1177/2853/345 1180/2864/331 1179/2860/330 1167/2820/345 +f 1165/2812/346 1170/2831/334 1180/2865/336 1177/2854/346 +f 1153/2780/347 1171/2836/314 1170/2832/313 1165/2813/347 +f 1176/2850/348 1183/2874/340 1182/2872/339 1154/2782/349 +f 1179/2861/343 1175/2848/350 1174/2845/317 1178/2857/329 +f 1160/2799/351 1172/2839/351 1175/2849/351 1181/2869/351 +f 1176/2851/348 1150/2772/352 1168/2824/352 1183/2875/340 +f 1115/2664/283 1114/2663/283 1184/2876/283 1185/2877/283 +f 1107/2647/283 1106/2644/283 1185/2877/283 1184/2876/283 +f 1184/2876/283 1114/2663/283 1117/2669/283 1109/2651/283 +f 1109/2651/283 1108/2650/283 1107/2647/283 1184/2876/283 +f 1113/2662/353 1115/2665/353 1100/2622/353 1099/2618/353 +f 1101/2626/353 1185/2878/353 1106/2645/353 1102/2631/353 +f 1100/2622/353 1115/2665/353 1185/2878/353 1101/2626/353 +f 1119/2677/281 1117/2670/281 1116/2668/281 1118/2674/281 +f 1110/2654/281 1109/2652/281 1117/2670/281 1119/2677/281 +f 1159/2797/319 1139/2740/308 1146/2763/297 1157/2791/302 +f 1186/2879/354 1187/2880/354 1188/2881/355 1189/2883/356 +f 1190/2884/357 1189/2882/357 1191/2887/358 1192/2889/359 +f 1193/2891/360 1194/2892/360 1195/2893/361 1196/2895/362 +f 1195/2893/363 1197/2896/363 1198/2898/363 1199/2900/363 +f 1200/2902/364 1201/2903/364 1202/2904/364 1203/2906/364 +f 1204/2908/365 1187/2880/365 1205/2909/365 1197/2897/365 +f 1194/2892/366 1204/2907/366 1197/2896/366 1195/2893/366 +f 1206/2910/367 1207/2911/367 1204/2907/366 1194/2892/366 +f 1207/2912/368 1188/2881/368 1187/2880/365 1204/2908/365 +f 1208/2913/369 1200/2901/369 1203/2905/369 1209/2914/369 +f 1190/2885/369 1210/2917/369 1200/2901/369 1208/2913/369 +f 1210/2916/364 1211/2918/364 1201/2903/364 1200/2902/364 +f 1202/2904/370 1196/2894/370 1212/2920/370 1213/2921/370 +f 1197/2897/371 1205/2909/371 1214/2922/371 1198/2899/371 +f 1209/2914/372 1203/2905/372 1215/2924/372 1216/2926/372 +f 1201/2903/373 1193/2890/373 1196/2894/373 1202/2904/373 +f 1211/2918/373 1217/2928/373 1193/2890/373 1201/2903/373 +f 1217/2927/374 1206/2910/374 1194/2892/360 1193/2891/360 +f 1207/2911/367 1206/2910/367 1218/2929/375 1219/2931/375 +f 1211/2918/376 1210/2916/376 1220/2932/376 1221/2934/376 +f 1206/2910/374 1217/2927/374 1222/2935/377 1218/2929/378 +f 1223/2937/354 1205/2909/354 1187/2880/354 1186/2879/354 +f 1220/2933/379 1192/2888/379 1224/2940/379 1225/2942/379 +f 1222/2936/380 1221/2934/380 1226/2943/380 1227/2945/380 +f 1221/2934/381 1220/2932/381 1225/2941/381 1226/2943/381 +f 1218/2929/378 1222/2935/377 1227/2946/382 1228/2947/383 +f 1188/2881/368 1207/2912/368 1219/2930/384 1229/2948/384 +f 1217/2928/385 1211/2918/385 1221/2934/385 1222/2936/385 +f 1189/2883/356 1188/2881/355 1229/2948/386 1191/2886/386 +f 1210/2917/387 1190/2885/387 1192/2888/387 1220/2933/387 +f 1228/2947/383 1227/2946/382 1230/2949/388 1231/2950/389 +f 1224/2940/390 1232/2951/391 1233/2954/392 1234/2955/393 +f 1235/2956/394 1228/2947/394 1231/2950/394 1236/2958/394 +f 1232/2951/395 1237/2961/395 1238/2963/395 1233/2954/395 +f 1229/2948/396 1219/2930/396 1235/2957/396 1237/2962/396 +f 1191/2886/397 1229/2948/397 1237/2962/397 1232/2952/397 +f 1219/2931/398 1218/2929/398 1228/2947/398 1235/2956/398 +f 1192/2889/359 1191/2887/358 1232/2953/391 1224/2939/390 +f 1234/2955/393 1233/2954/392 1239/2967/399 1240/2968/400 +f 1236/2958/401 1231/2950/401 1241/2969/401 1242/2971/401 +f 1233/2954/402 1238/2963/402 1243/2972/402 1239/2967/402 +f 1238/2964/403 1236/2959/403 1242/2970/403 1243/2973/403 +f 1226/2943/404 1225/2941/404 1244/2974/404 1245/2977/404 +f 1227/2946/405 1226/2944/405 1245/2979/405 1230/2949/405 +f 1225/2942/406 1224/2940/406 1234/2955/406 1244/2976/406 +f 1237/2962/407 1235/2957/407 1236/2960/407 1238/2965/407 +f 1243/2973/408 1242/2970/408 1246/2981/408 1247/2982/408 +f 1248/2984/409 1240/2968/409 1249/2985/409 1250/2986/409 +f 1251/2988/410 1252/2990/410 1253/2992/410 1254/2994/410 +f 1252/2990/411 1248/2983/411 1250/2987/411 1253/2992/411 +f 1231/2950/389 1230/2949/388 1251/2989/412 1241/2969/413 +f 1245/2978/414 1244/2975/414 1248/2983/414 1252/2990/414 +f 1230/2949/415 1245/2979/415 1252/2991/415 1251/2989/415 +f 1244/2976/416 1234/2955/416 1240/2968/416 1248/2984/416 +f 1255/2995/417 1256/2997/417 1257/2999/418 1258/3000/418 +f 1246/2980/419 1259/3003/419 1260/3004/419 1261/3006/419 +f 1262/3009/420 1263/3011/420 1264/3013/420 1265/3014/420 +f 1250/2986/421 1249/2985/421 1266/3017/421 1267/3019/421 +f 1239/2966/422 1243/2973/422 1247/2982/422 1268/3023/422 +f 1242/2971/423 1241/2969/423 1259/3003/423 1246/2980/423 +f 1240/2968/400 1239/2967/399 1268/3022/424 1249/2985/425 +f 1241/2969/413 1251/2989/412 1254/2993/426 1259/3003/427 +f 1199/2900/428 1198/2898/428 1269/3024/428 1270/3026/428 +f 1214/2922/429 1271/3027/429 1272/3029/429 1273/3033/429 +f 1215/2923/430 1213/2921/430 1274/3034/430 1275/3036/430 +f 1271/3028/431 1216/2925/432 1276/3038/433 1272/3030/434 +f 1205/2909/435 1223/2937/435 1271/3027/435 1214/2922/435 +f 1196/2895/362 1195/2893/361 1199/2900/436 1212/2919/437 +f 1203/2906/438 1202/2904/438 1213/2921/438 1215/2923/438 +f 1223/2938/439 1209/2915/439 1216/2925/432 1271/3028/431 +f 1273/3032/440 1272/3031/440 1277/3040/440 1278/3043/440 +f 1275/3036/441 1274/3034/441 1279/3044/441 1280/3047/441 +f 1272/3031/434 1276/3039/433 1281/3050/442 1277/3040/443 +f 1276/3039/444 1275/3037/444 1280/3048/444 1281/3050/444 +f 1212/2919/437 1199/2900/436 1270/3026/445 1282/3052/446 +f 1198/2899/447 1214/2922/447 1273/3033/447 1269/3025/447 +f 1213/2921/448 1212/2920/448 1282/3051/448 1274/3034/448 +f 1216/2926/449 1215/2924/449 1275/3037/449 1276/3039/449 +f 1281/3050/450 1280/3048/450 1283/3053/450 1284/3055/450 +f 1279/3045/451 1285/3056/451 1286/3057/451 1287/3059/451 +f 1288/3061/452 1278/3041/452 1289/3064/452 1290/3066/452 +f 1285/3056/453 1291/3068/454 1292/3069/455 1286/3057/456 +f 1270/3026/457 1269/3024/457 1288/3063/457 1291/3068/457 +f 1282/3052/446 1270/3026/445 1291/3068/454 1285/3056/453 +f 1269/3025/458 1273/3033/458 1278/3042/458 1288/3062/458 +f 1274/3035/459 1282/3052/459 1285/3056/459 1279/3045/459 +f 1290/3066/460 1289/3064/460 1263/3011/460 1262/3009/460 +f 1286/3057/456 1292/3069/455 1293/3070/461 1294/3072/461 +f 1292/3069/462 1290/3067/462 1262/3010/463 1293/3070/463 +f 1289/3064/464 1295/3073/464 1255/2996/465 1263/3011/466 +f 1277/3040/443 1281/3050/442 1284/3055/467 1295/3074/468 +f 1280/3049/469 1279/3046/469 1287/3060/469 1283/3054/469 +f 1278/3043/470 1277/3040/470 1295/3074/470 1289/3065/470 +f 1291/3068/471 1288/3063/471 1290/3067/471 1292/3069/471 +f 1296/3075/472 1297/3077/472 1298/3078/472 1299/3080/472 +f 1249/2985/425 1268/3022/424 1300/3083/473 1266/3017/473 +f 1297/3077/474 1294/3071/474 1301/3086/475 1298/3078/475 +f 1259/3003/427 1254/2993/426 1302/3089/476 1260/3004/476 +f 1287/3060/477 1286/3058/477 1294/3071/474 1297/3077/474 +f 1284/3055/478 1283/3053/478 1296/3076/479 1256/2997/480 +f 1295/3074/468 1284/3055/467 1256/2997/417 1255/2995/417 +f 1283/3054/481 1287/3060/481 1297/3077/481 1296/3075/481 +f 1303/3092/482 1261/3007/483 1260/3005/482 1302/3090/483 +f 1267/3020/482 1303/3092/482 1302/3090/483 1304/3093/483 +f 1266/3018/482 1300/3084/482 1303/3092/482 1267/3020/482 +f 1300/3084/482 1305/3095/483 1261/3007/483 1303/3092/482 +f 1306/3097/484 1265/3015/484 1264/3012/485 1258/3001/485 +f 1299/3081/486 1306/3097/484 1258/3001/485 1257/2998/485 +f 1298/3079/487 1301/3087/487 1306/3097/484 1299/3081/486 +f 1301/3087/487 1307/3098/487 1265/3015/484 1306/3097/484 +f 1254/2994/488 1253/2992/488 1304/3094/488 1302/3091/488 +f 1294/3072/461 1293/3070/461 1307/3099/489 1301/3088/489 +f 1268/3023/490 1247/2982/490 1305/3096/490 1300/3085/490 +f 1256/2997/480 1296/3076/479 1299/3082/491 1257/2999/491 +f 1253/2992/492 1250/2987/492 1267/3021/492 1304/3094/492 +f 1293/3070/463 1262/3010/463 1265/3016/493 1307/3099/493 +f 1247/2982/494 1246/2981/494 1261/3008/494 1305/3096/494 +f 1263/3011/466 1255/2996/465 1258/3002/495 1264/3013/495 +f 1308/3101/354 1309/3102/354 1310/3103/355 1311/3105/356 +f 1312/3106/496 1311/3104/496 1313/3108/497 1314/3109/498 +f 1315/3110/370 1316/3112/370 1317/3115/370 1318/3117/370 +f 1319/3119/364 1320/3120/364 1315/3111/364 1321/3123/364 +f 1322/3125/365 1309/3102/365 1323/3126/365 1324/3127/365 +f 1325/3129/366 1322/3124/366 1324/3128/366 1326/3130/366 +f 1327/3131/366 1328/3132/366 1322/3124/366 1325/3129/366 +f 1328/3133/368 1310/3103/368 1309/3102/365 1322/3125/365 +f 1329/3134/369 1319/3118/369 1321/3122/369 1330/3135/369 +f 1312/3106/369 1331/3137/369 1319/3118/369 1329/3134/369 +f 1331/3136/364 1332/3138/364 1320/3120/364 1319/3119/364 +f 1324/3127/371 1323/3126/371 1333/3140/371 1334/3142/371 +f 1330/3135/499 1321/3122/499 1335/3143/499 1336/3145/499 +f 1337/3146/500 1330/3135/501 1336/3145/502 1338/3148/503 +f 1320/3121/373 1339/3150/373 1316/3112/373 1315/3110/373 +f 1332/3139/373 1340/3152/373 1339/3150/373 1320/3121/373 +f 1328/3132/375 1327/3131/375 1341/3153/375 1342/3155/375 +f 1332/3138/376 1331/3136/376 1343/3156/376 1344/3158/376 +f 1327/3131/504 1340/3151/504 1345/3161/377 1341/3153/378 +f 1329/3134/505 1308/3100/505 1311/3104/496 1312/3106/496 +f 1330/3135/501 1337/3146/500 1308/3100/505 1329/3134/505 +f 1337/3147/354 1323/3126/354 1309/3102/354 1308/3101/354 +f 1346/3162/396 1342/3154/396 1347/3164/396 1348/3166/396 +f 1343/3157/506 1314/3109/506 1349/3168/506 1350/3170/506 +f 1345/3160/380 1344/3159/380 1351/3171/380 1352/3174/380 +f 1344/3158/381 1343/3156/381 1350/3169/381 1351/3173/381 +f 1310/3103/368 1328/3133/368 1342/3154/384 1346/3162/384 +f 1340/3152/385 1332/3139/385 1344/3159/385 1345/3160/385 +f 1311/3105/356 1310/3103/355 1346/3162/386 1313/3107/386 +f 1331/3137/507 1312/3106/507 1314/3109/507 1343/3157/507 +f 1352/3175/405 1351/3172/405 1353/3179/405 1354/3180/405 +f 1351/3173/508 1350/3169/508 1355/3181/508 1353/3177/508 +f 1356/3185/383 1352/3175/382 1354/3180/388 1357/3186/389 +f 1349/3168/509 1358/3188/510 1359/3189/511 1360/3190/512 +f 1313/3107/397 1346/3162/397 1348/3166/397 1358/3187/397 +f 1342/3155/398 1341/3153/398 1356/3184/398 1347/3163/398 +f 1314/3109/498 1313/3108/497 1358/3188/510 1349/3168/509 +f 1341/3153/378 1345/3161/377 1352/3176/382 1356/3184/383 +f 1360/3190/512 1359/3189/511 1361/3192/513 1362/3193/514 +f 1363/3196/401 1357/3186/401 1364/3197/401 1365/3198/401 +f 1359/3189/402 1366/3202/402 1367/3203/402 1361/3192/402 +f 1366/3200/403 1363/3194/403 1365/3199/403 1367/3204/403 +f 1350/3170/515 1349/3168/515 1360/3190/515 1355/3183/515 +f 1348/3166/407 1347/3164/407 1363/3195/407 1366/3201/407 +f 1358/3188/395 1348/3167/395 1366/3202/395 1359/3189/395 +f 1347/3165/394 1356/3185/394 1357/3186/394 1363/3196/394 +f 1365/3198/516 1364/3197/516 1368/3205/516 1369/3206/516 +f 1361/3191/422 1367/3204/422 1370/3208/422 1371/3210/422 +f 1367/3204/408 1365/3199/408 1369/3207/408 1370/3208/408 +f 1372/3211/517 1362/3193/517 1373/3213/517 1374/3214/517 +f 1357/3186/389 1354/3180/388 1375/3216/518 1364/3197/519 +f 1353/3178/414 1355/3182/414 1372/3212/414 1376/3219/414 +f 1354/3180/415 1353/3179/415 1376/3218/415 1375/3216/415 +f 1355/3183/416 1360/3190/416 1362/3193/416 1372/3211/416 +f 1377/3220/520 1378/3222/520 1379/3224/521 1380/3225/521 +f 1369/3206/522 1368/3205/522 1381/3228/522 1382/3230/522 +f 1383/3234/420 1384/3236/420 1385/3238/420 1386/3239/420 +f 1374/3214/523 1373/3213/523 1387/3243/523 1388/3245/523 +f 1362/3193/514 1361/3192/513 1371/3209/524 1373/3213/525 +f 1364/3197/519 1375/3216/518 1389/3249/526 1368/3205/427 +f 1376/3219/411 1372/3212/411 1374/3215/411 1390/3251/411 +f 1375/3217/410 1376/3219/410 1390/3251/410 1389/3250/410 +f 1333/3140/429 1338/3149/429 1391/3252/429 1392/3254/429 +f 1335/3144/430 1318/3116/430 1393/3258/430 1394/3260/430 +f 1338/3148/503 1336/3145/502 1395/3261/527 1391/3253/528 +f 1336/3145/529 1335/3143/529 1394/3259/529 1395/3261/529 +f 1326/3130/363 1324/3128/363 1334/3141/363 1396/3262/363 +f 1323/3126/435 1337/3147/435 1338/3149/435 1333/3140/435 +f 1316/3113/530 1326/3130/530 1396/3262/436 1317/3114/437 +f 1321/3123/438 1315/3111/438 1318/3116/438 1335/3144/438 +f 1391/3253/528 1395/3261/527 1397/3263/531 1398/3264/532 +f 1395/3261/533 1394/3259/533 1399/3266/533 1397/3263/533 +f 1393/3256/459 1400/3270/459 1401/3271/459 1402/3272/459 +f 1403/3276/458 1392/3254/458 1404/3278/458 1405/3281/458 +f 1396/3262/428 1334/3141/428 1403/3275/428 1406/3284/428 +f 1317/3114/437 1396/3262/436 1406/3284/445 1400/3268/446 +f 1334/3142/447 1333/3140/447 1392/3254/447 1403/3276/447 +f 1318/3117/448 1317/3115/448 1400/3269/448 1393/3257/448 +f 1402/3272/451 1401/3271/451 1407/3286/451 1408/3288/451 +f 1405/3282/452 1404/3279/452 1409/3291/452 1410/3293/452 +f 1401/3271/453 1411/3294/454 1412/3295/455 1407/3286/456 +f 1411/3294/471 1405/3283/471 1410/3292/471 1412/3295/471 +f 1394/3260/441 1393/3258/441 1402/3273/441 1399/3265/441 +f 1392/3255/440 1391/3253/440 1398/3264/440 1404/3280/440 +f 1406/3285/457 1403/3277/457 1405/3283/457 1411/3294/457 +f 1400/3270/446 1406/3285/445 1411/3294/454 1401/3271/453 +f 1412/3295/462 1410/3292/462 1383/3235/463 1413/3296/463 +f 1409/3291/464 1414/3297/464 1377/3221/465 1384/3236/466 +f 1415/3299/534 1408/3289/534 1416/3301/534 1417/3302/534 +f 1414/3298/535 1418/3304/536 1378/3222/520 1377/3220/520 +f 1397/3263/537 1399/3266/537 1415/3300/537 1418/3304/537 +f 1398/3264/532 1397/3263/531 1418/3304/536 1414/3298/535 +f 1399/3267/538 1402/3274/538 1408/3289/538 1415/3299/538 +f 1404/3280/470 1398/3264/470 1414/3298/470 1409/3290/470 +f 1417/3302/539 1416/3301/539 1419/3305/539 1420/3307/539 +f 1373/3213/525 1371/3209/524 1421/3311/540 1387/3243/540 +f 1368/3205/427 1389/3249/526 1422/3314/476 1381/3228/476 +f 1416/3301/474 1423/3317/474 1424/3319/475 1419/3305/475 +f 1407/3286/456 1412/3295/455 1413/3296/461 1423/3318/461 +f 1410/3293/460 1409/3291/460 1384/3236/460 1383/3234/460 +f 1408/3289/477 1407/3287/477 1423/3317/474 1416/3301/474 +f 1418/3304/541 1415/3300/541 1417/3303/542 1378/3222/543 +f 1425/3322/482 1382/3231/483 1381/3229/482 1422/3315/483 +f 1388/3246/482 1425/3322/482 1422/3315/483 1426/3324/483 +f 1387/3244/482 1421/3312/482 1425/3323/482 1388/3247/482 +f 1421/3312/482 1427/3326/483 1382/3232/483 1425/3323/482 +f 1428/3328/484 1386/3240/484 1385/3237/485 1380/3226/485 +f 1420/3308/486 1428/3328/484 1380/3226/485 1379/3223/485 +f 1419/3306/487 1424/3320/487 1428/3329/484 1420/3309/486 +f 1424/3320/487 1429/3330/487 1386/3241/484 1428/3329/484 +f 1389/3250/488 1390/3251/488 1426/3325/488 1422/3316/488 +f 1423/3318/461 1413/3296/461 1429/3331/489 1424/3321/489 +f 1371/3210/490 1370/3208/490 1427/3327/490 1421/3313/490 +f 1378/3222/543 1417/3303/542 1420/3310/491 1379/3224/491 +f 1390/3251/492 1374/3215/492 1388/3248/492 1426/3325/492 +f 1413/3296/463 1383/3235/463 1386/3242/493 1429/3331/493 +f 1370/3208/494 1369/3207/494 1382/3233/494 1427/3327/494 +f 1384/3236/466 1377/3221/465 1380/3227/495 1385/3238/495 +o Top.004 +v 2.710481 0.800000 1.916251 +v 2.710481 0.700000 1.916251 +v 3.637584 0.800000 1.916251 +v 3.637584 0.700000 1.916251 +v 2.710482 0.800000 7.020643 +v 2.710482 0.700000 7.020643 +v 3.637584 0.800000 7.020643 +v 3.637584 0.700000 7.020643 +vn -0.0000 0.0500 -0.0000 +vn 0.4636 -0.0000 -0.0000 +vn -0.0000 -0.0000 2.5522 +vn -0.0000 -0.0500 -0.0000 +vn -0.0000 -0.0000 -2.5522 +vn -0.4636 -0.0000 -0.0000 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl Wood +f 1430/3332/544 1434/3336/544 1436/3340/544 1432/3334/544 +f 1433/3335/545 1432/3334/545 1436/3341/545 1437/3343/545 +f 1437/3344/546 1436/3342/546 1434/3337/546 1435/3339/546 +f 1435/3338/547 1431/3333/547 1433/3335/547 1437/3345/547 +f 1431/3333/548 1430/3332/548 1432/3334/548 1433/3335/548 +f 1435/3339/549 1434/3337/549 1430/3332/549 1431/3333/549 +o Chair.001 +v 3.658691 0.415382 4.956163 +v 3.658691 0.429951 4.956163 +v 3.672069 0.429951 5.003945 +v 3.780438 0.429951 5.391011 +v 3.793816 0.429951 5.438792 +v 3.793816 0.415382 5.438792 +v 3.780438 0.415382 5.391011 +v 3.672069 0.415382 5.003945 +v 3.423427 0.429951 5.542492 +v 3.423427 0.415382 5.542492 +v 3.423427 0.400812 5.542492 +v 3.411127 0.400812 5.498562 +v 3.780438 0.400812 5.391011 +v 3.793816 0.400812 5.438792 +v 3.288302 0.415382 5.059864 +v 3.288302 0.429951 5.059864 +v 3.300601 0.415382 5.103794 +v 3.300601 0.429951 5.103794 +v 3.288302 0.400812 5.059864 +v 3.300601 0.400812 5.103794 +v 3.658691 0.400812 4.956163 +v 3.672069 0.400812 5.003945 +v 3.812446 0.432961 5.412280 +v 3.808415 0.432961 5.397883 +v 3.804085 0.421009 5.399096 +v 3.808115 0.421009 5.413493 +v 3.816243 0.426967 5.395692 +v 3.820274 0.426967 5.410089 +v 3.686038 0.419106 4.969827 +v 3.690011 0.419106 4.984017 +v 3.702169 0.425064 4.980613 +v 3.698196 0.425064 4.966423 +v 3.690503 0.434699 4.968576 +v 3.694476 0.434699 4.982767 +v 3.822254 0.431853 5.394009 +v 3.826285 0.431853 5.408405 +v 3.708315 0.433592 4.978892 +v 3.704342 0.433592 4.964702 +v 3.716154 0.592772 4.961395 +v 3.702315 0.593879 4.965270 +v 3.824258 0.592141 5.408973 +v 3.820227 0.592141 5.394577 +v 3.838096 0.591033 5.405098 +v 3.855817 0.829840 5.400137 +v 3.841978 0.830948 5.404012 +v 3.733874 0.831579 4.956434 +v 3.720035 0.832686 4.960308 +v 3.834066 0.591033 5.390702 +v 3.706288 0.593879 4.979460 +v 3.720127 0.592772 4.975585 +v 3.832144 0.830737 5.406765 +v 3.838917 0.870951 5.380923 +v 3.830172 0.870348 5.383371 +v 3.714163 0.832325 4.977255 +v 3.710190 0.832325 4.963065 +v 3.720335 0.869634 4.984365 +v 3.724487 0.864490 5.000669 +v 3.851786 0.829840 5.385741 +v 3.693559 0.608202 4.967721 +v 3.724008 0.832686 4.974499 +v 3.737847 0.831579 4.970624 +v 3.837948 0.830948 5.389615 +v 3.851381 0.869953 5.377433 +v 3.815513 0.606614 5.411421 +v 3.811482 0.606614 5.397025 +v 3.828114 0.830737 5.392368 +v 3.697532 0.608202 4.981911 +v 3.729089 0.870373 4.981915 +v 3.733242 0.865229 4.998218 +v 3.745706 0.864232 4.994729 +v 3.813346 0.913073 5.312279 +v 3.821099 0.914244 5.309624 +v 3.751933 0.911897 5.051779 +v 3.743989 0.911148 5.053631 +v 3.846295 0.867524 5.359962 +v 3.833831 0.868521 5.363451 +v 3.817651 0.902898 5.300551 +v 3.831076 0.901824 5.296793 +v 3.825085 0.867919 5.365900 +v 3.741554 0.869376 4.978425 +v 3.753686 0.900855 5.061199 +v 3.767111 0.899781 5.057440 +v 3.765358 0.910823 5.048021 +v 3.834524 0.913170 5.305865 +v 3.745387 0.901346 5.061428 +v 3.809898 0.901727 5.303207 +v 3.411127 0.415382 5.498562 +v 3.411127 0.429951 5.498562 +v 3.609829 0.438060 5.492557 +v 3.611404 0.443651 5.498181 +v 3.737635 0.443651 5.462840 +v 3.736060 0.438060 5.457215 +v 3.736108 0.429976 5.457386 +v 3.767257 0.437950 5.448481 +v 3.764788 0.430300 5.449356 +v 3.615139 0.429903 5.511520 +v 3.615091 0.437987 5.511351 +v 3.488861 0.437987 5.546692 +v 3.488909 0.429903 5.546862 +v 3.487354 0.443828 5.541307 +v 3.456633 0.439408 5.549909 +v 3.460391 0.434055 5.554664 +v 3.611384 0.424135 5.498111 +v 3.613564 0.424311 5.505896 +v 3.487334 0.424311 5.541237 +v 3.485154 0.424135 5.533453 +v 3.613584 0.443828 5.505966 +v 3.485174 0.443651 5.533523 +v 3.741322 0.437987 5.476009 +v 3.739815 0.443828 5.470624 +v 3.609877 0.429976 5.492727 +v 3.483647 0.429976 5.528069 +v 3.737615 0.424135 5.462770 +v 3.739795 0.424311 5.470554 +v 3.463553 0.426646 5.553961 +v 3.464132 0.421521 5.547733 +v 3.454522 0.439247 5.542105 +v 3.462021 0.421360 5.539929 +v 3.458263 0.426713 5.535175 +v 3.741369 0.429903 5.476179 +v 3.772497 0.437881 5.467281 +v 3.772808 0.443408 5.461387 +v 3.764477 0.424773 5.455249 +v 3.766712 0.424940 5.463018 +v 3.770028 0.430231 5.468155 +v 3.483599 0.438060 5.527898 +v 3.792029 0.420977 5.441729 +v 3.790094 0.416357 5.448077 +v 3.792378 0.416497 5.455832 +v 3.797248 0.420919 5.460535 +v 3.801964 0.427313 5.459031 +v 3.770573 0.443241 5.453618 +v 3.820107 0.402967 5.454134 +v 3.826558 0.407418 5.452146 +v 3.796746 0.427371 5.440225 +v 3.821355 0.407458 5.433335 +v 3.814904 0.403008 5.435325 +v 3.803898 0.431932 5.452682 +v 3.829746 0.410634 5.445446 +v 3.801616 0.431793 5.444927 +v 3.827425 0.410537 5.437701 +v 3.838443 0.380352 5.428550 +v 3.830955 0.378323 5.430831 +v 3.843637 0.380334 5.447364 +v 3.847574 0.381800 5.440454 +v 3.845229 0.381756 5.432716 +v 3.811716 0.399792 5.442023 +v 3.814037 0.399889 5.449768 +v 3.862618 0.345795 5.436243 +v 3.860273 0.345756 5.428504 +v 3.827017 0.376856 5.437739 +v 3.845898 0.342751 5.426647 +v 3.841918 0.341467 5.433567 +v 3.836149 0.378304 5.449643 +v 3.829361 0.376901 5.445477 +v 3.844264 0.341506 5.441306 +v 3.851091 0.342735 5.445459 +v 3.388063 0.349401 5.554646 +v 3.395842 0.348454 5.552652 +v 3.356259 -0.002953 5.563733 +v 3.348480 -0.002007 5.565728 +v 3.858638 0.344511 5.443164 +v 3.942111 0.001491 5.419794 +v 3.946091 0.002774 5.412872 +v 3.386302 0.350077 5.569600 +v 3.384290 0.350056 5.561768 +v 3.344707 -0.001352 5.572850 +v 3.346719 -0.001331 5.580682 +v 3.929371 -0.000270 5.403275 +v 3.925391 -0.001553 5.410197 +v 3.853445 0.344527 5.424350 +v 3.426835 0.425574 5.558251 +v 3.432467 0.421603 5.562481 +v 3.455101 0.434122 5.535877 +v 3.427154 0.421652 5.543702 +v 3.424779 0.425454 5.550432 +v 3.440597 0.412305 5.554322 +v 3.438542 0.412185 5.546503 +v 3.432910 0.416156 5.542274 +v 3.406256 0.403231 5.549552 +v 3.402748 0.405075 5.556601 +v 3.422490 0.398698 5.559392 +v 3.420471 0.398640 5.551562 +v 3.413653 0.400566 5.547665 +v 3.438224 0.416106 5.561052 +v 3.405941 0.371230 5.555630 +v 3.398939 0.372479 5.551785 +v 3.418982 0.400542 5.566440 +v 3.404269 0.372464 5.570559 +v 3.407954 0.371267 5.563462 +v 3.404766 0.405133 5.564430 +v 3.387602 0.375406 5.560841 +v 3.389616 0.375443 5.568672 +v 3.411585 0.403207 5.568328 +v 3.396617 0.374194 5.572518 +v 3.393395 0.349392 5.573421 +v 3.401173 0.348446 5.571426 +v 3.391287 0.374209 5.553743 +v 3.402936 0.347770 5.556472 +v 3.404946 0.347791 5.564304 +v 3.365363 -0.003617 5.575386 +v 3.363352 -0.003637 5.567554 +v 3.936918 0.001507 5.400980 +v 3.361590 -0.002962 5.582508 +v 3.934564 -0.000286 5.422089 +v 3.935741 0.000611 5.411535 +v 3.927737 -0.001514 5.417935 +v 3.943746 0.002736 5.405134 +v 3.355036 -0.002484 5.574119 +v 3.353812 -0.002015 5.584503 +v 3.468678 0.438060 4.988400 +v 3.470252 0.443651 4.994025 +v 3.596483 0.443651 4.958684 +v 3.594908 0.438060 4.953059 +v 3.594956 0.429976 4.953228 +v 3.626106 0.437950 4.944324 +v 3.623636 0.430300 4.945199 +v 3.346182 0.424311 5.037081 +v 3.347757 0.429903 5.042706 +v 3.322401 0.426646 5.049805 +v 3.322980 0.421521 5.043577 +v 3.470232 0.424135 4.993955 +v 3.472412 0.424311 5.001740 +v 3.344003 0.424135 5.029296 +v 3.472432 0.443828 5.001810 +v 3.344022 0.443651 5.029367 +v 3.346202 0.443828 5.037151 +v 3.473939 0.437987 5.007195 +v 3.347709 0.437987 5.042536 +v 3.600170 0.437987 4.971853 +v 3.598663 0.443828 4.966468 +v 3.468725 0.429976 4.988570 +v 3.342495 0.429976 5.023911 +v 3.596463 0.424135 4.958613 +v 3.598643 0.424311 4.966398 +v 3.313370 0.439247 5.037949 +v 3.315481 0.439408 5.045753 +v 3.320869 0.421360 5.035773 +v 3.317111 0.426713 5.031018 +v 3.342448 0.438060 5.023742 +v 3.313949 0.434122 5.031721 +v 3.473987 0.429903 5.007364 +v 3.600218 0.429903 4.972023 +v 3.631346 0.437881 4.963125 +v 3.631656 0.443408 4.957231 +v 3.623326 0.424773 4.951093 +v 3.625560 0.424940 4.958862 +v 3.628876 0.430231 4.963999 +v 3.629422 0.443241 4.949462 +v 3.662747 0.431932 4.948526 +v 3.660464 0.431793 4.940771 +v 3.650877 0.420977 4.937572 +v 3.648943 0.416357 4.943920 +v 3.651226 0.416497 4.951676 +v 3.656096 0.420919 4.956378 +v 3.672885 0.399889 4.945612 +v 3.678955 0.402967 4.949978 +v 3.670564 0.399792 4.937867 +v 3.660812 0.427313 4.954875 +v 3.685407 0.407418 4.947989 +v 3.655594 0.427371 4.936069 +v 3.680203 0.407458 4.929178 +v 3.673752 0.403008 4.931168 +v 3.697291 0.380352 4.924394 +v 3.689803 0.378323 4.926674 +v 3.688595 0.410634 4.941289 +v 3.702485 0.380334 4.943208 +v 3.706422 0.381800 4.936298 +v 3.686273 0.410537 4.933545 +v 3.704078 0.381756 4.928560 +v 3.717487 0.344511 4.939007 +v 3.721466 0.345795 4.932086 +v 3.719121 0.345756 4.924348 +v 3.712293 0.344527 4.920194 +v 3.685866 0.376856 4.933583 +v 3.704746 0.342751 4.922490 +v 3.700767 0.341467 4.929411 +v 3.694997 0.378304 4.945487 +v 3.688210 0.376901 4.941321 +v 3.246911 0.349401 5.050490 +v 3.254690 0.348454 5.048495 +v 3.215107 -0.002953 5.059577 +v 3.207328 -0.002007 5.061572 +v 3.800959 0.001491 4.915637 +v 3.804940 0.002774 4.908716 +v 3.245150 0.350077 5.065444 +v 3.243139 0.350056 5.057612 +v 3.203556 -0.001352 5.068694 +v 3.205567 -0.001331 5.076526 +v 3.788219 -0.000270 4.899119 +v 3.784240 -0.001553 4.906041 +v 3.709939 0.342735 4.941303 +v 3.703112 0.341506 4.937150 +v 3.286002 0.421652 5.039546 +v 3.283628 0.425454 5.046276 +v 3.299445 0.412305 5.050166 +v 3.297390 0.412185 5.042347 +v 3.291758 0.416156 5.038116 +v 3.319239 0.434055 5.050508 +v 3.272501 0.400566 5.043508 +v 3.265105 0.403231 5.045396 +v 3.279319 0.398640 5.047406 +v 3.297072 0.416106 5.056896 +v 3.277830 0.400542 5.062284 +v 3.281339 0.398698 5.055236 +v 3.285683 0.425574 5.054095 +v 3.261596 0.405075 5.052444 +v 3.263615 0.405133 5.060274 +v 3.291315 0.421603 5.058325 +v 3.263118 0.372464 5.066403 +v 3.266803 0.371267 5.059306 +v 3.246450 0.375406 5.056684 +v 3.248464 0.375443 5.064516 +v 3.270433 0.403207 5.064172 +v 3.255466 0.374194 5.068362 +v 3.252244 0.349392 5.069264 +v 3.250135 0.374209 5.049587 +v 3.264789 0.371230 5.051475 +v 3.263794 0.347791 5.060148 +v 3.261783 0.347770 5.052316 +v 3.257787 0.372479 5.047627 +v 3.224211 -0.003617 5.071230 +v 3.222200 -0.003637 5.063398 +v 3.795767 0.001507 4.896823 +v 3.793413 -0.000286 4.917933 +v 3.260022 0.348446 5.067270 +v 3.220439 -0.002962 5.078352 +v 3.794590 0.000611 4.907378 +v 3.786585 -0.001514 4.913779 +v 3.802594 0.002736 4.900978 +v 3.213884 -0.002484 5.069962 +v 3.212661 -0.002015 5.080347 +vn 0.9630 -0.0000 -0.2696 +vn 0.2696 -0.0000 0.9630 +vn -0.0000 -1.0000 -0.0000 +vn -0.2696 -0.0000 -0.9630 +vn -0.9630 -0.0000 0.2696 +vn -0.1147 0.9929 0.0321 +vn 0.2538 -0.9646 -0.0711 +vn 0.4110 -0.9044 -0.1151 +vn 0.2912 -0.0911 -0.9523 +vn 0.1562 -0.9868 -0.0437 +vn -0.1651 0.9852 0.0462 +vn 0.7195 -0.0779 0.6901 +vn 0.8469 -0.1146 0.5192 +vn 0.4132 -0.0987 -0.9053 +vn 0.5936 -0.7874 -0.1662 +vn 0.7710 -0.5992 -0.2159 +vn -0.9601 0.0768 0.2688 +vn 0.9601 -0.0768 -0.2688 +vn 0.3278 -0.2916 0.8986 +vn 0.2126 0.5027 0.8379 +vn -0.9586 0.1047 0.2650 +vn -0.9558 0.1119 0.2720 +vn -0.9562 0.1062 0.2727 +vn 0.9544 -0.0656 0.2912 +vn 0.2707 0.4967 0.8247 +vn -0.9608 0.0768 0.2665 +vn -0.8130 -0.5359 0.2276 +vn -0.2577 0.5287 -0.8088 +vn 0.1676 -0.6113 0.7734 +vn -0.5027 -0.8531 0.1395 +vn -0.8159 -0.5326 0.2251 +vn -0.8161 -0.5337 0.2219 +vn -0.8157 -0.5315 0.2284 +vn -0.1150 0.9931 0.0226 +vn -0.1577 0.9648 -0.2103 +vn -0.1618 0.9584 -0.2353 +vn -0.1915 -0.8811 -0.4323 +vn 0.1049 -0.8634 -0.4935 +vn 0.5385 -0.7743 -0.3324 +vn -0.2634 -0.5705 -0.7779 +vn 0.6800 -0.3669 -0.6349 +vn 0.6242 -0.3997 -0.6713 +vn 0.9613 -0.0465 -0.2715 +vn -0.9579 0.1108 0.2649 +vn -0.9580 0.1116 0.2640 +vn 0.9612 -0.0794 -0.2641 +vn -0.1909 0.5223 -0.8311 +vn 0.9638 -0.0401 -0.2636 +vn -0.9578 0.1101 0.2656 +vn 0.9634 -0.0584 -0.2617 +vn 0.6325 -0.7742 0.0241 +vn 0.9611 -0.0813 -0.2641 +vn 0.9593 -0.0847 -0.2695 +vn 0.9633 -0.0769 -0.2573 +vn 0.2007 0.8588 0.4713 +vn 0.0019 0.9633 -0.2684 +vn 0.0718 0.9970 -0.0283 +vn 0.0016 0.9630 -0.2693 +vn 0.0635 0.8610 0.5047 +vn -0.9594 0.0845 0.2690 +vn -0.9612 0.0831 0.2629 +vn -0.9618 0.0796 0.2618 +vn -0.9632 0.0778 0.2573 +vn 0.0630 -0.8773 0.4758 +vn -0.0046 -0.9658 0.2594 +vn -0.9574 0.0880 0.2750 +vn 0.9572 -0.0886 -0.2755 +vn -0.0687 0.8673 -0.4930 +vn -0.1945 0.8695 -0.4540 +vn -0.9601 0.0744 0.2694 +vn -0.9616 0.0849 0.2610 +vn -0.0720 -0.9970 0.0277 +vn 0.9599 -0.0732 -0.2706 +vn -0.9598 0.0723 0.2711 +vn -0.0000 1.0000 -0.0000 +vn -0.1864 0.7224 -0.6659 +vn -0.1824 0.7268 -0.6621 +vn -0.1824 0.7269 -0.6621 +vn -0.2695 -0.0225 -0.9627 +vn -0.2698 -0.0215 -0.9627 +vn -0.2758 -0.0204 -0.9610 +vn 0.2695 0.0218 0.9627 +vn 0.2682 0.0219 0.9631 +vn 0.2681 0.0219 0.9631 +vn 0.1017 0.6937 0.7130 +vn 0.0059 -0.9998 0.0210 +vn -0.0059 0.9998 -0.0211 +vn 0.1947 0.6915 0.6956 +vn 0.1962 0.6962 0.6905 +vn -0.0000 0.9997 -0.0224 +vn -0.1948 -0.6915 -0.6956 +vn 0.2678 -0.7257 0.6337 +vn -0.1378 0.9903 0.0165 +vn -0.1121 -0.6955 -0.7097 +vn 0.1864 -0.7223 0.6659 +vn 0.2695 0.0221 0.9627 +vn 0.1976 0.7008 0.6854 +vn 0.0275 -0.9995 0.0142 +vn 0.2761 0.0214 0.9609 +vn 0.2699 0.0224 0.9626 +vn -0.3999 -0.6683 -0.6273 +vn -0.0336 -0.6972 0.7161 +vn -0.2849 -0.9532 0.1017 +vn 0.2825 0.0183 0.9591 +vn 0.2770 0.0214 0.9606 +vn 0.0059 0.9997 -0.0238 +vn 0.1952 -0.7326 0.6521 +vn -0.1784 0.7313 -0.6584 +vn -0.1807 -0.7022 -0.6887 +vn 0.2877 0.0132 0.9576 +vn 0.2834 0.0178 0.9588 +vn -0.2820 -0.0175 -0.9592 +vn -0.2766 -0.0205 -0.9608 +vn -0.2827 -0.0172 -0.9591 +vn -0.2870 -0.0124 -0.9579 +vn 0.6095 0.5509 0.5701 +vn 0.2513 0.5748 -0.7787 +vn 0.3166 0.9421 -0.1107 +vn 0.0490 0.6901 -0.7220 +vn 0.4156 0.6614 0.6244 +vn -0.2873 -0.0119 -0.9578 +vn -0.2886 -0.0090 -0.9574 +vn 0.7586 0.3812 0.5283 +vn 0.4070 0.3978 -0.8223 +vn 0.8043 0.5403 -0.2473 +vn -0.5660 -0.8044 0.1804 +vn -0.2390 -0.5868 0.7736 +vn -0.5968 -0.5625 -0.5722 +vn 0.5926 0.7833 -0.1879 +vn 0.8774 0.3980 -0.2680 +vn -0.8084 -0.2790 -0.5183 +vn -0.4572 -0.2912 0.8403 +vn -0.8763 -0.4005 0.2677 +vn 0.2892 0.0092 0.9572 +vn 0.2879 0.0122 0.9576 +vn -0.7858 -0.5692 0.2420 +vn -0.3990 -0.4135 0.8184 +vn -0.7502 -0.3964 -0.5293 +vn -0.2486 -0.0027 -0.9686 +vn -0.2487 -0.0025 -0.9686 +vn 0.8404 0.1694 0.5147 +vn -0.9621 0.1162 0.2467 +vn -0.8405 -0.1695 -0.5147 +vn 0.4576 0.2899 -0.8406 +vn 0.8089 0.2777 0.5183 +vn -0.2881 -0.0080 -0.9576 +vn -0.2891 -0.0055 -0.9573 +vn 0.2899 0.0054 0.9570 +vn 0.2895 0.0070 0.9572 +vn -0.0825 0.6472 0.7579 +vn -0.4672 0.6748 -0.5713 +vn 0.3449 -0.9356 -0.0752 +vn -0.2665 -0.0216 -0.9636 +vn -0.2615 -0.0207 -0.9650 +vn -0.2558 -0.0182 -0.9666 +vn -0.2607 -0.0205 -0.9652 +vn -0.2788 0.7239 -0.6311 +vn 0.2664 0.0227 0.9636 +vn 0.2613 0.0218 0.9650 +vn 0.1163 -0.9932 -0.0105 +vn -0.2668 -0.0222 -0.9635 +vn -0.6513 0.5630 -0.5088 +vn 0.5692 -0.8103 -0.1390 +vn -0.2513 -0.0112 -0.9679 +vn -0.2548 -0.0173 -0.9668 +vn 0.2344 -0.5801 -0.7801 +vn 0.2605 0.0211 0.9652 +vn 0.2555 0.0187 0.9666 +vn -0.3984 0.9128 0.0898 +vn 0.4399 -0.6896 0.5753 +vn 0.0581 -0.6617 -0.7475 +vn 0.4002 -0.3366 -0.8523 +vn 0.8019 -0.3512 0.4833 +vn -0.8564 0.4682 0.2177 +vn 0.2509 0.0114 0.9680 +vn 0.2545 0.0175 0.9669 +vn 0.2503 0.0104 0.9681 +vn 0.2485 0.0032 0.9686 +vn -0.2652 0.5405 0.7984 +vn -0.6461 0.7463 0.1597 +vn 0.6138 -0.6033 0.5092 +vn -0.9599 0.1344 0.2462 +vn 0.2487 0.0027 0.9686 +vn -0.4659 0.0928 0.8799 +vn -0.4663 0.0866 0.8804 +vn -0.8762 0.0969 -0.4722 +vn -0.8768 0.0905 -0.4723 +vn -0.8768 0.0904 -0.4723 +vn -0.2495 -0.0030 -0.9684 +vn -0.2513 -0.0100 -0.9679 +vn 0.8492 -0.4821 -0.2157 +vn -0.8051 0.3437 -0.4833 +vn -0.4029 0.3294 0.8539 +vn 0.9621 -0.1162 -0.2467 +vn -0.2899 -0.0053 -0.9570 +vn 0.8769 -0.0898 0.4723 +vn 0.8773 -0.0839 0.4725 +vn 0.2899 0.0053 0.9571 +vn 0.8764 -0.0956 0.4721 +vn 0.4660 -0.0916 -0.8800 +vn 0.4663 -0.0860 -0.8804 +vn 0.4664 -0.0859 -0.8804 +vn 0.9602 -0.1319 -0.2461 +vn 0.2116 -0.9756 -0.0592 +vn 0.2116 -0.9756 -0.0593 +vn -0.1128 -0.9931 0.0316 +vn -0.1127 -0.9931 0.0316 +vn -0.1128 -0.9931 0.0315 +vn -0.4881 -0.1770 0.8546 +vn 0.2487 0.0025 0.9686 +vn 0.4881 0.1770 -0.8546 +vn 0.4667 -0.0803 -0.8808 +vn -0.9275 -0.2449 0.2823 +vn -0.4667 0.0803 0.8808 +vn 0.9275 0.2449 -0.2823 +vn -0.8773 0.0839 -0.4725 +vn -0.2695 -0.0221 -0.9627 +vn -0.2699 -0.0224 -0.9626 +vn -0.2762 -0.0214 -0.9609 +vn -0.1947 -0.6915 -0.6956 +vn -0.1121 -0.6956 -0.7097 +vn -0.2682 -0.0219 -0.9631 +vn -0.2681 -0.0219 -0.9631 +vn -0.2613 -0.0218 -0.9650 +vn -0.2662 -0.0228 -0.9636 +vn 0.2695 0.0224 0.9628 +vn -0.2695 -0.0218 -0.9627 +vn -0.3999 -0.6683 -0.6272 +vn -0.1806 -0.7023 -0.6886 +vn -0.2825 -0.0183 -0.9591 +vn -0.2770 -0.0214 -0.9606 +vn -0.2834 -0.0178 -0.9588 +vn -0.2877 -0.0131 -0.9576 +vn -0.2879 -0.0123 -0.9576 +vn -0.2892 -0.0092 -0.9572 +vn -0.5968 -0.5626 -0.5721 +vn 0.5926 0.7833 -0.1880 +vn 0.8089 0.2777 0.5182 +vn -0.8085 -0.2790 -0.5182 +vn 0.2892 0.0091 0.9572 +vn 0.2879 0.0123 0.9576 +vn -0.7502 -0.3964 -0.5292 +vn -0.2487 -0.0027 -0.9686 +vn 0.8405 0.1695 0.5147 +vn -0.2895 -0.0070 -0.9572 +vn -0.2904 -0.0057 -0.9569 +vn 0.2899 0.0055 0.9570 +vn -0.2555 -0.0187 -0.9666 +vn -0.2605 -0.0210 -0.9652 +vn 0.0581 -0.6618 -0.7475 +vn 0.2668 0.0221 0.9635 +vn -0.2508 -0.0114 -0.9680 +vn -0.2545 -0.0176 -0.9669 +vn 0.2345 -0.5802 -0.7800 +vn 0.9602 -0.1319 -0.2463 +vn -0.2503 -0.0104 -0.9681 +vn -0.2485 -0.0032 -0.9686 +vn 0.4003 -0.3367 -0.8523 +vn 0.8491 -0.4821 -0.2158 +vn -0.2899 -0.0053 -0.9571 +vn 0.4662 -0.0916 -0.8799 +vn 0.4665 -0.0860 -0.8804 +vn 0.4665 -0.0859 -0.8804 +vn 0.4667 -0.0803 -0.8807 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt 0.686647 0.000000 +vt 0.870176 0.996278 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.782584 0.965408 +vt 0.870573 0.970227 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.833010 0.965282 +vt 0.908785 0.026051 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.968598 0.070112 +vt 0.979071 0.026051 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.968598 0.371019 +vt 0.757324 0.262250 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.173427 0.241164 +vt 0.758439 0.080128 +vt -0.973130 0.033128 +vt -0.123087 0.241439 +vt 0.978437 0.000000 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt 0.737072 0.000128 +vt 0.908263 0.000000 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.409642 -0.009898 +vt 0.677629 0.482142 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.240570 0.058726 +vt 0.669677 0.481452 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.786789 0.246652 +vt 0.991724 0.699406 +vt 0.928489 0.277215 +vt 0.873308 0.505274 +vt 0.786789 0.155990 +vt 0.958960 0.029326 +vt 0.991724 0.483440 +vt 0.977373 0.702462 +vt -0.140978 0.246673 +vt 0.958492 0.010078 +vt -0.156145 0.246590 +vt 0.929566 0.080357 +vt -0.144664 0.252235 +vt 0.984385 0.731379 +vt 0.945934 0.020741 +vt -0.159831 0.252152 +vt 0.984385 0.500820 +vt 0.989649 0.087406 +vt 0.706860 0.007022 +vt 0.847263 0.989602 +vt 0.686599 0.714388 +vt 0.721837 0.007060 +vt 0.884682 0.006674 +vt 0.720919 0.017861 +vt 0.673632 0.527027 +vt 0.872079 0.017335 +vt 0.705942 0.017823 +vt 0.673632 0.731676 +vt 0.690157 0.523535 +vt 0.802894 0.958412 +vt 0.847659 0.963551 +vt 0.695298 0.714388 +vt 0.661237 0.495044 +vt 0.817871 0.958374 +vt 0.885205 0.032725 +vt 0.661237 0.722645 +vt 0.693293 0.503638 +vt 0.944329 0.029337 +vt 0.981154 0.731379 +vt 0.977373 0.486830 +vt 0.989649 0.263822 +vt 0.873305 0.723869 +vt 0.981154 0.500820 +vt 0.870573 0.032734 +vt 0.693293 0.761173 +vt 0.679412 0.527027 +vt 0.695298 0.493838 +vt 0.679412 0.731676 +vt 0.826600 0.493835 +vt 0.826977 0.731673 +vt 0.826600 0.714385 +vt 0.814491 0.495042 +vt 0.122435 0.638558 +vt 0.015922 0.839080 +vt 0.835047 0.699404 +vt 0.993361 0.510073 +vt 0.758428 0.504317 +vt 0.072861 0.638558 +vt 0.015474 0.619132 +vt 0.835047 0.483438 +vt 0.845328 0.702461 +vt 0.015197 0.626266 +vt 0.014109 0.491099 +vt 0.993356 0.728667 +vt 0.758425 0.722912 +vt 0.833436 0.500823 +vt 0.891028 0.725398 +vt 0.672547 0.500827 +vt 0.752235 0.729690 +vt 0.667246 0.727168 +vt 0.891033 0.506802 +vt 0.752238 0.507120 +vt 0.071993 0.783837 +vt 0.969610 0.493832 +vt 0.987699 0.731670 +vt 0.641343 0.509140 +vt 0.689355 0.726560 +vt 0.969610 0.714382 +vt 0.122436 0.783837 +vt 0.641344 0.743247 +vt 0.833436 0.731382 +vt 0.845328 0.486829 +vt 0.814491 0.722643 +vt 0.825052 0.503733 +vt 0.016195 0.832047 +vt 0.634466 0.494220 +vt 0.825052 0.761267 +vt 0.826977 0.527024 +vt 0.022424 0.783234 +vt 0.035852 0.889154 +vt 0.043016 0.971597 +vt 0.706398 0.505224 +vt 0.072863 0.808180 +vt 0.028940 0.807392 +vt 0.010039 0.882150 +vt 0.137154 0.974703 +vt 0.631023 0.892124 +vt 0.649326 0.890699 +vt 0.121379 0.984023 +vt 0.648470 0.892315 +vt 0.072864 0.783142 +vt 0.043889 0.943476 +vt 0.078385 0.805896 +vt 0.075977 0.941215 +vt 0.613560 0.946909 +vt 0.672547 0.731385 +vt 0.701510 0.486829 +vt 0.669481 0.490576 +vt 0.072863 0.646796 +vt 0.648470 0.506013 +vt 0.080915 0.841605 +vt 0.968560 0.503835 +vt 0.102906 0.865583 +vt 0.634467 0.887149 +vt 0.987699 0.527021 +vt 0.968560 0.761369 +vt 0.690090 0.495972 +vt 0.701510 0.702461 +vt 0.603150 0.865583 +vt 0.014109 0.884028 +vt 0.706395 0.729929 +vt 0.816556 0.714481 +vt 0.023239 0.646888 +vt 0.040534 0.495932 +vt 0.081188 0.621686 +vt 0.007711 0.495744 +vt 0.041481 0.497122 +vt 0.080911 0.628820 +vt 0.003028 0.888966 +vt 0.041481 0.887645 +vt 0.060838 0.971173 +vt 0.631023 0.505822 +vt 0.649326 0.500176 +vt 0.081188 0.834572 +vt 0.805889 0.743046 +vt 0.122312 0.806766 +vt 0.988155 0.503653 +vt 0.115555 0.935422 +vt 0.904138 0.912557 +vt 0.988155 0.735605 +vt 0.813022 0.494763 +vt 0.890960 0.912565 +vt 0.735836 0.641861 +vt 0.693936 0.468644 +vt 0.027417 0.833361 +vt 0.420996 0.961603 +vt 0.032040 0.784613 +vt 0.284612 0.483847 +vt 0.656925 0.504187 +vt 0.681549 0.720168 +vt 0.066750 0.834450 +vt 0.299225 0.449509 +vt 0.999708 0.720167 +vt 0.989627 0.743247 +vt 0.121899 0.832034 +vt 0.693936 0.449159 +vt 0.420996 0.999935 +vt 0.008277 0.862094 +vt 0.082562 0.831201 +vt 0.741580 0.718717 +vt 0.678836 0.505353 +vt 0.815743 0.487362 +vt 0.741523 0.585977 +vt 0.678836 0.699564 +vt 0.553315 0.945729 +vt 0.982243 0.588758 +vt 0.460393 1.018433 +vt 0.949871 0.788878 +vt 0.982305 0.727355 +vt 0.668954 0.502598 +vt 0.949657 0.691167 +vt 0.979056 0.490574 +vt 0.078628 0.952623 +vt 0.035428 0.887064 +vt 0.812426 0.730862 +vt 0.971935 0.642457 +vt 0.805889 0.532195 +vt 0.173975 1.012235 +vt 0.908785 0.976444 +vt 0.726484 0.788878 +vt 0.984477 0.500479 +vt 0.894591 0.976453 +vt 0.737043 0.505375 +vt 0.726270 0.691167 +vt 0.987420 0.694407 +vt 0.999899 0.506981 +vt 0.968797 0.500648 +vt 0.989626 0.516135 +vt 0.652223 0.697892 +vt 0.656922 0.730164 +vt 0.681740 0.506981 +vt 0.985798 0.713641 +vt 0.053549 0.993732 +vt 0.043551 0.873068 +vt 0.522988 0.991572 +vt 0.062665 0.961706 +vt 0.169656 0.991799 +vt 0.060838 0.809705 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +s 1 +usemtl Material.063 +f 1438/3347/550 1439/3351/550 1440/3356/550 1441/3360/550 1442/3364/550 1443/3370/550 1444/3373/550 1445/3376/550 +f 1443/3369/551 1442/3365/551 1446/3380/551 1447/3383/551 +f 1448/3385/552 1449/3389/552 1450/3391/552 1451/3392/552 +f 1452/3396/553 1453/3397/553 1439/3352/553 1438/3346/553 +f 1453/3398/554 1452/3395/554 1454/3400/554 1455/3401/554 +f 1456/3403/554 1457/3406/554 1454/3400/554 1452/3395/554 +f 1456/3404/553 1452/3396/553 1438/3346/553 1458/3408/553 +f 1451/3393/551 1443/3369/551 1447/3383/551 1448/3386/551 +f 1458/3409/550 1438/3347/550 1445/3376/550 1444/3373/550 1443/3370/550 1451/3394/550 1450/3390/550 1459/3412/550 +f 1441/3361/555 1442/3366/555 1460/3415/555 1461/3419/555 +f 1451/3394/550 1450/3390/550 1444/3373/550 1443/3370/550 +f 1445/3377/554 1438/3348/554 1458/3410/554 1459/3413/554 +f 1443/3371/556 1444/3374/556 1462/3423/556 1463/3425/556 +f 1463/3425/557 1462/3423/557 1464/3427/557 1465/3430/557 +f 1466/3433/557 1469/3441/557 1468/3438/557 1467/3436/557 +f 1444/3375/558 1441/3362/558 1461/3420/558 1462/3424/558 +f 1438/3349/559 1466/3433/559 1467/3436/559 1445/3378/559 +f 1440/3357/560 1471/3448/560 1470/3444/560 1439/3353/560 +f 1445/3379/561 1467/3437/561 1471/3449/561 1440/3358/561 +f 1442/3367/562 1443/3372/562 1463/3426/562 1460/3417/562 +f 1439/3354/563 1470/3445/563 1466/3434/563 1438/3350/563 +f 1465/3431/564 1464/3428/564 1472/3453/564 1473/3457/564 +f 1474/3460/565 1468/3439/565 1469/3442/565 1475/3462/565 +f 1470/3446/553 1477/3465/553 1476/3463/553 1475/3461/553 +f 1462/3424/553 1461/3420/553 1472/3452/553 1464/3429/553 +f 1461/3421/566 1460/3416/566 1478/3469/566 1479/3474/566 +f 1470/3446/553 1475/3461/553 1469/3443/553 1466/3435/553 +f 1460/3417/551 1463/3426/551 1465/3432/551 1473/3455/551 +f 1467/3437/551 1468/3440/551 1474/3458/551 1471/3449/551 +f 1478/3470/551 1480/3478/551 1481/3481/551 1482/3485/551 +f 1477/3465/553 1484/3492/553 1483/3488/553 1476/3463/553 +f 1460/3418/551 1473/3456/551 1480/3479/551 1478/3471/551 +f 1473/3457/567 1472/3453/567 1485/3495/567 1480/3480/567 +f 1471/3450/566 1486/3497/566 1477/3466/566 1470/3447/566 +f 1474/3459/551 1487/3501/551 1486/3498/568 1471/3451/551 +f 1475/3462/567 1476/3464/567 1487/3502/567 1474/3460/567 +f 1472/3454/553 1461/3422/553 1479/3475/553 1485/3496/553 +f 1488/3503/569 1482/3487/569 1489/3507/569 1490/3508/569 +f 1491/3510/570 1494/3518/571 1493/3516/572 1492/3513/572 +f 1480/3480/567 1485/3495/567 1495/3520/567 1481/3482/567 +f 1477/3467/553 1496/3523/553 1492/3515/553 1484/3493/553 +f 1487/3501/551 1498/3530/551 1497/3526/573 1486/3498/568 +f 1485/3496/553 1479/3475/553 1499/3532/553 1495/3521/553 +f 1476/3464/567 1483/3489/567 1498/3529/567 1487/3502/567 +f 1482/3486/574 1481/3483/574 1500/3535/574 1489/3506/574 +f 1478/3472/551 1482/3487/551 1488/3503/551 1501/3537/551 +f 1502/3540/575 1501/3538/566 1488/3504/566 1503/3543/575 +f 1504/3546/575 1491/3511/575 1492/3514/566 1496/3524/566 +f 1502/3541/575 1503/3544/575 1491/3512/575 1504/3547/575 +f 1486/3499/576 1504/3548/576 1496/3525/576 1477/3468/576 +f 1492/3515/577 1493/3517/577 1505/3550/577 1484/3493/577 +f 1498/3530/578 1507/3554/578 1506/3551/578 1497/3526/578 +f 1479/3476/579 1502/3542/580 1504/3548/581 1486/3499/568 +f 1479/3476/579 1478/3473/582 1501/3539/582 1502/3542/580 +f 1508/3558/583 1509/3562/583 1510/3566/584 1511/3570/585 +f 1512/3574/586 1513/3577/587 1514/3580/588 1515/3583/586 +f 1495/3521/589 1499/3532/590 1513/3578/591 1512/3575/589 +f 1481/3484/592 1495/3522/592 1512/3576/592 1500/3536/592 +f 1503/3544/593 1516/3587/594 1494/3519/571 1491/3512/570 +f 1497/3527/573 1506/3552/595 1513/3579/591 1499/3533/590 +f 1484/3494/596 1505/3549/596 1517/3591/596 1483/3490/596 +f 1483/3491/597 1517/3589/597 1507/3555/597 1498/3531/597 +f 1503/3545/593 1488/3505/598 1490/3509/598 1516/3588/594 +f 1506/3552/599 1518/3592/600 1514/3581/588 1513/3579/587 +f 1519/3595/601 1520/3599/602 1521/3603/603 1515/3584/603 +f 1489/3506/604 1500/3535/604 1521/3604/604 1509/3563/604 +f 1510/3567/605 1509/3564/606 1521/3605/606 1520/3600/607 +f 1490/3508/608 1489/3507/608 1509/3565/608 1508/3559/608 +f 1511/3571/609 1522/3607/610 1523/3610/611 1508/3560/612 +f 1507/3556/613 1519/3596/614 1518/3593/600 1506/3553/613 +f 1494/3518/615 1522/3608/610 1511/3572/609 1493/3516/615 +f 1517/3590/616 1520/3601/602 1519/3597/601 1507/3557/616 +f 1505/3549/617 1510/3568/605 1520/3602/607 1517/3591/617 +f 1493/3517/618 1511/3573/585 1510/3569/584 1505/3550/618 +f 1516/3587/619 1523/3611/611 1522/3609/610 1494/3519/620 +f 1519/3598/614 1515/3585/621 1514/3582/588 1518/3594/600 +f 1500/3536/622 1512/3576/622 1515/3586/622 1521/3606/622 +f 1516/3588/619 1490/3509/623 1508/3561/623 1523/3612/611 +f 1455/3401/554 1454/3400/554 1524/3613/554 1525/3614/554 +f 1447/3384/554 1446/3381/554 1525/3614/554 1524/3613/554 +f 1524/3613/554 1454/3400/554 1457/3406/554 1449/3388/554 +f 1449/3388/554 1448/3387/554 1447/3384/554 1524/3613/554 +f 1453/3399/624 1455/3402/624 1440/3359/624 1439/3355/624 +f 1441/3363/624 1525/3615/624 1446/3382/624 1442/3368/624 +f 1440/3359/624 1455/3402/624 1525/3615/624 1441/3363/624 +f 1459/3414/552 1457/3407/552 1456/3405/552 1458/3411/552 +f 1450/3391/552 1449/3389/552 1457/3407/552 1459/3414/552 +f 1499/3534/590 1479/3477/579 1486/3500/568 1497/3528/573 +f 1526/3616/625 1527/3617/625 1528/3618/626 1529/3620/627 +f 1530/3621/628 1529/3619/628 1531/3624/629 1532/3626/630 +f 1533/3628/631 1534/3629/631 1535/3630/632 1536/3632/633 +f 1535/3630/634 1537/3633/634 1538/3635/634 1539/3637/634 +f 1540/3639/635 1541/3640/635 1542/3641/635 1543/3643/635 +f 1544/3645/636 1527/3617/636 1545/3646/636 1537/3634/636 +f 1534/3629/637 1544/3644/637 1537/3633/637 1535/3630/637 +f 1546/3647/638 1547/3648/638 1544/3644/637 1534/3629/637 +f 1547/3649/639 1528/3618/639 1527/3617/636 1544/3645/636 +f 1548/3650/640 1540/3638/640 1543/3642/640 1549/3651/640 +f 1530/3622/640 1550/3654/640 1540/3638/640 1548/3650/640 +f 1550/3653/635 1551/3655/635 1541/3640/635 1540/3639/635 +f 1542/3641/641 1536/3631/641 1552/3657/641 1553/3658/641 +f 1537/3634/642 1545/3646/642 1554/3659/642 1538/3636/642 +f 1549/3651/643 1543/3642/643 1555/3661/643 1556/3663/643 +f 1541/3640/644 1533/3627/644 1536/3631/644 1542/3641/644 +f 1551/3655/644 1557/3665/644 1533/3627/644 1541/3640/644 +f 1557/3664/645 1546/3647/645 1534/3629/631 1533/3628/631 +f 1547/3648/638 1546/3647/638 1558/3666/646 1559/3668/646 +f 1551/3655/647 1550/3653/647 1560/3669/647 1561/3671/647 +f 1546/3647/645 1557/3664/645 1562/3672/648 1558/3666/649 +f 1563/3674/625 1545/3646/625 1527/3617/625 1526/3616/625 +f 1560/3670/650 1532/3625/650 1564/3677/650 1565/3679/650 +f 1562/3673/651 1561/3671/651 1566/3680/651 1567/3682/651 +f 1561/3671/652 1560/3669/652 1565/3678/652 1566/3680/652 +f 1558/3666/649 1562/3672/648 1567/3683/653 1568/3684/654 +f 1528/3618/639 1547/3649/639 1559/3667/655 1569/3685/655 +f 1557/3665/656 1551/3655/656 1561/3671/656 1562/3673/656 +f 1529/3620/627 1528/3618/626 1569/3685/657 1531/3623/657 +f 1550/3654/658 1530/3622/658 1532/3625/658 1560/3670/658 +f 1568/3684/654 1567/3683/653 1570/3686/659 1571/3687/660 +f 1564/3677/661 1572/3688/662 1573/3691/663 1574/3692/664 +f 1575/3693/665 1568/3684/665 1571/3687/665 1576/3695/665 +f 1572/3688/666 1577/3698/666 1578/3700/666 1573/3691/666 +f 1569/3685/667 1559/3667/667 1575/3694/667 1577/3699/667 +f 1531/3623/668 1569/3685/668 1577/3699/668 1572/3689/668 +f 1559/3668/669 1558/3666/669 1568/3684/669 1575/3693/669 +f 1532/3626/630 1531/3624/629 1572/3690/662 1564/3676/661 +f 1574/3692/664 1573/3691/663 1579/3704/670 1580/3705/671 +f 1576/3695/672 1571/3687/672 1581/3706/672 1582/3708/672 +f 1573/3691/673 1578/3700/673 1583/3709/673 1579/3704/673 +f 1578/3701/674 1576/3696/674 1582/3707/674 1583/3710/674 +f 1566/3680/675 1565/3678/675 1584/3711/675 1585/3714/675 +f 1567/3683/676 1566/3681/676 1585/3716/676 1570/3686/676 +f 1565/3679/677 1564/3677/677 1574/3692/677 1584/3713/677 +f 1577/3699/678 1575/3694/678 1576/3697/678 1578/3702/678 +f 1583/3710/679 1582/3707/679 1586/3718/679 1587/3719/679 +f 1588/3721/680 1580/3705/680 1589/3722/680 1590/3723/680 +f 1591/3725/681 1592/3727/681 1593/3729/681 1594/3731/681 +f 1592/3727/682 1588/3720/682 1590/3724/682 1593/3729/682 +f 1571/3687/660 1570/3686/659 1591/3726/683 1581/3706/684 +f 1585/3715/685 1584/3712/685 1588/3720/685 1592/3727/685 +f 1570/3686/686 1585/3716/686 1592/3728/686 1591/3726/686 +f 1584/3713/687 1574/3692/687 1580/3705/687 1588/3721/687 +f 1595/3732/688 1596/3734/688 1597/3736/689 1598/3737/689 +f 1586/3717/690 1599/3740/690 1600/3741/690 1601/3743/690 +f 1602/3746/691 1603/3748/691 1604/3750/691 1605/3751/691 +f 1590/3723/692 1589/3722/692 1606/3754/692 1607/3756/692 +f 1579/3703/693 1583/3710/693 1587/3719/693 1608/3760/693 +f 1582/3708/694 1581/3706/694 1599/3740/694 1586/3717/694 +f 1580/3705/671 1579/3704/670 1608/3759/695 1589/3722/696 +f 1581/3706/684 1591/3726/683 1594/3730/697 1599/3740/698 +f 1539/3637/699 1538/3635/699 1609/3761/699 1610/3763/699 +f 1554/3659/700 1611/3764/700 1612/3766/700 1613/3770/700 +f 1555/3660/701 1553/3658/701 1614/3771/701 1615/3773/701 +f 1611/3765/702 1556/3662/703 1616/3775/704 1612/3767/705 +f 1545/3646/706 1563/3674/706 1611/3764/706 1554/3659/706 +f 1536/3632/633 1535/3630/632 1539/3637/707 1552/3656/708 +f 1543/3643/709 1542/3641/709 1553/3658/709 1555/3660/709 +f 1563/3675/710 1549/3652/710 1556/3662/703 1611/3765/702 +f 1613/3769/711 1612/3768/711 1617/3777/711 1618/3780/711 +f 1615/3773/712 1614/3771/712 1619/3781/712 1620/3784/712 +f 1612/3768/705 1616/3776/704 1621/3787/713 1617/3777/714 +f 1616/3776/715 1615/3774/715 1620/3785/715 1621/3787/715 +f 1552/3656/708 1539/3637/707 1610/3763/716 1622/3789/717 +f 1538/3636/718 1554/3659/718 1613/3770/718 1609/3762/718 +f 1553/3658/719 1552/3657/719 1622/3788/719 1614/3771/719 +f 1556/3663/720 1555/3661/720 1615/3774/720 1616/3776/720 +f 1621/3787/721 1620/3785/721 1623/3790/721 1624/3792/721 +f 1619/3782/722 1625/3793/722 1626/3794/722 1627/3796/722 +f 1628/3798/723 1618/3778/723 1629/3801/723 1630/3803/723 +f 1625/3793/724 1631/3805/725 1632/3806/726 1626/3794/727 +f 1610/3763/728 1609/3761/728 1628/3800/728 1631/3805/728 +f 1622/3789/717 1610/3763/716 1631/3805/725 1625/3793/724 +f 1609/3762/729 1613/3770/729 1618/3779/729 1628/3799/729 +f 1614/3772/730 1622/3789/730 1625/3793/730 1619/3782/730 +f 1630/3803/731 1629/3801/731 1603/3748/731 1602/3746/731 +f 1626/3794/727 1632/3806/726 1633/3807/732 1634/3809/732 +f 1632/3806/733 1630/3804/733 1602/3747/734 1633/3807/734 +f 1629/3801/735 1635/3810/735 1595/3733/736 1603/3748/737 +f 1617/3777/714 1621/3787/713 1624/3792/738 1635/3811/739 +f 1620/3786/740 1619/3783/740 1627/3797/740 1623/3791/740 +f 1618/3780/741 1617/3777/741 1635/3811/741 1629/3802/741 +f 1631/3805/742 1628/3800/742 1630/3804/742 1632/3806/742 +f 1636/3812/743 1637/3814/743 1638/3815/743 1639/3817/743 +f 1589/3722/696 1608/3759/695 1640/3820/744 1606/3754/744 +f 1637/3814/745 1634/3808/745 1641/3823/746 1638/3815/746 +f 1599/3740/698 1594/3730/697 1642/3826/747 1600/3741/747 +f 1627/3797/748 1626/3795/748 1634/3808/745 1637/3814/745 +f 1624/3792/749 1623/3790/749 1636/3813/750 1596/3734/751 +f 1635/3811/739 1624/3792/738 1596/3734/688 1595/3732/688 +f 1623/3791/752 1627/3797/752 1637/3814/752 1636/3812/752 +f 1643/3829/753 1601/3744/754 1600/3742/753 1642/3827/754 +f 1607/3757/753 1643/3829/753 1642/3827/754 1644/3830/754 +f 1606/3755/753 1640/3821/753 1643/3829/753 1607/3757/753 +f 1640/3821/753 1645/3832/754 1601/3744/754 1643/3829/753 +f 1646/3834/755 1605/3752/755 1604/3749/756 1598/3738/756 +f 1639/3818/755 1646/3834/755 1598/3738/756 1597/3735/756 +f 1638/3816/757 1641/3824/755 1646/3834/755 1639/3818/755 +f 1641/3824/755 1647/3835/755 1605/3752/755 1646/3834/755 +f 1594/3731/758 1593/3729/758 1644/3831/758 1642/3828/758 +f 1634/3809/732 1633/3807/732 1647/3836/759 1641/3825/759 +f 1608/3760/760 1587/3719/760 1645/3833/760 1640/3822/760 +f 1596/3734/751 1636/3813/750 1639/3819/761 1597/3736/761 +f 1593/3729/762 1590/3724/762 1607/3758/762 1644/3831/762 +f 1633/3807/734 1602/3747/734 1605/3753/763 1647/3836/763 +f 1587/3719/764 1586/3718/764 1601/3745/764 1645/3833/764 +f 1603/3748/737 1595/3733/736 1598/3739/765 1604/3750/765 +f 1648/3838/625 1649/3839/625 1650/3840/626 1651/3842/627 +f 1652/3843/766 1651/3841/766 1653/3845/767 1654/3846/768 +f 1655/3847/641 1656/3849/641 1657/3852/641 1658/3854/641 +f 1659/3856/635 1660/3857/635 1655/3848/635 1661/3860/635 +f 1662/3862/636 1649/3839/636 1663/3863/636 1664/3864/636 +f 1665/3866/637 1662/3861/637 1664/3865/637 1666/3867/637 +f 1667/3868/637 1668/3869/637 1662/3861/637 1665/3866/637 +f 1668/3870/639 1650/3840/639 1649/3839/636 1662/3862/636 +f 1669/3871/769 1659/3855/769 1661/3859/769 1670/3872/769 +f 1652/3843/769 1671/3874/769 1659/3855/769 1669/3871/769 +f 1671/3873/635 1672/3875/635 1660/3857/635 1659/3856/635 +f 1664/3864/642 1663/3863/642 1673/3877/642 1674/3879/642 +f 1670/3872/770 1661/3859/770 1675/3880/770 1676/3882/770 +f 1677/3883/771 1670/3872/772 1676/3882/773 1678/3885/774 +f 1660/3858/644 1679/3887/644 1656/3849/644 1655/3847/644 +f 1672/3876/644 1680/3889/644 1679/3887/644 1660/3858/644 +f 1668/3869/646 1667/3868/646 1681/3890/646 1682/3892/646 +f 1672/3875/647 1671/3873/647 1683/3893/647 1684/3895/647 +f 1667/3868/775 1680/3888/775 1685/3898/648 1681/3890/649 +f 1669/3871/776 1648/3837/776 1651/3841/766 1652/3843/766 +f 1670/3872/772 1677/3883/771 1648/3837/776 1669/3871/776 +f 1677/3884/625 1663/3863/625 1649/3839/625 1648/3838/625 +f 1686/3899/667 1682/3891/667 1687/3901/667 1688/3903/667 +f 1683/3894/777 1654/3846/777 1689/3905/777 1690/3907/777 +f 1685/3897/651 1684/3896/651 1691/3908/651 1692/3911/651 +f 1684/3895/652 1683/3893/652 1690/3906/652 1691/3910/652 +f 1650/3840/639 1668/3870/639 1682/3891/655 1686/3899/655 +f 1680/3889/656 1672/3876/656 1684/3896/656 1685/3897/656 +f 1651/3842/627 1650/3840/626 1686/3899/657 1653/3844/657 +f 1671/3874/778 1652/3843/778 1654/3846/778 1683/3894/778 +f 1692/3912/676 1691/3909/676 1693/3916/676 1694/3917/676 +f 1691/3910/675 1690/3906/675 1695/3918/675 1693/3914/675 +f 1696/3922/654 1692/3912/653 1694/3917/659 1697/3923/660 +f 1689/3905/779 1698/3925/780 1699/3926/781 1700/3927/782 +f 1653/3844/668 1686/3899/668 1688/3903/668 1698/3924/668 +f 1682/3892/669 1681/3890/669 1696/3921/669 1687/3900/669 +f 1654/3846/768 1653/3845/767 1698/3925/780 1689/3905/779 +f 1681/3890/649 1685/3898/648 1692/3913/653 1696/3921/654 +f 1700/3927/782 1699/3926/781 1701/3929/783 1702/3930/784 +f 1703/3933/672 1697/3923/672 1704/3934/672 1705/3935/672 +f 1699/3926/673 1706/3939/673 1707/3940/673 1701/3929/673 +f 1706/3937/674 1703/3931/674 1705/3936/674 1707/3941/674 +f 1690/3907/785 1689/3905/785 1700/3927/785 1695/3920/785 +f 1688/3903/786 1687/3901/786 1703/3932/786 1706/3938/786 +f 1698/3925/666 1688/3904/666 1706/3939/666 1699/3926/666 +f 1687/3902/665 1696/3922/665 1697/3923/665 1703/3933/665 +f 1705/3935/787 1704/3934/787 1708/3942/787 1709/3943/787 +f 1701/3928/693 1707/3941/693 1710/3945/693 1711/3947/693 +f 1707/3941/679 1705/3936/679 1709/3944/679 1710/3945/679 +f 1712/3948/788 1702/3930/788 1713/3950/788 1714/3951/788 +f 1697/3923/660 1694/3917/659 1715/3953/789 1704/3934/790 +f 1693/3915/685 1695/3919/685 1712/3949/685 1716/3956/685 +f 1694/3917/686 1693/3916/686 1716/3955/686 1715/3953/686 +f 1695/3920/791 1700/3927/791 1702/3930/791 1712/3948/791 +f 1717/3957/792 1718/3959/792 1719/3961/689 1720/3962/689 +f 1709/3943/793 1708/3942/793 1721/3965/793 1722/3967/793 +f 1723/3971/691 1724/3973/691 1725/3975/691 1726/3976/691 +f 1714/3951/692 1713/3950/692 1727/3980/692 1728/3982/692 +f 1702/3930/784 1701/3929/783 1711/3946/794 1713/3950/795 +f 1704/3934/790 1715/3953/789 1729/3986/796 1708/3942/698 +f 1716/3956/682 1712/3949/682 1714/3952/682 1730/3988/682 +f 1715/3954/681 1716/3956/681 1730/3988/681 1729/3987/681 +f 1673/3877/700 1678/3886/700 1731/3989/700 1732/3991/700 +f 1675/3881/701 1658/3853/701 1733/3995/701 1734/3997/701 +f 1678/3885/774 1676/3882/773 1735/3998/797 1731/3990/798 +f 1676/3882/799 1675/3880/799 1734/3996/799 1735/3998/799 +f 1666/3867/634 1664/3865/634 1674/3878/634 1736/3999/634 +f 1663/3863/706 1677/3884/706 1678/3886/706 1673/3877/706 +f 1656/3850/800 1666/3867/800 1736/3999/707 1657/3851/708 +f 1661/3860/709 1655/3848/709 1658/3853/709 1675/3881/709 +f 1731/3990/798 1735/3998/797 1737/4000/801 1738/4001/802 +f 1735/3998/803 1734/3996/803 1739/4003/803 1737/4000/803 +f 1733/3993/730 1740/4007/730 1741/4008/730 1742/4009/730 +f 1743/4013/729 1732/3991/729 1744/4015/729 1745/4018/729 +f 1736/3999/699 1674/3878/699 1743/4012/699 1746/4021/699 +f 1657/3851/708 1736/3999/707 1746/4021/716 1740/4005/717 +f 1674/3879/718 1673/3877/718 1732/3991/718 1743/4013/718 +f 1658/3854/719 1657/3852/719 1740/4006/719 1733/3994/719 +f 1742/4009/722 1741/4008/722 1747/4023/722 1748/4025/722 +f 1745/4019/723 1744/4016/723 1749/4028/723 1750/4030/723 +f 1741/4008/724 1751/4031/725 1752/4032/726 1747/4023/727 +f 1751/4031/742 1745/4020/742 1750/4029/742 1752/4032/742 +f 1734/3997/712 1733/3995/712 1742/4010/712 1739/4002/712 +f 1732/3992/711 1731/3990/711 1738/4001/711 1744/4017/711 +f 1746/4022/728 1743/4014/728 1745/4020/728 1751/4031/728 +f 1740/4007/717 1746/4022/716 1751/4031/725 1741/4008/724 +f 1752/4032/733 1750/4029/733 1723/3972/734 1753/4033/734 +f 1749/4028/735 1754/4034/735 1717/3958/736 1724/3973/737 +f 1755/4036/804 1748/4026/804 1756/4038/804 1757/4039/804 +f 1754/4035/805 1758/4041/806 1718/3959/792 1717/3957/792 +f 1737/4000/807 1739/4003/807 1755/4037/807 1758/4041/807 +f 1738/4001/802 1737/4000/801 1758/4041/806 1754/4035/805 +f 1739/4004/808 1742/4011/808 1748/4026/808 1755/4036/808 +f 1744/4017/741 1738/4001/741 1754/4035/741 1749/4027/741 +f 1757/4039/743 1756/4038/743 1759/4042/743 1760/4044/743 +f 1713/3950/795 1711/3946/794 1761/4048/809 1727/3980/809 +f 1708/3942/698 1729/3986/796 1762/4051/747 1721/3965/747 +f 1756/4038/745 1763/4054/745 1764/4056/746 1759/4042/746 +f 1747/4023/727 1752/4032/726 1753/4033/732 1763/4055/732 +f 1750/4030/731 1749/4028/731 1724/3973/731 1723/3971/731 +f 1748/4026/748 1747/4024/748 1763/4054/745 1756/4038/745 +f 1758/4041/810 1755/4037/810 1757/4040/811 1718/3959/812 +f 1765/4059/753 1722/3968/754 1721/3966/753 1762/4052/754 +f 1728/3983/753 1765/4059/753 1762/4052/754 1766/4061/754 +f 1727/3981/753 1761/4049/753 1765/4060/753 1728/3984/753 +f 1761/4049/753 1767/4063/754 1722/3969/754 1765/4060/753 +f 1768/4065/755 1726/3977/755 1725/3974/756 1720/3963/756 +f 1760/4045/755 1768/4065/755 1720/3963/756 1719/3960/756 +f 1759/4043/757 1764/4057/755 1768/4066/755 1760/4046/755 +f 1764/4057/755 1769/4067/755 1726/3978/755 1768/4066/755 +f 1729/3987/758 1730/3988/758 1766/4062/758 1762/4053/758 +f 1763/4055/732 1753/4033/732 1769/4068/759 1764/4058/759 +f 1711/3947/760 1710/3945/760 1767/4064/760 1761/4050/760 +f 1718/3959/812 1757/4040/811 1760/4047/813 1719/3961/813 +f 1730/3988/762 1714/3952/762 1728/3985/762 1766/4062/762 +f 1753/4033/734 1723/3972/734 1726/3979/763 1769/4068/763 +f 1710/3945/764 1709/3944/764 1722/3970/764 1767/4064/764 +f 1724/3973/737 1717/3958/736 1720/3964/765 1725/3975/765 +o Chair.002 +v 3.708188 0.415382 3.489629 +v 3.708188 0.429951 3.489629 +v 3.712996 0.429951 3.539015 +v 3.751944 0.429951 3.939073 +v 3.756752 0.429951 3.988458 +v 3.756752 0.415382 3.988458 +v 3.751944 0.415382 3.939073 +v 3.712996 0.415382 3.539015 +v 3.373930 0.429951 4.025728 +v 3.373930 0.415382 4.025728 +v 3.373930 0.400812 4.025728 +v 3.369510 0.400812 3.980324 +v 3.751944 0.400812 3.939073 +v 3.756752 0.400812 3.988458 +v 3.325366 0.415382 3.526899 +v 3.325366 0.429951 3.526899 +v 3.329786 0.415382 3.572304 +v 3.329786 0.429951 3.572304 +v 3.325366 0.400812 3.526899 +v 3.329786 0.400812 3.572304 +v 3.708188 0.400812 3.489629 +v 3.712996 0.400812 3.539015 +v 3.779735 0.432961 3.965616 +v 3.778286 0.432961 3.950737 +v 3.773811 0.421009 3.951172 +v 3.775259 0.421009 3.966052 +v 3.786377 0.426967 3.949949 +v 3.787826 0.426967 3.964828 +v 3.732721 0.419106 3.507868 +v 3.734149 0.419106 3.522534 +v 3.746715 0.425064 3.521311 +v 3.745287 0.425064 3.506644 +v 3.737336 0.434699 3.507418 +v 3.738764 0.434699 3.522085 +v 3.792590 0.431853 3.949344 +v 3.794039 0.431853 3.964224 +v 3.753067 0.433592 3.520693 +v 3.751639 0.433592 3.506026 +v 3.763848 0.592772 3.504837 +v 3.749544 0.593879 3.506230 +v 3.791943 0.592141 3.964427 +v 3.790495 0.592141 3.949548 +v 3.806247 0.591033 3.963035 +v 3.824562 0.829840 3.961252 +v 3.810259 0.830948 3.962644 +v 3.782163 0.831579 3.503054 +v 3.767859 0.832686 3.504447 +v 3.804798 0.591033 3.948155 +v 3.750972 0.593879 3.520896 +v 3.765275 0.592772 3.519504 +v 3.800095 0.830737 3.963634 +v 3.811286 0.870951 3.939376 +v 3.802248 0.870348 3.940256 +v 3.759112 0.832325 3.520104 +v 3.757684 0.832325 3.505437 +v 3.763943 0.869634 3.528185 +v 3.765178 0.864490 3.544964 +v 3.823113 0.829840 3.946372 +v 3.740495 0.608202 3.507111 +v 3.769287 0.832686 3.519113 +v 3.783591 0.831579 3.517721 +v 3.808810 0.830948 3.947765 +v 3.824168 0.869953 3.938122 +v 3.782905 0.606614 3.965307 +v 3.781456 0.606614 3.950428 +v 3.798646 0.830737 3.948754 +v 3.741923 0.608202 3.521777 +v 3.772992 0.870373 3.527304 +v 3.774227 0.865229 3.544083 +v 3.787109 0.864232 3.542829 +v 3.798125 0.913073 3.867317 +v 3.806223 0.914244 3.866059 +v 3.783255 0.911897 3.600089 +v 3.775109 0.911148 3.600521 +v 3.822219 0.867524 3.920030 +v 3.809337 0.868521 3.921284 +v 3.804415 0.902898 3.856523 +v 3.818292 0.901824 3.855172 +v 3.800297 0.867919 3.922164 +v 3.785875 0.869376 3.526050 +v 3.783332 0.900855 3.609669 +v 3.797208 0.899781 3.608319 +v 3.797130 0.910823 3.598738 +v 3.820098 0.913170 3.864708 +v 3.775121 0.901346 3.608443 +v 3.796318 0.901727 3.857781 +v 3.369510 0.415382 3.980324 +v 3.369510 0.429951 3.980324 +v 3.566195 0.438060 4.009190 +v 3.566761 0.443651 4.015003 +v 3.697230 0.443651 4.002301 +v 3.696664 0.438060 3.996488 +v 3.696681 0.429976 3.996664 +v 3.728908 0.437950 3.993349 +v 3.726324 0.430300 3.993778 +v 3.568104 0.429903 4.028790 +v 3.568087 0.437987 4.028615 +v 3.437619 0.437987 4.041317 +v 3.437637 0.429903 4.041492 +v 3.437078 0.443828 4.035751 +v 3.405326 0.439408 4.038842 +v 3.408194 0.434055 4.044182 +v 3.566754 0.424135 4.014931 +v 3.567538 0.424311 4.022977 +v 3.437071 0.424311 4.035678 +v 3.436287 0.424135 4.027633 +v 3.567545 0.443828 4.023049 +v 3.436294 0.443651 4.027705 +v 3.698555 0.437987 4.015913 +v 3.698013 0.443828 4.010347 +v 3.566213 0.429976 4.009366 +v 3.435745 0.429976 4.022068 +v 3.697222 0.424135 4.002229 +v 3.698006 0.424311 4.010275 +v 3.411429 0.426646 4.044044 +v 3.413090 0.421521 4.038013 +v 3.404613 0.439247 4.030789 +v 3.412377 0.421360 4.029960 +v 3.409509 0.426713 4.024622 +v 3.698572 0.429903 4.016088 +v 3.730776 0.437881 4.012776 +v 3.732114 0.443408 4.007028 +v 3.724986 0.424773 3.999526 +v 3.725826 0.424940 4.007566 +v 3.728192 0.430231 4.013205 +v 3.435728 0.438060 4.021892 +v 3.754479 0.420977 3.991037 +v 3.751463 0.416357 3.996948 +v 3.752354 0.416497 4.004983 +v 3.756326 0.420919 4.010466 +v 3.761232 0.427313 4.009811 +v 3.731274 0.443241 3.998987 +v 3.779952 0.402967 4.008165 +v 3.786652 0.407418 4.007336 +v 3.759386 0.427371 3.990381 +v 3.784822 0.407458 3.987905 +v 3.778122 0.403008 3.988735 +v 3.764248 0.431932 4.003899 +v 3.790963 0.410634 4.001298 +v 3.763358 0.431793 3.995863 +v 3.790034 0.410537 3.993266 +v 3.802483 0.380352 3.986186 +v 3.794711 0.378323 3.987120 +v 3.804304 0.380334 4.005618 +v 3.809389 0.381800 3.999504 +v 3.808436 0.381756 3.991475 +v 3.773810 0.399792 3.994772 +v 3.774740 0.399889 4.002804 +v 3.824939 0.345795 3.997990 +v 3.823984 0.345756 3.989961 +v 3.789626 0.376856 3.993233 +v 3.810156 0.342751 3.985616 +v 3.805027 0.341467 3.991733 +v 3.796533 0.378304 4.006551 +v 3.790579 0.376901 4.001262 +v 3.805981 0.341506 3.999763 +v 3.811977 0.342735 4.005047 +v 3.336985 0.349401 4.031505 +v 3.344994 0.348454 4.030903 +v 3.304082 -0.002953 4.034885 +v 3.296073 -0.002007 4.035488 +v 3.819808 0.344511 4.004108 +v 3.906084 0.001491 3.995709 +v 3.911214 0.002774 3.989591 +v 3.332633 0.350077 4.045919 +v 3.332024 0.350056 4.037857 +v 3.291113 -0.001352 4.041840 +v 3.291722 -0.001331 4.049902 +v 3.896431 -0.000270 3.977216 +v 3.891302 -0.001553 3.983334 +v 3.817989 0.344527 3.984676 +v 3.374527 0.425574 4.041841 +v 3.379332 0.421603 4.046991 +v 3.406274 0.434122 4.024759 +v 3.377388 0.421652 4.027572 +v 3.373872 0.425454 4.033782 +v 3.388765 0.412305 4.040381 +v 3.388110 0.412185 4.032323 +v 3.383305 0.416156 4.027173 +v 3.355789 0.403231 4.029675 +v 3.351101 0.405075 4.035999 +v 3.370050 0.398698 4.042203 +v 3.369432 0.398640 4.034142 +v 3.363402 0.400566 4.029111 +v 3.385250 0.416106 4.046592 +v 3.354415 0.371230 4.035604 +v 3.348194 0.372479 4.030591 +v 3.365362 0.400542 4.048529 +v 3.350156 0.372464 4.050009 +v 3.355026 0.371267 4.043666 +v 3.351718 0.405133 4.044062 +v 3.335447 0.375406 4.037523 +v 3.336059 0.375443 4.045586 +v 3.357749 0.403207 4.049093 +v 3.342279 0.374194 4.050599 +v 3.338949 0.349392 4.050923 +v 3.346956 0.348446 4.050321 +v 3.340317 0.374209 4.031180 +v 3.351309 0.347770 4.035906 +v 3.351917 0.347791 4.043969 +v 3.311006 -0.003617 4.047952 +v 3.310396 -0.003637 4.039889 +v 3.904264 0.001507 3.976277 +v 3.306045 -0.002962 4.054303 +v 3.898252 -0.000286 3.996648 +v 3.901258 0.000611 3.986463 +v 3.892256 -0.001514 3.991363 +v 3.910259 0.002736 3.981561 +v 3.301060 -0.002484 4.044896 +v 3.298037 -0.002015 4.054906 +v 3.515465 0.438060 3.488111 +v 3.516031 0.443651 3.493924 +v 3.646499 0.443651 3.481222 +v 3.645933 0.438060 3.475409 +v 3.645950 0.429976 3.475584 +v 3.678178 0.437950 3.472269 +v 3.675593 0.430300 3.472698 +v 3.386340 0.424311 3.514599 +v 3.386906 0.429903 3.520413 +v 3.360699 0.426646 3.522964 +v 3.362359 0.421521 3.516934 +v 3.516024 0.424135 3.493851 +v 3.516807 0.424311 3.501897 +v 3.385556 0.424135 3.506553 +v 3.516814 0.443828 3.501970 +v 3.385564 0.443651 3.506626 +v 3.386347 0.443828 3.514672 +v 3.517356 0.437987 3.507536 +v 3.386889 0.437987 3.520237 +v 3.647824 0.437987 3.494834 +v 3.647282 0.443828 3.489268 +v 3.515482 0.429976 3.488286 +v 3.385015 0.429976 3.500988 +v 3.646492 0.424135 3.481149 +v 3.647275 0.424311 3.489195 +v 3.353883 0.439247 3.509710 +v 3.354595 0.439408 3.517763 +v 3.361647 0.421360 3.508881 +v 3.358779 0.426713 3.503542 +v 3.384998 0.438060 3.500812 +v 3.355543 0.434122 3.503680 +v 3.517373 0.429903 3.507711 +v 3.647841 0.429903 3.495009 +v 3.680046 0.437881 3.491697 +v 3.681383 0.443408 3.485948 +v 3.674256 0.424773 3.478446 +v 3.675096 0.424940 3.486487 +v 3.677461 0.430231 3.492125 +v 3.680543 0.443241 3.477908 +v 3.713518 0.431932 3.482820 +v 3.712627 0.431793 3.474784 +v 3.703749 0.420977 3.469957 +v 3.700733 0.416357 3.475869 +v 3.701623 0.416497 3.483904 +v 3.705595 0.420919 3.489386 +v 3.724010 0.399889 3.481725 +v 3.729221 0.402967 3.487086 +v 3.723080 0.399792 3.473693 +v 3.710502 0.427313 3.488732 +v 3.735922 0.407418 3.486257 +v 3.708655 0.427371 3.469302 +v 3.734091 0.407458 3.466826 +v 3.727391 0.403008 3.467655 +v 3.751753 0.380352 3.465106 +v 3.743980 0.378323 3.466040 +v 3.740233 0.410634 3.480219 +v 3.753573 0.380334 3.484538 +v 3.758659 0.381800 3.478425 +v 3.739303 0.410537 3.472187 +v 3.757705 0.381756 3.470395 +v 3.769079 0.344511 3.483029 +v 3.774208 0.345795 3.476911 +v 3.773254 0.345756 3.468882 +v 3.767258 0.344527 3.463597 +v 3.738895 0.376856 3.472153 +v 3.759425 0.342751 3.464536 +v 3.754296 0.341467 3.470654 +v 3.745802 0.378304 3.485472 +v 3.739849 0.376901 3.480183 +v 3.286254 0.349401 3.510426 +v 3.294263 0.348454 3.509823 +v 3.253351 -0.002953 3.513806 +v 3.245343 -0.002007 3.514409 +v 3.855353 0.001491 3.474629 +v 3.860483 0.002774 3.468511 +v 3.281903 0.350077 3.524840 +v 3.281294 0.350056 3.516777 +v 3.240382 -0.001352 3.520760 +v 3.240991 -0.001331 3.528823 +v 3.845701 -0.000270 3.456137 +v 3.840571 -0.001553 3.462255 +v 3.761246 0.342735 3.483968 +v 3.755251 0.341506 3.478683 +v 3.326658 0.421652 3.506492 +v 3.323142 0.425454 3.512703 +v 3.338034 0.412305 3.519302 +v 3.337379 0.412185 3.511244 +v 3.332575 0.416156 3.506093 +v 3.357463 0.434055 3.523102 +v 3.312672 0.400566 3.508031 +v 3.305058 0.403231 3.508595 +v 3.318702 0.398640 3.513062 +v 3.334520 0.416106 3.525513 +v 3.314632 0.400542 3.527449 +v 3.319320 0.398698 3.521124 +v 3.323797 0.425574 3.520761 +v 3.300370 0.405075 3.514920 +v 3.300987 0.405133 3.522982 +v 3.328601 0.421603 3.525912 +v 3.299426 0.372464 3.528929 +v 3.304296 0.371267 3.522587 +v 3.284716 0.375406 3.516444 +v 3.285329 0.375443 3.524507 +v 3.307019 0.403207 3.528013 +v 3.291548 0.374194 3.529520 +v 3.288218 0.349392 3.529844 +v 3.289587 0.374209 3.510101 +v 3.303684 0.371230 3.514524 +v 3.301187 0.347791 3.522889 +v 3.300577 0.347770 3.514827 +v 3.297464 0.372479 3.509511 +v 3.260275 -0.003617 3.526872 +v 3.259666 -0.003637 3.518810 +v 3.853533 0.001507 3.455197 +v 3.847521 -0.000286 3.475569 +v 3.296226 0.348446 3.529241 +v 3.255314 -0.002962 3.533224 +v 3.850527 0.000611 3.465383 +v 3.841526 -0.001514 3.470284 +v 3.859529 0.002736 3.460482 +v 3.250329 -0.002484 3.523816 +v 3.247307 -0.002015 3.533827 +vn 0.9953 -0.0000 -0.0969 +vn 0.0969 -0.0000 0.9953 +vn -0.0000 -1.0000 -0.0000 +vn -0.0969 -0.0000 -0.9953 +vn -0.9953 -0.0000 0.0969 +vn -0.1186 0.9929 0.0115 +vn 0.2624 -0.9646 -0.0255 +vn 0.4247 -0.9044 -0.0414 +vn 0.4534 -0.0911 -0.8867 +vn 0.1615 -0.9868 -0.0157 +vn -0.1706 0.9852 0.0166 +vn 0.5876 -0.0779 0.8054 +vn 0.7430 -0.1146 0.6594 +vn 0.5652 -0.0987 -0.8190 +vn 0.6135 -0.7874 -0.0597 +vn 0.7969 -0.5992 -0.0776 +vn -0.9924 0.0768 0.0966 +vn 0.9924 -0.0768 -0.0966 +vn 0.1655 -0.2916 0.9421 +vn 0.0626 0.5027 0.8622 +vn -0.9901 0.1047 0.0931 +vn -0.9886 0.1119 0.1005 +vn -0.9892 0.1062 0.1011 +vn 0.8887 -0.0656 0.4538 +vn 0.1221 0.4967 0.8593 +vn -0.9926 0.0768 0.0942 +vn -0.8403 -0.5359 0.0818 +vn -0.1122 0.5287 -0.8414 +vn 0.0297 -0.6113 0.7908 +vn -0.5194 -0.8531 0.0494 +vn -0.8427 -0.5326 0.0788 +vn -0.8423 -0.5337 0.0756 +vn -0.8431 -0.5315 0.0821 +vn -0.1172 0.9931 0.0021 +vn -0.1184 0.9648 -0.2346 +vn -0.1182 0.9584 -0.2600 +vn -0.1129 -0.8811 -0.4592 +vn 0.1896 -0.8634 -0.4675 +vn 0.5883 -0.7743 -0.2330 +vn -0.1232 -0.5705 -0.8120 +vn 0.7806 -0.3669 -0.5060 +vn 0.7321 -0.3997 -0.5517 +vn 0.9940 -0.0465 -0.0990 +vn -0.9895 0.1108 0.0931 +vn -0.9895 0.1116 0.0922 +vn 0.9926 -0.0794 -0.0918 +vn -0.0425 0.5223 -0.8517 +vn 0.9951 -0.0401 -0.0908 +vn -0.9895 0.1101 0.0939 +vn 0.9943 -0.0584 -0.0890 +vn 0.6185 -0.7742 0.1344 +vn 0.9925 -0.0813 -0.0918 +vn 0.9916 -0.0847 -0.0975 +vn 0.9934 -0.0769 -0.0847 +vn 0.1151 0.8588 0.4992 +vn 0.0489 0.9633 -0.2639 +vn 0.0757 0.9970 -0.0153 +vn 0.0487 0.9630 -0.2649 +vn -0.0258 0.8610 0.5080 +vn -0.9917 0.0845 0.0969 +vn -0.9924 0.0831 0.0906 +vn -0.9928 0.0796 0.0895 +vn -0.9934 0.0778 0.0847 +vn -0.0212 -0.8773 0.4795 +vn -0.0500 -0.9658 0.2546 +vn -0.9908 0.0880 0.1032 +vn 0.9907 -0.0886 -0.1037 +vn 0.0187 0.8673 -0.4974 +vn -0.1120 0.8695 -0.4810 +vn -0.9925 0.0744 0.0972 +vn -0.9924 0.0849 0.0887 +vn -0.0757 -0.9970 0.0147 +vn 0.9924 -0.0732 -0.0984 +vn -0.9925 0.0723 0.0989 +vn -0.0000 1.0000 -0.0000 +vn -0.0670 0.7224 -0.6882 +vn -0.0637 0.7268 -0.6838 +vn -0.0637 0.7269 -0.6838 +vn -0.0968 -0.0225 -0.9950 +vn -0.0971 -0.0215 -0.9950 +vn -0.1034 -0.0204 -0.9944 +vn 0.0969 0.0218 0.9951 +vn 0.0955 0.0219 0.9952 +vn 0.0954 0.0219 0.9952 +vn -0.0246 0.6937 0.7198 +vn 0.0021 -0.9998 0.0217 +vn -0.0021 0.9998 -0.0218 +vn 0.0700 0.6915 0.7189 +vn 0.0723 0.6962 0.7142 +vn 0.0039 0.9997 -0.0221 +vn -0.0700 -0.6915 -0.7190 +vn 0.1528 -0.7257 0.6708 +vn -0.1385 0.9903 -0.0079 +vn 0.0138 -0.6955 -0.7184 +vn 0.0670 -0.7223 0.6883 +vn 0.0968 0.0221 0.9951 +vn 0.0746 0.7008 0.7094 +vn 0.0246 -0.9995 0.0188 +vn 0.1037 0.0214 0.9944 +vn 0.0972 0.0224 0.9950 +vn -0.2839 -0.6683 -0.6876 +vn -0.1584 -0.6972 0.6992 +vn -0.2983 -0.9532 0.0503 +vn 0.1103 0.0183 0.9937 +vn 0.1046 0.0214 0.9943 +vn 0.0100 0.9997 -0.0224 +vn 0.0780 -0.7326 0.6762 +vn -0.0604 0.7313 -0.6794 +vn -0.0573 -0.7022 -0.7097 +vn 0.1156 0.0132 0.9932 +vn 0.1113 0.0178 0.9936 +vn -0.1098 -0.0175 -0.9938 +vn -0.1041 -0.0205 -0.9944 +vn -0.1105 -0.0172 -0.9937 +vn -0.1149 -0.0124 -0.9933 +vn 0.5003 0.5509 0.6680 +vn 0.3838 0.5748 -0.7227 +vn 0.3311 0.9421 -0.0536 +vn 0.1746 0.6901 -0.7023 +vn 0.2999 0.6614 0.6875 +vn -0.1152 -0.0119 -0.9933 +vn -0.1166 -0.0090 -0.9931 +vn 0.6545 0.3812 0.6530 +vn 0.5446 0.3978 -0.7383 +vn 0.8352 0.5403 -0.1027 +vn -0.5889 -0.8044 0.0786 +vn -0.3707 -0.5868 0.7199 +vn -0.4874 -0.5625 -0.6678 +vn 0.6164 0.7833 -0.0813 +vn 0.9107 0.3980 -0.1103 +vn -0.7052 -0.2790 -0.6518 +vn -0.5972 -0.2912 0.7473 +vn -0.9096 -0.4005 0.1102 +vn 0.1172 0.0092 0.9931 +vn 0.1158 0.0122 0.9932 +vn -0.8160 -0.5692 0.1007 +vn -0.5361 -0.4135 0.7360 +vn -0.6460 -0.3964 -0.6524 +vn -0.0753 -0.0027 -0.9972 +vn -0.0753 -0.0025 -0.9972 +vn 0.7374 0.1694 0.6539 +vn -0.9904 0.1162 0.0745 +vn -0.7374 -0.1695 -0.6539 +vn 0.5977 0.2899 -0.7475 +vn 0.7057 0.2777 0.6518 +vn -0.1161 -0.0080 -0.9932 +vn -0.1171 -0.0055 -0.9931 +vn 0.1180 0.0054 0.9930 +vn 0.1175 0.0070 0.9930 +vn -0.2139 0.6472 0.7317 +vn -0.3599 0.6748 -0.6443 +vn 0.3528 -0.9356 -0.0136 +vn -0.0938 -0.0216 -0.9954 +vn -0.0885 -0.0207 -0.9959 +vn -0.0826 -0.0182 -0.9964 +vn -0.0877 -0.0205 -0.9959 +vn -0.1640 0.7239 -0.6701 +vn 0.0936 0.0227 0.9953 +vn 0.0883 0.0218 0.9959 +vn 0.1164 -0.9932 0.0100 +vn -0.0940 -0.0222 -0.9953 +vn -0.5522 0.5630 -0.6149 +vn 0.5848 -0.8103 -0.0372 +vn -0.0780 -0.0112 -0.9969 +vn -0.0817 -0.0173 -0.9965 +vn 0.3673 -0.5801 -0.7270 +vn 0.0875 0.0211 0.9959 +vn 0.0824 0.0187 0.9964 +vn -0.4080 0.9128 0.0187 +vn 0.3324 -0.6896 0.6434 +vn 0.1880 -0.6617 -0.7258 +vn 0.5432 -0.3366 -0.7691 +vn 0.7049 -0.3512 0.6162 +vn -0.8813 0.4682 0.0644 +vn 0.0776 0.0114 0.9969 +vn 0.0813 0.0175 0.9965 +vn 0.0770 0.0104 0.9970 +vn 0.0752 0.0032 0.9972 +vn -0.4009 0.5405 0.7397 +vn -0.6641 0.7463 0.0442 +vn 0.5152 -0.6033 0.6088 +vn -0.9881 0.1344 0.0744 +vn 0.0754 0.0027 0.9972 +vn -0.6128 0.0928 0.7848 +vn -0.6132 0.0866 0.7852 +vn -0.7800 0.0969 -0.6182 +vn -0.7806 0.0905 -0.6185 +vn -0.7806 0.0904 -0.6185 +vn -0.0762 -0.0030 -0.9971 +vn -0.0780 -0.0100 -0.9969 +vn 0.8738 -0.4821 -0.0638 +vn -0.7081 0.3437 -0.6168 +vn -0.5461 0.3294 0.7702 +vn 0.9904 -0.1162 -0.0745 +vn -0.1179 -0.0053 -0.9930 +vn 0.7807 -0.0898 0.6185 +vn 0.7811 -0.0839 0.6187 +vn 0.1179 0.0053 0.9930 +vn 0.7802 -0.0956 0.6182 +vn 0.6129 -0.0916 -0.7849 +vn 0.6132 -0.0860 -0.7852 +vn 0.6133 -0.0859 -0.7852 +vn 0.9885 -0.1319 -0.0743 +vn 0.2187 -0.9756 -0.0213 +vn 0.2187 -0.9756 -0.0212 +vn -0.1166 -0.9931 0.0113 +vn -0.1165 -0.9931 0.0114 +vn -0.6302 -0.1770 0.7560 +vn 0.0754 0.0025 0.9972 +vn 0.6302 0.1770 -0.7560 +vn 0.6136 -0.0803 -0.7855 +vn -0.9626 -0.2449 0.1156 +vn -0.6136 0.0803 0.7855 +vn 0.9626 0.2449 -0.1156 +vn -0.7811 0.0839 -0.6187 +vn -0.0968 -0.0221 -0.9951 +vn -0.0972 -0.0224 -0.9950 +vn -0.1037 -0.0214 -0.9944 +vn -0.0700 -0.6915 -0.7189 +vn 0.0138 -0.6956 -0.7183 +vn -0.0955 -0.0219 -0.9952 +vn -0.0954 -0.0219 -0.9952 +vn -0.0883 -0.0218 -0.9959 +vn -0.0935 -0.0228 -0.9954 +vn 0.0968 0.0224 0.9951 +vn -0.0969 -0.0218 -0.9951 +vn -0.0573 -0.7023 -0.7096 +vn -0.5889 -0.8044 0.0785 +vn 0.1112 0.0178 0.9936 +vn -0.1103 -0.0183 -0.9937 +vn -0.1046 -0.0214 -0.9943 +vn -0.1112 -0.0178 -0.9936 +vn -0.1156 -0.0131 -0.9932 +vn -0.1158 -0.0123 -0.9932 +vn -0.1172 -0.0092 -0.9931 +vn -0.4875 -0.5626 -0.6678 +vn -0.7053 -0.2790 -0.6517 +vn 0.1172 0.0091 0.9931 +vn 0.1158 0.0123 0.9932 +vn -0.6460 -0.3964 -0.6523 +vn -0.0754 -0.0027 -0.9972 +vn -0.0754 -0.0025 -0.9972 +vn 0.7374 0.1695 0.6539 +vn -0.7374 -0.1695 -0.6538 +vn -0.1175 -0.0070 -0.9930 +vn -0.1184 -0.0057 -0.9929 +vn 0.1180 0.0055 0.9930 +vn -0.5972 -0.2912 0.7474 +vn -0.0824 -0.0187 -0.9964 +vn -0.0875 -0.0210 -0.9959 +vn 0.1881 -0.6618 -0.7258 +vn 0.0940 0.0221 0.9953 +vn -0.0776 -0.0114 -0.9969 +vn -0.0813 -0.0176 -0.9965 +vn 0.3674 -0.5802 -0.7269 +vn 0.9885 -0.1319 -0.0744 +vn -0.0770 -0.0104 -0.9970 +vn -0.0752 -0.0032 -0.9972 +vn 0.5433 -0.3367 -0.7691 +vn 0.6130 -0.0916 -0.7848 +vn 0.6134 -0.0860 -0.7851 +vn 0.6134 -0.0859 -0.7851 +vn 0.6137 -0.0803 -0.7854 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt 0.686647 0.000000 +vt 0.870176 0.996278 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.782584 0.965408 +vt 0.870573 0.970227 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.833010 0.965282 +vt 0.908785 0.026051 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.968598 0.070112 +vt 0.979071 0.026051 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.968598 0.371019 +vt 0.757324 0.262250 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.173427 0.241164 +vt 0.758439 0.080128 +vt -0.973130 0.033128 +vt -0.123087 0.241439 +vt 0.978437 0.000000 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt 0.737072 0.000128 +vt 0.908263 0.000000 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.409642 -0.009898 +vt 0.677629 0.482142 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.240570 0.058726 +vt 0.669677 0.481452 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.786789 0.246652 +vt 0.991724 0.699406 +vt 0.928489 0.277215 +vt 0.873308 0.505274 +vt 0.786789 0.155990 +vt 0.958960 0.029326 +vt 0.991724 0.483440 +vt 0.977373 0.702462 +vt -0.140978 0.246673 +vt 0.958492 0.010078 +vt -0.156145 0.246590 +vt 0.929566 0.080357 +vt -0.144664 0.252235 +vt 0.984385 0.731379 +vt 0.945934 0.020741 +vt -0.159831 0.252152 +vt 0.984385 0.500820 +vt 0.989649 0.087406 +vt 0.706860 0.007022 +vt 0.847263 0.989602 +vt 0.686599 0.714388 +vt 0.721837 0.007060 +vt 0.884682 0.006674 +vt 0.720919 0.017861 +vt 0.673632 0.527027 +vt 0.872079 0.017335 +vt 0.705942 0.017823 +vt 0.673632 0.731676 +vt 0.690157 0.523535 +vt 0.802894 0.958412 +vt 0.847659 0.963551 +vt 0.695298 0.714388 +vt 0.661237 0.495044 +vt 0.817871 0.958374 +vt 0.885205 0.032725 +vt 0.661237 0.722645 +vt 0.693293 0.503638 +vt 0.944329 0.029337 +vt 0.981154 0.731379 +vt 0.977373 0.486830 +vt 0.989649 0.263822 +vt 0.873305 0.723869 +vt 0.981154 0.500820 +vt 0.870573 0.032734 +vt 0.693293 0.761173 +vt 0.679412 0.527027 +vt 0.695298 0.493838 +vt 0.679412 0.731676 +vt 0.826600 0.493835 +vt 0.826977 0.731673 +vt 0.826600 0.714385 +vt 0.814491 0.495042 +vt 0.122435 0.638558 +vt 0.015922 0.839080 +vt 0.835047 0.699404 +vt 0.993361 0.510073 +vt 0.758428 0.504317 +vt 0.072861 0.638558 +vt 0.015474 0.619132 +vt 0.835047 0.483438 +vt 0.845328 0.702461 +vt 0.015197 0.626266 +vt 0.014109 0.491099 +vt 0.993356 0.728667 +vt 0.758425 0.722912 +vt 0.833436 0.500823 +vt 0.891028 0.725398 +vt 0.672547 0.500827 +vt 0.752235 0.729690 +vt 0.667246 0.727168 +vt 0.891033 0.506802 +vt 0.752238 0.507120 +vt 0.071993 0.783837 +vt 0.969610 0.493832 +vt 0.987699 0.731670 +vt 0.641343 0.509140 +vt 0.689355 0.726560 +vt 0.969610 0.714382 +vt 0.122436 0.783837 +vt 0.641344 0.743247 +vt 0.833436 0.731382 +vt 0.845328 0.486829 +vt 0.814491 0.722643 +vt 0.825052 0.503733 +vt 0.016195 0.832047 +vt 0.634466 0.494220 +vt 0.825052 0.761267 +vt 0.826977 0.527024 +vt 0.022424 0.783234 +vt 0.035852 0.889154 +vt 0.043016 0.971597 +vt 0.706398 0.505224 +vt 0.072863 0.808180 +vt 0.028940 0.807392 +vt 0.010039 0.882150 +vt 0.137154 0.974703 +vt 0.631023 0.892124 +vt 0.649326 0.890699 +vt 0.121379 0.984023 +vt 0.648470 0.892315 +vt 0.072864 0.783142 +vt 0.043889 0.943476 +vt 0.078385 0.805896 +vt 0.075977 0.941215 +vt 0.613560 0.946909 +vt 0.672547 0.731385 +vt 0.701510 0.486829 +vt 0.669481 0.490576 +vt 0.072863 0.646796 +vt 0.648470 0.506013 +vt 0.080915 0.841605 +vt 0.968560 0.503835 +vt 0.102906 0.865583 +vt 0.634467 0.887149 +vt 0.987699 0.527021 +vt 0.968560 0.761369 +vt 0.690090 0.495972 +vt 0.701510 0.702461 +vt 0.603150 0.865583 +vt 0.014109 0.884028 +vt 0.706395 0.729929 +vt 0.816556 0.714481 +vt 0.023239 0.646888 +vt 0.040534 0.495932 +vt 0.081188 0.621686 +vt 0.007711 0.495744 +vt 0.041481 0.497122 +vt 0.080911 0.628820 +vt 0.003028 0.888966 +vt 0.041481 0.887645 +vt 0.060838 0.971173 +vt 0.631023 0.505822 +vt 0.649326 0.500176 +vt 0.081188 0.834572 +vt 0.805889 0.743046 +vt 0.122312 0.806766 +vt 0.988155 0.503653 +vt 0.115555 0.935422 +vt 0.904138 0.912557 +vt 0.988155 0.735605 +vt 0.813022 0.494763 +vt 0.890960 0.912565 +vt 0.735836 0.641861 +vt 0.693936 0.468644 +vt 0.027417 0.833361 +vt 0.420996 0.961603 +vt 0.032040 0.784613 +vt 0.284612 0.483847 +vt 0.656925 0.504187 +vt 0.681549 0.720168 +vt 0.066750 0.834450 +vt 0.299225 0.449509 +vt 0.999708 0.720167 +vt 0.989627 0.743247 +vt 0.121899 0.832034 +vt 0.693936 0.449159 +vt 0.420996 0.999935 +vt 0.008277 0.862094 +vt 0.082562 0.831201 +vt 0.741580 0.718717 +vt 0.678836 0.505353 +vt 0.815743 0.487362 +vt 0.741523 0.585977 +vt 0.678836 0.699564 +vt 0.553315 0.945729 +vt 0.982243 0.588758 +vt 0.460393 1.018433 +vt 0.949871 0.788878 +vt 0.982305 0.727355 +vt 0.668954 0.502598 +vt 0.949657 0.691167 +vt 0.979056 0.490574 +vt 0.078628 0.952623 +vt 0.035428 0.887064 +vt 0.812426 0.730862 +vt 0.971935 0.642457 +vt 0.805889 0.532195 +vt 0.173975 1.012235 +vt 0.908785 0.976444 +vt 0.726484 0.788878 +vt 0.984477 0.500479 +vt 0.894591 0.976453 +vt 0.737043 0.505375 +vt 0.726270 0.691167 +vt 0.987420 0.694407 +vt 0.999899 0.506981 +vt 0.968797 0.500648 +vt 0.989626 0.516135 +vt 0.652223 0.697892 +vt 0.656922 0.730164 +vt 0.681740 0.506981 +vt 0.985798 0.713641 +vt 0.053549 0.993732 +vt 0.043551 0.873068 +vt 0.522988 0.991572 +vt 0.062665 0.961706 +vt 0.169656 0.991799 +vt 0.060838 0.809705 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +s 1 +usemtl Material.064 +f 1770/4070/814 1771/4074/814 1772/4079/814 1773/4083/814 1774/4087/814 1775/4093/814 1776/4096/814 1777/4099/814 +f 1775/4092/815 1774/4088/815 1778/4103/815 1779/4106/815 +f 1780/4108/816 1781/4112/816 1782/4114/816 1783/4115/816 +f 1784/4119/817 1785/4120/817 1771/4075/817 1770/4069/817 +f 1785/4121/818 1784/4118/818 1786/4123/818 1787/4124/818 +f 1788/4126/818 1789/4129/818 1786/4123/818 1784/4118/818 +f 1788/4127/817 1784/4119/817 1770/4069/817 1790/4131/817 +f 1783/4116/815 1775/4092/815 1779/4106/815 1780/4109/815 +f 1790/4132/814 1770/4070/814 1777/4099/814 1776/4096/814 1775/4093/814 1783/4117/814 1782/4113/814 1791/4135/814 +f 1773/4084/819 1774/4089/819 1792/4138/819 1793/4142/819 +f 1783/4117/814 1782/4113/814 1776/4096/814 1775/4093/814 +f 1777/4100/818 1770/4071/818 1790/4133/818 1791/4136/818 +f 1775/4094/820 1776/4097/820 1794/4146/820 1795/4148/820 +f 1795/4148/821 1794/4146/821 1796/4150/821 1797/4153/821 +f 1798/4156/821 1801/4164/821 1800/4161/821 1799/4159/821 +f 1776/4098/822 1773/4085/822 1793/4143/822 1794/4147/822 +f 1770/4072/823 1798/4156/823 1799/4159/823 1777/4101/823 +f 1772/4080/824 1803/4171/824 1802/4167/824 1771/4076/824 +f 1777/4102/825 1799/4160/825 1803/4172/825 1772/4081/825 +f 1774/4090/826 1775/4095/826 1795/4149/826 1792/4140/826 +f 1771/4077/827 1802/4168/827 1798/4157/827 1770/4073/827 +f 1797/4154/828 1796/4151/828 1804/4176/828 1805/4180/828 +f 1806/4183/829 1800/4162/829 1801/4165/829 1807/4185/829 +f 1802/4169/817 1809/4188/817 1808/4186/817 1807/4184/817 +f 1794/4147/817 1793/4143/817 1804/4175/817 1796/4152/817 +f 1793/4144/830 1792/4139/830 1810/4192/830 1811/4197/830 +f 1802/4169/817 1807/4184/817 1801/4166/817 1798/4158/817 +f 1792/4140/815 1795/4149/815 1797/4155/815 1805/4178/815 +f 1799/4160/815 1800/4163/815 1806/4181/815 1803/4172/815 +f 1810/4193/815 1812/4201/815 1813/4204/815 1814/4208/815 +f 1809/4188/817 1816/4215/817 1815/4211/817 1808/4186/817 +f 1792/4141/815 1805/4179/815 1812/4202/815 1810/4194/815 +f 1805/4180/831 1804/4176/831 1817/4218/831 1812/4203/831 +f 1803/4173/830 1818/4220/830 1809/4189/830 1802/4170/830 +f 1806/4182/815 1819/4224/815 1818/4221/832 1803/4174/815 +f 1807/4185/831 1808/4187/831 1819/4225/831 1806/4183/831 +f 1804/4177/817 1793/4145/817 1811/4198/817 1817/4219/817 +f 1820/4226/833 1814/4210/833 1821/4230/833 1822/4231/833 +f 1823/4233/834 1826/4241/835 1825/4239/836 1824/4236/836 +f 1812/4203/831 1817/4218/831 1827/4243/831 1813/4205/831 +f 1809/4190/817 1828/4246/817 1824/4238/817 1816/4216/817 +f 1819/4224/815 1830/4253/815 1829/4249/837 1818/4221/832 +f 1817/4219/817 1811/4198/817 1831/4255/817 1827/4244/817 +f 1808/4187/831 1815/4212/831 1830/4252/831 1819/4225/831 +f 1814/4209/838 1813/4206/838 1832/4258/838 1821/4229/838 +f 1810/4195/815 1814/4210/815 1820/4226/815 1833/4260/815 +f 1834/4263/839 1833/4261/830 1820/4227/830 1835/4266/839 +f 1836/4269/839 1823/4234/839 1824/4237/830 1828/4247/830 +f 1834/4264/839 1835/4267/839 1823/4235/839 1836/4270/839 +f 1818/4222/840 1836/4271/840 1828/4248/840 1809/4191/840 +f 1824/4238/841 1825/4240/841 1837/4273/841 1816/4216/841 +f 1830/4253/842 1839/4277/842 1838/4274/842 1829/4249/842 +f 1811/4199/843 1834/4265/844 1836/4271/845 1818/4222/832 +f 1811/4199/843 1810/4196/846 1833/4262/846 1834/4265/844 +f 1840/4281/847 1841/4285/847 1842/4289/848 1843/4293/849 +f 1844/4297/850 1845/4300/851 1846/4303/852 1847/4306/850 +f 1827/4244/853 1831/4255/854 1845/4301/855 1844/4298/853 +f 1813/4207/856 1827/4245/856 1844/4299/856 1832/4259/856 +f 1835/4267/857 1848/4310/858 1826/4242/835 1823/4235/834 +f 1829/4250/837 1838/4275/859 1845/4302/855 1831/4256/854 +f 1816/4217/860 1837/4272/860 1849/4314/860 1815/4213/860 +f 1815/4214/861 1849/4312/861 1839/4278/861 1830/4254/861 +f 1835/4268/857 1820/4228/862 1822/4232/862 1848/4311/858 +f 1838/4275/863 1850/4315/864 1846/4304/852 1845/4302/851 +f 1851/4318/865 1852/4322/866 1853/4326/867 1847/4307/867 +f 1821/4229/868 1832/4258/868 1853/4327/868 1841/4286/868 +f 1842/4290/869 1841/4287/870 1853/4328/870 1852/4323/871 +f 1822/4231/872 1821/4230/872 1841/4288/872 1840/4282/872 +f 1843/4294/873 1854/4330/874 1855/4333/875 1840/4283/876 +f 1839/4279/877 1851/4319/878 1850/4316/864 1838/4276/877 +f 1826/4241/879 1854/4331/874 1843/4295/873 1825/4239/879 +f 1849/4313/880 1852/4324/866 1851/4320/865 1839/4280/880 +f 1837/4272/881 1842/4291/869 1852/4325/871 1849/4314/881 +f 1825/4240/882 1843/4296/849 1842/4292/848 1837/4273/882 +f 1848/4310/883 1855/4334/875 1854/4332/874 1826/4242/884 +f 1851/4321/878 1847/4308/885 1846/4305/852 1850/4317/864 +f 1832/4259/886 1844/4299/886 1847/4309/886 1853/4329/886 +f 1848/4311/883 1822/4232/887 1840/4284/887 1855/4335/875 +f 1787/4124/818 1786/4123/818 1856/4336/818 1857/4337/818 +f 1779/4107/818 1778/4104/818 1857/4337/818 1856/4336/818 +f 1856/4336/818 1786/4123/818 1789/4129/818 1781/4111/818 +f 1781/4111/818 1780/4110/818 1779/4107/818 1856/4336/818 +f 1785/4122/888 1787/4125/888 1772/4082/888 1771/4078/888 +f 1773/4086/888 1857/4338/888 1778/4105/888 1774/4091/888 +f 1772/4082/888 1787/4125/888 1857/4338/888 1773/4086/888 +f 1791/4137/816 1789/4130/816 1788/4128/816 1790/4134/816 +f 1782/4114/816 1781/4112/816 1789/4130/816 1791/4137/816 +f 1831/4257/854 1811/4200/843 1818/4223/832 1829/4251/837 +f 1858/4339/889 1859/4340/889 1860/4341/890 1861/4343/891 +f 1862/4344/892 1861/4342/892 1863/4347/893 1864/4349/894 +f 1865/4351/895 1866/4352/895 1867/4353/896 1868/4355/897 +f 1867/4353/898 1869/4356/898 1870/4358/898 1871/4360/898 +f 1872/4362/899 1873/4363/899 1874/4364/899 1875/4366/899 +f 1876/4368/900 1859/4340/900 1877/4369/900 1869/4357/900 +f 1866/4352/901 1876/4367/901 1869/4356/901 1867/4353/901 +f 1878/4370/902 1879/4371/902 1876/4367/901 1866/4352/901 +f 1879/4372/903 1860/4341/903 1859/4340/900 1876/4368/900 +f 1880/4373/904 1872/4361/904 1875/4365/904 1881/4374/904 +f 1862/4345/904 1882/4377/904 1872/4361/904 1880/4373/904 +f 1882/4376/899 1883/4378/899 1873/4363/899 1872/4362/899 +f 1874/4364/905 1868/4354/905 1884/4380/905 1885/4381/905 +f 1869/4357/906 1877/4369/906 1886/4382/906 1870/4359/906 +f 1881/4374/907 1875/4365/907 1887/4384/907 1888/4386/907 +f 1873/4363/908 1865/4350/908 1868/4354/908 1874/4364/908 +f 1883/4378/908 1889/4388/908 1865/4350/908 1873/4363/908 +f 1889/4387/909 1878/4370/909 1866/4352/895 1865/4351/895 +f 1879/4371/902 1878/4370/902 1890/4389/910 1891/4391/910 +f 1883/4378/911 1882/4376/911 1892/4392/911 1893/4394/911 +f 1878/4370/909 1889/4387/909 1894/4395/912 1890/4389/913 +f 1895/4397/889 1877/4369/889 1859/4340/889 1858/4339/889 +f 1892/4393/914 1864/4348/914 1896/4400/914 1897/4402/914 +f 1894/4396/915 1893/4394/915 1898/4403/915 1899/4405/915 +f 1893/4394/916 1892/4392/916 1897/4401/916 1898/4403/916 +f 1890/4389/913 1894/4395/912 1899/4406/917 1900/4407/918 +f 1860/4341/903 1879/4372/903 1891/4390/919 1901/4408/919 +f 1889/4388/920 1883/4378/920 1893/4394/920 1894/4396/920 +f 1861/4343/891 1860/4341/890 1901/4408/921 1863/4346/921 +f 1882/4377/922 1862/4345/922 1864/4348/922 1892/4393/922 +f 1900/4407/918 1899/4406/917 1902/4409/923 1903/4410/924 +f 1896/4400/925 1904/4411/926 1905/4414/927 1906/4415/928 +f 1907/4416/929 1900/4407/929 1903/4410/929 1908/4418/929 +f 1904/4411/930 1909/4421/930 1910/4423/930 1905/4414/930 +f 1901/4408/931 1891/4390/931 1907/4417/931 1909/4422/931 +f 1863/4346/932 1901/4408/932 1909/4422/932 1904/4412/932 +f 1891/4391/933 1890/4389/933 1900/4407/933 1907/4416/933 +f 1864/4349/894 1863/4347/893 1904/4413/926 1896/4399/925 +f 1906/4415/928 1905/4414/927 1911/4427/934 1912/4428/935 +f 1908/4418/936 1903/4410/936 1913/4429/936 1914/4431/936 +f 1905/4414/937 1910/4423/937 1915/4432/937 1911/4427/937 +f 1910/4424/938 1908/4419/938 1914/4430/938 1915/4433/938 +f 1898/4403/939 1897/4401/939 1916/4434/939 1917/4437/939 +f 1899/4406/940 1898/4404/940 1917/4439/940 1902/4409/940 +f 1897/4402/941 1896/4400/941 1906/4415/941 1916/4436/941 +f 1909/4422/942 1907/4417/942 1908/4420/942 1910/4425/942 +f 1915/4433/943 1914/4430/943 1918/4441/943 1919/4442/943 +f 1920/4444/944 1912/4428/944 1921/4445/944 1922/4446/944 +f 1923/4448/945 1924/4450/945 1925/4452/945 1926/4454/945 +f 1924/4450/946 1920/4443/946 1922/4447/946 1925/4452/946 +f 1903/4410/924 1902/4409/923 1923/4449/947 1913/4429/948 +f 1917/4438/949 1916/4435/949 1920/4443/949 1924/4450/949 +f 1902/4409/950 1917/4439/950 1924/4451/950 1923/4449/950 +f 1916/4436/951 1906/4415/951 1912/4428/951 1920/4444/951 +f 1927/4455/952 1928/4457/952 1929/4459/953 1930/4460/953 +f 1918/4440/954 1931/4463/954 1932/4464/954 1933/4466/954 +f 1934/4469/955 1935/4471/955 1936/4473/955 1937/4474/955 +f 1922/4446/956 1921/4445/956 1938/4477/956 1939/4479/956 +f 1911/4426/957 1915/4433/957 1919/4442/957 1940/4483/957 +f 1914/4431/958 1913/4429/958 1931/4463/958 1918/4440/958 +f 1912/4428/935 1911/4427/934 1940/4482/959 1921/4445/960 +f 1913/4429/948 1923/4449/947 1926/4453/961 1931/4463/962 +f 1871/4360/963 1870/4358/963 1941/4484/963 1942/4486/963 +f 1886/4382/964 1943/4487/964 1944/4489/964 1945/4493/964 +f 1887/4383/965 1885/4381/965 1946/4494/965 1947/4496/965 +f 1943/4488/966 1888/4385/967 1948/4498/968 1944/4490/969 +f 1877/4369/970 1895/4397/970 1943/4487/970 1886/4382/970 +f 1868/4355/897 1867/4353/896 1871/4360/971 1884/4379/972 +f 1875/4366/973 1874/4364/973 1885/4381/973 1887/4383/973 +f 1895/4398/974 1881/4375/974 1888/4385/967 1943/4488/966 +f 1945/4492/975 1944/4491/975 1949/4500/975 1950/4503/975 +f 1947/4496/976 1946/4494/976 1951/4504/976 1952/4507/976 +f 1944/4491/969 1948/4499/968 1953/4510/977 1949/4500/978 +f 1948/4499/979 1947/4497/979 1952/4508/979 1953/4510/979 +f 1884/4379/972 1871/4360/971 1942/4486/980 1954/4512/981 +f 1870/4359/982 1886/4382/982 1945/4493/982 1941/4485/982 +f 1885/4381/983 1884/4380/983 1954/4511/983 1946/4494/983 +f 1888/4386/984 1887/4384/984 1947/4497/984 1948/4499/984 +f 1953/4510/985 1952/4508/985 1955/4513/985 1956/4515/985 +f 1951/4505/986 1957/4516/986 1958/4517/986 1959/4519/986 +f 1960/4521/987 1950/4501/987 1961/4524/987 1962/4526/987 +f 1957/4516/988 1963/4528/989 1964/4529/990 1958/4517/991 +f 1942/4486/992 1941/4484/992 1960/4523/992 1963/4528/992 +f 1954/4512/981 1942/4486/980 1963/4528/989 1957/4516/988 +f 1941/4485/993 1945/4493/993 1950/4502/993 1960/4522/993 +f 1946/4495/994 1954/4512/994 1957/4516/994 1951/4505/994 +f 1962/4526/995 1961/4524/995 1935/4471/995 1934/4469/995 +f 1958/4517/991 1964/4529/990 1965/4530/996 1966/4532/996 +f 1964/4529/997 1962/4527/997 1934/4470/998 1965/4530/998 +f 1961/4524/999 1967/4533/999 1927/4456/1000 1935/4471/1001 +f 1949/4500/978 1953/4510/977 1956/4515/1002 1967/4534/1003 +f 1952/4509/1004 1951/4506/1004 1959/4520/1004 1955/4514/1004 +f 1950/4503/1005 1949/4500/1005 1967/4534/1005 1961/4525/1005 +f 1963/4528/1006 1960/4523/1006 1962/4527/1006 1964/4529/1006 +f 1968/4535/1007 1969/4537/1007 1970/4538/1007 1971/4540/1007 +f 1921/4445/960 1940/4482/959 1972/4543/1008 1938/4477/1008 +f 1969/4537/1009 1966/4531/1009 1973/4546/1010 1970/4538/1010 +f 1931/4463/962 1926/4453/961 1974/4549/1011 1932/4464/1011 +f 1959/4520/1012 1958/4518/1012 1966/4531/1009 1969/4537/1009 +f 1956/4515/1013 1955/4513/1013 1968/4536/1014 1928/4457/1015 +f 1967/4534/1003 1956/4515/1002 1928/4457/952 1927/4455/952 +f 1955/4514/1016 1959/4520/1016 1969/4537/1016 1968/4535/1016 +f 1975/4552/1017 1933/4467/1017 1932/4465/1017 1974/4550/1017 +f 1939/4480/1017 1975/4552/1017 1974/4550/1017 1976/4553/1017 +f 1938/4478/1018 1972/4544/1017 1975/4552/1017 1939/4480/1017 +f 1972/4544/1017 1977/4555/1017 1933/4467/1017 1975/4552/1017 +f 1978/4557/1019 1937/4475/1020 1936/4472/1020 1930/4461/1020 +f 1971/4541/1019 1978/4557/1019 1930/4461/1020 1929/4458/1020 +f 1970/4539/1019 1973/4547/1019 1978/4557/1019 1971/4541/1019 +f 1973/4547/1019 1979/4558/1019 1937/4475/1020 1978/4557/1019 +f 1926/4454/1021 1925/4452/1021 1976/4554/1021 1974/4551/1021 +f 1966/4532/996 1965/4530/996 1979/4559/1022 1973/4548/1022 +f 1940/4483/1023 1919/4442/1023 1977/4556/1023 1972/4545/1023 +f 1928/4457/1015 1968/4536/1014 1971/4542/1024 1929/4459/1024 +f 1925/4452/1025 1922/4447/1025 1939/4481/1025 1976/4554/1025 +f 1965/4530/998 1934/4470/998 1937/4476/1026 1979/4559/1026 +f 1919/4442/1027 1918/4441/1027 1933/4468/1027 1977/4556/1027 +f 1935/4471/1001 1927/4456/1000 1930/4462/1028 1936/4473/1028 +f 1980/4561/889 1981/4562/889 1982/4563/890 1983/4565/891 +f 1984/4566/1029 1983/4564/1029 1985/4568/1030 1986/4569/1031 +f 1987/4570/905 1988/4572/905 1989/4575/905 1990/4577/905 +f 1991/4579/899 1992/4580/899 1987/4571/899 1993/4583/899 +f 1994/4585/900 1981/4562/900 1995/4586/900 1996/4587/900 +f 1997/4589/901 1994/4584/901 1996/4588/901 1998/4590/901 +f 1999/4591/901 2000/4592/901 1994/4584/901 1997/4589/901 +f 2000/4593/903 1982/4563/903 1981/4562/900 1994/4585/900 +f 2001/4594/1032 1991/4578/1032 1993/4582/1032 2002/4595/1032 +f 1984/4566/1032 2003/4597/1032 1991/4578/1032 2001/4594/1032 +f 2003/4596/899 2004/4598/899 1992/4580/899 1991/4579/899 +f 1996/4587/906 1995/4586/906 2005/4600/906 2006/4602/906 +f 2002/4595/1033 1993/4582/1033 2007/4603/1033 2008/4605/1033 +f 2009/4606/1034 2002/4595/1035 2008/4605/1036 2010/4608/1037 +f 1992/4581/908 2011/4610/908 1988/4572/908 1987/4570/908 +f 2004/4599/908 2012/4612/908 2011/4610/908 1992/4581/908 +f 2000/4592/910 1999/4591/910 2013/4613/910 2014/4615/910 +f 2004/4598/911 2003/4596/911 2015/4616/911 2016/4618/911 +f 1999/4591/1038 2012/4611/1038 2017/4621/912 2013/4613/913 +f 2001/4594/1039 1980/4560/1039 1983/4564/1029 1984/4566/1029 +f 2002/4595/1035 2009/4606/1034 1980/4560/1039 2001/4594/1039 +f 2009/4607/889 1995/4586/889 1981/4562/889 1980/4561/889 +f 2018/4622/931 2014/4614/931 2019/4624/931 2020/4626/931 +f 2015/4617/914 1986/4569/914 2021/4628/914 2022/4630/914 +f 2017/4620/915 2016/4619/915 2023/4631/915 2024/4634/915 +f 2016/4618/916 2015/4616/916 2022/4629/916 2023/4633/916 +f 1982/4563/903 2000/4593/903 2014/4614/919 2018/4622/919 +f 2012/4612/920 2004/4599/920 2016/4619/920 2017/4620/920 +f 1983/4565/891 1982/4563/890 2018/4622/921 1985/4567/921 +f 2003/4597/1040 1984/4566/1040 1986/4569/1040 2015/4617/1040 +f 2024/4635/940 2023/4632/940 2025/4639/940 2026/4640/940 +f 2023/4633/1041 2022/4629/1041 2027/4641/1041 2025/4637/1041 +f 2028/4645/918 2024/4635/917 2026/4640/923 2029/4646/1042 +f 2021/4628/1043 2030/4648/1044 2031/4649/1045 2032/4650/1046 +f 1985/4567/932 2018/4622/932 2020/4626/932 2030/4647/932 +f 2014/4615/933 2013/4613/933 2028/4644/933 2019/4623/933 +f 1986/4569/1031 1985/4568/1030 2030/4648/1044 2021/4628/1043 +f 2013/4613/913 2017/4621/912 2024/4636/917 2028/4644/918 +f 2032/4650/1046 2031/4649/1045 2033/4652/1047 2034/4653/1048 +f 2035/4656/936 2029/4646/936 2036/4657/936 2037/4658/936 +f 2031/4649/937 2038/4662/937 2039/4663/937 2033/4652/937 +f 2038/4660/938 2035/4654/938 2037/4659/938 2039/4664/938 +f 2022/4630/1049 2021/4628/1049 2032/4650/1049 2027/4643/1049 +f 2020/4626/942 2019/4624/942 2035/4655/942 2038/4661/942 +f 2030/4648/930 2020/4627/930 2038/4662/930 2031/4649/930 +f 2019/4625/929 2028/4645/929 2029/4646/929 2035/4656/929 +f 2037/4658/958 2036/4657/958 2040/4665/958 2041/4666/958 +f 2033/4651/957 2039/4664/957 2042/4668/957 2043/4670/957 +f 2039/4664/943 2037/4659/943 2041/4667/943 2042/4668/943 +f 2044/4671/1050 2034/4653/1050 2045/4673/1050 2046/4674/1050 +f 2029/4646/1042 2026/4640/923 2047/4676/1051 2036/4657/1052 +f 2025/4638/949 2027/4642/949 2044/4672/949 2048/4679/949 +f 2026/4640/950 2025/4639/950 2048/4678/950 2047/4676/950 +f 2027/4643/1053 2032/4650/1053 2034/4653/1053 2044/4671/1053 +f 2049/4680/1054 2050/4682/1054 2051/4684/1055 2052/4685/1055 +f 2041/4666/1056 2040/4665/1056 2053/4688/1056 2054/4690/1056 +f 2055/4694/955 2056/4696/955 2057/4698/955 2058/4699/955 +f 2046/4674/1057 2045/4673/1057 2059/4703/1057 2060/4705/1057 +f 2034/4653/1048 2033/4652/1047 2043/4669/1058 2045/4673/1059 +f 2036/4657/1052 2047/4676/1051 2061/4709/1060 2040/4665/962 +f 2048/4679/946 2044/4672/946 2046/4675/946 2062/4711/946 +f 2047/4677/1061 2048/4679/1061 2062/4711/1061 2061/4710/1061 +f 2005/4600/964 2010/4609/964 2063/4712/964 2064/4714/964 +f 2007/4604/965 1990/4576/965 2065/4718/965 2066/4720/965 +f 2010/4608/1037 2008/4605/1036 2067/4721/1062 2063/4713/1063 +f 2008/4605/1064 2007/4603/1064 2066/4719/1064 2067/4721/1064 +f 1998/4590/898 1996/4588/898 2006/4601/898 2068/4722/898 +f 1995/4586/970 2009/4607/970 2010/4609/970 2005/4600/970 +f 1988/4573/1065 1998/4590/1065 2068/4722/971 1989/4574/972 +f 1993/4583/973 1987/4571/973 1990/4576/973 2007/4604/973 +f 2063/4713/1063 2067/4721/1062 2069/4723/1066 2070/4724/1067 +f 2067/4721/1068 2066/4719/1068 2071/4726/1068 2069/4723/1068 +f 2065/4716/994 2072/4730/994 2073/4731/994 2074/4732/994 +f 2075/4736/993 2064/4714/993 2076/4738/993 2077/4741/993 +f 2068/4722/963 2006/4601/963 2075/4735/963 2078/4744/963 +f 1989/4574/972 2068/4722/971 2078/4744/980 2072/4728/981 +f 2006/4602/982 2005/4600/982 2064/4714/982 2075/4736/982 +f 1990/4577/983 1989/4575/983 2072/4729/983 2065/4717/983 +f 2074/4732/986 2073/4731/986 2079/4746/986 2080/4748/986 +f 2077/4742/987 2076/4739/987 2081/4751/987 2082/4753/987 +f 2073/4731/988 2083/4754/989 2084/4755/990 2079/4746/991 +f 2083/4754/1006 2077/4743/1006 2082/4752/1006 2084/4755/1006 +f 2066/4720/976 2065/4718/976 2074/4733/976 2071/4725/976 +f 2064/4715/975 2063/4713/975 2070/4724/975 2076/4740/975 +f 2078/4745/992 2075/4737/992 2077/4743/992 2083/4754/992 +f 2072/4730/981 2078/4745/980 2083/4754/989 2073/4731/988 +f 2084/4755/997 2082/4752/997 2055/4695/998 2085/4756/998 +f 2081/4751/999 2086/4757/999 2049/4681/1000 2056/4696/1001 +f 2087/4759/1069 2080/4749/1069 2088/4761/1069 2089/4762/1069 +f 2086/4758/1070 2090/4764/1071 2050/4682/1054 2049/4680/1054 +f 2069/4723/1072 2071/4726/1072 2087/4760/1072 2090/4764/1072 +f 2070/4724/1067 2069/4723/1066 2090/4764/1071 2086/4758/1070 +f 2071/4727/1004 2074/4734/1004 2080/4749/1004 2087/4759/1004 +f 2076/4740/1005 2070/4724/1005 2086/4758/1005 2081/4750/1005 +f 2089/4762/1007 2088/4761/1007 2091/4765/1007 2092/4767/1007 +f 2045/4673/1059 2043/4669/1058 2093/4771/1008 2059/4703/1008 +f 2040/4665/962 2061/4709/1060 2094/4774/1011 2053/4688/1011 +f 2088/4761/1009 2095/4777/1009 2096/4779/1010 2091/4765/1010 +f 2079/4746/991 2084/4755/990 2085/4756/996 2095/4778/996 +f 2082/4753/995 2081/4751/995 2056/4696/995 2055/4694/995 +f 2080/4749/1012 2079/4747/1012 2095/4777/1009 2088/4761/1009 +f 2090/4764/1073 2087/4760/1073 2089/4763/1074 2050/4682/1075 +f 2097/4782/1017 2054/4691/1017 2053/4689/1017 2094/4775/1017 +f 2060/4706/1017 2097/4782/1017 2094/4775/1017 2098/4784/1017 +f 2059/4704/1018 2093/4772/1017 2097/4783/1017 2060/4707/1017 +f 2093/4772/1017 2099/4786/1017 2054/4692/1017 2097/4783/1017 +f 2100/4788/1019 2058/4700/1020 2057/4697/1020 2052/4686/1020 +f 2092/4768/1019 2100/4788/1019 2052/4686/1020 2051/4683/1020 +f 2091/4766/1019 2096/4780/1019 2100/4789/1019 2092/4769/1019 +f 2096/4780/1019 2101/4790/1019 2058/4701/1020 2100/4789/1019 +f 2061/4710/1021 2062/4711/1021 2098/4785/1021 2094/4776/1021 +f 2095/4778/996 2085/4756/996 2101/4791/1022 2096/4781/1022 +f 2043/4670/1023 2042/4668/1023 2099/4787/1023 2093/4773/1023 +f 2050/4682/1075 2089/4763/1074 2092/4770/1076 2051/4684/1076 +f 2062/4711/1025 2046/4675/1025 2060/4708/1025 2098/4785/1025 +f 2085/4756/998 2055/4695/998 2058/4702/1026 2101/4791/1026 +f 2042/4668/1027 2041/4667/1027 2054/4693/1027 2099/4787/1027 +f 2056/4696/1001 2049/4681/1000 2052/4687/1028 2057/4698/1028 +o Top.005 +v 5.203477 0.800000 2.885043 +v 5.203477 0.700000 2.885043 +v 6.130579 0.800000 2.885043 +v 6.130579 0.700000 2.885043 +v 5.203477 0.800000 6.992760 +v 5.203477 0.700000 6.992760 +v 6.130579 0.800000 6.992760 +v 6.130579 0.700000 6.992760 +v 5.203477 0.700000 3.002006 +v 6.130579 0.800000 3.002006 +v 6.130579 0.700000 3.002006 +v 5.203477 0.800000 3.002006 +v 6.130579 -0.013447 3.002006 +v 6.130579 -0.013447 2.885043 +v 5.203477 -0.013447 2.885043 +v 5.203477 -0.013447 3.002006 +vn -0.0000 0.0500 -0.0000 +vn 0.4636 -0.0000 -0.0000 +vn -0.0000 -0.0000 2.0539 +vn -0.0000 -0.0000 -2.0539 +vn -0.4636 -0.0000 -0.0000 +vn -0.0000 -0.0500 -0.0000 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +vt 0.367882 0.500000 +vt 0.375000 0.492882 +vt 0.625000 0.757119 +vt 0.632118 0.750000 +vt 0.375000 0.757119 +vt 0.367882 0.750000 +vt 0.625000 0.492882 +vt 0.632118 0.500000 +vt 0.375000 0.757119 +vt 0.367882 0.750000 +vt 0.375000 0.750000 +vt 0.375000 0.500000 +vt 0.367882 0.500000 +vt 0.375000 0.492882 +s 0 +usemtl Wood +f 2113/4813/1077 2106/4796/1077 2108/4800/1077 2111/4809/1077 +f 2112/4810/1078 2111/4808/1078 2108/4801/1078 2109/4803/1078 +f 2109/4804/1079 2108/4802/1079 2106/4797/1079 2107/4798/1079 +f 2105/4795/1078 2112/4810/1078 2114/4814/1078 2115/4816/1078 +f 2103/4793/1080 2102/4792/1080 2104/4794/1080 2105/4795/1080 +f 2110/4807/1081 2113/4812/1081 2102/4792/1081 2103/4793/1081 +f 2107/4798/1081 2106/4797/1081 2113/4812/1081 2110/4807/1081 +f 2107/4799/1082 2110/4806/1082 2112/4811/1082 2109/4805/1082 +f 2105/4795/1078 2104/4794/1078 2111/4808/1078 2112/4810/1078 +f 2102/4792/1077 2113/4813/1077 2111/4809/1077 2104/4794/1077 +f 2117/4818/1082 2116/4817/1082 2115/4816/1082 2114/4815/1082 +f 2112/4811/1079 2110/4806/1079 2117/4818/1079 2114/4815/1079 +f 2103/4793/1080 2105/4795/1080 2115/4816/1080 2116/4817/1080 +f 2110/4807/1081 2103/4793/1081 2116/4817/1081 2117/4819/1081 +o Chair.003 +v 6.122581 0.415382 3.902534 +v 6.122581 0.429951 3.902534 +v 6.143708 0.429951 3.857638 +v 6.314857 0.429951 3.493946 +v 6.335984 0.429951 3.449050 +v 6.335984 0.415382 3.449050 +v 6.314857 0.415382 3.493946 +v 6.143708 0.415382 3.857638 +v 6.684006 0.429951 3.612825 +v 6.684006 0.415382 3.612825 +v 6.684006 0.400812 3.612825 +v 6.664582 0.400812 3.654102 +v 6.314857 0.400812 3.493946 +v 6.335984 0.400812 3.449050 +v 6.470603 0.415382 4.066308 +v 6.470603 0.429951 4.066308 +v 6.490027 0.415382 4.025032 +v 6.490027 0.429951 4.025032 +v 6.470603 0.400812 4.066308 +v 6.490027 0.400812 4.025032 +v 6.122581 0.400812 3.902534 +v 6.143708 0.400812 3.857638 +v 6.664582 0.415382 3.654102 +v 6.664582 0.429951 3.654102 +v 6.510334 0.438060 3.528699 +v 6.512821 0.443651 3.523414 +v 6.394213 0.443651 3.467598 +v 6.391726 0.438060 3.472883 +v 6.391801 0.429976 3.472723 +v 6.362412 0.437950 3.459089 +v 6.364852 0.430300 3.460042 +v 6.518719 0.429903 3.510880 +v 6.518644 0.437987 3.511039 +v 6.637251 0.437987 3.566854 +v 6.637326 0.429903 3.566695 +v 6.634870 0.443828 3.571914 +v 6.663736 0.439408 3.585498 +v 6.664002 0.434055 3.579443 +v 6.512790 0.424135 3.523480 +v 6.516232 0.424311 3.516165 +v 6.634839 0.424311 3.571980 +v 6.631397 0.424135 3.579295 +v 6.516263 0.443828 3.516099 +v 6.631428 0.443651 3.579229 +v 6.400036 0.437987 3.455224 +v 6.397655 0.443828 3.460284 +v 6.510409 0.429976 3.528538 +v 6.629016 0.429976 3.584354 +v 6.394181 0.424135 3.467664 +v 6.397624 0.424311 3.460350 +v 6.661151 0.426646 3.577907 +v 6.656640 0.421521 3.582239 +v 6.660229 0.439247 3.592782 +v 6.653133 0.421360 3.589524 +v 6.652867 0.426713 3.595578 +v 6.400111 0.429903 3.455065 +v 6.370743 0.437881 3.441439 +v 6.366654 0.443408 3.445695 +v 6.368941 0.424773 3.455787 +v 6.372332 0.424940 3.448448 +v 6.373183 0.430231 3.442393 +v 6.628941 0.438060 3.584514 +v 6.339256 0.420977 3.447996 +v 6.344872 0.416357 3.444459 +v 6.348216 0.416497 3.437099 +v 6.347607 0.420919 3.430357 +v 6.343056 0.427313 3.428410 +v 6.363263 0.443241 3.453034 +v 6.326128 0.402967 3.420249 +v 6.319947 0.407418 3.417535 +v 6.334705 0.427371 3.446050 +v 6.311581 0.407458 3.435168 +v 6.317763 0.403008 3.437882 +v 6.337441 0.431932 3.431948 +v 6.313154 0.410634 3.420518 +v 6.334095 0.431793 3.439308 +v 6.309844 0.410537 3.427896 +v 6.295525 0.380352 3.427613 +v 6.302681 0.378323 3.430785 +v 6.303900 0.380334 3.409983 +v 6.296403 0.381800 3.412636 +v 6.293115 0.381756 3.420023 +v 6.324555 0.399792 3.434899 +v 6.327865 0.399889 3.427522 +v 6.282267 0.345795 3.405983 +v 6.278980 0.345756 3.413371 +v 6.310178 0.376856 3.428133 +v 6.288640 0.342751 3.424177 +v 6.296177 0.341467 3.421545 +v 6.311055 0.378304 3.413156 +v 6.313466 0.376901 3.420746 +v 6.299463 0.341506 3.414157 +v 6.297015 0.342735 3.406549 +v 6.718708 0.349401 3.626757 +v 6.711519 0.348454 3.623178 +v 6.748711 -0.002953 3.640682 +v 6.755901 -0.002007 3.644259 +v 6.289804 0.344511 3.403350 +v 6.211372 0.001491 3.366441 +v 6.203835 0.002774 3.369074 +v 6.729820 0.350077 3.616596 +v 6.726220 0.350056 3.623837 +v 6.763412 -0.001352 3.641339 +v 6.767013 -0.001331 3.634099 +v 6.210208 -0.000270 3.387269 +v 6.217744 -0.001553 3.384635 +v 6.281429 0.344527 3.420979 +v 6.691734 0.425574 3.598674 +v 6.690240 0.421603 3.591790 +v 6.655718 0.434122 3.597115 +v 6.681978 0.421652 3.609472 +v 6.688176 0.425454 3.605933 +v 6.678754 0.412305 3.592646 +v 6.675195 0.412185 3.599905 +v 6.676690 0.416156 3.606788 +v 6.701613 0.403231 3.618712 +v 6.708877 0.405075 3.615675 +v 6.695767 0.398698 3.600652 +v 6.692174 0.398640 3.607896 +v 6.694783 0.400566 3.615303 +v 6.684950 0.416106 3.589107 +v 6.705826 0.371230 3.614320 +v 6.708609 0.372479 3.621809 +v 6.703031 0.400542 3.597615 +v 6.716854 0.372464 3.604120 +v 6.709425 0.371267 3.607080 +v 6.712470 0.405133 3.608432 +v 6.723108 0.375406 3.622372 +v 6.726706 0.375443 3.615131 +v 6.709861 0.403207 3.601024 +v 6.723925 0.374194 3.607642 +v 6.726953 0.349392 3.609066 +v 6.719763 0.348446 3.605489 +v 6.715679 0.374209 3.625331 +v 6.708651 0.347770 3.615649 +v 6.712252 0.347791 3.608410 +v 6.749444 -0.003617 3.625912 +v 6.745844 -0.003637 3.633152 +v 6.202997 0.001507 3.384070 +v 6.756956 -0.002962 3.622991 +v 6.218582 -0.000286 3.369640 +v 6.210790 0.000611 3.376854 +v 6.221031 -0.001514 3.377247 +v 6.200548 0.002736 3.376462 +v 6.756428 -0.002484 3.633625 +v 6.764145 -0.002015 3.626569 +v 6.287411 0.438060 4.002410 +v 6.289898 0.443651 3.997125 +v 6.171290 0.443651 3.941310 +v 6.168803 0.438060 3.946595 +v 6.168878 0.429976 3.946436 +v 6.139489 0.437950 3.932800 +v 6.141930 0.430300 3.933754 +v 6.411916 0.424311 4.045692 +v 6.414403 0.429903 4.040407 +v 6.438228 0.426646 4.051619 +v 6.433717 0.421521 4.055951 +v 6.289867 0.424135 3.997191 +v 6.293309 0.424311 3.989877 +v 6.408474 0.424135 4.053007 +v 6.293340 0.443828 3.989811 +v 6.408505 0.443651 4.052940 +v 6.411948 0.443828 4.045626 +v 6.295721 0.437987 3.984751 +v 6.414329 0.437987 4.040566 +v 6.177113 0.437987 3.928936 +v 6.174732 0.443828 3.933995 +v 6.287486 0.429976 4.002251 +v 6.406093 0.429976 4.058066 +v 6.171259 0.424135 3.941376 +v 6.174701 0.424311 3.934061 +v 6.437307 0.439247 4.066494 +v 6.440813 0.439408 4.059210 +v 6.430211 0.421360 4.063235 +v 6.429945 0.426713 4.069290 +v 6.406018 0.438060 4.058226 +v 6.432796 0.434122 4.070827 +v 6.295796 0.429903 3.984592 +v 6.177188 0.429903 3.928776 +v 6.147820 0.437881 3.915151 +v 6.143731 0.443408 3.919407 +v 6.146019 0.424773 3.929498 +v 6.149409 0.424940 3.922159 +v 6.150260 0.430231 3.916105 +v 6.140340 0.443241 3.926745 +v 6.114517 0.431932 3.905659 +v 6.111173 0.431793 3.913019 +v 6.116333 0.420977 3.921709 +v 6.121948 0.416357 3.918171 +v 6.125293 0.416497 3.910811 +v 6.124684 0.420919 3.904068 +v 6.104942 0.399889 3.901234 +v 6.103206 0.402967 3.893961 +v 6.101633 0.399792 3.908611 +v 6.120133 0.427313 3.902122 +v 6.097024 0.407418 3.891247 +v 6.111782 0.427371 3.919762 +v 6.088658 0.407458 3.908880 +v 6.094840 0.403008 3.911594 +v 6.072602 0.380352 3.901324 +v 6.079759 0.378323 3.904497 +v 6.090231 0.410634 3.894230 +v 6.080977 0.380334 3.883695 +v 6.073480 0.381800 3.886347 +v 6.086922 0.410537 3.901607 +v 6.070193 0.381756 3.893735 +v 6.066881 0.344511 3.877062 +v 6.059344 0.345795 3.879695 +v 6.056057 0.345756 3.887083 +v 6.058506 0.344527 3.894691 +v 6.087255 0.376856 3.901845 +v 6.065718 0.342751 3.897890 +v 6.073254 0.341467 3.895256 +v 6.088132 0.378304 3.886868 +v 6.090543 0.376901 3.894458 +v 6.495785 0.349401 4.100469 +v 6.488595 0.348454 4.096891 +v 6.525788 -0.002953 4.114393 +v 6.532978 -0.002007 4.117971 +v 5.988449 0.001491 3.840153 +v 5.980912 0.002774 3.842786 +v 6.506897 0.350077 4.090308 +v 6.503297 0.350056 4.097548 +v 6.540490 -0.001352 4.115050 +v 6.544090 -0.001331 4.107810 +v 5.987285 -0.000270 3.860981 +v 5.994822 -0.001553 3.858347 +v 6.074092 0.342735 3.880261 +v 6.076541 0.341506 3.887868 +v 6.459055 0.421652 4.083184 +v 6.465253 0.425454 4.079645 +v 6.455831 0.412305 4.066358 +v 6.452272 0.412185 4.073617 +v 6.453766 0.416156 4.080501 +v 6.441080 0.434055 4.053155 +v 6.471860 0.400566 4.089015 +v 6.478691 0.403231 4.092424 +v 6.469252 0.398640 4.081608 +v 6.462028 0.416106 4.062818 +v 6.480108 0.400542 4.071326 +v 6.472844 0.398698 4.074364 +v 6.468812 0.425574 4.072385 +v 6.485954 0.405075 4.089387 +v 6.489548 0.405133 4.082143 +v 6.467318 0.421603 4.065502 +v 6.493932 0.372464 4.077832 +v 6.486503 0.371267 4.080791 +v 6.500185 0.375406 4.096084 +v 6.503783 0.375443 4.088842 +v 6.486938 0.403207 4.074736 +v 6.501002 0.374194 4.081354 +v 6.504030 0.349392 4.082778 +v 6.492756 0.374209 4.099043 +v 6.482905 0.371230 4.088032 +v 6.489329 0.347791 4.082121 +v 6.485729 0.347770 4.089361 +v 6.485686 0.372479 4.095521 +v 6.526522 -0.003617 4.099624 +v 6.522921 -0.003637 4.106864 +v 5.980074 0.001507 3.857781 +v 5.995660 -0.000286 3.843351 +v 6.496840 0.348446 4.079201 +v 6.534033 -0.002962 4.096703 +v 5.987866 0.000611 3.850567 +v 5.998108 -0.001514 3.850959 +v 5.977625 0.002736 3.850174 +v 6.533505 -0.002484 4.107337 +v 6.541222 -0.002015 4.100281 +v 6.548212 0.396685 3.901388 +v 6.606397 0.396685 3.777745 +v 6.548212 0.411254 3.901388 +v 6.606397 0.411254 3.777745 +v 6.200758 0.411254 3.736407 +v 6.257807 0.411254 3.615176 +v 6.606397 0.382115 3.777745 +v 6.548212 0.382115 3.901388 +v 6.257807 0.382115 3.615176 +v 6.200758 0.382115 3.736407 +vn -0.1729 -0.0000 0.9849 +vn -0.6653 -0.7071 0.2395 +vn -0.9048 -0.0000 -0.4258 +vn -0.2395 -0.7071 -0.6653 +vn -0.0178 0.6667 -0.7451 +vn 0.4258 -0.0000 -0.9048 +vn -0.0000 -1.0000 -0.0000 +vn 0.0286 -0.9977 -0.0619 +vn 0.0290 -0.9976 -0.0627 +vn -0.4258 -0.0000 0.9048 +vn 0.9048 -0.0000 0.4258 +vn -0.0000 1.0000 -0.0000 +vn 0.0294 0.9977 -0.0615 +vn 0.0298 0.9976 -0.0623 +vn -0.0290 0.9976 0.0627 +vn -0.0286 0.9977 0.0619 +vn -0.0287 0.9977 0.0621 +vn -0.0288 0.9976 0.0624 +vn -0.0298 -0.9976 0.0623 +vn -0.0294 -0.9977 0.0615 +vn -0.0296 -0.9977 0.0617 +vn -0.0297 -0.9976 0.0620 +vn -0.2944 0.7224 0.6257 +vn -0.2950 0.7268 0.6202 +vn -0.2950 0.7269 0.6202 +vn -0.4258 -0.0225 0.9046 +vn -0.4255 -0.0215 0.9047 +vn -0.4198 -0.0204 0.9074 +vn 0.4257 0.0218 -0.9046 +vn 0.4269 0.0219 -0.9040 +vn 0.4270 0.0219 -0.9040 +vn 0.3893 0.6937 -0.6059 +vn 0.0093 -0.9998 -0.0197 +vn -0.0093 0.9998 0.0198 +vn 0.3076 0.6915 -0.6536 +vn 0.3031 0.6962 -0.6507 +vn 0.3032 0.6962 -0.6507 +vn -0.0147 0.9997 0.0170 +vn -0.3076 -0.6915 0.6536 +vn 0.2118 -0.7257 -0.6546 +vn 0.1150 0.9903 0.0777 +vn -0.3793 -0.6955 0.6103 +vn 0.2945 -0.7223 -0.6257 +vn 0.4257 0.0221 -0.9046 +vn 0.2987 0.7008 -0.6478 +vn -0.0115 -0.9995 -0.0288 +vn 0.4195 0.0214 -0.9075 +vn 0.4253 0.0224 -0.9048 +vn -0.1077 -0.6683 0.7361 +vn 0.4937 -0.6972 -0.5198 +vn 0.2820 -0.9532 0.1093 +vn 0.4136 0.0184 -0.9103 +vn 0.4187 0.0214 -0.9079 +vn -0.0200 0.9997 0.0141 +vn 0.2788 -0.7326 -0.6210 +vn -0.2956 0.7313 0.6147 +vn -0.3137 -0.7022 0.6391 +vn 0.4087 0.0132 -0.9126 +vn 0.4125 0.0177 -0.9108 +vn -0.4140 -0.0175 0.9101 +vn -0.4190 -0.0204 0.9078 +vn -0.4133 -0.0172 0.9104 +vn -0.4093 -0.0124 0.9123 +vn -0.0883 0.5509 -0.8299 +vn -0.6994 0.5748 0.4247 +vn -0.3119 0.9421 -0.1233 +vn -0.5092 0.6901 0.5142 +vn 0.0939 0.6614 -0.7441 +vn -0.4091 -0.0119 0.9124 +vn -0.4078 -0.0090 0.9130 +vn -0.2284 0.3812 -0.8958 +vn -0.8456 0.3978 0.3559 +vn -0.7702 0.5403 -0.3390 +vn 0.5462 -0.8044 0.2337 +vn 0.6867 -0.5868 -0.4290 +vn 0.0773 -0.5625 0.8232 +vn -0.5712 0.7833 -0.2454 +vn -0.8390 0.3980 -0.3711 +vn 0.2726 -0.2790 0.9208 +vn 0.8954 -0.2912 -0.3367 +vn 0.8380 -0.4005 0.3706 +vn 0.4072 0.0092 -0.9133 +vn 0.4084 0.0122 -0.9127 +vn 0.7527 -0.5692 0.3308 +vn 0.8371 -0.4135 -0.3582 +vn 0.2214 -0.3964 0.8910 +vn -0.4453 -0.0027 0.8954 +vn -0.4453 -0.0025 0.8954 +vn -0.2992 0.1694 -0.9390 +vn 0.8892 0.1162 0.4425 +vn 0.2992 -0.1695 0.9390 +vn -0.8959 0.2899 0.3366 +vn -0.2730 0.2777 -0.9211 +vn -0.4082 -0.0079 0.9129 +vn -0.4073 -0.0056 0.9133 +vn 0.4065 0.0054 -0.9136 +vn 0.4070 0.0070 -0.9134 +vn 0.5581 0.6472 -0.5193 +vn -0.0202 0.6748 0.7377 +vn -0.3101 -0.9356 -0.1687 +vn -0.4285 -0.0216 0.9033 +vn -0.4332 -0.0208 0.9011 +vn -0.4385 -0.0183 0.8985 +vn -0.4340 -0.0205 0.9007 +vn -0.2018 0.7239 0.6597 +vn 0.4286 0.0227 -0.9032 +vn 0.4334 0.0218 -0.9009 +vn -0.0949 -0.9932 -0.0681 +vn -0.4283 -0.0222 0.9034 +vn 0.1600 0.5630 0.8108 +vn -0.5216 -0.8103 -0.2671 +vn -0.4429 -0.0112 0.8965 +vn -0.4395 -0.0173 0.8981 +vn -0.6875 -0.5801 0.4368 +vn 0.4342 0.0211 -0.9006 +vn 0.4388 0.0187 -0.8984 +vn 0.3601 0.9128 0.1926 +vn 0.0434 -0.6896 -0.7229 +vn -0.5328 -0.6617 0.5275 +vn -0.8602 -0.3366 0.3831 +vn -0.2906 -0.3512 -0.8901 +vn 0.7902 0.4682 0.3954 +vn 0.4432 0.0114 -0.8963 +vn 0.4398 0.0175 -0.8979 +vn 0.4437 0.0104 -0.8961 +vn 0.4454 0.0032 -0.8953 +vn 0.7228 0.5405 -0.4306 +vn 0.5932 0.7463 0.3017 +vn -0.1313 -0.6033 -0.7866 +vn 0.8871 0.1344 0.4415 +vn 0.4453 0.0027 -0.8954 +vn 0.9280 0.0928 -0.3610 +vn 0.9285 0.0866 -0.3611 +vn 0.3541 0.0969 0.9302 +vn 0.3544 0.0905 0.9307 +vn 0.3544 0.0904 0.9307 +vn -0.4445 -0.0030 0.8958 +vn -0.4429 -0.0100 0.8965 +vn -0.7835 -0.4821 -0.3921 +vn 0.2930 0.3437 0.8922 +vn 0.8632 0.3294 -0.3825 +vn -0.8892 -0.1162 -0.4426 +vn -0.4065 -0.0053 0.9136 +vn -0.3545 -0.0898 -0.9307 +vn -0.3547 -0.0839 -0.9312 +vn 0.4066 0.0053 -0.9136 +vn -0.3542 -0.0956 -0.9302 +vn -0.9281 -0.0916 0.3610 +vn -0.9286 -0.0860 0.3611 +vn -0.9286 -0.0859 0.3611 +vn -0.8874 -0.1319 -0.4418 +vn -0.1988 -0.9756 -0.0936 +vn -0.1988 -0.9756 -0.0935 +vn 0.1060 -0.9931 0.0499 +vn 0.1060 -0.9931 0.0498 +vn 0.1059 -0.9931 0.0498 +vn 0.9282 -0.1770 -0.3273 +vn 0.4453 0.0025 -0.8954 +vn -0.9282 0.1770 0.3273 +vn -0.9290 -0.0803 0.3611 +vn 0.8863 -0.2449 0.3930 +vn 0.9290 0.0803 -0.3611 +vn -0.8863 0.2449 -0.3930 +vn 0.3547 0.0839 0.9312 +vn -0.4257 -0.0221 0.9046 +vn -0.4253 -0.0224 0.9048 +vn -0.4195 -0.0214 0.9075 +vn 0.2118 -0.7257 -0.6545 +vn -0.3793 -0.6956 0.6102 +vn -0.4269 -0.0219 0.9040 +vn -0.4270 -0.0219 0.9040 +vn -0.4334 -0.0218 0.9010 +vn -0.4288 -0.0228 0.9031 +vn 0.4258 0.0224 -0.9046 +vn 0.4196 0.0214 -0.9074 +vn 0.4254 0.0224 -0.9047 +vn -0.4257 -0.0218 0.9046 +vn -0.1077 -0.6683 0.7360 +vn -0.3137 -0.7023 0.6391 +vn 0.4135 0.0183 -0.9103 +vn 0.4088 0.0133 -0.9125 +vn -0.4135 -0.0183 0.9103 +vn -0.4187 -0.0214 0.9079 +vn -0.4127 -0.0178 0.9107 +vn -0.4087 -0.0131 0.9126 +vn -0.4084 -0.0122 0.9127 +vn -0.4073 -0.0094 0.9132 +vn 0.0773 -0.5626 0.8231 +vn -0.2731 0.2777 -0.9210 +vn 0.2727 -0.2790 0.9208 +vn 0.4072 0.0091 -0.9133 +vn 0.4085 0.0123 -0.9127 +vn 0.2215 -0.3964 0.8910 +vn -0.4452 -0.0027 0.8954 +vn -0.2992 0.1695 -0.9390 +vn 0.2993 -0.1695 0.9390 +vn -0.4070 -0.0070 0.9134 +vn -0.4062 -0.0058 0.9138 +vn 0.4065 0.0055 -0.9136 +vn -0.4388 -0.0187 0.8984 +vn -0.4342 -0.0210 0.9006 +vn -0.5328 -0.6618 0.5275 +vn 0.4283 0.0221 -0.9034 +vn -0.4433 -0.0114 0.8963 +vn -0.4398 -0.0176 0.8979 +vn -0.6875 -0.5802 0.4368 +vn 0.5581 0.6472 -0.5194 +vn -0.8874 -0.1319 -0.4417 +vn -0.4438 -0.0104 0.8961 +vn -0.4454 -0.0032 0.8953 +vn -0.8602 -0.3367 0.3830 +vn -0.8892 -0.1162 -0.4425 +vn -0.4066 -0.0053 0.9136 +vn -0.9281 -0.0916 0.3608 +vn -0.9286 -0.0860 0.3609 +vn -0.9286 -0.0859 0.3609 +vn -0.9291 -0.0803 0.3611 +vn 0.0288 -0.9976 -0.0624 +vn 0.0287 -0.9977 -0.0621 +vn 0.0297 0.9976 -0.0620 +vn 0.0296 0.9977 -0.0617 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.973130 0.033128 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.677629 0.482142 +vt 0.409642 -0.009898 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.669677 0.481452 +vt 0.240570 0.058726 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +vt 0.296927 -0.019617 +vt 0.353285 -0.019617 +vt 0.470812 0.481452 +vt 0.296927 0.014692 +vt 0.271947 0.481452 +vt 0.353285 0.014692 +vt -0.849112 0.025953 +vt 0.468872 0.000137 +vt -0.911121 0.025955 +vt 0.273887 0.000137 +vt 0.475153 0.482142 +vt 0.353285 -0.053929 +vt 0.272677 0.482143 +vt 0.296927 -0.053929 +vt -0.911121 -0.024667 +vt 0.473178 0.006015 +vt -0.849112 -0.024667 +vt 0.274652 0.006015 +s 1 +usemtl Material.066 +f 2118/4821/1083 2119/4823/1084 2120/4826/1085 2390/5335/1085 2391/5337/1085 2121/4828/1085 2122/4830/1086 2123/4834/1087 2124/4835/1085 2125/4836/1085 +f 2123/4833/1087 2122/4831/1086 2126/4838/1088 2127/4841/1088 +f 2128/4843/1089 2129/4846/1090 2130/4849/1091 2131/4850/1089 +f 2132/4854/1092 2133/4855/1092 2119/4824/1084 2118/4820/1083 +f 2133/4856/1093 2132/4853/1093 2134/4858/1093 2135/4860/1093 +f 2136/4861/1093 2137/4864/1093 2134/4858/1093 2132/4853/1093 +f 2136/4862/1092 2132/4854/1092 2118/4820/1083 2138/4866/1092 +f 2131/4851/1088 2123/4833/1087 2127/4841/1088 2128/4844/1088 +f 2138/4867/1085 2118/4821/1085 2125/4836/1085 2124/4835/1085 2123/4834/1085 2131/4852/1085 2130/4848/1085 2394/5343/1085 2395/5345/1085 2139/4870/1085 +f 2131/4852/1085 2130/4848/1085 2124/4835/1085 2123/4834/1085 +f 2125/4837/1093 2118/4822/1093 2138/4868/1093 2139/4871/1093 +f 2389/5334/1093 2387/5330/1093 2140/4873/1093 2141/4874/1093 +f 2127/4842/1093 2126/4839/1093 2141/4874/1093 2140/4873/1093 +f 2386/5329/1093 2134/4858/1093 2137/4864/1093 2393/5342/1093 +f 2129/4847/1093 2128/4845/1093 2127/4842/1093 2140/4873/1093 +f 2133/4857/1094 2135/4859/1095 2120/4827/1096 2119/4825/1094 +f 2121/4829/1097 2141/4875/1098 2126/4840/1094 2122/4832/1094 +f 2391/5338/1099 2389/5333/1100 2141/4875/1098 2121/4829/1097 +f 2139/4872/1101 2137/4865/1102 2136/4863/1089 2138/4869/1089 +f 2395/5346/1103 2393/5341/1104 2137/4865/1102 2139/4872/1101 +f 2142/4876/1105 2143/4877/1105 2144/4878/1106 2145/4880/1107 +f 2146/4881/1108 2145/4879/1108 2147/4884/1109 2148/4886/1110 +f 2149/4888/1111 2150/4889/1111 2151/4890/1112 2152/4892/1113 +f 2151/4890/1114 2153/4893/1114 2154/4895/1114 2155/4897/1114 +f 2156/4899/1115 2157/4900/1115 2158/4901/1115 2159/4903/1115 +f 2160/4905/1116 2143/4877/1116 2161/4906/1116 2153/4894/1116 +f 2150/4889/1117 2160/4904/1117 2153/4893/1117 2151/4890/1117 +f 2162/4907/1118 2163/4908/1119 2160/4904/1117 2150/4889/1117 +f 2163/4909/1120 2144/4878/1120 2143/4877/1116 2160/4905/1116 +f 2164/4910/1121 2156/4898/1121 2159/4902/1121 2165/4911/1121 +f 2146/4882/1121 2166/4914/1121 2156/4898/1121 2164/4910/1121 +f 2166/4913/1115 2167/4915/1115 2157/4900/1115 2156/4899/1115 +f 2158/4901/1122 2152/4891/1122 2168/4917/1122 2169/4918/1122 +f 2153/4894/1123 2161/4906/1123 2170/4919/1123 2154/4896/1123 +f 2165/4911/1124 2159/4902/1124 2171/4921/1124 2172/4923/1124 +f 2157/4900/1125 2149/4887/1125 2152/4891/1125 2158/4901/1125 +f 2167/4915/1125 2173/4925/1125 2149/4887/1125 2157/4900/1125 +f 2173/4924/1126 2162/4907/1126 2150/4889/1111 2149/4888/1111 +f 2163/4908/1119 2162/4907/1118 2174/4926/1127 2175/4928/1127 +f 2167/4915/1128 2166/4913/1128 2176/4929/1128 2177/4931/1128 +f 2162/4907/1126 2173/4924/1126 2178/4932/1129 2174/4926/1130 +f 2179/4934/1105 2161/4906/1105 2143/4877/1105 2142/4876/1105 +f 2176/4930/1131 2148/4885/1131 2180/4937/1131 2181/4939/1131 +f 2178/4933/1132 2177/4931/1132 2182/4940/1132 2183/4942/1132 +f 2177/4931/1133 2176/4929/1133 2181/4938/1133 2182/4940/1133 +f 2174/4926/1130 2178/4932/1129 2183/4943/1134 2184/4944/1135 +f 2144/4878/1120 2163/4909/1120 2175/4927/1136 2185/4945/1136 +f 2173/4925/1137 2167/4915/1137 2177/4931/1137 2178/4933/1137 +f 2145/4880/1107 2144/4878/1106 2185/4945/1138 2147/4883/1138 +f 2166/4914/1139 2146/4882/1139 2148/4885/1139 2176/4930/1139 +f 2184/4944/1135 2183/4943/1134 2186/4946/1140 2187/4947/1141 +f 2180/4937/1142 2188/4948/1143 2189/4951/1144 2190/4952/1145 +f 2191/4953/1146 2184/4944/1146 2187/4947/1146 2192/4955/1146 +f 2188/4948/1147 2193/4958/1147 2194/4960/1147 2189/4951/1147 +f 2185/4945/1148 2175/4927/1148 2191/4954/1148 2193/4959/1148 +f 2147/4883/1149 2185/4945/1149 2193/4959/1149 2188/4949/1149 +f 2175/4928/1150 2174/4926/1150 2184/4944/1150 2191/4953/1150 +f 2148/4886/1110 2147/4884/1109 2188/4950/1143 2180/4936/1142 +f 2190/4952/1145 2189/4951/1144 2195/4964/1151 2196/4965/1152 +f 2192/4955/1153 2187/4947/1153 2197/4966/1153 2198/4968/1153 +f 2189/4951/1154 2194/4960/1154 2199/4969/1154 2195/4964/1154 +f 2194/4961/1155 2192/4956/1155 2198/4967/1155 2199/4970/1155 +f 2182/4940/1156 2181/4938/1156 2200/4971/1156 2201/4974/1156 +f 2183/4943/1157 2182/4941/1157 2201/4976/1157 2186/4946/1157 +f 2181/4939/1158 2180/4937/1158 2190/4952/1158 2200/4973/1158 +f 2193/4959/1159 2191/4954/1159 2192/4957/1159 2194/4962/1159 +f 2199/4970/1160 2198/4967/1160 2202/4978/1160 2203/4979/1160 +f 2204/4981/1161 2196/4965/1161 2205/4982/1161 2206/4983/1161 +f 2207/4985/1162 2208/4987/1162 2209/4989/1162 2210/4991/1162 +f 2208/4987/1163 2204/4980/1163 2206/4984/1163 2209/4989/1163 +f 2187/4947/1141 2186/4946/1140 2207/4986/1164 2197/4966/1165 +f 2201/4975/1166 2200/4972/1166 2204/4980/1166 2208/4987/1166 +f 2186/4946/1167 2201/4976/1167 2208/4988/1167 2207/4986/1167 +f 2200/4973/1168 2190/4952/1168 2196/4965/1168 2204/4981/1168 +f 2211/4992/1169 2212/4994/1169 2213/4996/1170 2214/4997/1170 +f 2202/4977/1171 2215/5000/1171 2216/5001/1171 2217/5003/1171 +f 2218/5006/1172 2219/5008/1172 2220/5010/1172 2221/5011/1172 +f 2206/4983/1173 2205/4982/1173 2222/5014/1173 2223/5016/1173 +f 2195/4963/1174 2199/4970/1174 2203/4979/1174 2224/5020/1174 +f 2198/4968/1175 2197/4966/1175 2215/5000/1175 2202/4977/1175 +f 2196/4965/1152 2195/4964/1151 2224/5019/1176 2205/4982/1177 +f 2197/4966/1165 2207/4986/1164 2210/4990/1178 2215/5000/1179 +f 2155/4897/1180 2154/4895/1180 2225/5021/1180 2226/5023/1180 +f 2170/4919/1181 2227/5024/1181 2228/5026/1181 2229/5030/1181 +f 2171/4920/1182 2169/4918/1182 2230/5031/1182 2231/5033/1182 +f 2227/5025/1183 2172/4922/1184 2232/5035/1185 2228/5027/1186 +f 2161/4906/1187 2179/4934/1187 2227/5024/1187 2170/4919/1187 +f 2152/4892/1113 2151/4890/1112 2155/4897/1188 2168/4916/1189 +f 2159/4903/1190 2158/4901/1190 2169/4918/1190 2171/4920/1190 +f 2179/4935/1191 2165/4912/1191 2172/4922/1184 2227/5025/1183 +f 2229/5029/1192 2228/5028/1192 2233/5037/1192 2234/5040/1192 +f 2231/5033/1193 2230/5031/1193 2235/5041/1193 2236/5044/1193 +f 2228/5028/1186 2232/5036/1185 2237/5047/1194 2233/5037/1195 +f 2232/5036/1196 2231/5034/1196 2236/5045/1196 2237/5047/1196 +f 2168/4916/1189 2155/4897/1188 2226/5023/1197 2238/5049/1198 +f 2154/4896/1199 2170/4919/1199 2229/5030/1199 2225/5022/1199 +f 2169/4918/1200 2168/4917/1200 2238/5048/1200 2230/5031/1200 +f 2172/4923/1201 2171/4921/1201 2231/5034/1201 2232/5036/1201 +f 2237/5047/1202 2236/5045/1202 2239/5050/1202 2240/5052/1202 +f 2235/5042/1203 2241/5053/1203 2242/5054/1203 2243/5056/1203 +f 2244/5058/1204 2234/5038/1204 2245/5061/1204 2246/5063/1204 +f 2241/5053/1205 2247/5065/1206 2248/5066/1207 2242/5054/1208 +f 2226/5023/1209 2225/5021/1209 2244/5060/1209 2247/5065/1209 +f 2238/5049/1198 2226/5023/1197 2247/5065/1206 2241/5053/1205 +f 2225/5022/1210 2229/5030/1210 2234/5039/1210 2244/5059/1210 +f 2230/5032/1211 2238/5049/1211 2241/5053/1211 2235/5042/1211 +f 2246/5063/1212 2245/5061/1212 2219/5008/1212 2218/5006/1212 +f 2242/5054/1208 2248/5066/1207 2249/5067/1213 2250/5069/1213 +f 2248/5066/1214 2246/5064/1214 2218/5007/1215 2249/5067/1215 +f 2245/5061/1216 2251/5070/1216 2211/4993/1217 2219/5008/1218 +f 2233/5037/1195 2237/5047/1194 2240/5052/1219 2251/5071/1220 +f 2236/5046/1221 2235/5043/1221 2243/5057/1221 2239/5051/1221 +f 2234/5040/1222 2233/5037/1222 2251/5071/1222 2245/5062/1222 +f 2247/5065/1223 2244/5060/1223 2246/5064/1223 2248/5066/1223 +f 2252/5072/1224 2253/5074/1224 2254/5075/1224 2255/5077/1224 +f 2205/4982/1177 2224/5019/1176 2256/5080/1225 2222/5014/1225 +f 2253/5074/1226 2250/5068/1226 2257/5083/1227 2254/5075/1227 +f 2215/5000/1179 2210/4990/1178 2258/5086/1228 2216/5001/1228 +f 2243/5057/1229 2242/5055/1229 2250/5068/1226 2253/5074/1226 +f 2240/5052/1230 2239/5050/1230 2252/5073/1231 2212/4994/1232 +f 2251/5071/1220 2240/5052/1219 2212/4994/1169 2211/4992/1169 +f 2239/5051/1233 2243/5057/1233 2253/5074/1233 2252/5072/1233 +f 2259/5089/1234 2217/5004/1235 2216/5002/1234 2258/5087/1235 +f 2223/5017/1234 2259/5089/1234 2258/5087/1235 2260/5090/1235 +f 2222/5015/1234 2256/5081/1234 2259/5089/1234 2223/5017/1234 +f 2256/5081/1234 2261/5092/1235 2217/5004/1235 2259/5089/1234 +f 2262/5094/1236 2221/5012/1237 2220/5009/1237 2214/4998/1238 +f 2255/5078/1236 2262/5094/1236 2214/4998/1238 2213/4995/1238 +f 2254/5076/1236 2257/5084/1236 2262/5094/1236 2255/5078/1236 +f 2257/5084/1236 2263/5095/1236 2221/5012/1237 2262/5094/1236 +f 2210/4991/1239 2209/4989/1239 2260/5091/1239 2258/5088/1239 +f 2250/5069/1213 2249/5067/1213 2263/5096/1240 2257/5085/1240 +f 2224/5020/1241 2203/4979/1241 2261/5093/1241 2256/5082/1241 +f 2212/4994/1232 2252/5073/1231 2255/5079/1242 2213/4996/1242 +f 2209/4989/1243 2206/4984/1243 2223/5018/1243 2260/5091/1243 +f 2249/5067/1215 2218/5007/1215 2221/5013/1244 2263/5096/1244 +f 2203/4979/1245 2202/4978/1245 2217/5005/1245 2261/5093/1245 +f 2219/5008/1218 2211/4993/1217 2214/4999/1246 2220/5010/1246 +f 2264/5098/1105 2265/5099/1105 2266/5100/1106 2267/5102/1107 +f 2268/5103/1247 2267/5101/1247 2269/5105/1248 2270/5106/1249 +f 2271/5107/1250 2272/5109/1250 2273/5112/1250 2274/5114/1250 +f 2275/5116/1115 2276/5117/1115 2271/5108/1115 2277/5120/1115 +f 2278/5122/1116 2265/5099/1116 2279/5123/1116 2280/5124/1116 +f 2281/5126/1117 2278/5121/1117 2280/5125/1117 2282/5127/1117 +f 2283/5128/1117 2284/5129/1117 2278/5121/1117 2281/5126/1117 +f 2284/5130/1120 2266/5100/1120 2265/5099/1116 2278/5122/1116 +f 2285/5131/1121 2275/5115/1121 2277/5119/1121 2286/5132/1121 +f 2268/5103/1121 2287/5134/1121 2275/5115/1121 2285/5131/1121 +f 2287/5133/1115 2288/5135/1115 2276/5117/1115 2275/5116/1115 +f 2280/5124/1123 2279/5123/1123 2289/5137/1123 2290/5139/1123 +f 2286/5132/1251 2277/5119/1251 2291/5140/1251 2292/5142/1251 +f 2293/5143/1252 2286/5132/1253 2292/5142/1254 2294/5145/1255 +f 2276/5118/1125 2295/5147/1125 2272/5109/1125 2271/5107/1125 +f 2288/5136/1125 2296/5149/1125 2295/5147/1125 2276/5118/1125 +f 2284/5129/1127 2283/5128/1127 2297/5150/1127 2298/5152/1127 +f 2288/5135/1128 2287/5133/1128 2299/5153/1128 2300/5155/1128 +f 2283/5128/1256 2296/5148/1256 2301/5158/1257 2297/5150/1258 +f 2285/5131/1259 2264/5097/1259 2267/5101/1247 2268/5103/1247 +f 2286/5132/1253 2293/5143/1252 2264/5097/1259 2285/5131/1259 +f 2293/5144/1105 2279/5123/1105 2265/5099/1105 2264/5098/1105 +f 2302/5159/1148 2298/5151/1148 2303/5161/1148 2304/5163/1148 +f 2299/5154/1260 2270/5106/1260 2305/5165/1260 2306/5167/1260 +f 2301/5157/1132 2300/5156/1132 2307/5168/1132 2308/5171/1132 +f 2300/5155/1133 2299/5153/1133 2306/5166/1133 2307/5170/1133 +f 2266/5100/1120 2284/5130/1120 2298/5151/1136 2302/5159/1136 +f 2296/5149/1137 2288/5136/1137 2300/5156/1137 2301/5157/1137 +f 2267/5102/1107 2266/5100/1106 2302/5159/1138 2269/5104/1138 +f 2287/5134/1261 2268/5103/1261 2270/5106/1261 2299/5154/1261 +f 2308/5172/1157 2307/5169/1157 2309/5176/1157 2310/5177/1157 +f 2307/5170/1156 2306/5166/1156 2311/5178/1156 2309/5174/1156 +f 2312/5182/1135 2308/5172/1262 2310/5177/1263 2313/5183/1141 +f 2305/5165/1264 2314/5185/1265 2315/5186/1266 2316/5187/1267 +f 2269/5104/1149 2302/5159/1149 2304/5163/1149 2314/5184/1149 +f 2298/5152/1150 2297/5150/1150 2312/5181/1150 2303/5160/1150 +f 2270/5106/1249 2269/5105/1248 2314/5185/1265 2305/5165/1264 +f 2297/5150/1258 2301/5158/1257 2308/5173/1262 2312/5181/1135 +f 2316/5187/1267 2315/5186/1266 2317/5189/1268 2318/5190/1269 +f 2319/5193/1153 2313/5183/1153 2320/5194/1153 2321/5195/1153 +f 2315/5186/1154 2322/5199/1154 2323/5200/1154 2317/5189/1154 +f 2322/5197/1155 2319/5191/1155 2321/5196/1155 2323/5201/1155 +f 2306/5167/1270 2305/5165/1270 2316/5187/1270 2311/5180/1270 +f 2304/5163/1159 2303/5161/1159 2319/5192/1159 2322/5198/1159 +f 2314/5185/1147 2304/5164/1147 2322/5199/1147 2315/5186/1147 +f 2303/5162/1146 2312/5182/1146 2313/5183/1146 2319/5193/1146 +f 2321/5195/1271 2320/5194/1271 2324/5202/1271 2325/5203/1271 +f 2317/5188/1174 2323/5201/1174 2326/5205/1174 2327/5207/1174 +f 2323/5201/1160 2321/5196/1160 2325/5204/1160 2326/5205/1160 +f 2328/5208/1272 2318/5190/1272 2329/5210/1272 2330/5211/1272 +f 2313/5183/1141 2310/5177/1263 2331/5213/1273 2320/5194/1274 +f 2309/5175/1166 2311/5179/1166 2328/5209/1166 2332/5216/1166 +f 2310/5177/1167 2309/5176/1167 2332/5215/1167 2331/5213/1167 +f 2311/5180/1275 2316/5187/1275 2318/5190/1275 2328/5208/1275 +f 2333/5217/1276 2334/5219/1276 2335/5221/1170 2336/5222/1170 +f 2325/5203/1277 2324/5202/1277 2337/5225/1277 2338/5227/1277 +f 2339/5231/1172 2340/5233/1172 2341/5235/1172 2342/5236/1172 +f 2330/5211/1278 2329/5210/1278 2343/5240/1278 2344/5242/1278 +f 2318/5190/1269 2317/5189/1268 2327/5206/1279 2329/5210/1280 +f 2320/5194/1274 2331/5213/1273 2345/5246/1281 2324/5202/1179 +f 2332/5216/1163 2328/5209/1163 2330/5212/1163 2346/5248/1163 +f 2331/5214/1162 2332/5216/1162 2346/5248/1162 2345/5247/1162 +f 2289/5137/1181 2294/5146/1181 2347/5249/1181 2348/5251/1181 +f 2291/5141/1182 2274/5113/1182 2349/5255/1182 2350/5257/1182 +f 2294/5145/1255 2292/5142/1254 2351/5258/1282 2347/5250/1283 +f 2292/5142/1284 2291/5140/1284 2350/5256/1284 2351/5258/1284 +f 2282/5127/1114 2280/5125/1114 2290/5138/1114 2352/5259/1114 +f 2279/5123/1187 2293/5144/1187 2294/5146/1187 2289/5137/1187 +f 2272/5110/1285 2282/5127/1285 2352/5259/1188 2273/5111/1189 +f 2277/5120/1190 2271/5108/1190 2274/5113/1190 2291/5141/1190 +f 2347/5250/1283 2351/5258/1282 2353/5260/1286 2354/5261/1287 +f 2351/5258/1288 2350/5256/1288 2355/5263/1288 2353/5260/1288 +f 2349/5253/1211 2356/5267/1211 2357/5268/1211 2358/5269/1211 +f 2359/5273/1210 2348/5251/1210 2360/5275/1210 2361/5278/1210 +f 2352/5259/1289 2290/5138/1289 2359/5272/1289 2362/5281/1289 +f 2273/5111/1189 2352/5259/1188 2362/5281/1197 2356/5265/1198 +f 2290/5139/1199 2289/5137/1199 2348/5251/1199 2359/5273/1199 +f 2274/5114/1200 2273/5112/1200 2356/5266/1200 2349/5254/1200 +f 2358/5269/1203 2357/5268/1203 2363/5283/1203 2364/5285/1203 +f 2361/5279/1204 2360/5276/1204 2365/5288/1204 2366/5290/1204 +f 2357/5268/1205 2367/5291/1206 2368/5292/1207 2363/5283/1208 +f 2367/5291/1223 2361/5280/1223 2366/5289/1223 2368/5292/1223 +f 2350/5257/1193 2349/5255/1193 2358/5270/1193 2355/5262/1193 +f 2348/5252/1192 2347/5250/1192 2354/5261/1192 2360/5277/1192 +f 2362/5282/1209 2359/5274/1209 2361/5280/1209 2367/5291/1209 +f 2356/5267/1198 2362/5282/1197 2367/5291/1206 2357/5268/1205 +f 2368/5292/1214 2366/5289/1214 2339/5232/1215 2369/5293/1215 +f 2365/5288/1216 2370/5294/1216 2333/5218/1217 2340/5233/1218 +f 2371/5296/1290 2364/5286/1290 2372/5298/1290 2373/5299/1290 +f 2370/5295/1291 2374/5301/1292 2334/5219/1276 2333/5217/1276 +f 2353/5260/1293 2355/5263/1293 2371/5297/1293 2374/5301/1293 +f 2354/5261/1287 2353/5260/1286 2374/5301/1292 2370/5295/1291 +f 2355/5264/1221 2358/5271/1221 2364/5286/1221 2371/5296/1221 +f 2360/5277/1222 2354/5261/1222 2370/5295/1222 2365/5287/1222 +f 2373/5299/1294 2372/5298/1294 2375/5302/1294 2376/5304/1294 +f 2329/5210/1280 2327/5206/1279 2377/5308/1295 2343/5240/1295 +f 2324/5202/1179 2345/5246/1281 2378/5311/1228 2337/5225/1228 +f 2372/5298/1226 2379/5314/1226 2380/5316/1227 2375/5302/1227 +f 2363/5283/1208 2368/5292/1207 2369/5293/1213 2379/5315/1213 +f 2366/5290/1212 2365/5288/1212 2340/5233/1212 2339/5231/1212 +f 2364/5286/1229 2363/5284/1229 2379/5314/1226 2372/5298/1226 +f 2374/5301/1296 2371/5297/1296 2373/5300/1297 2334/5219/1298 +f 2381/5319/1234 2338/5228/1235 2337/5226/1234 2378/5312/1235 +f 2344/5243/1234 2381/5319/1234 2378/5312/1235 2382/5321/1235 +f 2343/5241/1234 2377/5309/1234 2381/5320/1234 2344/5244/1234 +f 2377/5309/1234 2383/5323/1235 2338/5229/1235 2381/5320/1234 +f 2384/5325/1236 2342/5237/1237 2341/5234/1237 2336/5223/1238 +f 2376/5305/1236 2384/5325/1236 2336/5223/1238 2335/5220/1238 +f 2375/5303/1236 2380/5317/1236 2384/5326/1236 2376/5306/1236 +f 2380/5317/1236 2385/5327/1236 2342/5238/1237 2384/5326/1236 +f 2345/5247/1239 2346/5248/1239 2382/5322/1239 2378/5313/1239 +f 2379/5315/1213 2369/5293/1213 2385/5328/1240 2380/5318/1240 +f 2327/5207/1241 2326/5205/1241 2383/5324/1241 2377/5310/1241 +f 2334/5219/1298 2373/5300/1297 2376/5307/1299 2335/5221/1299 +f 2346/5248/1243 2330/5212/1243 2344/5245/1243 2382/5322/1243 +f 2369/5293/1215 2339/5232/1215 2342/5239/1244 2385/5328/1244 +f 2326/5205/1245 2325/5204/1245 2338/5230/1245 2383/5324/1245 +f 2340/5233/1218 2333/5218/1217 2336/5224/1246 2341/5235/1246 +f 2130/4849/1091 2129/4846/1090 2392/5339/1300 2394/5344/1301 +f 2394/5344/1301 2392/5339/1300 2393/5341/1104 2395/5346/1103 +f 2120/4827/1096 2135/4859/1095 2388/5331/1302 2390/5336/1303 +f 2390/5336/1303 2388/5331/1302 2389/5333/1100 2391/5338/1099 +f 2140/4873/1093 2387/5330/1093 2392/5340/1093 2129/4847/1093 +f 2387/5330/1093 2386/5329/1093 2393/5342/1093 2392/5340/1093 +f 2135/4860/1093 2134/4858/1093 2386/5329/1093 2388/5332/1093 +f 2388/5332/1093 2386/5329/1093 2387/5330/1093 2389/5334/1093 +o Chair.004 +v 6.151687 0.415382 4.956163 +v 6.151687 0.429951 4.956163 +v 6.165064 0.429951 5.003945 +v 6.273434 0.429951 5.391011 +v 6.286811 0.429951 5.438792 +v 6.286811 0.415382 5.438792 +v 6.273434 0.415382 5.391011 +v 6.165064 0.415382 5.003945 +v 5.916422 0.429951 5.542492 +v 5.916422 0.415382 5.542492 +v 5.916422 0.400812 5.542492 +v 5.904122 0.400812 5.498562 +v 6.273434 0.400812 5.391011 +v 6.286811 0.400812 5.438792 +v 5.781298 0.415382 5.059864 +v 5.781298 0.429951 5.059864 +v 5.793597 0.415382 5.103794 +v 5.793597 0.429951 5.103794 +v 5.781298 0.400812 5.059864 +v 5.793597 0.400812 5.103794 +v 6.151687 0.400812 4.956163 +v 6.165064 0.400812 5.003945 +v 6.305441 0.432961 5.412280 +v 6.301410 0.432961 5.397883 +v 6.297080 0.421009 5.399096 +v 6.301111 0.421009 5.413493 +v 6.309238 0.426967 5.395692 +v 6.313269 0.426967 5.410089 +v 6.179033 0.419106 4.969827 +v 6.183006 0.419106 4.984017 +v 6.195164 0.425064 4.980613 +v 6.191191 0.425064 4.966423 +v 6.183498 0.434699 4.968576 +v 6.187471 0.434699 4.982767 +v 6.315249 0.431853 5.394009 +v 6.319280 0.431853 5.408405 +v 6.201310 0.433592 4.978892 +v 6.197337 0.433592 4.964702 +v 6.209149 0.592772 4.961395 +v 6.195310 0.593879 4.965270 +v 6.317253 0.592141 5.408973 +v 6.313222 0.592141 5.394577 +v 6.331092 0.591033 5.405098 +v 6.348812 0.829840 5.400137 +v 6.334973 0.830948 5.404012 +v 6.226870 0.831579 4.956434 +v 6.213031 0.832686 4.960308 +v 6.327061 0.591033 5.390702 +v 6.199283 0.593879 4.979460 +v 6.213122 0.592772 4.975585 +v 6.325140 0.830737 5.406765 +v 6.331912 0.870951 5.380923 +v 6.323167 0.870348 5.383371 +v 6.207158 0.832325 4.977255 +v 6.203185 0.832325 4.963065 +v 6.213330 0.869634 4.984365 +v 6.217482 0.864490 5.000669 +v 6.344782 0.829840 5.385741 +v 6.186555 0.608202 4.967721 +v 6.217004 0.832686 4.974499 +v 6.230843 0.831579 4.970624 +v 6.330943 0.830948 5.389615 +v 6.344376 0.869953 5.377433 +v 6.308508 0.606614 5.411421 +v 6.304478 0.606614 5.397025 +v 6.321109 0.830737 5.392368 +v 6.190527 0.608202 4.981911 +v 6.222084 0.870373 4.981915 +v 6.226238 0.865229 4.998218 +v 6.238701 0.864232 4.994729 +v 6.306341 0.913073 5.312279 +v 6.314095 0.914244 5.309624 +v 6.244928 0.911897 5.051779 +v 6.236984 0.911148 5.053631 +v 6.339290 0.867524 5.359962 +v 6.326826 0.868521 5.363451 +v 6.310646 0.902898 5.300551 +v 6.324071 0.901824 5.296793 +v 6.318081 0.867919 5.365900 +v 6.234549 0.869376 4.978425 +v 6.246682 0.900855 5.061199 +v 6.260107 0.899781 5.057440 +v 6.258353 0.910823 5.048021 +v 6.327519 0.913170 5.305865 +v 6.238382 0.901346 5.061428 +v 6.302894 0.901727 5.303207 +v 5.904122 0.415382 5.498562 +v 5.904122 0.429951 5.498562 +v 6.102825 0.438060 5.492557 +v 6.104399 0.443651 5.498181 +v 6.230630 0.443651 5.462840 +v 6.229055 0.438060 5.457215 +v 6.229103 0.429976 5.457386 +v 6.260253 0.437950 5.448481 +v 6.257783 0.430300 5.449356 +v 6.108134 0.429903 5.511520 +v 6.108087 0.437987 5.511351 +v 5.981856 0.437987 5.546692 +v 5.981904 0.429903 5.546862 +v 5.980349 0.443828 5.541307 +v 5.949628 0.439408 5.549909 +v 5.953386 0.434055 5.554664 +v 6.104380 0.424135 5.498111 +v 6.106559 0.424311 5.505896 +v 5.980329 0.424311 5.541237 +v 5.978149 0.424135 5.533453 +v 6.106579 0.443828 5.505966 +v 5.978169 0.443651 5.533523 +v 6.234317 0.437987 5.476009 +v 6.232810 0.443828 5.470624 +v 6.102872 0.429976 5.492727 +v 5.976642 0.429976 5.528069 +v 6.230610 0.424135 5.462770 +v 6.232790 0.424311 5.470554 +v 5.956548 0.426646 5.553961 +v 5.957128 0.421521 5.547733 +v 5.947517 0.439247 5.542105 +v 5.955016 0.421360 5.539929 +v 5.951258 0.426713 5.535175 +v 6.234365 0.429903 5.476179 +v 6.265492 0.437881 5.467281 +v 6.265803 0.443408 5.461387 +v 6.257473 0.424773 5.455249 +v 6.259707 0.424940 5.463018 +v 6.263023 0.430231 5.468155 +v 5.976594 0.438060 5.527898 +v 6.285025 0.420977 5.441729 +v 6.283090 0.416357 5.448077 +v 6.285373 0.416497 5.455832 +v 6.290243 0.420919 5.460535 +v 6.294960 0.427313 5.459031 +v 6.263568 0.443241 5.453618 +v 6.313102 0.402967 5.454134 +v 6.319554 0.407418 5.452146 +v 6.289741 0.427371 5.440225 +v 6.314351 0.407458 5.433335 +v 6.307899 0.403008 5.435325 +v 6.296894 0.431932 5.452682 +v 6.322742 0.410634 5.445446 +v 6.294611 0.431793 5.444927 +v 6.320420 0.410537 5.437701 +v 6.331439 0.380352 5.428550 +v 6.323950 0.378323 5.430831 +v 6.336632 0.380334 5.447364 +v 6.340569 0.381800 5.440454 +v 6.338225 0.381756 5.432716 +v 6.304711 0.399792 5.442023 +v 6.307032 0.399889 5.449768 +v 6.355613 0.345795 5.436243 +v 6.353268 0.345756 5.428504 +v 6.320013 0.376856 5.437739 +v 6.338893 0.342751 5.426647 +v 6.334914 0.341467 5.433567 +v 6.329144 0.378304 5.449643 +v 6.322357 0.376901 5.445477 +v 6.337259 0.341506 5.441306 +v 6.344087 0.342735 5.445459 +v 5.881058 0.349401 5.554646 +v 5.888838 0.348454 5.552652 +v 5.849255 -0.002953 5.563733 +v 5.841475 -0.002007 5.565728 +v 6.351633 0.344511 5.443164 +v 6.435106 0.001491 5.419794 +v 6.439086 0.002774 5.412872 +v 5.879297 0.350077 5.569600 +v 5.877285 0.350056 5.561768 +v 5.837703 -0.001352 5.572850 +v 5.839714 -0.001331 5.580682 +v 6.422366 -0.000270 5.403275 +v 6.418386 -0.001553 5.410197 +v 6.346440 0.344527 5.424350 +v 5.919830 0.425574 5.558251 +v 5.925462 0.421603 5.562481 +v 5.948096 0.434122 5.535877 +v 5.920149 0.421652 5.543702 +v 5.917775 0.425454 5.550432 +v 5.933592 0.412305 5.554322 +v 5.931537 0.412185 5.546503 +v 5.925905 0.416156 5.542274 +v 5.899251 0.403231 5.549552 +v 5.895743 0.405075 5.556601 +v 5.915486 0.398698 5.559392 +v 5.913466 0.398640 5.551562 +v 5.906649 0.400566 5.547665 +v 5.931219 0.416106 5.561052 +v 5.898937 0.371230 5.555630 +v 5.891934 0.372479 5.551785 +v 5.911977 0.400542 5.566440 +v 5.897264 0.372464 5.570559 +v 5.900949 0.371267 5.563462 +v 5.897762 0.405133 5.564430 +v 5.880597 0.375406 5.560841 +v 5.882611 0.375443 5.568672 +v 5.904580 0.403207 5.568328 +v 5.889613 0.374194 5.572518 +v 5.886391 0.349392 5.573421 +v 5.894169 0.348446 5.571426 +v 5.884282 0.374209 5.553743 +v 5.895931 0.347770 5.556472 +v 5.897941 0.347791 5.564304 +v 5.858358 -0.003617 5.575386 +v 5.856348 -0.003637 5.567554 +v 6.429914 0.001507 5.400980 +v 5.854586 -0.002962 5.582508 +v 6.427560 -0.000286 5.422089 +v 6.428737 0.000611 5.411535 +v 6.420732 -0.001514 5.417935 +v 6.436741 0.002736 5.405134 +v 5.848031 -0.002484 5.574119 +v 5.846807 -0.002015 5.584503 +v 5.961673 0.438060 4.988400 +v 5.963248 0.443651 4.994025 +v 6.089478 0.443651 4.958684 +v 6.087903 0.438060 4.953059 +v 6.087951 0.429976 4.953228 +v 6.119101 0.437950 4.944324 +v 6.116631 0.430300 4.945199 +v 5.839178 0.424311 5.037081 +v 5.840752 0.429903 5.042706 +v 5.815396 0.426646 5.049805 +v 5.815976 0.421521 5.043577 +v 5.963228 0.424135 4.993955 +v 5.965407 0.424311 5.001740 +v 5.836998 0.424135 5.029296 +v 5.965427 0.443828 5.001810 +v 5.837018 0.443651 5.029367 +v 5.839197 0.443828 5.037151 +v 5.966935 0.437987 5.007195 +v 5.840705 0.437987 5.042536 +v 6.093165 0.437987 4.971853 +v 6.091658 0.443828 4.966468 +v 5.961720 0.429976 4.988570 +v 5.835490 0.429976 5.023911 +v 6.089459 0.424135 4.958613 +v 6.091638 0.424311 4.966398 +v 5.806365 0.439247 5.037949 +v 5.808476 0.439408 5.045753 +v 5.813865 0.421360 5.035773 +v 5.810106 0.426713 5.031018 +v 5.835443 0.438060 5.023742 +v 5.806945 0.434122 5.031721 +v 5.966982 0.429903 5.007364 +v 6.093213 0.429903 4.972023 +v 6.124341 0.437881 4.963125 +v 6.124651 0.443408 4.957231 +v 6.116321 0.424773 4.951093 +v 6.118555 0.424940 4.958862 +v 6.121871 0.430231 4.963999 +v 6.122417 0.443241 4.949462 +v 6.155743 0.431932 4.948526 +v 6.153459 0.431793 4.940771 +v 6.143873 0.420977 4.937572 +v 6.141939 0.416357 4.943920 +v 6.144221 0.416497 4.951676 +v 6.149091 0.420919 4.956378 +v 6.165880 0.399889 4.945612 +v 6.171950 0.402967 4.949978 +v 6.163559 0.399792 4.937867 +v 6.153808 0.427313 4.954875 +v 6.178402 0.407418 4.947989 +v 6.148589 0.427371 4.936069 +v 6.173199 0.407458 4.929178 +v 6.166747 0.403008 4.931168 +v 6.190287 0.380352 4.924394 +v 6.182798 0.378323 4.926674 +v 6.181590 0.410634 4.941289 +v 6.195480 0.380334 4.943208 +v 6.199417 0.381800 4.936298 +v 6.179269 0.410537 4.933545 +v 6.197073 0.381756 4.928560 +v 6.210482 0.344511 4.939007 +v 6.214462 0.345795 4.932086 +v 6.212117 0.345756 4.924348 +v 6.205289 0.344527 4.920194 +v 6.178861 0.376856 4.933583 +v 6.197741 0.342751 4.922490 +v 6.193762 0.341467 4.929411 +v 6.187993 0.378304 4.945487 +v 6.181205 0.376901 4.941321 +v 5.739906 0.349401 5.050490 +v 5.747685 0.348454 5.048495 +v 5.708103 -0.002953 5.059577 +v 5.700324 -0.002007 5.061572 +v 6.293954 0.001491 4.915637 +v 6.297935 0.002774 4.908716 +v 5.738145 0.350077 5.065444 +v 5.736134 0.350056 5.057612 +v 5.696551 -0.001352 5.068694 +v 5.698562 -0.001331 5.076526 +v 6.281214 -0.000270 4.899119 +v 6.277235 -0.001553 4.906041 +v 6.202935 0.342735 4.941303 +v 6.196107 0.341506 4.937150 +v 5.778997 0.421652 5.039546 +v 5.776623 0.425454 5.046276 +v 5.792440 0.412305 5.050166 +v 5.790385 0.412185 5.042347 +v 5.784753 0.416156 5.038116 +v 5.812234 0.434055 5.050508 +v 5.765497 0.400566 5.043508 +v 5.758100 0.403231 5.045396 +v 5.772314 0.398640 5.047406 +v 5.790067 0.416106 5.056896 +v 5.770825 0.400542 5.062284 +v 5.774334 0.398698 5.055236 +v 5.778678 0.425574 5.054095 +v 5.754591 0.405075 5.052444 +v 5.756610 0.405133 5.060274 +v 5.784310 0.421603 5.058325 +v 5.756113 0.372464 5.066403 +v 5.759798 0.371267 5.059306 +v 5.739446 0.375406 5.056684 +v 5.741459 0.375443 5.064516 +v 5.763428 0.403207 5.064172 +v 5.748461 0.374194 5.068362 +v 5.745239 0.349392 5.069264 +v 5.743131 0.374209 5.049587 +v 5.757784 0.371230 5.051475 +v 5.756790 0.347791 5.060148 +v 5.754778 0.347770 5.052316 +v 5.750782 0.372479 5.047627 +v 5.717206 -0.003617 5.071230 +v 5.715196 -0.003637 5.063398 +v 6.288762 0.001507 4.896823 +v 6.286408 -0.000286 4.917933 +v 5.753017 0.348446 5.067270 +v 5.713434 -0.002962 5.078352 +v 6.287585 0.000611 4.907378 +v 6.279580 -0.001514 4.913779 +v 6.295589 0.002736 4.900978 +v 5.706879 -0.002484 5.069962 +v 5.705656 -0.002015 5.080347 +vn 0.9630 -0.0000 -0.2696 +vn 0.2696 -0.0000 0.9630 +vn -0.0000 -1.0000 -0.0000 +vn -0.2696 -0.0000 -0.9630 +vn -0.9630 -0.0000 0.2696 +vn -0.1147 0.9929 0.0321 +vn 0.2538 -0.9646 -0.0711 +vn 0.4110 -0.9044 -0.1151 +vn 0.2912 -0.0911 -0.9523 +vn 0.1562 -0.9868 -0.0437 +vn -0.1651 0.9852 0.0462 +vn 0.7195 -0.0779 0.6901 +vn 0.8469 -0.1146 0.5192 +vn 0.4132 -0.0987 -0.9053 +vn 0.5936 -0.7874 -0.1662 +vn 0.7710 -0.5992 -0.2159 +vn -0.9601 0.0768 0.2688 +vn 0.9601 -0.0768 -0.2688 +vn 0.3278 -0.2916 0.8986 +vn 0.2126 0.5027 0.8379 +vn -0.9586 0.1047 0.2650 +vn -0.9558 0.1119 0.2720 +vn -0.9562 0.1062 0.2727 +vn 0.9544 -0.0656 0.2912 +vn 0.2707 0.4967 0.8247 +vn -0.9608 0.0768 0.2665 +vn -0.8130 -0.5359 0.2276 +vn -0.2577 0.5287 -0.8088 +vn 0.1676 -0.6113 0.7734 +vn -0.5027 -0.8531 0.1395 +vn -0.8159 -0.5326 0.2251 +vn -0.8161 -0.5337 0.2219 +vn -0.8157 -0.5315 0.2284 +vn -0.1150 0.9931 0.0226 +vn -0.1577 0.9648 -0.2103 +vn -0.1618 0.9584 -0.2353 +vn -0.1915 -0.8811 -0.4323 +vn 0.1049 -0.8634 -0.4935 +vn 0.5385 -0.7743 -0.3324 +vn -0.2634 -0.5705 -0.7779 +vn 0.6800 -0.3669 -0.6349 +vn 0.6242 -0.3997 -0.6713 +vn 0.9613 -0.0465 -0.2715 +vn -0.9579 0.1108 0.2649 +vn -0.9580 0.1116 0.2640 +vn 0.9612 -0.0794 -0.2641 +vn -0.1909 0.5223 -0.8311 +vn 0.9638 -0.0401 -0.2636 +vn -0.9578 0.1101 0.2656 +vn 0.9634 -0.0584 -0.2617 +vn 0.6325 -0.7742 0.0241 +vn 0.9611 -0.0813 -0.2641 +vn 0.9593 -0.0847 -0.2695 +vn 0.9633 -0.0769 -0.2573 +vn 0.2007 0.8588 0.4713 +vn 0.0019 0.9633 -0.2684 +vn 0.0718 0.9970 -0.0283 +vn 0.0016 0.9630 -0.2693 +vn 0.0635 0.8610 0.5047 +vn -0.9594 0.0845 0.2690 +vn -0.9612 0.0831 0.2629 +vn -0.9618 0.0796 0.2618 +vn -0.9632 0.0778 0.2573 +vn 0.0630 -0.8773 0.4758 +vn -0.0046 -0.9658 0.2594 +vn -0.9574 0.0880 0.2750 +vn 0.9572 -0.0886 -0.2755 +vn -0.0687 0.8673 -0.4930 +vn -0.1945 0.8695 -0.4540 +vn -0.9601 0.0744 0.2694 +vn -0.9616 0.0849 0.2610 +vn -0.0720 -0.9970 0.0277 +vn 0.9599 -0.0732 -0.2706 +vn -0.9598 0.0723 0.2711 +vn -0.0000 1.0000 -0.0000 +vn -0.1864 0.7224 -0.6659 +vn -0.1824 0.7268 -0.6621 +vn -0.1824 0.7269 -0.6621 +vn -0.2695 -0.0225 -0.9627 +vn -0.2698 -0.0215 -0.9627 +vn -0.2758 -0.0204 -0.9610 +vn 0.2695 0.0218 0.9627 +vn 0.2682 0.0219 0.9631 +vn 0.2681 0.0219 0.9631 +vn 0.1017 0.6937 0.7130 +vn 0.0059 -0.9998 0.0210 +vn -0.0059 0.9998 -0.0211 +vn 0.1947 0.6915 0.6956 +vn 0.1962 0.6962 0.6905 +vn -0.0000 0.9997 -0.0224 +vn -0.1948 -0.6915 -0.6956 +vn 0.2678 -0.7257 0.6337 +vn -0.1378 0.9903 0.0165 +vn -0.1121 -0.6955 -0.7097 +vn 0.1864 -0.7223 0.6659 +vn 0.2695 0.0221 0.9627 +vn 0.1976 0.7008 0.6854 +vn 0.0275 -0.9995 0.0142 +vn 0.2761 0.0214 0.9609 +vn 0.2699 0.0224 0.9626 +vn -0.3999 -0.6683 -0.6273 +vn -0.0336 -0.6972 0.7161 +vn -0.2849 -0.9532 0.1017 +vn 0.2825 0.0183 0.9591 +vn 0.2770 0.0214 0.9606 +vn 0.0059 0.9997 -0.0238 +vn 0.1952 -0.7326 0.6521 +vn -0.1784 0.7313 -0.6584 +vn -0.1807 -0.7022 -0.6887 +vn 0.2877 0.0132 0.9576 +vn 0.2834 0.0178 0.9588 +vn -0.2820 -0.0175 -0.9592 +vn -0.2766 -0.0205 -0.9608 +vn -0.2827 -0.0172 -0.9591 +vn -0.2870 -0.0124 -0.9579 +vn 0.6095 0.5509 0.5701 +vn 0.2513 0.5748 -0.7787 +vn 0.3166 0.9421 -0.1107 +vn 0.0490 0.6901 -0.7220 +vn 0.4156 0.6614 0.6244 +vn -0.2873 -0.0119 -0.9578 +vn -0.2886 -0.0090 -0.9574 +vn 0.7586 0.3812 0.5283 +vn 0.4070 0.3978 -0.8223 +vn 0.8043 0.5403 -0.2473 +vn -0.5660 -0.8044 0.1804 +vn -0.2390 -0.5868 0.7736 +vn -0.5968 -0.5625 -0.5722 +vn 0.5926 0.7833 -0.1879 +vn 0.8774 0.3980 -0.2680 +vn -0.8084 -0.2790 -0.5183 +vn -0.4572 -0.2912 0.8403 +vn -0.8763 -0.4005 0.2677 +vn 0.2892 0.0092 0.9572 +vn 0.2879 0.0122 0.9576 +vn -0.7858 -0.5692 0.2420 +vn -0.3990 -0.4135 0.8184 +vn -0.7502 -0.3964 -0.5293 +vn -0.2486 -0.0027 -0.9686 +vn -0.2487 -0.0025 -0.9686 +vn 0.8404 0.1694 0.5147 +vn -0.9621 0.1162 0.2467 +vn -0.8405 -0.1695 -0.5147 +vn 0.4576 0.2899 -0.8406 +vn 0.8089 0.2777 0.5183 +vn -0.2881 -0.0080 -0.9576 +vn -0.2891 -0.0055 -0.9573 +vn 0.2899 0.0054 0.9570 +vn 0.2895 0.0070 0.9572 +vn -0.0825 0.6472 0.7579 +vn -0.4672 0.6748 -0.5713 +vn 0.3449 -0.9356 -0.0752 +vn -0.2665 -0.0216 -0.9636 +vn -0.2615 -0.0207 -0.9650 +vn -0.2558 -0.0182 -0.9666 +vn -0.2607 -0.0205 -0.9652 +vn -0.2788 0.7239 -0.6311 +vn 0.2664 0.0227 0.9636 +vn 0.2613 0.0218 0.9650 +vn 0.1163 -0.9932 -0.0105 +vn -0.2668 -0.0222 -0.9635 +vn -0.6513 0.5630 -0.5088 +vn 0.5692 -0.8103 -0.1390 +vn -0.2513 -0.0112 -0.9679 +vn -0.2548 -0.0173 -0.9668 +vn 0.2344 -0.5801 -0.7801 +vn 0.2605 0.0211 0.9652 +vn 0.2555 0.0187 0.9666 +vn -0.3984 0.9128 0.0898 +vn 0.4399 -0.6896 0.5753 +vn 0.0581 -0.6617 -0.7475 +vn 0.4002 -0.3366 -0.8523 +vn 0.8019 -0.3512 0.4833 +vn -0.8564 0.4682 0.2177 +vn 0.2509 0.0114 0.9680 +vn 0.2545 0.0175 0.9669 +vn 0.2503 0.0104 0.9681 +vn 0.2485 0.0032 0.9686 +vn -0.2652 0.5405 0.7984 +vn -0.6461 0.7463 0.1597 +vn 0.6138 -0.6033 0.5092 +vn -0.9599 0.1344 0.2462 +vn 0.2487 0.0027 0.9686 +vn -0.4659 0.0928 0.8799 +vn -0.4663 0.0866 0.8804 +vn -0.8762 0.0969 -0.4722 +vn -0.8768 0.0905 -0.4723 +vn -0.8768 0.0904 -0.4723 +vn -0.2495 -0.0030 -0.9684 +vn -0.2513 -0.0100 -0.9679 +vn 0.8492 -0.4821 -0.2157 +vn -0.8051 0.3437 -0.4833 +vn -0.4029 0.3294 0.8539 +vn 0.9621 -0.1162 -0.2467 +vn -0.2899 -0.0053 -0.9570 +vn 0.8769 -0.0898 0.4723 +vn 0.8773 -0.0839 0.4725 +vn 0.2899 0.0053 0.9571 +vn 0.8764 -0.0956 0.4721 +vn 0.4660 -0.0916 -0.8800 +vn 0.4663 -0.0860 -0.8804 +vn 0.4664 -0.0859 -0.8804 +vn 0.9602 -0.1319 -0.2461 +vn 0.2116 -0.9756 -0.0592 +vn 0.2116 -0.9756 -0.0593 +vn -0.1128 -0.9931 0.0316 +vn -0.1127 -0.9931 0.0316 +vn -0.1128 -0.9931 0.0315 +vn -0.4881 -0.1770 0.8546 +vn 0.2487 0.0025 0.9686 +vn 0.4881 0.1770 -0.8546 +vn 0.4667 -0.0803 -0.8808 +vn -0.9275 -0.2449 0.2823 +vn -0.4667 0.0803 0.8808 +vn 0.9275 0.2449 -0.2823 +vn -0.8773 0.0839 -0.4725 +vn -0.2695 -0.0221 -0.9627 +vn -0.2699 -0.0224 -0.9626 +vn -0.2762 -0.0214 -0.9609 +vn -0.1947 -0.6915 -0.6956 +vn -0.1121 -0.6956 -0.7097 +vn -0.2682 -0.0219 -0.9631 +vn -0.2681 -0.0219 -0.9631 +vn -0.2613 -0.0218 -0.9650 +vn -0.2662 -0.0228 -0.9636 +vn 0.2695 0.0224 0.9628 +vn -0.2695 -0.0218 -0.9627 +vn -0.3999 -0.6683 -0.6272 +vn -0.1806 -0.7023 -0.6886 +vn -0.2825 -0.0183 -0.9591 +vn -0.2770 -0.0214 -0.9606 +vn -0.2834 -0.0178 -0.9588 +vn -0.2877 -0.0131 -0.9576 +vn -0.2879 -0.0123 -0.9576 +vn -0.2892 -0.0092 -0.9572 +vn -0.5968 -0.5626 -0.5721 +vn 0.5926 0.7833 -0.1880 +vn 0.8089 0.2777 0.5182 +vn -0.8085 -0.2790 -0.5182 +vn 0.2892 0.0091 0.9572 +vn 0.2879 0.0123 0.9576 +vn -0.7502 -0.3964 -0.5292 +vn -0.2487 -0.0027 -0.9686 +vn 0.8405 0.1695 0.5147 +vn -0.2895 -0.0070 -0.9572 +vn -0.2904 -0.0057 -0.9569 +vn 0.2899 0.0055 0.9570 +vn -0.2555 -0.0187 -0.9666 +vn -0.2605 -0.0210 -0.9652 +vn 0.0581 -0.6618 -0.7475 +vn 0.2668 0.0221 0.9635 +vn -0.2508 -0.0114 -0.9680 +vn -0.2545 -0.0176 -0.9669 +vn 0.2345 -0.5802 -0.7800 +vn 0.9602 -0.1319 -0.2463 +vn -0.2503 -0.0104 -0.9681 +vn -0.2485 -0.0032 -0.9686 +vn 0.4003 -0.3367 -0.8523 +vn 0.8491 -0.4821 -0.2158 +vn -0.2899 -0.0053 -0.9571 +vn 0.4662 -0.0916 -0.8799 +vn 0.4665 -0.0860 -0.8804 +vn 0.4665 -0.0859 -0.8804 +vn 0.4667 -0.0803 -0.8807 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt 0.686647 0.000000 +vt 0.870176 0.996278 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.782584 0.965408 +vt 0.870573 0.970227 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.833010 0.965282 +vt 0.908785 0.026051 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.968598 0.070112 +vt 0.979071 0.026051 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.968598 0.371019 +vt 0.757324 0.262250 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.173427 0.241164 +vt 0.758439 0.080128 +vt -0.973130 0.033128 +vt -0.123087 0.241439 +vt 0.978437 0.000000 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt 0.737072 0.000128 +vt 0.908263 0.000000 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.409642 -0.009898 +vt 0.677629 0.482142 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.240570 0.058726 +vt 0.669677 0.481452 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.786789 0.246652 +vt 0.991724 0.699406 +vt 0.928489 0.277215 +vt 0.873308 0.505274 +vt 0.786789 0.155990 +vt 0.958960 0.029326 +vt 0.991724 0.483440 +vt 0.977373 0.702462 +vt -0.140978 0.246673 +vt 0.958492 0.010078 +vt -0.156145 0.246590 +vt 0.929566 0.080357 +vt -0.144664 0.252235 +vt 0.984385 0.731379 +vt 0.945934 0.020741 +vt -0.159831 0.252152 +vt 0.984385 0.500820 +vt 0.989649 0.087406 +vt 0.706860 0.007022 +vt 0.847263 0.989602 +vt 0.686599 0.714388 +vt 0.721837 0.007060 +vt 0.884682 0.006674 +vt 0.720919 0.017861 +vt 0.673632 0.527027 +vt 0.872079 0.017335 +vt 0.705942 0.017823 +vt 0.673632 0.731676 +vt 0.690157 0.523535 +vt 0.802894 0.958412 +vt 0.847659 0.963551 +vt 0.695298 0.714388 +vt 0.661237 0.495044 +vt 0.817871 0.958374 +vt 0.885205 0.032725 +vt 0.661237 0.722645 +vt 0.693293 0.503638 +vt 0.944329 0.029337 +vt 0.981154 0.731379 +vt 0.977373 0.486830 +vt 0.989649 0.263822 +vt 0.873305 0.723869 +vt 0.981154 0.500820 +vt 0.870573 0.032734 +vt 0.693293 0.761173 +vt 0.679412 0.527027 +vt 0.695298 0.493838 +vt 0.679412 0.731676 +vt 0.826600 0.493835 +vt 0.826977 0.731673 +vt 0.826600 0.714385 +vt 0.814491 0.495042 +vt 0.122435 0.638558 +vt 0.015922 0.839080 +vt 0.835047 0.699404 +vt 0.993361 0.510073 +vt 0.758428 0.504317 +vt 0.072861 0.638558 +vt 0.015474 0.619132 +vt 0.835047 0.483438 +vt 0.845328 0.702461 +vt 0.015197 0.626266 +vt 0.014109 0.491099 +vt 0.993356 0.728667 +vt 0.758425 0.722912 +vt 0.833436 0.500823 +vt 0.891028 0.725398 +vt 0.672547 0.500827 +vt 0.752235 0.729690 +vt 0.667246 0.727168 +vt 0.891033 0.506802 +vt 0.752238 0.507120 +vt 0.071993 0.783837 +vt 0.969610 0.493832 +vt 0.987699 0.731670 +vt 0.641343 0.509140 +vt 0.689355 0.726560 +vt 0.969610 0.714382 +vt 0.122436 0.783837 +vt 0.641344 0.743247 +vt 0.833436 0.731382 +vt 0.845328 0.486829 +vt 0.814491 0.722643 +vt 0.825052 0.503733 +vt 0.016195 0.832047 +vt 0.634466 0.494220 +vt 0.825052 0.761267 +vt 0.826977 0.527024 +vt 0.022424 0.783234 +vt 0.035852 0.889154 +vt 0.043016 0.971597 +vt 0.706398 0.505224 +vt 0.072863 0.808180 +vt 0.028940 0.807392 +vt 0.010039 0.882150 +vt 0.137154 0.974703 +vt 0.631023 0.892124 +vt 0.649326 0.890699 +vt 0.121379 0.984023 +vt 0.648470 0.892315 +vt 0.072864 0.783142 +vt 0.043889 0.943476 +vt 0.078385 0.805896 +vt 0.075977 0.941215 +vt 0.613560 0.946909 +vt 0.672547 0.731385 +vt 0.701510 0.486829 +vt 0.669481 0.490576 +vt 0.072863 0.646796 +vt 0.648470 0.506013 +vt 0.080915 0.841605 +vt 0.968560 0.503835 +vt 0.102906 0.865583 +vt 0.634467 0.887149 +vt 0.987699 0.527021 +vt 0.968560 0.761369 +vt 0.690090 0.495972 +vt 0.701510 0.702461 +vt 0.603150 0.865583 +vt 0.014109 0.884028 +vt 0.706395 0.729929 +vt 0.816556 0.714481 +vt 0.023239 0.646888 +vt 0.040534 0.495932 +vt 0.081188 0.621686 +vt 0.007711 0.495744 +vt 0.041481 0.497122 +vt 0.080911 0.628820 +vt 0.003028 0.888966 +vt 0.041481 0.887645 +vt 0.060838 0.971173 +vt 0.631023 0.505822 +vt 0.649326 0.500176 +vt 0.081188 0.834572 +vt 0.805889 0.743046 +vt 0.122312 0.806766 +vt 0.988155 0.503653 +vt 0.115555 0.935422 +vt 0.904138 0.912557 +vt 0.988155 0.735605 +vt 0.813022 0.494763 +vt 0.890960 0.912565 +vt 0.735836 0.641861 +vt 0.693936 0.468644 +vt 0.027417 0.833361 +vt 0.420996 0.961603 +vt 0.032040 0.784613 +vt 0.284612 0.483847 +vt 0.656925 0.504187 +vt 0.681549 0.720168 +vt 0.066750 0.834450 +vt 0.299225 0.449509 +vt 0.999708 0.720167 +vt 0.989627 0.743247 +vt 0.121899 0.832034 +vt 0.693936 0.449159 +vt 0.420996 0.999935 +vt 0.008277 0.862094 +vt 0.082562 0.831201 +vt 0.741580 0.718717 +vt 0.678836 0.505353 +vt 0.815743 0.487362 +vt 0.741523 0.585977 +vt 0.678836 0.699564 +vt 0.553315 0.945729 +vt 0.982243 0.588758 +vt 0.460393 1.018433 +vt 0.949871 0.788878 +vt 0.982305 0.727355 +vt 0.668954 0.502598 +vt 0.949657 0.691167 +vt 0.979056 0.490574 +vt 0.078628 0.952623 +vt 0.035428 0.887064 +vt 0.812426 0.730862 +vt 0.971935 0.642457 +vt 0.805889 0.532195 +vt 0.173975 1.012235 +vt 0.908785 0.976444 +vt 0.726484 0.788878 +vt 0.984477 0.500479 +vt 0.894591 0.976453 +vt 0.737043 0.505375 +vt 0.726270 0.691167 +vt 0.987420 0.694407 +vt 0.999899 0.506981 +vt 0.968797 0.500648 +vt 0.989626 0.516135 +vt 0.652223 0.697892 +vt 0.656922 0.730164 +vt 0.681740 0.506981 +vt 0.985798 0.713641 +vt 0.053549 0.993732 +vt 0.043551 0.873068 +vt 0.522988 0.991572 +vt 0.062665 0.961706 +vt 0.169656 0.991799 +vt 0.060838 0.809705 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +s 1 +usemtl Material.067 +f 2396/5348/1304 2397/5352/1304 2398/5357/1304 2399/5361/1304 2400/5365/1304 2401/5371/1304 2402/5374/1304 2403/5377/1304 +f 2401/5370/1305 2400/5366/1305 2404/5381/1305 2405/5384/1305 +f 2406/5386/1306 2407/5390/1306 2408/5392/1306 2409/5393/1306 +f 2410/5397/1307 2411/5398/1307 2397/5353/1307 2396/5347/1307 +f 2411/5399/1308 2410/5396/1308 2412/5401/1308 2413/5402/1308 +f 2414/5404/1308 2415/5407/1308 2412/5401/1308 2410/5396/1308 +f 2414/5405/1307 2410/5397/1307 2396/5347/1307 2416/5409/1307 +f 2409/5394/1305 2401/5370/1305 2405/5384/1305 2406/5387/1305 +f 2416/5410/1304 2396/5348/1304 2403/5377/1304 2402/5374/1304 2401/5371/1304 2409/5395/1304 2408/5391/1304 2417/5413/1304 +f 2399/5362/1309 2400/5367/1309 2418/5416/1309 2419/5420/1309 +f 2409/5395/1304 2408/5391/1304 2402/5374/1304 2401/5371/1304 +f 2403/5378/1308 2396/5349/1308 2416/5411/1308 2417/5414/1308 +f 2401/5372/1310 2402/5375/1310 2420/5424/1310 2421/5426/1310 +f 2421/5426/1311 2420/5424/1311 2422/5428/1311 2423/5431/1311 +f 2424/5434/1311 2427/5442/1311 2426/5439/1311 2425/5437/1311 +f 2402/5376/1312 2399/5363/1312 2419/5421/1312 2420/5425/1312 +f 2396/5350/1313 2424/5434/1313 2425/5437/1313 2403/5379/1313 +f 2398/5358/1314 2429/5449/1314 2428/5445/1314 2397/5354/1314 +f 2403/5380/1315 2425/5438/1315 2429/5450/1315 2398/5359/1315 +f 2400/5368/1316 2401/5373/1316 2421/5427/1316 2418/5418/1316 +f 2397/5355/1317 2428/5446/1317 2424/5435/1317 2396/5351/1317 +f 2423/5432/1318 2422/5429/1318 2430/5454/1318 2431/5458/1318 +f 2432/5461/1319 2426/5440/1319 2427/5443/1319 2433/5463/1319 +f 2428/5447/1307 2435/5466/1307 2434/5464/1307 2433/5462/1307 +f 2420/5425/1307 2419/5421/1307 2430/5453/1307 2422/5430/1307 +f 2419/5422/1320 2418/5417/1320 2436/5470/1320 2437/5475/1320 +f 2428/5447/1307 2433/5462/1307 2427/5444/1307 2424/5436/1307 +f 2418/5418/1305 2421/5427/1305 2423/5433/1305 2431/5456/1305 +f 2425/5438/1305 2426/5441/1305 2432/5459/1305 2429/5450/1305 +f 2436/5471/1305 2438/5479/1305 2439/5482/1305 2440/5486/1305 +f 2435/5466/1307 2442/5493/1307 2441/5489/1307 2434/5464/1307 +f 2418/5419/1305 2431/5457/1305 2438/5480/1305 2436/5472/1305 +f 2431/5458/1321 2430/5454/1321 2443/5496/1321 2438/5481/1321 +f 2429/5451/1320 2444/5498/1320 2435/5467/1320 2428/5448/1320 +f 2432/5460/1305 2445/5502/1305 2444/5499/1322 2429/5452/1305 +f 2433/5463/1321 2434/5465/1321 2445/5503/1321 2432/5461/1321 +f 2430/5455/1307 2419/5423/1307 2437/5476/1307 2443/5497/1307 +f 2446/5504/1323 2440/5488/1323 2447/5508/1323 2448/5509/1323 +f 2449/5511/1324 2452/5519/1325 2451/5517/1326 2450/5514/1326 +f 2438/5481/1321 2443/5496/1321 2453/5521/1321 2439/5483/1321 +f 2435/5468/1307 2454/5524/1307 2450/5516/1307 2442/5494/1307 +f 2445/5502/1305 2456/5531/1305 2455/5527/1327 2444/5499/1322 +f 2443/5497/1307 2437/5476/1307 2457/5533/1307 2453/5522/1307 +f 2434/5465/1321 2441/5490/1321 2456/5530/1321 2445/5503/1321 +f 2440/5487/1328 2439/5484/1328 2458/5536/1328 2447/5507/1328 +f 2436/5473/1305 2440/5488/1305 2446/5504/1305 2459/5538/1305 +f 2460/5541/1329 2459/5539/1320 2446/5505/1320 2461/5544/1329 +f 2462/5547/1329 2449/5512/1329 2450/5515/1320 2454/5525/1320 +f 2460/5542/1329 2461/5545/1329 2449/5513/1329 2462/5548/1329 +f 2444/5500/1330 2462/5549/1330 2454/5526/1330 2435/5469/1330 +f 2450/5516/1331 2451/5518/1331 2463/5551/1331 2442/5494/1331 +f 2456/5531/1332 2465/5555/1332 2464/5552/1332 2455/5527/1332 +f 2437/5477/1333 2460/5543/1334 2462/5549/1335 2444/5500/1322 +f 2437/5477/1333 2436/5474/1336 2459/5540/1336 2460/5543/1334 +f 2466/5559/1337 2467/5563/1337 2468/5567/1338 2469/5571/1339 +f 2470/5575/1340 2471/5578/1341 2472/5581/1342 2473/5584/1340 +f 2453/5522/1343 2457/5533/1344 2471/5579/1345 2470/5576/1343 +f 2439/5485/1346 2453/5523/1346 2470/5577/1346 2458/5537/1346 +f 2461/5545/1347 2474/5588/1348 2452/5520/1325 2449/5513/1324 +f 2455/5528/1327 2464/5553/1349 2471/5580/1345 2457/5534/1344 +f 2442/5495/1350 2463/5550/1350 2475/5592/1350 2441/5491/1350 +f 2441/5492/1351 2475/5590/1351 2465/5556/1351 2456/5532/1351 +f 2461/5546/1347 2446/5506/1352 2448/5510/1352 2474/5589/1348 +f 2464/5553/1353 2476/5593/1354 2472/5582/1342 2471/5580/1341 +f 2477/5596/1355 2478/5600/1356 2479/5604/1357 2473/5585/1357 +f 2447/5507/1358 2458/5536/1358 2479/5605/1358 2467/5564/1358 +f 2468/5568/1359 2467/5565/1360 2479/5606/1360 2478/5601/1361 +f 2448/5509/1362 2447/5508/1362 2467/5566/1362 2466/5560/1362 +f 2469/5572/1363 2480/5608/1364 2481/5611/1365 2466/5561/1366 +f 2465/5557/1367 2477/5597/1368 2476/5594/1354 2464/5554/1367 +f 2452/5519/1369 2480/5609/1364 2469/5573/1363 2451/5517/1369 +f 2475/5591/1370 2478/5602/1356 2477/5598/1355 2465/5558/1370 +f 2463/5550/1371 2468/5569/1359 2478/5603/1361 2475/5592/1371 +f 2451/5518/1372 2469/5574/1339 2468/5570/1338 2463/5551/1372 +f 2474/5588/1373 2481/5612/1365 2480/5610/1364 2452/5520/1374 +f 2477/5599/1368 2473/5586/1375 2472/5583/1342 2476/5595/1354 +f 2458/5537/1376 2470/5577/1376 2473/5587/1376 2479/5607/1376 +f 2474/5589/1373 2448/5510/1377 2466/5562/1377 2481/5613/1365 +f 2413/5402/1308 2412/5401/1308 2482/5614/1308 2483/5615/1308 +f 2405/5385/1308 2404/5382/1308 2483/5615/1308 2482/5614/1308 +f 2482/5614/1308 2412/5401/1308 2415/5407/1308 2407/5389/1308 +f 2407/5389/1308 2406/5388/1308 2405/5385/1308 2482/5614/1308 +f 2411/5400/1378 2413/5403/1378 2398/5360/1378 2397/5356/1378 +f 2399/5364/1378 2483/5616/1378 2404/5383/1378 2400/5369/1378 +f 2398/5360/1378 2413/5403/1378 2483/5616/1378 2399/5364/1378 +f 2417/5415/1306 2415/5408/1306 2414/5406/1306 2416/5412/1306 +f 2408/5392/1306 2407/5390/1306 2415/5408/1306 2417/5415/1306 +f 2457/5535/1344 2437/5478/1333 2444/5501/1322 2455/5529/1327 +f 2484/5617/1379 2485/5618/1379 2486/5619/1380 2487/5621/1381 +f 2488/5622/1382 2487/5620/1382 2489/5625/1383 2490/5627/1384 +f 2491/5629/1385 2492/5630/1385 2493/5631/1386 2494/5633/1387 +f 2493/5631/1388 2495/5634/1388 2496/5636/1388 2497/5638/1388 +f 2498/5640/1389 2499/5641/1389 2500/5642/1389 2501/5644/1389 +f 2502/5646/1390 2485/5618/1390 2503/5647/1390 2495/5635/1390 +f 2492/5630/1391 2502/5645/1391 2495/5634/1391 2493/5631/1391 +f 2504/5648/1392 2505/5649/1392 2502/5645/1391 2492/5630/1391 +f 2505/5650/1393 2486/5619/1393 2485/5618/1390 2502/5646/1390 +f 2506/5651/1394 2498/5639/1394 2501/5643/1394 2507/5652/1394 +f 2488/5623/1394 2508/5655/1394 2498/5639/1394 2506/5651/1394 +f 2508/5654/1389 2509/5656/1389 2499/5641/1389 2498/5640/1389 +f 2500/5642/1395 2494/5632/1395 2510/5658/1395 2511/5659/1395 +f 2495/5635/1396 2503/5647/1396 2512/5660/1396 2496/5637/1396 +f 2507/5652/1397 2501/5643/1397 2513/5662/1397 2514/5664/1397 +f 2499/5641/1398 2491/5628/1398 2494/5632/1398 2500/5642/1398 +f 2509/5656/1398 2515/5666/1398 2491/5628/1398 2499/5641/1398 +f 2515/5665/1399 2504/5648/1399 2492/5630/1385 2491/5629/1385 +f 2505/5649/1392 2504/5648/1392 2516/5667/1400 2517/5669/1400 +f 2509/5656/1401 2508/5654/1401 2518/5670/1401 2519/5672/1401 +f 2504/5648/1399 2515/5665/1399 2520/5673/1402 2516/5667/1403 +f 2521/5675/1379 2503/5647/1379 2485/5618/1379 2484/5617/1379 +f 2518/5671/1404 2490/5626/1404 2522/5678/1404 2523/5680/1404 +f 2520/5674/1405 2519/5672/1405 2524/5681/1405 2525/5683/1405 +f 2519/5672/1406 2518/5670/1406 2523/5679/1406 2524/5681/1406 +f 2516/5667/1403 2520/5673/1402 2525/5684/1407 2526/5685/1408 +f 2486/5619/1393 2505/5650/1393 2517/5668/1409 2527/5686/1409 +f 2515/5666/1410 2509/5656/1410 2519/5672/1410 2520/5674/1410 +f 2487/5621/1381 2486/5619/1380 2527/5686/1411 2489/5624/1411 +f 2508/5655/1412 2488/5623/1412 2490/5626/1412 2518/5671/1412 +f 2526/5685/1408 2525/5684/1407 2528/5687/1413 2529/5688/1414 +f 2522/5678/1415 2530/5689/1416 2531/5692/1417 2532/5693/1418 +f 2533/5694/1419 2526/5685/1419 2529/5688/1419 2534/5696/1419 +f 2530/5689/1420 2535/5699/1420 2536/5701/1420 2531/5692/1420 +f 2527/5686/1421 2517/5668/1421 2533/5695/1421 2535/5700/1421 +f 2489/5624/1422 2527/5686/1422 2535/5700/1422 2530/5690/1422 +f 2517/5669/1423 2516/5667/1423 2526/5685/1423 2533/5694/1423 +f 2490/5627/1384 2489/5625/1383 2530/5691/1416 2522/5677/1415 +f 2532/5693/1418 2531/5692/1417 2537/5705/1424 2538/5706/1425 +f 2534/5696/1426 2529/5688/1426 2539/5707/1426 2540/5709/1426 +f 2531/5692/1427 2536/5701/1427 2541/5710/1427 2537/5705/1427 +f 2536/5702/1428 2534/5697/1428 2540/5708/1428 2541/5711/1428 +f 2524/5681/1429 2523/5679/1429 2542/5712/1429 2543/5715/1429 +f 2525/5684/1430 2524/5682/1430 2543/5717/1430 2528/5687/1430 +f 2523/5680/1431 2522/5678/1431 2532/5693/1431 2542/5714/1431 +f 2535/5700/1432 2533/5695/1432 2534/5698/1432 2536/5703/1432 +f 2541/5711/1433 2540/5708/1433 2544/5719/1433 2545/5720/1433 +f 2546/5722/1434 2538/5706/1434 2547/5723/1434 2548/5724/1434 +f 2549/5726/1435 2550/5728/1435 2551/5730/1435 2552/5732/1435 +f 2550/5728/1436 2546/5721/1436 2548/5725/1436 2551/5730/1436 +f 2529/5688/1414 2528/5687/1413 2549/5727/1437 2539/5707/1438 +f 2543/5716/1439 2542/5713/1439 2546/5721/1439 2550/5728/1439 +f 2528/5687/1440 2543/5717/1440 2550/5729/1440 2549/5727/1440 +f 2542/5714/1441 2532/5693/1441 2538/5706/1441 2546/5722/1441 +f 2553/5733/1442 2554/5735/1442 2555/5737/1443 2556/5738/1443 +f 2544/5718/1444 2557/5741/1444 2558/5742/1444 2559/5744/1444 +f 2560/5747/1445 2561/5749/1445 2562/5751/1445 2563/5752/1445 +f 2548/5724/1446 2547/5723/1446 2564/5755/1446 2565/5757/1446 +f 2537/5704/1447 2541/5711/1447 2545/5720/1447 2566/5761/1447 +f 2540/5709/1448 2539/5707/1448 2557/5741/1448 2544/5718/1448 +f 2538/5706/1425 2537/5705/1424 2566/5760/1449 2547/5723/1450 +f 2539/5707/1438 2549/5727/1437 2552/5731/1451 2557/5741/1452 +f 2497/5638/1453 2496/5636/1453 2567/5762/1453 2568/5764/1453 +f 2512/5660/1454 2569/5765/1454 2570/5767/1454 2571/5771/1454 +f 2513/5661/1455 2511/5659/1455 2572/5772/1455 2573/5774/1455 +f 2569/5766/1456 2514/5663/1457 2574/5776/1458 2570/5768/1459 +f 2503/5647/1460 2521/5675/1460 2569/5765/1460 2512/5660/1460 +f 2494/5633/1387 2493/5631/1386 2497/5638/1461 2510/5657/1462 +f 2501/5644/1463 2500/5642/1463 2511/5659/1463 2513/5661/1463 +f 2521/5676/1464 2507/5653/1464 2514/5663/1457 2569/5766/1456 +f 2571/5770/1465 2570/5769/1465 2575/5778/1465 2576/5781/1465 +f 2573/5774/1466 2572/5772/1466 2577/5782/1466 2578/5785/1466 +f 2570/5769/1459 2574/5777/1458 2579/5788/1467 2575/5778/1468 +f 2574/5777/1469 2573/5775/1469 2578/5786/1469 2579/5788/1469 +f 2510/5657/1462 2497/5638/1461 2568/5764/1470 2580/5790/1471 +f 2496/5637/1472 2512/5660/1472 2571/5771/1472 2567/5763/1472 +f 2511/5659/1473 2510/5658/1473 2580/5789/1473 2572/5772/1473 +f 2514/5664/1474 2513/5662/1474 2573/5775/1474 2574/5777/1474 +f 2579/5788/1475 2578/5786/1475 2581/5791/1475 2582/5793/1475 +f 2577/5783/1476 2583/5794/1476 2584/5795/1476 2585/5797/1476 +f 2586/5799/1477 2576/5779/1477 2587/5802/1477 2588/5804/1477 +f 2583/5794/1478 2589/5806/1479 2590/5807/1480 2584/5795/1481 +f 2568/5764/1482 2567/5762/1482 2586/5801/1482 2589/5806/1482 +f 2580/5790/1471 2568/5764/1470 2589/5806/1479 2583/5794/1478 +f 2567/5763/1483 2571/5771/1483 2576/5780/1483 2586/5800/1483 +f 2572/5773/1484 2580/5790/1484 2583/5794/1484 2577/5783/1484 +f 2588/5804/1485 2587/5802/1485 2561/5749/1485 2560/5747/1485 +f 2584/5795/1481 2590/5807/1480 2591/5808/1486 2592/5810/1486 +f 2590/5807/1487 2588/5805/1487 2560/5748/1488 2591/5808/1488 +f 2587/5802/1489 2593/5811/1489 2553/5734/1490 2561/5749/1491 +f 2575/5778/1468 2579/5788/1467 2582/5793/1492 2593/5812/1493 +f 2578/5787/1494 2577/5784/1494 2585/5798/1494 2581/5792/1494 +f 2576/5781/1495 2575/5778/1495 2593/5812/1495 2587/5803/1495 +f 2589/5806/1496 2586/5801/1496 2588/5805/1496 2590/5807/1496 +f 2594/5813/1497 2595/5815/1497 2596/5816/1497 2597/5818/1497 +f 2547/5723/1450 2566/5760/1449 2598/5821/1498 2564/5755/1498 +f 2595/5815/1499 2592/5809/1499 2599/5824/1500 2596/5816/1500 +f 2557/5741/1452 2552/5731/1451 2600/5827/1501 2558/5742/1501 +f 2585/5798/1502 2584/5796/1502 2592/5809/1499 2595/5815/1499 +f 2582/5793/1503 2581/5791/1503 2594/5814/1504 2554/5735/1505 +f 2593/5812/1493 2582/5793/1492 2554/5735/1442 2553/5733/1442 +f 2581/5792/1506 2585/5798/1506 2595/5815/1506 2594/5813/1506 +f 2601/5830/1507 2559/5745/1508 2558/5743/1507 2600/5828/1508 +f 2565/5758/1507 2601/5830/1507 2600/5828/1508 2602/5831/1508 +f 2564/5756/1507 2598/5822/1507 2601/5830/1507 2565/5758/1507 +f 2598/5822/1507 2603/5833/1508 2559/5745/1508 2601/5830/1507 +f 2604/5835/1509 2563/5753/1509 2562/5750/1510 2556/5739/1510 +f 2597/5819/1509 2604/5835/1509 2556/5739/1510 2555/5736/1510 +f 2596/5817/1511 2599/5825/1509 2604/5835/1509 2597/5819/1509 +f 2599/5825/1509 2605/5836/1509 2563/5753/1509 2604/5835/1509 +f 2552/5732/1512 2551/5730/1512 2602/5832/1512 2600/5829/1512 +f 2592/5810/1486 2591/5808/1486 2605/5837/1513 2599/5826/1513 +f 2566/5761/1514 2545/5720/1514 2603/5834/1514 2598/5823/1514 +f 2554/5735/1505 2594/5814/1504 2597/5820/1515 2555/5737/1515 +f 2551/5730/1516 2548/5725/1516 2565/5759/1516 2602/5832/1516 +f 2591/5808/1488 2560/5748/1488 2563/5754/1517 2605/5837/1517 +f 2545/5720/1518 2544/5719/1518 2559/5746/1518 2603/5834/1518 +f 2561/5749/1491 2553/5734/1490 2556/5740/1519 2562/5751/1519 +f 2606/5839/1379 2607/5840/1379 2608/5841/1380 2609/5843/1381 +f 2610/5844/1520 2609/5842/1520 2611/5846/1521 2612/5847/1522 +f 2613/5848/1395 2614/5850/1395 2615/5853/1395 2616/5855/1395 +f 2617/5857/1389 2618/5858/1389 2613/5849/1389 2619/5861/1389 +f 2620/5863/1390 2607/5840/1390 2621/5864/1390 2622/5865/1390 +f 2623/5867/1391 2620/5862/1391 2622/5866/1391 2624/5868/1391 +f 2625/5869/1391 2626/5870/1391 2620/5862/1391 2623/5867/1391 +f 2626/5871/1393 2608/5841/1393 2607/5840/1390 2620/5863/1390 +f 2627/5872/1523 2617/5856/1523 2619/5860/1523 2628/5873/1523 +f 2610/5844/1523 2629/5875/1523 2617/5856/1523 2627/5872/1523 +f 2629/5874/1389 2630/5876/1389 2618/5858/1389 2617/5857/1389 +f 2622/5865/1396 2621/5864/1396 2631/5878/1396 2632/5880/1396 +f 2628/5873/1524 2619/5860/1524 2633/5881/1524 2634/5883/1524 +f 2635/5884/1525 2628/5873/1526 2634/5883/1527 2636/5886/1528 +f 2618/5859/1398 2637/5888/1398 2614/5850/1398 2613/5848/1398 +f 2630/5877/1398 2638/5890/1398 2637/5888/1398 2618/5859/1398 +f 2626/5870/1400 2625/5869/1400 2639/5891/1400 2640/5893/1400 +f 2630/5876/1401 2629/5874/1401 2641/5894/1401 2642/5896/1401 +f 2625/5869/1529 2638/5889/1529 2643/5899/1402 2639/5891/1403 +f 2627/5872/1530 2606/5838/1530 2609/5842/1520 2610/5844/1520 +f 2628/5873/1526 2635/5884/1525 2606/5838/1530 2627/5872/1530 +f 2635/5885/1379 2621/5864/1379 2607/5840/1379 2606/5839/1379 +f 2644/5900/1421 2640/5892/1421 2645/5902/1421 2646/5904/1421 +f 2641/5895/1531 2612/5847/1531 2647/5906/1531 2648/5908/1531 +f 2643/5898/1405 2642/5897/1405 2649/5909/1405 2650/5912/1405 +f 2642/5896/1406 2641/5894/1406 2648/5907/1406 2649/5911/1406 +f 2608/5841/1393 2626/5871/1393 2640/5892/1409 2644/5900/1409 +f 2638/5890/1410 2630/5877/1410 2642/5897/1410 2643/5898/1410 +f 2609/5843/1381 2608/5841/1380 2644/5900/1411 2611/5845/1411 +f 2629/5875/1532 2610/5844/1532 2612/5847/1532 2641/5895/1532 +f 2650/5913/1430 2649/5910/1430 2651/5917/1430 2652/5918/1430 +f 2649/5911/1429 2648/5907/1429 2653/5919/1429 2651/5915/1429 +f 2654/5923/1408 2650/5913/1407 2652/5918/1413 2655/5924/1414 +f 2647/5906/1533 2656/5926/1534 2657/5927/1535 2658/5928/1536 +f 2611/5845/1422 2644/5900/1422 2646/5904/1422 2656/5925/1422 +f 2640/5893/1423 2639/5891/1423 2654/5922/1423 2645/5901/1423 +f 2612/5847/1522 2611/5846/1521 2656/5926/1534 2647/5906/1533 +f 2639/5891/1403 2643/5899/1402 2650/5914/1407 2654/5922/1408 +f 2658/5928/1536 2657/5927/1535 2659/5930/1537 2660/5931/1538 +f 2661/5934/1426 2655/5924/1426 2662/5935/1426 2663/5936/1426 +f 2657/5927/1427 2664/5940/1427 2665/5941/1427 2659/5930/1427 +f 2664/5938/1428 2661/5932/1428 2663/5937/1428 2665/5942/1428 +f 2648/5908/1539 2647/5906/1539 2658/5928/1539 2653/5921/1539 +f 2646/5904/1540 2645/5902/1540 2661/5933/1540 2664/5939/1540 +f 2656/5926/1420 2646/5905/1420 2664/5940/1420 2657/5927/1420 +f 2645/5903/1419 2654/5923/1419 2655/5924/1419 2661/5934/1419 +f 2663/5936/1541 2662/5935/1541 2666/5943/1541 2667/5944/1541 +f 2659/5929/1447 2665/5942/1447 2668/5946/1447 2669/5948/1447 +f 2665/5942/1433 2663/5937/1433 2667/5945/1433 2668/5946/1433 +f 2670/5949/1542 2660/5931/1542 2671/5951/1542 2672/5952/1542 +f 2655/5924/1414 2652/5918/1413 2673/5954/1543 2662/5935/1544 +f 2651/5916/1439 2653/5920/1439 2670/5950/1439 2674/5957/1439 +f 2652/5918/1440 2651/5917/1440 2674/5956/1440 2673/5954/1440 +f 2653/5921/1545 2658/5928/1545 2660/5931/1545 2670/5949/1545 +f 2675/5958/1546 2676/5960/1546 2677/5962/1443 2678/5963/1443 +f 2667/5944/1547 2666/5943/1547 2679/5966/1547 2680/5968/1547 +f 2681/5972/1445 2682/5974/1445 2683/5976/1445 2684/5977/1445 +f 2672/5952/1446 2671/5951/1446 2685/5981/1446 2686/5983/1446 +f 2660/5931/1538 2659/5930/1537 2669/5947/1548 2671/5951/1549 +f 2662/5935/1544 2673/5954/1543 2687/5987/1550 2666/5943/1452 +f 2674/5957/1436 2670/5950/1436 2672/5953/1436 2688/5989/1436 +f 2673/5955/1435 2674/5957/1435 2688/5989/1435 2687/5988/1435 +f 2631/5878/1454 2636/5887/1454 2689/5990/1454 2690/5992/1454 +f 2633/5882/1455 2616/5854/1455 2691/5996/1455 2692/5998/1455 +f 2636/5886/1528 2634/5883/1527 2693/5999/1551 2689/5991/1552 +f 2634/5883/1553 2633/5881/1553 2692/5997/1553 2693/5999/1553 +f 2624/5868/1388 2622/5866/1388 2632/5879/1388 2694/6000/1388 +f 2621/5864/1460 2635/5885/1460 2636/5887/1460 2631/5878/1460 +f 2614/5851/1554 2624/5868/1554 2694/6000/1461 2615/5852/1462 +f 2619/5861/1463 2613/5849/1463 2616/5854/1463 2633/5882/1463 +f 2689/5991/1552 2693/5999/1551 2695/6001/1555 2696/6002/1556 +f 2693/5999/1557 2692/5997/1557 2697/6004/1557 2695/6001/1557 +f 2691/5994/1484 2698/6008/1484 2699/6009/1484 2700/6010/1484 +f 2701/6014/1483 2690/5992/1483 2702/6016/1483 2703/6019/1483 +f 2694/6000/1453 2632/5879/1453 2701/6013/1453 2704/6022/1453 +f 2615/5852/1462 2694/6000/1461 2704/6022/1470 2698/6006/1471 +f 2632/5880/1472 2631/5878/1472 2690/5992/1472 2701/6014/1472 +f 2616/5855/1473 2615/5853/1473 2698/6007/1473 2691/5995/1473 +f 2700/6010/1476 2699/6009/1476 2705/6024/1476 2706/6026/1476 +f 2703/6020/1477 2702/6017/1477 2707/6029/1477 2708/6031/1477 +f 2699/6009/1478 2709/6032/1479 2710/6033/1480 2705/6024/1481 +f 2709/6032/1496 2703/6021/1496 2708/6030/1496 2710/6033/1496 +f 2692/5998/1466 2691/5996/1466 2700/6011/1466 2697/6003/1466 +f 2690/5993/1465 2689/5991/1465 2696/6002/1465 2702/6018/1465 +f 2704/6023/1482 2701/6015/1482 2703/6021/1482 2709/6032/1482 +f 2698/6008/1471 2704/6023/1470 2709/6032/1479 2699/6009/1478 +f 2710/6033/1487 2708/6030/1487 2681/5973/1488 2711/6034/1488 +f 2707/6029/1489 2712/6035/1489 2675/5959/1490 2682/5974/1491 +f 2713/6037/1558 2706/6027/1558 2714/6039/1558 2715/6040/1558 +f 2712/6036/1559 2716/6042/1560 2676/5960/1546 2675/5958/1546 +f 2695/6001/1561 2697/6004/1561 2713/6038/1561 2716/6042/1561 +f 2696/6002/1556 2695/6001/1555 2716/6042/1560 2712/6036/1559 +f 2697/6005/1562 2700/6012/1562 2706/6027/1562 2713/6037/1562 +f 2702/6018/1495 2696/6002/1495 2712/6036/1495 2707/6028/1495 +f 2715/6040/1497 2714/6039/1497 2717/6043/1497 2718/6045/1497 +f 2671/5951/1549 2669/5947/1548 2719/6049/1563 2685/5981/1563 +f 2666/5943/1452 2687/5987/1550 2720/6052/1501 2679/5966/1501 +f 2714/6039/1499 2721/6055/1499 2722/6057/1500 2717/6043/1500 +f 2705/6024/1481 2710/6033/1480 2711/6034/1486 2721/6056/1486 +f 2708/6031/1485 2707/6029/1485 2682/5974/1485 2681/5972/1485 +f 2706/6027/1502 2705/6025/1502 2721/6055/1499 2714/6039/1499 +f 2716/6042/1564 2713/6038/1564 2715/6041/1565 2676/5960/1566 +f 2723/6060/1507 2680/5969/1508 2679/5967/1507 2720/6053/1508 +f 2686/5984/1507 2723/6060/1507 2720/6053/1508 2724/6062/1508 +f 2685/5982/1507 2719/6050/1507 2723/6061/1507 2686/5985/1507 +f 2719/6050/1507 2725/6064/1508 2680/5970/1508 2723/6061/1507 +f 2726/6066/1509 2684/5978/1509 2683/5975/1510 2678/5964/1510 +f 2718/6046/1509 2726/6066/1509 2678/5964/1510 2677/5961/1510 +f 2717/6044/1511 2722/6058/1509 2726/6067/1509 2718/6047/1509 +f 2722/6058/1509 2727/6068/1509 2684/5979/1509 2726/6067/1509 +f 2687/5988/1512 2688/5989/1512 2724/6063/1512 2720/6054/1512 +f 2721/6056/1486 2711/6034/1486 2727/6069/1513 2722/6059/1513 +f 2669/5948/1514 2668/5946/1514 2725/6065/1514 2719/6051/1514 +f 2676/5960/1566 2715/6041/1565 2718/6048/1567 2677/5962/1567 +f 2688/5989/1516 2672/5953/1516 2686/5986/1516 2724/6063/1516 +f 2711/6034/1488 2681/5973/1488 2684/5980/1517 2727/6069/1517 +f 2668/5946/1518 2667/5945/1518 2680/5971/1518 2725/6065/1518 +f 2682/5974/1491 2675/5959/1490 2678/5965/1519 2683/5976/1519 +o Chair.005 +v 6.291861 0.415382 6.069609 +v 6.291861 0.429951 6.069609 +v 6.308335 0.429951 6.116414 +v 6.441785 0.429951 6.495564 +v 6.458259 0.429951 6.542367 +v 6.458259 0.415382 6.542367 +v 6.441785 0.415382 6.495564 +v 6.308335 0.415382 6.116414 +v 6.095444 0.429951 6.670067 +v 6.095444 0.415382 6.670067 +v 6.095444 0.400812 6.670067 +v 6.080298 0.400812 6.627036 +v 6.441785 0.400812 6.495564 +v 6.458259 0.400812 6.542367 +v 5.929047 0.415382 6.197309 +v 5.929047 0.429951 6.197309 +v 5.944192 0.415382 6.240341 +v 5.944192 0.429951 6.240341 +v 5.929047 0.400812 6.197309 +v 5.944192 0.400812 6.240341 +v 6.291861 0.400812 6.069609 +v 6.308335 0.400812 6.116414 +v 6.475115 0.432961 6.514694 +v 6.470151 0.432961 6.500592 +v 6.465909 0.421009 6.502085 +v 6.470873 0.421009 6.516187 +v 6.477819 0.426967 6.497893 +v 6.482783 0.426967 6.511995 +v 6.320043 0.419106 6.081455 +v 6.324935 0.419106 6.095355 +v 6.336845 0.425064 6.091163 +v 6.331953 0.425064 6.077263 +v 6.324417 0.434699 6.079915 +v 6.329309 0.434699 6.093815 +v 6.483707 0.431853 6.495821 +v 6.488671 0.431853 6.509923 +v 6.342865 0.433592 6.089044 +v 6.337973 0.433592 6.075144 +v 6.349543 0.592772 6.071072 +v 6.335987 0.593879 6.075843 +v 6.486685 0.592141 6.510622 +v 6.481722 0.592141 6.496520 +v 6.500241 0.591033 6.505850 +v 6.517599 0.829840 6.499741 +v 6.504044 0.830948 6.504512 +v 6.366901 0.831579 6.064962 +v 6.353345 0.832686 6.069733 +v 6.495277 0.591033 6.491748 +v 6.340879 0.593879 6.089743 +v 6.354435 0.592772 6.084971 +v 6.494411 0.830737 6.507903 +v 6.499479 0.870951 6.481673 +v 6.490913 0.870348 6.484688 +v 6.348593 0.832325 6.087028 +v 6.343701 0.832325 6.073127 +v 6.355217 0.869634 6.093719 +v 6.360426 0.864490 6.109717 +v 6.512636 0.829840 6.485639 +v 6.327411 0.608202 6.078861 +v 6.358237 0.832686 6.083633 +v 6.371793 0.831579 6.078862 +v 6.499080 0.830948 6.490410 +v 6.511688 0.869953 6.477376 +v 6.478119 0.606614 6.513637 +v 6.473156 0.606614 6.499535 +v 6.489447 0.830737 6.493801 +v 6.332303 0.608202 6.092762 +v 6.363792 0.870373 6.090701 +v 6.369003 0.865229 6.106699 +v 6.381212 0.864232 6.102401 +v 6.469474 0.913073 6.414848 +v 6.477036 0.914244 6.411692 +v 6.391156 0.911897 6.158923 +v 6.383350 0.911148 6.161289 +v 6.505470 0.867524 6.460274 +v 6.493261 0.868521 6.464571 +v 6.473002 0.902898 6.402864 +v 6.486153 0.901824 6.398235 +v 6.484694 0.867919 6.467587 +v 6.376002 0.869376 6.086403 +v 6.393522 0.900855 6.168207 +v 6.406672 0.899781 6.163579 +v 6.404306 0.910823 6.154294 +v 6.490187 0.913170 6.407063 +v 6.385255 0.901346 6.168978 +v 6.465440 0.901727 6.406021 +v 6.080298 0.415382 6.627036 +v 6.080298 0.429951 6.627036 +v 6.278182 0.438060 6.608049 +v 6.280121 0.443651 6.613559 +v 6.403770 0.443651 6.570038 +v 6.401831 0.438060 6.564528 +v 6.401890 0.429976 6.564695 +v 6.432391 0.437950 6.553772 +v 6.429984 0.430300 6.554807 +v 6.284720 0.429903 6.626626 +v 6.284662 0.437987 6.626460 +v 6.161013 0.437987 6.669980 +v 6.161071 0.429903 6.670146 +v 6.159156 0.443828 6.664705 +v 6.129064 0.439408 6.675297 +v 6.133125 0.434055 6.679796 +v 6.280097 0.424135 6.613490 +v 6.282781 0.424311 6.621116 +v 6.159132 0.424311 6.664637 +v 6.156448 0.424135 6.657011 +v 6.282805 0.443828 6.621184 +v 6.156473 0.443651 6.657080 +v 6.408311 0.437987 6.582938 +v 6.406455 0.443828 6.577663 +v 6.278241 0.429976 6.608216 +v 6.154592 0.429976 6.651737 +v 6.403747 0.424135 6.569969 +v 6.406430 0.424311 6.577595 +v 6.136234 0.426646 6.678888 +v 6.136405 0.421521 6.672636 +v 6.126447 0.439247 6.667648 +v 6.133788 0.421360 6.664987 +v 6.129727 0.426713 6.660489 +v 6.408370 0.429903 6.583105 +v 6.438849 0.437881 6.572190 +v 6.438773 0.443408 6.566288 +v 6.430059 0.424773 6.560708 +v 6.432797 0.424940 6.568315 +v 6.436441 0.430231 6.573224 +v 6.154533 0.438060 6.651570 +v 6.456668 0.420977 6.545415 +v 6.455152 0.416357 6.551876 +v 6.457938 0.416497 6.559465 +v 6.463105 0.420919 6.563839 +v 6.467713 0.427313 6.562031 +v 6.436035 0.443241 6.558682 +v 6.485497 0.402967 6.555958 +v 6.491804 0.407418 6.553551 +v 6.461276 0.427371 6.543606 +v 6.485382 0.407458 6.535121 +v 6.479074 0.403008 6.537529 +v 6.469228 0.431932 6.555569 +v 6.494547 0.410634 6.546658 +v 6.466443 0.431793 6.547979 +v 6.491724 0.410537 6.539081 +v 6.502120 0.380352 6.529230 +v 6.494797 0.378323 6.531995 +v 6.508533 0.380334 6.547663 +v 6.512010 0.381800 6.540511 +v 6.509165 0.381756 6.532942 +v 6.476332 0.399792 6.544421 +v 6.479154 0.399889 6.551998 +v 6.526747 0.345795 6.535324 +v 6.523901 0.345756 6.527756 +v 6.491320 0.376856 6.539146 +v 6.509435 0.342751 6.526843 +v 6.505917 0.341467 6.534009 +v 6.501211 0.378304 6.550427 +v 6.494165 0.376901 6.546714 +v 6.508763 0.341506 6.541577 +v 6.515848 0.342735 6.545275 +v 6.060951 0.349401 6.684508 +v 6.068583 0.348454 6.682010 +v 6.029809 -0.002953 6.695656 +v 6.022177 -0.002007 6.698155 +v 6.523228 0.344511 6.542491 +v 6.604994 0.001491 6.513712 +v 6.608513 0.002774 6.506545 +v 6.060171 0.350077 6.699545 +v 6.057652 0.350056 6.691862 +v 6.018878 -0.001352 6.705509 +v 6.021398 -0.001331 6.713192 +v 6.591201 -0.000270 6.498063 +v 6.587683 -0.001553 6.505229 +v 6.516816 0.344527 6.524057 +v 6.099875 0.425574 6.685571 +v 6.105772 0.421603 6.689424 +v 6.126618 0.434122 6.661396 +v 6.099242 0.421652 6.671031 +v 6.097313 0.425454 6.677902 +v 6.113351 0.412305 6.680750 +v 6.110789 0.412185 6.673082 +v 6.104893 0.416156 6.669230 +v 6.078772 0.403231 6.678236 +v 6.075732 0.405075 6.685498 +v 6.095615 0.398698 6.686993 +v 6.093087 0.398640 6.679312 +v 6.086030 0.400566 6.675869 +v 6.111423 0.416106 6.687621 +v 6.078855 0.371230 6.684321 +v 6.071617 0.372479 6.680942 +v 6.092575 0.400542 6.694255 +v 6.078163 0.372464 6.699327 +v 6.081376 0.371267 6.692004 +v 6.078258 0.405133 6.693179 +v 6.060896 0.375406 6.690720 +v 6.063417 0.375443 6.698402 +v 6.085317 0.403207 6.696623 +v 6.070655 0.374194 6.701783 +v 6.067499 0.349392 6.702894 +v 6.075130 0.348446 6.700395 +v 6.064109 0.374209 6.683397 +v 6.075911 0.347770 6.685358 +v 6.078429 0.347791 6.693042 +v 6.039656 -0.003617 6.706689 +v 6.037137 -0.003637 6.699005 +v 6.598582 0.001507 6.495278 +v 6.036357 -0.002962 6.714042 +v 6.597613 -0.000286 6.516496 +v 6.598098 0.000611 6.505888 +v 6.590528 -0.001514 6.512797 +v 6.605667 0.002736 6.498977 +v 6.029268 -0.002484 6.706099 +v 6.028726 -0.002015 6.716541 +v 6.104362 0.438060 6.114203 +v 6.106302 0.443651 6.119713 +v 6.229951 0.443651 6.076192 +v 6.228012 0.438060 6.070682 +v 6.228070 0.429976 6.070848 +v 6.258571 0.437950 6.059926 +v 6.256164 0.430300 6.060960 +v 5.985313 0.424311 6.170790 +v 5.987252 0.429903 6.176300 +v 5.962415 0.426646 6.185042 +v 5.962585 0.421521 6.178790 +v 6.106277 0.424135 6.119644 +v 6.108961 0.424311 6.127270 +v 5.982629 0.424135 6.163165 +v 6.108985 0.443828 6.127338 +v 5.982653 0.443651 6.163234 +v 5.985337 0.443828 6.170859 +v 6.110842 0.437987 6.132613 +v 5.987194 0.437987 6.176134 +v 6.234492 0.437987 6.089092 +v 6.232635 0.443828 6.083817 +v 6.104421 0.429976 6.114369 +v 5.980772 0.429976 6.157890 +v 6.229927 0.424135 6.076123 +v 6.232611 0.424311 6.083748 +v 5.952628 0.439247 6.173802 +v 5.955245 0.439408 6.181451 +v 5.959969 0.421360 6.171141 +v 5.955907 0.426713 6.166642 +v 5.980714 0.438060 6.157724 +v 5.952798 0.434122 6.167549 +v 6.110900 0.429903 6.132779 +v 6.234550 0.429903 6.089258 +v 6.265029 0.437881 6.078344 +v 6.264954 0.443408 6.072442 +v 6.256239 0.424773 6.066862 +v 6.258977 0.424940 6.074468 +v 6.262622 0.430231 6.079378 +v 6.262216 0.443241 6.064836 +v 6.295409 0.431932 6.061723 +v 6.292624 0.431793 6.054133 +v 6.282848 0.420977 6.051568 +v 6.281333 0.416357 6.058029 +v 6.284119 0.416497 6.065619 +v 6.289286 0.420919 6.069993 +v 6.305335 0.399889 6.058152 +v 6.311677 0.402967 6.062112 +v 6.302512 0.399792 6.050575 +v 6.293894 0.427313 6.068184 +v 6.317985 0.407418 6.059705 +v 6.287457 0.427371 6.049759 +v 6.311563 0.407458 6.041275 +v 6.305255 0.403008 6.043682 +v 6.328301 0.380352 6.035383 +v 6.320977 0.378323 6.038147 +v 6.320728 0.410634 6.052811 +v 6.334714 0.380334 6.053817 +v 6.338191 0.381800 6.046665 +v 6.317905 0.410537 6.045235 +v 6.335345 0.381756 6.039096 +v 6.349409 0.344511 6.048645 +v 6.352927 0.345795 6.041478 +v 6.350081 0.345756 6.033910 +v 6.342997 0.344527 6.030211 +v 6.317501 0.376856 6.045300 +v 6.335615 0.342751 6.032996 +v 6.332097 0.341467 6.040162 +v 6.327391 0.378304 6.056581 +v 6.320346 0.376901 6.052868 +v 5.887131 0.349401 6.190662 +v 5.894763 0.348454 6.188163 +v 5.855990 -0.002953 6.201810 +v 5.848358 -0.002007 6.204309 +v 6.431174 0.001491 6.019866 +v 6.434693 0.002774 6.012699 +v 5.886352 0.350077 6.205699 +v 5.883832 0.350056 6.198016 +v 5.845059 -0.001352 6.211663 +v 5.847578 -0.001331 6.219346 +v 6.417381 -0.000270 6.004216 +v 6.413863 -0.001553 6.011383 +v 6.342028 0.342735 6.051429 +v 6.334943 0.341506 6.047730 +v 5.925423 0.421652 6.177185 +v 5.923493 0.425454 6.184056 +v 5.939532 0.412305 6.186904 +v 5.936970 0.412185 6.179235 +v 5.931073 0.416156 6.175383 +v 5.959306 0.434055 6.185950 +v 5.912210 0.400566 6.182022 +v 5.904953 0.403231 6.184390 +v 5.919268 0.398640 6.185466 +v 5.937603 0.416106 6.193775 +v 5.918755 0.400542 6.200409 +v 5.921795 0.398698 6.193147 +v 5.926056 0.425574 6.191724 +v 5.901912 0.405075 6.191652 +v 5.904439 0.405133 6.199333 +v 5.931952 0.421603 6.195577 +v 5.904344 0.372464 6.205481 +v 5.907557 0.371267 6.198158 +v 5.887076 0.375406 6.196874 +v 5.889598 0.375443 6.204556 +v 5.911498 0.403207 6.202777 +v 5.896836 0.374194 6.207937 +v 5.893680 0.349392 6.209048 +v 5.890289 0.374209 6.189551 +v 5.905035 0.371230 6.190475 +v 5.904610 0.347791 6.199195 +v 5.902091 0.347770 6.191512 +v 5.897797 0.372479 6.187095 +v 5.865836 -0.003617 6.212842 +v 5.863317 -0.003637 6.205159 +v 6.424762 0.001507 6.001432 +v 6.423794 -0.000286 6.022650 +v 5.901311 0.348446 6.206549 +v 5.862537 -0.002962 6.220196 +v 6.424278 0.000611 6.012040 +v 6.416709 -0.001514 6.018951 +v 6.431847 0.002736 6.005130 +v 5.855448 -0.002484 6.212252 +v 5.854907 -0.002015 6.222695 +vn 0.9433 -0.0000 -0.3320 +vn 0.3320 -0.0000 0.9433 +vn -0.0000 -1.0000 -0.0000 +vn -0.3320 -0.0000 -0.9433 +vn -0.9433 -0.0000 0.3320 +vn -0.1124 0.9929 0.0395 +vn 0.2487 -0.9646 -0.0875 +vn 0.4025 -0.9044 -0.1417 +vn 0.2283 -0.0911 -0.9693 +vn 0.1530 -0.9868 -0.0539 +vn -0.1617 0.9852 0.0569 +vn 0.7631 -0.0779 0.6416 +vn 0.8791 -0.1146 0.4627 +vn 0.3531 -0.0987 -0.9304 +vn 0.5814 -0.7874 -0.2046 +vn 0.7552 -0.5992 -0.2658 +vn -0.9405 0.0768 0.3310 +vn 0.9405 -0.0768 -0.3310 +vn 0.3859 -0.2916 0.8753 +vn 0.2669 0.5027 0.8222 +vn -0.9392 0.1047 0.3271 +vn -0.9359 0.1119 0.3339 +vn -0.9363 0.1062 0.3347 +vn 0.9714 -0.0656 0.2282 +vn 0.3240 0.4967 0.8052 +vn -0.9413 0.0768 0.3288 +vn -0.7964 -0.5359 0.2803 +vn -0.3100 0.5287 -0.7902 +vn 0.2179 -0.6113 0.7608 +vn -0.4925 -0.8531 0.1721 +vn -0.7994 -0.5326 0.2780 +vn -0.7998 -0.5337 0.2748 +vn -0.7990 -0.5315 0.2812 +vn -0.1132 0.9931 0.0301 +vn -0.1711 0.9648 -0.1995 +vn -0.1769 0.9584 -0.2242 +vn -0.2194 -0.8811 -0.4189 +vn 0.0724 -0.8634 -0.4993 +vn 0.5156 -0.7743 -0.3669 +vn -0.3137 -0.5705 -0.7590 +vn 0.6370 -0.3669 -0.6780 +vn 0.5790 -0.3997 -0.7107 +vn 0.9415 -0.0465 -0.3337 +vn -0.9385 0.1108 0.3270 +vn -0.9387 0.1116 0.3261 +vn 0.9419 -0.0794 -0.3264 +vn -0.2449 0.5223 -0.8168 +vn 0.9445 -0.0401 -0.3260 +vn -0.9383 0.1101 0.3277 +vn 0.9442 -0.0584 -0.3241 +vn 0.6327 -0.7742 -0.0174 +vn 0.9417 -0.0813 -0.3264 +vn 0.9396 -0.0847 -0.3317 +vn 0.9444 -0.0769 -0.3197 +vn 0.2311 0.8588 0.4572 +vn -0.0156 0.9633 -0.2680 +vn 0.0698 0.9970 -0.0330 +vn -0.0160 0.9630 -0.2689 +vn 0.0964 0.8610 0.4994 +vn -0.9398 0.0845 0.3311 +vn -0.9420 0.0831 0.3252 +vn -0.9426 0.0796 0.3242 +vn -0.9443 0.0778 0.3197 +vn 0.0940 -0.8773 0.4707 +vn 0.0123 -0.9658 0.2592 +vn -0.9374 0.0880 0.3371 +vn 0.9371 -0.0886 -0.3375 +vn -0.1008 0.8673 -0.4875 +vn -0.2237 0.8695 -0.4403 +vn -0.9405 0.0744 0.3316 +vn -0.9425 0.0849 0.3234 +vn -0.0700 -0.9970 0.0324 +vn 0.9402 -0.0732 -0.3328 +vn -0.9401 0.0723 0.3333 +vn -0.0000 1.0000 -0.0000 +vn -0.2296 0.7224 -0.6523 +vn -0.2253 0.7268 -0.6488 +vn -0.2253 0.7269 -0.6488 +vn -0.3318 -0.0225 -0.9431 +vn -0.3322 -0.0215 -0.9430 +vn -0.3381 -0.0204 -0.9409 +vn 0.3319 0.0218 0.9431 +vn 0.3306 0.0219 0.9435 +vn 0.3305 0.0219 0.9435 +vn 0.1482 0.6937 0.7048 +vn 0.0072 -0.9998 0.0205 +vn -0.0073 0.9998 -0.0206 +vn 0.2398 0.6915 0.6814 +vn 0.2409 0.6962 0.6762 +vn -0.0015 0.9997 -0.0224 +vn -0.2398 -0.6915 -0.6814 +vn 0.3087 -0.7257 0.6148 +vn -0.1364 0.9903 0.0254 +vn -0.1583 -0.6955 -0.7009 +vn 0.2296 -0.7223 0.6523 +vn 0.3319 0.0221 0.9431 +vn 0.2420 0.7008 0.6710 +vn 0.0284 -0.9995 0.0124 +vn 0.3384 0.0214 0.9408 +vn 0.3322 0.0224 0.9429 +vn -0.4401 -0.6683 -0.5998 +vn 0.0134 -0.6972 0.7168 +vn -0.2776 -0.9532 0.1202 +vn 0.3446 0.0183 0.9386 +vn 0.3392 0.0214 0.9405 +vn 0.0044 0.9997 -0.0241 +vn 0.2374 -0.7326 0.6379 +vn -0.2211 0.7313 -0.6453 +vn -0.2253 -0.7022 -0.6754 +vn 0.3497 0.0132 0.9368 +vn 0.3455 0.0178 0.9382 +vn -0.3442 -0.0175 -0.9387 +vn -0.3388 -0.0205 -0.9406 +vn -0.3448 -0.0172 -0.9385 +vn -0.3490 -0.0124 -0.9370 +vn 0.6455 0.5509 0.5290 +vn 0.1999 0.5748 -0.7935 +vn 0.3087 0.9421 -0.1311 +vn 0.0017 0.6901 -0.7237 +vn 0.4555 0.6614 0.5958 +vn -0.3493 -0.0119 -0.9369 +vn -0.3506 -0.0090 -0.9365 +vn 0.7916 0.3812 0.4776 +vn 0.3523 0.3978 -0.8471 +vn 0.7865 0.5403 -0.2993 +vn -0.5530 -0.8044 0.2171 +vn -0.1879 -0.5868 0.7876 +vn -0.6329 -0.5625 -0.5320 +vn 0.5791 0.7833 -0.2263 +vn 0.8580 0.3980 -0.3248 +vn -0.8406 -0.2790 -0.4643 +vn -0.4012 -0.2912 0.8684 +vn -0.8569 -0.4005 0.3244 +vn 0.3512 0.0092 0.9363 +vn 0.3499 0.0122 0.9367 +vn -0.7683 -0.5692 0.2928 +vn -0.3446 -0.4135 0.8428 +vn -0.7832 -0.3964 -0.4791 +vn -0.3115 -0.0027 -0.9503 +vn -0.3115 -0.0025 -0.9502 +vn 0.8723 0.1694 0.4587 +vn -0.9439 0.1162 0.3091 +vn -0.8723 -0.1695 -0.4586 +vn 0.4017 0.2899 -0.8687 +vn 0.8411 0.2777 0.4642 +vn -0.3501 -0.0080 -0.9367 +vn -0.3511 -0.0055 -0.9363 +vn 0.3519 0.0054 0.9360 +vn 0.3515 0.0070 0.9362 +vn -0.0328 0.6472 0.7616 +vn -0.5035 0.6748 -0.5396 +vn 0.3393 -0.9356 -0.0976 +vn -0.3290 -0.0216 -0.9441 +vn -0.3240 -0.0207 -0.9458 +vn -0.3184 -0.0182 -0.9478 +vn -0.3233 -0.0205 -0.9461 +vn -0.3195 0.7239 -0.6115 +vn 0.3289 0.0227 0.9441 +vn 0.3238 0.0218 0.9459 +vn 0.1154 -0.9932 -0.0181 +vn -0.3292 -0.0222 -0.9440 +vn -0.6832 0.5630 -0.4651 +vn 0.5589 -0.8103 -0.1759 +vn -0.3140 -0.0112 -0.9494 +vn -0.3175 -0.0173 -0.9481 +vn 0.1829 -0.5801 -0.7937 +vn 0.3231 0.0211 0.9461 +vn 0.3182 0.0187 0.9478 +vn -0.3917 0.9128 0.1157 +vn 0.4766 -0.6896 0.5453 +vn 0.0091 -0.6617 -0.7497 +vn 0.3436 -0.3366 -0.8767 +vn 0.8318 -0.3512 0.4298 +vn -0.8403 0.4682 0.2732 +vn 0.3136 0.0114 0.9495 +vn 0.3172 0.0175 0.9482 +vn 0.3131 0.0104 0.9497 +vn 0.3114 0.0032 0.9503 +vn -0.2124 0.5405 0.8141 +vn -0.6343 0.7463 0.2016 +vn 0.6458 -0.6033 0.4680 +vn -0.9417 0.1344 0.3084 +vn 0.3115 0.0027 0.9502 +vn -0.4074 0.0928 0.9085 +vn -0.4077 0.0866 0.9090 +vn -0.9052 0.0969 -0.4138 +vn -0.9058 0.0905 -0.4140 +vn -0.9058 0.0904 -0.4140 +vn -0.3123 -0.0030 -0.9500 +vn -0.3140 -0.0100 -0.9494 +vn 0.8332 -0.4821 -0.2708 +vn -0.8350 0.3437 -0.4297 +vn -0.3462 0.3294 0.8785 +vn 0.9439 -0.1162 -0.3091 +vn -0.3519 -0.0053 -0.9360 +vn 0.9059 -0.0898 0.4139 +vn 0.9064 -0.0839 0.4141 +vn 0.3518 0.0053 0.9360 +vn 0.9053 -0.0956 0.4138 +vn 0.4075 -0.0916 -0.9086 +vn 0.4078 -0.0860 -0.9090 +vn 0.4078 -0.0859 -0.9090 +vn 0.9421 -0.1319 -0.3084 +vn 0.2073 -0.9756 -0.0730 +vn 0.2073 -0.9756 -0.0729 +vn -0.1105 -0.9931 0.0389 +vn -0.1104 -0.9931 0.0389 +vn -0.1105 -0.9931 0.0388 +vn -0.4312 -0.1770 0.8847 +vn 0.3115 0.0025 0.9502 +vn 0.4312 0.1770 -0.8847 +vn 0.4081 -0.0803 -0.9094 +vn -0.9071 -0.2449 0.3424 +vn -0.4081 0.0803 0.9094 +vn 0.9071 0.2449 -0.3424 +vn -0.9064 0.0839 -0.4141 +vn -0.3319 -0.0221 -0.9431 +vn -0.3322 -0.0224 -0.9429 +vn -0.3384 -0.0214 -0.9408 +vn -0.1583 -0.6956 -0.7008 +vn -0.3306 -0.0219 -0.9435 +vn -0.3305 -0.0219 -0.9435 +vn -0.3238 -0.0218 -0.9459 +vn -0.3287 -0.0228 -0.9442 +vn 0.3318 0.0224 0.9431 +vn -0.3319 -0.0218 -0.9431 +vn 0.3087 0.9421 -0.1312 +vn -0.4401 -0.6683 -0.5997 +vn -0.2776 -0.9532 0.1201 +vn -0.2253 -0.7023 -0.6753 +vn -0.5530 -0.8044 0.2170 +vn -0.3447 -0.0183 -0.9385 +vn -0.3392 -0.0214 -0.9405 +vn -0.3455 -0.0178 -0.9382 +vn -0.3497 -0.0131 -0.9368 +vn -0.3499 -0.0123 -0.9367 +vn -0.3512 -0.0092 -0.9363 +vn -0.6330 -0.5626 -0.5319 +vn 0.5790 0.7833 -0.2263 +vn 0.3512 0.0091 0.9363 +vn 0.3499 0.0123 0.9367 +vn -0.7832 -0.3964 -0.4790 +vn -0.3115 -0.0027 -0.9502 +vn 0.8723 0.1695 0.4586 +vn -0.3515 -0.0070 -0.9362 +vn -0.3523 -0.0057 -0.9359 +vn 0.3519 0.0055 0.9360 +vn -0.3182 -0.0187 -0.9478 +vn -0.3231 -0.0210 -0.9461 +vn 0.0091 -0.6618 -0.7497 +vn 0.3292 0.0221 0.9440 +vn -0.3136 -0.0114 -0.9495 +vn -0.3172 -0.0176 -0.9482 +vn 0.1830 -0.5802 -0.7937 +vn -0.3462 0.3294 0.8784 +vn 0.9420 -0.1319 -0.3085 +vn -0.3131 -0.0104 -0.9497 +vn -0.3113 -0.0032 -0.9503 +vn 0.3437 -0.3367 -0.8766 +vn 0.8332 -0.4821 -0.2709 +vn -0.3518 -0.0053 -0.9360 +vn 0.4076 -0.0916 -0.9085 +vn 0.4079 -0.0860 -0.9090 +vn 0.4079 -0.0859 -0.9090 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt 0.686647 0.000000 +vt 0.870176 0.996278 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.782584 0.965408 +vt 0.870573 0.970227 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.833010 0.965282 +vt 0.908785 0.026051 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.968598 0.070112 +vt 0.979071 0.026051 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.968598 0.371019 +vt 0.757324 0.262250 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.173427 0.241164 +vt 0.758439 0.080128 +vt -0.973130 0.033128 +vt -0.123087 0.241439 +vt 0.978437 0.000000 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt 0.737072 0.000128 +vt 0.908263 0.000000 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.409642 -0.009898 +vt 0.677629 0.482142 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.240570 0.058726 +vt 0.669677 0.481452 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.786789 0.246652 +vt 0.991724 0.699406 +vt 0.928489 0.277215 +vt 0.873308 0.505274 +vt 0.786789 0.155990 +vt 0.958960 0.029326 +vt 0.991724 0.483440 +vt 0.977373 0.702462 +vt -0.140978 0.246673 +vt 0.958492 0.010078 +vt -0.156145 0.246590 +vt 0.929566 0.080357 +vt -0.144664 0.252235 +vt 0.984385 0.731379 +vt 0.945934 0.020741 +vt -0.159831 0.252152 +vt 0.984385 0.500820 +vt 0.989649 0.087406 +vt 0.706860 0.007022 +vt 0.847263 0.989602 +vt 0.686599 0.714388 +vt 0.721837 0.007060 +vt 0.884682 0.006674 +vt 0.720919 0.017861 +vt 0.673632 0.527027 +vt 0.872079 0.017335 +vt 0.705942 0.017823 +vt 0.673632 0.731676 +vt 0.690157 0.523535 +vt 0.802894 0.958412 +vt 0.847659 0.963551 +vt 0.695298 0.714388 +vt 0.661237 0.495044 +vt 0.817871 0.958374 +vt 0.885205 0.032725 +vt 0.661237 0.722645 +vt 0.693293 0.503638 +vt 0.944329 0.029337 +vt 0.981154 0.731379 +vt 0.977373 0.486830 +vt 0.989649 0.263822 +vt 0.873305 0.723869 +vt 0.981154 0.500820 +vt 0.870573 0.032734 +vt 0.693293 0.761173 +vt 0.679412 0.527027 +vt 0.695298 0.493838 +vt 0.679412 0.731676 +vt 0.826600 0.493835 +vt 0.826977 0.731673 +vt 0.826600 0.714385 +vt 0.814491 0.495042 +vt 0.122435 0.638558 +vt 0.015922 0.839080 +vt 0.835047 0.699404 +vt 0.993361 0.510073 +vt 0.758428 0.504317 +vt 0.072861 0.638558 +vt 0.015474 0.619132 +vt 0.835047 0.483438 +vt 0.845328 0.702461 +vt 0.015197 0.626266 +vt 0.014109 0.491099 +vt 0.993356 0.728667 +vt 0.758425 0.722912 +vt 0.833436 0.500823 +vt 0.891028 0.725398 +vt 0.672547 0.500827 +vt 0.752235 0.729690 +vt 0.667246 0.727168 +vt 0.891033 0.506802 +vt 0.752238 0.507120 +vt 0.071993 0.783837 +vt 0.969610 0.493832 +vt 0.987699 0.731670 +vt 0.641343 0.509140 +vt 0.689355 0.726560 +vt 0.969610 0.714382 +vt 0.122436 0.783837 +vt 0.641344 0.743247 +vt 0.833436 0.731382 +vt 0.845328 0.486829 +vt 0.814491 0.722643 +vt 0.825052 0.503733 +vt 0.016195 0.832047 +vt 0.634466 0.494220 +vt 0.825052 0.761267 +vt 0.826977 0.527024 +vt 0.022424 0.783234 +vt 0.035852 0.889154 +vt 0.043016 0.971597 +vt 0.706398 0.505224 +vt 0.072863 0.808180 +vt 0.028940 0.807392 +vt 0.010039 0.882150 +vt 0.137154 0.974703 +vt 0.631023 0.892124 +vt 0.649326 0.890699 +vt 0.121379 0.984023 +vt 0.648470 0.892315 +vt 0.072864 0.783142 +vt 0.043889 0.943476 +vt 0.078385 0.805896 +vt 0.075977 0.941215 +vt 0.613560 0.946909 +vt 0.672547 0.731385 +vt 0.701510 0.486829 +vt 0.669481 0.490576 +vt 0.072863 0.646796 +vt 0.648470 0.506013 +vt 0.080915 0.841605 +vt 0.968560 0.503835 +vt 0.102906 0.865583 +vt 0.634467 0.887149 +vt 0.987699 0.527021 +vt 0.968560 0.761369 +vt 0.690090 0.495972 +vt 0.701510 0.702461 +vt 0.603150 0.865583 +vt 0.014109 0.884028 +vt 0.706395 0.729929 +vt 0.816556 0.714481 +vt 0.023239 0.646888 +vt 0.040534 0.495932 +vt 0.081188 0.621686 +vt 0.007711 0.495744 +vt 0.041481 0.497122 +vt 0.080911 0.628820 +vt 0.003028 0.888966 +vt 0.041481 0.887645 +vt 0.060838 0.971173 +vt 0.631023 0.505822 +vt 0.649326 0.500176 +vt 0.081188 0.834572 +vt 0.805889 0.743046 +vt 0.122312 0.806766 +vt 0.988155 0.503653 +vt 0.115555 0.935422 +vt 0.904138 0.912557 +vt 0.988155 0.735605 +vt 0.813022 0.494763 +vt 0.890960 0.912565 +vt 0.735836 0.641861 +vt 0.693936 0.468644 +vt 0.027417 0.833361 +vt 0.420996 0.961603 +vt 0.032040 0.784613 +vt 0.284612 0.483847 +vt 0.656925 0.504187 +vt 0.681549 0.720168 +vt 0.066750 0.834450 +vt 0.299225 0.449509 +vt 0.999708 0.720167 +vt 0.989627 0.743247 +vt 0.121899 0.832034 +vt 0.693936 0.449159 +vt 0.420996 0.999935 +vt 0.008277 0.862094 +vt 0.082562 0.831201 +vt 0.741580 0.718717 +vt 0.678836 0.505353 +vt 0.815743 0.487362 +vt 0.741523 0.585977 +vt 0.678836 0.699564 +vt 0.553315 0.945729 +vt 0.982243 0.588758 +vt 0.460393 1.018433 +vt 0.949871 0.788878 +vt 0.982305 0.727355 +vt 0.668954 0.502598 +vt 0.949657 0.691167 +vt 0.979056 0.490574 +vt 0.078628 0.952623 +vt 0.035428 0.887064 +vt 0.812426 0.730862 +vt 0.971935 0.642457 +vt 0.805889 0.532195 +vt 0.173975 1.012235 +vt 0.908785 0.976444 +vt 0.726484 0.788878 +vt 0.984477 0.500479 +vt 0.894591 0.976453 +vt 0.737043 0.505375 +vt 0.726270 0.691167 +vt 0.987420 0.694407 +vt 0.999899 0.506981 +vt 0.968797 0.500648 +vt 0.989626 0.516135 +vt 0.652223 0.697892 +vt 0.656922 0.730164 +vt 0.681740 0.506981 +vt 0.985798 0.713641 +vt 0.053549 0.993732 +vt 0.043551 0.873068 +vt 0.522988 0.991572 +vt 0.062665 0.961706 +vt 0.169656 0.991799 +vt 0.060838 0.809705 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +s 1 +usemtl Material.068 +f 2728/6071/1568 2729/6075/1568 2730/6080/1568 2731/6084/1568 2732/6088/1568 2733/6094/1568 2734/6097/1568 2735/6100/1568 +f 2733/6093/1569 2732/6089/1569 2736/6104/1569 2737/6107/1569 +f 2738/6109/1570 2739/6113/1570 2740/6115/1570 2741/6116/1570 +f 2742/6120/1571 2743/6121/1571 2729/6076/1571 2728/6070/1571 +f 2743/6122/1572 2742/6119/1572 2744/6124/1572 2745/6125/1572 +f 2746/6127/1572 2747/6130/1572 2744/6124/1572 2742/6119/1572 +f 2746/6128/1571 2742/6120/1571 2728/6070/1571 2748/6132/1571 +f 2741/6117/1569 2733/6093/1569 2737/6107/1569 2738/6110/1569 +f 2748/6133/1568 2728/6071/1568 2735/6100/1568 2734/6097/1568 2733/6094/1568 2741/6118/1568 2740/6114/1568 2749/6136/1568 +f 2731/6085/1573 2732/6090/1573 2750/6139/1573 2751/6143/1573 +f 2741/6118/1568 2740/6114/1568 2734/6097/1568 2733/6094/1568 +f 2735/6101/1572 2728/6072/1572 2748/6134/1572 2749/6137/1572 +f 2733/6095/1574 2734/6098/1574 2752/6147/1574 2753/6149/1574 +f 2753/6149/1575 2752/6147/1575 2754/6151/1575 2755/6154/1575 +f 2756/6157/1575 2759/6165/1575 2758/6162/1575 2757/6160/1575 +f 2734/6099/1576 2731/6086/1576 2751/6144/1576 2752/6148/1576 +f 2728/6073/1577 2756/6157/1577 2757/6160/1577 2735/6102/1577 +f 2730/6081/1578 2761/6172/1578 2760/6168/1578 2729/6077/1578 +f 2735/6103/1579 2757/6161/1579 2761/6173/1579 2730/6082/1579 +f 2732/6091/1580 2733/6096/1580 2753/6150/1580 2750/6141/1580 +f 2729/6078/1581 2760/6169/1581 2756/6158/1581 2728/6074/1581 +f 2755/6155/1582 2754/6152/1582 2762/6177/1582 2763/6181/1582 +f 2764/6184/1583 2758/6163/1583 2759/6166/1583 2765/6186/1583 +f 2760/6170/1571 2767/6189/1571 2766/6187/1571 2765/6185/1571 +f 2752/6148/1571 2751/6144/1571 2762/6176/1571 2754/6153/1571 +f 2751/6145/1584 2750/6140/1584 2768/6193/1584 2769/6198/1584 +f 2760/6170/1571 2765/6185/1571 2759/6167/1571 2756/6159/1571 +f 2750/6141/1569 2753/6150/1569 2755/6156/1569 2763/6179/1569 +f 2757/6161/1569 2758/6164/1569 2764/6182/1569 2761/6173/1569 +f 2768/6194/1569 2770/6202/1569 2771/6205/1569 2772/6209/1569 +f 2767/6189/1571 2774/6216/1571 2773/6212/1571 2766/6187/1571 +f 2750/6142/1569 2763/6180/1569 2770/6203/1569 2768/6195/1569 +f 2763/6181/1585 2762/6177/1585 2775/6219/1585 2770/6204/1585 +f 2761/6174/1584 2776/6221/1584 2767/6190/1584 2760/6171/1584 +f 2764/6183/1569 2777/6225/1569 2776/6222/1586 2761/6175/1569 +f 2765/6186/1585 2766/6188/1585 2777/6226/1585 2764/6184/1585 +f 2762/6178/1571 2751/6146/1571 2769/6199/1571 2775/6220/1571 +f 2778/6227/1587 2772/6211/1587 2779/6231/1587 2780/6232/1587 +f 2781/6234/1588 2784/6242/1589 2783/6240/1590 2782/6237/1590 +f 2770/6204/1585 2775/6219/1585 2785/6244/1585 2771/6206/1585 +f 2767/6191/1571 2786/6247/1571 2782/6239/1571 2774/6217/1571 +f 2777/6225/1569 2788/6254/1569 2787/6250/1591 2776/6222/1586 +f 2775/6220/1571 2769/6199/1571 2789/6256/1571 2785/6245/1571 +f 2766/6188/1585 2773/6213/1585 2788/6253/1585 2777/6226/1585 +f 2772/6210/1592 2771/6207/1592 2790/6259/1592 2779/6230/1592 +f 2768/6196/1569 2772/6211/1569 2778/6227/1569 2791/6261/1569 +f 2792/6264/1593 2791/6262/1584 2778/6228/1584 2793/6267/1593 +f 2794/6270/1593 2781/6235/1593 2782/6238/1584 2786/6248/1584 +f 2792/6265/1593 2793/6268/1593 2781/6236/1593 2794/6271/1593 +f 2776/6223/1594 2794/6272/1594 2786/6249/1594 2767/6192/1594 +f 2782/6239/1595 2783/6241/1595 2795/6274/1595 2774/6217/1595 +f 2788/6254/1596 2797/6278/1596 2796/6275/1596 2787/6250/1596 +f 2769/6200/1597 2792/6266/1598 2794/6272/1599 2776/6223/1586 +f 2769/6200/1597 2768/6197/1600 2791/6263/1600 2792/6266/1598 +f 2798/6282/1601 2799/6286/1601 2800/6290/1602 2801/6294/1603 +f 2802/6298/1604 2803/6301/1605 2804/6304/1606 2805/6307/1604 +f 2785/6245/1607 2789/6256/1608 2803/6302/1609 2802/6299/1607 +f 2771/6208/1610 2785/6246/1610 2802/6300/1610 2790/6260/1610 +f 2793/6268/1611 2806/6311/1612 2784/6243/1589 2781/6236/1588 +f 2787/6251/1591 2796/6276/1613 2803/6303/1609 2789/6257/1608 +f 2774/6218/1614 2795/6273/1614 2807/6315/1614 2773/6214/1614 +f 2773/6215/1615 2807/6313/1615 2797/6279/1615 2788/6255/1615 +f 2793/6269/1611 2778/6229/1616 2780/6233/1616 2806/6312/1612 +f 2796/6276/1617 2808/6316/1618 2804/6305/1606 2803/6303/1605 +f 2809/6319/1619 2810/6323/1620 2811/6327/1621 2805/6308/1621 +f 2779/6230/1622 2790/6259/1622 2811/6328/1622 2799/6287/1622 +f 2800/6291/1623 2799/6288/1624 2811/6329/1624 2810/6324/1625 +f 2780/6232/1626 2779/6231/1626 2799/6289/1626 2798/6283/1626 +f 2801/6295/1627 2812/6331/1628 2813/6334/1629 2798/6284/1630 +f 2797/6280/1631 2809/6320/1632 2808/6317/1618 2796/6277/1631 +f 2784/6242/1633 2812/6332/1628 2801/6296/1627 2783/6240/1633 +f 2807/6314/1634 2810/6325/1620 2809/6321/1619 2797/6281/1634 +f 2795/6273/1635 2800/6292/1623 2810/6326/1625 2807/6315/1635 +f 2783/6241/1636 2801/6297/1603 2800/6293/1602 2795/6274/1636 +f 2806/6311/1637 2813/6335/1629 2812/6333/1628 2784/6243/1638 +f 2809/6322/1632 2805/6309/1639 2804/6306/1606 2808/6318/1618 +f 2790/6260/1640 2802/6300/1640 2805/6310/1640 2811/6330/1640 +f 2806/6312/1637 2780/6233/1641 2798/6285/1641 2813/6336/1629 +f 2745/6125/1572 2744/6124/1572 2814/6337/1572 2815/6338/1572 +f 2737/6108/1572 2736/6105/1572 2815/6338/1572 2814/6337/1572 +f 2814/6337/1572 2744/6124/1572 2747/6130/1572 2739/6112/1572 +f 2739/6112/1572 2738/6111/1572 2737/6108/1572 2814/6337/1572 +f 2743/6123/1642 2745/6126/1642 2730/6083/1642 2729/6079/1642 +f 2731/6087/1642 2815/6339/1642 2736/6106/1642 2732/6092/1642 +f 2730/6083/1642 2745/6126/1642 2815/6339/1642 2731/6087/1642 +f 2749/6138/1570 2747/6131/1570 2746/6129/1570 2748/6135/1570 +f 2740/6115/1570 2739/6113/1570 2747/6131/1570 2749/6138/1570 +f 2789/6258/1608 2769/6201/1597 2776/6224/1586 2787/6252/1591 +f 2816/6340/1643 2817/6341/1643 2818/6342/1644 2819/6344/1645 +f 2820/6345/1646 2819/6343/1646 2821/6348/1647 2822/6350/1648 +f 2823/6352/1649 2824/6353/1649 2825/6354/1650 2826/6356/1651 +f 2825/6354/1652 2827/6357/1652 2828/6359/1652 2829/6361/1652 +f 2830/6363/1653 2831/6364/1653 2832/6365/1653 2833/6367/1653 +f 2834/6369/1654 2817/6341/1654 2835/6370/1654 2827/6358/1654 +f 2824/6353/1655 2834/6368/1655 2827/6357/1655 2825/6354/1655 +f 2836/6371/1656 2837/6372/1656 2834/6368/1655 2824/6353/1655 +f 2837/6373/1657 2818/6342/1657 2817/6341/1654 2834/6369/1654 +f 2838/6374/1658 2830/6362/1658 2833/6366/1658 2839/6375/1658 +f 2820/6346/1658 2840/6378/1658 2830/6362/1658 2838/6374/1658 +f 2840/6377/1653 2841/6379/1653 2831/6364/1653 2830/6363/1653 +f 2832/6365/1659 2826/6355/1659 2842/6381/1659 2843/6382/1659 +f 2827/6358/1660 2835/6370/1660 2844/6383/1660 2828/6360/1660 +f 2839/6375/1661 2833/6366/1661 2845/6385/1661 2846/6387/1661 +f 2831/6364/1662 2823/6351/1662 2826/6355/1662 2832/6365/1662 +f 2841/6379/1662 2847/6389/1662 2823/6351/1662 2831/6364/1662 +f 2847/6388/1663 2836/6371/1663 2824/6353/1649 2823/6352/1649 +f 2837/6372/1656 2836/6371/1656 2848/6390/1664 2849/6392/1664 +f 2841/6379/1665 2840/6377/1665 2850/6393/1665 2851/6395/1665 +f 2836/6371/1663 2847/6388/1663 2852/6396/1666 2848/6390/1667 +f 2853/6398/1643 2835/6370/1643 2817/6341/1643 2816/6340/1643 +f 2850/6394/1668 2822/6349/1668 2854/6401/1668 2855/6403/1668 +f 2852/6397/1669 2851/6395/1669 2856/6404/1669 2857/6406/1669 +f 2851/6395/1670 2850/6393/1670 2855/6402/1670 2856/6404/1670 +f 2848/6390/1667 2852/6396/1666 2857/6407/1671 2858/6408/1672 +f 2818/6342/1657 2837/6373/1657 2849/6391/1673 2859/6409/1673 +f 2847/6389/1674 2841/6379/1674 2851/6395/1674 2852/6397/1674 +f 2819/6344/1645 2818/6342/1644 2859/6409/1675 2821/6347/1675 +f 2840/6378/1676 2820/6346/1676 2822/6349/1676 2850/6394/1676 +f 2858/6408/1672 2857/6407/1671 2860/6410/1677 2861/6411/1678 +f 2854/6401/1679 2862/6412/1680 2863/6415/1681 2864/6416/1682 +f 2865/6417/1683 2858/6408/1683 2861/6411/1683 2866/6419/1683 +f 2862/6412/1684 2867/6422/1684 2868/6424/1684 2863/6415/1684 +f 2859/6409/1685 2849/6391/1685 2865/6418/1685 2867/6423/1685 +f 2821/6347/1686 2859/6409/1686 2867/6423/1686 2862/6413/1686 +f 2849/6392/1687 2848/6390/1687 2858/6408/1687 2865/6417/1687 +f 2822/6350/1648 2821/6348/1647 2862/6414/1680 2854/6400/1679 +f 2864/6416/1682 2863/6415/1681 2869/6428/1688 2870/6429/1689 +f 2866/6419/1690 2861/6411/1690 2871/6430/1690 2872/6432/1690 +f 2863/6415/1691 2868/6424/1691 2873/6433/1691 2869/6428/1691 +f 2868/6425/1692 2866/6420/1692 2872/6431/1692 2873/6434/1692 +f 2856/6404/1693 2855/6402/1693 2874/6435/1693 2875/6438/1693 +f 2857/6407/1694 2856/6405/1694 2875/6440/1694 2860/6410/1694 +f 2855/6403/1695 2854/6401/1695 2864/6416/1695 2874/6437/1695 +f 2867/6423/1696 2865/6418/1696 2866/6421/1696 2868/6426/1696 +f 2873/6434/1697 2872/6431/1697 2876/6442/1697 2877/6443/1697 +f 2878/6445/1698 2870/6429/1698 2879/6446/1698 2880/6447/1698 +f 2881/6449/1699 2882/6451/1699 2883/6453/1699 2884/6455/1699 +f 2882/6451/1700 2878/6444/1700 2880/6448/1700 2883/6453/1700 +f 2861/6411/1678 2860/6410/1677 2881/6450/1701 2871/6430/1702 +f 2875/6439/1703 2874/6436/1703 2878/6444/1703 2882/6451/1703 +f 2860/6410/1704 2875/6440/1704 2882/6452/1704 2881/6450/1704 +f 2874/6437/1705 2864/6416/1705 2870/6429/1705 2878/6445/1705 +f 2885/6456/1706 2886/6458/1706 2887/6460/1707 2888/6461/1707 +f 2876/6441/1708 2889/6464/1708 2890/6465/1708 2891/6467/1708 +f 2892/6470/1709 2893/6472/1709 2894/6474/1709 2895/6475/1709 +f 2880/6447/1710 2879/6446/1710 2896/6478/1710 2897/6480/1710 +f 2869/6427/1711 2873/6434/1711 2877/6443/1711 2898/6484/1711 +f 2872/6432/1712 2871/6430/1712 2889/6464/1712 2876/6441/1712 +f 2870/6429/1689 2869/6428/1688 2898/6483/1713 2879/6446/1714 +f 2871/6430/1702 2881/6450/1701 2884/6454/1715 2889/6464/1716 +f 2829/6361/1717 2828/6359/1717 2899/6485/1717 2900/6487/1717 +f 2844/6383/1718 2901/6488/1718 2902/6490/1718 2903/6494/1718 +f 2845/6384/1719 2843/6382/1719 2904/6495/1719 2905/6497/1719 +f 2901/6489/1720 2846/6386/1721 2906/6499/1722 2902/6491/1723 +f 2835/6370/1724 2853/6398/1724 2901/6488/1724 2844/6383/1724 +f 2826/6356/1651 2825/6354/1650 2829/6361/1725 2842/6380/1726 +f 2833/6367/1727 2832/6365/1727 2843/6382/1727 2845/6384/1727 +f 2853/6399/1728 2839/6376/1728 2846/6386/1721 2901/6489/1720 +f 2903/6493/1729 2902/6492/1729 2907/6501/1729 2908/6504/1729 +f 2905/6497/1730 2904/6495/1730 2909/6505/1730 2910/6508/1730 +f 2902/6492/1723 2906/6500/1722 2911/6511/1731 2907/6501/1732 +f 2906/6500/1733 2905/6498/1733 2910/6509/1733 2911/6511/1733 +f 2842/6380/1726 2829/6361/1725 2900/6487/1734 2912/6513/1735 +f 2828/6360/1736 2844/6383/1736 2903/6494/1736 2899/6486/1736 +f 2843/6382/1737 2842/6381/1737 2912/6512/1737 2904/6495/1737 +f 2846/6387/1738 2845/6385/1738 2905/6498/1738 2906/6500/1738 +f 2911/6511/1739 2910/6509/1739 2913/6514/1739 2914/6516/1739 +f 2909/6506/1740 2915/6517/1740 2916/6518/1740 2917/6520/1740 +f 2918/6522/1741 2908/6502/1741 2919/6525/1741 2920/6527/1741 +f 2915/6517/1742 2921/6529/1743 2922/6530/1744 2916/6518/1745 +f 2900/6487/1746 2899/6485/1746 2918/6524/1746 2921/6529/1746 +f 2912/6513/1735 2900/6487/1734 2921/6529/1743 2915/6517/1742 +f 2899/6486/1747 2903/6494/1747 2908/6503/1747 2918/6523/1747 +f 2904/6496/1748 2912/6513/1748 2915/6517/1748 2909/6506/1748 +f 2920/6527/1749 2919/6525/1749 2893/6472/1749 2892/6470/1749 +f 2916/6518/1745 2922/6530/1744 2923/6531/1750 2924/6533/1750 +f 2922/6530/1751 2920/6528/1751 2892/6471/1752 2923/6531/1752 +f 2919/6525/1753 2925/6534/1753 2885/6457/1754 2893/6472/1755 +f 2907/6501/1732 2911/6511/1731 2914/6516/1756 2925/6535/1757 +f 2910/6510/1758 2909/6507/1758 2917/6521/1758 2913/6515/1758 +f 2908/6504/1759 2907/6501/1759 2925/6535/1759 2919/6526/1759 +f 2921/6529/1760 2918/6524/1760 2920/6528/1760 2922/6530/1760 +f 2926/6536/1761 2927/6538/1761 2928/6539/1761 2929/6541/1761 +f 2879/6446/1714 2898/6483/1713 2930/6544/1762 2896/6478/1762 +f 2927/6538/1763 2924/6532/1763 2931/6547/1764 2928/6539/1764 +f 2889/6464/1716 2884/6454/1715 2932/6550/1765 2890/6465/1765 +f 2917/6521/1766 2916/6519/1766 2924/6532/1763 2927/6538/1763 +f 2914/6516/1767 2913/6514/1767 2926/6537/1768 2886/6458/1769 +f 2925/6535/1757 2914/6516/1756 2886/6458/1706 2885/6456/1706 +f 2913/6515/1770 2917/6521/1770 2927/6538/1770 2926/6536/1770 +f 2933/6553/1771 2891/6468/1771 2890/6466/1771 2932/6551/1771 +f 2897/6481/1772 2933/6553/1771 2932/6551/1771 2934/6554/1771 +f 2896/6479/1772 2930/6545/1772 2933/6553/1771 2897/6481/1772 +f 2930/6545/1772 2935/6556/1771 2891/6468/1771 2933/6553/1771 +f 2936/6558/1773 2895/6476/1773 2894/6473/1774 2888/6462/1774 +f 2929/6542/1773 2936/6558/1773 2888/6462/1774 2887/6459/1774 +f 2928/6540/1775 2931/6548/1773 2936/6558/1773 2929/6542/1773 +f 2931/6548/1773 2937/6559/1773 2895/6476/1773 2936/6558/1773 +f 2884/6455/1776 2883/6453/1776 2934/6555/1776 2932/6552/1776 +f 2924/6533/1750 2923/6531/1750 2937/6560/1777 2931/6549/1777 +f 2898/6484/1778 2877/6443/1778 2935/6557/1778 2930/6546/1778 +f 2886/6458/1769 2926/6537/1768 2929/6543/1779 2887/6460/1779 +f 2883/6453/1780 2880/6448/1780 2897/6482/1780 2934/6555/1780 +f 2923/6531/1752 2892/6471/1752 2895/6477/1781 2937/6560/1781 +f 2877/6443/1782 2876/6442/1782 2891/6469/1782 2935/6557/1782 +f 2893/6472/1755 2885/6457/1754 2888/6463/1783 2894/6474/1783 +f 2938/6562/1643 2939/6563/1643 2940/6564/1644 2941/6566/1645 +f 2942/6567/1784 2941/6565/1784 2943/6569/1785 2944/6570/1786 +f 2945/6571/1659 2946/6573/1659 2947/6576/1659 2948/6578/1659 +f 2949/6580/1653 2950/6581/1653 2945/6572/1653 2951/6584/1653 +f 2952/6586/1654 2939/6563/1654 2953/6587/1654 2954/6588/1654 +f 2955/6590/1655 2952/6585/1655 2954/6589/1655 2956/6591/1655 +f 2957/6592/1655 2958/6593/1655 2952/6585/1655 2955/6590/1655 +f 2958/6594/1657 2940/6564/1657 2939/6563/1654 2952/6586/1654 +f 2959/6595/1658 2949/6579/1658 2951/6583/1658 2960/6596/1658 +f 2942/6567/1658 2961/6598/1658 2949/6579/1658 2959/6595/1658 +f 2961/6597/1653 2962/6599/1653 2950/6581/1653 2949/6580/1653 +f 2954/6588/1660 2953/6587/1660 2963/6601/1660 2964/6603/1660 +f 2960/6596/1787 2951/6583/1787 2965/6604/1787 2966/6606/1787 +f 2967/6607/1788 2960/6596/1789 2966/6606/1790 2968/6609/1791 +f 2950/6582/1662 2969/6611/1662 2946/6573/1662 2945/6571/1662 +f 2962/6600/1662 2970/6613/1662 2969/6611/1662 2950/6582/1662 +f 2958/6593/1664 2957/6592/1664 2971/6614/1664 2972/6616/1664 +f 2962/6599/1665 2961/6597/1665 2973/6617/1665 2974/6619/1665 +f 2957/6592/1792 2970/6612/1792 2975/6622/1666 2971/6614/1667 +f 2959/6595/1793 2938/6561/1793 2941/6565/1784 2942/6567/1784 +f 2960/6596/1789 2967/6607/1788 2938/6561/1793 2959/6595/1793 +f 2967/6608/1643 2953/6587/1643 2939/6563/1643 2938/6562/1643 +f 2976/6623/1794 2972/6615/1794 2977/6625/1794 2978/6627/1794 +f 2973/6618/1795 2944/6570/1795 2979/6629/1795 2980/6631/1795 +f 2975/6621/1669 2974/6620/1669 2981/6632/1669 2982/6635/1669 +f 2974/6619/1796 2973/6617/1796 2980/6630/1796 2981/6634/1796 +f 2940/6564/1657 2958/6594/1657 2972/6615/1673 2976/6623/1673 +f 2970/6613/1674 2962/6600/1674 2974/6620/1674 2975/6621/1674 +f 2941/6566/1645 2940/6564/1644 2976/6623/1675 2943/6568/1675 +f 2961/6598/1797 2942/6567/1797 2944/6570/1797 2973/6618/1797 +f 2982/6636/1694 2981/6633/1694 2983/6640/1694 2984/6641/1694 +f 2981/6634/1798 2980/6630/1798 2985/6642/1798 2983/6638/1798 +f 2986/6646/1672 2982/6636/1671 2984/6641/1677 2987/6647/1678 +f 2979/6629/1799 2988/6649/1800 2989/6650/1801 2990/6651/1802 +f 2943/6568/1686 2976/6623/1686 2978/6627/1686 2988/6648/1686 +f 2972/6616/1687 2971/6614/1687 2986/6645/1687 2977/6624/1687 +f 2944/6570/1786 2943/6569/1785 2988/6649/1800 2979/6629/1799 +f 2971/6614/1667 2975/6622/1666 2982/6637/1671 2986/6645/1672 +f 2990/6651/1802 2989/6650/1801 2991/6653/1803 2992/6654/1804 +f 2993/6657/1690 2987/6647/1690 2994/6658/1690 2995/6659/1690 +f 2989/6650/1691 2996/6663/1691 2997/6664/1691 2991/6653/1691 +f 2996/6661/1692 2993/6655/1692 2995/6660/1692 2997/6665/1692 +f 2980/6631/1805 2979/6629/1805 2990/6651/1805 2985/6644/1805 +f 2978/6627/1806 2977/6625/1806 2993/6656/1806 2996/6662/1806 +f 2988/6649/1684 2978/6628/1684 2996/6663/1684 2989/6650/1684 +f 2977/6626/1683 2986/6646/1683 2987/6647/1683 2993/6657/1683 +f 2995/6659/1712 2994/6658/1712 2998/6666/1712 2999/6667/1712 +f 2991/6652/1711 2997/6665/1711 3000/6669/1711 3001/6671/1711 +f 2997/6665/1697 2995/6660/1697 2999/6668/1697 3000/6669/1697 +f 3002/6672/1698 2992/6654/1698 3003/6674/1698 3004/6675/1698 +f 2987/6647/1678 2984/6641/1677 3005/6677/1807 2994/6658/1808 +f 2983/6639/1703 2985/6643/1703 3002/6673/1703 3006/6680/1703 +f 2984/6641/1704 2983/6640/1704 3006/6679/1704 3005/6677/1704 +f 2985/6644/1809 2990/6651/1809 2992/6654/1809 3002/6672/1809 +f 3007/6681/1810 3008/6683/1810 3009/6685/1707 3010/6686/1707 +f 2999/6667/1811 2998/6666/1811 3011/6689/1811 3012/6691/1811 +f 3013/6695/1709 3014/6697/1709 3015/6699/1709 3016/6700/1709 +f 3004/6675/1710 3003/6674/1710 3017/6704/1710 3018/6706/1710 +f 2992/6654/1804 2991/6653/1803 3001/6670/1812 3003/6674/1813 +f 2994/6658/1808 3005/6677/1807 3019/6710/1814 2998/6666/1716 +f 3006/6680/1700 3002/6673/1700 3004/6676/1700 3020/6712/1700 +f 3005/6678/1699 3006/6680/1699 3020/6712/1699 3019/6711/1699 +f 2963/6601/1718 2968/6610/1718 3021/6713/1718 3022/6715/1718 +f 2965/6605/1719 2948/6577/1719 3023/6719/1719 3024/6721/1719 +f 2968/6609/1791 2966/6606/1790 3025/6722/1815 3021/6714/1816 +f 2966/6606/1817 2965/6604/1817 3024/6720/1817 3025/6722/1817 +f 2956/6591/1652 2954/6589/1652 2964/6602/1652 3026/6723/1652 +f 2953/6587/1724 2967/6608/1724 2968/6610/1724 2963/6601/1724 +f 2946/6574/1818 2956/6591/1818 3026/6723/1725 2947/6575/1726 +f 2951/6584/1727 2945/6572/1727 2948/6577/1727 2965/6605/1727 +f 3021/6714/1816 3025/6722/1815 3027/6724/1819 3028/6725/1820 +f 3025/6722/1821 3024/6720/1821 3029/6727/1821 3027/6724/1821 +f 3023/6717/1748 3030/6731/1748 3031/6732/1748 3032/6733/1748 +f 3033/6737/1747 3022/6715/1747 3034/6739/1747 3035/6742/1747 +f 3026/6723/1717 2964/6602/1717 3033/6736/1717 3036/6745/1717 +f 2947/6575/1726 3026/6723/1725 3036/6745/1734 3030/6729/1735 +f 2964/6603/1736 2963/6601/1736 3022/6715/1736 3033/6737/1736 +f 2948/6578/1737 2947/6576/1737 3030/6730/1737 3023/6718/1737 +f 3032/6733/1740 3031/6732/1740 3037/6747/1740 3038/6749/1740 +f 3035/6743/1741 3034/6740/1741 3039/6752/1741 3040/6754/1741 +f 3031/6732/1742 3041/6755/1743 3042/6756/1744 3037/6747/1745 +f 3041/6755/1822 3035/6744/1822 3040/6753/1822 3042/6756/1822 +f 3024/6721/1730 3023/6719/1730 3032/6734/1730 3029/6726/1730 +f 3022/6716/1729 3021/6714/1729 3028/6725/1729 3034/6741/1729 +f 3036/6746/1746 3033/6738/1746 3035/6744/1746 3041/6755/1746 +f 3030/6731/1735 3036/6746/1734 3041/6755/1743 3031/6732/1742 +f 3042/6756/1751 3040/6753/1751 3013/6696/1752 3043/6757/1752 +f 3039/6752/1753 3044/6758/1753 3007/6682/1754 3014/6697/1755 +f 3045/6760/1823 3038/6750/1823 3046/6762/1823 3047/6763/1823 +f 3044/6759/1824 3048/6765/1825 3008/6683/1810 3007/6681/1810 +f 3027/6724/1826 3029/6727/1826 3045/6761/1826 3048/6765/1826 +f 3028/6725/1820 3027/6724/1819 3048/6765/1825 3044/6759/1824 +f 3029/6728/1827 3032/6735/1827 3038/6750/1827 3045/6760/1827 +f 3034/6741/1759 3028/6725/1759 3044/6759/1759 3039/6751/1759 +f 3047/6763/1761 3046/6762/1761 3049/6766/1761 3050/6768/1761 +f 3003/6674/1813 3001/6670/1812 3051/6772/1828 3017/6704/1828 +f 2998/6666/1716 3019/6710/1814 3052/6775/1765 3011/6689/1765 +f 3046/6762/1763 3053/6778/1763 3054/6780/1764 3049/6766/1764 +f 3037/6747/1745 3042/6756/1744 3043/6757/1750 3053/6779/1750 +f 3040/6754/1749 3039/6752/1749 3014/6697/1749 3013/6695/1749 +f 3038/6750/1766 3037/6748/1766 3053/6778/1763 3046/6762/1763 +f 3048/6765/1829 3045/6761/1829 3047/6764/1830 3008/6683/1831 +f 3055/6783/1771 3012/6692/1771 3011/6690/1771 3052/6776/1771 +f 3018/6707/1772 3055/6783/1771 3052/6776/1771 3056/6785/1771 +f 3017/6705/1772 3051/6773/1772 3055/6784/1771 3018/6708/1772 +f 3051/6773/1772 3057/6787/1771 3012/6693/1771 3055/6784/1771 +f 3058/6789/1773 3016/6701/1773 3015/6698/1774 3010/6687/1774 +f 3050/6769/1773 3058/6789/1773 3010/6687/1774 3009/6684/1774 +f 3049/6767/1775 3054/6781/1773 3058/6790/1773 3050/6770/1773 +f 3054/6781/1773 3059/6791/1773 3016/6702/1773 3058/6790/1773 +f 3019/6711/1776 3020/6712/1776 3056/6786/1776 3052/6777/1776 +f 3053/6779/1750 3043/6757/1750 3059/6792/1777 3054/6782/1777 +f 3001/6671/1778 3000/6669/1778 3057/6788/1778 3051/6774/1778 +f 3008/6683/1831 3047/6764/1830 3050/6771/1779 3009/6685/1779 +f 3020/6712/1780 3004/6676/1780 3018/6709/1780 3056/6786/1780 +f 3043/6757/1752 3013/6696/1752 3016/6703/1781 3059/6792/1781 +f 3000/6669/1782 2999/6668/1782 3012/6694/1782 3057/6788/1782 +f 3014/6697/1755 3007/6682/1754 3010/6688/1783 3015/6699/1783 +o Chair.006 +v 6.775808 0.415382 6.577875 +v 6.775808 0.429951 6.577875 +v 6.798890 0.429951 6.533952 +v 6.985870 0.429951 6.178140 +v 7.008952 0.429951 6.134217 +v 7.008952 0.415382 6.134217 +v 6.985870 0.415382 6.178140 +v 6.798890 0.415382 6.533952 +v 7.349434 0.429951 6.313142 +v 7.349434 0.415382 6.313142 +v 7.349434 0.400812 6.313142 +v 7.328213 0.400812 6.353524 +v 6.985870 0.400812 6.178140 +v 7.008952 0.400812 6.134217 +v 7.116290 0.415382 6.756800 +v 7.116290 0.429951 6.756800 +v 7.137511 0.415382 6.716417 +v 7.137511 0.429951 6.716417 +v 7.116290 0.400812 6.756800 +v 7.137511 0.400812 6.716417 +v 6.775808 0.400812 6.577875 +v 6.798890 0.400812 6.533952 +v 7.328213 0.415382 6.353524 +v 7.328213 0.429951 6.353524 +v 7.179630 0.438060 6.221457 +v 7.182347 0.443651 6.216287 +v 7.066308 0.443651 6.155309 +v 7.063591 0.438060 6.160479 +v 7.063673 0.429976 6.160322 +v 7.034913 0.437950 6.145409 +v 7.037309 0.430300 6.146468 +v 7.188790 0.429903 6.204025 +v 7.188709 0.437987 6.204181 +v 7.304746 0.437987 6.265159 +v 7.304828 0.429903 6.265003 +v 7.302145 0.443828 6.270109 +v 7.330385 0.439408 6.284949 +v 7.330917 0.434055 6.278912 +v 7.182313 0.424135 6.216352 +v 7.186073 0.424311 6.209196 +v 7.302111 0.424311 6.270174 +v 7.298350 0.424135 6.277330 +v 7.186107 0.443828 6.209131 +v 7.298384 0.443651 6.277265 +v 7.072670 0.437987 6.143202 +v 7.070069 0.443828 6.148152 +v 7.179712 0.429976 6.221301 +v 7.295749 0.429976 6.282279 +v 7.066275 0.424135 6.155373 +v 7.070035 0.424311 6.148217 +v 7.328136 0.426646 6.277252 +v 7.323439 0.421521 6.281382 +v 7.326561 0.439247 6.292073 +v 7.319616 0.421360 6.288505 +v 7.319084 0.426713 6.294541 +v 7.072752 0.429903 6.143046 +v 7.044013 0.437881 6.128142 +v 7.039740 0.443408 6.132214 +v 7.041582 0.424773 6.142397 +v 7.045291 0.424940 6.135214 +v 7.046408 0.430231 6.129203 +v 7.295667 0.438060 6.282436 +v 7.012268 0.420977 6.133308 +v 7.018033 0.416357 6.130022 +v 7.021698 0.416497 6.122816 +v 7.021386 0.420919 6.116053 +v 7.016925 0.427313 6.113908 +v 7.036030 0.443241 6.139397 +v 7.000373 0.402967 6.105011 +v 6.994317 0.407418 6.102027 +v 7.007806 0.427371 6.131164 +v 6.985184 0.407458 6.119275 +v 6.991240 0.403008 6.122258 +v 7.011160 0.431932 6.117195 +v 6.987399 0.410634 6.104709 +v 7.007494 0.431793 6.124401 +v 6.983768 0.410537 6.111933 +v 6.969475 0.380352 6.111021 +v 6.976485 0.378323 6.114504 +v 6.978617 0.380334 6.093777 +v 6.971011 0.381800 6.096097 +v 6.967402 0.381756 6.103333 +v 6.998158 0.399792 6.119577 +v 7.001788 0.399889 6.112353 +v 6.957181 0.345795 6.088830 +v 6.953573 0.345756 6.096066 +v 6.984091 0.376856 6.112185 +v 6.962749 0.342751 6.107286 +v 6.970394 0.341467 6.104987 +v 6.985626 0.378304 6.097261 +v 6.987700 0.376901 6.104950 +v 6.974002 0.341506 6.097751 +v 6.971890 0.342735 6.090043 +v 7.383489 0.349401 6.328587 +v 7.376464 0.348454 6.324695 +v 7.412850 -0.002953 6.343817 +v 7.419876 -0.002007 6.347708 +v 6.964828 0.344511 6.086530 +v 6.888094 0.001491 6.046207 +v 6.880448 0.002774 6.048506 +v 7.395037 0.350077 6.318925 +v 7.391122 0.350056 6.325999 +v 7.427508 -0.001352 6.345121 +v 7.431424 -0.001331 6.338046 +v 6.886015 -0.000270 6.066963 +v 6.893661 -0.001553 6.064664 +v 6.955685 0.344527 6.103774 +v 7.357777 0.425574 6.299344 +v 7.356587 0.421603 6.292402 +v 7.321864 0.434122 6.296203 +v 7.347555 0.421652 6.309703 +v 7.353902 0.425454 6.306440 +v 7.345074 0.412305 6.292751 +v 7.341199 0.412185 6.299847 +v 7.342390 0.416156 6.306789 +v 7.366765 0.403231 6.319798 +v 7.374155 0.405075 6.317083 +v 7.361718 0.398698 6.301498 +v 7.357811 0.398640 6.308577 +v 7.360091 0.400566 6.316091 +v 7.351420 0.416106 6.289488 +v 7.371167 0.371230 6.315596 +v 7.373617 0.372479 6.323199 +v 7.369109 0.400542 6.298783 +v 7.382633 0.372464 6.305890 +v 7.375081 0.371267 6.308520 +v 7.378063 0.405133 6.310005 +v 7.388078 0.375406 6.324399 +v 7.391990 0.375443 6.317324 +v 7.375782 0.403207 6.302489 +v 7.389542 0.374194 6.309720 +v 7.392503 0.349392 6.311276 +v 7.385479 0.348446 6.307386 +v 7.380526 0.374209 6.327029 +v 7.373930 0.347770 6.317047 +v 7.377846 0.347791 6.309973 +v 7.414233 -0.003617 6.329094 +v 7.410317 -0.003637 6.336169 +v 6.878952 0.001507 6.063450 +v 7.421865 -0.002962 6.326507 +v 6.895157 -0.000286 6.049719 +v 6.887054 0.000611 6.056584 +v 6.897269 -0.001514 6.057427 +v 6.876840 0.002736 6.055742 +v 7.420871 -0.002484 6.337107 +v 7.428890 -0.002015 6.330398 +v 6.936086 0.438060 6.684905 +v 6.938803 0.443651 6.679735 +v 6.822765 0.443651 6.618756 +v 6.820047 0.438060 6.623927 +v 6.820129 0.429976 6.623771 +v 6.791369 0.437950 6.608856 +v 6.793765 0.430300 6.609916 +v 7.058567 0.424311 6.733622 +v 7.061284 0.429903 6.728451 +v 7.084593 0.426646 6.740700 +v 7.079895 0.421521 6.744830 +v 6.938769 0.424135 6.679800 +v 6.942530 0.424311 6.672643 +v 7.054806 0.424135 6.740777 +v 6.942564 0.443828 6.672579 +v 7.054841 0.443651 6.740713 +v 7.058601 0.443828 6.733557 +v 6.945165 0.437987 6.667628 +v 7.061202 0.437987 6.728607 +v 6.829126 0.437987 6.606650 +v 6.826525 0.443828 6.611600 +v 6.936168 0.429976 6.684750 +v 7.052205 0.429976 6.745728 +v 6.822731 0.424135 6.618821 +v 6.826491 0.424311 6.611665 +v 7.083017 0.439247 6.755520 +v 7.086841 0.439408 6.748397 +v 7.076072 0.421360 6.751953 +v 7.075539 0.426713 6.757990 +v 7.052123 0.438060 6.745883 +v 7.078320 0.434122 6.759650 +v 6.945247 0.429903 6.667473 +v 6.829208 0.429903 6.606494 +v 6.800468 0.437881 6.591590 +v 6.796196 0.443408 6.595662 +v 6.798038 0.424773 6.605844 +v 6.801748 0.424940 6.598662 +v 6.802865 0.430231 6.592650 +v 6.792486 0.443241 6.602844 +v 6.767615 0.431932 6.580643 +v 6.763950 0.431793 6.587849 +v 6.768723 0.420977 6.596756 +v 6.774488 0.416357 6.593469 +v 6.778154 0.416497 6.586263 +v 6.777842 0.420919 6.579501 +v 6.758244 0.399889 6.575800 +v 6.756829 0.402967 6.568459 +v 6.754613 0.399792 6.583025 +v 6.773381 0.427313 6.577355 +v 6.750772 0.407418 6.565475 +v 6.764262 0.427371 6.594611 +v 6.741640 0.407458 6.582723 +v 6.747696 0.403008 6.585707 +v 6.725932 0.380352 6.574468 +v 6.732941 0.378323 6.577953 +v 6.743855 0.410634 6.568157 +v 6.735074 0.380334 6.557225 +v 6.727467 0.381800 6.559545 +v 6.740225 0.410537 6.575381 +v 6.723858 0.381756 6.566780 +v 6.721282 0.344511 6.549977 +v 6.713637 0.345795 6.552277 +v 6.710029 0.345756 6.559513 +v 6.712141 0.344527 6.567221 +v 6.740548 0.376856 6.575633 +v 6.719204 0.342751 6.570735 +v 6.726850 0.341467 6.568435 +v 6.742082 0.378304 6.560709 +v 6.744157 0.376901 6.568398 +v 7.139946 0.349401 6.792034 +v 7.132920 0.348454 6.788144 +v 7.169307 -0.002953 6.807265 +v 7.176332 -0.002007 6.811156 +v 6.644551 0.001491 6.509655 +v 6.636905 0.002774 6.511953 +v 7.151494 0.350077 6.782372 +v 7.147578 0.350056 6.789447 +v 7.183965 -0.001352 6.808568 +v 7.187881 -0.001331 6.801494 +v 6.642471 -0.000270 6.530411 +v 6.650117 -0.001553 6.528111 +v 6.728346 0.342735 6.553491 +v 6.730458 0.341506 6.561199 +v 7.104011 0.421652 6.773150 +v 7.110358 0.425454 6.769888 +v 7.101530 0.412305 6.756199 +v 7.097655 0.412185 6.763295 +v 7.098845 0.416156 6.770237 +v 7.087374 0.434055 6.742360 +v 7.116547 0.400566 6.779540 +v 7.123221 0.403231 6.783246 +v 7.114267 0.398640 6.772024 +v 7.107876 0.416106 6.752935 +v 7.125565 0.400542 6.762231 +v 7.118175 0.398698 6.764946 +v 7.114233 0.425574 6.762792 +v 7.130611 0.405075 6.780531 +v 7.134520 0.405133 6.773452 +v 7.113043 0.421603 6.755849 +v 7.139089 0.372464 6.769338 +v 7.131537 0.371267 6.771967 +v 7.144534 0.375406 6.787847 +v 7.148447 0.375443 6.780771 +v 7.132239 0.403207 6.765937 +v 7.145998 0.374194 6.773167 +v 7.148960 0.349392 6.774724 +v 7.136981 0.374209 6.790477 +v 7.127624 0.371230 6.779044 +v 7.134302 0.347791 6.773421 +v 7.130387 0.347770 6.780495 +v 7.130073 0.372479 6.786647 +v 7.170689 -0.003617 6.792542 +v 7.166774 -0.003637 6.799617 +v 6.635408 0.001507 6.526897 +v 6.651613 -0.000286 6.513167 +v 7.141935 0.348446 6.770833 +v 7.178322 -0.002962 6.789955 +v 6.643510 0.000611 6.520033 +v 6.653725 -0.001514 6.520875 +v 6.633296 0.002736 6.519189 +v 7.177326 -0.002484 6.800555 +v 7.185347 -0.002015 6.793845 +v 7.201078 0.396685 6.595453 +v 7.264645 0.396685 6.474489 +v 7.201078 0.411254 6.595453 +v 7.264645 0.411254 6.474489 +v 6.861217 0.411254 6.415348 +v 6.923544 0.411254 6.296744 +v 7.264645 0.382115 6.474489 +v 7.201078 0.382115 6.595453 +v 6.923543 0.382115 6.296744 +v 6.861217 0.382115 6.415348 +vn -0.2160 -0.0000 0.9764 +vn -0.6752 -0.7071 0.2100 +vn -0.8852 -0.0000 -0.4652 +vn -0.2100 -0.7071 -0.6752 +vn 0.0150 0.6667 -0.7452 +vn 0.4652 -0.0000 -0.8852 +vn -0.0000 -1.0000 -0.0000 +vn 0.0313 -0.9977 -0.0605 +vn 0.0317 -0.9976 -0.0613 +vn -0.4652 -0.0000 0.8852 +vn 0.8852 -0.0000 0.4652 +vn -0.0000 1.0000 -0.0000 +vn 0.0321 0.9977 -0.0601 +vn 0.0325 0.9976 -0.0609 +vn -0.0317 0.9976 0.0613 +vn -0.0313 0.9977 0.0605 +vn -0.0314 0.9977 0.0608 +vn -0.0316 0.9976 0.0611 +vn -0.0325 -0.9976 0.0609 +vn -0.0321 -0.9977 0.0601 +vn -0.0323 -0.9977 0.0604 +vn -0.0324 -0.9976 0.0606 +vn -0.3217 0.7224 0.6121 +vn -0.3220 0.7268 0.6066 +vn -0.3220 0.7269 0.6066 +vn -0.4651 -0.0225 0.8850 +vn -0.4648 -0.0215 0.8851 +vn -0.4593 -0.0204 0.8880 +vn 0.4651 0.0218 -0.8850 +vn 0.4663 0.0219 -0.8844 +vn 0.4664 0.0219 -0.8843 +vn 0.4156 0.6937 -0.5882 +vn 0.0101 -0.9998 -0.0193 +vn -0.0102 0.9998 0.0194 +vn 0.3360 0.6915 -0.6394 +vn 0.3315 0.6962 -0.6367 +vn -0.0154 0.9997 0.0163 +vn -0.3360 -0.6915 0.6395 +vn 0.2404 -0.7257 -0.6446 +vn 0.1115 0.9903 0.0826 +vn -0.4058 -0.6955 0.5930 +vn 0.3217 -0.7223 -0.6122 +vn 0.4651 0.0221 -0.8850 +vn 0.3269 0.7008 -0.6340 +vn -0.0102 -0.9995 -0.0292 +vn 0.4590 0.0214 -0.8882 +vn 0.4647 0.0224 -0.8852 +vn -0.1400 -0.6683 0.7306 +vn 0.5161 -0.6972 -0.4976 +vn 0.2770 -0.9532 0.1216 +vn 0.4533 0.0184 -0.8912 +vn 0.4582 0.0214 -0.8886 +vn -0.0206 0.9997 0.0132 +vn 0.3058 -0.7326 -0.6081 +vn -0.3223 0.7313 0.6011 +vn -0.3415 -0.7022 0.6247 +vn 0.4485 0.0132 -0.8937 +vn 0.4522 0.0177 -0.8917 +vn -0.4536 -0.0175 0.8910 +vn -0.4585 -0.0204 0.8884 +vn -0.4530 -0.0172 0.8914 +vn -0.4491 -0.0124 0.8934 +vn -0.0517 0.5509 -0.8330 +vn -0.7174 0.5748 0.3936 +vn -0.3062 0.9421 -0.1369 +vn -0.5314 0.6901 0.4913 +vn 0.1266 0.6614 -0.7393 +vn -0.4488 -0.0119 0.8936 +vn -0.4475 -0.0090 0.8942 +vn -0.1888 0.3812 -0.9050 +vn -0.8605 0.3978 0.3184 +vn -0.7546 0.5403 -0.3725 +vn 0.5354 -0.8044 0.2575 +vn 0.7049 -0.5868 -0.3984 +vn 0.0410 -0.5625 0.8258 +vn -0.5599 0.7833 -0.2703 +vn -0.8219 0.3980 -0.4076 +vn 0.2318 -0.2790 0.9319 +vn 0.9094 -0.2912 -0.2970 +vn 0.8209 -0.4005 0.4071 +vn 0.4470 0.0092 -0.8945 +vn 0.4482 0.0122 -0.8938 +vn 0.7374 -0.5692 0.3636 +vn 0.8520 -0.4135 -0.3211 +vn 0.1820 -0.3964 0.8999 +vn -0.4843 -0.0027 0.8749 +vn -0.4843 -0.0025 0.8749 +vn -0.2576 0.1694 -0.9513 +vn 0.8689 0.1162 0.4812 +vn 0.2576 -0.1695 0.9513 +vn -0.9098 0.2899 0.2969 +vn -0.2322 0.2777 -0.9322 +vn -0.4479 -0.0079 0.8940 +vn -0.4471 -0.0056 0.8945 +vn 0.4463 0.0054 -0.8949 +vn 0.4467 0.0070 -0.8946 +vn 0.5804 0.6472 -0.4943 +vn -0.0527 0.6748 0.7361 +vn -0.3024 -0.9356 -0.1822 +vn -0.4678 -0.0216 0.8836 +vn -0.4724 -0.0208 0.8812 +vn -0.4776 -0.0183 0.8784 +vn -0.4732 -0.0205 0.8807 +vn -0.2306 0.7239 0.6502 +vn 0.4679 0.0227 -0.8835 +vn 0.4727 0.0218 -0.8810 +vn -0.0918 -0.9932 -0.0722 +vn -0.4676 -0.0222 0.8837 +vn 0.1242 0.5630 0.8171 +vn -0.5093 -0.8103 -0.2898 +vn -0.4819 -0.0112 0.8762 +vn -0.4786 -0.0173 0.8779 +vn -0.7060 -0.5801 0.4062 +vn 0.4734 0.0211 -0.8806 +vn 0.4779 0.0187 -0.8782 +vn 0.3513 0.9128 0.2082 +vn 0.0752 -0.6896 -0.7203 +vn -0.5555 -0.6617 0.5036 +vn -0.8762 -0.3366 0.3449 +vn -0.2511 -0.3512 -0.9020 +vn 0.7721 0.4682 0.4298 +vn 0.4822 0.0114 -0.8760 +vn 0.4789 0.0175 -0.8777 +vn 0.4827 0.0104 -0.8757 +vn 0.4844 0.0032 -0.8749 +vn 0.7410 0.5405 -0.3984 +vn 0.5794 0.7463 0.3275 +vn -0.0966 -0.6033 -0.7916 +vn 0.8669 0.1344 0.4801 +vn 0.4842 0.0027 -0.8749 +vn 0.9429 0.0928 -0.3198 +vn 0.9435 0.0866 -0.3199 +vn 0.3128 0.0969 0.9449 +vn 0.3131 0.0905 0.9454 +vn 0.3131 0.0904 0.9454 +vn -0.4835 -0.0030 0.8754 +vn -0.4819 -0.0100 0.8762 +vn -0.7655 -0.4821 -0.4262 +vn 0.2535 0.3437 0.9042 +vn 0.8792 0.3294 -0.3442 +vn -0.8688 -0.1162 -0.4813 +vn -0.4463 -0.0053 0.8948 +vn -0.3132 -0.0898 -0.9454 +vn -0.3134 -0.0839 -0.9459 +vn 0.4464 0.0053 -0.8948 +vn -0.3130 -0.0956 -0.9449 +vn -0.9430 -0.0916 0.3198 +vn -0.9436 -0.0860 0.3199 +vn -0.9436 -0.0859 0.3199 +vn -0.8671 -0.1319 -0.4804 +vn -0.1945 -0.9756 -0.1022 +vn -0.1945 -0.9756 -0.1023 +vn 0.1037 -0.9931 0.0545 +vn 0.1037 -0.9931 0.0544 +vn 0.1036 -0.9931 0.0544 +vn 0.9417 -0.1770 -0.2862 +vn 0.4842 0.0025 -0.8749 +vn -0.9417 0.1770 0.2862 +vn -0.9440 -0.0803 0.3199 +vn 0.8682 -0.2449 0.4316 +vn 0.9440 0.0803 -0.3199 +vn -0.8682 0.2449 -0.4316 +vn 0.3134 0.0839 0.9459 +vn -0.4651 -0.0221 0.8850 +vn -0.4647 -0.0224 0.8852 +vn -0.4590 -0.0214 0.8882 +vn -0.3360 -0.6915 0.6394 +vn -0.4057 -0.6956 0.5929 +vn -0.4663 -0.0219 0.8844 +vn -0.4664 -0.0219 0.8843 +vn -0.4726 -0.0218 0.8810 +vn -0.4681 -0.0228 0.8834 +vn 0.4651 0.0224 -0.8850 +vn 0.4591 0.0214 -0.8881 +vn 0.4648 0.0224 -0.8851 +vn -0.4651 -0.0218 0.8850 +vn -0.1399 -0.6683 0.7306 +vn 0.2769 -0.9532 0.1216 +vn -0.3415 -0.7023 0.6247 +vn 0.4531 0.0183 -0.8913 +vn 0.4485 0.0133 -0.8937 +vn -0.4531 -0.0183 0.8912 +vn -0.4582 -0.0214 0.8886 +vn -0.4523 -0.0178 0.8917 +vn -0.4484 -0.0131 0.8937 +vn -0.4482 -0.0122 0.8939 +vn -0.4471 -0.0094 0.8944 +vn 0.0411 -0.5626 0.8257 +vn -0.5599 0.7833 -0.2702 +vn -0.2323 0.2777 -0.9322 +vn 0.2319 -0.2790 0.9319 +vn 0.4470 0.0091 -0.8945 +vn 0.4482 0.0123 -0.8938 +vn 0.1821 -0.3964 0.8998 +vn -0.4842 -0.0027 0.8750 +vn -0.4842 -0.0025 0.8749 +vn -0.2576 0.1695 -0.9513 +vn 0.2577 -0.1695 0.9513 +vn -0.4467 -0.0070 0.8946 +vn -0.4460 -0.0058 0.8950 +vn 0.4463 0.0055 -0.8949 +vn -0.4779 -0.0187 0.8782 +vn -0.4734 -0.0210 0.8806 +vn -0.5555 -0.6618 0.5035 +vn 0.4676 0.0221 -0.8837 +vn 0.4726 0.0218 -0.8810 +vn -0.4822 -0.0114 0.8760 +vn -0.4789 -0.0176 0.8777 +vn -0.7060 -0.5802 0.4061 +vn -0.8672 -0.1319 -0.4803 +vn -0.4827 -0.0104 0.8757 +vn -0.4844 -0.0032 0.8749 +vn -0.8762 -0.3367 0.3447 +vn -0.8689 -0.1162 -0.4812 +vn -0.4464 -0.0053 0.8948 +vn -0.9431 -0.0916 0.3196 +vn -0.9436 -0.0860 0.3197 +vn -0.9436 -0.0859 0.3197 +vn -0.9441 -0.0803 0.3198 +vn 0.0316 -0.9976 -0.0611 +vn 0.0314 -0.9977 -0.0608 +vn 0.0324 0.9976 -0.0606 +vn 0.0323 0.9977 -0.0604 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.973130 0.033128 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.677629 0.482142 +vt 0.409642 -0.009898 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.669677 0.481452 +vt 0.240570 0.058726 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +vt 0.296927 -0.019617 +vt 0.353285 -0.019617 +vt 0.470812 0.481452 +vt 0.296927 0.014692 +vt 0.271947 0.481452 +vt 0.353285 0.014692 +vt -0.849112 0.025953 +vt 0.468872 0.000137 +vt -0.911121 0.025955 +vt 0.273887 0.000137 +vt 0.475153 0.482142 +vt 0.353285 -0.053929 +vt 0.272677 0.482143 +vt 0.296927 -0.053929 +vt -0.911121 -0.024667 +vt 0.473178 0.006015 +vt -0.849112 -0.024667 +vt 0.274652 0.006015 +s 1 +usemtl Material.069 +f 3060/6794/1832 3061/6796/1833 3062/6799/1834 3332/7308/1834 3333/7310/1834 3063/6801/1834 3064/6803/1835 3065/6807/1836 3066/6808/1834 3067/6809/1834 +f 3065/6806/1836 3064/6804/1835 3068/6811/1837 3069/6814/1837 +f 3070/6816/1838 3071/6819/1839 3072/6822/1840 3073/6823/1838 +f 3074/6827/1841 3075/6828/1841 3061/6797/1833 3060/6793/1832 +f 3075/6829/1842 3074/6826/1842 3076/6831/1842 3077/6833/1842 +f 3078/6834/1842 3079/6837/1842 3076/6831/1842 3074/6826/1842 +f 3078/6835/1841 3074/6827/1841 3060/6793/1832 3080/6839/1841 +f 3073/6824/1837 3065/6806/1836 3069/6814/1837 3070/6817/1837 +f 3080/6840/1834 3060/6794/1834 3067/6809/1834 3066/6808/1834 3065/6807/1834 3073/6825/1834 3072/6821/1834 3336/7316/1834 3337/7318/1834 3081/6843/1834 +f 3073/6825/1834 3072/6821/1834 3066/6808/1834 3065/6807/1834 +f 3067/6810/1842 3060/6795/1842 3080/6841/1842 3081/6844/1842 +f 3331/7307/1842 3329/7303/1842 3082/6846/1842 3083/6847/1842 +f 3069/6815/1842 3068/6812/1842 3083/6847/1842 3082/6846/1842 +f 3328/7302/1842 3076/6831/1842 3079/6837/1842 3335/7315/1842 +f 3071/6820/1842 3070/6818/1842 3069/6815/1842 3082/6846/1842 +f 3075/6830/1843 3077/6832/1844 3062/6800/1845 3061/6798/1843 +f 3063/6802/1846 3083/6848/1847 3068/6813/1843 3064/6805/1843 +f 3333/7311/1848 3331/7306/1849 3083/6848/1847 3063/6802/1846 +f 3081/6845/1850 3079/6838/1851 3078/6836/1838 3080/6842/1838 +f 3337/7319/1852 3335/7314/1853 3079/6838/1851 3081/6845/1850 +f 3084/6849/1854 3085/6850/1854 3086/6851/1855 3087/6853/1856 +f 3088/6854/1857 3087/6852/1857 3089/6857/1858 3090/6859/1859 +f 3091/6861/1860 3092/6862/1860 3093/6863/1861 3094/6865/1862 +f 3093/6863/1863 3095/6866/1863 3096/6868/1863 3097/6870/1863 +f 3098/6872/1864 3099/6873/1864 3100/6874/1864 3101/6876/1864 +f 3102/6878/1865 3085/6850/1865 3103/6879/1865 3095/6867/1865 +f 3092/6862/1866 3102/6877/1866 3095/6866/1866 3093/6863/1866 +f 3104/6880/1867 3105/6881/1867 3102/6877/1866 3092/6862/1866 +f 3105/6882/1868 3086/6851/1868 3085/6850/1865 3102/6878/1865 +f 3106/6883/1869 3098/6871/1869 3101/6875/1869 3107/6884/1869 +f 3088/6855/1869 3108/6887/1869 3098/6871/1869 3106/6883/1869 +f 3108/6886/1864 3109/6888/1864 3099/6873/1864 3098/6872/1864 +f 3100/6874/1870 3094/6864/1870 3110/6890/1870 3111/6891/1870 +f 3095/6867/1871 3103/6879/1871 3112/6892/1871 3096/6869/1871 +f 3107/6884/1872 3101/6875/1872 3113/6894/1872 3114/6896/1872 +f 3099/6873/1873 3091/6860/1873 3094/6864/1873 3100/6874/1873 +f 3109/6888/1873 3115/6898/1873 3091/6860/1873 3099/6873/1873 +f 3115/6897/1874 3104/6880/1874 3092/6862/1860 3091/6861/1860 +f 3105/6881/1867 3104/6880/1867 3116/6899/1875 3117/6901/1875 +f 3109/6888/1876 3108/6886/1876 3118/6902/1876 3119/6904/1876 +f 3104/6880/1874 3115/6897/1874 3120/6905/1877 3116/6899/1878 +f 3121/6907/1854 3103/6879/1854 3085/6850/1854 3084/6849/1854 +f 3118/6903/1879 3090/6858/1879 3122/6910/1879 3123/6912/1879 +f 3120/6906/1880 3119/6904/1880 3124/6913/1880 3125/6915/1880 +f 3119/6904/1881 3118/6902/1881 3123/6911/1881 3124/6913/1881 +f 3116/6899/1878 3120/6905/1877 3125/6916/1882 3126/6917/1883 +f 3086/6851/1868 3105/6882/1868 3117/6900/1884 3127/6918/1884 +f 3115/6898/1885 3109/6888/1885 3119/6904/1885 3120/6906/1885 +f 3087/6853/1856 3086/6851/1855 3127/6918/1886 3089/6856/1886 +f 3108/6887/1887 3088/6855/1887 3090/6858/1887 3118/6903/1887 +f 3126/6917/1883 3125/6916/1882 3128/6919/1888 3129/6920/1889 +f 3122/6910/1890 3130/6921/1891 3131/6924/1892 3132/6925/1893 +f 3133/6926/1894 3126/6917/1894 3129/6920/1894 3134/6928/1894 +f 3130/6921/1895 3135/6931/1895 3136/6933/1895 3131/6924/1895 +f 3127/6918/1896 3117/6900/1896 3133/6927/1896 3135/6932/1896 +f 3089/6856/1897 3127/6918/1897 3135/6932/1897 3130/6922/1897 +f 3117/6901/1898 3116/6899/1898 3126/6917/1898 3133/6926/1898 +f 3090/6859/1859 3089/6857/1858 3130/6923/1891 3122/6909/1890 +f 3132/6925/1893 3131/6924/1892 3137/6937/1899 3138/6938/1900 +f 3134/6928/1901 3129/6920/1901 3139/6939/1901 3140/6941/1901 +f 3131/6924/1902 3136/6933/1902 3141/6942/1902 3137/6937/1902 +f 3136/6934/1903 3134/6929/1903 3140/6940/1903 3141/6943/1903 +f 3124/6913/1904 3123/6911/1904 3142/6944/1904 3143/6947/1904 +f 3125/6916/1905 3124/6914/1905 3143/6949/1905 3128/6919/1905 +f 3123/6912/1906 3122/6910/1906 3132/6925/1906 3142/6946/1906 +f 3135/6932/1907 3133/6927/1907 3134/6930/1907 3136/6935/1907 +f 3141/6943/1908 3140/6940/1908 3144/6951/1908 3145/6952/1908 +f 3146/6954/1909 3138/6938/1909 3147/6955/1909 3148/6956/1909 +f 3149/6958/1910 3150/6960/1910 3151/6962/1910 3152/6964/1910 +f 3150/6960/1911 3146/6953/1911 3148/6957/1911 3151/6962/1911 +f 3129/6920/1889 3128/6919/1888 3149/6959/1912 3139/6939/1913 +f 3143/6948/1914 3142/6945/1914 3146/6953/1914 3150/6960/1914 +f 3128/6919/1915 3143/6949/1915 3150/6961/1915 3149/6959/1915 +f 3142/6946/1916 3132/6925/1916 3138/6938/1916 3146/6954/1916 +f 3153/6965/1917 3154/6967/1917 3155/6969/1918 3156/6970/1918 +f 3144/6950/1919 3157/6973/1919 3158/6974/1919 3159/6976/1919 +f 3160/6979/1920 3161/6981/1920 3162/6983/1920 3163/6984/1920 +f 3148/6956/1921 3147/6955/1921 3164/6987/1921 3165/6989/1921 +f 3137/6936/1922 3141/6943/1922 3145/6952/1922 3166/6993/1922 +f 3140/6941/1923 3139/6939/1923 3157/6973/1923 3144/6950/1923 +f 3138/6938/1900 3137/6937/1899 3166/6992/1924 3147/6955/1925 +f 3139/6939/1913 3149/6959/1912 3152/6963/1926 3157/6973/1927 +f 3097/6870/1928 3096/6868/1928 3167/6994/1928 3168/6996/1928 +f 3112/6892/1929 3169/6997/1929 3170/6999/1929 3171/7003/1929 +f 3113/6893/1930 3111/6891/1930 3172/7004/1930 3173/7006/1930 +f 3169/6998/1931 3114/6895/1932 3174/7008/1933 3170/7000/1934 +f 3103/6879/1935 3121/6907/1935 3169/6997/1935 3112/6892/1935 +f 3094/6865/1862 3093/6863/1861 3097/6870/1936 3110/6889/1937 +f 3101/6876/1938 3100/6874/1938 3111/6891/1938 3113/6893/1938 +f 3121/6908/1939 3107/6885/1939 3114/6895/1932 3169/6998/1931 +f 3171/7002/1940 3170/7001/1940 3175/7010/1940 3176/7013/1940 +f 3173/7006/1941 3172/7004/1941 3177/7014/1941 3178/7017/1941 +f 3170/7001/1934 3174/7009/1933 3179/7020/1942 3175/7010/1943 +f 3174/7009/1944 3173/7007/1944 3178/7018/1944 3179/7020/1944 +f 3110/6889/1937 3097/6870/1936 3168/6996/1945 3180/7022/1946 +f 3096/6869/1947 3112/6892/1947 3171/7003/1947 3167/6995/1947 +f 3111/6891/1948 3110/6890/1948 3180/7021/1948 3172/7004/1948 +f 3114/6896/1949 3113/6894/1949 3173/7007/1949 3174/7009/1949 +f 3179/7020/1950 3178/7018/1950 3181/7023/1950 3182/7025/1950 +f 3177/7015/1951 3183/7026/1951 3184/7027/1951 3185/7029/1951 +f 3186/7031/1952 3176/7011/1952 3187/7034/1952 3188/7036/1952 +f 3183/7026/1953 3189/7038/1954 3190/7039/1955 3184/7027/1956 +f 3168/6996/1957 3167/6994/1957 3186/7033/1957 3189/7038/1957 +f 3180/7022/1946 3168/6996/1945 3189/7038/1954 3183/7026/1953 +f 3167/6995/1958 3171/7003/1958 3176/7012/1958 3186/7032/1958 +f 3172/7005/1959 3180/7022/1959 3183/7026/1959 3177/7015/1959 +f 3188/7036/1960 3187/7034/1960 3161/6981/1960 3160/6979/1960 +f 3184/7027/1956 3190/7039/1955 3191/7040/1961 3192/7042/1961 +f 3190/7039/1962 3188/7037/1962 3160/6980/1963 3191/7040/1963 +f 3187/7034/1964 3193/7043/1964 3153/6966/1965 3161/6981/1966 +f 3175/7010/1943 3179/7020/1942 3182/7025/1967 3193/7044/1968 +f 3178/7019/1969 3177/7016/1969 3185/7030/1969 3181/7024/1969 +f 3176/7013/1970 3175/7010/1970 3193/7044/1970 3187/7035/1970 +f 3189/7038/1971 3186/7033/1971 3188/7037/1971 3190/7039/1971 +f 3194/7045/1972 3195/7047/1972 3196/7048/1972 3197/7050/1972 +f 3147/6955/1925 3166/6992/1924 3198/7053/1973 3164/6987/1973 +f 3195/7047/1974 3192/7041/1974 3199/7056/1975 3196/7048/1975 +f 3157/6973/1927 3152/6963/1926 3200/7059/1976 3158/6974/1976 +f 3185/7030/1977 3184/7028/1977 3192/7041/1974 3195/7047/1974 +f 3182/7025/1978 3181/7023/1978 3194/7046/1979 3154/6967/1980 +f 3193/7044/1968 3182/7025/1967 3154/6967/1917 3153/6965/1917 +f 3181/7024/1981 3185/7030/1981 3195/7047/1981 3194/7045/1981 +f 3201/7062/1982 3159/6977/1982 3158/6975/1982 3200/7060/1982 +f 3165/6990/1982 3201/7062/1982 3200/7060/1982 3202/7063/1982 +f 3164/6988/1983 3198/7054/1982 3201/7062/1982 3165/6990/1982 +f 3198/7054/1982 3203/7065/1982 3159/6977/1982 3201/7062/1982 +f 3204/7067/1984 3163/6985/1984 3162/6982/1985 3156/6971/1986 +f 3197/7051/1984 3204/7067/1984 3156/6971/1986 3155/6968/1986 +f 3196/7049/1984 3199/7057/1984 3204/7067/1984 3197/7051/1984 +f 3199/7057/1984 3205/7068/1984 3163/6985/1984 3204/7067/1984 +f 3152/6964/1987 3151/6962/1987 3202/7064/1987 3200/7061/1987 +f 3192/7042/1961 3191/7040/1961 3205/7069/1988 3199/7058/1988 +f 3166/6993/1989 3145/6952/1989 3203/7066/1989 3198/7055/1989 +f 3154/6967/1980 3194/7046/1979 3197/7052/1990 3155/6969/1990 +f 3151/6962/1991 3148/6957/1991 3165/6991/1991 3202/7064/1991 +f 3191/7040/1963 3160/6980/1963 3163/6986/1992 3205/7069/1992 +f 3145/6952/1993 3144/6951/1993 3159/6978/1993 3203/7066/1993 +f 3161/6981/1966 3153/6966/1965 3156/6972/1994 3162/6983/1994 +f 3206/7071/1854 3207/7072/1854 3208/7073/1855 3209/7075/1856 +f 3210/7076/1995 3209/7074/1995 3211/7078/1996 3212/7079/1997 +f 3213/7080/1870 3214/7082/1870 3215/7085/1870 3216/7087/1870 +f 3217/7089/1864 3218/7090/1864 3213/7081/1864 3219/7093/1864 +f 3220/7095/1865 3207/7072/1865 3221/7096/1865 3222/7097/1865 +f 3223/7099/1866 3220/7094/1866 3222/7098/1866 3224/7100/1866 +f 3225/7101/1866 3226/7102/1866 3220/7094/1866 3223/7099/1866 +f 3226/7103/1868 3208/7073/1868 3207/7072/1865 3220/7095/1865 +f 3227/7104/1998 3217/7088/1998 3219/7092/1998 3228/7105/1998 +f 3210/7076/1998 3229/7107/1998 3217/7088/1998 3227/7104/1998 +f 3229/7106/1864 3230/7108/1864 3218/7090/1864 3217/7089/1864 +f 3222/7097/1871 3221/7096/1871 3231/7110/1871 3232/7112/1871 +f 3228/7105/1999 3219/7092/1999 3233/7113/1999 3234/7115/1999 +f 3235/7116/2000 3228/7105/2001 3234/7115/2002 3236/7118/2003 +f 3218/7091/1873 3237/7120/1873 3214/7082/1873 3213/7080/1873 +f 3230/7109/1873 3238/7122/1873 3237/7120/1873 3218/7091/1873 +f 3226/7102/1875 3225/7101/1875 3239/7123/1875 3240/7125/1875 +f 3230/7108/1876 3229/7106/1876 3241/7126/1876 3242/7128/1876 +f 3225/7101/2004 3238/7121/2004 3243/7131/2005 3239/7123/2006 +f 3227/7104/2007 3206/7070/2007 3209/7074/1995 3210/7076/1995 +f 3228/7105/2001 3235/7116/2000 3206/7070/2007 3227/7104/2007 +f 3235/7117/1854 3221/7096/1854 3207/7072/1854 3206/7071/1854 +f 3244/7132/1896 3240/7124/1896 3245/7134/1896 3246/7136/1896 +f 3241/7127/2008 3212/7079/2008 3247/7138/2008 3248/7140/2008 +f 3243/7130/1880 3242/7129/1880 3249/7141/1880 3250/7144/1880 +f 3242/7128/2009 3241/7126/2009 3248/7139/2009 3249/7143/2009 +f 3208/7073/1868 3226/7103/1868 3240/7124/1884 3244/7132/1884 +f 3238/7122/1885 3230/7109/1885 3242/7129/1885 3243/7130/1885 +f 3209/7075/1856 3208/7073/1855 3244/7132/1886 3211/7077/1886 +f 3229/7107/2010 3210/7076/2010 3212/7079/2010 3241/7127/2010 +f 3250/7145/1905 3249/7142/1905 3251/7149/1905 3252/7150/1905 +f 3249/7143/1904 3248/7139/1904 3253/7151/1904 3251/7147/1904 +f 3254/7155/1883 3250/7145/2011 3252/7150/2012 3255/7156/1889 +f 3247/7138/2013 3256/7158/2014 3257/7159/2015 3258/7160/2016 +f 3211/7077/1897 3244/7132/1897 3246/7136/1897 3256/7157/1897 +f 3240/7125/1898 3239/7123/1898 3254/7154/1898 3245/7133/1898 +f 3212/7079/1997 3211/7078/1996 3256/7158/2014 3247/7138/2013 +f 3239/7123/2006 3243/7131/2005 3250/7146/2011 3254/7154/1883 +f 3258/7160/2016 3257/7159/2015 3259/7162/2017 3260/7163/2018 +f 3261/7166/1901 3255/7156/1901 3262/7167/1901 3263/7168/1901 +f 3257/7159/1902 3264/7172/1902 3265/7173/1902 3259/7162/1902 +f 3264/7170/1903 3261/7164/1903 3263/7169/1903 3265/7174/1903 +f 3248/7140/2019 3247/7138/2019 3258/7160/2019 3253/7153/2019 +f 3246/7136/2020 3245/7134/2020 3261/7165/2020 3264/7171/2020 +f 3256/7158/1895 3246/7137/1895 3264/7172/1895 3257/7159/1895 +f 3245/7135/1894 3254/7155/1894 3255/7156/1894 3261/7166/1894 +f 3263/7168/2021 3262/7167/2021 3266/7175/2021 3267/7176/2021 +f 3259/7161/1922 3265/7174/1922 3268/7178/1922 3269/7180/1922 +f 3265/7174/1908 3263/7169/1908 3267/7177/1908 3268/7178/1908 +f 3270/7181/2022 3260/7163/2022 3271/7183/2022 3272/7184/2022 +f 3255/7156/1889 3252/7150/2012 3273/7186/2023 3262/7167/2024 +f 3251/7148/1914 3253/7152/1914 3270/7182/1914 3274/7189/1914 +f 3252/7150/1915 3251/7149/1915 3274/7188/1915 3273/7186/1915 +f 3253/7153/2025 3258/7160/2025 3260/7163/2025 3270/7181/2025 +f 3275/7190/2026 3276/7192/2026 3277/7194/2027 3278/7195/2027 +f 3267/7176/2028 3266/7175/2028 3279/7198/2028 3280/7200/2028 +f 3281/7204/1920 3282/7206/1920 3283/7208/1920 3284/7209/1920 +f 3272/7184/2029 3271/7183/2029 3285/7213/2029 3286/7215/2029 +f 3260/7163/2018 3259/7162/2017 3269/7179/2030 3271/7183/2031 +f 3262/7167/2024 3273/7186/2023 3287/7219/2032 3266/7175/1927 +f 3274/7189/1911 3270/7182/1911 3272/7185/1911 3288/7221/1911 +f 3273/7187/1910 3274/7189/1910 3288/7221/1910 3287/7220/1910 +f 3231/7110/1929 3236/7119/1929 3289/7222/1929 3290/7224/1929 +f 3233/7114/1930 3216/7086/1930 3291/7228/1930 3292/7230/1930 +f 3236/7118/2003 3234/7115/2002 3293/7231/2033 3289/7223/2034 +f 3234/7115/2035 3233/7113/2035 3292/7229/2035 3293/7231/2035 +f 3224/7100/1863 3222/7098/1863 3232/7111/1863 3294/7232/1863 +f 3221/7096/1935 3235/7117/1935 3236/7119/1935 3231/7110/1935 +f 3214/7083/2036 3224/7100/2036 3294/7232/1936 3215/7084/2037 +f 3219/7093/1938 3213/7081/1938 3216/7086/1938 3233/7114/1938 +f 3289/7223/2034 3293/7231/2033 3295/7233/2038 3296/7234/2039 +f 3293/7231/2040 3292/7229/2040 3297/7236/2040 3295/7233/2040 +f 3291/7226/1959 3298/7240/1959 3299/7241/1959 3300/7242/1959 +f 3301/7246/1958 3290/7224/1958 3302/7248/1958 3303/7251/1958 +f 3294/7232/1928 3232/7111/1928 3301/7245/1928 3304/7254/1928 +f 3215/7084/2037 3294/7232/1936 3304/7254/1945 3298/7238/1946 +f 3232/7112/1947 3231/7110/1947 3290/7224/1947 3301/7246/1947 +f 3216/7087/1948 3215/7085/1948 3298/7239/1948 3291/7227/1948 +f 3300/7242/1951 3299/7241/1951 3305/7256/1951 3306/7258/1951 +f 3303/7252/1952 3302/7249/1952 3307/7261/1952 3308/7263/1952 +f 3299/7241/1953 3309/7264/1954 3310/7265/1955 3305/7256/1956 +f 3309/7264/1971 3303/7253/1971 3308/7262/1971 3310/7265/1971 +f 3292/7230/1941 3291/7228/1941 3300/7243/1941 3297/7235/1941 +f 3290/7225/1940 3289/7223/1940 3296/7234/1940 3302/7250/1940 +f 3304/7255/1957 3301/7247/1957 3303/7253/1957 3309/7264/1957 +f 3298/7240/1946 3304/7255/1945 3309/7264/1954 3299/7241/1953 +f 3310/7265/1962 3308/7262/1962 3281/7205/1963 3311/7266/1963 +f 3307/7261/1964 3312/7267/1964 3275/7191/1965 3282/7206/1966 +f 3313/7269/2041 3306/7259/2041 3314/7271/2041 3315/7272/2041 +f 3312/7268/2042 3316/7274/2043 3276/7192/2026 3275/7190/2026 +f 3295/7233/2044 3297/7236/2044 3313/7270/2044 3316/7274/2044 +f 3296/7234/2039 3295/7233/2038 3316/7274/2043 3312/7268/2042 +f 3297/7237/1969 3300/7244/1969 3306/7259/1969 3313/7269/1969 +f 3302/7250/1970 3296/7234/1970 3312/7268/1970 3307/7260/1970 +f 3315/7272/2045 3314/7271/2045 3317/7275/2045 3318/7277/2045 +f 3271/7183/2031 3269/7179/2030 3319/7281/2046 3285/7213/2046 +f 3266/7175/1927 3287/7219/2032 3320/7284/1976 3279/7198/1976 +f 3314/7271/1974 3321/7287/1974 3322/7289/1975 3317/7275/1975 +f 3305/7256/1956 3310/7265/1955 3311/7266/1961 3321/7288/1961 +f 3308/7263/1960 3307/7261/1960 3282/7206/1960 3281/7204/1960 +f 3306/7259/1977 3305/7257/1977 3321/7287/1974 3314/7271/1974 +f 3316/7274/2047 3313/7270/2047 3315/7273/2048 3276/7192/2049 +f 3323/7292/1982 3280/7201/1982 3279/7199/1982 3320/7285/1982 +f 3286/7216/1982 3323/7292/1982 3320/7285/1982 3324/7294/1982 +f 3285/7214/1983 3319/7282/1982 3323/7293/1982 3286/7217/1982 +f 3319/7282/1982 3325/7296/1982 3280/7202/1982 3323/7293/1982 +f 3326/7298/1984 3284/7210/1984 3283/7207/1985 3278/7196/1986 +f 3318/7278/1984 3326/7298/1984 3278/7196/1986 3277/7193/1986 +f 3317/7276/1984 3322/7290/1984 3326/7299/1984 3318/7279/1984 +f 3322/7290/1984 3327/7300/1984 3284/7211/1984 3326/7299/1984 +f 3287/7220/1987 3288/7221/1987 3324/7295/1987 3320/7286/1987 +f 3321/7288/1961 3311/7266/1961 3327/7301/1988 3322/7291/1988 +f 3269/7180/1989 3268/7178/1989 3325/7297/1989 3319/7283/1989 +f 3276/7192/2049 3315/7273/2048 3318/7280/2050 3277/7194/2050 +f 3288/7221/1991 3272/7185/1991 3286/7218/1991 3324/7295/1991 +f 3311/7266/1963 3281/7205/1963 3284/7212/1992 3327/7301/1992 +f 3268/7178/1993 3267/7177/1993 3280/7203/1993 3325/7297/1993 +f 3282/7206/1966 3275/7191/1965 3278/7197/1994 3283/7208/1994 +f 3072/6822/1840 3071/6819/1839 3334/7312/2051 3336/7317/2052 +f 3336/7317/2052 3334/7312/2051 3335/7314/1853 3337/7319/1852 +f 3062/6800/1845 3077/6832/1844 3330/7304/2053 3332/7309/2054 +f 3332/7309/2054 3330/7304/2053 3331/7306/1849 3333/7311/1848 +f 3082/6846/1842 3329/7303/1842 3334/7313/1842 3071/6820/1842 +f 3329/7303/1842 3328/7302/1842 3335/7315/1842 3334/7313/1842 +f 3077/6833/1842 3076/6831/1842 3328/7302/1842 3330/7305/1842 +f 3330/7305/1842 3328/7302/1842 3329/7303/1842 3331/7307/1842 +o Chair.007 +v 6.775808 0.457174 6.577875 +v 6.775808 0.471743 6.577875 +v 6.798890 0.471743 6.533952 +v 6.985870 0.471743 6.178140 +v 7.008952 0.471743 6.134217 +v 7.008952 0.457174 6.134217 +v 6.985870 0.457174 6.178140 +v 6.798890 0.457174 6.533952 +v 7.349434 0.471743 6.313142 +v 7.349434 0.457174 6.313142 +v 7.349434 0.442604 6.313142 +v 7.328213 0.442604 6.353524 +v 6.985870 0.442604 6.178140 +v 7.008952 0.442604 6.134217 +v 7.116290 0.457174 6.756800 +v 7.116290 0.471743 6.756800 +v 7.137511 0.457174 6.716417 +v 7.137511 0.471743 6.716417 +v 7.116290 0.442604 6.756800 +v 7.137511 0.442604 6.716417 +v 6.775808 0.442604 6.577875 +v 6.798890 0.442604 6.533952 +v 7.328213 0.457174 6.353524 +v 7.328213 0.471743 6.353524 +v 7.179630 0.479852 6.221457 +v 7.182347 0.485443 6.216287 +v 7.066308 0.485443 6.155309 +v 7.063591 0.479852 6.160479 +v 7.063673 0.471768 6.160322 +v 7.034913 0.479742 6.145409 +v 7.037309 0.472092 6.146468 +v 7.188790 0.471695 6.204025 +v 7.188709 0.479779 6.204181 +v 7.304746 0.479779 6.265159 +v 7.304828 0.471695 6.265003 +v 7.302145 0.485620 6.270109 +v 7.330385 0.481200 6.284949 +v 7.330917 0.475847 6.278912 +v 7.182313 0.465927 6.216352 +v 7.186073 0.466103 6.209196 +v 7.302111 0.466103 6.270174 +v 7.298350 0.465927 6.277330 +v 7.186107 0.485620 6.209131 +v 7.298384 0.485443 6.277265 +v 7.072670 0.479779 6.143202 +v 7.070069 0.485620 6.148152 +v 7.179712 0.471768 6.221301 +v 7.295749 0.471768 6.282279 +v 7.066275 0.465927 6.155373 +v 7.070035 0.466103 6.148217 +v 7.328136 0.468438 6.277252 +v 7.323439 0.463313 6.281382 +v 7.326561 0.481039 6.292073 +v 7.319616 0.463152 6.288505 +v 7.319084 0.468505 6.294541 +v 7.072752 0.471695 6.143046 +v 7.044013 0.479673 6.128142 +v 7.039740 0.485200 6.132214 +v 7.041582 0.466565 6.142397 +v 7.045291 0.466732 6.135214 +v 7.046408 0.472023 6.129203 +v 7.295667 0.479852 6.282436 +v 7.012268 0.462769 6.133308 +v 7.018033 0.458149 6.130022 +v 7.021698 0.458289 6.122816 +v 7.021386 0.462711 6.116053 +v 7.016925 0.469105 6.113908 +v 7.036030 0.485033 6.139397 +v 7.000373 0.444759 6.105011 +v 6.994317 0.449210 6.102027 +v 7.007806 0.469163 6.131164 +v 6.985184 0.449250 6.119275 +v 6.991240 0.444800 6.122258 +v 7.011160 0.473724 6.117195 +v 6.987399 0.452426 6.104709 +v 7.007494 0.473585 6.124401 +v 6.983768 0.452329 6.111933 +v 6.969475 0.422144 6.111021 +v 6.976485 0.420115 6.114504 +v 6.978617 0.422126 6.093777 +v 6.971011 0.423592 6.096097 +v 6.967402 0.423548 6.103333 +v 6.998158 0.441584 6.119577 +v 7.001788 0.441681 6.112353 +v 6.957181 0.387587 6.088830 +v 6.953573 0.387548 6.096066 +v 6.984091 0.418648 6.112185 +v 6.962749 0.384543 6.107286 +v 6.970394 0.383259 6.104987 +v 6.985626 0.420096 6.097261 +v 6.987700 0.418693 6.104950 +v 6.974002 0.383298 6.097751 +v 6.971890 0.384527 6.090043 +v 7.383489 0.391193 6.328587 +v 7.376464 0.390246 6.324695 +v 7.412850 0.038839 6.343817 +v 7.419876 0.039785 6.347708 +v 6.964828 0.386303 6.086530 +v 6.888094 0.043282 6.046207 +v 6.880448 0.044565 6.048506 +v 7.395037 0.391869 6.318925 +v 7.391122 0.391848 6.325999 +v 7.427508 0.040440 6.345121 +v 7.431424 0.040461 6.338046 +v 6.886015 0.041522 6.066963 +v 6.893661 0.040238 6.064664 +v 6.955685 0.386319 6.103774 +v 7.357777 0.467366 6.299344 +v 7.356587 0.463395 6.292402 +v 7.321864 0.475914 6.296203 +v 7.347555 0.463444 6.309703 +v 7.353902 0.467246 6.306440 +v 7.345074 0.454097 6.292751 +v 7.341199 0.453977 6.299847 +v 7.342390 0.457948 6.306789 +v 7.366765 0.445023 6.319798 +v 7.374155 0.446867 6.317083 +v 7.361718 0.440490 6.301498 +v 7.357811 0.440432 6.308577 +v 7.360091 0.442358 6.316091 +v 7.351420 0.457898 6.289488 +v 7.371167 0.413022 6.315596 +v 7.373617 0.414271 6.323199 +v 7.369109 0.442334 6.298783 +v 7.382633 0.414256 6.305890 +v 7.375081 0.413059 6.308520 +v 7.378063 0.446925 6.310005 +v 7.388078 0.417198 6.324399 +v 7.391990 0.417235 6.317324 +v 7.375782 0.444999 6.302489 +v 7.389542 0.415986 6.309720 +v 7.392503 0.391184 6.311276 +v 7.385479 0.390238 6.307386 +v 7.380526 0.416001 6.327029 +v 7.373930 0.389562 6.317047 +v 7.377846 0.389583 6.309973 +v 7.414233 0.038175 6.329094 +v 7.410317 0.038155 6.336169 +v 6.878952 0.043298 6.063450 +v 7.421865 0.038830 6.326507 +v 6.895157 0.041506 6.049719 +v 6.887054 0.042402 6.056584 +v 6.897269 0.040277 6.057427 +v 6.876840 0.044527 6.055742 +v 7.420871 0.039308 6.337107 +v 7.428890 0.039777 6.330398 +v 6.936086 0.479852 6.684905 +v 6.938803 0.485443 6.679735 +v 6.822765 0.485443 6.618756 +v 6.820047 0.479852 6.623927 +v 6.820129 0.471768 6.623771 +v 6.791369 0.479742 6.608856 +v 6.793765 0.472092 6.609916 +v 7.058567 0.466103 6.733622 +v 7.061284 0.471695 6.728451 +v 7.084593 0.468438 6.740700 +v 7.079895 0.463313 6.744830 +v 6.938769 0.465927 6.679800 +v 6.942530 0.466103 6.672643 +v 7.054806 0.465927 6.740777 +v 6.942564 0.485620 6.672579 +v 7.054841 0.485443 6.740713 +v 7.058601 0.485620 6.733557 +v 6.945165 0.479779 6.667628 +v 7.061202 0.479779 6.728607 +v 6.829126 0.479779 6.606650 +v 6.826525 0.485620 6.611600 +v 6.936168 0.471768 6.684750 +v 7.052205 0.471768 6.745728 +v 6.822731 0.465927 6.618821 +v 6.826491 0.466103 6.611665 +v 7.083017 0.481039 6.755520 +v 7.086841 0.481200 6.748397 +v 7.076072 0.463152 6.751953 +v 7.075539 0.468505 6.757990 +v 7.052123 0.479852 6.745883 +v 7.078320 0.475914 6.759650 +v 6.945247 0.471695 6.667473 +v 6.829208 0.471695 6.606494 +v 6.800468 0.479673 6.591590 +v 6.796196 0.485200 6.595662 +v 6.798038 0.466565 6.605844 +v 6.801748 0.466732 6.598662 +v 6.802865 0.472023 6.592650 +v 6.792486 0.485033 6.602844 +v 6.767615 0.473724 6.580643 +v 6.763950 0.473585 6.587849 +v 6.768723 0.462769 6.596756 +v 6.774488 0.458149 6.593469 +v 6.778154 0.458289 6.586263 +v 6.777842 0.462711 6.579501 +v 6.758244 0.441681 6.575800 +v 6.756829 0.444759 6.568459 +v 6.754613 0.441584 6.583025 +v 6.773381 0.469105 6.577355 +v 6.750772 0.449210 6.565475 +v 6.764262 0.469163 6.594611 +v 6.741640 0.449250 6.582723 +v 6.747696 0.444800 6.585707 +v 6.725932 0.422144 6.574468 +v 6.732941 0.420115 6.577953 +v 6.743855 0.452426 6.568157 +v 6.735074 0.422126 6.557225 +v 6.727467 0.423592 6.559545 +v 6.740225 0.452329 6.575381 +v 6.723858 0.423548 6.566780 +v 6.721282 0.386303 6.549977 +v 6.713637 0.387587 6.552277 +v 6.710029 0.387548 6.559513 +v 6.712141 0.386319 6.567221 +v 6.740548 0.418648 6.575633 +v 6.719204 0.384543 6.570735 +v 6.726850 0.383259 6.568435 +v 6.742082 0.420096 6.560709 +v 6.744157 0.418693 6.568398 +v 7.139946 0.391193 6.792034 +v 7.132920 0.390246 6.788144 +v 7.169307 0.038839 6.807265 +v 7.176332 0.039785 6.811156 +v 6.644551 0.043282 6.509655 +v 6.636905 0.044565 6.511953 +v 7.151494 0.391869 6.782372 +v 7.147578 0.391848 6.789447 +v 7.183965 0.040440 6.808568 +v 7.187881 0.040461 6.801494 +v 6.642471 0.041522 6.530411 +v 6.650117 0.040238 6.528111 +v 6.728346 0.384527 6.553491 +v 6.730458 0.383298 6.561199 +v 7.104011 0.463444 6.773150 +v 7.110358 0.467246 6.769888 +v 7.101530 0.454097 6.756199 +v 7.097655 0.453977 6.763295 +v 7.098845 0.457948 6.770237 +v 7.087374 0.475847 6.742360 +v 7.116547 0.442358 6.779540 +v 7.123221 0.445023 6.783246 +v 7.114267 0.440432 6.772024 +v 7.107876 0.457898 6.752935 +v 7.125565 0.442334 6.762231 +v 7.118175 0.440490 6.764946 +v 7.114233 0.467366 6.762792 +v 7.130611 0.446867 6.780531 +v 7.134520 0.446925 6.773452 +v 7.113043 0.463395 6.755849 +v 7.139089 0.414256 6.769338 +v 7.131537 0.413059 6.771967 +v 7.144534 0.417198 6.787847 +v 7.148447 0.417235 6.780771 +v 7.132239 0.444999 6.765937 +v 7.145998 0.415986 6.773167 +v 7.148960 0.391184 6.774724 +v 7.136981 0.416001 6.790477 +v 7.127624 0.413022 6.779044 +v 7.134302 0.389583 6.773421 +v 7.130387 0.389562 6.780495 +v 7.130073 0.414271 6.786647 +v 7.170689 0.038175 6.792542 +v 7.166774 0.038155 6.799617 +v 6.635408 0.043298 6.526897 +v 6.651613 0.041506 6.513167 +v 7.141935 0.390238 6.770833 +v 7.178322 0.038830 6.789955 +v 6.643510 0.042402 6.520033 +v 6.653725 0.040277 6.520875 +v 6.633296 0.044527 6.519189 +v 7.177326 0.039308 6.800555 +v 7.185347 0.039777 6.793845 +v 7.201078 0.438476 6.595453 +v 7.264645 0.438476 6.474489 +v 7.201078 0.453045 6.595453 +v 7.264645 0.453045 6.474489 +v 6.861217 0.453045 6.415348 +v 6.923544 0.453045 6.296744 +v 7.264645 0.423906 6.474489 +v 7.201078 0.423906 6.595453 +v 6.923543 0.423906 6.296744 +v 6.861217 0.423906 6.415348 +vn -0.2160 -0.0000 0.9764 +vn -0.6752 -0.7071 0.2100 +vn -0.8852 -0.0000 -0.4652 +vn -0.2100 -0.7071 -0.6752 +vn 0.0150 0.6667 -0.7452 +vn 0.4652 -0.0000 -0.8852 +vn -0.0000 -1.0000 -0.0000 +vn 0.0313 -0.9977 -0.0605 +vn 0.0317 -0.9976 -0.0613 +vn -0.4652 -0.0000 0.8852 +vn 0.8852 -0.0000 0.4652 +vn -0.0000 1.0000 -0.0000 +vn 0.0321 0.9977 -0.0601 +vn 0.0325 0.9976 -0.0609 +vn -0.0317 0.9976 0.0613 +vn -0.0313 0.9977 0.0605 +vn -0.0314 0.9977 0.0608 +vn -0.0316 0.9976 0.0611 +vn -0.0325 -0.9976 0.0609 +vn -0.0321 -0.9977 0.0601 +vn -0.0323 -0.9977 0.0604 +vn -0.0324 -0.9976 0.0606 +vn -0.3217 0.7224 0.6121 +vn -0.3220 0.7268 0.6066 +vn -0.3220 0.7269 0.6066 +vn -0.4651 -0.0225 0.8850 +vn -0.4648 -0.0215 0.8851 +vn -0.4593 -0.0204 0.8880 +vn 0.4651 0.0218 -0.8850 +vn 0.4663 0.0219 -0.8844 +vn 0.4664 0.0219 -0.8843 +vn 0.4156 0.6937 -0.5882 +vn 0.0101 -0.9998 -0.0193 +vn -0.0102 0.9998 0.0194 +vn 0.3360 0.6915 -0.6394 +vn 0.3315 0.6962 -0.6367 +vn -0.0154 0.9997 0.0163 +vn -0.3360 -0.6915 0.6395 +vn 0.2404 -0.7257 -0.6446 +vn 0.1115 0.9903 0.0826 +vn -0.4058 -0.6955 0.5930 +vn 0.3217 -0.7223 -0.6122 +vn 0.4651 0.0221 -0.8850 +vn 0.3269 0.7008 -0.6340 +vn -0.0102 -0.9995 -0.0292 +vn 0.4590 0.0214 -0.8882 +vn 0.4647 0.0224 -0.8852 +vn -0.1400 -0.6683 0.7306 +vn 0.5161 -0.6972 -0.4976 +vn 0.2770 -0.9532 0.1216 +vn 0.4533 0.0184 -0.8912 +vn 0.4582 0.0214 -0.8886 +vn -0.0206 0.9997 0.0132 +vn 0.3058 -0.7326 -0.6081 +vn -0.3223 0.7313 0.6011 +vn -0.3415 -0.7022 0.6247 +vn 0.4485 0.0132 -0.8937 +vn 0.4522 0.0177 -0.8917 +vn -0.4536 -0.0175 0.8910 +vn -0.4585 -0.0204 0.8884 +vn -0.4530 -0.0172 0.8914 +vn -0.4491 -0.0124 0.8934 +vn -0.0517 0.5509 -0.8330 +vn -0.7174 0.5748 0.3936 +vn -0.3062 0.9421 -0.1369 +vn -0.5314 0.6901 0.4913 +vn 0.1266 0.6614 -0.7393 +vn -0.4488 -0.0119 0.8936 +vn -0.4475 -0.0090 0.8942 +vn -0.1888 0.3812 -0.9050 +vn -0.8605 0.3978 0.3184 +vn -0.7546 0.5403 -0.3725 +vn 0.5354 -0.8044 0.2575 +vn 0.7049 -0.5868 -0.3984 +vn 0.0410 -0.5625 0.8258 +vn -0.5599 0.7833 -0.2703 +vn -0.8219 0.3980 -0.4076 +vn 0.2318 -0.2790 0.9319 +vn 0.9094 -0.2912 -0.2970 +vn 0.8209 -0.4005 0.4071 +vn 0.4470 0.0092 -0.8945 +vn 0.4482 0.0122 -0.8938 +vn 0.7374 -0.5692 0.3636 +vn 0.8520 -0.4135 -0.3211 +vn 0.1820 -0.3964 0.8999 +vn -0.4843 -0.0027 0.8749 +vn -0.4843 -0.0025 0.8749 +vn -0.2576 0.1694 -0.9513 +vn 0.8689 0.1162 0.4812 +vn 0.2576 -0.1695 0.9513 +vn -0.9098 0.2899 0.2969 +vn -0.2322 0.2777 -0.9322 +vn -0.4479 -0.0079 0.8940 +vn -0.4471 -0.0056 0.8945 +vn 0.4463 0.0054 -0.8949 +vn 0.4467 0.0070 -0.8946 +vn 0.5804 0.6472 -0.4943 +vn -0.0527 0.6748 0.7361 +vn -0.3024 -0.9356 -0.1822 +vn -0.4678 -0.0216 0.8836 +vn -0.4724 -0.0208 0.8812 +vn -0.4776 -0.0183 0.8784 +vn -0.4732 -0.0205 0.8807 +vn -0.2306 0.7239 0.6502 +vn 0.4679 0.0227 -0.8835 +vn 0.4727 0.0218 -0.8810 +vn -0.0918 -0.9932 -0.0722 +vn -0.4676 -0.0222 0.8837 +vn 0.1242 0.5630 0.8171 +vn -0.5093 -0.8103 -0.2898 +vn -0.4819 -0.0112 0.8762 +vn -0.4786 -0.0173 0.8779 +vn -0.7060 -0.5801 0.4062 +vn 0.4734 0.0211 -0.8806 +vn 0.4779 0.0187 -0.8782 +vn 0.3513 0.9128 0.2082 +vn 0.0752 -0.6896 -0.7203 +vn -0.5555 -0.6617 0.5036 +vn -0.8762 -0.3366 0.3449 +vn -0.2511 -0.3512 -0.9020 +vn 0.7721 0.4682 0.4298 +vn 0.4822 0.0114 -0.8760 +vn 0.4789 0.0175 -0.8777 +vn 0.4827 0.0104 -0.8757 +vn 0.4844 0.0032 -0.8749 +vn 0.7410 0.5405 -0.3984 +vn 0.5794 0.7463 0.3275 +vn -0.0966 -0.6033 -0.7916 +vn 0.8669 0.1344 0.4801 +vn 0.4842 0.0027 -0.8749 +vn 0.9429 0.0928 -0.3198 +vn 0.9435 0.0866 -0.3199 +vn 0.3128 0.0969 0.9449 +vn 0.3131 0.0905 0.9454 +vn 0.3131 0.0904 0.9454 +vn -0.4835 -0.0030 0.8754 +vn -0.4819 -0.0100 0.8762 +vn -0.7655 -0.4821 -0.4262 +vn 0.2535 0.3437 0.9042 +vn 0.8792 0.3294 -0.3442 +vn -0.8688 -0.1162 -0.4813 +vn -0.4463 -0.0053 0.8948 +vn -0.3132 -0.0898 -0.9454 +vn -0.3134 -0.0839 -0.9459 +vn 0.4464 0.0053 -0.8948 +vn -0.3130 -0.0956 -0.9449 +vn -0.9430 -0.0916 0.3198 +vn -0.9436 -0.0860 0.3199 +vn -0.9436 -0.0859 0.3199 +vn -0.8671 -0.1319 -0.4804 +vn -0.1945 -0.9756 -0.1022 +vn -0.1945 -0.9756 -0.1023 +vn 0.1037 -0.9931 0.0545 +vn 0.1037 -0.9931 0.0544 +vn 0.1036 -0.9931 0.0544 +vn 0.9417 -0.1770 -0.2862 +vn 0.4842 0.0025 -0.8749 +vn -0.9417 0.1770 0.2862 +vn -0.9440 -0.0803 0.3199 +vn 0.8682 -0.2449 0.4316 +vn 0.9440 0.0803 -0.3199 +vn -0.8682 0.2449 -0.4316 +vn 0.3134 0.0839 0.9459 +vn -0.4651 -0.0221 0.8850 +vn -0.4647 -0.0224 0.8852 +vn -0.4590 -0.0214 0.8882 +vn -0.3360 -0.6915 0.6394 +vn -0.4057 -0.6956 0.5929 +vn -0.4663 -0.0219 0.8844 +vn -0.4664 -0.0219 0.8843 +vn -0.4726 -0.0218 0.8810 +vn -0.4681 -0.0228 0.8834 +vn 0.4651 0.0224 -0.8850 +vn 0.4591 0.0214 -0.8881 +vn 0.4648 0.0224 -0.8851 +vn -0.4651 -0.0218 0.8850 +vn -0.1399 -0.6683 0.7306 +vn 0.2769 -0.9532 0.1216 +vn -0.3415 -0.7023 0.6247 +vn 0.4531 0.0183 -0.8913 +vn 0.4485 0.0133 -0.8937 +vn -0.4531 -0.0183 0.8912 +vn -0.4582 -0.0214 0.8886 +vn -0.4523 -0.0178 0.8917 +vn -0.4484 -0.0131 0.8937 +vn -0.4482 -0.0122 0.8939 +vn -0.4471 -0.0094 0.8944 +vn 0.0411 -0.5626 0.8257 +vn -0.5599 0.7833 -0.2702 +vn -0.2323 0.2777 -0.9322 +vn 0.2319 -0.2790 0.9319 +vn 0.4470 0.0091 -0.8945 +vn 0.4482 0.0123 -0.8938 +vn 0.1821 -0.3964 0.8998 +vn -0.4842 -0.0027 0.8750 +vn -0.4842 -0.0025 0.8749 +vn -0.2576 0.1695 -0.9513 +vn 0.2577 -0.1695 0.9513 +vn -0.4467 -0.0070 0.8946 +vn -0.4460 -0.0058 0.8950 +vn 0.4463 0.0055 -0.8949 +vn -0.4779 -0.0187 0.8782 +vn -0.4734 -0.0210 0.8806 +vn -0.5555 -0.6618 0.5035 +vn 0.4676 0.0221 -0.8837 +vn 0.4726 0.0218 -0.8810 +vn -0.4822 -0.0114 0.8760 +vn -0.4789 -0.0176 0.8777 +vn -0.7060 -0.5802 0.4061 +vn -0.8672 -0.1319 -0.4803 +vn -0.4827 -0.0104 0.8757 +vn -0.4844 -0.0032 0.8749 +vn -0.8762 -0.3367 0.3447 +vn -0.8689 -0.1162 -0.4812 +vn -0.4464 -0.0053 0.8948 +vn -0.9431 -0.0916 0.3196 +vn -0.9436 -0.0860 0.3197 +vn -0.9436 -0.0859 0.3197 +vn -0.9441 -0.0803 0.3198 +vn 0.0316 -0.9976 -0.0611 +vn 0.0314 -0.9977 -0.0608 +vn 0.0324 0.9976 -0.0606 +vn 0.0323 0.9977 -0.0604 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.973130 0.033128 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.677629 0.482142 +vt 0.409642 -0.009898 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.669677 0.481452 +vt 0.240570 0.058726 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +vt 0.296927 -0.019617 +vt 0.353285 -0.019617 +vt 0.470812 0.481452 +vt 0.296927 0.014692 +vt 0.271947 0.481452 +vt 0.353285 0.014692 +vt -0.849112 0.025953 +vt 0.468872 0.000137 +vt -0.911121 0.025955 +vt 0.273887 0.000137 +vt 0.475153 0.482142 +vt 0.353285 -0.053929 +vt 0.272677 0.482143 +vt 0.296927 -0.053929 +vt -0.911121 -0.024667 +vt 0.473178 0.006015 +vt -0.849112 -0.024667 +vt 0.274652 0.006015 +s 1 +usemtl Material.070 +f 3338/7321/2055 3339/7323/2056 3340/7326/2057 3610/7835/2057 3611/7837/2057 3341/7328/2057 3342/7330/2058 3343/7334/2059 3344/7335/2057 3345/7336/2057 +f 3343/7333/2059 3342/7331/2058 3346/7338/2060 3347/7341/2060 +f 3348/7343/2061 3349/7346/2062 3350/7349/2063 3351/7350/2061 +f 3352/7354/2064 3353/7355/2064 3339/7324/2056 3338/7320/2055 +f 3353/7356/2065 3352/7353/2065 3354/7358/2065 3355/7360/2065 +f 3356/7361/2065 3357/7364/2065 3354/7358/2065 3352/7353/2065 +f 3356/7362/2064 3352/7354/2064 3338/7320/2055 3358/7366/2064 +f 3351/7351/2060 3343/7333/2059 3347/7341/2060 3348/7344/2060 +f 3358/7367/2057 3338/7321/2057 3345/7336/2057 3344/7335/2057 3343/7334/2057 3351/7352/2057 3350/7348/2057 3614/7843/2057 3615/7845/2057 3359/7370/2057 +f 3351/7352/2057 3350/7348/2057 3344/7335/2057 3343/7334/2057 +f 3345/7337/2065 3338/7322/2065 3358/7368/2065 3359/7371/2065 +f 3609/7834/2065 3607/7830/2065 3360/7373/2065 3361/7374/2065 +f 3347/7342/2065 3346/7339/2065 3361/7374/2065 3360/7373/2065 +f 3606/7829/2065 3354/7358/2065 3357/7364/2065 3613/7842/2065 +f 3349/7347/2065 3348/7345/2065 3347/7342/2065 3360/7373/2065 +f 3353/7357/2066 3355/7359/2067 3340/7327/2068 3339/7325/2066 +f 3341/7329/2069 3361/7375/2070 3346/7340/2066 3342/7332/2066 +f 3611/7838/2071 3609/7833/2072 3361/7375/2070 3341/7329/2069 +f 3359/7372/2073 3357/7365/2074 3356/7363/2061 3358/7369/2061 +f 3615/7846/2075 3613/7841/2076 3357/7365/2074 3359/7372/2073 +f 3362/7376/2077 3363/7377/2077 3364/7378/2078 3365/7380/2079 +f 3366/7381/2080 3365/7379/2080 3367/7384/2081 3368/7386/2082 +f 3369/7388/2083 3370/7389/2083 3371/7390/2084 3372/7392/2085 +f 3371/7390/2086 3373/7393/2086 3374/7395/2086 3375/7397/2086 +f 3376/7399/2087 3377/7400/2087 3378/7401/2087 3379/7403/2087 +f 3380/7405/2088 3363/7377/2088 3381/7406/2088 3373/7394/2088 +f 3370/7389/2089 3380/7404/2089 3373/7393/2089 3371/7390/2089 +f 3382/7407/2090 3383/7408/2090 3380/7404/2089 3370/7389/2089 +f 3383/7409/2091 3364/7378/2091 3363/7377/2088 3380/7405/2088 +f 3384/7410/2092 3376/7398/2092 3379/7402/2092 3385/7411/2092 +f 3366/7382/2092 3386/7414/2092 3376/7398/2092 3384/7410/2092 +f 3386/7413/2087 3387/7415/2087 3377/7400/2087 3376/7399/2087 +f 3378/7401/2093 3372/7391/2093 3388/7417/2093 3389/7418/2093 +f 3373/7394/2094 3381/7406/2094 3390/7419/2094 3374/7396/2094 +f 3385/7411/2095 3379/7402/2095 3391/7421/2095 3392/7423/2095 +f 3377/7400/2096 3369/7387/2096 3372/7391/2096 3378/7401/2096 +f 3387/7415/2096 3393/7425/2096 3369/7387/2096 3377/7400/2096 +f 3393/7424/2097 3382/7407/2097 3370/7389/2083 3369/7388/2083 +f 3383/7408/2090 3382/7407/2090 3394/7426/2098 3395/7428/2098 +f 3387/7415/2099 3386/7413/2099 3396/7429/2099 3397/7431/2099 +f 3382/7407/2097 3393/7424/2097 3398/7432/2100 3394/7426/2101 +f 3399/7434/2077 3381/7406/2077 3363/7377/2077 3362/7376/2077 +f 3396/7430/2102 3368/7385/2102 3400/7437/2102 3401/7439/2102 +f 3398/7433/2103 3397/7431/2103 3402/7440/2103 3403/7442/2103 +f 3397/7431/2104 3396/7429/2104 3401/7438/2104 3402/7440/2104 +f 3394/7426/2101 3398/7432/2100 3403/7443/2105 3404/7444/2106 +f 3364/7378/2091 3383/7409/2091 3395/7427/2107 3405/7445/2107 +f 3393/7425/2108 3387/7415/2108 3397/7431/2108 3398/7433/2108 +f 3365/7380/2079 3364/7378/2078 3405/7445/2109 3367/7383/2109 +f 3386/7414/2110 3366/7382/2110 3368/7385/2110 3396/7430/2110 +f 3404/7444/2106 3403/7443/2105 3406/7446/2111 3407/7447/2112 +f 3400/7437/2113 3408/7448/2114 3409/7451/2115 3410/7452/2116 +f 3411/7453/2117 3404/7444/2117 3407/7447/2117 3412/7455/2117 +f 3408/7448/2118 3413/7458/2118 3414/7460/2118 3409/7451/2118 +f 3405/7445/2119 3395/7427/2119 3411/7454/2119 3413/7459/2119 +f 3367/7383/2120 3405/7445/2120 3413/7459/2120 3408/7449/2120 +f 3395/7428/2121 3394/7426/2121 3404/7444/2121 3411/7453/2121 +f 3368/7386/2082 3367/7384/2081 3408/7450/2114 3400/7436/2113 +f 3410/7452/2116 3409/7451/2115 3415/7464/2122 3416/7465/2123 +f 3412/7455/2124 3407/7447/2124 3417/7466/2124 3418/7468/2124 +f 3409/7451/2125 3414/7460/2125 3419/7469/2125 3415/7464/2125 +f 3414/7461/2126 3412/7456/2126 3418/7467/2126 3419/7470/2126 +f 3402/7440/2127 3401/7438/2127 3420/7471/2127 3421/7474/2127 +f 3403/7443/2128 3402/7441/2128 3421/7476/2128 3406/7446/2128 +f 3401/7439/2129 3400/7437/2129 3410/7452/2129 3420/7473/2129 +f 3413/7459/2130 3411/7454/2130 3412/7457/2130 3414/7462/2130 +f 3419/7470/2131 3418/7467/2131 3422/7478/2131 3423/7479/2131 +f 3424/7481/2132 3416/7465/2132 3425/7482/2132 3426/7483/2132 +f 3427/7485/2133 3428/7487/2133 3429/7489/2133 3430/7491/2133 +f 3428/7487/2134 3424/7480/2134 3426/7484/2134 3429/7489/2134 +f 3407/7447/2112 3406/7446/2111 3427/7486/2135 3417/7466/2136 +f 3421/7475/2137 3420/7472/2137 3424/7480/2137 3428/7487/2137 +f 3406/7446/2138 3421/7476/2138 3428/7488/2138 3427/7486/2138 +f 3420/7473/2139 3410/7452/2139 3416/7465/2139 3424/7481/2139 +f 3431/7492/2140 3432/7494/2140 3433/7496/2141 3434/7497/2141 +f 3422/7477/2142 3435/7500/2142 3436/7501/2142 3437/7503/2142 +f 3438/7506/2143 3439/7508/2143 3440/7510/2143 3441/7511/2143 +f 3426/7483/2144 3425/7482/2144 3442/7514/2144 3443/7516/2144 +f 3415/7463/2145 3419/7470/2145 3423/7479/2145 3444/7520/2145 +f 3418/7468/2146 3417/7466/2146 3435/7500/2146 3422/7477/2146 +f 3416/7465/2123 3415/7464/2122 3444/7519/2147 3425/7482/2148 +f 3417/7466/2136 3427/7486/2135 3430/7490/2149 3435/7500/2150 +f 3375/7397/2151 3374/7395/2151 3445/7521/2151 3446/7523/2151 +f 3390/7419/2152 3447/7524/2152 3448/7526/2152 3449/7530/2152 +f 3391/7420/2153 3389/7418/2153 3450/7531/2153 3451/7533/2153 +f 3447/7525/2154 3392/7422/2155 3452/7535/2156 3448/7527/2157 +f 3381/7406/2158 3399/7434/2158 3447/7524/2158 3390/7419/2158 +f 3372/7392/2085 3371/7390/2084 3375/7397/2159 3388/7416/2160 +f 3379/7403/2161 3378/7401/2161 3389/7418/2161 3391/7420/2161 +f 3399/7435/2162 3385/7412/2162 3392/7422/2155 3447/7525/2154 +f 3449/7529/2163 3448/7528/2163 3453/7537/2163 3454/7540/2163 +f 3451/7533/2164 3450/7531/2164 3455/7541/2164 3456/7544/2164 +f 3448/7528/2157 3452/7536/2156 3457/7547/2165 3453/7537/2166 +f 3452/7536/2167 3451/7534/2167 3456/7545/2167 3457/7547/2167 +f 3388/7416/2160 3375/7397/2159 3446/7523/2168 3458/7549/2169 +f 3374/7396/2170 3390/7419/2170 3449/7530/2170 3445/7522/2170 +f 3389/7418/2171 3388/7417/2171 3458/7548/2171 3450/7531/2171 +f 3392/7423/2172 3391/7421/2172 3451/7534/2172 3452/7536/2172 +f 3457/7547/2173 3456/7545/2173 3459/7550/2173 3460/7552/2173 +f 3455/7542/2174 3461/7553/2174 3462/7554/2174 3463/7556/2174 +f 3464/7558/2175 3454/7538/2175 3465/7561/2175 3466/7563/2175 +f 3461/7553/2176 3467/7565/2177 3468/7566/2178 3462/7554/2179 +f 3446/7523/2180 3445/7521/2180 3464/7560/2180 3467/7565/2180 +f 3458/7549/2169 3446/7523/2168 3467/7565/2177 3461/7553/2176 +f 3445/7522/2181 3449/7530/2181 3454/7539/2181 3464/7559/2181 +f 3450/7532/2182 3458/7549/2182 3461/7553/2182 3455/7542/2182 +f 3466/7563/2183 3465/7561/2183 3439/7508/2183 3438/7506/2183 +f 3462/7554/2179 3468/7566/2178 3469/7567/2184 3470/7569/2184 +f 3468/7566/2185 3466/7564/2185 3438/7507/2186 3469/7567/2186 +f 3465/7561/2187 3471/7570/2187 3431/7493/2188 3439/7508/2189 +f 3453/7537/2166 3457/7547/2165 3460/7552/2190 3471/7571/2191 +f 3456/7546/2192 3455/7543/2192 3463/7557/2192 3459/7551/2192 +f 3454/7540/2193 3453/7537/2193 3471/7571/2193 3465/7562/2193 +f 3467/7565/2194 3464/7560/2194 3466/7564/2194 3468/7566/2194 +f 3472/7572/2195 3473/7574/2195 3474/7575/2195 3475/7577/2195 +f 3425/7482/2148 3444/7519/2147 3476/7580/2196 3442/7514/2196 +f 3473/7574/2197 3470/7568/2197 3477/7583/2198 3474/7575/2198 +f 3435/7500/2150 3430/7490/2149 3478/7586/2199 3436/7501/2199 +f 3463/7557/2200 3462/7555/2200 3470/7568/2197 3473/7574/2197 +f 3460/7552/2201 3459/7550/2201 3472/7573/2202 3432/7494/2203 +f 3471/7571/2191 3460/7552/2190 3432/7494/2140 3431/7492/2140 +f 3459/7551/2204 3463/7557/2204 3473/7574/2204 3472/7572/2204 +f 3479/7589/2205 3437/7504/2205 3436/7502/2205 3478/7587/2205 +f 3443/7517/2205 3479/7589/2205 3478/7587/2205 3480/7590/2205 +f 3442/7515/2206 3476/7581/2205 3479/7589/2205 3443/7517/2205 +f 3476/7581/2205 3481/7592/2205 3437/7504/2205 3479/7589/2205 +f 3482/7594/2207 3441/7512/2207 3440/7509/2208 3434/7498/2209 +f 3475/7578/2207 3482/7594/2207 3434/7498/2209 3433/7495/2209 +f 3474/7576/2207 3477/7584/2207 3482/7594/2207 3475/7578/2207 +f 3477/7584/2207 3483/7595/2207 3441/7512/2207 3482/7594/2207 +f 3430/7491/2210 3429/7489/2210 3480/7591/2210 3478/7588/2210 +f 3470/7569/2184 3469/7567/2184 3483/7596/2211 3477/7585/2211 +f 3444/7520/2212 3423/7479/2212 3481/7593/2212 3476/7582/2212 +f 3432/7494/2203 3472/7573/2202 3475/7579/2213 3433/7496/2213 +f 3429/7489/2214 3426/7484/2214 3443/7518/2214 3480/7591/2214 +f 3469/7567/2186 3438/7507/2186 3441/7513/2215 3483/7596/2215 +f 3423/7479/2216 3422/7478/2216 3437/7505/2216 3481/7593/2216 +f 3439/7508/2189 3431/7493/2188 3434/7499/2217 3440/7510/2217 +f 3484/7598/2077 3485/7599/2077 3486/7600/2078 3487/7602/2079 +f 3488/7603/2218 3487/7601/2218 3489/7605/2219 3490/7606/2220 +f 3491/7607/2093 3492/7609/2093 3493/7612/2093 3494/7614/2093 +f 3495/7616/2087 3496/7617/2087 3491/7608/2087 3497/7620/2087 +f 3498/7622/2088 3485/7599/2088 3499/7623/2088 3500/7624/2088 +f 3501/7626/2089 3498/7621/2089 3500/7625/2089 3502/7627/2089 +f 3503/7628/2089 3504/7629/2089 3498/7621/2089 3501/7626/2089 +f 3504/7630/2091 3486/7600/2091 3485/7599/2088 3498/7622/2088 +f 3505/7631/2221 3495/7615/2221 3497/7619/2221 3506/7632/2221 +f 3488/7603/2221 3507/7634/2221 3495/7615/2221 3505/7631/2221 +f 3507/7633/2087 3508/7635/2087 3496/7617/2087 3495/7616/2087 +f 3500/7624/2094 3499/7623/2094 3509/7637/2094 3510/7639/2094 +f 3506/7632/2222 3497/7619/2222 3511/7640/2222 3512/7642/2222 +f 3513/7643/2223 3506/7632/2224 3512/7642/2225 3514/7645/2226 +f 3496/7618/2096 3515/7647/2096 3492/7609/2096 3491/7607/2096 +f 3508/7636/2096 3516/7649/2096 3515/7647/2096 3496/7618/2096 +f 3504/7629/2098 3503/7628/2098 3517/7650/2098 3518/7652/2098 +f 3508/7635/2099 3507/7633/2099 3519/7653/2099 3520/7655/2099 +f 3503/7628/2227 3516/7648/2227 3521/7658/2228 3517/7650/2229 +f 3505/7631/2230 3484/7597/2230 3487/7601/2218 3488/7603/2218 +f 3506/7632/2224 3513/7643/2223 3484/7597/2230 3505/7631/2230 +f 3513/7644/2077 3499/7623/2077 3485/7599/2077 3484/7598/2077 +f 3522/7659/2119 3518/7651/2119 3523/7661/2119 3524/7663/2119 +f 3519/7654/2231 3490/7606/2231 3525/7665/2231 3526/7667/2231 +f 3521/7657/2103 3520/7656/2103 3527/7668/2103 3528/7671/2103 +f 3520/7655/2232 3519/7653/2232 3526/7666/2232 3527/7670/2232 +f 3486/7600/2091 3504/7630/2091 3518/7651/2107 3522/7659/2107 +f 3516/7649/2108 3508/7636/2108 3520/7656/2108 3521/7657/2108 +f 3487/7602/2079 3486/7600/2078 3522/7659/2109 3489/7604/2109 +f 3507/7634/2233 3488/7603/2233 3490/7606/2233 3519/7654/2233 +f 3528/7672/2128 3527/7669/2128 3529/7676/2128 3530/7677/2128 +f 3527/7670/2127 3526/7666/2127 3531/7678/2127 3529/7674/2127 +f 3532/7682/2106 3528/7672/2234 3530/7677/2235 3533/7683/2112 +f 3525/7665/2236 3534/7685/2237 3535/7686/2238 3536/7687/2239 +f 3489/7604/2120 3522/7659/2120 3524/7663/2120 3534/7684/2120 +f 3518/7652/2121 3517/7650/2121 3532/7681/2121 3523/7660/2121 +f 3490/7606/2220 3489/7605/2219 3534/7685/2237 3525/7665/2236 +f 3517/7650/2229 3521/7658/2228 3528/7673/2234 3532/7681/2106 +f 3536/7687/2239 3535/7686/2238 3537/7689/2240 3538/7690/2241 +f 3539/7693/2124 3533/7683/2124 3540/7694/2124 3541/7695/2124 +f 3535/7686/2125 3542/7699/2125 3543/7700/2125 3537/7689/2125 +f 3542/7697/2126 3539/7691/2126 3541/7696/2126 3543/7701/2126 +f 3526/7667/2242 3525/7665/2242 3536/7687/2242 3531/7680/2242 +f 3524/7663/2243 3523/7661/2243 3539/7692/2243 3542/7698/2243 +f 3534/7685/2118 3524/7664/2118 3542/7699/2118 3535/7686/2118 +f 3523/7662/2117 3532/7682/2117 3533/7683/2117 3539/7693/2117 +f 3541/7695/2244 3540/7694/2244 3544/7702/2244 3545/7703/2244 +f 3537/7688/2145 3543/7701/2145 3546/7705/2145 3547/7707/2145 +f 3543/7701/2131 3541/7696/2131 3545/7704/2131 3546/7705/2131 +f 3548/7708/2245 3538/7690/2245 3549/7710/2245 3550/7711/2245 +f 3533/7683/2112 3530/7677/2235 3551/7713/2246 3540/7694/2247 +f 3529/7675/2137 3531/7679/2137 3548/7709/2137 3552/7716/2137 +f 3530/7677/2138 3529/7676/2138 3552/7715/2138 3551/7713/2138 +f 3531/7680/2248 3536/7687/2248 3538/7690/2248 3548/7708/2248 +f 3553/7717/2249 3554/7719/2249 3555/7721/2250 3556/7722/2250 +f 3545/7703/2251 3544/7702/2251 3557/7725/2251 3558/7727/2251 +f 3559/7731/2143 3560/7733/2143 3561/7735/2143 3562/7736/2143 +f 3550/7711/2252 3549/7710/2252 3563/7740/2252 3564/7742/2252 +f 3538/7690/2241 3537/7689/2240 3547/7706/2253 3549/7710/2254 +f 3540/7694/2247 3551/7713/2246 3565/7746/2255 3544/7702/2150 +f 3552/7716/2134 3548/7709/2134 3550/7712/2134 3566/7748/2134 +f 3551/7714/2133 3552/7716/2133 3566/7748/2133 3565/7747/2133 +f 3509/7637/2152 3514/7646/2152 3567/7749/2152 3568/7751/2152 +f 3511/7641/2153 3494/7613/2153 3569/7755/2153 3570/7757/2153 +f 3514/7645/2226 3512/7642/2225 3571/7758/2256 3567/7750/2257 +f 3512/7642/2258 3511/7640/2258 3570/7756/2258 3571/7758/2258 +f 3502/7627/2086 3500/7625/2086 3510/7638/2086 3572/7759/2086 +f 3499/7623/2158 3513/7644/2158 3514/7646/2158 3509/7637/2158 +f 3492/7610/2259 3502/7627/2259 3572/7759/2159 3493/7611/2260 +f 3497/7620/2161 3491/7608/2161 3494/7613/2161 3511/7641/2161 +f 3567/7750/2257 3571/7758/2256 3573/7760/2261 3574/7761/2262 +f 3571/7758/2263 3570/7756/2263 3575/7763/2263 3573/7760/2263 +f 3569/7753/2182 3576/7767/2182 3577/7768/2182 3578/7769/2182 +f 3579/7773/2181 3568/7751/2181 3580/7775/2181 3581/7778/2181 +f 3572/7759/2151 3510/7638/2151 3579/7772/2151 3582/7781/2151 +f 3493/7611/2260 3572/7759/2159 3582/7781/2168 3576/7765/2169 +f 3510/7639/2170 3509/7637/2170 3568/7751/2170 3579/7773/2170 +f 3494/7614/2171 3493/7612/2171 3576/7766/2171 3569/7754/2171 +f 3578/7769/2174 3577/7768/2174 3583/7783/2174 3584/7785/2174 +f 3581/7779/2175 3580/7776/2175 3585/7788/2175 3586/7790/2175 +f 3577/7768/2176 3587/7791/2177 3588/7792/2178 3583/7783/2179 +f 3587/7791/2194 3581/7780/2194 3586/7789/2194 3588/7792/2194 +f 3570/7757/2164 3569/7755/2164 3578/7770/2164 3575/7762/2164 +f 3568/7752/2163 3567/7750/2163 3574/7761/2163 3580/7777/2163 +f 3582/7782/2180 3579/7774/2180 3581/7780/2180 3587/7791/2180 +f 3576/7767/2169 3582/7782/2168 3587/7791/2177 3577/7768/2176 +f 3588/7792/2185 3586/7789/2185 3559/7732/2186 3589/7793/2186 +f 3585/7788/2187 3590/7794/2187 3553/7718/2188 3560/7733/2189 +f 3591/7796/2264 3584/7786/2264 3592/7798/2264 3593/7799/2264 +f 3590/7795/2265 3594/7801/2266 3554/7719/2249 3553/7717/2249 +f 3573/7760/2267 3575/7763/2267 3591/7797/2267 3594/7801/2267 +f 3574/7761/2262 3573/7760/2261 3594/7801/2266 3590/7795/2265 +f 3575/7764/2192 3578/7771/2192 3584/7786/2192 3591/7796/2192 +f 3580/7777/2193 3574/7761/2193 3590/7795/2193 3585/7787/2193 +f 3593/7799/2268 3592/7798/2268 3595/7802/2268 3596/7804/2268 +f 3549/7710/2254 3547/7706/2253 3597/7808/2269 3563/7740/2269 +f 3544/7702/2150 3565/7746/2255 3598/7811/2199 3557/7725/2199 +f 3592/7798/2197 3599/7814/2197 3600/7816/2198 3595/7802/2198 +f 3583/7783/2179 3588/7792/2178 3589/7793/2184 3599/7815/2184 +f 3586/7790/2183 3585/7788/2183 3560/7733/2183 3559/7731/2183 +f 3584/7786/2200 3583/7784/2200 3599/7814/2197 3592/7798/2197 +f 3594/7801/2270 3591/7797/2270 3593/7800/2271 3554/7719/2272 +f 3601/7819/2205 3558/7728/2205 3557/7726/2205 3598/7812/2205 +f 3564/7743/2205 3601/7819/2205 3598/7812/2205 3602/7821/2205 +f 3563/7741/2206 3597/7809/2205 3601/7820/2205 3564/7744/2205 +f 3597/7809/2205 3603/7823/2205 3558/7729/2205 3601/7820/2205 +f 3604/7825/2207 3562/7737/2207 3561/7734/2208 3556/7723/2209 +f 3596/7805/2207 3604/7825/2207 3556/7723/2209 3555/7720/2209 +f 3595/7803/2207 3600/7817/2207 3604/7826/2207 3596/7806/2207 +f 3600/7817/2207 3605/7827/2207 3562/7738/2207 3604/7826/2207 +f 3565/7747/2210 3566/7748/2210 3602/7822/2210 3598/7813/2210 +f 3599/7815/2184 3589/7793/2184 3605/7828/2211 3600/7818/2211 +f 3547/7707/2212 3546/7705/2212 3603/7824/2212 3597/7810/2212 +f 3554/7719/2272 3593/7800/2271 3596/7807/2273 3555/7721/2273 +f 3566/7748/2214 3550/7712/2214 3564/7745/2214 3602/7822/2214 +f 3589/7793/2186 3559/7732/2186 3562/7739/2215 3605/7828/2215 +f 3546/7705/2216 3545/7704/2216 3558/7730/2216 3603/7824/2216 +f 3560/7733/2189 3553/7718/2188 3556/7724/2217 3561/7735/2217 +f 3350/7349/2063 3349/7346/2062 3612/7839/2274 3614/7844/2275 +f 3614/7844/2275 3612/7839/2274 3613/7841/2076 3615/7846/2075 +f 3340/7327/2068 3355/7359/2067 3608/7831/2276 3610/7836/2277 +f 3610/7836/2277 3608/7831/2276 3609/7833/2072 3611/7838/2071 +f 3360/7373/2065 3607/7830/2065 3612/7840/2065 3349/7347/2065 +f 3607/7830/2065 3606/7829/2065 3613/7842/2065 3612/7840/2065 +f 3355/7360/2065 3354/7358/2065 3606/7829/2065 3608/7832/2065 +f 3608/7832/2065 3606/7829/2065 3607/7830/2065 3609/7834/2065 +o Chair.008 +v 6.775808 0.499420 6.577875 +v 6.775808 0.513989 6.577875 +v 6.798890 0.513989 6.533952 +v 6.985870 0.513989 6.178140 +v 7.008952 0.513989 6.134217 +v 7.008952 0.499420 6.134217 +v 6.985870 0.499420 6.178140 +v 6.798890 0.499420 6.533952 +v 7.349434 0.513989 6.313142 +v 7.349434 0.499420 6.313142 +v 7.349434 0.484850 6.313142 +v 7.328213 0.484850 6.353524 +v 6.985870 0.484850 6.178140 +v 7.008952 0.484850 6.134217 +v 7.116290 0.499420 6.756800 +v 7.116290 0.513989 6.756800 +v 7.137511 0.499420 6.716417 +v 7.137511 0.513989 6.716417 +v 7.116290 0.484850 6.756800 +v 7.137511 0.484850 6.716417 +v 6.775808 0.484850 6.577875 +v 6.798890 0.484850 6.533952 +v 7.328213 0.499420 6.353524 +v 7.328213 0.513989 6.353524 +v 7.179630 0.522098 6.221457 +v 7.182347 0.527689 6.216287 +v 7.066308 0.527689 6.155309 +v 7.063591 0.522098 6.160479 +v 7.063673 0.514014 6.160322 +v 7.034913 0.521988 6.145409 +v 7.037309 0.514338 6.146468 +v 7.188790 0.513941 6.204025 +v 7.188709 0.522025 6.204181 +v 7.304746 0.522025 6.265159 +v 7.304828 0.513941 6.265003 +v 7.302145 0.527866 6.270109 +v 7.330385 0.523446 6.284949 +v 7.330917 0.518093 6.278912 +v 7.182313 0.508173 6.216352 +v 7.186073 0.508349 6.209196 +v 7.302111 0.508349 6.270174 +v 7.298350 0.508173 6.277330 +v 7.186107 0.527866 6.209131 +v 7.298384 0.527689 6.277265 +v 7.072670 0.522025 6.143202 +v 7.070069 0.527866 6.148152 +v 7.179712 0.514014 6.221301 +v 7.295749 0.514014 6.282279 +v 7.066275 0.508173 6.155373 +v 7.070035 0.508349 6.148217 +v 7.328136 0.510684 6.277252 +v 7.323439 0.505559 6.281382 +v 7.326561 0.523285 6.292073 +v 7.319616 0.505398 6.288505 +v 7.319084 0.510751 6.294541 +v 7.072752 0.513941 6.143046 +v 7.044013 0.521919 6.128142 +v 7.039740 0.527446 6.132214 +v 7.041582 0.508811 6.142397 +v 7.045291 0.508978 6.135214 +v 7.046408 0.514269 6.129203 +v 7.295667 0.522098 6.282436 +v 7.012268 0.505015 6.133308 +v 7.018033 0.500395 6.130022 +v 7.021698 0.500535 6.122816 +v 7.021386 0.504957 6.116053 +v 7.016925 0.511351 6.113908 +v 7.036030 0.527279 6.139397 +v 7.000373 0.487005 6.105011 +v 6.994317 0.491456 6.102027 +v 7.007806 0.511409 6.131164 +v 6.985184 0.491496 6.119275 +v 6.991240 0.487046 6.122258 +v 7.011160 0.515970 6.117195 +v 6.987399 0.494672 6.104709 +v 7.007494 0.515831 6.124401 +v 6.983768 0.494575 6.111933 +v 6.969475 0.464390 6.111021 +v 6.976485 0.462361 6.114504 +v 6.978617 0.464372 6.093777 +v 6.971011 0.465838 6.096097 +v 6.967402 0.465794 6.103333 +v 6.998158 0.483830 6.119577 +v 7.001788 0.483927 6.112353 +v 6.957181 0.429833 6.088830 +v 6.953573 0.429794 6.096066 +v 6.984091 0.460894 6.112185 +v 6.962749 0.426789 6.107286 +v 6.970394 0.425505 6.104987 +v 6.985626 0.462342 6.097261 +v 6.987700 0.460939 6.104950 +v 6.974002 0.425544 6.097751 +v 6.971890 0.426773 6.090043 +v 7.383489 0.433439 6.328587 +v 7.376464 0.432492 6.324695 +v 7.412850 0.081085 6.343817 +v 7.419876 0.082031 6.347708 +v 6.964828 0.428549 6.086530 +v 6.888094 0.085529 6.046207 +v 6.880448 0.086812 6.048506 +v 7.395037 0.434115 6.318925 +v 7.391122 0.434094 6.325999 +v 7.427508 0.082686 6.345121 +v 7.431424 0.082707 6.338046 +v 6.886015 0.083768 6.066963 +v 6.893661 0.082485 6.064664 +v 6.955685 0.428565 6.103774 +v 7.357777 0.509612 6.299344 +v 7.356587 0.505641 6.292402 +v 7.321864 0.518160 6.296203 +v 7.347555 0.505690 6.309703 +v 7.353902 0.509492 6.306440 +v 7.345074 0.496343 6.292751 +v 7.341199 0.496223 6.299847 +v 7.342390 0.500194 6.306789 +v 7.366765 0.487269 6.319798 +v 7.374155 0.489113 6.317083 +v 7.361718 0.482736 6.301498 +v 7.357811 0.482678 6.308577 +v 7.360091 0.484604 6.316091 +v 7.351420 0.500144 6.289488 +v 7.371167 0.455268 6.315596 +v 7.373617 0.456517 6.323199 +v 7.369109 0.484580 6.298783 +v 7.382633 0.456502 6.305890 +v 7.375081 0.455305 6.308520 +v 7.378063 0.489171 6.310005 +v 7.388078 0.459444 6.324399 +v 7.391990 0.459481 6.317324 +v 7.375782 0.487245 6.302489 +v 7.389542 0.458232 6.309720 +v 7.392503 0.433430 6.311276 +v 7.385479 0.432484 6.307386 +v 7.380526 0.458247 6.327029 +v 7.373930 0.431808 6.317047 +v 7.377846 0.431829 6.309973 +v 7.414233 0.080421 6.329094 +v 7.410317 0.080401 6.336169 +v 6.878952 0.085545 6.063450 +v 7.421865 0.081076 6.326507 +v 6.895157 0.083752 6.049719 +v 6.887054 0.084649 6.056584 +v 6.897269 0.082524 6.057427 +v 6.876840 0.086774 6.055742 +v 7.420871 0.081554 6.337107 +v 7.428890 0.082023 6.330398 +v 6.936086 0.522098 6.684905 +v 6.938803 0.527689 6.679735 +v 6.822765 0.527689 6.618756 +v 6.820047 0.522098 6.623927 +v 6.820129 0.514014 6.623771 +v 6.791369 0.521988 6.608856 +v 6.793765 0.514338 6.609916 +v 7.058567 0.508349 6.733622 +v 7.061284 0.513941 6.728451 +v 7.084593 0.510684 6.740700 +v 7.079895 0.505559 6.744830 +v 6.938769 0.508173 6.679800 +v 6.942530 0.508349 6.672643 +v 7.054806 0.508173 6.740777 +v 6.942564 0.527866 6.672579 +v 7.054841 0.527689 6.740713 +v 7.058601 0.527866 6.733557 +v 6.945165 0.522025 6.667628 +v 7.061202 0.522025 6.728607 +v 6.829126 0.522025 6.606650 +v 6.826525 0.527866 6.611600 +v 6.936168 0.514014 6.684750 +v 7.052205 0.514014 6.745728 +v 6.822731 0.508173 6.618821 +v 6.826491 0.508349 6.611665 +v 7.083017 0.523285 6.755520 +v 7.086841 0.523446 6.748397 +v 7.076072 0.505398 6.751953 +v 7.075539 0.510751 6.757990 +v 7.052123 0.522098 6.745883 +v 7.078320 0.518160 6.759650 +v 6.945247 0.513941 6.667473 +v 6.829208 0.513941 6.606494 +v 6.800468 0.521919 6.591590 +v 6.796196 0.527446 6.595662 +v 6.798038 0.508811 6.605844 +v 6.801748 0.508978 6.598662 +v 6.802865 0.514269 6.592650 +v 6.792486 0.527279 6.602844 +v 6.767615 0.515970 6.580643 +v 6.763950 0.515831 6.587849 +v 6.768723 0.505015 6.596756 +v 6.774488 0.500395 6.593469 +v 6.778154 0.500535 6.586263 +v 6.777842 0.504957 6.579501 +v 6.758244 0.483927 6.575800 +v 6.756829 0.487005 6.568459 +v 6.754613 0.483830 6.583025 +v 6.773381 0.511351 6.577355 +v 6.750772 0.491456 6.565475 +v 6.764262 0.511409 6.594611 +v 6.741640 0.491496 6.582723 +v 6.747696 0.487046 6.585707 +v 6.725932 0.464390 6.574468 +v 6.732941 0.462361 6.577953 +v 6.743855 0.494672 6.568157 +v 6.735074 0.464372 6.557225 +v 6.727467 0.465838 6.559545 +v 6.740225 0.494575 6.575381 +v 6.723858 0.465794 6.566780 +v 6.721282 0.428549 6.549977 +v 6.713637 0.429833 6.552277 +v 6.710029 0.429794 6.559513 +v 6.712141 0.428565 6.567221 +v 6.740548 0.460894 6.575633 +v 6.719204 0.426789 6.570735 +v 6.726850 0.425505 6.568435 +v 6.742082 0.462342 6.560709 +v 6.744157 0.460939 6.568398 +v 7.139946 0.433439 6.792034 +v 7.132920 0.432492 6.788144 +v 7.169307 0.081085 6.807265 +v 7.176332 0.082031 6.811156 +v 6.644551 0.085529 6.509655 +v 6.636905 0.086812 6.511953 +v 7.151494 0.434115 6.782372 +v 7.147578 0.434094 6.789447 +v 7.183965 0.082686 6.808568 +v 7.187881 0.082707 6.801494 +v 6.642471 0.083768 6.530411 +v 6.650117 0.082485 6.528111 +v 6.728346 0.426773 6.553491 +v 6.730458 0.425544 6.561199 +v 7.104011 0.505690 6.773150 +v 7.110358 0.509492 6.769888 +v 7.101530 0.496343 6.756199 +v 7.097655 0.496223 6.763295 +v 7.098845 0.500194 6.770237 +v 7.087374 0.518093 6.742360 +v 7.116547 0.484604 6.779540 +v 7.123221 0.487269 6.783246 +v 7.114267 0.482678 6.772024 +v 7.107876 0.500144 6.752935 +v 7.125565 0.484580 6.762231 +v 7.118175 0.482736 6.764946 +v 7.114233 0.509612 6.762792 +v 7.130611 0.489113 6.780531 +v 7.134520 0.489171 6.773452 +v 7.113043 0.505641 6.755849 +v 7.139089 0.456502 6.769338 +v 7.131537 0.455305 6.771967 +v 7.144534 0.459444 6.787847 +v 7.148447 0.459481 6.780771 +v 7.132239 0.487245 6.765937 +v 7.145998 0.458232 6.773167 +v 7.148960 0.433430 6.774724 +v 7.136981 0.458247 6.790477 +v 7.127624 0.455268 6.779044 +v 7.134302 0.431829 6.773421 +v 7.130387 0.431808 6.780495 +v 7.130073 0.456517 6.786647 +v 7.170689 0.080421 6.792542 +v 7.166774 0.080401 6.799617 +v 6.635408 0.085545 6.526897 +v 6.651613 0.083752 6.513167 +v 7.141935 0.432484 6.770833 +v 7.178322 0.081076 6.789955 +v 6.643510 0.084649 6.520033 +v 6.653725 0.082524 6.520875 +v 6.633296 0.086774 6.519189 +v 7.177326 0.081554 6.800555 +v 7.185347 0.082023 6.793845 +v 7.201078 0.480723 6.595453 +v 7.264645 0.480723 6.474489 +v 7.201078 0.495292 6.595453 +v 7.264645 0.495292 6.474489 +v 6.861217 0.495292 6.415348 +v 6.923544 0.495292 6.296744 +v 7.264645 0.466153 6.474489 +v 7.201078 0.466153 6.595453 +v 6.923543 0.466153 6.296744 +v 6.861217 0.466153 6.415348 +vn -0.2160 -0.0000 0.9764 +vn -0.6752 -0.7071 0.2100 +vn -0.8852 -0.0000 -0.4652 +vn -0.2100 -0.7071 -0.6752 +vn 0.0150 0.6667 -0.7452 +vn 0.4652 -0.0000 -0.8852 +vn -0.0000 -1.0000 -0.0000 +vn 0.0313 -0.9977 -0.0605 +vn 0.0317 -0.9976 -0.0613 +vn -0.4652 -0.0000 0.8852 +vn 0.8852 -0.0000 0.4652 +vn -0.0000 1.0000 -0.0000 +vn 0.0321 0.9977 -0.0601 +vn 0.0325 0.9976 -0.0609 +vn -0.0317 0.9976 0.0613 +vn -0.0313 0.9977 0.0605 +vn -0.0314 0.9977 0.0608 +vn -0.0316 0.9976 0.0611 +vn -0.0325 -0.9976 0.0609 +vn -0.0321 -0.9977 0.0601 +vn -0.0323 -0.9977 0.0604 +vn -0.0324 -0.9976 0.0606 +vn -0.3217 0.7224 0.6121 +vn -0.3220 0.7268 0.6066 +vn -0.3220 0.7269 0.6066 +vn -0.4651 -0.0225 0.8850 +vn -0.4648 -0.0215 0.8851 +vn -0.4593 -0.0204 0.8880 +vn 0.4651 0.0218 -0.8850 +vn 0.4663 0.0219 -0.8844 +vn 0.4664 0.0219 -0.8843 +vn 0.4156 0.6937 -0.5882 +vn 0.0101 -0.9998 -0.0193 +vn -0.0102 0.9998 0.0194 +vn 0.3360 0.6915 -0.6394 +vn 0.3315 0.6962 -0.6367 +vn -0.0154 0.9997 0.0163 +vn -0.3360 -0.6915 0.6395 +vn 0.2404 -0.7257 -0.6446 +vn 0.1115 0.9903 0.0826 +vn -0.4058 -0.6955 0.5930 +vn 0.3217 -0.7223 -0.6122 +vn 0.4651 0.0221 -0.8850 +vn 0.3269 0.7008 -0.6340 +vn -0.0102 -0.9995 -0.0292 +vn 0.4590 0.0214 -0.8882 +vn 0.4647 0.0224 -0.8852 +vn -0.1400 -0.6683 0.7306 +vn 0.5161 -0.6972 -0.4976 +vn 0.2770 -0.9532 0.1216 +vn 0.4533 0.0184 -0.8912 +vn 0.4582 0.0214 -0.8886 +vn -0.0206 0.9997 0.0132 +vn 0.3058 -0.7326 -0.6081 +vn -0.3223 0.7313 0.6011 +vn -0.3415 -0.7022 0.6247 +vn 0.4485 0.0132 -0.8937 +vn 0.4522 0.0177 -0.8917 +vn -0.4536 -0.0175 0.8910 +vn -0.4585 -0.0204 0.8884 +vn -0.4530 -0.0172 0.8914 +vn -0.4491 -0.0124 0.8934 +vn -0.0517 0.5509 -0.8330 +vn -0.7174 0.5748 0.3936 +vn -0.3062 0.9421 -0.1369 +vn -0.5314 0.6901 0.4913 +vn 0.1266 0.6614 -0.7393 +vn -0.4488 -0.0119 0.8936 +vn -0.4475 -0.0090 0.8942 +vn -0.1888 0.3812 -0.9050 +vn -0.8605 0.3978 0.3184 +vn -0.7546 0.5403 -0.3725 +vn 0.5354 -0.8044 0.2575 +vn 0.7049 -0.5868 -0.3984 +vn 0.0410 -0.5625 0.8258 +vn -0.5599 0.7833 -0.2703 +vn -0.8219 0.3980 -0.4076 +vn 0.2318 -0.2790 0.9319 +vn 0.9094 -0.2912 -0.2970 +vn 0.8209 -0.4005 0.4071 +vn 0.4470 0.0092 -0.8945 +vn 0.4482 0.0122 -0.8938 +vn 0.7374 -0.5692 0.3636 +vn 0.8520 -0.4135 -0.3211 +vn 0.1820 -0.3964 0.8999 +vn -0.4843 -0.0027 0.8749 +vn -0.4843 -0.0025 0.8749 +vn -0.2576 0.1694 -0.9513 +vn 0.8689 0.1162 0.4812 +vn 0.2576 -0.1695 0.9513 +vn -0.9098 0.2899 0.2969 +vn -0.2322 0.2777 -0.9322 +vn -0.4479 -0.0079 0.8940 +vn -0.4471 -0.0056 0.8945 +vn 0.4463 0.0054 -0.8949 +vn 0.4467 0.0070 -0.8946 +vn 0.5804 0.6472 -0.4943 +vn -0.0527 0.6748 0.7361 +vn -0.3024 -0.9356 -0.1822 +vn -0.4678 -0.0216 0.8836 +vn -0.4724 -0.0208 0.8812 +vn -0.4776 -0.0183 0.8784 +vn -0.4732 -0.0205 0.8807 +vn -0.2306 0.7239 0.6502 +vn 0.4679 0.0227 -0.8835 +vn 0.4727 0.0218 -0.8810 +vn -0.0918 -0.9932 -0.0722 +vn -0.4676 -0.0222 0.8837 +vn 0.1242 0.5630 0.8171 +vn -0.5093 -0.8103 -0.2898 +vn -0.4819 -0.0112 0.8762 +vn -0.4786 -0.0173 0.8779 +vn -0.7060 -0.5801 0.4062 +vn 0.4734 0.0211 -0.8806 +vn 0.4779 0.0187 -0.8782 +vn 0.3513 0.9128 0.2082 +vn 0.0752 -0.6896 -0.7203 +vn -0.5555 -0.6617 0.5036 +vn -0.8762 -0.3366 0.3449 +vn -0.2511 -0.3512 -0.9020 +vn 0.7721 0.4682 0.4298 +vn 0.4822 0.0114 -0.8760 +vn 0.4789 0.0175 -0.8777 +vn 0.4827 0.0104 -0.8757 +vn 0.4844 0.0032 -0.8749 +vn 0.7410 0.5405 -0.3984 +vn 0.5794 0.7463 0.3275 +vn -0.0966 -0.6033 -0.7916 +vn 0.8669 0.1344 0.4801 +vn 0.4842 0.0027 -0.8749 +vn 0.9429 0.0928 -0.3198 +vn 0.9435 0.0866 -0.3199 +vn 0.3128 0.0969 0.9449 +vn 0.3131 0.0905 0.9454 +vn 0.3131 0.0904 0.9454 +vn -0.4835 -0.0030 0.8754 +vn -0.4819 -0.0100 0.8762 +vn -0.7655 -0.4821 -0.4262 +vn 0.2535 0.3437 0.9042 +vn 0.8792 0.3294 -0.3442 +vn -0.8688 -0.1162 -0.4813 +vn -0.4463 -0.0053 0.8948 +vn -0.3132 -0.0898 -0.9454 +vn -0.3134 -0.0839 -0.9459 +vn 0.4464 0.0053 -0.8948 +vn -0.3130 -0.0956 -0.9449 +vn -0.9430 -0.0916 0.3198 +vn -0.9436 -0.0860 0.3199 +vn -0.9436 -0.0859 0.3199 +vn -0.8671 -0.1319 -0.4804 +vn -0.1945 -0.9756 -0.1022 +vn -0.1945 -0.9756 -0.1023 +vn 0.1037 -0.9931 0.0545 +vn 0.1037 -0.9931 0.0544 +vn 0.1036 -0.9931 0.0544 +vn 0.9417 -0.1770 -0.2862 +vn 0.4842 0.0025 -0.8749 +vn -0.9417 0.1770 0.2862 +vn -0.9440 -0.0803 0.3199 +vn 0.8682 -0.2449 0.4316 +vn 0.9440 0.0803 -0.3199 +vn -0.8682 0.2449 -0.4316 +vn 0.3134 0.0839 0.9459 +vn -0.4651 -0.0221 0.8850 +vn -0.4647 -0.0224 0.8852 +vn -0.4590 -0.0214 0.8882 +vn -0.3360 -0.6915 0.6394 +vn -0.4057 -0.6956 0.5929 +vn -0.4663 -0.0219 0.8844 +vn -0.4664 -0.0219 0.8843 +vn -0.4726 -0.0218 0.8810 +vn -0.4681 -0.0228 0.8834 +vn 0.4651 0.0224 -0.8850 +vn 0.4591 0.0214 -0.8881 +vn 0.4648 0.0224 -0.8851 +vn -0.4651 -0.0218 0.8850 +vn -0.1399 -0.6683 0.7306 +vn 0.2769 -0.9532 0.1216 +vn -0.3415 -0.7023 0.6247 +vn 0.4531 0.0183 -0.8913 +vn 0.4485 0.0133 -0.8937 +vn -0.4531 -0.0183 0.8912 +vn -0.4582 -0.0214 0.8886 +vn -0.4523 -0.0178 0.8917 +vn -0.4484 -0.0131 0.8937 +vn -0.4482 -0.0122 0.8939 +vn -0.4471 -0.0094 0.8944 +vn 0.0411 -0.5626 0.8257 +vn -0.5599 0.7833 -0.2702 +vn -0.2323 0.2777 -0.9322 +vn 0.2319 -0.2790 0.9319 +vn 0.4470 0.0091 -0.8945 +vn 0.4482 0.0123 -0.8938 +vn 0.1821 -0.3964 0.8998 +vn -0.4842 -0.0027 0.8750 +vn -0.4842 -0.0025 0.8749 +vn -0.2576 0.1695 -0.9513 +vn 0.2577 -0.1695 0.9513 +vn -0.4467 -0.0070 0.8946 +vn -0.4460 -0.0058 0.8950 +vn 0.4463 0.0055 -0.8949 +vn -0.4779 -0.0187 0.8782 +vn -0.4734 -0.0210 0.8806 +vn -0.5555 -0.6618 0.5035 +vn 0.4676 0.0221 -0.8837 +vn 0.4726 0.0218 -0.8810 +vn -0.4822 -0.0114 0.8760 +vn -0.4789 -0.0176 0.8777 +vn -0.7060 -0.5802 0.4061 +vn -0.8672 -0.1319 -0.4803 +vn -0.4827 -0.0104 0.8757 +vn -0.4844 -0.0032 0.8749 +vn -0.8762 -0.3367 0.3447 +vn -0.8689 -0.1162 -0.4812 +vn -0.4464 -0.0053 0.8948 +vn -0.9431 -0.0916 0.3196 +vn -0.9436 -0.0860 0.3197 +vn -0.9436 -0.0859 0.3197 +vn -0.9441 -0.0803 0.3198 +vn 0.0316 -0.9976 -0.0611 +vn 0.0314 -0.9977 -0.0608 +vn 0.0324 0.9976 -0.0606 +vn 0.0323 0.9977 -0.0604 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.973130 0.033128 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.677629 0.482142 +vt 0.409642 -0.009898 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.669677 0.481452 +vt 0.240570 0.058726 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +vt 0.296927 -0.019617 +vt 0.353285 -0.019617 +vt 0.470812 0.481452 +vt 0.296927 0.014692 +vt 0.271947 0.481452 +vt 0.353285 0.014692 +vt -0.849112 0.025953 +vt 0.468872 0.000137 +vt -0.911121 0.025955 +vt 0.273887 0.000137 +vt 0.475153 0.482142 +vt 0.353285 -0.053929 +vt 0.272677 0.482143 +vt 0.296927 -0.053929 +vt -0.911121 -0.024667 +vt 0.473178 0.006015 +vt -0.849112 -0.024667 +vt 0.274652 0.006015 +s 1 +usemtl Material.071 +f 3616/7848/2278 3617/7850/2279 3618/7853/2280 3888/8362/2280 3889/8364/2280 3619/7855/2280 3620/7857/2281 3621/7861/2282 3622/7862/2280 3623/7863/2280 +f 3621/7860/2282 3620/7858/2281 3624/7865/2283 3625/7868/2283 +f 3626/7870/2284 3627/7873/2285 3628/7876/2286 3629/7877/2284 +f 3630/7881/2287 3631/7882/2287 3617/7851/2279 3616/7847/2278 +f 3631/7883/2288 3630/7880/2288 3632/7885/2288 3633/7887/2288 +f 3634/7888/2288 3635/7891/2288 3632/7885/2288 3630/7880/2288 +f 3634/7889/2287 3630/7881/2287 3616/7847/2278 3636/7893/2287 +f 3629/7878/2283 3621/7860/2282 3625/7868/2283 3626/7871/2283 +f 3636/7894/2280 3616/7848/2280 3623/7863/2280 3622/7862/2280 3621/7861/2280 3629/7879/2280 3628/7875/2280 3892/8370/2280 3893/8372/2280 3637/7897/2280 +f 3629/7879/2280 3628/7875/2280 3622/7862/2280 3621/7861/2280 +f 3623/7864/2288 3616/7849/2288 3636/7895/2288 3637/7898/2288 +f 3887/8361/2288 3885/8357/2288 3638/7900/2288 3639/7901/2288 +f 3625/7869/2288 3624/7866/2288 3639/7901/2288 3638/7900/2288 +f 3884/8356/2288 3632/7885/2288 3635/7891/2288 3891/8369/2288 +f 3627/7874/2288 3626/7872/2288 3625/7869/2288 3638/7900/2288 +f 3631/7884/2289 3633/7886/2290 3618/7854/2291 3617/7852/2289 +f 3619/7856/2292 3639/7902/2293 3624/7867/2289 3620/7859/2289 +f 3889/8365/2294 3887/8360/2295 3639/7902/2293 3619/7856/2292 +f 3637/7899/2296 3635/7892/2297 3634/7890/2284 3636/7896/2284 +f 3893/8373/2298 3891/8368/2299 3635/7892/2297 3637/7899/2296 +f 3640/7903/2300 3641/7904/2300 3642/7905/2301 3643/7907/2302 +f 3644/7908/2303 3643/7906/2303 3645/7911/2304 3646/7913/2305 +f 3647/7915/2306 3648/7916/2306 3649/7917/2307 3650/7919/2308 +f 3649/7917/2309 3651/7920/2309 3652/7922/2309 3653/7924/2309 +f 3654/7926/2310 3655/7927/2310 3656/7928/2310 3657/7930/2310 +f 3658/7932/2311 3641/7904/2311 3659/7933/2311 3651/7921/2311 +f 3648/7916/2312 3658/7931/2312 3651/7920/2312 3649/7917/2312 +f 3660/7934/2313 3661/7935/2313 3658/7931/2312 3648/7916/2312 +f 3661/7936/2314 3642/7905/2314 3641/7904/2311 3658/7932/2311 +f 3662/7937/2315 3654/7925/2315 3657/7929/2315 3663/7938/2315 +f 3644/7909/2315 3664/7941/2315 3654/7925/2315 3662/7937/2315 +f 3664/7940/2310 3665/7942/2310 3655/7927/2310 3654/7926/2310 +f 3656/7928/2316 3650/7918/2316 3666/7944/2316 3667/7945/2316 +f 3651/7921/2317 3659/7933/2317 3668/7946/2317 3652/7923/2317 +f 3663/7938/2318 3657/7929/2318 3669/7948/2318 3670/7950/2318 +f 3655/7927/2319 3647/7914/2319 3650/7918/2319 3656/7928/2319 +f 3665/7942/2319 3671/7952/2319 3647/7914/2319 3655/7927/2319 +f 3671/7951/2320 3660/7934/2320 3648/7916/2306 3647/7915/2306 +f 3661/7935/2313 3660/7934/2313 3672/7953/2321 3673/7955/2321 +f 3665/7942/2322 3664/7940/2322 3674/7956/2322 3675/7958/2322 +f 3660/7934/2320 3671/7951/2320 3676/7959/2323 3672/7953/2324 +f 3677/7961/2300 3659/7933/2300 3641/7904/2300 3640/7903/2300 +f 3674/7957/2325 3646/7912/2325 3678/7964/2325 3679/7966/2325 +f 3676/7960/2326 3675/7958/2326 3680/7967/2326 3681/7969/2326 +f 3675/7958/2327 3674/7956/2327 3679/7965/2327 3680/7967/2327 +f 3672/7953/2324 3676/7959/2323 3681/7970/2328 3682/7971/2329 +f 3642/7905/2314 3661/7936/2314 3673/7954/2330 3683/7972/2330 +f 3671/7952/2331 3665/7942/2331 3675/7958/2331 3676/7960/2331 +f 3643/7907/2302 3642/7905/2301 3683/7972/2332 3645/7910/2332 +f 3664/7941/2333 3644/7909/2333 3646/7912/2333 3674/7957/2333 +f 3682/7971/2329 3681/7970/2328 3684/7973/2334 3685/7974/2335 +f 3678/7964/2336 3686/7975/2337 3687/7978/2338 3688/7979/2339 +f 3689/7980/2340 3682/7971/2340 3685/7974/2340 3690/7982/2340 +f 3686/7975/2341 3691/7985/2341 3692/7987/2341 3687/7978/2341 +f 3683/7972/2342 3673/7954/2342 3689/7981/2342 3691/7986/2342 +f 3645/7910/2343 3683/7972/2343 3691/7986/2343 3686/7976/2343 +f 3673/7955/2344 3672/7953/2344 3682/7971/2344 3689/7980/2344 +f 3646/7913/2305 3645/7911/2304 3686/7977/2337 3678/7963/2336 +f 3688/7979/2339 3687/7978/2338 3693/7991/2345 3694/7992/2346 +f 3690/7982/2347 3685/7974/2347 3695/7993/2347 3696/7995/2347 +f 3687/7978/2348 3692/7987/2348 3697/7996/2348 3693/7991/2348 +f 3692/7988/2349 3690/7983/2349 3696/7994/2349 3697/7997/2349 +f 3680/7967/2350 3679/7965/2350 3698/7998/2350 3699/8001/2350 +f 3681/7970/2351 3680/7968/2351 3699/8003/2351 3684/7973/2351 +f 3679/7966/2352 3678/7964/2352 3688/7979/2352 3698/8000/2352 +f 3691/7986/2353 3689/7981/2353 3690/7984/2353 3692/7989/2353 +f 3697/7997/2354 3696/7994/2354 3700/8005/2354 3701/8006/2354 +f 3702/8008/2355 3694/7992/2355 3703/8009/2355 3704/8010/2355 +f 3705/8012/2356 3706/8014/2356 3707/8016/2356 3708/8018/2356 +f 3706/8014/2357 3702/8007/2357 3704/8011/2357 3707/8016/2357 +f 3685/7974/2335 3684/7973/2334 3705/8013/2358 3695/7993/2359 +f 3699/8002/2360 3698/7999/2360 3702/8007/2360 3706/8014/2360 +f 3684/7973/2361 3699/8003/2361 3706/8015/2361 3705/8013/2361 +f 3698/8000/2362 3688/7979/2362 3694/7992/2362 3702/8008/2362 +f 3709/8019/2363 3710/8021/2363 3711/8023/2364 3712/8024/2364 +f 3700/8004/2365 3713/8027/2365 3714/8028/2365 3715/8030/2365 +f 3716/8033/2366 3717/8035/2366 3718/8037/2366 3719/8038/2366 +f 3704/8010/2367 3703/8009/2367 3720/8041/2367 3721/8043/2367 +f 3693/7990/2368 3697/7997/2368 3701/8006/2368 3722/8047/2368 +f 3696/7995/2369 3695/7993/2369 3713/8027/2369 3700/8004/2369 +f 3694/7992/2346 3693/7991/2345 3722/8046/2370 3703/8009/2371 +f 3695/7993/2359 3705/8013/2358 3708/8017/2372 3713/8027/2373 +f 3653/7924/2374 3652/7922/2374 3723/8048/2374 3724/8050/2374 +f 3668/7946/2375 3725/8051/2375 3726/8053/2375 3727/8057/2375 +f 3669/7947/2376 3667/7945/2376 3728/8058/2376 3729/8060/2376 +f 3725/8052/2377 3670/7949/2378 3730/8062/2379 3726/8054/2380 +f 3659/7933/2381 3677/7961/2381 3725/8051/2381 3668/7946/2381 +f 3650/7919/2308 3649/7917/2307 3653/7924/2382 3666/7943/2383 +f 3657/7930/2384 3656/7928/2384 3667/7945/2384 3669/7947/2384 +f 3677/7962/2385 3663/7939/2385 3670/7949/2378 3725/8052/2377 +f 3727/8056/2386 3726/8055/2386 3731/8064/2386 3732/8067/2386 +f 3729/8060/2387 3728/8058/2387 3733/8068/2387 3734/8071/2387 +f 3726/8055/2380 3730/8063/2379 3735/8074/2388 3731/8064/2389 +f 3730/8063/2390 3729/8061/2390 3734/8072/2390 3735/8074/2390 +f 3666/7943/2383 3653/7924/2382 3724/8050/2391 3736/8076/2392 +f 3652/7923/2393 3668/7946/2393 3727/8057/2393 3723/8049/2393 +f 3667/7945/2394 3666/7944/2394 3736/8075/2394 3728/8058/2394 +f 3670/7950/2395 3669/7948/2395 3729/8061/2395 3730/8063/2395 +f 3735/8074/2396 3734/8072/2396 3737/8077/2396 3738/8079/2396 +f 3733/8069/2397 3739/8080/2397 3740/8081/2397 3741/8083/2397 +f 3742/8085/2398 3732/8065/2398 3743/8088/2398 3744/8090/2398 +f 3739/8080/2399 3745/8092/2400 3746/8093/2401 3740/8081/2402 +f 3724/8050/2403 3723/8048/2403 3742/8087/2403 3745/8092/2403 +f 3736/8076/2392 3724/8050/2391 3745/8092/2400 3739/8080/2399 +f 3723/8049/2404 3727/8057/2404 3732/8066/2404 3742/8086/2404 +f 3728/8059/2405 3736/8076/2405 3739/8080/2405 3733/8069/2405 +f 3744/8090/2406 3743/8088/2406 3717/8035/2406 3716/8033/2406 +f 3740/8081/2402 3746/8093/2401 3747/8094/2407 3748/8096/2407 +f 3746/8093/2408 3744/8091/2408 3716/8034/2409 3747/8094/2409 +f 3743/8088/2410 3749/8097/2410 3709/8020/2411 3717/8035/2412 +f 3731/8064/2389 3735/8074/2388 3738/8079/2413 3749/8098/2414 +f 3734/8073/2415 3733/8070/2415 3741/8084/2415 3737/8078/2415 +f 3732/8067/2416 3731/8064/2416 3749/8098/2416 3743/8089/2416 +f 3745/8092/2417 3742/8087/2417 3744/8091/2417 3746/8093/2417 +f 3750/8099/2418 3751/8101/2418 3752/8102/2418 3753/8104/2418 +f 3703/8009/2371 3722/8046/2370 3754/8107/2419 3720/8041/2419 +f 3751/8101/2420 3748/8095/2420 3755/8110/2421 3752/8102/2421 +f 3713/8027/2373 3708/8017/2372 3756/8113/2422 3714/8028/2422 +f 3741/8084/2423 3740/8082/2423 3748/8095/2420 3751/8101/2420 +f 3738/8079/2424 3737/8077/2424 3750/8100/2425 3710/8021/2426 +f 3749/8098/2414 3738/8079/2413 3710/8021/2363 3709/8019/2363 +f 3737/8078/2427 3741/8084/2427 3751/8101/2427 3750/8099/2427 +f 3757/8116/2428 3715/8031/2428 3714/8029/2428 3756/8114/2428 +f 3721/8044/2428 3757/8116/2428 3756/8114/2428 3758/8117/2428 +f 3720/8042/2429 3754/8108/2428 3757/8116/2428 3721/8044/2428 +f 3754/8108/2428 3759/8119/2428 3715/8031/2428 3757/8116/2428 +f 3760/8121/2430 3719/8039/2430 3718/8036/2431 3712/8025/2432 +f 3753/8105/2430 3760/8121/2430 3712/8025/2432 3711/8022/2432 +f 3752/8103/2430 3755/8111/2430 3760/8121/2430 3753/8105/2430 +f 3755/8111/2430 3761/8122/2430 3719/8039/2430 3760/8121/2430 +f 3708/8018/2433 3707/8016/2433 3758/8118/2433 3756/8115/2433 +f 3748/8096/2407 3747/8094/2407 3761/8123/2434 3755/8112/2434 +f 3722/8047/2435 3701/8006/2435 3759/8120/2435 3754/8109/2435 +f 3710/8021/2426 3750/8100/2425 3753/8106/2436 3711/8023/2436 +f 3707/8016/2437 3704/8011/2437 3721/8045/2437 3758/8118/2437 +f 3747/8094/2409 3716/8034/2409 3719/8040/2438 3761/8123/2438 +f 3701/8006/2439 3700/8005/2439 3715/8032/2439 3759/8120/2439 +f 3717/8035/2412 3709/8020/2411 3712/8026/2440 3718/8037/2440 +f 3762/8125/2300 3763/8126/2300 3764/8127/2301 3765/8129/2302 +f 3766/8130/2441 3765/8128/2441 3767/8132/2442 3768/8133/2443 +f 3769/8134/2316 3770/8136/2316 3771/8139/2316 3772/8141/2316 +f 3773/8143/2310 3774/8144/2310 3769/8135/2310 3775/8147/2310 +f 3776/8149/2311 3763/8126/2311 3777/8150/2311 3778/8151/2311 +f 3779/8153/2312 3776/8148/2312 3778/8152/2312 3780/8154/2312 +f 3781/8155/2312 3782/8156/2312 3776/8148/2312 3779/8153/2312 +f 3782/8157/2314 3764/8127/2314 3763/8126/2311 3776/8149/2311 +f 3783/8158/2444 3773/8142/2444 3775/8146/2444 3784/8159/2444 +f 3766/8130/2444 3785/8161/2444 3773/8142/2444 3783/8158/2444 +f 3785/8160/2310 3786/8162/2310 3774/8144/2310 3773/8143/2310 +f 3778/8151/2317 3777/8150/2317 3787/8164/2317 3788/8166/2317 +f 3784/8159/2445 3775/8146/2445 3789/8167/2445 3790/8169/2445 +f 3791/8170/2446 3784/8159/2447 3790/8169/2448 3792/8172/2449 +f 3774/8145/2319 3793/8174/2319 3770/8136/2319 3769/8134/2319 +f 3786/8163/2319 3794/8176/2319 3793/8174/2319 3774/8145/2319 +f 3782/8156/2321 3781/8155/2321 3795/8177/2321 3796/8179/2321 +f 3786/8162/2322 3785/8160/2322 3797/8180/2322 3798/8182/2322 +f 3781/8155/2450 3794/8175/2450 3799/8185/2451 3795/8177/2452 +f 3783/8158/2453 3762/8124/2453 3765/8128/2441 3766/8130/2441 +f 3784/8159/2447 3791/8170/2446 3762/8124/2453 3783/8158/2453 +f 3791/8171/2300 3777/8150/2300 3763/8126/2300 3762/8125/2300 +f 3800/8186/2342 3796/8178/2342 3801/8188/2342 3802/8190/2342 +f 3797/8181/2454 3768/8133/2454 3803/8192/2454 3804/8194/2454 +f 3799/8184/2326 3798/8183/2326 3805/8195/2326 3806/8198/2326 +f 3798/8182/2455 3797/8180/2455 3804/8193/2455 3805/8197/2455 +f 3764/8127/2314 3782/8157/2314 3796/8178/2330 3800/8186/2330 +f 3794/8176/2331 3786/8163/2331 3798/8183/2331 3799/8184/2331 +f 3765/8129/2302 3764/8127/2301 3800/8186/2332 3767/8131/2332 +f 3785/8161/2456 3766/8130/2456 3768/8133/2456 3797/8181/2456 +f 3806/8199/2351 3805/8196/2351 3807/8203/2351 3808/8204/2351 +f 3805/8197/2350 3804/8193/2350 3809/8205/2350 3807/8201/2350 +f 3810/8209/2329 3806/8199/2457 3808/8204/2458 3811/8210/2335 +f 3803/8192/2459 3812/8212/2460 3813/8213/2461 3814/8214/2462 +f 3767/8131/2343 3800/8186/2343 3802/8190/2343 3812/8211/2343 +f 3796/8179/2344 3795/8177/2344 3810/8208/2344 3801/8187/2344 +f 3768/8133/2443 3767/8132/2442 3812/8212/2460 3803/8192/2459 +f 3795/8177/2452 3799/8185/2451 3806/8200/2457 3810/8208/2329 +f 3814/8214/2462 3813/8213/2461 3815/8216/2463 3816/8217/2464 +f 3817/8220/2347 3811/8210/2347 3818/8221/2347 3819/8222/2347 +f 3813/8213/2348 3820/8226/2348 3821/8227/2348 3815/8216/2348 +f 3820/8224/2349 3817/8218/2349 3819/8223/2349 3821/8228/2349 +f 3804/8194/2465 3803/8192/2465 3814/8214/2465 3809/8207/2465 +f 3802/8190/2466 3801/8188/2466 3817/8219/2466 3820/8225/2466 +f 3812/8212/2341 3802/8191/2341 3820/8226/2341 3813/8213/2341 +f 3801/8189/2340 3810/8209/2340 3811/8210/2340 3817/8220/2340 +f 3819/8222/2467 3818/8221/2467 3822/8229/2467 3823/8230/2467 +f 3815/8215/2368 3821/8228/2368 3824/8232/2368 3825/8234/2368 +f 3821/8228/2354 3819/8223/2354 3823/8231/2354 3824/8232/2354 +f 3826/8235/2468 3816/8217/2468 3827/8237/2468 3828/8238/2468 +f 3811/8210/2335 3808/8204/2458 3829/8240/2469 3818/8221/2470 +f 3807/8202/2360 3809/8206/2360 3826/8236/2360 3830/8243/2360 +f 3808/8204/2361 3807/8203/2361 3830/8242/2361 3829/8240/2361 +f 3809/8207/2471 3814/8214/2471 3816/8217/2471 3826/8235/2471 +f 3831/8244/2472 3832/8246/2472 3833/8248/2473 3834/8249/2473 +f 3823/8230/2474 3822/8229/2474 3835/8252/2474 3836/8254/2474 +f 3837/8258/2366 3838/8260/2366 3839/8262/2366 3840/8263/2366 +f 3828/8238/2475 3827/8237/2475 3841/8267/2475 3842/8269/2475 +f 3816/8217/2464 3815/8216/2463 3825/8233/2476 3827/8237/2477 +f 3818/8221/2470 3829/8240/2469 3843/8273/2478 3822/8229/2373 +f 3830/8243/2357 3826/8236/2357 3828/8239/2357 3844/8275/2357 +f 3829/8241/2356 3830/8243/2356 3844/8275/2356 3843/8274/2356 +f 3787/8164/2375 3792/8173/2375 3845/8276/2375 3846/8278/2375 +f 3789/8168/2376 3772/8140/2376 3847/8282/2376 3848/8284/2376 +f 3792/8172/2449 3790/8169/2448 3849/8285/2479 3845/8277/2480 +f 3790/8169/2481 3789/8167/2481 3848/8283/2481 3849/8285/2481 +f 3780/8154/2309 3778/8152/2309 3788/8165/2309 3850/8286/2309 +f 3777/8150/2381 3791/8171/2381 3792/8173/2381 3787/8164/2381 +f 3770/8137/2482 3780/8154/2482 3850/8286/2382 3771/8138/2483 +f 3775/8147/2384 3769/8135/2384 3772/8140/2384 3789/8168/2384 +f 3845/8277/2480 3849/8285/2479 3851/8287/2484 3852/8288/2485 +f 3849/8285/2486 3848/8283/2486 3853/8290/2486 3851/8287/2486 +f 3847/8280/2405 3854/8294/2405 3855/8295/2405 3856/8296/2405 +f 3857/8300/2404 3846/8278/2404 3858/8302/2404 3859/8305/2404 +f 3850/8286/2374 3788/8165/2374 3857/8299/2374 3860/8308/2374 +f 3771/8138/2483 3850/8286/2382 3860/8308/2391 3854/8292/2392 +f 3788/8166/2393 3787/8164/2393 3846/8278/2393 3857/8300/2393 +f 3772/8141/2394 3771/8139/2394 3854/8293/2394 3847/8281/2394 +f 3856/8296/2397 3855/8295/2397 3861/8310/2397 3862/8312/2397 +f 3859/8306/2398 3858/8303/2398 3863/8315/2398 3864/8317/2398 +f 3855/8295/2399 3865/8318/2400 3866/8319/2401 3861/8310/2402 +f 3865/8318/2417 3859/8307/2417 3864/8316/2417 3866/8319/2417 +f 3848/8284/2387 3847/8282/2387 3856/8297/2387 3853/8289/2387 +f 3846/8279/2386 3845/8277/2386 3852/8288/2386 3858/8304/2386 +f 3860/8309/2403 3857/8301/2403 3859/8307/2403 3865/8318/2403 +f 3854/8294/2392 3860/8309/2391 3865/8318/2400 3855/8295/2399 +f 3866/8319/2408 3864/8316/2408 3837/8259/2409 3867/8320/2409 +f 3863/8315/2410 3868/8321/2410 3831/8245/2411 3838/8260/2412 +f 3869/8323/2487 3862/8313/2487 3870/8325/2487 3871/8326/2487 +f 3868/8322/2488 3872/8328/2489 3832/8246/2472 3831/8244/2472 +f 3851/8287/2490 3853/8290/2490 3869/8324/2490 3872/8328/2490 +f 3852/8288/2485 3851/8287/2484 3872/8328/2489 3868/8322/2488 +f 3853/8291/2415 3856/8298/2415 3862/8313/2415 3869/8323/2415 +f 3858/8304/2416 3852/8288/2416 3868/8322/2416 3863/8314/2416 +f 3871/8326/2491 3870/8325/2491 3873/8329/2491 3874/8331/2491 +f 3827/8237/2477 3825/8233/2476 3875/8335/2492 3841/8267/2492 +f 3822/8229/2373 3843/8273/2478 3876/8338/2422 3835/8252/2422 +f 3870/8325/2420 3877/8341/2420 3878/8343/2421 3873/8329/2421 +f 3861/8310/2402 3866/8319/2401 3867/8320/2407 3877/8342/2407 +f 3864/8317/2406 3863/8315/2406 3838/8260/2406 3837/8258/2406 +f 3862/8313/2423 3861/8311/2423 3877/8341/2420 3870/8325/2420 +f 3872/8328/2493 3869/8324/2493 3871/8327/2494 3832/8246/2495 +f 3879/8346/2428 3836/8255/2428 3835/8253/2428 3876/8339/2428 +f 3842/8270/2428 3879/8346/2428 3876/8339/2428 3880/8348/2428 +f 3841/8268/2429 3875/8336/2428 3879/8347/2428 3842/8271/2428 +f 3875/8336/2428 3881/8350/2428 3836/8256/2428 3879/8347/2428 +f 3882/8352/2430 3840/8264/2430 3839/8261/2431 3834/8250/2432 +f 3874/8332/2430 3882/8352/2430 3834/8250/2432 3833/8247/2432 +f 3873/8330/2430 3878/8344/2430 3882/8353/2430 3874/8333/2430 +f 3878/8344/2430 3883/8354/2430 3840/8265/2430 3882/8353/2430 +f 3843/8274/2433 3844/8275/2433 3880/8349/2433 3876/8340/2433 +f 3877/8342/2407 3867/8320/2407 3883/8355/2434 3878/8345/2434 +f 3825/8234/2435 3824/8232/2435 3881/8351/2435 3875/8337/2435 +f 3832/8246/2495 3871/8327/2494 3874/8334/2496 3833/8248/2496 +f 3844/8275/2437 3828/8239/2437 3842/8272/2437 3880/8349/2437 +f 3867/8320/2409 3837/8259/2409 3840/8266/2438 3883/8355/2438 +f 3824/8232/2439 3823/8231/2439 3836/8257/2439 3881/8351/2439 +f 3838/8260/2412 3831/8245/2411 3834/8251/2440 3839/8262/2440 +f 3628/7876/2286 3627/7873/2285 3890/8366/2497 3892/8371/2498 +f 3892/8371/2498 3890/8366/2497 3891/8368/2299 3893/8373/2298 +f 3618/7854/2291 3633/7886/2290 3886/8358/2499 3888/8363/2500 +f 3888/8363/2500 3886/8358/2499 3887/8360/2295 3889/8365/2294 +f 3638/7900/2288 3885/8357/2288 3890/8367/2288 3627/7874/2288 +f 3885/8357/2288 3884/8356/2288 3891/8369/2288 3890/8367/2288 +f 3633/7887/2288 3632/7885/2288 3884/8356/2288 3886/8359/2288 +f 3886/8359/2288 3884/8356/2288 3885/8357/2288 3887/8361/2288 +o Chair.009 +v 6.775808 0.541016 6.577875 +v 6.775808 0.555585 6.577875 +v 6.798890 0.555585 6.533952 +v 6.985870 0.555585 6.178140 +v 7.008952 0.555585 6.134217 +v 7.008952 0.541016 6.134217 +v 6.985870 0.541016 6.178140 +v 6.798890 0.541016 6.533952 +v 7.349434 0.555585 6.313142 +v 7.349434 0.541016 6.313142 +v 7.349434 0.526446 6.313142 +v 7.328213 0.526446 6.353524 +v 6.985870 0.526446 6.178140 +v 7.008952 0.526446 6.134217 +v 7.116290 0.541016 6.756800 +v 7.116290 0.555585 6.756800 +v 7.137511 0.541016 6.716417 +v 7.137511 0.555585 6.716417 +v 7.116290 0.526446 6.756800 +v 7.137511 0.526446 6.716417 +v 6.775808 0.526446 6.577875 +v 6.798890 0.526446 6.533952 +v 7.328213 0.541016 6.353524 +v 7.328213 0.555585 6.353524 +v 7.179630 0.563694 6.221457 +v 7.182347 0.569285 6.216287 +v 7.066308 0.569285 6.155309 +v 7.063591 0.563694 6.160479 +v 7.063673 0.555610 6.160322 +v 7.034913 0.563584 6.145409 +v 7.037309 0.555934 6.146468 +v 7.188790 0.555537 6.204025 +v 7.188709 0.563621 6.204181 +v 7.304746 0.563621 6.265159 +v 7.304828 0.555537 6.265003 +v 7.302145 0.569462 6.270109 +v 7.330385 0.565042 6.284949 +v 7.330917 0.559689 6.278912 +v 7.182313 0.549769 6.216352 +v 7.186073 0.549945 6.209196 +v 7.302111 0.549945 6.270174 +v 7.298350 0.549769 6.277330 +v 7.186107 0.569462 6.209131 +v 7.298384 0.569285 6.277265 +v 7.072670 0.563621 6.143202 +v 7.070069 0.569462 6.148152 +v 7.179712 0.555610 6.221301 +v 7.295749 0.555610 6.282279 +v 7.066275 0.549769 6.155373 +v 7.070035 0.549945 6.148217 +v 7.328136 0.552280 6.277252 +v 7.323439 0.547155 6.281382 +v 7.326561 0.564881 6.292073 +v 7.319616 0.546994 6.288505 +v 7.319084 0.552347 6.294541 +v 7.072752 0.555537 6.143046 +v 7.044013 0.563515 6.128142 +v 7.039740 0.569042 6.132214 +v 7.041582 0.550407 6.142397 +v 7.045291 0.550574 6.135214 +v 7.046408 0.555865 6.129203 +v 7.295667 0.563694 6.282436 +v 7.012268 0.546611 6.133308 +v 7.018033 0.541991 6.130022 +v 7.021698 0.542131 6.122816 +v 7.021386 0.546553 6.116053 +v 7.016925 0.552947 6.113908 +v 7.036030 0.568875 6.139397 +v 7.000373 0.528601 6.105011 +v 6.994317 0.533052 6.102027 +v 7.007806 0.553005 6.131164 +v 6.985184 0.533092 6.119275 +v 6.991240 0.528642 6.122258 +v 7.011160 0.557566 6.117195 +v 6.987399 0.536268 6.104709 +v 7.007494 0.557427 6.124401 +v 6.983768 0.536171 6.111933 +v 6.969475 0.505986 6.111021 +v 6.976485 0.503957 6.114504 +v 6.978617 0.505968 6.093777 +v 6.971011 0.507434 6.096097 +v 6.967402 0.507390 6.103333 +v 6.998158 0.525426 6.119577 +v 7.001788 0.525523 6.112353 +v 6.957181 0.471429 6.088830 +v 6.953573 0.471390 6.096066 +v 6.984091 0.502490 6.112185 +v 6.962749 0.468385 6.107286 +v 6.970394 0.467101 6.104987 +v 6.985626 0.503938 6.097261 +v 6.987700 0.502535 6.104950 +v 6.974002 0.467140 6.097751 +v 6.971890 0.468369 6.090043 +v 7.383489 0.475035 6.328587 +v 7.376464 0.474088 6.324695 +v 7.412850 0.122681 6.343817 +v 7.419876 0.123627 6.347708 +v 6.964828 0.470145 6.086530 +v 6.888094 0.127125 6.046207 +v 6.880448 0.128408 6.048506 +v 7.395037 0.475711 6.318925 +v 7.391122 0.475690 6.325999 +v 7.427508 0.124282 6.345121 +v 7.431424 0.124303 6.338046 +v 6.886015 0.125364 6.066963 +v 6.893661 0.124081 6.064664 +v 6.955685 0.470161 6.103774 +v 7.357777 0.551208 6.299344 +v 7.356587 0.547237 6.292402 +v 7.321864 0.559756 6.296203 +v 7.347555 0.547286 6.309703 +v 7.353902 0.551088 6.306440 +v 7.345074 0.537939 6.292751 +v 7.341199 0.537819 6.299847 +v 7.342390 0.541790 6.306789 +v 7.366765 0.528865 6.319798 +v 7.374155 0.530709 6.317083 +v 7.361718 0.524332 6.301498 +v 7.357811 0.524274 6.308577 +v 7.360091 0.526200 6.316091 +v 7.351420 0.541740 6.289488 +v 7.371167 0.496864 6.315596 +v 7.373617 0.498113 6.323199 +v 7.369109 0.526176 6.298783 +v 7.382633 0.498098 6.305890 +v 7.375081 0.496901 6.308520 +v 7.378063 0.530767 6.310005 +v 7.388078 0.501040 6.324399 +v 7.391990 0.501077 6.317324 +v 7.375782 0.528841 6.302489 +v 7.389542 0.499828 6.309720 +v 7.392503 0.475026 6.311276 +v 7.385479 0.474080 6.307386 +v 7.380526 0.499843 6.327029 +v 7.373930 0.473404 6.317047 +v 7.377846 0.473425 6.309973 +v 7.414233 0.122017 6.329094 +v 7.410317 0.121997 6.336169 +v 6.878952 0.127141 6.063450 +v 7.421865 0.122672 6.326507 +v 6.895157 0.125348 6.049719 +v 6.887054 0.126245 6.056584 +v 6.897269 0.124120 6.057427 +v 6.876840 0.128370 6.055742 +v 7.420871 0.123150 6.337107 +v 7.428890 0.123619 6.330398 +v 6.936086 0.563694 6.684905 +v 6.938803 0.569285 6.679735 +v 6.822765 0.569285 6.618756 +v 6.820047 0.563694 6.623927 +v 6.820129 0.555610 6.623771 +v 6.791369 0.563584 6.608856 +v 6.793765 0.555934 6.609916 +v 7.058567 0.549945 6.733622 +v 7.061284 0.555537 6.728451 +v 7.084593 0.552280 6.740700 +v 7.079895 0.547155 6.744830 +v 6.938769 0.549769 6.679800 +v 6.942530 0.549945 6.672643 +v 7.054806 0.549769 6.740777 +v 6.942564 0.569462 6.672579 +v 7.054841 0.569285 6.740713 +v 7.058601 0.569462 6.733557 +v 6.945165 0.563621 6.667628 +v 7.061202 0.563621 6.728607 +v 6.829126 0.563621 6.606650 +v 6.826525 0.569462 6.611600 +v 6.936168 0.555610 6.684750 +v 7.052205 0.555610 6.745728 +v 6.822731 0.549769 6.618821 +v 6.826491 0.549945 6.611665 +v 7.083017 0.564881 6.755520 +v 7.086841 0.565042 6.748397 +v 7.076072 0.546994 6.751953 +v 7.075539 0.552347 6.757990 +v 7.052123 0.563694 6.745883 +v 7.078320 0.559756 6.759650 +v 6.945247 0.555537 6.667473 +v 6.829208 0.555537 6.606494 +v 6.800468 0.563515 6.591590 +v 6.796196 0.569042 6.595662 +v 6.798038 0.550407 6.605844 +v 6.801748 0.550574 6.598662 +v 6.802865 0.555865 6.592650 +v 6.792486 0.568875 6.602844 +v 6.767615 0.557566 6.580643 +v 6.763950 0.557427 6.587849 +v 6.768723 0.546611 6.596756 +v 6.774488 0.541991 6.593469 +v 6.778154 0.542131 6.586263 +v 6.777842 0.546553 6.579501 +v 6.758244 0.525523 6.575800 +v 6.756829 0.528601 6.568459 +v 6.754613 0.525426 6.583025 +v 6.773381 0.552947 6.577355 +v 6.750772 0.533052 6.565475 +v 6.764262 0.553005 6.594611 +v 6.741640 0.533092 6.582723 +v 6.747696 0.528642 6.585707 +v 6.725932 0.505986 6.574468 +v 6.732941 0.503957 6.577953 +v 6.743855 0.536268 6.568157 +v 6.735074 0.505968 6.557225 +v 6.727467 0.507434 6.559545 +v 6.740225 0.536171 6.575381 +v 6.723858 0.507390 6.566780 +v 6.721282 0.470145 6.549977 +v 6.713637 0.471429 6.552277 +v 6.710029 0.471390 6.559513 +v 6.712141 0.470161 6.567221 +v 6.740548 0.502490 6.575633 +v 6.719204 0.468385 6.570735 +v 6.726850 0.467101 6.568435 +v 6.742082 0.503938 6.560709 +v 6.744157 0.502535 6.568398 +v 7.139946 0.475035 6.792034 +v 7.132920 0.474088 6.788144 +v 7.169307 0.122681 6.807265 +v 7.176332 0.123627 6.811156 +v 6.644551 0.127125 6.509655 +v 6.636905 0.128408 6.511953 +v 7.151494 0.475711 6.782372 +v 7.147578 0.475690 6.789447 +v 7.183965 0.124282 6.808568 +v 7.187881 0.124303 6.801494 +v 6.642471 0.125364 6.530411 +v 6.650117 0.124081 6.528111 +v 6.728346 0.468369 6.553491 +v 6.730458 0.467140 6.561199 +v 7.104011 0.547286 6.773150 +v 7.110358 0.551088 6.769888 +v 7.101530 0.537939 6.756199 +v 7.097655 0.537819 6.763295 +v 7.098845 0.541790 6.770237 +v 7.087374 0.559689 6.742360 +v 7.116547 0.526200 6.779540 +v 7.123221 0.528865 6.783246 +v 7.114267 0.524274 6.772024 +v 7.107876 0.541740 6.752935 +v 7.125565 0.526176 6.762231 +v 7.118175 0.524332 6.764946 +v 7.114233 0.551208 6.762792 +v 7.130611 0.530709 6.780531 +v 7.134520 0.530767 6.773452 +v 7.113043 0.547237 6.755849 +v 7.139089 0.498098 6.769338 +v 7.131537 0.496901 6.771967 +v 7.144534 0.501040 6.787847 +v 7.148447 0.501077 6.780771 +v 7.132239 0.528841 6.765937 +v 7.145998 0.499828 6.773167 +v 7.148960 0.475026 6.774724 +v 7.136981 0.499843 6.790477 +v 7.127624 0.496864 6.779044 +v 7.134302 0.473425 6.773421 +v 7.130387 0.473404 6.780495 +v 7.130073 0.498113 6.786647 +v 7.170689 0.122017 6.792542 +v 7.166774 0.121997 6.799617 +v 6.635408 0.127141 6.526897 +v 6.651613 0.125348 6.513167 +v 7.141935 0.474080 6.770833 +v 7.178322 0.122672 6.789955 +v 6.643510 0.126245 6.520033 +v 6.653725 0.124120 6.520875 +v 6.633296 0.128370 6.519189 +v 7.177326 0.123150 6.800555 +v 7.185347 0.123619 6.793845 +v 7.201078 0.522319 6.595453 +v 7.264645 0.522319 6.474489 +v 7.201078 0.536888 6.595453 +v 7.264645 0.536888 6.474489 +v 6.861217 0.536888 6.415348 +v 6.923544 0.536888 6.296744 +v 7.264645 0.507749 6.474489 +v 7.201078 0.507749 6.595453 +v 6.923543 0.507749 6.296744 +v 6.861217 0.507749 6.415348 +vn -0.2160 -0.0000 0.9764 +vn -0.6752 -0.7071 0.2100 +vn -0.8852 -0.0000 -0.4652 +vn -0.2100 -0.7071 -0.6752 +vn 0.0150 0.6667 -0.7452 +vn 0.4652 -0.0000 -0.8852 +vn -0.0000 -1.0000 -0.0000 +vn 0.0313 -0.9977 -0.0605 +vn 0.0317 -0.9976 -0.0613 +vn -0.4652 -0.0000 0.8852 +vn 0.8852 -0.0000 0.4652 +vn -0.0000 1.0000 -0.0000 +vn 0.0321 0.9977 -0.0601 +vn 0.0325 0.9976 -0.0609 +vn -0.0317 0.9976 0.0613 +vn -0.0313 0.9977 0.0605 +vn -0.0314 0.9977 0.0608 +vn -0.0316 0.9976 0.0611 +vn -0.0325 -0.9976 0.0609 +vn -0.0321 -0.9977 0.0601 +vn -0.0323 -0.9977 0.0604 +vn -0.0324 -0.9976 0.0606 +vn -0.3217 0.7224 0.6121 +vn -0.3220 0.7268 0.6066 +vn -0.3220 0.7269 0.6066 +vn -0.4651 -0.0225 0.8850 +vn -0.4648 -0.0215 0.8851 +vn -0.4593 -0.0204 0.8880 +vn 0.4651 0.0218 -0.8850 +vn 0.4663 0.0219 -0.8844 +vn 0.4664 0.0219 -0.8843 +vn 0.4156 0.6937 -0.5882 +vn 0.0101 -0.9998 -0.0193 +vn -0.0102 0.9998 0.0194 +vn 0.3360 0.6915 -0.6394 +vn 0.3315 0.6962 -0.6367 +vn -0.0154 0.9997 0.0163 +vn -0.3360 -0.6915 0.6395 +vn 0.2404 -0.7257 -0.6446 +vn 0.1115 0.9903 0.0826 +vn -0.4058 -0.6955 0.5930 +vn 0.3217 -0.7223 -0.6122 +vn 0.4651 0.0221 -0.8850 +vn 0.3269 0.7008 -0.6340 +vn -0.0102 -0.9995 -0.0292 +vn 0.4590 0.0214 -0.8882 +vn 0.4647 0.0224 -0.8852 +vn -0.1400 -0.6683 0.7306 +vn 0.5161 -0.6972 -0.4976 +vn 0.2770 -0.9532 0.1216 +vn 0.4533 0.0184 -0.8912 +vn 0.4582 0.0214 -0.8886 +vn -0.0206 0.9997 0.0132 +vn 0.3058 -0.7326 -0.6081 +vn -0.3223 0.7313 0.6011 +vn -0.3415 -0.7022 0.6247 +vn 0.4485 0.0132 -0.8937 +vn 0.4522 0.0177 -0.8917 +vn -0.4536 -0.0175 0.8910 +vn -0.4585 -0.0204 0.8884 +vn -0.4530 -0.0172 0.8914 +vn -0.4491 -0.0124 0.8934 +vn -0.0517 0.5509 -0.8330 +vn -0.7174 0.5748 0.3936 +vn -0.3062 0.9421 -0.1369 +vn -0.5314 0.6901 0.4913 +vn 0.1266 0.6614 -0.7393 +vn -0.4488 -0.0119 0.8936 +vn -0.4475 -0.0090 0.8942 +vn -0.1888 0.3812 -0.9050 +vn -0.8605 0.3978 0.3184 +vn -0.7546 0.5403 -0.3725 +vn 0.5354 -0.8044 0.2575 +vn 0.7049 -0.5868 -0.3984 +vn 0.0410 -0.5625 0.8258 +vn -0.5599 0.7833 -0.2703 +vn -0.8219 0.3980 -0.4076 +vn 0.2318 -0.2790 0.9319 +vn 0.9094 -0.2912 -0.2970 +vn 0.8209 -0.4005 0.4071 +vn 0.4470 0.0092 -0.8945 +vn 0.4482 0.0122 -0.8938 +vn 0.7374 -0.5692 0.3636 +vn 0.8520 -0.4135 -0.3211 +vn 0.1820 -0.3964 0.8999 +vn -0.4843 -0.0027 0.8749 +vn -0.4843 -0.0025 0.8749 +vn -0.2576 0.1694 -0.9513 +vn 0.8689 0.1162 0.4812 +vn 0.2576 -0.1695 0.9513 +vn -0.9098 0.2899 0.2969 +vn -0.2322 0.2777 -0.9322 +vn -0.4479 -0.0079 0.8940 +vn -0.4471 -0.0056 0.8945 +vn 0.4463 0.0054 -0.8949 +vn 0.4467 0.0070 -0.8946 +vn 0.5804 0.6472 -0.4943 +vn -0.0527 0.6748 0.7361 +vn -0.3024 -0.9356 -0.1822 +vn -0.4678 -0.0216 0.8836 +vn -0.4724 -0.0208 0.8812 +vn -0.4776 -0.0183 0.8784 +vn -0.4732 -0.0205 0.8807 +vn -0.2306 0.7239 0.6502 +vn 0.4679 0.0227 -0.8835 +vn 0.4727 0.0218 -0.8810 +vn -0.0918 -0.9932 -0.0722 +vn -0.4676 -0.0222 0.8837 +vn 0.1242 0.5630 0.8171 +vn -0.5093 -0.8103 -0.2898 +vn -0.4819 -0.0112 0.8762 +vn -0.4786 -0.0173 0.8779 +vn -0.7060 -0.5801 0.4062 +vn 0.4734 0.0211 -0.8806 +vn 0.4779 0.0187 -0.8782 +vn 0.3513 0.9128 0.2082 +vn 0.0752 -0.6896 -0.7203 +vn -0.5555 -0.6617 0.5036 +vn -0.8762 -0.3366 0.3449 +vn -0.2511 -0.3512 -0.9020 +vn 0.7721 0.4682 0.4298 +vn 0.4822 0.0114 -0.8760 +vn 0.4789 0.0175 -0.8777 +vn 0.4827 0.0104 -0.8757 +vn 0.4844 0.0032 -0.8749 +vn 0.7410 0.5405 -0.3984 +vn 0.5794 0.7463 0.3275 +vn -0.0966 -0.6033 -0.7916 +vn 0.8669 0.1344 0.4801 +vn 0.4842 0.0027 -0.8749 +vn 0.9429 0.0928 -0.3198 +vn 0.9435 0.0866 -0.3199 +vn 0.3128 0.0969 0.9449 +vn 0.3131 0.0905 0.9454 +vn 0.3131 0.0904 0.9454 +vn -0.4835 -0.0030 0.8754 +vn -0.4819 -0.0100 0.8762 +vn -0.7655 -0.4821 -0.4262 +vn 0.2535 0.3437 0.9042 +vn 0.8792 0.3294 -0.3442 +vn -0.8688 -0.1162 -0.4813 +vn -0.4463 -0.0053 0.8948 +vn -0.3132 -0.0898 -0.9454 +vn -0.3134 -0.0839 -0.9459 +vn 0.4464 0.0053 -0.8948 +vn -0.3130 -0.0956 -0.9449 +vn -0.9430 -0.0916 0.3198 +vn -0.9436 -0.0860 0.3199 +vn -0.9436 -0.0859 0.3199 +vn -0.8671 -0.1319 -0.4804 +vn -0.1945 -0.9756 -0.1022 +vn -0.1945 -0.9756 -0.1023 +vn 0.1037 -0.9931 0.0545 +vn 0.1037 -0.9931 0.0544 +vn 0.1036 -0.9931 0.0544 +vn 0.9417 -0.1770 -0.2862 +vn 0.4842 0.0025 -0.8749 +vn -0.9417 0.1770 0.2862 +vn -0.9440 -0.0803 0.3199 +vn 0.8682 -0.2449 0.4316 +vn 0.9440 0.0803 -0.3199 +vn -0.8682 0.2449 -0.4316 +vn 0.3134 0.0839 0.9459 +vn -0.4651 -0.0221 0.8850 +vn -0.4647 -0.0224 0.8852 +vn -0.4590 -0.0214 0.8882 +vn -0.3360 -0.6915 0.6394 +vn -0.4057 -0.6956 0.5929 +vn -0.4663 -0.0219 0.8844 +vn -0.4664 -0.0219 0.8843 +vn -0.4726 -0.0218 0.8810 +vn -0.4681 -0.0228 0.8834 +vn 0.4651 0.0224 -0.8850 +vn 0.4591 0.0214 -0.8881 +vn 0.4648 0.0224 -0.8851 +vn -0.4651 -0.0218 0.8850 +vn -0.1399 -0.6683 0.7306 +vn 0.2769 -0.9532 0.1216 +vn -0.3415 -0.7023 0.6247 +vn 0.4531 0.0183 -0.8913 +vn 0.4485 0.0133 -0.8937 +vn -0.4531 -0.0183 0.8912 +vn -0.4582 -0.0214 0.8886 +vn -0.4523 -0.0178 0.8917 +vn -0.4484 -0.0131 0.8937 +vn -0.4482 -0.0122 0.8939 +vn -0.4471 -0.0094 0.8944 +vn 0.0411 -0.5626 0.8257 +vn -0.5599 0.7833 -0.2702 +vn -0.2323 0.2777 -0.9322 +vn 0.2319 -0.2790 0.9319 +vn 0.4470 0.0091 -0.8945 +vn 0.4482 0.0123 -0.8938 +vn 0.1821 -0.3964 0.8998 +vn -0.4842 -0.0027 0.8750 +vn -0.4842 -0.0025 0.8749 +vn -0.2576 0.1695 -0.9513 +vn 0.2577 -0.1695 0.9513 +vn -0.4467 -0.0070 0.8946 +vn -0.4460 -0.0058 0.8950 +vn 0.4463 0.0055 -0.8949 +vn -0.4779 -0.0187 0.8782 +vn -0.4734 -0.0210 0.8806 +vn -0.5555 -0.6618 0.5035 +vn 0.4676 0.0221 -0.8837 +vn 0.4726 0.0218 -0.8810 +vn -0.4822 -0.0114 0.8760 +vn -0.4789 -0.0176 0.8777 +vn -0.7060 -0.5802 0.4061 +vn -0.8672 -0.1319 -0.4803 +vn -0.4827 -0.0104 0.8757 +vn -0.4844 -0.0032 0.8749 +vn -0.8762 -0.3367 0.3447 +vn -0.8689 -0.1162 -0.4812 +vn -0.4464 -0.0053 0.8948 +vn -0.9431 -0.0916 0.3196 +vn -0.9436 -0.0860 0.3197 +vn -0.9436 -0.0859 0.3197 +vn -0.9441 -0.0803 0.3198 +vn 0.0316 -0.9976 -0.0611 +vn 0.0314 -0.9977 -0.0608 +vn 0.0324 0.9976 -0.0606 +vn 0.0323 0.9977 -0.0604 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.973130 0.033128 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.677629 0.482142 +vt 0.409642 -0.009898 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.669677 0.481452 +vt 0.240570 0.058726 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +vt 0.296927 -0.019617 +vt 0.353285 -0.019617 +vt 0.470812 0.481452 +vt 0.296927 0.014692 +vt 0.271947 0.481452 +vt 0.353285 0.014692 +vt -0.849112 0.025953 +vt 0.468872 0.000137 +vt -0.911121 0.025955 +vt 0.273887 0.000137 +vt 0.475153 0.482142 +vt 0.353285 -0.053929 +vt 0.272677 0.482143 +vt 0.296927 -0.053929 +vt -0.911121 -0.024667 +vt 0.473178 0.006015 +vt -0.849112 -0.024667 +vt 0.274652 0.006015 +s 1 +usemtl Material.072 +f 3894/8375/2501 3895/8377/2502 3896/8380/2503 4166/8889/2503 4167/8891/2503 3897/8382/2503 3898/8384/2504 3899/8388/2505 3900/8389/2503 3901/8390/2503 +f 3899/8387/2505 3898/8385/2504 3902/8392/2506 3903/8395/2506 +f 3904/8397/2507 3905/8400/2508 3906/8403/2509 3907/8404/2507 +f 3908/8408/2510 3909/8409/2510 3895/8378/2502 3894/8374/2501 +f 3909/8410/2511 3908/8407/2511 3910/8412/2511 3911/8414/2511 +f 3912/8415/2511 3913/8418/2511 3910/8412/2511 3908/8407/2511 +f 3912/8416/2510 3908/8408/2510 3894/8374/2501 3914/8420/2510 +f 3907/8405/2506 3899/8387/2505 3903/8395/2506 3904/8398/2506 +f 3914/8421/2503 3894/8375/2503 3901/8390/2503 3900/8389/2503 3899/8388/2503 3907/8406/2503 3906/8402/2503 4170/8897/2503 4171/8899/2503 3915/8424/2503 +f 3907/8406/2503 3906/8402/2503 3900/8389/2503 3899/8388/2503 +f 3901/8391/2511 3894/8376/2511 3914/8422/2511 3915/8425/2511 +f 4165/8888/2511 4163/8884/2511 3916/8427/2511 3917/8428/2511 +f 3903/8396/2511 3902/8393/2511 3917/8428/2511 3916/8427/2511 +f 4162/8883/2511 3910/8412/2511 3913/8418/2511 4169/8896/2511 +f 3905/8401/2511 3904/8399/2511 3903/8396/2511 3916/8427/2511 +f 3909/8411/2512 3911/8413/2513 3896/8381/2514 3895/8379/2512 +f 3897/8383/2515 3917/8429/2516 3902/8394/2512 3898/8386/2512 +f 4167/8892/2517 4165/8887/2518 3917/8429/2516 3897/8383/2515 +f 3915/8426/2519 3913/8419/2520 3912/8417/2507 3914/8423/2507 +f 4171/8900/2521 4169/8895/2522 3913/8419/2520 3915/8426/2519 +f 3918/8430/2523 3919/8431/2523 3920/8432/2524 3921/8434/2525 +f 3922/8435/2526 3921/8433/2526 3923/8438/2527 3924/8440/2528 +f 3925/8442/2529 3926/8443/2529 3927/8444/2530 3928/8446/2531 +f 3927/8444/2532 3929/8447/2532 3930/8449/2532 3931/8451/2532 +f 3932/8453/2533 3933/8454/2533 3934/8455/2533 3935/8457/2533 +f 3936/8459/2534 3919/8431/2534 3937/8460/2534 3929/8448/2534 +f 3926/8443/2535 3936/8458/2535 3929/8447/2535 3927/8444/2535 +f 3938/8461/2536 3939/8462/2536 3936/8458/2535 3926/8443/2535 +f 3939/8463/2537 3920/8432/2537 3919/8431/2534 3936/8459/2534 +f 3940/8464/2538 3932/8452/2538 3935/8456/2538 3941/8465/2538 +f 3922/8436/2538 3942/8468/2538 3932/8452/2538 3940/8464/2538 +f 3942/8467/2533 3943/8469/2533 3933/8454/2533 3932/8453/2533 +f 3934/8455/2539 3928/8445/2539 3944/8471/2539 3945/8472/2539 +f 3929/8448/2540 3937/8460/2540 3946/8473/2540 3930/8450/2540 +f 3941/8465/2541 3935/8456/2541 3947/8475/2541 3948/8477/2541 +f 3933/8454/2542 3925/8441/2542 3928/8445/2542 3934/8455/2542 +f 3943/8469/2542 3949/8479/2542 3925/8441/2542 3933/8454/2542 +f 3949/8478/2543 3938/8461/2543 3926/8443/2529 3925/8442/2529 +f 3939/8462/2536 3938/8461/2536 3950/8480/2544 3951/8482/2544 +f 3943/8469/2545 3942/8467/2545 3952/8483/2545 3953/8485/2545 +f 3938/8461/2543 3949/8478/2543 3954/8486/2546 3950/8480/2547 +f 3955/8488/2523 3937/8460/2523 3919/8431/2523 3918/8430/2523 +f 3952/8484/2548 3924/8439/2548 3956/8491/2548 3957/8493/2548 +f 3954/8487/2549 3953/8485/2549 3958/8494/2549 3959/8496/2549 +f 3953/8485/2550 3952/8483/2550 3957/8492/2550 3958/8494/2550 +f 3950/8480/2547 3954/8486/2546 3959/8497/2551 3960/8498/2552 +f 3920/8432/2537 3939/8463/2537 3951/8481/2553 3961/8499/2553 +f 3949/8479/2554 3943/8469/2554 3953/8485/2554 3954/8487/2554 +f 3921/8434/2525 3920/8432/2524 3961/8499/2555 3923/8437/2555 +f 3942/8468/2556 3922/8436/2556 3924/8439/2556 3952/8484/2556 +f 3960/8498/2552 3959/8497/2551 3962/8500/2557 3963/8501/2558 +f 3956/8491/2559 3964/8502/2560 3965/8505/2561 3966/8506/2562 +f 3967/8507/2563 3960/8498/2563 3963/8501/2563 3968/8509/2563 +f 3964/8502/2564 3969/8512/2564 3970/8514/2564 3965/8505/2564 +f 3961/8499/2565 3951/8481/2565 3967/8508/2565 3969/8513/2565 +f 3923/8437/2566 3961/8499/2566 3969/8513/2566 3964/8503/2566 +f 3951/8482/2567 3950/8480/2567 3960/8498/2567 3967/8507/2567 +f 3924/8440/2528 3923/8438/2527 3964/8504/2560 3956/8490/2559 +f 3966/8506/2562 3965/8505/2561 3971/8518/2568 3972/8519/2569 +f 3968/8509/2570 3963/8501/2570 3973/8520/2570 3974/8522/2570 +f 3965/8505/2571 3970/8514/2571 3975/8523/2571 3971/8518/2571 +f 3970/8515/2572 3968/8510/2572 3974/8521/2572 3975/8524/2572 +f 3958/8494/2573 3957/8492/2573 3976/8525/2573 3977/8528/2573 +f 3959/8497/2574 3958/8495/2574 3977/8530/2574 3962/8500/2574 +f 3957/8493/2575 3956/8491/2575 3966/8506/2575 3976/8527/2575 +f 3969/8513/2576 3967/8508/2576 3968/8511/2576 3970/8516/2576 +f 3975/8524/2577 3974/8521/2577 3978/8532/2577 3979/8533/2577 +f 3980/8535/2578 3972/8519/2578 3981/8536/2578 3982/8537/2578 +f 3983/8539/2579 3984/8541/2579 3985/8543/2579 3986/8545/2579 +f 3984/8541/2580 3980/8534/2580 3982/8538/2580 3985/8543/2580 +f 3963/8501/2558 3962/8500/2557 3983/8540/2581 3973/8520/2582 +f 3977/8529/2583 3976/8526/2583 3980/8534/2583 3984/8541/2583 +f 3962/8500/2584 3977/8530/2584 3984/8542/2584 3983/8540/2584 +f 3976/8527/2585 3966/8506/2585 3972/8519/2585 3980/8535/2585 +f 3987/8546/2586 3988/8548/2586 3989/8550/2587 3990/8551/2587 +f 3978/8531/2588 3991/8554/2588 3992/8555/2588 3993/8557/2588 +f 3994/8560/2589 3995/8562/2589 3996/8564/2589 3997/8565/2589 +f 3982/8537/2590 3981/8536/2590 3998/8568/2590 3999/8570/2590 +f 3971/8517/2591 3975/8524/2591 3979/8533/2591 4000/8574/2591 +f 3974/8522/2592 3973/8520/2592 3991/8554/2592 3978/8531/2592 +f 3972/8519/2569 3971/8518/2568 4000/8573/2593 3981/8536/2594 +f 3973/8520/2582 3983/8540/2581 3986/8544/2595 3991/8554/2596 +f 3931/8451/2597 3930/8449/2597 4001/8575/2597 4002/8577/2597 +f 3946/8473/2598 4003/8578/2598 4004/8580/2598 4005/8584/2598 +f 3947/8474/2599 3945/8472/2599 4006/8585/2599 4007/8587/2599 +f 4003/8579/2600 3948/8476/2601 4008/8589/2602 4004/8581/2603 +f 3937/8460/2604 3955/8488/2604 4003/8578/2604 3946/8473/2604 +f 3928/8446/2531 3927/8444/2530 3931/8451/2605 3944/8470/2606 +f 3935/8457/2607 3934/8455/2607 3945/8472/2607 3947/8474/2607 +f 3955/8489/2608 3941/8466/2608 3948/8476/2601 4003/8579/2600 +f 4005/8583/2609 4004/8582/2609 4009/8591/2609 4010/8594/2609 +f 4007/8587/2610 4006/8585/2610 4011/8595/2610 4012/8598/2610 +f 4004/8582/2603 4008/8590/2602 4013/8601/2611 4009/8591/2612 +f 4008/8590/2613 4007/8588/2613 4012/8599/2613 4013/8601/2613 +f 3944/8470/2606 3931/8451/2605 4002/8577/2614 4014/8603/2615 +f 3930/8450/2616 3946/8473/2616 4005/8584/2616 4001/8576/2616 +f 3945/8472/2617 3944/8471/2617 4014/8602/2617 4006/8585/2617 +f 3948/8477/2618 3947/8475/2618 4007/8588/2618 4008/8590/2618 +f 4013/8601/2619 4012/8599/2619 4015/8604/2619 4016/8606/2619 +f 4011/8596/2620 4017/8607/2620 4018/8608/2620 4019/8610/2620 +f 4020/8612/2621 4010/8592/2621 4021/8615/2621 4022/8617/2621 +f 4017/8607/2622 4023/8619/2623 4024/8620/2624 4018/8608/2625 +f 4002/8577/2626 4001/8575/2626 4020/8614/2626 4023/8619/2626 +f 4014/8603/2615 4002/8577/2614 4023/8619/2623 4017/8607/2622 +f 4001/8576/2627 4005/8584/2627 4010/8593/2627 4020/8613/2627 +f 4006/8586/2628 4014/8603/2628 4017/8607/2628 4011/8596/2628 +f 4022/8617/2629 4021/8615/2629 3995/8562/2629 3994/8560/2629 +f 4018/8608/2625 4024/8620/2624 4025/8621/2630 4026/8623/2630 +f 4024/8620/2631 4022/8618/2631 3994/8561/2632 4025/8621/2632 +f 4021/8615/2633 4027/8624/2633 3987/8547/2634 3995/8562/2635 +f 4009/8591/2612 4013/8601/2611 4016/8606/2636 4027/8625/2637 +f 4012/8600/2638 4011/8597/2638 4019/8611/2638 4015/8605/2638 +f 4010/8594/2639 4009/8591/2639 4027/8625/2639 4021/8616/2639 +f 4023/8619/2640 4020/8614/2640 4022/8618/2640 4024/8620/2640 +f 4028/8626/2641 4029/8628/2641 4030/8629/2641 4031/8631/2641 +f 3981/8536/2594 4000/8573/2593 4032/8634/2642 3998/8568/2642 +f 4029/8628/2643 4026/8622/2643 4033/8637/2644 4030/8629/2644 +f 3991/8554/2596 3986/8544/2595 4034/8640/2645 3992/8555/2645 +f 4019/8611/2646 4018/8609/2646 4026/8622/2643 4029/8628/2643 +f 4016/8606/2647 4015/8604/2647 4028/8627/2648 3988/8548/2649 +f 4027/8625/2637 4016/8606/2636 3988/8548/2586 3987/8546/2586 +f 4015/8605/2650 4019/8611/2650 4029/8628/2650 4028/8626/2650 +f 4035/8643/2651 3993/8558/2651 3992/8556/2651 4034/8641/2651 +f 3999/8571/2651 4035/8643/2651 4034/8641/2651 4036/8644/2651 +f 3998/8569/2652 4032/8635/2651 4035/8643/2651 3999/8571/2651 +f 4032/8635/2651 4037/8646/2651 3993/8558/2651 4035/8643/2651 +f 4038/8648/2653 3997/8566/2653 3996/8563/2654 3990/8552/2655 +f 4031/8632/2653 4038/8648/2653 3990/8552/2655 3989/8549/2655 +f 4030/8630/2653 4033/8638/2653 4038/8648/2653 4031/8632/2653 +f 4033/8638/2653 4039/8649/2653 3997/8566/2653 4038/8648/2653 +f 3986/8545/2656 3985/8543/2656 4036/8645/2656 4034/8642/2656 +f 4026/8623/2630 4025/8621/2630 4039/8650/2657 4033/8639/2657 +f 4000/8574/2658 3979/8533/2658 4037/8647/2658 4032/8636/2658 +f 3988/8548/2649 4028/8627/2648 4031/8633/2659 3989/8550/2659 +f 3985/8543/2660 3982/8538/2660 3999/8572/2660 4036/8645/2660 +f 4025/8621/2632 3994/8561/2632 3997/8567/2661 4039/8650/2661 +f 3979/8533/2662 3978/8532/2662 3993/8559/2662 4037/8647/2662 +f 3995/8562/2635 3987/8547/2634 3990/8553/2663 3996/8564/2663 +f 4040/8652/2523 4041/8653/2523 4042/8654/2524 4043/8656/2525 +f 4044/8657/2664 4043/8655/2664 4045/8659/2665 4046/8660/2666 +f 4047/8661/2539 4048/8663/2539 4049/8666/2539 4050/8668/2539 +f 4051/8670/2533 4052/8671/2533 4047/8662/2533 4053/8674/2533 +f 4054/8676/2534 4041/8653/2534 4055/8677/2534 4056/8678/2534 +f 4057/8680/2535 4054/8675/2535 4056/8679/2535 4058/8681/2535 +f 4059/8682/2535 4060/8683/2535 4054/8675/2535 4057/8680/2535 +f 4060/8684/2537 4042/8654/2537 4041/8653/2534 4054/8676/2534 +f 4061/8685/2667 4051/8669/2667 4053/8673/2667 4062/8686/2667 +f 4044/8657/2667 4063/8688/2667 4051/8669/2667 4061/8685/2667 +f 4063/8687/2533 4064/8689/2533 4052/8671/2533 4051/8670/2533 +f 4056/8678/2540 4055/8677/2540 4065/8691/2540 4066/8693/2540 +f 4062/8686/2668 4053/8673/2668 4067/8694/2668 4068/8696/2668 +f 4069/8697/2669 4062/8686/2670 4068/8696/2671 4070/8699/2672 +f 4052/8672/2542 4071/8701/2542 4048/8663/2542 4047/8661/2542 +f 4064/8690/2542 4072/8703/2542 4071/8701/2542 4052/8672/2542 +f 4060/8683/2544 4059/8682/2544 4073/8704/2544 4074/8706/2544 +f 4064/8689/2545 4063/8687/2545 4075/8707/2545 4076/8709/2545 +f 4059/8682/2673 4072/8702/2673 4077/8712/2674 4073/8704/2675 +f 4061/8685/2676 4040/8651/2676 4043/8655/2664 4044/8657/2664 +f 4062/8686/2670 4069/8697/2669 4040/8651/2676 4061/8685/2676 +f 4069/8698/2523 4055/8677/2523 4041/8653/2523 4040/8652/2523 +f 4078/8713/2565 4074/8705/2565 4079/8715/2565 4080/8717/2565 +f 4075/8708/2677 4046/8660/2677 4081/8719/2677 4082/8721/2677 +f 4077/8711/2549 4076/8710/2549 4083/8722/2549 4084/8725/2549 +f 4076/8709/2678 4075/8707/2678 4082/8720/2678 4083/8724/2678 +f 4042/8654/2537 4060/8684/2537 4074/8705/2553 4078/8713/2553 +f 4072/8703/2554 4064/8690/2554 4076/8710/2554 4077/8711/2554 +f 4043/8656/2525 4042/8654/2524 4078/8713/2555 4045/8658/2555 +f 4063/8688/2679 4044/8657/2679 4046/8660/2679 4075/8708/2679 +f 4084/8726/2574 4083/8723/2574 4085/8730/2574 4086/8731/2574 +f 4083/8724/2573 4082/8720/2573 4087/8732/2573 4085/8728/2573 +f 4088/8736/2552 4084/8726/2680 4086/8731/2681 4089/8737/2558 +f 4081/8719/2682 4090/8739/2683 4091/8740/2684 4092/8741/2685 +f 4045/8658/2566 4078/8713/2566 4080/8717/2566 4090/8738/2566 +f 4074/8706/2567 4073/8704/2567 4088/8735/2567 4079/8714/2567 +f 4046/8660/2666 4045/8659/2665 4090/8739/2683 4081/8719/2682 +f 4073/8704/2675 4077/8712/2674 4084/8727/2680 4088/8735/2552 +f 4092/8741/2685 4091/8740/2684 4093/8743/2686 4094/8744/2687 +f 4095/8747/2570 4089/8737/2570 4096/8748/2570 4097/8749/2570 +f 4091/8740/2571 4098/8753/2571 4099/8754/2571 4093/8743/2571 +f 4098/8751/2572 4095/8745/2572 4097/8750/2572 4099/8755/2572 +f 4082/8721/2688 4081/8719/2688 4092/8741/2688 4087/8734/2688 +f 4080/8717/2689 4079/8715/2689 4095/8746/2689 4098/8752/2689 +f 4090/8739/2564 4080/8718/2564 4098/8753/2564 4091/8740/2564 +f 4079/8716/2563 4088/8736/2563 4089/8737/2563 4095/8747/2563 +f 4097/8749/2690 4096/8748/2690 4100/8756/2690 4101/8757/2690 +f 4093/8742/2591 4099/8755/2591 4102/8759/2591 4103/8761/2591 +f 4099/8755/2577 4097/8750/2577 4101/8758/2577 4102/8759/2577 +f 4104/8762/2691 4094/8744/2691 4105/8764/2691 4106/8765/2691 +f 4089/8737/2558 4086/8731/2681 4107/8767/2692 4096/8748/2693 +f 4085/8729/2583 4087/8733/2583 4104/8763/2583 4108/8770/2583 +f 4086/8731/2584 4085/8730/2584 4108/8769/2584 4107/8767/2584 +f 4087/8734/2694 4092/8741/2694 4094/8744/2694 4104/8762/2694 +f 4109/8771/2695 4110/8773/2695 4111/8775/2696 4112/8776/2696 +f 4101/8757/2697 4100/8756/2697 4113/8779/2697 4114/8781/2697 +f 4115/8785/2589 4116/8787/2589 4117/8789/2589 4118/8790/2589 +f 4106/8765/2698 4105/8764/2698 4119/8794/2698 4120/8796/2698 +f 4094/8744/2687 4093/8743/2686 4103/8760/2699 4105/8764/2700 +f 4096/8748/2693 4107/8767/2692 4121/8800/2701 4100/8756/2596 +f 4108/8770/2580 4104/8763/2580 4106/8766/2580 4122/8802/2580 +f 4107/8768/2579 4108/8770/2579 4122/8802/2579 4121/8801/2579 +f 4065/8691/2598 4070/8700/2598 4123/8803/2598 4124/8805/2598 +f 4067/8695/2599 4050/8667/2599 4125/8809/2599 4126/8811/2599 +f 4070/8699/2672 4068/8696/2671 4127/8812/2702 4123/8804/2703 +f 4068/8696/2704 4067/8694/2704 4126/8810/2704 4127/8812/2704 +f 4058/8681/2532 4056/8679/2532 4066/8692/2532 4128/8813/2532 +f 4055/8677/2604 4069/8698/2604 4070/8700/2604 4065/8691/2604 +f 4048/8664/2705 4058/8681/2705 4128/8813/2605 4049/8665/2706 +f 4053/8674/2607 4047/8662/2607 4050/8667/2607 4067/8695/2607 +f 4123/8804/2703 4127/8812/2702 4129/8814/2707 4130/8815/2708 +f 4127/8812/2709 4126/8810/2709 4131/8817/2709 4129/8814/2709 +f 4125/8807/2628 4132/8821/2628 4133/8822/2628 4134/8823/2628 +f 4135/8827/2627 4124/8805/2627 4136/8829/2627 4137/8832/2627 +f 4128/8813/2597 4066/8692/2597 4135/8826/2597 4138/8835/2597 +f 4049/8665/2706 4128/8813/2605 4138/8835/2614 4132/8819/2615 +f 4066/8693/2616 4065/8691/2616 4124/8805/2616 4135/8827/2616 +f 4050/8668/2617 4049/8666/2617 4132/8820/2617 4125/8808/2617 +f 4134/8823/2620 4133/8822/2620 4139/8837/2620 4140/8839/2620 +f 4137/8833/2621 4136/8830/2621 4141/8842/2621 4142/8844/2621 +f 4133/8822/2622 4143/8845/2623 4144/8846/2624 4139/8837/2625 +f 4143/8845/2640 4137/8834/2640 4142/8843/2640 4144/8846/2640 +f 4126/8811/2610 4125/8809/2610 4134/8824/2610 4131/8816/2610 +f 4124/8806/2609 4123/8804/2609 4130/8815/2609 4136/8831/2609 +f 4138/8836/2626 4135/8828/2626 4137/8834/2626 4143/8845/2626 +f 4132/8821/2615 4138/8836/2614 4143/8845/2623 4133/8822/2622 +f 4144/8846/2631 4142/8843/2631 4115/8786/2632 4145/8847/2632 +f 4141/8842/2633 4146/8848/2633 4109/8772/2634 4116/8787/2635 +f 4147/8850/2710 4140/8840/2710 4148/8852/2710 4149/8853/2710 +f 4146/8849/2711 4150/8855/2712 4110/8773/2695 4109/8771/2695 +f 4129/8814/2713 4131/8817/2713 4147/8851/2713 4150/8855/2713 +f 4130/8815/2708 4129/8814/2707 4150/8855/2712 4146/8849/2711 +f 4131/8818/2638 4134/8825/2638 4140/8840/2638 4147/8850/2638 +f 4136/8831/2639 4130/8815/2639 4146/8849/2639 4141/8841/2639 +f 4149/8853/2714 4148/8852/2714 4151/8856/2714 4152/8858/2714 +f 4105/8764/2700 4103/8760/2699 4153/8862/2715 4119/8794/2715 +f 4100/8756/2596 4121/8800/2701 4154/8865/2645 4113/8779/2645 +f 4148/8852/2643 4155/8868/2643 4156/8870/2644 4151/8856/2644 +f 4139/8837/2625 4144/8846/2624 4145/8847/2630 4155/8869/2630 +f 4142/8844/2629 4141/8842/2629 4116/8787/2629 4115/8785/2629 +f 4140/8840/2646 4139/8838/2646 4155/8868/2643 4148/8852/2643 +f 4150/8855/2716 4147/8851/2716 4149/8854/2717 4110/8773/2718 +f 4157/8873/2651 4114/8782/2651 4113/8780/2651 4154/8866/2651 +f 4120/8797/2651 4157/8873/2651 4154/8866/2651 4158/8875/2651 +f 4119/8795/2652 4153/8863/2651 4157/8874/2651 4120/8798/2651 +f 4153/8863/2651 4159/8877/2651 4114/8783/2651 4157/8874/2651 +f 4160/8879/2653 4118/8791/2653 4117/8788/2654 4112/8777/2655 +f 4152/8859/2653 4160/8879/2653 4112/8777/2655 4111/8774/2655 +f 4151/8857/2653 4156/8871/2653 4160/8880/2653 4152/8860/2653 +f 4156/8871/2653 4161/8881/2653 4118/8792/2653 4160/8880/2653 +f 4121/8801/2656 4122/8802/2656 4158/8876/2656 4154/8867/2656 +f 4155/8869/2630 4145/8847/2630 4161/8882/2657 4156/8872/2657 +f 4103/8761/2658 4102/8759/2658 4159/8878/2658 4153/8864/2658 +f 4110/8773/2718 4149/8854/2717 4152/8861/2719 4111/8775/2719 +f 4122/8802/2660 4106/8766/2660 4120/8799/2660 4158/8876/2660 +f 4145/8847/2632 4115/8786/2632 4118/8793/2661 4161/8882/2661 +f 4102/8759/2662 4101/8758/2662 4114/8784/2662 4159/8878/2662 +f 4116/8787/2635 4109/8772/2634 4112/8778/2663 4117/8789/2663 +f 3906/8403/2509 3905/8400/2508 4168/8893/2720 4170/8898/2721 +f 4170/8898/2721 4168/8893/2720 4169/8895/2522 4171/8900/2521 +f 3896/8381/2514 3911/8413/2513 4164/8885/2722 4166/8890/2723 +f 4166/8890/2723 4164/8885/2722 4165/8887/2518 4167/8892/2517 +f 3916/8427/2511 4163/8884/2511 4168/8894/2511 3905/8401/2511 +f 4163/8884/2511 4162/8883/2511 4169/8896/2511 4168/8894/2511 +f 3911/8414/2511 3910/8412/2511 4162/8883/2511 4164/8886/2511 +f 4164/8886/2511 4162/8883/2511 4163/8884/2511 4165/8888/2511 +o Chair.010 +v 6.775808 0.585120 6.577875 +v 6.775808 0.599689 6.577875 +v 6.798890 0.599689 6.533952 +v 6.985870 0.599689 6.178140 +v 7.008952 0.599689 6.134217 +v 7.008952 0.585120 6.134217 +v 6.985870 0.585120 6.178140 +v 6.798890 0.585120 6.533952 +v 7.349434 0.599689 6.313142 +v 7.349434 0.585120 6.313142 +v 7.349434 0.570550 6.313142 +v 7.328213 0.570550 6.353524 +v 6.985870 0.570550 6.178140 +v 7.008952 0.570550 6.134217 +v 7.116290 0.585120 6.756800 +v 7.116290 0.599689 6.756800 +v 7.137511 0.585120 6.716417 +v 7.137511 0.599689 6.716417 +v 7.116290 0.570550 6.756800 +v 7.137511 0.570550 6.716417 +v 6.775808 0.570550 6.577875 +v 6.798890 0.570550 6.533952 +v 7.328213 0.585120 6.353524 +v 7.328213 0.599689 6.353524 +v 7.179630 0.607798 6.221457 +v 7.182347 0.613389 6.216287 +v 7.066308 0.613389 6.155309 +v 7.063591 0.607798 6.160479 +v 7.063673 0.599714 6.160322 +v 7.034913 0.607688 6.145409 +v 7.037309 0.600038 6.146468 +v 7.188790 0.599641 6.204025 +v 7.188709 0.607725 6.204181 +v 7.304746 0.607725 6.265159 +v 7.304828 0.599641 6.265003 +v 7.302145 0.613566 6.270109 +v 7.330385 0.609146 6.284949 +v 7.330917 0.603793 6.278912 +v 7.182313 0.593873 6.216352 +v 7.186073 0.594049 6.209196 +v 7.302111 0.594049 6.270174 +v 7.298350 0.593873 6.277330 +v 7.186107 0.613566 6.209131 +v 7.298384 0.613389 6.277265 +v 7.072670 0.607725 6.143202 +v 7.070069 0.613566 6.148152 +v 7.179712 0.599714 6.221301 +v 7.295749 0.599714 6.282279 +v 7.066275 0.593873 6.155373 +v 7.070035 0.594049 6.148217 +v 7.328136 0.596384 6.277252 +v 7.323439 0.591259 6.281382 +v 7.326561 0.608985 6.292073 +v 7.319616 0.591098 6.288505 +v 7.319084 0.596451 6.294541 +v 7.072752 0.599641 6.143046 +v 7.044013 0.607619 6.128142 +v 7.039740 0.613146 6.132214 +v 7.041582 0.594511 6.142397 +v 7.045291 0.594678 6.135214 +v 7.046408 0.599969 6.129203 +v 7.295667 0.607798 6.282436 +v 7.012268 0.590715 6.133308 +v 7.018033 0.586095 6.130022 +v 7.021698 0.586235 6.122816 +v 7.021386 0.590657 6.116053 +v 7.016925 0.597051 6.113908 +v 7.036030 0.612979 6.139397 +v 7.000373 0.572705 6.105011 +v 6.994317 0.577156 6.102027 +v 7.007806 0.597109 6.131164 +v 6.985184 0.577196 6.119275 +v 6.991240 0.572746 6.122258 +v 7.011160 0.601670 6.117195 +v 6.987399 0.580372 6.104709 +v 7.007494 0.601531 6.124401 +v 6.983768 0.580275 6.111933 +v 6.969475 0.550090 6.111021 +v 6.976485 0.548061 6.114504 +v 6.978617 0.550072 6.093777 +v 6.971011 0.551538 6.096097 +v 6.967402 0.551494 6.103333 +v 6.998158 0.569530 6.119577 +v 7.001788 0.569627 6.112353 +v 6.957181 0.515533 6.088830 +v 6.953573 0.515494 6.096066 +v 6.984091 0.546594 6.112185 +v 6.962749 0.512489 6.107286 +v 6.970394 0.511205 6.104987 +v 6.985626 0.548042 6.097261 +v 6.987700 0.546639 6.104950 +v 6.974002 0.511244 6.097751 +v 6.971890 0.512473 6.090043 +v 7.383489 0.519139 6.328587 +v 7.376464 0.518192 6.324695 +v 7.412850 0.166785 6.343817 +v 7.419876 0.167731 6.347708 +v 6.964828 0.514249 6.086530 +v 6.888094 0.171229 6.046207 +v 6.880448 0.172512 6.048506 +v 7.395037 0.519815 6.318925 +v 7.391122 0.519794 6.325999 +v 7.427508 0.168386 6.345121 +v 7.431424 0.168407 6.338046 +v 6.886015 0.169468 6.066963 +v 6.893661 0.168185 6.064664 +v 6.955685 0.514265 6.103774 +v 7.357777 0.595312 6.299344 +v 7.356587 0.591341 6.292402 +v 7.321864 0.603860 6.296203 +v 7.347555 0.591390 6.309703 +v 7.353902 0.595192 6.306440 +v 7.345074 0.582043 6.292751 +v 7.341199 0.581923 6.299847 +v 7.342390 0.585894 6.306789 +v 7.366765 0.572969 6.319798 +v 7.374155 0.574813 6.317083 +v 7.361718 0.568436 6.301498 +v 7.357811 0.568378 6.308577 +v 7.360091 0.570304 6.316091 +v 7.351420 0.585844 6.289488 +v 7.371167 0.540968 6.315596 +v 7.373617 0.542217 6.323199 +v 7.369109 0.570280 6.298783 +v 7.382633 0.542202 6.305890 +v 7.375081 0.541005 6.308520 +v 7.378063 0.574871 6.310005 +v 7.388078 0.545144 6.324399 +v 7.391990 0.545181 6.317324 +v 7.375782 0.572945 6.302489 +v 7.389542 0.543932 6.309720 +v 7.392503 0.519130 6.311276 +v 7.385479 0.518184 6.307386 +v 7.380526 0.543947 6.327029 +v 7.373930 0.517508 6.317047 +v 7.377846 0.517529 6.309973 +v 7.414233 0.166121 6.329094 +v 7.410317 0.166101 6.336169 +v 6.878952 0.171245 6.063450 +v 7.421865 0.166776 6.326507 +v 6.895157 0.169452 6.049719 +v 6.887054 0.170349 6.056584 +v 6.897269 0.168224 6.057427 +v 6.876840 0.172474 6.055742 +v 7.420871 0.167254 6.337107 +v 7.428890 0.167723 6.330398 +v 6.936086 0.607798 6.684905 +v 6.938803 0.613389 6.679735 +v 6.822765 0.613389 6.618756 +v 6.820047 0.607798 6.623927 +v 6.820129 0.599714 6.623771 +v 6.791369 0.607688 6.608856 +v 6.793765 0.600038 6.609916 +v 7.058567 0.594049 6.733622 +v 7.061284 0.599641 6.728451 +v 7.084593 0.596384 6.740700 +v 7.079895 0.591259 6.744830 +v 6.938769 0.593873 6.679800 +v 6.942530 0.594049 6.672643 +v 7.054806 0.593873 6.740777 +v 6.942564 0.613566 6.672579 +v 7.054841 0.613389 6.740713 +v 7.058601 0.613566 6.733557 +v 6.945165 0.607725 6.667628 +v 7.061202 0.607725 6.728607 +v 6.829126 0.607725 6.606650 +v 6.826525 0.613566 6.611600 +v 6.936168 0.599714 6.684750 +v 7.052205 0.599714 6.745728 +v 6.822731 0.593873 6.618821 +v 6.826491 0.594049 6.611665 +v 7.083017 0.608985 6.755520 +v 7.086841 0.609146 6.748397 +v 7.076072 0.591098 6.751953 +v 7.075539 0.596451 6.757990 +v 7.052123 0.607798 6.745883 +v 7.078320 0.603860 6.759650 +v 6.945247 0.599641 6.667473 +v 6.829208 0.599641 6.606494 +v 6.800468 0.607619 6.591590 +v 6.796196 0.613146 6.595662 +v 6.798038 0.594511 6.605844 +v 6.801748 0.594678 6.598662 +v 6.802865 0.599969 6.592650 +v 6.792486 0.612979 6.602844 +v 6.767615 0.601670 6.580643 +v 6.763950 0.601531 6.587849 +v 6.768723 0.590715 6.596756 +v 6.774488 0.586095 6.593469 +v 6.778154 0.586235 6.586263 +v 6.777842 0.590657 6.579501 +v 6.758244 0.569627 6.575800 +v 6.756829 0.572705 6.568459 +v 6.754613 0.569530 6.583025 +v 6.773381 0.597051 6.577355 +v 6.750772 0.577156 6.565475 +v 6.764262 0.597109 6.594611 +v 6.741640 0.577196 6.582723 +v 6.747696 0.572746 6.585707 +v 6.725932 0.550090 6.574468 +v 6.732941 0.548061 6.577953 +v 6.743855 0.580372 6.568157 +v 6.735074 0.550072 6.557225 +v 6.727467 0.551538 6.559545 +v 6.740225 0.580275 6.575381 +v 6.723858 0.551494 6.566780 +v 6.721282 0.514249 6.549977 +v 6.713637 0.515533 6.552277 +v 6.710029 0.515494 6.559513 +v 6.712141 0.514265 6.567221 +v 6.740548 0.546594 6.575633 +v 6.719204 0.512489 6.570735 +v 6.726850 0.511205 6.568435 +v 6.742082 0.548042 6.560709 +v 6.744157 0.546639 6.568398 +v 7.139946 0.519139 6.792034 +v 7.132920 0.518192 6.788144 +v 7.169307 0.166785 6.807265 +v 7.176332 0.167731 6.811156 +v 6.644551 0.171229 6.509655 +v 6.636905 0.172512 6.511953 +v 7.151494 0.519815 6.782372 +v 7.147578 0.519794 6.789447 +v 7.183965 0.168386 6.808568 +v 7.187881 0.168407 6.801494 +v 6.642471 0.169468 6.530411 +v 6.650117 0.168185 6.528111 +v 6.728346 0.512473 6.553491 +v 6.730458 0.511244 6.561199 +v 7.104011 0.591390 6.773150 +v 7.110358 0.595192 6.769888 +v 7.101530 0.582043 6.756199 +v 7.097655 0.581923 6.763295 +v 7.098845 0.585894 6.770237 +v 7.087374 0.603793 6.742360 +v 7.116547 0.570304 6.779540 +v 7.123221 0.572969 6.783246 +v 7.114267 0.568378 6.772024 +v 7.107876 0.585844 6.752935 +v 7.125565 0.570280 6.762231 +v 7.118175 0.568436 6.764946 +v 7.114233 0.595312 6.762792 +v 7.130611 0.574813 6.780531 +v 7.134520 0.574871 6.773452 +v 7.113043 0.591341 6.755849 +v 7.139089 0.542202 6.769338 +v 7.131537 0.541005 6.771967 +v 7.144534 0.545144 6.787847 +v 7.148447 0.545181 6.780771 +v 7.132239 0.572945 6.765937 +v 7.145998 0.543932 6.773167 +v 7.148960 0.519130 6.774724 +v 7.136981 0.543947 6.790477 +v 7.127624 0.540968 6.779044 +v 7.134302 0.517529 6.773421 +v 7.130387 0.517508 6.780495 +v 7.130073 0.542217 6.786647 +v 7.170689 0.166121 6.792542 +v 7.166774 0.166101 6.799617 +v 6.635408 0.171245 6.526897 +v 6.651613 0.169452 6.513167 +v 7.141935 0.518184 6.770833 +v 7.178322 0.166776 6.789955 +v 6.643510 0.170349 6.520033 +v 6.653725 0.168224 6.520875 +v 6.633296 0.172474 6.519189 +v 7.177326 0.167254 6.800555 +v 7.185347 0.167723 6.793845 +v 7.201078 0.566423 6.595453 +v 7.264645 0.566423 6.474489 +v 7.201078 0.580992 6.595453 +v 7.264645 0.580992 6.474489 +v 6.861217 0.580992 6.415348 +v 6.923544 0.580992 6.296744 +v 7.264645 0.551853 6.474489 +v 7.201078 0.551853 6.595453 +v 6.923543 0.551853 6.296744 +v 6.861217 0.551853 6.415348 +vn -0.2160 -0.0000 0.9764 +vn -0.6752 -0.7071 0.2100 +vn -0.8852 -0.0000 -0.4652 +vn -0.2100 -0.7071 -0.6752 +vn 0.0150 0.6667 -0.7452 +vn 0.4652 -0.0000 -0.8852 +vn -0.0000 -1.0000 -0.0000 +vn 0.0313 -0.9977 -0.0605 +vn 0.0317 -0.9976 -0.0613 +vn -0.4652 -0.0000 0.8852 +vn 0.8852 -0.0000 0.4652 +vn -0.0000 1.0000 -0.0000 +vn 0.0321 0.9977 -0.0601 +vn 0.0325 0.9976 -0.0609 +vn -0.0317 0.9976 0.0613 +vn -0.0313 0.9977 0.0605 +vn -0.0314 0.9977 0.0608 +vn -0.0316 0.9976 0.0611 +vn -0.0325 -0.9976 0.0609 +vn -0.0321 -0.9977 0.0601 +vn -0.0323 -0.9977 0.0604 +vn -0.0324 -0.9976 0.0606 +vn -0.3217 0.7224 0.6121 +vn -0.3220 0.7268 0.6066 +vn -0.3220 0.7269 0.6066 +vn -0.4651 -0.0225 0.8850 +vn -0.4648 -0.0215 0.8851 +vn -0.4593 -0.0204 0.8880 +vn 0.4651 0.0218 -0.8850 +vn 0.4663 0.0219 -0.8844 +vn 0.4664 0.0219 -0.8843 +vn 0.4156 0.6937 -0.5882 +vn 0.0101 -0.9998 -0.0193 +vn -0.0102 0.9998 0.0194 +vn 0.3360 0.6915 -0.6394 +vn 0.3315 0.6962 -0.6367 +vn -0.0154 0.9997 0.0163 +vn -0.3360 -0.6915 0.6395 +vn 0.2404 -0.7257 -0.6446 +vn 0.1115 0.9903 0.0826 +vn -0.4058 -0.6955 0.5930 +vn 0.3217 -0.7223 -0.6122 +vn 0.4651 0.0221 -0.8850 +vn 0.3269 0.7008 -0.6340 +vn -0.0102 -0.9995 -0.0292 +vn 0.4590 0.0214 -0.8882 +vn 0.4647 0.0224 -0.8852 +vn -0.1400 -0.6683 0.7306 +vn 0.5161 -0.6972 -0.4976 +vn 0.2770 -0.9532 0.1216 +vn 0.4533 0.0184 -0.8912 +vn 0.4582 0.0214 -0.8886 +vn -0.0206 0.9997 0.0132 +vn 0.3058 -0.7326 -0.6081 +vn -0.3223 0.7313 0.6011 +vn -0.3415 -0.7022 0.6247 +vn 0.4485 0.0132 -0.8937 +vn 0.4522 0.0177 -0.8917 +vn -0.4536 -0.0175 0.8910 +vn -0.4585 -0.0204 0.8884 +vn -0.4530 -0.0172 0.8914 +vn -0.4491 -0.0124 0.8934 +vn -0.0517 0.5509 -0.8330 +vn -0.7174 0.5748 0.3936 +vn -0.3062 0.9421 -0.1369 +vn -0.5314 0.6901 0.4913 +vn 0.1266 0.6614 -0.7393 +vn -0.4488 -0.0119 0.8936 +vn -0.4475 -0.0090 0.8942 +vn -0.1888 0.3812 -0.9050 +vn -0.8605 0.3978 0.3184 +vn -0.7546 0.5403 -0.3725 +vn 0.5354 -0.8044 0.2575 +vn 0.7049 -0.5868 -0.3984 +vn 0.0410 -0.5625 0.8258 +vn -0.5599 0.7833 -0.2703 +vn -0.8219 0.3980 -0.4076 +vn 0.2318 -0.2790 0.9319 +vn 0.9094 -0.2912 -0.2970 +vn 0.8209 -0.4005 0.4071 +vn 0.4470 0.0092 -0.8945 +vn 0.4482 0.0122 -0.8938 +vn 0.7374 -0.5692 0.3636 +vn 0.8520 -0.4135 -0.3211 +vn 0.1820 -0.3964 0.8999 +vn -0.4843 -0.0027 0.8749 +vn -0.4843 -0.0025 0.8749 +vn -0.2576 0.1694 -0.9513 +vn 0.8689 0.1162 0.4812 +vn 0.2576 -0.1695 0.9513 +vn -0.9098 0.2899 0.2969 +vn -0.2322 0.2777 -0.9322 +vn -0.4479 -0.0079 0.8940 +vn -0.4471 -0.0056 0.8945 +vn 0.4463 0.0054 -0.8949 +vn 0.4467 0.0070 -0.8946 +vn 0.5804 0.6472 -0.4943 +vn -0.0527 0.6748 0.7361 +vn -0.3024 -0.9356 -0.1822 +vn -0.4678 -0.0216 0.8836 +vn -0.4724 -0.0208 0.8812 +vn -0.4776 -0.0183 0.8784 +vn -0.4732 -0.0205 0.8807 +vn -0.2306 0.7239 0.6502 +vn 0.4679 0.0227 -0.8835 +vn 0.4727 0.0218 -0.8810 +vn -0.0918 -0.9932 -0.0722 +vn -0.4676 -0.0222 0.8837 +vn 0.1242 0.5630 0.8171 +vn -0.5093 -0.8103 -0.2898 +vn -0.4819 -0.0112 0.8762 +vn -0.4786 -0.0173 0.8779 +vn -0.7060 -0.5801 0.4062 +vn 0.4734 0.0211 -0.8806 +vn 0.4779 0.0187 -0.8782 +vn 0.3513 0.9128 0.2082 +vn 0.0752 -0.6896 -0.7203 +vn -0.5555 -0.6617 0.5036 +vn -0.8762 -0.3366 0.3449 +vn -0.2511 -0.3512 -0.9020 +vn 0.7721 0.4682 0.4298 +vn 0.4822 0.0114 -0.8760 +vn 0.4789 0.0175 -0.8777 +vn 0.4827 0.0104 -0.8757 +vn 0.4844 0.0032 -0.8749 +vn 0.7410 0.5405 -0.3984 +vn 0.5794 0.7463 0.3275 +vn -0.0966 -0.6033 -0.7916 +vn 0.8669 0.1344 0.4801 +vn 0.4842 0.0027 -0.8749 +vn 0.9429 0.0928 -0.3198 +vn 0.9435 0.0866 -0.3199 +vn 0.3128 0.0969 0.9449 +vn 0.3131 0.0905 0.9454 +vn 0.3131 0.0904 0.9454 +vn -0.4835 -0.0030 0.8754 +vn -0.4819 -0.0100 0.8762 +vn -0.7655 -0.4821 -0.4262 +vn 0.2535 0.3437 0.9042 +vn 0.8792 0.3294 -0.3442 +vn -0.8688 -0.1162 -0.4813 +vn -0.4463 -0.0053 0.8948 +vn -0.3132 -0.0898 -0.9454 +vn -0.3134 -0.0839 -0.9459 +vn 0.4464 0.0053 -0.8948 +vn -0.3130 -0.0956 -0.9449 +vn -0.9430 -0.0916 0.3198 +vn -0.9436 -0.0860 0.3199 +vn -0.9436 -0.0859 0.3199 +vn -0.8671 -0.1319 -0.4804 +vn -0.1945 -0.9756 -0.1022 +vn -0.1945 -0.9756 -0.1023 +vn 0.1037 -0.9931 0.0545 +vn 0.1037 -0.9931 0.0544 +vn 0.1036 -0.9931 0.0544 +vn 0.9417 -0.1770 -0.2862 +vn 0.4842 0.0025 -0.8749 +vn -0.9417 0.1770 0.2862 +vn -0.9440 -0.0803 0.3199 +vn 0.8682 -0.2449 0.4316 +vn 0.9440 0.0803 -0.3199 +vn -0.8682 0.2449 -0.4316 +vn 0.3134 0.0839 0.9459 +vn -0.4651 -0.0221 0.8850 +vn -0.4647 -0.0224 0.8852 +vn -0.4590 -0.0214 0.8882 +vn -0.3360 -0.6915 0.6394 +vn -0.4057 -0.6956 0.5929 +vn -0.4663 -0.0219 0.8844 +vn -0.4664 -0.0219 0.8843 +vn -0.4726 -0.0218 0.8810 +vn -0.4681 -0.0228 0.8834 +vn 0.4651 0.0224 -0.8850 +vn 0.4591 0.0214 -0.8881 +vn 0.4648 0.0224 -0.8851 +vn -0.4651 -0.0218 0.8850 +vn -0.1399 -0.6683 0.7306 +vn 0.2769 -0.9532 0.1216 +vn -0.3415 -0.7023 0.6247 +vn 0.4531 0.0183 -0.8913 +vn 0.4485 0.0133 -0.8937 +vn -0.4531 -0.0183 0.8912 +vn -0.4582 -0.0214 0.8886 +vn -0.4523 -0.0178 0.8917 +vn -0.4484 -0.0131 0.8937 +vn -0.4482 -0.0122 0.8939 +vn -0.4471 -0.0094 0.8944 +vn 0.0411 -0.5626 0.8257 +vn -0.5599 0.7833 -0.2702 +vn -0.2323 0.2777 -0.9322 +vn 0.2319 -0.2790 0.9319 +vn 0.4470 0.0091 -0.8945 +vn 0.4482 0.0123 -0.8938 +vn 0.1821 -0.3964 0.8998 +vn -0.4842 -0.0027 0.8750 +vn -0.4842 -0.0025 0.8749 +vn -0.2576 0.1695 -0.9513 +vn 0.2577 -0.1695 0.9513 +vn -0.4467 -0.0070 0.8946 +vn -0.4460 -0.0058 0.8950 +vn 0.4463 0.0055 -0.8949 +vn -0.4779 -0.0187 0.8782 +vn -0.4734 -0.0210 0.8806 +vn -0.5555 -0.6618 0.5035 +vn 0.4676 0.0221 -0.8837 +vn 0.4726 0.0218 -0.8810 +vn -0.4822 -0.0114 0.8760 +vn -0.4789 -0.0176 0.8777 +vn -0.7060 -0.5802 0.4061 +vn -0.8672 -0.1319 -0.4803 +vn -0.4827 -0.0104 0.8757 +vn -0.4844 -0.0032 0.8749 +vn -0.8762 -0.3367 0.3447 +vn -0.8689 -0.1162 -0.4812 +vn -0.4464 -0.0053 0.8948 +vn -0.9431 -0.0916 0.3196 +vn -0.9436 -0.0860 0.3197 +vn -0.9436 -0.0859 0.3197 +vn -0.9441 -0.0803 0.3198 +vn 0.0316 -0.9976 -0.0611 +vn 0.0314 -0.9977 -0.0608 +vn 0.0324 0.9976 -0.0606 +vn 0.0323 0.9977 -0.0604 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.973130 0.033128 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.677629 0.482142 +vt 0.409642 -0.009898 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.669677 0.481452 +vt 0.240570 0.058726 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +vt 0.296927 -0.019617 +vt 0.353285 -0.019617 +vt 0.470812 0.481452 +vt 0.296927 0.014692 +vt 0.271947 0.481452 +vt 0.353285 0.014692 +vt -0.849112 0.025953 +vt 0.468872 0.000137 +vt -0.911121 0.025955 +vt 0.273887 0.000137 +vt 0.475153 0.482142 +vt 0.353285 -0.053929 +vt 0.272677 0.482143 +vt 0.296927 -0.053929 +vt -0.911121 -0.024667 +vt 0.473178 0.006015 +vt -0.849112 -0.024667 +vt 0.274652 0.006015 +s 1 +usemtl Material.073 +f 4172/8902/2724 4173/8904/2725 4174/8907/2726 4444/9416/2726 4445/9418/2726 4175/8909/2726 4176/8911/2727 4177/8915/2728 4178/8916/2726 4179/8917/2726 +f 4177/8914/2728 4176/8912/2727 4180/8919/2729 4181/8922/2729 +f 4182/8924/2730 4183/8927/2731 4184/8930/2732 4185/8931/2730 +f 4186/8935/2733 4187/8936/2733 4173/8905/2725 4172/8901/2724 +f 4187/8937/2734 4186/8934/2734 4188/8939/2734 4189/8941/2734 +f 4190/8942/2734 4191/8945/2734 4188/8939/2734 4186/8934/2734 +f 4190/8943/2733 4186/8935/2733 4172/8901/2724 4192/8947/2733 +f 4185/8932/2729 4177/8914/2728 4181/8922/2729 4182/8925/2729 +f 4192/8948/2726 4172/8902/2726 4179/8917/2726 4178/8916/2726 4177/8915/2726 4185/8933/2726 4184/8929/2726 4448/9424/2726 4449/9426/2726 4193/8951/2726 +f 4185/8933/2726 4184/8929/2726 4178/8916/2726 4177/8915/2726 +f 4179/8918/2734 4172/8903/2734 4192/8949/2734 4193/8952/2734 +f 4443/9415/2734 4441/9411/2734 4194/8954/2734 4195/8955/2734 +f 4181/8923/2734 4180/8920/2734 4195/8955/2734 4194/8954/2734 +f 4440/9410/2734 4188/8939/2734 4191/8945/2734 4447/9423/2734 +f 4183/8928/2734 4182/8926/2734 4181/8923/2734 4194/8954/2734 +f 4187/8938/2735 4189/8940/2736 4174/8908/2737 4173/8906/2735 +f 4175/8910/2738 4195/8956/2739 4180/8921/2735 4176/8913/2735 +f 4445/9419/2740 4443/9414/2741 4195/8956/2739 4175/8910/2738 +f 4193/8953/2742 4191/8946/2743 4190/8944/2730 4192/8950/2730 +f 4449/9427/2744 4447/9422/2745 4191/8946/2743 4193/8953/2742 +f 4196/8957/2746 4197/8958/2746 4198/8959/2747 4199/8961/2748 +f 4200/8962/2749 4199/8960/2749 4201/8965/2750 4202/8967/2751 +f 4203/8969/2752 4204/8970/2752 4205/8971/2753 4206/8973/2754 +f 4205/8971/2755 4207/8974/2755 4208/8976/2755 4209/8978/2755 +f 4210/8980/2756 4211/8981/2756 4212/8982/2756 4213/8984/2756 +f 4214/8986/2757 4197/8958/2757 4215/8987/2757 4207/8975/2757 +f 4204/8970/2758 4214/8985/2758 4207/8974/2758 4205/8971/2758 +f 4216/8988/2759 4217/8989/2759 4214/8985/2758 4204/8970/2758 +f 4217/8990/2760 4198/8959/2760 4197/8958/2757 4214/8986/2757 +f 4218/8991/2761 4210/8979/2761 4213/8983/2761 4219/8992/2761 +f 4200/8963/2761 4220/8995/2761 4210/8979/2761 4218/8991/2761 +f 4220/8994/2756 4221/8996/2756 4211/8981/2756 4210/8980/2756 +f 4212/8982/2762 4206/8972/2762 4222/8998/2762 4223/8999/2762 +f 4207/8975/2763 4215/8987/2763 4224/9000/2763 4208/8977/2763 +f 4219/8992/2764 4213/8983/2764 4225/9002/2764 4226/9004/2764 +f 4211/8981/2765 4203/8968/2765 4206/8972/2765 4212/8982/2765 +f 4221/8996/2765 4227/9006/2765 4203/8968/2765 4211/8981/2765 +f 4227/9005/2766 4216/8988/2766 4204/8970/2752 4203/8969/2752 +f 4217/8989/2759 4216/8988/2759 4228/9007/2767 4229/9009/2767 +f 4221/8996/2768 4220/8994/2768 4230/9010/2768 4231/9012/2768 +f 4216/8988/2766 4227/9005/2766 4232/9013/2769 4228/9007/2770 +f 4233/9015/2746 4215/8987/2746 4197/8958/2746 4196/8957/2746 +f 4230/9011/2771 4202/8966/2771 4234/9018/2771 4235/9020/2771 +f 4232/9014/2772 4231/9012/2772 4236/9021/2772 4237/9023/2772 +f 4231/9012/2773 4230/9010/2773 4235/9019/2773 4236/9021/2773 +f 4228/9007/2770 4232/9013/2769 4237/9024/2774 4238/9025/2775 +f 4198/8959/2760 4217/8990/2760 4229/9008/2776 4239/9026/2776 +f 4227/9006/2777 4221/8996/2777 4231/9012/2777 4232/9014/2777 +f 4199/8961/2748 4198/8959/2747 4239/9026/2778 4201/8964/2778 +f 4220/8995/2779 4200/8963/2779 4202/8966/2779 4230/9011/2779 +f 4238/9025/2775 4237/9024/2774 4240/9027/2780 4241/9028/2781 +f 4234/9018/2782 4242/9029/2783 4243/9032/2784 4244/9033/2785 +f 4245/9034/2786 4238/9025/2786 4241/9028/2786 4246/9036/2786 +f 4242/9029/2787 4247/9039/2787 4248/9041/2787 4243/9032/2787 +f 4239/9026/2788 4229/9008/2788 4245/9035/2788 4247/9040/2788 +f 4201/8964/2789 4239/9026/2789 4247/9040/2789 4242/9030/2789 +f 4229/9009/2790 4228/9007/2790 4238/9025/2790 4245/9034/2790 +f 4202/8967/2751 4201/8965/2750 4242/9031/2783 4234/9017/2782 +f 4244/9033/2785 4243/9032/2784 4249/9045/2791 4250/9046/2792 +f 4246/9036/2793 4241/9028/2793 4251/9047/2793 4252/9049/2793 +f 4243/9032/2794 4248/9041/2794 4253/9050/2794 4249/9045/2794 +f 4248/9042/2795 4246/9037/2795 4252/9048/2795 4253/9051/2795 +f 4236/9021/2796 4235/9019/2796 4254/9052/2796 4255/9055/2796 +f 4237/9024/2797 4236/9022/2797 4255/9057/2797 4240/9027/2797 +f 4235/9020/2798 4234/9018/2798 4244/9033/2798 4254/9054/2798 +f 4247/9040/2799 4245/9035/2799 4246/9038/2799 4248/9043/2799 +f 4253/9051/2800 4252/9048/2800 4256/9059/2800 4257/9060/2800 +f 4258/9062/2801 4250/9046/2801 4259/9063/2801 4260/9064/2801 +f 4261/9066/2802 4262/9068/2802 4263/9070/2802 4264/9072/2802 +f 4262/9068/2803 4258/9061/2803 4260/9065/2803 4263/9070/2803 +f 4241/9028/2781 4240/9027/2780 4261/9067/2804 4251/9047/2805 +f 4255/9056/2806 4254/9053/2806 4258/9061/2806 4262/9068/2806 +f 4240/9027/2807 4255/9057/2807 4262/9069/2807 4261/9067/2807 +f 4254/9054/2808 4244/9033/2808 4250/9046/2808 4258/9062/2808 +f 4265/9073/2809 4266/9075/2809 4267/9077/2810 4268/9078/2810 +f 4256/9058/2811 4269/9081/2811 4270/9082/2811 4271/9084/2811 +f 4272/9087/2812 4273/9089/2812 4274/9091/2812 4275/9092/2812 +f 4260/9064/2813 4259/9063/2813 4276/9095/2813 4277/9097/2813 +f 4249/9044/2814 4253/9051/2814 4257/9060/2814 4278/9101/2814 +f 4252/9049/2815 4251/9047/2815 4269/9081/2815 4256/9058/2815 +f 4250/9046/2792 4249/9045/2791 4278/9100/2816 4259/9063/2817 +f 4251/9047/2805 4261/9067/2804 4264/9071/2818 4269/9081/2819 +f 4209/8978/2820 4208/8976/2820 4279/9102/2820 4280/9104/2820 +f 4224/9000/2821 4281/9105/2821 4282/9107/2821 4283/9111/2821 +f 4225/9001/2822 4223/8999/2822 4284/9112/2822 4285/9114/2822 +f 4281/9106/2823 4226/9003/2824 4286/9116/2825 4282/9108/2826 +f 4215/8987/2827 4233/9015/2827 4281/9105/2827 4224/9000/2827 +f 4206/8973/2754 4205/8971/2753 4209/8978/2828 4222/8997/2829 +f 4213/8984/2830 4212/8982/2830 4223/8999/2830 4225/9001/2830 +f 4233/9016/2831 4219/8993/2831 4226/9003/2824 4281/9106/2823 +f 4283/9110/2832 4282/9109/2832 4287/9118/2832 4288/9121/2832 +f 4285/9114/2833 4284/9112/2833 4289/9122/2833 4290/9125/2833 +f 4282/9109/2826 4286/9117/2825 4291/9128/2834 4287/9118/2835 +f 4286/9117/2836 4285/9115/2836 4290/9126/2836 4291/9128/2836 +f 4222/8997/2829 4209/8978/2828 4280/9104/2837 4292/9130/2838 +f 4208/8977/2839 4224/9000/2839 4283/9111/2839 4279/9103/2839 +f 4223/8999/2840 4222/8998/2840 4292/9129/2840 4284/9112/2840 +f 4226/9004/2841 4225/9002/2841 4285/9115/2841 4286/9117/2841 +f 4291/9128/2842 4290/9126/2842 4293/9131/2842 4294/9133/2842 +f 4289/9123/2843 4295/9134/2843 4296/9135/2843 4297/9137/2843 +f 4298/9139/2844 4288/9119/2844 4299/9142/2844 4300/9144/2844 +f 4295/9134/2845 4301/9146/2846 4302/9147/2847 4296/9135/2848 +f 4280/9104/2849 4279/9102/2849 4298/9141/2849 4301/9146/2849 +f 4292/9130/2838 4280/9104/2837 4301/9146/2846 4295/9134/2845 +f 4279/9103/2850 4283/9111/2850 4288/9120/2850 4298/9140/2850 +f 4284/9113/2851 4292/9130/2851 4295/9134/2851 4289/9123/2851 +f 4300/9144/2852 4299/9142/2852 4273/9089/2852 4272/9087/2852 +f 4296/9135/2848 4302/9147/2847 4303/9148/2853 4304/9150/2853 +f 4302/9147/2854 4300/9145/2854 4272/9088/2855 4303/9148/2855 +f 4299/9142/2856 4305/9151/2856 4265/9074/2857 4273/9089/2858 +f 4287/9118/2835 4291/9128/2834 4294/9133/2859 4305/9152/2860 +f 4290/9127/2861 4289/9124/2861 4297/9138/2861 4293/9132/2861 +f 4288/9121/2862 4287/9118/2862 4305/9152/2862 4299/9143/2862 +f 4301/9146/2863 4298/9141/2863 4300/9145/2863 4302/9147/2863 +f 4306/9153/2864 4307/9155/2864 4308/9156/2864 4309/9158/2864 +f 4259/9063/2817 4278/9100/2816 4310/9161/2865 4276/9095/2865 +f 4307/9155/2866 4304/9149/2866 4311/9164/2867 4308/9156/2867 +f 4269/9081/2819 4264/9071/2818 4312/9167/2868 4270/9082/2868 +f 4297/9138/2869 4296/9136/2869 4304/9149/2866 4307/9155/2866 +f 4294/9133/2870 4293/9131/2870 4306/9154/2871 4266/9075/2872 +f 4305/9152/2860 4294/9133/2859 4266/9075/2809 4265/9073/2809 +f 4293/9132/2873 4297/9138/2873 4307/9155/2873 4306/9153/2873 +f 4313/9170/2874 4271/9085/2874 4270/9083/2874 4312/9168/2874 +f 4277/9098/2874 4313/9170/2874 4312/9168/2874 4314/9171/2874 +f 4276/9096/2875 4310/9162/2874 4313/9170/2874 4277/9098/2874 +f 4310/9162/2874 4315/9173/2874 4271/9085/2874 4313/9170/2874 +f 4316/9175/2876 4275/9093/2876 4274/9090/2877 4268/9079/2878 +f 4309/9159/2876 4316/9175/2876 4268/9079/2878 4267/9076/2878 +f 4308/9157/2876 4311/9165/2876 4316/9175/2876 4309/9159/2876 +f 4311/9165/2876 4317/9176/2876 4275/9093/2876 4316/9175/2876 +f 4264/9072/2879 4263/9070/2879 4314/9172/2879 4312/9169/2879 +f 4304/9150/2853 4303/9148/2853 4317/9177/2880 4311/9166/2880 +f 4278/9101/2881 4257/9060/2881 4315/9174/2881 4310/9163/2881 +f 4266/9075/2872 4306/9154/2871 4309/9160/2882 4267/9077/2882 +f 4263/9070/2883 4260/9065/2883 4277/9099/2883 4314/9172/2883 +f 4303/9148/2855 4272/9088/2855 4275/9094/2884 4317/9177/2884 +f 4257/9060/2885 4256/9059/2885 4271/9086/2885 4315/9174/2885 +f 4273/9089/2858 4265/9074/2857 4268/9080/2886 4274/9091/2886 +f 4318/9179/2746 4319/9180/2746 4320/9181/2747 4321/9183/2748 +f 4322/9184/2887 4321/9182/2887 4323/9186/2888 4324/9187/2889 +f 4325/9188/2762 4326/9190/2762 4327/9193/2762 4328/9195/2762 +f 4329/9197/2756 4330/9198/2756 4325/9189/2756 4331/9201/2756 +f 4332/9203/2757 4319/9180/2757 4333/9204/2757 4334/9205/2757 +f 4335/9207/2758 4332/9202/2758 4334/9206/2758 4336/9208/2758 +f 4337/9209/2758 4338/9210/2758 4332/9202/2758 4335/9207/2758 +f 4338/9211/2760 4320/9181/2760 4319/9180/2757 4332/9203/2757 +f 4339/9212/2890 4329/9196/2890 4331/9200/2890 4340/9213/2890 +f 4322/9184/2890 4341/9215/2890 4329/9196/2890 4339/9212/2890 +f 4341/9214/2756 4342/9216/2756 4330/9198/2756 4329/9197/2756 +f 4334/9205/2763 4333/9204/2763 4343/9218/2763 4344/9220/2763 +f 4340/9213/2891 4331/9200/2891 4345/9221/2891 4346/9223/2891 +f 4347/9224/2892 4340/9213/2893 4346/9223/2894 4348/9226/2895 +f 4330/9199/2765 4349/9228/2765 4326/9190/2765 4325/9188/2765 +f 4342/9217/2765 4350/9230/2765 4349/9228/2765 4330/9199/2765 +f 4338/9210/2767 4337/9209/2767 4351/9231/2767 4352/9233/2767 +f 4342/9216/2768 4341/9214/2768 4353/9234/2768 4354/9236/2768 +f 4337/9209/2896 4350/9229/2896 4355/9239/2897 4351/9231/2898 +f 4339/9212/2899 4318/9178/2899 4321/9182/2887 4322/9184/2887 +f 4340/9213/2893 4347/9224/2892 4318/9178/2899 4339/9212/2899 +f 4347/9225/2746 4333/9204/2746 4319/9180/2746 4318/9179/2746 +f 4356/9240/2788 4352/9232/2788 4357/9242/2788 4358/9244/2788 +f 4353/9235/2900 4324/9187/2900 4359/9246/2900 4360/9248/2900 +f 4355/9238/2772 4354/9237/2772 4361/9249/2772 4362/9252/2772 +f 4354/9236/2901 4353/9234/2901 4360/9247/2901 4361/9251/2901 +f 4320/9181/2760 4338/9211/2760 4352/9232/2776 4356/9240/2776 +f 4350/9230/2777 4342/9217/2777 4354/9237/2777 4355/9238/2777 +f 4321/9183/2748 4320/9181/2747 4356/9240/2778 4323/9185/2778 +f 4341/9215/2902 4322/9184/2902 4324/9187/2902 4353/9235/2902 +f 4362/9253/2797 4361/9250/2797 4363/9257/2797 4364/9258/2797 +f 4361/9251/2796 4360/9247/2796 4365/9259/2796 4363/9255/2796 +f 4366/9263/2775 4362/9253/2903 4364/9258/2904 4367/9264/2781 +f 4359/9246/2905 4368/9266/2906 4369/9267/2907 4370/9268/2908 +f 4323/9185/2789 4356/9240/2789 4358/9244/2789 4368/9265/2789 +f 4352/9233/2790 4351/9231/2790 4366/9262/2790 4357/9241/2790 +f 4324/9187/2889 4323/9186/2888 4368/9266/2906 4359/9246/2905 +f 4351/9231/2898 4355/9239/2897 4362/9254/2903 4366/9262/2775 +f 4370/9268/2908 4369/9267/2907 4371/9270/2909 4372/9271/2910 +f 4373/9274/2793 4367/9264/2793 4374/9275/2793 4375/9276/2793 +f 4369/9267/2794 4376/9280/2794 4377/9281/2794 4371/9270/2794 +f 4376/9278/2795 4373/9272/2795 4375/9277/2795 4377/9282/2795 +f 4360/9248/2911 4359/9246/2911 4370/9268/2911 4365/9261/2911 +f 4358/9244/2912 4357/9242/2912 4373/9273/2912 4376/9279/2912 +f 4368/9266/2787 4358/9245/2787 4376/9280/2787 4369/9267/2787 +f 4357/9243/2786 4366/9263/2786 4367/9264/2786 4373/9274/2786 +f 4375/9276/2913 4374/9275/2913 4378/9283/2913 4379/9284/2913 +f 4371/9269/2814 4377/9282/2814 4380/9286/2814 4381/9288/2814 +f 4377/9282/2800 4375/9277/2800 4379/9285/2800 4380/9286/2800 +f 4382/9289/2914 4372/9271/2914 4383/9291/2914 4384/9292/2914 +f 4367/9264/2781 4364/9258/2904 4385/9294/2915 4374/9275/2916 +f 4363/9256/2806 4365/9260/2806 4382/9290/2806 4386/9297/2806 +f 4364/9258/2807 4363/9257/2807 4386/9296/2807 4385/9294/2807 +f 4365/9261/2917 4370/9268/2917 4372/9271/2917 4382/9289/2917 +f 4387/9298/2918 4388/9300/2918 4389/9302/2919 4390/9303/2919 +f 4379/9284/2920 4378/9283/2920 4391/9306/2920 4392/9308/2920 +f 4393/9312/2812 4394/9314/2812 4395/9316/2812 4396/9317/2812 +f 4384/9292/2921 4383/9291/2921 4397/9321/2921 4398/9323/2921 +f 4372/9271/2910 4371/9270/2909 4381/9287/2922 4383/9291/2923 +f 4374/9275/2916 4385/9294/2915 4399/9327/2924 4378/9283/2819 +f 4386/9297/2803 4382/9290/2803 4384/9293/2803 4400/9329/2803 +f 4385/9295/2802 4386/9297/2802 4400/9329/2802 4399/9328/2802 +f 4343/9218/2821 4348/9227/2821 4401/9330/2821 4402/9332/2821 +f 4345/9222/2822 4328/9194/2822 4403/9336/2822 4404/9338/2822 +f 4348/9226/2895 4346/9223/2894 4405/9339/2925 4401/9331/2926 +f 4346/9223/2927 4345/9221/2927 4404/9337/2927 4405/9339/2927 +f 4336/9208/2755 4334/9206/2755 4344/9219/2755 4406/9340/2755 +f 4333/9204/2827 4347/9225/2827 4348/9227/2827 4343/9218/2827 +f 4326/9191/2928 4336/9208/2928 4406/9340/2828 4327/9192/2929 +f 4331/9201/2830 4325/9189/2830 4328/9194/2830 4345/9222/2830 +f 4401/9331/2926 4405/9339/2925 4407/9341/2930 4408/9342/2931 +f 4405/9339/2932 4404/9337/2932 4409/9344/2932 4407/9341/2932 +f 4403/9334/2851 4410/9348/2851 4411/9349/2851 4412/9350/2851 +f 4413/9354/2850 4402/9332/2850 4414/9356/2850 4415/9359/2850 +f 4406/9340/2820 4344/9219/2820 4413/9353/2820 4416/9362/2820 +f 4327/9192/2929 4406/9340/2828 4416/9362/2837 4410/9346/2838 +f 4344/9220/2839 4343/9218/2839 4402/9332/2839 4413/9354/2839 +f 4328/9195/2840 4327/9193/2840 4410/9347/2840 4403/9335/2840 +f 4412/9350/2843 4411/9349/2843 4417/9364/2843 4418/9366/2843 +f 4415/9360/2844 4414/9357/2844 4419/9369/2844 4420/9371/2844 +f 4411/9349/2845 4421/9372/2846 4422/9373/2847 4417/9364/2848 +f 4421/9372/2863 4415/9361/2863 4420/9370/2863 4422/9373/2863 +f 4404/9338/2833 4403/9336/2833 4412/9351/2833 4409/9343/2833 +f 4402/9333/2832 4401/9331/2832 4408/9342/2832 4414/9358/2832 +f 4416/9363/2849 4413/9355/2849 4415/9361/2849 4421/9372/2849 +f 4410/9348/2838 4416/9363/2837 4421/9372/2846 4411/9349/2845 +f 4422/9373/2854 4420/9370/2854 4393/9313/2855 4423/9374/2855 +f 4419/9369/2856 4424/9375/2856 4387/9299/2857 4394/9314/2858 +f 4425/9377/2933 4418/9367/2933 4426/9379/2933 4427/9380/2933 +f 4424/9376/2934 4428/9382/2935 4388/9300/2918 4387/9298/2918 +f 4407/9341/2936 4409/9344/2936 4425/9378/2936 4428/9382/2936 +f 4408/9342/2931 4407/9341/2930 4428/9382/2935 4424/9376/2934 +f 4409/9345/2861 4412/9352/2861 4418/9367/2861 4425/9377/2861 +f 4414/9358/2862 4408/9342/2862 4424/9376/2862 4419/9368/2862 +f 4427/9380/2937 4426/9379/2937 4429/9383/2937 4430/9385/2937 +f 4383/9291/2923 4381/9287/2922 4431/9389/2938 4397/9321/2938 +f 4378/9283/2819 4399/9327/2924 4432/9392/2868 4391/9306/2868 +f 4426/9379/2866 4433/9395/2866 4434/9397/2867 4429/9383/2867 +f 4417/9364/2848 4422/9373/2847 4423/9374/2853 4433/9396/2853 +f 4420/9371/2852 4419/9369/2852 4394/9314/2852 4393/9312/2852 +f 4418/9367/2869 4417/9365/2869 4433/9395/2866 4426/9379/2866 +f 4428/9382/2939 4425/9378/2939 4427/9381/2940 4388/9300/2941 +f 4435/9400/2874 4392/9309/2874 4391/9307/2874 4432/9393/2874 +f 4398/9324/2874 4435/9400/2874 4432/9393/2874 4436/9402/2874 +f 4397/9322/2875 4431/9390/2874 4435/9401/2874 4398/9325/2874 +f 4431/9390/2874 4437/9404/2874 4392/9310/2874 4435/9401/2874 +f 4438/9406/2876 4396/9318/2876 4395/9315/2877 4390/9304/2878 +f 4430/9386/2876 4438/9406/2876 4390/9304/2878 4389/9301/2878 +f 4429/9384/2876 4434/9398/2876 4438/9407/2876 4430/9387/2876 +f 4434/9398/2876 4439/9408/2876 4396/9319/2876 4438/9407/2876 +f 4399/9328/2879 4400/9329/2879 4436/9403/2879 4432/9394/2879 +f 4433/9396/2853 4423/9374/2853 4439/9409/2880 4434/9399/2880 +f 4381/9288/2881 4380/9286/2881 4437/9405/2881 4431/9391/2881 +f 4388/9300/2941 4427/9381/2940 4430/9388/2942 4389/9302/2942 +f 4400/9329/2883 4384/9293/2883 4398/9326/2883 4436/9403/2883 +f 4423/9374/2855 4393/9313/2855 4396/9320/2884 4439/9409/2884 +f 4380/9286/2885 4379/9285/2885 4392/9311/2885 4437/9405/2885 +f 4394/9314/2858 4387/9299/2857 4390/9305/2886 4395/9316/2886 +f 4184/8930/2732 4183/8927/2731 4446/9420/2943 4448/9425/2944 +f 4448/9425/2944 4446/9420/2943 4447/9422/2745 4449/9427/2744 +f 4174/8908/2737 4189/8940/2736 4442/9412/2945 4444/9417/2946 +f 4444/9417/2946 4442/9412/2945 4443/9414/2741 4445/9419/2740 +f 4194/8954/2734 4441/9411/2734 4446/9421/2734 4183/8928/2734 +f 4441/9411/2734 4440/9410/2734 4447/9423/2734 4446/9421/2734 +f 4189/8941/2734 4188/8939/2734 4440/9410/2734 4442/9413/2734 +f 4442/9413/2734 4440/9410/2734 4441/9411/2734 4443/9415/2734 +o Chair.011 +v 6.775808 0.632998 6.577875 +v 6.775808 0.647567 6.577875 +v 6.798890 0.647567 6.533952 +v 6.985870 0.647567 6.178140 +v 7.008952 0.647567 6.134217 +v 7.008952 0.632998 6.134217 +v 6.985870 0.632998 6.178140 +v 6.798890 0.632998 6.533952 +v 7.349434 0.647567 6.313142 +v 7.349434 0.632998 6.313142 +v 7.349434 0.618428 6.313142 +v 7.328213 0.618428 6.353524 +v 6.985870 0.618428 6.178140 +v 7.008952 0.618428 6.134217 +v 7.116290 0.632998 6.756800 +v 7.116290 0.647567 6.756800 +v 7.137511 0.632998 6.716417 +v 7.137511 0.647567 6.716417 +v 7.116290 0.618428 6.756800 +v 7.137511 0.618428 6.716417 +v 6.775808 0.618428 6.577875 +v 6.798890 0.618428 6.533952 +v 7.328213 0.632998 6.353524 +v 7.328213 0.647567 6.353524 +v 7.179630 0.655676 6.221457 +v 7.182347 0.661267 6.216287 +v 7.066308 0.661267 6.155309 +v 7.063591 0.655676 6.160479 +v 7.063673 0.647592 6.160322 +v 7.034913 0.655566 6.145409 +v 7.037309 0.647916 6.146468 +v 7.188790 0.647519 6.204025 +v 7.188709 0.655603 6.204181 +v 7.304746 0.655603 6.265159 +v 7.304828 0.647519 6.265003 +v 7.302145 0.661444 6.270109 +v 7.330385 0.657024 6.284949 +v 7.330917 0.651671 6.278912 +v 7.182313 0.641751 6.216352 +v 7.186073 0.641927 6.209196 +v 7.302111 0.641927 6.270174 +v 7.298350 0.641751 6.277330 +v 7.186107 0.661444 6.209131 +v 7.298384 0.661267 6.277265 +v 7.072670 0.655603 6.143202 +v 7.070069 0.661444 6.148152 +v 7.179712 0.647592 6.221301 +v 7.295749 0.647592 6.282279 +v 7.066275 0.641751 6.155373 +v 7.070035 0.641927 6.148217 +v 7.328136 0.644262 6.277252 +v 7.323439 0.639137 6.281382 +v 7.326561 0.656863 6.292073 +v 7.319616 0.638976 6.288505 +v 7.319084 0.644329 6.294541 +v 7.072752 0.647519 6.143046 +v 7.044013 0.655497 6.128142 +v 7.039740 0.661024 6.132214 +v 7.041582 0.642389 6.142397 +v 7.045291 0.642556 6.135214 +v 7.046408 0.647847 6.129203 +v 7.295667 0.655676 6.282436 +v 7.012268 0.638593 6.133308 +v 7.018033 0.633973 6.130022 +v 7.021698 0.634113 6.122816 +v 7.021386 0.638535 6.116053 +v 7.016925 0.644929 6.113908 +v 7.036030 0.660857 6.139397 +v 7.000373 0.620583 6.105011 +v 6.994317 0.625034 6.102027 +v 7.007806 0.644987 6.131164 +v 6.985184 0.625074 6.119275 +v 6.991240 0.620624 6.122258 +v 7.011160 0.649548 6.117195 +v 6.987399 0.628250 6.104709 +v 7.007494 0.649409 6.124401 +v 6.983768 0.628153 6.111933 +v 6.969475 0.597968 6.111021 +v 6.976485 0.595939 6.114504 +v 6.978617 0.597950 6.093777 +v 6.971011 0.599416 6.096097 +v 6.967402 0.599372 6.103333 +v 6.998158 0.617408 6.119577 +v 7.001788 0.617505 6.112353 +v 6.957181 0.563411 6.088830 +v 6.953573 0.563372 6.096066 +v 6.984091 0.594472 6.112185 +v 6.962749 0.560367 6.107286 +v 6.970394 0.559083 6.104987 +v 6.985626 0.595920 6.097261 +v 6.987700 0.594517 6.104950 +v 6.974002 0.559122 6.097751 +v 6.971890 0.560351 6.090043 +v 7.383489 0.567017 6.328587 +v 7.376464 0.566070 6.324695 +v 7.412850 0.214663 6.343817 +v 7.419876 0.215609 6.347708 +v 6.964828 0.562127 6.086530 +v 6.888094 0.219107 6.046207 +v 6.880448 0.220390 6.048506 +v 7.395037 0.567693 6.318925 +v 7.391122 0.567672 6.325999 +v 7.427508 0.216264 6.345121 +v 7.431424 0.216285 6.338046 +v 6.886015 0.217346 6.066963 +v 6.893661 0.216063 6.064664 +v 6.955685 0.562143 6.103774 +v 7.357777 0.643190 6.299344 +v 7.356587 0.639219 6.292402 +v 7.321864 0.651738 6.296203 +v 7.347555 0.639268 6.309703 +v 7.353902 0.643070 6.306440 +v 7.345074 0.629921 6.292751 +v 7.341199 0.629801 6.299847 +v 7.342390 0.633772 6.306789 +v 7.366765 0.620847 6.319798 +v 7.374155 0.622691 6.317083 +v 7.361718 0.616314 6.301498 +v 7.357811 0.616256 6.308577 +v 7.360091 0.618182 6.316091 +v 7.351420 0.633722 6.289488 +v 7.371167 0.588846 6.315596 +v 7.373617 0.590095 6.323199 +v 7.369109 0.618158 6.298783 +v 7.382633 0.590080 6.305890 +v 7.375081 0.588883 6.308520 +v 7.378063 0.622749 6.310005 +v 7.388078 0.593022 6.324399 +v 7.391990 0.593059 6.317324 +v 7.375782 0.620823 6.302489 +v 7.389542 0.591810 6.309720 +v 7.392503 0.567008 6.311276 +v 7.385479 0.566062 6.307386 +v 7.380526 0.591825 6.327029 +v 7.373930 0.565386 6.317047 +v 7.377846 0.565407 6.309973 +v 7.414233 0.213999 6.329094 +v 7.410317 0.213979 6.336169 +v 6.878952 0.219123 6.063450 +v 7.421865 0.214654 6.326507 +v 6.895157 0.217330 6.049719 +v 6.887054 0.218227 6.056584 +v 6.897269 0.216102 6.057427 +v 6.876840 0.220352 6.055742 +v 7.420871 0.215132 6.337107 +v 7.428890 0.215601 6.330398 +v 6.936086 0.655676 6.684905 +v 6.938803 0.661267 6.679735 +v 6.822765 0.661267 6.618756 +v 6.820047 0.655676 6.623927 +v 6.820129 0.647592 6.623771 +v 6.791369 0.655566 6.608856 +v 6.793765 0.647916 6.609916 +v 7.058567 0.641927 6.733622 +v 7.061284 0.647519 6.728451 +v 7.084593 0.644262 6.740700 +v 7.079895 0.639137 6.744830 +v 6.938769 0.641751 6.679800 +v 6.942530 0.641927 6.672643 +v 7.054806 0.641751 6.740777 +v 6.942564 0.661444 6.672579 +v 7.054841 0.661267 6.740713 +v 7.058601 0.661444 6.733557 +v 6.945165 0.655603 6.667628 +v 7.061202 0.655603 6.728607 +v 6.829126 0.655603 6.606650 +v 6.826525 0.661444 6.611600 +v 6.936168 0.647592 6.684750 +v 7.052205 0.647592 6.745728 +v 6.822731 0.641751 6.618821 +v 6.826491 0.641927 6.611665 +v 7.083017 0.656863 6.755520 +v 7.086841 0.657024 6.748397 +v 7.076072 0.638976 6.751953 +v 7.075539 0.644329 6.757990 +v 7.052123 0.655676 6.745883 +v 7.078320 0.651738 6.759650 +v 6.945247 0.647519 6.667473 +v 6.829208 0.647519 6.606494 +v 6.800468 0.655497 6.591590 +v 6.796196 0.661024 6.595662 +v 6.798038 0.642389 6.605844 +v 6.801748 0.642556 6.598662 +v 6.802865 0.647847 6.592650 +v 6.792486 0.660857 6.602844 +v 6.767615 0.649548 6.580643 +v 6.763950 0.649409 6.587849 +v 6.768723 0.638593 6.596756 +v 6.774488 0.633973 6.593469 +v 6.778154 0.634113 6.586263 +v 6.777842 0.638535 6.579501 +v 6.758244 0.617505 6.575800 +v 6.756829 0.620583 6.568459 +v 6.754613 0.617408 6.583025 +v 6.773381 0.644929 6.577355 +v 6.750772 0.625034 6.565475 +v 6.764262 0.644987 6.594611 +v 6.741640 0.625074 6.582723 +v 6.747696 0.620624 6.585707 +v 6.725932 0.597968 6.574468 +v 6.732941 0.595939 6.577953 +v 6.743855 0.628250 6.568157 +v 6.735074 0.597950 6.557225 +v 6.727467 0.599416 6.559545 +v 6.740225 0.628153 6.575381 +v 6.723858 0.599372 6.566780 +v 6.721282 0.562127 6.549977 +v 6.713637 0.563411 6.552277 +v 6.710029 0.563372 6.559513 +v 6.712141 0.562143 6.567221 +v 6.740548 0.594472 6.575633 +v 6.719204 0.560367 6.570735 +v 6.726850 0.559083 6.568435 +v 6.742082 0.595920 6.560709 +v 6.744157 0.594517 6.568398 +v 7.139946 0.567017 6.792034 +v 7.132920 0.566070 6.788144 +v 7.169307 0.214663 6.807265 +v 7.176332 0.215609 6.811156 +v 6.644551 0.219107 6.509655 +v 6.636905 0.220390 6.511953 +v 7.151494 0.567693 6.782372 +v 7.147578 0.567672 6.789447 +v 7.183965 0.216264 6.808568 +v 7.187881 0.216285 6.801494 +v 6.642471 0.217346 6.530411 +v 6.650117 0.216063 6.528111 +v 6.728346 0.560351 6.553491 +v 6.730458 0.559122 6.561199 +v 7.104011 0.639268 6.773150 +v 7.110358 0.643070 6.769888 +v 7.101530 0.629921 6.756199 +v 7.097655 0.629801 6.763295 +v 7.098845 0.633772 6.770237 +v 7.087374 0.651671 6.742360 +v 7.116547 0.618182 6.779540 +v 7.123221 0.620847 6.783246 +v 7.114267 0.616256 6.772024 +v 7.107876 0.633722 6.752935 +v 7.125565 0.618158 6.762231 +v 7.118175 0.616314 6.764946 +v 7.114233 0.643190 6.762792 +v 7.130611 0.622691 6.780531 +v 7.134520 0.622749 6.773452 +v 7.113043 0.639219 6.755849 +v 7.139089 0.590080 6.769338 +v 7.131537 0.588883 6.771967 +v 7.144534 0.593022 6.787847 +v 7.148447 0.593059 6.780771 +v 7.132239 0.620823 6.765937 +v 7.145998 0.591810 6.773167 +v 7.148960 0.567008 6.774724 +v 7.136981 0.591825 6.790477 +v 7.127624 0.588846 6.779044 +v 7.134302 0.565407 6.773421 +v 7.130387 0.565386 6.780495 +v 7.130073 0.590095 6.786647 +v 7.170689 0.213999 6.792542 +v 7.166774 0.213979 6.799617 +v 6.635408 0.219123 6.526897 +v 6.651613 0.217330 6.513167 +v 7.141935 0.566062 6.770833 +v 7.178322 0.214654 6.789955 +v 6.643510 0.218227 6.520033 +v 6.653725 0.216102 6.520875 +v 6.633296 0.220352 6.519189 +v 7.177326 0.215132 6.800555 +v 7.185347 0.215601 6.793845 +v 7.201078 0.614301 6.595453 +v 7.264645 0.614301 6.474489 +v 7.201078 0.628870 6.595453 +v 7.264645 0.628870 6.474489 +v 6.861217 0.628870 6.415348 +v 6.923544 0.628870 6.296744 +v 7.264645 0.599731 6.474489 +v 7.201078 0.599731 6.595453 +v 6.923543 0.599731 6.296744 +v 6.861217 0.599731 6.415348 +vn -0.2160 -0.0000 0.9764 +vn -0.6752 -0.7071 0.2100 +vn -0.8852 -0.0000 -0.4652 +vn -0.2100 -0.7071 -0.6752 +vn 0.0150 0.6667 -0.7452 +vn 0.4652 -0.0000 -0.8852 +vn -0.0000 -1.0000 -0.0000 +vn 0.0313 -0.9977 -0.0605 +vn 0.0317 -0.9976 -0.0613 +vn -0.4652 -0.0000 0.8852 +vn 0.8852 -0.0000 0.4652 +vn -0.0000 1.0000 -0.0000 +vn 0.0321 0.9977 -0.0601 +vn 0.0325 0.9976 -0.0609 +vn -0.0317 0.9976 0.0613 +vn -0.0313 0.9977 0.0605 +vn -0.0314 0.9977 0.0608 +vn -0.0316 0.9976 0.0611 +vn -0.0325 -0.9976 0.0609 +vn -0.0321 -0.9977 0.0601 +vn -0.0323 -0.9977 0.0604 +vn -0.0324 -0.9976 0.0606 +vn -0.3217 0.7224 0.6121 +vn -0.3220 0.7268 0.6066 +vn -0.3220 0.7269 0.6066 +vn -0.4651 -0.0225 0.8850 +vn -0.4648 -0.0215 0.8851 +vn -0.4593 -0.0204 0.8880 +vn 0.4651 0.0218 -0.8850 +vn 0.4663 0.0219 -0.8844 +vn 0.4664 0.0219 -0.8843 +vn 0.4156 0.6937 -0.5882 +vn 0.0101 -0.9998 -0.0193 +vn -0.0102 0.9998 0.0194 +vn 0.3360 0.6915 -0.6394 +vn 0.3315 0.6962 -0.6367 +vn -0.0154 0.9997 0.0163 +vn -0.3360 -0.6915 0.6395 +vn 0.2404 -0.7257 -0.6446 +vn 0.1115 0.9903 0.0826 +vn -0.4058 -0.6955 0.5930 +vn 0.3217 -0.7223 -0.6122 +vn 0.4651 0.0221 -0.8850 +vn 0.3269 0.7008 -0.6340 +vn -0.0102 -0.9995 -0.0292 +vn 0.4590 0.0214 -0.8882 +vn 0.4647 0.0224 -0.8852 +vn -0.1400 -0.6683 0.7306 +vn 0.5161 -0.6972 -0.4976 +vn 0.2770 -0.9532 0.1216 +vn 0.4533 0.0184 -0.8912 +vn 0.4582 0.0214 -0.8886 +vn -0.0206 0.9997 0.0132 +vn 0.3058 -0.7326 -0.6081 +vn -0.3223 0.7313 0.6011 +vn -0.3415 -0.7022 0.6247 +vn 0.4485 0.0132 -0.8937 +vn 0.4522 0.0177 -0.8917 +vn -0.4536 -0.0175 0.8910 +vn -0.4585 -0.0204 0.8884 +vn -0.4530 -0.0172 0.8914 +vn -0.4491 -0.0124 0.8934 +vn -0.0517 0.5509 -0.8330 +vn -0.7174 0.5748 0.3936 +vn -0.3062 0.9421 -0.1369 +vn -0.5314 0.6901 0.4913 +vn 0.1266 0.6614 -0.7393 +vn -0.4488 -0.0119 0.8936 +vn -0.4475 -0.0090 0.8942 +vn -0.1888 0.3812 -0.9050 +vn -0.8605 0.3978 0.3184 +vn -0.7546 0.5403 -0.3725 +vn 0.5354 -0.8044 0.2575 +vn 0.7049 -0.5868 -0.3984 +vn 0.0410 -0.5625 0.8258 +vn -0.5599 0.7833 -0.2703 +vn -0.8219 0.3980 -0.4076 +vn 0.2318 -0.2790 0.9319 +vn 0.9094 -0.2912 -0.2970 +vn 0.8209 -0.4005 0.4071 +vn 0.4470 0.0092 -0.8945 +vn 0.4482 0.0122 -0.8938 +vn 0.7374 -0.5692 0.3636 +vn 0.8520 -0.4135 -0.3211 +vn 0.1820 -0.3964 0.8999 +vn -0.4843 -0.0027 0.8749 +vn -0.4843 -0.0025 0.8749 +vn -0.2576 0.1694 -0.9513 +vn 0.8689 0.1162 0.4812 +vn 0.2576 -0.1695 0.9513 +vn -0.9098 0.2899 0.2969 +vn -0.2322 0.2777 -0.9322 +vn -0.4479 -0.0079 0.8940 +vn -0.4471 -0.0056 0.8945 +vn 0.4463 0.0054 -0.8949 +vn 0.4467 0.0070 -0.8946 +vn 0.5804 0.6472 -0.4943 +vn -0.0527 0.6748 0.7361 +vn -0.3024 -0.9356 -0.1822 +vn -0.4678 -0.0216 0.8836 +vn -0.4724 -0.0208 0.8812 +vn -0.4776 -0.0183 0.8784 +vn -0.4732 -0.0205 0.8807 +vn -0.2306 0.7239 0.6502 +vn 0.4679 0.0227 -0.8835 +vn 0.4727 0.0218 -0.8810 +vn -0.0918 -0.9932 -0.0722 +vn -0.4676 -0.0222 0.8837 +vn 0.1242 0.5630 0.8171 +vn -0.5093 -0.8103 -0.2898 +vn -0.4819 -0.0112 0.8762 +vn -0.4786 -0.0173 0.8779 +vn -0.7060 -0.5801 0.4062 +vn 0.4734 0.0211 -0.8806 +vn 0.4779 0.0187 -0.8782 +vn 0.3513 0.9128 0.2082 +vn 0.0752 -0.6896 -0.7203 +vn -0.5555 -0.6617 0.5036 +vn -0.8762 -0.3366 0.3449 +vn -0.2511 -0.3512 -0.9020 +vn 0.7721 0.4682 0.4298 +vn 0.4822 0.0114 -0.8760 +vn 0.4789 0.0175 -0.8777 +vn 0.4827 0.0104 -0.8757 +vn 0.4844 0.0032 -0.8749 +vn 0.7410 0.5405 -0.3984 +vn 0.5794 0.7463 0.3275 +vn -0.0966 -0.6033 -0.7916 +vn 0.8669 0.1344 0.4801 +vn 0.4842 0.0027 -0.8749 +vn 0.9429 0.0928 -0.3198 +vn 0.9435 0.0866 -0.3199 +vn 0.3128 0.0969 0.9449 +vn 0.3131 0.0905 0.9454 +vn 0.3131 0.0904 0.9454 +vn -0.4835 -0.0030 0.8754 +vn -0.4819 -0.0100 0.8762 +vn -0.7655 -0.4821 -0.4262 +vn 0.2535 0.3437 0.9042 +vn 0.8792 0.3294 -0.3442 +vn -0.8688 -0.1162 -0.4813 +vn -0.4463 -0.0053 0.8948 +vn -0.3132 -0.0898 -0.9454 +vn -0.3134 -0.0839 -0.9459 +vn 0.4464 0.0053 -0.8948 +vn -0.3130 -0.0956 -0.9449 +vn -0.9430 -0.0916 0.3198 +vn -0.9436 -0.0860 0.3199 +vn -0.9436 -0.0859 0.3199 +vn -0.8671 -0.1319 -0.4804 +vn -0.1945 -0.9756 -0.1022 +vn -0.1945 -0.9756 -0.1023 +vn 0.1037 -0.9931 0.0545 +vn 0.1037 -0.9931 0.0544 +vn 0.1036 -0.9931 0.0544 +vn 0.9417 -0.1770 -0.2862 +vn 0.4842 0.0025 -0.8749 +vn -0.9417 0.1770 0.2862 +vn -0.9440 -0.0803 0.3199 +vn 0.8682 -0.2449 0.4316 +vn 0.9440 0.0803 -0.3199 +vn -0.8682 0.2449 -0.4316 +vn 0.3134 0.0839 0.9459 +vn -0.4651 -0.0221 0.8850 +vn -0.4647 -0.0224 0.8852 +vn -0.4590 -0.0214 0.8882 +vn -0.3360 -0.6915 0.6394 +vn -0.4057 -0.6956 0.5929 +vn -0.4663 -0.0219 0.8844 +vn -0.4664 -0.0219 0.8843 +vn -0.4726 -0.0218 0.8810 +vn -0.4681 -0.0228 0.8834 +vn 0.4651 0.0224 -0.8850 +vn 0.4591 0.0214 -0.8881 +vn 0.4648 0.0224 -0.8851 +vn -0.4651 -0.0218 0.8850 +vn -0.1399 -0.6683 0.7306 +vn 0.2769 -0.9532 0.1216 +vn -0.3415 -0.7023 0.6247 +vn 0.4531 0.0183 -0.8913 +vn 0.4485 0.0133 -0.8937 +vn -0.4531 -0.0183 0.8912 +vn -0.4582 -0.0214 0.8886 +vn -0.4523 -0.0178 0.8917 +vn -0.4484 -0.0131 0.8937 +vn -0.4482 -0.0122 0.8939 +vn -0.4471 -0.0094 0.8944 +vn 0.0411 -0.5626 0.8257 +vn -0.5599 0.7833 -0.2702 +vn -0.2323 0.2777 -0.9322 +vn 0.2319 -0.2790 0.9319 +vn 0.4470 0.0091 -0.8945 +vn 0.4482 0.0123 -0.8938 +vn 0.1821 -0.3964 0.8998 +vn -0.4842 -0.0027 0.8750 +vn -0.4842 -0.0025 0.8749 +vn -0.2576 0.1695 -0.9513 +vn 0.2577 -0.1695 0.9513 +vn -0.4467 -0.0070 0.8946 +vn -0.4460 -0.0058 0.8950 +vn 0.4463 0.0055 -0.8949 +vn -0.4779 -0.0187 0.8782 +vn -0.4734 -0.0210 0.8806 +vn -0.5555 -0.6618 0.5035 +vn 0.4676 0.0221 -0.8837 +vn 0.4726 0.0218 -0.8810 +vn -0.4822 -0.0114 0.8760 +vn -0.4789 -0.0176 0.8777 +vn -0.7060 -0.5802 0.4061 +vn -0.8672 -0.1319 -0.4803 +vn -0.4827 -0.0104 0.8757 +vn -0.4844 -0.0032 0.8749 +vn -0.8762 -0.3367 0.3447 +vn -0.8689 -0.1162 -0.4812 +vn -0.4464 -0.0053 0.8948 +vn -0.9431 -0.0916 0.3196 +vn -0.9436 -0.0860 0.3197 +vn -0.9436 -0.0859 0.3197 +vn -0.9441 -0.0803 0.3198 +vn 0.0316 -0.9976 -0.0611 +vn 0.0314 -0.9977 -0.0608 +vn 0.0324 0.9976 -0.0606 +vn 0.0323 0.9977 -0.0604 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.973130 0.033128 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.677629 0.482142 +vt 0.409642 -0.009898 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.669677 0.481452 +vt 0.240570 0.058726 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +vt 0.296927 -0.019617 +vt 0.353285 -0.019617 +vt 0.470812 0.481452 +vt 0.296927 0.014692 +vt 0.271947 0.481452 +vt 0.353285 0.014692 +vt -0.849112 0.025953 +vt 0.468872 0.000137 +vt -0.911121 0.025955 +vt 0.273887 0.000137 +vt 0.475153 0.482142 +vt 0.353285 -0.053929 +vt 0.272677 0.482143 +vt 0.296927 -0.053929 +vt -0.911121 -0.024667 +vt 0.473178 0.006015 +vt -0.849112 -0.024667 +vt 0.274652 0.006015 +s 1 +usemtl Material.074 +f 4450/9429/2947 4451/9431/2948 4452/9434/2949 4722/9943/2949 4723/9945/2949 4453/9436/2949 4454/9438/2950 4455/9442/2951 4456/9443/2949 4457/9444/2949 +f 4455/9441/2951 4454/9439/2950 4458/9446/2952 4459/9449/2952 +f 4460/9451/2953 4461/9454/2954 4462/9457/2955 4463/9458/2953 +f 4464/9462/2956 4465/9463/2956 4451/9432/2948 4450/9428/2947 +f 4465/9464/2957 4464/9461/2957 4466/9466/2957 4467/9468/2957 +f 4468/9469/2957 4469/9472/2957 4466/9466/2957 4464/9461/2957 +f 4468/9470/2956 4464/9462/2956 4450/9428/2947 4470/9474/2956 +f 4463/9459/2952 4455/9441/2951 4459/9449/2952 4460/9452/2952 +f 4470/9475/2949 4450/9429/2949 4457/9444/2949 4456/9443/2949 4455/9442/2949 4463/9460/2949 4462/9456/2949 4726/9951/2949 4727/9953/2949 4471/9478/2949 +f 4463/9460/2949 4462/9456/2949 4456/9443/2949 4455/9442/2949 +f 4457/9445/2957 4450/9430/2957 4470/9476/2957 4471/9479/2957 +f 4721/9942/2957 4719/9938/2957 4472/9481/2957 4473/9482/2957 +f 4459/9450/2957 4458/9447/2957 4473/9482/2957 4472/9481/2957 +f 4718/9937/2957 4466/9466/2957 4469/9472/2957 4725/9950/2957 +f 4461/9455/2957 4460/9453/2957 4459/9450/2957 4472/9481/2957 +f 4465/9465/2958 4467/9467/2959 4452/9435/2960 4451/9433/2958 +f 4453/9437/2961 4473/9483/2962 4458/9448/2958 4454/9440/2958 +f 4723/9946/2963 4721/9941/2964 4473/9483/2962 4453/9437/2961 +f 4471/9480/2965 4469/9473/2966 4468/9471/2953 4470/9477/2953 +f 4727/9954/2967 4725/9949/2968 4469/9473/2966 4471/9480/2965 +f 4474/9484/2969 4475/9485/2969 4476/9486/2970 4477/9488/2971 +f 4478/9489/2972 4477/9487/2972 4479/9492/2973 4480/9494/2974 +f 4481/9496/2975 4482/9497/2975 4483/9498/2976 4484/9500/2977 +f 4483/9498/2978 4485/9501/2978 4486/9503/2978 4487/9505/2978 +f 4488/9507/2979 4489/9508/2979 4490/9509/2979 4491/9511/2979 +f 4492/9513/2980 4475/9485/2980 4493/9514/2980 4485/9502/2980 +f 4482/9497/2981 4492/9512/2981 4485/9501/2981 4483/9498/2981 +f 4494/9515/2982 4495/9516/2982 4492/9512/2981 4482/9497/2981 +f 4495/9517/2983 4476/9486/2983 4475/9485/2980 4492/9513/2980 +f 4496/9518/2984 4488/9506/2984 4491/9510/2984 4497/9519/2984 +f 4478/9490/2984 4498/9522/2984 4488/9506/2984 4496/9518/2984 +f 4498/9521/2979 4499/9523/2979 4489/9508/2979 4488/9507/2979 +f 4490/9509/2985 4484/9499/2985 4500/9525/2985 4501/9526/2985 +f 4485/9502/2986 4493/9514/2986 4502/9527/2986 4486/9504/2986 +f 4497/9519/2987 4491/9510/2987 4503/9529/2987 4504/9531/2987 +f 4489/9508/2988 4481/9495/2988 4484/9499/2988 4490/9509/2988 +f 4499/9523/2988 4505/9533/2988 4481/9495/2988 4489/9508/2988 +f 4505/9532/2989 4494/9515/2989 4482/9497/2975 4481/9496/2975 +f 4495/9516/2982 4494/9515/2982 4506/9534/2990 4507/9536/2990 +f 4499/9523/2991 4498/9521/2991 4508/9537/2991 4509/9539/2991 +f 4494/9515/2989 4505/9532/2989 4510/9540/2992 4506/9534/2993 +f 4511/9542/2969 4493/9514/2969 4475/9485/2969 4474/9484/2969 +f 4508/9538/2994 4480/9493/2994 4512/9545/2994 4513/9547/2994 +f 4510/9541/2995 4509/9539/2995 4514/9548/2995 4515/9550/2995 +f 4509/9539/2996 4508/9537/2996 4513/9546/2996 4514/9548/2996 +f 4506/9534/2993 4510/9540/2992 4515/9551/2997 4516/9552/2998 +f 4476/9486/2983 4495/9517/2983 4507/9535/2999 4517/9553/2999 +f 4505/9533/3000 4499/9523/3000 4509/9539/3000 4510/9541/3000 +f 4477/9488/2971 4476/9486/2970 4517/9553/3001 4479/9491/3001 +f 4498/9522/3002 4478/9490/3002 4480/9493/3002 4508/9538/3002 +f 4516/9552/2998 4515/9551/2997 4518/9554/3003 4519/9555/3004 +f 4512/9545/3005 4520/9556/3006 4521/9559/3007 4522/9560/3008 +f 4523/9561/3009 4516/9552/3009 4519/9555/3009 4524/9563/3009 +f 4520/9556/3010 4525/9566/3010 4526/9568/3010 4521/9559/3010 +f 4517/9553/3011 4507/9535/3011 4523/9562/3011 4525/9567/3011 +f 4479/9491/3012 4517/9553/3012 4525/9567/3012 4520/9557/3012 +f 4507/9536/3013 4506/9534/3013 4516/9552/3013 4523/9561/3013 +f 4480/9494/2974 4479/9492/2973 4520/9558/3006 4512/9544/3005 +f 4522/9560/3008 4521/9559/3007 4527/9572/3014 4528/9573/3015 +f 4524/9563/3016 4519/9555/3016 4529/9574/3016 4530/9576/3016 +f 4521/9559/3017 4526/9568/3017 4531/9577/3017 4527/9572/3017 +f 4526/9569/3018 4524/9564/3018 4530/9575/3018 4531/9578/3018 +f 4514/9548/3019 4513/9546/3019 4532/9579/3019 4533/9582/3019 +f 4515/9551/3020 4514/9549/3020 4533/9584/3020 4518/9554/3020 +f 4513/9547/3021 4512/9545/3021 4522/9560/3021 4532/9581/3021 +f 4525/9567/3022 4523/9562/3022 4524/9565/3022 4526/9570/3022 +f 4531/9578/3023 4530/9575/3023 4534/9586/3023 4535/9587/3023 +f 4536/9589/3024 4528/9573/3024 4537/9590/3024 4538/9591/3024 +f 4539/9593/3025 4540/9595/3025 4541/9597/3025 4542/9599/3025 +f 4540/9595/3026 4536/9588/3026 4538/9592/3026 4541/9597/3026 +f 4519/9555/3004 4518/9554/3003 4539/9594/3027 4529/9574/3028 +f 4533/9583/3029 4532/9580/3029 4536/9588/3029 4540/9595/3029 +f 4518/9554/3030 4533/9584/3030 4540/9596/3030 4539/9594/3030 +f 4532/9581/3031 4522/9560/3031 4528/9573/3031 4536/9589/3031 +f 4543/9600/3032 4544/9602/3032 4545/9604/3033 4546/9605/3033 +f 4534/9585/3034 4547/9608/3034 4548/9609/3034 4549/9611/3034 +f 4550/9614/3035 4551/9616/3035 4552/9618/3035 4553/9619/3035 +f 4538/9591/3036 4537/9590/3036 4554/9622/3036 4555/9624/3036 +f 4527/9571/3037 4531/9578/3037 4535/9587/3037 4556/9628/3037 +f 4530/9576/3038 4529/9574/3038 4547/9608/3038 4534/9585/3038 +f 4528/9573/3015 4527/9572/3014 4556/9627/3039 4537/9590/3040 +f 4529/9574/3028 4539/9594/3027 4542/9598/3041 4547/9608/3042 +f 4487/9505/3043 4486/9503/3043 4557/9629/3043 4558/9631/3043 +f 4502/9527/3044 4559/9632/3044 4560/9634/3044 4561/9638/3044 +f 4503/9528/3045 4501/9526/3045 4562/9639/3045 4563/9641/3045 +f 4559/9633/3046 4504/9530/3047 4564/9643/3048 4560/9635/3049 +f 4493/9514/3050 4511/9542/3050 4559/9632/3050 4502/9527/3050 +f 4484/9500/2977 4483/9498/2976 4487/9505/3051 4500/9524/3052 +f 4491/9511/3053 4490/9509/3053 4501/9526/3053 4503/9528/3053 +f 4511/9543/3054 4497/9520/3054 4504/9530/3047 4559/9633/3046 +f 4561/9637/3055 4560/9636/3055 4565/9645/3055 4566/9648/3055 +f 4563/9641/3056 4562/9639/3056 4567/9649/3056 4568/9652/3056 +f 4560/9636/3049 4564/9644/3048 4569/9655/3057 4565/9645/3058 +f 4564/9644/3059 4563/9642/3059 4568/9653/3059 4569/9655/3059 +f 4500/9524/3052 4487/9505/3051 4558/9631/3060 4570/9657/3061 +f 4486/9504/3062 4502/9527/3062 4561/9638/3062 4557/9630/3062 +f 4501/9526/3063 4500/9525/3063 4570/9656/3063 4562/9639/3063 +f 4504/9531/3064 4503/9529/3064 4563/9642/3064 4564/9644/3064 +f 4569/9655/3065 4568/9653/3065 4571/9658/3065 4572/9660/3065 +f 4567/9650/3066 4573/9661/3066 4574/9662/3066 4575/9664/3066 +f 4576/9666/3067 4566/9646/3067 4577/9669/3067 4578/9671/3067 +f 4573/9661/3068 4579/9673/3069 4580/9674/3070 4574/9662/3071 +f 4558/9631/3072 4557/9629/3072 4576/9668/3072 4579/9673/3072 +f 4570/9657/3061 4558/9631/3060 4579/9673/3069 4573/9661/3068 +f 4557/9630/3073 4561/9638/3073 4566/9647/3073 4576/9667/3073 +f 4562/9640/3074 4570/9657/3074 4573/9661/3074 4567/9650/3074 +f 4578/9671/3075 4577/9669/3075 4551/9616/3075 4550/9614/3075 +f 4574/9662/3071 4580/9674/3070 4581/9675/3076 4582/9677/3076 +f 4580/9674/3077 4578/9672/3077 4550/9615/3078 4581/9675/3078 +f 4577/9669/3079 4583/9678/3079 4543/9601/3080 4551/9616/3081 +f 4565/9645/3058 4569/9655/3057 4572/9660/3082 4583/9679/3083 +f 4568/9654/3084 4567/9651/3084 4575/9665/3084 4571/9659/3084 +f 4566/9648/3085 4565/9645/3085 4583/9679/3085 4577/9670/3085 +f 4579/9673/3086 4576/9668/3086 4578/9672/3086 4580/9674/3086 +f 4584/9680/3087 4585/9682/3087 4586/9683/3087 4587/9685/3087 +f 4537/9590/3040 4556/9627/3039 4588/9688/3088 4554/9622/3088 +f 4585/9682/3089 4582/9676/3089 4589/9691/3090 4586/9683/3090 +f 4547/9608/3042 4542/9598/3041 4590/9694/3091 4548/9609/3091 +f 4575/9665/3092 4574/9663/3092 4582/9676/3089 4585/9682/3089 +f 4572/9660/3093 4571/9658/3093 4584/9681/3094 4544/9602/3095 +f 4583/9679/3083 4572/9660/3082 4544/9602/3032 4543/9600/3032 +f 4571/9659/3096 4575/9665/3096 4585/9682/3096 4584/9680/3096 +f 4591/9697/3097 4549/9612/3097 4548/9610/3097 4590/9695/3097 +f 4555/9625/3097 4591/9697/3097 4590/9695/3097 4592/9698/3097 +f 4554/9623/3098 4588/9689/3097 4591/9697/3097 4555/9625/3097 +f 4588/9689/3097 4593/9700/3097 4549/9612/3097 4591/9697/3097 +f 4594/9702/3099 4553/9620/3099 4552/9617/3100 4546/9606/3101 +f 4587/9686/3099 4594/9702/3099 4546/9606/3101 4545/9603/3101 +f 4586/9684/3099 4589/9692/3099 4594/9702/3099 4587/9686/3099 +f 4589/9692/3099 4595/9703/3099 4553/9620/3099 4594/9702/3099 +f 4542/9599/3102 4541/9597/3102 4592/9699/3102 4590/9696/3102 +f 4582/9677/3076 4581/9675/3076 4595/9704/3103 4589/9693/3103 +f 4556/9628/3104 4535/9587/3104 4593/9701/3104 4588/9690/3104 +f 4544/9602/3095 4584/9681/3094 4587/9687/3105 4545/9604/3105 +f 4541/9597/3106 4538/9592/3106 4555/9626/3106 4592/9699/3106 +f 4581/9675/3078 4550/9615/3078 4553/9621/3107 4595/9704/3107 +f 4535/9587/3108 4534/9586/3108 4549/9613/3108 4593/9701/3108 +f 4551/9616/3081 4543/9601/3080 4546/9607/3109 4552/9618/3109 +f 4596/9706/2969 4597/9707/2969 4598/9708/2970 4599/9710/2971 +f 4600/9711/3110 4599/9709/3110 4601/9713/3111 4602/9714/3112 +f 4603/9715/2985 4604/9717/2985 4605/9720/2985 4606/9722/2985 +f 4607/9724/2979 4608/9725/2979 4603/9716/2979 4609/9728/2979 +f 4610/9730/2980 4597/9707/2980 4611/9731/2980 4612/9732/2980 +f 4613/9734/2981 4610/9729/2981 4612/9733/2981 4614/9735/2981 +f 4615/9736/2981 4616/9737/2981 4610/9729/2981 4613/9734/2981 +f 4616/9738/2983 4598/9708/2983 4597/9707/2980 4610/9730/2980 +f 4617/9739/3113 4607/9723/3113 4609/9727/3113 4618/9740/3113 +f 4600/9711/3113 4619/9742/3113 4607/9723/3113 4617/9739/3113 +f 4619/9741/2979 4620/9743/2979 4608/9725/2979 4607/9724/2979 +f 4612/9732/2986 4611/9731/2986 4621/9745/2986 4622/9747/2986 +f 4618/9740/3114 4609/9727/3114 4623/9748/3114 4624/9750/3114 +f 4625/9751/3115 4618/9740/3116 4624/9750/3117 4626/9753/3118 +f 4608/9726/2988 4627/9755/2988 4604/9717/2988 4603/9715/2988 +f 4620/9744/2988 4628/9757/2988 4627/9755/2988 4608/9726/2988 +f 4616/9737/2990 4615/9736/2990 4629/9758/2990 4630/9760/2990 +f 4620/9743/2991 4619/9741/2991 4631/9761/2991 4632/9763/2991 +f 4615/9736/3119 4628/9756/3119 4633/9766/3120 4629/9758/3121 +f 4617/9739/3122 4596/9705/3122 4599/9709/3110 4600/9711/3110 +f 4618/9740/3116 4625/9751/3115 4596/9705/3122 4617/9739/3122 +f 4625/9752/2969 4611/9731/2969 4597/9707/2969 4596/9706/2969 +f 4634/9767/3011 4630/9759/3011 4635/9769/3011 4636/9771/3011 +f 4631/9762/3123 4602/9714/3123 4637/9773/3123 4638/9775/3123 +f 4633/9765/2995 4632/9764/2995 4639/9776/2995 4640/9779/2995 +f 4632/9763/3124 4631/9761/3124 4638/9774/3124 4639/9778/3124 +f 4598/9708/2983 4616/9738/2983 4630/9759/2999 4634/9767/2999 +f 4628/9757/3000 4620/9744/3000 4632/9764/3000 4633/9765/3000 +f 4599/9710/2971 4598/9708/2970 4634/9767/3001 4601/9712/3001 +f 4619/9742/3125 4600/9711/3125 4602/9714/3125 4631/9762/3125 +f 4640/9780/3020 4639/9777/3020 4641/9784/3020 4642/9785/3020 +f 4639/9778/3019 4638/9774/3019 4643/9786/3019 4641/9782/3019 +f 4644/9790/2998 4640/9780/3126 4642/9785/3127 4645/9791/3004 +f 4637/9773/3128 4646/9793/3129 4647/9794/3130 4648/9795/3131 +f 4601/9712/3012 4634/9767/3012 4636/9771/3012 4646/9792/3012 +f 4630/9760/3013 4629/9758/3013 4644/9789/3013 4635/9768/3013 +f 4602/9714/3112 4601/9713/3111 4646/9793/3129 4637/9773/3128 +f 4629/9758/3121 4633/9766/3120 4640/9781/3126 4644/9789/2998 +f 4648/9795/3131 4647/9794/3130 4649/9797/3132 4650/9798/3133 +f 4651/9801/3016 4645/9791/3016 4652/9802/3016 4653/9803/3016 +f 4647/9794/3017 4654/9807/3017 4655/9808/3017 4649/9797/3017 +f 4654/9805/3018 4651/9799/3018 4653/9804/3018 4655/9809/3018 +f 4638/9775/3134 4637/9773/3134 4648/9795/3134 4643/9788/3134 +f 4636/9771/3135 4635/9769/3135 4651/9800/3135 4654/9806/3135 +f 4646/9793/3010 4636/9772/3010 4654/9807/3010 4647/9794/3010 +f 4635/9770/3009 4644/9790/3009 4645/9791/3009 4651/9801/3009 +f 4653/9803/3136 4652/9802/3136 4656/9810/3136 4657/9811/3136 +f 4649/9796/3037 4655/9809/3037 4658/9813/3037 4659/9815/3037 +f 4655/9809/3023 4653/9804/3023 4657/9812/3023 4658/9813/3023 +f 4660/9816/3137 4650/9798/3137 4661/9818/3137 4662/9819/3137 +f 4645/9791/3004 4642/9785/3127 4663/9821/3138 4652/9802/3139 +f 4641/9783/3029 4643/9787/3029 4660/9817/3029 4664/9824/3029 +f 4642/9785/3030 4641/9784/3030 4664/9823/3030 4663/9821/3030 +f 4643/9788/3140 4648/9795/3140 4650/9798/3140 4660/9816/3140 +f 4665/9825/3141 4666/9827/3141 4667/9829/3142 4668/9830/3142 +f 4657/9811/3143 4656/9810/3143 4669/9833/3143 4670/9835/3143 +f 4671/9839/3035 4672/9841/3035 4673/9843/3035 4674/9844/3035 +f 4662/9819/3144 4661/9818/3144 4675/9848/3144 4676/9850/3144 +f 4650/9798/3133 4649/9797/3132 4659/9814/3145 4661/9818/3146 +f 4652/9802/3139 4663/9821/3138 4677/9854/3147 4656/9810/3042 +f 4664/9824/3026 4660/9817/3026 4662/9820/3026 4678/9856/3026 +f 4663/9822/3025 4664/9824/3025 4678/9856/3025 4677/9855/3025 +f 4621/9745/3044 4626/9754/3044 4679/9857/3044 4680/9859/3044 +f 4623/9749/3045 4606/9721/3045 4681/9863/3045 4682/9865/3045 +f 4626/9753/3118 4624/9750/3117 4683/9866/3148 4679/9858/3149 +f 4624/9750/3150 4623/9748/3150 4682/9864/3150 4683/9866/3150 +f 4614/9735/2978 4612/9733/2978 4622/9746/2978 4684/9867/2978 +f 4611/9731/3050 4625/9752/3050 4626/9754/3050 4621/9745/3050 +f 4604/9718/3151 4614/9735/3151 4684/9867/3051 4605/9719/3152 +f 4609/9728/3053 4603/9716/3053 4606/9721/3053 4623/9749/3053 +f 4679/9858/3149 4683/9866/3148 4685/9868/3153 4686/9869/3154 +f 4683/9866/3155 4682/9864/3155 4687/9871/3155 4685/9868/3155 +f 4681/9861/3074 4688/9875/3074 4689/9876/3074 4690/9877/3074 +f 4691/9881/3073 4680/9859/3073 4692/9883/3073 4693/9886/3073 +f 4684/9867/3043 4622/9746/3043 4691/9880/3043 4694/9889/3043 +f 4605/9719/3152 4684/9867/3051 4694/9889/3060 4688/9873/3061 +f 4622/9747/3062 4621/9745/3062 4680/9859/3062 4691/9881/3062 +f 4606/9722/3063 4605/9720/3063 4688/9874/3063 4681/9862/3063 +f 4690/9877/3066 4689/9876/3066 4695/9891/3066 4696/9893/3066 +f 4693/9887/3067 4692/9884/3067 4697/9896/3067 4698/9898/3067 +f 4689/9876/3068 4699/9899/3069 4700/9900/3070 4695/9891/3071 +f 4699/9899/3086 4693/9888/3086 4698/9897/3086 4700/9900/3086 +f 4682/9865/3056 4681/9863/3056 4690/9878/3056 4687/9870/3056 +f 4680/9860/3055 4679/9858/3055 4686/9869/3055 4692/9885/3055 +f 4694/9890/3072 4691/9882/3072 4693/9888/3072 4699/9899/3072 +f 4688/9875/3061 4694/9890/3060 4699/9899/3069 4689/9876/3068 +f 4700/9900/3077 4698/9897/3077 4671/9840/3078 4701/9901/3078 +f 4697/9896/3079 4702/9902/3079 4665/9826/3080 4672/9841/3081 +f 4703/9904/3156 4696/9894/3156 4704/9906/3156 4705/9907/3156 +f 4702/9903/3157 4706/9909/3158 4666/9827/3141 4665/9825/3141 +f 4685/9868/3159 4687/9871/3159 4703/9905/3159 4706/9909/3159 +f 4686/9869/3154 4685/9868/3153 4706/9909/3158 4702/9903/3157 +f 4687/9872/3084 4690/9879/3084 4696/9894/3084 4703/9904/3084 +f 4692/9885/3085 4686/9869/3085 4702/9903/3085 4697/9895/3085 +f 4705/9907/3160 4704/9906/3160 4707/9910/3160 4708/9912/3160 +f 4661/9818/3146 4659/9814/3145 4709/9916/3161 4675/9848/3161 +f 4656/9810/3042 4677/9854/3147 4710/9919/3091 4669/9833/3091 +f 4704/9906/3089 4711/9922/3089 4712/9924/3090 4707/9910/3090 +f 4695/9891/3071 4700/9900/3070 4701/9901/3076 4711/9923/3076 +f 4698/9898/3075 4697/9896/3075 4672/9841/3075 4671/9839/3075 +f 4696/9894/3092 4695/9892/3092 4711/9922/3089 4704/9906/3089 +f 4706/9909/3162 4703/9905/3162 4705/9908/3163 4666/9827/3164 +f 4713/9927/3097 4670/9836/3097 4669/9834/3097 4710/9920/3097 +f 4676/9851/3097 4713/9927/3097 4710/9920/3097 4714/9929/3097 +f 4675/9849/3098 4709/9917/3097 4713/9928/3097 4676/9852/3097 +f 4709/9917/3097 4715/9931/3097 4670/9837/3097 4713/9928/3097 +f 4716/9933/3099 4674/9845/3099 4673/9842/3100 4668/9831/3101 +f 4708/9913/3099 4716/9933/3099 4668/9831/3101 4667/9828/3101 +f 4707/9911/3099 4712/9925/3099 4716/9934/3099 4708/9914/3099 +f 4712/9925/3099 4717/9935/3099 4674/9846/3099 4716/9934/3099 +f 4677/9855/3102 4678/9856/3102 4714/9930/3102 4710/9921/3102 +f 4711/9923/3076 4701/9901/3076 4717/9936/3103 4712/9926/3103 +f 4659/9815/3104 4658/9813/3104 4715/9932/3104 4709/9918/3104 +f 4666/9827/3164 4705/9908/3163 4708/9915/3165 4667/9829/3165 +f 4678/9856/3106 4662/9820/3106 4676/9853/3106 4714/9930/3106 +f 4701/9901/3078 4671/9840/3078 4674/9847/3107 4717/9936/3107 +f 4658/9813/3108 4657/9812/3108 4670/9838/3108 4715/9932/3108 +f 4672/9841/3081 4665/9826/3080 4668/9832/3109 4673/9843/3109 +f 4462/9457/2955 4461/9454/2954 4724/9947/3166 4726/9952/3167 +f 4726/9952/3167 4724/9947/3166 4725/9949/2968 4727/9954/2967 +f 4452/9435/2960 4467/9467/2959 4720/9939/3168 4722/9944/3169 +f 4722/9944/3169 4720/9939/3168 4721/9941/2964 4723/9946/2963 +f 4472/9481/2957 4719/9938/2957 4724/9948/2957 4461/9455/2957 +f 4719/9938/2957 4718/9937/2957 4725/9950/2957 4724/9948/2957 +f 4467/9468/2957 4466/9466/2957 4718/9937/2957 4720/9940/2957 +f 4720/9940/2957 4718/9937/2957 4719/9938/2957 4721/9942/2957 +o Chair.012 +v 6.775808 0.669531 6.577875 +v 6.775808 0.684099 6.577875 +v 6.798890 0.684099 6.533952 +v 6.985870 0.684099 6.178140 +v 7.008952 0.684099 6.134217 +v 7.008952 0.669531 6.134217 +v 6.985870 0.669531 6.178140 +v 6.798890 0.669531 6.533952 +v 7.349434 0.684100 6.313142 +v 7.349434 0.669531 6.313142 +v 7.349434 0.654961 6.313142 +v 7.328213 0.654961 6.353524 +v 6.985870 0.654961 6.178140 +v 7.008952 0.654961 6.134217 +v 7.116290 0.669531 6.756800 +v 7.116290 0.684100 6.756800 +v 7.137511 0.669531 6.716417 +v 7.137511 0.684100 6.716417 +v 7.116290 0.654961 6.756800 +v 7.137511 0.654961 6.716417 +v 6.775808 0.654961 6.577875 +v 6.798890 0.654961 6.533952 +v 7.328213 0.669531 6.353524 +v 7.328213 0.684100 6.353524 +v 7.179630 0.692209 6.221457 +v 7.182347 0.697800 6.216287 +v 7.066308 0.697799 6.155309 +v 7.063591 0.692208 6.160479 +v 7.063673 0.684124 6.160322 +v 7.034913 0.692098 6.145409 +v 7.037309 0.684448 6.146468 +v 7.188790 0.684052 6.204025 +v 7.188709 0.692136 6.204181 +v 7.304746 0.692136 6.265159 +v 7.304828 0.684052 6.265003 +v 7.302145 0.697977 6.270109 +v 7.330385 0.693557 6.284949 +v 7.330917 0.688204 6.278912 +v 7.182313 0.678284 6.216352 +v 7.186073 0.678460 6.209196 +v 7.302111 0.678460 6.270174 +v 7.298350 0.678284 6.277330 +v 7.186107 0.697976 6.209131 +v 7.298384 0.697800 6.277265 +v 7.072670 0.692135 6.143202 +v 7.070069 0.697976 6.148152 +v 7.179712 0.684124 6.221301 +v 7.295749 0.684125 6.282279 +v 7.066275 0.678283 6.155373 +v 7.070035 0.678460 6.148217 +v 7.328136 0.680795 6.277252 +v 7.323439 0.675670 6.281382 +v 7.326561 0.693396 6.292073 +v 7.319616 0.675508 6.288505 +v 7.319084 0.680862 6.294541 +v 7.072752 0.684052 6.143046 +v 7.044013 0.692029 6.128142 +v 7.039740 0.697556 6.132214 +v 7.041582 0.678921 6.142397 +v 7.045291 0.679088 6.135214 +v 7.046408 0.684379 6.129203 +v 7.295667 0.692209 6.282436 +v 7.012268 0.675125 6.133308 +v 7.018033 0.670506 6.130022 +v 7.021698 0.670645 6.122816 +v 7.021386 0.675067 6.116053 +v 7.016925 0.681461 6.113908 +v 7.036030 0.697389 6.139397 +v 7.000373 0.657115 6.105011 +v 6.994317 0.661566 6.102027 +v 7.007806 0.681520 6.131164 +v 6.985184 0.661606 6.119275 +v 6.991240 0.657156 6.122258 +v 7.011160 0.686080 6.117195 +v 6.987399 0.664783 6.104709 +v 7.007494 0.685941 6.124401 +v 6.983768 0.664685 6.111933 +v 6.969475 0.634501 6.111021 +v 6.976485 0.632471 6.114504 +v 6.978617 0.634483 6.093777 +v 6.971011 0.635948 6.096097 +v 6.967402 0.635904 6.103333 +v 6.998158 0.653940 6.119577 +v 7.001788 0.654037 6.112353 +v 6.957181 0.599944 6.088830 +v 6.953573 0.599904 6.096066 +v 6.984091 0.631004 6.112185 +v 6.962749 0.596900 6.107286 +v 6.970394 0.595616 6.104987 +v 6.985626 0.632452 6.097261 +v 6.987700 0.631050 6.104950 +v 6.974002 0.595654 6.097751 +v 6.971890 0.596883 6.090043 +v 7.383489 0.603550 6.328587 +v 7.376464 0.602603 6.324695 +v 7.412850 0.251196 6.343817 +v 7.419876 0.252142 6.347708 +v 6.964828 0.598660 6.086530 +v 6.888094 0.255639 6.046207 +v 6.880448 0.256922 6.048506 +v 7.395037 0.604226 6.318925 +v 7.391122 0.604205 6.325999 +v 7.427508 0.252797 6.345121 +v 7.431424 0.252818 6.338046 +v 6.886015 0.253878 6.066963 +v 6.893661 0.252595 6.064664 +v 6.955685 0.598675 6.103774 +v 7.357777 0.679723 6.299344 +v 7.356587 0.675752 6.292402 +v 7.321864 0.688271 6.296203 +v 7.347555 0.675801 6.309703 +v 7.353902 0.679603 6.306440 +v 7.345074 0.666454 6.292751 +v 7.341199 0.666334 6.299847 +v 7.342390 0.670305 6.306789 +v 7.366765 0.657380 6.319798 +v 7.374155 0.659224 6.317083 +v 7.361718 0.652847 6.301498 +v 7.357811 0.652789 6.308577 +v 7.360091 0.654715 6.316091 +v 7.351420 0.670255 6.289488 +v 7.371167 0.625379 6.315596 +v 7.373617 0.626628 6.323199 +v 7.369109 0.654691 6.298783 +v 7.382633 0.626613 6.305890 +v 7.375081 0.625416 6.308520 +v 7.378063 0.659282 6.310005 +v 7.388078 0.629555 6.324399 +v 7.391990 0.629592 6.317324 +v 7.375782 0.657356 6.302489 +v 7.389542 0.628343 6.309720 +v 7.392503 0.603541 6.311276 +v 7.385479 0.602595 6.307386 +v 7.380526 0.628358 6.327029 +v 7.373930 0.601919 6.317047 +v 7.377846 0.601940 6.309973 +v 7.414233 0.250532 6.329094 +v 7.410317 0.250512 6.336169 +v 6.878952 0.255655 6.063450 +v 7.421865 0.251187 6.326507 +v 6.895157 0.253862 6.049719 +v 6.887054 0.254759 6.056584 +v 6.897269 0.252634 6.057427 +v 6.876840 0.256884 6.055742 +v 7.420871 0.251665 6.337107 +v 7.428890 0.252134 6.330398 +v 6.936086 0.692209 6.684905 +v 6.938803 0.697800 6.679735 +v 6.822765 0.697799 6.618756 +v 6.820047 0.692208 6.623927 +v 6.820129 0.684124 6.623771 +v 6.791369 0.692098 6.608856 +v 6.793765 0.684448 6.609916 +v 7.058567 0.678460 6.733622 +v 7.061284 0.684052 6.728451 +v 7.084593 0.680795 6.740700 +v 7.079895 0.675670 6.744830 +v 6.938769 0.678284 6.679800 +v 6.942530 0.678460 6.672643 +v 7.054806 0.678284 6.740777 +v 6.942564 0.697976 6.672579 +v 7.054841 0.697800 6.740713 +v 7.058601 0.697977 6.733557 +v 6.945165 0.692136 6.667628 +v 7.061202 0.692136 6.728607 +v 6.829126 0.692135 6.606650 +v 6.826525 0.697976 6.611600 +v 6.936168 0.684124 6.684750 +v 7.052205 0.684125 6.745728 +v 6.822731 0.678283 6.618821 +v 6.826491 0.678460 6.611665 +v 7.083017 0.693396 6.755520 +v 7.086841 0.693557 6.748397 +v 7.076072 0.675508 6.751953 +v 7.075539 0.680862 6.757990 +v 7.052123 0.692209 6.745883 +v 7.078320 0.688271 6.759650 +v 6.945247 0.684052 6.667473 +v 6.829208 0.684052 6.606494 +v 6.800468 0.692029 6.591590 +v 6.796196 0.697556 6.595662 +v 6.798038 0.678921 6.605844 +v 6.801748 0.679088 6.598662 +v 6.802865 0.684379 6.592650 +v 6.792486 0.697389 6.602844 +v 6.767615 0.686080 6.580643 +v 6.763950 0.685941 6.587849 +v 6.768723 0.675125 6.596756 +v 6.774488 0.670506 6.593469 +v 6.778154 0.670645 6.586263 +v 6.777842 0.675067 6.579501 +v 6.758244 0.654037 6.575800 +v 6.756829 0.657115 6.568459 +v 6.754613 0.653940 6.583025 +v 6.773381 0.681461 6.577355 +v 6.750772 0.661566 6.565475 +v 6.764262 0.681520 6.594611 +v 6.741640 0.661606 6.582723 +v 6.747696 0.657156 6.585707 +v 6.725932 0.634501 6.574468 +v 6.732941 0.632471 6.577953 +v 6.743855 0.664783 6.568157 +v 6.735074 0.634483 6.557225 +v 6.727467 0.635948 6.559545 +v 6.740225 0.664685 6.575381 +v 6.723858 0.635904 6.566780 +v 6.721282 0.598660 6.549977 +v 6.713637 0.599944 6.552277 +v 6.710029 0.599904 6.559513 +v 6.712141 0.598675 6.567221 +v 6.740548 0.631004 6.575633 +v 6.719204 0.596900 6.570735 +v 6.726850 0.595616 6.568435 +v 6.742082 0.632452 6.560709 +v 6.744157 0.631050 6.568398 +v 7.139946 0.603550 6.792034 +v 7.132920 0.602603 6.788144 +v 7.169307 0.251196 6.807265 +v 7.176332 0.252142 6.811156 +v 6.644551 0.255639 6.509655 +v 6.636905 0.256922 6.511953 +v 7.151494 0.604226 6.782372 +v 7.147578 0.604205 6.789447 +v 7.183965 0.252797 6.808568 +v 7.187881 0.252818 6.801494 +v 6.642471 0.253878 6.530411 +v 6.650117 0.252595 6.528111 +v 6.728346 0.596883 6.553491 +v 6.730458 0.595654 6.561199 +v 7.104011 0.675801 6.773150 +v 7.110358 0.679603 6.769888 +v 7.101530 0.666454 6.756199 +v 7.097655 0.666334 6.763295 +v 7.098845 0.670305 6.770237 +v 7.087374 0.688204 6.742360 +v 7.116547 0.654715 6.779540 +v 7.123221 0.657380 6.783246 +v 7.114267 0.652789 6.772024 +v 7.107876 0.670255 6.752935 +v 7.125565 0.654691 6.762231 +v 7.118175 0.652847 6.764946 +v 7.114233 0.679723 6.762792 +v 7.130611 0.659224 6.780531 +v 7.134520 0.659282 6.773452 +v 7.113043 0.675752 6.755849 +v 7.139089 0.626613 6.769338 +v 7.131537 0.625416 6.771967 +v 7.144534 0.629555 6.787847 +v 7.148447 0.629592 6.780771 +v 7.132239 0.657356 6.765937 +v 7.145998 0.628343 6.773167 +v 7.148960 0.603541 6.774724 +v 7.136981 0.628358 6.790477 +v 7.127624 0.625379 6.779044 +v 7.134302 0.601940 6.773421 +v 7.130387 0.601919 6.780495 +v 7.130073 0.626628 6.786647 +v 7.170689 0.250532 6.792542 +v 7.166774 0.250512 6.799617 +v 6.635408 0.255655 6.526897 +v 6.651613 0.253862 6.513167 +v 7.141935 0.602595 6.770833 +v 7.178322 0.251187 6.789955 +v 6.643510 0.254759 6.520033 +v 6.653725 0.252634 6.520875 +v 6.633296 0.256884 6.519189 +v 7.177326 0.251665 6.800555 +v 7.185347 0.252134 6.793845 +v 7.201078 0.650833 6.595453 +v 7.264645 0.650833 6.474489 +v 7.201078 0.665402 6.595453 +v 7.264645 0.665402 6.474489 +v 6.861217 0.665402 6.415348 +v 6.923544 0.665402 6.296744 +v 7.264645 0.636263 6.474489 +v 7.201078 0.636263 6.595453 +v 6.923543 0.636263 6.296744 +v 6.861217 0.636263 6.415348 +vn -0.2160 -0.0000 0.9764 +vn -0.6752 -0.7071 0.2100 +vn -0.8852 -0.0000 -0.4652 +vn -0.2100 -0.7071 -0.6752 +vn 0.0150 0.6667 -0.7452 +vn 0.4652 -0.0000 -0.8852 +vn -0.0000 -1.0000 -0.0000 +vn 0.0313 -0.9977 -0.0605 +vn 0.0317 -0.9976 -0.0613 +vn -0.4652 -0.0000 0.8852 +vn 0.8852 -0.0000 0.4652 +vn -0.0000 1.0000 -0.0000 +vn 0.0321 0.9977 -0.0601 +vn 0.0325 0.9976 -0.0609 +vn -0.0317 0.9976 0.0613 +vn -0.0313 0.9977 0.0605 +vn -0.0314 0.9977 0.0608 +vn -0.0316 0.9976 0.0611 +vn -0.0325 -0.9976 0.0609 +vn -0.0321 -0.9977 0.0601 +vn -0.0323 -0.9977 0.0604 +vn -0.0324 -0.9976 0.0606 +vn -0.3217 0.7224 0.6121 +vn -0.3220 0.7268 0.6066 +vn -0.3220 0.7269 0.6066 +vn -0.4651 -0.0225 0.8850 +vn -0.4648 -0.0215 0.8851 +vn -0.4593 -0.0204 0.8880 +vn 0.4651 0.0218 -0.8850 +vn 0.4663 0.0219 -0.8844 +vn 0.4664 0.0219 -0.8843 +vn 0.4156 0.6937 -0.5882 +vn 0.0101 -0.9998 -0.0193 +vn -0.0102 0.9998 0.0194 +vn 0.3360 0.6915 -0.6394 +vn 0.3315 0.6962 -0.6367 +vn -0.0154 0.9997 0.0163 +vn -0.3360 -0.6915 0.6395 +vn 0.2404 -0.7257 -0.6446 +vn 0.1115 0.9903 0.0826 +vn -0.4058 -0.6955 0.5930 +vn 0.3217 -0.7223 -0.6122 +vn 0.4651 0.0221 -0.8850 +vn 0.3269 0.7008 -0.6340 +vn -0.0102 -0.9995 -0.0292 +vn 0.4590 0.0214 -0.8882 +vn 0.4647 0.0224 -0.8852 +vn -0.1400 -0.6683 0.7306 +vn 0.5161 -0.6972 -0.4976 +vn 0.2770 -0.9532 0.1216 +vn 0.4533 0.0184 -0.8912 +vn 0.4582 0.0214 -0.8886 +vn -0.0206 0.9997 0.0132 +vn 0.3058 -0.7326 -0.6081 +vn -0.3223 0.7313 0.6011 +vn -0.3415 -0.7022 0.6247 +vn 0.4485 0.0132 -0.8937 +vn 0.4522 0.0177 -0.8917 +vn -0.4536 -0.0175 0.8910 +vn -0.4585 -0.0204 0.8884 +vn -0.4530 -0.0172 0.8914 +vn -0.4491 -0.0124 0.8934 +vn -0.0517 0.5509 -0.8330 +vn -0.7174 0.5748 0.3936 +vn -0.3062 0.9421 -0.1369 +vn -0.5314 0.6901 0.4913 +vn 0.1266 0.6614 -0.7393 +vn -0.4488 -0.0119 0.8936 +vn -0.4475 -0.0090 0.8942 +vn -0.1888 0.3812 -0.9050 +vn -0.8605 0.3978 0.3184 +vn -0.7546 0.5403 -0.3725 +vn 0.5354 -0.8044 0.2575 +vn 0.7049 -0.5868 -0.3984 +vn 0.0410 -0.5625 0.8258 +vn -0.5599 0.7833 -0.2703 +vn -0.8219 0.3980 -0.4076 +vn 0.2318 -0.2790 0.9319 +vn 0.9094 -0.2912 -0.2970 +vn 0.8209 -0.4005 0.4071 +vn 0.4470 0.0092 -0.8945 +vn 0.4482 0.0122 -0.8938 +vn 0.7374 -0.5692 0.3636 +vn 0.8520 -0.4135 -0.3211 +vn 0.1820 -0.3964 0.8999 +vn -0.4843 -0.0027 0.8749 +vn -0.4843 -0.0025 0.8749 +vn -0.2576 0.1694 -0.9513 +vn 0.8689 0.1162 0.4812 +vn 0.2576 -0.1695 0.9513 +vn -0.9098 0.2899 0.2969 +vn -0.2322 0.2777 -0.9322 +vn -0.4479 -0.0079 0.8940 +vn -0.4471 -0.0056 0.8945 +vn 0.4463 0.0054 -0.8949 +vn 0.4467 0.0070 -0.8946 +vn 0.5804 0.6472 -0.4943 +vn -0.0527 0.6748 0.7361 +vn -0.3024 -0.9356 -0.1822 +vn -0.4678 -0.0216 0.8836 +vn -0.4724 -0.0208 0.8812 +vn -0.4776 -0.0183 0.8784 +vn -0.4732 -0.0205 0.8807 +vn -0.2306 0.7239 0.6502 +vn 0.4679 0.0227 -0.8835 +vn 0.4727 0.0218 -0.8810 +vn -0.0918 -0.9932 -0.0722 +vn -0.4676 -0.0222 0.8837 +vn 0.1242 0.5630 0.8171 +vn -0.5093 -0.8103 -0.2898 +vn -0.4819 -0.0112 0.8762 +vn -0.4786 -0.0173 0.8779 +vn -0.7060 -0.5801 0.4062 +vn 0.4734 0.0211 -0.8806 +vn 0.4779 0.0187 -0.8782 +vn 0.3513 0.9128 0.2082 +vn 0.0752 -0.6896 -0.7203 +vn -0.5555 -0.6617 0.5036 +vn -0.8762 -0.3366 0.3449 +vn -0.2511 -0.3512 -0.9020 +vn 0.7721 0.4682 0.4298 +vn 0.4822 0.0114 -0.8760 +vn 0.4789 0.0175 -0.8777 +vn 0.4827 0.0104 -0.8757 +vn 0.4844 0.0032 -0.8749 +vn 0.7410 0.5405 -0.3984 +vn 0.5794 0.7463 0.3275 +vn -0.0966 -0.6033 -0.7916 +vn 0.8669 0.1344 0.4801 +vn 0.4842 0.0027 -0.8749 +vn 0.9429 0.0928 -0.3198 +vn 0.9435 0.0866 -0.3199 +vn 0.3128 0.0969 0.9449 +vn 0.3131 0.0905 0.9454 +vn 0.3131 0.0904 0.9454 +vn -0.4835 -0.0030 0.8754 +vn -0.4819 -0.0100 0.8762 +vn -0.7655 -0.4821 -0.4262 +vn 0.2535 0.3437 0.9042 +vn 0.8792 0.3294 -0.3442 +vn -0.8688 -0.1162 -0.4813 +vn -0.4463 -0.0053 0.8948 +vn -0.3132 -0.0898 -0.9454 +vn -0.3134 -0.0839 -0.9459 +vn 0.4464 0.0053 -0.8948 +vn -0.3130 -0.0956 -0.9449 +vn -0.9430 -0.0916 0.3198 +vn -0.9436 -0.0860 0.3199 +vn -0.9436 -0.0859 0.3199 +vn -0.8671 -0.1319 -0.4804 +vn -0.1945 -0.9756 -0.1022 +vn -0.1945 -0.9756 -0.1023 +vn 0.1037 -0.9931 0.0545 +vn 0.1037 -0.9931 0.0544 +vn 0.1036 -0.9931 0.0544 +vn 0.9417 -0.1770 -0.2862 +vn 0.4842 0.0025 -0.8749 +vn -0.9417 0.1770 0.2862 +vn -0.9440 -0.0803 0.3199 +vn 0.8682 -0.2449 0.4316 +vn 0.9440 0.0803 -0.3199 +vn -0.8682 0.2449 -0.4316 +vn 0.3134 0.0839 0.9459 +vn -0.4651 -0.0221 0.8850 +vn -0.4647 -0.0224 0.8852 +vn -0.4590 -0.0214 0.8882 +vn -0.3360 -0.6915 0.6394 +vn -0.4057 -0.6956 0.5929 +vn -0.4663 -0.0219 0.8844 +vn -0.4664 -0.0219 0.8843 +vn -0.4726 -0.0218 0.8810 +vn -0.4681 -0.0228 0.8834 +vn 0.4651 0.0224 -0.8850 +vn 0.4591 0.0214 -0.8881 +vn 0.4648 0.0224 -0.8851 +vn -0.4651 -0.0218 0.8850 +vn -0.1399 -0.6683 0.7306 +vn 0.2769 -0.9532 0.1216 +vn -0.3415 -0.7023 0.6247 +vn 0.4531 0.0183 -0.8913 +vn 0.4485 0.0133 -0.8937 +vn -0.4531 -0.0183 0.8912 +vn -0.4582 -0.0214 0.8886 +vn -0.4523 -0.0178 0.8917 +vn -0.4484 -0.0131 0.8937 +vn -0.4482 -0.0122 0.8939 +vn -0.4471 -0.0094 0.8944 +vn 0.0411 -0.5626 0.8257 +vn -0.5599 0.7833 -0.2702 +vn -0.2323 0.2777 -0.9322 +vn 0.2319 -0.2790 0.9319 +vn 0.4470 0.0091 -0.8945 +vn 0.4482 0.0123 -0.8938 +vn 0.1821 -0.3964 0.8998 +vn -0.4842 -0.0027 0.8750 +vn -0.4842 -0.0025 0.8749 +vn -0.2576 0.1695 -0.9513 +vn 0.2577 -0.1695 0.9513 +vn -0.4467 -0.0070 0.8946 +vn -0.4460 -0.0058 0.8950 +vn 0.4463 0.0055 -0.8949 +vn -0.4779 -0.0187 0.8782 +vn -0.4734 -0.0210 0.8806 +vn -0.5555 -0.6618 0.5035 +vn 0.4676 0.0221 -0.8837 +vn 0.4726 0.0218 -0.8810 +vn -0.4822 -0.0114 0.8760 +vn -0.4789 -0.0176 0.8777 +vn -0.7060 -0.5802 0.4061 +vn -0.8672 -0.1319 -0.4803 +vn -0.4827 -0.0104 0.8757 +vn -0.4844 -0.0032 0.8749 +vn -0.8762 -0.3367 0.3447 +vn -0.8689 -0.1162 -0.4812 +vn -0.4464 -0.0053 0.8948 +vn -0.9431 -0.0916 0.3196 +vn -0.9436 -0.0860 0.3197 +vn -0.9436 -0.0859 0.3197 +vn -0.9441 -0.0803 0.3198 +vn 0.0316 -0.9976 -0.0611 +vn 0.0314 -0.9977 -0.0608 +vn 0.0324 0.9976 -0.0606 +vn 0.0323 0.9977 -0.0604 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.973130 0.033128 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.677629 0.482142 +vt 0.409642 -0.009898 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.669677 0.481452 +vt 0.240570 0.058726 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +vt 0.296927 -0.019617 +vt 0.353285 -0.019617 +vt 0.470812 0.481452 +vt 0.296927 0.014692 +vt 0.271947 0.481452 +vt 0.353285 0.014692 +vt -0.849112 0.025953 +vt 0.468872 0.000137 +vt -0.911121 0.025955 +vt 0.273887 0.000137 +vt 0.475153 0.482142 +vt 0.353285 -0.053929 +vt 0.272677 0.482143 +vt 0.296927 -0.053929 +vt -0.911121 -0.024667 +vt 0.473178 0.006015 +vt -0.849112 -0.024667 +vt 0.274652 0.006015 +s 1 +usemtl Material.075 +f 4728/9956/3170 4729/9958/3171 4730/9961/3172 5000/10470/3172 5001/10472/3172 4731/9963/3172 4732/9965/3173 4733/9969/3174 4734/9970/3172 4735/9971/3172 +f 4733/9968/3174 4732/9966/3173 4736/9973/3175 4737/9976/3175 +f 4738/9978/3176 4739/9981/3177 4740/9984/3178 4741/9985/3176 +f 4742/9989/3179 4743/9990/3179 4729/9959/3171 4728/9955/3170 +f 4743/9991/3180 4742/9988/3180 4744/9993/3180 4745/9995/3180 +f 4746/9996/3180 4747/9999/3180 4744/9993/3180 4742/9988/3180 +f 4746/9997/3179 4742/9989/3179 4728/9955/3170 4748/10001/3179 +f 4741/9986/3175 4733/9968/3174 4737/9976/3175 4738/9979/3175 +f 4748/10002/3172 4728/9956/3172 4735/9971/3172 4734/9970/3172 4733/9969/3172 4741/9987/3172 4740/9983/3172 5004/10478/3172 5005/10480/3172 4749/10005/3172 +f 4741/9987/3172 4740/9983/3172 4734/9970/3172 4733/9969/3172 +f 4735/9972/3180 4728/9957/3180 4748/10003/3180 4749/10006/3180 +f 4999/10469/3180 4997/10465/3180 4750/10008/3180 4751/10009/3180 +f 4737/9977/3180 4736/9974/3180 4751/10009/3180 4750/10008/3180 +f 4996/10464/3180 4744/9993/3180 4747/9999/3180 5003/10477/3180 +f 4739/9982/3180 4738/9980/3180 4737/9977/3180 4750/10008/3180 +f 4743/9992/3181 4745/9994/3182 4730/9962/3183 4729/9960/3181 +f 4731/9964/3184 4751/10010/3185 4736/9975/3181 4732/9967/3181 +f 5001/10473/3186 4999/10468/3187 4751/10010/3185 4731/9964/3184 +f 4749/10007/3188 4747/10000/3189 4746/9998/3176 4748/10004/3176 +f 5005/10481/3190 5003/10476/3191 4747/10000/3189 4749/10007/3188 +f 4752/10011/3192 4753/10012/3192 4754/10013/3193 4755/10015/3194 +f 4756/10016/3195 4755/10014/3195 4757/10019/3196 4758/10021/3197 +f 4759/10023/3198 4760/10024/3198 4761/10025/3199 4762/10027/3200 +f 4761/10025/3201 4763/10028/3201 4764/10030/3201 4765/10032/3201 +f 4766/10034/3202 4767/10035/3202 4768/10036/3202 4769/10038/3202 +f 4770/10040/3203 4753/10012/3203 4771/10041/3203 4763/10029/3203 +f 4760/10024/3204 4770/10039/3204 4763/10028/3204 4761/10025/3204 +f 4772/10042/3205 4773/10043/3205 4770/10039/3204 4760/10024/3204 +f 4773/10044/3206 4754/10013/3206 4753/10012/3203 4770/10040/3203 +f 4774/10045/3207 4766/10033/3207 4769/10037/3207 4775/10046/3207 +f 4756/10017/3207 4776/10049/3207 4766/10033/3207 4774/10045/3207 +f 4776/10048/3202 4777/10050/3202 4767/10035/3202 4766/10034/3202 +f 4768/10036/3208 4762/10026/3208 4778/10052/3208 4779/10053/3208 +f 4763/10029/3209 4771/10041/3209 4780/10054/3209 4764/10031/3209 +f 4775/10046/3210 4769/10037/3210 4781/10056/3210 4782/10058/3210 +f 4767/10035/3211 4759/10022/3211 4762/10026/3211 4768/10036/3211 +f 4777/10050/3211 4783/10060/3211 4759/10022/3211 4767/10035/3211 +f 4783/10059/3212 4772/10042/3212 4760/10024/3198 4759/10023/3198 +f 4773/10043/3205 4772/10042/3205 4784/10061/3213 4785/10063/3213 +f 4777/10050/3214 4776/10048/3214 4786/10064/3214 4787/10066/3214 +f 4772/10042/3212 4783/10059/3212 4788/10067/3215 4784/10061/3216 +f 4789/10069/3192 4771/10041/3192 4753/10012/3192 4752/10011/3192 +f 4786/10065/3217 4758/10020/3217 4790/10072/3217 4791/10074/3217 +f 4788/10068/3218 4787/10066/3218 4792/10075/3218 4793/10077/3218 +f 4787/10066/3219 4786/10064/3219 4791/10073/3219 4792/10075/3219 +f 4784/10061/3216 4788/10067/3215 4793/10078/3220 4794/10079/3221 +f 4754/10013/3206 4773/10044/3206 4785/10062/3222 4795/10080/3222 +f 4783/10060/3223 4777/10050/3223 4787/10066/3223 4788/10068/3223 +f 4755/10015/3194 4754/10013/3193 4795/10080/3224 4757/10018/3224 +f 4776/10049/3225 4756/10017/3225 4758/10020/3225 4786/10065/3225 +f 4794/10079/3221 4793/10078/3220 4796/10081/3226 4797/10082/3227 +f 4790/10072/3228 4798/10083/3229 4799/10086/3230 4800/10087/3231 +f 4801/10088/3232 4794/10079/3232 4797/10082/3232 4802/10090/3232 +f 4798/10083/3233 4803/10093/3233 4804/10095/3233 4799/10086/3233 +f 4795/10080/3234 4785/10062/3234 4801/10089/3234 4803/10094/3234 +f 4757/10018/3235 4795/10080/3235 4803/10094/3235 4798/10084/3235 +f 4785/10063/3236 4784/10061/3236 4794/10079/3236 4801/10088/3236 +f 4758/10021/3197 4757/10019/3196 4798/10085/3229 4790/10071/3228 +f 4800/10087/3231 4799/10086/3230 4805/10099/3237 4806/10100/3238 +f 4802/10090/3239 4797/10082/3239 4807/10101/3239 4808/10103/3239 +f 4799/10086/3240 4804/10095/3240 4809/10104/3240 4805/10099/3240 +f 4804/10096/3241 4802/10091/3241 4808/10102/3241 4809/10105/3241 +f 4792/10075/3242 4791/10073/3242 4810/10106/3242 4811/10109/3242 +f 4793/10078/3243 4792/10076/3243 4811/10111/3243 4796/10081/3243 +f 4791/10074/3244 4790/10072/3244 4800/10087/3244 4810/10108/3244 +f 4803/10094/3245 4801/10089/3245 4802/10092/3245 4804/10097/3245 +f 4809/10105/3246 4808/10102/3246 4812/10113/3246 4813/10114/3246 +f 4814/10116/3247 4806/10100/3247 4815/10117/3247 4816/10118/3247 +f 4817/10120/3248 4818/10122/3248 4819/10124/3248 4820/10126/3248 +f 4818/10122/3249 4814/10115/3249 4816/10119/3249 4819/10124/3249 +f 4797/10082/3227 4796/10081/3226 4817/10121/3250 4807/10101/3251 +f 4811/10110/3252 4810/10107/3252 4814/10115/3252 4818/10122/3252 +f 4796/10081/3253 4811/10111/3253 4818/10123/3253 4817/10121/3253 +f 4810/10108/3254 4800/10087/3254 4806/10100/3254 4814/10116/3254 +f 4821/10127/3255 4822/10129/3255 4823/10131/3256 4824/10132/3256 +f 4812/10112/3257 4825/10135/3257 4826/10136/3257 4827/10138/3257 +f 4828/10141/3258 4829/10143/3258 4830/10145/3258 4831/10146/3258 +f 4816/10118/3259 4815/10117/3259 4832/10149/3259 4833/10151/3259 +f 4805/10098/3260 4809/10105/3260 4813/10114/3260 4834/10155/3260 +f 4808/10103/3261 4807/10101/3261 4825/10135/3261 4812/10112/3261 +f 4806/10100/3238 4805/10099/3237 4834/10154/3262 4815/10117/3263 +f 4807/10101/3251 4817/10121/3250 4820/10125/3264 4825/10135/3265 +f 4765/10032/3266 4764/10030/3266 4835/10156/3266 4836/10158/3266 +f 4780/10054/3267 4837/10159/3267 4838/10161/3267 4839/10165/3267 +f 4781/10055/3268 4779/10053/3268 4840/10166/3268 4841/10168/3268 +f 4837/10160/3269 4782/10057/3270 4842/10170/3271 4838/10162/3272 +f 4771/10041/3273 4789/10069/3273 4837/10159/3273 4780/10054/3273 +f 4762/10027/3200 4761/10025/3199 4765/10032/3274 4778/10051/3275 +f 4769/10038/3276 4768/10036/3276 4779/10053/3276 4781/10055/3276 +f 4789/10070/3277 4775/10047/3277 4782/10057/3270 4837/10160/3269 +f 4839/10164/3278 4838/10163/3278 4843/10172/3278 4844/10175/3278 +f 4841/10168/3279 4840/10166/3279 4845/10176/3279 4846/10179/3279 +f 4838/10163/3272 4842/10171/3271 4847/10182/3280 4843/10172/3281 +f 4842/10171/3282 4841/10169/3282 4846/10180/3282 4847/10182/3282 +f 4778/10051/3275 4765/10032/3274 4836/10158/3283 4848/10184/3284 +f 4764/10031/3285 4780/10054/3285 4839/10165/3285 4835/10157/3285 +f 4779/10053/3286 4778/10052/3286 4848/10183/3286 4840/10166/3286 +f 4782/10058/3287 4781/10056/3287 4841/10169/3287 4842/10171/3287 +f 4847/10182/3288 4846/10180/3288 4849/10185/3288 4850/10187/3288 +f 4845/10177/3289 4851/10188/3289 4852/10189/3289 4853/10191/3289 +f 4854/10193/3290 4844/10173/3290 4855/10196/3290 4856/10198/3290 +f 4851/10188/3291 4857/10200/3292 4858/10201/3293 4852/10189/3294 +f 4836/10158/3295 4835/10156/3295 4854/10195/3295 4857/10200/3295 +f 4848/10184/3284 4836/10158/3283 4857/10200/3292 4851/10188/3291 +f 4835/10157/3296 4839/10165/3296 4844/10174/3296 4854/10194/3296 +f 4840/10167/3297 4848/10184/3297 4851/10188/3297 4845/10177/3297 +f 4856/10198/3298 4855/10196/3298 4829/10143/3298 4828/10141/3298 +f 4852/10189/3294 4858/10201/3293 4859/10202/3299 4860/10204/3299 +f 4858/10201/3300 4856/10199/3300 4828/10142/3301 4859/10202/3301 +f 4855/10196/3302 4861/10205/3302 4821/10128/3303 4829/10143/3304 +f 4843/10172/3281 4847/10182/3280 4850/10187/3305 4861/10206/3306 +f 4846/10181/3307 4845/10178/3307 4853/10192/3307 4849/10186/3307 +f 4844/10175/3308 4843/10172/3308 4861/10206/3308 4855/10197/3308 +f 4857/10200/3309 4854/10195/3309 4856/10199/3309 4858/10201/3309 +f 4862/10207/3310 4863/10209/3310 4864/10210/3310 4865/10212/3310 +f 4815/10117/3263 4834/10154/3262 4866/10215/3311 4832/10149/3311 +f 4863/10209/3312 4860/10203/3312 4867/10218/3313 4864/10210/3313 +f 4825/10135/3265 4820/10125/3264 4868/10221/3314 4826/10136/3314 +f 4853/10192/3315 4852/10190/3315 4860/10203/3312 4863/10209/3312 +f 4850/10187/3316 4849/10185/3316 4862/10208/3317 4822/10129/3318 +f 4861/10206/3306 4850/10187/3305 4822/10129/3255 4821/10127/3255 +f 4849/10186/3319 4853/10192/3319 4863/10209/3319 4862/10207/3319 +f 4869/10224/3320 4827/10139/3320 4826/10137/3320 4868/10222/3320 +f 4833/10152/3320 4869/10224/3320 4868/10222/3320 4870/10225/3320 +f 4832/10150/3321 4866/10216/3320 4869/10224/3320 4833/10152/3320 +f 4866/10216/3320 4871/10227/3320 4827/10139/3320 4869/10224/3320 +f 4872/10229/3322 4831/10147/3322 4830/10144/3323 4824/10133/3324 +f 4865/10213/3322 4872/10229/3322 4824/10133/3324 4823/10130/3324 +f 4864/10211/3322 4867/10219/3322 4872/10229/3322 4865/10213/3322 +f 4867/10219/3322 4873/10230/3322 4831/10147/3322 4872/10229/3322 +f 4820/10126/3325 4819/10124/3325 4870/10226/3325 4868/10223/3325 +f 4860/10204/3299 4859/10202/3299 4873/10231/3326 4867/10220/3326 +f 4834/10155/3327 4813/10114/3327 4871/10228/3327 4866/10217/3327 +f 4822/10129/3318 4862/10208/3317 4865/10214/3328 4823/10131/3328 +f 4819/10124/3329 4816/10119/3329 4833/10153/3329 4870/10226/3329 +f 4859/10202/3301 4828/10142/3301 4831/10148/3330 4873/10231/3330 +f 4813/10114/3331 4812/10113/3331 4827/10140/3331 4871/10228/3331 +f 4829/10143/3304 4821/10128/3303 4824/10134/3332 4830/10145/3332 +f 4874/10233/3192 4875/10234/3192 4876/10235/3193 4877/10237/3194 +f 4878/10238/3333 4877/10236/3333 4879/10240/3334 4880/10241/3335 +f 4881/10242/3208 4882/10244/3208 4883/10247/3208 4884/10249/3208 +f 4885/10251/3202 4886/10252/3202 4881/10243/3202 4887/10255/3202 +f 4888/10257/3203 4875/10234/3203 4889/10258/3203 4890/10259/3203 +f 4891/10261/3204 4888/10256/3204 4890/10260/3204 4892/10262/3204 +f 4893/10263/3204 4894/10264/3204 4888/10256/3204 4891/10261/3204 +f 4894/10265/3206 4876/10235/3206 4875/10234/3203 4888/10257/3203 +f 4895/10266/3336 4885/10250/3336 4887/10254/3336 4896/10267/3336 +f 4878/10238/3336 4897/10269/3336 4885/10250/3336 4895/10266/3336 +f 4897/10268/3202 4898/10270/3202 4886/10252/3202 4885/10251/3202 +f 4890/10259/3209 4889/10258/3209 4899/10272/3209 4900/10274/3209 +f 4896/10267/3337 4887/10254/3337 4901/10275/3337 4902/10277/3337 +f 4903/10278/3338 4896/10267/3339 4902/10277/3340 4904/10280/3341 +f 4886/10253/3211 4905/10282/3211 4882/10244/3211 4881/10242/3211 +f 4898/10271/3211 4906/10284/3211 4905/10282/3211 4886/10253/3211 +f 4894/10264/3213 4893/10263/3213 4907/10285/3213 4908/10287/3213 +f 4898/10270/3214 4897/10268/3214 4909/10288/3214 4910/10290/3214 +f 4893/10263/3342 4906/10283/3342 4911/10293/3343 4907/10285/3344 +f 4895/10266/3345 4874/10232/3345 4877/10236/3333 4878/10238/3333 +f 4896/10267/3339 4903/10278/3338 4874/10232/3345 4895/10266/3345 +f 4903/10279/3192 4889/10258/3192 4875/10234/3192 4874/10233/3192 +f 4912/10294/3234 4908/10286/3234 4913/10296/3234 4914/10298/3234 +f 4909/10289/3346 4880/10241/3346 4915/10300/3346 4916/10302/3346 +f 4911/10292/3218 4910/10291/3218 4917/10303/3218 4918/10306/3218 +f 4910/10290/3347 4909/10288/3347 4916/10301/3347 4917/10305/3347 +f 4876/10235/3206 4894/10265/3206 4908/10286/3222 4912/10294/3222 +f 4906/10284/3223 4898/10271/3223 4910/10291/3223 4911/10292/3223 +f 4877/10237/3194 4876/10235/3193 4912/10294/3224 4879/10239/3224 +f 4897/10269/3348 4878/10238/3348 4880/10241/3348 4909/10289/3348 +f 4918/10307/3243 4917/10304/3243 4919/10311/3243 4920/10312/3243 +f 4917/10305/3242 4916/10301/3242 4921/10313/3242 4919/10309/3242 +f 4922/10317/3221 4918/10307/3349 4920/10312/3350 4923/10318/3227 +f 4915/10300/3351 4924/10320/3352 4925/10321/3353 4926/10322/3354 +f 4879/10239/3235 4912/10294/3235 4914/10298/3235 4924/10319/3235 +f 4908/10287/3236 4907/10285/3236 4922/10316/3236 4913/10295/3236 +f 4880/10241/3335 4879/10240/3334 4924/10320/3352 4915/10300/3351 +f 4907/10285/3344 4911/10293/3343 4918/10308/3349 4922/10316/3221 +f 4926/10322/3354 4925/10321/3353 4927/10324/3355 4928/10325/3356 +f 4929/10328/3239 4923/10318/3239 4930/10329/3239 4931/10330/3239 +f 4925/10321/3240 4932/10334/3240 4933/10335/3240 4927/10324/3240 +f 4932/10332/3241 4929/10326/3241 4931/10331/3241 4933/10336/3241 +f 4916/10302/3357 4915/10300/3357 4926/10322/3357 4921/10315/3357 +f 4914/10298/3358 4913/10296/3358 4929/10327/3358 4932/10333/3358 +f 4924/10320/3233 4914/10299/3233 4932/10334/3233 4925/10321/3233 +f 4913/10297/3232 4922/10317/3232 4923/10318/3232 4929/10328/3232 +f 4931/10330/3359 4930/10329/3359 4934/10337/3359 4935/10338/3359 +f 4927/10323/3260 4933/10336/3260 4936/10340/3260 4937/10342/3260 +f 4933/10336/3246 4931/10331/3246 4935/10339/3246 4936/10340/3246 +f 4938/10343/3360 4928/10325/3360 4939/10345/3360 4940/10346/3360 +f 4923/10318/3227 4920/10312/3350 4941/10348/3361 4930/10329/3362 +f 4919/10310/3252 4921/10314/3252 4938/10344/3252 4942/10351/3252 +f 4920/10312/3253 4919/10311/3253 4942/10350/3253 4941/10348/3253 +f 4921/10315/3363 4926/10322/3363 4928/10325/3363 4938/10343/3363 +f 4943/10352/3364 4944/10354/3364 4945/10356/3365 4946/10357/3365 +f 4935/10338/3366 4934/10337/3366 4947/10360/3366 4948/10362/3366 +f 4949/10366/3258 4950/10368/3258 4951/10370/3258 4952/10371/3258 +f 4940/10346/3367 4939/10345/3367 4953/10375/3367 4954/10377/3367 +f 4928/10325/3356 4927/10324/3355 4937/10341/3368 4939/10345/3369 +f 4930/10329/3362 4941/10348/3361 4955/10381/3370 4934/10337/3265 +f 4942/10351/3249 4938/10344/3249 4940/10347/3249 4956/10383/3249 +f 4941/10349/3248 4942/10351/3248 4956/10383/3248 4955/10382/3248 +f 4899/10272/3267 4904/10281/3267 4957/10384/3267 4958/10386/3267 +f 4901/10276/3268 4884/10248/3268 4959/10390/3268 4960/10392/3268 +f 4904/10280/3341 4902/10277/3340 4961/10393/3371 4957/10385/3372 +f 4902/10277/3373 4901/10275/3373 4960/10391/3373 4961/10393/3373 +f 4892/10262/3201 4890/10260/3201 4900/10273/3201 4962/10394/3201 +f 4889/10258/3273 4903/10279/3273 4904/10281/3273 4899/10272/3273 +f 4882/10245/3374 4892/10262/3374 4962/10394/3274 4883/10246/3375 +f 4887/10255/3276 4881/10243/3276 4884/10248/3276 4901/10276/3276 +f 4957/10385/3372 4961/10393/3371 4963/10395/3376 4964/10396/3377 +f 4961/10393/3378 4960/10391/3378 4965/10398/3378 4963/10395/3378 +f 4959/10388/3297 4966/10402/3297 4967/10403/3297 4968/10404/3297 +f 4969/10408/3296 4958/10386/3296 4970/10410/3296 4971/10413/3296 +f 4962/10394/3266 4900/10273/3266 4969/10407/3266 4972/10416/3266 +f 4883/10246/3375 4962/10394/3274 4972/10416/3283 4966/10400/3284 +f 4900/10274/3285 4899/10272/3285 4958/10386/3285 4969/10408/3285 +f 4884/10249/3286 4883/10247/3286 4966/10401/3286 4959/10389/3286 +f 4968/10404/3289 4967/10403/3289 4973/10418/3289 4974/10420/3289 +f 4971/10414/3290 4970/10411/3290 4975/10423/3290 4976/10425/3290 +f 4967/10403/3291 4977/10426/3292 4978/10427/3293 4973/10418/3294 +f 4977/10426/3309 4971/10415/3309 4976/10424/3309 4978/10427/3309 +f 4960/10392/3279 4959/10390/3279 4968/10405/3279 4965/10397/3279 +f 4958/10387/3278 4957/10385/3278 4964/10396/3278 4970/10412/3278 +f 4972/10417/3295 4969/10409/3295 4971/10415/3295 4977/10426/3295 +f 4966/10402/3284 4972/10417/3283 4977/10426/3292 4967/10403/3291 +f 4978/10427/3300 4976/10424/3300 4949/10367/3301 4979/10428/3301 +f 4975/10423/3302 4980/10429/3302 4943/10353/3303 4950/10368/3304 +f 4981/10431/3379 4974/10421/3379 4982/10433/3379 4983/10434/3379 +f 4980/10430/3380 4984/10436/3381 4944/10354/3364 4943/10352/3364 +f 4963/10395/3382 4965/10398/3382 4981/10432/3382 4984/10436/3382 +f 4964/10396/3377 4963/10395/3376 4984/10436/3381 4980/10430/3380 +f 4965/10399/3307 4968/10406/3307 4974/10421/3307 4981/10431/3307 +f 4970/10412/3308 4964/10396/3308 4980/10430/3308 4975/10422/3308 +f 4983/10434/3383 4982/10433/3383 4985/10437/3383 4986/10439/3383 +f 4939/10345/3369 4937/10341/3368 4987/10443/3384 4953/10375/3384 +f 4934/10337/3265 4955/10381/3370 4988/10446/3314 4947/10360/3314 +f 4982/10433/3312 4989/10449/3312 4990/10451/3313 4985/10437/3313 +f 4973/10418/3294 4978/10427/3293 4979/10428/3299 4989/10450/3299 +f 4976/10425/3298 4975/10423/3298 4950/10368/3298 4949/10366/3298 +f 4974/10421/3315 4973/10419/3315 4989/10449/3312 4982/10433/3312 +f 4984/10436/3385 4981/10432/3385 4983/10435/3386 4944/10354/3387 +f 4991/10454/3320 4948/10363/3320 4947/10361/3320 4988/10447/3320 +f 4954/10378/3320 4991/10454/3320 4988/10447/3320 4992/10456/3320 +f 4953/10376/3321 4987/10444/3320 4991/10455/3320 4954/10379/3320 +f 4987/10444/3320 4993/10458/3320 4948/10364/3320 4991/10455/3320 +f 4994/10460/3322 4952/10372/3322 4951/10369/3323 4946/10358/3324 +f 4986/10440/3322 4994/10460/3322 4946/10358/3324 4945/10355/3324 +f 4985/10438/3322 4990/10452/3322 4994/10461/3322 4986/10441/3322 +f 4990/10452/3322 4995/10462/3322 4952/10373/3322 4994/10461/3322 +f 4955/10382/3325 4956/10383/3325 4992/10457/3325 4988/10448/3325 +f 4989/10450/3299 4979/10428/3299 4995/10463/3326 4990/10453/3326 +f 4937/10342/3327 4936/10340/3327 4993/10459/3327 4987/10445/3327 +f 4944/10354/3387 4983/10435/3386 4986/10442/3388 4945/10356/3388 +f 4956/10383/3329 4940/10347/3329 4954/10380/3329 4992/10457/3329 +f 4979/10428/3301 4949/10367/3301 4952/10374/3330 4995/10463/3330 +f 4936/10340/3331 4935/10339/3331 4948/10365/3331 4993/10459/3331 +f 4950/10368/3304 4943/10353/3303 4946/10359/3332 4951/10370/3332 +f 4740/9984/3178 4739/9981/3177 5002/10474/3389 5004/10479/3390 +f 5004/10479/3390 5002/10474/3389 5003/10476/3191 5005/10481/3190 +f 4730/9962/3183 4745/9994/3182 4998/10466/3391 5000/10471/3392 +f 5000/10471/3392 4998/10466/3391 4999/10468/3187 5001/10473/3186 +f 4750/10008/3180 4997/10465/3180 5002/10475/3180 4739/9982/3180 +f 4997/10465/3180 4996/10464/3180 5003/10477/3180 5002/10475/3180 +f 4745/9995/3180 4744/9993/3180 4996/10464/3180 4998/10467/3180 +f 4998/10467/3180 4996/10464/3180 4997/10465/3180 4999/10469/3180 +o Chair.013 +v 6.775808 0.705170 6.577875 +v 6.775808 0.719739 6.577875 +v 6.798890 0.719739 6.533952 +v 6.985870 0.719739 6.178140 +v 7.008952 0.719739 6.134217 +v 7.008952 0.705170 6.134217 +v 6.985870 0.705170 6.178140 +v 6.798890 0.705170 6.533952 +v 7.349434 0.719739 6.313142 +v 7.349434 0.705170 6.313142 +v 7.349434 0.690600 6.313142 +v 7.328213 0.690600 6.353524 +v 6.985870 0.690600 6.178140 +v 7.008952 0.690600 6.134217 +v 7.116290 0.705170 6.756800 +v 7.116290 0.719739 6.756800 +v 7.137511 0.705170 6.716417 +v 7.137511 0.719739 6.716417 +v 7.116290 0.690600 6.756800 +v 7.137511 0.690600 6.716417 +v 6.775808 0.690600 6.577875 +v 6.798890 0.690600 6.533952 +v 7.328213 0.705170 6.353524 +v 7.328213 0.719739 6.353524 +v 7.179630 0.727848 6.221457 +v 7.182347 0.733439 6.216287 +v 7.066308 0.733439 6.155309 +v 7.063591 0.727848 6.160479 +v 7.063673 0.719764 6.160322 +v 7.034913 0.727738 6.145409 +v 7.037309 0.720088 6.146468 +v 7.188790 0.719691 6.204025 +v 7.188709 0.727775 6.204181 +v 7.304746 0.727775 6.265159 +v 7.304828 0.719691 6.265003 +v 7.302145 0.733616 6.270109 +v 7.330385 0.729196 6.284949 +v 7.330917 0.723843 6.278912 +v 7.182313 0.713923 6.216352 +v 7.186073 0.714099 6.209196 +v 7.302111 0.714099 6.270174 +v 7.298350 0.713923 6.277330 +v 7.186107 0.733616 6.209131 +v 7.298384 0.733439 6.277265 +v 7.072670 0.727775 6.143202 +v 7.070069 0.733616 6.148152 +v 7.179712 0.719764 6.221301 +v 7.295749 0.719764 6.282279 +v 7.066275 0.713923 6.155373 +v 7.070035 0.714099 6.148217 +v 7.328136 0.716434 6.277252 +v 7.323439 0.711309 6.281382 +v 7.326561 0.729035 6.292073 +v 7.319616 0.711148 6.288505 +v 7.319084 0.716501 6.294541 +v 7.072752 0.719691 6.143046 +v 7.044013 0.727669 6.128142 +v 7.039740 0.733196 6.132214 +v 7.041582 0.714561 6.142397 +v 7.045291 0.714728 6.135214 +v 7.046408 0.720019 6.129203 +v 7.295667 0.727848 6.282436 +v 7.012268 0.710765 6.133308 +v 7.018033 0.706145 6.130022 +v 7.021698 0.706285 6.122816 +v 7.021386 0.710707 6.116053 +v 7.016925 0.717101 6.113908 +v 7.036030 0.733029 6.139397 +v 7.000373 0.692755 6.105011 +v 6.994317 0.697206 6.102027 +v 7.007806 0.717159 6.131164 +v 6.985184 0.697246 6.119275 +v 6.991240 0.692796 6.122258 +v 7.011160 0.721720 6.117195 +v 6.987399 0.700422 6.104709 +v 7.007494 0.721581 6.124401 +v 6.983768 0.700325 6.111933 +v 6.969475 0.670140 6.111021 +v 6.976485 0.668111 6.114504 +v 6.978617 0.670122 6.093777 +v 6.971011 0.671588 6.096097 +v 6.967402 0.671544 6.103333 +v 6.998158 0.689580 6.119577 +v 7.001788 0.689677 6.112353 +v 6.957181 0.635583 6.088830 +v 6.953573 0.635544 6.096066 +v 6.984091 0.666644 6.112185 +v 6.962749 0.632539 6.107286 +v 6.970394 0.631255 6.104987 +v 6.985626 0.668092 6.097261 +v 6.987700 0.666689 6.104950 +v 6.974002 0.631294 6.097751 +v 6.971890 0.632523 6.090043 +v 7.383489 0.639189 6.328587 +v 7.376464 0.638242 6.324695 +v 7.412850 0.286835 6.343817 +v 7.419876 0.287781 6.347708 +v 6.964828 0.634299 6.086530 +v 6.888094 0.291279 6.046207 +v 6.880448 0.292562 6.048506 +v 7.395037 0.639865 6.318925 +v 7.391122 0.639844 6.325999 +v 7.427508 0.288436 6.345121 +v 7.431424 0.288457 6.338046 +v 6.886015 0.289518 6.066963 +v 6.893661 0.288235 6.064664 +v 6.955685 0.634315 6.103774 +v 7.357777 0.715362 6.299344 +v 7.356587 0.711391 6.292402 +v 7.321864 0.723910 6.296203 +v 7.347555 0.711440 6.309703 +v 7.353902 0.715242 6.306440 +v 7.345074 0.702093 6.292751 +v 7.341199 0.701973 6.299847 +v 7.342390 0.705944 6.306789 +v 7.366765 0.693019 6.319798 +v 7.374155 0.694863 6.317083 +v 7.361718 0.688486 6.301498 +v 7.357811 0.688428 6.308577 +v 7.360091 0.690354 6.316091 +v 7.351420 0.705894 6.289488 +v 7.371167 0.661018 6.315596 +v 7.373617 0.662267 6.323199 +v 7.369109 0.690330 6.298783 +v 7.382633 0.662252 6.305890 +v 7.375081 0.661055 6.308520 +v 7.378063 0.694921 6.310005 +v 7.388078 0.665194 6.324399 +v 7.391990 0.665231 6.317324 +v 7.375782 0.692995 6.302489 +v 7.389542 0.663982 6.309720 +v 7.392503 0.639180 6.311276 +v 7.385479 0.638234 6.307386 +v 7.380526 0.663997 6.327029 +v 7.373930 0.637558 6.317047 +v 7.377846 0.637579 6.309973 +v 7.414233 0.286171 6.329094 +v 7.410317 0.286151 6.336169 +v 6.878952 0.291295 6.063450 +v 7.421865 0.286826 6.326507 +v 6.895157 0.289502 6.049719 +v 6.887054 0.290399 6.056584 +v 6.897269 0.288274 6.057427 +v 6.876840 0.292524 6.055742 +v 7.420871 0.287304 6.337107 +v 7.428890 0.287773 6.330398 +v 6.936086 0.727848 6.684905 +v 6.938803 0.733439 6.679735 +v 6.822765 0.733439 6.618756 +v 6.820047 0.727848 6.623927 +v 6.820129 0.719764 6.623771 +v 6.791369 0.727738 6.608856 +v 6.793765 0.720088 6.609916 +v 7.058567 0.714099 6.733622 +v 7.061284 0.719691 6.728451 +v 7.084593 0.716434 6.740700 +v 7.079895 0.711309 6.744830 +v 6.938769 0.713923 6.679800 +v 6.942530 0.714099 6.672643 +v 7.054806 0.713923 6.740777 +v 6.942564 0.733616 6.672579 +v 7.054841 0.733439 6.740713 +v 7.058601 0.733616 6.733557 +v 6.945165 0.727775 6.667628 +v 7.061202 0.727775 6.728607 +v 6.829126 0.727775 6.606650 +v 6.826525 0.733616 6.611600 +v 6.936168 0.719764 6.684750 +v 7.052205 0.719764 6.745728 +v 6.822731 0.713923 6.618821 +v 6.826491 0.714099 6.611665 +v 7.083017 0.729035 6.755520 +v 7.086841 0.729196 6.748397 +v 7.076072 0.711148 6.751953 +v 7.075539 0.716501 6.757990 +v 7.052123 0.727848 6.745883 +v 7.078320 0.723910 6.759650 +v 6.945247 0.719691 6.667473 +v 6.829208 0.719691 6.606494 +v 6.800468 0.727669 6.591590 +v 6.796196 0.733196 6.595662 +v 6.798038 0.714561 6.605844 +v 6.801748 0.714728 6.598662 +v 6.802865 0.720019 6.592650 +v 6.792486 0.733029 6.602844 +v 6.767615 0.721720 6.580643 +v 6.763950 0.721581 6.587849 +v 6.768723 0.710765 6.596756 +v 6.774488 0.706145 6.593469 +v 6.778154 0.706285 6.586263 +v 6.777842 0.710707 6.579501 +v 6.758244 0.689677 6.575800 +v 6.756829 0.692755 6.568459 +v 6.754613 0.689580 6.583025 +v 6.773381 0.717101 6.577355 +v 6.750772 0.697206 6.565475 +v 6.764262 0.717159 6.594611 +v 6.741640 0.697246 6.582723 +v 6.747696 0.692796 6.585707 +v 6.725932 0.670140 6.574468 +v 6.732941 0.668111 6.577953 +v 6.743855 0.700422 6.568157 +v 6.735074 0.670122 6.557225 +v 6.727467 0.671588 6.559545 +v 6.740225 0.700325 6.575381 +v 6.723858 0.671544 6.566780 +v 6.721282 0.634299 6.549977 +v 6.713637 0.635583 6.552277 +v 6.710029 0.635544 6.559513 +v 6.712141 0.634315 6.567221 +v 6.740548 0.666644 6.575633 +v 6.719204 0.632539 6.570735 +v 6.726850 0.631255 6.568435 +v 6.742082 0.668092 6.560709 +v 6.744157 0.666689 6.568398 +v 7.139946 0.639189 6.792034 +v 7.132920 0.638242 6.788144 +v 7.169307 0.286835 6.807265 +v 7.176332 0.287781 6.811156 +v 6.644551 0.291279 6.509655 +v 6.636905 0.292562 6.511953 +v 7.151494 0.639865 6.782372 +v 7.147578 0.639844 6.789447 +v 7.183965 0.288436 6.808568 +v 7.187881 0.288457 6.801494 +v 6.642471 0.289518 6.530411 +v 6.650117 0.288235 6.528111 +v 6.728346 0.632523 6.553491 +v 6.730458 0.631294 6.561199 +v 7.104011 0.711440 6.773150 +v 7.110358 0.715242 6.769888 +v 7.101530 0.702093 6.756199 +v 7.097655 0.701973 6.763295 +v 7.098845 0.705944 6.770237 +v 7.087374 0.723843 6.742360 +v 7.116547 0.690354 6.779540 +v 7.123221 0.693019 6.783246 +v 7.114267 0.688428 6.772024 +v 7.107876 0.705894 6.752935 +v 7.125565 0.690330 6.762231 +v 7.118175 0.688486 6.764946 +v 7.114233 0.715362 6.762792 +v 7.130611 0.694863 6.780531 +v 7.134520 0.694921 6.773452 +v 7.113043 0.711391 6.755849 +v 7.139089 0.662252 6.769338 +v 7.131537 0.661055 6.771967 +v 7.144534 0.665194 6.787847 +v 7.148447 0.665231 6.780771 +v 7.132239 0.692995 6.765937 +v 7.145998 0.663982 6.773167 +v 7.148960 0.639180 6.774724 +v 7.136981 0.663997 6.790477 +v 7.127624 0.661018 6.779044 +v 7.134302 0.637579 6.773421 +v 7.130387 0.637558 6.780495 +v 7.130073 0.662267 6.786647 +v 7.170689 0.286171 6.792542 +v 7.166774 0.286151 6.799617 +v 6.635408 0.291295 6.526897 +v 6.651613 0.289502 6.513167 +v 7.141935 0.638234 6.770833 +v 7.178322 0.286826 6.789955 +v 6.643510 0.290399 6.520033 +v 6.653725 0.288274 6.520875 +v 6.633296 0.292524 6.519189 +v 7.177326 0.287304 6.800555 +v 7.185347 0.287773 6.793845 +v 7.201078 0.686473 6.595453 +v 7.264645 0.686473 6.474489 +v 7.201078 0.701042 6.595453 +v 7.264645 0.701042 6.474489 +v 6.861217 0.701042 6.415348 +v 6.923544 0.701042 6.296744 +v 7.264645 0.671903 6.474489 +v 7.201078 0.671903 6.595453 +v 6.923543 0.671903 6.296744 +v 6.861217 0.671903 6.415348 +vn -0.2160 -0.0000 0.9764 +vn -0.6752 -0.7071 0.2100 +vn -0.8852 -0.0000 -0.4652 +vn -0.2100 -0.7071 -0.6752 +vn 0.0150 0.6667 -0.7452 +vn 0.4652 -0.0000 -0.8852 +vn -0.0000 -1.0000 -0.0000 +vn 0.0313 -0.9977 -0.0605 +vn 0.0317 -0.9976 -0.0613 +vn -0.4652 -0.0000 0.8852 +vn 0.8852 -0.0000 0.4652 +vn -0.0000 1.0000 -0.0000 +vn 0.0321 0.9977 -0.0601 +vn 0.0325 0.9976 -0.0609 +vn -0.0317 0.9976 0.0613 +vn -0.0313 0.9977 0.0605 +vn -0.0314 0.9977 0.0608 +vn -0.0316 0.9976 0.0611 +vn -0.0325 -0.9976 0.0609 +vn -0.0321 -0.9977 0.0601 +vn -0.0323 -0.9977 0.0604 +vn -0.0324 -0.9976 0.0606 +vn -0.3217 0.7224 0.6121 +vn -0.3220 0.7268 0.6066 +vn -0.3220 0.7269 0.6066 +vn -0.4651 -0.0225 0.8850 +vn -0.4648 -0.0215 0.8851 +vn -0.4593 -0.0204 0.8880 +vn 0.4651 0.0218 -0.8850 +vn 0.4663 0.0219 -0.8844 +vn 0.4664 0.0219 -0.8843 +vn 0.4156 0.6937 -0.5882 +vn 0.0101 -0.9998 -0.0193 +vn -0.0102 0.9998 0.0194 +vn 0.3360 0.6915 -0.6394 +vn 0.3315 0.6962 -0.6367 +vn -0.0154 0.9997 0.0163 +vn -0.3360 -0.6915 0.6395 +vn 0.2404 -0.7257 -0.6446 +vn 0.1115 0.9903 0.0826 +vn -0.4058 -0.6955 0.5930 +vn 0.3217 -0.7223 -0.6122 +vn 0.4651 0.0221 -0.8850 +vn 0.3269 0.7008 -0.6340 +vn -0.0102 -0.9995 -0.0292 +vn 0.4590 0.0214 -0.8882 +vn 0.4647 0.0224 -0.8852 +vn -0.1400 -0.6683 0.7306 +vn 0.5161 -0.6972 -0.4976 +vn 0.2770 -0.9532 0.1216 +vn 0.4533 0.0184 -0.8912 +vn 0.4582 0.0214 -0.8886 +vn -0.0206 0.9997 0.0132 +vn 0.3058 -0.7326 -0.6081 +vn -0.3223 0.7313 0.6011 +vn -0.3415 -0.7022 0.6247 +vn 0.4485 0.0132 -0.8937 +vn 0.4522 0.0177 -0.8917 +vn -0.4536 -0.0175 0.8910 +vn -0.4585 -0.0204 0.8884 +vn -0.4530 -0.0172 0.8914 +vn -0.4491 -0.0124 0.8934 +vn -0.0517 0.5509 -0.8330 +vn -0.7174 0.5748 0.3936 +vn -0.3062 0.9421 -0.1369 +vn -0.5314 0.6901 0.4913 +vn 0.1266 0.6614 -0.7393 +vn -0.4488 -0.0119 0.8936 +vn -0.4475 -0.0090 0.8942 +vn -0.1888 0.3812 -0.9050 +vn -0.8605 0.3978 0.3184 +vn -0.7546 0.5403 -0.3725 +vn 0.5354 -0.8044 0.2575 +vn 0.7049 -0.5868 -0.3984 +vn 0.0410 -0.5625 0.8258 +vn -0.5599 0.7833 -0.2703 +vn -0.8219 0.3980 -0.4076 +vn 0.2318 -0.2790 0.9319 +vn 0.9094 -0.2912 -0.2970 +vn 0.8209 -0.4005 0.4071 +vn 0.4470 0.0092 -0.8945 +vn 0.4482 0.0122 -0.8938 +vn 0.7374 -0.5692 0.3636 +vn 0.8520 -0.4135 -0.3211 +vn 0.1820 -0.3964 0.8999 +vn -0.4843 -0.0027 0.8749 +vn -0.4843 -0.0025 0.8749 +vn -0.2576 0.1694 -0.9513 +vn 0.8689 0.1162 0.4812 +vn 0.2576 -0.1695 0.9513 +vn -0.9098 0.2899 0.2969 +vn -0.2322 0.2777 -0.9322 +vn -0.4479 -0.0079 0.8940 +vn -0.4471 -0.0056 0.8945 +vn 0.4463 0.0054 -0.8949 +vn 0.4467 0.0070 -0.8946 +vn 0.5804 0.6472 -0.4943 +vn -0.0527 0.6748 0.7361 +vn -0.3024 -0.9356 -0.1822 +vn -0.4678 -0.0216 0.8836 +vn -0.4724 -0.0208 0.8812 +vn -0.4776 -0.0183 0.8784 +vn -0.4732 -0.0205 0.8807 +vn -0.2306 0.7239 0.6502 +vn 0.4679 0.0227 -0.8835 +vn 0.4727 0.0218 -0.8810 +vn -0.0918 -0.9932 -0.0722 +vn -0.4676 -0.0222 0.8837 +vn 0.1242 0.5630 0.8171 +vn -0.5093 -0.8103 -0.2898 +vn -0.4819 -0.0112 0.8762 +vn -0.4786 -0.0173 0.8779 +vn -0.7060 -0.5801 0.4062 +vn 0.4734 0.0211 -0.8806 +vn 0.4779 0.0187 -0.8782 +vn 0.3513 0.9128 0.2082 +vn 0.0752 -0.6896 -0.7203 +vn -0.5555 -0.6617 0.5036 +vn -0.8762 -0.3366 0.3449 +vn -0.2511 -0.3512 -0.9020 +vn 0.7721 0.4682 0.4298 +vn 0.4822 0.0114 -0.8760 +vn 0.4789 0.0175 -0.8777 +vn 0.4827 0.0104 -0.8757 +vn 0.4844 0.0032 -0.8749 +vn 0.7410 0.5405 -0.3984 +vn 0.5794 0.7463 0.3275 +vn -0.0966 -0.6033 -0.7916 +vn 0.8669 0.1344 0.4801 +vn 0.4842 0.0027 -0.8749 +vn 0.9429 0.0928 -0.3198 +vn 0.9435 0.0866 -0.3199 +vn 0.3128 0.0969 0.9449 +vn 0.3131 0.0905 0.9454 +vn 0.3131 0.0904 0.9454 +vn -0.4835 -0.0030 0.8754 +vn -0.4819 -0.0100 0.8762 +vn -0.7655 -0.4821 -0.4262 +vn 0.2535 0.3437 0.9042 +vn 0.8792 0.3294 -0.3442 +vn -0.8688 -0.1162 -0.4813 +vn -0.4463 -0.0053 0.8948 +vn -0.3132 -0.0898 -0.9454 +vn -0.3134 -0.0839 -0.9459 +vn 0.4464 0.0053 -0.8948 +vn -0.3130 -0.0956 -0.9449 +vn -0.9430 -0.0916 0.3198 +vn -0.9436 -0.0860 0.3199 +vn -0.9436 -0.0859 0.3199 +vn -0.8671 -0.1319 -0.4804 +vn -0.1945 -0.9756 -0.1022 +vn -0.1945 -0.9756 -0.1023 +vn 0.1037 -0.9931 0.0545 +vn 0.1037 -0.9931 0.0544 +vn 0.1036 -0.9931 0.0544 +vn 0.9417 -0.1770 -0.2862 +vn 0.4842 0.0025 -0.8749 +vn -0.9417 0.1770 0.2862 +vn -0.9440 -0.0803 0.3199 +vn 0.8682 -0.2449 0.4316 +vn 0.9440 0.0803 -0.3199 +vn -0.8682 0.2449 -0.4316 +vn 0.3134 0.0839 0.9459 +vn -0.4651 -0.0221 0.8850 +vn -0.4647 -0.0224 0.8852 +vn -0.4590 -0.0214 0.8882 +vn -0.3360 -0.6915 0.6394 +vn -0.4057 -0.6956 0.5929 +vn -0.4663 -0.0219 0.8844 +vn -0.4664 -0.0219 0.8843 +vn -0.4726 -0.0218 0.8810 +vn -0.4681 -0.0228 0.8834 +vn 0.4651 0.0224 -0.8850 +vn 0.4591 0.0214 -0.8881 +vn 0.4648 0.0224 -0.8851 +vn -0.4651 -0.0218 0.8850 +vn -0.1399 -0.6683 0.7306 +vn 0.2769 -0.9532 0.1216 +vn -0.3415 -0.7023 0.6247 +vn 0.4531 0.0183 -0.8913 +vn 0.4485 0.0133 -0.8937 +vn -0.4531 -0.0183 0.8912 +vn -0.4582 -0.0214 0.8886 +vn -0.4523 -0.0178 0.8917 +vn -0.4484 -0.0131 0.8937 +vn -0.4482 -0.0122 0.8939 +vn -0.4471 -0.0094 0.8944 +vn 0.0411 -0.5626 0.8257 +vn -0.5599 0.7833 -0.2702 +vn -0.2323 0.2777 -0.9322 +vn 0.2319 -0.2790 0.9319 +vn 0.4470 0.0091 -0.8945 +vn 0.4482 0.0123 -0.8938 +vn 0.1821 -0.3964 0.8998 +vn -0.4842 -0.0027 0.8750 +vn -0.4842 -0.0025 0.8749 +vn -0.2576 0.1695 -0.9513 +vn 0.2577 -0.1695 0.9513 +vn -0.4467 -0.0070 0.8946 +vn -0.4460 -0.0058 0.8950 +vn 0.4463 0.0055 -0.8949 +vn -0.4779 -0.0187 0.8782 +vn -0.4734 -0.0210 0.8806 +vn -0.5555 -0.6618 0.5035 +vn 0.4676 0.0221 -0.8837 +vn 0.4726 0.0218 -0.8810 +vn -0.4822 -0.0114 0.8760 +vn -0.4789 -0.0176 0.8777 +vn -0.7060 -0.5802 0.4061 +vn -0.8672 -0.1319 -0.4803 +vn -0.4827 -0.0104 0.8757 +vn -0.4844 -0.0032 0.8749 +vn -0.8762 -0.3367 0.3447 +vn -0.8689 -0.1162 -0.4812 +vn -0.4464 -0.0053 0.8948 +vn -0.9431 -0.0916 0.3196 +vn -0.9436 -0.0860 0.3197 +vn -0.9436 -0.0859 0.3197 +vn -0.9441 -0.0803 0.3198 +vn 0.0316 -0.9976 -0.0611 +vn 0.0314 -0.9977 -0.0608 +vn 0.0324 0.9976 -0.0606 +vn 0.0323 0.9977 -0.0604 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.973130 0.033128 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.677629 0.482142 +vt 0.409642 -0.009898 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.669677 0.481452 +vt 0.240570 0.058726 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +vt 0.296927 -0.019617 +vt 0.353285 -0.019617 +vt 0.470812 0.481452 +vt 0.296927 0.014692 +vt 0.271947 0.481452 +vt 0.353285 0.014692 +vt -0.849112 0.025953 +vt 0.468872 0.000137 +vt -0.911121 0.025955 +vt 0.273887 0.000137 +vt 0.475153 0.482142 +vt 0.353285 -0.053929 +vt 0.272677 0.482143 +vt 0.296927 -0.053929 +vt -0.911121 -0.024667 +vt 0.473178 0.006015 +vt -0.849112 -0.024667 +vt 0.274652 0.006015 +s 1 +usemtl Material.076 +f 5006/10483/3393 5007/10485/3394 5008/10488/3395 5278/10997/3395 5279/10999/3395 5009/10490/3395 5010/10492/3396 5011/10496/3397 5012/10497/3395 5013/10498/3395 +f 5011/10495/3397 5010/10493/3396 5014/10500/3398 5015/10503/3398 +f 5016/10505/3399 5017/10508/3400 5018/10511/3401 5019/10512/3399 +f 5020/10516/3402 5021/10517/3402 5007/10486/3394 5006/10482/3393 +f 5021/10518/3403 5020/10515/3403 5022/10520/3403 5023/10522/3403 +f 5024/10523/3403 5025/10526/3403 5022/10520/3403 5020/10515/3403 +f 5024/10524/3402 5020/10516/3402 5006/10482/3393 5026/10528/3402 +f 5019/10513/3398 5011/10495/3397 5015/10503/3398 5016/10506/3398 +f 5026/10529/3395 5006/10483/3395 5013/10498/3395 5012/10497/3395 5011/10496/3395 5019/10514/3395 5018/10510/3395 5282/11005/3395 5283/11007/3395 5027/10532/3395 +f 5019/10514/3395 5018/10510/3395 5012/10497/3395 5011/10496/3395 +f 5013/10499/3403 5006/10484/3403 5026/10530/3403 5027/10533/3403 +f 5277/10996/3403 5275/10992/3403 5028/10535/3403 5029/10536/3403 +f 5015/10504/3403 5014/10501/3403 5029/10536/3403 5028/10535/3403 +f 5274/10991/3403 5022/10520/3403 5025/10526/3403 5281/11004/3403 +f 5017/10509/3403 5016/10507/3403 5015/10504/3403 5028/10535/3403 +f 5021/10519/3404 5023/10521/3405 5008/10489/3406 5007/10487/3404 +f 5009/10491/3407 5029/10537/3408 5014/10502/3404 5010/10494/3404 +f 5279/11000/3409 5277/10995/3410 5029/10537/3408 5009/10491/3407 +f 5027/10534/3411 5025/10527/3412 5024/10525/3399 5026/10531/3399 +f 5283/11008/3413 5281/11003/3414 5025/10527/3412 5027/10534/3411 +f 5030/10538/3415 5031/10539/3415 5032/10540/3416 5033/10542/3417 +f 5034/10543/3418 5033/10541/3418 5035/10546/3419 5036/10548/3420 +f 5037/10550/3421 5038/10551/3421 5039/10552/3422 5040/10554/3423 +f 5039/10552/3424 5041/10555/3424 5042/10557/3424 5043/10559/3424 +f 5044/10561/3425 5045/10562/3425 5046/10563/3425 5047/10565/3425 +f 5048/10567/3426 5031/10539/3426 5049/10568/3426 5041/10556/3426 +f 5038/10551/3427 5048/10566/3427 5041/10555/3427 5039/10552/3427 +f 5050/10569/3428 5051/10570/3428 5048/10566/3427 5038/10551/3427 +f 5051/10571/3429 5032/10540/3429 5031/10539/3426 5048/10567/3426 +f 5052/10572/3430 5044/10560/3430 5047/10564/3430 5053/10573/3430 +f 5034/10544/3430 5054/10576/3430 5044/10560/3430 5052/10572/3430 +f 5054/10575/3425 5055/10577/3425 5045/10562/3425 5044/10561/3425 +f 5046/10563/3431 5040/10553/3431 5056/10579/3431 5057/10580/3431 +f 5041/10556/3432 5049/10568/3432 5058/10581/3432 5042/10558/3432 +f 5053/10573/3433 5047/10564/3433 5059/10583/3433 5060/10585/3433 +f 5045/10562/3434 5037/10549/3434 5040/10553/3434 5046/10563/3434 +f 5055/10577/3434 5061/10587/3434 5037/10549/3434 5045/10562/3434 +f 5061/10586/3435 5050/10569/3435 5038/10551/3421 5037/10550/3421 +f 5051/10570/3428 5050/10569/3428 5062/10588/3436 5063/10590/3436 +f 5055/10577/3437 5054/10575/3437 5064/10591/3437 5065/10593/3437 +f 5050/10569/3435 5061/10586/3435 5066/10594/3438 5062/10588/3439 +f 5067/10596/3415 5049/10568/3415 5031/10539/3415 5030/10538/3415 +f 5064/10592/3440 5036/10547/3440 5068/10599/3440 5069/10601/3440 +f 5066/10595/3441 5065/10593/3441 5070/10602/3441 5071/10604/3441 +f 5065/10593/3442 5064/10591/3442 5069/10600/3442 5070/10602/3442 +f 5062/10588/3439 5066/10594/3438 5071/10605/3443 5072/10606/3444 +f 5032/10540/3429 5051/10571/3429 5063/10589/3445 5073/10607/3445 +f 5061/10587/3446 5055/10577/3446 5065/10593/3446 5066/10595/3446 +f 5033/10542/3417 5032/10540/3416 5073/10607/3447 5035/10545/3447 +f 5054/10576/3448 5034/10544/3448 5036/10547/3448 5064/10592/3448 +f 5072/10606/3444 5071/10605/3443 5074/10608/3449 5075/10609/3450 +f 5068/10599/3451 5076/10610/3452 5077/10613/3453 5078/10614/3454 +f 5079/10615/3455 5072/10606/3455 5075/10609/3455 5080/10617/3455 +f 5076/10610/3456 5081/10620/3456 5082/10622/3456 5077/10613/3456 +f 5073/10607/3457 5063/10589/3457 5079/10616/3457 5081/10621/3457 +f 5035/10545/3458 5073/10607/3458 5081/10621/3458 5076/10611/3458 +f 5063/10590/3459 5062/10588/3459 5072/10606/3459 5079/10615/3459 +f 5036/10548/3420 5035/10546/3419 5076/10612/3452 5068/10598/3451 +f 5078/10614/3454 5077/10613/3453 5083/10626/3460 5084/10627/3461 +f 5080/10617/3462 5075/10609/3462 5085/10628/3462 5086/10630/3462 +f 5077/10613/3463 5082/10622/3463 5087/10631/3463 5083/10626/3463 +f 5082/10623/3464 5080/10618/3464 5086/10629/3464 5087/10632/3464 +f 5070/10602/3465 5069/10600/3465 5088/10633/3465 5089/10636/3465 +f 5071/10605/3466 5070/10603/3466 5089/10638/3466 5074/10608/3466 +f 5069/10601/3467 5068/10599/3467 5078/10614/3467 5088/10635/3467 +f 5081/10621/3468 5079/10616/3468 5080/10619/3468 5082/10624/3468 +f 5087/10632/3469 5086/10629/3469 5090/10640/3469 5091/10641/3469 +f 5092/10643/3470 5084/10627/3470 5093/10644/3470 5094/10645/3470 +f 5095/10647/3471 5096/10649/3471 5097/10651/3471 5098/10653/3471 +f 5096/10649/3472 5092/10642/3472 5094/10646/3472 5097/10651/3472 +f 5075/10609/3450 5074/10608/3449 5095/10648/3473 5085/10628/3474 +f 5089/10637/3475 5088/10634/3475 5092/10642/3475 5096/10649/3475 +f 5074/10608/3476 5089/10638/3476 5096/10650/3476 5095/10648/3476 +f 5088/10635/3477 5078/10614/3477 5084/10627/3477 5092/10643/3477 +f 5099/10654/3478 5100/10656/3478 5101/10658/3479 5102/10659/3479 +f 5090/10639/3480 5103/10662/3480 5104/10663/3480 5105/10665/3480 +f 5106/10668/3481 5107/10670/3481 5108/10672/3481 5109/10673/3481 +f 5094/10645/3482 5093/10644/3482 5110/10676/3482 5111/10678/3482 +f 5083/10625/3483 5087/10632/3483 5091/10641/3483 5112/10682/3483 +f 5086/10630/3484 5085/10628/3484 5103/10662/3484 5090/10639/3484 +f 5084/10627/3461 5083/10626/3460 5112/10681/3485 5093/10644/3486 +f 5085/10628/3474 5095/10648/3473 5098/10652/3487 5103/10662/3488 +f 5043/10559/3489 5042/10557/3489 5113/10683/3489 5114/10685/3489 +f 5058/10581/3490 5115/10686/3490 5116/10688/3490 5117/10692/3490 +f 5059/10582/3491 5057/10580/3491 5118/10693/3491 5119/10695/3491 +f 5115/10687/3492 5060/10584/3493 5120/10697/3494 5116/10689/3495 +f 5049/10568/3496 5067/10596/3496 5115/10686/3496 5058/10581/3496 +f 5040/10554/3423 5039/10552/3422 5043/10559/3497 5056/10578/3498 +f 5047/10565/3499 5046/10563/3499 5057/10580/3499 5059/10582/3499 +f 5067/10597/3500 5053/10574/3500 5060/10584/3493 5115/10687/3492 +f 5117/10691/3501 5116/10690/3501 5121/10699/3501 5122/10702/3501 +f 5119/10695/3502 5118/10693/3502 5123/10703/3502 5124/10706/3502 +f 5116/10690/3495 5120/10698/3494 5125/10709/3503 5121/10699/3504 +f 5120/10698/3505 5119/10696/3505 5124/10707/3505 5125/10709/3505 +f 5056/10578/3498 5043/10559/3497 5114/10685/3506 5126/10711/3507 +f 5042/10558/3508 5058/10581/3508 5117/10692/3508 5113/10684/3508 +f 5057/10580/3509 5056/10579/3509 5126/10710/3509 5118/10693/3509 +f 5060/10585/3510 5059/10583/3510 5119/10696/3510 5120/10698/3510 +f 5125/10709/3511 5124/10707/3511 5127/10712/3511 5128/10714/3511 +f 5123/10704/3512 5129/10715/3512 5130/10716/3512 5131/10718/3512 +f 5132/10720/3513 5122/10700/3513 5133/10723/3513 5134/10725/3513 +f 5129/10715/3514 5135/10727/3515 5136/10728/3516 5130/10716/3517 +f 5114/10685/3518 5113/10683/3518 5132/10722/3518 5135/10727/3518 +f 5126/10711/3507 5114/10685/3506 5135/10727/3515 5129/10715/3514 +f 5113/10684/3519 5117/10692/3519 5122/10701/3519 5132/10721/3519 +f 5118/10694/3520 5126/10711/3520 5129/10715/3520 5123/10704/3520 +f 5134/10725/3521 5133/10723/3521 5107/10670/3521 5106/10668/3521 +f 5130/10716/3517 5136/10728/3516 5137/10729/3522 5138/10731/3522 +f 5136/10728/3523 5134/10726/3523 5106/10669/3524 5137/10729/3524 +f 5133/10723/3525 5139/10732/3525 5099/10655/3526 5107/10670/3527 +f 5121/10699/3504 5125/10709/3503 5128/10714/3528 5139/10733/3529 +f 5124/10708/3530 5123/10705/3530 5131/10719/3530 5127/10713/3530 +f 5122/10702/3531 5121/10699/3531 5139/10733/3531 5133/10724/3531 +f 5135/10727/3532 5132/10722/3532 5134/10726/3532 5136/10728/3532 +f 5140/10734/3533 5141/10736/3533 5142/10737/3533 5143/10739/3533 +f 5093/10644/3486 5112/10681/3485 5144/10742/3534 5110/10676/3534 +f 5141/10736/3535 5138/10730/3535 5145/10745/3536 5142/10737/3536 +f 5103/10662/3488 5098/10652/3487 5146/10748/3537 5104/10663/3537 +f 5131/10719/3538 5130/10717/3538 5138/10730/3535 5141/10736/3535 +f 5128/10714/3539 5127/10712/3539 5140/10735/3540 5100/10656/3541 +f 5139/10733/3529 5128/10714/3528 5100/10656/3478 5099/10654/3478 +f 5127/10713/3542 5131/10719/3542 5141/10736/3542 5140/10734/3542 +f 5147/10751/3543 5105/10666/3543 5104/10664/3543 5146/10749/3543 +f 5111/10679/3543 5147/10751/3543 5146/10749/3543 5148/10752/3543 +f 5110/10677/3544 5144/10743/3543 5147/10751/3543 5111/10679/3543 +f 5144/10743/3543 5149/10754/3543 5105/10666/3543 5147/10751/3543 +f 5150/10756/3545 5109/10674/3545 5108/10671/3546 5102/10660/3547 +f 5143/10740/3545 5150/10756/3545 5102/10660/3547 5101/10657/3547 +f 5142/10738/3545 5145/10746/3545 5150/10756/3545 5143/10740/3545 +f 5145/10746/3545 5151/10757/3545 5109/10674/3545 5150/10756/3545 +f 5098/10653/3548 5097/10651/3548 5148/10753/3548 5146/10750/3548 +f 5138/10731/3522 5137/10729/3522 5151/10758/3549 5145/10747/3549 +f 5112/10682/3550 5091/10641/3550 5149/10755/3550 5144/10744/3550 +f 5100/10656/3541 5140/10735/3540 5143/10741/3551 5101/10658/3551 +f 5097/10651/3552 5094/10646/3552 5111/10680/3552 5148/10753/3552 +f 5137/10729/3524 5106/10669/3524 5109/10675/3553 5151/10758/3553 +f 5091/10641/3554 5090/10640/3554 5105/10667/3554 5149/10755/3554 +f 5107/10670/3527 5099/10655/3526 5102/10661/3555 5108/10672/3555 +f 5152/10760/3415 5153/10761/3415 5154/10762/3416 5155/10764/3417 +f 5156/10765/3556 5155/10763/3556 5157/10767/3557 5158/10768/3558 +f 5159/10769/3431 5160/10771/3431 5161/10774/3431 5162/10776/3431 +f 5163/10778/3425 5164/10779/3425 5159/10770/3425 5165/10782/3425 +f 5166/10784/3426 5153/10761/3426 5167/10785/3426 5168/10786/3426 +f 5169/10788/3427 5166/10783/3427 5168/10787/3427 5170/10789/3427 +f 5171/10790/3427 5172/10791/3427 5166/10783/3427 5169/10788/3427 +f 5172/10792/3429 5154/10762/3429 5153/10761/3426 5166/10784/3426 +f 5173/10793/3559 5163/10777/3559 5165/10781/3559 5174/10794/3559 +f 5156/10765/3559 5175/10796/3559 5163/10777/3559 5173/10793/3559 +f 5175/10795/3425 5176/10797/3425 5164/10779/3425 5163/10778/3425 +f 5168/10786/3432 5167/10785/3432 5177/10799/3432 5178/10801/3432 +f 5174/10794/3560 5165/10781/3560 5179/10802/3560 5180/10804/3560 +f 5181/10805/3561 5174/10794/3562 5180/10804/3563 5182/10807/3564 +f 5164/10780/3434 5183/10809/3434 5160/10771/3434 5159/10769/3434 +f 5176/10798/3434 5184/10811/3434 5183/10809/3434 5164/10780/3434 +f 5172/10791/3436 5171/10790/3436 5185/10812/3436 5186/10814/3436 +f 5176/10797/3437 5175/10795/3437 5187/10815/3437 5188/10817/3437 +f 5171/10790/3565 5184/10810/3565 5189/10820/3566 5185/10812/3567 +f 5173/10793/3568 5152/10759/3568 5155/10763/3556 5156/10765/3556 +f 5174/10794/3562 5181/10805/3561 5152/10759/3568 5173/10793/3568 +f 5181/10806/3415 5167/10785/3415 5153/10761/3415 5152/10760/3415 +f 5190/10821/3457 5186/10813/3457 5191/10823/3457 5192/10825/3457 +f 5187/10816/3569 5158/10768/3569 5193/10827/3569 5194/10829/3569 +f 5189/10819/3441 5188/10818/3441 5195/10830/3441 5196/10833/3441 +f 5188/10817/3570 5187/10815/3570 5194/10828/3570 5195/10832/3570 +f 5154/10762/3429 5172/10792/3429 5186/10813/3445 5190/10821/3445 +f 5184/10811/3446 5176/10798/3446 5188/10818/3446 5189/10819/3446 +f 5155/10764/3417 5154/10762/3416 5190/10821/3447 5157/10766/3447 +f 5175/10796/3571 5156/10765/3571 5158/10768/3571 5187/10816/3571 +f 5196/10834/3466 5195/10831/3466 5197/10838/3466 5198/10839/3466 +f 5195/10832/3465 5194/10828/3465 5199/10840/3465 5197/10836/3465 +f 5200/10844/3444 5196/10834/3572 5198/10839/3573 5201/10845/3450 +f 5193/10827/3574 5202/10847/3575 5203/10848/3576 5204/10849/3577 +f 5157/10766/3458 5190/10821/3458 5192/10825/3458 5202/10846/3458 +f 5186/10814/3459 5185/10812/3459 5200/10843/3459 5191/10822/3459 +f 5158/10768/3558 5157/10767/3557 5202/10847/3575 5193/10827/3574 +f 5185/10812/3567 5189/10820/3566 5196/10835/3572 5200/10843/3444 +f 5204/10849/3577 5203/10848/3576 5205/10851/3578 5206/10852/3579 +f 5207/10855/3462 5201/10845/3462 5208/10856/3462 5209/10857/3462 +f 5203/10848/3463 5210/10861/3463 5211/10862/3463 5205/10851/3463 +f 5210/10859/3464 5207/10853/3464 5209/10858/3464 5211/10863/3464 +f 5194/10829/3580 5193/10827/3580 5204/10849/3580 5199/10842/3580 +f 5192/10825/3581 5191/10823/3581 5207/10854/3581 5210/10860/3581 +f 5202/10847/3456 5192/10826/3456 5210/10861/3456 5203/10848/3456 +f 5191/10824/3455 5200/10844/3455 5201/10845/3455 5207/10855/3455 +f 5209/10857/3582 5208/10856/3582 5212/10864/3582 5213/10865/3582 +f 5205/10850/3483 5211/10863/3483 5214/10867/3483 5215/10869/3483 +f 5211/10863/3469 5209/10858/3469 5213/10866/3469 5214/10867/3469 +f 5216/10870/3583 5206/10852/3583 5217/10872/3583 5218/10873/3583 +f 5201/10845/3450 5198/10839/3573 5219/10875/3584 5208/10856/3585 +f 5197/10837/3475 5199/10841/3475 5216/10871/3475 5220/10878/3475 +f 5198/10839/3476 5197/10838/3476 5220/10877/3476 5219/10875/3476 +f 5199/10842/3586 5204/10849/3586 5206/10852/3586 5216/10870/3586 +f 5221/10879/3587 5222/10881/3587 5223/10883/3588 5224/10884/3588 +f 5213/10865/3589 5212/10864/3589 5225/10887/3589 5226/10889/3589 +f 5227/10893/3481 5228/10895/3481 5229/10897/3481 5230/10898/3481 +f 5218/10873/3590 5217/10872/3590 5231/10902/3590 5232/10904/3590 +f 5206/10852/3579 5205/10851/3578 5215/10868/3591 5217/10872/3592 +f 5208/10856/3585 5219/10875/3584 5233/10908/3593 5212/10864/3488 +f 5220/10878/3472 5216/10871/3472 5218/10874/3472 5234/10910/3472 +f 5219/10876/3471 5220/10878/3471 5234/10910/3471 5233/10909/3471 +f 5177/10799/3490 5182/10808/3490 5235/10911/3490 5236/10913/3490 +f 5179/10803/3491 5162/10775/3491 5237/10917/3491 5238/10919/3491 +f 5182/10807/3564 5180/10804/3563 5239/10920/3594 5235/10912/3595 +f 5180/10804/3596 5179/10802/3596 5238/10918/3596 5239/10920/3596 +f 5170/10789/3424 5168/10787/3424 5178/10800/3424 5240/10921/3424 +f 5167/10785/3496 5181/10806/3496 5182/10808/3496 5177/10799/3496 +f 5160/10772/3597 5170/10789/3597 5240/10921/3497 5161/10773/3598 +f 5165/10782/3499 5159/10770/3499 5162/10775/3499 5179/10803/3499 +f 5235/10912/3595 5239/10920/3594 5241/10922/3599 5242/10923/3600 +f 5239/10920/3601 5238/10918/3601 5243/10925/3601 5241/10922/3601 +f 5237/10915/3520 5244/10929/3520 5245/10930/3520 5246/10931/3520 +f 5247/10935/3519 5236/10913/3519 5248/10937/3519 5249/10940/3519 +f 5240/10921/3489 5178/10800/3489 5247/10934/3489 5250/10943/3489 +f 5161/10773/3598 5240/10921/3497 5250/10943/3506 5244/10927/3507 +f 5178/10801/3508 5177/10799/3508 5236/10913/3508 5247/10935/3508 +f 5162/10776/3509 5161/10774/3509 5244/10928/3509 5237/10916/3509 +f 5246/10931/3512 5245/10930/3512 5251/10945/3512 5252/10947/3512 +f 5249/10941/3513 5248/10938/3513 5253/10950/3513 5254/10952/3513 +f 5245/10930/3514 5255/10953/3515 5256/10954/3516 5251/10945/3517 +f 5255/10953/3532 5249/10942/3532 5254/10951/3532 5256/10954/3532 +f 5238/10919/3502 5237/10917/3502 5246/10932/3502 5243/10924/3502 +f 5236/10914/3501 5235/10912/3501 5242/10923/3501 5248/10939/3501 +f 5250/10944/3518 5247/10936/3518 5249/10942/3518 5255/10953/3518 +f 5244/10929/3507 5250/10944/3506 5255/10953/3515 5245/10930/3514 +f 5256/10954/3523 5254/10951/3523 5227/10894/3524 5257/10955/3524 +f 5253/10950/3525 5258/10956/3525 5221/10880/3526 5228/10895/3527 +f 5259/10958/3602 5252/10948/3602 5260/10960/3602 5261/10961/3602 +f 5258/10957/3603 5262/10963/3604 5222/10881/3587 5221/10879/3587 +f 5241/10922/3605 5243/10925/3605 5259/10959/3605 5262/10963/3605 +f 5242/10923/3600 5241/10922/3599 5262/10963/3604 5258/10957/3603 +f 5243/10926/3530 5246/10933/3530 5252/10948/3530 5259/10958/3530 +f 5248/10939/3531 5242/10923/3531 5258/10957/3531 5253/10949/3531 +f 5261/10961/3606 5260/10960/3606 5263/10964/3606 5264/10966/3606 +f 5217/10872/3592 5215/10868/3591 5265/10970/3607 5231/10902/3607 +f 5212/10864/3488 5233/10908/3593 5266/10973/3537 5225/10887/3537 +f 5260/10960/3535 5267/10976/3535 5268/10978/3536 5263/10964/3536 +f 5251/10945/3517 5256/10954/3516 5257/10955/3522 5267/10977/3522 +f 5254/10952/3521 5253/10950/3521 5228/10895/3521 5227/10893/3521 +f 5252/10948/3538 5251/10946/3538 5267/10976/3535 5260/10960/3535 +f 5262/10963/3608 5259/10959/3608 5261/10962/3609 5222/10881/3610 +f 5269/10981/3543 5226/10890/3543 5225/10888/3543 5266/10974/3543 +f 5232/10905/3543 5269/10981/3543 5266/10974/3543 5270/10983/3543 +f 5231/10903/3544 5265/10971/3543 5269/10982/3543 5232/10906/3543 +f 5265/10971/3543 5271/10985/3543 5226/10891/3543 5269/10982/3543 +f 5272/10987/3545 5230/10899/3545 5229/10896/3546 5224/10885/3547 +f 5264/10967/3545 5272/10987/3545 5224/10885/3547 5223/10882/3547 +f 5263/10965/3545 5268/10979/3545 5272/10988/3545 5264/10968/3545 +f 5268/10979/3545 5273/10989/3545 5230/10900/3545 5272/10988/3545 +f 5233/10909/3548 5234/10910/3548 5270/10984/3548 5266/10975/3548 +f 5267/10977/3522 5257/10955/3522 5273/10990/3549 5268/10980/3549 +f 5215/10869/3550 5214/10867/3550 5271/10986/3550 5265/10972/3550 +f 5222/10881/3610 5261/10962/3609 5264/10969/3611 5223/10883/3611 +f 5234/10910/3552 5218/10874/3552 5232/10907/3552 5270/10984/3552 +f 5257/10955/3524 5227/10894/3524 5230/10901/3553 5273/10990/3553 +f 5214/10867/3554 5213/10866/3554 5226/10892/3554 5271/10986/3554 +f 5228/10895/3527 5221/10880/3526 5224/10886/3555 5229/10897/3555 +f 5018/10511/3401 5017/10508/3400 5280/11001/3612 5282/11006/3613 +f 5282/11006/3613 5280/11001/3612 5281/11003/3414 5283/11008/3413 +f 5008/10489/3406 5023/10521/3405 5276/10993/3614 5278/10998/3615 +f 5278/10998/3615 5276/10993/3614 5277/10995/3410 5279/11000/3409 +f 5028/10535/3403 5275/10992/3403 5280/11002/3403 5017/10509/3403 +f 5275/10992/3403 5274/10991/3403 5281/11004/3403 5280/11002/3403 +f 5023/10522/3403 5022/10520/3403 5274/10991/3403 5276/10994/3403 +f 5276/10994/3403 5274/10991/3403 5275/10992/3403 5277/10996/3403 +o Middle right wall.002 +v 2.678615 2.836873 6.442977 +v 2.678615 2.184591 6.442977 +v 15.214432 2.836873 6.442976 +v 15.214432 2.184591 6.442976 +v 2.678615 2.836873 7.330550 +v 2.678615 2.184591 7.330550 +v 15.214432 2.836873 7.330549 +v 15.214432 2.184591 7.330549 +vn -0.0000 0.3261 -0.0000 +vn 6.2679 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.4438 +vn -0.0000 -0.3261 -0.0000 +vn -0.0000 -0.0000 -0.4438 +vn -6.2679 -0.0000 -0.0000 +vt 0.485000 0.675000 +vt 0.495000 0.675000 +vt 0.485000 0.665000 +vt 0.495000 0.665000 +vt 0.475000 0.675000 +vt 0.485000 0.675000 +vt 0.505000 0.675000 +vt 0.495000 0.675000 +vt 0.475000 0.665000 +vt 0.485000 0.655000 +vt 0.485000 0.685000 +vt 0.495000 0.655000 +vt 0.495000 0.685000 +vt 0.505000 0.665000 +s 0 +usemtl GlassDoor.007 +f 5284/11009/3616 5288/11013/3616 5290/11017/3616 5286/11011/3616 +f 5287/11012/3617 5286/11011/3617 5290/11018/3617 5291/11020/3617 +f 5291/11021/3618 5290/11019/3618 5288/11014/3618 5289/11016/3618 +f 5289/11015/3619 5285/11010/3619 5287/11012/3619 5291/11022/3619 +f 5285/11010/3620 5284/11009/3620 5286/11011/3620 5287/11012/3620 +f 5289/11016/3621 5288/11014/3621 5284/11009/3621 5285/11010/3621 +o Middle right wall.003 +v 5.080535 2.720794 2.893497 +v 5.080535 1.778780 2.893497 +v 5.804746 2.720794 2.893497 +v 5.804746 1.778780 2.893497 +v 5.080535 2.720794 6.953730 +v 5.080535 1.778780 6.953730 +v 5.804746 2.720794 6.953730 +v 5.804746 1.778780 6.953730 +v 5.080535 1.778780 3.908556 +v 5.080535 1.778780 4.923614 +v 5.080535 1.778780 5.938672 +v 5.804746 2.720794 3.908556 +v 5.804746 2.720794 4.923614 +v 5.804746 2.720794 5.938672 +v 5.804746 1.778780 5.938672 +v 5.804746 1.778780 4.923614 +v 5.804746 1.778780 3.908556 +v 5.080535 2.720794 5.938672 +v 5.080535 2.720794 4.923614 +v 5.080535 2.720794 3.908556 +vn -0.0000 0.4710 -0.0000 +vn 0.3621 -0.0000 -0.0000 +vn -0.0000 -0.0000 2.0301 +vn -0.0000 -0.4710 -0.0000 +vn -0.0000 -0.0000 -2.0301 +vn -0.3621 -0.0000 -0.0000 +vt 0.895625 0.585500 +vt 0.625000 0.500000 +vt 0.645625 0.585500 +vt 0.375000 0.500000 +vt 0.895625 0.835500 +vt 0.836875 0.797500 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.645625 0.835500 +vt 0.836875 0.081500 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.875000 0.750000 +vt 0.153125 0.830500 +vt 0.625000 0.000000 +vt 0.153125 0.048500 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +vt 0.375000 0.437500 +vt 0.312500 0.500000 +vt 0.375000 0.375000 +vt 0.250000 0.500000 +vt 0.375000 0.312500 +vt 0.187500 0.500000 +vt 0.176875 0.797500 +vt 0.931875 0.779500 +vt 0.687500 0.750000 +vt 0.081875 0.779500 +vt 0.845625 0.808500 +vt 0.750000 0.750000 +vt 0.860625 0.830500 +vt 0.168125 0.808500 +vt 0.812500 0.750000 +vt 0.860625 0.048500 +vt 0.187500 0.750000 +vt 0.168125 0.070500 +vt 0.250000 0.750000 +vt 0.081875 0.099500 +vt 0.845625 0.070500 +vt 0.312500 0.750000 +vt 0.176875 0.081500 +vt 0.931875 0.099500 +vt 0.625000 0.312500 +vt 0.812500 0.500000 +vt 0.625000 0.375000 +vt 0.750000 0.500000 +vt 0.625000 0.437500 +vt 0.687500 0.500000 +s 0 +usemtl CabnetDoors +f 5309/11068/3622 5296/11033/3622 5298/11037/3622 5305/11057/3622 +f 5306/11058/3623 5305/11055/3623 5298/11038/3623 5299/11040/3623 +f 5299/11041/3624 5298/11039/3624 5296/11034/3624 5297/11035/3624 +f 5300/11044/3625 5293/11026/3625 5295/11030/3625 5308/11064/3625 +f 5293/11025/3626 5292/11023/3626 5294/11027/3626 5295/11031/3626 +f 5300/11043/3627 5311/11071/3627 5292/11024/3627 5293/11026/3627 +f 5297/11035/3627 5296/11034/3627 5309/11067/3627 5302/11047/3627 +f 5302/11047/3627 5309/11067/3627 5310/11069/3627 5301/11045/3627 +f 5301/11045/3627 5310/11069/3627 5311/11071/3627 5300/11043/3627 +f 5297/11036/3625 5302/11048/3625 5306/11059/3625 5299/11042/3625 +f 5302/11048/3625 5301/11046/3625 5307/11061/3625 5306/11059/3625 +f 5301/11046/3625 5300/11044/3625 5308/11064/3625 5307/11061/3625 +f 5295/11032/3623 5294/11028/3623 5303/11049/3623 5308/11065/3623 +f 5308/11066/3623 5303/11050/3623 5304/11052/3623 5307/11062/3623 +f 5307/11063/3623 5304/11053/3623 5305/11056/3623 5306/11060/3623 +f 5292/11024/3622 5311/11072/3622 5303/11051/3622 5294/11029/3622 +f 5311/11072/3622 5310/11070/3622 5304/11054/3622 5303/11051/3622 +f 5310/11070/3622 5309/11068/3622 5305/11057/3622 5304/11054/3622 +o Middle right wall.004 +v 2.614327 2.720794 1.941907 +v 2.614327 1.778780 1.941907 +v 3.338538 2.720794 1.941907 +v 3.338538 1.778780 1.941907 +v 2.614327 2.720794 7.006851 +v 2.614327 1.778780 7.006851 +v 3.338538 2.720794 7.006851 +v 3.338538 1.778780 7.006851 +v 2.614327 1.778780 2.954896 +v 2.614327 1.778780 3.967885 +v 2.614327 1.778780 4.980874 +v 2.614327 1.778780 5.993862 +v 3.338538 2.720794 2.954896 +v 3.338538 2.720794 3.967885 +v 3.338538 2.720794 4.980874 +v 3.338538 2.720794 5.993862 +v 3.338538 1.778780 5.993862 +v 3.338538 1.778780 4.980874 +v 3.338538 1.778780 3.967885 +v 3.338538 1.778780 2.954896 +v 2.614327 2.720794 5.993862 +v 2.614327 2.720794 4.980874 +v 2.614327 2.720794 3.967885 +v 2.614327 2.720794 2.954896 +vn -0.0000 0.4710 -0.0000 +vn 0.3621 -0.0000 -0.0000 +vn -0.0000 -0.0000 2.5325 +vn -0.0000 -0.4710 -0.0000 +vn -0.0000 -0.0000 -2.5325 +vn -0.3621 -0.0000 -0.0000 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.835625 0.834500 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.835625 0.044500 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.875000 0.750000 +vt 0.178125 0.834500 +vt 0.625000 0.000000 +vt 0.178125 0.044500 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +vt 0.375000 0.450000 +vt 0.325000 0.500000 +vt 0.375000 0.400000 +vt 0.275000 0.500000 +vt 0.375000 0.350000 +vt 0.225000 0.500000 +vt 0.375000 0.300000 +vt 0.175000 0.500000 +vt 0.178125 0.834500 +vt 0.835625 0.834500 +vt 0.675000 0.750000 +vt 0.178125 0.834500 +vt 0.835625 0.834500 +vt 0.725000 0.750000 +vt 0.178125 0.834500 +vt 0.835625 0.834500 +vt 0.775000 0.750000 +vt 0.835625 0.834500 +vt 0.178125 0.834500 +vt 0.825000 0.750000 +vt 0.835625 0.044500 +vt 0.175000 0.750000 +vt 0.178125 0.044500 +vt 0.225000 0.750000 +vt 0.178125 0.044500 +vt 0.835625 0.044500 +vt 0.275000 0.750000 +vt 0.178125 0.044500 +vt 0.835625 0.044500 +vt 0.325000 0.750000 +vt 0.178125 0.044500 +vt 0.835625 0.044500 +vt 0.625000 0.300000 +vt 0.825000 0.500000 +vt 0.625000 0.350000 +vt 0.775000 0.500000 +vt 0.625000 0.400000 +vt 0.725000 0.500000 +vt 0.625000 0.450000 +vt 0.675000 0.500000 +s 0 +usemtl CabnetDoors +f 5332/11122/3628 5316/11079/3628 5318/11083/3628 5327/11108/3628 +f 5328/11109/3629 5327/11106/3629 5318/11084/3629 5319/11086/3629 +f 5319/11087/3630 5318/11085/3630 5316/11080/3630 5317/11081/3630 +f 5320/11090/3631 5313/11074/3631 5315/11077/3631 5331/11118/3631 +f 5313/11074/3632 5312/11073/3632 5314/11076/3632 5315/11077/3632 +f 5320/11089/3633 5335/11127/3633 5312/11073/3633 5313/11074/3633 +f 5317/11081/3633 5316/11080/3633 5332/11121/3633 5323/11095/3633 +f 5323/11095/3633 5332/11121/3633 5333/11123/3633 5322/11093/3633 +f 5322/11093/3633 5333/11123/3633 5334/11125/3633 5321/11091/3633 +f 5321/11091/3633 5334/11125/3633 5335/11127/3633 5320/11089/3633 +f 5317/11082/3631 5323/11096/3631 5328/11110/3631 5319/11088/3631 +f 5323/11096/3631 5322/11094/3631 5329/11112/3631 5328/11110/3631 +f 5322/11094/3631 5321/11092/3631 5330/11115/3631 5329/11112/3631 +f 5321/11092/3631 5320/11090/3631 5331/11118/3631 5330/11115/3631 +f 5315/11078/3629 5314/11075/3629 5324/11097/3629 5331/11119/3629 +f 5331/11120/3629 5324/11098/3629 5325/11100/3629 5330/11116/3629 +f 5330/11117/3629 5325/11101/3629 5326/11103/3629 5329/11113/3629 +f 5329/11114/3629 5326/11104/3629 5327/11107/3629 5328/11111/3629 +f 5312/11073/3628 5335/11128/3628 5324/11099/3628 5314/11076/3628 +f 5335/11128/3628 5334/11126/3628 5325/11102/3628 5324/11099/3628 +f 5334/11126/3628 5333/11124/3628 5326/11105/3628 5325/11102/3628 +f 5333/11124/3628 5332/11122/3628 5327/11108/3628 5326/11105/3628 +o Top.006 +v 9.132218 0.785858 3.750281 +v 9.703387 0.800000 3.750281 +v 9.703387 0.785858 3.467041 +v 9.151667 0.789517 3.750281 +v 9.208767 0.792930 3.750281 +v 9.299510 0.795858 3.750281 +v 9.151667 0.785858 3.676999 +v 9.174823 0.789663 3.674692 +v 9.232574 0.792952 3.675926 +v 9.312909 0.795517 3.677447 +v 9.208767 0.785858 3.608638 +v 9.232942 0.789592 3.608127 +v 9.281345 0.792598 3.615363 +v 9.343797 0.794760 3.621298 +v 9.373623 0.794023 3.586752 +v 9.703387 0.799518 3.676999 +v 9.703387 0.798105 3.608638 +v 9.703387 0.795858 3.550000 +v 9.555610 0.799518 3.750281 +v 9.550959 0.798945 3.674069 +v 9.553448 0.797515 3.608203 +v 9.556513 0.795526 3.556825 +v 9.417756 0.798105 3.750281 +v 9.416727 0.797506 3.675499 +v 9.431319 0.796308 3.615298 +v 9.443287 0.794761 3.571981 +v 9.555610 0.785858 3.476685 +v 9.417756 0.785858 3.505001 +v 9.299510 0.785858 3.550000 +v 9.703387 0.789517 3.476685 +v 9.549703 0.789632 3.488168 +v 9.416880 0.789570 3.516806 +v 9.313273 0.789494 3.556644 +v 9.703387 0.792930 3.505001 +v 9.552586 0.792956 3.516989 +v 9.431187 0.792594 3.540992 +v 9.343837 0.792298 3.571962 +v 9.703387 0.700000 3.750281 +v 9.132218 0.714142 3.750281 +v 9.703387 0.714142 3.467041 +v 9.555610 0.700482 3.750281 +v 9.417756 0.701895 3.750281 +v 9.299510 0.704142 3.750281 +v 9.703387 0.700482 3.676999 +v 9.549703 0.701055 3.674692 +v 9.416880 0.702485 3.675926 +v 9.313273 0.704474 3.677447 +v 9.703387 0.701895 3.608638 +v 9.552586 0.702494 3.608127 +v 9.431187 0.703692 3.615363 +v 9.343837 0.705239 3.621298 +v 9.373623 0.705977 3.586752 +v 9.151667 0.714142 3.676999 +v 9.208767 0.714142 3.608638 +v 9.299510 0.714142 3.550000 +v 9.151667 0.710483 3.750281 +v 9.174823 0.710368 3.674069 +v 9.232574 0.710430 3.608203 +v 9.312909 0.710506 3.556825 +v 9.208767 0.707070 3.750281 +v 9.232942 0.707044 3.675499 +v 9.281345 0.707406 3.615298 +v 9.343797 0.707702 3.571981 +v 9.703387 0.710483 3.476685 +v 9.703387 0.707070 3.505001 +v 9.703387 0.704142 3.550000 +v 9.555610 0.714142 3.476685 +v 9.550959 0.710337 3.488168 +v 9.553448 0.707048 3.516806 +v 9.556513 0.704483 3.556644 +v 9.417756 0.714142 3.505001 +v 9.416727 0.710408 3.516989 +v 9.431319 0.707402 3.540992 +v 9.443287 0.705240 3.571962 +v 12.599826 0.785858 3.467040 +v 12.599826 0.800000 3.750281 +v 13.170995 0.785858 3.750281 +v 12.599826 0.789517 3.476685 +v 12.599826 0.792930 3.505001 +v 12.599826 0.795858 3.549999 +v 12.747603 0.785858 3.476685 +v 12.752254 0.789663 3.488168 +v 12.749765 0.792952 3.516806 +v 12.746700 0.795517 3.556644 +v 12.885457 0.785858 3.505001 +v 12.886486 0.789592 3.516989 +v 12.871894 0.792598 3.540992 +v 12.859926 0.794760 3.571961 +v 12.929590 0.794023 3.586752 +v 12.747603 0.799518 3.750281 +v 12.885457 0.798105 3.750281 +v 13.003703 0.795858 3.750281 +v 12.599826 0.799518 3.676998 +v 12.753510 0.798945 3.674692 +v 12.886333 0.797515 3.675926 +v 12.989940 0.795526 3.677446 +v 12.599826 0.798105 3.608638 +v 12.750628 0.797506 3.608127 +v 12.872026 0.796308 3.615363 +v 12.959376 0.794761 3.621298 +v 13.151546 0.785858 3.676998 +v 13.094446 0.785858 3.608638 +v 13.003703 0.785858 3.549999 +v 13.151546 0.789517 3.750281 +v 13.128390 0.789632 3.674069 +v 13.070640 0.789570 3.608203 +v 12.990304 0.789494 3.556825 +v 13.094446 0.792930 3.750281 +v 13.070271 0.792956 3.675499 +v 13.021868 0.792594 3.615297 +v 12.959416 0.792298 3.571981 +v 12.599826 0.714142 3.467040 +v 13.170995 0.714142 3.750281 +v 12.599826 0.700000 3.750281 +v 12.747603 0.714142 3.476685 +v 12.885457 0.714142 3.505001 +v 13.003703 0.714142 3.549999 +v 12.599826 0.710483 3.476685 +v 12.753510 0.710368 3.488168 +v 12.886333 0.710430 3.516806 +v 12.989940 0.710506 3.556644 +v 12.599826 0.707070 3.505001 +v 12.750628 0.707044 3.516989 +v 12.872026 0.707406 3.540992 +v 12.959376 0.707702 3.571961 +v 12.929590 0.705977 3.586752 +v 13.151546 0.710483 3.750281 +v 13.094446 0.707070 3.750281 +v 13.003703 0.704142 3.750281 +v 13.151546 0.714142 3.676998 +v 13.128390 0.710337 3.674692 +v 13.070640 0.707048 3.675926 +v 12.990304 0.704483 3.677446 +v 13.094446 0.714142 3.608638 +v 13.070271 0.710408 3.608127 +v 13.021868 0.707402 3.615363 +v 12.959416 0.705240 3.621298 +v 12.599826 0.700482 3.676998 +v 12.599826 0.701895 3.608638 +v 12.599826 0.704142 3.549999 +v 12.747603 0.700482 3.750281 +v 12.752254 0.701055 3.674069 +v 12.749765 0.702485 3.608203 +v 12.746700 0.704474 3.556825 +v 12.885457 0.701895 3.750281 +v 12.886486 0.702494 3.675499 +v 12.871894 0.703692 3.615297 +v 12.859926 0.705239 3.571981 +v 9.132218 0.785858 5.186614 +v 9.703387 0.785858 5.469854 +v 9.703387 0.800000 5.186614 +v 9.151667 0.785858 5.259896 +v 9.208767 0.785858 5.328257 +v 9.299510 0.785858 5.386895 +v 9.151667 0.789517 5.186614 +v 9.174823 0.789632 5.262825 +v 9.232574 0.789570 5.328691 +v 9.312909 0.789494 5.380070 +v 9.208767 0.792930 5.186614 +v 9.232942 0.792956 5.261395 +v 9.281345 0.792594 5.321597 +v 9.343797 0.792298 5.364913 +v 9.373623 0.794023 5.350142 +v 9.703387 0.789517 5.460210 +v 9.703387 0.792930 5.431894 +v 9.703387 0.795858 5.386895 +v 9.555610 0.785858 5.460210 +v 9.550959 0.789663 5.448727 +v 9.553448 0.792952 5.420088 +v 9.556513 0.795517 5.380250 +v 9.417756 0.785858 5.431894 +v 9.416727 0.789592 5.419906 +v 9.431319 0.792598 5.395903 +v 9.443287 0.794760 5.364933 +v 9.555610 0.799518 5.186614 +v 9.417756 0.798105 5.186614 +v 9.299510 0.795858 5.186614 +v 9.703387 0.799518 5.259896 +v 9.549703 0.798945 5.262202 +v 9.416880 0.797515 5.260968 +v 9.313273 0.795526 5.259448 +v 9.703387 0.798105 5.328257 +v 9.552586 0.797506 5.328767 +v 9.431187 0.796308 5.321531 +v 9.343837 0.794761 5.315596 +v 9.703387 0.714142 5.469854 +v 9.132218 0.714142 5.186614 +v 9.703387 0.700000 5.186614 +v 9.555610 0.714142 5.460210 +v 9.417756 0.714142 5.431894 +v 9.299510 0.714142 5.386895 +v 9.703387 0.710483 5.460210 +v 9.549703 0.710368 5.448727 +v 9.416880 0.710430 5.420088 +v 9.313273 0.710506 5.380250 +v 9.703387 0.707070 5.431894 +v 9.552586 0.707044 5.419906 +v 9.431187 0.707406 5.395903 +v 9.343837 0.707702 5.364933 +v 9.373623 0.705977 5.350142 +v 9.151667 0.710483 5.186614 +v 9.208767 0.707070 5.186614 +v 9.299510 0.704142 5.186614 +v 9.151667 0.714142 5.259896 +v 9.174823 0.710337 5.262202 +v 9.232574 0.707048 5.260968 +v 9.312909 0.704483 5.259448 +v 9.208767 0.714142 5.328257 +v 9.232942 0.710408 5.328767 +v 9.281345 0.707402 5.321531 +v 9.343797 0.705240 5.315596 +v 9.703387 0.700482 5.259896 +v 9.703387 0.701895 5.328257 +v 9.703387 0.704142 5.386895 +v 9.555610 0.700482 5.186614 +v 9.550959 0.701055 5.262825 +v 9.553448 0.702485 5.328691 +v 9.556513 0.704474 5.380070 +v 9.417756 0.701895 5.186614 +v 9.416727 0.702494 5.261395 +v 9.431319 0.703692 5.321597 +v 9.443287 0.705239 5.364913 +v 12.599826 0.785858 5.469854 +v 13.170995 0.785858 5.186613 +v 12.599826 0.800000 5.186613 +v 12.747603 0.785858 5.460210 +v 12.885457 0.785858 5.431894 +v 13.003703 0.785858 5.386895 +v 12.599826 0.789517 5.460210 +v 12.753510 0.789632 5.448727 +v 12.886333 0.789570 5.420088 +v 12.989940 0.789494 5.380250 +v 12.599826 0.792930 5.431894 +v 12.750628 0.792956 5.419906 +v 12.872026 0.792594 5.395903 +v 12.959376 0.792298 5.364933 +v 12.929590 0.794023 5.350142 +v 13.151546 0.789517 5.186614 +v 13.094446 0.792930 5.186614 +v 13.003703 0.795858 5.186614 +v 13.151546 0.785858 5.259896 +v 13.128390 0.789663 5.262202 +v 13.070640 0.792952 5.260968 +v 12.990304 0.795517 5.259448 +v 13.094446 0.785858 5.328257 +v 13.070271 0.789592 5.328767 +v 13.021868 0.792598 5.321531 +v 12.959416 0.794760 5.315596 +v 12.599826 0.799518 5.259896 +v 12.599826 0.798105 5.328257 +v 12.599826 0.795858 5.386895 +v 12.747603 0.799518 5.186614 +v 12.752254 0.798945 5.262825 +v 12.749765 0.797515 5.328691 +v 12.746700 0.795526 5.380069 +v 12.885457 0.798105 5.186614 +v 12.886486 0.797506 5.261395 +v 12.871894 0.796308 5.321597 +v 12.859926 0.794761 5.364913 +v 12.599826 0.700000 5.186613 +v 13.170995 0.714142 5.186613 +v 12.599826 0.714142 5.469854 +v 12.747603 0.700482 5.186614 +v 12.885457 0.701895 5.186614 +v 13.003703 0.704142 5.186614 +v 12.599826 0.700482 5.259896 +v 12.753510 0.701055 5.262202 +v 12.886333 0.702485 5.260968 +v 12.989940 0.704474 5.259448 +v 12.599826 0.701895 5.328257 +v 12.750628 0.702494 5.328767 +v 12.872026 0.703692 5.321531 +v 12.959376 0.705239 5.315596 +v 12.929590 0.705977 5.350142 +v 13.151546 0.714142 5.259896 +v 13.094446 0.714142 5.328257 +v 13.003703 0.714142 5.386895 +v 13.151546 0.710483 5.186614 +v 13.128390 0.710368 5.262825 +v 13.070640 0.710430 5.328691 +v 12.990304 0.710506 5.380069 +v 13.094446 0.707070 5.186614 +v 13.070271 0.707044 5.261395 +v 13.021868 0.707406 5.321597 +v 12.959416 0.707702 5.364913 +v 12.599826 0.710483 5.460210 +v 12.599826 0.707070 5.431894 +v 12.599826 0.704142 5.386895 +v 12.747603 0.714142 5.460210 +v 12.752254 0.710337 5.448727 +v 12.749765 0.707048 5.420088 +v 12.746700 0.704483 5.380250 +v 12.885457 0.714142 5.431894 +v 12.886486 0.710408 5.419906 +v 12.871894 0.707402 5.395903 +v 12.859926 0.705240 5.364933 +v 9.703387 -0.060455 3.676999 +v 9.703387 -0.060937 3.750281 +v 9.555610 -0.060455 3.750281 +v 9.549703 -0.059882 3.674692 +v 12.747603 -0.060455 3.750281 +v 12.599826 -0.060937 3.750281 +v 12.599826 -0.060455 3.676998 +v 12.752254 -0.059882 3.674069 +v 9.555610 -0.060455 5.186614 +v 9.703387 -0.060937 5.186614 +v 9.703387 -0.060455 5.259896 +v 9.550959 -0.059882 5.262825 +v 12.599826 -0.060455 5.259896 +v 12.599826 -0.060937 5.186613 +v 12.747603 -0.060455 5.186614 +v 12.753510 -0.059882 5.262202 +vn -0.0000 -0.0500 -0.0000 +vn -0.0000 -0.0000 1.0014 +vn 2.0194 -0.0000 -0.0000 +vn -0.0000 0.0500 -0.0000 +vn -0.0000 -0.0000 -1.0014 +vn -1.9814 0.0068 -0.1368 +vn -1.8416 0.0194 -0.1331 +vn -1.5850 0.0303 -0.1249 +vn -1.8416 0.0067 -0.3882 +vn -1.7066 0.0189 -0.3783 +vn -1.4820 0.0288 -0.3589 +vn -1.5850 0.0063 -0.6077 +vn -1.4810 0.0179 -0.5783 +vn -1.3368 0.0265 -0.5308 +vn -0.2758 0.0491 -0.1368 +vn -0.2684 0.0456 -0.3887 +vn -0.2519 0.0392 -0.6078 +vn -0.7827 0.0456 -0.1347 +vn -0.7628 0.0423 -0.3788 +vn -0.7238 0.0367 -0.5778 +vn -1.2255 0.0392 -0.1254 +vn -1.1661 0.0367 -0.3593 +vn -1.0703 0.0331 -0.5307 +vn -0.2758 0.0068 -0.9826 +vn -0.7839 0.0066 -0.9132 +vn -1.2257 0.0062 -0.7860 +vn -0.2717 0.0194 -0.9132 +vn -0.7639 0.0189 -0.8463 +vn -1.1652 0.0179 -0.7349 +vn -0.2529 0.0303 -0.7860 +vn -0.7245 0.0289 -0.7344 +vn -1.0702 0.0265 -0.6629 +vn -0.7839 -0.0456 -0.1331 +vn -1.2257 -0.0392 -0.1249 +vn -0.2717 -0.0456 -0.3882 +vn -0.7639 -0.0423 -0.3783 +vn -1.1652 -0.0367 -0.3589 +vn -0.2529 -0.0392 -0.6077 +vn -0.7245 -0.0367 -0.5783 +vn -1.0702 -0.0331 -0.5308 +vn -1.9814 -0.0068 -0.1368 +vn -1.8416 -0.0066 -0.3887 +vn -1.5850 -0.0062 -0.6078 +vn -1.8416 -0.0194 -0.1347 +vn -1.7066 -0.0189 -0.3788 +vn -1.4820 -0.0179 -0.5778 +vn -1.5850 -0.0303 -0.1254 +vn -1.4810 -0.0289 -0.3593 +vn -1.3368 -0.0265 -0.5307 +vn -0.2758 -0.0068 -0.9826 +vn -0.2684 -0.0194 -0.9132 +vn -0.2519 -0.0303 -0.7860 +vn -0.7827 -0.0067 -0.9132 +vn -0.7628 -0.0189 -0.8463 +vn -0.7238 -0.0288 -0.7349 +vn -1.2255 -0.0063 -0.7860 +vn -1.1661 -0.0179 -0.7344 +vn -1.0703 -0.0265 -0.6629 +vn 0.2758 0.0068 -0.9826 +vn 0.2684 0.0194 -0.9132 +vn 0.2519 0.0303 -0.7860 +vn 0.7827 0.0067 -0.9132 +vn 0.7628 0.0189 -0.8463 +vn 0.7238 0.0288 -0.7349 +vn 1.2255 0.0063 -0.7860 +vn 1.1661 0.0179 -0.7344 +vn 1.0703 0.0265 -0.6629 +vn 0.2758 0.0491 -0.1368 +vn 0.7839 0.0456 -0.1331 +vn 1.2257 0.0392 -0.1249 +vn 0.2717 0.0456 -0.3882 +vn 0.7639 0.0423 -0.3783 +vn 1.1652 0.0367 -0.3589 +vn 0.2529 0.0392 -0.6077 +vn 0.7245 0.0367 -0.5783 +vn 1.0702 0.0331 -0.5308 +vn 1.9814 0.0068 -0.1368 +vn 1.8416 0.0066 -0.3887 +vn 1.5850 0.0062 -0.6078 +vn 1.8416 0.0194 -0.1347 +vn 1.7066 0.0189 -0.3788 +vn 1.4820 0.0179 -0.5778 +vn 1.5850 0.0303 -0.1254 +vn 1.4810 0.0289 -0.3593 +vn 1.3368 0.0265 -0.5307 +vn 0.2758 -0.0068 -0.9826 +vn 0.7839 -0.0066 -0.9132 +vn 1.2257 -0.0062 -0.7860 +vn 0.2717 -0.0194 -0.9132 +vn 0.7639 -0.0189 -0.8463 +vn 1.1652 -0.0179 -0.7349 +vn 0.2529 -0.0303 -0.7860 +vn 0.7245 -0.0289 -0.7344 +vn 1.0702 -0.0265 -0.6629 +vn 1.9814 -0.0068 -0.1368 +vn 1.8416 -0.0194 -0.1331 +vn 1.5850 -0.0303 -0.1249 +vn 1.8416 -0.0067 -0.3882 +vn 1.7066 -0.0189 -0.3783 +vn 1.4820 -0.0288 -0.3589 +vn 1.5850 -0.0063 -0.6077 +vn 1.4810 -0.0179 -0.5783 +vn 1.3368 -0.0265 -0.5308 +vn 0.2684 -0.0456 -0.3887 +vn 0.2519 -0.0392 -0.6078 +vn 0.7827 -0.0456 -0.1347 +vn 0.7628 -0.0423 -0.3788 +vn 0.7238 -0.0367 -0.5778 +vn 1.2255 -0.0392 -0.1254 +vn 1.1661 -0.0367 -0.3593 +vn 1.0703 -0.0331 -0.5307 +vn -1.9814 0.0068 0.1368 +vn -1.8416 0.0066 0.3887 +vn -1.5850 0.0062 0.6078 +vn -1.8416 0.0194 0.1347 +vn -1.7066 0.0189 0.3788 +vn -1.4820 0.0179 0.5778 +vn -1.5850 0.0303 0.1254 +vn -1.4810 0.0289 0.3593 +vn -1.3368 0.0265 0.5307 +vn -0.2758 0.0068 0.9826 +vn -0.2684 0.0194 0.9132 +vn -0.2519 0.0303 0.7860 +vn -0.7827 0.0067 0.9132 +vn -0.7628 0.0189 0.8463 +vn -0.7238 0.0288 0.7349 +vn -1.2255 0.0063 0.7860 +vn -1.1661 0.0179 0.7344 +vn -1.0703 0.0265 0.6629 +vn -0.2758 0.0491 0.1368 +vn -0.7839 0.0456 0.1331 +vn -1.2257 0.0392 0.1249 +vn -0.2717 0.0456 0.3882 +vn -0.7639 0.0423 0.3783 +vn -1.1652 0.0367 0.3589 +vn -0.2529 0.0392 0.6077 +vn -0.7245 0.0367 0.5783 +vn -1.0702 0.0331 0.5308 +vn -0.2758 -0.0068 0.9826 +vn -0.7839 -0.0066 0.9132 +vn -1.2257 -0.0062 0.7860 +vn -0.2717 -0.0194 0.9132 +vn -0.7639 -0.0189 0.8463 +vn -1.1652 -0.0179 0.7349 +vn -0.2529 -0.0303 0.7860 +vn -0.7245 -0.0289 0.7344 +vn -1.0702 -0.0265 0.6629 +vn -1.9814 -0.0068 0.1368 +vn -1.8416 -0.0194 0.1331 +vn -1.5850 -0.0303 0.1249 +vn -1.8416 -0.0067 0.3882 +vn -1.7066 -0.0189 0.3783 +vn -1.4820 -0.0288 0.3589 +vn -1.5850 -0.0063 0.6077 +vn -1.4810 -0.0179 0.5783 +vn -1.3368 -0.0265 0.5308 +vn -2.0194 -0.0000 -0.0000 +vn -0.2684 -0.0456 0.3887 +vn -0.2519 -0.0392 0.6078 +vn -0.7827 -0.0456 0.1347 +vn -0.7628 -0.0423 0.3788 +vn -0.7238 -0.0367 0.5778 +vn -1.2255 -0.0392 0.1254 +vn -1.1661 -0.0367 0.3593 +vn -1.0703 -0.0331 0.5307 +vn 0.2758 0.0068 0.9826 +vn 0.7839 0.0066 0.9132 +vn 1.2257 0.0062 0.7860 +vn 0.2717 0.0194 0.9132 +vn 0.7639 0.0189 0.8463 +vn 1.1652 0.0179 0.7349 +vn 0.2529 0.0303 0.7860 +vn 0.7245 0.0289 0.7344 +vn 1.0702 0.0265 0.6629 +vn 1.9814 0.0068 0.1368 +vn 1.8416 0.0194 0.1331 +vn 1.5850 0.0303 0.1249 +vn 1.8416 0.0067 0.3882 +vn 1.7066 0.0189 0.3783 +vn 1.4820 0.0288 0.3589 +vn 1.5850 0.0063 0.6077 +vn 1.4810 0.0179 0.5783 +vn 1.3368 0.0265 0.5308 +vn 0.2758 0.0491 0.1368 +vn 0.2684 0.0456 0.3887 +vn 0.2519 0.0392 0.6078 +vn 0.7827 0.0456 0.1347 +vn 0.7628 0.0423 0.3788 +vn 0.7238 0.0367 0.5778 +vn 1.2255 0.0392 0.1254 +vn 1.1661 0.0367 0.3593 +vn 1.0703 0.0331 0.5307 +vn 0.7839 -0.0456 0.1331 +vn 1.2257 -0.0392 0.1249 +vn 0.2717 -0.0456 0.3882 +vn 0.7639 -0.0423 0.3783 +vn 1.1652 -0.0367 0.3589 +vn 0.2529 -0.0392 0.6077 +vn 0.7245 -0.0367 0.5783 +vn 1.0702 -0.0331 0.5308 +vn 1.9814 -0.0068 0.1368 +vn 1.8416 -0.0066 0.3887 +vn 1.5850 -0.0062 0.6078 +vn 1.8416 -0.0194 0.1347 +vn 1.7066 -0.0189 0.3788 +vn 1.4820 -0.0179 0.5778 +vn 1.5850 -0.0303 0.1254 +vn 1.4810 -0.0289 0.3593 +vn 1.3368 -0.0265 0.5307 +vn 0.2758 -0.0068 0.9826 +vn 0.2684 -0.0194 0.9132 +vn 0.2519 -0.0303 0.7860 +vn 0.7827 -0.0067 0.9132 +vn 0.7628 -0.0189 0.8463 +vn 0.7238 -0.0288 0.7349 +vn 1.2255 -0.0063 0.7860 +vn 1.1661 -0.0179 0.7344 +vn 1.0703 -0.0265 0.6629 +vn -0.0000 -0.0496 0.1307 +vn -0.0000 -0.0462 0.3832 +vn -0.0000 -0.0397 0.6097 +vn -0.0000 -0.0304 0.7944 +vn -0.0000 -0.0191 0.9252 +vn -0.0000 -0.0065 0.9928 +vn -0.2635 -0.0496 -0.0000 +vn -0.7728 -0.0462 -0.0000 +vn -1.2294 -0.0397 -0.0000 +vn -1.6020 -0.0304 -0.0000 +vn -1.8657 -0.0191 -0.0000 +vn -2.0021 -0.0065 -0.0000 +vn -0.2635 -0.0000 -0.9928 +vn -0.7728 -0.0000 -0.9252 +vn -1.2294 -0.0000 -0.7944 +vn -1.6020 -0.0000 -0.6097 +vn -1.8657 -0.0000 -0.3832 +vn -2.0021 -0.0000 -0.1307 +vn 2.0021 -0.0000 0.1307 +vn 1.8657 -0.0000 0.3832 +vn 1.6020 -0.0000 0.6097 +vn 1.2294 -0.0000 0.7944 +vn 0.7728 -0.0000 0.9252 +vn 0.2635 -0.0000 0.9928 +vn 2.0021 -0.0000 -0.1307 +vn 1.8657 -0.0000 -0.3832 +vn 1.6020 -0.0000 -0.6097 +vn 1.2294 -0.0000 -0.7944 +vn 0.7728 -0.0000 -0.9252 +vn 0.2635 -0.0000 -0.9928 +vn -2.0021 -0.0000 0.1307 +vn -1.8657 -0.0000 0.3832 +vn -1.6020 -0.0000 0.6097 +vn -1.2294 -0.0000 0.7944 +vn -0.7728 -0.0000 0.9252 +vn -0.2635 -0.0000 0.9928 +vn 0.2635 0.0496 -0.0000 +vn 0.7728 0.0462 -0.0000 +vn 1.2294 0.0397 -0.0000 +vn 1.6020 0.0304 -0.0000 +vn 1.8657 0.0191 -0.0000 +vn 2.0021 0.0065 -0.0000 +vn -0.0000 0.0496 -0.1307 +vn -0.0000 0.0462 -0.3832 +vn -0.0000 0.0397 -0.6097 +vn -0.0000 0.0304 -0.7944 +vn -0.0000 0.0191 -0.9252 +vn -0.0000 0.0065 -0.9928 +vn 0.2635 -0.0496 -0.0000 +vn 0.7728 -0.0462 -0.0000 +vn 1.2294 -0.0397 -0.0000 +vn 1.6020 -0.0304 -0.0000 +vn 1.8657 -0.0191 -0.0000 +vn 2.0021 -0.0065 -0.0000 +vn -0.0000 0.0496 0.1307 +vn -0.0000 0.0462 0.3832 +vn -0.0000 0.0397 0.6097 +vn -0.0000 0.0304 0.7944 +vn -0.0000 0.0191 0.9252 +vn -0.0000 0.0065 0.9928 +vn -0.2635 0.0496 -0.0000 +vn -0.7728 0.0462 -0.0000 +vn -1.2294 0.0397 -0.0000 +vn -1.6020 0.0304 -0.0000 +vn -1.8657 0.0191 -0.0000 +vn -2.0021 0.0065 -0.0000 +vn -0.0000 -0.0496 -0.1307 +vn -0.0000 -0.0462 -0.3832 +vn -0.0000 -0.0397 -0.6097 +vn -0.0000 -0.0304 -0.7944 +vn -0.0000 -0.0191 -0.9252 +vn -0.0000 -0.0065 -0.9928 +vn -0.2758 -0.0491 -0.1368 +vn 0.2758 -0.0491 -0.1367 +vn -0.2758 -0.0491 0.1367 +vn 0.2758 -0.0491 0.1368 +vn -2.0179 -0.0000 0.0388 +vn 2.0179 -0.0000 -0.0388 +vn -0.0782 -0.0000 -1.0007 +vn 0.0782 -0.0000 1.0007 +vn 0.0611 -0.0000 -1.0009 +vn -0.0611 -0.0000 1.0009 +vn 2.0185 -0.0000 0.0303 +vn -2.0185 -0.0000 -0.0303 +vt 0.579948 0.337500 +vt 0.840885 0.798611 +vt 0.578906 0.336574 +vt 0.579948 0.336574 +vt 0.840885 0.816204 +vt 0.579948 0.337500 +vt 0.579948 0.337500 +vt 0.578906 0.336574 +vt 0.579427 0.337500 +vt 0.579948 0.337500 +vt 0.840885 0.800463 +vt 0.579948 0.337500 +vt 0.579948 0.337500 +vt 0.579427 0.337500 +vt 0.578906 0.336574 +vt 0.579948 0.337500 +vt 0.840885 0.803241 +vt 0.579948 0.337500 +vt 0.579948 0.337500 +vt 0.579427 0.337500 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.579948 0.336574 +vt 0.840885 0.814352 +vt 0.579948 0.336574 +vt 0.840885 0.811574 +vt 0.579948 0.336574 +vt 0.840885 0.807870 +vt 0.579948 0.336574 +vt 0.842969 0.816204 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.776823 0.816204 +vt 0.794531 0.798611 +vt 0.794531 0.816204 +vt 0.776823 0.814352 +vt 0.776823 0.811574 +vt 0.776823 0.807870 +vt 0.785677 0.798611 +vt 0.778906 0.816204 +vt 0.779427 0.813426 +vt 0.779427 0.811574 +vt 0.778906 0.807870 +vt 0.785677 0.800463 +vt 0.780990 0.816204 +vt 0.780990 0.813426 +vt 0.780990 0.812500 +vt 0.780990 0.807870 +vt 0.785677 0.802315 +vt 0.785677 0.808796 +vt 0.794531 0.800463 +vt 0.794531 0.803241 +vt 0.794531 0.807870 +vt 0.792448 0.798611 +vt 0.792448 0.801389 +vt 0.792448 0.803241 +vt 0.792448 0.807870 +vt 0.790365 0.798611 +vt 0.790365 0.801389 +vt 0.790365 0.802315 +vt 0.790365 0.807870 +vt 0.792448 0.816204 +vt 0.790365 0.816204 +vt 0.785677 0.816204 +vt 0.794531 0.814352 +vt 0.792448 0.813426 +vt 0.790365 0.813426 +vt 0.785677 0.814352 +vt 0.794531 0.811574 +vt 0.792448 0.811574 +vt 0.790365 0.812500 +vt 0.785677 0.812500 +vt 0.579948 0.333796 +vt 0.840885 0.862500 +vt 0.578906 0.333796 +vt 0.840885 0.880093 +vt 0.579948 0.331944 +vt 0.579948 0.333796 +vt 0.842969 0.862500 +vt 0.579948 0.333796 +vt 0.579427 0.333796 +vt 0.579948 0.332870 +vt 0.840885 0.864352 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.579427 0.332870 +vt 0.579948 0.332870 +vt 0.840885 0.867130 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.579427 0.332870 +vt 0.579427 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.579427 0.331944 +vt 0.578906 0.333796 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.579427 0.331944 +vt 0.578906 0.333796 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.579427 0.332870 +vt 0.579948 0.331944 +vt 0.840885 0.877315 +vt 0.579948 0.332870 +vt 0.840885 0.875463 +vt 0.579948 0.332870 +vt 0.840885 0.870833 +vt 0.579948 0.331944 +vt 0.579948 0.331944 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.579948 0.331944 +vt 0.579948 0.331944 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.794531 0.862500 +vt 0.794531 0.880093 +vt 0.776823 0.862500 +vt 0.794531 0.864352 +vt 0.794531 0.867130 +vt 0.794531 0.870833 +vt 0.792448 0.862500 +vt 0.792448 0.864352 +vt 0.792448 0.867130 +vt 0.792448 0.870833 +vt 0.790365 0.862500 +vt 0.790365 0.864352 +vt 0.790365 0.866204 +vt 0.790365 0.870833 +vt 0.787240 0.870833 +vt 0.792448 0.880093 +vt 0.790365 0.880093 +vt 0.776823 0.870833 +vt 0.785677 0.880093 +vt 0.794531 0.877315 +vt 0.792448 0.877315 +vt 0.790365 0.877315 +vt 0.785677 0.877315 +vt 0.778906 0.870833 +vt 0.794531 0.875463 +vt 0.792448 0.875463 +vt 0.790365 0.875463 +vt 0.785677 0.876389 +vt 0.780990 0.870833 +vt 0.778906 0.862500 +vt 0.780990 0.862500 +vt 0.785677 0.862500 +vt 0.776823 0.864352 +vt 0.779427 0.864352 +vt 0.780990 0.864352 +vt 0.785677 0.864352 +vt 0.776823 0.867130 +vt 0.779427 0.867130 +vt 0.780990 0.866204 +vt 0.785677 0.866204 +vt 0.579948 0.340278 +vt 0.840885 0.752315 +vt 0.840885 0.734722 +vt 0.579948 0.342130 +vt 0.575781 0.336574 +vt 0.579948 0.341204 +vt 0.840885 0.750463 +vt 0.579948 0.341204 +vt 0.840885 0.747685 +vt 0.579948 0.341204 +vt 0.840885 0.743981 +vt 0.579948 0.340278 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579948 0.340278 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579427 0.341204 +vt 0.575260 0.336574 +vt 0.579948 0.342130 +vt 0.579948 0.342130 +vt 0.575260 0.336574 +vt 0.579427 0.342130 +vt 0.579948 0.342130 +vt 0.840885 0.737500 +vt 0.579948 0.342130 +vt 0.579948 0.342130 +vt 0.579427 0.342130 +vt 0.575260 0.336574 +vt 0.579948 0.341204 +vt 0.840885 0.739352 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579427 0.341204 +vt 0.575260 0.336574 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.579427 0.340278 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.579427 0.341204 +vt 0.575781 0.336574 +vt 0.575260 0.336574 +vt 0.575260 0.336574 +vt 0.575260 0.336574 +vt 0.579427 0.341204 +vt 0.575260 0.336574 +vt 0.794531 0.734722 +vt 0.794531 0.752315 +vt 0.730990 0.816204 +vt 0.794531 0.737500 +vt 0.794531 0.739352 +vt 0.794531 0.743981 +vt 0.792448 0.734722 +vt 0.792448 0.737500 +vt 0.792448 0.739352 +vt 0.792448 0.743981 +vt 0.790365 0.734722 +vt 0.790365 0.737500 +vt 0.790365 0.739352 +vt 0.790365 0.743981 +vt 0.789323 0.743981 +vt 0.785677 0.746759 +vt 0.722135 0.810648 +vt 0.792448 0.752315 +vt 0.790365 0.752315 +vt 0.730990 0.807870 +vt 0.785677 0.752315 +vt 0.794531 0.750463 +vt 0.792448 0.750463 +vt 0.790365 0.750463 +vt 0.785677 0.750463 +vt 0.728906 0.807870 +vt 0.794531 0.747685 +vt 0.792448 0.747685 +vt 0.790365 0.748611 +vt 0.785677 0.748611 +vt 0.726823 0.807870 +vt 0.728906 0.816204 +vt 0.726302 0.816204 +vt 0.722135 0.816204 +vt 0.785677 0.734722 +vt 0.730990 0.814352 +vt 0.728385 0.813426 +vt 0.726302 0.813426 +vt 0.785677 0.737500 +vt 0.722135 0.814352 +vt 0.730990 0.811574 +vt 0.728906 0.811574 +vt 0.726302 0.812500 +vt 0.785677 0.738426 +vt 0.722135 0.812500 +vt 0.840885 0.688426 +vt 0.579948 0.344907 +vt 0.840885 0.926389 +vt 0.579948 0.329167 +vt 0.575781 0.333796 +vt 0.579948 0.344907 +vt 0.840885 0.686574 +vt 0.579948 0.344907 +vt 0.840885 0.684722 +vt 0.579948 0.345833 +vt 0.579948 0.328241 +vt 0.840885 0.934722 +vt 0.840885 0.680093 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.345833 +vt 0.579948 0.328241 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.345833 +vt 0.579948 0.328241 +vt 0.579427 0.345833 +vt 0.579427 0.329167 +vt 0.575260 0.332870 +vt 0.579948 0.329167 +vt 0.579948 0.329167 +vt 0.575781 0.332870 +vt 0.579427 0.329167 +vt 0.579948 0.329167 +vt 0.840885 0.928241 +vt 0.579948 0.329167 +vt 0.579948 0.329167 +vt 0.579427 0.329167 +vt 0.575781 0.332870 +vt 0.579948 0.329167 +vt 0.840885 0.930093 +vt 0.579948 0.329167 +vt 0.579948 0.329167 +vt 0.579427 0.329167 +vt 0.575260 0.332870 +vt 0.575781 0.333796 +vt 0.575260 0.333796 +vt 0.575260 0.333796 +vt 0.579427 0.344907 +vt 0.575781 0.332870 +vt 0.575781 0.332870 +vt 0.575260 0.332870 +vt 0.579427 0.344907 +vt 0.575260 0.332870 +vt 0.575781 0.332870 +vt 0.575781 0.332870 +vt 0.575260 0.332870 +vt 0.579427 0.344907 +vt 0.575260 0.332870 +vt 0.730990 0.862500 +vt 0.794531 0.926389 +vt 0.794531 0.688426 +vt 0.730990 0.864352 +vt 0.730990 0.867130 +vt 0.730990 0.870833 +vt 0.785677 0.926389 +vt 0.728906 0.862500 +vt 0.728906 0.864352 +vt 0.728906 0.867130 +vt 0.728906 0.870833 +vt 0.785677 0.928241 +vt 0.726302 0.862500 +vt 0.726302 0.864352 +vt 0.726302 0.866204 +vt 0.726823 0.870833 +vt 0.785677 0.930093 +vt 0.725781 0.870833 +vt 0.789323 0.934722 +vt 0.785677 0.683796 +vt 0.794531 0.928241 +vt 0.794531 0.930093 +vt 0.794531 0.934722 +vt 0.794531 0.680093 +vt 0.792448 0.926389 +vt 0.792448 0.928241 +vt 0.792448 0.930093 +vt 0.792448 0.934722 +vt 0.792448 0.680093 +vt 0.790365 0.926389 +vt 0.790365 0.928241 +vt 0.790365 0.930093 +vt 0.790365 0.934722 +vt 0.790365 0.680093 +vt 0.792448 0.688426 +vt 0.790365 0.688426 +vt 0.722135 0.862500 +vt 0.785677 0.688426 +vt 0.794531 0.686574 +vt 0.792448 0.686574 +vt 0.790365 0.686574 +vt 0.722135 0.864352 +vt 0.785677 0.686574 +vt 0.794531 0.684722 +vt 0.792448 0.684722 +vt 0.790365 0.684722 +vt 0.722135 0.866204 +vt 0.785677 0.684722 +vt 0.778906 0.816204 +vt 0.776823 0.816204 +vt 0.776823 0.814352 +vt 0.779427 0.813426 +vt 0.776823 0.864352 +vt 0.776823 0.862500 +vt 0.778906 0.862500 +vt 0.779427 0.864352 +vt 0.730990 0.814352 +vt 0.730990 0.816204 +vt 0.728906 0.816204 +vt 0.728385 0.813426 +vt 0.728906 0.862500 +vt 0.730990 0.862500 +vt 0.730990 0.864352 +vt 0.728906 0.864352 +s 0 +usemtl Generic_walls +f 5523/11358/3634 5373/11177/3634 5449/11267/3634 5595/11457/3634 +f 5597/11459/3635 5558/11401/3635 5485/11307/3635 5521/11356/3635 +f 5448/11266/3636 5412/11220/3636 5559/11403/3636 5596/11458/3636 +f 5337/11131/3637 5486/11309/3637 5560/11405/3637 5411/11219/3637 +f 5375/11179/3638 5338/11133/3638 5410/11218/3638 5447/11265/3638 +f 5336/11129/3639 5339/11134/3639 5343/11140/3639 5342/11138/3639 +f 5339/11134/3640 5340/11135/3640 5344/11141/3640 5343/11140/3640 +f 5340/11135/3641 5341/11137/3641 5345/11142/3641 5344/11141/3641 +f 5342/11138/3642 5343/11140/3642 5347/11146/3642 5346/11144/3642 +f 5343/11140/3643 5344/11141/3643 5348/11147/3643 5347/11146/3643 +f 5344/11141/3644 5345/11142/3644 5349/11148/3644 5348/11147/3644 +f 5346/11144/3645 5347/11146/3645 5368/11172/3645 5364/11166/3645 +f 5347/11146/3646 5348/11147/3646 5372/11176/3646 5368/11172/3646 +f 5348/11147/3647 5349/11148/3647 5350/11150/3647 5372/11176/3647 +f 5337/11131/3648 5351/11151/3648 5355/11155/3648 5354/11154/3648 +f 5351/11151/3649 5352/11152/3649 5356/11156/3649 5355/11155/3649 +f 5352/11152/3650 5353/11153/3650 5357/11157/3650 5356/11156/3650 +f 5354/11154/3651 5355/11155/3651 5359/11159/3651 5358/11158/3651 +f 5355/11155/3652 5356/11156/3652 5360/11160/3652 5359/11159/3652 +f 5356/11156/3653 5357/11157/3653 5361/11161/3653 5360/11160/3653 +f 5358/11158/3654 5359/11159/3654 5345/11143/3654 5341/11136/3654 +f 5359/11159/3655 5360/11160/3655 5349/11149/3655 5345/11143/3655 +f 5360/11160/3656 5361/11161/3656 5350/11150/3656 5349/11149/3656 +f 5338/11132/3657 5362/11162/3657 5366/11170/3657 5365/11168/3657 +f 5362/11162/3658 5363/11164/3658 5367/11171/3658 5366/11170/3658 +f 5363/11164/3659 5364/11166/3659 5368/11172/3659 5367/11171/3659 +f 5365/11168/3660 5366/11170/3660 5370/11174/3660 5369/11173/3660 +f 5366/11170/3661 5367/11171/3661 5371/11175/3661 5370/11174/3661 +f 5367/11171/3662 5368/11172/3662 5372/11176/3662 5371/11175/3662 +f 5369/11173/3663 5370/11174/3663 5357/11157/3663 5353/11153/3663 +f 5370/11174/3664 5371/11175/3664 5361/11161/3664 5357/11157/3664 +f 5371/11175/3665 5372/11176/3665 5350/11150/3665 5361/11161/3665 +f 5550/11391/3638 5523/11358/3638 5641/11514/3638 5640/11513/3638 +f 5376/11180/3666 5377/11181/3666 5381/11186/3666 5380/11185/3666 +f 5377/11181/3667 5378/11182/3667 5382/11187/3667 5381/11186/3667 +f 5379/11184/3668 5380/11185/3668 5384/11190/3668 5383/11189/3668 +f 5380/11185/3669 5381/11186/3669 5385/11191/3669 5384/11190/3669 +f 5381/11186/3670 5382/11187/3670 5386/11192/3670 5385/11191/3670 +f 5383/11189/3671 5384/11190/3671 5405/11212/3671 5401/11208/3671 +f 5384/11190/3672 5385/11191/3672 5409/11216/3672 5405/11212/3672 +f 5385/11191/3673 5386/11192/3673 5387/11194/3673 5409/11216/3673 +f 5374/11178/3674 5388/11195/3674 5392/11199/3674 5391/11198/3674 +f 5388/11195/3675 5389/11196/3675 5393/11200/3675 5392/11199/3675 +f 5389/11196/3676 5390/11197/3676 5394/11201/3676 5393/11200/3676 +f 5391/11198/3677 5392/11199/3677 5396/11203/3677 5395/11202/3677 +f 5392/11199/3678 5393/11200/3678 5397/11204/3678 5396/11203/3678 +f 5393/11200/3679 5394/11201/3679 5398/11205/3679 5397/11204/3679 +f 5395/11202/3680 5396/11203/3680 5382/11188/3680 5378/11183/3680 +f 5396/11203/3681 5397/11204/3681 5386/11193/3681 5382/11188/3681 +f 5397/11204/3682 5398/11205/3682 5387/11194/3682 5386/11193/3682 +f 5375/11179/3683 5399/11206/3683 5403/11210/3683 5402/11209/3683 +f 5399/11206/3684 5400/11207/3684 5404/11211/3684 5403/11210/3684 +f 5400/11207/3685 5401/11208/3685 5405/11212/3685 5404/11211/3685 +f 5402/11209/3686 5403/11210/3686 5407/11214/3686 5406/11213/3686 +f 5403/11210/3687 5404/11211/3687 5408/11215/3687 5407/11214/3687 +f 5404/11211/3688 5405/11212/3688 5409/11216/3688 5408/11215/3688 +f 5406/11213/3689 5407/11214/3689 5394/11201/3689 5390/11197/3689 +f 5407/11214/3690 5408/11215/3690 5398/11205/3690 5394/11201/3690 +f 5408/11215/3691 5409/11216/3691 5387/11194/3691 5398/11205/3691 +f 5410/11217/3692 5413/11222/3692 5417/11228/3692 5416/11226/3692 +f 5413/11222/3693 5414/11224/3693 5418/11229/3693 5417/11228/3693 +f 5414/11224/3694 5415/11225/3694 5419/11230/3694 5418/11229/3694 +f 5416/11226/3695 5417/11228/3695 5421/11233/3695 5420/11231/3695 +f 5417/11228/3696 5418/11229/3696 5422/11234/3696 5421/11233/3696 +f 5418/11229/3697 5419/11230/3697 5423/11235/3697 5422/11234/3697 +f 5420/11231/3698 5421/11233/3698 5442/11260/3698 5438/11255/3698 +f 5421/11233/3699 5422/11234/3699 5446/11264/3699 5442/11260/3699 +f 5422/11234/3700 5423/11235/3700 5424/11236/3700 5446/11264/3700 +f 5411/11219/3701 5425/11237/3701 5429/11242/3701 5428/11241/3701 +f 5425/11237/3702 5426/11238/3702 5430/11243/3702 5429/11242/3702 +f 5426/11238/3703 5427/11239/3703 5431/11244/3703 5430/11243/3703 +f 5428/11241/3704 5429/11242/3704 5433/11247/3704 5432/11246/3704 +f 5429/11242/3705 5430/11243/3705 5434/11248/3705 5433/11247/3705 +f 5430/11243/3706 5431/11244/3706 5435/11249/3706 5434/11248/3706 +f 5432/11246/3707 5433/11247/3707 5419/11230/3707 5415/11225/3707 +f 5433/11247/3708 5434/11248/3708 5423/11235/3708 5419/11230/3708 +f 5434/11248/3709 5435/11249/3709 5424/11236/3709 5423/11235/3709 +f 5412/11221/3710 5436/11251/3710 5440/11258/3710 5439/11257/3710 +f 5436/11251/3711 5437/11253/3711 5441/11259/3711 5440/11258/3711 +f 5437/11253/3712 5438/11255/3712 5442/11260/3712 5441/11259/3712 +f 5439/11257/3713 5440/11258/3713 5444/11262/3713 5443/11261/3713 +f 5440/11258/3714 5441/11259/3714 5445/11263/3714 5444/11262/3714 +f 5441/11259/3715 5442/11260/3715 5446/11264/3715 5445/11263/3715 +f 5443/11261/3716 5444/11262/3716 5431/11245/3716 5427/11240/3716 +f 5444/11262/3717 5445/11263/3717 5435/11250/3717 5431/11245/3717 +f 5445/11263/3718 5446/11264/3718 5424/11236/3718 5435/11250/3718 +f 5447/11265/3719 5450/11268/3719 5454/11272/3719 5453/11271/3719 +f 5450/11268/3720 5451/11269/3720 5455/11273/3720 5454/11272/3720 +f 5451/11269/3721 5452/11270/3721 5456/11274/3721 5455/11273/3721 +f 5453/11271/3722 5454/11272/3722 5458/11276/3722 5457/11275/3722 +f 5454/11272/3723 5455/11273/3723 5459/11277/3723 5458/11276/3723 +f 5455/11273/3724 5456/11274/3724 5460/11278/3724 5459/11277/3724 +f 5457/11275/3725 5458/11276/3725 5479/11300/3725 5475/11296/3725 +f 5458/11276/3726 5459/11277/3726 5483/11304/3726 5479/11300/3726 +f 5459/11277/3727 5460/11278/3727 5461/11279/3727 5483/11304/3727 +f 5448/11266/3728 5462/11280/3728 5466/11285/3728 5465/11284/3728 +f 5462/11280/3729 5463/11281/3729 5467/11286/3729 5466/11285/3729 +f 5463/11281/3730 5464/11283/3730 5468/11287/3730 5467/11286/3730 +f 5465/11284/3731 5466/11285/3731 5470/11290/3731 5469/11289/3731 +f 5466/11285/3732 5467/11286/3732 5471/11291/3732 5470/11290/3732 +f 5467/11286/3733 5468/11287/3733 5472/11292/3733 5471/11291/3733 +f 5469/11289/3734 5470/11290/3734 5456/11274/3734 5452/11270/3734 +f 5470/11290/3735 5471/11291/3735 5460/11278/3735 5456/11274/3735 +f 5471/11291/3736 5472/11292/3736 5461/11279/3736 5460/11278/3736 +f 5476/11297/3635 5449/11267/3635 5637/11510/3635 5636/11509/3635 +f 5473/11294/3737 5474/11295/3737 5478/11299/3737 5477/11298/3737 +f 5474/11295/3738 5475/11296/3738 5479/11300/3738 5478/11299/3738 +f 5476/11297/3739 5477/11298/3739 5481/11302/3739 5480/11301/3739 +f 5477/11298/3740 5478/11299/3740 5482/11303/3740 5481/11302/3740 +f 5478/11299/3741 5479/11300/3741 5483/11304/3741 5482/11303/3741 +f 5480/11301/3742 5481/11302/3742 5468/11288/3742 5464/11282/3742 +f 5481/11302/3743 5482/11303/3743 5472/11293/3743 5468/11288/3743 +f 5482/11303/3744 5483/11304/3744 5461/11279/3744 5472/11293/3744 +f 5484/11305/3745 5487/11310/3745 5491/11317/3745 5490/11316/3745 +f 5487/11310/3746 5488/11312/3746 5492/11318/3746 5491/11317/3746 +f 5488/11312/3747 5489/11314/3747 5493/11319/3747 5492/11318/3747 +f 5490/11316/3748 5491/11317/3748 5495/11321/3748 5494/11320/3748 +f 5491/11317/3749 5492/11318/3749 5496/11322/3749 5495/11321/3749 +f 5492/11318/3750 5493/11319/3750 5497/11323/3750 5496/11322/3750 +f 5494/11320/3751 5495/11321/3751 5516/11349/3751 5512/11345/3751 +f 5495/11321/3752 5496/11322/3752 5520/11354/3752 5516/11349/3752 +f 5496/11322/3753 5497/11323/3753 5498/11324/3753 5520/11354/3753 +f 5485/11308/3754 5499/11326/3754 5503/11332/3754 5502/11330/3754 +f 5499/11326/3755 5500/11327/3755 5504/11333/3755 5503/11332/3755 +f 5500/11327/3756 5501/11329/3756 5505/11334/3756 5504/11333/3756 +f 5502/11330/3757 5503/11332/3757 5507/11338/3757 5506/11336/3757 +f 5503/11332/3758 5504/11333/3758 5508/11339/3758 5507/11338/3758 +f 5504/11333/3759 5505/11334/3759 5509/11340/3759 5508/11339/3759 +f 5506/11336/3760 5507/11338/3760 5493/11319/3760 5489/11314/3760 +f 5507/11338/3761 5508/11339/3761 5497/11323/3761 5493/11319/3761 +f 5508/11339/3762 5509/11340/3762 5498/11324/3762 5497/11323/3762 +f 5486/11309/3763 5510/11342/3763 5514/11347/3763 5513/11346/3763 +f 5510/11342/3764 5511/11343/3764 5515/11348/3764 5514/11347/3764 +f 5511/11343/3765 5512/11344/3765 5516/11350/3765 5515/11348/3765 +f 5513/11346/3766 5514/11347/3766 5518/11352/3766 5517/11351/3766 +f 5514/11347/3767 5515/11348/3767 5519/11353/3767 5518/11352/3767 +f 5515/11348/3768 5516/11350/3768 5520/11355/3768 5519/11353/3768 +f 5517/11351/3769 5518/11352/3769 5505/11335/3769 5501/11328/3769 +f 5518/11352/3770 5519/11353/3770 5509/11341/3770 5505/11335/3770 +f 5519/11353/3771 5520/11355/3771 5498/11325/3771 5509/11341/3771 +f 5521/11356/3772 5524/11359/3772 5528/11363/3772 5527/11362/3772 +f 5524/11359/3773 5525/11360/3773 5529/11364/3773 5528/11363/3773 +f 5525/11360/3774 5526/11361/3774 5530/11365/3774 5529/11364/3774 +f 5527/11362/3775 5528/11363/3775 5532/11367/3775 5531/11366/3775 +f 5528/11363/3776 5529/11364/3776 5533/11368/3776 5532/11367/3776 +f 5529/11364/3777 5530/11365/3777 5534/11369/3777 5533/11368/3777 +f 5531/11366/3778 5532/11367/3778 5553/11394/3778 5549/11390/3778 +f 5532/11367/3779 5533/11368/3779 5557/11399/3779 5553/11394/3779 +f 5533/11368/3780 5534/11369/3780 5535/11370/3780 5557/11399/3780 +f 5522/11357/3781 5536/11373/3781 5540/11378/3781 5539/11377/3781 +f 5536/11373/3782 5537/11374/3782 5541/11379/3782 5540/11378/3782 +f 5537/11374/3783 5538/11376/3783 5542/11380/3783 5541/11379/3783 +f 5539/11377/3784 5540/11378/3784 5544/11383/3784 5543/11382/3784 +f 5540/11378/3785 5541/11379/3785 5545/11384/3785 5544/11383/3785 +f 5541/11379/3786 5542/11380/3786 5546/11385/3786 5545/11384/3786 +f 5543/11382/3787 5544/11383/3787 5530/11365/3787 5526/11361/3787 +f 5544/11383/3788 5545/11384/3788 5534/11369/3788 5530/11365/3788 +f 5545/11384/3789 5546/11385/3789 5535/11371/3789 5534/11369/3789 +f 5601/11464/3790 5595/11457/3790 5645/11518/3790 5644/11517/3790 +f 5547/11387/3791 5548/11388/3791 5552/11393/3791 5551/11392/3791 +f 5548/11388/3792 5549/11389/3792 5553/11395/3792 5552/11393/3792 +f 5550/11391/3793 5551/11392/3793 5555/11397/3793 5554/11396/3793 +f 5551/11392/3794 5552/11393/3794 5556/11398/3794 5555/11397/3794 +f 5552/11393/3795 5553/11395/3795 5557/11400/3795 5556/11398/3795 +f 5554/11396/3796 5555/11397/3796 5542/11381/3796 5538/11375/3796 +f 5555/11397/3797 5556/11398/3797 5546/11386/3797 5542/11381/3797 +f 5556/11398/3798 5557/11400/3798 5535/11372/3798 5546/11386/3798 +f 5558/11402/3799 5561/11406/3799 5565/11415/3799 5564/11414/3799 +f 5561/11406/3800 5562/11408/3800 5566/11416/3800 5565/11415/3800 +f 5562/11408/3801 5563/11410/3801 5567/11417/3801 5566/11416/3801 +f 5564/11414/3802 5565/11415/3802 5569/11420/3802 5568/11419/3802 +f 5565/11415/3803 5566/11416/3803 5570/11421/3803 5569/11420/3803 +f 5566/11416/3804 5567/11417/3804 5571/11422/3804 5570/11421/3804 +f 5568/11419/3805 5569/11420/3805 5590/11450/3805 5586/11446/3805 +f 5569/11420/3806 5570/11421/3806 5594/11455/3806 5590/11450/3806 +f 5570/11421/3807 5571/11422/3807 5572/11424/3807 5594/11455/3807 +f 5559/11404/3808 5573/11427/3808 5577/11433/3808 5576/11431/3808 +f 5573/11427/3809 5574/11428/3809 5578/11434/3809 5577/11433/3809 +f 5574/11428/3810 5575/11430/3810 5579/11435/3810 5578/11434/3810 +f 5576/11431/3811 5577/11433/3811 5581/11439/3811 5580/11437/3811 +f 5577/11433/3812 5578/11434/3812 5582/11440/3812 5581/11439/3812 +f 5578/11434/3813 5579/11435/3813 5583/11441/3813 5582/11440/3813 +f 5580/11437/3814 5581/11439/3814 5567/11418/3814 5563/11411/3814 +f 5581/11439/3815 5582/11440/3815 5571/11423/3815 5567/11418/3815 +f 5582/11440/3816 5583/11441/3816 5572/11425/3816 5571/11423/3816 +f 5560/11405/3817 5584/11443/3817 5588/11448/3817 5587/11447/3817 +f 5584/11443/3818 5585/11444/3818 5589/11449/3818 5588/11448/3818 +f 5585/11444/3819 5586/11445/3819 5590/11451/3819 5589/11449/3819 +f 5587/11447/3820 5588/11448/3820 5592/11453/3820 5591/11452/3820 +f 5588/11448/3821 5589/11449/3821 5593/11454/3821 5592/11453/3821 +f 5589/11449/3822 5590/11451/3822 5594/11456/3822 5593/11454/3822 +f 5591/11452/3823 5592/11453/3823 5579/11436/3823 5575/11429/3823 +f 5592/11453/3824 5593/11454/3824 5583/11442/3824 5579/11436/3824 +f 5593/11454/3825 5594/11456/3825 5572/11426/3825 5583/11442/3825 +f 5379/11184/3636 5373/11177/3636 5633/11506/3636 5632/11505/3636 +f 5598/11460/3826 5599/11461/3826 5603/11466/3826 5602/11465/3826 +f 5599/11461/3827 5600/11462/3827 5604/11467/3827 5603/11466/3827 +f 5601/11464/3828 5602/11465/3828 5606/11470/3828 5605/11469/3828 +f 5602/11465/3829 5603/11466/3829 5607/11471/3829 5606/11470/3829 +f 5603/11466/3830 5604/11467/3830 5608/11472/3830 5607/11471/3830 +f 5605/11469/3831 5606/11470/3831 5627/11498/3831 5623/11493/3831 +f 5606/11470/3832 5607/11471/3832 5631/11503/3832 5627/11498/3832 +f 5607/11471/3833 5608/11472/3833 5609/11474/3833 5631/11503/3833 +f 5596/11458/3834 5610/11477/3834 5614/11482/3834 5613/11481/3834 +f 5610/11477/3835 5611/11478/3835 5615/11483/3835 5614/11482/3835 +f 5611/11478/3836 5612/11479/3836 5616/11484/3836 5615/11483/3836 +f 5613/11481/3837 5614/11482/3837 5618/11487/3837 5617/11486/3837 +f 5614/11482/3838 5615/11483/3838 5619/11488/3838 5618/11487/3838 +f 5615/11483/3839 5616/11484/3839 5620/11489/3839 5619/11488/3839 +f 5617/11486/3840 5618/11487/3840 5604/11468/3840 5600/11463/3840 +f 5618/11487/3841 5619/11488/3841 5608/11473/3841 5604/11468/3841 +f 5619/11488/3842 5620/11489/3842 5609/11475/3842 5608/11473/3842 +f 5597/11459/3843 5621/11491/3843 5625/11496/3843 5624/11495/3843 +f 5621/11491/3844 5622/11492/3844 5626/11497/3844 5625/11496/3844 +f 5622/11492/3845 5623/11494/3845 5627/11499/3845 5626/11497/3845 +f 5624/11495/3846 5625/11496/3846 5629/11501/3846 5628/11500/3846 +f 5625/11496/3847 5626/11497/3847 5630/11502/3847 5629/11501/3847 +f 5626/11497/3848 5627/11499/3848 5631/11504/3848 5630/11502/3848 +f 5628/11500/3849 5629/11501/3849 5616/11485/3849 5612/11480/3849 +f 5629/11501/3850 5630/11502/3850 5620/11490/3850 5616/11485/3850 +f 5630/11502/3851 5631/11504/3851 5609/11476/3851 5620/11490/3851 +f 5523/11358/3852 5595/11457/3852 5601/11464/3852 5547/11387/3852 +f 5547/11387/3853 5601/11464/3853 5605/11469/3853 5548/11388/3853 +f 5548/11388/3854 5605/11469/3854 5623/11493/3854 5549/11389/3854 +f 5549/11390/3855 5623/11494/3855 5622/11492/3855 5531/11366/3855 +f 5531/11366/3856 5622/11492/3856 5621/11491/3856 5527/11362/3856 +f 5527/11362/3857 5621/11491/3857 5597/11459/3857 5521/11356/3857 +f 5373/11177/3858 5523/11358/3858 5550/11391/3858 5376/11180/3858 +f 5376/11180/3859 5550/11391/3859 5554/11396/3859 5377/11181/3859 +f 5377/11181/3860 5554/11396/3860 5538/11375/3860 5378/11182/3860 +f 5378/11183/3861 5538/11376/3861 5537/11374/3861 5395/11202/3861 +f 5395/11202/3862 5537/11374/3862 5536/11373/3862 5391/11198/3862 +f 5391/11198/3863 5536/11373/3863 5522/11357/3863 5374/11178/3863 +f 5338/11133/3864 5375/11179/3864 5402/11209/3864 5362/11163/3864 +f 5362/11163/3865 5402/11209/3865 5406/11213/3865 5363/11165/3865 +f 5363/11165/3866 5406/11213/3866 5390/11197/3866 5364/11167/3866 +f 5364/11167/3867 5390/11197/3867 5389/11196/3867 5346/11145/3867 +f 5346/11145/3868 5389/11196/3868 5388/11195/3868 5342/11139/3868 +f 5342/11139/3869 5388/11195/3869 5374/11178/3869 5336/11130/3869 +f 5596/11458/3870 5559/11403/3870 5576/11432/3870 5610/11477/3870 +f 5610/11477/3871 5576/11432/3871 5580/11438/3871 5611/11478/3871 +f 5611/11478/3872 5580/11438/3872 5563/11412/3872 5612/11479/3872 +f 5612/11480/3873 5563/11413/3873 5562/11409/3873 5628/11500/3873 +f 5628/11500/3874 5562/11409/3874 5561/11407/3874 5624/11495/3874 +f 5624/11495/3875 5561/11407/3875 5558/11401/3875 5597/11459/3875 +f 5412/11220/3876 5448/11266/3876 5465/11284/3876 5436/11252/3876 +f 5436/11252/3877 5465/11284/3877 5469/11289/3877 5437/11254/3877 +f 5437/11254/3878 5469/11289/3878 5452/11270/3878 5438/11256/3878 +f 5438/11256/3879 5452/11270/3879 5451/11269/3879 5420/11232/3879 +f 5420/11232/3880 5451/11269/3880 5450/11268/3880 5416/11227/3880 +f 5416/11227/3881 5450/11268/3881 5447/11265/3881 5410/11218/3881 +f 5484/11306/3882 5522/11357/3882 5539/11377/3882 5487/11311/3882 +f 5487/11311/3883 5539/11377/3883 5543/11382/3883 5488/11313/3883 +f 5488/11313/3884 5543/11382/3884 5526/11361/3884 5489/11315/3884 +f 5489/11315/3885 5526/11361/3885 5525/11360/3885 5506/11337/3885 +f 5506/11337/3886 5525/11360/3886 5524/11359/3886 5502/11331/3886 +f 5502/11331/3887 5524/11359/3887 5521/11356/3887 5485/11307/3887 +f 5411/11219/3888 5560/11405/3888 5587/11447/3888 5425/11237/3888 +f 5425/11237/3889 5587/11447/3889 5591/11452/3889 5426/11238/3889 +f 5426/11238/3890 5591/11452/3890 5575/11429/3890 5427/11239/3890 +f 5427/11240/3891 5575/11430/3891 5574/11428/3891 5443/11261/3891 +f 5443/11261/3892 5574/11428/3892 5573/11427/3892 5439/11257/3892 +f 5439/11257/3893 5573/11427/3893 5559/11404/3893 5412/11221/3893 +f 5337/11131/3894 5411/11219/3894 5428/11241/3894 5351/11151/3894 +f 5351/11151/3895 5428/11241/3895 5432/11246/3895 5352/11152/3895 +f 5352/11152/3896 5432/11246/3896 5415/11225/3896 5353/11153/3896 +f 5353/11153/3897 5415/11225/3897 5414/11224/3897 5369/11173/3897 +f 5369/11173/3898 5414/11224/3898 5413/11222/3898 5365/11168/3898 +f 5365/11169/3899 5413/11223/3899 5410/11218/3899 5338/11133/3899 +f 5595/11457/3900 5449/11267/3900 5476/11297/3900 5598/11460/3900 +f 5598/11460/3901 5476/11297/3901 5480/11301/3901 5599/11461/3901 +f 5599/11461/3902 5480/11301/3902 5464/11282/3902 5600/11462/3902 +f 5600/11463/3903 5464/11283/3903 5463/11281/3903 5617/11486/3903 +f 5617/11486/3904 5463/11281/3904 5462/11280/3904 5613/11481/3904 +f 5613/11481/3905 5462/11280/3905 5448/11266/3905 5596/11458/3905 +f 5560/11405/3906 5486/11309/3906 5513/11346/3906 5584/11443/3906 +f 5584/11443/3907 5513/11346/3907 5517/11351/3907 5585/11444/3907 +f 5585/11444/3908 5517/11351/3908 5501/11328/3908 5586/11445/3908 +f 5586/11446/3909 5501/11329/3909 5500/11327/3909 5568/11419/3909 +f 5568/11419/3910 5500/11327/3910 5499/11326/3910 5564/11414/3910 +f 5564/11414/3911 5499/11326/3911 5485/11308/3911 5558/11402/3911 +f 5486/11309/3912 5337/11131/3912 5354/11154/3912 5510/11342/3912 +f 5510/11342/3913 5354/11154/3913 5358/11158/3913 5511/11343/3913 +f 5511/11343/3914 5358/11158/3914 5341/11136/3914 5512/11344/3914 +f 5512/11345/3915 5341/11137/3915 5340/11135/3915 5494/11320/3915 +f 5494/11320/3916 5340/11135/3916 5339/11134/3916 5490/11316/3916 +f 5490/11316/3917 5339/11134/3917 5336/11129/3917 5484/11305/3917 +f 5449/11267/3918 5373/11177/3918 5379/11184/3918 5473/11294/3918 +f 5473/11294/3919 5379/11184/3919 5383/11189/3919 5474/11295/3919 +f 5474/11295/3920 5383/11189/3920 5401/11208/3920 5475/11296/3920 +f 5475/11296/3921 5401/11208/3921 5400/11207/3921 5457/11275/3921 +f 5457/11275/3922 5400/11207/3922 5399/11206/3922 5453/11271/3922 +f 5453/11271/3923 5399/11206/3923 5375/11179/3923 5447/11265/3923 +f 5522/11357/3790 5484/11306/3790 5336/11130/3790 5374/11178/3790 +f 5633/11506/3924 5634/11507/3924 5635/11508/3924 5632/11505/3924 +f 5637/11510/3925 5638/11511/3925 5639/11512/3925 5636/11509/3925 +f 5641/11514/3926 5642/11515/3926 5643/11516/3926 5640/11513/3926 +f 5645/11518/3927 5646/11519/3927 5647/11520/3927 5644/11517/3927 +f 5373/11177/3635 5376/11180/3635 5634/11507/3635 5633/11506/3635 +f 5595/11457/3638 5598/11460/3638 5646/11519/3638 5645/11518/3638 +f 5449/11267/3790 5473/11294/3790 5638/11511/3790 5637/11510/3790 +f 5523/11358/3636 5547/11387/3636 5642/11515/3636 5641/11514/3636 +f 5376/11180/3928 5380/11185/3928 5635/11508/3928 5634/11507/3928 +f 5598/11460/3929 5602/11465/3929 5647/11520/3929 5646/11519/3929 +f 5473/11294/3930 5477/11298/3930 5639/11512/3930 5638/11511/3930 +f 5547/11387/3931 5551/11392/3931 5643/11516/3931 5642/11515/3931 +f 5380/11185/3932 5379/11184/3932 5632/11505/3932 5635/11508/3932 +f 5602/11465/3933 5601/11464/3933 5644/11517/3933 5647/11520/3933 +f 5477/11298/3934 5476/11297/3934 5636/11509/3934 5639/11512/3934 +f 5551/11392/3935 5550/11391/3935 5640/11513/3935 5643/11516/3935 +o Chair.014 +v 10.272421 0.415382 5.944873 +v 10.272421 0.429951 5.944873 +v 10.224793 0.429951 5.958791 +v 9.838980 0.429951 6.071535 +v 9.791353 0.429951 6.085452 +v 9.791353 0.415382 6.085452 +v 9.838980 0.415382 6.071535 +v 10.224793 0.415382 5.958791 +v 9.683467 0.429951 5.716260 +v 9.683467 0.415382 5.716260 +v 9.683467 0.400812 5.716260 +v 9.727255 0.400812 5.703465 +v 9.838980 0.400812 6.071535 +v 9.791353 0.400812 6.085452 +v 10.164535 0.415382 5.575682 +v 10.164535 0.429951 5.575682 +v 10.120747 0.415382 5.588477 +v 10.120747 0.429951 5.588477 +v 10.164535 0.400812 5.575682 +v 10.120747 0.400812 5.588477 +v 10.272421 0.400812 5.944873 +v 10.224793 0.400812 5.958791 +v 9.818074 0.432961 6.103781 +v 9.832424 0.432961 6.099587 +v 9.831162 0.421009 6.095271 +v 9.816813 0.421009 6.099464 +v 9.834704 0.426967 6.107390 +v 9.820354 0.426967 6.111584 +v 10.259068 0.419106 5.972372 +v 10.244924 0.419106 5.976506 +v 10.248466 0.425064 5.988625 +v 10.262609 0.425064 5.984491 +v 10.260368 0.434699 5.976823 +v 10.246224 0.434699 5.980957 +v 9.836454 0.431853 6.113381 +v 9.822105 0.431853 6.117575 +v 10.250256 0.433592 5.994750 +v 10.264400 0.433592 5.990617 +v 10.267840 0.592772 6.002391 +v 10.263809 0.593879 5.988597 +v 9.821515 0.592141 6.115554 +v 9.835864 0.592141 6.111361 +v 9.825545 0.591033 6.129349 +v 9.830708 0.829840 6.147012 +v 9.826676 0.830948 6.133218 +v 10.273002 0.831579 6.020054 +v 10.268970 0.832686 6.006260 +v 9.839895 0.591033 6.125155 +v 10.249665 0.593879 5.992730 +v 10.253695 0.592772 6.006524 +v 9.823812 0.830737 6.123416 +v 9.849729 0.870951 6.129895 +v 9.847181 0.870348 6.121179 +v 10.251959 0.832325 6.000580 +v 10.266103 0.832325 5.996447 +v 10.244919 0.869634 6.006832 +v 10.228662 0.864490 6.011168 +v 9.845057 0.829840 6.142818 +v 10.261259 0.608202 5.979870 +v 10.254827 0.832686 6.010393 +v 10.258858 0.831579 6.024188 +v 9.841026 0.830948 6.129025 +v 9.853359 0.869953 6.142319 +v 9.818968 0.606614 6.106838 +v 9.833318 0.606614 6.102645 +v 9.838161 0.830737 6.119223 +v 10.247114 0.608202 5.984003 +v 10.247469 0.870373 6.015557 +v 10.231213 0.865229 6.019895 +v 10.234843 0.864232 6.032319 +v 9.918078 0.913073 6.103549 +v 9.920822 0.914244 6.111272 +v 10.177867 0.911897 6.039191 +v 10.175925 0.911148 6.031269 +v 9.870772 0.867524 6.137035 +v 9.867142 0.868521 6.124612 +v 9.929854 0.902898 6.107720 +v 9.933765 0.901824 6.121103 +v 9.864594 0.867919 6.115895 +v 10.251100 0.869376 6.027982 +v 10.168468 0.900855 6.041051 +v 10.172379 0.899781 6.054432 +v 10.181777 0.910823 6.052572 +v 9.924732 0.913170 6.124653 +v 10.168145 0.901346 6.032754 +v 9.927112 0.901727 6.099999 +v 9.727255 0.415382 5.703465 +v 9.727255 0.429951 5.703465 +v 9.735509 0.438060 5.902086 +v 9.729902 0.443651 5.903724 +v 9.766670 0.443651 6.029547 +v 9.772277 0.438060 6.027909 +v 9.772107 0.429976 6.027958 +v 9.781364 0.437950 6.059005 +v 9.780461 0.430300 6.056546 +v 9.716606 0.429903 5.907610 +v 9.716775 0.437987 5.907560 +v 9.680007 0.437987 5.781739 +v 9.679838 0.429903 5.781788 +v 9.685375 0.443828 5.780170 +v 9.676427 0.439408 5.749549 +v 9.671715 0.434055 5.753360 +v 9.729972 0.424135 5.903704 +v 9.722213 0.424311 5.905972 +v 9.685445 0.424311 5.780149 +v 9.693204 0.424135 5.777882 +v 9.722143 0.443828 5.905992 +v 9.693134 0.443651 5.777903 +v 9.753544 0.437987 6.033383 +v 9.758911 0.443828 6.031815 +v 9.735339 0.429976 5.902136 +v 9.698571 0.429976 5.776314 +v 9.766741 0.424135 6.029527 +v 9.758981 0.424311 6.031794 +v 9.672453 0.426646 5.756514 +v 9.678686 0.421521 5.757023 +v 9.684206 0.439247 5.747349 +v 9.686466 0.421360 5.754824 +v 9.691177 0.426713 5.751012 +v 9.753375 0.429903 6.033432 +v 9.762624 0.437881 6.064457 +v 9.768521 0.443408 6.064701 +v 9.774565 0.424773 6.056302 +v 9.766822 0.424940 6.058624 +v 9.761723 0.430231 6.061998 +v 9.698741 0.438060 5.776264 +v 9.788396 0.420977 6.083699 +v 9.782026 0.416357 6.081836 +v 9.774298 0.416497 6.084207 +v 9.769650 0.420919 6.089130 +v 9.771207 0.427313 6.093829 +v 9.776265 0.443241 6.062379 +v 9.776309 0.402967 6.111915 +v 9.778371 0.407418 6.118344 +v 9.789953 0.427371 6.088398 +v 9.797122 0.407458 6.112928 +v 9.795059 0.403008 6.106500 +v 9.777577 0.431932 6.095691 +v 9.785107 0.410634 6.121456 +v 9.785307 0.431793 6.093321 +v 9.792825 0.410537 6.119047 +v 9.802099 0.380352 6.129961 +v 9.799734 0.378323 6.122499 +v 9.783345 0.380334 6.135367 +v 9.790299 0.381800 6.139225 +v 9.798011 0.381756 6.136794 +v 9.788324 0.399792 6.103388 +v 9.780606 0.399889 6.105796 +v 9.794682 0.345795 6.154221 +v 9.802392 0.345756 6.151789 +v 9.792782 0.376856 6.118640 +v 9.804087 0.342751 6.137393 +v 9.797122 0.341467 6.133492 +v 9.780982 0.378304 6.127905 +v 9.785070 0.376901 6.121071 +v 9.789411 0.341506 6.135925 +v 9.785335 0.342735 6.142799 +v 9.670913 0.349401 5.681037 +v 9.672996 0.348454 5.688793 +v 9.661467 -0.002953 5.649338 +v 9.659384 -0.002007 5.641582 +v 9.787715 0.344511 6.150320 +v 9.812029 0.001491 6.233523 +v 9.818995 0.002774 6.237424 +v 9.655940 0.350077 5.679445 +v 9.663749 0.350056 5.677345 +v 9.652220 -0.001352 5.637890 +v 9.644411 -0.001331 5.639990 +v 9.828402 -0.000270 6.220596 +v 9.821436 -0.001553 6.216696 +v 9.806469 0.344527 6.144914 +v 9.667747 0.425574 5.719847 +v 9.663581 0.421603 5.725526 +v 9.690440 0.434122 5.747858 +v 9.682300 0.421652 5.720001 +v 9.675543 0.425454 5.717703 +v 9.671831 0.412305 5.733564 +v 9.679627 0.412185 5.731421 +v 9.683792 0.416156 5.725741 +v 9.676212 0.403231 5.699172 +v 9.669126 0.405075 5.695743 +v 9.666557 0.398698 5.715516 +v 9.674363 0.398640 5.713408 +v 9.678184 0.400566 5.706547 +v 9.665075 0.416106 5.731267 +v 9.670132 0.371230 5.698925 +v 9.673898 0.372479 5.691880 +v 9.659470 0.400542 5.712087 +v 9.655185 0.372464 5.697423 +v 9.662323 0.371267 5.701027 +v 9.661319 0.405133 5.697850 +v 9.664714 0.375406 5.680646 +v 9.656906 0.375443 5.682748 +v 9.657498 0.403207 5.704712 +v 9.653138 0.374194 5.689793 +v 9.652200 0.349392 5.686581 +v 9.654283 0.348446 5.694336 +v 9.671852 0.374209 5.684250 +v 9.669256 0.347770 5.695930 +v 9.661447 0.347791 5.698028 +v 9.649918 -0.003617 5.658573 +v 9.657726 -0.003637 5.656474 +v 9.830783 0.001507 6.228117 +v 9.642754 -0.002962 5.654881 +v 9.809649 -0.000286 6.226003 +v 9.820215 0.000611 6.227060 +v 9.813725 -0.001514 6.219128 +v 9.826706 0.002736 6.234992 +v 9.651068 -0.002484 5.648232 +v 9.640671 -0.002015 5.647126 +v 10.238035 0.438060 5.755236 +v 10.232429 0.443651 5.756875 +v 10.269197 0.443651 5.882698 +v 10.274803 0.438060 5.881059 +v 10.274634 0.429976 5.881108 +v 10.283890 0.437950 5.912156 +v 10.282989 0.430300 5.909696 +v 10.187971 0.424311 5.633300 +v 10.182364 0.429903 5.634938 +v 10.174978 0.426646 5.609664 +v 10.181212 0.421521 5.610173 +v 10.232498 0.424135 5.756854 +v 10.224739 0.424311 5.759122 +v 10.195730 0.424135 5.631032 +v 10.224669 0.443828 5.759142 +v 10.195661 0.443651 5.631053 +v 10.187901 0.443828 5.633320 +v 10.219301 0.437987 5.760711 +v 10.182533 0.437987 5.634889 +v 10.256069 0.437987 5.886533 +v 10.261437 0.443828 5.884965 +v 10.237865 0.429976 5.755286 +v 10.201097 0.429976 5.629464 +v 10.269267 0.424135 5.882677 +v 10.261507 0.424311 5.884944 +v 10.186732 0.439247 5.600500 +v 10.178952 0.439408 5.602699 +v 10.188993 0.421360 5.607974 +v 10.193704 0.426713 5.604162 +v 10.201266 0.438060 5.629415 +v 10.192966 0.434122 5.601008 +v 10.219132 0.429903 5.760760 +v 10.255900 0.429903 5.886583 +v 10.265150 0.437881 5.917608 +v 10.271048 0.443408 5.917851 +v 10.277091 0.424773 5.909452 +v 10.269347 0.424940 5.911774 +v 10.264248 0.430231 5.915148 +v 10.278790 0.443241 5.915529 +v 10.280104 0.431932 5.948843 +v 10.287833 0.431793 5.946471 +v 10.290923 0.420977 5.936849 +v 10.284553 0.416357 5.934987 +v 10.276823 0.416497 5.937357 +v 10.272177 0.420919 5.942280 +v 10.283133 0.399889 5.958946 +v 10.278835 0.402967 5.965065 +v 10.290851 0.399792 5.956538 +v 10.273733 0.427313 5.946980 +v 10.280897 0.407418 5.971494 +v 10.292480 0.427371 5.941548 +v 10.299647 0.407458 5.966078 +v 10.297585 0.403008 5.959650 +v 10.304626 0.380352 5.983111 +v 10.302261 0.378323 5.975648 +v 10.287632 0.410634 5.974606 +v 10.285872 0.380334 5.988517 +v 10.292825 0.381800 5.992376 +v 10.295351 0.410537 5.972197 +v 10.300536 0.381756 5.989944 +v 10.290241 0.344511 6.003471 +v 10.297207 0.345795 6.007371 +v 10.304918 0.345756 6.004939 +v 10.308995 0.344527 5.998065 +v 10.295307 0.376856 5.971790 +v 10.306614 0.342751 5.990543 +v 10.299648 0.341467 5.986643 +v 10.283508 0.378304 5.981056 +v 10.287596 0.376901 5.974222 +v 10.173439 0.349401 5.534187 +v 10.175522 0.348454 5.541943 +v 10.163993 -0.002953 5.502488 +v 10.161909 -0.002007 5.494732 +v 10.314555 0.001491 6.086673 +v 10.321521 0.002774 6.090575 +v 10.158466 0.350077 5.532595 +v 10.166275 0.350056 5.530496 +v 10.154745 -0.001352 5.491040 +v 10.146936 -0.001331 5.493140 +v 10.330928 -0.000270 6.073747 +v 10.323962 -0.001553 6.069846 +v 10.287860 0.342735 5.995950 +v 10.291937 0.341506 5.989075 +v 10.184826 0.421652 5.573152 +v 10.178068 0.425454 5.570854 +v 10.174357 0.412305 5.586714 +v 10.182153 0.412185 5.584570 +v 10.186319 0.416156 5.578891 +v 10.174240 0.434055 5.606511 +v 10.180710 0.400566 5.559697 +v 10.178739 0.403231 5.552322 +v 10.176889 0.398640 5.566558 +v 10.167601 0.416106 5.584417 +v 10.161996 0.400542 5.565237 +v 10.169084 0.398698 5.568666 +v 10.170273 0.425574 5.572997 +v 10.171651 0.405075 5.548893 +v 10.163845 0.405133 5.551000 +v 10.166107 0.421603 5.578677 +v 10.157711 0.372464 5.550572 +v 10.164849 0.371267 5.554177 +v 10.167239 0.375406 5.533796 +v 10.159431 0.375443 5.535899 +v 10.160025 0.403207 5.557862 +v 10.155664 0.374194 5.542943 +v 10.154726 0.349392 5.539732 +v 10.174378 0.374209 5.537401 +v 10.172657 0.371230 5.552074 +v 10.163973 0.347791 5.551178 +v 10.171782 0.347770 5.549079 +v 10.176424 0.372479 5.545030 +v 10.152443 -0.003617 5.511724 +v 10.160252 -0.003637 5.509624 +v 10.333309 0.001507 6.081268 +v 10.312174 -0.000286 6.079153 +v 10.156809 0.348446 5.547487 +v 10.145279 -0.002962 5.508032 +v 10.322742 0.000611 6.080210 +v 10.316251 -0.001514 6.072278 +v 10.329232 0.002736 6.088142 +v 10.153595 -0.002484 5.501382 +v 10.143196 -0.002015 5.500277 +vn 0.2805 -0.0000 0.9599 +vn -0.9599 -0.0000 0.2805 +vn -0.0000 -1.0000 -0.0000 +vn 0.9599 -0.0000 -0.2805 +vn -0.2805 -0.0000 -0.9599 +vn -0.0334 0.9929 -0.1143 +vn 0.0739 -0.9646 0.2530 +vn 0.1197 -0.9044 0.4096 +vn 0.9556 -0.0911 0.2804 +vn 0.0455 -0.9868 0.1557 +vn -0.0481 0.9852 -0.1645 +vn -0.6820 -0.0779 0.7272 +vn -0.5096 -0.1146 0.8528 +vn 0.9099 -0.0987 0.4029 +vn 0.1729 -0.7874 0.5916 +vn 0.2246 -0.5992 0.7685 +vn -0.2797 0.0768 -0.9570 +vn 0.2797 -0.0768 0.9570 +vn -0.8949 -0.2916 0.3380 +vn -0.8355 0.5027 0.2220 +vn -0.2758 0.1047 -0.9555 +vn -0.2828 0.1119 -0.9526 +vn -0.2835 0.1062 -0.9531 +vn -0.2804 -0.0656 0.9576 +vn -0.8215 0.4967 0.2800 +vn -0.2774 0.0768 -0.9577 +vn -0.2368 -0.5359 -0.8104 +vn 0.8058 0.5287 -0.2668 +vn -0.7715 -0.6113 0.1764 +vn -0.1452 -0.8531 -0.5011 +vn -0.2343 -0.5326 -0.8133 +vn -0.2311 -0.5337 -0.8135 +vn -0.2376 -0.5315 -0.8131 +vn -0.0239 0.9931 -0.1147 +vn 0.2085 0.9648 -0.1600 +vn 0.2334 0.9584 -0.1645 +vn 0.4301 -0.8811 -0.1964 +vn 0.4946 -0.8634 0.0993 +vn 0.3385 -0.7743 0.5347 +vn 0.7748 -0.5705 -0.2722 +vn 0.6425 -0.3669 0.6727 +vn 0.6783 -0.3997 0.6166 +vn 0.2823 -0.0465 0.9582 +vn -0.2757 0.1108 -0.9548 +vn -0.2748 0.1116 -0.9550 +vn 0.2750 -0.0794 0.9582 +vn 0.8289 0.5223 -0.2003 +vn 0.2745 -0.0401 0.9608 +vn -0.2765 0.1101 -0.9547 +vn 0.2726 -0.0584 0.9604 +vn -0.0169 -0.7742 0.6327 +vn 0.2749 -0.0813 0.9580 +vn 0.2804 -0.0847 0.9561 +vn 0.2681 -0.0769 0.9603 +vn -0.4690 0.8588 0.2060 +vn 0.2684 0.9633 -0.0011 +vn 0.0292 0.9970 0.0715 +vn 0.2693 0.9630 -0.0014 +vn -0.5039 0.8610 0.0693 +vn -0.2798 0.0845 -0.9563 +vn -0.2737 0.0831 -0.9582 +vn -0.2727 0.0796 -0.9588 +vn -0.2682 0.0778 -0.9602 +vn -0.4751 -0.8773 0.0684 +vn -0.2595 -0.9658 -0.0017 +vn -0.2859 0.0880 -0.9542 +vn 0.2863 -0.0886 0.9540 +vn 0.4922 0.8673 -0.0742 +vn 0.4518 0.8695 -0.1996 +vn -0.2803 0.0744 -0.9570 +vn -0.2719 0.0849 -0.9586 +vn -0.0286 -0.9970 -0.0717 +vn 0.2815 -0.0732 0.9568 +vn -0.2819 0.0723 -0.9567 +vn -0.0000 1.0000 -0.0000 +vn 0.6637 0.7224 -0.1940 +vn 0.6600 0.7268 -0.1899 +vn 0.6600 0.7269 -0.1899 +vn 0.9596 -0.0225 -0.2803 +vn 0.9596 -0.0215 -0.2807 +vn 0.9578 -0.0204 -0.2867 +vn -0.9596 0.0218 0.2804 +vn -0.9600 0.0219 0.2791 +vn -0.9600 0.0219 0.2790 +vn -0.7118 0.6937 0.1098 +vn -0.0209 -0.9998 0.0061 +vn 0.0210 0.9998 -0.0061 +vn -0.6933 0.6915 0.2026 +vn -0.6882 0.6962 0.2040 +vn -0.6883 0.6962 0.2040 +vn 0.0224 0.9997 -0.0002 +vn 0.6934 -0.6915 -0.2026 +vn -0.6306 -0.7257 0.2750 +vn -0.0180 0.9903 -0.1376 +vn 0.7084 -0.6955 -0.1202 +vn -0.6638 -0.7223 0.1940 +vn -0.9596 0.0221 0.2804 +vn -0.6831 0.7008 0.2054 +vn -0.0139 -0.9995 0.0277 +vn -0.9577 0.0214 0.2870 +vn -0.9595 0.0224 0.2807 +vn 0.6227 -0.6683 -0.4070 +vn -0.7165 -0.6972 -0.0254 +vn -0.1050 -0.9532 -0.2837 +vn -0.9558 0.0183 0.2933 +vn -0.9574 0.0214 0.2879 +vn 0.0239 0.9997 0.0057 +vn -0.6499 -0.7326 0.2026 +vn 0.6563 0.7313 -0.1858 +vn 0.6866 -0.7022 -0.1884 +vn -0.9543 0.0132 0.2985 +vn -0.9556 0.0178 0.2943 +vn 0.9560 -0.0175 -0.2929 +vn 0.9576 -0.0205 -0.2874 +vn 0.9558 -0.0172 -0.2935 +vn 0.9545 -0.0124 -0.2978 +vn -0.5631 0.5509 0.6159 +vn 0.7815 0.5748 0.2425 +vn 0.1143 0.9421 0.3153 +vn 0.7225 0.6901 0.0408 +vn -0.6196 0.6614 0.4226 +vn 0.9545 -0.0119 -0.2981 +vn 0.9541 -0.0090 -0.2994 +vn -0.5197 0.3812 0.7646 +vn 0.8268 0.3978 0.3976 +vn 0.2564 0.5403 0.8015 +vn -0.1868 -0.8044 -0.5639 +vn -0.7763 -0.5868 -0.2302 +vn 0.5654 -0.5625 -0.6032 +vn 0.1946 0.7833 0.5904 +vn 0.2779 0.3980 0.8743 +vn 0.5091 -0.2790 -0.8142 +vn -0.8455 -0.2912 -0.4476 +vn -0.2776 -0.4005 -0.8732 +vn -0.9539 0.0092 0.3000 +vn -0.9543 0.0122 0.2987 +vn -0.2509 -0.5692 -0.7830 +vn -0.8229 -0.4135 -0.3897 +vn 0.5207 -0.3964 -0.7561 +vn 0.9657 -0.0027 -0.2596 +vn 0.9657 -0.0025 -0.2596 +vn -0.5052 0.1694 0.8462 +vn -0.2576 0.1162 -0.9592 +vn 0.5052 -0.1695 -0.8462 +vn 0.8457 0.2899 0.4481 +vn -0.5091 0.2777 0.8147 +vn 0.9542 -0.0080 -0.2989 +vn 0.9539 -0.0055 -0.2999 +vn -0.9537 0.0054 0.3008 +vn -0.9538 0.0070 0.3003 +vn -0.7587 0.6472 -0.0740 +vn 0.5660 0.6748 -0.4736 +vn 0.0791 -0.9356 0.3441 +vn 0.9605 -0.0216 -0.2774 +vn 0.9620 -0.0207 -0.2724 +vn 0.9636 -0.0182 -0.2667 +vn 0.9622 -0.0205 -0.2716 +vn 0.6279 0.7239 -0.2859 +vn -0.9605 0.0227 0.2773 +vn -0.9620 0.0218 0.2722 +vn 0.0119 -0.9932 0.1162 +vn 0.9604 -0.0222 -0.2777 +vn 0.5014 0.5630 -0.6570 +vn 0.1455 -0.8103 0.5676 +vn 0.9649 -0.0112 -0.2622 +vn 0.9639 -0.0173 -0.2658 +vn 0.7827 -0.5801 0.2256 +vn -0.9622 0.0211 0.2714 +vn -0.9637 0.0187 0.2665 +vn -0.0943 0.9128 -0.3974 +vn -0.5703 -0.6896 0.4464 +vn 0.7481 -0.6617 0.0496 +vn 0.8568 -0.3366 0.3906 +vn -0.4742 -0.3512 0.8073 +vn -0.2274 0.4682 -0.8539 +vn -0.9651 0.0114 0.2618 +vn -0.9640 0.0175 0.2654 +vn -0.9652 0.0104 0.2613 +vn -0.9657 0.0032 0.2595 +vn -0.8014 0.5405 -0.2562 +vn -0.1670 0.7463 -0.6443 +vn -0.5022 -0.6033 0.6195 +vn -0.2570 0.1344 -0.9570 +vn -0.9657 0.0027 0.2597 +vn -0.8852 0.0928 -0.4560 +vn -0.8856 0.0866 -0.4563 +vn 0.4622 0.0969 -0.8815 +vn 0.4624 0.0905 -0.8821 +vn 0.4624 0.0904 -0.8821 +vn 0.9655 -0.0030 -0.2605 +vn 0.9650 -0.0100 -0.2622 +vn 0.2253 -0.4821 0.8467 +vn 0.4742 0.3437 -0.8106 +vn -0.8584 0.3294 -0.3932 +vn 0.2576 -0.1162 0.9593 +vn 0.9537 -0.0053 -0.3007 +vn -0.4623 -0.0898 0.8822 +vn -0.4625 -0.0839 0.8826 +vn -0.9537 0.0053 0.3007 +vn -0.4621 -0.0956 0.8816 +vn 0.8852 -0.0916 0.4560 +vn 0.8856 -0.0860 0.4564 +vn 0.8856 -0.0859 0.4564 +vn 0.2570 -0.1319 0.9574 +vn 0.0616 -0.9756 0.2109 +vn 0.0617 -0.9756 0.2109 +vn 0.0616 -0.9756 0.2110 +vn -0.0328 -0.9931 -0.1124 +vn -0.0329 -0.9931 -0.1124 +vn -0.0328 -0.9931 -0.1125 +vn -0.8601 -0.1770 -0.4784 +vn -0.9657 0.0025 0.2597 +vn 0.8601 0.1770 0.4784 +vn 0.8860 -0.0803 0.4567 +vn -0.2928 -0.2449 -0.9243 +vn -0.8860 0.0803 -0.4567 +vn 0.2928 0.2449 0.9243 +vn 0.4625 0.0839 -0.8826 +vn 0.9596 -0.0221 -0.2804 +vn 0.9595 -0.0224 -0.2808 +vn 0.9577 -0.0214 -0.2870 +vn 0.6933 -0.6915 -0.2026 +vn 0.7083 -0.6956 -0.1202 +vn 0.9600 -0.0219 -0.2791 +vn 0.9600 -0.0219 -0.2790 +vn 0.9620 -0.0218 -0.2722 +vn 0.9606 -0.0228 -0.2771 +vn -0.9596 0.0224 0.2803 +vn 0.9596 -0.0218 -0.2804 +vn -0.1049 -0.9532 -0.2837 +vn 0.6865 -0.7023 -0.1884 +vn -0.1868 -0.8044 -0.5640 +vn -0.9558 0.0183 0.2934 +vn 0.9558 -0.0183 -0.2934 +vn 0.9574 -0.0214 -0.2879 +vn 0.9556 -0.0178 -0.2942 +vn 0.9543 -0.0131 -0.2985 +vn 0.9543 -0.0123 -0.2987 +vn 0.9539 -0.0092 -0.3000 +vn 0.5653 -0.5626 -0.6033 +vn 0.1947 0.7833 0.5904 +vn -0.5632 0.5509 0.6159 +vn -0.5090 0.2777 0.8147 +vn 0.5091 -0.2790 -0.8143 +vn -0.9539 0.0091 0.3000 +vn -0.9543 0.0123 0.2987 +vn 0.5207 -0.3964 -0.7562 +vn 0.9657 -0.0027 -0.2597 +vn 0.9657 -0.0025 -0.2597 +vn -0.5051 0.1695 0.8462 +vn 0.5051 -0.1695 -0.8463 +vn 0.9538 -0.0070 -0.3003 +vn 0.9535 -0.0057 -0.3012 +vn -0.9537 0.0055 0.3008 +vn 0.9637 -0.0187 -0.2665 +vn 0.9622 -0.0210 -0.2714 +vn 0.7481 -0.6618 0.0497 +vn -0.9604 0.0221 0.2777 +vn 0.9651 -0.0114 -0.2618 +vn 0.9640 -0.0176 -0.2654 +vn 0.7826 -0.5802 0.2256 +vn 0.2571 -0.1319 0.9573 +vn 0.9652 -0.0104 -0.2613 +vn 0.9657 -0.0032 -0.2595 +vn 0.8568 -0.3367 0.3907 +vn 0.2254 -0.4821 0.8466 +vn 0.2576 -0.1162 0.9592 +vn 0.8852 -0.0916 0.4562 +vn 0.8856 -0.0860 0.4565 +vn 0.8856 -0.0859 0.4565 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt 0.686647 0.000000 +vt 0.870176 0.996278 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.782584 0.965408 +vt 0.870573 0.970227 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.833010 0.965282 +vt 0.908785 0.026051 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.968598 0.070112 +vt 0.979071 0.026051 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.968598 0.371019 +vt 0.757324 0.262250 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.173427 0.241164 +vt 0.758439 0.080128 +vt -0.973130 0.033128 +vt -0.123087 0.241439 +vt 0.978437 0.000000 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt 0.737072 0.000128 +vt 0.908263 0.000000 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.409642 -0.009898 +vt 0.677629 0.482142 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.240570 0.058726 +vt 0.669677 0.481452 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.786789 0.246652 +vt 0.991724 0.699406 +vt 0.928489 0.277215 +vt 0.873308 0.505274 +vt 0.786789 0.155990 +vt 0.958960 0.029326 +vt 0.991724 0.483440 +vt 0.977373 0.702462 +vt -0.140978 0.246673 +vt 0.958492 0.010078 +vt -0.156145 0.246590 +vt 0.929566 0.080357 +vt -0.144664 0.252235 +vt 0.984385 0.731379 +vt 0.945934 0.020741 +vt -0.159831 0.252152 +vt 0.984385 0.500820 +vt 0.989649 0.087406 +vt 0.706860 0.007022 +vt 0.847263 0.989602 +vt 0.686599 0.714388 +vt 0.721837 0.007060 +vt 0.884682 0.006674 +vt 0.720919 0.017861 +vt 0.673632 0.527027 +vt 0.872079 0.017335 +vt 0.705942 0.017823 +vt 0.673632 0.731676 +vt 0.690157 0.523535 +vt 0.802894 0.958412 +vt 0.847659 0.963551 +vt 0.695298 0.714388 +vt 0.661237 0.495044 +vt 0.817871 0.958374 +vt 0.885205 0.032725 +vt 0.661237 0.722645 +vt 0.693293 0.503638 +vt 0.944329 0.029337 +vt 0.981154 0.731379 +vt 0.977373 0.486830 +vt 0.989649 0.263822 +vt 0.873305 0.723869 +vt 0.981154 0.500820 +vt 0.870573 0.032734 +vt 0.693293 0.761173 +vt 0.679412 0.527027 +vt 0.695298 0.493838 +vt 0.679412 0.731676 +vt 0.826600 0.493835 +vt 0.826977 0.731673 +vt 0.826600 0.714385 +vt 0.814491 0.495042 +vt 0.122435 0.638558 +vt 0.015922 0.839080 +vt 0.835047 0.699404 +vt 0.993361 0.510073 +vt 0.758428 0.504317 +vt 0.072861 0.638558 +vt 0.015474 0.619132 +vt 0.835047 0.483438 +vt 0.845328 0.702461 +vt 0.015197 0.626266 +vt 0.014109 0.491099 +vt 0.993356 0.728667 +vt 0.758425 0.722912 +vt 0.833436 0.500823 +vt 0.891028 0.725398 +vt 0.672547 0.500827 +vt 0.752235 0.729690 +vt 0.667246 0.727168 +vt 0.891033 0.506802 +vt 0.752238 0.507120 +vt 0.071993 0.783837 +vt 0.969610 0.493832 +vt 0.987699 0.731670 +vt 0.641343 0.509140 +vt 0.689355 0.726560 +vt 0.969610 0.714382 +vt 0.122436 0.783837 +vt 0.641344 0.743247 +vt 0.833436 0.731382 +vt 0.845328 0.486829 +vt 0.814491 0.722643 +vt 0.825052 0.503733 +vt 0.016195 0.832047 +vt 0.634466 0.494220 +vt 0.825052 0.761267 +vt 0.826977 0.527024 +vt 0.022424 0.783234 +vt 0.035852 0.889154 +vt 0.043016 0.971597 +vt 0.706398 0.505224 +vt 0.072863 0.808180 +vt 0.028940 0.807392 +vt 0.010039 0.882150 +vt 0.137154 0.974703 +vt 0.631023 0.892124 +vt 0.649326 0.890699 +vt 0.121379 0.984023 +vt 0.648470 0.892315 +vt 0.072864 0.783142 +vt 0.043889 0.943476 +vt 0.078385 0.805896 +vt 0.075977 0.941215 +vt 0.613560 0.946909 +vt 0.672547 0.731385 +vt 0.701510 0.486829 +vt 0.669481 0.490576 +vt 0.072863 0.646796 +vt 0.648470 0.506013 +vt 0.080915 0.841605 +vt 0.968560 0.503835 +vt 0.102906 0.865583 +vt 0.634467 0.887149 +vt 0.987699 0.527021 +vt 0.968560 0.761369 +vt 0.690090 0.495972 +vt 0.701510 0.702461 +vt 0.603150 0.865583 +vt 0.014109 0.884028 +vt 0.706395 0.729929 +vt 0.816556 0.714481 +vt 0.023239 0.646888 +vt 0.040534 0.495932 +vt 0.081188 0.621686 +vt 0.007711 0.495744 +vt 0.041481 0.497122 +vt 0.080911 0.628820 +vt 0.003028 0.888966 +vt 0.041481 0.887645 +vt 0.060838 0.971173 +vt 0.631023 0.505822 +vt 0.649326 0.500176 +vt 0.081188 0.834572 +vt 0.805889 0.743046 +vt 0.122312 0.806766 +vt 0.988155 0.503653 +vt 0.115555 0.935422 +vt 0.904138 0.912557 +vt 0.988155 0.735605 +vt 0.813022 0.494763 +vt 0.890960 0.912565 +vt 0.735836 0.641861 +vt 0.693936 0.468644 +vt 0.027417 0.833361 +vt 0.420996 0.961603 +vt 0.032040 0.784613 +vt 0.284612 0.483847 +vt 0.656925 0.504187 +vt 0.681549 0.720168 +vt 0.066750 0.834450 +vt 0.299225 0.449509 +vt 0.999708 0.720167 +vt 0.989627 0.743247 +vt 0.121899 0.832034 +vt 0.693936 0.449159 +vt 0.420996 0.999935 +vt 0.008277 0.862094 +vt 0.082562 0.831201 +vt 0.741580 0.718717 +vt 0.678836 0.505353 +vt 0.815743 0.487362 +vt 0.741523 0.585977 +vt 0.678836 0.699564 +vt 0.553315 0.945729 +vt 0.982243 0.588758 +vt 0.460393 1.018433 +vt 0.949871 0.788878 +vt 0.982305 0.727355 +vt 0.668954 0.502598 +vt 0.949657 0.691167 +vt 0.979056 0.490574 +vt 0.078628 0.952623 +vt 0.035428 0.887064 +vt 0.812426 0.730862 +vt 0.971935 0.642457 +vt 0.805889 0.532195 +vt 0.173975 1.012235 +vt 0.908785 0.976444 +vt 0.726484 0.788878 +vt 0.984477 0.500479 +vt 0.894591 0.976453 +vt 0.737043 0.505375 +vt 0.726270 0.691167 +vt 0.987420 0.694407 +vt 0.999899 0.506981 +vt 0.968797 0.500648 +vt 0.989626 0.516135 +vt 0.652223 0.697892 +vt 0.656922 0.730164 +vt 0.681740 0.506981 +vt 0.985798 0.713641 +vt 0.053549 0.993732 +vt 0.043551 0.873068 +vt 0.522988 0.991572 +vt 0.062665 0.961706 +vt 0.169656 0.991799 +vt 0.060838 0.809705 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +s 1 +usemtl CabnetDoors +f 5648/11522/3936 5649/11526/3936 5650/11531/3936 5651/11535/3936 5652/11539/3936 5653/11545/3936 5654/11548/3936 5655/11551/3936 +f 5653/11544/3937 5652/11540/3937 5656/11555/3937 5657/11558/3937 +f 5658/11560/3938 5659/11564/3938 5660/11566/3938 5661/11567/3938 +f 5662/11571/3939 5663/11572/3939 5649/11527/3939 5648/11521/3939 +f 5663/11573/3940 5662/11570/3940 5664/11575/3940 5665/11576/3940 +f 5666/11578/3940 5667/11581/3940 5664/11575/3940 5662/11570/3940 +f 5666/11579/3939 5662/11571/3939 5648/11521/3939 5668/11583/3939 +f 5661/11568/3937 5653/11544/3937 5657/11558/3937 5658/11561/3937 +f 5668/11584/3936 5648/11522/3936 5655/11551/3936 5654/11548/3936 5653/11545/3936 5661/11569/3936 5660/11565/3936 5669/11587/3936 +f 5651/11536/3941 5652/11541/3941 5670/11590/3941 5671/11594/3941 +f 5661/11569/3936 5660/11565/3936 5654/11548/3936 5653/11545/3936 +f 5655/11552/3940 5648/11523/3940 5668/11585/3940 5669/11588/3940 +f 5653/11546/3942 5654/11549/3942 5672/11598/3942 5673/11600/3942 +f 5673/11600/3943 5672/11598/3943 5674/11602/3943 5675/11605/3943 +f 5676/11608/3943 5679/11616/3943 5678/11613/3943 5677/11611/3943 +f 5654/11550/3944 5651/11537/3944 5671/11595/3944 5672/11599/3944 +f 5648/11524/3945 5676/11608/3945 5677/11611/3945 5655/11553/3945 +f 5650/11532/3946 5681/11623/3946 5680/11619/3946 5649/11528/3946 +f 5655/11554/3947 5677/11612/3947 5681/11624/3947 5650/11533/3947 +f 5652/11542/3948 5653/11547/3948 5673/11601/3948 5670/11592/3948 +f 5649/11529/3949 5680/11620/3949 5676/11609/3949 5648/11525/3949 +f 5675/11606/3950 5674/11603/3950 5682/11628/3950 5683/11632/3950 +f 5684/11635/3951 5678/11614/3951 5679/11617/3951 5685/11637/3951 +f 5680/11621/3939 5687/11640/3939 5686/11638/3939 5685/11636/3939 +f 5672/11599/3939 5671/11595/3939 5682/11627/3939 5674/11604/3939 +f 5671/11596/3952 5670/11591/3952 5688/11644/3952 5689/11649/3952 +f 5680/11621/3939 5685/11636/3939 5679/11618/3939 5676/11610/3939 +f 5670/11592/3937 5673/11601/3937 5675/11607/3937 5683/11630/3937 +f 5677/11612/3937 5678/11615/3937 5684/11633/3937 5681/11624/3937 +f 5688/11645/3937 5690/11653/3937 5691/11656/3937 5692/11660/3937 +f 5687/11640/3939 5694/11667/3939 5693/11663/3939 5686/11638/3939 +f 5670/11593/3937 5683/11631/3937 5690/11654/3937 5688/11646/3937 +f 5683/11632/3953 5682/11628/3953 5695/11670/3953 5690/11655/3953 +f 5681/11625/3952 5696/11672/3952 5687/11641/3952 5680/11622/3952 +f 5684/11634/3937 5697/11676/3937 5696/11673/3954 5681/11626/3937 +f 5685/11637/3953 5686/11639/3953 5697/11677/3953 5684/11635/3953 +f 5682/11629/3939 5671/11597/3939 5689/11650/3939 5695/11671/3939 +f 5698/11678/3955 5692/11662/3955 5699/11682/3955 5700/11683/3955 +f 5701/11685/3956 5704/11693/3957 5703/11691/3958 5702/11688/3958 +f 5690/11655/3953 5695/11670/3953 5705/11695/3953 5691/11657/3953 +f 5687/11642/3939 5706/11698/3939 5702/11690/3939 5694/11668/3939 +f 5697/11676/3937 5708/11705/3937 5707/11701/3959 5696/11673/3954 +f 5695/11671/3939 5689/11650/3939 5709/11707/3939 5705/11696/3939 +f 5686/11639/3953 5693/11664/3953 5708/11704/3953 5697/11677/3953 +f 5692/11661/3960 5691/11658/3960 5710/11710/3960 5699/11681/3960 +f 5688/11647/3937 5692/11662/3937 5698/11678/3937 5711/11712/3937 +f 5712/11715/3961 5711/11713/3952 5698/11679/3952 5713/11718/3961 +f 5714/11721/3961 5701/11686/3961 5702/11689/3952 5706/11699/3952 +f 5712/11716/3961 5713/11719/3961 5701/11687/3961 5714/11722/3961 +f 5696/11674/3962 5714/11723/3962 5706/11700/3962 5687/11643/3962 +f 5702/11690/3963 5703/11692/3963 5715/11725/3963 5694/11668/3963 +f 5708/11705/3964 5717/11729/3964 5716/11726/3964 5707/11701/3964 +f 5689/11651/3965 5712/11717/3966 5714/11723/3967 5696/11674/3954 +f 5689/11651/3965 5688/11648/3968 5711/11714/3968 5712/11717/3966 +f 5718/11733/3969 5719/11737/3969 5720/11741/3970 5721/11745/3971 +f 5722/11749/3972 5723/11752/3973 5724/11755/3974 5725/11758/3972 +f 5705/11696/3975 5709/11707/3976 5723/11753/3977 5722/11750/3975 +f 5691/11659/3978 5705/11697/3978 5722/11751/3978 5710/11711/3978 +f 5713/11719/3979 5726/11762/3980 5704/11694/3957 5701/11687/3956 +f 5707/11702/3959 5716/11727/3981 5723/11754/3977 5709/11708/3976 +f 5694/11669/3982 5715/11724/3982 5727/11766/3982 5693/11665/3982 +f 5693/11666/3983 5727/11764/3983 5717/11730/3983 5708/11706/3983 +f 5713/11720/3979 5698/11680/3984 5700/11684/3984 5726/11763/3980 +f 5716/11727/3985 5728/11767/3986 5724/11756/3974 5723/11754/3973 +f 5729/11770/3987 5730/11774/3988 5731/11778/3989 5725/11759/3989 +f 5699/11681/3990 5710/11710/3990 5731/11779/3990 5719/11738/3990 +f 5720/11742/3991 5719/11739/3992 5731/11780/3992 5730/11775/3993 +f 5700/11683/3994 5699/11682/3994 5719/11740/3994 5718/11734/3994 +f 5721/11746/3995 5732/11782/3996 5733/11785/3997 5718/11735/3998 +f 5717/11731/3999 5729/11771/4000 5728/11768/3986 5716/11728/3999 +f 5704/11693/4001 5732/11783/3996 5721/11747/3995 5703/11691/4001 +f 5727/11765/4002 5730/11776/3988 5729/11772/3987 5717/11732/4002 +f 5715/11724/4003 5720/11743/3991 5730/11777/3993 5727/11766/4003 +f 5703/11692/4004 5721/11748/3971 5720/11744/3970 5715/11725/4004 +f 5726/11762/4005 5733/11786/3997 5732/11784/3996 5704/11694/4006 +f 5729/11773/4000 5725/11760/4007 5724/11757/3974 5728/11769/3986 +f 5710/11711/4008 5722/11751/4008 5725/11761/4008 5731/11781/4008 +f 5726/11763/4005 5700/11684/4009 5718/11736/4009 5733/11787/3997 +f 5665/11576/3940 5664/11575/3940 5734/11788/3940 5735/11789/3940 +f 5657/11559/3940 5656/11556/3940 5735/11789/3940 5734/11788/3940 +f 5734/11788/3940 5664/11575/3940 5667/11581/3940 5659/11563/3940 +f 5659/11563/3940 5658/11562/3940 5657/11559/3940 5734/11788/3940 +f 5663/11574/4010 5665/11577/4010 5650/11534/4010 5649/11530/4010 +f 5651/11538/4010 5735/11790/4010 5656/11557/4010 5652/11543/4010 +f 5650/11534/4010 5665/11577/4010 5735/11790/4010 5651/11538/4010 +f 5669/11589/3938 5667/11582/3938 5666/11580/3938 5668/11586/3938 +f 5660/11566/3938 5659/11564/3938 5667/11582/3938 5669/11589/3938 +f 5709/11709/3976 5689/11652/3965 5696/11675/3954 5707/11703/3959 +f 5736/11791/4011 5737/11792/4011 5738/11793/4012 5739/11795/4013 +f 5740/11796/4014 5739/11794/4014 5741/11799/4015 5742/11801/4016 +f 5743/11803/4017 5744/11804/4017 5745/11805/4018 5746/11807/4019 +f 5745/11805/4020 5747/11808/4020 5748/11810/4020 5749/11812/4020 +f 5750/11814/4021 5751/11815/4021 5752/11816/4021 5753/11818/4021 +f 5754/11820/4022 5737/11792/4022 5755/11821/4022 5747/11809/4022 +f 5744/11804/4023 5754/11819/4023 5747/11808/4023 5745/11805/4023 +f 5756/11822/4024 5757/11823/4025 5754/11819/4023 5744/11804/4023 +f 5757/11824/4026 5738/11793/4026 5737/11792/4022 5754/11820/4022 +f 5758/11825/4027 5750/11813/4027 5753/11817/4027 5759/11826/4027 +f 5740/11797/4027 5760/11829/4027 5750/11813/4027 5758/11825/4027 +f 5760/11828/4021 5761/11830/4021 5751/11815/4021 5750/11814/4021 +f 5752/11816/4028 5746/11806/4028 5762/11832/4028 5763/11833/4028 +f 5747/11809/4029 5755/11821/4029 5764/11834/4029 5748/11811/4029 +f 5759/11826/4030 5753/11817/4030 5765/11836/4030 5766/11838/4030 +f 5751/11815/4031 5743/11802/4031 5746/11806/4031 5752/11816/4031 +f 5761/11830/4031 5767/11840/4031 5743/11802/4031 5751/11815/4031 +f 5767/11839/4032 5756/11822/4032 5744/11804/4017 5743/11803/4017 +f 5757/11823/4025 5756/11822/4024 5768/11841/4033 5769/11843/4033 +f 5761/11830/4034 5760/11828/4034 5770/11844/4034 5771/11846/4034 +f 5756/11822/4032 5767/11839/4032 5772/11847/4035 5768/11841/4036 +f 5773/11849/4011 5755/11821/4011 5737/11792/4011 5736/11791/4011 +f 5770/11845/4037 5742/11800/4037 5774/11852/4037 5775/11854/4037 +f 5772/11848/4038 5771/11846/4038 5776/11855/4038 5777/11857/4038 +f 5771/11846/4039 5770/11844/4039 5775/11853/4039 5776/11855/4039 +f 5768/11841/4036 5772/11847/4035 5777/11858/4040 5778/11859/4041 +f 5738/11793/4026 5757/11824/4026 5769/11842/4042 5779/11860/4042 +f 5767/11840/4043 5761/11830/4043 5771/11846/4043 5772/11848/4043 +f 5739/11795/4013 5738/11793/4012 5779/11860/4044 5741/11798/4044 +f 5760/11829/4045 5740/11797/4045 5742/11800/4045 5770/11845/4045 +f 5778/11859/4041 5777/11858/4040 5780/11861/4046 5781/11862/4047 +f 5774/11852/4048 5782/11863/4049 5783/11866/4050 5784/11867/4051 +f 5785/11868/4052 5778/11859/4052 5781/11862/4052 5786/11870/4052 +f 5782/11863/4053 5787/11873/4053 5788/11875/4053 5783/11866/4053 +f 5779/11860/4054 5769/11842/4054 5785/11869/4054 5787/11874/4054 +f 5741/11798/4055 5779/11860/4055 5787/11874/4055 5782/11864/4055 +f 5769/11843/4056 5768/11841/4056 5778/11859/4056 5785/11868/4056 +f 5742/11801/4016 5741/11799/4015 5782/11865/4049 5774/11851/4048 +f 5784/11867/4051 5783/11866/4050 5789/11879/4057 5790/11880/4058 +f 5786/11870/4059 5781/11862/4059 5791/11881/4059 5792/11883/4059 +f 5783/11866/4060 5788/11875/4060 5793/11884/4060 5789/11879/4060 +f 5788/11876/4061 5786/11871/4061 5792/11882/4061 5793/11885/4061 +f 5776/11855/4062 5775/11853/4062 5794/11886/4062 5795/11889/4062 +f 5777/11858/4063 5776/11856/4063 5795/11891/4063 5780/11861/4063 +f 5775/11854/4064 5774/11852/4064 5784/11867/4064 5794/11888/4064 +f 5787/11874/4065 5785/11869/4065 5786/11872/4065 5788/11877/4065 +f 5793/11885/4066 5792/11882/4066 5796/11893/4066 5797/11894/4066 +f 5798/11896/4067 5790/11880/4067 5799/11897/4067 5800/11898/4067 +f 5801/11900/4068 5802/11902/4068 5803/11904/4068 5804/11906/4068 +f 5802/11902/4069 5798/11895/4069 5800/11899/4069 5803/11904/4069 +f 5781/11862/4047 5780/11861/4046 5801/11901/4070 5791/11881/4071 +f 5795/11890/4072 5794/11887/4072 5798/11895/4072 5802/11902/4072 +f 5780/11861/4073 5795/11891/4073 5802/11903/4073 5801/11901/4073 +f 5794/11888/4074 5784/11867/4074 5790/11880/4074 5798/11896/4074 +f 5805/11907/4075 5806/11909/4075 5807/11911/4076 5808/11912/4076 +f 5796/11892/4077 5809/11915/4077 5810/11916/4077 5811/11918/4077 +f 5812/11921/4078 5813/11923/4078 5814/11925/4078 5815/11926/4078 +f 5800/11898/4079 5799/11897/4079 5816/11929/4079 5817/11931/4079 +f 5789/11878/4080 5793/11885/4080 5797/11894/4080 5818/11935/4080 +f 5792/11883/4081 5791/11881/4081 5809/11915/4081 5796/11892/4081 +f 5790/11880/4058 5789/11879/4057 5818/11934/4082 5799/11897/4083 +f 5791/11881/4071 5801/11901/4070 5804/11905/4084 5809/11915/4085 +f 5749/11812/4086 5748/11810/4086 5819/11936/4086 5820/11938/4086 +f 5764/11834/4087 5821/11939/4087 5822/11941/4087 5823/11945/4087 +f 5765/11835/4088 5763/11833/4088 5824/11946/4088 5825/11948/4088 +f 5821/11940/4089 5766/11837/4090 5826/11950/4091 5822/11942/4092 +f 5755/11821/4093 5773/11849/4093 5821/11939/4093 5764/11834/4093 +f 5746/11807/4019 5745/11805/4018 5749/11812/4094 5762/11831/4095 +f 5753/11818/4096 5752/11816/4096 5763/11833/4096 5765/11835/4096 +f 5773/11850/4097 5759/11827/4097 5766/11837/4090 5821/11940/4089 +f 5823/11944/4098 5822/11943/4098 5827/11952/4098 5828/11955/4098 +f 5825/11948/4099 5824/11946/4099 5829/11956/4099 5830/11959/4099 +f 5822/11943/4092 5826/11951/4091 5831/11962/4100 5827/11952/4101 +f 5826/11951/4102 5825/11949/4102 5830/11960/4102 5831/11962/4102 +f 5762/11831/4095 5749/11812/4094 5820/11938/4103 5832/11964/4104 +f 5748/11811/4105 5764/11834/4105 5823/11945/4105 5819/11937/4105 +f 5763/11833/4106 5762/11832/4106 5832/11963/4106 5824/11946/4106 +f 5766/11838/4107 5765/11836/4107 5825/11949/4107 5826/11951/4107 +f 5831/11962/4108 5830/11960/4108 5833/11965/4108 5834/11967/4108 +f 5829/11957/4109 5835/11968/4109 5836/11969/4109 5837/11971/4109 +f 5838/11973/4110 5828/11953/4110 5839/11976/4110 5840/11978/4110 +f 5835/11968/4111 5841/11980/4112 5842/11981/4113 5836/11969/4114 +f 5820/11938/4115 5819/11936/4115 5838/11975/4115 5841/11980/4115 +f 5832/11964/4104 5820/11938/4103 5841/11980/4112 5835/11968/4111 +f 5819/11937/4116 5823/11945/4116 5828/11954/4116 5838/11974/4116 +f 5824/11947/4117 5832/11964/4117 5835/11968/4117 5829/11957/4117 +f 5840/11978/4118 5839/11976/4118 5813/11923/4118 5812/11921/4118 +f 5836/11969/4114 5842/11981/4113 5843/11982/4119 5844/11984/4119 +f 5842/11981/4120 5840/11979/4120 5812/11922/4121 5843/11982/4121 +f 5839/11976/4122 5845/11985/4122 5805/11908/4123 5813/11923/4124 +f 5827/11952/4101 5831/11962/4100 5834/11967/4125 5845/11986/4126 +f 5830/11961/4127 5829/11958/4127 5837/11972/4127 5833/11966/4127 +f 5828/11955/4128 5827/11952/4128 5845/11986/4128 5839/11977/4128 +f 5841/11980/4129 5838/11975/4129 5840/11979/4129 5842/11981/4129 +f 5846/11987/4130 5847/11989/4130 5848/11990/4130 5849/11992/4130 +f 5799/11897/4083 5818/11934/4082 5850/11995/4131 5816/11929/4131 +f 5847/11989/4132 5844/11983/4132 5851/11998/4133 5848/11990/4133 +f 5809/11915/4085 5804/11905/4084 5852/12001/4134 5810/11916/4134 +f 5837/11972/4135 5836/11970/4135 5844/11983/4132 5847/11989/4132 +f 5834/11967/4136 5833/11965/4136 5846/11988/4137 5806/11909/4138 +f 5845/11986/4126 5834/11967/4125 5806/11909/4075 5805/11907/4075 +f 5833/11966/4139 5837/11972/4139 5847/11989/4139 5846/11987/4139 +f 5853/12004/4140 5811/11919/4140 5810/11917/4140 5852/12002/4140 +f 5817/11932/4140 5853/12004/4140 5852/12002/4140 5854/12005/4141 +f 5816/11930/4142 5850/11996/4140 5853/12004/4140 5817/11932/4140 +f 5850/11996/4140 5855/12007/4141 5811/11919/4140 5853/12004/4140 +f 5856/12009/4143 5815/11927/4144 5814/11924/4144 5808/11913/4144 +f 5849/11993/4143 5856/12009/4143 5808/11913/4144 5807/11910/4143 +f 5848/11991/4145 5851/11999/4143 5856/12009/4143 5849/11993/4143 +f 5851/11999/4143 5857/12010/4143 5815/11927/4144 5856/12009/4143 +f 5804/11906/4146 5803/11904/4146 5854/12006/4146 5852/12003/4146 +f 5844/11984/4119 5843/11982/4119 5857/12011/4147 5851/12000/4147 +f 5818/11935/4148 5797/11894/4148 5855/12008/4148 5850/11997/4148 +f 5806/11909/4138 5846/11988/4137 5849/11994/4149 5807/11911/4149 +f 5803/11904/4150 5800/11899/4150 5817/11933/4150 5854/12006/4150 +f 5843/11982/4121 5812/11922/4121 5815/11928/4151 5857/12011/4151 +f 5797/11894/4152 5796/11893/4152 5811/11920/4152 5855/12008/4152 +f 5813/11923/4124 5805/11908/4123 5808/11914/4153 5814/11925/4153 +f 5858/12013/4011 5859/12014/4011 5860/12015/4012 5861/12017/4013 +f 5862/12018/4154 5861/12016/4154 5863/12020/4155 5864/12021/4156 +f 5865/12022/4028 5866/12024/4028 5867/12027/4028 5868/12029/4028 +f 5869/12031/4021 5870/12032/4021 5865/12023/4021 5871/12035/4021 +f 5872/12037/4022 5859/12014/4022 5873/12038/4022 5874/12039/4022 +f 5875/12041/4023 5872/12036/4023 5874/12040/4023 5876/12042/4023 +f 5877/12043/4023 5878/12044/4023 5872/12036/4023 5875/12041/4023 +f 5878/12045/4026 5860/12015/4026 5859/12014/4022 5872/12037/4022 +f 5879/12046/4157 5869/12030/4157 5871/12034/4157 5880/12047/4157 +f 5862/12018/4157 5881/12049/4157 5869/12030/4157 5879/12046/4157 +f 5881/12048/4021 5882/12050/4021 5870/12032/4021 5869/12031/4021 +f 5874/12039/4029 5873/12038/4029 5883/12052/4029 5884/12054/4029 +f 5880/12047/4158 5871/12034/4158 5885/12055/4158 5886/12057/4158 +f 5887/12058/4159 5880/12047/4160 5886/12057/4161 5888/12060/4162 +f 5870/12033/4031 5889/12062/4031 5866/12024/4031 5865/12022/4031 +f 5882/12051/4031 5890/12064/4031 5889/12062/4031 5870/12033/4031 +f 5878/12044/4033 5877/12043/4033 5891/12065/4033 5892/12067/4033 +f 5882/12050/4034 5881/12048/4034 5893/12068/4034 5894/12070/4034 +f 5877/12043/4163 5890/12063/4163 5895/12073/4035 5891/12065/4036 +f 5879/12046/4164 5858/12012/4164 5861/12016/4154 5862/12018/4154 +f 5880/12047/4160 5887/12058/4159 5858/12012/4164 5879/12046/4164 +f 5887/12059/4011 5873/12038/4011 5859/12014/4011 5858/12013/4011 +f 5896/12074/4054 5892/12066/4054 5897/12076/4054 5898/12078/4054 +f 5893/12069/4037 5864/12021/4037 5899/12080/4037 5900/12082/4037 +f 5895/12072/4038 5894/12071/4038 5901/12083/4038 5902/12086/4038 +f 5894/12070/4165 5893/12068/4165 5900/12081/4165 5901/12085/4165 +f 5860/12015/4026 5878/12045/4026 5892/12066/4042 5896/12074/4042 +f 5890/12064/4043 5882/12051/4043 5894/12071/4043 5895/12072/4043 +f 5861/12017/4013 5860/12015/4012 5896/12074/4044 5863/12019/4044 +f 5881/12049/4166 5862/12018/4166 5864/12021/4166 5893/12069/4166 +f 5902/12087/4063 5901/12084/4063 5903/12091/4063 5904/12092/4063 +f 5901/12085/4167 5900/12081/4167 5905/12093/4167 5903/12089/4167 +f 5906/12097/4041 5902/12087/4168 5904/12092/4046 5907/12098/4047 +f 5899/12080/4169 5908/12100/4170 5909/12101/4171 5910/12102/4172 +f 5863/12019/4055 5896/12074/4055 5898/12078/4055 5908/12099/4055 +f 5892/12067/4056 5891/12065/4056 5906/12096/4056 5897/12075/4056 +f 5864/12021/4156 5863/12020/4155 5908/12100/4170 5899/12080/4169 +f 5891/12065/4036 5895/12073/4035 5902/12088/4168 5906/12096/4041 +f 5910/12102/4172 5909/12101/4171 5911/12104/4173 5912/12105/4174 +f 5913/12108/4059 5907/12098/4059 5914/12109/4059 5915/12110/4059 +f 5909/12101/4060 5916/12114/4060 5917/12115/4060 5911/12104/4060 +f 5916/12112/4061 5913/12106/4061 5915/12111/4061 5917/12116/4061 +f 5900/12082/4175 5899/12080/4175 5910/12102/4175 5905/12095/4175 +f 5898/12078/4176 5897/12076/4176 5913/12107/4176 5916/12113/4176 +f 5908/12100/4053 5898/12079/4053 5916/12114/4053 5909/12101/4053 +f 5897/12077/4177 5906/12097/4177 5907/12098/4177 5913/12108/4177 +f 5915/12110/4178 5914/12109/4178 5918/12117/4178 5919/12118/4178 +f 5911/12103/4080 5917/12116/4080 5920/12120/4080 5921/12122/4080 +f 5917/12116/4066 5915/12111/4066 5919/12119/4066 5920/12120/4066 +f 5922/12123/4179 5912/12105/4179 5923/12125/4179 5924/12126/4179 +f 5907/12098/4047 5904/12092/4046 5925/12128/4180 5914/12109/4181 +f 5903/12090/4072 5905/12094/4072 5922/12124/4072 5926/12131/4072 +f 5904/12092/4073 5903/12091/4073 5926/12130/4073 5925/12128/4073 +f 5905/12095/4182 5910/12102/4182 5912/12105/4182 5922/12123/4182 +f 5927/12132/4183 5928/12134/4183 5929/12136/4184 5930/12137/4184 +f 5919/12118/4185 5918/12117/4185 5931/12140/4185 5932/12142/4185 +f 5933/12146/4078 5934/12148/4078 5935/12150/4078 5936/12151/4078 +f 5924/12126/4186 5923/12125/4186 5937/12155/4186 5938/12157/4186 +f 5912/12105/4174 5911/12104/4173 5921/12121/4187 5923/12125/4188 +f 5914/12109/4181 5925/12128/4180 5939/12161/4189 5918/12117/4085 +f 5926/12131/4069 5922/12124/4069 5924/12127/4069 5940/12163/4069 +f 5925/12129/4068 5926/12131/4068 5940/12163/4068 5939/12162/4068 +f 5883/12052/4087 5888/12061/4087 5941/12164/4087 5942/12166/4087 +f 5885/12056/4088 5868/12028/4088 5943/12170/4088 5944/12172/4088 +f 5888/12060/4162 5886/12057/4161 5945/12173/4190 5941/12165/4191 +f 5886/12057/4192 5885/12055/4192 5944/12171/4192 5945/12173/4192 +f 5876/12042/4020 5874/12040/4020 5884/12053/4020 5946/12174/4020 +f 5873/12038/4093 5887/12059/4093 5888/12061/4093 5883/12052/4093 +f 5866/12025/4193 5876/12042/4193 5946/12174/4094 5867/12026/4095 +f 5871/12035/4096 5865/12023/4096 5868/12028/4096 5885/12056/4096 +f 5941/12165/4191 5945/12173/4190 5947/12175/4194 5948/12176/4195 +f 5945/12173/4196 5944/12171/4196 5949/12178/4196 5947/12175/4196 +f 5943/12168/4117 5950/12182/4117 5951/12183/4117 5952/12184/4117 +f 5953/12188/4116 5942/12166/4116 5954/12190/4116 5955/12193/4116 +f 5946/12174/4086 5884/12053/4086 5953/12187/4086 5956/12196/4086 +f 5867/12026/4095 5946/12174/4094 5956/12196/4103 5950/12180/4104 +f 5884/12054/4105 5883/12052/4105 5942/12166/4105 5953/12188/4105 +f 5868/12029/4106 5867/12027/4106 5950/12181/4106 5943/12169/4106 +f 5952/12184/4109 5951/12183/4109 5957/12198/4109 5958/12200/4109 +f 5955/12194/4110 5954/12191/4110 5959/12203/4110 5960/12205/4110 +f 5951/12183/4111 5961/12206/4112 5962/12207/4113 5957/12198/4114 +f 5961/12206/4129 5955/12195/4129 5960/12204/4129 5962/12207/4129 +f 5944/12172/4099 5943/12170/4099 5952/12185/4099 5949/12177/4099 +f 5942/12167/4098 5941/12165/4098 5948/12176/4098 5954/12192/4098 +f 5956/12197/4115 5953/12189/4115 5955/12195/4115 5961/12206/4115 +f 5950/12182/4104 5956/12197/4103 5961/12206/4112 5951/12183/4111 +f 5962/12207/4120 5960/12204/4120 5933/12147/4121 5963/12208/4121 +f 5959/12203/4122 5964/12209/4122 5927/12133/4123 5934/12148/4124 +f 5965/12211/4197 5958/12201/4197 5966/12213/4197 5967/12214/4197 +f 5964/12210/4198 5968/12216/4199 5928/12134/4183 5927/12132/4183 +f 5947/12175/4200 5949/12178/4200 5965/12212/4200 5968/12216/4200 +f 5948/12176/4195 5947/12175/4194 5968/12216/4199 5964/12210/4198 +f 5949/12179/4201 5952/12186/4201 5958/12201/4201 5965/12211/4201 +f 5954/12192/4128 5948/12176/4128 5964/12210/4128 5959/12202/4128 +f 5967/12214/4202 5966/12213/4202 5969/12217/4202 5970/12219/4202 +f 5923/12125/4188 5921/12121/4187 5971/12223/4131 5937/12155/4131 +f 5918/12117/4085 5939/12161/4189 5972/12226/4134 5931/12140/4134 +f 5966/12213/4132 5973/12229/4132 5974/12231/4133 5969/12217/4133 +f 5957/12198/4114 5962/12207/4113 5963/12208/4119 5973/12230/4119 +f 5960/12205/4118 5959/12203/4118 5934/12148/4118 5933/12146/4118 +f 5958/12201/4135 5957/12199/4135 5973/12229/4132 5966/12213/4132 +f 5968/12216/4203 5965/12212/4203 5967/12215/4204 5928/12134/4205 +f 5975/12234/4140 5932/12143/4141 5931/12141/4140 5972/12227/4140 +f 5938/12158/4140 5975/12234/4140 5972/12227/4140 5976/12236/4141 +f 5937/12156/4142 5971/12224/4140 5975/12235/4140 5938/12159/4140 +f 5971/12224/4140 5977/12238/4141 5932/12144/4141 5975/12235/4140 +f 5978/12240/4143 5936/12152/4144 5935/12149/4144 5930/12138/4144 +f 5970/12220/4143 5978/12240/4143 5930/12138/4144 5929/12135/4143 +f 5969/12218/4145 5974/12232/4143 5978/12241/4143 5970/12221/4143 +f 5974/12232/4143 5979/12242/4143 5936/12153/4144 5978/12241/4143 +f 5939/12162/4146 5940/12163/4146 5976/12237/4146 5972/12228/4146 +f 5973/12230/4119 5963/12208/4119 5979/12243/4147 5974/12233/4147 +f 5921/12122/4148 5920/12120/4148 5977/12239/4148 5971/12225/4148 +f 5928/12134/4205 5967/12215/4204 5970/12222/4149 5929/12136/4149 +f 5940/12163/4150 5924/12127/4150 5938/12160/4150 5976/12237/4150 +f 5963/12208/4121 5933/12147/4121 5936/12154/4151 5979/12243/4151 +f 5920/12120/4152 5919/12119/4152 5932/12145/4152 5977/12239/4152 +f 5934/12148/4124 5927/12133/4123 5930/12139/4153 5935/12150/4153 +o Chair.015 +v 11.104725 0.415382 6.072366 +v 11.104725 0.429951 6.072366 +v 11.056273 0.429951 6.061673 +v 10.663766 0.429951 5.975056 +v 10.615314 0.429951 5.964364 +v 10.615314 0.415382 5.964364 +v 10.663766 0.415382 5.975056 +v 11.056273 0.415382 6.061673 +v 10.698198 0.429951 5.588768 +v 10.698198 0.415382 5.588768 +v 10.698198 0.400812 5.588768 +v 10.742746 0.400812 5.598599 +v 10.663766 0.400812 5.975056 +v 10.615314 0.400812 5.964364 +v 11.187611 0.415382 5.696771 +v 11.187611 0.429951 5.696771 +v 11.143064 0.415382 5.686940 +v 11.143064 0.429951 5.686940 +v 11.187611 0.400812 5.696771 +v 11.143064 0.400812 5.686940 +v 11.104725 0.400812 6.072366 +v 11.056273 0.400812 6.061673 +v 10.629932 0.432961 5.993281 +v 10.644531 0.432961 5.996503 +v 10.645500 0.421009 5.992112 +v 10.630901 0.421009 5.988890 +v 10.642779 0.426967 6.004441 +v 10.628181 0.426967 6.001219 +v 11.079797 0.419106 6.090059 +v 11.065407 0.419106 6.086884 +v 11.062686 0.425064 6.099214 +v 11.077076 0.425064 6.102389 +v 11.078797 0.434699 6.094587 +v 11.064407 0.434699 6.091412 +v 10.641435 0.431853 6.010536 +v 10.626836 0.431853 6.007315 +v 11.061311 0.433592 6.105445 +v 11.075701 0.433592 6.108621 +v 11.073057 0.592772 6.120599 +v 11.076155 0.593879 6.106565 +v 10.627289 0.592141 6.005259 +v 10.641888 0.592141 6.008481 +v 10.624192 0.591033 6.019292 +v 10.620227 0.829840 6.037262 +v 10.623323 0.830948 6.023229 +v 11.069092 0.831579 6.138568 +v 11.072188 0.832686 6.124535 +v 10.638791 0.591033 6.022514 +v 11.061765 0.593879 6.103390 +v 11.058668 0.592772 6.117423 +v 10.625525 0.830737 6.013257 +v 10.645135 0.870951 6.031398 +v 10.647092 0.870348 6.022530 +v 11.060002 0.832325 6.111376 +v 11.074392 0.832325 6.114552 +v 11.050823 0.869634 6.113473 +v 11.034484 0.864490 6.109461 +v 10.634826 0.829840 6.040484 +v 11.078114 0.608202 6.097687 +v 11.057799 0.832686 6.121360 +v 11.054702 0.831579 6.135393 +v 10.637922 0.830948 6.026451 +v 10.642345 0.869953 6.044037 +v 10.629246 0.606614 5.996392 +v 10.643845 0.606614 5.999613 +v 10.640123 0.830737 6.016479 +v 11.063724 0.608202 6.094512 +v 11.048864 0.870373 6.122351 +v 11.032525 0.865229 6.118340 +v 11.029736 0.864232 6.130978 +v 10.717734 0.913073 6.041155 +v 10.716427 0.914244 6.049245 +v 10.976472 0.911897 6.109613 +v 10.978579 0.911148 6.101733 +v 10.660154 0.867524 6.047775 +v 10.662944 0.868521 6.035136 +v 10.726054 0.902898 6.050474 +v 10.723050 0.901824 6.064088 +v 10.664901 0.867919 6.026268 +v 11.046075 0.869376 6.134991 +v 10.967336 0.900855 6.106726 +v 10.964332 0.899781 6.120339 +v 10.973468 0.910823 6.123227 +v 10.713423 0.913170 6.062859 +v 10.971042 0.901346 6.099296 +v 10.727361 0.901727 6.042384 +v 10.742746 0.415382 5.598599 +v 10.742746 0.429951 5.598599 +v 10.654498 0.438060 5.776730 +v 10.648794 0.443651 5.775472 +v 10.620546 0.443651 5.903477 +v 10.626250 0.438060 5.904736 +v 10.626077 0.429976 5.904697 +v 10.619268 0.437950 5.936371 +v 10.619659 0.430300 5.933781 +v 10.635267 0.429903 5.772487 +v 10.635439 0.437987 5.772524 +v 10.663687 0.437987 5.644520 +v 10.663515 0.429903 5.644482 +v 10.669147 0.443828 5.645725 +v 10.676023 0.439408 5.614573 +v 10.670058 0.434055 5.615650 +v 10.648865 0.424135 5.775487 +v 10.640971 0.424311 5.773745 +v 10.669219 0.424311 5.645741 +v 10.677113 0.424135 5.647483 +v 10.640900 0.443828 5.773729 +v 10.677042 0.443651 5.647467 +v 10.607191 0.437987 5.900530 +v 10.612652 0.443828 5.901735 +v 10.654325 0.429976 5.776692 +v 10.682572 0.429976 5.648688 +v 10.620617 0.424135 5.903492 +v 10.612723 0.424311 5.901751 +v 10.669189 0.426646 5.618770 +v 10.674411 0.421521 5.622213 +v 10.683901 0.439247 5.616384 +v 10.682289 0.421360 5.624024 +v 10.688252 0.426713 5.622947 +v 10.607019 0.429903 5.900492 +v 10.600215 0.437881 5.932143 +v 10.605268 0.443408 5.935192 +v 10.614606 0.424773 5.930732 +v 10.606700 0.424940 5.929046 +v 10.600607 0.430231 5.929553 +v 10.682745 0.438060 5.648726 +v 10.613563 0.420977 5.961405 +v 10.608873 0.416357 5.956709 +v 10.600956 0.416497 5.955072 +v 10.594515 0.420919 5.957155 +v 10.593621 0.427313 5.962024 +v 10.613175 0.443241 5.936878 +v 10.589399 0.402967 5.980336 +v 10.588118 0.407418 5.986964 +v 10.612670 0.427371 5.966274 +v 10.607162 0.407458 5.991230 +v 10.608444 0.403008 5.984601 +v 10.598311 0.431932 5.966719 +v 10.592527 0.410634 5.992930 +v 10.606229 0.431793 5.968357 +v 10.600453 0.410537 5.994529 +v 10.603338 0.380352 6.008557 +v 10.604853 0.378323 6.000877 +v 10.584295 0.380334 6.004282 +v 10.588538 0.381800 6.011009 +v 10.596469 0.381756 6.012584 +v 10.604035 0.399792 5.978635 +v 10.596109 0.399889 5.977036 +v 10.585171 0.345795 6.026265 +v 10.593102 0.345756 6.027839 +v 10.600611 0.376856 5.994151 +v 10.601508 0.342751 6.016031 +v 10.597277 0.341467 6.009262 +v 10.585810 0.378304 5.996603 +v 10.592680 0.376901 5.992576 +v 10.589345 0.341506 6.007688 +v 10.582466 0.342735 6.011756 +v 10.704124 0.349401 5.551847 +v 10.702221 0.348454 5.559649 +v 10.711081 -0.002953 5.519510 +v 10.712982 -0.002007 5.511707 +v 10.580938 0.344511 6.019495 +v 10.562259 0.001491 6.104141 +v 10.566492 0.002774 6.110911 +v 10.691761 0.350077 5.543253 +v 10.699617 0.350056 5.545166 +v 10.708475 -0.001352 5.505026 +v 10.700619 -0.001331 5.503113 +v 10.582829 -0.000270 6.100677 +v 10.578597 -0.001553 6.093908 +v 10.599981 0.344527 6.023770 +v 10.682691 0.425574 5.584356 +v 10.676307 0.421603 5.587333 +v 10.689122 0.434122 5.619827 +v 10.695376 0.421652 5.591487 +v 10.690557 0.425454 5.586224 +v 10.679677 0.412305 5.598347 +v 10.687544 0.412185 5.600215 +v 10.693926 0.416156 5.597238 +v 10.700053 0.403231 5.570296 +v 10.695487 0.405075 5.563882 +v 10.683729 0.398698 5.579986 +v 10.691587 0.398640 5.581890 +v 10.698236 0.400566 5.577711 +v 10.674857 0.416106 5.593085 +v 10.694839 0.371230 5.567157 +v 10.701529 0.372479 5.562789 +v 10.679163 0.400542 5.573572 +v 10.682455 0.372464 5.558653 +v 10.686982 0.371267 5.565246 +v 10.687629 0.405133 5.561977 +v 10.698876 0.375406 5.548524 +v 10.691019 0.375443 5.546614 +v 10.680980 0.403207 5.566157 +v 10.684329 0.374194 5.550980 +v 10.685050 0.349392 5.547712 +v 10.683148 0.348446 5.555514 +v 10.703403 0.374209 5.555116 +v 10.695512 0.347770 5.564109 +v 10.687655 0.347791 5.562195 +v 10.696513 -0.003617 5.522056 +v 10.704370 -0.003637 5.523969 +v 10.581302 0.001507 6.108417 +v 10.692006 -0.002962 5.515375 +v 10.563787 -0.000286 6.096402 +v 10.572544 0.000611 6.102409 +v 10.570666 -0.001514 6.092334 +v 10.574423 0.002736 6.112485 +v 10.702494 -0.002484 5.513541 +v 10.693908 -0.002015 5.507573 +v 11.165740 0.438060 5.889550 +v 11.160036 0.443651 5.888291 +v 11.131788 0.443651 6.016296 +v 11.137492 0.438060 6.017555 +v 11.137321 0.429976 6.017517 +v 11.130511 0.437950 6.049191 +v 11.130902 0.430300 6.046600 +v 11.180462 0.424311 5.758561 +v 11.174758 0.429903 5.757302 +v 11.180431 0.426646 5.731589 +v 11.185654 0.421521 5.735033 +v 11.160108 0.424135 5.888307 +v 11.152214 0.424311 5.886565 +v 11.188355 0.424135 5.760303 +v 11.152143 0.443828 5.886549 +v 11.188284 0.443651 5.760287 +v 11.180390 0.443828 5.758545 +v 11.146682 0.437987 5.885344 +v 11.174930 0.437987 5.757340 +v 11.118434 0.437987 6.013349 +v 11.123895 0.443828 6.014555 +v 11.165568 0.429976 5.889512 +v 11.193816 0.429976 5.761508 +v 11.131860 0.424135 6.016312 +v 11.123966 0.424311 6.014570 +v 11.195144 0.439247 5.729204 +v 11.187264 0.439408 5.727392 +v 11.193532 0.421360 5.736844 +v 11.199496 0.426713 5.735767 +v 11.193988 0.438060 5.761546 +v 11.200365 0.434122 5.732647 +v 11.146510 0.429903 5.885306 +v 11.118262 0.429903 6.013311 +v 11.111458 0.437881 6.044963 +v 11.116511 0.443408 6.048011 +v 11.125849 0.424773 6.043552 +v 11.117943 0.424940 6.041865 +v 11.111849 0.430231 6.042372 +v 11.124418 0.443241 6.049698 +v 11.109554 0.431932 6.079540 +v 11.117471 0.431793 6.081176 +v 11.124806 0.420977 6.074225 +v 11.120116 0.416357 6.069530 +v 11.112199 0.416497 6.067892 +v 11.105758 0.420919 6.069975 +v 11.107352 0.399889 6.089856 +v 11.100642 0.402967 6.093155 +v 11.115278 0.399792 6.091454 +v 11.104863 0.427313 6.074844 +v 11.099360 0.407418 6.099784 +v 11.123913 0.427371 6.079093 +v 11.118405 0.407458 6.104049 +v 11.119688 0.403008 6.097421 +v 11.114581 0.380352 6.121377 +v 11.116096 0.378323 6.113697 +v 11.103770 0.410634 6.105750 +v 11.095538 0.380334 6.117102 +v 11.099780 0.381800 6.123828 +v 11.111695 0.410537 6.107348 +v 11.107712 0.381756 6.125403 +v 11.092181 0.344511 6.132315 +v 11.096414 0.345795 6.139084 +v 11.104345 0.345756 6.140658 +v 11.111224 0.344527 6.136590 +v 11.111854 0.376856 6.106971 +v 11.112752 0.342751 6.128850 +v 11.108520 0.341467 6.122081 +v 11.097053 0.378304 6.109423 +v 11.103923 0.376901 6.105396 +v 11.215367 0.349401 5.664667 +v 11.213465 0.348454 5.672469 +v 11.222322 -0.002953 5.632329 +v 11.224225 -0.002007 5.624527 +v 11.073502 0.001491 6.216960 +v 11.077734 0.002774 6.223731 +v 11.203004 0.350077 5.656072 +v 11.210860 0.350056 5.657985 +v 11.219718 -0.001352 5.617846 +v 11.211862 -0.001331 5.615933 +v 11.094072 -0.000270 6.213497 +v 11.089840 -0.001553 6.206728 +v 11.093709 0.342735 6.124575 +v 11.100588 0.341506 6.120507 +v 11.206619 0.421652 5.704307 +v 11.201799 0.425454 5.699043 +v 11.190920 0.412305 5.711167 +v 11.198787 0.412185 5.713035 +v 11.205170 0.416156 5.710058 +v 11.181300 0.434055 5.728469 +v 11.209479 0.400566 5.690530 +v 11.211296 0.403231 5.683115 +v 11.202830 0.398640 5.694710 +v 11.186100 0.416106 5.705904 +v 11.190406 0.400542 5.686392 +v 11.194972 0.398698 5.692806 +v 11.193933 0.425574 5.697176 +v 11.206730 0.405075 5.676702 +v 11.198872 0.405133 5.674797 +v 11.187550 0.421603 5.700153 +v 11.193698 0.372464 5.671473 +v 11.198225 0.371267 5.678065 +v 11.210119 0.375406 5.661344 +v 11.202262 0.375443 5.659433 +v 11.192223 0.403207 5.678977 +v 11.195572 0.374194 5.663799 +v 11.196293 0.349392 5.660532 +v 11.214645 0.374209 5.667936 +v 11.206081 0.371230 5.679975 +v 11.198898 0.347791 5.675014 +v 11.206755 0.347770 5.676928 +v 11.212772 0.372479 5.675609 +v 11.207756 -0.003617 5.634875 +v 11.215612 -0.003637 5.636788 +v 11.092545 0.001507 6.221236 +v 11.075029 -0.000286 6.209222 +v 11.194391 0.348446 5.668334 +v 11.203249 -0.002962 5.628194 +v 11.083787 0.000611 6.215229 +v 11.081908 -0.001514 6.205153 +v 11.085666 0.002736 6.225305 +v 11.213737 -0.002484 5.626361 +v 11.205151 -0.002015 5.620393 +vn -0.2155 -0.0000 0.9765 +vn -0.9765 -0.0000 -0.2155 +vn -0.0000 -1.0000 -0.0000 +vn 0.9765 -0.0000 0.2155 +vn 0.2155 -0.0000 -0.9765 +vn 0.0257 0.9929 -0.1163 +vn -0.0568 -0.9646 0.2574 +vn -0.0920 -0.9044 0.4167 +vn 0.7031 -0.0911 0.7052 +vn -0.0350 -0.9868 0.1584 +vn 0.0369 0.9852 -0.1674 +vn -0.9476 -0.0779 0.3098 +vn -0.8568 -0.1146 0.5028 +vn 0.6042 -0.0987 0.7907 +vn -0.1328 -0.7874 0.6019 +vn -0.1725 -0.5992 0.7818 +vn 0.2149 0.0768 -0.9736 +vn -0.2149 -0.0768 0.9736 +vn -0.9471 -0.2916 -0.1338 +vn -0.8393 0.5027 -0.2069 +vn 0.2175 0.1047 -0.9704 +vn 0.2100 0.1119 -0.9713 +vn 0.2096 0.1062 -0.9720 +vn -0.7062 -0.0656 0.7049 +vn -0.8550 0.4967 -0.1495 +vn 0.2172 0.0768 -0.9731 +vn 0.1819 -0.5359 -0.8244 +vn 0.8348 0.5287 0.1534 +vn -0.7613 -0.6113 -0.2162 +vn 0.1136 -0.8531 -0.5092 +vn 0.1855 -0.5326 -0.8258 +vn 0.1885 -0.5337 -0.8244 +vn 0.1825 -0.5315 -0.8272 +vn 0.0342 0.9931 -0.1121 +vn 0.2597 0.9648 -0.0401 +vn 0.2838 0.9584 -0.0320 +vn 0.4716 -0.8811 0.0346 +vn 0.3860 -0.8634 0.3248 +vn 0.0398 -0.7743 0.6315 +vn 0.8103 -0.5705 0.1338 +vn 0.2400 -0.3669 0.8988 +vn 0.2984 -0.3997 0.8667 +vn -0.2131 -0.0465 0.9759 +vn 0.2173 0.1108 -0.9698 +vn 0.2181 0.1116 -0.9695 +vn -0.2195 -0.0794 0.9724 +vn 0.8231 0.5223 0.2228 +vn -0.2212 -0.0401 0.9744 +vn 0.2166 0.1101 -0.9700 +vn -0.2227 -0.0584 0.9731 +vn -0.3190 -0.7742 0.5467 +vn -0.2195 -0.0813 0.9722 +vn -0.2138 -0.0847 0.9732 +vn -0.2265 -0.0769 0.9710 +vn -0.5103 0.8588 -0.0448 +vn 0.2359 0.9633 0.1281 +vn -0.0088 0.9970 0.0767 +vn 0.2369 0.9630 0.1282 +vn -0.4751 0.8610 -0.1815 +vn 0.2144 0.0845 -0.9731 +vn 0.2206 0.0831 -0.9718 +vn 0.2218 0.0796 -0.9718 +vn 0.2265 0.0778 -0.9709 +vn -0.4494 -0.8773 -0.1684 +vn -0.2267 -0.9658 -0.1262 +vn 0.2081 0.0880 -0.9741 +vn -0.2076 -0.0886 0.9742 +vn 0.4673 0.8673 0.1715 +vn 0.4921 0.8695 0.0422 +vn 0.2143 0.0744 -0.9739 +vn 0.2224 0.0849 -0.9712 +vn 0.0094 -0.9970 -0.0766 +vn -0.2132 -0.0732 0.9743 +vn 0.2127 0.0723 -0.9744 +vn -0.0000 1.0000 -0.0000 +vn 0.6752 0.7224 0.1490 +vn 0.6701 0.7268 0.1508 +vn 0.6700 0.7269 0.1508 +vn 0.9762 -0.0225 0.2155 +vn 0.9763 -0.0215 0.2152 +vn 0.9777 -0.0204 0.2091 +vn -0.9763 0.0218 -0.2154 +vn -0.9760 0.0219 -0.2168 +vn -0.9760 0.0219 -0.2169 +vn -0.6770 0.6937 -0.2459 +vn -0.0213 -0.9998 -0.0047 +vn 0.0214 0.9998 0.0047 +vn -0.7054 0.6915 -0.1557 +vn -0.7016 0.6962 -0.1520 +vn 0.0198 0.9997 0.0106 +vn 0.7054 -0.6915 0.1557 +vn -0.6852 -0.7257 -0.0621 +vn 0.0504 0.9903 -0.1293 +vn 0.6789 -0.6955 0.2352 +vn -0.6753 -0.7223 -0.1490 +vn -0.9763 0.0221 -0.2155 +vn -0.6977 0.7008 -0.1483 +vn -0.0255 -0.9995 0.0176 +vn -0.9777 0.0214 -0.2088 +vn -0.9763 0.0224 -0.2151 +vn 0.7417 -0.6683 -0.0575 +vn -0.6160 -0.6972 -0.3667 +vn 0.0443 -0.9532 -0.2992 +vn -0.9792 0.0183 -0.2023 +vn -0.9779 0.0214 -0.2079 +vn 0.0182 0.9997 0.0164 +vn -0.6672 -0.7326 -0.1348 +vn 0.6648 0.7313 0.1526 +vn 0.6926 -0.7022 0.1648 +vn -0.9803 0.0132 -0.1971 +vn -0.9794 0.0178 -0.2013 +vn 0.9791 -0.0175 0.2028 +vn 0.9778 -0.0205 0.2083 +vn 0.9792 -0.0172 0.2021 +vn 0.9802 -0.0124 0.1978 +vn -0.7899 0.5509 0.2694 +vn 0.5687 0.5748 0.5884 +vn -0.0514 0.9421 0.3314 +vn 0.6139 0.6901 0.3831 +vn -0.7465 0.6614 0.0727 +vn 0.9802 -0.0119 0.1975 +vn 0.9805 -0.0090 0.1961 +vn -0.8233 0.3812 0.4206 +vn 0.5339 0.3978 0.7462 +vn -0.1605 0.5403 0.8260 +vn 0.1073 -0.8044 -0.5843 +vn -0.5700 -0.5868 -0.5750 +vn 0.7858 -0.5625 -0.2571 +vn -0.1132 0.7833 0.6113 +vn -0.1766 0.3980 0.9002 +vn 0.8379 -0.2790 -0.4692 +vn -0.5262 -0.2912 -0.7990 +vn 0.1764 -0.4005 -0.8991 +vn -0.9807 0.0092 -0.1955 +vn -0.9804 0.0122 -0.1968 +vn 0.1565 -0.5692 -0.8072 +vn -0.5342 -0.4135 -0.7373 +vn 0.8201 -0.3964 -0.4127 +vn 0.9716 -0.0027 0.2366 +vn 0.9716 -0.0025 0.2366 +vn -0.8498 0.1694 0.4991 +vn 0.2353 0.1162 -0.9650 +vn 0.8498 -0.1695 -0.4992 +vn 0.5262 0.2899 0.7995 +vn -0.8380 0.2777 0.4697 +vn 0.9804 -0.0080 0.1966 +vn 0.9807 -0.0055 0.1956 +vn -0.9808 0.0054 -0.1948 +vn -0.9807 0.0070 -0.1952 +vn -0.6298 0.6472 -0.4296 +vn 0.7240 0.6748 -0.1432 +vn -0.0961 -0.9356 0.3397 +vn 0.9756 -0.0216 0.2185 +vn 0.9745 -0.0207 0.2236 +vn 0.9732 -0.0182 0.2294 +vn 0.9743 -0.0205 0.2244 +vn 0.6880 0.7239 0.0512 +vn -0.9755 0.0227 -0.2186 +vn -0.9744 0.0218 -0.2238 +vn -0.0455 -0.9932 0.1076 +vn 0.9756 -0.0222 0.2182 +vn 0.7555 0.5630 -0.3351 +vn -0.1453 -0.8103 0.5677 +vn 0.9722 -0.0112 0.2340 +vn 0.9730 -0.0173 0.2303 +vn 0.5778 -0.5801 0.5740 +vn -0.9742 0.0211 -0.2246 +vn -0.9731 0.0187 -0.2296 +vn 0.1083 0.9128 -0.3938 +vn -0.7146 -0.6896 0.1172 +vn 0.6321 -0.6617 0.4032 +vn 0.5636 -0.3366 0.7544 +vn -0.8039 -0.3512 0.4799 +vn 0.2111 0.4682 -0.8580 +vn -0.9721 0.0114 -0.2344 +vn -0.9729 0.0175 -0.2307 +vn -0.9720 0.0104 -0.2349 +vn -0.9716 0.0032 -0.2367 +vn -0.5795 0.5405 -0.6099 +vn 0.1633 0.7463 -0.6452 +vn -0.7382 -0.6033 0.3018 +vn 0.2347 0.1344 -0.9627 +vn -0.9716 0.0027 -0.2365 +vn -0.5570 0.0928 -0.8253 +vn -0.5572 0.0866 -0.8259 +vn 0.8290 0.0969 -0.5507 +vn 0.8295 0.0905 -0.5512 +vn 0.8295 0.0904 -0.5512 +vn 0.9718 -0.0030 0.2357 +vn 0.9722 -0.0100 0.2340 +vn -0.2094 -0.4821 0.8507 +vn 0.8055 0.3437 -0.4828 +vn -0.5637 0.3294 -0.7575 +vn -0.2353 -0.1162 0.9650 +vn 0.9808 -0.0053 0.1948 +vn -0.8295 -0.0898 0.5513 +vn -0.8299 -0.0839 0.5516 +vn -0.9808 0.0053 -0.1948 +vn -0.8291 -0.0956 0.5509 +vn 0.5570 -0.0916 0.8255 +vn 0.5572 -0.0860 0.8259 +vn 0.5572 -0.0859 0.8259 +vn -0.2349 -0.1319 0.9630 +vn -0.0474 -0.9756 0.2146 +vn -0.0473 -0.9756 0.2146 +vn 0.0252 -0.9931 -0.1144 +vn 0.0252 -0.9931 -0.1143 +vn 0.0253 -0.9931 -0.1144 +vn -0.5242 -0.1770 -0.8330 +vn -0.9716 0.0025 -0.2366 +vn 0.5242 0.1770 0.8330 +vn 0.5574 -0.0803 0.8264 +vn 0.1876 -0.2449 -0.9512 +vn -0.5574 0.0803 -0.8264 +vn -0.1876 0.2449 0.9512 +vn 0.8299 0.0839 -0.5516 +vn 0.9763 -0.0221 0.2155 +vn 0.9763 -0.0224 0.2151 +vn 0.9777 -0.0214 0.2087 +vn 0.6789 -0.6956 0.2352 +vn 0.9760 -0.0219 0.2168 +vn 0.9760 -0.0219 0.2169 +vn 0.9744 -0.0218 0.2238 +vn 0.9755 -0.0228 0.2188 +vn -0.9762 0.0224 -0.2155 +vn 0.9763 -0.0218 0.2154 +vn 0.7416 -0.6683 -0.0575 +vn 0.0444 -0.9532 -0.2992 +vn 0.6926 -0.7023 0.1648 +vn 0.9792 -0.0183 0.2022 +vn 0.9779 -0.0214 0.2079 +vn 0.9794 -0.0178 0.2014 +vn 0.9803 -0.0131 0.1971 +vn 0.9804 -0.0123 0.1968 +vn 0.9807 -0.0092 0.1955 +vn 0.7857 -0.5626 -0.2572 +vn -0.7899 0.5509 0.2693 +vn 0.8378 -0.2790 -0.4693 +vn -0.9807 0.0091 -0.1955 +vn -0.9804 0.0123 -0.1968 +vn 0.8201 -0.3964 -0.4128 +vn 0.9716 -0.0027 0.2365 +vn 0.9716 -0.0025 0.2365 +vn -0.8498 0.1695 0.4992 +vn 0.8497 -0.1695 -0.4992 +vn 0.9807 -0.0070 0.1952 +vn 0.9809 -0.0057 0.1943 +vn -0.9808 0.0055 -0.1948 +vn 0.9731 -0.0187 0.2296 +vn 0.9742 -0.0210 0.2246 +vn 0.6321 -0.6618 0.4032 +vn -0.9756 0.0221 -0.2182 +vn -0.9756 0.0227 -0.2186 +vn 0.9721 -0.0114 0.2344 +vn 0.9729 -0.0176 0.2307 +vn 0.5778 -0.5802 0.5741 +vn -0.2348 -0.1319 0.9631 +vn 0.9720 -0.0104 0.2349 +vn 0.9716 -0.0032 0.2367 +vn 0.5635 -0.3367 0.7544 +vn 0.5569 -0.0916 0.8255 +vn 0.5571 -0.0860 0.8260 +vn 0.5571 -0.0859 0.8260 +vn 0.5573 -0.0803 0.8264 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt 0.686647 0.000000 +vt 0.870176 0.996278 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.782584 0.965408 +vt 0.870573 0.970227 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.833010 0.965282 +vt 0.908785 0.026051 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.968598 0.070112 +vt 0.979071 0.026051 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.968598 0.371019 +vt 0.757324 0.262250 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.173427 0.241164 +vt 0.758439 0.080128 +vt -0.973130 0.033128 +vt -0.123087 0.241439 +vt 0.978437 0.000000 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt 0.737072 0.000128 +vt 0.908263 0.000000 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.409642 -0.009898 +vt 0.677629 0.482142 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.240570 0.058726 +vt 0.669677 0.481452 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.786789 0.246652 +vt 0.991724 0.699406 +vt 0.928489 0.277215 +vt 0.873308 0.505274 +vt 0.786789 0.155990 +vt 0.958960 0.029326 +vt 0.991724 0.483440 +vt 0.977373 0.702462 +vt -0.140978 0.246673 +vt 0.958492 0.010078 +vt -0.156145 0.246590 +vt 0.929566 0.080357 +vt -0.144664 0.252235 +vt 0.984385 0.731379 +vt 0.945934 0.020741 +vt -0.159831 0.252152 +vt 0.984385 0.500820 +vt 0.989649 0.087406 +vt 0.706860 0.007022 +vt 0.847263 0.989602 +vt 0.686599 0.714388 +vt 0.721837 0.007060 +vt 0.884682 0.006674 +vt 0.720919 0.017861 +vt 0.673632 0.527027 +vt 0.872079 0.017335 +vt 0.705942 0.017823 +vt 0.673632 0.731676 +vt 0.690157 0.523535 +vt 0.802894 0.958412 +vt 0.847659 0.963551 +vt 0.695298 0.714388 +vt 0.661237 0.495044 +vt 0.817871 0.958374 +vt 0.885205 0.032725 +vt 0.661237 0.722645 +vt 0.693293 0.503638 +vt 0.944329 0.029337 +vt 0.981154 0.731379 +vt 0.977373 0.486830 +vt 0.989649 0.263822 +vt 0.873305 0.723869 +vt 0.981154 0.500820 +vt 0.870573 0.032734 +vt 0.693293 0.761173 +vt 0.679412 0.527027 +vt 0.695298 0.493838 +vt 0.679412 0.731676 +vt 0.826600 0.493835 +vt 0.826977 0.731673 +vt 0.826600 0.714385 +vt 0.814491 0.495042 +vt 0.122435 0.638558 +vt 0.015922 0.839080 +vt 0.835047 0.699404 +vt 0.993361 0.510073 +vt 0.758428 0.504317 +vt 0.072861 0.638558 +vt 0.015474 0.619132 +vt 0.835047 0.483438 +vt 0.845328 0.702461 +vt 0.015197 0.626266 +vt 0.014109 0.491099 +vt 0.993356 0.728667 +vt 0.758425 0.722912 +vt 0.833436 0.500823 +vt 0.891028 0.725398 +vt 0.672547 0.500827 +vt 0.752235 0.729690 +vt 0.667246 0.727168 +vt 0.891033 0.506802 +vt 0.752238 0.507120 +vt 0.071993 0.783837 +vt 0.969610 0.493832 +vt 0.987699 0.731670 +vt 0.641343 0.509140 +vt 0.689355 0.726560 +vt 0.969610 0.714382 +vt 0.122436 0.783837 +vt 0.641344 0.743247 +vt 0.833436 0.731382 +vt 0.845328 0.486829 +vt 0.814491 0.722643 +vt 0.825052 0.503733 +vt 0.016195 0.832047 +vt 0.634466 0.494220 +vt 0.825052 0.761267 +vt 0.826977 0.527024 +vt 0.022424 0.783234 +vt 0.035852 0.889154 +vt 0.043016 0.971597 +vt 0.706398 0.505224 +vt 0.072863 0.808180 +vt 0.028940 0.807392 +vt 0.010039 0.882150 +vt 0.137154 0.974703 +vt 0.631023 0.892124 +vt 0.649326 0.890699 +vt 0.121379 0.984023 +vt 0.648470 0.892315 +vt 0.072864 0.783142 +vt 0.043889 0.943476 +vt 0.078385 0.805896 +vt 0.075977 0.941215 +vt 0.613560 0.946909 +vt 0.672547 0.731385 +vt 0.701510 0.486829 +vt 0.669481 0.490576 +vt 0.072863 0.646796 +vt 0.648470 0.506013 +vt 0.080915 0.841605 +vt 0.968560 0.503835 +vt 0.102906 0.865583 +vt 0.634467 0.887149 +vt 0.987699 0.527021 +vt 0.968560 0.761369 +vt 0.690090 0.495972 +vt 0.701510 0.702461 +vt 0.603150 0.865583 +vt 0.014109 0.884028 +vt 0.706395 0.729929 +vt 0.816556 0.714481 +vt 0.023239 0.646888 +vt 0.040534 0.495932 +vt 0.081188 0.621686 +vt 0.007711 0.495744 +vt 0.041481 0.497122 +vt 0.080911 0.628820 +vt 0.003028 0.888966 +vt 0.041481 0.887645 +vt 0.060838 0.971173 +vt 0.631023 0.505822 +vt 0.649326 0.500176 +vt 0.081188 0.834572 +vt 0.805889 0.743046 +vt 0.122312 0.806766 +vt 0.988155 0.503653 +vt 0.115555 0.935422 +vt 0.904138 0.912557 +vt 0.988155 0.735605 +vt 0.813022 0.494763 +vt 0.890960 0.912565 +vt 0.735836 0.641861 +vt 0.693936 0.468644 +vt 0.027417 0.833361 +vt 0.420996 0.961603 +vt 0.032040 0.784613 +vt 0.284612 0.483847 +vt 0.656925 0.504187 +vt 0.681549 0.720168 +vt 0.066750 0.834450 +vt 0.299225 0.449509 +vt 0.999708 0.720167 +vt 0.989627 0.743247 +vt 0.121899 0.832034 +vt 0.693936 0.449159 +vt 0.420996 0.999935 +vt 0.008277 0.862094 +vt 0.082562 0.831201 +vt 0.741580 0.718717 +vt 0.678836 0.505353 +vt 0.815743 0.487362 +vt 0.741523 0.585977 +vt 0.678836 0.699564 +vt 0.553315 0.945729 +vt 0.982243 0.588758 +vt 0.460393 1.018433 +vt 0.949871 0.788878 +vt 0.982305 0.727355 +vt 0.668954 0.502598 +vt 0.949657 0.691167 +vt 0.979056 0.490574 +vt 0.078628 0.952623 +vt 0.035428 0.887064 +vt 0.812426 0.730862 +vt 0.971935 0.642457 +vt 0.805889 0.532195 +vt 0.173975 1.012235 +vt 0.908785 0.976444 +vt 0.726484 0.788878 +vt 0.984477 0.500479 +vt 0.894591 0.976453 +vt 0.737043 0.505375 +vt 0.726270 0.691167 +vt 0.987420 0.694407 +vt 0.999899 0.506981 +vt 0.968797 0.500648 +vt 0.989626 0.516135 +vt 0.652223 0.697892 +vt 0.656922 0.730164 +vt 0.681740 0.506981 +vt 0.985798 0.713641 +vt 0.053549 0.993732 +vt 0.043551 0.873068 +vt 0.522988 0.991572 +vt 0.062665 0.961706 +vt 0.169656 0.991799 +vt 0.060838 0.809705 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +s 1 +usemtl CabnetDoors +f 5980/12245/4206 5981/12249/4206 5982/12254/4206 5983/12258/4206 5984/12262/4206 5985/12268/4206 5986/12271/4206 5987/12274/4206 +f 5985/12267/4207 5984/12263/4207 5988/12278/4207 5989/12281/4207 +f 5990/12283/4208 5991/12287/4208 5992/12289/4208 5993/12290/4208 +f 5994/12294/4209 5995/12295/4209 5981/12250/4209 5980/12244/4209 +f 5995/12296/4210 5994/12293/4210 5996/12298/4210 5997/12299/4210 +f 5998/12301/4210 5999/12304/4210 5996/12298/4210 5994/12293/4210 +f 5998/12302/4209 5994/12294/4209 5980/12244/4209 6000/12306/4209 +f 5993/12291/4207 5985/12267/4207 5989/12281/4207 5990/12284/4207 +f 6000/12307/4206 5980/12245/4206 5987/12274/4206 5986/12271/4206 5985/12268/4206 5993/12292/4206 5992/12288/4206 6001/12310/4206 +f 5983/12259/4211 5984/12264/4211 6002/12313/4211 6003/12317/4211 +f 5993/12292/4206 5992/12288/4206 5986/12271/4206 5985/12268/4206 +f 5987/12275/4210 5980/12246/4210 6000/12308/4210 6001/12311/4210 +f 5985/12269/4212 5986/12272/4212 6004/12321/4212 6005/12323/4212 +f 6005/12323/4213 6004/12321/4213 6006/12325/4213 6007/12328/4213 +f 6008/12331/4213 6011/12339/4213 6010/12336/4213 6009/12334/4213 +f 5986/12273/4214 5983/12260/4214 6003/12318/4214 6004/12322/4214 +f 5980/12247/4215 6008/12331/4215 6009/12334/4215 5987/12276/4215 +f 5982/12255/4216 6013/12346/4216 6012/12342/4216 5981/12251/4216 +f 5987/12277/4217 6009/12335/4217 6013/12347/4217 5982/12256/4217 +f 5984/12265/4218 5985/12270/4218 6005/12324/4218 6002/12315/4218 +f 5981/12252/4219 6012/12343/4219 6008/12332/4219 5980/12248/4219 +f 6007/12329/4220 6006/12326/4220 6014/12351/4220 6015/12355/4220 +f 6016/12358/4221 6010/12337/4221 6011/12340/4221 6017/12360/4221 +f 6012/12344/4209 6019/12363/4209 6018/12361/4209 6017/12359/4209 +f 6004/12322/4209 6003/12318/4209 6014/12350/4209 6006/12327/4209 +f 6003/12319/4222 6002/12314/4222 6020/12367/4222 6021/12372/4222 +f 6012/12344/4209 6017/12359/4209 6011/12341/4209 6008/12333/4209 +f 6002/12315/4207 6005/12324/4207 6007/12330/4207 6015/12353/4207 +f 6009/12335/4207 6010/12338/4207 6016/12356/4207 6013/12347/4207 +f 6020/12368/4207 6022/12376/4207 6023/12379/4207 6024/12383/4207 +f 6019/12363/4209 6026/12390/4209 6025/12386/4209 6018/12361/4209 +f 6002/12316/4207 6015/12354/4207 6022/12377/4207 6020/12369/4207 +f 6015/12355/4223 6014/12351/4223 6027/12393/4223 6022/12378/4223 +f 6013/12348/4222 6028/12395/4222 6019/12364/4222 6012/12345/4222 +f 6016/12357/4207 6029/12399/4207 6028/12396/4224 6013/12349/4207 +f 6017/12360/4223 6018/12362/4223 6029/12400/4223 6016/12358/4223 +f 6014/12352/4209 6003/12320/4209 6021/12373/4209 6027/12394/4209 +f 6030/12401/4225 6024/12385/4225 6031/12405/4225 6032/12406/4225 +f 6033/12408/4226 6036/12416/4227 6035/12414/4228 6034/12411/4228 +f 6022/12378/4223 6027/12393/4223 6037/12418/4223 6023/12380/4223 +f 6019/12365/4209 6038/12421/4209 6034/12413/4209 6026/12391/4209 +f 6029/12399/4207 6040/12428/4207 6039/12424/4229 6028/12396/4224 +f 6027/12394/4209 6021/12373/4209 6041/12430/4209 6037/12419/4209 +f 6018/12362/4223 6025/12387/4223 6040/12427/4223 6029/12400/4223 +f 6024/12384/4230 6023/12381/4230 6042/12433/4230 6031/12404/4230 +f 6020/12370/4207 6024/12385/4207 6030/12401/4207 6043/12435/4207 +f 6044/12438/4231 6043/12436/4222 6030/12402/4222 6045/12441/4231 +f 6046/12444/4231 6033/12409/4231 6034/12412/4222 6038/12422/4222 +f 6044/12439/4231 6045/12442/4231 6033/12410/4231 6046/12445/4231 +f 6028/12397/4232 6046/12446/4232 6038/12423/4232 6019/12366/4232 +f 6034/12413/4233 6035/12415/4233 6047/12448/4233 6026/12391/4233 +f 6040/12428/4234 6049/12452/4234 6048/12449/4234 6039/12424/4234 +f 6021/12374/4235 6044/12440/4236 6046/12446/4237 6028/12397/4224 +f 6021/12374/4235 6020/12371/4238 6043/12437/4238 6044/12440/4236 +f 6050/12456/4239 6051/12460/4239 6052/12464/4240 6053/12468/4241 +f 6054/12472/4242 6055/12475/4243 6056/12478/4244 6057/12481/4242 +f 6037/12419/4245 6041/12430/4246 6055/12476/4247 6054/12473/4245 +f 6023/12382/4248 6037/12420/4248 6054/12474/4248 6042/12434/4248 +f 6045/12442/4249 6058/12485/4250 6036/12417/4227 6033/12410/4226 +f 6039/12425/4229 6048/12450/4251 6055/12477/4247 6041/12431/4246 +f 6026/12392/4252 6047/12447/4252 6059/12489/4252 6025/12388/4252 +f 6025/12389/4253 6059/12487/4253 6049/12453/4253 6040/12429/4253 +f 6045/12443/4249 6030/12403/4254 6032/12407/4254 6058/12486/4250 +f 6048/12450/4255 6060/12490/4256 6056/12479/4244 6055/12477/4243 +f 6061/12493/4257 6062/12497/4258 6063/12501/4259 6057/12482/4259 +f 6031/12404/4260 6042/12433/4260 6063/12502/4260 6051/12461/4260 +f 6052/12465/4261 6051/12462/4262 6063/12503/4262 6062/12498/4263 +f 6032/12406/4264 6031/12405/4264 6051/12463/4264 6050/12457/4264 +f 6053/12469/4265 6064/12505/4266 6065/12508/4267 6050/12458/4268 +f 6049/12454/4269 6061/12494/4270 6060/12491/4256 6048/12451/4269 +f 6036/12416/4271 6064/12506/4266 6053/12470/4265 6035/12414/4271 +f 6059/12488/4272 6062/12499/4258 6061/12495/4257 6049/12455/4272 +f 6047/12447/4273 6052/12466/4261 6062/12500/4263 6059/12489/4273 +f 6035/12415/4274 6053/12471/4241 6052/12467/4240 6047/12448/4274 +f 6058/12485/4275 6065/12509/4267 6064/12507/4266 6036/12417/4276 +f 6061/12496/4270 6057/12483/4277 6056/12480/4244 6060/12492/4256 +f 6042/12434/4278 6054/12474/4278 6057/12484/4278 6063/12504/4278 +f 6058/12486/4275 6032/12407/4279 6050/12459/4279 6065/12510/4267 +f 5997/12299/4210 5996/12298/4210 6066/12511/4210 6067/12512/4210 +f 5989/12282/4210 5988/12279/4210 6067/12512/4210 6066/12511/4210 +f 6066/12511/4210 5996/12298/4210 5999/12304/4210 5991/12286/4210 +f 5991/12286/4210 5990/12285/4210 5989/12282/4210 6066/12511/4210 +f 5995/12297/4280 5997/12300/4280 5982/12257/4280 5981/12253/4280 +f 5983/12261/4280 6067/12513/4280 5988/12280/4280 5984/12266/4280 +f 5982/12257/4280 5997/12300/4280 6067/12513/4280 5983/12261/4280 +f 6001/12312/4208 5999/12305/4208 5998/12303/4208 6000/12309/4208 +f 5992/12289/4208 5991/12287/4208 5999/12305/4208 6001/12312/4208 +f 6041/12432/4246 6021/12375/4235 6028/12398/4224 6039/12426/4229 +f 6068/12514/4281 6069/12515/4281 6070/12516/4282 6071/12518/4283 +f 6072/12519/4284 6071/12517/4284 6073/12522/4285 6074/12524/4286 +f 6075/12526/4287 6076/12527/4287 6077/12528/4288 6078/12530/4289 +f 6077/12528/4290 6079/12531/4290 6080/12533/4290 6081/12535/4290 +f 6082/12537/4291 6083/12538/4291 6084/12539/4291 6085/12541/4291 +f 6086/12543/4292 6069/12515/4292 6087/12544/4292 6079/12532/4292 +f 6076/12527/4293 6086/12542/4293 6079/12531/4293 6077/12528/4293 +f 6088/12545/4294 6089/12546/4294 6086/12542/4293 6076/12527/4293 +f 6089/12547/4295 6070/12516/4295 6069/12515/4292 6086/12543/4292 +f 6090/12548/4296 6082/12536/4296 6085/12540/4296 6091/12549/4296 +f 6072/12520/4296 6092/12552/4296 6082/12536/4296 6090/12548/4296 +f 6092/12551/4291 6093/12553/4291 6083/12538/4291 6082/12537/4291 +f 6084/12539/4297 6078/12529/4297 6094/12555/4297 6095/12556/4297 +f 6079/12532/4298 6087/12544/4298 6096/12557/4298 6080/12534/4298 +f 6091/12549/4299 6085/12540/4299 6097/12559/4299 6098/12561/4299 +f 6083/12538/4300 6075/12525/4300 6078/12529/4300 6084/12539/4300 +f 6093/12553/4300 6099/12563/4300 6075/12525/4300 6083/12538/4300 +f 6099/12562/4301 6088/12545/4301 6076/12527/4287 6075/12526/4287 +f 6089/12546/4294 6088/12545/4294 6100/12564/4302 6101/12566/4302 +f 6093/12553/4303 6092/12551/4303 6102/12567/4303 6103/12569/4303 +f 6088/12545/4301 6099/12562/4301 6104/12570/4304 6100/12564/4305 +f 6105/12572/4281 6087/12544/4281 6069/12515/4281 6068/12514/4281 +f 6102/12568/4306 6074/12523/4306 6106/12575/4306 6107/12577/4306 +f 6104/12571/4307 6103/12569/4307 6108/12578/4307 6109/12580/4307 +f 6103/12569/4308 6102/12567/4308 6107/12576/4308 6108/12578/4308 +f 6100/12564/4305 6104/12570/4304 6109/12581/4309 6110/12582/4310 +f 6070/12516/4295 6089/12547/4295 6101/12565/4311 6111/12583/4311 +f 6099/12563/4312 6093/12553/4312 6103/12569/4312 6104/12571/4312 +f 6071/12518/4283 6070/12516/4282 6111/12583/4313 6073/12521/4313 +f 6092/12552/4314 6072/12520/4314 6074/12523/4314 6102/12568/4314 +f 6110/12582/4310 6109/12581/4309 6112/12584/4315 6113/12585/4316 +f 6106/12575/4317 6114/12586/4318 6115/12589/4319 6116/12590/4320 +f 6117/12591/4321 6110/12582/4321 6113/12585/4321 6118/12593/4321 +f 6114/12586/4322 6119/12596/4322 6120/12598/4322 6115/12589/4322 +f 6111/12583/4323 6101/12565/4323 6117/12592/4323 6119/12597/4323 +f 6073/12521/4324 6111/12583/4324 6119/12597/4324 6114/12587/4324 +f 6101/12566/4325 6100/12564/4325 6110/12582/4325 6117/12591/4325 +f 6074/12524/4286 6073/12522/4285 6114/12588/4318 6106/12574/4317 +f 6116/12590/4320 6115/12589/4319 6121/12602/4326 6122/12603/4327 +f 6118/12593/4328 6113/12585/4328 6123/12604/4328 6124/12606/4328 +f 6115/12589/4329 6120/12598/4329 6125/12607/4329 6121/12602/4329 +f 6120/12599/4330 6118/12594/4330 6124/12605/4330 6125/12608/4330 +f 6108/12578/4331 6107/12576/4331 6126/12609/4331 6127/12612/4331 +f 6109/12581/4332 6108/12579/4332 6127/12614/4332 6112/12584/4332 +f 6107/12577/4333 6106/12575/4333 6116/12590/4333 6126/12611/4333 +f 6119/12597/4334 6117/12592/4334 6118/12595/4334 6120/12600/4334 +f 6125/12608/4335 6124/12605/4335 6128/12616/4335 6129/12617/4335 +f 6130/12619/4336 6122/12603/4336 6131/12620/4336 6132/12621/4336 +f 6133/12623/4337 6134/12625/4337 6135/12627/4337 6136/12629/4337 +f 6134/12625/4338 6130/12618/4338 6132/12622/4338 6135/12627/4338 +f 6113/12585/4316 6112/12584/4315 6133/12624/4339 6123/12604/4340 +f 6127/12613/4341 6126/12610/4341 6130/12618/4341 6134/12625/4341 +f 6112/12584/4342 6127/12614/4342 6134/12626/4342 6133/12624/4342 +f 6126/12611/4343 6116/12590/4343 6122/12603/4343 6130/12619/4343 +f 6137/12630/4344 6138/12632/4344 6139/12634/4345 6140/12635/4345 +f 6128/12615/4346 6141/12638/4346 6142/12639/4346 6143/12641/4346 +f 6144/12644/4347 6145/12646/4347 6146/12648/4347 6147/12649/4347 +f 6132/12621/4348 6131/12620/4348 6148/12652/4348 6149/12654/4348 +f 6121/12601/4349 6125/12608/4349 6129/12617/4349 6150/12658/4349 +f 6124/12606/4350 6123/12604/4350 6141/12638/4350 6128/12615/4350 +f 6122/12603/4327 6121/12602/4326 6150/12657/4351 6131/12620/4352 +f 6123/12604/4340 6133/12624/4339 6136/12628/4353 6141/12638/4354 +f 6081/12535/4355 6080/12533/4355 6151/12659/4355 6152/12661/4355 +f 6096/12557/4356 6153/12662/4356 6154/12664/4356 6155/12668/4356 +f 6097/12558/4357 6095/12556/4357 6156/12669/4357 6157/12671/4357 +f 6153/12663/4358 6098/12560/4359 6158/12673/4360 6154/12665/4361 +f 6087/12544/4362 6105/12572/4362 6153/12662/4362 6096/12557/4362 +f 6078/12530/4289 6077/12528/4288 6081/12535/4363 6094/12554/4364 +f 6085/12541/4365 6084/12539/4365 6095/12556/4365 6097/12558/4365 +f 6105/12573/4366 6091/12550/4366 6098/12560/4359 6153/12663/4358 +f 6155/12667/4367 6154/12666/4367 6159/12675/4367 6160/12678/4367 +f 6157/12671/4368 6156/12669/4368 6161/12679/4368 6162/12682/4368 +f 6154/12666/4361 6158/12674/4360 6163/12685/4369 6159/12675/4370 +f 6158/12674/4371 6157/12672/4371 6162/12683/4371 6163/12685/4371 +f 6094/12554/4364 6081/12535/4363 6152/12661/4372 6164/12687/4373 +f 6080/12534/4374 6096/12557/4374 6155/12668/4374 6151/12660/4374 +f 6095/12556/4375 6094/12555/4375 6164/12686/4375 6156/12669/4375 +f 6098/12561/4376 6097/12559/4376 6157/12672/4376 6158/12674/4376 +f 6163/12685/4377 6162/12683/4377 6165/12688/4377 6166/12690/4377 +f 6161/12680/4378 6167/12691/4378 6168/12692/4378 6169/12694/4378 +f 6170/12696/4379 6160/12676/4379 6171/12699/4379 6172/12701/4379 +f 6167/12691/4380 6173/12703/4381 6174/12704/4382 6168/12692/4383 +f 6152/12661/4384 6151/12659/4384 6170/12698/4384 6173/12703/4384 +f 6164/12687/4373 6152/12661/4372 6173/12703/4381 6167/12691/4380 +f 6151/12660/4385 6155/12668/4385 6160/12677/4385 6170/12697/4385 +f 6156/12670/4386 6164/12687/4386 6167/12691/4386 6161/12680/4386 +f 6172/12701/4387 6171/12699/4387 6145/12646/4387 6144/12644/4387 +f 6168/12692/4383 6174/12704/4382 6175/12705/4388 6176/12707/4388 +f 6174/12704/4389 6172/12702/4389 6144/12645/4390 6175/12705/4390 +f 6171/12699/4391 6177/12708/4391 6137/12631/4392 6145/12646/4393 +f 6159/12675/4370 6163/12685/4369 6166/12690/4394 6177/12709/4395 +f 6162/12684/4396 6161/12681/4396 6169/12695/4396 6165/12689/4396 +f 6160/12678/4397 6159/12675/4397 6177/12709/4397 6171/12700/4397 +f 6173/12703/4398 6170/12698/4398 6172/12702/4398 6174/12704/4398 +f 6178/12710/4399 6179/12712/4399 6180/12713/4399 6181/12715/4399 +f 6131/12620/4352 6150/12657/4351 6182/12718/4400 6148/12652/4400 +f 6179/12712/4401 6176/12706/4401 6183/12721/4402 6180/12713/4402 +f 6141/12638/4354 6136/12628/4353 6184/12724/4403 6142/12639/4403 +f 6169/12695/4404 6168/12693/4404 6176/12706/4401 6179/12712/4401 +f 6166/12690/4405 6165/12688/4405 6178/12711/4406 6138/12632/4407 +f 6177/12709/4395 6166/12690/4394 6138/12632/4344 6137/12630/4344 +f 6165/12689/4408 6169/12695/4408 6179/12712/4408 6178/12710/4408 +f 6185/12727/4409 6143/12642/4410 6142/12640/4410 6184/12725/4410 +f 6149/12655/4409 6185/12727/4409 6184/12725/4410 6186/12728/4410 +f 6148/12653/4409 6182/12719/4409 6185/12727/4409 6149/12655/4409 +f 6182/12719/4409 6187/12730/4410 6143/12642/4410 6185/12727/4409 +f 6188/12732/4411 6147/12650/4411 6146/12647/4412 6140/12636/4412 +f 6181/12716/4413 6188/12732/4411 6140/12636/4412 6139/12633/4412 +f 6180/12714/4413 6183/12722/4413 6188/12732/4411 6181/12716/4413 +f 6183/12722/4413 6189/12733/4413 6147/12650/4411 6188/12732/4411 +f 6136/12629/4414 6135/12627/4414 6186/12729/4414 6184/12726/4414 +f 6176/12707/4388 6175/12705/4388 6189/12734/4415 6183/12723/4415 +f 6150/12658/4416 6129/12617/4416 6187/12731/4416 6182/12720/4416 +f 6138/12632/4407 6178/12711/4406 6181/12717/4417 6139/12634/4417 +f 6135/12627/4418 6132/12622/4418 6149/12656/4418 6186/12729/4418 +f 6175/12705/4390 6144/12645/4390 6147/12651/4419 6189/12734/4419 +f 6129/12617/4420 6128/12616/4420 6143/12643/4420 6187/12731/4420 +f 6145/12646/4393 6137/12631/4392 6140/12637/4421 6146/12648/4421 +f 6190/12736/4281 6191/12737/4281 6192/12738/4282 6193/12740/4283 +f 6194/12741/4422 6193/12739/4422 6195/12743/4423 6196/12744/4424 +f 6197/12745/4297 6198/12747/4297 6199/12750/4297 6200/12752/4297 +f 6201/12754/4291 6202/12755/4291 6197/12746/4291 6203/12758/4291 +f 6204/12760/4292 6191/12737/4292 6205/12761/4292 6206/12762/4292 +f 6207/12764/4293 6204/12759/4293 6206/12763/4293 6208/12765/4293 +f 6209/12766/4293 6210/12767/4293 6204/12759/4293 6207/12764/4293 +f 6210/12768/4295 6192/12738/4295 6191/12737/4292 6204/12760/4292 +f 6211/12769/4296 6201/12753/4296 6203/12757/4296 6212/12770/4296 +f 6194/12741/4296 6213/12772/4296 6201/12753/4296 6211/12769/4296 +f 6213/12771/4291 6214/12773/4291 6202/12755/4291 6201/12754/4291 +f 6206/12762/4298 6205/12761/4298 6215/12775/4298 6216/12777/4298 +f 6212/12770/4425 6203/12757/4425 6217/12778/4425 6218/12780/4425 +f 6219/12781/4426 6212/12770/4427 6218/12780/4428 6220/12783/4429 +f 6202/12756/4300 6221/12785/4300 6198/12747/4300 6197/12745/4300 +f 6214/12774/4300 6222/12787/4300 6221/12785/4300 6202/12756/4300 +f 6210/12767/4302 6209/12766/4302 6223/12788/4302 6224/12790/4302 +f 6214/12773/4303 6213/12771/4303 6225/12791/4303 6226/12793/4303 +f 6209/12766/4430 6222/12786/4430 6227/12796/4304 6223/12788/4305 +f 6211/12769/4431 6190/12735/4431 6193/12739/4422 6194/12741/4422 +f 6212/12770/4427 6219/12781/4426 6190/12735/4431 6211/12769/4431 +f 6219/12782/4281 6205/12761/4281 6191/12737/4281 6190/12736/4281 +f 6228/12797/4323 6224/12789/4323 6229/12799/4323 6230/12801/4323 +f 6225/12792/4432 6196/12744/4432 6231/12803/4432 6232/12805/4432 +f 6227/12795/4307 6226/12794/4307 6233/12806/4307 6234/12809/4307 +f 6226/12793/4433 6225/12791/4433 6232/12804/4433 6233/12808/4433 +f 6192/12738/4295 6210/12768/4295 6224/12789/4311 6228/12797/4311 +f 6222/12787/4312 6214/12774/4312 6226/12794/4312 6227/12795/4312 +f 6193/12740/4283 6192/12738/4282 6228/12797/4313 6195/12742/4313 +f 6213/12772/4434 6194/12741/4434 6196/12744/4434 6225/12792/4434 +f 6234/12810/4332 6233/12807/4332 6235/12814/4332 6236/12815/4332 +f 6233/12808/4331 6232/12804/4331 6237/12816/4331 6235/12812/4331 +f 6238/12820/4310 6234/12810/4309 6236/12815/4315 6239/12821/4316 +f 6231/12803/4435 6240/12823/4436 6241/12824/4437 6242/12825/4438 +f 6195/12742/4324 6228/12797/4324 6230/12801/4324 6240/12822/4324 +f 6224/12790/4325 6223/12788/4325 6238/12819/4325 6229/12798/4325 +f 6196/12744/4424 6195/12743/4423 6240/12823/4436 6231/12803/4435 +f 6223/12788/4305 6227/12796/4304 6234/12811/4309 6238/12819/4310 +f 6242/12825/4438 6241/12824/4437 6243/12827/4439 6244/12828/4440 +f 6245/12831/4328 6239/12821/4328 6246/12832/4328 6247/12833/4328 +f 6241/12824/4329 6248/12837/4329 6249/12838/4329 6243/12827/4329 +f 6248/12835/4330 6245/12829/4330 6247/12834/4330 6249/12839/4330 +f 6232/12805/4441 6231/12803/4441 6242/12825/4441 6237/12818/4441 +f 6230/12801/4334 6229/12799/4334 6245/12830/4334 6248/12836/4334 +f 6240/12823/4322 6230/12802/4322 6248/12837/4322 6241/12824/4322 +f 6229/12800/4442 6238/12820/4442 6239/12821/4442 6245/12831/4442 +f 6247/12833/4350 6246/12832/4350 6250/12840/4350 6251/12841/4350 +f 6243/12826/4349 6249/12839/4349 6252/12843/4349 6253/12845/4349 +f 6249/12839/4335 6247/12834/4335 6251/12842/4335 6252/12843/4335 +f 6254/12846/4443 6244/12828/4443 6255/12848/4443 6256/12849/4443 +f 6239/12821/4316 6236/12815/4315 6257/12851/4444 6246/12832/4445 +f 6235/12813/4341 6237/12817/4341 6254/12847/4341 6258/12854/4341 +f 6236/12815/4342 6235/12814/4342 6258/12853/4342 6257/12851/4342 +f 6237/12818/4446 6242/12825/4446 6244/12828/4446 6254/12846/4446 +f 6259/12855/4447 6260/12857/4447 6261/12859/4448 6262/12860/4448 +f 6251/12841/4449 6250/12840/4449 6263/12863/4449 6264/12865/4449 +f 6265/12869/4347 6266/12871/4347 6267/12873/4347 6268/12874/4347 +f 6256/12849/4450 6255/12848/4450 6269/12878/4450 6270/12880/4450 +f 6244/12828/4440 6243/12827/4439 6253/12844/4451 6255/12848/4452 +f 6246/12832/4445 6257/12851/4444 6271/12884/4453 6250/12840/4354 +f 6258/12854/4338 6254/12847/4338 6256/12850/4338 6272/12886/4338 +f 6257/12852/4337 6258/12854/4337 6272/12886/4337 6271/12885/4337 +f 6215/12775/4356 6220/12784/4356 6273/12887/4356 6274/12889/4356 +f 6217/12779/4357 6200/12751/4357 6275/12893/4357 6276/12895/4357 +f 6220/12783/4429 6218/12780/4428 6277/12896/4454 6273/12888/4455 +f 6218/12780/4456 6217/12778/4456 6276/12894/4456 6277/12896/4456 +f 6208/12765/4290 6206/12763/4290 6216/12776/4290 6278/12897/4290 +f 6205/12761/4362 6219/12782/4362 6220/12784/4362 6215/12775/4362 +f 6198/12748/4457 6208/12765/4457 6278/12897/4458 6199/12749/4364 +f 6203/12758/4365 6197/12746/4365 6200/12751/4365 6217/12779/4365 +f 6273/12888/4455 6277/12896/4454 6279/12898/4459 6280/12899/4460 +f 6277/12896/4461 6276/12894/4461 6281/12901/4461 6279/12898/4461 +f 6275/12891/4386 6282/12905/4386 6283/12906/4386 6284/12907/4386 +f 6285/12911/4385 6274/12889/4385 6286/12913/4385 6287/12916/4385 +f 6278/12897/4355 6216/12776/4355 6285/12910/4355 6288/12919/4355 +f 6199/12749/4364 6278/12897/4458 6288/12919/4372 6282/12903/4373 +f 6216/12777/4374 6215/12775/4374 6274/12889/4374 6285/12911/4374 +f 6200/12752/4375 6199/12750/4375 6282/12904/4375 6275/12892/4375 +f 6284/12907/4378 6283/12906/4378 6289/12921/4378 6290/12923/4378 +f 6287/12917/4379 6286/12914/4379 6291/12926/4379 6292/12928/4379 +f 6283/12906/4380 6293/12929/4381 6294/12930/4382 6289/12921/4383 +f 6293/12929/4398 6287/12918/4398 6292/12927/4398 6294/12930/4398 +f 6276/12895/4368 6275/12893/4368 6284/12908/4368 6281/12900/4368 +f 6274/12890/4367 6273/12888/4367 6280/12899/4367 6286/12915/4367 +f 6288/12920/4384 6285/12912/4384 6287/12918/4384 6293/12929/4384 +f 6282/12905/4373 6288/12920/4372 6293/12929/4381 6283/12906/4380 +f 6294/12930/4389 6292/12927/4389 6265/12870/4390 6295/12931/4390 +f 6291/12926/4391 6296/12932/4391 6259/12856/4392 6266/12871/4393 +f 6297/12934/4462 6290/12924/4462 6298/12936/4462 6299/12937/4462 +f 6296/12933/4463 6300/12939/4464 6260/12857/4447 6259/12855/4447 +f 6279/12898/4465 6281/12901/4465 6297/12935/4465 6300/12939/4465 +f 6280/12899/4460 6279/12898/4459 6300/12939/4464 6296/12933/4463 +f 6281/12902/4396 6284/12909/4396 6290/12924/4396 6297/12934/4396 +f 6286/12915/4397 6280/12899/4397 6296/12933/4397 6291/12925/4397 +f 6299/12937/4399 6298/12936/4399 6301/12940/4399 6302/12942/4399 +f 6255/12848/4452 6253/12844/4451 6303/12946/4400 6269/12878/4400 +f 6250/12840/4354 6271/12884/4453 6304/12949/4403 6263/12863/4403 +f 6298/12936/4401 6305/12952/4401 6306/12954/4402 6301/12940/4402 +f 6289/12921/4383 6294/12930/4382 6295/12931/4388 6305/12953/4388 +f 6292/12928/4387 6291/12926/4387 6266/12871/4387 6265/12869/4387 +f 6290/12924/4404 6289/12922/4404 6305/12952/4401 6298/12936/4401 +f 6300/12939/4466 6297/12935/4466 6299/12938/4467 6260/12857/4468 +f 6307/12957/4409 6264/12866/4410 6263/12864/4410 6304/12950/4410 +f 6270/12881/4409 6307/12957/4409 6304/12950/4410 6308/12959/4410 +f 6269/12879/4409 6303/12947/4409 6307/12958/4409 6270/12882/4409 +f 6303/12947/4409 6309/12961/4410 6264/12867/4410 6307/12958/4409 +f 6310/12963/4411 6268/12875/4411 6267/12872/4412 6262/12861/4412 +f 6302/12943/4413 6310/12963/4411 6262/12861/4412 6261/12858/4412 +f 6301/12941/4413 6306/12955/4413 6310/12964/4411 6302/12944/4413 +f 6306/12955/4413 6311/12965/4413 6268/12876/4411 6310/12964/4411 +f 6271/12885/4414 6272/12886/4414 6308/12960/4414 6304/12951/4414 +f 6305/12953/4388 6295/12931/4388 6311/12966/4415 6306/12956/4415 +f 6253/12845/4416 6252/12843/4416 6309/12962/4416 6303/12948/4416 +f 6260/12857/4468 6299/12938/4467 6302/12945/4469 6261/12859/4469 +f 6272/12886/4418 6256/12850/4418 6270/12883/4418 6308/12960/4418 +f 6295/12931/4390 6265/12870/4390 6268/12877/4419 6311/12966/4419 +f 6252/12843/4420 6251/12842/4420 6264/12868/4420 6309/12962/4420 +f 6266/12871/4393 6259/12856/4392 6262/12862/4421 6267/12873/4421 +o Chair.016 +v 12.063915 0.415382 5.988234 +v 12.063915 0.429951 5.988234 +v 12.014728 0.429951 5.994764 +v 11.616273 0.429951 6.047657 +v 11.567086 0.429951 6.054187 +v 11.567086 0.415382 6.054187 +v 11.616273 0.415382 6.047657 +v 12.014728 0.415382 5.994764 +v 11.516472 0.429951 5.672900 +v 11.516472 0.415382 5.672900 +v 11.516472 0.400812 5.672900 +v 11.561694 0.400812 5.666896 +v 11.616273 0.400812 6.047657 +v 11.567086 0.400812 6.054187 +v 12.013300 0.415382 5.606947 +v 12.013300 0.429951 5.606947 +v 11.968078 0.415382 5.612950 +v 11.968078 0.429951 5.612950 +v 12.013300 0.400812 5.606947 +v 11.968078 0.400812 5.612950 +v 12.063915 0.400812 5.988234 +v 12.014728 0.400812 5.994764 +v 11.590716 0.432961 6.076358 +v 11.605536 0.432961 6.074391 +v 11.604944 0.421009 6.069933 +v 11.590124 0.421009 6.071900 +v 11.606606 0.426967 6.082449 +v 11.591786 0.426967 6.084416 +v 12.046544 0.419106 6.013389 +v 12.031936 0.419106 6.015328 +v 12.033598 0.425064 6.027844 +v 12.048205 0.425064 6.025905 +v 12.047154 0.434699 6.017985 +v 12.032546 0.434699 6.019925 +v 11.607428 0.431853 6.088637 +v 11.592607 0.431853 6.090604 +v 12.034437 0.433592 6.034171 +v 12.049046 0.433592 6.032231 +v 12.050659 0.592772 6.044391 +v 12.048768 0.593879 6.030145 +v 11.592330 0.592141 6.088517 +v 11.607150 0.592141 6.086550 +v 11.594221 0.591033 6.102763 +v 11.596643 0.829840 6.121006 +v 11.594752 0.830948 6.106760 +v 12.053081 0.831579 6.062633 +v 12.051189 0.832686 6.048387 +v 11.609041 0.591033 6.100796 +v 12.034161 0.593879 6.032084 +v 12.036052 0.592772 6.046330 +v 11.593409 0.830737 6.096636 +v 11.618042 0.870951 6.106974 +v 11.616847 0.870348 6.097971 +v 12.035236 0.832325 6.040191 +v 12.049845 0.832325 6.038252 +v 12.027329 0.869634 6.045302 +v 12.010603 0.864490 6.047122 +v 11.611463 0.829840 6.119038 +v 12.047572 0.608202 6.021132 +v 12.036582 0.832686 6.050326 +v 12.038473 0.831579 6.064572 +v 11.609571 0.830948 6.104792 +v 11.619745 0.869953 6.119804 +v 11.591135 0.606614 6.079515 +v 11.605955 0.606614 6.077548 +v 11.608228 0.830737 6.094669 +v 12.032964 0.608202 6.023071 +v 12.028525 0.870373 6.054314 +v 12.011800 0.865229 6.056135 +v 12.013503 0.864232 6.068965 +v 11.689598 0.913073 6.091304 +v 11.691137 0.914244 6.099353 +v 11.956143 0.911897 6.067112 +v 11.955427 0.911148 6.058987 +v 11.637758 0.867524 6.117224 +v 11.636055 0.868521 6.104393 +v 11.700604 0.902898 6.097214 +v 11.702439 0.901824 6.111035 +v 11.634860 0.867919 6.095391 +v 12.030229 0.869376 6.067145 +v 11.946571 0.900855 6.067524 +v 11.948406 0.899781 6.081344 +v 11.957978 0.910823 6.080932 +v 11.692972 0.913170 6.113173 +v 11.947511 0.901346 6.059275 +v 11.699065 0.901727 6.089166 +v 11.561694 0.415382 5.666896 +v 11.561694 0.429951 5.666896 +v 11.539713 0.438060 5.864470 +v 11.533922 0.443651 5.865239 +v 11.551172 0.443651 5.995184 +v 11.556963 0.438060 5.994415 +v 11.556787 0.429976 5.994439 +v 11.561226 0.437950 6.026530 +v 11.560706 0.430300 6.023962 +v 11.520191 0.429903 5.867062 +v 11.520366 0.437987 5.867038 +v 11.503116 0.437987 5.737094 +v 11.502941 0.429903 5.737117 +v 11.508659 0.443828 5.736359 +v 11.504461 0.439408 5.704734 +v 11.499226 0.434055 5.707787 +v 11.533995 0.424135 5.865229 +v 11.525981 0.424311 5.866293 +v 11.508732 0.424311 5.736349 +v 11.516746 0.424135 5.735285 +v 11.525908 0.443828 5.866302 +v 11.516673 0.443651 5.735295 +v 11.537616 0.437987 5.996984 +v 11.543159 0.443828 5.996248 +v 11.539537 0.429976 5.864493 +v 11.522287 0.429976 5.734550 +v 11.551245 0.424135 5.995174 +v 11.543231 0.424311 5.996238 +v 11.499476 0.426646 5.711015 +v 11.505561 0.421521 5.712464 +v 11.512485 0.439247 5.703741 +v 11.513584 0.421360 5.711471 +v 11.518819 0.426713 5.708418 +v 11.537441 0.429903 5.997006 +v 11.541876 0.437881 6.029076 +v 11.547668 0.443408 6.030211 +v 11.554915 0.424773 6.022827 +v 11.546909 0.424940 6.023947 +v 11.541357 0.430231 6.026508 +v 11.522463 0.438060 5.734526 +v 11.564429 0.420977 6.052005 +v 11.558416 0.416357 6.049197 +v 11.550417 0.416497 6.050368 +v 11.545076 0.420919 6.054529 +v 11.545902 0.427313 6.059410 +v 11.555674 0.443241 6.029091 +v 11.548201 0.402967 6.078061 +v 11.549263 0.407418 6.084728 +v 11.565255 0.427371 6.056886 +v 11.568619 0.407458 6.082220 +v 11.567554 0.403008 6.075553 +v 11.551916 0.431932 6.062217 +v 11.555449 0.410634 6.088825 +v 11.559916 0.431793 6.061047 +v 11.563442 0.410537 6.087616 +v 11.570953 0.380352 6.099811 +v 11.569748 0.378323 6.092076 +v 11.551597 0.380334 6.102308 +v 11.557884 0.381800 6.107177 +v 11.565876 0.381756 6.105944 +v 11.561371 0.399792 6.071455 +v 11.553376 0.399889 6.072665 +v 11.559940 0.345795 6.122664 +v 11.567931 0.345756 6.121430 +v 11.563462 0.376856 6.087207 +v 11.571791 0.342751 6.107459 +v 11.565498 0.341467 6.102546 +v 11.550393 0.378304 6.094575 +v 11.555470 0.376901 6.088440 +v 11.557508 0.341506 6.103781 +v 11.552435 0.342735 6.109957 +v 11.509408 0.349401 5.636179 +v 11.510289 0.348454 5.644161 +v 11.504881 -0.002953 5.603414 +v 11.503999 -0.002007 5.595431 +v 11.553647 0.344511 6.117751 +v 11.565054 0.001491 6.203680 +v 11.571347 0.002774 6.208594 +v 11.494850 0.350077 5.632333 +v 11.502887 0.350056 5.631443 +v 11.497478 -0.001352 5.590695 +v 11.489441 -0.001331 5.591585 +v 11.583199 -0.000270 6.193388 +v 11.576905 -0.001553 6.188476 +v 11.573004 0.344527 6.115254 +v 11.500389 0.425574 5.674059 +v 11.495409 0.421603 5.679040 +v 11.518569 0.434122 5.705189 +v 11.514750 0.421652 5.676420 +v 11.508420 0.425454 5.673123 +v 11.502345 0.412305 5.688237 +v 11.510376 0.412185 5.687301 +v 11.515354 0.416156 5.682320 +v 11.511894 0.403231 5.654907 +v 11.505409 0.405075 5.650443 +v 11.499870 0.398698 5.669598 +v 11.507906 0.398640 5.668698 +v 11.512723 0.400566 5.662497 +v 11.496016 0.416106 5.684941 +v 11.505920 0.371230 5.653741 +v 11.510712 0.372479 5.647349 +v 11.493385 0.400542 5.665133 +v 11.491375 0.372464 5.649988 +v 11.497884 0.371267 5.654634 +v 11.497374 0.405133 5.651341 +v 11.503340 0.375406 5.634852 +v 11.495303 0.375443 5.635745 +v 11.492556 0.403207 5.657544 +v 11.490510 0.374194 5.642136 +v 11.490070 0.349392 5.638819 +v 11.490952 0.348446 5.646801 +v 11.509849 0.374209 5.639498 +v 11.505510 0.347770 5.650648 +v 11.497473 0.347791 5.651537 +v 11.492064 -0.003617 5.610789 +v 11.500101 -0.003637 5.609899 +v 11.584411 0.001507 6.201183 +v 11.485543 -0.002962 5.606053 +v 11.563842 -0.000286 6.195886 +v 11.574125 0.000611 6.198534 +v 11.568913 -0.001514 6.189710 +v 11.579338 0.002736 6.207359 +v 11.494770 -0.002484 5.600743 +v 11.484661 -0.002015 5.598072 +v 12.058703 0.438060 5.795576 +v 12.052913 0.443651 5.796344 +v 12.070163 0.443651 5.926290 +v 12.075953 0.438060 5.925521 +v 12.075778 0.429976 5.925544 +v 12.080216 0.437950 5.957636 +v 12.079698 0.430300 5.955068 +v 12.027721 0.424311 5.667454 +v 12.021932 0.429903 5.668223 +v 12.018467 0.426646 5.642121 +v 12.024551 0.421521 5.643570 +v 12.052985 0.424135 5.796335 +v 12.044971 0.424311 5.797399 +v 12.035735 0.424135 5.666390 +v 12.044899 0.443828 5.797408 +v 12.035663 0.443651 5.666400 +v 12.027649 0.443828 5.667464 +v 12.039355 0.437987 5.798144 +v 12.022106 0.437987 5.668200 +v 12.056605 0.437987 5.928089 +v 12.062149 0.443828 5.927353 +v 12.058529 0.429976 5.795599 +v 12.041279 0.429976 5.665655 +v 12.070235 0.424135 5.926280 +v 12.062222 0.424311 5.927343 +v 12.031474 0.439247 5.634846 +v 12.023452 0.439408 5.635839 +v 12.032575 0.421360 5.642577 +v 12.037810 0.426713 5.639524 +v 12.041453 0.438060 5.665632 +v 12.037559 0.434122 5.636295 +v 12.039182 0.429903 5.798167 +v 12.056431 0.429903 5.928112 +v 12.060865 0.437881 5.960182 +v 12.066658 0.443408 5.961317 +v 12.073906 0.424773 5.953932 +v 12.065900 0.424940 5.955052 +v 12.060348 0.430231 5.957613 +v 12.074664 0.443241 5.960197 +v 12.070907 0.431932 5.993323 +v 12.078906 0.431793 5.992153 +v 12.083420 0.420977 5.983111 +v 12.077407 0.416357 5.980304 +v 12.069407 0.416497 5.981474 +v 12.064067 0.420919 5.985635 +v 12.072367 0.399889 6.003770 +v 12.067191 0.402967 6.009166 +v 12.080361 0.399792 6.002561 +v 12.064893 0.427313 5.990515 +v 12.068254 0.407418 6.015833 +v 12.084246 0.427371 5.987992 +v 12.087608 0.407458 6.013326 +v 12.086546 0.403008 6.006659 +v 12.089944 0.380352 6.030916 +v 12.088739 0.378323 6.023181 +v 12.074438 0.410634 6.019931 +v 12.070587 0.380334 6.033414 +v 12.076875 0.381800 6.038283 +v 12.082433 0.410537 6.018722 +v 12.084866 0.381756 6.037050 +v 12.072638 0.344511 6.048858 +v 12.078931 0.345795 6.053770 +v 12.086922 0.345756 6.052536 +v 12.091994 0.344527 6.046360 +v 12.082452 0.376856 6.018312 +v 12.090781 0.342751 6.038564 +v 12.084488 0.341467 6.033652 +v 12.069383 0.378304 6.025680 +v 12.074461 0.376901 6.019546 +v 12.028398 0.349401 5.567284 +v 12.029280 0.348454 5.575267 +v 12.023871 -0.002953 5.534519 +v 12.022989 -0.002007 5.526537 +v 12.084044 0.001491 6.134786 +v 12.090337 0.002774 6.139699 +v 12.013841 0.350077 5.563438 +v 12.021877 0.350056 5.562548 +v 12.016468 -0.001352 5.521801 +v 12.008431 -0.001331 5.522691 +v 12.102188 -0.000270 6.124494 +v 12.095895 -0.001553 6.119581 +v 12.071424 0.342735 6.041062 +v 12.076497 0.341506 6.034886 +v 12.033740 0.421652 5.607525 +v 12.027410 0.425454 5.604228 +v 12.021335 0.412305 5.619342 +v 12.029366 0.412185 5.618407 +v 12.034346 0.416156 5.613425 +v 12.018215 0.434055 5.638892 +v 12.031714 0.400566 5.593602 +v 12.030884 0.403231 5.586013 +v 12.026896 0.398640 5.599804 +v 12.015005 0.416106 5.616047 +v 12.012376 0.400542 5.596239 +v 12.018861 0.398698 5.600703 +v 12.019380 0.425574 5.605165 +v 12.024400 0.405075 5.581549 +v 12.016363 0.405133 5.582447 +v 12.014400 0.421603 5.610146 +v 12.010365 0.372464 5.581093 +v 12.016874 0.371267 5.585739 +v 12.022329 0.375406 5.565958 +v 12.014294 0.375443 5.566851 +v 12.011546 0.403207 5.588650 +v 12.009501 0.374194 5.573242 +v 12.009060 0.349392 5.569925 +v 12.028838 0.374209 5.570603 +v 12.024911 0.371230 5.584846 +v 12.016463 0.347791 5.582643 +v 12.024500 0.347770 5.581752 +v 12.029703 0.372479 5.578454 +v 12.011054 -0.003617 5.541895 +v 12.019091 -0.003637 5.541005 +v 12.103400 0.001507 6.132289 +v 12.082831 -0.000286 6.126991 +v 12.009942 0.348446 5.577906 +v 12.004533 -0.002962 5.537159 +v 12.093117 0.000611 6.129640 +v 12.087904 -0.001514 6.120815 +v 12.098329 0.002736 6.138465 +v 12.013762 -0.002484 5.531848 +v 12.003652 -0.002015 5.529177 +vn 0.1316 -0.0000 0.9913 +vn -0.9913 -0.0000 0.1316 +vn -0.0000 -1.0000 -0.0000 +vn 0.9913 -0.0000 -0.1316 +vn -0.1316 -0.0000 -0.9913 +vn -0.0157 0.9929 -0.1181 +vn 0.0347 -0.9646 0.2613 +vn 0.0562 -0.9044 0.4230 +vn 0.9019 -0.0911 0.4221 +vn 0.0213 -0.9868 0.1608 +vn -0.0226 0.9852 -0.1699 +vn -0.7844 -0.0779 0.6153 +vn -0.6331 -0.1146 0.7656 +vn 0.8382 -0.0987 0.5363 +vn 0.0811 -0.7874 0.6110 +vn 0.1054 -0.5992 0.7937 +vn -0.1312 0.0768 -0.9884 +vn 0.1312 -0.0768 0.9884 +vn -0.9358 -0.2916 0.1983 +vn -0.8595 0.5027 0.0927 +vn -0.1276 0.1047 -0.9863 +vn -0.1350 0.1119 -0.9845 +vn -0.1356 0.1062 -0.9851 +vn -0.4224 -0.0656 0.9040 +vn -0.8545 0.4967 0.1521 +vn -0.1288 0.0768 -0.9887 +vn -0.1111 -0.5359 -0.8369 +vn 0.8369 0.5287 -0.1415 +vn -0.7893 -0.6113 0.0573 +vn -0.0675 -0.8531 -0.5173 +vn -0.1082 -0.5326 -0.8394 +vn -0.1050 -0.5337 -0.8391 +vn -0.1115 -0.5315 -0.8397 +vn -0.0062 0.9931 -0.1170 +vn 0.2303 0.9648 -0.1266 +vn 0.2557 0.9584 -0.1272 +vn 0.4549 -0.8811 -0.1289 +vn 0.4738 -0.8634 0.1732 +vn 0.2534 -0.7743 0.5798 +vn 0.8072 -0.5705 -0.1515 +vn 0.5330 -0.3669 0.7625 +vn 0.5769 -0.3997 0.7123 +vn 0.1337 -0.0465 0.9899 +vn -0.1276 0.1108 -0.9856 +vn -0.1267 0.1116 -0.9856 +vn 0.1264 -0.0794 0.9888 +vn 0.8497 0.5223 -0.0722 +vn 0.1255 -0.0401 0.9913 +vn -0.1284 0.1101 -0.9856 +vn 0.1237 -0.0584 0.9906 +vn -0.1127 -0.7742 0.6228 +vn 0.1264 -0.0813 0.9886 +vn 0.1320 -0.0847 0.9876 +vn 0.1193 -0.0769 0.9899 +vn -0.4949 0.8588 0.1325 +vn 0.2655 0.9633 0.0396 +vn 0.0180 0.9970 0.0751 +vn 0.2664 0.9630 0.0395 +vn -0.5086 0.8610 -0.0080 +vn -0.1315 0.0845 -0.9877 +vn -0.1252 0.0831 -0.9887 +vn -0.1241 0.0796 -0.9891 +vn -0.1194 0.0778 -0.9898 +vn -0.4799 -0.8773 -0.0045 +vn -0.2562 -0.9658 -0.0410 +vn -0.1378 0.0880 -0.9866 +vn 0.1383 -0.0886 0.9864 +vn 0.4978 0.8673 0.0013 +vn 0.4768 0.8695 -0.1287 +vn -0.1318 0.0744 -0.9885 +vn -0.1233 0.0849 -0.9887 +vn -0.0174 -0.9970 -0.0752 +vn 0.1330 -0.0732 0.9884 +vn -0.1335 0.0723 -0.9884 +vn -0.0000 1.0000 -0.0000 +vn 0.6855 0.7224 -0.0910 +vn 0.6812 0.7268 -0.0876 +vn 0.6812 0.7269 -0.0875 +vn 0.9911 -0.0225 -0.1315 +vn 0.9910 -0.0215 -0.1318 +vn 0.9902 -0.0204 -0.1380 +vn -0.9911 0.0218 0.1316 +vn -0.9912 0.0219 0.1302 +vn -0.9913 0.0219 0.1301 +vn -0.7202 0.6937 0.0005 +vn -0.0216 -0.9998 0.0029 +vn 0.0217 0.9998 -0.0029 +vn -0.7161 0.6915 0.0951 +vn -0.7112 0.6962 0.0972 +vn 0.0222 0.9997 0.0032 +vn 0.7161 -0.6915 -0.0951 +vn -0.6651 -0.7257 0.1761 +vn 0.0031 0.9903 -0.1387 +vn 0.7184 -0.6955 -0.0113 +vn -0.6855 -0.7223 0.0910 +vn -0.9911 0.0221 0.1315 +vn -0.7064 0.7008 0.0993 +vn -0.0180 -0.9995 0.0253 +vn -0.9902 0.0214 0.1383 +vn -0.9910 0.0224 0.1319 +vn 0.6773 -0.6683 -0.3078 +vn -0.7043 -0.6972 -0.1339 +vn -0.0607 -0.9532 -0.2963 +vn -0.9893 0.0183 0.1449 +vn -0.9900 0.0214 0.1392 +vn 0.0227 0.9997 0.0092 +vn -0.6731 -0.7326 0.1016 +vn 0.6769 0.7313 -0.0841 +vn 0.7072 -0.7022 -0.0821 +vn -0.9886 0.0132 0.1502 +vn -0.9891 0.0178 0.1459 +vn 0.9894 -0.0175 -0.1444 +vn 0.9901 -0.0205 -0.1388 +vn 0.9893 -0.0172 -0.1451 +vn 0.9887 -0.0124 -0.1495 +vn -0.6501 0.5509 0.5233 +vn 0.7357 0.5748 0.3583 +vn 0.0651 0.9421 0.3290 +vn 0.7080 0.6901 0.1500 +vn -0.6766 0.6614 0.3237 +vn 0.9886 -0.0119 -0.1498 +vn 0.9885 -0.0090 -0.1512 +vn -0.6297 0.3812 0.6769 +vn 0.7569 0.3978 0.5185 +vn 0.1318 0.5403 0.8311 +vn -0.0991 -0.8044 -0.5858 +vn -0.7324 -0.5868 -0.3453 +vn 0.6504 -0.5625 -0.5104 +vn 0.1028 0.7833 0.6131 +vn 0.1420 0.3980 0.9063 +vn 0.6268 -0.2790 -0.7275 +vn -0.7677 -0.2912 -0.5708 +vn -0.1419 -0.4005 -0.9052 +vn -0.9884 0.0092 0.1518 +vn -0.9885 0.0122 0.1504 +vn -0.1291 -0.5692 -0.8120 +vn -0.7543 -0.4135 -0.5100 +vn 0.6294 -0.3964 -0.6684 +vn 0.9939 -0.0027 -0.1100 +vn 0.9939 -0.0025 -0.1101 +vn -0.6277 0.1694 0.7598 +vn -0.1091 0.1162 -0.9872 +vn 0.6277 -0.1695 -0.7598 +vn 0.7679 0.2899 0.5712 +vn -0.6268 0.2777 0.7280 +vn 0.9886 -0.0080 -0.1507 +vn 0.9884 -0.0055 -0.1517 +vn -0.9883 0.0054 0.1526 +vn -0.9883 0.0070 0.1521 +vn -0.7387 0.6472 -0.1882 +vn 0.6313 0.6748 -0.3822 +vn 0.0259 -0.9356 0.3521 +vn 0.9915 -0.0216 -0.1285 +vn 0.9922 -0.0207 -0.1232 +vn 0.9929 -0.0182 -0.1174 +vn 0.9923 -0.0205 -0.1225 +vn 0.6640 0.7239 -0.1873 +vn -0.9915 0.0227 0.1283 +vn -0.9922 0.0218 0.1230 +vn -0.0059 -0.9932 0.1167 +vn 0.9914 -0.0222 -0.1287 +vn 0.5953 0.5630 -0.5733 +vn 0.0576 -0.8103 0.5831 +vn 0.9936 -0.0112 -0.1127 +vn 0.9930 -0.0173 -0.1164 +vn 0.7394 -0.5801 0.3417 +vn -0.9923 0.0211 0.1223 +vn -0.9929 0.0187 0.1171 +vn -0.0329 0.9128 -0.4071 +vn -0.6314 -0.6896 0.3547 +vn 0.7319 -0.6617 0.1626 +vn 0.7876 -0.3366 0.5160 +vn -0.5912 -0.3512 0.7260 +vn -0.0952 0.4682 -0.8785 +vn -0.9936 0.0114 0.1123 +vn -0.9931 0.0175 0.1161 +vn -0.9937 0.0104 0.1118 +vn -0.9939 0.0032 0.1099 +vn -0.7532 0.5405 -0.3748 +vn -0.0673 0.7463 -0.6621 +vn -0.5904 -0.6033 0.5361 +vn -0.1088 0.1344 -0.9849 +vn -0.9939 0.0027 0.1101 +vn -0.8057 0.0928 -0.5850 +vn -0.8061 0.0866 -0.5854 +vn 0.5906 0.0969 -0.8011 +vn 0.5909 0.0905 -0.8017 +vn 0.5909 0.0904 -0.8017 +vn 0.9938 -0.0030 -0.1110 +vn 0.9936 -0.0100 -0.1128 +vn 0.0942 -0.4821 0.8711 +vn 0.5917 0.3437 -0.7292 +vn -0.7888 0.3294 -0.5189 +vn 0.1090 -0.1162 0.9872 +vn 0.9883 -0.0053 -0.1525 +vn -0.5908 -0.0898 0.8018 +vn -0.5911 -0.0839 0.8022 +vn -0.9883 0.0053 0.1525 +vn -0.5906 -0.0956 0.8013 +vn 0.8058 -0.0916 0.5851 +vn 0.8061 -0.0860 0.5855 +vn 0.8061 -0.0859 0.5855 +vn 0.1087 -0.1319 0.9853 +vn 0.0289 -0.9756 0.2178 +vn 0.0289 -0.9756 0.2179 +vn -0.0154 -0.9931 -0.1161 +vn -0.0155 -0.9931 -0.1161 +vn -0.0154 -0.9931 -0.1160 +vn -0.7776 -0.1770 -0.6034 +vn -0.9939 0.0025 0.1101 +vn 0.7776 0.1770 0.6034 +vn 0.8065 -0.0803 0.5858 +vn -0.1492 -0.2449 -0.9580 +vn -0.8065 0.0803 -0.5858 +vn 0.1492 0.2449 0.9580 +vn 0.5911 0.0839 -0.8022 +vn 0.9911 -0.0221 -0.1315 +vn 0.9910 -0.0224 -0.1319 +vn 0.9901 -0.0214 -0.1384 +vn 0.7184 -0.6956 -0.0113 +vn 0.9912 -0.0219 -0.1302 +vn 0.9913 -0.0219 -0.1301 +vn 0.9922 -0.0218 -0.1230 +vn 0.9915 -0.0228 -0.1282 +vn -0.9911 0.0224 0.1315 +vn 0.9911 -0.0218 -0.1316 +vn 0.6772 -0.6683 -0.3078 +vn 0.7072 -0.7023 -0.0821 +vn 0.9893 -0.0183 -0.1449 +vn 0.9900 -0.0214 -0.1393 +vn 0.9891 -0.0178 -0.1458 +vn 0.9886 -0.0131 -0.1502 +vn 0.9885 -0.0123 -0.1504 +vn 0.9884 -0.0092 -0.1518 +vn 0.6503 -0.5626 -0.5105 +vn -0.6268 0.2777 0.7281 +vn 0.6267 -0.2790 -0.7276 +vn -0.9884 0.0091 0.1518 +vn -0.9885 0.0123 0.1504 +vn 0.9939 -0.0027 -0.1101 +vn -0.6277 0.1695 0.7598 +vn 0.9883 -0.0070 -0.1521 +vn 0.9882 -0.0057 -0.1530 +vn -0.9883 0.0055 0.1526 +vn 0.9929 -0.0187 -0.1171 +vn 0.9923 -0.0210 -0.1223 +vn 0.7319 -0.6618 0.1626 +vn -0.9914 0.0221 0.1287 +vn 0.9936 -0.0114 -0.1123 +vn 0.9931 -0.0176 -0.1161 +vn 0.7393 -0.5802 0.3418 +vn 0.1089 -0.1319 0.9853 +vn 0.9937 -0.0104 -0.1118 +vn 0.9939 -0.0032 -0.1099 +vn 0.7876 -0.3367 0.5161 +vn 0.0943 -0.4821 0.8710 +vn 0.1091 -0.1162 0.9872 +vn 0.8057 -0.0916 0.5852 +vn 0.8061 -0.0860 0.5856 +vn 0.8061 -0.0859 0.5856 +vn 0.8064 -0.0803 0.5859 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt 0.686647 0.000000 +vt 0.870176 0.996278 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.782584 0.965408 +vt 0.870573 0.970227 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.833010 0.965282 +vt 0.908785 0.026051 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.968598 0.070112 +vt 0.979071 0.026051 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.968598 0.371019 +vt 0.757324 0.262250 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.173427 0.241164 +vt 0.758439 0.080128 +vt -0.973130 0.033128 +vt -0.123087 0.241439 +vt 0.978437 0.000000 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt 0.737072 0.000128 +vt 0.908263 0.000000 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.409642 -0.009898 +vt 0.677629 0.482142 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.240570 0.058726 +vt 0.669677 0.481452 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.786789 0.246652 +vt 0.991724 0.699406 +vt 0.928489 0.277215 +vt 0.873308 0.505274 +vt 0.786789 0.155990 +vt 0.958960 0.029326 +vt 0.991724 0.483440 +vt 0.977373 0.702462 +vt -0.140978 0.246673 +vt 0.958492 0.010078 +vt -0.156145 0.246590 +vt 0.929566 0.080357 +vt -0.144664 0.252235 +vt 0.984385 0.731379 +vt 0.945934 0.020741 +vt -0.159831 0.252152 +vt 0.984385 0.500820 +vt 0.989649 0.087406 +vt 0.706860 0.007022 +vt 0.847263 0.989602 +vt 0.686599 0.714388 +vt 0.721837 0.007060 +vt 0.884682 0.006674 +vt 0.720919 0.017861 +vt 0.673632 0.527027 +vt 0.872079 0.017335 +vt 0.705942 0.017823 +vt 0.673632 0.731676 +vt 0.690157 0.523535 +vt 0.802894 0.958412 +vt 0.847659 0.963551 +vt 0.695298 0.714388 +vt 0.661237 0.495044 +vt 0.817871 0.958374 +vt 0.885205 0.032725 +vt 0.661237 0.722645 +vt 0.693293 0.503638 +vt 0.944329 0.029337 +vt 0.981154 0.731379 +vt 0.977373 0.486830 +vt 0.989649 0.263822 +vt 0.873305 0.723869 +vt 0.981154 0.500820 +vt 0.870573 0.032734 +vt 0.693293 0.761173 +vt 0.679412 0.527027 +vt 0.695298 0.493838 +vt 0.679412 0.731676 +vt 0.826600 0.493835 +vt 0.826977 0.731673 +vt 0.826600 0.714385 +vt 0.814491 0.495042 +vt 0.122435 0.638558 +vt 0.015922 0.839080 +vt 0.835047 0.699404 +vt 0.993361 0.510073 +vt 0.758428 0.504317 +vt 0.072861 0.638558 +vt 0.015474 0.619132 +vt 0.835047 0.483438 +vt 0.845328 0.702461 +vt 0.015197 0.626266 +vt 0.014109 0.491099 +vt 0.993356 0.728667 +vt 0.758425 0.722912 +vt 0.833436 0.500823 +vt 0.891028 0.725398 +vt 0.672547 0.500827 +vt 0.752235 0.729690 +vt 0.667246 0.727168 +vt 0.891033 0.506802 +vt 0.752238 0.507120 +vt 0.071993 0.783837 +vt 0.969610 0.493832 +vt 0.987699 0.731670 +vt 0.641343 0.509140 +vt 0.689355 0.726560 +vt 0.969610 0.714382 +vt 0.122436 0.783837 +vt 0.641344 0.743247 +vt 0.833436 0.731382 +vt 0.845328 0.486829 +vt 0.814491 0.722643 +vt 0.825052 0.503733 +vt 0.016195 0.832047 +vt 0.634466 0.494220 +vt 0.825052 0.761267 +vt 0.826977 0.527024 +vt 0.022424 0.783234 +vt 0.035852 0.889154 +vt 0.043016 0.971597 +vt 0.706398 0.505224 +vt 0.072863 0.808180 +vt 0.028940 0.807392 +vt 0.010039 0.882150 +vt 0.137154 0.974703 +vt 0.631023 0.892124 +vt 0.649326 0.890699 +vt 0.121379 0.984023 +vt 0.648470 0.892315 +vt 0.072864 0.783142 +vt 0.043889 0.943476 +vt 0.078385 0.805896 +vt 0.075977 0.941215 +vt 0.613560 0.946909 +vt 0.672547 0.731385 +vt 0.701510 0.486829 +vt 0.669481 0.490576 +vt 0.072863 0.646796 +vt 0.648470 0.506013 +vt 0.080915 0.841605 +vt 0.968560 0.503835 +vt 0.102906 0.865583 +vt 0.634467 0.887149 +vt 0.987699 0.527021 +vt 0.968560 0.761369 +vt 0.690090 0.495972 +vt 0.701510 0.702461 +vt 0.603150 0.865583 +vt 0.014109 0.884028 +vt 0.706395 0.729929 +vt 0.816556 0.714481 +vt 0.023239 0.646888 +vt 0.040534 0.495932 +vt 0.081188 0.621686 +vt 0.007711 0.495744 +vt 0.041481 0.497122 +vt 0.080911 0.628820 +vt 0.003028 0.888966 +vt 0.041481 0.887645 +vt 0.060838 0.971173 +vt 0.631023 0.505822 +vt 0.649326 0.500176 +vt 0.081188 0.834572 +vt 0.805889 0.743046 +vt 0.122312 0.806766 +vt 0.988155 0.503653 +vt 0.115555 0.935422 +vt 0.904138 0.912557 +vt 0.988155 0.735605 +vt 0.813022 0.494763 +vt 0.890960 0.912565 +vt 0.735836 0.641861 +vt 0.693936 0.468644 +vt 0.027417 0.833361 +vt 0.420996 0.961603 +vt 0.032040 0.784613 +vt 0.284612 0.483847 +vt 0.656925 0.504187 +vt 0.681549 0.720168 +vt 0.066750 0.834450 +vt 0.299225 0.449509 +vt 0.999708 0.720167 +vt 0.989627 0.743247 +vt 0.121899 0.832034 +vt 0.693936 0.449159 +vt 0.420996 0.999935 +vt 0.008277 0.862094 +vt 0.082562 0.831201 +vt 0.741580 0.718717 +vt 0.678836 0.505353 +vt 0.815743 0.487362 +vt 0.741523 0.585977 +vt 0.678836 0.699564 +vt 0.553315 0.945729 +vt 0.982243 0.588758 +vt 0.460393 1.018433 +vt 0.949871 0.788878 +vt 0.982305 0.727355 +vt 0.668954 0.502598 +vt 0.949657 0.691167 +vt 0.979056 0.490574 +vt 0.078628 0.952623 +vt 0.035428 0.887064 +vt 0.812426 0.730862 +vt 0.971935 0.642457 +vt 0.805889 0.532195 +vt 0.173975 1.012235 +vt 0.908785 0.976444 +vt 0.726484 0.788878 +vt 0.984477 0.500479 +vt 0.894591 0.976453 +vt 0.737043 0.505375 +vt 0.726270 0.691167 +vt 0.987420 0.694407 +vt 0.999899 0.506981 +vt 0.968797 0.500648 +vt 0.989626 0.516135 +vt 0.652223 0.697892 +vt 0.656922 0.730164 +vt 0.681740 0.506981 +vt 0.985798 0.713641 +vt 0.053549 0.993732 +vt 0.043551 0.873068 +vt 0.522988 0.991572 +vt 0.062665 0.961706 +vt 0.169656 0.991799 +vt 0.060838 0.809705 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +s 1 +usemtl CabnetDoors +f 6312/12968/4470 6313/12972/4470 6314/12977/4470 6315/12981/4470 6316/12985/4470 6317/12991/4470 6318/12994/4470 6319/12997/4470 +f 6317/12990/4471 6316/12986/4471 6320/13001/4471 6321/13004/4471 +f 6322/13006/4472 6323/13010/4472 6324/13012/4472 6325/13013/4472 +f 6326/13017/4473 6327/13018/4473 6313/12973/4473 6312/12967/4473 +f 6327/13019/4474 6326/13016/4474 6328/13021/4474 6329/13022/4474 +f 6330/13024/4474 6331/13027/4474 6328/13021/4474 6326/13016/4474 +f 6330/13025/4473 6326/13017/4473 6312/12967/4473 6332/13029/4473 +f 6325/13014/4471 6317/12990/4471 6321/13004/4471 6322/13007/4471 +f 6332/13030/4470 6312/12968/4470 6319/12997/4470 6318/12994/4470 6317/12991/4470 6325/13015/4470 6324/13011/4470 6333/13033/4470 +f 6315/12982/4475 6316/12987/4475 6334/13036/4475 6335/13040/4475 +f 6325/13015/4470 6324/13011/4470 6318/12994/4470 6317/12991/4470 +f 6319/12998/4474 6312/12969/4474 6332/13031/4474 6333/13034/4474 +f 6317/12992/4476 6318/12995/4476 6336/13044/4476 6337/13046/4476 +f 6337/13046/4477 6336/13044/4477 6338/13048/4477 6339/13051/4477 +f 6340/13054/4477 6343/13062/4477 6342/13059/4477 6341/13057/4477 +f 6318/12996/4478 6315/12983/4478 6335/13041/4478 6336/13045/4478 +f 6312/12970/4479 6340/13054/4479 6341/13057/4479 6319/12999/4479 +f 6314/12978/4480 6345/13069/4480 6344/13065/4480 6313/12974/4480 +f 6319/13000/4481 6341/13058/4481 6345/13070/4481 6314/12979/4481 +f 6316/12988/4482 6317/12993/4482 6337/13047/4482 6334/13038/4482 +f 6313/12975/4483 6344/13066/4483 6340/13055/4483 6312/12971/4483 +f 6339/13052/4484 6338/13049/4484 6346/13074/4484 6347/13078/4484 +f 6348/13081/4485 6342/13060/4485 6343/13063/4485 6349/13083/4485 +f 6344/13067/4473 6351/13086/4473 6350/13084/4473 6349/13082/4473 +f 6336/13045/4473 6335/13041/4473 6346/13073/4473 6338/13050/4473 +f 6335/13042/4486 6334/13037/4486 6352/13090/4486 6353/13095/4486 +f 6344/13067/4473 6349/13082/4473 6343/13064/4473 6340/13056/4473 +f 6334/13038/4471 6337/13047/4471 6339/13053/4471 6347/13076/4471 +f 6341/13058/4471 6342/13061/4471 6348/13079/4471 6345/13070/4471 +f 6352/13091/4471 6354/13099/4471 6355/13102/4471 6356/13106/4471 +f 6351/13086/4473 6358/13113/4473 6357/13109/4473 6350/13084/4473 +f 6334/13039/4471 6347/13077/4471 6354/13100/4471 6352/13092/4471 +f 6347/13078/4487 6346/13074/4487 6359/13116/4487 6354/13101/4487 +f 6345/13071/4486 6360/13118/4486 6351/13087/4486 6344/13068/4486 +f 6348/13080/4471 6361/13122/4471 6360/13119/4488 6345/13072/4471 +f 6349/13083/4487 6350/13085/4487 6361/13123/4487 6348/13081/4487 +f 6346/13075/4473 6335/13043/4473 6353/13096/4473 6359/13117/4473 +f 6362/13124/4489 6356/13108/4489 6363/13128/4489 6364/13129/4489 +f 6365/13131/4490 6368/13139/4491 6367/13137/4492 6366/13134/4492 +f 6354/13101/4487 6359/13116/4487 6369/13141/4487 6355/13103/4487 +f 6351/13088/4473 6370/13144/4473 6366/13136/4473 6358/13114/4473 +f 6361/13122/4471 6372/13151/4471 6371/13147/4493 6360/13119/4488 +f 6359/13117/4473 6353/13096/4473 6373/13153/4473 6369/13142/4473 +f 6350/13085/4487 6357/13110/4487 6372/13150/4487 6361/13123/4487 +f 6356/13107/4494 6355/13104/4494 6374/13156/4494 6363/13127/4494 +f 6352/13093/4471 6356/13108/4471 6362/13124/4471 6375/13158/4471 +f 6376/13161/4495 6375/13159/4486 6362/13125/4486 6377/13164/4495 +f 6378/13167/4495 6365/13132/4495 6366/13135/4486 6370/13145/4486 +f 6376/13162/4495 6377/13165/4495 6365/13133/4495 6378/13168/4495 +f 6360/13120/4496 6378/13169/4496 6370/13146/4496 6351/13089/4496 +f 6366/13136/4497 6367/13138/4497 6379/13171/4497 6358/13114/4497 +f 6372/13151/4498 6381/13175/4498 6380/13172/4498 6371/13147/4498 +f 6353/13097/4499 6376/13163/4500 6378/13169/4501 6360/13120/4488 +f 6353/13097/4499 6352/13094/4502 6375/13160/4502 6376/13163/4500 +f 6382/13179/4503 6383/13183/4503 6384/13187/4504 6385/13191/4505 +f 6386/13195/4506 6387/13198/4507 6388/13201/4508 6389/13204/4506 +f 6369/13142/4509 6373/13153/4510 6387/13199/4511 6386/13196/4509 +f 6355/13105/4512 6369/13143/4512 6386/13197/4512 6374/13157/4512 +f 6377/13165/4513 6390/13208/4514 6368/13140/4491 6365/13133/4490 +f 6371/13148/4493 6380/13173/4515 6387/13200/4511 6373/13154/4510 +f 6358/13115/4516 6379/13170/4516 6391/13212/4516 6357/13111/4516 +f 6357/13112/4517 6391/13210/4517 6381/13176/4517 6372/13152/4517 +f 6377/13166/4513 6362/13126/4518 6364/13130/4518 6390/13209/4514 +f 6380/13173/4519 6392/13213/4520 6388/13202/4508 6387/13200/4507 +f 6393/13216/4521 6394/13220/4522 6395/13224/4523 6389/13205/4523 +f 6363/13127/4524 6374/13156/4524 6395/13225/4524 6383/13184/4524 +f 6384/13188/4525 6383/13185/4526 6395/13226/4526 6394/13221/4527 +f 6364/13129/4528 6363/13128/4528 6383/13186/4528 6382/13180/4528 +f 6385/13192/4529 6396/13228/4530 6397/13231/4531 6382/13181/4532 +f 6381/13177/4533 6393/13217/4534 6392/13214/4520 6380/13174/4533 +f 6368/13139/4535 6396/13229/4530 6385/13193/4529 6367/13137/4535 +f 6391/13211/4536 6394/13222/4522 6393/13218/4521 6381/13178/4536 +f 6379/13170/4537 6384/13189/4525 6394/13223/4527 6391/13212/4537 +f 6367/13138/4538 6385/13194/4505 6384/13190/4504 6379/13171/4538 +f 6390/13208/4539 6397/13232/4531 6396/13230/4530 6368/13140/4540 +f 6393/13219/4534 6389/13206/4541 6388/13203/4508 6392/13215/4520 +f 6374/13157/4542 6386/13197/4542 6389/13207/4542 6395/13227/4542 +f 6390/13209/4539 6364/13130/4543 6382/13182/4543 6397/13233/4531 +f 6329/13022/4474 6328/13021/4474 6398/13234/4474 6399/13235/4474 +f 6321/13005/4474 6320/13002/4474 6399/13235/4474 6398/13234/4474 +f 6398/13234/4474 6328/13021/4474 6331/13027/4474 6323/13009/4474 +f 6323/13009/4474 6322/13008/4474 6321/13005/4474 6398/13234/4474 +f 6327/13020/4544 6329/13023/4544 6314/12980/4544 6313/12976/4544 +f 6315/12984/4544 6399/13236/4544 6320/13003/4544 6316/12989/4544 +f 6314/12980/4544 6329/13023/4544 6399/13236/4544 6315/12984/4544 +f 6333/13035/4472 6331/13028/4472 6330/13026/4472 6332/13032/4472 +f 6324/13012/4472 6323/13010/4472 6331/13028/4472 6333/13035/4472 +f 6373/13155/4510 6353/13098/4499 6360/13121/4488 6371/13149/4493 +f 6400/13237/4545 6401/13238/4545 6402/13239/4546 6403/13241/4547 +f 6404/13242/4548 6403/13240/4548 6405/13245/4549 6406/13247/4550 +f 6407/13249/4551 6408/13250/4551 6409/13251/4552 6410/13253/4553 +f 6409/13251/4554 6411/13254/4554 6412/13256/4554 6413/13258/4554 +f 6414/13260/4555 6415/13261/4555 6416/13262/4555 6417/13264/4555 +f 6418/13266/4556 6401/13238/4556 6419/13267/4556 6411/13255/4556 +f 6408/13250/4557 6418/13265/4557 6411/13254/4557 6409/13251/4557 +f 6420/13268/4558 6421/13269/4558 6418/13265/4557 6408/13250/4557 +f 6421/13270/4559 6402/13239/4559 6401/13238/4556 6418/13266/4556 +f 6422/13271/4560 6414/13259/4560 6417/13263/4560 6423/13272/4560 +f 6404/13243/4560 6424/13275/4560 6414/13259/4560 6422/13271/4560 +f 6424/13274/4555 6425/13276/4555 6415/13261/4555 6414/13260/4555 +f 6416/13262/4561 6410/13252/4561 6426/13278/4561 6427/13279/4561 +f 6411/13255/4562 6419/13267/4562 6428/13280/4562 6412/13257/4562 +f 6423/13272/4563 6417/13263/4563 6429/13282/4563 6430/13284/4563 +f 6415/13261/4564 6407/13248/4564 6410/13252/4564 6416/13262/4564 +f 6425/13276/4564 6431/13286/4564 6407/13248/4564 6415/13261/4564 +f 6431/13285/4565 6420/13268/4565 6408/13250/4551 6407/13249/4551 +f 6421/13269/4558 6420/13268/4558 6432/13287/4566 6433/13289/4566 +f 6425/13276/4567 6424/13274/4567 6434/13290/4567 6435/13292/4567 +f 6420/13268/4565 6431/13285/4565 6436/13293/4568 6432/13287/4569 +f 6437/13295/4545 6419/13267/4545 6401/13238/4545 6400/13237/4545 +f 6434/13291/4570 6406/13246/4570 6438/13298/4570 6439/13300/4570 +f 6436/13294/4571 6435/13292/4571 6440/13301/4571 6441/13303/4571 +f 6435/13292/4572 6434/13290/4572 6439/13299/4572 6440/13301/4572 +f 6432/13287/4569 6436/13293/4568 6441/13304/4573 6442/13305/4574 +f 6402/13239/4559 6421/13270/4559 6433/13288/4575 6443/13306/4575 +f 6431/13286/4576 6425/13276/4576 6435/13292/4576 6436/13294/4576 +f 6403/13241/4547 6402/13239/4546 6443/13306/4577 6405/13244/4577 +f 6424/13275/4578 6404/13243/4578 6406/13246/4578 6434/13291/4578 +f 6442/13305/4574 6441/13304/4573 6444/13307/4579 6445/13308/4580 +f 6438/13298/4581 6446/13309/4582 6447/13312/4583 6448/13313/4584 +f 6449/13314/4585 6442/13305/4585 6445/13308/4585 6450/13316/4585 +f 6446/13309/4586 6451/13319/4586 6452/13321/4586 6447/13312/4586 +f 6443/13306/4587 6433/13288/4587 6449/13315/4587 6451/13320/4587 +f 6405/13244/4588 6443/13306/4588 6451/13320/4588 6446/13310/4588 +f 6433/13289/4589 6432/13287/4589 6442/13305/4589 6449/13314/4589 +f 6406/13247/4550 6405/13245/4549 6446/13311/4582 6438/13297/4581 +f 6448/13313/4584 6447/13312/4583 6453/13325/4590 6454/13326/4591 +f 6450/13316/4592 6445/13308/4592 6455/13327/4592 6456/13329/4592 +f 6447/13312/4593 6452/13321/4593 6457/13330/4593 6453/13325/4593 +f 6452/13322/4594 6450/13317/4594 6456/13328/4594 6457/13331/4594 +f 6440/13301/4595 6439/13299/4595 6458/13332/4595 6459/13335/4595 +f 6441/13304/4596 6440/13302/4596 6459/13337/4596 6444/13307/4596 +f 6439/13300/4597 6438/13298/4597 6448/13313/4597 6458/13334/4597 +f 6451/13320/4598 6449/13315/4598 6450/13318/4598 6452/13323/4598 +f 6457/13331/4599 6456/13328/4599 6460/13339/4599 6461/13340/4599 +f 6462/13342/4600 6454/13326/4600 6463/13343/4600 6464/13344/4600 +f 6465/13346/4601 6466/13348/4601 6467/13350/4601 6468/13352/4601 +f 6466/13348/4602 6462/13341/4602 6464/13345/4602 6467/13350/4602 +f 6445/13308/4580 6444/13307/4579 6465/13347/4603 6455/13327/4604 +f 6459/13336/4605 6458/13333/4605 6462/13341/4605 6466/13348/4605 +f 6444/13307/4606 6459/13337/4606 6466/13349/4606 6465/13347/4606 +f 6458/13334/4607 6448/13313/4607 6454/13326/4607 6462/13342/4607 +f 6469/13353/4608 6470/13355/4608 6471/13357/4609 6472/13358/4609 +f 6460/13338/4610 6473/13361/4610 6474/13362/4610 6475/13364/4610 +f 6476/13367/4611 6477/13369/4611 6478/13371/4611 6479/13372/4611 +f 6464/13344/4612 6463/13343/4612 6480/13375/4612 6481/13377/4612 +f 6453/13324/4613 6457/13331/4613 6461/13340/4613 6482/13381/4613 +f 6456/13329/4614 6455/13327/4614 6473/13361/4614 6460/13338/4614 +f 6454/13326/4591 6453/13325/4590 6482/13380/4615 6463/13343/4616 +f 6455/13327/4604 6465/13347/4603 6468/13351/4617 6473/13361/4618 +f 6413/13258/4619 6412/13256/4619 6483/13382/4619 6484/13384/4619 +f 6428/13280/4620 6485/13385/4620 6486/13387/4620 6487/13391/4620 +f 6429/13281/4621 6427/13279/4621 6488/13392/4621 6489/13394/4621 +f 6485/13386/4622 6430/13283/4623 6490/13396/4624 6486/13388/4625 +f 6419/13267/4626 6437/13295/4626 6485/13385/4626 6428/13280/4626 +f 6410/13253/4553 6409/13251/4552 6413/13258/4627 6426/13277/4628 +f 6417/13264/4629 6416/13262/4629 6427/13279/4629 6429/13281/4629 +f 6437/13296/4630 6423/13273/4630 6430/13283/4623 6485/13386/4622 +f 6487/13390/4631 6486/13389/4631 6491/13398/4631 6492/13401/4631 +f 6489/13394/4632 6488/13392/4632 6493/13402/4632 6494/13405/4632 +f 6486/13389/4625 6490/13397/4624 6495/13408/4633 6491/13398/4634 +f 6490/13397/4635 6489/13395/4635 6494/13406/4635 6495/13408/4635 +f 6426/13277/4628 6413/13258/4627 6484/13384/4636 6496/13410/4637 +f 6412/13257/4638 6428/13280/4638 6487/13391/4638 6483/13383/4638 +f 6427/13279/4639 6426/13278/4639 6496/13409/4639 6488/13392/4639 +f 6430/13284/4640 6429/13282/4640 6489/13395/4640 6490/13397/4640 +f 6495/13408/4641 6494/13406/4641 6497/13411/4641 6498/13413/4641 +f 6493/13403/4642 6499/13414/4642 6500/13415/4642 6501/13417/4642 +f 6502/13419/4643 6492/13399/4643 6503/13422/4643 6504/13424/4643 +f 6499/13414/4644 6505/13426/4645 6506/13427/4646 6500/13415/4647 +f 6484/13384/4648 6483/13382/4648 6502/13421/4648 6505/13426/4648 +f 6496/13410/4637 6484/13384/4636 6505/13426/4645 6499/13414/4644 +f 6483/13383/4649 6487/13391/4649 6492/13400/4649 6502/13420/4649 +f 6488/13393/4650 6496/13410/4650 6499/13414/4650 6493/13403/4650 +f 6504/13424/4651 6503/13422/4651 6477/13369/4651 6476/13367/4651 +f 6500/13415/4647 6506/13427/4646 6507/13428/4652 6508/13430/4652 +f 6506/13427/4653 6504/13425/4653 6476/13368/4654 6507/13428/4654 +f 6503/13422/4655 6509/13431/4655 6469/13354/4656 6477/13369/4657 +f 6491/13398/4634 6495/13408/4633 6498/13413/4658 6509/13432/4659 +f 6494/13407/4660 6493/13404/4660 6501/13418/4660 6497/13412/4660 +f 6492/13401/4661 6491/13398/4661 6509/13432/4661 6503/13423/4661 +f 6505/13426/4662 6502/13421/4662 6504/13425/4662 6506/13427/4662 +f 6510/13433/4663 6511/13435/4663 6512/13436/4663 6513/13438/4663 +f 6463/13343/4616 6482/13380/4615 6514/13441/4664 6480/13375/4664 +f 6511/13435/4665 6508/13429/4665 6515/13444/4666 6512/13436/4666 +f 6473/13361/4618 6468/13351/4617 6516/13447/4667 6474/13362/4667 +f 6501/13418/4668 6500/13416/4668 6508/13429/4665 6511/13435/4665 +f 6498/13413/4669 6497/13411/4669 6510/13434/4670 6470/13355/4671 +f 6509/13432/4659 6498/13413/4658 6470/13355/4608 6469/13353/4608 +f 6497/13412/4672 6501/13418/4672 6511/13435/4672 6510/13433/4672 +f 6517/13450/4673 6475/13365/4673 6474/13363/4673 6516/13448/4673 +f 6481/13378/4673 6517/13450/4673 6516/13448/4673 6518/13451/4673 +f 6480/13376/4674 6514/13442/4673 6517/13450/4673 6481/13378/4673 +f 6514/13442/4673 6519/13453/4673 6475/13365/4673 6517/13450/4673 +f 6520/13455/4675 6479/13373/4675 6478/13370/4676 6472/13359/4677 +f 6513/13439/4675 6520/13455/4675 6472/13359/4677 6471/13356/4677 +f 6512/13437/4675 6515/13445/4675 6520/13455/4675 6513/13439/4675 +f 6515/13445/4675 6521/13456/4675 6479/13373/4675 6520/13455/4675 +f 6468/13352/4678 6467/13350/4678 6518/13452/4678 6516/13449/4678 +f 6508/13430/4652 6507/13428/4652 6521/13457/4679 6515/13446/4679 +f 6482/13381/4680 6461/13340/4680 6519/13454/4680 6514/13443/4680 +f 6470/13355/4671 6510/13434/4670 6513/13440/4681 6471/13357/4681 +f 6467/13350/4682 6464/13345/4682 6481/13379/4682 6518/13452/4682 +f 6507/13428/4654 6476/13368/4654 6479/13374/4683 6521/13457/4683 +f 6461/13340/4684 6460/13339/4684 6475/13366/4684 6519/13454/4684 +f 6477/13369/4657 6469/13354/4656 6472/13360/4685 6478/13371/4685 +f 6522/13459/4545 6523/13460/4545 6524/13461/4546 6525/13463/4547 +f 6526/13464/4686 6525/13462/4686 6527/13466/4687 6528/13467/4688 +f 6529/13468/4561 6530/13470/4561 6531/13473/4561 6532/13475/4561 +f 6533/13477/4555 6534/13478/4555 6529/13469/4555 6535/13481/4555 +f 6536/13483/4556 6523/13460/4556 6537/13484/4556 6538/13485/4556 +f 6539/13487/4557 6536/13482/4557 6538/13486/4557 6540/13488/4557 +f 6541/13489/4557 6542/13490/4557 6536/13482/4557 6539/13487/4557 +f 6542/13491/4559 6524/13461/4559 6523/13460/4556 6536/13483/4556 +f 6543/13492/4560 6533/13476/4560 6535/13480/4560 6544/13493/4560 +f 6526/13464/4560 6545/13495/4560 6533/13476/4560 6543/13492/4560 +f 6545/13494/4555 6546/13496/4555 6534/13478/4555 6533/13477/4555 +f 6538/13485/4562 6537/13484/4562 6547/13498/4562 6548/13500/4562 +f 6544/13493/4689 6535/13480/4689 6549/13501/4689 6550/13503/4689 +f 6551/13504/4690 6544/13493/4691 6550/13503/4692 6552/13506/4693 +f 6534/13479/4564 6553/13508/4564 6530/13470/4564 6529/13468/4564 +f 6546/13497/4564 6554/13510/4564 6553/13508/4564 6534/13479/4564 +f 6542/13490/4566 6541/13489/4566 6555/13511/4566 6556/13513/4566 +f 6546/13496/4567 6545/13494/4567 6557/13514/4567 6558/13516/4567 +f 6541/13489/4694 6554/13509/4694 6559/13519/4568 6555/13511/4569 +f 6543/13492/4695 6522/13458/4695 6525/13462/4686 6526/13464/4686 +f 6544/13493/4691 6551/13504/4690 6522/13458/4695 6543/13492/4695 +f 6551/13505/4545 6537/13484/4545 6523/13460/4545 6522/13459/4545 +f 6560/13520/4587 6556/13512/4587 6561/13522/4587 6562/13524/4587 +f 6557/13515/4696 6528/13467/4696 6563/13526/4696 6564/13528/4696 +f 6559/13518/4571 6558/13517/4571 6565/13529/4571 6566/13532/4571 +f 6558/13516/4572 6557/13514/4572 6564/13527/4572 6565/13531/4572 +f 6524/13461/4559 6542/13491/4559 6556/13512/4575 6560/13520/4575 +f 6554/13510/4576 6546/13497/4576 6558/13517/4576 6559/13518/4576 +f 6525/13463/4547 6524/13461/4546 6560/13520/4577 6527/13465/4577 +f 6545/13495/4697 6526/13464/4697 6528/13467/4697 6557/13515/4697 +f 6566/13533/4596 6565/13530/4596 6567/13537/4596 6568/13538/4596 +f 6565/13531/4595 6564/13527/4595 6569/13539/4595 6567/13535/4595 +f 6570/13543/4574 6566/13533/4573 6568/13538/4579 6571/13544/4580 +f 6563/13526/4698 6572/13546/4699 6573/13547/4700 6574/13548/4701 +f 6527/13465/4588 6560/13520/4588 6562/13524/4588 6572/13545/4588 +f 6556/13513/4589 6555/13511/4589 6570/13542/4589 6561/13521/4589 +f 6528/13467/4688 6527/13466/4687 6572/13546/4699 6563/13526/4698 +f 6555/13511/4569 6559/13519/4568 6566/13534/4573 6570/13542/4574 +f 6574/13548/4701 6573/13547/4700 6575/13550/4702 6576/13551/4703 +f 6577/13554/4592 6571/13544/4592 6578/13555/4592 6579/13556/4592 +f 6573/13547/4593 6580/13560/4593 6581/13561/4593 6575/13550/4593 +f 6580/13558/4594 6577/13552/4594 6579/13557/4594 6581/13562/4594 +f 6564/13528/4704 6563/13526/4704 6574/13548/4704 6569/13541/4704 +f 6562/13524/4598 6561/13522/4598 6577/13553/4598 6580/13559/4598 +f 6572/13546/4586 6562/13525/4586 6580/13560/4586 6573/13547/4586 +f 6561/13523/4585 6570/13543/4585 6571/13544/4585 6577/13554/4585 +f 6579/13556/4705 6578/13555/4705 6582/13563/4705 6583/13564/4705 +f 6575/13549/4613 6581/13562/4613 6584/13566/4613 6585/13568/4613 +f 6581/13562/4599 6579/13557/4599 6583/13565/4599 6584/13566/4599 +f 6586/13569/4706 6576/13551/4706 6587/13571/4706 6588/13572/4706 +f 6571/13544/4580 6568/13538/4579 6589/13574/4707 6578/13555/4708 +f 6567/13536/4605 6569/13540/4605 6586/13570/4605 6590/13577/4605 +f 6568/13538/4606 6567/13537/4606 6590/13576/4606 6589/13574/4606 +f 6569/13541/4607 6574/13548/4607 6576/13551/4607 6586/13569/4607 +f 6591/13578/4709 6592/13580/4709 6593/13582/4609 6594/13583/4609 +f 6583/13564/4710 6582/13563/4710 6595/13586/4710 6596/13588/4710 +f 6597/13592/4611 6598/13594/4611 6599/13596/4611 6600/13597/4611 +f 6588/13572/4612 6587/13571/4612 6601/13601/4612 6602/13603/4612 +f 6576/13551/4703 6575/13550/4702 6585/13567/4711 6587/13571/4712 +f 6578/13555/4708 6589/13574/4707 6603/13607/4713 6582/13563/4618 +f 6590/13577/4602 6586/13570/4602 6588/13573/4602 6604/13609/4602 +f 6589/13575/4601 6590/13577/4601 6604/13609/4601 6603/13608/4601 +f 6547/13498/4620 6552/13507/4620 6605/13610/4620 6606/13612/4620 +f 6549/13502/4621 6532/13474/4621 6607/13616/4621 6608/13618/4621 +f 6552/13506/4693 6550/13503/4692 6609/13619/4714 6605/13611/4715 +f 6550/13503/4716 6549/13501/4716 6608/13617/4716 6609/13619/4716 +f 6540/13488/4554 6538/13486/4554 6548/13499/4554 6610/13620/4554 +f 6537/13484/4626 6551/13505/4626 6552/13507/4626 6547/13498/4626 +f 6530/13471/4717 6540/13488/4717 6610/13620/4627 6531/13472/4628 +f 6535/13481/4629 6529/13469/4629 6532/13474/4629 6549/13502/4629 +f 6605/13611/4715 6609/13619/4714 6611/13621/4718 6612/13622/4719 +f 6609/13619/4720 6608/13617/4720 6613/13624/4720 6611/13621/4720 +f 6607/13614/4650 6614/13628/4650 6615/13629/4650 6616/13630/4650 +f 6617/13634/4649 6606/13612/4649 6618/13636/4649 6619/13639/4649 +f 6610/13620/4619 6548/13499/4619 6617/13633/4619 6620/13642/4619 +f 6531/13472/4628 6610/13620/4627 6620/13642/4636 6614/13626/4637 +f 6548/13500/4638 6547/13498/4638 6606/13612/4638 6617/13634/4638 +f 6532/13475/4639 6531/13473/4639 6614/13627/4639 6607/13615/4639 +f 6616/13630/4642 6615/13629/4642 6621/13644/4642 6622/13646/4642 +f 6619/13640/4643 6618/13637/4643 6623/13649/4643 6624/13651/4643 +f 6615/13629/4644 6625/13652/4645 6626/13653/4646 6621/13644/4647 +f 6625/13652/4662 6619/13641/4662 6624/13650/4662 6626/13653/4662 +f 6608/13618/4632 6607/13616/4632 6616/13631/4632 6613/13623/4632 +f 6606/13613/4631 6605/13611/4631 6612/13622/4631 6618/13638/4631 +f 6620/13643/4648 6617/13635/4648 6619/13641/4648 6625/13652/4648 +f 6614/13628/4637 6620/13643/4636 6625/13652/4645 6615/13629/4644 +f 6626/13653/4653 6624/13650/4653 6597/13593/4654 6627/13654/4654 +f 6623/13649/4655 6628/13655/4655 6591/13579/4656 6598/13594/4657 +f 6629/13657/4721 6622/13647/4721 6630/13659/4721 6631/13660/4721 +f 6628/13656/4722 6632/13662/4723 6592/13580/4709 6591/13578/4709 +f 6611/13621/4724 6613/13624/4724 6629/13658/4724 6632/13662/4724 +f 6612/13622/4719 6611/13621/4718 6632/13662/4723 6628/13656/4722 +f 6613/13625/4725 6616/13632/4725 6622/13647/4725 6629/13657/4725 +f 6618/13638/4661 6612/13622/4661 6628/13656/4661 6623/13648/4661 +f 6631/13660/4726 6630/13659/4726 6633/13663/4726 6634/13665/4726 +f 6587/13571/4712 6585/13567/4711 6635/13669/4664 6601/13601/4664 +f 6582/13563/4618 6603/13607/4713 6636/13672/4667 6595/13586/4667 +f 6630/13659/4665 6637/13675/4665 6638/13677/4666 6633/13663/4666 +f 6621/13644/4647 6626/13653/4646 6627/13654/4652 6637/13676/4652 +f 6624/13651/4651 6623/13649/4651 6598/13594/4651 6597/13592/4651 +f 6622/13647/4668 6621/13645/4668 6637/13675/4665 6630/13659/4665 +f 6632/13662/4727 6629/13658/4727 6631/13661/4728 6592/13580/4729 +f 6639/13680/4673 6596/13589/4673 6595/13587/4673 6636/13673/4673 +f 6602/13604/4673 6639/13680/4673 6636/13673/4673 6640/13682/4673 +f 6601/13602/4674 6635/13670/4673 6639/13681/4673 6602/13605/4673 +f 6635/13670/4673 6641/13684/4673 6596/13590/4673 6639/13681/4673 +f 6642/13686/4675 6600/13598/4675 6599/13595/4676 6594/13584/4677 +f 6634/13666/4675 6642/13686/4675 6594/13584/4677 6593/13581/4677 +f 6633/13664/4675 6638/13678/4675 6642/13687/4675 6634/13667/4675 +f 6638/13678/4675 6643/13688/4675 6600/13599/4675 6642/13687/4675 +f 6603/13608/4678 6604/13609/4678 6640/13683/4678 6636/13674/4678 +f 6637/13676/4652 6627/13654/4652 6643/13689/4679 6638/13679/4679 +f 6585/13568/4680 6584/13566/4680 6641/13685/4680 6635/13671/4680 +f 6592/13580/4729 6631/13661/4728 6634/13668/4730 6593/13582/4730 +f 6604/13609/4682 6588/13573/4682 6602/13606/4682 6640/13683/4682 +f 6627/13654/4654 6597/13593/4654 6600/13600/4683 6643/13689/4683 +f 6584/13566/4684 6583/13565/4684 6596/13591/4684 6641/13685/4684 +f 6598/13594/4657 6591/13579/4656 6594/13585/4685 6599/13596/4685 +o Chair.017 +v 12.950883 0.415382 6.027799 +v 12.950883 0.429951 6.027799 +v 12.901274 0.429951 6.026818 +v 12.499402 0.429951 6.018873 +v 12.449794 0.429951 6.017892 +v 12.449794 0.415382 6.017892 +v 12.499402 0.415382 6.018873 +v 12.901274 0.415382 6.026818 +v 12.457397 0.429951 5.633335 +v 12.457397 0.415382 5.633335 +v 12.457397 0.400812 5.633335 +v 12.503007 0.400812 5.634237 +v 12.499402 0.400812 6.018873 +v 12.449794 0.400812 6.017892 +v 12.958487 0.415382 5.643242 +v 12.958487 0.429951 5.643242 +v 12.912876 0.415382 5.642340 +v 12.912876 0.429951 5.642340 +v 12.958487 0.400812 5.643242 +v 12.912876 0.400812 5.642340 +v 12.950883 0.400812 6.027799 +v 12.901274 0.400812 6.026818 +v 12.469801 0.432961 6.043380 +v 12.484748 0.432961 6.043676 +v 12.484838 0.421009 6.039180 +v 12.469891 0.421009 6.038884 +v 12.484588 0.426967 6.051803 +v 12.469641 0.426967 6.051508 +v 12.929910 0.419106 6.050039 +v 12.915176 0.419106 6.049747 +v 12.914927 0.425064 6.062371 +v 12.929660 0.425064 6.062662 +v 12.929818 0.434699 6.054675 +v 12.915085 0.434699 6.054383 +v 12.484465 0.431853 6.058044 +v 12.469517 0.431853 6.057749 +v 12.914801 0.433592 6.068752 +v 12.929534 0.433592 6.069043 +v 12.929292 0.592772 6.081306 +v 12.929575 0.593879 6.066938 +v 12.469559 0.592141 6.055644 +v 12.484506 0.592141 6.055940 +v 12.469275 0.591033 6.070012 +v 12.468911 0.829840 6.088411 +v 12.469195 0.830948 6.074042 +v 12.928927 0.831579 6.099705 +v 12.929212 0.832686 6.085337 +v 12.484221 0.591033 6.070308 +v 12.914843 0.593879 6.066647 +v 12.914558 0.592772 6.081015 +v 12.469397 0.830737 6.063832 +v 12.492185 0.870951 6.077775 +v 12.492364 0.870348 6.068696 +v 12.914680 0.832325 6.074823 +v 12.929414 0.832325 6.075115 +v 12.906092 0.869634 6.078681 +v 12.889283 0.864490 6.077951 +v 12.483858 0.829840 6.088706 +v 12.929755 0.608202 6.057848 +v 12.914478 0.832686 6.085045 +v 12.914194 0.831579 6.099414 +v 12.484142 0.830948 6.074338 +v 12.491929 0.869953 6.090715 +v 12.469738 0.606614 6.046565 +v 12.484685 0.606614 6.046860 +v 12.484344 0.830737 6.064128 +v 12.915022 0.608202 6.057557 +v 12.905912 0.870373 6.087770 +v 12.889103 0.865229 6.087041 +v 12.888847 0.864232 6.099982 +v 12.565288 0.913073 6.073102 +v 12.565593 0.914244 6.081291 +v 12.832427 0.911897 6.089479 +v 12.832947 0.911148 6.081339 +v 12.510125 0.867524 6.090888 +v 12.510381 0.868521 6.077947 +v 12.575274 0.902898 6.080607 +v 12.574999 0.901824 6.094547 +v 12.510560 0.867919 6.068867 +v 12.905656 0.869376 6.100711 +v 12.822903 0.900855 6.088440 +v 12.822627 0.899781 6.102378 +v 12.832151 0.910823 6.103418 +v 12.565317 0.913170 6.095230 +v 12.825078 0.901346 6.080428 +v 12.574968 0.901727 6.072419 +v 12.503007 0.415382 5.634237 +v 12.503007 0.429951 5.634237 +v 12.451413 0.438060 5.826218 +v 12.445574 0.443651 5.826102 +v 12.442983 0.443651 5.957161 +v 12.448822 0.438060 5.957277 +v 12.448646 0.429976 5.957273 +v 12.448182 0.437950 5.989667 +v 12.448056 0.430300 5.987051 +v 12.431725 0.429903 5.825828 +v 12.431900 0.437987 5.825832 +v 12.434491 0.437987 5.694773 +v 12.434316 0.429903 5.694770 +v 12.440083 0.443828 5.694884 +v 12.440713 0.439408 5.662988 +v 12.435076 0.434055 5.665214 +v 12.445646 0.424135 5.826104 +v 12.437564 0.424311 5.825943 +v 12.440155 0.424311 5.694885 +v 12.448237 0.424135 5.695045 +v 12.437491 0.443828 5.825942 +v 12.448165 0.443651 5.695044 +v 12.429309 0.437987 5.956891 +v 12.434900 0.443828 5.957002 +v 12.451237 0.429976 5.826214 +v 12.453828 0.429976 5.695156 +v 12.443055 0.424135 5.957163 +v 12.434973 0.424311 5.957003 +v 12.434835 0.426646 5.668444 +v 12.440632 0.421521 5.670796 +v 12.448793 0.439247 5.663219 +v 12.448712 0.421360 5.671027 +v 12.454349 0.426713 5.668801 +v 12.429133 0.429903 5.956888 +v 12.428669 0.437881 5.989259 +v 12.434222 0.443408 5.991257 +v 12.442504 0.424773 5.985053 +v 12.434421 0.424940 5.984950 +v 12.428545 0.430231 5.986642 +v 12.454004 0.438060 5.695159 +v 12.447497 0.420977 6.015334 +v 12.441978 0.416357 6.011649 +v 12.433893 0.416497 6.011598 +v 12.427986 0.420919 6.014903 +v 12.428064 0.427313 6.019853 +v 12.442307 0.443241 5.991360 +v 12.427517 0.402967 6.038637 +v 12.427559 0.407418 6.045388 +v 12.447577 0.427371 6.020284 +v 12.447071 0.407458 6.045835 +v 12.447028 0.403008 6.039083 +v 12.433584 0.431932 6.023537 +v 12.433054 0.410634 6.050374 +v 12.441669 0.431793 6.023590 +v 12.441139 0.410537 6.050386 +v 12.446720 0.380352 6.063576 +v 12.446698 0.378323 6.055748 +v 12.427209 0.380334 6.063119 +v 12.432688 0.381800 6.068883 +v 12.440774 0.381756 6.068871 +v 12.441534 0.399792 6.034098 +v 12.433449 0.399889 6.034085 +v 12.432379 0.345795 6.084503 +v 12.440465 0.345756 6.084491 +v 12.441220 0.376856 6.049985 +v 12.446391 0.342751 6.071263 +v 12.440914 0.341467 6.065456 +v 12.427188 0.378304 6.055293 +v 12.433134 0.376901 6.049996 +v 12.432829 0.341506 6.065468 +v 12.426881 0.342735 6.070807 +v 12.455965 0.349401 5.595968 +v 12.455629 0.348454 5.603992 +v 12.456444 -0.002953 5.562895 +v 12.456778 -0.002007 5.554872 +v 12.426901 0.344511 6.078694 +v 12.425187 0.001491 6.165360 +v 12.430666 0.002774 6.171169 +v 12.442157 0.350077 5.589966 +v 12.450235 0.350056 5.590301 +v 12.451048 -0.001352 5.549204 +v 12.442969 -0.001331 5.548869 +v 12.444679 -0.000270 6.157929 +v 12.439200 -0.001553 6.152122 +v 12.446413 0.344527 6.079152 +v 12.441324 0.425574 5.632050 +v 12.435649 0.421603 5.636222 +v 12.454590 0.434122 5.665571 +v 12.455163 0.421652 5.636555 +v 12.449405 0.425454 5.632339 +v 12.441114 0.412305 5.646361 +v 12.449194 0.412185 5.646649 +v 12.454869 0.416156 5.642478 +v 12.455592 0.403231 5.614858 +v 12.449857 0.405075 5.609464 +v 12.441486 0.398698 5.627562 +v 12.449565 0.398640 5.627887 +v 12.455264 0.400566 5.622485 +v 12.435356 0.416106 5.642146 +v 12.449863 0.371230 5.612802 +v 12.455566 0.372479 5.607208 +v 12.435751 0.400542 5.622168 +v 12.436052 0.372464 5.606893 +v 12.441785 0.371267 5.612469 +v 12.441777 0.405133 5.609138 +v 12.450168 0.375406 5.593740 +v 12.442088 0.375443 5.593408 +v 12.436077 0.403207 5.614541 +v 12.436385 0.374194 5.599001 +v 12.436451 0.349392 5.595655 +v 12.436116 0.348446 5.603679 +v 12.455899 0.374209 5.599316 +v 12.449925 0.347770 5.609682 +v 12.441846 0.347791 5.609346 +v 12.442658 -0.003617 5.568249 +v 12.450738 -0.003637 5.568583 +v 12.444699 0.001507 6.165818 +v 12.436929 -0.002962 5.562582 +v 12.425167 -0.000286 6.157472 +v 12.434933 0.000611 6.161645 +v 12.431115 -0.001514 6.152134 +v 12.438751 0.002736 6.171156 +v 12.446853 -0.002484 5.558727 +v 12.437263 -0.002015 5.554559 +v 12.974854 0.438060 5.836566 +v 12.969014 0.443651 5.836451 +v 12.966423 0.443651 5.967510 +v 12.972263 0.438060 5.967626 +v 12.972087 0.429976 5.967622 +v 12.971622 0.437950 6.000016 +v 12.971498 0.430300 5.997399 +v 12.963595 0.424311 5.705234 +v 12.957756 0.429903 5.705119 +v 12.958277 0.426646 5.678793 +v 12.964072 0.421521 5.681145 +v 12.969088 0.424135 5.836452 +v 12.961004 0.424311 5.836292 +v 12.971678 0.424135 5.705394 +v 12.960932 0.443828 5.836291 +v 12.971605 0.443651 5.705392 +v 12.963523 0.443828 5.705233 +v 12.955340 0.437987 5.836181 +v 12.957932 0.437987 5.705122 +v 12.952749 0.437987 5.967240 +v 12.958341 0.443828 5.967350 +v 12.974678 0.429976 5.836563 +v 12.977269 0.429976 5.705504 +v 12.966496 0.424135 5.967512 +v 12.958414 0.424311 5.967352 +v 12.972235 0.439247 5.673568 +v 12.964153 0.439408 5.673337 +v 12.972153 0.421360 5.681376 +v 12.977790 0.426713 5.679150 +v 12.977446 0.438060 5.705508 +v 12.978030 0.434122 5.675920 +v 12.955165 0.429903 5.836177 +v 12.952574 0.429903 5.967237 +v 12.952109 0.437881 5.999608 +v 12.957664 0.443408 6.001606 +v 12.965944 0.424773 5.995401 +v 12.957861 0.424940 5.995298 +v 12.951985 0.430231 5.996991 +v 12.965747 0.443241 6.001709 +v 12.957026 0.431932 6.033886 +v 12.965110 0.431793 6.033938 +v 12.970939 0.420977 6.025683 +v 12.965419 0.416357 6.021999 +v 12.957335 0.416497 6.021946 +v 12.951427 0.420919 6.025252 +v 12.956890 0.399889 6.044434 +v 12.950957 0.402967 6.048985 +v 12.964975 0.399792 6.044446 +v 12.951505 0.427313 6.030201 +v 12.951000 0.407418 6.055737 +v 12.971017 0.427371 6.030632 +v 12.970512 0.407458 6.056183 +v 12.970469 0.403008 6.049432 +v 12.970161 0.380352 6.073925 +v 12.970140 0.378323 6.066097 +v 12.956494 0.410634 6.060722 +v 12.950649 0.380334 6.073468 +v 12.956129 0.381800 6.079232 +v 12.964580 0.410537 6.060735 +v 12.964214 0.381756 6.079220 +v 12.950341 0.344511 6.089044 +v 12.955820 0.345795 6.094851 +v 12.963905 0.345756 6.094839 +v 12.969853 0.344527 6.089501 +v 12.964661 0.376856 6.060334 +v 12.969833 0.342751 6.081612 +v 12.964355 0.341467 6.075805 +v 12.950628 0.378304 6.065641 +v 12.956575 0.376901 6.060345 +v 12.979406 0.349401 5.606318 +v 12.979072 0.348454 5.614341 +v 12.979884 -0.002953 5.573244 +v 12.980219 -0.002007 5.565220 +v 12.948628 0.001491 6.175709 +v 12.954106 0.002774 6.181518 +v 12.965597 0.350077 5.600315 +v 12.973676 0.350056 5.600650 +v 12.974488 -0.001352 5.559553 +v 12.966410 -0.001331 5.559218 +v 12.968120 -0.000270 6.168278 +v 12.962642 -0.001553 6.162470 +v 12.950321 0.342735 6.081155 +v 12.956269 0.341506 6.075817 +v 12.978603 0.421652 5.646904 +v 12.972845 0.425454 5.642688 +v 12.964555 0.412305 5.656710 +v 12.972635 0.412185 5.656998 +v 12.978311 0.416156 5.652827 +v 12.958516 0.434055 5.675563 +v 12.978706 0.400566 5.632833 +v 12.979033 0.403231 5.625206 +v 12.973006 0.398640 5.638236 +v 12.958797 0.416106 5.652495 +v 12.959191 0.400542 5.632517 +v 12.964927 0.398698 5.637910 +v 12.964766 0.425574 5.642399 +v 12.973297 0.405075 5.619813 +v 12.965219 0.405133 5.619486 +v 12.959089 0.421603 5.646571 +v 12.959494 0.372464 5.617242 +v 12.965225 0.371267 5.622818 +v 12.973608 0.375406 5.604088 +v 12.965529 0.375443 5.603756 +v 12.959518 0.403207 5.624890 +v 12.959826 0.374194 5.609350 +v 12.959891 0.349392 5.606005 +v 12.979340 0.374209 5.609664 +v 12.973305 0.371230 5.623150 +v 12.965287 0.347791 5.619695 +v 12.973366 0.347770 5.620029 +v 12.979008 0.372479 5.617557 +v 12.966100 -0.003617 5.578598 +v 12.974178 -0.003637 5.578933 +v 12.968140 0.001507 6.176167 +v 12.948608 -0.000286 6.167821 +v 12.959557 0.348446 5.614028 +v 12.960369 -0.002962 5.572930 +v 12.958374 0.000611 6.171994 +v 12.954556 -0.001514 6.162483 +v 12.962193 0.002736 6.181505 +v 12.970295 -0.002484 5.569076 +v 12.960704 -0.002015 5.564908 +vn -0.0198 -0.0000 0.9998 +vn -0.9998 -0.0000 -0.0198 +vn -0.0000 -1.0000 -0.0000 +vn 0.9998 -0.0000 0.0198 +vn 0.0198 -0.0000 -0.9998 +vn 0.0024 0.9929 -0.1191 +vn -0.0052 -0.9646 0.2636 +vn -0.0084 -0.9044 0.4267 +vn 0.8278 -0.0911 0.5536 +vn -0.0032 -0.9868 0.1622 +vn 0.0034 0.9852 -0.1714 +vn -0.8684 -0.0779 0.4897 +vn -0.7415 -0.1146 0.6611 +vn 0.7475 -0.0987 0.6569 +vn -0.0122 -0.7874 0.6163 +vn -0.0158 -0.5992 0.8005 +vn 0.0197 0.0768 -0.9968 +vn -0.0197 -0.0768 0.9968 +vn -0.9550 -0.2916 0.0545 +vn -0.8636 0.5027 -0.0383 +vn 0.0229 0.1047 -0.9942 +vn 0.0154 0.1119 -0.9936 +vn 0.0149 0.1062 -0.9942 +vn -0.5542 -0.0656 0.8298 +vn -0.8677 0.4967 0.0211 +vn 0.0221 0.0768 -0.9968 +vn 0.0167 -0.5359 -0.8441 +vn 0.8487 0.5287 -0.0133 +vn -0.7889 -0.6113 -0.0627 +vn 0.0115 -0.8531 -0.5216 +vn 0.0199 -0.5326 -0.8461 +vn 0.0231 -0.5337 -0.8454 +vn 0.0167 -0.5315 -0.8469 +vn 0.0115 0.9931 -0.1166 +vn 0.2468 0.9648 -0.0903 +vn 0.2720 0.9584 -0.0871 +vn 0.4692 -0.8811 -0.0586 +vn 0.4422 -0.8634 0.2428 +vn 0.1629 -0.7743 0.6115 +vn 0.8208 -0.5705 -0.0277 +vn 0.4116 -0.3669 0.8343 +vn 0.4626 -0.3997 0.7914 +vn -0.0175 -0.0465 0.9988 +vn 0.0228 0.1108 -0.9936 +vn 0.0237 0.1116 -0.9935 +vn -0.0245 -0.0794 0.9965 +vn 0.8508 0.5223 0.0571 +vn -0.0258 -0.0401 0.9989 +vn 0.0221 0.1101 -0.9937 +vn -0.0275 -0.0584 0.9979 +vn -0.2056 -0.7742 0.5986 +vn -0.0245 -0.0813 0.9964 +vn -0.0188 -0.0847 0.9962 +vn -0.0317 -0.0769 0.9965 +vn -0.5092 0.8588 0.0561 +vn 0.2564 0.9633 0.0793 +vn 0.0064 0.9970 0.0770 +vn 0.2574 0.9630 0.0793 +vn -0.5015 0.8610 -0.0848 +vn 0.0194 0.0845 -0.9962 +vn 0.0257 0.0831 -0.9962 +vn 0.0269 0.0796 -0.9965 +vn 0.0316 0.0778 -0.9965 +vn -0.4737 -0.8773 -0.0770 +vn -0.2471 -0.9658 -0.0793 +vn 0.0130 0.0880 -0.9960 +vn -0.0124 -0.0886 0.9960 +vn 0.4919 0.8673 0.0765 +vn 0.4908 0.8695 -0.0552 +vn 0.0191 0.0744 -0.9970 +vn 0.0276 0.0849 -0.9960 +vn -0.0058 -0.9970 -0.0769 +vn -0.0179 -0.0732 0.9972 +vn 0.0175 0.0723 -0.9972 +vn -0.0000 1.0000 -0.0000 +vn 0.6913 0.7224 0.0137 +vn 0.6866 0.7268 0.0164 +vn 0.6866 0.7269 0.0164 +vn 0.9995 -0.0225 0.0198 +vn 0.9996 -0.0215 0.0195 +vn 0.9997 -0.0204 0.0132 +vn -0.9996 0.0218 -0.0198 +vn -0.9995 0.0219 -0.0211 +vn -0.9995 0.0219 -0.0212 +vn -0.7120 0.6937 -0.1084 +vn -0.0218 -0.9998 -0.0004 +vn 0.0219 0.9998 0.0004 +vn -0.7222 0.6915 -0.0143 +vn -0.7177 0.6962 -0.0114 +vn -0.7178 0.6962 -0.0114 +vn 0.0215 0.9997 0.0065 +vn 0.7223 -0.6915 0.0143 +vn -0.6840 -0.7257 0.0735 +vn 0.0240 0.9903 -0.1367 +vn 0.7119 -0.6955 0.0974 +vn -0.6914 -0.7223 -0.0137 +vn -0.9996 0.0221 -0.0198 +vn -0.7133 0.7008 -0.0086 +vn -0.0216 -0.9995 0.0223 +vn -0.9997 0.0214 -0.0129 +vn -0.9996 0.0224 -0.0194 +vn 0.7160 -0.6683 -0.2018 +vn -0.6760 -0.6972 -0.2388 +vn -0.0152 -0.9532 -0.3021 +vn -0.9998 0.0183 -0.0063 +vn -0.9997 0.0214 -0.0120 +vn 0.0211 0.9997 0.0125 +vn -0.6807 -0.7326 -0.0013 +vn 0.6818 0.7313 0.0192 +vn 0.7115 -0.7022 0.0258 +vn -0.9999 0.0132 -0.0010 +vn -0.9998 0.0178 -0.0053 +vn 0.9998 -0.0175 0.0068 +vn 0.9997 -0.0205 0.0125 +vn 0.9998 -0.0172 0.0061 +vn 0.9999 -0.0124 0.0017 +vn -0.7217 0.5509 0.4191 +vn 0.6730 0.5748 0.4654 +vn 0.0146 0.9421 0.3351 +vn 0.6772 0.6901 0.2553 +vn -0.7177 0.6614 0.2177 +vn 0.9999 -0.0119 0.0014 +vn 1.0000 -0.0090 -0.0000 +vn -0.7248 0.3812 0.5739 +vn 0.6698 0.3978 0.6269 +vn 0.0046 0.5403 0.8415 +vn -0.0094 -0.8044 -0.5940 +vn -0.6718 -0.5868 -0.4521 +vn 0.7201 -0.5625 -0.4063 +vn 0.0089 0.7833 0.6216 +vn 0.0034 0.3980 0.9174 +vn 0.7296 -0.2790 -0.6244 +vn -0.6726 -0.2912 -0.6802 +vn -0.0034 -0.4005 -0.9163 +vn -1.0000 0.0092 0.0006 +vn -0.9999 0.0122 -0.0007 +vn -0.0049 -0.5692 -0.8222 +vn -0.6685 -0.4135 -0.6182 +vn 0.7232 -0.3964 -0.5655 +vn 0.9991 -0.0027 0.0415 +vn 0.9991 -0.0025 0.0414 +vn -0.7354 0.1694 0.6561 +vn 0.0414 0.1162 -0.9924 +vn 0.7354 -0.1695 -0.6562 +vn 0.6727 0.2899 0.6807 +vn -0.7296 0.2777 0.6249 +vn 1.0000 -0.0080 0.0005 +vn 1.0000 -0.0055 -0.0005 +vn -1.0000 0.0054 0.0014 +vn -1.0000 0.0070 0.0009 +vn -0.7018 0.6472 -0.2977 +vn 0.6819 0.6748 -0.2824 +vn -0.0276 -0.9356 0.3520 +vn 0.9995 -0.0216 0.0229 +vn 0.9994 -0.0207 0.0281 +vn 0.9993 -0.0182 0.0341 +vn 0.9994 -0.0205 0.0289 +vn 0.6847 0.7239 -0.0848 +vn -0.9995 0.0227 -0.0230 +vn -0.9994 0.0218 -0.0283 +vn -0.0235 -0.9932 0.1144 +vn 0.9995 -0.0222 0.0226 +vn 0.6751 0.5630 -0.4767 +vn -0.0312 -0.8103 0.5851 +vn 0.9992 -0.0112 0.0387 +vn 0.9992 -0.0173 0.0350 +vn 0.6792 -0.5801 0.4496 +vn -0.9994 0.0211 -0.0291 +vn -0.9992 0.0187 -0.0343 +vn 0.0290 0.9128 -0.4074 +vn -0.6777 -0.6896 0.2551 +vn 0.6990 -0.6617 0.2713 +vn 0.7006 -0.3366 0.6292 +vn -0.6942 -0.3512 0.6283 +vn 0.0387 0.4682 -0.8828 +vn -0.9992 0.0114 -0.0392 +vn -0.9992 0.0175 -0.0354 +vn -0.9992 0.0104 -0.0397 +vn -0.9991 0.0032 -0.0416 +vn -0.6879 0.5405 -0.4844 +vn 0.0335 0.7463 -0.6647 +vn -0.6647 -0.6033 0.4407 +vn 0.0413 0.1344 -0.9901 +vn -0.9991 0.0027 -0.0414 +vn -0.7080 0.0928 -0.7001 +vn -0.7083 0.0866 -0.7005 +vn 0.7049 0.0969 -0.7026 +vn 0.7053 0.0905 -0.7032 +vn 0.7053 0.0904 -0.7032 +vn 0.9992 -0.0030 0.0405 +vn 0.9992 -0.0100 0.0387 +vn -0.0385 -0.4821 0.8753 +vn 0.6951 0.3437 -0.6314 +vn -0.7013 0.3294 -0.6322 +vn -0.0415 -0.1162 0.9924 +vn 1.0000 -0.0053 -0.0014 +vn -0.7052 -0.0898 0.7033 +vn -0.7056 -0.0839 0.7037 +vn -1.0000 0.0053 0.0013 +vn -0.7049 -0.0956 0.7028 +vn 0.7081 -0.0916 0.7002 +vn 0.7084 -0.0860 0.7006 +vn 0.7084 -0.0859 0.7006 +vn -0.0415 -0.1319 0.9904 +vn -0.0043 -0.9756 0.2197 +vn -0.0044 -0.9756 0.2197 +vn 0.0023 -0.9931 -0.1171 +vn 0.0023 -0.9931 -0.1170 +vn 0.0024 -0.9931 -0.1171 +vn -0.6774 -0.1770 -0.7140 +vn -0.9991 0.0025 -0.0414 +vn 0.6774 0.1770 0.7140 +vn 0.7086 -0.0803 0.7010 +vn -0.0026 -0.2449 -0.9695 +vn -0.7086 0.0803 -0.7010 +vn 0.0026 0.2449 0.9695 +vn 0.7056 0.0839 -0.7037 +vn 0.9996 -0.0221 0.0198 +vn 0.9996 -0.0224 0.0194 +vn 0.9997 -0.0214 0.0129 +vn 0.7222 -0.6915 0.0143 +vn 0.7118 -0.6956 0.0974 +vn 0.9995 -0.0219 0.0211 +vn 0.9995 -0.0219 0.0212 +vn 0.9994 -0.0218 0.0283 +vn 0.9995 -0.0228 0.0232 +vn -0.9996 0.0224 -0.0198 +vn 0.9996 -0.0218 0.0198 +vn 0.7160 -0.6683 -0.2019 +vn 0.7115 -0.7023 0.0258 +vn 0.9998 -0.0183 0.0063 +vn 0.9997 -0.0214 0.0120 +vn 0.9998 -0.0178 0.0054 +vn 0.9999 -0.0131 0.0009 +vn 0.9999 -0.0123 0.0007 +vn 1.0000 -0.0092 -0.0006 +vn 0.7200 -0.5626 -0.4063 +vn 0.7295 -0.2790 -0.6245 +vn -1.0000 0.0091 0.0007 +vn -0.9999 0.0123 -0.0007 +vn 0.7232 -0.3964 -0.5656 +vn 0.9991 -0.0027 0.0414 +vn -0.7353 0.1695 0.6562 +vn 0.7353 -0.1695 -0.6562 +vn 1.0000 -0.0070 -0.0009 +vn 1.0000 -0.0057 -0.0019 +vn -1.0000 0.0055 0.0014 +vn 0.9992 -0.0187 0.0343 +vn 0.9994 -0.0210 0.0291 +vn 0.6989 -0.6618 0.2714 +vn -0.9995 0.0221 -0.0226 +vn 0.9992 -0.0114 0.0392 +vn 0.9992 -0.0176 0.0354 +vn 0.6792 -0.5802 0.4496 +vn -0.0413 -0.1319 0.9904 +vn 0.9992 -0.0104 0.0397 +vn 0.9991 -0.0032 0.0416 +vn 0.7005 -0.3367 0.6293 +vn -0.0414 -0.1162 0.9924 +vn 1.0000 -0.0053 -0.0013 +vn 0.7080 -0.0916 0.7003 +vn 0.7083 -0.0860 0.7007 +vn 0.7083 -0.0859 0.7007 +vn 0.7086 -0.0803 0.7011 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt 0.686647 0.000000 +vt 0.870176 0.996278 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.782584 0.965408 +vt 0.870573 0.970227 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.833010 0.965282 +vt 0.908785 0.026051 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.968598 0.070112 +vt 0.979071 0.026051 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.968598 0.371019 +vt 0.757324 0.262250 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.173427 0.241164 +vt 0.758439 0.080128 +vt -0.973130 0.033128 +vt -0.123087 0.241439 +vt 0.978437 0.000000 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt 0.737072 0.000128 +vt 0.908263 0.000000 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.409642 -0.009898 +vt 0.677629 0.482142 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.240570 0.058726 +vt 0.669677 0.481452 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.786789 0.246652 +vt 0.991724 0.699406 +vt 0.928489 0.277215 +vt 0.873308 0.505274 +vt 0.786789 0.155990 +vt 0.958960 0.029326 +vt 0.991724 0.483440 +vt 0.977373 0.702462 +vt -0.140978 0.246673 +vt 0.958492 0.010078 +vt -0.156145 0.246590 +vt 0.929566 0.080357 +vt -0.144664 0.252235 +vt 0.984385 0.731379 +vt 0.945934 0.020741 +vt -0.159831 0.252152 +vt 0.984385 0.500820 +vt 0.989649 0.087406 +vt 0.706860 0.007022 +vt 0.847263 0.989602 +vt 0.686599 0.714388 +vt 0.721837 0.007060 +vt 0.884682 0.006674 +vt 0.720919 0.017861 +vt 0.673632 0.527027 +vt 0.872079 0.017335 +vt 0.705942 0.017823 +vt 0.673632 0.731676 +vt 0.690157 0.523535 +vt 0.802894 0.958412 +vt 0.847659 0.963551 +vt 0.695298 0.714388 +vt 0.661237 0.495044 +vt 0.817871 0.958374 +vt 0.885205 0.032725 +vt 0.661237 0.722645 +vt 0.693293 0.503638 +vt 0.944329 0.029337 +vt 0.981154 0.731379 +vt 0.977373 0.486830 +vt 0.989649 0.263822 +vt 0.873305 0.723869 +vt 0.981154 0.500820 +vt 0.870573 0.032734 +vt 0.693293 0.761173 +vt 0.679412 0.527027 +vt 0.695298 0.493838 +vt 0.679412 0.731676 +vt 0.826600 0.493835 +vt 0.826977 0.731673 +vt 0.826600 0.714385 +vt 0.814491 0.495042 +vt 0.122435 0.638558 +vt 0.015922 0.839080 +vt 0.835047 0.699404 +vt 0.993361 0.510073 +vt 0.758428 0.504317 +vt 0.072861 0.638558 +vt 0.015474 0.619132 +vt 0.835047 0.483438 +vt 0.845328 0.702461 +vt 0.015197 0.626266 +vt 0.014109 0.491099 +vt 0.993356 0.728667 +vt 0.758425 0.722912 +vt 0.833436 0.500823 +vt 0.891028 0.725398 +vt 0.672547 0.500827 +vt 0.752235 0.729690 +vt 0.667246 0.727168 +vt 0.891033 0.506802 +vt 0.752238 0.507120 +vt 0.071993 0.783837 +vt 0.969610 0.493832 +vt 0.987699 0.731670 +vt 0.641343 0.509140 +vt 0.689355 0.726560 +vt 0.969610 0.714382 +vt 0.122436 0.783837 +vt 0.641344 0.743247 +vt 0.833436 0.731382 +vt 0.845328 0.486829 +vt 0.814491 0.722643 +vt 0.825052 0.503733 +vt 0.016195 0.832047 +vt 0.634466 0.494220 +vt 0.825052 0.761267 +vt 0.826977 0.527024 +vt 0.022424 0.783234 +vt 0.035852 0.889154 +vt 0.043016 0.971597 +vt 0.706398 0.505224 +vt 0.072863 0.808180 +vt 0.028940 0.807392 +vt 0.010039 0.882150 +vt 0.137154 0.974703 +vt 0.631023 0.892124 +vt 0.649326 0.890699 +vt 0.121379 0.984023 +vt 0.648470 0.892315 +vt 0.072864 0.783142 +vt 0.043889 0.943476 +vt 0.078385 0.805896 +vt 0.075977 0.941215 +vt 0.613560 0.946909 +vt 0.672547 0.731385 +vt 0.701510 0.486829 +vt 0.669481 0.490576 +vt 0.072863 0.646796 +vt 0.648470 0.506013 +vt 0.080915 0.841605 +vt 0.968560 0.503835 +vt 0.102906 0.865583 +vt 0.634467 0.887149 +vt 0.987699 0.527021 +vt 0.968560 0.761369 +vt 0.690090 0.495972 +vt 0.701510 0.702461 +vt 0.603150 0.865583 +vt 0.014109 0.884028 +vt 0.706395 0.729929 +vt 0.816556 0.714481 +vt 0.023239 0.646888 +vt 0.040534 0.495932 +vt 0.081188 0.621686 +vt 0.007711 0.495744 +vt 0.041481 0.497122 +vt 0.080911 0.628820 +vt 0.003028 0.888966 +vt 0.041481 0.887645 +vt 0.060838 0.971173 +vt 0.631023 0.505822 +vt 0.649326 0.500176 +vt 0.081188 0.834572 +vt 0.805889 0.743046 +vt 0.122312 0.806766 +vt 0.988155 0.503653 +vt 0.115555 0.935422 +vt 0.904138 0.912557 +vt 0.988155 0.735605 +vt 0.813022 0.494763 +vt 0.890960 0.912565 +vt 0.735836 0.641861 +vt 0.693936 0.468644 +vt 0.027417 0.833361 +vt 0.420996 0.961603 +vt 0.032040 0.784613 +vt 0.284612 0.483847 +vt 0.656925 0.504187 +vt 0.681549 0.720168 +vt 0.066750 0.834450 +vt 0.299225 0.449509 +vt 0.999708 0.720167 +vt 0.989627 0.743247 +vt 0.121899 0.832034 +vt 0.693936 0.449159 +vt 0.420996 0.999935 +vt 0.008277 0.862094 +vt 0.082562 0.831201 +vt 0.741580 0.718717 +vt 0.678836 0.505353 +vt 0.815743 0.487362 +vt 0.741523 0.585977 +vt 0.678836 0.699564 +vt 0.553315 0.945729 +vt 0.982243 0.588758 +vt 0.460393 1.018433 +vt 0.949871 0.788878 +vt 0.982305 0.727355 +vt 0.668954 0.502598 +vt 0.949657 0.691167 +vt 0.979056 0.490574 +vt 0.078628 0.952623 +vt 0.035428 0.887064 +vt 0.812426 0.730862 +vt 0.971935 0.642457 +vt 0.805889 0.532195 +vt 0.173975 1.012235 +vt 0.908785 0.976444 +vt 0.726484 0.788878 +vt 0.984477 0.500479 +vt 0.894591 0.976453 +vt 0.737043 0.505375 +vt 0.726270 0.691167 +vt 0.987420 0.694407 +vt 0.999899 0.506981 +vt 0.968797 0.500648 +vt 0.989626 0.516135 +vt 0.652223 0.697892 +vt 0.656922 0.730164 +vt 0.681740 0.506981 +vt 0.985798 0.713641 +vt 0.053549 0.993732 +vt 0.043551 0.873068 +vt 0.522988 0.991572 +vt 0.062665 0.961706 +vt 0.169656 0.991799 +vt 0.060838 0.809705 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +s 1 +usemtl CabnetDoors +f 6644/13691/4731 6645/13695/4731 6646/13700/4731 6647/13704/4731 6648/13708/4731 6649/13714/4731 6650/13717/4731 6651/13720/4731 +f 6649/13713/4732 6648/13709/4732 6652/13724/4732 6653/13727/4732 +f 6654/13729/4733 6655/13733/4733 6656/13735/4733 6657/13736/4733 +f 6658/13740/4734 6659/13741/4734 6645/13696/4734 6644/13690/4734 +f 6659/13742/4735 6658/13739/4735 6660/13744/4735 6661/13745/4735 +f 6662/13747/4735 6663/13750/4735 6660/13744/4735 6658/13739/4735 +f 6662/13748/4734 6658/13740/4734 6644/13690/4734 6664/13752/4734 +f 6657/13737/4732 6649/13713/4732 6653/13727/4732 6654/13730/4732 +f 6664/13753/4731 6644/13691/4731 6651/13720/4731 6650/13717/4731 6649/13714/4731 6657/13738/4731 6656/13734/4731 6665/13756/4731 +f 6647/13705/4736 6648/13710/4736 6666/13759/4736 6667/13763/4736 +f 6657/13738/4731 6656/13734/4731 6650/13717/4731 6649/13714/4731 +f 6651/13721/4735 6644/13692/4735 6664/13754/4735 6665/13757/4735 +f 6649/13715/4737 6650/13718/4737 6668/13767/4737 6669/13769/4737 +f 6669/13769/4738 6668/13767/4738 6670/13771/4738 6671/13774/4738 +f 6672/13777/4738 6675/13785/4738 6674/13782/4738 6673/13780/4738 +f 6650/13719/4739 6647/13706/4739 6667/13764/4739 6668/13768/4739 +f 6644/13693/4740 6672/13777/4740 6673/13780/4740 6651/13722/4740 +f 6646/13701/4741 6677/13792/4741 6676/13788/4741 6645/13697/4741 +f 6651/13723/4742 6673/13781/4742 6677/13793/4742 6646/13702/4742 +f 6648/13711/4743 6649/13716/4743 6669/13770/4743 6666/13761/4743 +f 6645/13698/4744 6676/13789/4744 6672/13778/4744 6644/13694/4744 +f 6671/13775/4745 6670/13772/4745 6678/13797/4745 6679/13801/4745 +f 6680/13804/4746 6674/13783/4746 6675/13786/4746 6681/13806/4746 +f 6676/13790/4734 6683/13809/4734 6682/13807/4734 6681/13805/4734 +f 6668/13768/4734 6667/13764/4734 6678/13796/4734 6670/13773/4734 +f 6667/13765/4747 6666/13760/4747 6684/13813/4747 6685/13818/4747 +f 6676/13790/4734 6681/13805/4734 6675/13787/4734 6672/13779/4734 +f 6666/13761/4732 6669/13770/4732 6671/13776/4732 6679/13799/4732 +f 6673/13781/4732 6674/13784/4732 6680/13802/4732 6677/13793/4732 +f 6684/13814/4732 6686/13822/4732 6687/13825/4732 6688/13829/4732 +f 6683/13809/4734 6690/13836/4734 6689/13832/4734 6682/13807/4734 +f 6666/13762/4732 6679/13800/4732 6686/13823/4732 6684/13815/4732 +f 6679/13801/4748 6678/13797/4748 6691/13839/4748 6686/13824/4748 +f 6677/13794/4747 6692/13841/4747 6683/13810/4747 6676/13791/4747 +f 6680/13803/4732 6693/13845/4732 6692/13842/4749 6677/13795/4732 +f 6681/13806/4748 6682/13808/4748 6693/13846/4748 6680/13804/4748 +f 6678/13798/4734 6667/13766/4734 6685/13819/4734 6691/13840/4734 +f 6694/13847/4750 6688/13831/4750 6695/13851/4750 6696/13852/4750 +f 6697/13854/4751 6700/13862/4752 6699/13860/4753 6698/13857/4753 +f 6686/13824/4748 6691/13839/4748 6701/13864/4748 6687/13826/4748 +f 6683/13811/4734 6702/13867/4734 6698/13859/4734 6690/13837/4734 +f 6693/13845/4732 6704/13874/4732 6703/13870/4754 6692/13842/4749 +f 6691/13840/4734 6685/13819/4734 6705/13876/4734 6701/13865/4734 +f 6682/13808/4748 6689/13833/4748 6704/13873/4748 6693/13846/4748 +f 6688/13830/4755 6687/13827/4755 6706/13879/4755 6695/13850/4755 +f 6684/13816/4732 6688/13831/4732 6694/13847/4732 6707/13881/4732 +f 6708/13884/4756 6707/13882/4747 6694/13848/4747 6709/13887/4756 +f 6710/13890/4756 6697/13855/4756 6698/13858/4747 6702/13868/4747 +f 6708/13885/4756 6709/13888/4756 6697/13856/4756 6710/13891/4756 +f 6692/13843/4757 6710/13892/4757 6702/13869/4757 6683/13812/4757 +f 6698/13859/4758 6699/13861/4758 6711/13894/4758 6690/13837/4758 +f 6704/13874/4759 6713/13898/4759 6712/13895/4759 6703/13870/4759 +f 6685/13820/4760 6708/13886/4761 6710/13892/4762 6692/13843/4749 +f 6685/13820/4760 6684/13817/4763 6707/13883/4763 6708/13886/4761 +f 6714/13902/4764 6715/13906/4764 6716/13910/4765 6717/13914/4766 +f 6718/13918/4767 6719/13921/4768 6720/13924/4769 6721/13927/4767 +f 6701/13865/4770 6705/13876/4771 6719/13922/4772 6718/13919/4770 +f 6687/13828/4773 6701/13866/4773 6718/13920/4773 6706/13880/4773 +f 6709/13888/4774 6722/13931/4775 6700/13863/4752 6697/13856/4751 +f 6703/13871/4754 6712/13896/4776 6719/13923/4772 6705/13877/4771 +f 6690/13838/4777 6711/13893/4777 6723/13935/4777 6689/13834/4777 +f 6689/13835/4778 6723/13933/4778 6713/13899/4778 6704/13875/4778 +f 6709/13889/4774 6694/13849/4779 6696/13853/4779 6722/13932/4775 +f 6712/13896/4780 6724/13936/4781 6720/13925/4769 6719/13923/4768 +f 6725/13939/4782 6726/13943/4783 6727/13947/4784 6721/13928/4784 +f 6695/13850/4785 6706/13879/4785 6727/13948/4785 6715/13907/4785 +f 6716/13911/4786 6715/13908/4787 6727/13949/4787 6726/13944/4788 +f 6696/13852/4789 6695/13851/4789 6715/13909/4789 6714/13903/4789 +f 6717/13915/4790 6728/13951/4791 6729/13954/4792 6714/13904/4793 +f 6713/13900/4794 6725/13940/4795 6724/13937/4781 6712/13897/4794 +f 6700/13862/4796 6728/13952/4791 6717/13916/4790 6699/13860/4796 +f 6723/13934/4797 6726/13945/4783 6725/13941/4782 6713/13901/4797 +f 6711/13893/4798 6716/13912/4786 6726/13946/4788 6723/13935/4798 +f 6699/13861/4799 6717/13917/4766 6716/13913/4765 6711/13894/4799 +f 6722/13931/4800 6729/13955/4792 6728/13953/4791 6700/13863/4801 +f 6725/13942/4795 6721/13929/4802 6720/13926/4769 6724/13938/4781 +f 6706/13880/4803 6718/13920/4803 6721/13930/4803 6727/13950/4803 +f 6722/13932/4800 6696/13853/4804 6714/13905/4804 6729/13956/4792 +f 6661/13745/4735 6660/13744/4735 6730/13957/4735 6731/13958/4735 +f 6653/13728/4735 6652/13725/4735 6731/13958/4735 6730/13957/4735 +f 6730/13957/4735 6660/13744/4735 6663/13750/4735 6655/13732/4735 +f 6655/13732/4735 6654/13731/4735 6653/13728/4735 6730/13957/4735 +f 6659/13743/4805 6661/13746/4805 6646/13703/4805 6645/13699/4805 +f 6647/13707/4805 6731/13959/4805 6652/13726/4805 6648/13712/4805 +f 6646/13703/4805 6661/13746/4805 6731/13959/4805 6647/13707/4805 +f 6665/13758/4733 6663/13751/4733 6662/13749/4733 6664/13755/4733 +f 6656/13735/4733 6655/13733/4733 6663/13751/4733 6665/13758/4733 +f 6705/13878/4771 6685/13821/4760 6692/13844/4749 6703/13872/4754 +f 6732/13960/4806 6733/13961/4806 6734/13962/4807 6735/13964/4808 +f 6736/13965/4809 6735/13963/4809 6737/13968/4810 6738/13970/4811 +f 6739/13972/4812 6740/13973/4812 6741/13974/4813 6742/13976/4814 +f 6741/13974/4815 6743/13977/4815 6744/13979/4815 6745/13981/4815 +f 6746/13983/4816 6747/13984/4816 6748/13985/4816 6749/13987/4816 +f 6750/13989/4817 6733/13961/4817 6751/13990/4817 6743/13978/4817 +f 6740/13973/4818 6750/13988/4818 6743/13977/4818 6741/13974/4818 +f 6752/13991/4819 6753/13992/4820 6750/13988/4818 6740/13973/4818 +f 6753/13993/4821 6734/13962/4821 6733/13961/4817 6750/13989/4817 +f 6754/13994/4822 6746/13982/4822 6749/13986/4822 6755/13995/4822 +f 6736/13966/4822 6756/13998/4822 6746/13982/4822 6754/13994/4822 +f 6756/13997/4816 6757/13999/4816 6747/13984/4816 6746/13983/4816 +f 6748/13985/4823 6742/13975/4823 6758/14001/4823 6759/14002/4823 +f 6743/13978/4824 6751/13990/4824 6760/14003/4824 6744/13980/4824 +f 6755/13995/4825 6749/13986/4825 6761/14005/4825 6762/14007/4825 +f 6747/13984/4826 6739/13971/4826 6742/13975/4826 6748/13985/4826 +f 6757/13999/4826 6763/14009/4826 6739/13971/4826 6747/13984/4826 +f 6763/14008/4827 6752/13991/4827 6740/13973/4812 6739/13972/4812 +f 6753/13992/4820 6752/13991/4819 6764/14010/4828 6765/14012/4828 +f 6757/13999/4829 6756/13997/4829 6766/14013/4829 6767/14015/4829 +f 6752/13991/4827 6763/14008/4827 6768/14016/4830 6764/14010/4831 +f 6769/14018/4806 6751/13990/4806 6733/13961/4806 6732/13960/4806 +f 6766/14014/4832 6738/13969/4832 6770/14021/4832 6771/14023/4832 +f 6768/14017/4833 6767/14015/4833 6772/14024/4833 6773/14026/4833 +f 6767/14015/4834 6766/14013/4834 6771/14022/4834 6772/14024/4834 +f 6764/14010/4831 6768/14016/4830 6773/14027/4835 6774/14028/4836 +f 6734/13962/4821 6753/13993/4821 6765/14011/4837 6775/14029/4837 +f 6763/14009/4838 6757/13999/4838 6767/14015/4838 6768/14017/4838 +f 6735/13964/4808 6734/13962/4807 6775/14029/4839 6737/13967/4839 +f 6756/13998/4840 6736/13966/4840 6738/13969/4840 6766/14014/4840 +f 6774/14028/4836 6773/14027/4835 6776/14030/4841 6777/14031/4842 +f 6770/14021/4843 6778/14032/4844 6779/14035/4845 6780/14036/4846 +f 6781/14037/4847 6774/14028/4847 6777/14031/4847 6782/14039/4847 +f 6778/14032/4848 6783/14042/4848 6784/14044/4848 6779/14035/4848 +f 6775/14029/4849 6765/14011/4849 6781/14038/4849 6783/14043/4849 +f 6737/13967/4850 6775/14029/4850 6783/14043/4850 6778/14033/4850 +f 6765/14012/4851 6764/14010/4851 6774/14028/4851 6781/14037/4851 +f 6738/13970/4811 6737/13968/4810 6778/14034/4844 6770/14020/4843 +f 6780/14036/4846 6779/14035/4845 6785/14048/4852 6786/14049/4853 +f 6782/14039/4854 6777/14031/4854 6787/14050/4854 6788/14052/4854 +f 6779/14035/4855 6784/14044/4855 6789/14053/4855 6785/14048/4855 +f 6784/14045/4856 6782/14040/4856 6788/14051/4856 6789/14054/4856 +f 6772/14024/4857 6771/14022/4857 6790/14055/4857 6791/14058/4857 +f 6773/14027/4858 6772/14025/4858 6791/14060/4858 6776/14030/4858 +f 6771/14023/4859 6770/14021/4859 6780/14036/4859 6790/14057/4859 +f 6783/14043/4860 6781/14038/4860 6782/14041/4860 6784/14046/4860 +f 6789/14054/4861 6788/14051/4861 6792/14062/4861 6793/14063/4861 +f 6794/14065/4862 6786/14049/4862 6795/14066/4862 6796/14067/4862 +f 6797/14069/4863 6798/14071/4863 6799/14073/4863 6800/14075/4863 +f 6798/14071/4864 6794/14064/4864 6796/14068/4864 6799/14073/4864 +f 6777/14031/4842 6776/14030/4841 6797/14070/4865 6787/14050/4866 +f 6791/14059/4867 6790/14056/4867 6794/14064/4867 6798/14071/4867 +f 6776/14030/4868 6791/14060/4868 6798/14072/4868 6797/14070/4868 +f 6790/14057/4869 6780/14036/4869 6786/14049/4869 6794/14065/4869 +f 6801/14076/4870 6802/14078/4870 6803/14080/4871 6804/14081/4871 +f 6792/14061/4872 6805/14084/4872 6806/14085/4872 6807/14087/4872 +f 6808/14090/4873 6809/14092/4873 6810/14094/4873 6811/14095/4873 +f 6796/14067/4874 6795/14066/4874 6812/14098/4874 6813/14100/4874 +f 6785/14047/4875 6789/14054/4875 6793/14063/4875 6814/14104/4875 +f 6788/14052/4876 6787/14050/4876 6805/14084/4876 6792/14061/4876 +f 6786/14049/4853 6785/14048/4852 6814/14103/4877 6795/14066/4878 +f 6787/14050/4866 6797/14070/4865 6800/14074/4879 6805/14084/4880 +f 6745/13981/4881 6744/13979/4881 6815/14105/4881 6816/14107/4881 +f 6760/14003/4882 6817/14108/4882 6818/14110/4882 6819/14114/4882 +f 6761/14004/4883 6759/14002/4883 6820/14115/4883 6821/14117/4883 +f 6817/14109/4884 6762/14006/4885 6822/14119/4886 6818/14111/4887 +f 6751/13990/4888 6769/14018/4888 6817/14108/4888 6760/14003/4888 +f 6742/13976/4814 6741/13974/4813 6745/13981/4889 6758/14000/4890 +f 6749/13987/4891 6748/13985/4891 6759/14002/4891 6761/14004/4891 +f 6769/14019/4892 6755/13996/4892 6762/14006/4885 6817/14109/4884 +f 6819/14113/4893 6818/14112/4893 6823/14121/4893 6824/14124/4893 +f 6821/14117/4894 6820/14115/4894 6825/14125/4894 6826/14128/4894 +f 6818/14112/4887 6822/14120/4886 6827/14131/4895 6823/14121/4896 +f 6822/14120/4897 6821/14118/4897 6826/14129/4897 6827/14131/4897 +f 6758/14000/4890 6745/13981/4889 6816/14107/4898 6828/14133/4899 +f 6744/13980/4900 6760/14003/4900 6819/14114/4900 6815/14106/4900 +f 6759/14002/4901 6758/14001/4901 6828/14132/4901 6820/14115/4901 +f 6762/14007/4902 6761/14005/4902 6821/14118/4902 6822/14120/4902 +f 6827/14131/4903 6826/14129/4903 6829/14134/4903 6830/14136/4903 +f 6825/14126/4904 6831/14137/4904 6832/14138/4904 6833/14140/4904 +f 6834/14142/4905 6824/14122/4905 6835/14145/4905 6836/14147/4905 +f 6831/14137/4906 6837/14149/4907 6838/14150/4908 6832/14138/4909 +f 6816/14107/4910 6815/14105/4910 6834/14144/4910 6837/14149/4910 +f 6828/14133/4899 6816/14107/4898 6837/14149/4907 6831/14137/4906 +f 6815/14106/4911 6819/14114/4911 6824/14123/4911 6834/14143/4911 +f 6820/14116/4912 6828/14133/4912 6831/14137/4912 6825/14126/4912 +f 6836/14147/4913 6835/14145/4913 6809/14092/4913 6808/14090/4913 +f 6832/14138/4909 6838/14150/4908 6839/14151/4914 6840/14153/4914 +f 6838/14150/4915 6836/14148/4915 6808/14091/4916 6839/14151/4916 +f 6835/14145/4917 6841/14154/4917 6801/14077/4918 6809/14092/4919 +f 6823/14121/4896 6827/14131/4895 6830/14136/4920 6841/14155/4921 +f 6826/14130/4922 6825/14127/4922 6833/14141/4922 6829/14135/4922 +f 6824/14124/4923 6823/14121/4923 6841/14155/4923 6835/14146/4923 +f 6837/14149/4924 6834/14144/4924 6836/14148/4924 6838/14150/4924 +f 6842/14156/4925 6843/14158/4925 6844/14159/4925 6845/14161/4925 +f 6795/14066/4878 6814/14103/4877 6846/14164/4926 6812/14098/4926 +f 6843/14158/4927 6840/14152/4927 6847/14167/4928 6844/14159/4928 +f 6805/14084/4880 6800/14074/4879 6848/14170/4929 6806/14085/4929 +f 6833/14141/4930 6832/14139/4930 6840/14152/4927 6843/14158/4927 +f 6830/14136/4931 6829/14134/4931 6842/14157/4932 6802/14078/4933 +f 6841/14155/4921 6830/14136/4920 6802/14078/4870 6801/14076/4870 +f 6829/14135/4934 6833/14141/4934 6843/14158/4934 6842/14156/4934 +f 6849/14173/4935 6807/14088/4935 6806/14086/4935 6848/14171/4935 +f 6813/14101/4936 6849/14173/4935 6848/14171/4935 6850/14174/4935 +f 6812/14099/4936 6846/14165/4936 6849/14173/4935 6813/14101/4936 +f 6846/14165/4936 6851/14176/4935 6807/14088/4935 6849/14173/4935 +f 6852/14178/4937 6811/14096/4937 6810/14093/4937 6804/14082/4938 +f 6845/14162/4937 6852/14178/4937 6804/14082/4938 6803/14079/4938 +f 6844/14160/4939 6847/14168/4937 6852/14178/4937 6845/14162/4937 +f 6847/14168/4937 6853/14179/4937 6811/14096/4937 6852/14178/4937 +f 6800/14075/4940 6799/14073/4940 6850/14175/4940 6848/14172/4940 +f 6840/14153/4914 6839/14151/4914 6853/14180/4941 6847/14169/4941 +f 6814/14104/4942 6793/14063/4942 6851/14177/4942 6846/14166/4942 +f 6802/14078/4933 6842/14157/4932 6845/14163/4943 6803/14080/4943 +f 6799/14073/4944 6796/14068/4944 6813/14102/4944 6850/14175/4944 +f 6839/14151/4916 6808/14091/4916 6811/14097/4945 6853/14180/4945 +f 6793/14063/4946 6792/14062/4946 6807/14089/4946 6851/14177/4946 +f 6809/14092/4919 6801/14077/4918 6804/14083/4947 6810/14094/4947 +f 6854/14182/4806 6855/14183/4806 6856/14184/4807 6857/14186/4808 +f 6858/14187/4948 6857/14185/4948 6859/14189/4949 6860/14190/4950 +f 6861/14191/4823 6862/14193/4823 6863/14196/4823 6864/14198/4823 +f 6865/14200/4816 6866/14201/4816 6861/14192/4816 6867/14204/4816 +f 6868/14206/4817 6855/14183/4817 6869/14207/4817 6870/14208/4817 +f 6871/14210/4818 6868/14205/4818 6870/14209/4818 6872/14211/4818 +f 6873/14212/4818 6874/14213/4818 6868/14205/4818 6871/14210/4818 +f 6874/14214/4821 6856/14184/4821 6855/14183/4817 6868/14206/4817 +f 6875/14215/4951 6865/14199/4951 6867/14203/4951 6876/14216/4951 +f 6858/14187/4951 6877/14218/4951 6865/14199/4951 6875/14215/4951 +f 6877/14217/4816 6878/14219/4816 6866/14201/4816 6865/14200/4816 +f 6870/14208/4824 6869/14207/4824 6879/14221/4824 6880/14223/4824 +f 6876/14216/4952 6867/14203/4952 6881/14224/4952 6882/14226/4952 +f 6883/14227/4953 6876/14216/4954 6882/14226/4955 6884/14229/4956 +f 6866/14202/4826 6885/14231/4826 6862/14193/4826 6861/14191/4826 +f 6878/14220/4826 6886/14233/4826 6885/14231/4826 6866/14202/4826 +f 6874/14213/4828 6873/14212/4828 6887/14234/4828 6888/14236/4828 +f 6878/14219/4829 6877/14217/4829 6889/14237/4829 6890/14239/4829 +f 6873/14212/4957 6886/14232/4957 6891/14242/4830 6887/14234/4831 +f 6875/14215/4958 6854/14181/4958 6857/14185/4948 6858/14187/4948 +f 6876/14216/4954 6883/14227/4953 6854/14181/4958 6875/14215/4958 +f 6883/14228/4806 6869/14207/4806 6855/14183/4806 6854/14182/4806 +f 6892/14243/4849 6888/14235/4849 6893/14245/4849 6894/14247/4849 +f 6889/14238/4959 6860/14190/4959 6895/14249/4959 6896/14251/4959 +f 6891/14241/4833 6890/14240/4833 6897/14252/4833 6898/14255/4833 +f 6890/14239/4834 6889/14237/4834 6896/14250/4834 6897/14254/4834 +f 6856/14184/4821 6874/14214/4821 6888/14235/4837 6892/14243/4837 +f 6886/14233/4838 6878/14220/4838 6890/14240/4838 6891/14241/4838 +f 6857/14186/4808 6856/14184/4807 6892/14243/4839 6859/14188/4839 +f 6877/14218/4960 6858/14187/4960 6860/14190/4960 6889/14238/4960 +f 6898/14256/4858 6897/14253/4858 6899/14260/4858 6900/14261/4858 +f 6897/14254/4857 6896/14250/4857 6901/14262/4857 6899/14258/4857 +f 6902/14266/4836 6898/14256/4835 6900/14261/4841 6903/14267/4842 +f 6895/14249/4961 6904/14269/4962 6905/14270/4963 6906/14271/4964 +f 6859/14188/4850 6892/14243/4850 6894/14247/4850 6904/14268/4850 +f 6888/14236/4851 6887/14234/4851 6902/14265/4851 6893/14244/4851 +f 6860/14190/4950 6859/14189/4949 6904/14269/4962 6895/14249/4961 +f 6887/14234/4831 6891/14242/4830 6898/14257/4835 6902/14265/4836 +f 6906/14271/4964 6905/14270/4963 6907/14273/4965 6908/14274/4966 +f 6909/14277/4854 6903/14267/4854 6910/14278/4854 6911/14279/4854 +f 6905/14270/4855 6912/14283/4855 6913/14284/4855 6907/14273/4855 +f 6912/14281/4856 6909/14275/4856 6911/14280/4856 6913/14285/4856 +f 6896/14251/4967 6895/14249/4967 6906/14271/4967 6901/14264/4967 +f 6894/14247/4860 6893/14245/4860 6909/14276/4860 6912/14282/4860 +f 6904/14269/4848 6894/14248/4848 6912/14283/4848 6905/14270/4848 +f 6893/14246/4847 6902/14266/4847 6903/14267/4847 6909/14277/4847 +f 6911/14279/4876 6910/14278/4876 6914/14286/4876 6915/14287/4876 +f 6907/14272/4875 6913/14285/4875 6916/14289/4875 6917/14291/4875 +f 6913/14285/4861 6911/14280/4861 6915/14288/4861 6916/14289/4861 +f 6918/14292/4968 6908/14274/4968 6919/14294/4968 6920/14295/4968 +f 6903/14267/4842 6900/14261/4841 6921/14297/4969 6910/14278/4970 +f 6899/14259/4867 6901/14263/4867 6918/14293/4867 6922/14300/4867 +f 6900/14261/4868 6899/14260/4868 6922/14299/4868 6921/14297/4868 +f 6901/14264/4971 6906/14271/4971 6908/14274/4971 6918/14292/4971 +f 6923/14301/4972 6924/14303/4972 6925/14305/4871 6926/14306/4871 +f 6915/14287/4973 6914/14286/4973 6927/14309/4973 6928/14311/4973 +f 6929/14315/4873 6930/14317/4873 6931/14319/4873 6932/14320/4873 +f 6920/14295/4974 6919/14294/4974 6933/14324/4974 6934/14326/4974 +f 6908/14274/4966 6907/14273/4965 6917/14290/4975 6919/14294/4976 +f 6910/14278/4970 6921/14297/4969 6935/14330/4977 6914/14286/4880 +f 6922/14300/4864 6918/14293/4864 6920/14296/4864 6936/14332/4864 +f 6921/14298/4863 6922/14300/4863 6936/14332/4863 6935/14331/4863 +f 6879/14221/4882 6884/14230/4882 6937/14333/4882 6938/14335/4882 +f 6881/14225/4883 6864/14197/4883 6939/14339/4883 6940/14341/4883 +f 6884/14229/4956 6882/14226/4955 6941/14342/4978 6937/14334/4979 +f 6882/14226/4980 6881/14224/4980 6940/14340/4980 6941/14342/4980 +f 6872/14211/4815 6870/14209/4815 6880/14222/4815 6942/14343/4815 +f 6869/14207/4888 6883/14228/4888 6884/14230/4888 6879/14221/4888 +f 6862/14194/4981 6872/14211/4981 6942/14343/4889 6863/14195/4890 +f 6867/14204/4891 6861/14192/4891 6864/14197/4891 6881/14225/4891 +f 6937/14334/4979 6941/14342/4978 6943/14344/4982 6944/14345/4983 +f 6941/14342/4984 6940/14340/4984 6945/14347/4984 6943/14344/4984 +f 6939/14337/4912 6946/14351/4912 6947/14352/4912 6948/14353/4912 +f 6949/14357/4911 6938/14335/4911 6950/14359/4911 6951/14362/4911 +f 6942/14343/4881 6880/14222/4881 6949/14356/4881 6952/14365/4881 +f 6863/14195/4890 6942/14343/4889 6952/14365/4898 6946/14349/4899 +f 6880/14223/4900 6879/14221/4900 6938/14335/4900 6949/14357/4900 +f 6864/14198/4901 6863/14196/4901 6946/14350/4901 6939/14338/4901 +f 6948/14353/4904 6947/14352/4904 6953/14367/4904 6954/14369/4904 +f 6951/14363/4905 6950/14360/4905 6955/14372/4905 6956/14374/4905 +f 6947/14352/4906 6957/14375/4907 6958/14376/4908 6953/14367/4909 +f 6957/14375/4924 6951/14364/4924 6956/14373/4924 6958/14376/4924 +f 6940/14341/4894 6939/14339/4894 6948/14354/4894 6945/14346/4894 +f 6938/14336/4893 6937/14334/4893 6944/14345/4893 6950/14361/4893 +f 6952/14366/4910 6949/14358/4910 6951/14364/4910 6957/14375/4910 +f 6946/14351/4899 6952/14366/4898 6957/14375/4907 6947/14352/4906 +f 6958/14376/4915 6956/14373/4915 6929/14316/4916 6959/14377/4916 +f 6955/14372/4917 6960/14378/4917 6923/14302/4918 6930/14317/4919 +f 6961/14380/4985 6954/14370/4985 6962/14382/4985 6963/14383/4985 +f 6960/14379/4986 6964/14385/4987 6924/14303/4972 6923/14301/4972 +f 6943/14344/4988 6945/14347/4988 6961/14381/4988 6964/14385/4988 +f 6944/14345/4983 6943/14344/4982 6964/14385/4987 6960/14379/4986 +f 6945/14348/4922 6948/14355/4922 6954/14370/4922 6961/14380/4922 +f 6950/14361/4923 6944/14345/4923 6960/14379/4923 6955/14371/4923 +f 6963/14383/4989 6962/14382/4989 6965/14386/4989 6966/14388/4989 +f 6919/14294/4976 6917/14290/4975 6967/14392/4990 6933/14324/4990 +f 6914/14286/4880 6935/14330/4977 6968/14395/4929 6927/14309/4929 +f 6962/14382/4927 6969/14398/4927 6970/14400/4928 6965/14386/4928 +f 6953/14367/4909 6958/14376/4908 6959/14377/4914 6969/14399/4914 +f 6956/14374/4913 6955/14372/4913 6930/14317/4913 6929/14315/4913 +f 6954/14370/4930 6953/14368/4930 6969/14398/4927 6962/14382/4927 +f 6964/14385/4991 6961/14381/4991 6963/14384/4992 6924/14303/4993 +f 6971/14403/4935 6928/14312/4935 6927/14310/4935 6968/14396/4935 +f 6934/14327/4936 6971/14403/4935 6968/14396/4935 6972/14405/4935 +f 6933/14325/4936 6967/14393/4936 6971/14404/4935 6934/14328/4936 +f 6967/14393/4936 6973/14407/4935 6928/14313/4935 6971/14404/4935 +f 6974/14409/4937 6932/14321/4937 6931/14318/4937 6926/14307/4938 +f 6966/14389/4937 6974/14409/4937 6926/14307/4938 6925/14304/4938 +f 6965/14387/4939 6970/14401/4937 6974/14410/4937 6966/14390/4937 +f 6970/14401/4937 6975/14411/4937 6932/14322/4937 6974/14410/4937 +f 6935/14331/4940 6936/14332/4940 6972/14406/4940 6968/14397/4940 +f 6969/14399/4914 6959/14377/4914 6975/14412/4941 6970/14402/4941 +f 6917/14291/4942 6916/14289/4942 6973/14408/4942 6967/14394/4942 +f 6924/14303/4993 6963/14384/4992 6966/14391/4994 6925/14305/4994 +f 6936/14332/4944 6920/14296/4944 6934/14329/4944 6972/14406/4944 +f 6959/14377/4916 6929/14316/4916 6932/14323/4945 6975/14412/4945 +f 6916/14289/4946 6915/14288/4946 6928/14314/4946 6973/14408/4946 +f 6930/14317/4919 6923/14302/4918 6926/14308/4947 6931/14319/4947 +o Chair.018 +v 9.735986 0.415382 3.162051 +v 9.735986 0.429951 3.162051 +v 9.785595 0.429951 3.163032 +v 10.187467 0.429951 3.170977 +v 10.237075 0.429951 3.171958 +v 10.237075 0.415382 3.171958 +v 10.187467 0.415382 3.170977 +v 9.785595 0.415382 3.163032 +v 10.229471 0.429951 3.556515 +v 10.229471 0.415382 3.556515 +v 10.229471 0.400812 3.556515 +v 10.183862 0.400812 3.555613 +v 10.187467 0.400812 3.170977 +v 10.237075 0.400812 3.171958 +v 9.728382 0.415382 3.546608 +v 9.728382 0.429951 3.546608 +v 9.773993 0.415382 3.547510 +v 9.773993 0.429951 3.547510 +v 9.728382 0.400812 3.546608 +v 9.773993 0.400812 3.547510 +v 9.735986 0.400812 3.162051 +v 9.785595 0.400812 3.163032 +v 10.217068 0.432961 3.146470 +v 10.202121 0.432961 3.146174 +v 10.202031 0.421009 3.150670 +v 10.216978 0.421009 3.150966 +v 10.202281 0.426967 3.138047 +v 10.217228 0.426967 3.138342 +v 9.756959 0.419106 3.139812 +v 9.771692 0.419106 3.140103 +v 9.771942 0.425064 3.127479 +v 9.757209 0.425064 3.127188 +v 9.757051 0.434699 3.135175 +v 9.771784 0.434699 3.135467 +v 10.202404 0.431853 3.131806 +v 10.217352 0.431853 3.132101 +v 9.772068 0.433592 3.121099 +v 9.757335 0.433592 3.120807 +v 9.757577 0.592772 3.108544 +v 9.757294 0.593879 3.122912 +v 10.217310 0.592141 3.134206 +v 10.202363 0.592141 3.133910 +v 10.217594 0.591033 3.119838 +v 10.217957 0.829840 3.101439 +v 10.217673 0.830948 3.115808 +v 9.757941 0.831579 3.090145 +v 9.757657 0.832686 3.104513 +v 10.202647 0.591033 3.119542 +v 9.772026 0.593879 3.123203 +v 9.772310 0.592772 3.108835 +v 10.217472 0.830737 3.126018 +v 10.194684 0.870951 3.112076 +v 10.194505 0.870348 3.121155 +v 9.772188 0.832325 3.115027 +v 9.757455 0.832325 3.114735 +v 9.780777 0.869634 3.111170 +v 9.797585 0.864490 3.111899 +v 10.203011 0.829840 3.101144 +v 9.757113 0.608202 3.132002 +v 9.772390 0.832686 3.104805 +v 9.772675 0.831579 3.090436 +v 10.202726 0.830948 3.115512 +v 10.194940 0.869953 3.099135 +v 10.217131 0.606614 3.143285 +v 10.202184 0.606614 3.142990 +v 10.202525 0.830737 3.125722 +v 9.771847 0.608202 3.132293 +v 9.780956 0.870373 3.102080 +v 9.797766 0.865229 3.102809 +v 9.798021 0.864232 3.089868 +v 10.121581 0.913073 3.116748 +v 10.121276 0.914244 3.108559 +v 9.854442 0.911897 3.100371 +v 9.853922 0.911148 3.108511 +v 10.176744 0.867524 3.098962 +v 10.176488 0.868521 3.111903 +v 10.111594 0.902898 3.109242 +v 10.111870 0.901824 3.095303 +v 10.176309 0.867919 3.120983 +v 9.781213 0.869376 3.089139 +v 9.863966 0.900855 3.101410 +v 9.864242 0.899781 3.087472 +v 9.854717 0.910823 3.086432 +v 10.121552 0.913170 3.094620 +v 9.861791 0.901346 3.109423 +v 10.111900 0.901727 3.117431 +v 10.183862 0.415382 3.555613 +v 10.183862 0.429951 3.555613 +v 10.235456 0.438060 3.363632 +v 10.241295 0.443651 3.363748 +v 10.243886 0.443651 3.232689 +v 10.238047 0.438060 3.232573 +v 10.238223 0.429976 3.232577 +v 10.238687 0.437950 3.200182 +v 10.238812 0.430300 3.202799 +v 10.255144 0.429903 3.364022 +v 10.254969 0.437987 3.364018 +v 10.252378 0.437987 3.495077 +v 10.252553 0.429903 3.495080 +v 10.246786 0.443828 3.494966 +v 10.246156 0.439408 3.526862 +v 10.251793 0.434055 3.524636 +v 10.241222 0.424135 3.363746 +v 10.249305 0.424311 3.363906 +v 10.246714 0.424311 3.494965 +v 10.238631 0.424135 3.494805 +v 10.249377 0.443828 3.363908 +v 10.238704 0.443651 3.494806 +v 10.257560 0.437987 3.232959 +v 10.251968 0.443828 3.232848 +v 10.235632 0.429976 3.363636 +v 10.233041 0.429976 3.494694 +v 10.243814 0.424135 3.232687 +v 10.251896 0.424311 3.232847 +v 10.252033 0.426646 3.521406 +v 10.246237 0.421521 3.519054 +v 10.238075 0.439247 3.526631 +v 10.238156 0.421360 3.518823 +v 10.232520 0.426713 3.521049 +v 10.257735 0.429903 3.232962 +v 10.258200 0.437881 3.200591 +v 10.252646 0.443408 3.198593 +v 10.244365 0.424773 3.204798 +v 10.252448 0.424940 3.204900 +v 10.258324 0.430231 3.203208 +v 10.232864 0.438060 3.494691 +v 10.239371 0.420977 3.174516 +v 10.244890 0.416357 3.178201 +v 10.252975 0.416497 3.178253 +v 10.258883 0.420919 3.174947 +v 10.258804 0.427313 3.169997 +v 10.244562 0.443241 3.198490 +v 10.259352 0.402967 3.151213 +v 10.259310 0.407418 3.144462 +v 10.239292 0.427371 3.169566 +v 10.239798 0.407458 3.144015 +v 10.239841 0.403008 3.150767 +v 10.253284 0.431932 3.166313 +v 10.253815 0.410634 3.139477 +v 10.245199 0.431793 3.166260 +v 10.245729 0.410537 3.139464 +v 10.240149 0.380352 3.126274 +v 10.240170 0.378323 3.134102 +v 10.259660 0.380334 3.126731 +v 10.254181 0.381800 3.120967 +v 10.246095 0.381756 3.120978 +v 10.245335 0.399792 3.155752 +v 10.253420 0.399889 3.155765 +v 10.254490 0.345795 3.105347 +v 10.246404 0.345756 3.105360 +v 10.245648 0.376856 3.139865 +v 10.240478 0.342751 3.118587 +v 10.245955 0.341467 3.124394 +v 10.259681 0.378304 3.134557 +v 10.253735 0.376901 3.139854 +v 10.254040 0.341506 3.124382 +v 10.259988 0.342735 3.119044 +v 10.230904 0.349401 3.593882 +v 10.231239 0.348454 3.585858 +v 10.230425 -0.002953 3.626955 +v 10.230091 -0.002007 3.634978 +v 10.259968 0.344511 3.111156 +v 10.261682 0.001491 3.024490 +v 10.256203 0.002774 3.018681 +v 10.244712 0.350077 3.599884 +v 10.236633 0.350056 3.599549 +v 10.235821 -0.001352 3.640646 +v 10.243899 -0.001331 3.640980 +v 10.242189 -0.000270 3.031921 +v 10.247668 -0.001553 3.037728 +v 10.240456 0.344527 3.110698 +v 10.245544 0.425574 3.557800 +v 10.251220 0.421603 3.553628 +v 10.232279 0.434122 3.524279 +v 10.231706 0.421652 3.553295 +v 10.237464 0.425454 3.557511 +v 10.245754 0.412305 3.543489 +v 10.237675 0.412185 3.543200 +v 10.231999 0.416156 3.547372 +v 10.231277 0.403231 3.574992 +v 10.237012 0.405075 3.580386 +v 10.245382 0.398698 3.562289 +v 10.237304 0.398640 3.561963 +v 10.231605 0.400566 3.567365 +v 10.251513 0.416106 3.547704 +v 10.237005 0.371230 3.577048 +v 10.231302 0.372479 3.582642 +v 10.251118 0.400542 3.567682 +v 10.250816 0.372464 3.582957 +v 10.245084 0.371267 3.577381 +v 10.245091 0.405133 3.580712 +v 10.236701 0.375406 3.596111 +v 10.244781 0.375443 3.596442 +v 10.250792 0.403207 3.575309 +v 10.250484 0.374194 3.590849 +v 10.250418 0.349392 3.594194 +v 10.250752 0.348446 3.586171 +v 10.230969 0.374209 3.590534 +v 10.236943 0.347770 3.580168 +v 10.245023 0.347791 3.580504 +v 10.244210 -0.003617 3.621601 +v 10.236131 -0.003637 3.621266 +v 10.242169 0.001507 3.024032 +v 10.249940 -0.002962 3.627268 +v 10.261702 -0.000286 3.032377 +v 10.251936 0.000611 3.028205 +v 10.255754 -0.001514 3.037716 +v 10.248117 0.002736 3.018693 +v 10.240016 -0.002484 3.631123 +v 10.249605 -0.002015 3.635291 +v 9.712014 0.438060 3.353284 +v 9.717854 0.443651 3.353399 +v 9.720446 0.443651 3.222340 +v 9.714605 0.438060 3.222224 +v 9.714782 0.429976 3.222228 +v 9.715246 0.437950 3.189834 +v 9.715370 0.430300 3.192451 +v 9.723273 0.424311 3.484616 +v 9.729113 0.429903 3.484731 +v 9.728592 0.426646 3.511057 +v 9.722796 0.421521 3.508705 +v 9.717781 0.424135 3.353398 +v 9.725864 0.424311 3.353558 +v 9.715191 0.424135 3.484456 +v 9.725937 0.443828 3.353559 +v 9.715263 0.443651 3.484457 +v 9.723346 0.443828 3.484617 +v 9.731528 0.437987 3.353669 +v 9.728937 0.437987 3.484728 +v 9.734119 0.437987 3.222610 +v 9.728528 0.443828 3.222500 +v 9.712191 0.429976 3.353287 +v 9.709599 0.429976 3.484346 +v 9.720372 0.424135 3.222338 +v 9.728455 0.424311 3.222498 +v 9.714634 0.439247 3.516282 +v 9.722715 0.439408 3.516513 +v 9.714716 0.421360 3.508474 +v 9.709079 0.426713 3.510700 +v 9.709423 0.438060 3.484342 +v 9.708838 0.434122 3.513930 +v 9.731704 0.429903 3.353673 +v 9.734295 0.429903 3.222614 +v 9.734759 0.437881 3.190243 +v 9.729205 0.443408 3.188244 +v 9.720924 0.424773 3.194449 +v 9.729008 0.424940 3.194551 +v 9.734883 0.430231 3.192859 +v 9.721122 0.443241 3.188141 +v 9.729843 0.431932 3.155964 +v 9.721759 0.431793 3.155912 +v 9.715930 0.420977 3.164167 +v 9.721450 0.416357 3.167851 +v 9.729534 0.416497 3.167904 +v 9.735442 0.420919 3.164598 +v 9.729979 0.399889 3.145416 +v 9.735911 0.402967 3.140865 +v 9.721893 0.399792 3.145403 +v 9.735364 0.427313 3.159648 +v 9.735868 0.407418 3.134113 +v 9.715852 0.427371 3.159218 +v 9.716356 0.407458 3.133667 +v 9.716399 0.403008 3.140418 +v 9.716707 0.380352 3.115925 +v 9.716728 0.378323 3.123753 +v 9.730374 0.410634 3.129128 +v 9.736219 0.380334 3.116382 +v 9.730740 0.381800 3.110618 +v 9.722289 0.410537 3.129115 +v 9.722654 0.381756 3.110630 +v 9.736527 0.344511 3.100806 +v 9.731049 0.345795 3.094998 +v 9.722963 0.345756 3.095011 +v 9.717015 0.344527 3.100349 +v 9.722208 0.376856 3.129516 +v 9.717035 0.342751 3.108238 +v 9.722513 0.341467 3.114045 +v 9.736240 0.378304 3.124209 +v 9.730293 0.376901 3.129505 +v 9.707462 0.349401 3.583533 +v 9.707797 0.348454 3.575509 +v 9.706985 -0.002953 3.616606 +v 9.706650 -0.002007 3.624629 +v 9.738240 0.001491 3.014141 +v 9.732762 0.002774 3.008332 +v 9.721272 0.350077 3.589535 +v 9.713193 0.350056 3.589200 +v 9.712380 -0.001352 3.630297 +v 9.720459 -0.001331 3.630632 +v 9.718749 -0.000270 3.021572 +v 9.724227 -0.001553 3.027379 +v 9.736547 0.342735 3.108695 +v 9.730599 0.341506 3.114033 +v 9.708265 0.421652 3.542947 +v 9.714024 0.425454 3.547162 +v 9.722314 0.412305 3.533140 +v 9.714233 0.412185 3.532852 +v 9.708558 0.416156 3.537023 +v 9.728353 0.434055 3.514287 +v 9.708162 0.400566 3.557016 +v 9.707836 0.403231 3.564643 +v 9.713862 0.398640 3.551614 +v 9.728072 0.416106 3.537355 +v 9.727677 0.400542 3.557333 +v 9.721942 0.398698 3.551940 +v 9.722103 0.425574 3.547451 +v 9.713572 0.405075 3.570037 +v 9.721650 0.405133 3.570364 +v 9.727779 0.421603 3.543279 +v 9.727375 0.372464 3.572608 +v 9.721643 0.371267 3.567032 +v 9.713261 0.375406 3.585762 +v 9.721339 0.375443 3.586093 +v 9.727350 0.403207 3.564960 +v 9.727043 0.374194 3.580500 +v 9.726977 0.349392 3.583846 +v 9.707529 0.374209 3.580185 +v 9.713564 0.371230 3.566700 +v 9.721581 0.347791 3.570155 +v 9.713503 0.347770 3.569820 +v 9.707861 0.372479 3.572293 +v 9.720769 -0.003617 3.611252 +v 9.712690 -0.003637 3.610917 +v 9.718729 0.001507 3.013683 +v 9.738260 -0.000286 3.022029 +v 9.727312 0.348446 3.575823 +v 9.726500 -0.002962 3.616920 +v 9.728495 0.000611 3.017856 +v 9.732313 -0.001514 3.027367 +v 9.724676 0.002736 3.008345 +v 9.716574 -0.002484 3.620774 +v 9.726165 -0.002015 3.624942 +vn 0.0198 -0.0000 -0.9998 +vn 0.9998 -0.0000 0.0198 +vn -0.0000 -1.0000 -0.0000 +vn -0.9998 -0.0000 -0.0198 +vn -0.0198 -0.0000 0.9998 +vn -0.0024 0.9929 0.1191 +vn 0.0052 -0.9646 -0.2636 +vn 0.0084 -0.9044 -0.4267 +vn -0.8278 -0.0911 -0.5536 +vn 0.0032 -0.9868 -0.1622 +vn -0.0034 0.9852 0.1714 +vn 0.8684 -0.0779 -0.4897 +vn 0.7415 -0.1146 -0.6611 +vn -0.7475 -0.0987 -0.6569 +vn 0.0122 -0.7874 -0.6163 +vn 0.0158 -0.5992 -0.8005 +vn -0.0197 0.0768 0.9968 +vn 0.0197 -0.0768 -0.9968 +vn 0.9550 -0.2916 -0.0545 +vn 0.8636 0.5027 0.0383 +vn -0.0229 0.1047 0.9942 +vn -0.0154 0.1119 0.9936 +vn -0.0149 0.1062 0.9942 +vn 0.5542 -0.0656 -0.8298 +vn 0.8677 0.4967 -0.0211 +vn -0.0221 0.0768 0.9968 +vn -0.0167 -0.5359 0.8441 +vn -0.8487 0.5287 0.0133 +vn 0.7889 -0.6113 0.0627 +vn -0.0115 -0.8531 0.5216 +vn -0.0199 -0.5326 0.8461 +vn -0.0231 -0.5337 0.8454 +vn -0.0167 -0.5315 0.8469 +vn -0.0115 0.9931 0.1166 +vn -0.2468 0.9648 0.0903 +vn -0.2720 0.9584 0.0871 +vn -0.4692 -0.8811 0.0586 +vn -0.4422 -0.8634 -0.2428 +vn -0.1629 -0.7743 -0.6115 +vn -0.8208 -0.5705 0.0277 +vn -0.4116 -0.3669 -0.8343 +vn -0.4626 -0.3997 -0.7914 +vn 0.0175 -0.0465 -0.9988 +vn -0.0228 0.1108 0.9936 +vn -0.0237 0.1116 0.9935 +vn 0.0245 -0.0794 -0.9965 +vn -0.8508 0.5223 -0.0571 +vn 0.0258 -0.0401 -0.9989 +vn -0.0221 0.1101 0.9937 +vn 0.0275 -0.0584 -0.9979 +vn 0.2056 -0.7742 -0.5986 +vn 0.0245 -0.0813 -0.9964 +vn 0.0188 -0.0847 -0.9962 +vn 0.0317 -0.0769 -0.9965 +vn 0.5092 0.8588 -0.0561 +vn -0.2564 0.9633 -0.0793 +vn -0.0064 0.9970 -0.0770 +vn -0.2574 0.9630 -0.0793 +vn 0.5015 0.8610 0.0848 +vn -0.0194 0.0845 0.9962 +vn -0.0257 0.0831 0.9962 +vn -0.0269 0.0796 0.9965 +vn -0.0316 0.0778 0.9965 +vn 0.4737 -0.8773 0.0770 +vn 0.2471 -0.9658 0.0793 +vn -0.0130 0.0880 0.9960 +vn 0.0124 -0.0886 -0.9960 +vn -0.4919 0.8673 -0.0765 +vn -0.4908 0.8695 0.0552 +vn -0.0191 0.0744 0.9970 +vn -0.0276 0.0849 0.9960 +vn 0.0058 -0.9970 0.0769 +vn 0.0179 -0.0732 -0.9972 +vn -0.0175 0.0723 0.9972 +vn -0.0000 1.0000 -0.0000 +vn -0.6913 0.7224 -0.0137 +vn -0.6866 0.7268 -0.0164 +vn -0.6866 0.7269 -0.0164 +vn -0.9995 -0.0225 -0.0198 +vn -0.9996 -0.0215 -0.0195 +vn -0.9997 -0.0204 -0.0132 +vn 0.9996 0.0218 0.0198 +vn 0.9995 0.0219 0.0211 +vn 0.9995 0.0219 0.0212 +vn 0.7120 0.6937 0.1084 +vn 0.0218 -0.9998 0.0004 +vn -0.0219 0.9998 -0.0004 +vn 0.7222 0.6915 0.0143 +vn 0.7177 0.6962 0.0114 +vn 0.7178 0.6962 0.0114 +vn -0.0215 0.9997 -0.0065 +vn -0.7223 -0.6915 -0.0143 +vn 0.6840 -0.7257 -0.0735 +vn -0.0240 0.9903 0.1367 +vn -0.7119 -0.6955 -0.0974 +vn 0.6914 -0.7223 0.0137 +vn 0.9996 0.0221 0.0198 +vn 0.7133 0.7008 0.0086 +vn 0.0216 -0.9995 -0.0223 +vn 0.9997 0.0214 0.0129 +vn 0.9996 0.0224 0.0194 +vn -0.7160 -0.6683 0.2018 +vn 0.6760 -0.6972 0.2388 +vn 0.0152 -0.9532 0.3021 +vn 0.9998 0.0183 0.0063 +vn 0.9997 0.0214 0.0120 +vn -0.0211 0.9997 -0.0125 +vn 0.6807 -0.7326 0.0013 +vn -0.6818 0.7313 -0.0192 +vn -0.7115 -0.7022 -0.0258 +vn 0.9999 0.0132 0.0010 +vn 0.9998 0.0178 0.0053 +vn -0.9998 -0.0175 -0.0068 +vn -0.9997 -0.0205 -0.0125 +vn -0.9998 -0.0172 -0.0061 +vn -0.9999 -0.0124 -0.0017 +vn 0.7217 0.5509 -0.4191 +vn -0.6730 0.5748 -0.4654 +vn -0.0146 0.9421 -0.3351 +vn -0.6772 0.6901 -0.2553 +vn 0.7177 0.6614 -0.2177 +vn -0.9999 -0.0119 -0.0014 +vn -1.0000 -0.0090 -0.0000 +vn 0.7248 0.3812 -0.5739 +vn -0.6698 0.3978 -0.6269 +vn -0.0046 0.5403 -0.8415 +vn 0.0094 -0.8044 0.5940 +vn 0.6718 -0.5868 0.4521 +vn -0.7201 -0.5625 0.4063 +vn -0.0089 0.7833 -0.6216 +vn -0.0034 0.3980 -0.9174 +vn -0.7296 -0.2790 0.6244 +vn 0.6726 -0.2912 0.6802 +vn 0.0034 -0.4005 0.9163 +vn 1.0000 0.0092 -0.0006 +vn 0.9999 0.0122 0.0007 +vn 0.0049 -0.5692 0.8222 +vn 0.6685 -0.4135 0.6182 +vn -0.7232 -0.3964 0.5655 +vn -0.9991 -0.0027 -0.0415 +vn -0.9991 -0.0025 -0.0414 +vn 0.7354 0.1694 -0.6561 +vn -0.0414 0.1162 0.9924 +vn -0.7354 -0.1695 0.6562 +vn -0.6727 0.2899 -0.6807 +vn 0.7296 0.2777 -0.6249 +vn -1.0000 -0.0080 -0.0005 +vn -1.0000 -0.0055 0.0005 +vn 1.0000 0.0054 -0.0014 +vn 1.0000 0.0070 -0.0009 +vn 0.7018 0.6472 0.2977 +vn -0.6819 0.6748 0.2824 +vn 0.0276 -0.9356 -0.3520 +vn -0.9995 -0.0216 -0.0229 +vn -0.9994 -0.0207 -0.0281 +vn -0.9993 -0.0182 -0.0341 +vn -0.9994 -0.0205 -0.0289 +vn -0.6847 0.7239 0.0848 +vn 0.9995 0.0227 0.0230 +vn 0.9994 0.0218 0.0283 +vn 0.0235 -0.9932 -0.1144 +vn -0.9995 -0.0222 -0.0226 +vn -0.6751 0.5630 0.4767 +vn 0.0312 -0.8103 -0.5851 +vn -0.9992 -0.0112 -0.0387 +vn -0.9992 -0.0173 -0.0350 +vn -0.6792 -0.5801 -0.4496 +vn 0.9994 0.0211 0.0291 +vn 0.9992 0.0187 0.0343 +vn -0.0290 0.9128 0.4074 +vn 0.6777 -0.6896 -0.2551 +vn -0.6990 -0.6617 -0.2713 +vn -0.7006 -0.3366 -0.6292 +vn 0.6942 -0.3512 -0.6283 +vn -0.0387 0.4682 0.8828 +vn 0.9992 0.0114 0.0392 +vn 0.9992 0.0175 0.0354 +vn 0.9992 0.0104 0.0397 +vn 0.9991 0.0032 0.0416 +vn 0.6879 0.5405 0.4844 +vn -0.0335 0.7463 0.6647 +vn 0.6647 -0.6033 -0.4407 +vn -0.0413 0.1344 0.9901 +vn 0.9991 0.0027 0.0414 +vn 0.7080 0.0928 0.7001 +vn 0.7083 0.0866 0.7005 +vn -0.7049 0.0969 0.7026 +vn -0.7053 0.0905 0.7032 +vn -0.7053 0.0904 0.7032 +vn -0.9992 -0.0030 -0.0405 +vn -0.9992 -0.0100 -0.0387 +vn 0.0385 -0.4821 -0.8753 +vn -0.6951 0.3437 0.6314 +vn 0.7013 0.3294 0.6322 +vn 0.0415 -0.1162 -0.9924 +vn -1.0000 -0.0053 0.0014 +vn 0.7052 -0.0898 -0.7033 +vn 0.7056 -0.0839 -0.7037 +vn 1.0000 0.0053 -0.0013 +vn 0.7049 -0.0956 -0.7028 +vn -0.7081 -0.0916 -0.7002 +vn -0.7084 -0.0860 -0.7006 +vn -0.7084 -0.0859 -0.7006 +vn 0.0415 -0.1319 -0.9904 +vn 0.0043 -0.9756 -0.2197 +vn 0.0044 -0.9756 -0.2197 +vn -0.0023 -0.9931 0.1171 +vn -0.0023 -0.9931 0.1170 +vn -0.0024 -0.9931 0.1171 +vn 0.6774 -0.1770 0.7140 +vn 0.9991 0.0025 0.0414 +vn -0.6774 0.1770 -0.7140 +vn -0.7086 -0.0803 -0.7010 +vn 0.0026 -0.2449 0.9695 +vn 0.7086 0.0803 0.7010 +vn -0.0026 0.2449 -0.9695 +vn -0.7056 0.0839 0.7037 +vn -0.9996 -0.0221 -0.0198 +vn -0.9996 -0.0224 -0.0194 +vn -0.9997 -0.0214 -0.0129 +vn -0.7222 -0.6915 -0.0143 +vn -0.7118 -0.6956 -0.0974 +vn -0.9995 -0.0219 -0.0211 +vn -0.9995 -0.0219 -0.0212 +vn -0.9994 -0.0218 -0.0283 +vn -0.9995 -0.0228 -0.0232 +vn 0.9996 0.0224 0.0198 +vn -0.9996 -0.0218 -0.0198 +vn -0.7160 -0.6683 0.2019 +vn -0.7115 -0.7023 -0.0258 +vn -0.9998 -0.0183 -0.0063 +vn -0.9997 -0.0214 -0.0120 +vn -0.9998 -0.0178 -0.0054 +vn -0.9999 -0.0131 -0.0009 +vn -0.9999 -0.0123 -0.0007 +vn -1.0000 -0.0092 0.0006 +vn -0.7200 -0.5626 0.4063 +vn -0.7295 -0.2790 0.6245 +vn 1.0000 0.0091 -0.0007 +vn 0.9999 0.0123 0.0007 +vn -0.7232 -0.3964 0.5656 +vn -0.9991 -0.0027 -0.0414 +vn 0.7353 0.1695 -0.6562 +vn -0.7353 -0.1695 0.6562 +vn -1.0000 -0.0070 0.0009 +vn -1.0000 -0.0057 0.0019 +vn 1.0000 0.0055 -0.0014 +vn -0.9992 -0.0187 -0.0343 +vn -0.9994 -0.0210 -0.0291 +vn -0.6989 -0.6618 -0.2714 +vn 0.9995 0.0221 0.0226 +vn -0.9992 -0.0114 -0.0392 +vn -0.9992 -0.0176 -0.0354 +vn -0.6792 -0.5802 -0.4496 +vn 0.0413 -0.1319 -0.9904 +vn -0.9992 -0.0104 -0.0397 +vn -0.9991 -0.0032 -0.0416 +vn -0.7005 -0.3367 -0.6293 +vn 0.0414 -0.1162 -0.9924 +vn -1.0000 -0.0053 0.0013 +vn -0.7080 -0.0916 -0.7003 +vn -0.7083 -0.0860 -0.7007 +vn -0.7083 -0.0859 -0.7007 +vn -0.7086 -0.0803 -0.7011 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt 0.686647 0.000000 +vt 0.870176 0.996278 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.782584 0.965408 +vt 0.870573 0.970227 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.833010 0.965282 +vt 0.908785 0.026051 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.968598 0.070112 +vt 0.979071 0.026051 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.968598 0.371019 +vt 0.757324 0.262250 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.173427 0.241164 +vt 0.758439 0.080128 +vt -0.973130 0.033128 +vt -0.123087 0.241439 +vt 0.978437 0.000000 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt 0.737072 0.000128 +vt 0.908263 0.000000 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.409642 -0.009898 +vt 0.677629 0.482142 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.240570 0.058726 +vt 0.669677 0.481452 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.786789 0.246652 +vt 0.991724 0.699406 +vt 0.928489 0.277215 +vt 0.873308 0.505274 +vt 0.786789 0.155990 +vt 0.958960 0.029326 +vt 0.991724 0.483440 +vt 0.977373 0.702462 +vt -0.140978 0.246673 +vt 0.958492 0.010078 +vt -0.156145 0.246590 +vt 0.929566 0.080357 +vt -0.144664 0.252235 +vt 0.984385 0.731379 +vt 0.945934 0.020741 +vt -0.159831 0.252152 +vt 0.984385 0.500820 +vt 0.989649 0.087406 +vt 0.706860 0.007022 +vt 0.847263 0.989602 +vt 0.686599 0.714388 +vt 0.721837 0.007060 +vt 0.884682 0.006674 +vt 0.720919 0.017861 +vt 0.673632 0.527027 +vt 0.872079 0.017335 +vt 0.705942 0.017823 +vt 0.673632 0.731676 +vt 0.690157 0.523535 +vt 0.802894 0.958412 +vt 0.847659 0.963551 +vt 0.695298 0.714388 +vt 0.661237 0.495044 +vt 0.817871 0.958374 +vt 0.885205 0.032725 +vt 0.661237 0.722645 +vt 0.693293 0.503638 +vt 0.944329 0.029337 +vt 0.981154 0.731379 +vt 0.977373 0.486830 +vt 0.989649 0.263822 +vt 0.873305 0.723869 +vt 0.981154 0.500820 +vt 0.870573 0.032734 +vt 0.693293 0.761173 +vt 0.679412 0.527027 +vt 0.695298 0.493838 +vt 0.679412 0.731676 +vt 0.826600 0.493835 +vt 0.826977 0.731673 +vt 0.826600 0.714385 +vt 0.814491 0.495042 +vt 0.122435 0.638558 +vt 0.015922 0.839080 +vt 0.835047 0.699404 +vt 0.993361 0.510073 +vt 0.758428 0.504317 +vt 0.072861 0.638558 +vt 0.015474 0.619132 +vt 0.835047 0.483438 +vt 0.845328 0.702461 +vt 0.015197 0.626266 +vt 0.014109 0.491099 +vt 0.993356 0.728667 +vt 0.758425 0.722912 +vt 0.833436 0.500823 +vt 0.891028 0.725398 +vt 0.672547 0.500827 +vt 0.752235 0.729690 +vt 0.667246 0.727168 +vt 0.891033 0.506802 +vt 0.752238 0.507120 +vt 0.071993 0.783837 +vt 0.969610 0.493832 +vt 0.987699 0.731670 +vt 0.641343 0.509140 +vt 0.689355 0.726560 +vt 0.969610 0.714382 +vt 0.122436 0.783837 +vt 0.641344 0.743247 +vt 0.833436 0.731382 +vt 0.845328 0.486829 +vt 0.814491 0.722643 +vt 0.825052 0.503733 +vt 0.016195 0.832047 +vt 0.634466 0.494220 +vt 0.825052 0.761267 +vt 0.826977 0.527024 +vt 0.022424 0.783234 +vt 0.035852 0.889154 +vt 0.043016 0.971597 +vt 0.706398 0.505224 +vt 0.072863 0.808180 +vt 0.028940 0.807392 +vt 0.010039 0.882150 +vt 0.137154 0.974703 +vt 0.631023 0.892124 +vt 0.649326 0.890699 +vt 0.121379 0.984023 +vt 0.648470 0.892315 +vt 0.072864 0.783142 +vt 0.043889 0.943476 +vt 0.078385 0.805896 +vt 0.075977 0.941215 +vt 0.613560 0.946909 +vt 0.672547 0.731385 +vt 0.701510 0.486829 +vt 0.669481 0.490576 +vt 0.072863 0.646796 +vt 0.648470 0.506013 +vt 0.080915 0.841605 +vt 0.968560 0.503835 +vt 0.102906 0.865583 +vt 0.634467 0.887149 +vt 0.987699 0.527021 +vt 0.968560 0.761369 +vt 0.690090 0.495972 +vt 0.701510 0.702461 +vt 0.603150 0.865583 +vt 0.014109 0.884028 +vt 0.706395 0.729929 +vt 0.816556 0.714481 +vt 0.023239 0.646888 +vt 0.040534 0.495932 +vt 0.081188 0.621686 +vt 0.007711 0.495744 +vt 0.041481 0.497122 +vt 0.080911 0.628820 +vt 0.003028 0.888966 +vt 0.041481 0.887645 +vt 0.060838 0.971173 +vt 0.631023 0.505822 +vt 0.649326 0.500176 +vt 0.081188 0.834572 +vt 0.805889 0.743046 +vt 0.122312 0.806766 +vt 0.988155 0.503653 +vt 0.115555 0.935422 +vt 0.904138 0.912557 +vt 0.988155 0.735605 +vt 0.813022 0.494763 +vt 0.890960 0.912565 +vt 0.735836 0.641861 +vt 0.693936 0.468644 +vt 0.027417 0.833361 +vt 0.420996 0.961603 +vt 0.032040 0.784613 +vt 0.284612 0.483847 +vt 0.656925 0.504187 +vt 0.681549 0.720168 +vt 0.066750 0.834450 +vt 0.299225 0.449509 +vt 0.999708 0.720167 +vt 0.989627 0.743247 +vt 0.121899 0.832034 +vt 0.693936 0.449159 +vt 0.420996 0.999935 +vt 0.008277 0.862094 +vt 0.082562 0.831201 +vt 0.741580 0.718717 +vt 0.678836 0.505353 +vt 0.815743 0.487362 +vt 0.741523 0.585977 +vt 0.678836 0.699564 +vt 0.553315 0.945729 +vt 0.982243 0.588758 +vt 0.460393 1.018433 +vt 0.949871 0.788878 +vt 0.982305 0.727355 +vt 0.668954 0.502598 +vt 0.949657 0.691167 +vt 0.979056 0.490574 +vt 0.078628 0.952623 +vt 0.035428 0.887064 +vt 0.812426 0.730862 +vt 0.971935 0.642457 +vt 0.805889 0.532195 +vt 0.173975 1.012235 +vt 0.908785 0.976444 +vt 0.726484 0.788878 +vt 0.984477 0.500479 +vt 0.894591 0.976453 +vt 0.737043 0.505375 +vt 0.726270 0.691167 +vt 0.987420 0.694407 +vt 0.999899 0.506981 +vt 0.968797 0.500648 +vt 0.989626 0.516135 +vt 0.652223 0.697892 +vt 0.656922 0.730164 +vt 0.681740 0.506981 +vt 0.985798 0.713641 +vt 0.053549 0.993732 +vt 0.043551 0.873068 +vt 0.522988 0.991572 +vt 0.062665 0.961706 +vt 0.169656 0.991799 +vt 0.060838 0.809705 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +s 1 +usemtl CabnetDoors +f 6976/14414/4995 6977/14418/4995 6978/14423/4995 6979/14427/4995 6980/14431/4995 6981/14437/4995 6982/14440/4995 6983/14443/4995 +f 6981/14436/4996 6980/14432/4996 6984/14447/4996 6985/14450/4996 +f 6986/14452/4997 6987/14456/4997 6988/14458/4997 6989/14459/4997 +f 6990/14463/4998 6991/14464/4998 6977/14419/4998 6976/14413/4998 +f 6991/14465/4999 6990/14462/4999 6992/14467/4999 6993/14468/4999 +f 6994/14470/4999 6995/14473/4999 6992/14467/4999 6990/14462/4999 +f 6994/14471/4998 6990/14463/4998 6976/14413/4998 6996/14475/4998 +f 6989/14460/4996 6981/14436/4996 6985/14450/4996 6986/14453/4996 +f 6996/14476/4995 6976/14414/4995 6983/14443/4995 6982/14440/4995 6981/14437/4995 6989/14461/4995 6988/14457/4995 6997/14479/4995 +f 6979/14428/5000 6980/14433/5000 6998/14482/5000 6999/14486/5000 +f 6989/14461/4995 6988/14457/4995 6982/14440/4995 6981/14437/4995 +f 6983/14444/4999 6976/14415/4999 6996/14477/4999 6997/14480/4999 +f 6981/14438/5001 6982/14441/5001 7000/14490/5001 7001/14492/5001 +f 7001/14492/5002 7000/14490/5002 7002/14494/5002 7003/14497/5002 +f 7004/14500/5002 7007/14508/5002 7006/14505/5002 7005/14503/5002 +f 6982/14442/5003 6979/14429/5003 6999/14487/5003 7000/14491/5003 +f 6976/14416/5004 7004/14500/5004 7005/14503/5004 6983/14445/5004 +f 6978/14424/5005 7009/14515/5005 7008/14511/5005 6977/14420/5005 +f 6983/14446/5006 7005/14504/5006 7009/14516/5006 6978/14425/5006 +f 6980/14434/5007 6981/14439/5007 7001/14493/5007 6998/14484/5007 +f 6977/14421/5008 7008/14512/5008 7004/14501/5008 6976/14417/5008 +f 7003/14498/5009 7002/14495/5009 7010/14520/5009 7011/14524/5009 +f 7012/14527/5010 7006/14506/5010 7007/14509/5010 7013/14529/5010 +f 7008/14513/4998 7015/14532/4998 7014/14530/4998 7013/14528/4998 +f 7000/14491/4998 6999/14487/4998 7010/14519/4998 7002/14496/4998 +f 6999/14488/5011 6998/14483/5011 7016/14536/5011 7017/14541/5011 +f 7008/14513/4998 7013/14528/4998 7007/14510/4998 7004/14502/4998 +f 6998/14484/4996 7001/14493/4996 7003/14499/4996 7011/14522/4996 +f 7005/14504/4996 7006/14507/4996 7012/14525/4996 7009/14516/4996 +f 7016/14537/4996 7018/14545/4996 7019/14548/4996 7020/14552/4996 +f 7015/14532/4998 7022/14559/4998 7021/14555/4998 7014/14530/4998 +f 6998/14485/4996 7011/14523/4996 7018/14546/4996 7016/14538/4996 +f 7011/14524/5012 7010/14520/5012 7023/14562/5012 7018/14547/5012 +f 7009/14517/5011 7024/14564/5011 7015/14533/5011 7008/14514/5011 +f 7012/14526/4996 7025/14568/4996 7024/14565/5013 7009/14518/4996 +f 7013/14529/5012 7014/14531/5012 7025/14569/5012 7012/14527/5012 +f 7010/14521/4998 6999/14489/4998 7017/14542/4998 7023/14563/4998 +f 7026/14570/5014 7020/14554/5014 7027/14574/5014 7028/14575/5014 +f 7029/14577/5015 7032/14585/5016 7031/14583/5017 7030/14580/5017 +f 7018/14547/5012 7023/14562/5012 7033/14587/5012 7019/14549/5012 +f 7015/14534/4998 7034/14590/4998 7030/14582/4998 7022/14560/4998 +f 7025/14568/4996 7036/14597/4996 7035/14593/5018 7024/14565/5013 +f 7023/14563/4998 7017/14542/4998 7037/14599/4998 7033/14588/4998 +f 7014/14531/5012 7021/14556/5012 7036/14596/5012 7025/14569/5012 +f 7020/14553/5019 7019/14550/5019 7038/14602/5019 7027/14573/5019 +f 7016/14539/4996 7020/14554/4996 7026/14570/4996 7039/14604/4996 +f 7040/14607/5020 7039/14605/5011 7026/14571/5011 7041/14610/5020 +f 7042/14613/5020 7029/14578/5020 7030/14581/5011 7034/14591/5011 +f 7040/14608/5020 7041/14611/5020 7029/14579/5020 7042/14614/5020 +f 7024/14566/5021 7042/14615/5021 7034/14592/5021 7015/14535/5021 +f 7030/14582/5022 7031/14584/5022 7043/14617/5022 7022/14560/5022 +f 7036/14597/5023 7045/14621/5023 7044/14618/5023 7035/14593/5023 +f 7017/14543/5024 7040/14609/5025 7042/14615/5026 7024/14566/5013 +f 7017/14543/5024 7016/14540/5027 7039/14606/5027 7040/14609/5025 +f 7046/14625/5028 7047/14629/5028 7048/14633/5029 7049/14637/5030 +f 7050/14641/5031 7051/14644/5032 7052/14647/5033 7053/14650/5031 +f 7033/14588/5034 7037/14599/5035 7051/14645/5036 7050/14642/5034 +f 7019/14551/5037 7033/14589/5037 7050/14643/5037 7038/14603/5037 +f 7041/14611/5038 7054/14654/5039 7032/14586/5016 7029/14579/5015 +f 7035/14594/5018 7044/14619/5040 7051/14646/5036 7037/14600/5035 +f 7022/14561/5041 7043/14616/5041 7055/14658/5041 7021/14557/5041 +f 7021/14558/5042 7055/14656/5042 7045/14622/5042 7036/14598/5042 +f 7041/14612/5038 7026/14572/5043 7028/14576/5043 7054/14655/5039 +f 7044/14619/5044 7056/14659/5045 7052/14648/5033 7051/14646/5032 +f 7057/14662/5046 7058/14666/5047 7059/14670/5048 7053/14651/5048 +f 7027/14573/5049 7038/14602/5049 7059/14671/5049 7047/14630/5049 +f 7048/14634/5050 7047/14631/5051 7059/14672/5051 7058/14667/5052 +f 7028/14575/5053 7027/14574/5053 7047/14632/5053 7046/14626/5053 +f 7049/14638/5054 7060/14674/5055 7061/14677/5056 7046/14627/5057 +f 7045/14623/5058 7057/14663/5059 7056/14660/5045 7044/14620/5058 +f 7032/14585/5060 7060/14675/5055 7049/14639/5054 7031/14583/5060 +f 7055/14657/5061 7058/14668/5047 7057/14664/5046 7045/14624/5061 +f 7043/14616/5062 7048/14635/5050 7058/14669/5052 7055/14658/5062 +f 7031/14584/5063 7049/14640/5030 7048/14636/5029 7043/14617/5063 +f 7054/14654/5064 7061/14678/5056 7060/14676/5055 7032/14586/5065 +f 7057/14665/5059 7053/14652/5066 7052/14649/5033 7056/14661/5045 +f 7038/14603/5067 7050/14643/5067 7053/14653/5067 7059/14673/5067 +f 7054/14655/5064 7028/14576/5068 7046/14628/5068 7061/14679/5056 +f 6993/14468/4999 6992/14467/4999 7062/14680/4999 7063/14681/4999 +f 6985/14451/4999 6984/14448/4999 7063/14681/4999 7062/14680/4999 +f 7062/14680/4999 6992/14467/4999 6995/14473/4999 6987/14455/4999 +f 6987/14455/4999 6986/14454/4999 6985/14451/4999 7062/14680/4999 +f 6991/14466/5069 6993/14469/5069 6978/14426/5069 6977/14422/5069 +f 6979/14430/5069 7063/14682/5069 6984/14449/5069 6980/14435/5069 +f 6978/14426/5069 6993/14469/5069 7063/14682/5069 6979/14430/5069 +f 6997/14481/4997 6995/14474/4997 6994/14472/4997 6996/14478/4997 +f 6988/14458/4997 6987/14456/4997 6995/14474/4997 6997/14481/4997 +f 7037/14601/5035 7017/14544/5024 7024/14567/5013 7035/14595/5018 +f 7064/14683/5070 7065/14684/5070 7066/14685/5071 7067/14687/5072 +f 7068/14688/5073 7067/14686/5073 7069/14691/5074 7070/14693/5075 +f 7071/14695/5076 7072/14696/5076 7073/14697/5077 7074/14699/5078 +f 7073/14697/5079 7075/14700/5079 7076/14702/5079 7077/14704/5079 +f 7078/14706/5080 7079/14707/5080 7080/14708/5080 7081/14710/5080 +f 7082/14712/5081 7065/14684/5081 7083/14713/5081 7075/14701/5081 +f 7072/14696/5082 7082/14711/5082 7075/14700/5082 7073/14697/5082 +f 7084/14714/5083 7085/14715/5084 7082/14711/5082 7072/14696/5082 +f 7085/14716/5085 7066/14685/5085 7065/14684/5081 7082/14712/5081 +f 7086/14717/5086 7078/14705/5086 7081/14709/5086 7087/14718/5086 +f 7068/14689/5086 7088/14721/5086 7078/14705/5086 7086/14717/5086 +f 7088/14720/5080 7089/14722/5080 7079/14707/5080 7078/14706/5080 +f 7080/14708/5087 7074/14698/5087 7090/14724/5087 7091/14725/5087 +f 7075/14701/5088 7083/14713/5088 7092/14726/5088 7076/14703/5088 +f 7087/14718/5089 7081/14709/5089 7093/14728/5089 7094/14730/5089 +f 7079/14707/5090 7071/14694/5090 7074/14698/5090 7080/14708/5090 +f 7089/14722/5090 7095/14732/5090 7071/14694/5090 7079/14707/5090 +f 7095/14731/5091 7084/14714/5091 7072/14696/5076 7071/14695/5076 +f 7085/14715/5084 7084/14714/5083 7096/14733/5092 7097/14735/5092 +f 7089/14722/5093 7088/14720/5093 7098/14736/5093 7099/14738/5093 +f 7084/14714/5091 7095/14731/5091 7100/14739/5094 7096/14733/5095 +f 7101/14741/5070 7083/14713/5070 7065/14684/5070 7064/14683/5070 +f 7098/14737/5096 7070/14692/5096 7102/14744/5096 7103/14746/5096 +f 7100/14740/5097 7099/14738/5097 7104/14747/5097 7105/14749/5097 +f 7099/14738/5098 7098/14736/5098 7103/14745/5098 7104/14747/5098 +f 7096/14733/5095 7100/14739/5094 7105/14750/5099 7106/14751/5100 +f 7066/14685/5085 7085/14716/5085 7097/14734/5101 7107/14752/5101 +f 7095/14732/5102 7089/14722/5102 7099/14738/5102 7100/14740/5102 +f 7067/14687/5072 7066/14685/5071 7107/14752/5103 7069/14690/5103 +f 7088/14721/5104 7068/14689/5104 7070/14692/5104 7098/14737/5104 +f 7106/14751/5100 7105/14750/5099 7108/14753/5105 7109/14754/5106 +f 7102/14744/5107 7110/14755/5108 7111/14758/5109 7112/14759/5110 +f 7113/14760/5111 7106/14751/5111 7109/14754/5111 7114/14762/5111 +f 7110/14755/5112 7115/14765/5112 7116/14767/5112 7111/14758/5112 +f 7107/14752/5113 7097/14734/5113 7113/14761/5113 7115/14766/5113 +f 7069/14690/5114 7107/14752/5114 7115/14766/5114 7110/14756/5114 +f 7097/14735/5115 7096/14733/5115 7106/14751/5115 7113/14760/5115 +f 7070/14693/5075 7069/14691/5074 7110/14757/5108 7102/14743/5107 +f 7112/14759/5110 7111/14758/5109 7117/14771/5116 7118/14772/5117 +f 7114/14762/5118 7109/14754/5118 7119/14773/5118 7120/14775/5118 +f 7111/14758/5119 7116/14767/5119 7121/14776/5119 7117/14771/5119 +f 7116/14768/5120 7114/14763/5120 7120/14774/5120 7121/14777/5120 +f 7104/14747/5121 7103/14745/5121 7122/14778/5121 7123/14781/5121 +f 7105/14750/5122 7104/14748/5122 7123/14783/5122 7108/14753/5122 +f 7103/14746/5123 7102/14744/5123 7112/14759/5123 7122/14780/5123 +f 7115/14766/5124 7113/14761/5124 7114/14764/5124 7116/14769/5124 +f 7121/14777/5125 7120/14774/5125 7124/14785/5125 7125/14786/5125 +f 7126/14788/5126 7118/14772/5126 7127/14789/5126 7128/14790/5126 +f 7129/14792/5127 7130/14794/5127 7131/14796/5127 7132/14798/5127 +f 7130/14794/5128 7126/14787/5128 7128/14791/5128 7131/14796/5128 +f 7109/14754/5106 7108/14753/5105 7129/14793/5129 7119/14773/5130 +f 7123/14782/5131 7122/14779/5131 7126/14787/5131 7130/14794/5131 +f 7108/14753/5132 7123/14783/5132 7130/14795/5132 7129/14793/5132 +f 7122/14780/5133 7112/14759/5133 7118/14772/5133 7126/14788/5133 +f 7133/14799/5134 7134/14801/5134 7135/14803/5135 7136/14804/5135 +f 7124/14784/5136 7137/14807/5136 7138/14808/5136 7139/14810/5136 +f 7140/14813/5137 7141/14815/5137 7142/14817/5137 7143/14818/5137 +f 7128/14790/5138 7127/14789/5138 7144/14821/5138 7145/14823/5138 +f 7117/14770/5139 7121/14777/5139 7125/14786/5139 7146/14827/5139 +f 7120/14775/5140 7119/14773/5140 7137/14807/5140 7124/14784/5140 +f 7118/14772/5117 7117/14771/5116 7146/14826/5141 7127/14789/5142 +f 7119/14773/5130 7129/14793/5129 7132/14797/5143 7137/14807/5144 +f 7077/14704/5145 7076/14702/5145 7147/14828/5145 7148/14830/5145 +f 7092/14726/5146 7149/14831/5146 7150/14833/5146 7151/14837/5146 +f 7093/14727/5147 7091/14725/5147 7152/14838/5147 7153/14840/5147 +f 7149/14832/5148 7094/14729/5149 7154/14842/5150 7150/14834/5151 +f 7083/14713/5152 7101/14741/5152 7149/14831/5152 7092/14726/5152 +f 7074/14699/5078 7073/14697/5077 7077/14704/5153 7090/14723/5154 +f 7081/14710/5155 7080/14708/5155 7091/14725/5155 7093/14727/5155 +f 7101/14742/5156 7087/14719/5156 7094/14729/5149 7149/14832/5148 +f 7151/14836/5157 7150/14835/5157 7155/14844/5157 7156/14847/5157 +f 7153/14840/5158 7152/14838/5158 7157/14848/5158 7158/14851/5158 +f 7150/14835/5151 7154/14843/5150 7159/14854/5159 7155/14844/5160 +f 7154/14843/5161 7153/14841/5161 7158/14852/5161 7159/14854/5161 +f 7090/14723/5154 7077/14704/5153 7148/14830/5162 7160/14856/5163 +f 7076/14703/5164 7092/14726/5164 7151/14837/5164 7147/14829/5164 +f 7091/14725/5165 7090/14724/5165 7160/14855/5165 7152/14838/5165 +f 7094/14730/5166 7093/14728/5166 7153/14841/5166 7154/14843/5166 +f 7159/14854/5167 7158/14852/5167 7161/14857/5167 7162/14859/5167 +f 7157/14849/5168 7163/14860/5168 7164/14861/5168 7165/14863/5168 +f 7166/14865/5169 7156/14845/5169 7167/14868/5169 7168/14870/5169 +f 7163/14860/5170 7169/14872/5171 7170/14873/5172 7164/14861/5173 +f 7148/14830/5174 7147/14828/5174 7166/14867/5174 7169/14872/5174 +f 7160/14856/5163 7148/14830/5162 7169/14872/5171 7163/14860/5170 +f 7147/14829/5175 7151/14837/5175 7156/14846/5175 7166/14866/5175 +f 7152/14839/5176 7160/14856/5176 7163/14860/5176 7157/14849/5176 +f 7168/14870/5177 7167/14868/5177 7141/14815/5177 7140/14813/5177 +f 7164/14861/5173 7170/14873/5172 7171/14874/5178 7172/14876/5178 +f 7170/14873/5179 7168/14871/5179 7140/14814/5180 7171/14874/5180 +f 7167/14868/5181 7173/14877/5181 7133/14800/5182 7141/14815/5183 +f 7155/14844/5160 7159/14854/5159 7162/14859/5184 7173/14878/5185 +f 7158/14853/5186 7157/14850/5186 7165/14864/5186 7161/14858/5186 +f 7156/14847/5187 7155/14844/5187 7173/14878/5187 7167/14869/5187 +f 7169/14872/5188 7166/14867/5188 7168/14871/5188 7170/14873/5188 +f 7174/14879/5189 7175/14881/5189 7176/14882/5189 7177/14884/5189 +f 7127/14789/5142 7146/14826/5141 7178/14887/5190 7144/14821/5190 +f 7175/14881/5191 7172/14875/5191 7179/14890/5192 7176/14882/5192 +f 7137/14807/5144 7132/14797/5143 7180/14893/5193 7138/14808/5193 +f 7165/14864/5194 7164/14862/5194 7172/14875/5191 7175/14881/5191 +f 7162/14859/5195 7161/14857/5195 7174/14880/5196 7134/14801/5197 +f 7173/14878/5185 7162/14859/5184 7134/14801/5134 7133/14799/5134 +f 7161/14858/5198 7165/14864/5198 7175/14881/5198 7174/14879/5198 +f 7181/14896/5199 7139/14811/5199 7138/14809/5199 7180/14894/5199 +f 7145/14824/5200 7181/14896/5199 7180/14894/5199 7182/14897/5199 +f 7144/14822/5200 7178/14888/5200 7181/14896/5199 7145/14824/5200 +f 7178/14888/5200 7183/14899/5199 7139/14811/5199 7181/14896/5199 +f 7184/14901/5201 7143/14819/5201 7142/14816/5201 7136/14805/5202 +f 7177/14885/5201 7184/14901/5201 7136/14805/5202 7135/14802/5202 +f 7176/14883/5203 7179/14891/5201 7184/14901/5201 7177/14885/5201 +f 7179/14891/5201 7185/14902/5201 7143/14819/5201 7184/14901/5201 +f 7132/14798/5204 7131/14796/5204 7182/14898/5204 7180/14895/5204 +f 7172/14876/5178 7171/14874/5178 7185/14903/5205 7179/14892/5205 +f 7146/14827/5206 7125/14786/5206 7183/14900/5206 7178/14889/5206 +f 7134/14801/5197 7174/14880/5196 7177/14886/5207 7135/14803/5207 +f 7131/14796/5208 7128/14791/5208 7145/14825/5208 7182/14898/5208 +f 7171/14874/5180 7140/14814/5180 7143/14820/5209 7185/14903/5209 +f 7125/14786/5210 7124/14785/5210 7139/14812/5210 7183/14900/5210 +f 7141/14815/5183 7133/14800/5182 7136/14806/5211 7142/14817/5211 +f 7186/14905/5070 7187/14906/5070 7188/14907/5071 7189/14909/5072 +f 7190/14910/5212 7189/14908/5212 7191/14912/5213 7192/14913/5214 +f 7193/14914/5087 7194/14916/5087 7195/14919/5087 7196/14921/5087 +f 7197/14923/5080 7198/14924/5080 7193/14915/5080 7199/14927/5080 +f 7200/14929/5081 7187/14906/5081 7201/14930/5081 7202/14931/5081 +f 7203/14933/5082 7200/14928/5082 7202/14932/5082 7204/14934/5082 +f 7205/14935/5082 7206/14936/5082 7200/14928/5082 7203/14933/5082 +f 7206/14937/5085 7188/14907/5085 7187/14906/5081 7200/14929/5081 +f 7207/14938/5215 7197/14922/5215 7199/14926/5215 7208/14939/5215 +f 7190/14910/5215 7209/14941/5215 7197/14922/5215 7207/14938/5215 +f 7209/14940/5080 7210/14942/5080 7198/14924/5080 7197/14923/5080 +f 7202/14931/5088 7201/14930/5088 7211/14944/5088 7212/14946/5088 +f 7208/14939/5216 7199/14926/5216 7213/14947/5216 7214/14949/5216 +f 7215/14950/5217 7208/14939/5218 7214/14949/5219 7216/14952/5220 +f 7198/14925/5090 7217/14954/5090 7194/14916/5090 7193/14914/5090 +f 7210/14943/5090 7218/14956/5090 7217/14954/5090 7198/14925/5090 +f 7206/14936/5092 7205/14935/5092 7219/14957/5092 7220/14959/5092 +f 7210/14942/5093 7209/14940/5093 7221/14960/5093 7222/14962/5093 +f 7205/14935/5221 7218/14955/5221 7223/14965/5094 7219/14957/5095 +f 7207/14938/5222 7186/14904/5222 7189/14908/5212 7190/14910/5212 +f 7208/14939/5218 7215/14950/5217 7186/14904/5222 7207/14938/5222 +f 7215/14951/5070 7201/14930/5070 7187/14906/5070 7186/14905/5070 +f 7224/14966/5113 7220/14958/5113 7225/14968/5113 7226/14970/5113 +f 7221/14961/5223 7192/14913/5223 7227/14972/5223 7228/14974/5223 +f 7223/14964/5097 7222/14963/5097 7229/14975/5097 7230/14978/5097 +f 7222/14962/5098 7221/14960/5098 7228/14973/5098 7229/14977/5098 +f 7188/14907/5085 7206/14937/5085 7220/14958/5101 7224/14966/5101 +f 7218/14956/5102 7210/14943/5102 7222/14963/5102 7223/14964/5102 +f 7189/14909/5072 7188/14907/5071 7224/14966/5103 7191/14911/5103 +f 7209/14941/5224 7190/14910/5224 7192/14913/5224 7221/14961/5224 +f 7230/14979/5122 7229/14976/5122 7231/14983/5122 7232/14984/5122 +f 7229/14977/5121 7228/14973/5121 7233/14985/5121 7231/14981/5121 +f 7234/14989/5100 7230/14979/5099 7232/14984/5105 7235/14990/5106 +f 7227/14972/5225 7236/14992/5226 7237/14993/5227 7238/14994/5228 +f 7191/14911/5114 7224/14966/5114 7226/14970/5114 7236/14991/5114 +f 7220/14959/5115 7219/14957/5115 7234/14988/5115 7225/14967/5115 +f 7192/14913/5214 7191/14912/5213 7236/14992/5226 7227/14972/5225 +f 7219/14957/5095 7223/14965/5094 7230/14980/5099 7234/14988/5100 +f 7238/14994/5228 7237/14993/5227 7239/14996/5229 7240/14997/5230 +f 7241/15000/5118 7235/14990/5118 7242/15001/5118 7243/15002/5118 +f 7237/14993/5119 7244/15006/5119 7245/15007/5119 7239/14996/5119 +f 7244/15004/5120 7241/14998/5120 7243/15003/5120 7245/15008/5120 +f 7228/14974/5231 7227/14972/5231 7238/14994/5231 7233/14987/5231 +f 7226/14970/5124 7225/14968/5124 7241/14999/5124 7244/15005/5124 +f 7236/14992/5112 7226/14971/5112 7244/15006/5112 7237/14993/5112 +f 7225/14969/5111 7234/14989/5111 7235/14990/5111 7241/15000/5111 +f 7243/15002/5140 7242/15001/5140 7246/15009/5140 7247/15010/5140 +f 7239/14995/5139 7245/15008/5139 7248/15012/5139 7249/15014/5139 +f 7245/15008/5125 7243/15003/5125 7247/15011/5125 7248/15012/5125 +f 7250/15015/5232 7240/14997/5232 7251/15017/5232 7252/15018/5232 +f 7235/14990/5106 7232/14984/5105 7253/15020/5233 7242/15001/5234 +f 7231/14982/5131 7233/14986/5131 7250/15016/5131 7254/15023/5131 +f 7232/14984/5132 7231/14983/5132 7254/15022/5132 7253/15020/5132 +f 7233/14987/5235 7238/14994/5235 7240/14997/5235 7250/15015/5235 +f 7255/15024/5236 7256/15026/5236 7257/15028/5135 7258/15029/5135 +f 7247/15010/5237 7246/15009/5237 7259/15032/5237 7260/15034/5237 +f 7261/15038/5137 7262/15040/5137 7263/15042/5137 7264/15043/5137 +f 7252/15018/5238 7251/15017/5238 7265/15047/5238 7266/15049/5238 +f 7240/14997/5230 7239/14996/5229 7249/15013/5239 7251/15017/5240 +f 7242/15001/5234 7253/15020/5233 7267/15053/5241 7246/15009/5144 +f 7254/15023/5128 7250/15016/5128 7252/15019/5128 7268/15055/5128 +f 7253/15021/5127 7254/15023/5127 7268/15055/5127 7267/15054/5127 +f 7211/14944/5146 7216/14953/5146 7269/15056/5146 7270/15058/5146 +f 7213/14948/5147 7196/14920/5147 7271/15062/5147 7272/15064/5147 +f 7216/14952/5220 7214/14949/5219 7273/15065/5242 7269/15057/5243 +f 7214/14949/5244 7213/14947/5244 7272/15063/5244 7273/15065/5244 +f 7204/14934/5079 7202/14932/5079 7212/14945/5079 7274/15066/5079 +f 7201/14930/5152 7215/14951/5152 7216/14953/5152 7211/14944/5152 +f 7194/14917/5245 7204/14934/5245 7274/15066/5153 7195/14918/5154 +f 7199/14927/5155 7193/14915/5155 7196/14920/5155 7213/14948/5155 +f 7269/15057/5243 7273/15065/5242 7275/15067/5246 7276/15068/5247 +f 7273/15065/5248 7272/15063/5248 7277/15070/5248 7275/15067/5248 +f 7271/15060/5176 7278/15074/5176 7279/15075/5176 7280/15076/5176 +f 7281/15080/5175 7270/15058/5175 7282/15082/5175 7283/15085/5175 +f 7274/15066/5145 7212/14945/5145 7281/15079/5145 7284/15088/5145 +f 7195/14918/5154 7274/15066/5153 7284/15088/5162 7278/15072/5163 +f 7212/14946/5164 7211/14944/5164 7270/15058/5164 7281/15080/5164 +f 7196/14921/5165 7195/14919/5165 7278/15073/5165 7271/15061/5165 +f 7280/15076/5168 7279/15075/5168 7285/15090/5168 7286/15092/5168 +f 7283/15086/5169 7282/15083/5169 7287/15095/5169 7288/15097/5169 +f 7279/15075/5170 7289/15098/5171 7290/15099/5172 7285/15090/5173 +f 7289/15098/5188 7283/15087/5188 7288/15096/5188 7290/15099/5188 +f 7272/15064/5158 7271/15062/5158 7280/15077/5158 7277/15069/5158 +f 7270/15059/5157 7269/15057/5157 7276/15068/5157 7282/15084/5157 +f 7284/15089/5174 7281/15081/5174 7283/15087/5174 7289/15098/5174 +f 7278/15074/5163 7284/15089/5162 7289/15098/5171 7279/15075/5170 +f 7290/15099/5179 7288/15096/5179 7261/15039/5180 7291/15100/5180 +f 7287/15095/5181 7292/15101/5181 7255/15025/5182 7262/15040/5183 +f 7293/15103/5249 7286/15093/5249 7294/15105/5249 7295/15106/5249 +f 7292/15102/5250 7296/15108/5251 7256/15026/5236 7255/15024/5236 +f 7275/15067/5252 7277/15070/5252 7293/15104/5252 7296/15108/5252 +f 7276/15068/5247 7275/15067/5246 7296/15108/5251 7292/15102/5250 +f 7277/15071/5186 7280/15078/5186 7286/15093/5186 7293/15103/5186 +f 7282/15084/5187 7276/15068/5187 7292/15102/5187 7287/15094/5187 +f 7295/15106/5253 7294/15105/5253 7297/15109/5253 7298/15111/5253 +f 7251/15017/5240 7249/15013/5239 7299/15115/5254 7265/15047/5254 +f 7246/15009/5144 7267/15053/5241 7300/15118/5193 7259/15032/5193 +f 7294/15105/5191 7301/15121/5191 7302/15123/5192 7297/15109/5192 +f 7285/15090/5173 7290/15099/5172 7291/15100/5178 7301/15122/5178 +f 7288/15097/5177 7287/15095/5177 7262/15040/5177 7261/15038/5177 +f 7286/15093/5194 7285/15091/5194 7301/15121/5191 7294/15105/5191 +f 7296/15108/5255 7293/15104/5255 7295/15107/5256 7256/15026/5257 +f 7303/15126/5199 7260/15035/5199 7259/15033/5199 7300/15119/5199 +f 7266/15050/5200 7303/15126/5199 7300/15119/5199 7304/15128/5199 +f 7265/15048/5200 7299/15116/5200 7303/15127/5199 7266/15051/5200 +f 7299/15116/5200 7305/15130/5199 7260/15036/5199 7303/15127/5199 +f 7306/15132/5201 7264/15044/5201 7263/15041/5201 7258/15030/5202 +f 7298/15112/5201 7306/15132/5201 7258/15030/5202 7257/15027/5202 +f 7297/15110/5203 7302/15124/5201 7306/15133/5201 7298/15113/5201 +f 7302/15124/5201 7307/15134/5201 7264/15045/5201 7306/15133/5201 +f 7267/15054/5204 7268/15055/5204 7304/15129/5204 7300/15120/5204 +f 7301/15122/5178 7291/15100/5178 7307/15135/5205 7302/15125/5205 +f 7249/15014/5206 7248/15012/5206 7305/15131/5206 7299/15117/5206 +f 7256/15026/5257 7295/15107/5256 7298/15114/5258 7257/15028/5258 +f 7268/15055/5208 7252/15019/5208 7266/15052/5208 7304/15129/5208 +f 7291/15100/5180 7261/15039/5180 7264/15046/5209 7307/15135/5209 +f 7248/15012/5210 7247/15011/5210 7260/15037/5210 7305/15131/5210 +f 7262/15040/5183 7255/15025/5182 7258/15031/5211 7263/15042/5211 +o Chair.019 +v 10.622954 0.415382 3.201616 +v 10.622954 0.429951 3.201616 +v 10.672141 0.429951 3.195086 +v 11.070596 0.429951 3.142193 +v 11.119782 0.429951 3.135663 +v 11.119782 0.415382 3.135663 +v 11.070596 0.415382 3.142193 +v 10.672141 0.415382 3.195086 +v 11.170397 0.429951 3.516950 +v 11.170397 0.415382 3.516950 +v 11.170397 0.400812 3.516950 +v 11.125175 0.400812 3.522954 +v 11.070596 0.400812 3.142193 +v 11.119782 0.400812 3.135663 +v 10.673569 0.415382 3.582903 +v 10.673569 0.429951 3.582903 +v 10.718791 0.415382 3.576900 +v 10.718791 0.429951 3.576900 +v 10.673569 0.400812 3.582903 +v 10.718791 0.400812 3.576900 +v 10.622954 0.400812 3.201616 +v 10.672141 0.400812 3.195086 +v 11.096152 0.432961 3.113492 +v 11.081332 0.432961 3.115459 +v 11.081924 0.421009 3.119917 +v 11.096745 0.421009 3.117950 +v 11.080263 0.426967 3.107401 +v 11.095082 0.426967 3.105434 +v 10.640325 0.419106 3.176461 +v 10.654933 0.419106 3.174522 +v 10.653271 0.425064 3.162006 +v 10.638663 0.425064 3.163945 +v 10.639714 0.434699 3.171865 +v 10.654323 0.434699 3.169925 +v 11.079441 0.431853 3.101213 +v 11.094261 0.431853 3.099246 +v 10.652431 0.433592 3.155679 +v 10.637823 0.433592 3.157619 +v 10.636209 0.592772 3.145459 +v 10.638101 0.593879 3.159705 +v 11.094539 0.592141 3.101333 +v 11.079719 0.592141 3.103300 +v 11.092648 0.591033 3.087087 +v 11.090225 0.829840 3.068845 +v 11.092116 0.830948 3.083091 +v 10.633788 0.831579 3.127217 +v 10.635679 0.832686 3.141463 +v 11.077827 0.591033 3.089054 +v 10.652708 0.593879 3.157766 +v 10.650817 0.592772 3.143520 +v 11.093461 0.830737 3.093214 +v 11.068827 0.870951 3.082877 +v 11.070022 0.870348 3.091879 +v 10.651632 0.832325 3.149659 +v 10.637024 0.832325 3.151598 +v 10.659539 0.869634 3.144548 +v 10.676266 0.864490 3.142728 +v 11.075406 0.829840 3.070812 +v 10.639297 0.608202 3.168718 +v 10.650287 0.832686 3.139524 +v 10.648396 0.831579 3.125278 +v 11.077297 0.830948 3.085058 +v 11.067123 0.869953 3.070046 +v 11.095734 0.606614 3.110335 +v 11.080914 0.606614 3.112302 +v 11.078641 0.830737 3.095181 +v 10.653905 0.608202 3.166779 +v 10.658343 0.870373 3.135536 +v 10.675069 0.865229 3.133715 +v 10.673366 0.864232 3.120885 +v 10.997271 0.913073 3.098546 +v 10.995731 0.914244 3.090497 +v 10.730725 0.911897 3.122738 +v 10.731441 0.911148 3.130863 +v 11.049110 0.867524 3.072626 +v 11.050814 0.868521 3.085456 +v 10.986264 0.902898 3.092636 +v 10.984429 0.901824 3.078815 +v 11.052009 0.867919 3.094460 +v 10.656640 0.869376 3.122705 +v 10.740297 0.900855 3.122326 +v 10.738462 0.899781 3.108506 +v 10.728890 0.910823 3.108918 +v 10.993896 0.913170 3.076677 +v 10.739358 0.901346 3.130575 +v 10.987803 0.901727 3.100685 +v 11.125175 0.415382 3.522954 +v 11.125175 0.429951 3.522954 +v 11.147156 0.438060 3.325380 +v 11.152946 0.443651 3.324611 +v 11.135696 0.443651 3.194666 +v 11.129906 0.438060 3.195435 +v 11.130081 0.429976 3.195411 +v 11.125643 0.437950 3.163320 +v 11.126163 0.430300 3.165888 +v 11.166677 0.429903 3.322788 +v 11.166503 0.437987 3.322812 +v 11.183753 0.437987 3.452756 +v 11.183928 0.429903 3.452733 +v 11.178209 0.443828 3.453492 +v 11.182407 0.439408 3.485116 +v 11.187643 0.434055 3.482064 +v 11.152874 0.424135 3.324621 +v 11.160888 0.424311 3.323557 +v 11.178137 0.424311 3.453501 +v 11.170123 0.424135 3.454565 +v 11.160960 0.443828 3.323548 +v 11.170196 0.443651 3.454555 +v 11.149253 0.437987 3.192867 +v 11.143710 0.443828 3.193602 +v 11.147331 0.429976 3.325357 +v 11.164581 0.429976 3.455301 +v 11.135624 0.424135 3.194676 +v 11.143638 0.424311 3.193612 +v 11.187392 0.426646 3.478835 +v 11.181308 0.421521 3.477386 +v 11.174384 0.439247 3.486109 +v 11.173285 0.421360 3.478379 +v 11.168050 0.426713 3.481431 +v 11.149427 0.429903 3.192843 +v 11.144993 0.437881 3.160774 +v 11.139201 0.443408 3.159638 +v 11.131953 0.424773 3.167023 +v 11.139959 0.424940 3.165903 +v 11.145512 0.430231 3.163342 +v 11.164406 0.438060 3.455324 +v 11.122439 0.420977 3.137845 +v 11.128452 0.416357 3.140653 +v 11.136452 0.416497 3.139482 +v 11.141792 0.420919 3.135321 +v 11.140966 0.427313 3.130440 +v 11.131195 0.443241 3.160759 +v 11.138668 0.402967 3.111789 +v 11.137606 0.407418 3.105122 +v 11.121614 0.427371 3.132964 +v 11.118250 0.407458 3.107630 +v 11.119314 0.403008 3.114297 +v 11.134953 0.431932 3.127633 +v 11.131420 0.410634 3.101025 +v 11.126953 0.431793 3.128803 +v 11.123426 0.410537 3.102234 +v 11.115915 0.380352 3.090039 +v 11.117121 0.378323 3.097774 +v 11.135272 0.380334 3.087542 +v 11.128984 0.381800 3.082673 +v 11.120993 0.381756 3.083906 +v 11.125498 0.399792 3.118395 +v 11.133492 0.399889 3.117185 +v 11.126928 0.345795 3.067185 +v 11.118937 0.345756 3.068420 +v 11.123406 0.376856 3.102643 +v 11.115078 0.342751 3.082391 +v 11.121370 0.341467 3.087304 +v 11.136476 0.378304 3.095275 +v 11.131398 0.376901 3.101410 +v 11.129361 0.341506 3.086069 +v 11.134434 0.342735 3.079893 +v 11.177461 0.349401 3.553671 +v 11.176579 0.348454 3.545689 +v 11.181988 -0.002953 3.586436 +v 11.182870 -0.002007 3.594419 +v 11.133222 0.344511 3.072099 +v 11.121815 0.001491 2.986170 +v 11.115521 0.002774 2.981256 +v 11.192019 0.350077 3.557517 +v 11.183982 0.350056 3.558407 +v 11.189391 -0.001352 3.599155 +v 11.197428 -0.001331 3.598264 +v 11.103670 -0.000270 2.996462 +v 11.109963 -0.001553 3.001374 +v 11.113865 0.344527 3.074596 +v 11.186480 0.425574 3.515791 +v 11.191460 0.421603 3.510809 +v 11.168300 0.434122 3.484661 +v 11.172119 0.421652 3.513430 +v 11.178449 0.425454 3.516727 +v 11.184524 0.412305 3.501613 +v 11.176493 0.412185 3.502549 +v 11.171515 0.416156 3.507530 +v 11.174974 0.403231 3.534943 +v 11.181459 0.405075 3.539407 +v 11.186998 0.398698 3.520252 +v 11.178963 0.398640 3.521152 +v 11.174146 0.400566 3.527354 +v 11.190853 0.416106 3.504909 +v 11.180948 0.371230 3.536108 +v 11.176157 0.372479 3.542501 +v 11.193483 0.400542 3.524717 +v 11.195494 0.372464 3.539862 +v 11.188985 0.371267 3.535216 +v 11.189495 0.405133 3.538509 +v 11.183529 0.375406 3.554998 +v 11.191566 0.375443 3.554105 +v 11.194313 0.403207 3.532306 +v 11.196359 0.374194 3.547714 +v 11.196798 0.349392 3.551031 +v 11.195916 0.348446 3.543049 +v 11.177020 0.374209 3.550352 +v 11.181358 0.347770 3.539202 +v 11.189396 0.347791 3.538313 +v 11.194805 -0.003617 3.579061 +v 11.186768 -0.003637 3.579951 +v 11.102458 0.001507 2.988667 +v 11.201325 -0.002962 3.583797 +v 11.123027 -0.000286 2.993964 +v 11.112743 0.000611 2.991315 +v 11.117955 -0.001514 3.000140 +v 11.107531 0.002736 2.982491 +v 11.192099 -0.002484 3.589107 +v 11.202208 -0.002015 3.591778 +v 10.628165 0.438060 3.394274 +v 10.633956 0.443651 3.393506 +v 10.616706 0.443651 3.263561 +v 10.610916 0.438060 3.264329 +v 10.611091 0.429976 3.264306 +v 10.606652 0.437950 3.232214 +v 10.607171 0.430300 3.234782 +v 10.659147 0.424311 3.522396 +v 10.664937 0.429903 3.521627 +v 10.668402 0.426646 3.547729 +v 10.662317 0.421521 3.546280 +v 10.633883 0.424135 3.393515 +v 10.641897 0.424311 3.392452 +v 10.651134 0.424135 3.523459 +v 10.641970 0.443828 3.392442 +v 10.651206 0.443651 3.523450 +v 10.659220 0.443828 3.522386 +v 10.647513 0.437987 3.391706 +v 10.664762 0.437987 3.521650 +v 10.630263 0.437987 3.261761 +v 10.624720 0.443828 3.262497 +v 10.628340 0.429976 3.394251 +v 10.645590 0.429976 3.524195 +v 10.616633 0.424135 3.263570 +v 10.624647 0.424311 3.262506 +v 10.655395 0.439247 3.555004 +v 10.663417 0.439408 3.554011 +v 10.654294 0.421360 3.547273 +v 10.649058 0.426713 3.550326 +v 10.645415 0.438060 3.524218 +v 10.649310 0.434122 3.553555 +v 10.647687 0.429903 3.391683 +v 10.630438 0.429903 3.261738 +v 10.626003 0.437881 3.229669 +v 10.620211 0.443408 3.228533 +v 10.612963 0.424773 3.235918 +v 10.620969 0.424940 3.234797 +v 10.626521 0.430231 3.232237 +v 10.612205 0.443241 3.229653 +v 10.615962 0.431932 3.196527 +v 10.607963 0.431793 3.197697 +v 10.603449 0.420977 3.206739 +v 10.609462 0.416357 3.209546 +v 10.617462 0.416497 3.208376 +v 10.622802 0.420919 3.204216 +v 10.614502 0.399889 3.186080 +v 10.619678 0.402967 3.180684 +v 10.606507 0.399792 3.187289 +v 10.621976 0.427313 3.199335 +v 10.618615 0.407418 3.174017 +v 10.602623 0.427371 3.201858 +v 10.599260 0.407458 3.176525 +v 10.600323 0.403008 3.183192 +v 10.596925 0.380352 3.158934 +v 10.598129 0.378323 3.166669 +v 10.612431 0.410634 3.169919 +v 10.616282 0.380334 3.156436 +v 10.609994 0.381800 3.151567 +v 10.604436 0.410537 3.171129 +v 10.602003 0.381756 3.152800 +v 10.614231 0.344511 3.140992 +v 10.607938 0.345795 3.136080 +v 10.599947 0.345756 3.137314 +v 10.594874 0.344527 3.143490 +v 10.604417 0.376856 3.171538 +v 10.596087 0.342751 3.151286 +v 10.602381 0.341467 3.156198 +v 10.617486 0.378304 3.164170 +v 10.612408 0.376901 3.170304 +v 10.658471 0.349401 3.622566 +v 10.657589 0.348454 3.614583 +v 10.662997 -0.002953 3.655331 +v 10.663879 -0.002007 3.663313 +v 10.602825 0.001491 3.055064 +v 10.596532 0.002774 3.050151 +v 10.673028 0.350077 3.626411 +v 10.664991 0.350056 3.627302 +v 10.670401 -0.001352 3.668049 +v 10.678437 -0.001331 3.667159 +v 10.584681 -0.000270 3.065356 +v 10.590974 -0.001553 3.070269 +v 10.615444 0.342735 3.148788 +v 10.610372 0.341506 3.154964 +v 10.653129 0.421652 3.582325 +v 10.659459 0.425454 3.585621 +v 10.665534 0.412305 3.570508 +v 10.657503 0.412185 3.571444 +v 10.652523 0.416156 3.576425 +v 10.668653 0.434055 3.550958 +v 10.655154 0.400566 3.596248 +v 10.655985 0.403231 3.603837 +v 10.659972 0.398640 3.590046 +v 10.671864 0.416106 3.573803 +v 10.674493 0.400542 3.593611 +v 10.668008 0.398698 3.589147 +v 10.667489 0.425574 3.584686 +v 10.662469 0.405075 3.608301 +v 10.670506 0.405133 3.607403 +v 10.672469 0.421603 3.579704 +v 10.676503 0.372464 3.608757 +v 10.669994 0.371267 3.604111 +v 10.664539 0.375406 3.623893 +v 10.672575 0.375443 3.622999 +v 10.675323 0.403207 3.601200 +v 10.677368 0.374194 3.616608 +v 10.677809 0.349392 3.619925 +v 10.658031 0.374209 3.619247 +v 10.661958 0.371230 3.605004 +v 10.670405 0.347791 3.607208 +v 10.662369 0.347770 3.608098 +v 10.657166 0.372479 3.611395 +v 10.675815 -0.003617 3.647955 +v 10.667778 -0.003637 3.648845 +v 10.583468 0.001507 3.057561 +v 10.604037 -0.000286 3.062858 +v 10.676927 0.348446 3.611944 +v 10.682336 -0.002962 3.652691 +v 10.593752 0.000611 3.060210 +v 10.598965 -0.001514 3.069035 +v 10.588540 0.002736 3.051385 +v 10.673107 -0.002484 3.658002 +v 10.683217 -0.002015 3.660672 +vn -0.1316 -0.0000 -0.9913 +vn 0.9913 -0.0000 -0.1316 +vn -0.0000 -1.0000 -0.0000 +vn -0.9913 -0.0000 0.1316 +vn 0.1316 -0.0000 0.9913 +vn 0.0157 0.9929 0.1181 +vn -0.0347 -0.9646 -0.2613 +vn -0.0562 -0.9044 -0.4230 +vn -0.9019 -0.0911 -0.4221 +vn -0.0213 -0.9868 -0.1608 +vn 0.0226 0.9852 0.1699 +vn 0.7844 -0.0779 -0.6153 +vn 0.6331 -0.1146 -0.7656 +vn -0.8382 -0.0987 -0.5363 +vn -0.0811 -0.7874 -0.6110 +vn -0.1054 -0.5992 -0.7937 +vn 0.1312 0.0768 0.9884 +vn -0.1312 -0.0768 -0.9884 +vn 0.9358 -0.2916 -0.1983 +vn 0.8595 0.5027 -0.0927 +vn 0.1276 0.1047 0.9863 +vn 0.1350 0.1119 0.9845 +vn 0.1356 0.1062 0.9851 +vn 0.4224 -0.0656 -0.9040 +vn 0.8545 0.4967 -0.1521 +vn 0.1288 0.0768 0.9887 +vn 0.1111 -0.5359 0.8369 +vn -0.8369 0.5287 0.1415 +vn 0.7893 -0.6113 -0.0573 +vn 0.0675 -0.8531 0.5173 +vn 0.1082 -0.5326 0.8394 +vn 0.1050 -0.5337 0.8391 +vn 0.1115 -0.5315 0.8397 +vn 0.0062 0.9931 0.1170 +vn -0.2303 0.9648 0.1266 +vn -0.2557 0.9584 0.1272 +vn -0.4549 -0.8811 0.1289 +vn -0.4738 -0.8634 -0.1732 +vn -0.2534 -0.7743 -0.5798 +vn -0.8072 -0.5705 0.1515 +vn -0.5330 -0.3669 -0.7625 +vn -0.5769 -0.3997 -0.7123 +vn -0.1337 -0.0465 -0.9899 +vn 0.1276 0.1108 0.9856 +vn 0.1267 0.1116 0.9856 +vn -0.1264 -0.0794 -0.9888 +vn -0.8497 0.5223 0.0722 +vn -0.1255 -0.0401 -0.9913 +vn 0.1284 0.1101 0.9856 +vn -0.1237 -0.0584 -0.9906 +vn 0.1127 -0.7742 -0.6228 +vn -0.1264 -0.0813 -0.9886 +vn -0.1320 -0.0847 -0.9876 +vn -0.1193 -0.0769 -0.9899 +vn 0.4949 0.8588 -0.1325 +vn -0.2655 0.9633 -0.0396 +vn -0.0180 0.9970 -0.0751 +vn -0.2664 0.9630 -0.0395 +vn 0.5086 0.8610 0.0080 +vn 0.1315 0.0845 0.9877 +vn 0.1252 0.0831 0.9887 +vn 0.1241 0.0796 0.9891 +vn 0.1194 0.0778 0.9898 +vn 0.4799 -0.8773 0.0045 +vn 0.2562 -0.9658 0.0410 +vn 0.1378 0.0880 0.9866 +vn -0.1383 -0.0886 -0.9864 +vn -0.4978 0.8673 -0.0013 +vn -0.4768 0.8695 0.1287 +vn 0.1318 0.0744 0.9885 +vn 0.1233 0.0849 0.9887 +vn 0.0174 -0.9970 0.0752 +vn -0.1330 -0.0732 -0.9884 +vn 0.1335 0.0723 0.9884 +vn -0.0000 1.0000 -0.0000 +vn -0.6855 0.7224 0.0910 +vn -0.6812 0.7268 0.0876 +vn -0.6812 0.7269 0.0875 +vn -0.9911 -0.0225 0.1315 +vn -0.9910 -0.0215 0.1318 +vn -0.9902 -0.0204 0.1380 +vn 0.9911 0.0218 -0.1316 +vn 0.9912 0.0219 -0.1302 +vn 0.9913 0.0219 -0.1301 +vn 0.7202 0.6937 -0.0005 +vn 0.0216 -0.9998 -0.0029 +vn -0.0217 0.9998 0.0029 +vn 0.7161 0.6915 -0.0951 +vn 0.7112 0.6962 -0.0972 +vn -0.0222 0.9997 -0.0032 +vn -0.7161 -0.6915 0.0951 +vn 0.6651 -0.7257 -0.1761 +vn -0.0031 0.9903 0.1387 +vn -0.7184 -0.6955 0.0113 +vn 0.6855 -0.7223 -0.0910 +vn 0.9911 0.0221 -0.1315 +vn 0.7064 0.7008 -0.0993 +vn 0.0180 -0.9995 -0.0253 +vn 0.9902 0.0214 -0.1383 +vn 0.9910 0.0224 -0.1319 +vn -0.6773 -0.6683 0.3078 +vn 0.7043 -0.6972 0.1339 +vn 0.0607 -0.9532 0.2963 +vn 0.9893 0.0183 -0.1449 +vn 0.9900 0.0214 -0.1392 +vn -0.0227 0.9997 -0.0092 +vn 0.6731 -0.7326 -0.1016 +vn -0.6769 0.7313 0.0841 +vn -0.7072 -0.7022 0.0821 +vn 0.9886 0.0132 -0.1502 +vn 0.9891 0.0178 -0.1459 +vn -0.9894 -0.0175 0.1444 +vn -0.9901 -0.0205 0.1388 +vn -0.9893 -0.0172 0.1451 +vn -0.9887 -0.0124 0.1495 +vn 0.6501 0.5509 -0.5233 +vn -0.7357 0.5748 -0.3583 +vn -0.0651 0.9421 -0.3290 +vn -0.7080 0.6901 -0.1500 +vn 0.6766 0.6614 -0.3237 +vn -0.9886 -0.0119 0.1498 +vn -0.9885 -0.0090 0.1512 +vn 0.6297 0.3812 -0.6769 +vn -0.7569 0.3978 -0.5185 +vn -0.1318 0.5403 -0.8311 +vn 0.0991 -0.8044 0.5858 +vn 0.7324 -0.5868 0.3453 +vn -0.6504 -0.5625 0.5104 +vn -0.1028 0.7833 -0.6131 +vn -0.1420 0.3980 -0.9063 +vn -0.6268 -0.2790 0.7275 +vn 0.7677 -0.2912 0.5708 +vn 0.1419 -0.4005 0.9052 +vn 0.9884 0.0092 -0.1518 +vn 0.9885 0.0122 -0.1504 +vn 0.1291 -0.5692 0.8120 +vn 0.7543 -0.4135 0.5100 +vn -0.6294 -0.3964 0.6684 +vn -0.9939 -0.0027 0.1100 +vn -0.9939 -0.0025 0.1101 +vn 0.6277 0.1694 -0.7598 +vn 0.1091 0.1162 0.9872 +vn -0.6277 -0.1695 0.7598 +vn -0.7679 0.2899 -0.5712 +vn 0.6268 0.2777 -0.7280 +vn -0.9886 -0.0080 0.1507 +vn -0.9884 -0.0055 0.1517 +vn 0.9883 0.0054 -0.1526 +vn 0.9883 0.0070 -0.1521 +vn 0.7387 0.6472 0.1882 +vn -0.6313 0.6748 0.3822 +vn -0.0259 -0.9356 -0.3521 +vn -0.9915 -0.0216 0.1285 +vn -0.9922 -0.0207 0.1232 +vn -0.9929 -0.0182 0.1174 +vn -0.9923 -0.0205 0.1225 +vn -0.6640 0.7239 0.1873 +vn 0.9915 0.0227 -0.1283 +vn 0.9922 0.0218 -0.1230 +vn 0.0059 -0.9932 -0.1167 +vn -0.9914 -0.0222 0.1287 +vn -0.5953 0.5630 0.5733 +vn -0.0576 -0.8103 -0.5831 +vn -0.9936 -0.0112 0.1127 +vn -0.9930 -0.0173 0.1164 +vn -0.7394 -0.5801 -0.3417 +vn 0.9923 0.0211 -0.1223 +vn 0.9929 0.0187 -0.1171 +vn 0.0329 0.9128 0.4071 +vn 0.6314 -0.6896 -0.3547 +vn -0.7319 -0.6617 -0.1626 +vn -0.7876 -0.3366 -0.5160 +vn 0.5912 -0.3512 -0.7260 +vn 0.0952 0.4682 0.8785 +vn 0.9936 0.0114 -0.1123 +vn 0.9931 0.0175 -0.1161 +vn 0.9937 0.0104 -0.1118 +vn 0.9939 0.0032 -0.1099 +vn 0.7532 0.5405 0.3748 +vn 0.0673 0.7463 0.6621 +vn 0.5904 -0.6033 -0.5361 +vn 0.1088 0.1344 0.9849 +vn 0.9939 0.0027 -0.1101 +vn 0.8057 0.0928 0.5850 +vn 0.8061 0.0866 0.5854 +vn -0.5906 0.0969 0.8011 +vn -0.5909 0.0905 0.8017 +vn -0.5909 0.0904 0.8017 +vn -0.9938 -0.0030 0.1110 +vn -0.9936 -0.0100 0.1128 +vn -0.0942 -0.4821 -0.8711 +vn -0.5917 0.3437 0.7292 +vn 0.7888 0.3294 0.5189 +vn -0.1090 -0.1162 -0.9872 +vn -0.9883 -0.0053 0.1525 +vn 0.5908 -0.0898 -0.8018 +vn 0.5911 -0.0839 -0.8022 +vn 0.9883 0.0053 -0.1525 +vn 0.5906 -0.0956 -0.8013 +vn -0.8058 -0.0916 -0.5851 +vn -0.8061 -0.0860 -0.5855 +vn -0.8061 -0.0859 -0.5855 +vn -0.1087 -0.1319 -0.9853 +vn -0.0289 -0.9756 -0.2178 +vn -0.0289 -0.9756 -0.2179 +vn 0.0154 -0.9931 0.1161 +vn 0.0155 -0.9931 0.1161 +vn 0.0154 -0.9931 0.1160 +vn 0.7776 -0.1770 0.6034 +vn 0.9939 0.0025 -0.1101 +vn -0.7776 0.1770 -0.6034 +vn -0.8065 -0.0803 -0.5858 +vn 0.1492 -0.2449 0.9580 +vn 0.8065 0.0803 0.5858 +vn -0.1492 0.2449 -0.9580 +vn -0.5911 0.0839 0.8022 +vn -0.9911 -0.0221 0.1315 +vn -0.9910 -0.0224 0.1319 +vn -0.9901 -0.0214 0.1384 +vn -0.7184 -0.6956 0.0113 +vn -0.9912 -0.0219 0.1302 +vn -0.9913 -0.0219 0.1301 +vn -0.9922 -0.0218 0.1230 +vn -0.9915 -0.0228 0.1282 +vn 0.9911 0.0224 -0.1315 +vn -0.9911 -0.0218 0.1316 +vn -0.6772 -0.6683 0.3078 +vn -0.7072 -0.7023 0.0821 +vn -0.9893 -0.0183 0.1449 +vn -0.9900 -0.0214 0.1393 +vn -0.9891 -0.0178 0.1458 +vn -0.9886 -0.0131 0.1502 +vn -0.9885 -0.0123 0.1504 +vn -0.9884 -0.0092 0.1518 +vn -0.6503 -0.5626 0.5105 +vn 0.6268 0.2777 -0.7281 +vn -0.6267 -0.2790 0.7276 +vn 0.9884 0.0091 -0.1518 +vn 0.9885 0.0123 -0.1504 +vn -0.9939 -0.0027 0.1101 +vn 0.6277 0.1695 -0.7598 +vn -0.9883 -0.0070 0.1521 +vn -0.9882 -0.0057 0.1530 +vn 0.9883 0.0055 -0.1526 +vn -0.9929 -0.0187 0.1171 +vn -0.9923 -0.0210 0.1223 +vn -0.7319 -0.6618 -0.1626 +vn 0.9914 0.0221 -0.1287 +vn -0.9936 -0.0114 0.1123 +vn -0.9931 -0.0176 0.1161 +vn -0.7393 -0.5802 -0.3418 +vn -0.1089 -0.1319 -0.9853 +vn -0.9937 -0.0104 0.1118 +vn -0.9939 -0.0032 0.1099 +vn -0.7876 -0.3367 -0.5161 +vn -0.0943 -0.4821 -0.8710 +vn -0.1091 -0.1162 -0.9872 +vn -0.8057 -0.0916 -0.5852 +vn -0.8061 -0.0860 -0.5856 +vn -0.8061 -0.0859 -0.5856 +vn -0.8064 -0.0803 -0.5859 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt 0.686647 0.000000 +vt 0.870176 0.996278 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.782584 0.965408 +vt 0.870573 0.970227 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.833010 0.965282 +vt 0.908785 0.026051 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.968598 0.070112 +vt 0.979071 0.026051 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.968598 0.371019 +vt 0.757324 0.262250 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.173427 0.241164 +vt 0.758439 0.080128 +vt -0.973130 0.033128 +vt -0.123087 0.241439 +vt 0.978437 0.000000 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt 0.737072 0.000128 +vt 0.908263 0.000000 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.409642 -0.009898 +vt 0.677629 0.482142 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.240570 0.058726 +vt 0.669677 0.481452 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.786789 0.246652 +vt 0.991724 0.699406 +vt 0.928489 0.277215 +vt 0.873308 0.505274 +vt 0.786789 0.155990 +vt 0.958960 0.029326 +vt 0.991724 0.483440 +vt 0.977373 0.702462 +vt -0.140978 0.246673 +vt 0.958492 0.010078 +vt -0.156145 0.246590 +vt 0.929566 0.080357 +vt -0.144664 0.252235 +vt 0.984385 0.731379 +vt 0.945934 0.020741 +vt -0.159831 0.252152 +vt 0.984385 0.500820 +vt 0.989649 0.087406 +vt 0.706860 0.007022 +vt 0.847263 0.989602 +vt 0.686599 0.714388 +vt 0.721837 0.007060 +vt 0.884682 0.006674 +vt 0.720919 0.017861 +vt 0.673632 0.527027 +vt 0.872079 0.017335 +vt 0.705942 0.017823 +vt 0.673632 0.731676 +vt 0.690157 0.523535 +vt 0.802894 0.958412 +vt 0.847659 0.963551 +vt 0.695298 0.714388 +vt 0.661237 0.495044 +vt 0.817871 0.958374 +vt 0.885205 0.032725 +vt 0.661237 0.722645 +vt 0.693293 0.503638 +vt 0.944329 0.029337 +vt 0.981154 0.731379 +vt 0.977373 0.486830 +vt 0.989649 0.263822 +vt 0.873305 0.723869 +vt 0.981154 0.500820 +vt 0.870573 0.032734 +vt 0.693293 0.761173 +vt 0.679412 0.527027 +vt 0.695298 0.493838 +vt 0.679412 0.731676 +vt 0.826600 0.493835 +vt 0.826977 0.731673 +vt 0.826600 0.714385 +vt 0.814491 0.495042 +vt 0.122435 0.638558 +vt 0.015922 0.839080 +vt 0.835047 0.699404 +vt 0.993361 0.510073 +vt 0.758428 0.504317 +vt 0.072861 0.638558 +vt 0.015474 0.619132 +vt 0.835047 0.483438 +vt 0.845328 0.702461 +vt 0.015197 0.626266 +vt 0.014109 0.491099 +vt 0.993356 0.728667 +vt 0.758425 0.722912 +vt 0.833436 0.500823 +vt 0.891028 0.725398 +vt 0.672547 0.500827 +vt 0.752235 0.729690 +vt 0.667246 0.727168 +vt 0.891033 0.506802 +vt 0.752238 0.507120 +vt 0.071993 0.783837 +vt 0.969610 0.493832 +vt 0.987699 0.731670 +vt 0.641343 0.509140 +vt 0.689355 0.726560 +vt 0.969610 0.714382 +vt 0.122436 0.783837 +vt 0.641344 0.743247 +vt 0.833436 0.731382 +vt 0.845328 0.486829 +vt 0.814491 0.722643 +vt 0.825052 0.503733 +vt 0.016195 0.832047 +vt 0.634466 0.494220 +vt 0.825052 0.761267 +vt 0.826977 0.527024 +vt 0.022424 0.783234 +vt 0.035852 0.889154 +vt 0.043016 0.971597 +vt 0.706398 0.505224 +vt 0.072863 0.808180 +vt 0.028940 0.807392 +vt 0.010039 0.882150 +vt 0.137154 0.974703 +vt 0.631023 0.892124 +vt 0.649326 0.890699 +vt 0.121379 0.984023 +vt 0.648470 0.892315 +vt 0.072864 0.783142 +vt 0.043889 0.943476 +vt 0.078385 0.805896 +vt 0.075977 0.941215 +vt 0.613560 0.946909 +vt 0.672547 0.731385 +vt 0.701510 0.486829 +vt 0.669481 0.490576 +vt 0.072863 0.646796 +vt 0.648470 0.506013 +vt 0.080915 0.841605 +vt 0.968560 0.503835 +vt 0.102906 0.865583 +vt 0.634467 0.887149 +vt 0.987699 0.527021 +vt 0.968560 0.761369 +vt 0.690090 0.495972 +vt 0.701510 0.702461 +vt 0.603150 0.865583 +vt 0.014109 0.884028 +vt 0.706395 0.729929 +vt 0.816556 0.714481 +vt 0.023239 0.646888 +vt 0.040534 0.495932 +vt 0.081188 0.621686 +vt 0.007711 0.495744 +vt 0.041481 0.497122 +vt 0.080911 0.628820 +vt 0.003028 0.888966 +vt 0.041481 0.887645 +vt 0.060838 0.971173 +vt 0.631023 0.505822 +vt 0.649326 0.500176 +vt 0.081188 0.834572 +vt 0.805889 0.743046 +vt 0.122312 0.806766 +vt 0.988155 0.503653 +vt 0.115555 0.935422 +vt 0.904138 0.912557 +vt 0.988155 0.735605 +vt 0.813022 0.494763 +vt 0.890960 0.912565 +vt 0.735836 0.641861 +vt 0.693936 0.468644 +vt 0.027417 0.833361 +vt 0.420996 0.961603 +vt 0.032040 0.784613 +vt 0.284612 0.483847 +vt 0.656925 0.504187 +vt 0.681549 0.720168 +vt 0.066750 0.834450 +vt 0.299225 0.449509 +vt 0.999708 0.720167 +vt 0.989627 0.743247 +vt 0.121899 0.832034 +vt 0.693936 0.449159 +vt 0.420996 0.999935 +vt 0.008277 0.862094 +vt 0.082562 0.831201 +vt 0.741580 0.718717 +vt 0.678836 0.505353 +vt 0.815743 0.487362 +vt 0.741523 0.585977 +vt 0.678836 0.699564 +vt 0.553315 0.945729 +vt 0.982243 0.588758 +vt 0.460393 1.018433 +vt 0.949871 0.788878 +vt 0.982305 0.727355 +vt 0.668954 0.502598 +vt 0.949657 0.691167 +vt 0.979056 0.490574 +vt 0.078628 0.952623 +vt 0.035428 0.887064 +vt 0.812426 0.730862 +vt 0.971935 0.642457 +vt 0.805889 0.532195 +vt 0.173975 1.012235 +vt 0.908785 0.976444 +vt 0.726484 0.788878 +vt 0.984477 0.500479 +vt 0.894591 0.976453 +vt 0.737043 0.505375 +vt 0.726270 0.691167 +vt 0.987420 0.694407 +vt 0.999899 0.506981 +vt 0.968797 0.500648 +vt 0.989626 0.516135 +vt 0.652223 0.697892 +vt 0.656922 0.730164 +vt 0.681740 0.506981 +vt 0.985798 0.713641 +vt 0.053549 0.993732 +vt 0.043551 0.873068 +vt 0.522988 0.991572 +vt 0.062665 0.961706 +vt 0.169656 0.991799 +vt 0.060838 0.809705 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +s 1 +usemtl CabnetDoors +f 7308/15137/5259 7309/15141/5259 7310/15146/5259 7311/15150/5259 7312/15154/5259 7313/15160/5259 7314/15163/5259 7315/15166/5259 +f 7313/15159/5260 7312/15155/5260 7316/15170/5260 7317/15173/5260 +f 7318/15175/5261 7319/15179/5261 7320/15181/5261 7321/15182/5261 +f 7322/15186/5262 7323/15187/5262 7309/15142/5262 7308/15136/5262 +f 7323/15188/5263 7322/15185/5263 7324/15190/5263 7325/15191/5263 +f 7326/15193/5263 7327/15196/5263 7324/15190/5263 7322/15185/5263 +f 7326/15194/5262 7322/15186/5262 7308/15136/5262 7328/15198/5262 +f 7321/15183/5260 7313/15159/5260 7317/15173/5260 7318/15176/5260 +f 7328/15199/5259 7308/15137/5259 7315/15166/5259 7314/15163/5259 7313/15160/5259 7321/15184/5259 7320/15180/5259 7329/15202/5259 +f 7311/15151/5264 7312/15156/5264 7330/15205/5264 7331/15209/5264 +f 7321/15184/5259 7320/15180/5259 7314/15163/5259 7313/15160/5259 +f 7315/15167/5263 7308/15138/5263 7328/15200/5263 7329/15203/5263 +f 7313/15161/5265 7314/15164/5265 7332/15213/5265 7333/15215/5265 +f 7333/15215/5266 7332/15213/5266 7334/15217/5266 7335/15220/5266 +f 7336/15223/5266 7339/15231/5266 7338/15228/5266 7337/15226/5266 +f 7314/15165/5267 7311/15152/5267 7331/15210/5267 7332/15214/5267 +f 7308/15139/5268 7336/15223/5268 7337/15226/5268 7315/15168/5268 +f 7310/15147/5269 7341/15238/5269 7340/15234/5269 7309/15143/5269 +f 7315/15169/5270 7337/15227/5270 7341/15239/5270 7310/15148/5270 +f 7312/15157/5271 7313/15162/5271 7333/15216/5271 7330/15207/5271 +f 7309/15144/5272 7340/15235/5272 7336/15224/5272 7308/15140/5272 +f 7335/15221/5273 7334/15218/5273 7342/15243/5273 7343/15247/5273 +f 7344/15250/5274 7338/15229/5274 7339/15232/5274 7345/15252/5274 +f 7340/15236/5262 7347/15255/5262 7346/15253/5262 7345/15251/5262 +f 7332/15214/5262 7331/15210/5262 7342/15242/5262 7334/15219/5262 +f 7331/15211/5275 7330/15206/5275 7348/15259/5275 7349/15264/5275 +f 7340/15236/5262 7345/15251/5262 7339/15233/5262 7336/15225/5262 +f 7330/15207/5260 7333/15216/5260 7335/15222/5260 7343/15245/5260 +f 7337/15227/5260 7338/15230/5260 7344/15248/5260 7341/15239/5260 +f 7348/15260/5260 7350/15268/5260 7351/15271/5260 7352/15275/5260 +f 7347/15255/5262 7354/15282/5262 7353/15278/5262 7346/15253/5262 +f 7330/15208/5260 7343/15246/5260 7350/15269/5260 7348/15261/5260 +f 7343/15247/5276 7342/15243/5276 7355/15285/5276 7350/15270/5276 +f 7341/15240/5275 7356/15287/5275 7347/15256/5275 7340/15237/5275 +f 7344/15249/5260 7357/15291/5260 7356/15288/5277 7341/15241/5260 +f 7345/15252/5276 7346/15254/5276 7357/15292/5276 7344/15250/5276 +f 7342/15244/5262 7331/15212/5262 7349/15265/5262 7355/15286/5262 +f 7358/15293/5278 7352/15277/5278 7359/15297/5278 7360/15298/5278 +f 7361/15300/5279 7364/15308/5280 7363/15306/5281 7362/15303/5281 +f 7350/15270/5276 7355/15285/5276 7365/15310/5276 7351/15272/5276 +f 7347/15257/5262 7366/15313/5262 7362/15305/5262 7354/15283/5262 +f 7357/15291/5260 7368/15320/5260 7367/15316/5282 7356/15288/5277 +f 7355/15286/5262 7349/15265/5262 7369/15322/5262 7365/15311/5262 +f 7346/15254/5276 7353/15279/5276 7368/15319/5276 7357/15292/5276 +f 7352/15276/5283 7351/15273/5283 7370/15325/5283 7359/15296/5283 +f 7348/15262/5260 7352/15277/5260 7358/15293/5260 7371/15327/5260 +f 7372/15330/5284 7371/15328/5275 7358/15294/5275 7373/15333/5284 +f 7374/15336/5284 7361/15301/5284 7362/15304/5275 7366/15314/5275 +f 7372/15331/5284 7373/15334/5284 7361/15302/5284 7374/15337/5284 +f 7356/15289/5285 7374/15338/5285 7366/15315/5285 7347/15258/5285 +f 7362/15305/5286 7363/15307/5286 7375/15340/5286 7354/15283/5286 +f 7368/15320/5287 7377/15344/5287 7376/15341/5287 7367/15316/5287 +f 7349/15266/5288 7372/15332/5289 7374/15338/5290 7356/15289/5277 +f 7349/15266/5288 7348/15263/5291 7371/15329/5291 7372/15332/5289 +f 7378/15348/5292 7379/15352/5292 7380/15356/5293 7381/15360/5294 +f 7382/15364/5295 7383/15367/5296 7384/15370/5297 7385/15373/5295 +f 7365/15311/5298 7369/15322/5299 7383/15368/5300 7382/15365/5298 +f 7351/15274/5301 7365/15312/5301 7382/15366/5301 7370/15326/5301 +f 7373/15334/5302 7386/15377/5303 7364/15309/5280 7361/15302/5279 +f 7367/15317/5282 7376/15342/5304 7383/15369/5300 7369/15323/5299 +f 7354/15284/5305 7375/15339/5305 7387/15381/5305 7353/15280/5305 +f 7353/15281/5306 7387/15379/5306 7377/15345/5306 7368/15321/5306 +f 7373/15335/5302 7358/15295/5307 7360/15299/5307 7386/15378/5303 +f 7376/15342/5308 7388/15382/5309 7384/15371/5297 7383/15369/5296 +f 7389/15385/5310 7390/15389/5311 7391/15393/5312 7385/15374/5312 +f 7359/15296/5313 7370/15325/5313 7391/15394/5313 7379/15353/5313 +f 7380/15357/5314 7379/15354/5315 7391/15395/5315 7390/15390/5316 +f 7360/15298/5317 7359/15297/5317 7379/15355/5317 7378/15349/5317 +f 7381/15361/5318 7392/15397/5319 7393/15400/5320 7378/15350/5321 +f 7377/15346/5322 7389/15386/5323 7388/15383/5309 7376/15343/5322 +f 7364/15308/5324 7392/15398/5319 7381/15362/5318 7363/15306/5324 +f 7387/15380/5325 7390/15391/5311 7389/15387/5310 7377/15347/5325 +f 7375/15339/5326 7380/15358/5314 7390/15392/5316 7387/15381/5326 +f 7363/15307/5327 7381/15363/5294 7380/15359/5293 7375/15340/5327 +f 7386/15377/5328 7393/15401/5320 7392/15399/5319 7364/15309/5329 +f 7389/15388/5323 7385/15375/5330 7384/15372/5297 7388/15384/5309 +f 7370/15326/5331 7382/15366/5331 7385/15376/5331 7391/15396/5331 +f 7386/15378/5328 7360/15299/5332 7378/15351/5332 7393/15402/5320 +f 7325/15191/5263 7324/15190/5263 7394/15403/5263 7395/15404/5263 +f 7317/15174/5263 7316/15171/5263 7395/15404/5263 7394/15403/5263 +f 7394/15403/5263 7324/15190/5263 7327/15196/5263 7319/15178/5263 +f 7319/15178/5263 7318/15177/5263 7317/15174/5263 7394/15403/5263 +f 7323/15189/5333 7325/15192/5333 7310/15149/5333 7309/15145/5333 +f 7311/15153/5333 7395/15405/5333 7316/15172/5333 7312/15158/5333 +f 7310/15149/5333 7325/15192/5333 7395/15405/5333 7311/15153/5333 +f 7329/15204/5261 7327/15197/5261 7326/15195/5261 7328/15201/5261 +f 7320/15181/5261 7319/15179/5261 7327/15197/5261 7329/15204/5261 +f 7369/15324/5299 7349/15267/5288 7356/15290/5277 7367/15318/5282 +f 7396/15406/5334 7397/15407/5334 7398/15408/5335 7399/15410/5336 +f 7400/15411/5337 7399/15409/5337 7401/15414/5338 7402/15416/5339 +f 7403/15418/5340 7404/15419/5340 7405/15420/5341 7406/15422/5342 +f 7405/15420/5343 7407/15423/5343 7408/15425/5343 7409/15427/5343 +f 7410/15429/5344 7411/15430/5344 7412/15431/5344 7413/15433/5344 +f 7414/15435/5345 7397/15407/5345 7415/15436/5345 7407/15424/5345 +f 7404/15419/5346 7414/15434/5346 7407/15423/5346 7405/15420/5346 +f 7416/15437/5347 7417/15438/5347 7414/15434/5346 7404/15419/5346 +f 7417/15439/5348 7398/15408/5348 7397/15407/5345 7414/15435/5345 +f 7418/15440/5349 7410/15428/5349 7413/15432/5349 7419/15441/5349 +f 7400/15412/5349 7420/15444/5349 7410/15428/5349 7418/15440/5349 +f 7420/15443/5344 7421/15445/5344 7411/15430/5344 7410/15429/5344 +f 7412/15431/5350 7406/15421/5350 7422/15447/5350 7423/15448/5350 +f 7407/15424/5351 7415/15436/5351 7424/15449/5351 7408/15426/5351 +f 7419/15441/5352 7413/15432/5352 7425/15451/5352 7426/15453/5352 +f 7411/15430/5353 7403/15417/5353 7406/15421/5353 7412/15431/5353 +f 7421/15445/5353 7427/15455/5353 7403/15417/5353 7411/15430/5353 +f 7427/15454/5354 7416/15437/5354 7404/15419/5340 7403/15418/5340 +f 7417/15438/5347 7416/15437/5347 7428/15456/5355 7429/15458/5355 +f 7421/15445/5356 7420/15443/5356 7430/15459/5356 7431/15461/5356 +f 7416/15437/5354 7427/15454/5354 7432/15462/5357 7428/15456/5358 +f 7433/15464/5334 7415/15436/5334 7397/15407/5334 7396/15406/5334 +f 7430/15460/5359 7402/15415/5359 7434/15467/5359 7435/15469/5359 +f 7432/15463/5360 7431/15461/5360 7436/15470/5360 7437/15472/5360 +f 7431/15461/5361 7430/15459/5361 7435/15468/5361 7436/15470/5361 +f 7428/15456/5358 7432/15462/5357 7437/15473/5362 7438/15474/5363 +f 7398/15408/5348 7417/15439/5348 7429/15457/5364 7439/15475/5364 +f 7427/15455/5365 7421/15445/5365 7431/15461/5365 7432/15463/5365 +f 7399/15410/5336 7398/15408/5335 7439/15475/5366 7401/15413/5366 +f 7420/15444/5367 7400/15412/5367 7402/15415/5367 7430/15460/5367 +f 7438/15474/5363 7437/15473/5362 7440/15476/5368 7441/15477/5369 +f 7434/15467/5370 7442/15478/5371 7443/15481/5372 7444/15482/5373 +f 7445/15483/5374 7438/15474/5374 7441/15477/5374 7446/15485/5374 +f 7442/15478/5375 7447/15488/5375 7448/15490/5375 7443/15481/5375 +f 7439/15475/5376 7429/15457/5376 7445/15484/5376 7447/15489/5376 +f 7401/15413/5377 7439/15475/5377 7447/15489/5377 7442/15479/5377 +f 7429/15458/5378 7428/15456/5378 7438/15474/5378 7445/15483/5378 +f 7402/15416/5339 7401/15414/5338 7442/15480/5371 7434/15466/5370 +f 7444/15482/5373 7443/15481/5372 7449/15494/5379 7450/15495/5380 +f 7446/15485/5381 7441/15477/5381 7451/15496/5381 7452/15498/5381 +f 7443/15481/5382 7448/15490/5382 7453/15499/5382 7449/15494/5382 +f 7448/15491/5383 7446/15486/5383 7452/15497/5383 7453/15500/5383 +f 7436/15470/5384 7435/15468/5384 7454/15501/5384 7455/15504/5384 +f 7437/15473/5385 7436/15471/5385 7455/15506/5385 7440/15476/5385 +f 7435/15469/5386 7434/15467/5386 7444/15482/5386 7454/15503/5386 +f 7447/15489/5387 7445/15484/5387 7446/15487/5387 7448/15492/5387 +f 7453/15500/5388 7452/15497/5388 7456/15508/5388 7457/15509/5388 +f 7458/15511/5389 7450/15495/5389 7459/15512/5389 7460/15513/5389 +f 7461/15515/5390 7462/15517/5390 7463/15519/5390 7464/15521/5390 +f 7462/15517/5391 7458/15510/5391 7460/15514/5391 7463/15519/5391 +f 7441/15477/5369 7440/15476/5368 7461/15516/5392 7451/15496/5393 +f 7455/15505/5394 7454/15502/5394 7458/15510/5394 7462/15517/5394 +f 7440/15476/5395 7455/15506/5395 7462/15518/5395 7461/15516/5395 +f 7454/15503/5396 7444/15482/5396 7450/15495/5396 7458/15511/5396 +f 7465/15522/5397 7466/15524/5397 7467/15526/5398 7468/15527/5398 +f 7456/15507/5399 7469/15530/5399 7470/15531/5399 7471/15533/5399 +f 7472/15536/5400 7473/15538/5400 7474/15540/5400 7475/15541/5400 +f 7460/15513/5401 7459/15512/5401 7476/15544/5401 7477/15546/5401 +f 7449/15493/5402 7453/15500/5402 7457/15509/5402 7478/15550/5402 +f 7452/15498/5403 7451/15496/5403 7469/15530/5403 7456/15507/5403 +f 7450/15495/5380 7449/15494/5379 7478/15549/5404 7459/15512/5405 +f 7451/15496/5393 7461/15516/5392 7464/15520/5406 7469/15530/5407 +f 7409/15427/5408 7408/15425/5408 7479/15551/5408 7480/15553/5408 +f 7424/15449/5409 7481/15554/5409 7482/15556/5409 7483/15560/5409 +f 7425/15450/5410 7423/15448/5410 7484/15561/5410 7485/15563/5410 +f 7481/15555/5411 7426/15452/5412 7486/15565/5413 7482/15557/5414 +f 7415/15436/5415 7433/15464/5415 7481/15554/5415 7424/15449/5415 +f 7406/15422/5342 7405/15420/5341 7409/15427/5416 7422/15446/5417 +f 7413/15433/5418 7412/15431/5418 7423/15448/5418 7425/15450/5418 +f 7433/15465/5419 7419/15442/5419 7426/15452/5412 7481/15555/5411 +f 7483/15559/5420 7482/15558/5420 7487/15567/5420 7488/15570/5420 +f 7485/15563/5421 7484/15561/5421 7489/15571/5421 7490/15574/5421 +f 7482/15558/5414 7486/15566/5413 7491/15577/5422 7487/15567/5423 +f 7486/15566/5424 7485/15564/5424 7490/15575/5424 7491/15577/5424 +f 7422/15446/5417 7409/15427/5416 7480/15553/5425 7492/15579/5426 +f 7408/15426/5427 7424/15449/5427 7483/15560/5427 7479/15552/5427 +f 7423/15448/5428 7422/15447/5428 7492/15578/5428 7484/15561/5428 +f 7426/15453/5429 7425/15451/5429 7485/15564/5429 7486/15566/5429 +f 7491/15577/5430 7490/15575/5430 7493/15580/5430 7494/15582/5430 +f 7489/15572/5431 7495/15583/5431 7496/15584/5431 7497/15586/5431 +f 7498/15588/5432 7488/15568/5432 7499/15591/5432 7500/15593/5432 +f 7495/15583/5433 7501/15595/5434 7502/15596/5435 7496/15584/5436 +f 7480/15553/5437 7479/15551/5437 7498/15590/5437 7501/15595/5437 +f 7492/15579/5426 7480/15553/5425 7501/15595/5434 7495/15583/5433 +f 7479/15552/5438 7483/15560/5438 7488/15569/5438 7498/15589/5438 +f 7484/15562/5439 7492/15579/5439 7495/15583/5439 7489/15572/5439 +f 7500/15593/5440 7499/15591/5440 7473/15538/5440 7472/15536/5440 +f 7496/15584/5436 7502/15596/5435 7503/15597/5441 7504/15599/5441 +f 7502/15596/5442 7500/15594/5442 7472/15537/5443 7503/15597/5443 +f 7499/15591/5444 7505/15600/5444 7465/15523/5445 7473/15538/5446 +f 7487/15567/5423 7491/15577/5422 7494/15582/5447 7505/15601/5448 +f 7490/15576/5449 7489/15573/5449 7497/15587/5449 7493/15581/5449 +f 7488/15570/5450 7487/15567/5450 7505/15601/5450 7499/15592/5450 +f 7501/15595/5451 7498/15590/5451 7500/15594/5451 7502/15596/5451 +f 7506/15602/5452 7507/15604/5452 7508/15605/5452 7509/15607/5452 +f 7459/15512/5405 7478/15549/5404 7510/15610/5453 7476/15544/5453 +f 7507/15604/5454 7504/15598/5454 7511/15613/5455 7508/15605/5455 +f 7469/15530/5407 7464/15520/5406 7512/15616/5456 7470/15531/5456 +f 7497/15587/5457 7496/15585/5457 7504/15598/5454 7507/15604/5454 +f 7494/15582/5458 7493/15580/5458 7506/15603/5459 7466/15524/5460 +f 7505/15601/5448 7494/15582/5447 7466/15524/5397 7465/15522/5397 +f 7493/15581/5461 7497/15587/5461 7507/15604/5461 7506/15602/5461 +f 7513/15619/5462 7471/15534/5462 7470/15532/5462 7512/15617/5462 +f 7477/15547/5462 7513/15619/5462 7512/15617/5462 7514/15620/5462 +f 7476/15545/5463 7510/15611/5462 7513/15619/5462 7477/15547/5462 +f 7510/15611/5462 7515/15622/5462 7471/15534/5462 7513/15619/5462 +f 7516/15624/5464 7475/15542/5464 7474/15539/5465 7468/15528/5466 +f 7509/15608/5464 7516/15624/5464 7468/15528/5466 7467/15525/5466 +f 7508/15606/5464 7511/15614/5464 7516/15624/5464 7509/15608/5464 +f 7511/15614/5464 7517/15625/5464 7475/15542/5464 7516/15624/5464 +f 7464/15521/5467 7463/15519/5467 7514/15621/5467 7512/15618/5467 +f 7504/15599/5441 7503/15597/5441 7517/15626/5468 7511/15615/5468 +f 7478/15550/5469 7457/15509/5469 7515/15623/5469 7510/15612/5469 +f 7466/15524/5460 7506/15603/5459 7509/15609/5470 7467/15526/5470 +f 7463/15519/5471 7460/15514/5471 7477/15548/5471 7514/15621/5471 +f 7503/15597/5443 7472/15537/5443 7475/15543/5472 7517/15626/5472 +f 7457/15509/5473 7456/15508/5473 7471/15535/5473 7515/15623/5473 +f 7473/15538/5446 7465/15523/5445 7468/15529/5474 7474/15540/5474 +f 7518/15628/5334 7519/15629/5334 7520/15630/5335 7521/15632/5336 +f 7522/15633/5475 7521/15631/5475 7523/15635/5476 7524/15636/5477 +f 7525/15637/5350 7526/15639/5350 7527/15642/5350 7528/15644/5350 +f 7529/15646/5344 7530/15647/5344 7525/15638/5344 7531/15650/5344 +f 7532/15652/5345 7519/15629/5345 7533/15653/5345 7534/15654/5345 +f 7535/15656/5346 7532/15651/5346 7534/15655/5346 7536/15657/5346 +f 7537/15658/5346 7538/15659/5346 7532/15651/5346 7535/15656/5346 +f 7538/15660/5348 7520/15630/5348 7519/15629/5345 7532/15652/5345 +f 7539/15661/5349 7529/15645/5349 7531/15649/5349 7540/15662/5349 +f 7522/15633/5349 7541/15664/5349 7529/15645/5349 7539/15661/5349 +f 7541/15663/5344 7542/15665/5344 7530/15647/5344 7529/15646/5344 +f 7534/15654/5351 7533/15653/5351 7543/15667/5351 7544/15669/5351 +f 7540/15662/5478 7531/15649/5478 7545/15670/5478 7546/15672/5478 +f 7547/15673/5479 7540/15662/5480 7546/15672/5481 7548/15675/5482 +f 7530/15648/5353 7549/15677/5353 7526/15639/5353 7525/15637/5353 +f 7542/15666/5353 7550/15679/5353 7549/15677/5353 7530/15648/5353 +f 7538/15659/5355 7537/15658/5355 7551/15680/5355 7552/15682/5355 +f 7542/15665/5356 7541/15663/5356 7553/15683/5356 7554/15685/5356 +f 7537/15658/5483 7550/15678/5483 7555/15688/5357 7551/15680/5358 +f 7539/15661/5484 7518/15627/5484 7521/15631/5475 7522/15633/5475 +f 7540/15662/5480 7547/15673/5479 7518/15627/5484 7539/15661/5484 +f 7547/15674/5334 7533/15653/5334 7519/15629/5334 7518/15628/5334 +f 7556/15689/5376 7552/15681/5376 7557/15691/5376 7558/15693/5376 +f 7553/15684/5485 7524/15636/5485 7559/15695/5485 7560/15697/5485 +f 7555/15687/5360 7554/15686/5360 7561/15698/5360 7562/15701/5360 +f 7554/15685/5361 7553/15683/5361 7560/15696/5361 7561/15700/5361 +f 7520/15630/5348 7538/15660/5348 7552/15681/5364 7556/15689/5364 +f 7550/15679/5365 7542/15666/5365 7554/15686/5365 7555/15687/5365 +f 7521/15632/5336 7520/15630/5335 7556/15689/5366 7523/15634/5366 +f 7541/15664/5486 7522/15633/5486 7524/15636/5486 7553/15684/5486 +f 7562/15702/5385 7561/15699/5385 7563/15706/5385 7564/15707/5385 +f 7561/15700/5384 7560/15696/5384 7565/15708/5384 7563/15704/5384 +f 7566/15712/5363 7562/15702/5362 7564/15707/5368 7567/15713/5369 +f 7559/15695/5487 7568/15715/5488 7569/15716/5489 7570/15717/5490 +f 7523/15634/5377 7556/15689/5377 7558/15693/5377 7568/15714/5377 +f 7552/15682/5378 7551/15680/5378 7566/15711/5378 7557/15690/5378 +f 7524/15636/5477 7523/15635/5476 7568/15715/5488 7559/15695/5487 +f 7551/15680/5358 7555/15688/5357 7562/15703/5362 7566/15711/5363 +f 7570/15717/5490 7569/15716/5489 7571/15719/5491 7572/15720/5492 +f 7573/15723/5381 7567/15713/5381 7574/15724/5381 7575/15725/5381 +f 7569/15716/5382 7576/15729/5382 7577/15730/5382 7571/15719/5382 +f 7576/15727/5383 7573/15721/5383 7575/15726/5383 7577/15731/5383 +f 7560/15697/5493 7559/15695/5493 7570/15717/5493 7565/15710/5493 +f 7558/15693/5387 7557/15691/5387 7573/15722/5387 7576/15728/5387 +f 7568/15715/5375 7558/15694/5375 7576/15729/5375 7569/15716/5375 +f 7557/15692/5374 7566/15712/5374 7567/15713/5374 7573/15723/5374 +f 7575/15725/5494 7574/15724/5494 7578/15732/5494 7579/15733/5494 +f 7571/15718/5402 7577/15731/5402 7580/15735/5402 7581/15737/5402 +f 7577/15731/5388 7575/15726/5388 7579/15734/5388 7580/15735/5388 +f 7582/15738/5495 7572/15720/5495 7583/15740/5495 7584/15741/5495 +f 7567/15713/5369 7564/15707/5368 7585/15743/5496 7574/15724/5497 +f 7563/15705/5394 7565/15709/5394 7582/15739/5394 7586/15746/5394 +f 7564/15707/5395 7563/15706/5395 7586/15745/5395 7585/15743/5395 +f 7565/15710/5396 7570/15717/5396 7572/15720/5396 7582/15738/5396 +f 7587/15747/5498 7588/15749/5498 7589/15751/5398 7590/15752/5398 +f 7579/15733/5499 7578/15732/5499 7591/15755/5499 7592/15757/5499 +f 7593/15761/5400 7594/15763/5400 7595/15765/5400 7596/15766/5400 +f 7584/15741/5401 7583/15740/5401 7597/15770/5401 7598/15772/5401 +f 7572/15720/5492 7571/15719/5491 7581/15736/5500 7583/15740/5501 +f 7574/15724/5497 7585/15743/5496 7599/15776/5502 7578/15732/5407 +f 7586/15746/5391 7582/15739/5391 7584/15742/5391 7600/15778/5391 +f 7585/15744/5390 7586/15746/5390 7600/15778/5390 7599/15777/5390 +f 7543/15667/5409 7548/15676/5409 7601/15779/5409 7602/15781/5409 +f 7545/15671/5410 7528/15643/5410 7603/15785/5410 7604/15787/5410 +f 7548/15675/5482 7546/15672/5481 7605/15788/5503 7601/15780/5504 +f 7546/15672/5505 7545/15670/5505 7604/15786/5505 7605/15788/5505 +f 7536/15657/5343 7534/15655/5343 7544/15668/5343 7606/15789/5343 +f 7533/15653/5415 7547/15674/5415 7548/15676/5415 7543/15667/5415 +f 7526/15640/5506 7536/15657/5506 7606/15789/5416 7527/15641/5417 +f 7531/15650/5418 7525/15638/5418 7528/15643/5418 7545/15671/5418 +f 7601/15780/5504 7605/15788/5503 7607/15790/5507 7608/15791/5508 +f 7605/15788/5509 7604/15786/5509 7609/15793/5509 7607/15790/5509 +f 7603/15783/5439 7610/15797/5439 7611/15798/5439 7612/15799/5439 +f 7613/15803/5438 7602/15781/5438 7614/15805/5438 7615/15808/5438 +f 7606/15789/5408 7544/15668/5408 7613/15802/5408 7616/15811/5408 +f 7527/15641/5417 7606/15789/5416 7616/15811/5425 7610/15795/5426 +f 7544/15669/5427 7543/15667/5427 7602/15781/5427 7613/15803/5427 +f 7528/15644/5428 7527/15642/5428 7610/15796/5428 7603/15784/5428 +f 7612/15799/5431 7611/15798/5431 7617/15813/5431 7618/15815/5431 +f 7615/15809/5432 7614/15806/5432 7619/15818/5432 7620/15820/5432 +f 7611/15798/5433 7621/15821/5434 7622/15822/5435 7617/15813/5436 +f 7621/15821/5451 7615/15810/5451 7620/15819/5451 7622/15822/5451 +f 7604/15787/5421 7603/15785/5421 7612/15800/5421 7609/15792/5421 +f 7602/15782/5420 7601/15780/5420 7608/15791/5420 7614/15807/5420 +f 7616/15812/5437 7613/15804/5437 7615/15810/5437 7621/15821/5437 +f 7610/15797/5426 7616/15812/5425 7621/15821/5434 7611/15798/5433 +f 7622/15822/5442 7620/15819/5442 7593/15762/5443 7623/15823/5443 +f 7619/15818/5444 7624/15824/5444 7587/15748/5445 7594/15763/5446 +f 7625/15826/5510 7618/15816/5510 7626/15828/5510 7627/15829/5510 +f 7624/15825/5511 7628/15831/5512 7588/15749/5498 7587/15747/5498 +f 7607/15790/5513 7609/15793/5513 7625/15827/5513 7628/15831/5513 +f 7608/15791/5508 7607/15790/5507 7628/15831/5512 7624/15825/5511 +f 7609/15794/5514 7612/15801/5514 7618/15816/5514 7625/15826/5514 +f 7614/15807/5450 7608/15791/5450 7624/15825/5450 7619/15817/5450 +f 7627/15829/5515 7626/15828/5515 7629/15832/5515 7630/15834/5515 +f 7583/15740/5501 7581/15736/5500 7631/15838/5453 7597/15770/5453 +f 7578/15732/5407 7599/15776/5502 7632/15841/5456 7591/15755/5456 +f 7626/15828/5454 7633/15844/5454 7634/15846/5455 7629/15832/5455 +f 7617/15813/5436 7622/15822/5435 7623/15823/5441 7633/15845/5441 +f 7620/15820/5440 7619/15818/5440 7594/15763/5440 7593/15761/5440 +f 7618/15816/5457 7617/15814/5457 7633/15844/5454 7626/15828/5454 +f 7628/15831/5516 7625/15827/5516 7627/15830/5517 7588/15749/5518 +f 7635/15849/5462 7592/15758/5462 7591/15756/5462 7632/15842/5462 +f 7598/15773/5462 7635/15849/5462 7632/15842/5462 7636/15851/5462 +f 7597/15771/5463 7631/15839/5462 7635/15850/5462 7598/15774/5462 +f 7631/15839/5462 7637/15853/5462 7592/15759/5462 7635/15850/5462 +f 7638/15855/5464 7596/15767/5464 7595/15764/5465 7590/15753/5466 +f 7630/15835/5464 7638/15855/5464 7590/15753/5466 7589/15750/5466 +f 7629/15833/5464 7634/15847/5464 7638/15856/5464 7630/15836/5464 +f 7634/15847/5464 7639/15857/5464 7596/15768/5464 7638/15856/5464 +f 7599/15777/5467 7600/15778/5467 7636/15852/5467 7632/15843/5467 +f 7633/15845/5441 7623/15823/5441 7639/15858/5468 7634/15848/5468 +f 7581/15737/5469 7580/15735/5469 7637/15854/5469 7631/15840/5469 +f 7588/15749/5518 7627/15830/5517 7630/15837/5519 7589/15751/5519 +f 7600/15778/5471 7584/15742/5471 7598/15775/5471 7636/15852/5471 +f 7623/15823/5443 7593/15762/5443 7596/15769/5472 7639/15858/5472 +f 7580/15735/5473 7579/15734/5473 7592/15760/5473 7637/15854/5473 +f 7594/15763/5446 7587/15748/5445 7590/15754/5474 7595/15765/5474 +o Chair.020 +v 11.582143 0.415382 3.117484 +v 11.582143 0.429951 3.117484 +v 11.630596 0.429951 3.128177 +v 12.023103 0.429951 3.214794 +v 12.071555 0.429951 3.225486 +v 12.071555 0.415382 3.225486 +v 12.023103 0.415382 3.214794 +v 11.630596 0.415382 3.128177 +v 11.988669 0.429951 3.601082 +v 11.988669 0.415382 3.601082 +v 11.988669 0.400812 3.601082 +v 11.944122 0.400812 3.591251 +v 12.023103 0.400812 3.214794 +v 12.071555 0.400812 3.225486 +v 11.499258 0.415382 3.493080 +v 11.499258 0.429951 3.493080 +v 11.543805 0.415382 3.502910 +v 11.543805 0.429951 3.502910 +v 11.499258 0.400812 3.493080 +v 11.543805 0.400812 3.502910 +v 11.582143 0.400812 3.117484 +v 11.630596 0.400812 3.128177 +v 12.056936 0.432961 3.196569 +v 12.042337 0.432961 3.193347 +v 12.041368 0.421009 3.197738 +v 12.055967 0.421009 3.200960 +v 12.044089 0.426967 3.185409 +v 12.058688 0.426967 3.188631 +v 11.607072 0.419106 3.099791 +v 11.621462 0.419106 3.102966 +v 11.624183 0.425064 3.090637 +v 11.609793 0.425064 3.087461 +v 11.608071 0.434699 3.095263 +v 11.622461 0.434699 3.098438 +v 12.045434 0.431853 3.179314 +v 12.060033 0.431853 3.182535 +v 11.625558 0.433592 3.084404 +v 11.611168 0.433592 3.081229 +v 11.613811 0.592772 3.069251 +v 11.610714 0.593879 3.083285 +v 12.059580 0.592141 3.184591 +v 12.044981 0.592141 3.181369 +v 12.062676 0.591033 3.170557 +v 12.066642 0.829840 3.152588 +v 12.063545 0.830948 3.166621 +v 11.617777 0.831579 3.051282 +v 11.614679 0.832686 3.065315 +v 12.048078 0.591033 3.167336 +v 11.625104 0.593879 3.086460 +v 11.628201 0.592772 3.072427 +v 12.061344 0.830737 3.176593 +v 12.041734 0.870951 3.158452 +v 12.039777 0.870348 3.167320 +v 11.626866 0.832325 3.078474 +v 11.612476 0.832325 3.075299 +v 11.636045 0.869634 3.076377 +v 11.652384 0.864490 3.080389 +v 12.052043 0.829840 3.149366 +v 11.608755 0.608202 3.092163 +v 11.629069 0.832686 3.068491 +v 11.632167 0.831579 3.054457 +v 12.048946 0.830948 3.163400 +v 12.044523 0.869953 3.145813 +v 12.057623 0.606614 3.193459 +v 12.043024 0.606614 3.190237 +v 12.046745 0.830737 3.173372 +v 11.623145 0.608202 3.095339 +v 11.638004 0.870373 3.067500 +v 11.654344 0.865229 3.071511 +v 11.657133 0.864232 3.058872 +v 11.969134 0.913073 3.148695 +v 11.970442 0.914244 3.140605 +v 11.710397 0.911897 3.080237 +v 11.708290 0.911148 3.088117 +v 12.026714 0.867524 3.142075 +v 12.023925 0.868521 3.154714 +v 11.960814 0.902898 3.139376 +v 11.963819 0.901824 3.125762 +v 12.021968 0.867919 3.163582 +v 11.640794 0.869376 3.054860 +v 11.719532 0.900855 3.083124 +v 11.722537 0.899781 3.069511 +v 11.713401 0.910823 3.066623 +v 11.973446 0.913170 3.126992 +v 11.715827 0.901346 3.090554 +v 11.959507 0.901727 3.147466 +v 11.944122 0.415382 3.591251 +v 11.944122 0.429951 3.591251 +v 12.032371 0.438060 3.413120 +v 12.038074 0.443651 3.414378 +v 12.066322 0.443651 3.286373 +v 12.060618 0.438060 3.285115 +v 12.060792 0.429976 3.285153 +v 12.067600 0.437950 3.253479 +v 12.067209 0.430300 3.256069 +v 12.051601 0.429903 3.417363 +v 12.051430 0.437987 3.417325 +v 12.023182 0.437987 3.545330 +v 12.023354 0.429903 3.545368 +v 12.017721 0.443828 3.544125 +v 12.010846 0.439408 3.575277 +v 12.016810 0.434055 3.574200 +v 12.038004 0.424135 3.414363 +v 12.045897 0.424311 3.416105 +v 12.017650 0.424311 3.544109 +v 12.009756 0.424135 3.542367 +v 12.045969 0.443828 3.416121 +v 12.009827 0.443651 3.542383 +v 12.079678 0.437987 3.289320 +v 12.074217 0.443828 3.288115 +v 12.032544 0.429976 3.413158 +v 12.004296 0.429976 3.541162 +v 12.066252 0.424135 3.286357 +v 12.074145 0.424311 3.288100 +v 12.017679 0.426646 3.571080 +v 12.012458 0.421521 3.567637 +v 12.002968 0.439247 3.573466 +v 12.004580 0.421360 3.565825 +v 11.998616 0.426713 3.566903 +v 12.079849 0.429903 3.289358 +v 12.086654 0.437881 3.257707 +v 12.081600 0.443408 3.254658 +v 12.072263 0.424773 3.259118 +v 12.080169 0.424940 3.260804 +v 12.086262 0.430231 3.260298 +v 12.004124 0.438060 3.541124 +v 12.073306 0.420977 3.228445 +v 12.077995 0.416357 3.233141 +v 12.085913 0.416497 3.234777 +v 12.092354 0.420919 3.232695 +v 12.093247 0.427313 3.227826 +v 12.073693 0.443241 3.252972 +v 12.097469 0.402967 3.209514 +v 12.098751 0.407418 3.202886 +v 12.074199 0.427371 3.223576 +v 12.079706 0.407458 3.198621 +v 12.078424 0.403008 3.205249 +v 12.088557 0.431932 3.223131 +v 12.094341 0.410634 3.196919 +v 12.080640 0.431793 3.221493 +v 12.086415 0.410537 3.195321 +v 12.083530 0.380352 3.181293 +v 12.082016 0.378323 3.188973 +v 12.102573 0.380334 3.185568 +v 12.098330 0.381800 3.178841 +v 12.090400 0.381756 3.177266 +v 12.082833 0.399792 3.211215 +v 12.090759 0.399889 3.212814 +v 12.101698 0.345795 3.163585 +v 12.093766 0.345756 3.162011 +v 12.086258 0.376856 3.195699 +v 12.085361 0.342751 3.173819 +v 12.089592 0.341467 3.180588 +v 12.101059 0.378304 3.193247 +v 12.094189 0.376901 3.197274 +v 12.097524 0.341506 3.182162 +v 12.104403 0.342735 3.178094 +v 11.982744 0.349401 3.638003 +v 11.984648 0.348454 3.630201 +v 11.975788 -0.002953 3.670340 +v 11.973886 -0.002007 3.678142 +v 12.105930 0.344511 3.170356 +v 12.124610 0.001491 3.085709 +v 12.120377 0.002774 3.078939 +v 11.995108 0.350077 3.646597 +v 11.987251 0.350056 3.644684 +v 11.978394 -0.001352 3.684824 +v 11.986250 -0.001331 3.686737 +v 12.104039 -0.000270 3.089173 +v 12.108272 -0.001553 3.095942 +v 12.086887 0.344527 3.166080 +v 12.004178 0.425574 3.605494 +v 12.010562 0.421603 3.602517 +v 11.997746 0.434122 3.570023 +v 11.991492 0.421652 3.598363 +v 11.996312 0.425454 3.603626 +v 12.007192 0.412305 3.591503 +v 11.999325 0.412185 3.589635 +v 11.992942 0.416156 3.592612 +v 11.986815 0.403231 3.619554 +v 11.991382 0.405075 3.625968 +v 12.003139 0.398698 3.609864 +v 11.995281 0.398640 3.607960 +v 11.988633 0.400566 3.612139 +v 12.012012 0.416106 3.596765 +v 11.992029 0.371230 3.622693 +v 11.985340 0.372479 3.627060 +v 12.007706 0.400542 3.616278 +v 12.004414 0.372464 3.631197 +v 11.999887 0.371267 3.624604 +v 11.999240 0.405133 3.627873 +v 11.987992 0.375406 3.641326 +v 11.995850 0.375443 3.643236 +v 12.005889 0.403207 3.623693 +v 12.002540 0.374194 3.638870 +v 12.001819 0.349392 3.642138 +v 12.003720 0.348446 3.634336 +v 11.983466 0.374209 3.634734 +v 11.991357 0.347770 3.625741 +v 11.999213 0.347791 3.627655 +v 11.990355 -0.003617 3.667794 +v 11.982499 -0.003637 3.665881 +v 12.105567 0.001507 3.081433 +v 11.994863 -0.002962 3.674475 +v 12.123082 -0.000286 3.093448 +v 12.114325 0.000611 3.087440 +v 12.116202 -0.001514 3.097516 +v 12.112446 0.002736 3.077365 +v 11.984375 -0.002484 3.676308 +v 11.992961 -0.002015 3.682277 +v 11.521129 0.438060 3.300300 +v 11.526832 0.443651 3.301559 +v 11.555079 0.443651 3.173554 +v 11.549376 0.438060 3.172295 +v 11.549548 0.429976 3.172333 +v 11.556357 0.437950 3.140659 +v 11.555966 0.430300 3.143250 +v 11.506407 0.424311 3.431289 +v 11.512111 0.429903 3.432548 +v 11.506437 0.426646 3.458261 +v 11.501215 0.421521 3.454817 +v 11.526761 0.424135 3.301543 +v 11.534655 0.424311 3.303285 +v 11.498513 0.424135 3.429547 +v 11.534726 0.443828 3.303301 +v 11.498585 0.443651 3.429563 +v 11.506478 0.443828 3.431305 +v 11.540187 0.437987 3.304506 +v 11.511939 0.437987 3.432510 +v 11.568435 0.437987 3.176501 +v 11.562974 0.443828 3.175296 +v 11.521300 0.429976 3.300338 +v 11.493052 0.429976 3.428342 +v 11.555009 0.424135 3.173538 +v 11.562902 0.424311 3.175280 +v 11.491725 0.439247 3.460646 +v 11.499604 0.439408 3.462458 +v 11.493337 0.421360 3.453006 +v 11.487372 0.426713 3.454083 +v 11.492881 0.438060 3.428304 +v 11.486504 0.434122 3.457203 +v 11.540359 0.429903 3.304544 +v 11.568606 0.429903 3.176539 +v 11.575411 0.437881 3.144887 +v 11.570357 0.443408 3.141839 +v 11.561020 0.424773 3.146298 +v 11.568926 0.424940 3.147985 +v 11.575020 0.430231 3.147478 +v 11.562450 0.443241 3.140152 +v 11.577314 0.431932 3.110310 +v 11.569397 0.431793 3.108674 +v 11.562062 0.420977 3.115625 +v 11.566752 0.416357 3.120320 +v 11.574670 0.416497 3.121958 +v 11.581111 0.420919 3.119875 +v 11.579516 0.399889 3.099994 +v 11.586226 0.402967 3.096695 +v 11.571590 0.399792 3.098396 +v 11.582005 0.427313 3.115006 +v 11.587509 0.407418 3.090066 +v 11.562956 0.427371 3.110757 +v 11.568463 0.407458 3.085801 +v 11.567181 0.403008 3.092429 +v 11.572288 0.380352 3.068473 +v 11.570773 0.378323 3.076153 +v 11.583098 0.410634 3.084100 +v 11.591331 0.380334 3.072748 +v 11.587089 0.381800 3.066022 +v 11.575173 0.410537 3.082501 +v 11.579157 0.381756 3.064447 +v 11.594687 0.344511 3.057535 +v 11.590455 0.345795 3.050766 +v 11.582523 0.345756 3.049192 +v 11.575644 0.344527 3.053260 +v 11.575015 0.376856 3.082879 +v 11.574117 0.342751 3.060999 +v 11.578349 0.341467 3.067769 +v 11.589816 0.378304 3.080427 +v 11.582946 0.376901 3.084454 +v 11.471501 0.349401 3.525183 +v 11.473404 0.348454 3.517381 +v 11.464546 -0.002953 3.557520 +v 11.462644 -0.002007 3.565323 +v 11.613367 0.001491 2.972889 +v 11.609135 0.002774 2.966119 +v 11.483865 0.350077 3.533778 +v 11.476008 0.350056 3.531865 +v 11.467151 -0.001352 3.572004 +v 11.475007 -0.001331 3.573917 +v 11.592796 -0.000270 2.976353 +v 11.597029 -0.001553 2.983122 +v 11.593160 0.342735 3.065275 +v 11.586281 0.341506 3.069343 +v 11.480249 0.421652 3.485543 +v 11.485069 0.425454 3.490807 +v 11.495949 0.412305 3.478683 +v 11.488082 0.412185 3.476815 +v 11.481699 0.416156 3.479793 +v 11.505569 0.434055 3.461380 +v 11.477389 0.400566 3.499320 +v 11.475573 0.403231 3.506734 +v 11.484038 0.398640 3.495140 +v 11.500769 0.416106 3.483946 +v 11.496463 0.400542 3.503458 +v 11.491897 0.398698 3.497044 +v 11.492935 0.425574 3.492675 +v 11.480139 0.405075 3.513148 +v 11.487997 0.405133 3.515053 +v 11.499319 0.421603 3.489697 +v 11.493171 0.372464 3.518377 +v 11.488644 0.371267 3.511785 +v 11.476749 0.375406 3.528507 +v 11.484607 0.375443 3.530416 +v 11.494646 0.403207 3.510873 +v 11.491297 0.374194 3.526051 +v 11.490576 0.349392 3.529318 +v 11.472223 0.374209 3.521914 +v 11.480787 0.371230 3.509875 +v 11.487970 0.347791 3.514835 +v 11.480114 0.347770 3.512922 +v 11.474096 0.372479 3.514241 +v 11.479113 -0.003617 3.554975 +v 11.471256 -0.003637 3.553061 +v 11.594324 0.001507 2.968613 +v 11.611839 -0.000286 2.980628 +v 11.492477 0.348446 3.521517 +v 11.483620 -0.002962 3.561656 +v 11.603082 0.000611 2.974621 +v 11.604960 -0.001514 2.984696 +v 11.601203 0.002736 2.964545 +v 11.473131 -0.002484 3.563489 +v 11.481718 -0.002015 3.569457 +vn 0.2155 -0.0000 -0.9765 +vn 0.9765 -0.0000 0.2155 +vn -0.0000 -1.0000 -0.0000 +vn -0.9765 -0.0000 -0.2155 +vn -0.2155 -0.0000 0.9765 +vn -0.0257 0.9929 0.1163 +vn 0.0568 -0.9646 -0.2574 +vn 0.0920 -0.9044 -0.4167 +vn -0.7031 -0.0911 -0.7052 +vn 0.0350 -0.9868 -0.1584 +vn -0.0369 0.9852 0.1674 +vn 0.9476 -0.0779 -0.3098 +vn 0.8568 -0.1146 -0.5028 +vn -0.6042 -0.0987 -0.7907 +vn 0.1328 -0.7874 -0.6019 +vn 0.1725 -0.5992 -0.7818 +vn -0.2149 0.0768 0.9736 +vn 0.2149 -0.0768 -0.9736 +vn 0.9471 -0.2916 0.1338 +vn 0.8393 0.5027 0.2069 +vn -0.2175 0.1047 0.9704 +vn -0.2100 0.1119 0.9713 +vn -0.2096 0.1062 0.9720 +vn 0.7062 -0.0656 -0.7049 +vn 0.8550 0.4967 0.1495 +vn -0.2172 0.0768 0.9731 +vn -0.1819 -0.5359 0.8244 +vn -0.8348 0.5287 -0.1534 +vn 0.7613 -0.6113 0.2162 +vn -0.1136 -0.8531 0.5092 +vn -0.1855 -0.5326 0.8258 +vn -0.1885 -0.5337 0.8244 +vn -0.1825 -0.5315 0.8272 +vn -0.0342 0.9931 0.1121 +vn -0.2597 0.9648 0.0401 +vn -0.2838 0.9584 0.0320 +vn -0.4716 -0.8811 -0.0346 +vn -0.3860 -0.8634 -0.3248 +vn -0.0398 -0.7743 -0.6315 +vn -0.8103 -0.5705 -0.1338 +vn -0.2400 -0.3669 -0.8988 +vn -0.2984 -0.3997 -0.8667 +vn 0.2131 -0.0465 -0.9759 +vn -0.2173 0.1108 0.9698 +vn -0.2181 0.1116 0.9695 +vn 0.2195 -0.0794 -0.9724 +vn -0.8231 0.5223 -0.2228 +vn 0.2212 -0.0401 -0.9744 +vn -0.2166 0.1101 0.9700 +vn 0.2227 -0.0584 -0.9731 +vn 0.3190 -0.7742 -0.5467 +vn 0.2195 -0.0813 -0.9722 +vn 0.2138 -0.0847 -0.9732 +vn 0.2265 -0.0769 -0.9710 +vn 0.5103 0.8588 0.0448 +vn -0.2359 0.9633 -0.1281 +vn 0.0088 0.9970 -0.0767 +vn -0.2369 0.9630 -0.1282 +vn 0.4751 0.8610 0.1815 +vn -0.2144 0.0845 0.9731 +vn -0.2206 0.0831 0.9718 +vn -0.2218 0.0796 0.9718 +vn -0.2265 0.0778 0.9709 +vn 0.4494 -0.8773 0.1684 +vn 0.2267 -0.9658 0.1262 +vn -0.2081 0.0880 0.9741 +vn 0.2076 -0.0886 -0.9742 +vn -0.4673 0.8673 -0.1715 +vn -0.4921 0.8695 -0.0422 +vn -0.2143 0.0744 0.9739 +vn -0.2224 0.0849 0.9712 +vn -0.0094 -0.9970 0.0766 +vn 0.2132 -0.0732 -0.9743 +vn -0.2127 0.0723 0.9744 +vn -0.0000 1.0000 -0.0000 +vn -0.6752 0.7224 -0.1490 +vn -0.6701 0.7268 -0.1508 +vn -0.6700 0.7269 -0.1508 +vn -0.9762 -0.0225 -0.2155 +vn -0.9763 -0.0215 -0.2152 +vn -0.9777 -0.0204 -0.2091 +vn 0.9763 0.0218 0.2154 +vn 0.9760 0.0219 0.2168 +vn 0.9760 0.0219 0.2169 +vn 0.6770 0.6937 0.2459 +vn 0.0213 -0.9998 0.0047 +vn -0.0214 0.9998 -0.0047 +vn 0.7054 0.6915 0.1557 +vn 0.7016 0.6962 0.1520 +vn -0.0198 0.9997 -0.0106 +vn -0.7054 -0.6915 -0.1557 +vn 0.6852 -0.7257 0.0621 +vn -0.0504 0.9903 0.1293 +vn -0.6789 -0.6955 -0.2352 +vn 0.6753 -0.7223 0.1490 +vn 0.9763 0.0221 0.2155 +vn 0.6977 0.7008 0.1483 +vn 0.0255 -0.9995 -0.0176 +vn 0.9777 0.0214 0.2088 +vn 0.9763 0.0224 0.2151 +vn -0.7417 -0.6683 0.0575 +vn 0.6160 -0.6972 0.3667 +vn -0.0443 -0.9532 0.2992 +vn 0.9792 0.0183 0.2023 +vn 0.9779 0.0214 0.2079 +vn -0.0182 0.9997 -0.0164 +vn 0.6672 -0.7326 0.1348 +vn -0.6648 0.7313 -0.1526 +vn -0.6926 -0.7022 -0.1648 +vn 0.9803 0.0132 0.1971 +vn 0.9794 0.0178 0.2013 +vn -0.9791 -0.0175 -0.2028 +vn -0.9778 -0.0205 -0.2083 +vn -0.9792 -0.0172 -0.2021 +vn -0.9802 -0.0124 -0.1978 +vn 0.7899 0.5509 -0.2694 +vn -0.5687 0.5748 -0.5884 +vn 0.0514 0.9421 -0.3314 +vn -0.6139 0.6901 -0.3831 +vn 0.7465 0.6614 -0.0727 +vn -0.9802 -0.0119 -0.1975 +vn -0.9805 -0.0090 -0.1961 +vn 0.8233 0.3812 -0.4206 +vn -0.5339 0.3978 -0.7462 +vn 0.1605 0.5403 -0.8260 +vn -0.1073 -0.8044 0.5843 +vn 0.5700 -0.5868 0.5750 +vn -0.7858 -0.5625 0.2571 +vn 0.1132 0.7833 -0.6113 +vn 0.1766 0.3980 -0.9002 +vn -0.8379 -0.2790 0.4692 +vn 0.5262 -0.2912 0.7990 +vn -0.1764 -0.4005 0.8991 +vn 0.9807 0.0092 0.1955 +vn 0.9804 0.0122 0.1968 +vn -0.1564 -0.5692 0.8072 +vn 0.5342 -0.4135 0.7373 +vn -0.8201 -0.3964 0.4127 +vn -0.9716 -0.0027 -0.2366 +vn -0.9716 -0.0025 -0.2366 +vn 0.8498 0.1694 -0.4991 +vn -0.2353 0.1162 0.9650 +vn -0.8498 -0.1695 0.4992 +vn -0.5262 0.2899 -0.7995 +vn 0.8380 0.2777 -0.4697 +vn -0.9804 -0.0080 -0.1966 +vn -0.9807 -0.0055 -0.1956 +vn 0.9808 0.0054 0.1948 +vn 0.9807 0.0070 0.1952 +vn 0.6298 0.6472 0.4296 +vn -0.7240 0.6748 0.1432 +vn 0.0961 -0.9356 -0.3397 +vn -0.9756 -0.0216 -0.2185 +vn -0.9745 -0.0207 -0.2236 +vn -0.9732 -0.0182 -0.2294 +vn -0.9743 -0.0205 -0.2244 +vn -0.6880 0.7239 -0.0512 +vn 0.9755 0.0227 0.2186 +vn 0.9744 0.0218 0.2238 +vn 0.0455 -0.9932 -0.1076 +vn -0.9756 -0.0222 -0.2182 +vn -0.7555 0.5630 0.3351 +vn 0.1453 -0.8103 -0.5677 +vn -0.9722 -0.0112 -0.2340 +vn -0.9730 -0.0173 -0.2303 +vn -0.5778 -0.5801 -0.5740 +vn 0.9742 0.0211 0.2246 +vn 0.9731 0.0187 0.2296 +vn -0.1083 0.9128 0.3938 +vn 0.7146 -0.6896 -0.1172 +vn -0.6321 -0.6617 -0.4032 +vn -0.5636 -0.3366 -0.7544 +vn 0.8039 -0.3512 -0.4799 +vn -0.2111 0.4682 0.8580 +vn 0.9721 0.0114 0.2344 +vn 0.9729 0.0175 0.2307 +vn 0.9720 0.0104 0.2349 +vn 0.9716 0.0032 0.2367 +vn 0.5795 0.5405 0.6099 +vn -0.1633 0.7463 0.6452 +vn 0.7382 -0.6033 -0.3018 +vn -0.2347 0.1344 0.9627 +vn 0.9716 0.0027 0.2365 +vn 0.5570 0.0928 0.8253 +vn 0.5572 0.0866 0.8259 +vn -0.8290 0.0969 0.5507 +vn -0.8295 0.0905 0.5512 +vn -0.8295 0.0904 0.5512 +vn -0.9718 -0.0030 -0.2357 +vn -0.9722 -0.0100 -0.2340 +vn 0.2094 -0.4821 -0.8507 +vn -0.8055 0.3437 0.4828 +vn 0.5637 0.3294 0.7575 +vn 0.2353 -0.1162 -0.9650 +vn -0.9808 -0.0053 -0.1948 +vn 0.8295 -0.0898 -0.5513 +vn 0.8299 -0.0839 -0.5516 +vn 0.9808 0.0053 0.1948 +vn 0.8291 -0.0956 -0.5509 +vn -0.5570 -0.0916 -0.8255 +vn -0.5572 -0.0860 -0.8259 +vn -0.5572 -0.0859 -0.8259 +vn 0.2349 -0.1319 -0.9630 +vn 0.0474 -0.9756 -0.2146 +vn 0.0473 -0.9756 -0.2146 +vn -0.0252 -0.9931 0.1144 +vn -0.0252 -0.9931 0.1143 +vn -0.0253 -0.9931 0.1144 +vn 0.5242 -0.1770 0.8330 +vn 0.9716 0.0025 0.2366 +vn -0.5242 0.1770 -0.8330 +vn -0.5574 -0.0803 -0.8264 +vn -0.1876 -0.2449 0.9512 +vn 0.5574 0.0803 0.8264 +vn 0.1876 0.2449 -0.9512 +vn -0.8299 0.0839 0.5516 +vn -0.9763 -0.0221 -0.2155 +vn -0.9763 -0.0224 -0.2151 +vn -0.9777 -0.0214 -0.2087 +vn -0.6789 -0.6956 -0.2352 +vn -0.9760 -0.0219 -0.2168 +vn -0.9760 -0.0219 -0.2169 +vn -0.9744 -0.0218 -0.2238 +vn -0.9755 -0.0228 -0.2188 +vn 0.9762 0.0224 0.2155 +vn -0.9763 -0.0218 -0.2154 +vn -0.7416 -0.6683 0.0575 +vn -0.0444 -0.9532 0.2992 +vn -0.6926 -0.7023 -0.1648 +vn -0.9792 -0.0183 -0.2022 +vn -0.9779 -0.0214 -0.2079 +vn -0.9794 -0.0178 -0.2014 +vn -0.9803 -0.0131 -0.1971 +vn -0.9804 -0.0123 -0.1968 +vn -0.9807 -0.0092 -0.1955 +vn -0.7857 -0.5626 0.2572 +vn 0.7899 0.5509 -0.2693 +vn -0.8378 -0.2790 0.4693 +vn 0.9807 0.0091 0.1955 +vn 0.9804 0.0123 0.1968 +vn -0.8201 -0.3964 0.4128 +vn -0.9716 -0.0027 -0.2365 +vn -0.9716 -0.0025 -0.2365 +vn 0.8498 0.1695 -0.4992 +vn -0.8497 -0.1695 0.4992 +vn -0.9807 -0.0070 -0.1952 +vn -0.9809 -0.0057 -0.1943 +vn 0.9808 0.0055 0.1948 +vn -0.9731 -0.0187 -0.2296 +vn -0.9742 -0.0210 -0.2246 +vn -0.6321 -0.6618 -0.4032 +vn 0.9756 0.0221 0.2182 +vn 0.9756 0.0227 0.2186 +vn -0.9721 -0.0114 -0.2344 +vn -0.9729 -0.0176 -0.2307 +vn -0.5778 -0.5802 -0.5741 +vn 0.7146 -0.6896 -0.1173 +vn 0.2348 -0.1319 -0.9631 +vn -0.9720 -0.0104 -0.2349 +vn -0.9716 -0.0032 -0.2367 +vn -0.5635 -0.3367 -0.7544 +vn -0.5569 -0.0916 -0.8255 +vn -0.5571 -0.0860 -0.8260 +vn -0.5571 -0.0859 -0.8260 +vn -0.5573 -0.0803 -0.8264 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt 0.686647 0.000000 +vt 0.870176 0.996278 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.782584 0.965408 +vt 0.870573 0.970227 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.833010 0.965282 +vt 0.908785 0.026051 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.968598 0.070112 +vt 0.979071 0.026051 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.968598 0.371019 +vt 0.757324 0.262250 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.173427 0.241164 +vt 0.758439 0.080128 +vt -0.973130 0.033128 +vt -0.123087 0.241439 +vt 0.978437 0.000000 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt 0.737072 0.000128 +vt 0.908263 0.000000 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.409642 -0.009898 +vt 0.677629 0.482142 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.240570 0.058726 +vt 0.669677 0.481452 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.786789 0.246652 +vt 0.991724 0.699406 +vt 0.928489 0.277215 +vt 0.873308 0.505274 +vt 0.786789 0.155990 +vt 0.958960 0.029326 +vt 0.991724 0.483440 +vt 0.977373 0.702462 +vt -0.140978 0.246673 +vt 0.958492 0.010078 +vt -0.156145 0.246590 +vt 0.929566 0.080357 +vt -0.144664 0.252235 +vt 0.984385 0.731379 +vt 0.945934 0.020741 +vt -0.159831 0.252152 +vt 0.984385 0.500820 +vt 0.989649 0.087406 +vt 0.706860 0.007022 +vt 0.847263 0.989602 +vt 0.686599 0.714388 +vt 0.721837 0.007060 +vt 0.884682 0.006674 +vt 0.720919 0.017861 +vt 0.673632 0.527027 +vt 0.872079 0.017335 +vt 0.705942 0.017823 +vt 0.673632 0.731676 +vt 0.690157 0.523535 +vt 0.802894 0.958412 +vt 0.847659 0.963551 +vt 0.695298 0.714388 +vt 0.661237 0.495044 +vt 0.817871 0.958374 +vt 0.885205 0.032725 +vt 0.661237 0.722645 +vt 0.693293 0.503638 +vt 0.944329 0.029337 +vt 0.981154 0.731379 +vt 0.977373 0.486830 +vt 0.989649 0.263822 +vt 0.873305 0.723869 +vt 0.981154 0.500820 +vt 0.870573 0.032734 +vt 0.693293 0.761173 +vt 0.679412 0.527027 +vt 0.695298 0.493838 +vt 0.679412 0.731676 +vt 0.826600 0.493835 +vt 0.826977 0.731673 +vt 0.826600 0.714385 +vt 0.814491 0.495042 +vt 0.122435 0.638558 +vt 0.015922 0.839080 +vt 0.835047 0.699404 +vt 0.993361 0.510073 +vt 0.758428 0.504317 +vt 0.072861 0.638558 +vt 0.015474 0.619132 +vt 0.835047 0.483438 +vt 0.845328 0.702461 +vt 0.015197 0.626266 +vt 0.014109 0.491099 +vt 0.993356 0.728667 +vt 0.758425 0.722912 +vt 0.833436 0.500823 +vt 0.891028 0.725398 +vt 0.672547 0.500827 +vt 0.752235 0.729690 +vt 0.667246 0.727168 +vt 0.891033 0.506802 +vt 0.752238 0.507120 +vt 0.071993 0.783837 +vt 0.969610 0.493832 +vt 0.987699 0.731670 +vt 0.641343 0.509140 +vt 0.689355 0.726560 +vt 0.969610 0.714382 +vt 0.122436 0.783837 +vt 0.641344 0.743247 +vt 0.833436 0.731382 +vt 0.845328 0.486829 +vt 0.814491 0.722643 +vt 0.825052 0.503733 +vt 0.016195 0.832047 +vt 0.634466 0.494220 +vt 0.825052 0.761267 +vt 0.826977 0.527024 +vt 0.022424 0.783234 +vt 0.035852 0.889154 +vt 0.043016 0.971597 +vt 0.706398 0.505224 +vt 0.072863 0.808180 +vt 0.028940 0.807392 +vt 0.010039 0.882150 +vt 0.137154 0.974703 +vt 0.631023 0.892124 +vt 0.649326 0.890699 +vt 0.121379 0.984023 +vt 0.648470 0.892315 +vt 0.072864 0.783142 +vt 0.043889 0.943476 +vt 0.078385 0.805896 +vt 0.075977 0.941215 +vt 0.613560 0.946909 +vt 0.672547 0.731385 +vt 0.701510 0.486829 +vt 0.669481 0.490576 +vt 0.072863 0.646796 +vt 0.648470 0.506013 +vt 0.080915 0.841605 +vt 0.968560 0.503835 +vt 0.102906 0.865583 +vt 0.634467 0.887149 +vt 0.987699 0.527021 +vt 0.968560 0.761369 +vt 0.690090 0.495972 +vt 0.701510 0.702461 +vt 0.603150 0.865583 +vt 0.014109 0.884028 +vt 0.706395 0.729929 +vt 0.816556 0.714481 +vt 0.023239 0.646888 +vt 0.040534 0.495932 +vt 0.081188 0.621686 +vt 0.007711 0.495744 +vt 0.041481 0.497122 +vt 0.080911 0.628820 +vt 0.003028 0.888966 +vt 0.041481 0.887645 +vt 0.060838 0.971173 +vt 0.631023 0.505822 +vt 0.649326 0.500176 +vt 0.081188 0.834572 +vt 0.805889 0.743046 +vt 0.122312 0.806766 +vt 0.988155 0.503653 +vt 0.115555 0.935422 +vt 0.904138 0.912557 +vt 0.988155 0.735605 +vt 0.813022 0.494763 +vt 0.890960 0.912565 +vt 0.735836 0.641861 +vt 0.693936 0.468644 +vt 0.027417 0.833361 +vt 0.420996 0.961603 +vt 0.032040 0.784613 +vt 0.284612 0.483847 +vt 0.656925 0.504187 +vt 0.681549 0.720168 +vt 0.066750 0.834450 +vt 0.299225 0.449509 +vt 0.999708 0.720167 +vt 0.989627 0.743247 +vt 0.121899 0.832034 +vt 0.693936 0.449159 +vt 0.420996 0.999935 +vt 0.008277 0.862094 +vt 0.082562 0.831201 +vt 0.741580 0.718717 +vt 0.678836 0.505353 +vt 0.815743 0.487362 +vt 0.741523 0.585977 +vt 0.678836 0.699564 +vt 0.553315 0.945729 +vt 0.982243 0.588758 +vt 0.460393 1.018433 +vt 0.949871 0.788878 +vt 0.982305 0.727355 +vt 0.668954 0.502598 +vt 0.949657 0.691167 +vt 0.979056 0.490574 +vt 0.078628 0.952623 +vt 0.035428 0.887064 +vt 0.812426 0.730862 +vt 0.971935 0.642457 +vt 0.805889 0.532195 +vt 0.173975 1.012235 +vt 0.908785 0.976444 +vt 0.726484 0.788878 +vt 0.984477 0.500479 +vt 0.894591 0.976453 +vt 0.737043 0.505375 +vt 0.726270 0.691167 +vt 0.987420 0.694407 +vt 0.999899 0.506981 +vt 0.968797 0.500648 +vt 0.989626 0.516135 +vt 0.652223 0.697892 +vt 0.656922 0.730164 +vt 0.681740 0.506981 +vt 0.985798 0.713641 +vt 0.053549 0.993732 +vt 0.043551 0.873068 +vt 0.522988 0.991572 +vt 0.062665 0.961706 +vt 0.169656 0.991799 +vt 0.060838 0.809705 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +s 1 +usemtl CabnetDoors +f 7640/15860/5520 7641/15864/5520 7642/15869/5520 7643/15873/5520 7644/15877/5520 7645/15883/5520 7646/15886/5520 7647/15889/5520 +f 7645/15882/5521 7644/15878/5521 7648/15893/5521 7649/15896/5521 +f 7650/15898/5522 7651/15902/5522 7652/15904/5522 7653/15905/5522 +f 7654/15909/5523 7655/15910/5523 7641/15865/5523 7640/15859/5523 +f 7655/15911/5524 7654/15908/5524 7656/15913/5524 7657/15914/5524 +f 7658/15916/5524 7659/15919/5524 7656/15913/5524 7654/15908/5524 +f 7658/15917/5523 7654/15909/5523 7640/15859/5523 7660/15921/5523 +f 7653/15906/5521 7645/15882/5521 7649/15896/5521 7650/15899/5521 +f 7660/15922/5520 7640/15860/5520 7647/15889/5520 7646/15886/5520 7645/15883/5520 7653/15907/5520 7652/15903/5520 7661/15925/5520 +f 7643/15874/5525 7644/15879/5525 7662/15928/5525 7663/15932/5525 +f 7653/15907/5520 7652/15903/5520 7646/15886/5520 7645/15883/5520 +f 7647/15890/5524 7640/15861/5524 7660/15923/5524 7661/15926/5524 +f 7645/15884/5526 7646/15887/5526 7664/15936/5526 7665/15938/5526 +f 7665/15938/5527 7664/15936/5527 7666/15940/5527 7667/15943/5527 +f 7668/15946/5527 7671/15954/5527 7670/15951/5527 7669/15949/5527 +f 7646/15888/5528 7643/15875/5528 7663/15933/5528 7664/15937/5528 +f 7640/15862/5529 7668/15946/5529 7669/15949/5529 7647/15891/5529 +f 7642/15870/5530 7673/15961/5530 7672/15957/5530 7641/15866/5530 +f 7647/15892/5531 7669/15950/5531 7673/15962/5531 7642/15871/5531 +f 7644/15880/5532 7645/15885/5532 7665/15939/5532 7662/15930/5532 +f 7641/15867/5533 7672/15958/5533 7668/15947/5533 7640/15863/5533 +f 7667/15944/5534 7666/15941/5534 7674/15966/5534 7675/15970/5534 +f 7676/15973/5535 7670/15952/5535 7671/15955/5535 7677/15975/5535 +f 7672/15959/5523 7679/15978/5523 7678/15976/5523 7677/15974/5523 +f 7664/15937/5523 7663/15933/5523 7674/15965/5523 7666/15942/5523 +f 7663/15934/5536 7662/15929/5536 7680/15982/5536 7681/15987/5536 +f 7672/15959/5523 7677/15974/5523 7671/15956/5523 7668/15948/5523 +f 7662/15930/5521 7665/15939/5521 7667/15945/5521 7675/15968/5521 +f 7669/15950/5521 7670/15953/5521 7676/15971/5521 7673/15962/5521 +f 7680/15983/5521 7682/15991/5521 7683/15994/5521 7684/15998/5521 +f 7679/15978/5523 7686/16005/5523 7685/16001/5523 7678/15976/5523 +f 7662/15931/5521 7675/15969/5521 7682/15992/5521 7680/15984/5521 +f 7675/15970/5537 7674/15966/5537 7687/16008/5537 7682/15993/5537 +f 7673/15963/5536 7688/16010/5536 7679/15979/5536 7672/15960/5536 +f 7676/15972/5521 7689/16014/5521 7688/16011/5538 7673/15964/5521 +f 7677/15975/5537 7678/15977/5537 7689/16015/5537 7676/15973/5537 +f 7674/15967/5523 7663/15935/5523 7681/15988/5523 7687/16009/5523 +f 7690/16016/5539 7684/16000/5539 7691/16020/5539 7692/16021/5539 +f 7693/16023/5540 7696/16031/5541 7695/16029/5542 7694/16026/5542 +f 7682/15993/5537 7687/16008/5537 7697/16033/5537 7683/15995/5537 +f 7679/15980/5523 7698/16036/5523 7694/16028/5523 7686/16006/5523 +f 7689/16014/5521 7700/16043/5521 7699/16039/5543 7688/16011/5538 +f 7687/16009/5523 7681/15988/5523 7701/16045/5523 7697/16034/5523 +f 7678/15977/5537 7685/16002/5537 7700/16042/5537 7689/16015/5537 +f 7684/15999/5544 7683/15996/5544 7702/16048/5544 7691/16019/5544 +f 7680/15985/5521 7684/16000/5521 7690/16016/5521 7703/16050/5521 +f 7704/16053/5545 7703/16051/5536 7690/16017/5536 7705/16056/5545 +f 7706/16059/5545 7693/16024/5545 7694/16027/5536 7698/16037/5536 +f 7704/16054/5545 7705/16057/5545 7693/16025/5545 7706/16060/5545 +f 7688/16012/5546 7706/16061/5546 7698/16038/5546 7679/15981/5546 +f 7694/16028/5547 7695/16030/5547 7707/16063/5547 7686/16006/5547 +f 7700/16043/5548 7709/16067/5548 7708/16064/5548 7699/16039/5548 +f 7681/15989/5549 7704/16055/5550 7706/16061/5551 7688/16012/5538 +f 7681/15989/5549 7680/15986/5552 7703/16052/5552 7704/16055/5550 +f 7710/16071/5553 7711/16075/5553 7712/16079/5554 7713/16083/5555 +f 7714/16087/5556 7715/16090/5557 7716/16093/5558 7717/16096/5556 +f 7697/16034/5559 7701/16045/5560 7715/16091/5561 7714/16088/5559 +f 7683/15997/5562 7697/16035/5562 7714/16089/5562 7702/16049/5562 +f 7705/16057/5563 7718/16100/5564 7696/16032/5541 7693/16025/5540 +f 7699/16040/5543 7708/16065/5565 7715/16092/5561 7701/16046/5560 +f 7686/16007/5566 7707/16062/5566 7719/16104/5566 7685/16003/5566 +f 7685/16004/5567 7719/16102/5567 7709/16068/5567 7700/16044/5567 +f 7705/16058/5563 7690/16018/5568 7692/16022/5568 7718/16101/5564 +f 7708/16065/5569 7720/16105/5570 7716/16094/5558 7715/16092/5557 +f 7721/16108/5571 7722/16112/5572 7723/16116/5573 7717/16097/5573 +f 7691/16019/5574 7702/16048/5574 7723/16117/5574 7711/16076/5574 +f 7712/16080/5575 7711/16077/5576 7723/16118/5576 7722/16113/5577 +f 7692/16021/5578 7691/16020/5578 7711/16078/5578 7710/16072/5578 +f 7713/16084/5579 7724/16120/5580 7725/16123/5581 7710/16073/5582 +f 7709/16069/5583 7721/16109/5584 7720/16106/5570 7708/16066/5583 +f 7696/16031/5585 7724/16121/5580 7713/16085/5579 7695/16029/5585 +f 7719/16103/5586 7722/16114/5572 7721/16110/5571 7709/16070/5586 +f 7707/16062/5587 7712/16081/5575 7722/16115/5577 7719/16104/5587 +f 7695/16030/5588 7713/16086/5555 7712/16082/5554 7707/16063/5588 +f 7718/16100/5589 7725/16124/5581 7724/16122/5580 7696/16032/5590 +f 7721/16111/5584 7717/16098/5591 7716/16095/5558 7720/16107/5570 +f 7702/16049/5592 7714/16089/5592 7717/16099/5592 7723/16119/5592 +f 7718/16101/5589 7692/16022/5593 7710/16074/5593 7725/16125/5581 +f 7657/15914/5524 7656/15913/5524 7726/16126/5524 7727/16127/5524 +f 7649/15897/5524 7648/15894/5524 7727/16127/5524 7726/16126/5524 +f 7726/16126/5524 7656/15913/5524 7659/15919/5524 7651/15901/5524 +f 7651/15901/5524 7650/15900/5524 7649/15897/5524 7726/16126/5524 +f 7655/15912/5594 7657/15915/5594 7642/15872/5594 7641/15868/5594 +f 7643/15876/5594 7727/16128/5594 7648/15895/5594 7644/15881/5594 +f 7642/15872/5594 7657/15915/5594 7727/16128/5594 7643/15876/5594 +f 7661/15927/5522 7659/15920/5522 7658/15918/5522 7660/15924/5522 +f 7652/15904/5522 7651/15902/5522 7659/15920/5522 7661/15927/5522 +f 7701/16047/5560 7681/15990/5549 7688/16013/5538 7699/16041/5543 +f 7728/16129/5595 7729/16130/5595 7730/16131/5596 7731/16133/5597 +f 7732/16134/5598 7731/16132/5598 7733/16137/5599 7734/16139/5600 +f 7735/16141/5601 7736/16142/5601 7737/16143/5602 7738/16145/5603 +f 7737/16143/5604 7739/16146/5604 7740/16148/5604 7741/16150/5604 +f 7742/16152/5605 7743/16153/5605 7744/16154/5605 7745/16156/5605 +f 7746/16158/5606 7729/16130/5606 7747/16159/5606 7739/16147/5606 +f 7736/16142/5607 7746/16157/5607 7739/16146/5607 7737/16143/5607 +f 7748/16160/5608 7749/16161/5608 7746/16157/5607 7736/16142/5607 +f 7749/16162/5609 7730/16131/5609 7729/16130/5606 7746/16158/5606 +f 7750/16163/5610 7742/16151/5610 7745/16155/5610 7751/16164/5610 +f 7732/16135/5610 7752/16167/5610 7742/16151/5610 7750/16163/5610 +f 7752/16166/5605 7753/16168/5605 7743/16153/5605 7742/16152/5605 +f 7744/16154/5611 7738/16144/5611 7754/16170/5611 7755/16171/5611 +f 7739/16147/5612 7747/16159/5612 7756/16172/5612 7740/16149/5612 +f 7751/16164/5613 7745/16155/5613 7757/16174/5613 7758/16176/5613 +f 7743/16153/5614 7735/16140/5614 7738/16144/5614 7744/16154/5614 +f 7753/16168/5614 7759/16178/5614 7735/16140/5614 7743/16153/5614 +f 7759/16177/5615 7748/16160/5615 7736/16142/5601 7735/16141/5601 +f 7749/16161/5608 7748/16160/5608 7760/16179/5616 7761/16181/5616 +f 7753/16168/5617 7752/16166/5617 7762/16182/5617 7763/16184/5617 +f 7748/16160/5615 7759/16177/5615 7764/16185/5618 7760/16179/5619 +f 7765/16187/5595 7747/16159/5595 7729/16130/5595 7728/16129/5595 +f 7762/16183/5620 7734/16138/5620 7766/16190/5620 7767/16192/5620 +f 7764/16186/5621 7763/16184/5621 7768/16193/5621 7769/16195/5621 +f 7763/16184/5622 7762/16182/5622 7767/16191/5622 7768/16193/5622 +f 7760/16179/5619 7764/16185/5618 7769/16196/5623 7770/16197/5624 +f 7730/16131/5609 7749/16162/5609 7761/16180/5625 7771/16198/5625 +f 7759/16178/5626 7753/16168/5626 7763/16184/5626 7764/16186/5626 +f 7731/16133/5597 7730/16131/5596 7771/16198/5627 7733/16136/5627 +f 7752/16167/5628 7732/16135/5628 7734/16138/5628 7762/16183/5628 +f 7770/16197/5624 7769/16196/5623 7772/16199/5629 7773/16200/5630 +f 7766/16190/5631 7774/16201/5632 7775/16204/5633 7776/16205/5634 +f 7777/16206/5635 7770/16197/5635 7773/16200/5635 7778/16208/5635 +f 7774/16201/5636 7779/16211/5636 7780/16213/5636 7775/16204/5636 +f 7771/16198/5637 7761/16180/5637 7777/16207/5637 7779/16212/5637 +f 7733/16136/5638 7771/16198/5638 7779/16212/5638 7774/16202/5638 +f 7761/16181/5639 7760/16179/5639 7770/16197/5639 7777/16206/5639 +f 7734/16139/5600 7733/16137/5599 7774/16203/5632 7766/16189/5631 +f 7776/16205/5634 7775/16204/5633 7781/16217/5640 7782/16218/5641 +f 7778/16208/5642 7773/16200/5642 7783/16219/5642 7784/16221/5642 +f 7775/16204/5643 7780/16213/5643 7785/16222/5643 7781/16217/5643 +f 7780/16214/5644 7778/16209/5644 7784/16220/5644 7785/16223/5644 +f 7768/16193/5645 7767/16191/5645 7786/16224/5645 7787/16227/5645 +f 7769/16196/5646 7768/16194/5646 7787/16229/5646 7772/16199/5646 +f 7767/16192/5647 7766/16190/5647 7776/16205/5647 7786/16226/5647 +f 7779/16212/5648 7777/16207/5648 7778/16210/5648 7780/16215/5648 +f 7785/16223/5649 7784/16220/5649 7788/16231/5649 7789/16232/5649 +f 7790/16234/5650 7782/16218/5650 7791/16235/5650 7792/16236/5650 +f 7793/16238/5651 7794/16240/5651 7795/16242/5651 7796/16244/5651 +f 7794/16240/5652 7790/16233/5652 7792/16237/5652 7795/16242/5652 +f 7773/16200/5630 7772/16199/5629 7793/16239/5653 7783/16219/5654 +f 7787/16228/5655 7786/16225/5655 7790/16233/5655 7794/16240/5655 +f 7772/16199/5656 7787/16229/5656 7794/16241/5656 7793/16239/5656 +f 7786/16226/5657 7776/16205/5657 7782/16218/5657 7790/16234/5657 +f 7797/16245/5658 7798/16247/5658 7799/16249/5659 7800/16250/5659 +f 7788/16230/5660 7801/16253/5660 7802/16254/5660 7803/16256/5660 +f 7804/16259/5661 7805/16261/5661 7806/16263/5661 7807/16264/5661 +f 7792/16236/5662 7791/16235/5662 7808/16267/5662 7809/16269/5662 +f 7781/16216/5663 7785/16223/5663 7789/16232/5663 7810/16273/5663 +f 7784/16221/5664 7783/16219/5664 7801/16253/5664 7788/16230/5664 +f 7782/16218/5641 7781/16217/5640 7810/16272/5665 7791/16235/5666 +f 7783/16219/5654 7793/16239/5653 7796/16243/5667 7801/16253/5668 +f 7741/16150/5669 7740/16148/5669 7811/16274/5669 7812/16276/5669 +f 7756/16172/5670 7813/16277/5670 7814/16279/5670 7815/16283/5670 +f 7757/16173/5671 7755/16171/5671 7816/16284/5671 7817/16286/5671 +f 7813/16278/5672 7758/16175/5673 7818/16288/5674 7814/16280/5675 +f 7747/16159/5676 7765/16187/5676 7813/16277/5676 7756/16172/5676 +f 7738/16145/5603 7737/16143/5602 7741/16150/5677 7754/16169/5678 +f 7745/16156/5679 7744/16154/5679 7755/16171/5679 7757/16173/5679 +f 7765/16188/5680 7751/16165/5680 7758/16175/5673 7813/16278/5672 +f 7815/16282/5681 7814/16281/5681 7819/16290/5681 7820/16293/5681 +f 7817/16286/5682 7816/16284/5682 7821/16294/5682 7822/16297/5682 +f 7814/16281/5675 7818/16289/5674 7823/16300/5683 7819/16290/5684 +f 7818/16289/5685 7817/16287/5685 7822/16298/5685 7823/16300/5685 +f 7754/16169/5678 7741/16150/5677 7812/16276/5686 7824/16302/5687 +f 7740/16149/5688 7756/16172/5688 7815/16283/5688 7811/16275/5688 +f 7755/16171/5689 7754/16170/5689 7824/16301/5689 7816/16284/5689 +f 7758/16176/5690 7757/16174/5690 7817/16287/5690 7818/16289/5690 +f 7823/16300/5691 7822/16298/5691 7825/16303/5691 7826/16305/5691 +f 7821/16295/5692 7827/16306/5692 7828/16307/5692 7829/16309/5692 +f 7830/16311/5693 7820/16291/5693 7831/16314/5693 7832/16316/5693 +f 7827/16306/5694 7833/16318/5695 7834/16319/5696 7828/16307/5697 +f 7812/16276/5698 7811/16274/5698 7830/16313/5698 7833/16318/5698 +f 7824/16302/5687 7812/16276/5686 7833/16318/5695 7827/16306/5694 +f 7811/16275/5699 7815/16283/5699 7820/16292/5699 7830/16312/5699 +f 7816/16285/5700 7824/16302/5700 7827/16306/5700 7821/16295/5700 +f 7832/16316/5701 7831/16314/5701 7805/16261/5701 7804/16259/5701 +f 7828/16307/5697 7834/16319/5696 7835/16320/5702 7836/16322/5702 +f 7834/16319/5703 7832/16317/5703 7804/16260/5704 7835/16320/5704 +f 7831/16314/5705 7837/16323/5705 7797/16246/5706 7805/16261/5707 +f 7819/16290/5684 7823/16300/5683 7826/16305/5708 7837/16324/5709 +f 7822/16299/5710 7821/16296/5710 7829/16310/5710 7825/16304/5710 +f 7820/16293/5711 7819/16290/5711 7837/16324/5711 7831/16315/5711 +f 7833/16318/5712 7830/16313/5712 7832/16317/5712 7834/16319/5712 +f 7838/16325/5713 7839/16327/5713 7840/16328/5713 7841/16330/5713 +f 7791/16235/5666 7810/16272/5665 7842/16333/5714 7808/16267/5714 +f 7839/16327/5715 7836/16321/5715 7843/16336/5716 7840/16328/5716 +f 7801/16253/5668 7796/16243/5667 7844/16339/5717 7802/16254/5717 +f 7829/16310/5718 7828/16308/5718 7836/16321/5715 7839/16327/5715 +f 7826/16305/5719 7825/16303/5719 7838/16326/5720 7798/16247/5721 +f 7837/16324/5709 7826/16305/5708 7798/16247/5658 7797/16245/5658 +f 7825/16304/5722 7829/16310/5722 7839/16327/5722 7838/16325/5722 +f 7845/16342/5723 7803/16257/5724 7802/16255/5724 7844/16340/5724 +f 7809/16270/5723 7845/16342/5723 7844/16340/5724 7846/16343/5724 +f 7808/16268/5723 7842/16334/5723 7845/16342/5723 7809/16270/5723 +f 7842/16334/5723 7847/16345/5724 7803/16257/5724 7845/16342/5723 +f 7848/16347/5725 7807/16265/5725 7806/16262/5726 7800/16251/5726 +f 7841/16331/5727 7848/16347/5725 7800/16251/5726 7799/16248/5726 +f 7840/16329/5727 7843/16337/5727 7848/16347/5725 7841/16331/5727 +f 7843/16337/5727 7849/16348/5727 7807/16265/5725 7848/16347/5725 +f 7796/16244/5728 7795/16242/5728 7846/16344/5728 7844/16341/5728 +f 7836/16322/5702 7835/16320/5702 7849/16349/5729 7843/16338/5729 +f 7810/16273/5730 7789/16232/5730 7847/16346/5730 7842/16335/5730 +f 7798/16247/5721 7838/16326/5720 7841/16332/5731 7799/16249/5731 +f 7795/16242/5732 7792/16237/5732 7809/16271/5732 7846/16344/5732 +f 7835/16320/5704 7804/16260/5704 7807/16266/5733 7849/16349/5733 +f 7789/16232/5734 7788/16231/5734 7803/16258/5734 7847/16346/5734 +f 7805/16261/5707 7797/16246/5706 7800/16252/5735 7806/16263/5735 +f 7850/16351/5595 7851/16352/5595 7852/16353/5596 7853/16355/5597 +f 7854/16356/5736 7853/16354/5736 7855/16358/5737 7856/16359/5738 +f 7857/16360/5611 7858/16362/5611 7859/16365/5611 7860/16367/5611 +f 7861/16369/5605 7862/16370/5605 7857/16361/5605 7863/16373/5605 +f 7864/16375/5606 7851/16352/5606 7865/16376/5606 7866/16377/5606 +f 7867/16379/5607 7864/16374/5607 7866/16378/5607 7868/16380/5607 +f 7869/16381/5607 7870/16382/5607 7864/16374/5607 7867/16379/5607 +f 7870/16383/5609 7852/16353/5609 7851/16352/5606 7864/16375/5606 +f 7871/16384/5610 7861/16368/5610 7863/16372/5610 7872/16385/5610 +f 7854/16356/5610 7873/16387/5610 7861/16368/5610 7871/16384/5610 +f 7873/16386/5605 7874/16388/5605 7862/16370/5605 7861/16369/5605 +f 7866/16377/5612 7865/16376/5612 7875/16390/5612 7876/16392/5612 +f 7872/16385/5739 7863/16372/5739 7877/16393/5739 7878/16395/5739 +f 7879/16396/5740 7872/16385/5741 7878/16395/5742 7880/16398/5743 +f 7862/16371/5614 7881/16400/5614 7858/16362/5614 7857/16360/5614 +f 7874/16389/5614 7882/16402/5614 7881/16400/5614 7862/16371/5614 +f 7870/16382/5616 7869/16381/5616 7883/16403/5616 7884/16405/5616 +f 7874/16388/5617 7873/16386/5617 7885/16406/5617 7886/16408/5617 +f 7869/16381/5744 7882/16401/5744 7887/16411/5618 7883/16403/5619 +f 7871/16384/5745 7850/16350/5745 7853/16354/5736 7854/16356/5736 +f 7872/16385/5741 7879/16396/5740 7850/16350/5745 7871/16384/5745 +f 7879/16397/5595 7865/16376/5595 7851/16352/5595 7850/16351/5595 +f 7888/16412/5637 7884/16404/5637 7889/16414/5637 7890/16416/5637 +f 7885/16407/5746 7856/16359/5746 7891/16418/5746 7892/16420/5746 +f 7887/16410/5621 7886/16409/5621 7893/16421/5621 7894/16424/5621 +f 7886/16408/5747 7885/16406/5747 7892/16419/5747 7893/16423/5747 +f 7852/16353/5609 7870/16383/5609 7884/16404/5625 7888/16412/5625 +f 7882/16402/5626 7874/16389/5626 7886/16409/5626 7887/16410/5626 +f 7853/16355/5597 7852/16353/5596 7888/16412/5627 7855/16357/5627 +f 7873/16387/5748 7854/16356/5748 7856/16359/5748 7885/16407/5748 +f 7894/16425/5646 7893/16422/5646 7895/16429/5646 7896/16430/5646 +f 7893/16423/5645 7892/16419/5645 7897/16431/5645 7895/16427/5645 +f 7898/16435/5624 7894/16425/5623 7896/16430/5629 7899/16436/5630 +f 7891/16418/5749 7900/16438/5750 7901/16439/5751 7902/16440/5752 +f 7855/16357/5638 7888/16412/5638 7890/16416/5638 7900/16437/5638 +f 7884/16405/5639 7883/16403/5639 7898/16434/5639 7889/16413/5639 +f 7856/16359/5738 7855/16358/5737 7900/16438/5750 7891/16418/5749 +f 7883/16403/5619 7887/16411/5618 7894/16426/5623 7898/16434/5624 +f 7902/16440/5752 7901/16439/5751 7903/16442/5753 7904/16443/5754 +f 7905/16446/5642 7899/16436/5642 7906/16447/5642 7907/16448/5642 +f 7901/16439/5643 7908/16452/5643 7909/16453/5643 7903/16442/5643 +f 7908/16450/5644 7905/16444/5644 7907/16449/5644 7909/16454/5644 +f 7892/16420/5755 7891/16418/5755 7902/16440/5755 7897/16433/5755 +f 7890/16416/5648 7889/16414/5648 7905/16445/5648 7908/16451/5648 +f 7900/16438/5636 7890/16417/5636 7908/16452/5636 7901/16439/5636 +f 7889/16415/5756 7898/16435/5756 7899/16436/5756 7905/16446/5756 +f 7907/16448/5664 7906/16447/5664 7910/16455/5664 7911/16456/5664 +f 7903/16441/5663 7909/16454/5663 7912/16458/5663 7913/16460/5663 +f 7909/16454/5649 7907/16449/5649 7911/16457/5649 7912/16458/5649 +f 7914/16461/5757 7904/16443/5757 7915/16463/5757 7916/16464/5757 +f 7899/16436/5630 7896/16430/5629 7917/16466/5758 7906/16447/5759 +f 7895/16428/5655 7897/16432/5655 7914/16462/5655 7918/16469/5655 +f 7896/16430/5656 7895/16429/5656 7918/16468/5656 7917/16466/5656 +f 7897/16433/5760 7902/16440/5760 7904/16443/5760 7914/16461/5760 +f 7919/16470/5761 7920/16472/5761 7921/16474/5762 7922/16475/5762 +f 7911/16456/5763 7910/16455/5763 7923/16478/5763 7924/16480/5763 +f 7925/16484/5661 7926/16486/5661 7927/16488/5661 7928/16489/5661 +f 7916/16464/5764 7915/16463/5764 7929/16493/5764 7930/16495/5764 +f 7904/16443/5754 7903/16442/5753 7913/16459/5765 7915/16463/5766 +f 7906/16447/5759 7917/16466/5758 7931/16499/5767 7910/16455/5668 +f 7918/16469/5652 7914/16462/5652 7916/16465/5652 7932/16501/5652 +f 7917/16467/5651 7918/16469/5651 7932/16501/5651 7931/16500/5651 +f 7875/16390/5670 7880/16399/5670 7933/16502/5670 7934/16504/5670 +f 7877/16394/5671 7860/16366/5671 7935/16508/5671 7936/16510/5671 +f 7880/16398/5743 7878/16395/5742 7937/16511/5768 7933/16503/5769 +f 7878/16395/5770 7877/16393/5770 7936/16509/5770 7937/16511/5770 +f 7868/16380/5604 7866/16378/5604 7876/16391/5604 7938/16512/5604 +f 7865/16376/5676 7879/16397/5676 7880/16399/5676 7875/16390/5676 +f 7858/16363/5771 7868/16380/5771 7938/16512/5772 7859/16364/5678 +f 7863/16373/5679 7857/16361/5679 7860/16366/5679 7877/16394/5679 +f 7933/16503/5769 7937/16511/5768 7939/16513/5773 7940/16514/5774 +f 7937/16511/5775 7936/16509/5775 7941/16516/5775 7939/16513/5775 +f 7935/16506/5700 7942/16520/5700 7943/16521/5700 7944/16522/5700 +f 7945/16526/5699 7934/16504/5699 7946/16528/5699 7947/16531/5699 +f 7938/16512/5669 7876/16391/5669 7945/16525/5669 7948/16534/5669 +f 7859/16364/5678 7938/16512/5772 7948/16534/5686 7942/16518/5687 +f 7876/16392/5688 7875/16390/5688 7934/16504/5688 7945/16526/5688 +f 7860/16367/5776 7859/16365/5776 7942/16519/5776 7935/16507/5776 +f 7944/16522/5692 7943/16521/5692 7949/16536/5692 7950/16538/5692 +f 7947/16532/5693 7946/16529/5693 7951/16541/5693 7952/16543/5693 +f 7943/16521/5694 7953/16544/5695 7954/16545/5696 7949/16536/5697 +f 7953/16544/5712 7947/16533/5712 7952/16542/5712 7954/16545/5712 +f 7936/16510/5682 7935/16508/5682 7944/16523/5682 7941/16515/5682 +f 7934/16505/5681 7933/16503/5681 7940/16514/5681 7946/16530/5681 +f 7948/16535/5698 7945/16527/5698 7947/16533/5698 7953/16544/5698 +f 7942/16520/5687 7948/16535/5686 7953/16544/5695 7943/16521/5694 +f 7954/16545/5703 7952/16542/5703 7925/16485/5704 7955/16546/5704 +f 7951/16541/5705 7956/16547/5705 7919/16471/5706 7926/16486/5707 +f 7957/16549/5777 7950/16539/5777 7958/16551/5777 7959/16552/5777 +f 7956/16548/5778 7960/16554/5779 7920/16472/5761 7919/16470/5761 +f 7939/16513/5780 7941/16516/5780 7957/16550/5780 7960/16554/5780 +f 7940/16514/5774 7939/16513/5773 7960/16554/5779 7956/16548/5778 +f 7941/16517/5710 7944/16524/5710 7950/16539/5710 7957/16549/5710 +f 7946/16530/5711 7940/16514/5711 7956/16548/5711 7951/16540/5711 +f 7959/16552/5713 7958/16551/5713 7961/16555/5713 7962/16557/5713 +f 7915/16463/5766 7913/16459/5765 7963/16561/5714 7929/16493/5714 +f 7910/16455/5668 7931/16499/5767 7964/16564/5717 7923/16478/5717 +f 7958/16551/5715 7965/16567/5715 7966/16569/5716 7961/16555/5716 +f 7949/16536/5697 7954/16545/5696 7955/16546/5702 7965/16568/5702 +f 7952/16543/5701 7951/16541/5701 7926/16486/5701 7925/16484/5701 +f 7950/16539/5718 7949/16537/5718 7965/16567/5715 7958/16551/5715 +f 7960/16554/5781 7957/16550/5781 7959/16553/5782 7920/16472/5783 +f 7967/16572/5723 7924/16481/5724 7923/16479/5724 7964/16565/5724 +f 7930/16496/5723 7967/16572/5723 7964/16565/5724 7968/16574/5724 +f 7929/16494/5723 7963/16562/5723 7967/16573/5723 7930/16497/5723 +f 7963/16562/5723 7969/16576/5724 7924/16482/5724 7967/16573/5723 +f 7970/16578/5725 7928/16490/5725 7927/16487/5726 7922/16476/5726 +f 7962/16558/5727 7970/16578/5725 7922/16476/5726 7921/16473/5726 +f 7961/16556/5727 7966/16570/5727 7970/16579/5725 7962/16559/5727 +f 7966/16570/5727 7971/16580/5727 7928/16491/5725 7970/16579/5725 +f 7931/16500/5728 7932/16501/5728 7968/16575/5728 7964/16566/5728 +f 7965/16568/5702 7955/16546/5702 7971/16581/5729 7966/16571/5729 +f 7913/16460/5730 7912/16458/5730 7969/16577/5730 7963/16563/5730 +f 7920/16472/5783 7959/16553/5782 7962/16560/5784 7921/16474/5784 +f 7932/16501/5732 7916/16465/5732 7930/16498/5732 7968/16575/5732 +f 7955/16546/5704 7925/16485/5704 7928/16492/5733 7971/16581/5733 +f 7912/16458/5734 7911/16457/5734 7924/16483/5734 7969/16577/5734 +f 7926/16486/5707 7919/16471/5706 7922/16477/5735 7927/16488/5735 +o Chair.021 +v 12.414448 0.415382 3.244977 +v 12.414448 0.429951 3.244977 +v 12.462075 0.429951 3.231059 +v 12.847889 0.429951 3.118315 +v 12.895515 0.429951 3.104398 +v 12.895515 0.415382 3.104398 +v 12.847889 0.415382 3.118315 +v 12.462075 0.415382 3.231059 +v 13.003402 0.429951 3.473589 +v 13.003402 0.415382 3.473589 +v 13.003402 0.400812 3.473589 +v 12.959614 0.400812 3.486385 +v 12.847889 0.400812 3.118315 +v 12.895515 0.400812 3.104398 +v 12.522334 0.415382 3.614168 +v 12.522334 0.429951 3.614168 +v 12.566122 0.415382 3.601373 +v 12.566122 0.429951 3.601373 +v 12.522334 0.400812 3.614168 +v 12.566122 0.400812 3.601373 +v 12.414448 0.400812 3.244977 +v 12.462075 0.400812 3.231059 +v 12.868794 0.432961 3.086069 +v 12.854445 0.432961 3.090262 +v 12.855706 0.421009 3.094579 +v 12.870056 0.421009 3.090385 +v 12.852164 0.426967 3.082460 +v 12.866514 0.426967 3.078266 +v 12.427800 0.419106 3.217478 +v 12.441945 0.419106 3.213344 +v 12.438403 0.425064 3.201225 +v 12.424259 0.425064 3.205359 +v 12.426500 0.434699 3.213027 +v 12.440644 0.434699 3.208894 +v 12.850414 0.431853 3.076468 +v 12.864763 0.431853 3.072275 +v 12.436613 0.433592 3.195099 +v 12.422469 0.433592 3.199233 +v 12.419028 0.592772 3.187459 +v 12.423059 0.593879 3.201253 +v 12.865355 0.592141 3.074296 +v 12.851005 0.592141 3.078489 +v 12.861323 0.591033 3.060501 +v 12.856161 0.829840 3.042838 +v 12.860192 0.830948 3.056632 +v 12.413867 0.831579 3.169796 +v 12.417898 0.832686 3.183590 +v 12.846973 0.591033 3.064695 +v 12.437204 0.593879 3.197120 +v 12.433173 0.592772 3.183326 +v 12.863057 0.830737 3.066434 +v 12.837140 0.870951 3.059955 +v 12.839687 0.870348 3.068671 +v 12.434910 0.832325 3.189270 +v 12.420766 0.832325 3.193404 +v 12.441950 0.869634 3.183019 +v 12.458206 0.864490 3.178682 +v 12.841812 0.829840 3.047032 +v 12.425610 0.608202 3.209980 +v 12.432042 0.832686 3.179457 +v 12.428011 0.831579 3.165663 +v 12.845842 0.830948 3.060826 +v 12.833509 0.869953 3.047531 +v 12.867901 0.606614 3.083012 +v 12.853552 0.606614 3.087205 +v 12.848707 0.830737 3.070628 +v 12.439754 0.608202 3.205847 +v 12.439400 0.870373 3.174293 +v 12.455656 0.865229 3.169955 +v 12.452025 0.864232 3.157531 +v 12.768790 0.913073 3.086301 +v 12.766047 0.914244 3.078578 +v 12.509003 0.911897 3.150659 +v 12.510943 0.911148 3.158582 +v 12.816096 0.867524 3.052815 +v 12.819727 0.868521 3.065238 +v 12.757014 0.902898 3.082129 +v 12.753103 0.901824 3.068747 +v 12.822274 0.867919 3.073956 +v 12.435769 0.869376 3.161868 +v 12.518401 0.900855 3.148799 +v 12.514490 0.899781 3.135418 +v 12.505092 0.910823 3.137278 +v 12.762136 0.913170 3.065197 +v 12.518723 0.901346 3.157096 +v 12.759757 0.901727 3.089851 +v 12.959614 0.415382 3.486385 +v 12.959614 0.429951 3.486385 +v 12.951360 0.438060 3.287764 +v 12.956966 0.443651 3.286126 +v 12.920198 0.443651 3.160303 +v 12.914592 0.438060 3.161941 +v 12.914762 0.429976 3.161891 +v 12.905504 0.437950 3.130845 +v 12.906407 0.430300 3.133304 +v 12.970263 0.429903 3.282240 +v 12.970094 0.437987 3.282290 +v 13.006862 0.437987 3.408111 +v 13.007030 0.429903 3.408062 +v 13.001494 0.443828 3.409680 +v 13.010442 0.439408 3.440301 +v 13.015154 0.434055 3.436490 +v 12.956897 0.424135 3.286146 +v 12.964656 0.424311 3.283879 +v 13.001424 0.424311 3.409700 +v 12.993665 0.424135 3.411968 +v 12.964725 0.443828 3.283858 +v 12.993734 0.443651 3.411947 +v 12.933325 0.437987 3.156467 +v 12.927958 0.443828 3.158035 +v 12.951530 0.429976 3.287714 +v 12.988297 0.429976 3.413536 +v 12.920128 0.424135 3.160323 +v 12.927888 0.424311 3.158056 +v 13.014416 0.426646 3.433336 +v 13.008183 0.421521 3.432827 +v 13.002663 0.439247 3.442501 +v 13.000402 0.421360 3.435026 +v 12.995691 0.426713 3.438838 +v 12.933494 0.429903 3.156417 +v 12.924245 0.437881 3.125392 +v 12.918347 0.443408 3.125149 +v 12.912304 0.424773 3.133548 +v 12.920047 0.424940 3.131226 +v 12.925147 0.430231 3.127852 +v 12.988128 0.438060 3.413586 +v 12.898473 0.420977 3.106151 +v 12.904842 0.416357 3.108014 +v 12.912571 0.416497 3.105643 +v 12.917218 0.420919 3.100720 +v 12.915662 0.427313 3.096021 +v 12.910604 0.443241 3.127471 +v 12.910560 0.402967 3.077935 +v 12.908498 0.407418 3.071506 +v 12.896915 0.427371 3.101452 +v 12.889747 0.407458 3.076922 +v 12.891809 0.403008 3.083350 +v 12.909291 0.431932 3.094159 +v 12.901762 0.410634 3.068394 +v 12.901562 0.431793 3.096529 +v 12.894044 0.410537 3.070803 +v 12.884769 0.380352 3.059889 +v 12.887135 0.378323 3.067351 +v 12.903523 0.380334 3.054483 +v 12.896569 0.381800 3.050625 +v 12.888858 0.381756 3.053056 +v 12.898544 0.399792 3.086462 +v 12.906262 0.399889 3.084054 +v 12.892187 0.345795 3.035629 +v 12.884477 0.345756 3.038061 +v 12.894087 0.376856 3.071210 +v 12.882782 0.342751 3.052456 +v 12.889747 0.341467 3.056357 +v 12.905887 0.378304 3.061944 +v 12.901798 0.376901 3.068779 +v 12.897458 0.341506 3.053925 +v 12.901534 0.342735 3.047050 +v 13.015956 0.349401 3.508813 +v 13.013873 0.348454 3.501057 +v 13.025402 -0.002953 3.540512 +v 13.027485 -0.002007 3.548268 +v 12.899154 0.344511 3.039530 +v 12.874840 0.001491 2.956327 +v 12.867873 0.002774 2.952425 +v 13.030929 0.350077 3.510405 +v 13.023120 0.350056 3.512505 +v 13.034649 -0.001352 3.551960 +v 13.042458 -0.001331 3.549860 +v 12.858467 -0.000270 2.969254 +v 12.865433 -0.001553 2.973154 +v 12.880400 0.344527 3.044936 +v 13.019122 0.425574 3.470003 +v 13.023288 0.421603 3.464324 +v 12.996428 0.434122 3.441992 +v 13.004569 0.421652 3.469849 +v 13.011326 0.425454 3.472147 +v 13.015038 0.412305 3.456286 +v 13.007241 0.412185 3.458430 +v 13.003077 0.416156 3.464109 +v 13.010656 0.403231 3.490679 +v 13.017743 0.405075 3.494107 +v 13.020311 0.398698 3.474334 +v 13.012506 0.398640 3.476442 +v 13.008685 0.400566 3.483303 +v 13.021794 0.416106 3.458583 +v 13.016737 0.371230 3.490925 +v 13.012971 0.372479 3.497970 +v 13.027399 0.400542 3.477763 +v 13.031684 0.372464 3.492428 +v 13.024546 0.371267 3.488823 +v 13.025550 0.405133 3.492000 +v 13.022155 0.375406 3.509204 +v 13.029963 0.375443 3.507102 +v 13.029370 0.403207 3.485138 +v 13.033731 0.374194 3.500057 +v 13.034669 0.349392 3.503269 +v 13.032586 0.348446 3.495513 +v 13.015017 0.374209 3.505599 +v 13.017612 0.347770 3.493920 +v 13.025422 0.347791 3.491822 +v 13.036951 -0.003617 3.531277 +v 13.029142 -0.003637 3.533376 +v 12.856086 0.001507 2.961732 +v 13.044115 -0.002962 3.534968 +v 12.877220 -0.000286 2.963847 +v 12.866653 0.000611 2.962790 +v 12.873144 -0.001514 2.970721 +v 12.860163 0.002736 2.954858 +v 13.035801 -0.002484 3.541618 +v 13.046198 -0.002015 3.542723 +v 12.448833 0.438060 3.434614 +v 12.454440 0.443651 3.432975 +v 12.417672 0.443651 3.307153 +v 12.412066 0.438060 3.308791 +v 12.412234 0.429976 3.308742 +v 12.402979 0.437950 3.277694 +v 12.403881 0.430300 3.280154 +v 12.498898 0.424311 3.556550 +v 12.504504 0.429903 3.554912 +v 12.511890 0.426646 3.580186 +v 12.505656 0.421521 3.579677 +v 12.454370 0.424135 3.432996 +v 12.462130 0.424311 3.430728 +v 12.491138 0.424135 3.558818 +v 12.462200 0.443828 3.430708 +v 12.491208 0.443651 3.558797 +v 12.498968 0.443828 3.556530 +v 12.467567 0.437987 3.429139 +v 12.504335 0.437987 3.554961 +v 12.430799 0.437987 3.303317 +v 12.425431 0.443828 3.304885 +v 12.449003 0.429976 3.434564 +v 12.485771 0.429976 3.560386 +v 12.417602 0.424135 3.307173 +v 12.425362 0.424311 3.304906 +v 12.500136 0.439247 3.589350 +v 12.507916 0.439408 3.587151 +v 12.497877 0.421360 3.581876 +v 12.493165 0.426713 3.585688 +v 12.485602 0.438060 3.560436 +v 12.493903 0.434122 3.588841 +v 12.467736 0.429903 3.429090 +v 12.430968 0.429903 3.303267 +v 12.421719 0.437881 3.272242 +v 12.415821 0.443408 3.271998 +v 12.409778 0.424773 3.280398 +v 12.417521 0.424940 3.278076 +v 12.422621 0.430231 3.274702 +v 12.408078 0.443241 3.274321 +v 12.406765 0.431932 3.241008 +v 12.399036 0.431793 3.243379 +v 12.395946 0.420977 3.253001 +v 12.402316 0.416357 3.254863 +v 12.410046 0.416497 3.252493 +v 12.414692 0.420919 3.247570 +v 12.403736 0.399889 3.230904 +v 12.408033 0.402967 3.224785 +v 12.396018 0.399792 3.233312 +v 12.413136 0.427313 3.242871 +v 12.405972 0.407418 3.218356 +v 12.394389 0.427371 3.248302 +v 12.387221 0.407458 3.223772 +v 12.389283 0.403008 3.230200 +v 12.382244 0.380352 3.206739 +v 12.384607 0.378323 3.214201 +v 12.399237 0.410634 3.215244 +v 12.400997 0.380334 3.201333 +v 12.394044 0.381800 3.197474 +v 12.391519 0.410537 3.217653 +v 12.386333 0.381756 3.199906 +v 12.396627 0.344511 3.186379 +v 12.389662 0.345795 3.182478 +v 12.381950 0.345756 3.184911 +v 12.377874 0.344527 3.191785 +v 12.391562 0.376856 3.218060 +v 12.380255 0.342751 3.199306 +v 12.387220 0.341467 3.203207 +v 12.403360 0.378304 3.208794 +v 12.399273 0.376901 3.215628 +v 12.513430 0.349401 3.655663 +v 12.511347 0.348454 3.647907 +v 12.522876 -0.002953 3.687362 +v 12.524960 -0.002007 3.695118 +v 12.372313 0.001491 3.103177 +v 12.365348 0.002774 3.099275 +v 12.528402 0.350077 3.657255 +v 12.520594 0.350056 3.659355 +v 12.532124 -0.001352 3.698809 +v 12.539932 -0.001331 3.696710 +v 12.355941 -0.000270 3.116103 +v 12.362906 -0.001553 3.120004 +v 12.399009 0.342735 3.193900 +v 12.394932 0.341506 3.200775 +v 12.502044 0.421652 3.616699 +v 12.508801 0.425454 3.618996 +v 12.512511 0.412305 3.603136 +v 12.504716 0.412185 3.605279 +v 12.500549 0.416156 3.610959 +v 12.512629 0.434055 3.583339 +v 12.506159 0.400566 3.630153 +v 12.508130 0.403231 3.637528 +v 12.509979 0.398640 3.623292 +v 12.519268 0.416106 3.605433 +v 12.524873 0.400542 3.624613 +v 12.517785 0.398698 3.621184 +v 12.516596 0.425574 3.616853 +v 12.515218 0.405075 3.640957 +v 12.523024 0.405133 3.638850 +v 12.520761 0.421603 3.611173 +v 12.529158 0.372464 3.639277 +v 12.522019 0.371267 3.635673 +v 12.519629 0.375406 3.656054 +v 12.527437 0.375443 3.653951 +v 12.526844 0.403207 3.631988 +v 12.531204 0.374194 3.646907 +v 12.532143 0.349392 3.650118 +v 12.512490 0.374209 3.652449 +v 12.514212 0.371230 3.637775 +v 12.522896 0.347791 3.638672 +v 12.515087 0.347770 3.640771 +v 12.510445 0.372479 3.644820 +v 12.534426 -0.003617 3.678126 +v 12.526617 -0.003637 3.680226 +v 12.353559 0.001507 3.108582 +v 12.374695 -0.000286 3.110697 +v 12.530060 0.348446 3.642363 +v 12.541590 -0.002962 3.681818 +v 12.364127 0.000611 3.109640 +v 12.370618 -0.001514 3.117571 +v 12.357636 0.002736 3.101708 +v 12.533274 -0.002484 3.688468 +v 12.543673 -0.002015 3.689573 +vn -0.2805 -0.0000 -0.9599 +vn 0.9599 -0.0000 -0.2805 +vn -0.0000 -1.0000 -0.0000 +vn -0.9599 -0.0000 0.2805 +vn 0.2805 -0.0000 0.9599 +vn 0.0334 0.9929 0.1143 +vn -0.0739 -0.9646 -0.2530 +vn -0.1197 -0.9044 -0.4096 +vn -0.9556 -0.0911 -0.2804 +vn -0.0455 -0.9868 -0.1557 +vn 0.0481 0.9852 0.1645 +vn 0.6820 -0.0779 -0.7272 +vn 0.5096 -0.1146 -0.8528 +vn -0.9099 -0.0987 -0.4029 +vn -0.1729 -0.7874 -0.5916 +vn -0.2246 -0.5992 -0.7685 +vn 0.2797 0.0768 0.9570 +vn -0.2797 -0.0768 -0.9570 +vn 0.8949 -0.2916 -0.3380 +vn 0.8355 0.5027 -0.2220 +vn 0.2758 0.1047 0.9555 +vn 0.2828 0.1119 0.9526 +vn 0.2835 0.1062 0.9531 +vn 0.2804 -0.0656 -0.9576 +vn 0.8215 0.4967 -0.2800 +vn 0.2774 0.0768 0.9577 +vn 0.2368 -0.5359 0.8104 +vn -0.8058 0.5287 0.2668 +vn 0.7715 -0.6113 -0.1764 +vn 0.1452 -0.8531 0.5011 +vn 0.2343 -0.5326 0.8133 +vn 0.2311 -0.5337 0.8135 +vn 0.2376 -0.5315 0.8131 +vn 0.0239 0.9931 0.1147 +vn -0.2085 0.9648 0.1600 +vn -0.2334 0.9584 0.1645 +vn -0.4301 -0.8811 0.1964 +vn -0.4946 -0.8634 -0.0993 +vn -0.3385 -0.7743 -0.5347 +vn -0.7748 -0.5705 0.2722 +vn -0.6425 -0.3669 -0.6727 +vn -0.6783 -0.3997 -0.6166 +vn -0.2823 -0.0465 -0.9582 +vn 0.2757 0.1108 0.9548 +vn 0.2748 0.1116 0.9550 +vn -0.2750 -0.0794 -0.9582 +vn -0.8289 0.5223 0.2003 +vn -0.2745 -0.0401 -0.9608 +vn 0.2765 0.1101 0.9547 +vn -0.2726 -0.0584 -0.9604 +vn 0.0169 -0.7742 -0.6327 +vn -0.2749 -0.0813 -0.9580 +vn -0.2804 -0.0847 -0.9561 +vn -0.2681 -0.0769 -0.9603 +vn 0.4690 0.8588 -0.2060 +vn -0.2684 0.9633 0.0011 +vn -0.0292 0.9970 -0.0715 +vn -0.2693 0.9630 0.0014 +vn 0.5039 0.8610 -0.0693 +vn 0.2798 0.0845 0.9563 +vn 0.2737 0.0831 0.9582 +vn 0.2727 0.0796 0.9588 +vn 0.2682 0.0778 0.9602 +vn 0.4751 -0.8773 -0.0684 +vn 0.2595 -0.9658 0.0017 +vn 0.2859 0.0880 0.9542 +vn -0.2863 -0.0886 -0.9540 +vn -0.4922 0.8673 0.0742 +vn -0.4518 0.8695 0.1996 +vn 0.2803 0.0744 0.9570 +vn 0.2719 0.0849 0.9586 +vn 0.0286 -0.9970 0.0717 +vn -0.2815 -0.0732 -0.9568 +vn 0.2819 0.0723 0.9567 +vn -0.0000 1.0000 -0.0000 +vn -0.6637 0.7224 0.1940 +vn -0.6600 0.7268 0.1899 +vn -0.6600 0.7269 0.1899 +vn -0.9596 -0.0225 0.2803 +vn -0.9596 -0.0215 0.2807 +vn -0.9578 -0.0204 0.2867 +vn 0.9596 0.0218 -0.2804 +vn 0.9600 0.0219 -0.2791 +vn 0.9600 0.0219 -0.2790 +vn 0.7118 0.6937 -0.1098 +vn 0.0209 -0.9998 -0.0061 +vn -0.0210 0.9998 0.0061 +vn 0.6933 0.6915 -0.2026 +vn 0.6882 0.6962 -0.2040 +vn 0.6883 0.6962 -0.2040 +vn -0.0224 0.9997 0.0002 +vn -0.6934 -0.6915 0.2026 +vn 0.6306 -0.7257 -0.2750 +vn 0.0180 0.9903 0.1376 +vn -0.7084 -0.6955 0.1202 +vn 0.6638 -0.7223 -0.1940 +vn 0.9596 0.0221 -0.2804 +vn 0.6831 0.7008 -0.2054 +vn 0.0139 -0.9995 -0.0277 +vn 0.9577 0.0214 -0.2870 +vn 0.9595 0.0224 -0.2807 +vn -0.6227 -0.6683 0.4070 +vn 0.7165 -0.6972 0.0254 +vn 0.1050 -0.9532 0.2837 +vn 0.9558 0.0183 -0.2933 +vn 0.9574 0.0214 -0.2879 +vn -0.0239 0.9997 -0.0057 +vn 0.6499 -0.7326 -0.2026 +vn -0.6563 0.7313 0.1858 +vn -0.6866 -0.7022 0.1884 +vn 0.9543 0.0132 -0.2985 +vn 0.9556 0.0178 -0.2943 +vn -0.9560 -0.0175 0.2929 +vn -0.9576 -0.0205 0.2874 +vn -0.9558 -0.0172 0.2935 +vn -0.9545 -0.0124 0.2978 +vn 0.5631 0.5509 -0.6159 +vn -0.7815 0.5748 -0.2425 +vn -0.1143 0.9421 -0.3153 +vn -0.7225 0.6901 -0.0408 +vn 0.6196 0.6614 -0.4226 +vn -0.9545 -0.0119 0.2981 +vn -0.9541 -0.0090 0.2994 +vn 0.5197 0.3812 -0.7646 +vn -0.8268 0.3978 -0.3976 +vn -0.2564 0.5403 -0.8015 +vn 0.1868 -0.8044 0.5639 +vn 0.7763 -0.5868 0.2302 +vn -0.5654 -0.5625 0.6032 +vn -0.1946 0.7833 -0.5904 +vn -0.2779 0.3980 -0.8743 +vn -0.5091 -0.2790 0.8142 +vn 0.8455 -0.2912 0.4476 +vn 0.2776 -0.4005 0.8732 +vn 0.9539 0.0092 -0.3000 +vn 0.9543 0.0122 -0.2987 +vn 0.2509 -0.5692 0.7830 +vn 0.8229 -0.4135 0.3897 +vn -0.5207 -0.3964 0.7561 +vn -0.9657 -0.0027 0.2596 +vn -0.9657 -0.0025 0.2596 +vn 0.5052 0.1694 -0.8462 +vn 0.2576 0.1162 0.9592 +vn -0.5052 -0.1695 0.8462 +vn -0.8457 0.2899 -0.4481 +vn 0.5091 0.2777 -0.8147 +vn -0.9542 -0.0080 0.2989 +vn -0.9539 -0.0055 0.2999 +vn 0.9537 0.0054 -0.3008 +vn 0.9538 0.0070 -0.3003 +vn 0.7587 0.6472 0.0740 +vn -0.5660 0.6748 0.4736 +vn -0.0791 -0.9356 -0.3441 +vn -0.9605 -0.0216 0.2774 +vn -0.9620 -0.0207 0.2724 +vn -0.9636 -0.0182 0.2667 +vn -0.9622 -0.0205 0.2716 +vn -0.6279 0.7239 0.2859 +vn 0.9605 0.0227 -0.2773 +vn 0.9620 0.0218 -0.2722 +vn -0.0119 -0.9932 -0.1162 +vn -0.9604 -0.0222 0.2777 +vn -0.5014 0.5630 0.6570 +vn -0.1455 -0.8103 -0.5676 +vn -0.9649 -0.0112 0.2622 +vn -0.9639 -0.0173 0.2658 +vn -0.7827 -0.5801 -0.2256 +vn 0.9622 0.0211 -0.2714 +vn 0.9637 0.0187 -0.2665 +vn 0.0943 0.9128 0.3974 +vn 0.5703 -0.6896 -0.4464 +vn -0.7481 -0.6617 -0.0496 +vn -0.8568 -0.3366 -0.3906 +vn 0.4742 -0.3512 -0.8073 +vn 0.2274 0.4682 0.8539 +vn 0.9651 0.0114 -0.2618 +vn 0.9640 0.0175 -0.2654 +vn 0.9652 0.0104 -0.2613 +vn 0.9657 0.0032 -0.2595 +vn 0.8014 0.5405 0.2562 +vn 0.1670 0.7463 0.6443 +vn 0.5022 -0.6033 -0.6195 +vn 0.2570 0.1344 0.9570 +vn 0.9657 0.0027 -0.2597 +vn 0.8851 0.0928 0.4560 +vn 0.8856 0.0866 0.4563 +vn -0.4622 0.0969 0.8815 +vn -0.4624 0.0905 0.8821 +vn -0.4624 0.0904 0.8821 +vn -0.9655 -0.0030 0.2605 +vn -0.9650 -0.0100 0.2622 +vn -0.2253 -0.4821 -0.8467 +vn -0.4742 0.3437 0.8106 +vn 0.8584 0.3294 0.3932 +vn -0.2576 -0.1162 -0.9593 +vn -0.9537 -0.0053 0.3007 +vn 0.4623 -0.0898 -0.8822 +vn 0.4625 -0.0839 -0.8826 +vn 0.9537 0.0053 -0.3007 +vn 0.4621 -0.0956 -0.8816 +vn -0.8852 -0.0916 -0.4560 +vn -0.8856 -0.0860 -0.4564 +vn -0.8856 -0.0859 -0.4564 +vn -0.2570 -0.1319 -0.9574 +vn -0.0616 -0.9756 -0.2109 +vn -0.0617 -0.9756 -0.2109 +vn -0.0616 -0.9756 -0.2110 +vn 0.0328 -0.9931 0.1124 +vn 0.0329 -0.9931 0.1124 +vn 0.0328 -0.9931 0.1125 +vn 0.8601 -0.1770 0.4784 +vn 0.9657 0.0025 -0.2597 +vn -0.8601 0.1770 -0.4784 +vn -0.8860 -0.0803 -0.4567 +vn 0.2928 -0.2449 0.9243 +vn 0.8860 0.0803 0.4567 +vn -0.2928 0.2449 -0.9243 +vn -0.4625 0.0839 0.8826 +vn -0.9596 -0.0221 0.2804 +vn -0.9595 -0.0224 0.2808 +vn -0.9577 -0.0214 0.2870 +vn -0.6933 -0.6915 0.2026 +vn -0.7083 -0.6956 0.1202 +vn -0.9600 -0.0219 0.2791 +vn -0.9600 -0.0219 0.2790 +vn -0.9620 -0.0218 0.2722 +vn -0.9606 -0.0228 0.2771 +vn 0.9596 0.0224 -0.2803 +vn -0.9596 -0.0218 0.2804 +vn 0.1049 -0.9532 0.2837 +vn -0.6865 -0.7023 0.1884 +vn 0.1868 -0.8044 0.5640 +vn 0.9558 0.0183 -0.2934 +vn -0.9558 -0.0183 0.2934 +vn -0.9574 -0.0214 0.2879 +vn -0.9556 -0.0178 0.2942 +vn -0.9543 -0.0131 0.2985 +vn -0.9543 -0.0123 0.2987 +vn -0.9539 -0.0092 0.3000 +vn -0.5653 -0.5626 0.6033 +vn -0.1947 0.7833 -0.5904 +vn 0.5632 0.5509 -0.6159 +vn 0.5090 0.2777 -0.8147 +vn -0.5091 -0.2790 0.8143 +vn 0.9539 0.0091 -0.3000 +vn 0.9543 0.0123 -0.2987 +vn -0.5207 -0.3964 0.7562 +vn -0.9657 -0.0027 0.2597 +vn -0.9657 -0.0025 0.2597 +vn 0.5051 0.1695 -0.8462 +vn -0.5051 -0.1695 0.8463 +vn -0.9538 -0.0070 0.3003 +vn -0.9535 -0.0057 0.3012 +vn 0.9537 0.0055 -0.3008 +vn -0.9637 -0.0187 0.2665 +vn -0.9622 -0.0210 0.2714 +vn -0.7481 -0.6618 -0.0497 +vn 0.9604 0.0221 -0.2777 +vn -0.9651 -0.0114 0.2618 +vn -0.9640 -0.0176 0.2654 +vn -0.7826 -0.5802 -0.2256 +vn -0.2571 -0.1319 -0.9573 +vn -0.9652 -0.0104 0.2613 +vn -0.9657 -0.0032 0.2595 +vn -0.8568 -0.3367 -0.3907 +vn -0.2254 -0.4821 -0.8466 +vn -0.2576 -0.1162 -0.9592 +vn -0.8852 -0.0916 -0.4562 +vn -0.8856 -0.0860 -0.4565 +vn -0.8856 -0.0859 -0.4565 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt 0.686647 0.000000 +vt 0.870176 0.996278 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.782584 0.965408 +vt 0.870573 0.970227 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.833010 0.965282 +vt 0.908785 0.026051 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.968598 0.070112 +vt 0.979071 0.026051 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.968598 0.371019 +vt 0.757324 0.262250 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.173427 0.241164 +vt 0.758439 0.080128 +vt -0.973130 0.033128 +vt -0.123087 0.241439 +vt 0.978437 0.000000 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt 0.737072 0.000128 +vt 0.908263 0.000000 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.409642 -0.009898 +vt 0.677629 0.482142 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.240570 0.058726 +vt 0.669677 0.481452 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.786789 0.246652 +vt 0.991724 0.699406 +vt 0.928489 0.277215 +vt 0.873308 0.505274 +vt 0.786789 0.155990 +vt 0.958960 0.029326 +vt 0.991724 0.483440 +vt 0.977373 0.702462 +vt -0.140978 0.246673 +vt 0.958492 0.010078 +vt -0.156145 0.246590 +vt 0.929566 0.080357 +vt -0.144664 0.252235 +vt 0.984385 0.731379 +vt 0.945934 0.020741 +vt -0.159831 0.252152 +vt 0.984385 0.500820 +vt 0.989649 0.087406 +vt 0.706860 0.007022 +vt 0.847263 0.989602 +vt 0.686599 0.714388 +vt 0.721837 0.007060 +vt 0.884682 0.006674 +vt 0.720919 0.017861 +vt 0.673632 0.527027 +vt 0.872079 0.017335 +vt 0.705942 0.017823 +vt 0.673632 0.731676 +vt 0.690157 0.523535 +vt 0.802894 0.958412 +vt 0.847659 0.963551 +vt 0.695298 0.714388 +vt 0.661237 0.495044 +vt 0.817871 0.958374 +vt 0.885205 0.032725 +vt 0.661237 0.722645 +vt 0.693293 0.503638 +vt 0.944329 0.029337 +vt 0.981154 0.731379 +vt 0.977373 0.486830 +vt 0.989649 0.263822 +vt 0.873305 0.723869 +vt 0.981154 0.500820 +vt 0.870573 0.032734 +vt 0.693293 0.761173 +vt 0.679412 0.527027 +vt 0.695298 0.493838 +vt 0.679412 0.731676 +vt 0.826600 0.493835 +vt 0.826977 0.731673 +vt 0.826600 0.714385 +vt 0.814491 0.495042 +vt 0.122435 0.638558 +vt 0.015922 0.839080 +vt 0.835047 0.699404 +vt 0.993361 0.510073 +vt 0.758428 0.504317 +vt 0.072861 0.638558 +vt 0.015474 0.619132 +vt 0.835047 0.483438 +vt 0.845328 0.702461 +vt 0.015197 0.626266 +vt 0.014109 0.491099 +vt 0.993356 0.728667 +vt 0.758425 0.722912 +vt 0.833436 0.500823 +vt 0.891028 0.725398 +vt 0.672547 0.500827 +vt 0.752235 0.729690 +vt 0.667246 0.727168 +vt 0.891033 0.506802 +vt 0.752238 0.507120 +vt 0.071993 0.783837 +vt 0.969610 0.493832 +vt 0.987699 0.731670 +vt 0.641343 0.509140 +vt 0.689355 0.726560 +vt 0.969610 0.714382 +vt 0.122436 0.783837 +vt 0.641344 0.743247 +vt 0.833436 0.731382 +vt 0.845328 0.486829 +vt 0.814491 0.722643 +vt 0.825052 0.503733 +vt 0.016195 0.832047 +vt 0.634466 0.494220 +vt 0.825052 0.761267 +vt 0.826977 0.527024 +vt 0.022424 0.783234 +vt 0.035852 0.889154 +vt 0.043016 0.971597 +vt 0.706398 0.505224 +vt 0.072863 0.808180 +vt 0.028940 0.807392 +vt 0.010039 0.882150 +vt 0.137154 0.974703 +vt 0.631023 0.892124 +vt 0.649326 0.890699 +vt 0.121379 0.984023 +vt 0.648470 0.892315 +vt 0.072864 0.783142 +vt 0.043889 0.943476 +vt 0.078385 0.805896 +vt 0.075977 0.941215 +vt 0.613560 0.946909 +vt 0.672547 0.731385 +vt 0.701510 0.486829 +vt 0.669481 0.490576 +vt 0.072863 0.646796 +vt 0.648470 0.506013 +vt 0.080915 0.841605 +vt 0.968560 0.503835 +vt 0.102906 0.865583 +vt 0.634467 0.887149 +vt 0.987699 0.527021 +vt 0.968560 0.761369 +vt 0.690090 0.495972 +vt 0.701510 0.702461 +vt 0.603150 0.865583 +vt 0.014109 0.884028 +vt 0.706395 0.729929 +vt 0.816556 0.714481 +vt 0.023239 0.646888 +vt 0.040534 0.495932 +vt 0.081188 0.621686 +vt 0.007711 0.495744 +vt 0.041481 0.497122 +vt 0.080911 0.628820 +vt 0.003028 0.888966 +vt 0.041481 0.887645 +vt 0.060838 0.971173 +vt 0.631023 0.505822 +vt 0.649326 0.500176 +vt 0.081188 0.834572 +vt 0.805889 0.743046 +vt 0.122312 0.806766 +vt 0.988155 0.503653 +vt 0.115555 0.935422 +vt 0.904138 0.912557 +vt 0.988155 0.735605 +vt 0.813022 0.494763 +vt 0.890960 0.912565 +vt 0.735836 0.641861 +vt 0.693936 0.468644 +vt 0.027417 0.833361 +vt 0.420996 0.961603 +vt 0.032040 0.784613 +vt 0.284612 0.483847 +vt 0.656925 0.504187 +vt 0.681549 0.720168 +vt 0.066750 0.834450 +vt 0.299225 0.449509 +vt 0.999708 0.720167 +vt 0.989627 0.743247 +vt 0.121899 0.832034 +vt 0.693936 0.449159 +vt 0.420996 0.999935 +vt 0.008277 0.862094 +vt 0.082562 0.831201 +vt 0.741580 0.718717 +vt 0.678836 0.505353 +vt 0.815743 0.487362 +vt 0.741523 0.585977 +vt 0.678836 0.699564 +vt 0.553315 0.945729 +vt 0.982243 0.588758 +vt 0.460393 1.018433 +vt 0.949871 0.788878 +vt 0.982305 0.727355 +vt 0.668954 0.502598 +vt 0.949657 0.691167 +vt 0.979056 0.490574 +vt 0.078628 0.952623 +vt 0.035428 0.887064 +vt 0.812426 0.730862 +vt 0.971935 0.642457 +vt 0.805889 0.532195 +vt 0.173975 1.012235 +vt 0.908785 0.976444 +vt 0.726484 0.788878 +vt 0.984477 0.500479 +vt 0.894591 0.976453 +vt 0.737043 0.505375 +vt 0.726270 0.691167 +vt 0.987420 0.694407 +vt 0.999899 0.506981 +vt 0.968797 0.500648 +vt 0.989626 0.516135 +vt 0.652223 0.697892 +vt 0.656922 0.730164 +vt 0.681740 0.506981 +vt 0.985798 0.713641 +vt 0.053549 0.993732 +vt 0.043551 0.873068 +vt 0.522988 0.991572 +vt 0.062665 0.961706 +vt 0.169656 0.991799 +vt 0.060838 0.809705 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +s 1 +usemtl CabnetDoors +f 7972/16583/5785 7973/16587/5785 7974/16592/5785 7975/16596/5785 7976/16600/5785 7977/16606/5785 7978/16609/5785 7979/16612/5785 +f 7977/16605/5786 7976/16601/5786 7980/16616/5786 7981/16619/5786 +f 7982/16621/5787 7983/16625/5787 7984/16627/5787 7985/16628/5787 +f 7986/16632/5788 7987/16633/5788 7973/16588/5788 7972/16582/5788 +f 7987/16634/5789 7986/16631/5789 7988/16636/5789 7989/16637/5789 +f 7990/16639/5789 7991/16642/5789 7988/16636/5789 7986/16631/5789 +f 7990/16640/5788 7986/16632/5788 7972/16582/5788 7992/16644/5788 +f 7985/16629/5786 7977/16605/5786 7981/16619/5786 7982/16622/5786 +f 7992/16645/5785 7972/16583/5785 7979/16612/5785 7978/16609/5785 7977/16606/5785 7985/16630/5785 7984/16626/5785 7993/16648/5785 +f 7975/16597/5790 7976/16602/5790 7994/16651/5790 7995/16655/5790 +f 7985/16630/5785 7984/16626/5785 7978/16609/5785 7977/16606/5785 +f 7979/16613/5789 7972/16584/5789 7992/16646/5789 7993/16649/5789 +f 7977/16607/5791 7978/16610/5791 7996/16659/5791 7997/16661/5791 +f 7997/16661/5792 7996/16659/5792 7998/16663/5792 7999/16666/5792 +f 8000/16669/5792 8003/16677/5792 8002/16674/5792 8001/16672/5792 +f 7978/16611/5793 7975/16598/5793 7995/16656/5793 7996/16660/5793 +f 7972/16585/5794 8000/16669/5794 8001/16672/5794 7979/16614/5794 +f 7974/16593/5795 8005/16684/5795 8004/16680/5795 7973/16589/5795 +f 7979/16615/5796 8001/16673/5796 8005/16685/5796 7974/16594/5796 +f 7976/16603/5797 7977/16608/5797 7997/16662/5797 7994/16653/5797 +f 7973/16590/5798 8004/16681/5798 8000/16670/5798 7972/16586/5798 +f 7999/16667/5799 7998/16664/5799 8006/16689/5799 8007/16693/5799 +f 8008/16696/5800 8002/16675/5800 8003/16678/5800 8009/16698/5800 +f 8004/16682/5788 8011/16701/5788 8010/16699/5788 8009/16697/5788 +f 7996/16660/5788 7995/16656/5788 8006/16688/5788 7998/16665/5788 +f 7995/16657/5801 7994/16652/5801 8012/16705/5801 8013/16710/5801 +f 8004/16682/5788 8009/16697/5788 8003/16679/5788 8000/16671/5788 +f 7994/16653/5786 7997/16662/5786 7999/16668/5786 8007/16691/5786 +f 8001/16673/5786 8002/16676/5786 8008/16694/5786 8005/16685/5786 +f 8012/16706/5786 8014/16714/5786 8015/16717/5786 8016/16721/5786 +f 8011/16701/5788 8018/16728/5788 8017/16724/5788 8010/16699/5788 +f 7994/16654/5786 8007/16692/5786 8014/16715/5786 8012/16707/5786 +f 8007/16693/5802 8006/16689/5802 8019/16731/5802 8014/16716/5802 +f 8005/16686/5801 8020/16733/5801 8011/16702/5801 8004/16683/5801 +f 8008/16695/5786 8021/16737/5786 8020/16734/5803 8005/16687/5786 +f 8009/16698/5802 8010/16700/5802 8021/16738/5802 8008/16696/5802 +f 8006/16690/5788 7995/16658/5788 8013/16711/5788 8019/16732/5788 +f 8022/16739/5804 8016/16723/5804 8023/16743/5804 8024/16744/5804 +f 8025/16746/5805 8028/16754/5806 8027/16752/5807 8026/16749/5807 +f 8014/16716/5802 8019/16731/5802 8029/16756/5802 8015/16718/5802 +f 8011/16703/5788 8030/16759/5788 8026/16751/5788 8018/16729/5788 +f 8021/16737/5786 8032/16766/5786 8031/16762/5808 8020/16734/5803 +f 8019/16732/5788 8013/16711/5788 8033/16768/5788 8029/16757/5788 +f 8010/16700/5802 8017/16725/5802 8032/16765/5802 8021/16738/5802 +f 8016/16722/5809 8015/16719/5809 8034/16771/5809 8023/16742/5809 +f 8012/16708/5786 8016/16723/5786 8022/16739/5786 8035/16773/5786 +f 8036/16776/5810 8035/16774/5801 8022/16740/5801 8037/16779/5810 +f 8038/16782/5810 8025/16747/5810 8026/16750/5801 8030/16760/5801 +f 8036/16777/5810 8037/16780/5810 8025/16748/5810 8038/16783/5810 +f 8020/16735/5811 8038/16784/5811 8030/16761/5811 8011/16704/5811 +f 8026/16751/5812 8027/16753/5812 8039/16786/5812 8018/16729/5812 +f 8032/16766/5813 8041/16790/5813 8040/16787/5813 8031/16762/5813 +f 8013/16712/5814 8036/16778/5815 8038/16784/5816 8020/16735/5803 +f 8013/16712/5814 8012/16709/5817 8035/16775/5817 8036/16778/5815 +f 8042/16794/5818 8043/16798/5818 8044/16802/5819 8045/16806/5820 +f 8046/16810/5821 8047/16813/5822 8048/16816/5823 8049/16819/5821 +f 8029/16757/5824 8033/16768/5825 8047/16814/5826 8046/16811/5824 +f 8015/16720/5827 8029/16758/5827 8046/16812/5827 8034/16772/5827 +f 8037/16780/5828 8050/16823/5829 8028/16755/5806 8025/16748/5805 +f 8031/16763/5808 8040/16788/5830 8047/16815/5826 8033/16769/5825 +f 8018/16730/5831 8039/16785/5831 8051/16827/5831 8017/16726/5831 +f 8017/16727/5832 8051/16825/5832 8041/16791/5832 8032/16767/5832 +f 8037/16781/5828 8022/16741/5833 8024/16745/5833 8050/16824/5829 +f 8040/16788/5834 8052/16828/5835 8048/16817/5823 8047/16815/5822 +f 8053/16831/5836 8054/16835/5837 8055/16839/5838 8049/16820/5838 +f 8023/16742/5839 8034/16771/5839 8055/16840/5839 8043/16799/5839 +f 8044/16803/5840 8043/16800/5841 8055/16841/5841 8054/16836/5842 +f 8024/16744/5843 8023/16743/5843 8043/16801/5843 8042/16795/5843 +f 8045/16807/5844 8056/16843/5845 8057/16846/5846 8042/16796/5847 +f 8041/16792/5848 8053/16832/5849 8052/16829/5835 8040/16789/5848 +f 8028/16754/5850 8056/16844/5845 8045/16808/5844 8027/16752/5850 +f 8051/16826/5851 8054/16837/5837 8053/16833/5836 8041/16793/5851 +f 8039/16785/5852 8044/16804/5840 8054/16838/5842 8051/16827/5852 +f 8027/16753/5853 8045/16809/5820 8044/16805/5819 8039/16786/5853 +f 8050/16823/5854 8057/16847/5846 8056/16845/5845 8028/16755/5855 +f 8053/16834/5849 8049/16821/5856 8048/16818/5823 8052/16830/5835 +f 8034/16772/5857 8046/16812/5857 8049/16822/5857 8055/16842/5857 +f 8050/16824/5854 8024/16745/5858 8042/16797/5858 8057/16848/5846 +f 7989/16637/5789 7988/16636/5789 8058/16849/5789 8059/16850/5789 +f 7981/16620/5789 7980/16617/5789 8059/16850/5789 8058/16849/5789 +f 8058/16849/5789 7988/16636/5789 7991/16642/5789 7983/16624/5789 +f 7983/16624/5789 7982/16623/5789 7981/16620/5789 8058/16849/5789 +f 7987/16635/5859 7989/16638/5859 7974/16595/5859 7973/16591/5859 +f 7975/16599/5859 8059/16851/5859 7980/16618/5859 7976/16604/5859 +f 7974/16595/5859 7989/16638/5859 8059/16851/5859 7975/16599/5859 +f 7993/16650/5787 7991/16643/5787 7990/16641/5787 7992/16647/5787 +f 7984/16627/5787 7983/16625/5787 7991/16643/5787 7993/16650/5787 +f 8033/16770/5825 8013/16713/5814 8020/16736/5803 8031/16764/5808 +f 8060/16852/5860 8061/16853/5860 8062/16854/5861 8063/16856/5862 +f 8064/16857/5863 8063/16855/5863 8065/16860/5864 8066/16862/5865 +f 8067/16864/5866 8068/16865/5866 8069/16866/5867 8070/16868/5868 +f 8069/16866/5869 8071/16869/5869 8072/16871/5869 8073/16873/5869 +f 8074/16875/5870 8075/16876/5870 8076/16877/5870 8077/16879/5870 +f 8078/16881/5871 8061/16853/5871 8079/16882/5871 8071/16870/5871 +f 8068/16865/5872 8078/16880/5872 8071/16869/5872 8069/16866/5872 +f 8080/16883/5873 8081/16884/5874 8078/16880/5872 8068/16865/5872 +f 8081/16885/5875 8062/16854/5875 8061/16853/5871 8078/16881/5871 +f 8082/16886/5876 8074/16874/5876 8077/16878/5876 8083/16887/5876 +f 8064/16858/5876 8084/16890/5876 8074/16874/5876 8082/16886/5876 +f 8084/16889/5870 8085/16891/5870 8075/16876/5870 8074/16875/5870 +f 8076/16877/5877 8070/16867/5877 8086/16893/5877 8087/16894/5877 +f 8071/16870/5878 8079/16882/5878 8088/16895/5878 8072/16872/5878 +f 8083/16887/5879 8077/16878/5879 8089/16897/5879 8090/16899/5879 +f 8075/16876/5880 8067/16863/5880 8070/16867/5880 8076/16877/5880 +f 8085/16891/5880 8091/16901/5880 8067/16863/5880 8075/16876/5880 +f 8091/16900/5881 8080/16883/5881 8068/16865/5866 8067/16864/5866 +f 8081/16884/5874 8080/16883/5873 8092/16902/5882 8093/16904/5882 +f 8085/16891/5883 8084/16889/5883 8094/16905/5883 8095/16907/5883 +f 8080/16883/5881 8091/16900/5881 8096/16908/5884 8092/16902/5885 +f 8097/16910/5860 8079/16882/5860 8061/16853/5860 8060/16852/5860 +f 8094/16906/5886 8066/16861/5886 8098/16913/5886 8099/16915/5886 +f 8096/16909/5887 8095/16907/5887 8100/16916/5887 8101/16918/5887 +f 8095/16907/5888 8094/16905/5888 8099/16914/5888 8100/16916/5888 +f 8092/16902/5885 8096/16908/5884 8101/16919/5889 8102/16920/5890 +f 8062/16854/5875 8081/16885/5875 8093/16903/5891 8103/16921/5891 +f 8091/16901/5892 8085/16891/5892 8095/16907/5892 8096/16909/5892 +f 8063/16856/5862 8062/16854/5861 8103/16921/5893 8065/16859/5893 +f 8084/16890/5894 8064/16858/5894 8066/16861/5894 8094/16906/5894 +f 8102/16920/5890 8101/16919/5889 8104/16922/5895 8105/16923/5896 +f 8098/16913/5897 8106/16924/5898 8107/16927/5899 8108/16928/5900 +f 8109/16929/5901 8102/16920/5901 8105/16923/5901 8110/16931/5901 +f 8106/16924/5902 8111/16934/5902 8112/16936/5902 8107/16927/5902 +f 8103/16921/5903 8093/16903/5903 8109/16930/5903 8111/16935/5903 +f 8065/16859/5904 8103/16921/5904 8111/16935/5904 8106/16925/5904 +f 8093/16904/5905 8092/16902/5905 8102/16920/5905 8109/16929/5905 +f 8066/16862/5865 8065/16860/5864 8106/16926/5898 8098/16912/5897 +f 8108/16928/5900 8107/16927/5899 8113/16940/5906 8114/16941/5907 +f 8110/16931/5908 8105/16923/5908 8115/16942/5908 8116/16944/5908 +f 8107/16927/5909 8112/16936/5909 8117/16945/5909 8113/16940/5909 +f 8112/16937/5910 8110/16932/5910 8116/16943/5910 8117/16946/5910 +f 8100/16916/5911 8099/16914/5911 8118/16947/5911 8119/16950/5911 +f 8101/16919/5912 8100/16917/5912 8119/16952/5912 8104/16922/5912 +f 8099/16915/5913 8098/16913/5913 8108/16928/5913 8118/16949/5913 +f 8111/16935/5914 8109/16930/5914 8110/16933/5914 8112/16938/5914 +f 8117/16946/5915 8116/16943/5915 8120/16954/5915 8121/16955/5915 +f 8122/16957/5916 8114/16941/5916 8123/16958/5916 8124/16959/5916 +f 8125/16961/5917 8126/16963/5917 8127/16965/5917 8128/16967/5917 +f 8126/16963/5918 8122/16956/5918 8124/16960/5918 8127/16965/5918 +f 8105/16923/5896 8104/16922/5895 8125/16962/5919 8115/16942/5920 +f 8119/16951/5921 8118/16948/5921 8122/16956/5921 8126/16963/5921 +f 8104/16922/5922 8119/16952/5922 8126/16964/5922 8125/16962/5922 +f 8118/16949/5923 8108/16928/5923 8114/16941/5923 8122/16957/5923 +f 8129/16968/5924 8130/16970/5924 8131/16972/5925 8132/16973/5925 +f 8120/16953/5926 8133/16976/5926 8134/16977/5926 8135/16979/5926 +f 8136/16982/5927 8137/16984/5927 8138/16986/5927 8139/16987/5927 +f 8124/16959/5928 8123/16958/5928 8140/16990/5928 8141/16992/5928 +f 8113/16939/5929 8117/16946/5929 8121/16955/5929 8142/16996/5929 +f 8116/16944/5930 8115/16942/5930 8133/16976/5930 8120/16953/5930 +f 8114/16941/5907 8113/16940/5906 8142/16995/5931 8123/16958/5932 +f 8115/16942/5920 8125/16962/5919 8128/16966/5933 8133/16976/5934 +f 8073/16873/5935 8072/16871/5935 8143/16997/5935 8144/16999/5935 +f 8088/16895/5936 8145/17000/5936 8146/17002/5936 8147/17006/5936 +f 8089/16896/5937 8087/16894/5937 8148/17007/5937 8149/17009/5937 +f 8145/17001/5938 8090/16898/5939 8150/17011/5940 8146/17003/5941 +f 8079/16882/5942 8097/16910/5942 8145/17000/5942 8088/16895/5942 +f 8070/16868/5868 8069/16866/5867 8073/16873/5943 8086/16892/5944 +f 8077/16879/5945 8076/16877/5945 8087/16894/5945 8089/16896/5945 +f 8097/16911/5946 8083/16888/5946 8090/16898/5939 8145/17001/5938 +f 8147/17005/5947 8146/17004/5947 8151/17013/5947 8152/17016/5947 +f 8149/17009/5948 8148/17007/5948 8153/17017/5948 8154/17020/5948 +f 8146/17004/5941 8150/17012/5940 8155/17023/5949 8151/17013/5950 +f 8150/17012/5951 8149/17010/5951 8154/17021/5951 8155/17023/5951 +f 8086/16892/5944 8073/16873/5943 8144/16999/5952 8156/17025/5953 +f 8072/16872/5954 8088/16895/5954 8147/17006/5954 8143/16998/5954 +f 8087/16894/5955 8086/16893/5955 8156/17024/5955 8148/17007/5955 +f 8090/16899/5956 8089/16897/5956 8149/17010/5956 8150/17012/5956 +f 8155/17023/5957 8154/17021/5957 8157/17026/5957 8158/17028/5957 +f 8153/17018/5958 8159/17029/5958 8160/17030/5958 8161/17032/5958 +f 8162/17034/5959 8152/17014/5959 8163/17037/5959 8164/17039/5959 +f 8159/17029/5960 8165/17041/5961 8166/17042/5962 8160/17030/5963 +f 8144/16999/5964 8143/16997/5964 8162/17036/5964 8165/17041/5964 +f 8156/17025/5953 8144/16999/5952 8165/17041/5961 8159/17029/5960 +f 8143/16998/5965 8147/17006/5965 8152/17015/5965 8162/17035/5965 +f 8148/17008/5966 8156/17025/5966 8159/17029/5966 8153/17018/5966 +f 8164/17039/5967 8163/17037/5967 8137/16984/5967 8136/16982/5967 +f 8160/17030/5963 8166/17042/5962 8167/17043/5968 8168/17045/5968 +f 8166/17042/5969 8164/17040/5969 8136/16983/5970 8167/17043/5970 +f 8163/17037/5971 8169/17046/5971 8129/16969/5972 8137/16984/5973 +f 8151/17013/5950 8155/17023/5949 8158/17028/5974 8169/17047/5975 +f 8154/17022/5976 8153/17019/5976 8161/17033/5976 8157/17027/5976 +f 8152/17016/5977 8151/17013/5977 8169/17047/5977 8163/17038/5977 +f 8165/17041/5978 8162/17036/5978 8164/17040/5978 8166/17042/5978 +f 8170/17048/5979 8171/17050/5979 8172/17051/5979 8173/17053/5979 +f 8123/16958/5932 8142/16995/5931 8174/17056/5980 8140/16990/5980 +f 8171/17050/5981 8168/17044/5981 8175/17059/5982 8172/17051/5982 +f 8133/16976/5934 8128/16966/5933 8176/17062/5983 8134/16977/5983 +f 8161/17033/5984 8160/17031/5984 8168/17044/5981 8171/17050/5981 +f 8158/17028/5985 8157/17026/5985 8170/17049/5986 8130/16970/5987 +f 8169/17047/5975 8158/17028/5974 8130/16970/5924 8129/16968/5924 +f 8157/17027/5988 8161/17033/5988 8171/17050/5988 8170/17048/5988 +f 8177/17065/5989 8135/16980/5990 8134/16978/5989 8176/17063/5989 +f 8141/16993/5989 8177/17065/5989 8176/17063/5989 8178/17066/5990 +f 8140/16991/5991 8174/17057/5989 8177/17065/5989 8141/16993/5989 +f 8174/17057/5989 8179/17068/5990 8135/16980/5990 8177/17065/5989 +f 8180/17070/5992 8139/16988/5993 8138/16985/5993 8132/16974/5993 +f 8173/17054/5992 8180/17070/5992 8132/16974/5993 8131/16971/5992 +f 8172/17052/5994 8175/17060/5992 8180/17070/5992 8173/17054/5992 +f 8175/17060/5992 8181/17071/5992 8139/16988/5993 8180/17070/5992 +f 8128/16967/5995 8127/16965/5995 8178/17067/5995 8176/17064/5995 +f 8168/17045/5968 8167/17043/5968 8181/17072/5996 8175/17061/5996 +f 8142/16996/5997 8121/16955/5997 8179/17069/5997 8174/17058/5997 +f 8130/16970/5987 8170/17049/5986 8173/17055/5998 8131/16972/5998 +f 8127/16965/5999 8124/16960/5999 8141/16994/5999 8178/17067/5999 +f 8167/17043/5970 8136/16983/5970 8139/16989/6000 8181/17072/6000 +f 8121/16955/6001 8120/16954/6001 8135/16981/6001 8179/17069/6001 +f 8137/16984/5973 8129/16969/5972 8132/16975/6002 8138/16986/6002 +f 8182/17074/5860 8183/17075/5860 8184/17076/5861 8185/17078/5862 +f 8186/17079/6003 8185/17077/6003 8187/17081/6004 8188/17082/6005 +f 8189/17083/5877 8190/17085/5877 8191/17088/5877 8192/17090/5877 +f 8193/17092/5870 8194/17093/5870 8189/17084/5870 8195/17096/5870 +f 8196/17098/5871 8183/17075/5871 8197/17099/5871 8198/17100/5871 +f 8199/17102/5872 8196/17097/5872 8198/17101/5872 8200/17103/5872 +f 8201/17104/5872 8202/17105/5872 8196/17097/5872 8199/17102/5872 +f 8202/17106/5875 8184/17076/5875 8183/17075/5871 8196/17098/5871 +f 8203/17107/6006 8193/17091/6006 8195/17095/6006 8204/17108/6006 +f 8186/17079/6006 8205/17110/6006 8193/17091/6006 8203/17107/6006 +f 8205/17109/5870 8206/17111/5870 8194/17093/5870 8193/17092/5870 +f 8198/17100/5878 8197/17099/5878 8207/17113/5878 8208/17115/5878 +f 8204/17108/6007 8195/17095/6007 8209/17116/6007 8210/17118/6007 +f 8211/17119/6008 8204/17108/6009 8210/17118/6010 8212/17121/6011 +f 8194/17094/5880 8213/17123/5880 8190/17085/5880 8189/17083/5880 +f 8206/17112/5880 8214/17125/5880 8213/17123/5880 8194/17094/5880 +f 8202/17105/5882 8201/17104/5882 8215/17126/5882 8216/17128/5882 +f 8206/17111/5883 8205/17109/5883 8217/17129/5883 8218/17131/5883 +f 8201/17104/6012 8214/17124/6012 8219/17134/5884 8215/17126/5885 +f 8203/17107/6013 8182/17073/6013 8185/17077/6003 8186/17079/6003 +f 8204/17108/6009 8211/17119/6008 8182/17073/6013 8203/17107/6013 +f 8211/17120/5860 8197/17099/5860 8183/17075/5860 8182/17074/5860 +f 8220/17135/5903 8216/17127/5903 8221/17137/5903 8222/17139/5903 +f 8217/17130/5886 8188/17082/5886 8223/17141/5886 8224/17143/5886 +f 8219/17133/5887 8218/17132/5887 8225/17144/5887 8226/17147/5887 +f 8218/17131/6014 8217/17129/6014 8224/17142/6014 8225/17146/6014 +f 8184/17076/5875 8202/17106/5875 8216/17127/5891 8220/17135/5891 +f 8214/17125/5892 8206/17112/5892 8218/17132/5892 8219/17133/5892 +f 8185/17078/5862 8184/17076/5861 8220/17135/5893 8187/17080/5893 +f 8205/17110/6015 8186/17079/6015 8188/17082/6015 8217/17130/6015 +f 8226/17148/5912 8225/17145/5912 8227/17152/5912 8228/17153/5912 +f 8225/17146/6016 8224/17142/6016 8229/17154/6016 8227/17150/6016 +f 8230/17158/5890 8226/17148/6017 8228/17153/5895 8231/17159/5896 +f 8223/17141/6018 8232/17161/6019 8233/17162/6020 8234/17163/6021 +f 8187/17080/5904 8220/17135/5904 8222/17139/5904 8232/17160/5904 +f 8216/17128/5905 8215/17126/5905 8230/17157/5905 8221/17136/5905 +f 8188/17082/6005 8187/17081/6004 8232/17161/6019 8223/17141/6018 +f 8215/17126/5885 8219/17134/5884 8226/17149/6017 8230/17157/5890 +f 8234/17163/6021 8233/17162/6020 8235/17165/6022 8236/17166/6023 +f 8237/17169/5908 8231/17159/5908 8238/17170/5908 8239/17171/5908 +f 8233/17162/5909 8240/17175/5909 8241/17176/5909 8235/17165/5909 +f 8240/17173/5910 8237/17167/5910 8239/17172/5910 8241/17177/5910 +f 8224/17143/6024 8223/17141/6024 8234/17163/6024 8229/17156/6024 +f 8222/17139/6025 8221/17137/6025 8237/17168/6025 8240/17174/6025 +f 8232/17161/5902 8222/17140/5902 8240/17175/5902 8233/17162/5902 +f 8221/17138/6026 8230/17158/6026 8231/17159/6026 8237/17169/6026 +f 8239/17171/6027 8238/17170/6027 8242/17178/6027 8243/17179/6027 +f 8235/17164/5929 8241/17177/5929 8244/17181/5929 8245/17183/5929 +f 8241/17177/5915 8239/17172/5915 8243/17180/5915 8244/17181/5915 +f 8246/17184/6028 8236/17166/6028 8247/17186/6028 8248/17187/6028 +f 8231/17159/5896 8228/17153/5895 8249/17189/6029 8238/17170/6030 +f 8227/17151/5921 8229/17155/5921 8246/17185/5921 8250/17192/5921 +f 8228/17153/5922 8227/17152/5922 8250/17191/5922 8249/17189/5922 +f 8229/17156/6031 8234/17163/6031 8236/17166/6031 8246/17184/6031 +f 8251/17193/6032 8252/17195/6032 8253/17197/6033 8254/17198/6033 +f 8243/17179/6034 8242/17178/6034 8255/17201/6034 8256/17203/6034 +f 8257/17207/5927 8258/17209/5927 8259/17211/5927 8260/17212/5927 +f 8248/17187/6035 8247/17186/6035 8261/17216/6035 8262/17218/6035 +f 8236/17166/6023 8235/17165/6022 8245/17182/6036 8247/17186/6037 +f 8238/17170/6030 8249/17189/6029 8263/17222/6038 8242/17178/5934 +f 8250/17192/5918 8246/17185/5918 8248/17188/5918 8264/17224/5918 +f 8249/17190/5917 8250/17192/5917 8264/17224/5917 8263/17223/5917 +f 8207/17113/5936 8212/17122/5936 8265/17225/5936 8266/17227/5936 +f 8209/17117/5937 8192/17089/5937 8267/17231/5937 8268/17233/5937 +f 8212/17121/6011 8210/17118/6010 8269/17234/6039 8265/17226/6040 +f 8210/17118/6041 8209/17116/6041 8268/17232/6041 8269/17234/6041 +f 8200/17103/5869 8198/17101/5869 8208/17114/5869 8270/17235/5869 +f 8197/17099/5942 8211/17120/5942 8212/17122/5942 8207/17113/5942 +f 8190/17086/6042 8200/17103/6042 8270/17235/5943 8191/17087/5944 +f 8195/17096/5945 8189/17084/5945 8192/17089/5945 8209/17117/5945 +f 8265/17226/6040 8269/17234/6039 8271/17236/6043 8272/17237/6044 +f 8269/17234/6045 8268/17232/6045 8273/17239/6045 8271/17236/6045 +f 8267/17229/5966 8274/17243/5966 8275/17244/5966 8276/17245/5966 +f 8277/17249/5965 8266/17227/5965 8278/17251/5965 8279/17254/5965 +f 8270/17235/5935 8208/17114/5935 8277/17248/5935 8280/17257/5935 +f 8191/17087/5944 8270/17235/5943 8280/17257/5952 8274/17241/5953 +f 8208/17115/5954 8207/17113/5954 8266/17227/5954 8277/17249/5954 +f 8192/17090/5955 8191/17088/5955 8274/17242/5955 8267/17230/5955 +f 8276/17245/5958 8275/17244/5958 8281/17259/5958 8282/17261/5958 +f 8279/17255/5959 8278/17252/5959 8283/17264/5959 8284/17266/5959 +f 8275/17244/5960 8285/17267/5961 8286/17268/5962 8281/17259/5963 +f 8285/17267/5978 8279/17256/5978 8284/17265/5978 8286/17268/5978 +f 8268/17233/5948 8267/17231/5948 8276/17246/5948 8273/17238/5948 +f 8266/17228/5947 8265/17226/5947 8272/17237/5947 8278/17253/5947 +f 8280/17258/5964 8277/17250/5964 8279/17256/5964 8285/17267/5964 +f 8274/17243/5953 8280/17258/5952 8285/17267/5961 8275/17244/5960 +f 8286/17268/5969 8284/17265/5969 8257/17208/5970 8287/17269/5970 +f 8283/17264/5971 8288/17270/5971 8251/17194/5972 8258/17209/5973 +f 8289/17272/6046 8282/17262/6046 8290/17274/6046 8291/17275/6046 +f 8288/17271/6047 8292/17277/6048 8252/17195/6032 8251/17193/6032 +f 8271/17236/6049 8273/17239/6049 8289/17273/6049 8292/17277/6049 +f 8272/17237/6044 8271/17236/6043 8292/17277/6048 8288/17271/6047 +f 8273/17240/6050 8276/17247/6050 8282/17262/6050 8289/17272/6050 +f 8278/17253/5977 8272/17237/5977 8288/17271/5977 8283/17263/5977 +f 8291/17275/6051 8290/17274/6051 8293/17278/6051 8294/17280/6051 +f 8247/17186/6037 8245/17182/6036 8295/17284/5980 8261/17216/5980 +f 8242/17178/5934 8263/17222/6038 8296/17287/5983 8255/17201/5983 +f 8290/17274/5981 8297/17290/5981 8298/17292/5982 8293/17278/5982 +f 8281/17259/5963 8286/17268/5962 8287/17269/5968 8297/17291/5968 +f 8284/17266/5967 8283/17264/5967 8258/17209/5967 8257/17207/5967 +f 8282/17262/5984 8281/17260/5984 8297/17290/5981 8290/17274/5981 +f 8292/17277/6052 8289/17273/6052 8291/17276/6053 8252/17195/6054 +f 8299/17295/5989 8256/17204/5990 8255/17202/5989 8296/17288/5989 +f 8262/17219/5989 8299/17295/5989 8296/17288/5989 8300/17297/5990 +f 8261/17217/5991 8295/17285/5989 8299/17296/5989 8262/17220/5989 +f 8295/17285/5989 8301/17299/5990 8256/17205/5990 8299/17296/5989 +f 8302/17301/5992 8260/17213/5993 8259/17210/5993 8254/17199/5993 +f 8294/17281/5992 8302/17301/5992 8254/17199/5993 8253/17196/5992 +f 8293/17279/5994 8298/17293/5992 8302/17302/5992 8294/17282/5992 +f 8298/17293/5992 8303/17303/5992 8260/17214/5993 8302/17302/5992 +f 8263/17223/5995 8264/17224/5995 8300/17298/5995 8296/17289/5995 +f 8297/17291/5968 8287/17269/5968 8303/17304/5996 8298/17294/5996 +f 8245/17183/5997 8244/17181/5997 8301/17300/5997 8295/17286/5997 +f 8252/17195/6054 8291/17276/6053 8294/17283/5998 8253/17197/5998 +f 8264/17224/5999 8248/17188/5999 8262/17221/5999 8300/17298/5999 +f 8287/17269/5970 8257/17208/5970 8260/17215/6000 8303/17304/6000 +f 8244/17181/6001 8243/17180/6001 8256/17206/6001 8301/17300/6001 +f 8258/17209/5973 8251/17194/5972 8254/17200/6002 8259/17211/6002 +o Chair.022 +v -8.942054 0.806663 5.307844 +v -8.942054 0.835619 5.307844 +v -8.920926 0.835619 5.262948 +v -8.749778 0.835619 4.899256 +v -8.728650 0.835619 4.854360 +v -8.728650 0.806663 4.854360 +v -8.749778 0.806663 4.899256 +v -8.920926 0.806663 5.262948 +v -8.380628 0.835619 5.018135 +v -8.380628 0.806663 5.018135 +v -8.380628 0.777705 5.018135 +v -8.400052 0.777705 5.059412 +v -8.749778 0.777705 4.899256 +v -8.728650 0.777705 4.854360 +v -8.594031 0.806663 5.471619 +v -8.594031 0.835619 5.471619 +v -8.574607 0.806663 5.430342 +v -8.574607 0.835619 5.430342 +v -8.594031 0.777705 5.471619 +v -8.574607 0.777705 5.430342 +v -8.942054 0.777705 5.307844 +v -8.920926 0.777705 5.262948 +v -8.400052 0.806663 5.059412 +v -8.400052 0.835619 5.059412 +v -8.554300 0.851736 4.934009 +v -8.551814 0.862848 4.928724 +v -8.670422 0.862848 4.872908 +v -8.672909 0.851736 4.878193 +v -8.672833 0.835669 4.878033 +v -8.702223 0.851517 4.864399 +v -8.699781 0.836313 4.865352 +v -8.545916 0.835524 4.916190 +v -8.545990 0.851591 4.916349 +v -8.427383 0.851591 4.972165 +v -8.427308 0.835524 4.972005 +v -8.429764 0.863200 4.977224 +v -8.400899 0.854415 4.990808 +v -8.400632 0.843776 4.984753 +v -8.551845 0.824060 4.928790 +v -8.548403 0.824409 4.921475 +v -8.429795 0.824409 4.977290 +v -8.433237 0.824060 4.984605 +v -8.548371 0.863200 4.921409 +v -8.433207 0.862848 4.984539 +v -8.664598 0.851591 4.860534 +v -8.666980 0.863200 4.865594 +v -8.554225 0.835669 4.933849 +v -8.435618 0.835669 4.989664 +v -8.670453 0.824060 4.872974 +v -8.667011 0.824409 4.865660 +v -8.403483 0.829050 4.983217 +v -8.407994 0.818864 4.987549 +v -8.404405 0.854095 4.998092 +v -8.411501 0.818544 4.994834 +v -8.411767 0.829183 5.000888 +v -8.664524 0.835524 4.860374 +v -8.693892 0.851380 4.846749 +v -8.697981 0.862365 4.851005 +v -8.695693 0.825328 4.861097 +v -8.692303 0.825660 4.853758 +v -8.691451 0.836176 4.847703 +v -8.435694 0.851736 4.989824 +v -8.725378 0.817783 4.853306 +v -8.719763 0.808601 4.849770 +v -8.716418 0.808879 4.842409 +v -8.717028 0.817668 4.835667 +v -8.721579 0.830376 4.833720 +v -8.701371 0.862033 4.858344 +v -8.738506 0.781988 4.825560 +v -8.744688 0.790834 4.822845 +v -8.729930 0.830491 4.851360 +v -8.753054 0.790914 4.840478 +v -8.746871 0.782070 4.843192 +v -8.727194 0.839556 4.837258 +v -8.751481 0.797226 4.825829 +v -8.730539 0.839280 4.844618 +v -8.754790 0.797033 4.833206 +v -8.769110 0.737040 4.832922 +v -8.761952 0.733008 4.836095 +v -8.760735 0.737005 4.815293 +v -8.768231 0.739918 4.817946 +v -8.771519 0.739831 4.825333 +v -8.740079 0.775678 4.840209 +v -8.736770 0.775870 4.832832 +v -8.782368 0.668358 4.811294 +v -8.785654 0.668281 4.818681 +v -8.754457 0.730092 4.833444 +v -8.775993 0.662308 4.829487 +v -8.768457 0.659756 4.826855 +v -8.753580 0.732970 4.818466 +v -8.751169 0.730182 4.826056 +v -8.765171 0.659834 4.819467 +v -8.767620 0.662276 4.811859 +v -8.345926 0.675525 5.032067 +v -8.353116 0.673643 5.028488 +v -8.315924 -0.024782 5.045991 +v -8.308734 -0.022901 5.049570 +v -8.774830 0.665806 4.808661 +v -8.853262 -0.015949 4.771751 +v -8.860800 -0.013399 4.774384 +v -8.334814 0.676869 5.021906 +v -8.338415 0.676827 5.029147 +v -8.301222 -0.021600 5.046649 +v -8.297622 -0.021558 5.039409 +v -8.854426 -0.019449 4.792579 +v -8.846889 -0.021999 4.789946 +v -8.783205 0.665838 4.826289 +v -8.372900 0.826920 5.003984 +v -8.374394 0.819027 4.997100 +v -8.408916 0.843909 5.002425 +v -8.382656 0.819125 5.014782 +v -8.376459 0.826681 5.011243 +v -8.385880 0.800547 4.997956 +v -8.389440 0.800309 5.005216 +v -8.387945 0.808201 5.012098 +v -8.363021 0.782513 5.024023 +v -8.355758 0.786178 5.020985 +v -8.368868 0.773503 5.005962 +v -8.372459 0.773388 5.013206 +v -8.369851 0.777216 5.020613 +v -8.379683 0.808102 4.994417 +v -8.358808 0.718911 5.019630 +v -8.356026 0.721393 5.027119 +v -8.361604 0.777168 5.002925 +v -8.347780 0.721363 5.009430 +v -8.355209 0.718984 5.012390 +v -8.352164 0.786293 5.013742 +v -8.341526 0.727210 5.027682 +v -8.337929 0.727284 5.020441 +v -8.354774 0.782465 5.006334 +v -8.340710 0.724801 5.012952 +v -8.337682 0.675507 5.014377 +v -8.344871 0.673627 5.010799 +v -8.348955 0.724831 5.030642 +v -8.355984 0.672284 5.020959 +v -8.352383 0.672325 5.013720 +v -8.315190 -0.026101 5.031222 +v -8.318790 -0.026141 5.038462 +v -8.861638 -0.015917 4.789380 +v -8.307678 -0.024800 5.028302 +v -8.846052 -0.019481 4.774950 +v -8.853845 -0.017698 4.782165 +v -8.843603 -0.021922 4.782557 +v -8.864086 -0.013475 4.781772 +v -8.308207 -0.023850 5.038935 +v -8.300489 -0.022917 5.031879 +v -8.777224 0.851736 5.407721 +v -8.774736 0.862848 5.402435 +v -8.893345 0.862848 5.346620 +v -8.895832 0.851736 5.351905 +v -8.895757 0.835669 5.351746 +v -8.925145 0.851517 5.338110 +v -8.922705 0.836313 5.339064 +v -8.652718 0.824409 5.451002 +v -8.650230 0.835524 5.445717 +v -8.626406 0.829050 5.456929 +v -8.630918 0.818864 5.461261 +v -8.774767 0.824060 5.402502 +v -8.771325 0.824409 5.395187 +v -8.656160 0.824060 5.458317 +v -8.771295 0.863200 5.395121 +v -8.656129 0.862848 5.458251 +v -8.652687 0.863200 5.450936 +v -8.768913 0.851591 5.390061 +v -8.650306 0.851591 5.445876 +v -8.887522 0.851591 5.334246 +v -8.889902 0.863200 5.339305 +v -8.777148 0.835669 5.407561 +v -8.658541 0.835669 5.463377 +v -8.893375 0.824060 5.346686 +v -8.889934 0.824409 5.339372 +v -8.627328 0.854095 5.471804 +v -8.623821 0.854415 5.464520 +v -8.634423 0.818544 5.468545 +v -8.634690 0.829183 5.474600 +v -8.658616 0.851736 5.463536 +v -8.631839 0.843909 5.476137 +v -8.768838 0.835524 5.389902 +v -8.887446 0.835524 5.334086 +v -8.916814 0.851380 5.320461 +v -8.920903 0.862365 5.324717 +v -8.918615 0.825328 5.334808 +v -8.915225 0.825660 5.327470 +v -8.914373 0.836176 5.321415 +v -8.924294 0.862033 5.332056 +v -8.950117 0.839556 5.310969 +v -8.953462 0.839280 5.318330 +v -8.948301 0.817783 5.327019 +v -8.942686 0.808601 5.323481 +v -8.939341 0.808879 5.316121 +v -8.939950 0.817668 5.309379 +v -8.959692 0.775870 5.306544 +v -8.961429 0.781988 5.299271 +v -8.963001 0.775678 5.313921 +v -8.944502 0.830376 5.307432 +v -8.967610 0.790834 5.296556 +v -8.952852 0.830491 5.325072 +v -8.975976 0.790914 5.314190 +v -8.969794 0.782070 5.316905 +v -8.992032 0.737040 5.306634 +v -8.984876 0.733008 5.309807 +v -8.974403 0.797226 5.299541 +v -8.983658 0.737005 5.289005 +v -8.991155 0.739918 5.291657 +v -8.977713 0.797033 5.306917 +v -8.994442 0.739831 5.299045 +v -8.997753 0.665806 5.282372 +v -9.005290 0.668358 5.285005 +v -9.008576 0.668281 5.292393 +v -9.006128 0.665838 5.300001 +v -8.977379 0.730092 5.307155 +v -8.998917 0.662308 5.303200 +v -8.991380 0.659756 5.300566 +v -8.976502 0.732970 5.292178 +v -8.974092 0.730182 5.299767 +v -8.568849 0.675525 5.505779 +v -8.576038 0.673643 5.502201 +v -8.538846 -0.024782 5.519703 +v -8.531656 -0.022901 5.523281 +v -9.076185 -0.015949 5.245463 +v -9.083723 -0.013399 5.248096 +v -8.557737 0.676869 5.495618 +v -8.561337 0.676827 5.502858 +v -8.524145 -0.021600 5.520360 +v -8.520544 -0.021558 5.513121 +v -9.077349 -0.019449 5.266291 +v -9.069813 -0.021999 5.263657 +v -8.990542 0.662276 5.285571 +v -8.988093 0.659834 5.293179 +v -8.605579 0.819125 5.488494 +v -8.599381 0.826681 5.484955 +v -8.608804 0.800547 5.471668 +v -8.612362 0.800309 5.478927 +v -8.610868 0.808201 5.485811 +v -8.623555 0.843776 5.458465 +v -8.592774 0.777216 5.494325 +v -8.585944 0.782513 5.497734 +v -8.595383 0.773388 5.486917 +v -8.602607 0.808102 5.468128 +v -8.584526 0.777168 5.476636 +v -8.591790 0.773503 5.479674 +v -8.595822 0.826920 5.477695 +v -8.578680 0.786178 5.494697 +v -8.575087 0.786293 5.487453 +v -8.597317 0.819027 5.470812 +v -8.570703 0.721363 5.483142 +v -8.578132 0.718984 5.486101 +v -8.564449 0.727210 5.501394 +v -8.560851 0.727284 5.494153 +v -8.577696 0.782465 5.480045 +v -8.563632 0.724801 5.486664 +v -8.560605 0.675507 5.488089 +v -8.571878 0.724831 5.504354 +v -8.581730 0.718911 5.493342 +v -8.575305 0.672325 5.487432 +v -8.578906 0.672284 5.494671 +v -8.578949 0.721393 5.500832 +v -8.538113 -0.026101 5.504934 +v -8.541713 -0.026141 5.512174 +v -9.084560 -0.015917 5.263092 +v -9.068974 -0.019481 5.248662 +v -8.567794 0.673627 5.484511 +v -8.530601 -0.024800 5.502013 +v -9.076768 -0.017698 5.255877 +v -9.066526 -0.021922 5.256269 +v -9.087009 -0.013475 5.255484 +v -8.531129 -0.023850 5.512648 +v -8.523412 -0.022917 5.505591 +v -8.516422 0.769502 5.306699 +v -8.458238 0.769502 5.183055 +v -8.516422 0.798458 5.306699 +v -8.458238 0.798458 5.183055 +v -8.863876 0.798458 5.141717 +v -8.806828 0.798458 5.020486 +v -8.458238 0.740544 5.183055 +v -8.516422 0.740544 5.306699 +v -8.806828 0.740544 5.020486 +v -8.863876 0.740544 5.141717 +vn -0.1729 -0.0001 0.9849 +vn -0.6653 -1.4054 0.2395 +vn -0.9048 -0.0000 -0.4258 +vn -0.2395 -1.4054 -0.6653 +vn -0.0178 1.3250 -0.7451 +vn 0.4258 -0.0000 -0.9048 +vn -0.0000 -1.9875 -0.0000 +vn 0.0286 -1.9829 -0.0619 +vn 0.0290 -1.9828 -0.0627 +vn -0.4258 -0.0000 0.9048 +vn 0.9048 -0.0000 0.4258 +vn -0.0000 1.9875 -0.0000 +vn 0.0294 1.9829 -0.0615 +vn 0.0298 1.9828 -0.0623 +vn -0.0290 1.9828 0.0627 +vn -0.0286 1.9829 0.0619 +vn -0.0287 1.9828 0.0621 +vn -0.0288 1.9828 0.0624 +vn -0.0298 -1.9828 0.0623 +vn -0.0294 -1.9829 0.0615 +vn -0.0296 -1.9828 0.0617 +vn -0.0297 -1.9828 0.0620 +vn -0.2944 1.4358 0.6257 +vn -0.2950 1.4446 0.6202 +vn -0.4258 -0.0447 0.9046 +vn -0.4255 -0.0427 0.9047 +vn -0.4198 -0.0405 0.9074 +vn 0.4257 0.0433 -0.9046 +vn 0.4269 0.0436 -0.9040 +vn 0.4270 0.0436 -0.9040 +vn 0.3893 1.3788 -0.6059 +vn 0.0093 -1.9870 -0.0197 +vn -0.0093 1.9870 0.0198 +vn 0.3076 1.3745 -0.6536 +vn 0.3031 1.3837 -0.6507 +vn 0.3032 1.3837 -0.6507 +vn -0.0147 1.9870 0.0170 +vn -0.3076 -1.3743 0.6536 +vn 0.2118 -1.4424 -0.6546 +vn 0.1150 1.9683 0.0777 +vn -0.3793 -1.3823 0.6103 +vn 0.2945 -1.4356 -0.6257 +vn 0.4257 0.0439 -0.9046 +vn 0.2987 1.3929 -0.6478 +vn -0.0115 -1.9866 -0.0288 +vn 0.4195 0.0425 -0.9075 +vn 0.4253 0.0445 -0.9048 +vn -0.1077 -1.3282 0.7361 +vn 0.4937 -1.3856 -0.5198 +vn 0.2820 -1.8944 0.1093 +vn 0.4136 0.0365 -0.9103 +vn 0.4187 0.0426 -0.9079 +vn -0.0200 1.9869 0.0141 +vn 0.2788 -1.4560 -0.6210 +vn -0.2956 1.4534 0.6147 +vn -0.3137 -1.3956 0.6391 +vn 0.4087 0.0263 -0.9126 +vn 0.4125 0.0352 -0.9108 +vn -0.4140 -0.0348 0.9101 +vn -0.4190 -0.0406 0.9078 +vn -0.4133 -0.0341 0.9104 +vn -0.4093 -0.0247 0.9123 +vn -0.0883 1.0950 -0.8299 +vn -0.6994 1.1425 0.4247 +vn -0.3119 1.8724 -0.1233 +vn -0.5092 1.3716 0.5142 +vn 0.0939 1.3146 -0.7441 +vn -0.4091 -0.0237 0.9124 +vn -0.4078 -0.0178 0.9130 +vn -0.2284 0.7577 -0.8958 +vn -0.8456 0.7907 0.3559 +vn -0.7702 1.0738 -0.3390 +vn 0.5462 -1.5988 0.2337 +vn 0.6867 -1.1663 -0.4290 +vn 0.0773 -1.1180 0.8232 +vn -0.5712 1.5567 -0.2454 +vn -0.8390 0.7910 -0.3711 +vn 0.2726 -0.5544 0.9208 +vn 0.8954 -0.5788 -0.3367 +vn 0.8380 -0.7960 0.3706 +vn 0.4072 0.0182 -0.9133 +vn 0.4084 0.0243 -0.9127 +vn 0.7527 -1.1313 0.3308 +vn 0.8371 -0.8218 -0.3582 +vn 0.2214 -0.7878 0.8910 +vn -0.4453 -0.0054 0.8954 +vn -0.4453 -0.0050 0.8954 +vn -0.2992 0.3368 -0.9390 +vn 0.8892 0.2309 0.4425 +vn 0.2992 -0.3368 0.9390 +vn -0.8959 0.5761 0.3366 +vn -0.2730 0.5519 -0.9211 +vn -0.4082 -0.0157 0.9129 +vn -0.4073 -0.0111 0.9133 +vn 0.4065 0.0107 -0.9136 +vn 0.4070 0.0138 -0.9134 +vn 0.5581 1.2863 -0.5193 +vn -0.0202 1.3411 0.7377 +vn -0.3101 -1.8595 -0.1687 +vn -0.4285 -0.0429 0.9033 +vn -0.4332 -0.0413 0.9011 +vn -0.4385 -0.0363 0.8985 +vn -0.4340 -0.0407 0.9007 +vn -0.2018 1.4388 0.6597 +vn 0.4286 0.0451 -0.9032 +vn 0.4334 0.0434 -0.9009 +vn -0.0949 -1.9739 -0.0681 +vn -0.4283 -0.0442 0.9034 +vn 0.1600 1.1189 0.8108 +vn -0.5216 -1.6105 -0.2671 +vn -0.4429 -0.0223 0.8965 +vn -0.4395 -0.0345 0.8981 +vn -0.6875 -1.1530 0.4368 +vn 0.4342 0.0418 -0.9006 +vn 0.4388 0.0372 -0.8984 +vn 0.3601 1.8142 0.1926 +vn 0.0434 -1.3706 -0.7229 +vn -0.5328 -1.3151 0.5275 +vn -0.8602 -0.6691 0.3831 +vn -0.2906 -0.6981 -0.8901 +vn 0.7902 0.9305 0.3954 +vn 0.4432 0.0227 -0.8963 +vn 0.4398 0.0348 -0.8979 +vn 0.4437 0.0207 -0.8961 +vn 0.4454 0.0063 -0.8953 +vn 0.7228 1.0743 -0.4306 +vn 0.5932 1.4834 0.3017 +vn -0.1313 -1.1991 -0.7866 +vn 0.8871 0.2671 0.4415 +vn 0.4453 0.0054 -0.8954 +vn 0.9280 0.1845 -0.3610 +vn 0.9285 0.1720 -0.3611 +vn 0.9285 0.1721 -0.3611 +vn 0.3541 0.1927 0.9302 +vn 0.3544 0.1798 0.9307 +vn 0.3544 0.1797 0.9307 +vn -0.4445 -0.0061 0.8958 +vn -0.4429 -0.0199 0.8965 +vn -0.7835 -0.9581 -0.3921 +vn 0.2930 0.6831 0.8922 +vn 0.8632 0.6546 -0.3825 +vn -0.8892 -0.2309 -0.4426 +vn -0.4065 -0.0106 0.9136 +vn -0.3545 -0.1785 -0.9307 +vn -0.3545 -0.1784 -0.9307 +vn -0.3547 -0.1668 -0.9312 +vn 0.4066 0.0106 -0.9136 +vn -0.3542 -0.1901 -0.9302 +vn -0.9281 -0.1820 0.3610 +vn -0.9286 -0.1709 0.3611 +vn -0.9286 -0.1708 0.3611 +vn -0.8874 -0.2621 -0.4418 +vn -0.1988 -1.9389 -0.0936 +vn -0.1988 -1.9389 -0.0935 +vn 0.1060 -1.9738 0.0499 +vn 0.1060 -1.9738 0.0498 +vn 0.1059 -1.9738 0.0498 +vn 0.9282 -0.3518 -0.3273 +vn 0.4453 0.0050 -0.8954 +vn -0.9282 0.3518 0.3273 +vn -0.9290 -0.1597 0.3611 +vn 0.8863 -0.4868 0.3930 +vn 0.9290 0.1597 -0.3611 +vn -0.8863 0.4868 -0.3930 +vn 0.3547 0.1668 0.9312 +vn -0.4257 -0.0439 0.9046 +vn -0.4253 -0.0446 0.9048 +vn -0.4195 -0.0425 0.9075 +vn 0.2118 -1.4424 -0.6545 +vn 0.3076 1.3744 -0.6536 +vn -0.3076 -1.3745 0.6536 +vn -0.3793 -1.3824 0.6102 +vn -0.4269 -0.0436 0.9040 +vn -0.4270 -0.0436 0.9040 +vn -0.4334 -0.0433 0.9010 +vn -0.4288 -0.0453 0.9031 +vn 0.2945 -1.4357 -0.6257 +vn 0.4258 0.0445 -0.9046 +vn 0.4196 0.0426 -0.9074 +vn 0.4254 0.0446 -0.9047 +vn -0.4257 -0.0433 0.9046 +vn -0.1077 -1.3283 0.7360 +vn -0.3137 -1.3957 0.6391 +vn 0.5462 -1.5987 0.2337 +vn 0.4135 0.0364 -0.9103 +vn 0.4088 0.0263 -0.9125 +vn -0.4135 -0.0364 0.9103 +vn -0.4187 -0.0426 0.9079 +vn -0.4127 -0.0355 0.9107 +vn -0.4087 -0.0261 0.9126 +vn -0.4084 -0.0243 0.9127 +vn -0.4073 -0.0186 0.9132 +vn 0.0773 -1.1181 0.8231 +vn -0.0883 1.0949 -0.8299 +vn -0.2731 0.5519 -0.9210 +vn 0.2727 -0.5545 0.9208 +vn 0.4072 0.0181 -0.9133 +vn 0.4085 0.0244 -0.9127 +vn 0.2215 -0.7878 0.8910 +vn -0.4452 -0.0054 0.8954 +vn 0.2993 -0.3368 0.9390 +vn -0.4070 -0.0138 0.9134 +vn -0.4062 -0.0116 0.9138 +vn 0.4065 0.0109 -0.9136 +vn -0.4388 -0.0372 0.8984 +vn -0.4342 -0.0418 0.9006 +vn -0.5328 -1.3152 0.5275 +vn 0.4283 0.0440 -0.9034 +vn 0.4334 0.0433 -0.9009 +vn -0.4433 -0.0227 0.8963 +vn -0.4398 -0.0349 0.8979 +vn -0.6875 -1.1531 0.4368 +vn 0.5581 1.2863 -0.5194 +vn 0.1600 1.1190 0.8108 +vn -0.8874 -0.2621 -0.4417 +vn -0.4438 -0.0207 0.8961 +vn -0.4454 -0.0064 0.8953 +vn -0.8602 -0.6692 0.3830 +vn -0.8892 -0.2309 -0.4425 +vn -0.4066 -0.0106 0.9136 +vn -0.9281 -0.1820 0.3608 +vn -0.9286 -0.1709 0.3609 +vn -0.9286 -0.1708 0.3609 +vn -0.9291 -0.1597 0.3611 +vn 0.0288 -1.9828 -0.0624 +vn 0.0287 -1.9828 -0.0621 +vn 0.0297 1.9828 -0.0620 +vn 0.0296 1.9828 -0.0617 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.973130 0.033128 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.677629 0.482142 +vt 0.409642 -0.009898 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.669677 0.481452 +vt 0.240570 0.058726 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +vt 0.296927 -0.019617 +vt 0.353285 -0.019617 +vt 0.470812 0.481452 +vt 0.296927 0.014692 +vt 0.271947 0.481452 +vt 0.353285 0.014692 +vt -0.849112 0.025953 +vt 0.468872 0.000137 +vt -0.911121 0.025955 +vt 0.273887 0.000137 +vt 0.475153 0.482142 +vt 0.353285 -0.053929 +vt 0.272677 0.482143 +vt 0.296927 -0.053929 +vt -0.911121 -0.024667 +vt 0.473178 0.006015 +vt -0.849112 -0.024667 +vt 0.274652 0.006015 +s 1 +usemtl CabnetDoors +f 8304/17306/6055 8305/17308/6056 8306/17311/6057 8576/17820/6057 8577/17822/6057 8307/17313/6057 8308/17315/6058 8309/17319/6059 8310/17320/6057 8311/17321/6057 +f 8309/17318/6059 8308/17316/6058 8312/17323/6060 8313/17326/6060 +f 8314/17328/6061 8315/17331/6062 8316/17334/6063 8317/17335/6061 +f 8318/17339/6064 8319/17340/6064 8305/17309/6056 8304/17305/6055 +f 8319/17341/6065 8318/17338/6065 8320/17343/6065 8321/17345/6065 +f 8322/17346/6065 8323/17349/6065 8320/17343/6065 8318/17338/6065 +f 8322/17347/6064 8318/17339/6064 8304/17305/6055 8324/17351/6064 +f 8317/17336/6060 8309/17318/6059 8313/17326/6060 8314/17329/6060 +f 8324/17352/6057 8304/17306/6057 8311/17321/6057 8310/17320/6057 8309/17319/6057 8317/17337/6057 8316/17333/6057 8580/17828/6057 8581/17830/6057 8325/17355/6057 +f 8317/17337/6057 8316/17333/6057 8310/17320/6057 8309/17319/6057 +f 8311/17322/6065 8304/17307/6065 8324/17353/6065 8325/17356/6065 +f 8575/17819/6065 8573/17815/6065 8326/17358/6065 8327/17359/6065 +f 8313/17327/6065 8312/17324/6065 8327/17359/6065 8326/17358/6065 +f 8572/17814/6065 8320/17343/6065 8323/17349/6065 8579/17827/6065 +f 8315/17332/6065 8314/17330/6065 8313/17327/6065 8326/17358/6065 +f 8319/17342/6066 8321/17344/6067 8306/17312/6068 8305/17310/6066 +f 8307/17314/6069 8327/17360/6070 8312/17325/6066 8308/17317/6066 +f 8577/17823/6071 8575/17818/6072 8327/17360/6070 8307/17314/6069 +f 8325/17357/6073 8323/17350/6074 8322/17348/6061 8324/17354/6061 +f 8581/17831/6075 8579/17826/6076 8323/17350/6074 8325/17357/6073 +f 8328/17361/6077 8329/17362/6077 8330/17363/6078 8331/17365/6078 +f 8332/17366/6079 8331/17364/6079 8333/17369/6080 8334/17371/6081 +f 8335/17373/6082 8336/17374/6082 8337/17375/6083 8338/17377/6084 +f 8337/17375/6085 8339/17378/6085 8340/17380/6085 8341/17382/6085 +f 8342/17384/6086 8343/17385/6086 8344/17386/6086 8345/17388/6086 +f 8346/17390/6087 8329/17362/6087 8347/17391/6087 8339/17379/6087 +f 8336/17374/6088 8346/17389/6088 8339/17378/6088 8337/17375/6088 +f 8348/17392/6089 8349/17393/6090 8346/17389/6088 8336/17374/6088 +f 8349/17394/6091 8330/17363/6091 8329/17362/6087 8346/17390/6087 +f 8350/17395/6092 8342/17383/6092 8345/17387/6092 8351/17396/6092 +f 8332/17367/6092 8352/17399/6092 8342/17383/6092 8350/17395/6092 +f 8352/17398/6086 8353/17400/6086 8343/17385/6086 8342/17384/6086 +f 8344/17386/6093 8338/17376/6093 8354/17402/6093 8355/17403/6093 +f 8339/17379/6094 8347/17391/6094 8356/17404/6094 8340/17381/6094 +f 8351/17396/6095 8345/17387/6095 8357/17406/6095 8358/17408/6095 +f 8343/17385/6096 8335/17372/6096 8338/17376/6096 8344/17386/6096 +f 8353/17400/6096 8359/17410/6096 8335/17372/6096 8343/17385/6096 +f 8359/17409/6097 8348/17392/6097 8336/17374/6082 8335/17373/6082 +f 8349/17393/6090 8348/17392/6089 8360/17411/6098 8361/17413/6098 +f 8353/17400/6099 8352/17398/6099 8362/17414/6099 8363/17416/6099 +f 8348/17392/6097 8359/17409/6097 8364/17417/6100 8360/17411/6101 +f 8365/17419/6077 8347/17391/6077 8329/17362/6077 8328/17361/6077 +f 8362/17415/6102 8334/17370/6102 8366/17422/6102 8367/17424/6102 +f 8364/17418/6103 8363/17416/6103 8368/17425/6103 8369/17427/6103 +f 8363/17416/6104 8362/17414/6104 8367/17423/6104 8368/17425/6104 +f 8360/17411/6101 8364/17417/6100 8369/17428/6105 8370/17429/6106 +f 8330/17363/6091 8349/17394/6091 8361/17412/6107 8371/17430/6107 +f 8359/17410/6108 8353/17400/6108 8363/17416/6108 8364/17418/6108 +f 8331/17365/6078 8330/17363/6078 8371/17430/6109 8333/17368/6109 +f 8352/17399/6110 8332/17367/6110 8334/17370/6110 8362/17415/6110 +f 8370/17429/6106 8369/17428/6105 8372/17431/6111 8373/17432/6112 +f 8366/17422/6113 8374/17433/6114 8375/17436/6115 8376/17437/6116 +f 8377/17438/6117 8370/17429/6117 8373/17432/6117 8378/17440/6117 +f 8374/17433/6118 8379/17443/6118 8380/17445/6118 8375/17436/6118 +f 8371/17430/6119 8361/17412/6119 8377/17439/6119 8379/17444/6119 +f 8333/17368/6120 8371/17430/6120 8379/17444/6120 8374/17434/6120 +f 8361/17413/6121 8360/17411/6121 8370/17429/6121 8377/17438/6121 +f 8334/17371/6081 8333/17369/6080 8374/17435/6114 8366/17421/6113 +f 8376/17437/6116 8375/17436/6115 8381/17449/6122 8382/17450/6123 +f 8378/17440/6124 8373/17432/6124 8383/17451/6124 8384/17453/6124 +f 8375/17436/6125 8380/17445/6125 8385/17454/6125 8381/17449/6125 +f 8380/17446/6126 8378/17441/6126 8384/17452/6126 8385/17455/6126 +f 8368/17425/6127 8367/17423/6127 8386/17456/6127 8387/17459/6127 +f 8369/17428/6128 8368/17426/6128 8387/17461/6128 8372/17431/6128 +f 8367/17424/6129 8366/17422/6129 8376/17437/6129 8386/17458/6129 +f 8379/17444/6130 8377/17439/6130 8378/17442/6130 8380/17447/6130 +f 8385/17455/6131 8384/17452/6131 8388/17463/6131 8389/17464/6131 +f 8390/17466/6132 8382/17450/6132 8391/17467/6132 8392/17468/6132 +f 8393/17470/6133 8394/17472/6133 8395/17474/6133 8396/17476/6133 +f 8394/17472/6134 8390/17465/6134 8392/17469/6134 8395/17474/6134 +f 8373/17432/6112 8372/17431/6111 8393/17471/6135 8383/17451/6136 +f 8387/17460/6137 8386/17457/6137 8390/17465/6137 8394/17472/6137 +f 8372/17431/6138 8387/17461/6138 8394/17473/6138 8393/17471/6138 +f 8386/17458/6139 8376/17437/6139 8382/17450/6139 8390/17466/6139 +f 8397/17477/6140 8398/17479/6140 8399/17481/6141 8400/17482/6141 +f 8388/17462/6142 8401/17485/6142 8402/17486/6142 8403/17488/6142 +f 8404/17491/6143 8405/17493/6143 8406/17495/6143 8407/17496/6143 +f 8392/17468/6144 8391/17467/6144 8408/17499/6144 8409/17501/6144 +f 8381/17448/6145 8385/17455/6145 8389/17464/6145 8410/17505/6145 +f 8384/17453/6146 8383/17451/6146 8401/17485/6146 8388/17462/6146 +f 8382/17450/6123 8381/17449/6122 8410/17504/6147 8391/17467/6148 +f 8383/17451/6136 8393/17471/6135 8396/17475/6149 8401/17485/6150 +f 8341/17382/6151 8340/17380/6151 8411/17506/6151 8412/17508/6151 +f 8356/17404/6152 8413/17509/6152 8414/17511/6152 8415/17515/6152 +f 8357/17405/6153 8355/17403/6153 8416/17516/6153 8417/17518/6153 +f 8413/17510/6154 8358/17407/6155 8418/17520/6156 8414/17512/6157 +f 8347/17391/6158 8365/17419/6158 8413/17509/6158 8356/17404/6158 +f 8338/17377/6084 8337/17375/6083 8341/17382/6159 8354/17401/6160 +f 8345/17388/6161 8344/17386/6161 8355/17403/6161 8357/17405/6161 +f 8365/17420/6162 8351/17397/6162 8358/17407/6155 8413/17510/6154 +f 8415/17514/6163 8414/17513/6163 8419/17522/6163 8420/17525/6163 +f 8417/17518/6164 8416/17516/6164 8421/17526/6164 8422/17529/6164 +f 8414/17513/6157 8418/17521/6156 8423/17532/6165 8419/17522/6166 +f 8418/17521/6167 8417/17519/6167 8422/17530/6167 8423/17532/6167 +f 8354/17401/6160 8341/17382/6159 8412/17508/6168 8424/17534/6169 +f 8340/17381/6170 8356/17404/6170 8415/17515/6170 8411/17507/6170 +f 8355/17403/6171 8354/17402/6171 8424/17533/6171 8416/17516/6171 +f 8358/17408/6172 8357/17406/6172 8417/17519/6172 8418/17521/6172 +f 8423/17532/6173 8422/17530/6173 8425/17535/6173 8426/17537/6173 +f 8421/17527/6174 8427/17538/6174 8428/17539/6174 8429/17541/6174 +f 8430/17543/6175 8420/17523/6175 8431/17546/6175 8432/17548/6175 +f 8427/17538/6176 8433/17550/6177 8434/17551/6178 8428/17539/6179 +f 8412/17508/6180 8411/17506/6180 8430/17545/6180 8433/17550/6180 +f 8424/17534/6169 8412/17508/6168 8433/17550/6177 8427/17538/6176 +f 8411/17507/6181 8415/17515/6181 8420/17524/6181 8430/17544/6181 +f 8416/17517/6182 8424/17534/6182 8427/17538/6182 8421/17527/6182 +f 8432/17548/6183 8431/17546/6183 8405/17493/6183 8404/17491/6183 +f 8428/17539/6179 8434/17551/6178 8435/17552/6184 8436/17554/6184 +f 8434/17551/6185 8432/17549/6185 8404/17492/6186 8435/17552/6187 +f 8431/17546/6188 8437/17555/6188 8397/17478/6189 8405/17493/6190 +f 8419/17522/6166 8423/17532/6165 8426/17537/6191 8437/17556/6192 +f 8422/17531/6193 8421/17528/6193 8429/17542/6193 8425/17536/6193 +f 8420/17525/6194 8419/17522/6194 8437/17556/6194 8431/17547/6194 +f 8433/17550/6195 8430/17545/6195 8432/17549/6195 8434/17551/6195 +f 8438/17557/6196 8439/17559/6196 8440/17560/6196 8441/17562/6196 +f 8391/17467/6148 8410/17504/6147 8442/17565/6197 8408/17499/6197 +f 8439/17559/6198 8436/17553/6199 8443/17568/6200 8440/17560/6200 +f 8401/17485/6150 8396/17475/6149 8444/17571/6201 8402/17486/6201 +f 8429/17542/6202 8428/17540/6202 8436/17553/6199 8439/17559/6198 +f 8426/17537/6203 8425/17535/6203 8438/17558/6204 8398/17479/6205 +f 8437/17556/6192 8426/17537/6191 8398/17479/6140 8397/17477/6140 +f 8425/17536/6206 8429/17542/6206 8439/17559/6206 8438/17557/6206 +f 8445/17574/6207 8403/17489/6208 8402/17487/6207 8444/17572/6208 +f 8409/17502/6207 8445/17574/6207 8444/17572/6208 8446/17575/6208 +f 8408/17500/6207 8442/17566/6207 8445/17574/6207 8409/17502/6207 +f 8442/17566/6207 8447/17577/6208 8403/17489/6208 8445/17574/6207 +f 8448/17579/6209 8407/17497/6210 8406/17494/6210 8400/17483/6211 +f 8441/17563/6209 8448/17579/6209 8400/17483/6211 8399/17480/6211 +f 8440/17561/6209 8443/17569/6209 8448/17579/6209 8441/17563/6209 +f 8443/17569/6209 8449/17580/6209 8407/17497/6210 8448/17579/6209 +f 8396/17476/6212 8395/17474/6212 8446/17576/6212 8444/17573/6212 +f 8436/17554/6184 8435/17552/6184 8449/17581/6213 8443/17570/6213 +f 8410/17505/6214 8389/17464/6214 8447/17578/6214 8442/17567/6214 +f 8398/17479/6205 8438/17558/6204 8441/17564/6215 8399/17481/6215 +f 8395/17474/6216 8392/17469/6216 8409/17503/6216 8446/17576/6216 +f 8435/17552/6187 8404/17492/6186 8407/17498/6217 8449/17581/6217 +f 8389/17464/6218 8388/17463/6218 8403/17490/6218 8447/17578/6218 +f 8405/17493/6190 8397/17478/6189 8400/17484/6219 8406/17495/6219 +f 8450/17583/6077 8451/17584/6077 8452/17585/6078 8453/17587/6078 +f 8454/17588/6220 8453/17586/6220 8455/17590/6221 8456/17591/6222 +f 8457/17592/6223 8458/17594/6223 8459/17597/6223 8460/17599/6223 +f 8461/17601/6086 8462/17602/6086 8457/17593/6086 8463/17605/6086 +f 8464/17607/6087 8451/17584/6087 8465/17608/6087 8466/17609/6087 +f 8467/17611/6224 8464/17606/6224 8466/17610/6224 8468/17612/6224 +f 8469/17613/6088 8470/17614/6088 8464/17606/6224 8467/17611/6224 +f 8470/17615/6091 8452/17585/6091 8451/17584/6087 8464/17607/6087 +f 8471/17616/6225 8461/17600/6225 8463/17604/6225 8472/17617/6225 +f 8454/17588/6225 8473/17619/6225 8461/17600/6225 8471/17616/6225 +f 8473/17618/6086 8474/17620/6086 8462/17602/6086 8461/17601/6086 +f 8466/17609/6094 8465/17608/6094 8475/17622/6094 8476/17624/6094 +f 8472/17617/6226 8463/17604/6226 8477/17625/6226 8478/17627/6226 +f 8479/17628/6227 8472/17617/6228 8478/17627/6229 8480/17630/6230 +f 8462/17603/6096 8481/17632/6096 8458/17594/6231 8457/17592/6231 +f 8474/17621/6096 8482/17634/6096 8481/17632/6096 8462/17603/6096 +f 8470/17614/6098 8469/17613/6098 8483/17635/6098 8484/17637/6098 +f 8474/17620/6099 8473/17618/6099 8485/17638/6099 8486/17640/6099 +f 8469/17613/6232 8482/17633/6232 8487/17643/6233 8483/17635/6234 +f 8471/17616/6235 8450/17582/6235 8453/17586/6220 8454/17588/6220 +f 8472/17617/6228 8479/17628/6227 8450/17582/6235 8471/17616/6235 +f 8479/17629/6077 8465/17608/6077 8451/17584/6077 8450/17583/6077 +f 8488/17644/6119 8484/17636/6119 8489/17646/6119 8490/17648/6119 +f 8485/17639/6236 8456/17591/6236 8491/17650/6236 8492/17652/6236 +f 8487/17642/6103 8486/17641/6103 8493/17653/6103 8494/17656/6103 +f 8486/17640/6104 8485/17638/6104 8492/17651/6104 8493/17655/6104 +f 8452/17585/6091 8470/17615/6091 8484/17636/6107 8488/17644/6107 +f 8482/17634/6108 8474/17621/6108 8486/17641/6108 8487/17642/6108 +f 8453/17587/6078 8452/17585/6078 8488/17644/6109 8455/17589/6109 +f 8473/17619/6237 8454/17588/6237 8456/17591/6237 8485/17639/6237 +f 8494/17657/6128 8493/17654/6128 8495/17661/6128 8496/17662/6128 +f 8493/17655/6238 8492/17651/6238 8497/17663/6238 8495/17659/6238 +f 8498/17667/6106 8494/17657/6239 8496/17662/6240 8499/17668/6112 +f 8491/17650/6241 8500/17670/6242 8501/17671/6243 8502/17672/6244 +f 8455/17589/6120 8488/17644/6120 8490/17648/6120 8500/17669/6120 +f 8484/17637/6121 8483/17635/6121 8498/17666/6121 8489/17645/6121 +f 8456/17591/6222 8455/17590/6221 8500/17670/6242 8491/17650/6241 +f 8483/17635/6234 8487/17643/6233 8494/17658/6239 8498/17666/6106 +f 8502/17672/6244 8501/17671/6243 8503/17674/6245 8504/17675/6246 +f 8505/17678/6124 8499/17668/6124 8506/17679/6124 8507/17680/6124 +f 8501/17671/6125 8508/17684/6125 8509/17685/6125 8503/17674/6125 +f 8508/17682/6126 8505/17676/6126 8507/17681/6126 8509/17686/6126 +f 8492/17652/6247 8491/17650/6247 8502/17672/6247 8497/17665/6247 +f 8490/17648/6130 8489/17646/6130 8505/17677/6130 8508/17683/6130 +f 8500/17670/6118 8490/17649/6118 8508/17684/6118 8501/17671/6118 +f 8489/17647/6248 8498/17667/6248 8499/17668/6248 8505/17678/6248 +f 8507/17680/6249 8506/17679/6249 8510/17687/6249 8511/17688/6249 +f 8503/17673/6145 8509/17686/6145 8512/17690/6145 8513/17692/6145 +f 8509/17686/6131 8507/17681/6131 8511/17689/6131 8512/17690/6131 +f 8514/17693/6250 8504/17675/6250 8515/17695/6250 8516/17696/6250 +f 8499/17668/6112 8496/17662/6240 8517/17698/6251 8506/17679/6252 +f 8495/17660/6137 8497/17664/6137 8514/17694/6137 8518/17701/6137 +f 8496/17662/6138 8495/17661/6138 8518/17700/6138 8517/17698/6138 +f 8497/17665/6253 8502/17672/6253 8504/17675/6253 8514/17693/6253 +f 8519/17702/6254 8520/17704/6254 8521/17706/6141 8522/17707/6141 +f 8511/17688/6142 8510/17687/6142 8523/17710/6142 8524/17712/6142 +f 8525/17716/6143 8526/17718/6143 8527/17720/6143 8528/17721/6143 +f 8516/17696/6255 8515/17695/6255 8529/17725/6255 8530/17727/6255 +f 8504/17675/6246 8503/17674/6245 8513/17691/6256 8515/17695/6257 +f 8506/17679/6252 8517/17698/6251 8531/17731/6258 8510/17687/6150 +f 8518/17701/6134 8514/17694/6134 8516/17697/6134 8532/17733/6134 +f 8517/17699/6133 8518/17701/6133 8532/17733/6133 8531/17732/6133 +f 8475/17622/6152 8480/17631/6152 8533/17734/6152 8534/17736/6152 +f 8477/17626/6153 8460/17598/6153 8535/17740/6153 8536/17742/6153 +f 8480/17630/6230 8478/17627/6229 8537/17743/6259 8533/17735/6260 +f 8478/17627/6261 8477/17625/6261 8536/17741/6261 8537/17743/6261 +f 8468/17612/6085 8466/17610/6085 8476/17623/6085 8538/17744/6085 +f 8465/17608/6158 8479/17629/6158 8480/17631/6158 8475/17622/6158 +f 8458/17595/6262 8468/17612/6262 8538/17744/6159 8459/17596/6263 +f 8463/17605/6161 8457/17593/6161 8460/17598/6161 8477/17626/6161 +f 8533/17735/6260 8537/17743/6259 8539/17745/6264 8540/17746/6265 +f 8537/17743/6266 8536/17741/6266 8541/17748/6266 8539/17745/6266 +f 8535/17738/6182 8542/17752/6182 8543/17753/6182 8544/17754/6182 +f 8545/17758/6181 8534/17736/6181 8546/17760/6181 8547/17763/6181 +f 8538/17744/6267 8476/17623/6267 8545/17757/6267 8548/17766/6267 +f 8459/17596/6263 8538/17744/6159 8548/17766/6168 8542/17750/6169 +f 8476/17624/6170 8475/17622/6170 8534/17736/6170 8545/17758/6170 +f 8460/17599/6171 8459/17597/6171 8542/17751/6171 8535/17739/6171 +f 8544/17754/6174 8543/17753/6174 8549/17768/6174 8550/17770/6174 +f 8547/17764/6175 8546/17761/6175 8551/17773/6175 8552/17775/6175 +f 8543/17753/6176 8553/17776/6177 8554/17777/6178 8549/17768/6179 +f 8553/17776/6195 8547/17765/6195 8552/17774/6195 8554/17777/6195 +f 8536/17742/6164 8535/17740/6164 8544/17755/6164 8541/17747/6164 +f 8534/17737/6268 8533/17735/6268 8540/17746/6268 8546/17762/6268 +f 8548/17767/6180 8545/17759/6180 8547/17765/6180 8553/17776/6180 +f 8542/17752/6169 8548/17767/6168 8553/17776/6177 8543/17753/6176 +f 8554/17777/6185 8552/17774/6185 8525/17717/6186 8555/17778/6187 +f 8551/17773/6188 8556/17779/6188 8519/17703/6189 8526/17718/6190 +f 8557/17781/6269 8550/17771/6269 8558/17783/6269 8559/17784/6269 +f 8556/17780/6270 8560/17786/6271 8520/17704/6254 8519/17702/6254 +f 8539/17745/6272 8541/17748/6272 8557/17782/6272 8560/17786/6272 +f 8540/17746/6265 8539/17745/6264 8560/17786/6271 8556/17780/6270 +f 8541/17749/6193 8544/17756/6193 8550/17771/6193 8557/17781/6193 +f 8546/17762/6194 8540/17746/6194 8556/17780/6194 8551/17772/6194 +f 8559/17784/6273 8558/17783/6273 8561/17787/6273 8562/17789/6273 +f 8515/17695/6257 8513/17691/6256 8563/17793/6274 8529/17725/6274 +f 8510/17687/6150 8531/17731/6258 8564/17796/6201 8523/17710/6201 +f 8558/17783/6198 8565/17799/6199 8566/17801/6200 8561/17787/6200 +f 8549/17768/6179 8554/17777/6178 8555/17778/6184 8565/17800/6184 +f 8552/17775/6183 8551/17773/6183 8526/17718/6183 8525/17716/6183 +f 8550/17771/6202 8549/17769/6202 8565/17799/6199 8558/17783/6198 +f 8560/17786/6275 8557/17782/6275 8559/17785/6276 8520/17704/6277 +f 8567/17804/6207 8524/17713/6208 8523/17711/6207 8564/17797/6208 +f 8530/17728/6207 8567/17804/6207 8564/17797/6208 8568/17806/6208 +f 8529/17726/6207 8563/17794/6207 8567/17805/6207 8530/17729/6207 +f 8563/17794/6207 8569/17808/6208 8524/17714/6208 8567/17805/6207 +f 8570/17810/6209 8528/17722/6210 8527/17719/6210 8522/17708/6211 +f 8562/17790/6209 8570/17810/6209 8522/17708/6211 8521/17705/6211 +f 8561/17788/6209 8566/17802/6209 8570/17811/6209 8562/17791/6209 +f 8566/17802/6209 8571/17812/6209 8528/17723/6210 8570/17811/6209 +f 8531/17732/6212 8532/17733/6212 8568/17807/6212 8564/17798/6212 +f 8565/17800/6184 8555/17778/6184 8571/17813/6213 8566/17803/6213 +f 8513/17692/6214 8512/17690/6214 8569/17809/6214 8563/17795/6214 +f 8520/17704/6277 8559/17785/6276 8562/17792/6278 8521/17706/6278 +f 8532/17733/6216 8516/17697/6216 8530/17730/6216 8568/17807/6216 +f 8555/17778/6187 8525/17717/6186 8528/17724/6217 8571/17813/6217 +f 8512/17690/6218 8511/17689/6218 8524/17715/6218 8569/17809/6218 +f 8526/17718/6190 8519/17703/6189 8522/17709/6219 8527/17720/6219 +f 8316/17334/6063 8315/17331/6062 8578/17824/6279 8580/17829/6280 +f 8580/17829/6280 8578/17824/6279 8579/17826/6076 8581/17831/6075 +f 8306/17312/6068 8321/17344/6067 8574/17816/6281 8576/17821/6282 +f 8576/17821/6282 8574/17816/6281 8575/17818/6072 8577/17823/6071 +f 8326/17358/6065 8573/17815/6065 8578/17825/6065 8315/17332/6065 +f 8573/17815/6065 8572/17814/6065 8579/17827/6065 8578/17825/6065 +f 8321/17345/6065 8320/17343/6065 8572/17814/6065 8574/17817/6065 +f 8574/17817/6065 8572/17814/6065 8573/17815/6065 8575/17819/6065 +o Chair.023 +v -8.779792 0.806663 4.441554 +v -8.779792 0.835619 4.441554 +v -8.793036 0.835619 4.393734 +v -8.900323 0.835619 4.006367 +v -8.913567 0.835619 3.958549 +v -8.913567 0.806663 3.958549 +v -8.900323 0.806663 4.006367 +v -8.793036 0.806663 4.393734 +v -8.542890 0.835619 3.855885 +v -8.542890 0.806663 3.855885 +v -8.542890 0.777705 3.855885 +v -8.530713 0.777705 3.899849 +v -8.900323 0.777705 4.006367 +v -8.913567 0.777705 3.958549 +v -8.409115 0.806663 4.338889 +v -8.409115 0.835619 4.338889 +v -8.421291 0.806663 4.294925 +v -8.421291 0.835619 4.294925 +v -8.409115 0.777705 4.338889 +v -8.421291 0.777705 4.294925 +v -8.779792 0.777705 4.441554 +v -8.793036 0.777705 4.393734 +v -8.530713 0.806663 3.899849 +v -8.530713 0.835619 3.899849 +v -8.729431 0.851736 3.905299 +v -8.730989 0.862848 3.899670 +v -8.857319 0.862848 3.934659 +v -8.855760 0.851736 3.940288 +v -8.855807 0.835669 3.940117 +v -8.886982 0.851517 3.948935 +v -8.884510 0.836313 3.948066 +v -8.734687 0.835524 3.886320 +v -8.734640 0.851591 3.886490 +v -8.608312 0.851591 3.851501 +v -8.608359 0.835524 3.851332 +v -8.606819 0.863200 3.856891 +v -8.576075 0.854415 3.848376 +v -8.579820 0.843776 3.843610 +v -8.730970 0.824060 3.899740 +v -8.733129 0.824409 3.891949 +v -8.606800 0.824409 3.856961 +v -8.604642 0.824060 3.864752 +v -8.733148 0.863200 3.891879 +v -8.604662 0.862848 3.864681 +v -8.860970 0.851591 3.921479 +v -8.859477 0.863200 3.926868 +v -8.729478 0.835669 3.905128 +v -8.603149 0.835669 3.870140 +v -8.857300 0.824060 3.934729 +v -8.859457 0.824409 3.926938 +v -8.582983 0.829050 3.844304 +v -8.583580 0.818864 3.850530 +v -8.573985 0.854095 3.856185 +v -8.581491 0.818544 3.858340 +v -8.577746 0.829183 3.863104 +v -8.861016 0.835524 3.921309 +v -8.892169 0.851380 3.930120 +v -8.892496 0.862365 3.936013 +v -8.884183 0.825328 3.942174 +v -8.886395 0.825660 3.934399 +v -8.889697 0.836176 3.929252 +v -8.603103 0.851736 3.870311 +v -8.911773 0.817783 3.955617 +v -8.909820 0.808601 3.949275 +v -8.912081 0.808879 3.941513 +v -8.916938 0.817668 3.936797 +v -8.921659 0.830376 3.938287 +v -8.890284 0.862033 3.943788 +v -8.939815 0.781988 3.943133 +v -8.946272 0.790834 3.945104 +v -8.916492 0.830491 3.957108 +v -8.941121 0.790914 3.963930 +v -8.934665 0.782070 3.961957 +v -8.923611 0.839556 3.944630 +v -8.949478 0.797226 3.951795 +v -8.921350 0.839280 3.952393 +v -8.947179 0.797033 3.959546 +v -8.958222 0.737040 3.968666 +v -8.950727 0.733008 3.966407 +v -8.963364 0.737005 3.949838 +v -8.967319 0.739918 3.956736 +v -8.964997 0.739831 3.964481 +v -8.931458 0.775678 3.955268 +v -8.933757 0.775870 3.947516 +v -8.982376 0.668358 3.960907 +v -8.980053 0.668281 3.968651 +v -8.946772 0.730092 3.959509 +v -8.965683 0.662308 3.970548 +v -8.961684 0.659756 3.963639 +v -8.955870 0.732970 3.947580 +v -8.949094 0.730182 3.951764 +v -8.964007 0.659834 3.955895 +v -8.970823 0.662276 3.951722 +v -8.507492 0.675525 3.843830 +v -8.515277 0.673643 3.845802 +v -8.475663 -0.024782 3.834832 +v -8.467878 -0.022901 3.832858 +v -8.978376 0.665806 3.953996 +v -9.061914 -0.015949 3.977133 +v -9.065914 -0.013399 3.984043 +v -8.505689 0.676869 3.828881 +v -8.503699 0.676827 3.836719 +v -8.464086 -0.021600 3.825747 +v -8.466075 -0.021558 3.817909 +v -9.049221 -0.019449 3.993686 +v -9.045222 -0.021999 3.986776 +v -8.973236 0.665838 3.972824 +v -8.546253 0.826920 3.840116 +v -8.551873 0.819027 3.835870 +v -8.574582 0.843909 3.862411 +v -8.546613 0.819125 3.854665 +v -8.544220 0.826681 3.847941 +v -8.560027 0.800547 3.844007 +v -8.557993 0.800309 3.851832 +v -8.552373 0.808201 3.856077 +v -8.525700 0.782513 3.848873 +v -8.522171 0.786178 3.841835 +v -8.541905 0.773503 3.838988 +v -8.539908 0.773388 3.846823 +v -8.533102 0.777216 3.850739 +v -8.557634 0.808102 3.837283 +v -8.525368 0.718911 3.842795 +v -8.518376 0.721393 3.846661 +v -8.538378 0.777168 3.831949 +v -8.523654 0.721363 3.827872 +v -8.527358 0.718984 3.834959 +v -8.524168 0.786293 3.833999 +v -8.507013 0.727210 3.837636 +v -8.509006 0.727284 3.829800 +v -8.530975 0.782465 3.830082 +v -8.515996 0.724801 3.825933 +v -8.512772 0.675507 3.825040 +v -8.520555 0.673627 3.827013 +v -8.510718 0.724831 3.844723 +v -8.522360 0.672284 3.841962 +v -8.524348 0.672325 3.834125 +v -8.484734 -0.026101 3.823153 +v -8.482745 -0.026141 3.830991 +v -9.056774 -0.015917 3.995961 +v -8.480942 -0.024800 3.816042 +v -9.054361 -0.019481 3.974859 +v -9.055568 -0.017698 3.985409 +v -9.047545 -0.021922 3.979032 +v -9.063591 -0.013475 3.991788 +v -8.474410 -0.023850 3.824450 +v -8.473158 -0.022917 3.814069 +v -8.589689 0.851736 4.409848 +v -8.591248 0.862848 4.404219 +v -8.717577 0.862848 4.439207 +v -8.716018 0.851736 4.444836 +v -8.716065 0.835669 4.444667 +v -8.747240 0.851517 4.453484 +v -8.744767 0.836313 4.452616 +v -8.467058 0.824409 4.361510 +v -8.468617 0.835524 4.355881 +v -8.443241 0.829050 4.348853 +v -8.443838 0.818864 4.355079 +v -8.591228 0.824060 4.404289 +v -8.593387 0.824409 4.396498 +v -8.464900 0.824060 4.369300 +v -8.593406 0.863200 4.396428 +v -8.464920 0.862848 4.369230 +v -8.467077 0.863200 4.361440 +v -8.594898 0.851591 4.391039 +v -8.468570 0.851591 4.356050 +v -8.721228 0.851591 4.426027 +v -8.719735 0.863200 4.431417 +v -8.589736 0.835669 4.409678 +v -8.463408 0.835669 4.374690 +v -8.717558 0.824060 4.439278 +v -8.719715 0.824409 4.431487 +v -8.434243 0.854095 4.360734 +v -8.436333 0.854415 4.352924 +v -8.441749 0.818544 4.362888 +v -8.438004 0.829183 4.367654 +v -8.463361 0.851736 4.374859 +v -8.434840 0.843909 4.366960 +v -8.594945 0.835524 4.390869 +v -8.721274 0.835524 4.425858 +v -8.752427 0.851380 4.434669 +v -8.752754 0.862365 4.440562 +v -8.744441 0.825328 4.446723 +v -8.746654 0.825660 4.438948 +v -8.749955 0.836176 4.433801 +v -8.750542 0.862033 4.448337 +v -8.783870 0.839556 4.449180 +v -8.781608 0.839280 4.456941 +v -8.772030 0.817783 4.460167 +v -8.770079 0.808601 4.453824 +v -8.772340 0.808879 4.446062 +v -8.777196 0.817668 4.441346 +v -8.794015 0.775870 4.452065 +v -8.800073 0.781988 4.447682 +v -8.791716 0.775678 4.459817 +v -8.781917 0.830376 4.442836 +v -8.806530 0.790834 4.449653 +v -8.776751 0.830491 4.461657 +v -8.801379 0.790914 4.468478 +v -8.794923 0.782070 4.466507 +v -8.818480 0.737040 4.473215 +v -8.810986 0.733008 4.470956 +v -8.809737 0.797226 4.456344 +v -8.823622 0.737005 4.454387 +v -8.827579 0.739918 4.461285 +v -8.807437 0.797033 4.464095 +v -8.825255 0.739831 4.469030 +v -8.838635 0.665806 4.458545 +v -8.842634 0.668358 4.465455 +v -8.840311 0.668281 4.473200 +v -8.833494 0.665838 4.477373 +v -8.807030 0.730092 4.464058 +v -8.825941 0.662308 4.475098 +v -8.821942 0.659756 4.468188 +v -8.816128 0.732970 4.452128 +v -8.809352 0.730182 4.456313 +v -8.367750 0.675525 4.348379 +v -8.375535 0.673643 4.350352 +v -8.335921 -0.024782 4.339380 +v -8.328136 -0.022901 4.337407 +v -8.922173 -0.015949 4.481682 +v -8.926172 -0.013399 4.488592 +v -8.365947 0.676869 4.333430 +v -8.363957 0.676827 4.341267 +v -8.324344 -0.021600 4.330296 +v -8.326333 -0.021558 4.322458 +v -8.909479 -0.019449 4.498235 +v -8.905480 -0.021999 4.491325 +v -8.831081 0.662276 4.456270 +v -8.824265 0.659834 4.460443 +v -8.406871 0.819125 4.359214 +v -8.404478 0.826681 4.352490 +v -8.420285 0.800547 4.348555 +v -8.418251 0.800309 4.356380 +v -8.412631 0.808201 4.360626 +v -8.440078 0.843776 4.348159 +v -8.393360 0.777216 4.355289 +v -8.385958 0.782513 4.353421 +v -8.400167 0.773388 4.351372 +v -8.417892 0.808102 4.341832 +v -8.398636 0.777168 4.336498 +v -8.402164 0.773503 4.343536 +v -8.406511 0.826920 4.344665 +v -8.382429 0.786178 4.346383 +v -8.384426 0.786293 4.338548 +v -8.412131 0.819027 4.340419 +v -8.383912 0.721363 4.332420 +v -8.387617 0.718984 4.339508 +v -8.367271 0.727210 4.342185 +v -8.369264 0.727284 4.334349 +v -8.391233 0.782465 4.334631 +v -8.376254 0.724801 4.330482 +v -8.373030 0.675507 4.329589 +v -8.370976 0.724831 4.349272 +v -8.385625 0.718911 4.347344 +v -8.384606 0.672325 4.338674 +v -8.382617 0.672284 4.346511 +v -8.378634 0.721393 4.351211 +v -8.344992 -0.026101 4.327702 +v -8.343003 -0.026141 4.335539 +v -8.917032 -0.015917 4.500510 +v -8.914619 -0.019481 4.479407 +v -8.380814 0.673627 4.331563 +v -8.341200 -0.024800 4.320590 +v -8.915826 -0.017698 4.489959 +v -8.907804 -0.021922 4.483581 +v -8.923849 -0.013475 4.496337 +v -8.334668 -0.023850 4.329000 +v -8.333416 -0.022917 4.318617 +v -8.457765 0.769502 4.163233 +v -8.494239 0.769502 4.031541 +v -8.457765 0.798458 4.163233 +v -8.494239 0.798458 4.031541 +v -8.828798 0.798458 4.264612 +v -8.864561 0.798458 4.135490 +v -8.494239 0.740544 4.031541 +v -8.457765 0.740544 4.163233 +v -8.864561 0.740544 4.135490 +v -8.828798 0.740544 4.264612 +vn 0.5109 -0.0001 0.8596 +vn -0.3484 -1.4054 0.6153 +vn -0.9637 -0.0000 0.2669 +vn -0.6153 -1.4054 -0.3484 +vn -0.4992 1.3250 -0.5535 +vn -0.2669 -0.0000 -0.9637 +vn -0.0000 -1.9875 -0.0000 +vn -0.0186 -1.9829 -0.0655 +vn -0.0189 -1.9828 -0.0664 +vn 0.2669 -0.0000 0.9637 +vn 0.9637 -0.0000 -0.2669 +vn -0.0000 1.9875 -0.0000 +vn -0.0177 1.9829 -0.0658 +vn -0.0180 1.9828 -0.0667 +vn 0.0189 1.9828 0.0664 +vn 0.0186 1.9829 0.0655 +vn 0.0187 1.9828 0.0658 +vn 0.0188 1.9828 0.0661 +vn 0.0180 -1.9828 0.0667 +vn 0.0177 -1.9829 0.0658 +vn 0.0178 -1.9828 0.0661 +vn 0.0179 -1.9828 0.0664 +vn 0.1846 1.4358 0.6664 +vn 0.1806 1.4446 0.6626 +vn 0.2668 -0.0447 0.9635 +vn 0.2671 -0.0427 0.9634 +vn 0.2731 -0.0405 0.9618 +vn -0.2669 0.0433 -0.9635 +vn -0.2655 0.0436 -0.9639 +vn -0.2654 0.0436 -0.9639 +vn -0.0997 1.3788 -0.7133 +vn -0.0058 -1.9870 -0.0210 +vn 0.0058 1.9870 0.0211 +vn -0.1928 1.3745 -0.6961 +vn -0.1943 1.3837 -0.6910 +vn -0.1943 1.3837 -0.6911 +vn -0.0001 1.9870 0.0224 +vn 0.1928 -1.3743 0.6962 +vn -0.2660 -1.4424 -0.6345 +vn 0.1378 1.9683 -0.0161 +vn 0.1102 -1.3823 0.7100 +vn -0.1846 -1.4356 -0.6665 +vn -0.2668 0.0439 -0.9635 +vn -0.1957 1.3929 -0.6859 +vn -0.0275 -1.9866 -0.0143 +vn -0.2734 0.0425 -0.9617 +vn -0.2673 0.0445 -0.9634 +vn 0.3981 -1.3282 0.6284 +vn 0.0356 -1.3856 -0.7160 +vn 0.2851 -1.8944 -0.1009 +vn -0.2797 0.0365 -0.9599 +vn -0.2743 0.0426 -0.9614 +vn -0.0060 1.9869 0.0238 +vn -0.1934 -1.4560 -0.6527 +vn 0.1766 1.4534 0.6588 +vn 0.1787 -1.3956 0.6892 +vn -0.2849 0.0263 -0.9585 +vn -0.2808 0.0352 -0.9596 +vn 0.2794 -0.0348 0.9600 +vn 0.2740 -0.0406 0.9615 +vn 0.2800 -0.0341 0.9598 +vn 0.2843 -0.0247 0.9587 +vn -0.6079 1.0950 -0.5718 +vn -0.2535 1.1425 0.7780 +vn -0.3169 1.8724 0.1098 +vn -0.0510 1.3716 0.7219 +vn -0.4138 1.3146 -0.6255 +vn 0.2846 -0.0237 0.9586 +vn 0.2859 -0.0178 0.9582 +vn -0.7572 0.7577 -0.5305 +vn -0.4093 0.7907 0.8211 +vn -0.8050 1.0738 0.2450 +vn 0.5665 -1.5988 -0.1789 +vn 0.2411 -1.1663 -0.7730 +vn 0.5952 -1.1180 0.5739 +vn -0.5931 1.5567 0.1863 +vn -0.8781 0.7910 0.2655 +vn 0.8070 -0.5544 0.5206 +vn 0.4595 -0.5788 -0.8391 +vn 0.8771 -0.7960 -0.2652 +vn -0.2865 0.0182 -0.9580 +vn -0.2852 0.0243 -0.9584 +vn 0.7865 -1.1313 -0.2398 +vn 0.4013 -0.8218 -0.8173 +vn 0.7487 -0.7878 0.5313 +vn 0.2459 -0.0054 0.9693 +vn 0.2460 -0.0050 0.9693 +vn -0.8390 0.3368 -0.5171 +vn 0.9628 0.2309 -0.2440 +vn 0.8390 -0.3368 0.5170 +vn -0.4600 0.5761 0.8393 +vn -0.8074 0.5519 -0.5205 +vn 0.2855 -0.0157 0.9583 +vn 0.2864 -0.0111 0.9581 +vn -0.2873 0.0107 -0.9578 +vn -0.2868 0.0138 -0.9580 +vn 0.0847 1.2863 -0.7576 +vn 0.4656 1.3411 0.5727 +vn -0.3452 -1.8595 0.0742 +vn 0.2639 -0.0429 0.9643 +vn 0.2589 -0.0413 0.9657 +vn 0.2532 -0.0363 0.9672 +vn 0.2580 -0.0407 0.9659 +vn 0.2770 1.4388 0.6318 +vn -0.2637 0.0451 -0.9643 +vn -0.2586 0.0434 -0.9657 +vn -0.1164 -1.9739 0.0102 +vn 0.2641 -0.0442 0.9642 +vn 0.6499 1.1189 0.5106 +vn -0.5696 -1.6105 0.1374 +vn 0.2486 -0.0223 0.9686 +vn 0.2521 -0.0345 0.9675 +vn -0.2366 -1.1530 0.7794 +vn -0.2578 0.0418 -0.9660 +vn -0.2528 0.0372 -0.9673 +vn 0.3986 1.8142 -0.0887 +vn -0.4383 -1.3706 -0.5765 +vn -0.0602 -1.3151 0.7474 +vn -0.4026 -0.6691 0.8512 +vn -0.8005 -0.6981 -0.4856 +vn 0.8570 0.9305 -0.2153 +vn -0.2482 0.0227 -0.9687 +vn -0.2518 0.0348 -0.9676 +vn -0.2476 0.0207 -0.9688 +vn -0.2458 0.0063 -0.9693 +vn 0.2675 1.0743 -0.7977 +vn 0.6466 1.4834 -0.1579 +vn -0.6124 -1.1991 -0.5109 +vn 0.9605 0.2671 -0.2435 +vn -0.2460 0.0054 -0.9693 +vn 0.4684 0.1845 -0.8786 +vn 0.4688 0.1720 -0.8791 +vn 0.4688 0.1721 -0.8791 +vn 0.8748 0.1927 0.4746 +vn 0.8754 0.1798 0.4748 +vn 0.8755 0.1797 0.4748 +vn 0.2468 -0.0061 0.9691 +vn 0.2486 -0.0199 0.9686 +vn -0.8498 -0.9581 0.2134 +vn 0.8038 0.6831 0.4856 +vn 0.4053 0.6546 -0.8528 +vn -0.9628 -0.2309 0.2440 +vn 0.2873 -0.0106 0.9578 +vn -0.8755 -0.1785 -0.4747 +vn -0.8755 -0.1784 -0.4747 +vn -0.8760 -0.1668 -0.4749 +vn -0.2872 0.0106 -0.9579 +vn -0.8750 -0.1901 -0.4745 +vn -0.4685 -0.1820 0.8787 +vn -0.4688 -0.1709 0.8791 +vn -0.4688 -0.1708 0.8791 +vn -0.9609 -0.2621 0.2434 +vn -0.2118 -1.9389 0.0587 +vn -0.2118 -1.9389 0.0586 +vn 0.1129 -1.9738 -0.0313 +vn 0.1128 -1.9738 -0.0313 +vn 0.1129 -1.9738 -0.0312 +vn 0.4905 -0.3518 -0.8533 +vn -0.2460 0.0050 -0.9693 +vn -0.4905 0.3518 0.8533 +vn -0.4691 -0.1597 0.8795 +vn 0.9283 -0.4868 -0.2797 +vn 0.4691 0.1597 -0.8795 +vn -0.9283 0.4868 0.2797 +vn 0.8760 0.1668 0.4749 +vn 0.2668 -0.0439 0.9635 +vn 0.2672 -0.0446 0.9634 +vn 0.2735 -0.0425 0.9616 +vn -0.1928 1.3744 -0.6961 +vn 0.1928 -1.3745 0.6961 +vn 0.1101 -1.3824 0.7100 +vn 0.2655 -0.0436 0.9639 +vn 0.2654 -0.0436 0.9639 +vn 0.2587 -0.0433 0.9657 +vn 0.2635 -0.0453 0.9644 +vn -0.1846 -1.4357 -0.6665 +vn -0.2668 0.0445 -0.9635 +vn -0.2733 0.0426 -0.9617 +vn -0.2672 0.0446 -0.9634 +vn 0.2669 -0.0433 0.9635 +vn 0.3981 -1.3283 0.6284 +vn 0.1766 1.4534 0.6589 +vn 0.1787 -1.3957 0.6891 +vn 0.5665 -1.5987 -0.1788 +vn -0.2798 0.0364 -0.9599 +vn 0.2798 -0.0364 0.9599 +vn 0.2743 -0.0426 0.9614 +vn 0.2807 -0.0355 0.9596 +vn 0.2850 -0.0261 0.9584 +vn 0.2852 -0.0243 0.9584 +vn 0.2864 -0.0186 0.9581 +vn 0.5952 -1.1181 0.5738 +vn -0.6079 1.0949 -0.5718 +vn -0.8075 0.5519 -0.5205 +vn 0.8070 -0.5545 0.5205 +vn -0.2866 0.0181 -0.9580 +vn -0.2852 0.0244 -0.9584 +vn 0.2460 -0.0054 0.9693 +vn -0.8390 0.3368 -0.5170 +vn 0.2868 -0.0138 0.9580 +vn 0.2876 -0.0116 0.9577 +vn -0.2873 0.0109 -0.9578 +vn 0.2528 -0.0372 0.9673 +vn 0.2578 -0.0418 0.9660 +vn -0.0602 -1.3152 0.7473 +vn 0.2770 1.4388 0.6319 +vn -0.2641 0.0440 -0.9642 +vn -0.2586 0.0433 -0.9657 +vn 0.2481 -0.0227 0.9687 +vn 0.2518 -0.0349 0.9676 +vn -0.2366 -1.1531 0.7793 +vn 0.6499 1.1190 0.5106 +vn -0.9609 -0.2621 0.2436 +vn 0.2476 -0.0207 0.9688 +vn 0.2458 -0.0064 0.9693 +vn -0.4027 -0.6692 0.8512 +vn -0.8497 -0.9581 0.2134 +vn 0.2872 -0.0106 0.9579 +vn -0.4686 -0.1820 0.8786 +vn -0.4689 -0.1709 0.8790 +vn -0.4689 -0.1708 0.8790 +vn -0.4692 -0.1597 0.8794 +vn -0.0188 -1.9828 -0.0661 +vn -0.0187 -1.9828 -0.0658 +vn -0.0179 1.9828 -0.0664 +vn -0.0178 1.9828 -0.0661 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.973130 0.033128 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.677629 0.482142 +vt 0.409642 -0.009898 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.669677 0.481452 +vt 0.240570 0.058726 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +vt 0.296927 -0.019617 +vt 0.353285 -0.019617 +vt 0.470812 0.481452 +vt 0.296927 0.014692 +vt 0.271947 0.481452 +vt 0.353285 0.014692 +vt -0.849112 0.025953 +vt 0.468872 0.000137 +vt -0.911121 0.025955 +vt 0.273887 0.000137 +vt 0.475153 0.482142 +vt 0.353285 -0.053929 +vt 0.272677 0.482143 +vt 0.296927 -0.053929 +vt -0.911121 -0.024667 +vt 0.473178 0.006015 +vt -0.849112 -0.024667 +vt 0.274652 0.006015 +s 1 +usemtl CabnetDoors +f 8582/17833/6283 8583/17835/6284 8584/17838/6285 8854/18347/6285 8855/18349/6285 8585/17840/6285 8586/17842/6286 8587/17846/6287 8588/17847/6285 8589/17848/6285 +f 8587/17845/6287 8586/17843/6286 8590/17850/6288 8591/17853/6288 +f 8592/17855/6289 8593/17858/6290 8594/17861/6291 8595/17862/6289 +f 8596/17866/6292 8597/17867/6292 8583/17836/6284 8582/17832/6283 +f 8597/17868/6293 8596/17865/6293 8598/17870/6293 8599/17872/6293 +f 8600/17873/6293 8601/17876/6293 8598/17870/6293 8596/17865/6293 +f 8600/17874/6292 8596/17866/6292 8582/17832/6283 8602/17878/6292 +f 8595/17863/6288 8587/17845/6287 8591/17853/6288 8592/17856/6288 +f 8602/17879/6285 8582/17833/6285 8589/17848/6285 8588/17847/6285 8587/17846/6285 8595/17864/6285 8594/17860/6285 8858/18355/6285 8859/18357/6285 8603/17882/6285 +f 8595/17864/6285 8594/17860/6285 8588/17847/6285 8587/17846/6285 +f 8589/17849/6293 8582/17834/6293 8602/17880/6293 8603/17883/6293 +f 8853/18346/6293 8851/18342/6293 8604/17885/6293 8605/17886/6293 +f 8591/17854/6293 8590/17851/6293 8605/17886/6293 8604/17885/6293 +f 8850/18341/6293 8598/17870/6293 8601/17876/6293 8857/18354/6293 +f 8593/17859/6293 8592/17857/6293 8591/17854/6293 8604/17885/6293 +f 8597/17869/6294 8599/17871/6295 8584/17839/6296 8583/17837/6294 +f 8585/17841/6297 8605/17887/6298 8590/17852/6294 8586/17844/6294 +f 8855/18350/6299 8853/18345/6300 8605/17887/6298 8585/17841/6297 +f 8603/17884/6301 8601/17877/6302 8600/17875/6289 8602/17881/6289 +f 8859/18358/6303 8857/18353/6304 8601/17877/6302 8603/17884/6301 +f 8606/17888/6305 8607/17889/6305 8608/17890/6306 8609/17892/6306 +f 8610/17893/6307 8609/17891/6307 8611/17896/6308 8612/17898/6309 +f 8613/17900/6310 8614/17901/6310 8615/17902/6311 8616/17904/6312 +f 8615/17902/6313 8617/17905/6313 8618/17907/6313 8619/17909/6313 +f 8620/17911/6314 8621/17912/6314 8622/17913/6314 8623/17915/6314 +f 8624/17917/6315 8607/17889/6315 8625/17918/6315 8617/17906/6315 +f 8614/17901/6316 8624/17916/6316 8617/17905/6316 8615/17902/6316 +f 8626/17919/6317 8627/17920/6318 8624/17916/6316 8614/17901/6316 +f 8627/17921/6319 8608/17890/6319 8607/17889/6315 8624/17917/6315 +f 8628/17922/6320 8620/17910/6320 8623/17914/6320 8629/17923/6320 +f 8610/17894/6320 8630/17926/6320 8620/17910/6320 8628/17922/6320 +f 8630/17925/6314 8631/17927/6314 8621/17912/6314 8620/17911/6314 +f 8622/17913/6321 8616/17903/6321 8632/17929/6321 8633/17930/6321 +f 8617/17906/6322 8625/17918/6322 8634/17931/6322 8618/17908/6322 +f 8629/17923/6323 8623/17914/6323 8635/17933/6323 8636/17935/6323 +f 8621/17912/6324 8613/17899/6324 8616/17903/6324 8622/17913/6324 +f 8631/17927/6324 8637/17937/6324 8613/17899/6324 8621/17912/6324 +f 8637/17936/6325 8626/17919/6325 8614/17901/6310 8613/17900/6310 +f 8627/17920/6318 8626/17919/6317 8638/17938/6326 8639/17940/6326 +f 8631/17927/6327 8630/17925/6327 8640/17941/6327 8641/17943/6327 +f 8626/17919/6325 8637/17936/6325 8642/17944/6328 8638/17938/6329 +f 8643/17946/6305 8625/17918/6305 8607/17889/6305 8606/17888/6305 +f 8640/17942/6330 8612/17897/6330 8644/17949/6330 8645/17951/6330 +f 8642/17945/6331 8641/17943/6331 8646/17952/6331 8647/17954/6331 +f 8641/17943/6332 8640/17941/6332 8645/17950/6332 8646/17952/6332 +f 8638/17938/6329 8642/17944/6328 8647/17955/6333 8648/17956/6334 +f 8608/17890/6319 8627/17921/6319 8639/17939/6335 8649/17957/6335 +f 8637/17937/6336 8631/17927/6336 8641/17943/6336 8642/17945/6336 +f 8609/17892/6306 8608/17890/6306 8649/17957/6337 8611/17895/6337 +f 8630/17926/6338 8610/17894/6338 8612/17897/6338 8640/17942/6338 +f 8648/17956/6334 8647/17955/6333 8650/17958/6339 8651/17959/6340 +f 8644/17949/6341 8652/17960/6342 8653/17963/6343 8654/17964/6344 +f 8655/17965/6345 8648/17956/6345 8651/17959/6345 8656/17967/6345 +f 8652/17960/6346 8657/17970/6346 8658/17972/6346 8653/17963/6346 +f 8649/17957/6347 8639/17939/6347 8655/17966/6347 8657/17971/6347 +f 8611/17895/6348 8649/17957/6348 8657/17971/6348 8652/17961/6348 +f 8639/17940/6349 8638/17938/6349 8648/17956/6349 8655/17965/6349 +f 8612/17898/6309 8611/17896/6308 8652/17962/6342 8644/17948/6341 +f 8654/17964/6344 8653/17963/6343 8659/17976/6350 8660/17977/6351 +f 8656/17967/6352 8651/17959/6352 8661/17978/6352 8662/17980/6352 +f 8653/17963/6353 8658/17972/6353 8663/17981/6353 8659/17976/6353 +f 8658/17973/6354 8656/17968/6354 8662/17979/6354 8663/17982/6354 +f 8646/17952/6355 8645/17950/6355 8664/17983/6355 8665/17986/6355 +f 8647/17955/6356 8646/17953/6356 8665/17988/6356 8650/17958/6356 +f 8645/17951/6357 8644/17949/6357 8654/17964/6357 8664/17985/6357 +f 8657/17971/6358 8655/17966/6358 8656/17969/6358 8658/17974/6358 +f 8663/17982/6359 8662/17979/6359 8666/17990/6359 8667/17991/6359 +f 8668/17993/6360 8660/17977/6360 8669/17994/6360 8670/17995/6360 +f 8671/17997/6361 8672/17999/6361 8673/18001/6361 8674/18003/6361 +f 8672/17999/6362 8668/17992/6362 8670/17996/6362 8673/18001/6362 +f 8651/17959/6340 8650/17958/6339 8671/17998/6363 8661/17978/6364 +f 8665/17987/6365 8664/17984/6365 8668/17992/6365 8672/17999/6365 +f 8650/17958/6366 8665/17988/6366 8672/18000/6366 8671/17998/6366 +f 8664/17985/6367 8654/17964/6367 8660/17977/6367 8668/17993/6367 +f 8675/18004/6368 8676/18006/6368 8677/18008/6369 8678/18009/6369 +f 8666/17989/6370 8679/18012/6370 8680/18013/6370 8681/18015/6370 +f 8682/18018/6371 8683/18020/6371 8684/18022/6371 8685/18023/6371 +f 8670/17995/6372 8669/17994/6372 8686/18026/6372 8687/18028/6372 +f 8659/17975/6373 8663/17982/6373 8667/17991/6373 8688/18032/6373 +f 8662/17980/6374 8661/17978/6374 8679/18012/6374 8666/17989/6374 +f 8660/17977/6351 8659/17976/6350 8688/18031/6375 8669/17994/6376 +f 8661/17978/6364 8671/17998/6363 8674/18002/6377 8679/18012/6378 +f 8619/17909/6379 8618/17907/6379 8689/18033/6379 8690/18035/6379 +f 8634/17931/6380 8691/18036/6380 8692/18038/6380 8693/18042/6380 +f 8635/17932/6381 8633/17930/6381 8694/18043/6381 8695/18045/6381 +f 8691/18037/6382 8636/17934/6383 8696/18047/6384 8692/18039/6385 +f 8625/17918/6386 8643/17946/6386 8691/18036/6386 8634/17931/6386 +f 8616/17904/6312 8615/17902/6311 8619/17909/6387 8632/17928/6388 +f 8623/17915/6389 8622/17913/6389 8633/17930/6389 8635/17932/6389 +f 8643/17947/6390 8629/17924/6390 8636/17934/6383 8691/18037/6382 +f 8693/18041/6391 8692/18040/6391 8697/18049/6391 8698/18052/6391 +f 8695/18045/6392 8694/18043/6392 8699/18053/6392 8700/18056/6392 +f 8692/18040/6385 8696/18048/6384 8701/18059/6393 8697/18049/6394 +f 8696/18048/6395 8695/18046/6395 8700/18057/6395 8701/18059/6395 +f 8632/17928/6388 8619/17909/6387 8690/18035/6396 8702/18061/6397 +f 8618/17908/6398 8634/17931/6398 8693/18042/6398 8689/18034/6398 +f 8633/17930/6399 8632/17929/6399 8702/18060/6399 8694/18043/6399 +f 8636/17935/6400 8635/17933/6400 8695/18046/6400 8696/18048/6400 +f 8701/18059/6401 8700/18057/6401 8703/18062/6401 8704/18064/6401 +f 8699/18054/6402 8705/18065/6402 8706/18066/6402 8707/18068/6402 +f 8708/18070/6403 8698/18050/6403 8709/18073/6403 8710/18075/6403 +f 8705/18065/6404 8711/18077/6405 8712/18078/6406 8706/18066/6407 +f 8690/18035/6408 8689/18033/6408 8708/18072/6408 8711/18077/6408 +f 8702/18061/6397 8690/18035/6396 8711/18077/6405 8705/18065/6404 +f 8689/18034/6409 8693/18042/6409 8698/18051/6409 8708/18071/6409 +f 8694/18044/6410 8702/18061/6410 8705/18065/6410 8699/18054/6410 +f 8710/18075/6411 8709/18073/6411 8683/18020/6411 8682/18018/6411 +f 8706/18066/6407 8712/18078/6406 8713/18079/6412 8714/18081/6412 +f 8712/18078/6413 8710/18076/6413 8682/18019/6414 8713/18079/6415 +f 8709/18073/6416 8715/18082/6416 8675/18005/6417 8683/18020/6418 +f 8697/18049/6394 8701/18059/6393 8704/18064/6419 8715/18083/6420 +f 8700/18058/6421 8699/18055/6421 8707/18069/6421 8703/18063/6421 +f 8698/18052/6422 8697/18049/6422 8715/18083/6422 8709/18074/6422 +f 8711/18077/6423 8708/18072/6423 8710/18076/6423 8712/18078/6423 +f 8716/18084/6424 8717/18086/6424 8718/18087/6424 8719/18089/6424 +f 8669/17994/6376 8688/18031/6375 8720/18092/6425 8686/18026/6425 +f 8717/18086/6426 8714/18080/6427 8721/18095/6428 8718/18087/6428 +f 8679/18012/6378 8674/18002/6377 8722/18098/6429 8680/18013/6429 +f 8707/18069/6430 8706/18067/6430 8714/18080/6427 8717/18086/6426 +f 8704/18064/6431 8703/18062/6431 8716/18085/6432 8676/18006/6433 +f 8715/18083/6420 8704/18064/6419 8676/18006/6368 8675/18004/6368 +f 8703/18063/6434 8707/18069/6434 8717/18086/6434 8716/18084/6434 +f 8723/18101/6435 8681/18016/6435 8680/18014/6435 8722/18099/6435 +f 8687/18029/6436 8723/18101/6435 8722/18099/6435 8724/18102/6435 +f 8686/18027/6436 8720/18093/6436 8723/18101/6435 8687/18029/6436 +f 8720/18093/6436 8725/18104/6435 8681/18016/6435 8723/18101/6435 +f 8726/18106/6437 8685/18024/6438 8684/18021/6438 8678/18010/6438 +f 8719/18090/6439 8726/18106/6437 8678/18010/6438 8677/18007/6438 +f 8718/18088/6439 8721/18096/6439 8726/18106/6437 8719/18090/6439 +f 8721/18096/6439 8727/18107/6439 8685/18024/6438 8726/18106/6437 +f 8674/18003/6440 8673/18001/6440 8724/18103/6440 8722/18100/6440 +f 8714/18081/6412 8713/18079/6412 8727/18108/6441 8721/18097/6441 +f 8688/18032/6442 8667/17991/6442 8725/18105/6442 8720/18094/6442 +f 8676/18006/6433 8716/18085/6432 8719/18091/6443 8677/18008/6443 +f 8673/18001/6444 8670/17996/6444 8687/18030/6444 8724/18103/6444 +f 8713/18079/6415 8682/18019/6414 8685/18025/6445 8727/18108/6445 +f 8667/17991/6446 8666/17990/6446 8681/18017/6446 8725/18105/6446 +f 8683/18020/6418 8675/18005/6417 8678/18011/6447 8684/18022/6447 +f 8728/18110/6305 8729/18111/6305 8730/18112/6306 8731/18114/6306 +f 8732/18115/6448 8731/18113/6448 8733/18117/6449 8734/18118/6450 +f 8735/18119/6321 8736/18121/6321 8737/18124/6321 8738/18126/6321 +f 8739/18128/6314 8740/18129/6314 8735/18120/6314 8741/18132/6314 +f 8742/18134/6315 8729/18111/6315 8743/18135/6315 8744/18136/6315 +f 8745/18138/6451 8742/18133/6451 8744/18137/6451 8746/18139/6451 +f 8747/18140/6316 8748/18141/6316 8742/18133/6451 8745/18138/6451 +f 8748/18142/6319 8730/18112/6319 8729/18111/6315 8742/18134/6315 +f 8749/18143/6452 8739/18127/6452 8741/18131/6452 8750/18144/6452 +f 8732/18115/6452 8751/18146/6452 8739/18127/6452 8749/18143/6452 +f 8751/18145/6314 8752/18147/6314 8740/18129/6314 8739/18128/6314 +f 8744/18136/6322 8743/18135/6322 8753/18149/6322 8754/18151/6322 +f 8750/18144/6453 8741/18131/6453 8755/18152/6453 8756/18154/6453 +f 8757/18155/6454 8750/18144/6455 8756/18154/6456 8758/18157/6457 +f 8740/18130/6324 8759/18159/6324 8736/18121/6458 8735/18119/6458 +f 8752/18148/6324 8760/18161/6324 8759/18159/6324 8740/18130/6324 +f 8748/18141/6326 8747/18140/6326 8761/18162/6326 8762/18164/6326 +f 8752/18147/6327 8751/18145/6327 8763/18165/6327 8764/18167/6327 +f 8747/18140/6459 8760/18160/6459 8765/18170/6460 8761/18162/6461 +f 8749/18143/6462 8728/18109/6462 8731/18113/6448 8732/18115/6448 +f 8750/18144/6455 8757/18155/6454 8728/18109/6462 8749/18143/6462 +f 8757/18156/6305 8743/18135/6305 8729/18111/6305 8728/18110/6305 +f 8766/18171/6347 8762/18163/6347 8767/18173/6347 8768/18175/6347 +f 8763/18166/6463 8734/18118/6463 8769/18177/6463 8770/18179/6463 +f 8765/18169/6331 8764/18168/6331 8771/18180/6331 8772/18183/6331 +f 8764/18167/6332 8763/18165/6332 8770/18178/6332 8771/18182/6332 +f 8730/18112/6319 8748/18142/6319 8762/18163/6335 8766/18171/6335 +f 8760/18161/6336 8752/18148/6336 8764/18168/6336 8765/18169/6336 +f 8731/18114/6306 8730/18112/6306 8766/18171/6464 8733/18116/6464 +f 8751/18146/6465 8732/18115/6465 8734/18118/6465 8763/18166/6465 +f 8772/18184/6356 8771/18181/6356 8773/18188/6356 8774/18189/6356 +f 8771/18182/6466 8770/18178/6466 8775/18190/6466 8773/18186/6466 +f 8776/18194/6334 8772/18184/6467 8774/18189/6339 8777/18195/6340 +f 8769/18177/6468 8778/18197/6469 8779/18198/6470 8780/18199/6471 +f 8733/18116/6348 8766/18171/6348 8768/18175/6348 8778/18196/6348 +f 8762/18164/6349 8761/18162/6349 8776/18193/6349 8767/18172/6349 +f 8734/18118/6450 8733/18117/6449 8778/18197/6469 8769/18177/6468 +f 8761/18162/6461 8765/18170/6460 8772/18185/6467 8776/18193/6334 +f 8780/18199/6471 8779/18198/6470 8781/18201/6472 8782/18202/6473 +f 8783/18205/6352 8777/18195/6352 8784/18206/6352 8785/18207/6352 +f 8779/18198/6353 8786/18211/6353 8787/18212/6353 8781/18201/6353 +f 8786/18209/6354 8783/18203/6354 8785/18208/6354 8787/18213/6354 +f 8770/18179/6474 8769/18177/6474 8780/18199/6474 8775/18192/6474 +f 8768/18175/6358 8767/18173/6358 8783/18204/6358 8786/18210/6358 +f 8778/18197/6346 8768/18176/6346 8786/18211/6346 8779/18198/6346 +f 8767/18174/6475 8776/18194/6475 8777/18195/6475 8783/18205/6475 +f 8785/18207/6476 8784/18206/6476 8788/18214/6476 8789/18215/6476 +f 8781/18200/6373 8787/18213/6373 8790/18217/6373 8791/18219/6373 +f 8787/18213/6359 8785/18208/6359 8789/18216/6359 8790/18217/6359 +f 8792/18220/6477 8782/18202/6477 8793/18222/6477 8794/18223/6477 +f 8777/18195/6340 8774/18189/6339 8795/18225/6478 8784/18206/6479 +f 8773/18187/6365 8775/18191/6365 8792/18221/6365 8796/18228/6365 +f 8774/18189/6366 8773/18188/6366 8796/18227/6366 8795/18225/6366 +f 8775/18192/6367 8780/18199/6367 8782/18202/6367 8792/18220/6367 +f 8797/18229/6480 8798/18231/6480 8799/18233/6369 8800/18234/6369 +f 8789/18215/6481 8788/18214/6481 8801/18237/6481 8802/18239/6481 +f 8803/18243/6371 8804/18245/6371 8805/18247/6371 8806/18248/6371 +f 8794/18223/6372 8793/18222/6372 8807/18252/6372 8808/18254/6372 +f 8782/18202/6473 8781/18201/6472 8791/18218/6482 8793/18222/6483 +f 8784/18206/6479 8795/18225/6478 8809/18258/6484 8788/18214/6378 +f 8796/18228/6362 8792/18221/6362 8794/18224/6362 8810/18260/6362 +f 8795/18226/6361 8796/18228/6361 8810/18260/6361 8809/18259/6361 +f 8753/18149/6380 8758/18158/6380 8811/18261/6380 8812/18263/6380 +f 8755/18153/6381 8738/18125/6381 8813/18267/6381 8814/18269/6381 +f 8758/18157/6457 8756/18154/6456 8815/18270/6485 8811/18262/6486 +f 8756/18154/6487 8755/18152/6487 8814/18268/6487 8815/18270/6487 +f 8746/18139/6313 8744/18137/6313 8754/18150/6313 8816/18271/6313 +f 8743/18135/6488 8757/18156/6488 8758/18158/6488 8753/18149/6488 +f 8736/18122/6489 8746/18139/6489 8816/18271/6387 8737/18123/6490 +f 8741/18132/6389 8735/18120/6389 8738/18125/6389 8755/18153/6389 +f 8811/18262/6486 8815/18270/6485 8817/18272/6491 8818/18273/6492 +f 8815/18270/6493 8814/18268/6493 8819/18275/6493 8817/18272/6493 +f 8813/18265/6410 8820/18279/6410 8821/18280/6410 8822/18281/6410 +f 8823/18285/6409 8812/18263/6409 8824/18287/6409 8825/18290/6409 +f 8816/18271/6379 8754/18150/6379 8823/18284/6379 8826/18293/6379 +f 8737/18123/6490 8816/18271/6387 8826/18293/6396 8820/18277/6397 +f 8754/18151/6398 8753/18149/6398 8812/18263/6398 8823/18285/6398 +f 8738/18126/6399 8737/18124/6399 8820/18278/6399 8813/18266/6399 +f 8822/18281/6402 8821/18280/6402 8827/18295/6402 8828/18297/6402 +f 8825/18291/6403 8824/18288/6403 8829/18300/6403 8830/18302/6403 +f 8821/18280/6404 8831/18303/6405 8832/18304/6406 8827/18295/6407 +f 8831/18303/6423 8825/18292/6423 8830/18301/6423 8832/18304/6423 +f 8814/18269/6392 8813/18267/6392 8822/18282/6392 8819/18274/6392 +f 8812/18264/6494 8811/18262/6494 8818/18273/6494 8824/18289/6494 +f 8826/18294/6408 8823/18286/6408 8825/18292/6408 8831/18303/6408 +f 8820/18279/6397 8826/18294/6396 8831/18303/6405 8821/18280/6404 +f 8832/18304/6413 8830/18301/6413 8803/18244/6414 8833/18305/6415 +f 8829/18300/6416 8834/18306/6416 8797/18230/6417 8804/18245/6418 +f 8835/18308/6495 8828/18298/6495 8836/18310/6495 8837/18311/6495 +f 8834/18307/6496 8838/18313/6497 8798/18231/6480 8797/18229/6480 +f 8817/18272/6498 8819/18275/6498 8835/18309/6498 8838/18313/6498 +f 8818/18273/6492 8817/18272/6491 8838/18313/6497 8834/18307/6496 +f 8819/18276/6499 8822/18283/6499 8828/18298/6499 8835/18308/6499 +f 8824/18289/6422 8818/18273/6422 8834/18307/6422 8829/18299/6422 +f 8837/18311/6424 8836/18310/6424 8839/18314/6424 8840/18316/6424 +f 8793/18222/6483 8791/18218/6482 8841/18320/6500 8807/18252/6500 +f 8788/18214/6378 8809/18258/6484 8842/18323/6429 8801/18237/6429 +f 8836/18310/6426 8843/18326/6427 8844/18328/6428 8839/18314/6428 +f 8827/18295/6407 8832/18304/6406 8833/18305/6412 8843/18327/6412 +f 8830/18302/6411 8829/18300/6411 8804/18245/6411 8803/18243/6411 +f 8828/18298/6430 8827/18296/6430 8843/18326/6427 8836/18310/6426 +f 8838/18313/6501 8835/18309/6501 8837/18312/6502 8798/18231/6503 +f 8845/18331/6435 8802/18240/6435 8801/18238/6435 8842/18324/6435 +f 8808/18255/6436 8845/18331/6435 8842/18324/6435 8846/18333/6435 +f 8807/18253/6436 8841/18321/6436 8845/18332/6435 8808/18256/6436 +f 8841/18321/6436 8847/18335/6435 8802/18241/6435 8845/18332/6435 +f 8848/18337/6437 8806/18249/6438 8805/18246/6438 8800/18235/6438 +f 8840/18317/6439 8848/18337/6437 8800/18235/6438 8799/18232/6438 +f 8839/18315/6439 8844/18329/6439 8848/18338/6437 8840/18318/6439 +f 8844/18329/6439 8849/18339/6439 8806/18250/6438 8848/18338/6437 +f 8809/18259/6440 8810/18260/6440 8846/18334/6440 8842/18325/6440 +f 8843/18327/6412 8833/18305/6412 8849/18340/6441 8844/18330/6441 +f 8791/18219/6442 8790/18217/6442 8847/18336/6442 8841/18322/6442 +f 8798/18231/6503 8837/18312/6502 8840/18319/6504 8799/18233/6504 +f 8810/18260/6444 8794/18224/6444 8808/18257/6444 8846/18334/6444 +f 8833/18305/6415 8803/18244/6414 8806/18251/6445 8849/18340/6445 +f 8790/18217/6446 8789/18216/6446 8802/18242/6446 8847/18336/6446 +f 8804/18245/6418 8797/18230/6417 8800/18236/6447 8805/18247/6447 +f 8594/17861/6291 8593/17858/6290 8856/18351/6505 8858/18356/6506 +f 8858/18356/6506 8856/18351/6505 8857/18353/6304 8859/18358/6303 +f 8584/17839/6296 8599/17871/6295 8852/18343/6507 8854/18348/6508 +f 8854/18348/6508 8852/18343/6507 8853/18345/6300 8855/18350/6299 +f 8604/17885/6293 8851/18342/6293 8856/18352/6293 8593/17859/6293 +f 8851/18342/6293 8850/18341/6293 8857/18354/6293 8856/18352/6293 +f 8599/17872/6293 8598/17870/6293 8850/18341/6293 8852/18344/6293 +f 8852/18344/6293 8850/18341/6293 8851/18342/6293 8853/18346/6293 +o Chair.024 +v -10.926602 0.806663 4.463940 +v -10.926602 0.835619 4.463940 +v -10.893908 0.835619 4.426616 +v -10.629052 0.835619 4.124266 +v -10.596357 0.835619 4.086943 +v -10.596357 0.806663 4.086943 +v -10.629052 0.806663 4.124266 +v -10.893908 0.806663 4.426616 +v -10.885681 0.835619 3.833499 +v -10.885681 0.806663 3.833499 +v -10.885681 0.777705 3.833499 +v -10.915740 0.777705 3.867814 +v -10.629052 0.777705 4.124266 +v -10.596357 0.777705 4.086943 +v -11.215926 0.806663 4.210495 +v -11.215926 0.835619 4.210495 +v -11.185866 0.806663 4.176180 +v -11.185866 0.835619 4.176180 +v -11.215926 0.777705 4.210495 +v -11.185866 0.777705 4.176180 +v -10.926602 0.777705 4.463940 +v -10.893908 0.777705 4.426616 +v -10.915740 0.806663 3.867814 +v -10.915740 0.835619 3.867814 +v -10.739102 0.851736 3.959015 +v -10.735254 0.862848 3.954621 +v -10.636651 0.862848 4.040997 +v -10.640499 0.851736 4.045390 +v -10.640383 0.835669 4.045257 +v -10.616130 0.851517 4.066737 +v -10.617980 0.836313 4.064882 +v -10.726127 0.835524 3.944201 +v -10.726242 0.851591 3.944334 +v -10.824844 0.851591 3.857959 +v -10.824729 0.835524 3.857827 +v -10.828529 0.863200 3.862166 +v -10.852527 0.854415 3.841145 +v -10.847084 0.843776 3.838478 +v -10.735302 0.824060 3.954676 +v -10.729975 0.824409 3.948595 +v -10.828578 0.824409 3.862221 +v -10.833904 0.824060 3.868301 +v -10.729927 0.863200 3.948540 +v -10.833857 0.862848 3.868247 +v -10.627639 0.851591 4.030709 +v -10.631324 0.863200 4.034915 +v -10.738986 0.835669 3.958882 +v -10.837588 0.835669 3.872507 +v -10.636699 0.824060 4.041051 +v -10.631372 0.824409 4.034970 +v -10.844535 0.829050 3.840477 +v -10.846702 0.818864 3.846344 +v -10.857800 0.854095 3.847272 +v -10.851974 0.818544 3.852472 +v -10.857416 0.829183 3.855138 +v -10.627523 0.835524 4.030577 +v -10.603287 0.851380 4.052041 +v -10.605552 0.862365 4.057492 +v -10.615716 0.825328 4.059432 +v -10.610346 0.825660 4.053389 +v -10.605138 0.836176 4.050187 +v -10.837705 0.851736 3.872640 +v -10.596701 0.817783 4.083522 +v -10.595706 0.808601 4.076961 +v -10.590298 0.808879 4.070951 +v -10.583875 0.817668 4.068812 +v -10.580270 0.830376 4.072205 +v -10.610922 0.862033 4.063535 +v -10.566019 0.781988 4.084454 +v -10.561058 0.790834 4.089033 +v -10.593096 0.830491 4.086915 +v -10.573873 0.790914 4.103755 +v -10.578833 0.782070 4.099174 +v -10.581266 0.839556 4.078766 +v -10.561075 0.797226 4.096453 +v -10.586673 0.839280 4.084776 +v -10.566512 0.797034 4.102437 +v -10.560525 0.737041 4.115447 +v -10.566295 0.733008 4.110157 +v -10.547718 0.737005 4.100719 +v -10.547150 0.739918 4.108651 +v -10.552605 0.739831 4.114620 +v -10.578816 0.775678 4.091756 +v -10.573380 0.775871 4.085772 +v -10.535398 0.668358 4.118946 +v -10.540854 0.668281 4.124913 +v -10.566864 0.730092 4.102226 +v -10.554622 0.662308 4.120382 +v -10.555224 0.659756 4.112422 +v -10.553488 0.732970 4.095431 +v -10.561408 0.730182 4.096258 +v -10.549768 0.659834 4.106455 +v -10.541816 0.662276 4.105656 +v -10.912332 0.675525 3.807268 +v -10.906176 0.673643 3.812425 +v -10.937096 -0.024782 3.785341 +v -10.943251 -0.022902 3.780183 +v -10.536000 0.665806 4.110984 +v -10.470797 -0.015949 4.168102 +v -10.470194 -0.013399 4.176064 +v -10.907465 0.676869 3.793019 +v -10.912660 0.676827 3.799215 +v -10.943580 -0.021600 3.772130 +v -10.938384 -0.021558 3.765934 +v -10.489419 -0.019449 4.177501 +v -10.490021 -0.021999 4.169540 +v -10.548806 0.665838 4.125712 +v -10.875803 0.826920 3.820755 +v -10.868896 0.819027 3.819371 +v -10.859966 0.843909 3.853140 +v -10.881797 0.819125 3.834017 +v -10.881033 0.826681 3.826921 +v -10.865086 0.800547 3.830240 +v -10.870315 0.800309 3.836406 +v -10.877221 0.808201 3.837790 +v -10.898120 0.782513 3.819717 +v -10.898242 0.786178 3.811845 +v -10.879229 0.773503 3.817850 +v -10.884431 0.773388 3.824041 +v -10.892262 0.777216 3.824613 +v -10.864321 0.808102 3.823145 +v -10.895781 0.718910 3.814099 +v -10.903756 0.721393 3.814545 +v -10.879351 0.777168 3.809978 +v -10.890843 0.721363 3.799911 +v -10.890584 0.718984 3.807904 +v -10.893041 0.786293 3.805654 +v -10.910073 0.727210 3.801481 +v -10.904876 0.727284 3.795287 +v -10.885208 0.782465 3.805082 +v -10.896899 0.724801 3.794840 +v -10.899416 0.675507 3.792635 +v -10.893262 0.673627 3.797793 +v -10.909813 0.724831 3.809474 +v -10.898128 0.672283 3.812042 +v -10.892934 0.672325 3.805845 +v -10.923853 -0.026101 3.778760 +v -10.929048 -0.026141 3.784956 +v -10.483603 -0.015917 4.182830 +v -10.924181 -0.024800 3.770708 +v -10.476612 -0.019481 4.162773 +v -10.480107 -0.017698 4.172801 +v -10.484564 -0.021922 4.163572 +v -10.475650 -0.013475 4.182031 +v -10.933716 -0.023850 3.775445 +v -10.930336 -0.022917 3.765550 +v -11.084079 0.851736 4.352828 +v -11.080230 0.862848 4.348434 +v -10.981627 0.862848 4.434810 +v -10.985476 0.851736 4.439203 +v -10.985359 0.835669 4.439071 +v -10.961106 0.851517 4.460550 +v -10.962956 0.836313 4.458695 +v -11.173553 0.824409 4.256034 +v -11.169704 0.835524 4.251640 +v -11.189511 0.829050 4.234290 +v -11.191677 0.818864 4.240158 +v -11.080278 0.824060 4.348489 +v -11.074951 0.824409 4.342408 +v -11.178881 0.824060 4.262115 +v -11.074903 0.863200 4.342353 +v -11.178832 0.862848 4.262060 +v -11.173506 0.863200 4.255979 +v -11.071218 0.851591 4.338147 +v -11.169821 0.851591 4.251772 +v -10.972615 0.851591 4.424522 +v -10.976300 0.863200 4.428729 +v -11.083962 0.835669 4.352695 +v -11.182565 0.835669 4.266321 +v -10.981675 0.824060 4.434865 +v -10.976348 0.824409 4.428783 +v -11.202776 0.854095 4.241086 +v -11.197502 0.854415 4.234958 +v -11.196951 0.818544 4.246285 +v -11.202394 0.829183 4.248951 +v -11.182681 0.851736 4.266453 +v -11.204942 0.843909 4.246953 +v -11.071102 0.835524 4.338015 +v -10.972499 0.835524 4.424390 +v -10.948263 0.851380 4.445854 +v -10.950528 0.862365 4.451305 +v -10.960692 0.825328 4.453245 +v -10.955322 0.825660 4.447202 +v -10.950113 0.836176 4.444000 +v -10.955897 0.862033 4.457348 +v -10.926241 0.839556 4.472579 +v -10.931649 0.839280 4.478589 +v -10.941677 0.817783 4.477336 +v -10.940681 0.808601 4.470775 +v -10.935274 0.808879 4.464764 +v -10.928851 0.817668 4.462626 +v -10.918355 0.775871 4.479585 +v -10.910995 0.781988 4.478267 +v -10.923793 0.775678 4.485569 +v -10.925245 0.830376 4.466018 +v -10.906034 0.790834 4.482847 +v -10.938072 0.830491 4.480728 +v -10.918849 0.790914 4.497568 +v -10.923809 0.782070 4.492988 +v -10.905500 0.737041 4.509260 +v -10.911271 0.733008 4.503971 +v -10.906052 0.797226 4.490266 +v -10.892694 0.737005 4.494533 +v -10.892126 0.739918 4.502464 +v -10.911489 0.797034 4.496250 +v -10.897581 0.739831 4.508433 +v -10.880975 0.665806 4.504798 +v -10.880374 0.668358 4.512759 +v -10.885830 0.668281 4.518726 +v -10.893782 0.665838 4.519526 +v -10.911839 0.730092 4.496039 +v -10.899599 0.662308 4.514196 +v -10.900200 0.659756 4.506236 +v -10.898464 0.732970 4.489244 +v -10.906384 0.730182 4.490071 +v -11.257308 0.675525 4.201081 +v -11.251152 0.673643 4.206239 +v -11.282072 -0.024782 4.179154 +v -11.288227 -0.022902 4.173996 +v -10.815772 -0.015949 4.561915 +v -10.815170 -0.013399 4.569877 +v -11.252440 0.676869 4.186832 +v -11.257636 0.676827 4.193028 +v -11.288555 -0.021600 4.165944 +v -11.283360 -0.021558 4.159748 +v -10.834395 -0.019449 4.571314 +v -10.834996 -0.021999 4.563353 +v -10.886792 0.662276 4.499469 +v -10.894744 0.659834 4.500268 +v -11.226772 0.819125 4.227829 +v -11.226008 0.826681 4.220734 +v -11.210061 0.800547 4.224053 +v -11.215291 0.800309 4.230219 +v -11.222198 0.808201 4.231604 +v -11.192060 0.843776 4.232291 +v -11.237240 0.777216 4.218427 +v -11.243096 0.782513 4.213531 +v -11.229407 0.773388 4.217854 +v -11.209296 0.808102 4.216958 +v -11.224327 0.777168 4.203792 +v -11.224205 0.773503 4.211664 +v -11.220778 0.826920 4.214568 +v -11.243218 0.786178 4.205658 +v -11.238017 0.786293 4.199467 +v -11.213872 0.819027 4.213184 +v -11.235820 0.721363 4.193725 +v -11.235559 0.718984 4.201717 +v -11.255049 0.727210 4.195295 +v -11.249851 0.727284 4.189100 +v -11.230184 0.782465 4.198895 +v -11.241876 0.724801 4.188653 +v -11.244392 0.675507 4.186449 +v -11.254789 0.724831 4.203287 +v -11.240757 0.718910 4.207911 +v -11.237909 0.672325 4.199659 +v -11.243105 0.672283 4.205855 +v -11.248734 0.721393 4.208358 +v -11.268829 -0.026101 4.172574 +v -11.274024 -0.026141 4.178770 +v -10.828578 -0.015917 4.576643 +v -10.821589 -0.019481 4.556586 +v -11.238237 0.673627 4.191606 +v -11.269157 -0.024800 4.164521 +v -10.825084 -0.017698 4.566615 +v -10.829540 -0.021922 4.557385 +v -10.820626 -0.013475 4.575844 +v -11.278692 -0.023850 4.169259 +v -11.275311 -0.022917 4.159363 +v -11.095824 0.769502 4.073391 +v -11.005782 0.769502 3.970603 +v -11.095824 0.798458 4.073391 +v -11.005782 0.798458 3.970603 +v -10.805622 0.798458 4.325832 +v -10.717338 0.798458 4.225049 +v -11.005782 0.740544 3.970603 +v -11.095824 0.740544 4.073391 +v -10.717338 0.740544 4.225049 +v -10.805622 0.740544 4.325832 +vn -0.8335 -0.0001 0.5525 +vn 0.0466 -1.4054 0.7055 +vn 0.7522 -0.0000 0.6589 +vn 0.7055 -1.4054 -0.0466 +vn 0.6900 1.3250 -0.2818 +vn 0.6589 -0.0000 -0.7522 +vn -0.0000 -1.9875 -0.0000 +vn 0.0453 -1.9829 -0.0509 +vn 0.0459 -1.9828 -0.0516 +vn -0.6589 -0.0000 0.7522 +vn -0.7522 -0.0000 -0.6589 +vn -0.0000 1.9875 -0.0000 +vn 0.0445 1.9829 -0.0516 +vn 0.0451 1.9828 -0.0523 +vn -0.0459 1.9828 0.0516 +vn -0.0453 1.9829 0.0509 +vn -0.0455 1.9828 0.0512 +vn -0.0457 1.9828 0.0514 +vn -0.0451 -1.9828 0.0523 +vn -0.0445 -1.9829 0.0516 +vn -0.0447 -1.9828 0.0518 +vn -0.0449 -1.9828 0.0520 +vn -0.4556 1.4358 0.5201 +vn -0.4504 1.4446 0.5185 +vn -0.6587 -0.0447 0.7521 +vn -0.6590 -0.0427 0.7519 +vn -0.6637 -0.0405 0.7477 +vn 0.6588 0.0433 -0.7520 +vn 0.6577 0.0436 -0.7529 +vn 0.6577 0.0436 -0.7530 +vn 0.3996 1.3788 -0.5992 +vn 0.0143 -1.9870 -0.0164 +vn -0.0144 1.9870 0.0165 +vn 0.4760 1.3745 -0.5433 +vn 0.4751 1.3837 -0.5381 +vn 0.4751 1.3837 -0.5382 +vn -0.0097 1.9870 0.0202 +vn -0.4760 -1.3743 0.5434 +vn 0.5151 -1.4424 -0.4560 +vn -0.1172 1.9683 -0.0743 +vn -0.4076 -1.3823 0.5918 +vn 0.4557 -1.4356 -0.5202 +vn 0.6587 0.0439 -0.7521 +vn 0.4742 1.3929 -0.5329 +vn 0.0310 -1.9866 -0.0009 +vn 0.6639 0.0425 -0.7475 +vn 0.6591 0.0445 -0.7517 +vn -0.6315 -1.3282 0.3932 +vn 0.2789 -1.3856 -0.6604 +vn -0.2130 -1.8944 -0.2148 +vn 0.6688 0.0365 -0.7432 +vn 0.6646 0.0426 -0.7469 +vn -0.0049 1.9869 0.0240 +vn 0.4576 -1.4560 -0.5039 +vn -0.4451 1.4534 0.5168 +vn -0.4603 -1.3956 0.5432 +vn 0.6728 0.0263 -0.7397 +vn 0.6697 0.0352 -0.7424 +vn -0.6685 -0.0348 0.7435 +vn -0.6643 -0.0406 0.7472 +vn -0.6690 -0.0341 0.7430 +vn -0.6724 -0.0247 0.7401 +vn 0.7959 1.0950 -0.2511 +vn -0.1095 1.1425 0.8109 +vn 0.2378 1.8724 0.2365 +vn -0.2675 1.3716 0.6724 +vn 0.6444 1.3146 -0.3838 +vn -0.6726 -0.0237 0.7399 +vn -0.6737 -0.0178 0.7390 +vn 0.9124 0.7577 -0.1490 +vn 0.0121 0.7907 0.9174 +vn 0.6188 1.0738 0.5703 +vn -0.4327 -1.5988 -0.4071 +vn 0.1184 -1.1663 -0.8010 +vn -0.7853 -1.1180 0.2585 +vn 0.4534 1.5567 0.4254 +vn 0.6757 0.7910 0.6205 +vn -0.9530 -0.5544 0.1185 +vn -0.0496 -0.5788 -0.9554 +vn -0.6749 -0.7960 -0.6198 +vn 0.6741 0.0182 -0.7386 +vn 0.6731 0.0243 -0.7395 +vn -0.6043 -1.1313 -0.5575 +vn -0.0065 -0.8218 -0.9105 +vn -0.9052 -0.7878 0.1535 +vn -0.6424 -0.0054 0.7663 +vn -0.6425 -0.0050 0.7663 +vn 0.9803 0.3368 -0.1015 +vn -0.7613 0.2309 -0.6379 +vn -0.9803 -0.3368 0.1014 +vn 0.0499 0.5761 0.9558 +vn 0.9534 0.5519 -0.1182 +vn -0.6734 -0.0157 0.7393 +vn -0.6741 -0.0111 0.7386 +vn 0.6747 0.0107 -0.7381 +vn 0.6744 0.0138 -0.7384 +vn 0.2527 1.2863 -0.7192 +vn -0.6680 1.3411 0.3137 +vn 0.2787 -1.8595 0.2167 +vn -0.6564 -0.0429 0.7541 +vn -0.6526 -0.0413 0.7575 +vn -0.6481 -0.0363 0.7613 +vn -0.6519 -0.0407 0.7581 +vn -0.5239 1.4388 0.4489 +vn 0.6563 0.0451 -0.7542 +vn 0.6523 0.0434 -0.7577 +vn 0.1004 -1.9739 0.0597 +vn -0.6566 -0.0442 0.7539 +vn -0.8071 1.1189 0.1778 +vn 0.4534 -1.6105 0.3712 +vn -0.6445 -0.0223 0.7645 +vn -0.6473 -0.0345 0.7621 +vn -0.1253 -1.1530 0.8048 +vn 0.6517 0.0418 -0.7582 +vn 0.6478 0.0372 -0.7616 +vn -0.3206 1.8142 -0.2530 +vn 0.6451 -1.3706 -0.3290 +vn -0.2703 -1.3151 0.6993 +vn -0.0070 -0.6691 0.9416 +vn 0.9320 -0.6981 -0.0898 +vn -0.6785 0.9305 -0.5661 +vn 0.6442 0.0227 -0.7648 +vn 0.6470 0.0348 -0.7623 +vn 0.6438 0.0207 -0.7652 +vn 0.6424 0.0063 -0.7664 +vn 0.1055 1.0743 -0.8347 +vn -0.5138 1.4834 -0.4230 +vn 0.7735 -1.1991 -0.1943 +vn -0.7595 0.2671 -0.6364 +vn 0.6425 0.0054 -0.7663 +vn -0.0404 0.1845 -0.9949 +vn -0.0405 0.1720 -0.9954 +vn -0.0405 0.1721 -0.9954 +vn -0.9942 0.1927 0.0476 +vn -0.9948 0.1798 0.0475 +vn -0.9948 0.1797 0.0475 +vn -0.6432 -0.0061 0.7657 +vn -0.6445 -0.0199 0.7645 +vn 0.6728 -0.9581 0.5612 +vn -0.9349 0.6831 0.0884 +vn 0.0053 0.6546 -0.9442 +vn 0.7613 -0.2309 0.6379 +vn -0.6747 -0.0106 0.7381 +vn 0.9948 -0.1785 -0.0474 +vn 0.9948 -0.1784 -0.0474 +vn 0.9953 -0.1668 -0.0474 +vn 0.6746 0.0106 -0.7381 +vn 0.9943 -0.1901 -0.0475 +vn 0.0404 -0.1820 0.9950 +vn 0.0406 -0.1709 0.9955 +vn 0.0406 -0.1708 0.9955 +vn 0.7599 -0.2621 0.6366 +vn 0.1653 -1.9389 0.1448 +vn 0.1654 -1.9389 0.1448 +vn -0.0881 -1.9738 -0.0772 +vn -0.0880 -1.9738 -0.0772 +vn -0.0881 -1.9738 -0.0771 +vn -0.0880 -1.9738 -0.0771 +vn -0.0882 -1.9738 -0.0772 +vn -0.0713 -0.3518 -0.9816 +vn 0.6425 0.0050 -0.7663 +vn 0.0713 0.3518 0.9816 +vn 0.0407 -0.1597 0.9959 +vn -0.7147 -0.4868 -0.6551 +vn -0.0407 0.1597 -0.9959 +vn 0.7148 0.4868 0.6551 +vn -0.9953 0.1668 0.0474 +vn -0.6587 -0.0439 0.7520 +vn -0.6591 -0.0446 0.7518 +vn -0.6639 -0.0425 0.7475 +vn 0.4760 1.3744 -0.5433 +vn -0.4760 -1.3745 0.5433 +vn -0.4075 -1.3824 0.5917 +vn -0.6577 -0.0436 0.7529 +vn -0.6577 -0.0436 0.7530 +vn -0.6524 -0.0433 0.7576 +vn -0.6561 -0.0453 0.7543 +vn 0.4557 -1.4357 -0.5202 +vn 0.6587 0.0445 -0.7521 +vn 0.6638 0.0426 -0.7476 +vn 0.6590 0.0446 -0.7518 +vn -0.6588 -0.0433 0.7520 +vn -0.6315 -1.3283 0.3931 +vn -0.2130 -1.8944 -0.2147 +vn -0.4602 -1.3957 0.5432 +vn -0.4327 -1.5987 -0.4071 +vn 0.6689 0.0364 -0.7431 +vn -0.6689 -0.0364 0.7431 +vn -0.6646 -0.0426 0.7469 +vn -0.6696 -0.0355 0.7425 +vn -0.6729 -0.0261 0.7396 +vn -0.6731 -0.0243 0.7395 +vn -0.6740 -0.0186 0.7387 +vn -0.7853 -1.1181 0.2584 +vn 0.7959 1.0949 -0.2511 +vn -0.9530 -0.5545 0.1184 +vn 0.6742 0.0181 -0.7385 +vn 0.6731 0.0244 -0.7395 +vn -0.9052 -0.7878 0.1534 +vn -0.6425 -0.0054 0.7663 +vn 0.9803 0.3368 -0.1014 +vn -0.6743 -0.0138 0.7384 +vn -0.6750 -0.0116 0.7378 +vn 0.6747 0.0109 -0.7381 +vn 0.6743 0.0138 -0.7384 +vn -0.6478 -0.0372 0.7616 +vn -0.6517 -0.0418 0.7582 +vn -0.2703 -1.3152 0.6993 +vn 0.6566 0.0440 -0.7539 +vn 0.6563 0.0451 -0.7541 +vn 0.6523 0.0433 -0.7576 +vn -0.6442 -0.0227 0.7648 +vn -0.6470 -0.0349 0.7623 +vn -0.1253 -1.1531 0.8048 +vn 0.4534 -1.6105 0.3711 +vn -0.8071 1.1190 0.1778 +vn 0.7598 -0.2621 0.6367 +vn -0.6437 -0.0207 0.7652 +vn -0.6424 -0.0064 0.7664 +vn -0.0069 -0.6692 0.9416 +vn -0.6746 -0.0106 0.7381 +vn 0.0406 -0.1820 0.9950 +vn 0.0407 -0.1709 0.9955 +vn 0.0407 -0.1708 0.9955 +vn 0.0408 -0.1597 0.9959 +vn 0.0457 -1.9828 -0.0514 +vn 0.0455 -1.9828 -0.0512 +vn 0.0449 1.9828 -0.0520 +vn 0.0447 1.9828 -0.0518 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.973130 0.033128 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.677629 0.482142 +vt 0.409642 -0.009898 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.669677 0.481452 +vt 0.240570 0.058726 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +vt 0.296927 -0.019617 +vt 0.353285 -0.019617 +vt 0.470812 0.481452 +vt 0.296927 0.014692 +vt 0.271947 0.481452 +vt 0.353285 0.014692 +vt -0.849112 0.025953 +vt 0.468872 0.000137 +vt -0.911121 0.025955 +vt 0.273887 0.000137 +vt 0.475153 0.482142 +vt 0.353285 -0.053929 +vt 0.272677 0.482143 +vt 0.296927 -0.053929 +vt -0.911121 -0.024667 +vt 0.473178 0.006015 +vt -0.849112 -0.024667 +vt 0.274652 0.006015 +s 1 +usemtl CabnetDoors +f 8860/18360/6509 8861/18362/6510 8862/18365/6511 9132/18874/6511 9133/18876/6511 8863/18367/6511 8864/18369/6512 8865/18373/6513 8866/18374/6511 8867/18375/6511 +f 8865/18372/6513 8864/18370/6512 8868/18377/6514 8869/18380/6514 +f 8870/18382/6515 8871/18385/6516 8872/18388/6517 8873/18389/6515 +f 8874/18393/6518 8875/18394/6518 8861/18363/6510 8860/18359/6509 +f 8875/18395/6519 8874/18392/6519 8876/18397/6519 8877/18399/6519 +f 8878/18400/6519 8879/18403/6519 8876/18397/6519 8874/18392/6519 +f 8878/18401/6518 8874/18393/6518 8860/18359/6509 8880/18405/6518 +f 8873/18390/6514 8865/18372/6513 8869/18380/6514 8870/18383/6514 +f 8880/18406/6511 8860/18360/6511 8867/18375/6511 8866/18374/6511 8865/18373/6511 8873/18391/6511 8872/18387/6511 9136/18882/6511 9137/18884/6511 8881/18409/6511 +f 8873/18391/6511 8872/18387/6511 8866/18374/6511 8865/18373/6511 +f 8867/18376/6519 8860/18361/6519 8880/18407/6519 8881/18410/6519 +f 9131/18873/6519 9129/18869/6519 8882/18412/6519 8883/18413/6519 +f 8869/18381/6519 8868/18378/6519 8883/18413/6519 8882/18412/6519 +f 9128/18868/6519 8876/18397/6519 8879/18403/6519 9135/18881/6519 +f 8871/18386/6519 8870/18384/6519 8869/18381/6519 8882/18412/6519 +f 8875/18396/6520 8877/18398/6521 8862/18366/6522 8861/18364/6520 +f 8863/18368/6523 8883/18414/6524 8868/18379/6520 8864/18371/6520 +f 9133/18877/6525 9131/18872/6526 8883/18414/6524 8863/18368/6523 +f 8881/18411/6527 8879/18404/6528 8878/18402/6515 8880/18408/6515 +f 9137/18885/6529 9135/18880/6530 8879/18404/6528 8881/18411/6527 +f 8884/18415/6531 8885/18416/6531 8886/18417/6532 8887/18419/6532 +f 8888/18420/6533 8887/18418/6533 8889/18423/6534 8890/18425/6535 +f 8891/18427/6536 8892/18428/6536 8893/18429/6537 8894/18431/6538 +f 8893/18429/6539 8895/18432/6539 8896/18434/6539 8897/18436/6539 +f 8898/18438/6540 8899/18439/6540 8900/18440/6540 8901/18442/6540 +f 8902/18444/6541 8885/18416/6541 8903/18445/6541 8895/18433/6541 +f 8892/18428/6542 8902/18443/6542 8895/18432/6542 8893/18429/6542 +f 8904/18446/6543 8905/18447/6544 8902/18443/6542 8892/18428/6542 +f 8905/18448/6545 8886/18417/6545 8885/18416/6541 8902/18444/6541 +f 8906/18449/6546 8898/18437/6546 8901/18441/6546 8907/18450/6546 +f 8888/18421/6546 8908/18453/6546 8898/18437/6546 8906/18449/6546 +f 8908/18452/6540 8909/18454/6540 8899/18439/6540 8898/18438/6540 +f 8900/18440/6547 8894/18430/6547 8910/18456/6547 8911/18457/6547 +f 8895/18433/6548 8903/18445/6548 8912/18458/6548 8896/18435/6548 +f 8907/18450/6549 8901/18441/6549 8913/18460/6549 8914/18462/6549 +f 8899/18439/6550 8891/18426/6550 8894/18430/6550 8900/18440/6550 +f 8909/18454/6550 8915/18464/6550 8891/18426/6550 8899/18439/6550 +f 8915/18463/6551 8904/18446/6551 8892/18428/6536 8891/18427/6536 +f 8905/18447/6544 8904/18446/6543 8916/18465/6552 8917/18467/6552 +f 8909/18454/6553 8908/18452/6553 8918/18468/6553 8919/18470/6553 +f 8904/18446/6551 8915/18463/6551 8920/18471/6554 8916/18465/6555 +f 8921/18473/6531 8903/18445/6531 8885/18416/6531 8884/18415/6531 +f 8918/18469/6556 8890/18424/6556 8922/18476/6556 8923/18478/6556 +f 8920/18472/6557 8919/18470/6557 8924/18479/6557 8925/18481/6557 +f 8919/18470/6558 8918/18468/6558 8923/18477/6558 8924/18479/6558 +f 8916/18465/6555 8920/18471/6554 8925/18482/6559 8926/18483/6560 +f 8886/18417/6545 8905/18448/6545 8917/18466/6561 8927/18484/6561 +f 8915/18464/6562 8909/18454/6562 8919/18470/6562 8920/18472/6562 +f 8887/18419/6532 8886/18417/6532 8927/18484/6563 8889/18422/6563 +f 8908/18453/6564 8888/18421/6564 8890/18424/6564 8918/18469/6564 +f 8926/18483/6560 8925/18482/6559 8928/18485/6565 8929/18486/6566 +f 8922/18476/6567 8930/18487/6568 8931/18490/6569 8932/18491/6570 +f 8933/18492/6571 8926/18483/6571 8929/18486/6571 8934/18494/6571 +f 8930/18487/6572 8935/18497/6572 8936/18499/6572 8931/18490/6572 +f 8927/18484/6573 8917/18466/6573 8933/18493/6573 8935/18498/6573 +f 8889/18422/6574 8927/18484/6574 8935/18498/6574 8930/18488/6574 +f 8917/18467/6575 8916/18465/6575 8926/18483/6575 8933/18492/6575 +f 8890/18425/6535 8889/18423/6534 8930/18489/6568 8922/18475/6567 +f 8932/18491/6570 8931/18490/6569 8937/18503/6576 8938/18504/6577 +f 8934/18494/6578 8929/18486/6578 8939/18505/6578 8940/18507/6578 +f 8931/18490/6579 8936/18499/6579 8941/18508/6579 8937/18503/6579 +f 8936/18500/6580 8934/18495/6580 8940/18506/6580 8941/18509/6580 +f 8924/18479/6581 8923/18477/6581 8942/18510/6581 8943/18513/6581 +f 8925/18482/6582 8924/18480/6582 8943/18515/6582 8928/18485/6582 +f 8923/18478/6583 8922/18476/6583 8932/18491/6583 8942/18512/6583 +f 8935/18498/6584 8933/18493/6584 8934/18496/6584 8936/18501/6584 +f 8941/18509/6585 8940/18506/6585 8944/18517/6585 8945/18518/6585 +f 8946/18520/6586 8938/18504/6586 8947/18521/6586 8948/18522/6586 +f 8949/18524/6587 8950/18526/6587 8951/18528/6587 8952/18530/6587 +f 8950/18526/6588 8946/18519/6588 8948/18523/6588 8951/18528/6588 +f 8929/18486/6566 8928/18485/6565 8949/18525/6589 8939/18505/6590 +f 8943/18514/6591 8942/18511/6591 8946/18519/6591 8950/18526/6591 +f 8928/18485/6592 8943/18515/6592 8950/18527/6592 8949/18525/6592 +f 8942/18512/6593 8932/18491/6593 8938/18504/6593 8946/18520/6593 +f 8953/18531/6594 8954/18533/6594 8955/18535/6595 8956/18536/6595 +f 8944/18516/6596 8957/18539/6596 8958/18540/6596 8959/18542/6596 +f 8960/18545/6597 8961/18547/6597 8962/18549/6597 8963/18550/6597 +f 8948/18522/6598 8947/18521/6598 8964/18553/6598 8965/18555/6598 +f 8937/18502/6599 8941/18509/6599 8945/18518/6599 8966/18559/6599 +f 8940/18507/6600 8939/18505/6600 8957/18539/6600 8944/18516/6600 +f 8938/18504/6577 8937/18503/6576 8966/18558/6601 8947/18521/6602 +f 8939/18505/6590 8949/18525/6589 8952/18529/6603 8957/18539/6604 +f 8897/18436/6605 8896/18434/6605 8967/18560/6605 8968/18562/6605 +f 8912/18458/6606 8969/18563/6606 8970/18565/6606 8971/18569/6606 +f 8913/18459/6607 8911/18457/6607 8972/18570/6607 8973/18572/6607 +f 8969/18564/6608 8914/18461/6609 8974/18574/6610 8970/18566/6611 +f 8903/18445/6612 8921/18473/6612 8969/18563/6612 8912/18458/6612 +f 8894/18431/6538 8893/18429/6537 8897/18436/6613 8910/18455/6614 +f 8901/18442/6615 8900/18440/6615 8911/18457/6615 8913/18459/6615 +f 8921/18474/6616 8907/18451/6616 8914/18461/6609 8969/18564/6608 +f 8971/18568/6617 8970/18567/6617 8975/18576/6617 8976/18579/6617 +f 8973/18572/6618 8972/18570/6618 8977/18580/6618 8978/18583/6618 +f 8970/18567/6611 8974/18575/6610 8979/18586/6619 8975/18576/6620 +f 8974/18575/6621 8973/18573/6621 8978/18584/6621 8979/18586/6621 +f 8910/18455/6614 8897/18436/6613 8968/18562/6622 8980/18588/6623 +f 8896/18435/6624 8912/18458/6624 8971/18569/6624 8967/18561/6624 +f 8911/18457/6625 8910/18456/6625 8980/18587/6625 8972/18570/6625 +f 8914/18462/6626 8913/18460/6626 8973/18573/6626 8974/18575/6626 +f 8979/18586/6627 8978/18584/6627 8981/18589/6627 8982/18591/6627 +f 8977/18581/6628 8983/18592/6628 8984/18593/6628 8985/18595/6628 +f 8986/18597/6629 8976/18577/6629 8987/18600/6629 8988/18602/6629 +f 8983/18592/6630 8989/18604/6631 8990/18605/6632 8984/18593/6633 +f 8968/18562/6634 8967/18560/6634 8986/18599/6634 8989/18604/6634 +f 8980/18588/6623 8968/18562/6622 8989/18604/6631 8983/18592/6630 +f 8967/18561/6635 8971/18569/6635 8976/18578/6635 8986/18598/6635 +f 8972/18571/6636 8980/18588/6636 8983/18592/6636 8977/18581/6636 +f 8988/18602/6637 8987/18600/6637 8961/18547/6637 8960/18545/6637 +f 8984/18593/6633 8990/18605/6632 8991/18606/6638 8992/18608/6638 +f 8990/18605/6639 8988/18603/6639 8960/18546/6640 8991/18606/6641 +f 8987/18600/6642 8993/18609/6642 8953/18532/6643 8961/18547/6644 +f 8975/18576/6620 8979/18586/6619 8982/18591/6645 8993/18610/6646 +f 8978/18585/6647 8977/18582/6647 8985/18596/6647 8981/18590/6647 +f 8976/18579/6648 8975/18576/6648 8993/18610/6648 8987/18601/6648 +f 8989/18604/6649 8986/18599/6649 8988/18603/6649 8990/18605/6649 +f 8994/18611/6650 8995/18613/6650 8996/18614/6650 8997/18616/6650 +f 8947/18521/6602 8966/18558/6601 8998/18619/6651 8964/18553/6651 +f 8995/18613/6652 8992/18607/6653 8999/18622/6654 8996/18614/6654 +f 8957/18539/6604 8952/18529/6603 9000/18625/6655 8958/18540/6655 +f 8985/18596/6656 8984/18594/6656 8992/18607/6653 8995/18613/6652 +f 8982/18591/6657 8981/18589/6657 8994/18612/6658 8954/18533/6659 +f 8993/18610/6646 8982/18591/6645 8954/18533/6594 8953/18531/6594 +f 8981/18590/6660 8985/18596/6660 8995/18613/6660 8994/18611/6660 +f 9001/18628/6661 8959/18543/6661 8958/18541/6661 9000/18626/6661 +f 8965/18556/6661 9001/18628/6661 9000/18626/6661 9002/18629/6661 +f 8964/18554/6662 8998/18620/6661 9001/18628/6661 8965/18556/6661 +f 8998/18620/6661 9003/18631/6661 8959/18543/6661 9001/18628/6661 +f 9004/18633/6663 8963/18551/6663 8962/18548/6664 8956/18537/6664 +f 8997/18617/6665 9004/18633/6663 8956/18537/6664 8955/18534/6666 +f 8996/18615/6667 8999/18623/6663 9004/18633/6663 8997/18617/6665 +f 8999/18623/6663 9005/18634/6663 8963/18551/6663 9004/18633/6663 +f 8952/18530/6668 8951/18528/6668 9002/18630/6668 9000/18627/6668 +f 8992/18608/6638 8991/18606/6638 9005/18635/6669 8999/18624/6669 +f 8966/18559/6670 8945/18518/6670 9003/18632/6670 8998/18621/6670 +f 8954/18533/6659 8994/18612/6658 8997/18618/6671 8955/18535/6671 +f 8951/18528/6672 8948/18523/6672 8965/18557/6672 9002/18630/6672 +f 8991/18606/6641 8960/18546/6640 8963/18552/6673 9005/18635/6673 +f 8945/18518/6674 8944/18517/6674 8959/18544/6674 9003/18632/6674 +f 8961/18547/6644 8953/18532/6643 8956/18538/6675 8962/18549/6675 +f 9006/18637/6531 9007/18638/6531 9008/18639/6532 9009/18641/6532 +f 9010/18642/6676 9009/18640/6676 9011/18644/6677 9012/18645/6678 +f 9013/18646/6547 9014/18648/6547 9015/18651/6547 9016/18653/6547 +f 9017/18655/6540 9018/18656/6540 9013/18647/6540 9019/18659/6540 +f 9020/18661/6541 9007/18638/6541 9021/18662/6541 9022/18663/6541 +f 9023/18665/6679 9020/18660/6679 9022/18664/6679 9024/18666/6679 +f 9025/18667/6542 9026/18668/6542 9020/18660/6679 9023/18665/6679 +f 9026/18669/6545 9008/18639/6545 9007/18638/6541 9020/18661/6541 +f 9027/18670/6680 9017/18654/6680 9019/18658/6680 9028/18671/6680 +f 9010/18642/6680 9029/18673/6680 9017/18654/6680 9027/18670/6680 +f 9029/18672/6540 9030/18674/6540 9018/18656/6540 9017/18655/6540 +f 9022/18663/6548 9021/18662/6548 9031/18676/6548 9032/18678/6548 +f 9028/18671/6681 9019/18658/6681 9033/18679/6681 9034/18681/6681 +f 9035/18682/6682 9028/18671/6683 9034/18681/6684 9036/18684/6685 +f 9018/18657/6550 9037/18686/6550 9014/18648/6686 9013/18646/6686 +f 9030/18675/6550 9038/18688/6550 9037/18686/6550 9018/18657/6550 +f 9026/18668/6552 9025/18667/6552 9039/18689/6552 9040/18691/6552 +f 9030/18674/6553 9029/18672/6553 9041/18692/6553 9042/18694/6553 +f 9025/18667/6687 9038/18687/6687 9043/18697/6688 9039/18689/6689 +f 9027/18670/6690 9006/18636/6690 9009/18640/6676 9010/18642/6676 +f 9028/18671/6683 9035/18682/6682 9006/18636/6690 9027/18670/6690 +f 9035/18683/6531 9021/18662/6531 9007/18638/6531 9006/18637/6531 +f 9044/18698/6573 9040/18690/6573 9045/18700/6573 9046/18702/6573 +f 9041/18693/6691 9012/18645/6691 9047/18704/6691 9048/18706/6691 +f 9043/18696/6557 9042/18695/6557 9049/18707/6557 9050/18710/6557 +f 9042/18694/6692 9041/18692/6692 9048/18705/6692 9049/18709/6692 +f 9008/18639/6545 9026/18669/6545 9040/18690/6561 9044/18698/6561 +f 9038/18688/6562 9030/18675/6562 9042/18695/6562 9043/18696/6562 +f 9009/18641/6532 9008/18639/6532 9044/18698/6563 9011/18643/6563 +f 9029/18673/6693 9010/18642/6693 9012/18645/6693 9041/18693/6693 +f 9050/18711/6582 9049/18708/6582 9051/18715/6582 9052/18716/6582 +f 9049/18709/6694 9048/18705/6694 9053/18717/6694 9051/18713/6694 +f 9054/18721/6560 9050/18711/6695 9052/18716/6565 9055/18722/6566 +f 9047/18704/6696 9056/18724/6697 9057/18725/6698 9058/18726/6699 +f 9011/18643/6574 9044/18698/6574 9046/18702/6574 9056/18723/6574 +f 9040/18691/6575 9039/18689/6575 9054/18720/6575 9045/18699/6575 +f 9012/18645/6678 9011/18644/6677 9056/18724/6697 9047/18704/6696 +f 9039/18689/6689 9043/18697/6688 9050/18712/6695 9054/18720/6560 +f 9058/18726/6699 9057/18725/6698 9059/18728/6700 9060/18729/6701 +f 9061/18732/6578 9055/18722/6578 9062/18733/6578 9063/18734/6578 +f 9057/18725/6579 9064/18738/6579 9065/18739/6579 9059/18728/6579 +f 9064/18736/6580 9061/18730/6580 9063/18735/6580 9065/18740/6580 +f 9048/18706/6702 9047/18704/6702 9058/18726/6702 9053/18719/6702 +f 9046/18702/6584 9045/18700/6584 9061/18731/6584 9064/18737/6584 +f 9056/18724/6572 9046/18703/6572 9064/18738/6572 9057/18725/6572 +f 9045/18701/6703 9054/18721/6703 9055/18722/6703 9061/18732/6703 +f 9063/18734/6600 9062/18733/6600 9066/18741/6600 9067/18742/6600 +f 9059/18727/6599 9065/18740/6599 9068/18744/6599 9069/18746/6599 +f 9065/18740/6585 9063/18735/6585 9067/18743/6585 9068/18744/6585 +f 9070/18747/6704 9060/18729/6704 9071/18749/6704 9072/18750/6704 +f 9055/18722/6566 9052/18716/6565 9073/18752/6705 9062/18733/6706 +f 9051/18714/6591 9053/18718/6591 9070/18748/6591 9074/18755/6591 +f 9052/18716/6592 9051/18715/6592 9074/18754/6592 9073/18752/6592 +f 9053/18719/6707 9058/18726/6707 9060/18729/6707 9070/18747/6707 +f 9075/18756/6708 9076/18758/6708 9077/18760/6595 9078/18761/6595 +f 9067/18742/6709 9066/18741/6709 9079/18764/6709 9080/18766/6709 +f 9081/18770/6597 9082/18772/6597 9083/18774/6597 9084/18775/6597 +f 9072/18750/6598 9071/18749/6598 9085/18779/6598 9086/18781/6598 +f 9060/18729/6701 9059/18728/6700 9069/18745/6710 9071/18749/6711 +f 9062/18733/6706 9073/18752/6705 9087/18785/6712 9066/18741/6713 +f 9074/18755/6588 9070/18748/6588 9072/18751/6588 9088/18787/6588 +f 9073/18753/6587 9074/18755/6587 9088/18787/6587 9087/18786/6587 +f 9031/18676/6606 9036/18685/6606 9089/18788/6606 9090/18790/6606 +f 9033/18680/6607 9016/18652/6607 9091/18794/6607 9092/18796/6607 +f 9036/18684/6685 9034/18681/6684 9093/18797/6714 9089/18789/6715 +f 9034/18681/6716 9033/18679/6716 9092/18795/6716 9093/18797/6716 +f 9024/18666/6539 9022/18664/6539 9032/18677/6539 9094/18798/6539 +f 9021/18662/6612 9035/18683/6612 9036/18685/6612 9031/18676/6612 +f 9014/18649/6717 9024/18666/6717 9094/18798/6718 9015/18650/6719 +f 9019/18659/6615 9013/18647/6615 9016/18652/6615 9033/18680/6615 +f 9089/18789/6715 9093/18797/6714 9095/18799/6720 9096/18800/6721 +f 9093/18797/6722 9092/18795/6722 9097/18802/6722 9095/18799/6722 +f 9091/18792/6636 9098/18806/6636 9099/18807/6636 9100/18808/6636 +f 9101/18812/6635 9090/18790/6635 9102/18814/6635 9103/18817/6635 +f 9094/18798/6605 9032/18677/6605 9101/18811/6605 9104/18820/6605 +f 9015/18650/6719 9094/18798/6718 9104/18820/6622 9098/18804/6623 +f 9032/18678/6624 9031/18676/6624 9090/18790/6624 9101/18812/6624 +f 9016/18653/6625 9015/18651/6625 9098/18805/6625 9091/18793/6625 +f 9100/18808/6628 9099/18807/6628 9105/18822/6628 9106/18824/6628 +f 9103/18818/6629 9102/18815/6629 9107/18827/6629 9108/18829/6629 +f 9099/18807/6630 9109/18830/6631 9110/18831/6632 9105/18822/6633 +f 9109/18830/6649 9103/18819/6649 9108/18828/6649 9110/18831/6649 +f 9092/18796/6723 9091/18794/6723 9100/18809/6723 9097/18801/6723 +f 9090/18791/6724 9089/18789/6724 9096/18800/6724 9102/18816/6724 +f 9104/18821/6634 9101/18813/6634 9103/18819/6634 9109/18830/6634 +f 9098/18806/6623 9104/18821/6622 9109/18830/6631 9099/18807/6630 +f 9110/18831/6639 9108/18828/6639 9081/18771/6640 9111/18832/6641 +f 9107/18827/6642 9112/18833/6642 9075/18757/6643 9082/18772/6644 +f 9113/18835/6725 9106/18825/6725 9114/18837/6725 9115/18838/6725 +f 9112/18834/6726 9116/18840/6727 9076/18758/6708 9075/18756/6708 +f 9095/18799/6728 9097/18802/6728 9113/18836/6728 9116/18840/6728 +f 9096/18800/6721 9095/18799/6720 9116/18840/6727 9112/18834/6726 +f 9097/18803/6647 9100/18810/6647 9106/18825/6647 9113/18835/6647 +f 9102/18816/6648 9096/18800/6648 9112/18834/6648 9107/18826/6648 +f 9115/18838/6650 9114/18837/6650 9117/18841/6650 9118/18843/6650 +f 9071/18749/6711 9069/18745/6710 9119/18847/6729 9085/18779/6729 +f 9066/18741/6713 9087/18785/6712 9120/18850/6655 9079/18764/6655 +f 9114/18837/6652 9121/18853/6653 9122/18855/6654 9117/18841/6654 +f 9105/18822/6633 9110/18831/6632 9111/18832/6638 9121/18854/6638 +f 9108/18829/6637 9107/18827/6637 9082/18772/6637 9081/18770/6637 +f 9106/18825/6656 9105/18823/6656 9121/18853/6653 9114/18837/6652 +f 9116/18840/6730 9113/18836/6730 9115/18839/6731 9076/18758/6732 +f 9123/18858/6661 9080/18767/6661 9079/18765/6661 9120/18851/6661 +f 9086/18782/6661 9123/18858/6661 9120/18851/6661 9124/18860/6661 +f 9085/18780/6662 9119/18848/6661 9123/18859/6661 9086/18783/6661 +f 9119/18848/6661 9125/18862/6661 9080/18768/6661 9123/18859/6661 +f 9126/18864/6663 9084/18776/6663 9083/18773/6664 9078/18762/6664 +f 9118/18844/6665 9126/18864/6663 9078/18762/6664 9077/18759/6666 +f 9117/18842/6667 9122/18856/6663 9126/18865/6663 9118/18845/6665 +f 9122/18856/6663 9127/18866/6663 9084/18777/6663 9126/18865/6663 +f 9087/18786/6668 9088/18787/6668 9124/18861/6668 9120/18852/6668 +f 9121/18854/6638 9111/18832/6638 9127/18867/6669 9122/18857/6669 +f 9069/18746/6670 9068/18744/6670 9125/18863/6670 9119/18849/6670 +f 9076/18758/6732 9115/18839/6731 9118/18846/6733 9077/18760/6733 +f 9088/18787/6672 9072/18751/6672 9086/18784/6672 9124/18861/6672 +f 9111/18832/6641 9081/18771/6640 9084/18778/6673 9127/18867/6673 +f 9068/18744/6674 9067/18743/6674 9080/18769/6674 9125/18863/6674 +f 9082/18772/6644 9075/18757/6643 9078/18763/6675 9083/18774/6675 +f 8872/18388/6517 8871/18385/6516 9134/18878/6734 9136/18883/6735 +f 9136/18883/6735 9134/18878/6734 9135/18880/6530 9137/18885/6529 +f 8862/18366/6522 8877/18398/6521 9130/18870/6736 9132/18875/6737 +f 9132/18875/6737 9130/18870/6736 9131/18872/6526 9133/18877/6525 +f 8882/18412/6519 9129/18869/6519 9134/18879/6519 8871/18386/6519 +f 9129/18869/6519 9128/18868/6519 9135/18881/6519 9134/18879/6519 +f 8877/18399/6519 8876/18397/6519 9128/18868/6519 9130/18871/6519 +f 9130/18871/6519 9128/18868/6519 9129/18869/6519 9131/18873/6519 +o Chair.025 +v -10.624578 0.806663 5.306186 +v -10.624578 0.835619 5.306186 +v -10.645970 0.835619 5.261415 +v -10.819262 0.835619 4.898739 +v -10.840653 0.835619 4.853969 +v -10.840653 0.806663 4.853969 +v -10.819262 0.806663 4.898739 +v -10.645970 0.806663 5.261415 +v -11.187704 0.835619 5.019794 +v -11.187704 0.806663 5.019794 +v -11.187704 0.777705 5.019794 +v -11.168036 0.777705 5.060956 +v -10.819262 0.777705 4.898739 +v -10.840653 0.777705 4.853969 +v -10.971629 0.806663 5.472011 +v -10.971629 0.835619 5.472011 +v -10.991297 0.806663 5.430849 +v -10.991297 0.835619 5.430849 +v -10.971629 0.777705 5.472011 +v -10.991297 0.777705 5.430849 +v -10.624578 0.777705 5.306186 +v -10.645970 0.777705 5.261415 +v -11.168036 0.806663 5.060956 +v -11.168036 0.835619 5.060956 +v -11.014530 0.851736 4.934644 +v -11.017049 0.862848 4.929374 +v -10.898771 0.862848 4.872860 +v -10.896254 0.851736 4.878130 +v -10.896330 0.835669 4.877970 +v -10.867022 0.851517 4.864163 +v -10.869457 0.836313 4.865130 +v -11.023021 0.835524 4.916875 +v -11.022944 0.851591 4.917034 +v -11.141221 0.851591 4.973548 +v -11.141296 0.835524 4.973389 +v -11.138810 0.863200 4.978594 +v -11.167595 0.854415 4.992348 +v -11.167897 0.843776 4.986294 +v -11.017017 0.824060 4.929440 +v -11.020502 0.824409 4.922146 +v -11.138779 0.824409 4.978660 +v -11.135293 0.824060 4.985954 +v -11.020534 0.863200 4.922080 +v -11.135324 0.862848 4.985888 +v -10.904668 0.851591 4.860520 +v -10.902257 0.863200 4.865566 +v -11.014606 0.835669 4.934484 +v -11.132883 0.835669 4.990998 +v -10.898740 0.824060 4.872926 +v -10.902225 0.824409 4.865632 +v -11.165054 0.829050 4.984741 +v -11.160519 0.818864 4.989047 +v -11.164045 0.854095 4.999611 +v -11.156969 0.818544 4.996311 +v -11.156667 0.829183 5.002363 +v -10.904744 0.835524 4.860361 +v -10.875457 0.851380 4.846563 +v -10.871343 0.862365 4.850794 +v -10.873570 0.825328 4.860899 +v -10.877005 0.825660 4.853581 +v -10.877892 0.836176 4.847531 +v -11.132807 0.851736 4.991158 +v -10.843932 0.817783 4.852934 +v -10.849568 0.808601 4.849431 +v -10.852956 0.808879 4.842090 +v -10.852386 0.817668 4.835344 +v -10.847847 0.830376 4.833370 +v -10.867908 0.862033 4.858113 +v -10.830968 0.781988 4.825110 +v -10.824802 0.790834 4.822360 +v -10.839392 0.830491 4.850961 +v -10.816333 0.790914 4.839943 +v -10.822499 0.782070 4.842693 +v -10.842211 0.839556 4.836875 +v -10.817992 0.797226 4.825303 +v -10.838822 0.839280 4.844215 +v -10.814639 0.797034 4.832660 +v -10.800322 0.737041 4.832293 +v -10.807460 0.733008 4.835507 +v -10.808800 0.737005 4.814713 +v -10.801288 0.739918 4.817321 +v -10.797956 0.739831 4.824689 +v -10.829309 0.775678 4.839751 +v -10.832662 0.775871 4.832393 +v -10.787191 0.668358 4.810586 +v -10.783861 0.668281 4.817954 +v -10.814972 0.730092 4.832900 +v -10.793458 0.662308 4.828817 +v -10.801009 0.659756 4.826229 +v -10.815936 0.732970 4.817928 +v -10.818302 0.730182 4.825532 +v -10.804339 0.659834 4.818861 +v -10.801935 0.662276 4.811238 +v -11.222322 0.675525 5.033930 +v -11.215155 0.673643 5.030309 +v -11.252243 -0.024782 5.048031 +v -11.259411 -0.022902 5.051651 +v -10.794744 0.665806 4.807997 +v -10.716531 -0.015949 4.770626 +v -10.708978 -0.013399 4.773214 +v -11.233495 0.676869 5.023835 +v -11.229852 0.676827 5.031054 +v -11.266940 -0.021600 5.048775 +v -11.270583 -0.021558 5.041557 +v -10.715244 -0.019449 4.791446 +v -10.722795 -0.021999 4.788857 +v -10.786265 0.665838 4.825576 +v -11.195516 0.826920 5.005688 +v -11.194061 0.819027 4.998796 +v -11.159509 0.843909 5.003917 +v -11.185695 0.819125 5.016429 +v -11.191914 0.826681 5.012927 +v -11.182570 0.800547 4.999584 +v -11.178968 0.800309 5.006823 +v -11.180423 0.808201 5.013713 +v -11.205276 0.782513 5.025785 +v -11.212557 0.786178 5.022790 +v -11.199536 0.773503 5.007690 +v -11.195901 0.773388 5.014913 +v -11.198465 0.777216 5.022335 +v -11.188787 0.808102 4.996081 +v -11.209515 0.718910 5.021418 +v -11.212253 0.721393 5.028923 +v -11.206818 0.777168 5.004696 +v -11.220603 0.721363 5.011282 +v -11.213156 0.718984 5.014198 +v -11.216193 0.786293 5.015568 +v -11.226748 0.727210 5.029571 +v -11.230389 0.727284 5.022351 +v -11.213628 0.782465 5.008145 +v -11.227652 0.724801 5.014846 +v -11.230671 0.675507 5.016289 +v -11.223503 0.673627 5.012669 +v -11.219302 0.724831 5.032487 +v -11.212331 0.672283 5.022763 +v -11.215975 0.672325 5.015545 +v -11.253063 -0.026101 5.033267 +v -11.249420 -0.026141 5.040485 +v -10.708052 -0.015917 4.788205 +v -11.260592 -0.024800 5.030390 +v -10.723722 -0.019481 4.773867 +v -10.715887 -0.017698 4.781035 +v -10.726126 -0.021922 4.781489 +v -10.705647 -0.013475 4.780583 +v -11.260001 -0.023850 5.041020 +v -11.267759 -0.022917 5.034010 +v -10.788817 0.851736 5.407033 +v -10.791335 0.862848 5.401762 +v -10.673059 0.862848 5.345248 +v -10.670541 0.851736 5.350519 +v -10.670616 0.835669 5.350360 +v -10.641309 0.851517 5.336551 +v -10.643744 0.836313 5.337520 +v -10.913065 0.824409 5.451048 +v -10.915584 0.835524 5.445778 +v -10.939342 0.829050 5.457129 +v -10.934805 0.818864 5.461435 +v -10.791304 0.824060 5.401828 +v -10.794789 0.824409 5.394534 +v -10.909580 0.824060 5.458342 +v -10.794821 0.863200 5.394468 +v -10.909612 0.862848 5.458276 +v -10.913096 0.863200 5.450982 +v -10.797232 0.851591 5.389423 +v -10.915507 0.851591 5.445937 +v -10.678955 0.851591 5.332909 +v -10.676544 0.863200 5.337954 +v -10.788893 0.835669 5.406874 +v -10.907169 0.835669 5.463388 +v -10.673027 0.824060 5.345314 +v -10.676513 0.824409 5.338020 +v -10.938333 0.854095 5.472000 +v -10.941881 0.854415 5.464736 +v -10.931255 0.818544 5.468699 +v -10.930954 0.829183 5.474752 +v -10.907093 0.851736 5.463547 +v -10.933796 0.843909 5.476305 +v -10.797307 0.835524 5.389264 +v -10.679030 0.835524 5.332750 +v -10.649744 0.851380 5.318951 +v -10.645630 0.862365 5.323183 +v -10.647858 0.825328 5.333288 +v -10.651292 0.825660 5.325969 +v -10.652178 0.836176 5.319920 +v -10.642196 0.862033 5.330502 +v -10.616497 0.839556 5.309263 +v -10.613110 0.839280 5.316604 +v -10.618218 0.817783 5.325324 +v -10.623854 0.808601 5.321819 +v -10.627243 0.808879 5.314478 +v -10.626673 0.817668 5.307733 +v -10.606948 0.775871 5.304781 +v -10.605254 0.781988 5.297499 +v -10.603596 0.775678 5.312139 +v -10.622133 0.830376 5.305759 +v -10.599090 0.790834 5.294748 +v -10.613679 0.830491 5.323349 +v -10.590620 0.790914 5.312332 +v -10.596786 0.782070 5.315083 +v -10.574609 0.737041 5.304681 +v -10.581746 0.733008 5.307897 +v -10.592278 0.797226 5.297691 +v -10.583087 0.737005 5.287102 +v -10.575575 0.739918 5.289710 +v -10.588926 0.797034 5.305049 +v -10.572244 0.739831 5.297078 +v -10.569030 0.665806 5.280385 +v -10.561478 0.668358 5.282974 +v -10.558148 0.668281 5.290343 +v -10.560552 0.665838 5.297965 +v -10.589258 0.730092 5.305288 +v -10.567744 0.662308 5.301206 +v -10.575296 0.659756 5.298617 +v -10.590223 0.732970 5.290317 +v -10.592589 0.730182 5.297921 +v -10.996610 0.675525 5.506319 +v -10.989441 0.673643 5.502698 +v -11.026529 -0.024782 5.520420 +v -11.033698 -0.022902 5.524040 +v -10.490818 -0.015949 5.243014 +v -10.483265 -0.013399 5.245603 +v -11.007781 0.676869 5.496223 +v -11.004138 0.676827 5.503442 +v -11.041226 -0.021600 5.521164 +v -11.044870 -0.021558 5.513945 +v -10.489531 -0.019449 5.263835 +v -10.497083 -0.021999 5.261246 +v -10.576222 0.662276 5.283627 +v -10.578627 0.659834 5.291249 +v -10.959982 0.819125 5.488817 +v -10.966201 0.826681 5.485315 +v -10.956857 0.800547 5.471972 +v -10.953256 0.800309 5.479211 +v -10.954709 0.808201 5.486103 +v -10.942183 0.843776 5.458683 +v -10.972753 0.777216 5.494724 +v -10.979563 0.782513 5.498173 +v -10.970188 0.773388 5.487301 +v -10.963075 0.808102 5.468470 +v -10.981104 0.777168 5.477084 +v -10.973823 0.773503 5.480079 +v -10.969802 0.826920 5.478077 +v -10.986844 0.786178 5.495179 +v -10.990479 0.786293 5.487957 +v -10.968349 0.819027 5.471185 +v -10.994889 0.721363 5.483671 +v -10.987443 0.718984 5.486587 +v -11.001035 0.727210 5.501960 +v -11.004676 0.727284 5.494740 +v -10.987915 0.782465 5.480534 +v -11.001939 0.724801 5.487235 +v -11.004958 0.675507 5.488677 +v -10.993588 0.724831 5.504875 +v -10.983803 0.718910 5.493806 +v -10.990262 0.672325 5.487934 +v -10.986618 0.672283 5.495152 +v -10.986539 0.721393 5.501312 +v -11.027350 -0.026101 5.505655 +v -11.023707 -0.026141 5.512874 +v -10.482338 -0.015917 5.260593 +v -10.498009 -0.019481 5.246255 +v -10.997790 0.673627 5.485057 +v -11.034879 -0.024800 5.502779 +v -10.490173 -0.017698 5.253425 +v -10.500413 -0.021922 5.253878 +v -10.479935 -0.013475 5.252971 +v -11.034287 -0.023850 5.513410 +v -11.042047 -0.022917 5.506399 +v -11.050210 0.769502 5.307551 +v -11.109123 0.769502 5.184253 +v -11.050210 0.798458 5.307551 +v -11.109123 0.798458 5.184253 +v -10.703734 0.798458 5.140522 +v -10.761498 0.798458 5.019631 +v -11.109123 0.740544 5.184253 +v -11.050210 0.740544 5.307551 +v -10.761498 0.740544 5.019631 +v -10.703734 0.740544 5.140523 +vn 0.1787 -0.0001 0.9839 +vn 0.6667 -1.4054 0.2356 +vn 0.9023 -0.0000 -0.4311 +vn 0.2356 -1.4054 -0.6667 +vn 0.0134 1.3250 -0.7452 +vn -0.4311 -0.0000 -0.9023 +vn -0.0000 -1.9875 -0.0000 +vn -0.0290 -1.9829 -0.0617 +vn -0.0293 -1.9828 -0.0625 +vn 0.4311 -0.0000 0.9023 +vn -0.9023 -0.0000 0.4311 +vn -0.0000 1.9875 -0.0000 +vn -0.0298 1.9829 -0.0613 +vn -0.0302 1.9828 -0.0621 +vn 0.0293 1.9828 0.0625 +vn 0.0290 1.9829 0.0617 +vn 0.0291 1.9828 0.0620 +vn 0.0292 1.9828 0.0622 +vn 0.0302 -1.9828 0.0621 +vn 0.0298 -1.9829 0.0613 +vn 0.0299 -1.9828 0.0616 +vn 0.0301 -1.9828 0.0618 +vn 0.2981 1.4358 0.6239 +vn 0.2987 1.4446 0.6185 +vn 0.4311 -0.0447 0.9020 +vn 0.4308 -0.0427 0.9022 +vn 0.4251 -0.0405 0.9049 +vn -0.4310 0.0433 -0.9021 +vn -0.4322 0.0436 -0.9015 +vn -0.4324 0.0436 -0.9014 +vn -0.3929 1.3788 -0.6036 +vn -0.0094 -1.9870 -0.0196 +vn 0.0094 1.9870 0.0198 +vn -0.3114 1.3745 -0.6518 +vn -0.3070 1.3837 -0.6489 +vn 0.0148 1.9870 0.0169 +vn 0.3114 -1.3743 0.6518 +vn -0.2157 -1.4424 -0.6533 +vn -0.1145 1.9683 0.0783 +vn 0.3829 -1.3823 0.6080 +vn -0.2981 -1.4356 -0.6240 +vn -0.4311 0.0439 -0.9021 +vn -0.3025 1.3929 -0.6460 +vn 0.0114 -1.9866 -0.0288 +vn -0.4248 0.0425 -0.9050 +vn -0.4306 0.0445 -0.9022 +vn 0.1121 -1.3282 0.7354 +vn -0.4968 -1.3856 -0.5169 +vn -0.2814 -1.8944 0.1110 +vn -0.4190 0.0365 -0.9078 +vn -0.4240 0.0426 -0.9054 +vn 0.0201 1.9869 0.0140 +vn -0.2825 -1.4560 -0.6193 +vn 0.2992 1.4534 0.6130 +vn 0.3175 -1.3956 0.6373 +vn -0.4141 0.0263 -0.9101 +vn -0.4179 0.0352 -0.9083 +vn 0.4193 -0.0348 0.9077 +vn 0.4243 -0.0406 0.9053 +vn 0.4187 -0.0341 0.9080 +vn 0.4147 -0.0247 0.9099 +vn 0.0834 1.0950 -0.8304 +vn 0.7019 1.1425 0.4206 +vn 0.3112 1.8724 -0.1252 +vn 0.5123 1.3716 0.5112 +vn -0.0983 1.3146 -0.7435 +vn 0.4144 -0.0237 0.9100 +vn 0.4132 -0.0178 0.9106 +vn 0.2231 0.7577 -0.8972 +vn 0.8477 0.7907 0.3509 +vn 0.7682 1.0738 -0.3435 +vn -0.5448 -1.5988 0.2369 +vn -0.6892 -1.1663 -0.4249 +vn -0.0724 -1.1180 0.8236 +vn 0.5698 1.5567 -0.2487 +vn 0.8368 0.7910 -0.3760 +vn -0.2672 -0.5544 0.9224 +vn -0.8974 -0.5788 -0.3315 +vn -0.8358 -0.7960 0.3755 +vn -0.4126 0.0182 -0.9109 +vn -0.4138 0.0243 -0.9103 +vn -0.7507 -1.1313 0.3353 +vn -0.8392 -0.8218 -0.3533 +vn -0.2162 -0.7878 0.8923 +vn 0.4506 -0.0054 0.8927 +vn 0.4506 -0.0050 0.8927 +vn 0.2936 0.3368 -0.9408 +vn -0.8866 0.2309 0.4478 +vn -0.2937 -0.3368 0.9408 +vn 0.8979 0.5761 0.3314 +vn 0.2676 0.5519 -0.9227 +vn 0.4135 -0.0157 0.9105 +vn 0.4127 -0.0111 0.9109 +vn -0.4119 0.0107 -0.9112 +vn -0.4123 0.0138 -0.9110 +vn -0.5611 1.2863 -0.5160 +vn 0.0246 1.3411 0.7376 +vn 0.3091 -1.8595 -0.1706 +vn 0.4338 -0.0429 0.9007 +vn 0.4385 -0.0413 0.8985 +vn 0.4438 -0.0363 0.8959 +vn 0.4393 -0.0407 0.8981 +vn 0.2057 1.4388 0.6585 +vn -0.4339 0.0451 -0.9007 +vn -0.4388 0.0434 -0.8983 +vn 0.0945 -1.9739 -0.0687 +vn 0.4336 -0.0442 0.9008 +vn -0.1552 1.1189 0.8118 +vn 0.5200 -1.6105 -0.2702 +vn 0.4482 -0.0223 0.8939 +vn 0.4448 -0.0345 0.8955 +vn 0.6900 -1.1530 0.4328 +vn -0.4395 0.0418 -0.8980 +vn -0.4441 0.0372 -0.8958 +vn -0.3590 1.8142 0.1947 +vn -0.0477 -1.3706 -0.7226 +vn 0.5359 -1.3151 0.5244 +vn 0.8624 -0.6691 0.3780 +vn 0.2853 -0.6981 -0.8918 +vn -0.7879 0.9305 0.4000 +vn -0.4485 0.0227 -0.8937 +vn -0.4451 0.0348 -0.8953 +vn -0.4490 0.0207 -0.8935 +vn -0.4507 0.0063 -0.8927 +vn -0.7253 1.0743 -0.4263 +vn -0.5915 1.4834 0.3052 +vn 0.1267 -1.1991 -0.7874 +vn -0.8845 0.2671 0.4467 +vn -0.4505 0.0054 -0.8928 +vn -0.9301 0.1845 -0.3555 +vn -0.9306 0.1720 -0.3556 +vn -0.9306 0.1721 -0.3556 +vn -0.3486 0.1927 0.9323 +vn -0.3489 0.1798 0.9328 +vn -0.3489 0.1797 0.9328 +vn 0.4498 -0.0061 0.8931 +vn 0.4482 -0.0199 0.8939 +vn 0.7812 -0.9581 -0.3967 +vn -0.2877 0.6831 0.8939 +vn -0.8655 0.6546 -0.3774 +vn 0.8865 -0.2309 -0.4478 +vn 0.4119 -0.0106 0.9112 +vn 0.3490 -0.1785 -0.9328 +vn 0.3490 -0.1784 -0.9328 +vn 0.3492 -0.1668 -0.9333 +vn -0.4120 0.0106 -0.9112 +vn 0.3488 -0.1901 -0.9323 +vn 0.9302 -0.1820 0.3555 +vn 0.9307 -0.1709 0.3556 +vn 0.9307 -0.1708 0.3556 +vn 0.8848 -0.2621 -0.4470 +vn 0.1983 -1.9389 -0.0947 +vn 0.1983 -1.9389 -0.0948 +vn -0.1057 -1.9738 0.0505 +vn -0.1057 -1.9738 0.0504 +vn -0.1056 -1.9738 0.0504 +vn -0.1056 -1.9738 0.0505 +vn -0.1057 -1.9738 0.0506 +vn -0.9301 -0.3518 -0.3219 +vn -0.4505 0.0050 -0.8928 +vn 0.9301 0.3518 0.3219 +vn 0.9312 -0.1597 0.3557 +vn -0.8840 -0.4868 0.3982 +vn -0.9312 0.1597 -0.3557 +vn 0.8840 0.4868 -0.3982 +vn -0.3492 0.1668 0.9333 +vn 0.4311 -0.0439 0.9021 +vn 0.4307 -0.0446 0.9022 +vn 0.4248 -0.0425 0.9050 +vn -0.3114 1.3744 -0.6518 +vn 0.3114 -1.3745 0.6518 +vn 0.3829 -1.3824 0.6079 +vn 0.4322 -0.0436 0.9015 +vn 0.4324 -0.0436 0.9014 +vn 0.4387 -0.0433 0.8984 +vn 0.4341 -0.0453 0.9006 +vn -0.2981 -1.4357 -0.6240 +vn -0.4311 0.0445 -0.9020 +vn -0.4250 0.0426 -0.9050 +vn -0.4307 0.0446 -0.9022 +vn 0.4310 -0.0433 0.9021 +vn 0.3112 1.8724 -0.1251 +vn 0.1120 -1.3283 0.7354 +vn 0.3175 -1.3957 0.6372 +vn -0.5448 -1.5987 0.2369 +vn -0.4189 0.0364 -0.9079 +vn 0.4189 -0.0364 0.9079 +vn 0.4240 -0.0426 0.9054 +vn 0.4180 -0.0355 0.9083 +vn 0.4140 -0.0261 0.9102 +vn 0.4138 -0.0243 0.9103 +vn 0.4127 -0.0186 0.9108 +vn -0.0725 -1.1181 0.8236 +vn 0.0834 1.0949 -0.8304 +vn 0.2676 0.5519 -0.9226 +vn -0.2673 -0.5545 0.9224 +vn -0.4126 0.0181 -0.9109 +vn -0.4138 0.0244 -0.9103 +vn 0.4505 -0.0054 0.8928 +vn 0.4505 -0.0050 0.8928 +vn 0.2937 0.3368 -0.9408 +vn 0.4123 -0.0138 0.9110 +vn 0.4116 -0.0116 0.9114 +vn -0.4119 0.0109 -0.9112 +vn 0.4441 -0.0372 0.8958 +vn 0.4395 -0.0418 0.8980 +vn 0.5359 -1.3152 0.5243 +vn -0.4336 0.0440 -0.9008 +vn -0.4387 0.0433 -0.8984 +vn 0.4485 -0.0227 0.8937 +vn 0.4451 -0.0349 0.8953 +vn 0.6900 -1.1531 0.4327 +vn -0.1552 1.1190 0.8118 +vn 0.8848 -0.2621 -0.4469 +vn 0.4490 -0.0207 0.8935 +vn 0.4507 -0.0064 0.8927 +vn 0.8625 -0.6692 0.3779 +vn 0.8866 -0.2309 -0.4478 +vn 0.4120 -0.0106 0.9112 +vn 0.9302 -0.1820 0.3553 +vn 0.9307 -0.1709 0.3555 +vn 0.9307 -0.1708 0.3555 +vn 0.9312 -0.1597 0.3556 +vn -0.0292 -1.9828 -0.0622 +vn -0.0291 -1.9828 -0.0620 +vn -0.0301 1.9828 -0.0618 +vn -0.0299 1.9828 -0.0616 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.973130 0.033128 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.677629 0.482142 +vt 0.409642 -0.009898 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.669677 0.481452 +vt 0.240570 0.058726 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +vt 0.296927 -0.019617 +vt 0.353285 -0.019617 +vt 0.470812 0.481452 +vt 0.296927 0.014692 +vt 0.271947 0.481452 +vt 0.353285 0.014692 +vt -0.849112 0.025953 +vt 0.468872 0.000137 +vt -0.911121 0.025955 +vt 0.273887 0.000137 +vt 0.475153 0.482142 +vt 0.353285 -0.053929 +vt 0.272677 0.482143 +vt 0.296927 -0.053929 +vt -0.911121 -0.024667 +vt 0.473178 0.006015 +vt -0.849112 -0.024667 +vt 0.274652 0.006015 +s 1 +usemtl CabnetDoors +f 9138/18887/6738 9139/18889/6739 9140/18892/6740 9410/19401/6740 9411/19403/6740 9141/18894/6740 9142/18896/6741 9143/18900/6742 9144/18901/6740 9145/18902/6740 +f 9143/18899/6742 9142/18897/6741 9146/18904/6743 9147/18907/6743 +f 9148/18909/6744 9149/18912/6745 9150/18915/6746 9151/18916/6744 +f 9152/18920/6747 9153/18921/6747 9139/18890/6739 9138/18886/6738 +f 9153/18922/6748 9152/18919/6748 9154/18924/6748 9155/18926/6748 +f 9156/18927/6748 9157/18930/6748 9154/18924/6748 9152/18919/6748 +f 9156/18928/6747 9152/18920/6747 9138/18886/6738 9158/18932/6747 +f 9151/18917/6743 9143/18899/6742 9147/18907/6743 9148/18910/6743 +f 9158/18933/6740 9138/18887/6740 9145/18902/6740 9144/18901/6740 9143/18900/6740 9151/18918/6740 9150/18914/6740 9414/19409/6740 9415/19411/6740 9159/18936/6740 +f 9151/18918/6740 9150/18914/6740 9144/18901/6740 9143/18900/6740 +f 9145/18903/6748 9138/18888/6748 9158/18934/6748 9159/18937/6748 +f 9409/19400/6748 9407/19396/6748 9160/18939/6748 9161/18940/6748 +f 9147/18908/6748 9146/18905/6748 9161/18940/6748 9160/18939/6748 +f 9406/19395/6748 9154/18924/6748 9157/18930/6748 9413/19408/6748 +f 9149/18913/6748 9148/18911/6748 9147/18908/6748 9160/18939/6748 +f 9153/18923/6749 9155/18925/6750 9140/18893/6751 9139/18891/6749 +f 9141/18895/6752 9161/18941/6753 9146/18906/6749 9142/18898/6749 +f 9411/19404/6754 9409/19399/6755 9161/18941/6753 9141/18895/6752 +f 9159/18938/6756 9157/18931/6757 9156/18929/6744 9158/18935/6744 +f 9415/19412/6758 9413/19407/6759 9157/18931/6757 9159/18938/6756 +f 9162/18942/6760 9163/18943/6760 9164/18944/6761 9165/18946/6761 +f 9166/18947/6762 9165/18945/6762 9167/18950/6763 9168/18952/6764 +f 9169/18954/6765 9170/18955/6765 9171/18956/6766 9172/18958/6767 +f 9171/18956/6768 9173/18959/6768 9174/18961/6768 9175/18963/6768 +f 9176/18965/6769 9177/18966/6769 9178/18967/6769 9179/18969/6769 +f 9180/18971/6770 9163/18943/6770 9181/18972/6770 9173/18960/6770 +f 9170/18955/6771 9180/18970/6771 9173/18959/6771 9171/18956/6771 +f 9182/18973/6772 9183/18974/6772 9180/18970/6771 9170/18955/6771 +f 9183/18975/6773 9164/18944/6773 9163/18943/6770 9180/18971/6770 +f 9184/18976/6774 9176/18964/6774 9179/18968/6774 9185/18977/6774 +f 9166/18948/6774 9186/18980/6774 9176/18964/6774 9184/18976/6774 +f 9186/18979/6769 9187/18981/6769 9177/18966/6769 9176/18965/6769 +f 9178/18967/6775 9172/18957/6775 9188/18983/6775 9189/18984/6775 +f 9173/18960/6776 9181/18972/6776 9190/18985/6776 9174/18962/6776 +f 9185/18977/6777 9179/18968/6777 9191/18987/6777 9192/18989/6777 +f 9177/18966/6778 9169/18953/6778 9172/18957/6778 9178/18967/6778 +f 9187/18981/6778 9193/18991/6778 9169/18953/6778 9177/18966/6778 +f 9193/18990/6779 9182/18973/6779 9170/18955/6765 9169/18954/6765 +f 9183/18974/6772 9182/18973/6772 9194/18992/6780 9195/18994/6780 +f 9187/18981/6781 9186/18979/6781 9196/18995/6781 9197/18997/6781 +f 9182/18973/6779 9193/18990/6779 9198/18998/6782 9194/18992/6783 +f 9199/19000/6760 9181/18972/6760 9163/18943/6760 9162/18942/6760 +f 9196/18996/6784 9168/18951/6784 9200/19003/6784 9201/19005/6784 +f 9198/18999/6785 9197/18997/6785 9202/19006/6785 9203/19008/6785 +f 9197/18997/6786 9196/18995/6786 9201/19004/6786 9202/19006/6786 +f 9194/18992/6783 9198/18998/6782 9203/19009/6787 9204/19010/6788 +f 9164/18944/6773 9183/18975/6773 9195/18993/6789 9205/19011/6789 +f 9193/18991/6790 9187/18981/6790 9197/18997/6790 9198/18999/6790 +f 9165/18946/6761 9164/18944/6761 9205/19011/6791 9167/18949/6791 +f 9186/18980/6792 9166/18948/6792 9168/18951/6792 9196/18996/6792 +f 9204/19010/6788 9203/19009/6787 9206/19012/6793 9207/19013/6794 +f 9200/19003/6795 9208/19014/6796 9209/19017/6797 9210/19018/6798 +f 9211/19019/6799 9204/19010/6799 9207/19013/6799 9212/19021/6799 +f 9208/19014/6800 9213/19024/6800 9214/19026/6800 9209/19017/6800 +f 9205/19011/6801 9195/18993/6801 9211/19020/6801 9213/19025/6801 +f 9167/18949/6802 9205/19011/6802 9213/19025/6802 9208/19015/6802 +f 9195/18994/6803 9194/18992/6803 9204/19010/6803 9211/19019/6803 +f 9168/18952/6764 9167/18950/6763 9208/19016/6796 9200/19002/6795 +f 9210/19018/6798 9209/19017/6797 9215/19030/6804 9216/19031/6805 +f 9212/19021/6806 9207/19013/6806 9217/19032/6806 9218/19034/6806 +f 9209/19017/6807 9214/19026/6807 9219/19035/6807 9215/19030/6807 +f 9214/19027/6808 9212/19022/6808 9218/19033/6808 9219/19036/6808 +f 9202/19006/6809 9201/19004/6809 9220/19037/6809 9221/19040/6809 +f 9203/19009/6810 9202/19007/6810 9221/19042/6810 9206/19012/6810 +f 9201/19005/6811 9200/19003/6811 9210/19018/6811 9220/19039/6811 +f 9213/19025/6812 9211/19020/6812 9212/19023/6812 9214/19028/6812 +f 9219/19036/6813 9218/19033/6813 9222/19044/6813 9223/19045/6813 +f 9224/19047/6814 9216/19031/6814 9225/19048/6814 9226/19049/6814 +f 9227/19051/6815 9228/19053/6815 9229/19055/6815 9230/19057/6815 +f 9228/19053/6816 9224/19046/6816 9226/19050/6816 9229/19055/6816 +f 9207/19013/6794 9206/19012/6793 9227/19052/6817 9217/19032/6818 +f 9221/19041/6819 9220/19038/6819 9224/19046/6819 9228/19053/6819 +f 9206/19012/6820 9221/19042/6820 9228/19054/6820 9227/19052/6820 +f 9220/19039/6821 9210/19018/6821 9216/19031/6821 9224/19047/6821 +f 9231/19058/6822 9232/19060/6822 9233/19062/6823 9234/19063/6823 +f 9222/19043/6824 9235/19066/6824 9236/19067/6824 9237/19069/6824 +f 9238/19072/6825 9239/19074/6825 9240/19076/6825 9241/19077/6825 +f 9226/19049/6826 9225/19048/6826 9242/19080/6826 9243/19082/6826 +f 9215/19029/6827 9219/19036/6827 9223/19045/6827 9244/19086/6827 +f 9218/19034/6828 9217/19032/6828 9235/19066/6828 9222/19043/6828 +f 9216/19031/6805 9215/19030/6804 9244/19085/6829 9225/19048/6830 +f 9217/19032/6818 9227/19052/6817 9230/19056/6831 9235/19066/6832 +f 9175/18963/6833 9174/18961/6833 9245/19087/6833 9246/19089/6833 +f 9190/18985/6834 9247/19090/6834 9248/19092/6834 9249/19096/6834 +f 9191/18986/6835 9189/18984/6835 9250/19097/6835 9251/19099/6835 +f 9247/19091/6836 9192/18988/6837 9252/19101/6838 9248/19093/6839 +f 9181/18972/6840 9199/19000/6840 9247/19090/6840 9190/18985/6840 +f 9172/18958/6767 9171/18956/6766 9175/18963/6841 9188/18982/6842 +f 9179/18969/6843 9178/18967/6843 9189/18984/6843 9191/18986/6843 +f 9199/19001/6844 9185/18978/6844 9192/18988/6837 9247/19091/6836 +f 9249/19095/6845 9248/19094/6845 9253/19103/6845 9254/19106/6845 +f 9251/19099/6846 9250/19097/6846 9255/19107/6846 9256/19110/6846 +f 9248/19094/6839 9252/19102/6838 9257/19113/6847 9253/19103/6848 +f 9252/19102/6849 9251/19100/6849 9256/19111/6849 9257/19113/6849 +f 9188/18982/6842 9175/18963/6841 9246/19089/6850 9258/19115/6851 +f 9174/18962/6852 9190/18985/6852 9249/19096/6852 9245/19088/6852 +f 9189/18984/6853 9188/18983/6853 9258/19114/6853 9250/19097/6853 +f 9192/18989/6854 9191/18987/6854 9251/19100/6854 9252/19102/6854 +f 9257/19113/6855 9256/19111/6855 9259/19116/6855 9260/19118/6855 +f 9255/19108/6856 9261/19119/6856 9262/19120/6856 9263/19122/6856 +f 9264/19124/6857 9254/19104/6857 9265/19127/6857 9266/19129/6857 +f 9261/19119/6858 9267/19131/6859 9268/19132/6860 9262/19120/6861 +f 9246/19089/6862 9245/19087/6862 9264/19126/6862 9267/19131/6862 +f 9258/19115/6851 9246/19089/6850 9267/19131/6859 9261/19119/6858 +f 9245/19088/6863 9249/19096/6863 9254/19105/6863 9264/19125/6863 +f 9250/19098/6864 9258/19115/6864 9261/19119/6864 9255/19108/6864 +f 9266/19129/6865 9265/19127/6865 9239/19074/6865 9238/19072/6865 +f 9262/19120/6861 9268/19132/6860 9269/19133/6866 9270/19135/6866 +f 9268/19132/6867 9266/19130/6867 9238/19073/6868 9269/19133/6869 +f 9265/19127/6870 9271/19136/6870 9231/19059/6871 9239/19074/6872 +f 9253/19103/6848 9257/19113/6847 9260/19118/6873 9271/19137/6874 +f 9256/19112/6875 9255/19109/6875 9263/19123/6875 9259/19117/6875 +f 9254/19106/6876 9253/19103/6876 9271/19137/6876 9265/19128/6876 +f 9267/19131/6877 9264/19126/6877 9266/19130/6877 9268/19132/6877 +f 9272/19138/6878 9273/19140/6878 9274/19141/6878 9275/19143/6878 +f 9225/19048/6830 9244/19085/6829 9276/19146/6879 9242/19080/6879 +f 9273/19140/6880 9270/19134/6881 9277/19149/6882 9274/19141/6882 +f 9235/19066/6832 9230/19056/6831 9278/19152/6883 9236/19067/6883 +f 9263/19123/6884 9262/19121/6884 9270/19134/6881 9273/19140/6880 +f 9260/19118/6885 9259/19116/6885 9272/19139/6886 9232/19060/6887 +f 9271/19137/6874 9260/19118/6873 9232/19060/6822 9231/19058/6822 +f 9259/19117/6888 9263/19123/6888 9273/19140/6888 9272/19138/6888 +f 9279/19155/6889 9237/19070/6889 9236/19068/6889 9278/19153/6889 +f 9243/19083/6890 9279/19155/6889 9278/19153/6889 9280/19156/6889 +f 9242/19081/6890 9276/19147/6890 9279/19155/6889 9243/19083/6890 +f 9276/19147/6890 9281/19158/6889 9237/19070/6889 9279/19155/6889 +f 9282/19160/6891 9241/19078/6891 9240/19075/6892 9234/19064/6893 +f 9275/19144/6891 9282/19160/6891 9234/19064/6893 9233/19061/6894 +f 9274/19142/6895 9277/19150/6891 9282/19160/6891 9275/19144/6891 +f 9277/19150/6891 9283/19161/6891 9241/19078/6891 9282/19160/6891 +f 9230/19057/6896 9229/19055/6896 9280/19157/6896 9278/19154/6896 +f 9270/19135/6866 9269/19133/6866 9283/19162/6897 9277/19151/6897 +f 9244/19086/6898 9223/19045/6898 9281/19159/6898 9276/19148/6898 +f 9232/19060/6887 9272/19139/6886 9275/19145/6899 9233/19062/6899 +f 9229/19055/6900 9226/19050/6900 9243/19084/6900 9280/19157/6900 +f 9269/19133/6869 9238/19073/6868 9241/19079/6901 9283/19162/6901 +f 9223/19045/6902 9222/19044/6902 9237/19071/6902 9281/19159/6902 +f 9239/19074/6872 9231/19059/6871 9234/19065/6903 9240/19076/6903 +f 9284/19164/6760 9285/19165/6760 9286/19166/6761 9287/19168/6761 +f 9288/19169/6904 9287/19167/6904 9289/19171/6905 9290/19172/6906 +f 9291/19173/6775 9292/19175/6775 9293/19178/6775 9294/19180/6775 +f 9295/19182/6769 9296/19183/6769 9291/19174/6769 9297/19186/6769 +f 9298/19188/6770 9285/19165/6770 9299/19189/6770 9300/19190/6770 +f 9301/19192/6907 9298/19187/6907 9300/19191/6907 9302/19193/6907 +f 9303/19194/6771 9304/19195/6771 9298/19187/6907 9301/19192/6907 +f 9304/19196/6773 9286/19166/6773 9285/19165/6770 9298/19188/6770 +f 9305/19197/6908 9295/19181/6908 9297/19185/6908 9306/19198/6908 +f 9288/19169/6908 9307/19200/6908 9295/19181/6908 9305/19197/6908 +f 9307/19199/6769 9308/19201/6769 9296/19183/6769 9295/19182/6769 +f 9300/19190/6776 9299/19189/6776 9309/19203/6776 9310/19205/6776 +f 9306/19198/6909 9297/19185/6909 9311/19206/6909 9312/19208/6909 +f 9313/19209/6910 9306/19198/6911 9312/19208/6912 9314/19211/6913 +f 9296/19184/6778 9315/19213/6778 9292/19175/6914 9291/19173/6914 +f 9308/19202/6778 9316/19215/6778 9315/19213/6778 9296/19184/6778 +f 9304/19195/6780 9303/19194/6780 9317/19216/6780 9318/19218/6780 +f 9308/19201/6781 9307/19199/6781 9319/19219/6781 9320/19221/6781 +f 9303/19194/6915 9316/19214/6915 9321/19224/6916 9317/19216/6917 +f 9305/19197/6918 9284/19163/6918 9287/19167/6904 9288/19169/6904 +f 9306/19198/6911 9313/19209/6910 9284/19163/6918 9305/19197/6918 +f 9313/19210/6760 9299/19189/6760 9285/19165/6760 9284/19164/6760 +f 9322/19225/6919 9318/19217/6919 9323/19227/6919 9324/19229/6919 +f 9319/19220/6920 9290/19172/6920 9325/19231/6920 9326/19233/6920 +f 9321/19223/6785 9320/19222/6785 9327/19234/6785 9328/19237/6785 +f 9320/19221/6786 9319/19219/6786 9326/19232/6786 9327/19236/6786 +f 9286/19166/6773 9304/19196/6773 9318/19217/6789 9322/19225/6789 +f 9316/19215/6790 9308/19202/6790 9320/19222/6790 9321/19223/6790 +f 9287/19168/6761 9286/19166/6761 9322/19225/6791 9289/19170/6791 +f 9307/19200/6921 9288/19169/6921 9290/19172/6921 9319/19220/6921 +f 9328/19238/6810 9327/19235/6810 9329/19242/6810 9330/19243/6810 +f 9327/19236/6922 9326/19232/6922 9331/19244/6922 9329/19240/6922 +f 9332/19248/6788 9328/19238/6923 9330/19243/6793 9333/19249/6794 +f 9325/19231/6924 9334/19251/6925 9335/19252/6926 9336/19253/6927 +f 9289/19170/6802 9322/19225/6802 9324/19229/6802 9334/19250/6802 +f 9318/19218/6803 9317/19216/6803 9332/19247/6803 9323/19226/6803 +f 9290/19172/6906 9289/19171/6905 9334/19251/6925 9325/19231/6924 +f 9317/19216/6917 9321/19224/6916 9328/19239/6923 9332/19247/6788 +f 9336/19253/6927 9335/19252/6926 9337/19255/6928 9338/19256/6929 +f 9339/19259/6806 9333/19249/6806 9340/19260/6806 9341/19261/6806 +f 9335/19252/6807 9342/19265/6807 9343/19266/6807 9337/19255/6807 +f 9342/19263/6808 9339/19257/6808 9341/19262/6808 9343/19267/6808 +f 9326/19233/6930 9325/19231/6930 9336/19253/6930 9331/19246/6930 +f 9324/19229/6812 9323/19227/6812 9339/19258/6812 9342/19264/6812 +f 9334/19251/6800 9324/19230/6800 9342/19265/6800 9335/19252/6800 +f 9323/19228/6931 9332/19248/6931 9333/19249/6931 9339/19259/6931 +f 9341/19261/6932 9340/19260/6932 9344/19268/6932 9345/19269/6932 +f 9337/19254/6827 9343/19267/6827 9346/19271/6827 9347/19273/6827 +f 9343/19267/6813 9341/19262/6813 9345/19270/6813 9346/19271/6813 +f 9348/19274/6933 9338/19256/6933 9349/19276/6933 9350/19277/6933 +f 9333/19249/6794 9330/19243/6793 9351/19279/6934 9340/19260/6935 +f 9329/19241/6819 9331/19245/6819 9348/19275/6819 9352/19282/6819 +f 9330/19243/6820 9329/19242/6820 9352/19281/6820 9351/19279/6820 +f 9331/19246/6821 9336/19253/6821 9338/19256/6821 9348/19274/6821 +f 9353/19283/6936 9354/19285/6936 9355/19287/6937 9356/19288/6937 +f 9345/19269/6938 9344/19268/6938 9357/19291/6938 9358/19293/6938 +f 9359/19297/6825 9360/19299/6825 9361/19301/6825 9362/19302/6825 +f 9350/19277/6826 9349/19276/6826 9363/19306/6826 9364/19308/6826 +f 9338/19256/6929 9337/19255/6928 9347/19272/6939 9349/19276/6940 +f 9340/19260/6935 9351/19279/6934 9365/19312/6941 9344/19268/6832 +f 9352/19282/6816 9348/19275/6816 9350/19278/6816 9366/19314/6816 +f 9351/19280/6815 9352/19282/6815 9366/19314/6815 9365/19313/6815 +f 9309/19203/6834 9314/19212/6834 9367/19315/6834 9368/19317/6834 +f 9311/19207/6835 9294/19179/6835 9369/19321/6835 9370/19323/6835 +f 9314/19211/6913 9312/19208/6912 9371/19324/6942 9367/19316/6943 +f 9312/19208/6944 9311/19206/6944 9370/19322/6944 9371/19324/6944 +f 9302/19193/6768 9300/19191/6768 9310/19204/6768 9372/19325/6768 +f 9299/19189/6840 9313/19210/6840 9314/19212/6840 9309/19203/6840 +f 9292/19176/6945 9302/19193/6945 9372/19325/6841 9293/19177/6946 +f 9297/19186/6843 9291/19174/6843 9294/19179/6843 9311/19207/6843 +f 9367/19316/6943 9371/19324/6942 9373/19326/6947 9374/19327/6948 +f 9371/19324/6949 9370/19322/6949 9375/19329/6949 9373/19326/6949 +f 9369/19319/6864 9376/19333/6864 9377/19334/6864 9378/19335/6864 +f 9379/19339/6863 9368/19317/6863 9380/19341/6863 9381/19344/6863 +f 9372/19325/6833 9310/19204/6833 9379/19338/6833 9382/19347/6833 +f 9293/19177/6946 9372/19325/6841 9382/19347/6850 9376/19331/6851 +f 9310/19205/6852 9309/19203/6852 9368/19317/6852 9379/19339/6852 +f 9294/19180/6853 9293/19178/6853 9376/19332/6853 9369/19320/6853 +f 9378/19335/6856 9377/19334/6856 9383/19349/6856 9384/19351/6856 +f 9381/19345/6857 9380/19342/6857 9385/19354/6857 9386/19356/6857 +f 9377/19334/6858 9387/19357/6859 9388/19358/6860 9383/19349/6861 +f 9387/19357/6877 9381/19346/6877 9386/19355/6877 9388/19358/6877 +f 9370/19323/6846 9369/19321/6846 9378/19336/6846 9375/19328/6846 +f 9368/19318/6950 9367/19316/6950 9374/19327/6950 9380/19343/6950 +f 9382/19348/6862 9379/19340/6862 9381/19346/6862 9387/19357/6862 +f 9376/19333/6851 9382/19348/6850 9387/19357/6859 9377/19334/6858 +f 9388/19358/6867 9386/19355/6867 9359/19298/6868 9389/19359/6869 +f 9385/19354/6870 9390/19360/6870 9353/19284/6871 9360/19299/6872 +f 9391/19362/6951 9384/19352/6951 9392/19364/6951 9393/19365/6951 +f 9390/19361/6952 9394/19367/6953 9354/19285/6936 9353/19283/6936 +f 9373/19326/6954 9375/19329/6954 9391/19363/6954 9394/19367/6954 +f 9374/19327/6948 9373/19326/6947 9394/19367/6953 9390/19361/6952 +f 9375/19330/6875 9378/19337/6875 9384/19352/6875 9391/19362/6875 +f 9380/19343/6876 9374/19327/6876 9390/19361/6876 9385/19353/6876 +f 9393/19365/6955 9392/19364/6955 9395/19368/6955 9396/19370/6955 +f 9349/19276/6940 9347/19272/6939 9397/19374/6956 9363/19306/6956 +f 9344/19268/6832 9365/19312/6941 9398/19377/6883 9357/19291/6883 +f 9392/19364/6880 9399/19380/6881 9400/19382/6882 9395/19368/6882 +f 9383/19349/6861 9388/19358/6860 9389/19359/6866 9399/19381/6866 +f 9386/19356/6865 9385/19354/6865 9360/19299/6865 9359/19297/6865 +f 9384/19352/6884 9383/19350/6884 9399/19380/6881 9392/19364/6880 +f 9394/19367/6957 9391/19363/6957 9393/19366/6958 9354/19285/6959 +f 9401/19385/6889 9358/19294/6889 9357/19292/6889 9398/19378/6889 +f 9364/19309/6890 9401/19385/6889 9398/19378/6889 9402/19387/6889 +f 9363/19307/6890 9397/19375/6890 9401/19386/6889 9364/19310/6890 +f 9397/19375/6890 9403/19389/6889 9358/19295/6889 9401/19386/6889 +f 9404/19391/6891 9362/19303/6891 9361/19300/6892 9356/19289/6893 +f 9396/19371/6891 9404/19391/6891 9356/19289/6893 9355/19286/6894 +f 9395/19369/6895 9400/19383/6891 9404/19392/6891 9396/19372/6891 +f 9400/19383/6891 9405/19393/6891 9362/19304/6891 9404/19392/6891 +f 9365/19313/6896 9366/19314/6896 9402/19388/6896 9398/19379/6896 +f 9399/19381/6866 9389/19359/6866 9405/19394/6897 9400/19384/6897 +f 9347/19273/6898 9346/19271/6898 9403/19390/6898 9397/19376/6898 +f 9354/19285/6959 9393/19366/6958 9396/19373/6960 9355/19287/6960 +f 9366/19314/6900 9350/19278/6900 9364/19311/6900 9402/19388/6900 +f 9389/19359/6869 9359/19298/6868 9362/19305/6901 9405/19394/6901 +f 9346/19271/6902 9345/19270/6902 9358/19296/6902 9403/19390/6902 +f 9360/19299/6872 9353/19284/6871 9356/19290/6903 9361/19301/6903 +f 9150/18915/6746 9149/18912/6745 9412/19405/6961 9414/19410/6962 +f 9414/19410/6962 9412/19405/6961 9413/19407/6759 9415/19412/6758 +f 9140/18893/6751 9155/18925/6750 9408/19397/6963 9410/19402/6964 +f 9410/19402/6964 9408/19397/6963 9409/19399/6755 9411/19404/6754 +f 9160/18939/6748 9407/19396/6748 9412/19406/6748 9149/18913/6748 +f 9407/19396/6748 9406/19395/6748 9413/19408/6748 9412/19406/6748 +f 9155/18926/6748 9154/18924/6748 9406/19395/6748 9408/19398/6748 +f 9408/19398/6748 9406/19395/6748 9407/19396/6748 9409/19400/6748 +o Chair.026 +v -6.879082 0.415382 5.563379 +v -6.879082 0.429951 5.563379 +v -6.892496 0.429951 5.515607 +v -7.001151 0.429951 5.128622 +v -7.014564 0.429951 5.080851 +v -7.014564 0.415382 5.080851 +v -7.001151 0.415382 5.128622 +v -6.892496 0.415382 5.515607 +v -6.644252 0.429951 4.976877 +v -6.644252 0.415382 4.976877 +v -6.644252 0.400812 4.976877 +v -6.631920 0.400812 5.020797 +v -7.001151 0.400812 5.128622 +v -7.014564 0.400812 5.080851 +v -6.508770 0.415382 5.459404 +v -6.508770 0.429951 5.459404 +v -6.521102 0.415382 5.415484 +v -6.521102 0.429951 5.415484 +v -6.508770 0.400812 5.459404 +v -6.521102 0.400812 5.415484 +v -6.879082 0.400812 5.563379 +v -6.892496 0.400812 5.515607 +v -7.033175 0.432961 5.107377 +v -7.029133 0.432961 5.121770 +v -7.024804 0.421009 5.120554 +v -7.028845 0.421009 5.106161 +v -7.036960 0.426967 5.123967 +v -7.041001 0.426967 5.109574 +v -6.906439 0.419106 5.549736 +v -6.910422 0.419106 5.535549 +v -6.922578 0.425064 5.538961 +v -6.918595 0.425064 5.553149 +v -6.910903 0.434699 5.550990 +v -6.914886 0.434699 5.536802 +v -7.042969 0.431853 5.125655 +v -7.047010 0.431853 5.111261 +v -6.928722 0.433592 5.540687 +v -6.924739 0.433592 5.554874 +v -6.936548 0.592772 5.558190 +v -6.922712 0.593879 5.554305 +v -7.044984 0.592141 5.110692 +v -7.040943 0.592141 5.125085 +v -7.058820 0.591033 5.114577 +v -7.076537 0.829840 5.119551 +v -7.062701 0.830948 5.115666 +v -6.954265 0.831579 5.563164 +v -6.940429 0.832686 5.559279 +v -7.054779 0.591033 5.128970 +v -6.926696 0.593879 5.540118 +v -6.940532 0.592772 5.544003 +v -7.052869 0.830737 5.112906 +v -7.059622 0.870951 5.138753 +v -7.050879 0.870348 5.136298 +v -6.934569 0.832325 5.542328 +v -6.930586 0.832325 5.556516 +v -6.940746 0.869634 5.535223 +v -6.944911 0.864490 5.518921 +v -7.072495 0.829840 5.133945 +v -6.913959 0.608202 5.551847 +v -6.944413 0.832686 5.545092 +v -6.958249 0.831579 5.548977 +v -7.058660 0.830948 5.130060 +v -7.072083 0.869953 5.142251 +v -7.036241 0.606614 5.108237 +v -7.032199 0.606614 5.122631 +v -7.048828 0.830737 5.127299 +v -6.917943 0.608202 5.537660 +v -6.949499 0.870373 5.537680 +v -6.953664 0.865229 5.521379 +v -6.966125 0.864232 5.524878 +v -7.034000 0.913073 5.207378 +v -7.041752 0.914244 5.210039 +v -6.972394 0.911897 5.467832 +v -6.964452 0.911148 5.465975 +v -7.066985 0.867524 5.159719 +v -7.054523 0.868521 5.156221 +v -7.038296 0.902898 5.219109 +v -7.051719 0.901824 5.222878 +v -7.045780 0.867919 5.153766 +v -6.961961 0.869376 5.541179 +v -6.974155 0.900855 5.458414 +v -6.987577 0.899781 5.462183 +v -6.985816 0.910823 5.471601 +v -7.055174 0.913170 5.213808 +v -6.965856 0.901346 5.458179 +v -7.030546 0.901727 5.216447 +v -6.631920 0.415382 5.020797 +v -6.631920 0.429951 5.020797 +v -6.830617 0.438060 5.026949 +v -6.832196 0.443651 5.021326 +v -6.958401 0.443651 5.056761 +v -6.956822 0.438060 5.062385 +v -6.956870 0.429976 5.062214 +v -6.988013 0.437950 5.071142 +v -6.985544 0.430300 5.070265 +v -6.835941 0.429903 5.007990 +v -6.835893 0.437987 5.008159 +v -6.709690 0.437987 4.972724 +v -6.709737 0.429903 4.972555 +v -6.708178 0.443828 4.978108 +v -6.677464 0.439408 4.969484 +v -6.681225 0.434055 4.964732 +v -6.832177 0.424135 5.021396 +v -6.834362 0.424311 5.013613 +v -6.708158 0.424311 4.978179 +v -6.705973 0.424135 4.985961 +v -6.834382 0.443828 5.013543 +v -6.705993 0.443651 4.985891 +v -6.962098 0.437987 5.043594 +v -6.960587 0.443828 5.048978 +v -6.830665 0.429976 5.026779 +v -6.704462 0.429976 4.991344 +v -6.958381 0.424135 5.056831 +v -6.960567 0.424311 5.049048 +v -6.684386 0.426646 4.965437 +v -6.684961 0.421521 4.971665 +v -6.675347 0.439247 4.977286 +v -6.682844 0.421360 4.979467 +v -6.679083 0.426713 4.984219 +v -6.962145 0.429903 5.043425 +v -6.993267 0.437881 5.052346 +v -6.993573 0.443408 5.058240 +v -6.985238 0.424773 5.064372 +v -6.987478 0.424940 5.056604 +v -6.990798 0.430231 5.051470 +v -6.704413 0.438060 4.991515 +v -7.012780 0.420977 5.077912 +v -7.010849 0.416357 5.071563 +v -7.013139 0.416497 5.063809 +v -7.018012 0.420919 5.059111 +v -7.022727 0.427313 5.060617 +v -6.991333 0.443241 5.066008 +v -7.040866 0.402967 5.065527 +v -7.047317 0.407418 5.067522 +v -7.017495 0.427371 5.079420 +v -7.042099 0.407458 5.086329 +v -7.035650 0.403008 5.084333 +v -7.024657 0.431932 5.066967 +v -7.050499 0.410634 5.074224 +v -7.022368 0.431793 5.074721 +v -7.048172 0.410537 5.081967 +v -7.059184 0.380352 5.091125 +v -7.051697 0.378323 5.088839 +v -7.064391 0.380334 5.072316 +v -7.068323 0.381800 5.079228 +v -7.065973 0.381756 5.086965 +v -7.032466 0.399792 5.077632 +v -7.034793 0.399889 5.069889 +v -7.083364 0.345795 5.083451 +v -7.081014 0.345756 5.091187 +v -7.047765 0.376856 5.081928 +v -7.066638 0.342751 5.093034 +v -7.062663 0.341467 5.086111 +v -7.056905 0.378304 5.070031 +v -7.050115 0.376901 5.074191 +v -7.065014 0.341506 5.078374 +v -7.071845 0.342735 5.074225 +v -6.608897 0.349401 4.964696 +v -6.616675 0.348454 4.966696 +v -6.577100 -0.002953 4.955585 +v -6.569323 -0.002007 4.953585 +v -7.079390 0.344511 5.076527 +v -7.162845 0.001491 5.099959 +v -7.166821 0.002774 5.106884 +v -6.607147 0.350077 4.949741 +v -6.605130 0.350056 4.957572 +v -6.565555 -0.001352 4.946460 +v -6.567572 -0.001331 4.938630 +v -7.150093 -0.000270 5.116467 +v -7.146119 -0.001553 5.109543 +v -7.074183 0.344527 5.095336 +v -6.647672 0.425574 4.961120 +v -6.653307 0.421603 4.956893 +v -6.675921 0.434122 4.983515 +v -6.647980 0.421652 4.975669 +v -6.645610 0.425454 4.968937 +v -6.661431 0.412305 4.965059 +v -6.659370 0.412185 4.972877 +v -6.653735 0.416156 4.977101 +v -6.627087 0.403231 4.969803 +v -6.623583 0.405075 4.962753 +v -6.643328 0.398698 4.959976 +v -6.641303 0.398640 4.967803 +v -6.634482 0.400566 4.971696 +v -6.659062 0.416106 4.958327 +v -6.626776 0.371230 4.963725 +v -6.619771 0.372479 4.967566 +v -6.639824 0.400542 4.952925 +v -6.625115 0.372464 4.948795 +v -6.628795 0.371267 4.955895 +v -6.625608 0.405133 4.954925 +v -6.608441 0.375406 4.958501 +v -6.610461 0.375443 4.950672 +v -6.632429 0.403207 4.951032 +v -6.617465 0.374194 4.946830 +v -6.614244 0.349392 4.945925 +v -6.622020 0.348446 4.947926 +v -6.612121 0.374209 4.965601 +v -6.623772 0.347770 4.962882 +v -6.625787 0.347791 4.955051 +v -6.586213 -0.003617 4.943939 +v -6.584196 -0.003637 4.951769 +v -7.157639 0.001507 5.118769 +v -6.582446 -0.002962 4.936815 +v -7.155301 -0.000286 5.097658 +v -7.156470 0.000611 5.108213 +v -7.148469 -0.001514 5.101807 +v -7.164470 0.002736 5.114620 +v -6.575885 -0.002484 4.945199 +v -6.574669 -0.002015 4.934814 +v -6.689093 0.438060 5.531001 +v -6.690671 0.443651 5.525378 +v -6.816876 0.443651 5.560812 +v -6.815297 0.438060 5.566436 +v -6.815345 0.429976 5.566267 +v -6.846488 0.437950 5.575194 +v -6.844019 0.430300 5.574318 +v -6.566633 0.424311 5.482230 +v -6.568212 0.429903 5.476606 +v -6.542861 0.426646 5.469489 +v -6.543436 0.421521 5.475717 +v -6.690651 0.424135 5.525448 +v -6.692837 0.424311 5.517665 +v -6.564448 0.424135 5.490013 +v -6.692857 0.443828 5.517594 +v -6.564467 0.443651 5.489943 +v -6.566653 0.443828 5.482160 +v -6.694368 0.437987 5.512211 +v -6.568164 0.437987 5.476776 +v -6.820573 0.437987 5.547646 +v -6.819061 0.443828 5.553030 +v -6.689140 0.429976 5.530832 +v -6.562936 0.429976 5.495397 +v -6.816856 0.424135 5.560883 +v -6.819042 0.424311 5.553100 +v -6.533822 0.439247 5.481338 +v -6.535939 0.439408 5.473536 +v -6.541319 0.421360 5.483519 +v -6.537558 0.426713 5.488271 +v -6.562889 0.438060 5.495566 +v -6.534397 0.434122 5.487566 +v -6.694416 0.429903 5.512041 +v -6.820621 0.429903 5.547476 +v -6.851742 0.437881 5.556397 +v -6.852048 0.443408 5.562291 +v -6.843713 0.424773 5.568423 +v -6.845953 0.424940 5.560656 +v -6.849273 0.430231 5.555521 +v -6.849808 0.443241 5.570059 +v -6.883133 0.431932 5.571019 +v -6.880844 0.431793 5.578773 +v -6.871255 0.420977 5.581965 +v -6.869326 0.416357 5.575615 +v -6.871614 0.416497 5.567861 +v -6.876487 0.420919 5.563162 +v -6.893269 0.399889 5.573941 +v -6.899342 0.402967 5.569579 +v -6.890942 0.399792 5.581684 +v -6.881203 0.427313 5.564669 +v -6.905792 0.407418 5.571573 +v -6.875970 0.427371 5.583471 +v -6.900575 0.407458 5.590380 +v -6.894125 0.403008 5.588386 +v -6.917659 0.380352 5.595177 +v -6.910172 0.378323 5.592892 +v -6.908975 0.410634 5.578275 +v -6.922866 0.380334 5.576367 +v -6.926798 0.381800 5.583280 +v -6.906648 0.410537 5.586018 +v -6.924448 0.381756 5.591016 +v -6.937865 0.344511 5.580578 +v -6.941840 0.345795 5.587502 +v -6.939489 0.345756 5.595239 +v -6.932658 0.344527 5.599388 +v -6.906240 0.376856 5.585979 +v -6.925112 0.342751 5.597086 +v -6.921138 0.341467 5.590162 +v -6.915380 0.378304 5.574082 +v -6.908590 0.376901 5.578243 +v -6.467372 0.349401 5.468748 +v -6.475150 0.348454 5.470748 +v -6.435575 -0.002953 5.459637 +v -6.427798 -0.002007 5.457636 +v -7.021320 0.001491 5.604011 +v -7.025295 0.002774 5.610935 +v -6.465622 0.350077 5.453793 +v -6.463605 0.350056 5.461623 +v -6.424030 -0.001352 5.450511 +v -6.426047 -0.001331 5.442681 +v -7.008568 -0.000270 5.620519 +v -7.004594 -0.001553 5.613595 +v -6.930320 0.342735 5.578277 +v -6.923489 0.341506 5.582426 +v -6.506455 0.421652 5.479721 +v -6.504086 0.425454 5.472989 +v -6.519906 0.412305 5.469110 +v -6.517845 0.412185 5.476928 +v -6.512210 0.416156 5.481154 +v -6.539700 0.434055 5.468784 +v -6.492957 0.400566 5.475749 +v -6.485562 0.403231 5.473855 +v -6.499778 0.398640 5.471855 +v -6.517538 0.416106 5.462379 +v -6.498300 0.400542 5.456977 +v -6.501803 0.398698 5.464027 +v -6.506146 0.425574 5.465171 +v -6.482059 0.405075 5.466805 +v -6.484083 0.405133 5.458976 +v -6.511782 0.421603 5.460945 +v -6.483591 0.372464 5.452847 +v -6.487270 0.371267 5.459947 +v -6.466916 0.375406 5.462553 +v -6.468935 0.375443 5.454723 +v -6.490904 0.403207 5.455083 +v -6.475940 0.374194 5.450881 +v -6.472718 0.349392 5.449977 +v -6.470595 0.374209 5.469653 +v -6.485250 0.371230 5.467776 +v -6.484262 0.347791 5.459102 +v -6.482245 0.347770 5.466933 +v -6.478246 0.372479 5.471618 +v -6.444688 -0.003617 5.447991 +v -6.442671 -0.003637 5.455821 +v -7.016114 0.001507 5.622820 +v -7.013775 -0.000286 5.601709 +v -6.480495 0.348446 5.451978 +v -6.440920 -0.002962 5.440866 +v -7.014945 0.000611 5.612266 +v -7.006945 -0.001514 5.605858 +v -7.022944 0.002736 5.618671 +v -6.434360 -0.002484 5.449252 +v -6.433144 -0.002015 5.438866 +vn -0.9628 -0.0000 0.2703 +vn -0.2703 -0.0000 -0.9628 +vn -0.0000 -1.0000 -0.0000 +vn 0.2703 -0.0000 0.9628 +vn 0.9628 -0.0000 -0.2703 +vn 0.1147 0.9929 -0.0322 +vn -0.2538 -0.9646 0.0713 +vn -0.4109 -0.9044 0.1154 +vn -0.2905 -0.0911 0.9525 +vn -0.1562 -0.9868 0.0439 +vn 0.1650 0.9852 -0.0463 +vn -0.7200 -0.0779 -0.6896 +vn -0.8473 -0.1146 -0.5186 +vn -0.4125 -0.0987 0.9056 +vn -0.5934 -0.7874 0.1666 +vn -0.7708 -0.5992 0.2164 +vn 0.9599 0.0768 -0.2695 +vn -0.9599 -0.0768 0.2695 +vn -0.3285 -0.2916 -0.8984 +vn -0.2132 0.5027 -0.8378 +vn 0.9584 0.1047 -0.2657 +vn 0.9556 0.1119 -0.2727 +vn 0.9560 0.1062 -0.2734 +vn -0.9546 -0.0656 -0.2905 +vn -0.2713 0.4967 -0.8245 +vn 0.9606 0.0768 -0.2672 +vn 0.8128 -0.5359 -0.2282 +vn 0.2583 0.5287 0.8086 +vn -0.1682 -0.6113 -0.7733 +vn 0.5026 -0.8531 -0.1399 +vn 0.8157 -0.5326 -0.2257 +vn 0.8159 -0.5337 -0.2225 +vn 0.8155 -0.5315 -0.2290 +vn 0.1150 0.9931 -0.0227 +vn 0.1578 0.9648 0.2101 +vn 0.1620 0.9584 0.2352 +vn 0.1918 -0.8811 0.4322 +vn -0.1045 -0.8634 0.4935 +vn -0.5382 -0.7743 0.3328 +vn 0.2640 -0.5705 0.7777 +vn -0.6795 -0.3669 0.6354 +vn -0.6237 -0.3997 0.6717 +vn -0.9611 -0.0465 0.2722 +vn 0.9577 0.1108 -0.2656 +vn 0.9578 0.1116 -0.2647 +vn -0.9610 -0.0794 0.2648 +vn 0.1915 0.5223 0.8310 +vn -0.9636 -0.0401 0.2643 +vn 0.9576 0.1101 -0.2663 +vn -0.9632 -0.0584 0.2624 +vn -0.6325 -0.7742 -0.0236 +vn -0.9609 -0.0813 0.2648 +vn -0.9591 -0.0847 0.2702 +vn -0.9631 -0.0769 0.2580 +vn -0.2010 0.8588 -0.4712 +vn -0.0017 0.9633 0.2684 +vn -0.0718 0.9970 0.0284 +vn -0.0014 0.9630 0.2693 +vn -0.0639 0.8610 -0.5046 +vn 0.9592 0.0845 -0.2697 +vn 0.9611 0.0831 -0.2636 +vn 0.9616 0.0796 -0.2626 +vn 0.9630 0.0778 -0.2580 +vn -0.0634 -0.8773 -0.4757 +vn 0.0044 -0.9658 -0.2594 +vn 0.9572 0.0880 -0.2757 +vn -0.9570 -0.0886 0.2762 +vn 0.0690 0.8673 0.4930 +vn 0.1948 0.8695 0.4538 +vn 0.9599 0.0744 -0.2701 +vn 0.9614 0.0849 -0.2617 +vn 0.0720 -0.9970 -0.0278 +vn -0.9597 -0.0732 0.2713 +vn 0.9596 0.0723 -0.2718 +vn -0.0000 1.0000 -0.0000 +vn 0.1869 0.7224 0.6657 +vn 0.1829 0.7268 0.6620 +vn 0.1829 0.7269 0.6620 +vn 0.2702 -0.0225 0.9625 +vn 0.2705 -0.0215 0.9625 +vn 0.2765 -0.0204 0.9608 +vn -0.2703 0.0218 -0.9625 +vn -0.2689 0.0219 -0.9629 +vn -0.2688 0.0219 -0.9629 +vn -0.1023 0.6937 -0.7129 +vn -0.0059 -0.9998 -0.0210 +vn 0.0059 0.9998 0.0211 +vn -0.1953 0.6915 -0.6954 +vn -0.1967 0.6962 -0.6904 +vn -0.0000 0.9997 0.0224 +vn 0.1953 -0.6915 0.6955 +vn -0.2683 -0.7257 -0.6335 +vn 0.1378 0.9903 -0.0166 +vn 0.1127 -0.6955 0.7096 +vn -0.1869 -0.7223 -0.6658 +vn -0.2702 0.0221 -0.9625 +vn -0.1981 0.7008 -0.6852 +vn -0.0275 -0.9995 -0.0142 +vn -0.2768 0.0214 -0.9607 +vn -0.2706 0.0224 -0.9624 +vn 0.4004 -0.6683 0.6270 +vn 0.0330 -0.6972 -0.7162 +vn 0.2848 -0.9532 -0.1020 +vn -0.2832 0.0183 -0.9589 +vn -0.2777 0.0214 -0.9604 +vn -0.0059 0.9997 0.0238 +vn -0.1957 -0.7326 -0.6520 +vn 0.1789 0.7313 0.6582 +vn 0.1812 -0.7022 0.6886 +vn -0.2884 0.0132 -0.9574 +vn -0.2842 0.0178 -0.9586 +vn 0.2827 -0.0175 0.9590 +vn 0.2773 -0.0205 0.9606 +vn 0.2834 -0.0172 0.9588 +vn 0.2877 -0.0124 0.9576 +vn -0.6099 0.5509 -0.5696 +vn -0.2508 0.5748 0.7789 +vn -0.3165 0.9421 0.1109 +vn -0.0485 0.6901 0.7221 +vn -0.4160 0.6614 -0.6240 +vn 0.2880 -0.0119 0.9576 +vn 0.2893 -0.0090 0.9572 +vn -0.7590 0.3812 -0.5278 +vn -0.4064 0.3978 0.8226 +vn -0.8042 0.5403 0.2479 +vn 0.5659 -0.8044 -0.1809 +vn 0.2384 -0.5868 -0.7738 +vn 0.5972 -0.5625 0.5718 +vn -0.5925 0.7833 0.1884 +vn -0.8772 0.3980 0.2686 +vn 0.8088 -0.2790 0.5177 +vn 0.4566 -0.2912 -0.8407 +vn 0.8761 -0.4005 -0.2683 +vn -0.2899 0.0092 -0.9570 +vn -0.2886 0.0122 -0.9574 +vn 0.7856 -0.5692 -0.2426 +vn 0.3984 -0.4135 -0.8187 +vn 0.7506 -0.3964 0.5287 +vn 0.2494 -0.0027 0.9684 +vn 0.2494 -0.0025 0.9684 +vn -0.8408 0.1694 -0.5141 +vn 0.9619 0.1162 -0.2474 +vn 0.8408 -0.1695 0.5141 +vn -0.4570 0.2899 0.8409 +vn -0.8093 0.2777 -0.5177 +vn 0.2888 -0.0080 0.9574 +vn 0.2898 -0.0055 0.9571 +vn -0.2906 0.0054 -0.9568 +vn -0.2902 0.0070 -0.9569 +vn 0.0820 0.6472 -0.7579 +vn 0.4676 0.6748 0.5710 +vn -0.3449 -0.9356 0.0754 +vn 0.2673 -0.0216 0.9634 +vn 0.2622 -0.0207 0.9648 +vn 0.2565 -0.0182 0.9664 +vn 0.2614 -0.0205 0.9650 +vn 0.2792 0.7239 0.6309 +vn -0.2671 0.0227 -0.9634 +vn -0.2620 0.0218 -0.9648 +vn -0.1163 -0.9932 0.0106 +vn 0.2675 -0.0222 0.9633 +vn 0.6517 0.5630 0.5083 +vn -0.5691 -0.8103 0.1394 +vn 0.2520 -0.0112 0.9677 +vn 0.2556 -0.0173 0.9666 +vn -0.2338 -0.5801 0.7802 +vn -0.2612 0.0211 -0.9650 +vn -0.2562 0.0187 -0.9664 +vn 0.3983 0.9128 -0.0901 +vn -0.4403 -0.6896 -0.5749 +vn -0.0575 -0.6617 0.7476 +vn -0.3996 -0.3366 0.8526 +vn -0.8023 -0.3512 -0.4827 +vn 0.8562 0.4682 -0.2183 +vn -0.2516 0.0114 -0.9678 +vn -0.2552 0.0175 -0.9667 +vn -0.2510 0.0104 -0.9679 +vn -0.2493 0.0032 -0.9684 +vn 0.2646 0.5405 -0.7986 +vn 0.6460 0.7463 -0.1602 +vn -0.6142 -0.6033 -0.5088 +vn 0.9597 0.1344 -0.2469 +vn -0.2494 0.0027 -0.9684 +vn 0.4653 0.0928 -0.8803 +vn 0.4657 0.0866 -0.8807 +vn 0.8765 0.0969 0.4715 +vn 0.8771 0.0905 0.4717 +vn 0.8771 0.0904 0.4717 +vn 0.2503 -0.0030 0.9682 +vn 0.2520 -0.0100 0.9677 +vn -0.8490 -0.4821 0.2164 +vn 0.8055 0.3437 0.4828 +vn 0.4023 0.3294 -0.8542 +vn -0.9619 -0.1162 0.2474 +vn 0.2906 -0.0053 0.9568 +vn -0.8772 -0.0898 -0.4716 +vn -0.8777 -0.0839 -0.4718 +vn -0.2906 0.0053 -0.9568 +vn -0.8767 -0.0956 -0.4714 +vn -0.4654 -0.0916 0.8804 +vn -0.4657 -0.0860 0.8808 +vn -0.4657 -0.0859 0.8808 +vn -0.9600 -0.1319 0.2468 +vn -0.2116 -0.9756 0.0594 +vn -0.2115 -0.9756 0.0594 +vn -0.2116 -0.9756 0.0593 +vn 0.1127 -0.9931 -0.0317 +vn 0.1128 -0.9931 -0.0316 +vn 0.4875 -0.1770 -0.8550 +vn -0.2494 0.0025 -0.9684 +vn -0.4875 0.1770 0.8550 +vn -0.4660 -0.0803 0.8811 +vn 0.9273 -0.2449 -0.2830 +vn 0.4660 0.0803 -0.8811 +vn -0.9273 0.2449 0.2830 +vn 0.8777 0.0839 0.4718 +vn 0.2702 -0.0221 0.9625 +vn 0.2706 -0.0224 0.9624 +vn 0.2769 -0.0214 0.9607 +vn 0.1953 -0.6915 0.6954 +vn 0.1126 -0.6956 0.7096 +vn 0.2689 -0.0219 0.9629 +vn 0.2688 -0.0219 0.9629 +vn 0.2620 -0.0218 0.9648 +vn 0.2670 -0.0228 0.9634 +vn -0.2702 0.0224 -0.9626 +vn 0.2703 -0.0218 0.9625 +vn 0.4004 -0.6683 0.6269 +vn 0.2848 -0.9532 -0.1019 +vn 0.1811 -0.7023 0.6885 +vn 0.5659 -0.8044 -0.1808 +vn 0.2833 -0.0183 0.9589 +vn 0.2777 -0.0214 0.9604 +vn 0.2841 -0.0178 0.9586 +vn 0.2884 -0.0131 0.9574 +vn -0.4160 0.6614 -0.6241 +vn 0.2886 -0.0123 0.9574 +vn 0.2899 -0.0092 0.9570 +vn 0.5972 -0.5626 0.5717 +vn -0.8093 0.2777 -0.5176 +vn 0.8088 -0.2790 0.5176 +vn -0.2899 0.0091 -0.9570 +vn -0.2886 0.0123 -0.9574 +vn 0.7506 -0.3964 0.5286 +vn 0.2495 -0.0027 0.9684 +vn -0.8408 0.1695 -0.5141 +vn 0.8409 -0.1695 0.5140 +vn 0.2902 -0.0070 0.9569 +vn 0.2911 -0.0057 0.9567 +vn -0.2906 0.0055 -0.9568 +vn 0.2563 -0.0187 0.9664 +vn 0.2612 -0.0210 0.9651 +vn -0.0576 -0.6618 0.7475 +vn -0.2675 0.0221 -0.9633 +vn 0.2516 -0.0114 0.9678 +vn 0.2552 -0.0176 0.9667 +vn -0.2339 -0.5802 0.7802 +vn -0.9600 -0.1319 0.2470 +vn 0.2510 -0.0104 0.9679 +vn 0.2493 -0.0032 0.9684 +vn -0.3997 -0.3367 0.8526 +vn -0.4655 -0.0916 0.8803 +vn -0.4658 -0.0860 0.8807 +vn -0.4658 -0.0859 0.8807 +vn -0.4661 -0.0803 0.8811 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt 0.686647 0.000000 +vt 0.870176 0.996278 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.782584 0.965408 +vt 0.870573 0.970227 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.833010 0.965282 +vt 0.908785 0.026051 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.968598 0.070112 +vt 0.979071 0.026051 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.968598 0.371019 +vt 0.757324 0.262250 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.173427 0.241164 +vt 0.758439 0.080128 +vt -0.973130 0.033128 +vt -0.123087 0.241439 +vt 0.978437 0.000000 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt 0.737072 0.000128 +vt 0.908263 0.000000 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.409642 -0.009898 +vt 0.677629 0.482142 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.240570 0.058726 +vt 0.669677 0.481452 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.786789 0.246652 +vt 0.991724 0.699406 +vt 0.928489 0.277215 +vt 0.873308 0.505274 +vt 0.786789 0.155990 +vt 0.958960 0.029326 +vt 0.991724 0.483440 +vt 0.977373 0.702462 +vt -0.140978 0.246673 +vt 0.958492 0.010078 +vt -0.156145 0.246590 +vt 0.929566 0.080357 +vt -0.144664 0.252235 +vt 0.984385 0.731379 +vt 0.945934 0.020741 +vt -0.159831 0.252152 +vt 0.984385 0.500820 +vt 0.989649 0.087406 +vt 0.706860 0.007022 +vt 0.847263 0.989602 +vt 0.686599 0.714388 +vt 0.721837 0.007060 +vt 0.884682 0.006674 +vt 0.720919 0.017861 +vt 0.673632 0.527027 +vt 0.872079 0.017335 +vt 0.705942 0.017823 +vt 0.673632 0.731676 +vt 0.690157 0.523535 +vt 0.802894 0.958412 +vt 0.847659 0.963551 +vt 0.695298 0.714388 +vt 0.661237 0.495044 +vt 0.817871 0.958374 +vt 0.885205 0.032725 +vt 0.661237 0.722645 +vt 0.693293 0.503638 +vt 0.944329 0.029337 +vt 0.981154 0.731379 +vt 0.977373 0.486830 +vt 0.989649 0.263822 +vt 0.873305 0.723869 +vt 0.981154 0.500820 +vt 0.870573 0.032734 +vt 0.693293 0.761173 +vt 0.679412 0.527027 +vt 0.695298 0.493838 +vt 0.679412 0.731676 +vt 0.826600 0.493835 +vt 0.826977 0.731673 +vt 0.826600 0.714385 +vt 0.814491 0.495042 +vt 0.122435 0.638558 +vt 0.015922 0.839080 +vt 0.835047 0.699404 +vt 0.993361 0.510073 +vt 0.758428 0.504317 +vt 0.072861 0.638558 +vt 0.015474 0.619132 +vt 0.835047 0.483438 +vt 0.845328 0.702461 +vt 0.015197 0.626266 +vt 0.014109 0.491099 +vt 0.993356 0.728667 +vt 0.758425 0.722912 +vt 0.833436 0.500823 +vt 0.891028 0.725398 +vt 0.672547 0.500827 +vt 0.752235 0.729690 +vt 0.667246 0.727168 +vt 0.891033 0.506802 +vt 0.752238 0.507120 +vt 0.071993 0.783837 +vt 0.969610 0.493832 +vt 0.987699 0.731670 +vt 0.641343 0.509140 +vt 0.689355 0.726560 +vt 0.969610 0.714382 +vt 0.122436 0.783837 +vt 0.641344 0.743247 +vt 0.833436 0.731382 +vt 0.845328 0.486829 +vt 0.814491 0.722643 +vt 0.825052 0.503733 +vt 0.016195 0.832047 +vt 0.634466 0.494220 +vt 0.825052 0.761267 +vt 0.826977 0.527024 +vt 0.022424 0.783234 +vt 0.035852 0.889154 +vt 0.043016 0.971597 +vt 0.706398 0.505224 +vt 0.072863 0.808180 +vt 0.028940 0.807392 +vt 0.010039 0.882150 +vt 0.137154 0.974703 +vt 0.631023 0.892124 +vt 0.649326 0.890699 +vt 0.121379 0.984023 +vt 0.648470 0.892315 +vt 0.072864 0.783142 +vt 0.043889 0.943476 +vt 0.078385 0.805896 +vt 0.075977 0.941215 +vt 0.613560 0.946909 +vt 0.672547 0.731385 +vt 0.701510 0.486829 +vt 0.669481 0.490576 +vt 0.072863 0.646796 +vt 0.648470 0.506013 +vt 0.080915 0.841605 +vt 0.968560 0.503835 +vt 0.102906 0.865583 +vt 0.634467 0.887149 +vt 0.987699 0.527021 +vt 0.968560 0.761369 +vt 0.690090 0.495972 +vt 0.701510 0.702461 +vt 0.603150 0.865583 +vt 0.014109 0.884028 +vt 0.706395 0.729929 +vt 0.816556 0.714481 +vt 0.023239 0.646888 +vt 0.040534 0.495932 +vt 0.081188 0.621686 +vt 0.007711 0.495744 +vt 0.041481 0.497122 +vt 0.080911 0.628820 +vt 0.003028 0.888966 +vt 0.041481 0.887645 +vt 0.060838 0.971173 +vt 0.631023 0.505822 +vt 0.649326 0.500176 +vt 0.081188 0.834572 +vt 0.805889 0.743046 +vt 0.122312 0.806766 +vt 0.988155 0.503653 +vt 0.115555 0.935422 +vt 0.904138 0.912557 +vt 0.988155 0.735605 +vt 0.813022 0.494763 +vt 0.890960 0.912565 +vt 0.735836 0.641861 +vt 0.693936 0.468644 +vt 0.027417 0.833361 +vt 0.420996 0.961603 +vt 0.032040 0.784613 +vt 0.284612 0.483847 +vt 0.656925 0.504187 +vt 0.681549 0.720168 +vt 0.066750 0.834450 +vt 0.299225 0.449509 +vt 0.999708 0.720167 +vt 0.989627 0.743247 +vt 0.121899 0.832034 +vt 0.693936 0.449159 +vt 0.420996 0.999935 +vt 0.008277 0.862094 +vt 0.082562 0.831201 +vt 0.741580 0.718717 +vt 0.678836 0.505353 +vt 0.815743 0.487362 +vt 0.741523 0.585977 +vt 0.678836 0.699564 +vt 0.553315 0.945729 +vt 0.982243 0.588758 +vt 0.460393 1.018433 +vt 0.949871 0.788878 +vt 0.982305 0.727355 +vt 0.668954 0.502598 +vt 0.949657 0.691167 +vt 0.979056 0.490574 +vt 0.078628 0.952623 +vt 0.035428 0.887064 +vt 0.812426 0.730862 +vt 0.971935 0.642457 +vt 0.805889 0.532195 +vt 0.173975 1.012235 +vt 0.908785 0.976444 +vt 0.726484 0.788878 +vt 0.984477 0.500479 +vt 0.894591 0.976453 +vt 0.737043 0.505375 +vt 0.726270 0.691167 +vt 0.987420 0.694407 +vt 0.999899 0.506981 +vt 0.968797 0.500648 +vt 0.989626 0.516135 +vt 0.652223 0.697892 +vt 0.656922 0.730164 +vt 0.681740 0.506981 +vt 0.985798 0.713641 +vt 0.053549 0.993732 +vt 0.043551 0.873068 +vt 0.522988 0.991572 +vt 0.062665 0.961706 +vt 0.169656 0.991799 +vt 0.060838 0.809705 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +s 1 +usemtl CabnetDoors +f 9416/19414/6965 9417/19418/6965 9418/19423/6965 9419/19427/6965 9420/19431/6965 9421/19437/6965 9422/19440/6965 9423/19443/6965 +f 9421/19436/6966 9420/19432/6966 9424/19447/6966 9425/19450/6966 +f 9426/19452/6967 9427/19456/6967 9428/19458/6967 9429/19459/6967 +f 9430/19463/6968 9431/19464/6968 9417/19419/6968 9416/19413/6968 +f 9431/19465/6969 9430/19462/6969 9432/19467/6969 9433/19468/6969 +f 9434/19470/6969 9435/19473/6969 9432/19467/6969 9430/19462/6969 +f 9434/19471/6968 9430/19463/6968 9416/19413/6968 9436/19475/6968 +f 9429/19460/6966 9421/19436/6966 9425/19450/6966 9426/19453/6966 +f 9436/19476/6965 9416/19414/6965 9423/19443/6965 9422/19440/6965 9421/19437/6965 9429/19461/6965 9428/19457/6965 9437/19479/6965 +f 9419/19428/6970 9420/19433/6970 9438/19482/6970 9439/19486/6970 +f 9429/19461/6965 9428/19457/6965 9422/19440/6965 9421/19437/6965 +f 9423/19444/6969 9416/19415/6969 9436/19477/6969 9437/19480/6969 +f 9421/19438/6971 9422/19441/6971 9440/19490/6971 9441/19492/6971 +f 9441/19492/6972 9440/19490/6972 9442/19494/6972 9443/19497/6972 +f 9444/19500/6972 9447/19508/6972 9446/19505/6972 9445/19503/6972 +f 9422/19442/6973 9419/19429/6973 9439/19487/6973 9440/19491/6973 +f 9416/19416/6974 9444/19500/6974 9445/19503/6974 9423/19445/6974 +f 9418/19424/6975 9449/19515/6975 9448/19511/6975 9417/19420/6975 +f 9423/19446/6976 9445/19504/6976 9449/19516/6976 9418/19425/6976 +f 9420/19434/6977 9421/19439/6977 9441/19493/6977 9438/19484/6977 +f 9417/19421/6978 9448/19512/6978 9444/19501/6978 9416/19417/6978 +f 9443/19498/6979 9442/19495/6979 9450/19520/6979 9451/19524/6979 +f 9452/19527/6980 9446/19506/6980 9447/19509/6980 9453/19529/6980 +f 9448/19513/6968 9455/19532/6968 9454/19530/6968 9453/19528/6968 +f 9440/19491/6968 9439/19487/6968 9450/19519/6968 9442/19496/6968 +f 9439/19488/6981 9438/19483/6981 9456/19536/6981 9457/19541/6981 +f 9448/19513/6968 9453/19528/6968 9447/19510/6968 9444/19502/6968 +f 9438/19484/6966 9441/19493/6966 9443/19499/6966 9451/19522/6966 +f 9445/19504/6966 9446/19507/6966 9452/19525/6966 9449/19516/6966 +f 9456/19537/6966 9458/19545/6966 9459/19548/6966 9460/19552/6966 +f 9455/19532/6968 9462/19559/6968 9461/19555/6968 9454/19530/6968 +f 9438/19485/6966 9451/19523/6966 9458/19546/6966 9456/19538/6966 +f 9451/19524/6982 9450/19520/6982 9463/19562/6982 9458/19547/6982 +f 9449/19517/6981 9464/19564/6981 9455/19533/6981 9448/19514/6981 +f 9452/19526/6966 9465/19568/6966 9464/19565/6983 9449/19518/6966 +f 9453/19529/6982 9454/19531/6982 9465/19569/6982 9452/19527/6982 +f 9450/19521/6968 9439/19489/6968 9457/19542/6968 9463/19563/6968 +f 9466/19570/6984 9460/19554/6984 9467/19574/6984 9468/19575/6984 +f 9469/19577/6985 9472/19585/6986 9471/19583/6987 9470/19580/6987 +f 9458/19547/6982 9463/19562/6982 9473/19587/6982 9459/19549/6982 +f 9455/19534/6968 9474/19590/6968 9470/19582/6968 9462/19560/6968 +f 9465/19568/6966 9476/19597/6966 9475/19593/6988 9464/19565/6983 +f 9463/19563/6968 9457/19542/6968 9477/19599/6968 9473/19588/6968 +f 9454/19531/6982 9461/19556/6982 9476/19596/6982 9465/19569/6982 +f 9460/19553/6989 9459/19550/6989 9478/19602/6989 9467/19573/6989 +f 9456/19539/6966 9460/19554/6966 9466/19570/6966 9479/19604/6966 +f 9480/19607/6990 9479/19605/6981 9466/19571/6981 9481/19610/6990 +f 9482/19613/6990 9469/19578/6990 9470/19581/6981 9474/19591/6981 +f 9480/19608/6990 9481/19611/6990 9469/19579/6990 9482/19614/6990 +f 9464/19566/6991 9482/19615/6991 9474/19592/6991 9455/19535/6991 +f 9470/19582/6992 9471/19584/6992 9483/19617/6992 9462/19560/6992 +f 9476/19597/6993 9485/19621/6993 9484/19618/6993 9475/19593/6993 +f 9457/19543/6994 9480/19609/6995 9482/19615/6996 9464/19566/6983 +f 9457/19543/6994 9456/19540/6997 9479/19606/6997 9480/19609/6995 +f 9486/19625/6998 9487/19629/6998 9488/19633/6999 9489/19637/7000 +f 9490/19641/7001 9491/19644/7002 9492/19647/7003 9493/19650/7001 +f 9473/19588/7004 9477/19599/7005 9491/19645/7006 9490/19642/7004 +f 9459/19551/7007 9473/19589/7007 9490/19643/7007 9478/19603/7007 +f 9481/19611/7008 9494/19654/7009 9472/19586/6986 9469/19579/6985 +f 9475/19594/6988 9484/19619/7010 9491/19646/7006 9477/19600/7005 +f 9462/19561/7011 9483/19616/7011 9495/19658/7011 9461/19557/7011 +f 9461/19558/7012 9495/19656/7012 9485/19622/7012 9476/19598/7012 +f 9481/19612/7008 9466/19572/7013 9468/19576/7013 9494/19655/7009 +f 9484/19619/7014 9496/19659/7015 9492/19648/7003 9491/19646/7002 +f 9497/19662/7016 9498/19666/7017 9499/19670/7018 9493/19651/7018 +f 9467/19573/7019 9478/19602/7019 9499/19671/7019 9487/19630/7019 +f 9488/19634/7020 9487/19631/7021 9499/19672/7021 9498/19667/7022 +f 9468/19575/7023 9467/19574/7023 9487/19632/7023 9486/19626/7023 +f 9489/19638/7024 9500/19674/7025 9501/19677/7026 9486/19627/7027 +f 9485/19623/7028 9497/19663/7029 9496/19660/7015 9484/19620/7028 +f 9472/19585/7030 9500/19675/7025 9489/19639/7024 9471/19583/7030 +f 9495/19657/7031 9498/19668/7017 9497/19664/7016 9485/19624/7031 +f 9483/19616/7032 9488/19635/7020 9498/19669/7022 9495/19658/7032 +f 9471/19584/7033 9489/19640/7000 9488/19636/6999 9483/19617/7033 +f 9494/19654/7034 9501/19678/7026 9500/19676/7025 9472/19586/7035 +f 9497/19665/7029 9493/19652/7036 9492/19649/7003 9496/19661/7015 +f 9478/19603/7037 9490/19643/7037 9493/19653/7037 9499/19673/7037 +f 9494/19655/7034 9468/19576/7038 9486/19628/7038 9501/19679/7026 +f 9433/19468/6969 9432/19467/6969 9502/19680/6969 9503/19681/6969 +f 9425/19451/6969 9424/19448/6969 9503/19681/6969 9502/19680/6969 +f 9502/19680/6969 9432/19467/6969 9435/19473/6969 9427/19455/6969 +f 9427/19455/6969 9426/19454/6969 9425/19451/6969 9502/19680/6969 +f 9431/19466/7039 9433/19469/7039 9418/19426/7039 9417/19422/7039 +f 9419/19430/7039 9503/19682/7039 9424/19449/7039 9420/19435/7039 +f 9418/19426/7039 9433/19469/7039 9503/19682/7039 9419/19430/7039 +f 9437/19481/6967 9435/19474/6967 9434/19472/6967 9436/19478/6967 +f 9428/19458/6967 9427/19456/6967 9435/19474/6967 9437/19481/6967 +f 9477/19601/7005 9457/19544/6994 9464/19567/6983 9475/19595/6988 +f 9504/19683/7040 9505/19684/7040 9506/19685/7041 9507/19687/7042 +f 9508/19688/7043 9507/19686/7043 9509/19691/7044 9510/19693/7045 +f 9511/19695/7046 9512/19696/7046 9513/19697/7047 9514/19699/7048 +f 9513/19697/7049 9515/19700/7049 9516/19702/7049 9517/19704/7049 +f 9518/19706/7050 9519/19707/7050 9520/19708/7050 9521/19710/7050 +f 9522/19712/7051 9505/19684/7051 9523/19713/7051 9515/19701/7051 +f 9512/19696/7052 9522/19711/7052 9515/19700/7052 9513/19697/7052 +f 9524/19714/7053 9525/19715/7053 9522/19711/7052 9512/19696/7052 +f 9525/19716/7054 9506/19685/7054 9505/19684/7051 9522/19712/7051 +f 9526/19717/7055 9518/19705/7055 9521/19709/7055 9527/19718/7055 +f 9508/19689/7055 9528/19721/7055 9518/19705/7055 9526/19717/7055 +f 9528/19720/7050 9529/19722/7050 9519/19707/7050 9518/19706/7050 +f 9520/19708/7056 9514/19698/7056 9530/19724/7056 9531/19725/7056 +f 9515/19701/7057 9523/19713/7057 9532/19726/7057 9516/19703/7057 +f 9527/19718/7058 9521/19709/7058 9533/19728/7058 9534/19730/7058 +f 9519/19707/7059 9511/19694/7059 9514/19698/7059 9520/19708/7059 +f 9529/19722/7059 9535/19732/7059 9511/19694/7059 9519/19707/7059 +f 9535/19731/7060 9524/19714/7060 9512/19696/7046 9511/19695/7046 +f 9525/19715/7053 9524/19714/7053 9536/19733/7061 9537/19735/7061 +f 9529/19722/7062 9528/19720/7062 9538/19736/7062 9539/19738/7062 +f 9524/19714/7060 9535/19731/7060 9540/19739/7063 9536/19733/7064 +f 9541/19741/7040 9523/19713/7040 9505/19684/7040 9504/19683/7040 +f 9538/19737/7065 9510/19692/7065 9542/19744/7065 9543/19746/7065 +f 9540/19740/7066 9539/19738/7066 9544/19747/7066 9545/19749/7066 +f 9539/19738/7067 9538/19736/7067 9543/19745/7067 9544/19747/7067 +f 9536/19733/7064 9540/19739/7063 9545/19750/7068 9546/19751/7069 +f 9506/19685/7054 9525/19716/7054 9537/19734/7070 9547/19752/7070 +f 9535/19732/7071 9529/19722/7071 9539/19738/7071 9540/19740/7071 +f 9507/19687/7042 9506/19685/7041 9547/19752/7072 9509/19690/7072 +f 9528/19721/7073 9508/19689/7073 9510/19692/7073 9538/19737/7073 +f 9546/19751/7069 9545/19750/7068 9548/19753/7074 9549/19754/7075 +f 9542/19744/7076 9550/19755/7077 9551/19758/7078 9552/19759/7079 +f 9553/19760/7080 9546/19751/7080 9549/19754/7080 9554/19762/7080 +f 9550/19755/7081 9555/19765/7081 9556/19767/7081 9551/19758/7081 +f 9547/19752/7082 9537/19734/7082 9553/19761/7082 9555/19766/7082 +f 9509/19690/7083 9547/19752/7083 9555/19766/7083 9550/19756/7083 +f 9537/19735/7084 9536/19733/7084 9546/19751/7084 9553/19760/7084 +f 9510/19693/7045 9509/19691/7044 9550/19757/7077 9542/19743/7076 +f 9552/19759/7079 9551/19758/7078 9557/19771/7085 9558/19772/7086 +f 9554/19762/7087 9549/19754/7087 9559/19773/7087 9560/19775/7087 +f 9551/19758/7088 9556/19767/7088 9561/19776/7088 9557/19771/7088 +f 9556/19768/7089 9554/19763/7089 9560/19774/7089 9561/19777/7089 +f 9544/19747/7090 9543/19745/7090 9562/19778/7090 9563/19781/7090 +f 9545/19750/7091 9544/19748/7091 9563/19783/7091 9548/19753/7091 +f 9543/19746/7092 9542/19744/7092 9552/19759/7092 9562/19780/7092 +f 9555/19766/7093 9553/19761/7093 9554/19764/7093 9556/19769/7093 +f 9561/19777/7094 9560/19774/7094 9564/19785/7094 9565/19786/7094 +f 9566/19788/7095 9558/19772/7095 9567/19789/7095 9568/19790/7095 +f 9569/19792/7096 9570/19794/7096 9571/19796/7096 9572/19798/7096 +f 9570/19794/7097 9566/19787/7097 9568/19791/7097 9571/19796/7097 +f 9549/19754/7075 9548/19753/7074 9569/19793/7098 9559/19773/7099 +f 9563/19782/7100 9562/19779/7100 9566/19787/7100 9570/19794/7100 +f 9548/19753/7101 9563/19783/7101 9570/19795/7101 9569/19793/7101 +f 9562/19780/7102 9552/19759/7102 9558/19772/7102 9566/19788/7102 +f 9573/19799/7103 9574/19801/7103 9575/19803/7104 9576/19804/7104 +f 9564/19784/7105 9577/19807/7105 9578/19808/7105 9579/19810/7105 +f 9580/19813/7106 9581/19815/7106 9582/19817/7106 9583/19818/7106 +f 9568/19790/7107 9567/19789/7107 9584/19821/7107 9585/19823/7107 +f 9557/19770/7108 9561/19777/7108 9565/19786/7108 9586/19827/7108 +f 9560/19775/7109 9559/19773/7109 9577/19807/7109 9564/19784/7109 +f 9558/19772/7086 9557/19771/7085 9586/19826/7110 9567/19789/7111 +f 9559/19773/7099 9569/19793/7098 9572/19797/7112 9577/19807/7113 +f 9517/19704/7114 9516/19702/7114 9587/19828/7114 9588/19830/7114 +f 9532/19726/7115 9589/19831/7115 9590/19833/7115 9591/19837/7115 +f 9533/19727/7116 9531/19725/7116 9592/19838/7116 9593/19840/7116 +f 9589/19832/7117 9534/19729/7118 9594/19842/7119 9590/19834/7120 +f 9523/19713/7121 9541/19741/7121 9589/19831/7121 9532/19726/7121 +f 9514/19699/7048 9513/19697/7047 9517/19704/7122 9530/19723/7123 +f 9521/19710/7124 9520/19708/7124 9531/19725/7124 9533/19727/7124 +f 9541/19742/7125 9527/19719/7125 9534/19729/7118 9589/19832/7117 +f 9591/19836/7126 9590/19835/7126 9595/19844/7126 9596/19847/7126 +f 9593/19840/7127 9592/19838/7127 9597/19848/7127 9598/19851/7127 +f 9590/19835/7120 9594/19843/7119 9599/19854/7128 9595/19844/7129 +f 9594/19843/7130 9593/19841/7130 9598/19852/7130 9599/19854/7130 +f 9530/19723/7123 9517/19704/7122 9588/19830/7131 9600/19856/7132 +f 9516/19703/7133 9532/19726/7133 9591/19837/7133 9587/19829/7133 +f 9531/19725/7134 9530/19724/7134 9600/19855/7134 9592/19838/7134 +f 9534/19730/7135 9533/19728/7135 9593/19841/7135 9594/19843/7135 +f 9599/19854/7136 9598/19852/7136 9601/19857/7136 9602/19859/7136 +f 9597/19849/7137 9603/19860/7137 9604/19861/7137 9605/19863/7137 +f 9606/19865/7138 9596/19845/7138 9607/19868/7138 9608/19870/7138 +f 9603/19860/7139 9609/19872/7140 9610/19873/7141 9604/19861/7142 +f 9588/19830/7143 9587/19828/7143 9606/19867/7143 9609/19872/7143 +f 9600/19856/7132 9588/19830/7131 9609/19872/7140 9603/19860/7139 +f 9587/19829/7144 9591/19837/7144 9596/19846/7144 9606/19866/7144 +f 9592/19839/7145 9600/19856/7145 9603/19860/7145 9597/19849/7145 +f 9608/19870/7146 9607/19868/7146 9581/19815/7146 9580/19813/7146 +f 9604/19861/7142 9610/19873/7141 9611/19874/7147 9612/19876/7147 +f 9610/19873/7148 9608/19871/7148 9580/19814/7149 9611/19874/7149 +f 9607/19868/7150 9613/19877/7150 9573/19800/7151 9581/19815/7152 +f 9595/19844/7129 9599/19854/7128 9602/19859/7153 9613/19878/7154 +f 9598/19853/7155 9597/19850/7155 9605/19864/7155 9601/19858/7155 +f 9596/19847/7156 9595/19844/7156 9613/19878/7156 9607/19869/7156 +f 9609/19872/7157 9606/19867/7157 9608/19871/7157 9610/19873/7157 +f 9614/19879/7158 9615/19881/7158 9616/19882/7158 9617/19884/7158 +f 9567/19789/7111 9586/19826/7110 9618/19887/7159 9584/19821/7159 +f 9615/19881/7160 9612/19875/7160 9619/19890/7161 9616/19882/7161 +f 9577/19807/7113 9572/19797/7112 9620/19893/7162 9578/19808/7162 +f 9605/19864/7163 9604/19862/7163 9612/19875/7160 9615/19881/7160 +f 9602/19859/7164 9601/19857/7164 9614/19880/7165 9574/19801/7166 +f 9613/19878/7154 9602/19859/7153 9574/19801/7103 9573/19799/7103 +f 9601/19858/7167 9605/19864/7167 9615/19881/7167 9614/19879/7167 +f 9621/19896/7168 9579/19811/7168 9578/19809/7168 9620/19894/7168 +f 9585/19824/7168 9621/19896/7168 9620/19894/7168 9622/19897/7169 +f 9584/19822/7170 9618/19888/7168 9621/19896/7168 9585/19824/7168 +f 9618/19888/7168 9623/19899/7169 9579/19811/7168 9621/19896/7168 +f 9624/19901/7171 9583/19819/7171 9582/19816/7171 9576/19805/7171 +f 9617/19885/7172 9624/19901/7171 9576/19805/7171 9575/19802/7171 +f 9616/19883/7172 9619/19891/7172 9624/19901/7171 9617/19885/7172 +f 9619/19891/7172 9625/19902/7172 9583/19819/7171 9624/19901/7171 +f 9572/19798/7173 9571/19796/7173 9622/19898/7173 9620/19895/7173 +f 9612/19876/7147 9611/19874/7147 9625/19903/7174 9619/19892/7174 +f 9586/19827/7175 9565/19786/7175 9623/19900/7175 9618/19889/7175 +f 9574/19801/7166 9614/19880/7165 9617/19886/7176 9575/19803/7176 +f 9571/19796/7177 9568/19791/7177 9585/19825/7177 9622/19898/7177 +f 9611/19874/7149 9580/19814/7149 9583/19820/7178 9625/19903/7178 +f 9565/19786/7179 9564/19785/7179 9579/19812/7179 9623/19900/7179 +f 9581/19815/7152 9573/19800/7151 9576/19806/7180 9582/19817/7180 +f 9626/19905/7040 9627/19906/7040 9628/19907/7041 9629/19909/7042 +f 9630/19910/7181 9629/19908/7181 9631/19912/7182 9632/19913/7183 +f 9633/19914/7056 9634/19916/7056 9635/19919/7056 9636/19921/7056 +f 9637/19923/7050 9638/19924/7050 9633/19915/7050 9639/19927/7050 +f 9640/19929/7051 9627/19906/7051 9641/19930/7051 9642/19931/7051 +f 9643/19933/7052 9640/19928/7052 9642/19932/7052 9644/19934/7052 +f 9645/19935/7052 9646/19936/7052 9640/19928/7052 9643/19933/7052 +f 9646/19937/7054 9628/19907/7054 9627/19906/7051 9640/19929/7051 +f 9647/19938/7184 9637/19922/7184 9639/19926/7184 9648/19939/7184 +f 9630/19910/7184 9649/19941/7184 9637/19922/7184 9647/19938/7184 +f 9649/19940/7050 9650/19942/7050 9638/19924/7050 9637/19923/7050 +f 9642/19931/7057 9641/19930/7057 9651/19944/7057 9652/19946/7057 +f 9648/19939/7185 9639/19926/7185 9653/19947/7185 9654/19949/7185 +f 9655/19950/7186 9648/19939/7187 9654/19949/7188 9656/19952/7189 +f 9638/19925/7059 9657/19954/7059 9634/19916/7059 9633/19914/7059 +f 9650/19943/7059 9658/19956/7059 9657/19954/7059 9638/19925/7059 +f 9646/19936/7061 9645/19935/7061 9659/19957/7061 9660/19959/7061 +f 9650/19942/7062 9649/19940/7062 9661/19960/7062 9662/19962/7062 +f 9645/19935/7190 9658/19955/7190 9663/19965/7063 9659/19957/7064 +f 9647/19938/7191 9626/19904/7191 9629/19908/7181 9630/19910/7181 +f 9648/19939/7187 9655/19950/7186 9626/19904/7191 9647/19938/7191 +f 9655/19951/7040 9641/19930/7040 9627/19906/7040 9626/19905/7040 +f 9664/19966/7082 9660/19958/7082 9665/19968/7082 9666/19970/7082 +f 9661/19961/7192 9632/19913/7192 9667/19972/7192 9668/19974/7192 +f 9663/19964/7066 9662/19963/7066 9669/19975/7066 9670/19978/7066 +f 9662/19962/7193 9661/19960/7193 9668/19973/7193 9669/19977/7193 +f 9628/19907/7054 9646/19937/7054 9660/19958/7070 9664/19966/7070 +f 9658/19956/7071 9650/19943/7071 9662/19963/7071 9663/19964/7071 +f 9629/19909/7042 9628/19907/7041 9664/19966/7072 9631/19911/7072 +f 9649/19941/7194 9630/19910/7194 9632/19913/7194 9661/19961/7194 +f 9670/19979/7091 9669/19976/7091 9671/19983/7091 9672/19984/7091 +f 9669/19977/7195 9668/19973/7195 9673/19985/7195 9671/19981/7195 +f 9674/19989/7069 9670/19979/7068 9672/19984/7074 9675/19990/7075 +f 9667/19972/7196 9676/19992/7197 9677/19993/7198 9678/19994/7199 +f 9631/19911/7083 9664/19966/7083 9666/19970/7083 9676/19991/7083 +f 9660/19959/7200 9659/19957/7200 9674/19988/7200 9665/19967/7200 +f 9632/19913/7183 9631/19912/7182 9676/19992/7197 9667/19972/7196 +f 9659/19957/7064 9663/19965/7063 9670/19980/7068 9674/19988/7069 +f 9678/19994/7199 9677/19993/7198 9679/19996/7201 9680/19997/7202 +f 9681/20000/7087 9675/19990/7087 9682/20001/7087 9683/20002/7087 +f 9677/19993/7088 9684/20006/7088 9685/20007/7088 9679/19996/7088 +f 9684/20004/7089 9681/19998/7089 9683/20003/7089 9685/20008/7089 +f 9668/19974/7203 9667/19972/7203 9678/19994/7203 9673/19987/7203 +f 9666/19970/7093 9665/19968/7093 9681/19999/7093 9684/20005/7093 +f 9676/19992/7081 9666/19971/7081 9684/20006/7081 9677/19993/7081 +f 9665/19969/7080 9674/19989/7080 9675/19990/7080 9681/20000/7080 +f 9683/20002/7204 9682/20001/7204 9686/20009/7204 9687/20010/7204 +f 9679/19995/7108 9685/20008/7108 9688/20012/7108 9689/20014/7108 +f 9685/20008/7094 9683/20003/7094 9687/20011/7094 9688/20012/7094 +f 9690/20015/7205 9680/19997/7205 9691/20017/7205 9692/20018/7205 +f 9675/19990/7075 9672/19984/7074 9693/20020/7206 9682/20001/7207 +f 9671/19982/7100 9673/19986/7100 9690/20016/7100 9694/20023/7100 +f 9672/19984/7101 9671/19983/7101 9694/20022/7101 9693/20020/7101 +f 9673/19987/7208 9678/19994/7208 9680/19997/7208 9690/20015/7208 +f 9695/20024/7209 9696/20026/7209 9697/20028/7104 9698/20029/7104 +f 9687/20010/7210 9686/20009/7210 9699/20032/7210 9700/20034/7210 +f 9701/20038/7106 9702/20040/7106 9703/20042/7106 9704/20043/7106 +f 9692/20018/7211 9691/20017/7211 9705/20047/7211 9706/20049/7211 +f 9680/19997/7202 9679/19996/7201 9689/20013/7212 9691/20017/7213 +f 9682/20001/7207 9693/20020/7206 9707/20053/7214 9686/20009/7113 +f 9694/20023/7097 9690/20016/7097 9692/20019/7097 9708/20055/7097 +f 9693/20021/7096 9694/20023/7096 9708/20055/7096 9707/20054/7096 +f 9651/19944/7115 9656/19953/7115 9709/20056/7115 9710/20058/7115 +f 9653/19948/7116 9636/19920/7116 9711/20062/7116 9712/20064/7116 +f 9656/19952/7189 9654/19949/7188 9713/20065/7215 9709/20057/7216 +f 9654/19949/7217 9653/19947/7217 9712/20063/7217 9713/20065/7217 +f 9644/19934/7049 9642/19932/7049 9652/19945/7049 9714/20066/7049 +f 9641/19930/7121 9655/19951/7121 9656/19953/7121 9651/19944/7121 +f 9634/19917/7218 9644/19934/7218 9714/20066/7122 9635/19918/7123 +f 9639/19927/7124 9633/19915/7124 9636/19920/7124 9653/19948/7124 +f 9709/20057/7216 9713/20065/7215 9715/20067/7219 9716/20068/7220 +f 9713/20065/7221 9712/20063/7221 9717/20070/7221 9715/20067/7221 +f 9711/20060/7145 9718/20074/7145 9719/20075/7145 9720/20076/7145 +f 9721/20080/7144 9710/20058/7144 9722/20082/7144 9723/20085/7144 +f 9714/20066/7114 9652/19945/7114 9721/20079/7114 9724/20088/7114 +f 9635/19918/7123 9714/20066/7122 9724/20088/7131 9718/20072/7132 +f 9652/19946/7133 9651/19944/7133 9710/20058/7133 9721/20080/7133 +f 9636/19921/7134 9635/19919/7134 9718/20073/7134 9711/20061/7134 +f 9720/20076/7137 9719/20075/7137 9725/20090/7137 9726/20092/7137 +f 9723/20086/7138 9722/20083/7138 9727/20095/7138 9728/20097/7138 +f 9719/20075/7139 9729/20098/7140 9730/20099/7141 9725/20090/7142 +f 9729/20098/7157 9723/20087/7157 9728/20096/7157 9730/20099/7157 +f 9712/20064/7127 9711/20062/7127 9720/20077/7127 9717/20069/7127 +f 9710/20059/7126 9709/20057/7126 9716/20068/7126 9722/20084/7126 +f 9724/20089/7143 9721/20081/7143 9723/20087/7143 9729/20098/7143 +f 9718/20074/7132 9724/20089/7131 9729/20098/7140 9719/20075/7139 +f 9730/20099/7148 9728/20096/7148 9701/20039/7149 9731/20100/7149 +f 9727/20095/7150 9732/20101/7150 9695/20025/7151 9702/20040/7152 +f 9733/20103/7222 9726/20093/7222 9734/20105/7222 9735/20106/7222 +f 9732/20102/7223 9736/20108/7224 9696/20026/7209 9695/20024/7209 +f 9715/20067/7225 9717/20070/7225 9733/20104/7225 9736/20108/7225 +f 9716/20068/7220 9715/20067/7219 9736/20108/7224 9732/20102/7223 +f 9717/20071/7155 9720/20078/7155 9726/20093/7155 9733/20103/7155 +f 9722/20084/7156 9716/20068/7156 9732/20102/7156 9727/20094/7156 +f 9735/20106/7158 9734/20105/7158 9737/20109/7158 9738/20111/7158 +f 9691/20017/7213 9689/20013/7212 9739/20115/7159 9705/20047/7159 +f 9686/20009/7113 9707/20053/7214 9740/20118/7162 9699/20032/7162 +f 9734/20105/7160 9741/20121/7160 9742/20123/7161 9737/20109/7161 +f 9725/20090/7142 9730/20099/7141 9731/20100/7147 9741/20122/7147 +f 9728/20097/7146 9727/20095/7146 9702/20040/7146 9701/20038/7146 +f 9726/20093/7163 9725/20091/7163 9741/20121/7160 9734/20105/7160 +f 9736/20108/7226 9733/20104/7226 9735/20107/7227 9696/20026/7228 +f 9743/20126/7168 9700/20035/7168 9699/20033/7168 9740/20119/7168 +f 9706/20050/7168 9743/20126/7168 9740/20119/7168 9744/20128/7169 +f 9705/20048/7170 9739/20116/7168 9743/20127/7168 9706/20051/7168 +f 9739/20116/7168 9745/20130/7169 9700/20036/7168 9743/20127/7168 +f 9746/20132/7171 9704/20044/7171 9703/20041/7171 9698/20030/7171 +f 9738/20112/7172 9746/20132/7171 9698/20030/7171 9697/20027/7171 +f 9737/20110/7172 9742/20124/7172 9746/20133/7171 9738/20113/7172 +f 9742/20124/7172 9747/20134/7172 9704/20045/7171 9746/20133/7171 +f 9707/20054/7173 9708/20055/7173 9744/20129/7173 9740/20120/7173 +f 9741/20122/7147 9731/20100/7147 9747/20135/7174 9742/20125/7174 +f 9689/20014/7175 9688/20012/7175 9745/20131/7175 9739/20117/7175 +f 9696/20026/7228 9735/20107/7227 9738/20114/7229 9697/20028/7229 +f 9708/20055/7177 9692/20019/7177 9706/20052/7177 9744/20129/7177 +f 9731/20100/7149 9701/20039/7149 9704/20046/7178 9747/20135/7178 +f 9688/20012/7179 9687/20011/7179 9700/20037/7179 9745/20131/7179 +f 9702/20040/7152 9695/20025/7151 9698/20031/7180 9703/20042/7180 +o Chair.027 +v -6.958899 0.415382 4.665013 +v -6.958899 0.429951 4.665013 +v -6.957918 0.429951 4.615404 +v -6.949973 0.429951 4.213532 +v -6.948992 0.429951 4.163924 +v -6.948992 0.415382 4.163924 +v -6.949973 0.415382 4.213532 +v -6.957918 0.415382 4.615404 +v -6.564435 0.429951 4.171526 +v -6.564435 0.415382 4.171526 +v -6.564435 0.400812 4.171526 +v -6.565337 0.400812 4.217137 +v -6.949973 0.400812 4.213532 +v -6.948992 0.400812 4.163924 +v -6.574342 0.415382 4.672616 +v -6.574342 0.429951 4.672616 +v -6.573441 0.415382 4.627006 +v -6.573441 0.429951 4.627006 +v -6.574342 0.400812 4.672616 +v -6.573441 0.400812 4.627006 +v -6.958899 0.400812 4.665013 +v -6.957918 0.400812 4.615404 +v -6.974481 0.432961 4.183931 +v -6.974776 0.432961 4.198878 +v -6.970280 0.421009 4.198967 +v -6.969985 0.421009 4.184020 +v -6.982903 0.426967 4.198717 +v -6.982608 0.426967 4.183770 +v -6.981139 0.419106 4.644039 +v -6.980847 0.419106 4.629306 +v -6.993471 0.425064 4.629056 +v -6.993762 0.425064 4.643789 +v -6.985775 0.434699 4.643948 +v -6.985484 0.434699 4.629214 +v -6.989144 0.431853 4.198594 +v -6.988849 0.431853 4.183647 +v -6.999852 0.433592 4.628930 +v -7.000143 0.433592 4.643663 +v -7.012407 0.592772 4.643421 +v -6.998038 0.593879 4.643705 +v -6.986744 0.592141 4.183688 +v -6.987040 0.592141 4.198636 +v -7.001112 0.591033 4.183404 +v -7.019511 0.829840 4.183041 +v -7.005143 0.830948 4.183324 +v -7.030805 0.831579 4.643057 +v -7.016437 0.832686 4.643341 +v -7.001408 0.591033 4.198351 +v -6.997747 0.593879 4.628972 +v -7.012115 0.592772 4.628688 +v -6.994933 0.830737 4.183527 +v -7.008875 0.870951 4.206314 +v -6.999795 0.870348 4.206494 +v -7.005924 0.832325 4.628810 +v -7.006215 0.832325 4.643543 +v -7.009780 0.869634 4.620221 +v -7.009051 0.864490 4.603412 +v -7.019806 0.829840 4.197988 +v -6.988948 0.608202 4.643885 +v -7.016146 0.832686 4.628608 +v -7.030514 0.831579 4.628324 +v -7.005438 0.830948 4.198272 +v -7.021815 0.869953 4.206059 +v -6.977665 0.606614 4.183868 +v -6.977961 0.606614 4.198815 +v -6.995228 0.830737 4.198473 +v -6.988657 0.608202 4.629151 +v -7.018870 0.870373 4.620041 +v -7.018141 0.865229 4.603232 +v -7.031082 0.864232 4.602977 +v -7.004202 0.913073 4.279417 +v -7.012392 0.914244 4.279722 +v -7.020579 0.911897 4.546556 +v -7.012439 0.911148 4.547076 +v -7.021988 0.867524 4.224255 +v -7.009048 0.868521 4.224510 +v -7.011708 0.902898 4.289403 +v -7.025647 0.901824 4.289128 +v -6.999967 0.867919 4.224690 +v -7.031811 0.869376 4.619786 +v -7.019540 0.900855 4.537032 +v -7.033478 0.899781 4.536757 +v -7.034518 0.910823 4.546281 +v -7.026330 0.913170 4.279447 +v -7.011528 0.901346 4.539208 +v -7.003519 0.901727 4.289098 +v -6.565337 0.415382 4.217137 +v -6.565337 0.429951 4.217137 +v -6.757318 0.438060 4.165543 +v -6.757202 0.443651 4.159703 +v -6.888262 0.443651 4.157112 +v -6.888377 0.438060 4.162951 +v -6.888374 0.429976 4.162775 +v -6.920768 0.437950 4.162311 +v -6.918151 0.430300 4.162186 +v -6.756928 0.429903 4.145854 +v -6.756932 0.437987 4.146029 +v -6.625874 0.437987 4.148621 +v -6.625870 0.429903 4.148445 +v -6.625984 0.443828 4.154212 +v -6.594089 0.439408 4.154842 +v -6.596314 0.434055 4.149205 +v -6.757204 0.424135 4.159776 +v -6.757044 0.424311 4.151693 +v -6.625986 0.424311 4.154284 +v -6.626145 0.424135 4.162367 +v -6.757042 0.443828 4.151620 +v -6.626144 0.443651 4.162294 +v -6.887991 0.437987 4.143438 +v -6.888102 0.443828 4.149029 +v -6.757314 0.429976 4.165366 +v -6.626256 0.429976 4.167957 +v -6.888263 0.424135 4.157185 +v -6.888103 0.424311 4.149102 +v -6.599544 0.426646 4.148965 +v -6.601896 0.421521 4.154761 +v -6.594319 0.439247 4.162923 +v -6.602127 0.421360 4.162842 +v -6.599901 0.426713 4.168478 +v -6.887988 0.429903 4.143262 +v -6.920359 0.437881 4.142798 +v -6.922357 0.443408 4.148352 +v -6.916152 0.424773 4.156633 +v -6.916050 0.424940 4.148550 +v -6.917742 0.430231 4.142674 +v -6.626259 0.438060 4.168134 +v -6.946434 0.420977 4.161627 +v -6.942750 0.416357 4.156107 +v -6.942698 0.416497 4.148023 +v -6.946003 0.420919 4.142116 +v -6.950953 0.427313 4.142194 +v -6.922460 0.443241 4.156435 +v -6.969737 0.402967 4.141646 +v -6.976488 0.407418 4.141689 +v -6.951384 0.427371 4.161706 +v -6.976935 0.407458 4.161201 +v -6.970184 0.403008 4.161157 +v -6.954637 0.431932 4.147714 +v -6.981473 0.410634 4.147183 +v -6.954690 0.431793 4.155798 +v -6.981486 0.410537 4.155269 +v -6.994677 0.380352 4.160850 +v -6.986848 0.378323 4.160828 +v -6.994220 0.380334 4.141338 +v -6.999983 0.381800 4.146817 +v -6.999972 0.381756 4.154903 +v -6.965198 0.399792 4.155663 +v -6.965185 0.399889 4.147578 +v -7.015603 0.345795 4.146509 +v -7.015591 0.345756 4.154594 +v -6.981085 0.376856 4.155350 +v -7.002363 0.342751 4.160521 +v -6.996556 0.341467 4.155044 +v -6.986392 0.378304 4.141317 +v -6.981096 0.376901 4.147264 +v -6.996568 0.341506 4.146958 +v -7.001906 0.342735 4.141010 +v -6.527069 0.349401 4.170095 +v -6.535093 0.348454 4.169759 +v -6.493996 -0.002953 4.170573 +v -6.485972 -0.002007 4.170907 +v -7.009795 0.344511 4.141030 +v -7.096461 0.001491 4.139317 +v -7.102269 0.002774 4.144795 +v -6.521067 0.350077 4.156286 +v -6.521401 0.350056 4.164365 +v -6.480304 -0.001352 4.165177 +v -6.479970 -0.001331 4.157098 +v -7.089029 -0.000270 4.158809 +v -7.083222 -0.001553 4.153330 +v -7.010252 0.344527 4.160542 +v -6.563150 0.425574 4.155454 +v -6.567322 0.421603 4.149778 +v -6.596671 0.434122 4.168719 +v -6.567655 0.421652 4.169292 +v -6.563439 0.425454 4.163534 +v -6.577461 0.412305 4.155244 +v -6.577750 0.412185 4.163324 +v -6.573578 0.416156 4.168998 +v -6.545958 0.403231 4.169722 +v -6.540565 0.405075 4.163986 +v -6.558662 0.398698 4.155616 +v -6.558988 0.398640 4.163695 +v -6.553585 0.400566 4.169394 +v -6.573246 0.416106 4.149485 +v -6.543902 0.371230 4.163993 +v -6.538308 0.372479 4.169696 +v -6.553268 0.400542 4.149880 +v -6.537993 0.372464 4.150182 +v -6.543570 0.371267 4.155914 +v -6.540238 0.405133 4.155907 +v -6.524840 0.375406 4.164297 +v -6.524508 0.375443 4.156218 +v -6.545641 0.403207 4.150207 +v -6.530101 0.374194 4.150514 +v -6.526756 0.349392 4.150580 +v -6.534779 0.348446 4.150246 +v -6.530416 0.374209 4.170029 +v -6.540782 0.347770 4.164055 +v -6.540446 0.347791 4.155976 +v -6.499350 -0.003617 4.156788 +v -6.499684 -0.003637 4.164867 +v -7.096919 0.001507 4.158829 +v -6.493682 -0.002962 4.151058 +v -7.088573 -0.000286 4.139297 +v -7.092746 0.000611 4.149062 +v -7.083234 -0.001514 4.145245 +v -7.102257 0.002736 4.152881 +v -6.489827 -0.002484 4.160982 +v -6.485659 -0.002015 4.151393 +v -6.767666 0.438060 4.688983 +v -6.767551 0.443651 4.683144 +v -6.898611 0.443651 4.680552 +v -6.898726 0.438060 4.686392 +v -6.898723 0.429976 4.686216 +v -6.931117 0.437950 4.685752 +v -6.928500 0.430300 4.685627 +v -6.636334 0.424311 4.677725 +v -6.636219 0.429903 4.671885 +v -6.609893 0.426646 4.672406 +v -6.612245 0.421521 4.678202 +v -6.767552 0.424135 4.683217 +v -6.767393 0.424311 4.675134 +v -6.636494 0.424135 4.685808 +v -6.767391 0.443828 4.675061 +v -6.636493 0.443651 4.685735 +v -6.636333 0.443828 4.677652 +v -6.767281 0.437987 4.669470 +v -6.636222 0.437987 4.672061 +v -6.898340 0.437987 4.666879 +v -6.898451 0.443828 4.672470 +v -6.767663 0.429976 4.688807 +v -6.636605 0.429976 4.691399 +v -6.898612 0.424135 4.680625 +v -6.898452 0.424311 4.672543 +v -6.604668 0.439247 4.686364 +v -6.604437 0.439408 4.678283 +v -6.612476 0.421360 4.686283 +v -6.610250 0.426713 4.691920 +v -6.636608 0.438060 4.691575 +v -6.607020 0.434122 4.692160 +v -6.767277 0.429903 4.669294 +v -6.898336 0.429903 4.666703 +v -6.930708 0.437881 4.666239 +v -6.932706 0.443408 4.671793 +v -6.926501 0.424773 4.680074 +v -6.926399 0.424940 4.671990 +v -6.928091 0.430231 4.666115 +v -6.932809 0.443241 4.679876 +v -6.964987 0.431932 4.671154 +v -6.965038 0.431793 4.679239 +v -6.956783 0.420977 4.685069 +v -6.953099 0.416357 4.679548 +v -6.953046 0.416497 4.671463 +v -6.956352 0.420919 4.665556 +v -6.975534 0.399889 4.671019 +v -6.980086 0.402967 4.665087 +v -6.975547 0.399792 4.679104 +v -6.961302 0.427313 4.665634 +v -6.986837 0.407418 4.665130 +v -6.961732 0.427371 4.685147 +v -6.987284 0.407458 4.684641 +v -6.980533 0.403008 4.684599 +v -7.005025 0.380352 4.684291 +v -6.997197 0.378323 4.684269 +v -6.991822 0.410634 4.670624 +v -7.004569 0.380334 4.664779 +v -7.010332 0.381800 4.670258 +v -6.991835 0.410537 4.678710 +v -7.010321 0.381756 4.678344 +v -7.020144 0.344511 4.664471 +v -7.025952 0.345795 4.669950 +v -7.025939 0.345756 4.678035 +v -7.020601 0.344527 4.683983 +v -6.991434 0.376856 4.678790 +v -7.012712 0.342751 4.683963 +v -7.006905 0.341467 4.678484 +v -6.996741 0.378304 4.664758 +v -6.991445 0.376901 4.670704 +v -6.537417 0.349401 4.693536 +v -6.545442 0.348454 4.693201 +v -6.504344 -0.002953 4.694014 +v -6.496321 -0.002007 4.694348 +v -7.106810 0.001491 4.662757 +v -7.112618 0.002774 4.668236 +v -6.531415 0.350077 4.679727 +v -6.531750 0.350056 4.687806 +v -6.490653 -0.001352 4.688618 +v -6.490318 -0.001331 4.680539 +v -7.099378 -0.000270 4.682249 +v -7.093571 -0.001553 4.676771 +v -7.012255 0.342735 4.664451 +v -7.006917 0.341506 4.670399 +v -6.578003 0.421652 4.692733 +v -6.573788 0.425454 4.686975 +v -6.587810 0.412305 4.678685 +v -6.588099 0.412185 4.686765 +v -6.583927 0.416156 4.692440 +v -6.606663 0.434055 4.672646 +v -6.563934 0.400566 4.692835 +v -6.556307 0.403231 4.693162 +v -6.569336 0.398640 4.687136 +v -6.583595 0.416106 4.672926 +v -6.563617 0.400542 4.673321 +v -6.569010 0.398698 4.679056 +v -6.573499 0.425574 4.678895 +v -6.550913 0.405075 4.687427 +v -6.550587 0.405133 4.679348 +v -6.577671 0.421603 4.673219 +v -6.548342 0.372464 4.673623 +v -6.553918 0.371267 4.679355 +v -6.535189 0.375406 4.687737 +v -6.534857 0.375443 4.679658 +v -6.555990 0.403207 4.673648 +v -6.540450 0.374194 4.673955 +v -6.537105 0.349392 4.674021 +v -6.540765 0.374209 4.693470 +v -6.554250 0.371230 4.687434 +v -6.550795 0.347791 4.679417 +v -6.551130 0.347770 4.687495 +v -6.548657 0.372479 4.693137 +v -6.509698 -0.003617 4.680229 +v -6.510033 -0.003637 4.688308 +v -7.107267 0.001507 4.682269 +v -7.098921 -0.000286 4.662737 +v -6.545128 0.348446 4.673687 +v -6.504031 -0.002962 4.674499 +v -7.103095 0.000611 4.672504 +v -7.093583 -0.001514 4.668685 +v -7.112606 0.002736 4.676322 +v -6.500176 -0.002484 4.684424 +v -6.496008 -0.002015 4.674833 +vn -0.9998 -0.0000 -0.0198 +vn 0.0198 -0.0000 -0.9998 +vn -0.0000 -1.0000 -0.0000 +vn -0.0198 -0.0000 0.9998 +vn 0.9998 -0.0000 0.0198 +vn 0.1191 0.9929 0.0024 +vn -0.2636 -0.9646 -0.0052 +vn -0.4267 -0.9044 -0.0084 +vn -0.5536 -0.0911 0.8278 +vn -0.1622 -0.9868 -0.0032 +vn 0.1714 0.9852 0.0034 +vn -0.4897 -0.0779 -0.8684 +vn -0.6611 -0.1146 -0.7415 +vn -0.6569 -0.0987 0.7475 +vn -0.6163 -0.7874 -0.0122 +vn -0.8005 -0.5992 -0.0158 +vn 0.9968 0.0768 0.0197 +vn -0.9968 -0.0768 -0.0197 +vn -0.0545 -0.2916 -0.9550 +vn 0.0383 0.5027 -0.8636 +vn 0.9942 0.1047 0.0229 +vn 0.9936 0.1119 0.0154 +vn 0.9942 0.1062 0.0149 +vn -0.8298 -0.0656 -0.5542 +vn -0.0211 0.4967 -0.8677 +vn 0.9968 0.0768 0.0221 +vn 0.8441 -0.5359 0.0167 +vn 0.0133 0.5287 0.8487 +vn 0.0627 -0.6113 -0.7889 +vn 0.5216 -0.8531 0.0115 +vn 0.8461 -0.5326 0.0199 +vn 0.8454 -0.5337 0.0231 +vn 0.8469 -0.5315 0.0167 +vn 0.1166 0.9931 0.0115 +vn 0.0903 0.9648 0.2468 +vn 0.0871 0.9584 0.2720 +vn 0.0586 -0.8811 0.4692 +vn -0.2428 -0.8634 0.4422 +vn -0.6115 -0.7743 0.1629 +vn 0.0277 -0.5705 0.8208 +vn -0.8343 -0.3669 0.4116 +vn -0.7914 -0.3997 0.4626 +vn -0.9988 -0.0465 -0.0175 +vn 0.9936 0.1108 0.0228 +vn 0.9935 0.1116 0.0237 +vn -0.9965 -0.0794 -0.0245 +vn -0.0571 0.5223 0.8508 +vn -0.9989 -0.0401 -0.0258 +vn 0.9937 0.1101 0.0221 +vn -0.9979 -0.0584 -0.0275 +vn -0.5986 -0.7742 -0.2056 +vn -0.9964 -0.0813 -0.0245 +vn -0.9962 -0.0847 -0.0188 +vn -0.9965 -0.0769 -0.0317 +vn -0.0561 0.8588 -0.5092 +vn -0.0793 0.9633 0.2564 +vn -0.0770 0.9970 0.0064 +vn -0.0793 0.9630 0.2574 +vn 0.0848 0.8610 -0.5015 +vn 0.9962 0.0845 0.0194 +vn 0.9962 0.0831 0.0257 +vn 0.9965 0.0796 0.0269 +vn 0.9965 0.0778 0.0316 +vn 0.0770 -0.8773 -0.4737 +vn 0.0793 -0.9658 -0.2471 +vn 0.9960 0.0880 0.0130 +vn -0.9960 -0.0886 -0.0124 +vn -0.0765 0.8673 0.4919 +vn 0.0552 0.8695 0.4908 +vn 0.9970 0.0744 0.0191 +vn 0.9960 0.0849 0.0276 +vn 0.0769 -0.9970 -0.0058 +vn -0.9972 -0.0732 -0.0179 +vn 0.9972 0.0723 0.0175 +vn -0.0000 1.0000 -0.0000 +vn -0.0137 0.7224 0.6913 +vn -0.0164 0.7268 0.6866 +vn -0.0164 0.7269 0.6866 +vn -0.0198 -0.0225 0.9995 +vn -0.0195 -0.0215 0.9996 +vn -0.0132 -0.0204 0.9997 +vn 0.0198 0.0218 -0.9996 +vn 0.0211 0.0219 -0.9995 +vn 0.0212 0.0219 -0.9995 +vn 0.1084 0.6937 -0.7120 +vn 0.0004 -0.9998 -0.0218 +vn -0.0004 0.9998 0.0219 +vn 0.0143 0.6915 -0.7222 +vn 0.0114 0.6962 -0.7177 +vn 0.0114 0.6962 -0.7178 +vn -0.0065 0.9997 0.0215 +vn -0.0143 -0.6915 0.7223 +vn -0.0735 -0.7257 -0.6840 +vn 0.1367 0.9903 0.0240 +vn -0.0974 -0.6955 0.7119 +vn 0.0137 -0.7223 -0.6914 +vn 0.0198 0.0221 -0.9996 +vn 0.0086 0.7008 -0.7133 +vn -0.0223 -0.9995 -0.0216 +vn 0.0129 0.0214 -0.9997 +vn 0.0194 0.0224 -0.9996 +vn 0.2018 -0.6683 0.7160 +vn 0.2388 -0.6972 -0.6760 +vn 0.3021 -0.9532 -0.0152 +vn 0.0063 0.0183 -0.9998 +vn 0.0120 0.0214 -0.9997 +vn -0.0125 0.9997 0.0211 +vn 0.0013 -0.7326 -0.6807 +vn -0.0192 0.7313 0.6818 +vn -0.0258 -0.7022 0.7115 +vn 0.0010 0.0132 -0.9999 +vn 0.0053 0.0178 -0.9998 +vn -0.0068 -0.0175 0.9998 +vn -0.0125 -0.0205 0.9997 +vn -0.0061 -0.0172 0.9998 +vn -0.0017 -0.0124 0.9999 +vn -0.4191 0.5509 -0.7217 +vn -0.4654 0.5748 0.6730 +vn -0.3351 0.9421 0.0146 +vn -0.2553 0.6901 0.6772 +vn -0.2177 0.6614 -0.7177 +vn -0.0014 -0.0119 0.9999 +vn -0.0000 -0.0090 1.0000 +vn -0.5739 0.3812 -0.7248 +vn -0.6269 0.3978 0.6698 +vn -0.8415 0.5403 0.0046 +vn 0.5940 -0.8044 -0.0094 +vn 0.4521 -0.5868 -0.6718 +vn 0.4063 -0.5625 0.7201 +vn -0.6216 0.7833 0.0089 +vn -0.9174 0.3980 0.0034 +vn 0.6244 -0.2790 0.7296 +vn 0.6802 -0.2912 -0.6726 +vn 0.9163 -0.4005 -0.0034 +vn -0.0006 0.0092 -1.0000 +vn 0.0007 0.0122 -0.9999 +vn 0.8222 -0.5692 -0.0049 +vn 0.6182 -0.4135 -0.6685 +vn 0.5655 -0.3964 0.7232 +vn -0.0415 -0.0027 0.9991 +vn -0.0414 -0.0025 0.9991 +vn -0.6561 0.1694 -0.7354 +vn 0.9924 0.1162 0.0414 +vn 0.6562 -0.1695 0.7354 +vn -0.6807 0.2899 0.6727 +vn -0.6249 0.2777 -0.7296 +vn -0.0005 -0.0080 1.0000 +vn 0.0005 -0.0055 1.0000 +vn -0.0014 0.0054 -1.0000 +vn -0.0009 0.0070 -1.0000 +vn 0.2977 0.6472 -0.7018 +vn 0.2824 0.6748 0.6819 +vn -0.3520 -0.9356 -0.0276 +vn -0.0229 -0.0216 0.9995 +vn -0.0281 -0.0207 0.9994 +vn -0.0341 -0.0182 0.9993 +vn -0.0289 -0.0205 0.9994 +vn 0.0848 0.7239 0.6847 +vn 0.0230 0.0227 -0.9995 +vn 0.0283 0.0218 -0.9994 +vn -0.1144 -0.9932 -0.0235 +vn -0.0226 -0.0222 0.9995 +vn 0.4767 0.5630 0.6751 +vn -0.5851 -0.8103 -0.0312 +vn -0.0387 -0.0112 0.9992 +vn -0.0350 -0.0173 0.9992 +vn -0.4496 -0.5801 0.6792 +vn 0.0291 0.0211 -0.9994 +vn 0.0343 0.0187 -0.9992 +vn 0.4074 0.9128 0.0290 +vn -0.2551 -0.6896 -0.6777 +vn -0.2713 -0.6617 0.6990 +vn -0.6292 -0.3366 0.7006 +vn -0.6283 -0.3512 -0.6942 +vn 0.8828 0.4682 0.0387 +vn 0.0392 0.0114 -0.9992 +vn 0.0354 0.0175 -0.9992 +vn 0.0397 0.0104 -0.9992 +vn 0.0416 0.0032 -0.9991 +vn 0.4844 0.5405 -0.6879 +vn 0.6647 0.7463 0.0335 +vn -0.4407 -0.6033 -0.6647 +vn 0.9901 0.1344 0.0413 +vn 0.0414 0.0027 -0.9991 +vn 0.7001 0.0928 -0.7080 +vn 0.7005 0.0866 -0.7083 +vn 0.7026 0.0969 0.7049 +vn 0.7032 0.0905 0.7053 +vn 0.7032 0.0904 0.7053 +vn -0.0405 -0.0030 0.9992 +vn -0.0387 -0.0100 0.9992 +vn -0.8753 -0.4821 -0.0385 +vn 0.6314 0.3437 0.6951 +vn 0.6322 0.3294 -0.7013 +vn -0.9924 -0.1162 -0.0415 +vn 0.0014 -0.0053 1.0000 +vn -0.7033 -0.0898 -0.7052 +vn -0.7037 -0.0839 -0.7056 +vn -0.0013 0.0053 -1.0000 +vn -0.7028 -0.0956 -0.7049 +vn -0.7002 -0.0916 0.7081 +vn -0.7006 -0.0860 0.7084 +vn -0.7006 -0.0859 0.7084 +vn -0.9904 -0.1319 -0.0415 +vn -0.2197 -0.9756 -0.0043 +vn -0.2197 -0.9756 -0.0044 +vn 0.1171 -0.9931 0.0023 +vn 0.1170 -0.9931 0.0023 +vn 0.1171 -0.9931 0.0024 +vn 0.7140 -0.1770 -0.6774 +vn 0.0414 0.0025 -0.9991 +vn -0.7140 0.1770 0.6774 +vn -0.7010 -0.0803 0.7086 +vn 0.9695 -0.2449 -0.0026 +vn 0.7010 0.0803 -0.7086 +vn -0.9695 0.2449 0.0026 +vn 0.7037 0.0839 0.7056 +vn -0.0198 -0.0221 0.9996 +vn -0.0194 -0.0224 0.9996 +vn -0.0129 -0.0214 0.9997 +vn -0.0143 -0.6915 0.7222 +vn -0.0974 -0.6956 0.7118 +vn -0.0211 -0.0219 0.9995 +vn -0.0212 -0.0219 0.9995 +vn -0.0283 -0.0218 0.9994 +vn -0.0232 -0.0228 0.9995 +vn 0.0198 0.0224 -0.9996 +vn -0.0198 -0.0218 0.9996 +vn 0.2019 -0.6683 0.7160 +vn -0.0258 -0.7023 0.7115 +vn -0.0063 -0.0183 0.9998 +vn -0.0120 -0.0214 0.9997 +vn -0.0054 -0.0178 0.9998 +vn -0.0009 -0.0131 0.9999 +vn -0.0007 -0.0123 0.9999 +vn 0.0006 -0.0092 1.0000 +vn 0.4063 -0.5626 0.7200 +vn 0.6245 -0.2790 0.7295 +vn -0.0007 0.0091 -1.0000 +vn 0.0007 0.0123 -0.9999 +vn 0.5656 -0.3964 0.7232 +vn -0.0414 -0.0027 0.9991 +vn -0.6562 0.1695 -0.7353 +vn 0.6562 -0.1695 0.7353 +vn 0.0009 -0.0070 1.0000 +vn 0.0019 -0.0057 1.0000 +vn -0.0014 0.0055 -1.0000 +vn -0.0343 -0.0187 0.9992 +vn -0.0291 -0.0210 0.9994 +vn -0.2714 -0.6618 0.6989 +vn 0.0226 0.0221 -0.9995 +vn -0.0392 -0.0114 0.9992 +vn -0.0354 -0.0176 0.9992 +vn -0.4496 -0.5802 0.6792 +vn -0.9904 -0.1319 -0.0413 +vn -0.0397 -0.0104 0.9992 +vn -0.0416 -0.0032 0.9991 +vn -0.6293 -0.3367 0.7005 +vn -0.9924 -0.1162 -0.0414 +vn 0.0013 -0.0053 1.0000 +vn -0.7003 -0.0916 0.7080 +vn -0.7007 -0.0860 0.7083 +vn -0.7007 -0.0859 0.7083 +vn -0.7011 -0.0803 0.7086 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt 0.686647 0.000000 +vt 0.870176 0.996278 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.782584 0.965408 +vt 0.870573 0.970227 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.833010 0.965282 +vt 0.908785 0.026051 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.968598 0.070112 +vt 0.979071 0.026051 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.968598 0.371019 +vt 0.757324 0.262250 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.173427 0.241164 +vt 0.758439 0.080128 +vt -0.973130 0.033128 +vt -0.123087 0.241439 +vt 0.978437 0.000000 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt 0.737072 0.000128 +vt 0.908263 0.000000 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.409642 -0.009898 +vt 0.677629 0.482142 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.240570 0.058726 +vt 0.669677 0.481452 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.786789 0.246652 +vt 0.991724 0.699406 +vt 0.928489 0.277215 +vt 0.873308 0.505274 +vt 0.786789 0.155990 +vt 0.958960 0.029326 +vt 0.991724 0.483440 +vt 0.977373 0.702462 +vt -0.140978 0.246673 +vt 0.958492 0.010078 +vt -0.156145 0.246590 +vt 0.929566 0.080357 +vt -0.144664 0.252235 +vt 0.984385 0.731379 +vt 0.945934 0.020741 +vt -0.159831 0.252152 +vt 0.984385 0.500820 +vt 0.989649 0.087406 +vt 0.706860 0.007022 +vt 0.847263 0.989602 +vt 0.686599 0.714388 +vt 0.721837 0.007060 +vt 0.884682 0.006674 +vt 0.720919 0.017861 +vt 0.673632 0.527027 +vt 0.872079 0.017335 +vt 0.705942 0.017823 +vt 0.673632 0.731676 +vt 0.690157 0.523535 +vt 0.802894 0.958412 +vt 0.847659 0.963551 +vt 0.695298 0.714388 +vt 0.661237 0.495044 +vt 0.817871 0.958374 +vt 0.885205 0.032725 +vt 0.661237 0.722645 +vt 0.693293 0.503638 +vt 0.944329 0.029337 +vt 0.981154 0.731379 +vt 0.977373 0.486830 +vt 0.989649 0.263822 +vt 0.873305 0.723869 +vt 0.981154 0.500820 +vt 0.870573 0.032734 +vt 0.693293 0.761173 +vt 0.679412 0.527027 +vt 0.695298 0.493838 +vt 0.679412 0.731676 +vt 0.826600 0.493835 +vt 0.826977 0.731673 +vt 0.826600 0.714385 +vt 0.814491 0.495042 +vt 0.122435 0.638558 +vt 0.015922 0.839080 +vt 0.835047 0.699404 +vt 0.993361 0.510073 +vt 0.758428 0.504317 +vt 0.072861 0.638558 +vt 0.015474 0.619132 +vt 0.835047 0.483438 +vt 0.845328 0.702461 +vt 0.015197 0.626266 +vt 0.014109 0.491099 +vt 0.993356 0.728667 +vt 0.758425 0.722912 +vt 0.833436 0.500823 +vt 0.891028 0.725398 +vt 0.672547 0.500827 +vt 0.752235 0.729690 +vt 0.667246 0.727168 +vt 0.891033 0.506802 +vt 0.752238 0.507120 +vt 0.071993 0.783837 +vt 0.969610 0.493832 +vt 0.987699 0.731670 +vt 0.641343 0.509140 +vt 0.689355 0.726560 +vt 0.969610 0.714382 +vt 0.122436 0.783837 +vt 0.641344 0.743247 +vt 0.833436 0.731382 +vt 0.845328 0.486829 +vt 0.814491 0.722643 +vt 0.825052 0.503733 +vt 0.016195 0.832047 +vt 0.634466 0.494220 +vt 0.825052 0.761267 +vt 0.826977 0.527024 +vt 0.022424 0.783234 +vt 0.035852 0.889154 +vt 0.043016 0.971597 +vt 0.706398 0.505224 +vt 0.072863 0.808180 +vt 0.028940 0.807392 +vt 0.010039 0.882150 +vt 0.137154 0.974703 +vt 0.631023 0.892124 +vt 0.649326 0.890699 +vt 0.121379 0.984023 +vt 0.648470 0.892315 +vt 0.072864 0.783142 +vt 0.043889 0.943476 +vt 0.078385 0.805896 +vt 0.075977 0.941215 +vt 0.613560 0.946909 +vt 0.672547 0.731385 +vt 0.701510 0.486829 +vt 0.669481 0.490576 +vt 0.072863 0.646796 +vt 0.648470 0.506013 +vt 0.080915 0.841605 +vt 0.968560 0.503835 +vt 0.102906 0.865583 +vt 0.634467 0.887149 +vt 0.987699 0.527021 +vt 0.968560 0.761369 +vt 0.690090 0.495972 +vt 0.701510 0.702461 +vt 0.603150 0.865583 +vt 0.014109 0.884028 +vt 0.706395 0.729929 +vt 0.816556 0.714481 +vt 0.023239 0.646888 +vt 0.040534 0.495932 +vt 0.081188 0.621686 +vt 0.007711 0.495744 +vt 0.041481 0.497122 +vt 0.080911 0.628820 +vt 0.003028 0.888966 +vt 0.041481 0.887645 +vt 0.060838 0.971173 +vt 0.631023 0.505822 +vt 0.649326 0.500176 +vt 0.081188 0.834572 +vt 0.805889 0.743046 +vt 0.122312 0.806766 +vt 0.988155 0.503653 +vt 0.115555 0.935422 +vt 0.904138 0.912557 +vt 0.988155 0.735605 +vt 0.813022 0.494763 +vt 0.890960 0.912565 +vt 0.735836 0.641861 +vt 0.693936 0.468644 +vt 0.027417 0.833361 +vt 0.420996 0.961603 +vt 0.032040 0.784613 +vt 0.284612 0.483847 +vt 0.656925 0.504187 +vt 0.681549 0.720168 +vt 0.066750 0.834450 +vt 0.299225 0.449509 +vt 0.999708 0.720167 +vt 0.989627 0.743247 +vt 0.121899 0.832034 +vt 0.693936 0.449159 +vt 0.420996 0.999935 +vt 0.008277 0.862094 +vt 0.082562 0.831201 +vt 0.741580 0.718717 +vt 0.678836 0.505353 +vt 0.815743 0.487362 +vt 0.741523 0.585977 +vt 0.678836 0.699564 +vt 0.553315 0.945729 +vt 0.982243 0.588758 +vt 0.460393 1.018433 +vt 0.949871 0.788878 +vt 0.982305 0.727355 +vt 0.668954 0.502598 +vt 0.949657 0.691167 +vt 0.979056 0.490574 +vt 0.078628 0.952623 +vt 0.035428 0.887064 +vt 0.812426 0.730862 +vt 0.971935 0.642457 +vt 0.805889 0.532195 +vt 0.173975 1.012235 +vt 0.908785 0.976444 +vt 0.726484 0.788878 +vt 0.984477 0.500479 +vt 0.894591 0.976453 +vt 0.737043 0.505375 +vt 0.726270 0.691167 +vt 0.987420 0.694407 +vt 0.999899 0.506981 +vt 0.968797 0.500648 +vt 0.989626 0.516135 +vt 0.652223 0.697892 +vt 0.656922 0.730164 +vt 0.681740 0.506981 +vt 0.985798 0.713641 +vt 0.053549 0.993732 +vt 0.043551 0.873068 +vt 0.522988 0.991572 +vt 0.062665 0.961706 +vt 0.169656 0.991799 +vt 0.060838 0.809705 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +s 1 +usemtl CabnetDoors +f 9748/20137/7230 9749/20141/7230 9750/20146/7230 9751/20150/7230 9752/20154/7230 9753/20160/7230 9754/20163/7230 9755/20166/7230 +f 9753/20159/7231 9752/20155/7231 9756/20170/7231 9757/20173/7231 +f 9758/20175/7232 9759/20179/7232 9760/20181/7232 9761/20182/7232 +f 9762/20186/7233 9763/20187/7233 9749/20142/7233 9748/20136/7233 +f 9763/20188/7234 9762/20185/7234 9764/20190/7234 9765/20191/7234 +f 9766/20193/7234 9767/20196/7234 9764/20190/7234 9762/20185/7234 +f 9766/20194/7233 9762/20186/7233 9748/20136/7233 9768/20198/7233 +f 9761/20183/7231 9753/20159/7231 9757/20173/7231 9758/20176/7231 +f 9768/20199/7230 9748/20137/7230 9755/20166/7230 9754/20163/7230 9753/20160/7230 9761/20184/7230 9760/20180/7230 9769/20202/7230 +f 9751/20151/7235 9752/20156/7235 9770/20205/7235 9771/20209/7235 +f 9761/20184/7230 9760/20180/7230 9754/20163/7230 9753/20160/7230 +f 9755/20167/7234 9748/20138/7234 9768/20200/7234 9769/20203/7234 +f 9753/20161/7236 9754/20164/7236 9772/20213/7236 9773/20215/7236 +f 9773/20215/7237 9772/20213/7237 9774/20217/7237 9775/20220/7237 +f 9776/20223/7237 9779/20231/7237 9778/20228/7237 9777/20226/7237 +f 9754/20165/7238 9751/20152/7238 9771/20210/7238 9772/20214/7238 +f 9748/20139/7239 9776/20223/7239 9777/20226/7239 9755/20168/7239 +f 9750/20147/7240 9781/20238/7240 9780/20234/7240 9749/20143/7240 +f 9755/20169/7241 9777/20227/7241 9781/20239/7241 9750/20148/7241 +f 9752/20157/7242 9753/20162/7242 9773/20216/7242 9770/20207/7242 +f 9749/20144/7243 9780/20235/7243 9776/20224/7243 9748/20140/7243 +f 9775/20221/7244 9774/20218/7244 9782/20243/7244 9783/20247/7244 +f 9784/20250/7245 9778/20229/7245 9779/20232/7245 9785/20252/7245 +f 9780/20236/7233 9787/20255/7233 9786/20253/7233 9785/20251/7233 +f 9772/20214/7233 9771/20210/7233 9782/20242/7233 9774/20219/7233 +f 9771/20211/7246 9770/20206/7246 9788/20259/7246 9789/20264/7246 +f 9780/20236/7233 9785/20251/7233 9779/20233/7233 9776/20225/7233 +f 9770/20207/7231 9773/20216/7231 9775/20222/7231 9783/20245/7231 +f 9777/20227/7231 9778/20230/7231 9784/20248/7231 9781/20239/7231 +f 9788/20260/7231 9790/20268/7231 9791/20271/7231 9792/20275/7231 +f 9787/20255/7233 9794/20282/7233 9793/20278/7233 9786/20253/7233 +f 9770/20208/7231 9783/20246/7231 9790/20269/7231 9788/20261/7231 +f 9783/20247/7247 9782/20243/7247 9795/20285/7247 9790/20270/7247 +f 9781/20240/7246 9796/20287/7246 9787/20256/7246 9780/20237/7246 +f 9784/20249/7231 9797/20291/7231 9796/20288/7248 9781/20241/7231 +f 9785/20252/7247 9786/20254/7247 9797/20292/7247 9784/20250/7247 +f 9782/20244/7233 9771/20212/7233 9789/20265/7233 9795/20286/7233 +f 9798/20293/7249 9792/20277/7249 9799/20297/7249 9800/20298/7249 +f 9801/20300/7250 9804/20308/7251 9803/20306/7252 9802/20303/7252 +f 9790/20270/7247 9795/20285/7247 9805/20310/7247 9791/20272/7247 +f 9787/20257/7233 9806/20313/7233 9802/20305/7233 9794/20283/7233 +f 9797/20291/7231 9808/20320/7231 9807/20316/7253 9796/20288/7248 +f 9795/20286/7233 9789/20265/7233 9809/20322/7233 9805/20311/7233 +f 9786/20254/7247 9793/20279/7247 9808/20319/7247 9797/20292/7247 +f 9792/20276/7254 9791/20273/7254 9810/20325/7254 9799/20296/7254 +f 9788/20262/7231 9792/20277/7231 9798/20293/7231 9811/20327/7231 +f 9812/20330/7255 9811/20328/7246 9798/20294/7246 9813/20333/7255 +f 9814/20336/7255 9801/20301/7255 9802/20304/7246 9806/20314/7246 +f 9812/20331/7255 9813/20334/7255 9801/20302/7255 9814/20337/7255 +f 9796/20289/7256 9814/20338/7256 9806/20315/7256 9787/20258/7256 +f 9802/20305/7257 9803/20307/7257 9815/20340/7257 9794/20283/7257 +f 9808/20320/7258 9817/20344/7258 9816/20341/7258 9807/20316/7258 +f 9789/20266/7259 9812/20332/7260 9814/20338/7261 9796/20289/7248 +f 9789/20266/7259 9788/20263/7262 9811/20329/7262 9812/20332/7260 +f 9818/20348/7263 9819/20352/7263 9820/20356/7264 9821/20360/7265 +f 9822/20364/7266 9823/20367/7267 9824/20370/7268 9825/20373/7266 +f 9805/20311/7269 9809/20322/7270 9823/20368/7271 9822/20365/7269 +f 9791/20274/7272 9805/20312/7272 9822/20366/7272 9810/20326/7272 +f 9813/20334/7273 9826/20377/7274 9804/20309/7251 9801/20302/7250 +f 9807/20317/7253 9816/20342/7275 9823/20369/7271 9809/20323/7270 +f 9794/20284/7276 9815/20339/7276 9827/20381/7276 9793/20280/7276 +f 9793/20281/7277 9827/20379/7277 9817/20345/7277 9808/20321/7277 +f 9813/20335/7273 9798/20295/7278 9800/20299/7278 9826/20378/7274 +f 9816/20342/7279 9828/20382/7280 9824/20371/7268 9823/20369/7267 +f 9829/20385/7281 9830/20389/7282 9831/20393/7283 9825/20374/7283 +f 9799/20296/7284 9810/20325/7284 9831/20394/7284 9819/20353/7284 +f 9820/20357/7285 9819/20354/7286 9831/20395/7286 9830/20390/7287 +f 9800/20298/7288 9799/20297/7288 9819/20355/7288 9818/20349/7288 +f 9821/20361/7289 9832/20397/7290 9833/20400/7291 9818/20350/7292 +f 9817/20346/7293 9829/20386/7294 9828/20383/7280 9816/20343/7293 +f 9804/20308/7295 9832/20398/7290 9821/20362/7289 9803/20306/7295 +f 9827/20380/7296 9830/20391/7282 9829/20387/7281 9817/20347/7296 +f 9815/20339/7297 9820/20358/7285 9830/20392/7287 9827/20381/7297 +f 9803/20307/7298 9821/20363/7265 9820/20359/7264 9815/20340/7298 +f 9826/20377/7299 9833/20401/7291 9832/20399/7290 9804/20309/7300 +f 9829/20388/7294 9825/20375/7301 9824/20372/7268 9828/20384/7280 +f 9810/20326/7302 9822/20366/7302 9825/20376/7302 9831/20396/7302 +f 9826/20378/7299 9800/20299/7303 9818/20351/7303 9833/20402/7291 +f 9765/20191/7234 9764/20190/7234 9834/20403/7234 9835/20404/7234 +f 9757/20174/7234 9756/20171/7234 9835/20404/7234 9834/20403/7234 +f 9834/20403/7234 9764/20190/7234 9767/20196/7234 9759/20178/7234 +f 9759/20178/7234 9758/20177/7234 9757/20174/7234 9834/20403/7234 +f 9763/20189/7304 9765/20192/7304 9750/20149/7304 9749/20145/7304 +f 9751/20153/7304 9835/20405/7304 9756/20172/7304 9752/20158/7304 +f 9750/20149/7304 9765/20192/7304 9835/20405/7304 9751/20153/7304 +f 9769/20204/7232 9767/20197/7232 9766/20195/7232 9768/20201/7232 +f 9760/20181/7232 9759/20179/7232 9767/20197/7232 9769/20204/7232 +f 9809/20324/7270 9789/20267/7259 9796/20290/7248 9807/20318/7253 +f 9836/20406/7305 9837/20407/7305 9838/20408/7306 9839/20410/7307 +f 9840/20411/7308 9839/20409/7308 9841/20414/7309 9842/20416/7310 +f 9843/20418/7311 9844/20419/7311 9845/20420/7312 9846/20422/7313 +f 9845/20420/7314 9847/20423/7314 9848/20425/7314 9849/20427/7314 +f 9850/20429/7315 9851/20430/7315 9852/20431/7315 9853/20433/7315 +f 9854/20435/7316 9837/20407/7316 9855/20436/7316 9847/20424/7316 +f 9844/20419/7317 9854/20434/7317 9847/20423/7317 9845/20420/7317 +f 9856/20437/7318 9857/20438/7319 9854/20434/7317 9844/20419/7317 +f 9857/20439/7320 9838/20408/7320 9837/20407/7316 9854/20435/7316 +f 9858/20440/7321 9850/20428/7321 9853/20432/7321 9859/20441/7321 +f 9840/20412/7321 9860/20444/7321 9850/20428/7321 9858/20440/7321 +f 9860/20443/7315 9861/20445/7315 9851/20430/7315 9850/20429/7315 +f 9852/20431/7322 9846/20421/7322 9862/20447/7322 9863/20448/7322 +f 9847/20424/7323 9855/20436/7323 9864/20449/7323 9848/20426/7323 +f 9859/20441/7324 9853/20432/7324 9865/20451/7324 9866/20453/7324 +f 9851/20430/7325 9843/20417/7325 9846/20421/7325 9852/20431/7325 +f 9861/20445/7325 9867/20455/7325 9843/20417/7325 9851/20430/7325 +f 9867/20454/7326 9856/20437/7326 9844/20419/7311 9843/20418/7311 +f 9857/20438/7319 9856/20437/7318 9868/20456/7327 9869/20458/7327 +f 9861/20445/7328 9860/20443/7328 9870/20459/7328 9871/20461/7328 +f 9856/20437/7326 9867/20454/7326 9872/20462/7329 9868/20456/7330 +f 9873/20464/7305 9855/20436/7305 9837/20407/7305 9836/20406/7305 +f 9870/20460/7331 9842/20415/7331 9874/20467/7331 9875/20469/7331 +f 9872/20463/7332 9871/20461/7332 9876/20470/7332 9877/20472/7332 +f 9871/20461/7333 9870/20459/7333 9875/20468/7333 9876/20470/7333 +f 9868/20456/7330 9872/20462/7329 9877/20473/7334 9878/20474/7335 +f 9838/20408/7320 9857/20439/7320 9869/20457/7336 9879/20475/7336 +f 9867/20455/7337 9861/20445/7337 9871/20461/7337 9872/20463/7337 +f 9839/20410/7307 9838/20408/7306 9879/20475/7338 9841/20413/7338 +f 9860/20444/7339 9840/20412/7339 9842/20415/7339 9870/20460/7339 +f 9878/20474/7335 9877/20473/7334 9880/20476/7340 9881/20477/7341 +f 9874/20467/7342 9882/20478/7343 9883/20481/7344 9884/20482/7345 +f 9885/20483/7346 9878/20474/7346 9881/20477/7346 9886/20485/7346 +f 9882/20478/7347 9887/20488/7347 9888/20490/7347 9883/20481/7347 +f 9879/20475/7348 9869/20457/7348 9885/20484/7348 9887/20489/7348 +f 9841/20413/7349 9879/20475/7349 9887/20489/7349 9882/20479/7349 +f 9869/20458/7350 9868/20456/7350 9878/20474/7350 9885/20483/7350 +f 9842/20416/7310 9841/20414/7309 9882/20480/7343 9874/20466/7342 +f 9884/20482/7345 9883/20481/7344 9889/20494/7351 9890/20495/7352 +f 9886/20485/7353 9881/20477/7353 9891/20496/7353 9892/20498/7353 +f 9883/20481/7354 9888/20490/7354 9893/20499/7354 9889/20494/7354 +f 9888/20491/7355 9886/20486/7355 9892/20497/7355 9893/20500/7355 +f 9876/20470/7356 9875/20468/7356 9894/20501/7356 9895/20504/7356 +f 9877/20473/7357 9876/20471/7357 9895/20506/7357 9880/20476/7357 +f 9875/20469/7358 9874/20467/7358 9884/20482/7358 9894/20503/7358 +f 9887/20489/7359 9885/20484/7359 9886/20487/7359 9888/20492/7359 +f 9893/20500/7360 9892/20497/7360 9896/20508/7360 9897/20509/7360 +f 9898/20511/7361 9890/20495/7361 9899/20512/7361 9900/20513/7361 +f 9901/20515/7362 9902/20517/7362 9903/20519/7362 9904/20521/7362 +f 9902/20517/7363 9898/20510/7363 9900/20514/7363 9903/20519/7363 +f 9881/20477/7341 9880/20476/7340 9901/20516/7364 9891/20496/7365 +f 9895/20505/7366 9894/20502/7366 9898/20510/7366 9902/20517/7366 +f 9880/20476/7367 9895/20506/7367 9902/20518/7367 9901/20516/7367 +f 9894/20503/7368 9884/20482/7368 9890/20495/7368 9898/20511/7368 +f 9905/20522/7369 9906/20524/7369 9907/20526/7370 9908/20527/7370 +f 9896/20507/7371 9909/20530/7371 9910/20531/7371 9911/20533/7371 +f 9912/20536/7372 9913/20538/7372 9914/20540/7372 9915/20541/7372 +f 9900/20513/7373 9899/20512/7373 9916/20544/7373 9917/20546/7373 +f 9889/20493/7374 9893/20500/7374 9897/20509/7374 9918/20550/7374 +f 9892/20498/7375 9891/20496/7375 9909/20530/7375 9896/20507/7375 +f 9890/20495/7352 9889/20494/7351 9918/20549/7376 9899/20512/7377 +f 9891/20496/7365 9901/20516/7364 9904/20520/7378 9909/20530/7379 +f 9849/20427/7380 9848/20425/7380 9919/20551/7380 9920/20553/7380 +f 9864/20449/7381 9921/20554/7381 9922/20556/7381 9923/20560/7381 +f 9865/20450/7382 9863/20448/7382 9924/20561/7382 9925/20563/7382 +f 9921/20555/7383 9866/20452/7384 9926/20565/7385 9922/20557/7386 +f 9855/20436/7387 9873/20464/7387 9921/20554/7387 9864/20449/7387 +f 9846/20422/7313 9845/20420/7312 9849/20427/7388 9862/20446/7389 +f 9853/20433/7390 9852/20431/7390 9863/20448/7390 9865/20450/7390 +f 9873/20465/7391 9859/20442/7391 9866/20452/7384 9921/20555/7383 +f 9923/20559/7392 9922/20558/7392 9927/20567/7392 9928/20570/7392 +f 9925/20563/7393 9924/20561/7393 9929/20571/7393 9930/20574/7393 +f 9922/20558/7386 9926/20566/7385 9931/20577/7394 9927/20567/7395 +f 9926/20566/7396 9925/20564/7396 9930/20575/7396 9931/20577/7396 +f 9862/20446/7389 9849/20427/7388 9920/20553/7397 9932/20579/7398 +f 9848/20426/7399 9864/20449/7399 9923/20560/7399 9919/20552/7399 +f 9863/20448/7400 9862/20447/7400 9932/20578/7400 9924/20561/7400 +f 9866/20453/7401 9865/20451/7401 9925/20564/7401 9926/20566/7401 +f 9931/20577/7402 9930/20575/7402 9933/20580/7402 9934/20582/7402 +f 9929/20572/7403 9935/20583/7403 9936/20584/7403 9937/20586/7403 +f 9938/20588/7404 9928/20568/7404 9939/20591/7404 9940/20593/7404 +f 9935/20583/7405 9941/20595/7406 9942/20596/7407 9936/20584/7408 +f 9920/20553/7409 9919/20551/7409 9938/20590/7409 9941/20595/7409 +f 9932/20579/7398 9920/20553/7397 9941/20595/7406 9935/20583/7405 +f 9919/20552/7410 9923/20560/7410 9928/20569/7410 9938/20589/7410 +f 9924/20562/7411 9932/20579/7411 9935/20583/7411 9929/20572/7411 +f 9940/20593/7412 9939/20591/7412 9913/20538/7412 9912/20536/7412 +f 9936/20584/7408 9942/20596/7407 9943/20597/7413 9944/20599/7413 +f 9942/20596/7414 9940/20594/7414 9912/20537/7415 9943/20597/7415 +f 9939/20591/7416 9945/20600/7416 9905/20523/7417 9913/20538/7418 +f 9927/20567/7395 9931/20577/7394 9934/20582/7419 9945/20601/7420 +f 9930/20576/7421 9929/20573/7421 9937/20587/7421 9933/20581/7421 +f 9928/20570/7422 9927/20567/7422 9945/20601/7422 9939/20592/7422 +f 9941/20595/7423 9938/20590/7423 9940/20594/7423 9942/20596/7423 +f 9946/20602/7424 9947/20604/7424 9948/20605/7424 9949/20607/7424 +f 9899/20512/7377 9918/20549/7376 9950/20610/7425 9916/20544/7425 +f 9947/20604/7426 9944/20598/7426 9951/20613/7427 9948/20605/7427 +f 9909/20530/7379 9904/20520/7378 9952/20616/7428 9910/20531/7428 +f 9937/20587/7429 9936/20585/7429 9944/20598/7426 9947/20604/7426 +f 9934/20582/7430 9933/20580/7430 9946/20603/7431 9906/20524/7432 +f 9945/20601/7420 9934/20582/7419 9906/20524/7369 9905/20522/7369 +f 9933/20581/7433 9937/20587/7433 9947/20604/7433 9946/20602/7433 +f 9953/20619/7434 9911/20534/7434 9910/20532/7434 9952/20617/7434 +f 9917/20547/7435 9953/20619/7434 9952/20617/7434 9954/20620/7434 +f 9916/20545/7435 9950/20611/7435 9953/20619/7434 9917/20547/7435 +f 9950/20611/7435 9955/20622/7434 9911/20534/7434 9953/20619/7434 +f 9956/20624/7436 9915/20542/7436 9914/20539/7436 9908/20528/7437 +f 9949/20608/7436 9956/20624/7436 9908/20528/7437 9907/20525/7437 +f 9948/20606/7438 9951/20614/7436 9956/20624/7436 9949/20608/7436 +f 9951/20614/7436 9957/20625/7436 9915/20542/7436 9956/20624/7436 +f 9904/20521/7439 9903/20519/7439 9954/20621/7439 9952/20618/7439 +f 9944/20599/7413 9943/20597/7413 9957/20626/7440 9951/20615/7440 +f 9918/20550/7441 9897/20509/7441 9955/20623/7441 9950/20612/7441 +f 9906/20524/7432 9946/20603/7431 9949/20609/7442 9907/20526/7442 +f 9903/20519/7443 9900/20514/7443 9917/20548/7443 9954/20621/7443 +f 9943/20597/7415 9912/20537/7415 9915/20543/7444 9957/20626/7444 +f 9897/20509/7445 9896/20508/7445 9911/20535/7445 9955/20623/7445 +f 9913/20538/7418 9905/20523/7417 9908/20529/7446 9914/20540/7446 +f 9958/20628/7305 9959/20629/7305 9960/20630/7306 9961/20632/7307 +f 9962/20633/7447 9961/20631/7447 9963/20635/7448 9964/20636/7449 +f 9965/20637/7322 9966/20639/7322 9967/20642/7322 9968/20644/7322 +f 9969/20646/7315 9970/20647/7315 9965/20638/7315 9971/20650/7315 +f 9972/20652/7316 9959/20629/7316 9973/20653/7316 9974/20654/7316 +f 9975/20656/7317 9972/20651/7317 9974/20655/7317 9976/20657/7317 +f 9977/20658/7317 9978/20659/7317 9972/20651/7317 9975/20656/7317 +f 9978/20660/7320 9960/20630/7320 9959/20629/7316 9972/20652/7316 +f 9979/20661/7450 9969/20645/7450 9971/20649/7450 9980/20662/7450 +f 9962/20633/7450 9981/20664/7450 9969/20645/7450 9979/20661/7450 +f 9981/20663/7315 9982/20665/7315 9970/20647/7315 9969/20646/7315 +f 9974/20654/7323 9973/20653/7323 9983/20667/7323 9984/20669/7323 +f 9980/20662/7451 9971/20649/7451 9985/20670/7451 9986/20672/7451 +f 9987/20673/7452 9980/20662/7453 9986/20672/7454 9988/20675/7455 +f 9970/20648/7325 9989/20677/7325 9966/20639/7325 9965/20637/7325 +f 9982/20666/7325 9990/20679/7325 9989/20677/7325 9970/20648/7325 +f 9978/20659/7327 9977/20658/7327 9991/20680/7327 9992/20682/7327 +f 9982/20665/7328 9981/20663/7328 9993/20683/7328 9994/20685/7328 +f 9977/20658/7456 9990/20678/7456 9995/20688/7329 9991/20680/7330 +f 9979/20661/7457 9958/20627/7457 9961/20631/7447 9962/20633/7447 +f 9980/20662/7453 9987/20673/7452 9958/20627/7457 9979/20661/7457 +f 9987/20674/7305 9973/20653/7305 9959/20629/7305 9958/20628/7305 +f 9996/20689/7348 9992/20681/7348 9997/20691/7348 9998/20693/7348 +f 9993/20684/7458 9964/20636/7458 9999/20695/7458 10000/20697/7458 +f 9995/20687/7332 9994/20686/7332 10001/20698/7332 10002/20701/7332 +f 9994/20685/7333 9993/20683/7333 10000/20696/7333 10001/20700/7333 +f 9960/20630/7320 9978/20660/7320 9992/20681/7336 9996/20689/7336 +f 9990/20679/7337 9982/20666/7337 9994/20686/7337 9995/20687/7337 +f 9961/20632/7307 9960/20630/7306 9996/20689/7338 9963/20634/7338 +f 9981/20664/7459 9962/20633/7459 9964/20636/7459 9993/20684/7459 +f 10002/20702/7357 10001/20699/7357 10003/20706/7357 10004/20707/7357 +f 10001/20700/7356 10000/20696/7356 10005/20708/7356 10003/20704/7356 +f 10006/20712/7335 10002/20702/7334 10004/20707/7340 10007/20713/7341 +f 9999/20695/7460 10008/20715/7461 10009/20716/7462 10010/20717/7463 +f 9963/20634/7349 9996/20689/7349 9998/20693/7349 10008/20714/7349 +f 9992/20682/7350 9991/20680/7350 10006/20711/7350 9997/20690/7350 +f 9964/20636/7449 9963/20635/7448 10008/20715/7461 9999/20695/7460 +f 9991/20680/7330 9995/20688/7329 10002/20703/7334 10006/20711/7335 +f 10010/20717/7463 10009/20716/7462 10011/20719/7464 10012/20720/7465 +f 10013/20723/7353 10007/20713/7353 10014/20724/7353 10015/20725/7353 +f 10009/20716/7354 10016/20729/7354 10017/20730/7354 10011/20719/7354 +f 10016/20727/7355 10013/20721/7355 10015/20726/7355 10017/20731/7355 +f 10000/20697/7466 9999/20695/7466 10010/20717/7466 10005/20710/7466 +f 9998/20693/7359 9997/20691/7359 10013/20722/7359 10016/20728/7359 +f 10008/20715/7347 9998/20694/7347 10016/20729/7347 10009/20716/7347 +f 9997/20692/7346 10006/20712/7346 10007/20713/7346 10013/20723/7346 +f 10015/20725/7375 10014/20724/7375 10018/20732/7375 10019/20733/7375 +f 10011/20718/7374 10017/20731/7374 10020/20735/7374 10021/20737/7374 +f 10017/20731/7360 10015/20726/7360 10019/20734/7360 10020/20735/7360 +f 10022/20738/7467 10012/20720/7467 10023/20740/7467 10024/20741/7467 +f 10007/20713/7341 10004/20707/7340 10025/20743/7468 10014/20724/7469 +f 10003/20705/7366 10005/20709/7366 10022/20739/7366 10026/20746/7366 +f 10004/20707/7367 10003/20706/7367 10026/20745/7367 10025/20743/7367 +f 10005/20710/7470 10010/20717/7470 10012/20720/7470 10022/20738/7470 +f 10027/20747/7471 10028/20749/7471 10029/20751/7370 10030/20752/7370 +f 10019/20733/7472 10018/20732/7472 10031/20755/7472 10032/20757/7472 +f 10033/20761/7372 10034/20763/7372 10035/20765/7372 10036/20766/7372 +f 10024/20741/7473 10023/20740/7473 10037/20770/7473 10038/20772/7473 +f 10012/20720/7465 10011/20719/7464 10021/20736/7474 10023/20740/7475 +f 10014/20724/7469 10025/20743/7468 10039/20776/7476 10018/20732/7379 +f 10026/20746/7363 10022/20739/7363 10024/20742/7363 10040/20778/7363 +f 10025/20744/7362 10026/20746/7362 10040/20778/7362 10039/20777/7362 +f 9983/20667/7381 9988/20676/7381 10041/20779/7381 10042/20781/7381 +f 9985/20671/7382 9968/20643/7382 10043/20785/7382 10044/20787/7382 +f 9988/20675/7455 9986/20672/7454 10045/20788/7477 10041/20780/7478 +f 9986/20672/7479 9985/20670/7479 10044/20786/7479 10045/20788/7479 +f 9976/20657/7314 9974/20655/7314 9984/20668/7314 10046/20789/7314 +f 9973/20653/7387 9987/20674/7387 9988/20676/7387 9983/20667/7387 +f 9966/20640/7480 9976/20657/7480 10046/20789/7388 9967/20641/7389 +f 9971/20650/7390 9965/20638/7390 9968/20643/7390 9985/20671/7390 +f 10041/20780/7478 10045/20788/7477 10047/20790/7481 10048/20791/7482 +f 10045/20788/7483 10044/20786/7483 10049/20793/7483 10047/20790/7483 +f 10043/20783/7411 10050/20797/7411 10051/20798/7411 10052/20799/7411 +f 10053/20803/7410 10042/20781/7410 10054/20805/7410 10055/20808/7410 +f 10046/20789/7380 9984/20668/7380 10053/20802/7380 10056/20811/7380 +f 9967/20641/7389 10046/20789/7388 10056/20811/7397 10050/20795/7398 +f 9984/20669/7399 9983/20667/7399 10042/20781/7399 10053/20803/7399 +f 9968/20644/7400 9967/20642/7400 10050/20796/7400 10043/20784/7400 +f 10052/20799/7403 10051/20798/7403 10057/20813/7403 10058/20815/7403 +f 10055/20809/7404 10054/20806/7404 10059/20818/7404 10060/20820/7404 +f 10051/20798/7405 10061/20821/7406 10062/20822/7407 10057/20813/7408 +f 10061/20821/7423 10055/20810/7423 10060/20819/7423 10062/20822/7423 +f 10044/20787/7393 10043/20785/7393 10052/20800/7393 10049/20792/7393 +f 10042/20782/7392 10041/20780/7392 10048/20791/7392 10054/20807/7392 +f 10056/20812/7409 10053/20804/7409 10055/20810/7409 10061/20821/7409 +f 10050/20797/7398 10056/20812/7397 10061/20821/7406 10051/20798/7405 +f 10062/20822/7414 10060/20819/7414 10033/20762/7415 10063/20823/7415 +f 10059/20818/7416 10064/20824/7416 10027/20748/7417 10034/20763/7418 +f 10065/20826/7484 10058/20816/7484 10066/20828/7484 10067/20829/7484 +f 10064/20825/7485 10068/20831/7486 10028/20749/7471 10027/20747/7471 +f 10047/20790/7487 10049/20793/7487 10065/20827/7487 10068/20831/7487 +f 10048/20791/7482 10047/20790/7481 10068/20831/7486 10064/20825/7485 +f 10049/20794/7421 10052/20801/7421 10058/20816/7421 10065/20826/7421 +f 10054/20807/7422 10048/20791/7422 10064/20825/7422 10059/20817/7422 +f 10067/20829/7488 10066/20828/7488 10069/20832/7488 10070/20834/7488 +f 10023/20740/7475 10021/20736/7474 10071/20838/7489 10037/20770/7489 +f 10018/20732/7379 10039/20776/7476 10072/20841/7428 10031/20755/7428 +f 10066/20828/7426 10073/20844/7426 10074/20846/7427 10069/20832/7427 +f 10057/20813/7408 10062/20822/7407 10063/20823/7413 10073/20845/7413 +f 10060/20820/7412 10059/20818/7412 10034/20763/7412 10033/20761/7412 +f 10058/20816/7429 10057/20814/7429 10073/20844/7426 10066/20828/7426 +f 10068/20831/7490 10065/20827/7490 10067/20830/7491 10028/20749/7492 +f 10075/20849/7434 10032/20758/7434 10031/20756/7434 10072/20842/7434 +f 10038/20773/7435 10075/20849/7434 10072/20842/7434 10076/20851/7434 +f 10037/20771/7435 10071/20839/7435 10075/20850/7434 10038/20774/7435 +f 10071/20839/7435 10077/20853/7434 10032/20759/7434 10075/20850/7434 +f 10078/20855/7436 10036/20767/7436 10035/20764/7436 10030/20753/7437 +f 10070/20835/7436 10078/20855/7436 10030/20753/7437 10029/20750/7437 +f 10069/20833/7438 10074/20847/7436 10078/20856/7436 10070/20836/7436 +f 10074/20847/7436 10079/20857/7436 10036/20768/7436 10078/20856/7436 +f 10039/20777/7439 10040/20778/7439 10076/20852/7439 10072/20843/7439 +f 10073/20845/7413 10063/20823/7413 10079/20858/7440 10074/20848/7440 +f 10021/20737/7441 10020/20735/7441 10077/20854/7441 10071/20840/7441 +f 10028/20749/7492 10067/20830/7491 10070/20837/7493 10029/20751/7493 +f 10040/20778/7443 10024/20742/7443 10038/20775/7443 10076/20852/7443 +f 10063/20823/7415 10033/20762/7415 10036/20769/7444 10079/20858/7444 +f 10020/20735/7445 10019/20734/7445 10032/20760/7445 10077/20854/7445 +f 10034/20763/7418 10027/20748/7417 10030/20754/7446 10035/20765/7446 +o Chair.028 +v -7.013319 0.415382 3.800620 +v -7.013319 0.429951 3.800620 +v -7.000219 0.429951 3.752761 +v -6.894101 0.429951 3.365072 +v -6.881002 0.429951 3.317214 +v -6.881002 0.415382 3.317214 +v -6.894101 0.415382 3.365072 +v -7.000219 0.415382 3.752761 +v -6.510016 0.429951 3.418760 +v -6.510016 0.415382 3.418760 +v -6.510016 0.400812 3.418760 +v -6.522060 0.400812 3.462760 +v -6.894101 0.400812 3.365072 +v -6.881002 0.400812 3.317214 +v -6.642333 0.415382 3.902165 +v -6.642333 0.429951 3.902165 +v -6.630289 0.415382 3.858165 +v -6.630289 0.429951 3.858165 +v -6.642333 0.400812 3.902165 +v -6.630289 0.400812 3.858165 +v -7.013319 0.400812 3.800620 +v -7.000219 0.400812 3.752761 +v -6.910614 0.432961 3.330370 +v -6.914560 0.432961 3.344790 +v -6.910223 0.421009 3.345977 +v -6.906276 0.421009 3.331558 +v -6.922401 0.426967 3.342644 +v -6.918454 0.426967 3.328224 +v -7.029745 0.419106 3.774838 +v -7.025855 0.419106 3.760625 +v -7.038033 0.425064 3.757292 +v -7.041923 0.425064 3.771505 +v -7.034217 0.434699 3.773614 +v -7.030327 0.434699 3.759401 +v -6.928421 0.431853 3.340996 +v -6.924475 0.431853 3.326576 +v -7.044188 0.433592 3.755607 +v -7.048079 0.433592 3.769820 +v -7.059909 0.592772 3.766582 +v -7.046048 0.593879 3.770376 +v -6.922444 0.592141 3.327132 +v -6.926391 0.592141 3.341552 +v -6.936306 0.591033 3.323338 +v -6.954055 0.829840 3.318480 +v -6.940194 0.830948 3.322274 +v -7.077658 0.831579 3.761724 +v -7.063797 0.832686 3.765517 +v -6.940252 0.591033 3.337758 +v -7.042158 0.593879 3.756163 +v -7.056019 0.592772 3.752368 +v -6.930344 0.830737 3.324970 +v -6.949442 0.870951 3.343650 +v -6.940683 0.870348 3.346047 +v -7.050045 0.832325 3.754004 +v -7.053936 0.832325 3.768217 +v -7.051682 0.869634 3.744732 +v -7.046858 0.864490 3.728613 +v -6.958002 0.829840 3.332899 +v -7.037279 0.608202 3.772776 +v -7.059907 0.832686 3.751304 +v -7.073768 0.831579 3.747510 +v -6.944140 0.830948 3.336694 +v -6.961926 0.869953 3.340233 +v -6.913686 0.606614 3.329530 +v -6.917633 0.606614 3.343949 +v -6.934291 0.830737 3.339390 +v -7.033388 0.608202 3.758563 +v -7.060450 0.870373 3.742332 +v -7.055628 0.865229 3.726213 +v -7.068111 0.864232 3.722796 +v -6.962813 0.913073 3.415671 +v -6.970829 0.914244 3.413961 +v -7.044112 0.911897 3.670665 +v -7.036347 0.911148 3.673163 +v -6.966549 0.867524 3.357832 +v -6.954065 0.868521 3.361249 +v -6.972537 0.902898 3.423515 +v -6.985984 0.901824 3.419834 +v -6.945306 0.867919 3.363647 +v -7.072935 0.869376 3.738914 +v -7.040772 0.900855 3.661685 +v -7.054218 0.899781 3.658005 +v -7.057559 0.910823 3.666985 +v -6.984275 0.913170 3.410280 +v -7.033536 0.901346 3.665757 +v -6.964522 0.901727 3.425225 +v -6.522060 0.415382 3.462760 +v -6.522060 0.429951 3.462760 +v -6.695560 0.438060 3.365723 +v -6.694018 0.443651 3.360090 +v -6.820452 0.443651 3.325482 +v -6.821994 0.438060 3.331116 +v -6.821948 0.429976 3.330945 +v -6.853242 0.437950 3.322563 +v -6.850674 0.430300 3.323082 +v -6.690361 0.429903 3.346729 +v -6.690407 0.437987 3.346899 +v -6.563974 0.437987 3.381506 +v -6.563928 0.429903 3.381336 +v -6.565451 0.443828 3.386899 +v -6.534680 0.439408 3.395322 +v -6.535458 0.434055 3.389311 +v -6.694037 0.424135 3.360160 +v -6.691903 0.424311 3.352363 +v -6.565470 0.424311 3.386970 +v -6.567604 0.424135 3.394767 +v -6.691884 0.443828 3.352292 +v -6.567585 0.443651 3.394696 +v -6.816842 0.437987 3.312291 +v -6.818318 0.443828 3.317685 +v -6.695513 0.429976 3.365552 +v -6.569080 0.429976 3.400160 +v -6.820471 0.424135 3.325552 +v -6.818337 0.424311 3.317755 +v -6.538531 0.426646 3.388288 +v -6.542231 0.421521 3.393331 +v -6.536883 0.439247 3.403100 +v -6.544434 0.421360 3.401109 +v -6.543655 0.426713 3.407119 +v -6.816795 0.429903 3.312122 +v -6.848067 0.437881 3.303744 +v -6.851365 0.443408 3.308640 +v -6.847377 0.424773 3.318188 +v -6.845298 0.424940 3.310376 +v -6.845500 0.430231 3.304265 +v -6.569127 0.438060 3.400330 +v -6.877959 0.420977 3.315614 +v -6.873035 0.416357 3.311165 +v -6.871005 0.416497 3.303339 +v -6.872764 0.420919 3.296802 +v -6.877582 0.427313 3.295666 +v -6.853444 0.443241 3.316452 +v -6.895659 0.402967 3.290535 +v -6.902215 0.407418 3.288923 +v -6.882777 0.427371 3.314478 +v -6.907427 0.407458 3.307732 +v -6.900870 0.403008 3.309343 +v -6.882505 0.431932 3.300116 +v -6.908395 0.410634 3.293029 +v -6.884536 0.431793 3.307941 +v -6.910387 0.410537 3.300865 +v -6.924542 0.380352 3.303047 +v -6.916947 0.378323 3.304942 +v -6.919321 0.380334 3.284241 +v -6.926251 0.381800 3.288142 +v -6.928220 0.381756 3.295984 +v -6.894691 0.399792 3.305237 +v -6.892699 0.399889 3.297401 +v -6.941319 0.345795 3.284017 +v -6.943288 0.345756 3.291860 +v -6.910017 0.376856 3.301042 +v -6.931914 0.342751 3.300845 +v -6.924942 0.341467 3.296957 +v -6.911727 0.378304 3.286137 +v -6.908048 0.376901 3.293200 +v -6.922974 0.341506 3.289114 +v -6.926694 0.342735 3.282040 +v -6.473437 0.349401 3.426522 +v -6.481134 0.348454 3.424232 +v -6.441488 -0.002953 3.435085 +v -6.433790 -0.002007 3.437374 +v -6.934346 0.344511 3.280128 +v -7.017954 0.001491 3.257243 +v -7.024927 0.002774 3.261132 +v -6.464236 0.350077 3.414604 +v -6.466539 0.350056 3.422355 +v -6.426892 -0.001352 3.433207 +v -6.424589 -0.001331 3.425456 +v -7.015522 -0.000270 3.277961 +v -7.008550 -0.001553 3.274072 +v -6.939569 0.344527 3.298934 +v -6.504834 0.425574 3.403491 +v -6.507489 0.421603 3.396967 +v -6.540583 0.434122 3.408143 +v -6.512590 0.421652 3.415805 +v -6.507093 0.425454 3.411254 +v -6.518658 0.412305 3.399783 +v -6.520916 0.412185 3.407546 +v -6.518261 0.416156 3.414070 +v -6.491660 0.403231 3.421535 +v -6.485026 0.405075 3.417295 +v -6.500522 0.398698 3.404747 +v -6.502816 0.398640 3.412501 +v -6.498974 0.400566 3.419349 +v -6.513161 0.416106 3.395232 +v -6.488264 0.371230 3.416484 +v -6.484236 0.372479 3.423383 +v -6.493888 0.400542 3.400507 +v -6.479152 0.372464 3.404541 +v -6.485962 0.371267 3.408732 +v -6.482730 0.405133 3.409541 +v -6.469856 0.375406 3.421447 +v -6.467556 0.375443 3.413695 +v -6.486573 0.403207 3.402692 +v -6.471582 0.374194 3.406795 +v -6.468355 0.349392 3.407679 +v -6.476051 0.348446 3.405389 +v -6.476666 0.374209 3.425638 +v -6.485253 0.347770 3.417308 +v -6.482949 0.347791 3.409557 +v -6.443303 -0.003617 3.420409 +v -6.445606 -0.003637 3.428160 +v -7.023176 0.001507 3.276049 +v -6.436405 -0.002962 3.416241 +v -7.010301 -0.000286 3.259156 +v -7.016738 0.000611 3.267602 +v -7.006582 -0.001514 3.266229 +v -7.026896 0.002736 3.268975 +v -6.435098 -0.002484 3.426807 +v -6.428708 -0.002015 3.418530 +v -6.833779 0.438060 3.870691 +v -6.832237 0.443651 3.865058 +v -6.958671 0.443651 3.830450 +v -6.960213 0.438060 3.836084 +v -6.960167 0.429976 3.835914 +v -6.991461 0.437950 3.827531 +v -6.988893 0.430300 3.828051 +v -6.703689 0.424311 3.891938 +v -6.702147 0.429903 3.886304 +v -6.676750 0.426646 3.893256 +v -6.680449 0.421521 3.898299 +v -6.832256 0.424135 3.865128 +v -6.830122 0.424311 3.857331 +v -6.705823 0.424135 3.899735 +v -6.830103 0.443828 3.857260 +v -6.705804 0.443651 3.899665 +v -6.703670 0.443828 3.891867 +v -6.828626 0.437987 3.851867 +v -6.702193 0.437987 3.886474 +v -6.955060 0.437987 3.817260 +v -6.956537 0.443828 3.822653 +v -6.833733 0.429976 3.870522 +v -6.707299 0.429976 3.905129 +v -6.958690 0.424135 3.830521 +v -6.956556 0.424311 3.822724 +v -6.675102 0.439247 3.908068 +v -6.672899 0.439408 3.900290 +v -6.682652 0.421360 3.906077 +v -6.681874 0.426713 3.912088 +v -6.707345 0.438060 3.905298 +v -6.678802 0.434122 3.913111 +v -6.828580 0.429903 3.851697 +v -6.955014 0.429903 3.817090 +v -6.986286 0.437881 3.808712 +v -6.989583 0.443408 3.813608 +v -6.985596 0.424773 3.823156 +v -6.983517 0.424940 3.815344 +v -6.983718 0.430231 3.809233 +v -6.991663 0.443241 3.821420 +v -7.020725 0.431932 3.805084 +v -7.022755 0.431793 3.812909 +v -7.016178 0.420977 3.820583 +v -7.011255 0.416357 3.816133 +v -7.009224 0.416497 3.808307 +v -7.010983 0.420919 3.801770 +v -7.030918 0.399889 3.802369 +v -7.033878 0.402967 3.795503 +v -7.032910 0.399792 3.810205 +v -7.015800 0.427313 3.800634 +v -7.040434 0.407418 3.793891 +v -7.020996 0.427371 3.819447 +v -7.045646 0.407458 3.812700 +v -7.039090 0.403008 3.814312 +v -7.062761 0.380352 3.808015 +v -7.055166 0.378323 3.809911 +v -7.046614 0.410634 3.797997 +v -7.057540 0.380334 3.789209 +v -7.064470 0.381800 3.793110 +v -7.048606 0.410537 3.805834 +v -7.066439 0.381756 3.800952 +v -7.072566 0.344511 3.785096 +v -7.079538 0.345795 3.788985 +v -7.081507 0.345756 3.796828 +v -7.077787 0.344527 3.803902 +v -7.048236 0.376856 3.806010 +v -7.070134 0.342751 3.805814 +v -7.063161 0.341467 3.801925 +v -7.049946 0.378304 3.791105 +v -7.046267 0.376901 3.798168 +v -6.611656 0.349401 3.931491 +v -6.619353 0.348454 3.929201 +v -6.579707 -0.002953 3.940053 +v -6.572009 -0.002007 3.942343 +v -7.156173 0.001491 3.762211 +v -7.163146 0.002774 3.766100 +v -6.602455 0.350077 3.919572 +v -6.604758 0.350056 3.927323 +v -6.565111 -0.001352 3.938175 +v -6.562808 -0.001331 3.930424 +v -7.153741 -0.000270 3.782929 +v -7.146769 -0.001553 3.779040 +v -7.064913 0.342735 3.787009 +v -7.061193 0.341506 3.794082 +v -6.650809 0.421652 3.920774 +v -6.645312 0.425454 3.916222 +v -6.656877 0.412305 3.904751 +v -6.659135 0.412185 3.912514 +v -6.656481 0.416156 3.919039 +v -6.673677 0.434055 3.894279 +v -6.637193 0.400566 3.924318 +v -6.629879 0.403231 3.926503 +v -6.641035 0.398640 3.917469 +v -6.651380 0.416106 3.900200 +v -6.632107 0.400542 3.905475 +v -6.638741 0.398698 3.909715 +v -6.643053 0.425574 3.908459 +v -6.623245 0.405075 3.922263 +v -6.620949 0.405133 3.914510 +v -6.645708 0.421603 3.901935 +v -6.617371 0.372464 3.909509 +v -6.624181 0.371267 3.913701 +v -6.608075 0.375406 3.926415 +v -6.605774 0.375443 3.918663 +v -6.624792 0.403207 3.907660 +v -6.609801 0.374194 3.911763 +v -6.606574 0.349392 3.912647 +v -6.614885 0.374209 3.930607 +v -6.626482 0.371230 3.921452 +v -6.621168 0.347791 3.914525 +v -6.623471 0.347770 3.922276 +v -6.622455 0.372479 3.928352 +v -6.581522 -0.003617 3.925377 +v -6.583825 -0.003637 3.933128 +v -7.161395 0.001507 3.781017 +v -7.148520 -0.000286 3.764124 +v -6.614270 0.348446 3.910357 +v -6.574624 -0.002962 3.921210 +v -7.154958 0.000611 3.772571 +v -7.144801 -0.001514 3.771198 +v -7.165114 0.002736 3.773943 +v -6.573317 -0.002484 3.931776 +v -6.566927 -0.002015 3.923499 +vn -0.9645 -0.0000 -0.2640 +vn 0.2640 -0.0000 -0.9645 +vn -0.0000 -1.0000 -0.0000 +vn -0.2640 -0.0000 0.9645 +vn 0.9645 -0.0000 0.2640 +vn 0.1149 0.9929 0.0314 +vn -0.2543 -0.9646 -0.0696 +vn -0.4116 -0.9044 -0.1127 +vn -0.7395 -0.0911 0.6670 +vn -0.1565 -0.9868 -0.0428 +vn 0.1653 0.9852 0.0453 +vn -0.2621 -0.0779 -0.9619 +vn -0.4593 -0.1146 -0.8808 +vn -0.8199 -0.0987 0.5639 +vn -0.5945 -0.7874 -0.1627 +vn -0.7722 -0.5992 -0.2114 +vn 0.9617 0.0768 0.2632 +vn -0.9617 -0.0768 -0.2632 +vn 0.1810 -0.2916 -0.9393 +vn 0.2486 0.5027 -0.8280 +vn 0.9584 0.1047 0.2657 +vn 0.9596 0.1119 0.2583 +vn 0.9603 0.1062 0.2579 +vn -0.6688 -0.0656 -0.7406 +vn 0.1920 0.4967 -0.8464 +vn 0.9610 0.0768 0.2655 +vn 0.8143 -0.5359 0.2229 +vn -0.1949 0.5287 0.8261 +vn 0.2540 -0.6113 -0.7495 +vn 0.5029 -0.8531 0.1389 +vn 0.8155 -0.5326 0.2265 +vn 0.8140 -0.5337 0.2294 +vn 0.8170 -0.5315 0.2236 +vn 0.1102 0.9931 0.0397 +vn 0.0271 0.9648 0.2614 +vn 0.0178 0.9584 0.2850 +vn -0.0581 -0.8811 0.4693 +vn -0.3437 -0.8634 0.3693 +vn -0.6327 -0.7743 0.0082 +vn -0.1741 -0.5705 0.8026 +vn -0.9097 -0.3669 0.1948 +vn -0.8806 -0.3997 0.2547 +vn -0.9641 -0.0465 -0.2616 +vn 0.9577 0.1108 0.2654 +vn 0.9574 0.1116 0.2663 +vn -0.9602 -0.0794 -0.2678 +vn -0.2637 0.5223 0.8109 +vn -0.9621 -0.0401 -0.2696 +vn 0.9580 0.1101 0.2647 +vn -0.9608 -0.0584 -0.2710 +vn -0.5300 -0.7742 -0.3459 +vn -0.9601 -0.0813 -0.2678 +vn -0.9613 -0.0847 -0.2622 +vn -0.9584 -0.0769 -0.2748 +vn 0.0703 0.8588 -0.5074 +vn -0.1397 0.9633 0.2292 +vn -0.0762 0.9970 -0.0126 +vn -0.1399 0.9630 0.2301 +vn 0.2050 0.8610 -0.4655 +vn 0.9612 0.0845 0.2627 +vn 0.9596 0.0831 0.2689 +vn 0.9595 0.0796 0.2701 +vn 0.9584 0.0778 0.2747 +vn 0.1906 -0.8773 -0.4405 +vn 0.1374 -0.9658 -0.2201 +vn 0.9625 0.0880 0.2565 +vn -0.9626 -0.0886 -0.2560 +vn -0.1947 0.8673 0.4581 +vn -0.0667 0.8695 0.4893 +vn 0.9620 0.0744 0.2627 +vn 0.9589 0.0849 0.2707 +vn 0.0760 -0.9970 0.0132 +vn -0.9624 -0.0732 -0.2616 +vn 0.9626 0.0723 0.2611 +vn -0.0000 1.0000 -0.0000 +vn -0.1826 0.7224 0.6669 +vn -0.1841 0.7268 0.6617 +vn -0.1841 0.7269 0.6617 +vn -0.2640 -0.0225 0.9643 +vn -0.2637 -0.0215 0.9644 +vn -0.2577 -0.0204 0.9660 +vn 0.2639 0.0218 -0.9643 +vn 0.2653 0.0219 -0.9639 +vn 0.2654 0.0219 -0.9639 +vn 0.2794 0.6937 -0.6638 +vn 0.0057 -0.9998 -0.0210 +vn -0.0058 0.9998 0.0211 +vn 0.1907 0.6915 -0.6967 +vn 0.1868 0.6962 -0.6931 +vn 0.1869 0.6962 -0.6931 +vn -0.0115 0.9997 0.0192 +vn -0.1907 -0.6915 0.6968 +vn 0.0962 -0.7257 -0.6812 +vn 0.1266 0.9903 0.0567 +vn -0.2688 -0.6955 0.6663 +vn 0.1826 -0.7223 -0.6670 +vn 0.2640 0.0221 -0.9643 +vn 0.1830 0.7008 -0.6895 +vn -0.0163 -0.9995 -0.0264 +vn 0.2573 0.0214 -0.9661 +vn 0.2636 0.0224 -0.9644 +vn 0.0203 -0.6683 0.7437 +vn 0.3971 -0.6972 -0.5969 +vn 0.2966 -0.9532 0.0592 +vn 0.2509 0.0183 -0.9678 +vn 0.2565 0.0214 -0.9663 +vn -0.0173 0.9997 0.0174 +vn 0.1680 -0.7326 -0.6596 +vn -0.1856 0.7313 0.6564 +vn -0.1992 -0.7022 0.6835 +vn 0.2458 0.0132 -0.9692 +vn 0.2500 0.0178 -0.9681 +vn -0.2514 -0.0175 0.9677 +vn -0.2569 -0.0205 0.9662 +vn -0.2508 -0.0172 0.9679 +vn -0.2465 -0.0124 0.9691 +vn -0.2296 0.5509 -0.8024 +vn -0.6160 0.5748 0.5386 +vn -0.3284 0.9421 -0.0679 +vn -0.4133 0.6901 0.5940 +vn -0.0353 0.6614 -0.7492 +vn -0.2462 -0.0119 0.9691 +vn -0.2448 -0.0090 0.9695 +vn -0.3789 0.3812 -0.8433 +vn -0.7719 0.3978 0.4959 +vn -0.8170 0.5403 -0.2016 +vn 0.5782 -0.8044 0.1363 +vn 0.6028 -0.5868 -0.5406 +vn 0.2175 -0.5625 0.7977 +vn -0.6049 0.7833 -0.1436 +vn -0.8903 0.3980 -0.2214 +vn 0.4268 -0.2790 0.8603 +vn 0.8243 -0.2912 -0.4856 +vn 0.8892 -0.4005 0.2211 +vn 0.2443 0.0092 -0.9697 +vn 0.2456 0.0122 -0.9693 +vn 0.7983 -0.5692 0.1966 +vn 0.7631 -0.4135 -0.4967 +vn 0.3712 -0.3964 0.8397 +vn -0.2849 -0.0027 0.9586 +vn -0.2849 -0.0025 0.9586 +vn -0.4561 0.1694 -0.8737 +vn 0.9520 0.1162 0.2832 +vn 0.4561 -0.1695 0.8736 +vn -0.8247 0.2899 0.4856 +vn -0.4272 0.2777 -0.8605 +vn -0.2454 -0.0080 0.9694 +vn -0.2444 -0.0055 0.9697 +vn 0.2435 0.0054 -0.9699 +vn 0.2440 0.0070 -0.9698 +vn 0.4605 0.6472 -0.6075 +vn 0.1068 0.6748 0.7302 +vn -0.3345 -0.9356 -0.1129 +vn -0.2669 -0.0216 0.9635 +vn -0.2720 -0.0207 0.9621 +vn -0.2777 -0.0182 0.9605 +vn -0.2728 -0.0205 0.9619 +vn -0.0855 0.7239 0.6846 +vn 0.2671 0.0227 -0.9634 +vn 0.2722 0.0218 -0.9620 +vn -0.1052 -0.9932 -0.0508 +vn -0.2667 -0.0222 0.9635 +vn 0.2969 0.5630 0.7713 +vn -0.5597 -0.8103 -0.1735 +vn -0.2823 -0.0112 0.9593 +vn -0.2786 -0.0173 0.9602 +vn -0.6022 -0.5801 0.5484 +vn 0.2730 0.0211 -0.9618 +vn 0.2780 0.0187 -0.9604 +vn 0.3879 0.9128 0.1278 +vn -0.0814 -0.6896 -0.7196 +vn -0.4342 -0.6617 0.6112 +vn -0.7816 -0.3366 0.5252 +vn -0.4392 -0.3512 -0.8269 +vn 0.8464 0.4682 0.2537 +vn 0.2826 0.0114 -0.9592 +vn 0.2790 0.0175 -0.9601 +vn 0.2832 0.0104 -0.9590 +vn 0.2850 0.0032 -0.9585 +vn 0.6381 0.5405 -0.5483 +vn 0.6363 0.7463 0.1953 +vn -0.2645 -0.6033 -0.7524 +vn 0.9498 0.1344 0.2825 +vn 0.2848 0.0027 -0.9586 +vn 0.8521 0.0928 -0.5150 +vn 0.8527 0.0866 -0.5152 +vn 0.5086 0.0969 0.8555 +vn 0.5090 0.0905 0.8560 +vn 0.5090 0.0904 0.8560 +vn -0.2840 -0.0030 0.9588 +vn -0.2822 -0.0100 0.9593 +vn -0.8392 -0.4821 -0.2517 +vn 0.4419 0.3437 0.8286 +vn 0.7847 0.3294 -0.5252 +vn -0.9520 -0.1162 -0.2832 +vn -0.2435 -0.0053 0.9699 +vn -0.5091 -0.0898 -0.8560 +vn -0.5095 -0.0839 -0.8564 +vn 0.2436 0.0053 -0.9699 +vn -0.5088 -0.0956 -0.8556 +vn -0.8522 -0.0916 0.5151 +vn -0.8527 -0.0860 0.5152 +vn -0.8527 -0.0859 0.5152 +vn -0.9501 -0.1319 -0.2827 +vn -0.2119 -0.9756 -0.0580 +vn -0.2120 -0.9756 -0.0581 +vn 0.1129 -0.9931 0.0309 +vn 0.1130 -0.9931 0.0309 +vn 0.1130 -0.9931 0.0310 +vn 0.8581 -0.1770 -0.4819 +vn 0.2848 0.0025 -0.9586 +vn -0.8581 0.1770 0.4820 +vn -0.8532 -0.0803 0.5154 +vn 0.9407 -0.2449 0.2349 +vn 0.8532 0.0803 -0.5154 +vn -0.9407 0.2449 -0.2349 +vn 0.5095 0.0839 0.8564 +vn -0.2640 -0.0221 0.9643 +vn -0.2636 -0.0224 0.9644 +vn -0.2573 -0.0214 0.9661 +vn -0.1907 -0.6915 0.6967 +vn -0.2688 -0.6956 0.6663 +vn -0.2653 -0.0219 0.9639 +vn -0.2654 -0.0219 0.9639 +vn -0.2722 -0.0218 0.9620 +vn -0.2672 -0.0228 0.9634 +vn 0.2640 0.0224 -0.9643 +vn -0.2639 -0.0218 0.9643 +vn 0.0204 -0.6683 0.7436 +vn 0.2966 -0.9532 0.0593 +vn -0.1992 -0.7023 0.6835 +vn 0.5782 -0.8044 0.1364 +vn -0.2509 -0.0183 0.9678 +vn -0.2564 -0.0214 0.9663 +vn -0.2500 -0.0178 0.9681 +vn -0.2458 -0.0131 0.9692 +vn -0.2456 -0.0123 0.9693 +vn -0.2443 -0.0092 0.9697 +vn 0.2176 -0.5626 0.7976 +vn -0.2295 0.5509 -0.8024 +vn -0.4272 0.2777 -0.8604 +vn 0.4268 -0.2790 0.8602 +vn 0.2442 0.0091 -0.9697 +vn 0.2456 0.0123 -0.9693 +vn 0.3713 -0.3964 0.8397 +vn -0.2848 -0.0027 0.9586 +vn -0.2848 -0.0025 0.9586 +vn -0.4561 0.1695 -0.8736 +vn -0.2440 -0.0070 0.9698 +vn -0.2431 -0.0057 0.9700 +vn 0.2435 0.0055 -0.9699 +vn -0.2780 -0.0187 0.9604 +vn -0.2730 -0.0210 0.9618 +vn -0.4343 -0.6618 0.6112 +vn 0.2667 0.0221 -0.9635 +vn -0.2827 -0.0114 0.9592 +vn -0.2790 -0.0176 0.9601 +vn -0.6022 -0.5802 0.5484 +vn -0.9501 -0.1319 -0.2826 +vn -0.2832 -0.0104 0.9590 +vn -0.2850 -0.0032 0.9585 +vn -0.7816 -0.3367 0.5251 +vn -0.8392 -0.4821 -0.2516 +vn -0.2436 -0.0053 0.9699 +vn -0.8523 -0.0916 0.5149 +vn -0.8528 -0.0860 0.5151 +vn -0.8528 -0.0859 0.5151 +vn -0.8532 -0.0803 0.5153 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt 0.686647 0.000000 +vt 0.870176 0.996278 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.782584 0.965408 +vt 0.870573 0.970227 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.833010 0.965282 +vt 0.908785 0.026051 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.968598 0.070112 +vt 0.979071 0.026051 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.968598 0.371019 +vt 0.757324 0.262250 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.173427 0.241164 +vt 0.758439 0.080128 +vt -0.973130 0.033128 +vt -0.123087 0.241439 +vt 0.978437 0.000000 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt 0.737072 0.000128 +vt 0.908263 0.000000 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.409642 -0.009898 +vt 0.677629 0.482142 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.240570 0.058726 +vt 0.669677 0.481452 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.786789 0.246652 +vt 0.991724 0.699406 +vt 0.928489 0.277215 +vt 0.873308 0.505274 +vt 0.786789 0.155990 +vt 0.958960 0.029326 +vt 0.991724 0.483440 +vt 0.977373 0.702462 +vt -0.140978 0.246673 +vt 0.958492 0.010078 +vt -0.156145 0.246590 +vt 0.929566 0.080357 +vt -0.144664 0.252235 +vt 0.984385 0.731379 +vt 0.945934 0.020741 +vt -0.159831 0.252152 +vt 0.984385 0.500820 +vt 0.989649 0.087406 +vt 0.706860 0.007022 +vt 0.847263 0.989602 +vt 0.686599 0.714388 +vt 0.721837 0.007060 +vt 0.884682 0.006674 +vt 0.720919 0.017861 +vt 0.673632 0.527027 +vt 0.872079 0.017335 +vt 0.705942 0.017823 +vt 0.673632 0.731676 +vt 0.690157 0.523535 +vt 0.802894 0.958412 +vt 0.847659 0.963551 +vt 0.695298 0.714388 +vt 0.661237 0.495044 +vt 0.817871 0.958374 +vt 0.885205 0.032725 +vt 0.661237 0.722645 +vt 0.693293 0.503638 +vt 0.944329 0.029337 +vt 0.981154 0.731379 +vt 0.977373 0.486830 +vt 0.989649 0.263822 +vt 0.873305 0.723869 +vt 0.981154 0.500820 +vt 0.870573 0.032734 +vt 0.693293 0.761173 +vt 0.679412 0.527027 +vt 0.695298 0.493838 +vt 0.679412 0.731676 +vt 0.826600 0.493835 +vt 0.826977 0.731673 +vt 0.826600 0.714385 +vt 0.814491 0.495042 +vt 0.122435 0.638558 +vt 0.015922 0.839080 +vt 0.835047 0.699404 +vt 0.993361 0.510073 +vt 0.758428 0.504317 +vt 0.072861 0.638558 +vt 0.015474 0.619132 +vt 0.835047 0.483438 +vt 0.845328 0.702461 +vt 0.015197 0.626266 +vt 0.014109 0.491099 +vt 0.993356 0.728667 +vt 0.758425 0.722912 +vt 0.833436 0.500823 +vt 0.891028 0.725398 +vt 0.672547 0.500827 +vt 0.752235 0.729690 +vt 0.667246 0.727168 +vt 0.891033 0.506802 +vt 0.752238 0.507120 +vt 0.071993 0.783837 +vt 0.969610 0.493832 +vt 0.987699 0.731670 +vt 0.641343 0.509140 +vt 0.689355 0.726560 +vt 0.969610 0.714382 +vt 0.122436 0.783837 +vt 0.641344 0.743247 +vt 0.833436 0.731382 +vt 0.845328 0.486829 +vt 0.814491 0.722643 +vt 0.825052 0.503733 +vt 0.016195 0.832047 +vt 0.634466 0.494220 +vt 0.825052 0.761267 +vt 0.826977 0.527024 +vt 0.022424 0.783234 +vt 0.035852 0.889154 +vt 0.043016 0.971597 +vt 0.706398 0.505224 +vt 0.072863 0.808180 +vt 0.028940 0.807392 +vt 0.010039 0.882150 +vt 0.137154 0.974703 +vt 0.631023 0.892124 +vt 0.649326 0.890699 +vt 0.121379 0.984023 +vt 0.648470 0.892315 +vt 0.072864 0.783142 +vt 0.043889 0.943476 +vt 0.078385 0.805896 +vt 0.075977 0.941215 +vt 0.613560 0.946909 +vt 0.672547 0.731385 +vt 0.701510 0.486829 +vt 0.669481 0.490576 +vt 0.072863 0.646796 +vt 0.648470 0.506013 +vt 0.080915 0.841605 +vt 0.968560 0.503835 +vt 0.102906 0.865583 +vt 0.634467 0.887149 +vt 0.987699 0.527021 +vt 0.968560 0.761369 +vt 0.690090 0.495972 +vt 0.701510 0.702461 +vt 0.603150 0.865583 +vt 0.014109 0.884028 +vt 0.706395 0.729929 +vt 0.816556 0.714481 +vt 0.023239 0.646888 +vt 0.040534 0.495932 +vt 0.081188 0.621686 +vt 0.007711 0.495744 +vt 0.041481 0.497122 +vt 0.080911 0.628820 +vt 0.003028 0.888966 +vt 0.041481 0.887645 +vt 0.060838 0.971173 +vt 0.631023 0.505822 +vt 0.649326 0.500176 +vt 0.081188 0.834572 +vt 0.805889 0.743046 +vt 0.122312 0.806766 +vt 0.988155 0.503653 +vt 0.115555 0.935422 +vt 0.904138 0.912557 +vt 0.988155 0.735605 +vt 0.813022 0.494763 +vt 0.890960 0.912565 +vt 0.735836 0.641861 +vt 0.693936 0.468644 +vt 0.027417 0.833361 +vt 0.420996 0.961603 +vt 0.032040 0.784613 +vt 0.284612 0.483847 +vt 0.656925 0.504187 +vt 0.681549 0.720168 +vt 0.066750 0.834450 +vt 0.299225 0.449509 +vt 0.999708 0.720167 +vt 0.989627 0.743247 +vt 0.121899 0.832034 +vt 0.693936 0.449159 +vt 0.420996 0.999935 +vt 0.008277 0.862094 +vt 0.082562 0.831201 +vt 0.741580 0.718717 +vt 0.678836 0.505353 +vt 0.815743 0.487362 +vt 0.741523 0.585977 +vt 0.678836 0.699564 +vt 0.553315 0.945729 +vt 0.982243 0.588758 +vt 0.460393 1.018433 +vt 0.949871 0.788878 +vt 0.982305 0.727355 +vt 0.668954 0.502598 +vt 0.949657 0.691167 +vt 0.979056 0.490574 +vt 0.078628 0.952623 +vt 0.035428 0.887064 +vt 0.812426 0.730862 +vt 0.971935 0.642457 +vt 0.805889 0.532195 +vt 0.173975 1.012235 +vt 0.908785 0.976444 +vt 0.726484 0.788878 +vt 0.984477 0.500479 +vt 0.894591 0.976453 +vt 0.737043 0.505375 +vt 0.726270 0.691167 +vt 0.987420 0.694407 +vt 0.999899 0.506981 +vt 0.968797 0.500648 +vt 0.989626 0.516135 +vt 0.652223 0.697892 +vt 0.656922 0.730164 +vt 0.681740 0.506981 +vt 0.985798 0.713641 +vt 0.053549 0.993732 +vt 0.043551 0.873068 +vt 0.522988 0.991572 +vt 0.062665 0.961706 +vt 0.169656 0.991799 +vt 0.060838 0.809705 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +s 1 +usemtl CabnetDoors +f 10080/20860/7494 10081/20864/7494 10082/20869/7494 10083/20873/7494 10084/20877/7494 10085/20883/7494 10086/20886/7494 10087/20889/7494 +f 10085/20882/7495 10084/20878/7495 10088/20893/7495 10089/20896/7495 +f 10090/20898/7496 10091/20902/7496 10092/20904/7496 10093/20905/7496 +f 10094/20909/7497 10095/20910/7497 10081/20865/7497 10080/20859/7497 +f 10095/20911/7498 10094/20908/7498 10096/20913/7498 10097/20914/7498 +f 10098/20916/7498 10099/20919/7498 10096/20913/7498 10094/20908/7498 +f 10098/20917/7497 10094/20909/7497 10080/20859/7497 10100/20921/7497 +f 10093/20906/7495 10085/20882/7495 10089/20896/7495 10090/20899/7495 +f 10100/20922/7494 10080/20860/7494 10087/20889/7494 10086/20886/7494 10085/20883/7494 10093/20907/7494 10092/20903/7494 10101/20925/7494 +f 10083/20874/7499 10084/20879/7499 10102/20928/7499 10103/20932/7499 +f 10093/20907/7494 10092/20903/7494 10086/20886/7494 10085/20883/7494 +f 10087/20890/7498 10080/20861/7498 10100/20923/7498 10101/20926/7498 +f 10085/20884/7500 10086/20887/7500 10104/20936/7500 10105/20938/7500 +f 10105/20938/7501 10104/20936/7501 10106/20940/7501 10107/20943/7501 +f 10108/20946/7501 10111/20954/7501 10110/20951/7501 10109/20949/7501 +f 10086/20888/7502 10083/20875/7502 10103/20933/7502 10104/20937/7502 +f 10080/20862/7503 10108/20946/7503 10109/20949/7503 10087/20891/7503 +f 10082/20870/7504 10113/20961/7504 10112/20957/7504 10081/20866/7504 +f 10087/20892/7505 10109/20950/7505 10113/20962/7505 10082/20871/7505 +f 10084/20880/7506 10085/20885/7506 10105/20939/7506 10102/20930/7506 +f 10081/20867/7507 10112/20958/7507 10108/20947/7507 10080/20863/7507 +f 10107/20944/7508 10106/20941/7508 10114/20966/7508 10115/20970/7508 +f 10116/20973/7509 10110/20952/7509 10111/20955/7509 10117/20975/7509 +f 10112/20959/7497 10119/20978/7497 10118/20976/7497 10117/20974/7497 +f 10104/20937/7497 10103/20933/7497 10114/20965/7497 10106/20942/7497 +f 10103/20934/7510 10102/20929/7510 10120/20982/7510 10121/20987/7510 +f 10112/20959/7497 10117/20974/7497 10111/20956/7497 10108/20948/7497 +f 10102/20930/7495 10105/20939/7495 10107/20945/7495 10115/20968/7495 +f 10109/20950/7495 10110/20953/7495 10116/20971/7495 10113/20962/7495 +f 10120/20983/7495 10122/20991/7495 10123/20994/7495 10124/20998/7495 +f 10119/20978/7497 10126/21005/7497 10125/21001/7497 10118/20976/7497 +f 10102/20931/7495 10115/20969/7495 10122/20992/7495 10120/20984/7495 +f 10115/20970/7511 10114/20966/7511 10127/21008/7511 10122/20993/7511 +f 10113/20963/7510 10128/21010/7510 10119/20979/7510 10112/20960/7510 +f 10116/20972/7495 10129/21014/7495 10128/21011/7512 10113/20964/7495 +f 10117/20975/7511 10118/20977/7511 10129/21015/7511 10116/20973/7511 +f 10114/20967/7497 10103/20935/7497 10121/20988/7497 10127/21009/7497 +f 10130/21016/7513 10124/21000/7513 10131/21020/7513 10132/21021/7513 +f 10133/21023/7514 10136/21031/7515 10135/21029/7516 10134/21026/7516 +f 10122/20993/7511 10127/21008/7511 10137/21033/7511 10123/20995/7511 +f 10119/20980/7497 10138/21036/7497 10134/21028/7497 10126/21006/7497 +f 10129/21014/7495 10140/21043/7495 10139/21039/7517 10128/21011/7512 +f 10127/21009/7497 10121/20988/7497 10141/21045/7497 10137/21034/7497 +f 10118/20977/7511 10125/21002/7511 10140/21042/7511 10129/21015/7511 +f 10124/20999/7518 10123/20996/7518 10142/21048/7518 10131/21019/7518 +f 10120/20985/7495 10124/21000/7495 10130/21016/7495 10143/21050/7495 +f 10144/21053/7519 10143/21051/7510 10130/21017/7510 10145/21056/7519 +f 10146/21059/7519 10133/21024/7519 10134/21027/7510 10138/21037/7510 +f 10144/21054/7519 10145/21057/7519 10133/21025/7519 10146/21060/7519 +f 10128/21012/7520 10146/21061/7520 10138/21038/7520 10119/20981/7520 +f 10134/21028/7521 10135/21030/7521 10147/21063/7521 10126/21006/7521 +f 10140/21043/7522 10149/21067/7522 10148/21064/7522 10139/21039/7522 +f 10121/20989/7523 10144/21055/7524 10146/21061/7525 10128/21012/7512 +f 10121/20989/7523 10120/20986/7526 10143/21052/7526 10144/21055/7524 +f 10150/21071/7527 10151/21075/7527 10152/21079/7528 10153/21083/7529 +f 10154/21087/7530 10155/21090/7531 10156/21093/7532 10157/21096/7530 +f 10137/21034/7533 10141/21045/7534 10155/21091/7535 10154/21088/7533 +f 10123/20997/7536 10137/21035/7536 10154/21089/7536 10142/21049/7536 +f 10145/21057/7537 10158/21100/7538 10136/21032/7515 10133/21025/7514 +f 10139/21040/7517 10148/21065/7539 10155/21092/7535 10141/21046/7534 +f 10126/21007/7540 10147/21062/7540 10159/21104/7540 10125/21003/7540 +f 10125/21004/7541 10159/21102/7541 10149/21068/7541 10140/21044/7541 +f 10145/21058/7537 10130/21018/7542 10132/21022/7542 10158/21101/7538 +f 10148/21065/7543 10160/21105/7544 10156/21094/7532 10155/21092/7531 +f 10161/21108/7545 10162/21112/7546 10163/21116/7547 10157/21097/7547 +f 10131/21019/7548 10142/21048/7548 10163/21117/7548 10151/21076/7548 +f 10152/21080/7549 10151/21077/7550 10163/21118/7550 10162/21113/7551 +f 10132/21021/7552 10131/21020/7552 10151/21078/7552 10150/21072/7552 +f 10153/21084/7553 10164/21120/7554 10165/21123/7555 10150/21073/7556 +f 10149/21069/7557 10161/21109/7558 10160/21106/7544 10148/21066/7557 +f 10136/21031/7559 10164/21121/7554 10153/21085/7553 10135/21029/7559 +f 10159/21103/7560 10162/21114/7546 10161/21110/7545 10149/21070/7560 +f 10147/21062/7561 10152/21081/7549 10162/21115/7551 10159/21104/7561 +f 10135/21030/7562 10153/21086/7529 10152/21082/7528 10147/21063/7562 +f 10158/21100/7563 10165/21124/7555 10164/21122/7554 10136/21032/7564 +f 10161/21111/7558 10157/21098/7565 10156/21095/7532 10160/21107/7544 +f 10142/21049/7566 10154/21089/7566 10157/21099/7566 10163/21119/7566 +f 10158/21101/7563 10132/21022/7567 10150/21074/7567 10165/21125/7555 +f 10097/20914/7498 10096/20913/7498 10166/21126/7498 10167/21127/7498 +f 10089/20897/7498 10088/20894/7498 10167/21127/7498 10166/21126/7498 +f 10166/21126/7498 10096/20913/7498 10099/20919/7498 10091/20901/7498 +f 10091/20901/7498 10090/20900/7498 10089/20897/7498 10166/21126/7498 +f 10095/20912/7568 10097/20915/7568 10082/20872/7568 10081/20868/7568 +f 10083/20876/7568 10167/21128/7568 10088/20895/7568 10084/20881/7568 +f 10082/20872/7568 10097/20915/7568 10167/21128/7568 10083/20876/7568 +f 10101/20927/7496 10099/20920/7496 10098/20918/7496 10100/20924/7496 +f 10092/20904/7496 10091/20902/7496 10099/20920/7496 10101/20927/7496 +f 10141/21047/7534 10121/20990/7523 10128/21013/7512 10139/21041/7517 +f 10168/21129/7569 10169/21130/7569 10170/21131/7570 10171/21133/7571 +f 10172/21134/7572 10171/21132/7572 10173/21137/7573 10174/21139/7574 +f 10175/21141/7575 10176/21142/7575 10177/21143/7576 10178/21145/7577 +f 10177/21143/7578 10179/21146/7578 10180/21148/7578 10181/21150/7578 +f 10182/21152/7579 10183/21153/7579 10184/21154/7579 10185/21156/7579 +f 10186/21158/7580 10169/21130/7580 10187/21159/7580 10179/21147/7580 +f 10176/21142/7581 10186/21157/7581 10179/21146/7581 10177/21143/7581 +f 10188/21160/7582 10189/21161/7583 10186/21157/7581 10176/21142/7581 +f 10189/21162/7584 10170/21131/7584 10169/21130/7580 10186/21158/7580 +f 10190/21163/7585 10182/21151/7585 10185/21155/7585 10191/21164/7585 +f 10172/21135/7585 10192/21167/7585 10182/21151/7585 10190/21163/7585 +f 10192/21166/7579 10193/21168/7579 10183/21153/7579 10182/21152/7579 +f 10184/21154/7586 10178/21144/7586 10194/21170/7586 10195/21171/7586 +f 10179/21147/7587 10187/21159/7587 10196/21172/7587 10180/21149/7587 +f 10191/21164/7588 10185/21155/7588 10197/21174/7588 10198/21176/7588 +f 10183/21153/7589 10175/21140/7589 10178/21144/7589 10184/21154/7589 +f 10193/21168/7589 10199/21178/7589 10175/21140/7589 10183/21153/7589 +f 10199/21177/7590 10188/21160/7590 10176/21142/7575 10175/21141/7575 +f 10189/21161/7583 10188/21160/7582 10200/21179/7591 10201/21181/7591 +f 10193/21168/7592 10192/21166/7592 10202/21182/7592 10203/21184/7592 +f 10188/21160/7590 10199/21177/7590 10204/21185/7593 10200/21179/7594 +f 10205/21187/7569 10187/21159/7569 10169/21130/7569 10168/21129/7569 +f 10202/21183/7595 10174/21138/7595 10206/21190/7595 10207/21192/7595 +f 10204/21186/7596 10203/21184/7596 10208/21193/7596 10209/21195/7596 +f 10203/21184/7597 10202/21182/7597 10207/21191/7597 10208/21193/7597 +f 10200/21179/7594 10204/21185/7593 10209/21196/7598 10210/21197/7599 +f 10170/21131/7584 10189/21162/7584 10201/21180/7600 10211/21198/7600 +f 10199/21178/7601 10193/21168/7601 10203/21184/7601 10204/21186/7601 +f 10171/21133/7571 10170/21131/7570 10211/21198/7602 10173/21136/7602 +f 10192/21167/7603 10172/21135/7603 10174/21138/7603 10202/21183/7603 +f 10210/21197/7599 10209/21196/7598 10212/21199/7604 10213/21200/7605 +f 10206/21190/7606 10214/21201/7607 10215/21204/7608 10216/21205/7609 +f 10217/21206/7610 10210/21197/7610 10213/21200/7610 10218/21208/7610 +f 10214/21201/7611 10219/21211/7611 10220/21213/7611 10215/21204/7611 +f 10211/21198/7612 10201/21180/7612 10217/21207/7612 10219/21212/7612 +f 10173/21136/7613 10211/21198/7613 10219/21212/7613 10214/21202/7613 +f 10201/21181/7614 10200/21179/7614 10210/21197/7614 10217/21206/7614 +f 10174/21139/7574 10173/21137/7573 10214/21203/7607 10206/21189/7606 +f 10216/21205/7609 10215/21204/7608 10221/21217/7615 10222/21218/7616 +f 10218/21208/7617 10213/21200/7617 10223/21219/7617 10224/21221/7617 +f 10215/21204/7618 10220/21213/7618 10225/21222/7618 10221/21217/7618 +f 10220/21214/7619 10218/21209/7619 10224/21220/7619 10225/21223/7619 +f 10208/21193/7620 10207/21191/7620 10226/21224/7620 10227/21227/7620 +f 10209/21196/7621 10208/21194/7621 10227/21229/7621 10212/21199/7621 +f 10207/21192/7622 10206/21190/7622 10216/21205/7622 10226/21226/7622 +f 10219/21212/7623 10217/21207/7623 10218/21210/7623 10220/21215/7623 +f 10225/21223/7624 10224/21220/7624 10228/21231/7624 10229/21232/7624 +f 10230/21234/7625 10222/21218/7625 10231/21235/7625 10232/21236/7625 +f 10233/21238/7626 10234/21240/7626 10235/21242/7626 10236/21244/7626 +f 10234/21240/7627 10230/21233/7627 10232/21237/7627 10235/21242/7627 +f 10213/21200/7605 10212/21199/7604 10233/21239/7628 10223/21219/7629 +f 10227/21228/7630 10226/21225/7630 10230/21233/7630 10234/21240/7630 +f 10212/21199/7631 10227/21229/7631 10234/21241/7631 10233/21239/7631 +f 10226/21226/7632 10216/21205/7632 10222/21218/7632 10230/21234/7632 +f 10237/21245/7633 10238/21247/7633 10239/21249/7634 10240/21250/7634 +f 10228/21230/7635 10241/21253/7635 10242/21254/7635 10243/21256/7635 +f 10244/21259/7636 10245/21261/7636 10246/21263/7636 10247/21264/7636 +f 10232/21236/7637 10231/21235/7637 10248/21267/7637 10249/21269/7637 +f 10221/21216/7638 10225/21223/7638 10229/21232/7638 10250/21273/7638 +f 10224/21221/7639 10223/21219/7639 10241/21253/7639 10228/21230/7639 +f 10222/21218/7616 10221/21217/7615 10250/21272/7640 10231/21235/7641 +f 10223/21219/7629 10233/21239/7628 10236/21243/7642 10241/21253/7643 +f 10181/21150/7644 10180/21148/7644 10251/21274/7644 10252/21276/7644 +f 10196/21172/7645 10253/21277/7645 10254/21279/7645 10255/21283/7645 +f 10197/21173/7646 10195/21171/7646 10256/21284/7646 10257/21286/7646 +f 10253/21278/7647 10198/21175/7648 10258/21288/7649 10254/21280/7650 +f 10187/21159/7651 10205/21187/7651 10253/21277/7651 10196/21172/7651 +f 10178/21145/7577 10177/21143/7576 10181/21150/7652 10194/21169/7653 +f 10185/21156/7654 10184/21154/7654 10195/21171/7654 10197/21173/7654 +f 10205/21188/7655 10191/21165/7655 10198/21175/7648 10253/21278/7647 +f 10255/21282/7656 10254/21281/7656 10259/21290/7656 10260/21293/7656 +f 10257/21286/7657 10256/21284/7657 10261/21294/7657 10262/21297/7657 +f 10254/21281/7650 10258/21289/7649 10263/21300/7658 10259/21290/7659 +f 10258/21289/7660 10257/21287/7660 10262/21298/7660 10263/21300/7660 +f 10194/21169/7653 10181/21150/7652 10252/21276/7661 10264/21302/7662 +f 10180/21149/7663 10196/21172/7663 10255/21283/7663 10251/21275/7663 +f 10195/21171/7664 10194/21170/7664 10264/21301/7664 10256/21284/7664 +f 10198/21176/7665 10197/21174/7665 10257/21287/7665 10258/21289/7665 +f 10263/21300/7666 10262/21298/7666 10265/21303/7666 10266/21305/7666 +f 10261/21295/7667 10267/21306/7667 10268/21307/7667 10269/21309/7667 +f 10270/21311/7668 10260/21291/7668 10271/21314/7668 10272/21316/7668 +f 10267/21306/7669 10273/21318/7670 10274/21319/7671 10268/21307/7672 +f 10252/21276/7673 10251/21274/7673 10270/21313/7673 10273/21318/7673 +f 10264/21302/7662 10252/21276/7661 10273/21318/7670 10267/21306/7669 +f 10251/21275/7674 10255/21283/7674 10260/21292/7674 10270/21312/7674 +f 10256/21285/7675 10264/21302/7675 10267/21306/7675 10261/21295/7675 +f 10272/21316/7676 10271/21314/7676 10245/21261/7676 10244/21259/7676 +f 10268/21307/7672 10274/21319/7671 10275/21320/7677 10276/21322/7677 +f 10274/21319/7678 10272/21317/7678 10244/21260/7679 10275/21320/7679 +f 10271/21314/7680 10277/21323/7680 10237/21246/7681 10245/21261/7682 +f 10259/21290/7659 10263/21300/7658 10266/21305/7683 10277/21324/7684 +f 10262/21299/7685 10261/21296/7685 10269/21310/7685 10265/21304/7685 +f 10260/21293/7686 10259/21290/7686 10277/21324/7686 10271/21315/7686 +f 10273/21318/7687 10270/21313/7687 10272/21317/7687 10274/21319/7687 +f 10278/21325/7688 10279/21327/7688 10280/21328/7688 10281/21330/7688 +f 10231/21235/7641 10250/21272/7640 10282/21333/7689 10248/21267/7689 +f 10279/21327/7690 10276/21321/7690 10283/21336/7691 10280/21328/7691 +f 10241/21253/7643 10236/21243/7642 10284/21339/7692 10242/21254/7692 +f 10269/21310/7693 10268/21308/7693 10276/21321/7690 10279/21327/7690 +f 10266/21305/7694 10265/21303/7694 10278/21326/7695 10238/21247/7696 +f 10277/21324/7684 10266/21305/7683 10238/21247/7633 10237/21245/7633 +f 10265/21304/7697 10269/21310/7697 10279/21327/7697 10278/21325/7697 +f 10285/21342/7698 10243/21257/7698 10242/21255/7698 10284/21340/7698 +f 10249/21270/7698 10285/21342/7698 10284/21340/7698 10286/21343/7698 +f 10248/21268/7699 10282/21334/7698 10285/21342/7698 10249/21270/7698 +f 10282/21334/7698 10287/21345/7698 10243/21257/7698 10285/21342/7698 +f 10288/21347/7700 10247/21265/7701 10246/21262/7700 10240/21251/7700 +f 10281/21331/7700 10288/21347/7700 10240/21251/7700 10239/21248/7700 +f 10280/21329/7702 10283/21337/7702 10288/21347/7700 10281/21331/7700 +f 10283/21337/7702 10289/21348/7701 10247/21265/7701 10288/21347/7700 +f 10236/21244/7703 10235/21242/7703 10286/21344/7703 10284/21341/7703 +f 10276/21322/7677 10275/21320/7677 10289/21349/7704 10283/21338/7704 +f 10250/21273/7705 10229/21232/7705 10287/21346/7705 10282/21335/7705 +f 10238/21247/7696 10278/21326/7695 10281/21332/7706 10239/21249/7706 +f 10235/21242/7707 10232/21237/7707 10249/21271/7707 10286/21344/7707 +f 10275/21320/7679 10244/21260/7679 10247/21266/7708 10289/21349/7708 +f 10229/21232/7709 10228/21231/7709 10243/21258/7709 10287/21346/7709 +f 10245/21261/7682 10237/21246/7681 10240/21252/7710 10246/21263/7710 +f 10290/21351/7569 10291/21352/7569 10292/21353/7570 10293/21355/7571 +f 10294/21356/7711 10293/21354/7711 10295/21358/7712 10296/21359/7713 +f 10297/21360/7586 10298/21362/7586 10299/21365/7586 10300/21367/7586 +f 10301/21369/7579 10302/21370/7579 10297/21361/7579 10303/21373/7579 +f 10304/21375/7580 10291/21352/7580 10305/21376/7580 10306/21377/7580 +f 10307/21379/7581 10304/21374/7581 10306/21378/7581 10308/21380/7581 +f 10309/21381/7581 10310/21382/7581 10304/21374/7581 10307/21379/7581 +f 10310/21383/7584 10292/21353/7584 10291/21352/7580 10304/21375/7580 +f 10311/21384/7714 10301/21368/7714 10303/21372/7714 10312/21385/7714 +f 10294/21356/7714 10313/21387/7714 10301/21368/7714 10311/21384/7714 +f 10313/21386/7579 10314/21388/7579 10302/21370/7579 10301/21369/7579 +f 10306/21377/7587 10305/21376/7587 10315/21390/7587 10316/21392/7587 +f 10312/21385/7715 10303/21372/7715 10317/21393/7715 10318/21395/7715 +f 10319/21396/7716 10312/21385/7717 10318/21395/7718 10320/21398/7719 +f 10302/21371/7589 10321/21400/7589 10298/21362/7589 10297/21360/7589 +f 10314/21389/7589 10322/21402/7589 10321/21400/7589 10302/21371/7589 +f 10310/21382/7591 10309/21381/7591 10323/21403/7591 10324/21405/7591 +f 10314/21388/7592 10313/21386/7592 10325/21406/7592 10326/21408/7592 +f 10309/21381/7720 10322/21401/7720 10327/21411/7593 10323/21403/7594 +f 10311/21384/7721 10290/21350/7721 10293/21354/7711 10294/21356/7711 +f 10312/21385/7717 10319/21396/7716 10290/21350/7721 10311/21384/7721 +f 10319/21397/7569 10305/21376/7569 10291/21352/7569 10290/21351/7569 +f 10328/21412/7612 10324/21404/7612 10329/21414/7612 10330/21416/7612 +f 10325/21407/7722 10296/21359/7722 10331/21418/7722 10332/21420/7722 +f 10327/21410/7596 10326/21409/7596 10333/21421/7596 10334/21424/7596 +f 10326/21408/7723 10325/21406/7723 10332/21419/7723 10333/21423/7723 +f 10292/21353/7584 10310/21383/7584 10324/21404/7600 10328/21412/7600 +f 10322/21402/7601 10314/21389/7601 10326/21409/7601 10327/21410/7601 +f 10293/21355/7571 10292/21353/7570 10328/21412/7602 10295/21357/7602 +f 10313/21387/7724 10294/21356/7724 10296/21359/7724 10325/21407/7724 +f 10334/21425/7621 10333/21422/7621 10335/21429/7621 10336/21430/7621 +f 10333/21423/7725 10332/21419/7725 10337/21431/7725 10335/21427/7725 +f 10338/21435/7599 10334/21425/7598 10336/21430/7604 10339/21436/7605 +f 10331/21418/7726 10340/21438/7727 10341/21439/7728 10342/21440/7729 +f 10295/21357/7613 10328/21412/7613 10330/21416/7613 10340/21437/7613 +f 10324/21405/7614 10323/21403/7614 10338/21434/7614 10329/21413/7614 +f 10296/21359/7713 10295/21358/7712 10340/21438/7727 10331/21418/7726 +f 10323/21403/7594 10327/21411/7593 10334/21426/7598 10338/21434/7599 +f 10342/21440/7729 10341/21439/7728 10343/21442/7730 10344/21443/7731 +f 10345/21446/7617 10339/21436/7617 10346/21447/7617 10347/21448/7617 +f 10341/21439/7618 10348/21452/7618 10349/21453/7618 10343/21442/7618 +f 10348/21450/7619 10345/21444/7619 10347/21449/7619 10349/21454/7619 +f 10332/21420/7732 10331/21418/7732 10342/21440/7732 10337/21433/7732 +f 10330/21416/7623 10329/21414/7623 10345/21445/7623 10348/21451/7623 +f 10340/21438/7611 10330/21417/7611 10348/21452/7611 10341/21439/7611 +f 10329/21415/7733 10338/21435/7733 10339/21436/7733 10345/21446/7733 +f 10347/21448/7734 10346/21447/7734 10350/21455/7734 10351/21456/7734 +f 10343/21441/7638 10349/21454/7638 10352/21458/7638 10353/21460/7638 +f 10349/21454/7624 10347/21449/7624 10351/21457/7624 10352/21458/7624 +f 10354/21461/7735 10344/21443/7735 10355/21463/7735 10356/21464/7735 +f 10339/21436/7605 10336/21430/7604 10357/21466/7736 10346/21447/7737 +f 10335/21428/7630 10337/21432/7630 10354/21462/7630 10358/21469/7630 +f 10336/21430/7631 10335/21429/7631 10358/21468/7631 10357/21466/7631 +f 10337/21433/7738 10342/21440/7738 10344/21443/7738 10354/21461/7738 +f 10359/21470/7739 10360/21472/7739 10361/21474/7740 10362/21475/7740 +f 10351/21456/7741 10350/21455/7741 10363/21478/7741 10364/21480/7741 +f 10365/21484/7636 10366/21486/7636 10367/21488/7636 10368/21489/7636 +f 10356/21464/7637 10355/21463/7637 10369/21493/7637 10370/21495/7637 +f 10344/21443/7731 10343/21442/7730 10353/21459/7742 10355/21463/7743 +f 10346/21447/7737 10357/21466/7736 10371/21499/7744 10350/21455/7643 +f 10358/21469/7627 10354/21462/7627 10356/21465/7627 10372/21501/7627 +f 10357/21467/7626 10358/21469/7626 10372/21501/7626 10371/21500/7626 +f 10315/21390/7645 10320/21399/7645 10373/21502/7645 10374/21504/7645 +f 10317/21394/7646 10300/21366/7646 10375/21508/7646 10376/21510/7646 +f 10320/21398/7719 10318/21395/7718 10377/21511/7745 10373/21503/7746 +f 10318/21395/7747 10317/21393/7747 10376/21509/7747 10377/21511/7747 +f 10308/21380/7578 10306/21378/7578 10316/21391/7578 10378/21512/7578 +f 10305/21376/7651 10319/21397/7651 10320/21399/7651 10315/21390/7651 +f 10298/21363/7748 10308/21380/7748 10378/21512/7652 10299/21364/7653 +f 10303/21373/7654 10297/21361/7654 10300/21366/7654 10317/21394/7654 +f 10373/21503/7746 10377/21511/7745 10379/21513/7749 10380/21514/7750 +f 10377/21511/7751 10376/21509/7751 10381/21516/7751 10379/21513/7751 +f 10375/21506/7675 10382/21520/7675 10383/21521/7675 10384/21522/7675 +f 10385/21526/7674 10374/21504/7674 10386/21528/7674 10387/21531/7674 +f 10378/21512/7644 10316/21391/7644 10385/21525/7644 10388/21534/7644 +f 10299/21364/7653 10378/21512/7652 10388/21534/7661 10382/21518/7662 +f 10316/21392/7663 10315/21390/7663 10374/21504/7663 10385/21526/7663 +f 10300/21367/7664 10299/21365/7664 10382/21519/7664 10375/21507/7664 +f 10384/21522/7667 10383/21521/7667 10389/21536/7667 10390/21538/7667 +f 10387/21532/7668 10386/21529/7668 10391/21541/7668 10392/21543/7668 +f 10383/21521/7669 10393/21544/7670 10394/21545/7671 10389/21536/7672 +f 10393/21544/7687 10387/21533/7687 10392/21542/7687 10394/21545/7687 +f 10376/21510/7657 10375/21508/7657 10384/21523/7657 10381/21515/7657 +f 10374/21505/7656 10373/21503/7656 10380/21514/7656 10386/21530/7656 +f 10388/21535/7673 10385/21527/7673 10387/21533/7673 10393/21544/7673 +f 10382/21520/7662 10388/21535/7661 10393/21544/7670 10383/21521/7669 +f 10394/21545/7678 10392/21542/7678 10365/21485/7679 10395/21546/7679 +f 10391/21541/7680 10396/21547/7680 10359/21471/7681 10366/21486/7682 +f 10397/21549/7752 10390/21539/7752 10398/21551/7752 10399/21552/7752 +f 10396/21548/7753 10400/21554/7754 10360/21472/7739 10359/21470/7739 +f 10379/21513/7755 10381/21516/7755 10397/21550/7755 10400/21554/7755 +f 10380/21514/7750 10379/21513/7749 10400/21554/7754 10396/21548/7753 +f 10381/21517/7756 10384/21524/7756 10390/21539/7756 10397/21549/7756 +f 10386/21530/7686 10380/21514/7686 10396/21548/7686 10391/21540/7686 +f 10399/21552/7688 10398/21551/7688 10401/21555/7688 10402/21557/7688 +f 10355/21463/7743 10353/21459/7742 10403/21561/7757 10369/21493/7757 +f 10350/21455/7643 10371/21499/7744 10404/21564/7692 10363/21478/7692 +f 10398/21551/7690 10405/21567/7690 10406/21569/7691 10401/21555/7691 +f 10389/21536/7672 10394/21545/7671 10395/21546/7677 10405/21568/7677 +f 10392/21543/7676 10391/21541/7676 10366/21486/7676 10365/21484/7676 +f 10390/21539/7693 10389/21537/7693 10405/21567/7690 10398/21551/7690 +f 10400/21554/7758 10397/21550/7758 10399/21553/7759 10360/21472/7760 +f 10407/21572/7698 10364/21481/7698 10363/21479/7698 10404/21565/7698 +f 10370/21496/7698 10407/21572/7698 10404/21565/7698 10408/21574/7698 +f 10369/21494/7699 10403/21562/7698 10407/21573/7698 10370/21497/7698 +f 10403/21562/7698 10409/21576/7698 10364/21482/7698 10407/21573/7698 +f 10410/21578/7700 10368/21490/7701 10367/21487/7700 10362/21476/7700 +f 10402/21558/7700 10410/21578/7700 10362/21476/7700 10361/21473/7700 +f 10401/21556/7702 10406/21570/7702 10410/21579/7700 10402/21559/7700 +f 10406/21570/7702 10411/21580/7701 10368/21491/7701 10410/21579/7700 +f 10371/21500/7703 10372/21501/7703 10408/21575/7703 10404/21566/7703 +f 10405/21568/7677 10395/21546/7677 10411/21581/7704 10406/21571/7704 +f 10353/21460/7705 10352/21458/7705 10409/21577/7705 10403/21563/7705 +f 10360/21472/7760 10399/21553/7759 10402/21560/7761 10361/21474/7761 +f 10372/21501/7707 10356/21465/7707 10370/21498/7707 10408/21575/7707 +f 10395/21546/7679 10365/21485/7679 10368/21492/7708 10411/21581/7708 +f 10352/21458/7709 10351/21457/7709 10364/21483/7709 10409/21577/7709 +f 10366/21486/7682 10359/21471/7681 10362/21477/7710 10367/21488/7710 +o Chair.029 +v -4.717506 0.415382 3.925358 +v -4.717506 0.429951 3.925358 +v -4.688773 0.429951 3.884905 +v -4.456009 0.429951 3.557209 +v -4.427276 0.429951 3.516757 +v -4.427276 0.415382 3.516757 +v -4.456009 0.415382 3.557209 +v -4.688773 0.415382 3.884905 +v -4.740853 0.429951 3.294022 +v -4.740853 0.415382 3.294022 +v -4.740853 0.400812 3.294022 +v -4.767271 0.400812 3.331213 +v -4.456009 0.400812 3.557209 +v -4.427276 0.400812 3.516757 +v -5.031084 0.415382 3.702622 +v -5.031084 0.429951 3.702622 +v -5.004666 0.415382 3.665431 +v -5.004666 0.429951 3.665431 +v -5.031084 0.400812 3.702622 +v -5.004666 0.400812 3.665431 +v -4.717506 0.400812 3.925358 +v -4.688773 0.400812 3.884905 +v -4.418697 0.432961 3.548004 +v -4.427355 0.432961 3.560192 +v -4.431021 0.421009 3.557588 +v -4.422364 0.421009 3.545400 +v -4.420728 0.426967 3.564899 +v -4.412070 0.426967 3.552711 +v -4.687152 0.419106 3.921736 +v -4.678618 0.419106 3.909723 +v -4.668325 0.425064 3.917034 +v -4.676858 0.425064 3.929048 +v -4.683372 0.434699 3.924422 +v -4.674838 0.434699 3.912408 +v -4.415639 0.431853 3.568514 +v -4.406981 0.431853 3.556326 +v -4.663122 0.433592 3.920730 +v -4.671655 0.433592 3.932744 +v -4.661655 0.592772 3.939847 +v -4.673371 0.593879 3.931525 +v -4.408698 0.592141 3.555107 +v -4.417355 0.592141 3.567295 +v -4.396981 0.591033 3.563429 +v -4.381979 0.829840 3.574085 +v -4.393695 0.830948 3.565763 +v -4.646653 0.831579 3.950503 +v -4.658369 0.832686 3.942181 +v -4.405639 0.591033 3.575617 +v -4.664838 0.593879 3.919511 +v -4.653122 0.592772 3.927833 +v -4.402020 0.830737 3.559850 +v -4.404377 0.870951 3.586460 +v -4.411780 0.870348 3.581201 +v -4.658171 0.832325 3.924247 +v -4.666704 0.832325 3.936261 +v -4.649960 0.869634 3.919640 +v -4.640543 0.864490 3.905697 +v -4.390636 0.829840 3.586273 +v -4.680784 0.608202 3.926260 +v -4.649836 0.832686 3.930167 +v -4.638119 0.831579 3.938489 +v -4.402352 0.830948 3.577951 +v -4.393825 0.869953 3.593955 +v -4.416101 0.606614 3.549848 +v -4.424758 0.606614 3.562036 +v -4.410678 0.830737 3.572038 +v -4.672250 0.608202 3.914246 +v -4.642548 0.870373 3.924904 +v -4.633131 0.865229 3.910962 +v -4.622579 0.864232 3.918457 +v -4.451634 0.913073 3.642429 +v -4.445234 0.914244 3.647548 +v -4.597444 0.911897 3.866864 +v -4.604295 0.911148 3.862438 +v -4.404514 0.867524 3.608681 +v -4.415066 0.868521 3.601186 +v -4.451545 0.902898 3.654922 +v -4.440179 0.901824 3.662995 +v -4.422470 0.867919 3.595927 +v -4.631995 0.869376 3.932400 +v -4.592611 0.900855 3.858592 +v -4.581246 0.899781 3.866665 +v -4.586078 0.910823 3.874938 +v -4.433869 0.913170 3.655621 +v -4.600346 0.901346 3.855572 +v -4.457944 0.901727 3.649803 +v -4.767271 0.415382 3.331213 +v -4.767271 0.429951 3.331213 +v -4.582280 0.438060 3.403995 +v -4.578898 0.443651 3.399233 +v -4.472029 0.443651 3.475142 +v -4.475411 0.438060 3.479904 +v -4.475308 0.429976 3.479760 +v -4.448999 0.437950 3.498665 +v -4.451027 0.430300 3.497007 +v -4.570876 0.429903 3.387940 +v -4.570978 0.437987 3.388083 +v -4.677846 0.437987 3.312174 +v -4.677744 0.429903 3.312031 +v -4.681085 0.443828 3.316733 +v -4.707093 0.439408 3.298259 +v -4.701950 0.434055 3.295054 +v -4.578940 0.424135 3.399292 +v -4.574259 0.424311 3.392702 +v -4.681127 0.424311 3.316793 +v -4.685808 0.424135 3.323383 +v -4.574216 0.443828 3.392642 +v -4.685766 0.443651 3.323324 +v -4.464109 0.437987 3.463993 +v -4.467347 0.443828 3.468552 +v -4.582178 0.429976 3.403851 +v -4.689046 0.429976 3.327942 +v -4.472071 0.424135 3.475202 +v -4.467390 0.424311 3.468611 +v -4.699211 0.426646 3.296783 +v -4.700770 0.421521 3.302840 +v -4.711717 0.439247 3.304891 +v -4.705393 0.421360 3.309472 +v -4.710536 0.426713 3.312677 +v -4.464007 0.429903 3.463849 +v -4.437716 0.437881 3.482740 +v -4.439415 0.443408 3.488393 +v -4.449329 0.424773 3.491356 +v -4.444601 0.424940 3.484798 +v -4.439745 0.430231 3.481083 +v -4.689148 0.438060 3.328086 +v -4.427964 0.420977 3.513389 +v -4.427641 0.416357 3.506760 +v -4.422872 0.416497 3.500232 +v -4.416699 0.420919 3.497452 +v -4.412768 0.427313 3.500460 +v -4.444142 0.443241 3.494950 +v -4.397347 0.402967 3.511198 +v -4.391947 0.407418 3.515250 +v -4.424034 0.427371 3.516398 +v -4.403199 0.407458 3.531197 +v -4.408598 0.403008 3.527144 +v -4.413093 0.431932 3.507089 +v -4.391210 0.410634 3.522633 +v -4.417861 0.431793 3.513618 +v -4.396011 0.410537 3.529138 +v -4.388732 0.380352 3.541473 +v -4.395010 0.378323 3.536797 +v -4.377488 0.380334 3.525520 +v -4.376117 0.381800 3.533353 +v -4.380937 0.381756 3.539845 +v -4.409336 0.399792 3.519763 +v -4.404535 0.399889 3.513257 +v -4.363379 0.345795 3.542400 +v -4.368201 0.345756 3.548892 +v -4.396381 0.376856 3.528964 +v -4.382359 0.342751 3.545783 +v -4.383766 0.341467 3.537925 +v -4.383765 0.378304 3.520845 +v -4.391561 0.376901 3.522473 +v -4.378944 0.341506 3.531434 +v -4.371115 0.342735 3.529831 +v -4.770031 0.349401 3.270635 +v -4.763383 0.348454 3.275140 +v -4.796895 -0.002953 3.251337 +v -4.803543 -0.002007 3.246831 +v -4.364788 0.344511 3.534541 +v -4.294118 0.001491 3.584738 +v -4.292710 0.002774 3.592597 +v -4.766637 0.350077 3.255965 +v -4.771176 0.350056 3.262657 +v -4.804688 -0.001352 3.238854 +v -4.800148 -0.001331 3.232162 +v -4.311689 -0.000270 3.595981 +v -4.313097 -0.001553 3.588122 +v -4.376031 0.344527 3.550494 +v -4.732321 0.425574 3.280340 +v -4.725591 0.421603 3.278261 +v -4.713275 0.434122 3.310948 +v -4.736936 0.421652 3.294142 +v -4.736897 0.425454 3.287005 +v -4.720695 0.412305 3.288687 +v -4.725271 0.412185 3.295353 +v -4.732001 0.416156 3.297431 +v -4.754628 0.403231 3.281575 +v -4.755549 0.405075 3.273757 +v -4.736024 0.398698 3.277799 +v -4.740571 0.398640 3.284486 +v -4.748303 0.400566 3.285851 +v -4.720655 0.416106 3.281551 +v -4.752872 0.371230 3.275748 +v -4.760761 0.372479 3.277002 +v -4.736946 0.400542 3.269980 +v -4.749402 0.372464 3.261133 +v -4.748331 0.371267 3.269058 +v -4.751004 0.405133 3.267069 +v -4.768372 0.375406 3.264648 +v -4.763831 0.375443 3.257958 +v -4.743270 0.403207 3.265704 +v -4.755942 0.374194 3.256703 +v -4.758669 0.349392 3.254766 +v -4.752023 0.348446 3.259271 +v -4.767302 0.374209 3.272573 +v -4.755416 0.347770 3.273941 +v -4.750878 0.347791 3.267248 +v -4.784389 -0.003617 3.243445 +v -4.788928 -0.003637 3.250137 +v -4.305361 0.001507 3.600691 +v -4.785534 -0.002962 3.235467 +v -4.300445 -0.000286 3.580028 +v -4.302903 0.000611 3.590359 +v -4.308275 -0.001514 3.581631 +v -4.297532 0.002736 3.599088 +v -4.794538 -0.002484 3.241149 +v -4.792181 -0.002015 3.230962 +v -4.885457 0.438060 3.830822 +v -4.882074 0.443651 3.826060 +v -4.775205 0.443651 3.901969 +v -4.778588 0.438060 3.906731 +v -4.778486 0.429976 3.906588 +v -4.752175 0.437950 3.925492 +v -4.754205 0.430300 3.923835 +v -4.984304 0.424311 3.743620 +v -4.980921 0.429903 3.738858 +v -5.002388 0.426646 3.723610 +v -5.003947 0.421521 3.729667 +v -4.882117 0.424135 3.826119 +v -4.877435 0.424311 3.819529 +v -4.988985 0.424135 3.750210 +v -4.877393 0.443828 3.819469 +v -4.988943 0.443651 3.750151 +v -4.984262 0.443828 3.743560 +v -4.874155 0.437987 3.814910 +v -4.981023 0.437987 3.739001 +v -4.767286 0.437987 3.890820 +v -4.770524 0.443828 3.895379 +v -4.885355 0.429976 3.830678 +v -4.992223 0.429976 3.754769 +v -4.775248 0.424135 3.902029 +v -4.770566 0.424311 3.895438 +v -5.014894 0.439247 3.731718 +v -5.010270 0.439408 3.725086 +v -5.008570 0.421360 3.736299 +v -5.013714 0.426713 3.739505 +v -4.992325 0.438060 3.754913 +v -5.016452 0.434122 3.737775 +v -4.874053 0.429903 3.814767 +v -4.767184 0.429903 3.890676 +v -4.740892 0.437881 3.909567 +v -4.742591 0.443408 3.915219 +v -4.752506 0.424773 3.918182 +v -4.747778 0.424940 3.911625 +v -4.742921 0.430231 3.907910 +v -4.747319 0.443241 3.921777 +v -4.716269 0.431932 3.933916 +v -4.721038 0.431793 3.940444 +v -4.731142 0.420977 3.940217 +v -4.730817 0.416357 3.933588 +v -4.726048 0.416497 3.927059 +v -4.719876 0.420919 3.924279 +v -4.707712 0.399889 3.940084 +v -4.700523 0.402967 3.938025 +v -4.712513 0.399792 3.946589 +v -4.715945 0.427313 3.927287 +v -4.695123 0.407418 3.942077 +v -4.727211 0.427371 3.943225 +v -4.706376 0.407458 3.958024 +v -4.711776 0.403008 3.953972 +v -4.691909 0.380352 3.968300 +v -4.698187 0.378323 3.963624 +v -4.694386 0.410634 3.949460 +v -4.680665 0.380334 3.952347 +v -4.679293 0.381800 3.960180 +v -4.699187 0.410537 3.955965 +v -4.684114 0.381756 3.966672 +v -4.667964 0.344511 3.961369 +v -4.666556 0.345795 3.969227 +v -4.671378 0.345756 3.975718 +v -4.679208 0.344527 3.977321 +v -4.699558 0.376856 3.955791 +v -4.685536 0.342751 3.972610 +v -4.686943 0.341467 3.964752 +v -4.686942 0.378304 3.947672 +v -4.694737 0.376901 3.949300 +v -5.073208 0.349401 3.697462 +v -5.066560 0.348454 3.701967 +v -5.100072 -0.002953 3.678164 +v -5.106719 -0.002007 3.673658 +v -4.597295 0.001491 4.011565 +v -4.595887 0.002774 4.019424 +v -5.069814 0.350077 3.682792 +v -5.074353 0.350056 3.689484 +v -5.107864 -0.001352 3.665680 +v -5.103325 -0.001331 3.658988 +v -4.614866 -0.000270 4.022808 +v -4.616273 -0.001553 4.014949 +v -4.674292 0.342735 3.956658 +v -4.682121 0.341506 3.958261 +v -5.040113 0.421652 3.720969 +v -5.040074 0.425454 3.713832 +v -5.023872 0.412305 3.715514 +v -5.028448 0.412185 3.722180 +v -5.035178 0.416156 3.724258 +v -5.005126 0.434055 3.721880 +v -5.051481 0.400566 3.712678 +v -5.057805 0.403231 3.708402 +v -5.043747 0.398640 3.711313 +v -5.023832 0.416106 3.708378 +v -5.040123 0.400542 3.696807 +v -5.039201 0.398698 3.704626 +v -5.035498 0.425574 3.707167 +v -5.058726 0.405075 3.700583 +v -5.054181 0.405133 3.693896 +v -5.028768 0.421603 3.705088 +v -5.052578 0.372464 3.687959 +v -5.051508 0.371267 3.695884 +v -5.071549 0.375406 3.691475 +v -5.067008 0.375443 3.684785 +v -5.046447 0.403207 3.692531 +v -5.059118 0.374194 3.683530 +v -5.061846 0.349392 3.681592 +v -5.070478 0.374209 3.699400 +v -5.056049 0.371230 3.702574 +v -5.054055 0.347791 3.694075 +v -5.058593 0.347770 3.700767 +v -5.063938 0.372479 3.703830 +v -5.087566 -0.003617 3.670272 +v -5.092105 -0.003637 3.676964 +v -4.608538 0.001507 4.027518 +v -4.603622 -0.000286 4.006855 +v -5.055200 0.348446 3.686098 +v -5.088711 -0.002962 3.662294 +v -4.606080 0.000611 4.017187 +v -4.611452 -0.001514 4.008458 +v -4.600708 0.002736 4.025915 +v -5.097715 -0.002484 3.667977 +v -5.095358 -0.002015 3.657789 +vn 0.8153 -0.0000 0.5791 +vn 0.5791 -0.0000 -0.8153 +vn -0.0000 -1.0000 -0.0000 +vn -0.5791 -0.0000 0.8153 +vn -0.8153 -0.0000 -0.5791 +vn -0.0971 0.9929 -0.0690 +vn 0.2149 -0.9646 0.1527 +vn 0.3479 -0.9044 0.2471 +vn -0.0477 -0.0911 0.9947 +vn 0.1323 -0.9868 0.0939 +vn -0.1398 0.9852 -0.0993 +vn 0.9103 -0.0779 -0.4065 +vn 0.9726 -0.1146 -0.2025 +vn 0.0830 -0.0987 0.9916 +vn 0.5025 -0.7874 0.3569 +vn 0.6527 -0.5992 0.4636 +vn -0.8129 0.0768 -0.5774 +vn 0.8129 -0.0768 0.5774 +vn 0.6121 -0.2916 -0.7350 +vn 0.4832 0.5027 -0.7169 +vn -0.8127 0.1047 -0.5732 +vn -0.8077 0.1119 -0.5789 +vn -0.8079 0.1062 -0.5797 +vn 0.9967 -0.0656 0.0484 +vn 0.5333 0.4967 -0.6847 +vn -0.8142 0.0768 -0.5754 +vn -0.6883 -0.5359 -0.4889 +vn -0.5158 0.5287 0.6741 +vn 0.4191 -0.6113 -0.6713 +vn -0.4260 -0.8531 -0.3011 +vn -0.6919 -0.5326 -0.4875 +vn -0.6931 -0.5337 -0.4845 +vn -0.6906 -0.5315 -0.4905 +vn -0.1006 0.9931 -0.0601 +vn -0.2194 0.9648 0.1446 +vn -0.2318 0.9584 0.1668 +vn -0.3263 -0.8811 0.3422 +vn -0.0680 -0.8634 0.4999 +vn 0.3945 -0.7743 0.4948 +vn -0.5108 -0.5705 0.6431 +vn 0.4255 -0.3669 0.8273 +vn 0.3607 -0.3997 0.8427 +vn 0.8131 -0.0465 0.5803 +vn -0.8121 0.1108 -0.5729 +vn -0.8125 0.1116 -0.5721 +vn 0.8155 -0.0794 0.5733 +vn -0.4605 0.5223 0.7177 +vn 0.8181 -0.0401 0.5737 +vn -0.8117 0.1101 -0.5736 +vn 0.8183 -0.0584 0.5718 +vn 0.6034 -0.7742 0.1910 +vn 0.8153 -0.0813 0.5732 +vn 0.8118 -0.0847 0.5777 +vn 0.8197 -0.0769 0.5676 +vn 0.3481 0.8588 -0.3758 +vn -0.0889 0.9633 0.2533 +vn 0.0580 0.9970 0.0509 +vn -0.0895 0.9630 0.2540 +vn 0.2303 0.8610 -0.4535 +vn -0.8122 0.0845 -0.5773 +vn -0.8159 0.0831 -0.5722 +vn -0.8168 0.0796 -0.5714 +vn -0.8196 0.0778 -0.5676 +vn 0.2201 -0.8773 -0.4265 +vn 0.0833 -0.9658 -0.2457 +vn -0.8082 0.0880 -0.5823 +vn 0.8078 -0.0886 0.5827 +vn -0.2312 0.8673 0.4408 +vn -0.3364 0.8695 0.3616 +vn -0.8127 0.0744 -0.5780 +vn -0.8169 0.0849 -0.5705 +vn -0.0584 -0.9970 -0.0504 +vn 0.8120 -0.0732 0.5790 +vn -0.8118 0.0723 -0.5794 +vn -0.0000 1.0000 -0.0000 +vn -0.4004 0.7224 0.5637 +vn -0.3954 0.7268 0.5616 +vn -0.3954 0.7269 0.5616 +vn -0.5789 -0.0225 0.8151 +vn -0.5792 -0.0215 0.8149 +vn -0.5843 -0.0204 0.8113 +vn 0.5789 0.0218 -0.8151 +vn 0.5778 0.0219 -0.8159 +vn 0.5777 0.0219 -0.8159 +vn 0.3366 0.6937 -0.6367 +vn 0.0126 -0.9998 -0.0177 +vn -0.0127 0.9998 0.0178 +vn 0.4183 0.6915 -0.5889 +vn 0.4179 0.6962 -0.5836 +vn -0.0076 0.9997 0.0211 +vn -0.4183 -0.6915 0.5889 +vn 0.4662 -0.7257 -0.5060 +vn -0.1241 0.9903 -0.0620 +vn -0.3453 -0.6955 0.6301 +vn 0.4005 -0.7223 -0.5638 +vn 0.5789 0.0221 -0.8151 +vn 0.4176 0.7008 -0.5783 +vn 0.0307 -0.9995 -0.0041 +vn 0.5845 0.0214 -0.8111 +vn 0.5792 0.0224 -0.8149 +vn -0.5883 -0.6683 0.4553 +vn 0.2104 -0.6972 -0.6854 +vn -0.2337 -0.9532 -0.1920 +vn 0.5899 0.0183 -0.8073 +vn 0.5853 0.0214 -0.8106 +vn -0.0025 0.9997 0.0244 +vn 0.4040 -0.7326 -0.5478 +vn -0.3903 0.7313 0.5594 +vn -0.4027 -0.7022 0.5872 +vn 0.5943 0.0132 -0.8042 +vn 0.5907 0.0178 -0.8067 +vn -0.5895 -0.0175 0.8076 +vn -0.5849 -0.0205 0.8108 +vn -0.5901 -0.0172 0.8072 +vn -0.5937 -0.0124 0.8046 +vn 0.7663 0.5509 -0.3306 +vn -0.0265 0.5748 0.8178 +vn 0.2606 0.9421 0.2111 +vn -0.1978 0.6901 0.6961 +vn 0.6021 0.6614 -0.4472 +vn -0.5939 -0.0119 0.8044 +vn -0.5951 -0.0090 0.8036 +vn 0.8925 0.3812 -0.2410 +vn 0.1052 0.3978 0.9114 +vn 0.6735 0.5403 0.5045 +vn -0.4718 -0.8044 -0.3611 +vn 0.0364 -0.5868 -0.8089 +vn -0.7550 -0.5625 0.3370 +vn 0.4943 0.7833 0.3771 +vn 0.7353 0.3980 0.5486 +vn -0.9360 -0.2790 0.2147 +vn -0.1464 -0.2912 -0.9454 +vn -0.7344 -0.4005 -0.5480 +vn 0.5956 0.0092 -0.8032 +vn 0.5945 0.0122 -0.8040 +vn -0.6578 -0.5692 -0.4932 +vn -0.0990 -0.4135 -0.9051 +vn -0.8849 -0.3964 0.2447 +vn -0.5613 -0.0027 0.8276 +vn -0.5613 -0.0025 0.8276 +vn 0.9649 0.1694 -0.2005 +vn -0.8222 0.1162 -0.5573 +vn -0.9649 -0.1695 0.2005 +vn 0.1467 0.2899 0.9458 +vn 0.9364 0.2777 -0.2145 +vn -0.5947 -0.0080 0.8039 +vn -0.5955 -0.0055 0.8033 +vn 0.5962 0.0054 -0.8028 +vn 0.5958 0.0070 -0.8031 +vn 0.1783 0.6472 -0.7412 +vn -0.6327 0.6748 0.3799 +vn 0.2993 -0.9356 0.1873 +vn -0.5764 -0.0216 0.8169 +vn -0.5721 -0.0207 0.8199 +vn -0.5673 -0.0182 0.8233 +vn -0.5715 -0.0205 0.8204 +vn -0.4756 0.7239 0.4998 +vn 0.5763 0.0227 -0.8169 +vn 0.5719 0.0218 -0.8200 +vn 0.1059 -0.9932 0.0492 +vn -0.5766 -0.0222 0.8167 +vn -0.7849 0.5630 0.2588 +vn 0.4888 -0.8103 0.3232 +vn -0.5635 -0.0112 0.8261 +vn -0.5665 -0.0173 0.8239 +vn -0.0429 -0.5801 0.8134 +vn 0.5713 0.0211 -0.8205 +vn 0.5671 0.0187 -0.8235 +vn -0.3446 0.9128 -0.2191 +vn 0.6084 -0.6896 -0.3928 +vn -0.1979 -0.6617 0.7232 +vn 0.0887 -0.3366 0.9374 +vn 0.9180 -0.3512 -0.1840 +vn -0.7325 0.4682 -0.4942 +vn 0.5631 0.0114 -0.8263 +vn 0.5662 0.0175 -0.8241 +vn 0.5627 0.0104 -0.8266 +vn 0.5612 0.0032 -0.8277 +vn 0.0201 0.5405 -0.8411 +vn -0.5542 0.7463 -0.3686 +vn 0.7497 -0.6033 -0.2719 +vn -0.8203 0.1344 -0.5560 +vn 0.5613 0.0027 -0.8276 +vn -0.1413 0.0928 -0.9856 +vn -0.1415 0.0866 -0.9862 +vn -0.1415 0.0866 -0.9861 +vn -0.9842 0.0969 0.1484 +vn -0.9848 0.0905 0.1483 +vn -0.9848 0.0904 0.1483 +vn -0.5620 -0.0030 0.8271 +vn -0.5635 -0.0100 0.8261 +vn 0.7263 -0.4821 0.4899 +vn -0.9211 0.3437 0.1829 +vn -0.0907 0.3294 -0.9398 +vn 0.8222 -0.1162 0.5572 +vn -0.5962 -0.0053 0.8028 +vn 0.9849 -0.0898 -0.1483 +vn 0.9854 -0.0839 -0.1483 +vn 0.5962 0.0053 -0.8028 +vn 0.9843 -0.0956 -0.1483 +vn 0.1413 -0.0916 0.9857 +vn 0.1415 -0.0860 0.9862 +vn 0.1415 -0.0859 0.9862 +vn 0.8206 -0.1319 0.5561 +vn 0.1791 -0.9756 0.1273 +vn 0.1792 -0.9756 0.1272 +vn -0.0955 -0.9931 -0.0678 +vn -0.0954 -0.9931 -0.0678 +vn -0.1707 -0.1770 -0.9693 +vn 0.5613 0.0025 -0.8276 +vn 0.1707 0.1770 0.9693 +vn 0.1417 -0.0803 0.9866 +vn -0.7776 -0.2449 -0.5791 +vn -0.1417 0.0803 -0.9867 +vn 0.7776 0.2449 0.5791 +vn -0.9854 0.0839 0.1483 +vn -0.5789 -0.0221 0.8151 +vn -0.5792 -0.0224 0.8149 +vn -0.5846 -0.0214 0.8111 +vn -0.3453 -0.6956 0.6301 +vn -0.5778 -0.0219 0.8159 +vn -0.5777 -0.0219 0.8159 +vn -0.5719 -0.0218 0.8200 +vn -0.5761 -0.0228 0.8170 +vn 0.5789 0.0224 -0.8151 +vn -0.5789 -0.0218 0.8151 +vn -0.4027 -0.7023 0.5871 +vn -0.4718 -0.8044 -0.3610 +vn -0.5899 -0.0183 0.8072 +vn -0.5853 -0.0214 0.8106 +vn -0.5907 -0.0178 0.8067 +vn -0.5943 -0.0131 0.8042 +vn 0.6021 0.6614 -0.4473 +vn -0.5945 -0.0123 0.8040 +vn -0.5956 -0.0092 0.8033 +vn -0.7550 -0.5626 0.3369 +vn 0.7663 0.5509 -0.3307 +vn -0.9360 -0.2790 0.2146 +vn 0.5956 0.0091 -0.8032 +vn 0.5945 0.0123 -0.8040 +vn -0.8849 -0.3964 0.2446 +vn 0.9649 0.1695 -0.2005 +vn -0.5958 -0.0070 0.8031 +vn -0.5966 -0.0057 0.8025 +vn 0.5962 0.0055 -0.8028 +vn -0.5671 -0.0187 0.8235 +vn -0.5713 -0.0210 0.8205 +vn -0.1978 -0.6618 0.7232 +vn 0.5766 0.0221 -0.8167 +vn -0.5631 -0.0114 0.8263 +vn -0.5662 -0.0176 0.8241 +vn -0.0428 -0.5802 0.8134 +vn 0.8205 -0.1319 0.5562 +vn -0.5627 -0.0104 0.8266 +vn -0.5612 -0.0032 0.8277 +vn 0.0889 -0.3367 0.9374 +vn 0.7263 -0.4821 0.4900 +vn 0.8222 -0.1162 0.5573 +vn -0.5962 -0.0053 0.8029 +vn 0.1415 -0.0916 0.9857 +vn 0.1416 -0.0860 0.9862 +vn 0.1416 -0.0859 0.9862 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt 0.686647 0.000000 +vt 0.870176 0.996278 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.782584 0.965408 +vt 0.870573 0.970227 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.833010 0.965282 +vt 0.908785 0.026051 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.968598 0.070112 +vt 0.979071 0.026051 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.968598 0.371019 +vt 0.757324 0.262250 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.173427 0.241164 +vt 0.758439 0.080128 +vt -0.973130 0.033128 +vt -0.123087 0.241439 +vt 0.978437 0.000000 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt 0.737072 0.000128 +vt 0.908263 0.000000 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.409642 -0.009898 +vt 0.677629 0.482142 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.240570 0.058726 +vt 0.669677 0.481452 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.786789 0.246652 +vt 0.991724 0.699406 +vt 0.928489 0.277215 +vt 0.873308 0.505274 +vt 0.786789 0.155990 +vt 0.958960 0.029326 +vt 0.991724 0.483440 +vt 0.977373 0.702462 +vt -0.140978 0.246673 +vt 0.958492 0.010078 +vt -0.156145 0.246590 +vt 0.929566 0.080357 +vt -0.144664 0.252235 +vt 0.984385 0.731379 +vt 0.945934 0.020741 +vt -0.159831 0.252152 +vt 0.984385 0.500820 +vt 0.989649 0.087406 +vt 0.706860 0.007022 +vt 0.847263 0.989602 +vt 0.686599 0.714388 +vt 0.721837 0.007060 +vt 0.884682 0.006674 +vt 0.720919 0.017861 +vt 0.673632 0.527027 +vt 0.872079 0.017335 +vt 0.705942 0.017823 +vt 0.673632 0.731676 +vt 0.690157 0.523535 +vt 0.802894 0.958412 +vt 0.847659 0.963551 +vt 0.695298 0.714388 +vt 0.661237 0.495044 +vt 0.817871 0.958374 +vt 0.885205 0.032725 +vt 0.661237 0.722645 +vt 0.693293 0.503638 +vt 0.944329 0.029337 +vt 0.981154 0.731379 +vt 0.977373 0.486830 +vt 0.989649 0.263822 +vt 0.873305 0.723869 +vt 0.981154 0.500820 +vt 0.870573 0.032734 +vt 0.693293 0.761173 +vt 0.679412 0.527027 +vt 0.695298 0.493838 +vt 0.679412 0.731676 +vt 0.826600 0.493835 +vt 0.826977 0.731673 +vt 0.826600 0.714385 +vt 0.814491 0.495042 +vt 0.122435 0.638558 +vt 0.015922 0.839080 +vt 0.835047 0.699404 +vt 0.993361 0.510073 +vt 0.758428 0.504317 +vt 0.072861 0.638558 +vt 0.015474 0.619132 +vt 0.835047 0.483438 +vt 0.845328 0.702461 +vt 0.015197 0.626266 +vt 0.014109 0.491099 +vt 0.993356 0.728667 +vt 0.758425 0.722912 +vt 0.833436 0.500823 +vt 0.891028 0.725398 +vt 0.672547 0.500827 +vt 0.752235 0.729690 +vt 0.667246 0.727168 +vt 0.891033 0.506802 +vt 0.752238 0.507120 +vt 0.071993 0.783837 +vt 0.969610 0.493832 +vt 0.987699 0.731670 +vt 0.641343 0.509140 +vt 0.689355 0.726560 +vt 0.969610 0.714382 +vt 0.122436 0.783837 +vt 0.641344 0.743247 +vt 0.833436 0.731382 +vt 0.845328 0.486829 +vt 0.814491 0.722643 +vt 0.825052 0.503733 +vt 0.016195 0.832047 +vt 0.634466 0.494220 +vt 0.825052 0.761267 +vt 0.826977 0.527024 +vt 0.022424 0.783234 +vt 0.035852 0.889154 +vt 0.043016 0.971597 +vt 0.706398 0.505224 +vt 0.072863 0.808180 +vt 0.028940 0.807392 +vt 0.010039 0.882150 +vt 0.137154 0.974703 +vt 0.631023 0.892124 +vt 0.649326 0.890699 +vt 0.121379 0.984023 +vt 0.648470 0.892315 +vt 0.072864 0.783142 +vt 0.043889 0.943476 +vt 0.078385 0.805896 +vt 0.075977 0.941215 +vt 0.613560 0.946909 +vt 0.672547 0.731385 +vt 0.701510 0.486829 +vt 0.669481 0.490576 +vt 0.072863 0.646796 +vt 0.648470 0.506013 +vt 0.080915 0.841605 +vt 0.968560 0.503835 +vt 0.102906 0.865583 +vt 0.634467 0.887149 +vt 0.987699 0.527021 +vt 0.968560 0.761369 +vt 0.690090 0.495972 +vt 0.701510 0.702461 +vt 0.603150 0.865583 +vt 0.014109 0.884028 +vt 0.706395 0.729929 +vt 0.816556 0.714481 +vt 0.023239 0.646888 +vt 0.040534 0.495932 +vt 0.081188 0.621686 +vt 0.007711 0.495744 +vt 0.041481 0.497122 +vt 0.080911 0.628820 +vt 0.003028 0.888966 +vt 0.041481 0.887645 +vt 0.060838 0.971173 +vt 0.631023 0.505822 +vt 0.649326 0.500176 +vt 0.081188 0.834572 +vt 0.805889 0.743046 +vt 0.122312 0.806766 +vt 0.988155 0.503653 +vt 0.115555 0.935422 +vt 0.904138 0.912557 +vt 0.988155 0.735605 +vt 0.813022 0.494763 +vt 0.890960 0.912565 +vt 0.735836 0.641861 +vt 0.693936 0.468644 +vt 0.027417 0.833361 +vt 0.420996 0.961603 +vt 0.032040 0.784613 +vt 0.284612 0.483847 +vt 0.656925 0.504187 +vt 0.681549 0.720168 +vt 0.066750 0.834450 +vt 0.299225 0.449509 +vt 0.999708 0.720167 +vt 0.989627 0.743247 +vt 0.121899 0.832034 +vt 0.693936 0.449159 +vt 0.420996 0.999935 +vt 0.008277 0.862094 +vt 0.082562 0.831201 +vt 0.741580 0.718717 +vt 0.678836 0.505353 +vt 0.815743 0.487362 +vt 0.741523 0.585977 +vt 0.678836 0.699564 +vt 0.553315 0.945729 +vt 0.982243 0.588758 +vt 0.460393 1.018433 +vt 0.949871 0.788878 +vt 0.982305 0.727355 +vt 0.668954 0.502598 +vt 0.949657 0.691167 +vt 0.979056 0.490574 +vt 0.078628 0.952623 +vt 0.035428 0.887064 +vt 0.812426 0.730862 +vt 0.971935 0.642457 +vt 0.805889 0.532195 +vt 0.173975 1.012235 +vt 0.908785 0.976444 +vt 0.726484 0.788878 +vt 0.984477 0.500479 +vt 0.894591 0.976453 +vt 0.737043 0.505375 +vt 0.726270 0.691167 +vt 0.987420 0.694407 +vt 0.999899 0.506981 +vt 0.968797 0.500648 +vt 0.989626 0.516135 +vt 0.652223 0.697892 +vt 0.656922 0.730164 +vt 0.681740 0.506981 +vt 0.985798 0.713641 +vt 0.053549 0.993732 +vt 0.043551 0.873068 +vt 0.522988 0.991572 +vt 0.062665 0.961706 +vt 0.169656 0.991799 +vt 0.060838 0.809705 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +s 1 +usemtl CabnetDoors +f 10412/21583/7762 10413/21587/7762 10414/21592/7762 10415/21596/7762 10416/21600/7762 10417/21606/7762 10418/21609/7762 10419/21612/7762 +f 10417/21605/7763 10416/21601/7763 10420/21616/7763 10421/21619/7763 +f 10422/21621/7764 10423/21625/7764 10424/21627/7764 10425/21628/7764 +f 10426/21632/7765 10427/21633/7765 10413/21588/7765 10412/21582/7765 +f 10427/21634/7766 10426/21631/7766 10428/21636/7766 10429/21637/7766 +f 10430/21639/7766 10431/21642/7766 10428/21636/7766 10426/21631/7766 +f 10430/21640/7765 10426/21632/7765 10412/21582/7765 10432/21644/7765 +f 10425/21629/7763 10417/21605/7763 10421/21619/7763 10422/21622/7763 +f 10432/21645/7762 10412/21583/7762 10419/21612/7762 10418/21609/7762 10417/21606/7762 10425/21630/7762 10424/21626/7762 10433/21648/7762 +f 10415/21597/7767 10416/21602/7767 10434/21651/7767 10435/21655/7767 +f 10425/21630/7762 10424/21626/7762 10418/21609/7762 10417/21606/7762 +f 10419/21613/7766 10412/21584/7766 10432/21646/7766 10433/21649/7766 +f 10417/21607/7768 10418/21610/7768 10436/21659/7768 10437/21661/7768 +f 10437/21661/7769 10436/21659/7769 10438/21663/7769 10439/21666/7769 +f 10440/21669/7769 10443/21677/7769 10442/21674/7769 10441/21672/7769 +f 10418/21611/7770 10415/21598/7770 10435/21656/7770 10436/21660/7770 +f 10412/21585/7771 10440/21669/7771 10441/21672/7771 10419/21614/7771 +f 10414/21593/7772 10445/21684/7772 10444/21680/7772 10413/21589/7772 +f 10419/21615/7773 10441/21673/7773 10445/21685/7773 10414/21594/7773 +f 10416/21603/7774 10417/21608/7774 10437/21662/7774 10434/21653/7774 +f 10413/21590/7775 10444/21681/7775 10440/21670/7775 10412/21586/7775 +f 10439/21667/7776 10438/21664/7776 10446/21689/7776 10447/21693/7776 +f 10448/21696/7777 10442/21675/7777 10443/21678/7777 10449/21698/7777 +f 10444/21682/7765 10451/21701/7765 10450/21699/7765 10449/21697/7765 +f 10436/21660/7765 10435/21656/7765 10446/21688/7765 10438/21665/7765 +f 10435/21657/7778 10434/21652/7778 10452/21705/7778 10453/21710/7778 +f 10444/21682/7765 10449/21697/7765 10443/21679/7765 10440/21671/7765 +f 10434/21653/7763 10437/21662/7763 10439/21668/7763 10447/21691/7763 +f 10441/21673/7763 10442/21676/7763 10448/21694/7763 10445/21685/7763 +f 10452/21706/7763 10454/21714/7763 10455/21717/7763 10456/21721/7763 +f 10451/21701/7765 10458/21728/7765 10457/21724/7765 10450/21699/7765 +f 10434/21654/7763 10447/21692/7763 10454/21715/7763 10452/21707/7763 +f 10447/21693/7779 10446/21689/7779 10459/21731/7779 10454/21716/7779 +f 10445/21686/7778 10460/21733/7778 10451/21702/7778 10444/21683/7778 +f 10448/21695/7763 10461/21737/7763 10460/21734/7780 10445/21687/7763 +f 10449/21698/7779 10450/21700/7779 10461/21738/7779 10448/21696/7779 +f 10446/21690/7765 10435/21658/7765 10453/21711/7765 10459/21732/7765 +f 10462/21739/7781 10456/21723/7781 10463/21743/7781 10464/21744/7781 +f 10465/21746/7782 10468/21754/7783 10467/21752/7784 10466/21749/7784 +f 10454/21716/7779 10459/21731/7779 10469/21756/7779 10455/21718/7779 +f 10451/21703/7765 10470/21759/7765 10466/21751/7765 10458/21729/7765 +f 10461/21737/7763 10472/21766/7763 10471/21762/7785 10460/21734/7780 +f 10459/21732/7765 10453/21711/7765 10473/21768/7765 10469/21757/7765 +f 10450/21700/7779 10457/21725/7779 10472/21765/7779 10461/21738/7779 +f 10456/21722/7786 10455/21719/7786 10474/21771/7786 10463/21742/7786 +f 10452/21708/7763 10456/21723/7763 10462/21739/7763 10475/21773/7763 +f 10476/21776/7787 10475/21774/7778 10462/21740/7778 10477/21779/7787 +f 10478/21782/7787 10465/21747/7787 10466/21750/7778 10470/21760/7778 +f 10476/21777/7787 10477/21780/7787 10465/21748/7787 10478/21783/7787 +f 10460/21735/7788 10478/21784/7788 10470/21761/7788 10451/21704/7788 +f 10466/21751/7789 10467/21753/7789 10479/21786/7789 10458/21729/7789 +f 10472/21766/7790 10481/21790/7790 10480/21787/7790 10471/21762/7790 +f 10453/21712/7791 10476/21778/7792 10478/21784/7793 10460/21735/7780 +f 10453/21712/7791 10452/21709/7794 10475/21775/7794 10476/21778/7792 +f 10482/21794/7795 10483/21798/7795 10484/21802/7796 10485/21806/7797 +f 10486/21810/7798 10487/21813/7799 10488/21816/7800 10489/21819/7798 +f 10469/21757/7801 10473/21768/7802 10487/21814/7803 10486/21811/7801 +f 10455/21720/7804 10469/21758/7804 10486/21812/7804 10474/21772/7804 +f 10477/21780/7805 10490/21823/7806 10468/21755/7783 10465/21748/7782 +f 10471/21763/7785 10480/21788/7807 10487/21815/7803 10473/21769/7802 +f 10458/21730/7808 10479/21785/7808 10491/21827/7808 10457/21726/7808 +f 10457/21727/7809 10491/21825/7809 10481/21791/7809 10472/21767/7809 +f 10477/21781/7805 10462/21741/7810 10464/21745/7810 10490/21824/7806 +f 10480/21788/7811 10492/21828/7812 10488/21817/7800 10487/21815/7799 +f 10493/21831/7813 10494/21835/7814 10495/21839/7815 10489/21820/7815 +f 10463/21742/7816 10474/21771/7816 10495/21840/7816 10483/21799/7816 +f 10484/21803/7817 10483/21800/7818 10495/21841/7818 10494/21836/7819 +f 10464/21744/7820 10463/21743/7820 10483/21801/7820 10482/21795/7820 +f 10485/21807/7821 10496/21843/7822 10497/21846/7823 10482/21796/7824 +f 10481/21792/7825 10493/21832/7826 10492/21829/7812 10480/21789/7825 +f 10468/21754/7827 10496/21844/7822 10485/21808/7821 10467/21752/7827 +f 10491/21826/7828 10494/21837/7814 10493/21833/7813 10481/21793/7828 +f 10479/21785/7829 10484/21804/7817 10494/21838/7819 10491/21827/7829 +f 10467/21753/7830 10485/21809/7797 10484/21805/7796 10479/21786/7830 +f 10490/21823/7831 10497/21847/7823 10496/21845/7822 10468/21755/7832 +f 10493/21834/7826 10489/21821/7833 10488/21818/7800 10492/21830/7812 +f 10474/21772/7834 10486/21812/7834 10489/21822/7834 10495/21842/7834 +f 10490/21824/7831 10464/21745/7835 10482/21797/7835 10497/21848/7823 +f 10429/21637/7766 10428/21636/7766 10498/21849/7766 10499/21850/7766 +f 10421/21620/7766 10420/21617/7766 10499/21850/7766 10498/21849/7766 +f 10498/21849/7766 10428/21636/7766 10431/21642/7766 10423/21624/7766 +f 10423/21624/7766 10422/21623/7766 10421/21620/7766 10498/21849/7766 +f 10427/21635/7836 10429/21638/7836 10414/21595/7836 10413/21591/7836 +f 10415/21599/7836 10499/21851/7836 10420/21618/7836 10416/21604/7836 +f 10414/21595/7836 10429/21638/7836 10499/21851/7836 10415/21599/7836 +f 10433/21650/7764 10431/21643/7764 10430/21641/7764 10432/21647/7764 +f 10424/21627/7764 10423/21625/7764 10431/21643/7764 10433/21650/7764 +f 10473/21770/7802 10453/21713/7791 10460/21736/7780 10471/21764/7785 +f 10500/21852/7837 10501/21853/7837 10502/21854/7838 10503/21856/7839 +f 10504/21857/7840 10503/21855/7840 10505/21860/7841 10506/21862/7842 +f 10507/21864/7843 10508/21865/7843 10509/21866/7844 10510/21868/7845 +f 10509/21866/7846 10511/21869/7846 10512/21871/7846 10513/21873/7846 +f 10514/21875/7847 10515/21876/7847 10516/21877/7847 10517/21879/7847 +f 10518/21881/7848 10501/21853/7848 10519/21882/7848 10511/21870/7848 +f 10508/21865/7849 10518/21880/7849 10511/21869/7849 10509/21866/7849 +f 10520/21883/7850 10521/21884/7850 10518/21880/7849 10508/21865/7849 +f 10521/21885/7851 10502/21854/7851 10501/21853/7848 10518/21881/7848 +f 10522/21886/7852 10514/21874/7852 10517/21878/7852 10523/21887/7852 +f 10504/21858/7852 10524/21890/7852 10514/21874/7852 10522/21886/7852 +f 10524/21889/7847 10525/21891/7847 10515/21876/7847 10514/21875/7847 +f 10516/21877/7853 10510/21867/7853 10526/21893/7853 10527/21894/7853 +f 10511/21870/7854 10519/21882/7854 10528/21895/7854 10512/21872/7854 +f 10523/21887/7855 10517/21878/7855 10529/21897/7855 10530/21899/7855 +f 10515/21876/7856 10507/21863/7856 10510/21867/7856 10516/21877/7856 +f 10525/21891/7856 10531/21901/7856 10507/21863/7856 10515/21876/7856 +f 10531/21900/7857 10520/21883/7857 10508/21865/7843 10507/21864/7843 +f 10521/21884/7850 10520/21883/7850 10532/21902/7858 10533/21904/7858 +f 10525/21891/7859 10524/21889/7859 10534/21905/7859 10535/21907/7859 +f 10520/21883/7857 10531/21900/7857 10536/21908/7860 10532/21902/7861 +f 10537/21910/7837 10519/21882/7837 10501/21853/7837 10500/21852/7837 +f 10534/21906/7862 10506/21861/7862 10538/21913/7862 10539/21915/7862 +f 10536/21909/7863 10535/21907/7863 10540/21916/7863 10541/21918/7863 +f 10535/21907/7864 10534/21905/7864 10539/21914/7864 10540/21916/7864 +f 10532/21902/7861 10536/21908/7860 10541/21919/7865 10542/21920/7866 +f 10502/21854/7851 10521/21885/7851 10533/21903/7867 10543/21921/7867 +f 10531/21901/7868 10525/21891/7868 10535/21907/7868 10536/21909/7868 +f 10503/21856/7839 10502/21854/7838 10543/21921/7869 10505/21859/7869 +f 10524/21890/7870 10504/21858/7870 10506/21861/7870 10534/21906/7870 +f 10542/21920/7866 10541/21919/7865 10544/21922/7871 10545/21923/7872 +f 10538/21913/7873 10546/21924/7874 10547/21927/7875 10548/21928/7876 +f 10549/21929/7877 10542/21920/7877 10545/21923/7877 10550/21931/7877 +f 10546/21924/7878 10551/21934/7878 10552/21936/7878 10547/21927/7878 +f 10543/21921/7879 10533/21903/7879 10549/21930/7879 10551/21935/7879 +f 10505/21859/7880 10543/21921/7880 10551/21935/7880 10546/21925/7880 +f 10533/21904/7881 10532/21902/7881 10542/21920/7881 10549/21929/7881 +f 10506/21862/7842 10505/21860/7841 10546/21926/7874 10538/21912/7873 +f 10548/21928/7876 10547/21927/7875 10553/21940/7882 10554/21941/7883 +f 10550/21931/7884 10545/21923/7884 10555/21942/7884 10556/21944/7884 +f 10547/21927/7885 10552/21936/7885 10557/21945/7885 10553/21940/7885 +f 10552/21937/7886 10550/21932/7886 10556/21943/7886 10557/21946/7886 +f 10540/21916/7887 10539/21914/7887 10558/21947/7887 10559/21950/7887 +f 10541/21919/7888 10540/21917/7888 10559/21952/7888 10544/21922/7888 +f 10539/21915/7889 10538/21913/7889 10548/21928/7889 10558/21949/7889 +f 10551/21935/7890 10549/21930/7890 10550/21933/7890 10552/21938/7890 +f 10557/21946/7891 10556/21943/7891 10560/21954/7891 10561/21955/7891 +f 10562/21957/7892 10554/21941/7892 10563/21958/7892 10564/21959/7892 +f 10565/21961/7893 10566/21963/7893 10567/21965/7893 10568/21967/7893 +f 10566/21963/7894 10562/21956/7894 10564/21960/7894 10567/21965/7894 +f 10545/21923/7872 10544/21922/7871 10565/21962/7895 10555/21942/7896 +f 10559/21951/7897 10558/21948/7897 10562/21956/7897 10566/21963/7897 +f 10544/21922/7898 10559/21952/7898 10566/21964/7898 10565/21962/7898 +f 10558/21949/7899 10548/21928/7899 10554/21941/7899 10562/21957/7899 +f 10569/21968/7900 10570/21970/7900 10571/21972/7901 10572/21973/7901 +f 10560/21953/7902 10573/21976/7902 10574/21977/7902 10575/21979/7902 +f 10576/21982/7903 10577/21984/7903 10578/21986/7903 10579/21987/7903 +f 10564/21959/7904 10563/21958/7904 10580/21990/7904 10581/21992/7904 +f 10553/21939/7905 10557/21946/7905 10561/21955/7905 10582/21996/7905 +f 10556/21944/7906 10555/21942/7906 10573/21976/7906 10560/21953/7906 +f 10554/21941/7883 10553/21940/7882 10582/21995/7907 10563/21958/7908 +f 10555/21942/7896 10565/21962/7895 10568/21966/7909 10573/21976/7910 +f 10513/21873/7911 10512/21871/7911 10583/21997/7911 10584/21999/7911 +f 10528/21895/7912 10585/22000/7912 10586/22002/7912 10587/22006/7912 +f 10529/21896/7913 10527/21894/7913 10588/22007/7913 10589/22009/7913 +f 10585/22001/7914 10530/21898/7915 10590/22011/7916 10586/22003/7917 +f 10519/21882/7918 10537/21910/7918 10585/22000/7918 10528/21895/7918 +f 10510/21868/7845 10509/21866/7844 10513/21873/7919 10526/21892/7920 +f 10517/21879/7921 10516/21877/7921 10527/21894/7921 10529/21896/7921 +f 10537/21911/7922 10523/21888/7922 10530/21898/7915 10585/22001/7914 +f 10587/22005/7923 10586/22004/7923 10591/22013/7923 10592/22016/7923 +f 10589/22009/7924 10588/22007/7924 10593/22017/7924 10594/22020/7924 +f 10586/22004/7917 10590/22012/7916 10595/22023/7925 10591/22013/7926 +f 10590/22012/7927 10589/22010/7927 10594/22021/7927 10595/22023/7927 +f 10526/21892/7920 10513/21873/7919 10584/21999/7928 10596/22025/7929 +f 10512/21872/7930 10528/21895/7930 10587/22006/7930 10583/21998/7930 +f 10527/21894/7931 10526/21893/7931 10596/22024/7931 10588/22007/7931 +f 10530/21899/7932 10529/21897/7932 10589/22010/7932 10590/22012/7932 +f 10595/22023/7933 10594/22021/7933 10597/22026/7933 10598/22028/7933 +f 10593/22018/7934 10599/22029/7934 10600/22030/7934 10601/22032/7934 +f 10602/22034/7935 10592/22014/7935 10603/22037/7935 10604/22039/7935 +f 10599/22029/7936 10605/22041/7937 10606/22042/7938 10600/22030/7939 +f 10584/21999/7940 10583/21997/7940 10602/22036/7940 10605/22041/7940 +f 10596/22025/7929 10584/21999/7928 10605/22041/7937 10599/22029/7936 +f 10583/21998/7941 10587/22006/7941 10592/22015/7941 10602/22035/7941 +f 10588/22008/7942 10596/22025/7942 10599/22029/7942 10593/22018/7942 +f 10604/22039/7943 10603/22037/7943 10577/21984/7943 10576/21982/7943 +f 10600/22030/7939 10606/22042/7938 10607/22043/7944 10608/22045/7944 +f 10606/22042/7945 10604/22040/7945 10576/21983/7946 10607/22043/7947 +f 10603/22037/7948 10609/22046/7948 10569/21969/7949 10577/21984/7950 +f 10591/22013/7926 10595/22023/7925 10598/22028/7951 10609/22047/7952 +f 10594/22022/7953 10593/22019/7953 10601/22033/7953 10597/22027/7953 +f 10592/22016/7954 10591/22013/7954 10609/22047/7954 10603/22038/7954 +f 10605/22041/7955 10602/22036/7955 10604/22040/7955 10606/22042/7955 +f 10610/22048/7956 10611/22050/7956 10612/22051/7956 10613/22053/7956 +f 10563/21958/7908 10582/21995/7907 10614/22056/7957 10580/21990/7957 +f 10611/22050/7958 10608/22044/7958 10615/22059/7959 10612/22051/7959 +f 10573/21976/7910 10568/21966/7909 10616/22062/7960 10574/21977/7960 +f 10601/22033/7961 10600/22031/7961 10608/22044/7958 10611/22050/7958 +f 10598/22028/7962 10597/22026/7962 10610/22049/7963 10570/21970/7964 +f 10609/22047/7952 10598/22028/7951 10570/21970/7900 10569/21968/7900 +f 10597/22027/7965 10601/22033/7965 10611/22050/7965 10610/22048/7965 +f 10617/22065/7966 10575/21980/7966 10574/21978/7966 10616/22063/7966 +f 10581/21993/7967 10617/22065/7966 10616/22063/7966 10618/22066/7966 +f 10580/21991/7967 10614/22057/7967 10617/22065/7966 10581/21993/7967 +f 10614/22057/7967 10619/22068/7966 10575/21980/7966 10617/22065/7966 +f 10620/22070/7968 10579/21988/7968 10578/21985/7969 10572/21974/7969 +f 10613/22054/7968 10620/22070/7968 10572/21974/7969 10571/21971/7969 +f 10612/22052/7968 10615/22060/7968 10620/22070/7968 10613/22054/7968 +f 10615/22060/7968 10621/22071/7968 10579/21988/7968 10620/22070/7968 +f 10568/21967/7970 10567/21965/7970 10618/22067/7970 10616/22064/7970 +f 10608/22045/7944 10607/22043/7944 10621/22072/7971 10615/22061/7971 +f 10582/21996/7972 10561/21955/7972 10619/22069/7972 10614/22058/7972 +f 10570/21970/7964 10610/22049/7963 10613/22055/7973 10571/21972/7973 +f 10567/21965/7974 10564/21960/7974 10581/21994/7974 10618/22067/7974 +f 10607/22043/7947 10576/21983/7946 10579/21989/7975 10621/22072/7975 +f 10561/21955/7976 10560/21954/7976 10575/21981/7976 10619/22069/7976 +f 10577/21984/7950 10569/21969/7949 10572/21975/7977 10578/21986/7977 +f 10622/22074/7837 10623/22075/7837 10624/22076/7838 10625/22078/7839 +f 10626/22079/7978 10625/22077/7978 10627/22081/7979 10628/22082/7980 +f 10629/22083/7853 10630/22085/7853 10631/22088/7853 10632/22090/7853 +f 10633/22092/7847 10634/22093/7847 10629/22084/7847 10635/22096/7847 +f 10636/22098/7848 10623/22075/7848 10637/22099/7848 10638/22100/7848 +f 10639/22102/7849 10636/22097/7849 10638/22101/7849 10640/22103/7849 +f 10641/22104/7849 10642/22105/7849 10636/22097/7849 10639/22102/7849 +f 10642/22106/7851 10624/22076/7851 10623/22075/7848 10636/22098/7848 +f 10643/22107/7852 10633/22091/7852 10635/22095/7852 10644/22108/7852 +f 10626/22079/7852 10645/22110/7852 10633/22091/7852 10643/22107/7852 +f 10645/22109/7847 10646/22111/7847 10634/22093/7847 10633/22092/7847 +f 10638/22100/7854 10637/22099/7854 10647/22113/7854 10648/22115/7854 +f 10644/22108/7981 10635/22095/7981 10649/22116/7981 10650/22118/7981 +f 10651/22119/7982 10644/22108/7983 10650/22118/7984 10652/22121/7985 +f 10634/22094/7856 10653/22123/7856 10630/22085/7856 10629/22083/7856 +f 10646/22112/7856 10654/22125/7856 10653/22123/7856 10634/22094/7856 +f 10642/22105/7858 10641/22104/7858 10655/22126/7858 10656/22128/7858 +f 10646/22111/7859 10645/22109/7859 10657/22129/7859 10658/22131/7859 +f 10641/22104/7986 10654/22124/7986 10659/22134/7860 10655/22126/7861 +f 10643/22107/7987 10622/22073/7987 10625/22077/7978 10626/22079/7978 +f 10644/22108/7983 10651/22119/7982 10622/22073/7987 10643/22107/7987 +f 10651/22120/7837 10637/22099/7837 10623/22075/7837 10622/22074/7837 +f 10660/22135/7879 10656/22127/7879 10661/22137/7879 10662/22139/7879 +f 10657/22130/7862 10628/22082/7862 10663/22141/7862 10664/22143/7862 +f 10659/22133/7863 10658/22132/7863 10665/22144/7863 10666/22147/7863 +f 10658/22131/7864 10657/22129/7864 10664/22142/7864 10665/22146/7864 +f 10624/22076/7851 10642/22106/7851 10656/22127/7867 10660/22135/7867 +f 10654/22125/7868 10646/22112/7868 10658/22132/7868 10659/22133/7868 +f 10625/22078/7839 10624/22076/7838 10660/22135/7869 10627/22080/7869 +f 10645/22110/7988 10626/22079/7988 10628/22082/7988 10657/22130/7988 +f 10666/22148/7888 10665/22145/7888 10667/22152/7888 10668/22153/7888 +f 10665/22146/7989 10664/22142/7989 10669/22154/7989 10667/22150/7989 +f 10670/22158/7866 10666/22148/7865 10668/22153/7871 10671/22159/7872 +f 10663/22141/7990 10672/22161/7991 10673/22162/7992 10674/22163/7993 +f 10627/22080/7880 10660/22135/7880 10662/22139/7880 10672/22160/7880 +f 10656/22128/7994 10655/22126/7994 10670/22157/7994 10661/22136/7994 +f 10628/22082/7980 10627/22081/7979 10672/22161/7991 10663/22141/7990 +f 10655/22126/7861 10659/22134/7860 10666/22149/7865 10670/22157/7866 +f 10674/22163/7993 10673/22162/7992 10675/22165/7995 10676/22166/7996 +f 10677/22169/7884 10671/22159/7884 10678/22170/7884 10679/22171/7884 +f 10673/22162/7885 10680/22175/7885 10681/22176/7885 10675/22165/7885 +f 10680/22173/7886 10677/22167/7886 10679/22172/7886 10681/22177/7886 +f 10664/22143/7997 10663/22141/7997 10674/22163/7997 10669/22156/7997 +f 10662/22139/7890 10661/22137/7890 10677/22168/7890 10680/22174/7890 +f 10672/22161/7878 10662/22140/7878 10680/22175/7878 10673/22162/7878 +f 10661/22138/7998 10670/22158/7998 10671/22159/7998 10677/22169/7998 +f 10679/22171/7906 10678/22170/7906 10682/22178/7906 10683/22179/7906 +f 10675/22164/7905 10681/22177/7905 10684/22181/7905 10685/22183/7905 +f 10681/22177/7891 10679/22172/7891 10683/22180/7891 10684/22181/7891 +f 10686/22184/7999 10676/22166/7999 10687/22186/7999 10688/22187/7999 +f 10671/22159/7872 10668/22153/7871 10689/22189/8000 10678/22170/8001 +f 10667/22151/7897 10669/22155/7897 10686/22185/7897 10690/22192/7897 +f 10668/22153/7898 10667/22152/7898 10690/22191/7898 10689/22189/7898 +f 10669/22156/8002 10674/22163/8002 10676/22166/8002 10686/22184/8002 +f 10691/22193/7900 10692/22195/7900 10693/22197/7901 10694/22198/7901 +f 10683/22179/8003 10682/22178/8003 10695/22201/8003 10696/22203/8003 +f 10697/22207/7903 10698/22209/7903 10699/22211/7903 10700/22212/7903 +f 10688/22187/7904 10687/22186/7904 10701/22216/7904 10702/22218/7904 +f 10676/22166/7996 10675/22165/7995 10685/22182/8004 10687/22186/8005 +f 10678/22170/8001 10689/22189/8000 10703/22222/8006 10682/22178/7910 +f 10690/22192/7894 10686/22185/7894 10688/22188/7894 10704/22224/7894 +f 10689/22190/7893 10690/22192/7893 10704/22224/7893 10703/22223/7893 +f 10647/22113/7912 10652/22122/7912 10705/22225/7912 10706/22227/7912 +f 10649/22117/7913 10632/22089/7913 10707/22231/7913 10708/22233/7913 +f 10652/22121/7985 10650/22118/7984 10709/22234/8007 10705/22226/8008 +f 10650/22118/8009 10649/22116/8009 10708/22232/8009 10709/22234/8009 +f 10640/22103/7846 10638/22101/7846 10648/22114/7846 10710/22235/7846 +f 10637/22099/7918 10651/22120/7918 10652/22122/7918 10647/22113/7918 +f 10630/22086/8010 10640/22103/8010 10710/22235/7919 10631/22087/7920 +f 10635/22096/7921 10629/22084/7921 10632/22089/7921 10649/22117/7921 +f 10705/22226/8008 10709/22234/8007 10711/22236/8011 10712/22237/8012 +f 10709/22234/8013 10708/22232/8013 10713/22239/8013 10711/22236/8013 +f 10707/22229/7942 10714/22243/7942 10715/22244/7942 10716/22245/7942 +f 10717/22249/7941 10706/22227/7941 10718/22251/7941 10719/22254/7941 +f 10710/22235/7911 10648/22114/7911 10717/22248/7911 10720/22257/7911 +f 10631/22087/7920 10710/22235/7919 10720/22257/7928 10714/22241/7929 +f 10648/22115/7930 10647/22113/7930 10706/22227/7930 10717/22249/7930 +f 10632/22090/7931 10631/22088/7931 10714/22242/7931 10707/22230/7931 +f 10716/22245/7934 10715/22244/7934 10721/22259/7934 10722/22261/7934 +f 10719/22255/7935 10718/22252/7935 10723/22264/7935 10724/22266/7935 +f 10715/22244/7936 10725/22267/7937 10726/22268/7938 10721/22259/7939 +f 10725/22267/7955 10719/22256/7955 10724/22265/7955 10726/22268/7955 +f 10708/22233/7924 10707/22231/7924 10716/22246/7924 10713/22238/7924 +f 10706/22228/7923 10705/22226/7923 10712/22237/7923 10718/22253/7923 +f 10720/22258/7940 10717/22250/7940 10719/22256/7940 10725/22267/7940 +f 10714/22243/7929 10720/22258/7928 10725/22267/7937 10715/22244/7936 +f 10726/22268/7945 10724/22265/7945 10697/22208/7946 10727/22269/7947 +f 10723/22264/7948 10728/22270/7948 10691/22194/7949 10698/22209/7950 +f 10729/22272/8014 10722/22262/8014 10730/22274/8014 10731/22275/8014 +f 10728/22271/8015 10732/22277/8016 10692/22195/7900 10691/22193/7900 +f 10711/22236/8017 10713/22239/8017 10729/22273/8017 10732/22277/8017 +f 10712/22237/8012 10711/22236/8011 10732/22277/8016 10728/22271/8015 +f 10713/22240/8018 10716/22247/8018 10722/22262/8018 10729/22272/8018 +f 10718/22253/7954 10712/22237/7954 10728/22271/7954 10723/22263/7954 +f 10731/22275/8019 10730/22274/8019 10733/22278/8019 10734/22280/8019 +f 10687/22186/8005 10685/22182/8004 10735/22284/8020 10701/22216/8020 +f 10682/22178/7910 10703/22222/8006 10736/22287/7960 10695/22201/7960 +f 10730/22274/7958 10737/22290/7958 10738/22292/7959 10733/22278/7959 +f 10721/22259/7939 10726/22268/7938 10727/22269/7944 10737/22291/7944 +f 10724/22266/7943 10723/22264/7943 10698/22209/7943 10697/22207/7943 +f 10722/22262/7961 10721/22260/7961 10737/22290/7958 10730/22274/7958 +f 10732/22277/8021 10729/22273/8021 10731/22276/8022 10692/22195/8023 +f 10739/22295/7966 10696/22204/7966 10695/22202/7966 10736/22288/7966 +f 10702/22219/7967 10739/22295/7966 10736/22288/7966 10740/22297/7966 +f 10701/22217/7967 10735/22285/7967 10739/22296/7966 10702/22220/7967 +f 10735/22285/7967 10741/22299/7966 10696/22205/7966 10739/22296/7966 +f 10742/22301/7968 10700/22213/7968 10699/22210/7969 10694/22199/7969 +f 10734/22281/7968 10742/22301/7968 10694/22199/7969 10693/22196/7969 +f 10733/22279/7968 10738/22293/7968 10742/22302/7968 10734/22282/7968 +f 10738/22293/7968 10743/22303/7968 10700/22214/7968 10742/22302/7968 +f 10703/22223/7970 10704/22224/7970 10740/22298/7970 10736/22289/7970 +f 10737/22291/7944 10727/22269/7944 10743/22304/7971 10738/22294/7971 +f 10685/22183/7972 10684/22181/7972 10741/22300/7972 10735/22286/7972 +f 10692/22195/8023 10731/22276/8022 10734/22283/7973 10693/22197/7973 +f 10704/22224/7974 10688/22188/7974 10702/22221/7974 10740/22298/7974 +f 10727/22269/7947 10697/22208/7946 10700/22215/7975 10743/22304/7975 +f 10684/22181/7976 10683/22180/7976 10696/22206/7976 10741/22300/7976 +f 10698/22209/7950 10691/22194/7949 10694/22200/7977 10699/22211/7977 +o Chair.030 +v -4.599848 0.415382 4.706464 +v -4.599848 0.429951 4.706464 +v -4.588404 0.429951 4.658183 +v -4.495694 0.429951 4.267071 +v -4.484249 0.429951 4.218791 +v -4.484249 0.415382 4.218791 +v -4.495694 0.415382 4.267071 +v -4.588404 0.415382 4.658183 +v -4.858510 0.429951 4.130075 +v -4.858510 0.415382 4.130075 +v -4.858510 0.400812 4.130075 +v -4.869032 0.400812 4.174464 +v -4.495694 0.400812 4.267071 +v -4.484250 0.400812 4.218791 +v -4.974110 0.415382 4.617748 +v -4.974110 0.429951 4.617748 +v -4.963587 0.415382 4.573359 +v -4.963587 0.429951 4.573359 +v -4.974110 0.400812 4.617748 +v -4.963587 0.400812 4.573359 +v -4.599848 0.400812 4.706464 +v -4.588404 0.400812 4.658183 +v -4.464568 0.432961 4.244532 +v -4.468016 0.432961 4.259079 +v -4.472392 0.421009 4.258041 +v -4.468944 0.421009 4.243494 +v -4.460106 0.426967 4.260953 +v -4.456658 0.426967 4.246407 +v -4.573074 0.419106 4.691712 +v -4.569675 0.419106 4.677373 +v -4.557389 0.425064 4.680285 +v -4.560788 0.425064 4.694624 +v -4.568562 0.434699 4.692781 +v -4.565163 0.434699 4.678443 +v -4.454032 0.431853 4.262393 +v -4.450584 0.431853 4.247846 +v -4.551179 0.433592 4.681757 +v -4.554578 0.433592 4.696096 +v -4.542643 0.592772 4.698925 +v -4.556627 0.593879 4.695611 +v -4.452632 0.592141 4.247361 +v -4.456081 0.592141 4.261908 +v -4.438649 0.591033 4.250675 +v -4.420743 0.829840 4.254920 +v -4.434727 0.830948 4.251605 +v -4.524737 0.831579 4.703170 +v -4.538721 0.832686 4.699855 +v -4.442097 0.591033 4.265222 +v -4.553228 0.593879 4.681272 +v -4.539244 0.592772 4.684587 +v -4.444663 0.830737 4.249249 +v -4.436857 0.870951 4.274798 +v -4.445693 0.870348 4.272704 +v -4.545270 0.832325 4.683158 +v -4.548669 0.832325 4.697497 +v -4.539390 0.869634 4.675805 +v -4.535896 0.864490 4.659347 +v -4.424191 0.829840 4.269466 +v -4.565474 0.608202 4.693513 +v -4.535322 0.832686 4.685516 +v -4.521338 0.831579 4.688831 +v -4.438175 0.830948 4.266152 +v -4.424263 0.869953 4.277783 +v -4.461469 0.606614 4.245266 +v -4.464917 0.606614 4.259813 +v -4.448112 0.830737 4.263796 +v -4.562075 0.608202 4.679175 +v -4.530544 0.870373 4.677902 +v -4.527050 0.865229 4.661444 +v -4.514456 0.864232 4.664430 +v -4.459645 0.913073 4.344415 +v -4.451791 0.914244 4.346756 +v -4.510529 0.911897 4.607174 +v -4.518541 0.911148 4.605644 +v -4.428641 0.867524 4.295446 +v -4.441236 0.868521 4.292460 +v -4.454872 0.902898 4.355960 +v -4.441306 0.901824 4.359176 +v -4.450072 0.867919 4.290366 +v -4.517949 0.869376 4.680888 +v -4.509156 0.900855 4.597692 +v -4.495591 0.899781 4.600908 +v -4.496964 0.910823 4.610390 +v -4.438226 0.913170 4.349972 +v -4.517458 0.901346 4.597797 +v -4.462725 0.901727 4.353619 +v -4.869032 0.415382 4.174464 +v -4.869032 0.429951 4.174464 +v -4.670250 0.438060 4.172471 +v -4.668902 0.443651 4.166787 +v -4.541352 0.443651 4.197022 +v -4.542699 0.438060 4.202705 +v -4.542658 0.429976 4.202533 +v -4.511176 0.437950 4.210178 +v -4.513679 0.430300 4.209403 +v -4.665708 0.429903 4.153309 +v -4.665748 0.437987 4.153480 +v -4.793298 0.437987 4.123245 +v -4.793257 0.429903 4.123074 +v -4.794588 0.443828 4.128686 +v -4.825629 0.439408 4.121328 +v -4.822065 0.434055 4.116426 +v -4.668920 0.424135 4.166858 +v -4.667055 0.424311 4.158992 +v -4.794604 0.424311 4.128757 +v -4.796469 0.424135 4.136624 +v -4.667038 0.443828 4.158921 +v -4.796452 0.443651 4.136553 +v -4.538198 0.437987 4.183715 +v -4.539487 0.443828 4.189156 +v -4.670209 0.429976 4.172298 +v -4.797759 0.429976 4.142064 +v -4.541369 0.424135 4.197093 +v -4.539505 0.424311 4.189227 +v -4.818878 0.426646 4.117001 +v -4.818048 0.421521 4.123200 +v -4.827425 0.439247 4.129211 +v -4.819844 0.421360 4.131083 +v -4.823408 0.426713 4.135984 +v -4.538157 0.429903 4.183544 +v -4.506697 0.437881 4.191182 +v -4.506149 0.443408 4.197059 +v -4.514226 0.424773 4.203527 +v -4.512306 0.424940 4.195674 +v -4.509200 0.430231 4.190408 +v -4.797799 0.438060 4.142236 +v -4.486152 0.420977 4.215928 +v -4.488341 0.416357 4.209663 +v -4.486372 0.416497 4.201822 +v -4.481695 0.420919 4.196928 +v -4.476922 0.427313 4.198240 +v -4.508070 0.443241 4.204912 +v -4.458597 0.402967 4.202403 +v -4.452070 0.407418 4.204131 +v -4.481380 0.427371 4.217241 +v -4.456512 0.407458 4.223135 +v -4.463039 0.403008 4.221406 +v -4.474734 0.431932 4.204505 +v -4.448616 0.410634 4.210697 +v -4.476703 0.431793 4.212347 +v -4.450623 0.410537 4.218529 +v -4.439246 0.380352 4.227228 +v -4.446820 0.378323 4.225251 +v -4.434813 0.380334 4.208221 +v -4.430602 0.381800 4.214967 +v -4.432633 0.381756 4.222793 +v -4.466494 0.399792 4.214842 +v -4.464486 0.399889 4.207009 +v -4.415400 0.345795 4.218570 +v -4.417432 0.345756 4.226397 +v -4.451032 0.376856 4.218507 +v -4.431721 0.342751 4.228830 +v -4.435976 0.341467 4.222076 +v -4.442387 0.378304 4.206245 +v -4.449001 0.376901 4.210680 +v -4.433943 0.341506 4.214250 +v -4.427289 0.342735 4.209824 +v -4.894334 0.349401 4.119353 +v -4.886481 0.348454 4.121033 +v -4.926478 -0.002953 4.111553 +v -4.934331 -0.002007 4.109872 +v -4.419656 0.344511 4.211814 +v -4.335310 0.001491 4.231808 +v -4.331054 0.002774 4.238564 +v -4.896696 0.350077 4.104483 +v -4.898390 0.350056 4.112389 +v -4.938387 -0.001352 4.102908 +v -4.936693 -0.001331 4.095002 +v -4.347375 -0.000270 4.248825 +v -4.351630 -0.001553 4.242069 +v -4.424087 0.344527 4.230822 +v -4.855739 0.425574 4.114191 +v -4.850282 0.421603 4.109738 +v -4.826595 0.434122 4.135410 +v -4.854835 0.421652 4.128716 +v -4.857478 0.425454 4.122087 +v -4.841830 0.412305 4.117563 +v -4.843569 0.412185 4.125459 +v -4.849026 0.416156 4.129911 +v -4.875951 0.403231 4.123711 +v -4.879740 0.405075 4.116810 +v -4.860126 0.398698 4.113226 +v -4.861829 0.398640 4.121130 +v -4.868484 0.400566 4.125299 +v -4.844472 0.416106 4.110934 +v -4.876510 0.371230 4.117651 +v -4.883352 0.372479 4.121775 +v -4.863915 0.400542 4.106325 +v -4.878781 0.372464 4.102801 +v -4.874814 0.371267 4.109745 +v -4.878038 0.405133 4.108905 +v -4.895044 0.375406 4.113182 +v -4.893347 0.375443 4.105277 +v -4.871382 0.403207 4.104736 +v -4.886506 0.374194 4.101151 +v -4.889761 0.349392 4.100379 +v -4.881909 0.348446 4.102060 +v -4.891077 0.374209 4.120125 +v -4.879547 0.347770 4.116930 +v -4.877853 0.347791 4.109024 +v -4.917850 -0.003617 4.099543 +v -4.919545 -0.003637 4.107450 +v -4.339741 0.001507 4.250815 +v -4.921906 -0.002962 4.092579 +v -4.342943 -0.000286 4.229817 +v -4.341342 0.000611 4.240316 +v -4.349598 -0.001514 4.234243 +v -4.333086 0.002736 4.246390 +v -4.928118 -0.002484 4.101225 +v -4.929759 -0.002015 4.090899 +v -4.791005 0.438060 4.681897 +v -4.789658 0.443651 4.676214 +v -4.662107 0.443651 4.706449 +v -4.663455 0.438060 4.712132 +v -4.663414 0.429976 4.711961 +v -4.631931 0.437950 4.719604 +v -4.634434 0.430300 4.718830 +v -4.915360 0.424311 4.638184 +v -4.914013 0.429903 4.632501 +v -4.939634 0.426646 4.626427 +v -4.938804 0.421521 4.632627 +v -4.789675 0.424135 4.676285 +v -4.787810 0.424311 4.668419 +v -4.917224 0.424135 4.646050 +v -4.787794 0.443828 4.668348 +v -4.917208 0.443651 4.645979 +v -4.915343 0.443828 4.638113 +v -4.786504 0.437987 4.662907 +v -4.914053 0.437987 4.632672 +v -4.658953 0.437987 4.693141 +v -4.660243 0.443828 4.698583 +v -4.790965 0.429976 4.681726 +v -4.918514 0.429976 4.651492 +v -4.662125 0.424135 4.706520 +v -4.660260 0.424311 4.698654 +v -4.948180 0.439247 4.638638 +v -4.946385 0.439408 4.630755 +v -4.940600 0.421360 4.640509 +v -4.944163 0.426713 4.645411 +v -4.918555 0.438060 4.651663 +v -4.947351 0.434122 4.644837 +v -4.786463 0.429903 4.662735 +v -4.658913 0.429903 4.692970 +v -4.627452 0.437881 4.700608 +v -4.626905 0.443408 4.706485 +v -4.634982 0.424773 4.712954 +v -4.633061 0.424940 4.705101 +v -4.629955 0.430231 4.699834 +v -4.628825 0.443241 4.714338 +v -4.595489 0.431932 4.713932 +v -4.597458 0.431793 4.721773 +v -4.606908 0.420977 4.725355 +v -4.609096 0.416357 4.719090 +v -4.607127 0.416497 4.711248 +v -4.602450 0.420919 4.706354 +v -4.585242 0.399889 4.716436 +v -4.579352 0.402967 4.711829 +v -4.587249 0.399792 4.724268 +v -4.597677 0.427313 4.707666 +v -4.572826 0.407418 4.713557 +v -4.602135 0.427371 4.726667 +v -4.577268 0.407458 4.732562 +v -4.583795 0.403008 4.730834 +v -4.560001 0.380352 4.736655 +v -4.567576 0.378323 4.734679 +v -4.569371 0.410634 4.720123 +v -4.555569 0.380334 4.717648 +v -4.551357 0.381800 4.724393 +v -4.571379 0.410537 4.727955 +v -4.553388 0.381756 4.732220 +v -4.540410 0.344511 4.721241 +v -4.536156 0.345795 4.727996 +v -4.538188 0.345756 4.735823 +v -4.544843 0.344527 4.740248 +v -4.571788 0.376856 4.727933 +v -4.552476 0.342751 4.738258 +v -4.556731 0.341467 4.731503 +v -4.563142 0.378304 4.715672 +v -4.569757 0.376901 4.720107 +v -5.015090 0.349401 4.628780 +v -5.007237 0.348454 4.630460 +v -5.047234 -0.002953 4.620979 +v -5.055087 -0.002007 4.619299 +v -4.456066 0.001491 4.741234 +v -4.451810 0.002774 4.747990 +v -5.017452 0.350077 4.613909 +v -5.019146 0.350056 4.621816 +v -5.059143 -0.001352 4.612335 +v -5.057448 -0.001331 4.604428 +v -4.468131 -0.000270 4.758251 +v -4.472385 -0.001553 4.751496 +v -4.548044 0.342735 4.719251 +v -4.554699 0.341506 4.723676 +v -4.975590 0.421652 4.638143 +v -4.978234 0.425454 4.631514 +v -4.962585 0.412305 4.626990 +v -4.964324 0.412185 4.634886 +v -4.969782 0.416156 4.639339 +v -4.942821 0.434055 4.625853 +v -4.989240 0.400566 4.634727 +v -4.996706 0.403231 4.633138 +v -4.982584 0.398640 4.630557 +v -4.965228 0.416106 4.620360 +v -4.984671 0.400542 4.615752 +v -4.980881 0.398698 4.622653 +v -4.976494 0.425574 4.623618 +v -5.000496 0.405075 4.626236 +v -4.998794 0.405133 4.618332 +v -4.971037 0.421603 4.619164 +v -4.999537 0.372464 4.612228 +v -4.995569 0.371267 4.619171 +v -5.015800 0.375406 4.622609 +v -5.014102 0.375443 4.614703 +v -4.992137 0.403207 4.614162 +v -5.007261 0.374194 4.610578 +v -5.010517 0.349392 4.609806 +v -5.011832 0.374209 4.629552 +v -4.997266 0.371230 4.627077 +v -4.998609 0.347791 4.618451 +v -5.000303 0.347770 4.626357 +v -5.004107 0.372479 4.631202 +v -5.038606 -0.003617 4.608970 +v -5.040300 -0.003637 4.616876 +v -4.460497 0.001507 4.760242 +v -4.463698 -0.000286 4.739244 +v -5.002665 0.348446 4.611486 +v -5.042662 -0.002962 4.602005 +v -4.462098 0.000611 4.749743 +v -4.470353 -0.001514 4.743670 +v -4.453842 0.002736 4.755816 +v -5.048874 -0.002484 4.610653 +v -5.050514 -0.002015 4.600325 +vn 0.9730 -0.0000 0.2307 +vn 0.2307 -0.0000 -0.9730 +vn -0.0000 -1.0000 -0.0000 +vn -0.2307 -0.0000 0.9730 +vn -0.9730 -0.0000 -0.2307 +vn -0.1159 0.9929 -0.0275 +vn 0.2565 -0.9646 0.0608 +vn 0.4152 -0.9044 0.0984 +vn 0.3292 -0.0911 0.9398 +vn 0.1579 -0.9868 0.0374 +vn -0.1668 0.9852 -0.0395 +vn 0.6911 -0.0779 -0.7185 +vn 0.8254 -0.1146 -0.5529 +vn 0.4493 -0.0987 0.8879 +vn 0.5998 -0.7874 0.1422 +vn 0.7790 -0.5992 0.1847 +vn -0.9702 0.0768 -0.2300 +vn 0.9702 -0.0768 0.2300 +vn 0.2914 -0.2916 -0.9111 +vn 0.1787 0.5027 -0.8458 +vn -0.9684 0.1047 -0.2262 +vn -0.9659 0.1119 -0.2333 +vn -0.9664 0.1062 -0.2340 +vn 0.9419 -0.0656 -0.3294 +vn 0.2373 0.4967 -0.8349 +vn -0.9707 0.0768 -0.2276 +vn -0.8215 -0.5359 -0.1947 +vn -0.2250 0.5287 0.8185 +vn 0.1364 -0.6113 -0.7796 +vn -0.5079 -0.8531 -0.1192 +vn -0.8243 -0.5326 -0.1921 +vn -0.8243 -0.5337 -0.1889 +vn -0.8242 -0.5315 -0.1954 +vn -0.1158 0.9931 -0.0180 +vn -0.1491 0.9648 0.2164 +vn -0.1522 0.9584 0.2416 +vn -0.1740 -0.8811 0.4397 +vn 0.1246 -0.8634 0.4888 +vn 0.5514 -0.7743 0.3105 +vn -0.2319 -0.5705 0.7878 +vn 0.7050 -0.3669 0.6070 +vn 0.6507 -0.3997 0.6456 +vn 0.9715 -0.0465 0.2326 +vn -0.9678 0.1108 -0.2261 +vn -0.9679 0.1116 -0.2252 +vn 0.9711 -0.0794 0.2252 +vn -0.1573 0.5223 0.8381 +vn 0.9736 -0.0401 0.2246 +vn -0.9677 0.1101 -0.2269 +vn 0.9731 -0.0584 0.2227 +vn 0.6310 -0.7742 -0.0495 +vn 0.9709 -0.0813 0.2252 +vn 0.9693 -0.0847 0.2307 +vn 0.9729 -0.0769 0.2183 +vn 0.1816 0.8588 -0.4790 +vn 0.0127 0.9633 0.2681 +vn 0.0729 0.9970 0.0254 +vn 0.0125 0.9630 0.2691 +vn 0.0432 0.8610 -0.5068 +vn -0.9695 0.0845 -0.2302 +vn -0.9710 0.0831 -0.2240 +vn -0.9716 0.0796 -0.2229 +vn -0.9728 0.0778 -0.2183 +vn 0.0438 -0.8773 -0.4779 +vn -0.0151 -0.9658 -0.2590 +vn -0.9677 0.0880 -0.2363 +vn 0.9675 -0.0886 0.2368 +vn -0.0488 0.8673 0.4954 +vn -0.1760 0.8695 0.4614 +vn -0.9702 0.0744 -0.2306 +vn -0.9713 0.0849 -0.2221 +vn -0.0731 -0.9970 -0.0248 +vn 0.9700 -0.0732 0.2318 +vn -0.9700 0.0723 -0.2322 +vn -0.0000 1.0000 -0.0000 +vn -0.1595 0.7224 0.6728 +vn -0.1556 0.7268 0.6689 +vn -0.1556 0.7269 0.6689 +vn -0.2305 -0.0225 0.9728 +vn -0.2309 -0.0215 0.9728 +vn -0.2369 -0.0204 0.9713 +vn 0.2306 0.0218 -0.9728 +vn 0.2293 0.0219 -0.9731 +vn 0.2292 0.0219 -0.9731 +vn 0.0730 0.6937 -0.7165 +vn 0.0050 -0.9998 -0.0212 +vn -0.0050 0.9998 0.0213 +vn 0.1666 0.6915 -0.7029 +vn 0.1683 0.6962 -0.6978 +vn 0.1683 0.6962 -0.6979 +vn 0.0009 0.9997 0.0224 +vn -0.1666 -0.6915 0.7029 +vn 0.2421 -0.7257 -0.6440 +vn -0.1383 0.9903 -0.0109 +vn -0.0835 -0.6955 0.7137 +vn 0.1595 -0.7223 -0.6729 +vn 0.2306 0.0221 -0.9728 +vn 0.1699 0.7008 -0.6928 +vn 0.0269 -0.9995 -0.0153 +vn 0.2372 0.0214 -0.9712 +vn 0.2309 0.0224 -0.9727 +vn -0.3743 -0.6683 0.6429 +vn -0.0623 -0.6972 -0.7142 +vn -0.2887 -0.9532 -0.0902 +vn 0.2437 0.0183 -0.9697 +vn 0.2381 0.0214 -0.9710 +vn 0.0069 0.9997 0.0235 +vn 0.1688 -0.7326 -0.6594 +vn -0.1518 0.7313 0.6650 +vn -0.1528 -0.7022 0.6954 +vn 0.2489 0.0132 -0.9684 +vn 0.2446 0.0178 -0.9694 +vn -0.2432 -0.0175 0.9698 +vn -0.2377 -0.0205 0.9711 +vn -0.2439 -0.0172 0.9696 +vn -0.2482 -0.0124 0.9686 +vn 0.5861 0.5509 -0.5941 +vn 0.2825 0.5748 0.7680 +vn 0.3208 0.9421 0.0979 +vn 0.0780 0.6901 0.7195 +vn 0.3901 0.6614 -0.6406 +vn -0.2485 -0.0119 0.9686 +vn -0.2499 -0.0090 0.9682 +vn 0.7368 0.3812 -0.5584 +vn 0.4397 0.3978 0.8052 +vn 0.8136 0.5403 0.2147 +vn -0.5728 -0.8044 -0.1575 +vn -0.2699 -0.5868 -0.7634 +vn -0.5733 -0.5625 0.5958 +vn 0.5997 0.7833 0.1639 +vn 0.8875 0.3980 0.2325 +vn -0.7869 -0.2790 0.5504 +vn -0.4906 -0.2912 -0.8213 +vn -0.8864 -0.4005 -0.2322 +vn 0.2505 0.0092 -0.9681 +vn 0.2491 0.0122 -0.9684 +vn -0.7949 -0.5692 -0.2102 +vn -0.4316 -0.4135 -0.8017 +vn -0.7283 -0.3964 0.5590 +vn -0.2095 -0.0027 0.9778 +vn -0.2095 -0.0025 0.9778 +vn 0.8191 0.1694 -0.5481 +vn -0.9712 0.1162 -0.2078 +vn -0.8191 -0.1695 0.5481 +vn 0.4911 0.2899 0.8215 +vn 0.7874 0.2777 -0.5504 +vn -0.2494 -0.0080 0.9684 +vn -0.2504 -0.0055 0.9681 +vn 0.2512 0.0054 -0.9679 +vn 0.2508 0.0070 -0.9680 +vn -0.1130 0.6472 -0.7539 +vn -0.4438 0.6748 0.5897 +vn 0.3477 -0.9356 0.0612 +vn -0.2276 -0.0216 0.9735 +vn -0.2224 -0.0207 0.9747 +vn -0.2167 -0.0182 0.9761 +vn -0.2217 -0.0205 0.9749 +vn -0.2532 0.7239 0.6418 +vn 0.2274 0.0227 -0.9735 +vn 0.2222 0.0218 -0.9747 +vn 0.1167 -0.9932 0.0059 +vn -0.2278 -0.0222 0.9735 +vn -0.6303 0.5630 0.5346 +vn 0.5744 -0.8103 0.1160 +vn -0.2121 -0.0112 0.9772 +vn -0.2157 -0.0173 0.9763 +vn 0.2656 -0.5801 0.7700 +vn 0.2215 0.0211 -0.9749 +vn 0.2164 0.0187 -0.9761 +vn -0.4017 0.9128 -0.0737 +vn 0.4164 -0.6896 -0.5925 +vn 0.0881 -0.6617 0.7446 +vn 0.4342 -0.3366 0.8356 +vn 0.7818 -0.3512 -0.5152 +vn -0.8645 0.4682 -0.1830 +vn 0.2117 0.0114 -0.9773 +vn 0.2154 0.0175 -0.9764 +vn 0.2112 0.0104 -0.9774 +vn 0.2094 0.0032 -0.9778 +vn -0.2971 0.5405 -0.7871 +vn -0.6520 0.7463 -0.1336 +vn 0.5928 -0.6033 -0.5335 +vn -0.9690 0.1344 -0.2073 +vn 0.2096 0.0027 -0.9778 +vn -0.5010 0.0928 -0.8605 +vn -0.5014 0.0866 -0.8609 +vn -0.5013 0.0866 -0.8609 +vn -0.8565 0.0969 0.5070 +vn -0.8571 0.0905 0.5072 +vn -0.8571 0.0904 0.5072 +vn -0.2104 -0.0030 0.9776 +vn -0.2121 -0.0100 0.9772 +vn 0.8572 -0.4821 0.1814 +vn -0.7850 0.3437 0.5153 +vn -0.4369 0.3294 -0.8370 +vn 0.9713 -0.1162 0.2078 +vn -0.2512 -0.0053 0.9679 +vn 0.8572 -0.0898 -0.5072 +vn 0.8576 -0.0839 -0.5074 +vn 0.2511 0.0053 -0.9679 +vn 0.8567 -0.0956 -0.5070 +vn 0.5010 -0.0916 0.8606 +vn 0.5014 -0.0860 0.8609 +vn 0.5014 -0.0859 0.8609 +vn 0.9693 -0.1319 0.2073 +vn 0.2138 -0.9756 0.0507 +vn 0.2139 -0.9756 0.0506 +vn -0.1139 -0.9931 -0.0270 +vn -0.1139 -0.9931 -0.0271 +vn -0.1140 -0.9931 -0.0270 +vn -0.5221 -0.1770 -0.8343 +vn 0.2096 0.0025 -0.9778 +vn 0.5221 0.1770 0.8343 +vn 0.5017 -0.0803 0.8613 +vn -0.9381 -0.2449 -0.2448 +vn -0.5017 0.0803 -0.8613 +vn 0.9381 0.2449 0.2448 +vn -0.8576 0.0839 0.5074 +vn -0.2306 -0.0221 0.9728 +vn -0.2309 -0.0224 0.9727 +vn -0.2373 -0.0214 0.9712 +vn -0.0835 -0.6956 0.7136 +vn -0.2293 -0.0219 0.9731 +vn -0.2292 -0.0219 0.9731 +vn -0.2222 -0.0218 0.9748 +vn -0.2273 -0.0228 0.9736 +vn 0.2305 0.0224 -0.9728 +vn 0.2373 0.0214 -0.9712 +vn -0.2306 -0.0218 0.9728 +vn -0.3743 -0.6683 0.6428 +vn -0.1528 -0.7023 0.6953 +vn -0.2437 -0.0183 0.9697 +vn -0.2381 -0.0214 0.9710 +vn -0.2446 -0.0178 0.9695 +vn -0.2489 -0.0131 0.9684 +vn -0.2491 -0.0123 0.9684 +vn -0.2504 -0.0092 0.9681 +vn -0.5733 -0.5626 0.5957 +vn 0.5997 0.7833 0.1640 +vn 0.7874 0.2777 -0.5503 +vn -0.7870 -0.2790 0.5503 +vn 0.2505 0.0091 -0.9681 +vn 0.2491 0.0123 -0.9684 +vn -0.7283 -0.3964 0.5589 +vn -0.2096 -0.0027 0.9778 +vn -0.2096 -0.0025 0.9778 +vn 0.8191 0.1695 -0.5481 +vn -0.2507 -0.0070 0.9680 +vn -0.2516 -0.0057 0.9678 +vn 0.2512 0.0055 -0.9679 +vn -0.2164 -0.0187 0.9761 +vn -0.2215 -0.0210 0.9749 +vn 0.0882 -0.6618 0.7445 +vn 0.2278 0.0221 -0.9735 +vn 0.2222 0.0218 -0.9748 +vn -0.2117 -0.0114 0.9773 +vn -0.2154 -0.0176 0.9764 +vn 0.2657 -0.5802 0.7699 +vn -0.8645 0.4682 -0.1831 +vn 0.9693 -0.1319 0.2074 +vn -0.2112 -0.0104 0.9774 +vn -0.2094 -0.0032 0.9778 +vn 0.4343 -0.3367 0.8355 +vn 0.8571 -0.4821 0.1814 +vn 0.9712 -0.1162 0.2078 +vn -0.2511 -0.0053 0.9679 +vn 0.5012 -0.0916 0.8605 +vn 0.5015 -0.0860 0.8609 +vn 0.5015 -0.0859 0.8609 +vn 0.5018 -0.0803 0.8612 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt 0.686647 0.000000 +vt 0.870176 0.996278 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.782584 0.965408 +vt 0.870573 0.970227 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.833010 0.965282 +vt 0.908785 0.026051 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.968598 0.070112 +vt 0.979071 0.026051 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.968598 0.371019 +vt 0.757324 0.262250 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.173427 0.241164 +vt 0.758439 0.080128 +vt -0.973130 0.033128 +vt -0.123087 0.241439 +vt 0.978437 0.000000 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt 0.737072 0.000128 +vt 0.908263 0.000000 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.409642 -0.009898 +vt 0.677629 0.482142 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.240570 0.058726 +vt 0.669677 0.481452 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.786789 0.246652 +vt 0.991724 0.699406 +vt 0.928489 0.277215 +vt 0.873308 0.505274 +vt 0.786789 0.155990 +vt 0.958960 0.029326 +vt 0.991724 0.483440 +vt 0.977373 0.702462 +vt -0.140978 0.246673 +vt 0.958492 0.010078 +vt -0.156145 0.246590 +vt 0.929566 0.080357 +vt -0.144664 0.252235 +vt 0.984385 0.731379 +vt 0.945934 0.020741 +vt -0.159831 0.252152 +vt 0.984385 0.500820 +vt 0.989649 0.087406 +vt 0.706860 0.007022 +vt 0.847263 0.989602 +vt 0.686599 0.714388 +vt 0.721837 0.007060 +vt 0.884682 0.006674 +vt 0.720919 0.017861 +vt 0.673632 0.527027 +vt 0.872079 0.017335 +vt 0.705942 0.017823 +vt 0.673632 0.731676 +vt 0.690157 0.523535 +vt 0.802894 0.958412 +vt 0.847659 0.963551 +vt 0.695298 0.714388 +vt 0.661237 0.495044 +vt 0.817871 0.958374 +vt 0.885205 0.032725 +vt 0.661237 0.722645 +vt 0.693293 0.503638 +vt 0.944329 0.029337 +vt 0.981154 0.731379 +vt 0.977373 0.486830 +vt 0.989649 0.263822 +vt 0.873305 0.723869 +vt 0.981154 0.500820 +vt 0.870573 0.032734 +vt 0.693293 0.761173 +vt 0.679412 0.527027 +vt 0.695298 0.493838 +vt 0.679412 0.731676 +vt 0.826600 0.493835 +vt 0.826977 0.731673 +vt 0.826600 0.714385 +vt 0.814491 0.495042 +vt 0.122435 0.638558 +vt 0.015922 0.839080 +vt 0.835047 0.699404 +vt 0.993361 0.510073 +vt 0.758428 0.504317 +vt 0.072861 0.638558 +vt 0.015474 0.619132 +vt 0.835047 0.483438 +vt 0.845328 0.702461 +vt 0.015197 0.626266 +vt 0.014109 0.491099 +vt 0.993356 0.728667 +vt 0.758425 0.722912 +vt 0.833436 0.500823 +vt 0.891028 0.725398 +vt 0.672547 0.500827 +vt 0.752235 0.729690 +vt 0.667246 0.727168 +vt 0.891033 0.506802 +vt 0.752238 0.507120 +vt 0.071993 0.783837 +vt 0.969610 0.493832 +vt 0.987699 0.731670 +vt 0.641343 0.509140 +vt 0.689355 0.726560 +vt 0.969610 0.714382 +vt 0.122436 0.783837 +vt 0.641344 0.743247 +vt 0.833436 0.731382 +vt 0.845328 0.486829 +vt 0.814491 0.722643 +vt 0.825052 0.503733 +vt 0.016195 0.832047 +vt 0.634466 0.494220 +vt 0.825052 0.761267 +vt 0.826977 0.527024 +vt 0.022424 0.783234 +vt 0.035852 0.889154 +vt 0.043016 0.971597 +vt 0.706398 0.505224 +vt 0.072863 0.808180 +vt 0.028940 0.807392 +vt 0.010039 0.882150 +vt 0.137154 0.974703 +vt 0.631023 0.892124 +vt 0.649326 0.890699 +vt 0.121379 0.984023 +vt 0.648470 0.892315 +vt 0.072864 0.783142 +vt 0.043889 0.943476 +vt 0.078385 0.805896 +vt 0.075977 0.941215 +vt 0.613560 0.946909 +vt 0.672547 0.731385 +vt 0.701510 0.486829 +vt 0.669481 0.490576 +vt 0.072863 0.646796 +vt 0.648470 0.506013 +vt 0.080915 0.841605 +vt 0.968560 0.503835 +vt 0.102906 0.865583 +vt 0.634467 0.887149 +vt 0.987699 0.527021 +vt 0.968560 0.761369 +vt 0.690090 0.495972 +vt 0.701510 0.702461 +vt 0.603150 0.865583 +vt 0.014109 0.884028 +vt 0.706395 0.729929 +vt 0.816556 0.714481 +vt 0.023239 0.646888 +vt 0.040534 0.495932 +vt 0.081188 0.621686 +vt 0.007711 0.495744 +vt 0.041481 0.497122 +vt 0.080911 0.628820 +vt 0.003028 0.888966 +vt 0.041481 0.887645 +vt 0.060838 0.971173 +vt 0.631023 0.505822 +vt 0.649326 0.500176 +vt 0.081188 0.834572 +vt 0.805889 0.743046 +vt 0.122312 0.806766 +vt 0.988155 0.503653 +vt 0.115555 0.935422 +vt 0.904138 0.912557 +vt 0.988155 0.735605 +vt 0.813022 0.494763 +vt 0.890960 0.912565 +vt 0.735836 0.641861 +vt 0.693936 0.468644 +vt 0.027417 0.833361 +vt 0.420996 0.961603 +vt 0.032040 0.784613 +vt 0.284612 0.483847 +vt 0.656925 0.504187 +vt 0.681549 0.720168 +vt 0.066750 0.834450 +vt 0.299225 0.449509 +vt 0.999708 0.720167 +vt 0.989627 0.743247 +vt 0.121899 0.832034 +vt 0.693936 0.449159 +vt 0.420996 0.999935 +vt 0.008277 0.862094 +vt 0.082562 0.831201 +vt 0.741580 0.718717 +vt 0.678836 0.505353 +vt 0.815743 0.487362 +vt 0.741523 0.585977 +vt 0.678836 0.699564 +vt 0.553315 0.945729 +vt 0.982243 0.588758 +vt 0.460393 1.018433 +vt 0.949871 0.788878 +vt 0.982305 0.727355 +vt 0.668954 0.502598 +vt 0.949657 0.691167 +vt 0.979056 0.490574 +vt 0.078628 0.952623 +vt 0.035428 0.887064 +vt 0.812426 0.730862 +vt 0.971935 0.642457 +vt 0.805889 0.532195 +vt 0.173975 1.012235 +vt 0.908785 0.976444 +vt 0.726484 0.788878 +vt 0.984477 0.500479 +vt 0.894591 0.976453 +vt 0.737043 0.505375 +vt 0.726270 0.691167 +vt 0.987420 0.694407 +vt 0.999899 0.506981 +vt 0.968797 0.500648 +vt 0.989626 0.516135 +vt 0.652223 0.697892 +vt 0.656922 0.730164 +vt 0.681740 0.506981 +vt 0.985798 0.713641 +vt 0.053549 0.993732 +vt 0.043551 0.873068 +vt 0.522988 0.991572 +vt 0.062665 0.961706 +vt 0.169656 0.991799 +vt 0.060838 0.809705 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +s 1 +usemtl CabnetDoors +f 10744/22306/8024 10745/22310/8024 10746/22315/8024 10747/22319/8024 10748/22323/8024 10749/22329/8024 10750/22332/8024 10751/22335/8024 +f 10749/22328/8025 10748/22324/8025 10752/22339/8025 10753/22342/8025 +f 10754/22344/8026 10755/22348/8026 10756/22350/8026 10757/22351/8026 +f 10758/22355/8027 10759/22356/8027 10745/22311/8027 10744/22305/8027 +f 10759/22357/8028 10758/22354/8028 10760/22359/8028 10761/22360/8028 +f 10762/22362/8028 10763/22365/8028 10760/22359/8028 10758/22354/8028 +f 10762/22363/8027 10758/22355/8027 10744/22305/8027 10764/22367/8027 +f 10757/22352/8025 10749/22328/8025 10753/22342/8025 10754/22345/8025 +f 10764/22368/8024 10744/22306/8024 10751/22335/8024 10750/22332/8024 10749/22329/8024 10757/22353/8024 10756/22349/8024 10765/22371/8024 +f 10747/22320/8029 10748/22325/8029 10766/22374/8029 10767/22378/8029 +f 10757/22353/8024 10756/22349/8024 10750/22332/8024 10749/22329/8024 +f 10751/22336/8028 10744/22307/8028 10764/22369/8028 10765/22372/8028 +f 10749/22330/8030 10750/22333/8030 10768/22382/8030 10769/22384/8030 +f 10769/22384/8031 10768/22382/8031 10770/22386/8031 10771/22389/8031 +f 10772/22392/8031 10775/22400/8031 10774/22397/8031 10773/22395/8031 +f 10750/22334/8032 10747/22321/8032 10767/22379/8032 10768/22383/8032 +f 10744/22308/8033 10772/22392/8033 10773/22395/8033 10751/22337/8033 +f 10746/22316/8034 10777/22407/8034 10776/22403/8034 10745/22312/8034 +f 10751/22338/8035 10773/22396/8035 10777/22408/8035 10746/22317/8035 +f 10748/22326/8036 10749/22331/8036 10769/22385/8036 10766/22376/8036 +f 10745/22313/8037 10776/22404/8037 10772/22393/8037 10744/22309/8037 +f 10771/22390/8038 10770/22387/8038 10778/22412/8038 10779/22416/8038 +f 10780/22419/8039 10774/22398/8039 10775/22401/8039 10781/22421/8039 +f 10776/22405/8027 10783/22424/8027 10782/22422/8027 10781/22420/8027 +f 10768/22383/8027 10767/22379/8027 10778/22411/8027 10770/22388/8027 +f 10767/22380/8040 10766/22375/8040 10784/22428/8040 10785/22433/8040 +f 10776/22405/8027 10781/22420/8027 10775/22402/8027 10772/22394/8027 +f 10766/22376/8025 10769/22385/8025 10771/22391/8025 10779/22414/8025 +f 10773/22396/8025 10774/22399/8025 10780/22417/8025 10777/22408/8025 +f 10784/22429/8025 10786/22437/8025 10787/22440/8025 10788/22444/8025 +f 10783/22424/8027 10790/22451/8027 10789/22447/8027 10782/22422/8027 +f 10766/22377/8025 10779/22415/8025 10786/22438/8025 10784/22430/8025 +f 10779/22416/8041 10778/22412/8041 10791/22454/8041 10786/22439/8041 +f 10777/22409/8040 10792/22456/8040 10783/22425/8040 10776/22406/8040 +f 10780/22418/8025 10793/22460/8025 10792/22457/8042 10777/22410/8025 +f 10781/22421/8041 10782/22423/8041 10793/22461/8041 10780/22419/8041 +f 10778/22413/8027 10767/22381/8027 10785/22434/8027 10791/22455/8027 +f 10794/22462/8043 10788/22446/8043 10795/22466/8043 10796/22467/8043 +f 10797/22469/8044 10800/22477/8045 10799/22475/8046 10798/22472/8046 +f 10786/22439/8041 10791/22454/8041 10801/22479/8041 10787/22441/8041 +f 10783/22426/8027 10802/22482/8027 10798/22474/8027 10790/22452/8027 +f 10793/22460/8025 10804/22489/8025 10803/22485/8047 10792/22457/8042 +f 10791/22455/8027 10785/22434/8027 10805/22491/8027 10801/22480/8027 +f 10782/22423/8041 10789/22448/8041 10804/22488/8041 10793/22461/8041 +f 10788/22445/8048 10787/22442/8048 10806/22494/8048 10795/22465/8048 +f 10784/22431/8025 10788/22446/8025 10794/22462/8025 10807/22496/8025 +f 10808/22499/8049 10807/22497/8040 10794/22463/8040 10809/22502/8049 +f 10810/22505/8049 10797/22470/8049 10798/22473/8040 10802/22483/8040 +f 10808/22500/8049 10809/22503/8049 10797/22471/8049 10810/22506/8049 +f 10792/22458/8050 10810/22507/8050 10802/22484/8050 10783/22427/8050 +f 10798/22474/8051 10799/22476/8051 10811/22509/8051 10790/22452/8051 +f 10804/22489/8052 10813/22513/8052 10812/22510/8052 10803/22485/8052 +f 10785/22435/8053 10808/22501/8054 10810/22507/8055 10792/22458/8042 +f 10785/22435/8053 10784/22432/8056 10807/22498/8056 10808/22501/8054 +f 10814/22517/8057 10815/22521/8057 10816/22525/8058 10817/22529/8059 +f 10818/22533/8060 10819/22536/8061 10820/22539/8062 10821/22542/8060 +f 10801/22480/8063 10805/22491/8064 10819/22537/8065 10818/22534/8063 +f 10787/22443/8066 10801/22481/8066 10818/22535/8066 10806/22495/8066 +f 10809/22503/8067 10822/22546/8068 10800/22478/8045 10797/22471/8044 +f 10803/22486/8047 10812/22511/8069 10819/22538/8065 10805/22492/8064 +f 10790/22453/8070 10811/22508/8070 10823/22550/8070 10789/22449/8070 +f 10789/22450/8071 10823/22548/8071 10813/22514/8071 10804/22490/8071 +f 10809/22504/8067 10794/22464/8072 10796/22468/8072 10822/22547/8068 +f 10812/22511/8073 10824/22551/8074 10820/22540/8062 10819/22538/8061 +f 10825/22554/8075 10826/22558/8076 10827/22562/8077 10821/22543/8077 +f 10795/22465/8078 10806/22494/8078 10827/22563/8078 10815/22522/8078 +f 10816/22526/8079 10815/22523/8080 10827/22564/8080 10826/22559/8081 +f 10796/22467/8082 10795/22466/8082 10815/22524/8082 10814/22518/8082 +f 10817/22530/8083 10828/22566/8084 10829/22569/8085 10814/22519/8086 +f 10813/22515/8087 10825/22555/8088 10824/22552/8074 10812/22512/8087 +f 10800/22477/8089 10828/22567/8084 10817/22531/8083 10799/22475/8089 +f 10823/22549/8090 10826/22560/8076 10825/22556/8075 10813/22516/8090 +f 10811/22508/8091 10816/22527/8079 10826/22561/8081 10823/22550/8091 +f 10799/22476/8092 10817/22532/8059 10816/22528/8058 10811/22509/8092 +f 10822/22546/8093 10829/22570/8085 10828/22568/8084 10800/22478/8094 +f 10825/22557/8088 10821/22544/8095 10820/22541/8062 10824/22553/8074 +f 10806/22495/8096 10818/22535/8096 10821/22545/8096 10827/22565/8096 +f 10822/22547/8093 10796/22468/8097 10814/22520/8097 10829/22571/8085 +f 10761/22360/8028 10760/22359/8028 10830/22572/8028 10831/22573/8028 +f 10753/22343/8028 10752/22340/8028 10831/22573/8028 10830/22572/8028 +f 10830/22572/8028 10760/22359/8028 10763/22365/8028 10755/22347/8028 +f 10755/22347/8028 10754/22346/8028 10753/22343/8028 10830/22572/8028 +f 10759/22358/8098 10761/22361/8098 10746/22318/8098 10745/22314/8098 +f 10747/22322/8098 10831/22574/8098 10752/22341/8098 10748/22327/8098 +f 10746/22318/8098 10761/22361/8098 10831/22574/8098 10747/22322/8098 +f 10765/22373/8026 10763/22366/8026 10762/22364/8026 10764/22370/8026 +f 10756/22350/8026 10755/22348/8026 10763/22366/8026 10765/22373/8026 +f 10805/22493/8064 10785/22436/8053 10792/22459/8042 10803/22487/8047 +f 10832/22575/8099 10833/22576/8099 10834/22577/8100 10835/22579/8101 +f 10836/22580/8102 10835/22578/8102 10837/22583/8103 10838/22585/8104 +f 10839/22587/8105 10840/22588/8105 10841/22589/8106 10842/22591/8107 +f 10841/22589/8108 10843/22592/8108 10844/22594/8108 10845/22596/8108 +f 10846/22598/8109 10847/22599/8109 10848/22600/8109 10849/22602/8109 +f 10850/22604/8110 10833/22576/8110 10851/22605/8110 10843/22593/8110 +f 10840/22588/8111 10850/22603/8111 10843/22592/8111 10841/22589/8111 +f 10852/22606/8112 10853/22607/8113 10850/22603/8111 10840/22588/8111 +f 10853/22608/8114 10834/22577/8114 10833/22576/8110 10850/22604/8110 +f 10854/22609/8115 10846/22597/8115 10849/22601/8115 10855/22610/8115 +f 10836/22581/8115 10856/22613/8115 10846/22597/8115 10854/22609/8115 +f 10856/22612/8109 10857/22614/8109 10847/22599/8109 10846/22598/8109 +f 10848/22600/8116 10842/22590/8116 10858/22616/8116 10859/22617/8116 +f 10843/22593/8117 10851/22605/8117 10860/22618/8117 10844/22595/8117 +f 10855/22610/8118 10849/22601/8118 10861/22620/8118 10862/22622/8118 +f 10847/22599/8119 10839/22586/8119 10842/22590/8119 10848/22600/8119 +f 10857/22614/8119 10863/22624/8119 10839/22586/8119 10847/22599/8119 +f 10863/22623/8120 10852/22606/8120 10840/22588/8105 10839/22587/8105 +f 10853/22607/8113 10852/22606/8112 10864/22625/8121 10865/22627/8121 +f 10857/22614/8122 10856/22612/8122 10866/22628/8122 10867/22630/8122 +f 10852/22606/8120 10863/22623/8120 10868/22631/8123 10864/22625/8124 +f 10869/22633/8099 10851/22605/8099 10833/22576/8099 10832/22575/8099 +f 10866/22629/8125 10838/22584/8125 10870/22636/8125 10871/22638/8125 +f 10868/22632/8126 10867/22630/8126 10872/22639/8126 10873/22641/8126 +f 10867/22630/8127 10866/22628/8127 10871/22637/8127 10872/22639/8127 +f 10864/22625/8124 10868/22631/8123 10873/22642/8128 10874/22643/8129 +f 10834/22577/8114 10853/22608/8114 10865/22626/8130 10875/22644/8130 +f 10863/22624/8131 10857/22614/8131 10867/22630/8131 10868/22632/8131 +f 10835/22579/8101 10834/22577/8100 10875/22644/8132 10837/22582/8132 +f 10856/22613/8133 10836/22581/8133 10838/22584/8133 10866/22629/8133 +f 10874/22643/8129 10873/22642/8128 10876/22645/8134 10877/22646/8135 +f 10870/22636/8136 10878/22647/8137 10879/22650/8138 10880/22651/8139 +f 10881/22652/8140 10874/22643/8140 10877/22646/8140 10882/22654/8140 +f 10878/22647/8141 10883/22657/8141 10884/22659/8141 10879/22650/8141 +f 10875/22644/8142 10865/22626/8142 10881/22653/8142 10883/22658/8142 +f 10837/22582/8143 10875/22644/8143 10883/22658/8143 10878/22648/8143 +f 10865/22627/8144 10864/22625/8144 10874/22643/8144 10881/22652/8144 +f 10838/22585/8104 10837/22583/8103 10878/22649/8137 10870/22635/8136 +f 10880/22651/8139 10879/22650/8138 10885/22663/8145 10886/22664/8146 +f 10882/22654/8147 10877/22646/8147 10887/22665/8147 10888/22667/8147 +f 10879/22650/8148 10884/22659/8148 10889/22668/8148 10885/22663/8148 +f 10884/22660/8149 10882/22655/8149 10888/22666/8149 10889/22669/8149 +f 10872/22639/8150 10871/22637/8150 10890/22670/8150 10891/22673/8150 +f 10873/22642/8151 10872/22640/8151 10891/22675/8151 10876/22645/8151 +f 10871/22638/8152 10870/22636/8152 10880/22651/8152 10890/22672/8152 +f 10883/22658/8153 10881/22653/8153 10882/22656/8153 10884/22661/8153 +f 10889/22669/8154 10888/22666/8154 10892/22677/8154 10893/22678/8154 +f 10894/22680/8155 10886/22664/8155 10895/22681/8155 10896/22682/8155 +f 10897/22684/8156 10898/22686/8156 10899/22688/8156 10900/22690/8156 +f 10898/22686/8157 10894/22679/8157 10896/22683/8157 10899/22688/8157 +f 10877/22646/8135 10876/22645/8134 10897/22685/8158 10887/22665/8159 +f 10891/22674/8160 10890/22671/8160 10894/22679/8160 10898/22686/8160 +f 10876/22645/8161 10891/22675/8161 10898/22687/8161 10897/22685/8161 +f 10890/22672/8162 10880/22651/8162 10886/22664/8162 10894/22680/8162 +f 10901/22691/8163 10902/22693/8163 10903/22695/8164 10904/22696/8164 +f 10892/22676/8165 10905/22699/8165 10906/22700/8165 10907/22702/8165 +f 10908/22705/8166 10909/22707/8166 10910/22709/8166 10911/22710/8166 +f 10896/22682/8167 10895/22681/8167 10912/22713/8167 10913/22715/8167 +f 10885/22662/8168 10889/22669/8168 10893/22678/8168 10914/22719/8168 +f 10888/22667/8169 10887/22665/8169 10905/22699/8169 10892/22676/8169 +f 10886/22664/8146 10885/22663/8145 10914/22718/8170 10895/22681/8171 +f 10887/22665/8159 10897/22685/8158 10900/22689/8172 10905/22699/8173 +f 10845/22596/8174 10844/22594/8174 10915/22720/8174 10916/22722/8174 +f 10860/22618/8175 10917/22723/8175 10918/22725/8175 10919/22729/8175 +f 10861/22619/8176 10859/22617/8176 10920/22730/8176 10921/22732/8176 +f 10917/22724/8177 10862/22621/8178 10922/22734/8179 10918/22726/8180 +f 10851/22605/8181 10869/22633/8181 10917/22723/8181 10860/22618/8181 +f 10842/22591/8107 10841/22589/8106 10845/22596/8182 10858/22615/8183 +f 10849/22602/8184 10848/22600/8184 10859/22617/8184 10861/22619/8184 +f 10869/22634/8185 10855/22611/8185 10862/22621/8178 10917/22724/8177 +f 10919/22728/8186 10918/22727/8186 10923/22736/8186 10924/22739/8186 +f 10921/22732/8187 10920/22730/8187 10925/22740/8187 10926/22743/8187 +f 10918/22727/8180 10922/22735/8179 10927/22746/8188 10923/22736/8189 +f 10922/22735/8190 10921/22733/8190 10926/22744/8190 10927/22746/8190 +f 10858/22615/8183 10845/22596/8182 10916/22722/8191 10928/22748/8192 +f 10844/22595/8193 10860/22618/8193 10919/22729/8193 10915/22721/8193 +f 10859/22617/8194 10858/22616/8194 10928/22747/8194 10920/22730/8194 +f 10862/22622/8195 10861/22620/8195 10921/22733/8195 10922/22735/8195 +f 10927/22746/8196 10926/22744/8196 10929/22749/8196 10930/22751/8196 +f 10925/22741/8197 10931/22752/8197 10932/22753/8197 10933/22755/8197 +f 10934/22757/8198 10924/22737/8198 10935/22760/8198 10936/22762/8198 +f 10931/22752/8199 10937/22764/8200 10938/22765/8201 10932/22753/8202 +f 10916/22722/8203 10915/22720/8203 10934/22759/8203 10937/22764/8203 +f 10928/22748/8192 10916/22722/8191 10937/22764/8200 10931/22752/8199 +f 10915/22721/8204 10919/22729/8204 10924/22738/8204 10934/22758/8204 +f 10920/22731/8205 10928/22748/8205 10931/22752/8205 10925/22741/8205 +f 10936/22762/8206 10935/22760/8206 10909/22707/8206 10908/22705/8206 +f 10932/22753/8202 10938/22765/8201 10939/22766/8207 10940/22768/8207 +f 10938/22765/8208 10936/22763/8208 10908/22706/8209 10939/22766/8210 +f 10935/22760/8211 10941/22769/8211 10901/22692/8212 10909/22707/8213 +f 10923/22736/8189 10927/22746/8188 10930/22751/8214 10941/22770/8215 +f 10926/22745/8216 10925/22742/8216 10933/22756/8216 10929/22750/8216 +f 10924/22739/8217 10923/22736/8217 10941/22770/8217 10935/22761/8217 +f 10937/22764/8218 10934/22759/8218 10936/22763/8218 10938/22765/8218 +f 10942/22771/8219 10943/22773/8219 10944/22774/8219 10945/22776/8219 +f 10895/22681/8171 10914/22718/8170 10946/22779/8220 10912/22713/8220 +f 10943/22773/8221 10940/22767/8221 10947/22782/8222 10944/22774/8222 +f 10905/22699/8173 10900/22689/8172 10948/22785/8223 10906/22700/8223 +f 10933/22756/8224 10932/22754/8224 10940/22767/8221 10943/22773/8221 +f 10930/22751/8225 10929/22749/8225 10942/22772/8226 10902/22693/8227 +f 10941/22770/8215 10930/22751/8214 10902/22693/8163 10901/22691/8163 +f 10929/22750/8228 10933/22756/8228 10943/22773/8228 10942/22771/8228 +f 10949/22788/8229 10907/22703/8229 10906/22701/8229 10948/22786/8229 +f 10913/22716/8229 10949/22788/8229 10948/22786/8229 10950/22789/8229 +f 10912/22714/8230 10946/22780/8229 10949/22788/8229 10913/22716/8229 +f 10946/22780/8229 10951/22791/8229 10907/22703/8229 10949/22788/8229 +f 10952/22793/8231 10911/22711/8231 10910/22708/8232 10904/22697/8231 +f 10945/22777/8233 10952/22793/8231 10904/22697/8231 10903/22694/8231 +f 10944/22775/8233 10947/22783/8233 10952/22793/8231 10945/22777/8233 +f 10947/22783/8233 10953/22794/8233 10911/22711/8231 10952/22793/8231 +f 10900/22690/8234 10899/22688/8234 10950/22790/8234 10948/22787/8234 +f 10940/22768/8207 10939/22766/8207 10953/22795/8235 10947/22784/8235 +f 10914/22719/8236 10893/22678/8236 10951/22792/8236 10946/22781/8236 +f 10902/22693/8227 10942/22772/8226 10945/22778/8237 10903/22695/8237 +f 10899/22688/8238 10896/22683/8238 10913/22717/8238 10950/22790/8238 +f 10939/22766/8210 10908/22706/8209 10911/22712/8239 10953/22795/8239 +f 10893/22678/8240 10892/22677/8240 10907/22704/8240 10951/22792/8240 +f 10909/22707/8213 10901/22692/8212 10904/22698/8241 10910/22709/8241 +f 10954/22797/8099 10955/22798/8099 10956/22799/8100 10957/22801/8101 +f 10958/22802/8242 10957/22800/8242 10959/22804/8243 10960/22805/8244 +f 10961/22806/8116 10962/22808/8116 10963/22811/8116 10964/22813/8116 +f 10965/22815/8109 10966/22816/8109 10961/22807/8109 10967/22819/8109 +f 10968/22821/8110 10955/22798/8110 10969/22822/8110 10970/22823/8110 +f 10971/22825/8111 10968/22820/8111 10970/22824/8111 10972/22826/8111 +f 10973/22827/8111 10974/22828/8111 10968/22820/8111 10971/22825/8111 +f 10974/22829/8114 10956/22799/8114 10955/22798/8110 10968/22821/8110 +f 10975/22830/8115 10965/22814/8115 10967/22818/8115 10976/22831/8115 +f 10958/22802/8115 10977/22833/8115 10965/22814/8115 10975/22830/8115 +f 10977/22832/8109 10978/22834/8109 10966/22816/8109 10965/22815/8109 +f 10970/22823/8117 10969/22822/8117 10979/22836/8117 10980/22838/8117 +f 10976/22831/8245 10967/22818/8245 10981/22839/8245 10982/22841/8245 +f 10983/22842/8246 10976/22831/8247 10982/22841/8248 10984/22844/8249 +f 10966/22817/8119 10985/22846/8119 10962/22808/8119 10961/22806/8119 +f 10978/22835/8119 10986/22848/8119 10985/22846/8119 10966/22817/8119 +f 10974/22828/8121 10973/22827/8121 10987/22849/8121 10988/22851/8121 +f 10978/22834/8122 10977/22832/8122 10989/22852/8122 10990/22854/8122 +f 10973/22827/8250 10986/22847/8250 10991/22857/8251 10987/22849/8124 +f 10975/22830/8252 10954/22796/8252 10957/22800/8242 10958/22802/8242 +f 10976/22831/8247 10983/22842/8246 10954/22796/8252 10975/22830/8252 +f 10983/22843/8099 10969/22822/8099 10955/22798/8099 10954/22797/8099 +f 10992/22858/8142 10988/22850/8142 10993/22860/8142 10994/22862/8142 +f 10989/22853/8253 10960/22805/8253 10995/22864/8253 10996/22866/8253 +f 10991/22856/8126 10990/22855/8126 10997/22867/8126 10998/22870/8126 +f 10990/22854/8127 10989/22852/8127 10996/22865/8127 10997/22869/8127 +f 10956/22799/8114 10974/22829/8114 10988/22850/8130 10992/22858/8130 +f 10986/22848/8131 10978/22835/8131 10990/22855/8131 10991/22856/8131 +f 10957/22801/8101 10956/22799/8100 10992/22858/8132 10959/22803/8132 +f 10977/22833/8254 10958/22802/8254 10960/22805/8254 10989/22853/8254 +f 10998/22871/8151 10997/22868/8151 10999/22875/8151 11000/22876/8151 +f 10997/22869/8150 10996/22865/8150 11001/22877/8150 10999/22873/8150 +f 11002/22881/8129 10998/22871/8128 11000/22876/8134 11003/22882/8135 +f 10995/22864/8255 11004/22884/8256 11005/22885/8257 11006/22886/8258 +f 10959/22803/8143 10992/22858/8143 10994/22862/8143 11004/22883/8143 +f 10988/22851/8144 10987/22849/8144 11002/22880/8144 10993/22859/8144 +f 10960/22805/8244 10959/22804/8243 11004/22884/8256 10995/22864/8255 +f 10987/22849/8124 10991/22857/8251 10998/22872/8128 11002/22880/8129 +f 11006/22886/8258 11005/22885/8257 11007/22888/8259 11008/22889/8260 +f 11009/22892/8147 11003/22882/8147 11010/22893/8147 11011/22894/8147 +f 11005/22885/8148 11012/22898/8148 11013/22899/8148 11007/22888/8148 +f 11012/22896/8149 11009/22890/8149 11011/22895/8149 11013/22900/8149 +f 10996/22866/8261 10995/22864/8261 11006/22886/8261 11001/22879/8261 +f 10994/22862/8262 10993/22860/8262 11009/22891/8262 11012/22897/8262 +f 11004/22884/8141 10994/22863/8141 11012/22898/8141 11005/22885/8141 +f 10993/22861/8140 11002/22881/8140 11003/22882/8140 11009/22892/8140 +f 11011/22894/8263 11010/22893/8263 11014/22901/8263 11015/22902/8263 +f 11007/22887/8168 11013/22900/8168 11016/22904/8168 11017/22906/8168 +f 11013/22900/8154 11011/22895/8154 11015/22903/8154 11016/22904/8154 +f 11018/22907/8264 11008/22889/8264 11019/22909/8264 11020/22910/8264 +f 11003/22882/8135 11000/22876/8134 11021/22912/8265 11010/22893/8266 +f 10999/22874/8160 11001/22878/8160 11018/22908/8160 11022/22915/8160 +f 11000/22876/8161 10999/22875/8161 11022/22914/8161 11021/22912/8161 +f 11001/22879/8267 11006/22886/8267 11008/22889/8267 11018/22907/8267 +f 11023/22916/8268 11024/22918/8268 11025/22920/8269 11026/22921/8269 +f 11015/22902/8270 11014/22901/8270 11027/22924/8270 11028/22926/8270 +f 11029/22930/8166 11030/22932/8166 11031/22934/8166 11032/22935/8166 +f 11020/22910/8167 11019/22909/8167 11033/22939/8167 11034/22941/8167 +f 11008/22889/8260 11007/22888/8259 11017/22905/8271 11019/22909/8272 +f 11010/22893/8266 11021/22912/8265 11035/22945/8273 11014/22901/8173 +f 11022/22915/8157 11018/22908/8157 11020/22911/8157 11036/22947/8157 +f 11021/22913/8156 11022/22915/8156 11036/22947/8156 11035/22946/8156 +f 10979/22836/8175 10984/22845/8175 11037/22948/8175 11038/22950/8175 +f 10981/22840/8176 10964/22812/8176 11039/22954/8176 11040/22956/8176 +f 10984/22844/8249 10982/22841/8248 11041/22957/8274 11037/22949/8275 +f 10982/22841/8276 10981/22839/8276 11040/22955/8276 11041/22957/8276 +f 10972/22826/8108 10970/22824/8108 10980/22837/8108 11042/22958/8108 +f 10969/22822/8181 10983/22843/8181 10984/22845/8181 10979/22836/8181 +f 10962/22809/8277 10972/22826/8277 11042/22958/8182 10963/22810/8278 +f 10967/22819/8184 10961/22807/8184 10964/22812/8184 10981/22840/8184 +f 11037/22949/8275 11041/22957/8274 11043/22959/8279 11044/22960/8280 +f 11041/22957/8281 11040/22955/8281 11045/22962/8281 11043/22959/8281 +f 11039/22952/8205 11046/22966/8205 11047/22967/8205 11048/22968/8205 +f 11049/22972/8204 11038/22950/8204 11050/22974/8204 11051/22977/8204 +f 11042/22958/8174 10980/22837/8174 11049/22971/8174 11052/22980/8174 +f 10963/22810/8278 11042/22958/8182 11052/22980/8191 11046/22964/8192 +f 10980/22838/8193 10979/22836/8193 11038/22950/8193 11049/22972/8193 +f 10964/22813/8194 10963/22811/8194 11046/22965/8194 11039/22953/8194 +f 11048/22968/8197 11047/22967/8197 11053/22982/8197 11054/22984/8197 +f 11051/22978/8282 11050/22975/8282 11055/22987/8282 11056/22989/8282 +f 11047/22967/8199 11057/22990/8200 11058/22991/8201 11053/22982/8202 +f 11057/22990/8218 11051/22979/8218 11056/22988/8218 11058/22991/8218 +f 11040/22956/8187 11039/22954/8187 11048/22969/8187 11045/22961/8187 +f 11038/22951/8186 11037/22949/8186 11044/22960/8186 11050/22976/8186 +f 11052/22981/8203 11049/22973/8203 11051/22979/8203 11057/22990/8203 +f 11046/22966/8192 11052/22981/8191 11057/22990/8200 11047/22967/8199 +f 11058/22991/8208 11056/22988/8208 11029/22931/8209 11059/22992/8210 +f 11055/22987/8211 11060/22993/8211 11023/22917/8212 11030/22932/8213 +f 11061/22995/8283 11054/22985/8283 11062/22997/8283 11063/22998/8283 +f 11060/22994/8284 11064/23000/8285 11024/22918/8268 11023/22916/8268 +f 11043/22959/8286 11045/22962/8286 11061/22996/8286 11064/23000/8286 +f 11044/22960/8280 11043/22959/8279 11064/23000/8285 11060/22994/8284 +f 11045/22963/8287 11048/22970/8287 11054/22985/8287 11061/22995/8287 +f 11050/22976/8217 11044/22960/8217 11060/22994/8217 11055/22986/8217 +f 11063/22998/8288 11062/22997/8288 11065/23001/8288 11066/23003/8288 +f 11019/22909/8272 11017/22905/8271 11067/23007/8289 11033/22939/8289 +f 11014/22901/8173 11035/22945/8273 11068/23010/8223 11027/22924/8223 +f 11062/22997/8221 11069/23013/8221 11070/23015/8222 11065/23001/8222 +f 11053/22982/8202 11058/22991/8201 11059/22992/8207 11069/23014/8207 +f 11056/22989/8206 11055/22987/8206 11030/22932/8206 11029/22930/8206 +f 11054/22985/8224 11053/22983/8224 11069/23013/8221 11062/22997/8221 +f 11064/23000/8290 11061/22996/8290 11063/22999/8291 11024/22918/8292 +f 11071/23018/8229 11028/22927/8229 11027/22925/8229 11068/23011/8229 +f 11034/22942/8229 11071/23018/8229 11068/23011/8229 11072/23020/8229 +f 11033/22940/8230 11067/23008/8229 11071/23019/8229 11034/22943/8229 +f 11067/23008/8229 11073/23022/8229 11028/22928/8229 11071/23019/8229 +f 11074/23024/8231 11032/22936/8231 11031/22933/8232 11026/22922/8231 +f 11066/23004/8233 11074/23024/8231 11026/22922/8231 11025/22919/8231 +f 11065/23002/8233 11070/23016/8233 11074/23025/8231 11066/23005/8233 +f 11070/23016/8233 11075/23026/8233 11032/22937/8231 11074/23025/8231 +f 11035/22946/8234 11036/22947/8234 11072/23021/8234 11068/23012/8234 +f 11069/23014/8207 11059/22992/8207 11075/23027/8235 11070/23017/8235 +f 11017/22906/8236 11016/22904/8236 11073/23023/8236 11067/23009/8236 +f 11024/22918/8292 11063/22999/8291 11066/23006/8293 11025/22920/8293 +f 11036/22947/8238 11020/22911/8238 11034/22944/8238 11072/23021/8238 +f 11059/22992/8210 11029/22931/8209 11032/22938/8239 11075/23027/8239 +f 11016/22904/8240 11015/22903/8240 11028/22929/8240 11073/23023/8240 +f 11030/22932/8213 11023/22917/8212 11026/22923/8241 11031/22934/8241 +o Chair.031 +v -4.541854 0.415382 5.524474 +v -4.541854 0.429951 5.524474 +v -4.540874 0.429951 5.474864 +v -4.532928 0.429951 5.072993 +v -4.531948 0.429951 5.023385 +v -4.531948 0.415382 5.023385 +v -4.532928 0.415382 5.072993 +v -4.540874 0.415382 5.474864 +v -4.916504 0.429951 5.015782 +v -4.916504 0.415382 5.015782 +v -4.916504 0.400812 5.015782 +v -4.917406 0.400812 5.061392 +v -4.532928 0.400812 5.072993 +v -4.531948 0.400812 5.023385 +v -4.926411 0.415382 5.516871 +v -4.926411 0.429951 5.516871 +v -4.925509 0.415382 5.471261 +v -4.925509 0.429951 5.471261 +v -4.926411 0.400812 5.516871 +v -4.925509 0.400812 5.471261 +v -4.541854 0.400812 5.524474 +v -4.540874 0.400812 5.474864 +v -4.507270 0.432961 5.044384 +v -4.507565 0.432961 5.059331 +v -4.512062 0.421009 5.059242 +v -4.511766 0.421009 5.044295 +v -4.499438 0.426967 5.059491 +v -4.499142 0.426967 5.044544 +v -4.518803 0.419106 5.504395 +v -4.518512 0.419106 5.489662 +v -4.505888 0.425064 5.489912 +v -4.506179 0.425064 5.504645 +v -4.514167 0.434699 5.504487 +v -4.513875 0.434699 5.489754 +v -4.493197 0.431853 5.059615 +v -4.492901 0.431853 5.044668 +v -4.499507 0.433592 5.490038 +v -4.499799 0.433592 5.504771 +v -4.487535 0.592772 5.505014 +v -4.501903 0.593879 5.504730 +v -4.495006 0.592141 5.044626 +v -4.495302 0.592141 5.059573 +v -4.480638 0.591033 5.044910 +v -4.462239 0.829840 5.045274 +v -4.476608 0.830948 5.044990 +v -4.469137 0.831579 5.505377 +v -4.483505 0.832686 5.505094 +v -4.480933 0.591033 5.059857 +v -4.501612 0.593879 5.489996 +v -4.487244 0.592772 5.490281 +v -4.486818 0.830737 5.044788 +v -4.473787 0.870951 5.068109 +v -4.482866 0.870348 5.067930 +v -4.493435 0.832325 5.490158 +v -4.493727 0.832325 5.504891 +v -4.489242 0.869634 5.481729 +v -4.489306 0.864490 5.464904 +v -4.462535 0.829840 5.060221 +v -4.510993 0.608202 5.504550 +v -4.483213 0.832686 5.490360 +v -4.468845 0.831579 5.490644 +v -4.476903 0.830948 5.059937 +v -4.460846 0.869953 5.068365 +v -4.504086 0.606614 5.044446 +v -4.504381 0.606614 5.059394 +v -4.487113 0.830737 5.059735 +v -4.510702 0.608202 5.489817 +v -4.480153 0.870373 5.481908 +v -4.480216 0.865229 5.465084 +v -4.467276 0.864232 5.465340 +v -4.481346 0.913073 5.140970 +v -4.473175 0.914244 5.141599 +v -4.475540 0.911897 5.408548 +v -4.483694 0.911148 5.408746 +v -4.461393 0.867524 5.086554 +v -4.474334 0.868521 5.086298 +v -4.474240 0.902898 5.151246 +v -4.460301 0.901824 5.151521 +v -4.483414 0.867919 5.086118 +v -4.467211 0.869376 5.482164 +v -4.476202 0.900855 5.398990 +v -4.462264 0.899781 5.399266 +v -4.461602 0.910823 5.408823 +v -4.459236 0.913170 5.141874 +v -4.484294 0.901346 5.400847 +v -4.482411 0.901727 5.150617 +v -4.917406 0.415382 5.061392 +v -4.917406 0.429951 5.061392 +v -4.723536 0.438060 5.017426 +v -4.723421 0.443651 5.011587 +v -4.592361 0.443651 5.014178 +v -4.592477 0.438060 5.020018 +v -4.592473 0.429976 5.019841 +v -4.560086 0.437950 5.020658 +v -4.562696 0.430300 5.020429 +v -4.723147 0.429903 4.997737 +v -4.723150 0.437987 4.997913 +v -4.854209 0.437987 4.995322 +v -4.854205 0.429903 4.995146 +v -4.854319 0.443828 5.000913 +v -4.886215 0.439408 5.000282 +v -4.883768 0.434055 4.994738 +v -4.723422 0.424135 5.011660 +v -4.723262 0.424311 5.003577 +v -4.854321 0.424311 5.000986 +v -4.854481 0.424135 5.009068 +v -4.723261 0.443828 5.003504 +v -4.854479 0.443651 5.008996 +v -4.592091 0.437987 5.000504 +v -4.592201 0.443828 5.006095 +v -4.723533 0.429976 5.017250 +v -4.854591 0.429976 5.014658 +v -4.592363 0.424135 5.014251 +v -4.592203 0.424311 5.006168 +v -4.880531 0.426646 4.994626 +v -4.878410 0.421521 5.000510 +v -4.886304 0.439247 5.008366 +v -4.878499 0.421360 5.008594 +v -4.880946 0.426713 5.014137 +v -4.592087 0.429903 5.000329 +v -4.559723 0.437881 5.001144 +v -4.557946 0.443408 5.006773 +v -4.564473 0.424773 5.014802 +v -4.564256 0.424940 5.006721 +v -4.562333 0.430231 5.000916 +v -4.854595 0.438060 5.014835 +v -4.534412 0.420977 5.020988 +v -4.537876 0.416357 5.015328 +v -4.537609 0.416497 5.007247 +v -4.534072 0.420919 5.001475 +v -4.529129 0.427313 5.001749 +v -4.558163 0.443241 5.014854 +v -4.510338 0.402967 5.001945 +v -4.503594 0.407418 5.002254 +v -4.529470 0.427371 5.021263 +v -4.503919 0.407458 5.021769 +v -4.510663 0.403008 5.021458 +v -4.525667 0.431932 5.007411 +v -4.498830 0.410634 5.007941 +v -4.525933 0.431793 5.015491 +v -4.499136 0.410537 5.016021 +v -4.486177 0.380352 5.022119 +v -4.493999 0.378323 5.021788 +v -4.485863 0.380334 5.002604 +v -4.480320 0.381800 5.008307 +v -4.480651 0.381756 5.016387 +v -4.515428 0.399792 5.015772 +v -4.515121 0.399889 5.007692 +v -4.464700 0.345795 5.008616 +v -4.465032 0.345756 5.016695 +v -4.499541 0.376856 5.016086 +v -4.478484 0.342751 5.022094 +v -4.484070 0.341467 5.016392 +v -4.493683 0.378304 5.002274 +v -4.499210 0.376901 5.008007 +v -4.483738 0.341506 5.008313 +v -4.478169 0.342735 5.002581 +v -4.953785 0.349401 5.012874 +v -4.945754 0.348454 5.012856 +v -4.986851 -0.002953 5.012044 +v -4.994882 -0.002007 5.012062 +v -4.470288 0.344511 5.002913 +v -4.383622 0.001491 5.004626 +v -4.378035 0.002774 5.010330 +v -4.959237 0.350077 4.998839 +v -4.959222 0.350056 5.006925 +v -5.000319 -0.001352 5.006112 +v -5.000334 -0.001331 4.998026 +v -4.391818 -0.000270 5.023809 +v -4.397404 -0.001553 5.018105 +v -4.470602 0.344527 5.022427 +v -4.917153 0.425574 4.999671 +v -4.912760 0.421603 4.994164 +v -4.884183 0.434122 5.014250 +v -4.913199 0.421652 5.013677 +v -4.917184 0.425454 5.007756 +v -4.902845 0.412305 5.000027 +v -4.902876 0.412185 5.008111 +v -4.907269 0.416156 5.013617 +v -4.934896 0.403231 5.013248 +v -4.940058 0.405075 5.007304 +v -4.921645 0.398698 4.999655 +v -4.921638 0.398640 5.007741 +v -4.927262 0.400566 5.013222 +v -4.906829 0.416106 4.994106 +v -4.936723 0.371230 5.007442 +v -4.942539 0.372479 5.012919 +v -4.926807 0.400542 4.993711 +v -4.942082 0.372464 4.993409 +v -4.936737 0.371267 4.999357 +v -4.940065 0.405133 4.999218 +v -4.955783 0.375406 5.006993 +v -4.955795 0.375443 4.998907 +v -4.934441 0.403207 4.993736 +v -4.949981 0.374194 4.993429 +v -4.953326 0.349392 4.993362 +v -4.945296 0.348446 4.993345 +v -4.950438 0.374209 5.012940 +v -4.939844 0.347770 5.007381 +v -4.939860 0.347791 4.999295 +v -4.980957 -0.003617 4.998482 +v -4.980942 -0.003637 5.006568 +v -4.383935 0.001507 5.024140 +v -4.986393 -0.002962 4.992533 +v -4.391503 -0.000286 5.004294 +v -4.387719 0.000611 5.014217 +v -4.397072 -0.001514 5.010026 +v -4.378366 0.002736 5.018409 +v -4.990637 -0.002484 5.002297 +v -4.994423 -0.002015 4.992550 +v -4.733885 0.438060 5.540867 +v -4.733769 0.443651 5.535028 +v -4.602710 0.443651 5.537619 +v -4.602826 0.438060 5.543458 +v -4.602822 0.429976 5.543283 +v -4.570435 0.437950 5.544099 +v -4.573045 0.430300 5.543871 +v -4.864669 0.424311 5.524427 +v -4.864554 0.429903 5.518587 +v -4.890880 0.426646 5.518066 +v -4.888759 0.421521 5.523951 +v -4.733771 0.424135 5.535100 +v -4.733611 0.424311 5.527018 +v -4.864829 0.424135 5.532509 +v -4.733610 0.443828 5.526945 +v -4.864828 0.443651 5.532436 +v -4.864668 0.443828 5.524354 +v -4.733499 0.437987 5.521354 +v -4.864557 0.437987 5.518763 +v -4.602440 0.437987 5.523945 +v -4.602550 0.443828 5.529536 +v -4.733881 0.429976 5.540691 +v -4.864940 0.429976 5.538100 +v -4.602712 0.424135 5.537692 +v -4.602551 0.424311 5.529609 +v -4.896653 0.439247 5.531807 +v -4.896564 0.439408 5.523723 +v -4.888847 0.421360 5.532034 +v -4.891294 0.426713 5.537579 +v -4.864944 0.438060 5.538276 +v -4.894532 0.434122 5.537691 +v -4.733496 0.429903 5.521178 +v -4.602436 0.429903 5.523769 +v -4.570072 0.437881 5.524585 +v -4.568295 0.443408 5.530213 +v -4.574822 0.424773 5.538243 +v -4.574605 0.424940 5.530161 +v -4.572682 0.430231 5.524357 +v -4.568512 0.443241 5.538295 +v -4.536014 0.431932 5.530851 +v -4.536282 0.431793 5.538932 +v -4.544761 0.420977 5.544430 +v -4.548224 0.416357 5.538769 +v -4.547957 0.416497 5.530688 +v -4.544421 0.420919 5.524916 +v -4.525470 0.399889 5.531133 +v -4.520687 0.402967 5.525385 +v -4.525776 0.399792 5.539213 +v -4.539478 0.427313 5.525190 +v -4.513943 0.407418 5.525695 +v -4.539819 0.427371 5.544704 +v -4.514268 0.407458 5.545209 +v -4.521012 0.403008 5.544900 +v -4.496526 0.380352 5.545560 +v -4.504347 0.378323 5.545229 +v -4.509179 0.410634 5.531382 +v -4.496212 0.380334 5.526045 +v -4.490669 0.381800 5.531748 +v -4.509485 0.410537 5.539462 +v -4.491000 0.381756 5.539827 +v -4.480636 0.344511 5.526353 +v -4.475049 0.345795 5.532057 +v -4.475381 0.345756 5.540136 +v -4.480950 0.344527 5.545868 +v -4.509890 0.376856 5.539526 +v -4.488832 0.342751 5.545536 +v -4.494419 0.341467 5.539833 +v -4.504032 0.378304 5.525715 +v -4.509559 0.376901 5.531447 +v -4.964134 0.349401 5.536315 +v -4.956103 0.348454 5.536298 +v -4.997200 -0.002953 5.535485 +v -5.005231 -0.002007 5.535502 +v -4.393970 0.001491 5.528067 +v -4.388383 0.002774 5.533770 +v -4.969585 0.350077 5.522280 +v -4.969570 0.350056 5.530365 +v -5.010667 -0.001352 5.529553 +v -5.010683 -0.001331 5.521467 +v -4.402166 -0.000270 5.547249 +v -4.407753 -0.001553 5.541546 +v -4.488517 0.342735 5.526021 +v -4.494087 0.341506 5.531754 +v -4.923548 0.421652 5.537117 +v -4.927533 0.425454 5.531197 +v -4.913194 0.412305 5.523468 +v -4.913225 0.412185 5.531552 +v -4.917617 0.416156 5.537059 +v -4.894117 0.434055 5.518178 +v -4.937611 0.400566 5.536664 +v -4.945245 0.403231 5.536688 +v -4.931987 0.398640 5.531181 +v -4.917178 0.416106 5.517547 +v -4.937156 0.400542 5.517151 +v -4.931993 0.398698 5.523096 +v -4.927502 0.425574 5.523111 +v -4.950407 0.405075 5.530744 +v -4.950414 0.405133 5.522658 +v -4.923109 0.421603 5.517605 +v -4.952431 0.372464 5.516850 +v -4.947085 0.371267 5.522798 +v -4.966132 0.375406 5.530433 +v -4.966144 0.375443 5.522347 +v -4.944790 0.403207 5.517177 +v -4.960330 0.374194 5.516870 +v -4.963675 0.349392 5.516803 +v -4.960786 0.374209 5.536381 +v -4.947073 0.371230 5.530883 +v -4.950209 0.347791 5.522736 +v -4.950193 0.347770 5.530821 +v -4.952888 0.372479 5.536361 +v -4.991306 -0.003617 5.521923 +v -4.991291 -0.003637 5.530009 +v -4.394284 0.001507 5.547581 +v -4.401852 -0.000286 5.527735 +v -4.955645 0.348446 5.516786 +v -4.996742 -0.002962 5.515974 +v -4.398068 0.000611 5.537659 +v -4.407421 -0.001514 5.533467 +v -4.388715 0.002736 5.541849 +v -5.000986 -0.002484 5.525739 +v -5.004772 -0.002015 5.515991 +vn 0.9998 -0.0000 0.0198 +vn 0.0198 -0.0000 -0.9998 +vn -0.0000 -1.0000 -0.0000 +vn -0.0198 -0.0000 0.9998 +vn -0.9998 -0.0000 -0.0198 +vn -0.1191 0.9929 -0.0024 +vn 0.2636 -0.9646 0.0052 +vn 0.4267 -0.9044 0.0084 +vn 0.5205 -0.0911 0.8490 +vn 0.1622 -0.9868 0.0032 +vn -0.1714 0.9852 -0.0034 +vn 0.5236 -0.0779 -0.8484 +vn 0.6899 -0.1146 -0.7148 +vn 0.6268 -0.0987 0.7729 +vn 0.6163 -0.7874 0.0122 +vn 0.8005 -0.5992 0.0158 +vn -0.9968 0.0768 -0.0197 +vn 0.9968 -0.0768 0.0197 +vn 0.0922 -0.2916 -0.9521 +vn -0.0041 0.5027 -0.8645 +vn -0.9944 0.1047 -0.0164 +vn -0.9934 0.1119 -0.0239 +vn -0.9940 0.1062 -0.0245 +vn 0.8510 -0.0656 -0.5210 +vn 0.0554 0.4967 -0.8662 +vn -0.9969 0.0768 -0.0173 +vn -0.8441 -0.5359 -0.0167 +vn -0.0469 0.5287 0.8475 +vn -0.0315 -0.6113 -0.7908 +vn -0.5216 -0.8531 -0.0091 +vn -0.8463 -0.5326 -0.0135 +vn -0.8456 -0.5337 -0.0103 +vn -0.8469 -0.5315 -0.0167 +vn -0.1170 0.9931 0.0069 +vn -0.1000 0.9648 0.2431 +vn -0.0977 0.9584 0.2683 +vn -0.0771 -0.8811 0.4665 +vn 0.2251 -0.8634 0.4515 +vn 0.6046 -0.7743 0.1869 +vn -0.0602 -0.5705 0.8191 +vn 0.8173 -0.3669 0.4443 +vn 0.7725 -0.3997 0.4935 +vn 0.9987 -0.0465 0.0220 +vn -0.9937 0.1108 -0.0165 +vn -0.9936 0.1116 -0.0156 +vn 0.9967 -0.0794 0.0149 +vn 0.0234 0.5223 0.8524 +vn 0.9991 -0.0401 0.0137 +vn -0.9938 0.1101 -0.0172 +vn 0.9982 -0.0584 0.0120 +vn 0.6063 -0.7742 -0.1817 +vn 0.9966 -0.0813 0.0149 +vn 0.9962 -0.0847 0.0206 +vn 0.9970 -0.0769 0.0077 +vn 0.0762 0.8588 -0.5066 +vn 0.0691 0.9633 0.2594 +vn 0.0766 0.9970 0.0094 +vn 0.0691 0.9630 0.2603 +vn -0.0649 0.8610 -0.5045 +vn -0.9962 0.0845 -0.0200 +vn -0.9965 0.0831 -0.0137 +vn -0.9967 0.0796 -0.0125 +vn -0.9969 0.0778 -0.0078 +vn -0.0582 -0.8773 -0.4764 +vn -0.0695 -0.9658 -0.2500 +vn -0.9958 0.0880 -0.0264 +vn 0.9957 -0.0886 0.0269 +vn 0.0570 0.8673 0.4945 +vn -0.0745 0.8695 0.4882 +vn -0.9970 0.0744 -0.0203 +vn -0.9963 0.0849 -0.0118 +vn -0.0766 -0.9970 -0.0088 +vn 0.9971 -0.0732 0.0215 +vn -0.9971 0.0723 -0.0220 +vn -0.0000 1.0000 -0.0000 +vn -0.0137 0.7224 0.6913 +vn -0.0107 0.7268 0.6867 +vn -0.0107 0.7269 0.6867 +vn -0.0197 -0.0225 0.9996 +vn -0.0200 -0.0215 0.9996 +vn -0.0263 -0.0204 0.9994 +vn 0.0198 0.0218 -0.9996 +vn 0.0184 0.0219 -0.9996 +vn 0.0183 0.0219 -0.9996 +vn -0.0801 0.6937 -0.7158 +vn 0.0004 -0.9998 -0.0218 +vn -0.0004 0.9998 0.0219 +vn 0.0143 0.6915 -0.7222 +vn 0.0170 0.6962 -0.7176 +vn 0.0169 0.6962 -0.7177 +vn 0.0056 0.9997 0.0217 +vn -0.0143 -0.6915 0.7223 +vn 0.1005 -0.7257 -0.6806 +vn -0.1375 0.9903 0.0186 +vn 0.0692 -0.6955 0.7152 +vn 0.0137 -0.7223 -0.6914 +vn 0.0197 0.0221 -0.9996 +vn 0.0196 0.7008 -0.7131 +vn 0.0231 -0.9995 -0.0207 +vn 0.0266 0.0214 -0.9994 +vn 0.0201 0.0224 -0.9995 +vn -0.2300 -0.6683 0.7075 +vn -0.2119 -0.6972 -0.6849 +vn -0.3013 -0.9532 -0.0271 +vn 0.0332 0.0183 -0.9993 +vn 0.0275 0.0214 -0.9994 +vn 0.0117 0.9997 0.0215 +vn 0.0256 -0.7326 -0.6802 +vn -0.0078 0.7313 0.6821 +vn -0.0024 -0.7022 0.7120 +vn 0.0386 0.0132 -0.9992 +vn 0.0342 0.0178 -0.9993 +vn -0.0327 -0.0175 0.9993 +vn -0.0271 -0.0205 0.9994 +vn -0.0334 -0.0172 0.9993 +vn -0.0379 -0.0124 0.9992 +vn 0.4473 0.5509 -0.7046 +vn 0.4384 0.5748 0.6909 +vn 0.3342 0.9421 0.0278 +vn 0.2283 0.6901 0.6867 +vn 0.2459 0.6614 -0.7086 +vn -0.0381 -0.0119 0.9992 +vn -0.0396 -0.0090 0.9992 +vn 0.6021 0.3812 -0.7015 +vn 0.6000 0.3978 0.6941 +vn 0.8406 0.5403 0.0379 +vn -0.5932 -0.8044 -0.0329 +vn -0.4252 -0.5868 -0.6891 +vn -0.4344 -0.5625 0.7035 +vn 0.6208 0.7833 0.0335 +vn 0.9165 0.3980 0.0396 +vn -0.6528 -0.2790 0.7043 +vn -0.6531 -0.2912 -0.6990 +vn -0.9154 -0.4005 -0.0396 +vn 0.0402 0.0092 -0.9992 +vn 0.0388 0.0122 -0.9992 +vn -0.8213 -0.5692 -0.0374 +vn -0.5913 -0.4135 -0.6924 +vn -0.5937 -0.3964 0.7003 +vn 0.0019 -0.0027 1.0000 +vn 0.0019 -0.0025 1.0000 +vn 0.6847 0.1694 -0.7089 +vn -0.9932 0.1162 0.0022 +vn -0.6847 -0.1695 0.7088 +vn 0.6536 0.2899 0.6991 +vn 0.6533 0.2777 -0.7044 +vn -0.0390 -0.0080 0.9992 +vn -0.0401 -0.0055 0.9992 +vn 0.0409 0.0054 -0.9991 +vn 0.0405 0.0070 -0.9992 +vn -0.2698 0.6472 -0.7130 +vn -0.3091 0.6748 0.6702 +vn 0.3528 -0.9356 -0.0137 +vn -0.0166 -0.0216 0.9996 +vn -0.0114 -0.0207 0.9997 +vn -0.0055 -0.0182 0.9998 +vn -0.0106 -0.0205 0.9997 +vn -0.1118 0.7239 0.6808 +vn 0.0165 0.0227 -0.9996 +vn 0.0112 0.0218 -0.9997 +vn 0.1153 -0.9932 -0.0189 +vn -0.0169 -0.0222 0.9996 +vn -0.5031 0.5630 0.6557 +vn 0.5859 -0.8103 -0.0080 +vn -0.0008 -0.0112 0.9999 +vn -0.0045 -0.0173 0.9998 +vn 0.4224 -0.5801 0.6965 +vn 0.0104 0.0211 -0.9997 +vn 0.0052 0.0187 -0.9998 +vn -0.4082 0.9128 0.0128 +vn 0.2817 -0.6896 -0.6671 +vn 0.2435 -0.6617 0.7091 +vn 0.6010 -0.3366 0.7249 +vn 0.6552 -0.3512 -0.6688 +vn -0.8836 0.4682 0.0038 +vn 0.0004 0.0114 -0.9999 +vn 0.0041 0.0175 -0.9998 +vn -0.0002 0.0104 -0.9999 +vn -0.0020 0.0032 -1.0000 +vn -0.4568 0.5405 -0.7065 +vn -0.6655 0.7463 0.0072 +vn 0.4666 -0.6033 -0.6467 +vn -0.9909 0.1344 0.0022 +vn -0.0018 0.0027 -1.0000 +vn -0.6715 0.0928 -0.7351 +vn -0.6720 0.0866 -0.7355 +vn -0.7299 0.0969 0.6766 +vn -0.7305 0.0905 0.6769 +vn -0.7305 0.0904 0.6769 +vn 0.0010 -0.0030 1.0000 +vn -0.0008 -0.0100 0.9999 +vn 0.8761 -0.4821 -0.0039 +vn -0.6584 0.3437 0.6696 +vn -0.6040 0.3294 -0.7258 +vn 0.9932 -0.1162 -0.0022 +vn -0.0409 -0.0053 0.9991 +vn 0.7306 -0.0898 -0.6769 +vn 0.7310 -0.0839 -0.6772 +vn 0.0409 0.0053 -0.9992 +vn 0.7301 -0.0956 -0.6766 +vn 0.6716 -0.0916 0.7352 +vn 0.6720 -0.0860 0.7355 +vn 0.6720 -0.0859 0.7355 +vn 0.9913 -0.1319 -0.0023 +vn 0.2197 -0.9756 0.0043 +vn 0.2197 -0.9756 0.0044 +vn -0.1171 -0.9931 -0.0023 +vn -0.1171 -0.9931 -0.0024 +vn -0.1170 -0.9931 -0.0023 +vn -0.6866 -0.1770 -0.7051 +vn -0.0019 0.0025 -1.0000 +vn 0.6866 0.1770 0.7051 +vn 0.6724 -0.0803 0.7358 +vn -0.9687 -0.2449 -0.0410 +vn -0.6724 0.0803 -0.7358 +vn 0.9687 0.2449 0.0409 +vn -0.7310 0.0839 0.6772 +vn -0.0197 -0.0221 0.9996 +vn -0.0201 -0.0224 0.9995 +vn -0.0266 -0.0214 0.9994 +vn -0.0143 -0.6915 0.7222 +vn 0.0692 -0.6956 0.7151 +vn -0.0184 -0.0219 0.9996 +vn -0.0183 -0.0219 0.9996 +vn -0.0112 -0.0218 0.9997 +vn -0.0163 -0.0228 0.9996 +vn 0.0197 0.0224 -0.9996 +vn -0.0198 -0.0218 0.9996 +vn 0.3342 0.9421 0.0279 +vn -0.2300 -0.6683 0.7074 +vn -0.0024 -0.7023 0.7119 +vn -0.5932 -0.8044 -0.0328 +vn -0.0333 -0.0183 0.9993 +vn -0.0275 -0.0214 0.9994 +vn -0.0342 -0.0178 0.9993 +vn -0.0386 -0.0131 0.9992 +vn -0.0388 -0.0123 0.9992 +vn -0.0401 -0.0092 0.9992 +vn -0.4345 -0.5626 0.7034 +vn 0.6533 0.2777 -0.7043 +vn -0.6528 -0.2790 0.7042 +vn 0.0402 0.0091 -0.9991 +vn 0.0388 0.0123 -0.9992 +vn 0.0018 -0.0027 1.0000 +vn 0.0018 -0.0025 1.0000 +vn 0.6847 0.1695 -0.7088 +vn -0.0405 -0.0070 0.9992 +vn -0.0414 -0.0057 0.9991 +vn 0.0409 0.0055 -0.9991 +vn -0.0052 -0.0187 0.9998 +vn -0.0104 -0.0210 0.9997 +vn 0.2435 -0.6618 0.7091 +vn 0.0169 0.0221 -0.9996 +vn -0.0004 -0.0114 0.9999 +vn -0.0041 -0.0176 0.9998 +vn 0.4224 -0.5802 0.6964 +vn 0.9913 -0.1319 -0.0022 +vn 0.0002 -0.0104 0.9999 +vn 0.0021 -0.0032 1.0000 +vn 0.6011 -0.3367 0.7248 +vn 0.8761 -0.4821 -0.0038 +vn -0.0409 -0.0053 0.9992 +vn 0.6718 -0.0916 0.7351 +vn 0.6721 -0.0860 0.7354 +vn 0.6721 -0.0859 0.7354 +vn 0.6725 -0.0803 0.7357 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt 0.686647 0.000000 +vt 0.870176 0.996278 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.782584 0.965408 +vt 0.870573 0.970227 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.833010 0.965282 +vt 0.908785 0.026051 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.968598 0.070112 +vt 0.979071 0.026051 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.968598 0.371019 +vt 0.757324 0.262250 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.173427 0.241164 +vt 0.758439 0.080128 +vt -0.973130 0.033128 +vt -0.123087 0.241439 +vt 0.978437 0.000000 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt 0.737072 0.000128 +vt 0.908263 0.000000 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.409642 -0.009898 +vt 0.677629 0.482142 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.240570 0.058726 +vt 0.669677 0.481452 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.786789 0.246652 +vt 0.991724 0.699406 +vt 0.928489 0.277215 +vt 0.873308 0.505274 +vt 0.786789 0.155990 +vt 0.958960 0.029326 +vt 0.991724 0.483440 +vt 0.977373 0.702462 +vt -0.140978 0.246673 +vt 0.958492 0.010078 +vt -0.156145 0.246590 +vt 0.929566 0.080357 +vt -0.144664 0.252235 +vt 0.984385 0.731379 +vt 0.945934 0.020741 +vt -0.159831 0.252152 +vt 0.984385 0.500820 +vt 0.989649 0.087406 +vt 0.706860 0.007022 +vt 0.847263 0.989602 +vt 0.686599 0.714388 +vt 0.721837 0.007060 +vt 0.884682 0.006674 +vt 0.720919 0.017861 +vt 0.673632 0.527027 +vt 0.872079 0.017335 +vt 0.705942 0.017823 +vt 0.673632 0.731676 +vt 0.690157 0.523535 +vt 0.802894 0.958412 +vt 0.847659 0.963551 +vt 0.695298 0.714388 +vt 0.661237 0.495044 +vt 0.817871 0.958374 +vt 0.885205 0.032725 +vt 0.661237 0.722645 +vt 0.693293 0.503638 +vt 0.944329 0.029337 +vt 0.981154 0.731379 +vt 0.977373 0.486830 +vt 0.989649 0.263822 +vt 0.873305 0.723869 +vt 0.981154 0.500820 +vt 0.870573 0.032734 +vt 0.693293 0.761173 +vt 0.679412 0.527027 +vt 0.695298 0.493838 +vt 0.679412 0.731676 +vt 0.826600 0.493835 +vt 0.826977 0.731673 +vt 0.826600 0.714385 +vt 0.814491 0.495042 +vt 0.122435 0.638558 +vt 0.015922 0.839080 +vt 0.835047 0.699404 +vt 0.993361 0.510073 +vt 0.758428 0.504317 +vt 0.072861 0.638558 +vt 0.015474 0.619132 +vt 0.835047 0.483438 +vt 0.845328 0.702461 +vt 0.015197 0.626266 +vt 0.014109 0.491099 +vt 0.993356 0.728667 +vt 0.758425 0.722912 +vt 0.833436 0.500823 +vt 0.891028 0.725398 +vt 0.672547 0.500827 +vt 0.752235 0.729690 +vt 0.667246 0.727168 +vt 0.891033 0.506802 +vt 0.752238 0.507120 +vt 0.071993 0.783837 +vt 0.969610 0.493832 +vt 0.987699 0.731670 +vt 0.641343 0.509140 +vt 0.689355 0.726560 +vt 0.969610 0.714382 +vt 0.122436 0.783837 +vt 0.641344 0.743247 +vt 0.833436 0.731382 +vt 0.845328 0.486829 +vt 0.814491 0.722643 +vt 0.825052 0.503733 +vt 0.016195 0.832047 +vt 0.634466 0.494220 +vt 0.825052 0.761267 +vt 0.826977 0.527024 +vt 0.022424 0.783234 +vt 0.035852 0.889154 +vt 0.043016 0.971597 +vt 0.706398 0.505224 +vt 0.072863 0.808180 +vt 0.028940 0.807392 +vt 0.010039 0.882150 +vt 0.137154 0.974703 +vt 0.631023 0.892124 +vt 0.649326 0.890699 +vt 0.121379 0.984023 +vt 0.648470 0.892315 +vt 0.072864 0.783142 +vt 0.043889 0.943476 +vt 0.078385 0.805896 +vt 0.075977 0.941215 +vt 0.613560 0.946909 +vt 0.672547 0.731385 +vt 0.701510 0.486829 +vt 0.669481 0.490576 +vt 0.072863 0.646796 +vt 0.648470 0.506013 +vt 0.080915 0.841605 +vt 0.968560 0.503835 +vt 0.102906 0.865583 +vt 0.634467 0.887149 +vt 0.987699 0.527021 +vt 0.968560 0.761369 +vt 0.690090 0.495972 +vt 0.701510 0.702461 +vt 0.603150 0.865583 +vt 0.014109 0.884028 +vt 0.706395 0.729929 +vt 0.816556 0.714481 +vt 0.023239 0.646888 +vt 0.040534 0.495932 +vt 0.081188 0.621686 +vt 0.007711 0.495744 +vt 0.041481 0.497122 +vt 0.080911 0.628820 +vt 0.003028 0.888966 +vt 0.041481 0.887645 +vt 0.060838 0.971173 +vt 0.631023 0.505822 +vt 0.649326 0.500176 +vt 0.081188 0.834572 +vt 0.805889 0.743046 +vt 0.122312 0.806766 +vt 0.988155 0.503653 +vt 0.115555 0.935422 +vt 0.904138 0.912557 +vt 0.988155 0.735605 +vt 0.813022 0.494763 +vt 0.890960 0.912565 +vt 0.735836 0.641861 +vt 0.693936 0.468644 +vt 0.027417 0.833361 +vt 0.420996 0.961603 +vt 0.032040 0.784613 +vt 0.284612 0.483847 +vt 0.656925 0.504187 +vt 0.681549 0.720168 +vt 0.066750 0.834450 +vt 0.299225 0.449509 +vt 0.999708 0.720167 +vt 0.989627 0.743247 +vt 0.121899 0.832034 +vt 0.693936 0.449159 +vt 0.420996 0.999935 +vt 0.008277 0.862094 +vt 0.082562 0.831201 +vt 0.741580 0.718717 +vt 0.678836 0.505353 +vt 0.815743 0.487362 +vt 0.741523 0.585977 +vt 0.678836 0.699564 +vt 0.553315 0.945729 +vt 0.982243 0.588758 +vt 0.460393 1.018433 +vt 0.949871 0.788878 +vt 0.982305 0.727355 +vt 0.668954 0.502598 +vt 0.949657 0.691167 +vt 0.979056 0.490574 +vt 0.078628 0.952623 +vt 0.035428 0.887064 +vt 0.812426 0.730862 +vt 0.971935 0.642457 +vt 0.805889 0.532195 +vt 0.173975 1.012235 +vt 0.908785 0.976444 +vt 0.726484 0.788878 +vt 0.984477 0.500479 +vt 0.894591 0.976453 +vt 0.737043 0.505375 +vt 0.726270 0.691167 +vt 0.987420 0.694407 +vt 0.999899 0.506981 +vt 0.968797 0.500648 +vt 0.989626 0.516135 +vt 0.652223 0.697892 +vt 0.656922 0.730164 +vt 0.681740 0.506981 +vt 0.985798 0.713641 +vt 0.053549 0.993732 +vt 0.043551 0.873068 +vt 0.522988 0.991572 +vt 0.062665 0.961706 +vt 0.169656 0.991799 +vt 0.060838 0.809705 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +s 1 +usemtl CabnetDoors +f 11076/23029/8294 11077/23033/8294 11078/23038/8294 11079/23042/8294 11080/23046/8294 11081/23052/8294 11082/23055/8294 11083/23058/8294 +f 11081/23051/8295 11080/23047/8295 11084/23062/8295 11085/23065/8295 +f 11086/23067/8296 11087/23071/8296 11088/23073/8296 11089/23074/8296 +f 11090/23078/8297 11091/23079/8297 11077/23034/8297 11076/23028/8297 +f 11091/23080/8298 11090/23077/8298 11092/23082/8298 11093/23083/8298 +f 11094/23085/8298 11095/23088/8298 11092/23082/8298 11090/23077/8298 +f 11094/23086/8297 11090/23078/8297 11076/23028/8297 11096/23090/8297 +f 11089/23075/8295 11081/23051/8295 11085/23065/8295 11086/23068/8295 +f 11096/23091/8294 11076/23029/8294 11083/23058/8294 11082/23055/8294 11081/23052/8294 11089/23076/8294 11088/23072/8294 11097/23094/8294 +f 11079/23043/8299 11080/23048/8299 11098/23097/8299 11099/23101/8299 +f 11089/23076/8294 11088/23072/8294 11082/23055/8294 11081/23052/8294 +f 11083/23059/8298 11076/23030/8298 11096/23092/8298 11097/23095/8298 +f 11081/23053/8300 11082/23056/8300 11100/23105/8300 11101/23107/8300 +f 11101/23107/8301 11100/23105/8301 11102/23109/8301 11103/23112/8301 +f 11104/23115/8301 11107/23123/8301 11106/23120/8301 11105/23118/8301 +f 11082/23057/8302 11079/23044/8302 11099/23102/8302 11100/23106/8302 +f 11076/23031/8303 11104/23115/8303 11105/23118/8303 11083/23060/8303 +f 11078/23039/8304 11109/23130/8304 11108/23126/8304 11077/23035/8304 +f 11083/23061/8305 11105/23119/8305 11109/23131/8305 11078/23040/8305 +f 11080/23049/8306 11081/23054/8306 11101/23108/8306 11098/23099/8306 +f 11077/23036/8307 11108/23127/8307 11104/23116/8307 11076/23032/8307 +f 11103/23113/8308 11102/23110/8308 11110/23135/8308 11111/23139/8308 +f 11112/23142/8309 11106/23121/8309 11107/23124/8309 11113/23144/8309 +f 11108/23128/8297 11115/23147/8297 11114/23145/8297 11113/23143/8297 +f 11100/23106/8297 11099/23102/8297 11110/23134/8297 11102/23111/8297 +f 11099/23103/8310 11098/23098/8310 11116/23151/8310 11117/23156/8310 +f 11108/23128/8297 11113/23143/8297 11107/23125/8297 11104/23117/8297 +f 11098/23099/8295 11101/23108/8295 11103/23114/8295 11111/23137/8295 +f 11105/23119/8295 11106/23122/8295 11112/23140/8295 11109/23131/8295 +f 11116/23152/8295 11118/23160/8295 11119/23163/8295 11120/23167/8295 +f 11115/23147/8297 11122/23174/8297 11121/23170/8297 11114/23145/8297 +f 11098/23100/8295 11111/23138/8295 11118/23161/8295 11116/23153/8295 +f 11111/23139/8311 11110/23135/8311 11123/23177/8311 11118/23162/8311 +f 11109/23132/8310 11124/23179/8310 11115/23148/8310 11108/23129/8310 +f 11112/23141/8295 11125/23183/8295 11124/23180/8312 11109/23133/8295 +f 11113/23144/8311 11114/23146/8311 11125/23184/8311 11112/23142/8311 +f 11110/23136/8297 11099/23104/8297 11117/23157/8297 11123/23178/8297 +f 11126/23185/8313 11120/23169/8313 11127/23189/8313 11128/23190/8313 +f 11129/23192/8314 11132/23200/8315 11131/23198/8316 11130/23195/8316 +f 11118/23162/8311 11123/23177/8311 11133/23202/8311 11119/23164/8311 +f 11115/23149/8297 11134/23205/8297 11130/23197/8297 11122/23175/8297 +f 11125/23183/8295 11136/23212/8295 11135/23208/8317 11124/23180/8312 +f 11123/23178/8297 11117/23157/8297 11137/23214/8297 11133/23203/8297 +f 11114/23146/8311 11121/23171/8311 11136/23211/8311 11125/23184/8311 +f 11120/23168/8318 11119/23165/8318 11138/23217/8318 11127/23188/8318 +f 11116/23154/8295 11120/23169/8295 11126/23185/8295 11139/23219/8295 +f 11140/23222/8319 11139/23220/8310 11126/23186/8310 11141/23225/8319 +f 11142/23228/8319 11129/23193/8319 11130/23196/8310 11134/23206/8310 +f 11140/23223/8319 11141/23226/8319 11129/23194/8319 11142/23229/8319 +f 11124/23181/8320 11142/23230/8320 11134/23207/8320 11115/23150/8320 +f 11130/23197/8321 11131/23199/8321 11143/23232/8321 11122/23175/8321 +f 11136/23212/8322 11145/23236/8322 11144/23233/8322 11135/23208/8322 +f 11117/23158/8323 11140/23224/8324 11142/23230/8325 11124/23181/8312 +f 11117/23158/8323 11116/23155/8326 11139/23221/8326 11140/23224/8324 +f 11146/23240/8327 11147/23244/8327 11148/23248/8328 11149/23252/8329 +f 11150/23256/8330 11151/23259/8331 11152/23262/8332 11153/23265/8330 +f 11133/23203/8333 11137/23214/8334 11151/23260/8335 11150/23257/8333 +f 11119/23166/8336 11133/23204/8336 11150/23258/8336 11138/23218/8336 +f 11141/23226/8337 11154/23269/8338 11132/23201/8315 11129/23194/8314 +f 11135/23209/8317 11144/23234/8339 11151/23261/8335 11137/23215/8334 +f 11122/23176/8340 11143/23231/8340 11155/23273/8340 11121/23172/8340 +f 11121/23173/8341 11155/23271/8341 11145/23237/8341 11136/23213/8341 +f 11141/23227/8337 11126/23187/8342 11128/23191/8342 11154/23270/8338 +f 11144/23234/8343 11156/23274/8344 11152/23263/8332 11151/23261/8331 +f 11157/23277/8345 11158/23281/8346 11159/23285/8347 11153/23266/8347 +f 11127/23188/8348 11138/23217/8348 11159/23286/8348 11147/23245/8348 +f 11148/23249/8349 11147/23246/8350 11159/23287/8350 11158/23282/8351 +f 11128/23190/8352 11127/23189/8352 11147/23247/8352 11146/23241/8352 +f 11149/23253/8353 11160/23289/8354 11161/23292/8355 11146/23242/8356 +f 11145/23238/8357 11157/23278/8358 11156/23275/8344 11144/23235/8357 +f 11132/23200/8359 11160/23290/8354 11149/23254/8353 11131/23198/8359 +f 11155/23272/8360 11158/23283/8346 11157/23279/8345 11145/23239/8360 +f 11143/23231/8361 11148/23250/8349 11158/23284/8351 11155/23273/8361 +f 11131/23199/8362 11149/23255/8329 11148/23251/8328 11143/23232/8362 +f 11154/23269/8363 11161/23293/8355 11160/23291/8354 11132/23201/8364 +f 11157/23280/8358 11153/23267/8365 11152/23264/8332 11156/23276/8344 +f 11138/23218/8366 11150/23258/8366 11153/23268/8366 11159/23288/8366 +f 11154/23270/8363 11128/23191/8367 11146/23243/8367 11161/23294/8355 +f 11093/23083/8298 11092/23082/8298 11162/23295/8298 11163/23296/8298 +f 11085/23066/8298 11084/23063/8298 11163/23296/8298 11162/23295/8298 +f 11162/23295/8298 11092/23082/8298 11095/23088/8298 11087/23070/8298 +f 11087/23070/8298 11086/23069/8298 11085/23066/8298 11162/23295/8298 +f 11091/23081/8368 11093/23084/8368 11078/23041/8368 11077/23037/8368 +f 11079/23045/8368 11163/23297/8368 11084/23064/8368 11080/23050/8368 +f 11078/23041/8368 11093/23084/8368 11163/23297/8368 11079/23045/8368 +f 11097/23096/8296 11095/23089/8296 11094/23087/8296 11096/23093/8296 +f 11088/23073/8296 11087/23071/8296 11095/23089/8296 11097/23096/8296 +f 11137/23216/8334 11117/23159/8323 11124/23182/8312 11135/23210/8317 +f 11164/23298/8369 11165/23299/8369 11166/23300/8370 11167/23302/8371 +f 11168/23303/8372 11167/23301/8372 11169/23306/8373 11170/23308/8374 +f 11171/23310/8375 11172/23311/8375 11173/23312/8376 11174/23314/8377 +f 11173/23312/8378 11175/23315/8378 11176/23317/8378 11177/23319/8378 +f 11178/23321/8379 11179/23322/8379 11180/23323/8379 11181/23325/8379 +f 11182/23327/8380 11165/23299/8380 11183/23328/8380 11175/23316/8380 +f 11172/23311/8381 11182/23326/8381 11175/23315/8381 11173/23312/8381 +f 11184/23329/8382 11185/23330/8383 11182/23326/8381 11172/23311/8381 +f 11185/23331/8384 11166/23300/8384 11165/23299/8380 11182/23327/8380 +f 11186/23332/8385 11178/23320/8385 11181/23324/8385 11187/23333/8385 +f 11168/23304/8385 11188/23336/8385 11178/23320/8385 11186/23332/8385 +f 11188/23335/8379 11189/23337/8379 11179/23322/8379 11178/23321/8379 +f 11180/23323/8386 11174/23313/8386 11190/23339/8386 11191/23340/8386 +f 11175/23316/8387 11183/23328/8387 11192/23341/8387 11176/23318/8387 +f 11187/23333/8388 11181/23324/8388 11193/23343/8388 11194/23345/8388 +f 11179/23322/8389 11171/23309/8389 11174/23313/8389 11180/23323/8389 +f 11189/23337/8389 11195/23347/8389 11171/23309/8389 11179/23322/8389 +f 11195/23346/8390 11184/23329/8390 11172/23311/8375 11171/23310/8375 +f 11185/23330/8383 11184/23329/8382 11196/23348/8391 11197/23350/8391 +f 11189/23337/8392 11188/23335/8392 11198/23351/8392 11199/23353/8392 +f 11184/23329/8390 11195/23346/8390 11200/23354/8393 11196/23348/8394 +f 11201/23356/8369 11183/23328/8369 11165/23299/8369 11164/23298/8369 +f 11198/23352/8395 11170/23307/8395 11202/23359/8395 11203/23361/8395 +f 11200/23355/8396 11199/23353/8396 11204/23362/8396 11205/23364/8396 +f 11199/23353/8397 11198/23351/8397 11203/23360/8397 11204/23362/8397 +f 11196/23348/8394 11200/23354/8393 11205/23365/8398 11206/23366/8399 +f 11166/23300/8384 11185/23331/8384 11197/23349/8400 11207/23367/8400 +f 11195/23347/8401 11189/23337/8401 11199/23353/8401 11200/23355/8401 +f 11167/23302/8371 11166/23300/8370 11207/23367/8402 11169/23305/8402 +f 11188/23336/8403 11168/23304/8403 11170/23307/8403 11198/23352/8403 +f 11206/23366/8399 11205/23365/8398 11208/23368/8404 11209/23369/8405 +f 11202/23359/8406 11210/23370/8407 11211/23373/8408 11212/23374/8409 +f 11213/23375/8410 11206/23366/8410 11209/23369/8410 11214/23377/8410 +f 11210/23370/8411 11215/23380/8411 11216/23382/8411 11211/23373/8411 +f 11207/23367/8412 11197/23349/8412 11213/23376/8412 11215/23381/8412 +f 11169/23305/8413 11207/23367/8413 11215/23381/8413 11210/23371/8413 +f 11197/23350/8414 11196/23348/8414 11206/23366/8414 11213/23375/8414 +f 11170/23308/8374 11169/23306/8373 11210/23372/8407 11202/23358/8406 +f 11212/23374/8409 11211/23373/8408 11217/23386/8415 11218/23387/8416 +f 11214/23377/8417 11209/23369/8417 11219/23388/8417 11220/23390/8417 +f 11211/23373/8418 11216/23382/8418 11221/23391/8418 11217/23386/8418 +f 11216/23383/8419 11214/23378/8419 11220/23389/8419 11221/23392/8419 +f 11204/23362/8420 11203/23360/8420 11222/23393/8420 11223/23396/8420 +f 11205/23365/8421 11204/23363/8421 11223/23398/8421 11208/23368/8421 +f 11203/23361/8422 11202/23359/8422 11212/23374/8422 11222/23395/8422 +f 11215/23381/8423 11213/23376/8423 11214/23379/8423 11216/23384/8423 +f 11221/23392/8424 11220/23389/8424 11224/23400/8424 11225/23401/8424 +f 11226/23403/8425 11218/23387/8425 11227/23404/8425 11228/23405/8425 +f 11229/23407/8426 11230/23409/8426 11231/23411/8426 11232/23413/8426 +f 11230/23409/8427 11226/23402/8427 11228/23406/8427 11231/23411/8427 +f 11209/23369/8405 11208/23368/8404 11229/23408/8428 11219/23388/8429 +f 11223/23397/8430 11222/23394/8430 11226/23402/8430 11230/23409/8430 +f 11208/23368/8431 11223/23398/8431 11230/23410/8431 11229/23408/8431 +f 11222/23395/8432 11212/23374/8432 11218/23387/8432 11226/23403/8432 +f 11233/23414/8433 11234/23416/8433 11235/23418/8434 11236/23419/8434 +f 11224/23399/8435 11237/23422/8435 11238/23423/8435 11239/23425/8435 +f 11240/23428/8436 11241/23430/8436 11242/23432/8436 11243/23433/8436 +f 11228/23405/8437 11227/23404/8437 11244/23436/8437 11245/23438/8437 +f 11217/23385/8438 11221/23392/8438 11225/23401/8438 11246/23442/8438 +f 11220/23390/8439 11219/23388/8439 11237/23422/8439 11224/23399/8439 +f 11218/23387/8416 11217/23386/8415 11246/23441/8440 11227/23404/8441 +f 11219/23388/8429 11229/23408/8428 11232/23412/8442 11237/23422/8443 +f 11177/23319/8444 11176/23317/8444 11247/23443/8444 11248/23445/8444 +f 11192/23341/8445 11249/23446/8445 11250/23448/8445 11251/23452/8445 +f 11193/23342/8446 11191/23340/8446 11252/23453/8446 11253/23455/8446 +f 11249/23447/8447 11194/23344/8448 11254/23457/8449 11250/23449/8450 +f 11183/23328/8451 11201/23356/8451 11249/23446/8451 11192/23341/8451 +f 11174/23314/8377 11173/23312/8376 11177/23319/8452 11190/23338/8453 +f 11181/23325/8454 11180/23323/8454 11191/23340/8454 11193/23342/8454 +f 11201/23357/8455 11187/23334/8455 11194/23344/8448 11249/23447/8447 +f 11251/23451/8456 11250/23450/8456 11255/23459/8456 11256/23462/8456 +f 11253/23455/8457 11252/23453/8457 11257/23463/8457 11258/23466/8457 +f 11250/23450/8450 11254/23458/8449 11259/23469/8458 11255/23459/8459 +f 11254/23458/8460 11253/23456/8460 11258/23467/8460 11259/23469/8460 +f 11190/23338/8453 11177/23319/8452 11248/23445/8461 11260/23471/8462 +f 11176/23318/8463 11192/23341/8463 11251/23452/8463 11247/23444/8463 +f 11191/23340/8464 11190/23339/8464 11260/23470/8464 11252/23453/8464 +f 11194/23345/8465 11193/23343/8465 11253/23456/8465 11254/23458/8465 +f 11259/23469/8466 11258/23467/8466 11261/23472/8466 11262/23474/8466 +f 11257/23464/8467 11263/23475/8467 11264/23476/8467 11265/23478/8467 +f 11266/23480/8468 11256/23460/8468 11267/23483/8468 11268/23485/8468 +f 11263/23475/8469 11269/23487/8470 11270/23488/8471 11264/23476/8472 +f 11248/23445/8473 11247/23443/8473 11266/23482/8473 11269/23487/8473 +f 11260/23471/8462 11248/23445/8461 11269/23487/8470 11263/23475/8469 +f 11247/23444/8474 11251/23452/8474 11256/23461/8474 11266/23481/8474 +f 11252/23454/8475 11260/23471/8475 11263/23475/8475 11257/23464/8475 +f 11268/23485/8476 11267/23483/8476 11241/23430/8476 11240/23428/8476 +f 11264/23476/8472 11270/23488/8471 11271/23489/8477 11272/23491/8477 +f 11270/23488/8478 11268/23486/8478 11240/23429/8479 11271/23489/8479 +f 11267/23483/8480 11273/23492/8480 11233/23415/8481 11241/23430/8482 +f 11255/23459/8459 11259/23469/8458 11262/23474/8483 11273/23493/8484 +f 11258/23468/8485 11257/23465/8485 11265/23479/8485 11261/23473/8485 +f 11256/23462/8486 11255/23459/8486 11273/23493/8486 11267/23484/8486 +f 11269/23487/8487 11266/23482/8487 11268/23486/8487 11270/23488/8487 +f 11274/23494/8488 11275/23496/8488 11276/23497/8488 11277/23499/8488 +f 11227/23404/8441 11246/23441/8440 11278/23502/8489 11244/23436/8489 +f 11275/23496/8490 11272/23490/8490 11279/23505/8491 11276/23497/8491 +f 11237/23422/8443 11232/23412/8442 11280/23508/8492 11238/23423/8492 +f 11265/23479/8493 11264/23477/8493 11272/23490/8490 11275/23496/8490 +f 11262/23474/8494 11261/23472/8494 11274/23495/8495 11234/23416/8496 +f 11273/23493/8484 11262/23474/8483 11234/23416/8433 11233/23414/8433 +f 11261/23473/8497 11265/23479/8497 11275/23496/8497 11274/23494/8497 +f 11281/23511/8498 11239/23426/8499 11238/23424/8498 11280/23509/8499 +f 11245/23439/8498 11281/23511/8498 11280/23509/8499 11282/23512/8499 +f 11244/23437/8498 11278/23503/8498 11281/23511/8498 11245/23439/8498 +f 11278/23503/8498 11283/23514/8499 11239/23426/8499 11281/23511/8498 +f 11284/23516/8500 11243/23434/8500 11242/23431/8501 11236/23420/8502 +f 11277/23500/8500 11284/23516/8500 11236/23420/8502 11235/23417/8502 +f 11276/23498/8500 11279/23506/8500 11284/23516/8500 11277/23500/8500 +f 11279/23506/8500 11285/23517/8500 11243/23434/8500 11284/23516/8500 +f 11232/23413/8503 11231/23411/8503 11282/23513/8503 11280/23510/8503 +f 11272/23491/8477 11271/23489/8477 11285/23518/8504 11279/23507/8504 +f 11246/23442/8505 11225/23401/8505 11283/23515/8505 11278/23504/8505 +f 11234/23416/8496 11274/23495/8495 11277/23501/8506 11235/23418/8506 +f 11231/23411/8507 11228/23406/8507 11245/23440/8507 11282/23513/8507 +f 11271/23489/8479 11240/23429/8479 11243/23435/8508 11285/23518/8508 +f 11225/23401/8509 11224/23400/8509 11239/23427/8509 11283/23515/8509 +f 11241/23430/8482 11233/23415/8481 11236/23421/8510 11242/23432/8510 +f 11286/23520/8369 11287/23521/8369 11288/23522/8370 11289/23524/8371 +f 11290/23525/8511 11289/23523/8511 11291/23527/8512 11292/23528/8513 +f 11293/23529/8386 11294/23531/8386 11295/23534/8386 11296/23536/8386 +f 11297/23538/8379 11298/23539/8379 11293/23530/8379 11299/23542/8379 +f 11300/23544/8380 11287/23521/8380 11301/23545/8380 11302/23546/8380 +f 11303/23548/8381 11300/23543/8381 11302/23547/8381 11304/23549/8381 +f 11305/23550/8381 11306/23551/8381 11300/23543/8381 11303/23548/8381 +f 11306/23552/8384 11288/23522/8384 11287/23521/8380 11300/23544/8380 +f 11307/23553/8514 11297/23537/8514 11299/23541/8514 11308/23554/8514 +f 11290/23525/8514 11309/23556/8514 11297/23537/8514 11307/23553/8514 +f 11309/23555/8379 11310/23557/8379 11298/23539/8379 11297/23538/8379 +f 11302/23546/8387 11301/23545/8387 11311/23559/8387 11312/23561/8387 +f 11308/23554/8515 11299/23541/8515 11313/23562/8515 11314/23564/8515 +f 11315/23565/8516 11308/23554/8517 11314/23564/8518 11316/23567/8519 +f 11298/23540/8389 11317/23569/8389 11294/23531/8389 11293/23529/8389 +f 11310/23558/8389 11318/23571/8389 11317/23569/8389 11298/23540/8389 +f 11306/23551/8391 11305/23550/8391 11319/23572/8391 11320/23574/8391 +f 11310/23557/8392 11309/23555/8392 11321/23575/8392 11322/23577/8392 +f 11305/23550/8520 11318/23570/8520 11323/23580/8393 11319/23572/8394 +f 11307/23553/8521 11286/23519/8521 11289/23523/8511 11290/23525/8511 +f 11308/23554/8517 11315/23565/8516 11286/23519/8521 11307/23553/8521 +f 11315/23566/8369 11301/23545/8369 11287/23521/8369 11286/23520/8369 +f 11324/23581/8522 11320/23573/8522 11325/23583/8522 11326/23585/8522 +f 11321/23576/8523 11292/23528/8523 11327/23587/8523 11328/23589/8523 +f 11323/23579/8396 11322/23578/8396 11329/23590/8396 11330/23593/8396 +f 11322/23577/8397 11321/23575/8397 11328/23588/8397 11329/23592/8397 +f 11288/23522/8384 11306/23552/8384 11320/23573/8400 11324/23581/8400 +f 11318/23571/8401 11310/23558/8401 11322/23578/8401 11323/23579/8401 +f 11289/23524/8371 11288/23522/8370 11324/23581/8402 11291/23526/8402 +f 11309/23556/8524 11290/23525/8524 11292/23528/8524 11321/23576/8524 +f 11330/23594/8421 11329/23591/8421 11331/23598/8421 11332/23599/8421 +f 11329/23592/8525 11328/23588/8525 11333/23600/8525 11331/23596/8525 +f 11334/23604/8399 11330/23594/8398 11332/23599/8404 11335/23605/8405 +f 11327/23587/8526 11336/23607/8527 11337/23608/8528 11338/23609/8529 +f 11291/23526/8413 11324/23581/8413 11326/23585/8413 11336/23606/8413 +f 11320/23574/8414 11319/23572/8414 11334/23603/8414 11325/23582/8414 +f 11292/23528/8513 11291/23527/8512 11336/23607/8527 11327/23587/8526 +f 11319/23572/8394 11323/23580/8393 11330/23595/8398 11334/23603/8399 +f 11338/23609/8529 11337/23608/8528 11339/23611/8530 11340/23612/8531 +f 11341/23615/8417 11335/23605/8417 11342/23616/8417 11343/23617/8417 +f 11337/23608/8418 11344/23621/8418 11345/23622/8418 11339/23611/8418 +f 11344/23619/8419 11341/23613/8419 11343/23618/8419 11345/23623/8419 +f 11328/23589/8532 11327/23587/8532 11338/23609/8532 11333/23602/8532 +f 11326/23585/8423 11325/23583/8423 11341/23614/8423 11344/23620/8423 +f 11336/23607/8411 11326/23586/8411 11344/23621/8411 11337/23608/8411 +f 11325/23584/8410 11334/23604/8410 11335/23605/8410 11341/23615/8410 +f 11343/23617/8533 11342/23616/8533 11346/23624/8533 11347/23625/8533 +f 11339/23610/8438 11345/23623/8438 11348/23627/8438 11349/23629/8438 +f 11345/23623/8424 11343/23618/8424 11347/23626/8424 11348/23627/8424 +f 11350/23630/8534 11340/23612/8534 11351/23632/8534 11352/23633/8534 +f 11335/23605/8405 11332/23599/8404 11353/23635/8535 11342/23616/8536 +f 11331/23597/8430 11333/23601/8430 11350/23631/8430 11354/23638/8430 +f 11332/23599/8431 11331/23598/8431 11354/23637/8431 11353/23635/8431 +f 11333/23602/8432 11338/23609/8432 11340/23612/8432 11350/23630/8432 +f 11355/23639/8537 11356/23641/8537 11357/23643/8538 11358/23644/8538 +f 11347/23625/8539 11346/23624/8539 11359/23647/8539 11360/23649/8539 +f 11361/23653/8436 11362/23655/8436 11363/23657/8436 11364/23658/8436 +f 11352/23633/8437 11351/23632/8437 11365/23662/8437 11366/23664/8437 +f 11340/23612/8531 11339/23611/8530 11349/23628/8540 11351/23632/8541 +f 11342/23616/8536 11353/23635/8535 11367/23668/8542 11346/23624/8443 +f 11354/23638/8427 11350/23631/8427 11352/23634/8427 11368/23670/8427 +f 11353/23636/8426 11354/23638/8426 11368/23670/8426 11367/23669/8426 +f 11311/23559/8445 11316/23568/8445 11369/23671/8445 11370/23673/8445 +f 11313/23563/8446 11296/23535/8446 11371/23677/8446 11372/23679/8446 +f 11316/23567/8519 11314/23564/8518 11373/23680/8543 11369/23672/8544 +f 11314/23564/8545 11313/23562/8545 11372/23678/8545 11373/23680/8545 +f 11304/23549/8378 11302/23547/8378 11312/23560/8378 11374/23681/8378 +f 11301/23545/8451 11315/23566/8451 11316/23568/8451 11311/23559/8451 +f 11294/23532/8546 11304/23549/8546 11374/23681/8452 11295/23533/8453 +f 11299/23542/8454 11293/23530/8454 11296/23535/8454 11313/23563/8454 +f 11369/23672/8544 11373/23680/8543 11375/23682/8547 11376/23683/8548 +f 11373/23680/8549 11372/23678/8549 11377/23685/8549 11375/23682/8549 +f 11371/23675/8475 11378/23689/8475 11379/23690/8475 11380/23691/8475 +f 11381/23695/8474 11370/23673/8474 11382/23697/8474 11383/23700/8474 +f 11374/23681/8444 11312/23560/8444 11381/23694/8444 11384/23703/8444 +f 11295/23533/8453 11374/23681/8452 11384/23703/8461 11378/23687/8462 +f 11312/23561/8463 11311/23559/8463 11370/23673/8463 11381/23695/8463 +f 11296/23536/8464 11295/23534/8464 11378/23688/8464 11371/23676/8464 +f 11380/23691/8467 11379/23690/8467 11385/23705/8467 11386/23707/8467 +f 11383/23701/8468 11382/23698/8468 11387/23710/8468 11388/23712/8468 +f 11379/23690/8469 11389/23713/8470 11390/23714/8471 11385/23705/8472 +f 11389/23713/8487 11383/23702/8487 11388/23711/8487 11390/23714/8487 +f 11372/23679/8457 11371/23677/8457 11380/23692/8457 11377/23684/8457 +f 11370/23674/8456 11369/23672/8456 11376/23683/8456 11382/23699/8456 +f 11384/23704/8473 11381/23696/8473 11383/23702/8473 11389/23713/8473 +f 11378/23689/8462 11384/23704/8461 11389/23713/8470 11379/23690/8469 +f 11390/23714/8478 11388/23711/8478 11361/23654/8479 11391/23715/8479 +f 11387/23710/8480 11392/23716/8480 11355/23640/8481 11362/23655/8482 +f 11393/23718/8550 11386/23708/8550 11394/23720/8550 11395/23721/8550 +f 11392/23717/8551 11396/23723/8552 11356/23641/8537 11355/23639/8537 +f 11375/23682/8553 11377/23685/8553 11393/23719/8553 11396/23723/8553 +f 11376/23683/8548 11375/23682/8547 11396/23723/8552 11392/23717/8551 +f 11377/23686/8554 11380/23693/8554 11386/23708/8554 11393/23718/8554 +f 11382/23699/8486 11376/23683/8486 11392/23717/8486 11387/23709/8486 +f 11395/23721/8488 11394/23720/8488 11397/23724/8488 11398/23726/8488 +f 11351/23632/8541 11349/23628/8540 11399/23730/8555 11365/23662/8555 +f 11346/23624/8443 11367/23668/8542 11400/23733/8492 11359/23647/8492 +f 11394/23720/8490 11401/23736/8490 11402/23738/8491 11397/23724/8491 +f 11385/23705/8472 11390/23714/8471 11391/23715/8477 11401/23737/8477 +f 11388/23712/8476 11387/23710/8476 11362/23655/8476 11361/23653/8476 +f 11386/23708/8493 11385/23706/8493 11401/23736/8490 11394/23720/8490 +f 11396/23723/8556 11393/23719/8556 11395/23722/8557 11356/23641/8558 +f 11403/23741/8498 11360/23650/8499 11359/23648/8498 11400/23734/8499 +f 11366/23665/8498 11403/23741/8498 11400/23734/8499 11404/23743/8499 +f 11365/23663/8498 11399/23731/8498 11403/23742/8498 11366/23666/8498 +f 11399/23731/8498 11405/23745/8499 11360/23651/8499 11403/23742/8498 +f 11406/23747/8500 11364/23659/8500 11363/23656/8501 11358/23645/8502 +f 11398/23727/8500 11406/23747/8500 11358/23645/8502 11357/23642/8502 +f 11397/23725/8500 11402/23739/8500 11406/23748/8500 11398/23728/8500 +f 11402/23739/8500 11407/23749/8500 11364/23660/8500 11406/23748/8500 +f 11367/23669/8503 11368/23670/8503 11404/23744/8503 11400/23735/8503 +f 11401/23737/8477 11391/23715/8477 11407/23750/8504 11402/23740/8504 +f 11349/23629/8505 11348/23627/8505 11405/23746/8505 11399/23732/8505 +f 11356/23641/8558 11395/23722/8557 11398/23729/8559 11357/23643/8559 +f 11368/23670/8507 11352/23634/8507 11366/23667/8507 11404/23744/8507 +f 11391/23715/8479 11361/23654/8479 11364/23661/8508 11407/23750/8508 +f 11348/23627/8509 11347/23626/8509 11360/23652/8509 11405/23746/8509 +f 11362/23655/8482 11355/23640/8481 11358/23646/8510 11363/23657/8510 +o Chair.035 +v -10.155842 0.415382 -1.140182 +v -10.155842 0.429951 -1.140182 +v -10.178732 0.429951 -1.096158 +v -10.364162 0.429951 -0.739536 +v -10.387052 0.429951 -0.695513 +v -10.387052 0.415382 -0.695513 +v -10.364162 0.415382 -0.739536 +v -10.178732 0.415382 -1.096158 +v -10.728310 0.429951 -0.872954 +v -10.728310 0.415382 -0.872954 +v -10.728310 0.400812 -0.872954 +v -10.707264 0.400812 -0.913429 +v -10.364162 0.400812 -0.739536 +v -10.387052 0.400812 -0.695513 +v -10.497099 0.415382 -1.317623 +v -10.497099 0.429951 -1.317623 +v -10.518144 0.415382 -1.277148 +v -10.518144 0.429951 -1.277148 +v -10.497099 0.400812 -1.317623 +v -10.518144 0.400812 -1.277148 +v -10.155842 0.400812 -1.140182 +v -10.178732 0.400812 -1.096158 +v -10.707264 0.415382 -0.913429 +v -10.707264 0.429951 -0.913429 +v -10.558107 0.438060 -0.782010 +v -10.560802 0.443651 -0.776828 +v -10.444500 0.443651 -0.716355 +v -10.441805 0.438060 -0.721537 +v -10.441887 0.429976 -0.721380 +v -10.413061 0.437950 -0.706591 +v -10.415462 0.430300 -0.707640 +v -10.567193 0.429903 -0.764538 +v -10.567111 0.437987 -0.764694 +v -10.683414 0.437987 -0.825166 +v -10.683495 0.429903 -0.825010 +v -10.680834 0.443828 -0.830128 +v -10.709138 0.439408 -0.844845 +v -10.709644 0.434055 -0.838805 +v -10.560769 0.424135 -0.776892 +v -10.564498 0.424311 -0.769720 +v -10.680799 0.424311 -0.830193 +v -10.677071 0.424135 -0.837365 +v -10.564531 0.443828 -0.769655 +v -10.677104 0.443651 -0.837300 +v -10.450809 0.437987 -0.704221 +v -10.448229 0.443828 -0.709182 +v -10.558189 0.429976 -0.781853 +v -10.674491 0.429976 -0.842325 +v -10.444466 0.424135 -0.716420 +v -10.448195 0.424311 -0.709247 +v -10.706856 0.426646 -0.837157 +v -10.702177 0.421521 -0.841308 +v -10.705345 0.439247 -0.851985 +v -10.698384 0.421360 -0.848447 +v -10.697879 0.426713 -0.854486 +v -10.450890 0.429903 -0.704065 +v -10.422086 0.437881 -0.689286 +v -10.417830 0.443408 -0.693376 +v -10.419717 0.424773 -0.703551 +v -10.423395 0.424940 -0.696352 +v -10.424486 0.430231 -0.690336 +v -10.674410 0.438060 -0.842482 +v -10.390364 0.420977 -0.694590 +v -10.396114 0.416357 -0.691279 +v -10.399748 0.416497 -0.684056 +v -10.399406 0.420919 -0.677296 +v -10.394937 0.427313 -0.675169 +v -10.414152 0.443241 -0.700575 +v -10.378345 0.402967 -0.666345 +v -10.372276 0.407418 -0.663387 +v -10.385893 0.427371 -0.692465 +v -10.363218 0.407458 -0.680675 +v -10.369288 0.403008 -0.683632 +v -10.389186 0.431932 -0.678482 +v -10.365371 0.410634 -0.666099 +v -10.385551 0.431793 -0.685704 +v -10.361772 0.410537 -0.673339 +v -10.347475 0.380352 -0.672489 +v -10.354500 0.378323 -0.675942 +v -10.356542 0.380334 -0.655206 +v -10.348946 0.381800 -0.657559 +v -10.345367 0.381756 -0.664810 +v -10.376194 0.399792 -0.680920 +v -10.379792 0.399889 -0.673680 +v -10.335084 0.345795 -0.650351 +v -10.331508 0.345756 -0.657603 +v -10.362096 0.376856 -0.673590 +v -10.340732 0.342751 -0.668783 +v -10.348367 0.341467 -0.666451 +v -10.363565 0.378304 -0.658659 +v -10.365673 0.376901 -0.666339 +v -10.351943 0.341506 -0.659200 +v -10.349798 0.342735 -0.651501 +v -10.762432 0.349401 -0.888251 +v -10.755390 0.348454 -0.884390 +v -10.791859 -0.002953 -0.903353 +v -10.798902 -0.002007 -0.907213 +v -10.342720 0.344511 -0.648019 +v -10.265812 0.001491 -0.608030 +v -10.258176 0.002774 -0.610362 +v -10.773937 0.350077 -0.878538 +v -10.770053 0.350056 -0.885630 +v -10.806522 -0.001352 -0.904593 +v -10.810408 -0.001331 -0.897501 +v -10.263824 -0.000270 -0.628795 +v -10.271459 -0.001553 -0.626462 +v -10.333652 0.344527 -0.665302 +v -10.736592 0.425574 -0.859120 +v -10.735373 0.421603 -0.852183 +v -10.700666 0.434122 -0.856135 +v -10.726416 0.421652 -0.869524 +v -10.732749 0.425454 -0.866233 +v -10.723861 0.412305 -0.852582 +v -10.720016 0.412185 -0.859695 +v -10.721237 0.416156 -0.866632 +v -10.745669 0.403231 -0.879535 +v -10.753048 0.405075 -0.876788 +v -10.740543 0.398698 -0.861257 +v -10.736667 0.398640 -0.868353 +v -10.738979 0.400566 -0.875857 +v -10.730193 0.416106 -0.849292 +v -10.750053 0.371230 -0.875313 +v -10.752537 0.372479 -0.882906 +v -10.747922 0.400542 -0.858510 +v -10.761477 0.372464 -0.865558 +v -10.753936 0.371267 -0.868221 +v -10.756925 0.405133 -0.869692 +v -10.767002 0.375406 -0.884044 +v -10.770884 0.375443 -0.876951 +v -10.754612 0.403207 -0.862187 +v -10.768402 0.374194 -0.869357 +v -10.771371 0.349392 -0.870901 +v -10.764329 0.348446 -0.867041 +v -10.759461 0.374209 -0.886706 +v -10.752822 0.347770 -0.876753 +v -10.756708 0.347791 -0.869662 +v -10.793178 -0.003617 -0.888625 +v -10.789292 -0.003637 -0.895716 +v -10.256744 0.001507 -0.625313 +v -10.800798 -0.002962 -0.886004 +v -10.272890 -0.000286 -0.611512 +v -10.264818 0.000611 -0.618412 +v -10.275036 -0.001514 -0.619211 +v -10.254600 0.002736 -0.617614 +v -10.799850 -0.002484 -0.896608 +v -10.807840 -0.002015 -0.889864 +v -10.316584 0.438060 -1.246513 +v -10.319279 0.443651 -1.241331 +v -10.202976 0.443651 -1.180858 +v -10.200281 0.438060 -1.186041 +v -10.200362 0.429976 -1.185884 +v -10.171537 0.437950 -1.171095 +v -10.173938 0.430300 -1.172145 +v -10.439276 0.424311 -1.294696 +v -10.441971 0.429903 -1.289514 +v -10.465332 0.426646 -1.301661 +v -10.460652 0.421521 -1.305811 +v -10.319244 0.424135 -1.241396 +v -10.322974 0.424311 -1.234223 +v -10.435547 0.424135 -1.301868 +v -10.323008 0.443828 -1.234159 +v -10.435580 0.443651 -1.301804 +v -10.439309 0.443828 -1.294631 +v -10.325587 0.437987 -1.229197 +v -10.441889 0.437987 -1.289670 +v -10.209285 0.437987 -1.168724 +v -10.206705 0.443828 -1.173686 +v -10.316665 0.429976 -1.246357 +v -10.432967 0.429976 -1.306830 +v -10.202942 0.424135 -1.180923 +v -10.206672 0.424311 -1.173751 +v -10.463821 0.439247 -1.316488 +v -10.467614 0.439408 -1.309348 +v -10.456861 0.421360 -1.312951 +v -10.456354 0.426713 -1.318990 +v -10.432885 0.438060 -1.306986 +v -10.459143 0.434122 -1.320638 +v -10.325668 0.429903 -1.229041 +v -10.209366 0.429903 -1.168568 +v -10.180562 0.437881 -1.153790 +v -10.176307 0.443408 -1.157880 +v -10.178193 0.424773 -1.168054 +v -10.181871 0.424940 -1.160856 +v -10.182962 0.430231 -1.154839 +v -10.172628 0.443241 -1.165079 +v -10.147661 0.431932 -1.142985 +v -10.144028 0.431793 -1.150207 +v -10.148839 0.420977 -1.159094 +v -10.154590 0.416357 -1.155782 +v -10.158224 0.416497 -1.148560 +v -10.157883 0.420919 -1.141799 +v -10.138268 0.399889 -1.138184 +v -10.136822 0.402967 -1.130848 +v -10.134669 0.399792 -1.145424 +v -10.153413 0.427313 -1.139673 +v -10.130753 0.407418 -1.127891 +v -10.144369 0.427371 -1.156968 +v -10.121695 0.407458 -1.145179 +v -10.127764 0.403008 -1.148136 +v -10.105950 0.380352 -1.136992 +v -10.112975 0.378323 -1.140447 +v -10.123847 0.410634 -1.130603 +v -10.115018 0.380334 -1.119709 +v -10.107421 0.381800 -1.122062 +v -10.120248 0.410537 -1.137843 +v -10.103844 0.381756 -1.129313 +v -10.101195 0.344511 -1.112522 +v -10.093560 0.345795 -1.114855 +v -10.089983 0.345756 -1.122107 +v -10.092129 0.344527 -1.129805 +v -10.120571 0.376856 -1.138093 +v -10.099207 0.342751 -1.133288 +v -10.106843 0.341467 -1.130955 +v -10.122042 0.378304 -1.123163 +v -10.124149 0.376901 -1.130842 +v -10.520907 0.349401 -1.352754 +v -10.513865 0.348454 -1.348894 +v -10.550335 -0.002953 -1.367857 +v -10.557378 -0.002007 -1.371717 +v -10.024288 0.001491 -1.072533 +v -10.016652 0.002774 -1.074866 +v -10.532413 0.350077 -1.343042 +v -10.528529 0.350056 -1.350133 +v -10.564999 -0.001352 -1.369096 +v -10.568883 -0.001331 -1.362005 +v -10.022300 -0.000270 -1.093299 +v -10.029935 -0.001553 -1.090966 +v -10.108274 0.342735 -1.116004 +v -10.110419 0.341506 -1.123703 +v -10.484892 0.421652 -1.334027 +v -10.491224 0.425454 -1.330737 +v -10.482337 0.412305 -1.317086 +v -10.478493 0.412185 -1.324199 +v -10.479713 0.416156 -1.331136 +v -10.468121 0.434055 -1.303309 +v -10.497455 0.400566 -1.340361 +v -10.504146 0.403231 -1.344038 +v -10.495143 0.398640 -1.332856 +v -10.488669 0.416106 -1.313795 +v -10.506397 0.400542 -1.323013 +v -10.499020 0.398698 -1.325760 +v -10.495069 0.425574 -1.323624 +v -10.511523 0.405075 -1.341291 +v -10.515401 0.405133 -1.334196 +v -10.493848 0.421603 -1.316686 +v -10.519953 0.372464 -1.330061 +v -10.512412 0.371267 -1.332724 +v -10.525478 0.375406 -1.348547 +v -10.529360 0.375443 -1.341454 +v -10.513088 0.403207 -1.326690 +v -10.526878 0.374194 -1.333861 +v -10.529846 0.349392 -1.335404 +v -10.517938 0.374209 -1.351210 +v -10.508530 0.371230 -1.339817 +v -10.515183 0.347791 -1.334165 +v -10.511299 0.347770 -1.341257 +v -10.511012 0.372479 -1.347410 +v -10.551654 -0.003617 -1.353128 +v -10.547769 -0.003637 -1.360220 +v -10.015221 0.001507 -1.089816 +v -10.031366 -0.000286 -1.076015 +v -10.522805 0.348446 -1.331545 +v -10.559275 -0.002962 -1.350507 +v -10.023293 0.000611 -1.082916 +v -10.033511 -0.001514 -1.083714 +v -10.013076 0.002736 -1.082117 +v -10.558326 -0.002484 -1.361112 +v -10.566317 -0.002015 -1.354367 +v -10.581184 0.396685 -1.155908 +v -10.644224 0.396685 -1.034668 +v -10.581184 0.411254 -1.155908 +v -10.644224 0.411254 -1.034668 +v -10.240542 0.411254 -0.977284 +v -10.302352 0.411254 -0.858410 +v -10.644224 0.382115 -1.034668 +v -10.581184 0.382115 -1.155908 +v -10.302352 0.382115 -0.858410 +v -10.240542 0.382115 -0.977284 +vn 0.2118 -0.0000 -0.9773 +vn 0.6743 -0.7071 -0.2129 +vn 0.8872 -0.0000 0.4613 +vn 0.2129 -0.7071 0.6743 +vn -0.0118 0.6667 0.7453 +vn -0.4613 -0.0000 0.8872 +vn -0.0000 -1.0000 -0.0000 +vn -0.0310 -0.9977 0.0607 +vn -0.0314 -0.9976 0.0615 +vn 0.4613 -0.0000 -0.8872 +vn -0.8872 -0.0000 -0.4613 +vn -0.0000 1.0000 -0.0000 +vn -0.0319 0.9977 0.0602 +vn -0.0323 0.9976 0.0610 +vn 0.0314 0.9976 -0.0615 +vn 0.0310 0.9977 -0.0607 +vn 0.0312 0.9977 -0.0609 +vn 0.0313 0.9976 -0.0612 +vn 0.0323 -0.9976 -0.0610 +vn 0.0319 -0.9977 -0.0602 +vn 0.0320 -0.9977 -0.0605 +vn 0.0321 -0.9976 -0.0608 +vn 0.3190 0.7224 -0.6135 +vn 0.3194 0.7268 -0.6080 +vn 0.3194 0.7269 -0.6080 +vn 0.4613 -0.0225 -0.8870 +vn 0.4610 -0.0215 -0.8871 +vn 0.4554 -0.0204 -0.8900 +vn -0.4612 0.0218 0.8870 +vn -0.4624 0.0219 0.8864 +vn -0.4625 0.0219 0.8863 +vn -0.4130 0.6937 0.5900 +vn -0.0100 -0.9998 0.0193 +vn 0.0101 0.9998 -0.0194 +vn -0.3332 0.6915 0.6409 +vn -0.3287 0.6962 0.6382 +vn 0.0153 0.9997 -0.0164 +vn 0.3333 -0.6915 -0.6409 +vn -0.2376 -0.7257 0.6456 +vn -0.1118 0.9903 -0.0822 +vn 0.4032 -0.6955 -0.5947 +vn -0.3190 -0.7223 0.6136 +vn -0.4612 0.0221 0.8870 +vn -0.3242 0.7008 0.6354 +vn 0.0104 -0.9995 0.0292 +vn -0.4551 0.0214 0.8902 +vn -0.4608 0.0224 0.8872 +vn 0.1368 -0.6683 -0.7312 +vn -0.5139 -0.6972 0.4998 +vn -0.2775 -0.9532 -0.1204 +vn -0.4494 0.0184 0.8932 +vn -0.4543 0.0214 0.8906 +vn 0.0206 0.9997 -0.0133 +vn -0.3032 -0.7326 0.6094 +vn 0.3197 0.7313 -0.6025 +vn 0.3388 -0.7022 -0.6262 +vn -0.4446 0.0132 0.8956 +vn -0.4483 0.0177 0.8937 +vn 0.4497 -0.0175 -0.8930 +vn 0.4547 -0.0204 -0.8904 +vn 0.4491 -0.0172 -0.8933 +vn 0.4452 -0.0124 -0.8954 +vn 0.0553 0.5509 0.8327 +vn 0.7157 0.5748 -0.3967 +vn 0.3068 0.9421 0.1356 +vn 0.5292 0.6901 -0.4936 +vn -0.1233 0.6614 0.7398 +vn 0.4449 -0.0119 -0.8955 +vn 0.4436 -0.0090 -0.8962 +vn 0.1927 0.3812 0.9042 +vn 0.8591 0.3978 -0.3221 +vn 0.7562 0.5403 0.3692 +vn -0.5365 -0.8044 -0.2551 +vn -0.7032 -0.5868 0.4014 +vn -0.0446 -0.5625 -0.8256 +vn 0.5610 0.7833 0.2678 +vn 0.8236 0.3980 0.4040 +vn -0.2359 -0.2790 -0.9309 +vn -0.9081 -0.2912 0.3010 +vn -0.8227 -0.4005 -0.4035 +vn -0.4431 0.0092 0.8964 +vn -0.4443 0.0122 0.8958 +vn -0.7390 -0.5692 -0.3604 +vn -0.8506 -0.4135 0.3248 +vn -0.1859 -0.3964 -0.8991 +vn 0.4805 -0.0027 -0.8770 +vn 0.4804 -0.0025 -0.8770 +vn 0.2617 0.1694 0.9502 +vn -0.8710 0.1162 -0.4774 +vn -0.2618 -0.1695 -0.9501 +vn 0.9085 0.2899 -0.3009 +vn 0.2363 0.2777 0.9312 +vn 0.4440 -0.0079 -0.8960 +vn 0.4432 -0.0056 -0.8964 +vn -0.4424 0.0054 0.8968 +vn -0.4428 0.0070 0.8966 +vn -0.5782 0.6472 0.4968 +vn 0.0495 0.6748 -0.7364 +vn 0.3032 -0.9356 0.1809 +vn 0.4640 -0.0216 -0.8856 +vn 0.4685 -0.0208 -0.8832 +vn 0.4738 -0.0183 -0.8805 +vn 0.4694 -0.0205 -0.8828 +vn 0.2278 0.7239 -0.6512 +vn -0.4641 0.0227 0.8855 +vn -0.4688 0.0218 0.8830 +vn 0.0921 -0.9932 0.0718 +vn 0.4637 -0.0222 -0.8857 +vn -0.1277 0.5630 -0.8165 +vn 0.5106 -0.8103 0.2876 +vn 0.4781 -0.0112 -0.8783 +vn 0.4747 -0.0173 -0.8800 +vn 0.7042 -0.5801 -0.4092 +vn -0.4695 0.0211 0.8827 +vn -0.4741 0.0187 0.8803 +vn -0.3522 0.9128 -0.2067 +vn -0.0721 -0.6896 0.7206 +vn 0.5533 -0.6617 -0.5060 +vn 0.8747 -0.3366 -0.3487 +vn 0.2551 -0.3512 0.9009 +vn -0.7739 0.4682 -0.4264 +vn -0.4784 0.0114 0.8781 +vn -0.4751 0.0175 0.8798 +vn -0.4789 0.0104 0.8778 +vn -0.4806 0.0032 0.8770 +vn -0.7393 0.5405 0.4016 +vn -0.5808 0.7463 -0.3250 +vn 0.1000 -0.6033 0.7912 +vn -0.8689 0.1344 -0.4763 +vn -0.4804 0.0027 0.8770 +vn -0.9415 0.0928 0.3239 +vn -0.9421 0.0866 0.3240 +vn -0.3169 0.0969 -0.9435 +vn -0.3172 0.0905 -0.9440 +vn -0.3172 0.0904 -0.9440 +vn 0.4797 -0.0030 -0.8774 +vn 0.4781 -0.0100 -0.8783 +vn 0.7673 -0.4821 0.4229 +vn -0.2574 0.3437 -0.9031 +vn -0.8777 0.3294 0.3480 +vn 0.8709 -0.1162 0.4775 +vn 0.4424 -0.0053 -0.8968 +vn 0.3173 -0.0898 0.9441 +vn 0.3176 -0.0839 0.9445 +vn -0.4425 0.0053 0.8968 +vn 0.3171 -0.0956 0.9436 +vn 0.9416 -0.0916 -0.3239 +vn 0.9422 -0.0860 -0.3240 +vn 0.9422 -0.0859 -0.3240 +vn 0.8692 -0.1319 0.4766 +vn 0.1950 -0.9756 0.1014 +vn 0.1950 -0.9756 0.1013 +vn -0.1039 -0.9931 -0.0540 +vn -0.1039 -0.9931 -0.0541 +vn -0.9404 -0.1770 0.2903 +vn -0.4804 0.0025 0.8770 +vn 0.9404 0.1770 -0.2903 +vn 0.9426 -0.0803 -0.3240 +vn -0.8700 -0.2449 -0.4278 +vn -0.9426 0.0803 0.3240 +vn 0.8700 0.2449 0.4278 +vn -0.3176 0.0839 -0.9445 +vn 0.4612 -0.0221 -0.8870 +vn 0.4609 -0.0224 -0.8872 +vn 0.4551 -0.0214 -0.8902 +vn 0.3332 -0.6915 -0.6409 +vn 0.4032 -0.6956 -0.5947 +vn 0.4624 -0.0219 -0.8864 +vn 0.4625 -0.0219 -0.8863 +vn 0.4687 -0.0218 -0.8831 +vn 0.4643 -0.0228 -0.8854 +vn -0.4613 0.0224 0.8870 +vn -0.4553 0.0214 0.8901 +vn -0.4609 0.0224 0.8872 +vn 0.4612 -0.0218 -0.8870 +vn 0.3388 -0.7023 -0.6262 +vn -0.5365 -0.8044 -0.2552 +vn -0.4493 0.0183 0.8932 +vn -0.4446 0.0133 0.8956 +vn 0.4493 -0.0183 -0.8932 +vn 0.4543 -0.0214 -0.8906 +vn 0.4484 -0.0178 -0.8936 +vn 0.4445 -0.0131 -0.8957 +vn -0.1234 0.6614 0.7398 +vn 0.4443 -0.0122 -0.8958 +vn 0.4432 -0.0094 -0.8964 +vn -0.0447 -0.5626 -0.8255 +vn 0.5611 0.7833 0.2678 +vn 0.2363 0.2777 0.9311 +vn -0.2360 -0.2790 -0.9308 +vn -0.4431 0.0091 0.8964 +vn -0.4443 0.0123 0.8958 +vn -0.1860 -0.3964 -0.8990 +vn 0.4804 -0.0027 -0.8771 +vn 0.2618 0.1695 0.9501 +vn 0.4428 -0.0070 -0.8966 +vn 0.4421 -0.0058 -0.8970 +vn -0.4424 0.0055 0.8968 +vn 0.4741 -0.0187 -0.8803 +vn 0.4695 -0.0210 -0.8827 +vn 0.5533 -0.6618 -0.5059 +vn -0.4637 0.0221 0.8857 +vn 0.4784 -0.0114 -0.8781 +vn 0.4751 -0.0176 -0.8798 +vn 0.7043 -0.5802 -0.4092 +vn 0.8692 -0.1319 0.4765 +vn 0.4789 -0.0104 -0.8778 +vn 0.4806 -0.0032 -0.8770 +vn 0.8747 -0.3367 -0.3486 +vn 0.7674 -0.4821 0.4228 +vn 0.8710 -0.1162 0.4774 +vn 0.4425 -0.0053 -0.8968 +vn 0.9417 -0.0916 -0.3237 +vn 0.9422 -0.0860 -0.3239 +vn 0.9422 -0.0859 -0.3239 +vn 0.9427 -0.0803 -0.3239 +vn -0.0313 -0.9976 0.0612 +vn -0.0312 -0.9977 0.0609 +vn -0.0321 0.9976 0.0608 +vn -0.0320 0.9977 0.0605 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.973130 0.033128 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.677629 0.482142 +vt 0.409642 -0.009898 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.669677 0.481452 +vt 0.240570 0.058726 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +vt 0.296927 -0.019617 +vt 0.353285 -0.019617 +vt 0.470812 0.481452 +vt 0.296927 0.014692 +vt 0.271947 0.481452 +vt 0.353285 0.014692 +vt -0.849112 0.025953 +vt 0.468872 0.000137 +vt -0.911121 0.025955 +vt 0.273887 0.000137 +vt 0.475153 0.482142 +vt 0.353285 -0.053929 +vt 0.272677 0.482143 +vt 0.296927 -0.053929 +vt -0.911121 -0.024667 +vt 0.473178 0.006015 +vt -0.849112 -0.024667 +vt 0.274652 0.006015 +s 1 +usemtl Wood +f 11408/23752/8560 11409/23754/8561 11410/23757/8562 11680/24266/8562 11681/24268/8562 11411/23759/8562 11412/23761/8563 11413/23765/8564 11414/23766/8562 11415/23767/8562 +f 11413/23764/8564 11412/23762/8563 11416/23769/8565 11417/23772/8565 +f 11418/23774/8566 11419/23777/8567 11420/23780/8568 11421/23781/8566 +f 11422/23785/8569 11423/23786/8569 11409/23755/8561 11408/23751/8560 +f 11423/23787/8570 11422/23784/8570 11424/23789/8570 11425/23791/8570 +f 11426/23792/8570 11427/23795/8570 11424/23789/8570 11422/23784/8570 +f 11426/23793/8569 11422/23785/8569 11408/23751/8560 11428/23797/8569 +f 11421/23782/8565 11413/23764/8564 11417/23772/8565 11418/23775/8565 +f 11428/23798/8562 11408/23752/8562 11415/23767/8562 11414/23766/8562 11413/23765/8562 11421/23783/8562 11420/23779/8562 11684/24274/8562 11685/24276/8562 11429/23801/8562 +f 11421/23783/8562 11420/23779/8562 11414/23766/8562 11413/23765/8562 +f 11415/23768/8570 11408/23753/8570 11428/23799/8570 11429/23802/8570 +f 11679/24265/8570 11677/24261/8570 11430/23804/8570 11431/23805/8570 +f 11417/23773/8570 11416/23770/8570 11431/23805/8570 11430/23804/8570 +f 11676/24260/8570 11424/23789/8570 11427/23795/8570 11683/24273/8570 +f 11419/23778/8570 11418/23776/8570 11417/23773/8570 11430/23804/8570 +f 11423/23788/8571 11425/23790/8572 11410/23758/8573 11409/23756/8571 +f 11411/23760/8574 11431/23806/8575 11416/23771/8571 11412/23763/8571 +f 11681/24269/8576 11679/24264/8577 11431/23806/8575 11411/23760/8574 +f 11429/23803/8578 11427/23796/8579 11426/23794/8566 11428/23800/8566 +f 11685/24277/8580 11683/24272/8581 11427/23796/8579 11429/23803/8578 +f 11432/23807/8582 11433/23808/8582 11434/23809/8583 11435/23811/8584 +f 11436/23812/8585 11435/23810/8585 11437/23815/8586 11438/23817/8587 +f 11439/23819/8588 11440/23820/8588 11441/23821/8589 11442/23823/8590 +f 11441/23821/8591 11443/23824/8591 11444/23826/8591 11445/23828/8591 +f 11446/23830/8592 11447/23831/8592 11448/23832/8592 11449/23834/8592 +f 11450/23836/8593 11433/23808/8593 11451/23837/8593 11443/23825/8593 +f 11440/23820/8594 11450/23835/8594 11443/23824/8594 11441/23821/8594 +f 11452/23838/8595 11453/23839/8595 11450/23835/8594 11440/23820/8594 +f 11453/23840/8596 11434/23809/8596 11433/23808/8593 11450/23836/8593 +f 11454/23841/8597 11446/23829/8597 11449/23833/8597 11455/23842/8597 +f 11436/23813/8597 11456/23845/8597 11446/23829/8597 11454/23841/8597 +f 11456/23844/8592 11457/23846/8592 11447/23831/8592 11446/23830/8592 +f 11448/23832/8598 11442/23822/8598 11458/23848/8598 11459/23849/8598 +f 11443/23825/8599 11451/23837/8599 11460/23850/8599 11444/23827/8599 +f 11455/23842/8600 11449/23833/8600 11461/23852/8600 11462/23854/8600 +f 11447/23831/8601 11439/23818/8601 11442/23822/8601 11448/23832/8601 +f 11457/23846/8601 11463/23856/8601 11439/23818/8601 11447/23831/8601 +f 11463/23855/8602 11452/23838/8602 11440/23820/8588 11439/23819/8588 +f 11453/23839/8595 11452/23838/8595 11464/23857/8603 11465/23859/8603 +f 11457/23846/8604 11456/23844/8604 11466/23860/8604 11467/23862/8604 +f 11452/23838/8602 11463/23855/8602 11468/23863/8605 11464/23857/8606 +f 11469/23865/8582 11451/23837/8582 11433/23808/8582 11432/23807/8582 +f 11466/23861/8607 11438/23816/8607 11470/23868/8607 11471/23870/8607 +f 11468/23864/8608 11467/23862/8608 11472/23871/8608 11473/23873/8608 +f 11467/23862/8609 11466/23860/8609 11471/23869/8609 11472/23871/8609 +f 11464/23857/8606 11468/23863/8605 11473/23874/8610 11474/23875/8611 +f 11434/23809/8596 11453/23840/8596 11465/23858/8612 11475/23876/8612 +f 11463/23856/8613 11457/23846/8613 11467/23862/8613 11468/23864/8613 +f 11435/23811/8584 11434/23809/8583 11475/23876/8614 11437/23814/8614 +f 11456/23845/8615 11436/23813/8615 11438/23816/8615 11466/23861/8615 +f 11474/23875/8611 11473/23874/8610 11476/23877/8616 11477/23878/8617 +f 11470/23868/8618 11478/23879/8619 11479/23882/8620 11480/23883/8621 +f 11481/23884/8622 11474/23875/8622 11477/23878/8622 11482/23886/8622 +f 11478/23879/8623 11483/23889/8623 11484/23891/8623 11479/23882/8623 +f 11475/23876/8624 11465/23858/8624 11481/23885/8624 11483/23890/8624 +f 11437/23814/8625 11475/23876/8625 11483/23890/8625 11478/23880/8625 +f 11465/23859/8626 11464/23857/8626 11474/23875/8626 11481/23884/8626 +f 11438/23817/8587 11437/23815/8586 11478/23881/8619 11470/23867/8618 +f 11480/23883/8621 11479/23882/8620 11485/23895/8627 11486/23896/8628 +f 11482/23886/8629 11477/23878/8629 11487/23897/8629 11488/23899/8629 +f 11479/23882/8630 11484/23891/8630 11489/23900/8630 11485/23895/8630 +f 11484/23892/8631 11482/23887/8631 11488/23898/8631 11489/23901/8631 +f 11472/23871/8632 11471/23869/8632 11490/23902/8632 11491/23905/8632 +f 11473/23874/8633 11472/23872/8633 11491/23907/8633 11476/23877/8633 +f 11471/23870/8634 11470/23868/8634 11480/23883/8634 11490/23904/8634 +f 11483/23890/8635 11481/23885/8635 11482/23888/8635 11484/23893/8635 +f 11489/23901/8636 11488/23898/8636 11492/23909/8636 11493/23910/8636 +f 11494/23912/8637 11486/23896/8637 11495/23913/8637 11496/23914/8637 +f 11497/23916/8638 11498/23918/8638 11499/23920/8638 11500/23922/8638 +f 11498/23918/8639 11494/23911/8639 11496/23915/8639 11499/23920/8639 +f 11477/23878/8617 11476/23877/8616 11497/23917/8640 11487/23897/8641 +f 11491/23906/8642 11490/23903/8642 11494/23911/8642 11498/23918/8642 +f 11476/23877/8643 11491/23907/8643 11498/23919/8643 11497/23917/8643 +f 11490/23904/8644 11480/23883/8644 11486/23896/8644 11494/23912/8644 +f 11501/23923/8645 11502/23925/8645 11503/23927/8646 11504/23928/8646 +f 11492/23908/8647 11505/23931/8647 11506/23932/8647 11507/23934/8647 +f 11508/23937/8648 11509/23939/8648 11510/23941/8648 11511/23942/8648 +f 11496/23914/8649 11495/23913/8649 11512/23945/8649 11513/23947/8649 +f 11485/23894/8650 11489/23901/8650 11493/23910/8650 11514/23951/8650 +f 11488/23899/8651 11487/23897/8651 11505/23931/8651 11492/23908/8651 +f 11486/23896/8628 11485/23895/8627 11514/23950/8652 11495/23913/8653 +f 11487/23897/8641 11497/23917/8640 11500/23921/8654 11505/23931/8655 +f 11445/23828/8656 11444/23826/8656 11515/23952/8656 11516/23954/8656 +f 11460/23850/8657 11517/23955/8657 11518/23957/8657 11519/23961/8657 +f 11461/23851/8658 11459/23849/8658 11520/23962/8658 11521/23964/8658 +f 11517/23956/8659 11462/23853/8660 11522/23966/8661 11518/23958/8662 +f 11451/23837/8663 11469/23865/8663 11517/23955/8663 11460/23850/8663 +f 11442/23823/8590 11441/23821/8589 11445/23828/8664 11458/23847/8665 +f 11449/23834/8666 11448/23832/8666 11459/23849/8666 11461/23851/8666 +f 11469/23866/8667 11455/23843/8667 11462/23853/8660 11517/23956/8659 +f 11519/23960/8668 11518/23959/8668 11523/23968/8668 11524/23971/8668 +f 11521/23964/8669 11520/23962/8669 11525/23972/8669 11526/23975/8669 +f 11518/23959/8662 11522/23967/8661 11527/23978/8670 11523/23968/8671 +f 11522/23967/8672 11521/23965/8672 11526/23976/8672 11527/23978/8672 +f 11458/23847/8665 11445/23828/8664 11516/23954/8673 11528/23980/8674 +f 11444/23827/8675 11460/23850/8675 11519/23961/8675 11515/23953/8675 +f 11459/23849/8676 11458/23848/8676 11528/23979/8676 11520/23962/8676 +f 11462/23854/8677 11461/23852/8677 11521/23965/8677 11522/23967/8677 +f 11527/23978/8678 11526/23976/8678 11529/23981/8678 11530/23983/8678 +f 11525/23973/8679 11531/23984/8679 11532/23985/8679 11533/23987/8679 +f 11534/23989/8680 11524/23969/8680 11535/23992/8680 11536/23994/8680 +f 11531/23984/8681 11537/23996/8682 11538/23997/8683 11532/23985/8684 +f 11516/23954/8685 11515/23952/8685 11534/23991/8685 11537/23996/8685 +f 11528/23980/8674 11516/23954/8673 11537/23996/8682 11531/23984/8681 +f 11515/23953/8686 11519/23961/8686 11524/23970/8686 11534/23990/8686 +f 11520/23963/8687 11528/23980/8687 11531/23984/8687 11525/23973/8687 +f 11536/23994/8688 11535/23992/8688 11509/23939/8688 11508/23937/8688 +f 11532/23985/8684 11538/23997/8683 11539/23998/8689 11540/24000/8689 +f 11538/23997/8690 11536/23995/8690 11508/23938/8691 11539/23998/8691 +f 11535/23992/8692 11541/24001/8692 11501/23924/8693 11509/23939/8694 +f 11523/23968/8671 11527/23978/8670 11530/23983/8695 11541/24002/8696 +f 11526/23977/8697 11525/23974/8697 11533/23988/8697 11529/23982/8697 +f 11524/23971/8698 11523/23968/8698 11541/24002/8698 11535/23993/8698 +f 11537/23996/8699 11534/23991/8699 11536/23995/8699 11538/23997/8699 +f 11542/24003/8700 11543/24005/8700 11544/24006/8700 11545/24008/8700 +f 11495/23913/8653 11514/23950/8652 11546/24011/8701 11512/23945/8701 +f 11543/24005/8702 11540/23999/8702 11547/24014/8703 11544/24006/8703 +f 11505/23931/8655 11500/23921/8654 11548/24017/8704 11506/23932/8704 +f 11533/23988/8705 11532/23986/8705 11540/23999/8702 11543/24005/8702 +f 11530/23983/8706 11529/23981/8706 11542/24004/8707 11502/23925/8708 +f 11541/24002/8696 11530/23983/8695 11502/23925/8645 11501/23923/8645 +f 11529/23982/8709 11533/23988/8709 11543/24005/8709 11542/24003/8709 +f 11549/24020/8710 11507/23935/8710 11506/23933/8710 11548/24018/8710 +f 11513/23948/8710 11549/24020/8710 11548/24018/8710 11550/24021/8711 +f 11512/23946/8710 11546/24012/8710 11549/24020/8710 11513/23948/8710 +f 11546/24012/8710 11551/24023/8711 11507/23935/8710 11549/24020/8710 +f 11552/24025/8712 11511/23943/8712 11510/23940/8712 11504/23929/8712 +f 11545/24009/8712 11552/24025/8712 11504/23929/8712 11503/23926/8712 +f 11544/24007/8713 11547/24015/8713 11552/24025/8712 11545/24009/8712 +f 11547/24015/8713 11553/24026/8712 11511/23943/8712 11552/24025/8712 +f 11500/23922/8714 11499/23920/8714 11550/24022/8714 11548/24019/8714 +f 11540/24000/8689 11539/23998/8689 11553/24027/8715 11547/24016/8715 +f 11514/23951/8716 11493/23910/8716 11551/24024/8716 11546/24013/8716 +f 11502/23925/8708 11542/24004/8707 11545/24010/8717 11503/23927/8717 +f 11499/23920/8718 11496/23915/8718 11513/23949/8718 11550/24022/8718 +f 11539/23998/8691 11508/23938/8691 11511/23944/8719 11553/24027/8719 +f 11493/23910/8720 11492/23909/8720 11507/23936/8720 11551/24024/8720 +f 11509/23939/8694 11501/23924/8693 11504/23930/8721 11510/23941/8721 +f 11554/24029/8582 11555/24030/8582 11556/24031/8583 11557/24033/8584 +f 11558/24034/8722 11557/24032/8722 11559/24036/8723 11560/24037/8724 +f 11561/24038/8598 11562/24040/8598 11563/24043/8598 11564/24045/8598 +f 11565/24047/8592 11566/24048/8592 11561/24039/8592 11567/24051/8592 +f 11568/24053/8593 11555/24030/8593 11569/24054/8593 11570/24055/8593 +f 11571/24057/8594 11568/24052/8594 11570/24056/8594 11572/24058/8594 +f 11573/24059/8594 11574/24060/8594 11568/24052/8594 11571/24057/8594 +f 11574/24061/8596 11556/24031/8596 11555/24030/8593 11568/24053/8593 +f 11575/24062/8725 11565/24046/8725 11567/24050/8725 11576/24063/8725 +f 11558/24034/8725 11577/24065/8725 11565/24046/8725 11575/24062/8725 +f 11577/24064/8592 11578/24066/8592 11566/24048/8592 11565/24047/8592 +f 11570/24055/8599 11569/24054/8599 11579/24068/8599 11580/24070/8599 +f 11576/24063/8726 11567/24050/8726 11581/24071/8726 11582/24073/8726 +f 11583/24074/8727 11576/24063/8728 11582/24073/8729 11584/24076/8730 +f 11566/24049/8601 11585/24078/8601 11562/24040/8601 11561/24038/8601 +f 11578/24067/8601 11586/24080/8601 11585/24078/8601 11566/24049/8601 +f 11574/24060/8603 11573/24059/8603 11587/24081/8603 11588/24083/8603 +f 11578/24066/8604 11577/24064/8604 11589/24084/8604 11590/24086/8604 +f 11573/24059/8731 11586/24079/8731 11591/24089/8732 11587/24081/8733 +f 11575/24062/8734 11554/24028/8734 11557/24032/8722 11558/24034/8722 +f 11576/24063/8728 11583/24074/8727 11554/24028/8734 11575/24062/8734 +f 11583/24075/8582 11569/24054/8582 11555/24030/8582 11554/24029/8582 +f 11592/24090/8624 11588/24082/8624 11593/24092/8624 11594/24094/8624 +f 11589/24085/8607 11560/24037/8607 11595/24096/8607 11596/24098/8607 +f 11591/24088/8608 11590/24087/8608 11597/24099/8608 11598/24102/8608 +f 11590/24086/8609 11589/24084/8609 11596/24097/8609 11597/24101/8609 +f 11556/24031/8596 11574/24061/8596 11588/24082/8612 11592/24090/8612 +f 11586/24080/8613 11578/24067/8613 11590/24087/8613 11591/24088/8613 +f 11557/24033/8584 11556/24031/8583 11592/24090/8614 11559/24035/8614 +f 11577/24065/8735 11558/24034/8735 11560/24037/8735 11589/24085/8735 +f 11598/24103/8633 11597/24100/8633 11599/24107/8633 11600/24108/8633 +f 11597/24101/8736 11596/24097/8736 11601/24109/8736 11599/24105/8736 +f 11602/24113/8611 11598/24103/8737 11600/24108/8738 11603/24114/8617 +f 11595/24096/8739 11604/24116/8740 11605/24117/8741 11606/24118/8742 +f 11559/24035/8625 11592/24090/8625 11594/24094/8625 11604/24115/8625 +f 11588/24083/8743 11587/24081/8743 11602/24112/8743 11593/24091/8743 +f 11560/24037/8724 11559/24036/8723 11604/24116/8740 11595/24096/8739 +f 11587/24081/8733 11591/24089/8732 11598/24104/8737 11602/24112/8611 +f 11606/24118/8742 11605/24117/8741 11607/24120/8744 11608/24121/8745 +f 11609/24124/8629 11603/24114/8629 11610/24125/8629 11611/24126/8629 +f 11605/24117/8630 11612/24130/8630 11613/24131/8630 11607/24120/8630 +f 11612/24128/8631 11609/24122/8631 11611/24127/8631 11613/24132/8631 +f 11596/24098/8746 11595/24096/8746 11606/24118/8746 11601/24111/8746 +f 11594/24094/8747 11593/24092/8747 11609/24123/8747 11612/24129/8747 +f 11604/24116/8623 11594/24095/8623 11612/24130/8623 11605/24117/8623 +f 11593/24093/8622 11602/24113/8622 11603/24114/8622 11609/24124/8622 +f 11611/24126/8748 11610/24125/8748 11614/24133/8748 11615/24134/8748 +f 11607/24119/8650 11613/24132/8650 11616/24136/8650 11617/24138/8650 +f 11613/24132/8636 11611/24127/8636 11615/24135/8636 11616/24136/8636 +f 11618/24139/8749 11608/24121/8749 11619/24141/8749 11620/24142/8749 +f 11603/24114/8617 11600/24108/8738 11621/24144/8750 11610/24125/8751 +f 11599/24106/8642 11601/24110/8642 11618/24140/8642 11622/24147/8642 +f 11600/24108/8643 11599/24107/8643 11622/24146/8643 11621/24144/8643 +f 11601/24111/8752 11606/24118/8752 11608/24121/8752 11618/24139/8752 +f 11623/24148/8753 11624/24150/8753 11625/24152/8646 11626/24153/8646 +f 11615/24134/8754 11614/24133/8754 11627/24156/8754 11628/24158/8754 +f 11629/24162/8648 11630/24164/8648 11631/24166/8648 11632/24167/8648 +f 11620/24142/8649 11619/24141/8649 11633/24171/8649 11634/24173/8649 +f 11608/24121/8745 11607/24120/8744 11617/24137/8755 11619/24141/8756 +f 11610/24125/8751 11621/24144/8750 11635/24177/8757 11614/24133/8655 +f 11622/24147/8639 11618/24140/8639 11620/24143/8639 11636/24179/8639 +f 11621/24145/8638 11622/24147/8638 11636/24179/8638 11635/24178/8638 +f 11579/24068/8657 11584/24077/8657 11637/24180/8657 11638/24182/8657 +f 11581/24072/8658 11564/24044/8658 11639/24186/8658 11640/24188/8658 +f 11584/24076/8730 11582/24073/8729 11641/24189/8758 11637/24181/8759 +f 11582/24073/8760 11581/24071/8760 11640/24187/8760 11641/24189/8760 +f 11572/24058/8591 11570/24056/8591 11580/24069/8591 11642/24190/8591 +f 11569/24054/8663 11583/24075/8663 11584/24077/8663 11579/24068/8663 +f 11562/24041/8761 11572/24058/8761 11642/24190/8664 11563/24042/8665 +f 11567/24051/8666 11561/24039/8666 11564/24044/8666 11581/24072/8666 +f 11637/24181/8759 11641/24189/8758 11643/24191/8762 11644/24192/8763 +f 11641/24189/8764 11640/24187/8764 11645/24194/8764 11643/24191/8764 +f 11639/24184/8687 11646/24198/8687 11647/24199/8687 11648/24200/8687 +f 11649/24204/8686 11638/24182/8686 11650/24206/8686 11651/24209/8686 +f 11642/24190/8656 11580/24069/8656 11649/24203/8656 11652/24212/8656 +f 11563/24042/8665 11642/24190/8664 11652/24212/8673 11646/24196/8674 +f 11580/24070/8675 11579/24068/8675 11638/24182/8675 11649/24204/8675 +f 11564/24045/8676 11563/24043/8676 11646/24197/8676 11639/24185/8676 +f 11648/24200/8679 11647/24199/8679 11653/24214/8679 11654/24216/8679 +f 11651/24210/8680 11650/24207/8680 11655/24219/8680 11656/24221/8680 +f 11647/24199/8681 11657/24222/8682 11658/24223/8683 11653/24214/8684 +f 11657/24222/8699 11651/24211/8699 11656/24220/8699 11658/24223/8699 +f 11640/24188/8669 11639/24186/8669 11648/24201/8669 11645/24193/8669 +f 11638/24183/8668 11637/24181/8668 11644/24192/8668 11650/24208/8668 +f 11652/24213/8685 11649/24205/8685 11651/24211/8685 11657/24222/8685 +f 11646/24198/8674 11652/24213/8673 11657/24222/8682 11647/24199/8681 +f 11658/24223/8690 11656/24220/8690 11629/24163/8691 11659/24224/8691 +f 11655/24219/8692 11660/24225/8692 11623/24149/8693 11630/24164/8694 +f 11661/24227/8765 11654/24217/8765 11662/24229/8765 11663/24230/8765 +f 11660/24226/8766 11664/24232/8767 11624/24150/8753 11623/24148/8753 +f 11643/24191/8768 11645/24194/8768 11661/24228/8768 11664/24232/8768 +f 11644/24192/8763 11643/24191/8762 11664/24232/8767 11660/24226/8766 +f 11645/24195/8769 11648/24202/8769 11654/24217/8769 11661/24227/8769 +f 11650/24208/8698 11644/24192/8698 11660/24226/8698 11655/24218/8698 +f 11663/24230/8770 11662/24229/8770 11665/24233/8770 11666/24235/8770 +f 11619/24141/8756 11617/24137/8755 11667/24239/8771 11633/24171/8771 +f 11614/24133/8655 11635/24177/8757 11668/24242/8704 11627/24156/8704 +f 11662/24229/8702 11669/24245/8702 11670/24247/8703 11665/24233/8703 +f 11653/24214/8684 11658/24223/8683 11659/24224/8689 11669/24246/8689 +f 11656/24221/8688 11655/24219/8688 11630/24164/8688 11629/24162/8688 +f 11654/24217/8705 11653/24215/8705 11669/24245/8702 11662/24229/8702 +f 11664/24232/8772 11661/24228/8772 11663/24231/8773 11624/24150/8774 +f 11671/24250/8710 11628/24159/8710 11627/24157/8710 11668/24243/8710 +f 11634/24174/8710 11671/24250/8710 11668/24243/8710 11672/24252/8711 +f 11633/24172/8710 11667/24240/8710 11671/24251/8710 11634/24175/8710 +f 11667/24240/8710 11673/24254/8711 11628/24160/8710 11671/24251/8710 +f 11674/24256/8712 11632/24168/8712 11631/24165/8712 11626/24154/8712 +f 11666/24236/8712 11674/24256/8712 11626/24154/8712 11625/24151/8712 +f 11665/24234/8713 11670/24248/8713 11674/24257/8712 11666/24237/8712 +f 11670/24248/8713 11675/24258/8712 11632/24169/8712 11674/24257/8712 +f 11635/24178/8714 11636/24179/8714 11672/24253/8714 11668/24244/8714 +f 11669/24246/8689 11659/24224/8689 11675/24259/8715 11670/24249/8715 +f 11617/24138/8716 11616/24136/8716 11673/24255/8716 11667/24241/8716 +f 11624/24150/8774 11663/24231/8773 11666/24238/8775 11625/24152/8775 +f 11636/24179/8718 11620/24143/8718 11634/24176/8718 11672/24253/8718 +f 11659/24224/8691 11629/24163/8691 11632/24170/8719 11675/24259/8719 +f 11616/24136/8720 11615/24135/8720 11628/24161/8720 11673/24255/8720 +f 11630/24164/8694 11623/24149/8693 11626/24155/8721 11631/24166/8721 +f 11420/23780/8568 11419/23777/8567 11682/24270/8776 11684/24275/8777 +f 11684/24275/8777 11682/24270/8776 11683/24272/8581 11685/24277/8580 +f 11410/23758/8573 11425/23790/8572 11678/24262/8778 11680/24267/8779 +f 11680/24267/8779 11678/24262/8778 11679/24264/8577 11681/24269/8576 +f 11430/23804/8570 11677/24261/8570 11682/24271/8570 11419/23778/8570 +f 11677/24261/8570 11676/24260/8570 11683/24273/8570 11682/24271/8570 +f 11425/23791/8570 11424/23789/8570 11676/24260/8570 11678/24263/8570 +f 11678/24263/8570 11676/24260/8570 11677/24261/8570 11679/24265/8570 +o Chair.036 +v -10.878399 0.415382 -0.501585 +v -10.878399 0.429951 -0.501585 +v -10.927951 0.429951 -0.504166 +v -11.329356 0.429951 -0.525076 +v -11.378907 0.429951 -0.527657 +v -11.378907 0.415382 -0.527657 +v -11.329356 0.415382 -0.525076 +v -10.927951 0.415382 -0.504166 +v -11.358899 0.429951 -0.911768 +v -11.358899 0.415382 -0.911768 +v -11.358899 0.400812 -0.911768 +v -11.313342 0.400812 -0.909395 +v -11.329356 0.400812 -0.525076 +v -11.378907 0.400812 -0.527657 +v -10.858391 0.415382 -0.885697 +v -10.858391 0.429951 -0.885697 +v -10.903948 0.415382 -0.888070 +v -10.903948 0.429951 -0.888070 +v -10.858391 0.400812 -0.885697 +v -10.903948 0.400812 -0.888070 +v -10.878399 0.400812 -0.501585 +v -10.927951 0.400812 -0.504166 +v -11.313342 0.415382 -0.909395 +v -11.313342 0.429951 -0.909395 +v -11.371104 0.438060 -0.719179 +v -11.376937 0.443651 -0.719483 +v -11.383756 0.443651 -0.588576 +v -11.377923 0.438060 -0.588272 +v -11.378099 0.429976 -0.588281 +v -11.379608 0.437950 -0.555919 +v -11.379649 0.430300 -0.558538 +v -11.390770 0.429903 -0.720204 +v -11.390594 0.437987 -0.720195 +v -11.383776 0.437987 -0.851101 +v -11.383951 0.429903 -0.851110 +v -11.378191 0.443828 -0.850810 +v -11.376532 0.439408 -0.882669 +v -11.382237 0.434055 -0.880626 +v -11.376864 0.424135 -0.719480 +v -11.384937 0.424311 -0.719900 +v -11.378119 0.424311 -0.850807 +v -11.370045 0.424135 -0.850386 +v -11.385010 0.443828 -0.719904 +v -11.370118 0.443651 -0.850390 +v -11.397413 0.437987 -0.589287 +v -11.391829 0.443828 -0.588996 +v -11.371281 0.429976 -0.719189 +v -11.364462 0.429976 -0.850095 +v -11.383683 0.424135 -0.588572 +v -11.391756 0.424311 -0.588993 +v -11.382582 0.426646 -0.877406 +v -11.376864 0.421521 -0.874868 +v -11.368463 0.439247 -0.882178 +v -11.368795 0.421360 -0.874376 +v -11.363091 0.426713 -0.876419 +v -11.397590 0.429903 -0.589296 +v -11.399097 0.437881 -0.556957 +v -11.393611 0.443408 -0.554781 +v -11.385134 0.424773 -0.560715 +v -11.393210 0.424940 -0.561078 +v -11.399137 0.430231 -0.559577 +v -11.364285 0.438060 -0.850086 +v -11.381121 0.420977 -0.530288 +v -11.386518 0.416357 -0.534149 +v -11.394597 0.416497 -0.534461 +v -11.400608 0.420919 -0.531348 +v -11.400689 0.427313 -0.526398 +v -11.385535 0.443241 -0.554417 +v -11.401843 0.402967 -0.507642 +v -11.402018 0.407418 -0.500893 +v -11.381201 0.427371 -0.525338 +v -11.382530 0.407458 -0.499817 +v -11.382357 0.403008 -0.506566 +v -11.395291 0.431932 -0.522538 +v -11.396688 0.410634 -0.495733 +v -11.387213 0.431793 -0.522225 +v -11.388606 0.410537 -0.495459 +v -11.383453 0.380352 -0.482096 +v -11.383224 0.378323 -0.489920 +v -11.402941 0.380334 -0.483182 +v -11.397651 0.381800 -0.477245 +v -11.389568 0.381756 -0.476995 +v -11.387686 0.399792 -0.511726 +v -11.395767 0.399889 -0.512000 +v -11.398463 0.345795 -0.461643 +v -11.390381 0.345756 -0.461394 +v -11.388513 0.376856 -0.495858 +v -11.384030 0.342751 -0.474424 +v -11.389318 0.341467 -0.480405 +v -11.402709 0.378304 -0.491006 +v -11.396595 0.376901 -0.496107 +v -11.397400 0.341506 -0.480653 +v -11.403517 0.342735 -0.475510 +v -11.359124 0.349401 -0.949162 +v -11.359718 0.348454 -0.941153 +v -11.357579 -0.002953 -0.982202 +v -11.356986 -0.002007 -0.990211 +v -11.403751 0.344511 -0.467625 +v -11.408260 0.001491 -0.381060 +v -11.402972 0.002774 -0.375077 +v -11.372732 0.350077 -0.955606 +v -11.364668 0.350056 -0.955011 +v -11.362530 -0.001352 -0.996060 +v -11.370594 -0.001331 -0.996656 +v -11.388538 -0.000270 -0.387858 +v -11.393826 -0.001553 -0.393839 +v -11.384264 0.344527 -0.466538 +v -11.374922 0.425574 -0.913571 +v -11.380729 0.421603 -0.909585 +v -11.362745 0.434122 -0.879640 +v -11.361236 0.421652 -0.908623 +v -11.366856 0.425454 -0.913022 +v -11.375593 0.412305 -0.899275 +v -11.367527 0.412185 -0.898725 +v -11.361721 0.416156 -0.902712 +v -11.360106 0.403231 -0.930294 +v -11.365665 0.405075 -0.935870 +v -11.374616 0.398698 -0.918052 +v -11.366550 0.398640 -0.917466 +v -11.360681 0.400566 -0.922682 +v -11.381213 0.416106 -0.903673 +v -11.365766 0.371230 -0.932534 +v -11.359886 0.372479 -0.937941 +v -11.380174 0.400542 -0.923628 +v -11.379379 0.372464 -0.938885 +v -11.373830 0.371267 -0.933127 +v -11.373730 0.405133 -0.936457 +v -11.364847 0.375406 -0.951577 +v -11.372911 0.375443 -0.952169 +v -11.379601 0.403207 -0.931241 +v -11.378793 0.374194 -0.946763 +v -11.378618 0.349392 -0.950104 +v -11.379211 0.348446 -0.942096 +v -11.359298 0.374209 -0.945818 +v -11.365603 0.347770 -0.935650 +v -11.373668 0.347791 -0.936247 +v -11.371530 -0.003617 -0.977296 +v -11.363465 -0.003637 -0.976701 +v -11.388773 0.001507 -0.379972 +v -11.377073 -0.002962 -0.983145 +v -11.408026 -0.000286 -0.388944 +v -11.398400 0.000611 -0.384458 +v -11.401909 -0.001514 -0.394088 +v -11.394890 0.002736 -0.374829 +v -11.367030 -0.002484 -0.986678 +v -11.376480 -0.002015 -0.991153 +v -10.848269 0.438060 -0.691945 +v -10.854103 0.443651 -0.692249 +v -10.860922 0.443651 -0.561341 +v -10.855089 0.438060 -0.561037 +v -10.855265 0.429976 -0.561046 +v -10.856774 0.437950 -0.528684 +v -10.856813 0.430300 -0.531304 +v -10.855284 0.424311 -0.823572 +v -10.861117 0.429903 -0.823876 +v -10.859747 0.426646 -0.850171 +v -10.854031 0.421521 -0.847633 +v -10.854030 0.424135 -0.692245 +v -10.862103 0.424311 -0.692665 +v -10.847211 0.424135 -0.823151 +v -10.862176 0.443828 -0.692669 +v -10.847284 0.443651 -0.823155 +v -10.855357 0.443828 -0.823576 +v -10.867761 0.437987 -0.692960 +v -10.860941 0.437987 -0.823866 +v -10.874579 0.437987 -0.562052 +v -10.868995 0.443828 -0.561762 +v -10.848446 0.429976 -0.691954 +v -10.841626 0.429976 -0.822860 +v -10.860849 0.424135 -0.561337 +v -10.868922 0.424311 -0.561758 +v -10.845628 0.439247 -0.854943 +v -10.853698 0.439408 -0.855434 +v -10.845962 0.421360 -0.847142 +v -10.840256 0.426713 -0.849185 +v -10.841451 0.438060 -0.822851 +v -10.839911 0.434122 -0.852405 +v -10.867936 0.429903 -0.692969 +v -10.874755 0.429903 -0.562062 +v -10.876264 0.437881 -0.529722 +v -10.870777 0.443408 -0.527546 +v -10.862300 0.424773 -0.533480 +v -10.870377 0.424940 -0.533844 +v -10.876304 0.430231 -0.532342 +v -10.862701 0.443241 -0.527182 +v -10.872457 0.431932 -0.495303 +v -10.864378 0.431793 -0.494990 +v -10.858286 0.420977 -0.503053 +v -10.863684 0.416357 -0.506913 +v -10.871762 0.416497 -0.507227 +v -10.877773 0.420919 -0.504113 +v -10.872932 0.399889 -0.484765 +v -10.879008 0.402967 -0.480407 +v -10.864852 0.399792 -0.484491 +v -10.877855 0.427313 -0.499164 +v -10.879184 0.407418 -0.473658 +v -10.858367 0.427371 -0.498104 +v -10.859696 0.407458 -0.472582 +v -10.859521 0.403008 -0.479331 +v -10.860620 0.380352 -0.454861 +v -10.860388 0.378323 -0.462686 +v -10.873853 0.410634 -0.468498 +v -10.880107 0.380334 -0.455947 +v -10.874816 0.381800 -0.450010 +v -10.865772 0.410537 -0.468224 +v -10.866735 0.381756 -0.449760 +v -10.880917 0.344511 -0.440389 +v -10.875628 0.345795 -0.434408 +v -10.867547 0.345756 -0.434159 +v -10.861430 0.344527 -0.439303 +v -10.865679 0.376856 -0.468623 +v -10.861196 0.342751 -0.447189 +v -10.866484 0.341467 -0.453170 +v -10.879875 0.378304 -0.463771 +v -10.873760 0.376901 -0.468873 +v -10.836290 0.349401 -0.921927 +v -10.836884 0.348454 -0.913918 +v -10.834745 -0.002953 -0.954967 +v -10.834151 -0.002007 -0.962976 +v -10.885427 0.001491 -0.353825 +v -10.880138 0.002774 -0.347843 +v -10.849898 0.350077 -0.928372 +v -10.841834 0.350056 -0.927776 +v -10.839696 -0.001352 -0.968826 +v -10.847760 -0.001331 -0.969421 +v -10.865705 -0.000270 -0.360623 +v -10.870993 -0.001553 -0.366604 +v -10.880682 0.342735 -0.448275 +v -10.874565 0.341506 -0.453419 +v -10.838402 0.421652 -0.881388 +v -10.844021 0.425454 -0.885787 +v -10.852759 0.412305 -0.872040 +v -10.844693 0.412185 -0.871491 +v -10.838885 0.416156 -0.875477 +v -10.859404 0.434055 -0.853391 +v -10.837846 0.400566 -0.895447 +v -10.837273 0.403231 -0.903059 +v -10.843717 0.398640 -0.890231 +v -10.858379 0.416106 -0.876438 +v -10.857340 0.400542 -0.896393 +v -10.851781 0.398698 -0.890818 +v -10.852088 0.425574 -0.886337 +v -10.842832 0.405075 -0.908635 +v -10.850896 0.405133 -0.909222 +v -10.857895 0.421603 -0.882350 +v -10.856544 0.372464 -0.911651 +v -10.850996 0.371267 -0.905892 +v -10.842013 0.375406 -0.924342 +v -10.850077 0.375443 -0.924934 +v -10.856767 0.403207 -0.904006 +v -10.855958 0.374194 -0.919528 +v -10.855784 0.349392 -0.922869 +v -10.836464 0.374209 -0.918583 +v -10.842932 0.371230 -0.905300 +v -10.850834 0.347791 -0.909012 +v -10.842770 0.347770 -0.908417 +v -10.837050 0.372479 -0.910706 +v -10.848695 -0.003617 -0.950061 +v -10.840631 -0.003637 -0.949466 +v -10.865939 0.001507 -0.352738 +v -10.885192 -0.000286 -0.361709 +v -10.856378 0.348446 -0.914861 +v -10.854239 -0.002962 -0.955911 +v -10.875565 0.000611 -0.357223 +v -10.879075 -0.001514 -0.366853 +v -10.872056 0.002736 -0.347594 +v -10.844195 -0.002484 -0.959443 +v -10.853646 -0.002015 -0.963919 +v -11.040412 0.396685 -0.895178 +v -11.176877 0.396685 -0.902287 +v -11.040412 0.411254 -0.895178 +v -11.176877 0.411254 -0.902287 +v -11.061753 0.411254 -0.511136 +v -11.195555 0.411254 -0.518106 +v -11.176877 0.382115 -0.902287 +v -11.040412 0.382115 -0.895178 +v -11.195555 0.382115 -0.518106 +v -11.061752 0.382115 -0.511136 +vn 0.9772 -0.0000 -0.2124 +vn 0.4733 -0.7071 0.5253 +vn -0.0520 -0.0000 0.9986 +vn -0.5253 -0.7071 0.4733 +vn -0.6831 0.6667 0.2982 +vn -0.9986 -0.0000 -0.0520 +vn -0.0000 -1.0000 -0.0000 +vn -0.0681 -0.9977 -0.0031 +vn -0.0690 -0.9976 -0.0031 +vn 0.9986 -0.0000 0.0520 +vn 0.0520 -0.0000 -0.9986 +vn -0.0000 1.0000 -0.0000 +vn -0.0680 0.9977 -0.0040 +vn -0.0689 0.9976 -0.0041 +vn 0.0690 0.9976 0.0031 +vn 0.0681 0.9977 0.0031 +vn 0.0684 0.9977 0.0031 +vn 0.0687 0.9976 0.0031 +vn 0.0689 -0.9976 0.0041 +vn 0.0680 -0.9977 0.0040 +vn 0.0683 -0.9977 0.0040 +vn 0.0686 -0.9976 0.0041 +vn 0.6905 0.7224 0.0360 +vn 0.6857 0.7268 0.0386 +vn 0.6857 0.7269 0.0386 +vn 0.9984 -0.0225 0.0521 +vn 0.9984 -0.0215 0.0517 +vn 0.9988 -0.0204 0.0455 +vn -0.9984 0.0218 -0.0520 +vn -0.9983 0.0219 -0.0534 +vn -0.9983 0.0219 -0.0535 +vn -0.7082 0.6937 -0.1313 +vn -0.0217 -0.9998 -0.0011 +vn 0.0219 0.9998 0.0011 +vn -0.7214 0.6915 -0.0376 +vn -0.7170 0.6962 -0.0346 +vn 0.0213 0.9997 0.0072 +vn 0.7214 -0.6915 0.0376 +vn -0.6861 -0.7257 0.0514 +vn 0.0284 0.9903 -0.1358 +vn 0.7084 -0.6955 0.1204 +vn -0.6906 -0.7223 -0.0360 +vn -0.9984 0.0221 -0.0520 +vn -0.7126 0.7008 -0.0316 +vn -0.0223 -0.9995 0.0215 +vn -0.9988 0.0214 -0.0452 +vn -0.9984 0.0224 -0.0516 +vn 0.7222 -0.6683 -0.1786 +vn -0.6679 -0.6972 -0.2605 +vn -0.0055 -0.9532 -0.3024 +vn -0.9991 0.0184 -0.0387 +vn -0.9988 0.0214 -0.0443 +vn 0.0207 0.9997 0.0132 +vn -0.6803 -0.7326 -0.0233 +vn 0.6809 0.7313 0.0412 +vn 0.7103 -0.7022 0.0487 +vn -0.9994 0.0132 -0.0333 +vn -0.9991 0.0177 -0.0375 +vn 0.9991 -0.0175 0.0391 +vn 0.9988 -0.0204 0.0446 +vn 0.9991 -0.0172 0.0384 +vn 0.9993 -0.0124 0.0339 +vn -0.7349 0.5509 0.3956 +vn 0.6577 0.5748 0.4869 +vn 0.0038 0.9421 0.3354 +vn 0.6686 0.6901 0.2770 +vn -0.7244 0.6614 0.1944 +vn 0.9994 -0.0119 0.0336 +vn 0.9994 -0.0090 0.0322 +vn -0.7429 0.3812 0.5502 +vn 0.6493 0.3978 0.6482 +vn -0.0225 0.5403 0.8412 +vn 0.0098 -0.8044 -0.5940 +vn -0.6568 -0.5868 -0.4735 +vn 0.7328 -0.5625 -0.3828 +vn -0.0112 0.7833 0.6216 +vn -0.0262 0.3980 0.9170 +vn 0.7493 -0.2790 -0.6006 +vn -0.6503 -0.2912 -0.7016 +vn 0.0262 -0.4005 -0.9159 +vn -0.9995 0.0092 -0.0316 +vn -0.9994 0.0122 -0.0330 +vn 0.0216 -0.5692 -0.8219 +vn -0.6482 -0.4135 -0.6394 +vn 0.7411 -0.3964 -0.5419 +vn 0.9973 -0.0027 0.0737 +vn 0.9973 -0.0025 0.0737 +vn -0.7562 0.1694 0.6321 +vn 0.0734 0.1162 -0.9905 +vn 0.7561 -0.1695 -0.6321 +vn 0.6504 0.2899 0.7021 +vn -0.7494 0.2777 0.6010 +vn 0.9994 -0.0079 0.0326 +vn 0.9995 -0.0056 0.0317 +vn -0.9995 0.0054 -0.0308 +vn -0.9995 0.0070 -0.0313 +vn -0.6918 0.6472 -0.3202 +vn 0.6906 0.6748 -0.2602 +vn -0.0389 -0.9356 0.3509 +vn 0.9982 -0.0216 0.0551 +vn 0.9980 -0.0208 0.0602 +vn 0.9976 -0.0183 0.0662 +vn 0.9979 -0.0205 0.0612 +vn 0.6871 0.7239 -0.0627 +vn -0.9982 0.0227 -0.0553 +vn -0.9979 0.0218 -0.0606 +vn -0.0272 -0.9932 0.1136 +vn 0.9982 -0.0222 0.0549 +vn 0.6901 0.5630 -0.4547 +vn -0.0500 -0.8103 0.5838 +vn 0.9974 -0.0112 0.0710 +vn 0.9976 -0.0173 0.0672 +vn 0.6644 -0.5801 0.4712 +vn -0.9979 0.0211 -0.0614 +vn -0.9976 0.0187 -0.0665 +vn 0.0421 0.9128 -0.4062 +vn -0.6856 -0.6896 0.2331 +vn 0.6898 -0.6617 0.2938 +vn 0.6799 -0.3366 0.6515 +vn -0.7141 -0.3512 0.6056 +vn 0.0672 0.4682 -0.8811 +vn -0.9974 0.0114 -0.0714 +vn -0.9976 0.0175 -0.0676 +vn -0.9974 0.0104 -0.0719 +vn -0.9973 0.0032 -0.0738 +vn -0.6719 0.5405 -0.5063 +vn 0.0550 0.7463 -0.6633 +vn -0.6786 -0.6033 0.4190 +vn 0.0733 0.1344 -0.9882 +vn -0.9973 0.0027 -0.0736 +vn -0.6851 0.0928 -0.7225 +vn -0.6854 0.0866 -0.7230 +vn 0.7272 0.0969 -0.6795 +vn 0.7276 0.0905 -0.6800 +vn 0.7276 0.0904 -0.6800 +vn 0.9973 -0.0030 0.0728 +vn 0.9974 -0.0100 0.0710 +vn -0.0667 -0.4821 0.8736 +vn 0.7152 0.3437 -0.6086 +vn -0.6806 0.3294 -0.6545 +vn -0.0735 -0.1162 0.9905 +vn 0.9995 -0.0053 0.0309 +vn -0.7276 -0.0898 0.6801 +vn -0.7279 -0.0839 0.6805 +vn -0.9995 0.0053 -0.0309 +vn -0.7272 -0.0956 0.6797 +vn 0.6851 -0.0916 0.7226 +vn 0.6854 -0.0860 0.7231 +vn 0.6854 -0.0859 0.7231 +vn -0.0734 -0.1319 0.9885 +vn -0.0114 -0.9756 0.2194 +vn -0.0114 -0.9756 0.2195 +vn -0.0115 -0.9756 0.2195 +vn 0.0061 -0.9931 -0.1169 +vn 0.0060 -0.9931 -0.1169 +vn 0.0061 -0.9931 -0.1170 +vn -0.6540 -0.1770 -0.7355 +vn -0.9973 0.0025 -0.0736 +vn 0.6540 0.1770 0.7355 +vn 0.6856 -0.0803 0.7235 +vn 0.0286 -0.2449 -0.9691 +vn -0.6856 0.0803 -0.7235 +vn -0.0287 0.2449 0.9691 +vn 0.7279 0.0839 -0.6805 +vn 0.9984 -0.0221 0.0520 +vn 0.9984 -0.0224 0.0516 +vn 0.9988 -0.0214 0.0451 +vn 0.7083 -0.6956 0.1204 +vn 0.9983 -0.0219 0.0534 +vn 0.9983 -0.0219 0.0535 +vn 0.9979 -0.0218 0.0605 +vn 0.9982 -0.0228 0.0555 +vn -0.9984 0.0224 -0.0521 +vn -0.9987 0.0214 -0.0453 +vn -0.9984 0.0224 -0.0517 +vn 0.9984 -0.0218 0.0520 +vn 0.7221 -0.6683 -0.1787 +vn -0.0054 -0.9532 -0.3024 +vn 0.7103 -0.7023 0.0487 +vn -0.9991 0.0183 -0.0386 +vn -0.9994 0.0133 -0.0333 +vn 0.9991 -0.0183 0.0386 +vn 0.9988 -0.0214 0.0443 +vn 0.9991 -0.0178 0.0376 +vn 0.9994 -0.0131 0.0332 +vn 0.9994 -0.0122 0.0330 +vn 0.9995 -0.0094 0.0318 +vn 0.7328 -0.5626 -0.3829 +vn -0.0111 0.7833 0.6216 +vn -0.7349 0.5509 0.3955 +vn -0.7494 0.2777 0.6011 +vn -0.9995 0.0091 -0.0316 +vn -0.9994 0.0123 -0.0330 +vn 0.7410 -0.3964 -0.5420 +vn 0.9973 -0.0027 0.0736 +vn 0.9973 -0.0025 0.0736 +vn -0.7561 0.1695 0.6321 +vn 0.9995 -0.0070 0.0313 +vn 0.9995 -0.0058 0.0305 +vn -0.9995 0.0055 -0.0309 +vn 0.9976 -0.0187 0.0665 +vn 0.9979 -0.0210 0.0614 +vn 0.6898 -0.6618 0.2938 +vn -0.9982 0.0221 -0.0548 +vn -0.9982 0.0227 -0.0552 +vn -0.9979 0.0218 -0.0605 +vn 0.9974 -0.0114 0.0714 +vn 0.9976 -0.0176 0.0676 +vn 0.6643 -0.5802 0.4713 +vn -0.0733 -0.1319 0.9886 +vn 0.9974 -0.0104 0.0719 +vn 0.9973 -0.0032 0.0738 +vn 0.6798 -0.3367 0.6515 +vn -0.0734 -0.1162 0.9905 +vn 0.6850 -0.0916 0.7228 +vn 0.6853 -0.0860 0.7232 +vn 0.6853 -0.0859 0.7232 +vn 0.6856 -0.0803 0.7236 +vn -0.0687 -0.9976 -0.0031 +vn -0.0684 -0.9977 -0.0031 +vn -0.0686 0.9976 -0.0041 +vn -0.0683 0.9977 -0.0040 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.973130 0.033128 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.677629 0.482142 +vt 0.409642 -0.009898 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.669677 0.481452 +vt 0.240570 0.058726 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +vt 0.296927 -0.019617 +vt 0.353285 -0.019617 +vt 0.470812 0.481452 +vt 0.296927 0.014692 +vt 0.271947 0.481452 +vt 0.353285 0.014692 +vt -0.849112 0.025953 +vt 0.468872 0.000137 +vt -0.911121 0.025955 +vt 0.273887 0.000137 +vt 0.475153 0.482142 +vt 0.353285 -0.053929 +vt 0.272677 0.482143 +vt 0.296927 -0.053929 +vt -0.911121 -0.024667 +vt 0.473178 0.006015 +vt -0.849112 -0.024667 +vt 0.274652 0.006015 +s 1 +usemtl Wood +f 11686/24279/8780 11687/24281/8781 11688/24284/8782 11958/24793/8782 11959/24795/8782 11689/24286/8782 11690/24288/8783 11691/24292/8784 11692/24293/8782 11693/24294/8782 +f 11691/24291/8784 11690/24289/8783 11694/24296/8785 11695/24299/8785 +f 11696/24301/8786 11697/24304/8787 11698/24307/8788 11699/24308/8786 +f 11700/24312/8789 11701/24313/8789 11687/24282/8781 11686/24278/8780 +f 11701/24314/8790 11700/24311/8790 11702/24316/8790 11703/24318/8790 +f 11704/24319/8790 11705/24322/8790 11702/24316/8790 11700/24311/8790 +f 11704/24320/8789 11700/24312/8789 11686/24278/8780 11706/24324/8789 +f 11699/24309/8785 11691/24291/8784 11695/24299/8785 11696/24302/8785 +f 11706/24325/8782 11686/24279/8782 11693/24294/8782 11692/24293/8782 11691/24292/8782 11699/24310/8782 11698/24306/8782 11962/24801/8782 11963/24803/8782 11707/24328/8782 +f 11699/24310/8782 11698/24306/8782 11692/24293/8782 11691/24292/8782 +f 11693/24295/8790 11686/24280/8790 11706/24326/8790 11707/24329/8790 +f 11957/24792/8790 11955/24788/8790 11708/24331/8790 11709/24332/8790 +f 11695/24300/8790 11694/24297/8790 11709/24332/8790 11708/24331/8790 +f 11954/24787/8790 11702/24316/8790 11705/24322/8790 11961/24800/8790 +f 11697/24305/8790 11696/24303/8790 11695/24300/8790 11708/24331/8790 +f 11701/24315/8791 11703/24317/8792 11688/24285/8793 11687/24283/8791 +f 11689/24287/8794 11709/24333/8795 11694/24298/8791 11690/24290/8791 +f 11959/24796/8796 11957/24791/8797 11709/24333/8795 11689/24287/8794 +f 11707/24330/8798 11705/24323/8799 11704/24321/8786 11706/24327/8786 +f 11963/24804/8800 11961/24799/8801 11705/24323/8799 11707/24330/8798 +f 11710/24334/8802 11711/24335/8802 11712/24336/8803 11713/24338/8804 +f 11714/24339/8805 11713/24337/8805 11715/24342/8806 11716/24344/8807 +f 11717/24346/8808 11718/24347/8808 11719/24348/8809 11720/24350/8810 +f 11719/24348/8811 11721/24351/8811 11722/24353/8811 11723/24355/8811 +f 11724/24357/8812 11725/24358/8812 11726/24359/8812 11727/24361/8812 +f 11728/24363/8813 11711/24335/8813 11729/24364/8813 11721/24352/8813 +f 11718/24347/8814 11728/24362/8814 11721/24351/8814 11719/24348/8814 +f 11730/24365/8815 11731/24366/8815 11728/24362/8814 11718/24347/8814 +f 11731/24367/8816 11712/24336/8816 11711/24335/8813 11728/24363/8813 +f 11732/24368/8817 11724/24356/8817 11727/24360/8817 11733/24369/8817 +f 11714/24340/8817 11734/24372/8817 11724/24356/8817 11732/24368/8817 +f 11734/24371/8812 11735/24373/8812 11725/24358/8812 11724/24357/8812 +f 11726/24359/8818 11720/24349/8818 11736/24375/8818 11737/24376/8818 +f 11721/24352/8819 11729/24364/8819 11738/24377/8819 11722/24354/8819 +f 11733/24369/8820 11727/24360/8820 11739/24379/8820 11740/24381/8820 +f 11725/24358/8821 11717/24345/8821 11720/24349/8821 11726/24359/8821 +f 11735/24373/8821 11741/24383/8821 11717/24345/8821 11725/24358/8821 +f 11741/24382/8822 11730/24365/8822 11718/24347/8808 11717/24346/8808 +f 11731/24366/8815 11730/24365/8815 11742/24384/8823 11743/24386/8823 +f 11735/24373/8824 11734/24371/8824 11744/24387/8824 11745/24389/8824 +f 11730/24365/8822 11741/24382/8822 11746/24390/8825 11742/24384/8826 +f 11747/24392/8802 11729/24364/8802 11711/24335/8802 11710/24334/8802 +f 11744/24388/8827 11716/24343/8827 11748/24395/8827 11749/24397/8827 +f 11746/24391/8828 11745/24389/8828 11750/24398/8828 11751/24400/8828 +f 11745/24389/8829 11744/24387/8829 11749/24396/8829 11750/24398/8829 +f 11742/24384/8826 11746/24390/8825 11751/24401/8830 11752/24402/8831 +f 11712/24336/8816 11731/24367/8816 11743/24385/8832 11753/24403/8832 +f 11741/24383/8833 11735/24373/8833 11745/24389/8833 11746/24391/8833 +f 11713/24338/8804 11712/24336/8803 11753/24403/8834 11715/24341/8834 +f 11734/24372/8835 11714/24340/8835 11716/24343/8835 11744/24388/8835 +f 11752/24402/8831 11751/24401/8830 11754/24404/8836 11755/24405/8837 +f 11748/24395/8838 11756/24406/8839 11757/24409/8840 11758/24410/8841 +f 11759/24411/8842 11752/24402/8842 11755/24405/8842 11760/24413/8842 +f 11756/24406/8843 11761/24416/8843 11762/24418/8843 11757/24409/8843 +f 11753/24403/8844 11743/24385/8844 11759/24412/8844 11761/24417/8844 +f 11715/24341/8845 11753/24403/8845 11761/24417/8845 11756/24407/8845 +f 11743/24386/8846 11742/24384/8846 11752/24402/8846 11759/24411/8846 +f 11716/24344/8807 11715/24342/8806 11756/24408/8839 11748/24394/8838 +f 11758/24410/8841 11757/24409/8840 11763/24422/8847 11764/24423/8848 +f 11760/24413/8849 11755/24405/8849 11765/24424/8849 11766/24426/8849 +f 11757/24409/8850 11762/24418/8850 11767/24427/8850 11763/24422/8850 +f 11762/24419/8851 11760/24414/8851 11766/24425/8851 11767/24428/8851 +f 11750/24398/8852 11749/24396/8852 11768/24429/8852 11769/24432/8852 +f 11751/24401/8853 11750/24399/8853 11769/24434/8853 11754/24404/8853 +f 11749/24397/8854 11748/24395/8854 11758/24410/8854 11768/24431/8854 +f 11761/24417/8855 11759/24412/8855 11760/24415/8855 11762/24420/8855 +f 11767/24428/8856 11766/24425/8856 11770/24436/8856 11771/24437/8856 +f 11772/24439/8857 11764/24423/8857 11773/24440/8857 11774/24441/8857 +f 11775/24443/8858 11776/24445/8858 11777/24447/8858 11778/24449/8858 +f 11776/24445/8859 11772/24438/8859 11774/24442/8859 11777/24447/8859 +f 11755/24405/8837 11754/24404/8836 11775/24444/8860 11765/24424/8861 +f 11769/24433/8862 11768/24430/8862 11772/24438/8862 11776/24445/8862 +f 11754/24404/8863 11769/24434/8863 11776/24446/8863 11775/24444/8863 +f 11768/24431/8864 11758/24410/8864 11764/24423/8864 11772/24439/8864 +f 11779/24450/8865 11780/24452/8865 11781/24454/8866 11782/24455/8866 +f 11770/24435/8867 11783/24458/8867 11784/24459/8867 11785/24461/8867 +f 11786/24464/8868 11787/24466/8868 11788/24468/8868 11789/24469/8868 +f 11774/24441/8869 11773/24440/8869 11790/24472/8869 11791/24474/8869 +f 11763/24421/8870 11767/24428/8870 11771/24437/8870 11792/24478/8870 +f 11766/24426/8871 11765/24424/8871 11783/24458/8871 11770/24435/8871 +f 11764/24423/8848 11763/24422/8847 11792/24477/8872 11773/24440/8873 +f 11765/24424/8861 11775/24444/8860 11778/24448/8874 11783/24458/8875 +f 11723/24355/8876 11722/24353/8876 11793/24479/8876 11794/24481/8876 +f 11738/24377/8877 11795/24482/8877 11796/24484/8877 11797/24488/8877 +f 11739/24378/8878 11737/24376/8878 11798/24489/8878 11799/24491/8878 +f 11795/24483/8879 11740/24380/8880 11800/24493/8881 11796/24485/8882 +f 11729/24364/8883 11747/24392/8883 11795/24482/8883 11738/24377/8883 +f 11720/24350/8810 11719/24348/8809 11723/24355/8884 11736/24374/8885 +f 11727/24361/8886 11726/24359/8886 11737/24376/8886 11739/24378/8886 +f 11747/24393/8887 11733/24370/8887 11740/24380/8880 11795/24483/8879 +f 11797/24487/8888 11796/24486/8888 11801/24495/8888 11802/24498/8888 +f 11799/24491/8889 11798/24489/8889 11803/24499/8889 11804/24502/8889 +f 11796/24486/8882 11800/24494/8881 11805/24505/8890 11801/24495/8891 +f 11800/24494/8892 11799/24492/8892 11804/24503/8892 11805/24505/8892 +f 11736/24374/8885 11723/24355/8884 11794/24481/8893 11806/24507/8894 +f 11722/24354/8895 11738/24377/8895 11797/24488/8895 11793/24480/8895 +f 11737/24376/8896 11736/24375/8896 11806/24506/8896 11798/24489/8896 +f 11740/24381/8897 11739/24379/8897 11799/24492/8897 11800/24494/8897 +f 11805/24505/8898 11804/24503/8898 11807/24508/8898 11808/24510/8898 +f 11803/24500/8899 11809/24511/8899 11810/24512/8899 11811/24514/8899 +f 11812/24516/8900 11802/24496/8900 11813/24519/8900 11814/24521/8900 +f 11809/24511/8901 11815/24523/8902 11816/24524/8903 11810/24512/8904 +f 11794/24481/8905 11793/24479/8905 11812/24518/8905 11815/24523/8905 +f 11806/24507/8894 11794/24481/8893 11815/24523/8902 11809/24511/8901 +f 11793/24480/8906 11797/24488/8906 11802/24497/8906 11812/24517/8906 +f 11798/24490/8907 11806/24507/8907 11809/24511/8907 11803/24500/8907 +f 11814/24521/8908 11813/24519/8908 11787/24466/8908 11786/24464/8908 +f 11810/24512/8904 11816/24524/8903 11817/24525/8909 11818/24527/8909 +f 11816/24524/8910 11814/24522/8910 11786/24465/8911 11817/24525/8911 +f 11813/24519/8912 11819/24528/8912 11779/24451/8913 11787/24466/8914 +f 11801/24495/8891 11805/24505/8890 11808/24510/8915 11819/24529/8916 +f 11804/24504/8917 11803/24501/8917 11811/24515/8917 11807/24509/8917 +f 11802/24498/8918 11801/24495/8918 11819/24529/8918 11813/24520/8918 +f 11815/24523/8919 11812/24518/8919 11814/24522/8919 11816/24524/8919 +f 11820/24530/8920 11821/24532/8920 11822/24533/8920 11823/24535/8920 +f 11773/24440/8873 11792/24477/8872 11824/24538/8921 11790/24472/8921 +f 11821/24532/8922 11818/24526/8922 11825/24541/8923 11822/24533/8923 +f 11783/24458/8875 11778/24448/8874 11826/24544/8924 11784/24459/8924 +f 11811/24515/8925 11810/24513/8925 11818/24526/8922 11821/24532/8922 +f 11808/24510/8926 11807/24508/8926 11820/24531/8927 11780/24452/8928 +f 11819/24529/8916 11808/24510/8915 11780/24452/8865 11779/24450/8865 +f 11807/24509/8929 11811/24515/8929 11821/24532/8929 11820/24530/8929 +f 11827/24547/8930 11785/24462/8930 11784/24460/8930 11826/24545/8930 +f 11791/24475/8931 11827/24547/8930 11826/24545/8930 11828/24548/8930 +f 11790/24473/8932 11824/24539/8931 11827/24547/8930 11791/24475/8931 +f 11824/24539/8931 11829/24550/8930 11785/24462/8930 11827/24547/8930 +f 11830/24552/8933 11789/24470/8933 11788/24467/8934 11782/24456/8933 +f 11823/24536/8933 11830/24552/8933 11782/24456/8933 11781/24453/8933 +f 11822/24534/8935 11825/24542/8935 11830/24552/8933 11823/24536/8933 +f 11825/24542/8935 11831/24553/8935 11789/24470/8933 11830/24552/8933 +f 11778/24449/8936 11777/24447/8936 11828/24549/8936 11826/24546/8936 +f 11818/24527/8909 11817/24525/8909 11831/24554/8937 11825/24543/8937 +f 11792/24478/8938 11771/24437/8938 11829/24551/8938 11824/24540/8938 +f 11780/24452/8928 11820/24531/8927 11823/24537/8939 11781/24454/8939 +f 11777/24447/8940 11774/24442/8940 11791/24476/8940 11828/24549/8940 +f 11817/24525/8911 11786/24465/8911 11789/24471/8941 11831/24554/8941 +f 11771/24437/8942 11770/24436/8942 11785/24463/8942 11829/24551/8942 +f 11787/24466/8914 11779/24451/8913 11782/24457/8943 11788/24468/8943 +f 11832/24556/8802 11833/24557/8802 11834/24558/8803 11835/24560/8804 +f 11836/24561/8944 11835/24559/8944 11837/24563/8945 11838/24564/8946 +f 11839/24565/8818 11840/24567/8818 11841/24570/8818 11842/24572/8818 +f 11843/24574/8812 11844/24575/8812 11839/24566/8812 11845/24578/8812 +f 11846/24580/8813 11833/24557/8813 11847/24581/8813 11848/24582/8813 +f 11849/24584/8814 11846/24579/8814 11848/24583/8814 11850/24585/8814 +f 11851/24586/8814 11852/24587/8814 11846/24579/8814 11849/24584/8814 +f 11852/24588/8816 11834/24558/8816 11833/24557/8813 11846/24580/8813 +f 11853/24589/8817 11843/24573/8817 11845/24577/8817 11854/24590/8817 +f 11836/24561/8817 11855/24592/8817 11843/24573/8817 11853/24589/8817 +f 11855/24591/8812 11856/24593/8812 11844/24575/8812 11843/24574/8812 +f 11848/24582/8819 11847/24581/8819 11857/24595/8819 11858/24597/8819 +f 11854/24590/8947 11845/24577/8947 11859/24598/8947 11860/24600/8947 +f 11861/24601/8948 11854/24590/8949 11860/24600/8950 11862/24603/8951 +f 11844/24576/8821 11863/24605/8821 11840/24567/8821 11839/24565/8821 +f 11856/24594/8821 11864/24607/8821 11863/24605/8821 11844/24576/8821 +f 11852/24587/8823 11851/24586/8823 11865/24608/8823 11866/24610/8823 +f 11856/24593/8824 11855/24591/8824 11867/24611/8824 11868/24613/8824 +f 11851/24586/8952 11864/24606/8952 11869/24616/8953 11865/24608/8954 +f 11853/24589/8955 11832/24555/8955 11835/24559/8944 11836/24561/8944 +f 11854/24590/8949 11861/24601/8948 11832/24555/8955 11853/24589/8955 +f 11861/24602/8802 11847/24581/8802 11833/24557/8802 11832/24556/8802 +f 11870/24617/8844 11866/24609/8844 11871/24619/8844 11872/24621/8844 +f 11867/24612/8956 11838/24564/8956 11873/24623/8956 11874/24625/8956 +f 11869/24615/8828 11868/24614/8828 11875/24626/8828 11876/24629/8828 +f 11868/24613/8957 11867/24611/8957 11874/24624/8957 11875/24628/8957 +f 11834/24558/8816 11852/24588/8816 11866/24609/8832 11870/24617/8832 +f 11864/24607/8833 11856/24594/8833 11868/24614/8833 11869/24615/8833 +f 11835/24560/8804 11834/24558/8803 11870/24617/8834 11837/24562/8834 +f 11855/24592/8958 11836/24561/8958 11838/24564/8958 11867/24612/8958 +f 11876/24630/8853 11875/24627/8853 11877/24634/8853 11878/24635/8853 +f 11875/24628/8852 11874/24624/8852 11879/24636/8852 11877/24632/8852 +f 11880/24640/8831 11876/24630/8959 11878/24635/8960 11881/24641/8837 +f 11873/24623/8961 11882/24643/8962 11883/24644/8963 11884/24645/8964 +f 11837/24562/8845 11870/24617/8845 11872/24621/8845 11882/24642/8845 +f 11866/24610/8846 11865/24608/8846 11880/24639/8846 11871/24618/8846 +f 11838/24564/8946 11837/24563/8945 11882/24643/8962 11873/24623/8961 +f 11865/24608/8954 11869/24616/8953 11876/24631/8959 11880/24639/8831 +f 11884/24645/8964 11883/24644/8963 11885/24647/8965 11886/24648/8966 +f 11887/24651/8849 11881/24641/8849 11888/24652/8849 11889/24653/8849 +f 11883/24644/8850 11890/24657/8850 11891/24658/8850 11885/24647/8850 +f 11890/24655/8851 11887/24649/8851 11889/24654/8851 11891/24659/8851 +f 11874/24625/8967 11873/24623/8967 11884/24645/8967 11879/24638/8967 +f 11872/24621/8968 11871/24619/8968 11887/24650/8968 11890/24656/8968 +f 11882/24643/8843 11872/24622/8843 11890/24657/8843 11883/24644/8843 +f 11871/24620/8969 11880/24640/8969 11881/24641/8969 11887/24651/8969 +f 11889/24653/8970 11888/24652/8970 11892/24660/8970 11893/24661/8970 +f 11885/24646/8870 11891/24659/8870 11894/24663/8870 11895/24665/8870 +f 11891/24659/8856 11889/24654/8856 11893/24662/8856 11894/24663/8856 +f 11896/24666/8857 11886/24648/8857 11897/24668/8857 11898/24669/8857 +f 11881/24641/8837 11878/24635/8960 11899/24671/8971 11888/24652/8972 +f 11877/24633/8862 11879/24637/8862 11896/24667/8862 11900/24674/8862 +f 11878/24635/8863 11877/24634/8863 11900/24673/8863 11899/24671/8863 +f 11879/24638/8973 11884/24645/8973 11886/24648/8973 11896/24666/8973 +f 11901/24675/8974 11902/24677/8974 11903/24679/8975 11904/24680/8975 +f 11893/24661/8976 11892/24660/8976 11905/24683/8976 11906/24685/8976 +f 11907/24689/8868 11908/24691/8868 11909/24693/8868 11910/24694/8868 +f 11898/24669/8869 11897/24668/8869 11911/24698/8869 11912/24700/8869 +f 11886/24648/8966 11885/24647/8965 11895/24664/8977 11897/24668/8978 +f 11888/24652/8972 11899/24671/8971 11913/24704/8979 11892/24660/8875 +f 11900/24674/8859 11896/24667/8859 11898/24670/8859 11914/24706/8859 +f 11899/24672/8858 11900/24674/8858 11914/24706/8858 11913/24705/8858 +f 11857/24595/8877 11862/24604/8877 11915/24707/8877 11916/24709/8877 +f 11859/24599/8878 11842/24571/8878 11917/24713/8878 11918/24715/8878 +f 11862/24603/8951 11860/24600/8950 11919/24716/8980 11915/24708/8981 +f 11860/24600/8982 11859/24598/8982 11918/24714/8982 11919/24716/8982 +f 11850/24585/8811 11848/24583/8811 11858/24596/8811 11920/24717/8811 +f 11847/24581/8883 11861/24602/8883 11862/24604/8883 11857/24595/8883 +f 11840/24568/8983 11850/24585/8983 11920/24717/8984 11841/24569/8985 +f 11845/24578/8886 11839/24566/8886 11842/24571/8886 11859/24599/8886 +f 11915/24708/8981 11919/24716/8980 11921/24718/8986 11922/24719/8987 +f 11919/24716/8988 11918/24714/8988 11923/24721/8988 11921/24718/8988 +f 11917/24711/8907 11924/24725/8907 11925/24726/8907 11926/24727/8907 +f 11927/24731/8906 11916/24709/8906 11928/24733/8906 11929/24736/8906 +f 11920/24717/8876 11858/24596/8876 11927/24730/8876 11930/24739/8876 +f 11841/24569/8985 11920/24717/8984 11930/24739/8893 11924/24723/8894 +f 11858/24597/8895 11857/24595/8895 11916/24709/8895 11927/24731/8895 +f 11842/24572/8896 11841/24570/8896 11924/24724/8896 11917/24712/8896 +f 11926/24727/8899 11925/24726/8899 11931/24741/8899 11932/24743/8899 +f 11929/24737/8900 11928/24734/8900 11933/24746/8900 11934/24748/8900 +f 11925/24726/8901 11935/24749/8902 11936/24750/8903 11931/24741/8904 +f 11935/24749/8919 11929/24738/8919 11934/24747/8919 11936/24750/8919 +f 11918/24715/8889 11917/24713/8889 11926/24728/8889 11923/24720/8889 +f 11916/24710/8888 11915/24708/8888 11922/24719/8888 11928/24735/8888 +f 11930/24740/8905 11927/24732/8905 11929/24738/8905 11935/24749/8905 +f 11924/24725/8894 11930/24740/8893 11935/24749/8902 11925/24726/8901 +f 11936/24750/8910 11934/24747/8910 11907/24690/8911 11937/24751/8911 +f 11933/24746/8912 11938/24752/8912 11901/24676/8913 11908/24691/8914 +f 11939/24754/8989 11932/24744/8989 11940/24756/8989 11941/24757/8989 +f 11938/24753/8990 11942/24759/8991 11902/24677/8974 11901/24675/8974 +f 11921/24718/8992 11923/24721/8992 11939/24755/8992 11942/24759/8992 +f 11922/24719/8987 11921/24718/8986 11942/24759/8991 11938/24753/8990 +f 11923/24722/8917 11926/24729/8917 11932/24744/8917 11939/24754/8917 +f 11928/24735/8918 11922/24719/8918 11938/24753/8918 11933/24745/8918 +f 11941/24757/8993 11940/24756/8993 11943/24760/8993 11944/24762/8993 +f 11897/24668/8978 11895/24664/8977 11945/24766/8921 11911/24698/8921 +f 11892/24660/8875 11913/24704/8979 11946/24769/8924 11905/24683/8924 +f 11940/24756/8922 11947/24772/8922 11948/24774/8923 11943/24760/8923 +f 11931/24741/8904 11936/24750/8903 11937/24751/8909 11947/24773/8909 +f 11934/24748/8908 11933/24746/8908 11908/24691/8908 11907/24689/8908 +f 11932/24744/8925 11931/24742/8925 11947/24772/8922 11940/24756/8922 +f 11942/24759/8994 11939/24755/8994 11941/24758/8995 11902/24677/8996 +f 11949/24777/8930 11906/24686/8930 11905/24684/8930 11946/24770/8930 +f 11912/24701/8931 11949/24777/8930 11946/24770/8930 11950/24779/8930 +f 11911/24699/8932 11945/24767/8931 11949/24778/8930 11912/24702/8931 +f 11945/24767/8931 11951/24781/8930 11906/24687/8930 11949/24778/8930 +f 11952/24783/8933 11910/24695/8933 11909/24692/8934 11904/24681/8933 +f 11944/24763/8933 11952/24783/8933 11904/24681/8933 11903/24678/8933 +f 11943/24761/8935 11948/24775/8935 11952/24784/8933 11944/24764/8933 +f 11948/24775/8935 11953/24785/8935 11910/24696/8933 11952/24784/8933 +f 11913/24705/8936 11914/24706/8936 11950/24780/8936 11946/24771/8936 +f 11947/24773/8909 11937/24751/8909 11953/24786/8937 11948/24776/8937 +f 11895/24665/8938 11894/24663/8938 11951/24782/8938 11945/24768/8938 +f 11902/24677/8996 11941/24758/8995 11944/24765/8997 11903/24679/8997 +f 11914/24706/8940 11898/24670/8940 11912/24703/8940 11950/24780/8940 +f 11937/24751/8911 11907/24690/8911 11910/24697/8941 11953/24786/8941 +f 11894/24663/8942 11893/24662/8942 11906/24688/8942 11951/24782/8942 +f 11908/24691/8914 11901/24676/8913 11904/24682/8943 11909/24693/8943 +f 11698/24307/8788 11697/24304/8787 11960/24797/8998 11962/24802/8999 +f 11962/24802/8999 11960/24797/8998 11961/24799/8801 11963/24804/8800 +f 11688/24285/8793 11703/24317/8792 11956/24789/9000 11958/24794/9001 +f 11958/24794/9001 11956/24789/9000 11957/24791/8797 11959/24796/8796 +f 11708/24331/8790 11955/24788/8790 11960/24798/8790 11697/24305/8790 +f 11955/24788/8790 11954/24787/8790 11961/24800/8790 11960/24798/8790 +f 11703/24318/8790 11702/24316/8790 11954/24787/8790 11956/24790/8790 +f 11956/24790/8790 11954/24787/8790 11955/24788/8790 11957/24792/8790 +o Chair.037 +v -10.432257 0.415382 -2.174684 +v -10.432257 0.429951 -2.174684 +v -10.400960 0.429951 -2.136179 +v -10.147437 0.429951 -1.824266 +v -10.116141 0.429951 -1.785762 +v -10.116141 0.415382 -1.785762 +v -10.147437 0.415382 -1.824266 +v -10.400960 0.415382 -2.136179 +v -10.414617 0.429951 -1.543162 +v -10.414617 0.415382 -1.543162 +v -10.414617 0.400812 -1.543162 +v -10.443390 0.400812 -1.578563 +v -10.147437 0.400812 -1.824266 +v -10.116141 0.400812 -1.785762 +v -10.730731 0.415382 -1.932084 +v -10.730731 0.429951 -1.932084 +v -10.701958 0.415382 -1.896683 +v -10.701958 0.429951 -1.896683 +v -10.730731 0.400812 -1.932084 +v -10.701958 0.400812 -1.896683 +v -10.432257 0.400812 -2.174684 +v -10.400960 0.400812 -2.136179 +v -10.443390 0.415382 -1.578563 +v -10.443390 0.429951 -1.578563 +v -10.263508 0.438060 -1.663186 +v -10.259824 0.443651 -1.658654 +v -10.158102 0.443651 -1.741333 +v -10.161786 0.438060 -1.745866 +v -10.161674 0.429976 -1.745728 +v -10.136646 0.437950 -1.766300 +v -10.138563 0.430300 -1.764514 +v -10.251087 0.429903 -1.647905 +v -10.251198 0.437987 -1.648041 +v -10.352920 0.437987 -1.565362 +v -10.352809 0.429903 -1.565226 +v -10.356446 0.443828 -1.569702 +v -10.381203 0.439408 -1.549580 +v -10.375862 0.434055 -1.546715 +v -10.259871 0.424135 -1.658710 +v -10.254771 0.424311 -1.652437 +v -10.356493 0.424311 -1.569758 +v -10.361591 0.424135 -1.576031 +v -10.254725 0.443828 -1.652381 +v -10.361546 0.443651 -1.575975 +v -10.149476 0.437987 -1.730721 +v -10.153004 0.443828 -1.735060 +v -10.263396 0.429976 -1.663049 +v -10.365118 0.429976 -1.580370 +v -10.158148 0.424135 -1.741390 +v -10.153049 0.424311 -1.735117 +v -10.373241 0.426646 -1.548618 +v -10.375190 0.421521 -1.554561 +v -10.386247 0.439247 -1.555898 +v -10.380234 0.421360 -1.560879 +v -10.385573 0.426713 -1.563744 +v -10.149365 0.429903 -1.730584 +v -10.124354 0.437881 -1.751140 +v -10.126416 0.443408 -1.756670 +v -10.136501 0.424773 -1.758984 +v -10.131358 0.424940 -1.752747 +v -10.126271 0.430231 -1.749355 +v -10.365230 0.438060 -1.580508 +v -10.116611 0.420977 -1.782356 +v -10.115858 0.416357 -1.775763 +v -10.110676 0.416497 -1.769558 +v -10.104336 0.420919 -1.767184 +v -10.100609 0.427313 -1.770440 +v -10.131559 0.443241 -1.762908 +v -10.085916 0.402967 -1.782156 +v -10.080790 0.407418 -1.786549 +v -10.112884 0.427371 -1.785614 +v -10.093052 0.407458 -1.801733 +v -10.098178 0.403008 -1.797339 +v -10.101362 0.431932 -1.777034 +v -10.080533 0.410634 -1.793964 +v -10.106544 0.431793 -1.783240 +v -10.085746 0.410537 -1.800145 +v -10.079282 0.380352 -1.812925 +v -10.085243 0.378323 -1.807852 +v -10.067027 0.380334 -1.797735 +v -10.066167 0.381800 -1.805641 +v -10.071398 0.381756 -1.811806 +v -10.098435 0.399792 -1.789925 +v -10.093222 0.399889 -1.783744 +v -10.054043 0.345795 -1.815495 +v -10.059276 0.345756 -1.821659 +v -10.086104 0.376856 -1.799947 +v -10.073201 0.342751 -1.817639 +v -10.074097 0.341467 -1.809707 +v -10.072989 0.378304 -1.792663 +v -10.080873 0.376901 -1.793782 +v -10.068864 0.341506 -1.803542 +v -10.060947 0.342735 -1.802450 +v -10.442217 0.349401 -1.517933 +v -10.435875 0.348454 -1.522859 +v -10.467772 -0.002953 -1.496934 +v -10.474114 -0.002007 -1.492006 +v -10.054938 0.344511 -1.807561 +v -9.987673 0.001491 -1.862235 +v -9.986777 0.002774 -1.870168 +v -10.437879 0.350077 -1.503514 +v -10.442842 0.350056 -1.509897 +v -10.474739 -0.001352 -1.483971 +v -10.469776 -0.001331 -1.477588 +v -10.005936 -0.000270 -1.872314 +v -10.006830 -0.001553 -1.864381 +v -10.067192 0.344527 -1.822751 +v -10.405215 0.425574 -1.530063 +v -10.398364 0.421603 -1.528425 +v -10.388194 0.434122 -1.561842 +v -10.410716 0.421652 -1.543536 +v -10.410213 0.425454 -1.536417 +v -10.394156 0.412305 -1.539146 +v -10.399154 0.412185 -1.545501 +v -10.406004 0.416156 -1.547138 +v -10.427556 0.403231 -1.529849 +v -10.427968 0.405075 -1.521987 +v -10.408747 0.398698 -1.527287 +v -10.413716 0.398640 -1.533665 +v -10.421521 0.400566 -1.534525 +v -10.393653 0.416106 -1.532028 +v -10.425425 0.371230 -1.524148 +v -10.433379 0.372479 -1.524888 +v -10.409159 0.400542 -1.519424 +v -10.421015 0.372464 -1.509788 +v -10.420460 0.371267 -1.517766 +v -10.422998 0.405133 -1.515608 +v -10.440173 0.375406 -1.512067 +v -10.435207 0.375443 -1.505685 +v -10.415192 0.403207 -1.514747 +v -10.427254 0.374194 -1.504944 +v -10.429850 0.349392 -1.502833 +v -10.423510 0.348446 -1.507760 +v -10.439618 0.374209 -1.520044 +v -10.427847 0.347770 -1.522180 +v -10.422884 0.347791 -1.515795 +v -10.454782 -0.003617 -1.489869 +v -10.459744 -0.003637 -1.496253 +v -9.999927 0.001507 -1.877425 +v -10.455407 -0.002962 -1.481834 +v -9.993681 -0.000286 -1.857124 +v -9.996803 0.000611 -1.867274 +v -10.001598 -0.001514 -1.858216 +v -9.992009 0.002736 -1.876333 +v -10.464760 -0.002484 -1.486920 +v -10.461747 -0.002015 -1.476907 +v -10.593723 0.438060 -2.069456 +v -10.590039 0.443651 -2.064924 +v -10.488317 0.443651 -2.147603 +v -10.492002 0.438060 -2.152136 +v -10.491891 0.429976 -2.151999 +v -10.466862 0.437950 -2.172569 +v -10.468779 0.430300 -2.170784 +v -10.686708 0.424311 -1.976028 +v -10.683023 0.429903 -1.971495 +v -10.703457 0.426646 -1.954888 +v -10.705405 0.421521 -1.960831 +v -10.590086 0.424135 -2.064980 +v -10.584987 0.424311 -2.058707 +v -10.691807 0.424135 -1.982301 +v -10.584941 0.443828 -2.058650 +v -10.691761 0.443651 -1.982245 +v -10.686662 0.443828 -1.975971 +v -10.581413 0.437987 -2.054311 +v -10.683135 0.437987 -1.971632 +v -10.479692 0.437987 -2.136990 +v -10.483219 0.443828 -2.141330 +v -10.593613 0.429976 -2.069319 +v -10.695333 0.429976 -1.986641 +v -10.488363 0.424135 -2.147660 +v -10.483265 0.424311 -2.141387 +v -10.716462 0.439247 -1.962168 +v -10.711418 0.439408 -1.955850 +v -10.710449 0.421360 -1.967149 +v -10.715790 0.426713 -1.970015 +v -10.695445 0.438060 -1.986777 +v -10.718410 0.434122 -1.968111 +v -10.581303 0.429903 -2.054174 +v -10.479581 0.429903 -2.136854 +v -10.454570 0.437881 -2.157410 +v -10.456632 0.443408 -2.162940 +v -10.466717 0.424773 -2.165254 +v -10.461574 0.424940 -2.159017 +v -10.456487 0.430231 -2.155624 +v -10.461775 0.443241 -2.169177 +v -10.431577 0.431932 -2.183304 +v -10.436759 0.431793 -2.189509 +v -10.446827 0.420977 -2.188627 +v -10.446074 0.416357 -2.182033 +v -10.440891 0.416497 -2.175828 +v -10.434551 0.420919 -2.173453 +v -10.423437 0.399889 -2.190014 +v -10.416131 0.402967 -2.188426 +v -10.428650 0.399792 -2.196194 +v -10.430823 0.427313 -2.176710 +v -10.411005 0.407418 -2.192819 +v -10.443099 0.427371 -2.191884 +v -10.423267 0.407458 -2.208003 +v -10.428393 0.403008 -2.203609 +v -10.409497 0.380352 -2.219195 +v -10.415460 0.378323 -2.214122 +v -10.410748 0.410634 -2.200234 +v -10.397243 0.380334 -2.204005 +v -10.396382 0.381800 -2.211911 +v -10.415961 0.410537 -2.206414 +v -10.401613 0.381756 -2.218076 +v -10.385153 0.344511 -2.213831 +v -10.384258 0.345795 -2.221765 +v -10.389491 0.345756 -2.227929 +v -10.397408 0.344527 -2.229021 +v -10.416320 0.376856 -2.206217 +v -10.403418 0.342751 -2.223910 +v -10.404312 0.341467 -2.215977 +v -10.403204 0.378304 -2.198933 +v -10.411088 0.376901 -2.200051 +v -10.772432 0.349401 -1.924202 +v -10.766090 0.348454 -1.929130 +v -10.797988 -0.002953 -1.903204 +v -10.804330 -0.002007 -1.898276 +v -10.317888 0.001491 -2.268504 +v -10.316993 0.002774 -2.276438 +v -10.768094 0.350077 -1.909784 +v -10.773057 0.350056 -1.916167 +v -10.804955 -0.001352 -1.890241 +v -10.799992 -0.001331 -1.883857 +v -10.336151 -0.000270 -2.278584 +v -10.337046 -0.001553 -2.270650 +v -10.391162 0.342735 -2.208720 +v -10.399079 0.341506 -2.209812 +v -10.740931 0.421652 -1.949806 +v -10.740429 0.425454 -1.942687 +v -10.724370 0.412305 -1.945416 +v -10.729369 0.412185 -1.951771 +v -10.736219 0.416156 -1.953409 +v -10.706078 0.434055 -1.952984 +v -10.751738 0.400566 -1.940796 +v -10.757771 0.403231 -1.936119 +v -10.743932 0.398640 -1.939934 +v -10.723868 0.416106 -1.938298 +v -10.739374 0.400542 -1.925694 +v -10.738961 0.398698 -1.933556 +v -10.735431 0.425574 -1.936332 +v -10.758183 0.405075 -1.928257 +v -10.753214 0.405133 -1.921878 +v -10.728580 0.421603 -1.934694 +v -10.751230 0.372464 -1.916058 +v -10.750675 0.371267 -1.924036 +v -10.770389 0.375406 -1.918336 +v -10.765423 0.375443 -1.911955 +v -10.745407 0.403207 -1.921017 +v -10.757469 0.374194 -1.911214 +v -10.760065 0.349392 -1.909103 +v -10.769834 0.374209 -1.926314 +v -10.755641 0.371230 -1.930417 +v -10.753099 0.347791 -1.922065 +v -10.758062 0.347770 -1.928449 +v -10.763595 0.372479 -1.931158 +v -10.784997 -0.003617 -1.896139 +v -10.789960 -0.003637 -1.902522 +v -10.330142 0.001507 -2.283695 +v -10.323896 -0.000286 -2.263394 +v -10.753725 0.348446 -1.914030 +v -10.785623 -0.002962 -1.888104 +v -10.327020 0.000611 -2.273545 +v -10.331814 -0.001514 -2.264486 +v -10.322225 0.002736 -2.282603 +v -10.794975 -0.002484 -1.893191 +v -10.791963 -0.002015 -1.883177 +v -10.615768 0.396685 -1.790643 +v -10.529579 0.396685 -1.684603 +v -10.615768 0.411254 -1.790643 +v -10.529579 0.411254 -1.684603 +v -10.316453 0.411254 -2.032208 +v -10.231945 0.411254 -1.928237 +v -10.529579 0.382115 -1.684603 +v -10.615768 0.382115 -1.790643 +v -10.231945 0.382115 -1.928237 +v -10.316453 0.382115 -2.032208 +vn -0.8126 -0.0000 -0.5828 +vn 0.0726 -0.7071 -0.7033 +vn 0.7760 -0.0000 -0.6307 +vn 0.7033 -0.7071 0.0726 +vn 0.6792 0.6667 0.3071 +vn 0.6307 -0.0000 0.7760 +vn -0.0000 -1.0000 -0.0000 +vn 0.0433 -0.9977 0.0526 +vn 0.0439 -0.9976 0.0533 +vn -0.6307 -0.0000 -0.7760 +vn -0.7760 -0.0000 0.6307 +vn -0.0000 1.0000 -0.0000 +vn 0.0426 0.9977 0.0532 +vn 0.0432 0.9976 0.0539 +vn -0.0439 0.9976 -0.0533 +vn -0.0433 0.9977 -0.0526 +vn -0.0435 0.9977 -0.0528 +vn -0.0437 0.9976 -0.0530 +vn -0.0432 -0.9976 -0.0539 +vn -0.0426 -0.9977 -0.0532 +vn -0.0428 -0.9977 -0.0534 +vn -0.0430 -0.9976 -0.0536 +vn -0.4361 0.7224 -0.5366 +vn -0.4310 0.7268 -0.5348 +vn -0.4310 0.7269 -0.5348 +vn -0.6305 -0.0225 -0.7759 +vn -0.6308 -0.0215 -0.7757 +vn -0.6356 -0.0204 -0.7717 +vn 0.6306 0.0218 0.7758 +vn 0.6295 0.0219 0.7767 +vn 0.6294 0.0219 0.7767 +vn 0.3772 0.6937 0.6136 +vn 0.0137 -0.9998 0.0169 +vn -0.0138 0.9998 -0.0170 +vn 0.4556 0.6915 0.5605 +vn 0.4549 0.6962 0.5553 +vn -0.0089 0.9997 -0.0206 +vn -0.4556 -0.6915 -0.5606 +vn 0.4980 -0.7257 0.4747 +vn -0.1198 0.9903 0.0699 +vn -0.3855 -0.6955 -0.6064 +vn 0.4362 -0.7223 0.5366 +vn 0.6305 0.0221 0.7758 +vn 0.4542 0.7008 0.5500 +vn 0.0309 -0.9995 0.0021 +vn 0.6359 0.0214 0.7715 +vn 0.6309 0.0224 0.7755 +vn -0.6166 -0.6683 -0.4162 +vn 0.2544 -0.6972 0.6703 +vn -0.2208 -0.9532 0.2067 +vn 0.6409 0.0184 0.7674 +vn 0.6366 0.0214 0.7709 +vn -0.0040 0.9997 -0.0242 +vn 0.4387 -0.7326 0.5205 +vn -0.4258 0.7313 -0.5329 +vn -0.4399 -0.7022 -0.5598 +vn 0.6451 0.0132 0.7640 +vn 0.6418 0.0177 0.7666 +vn -0.6406 -0.0175 -0.7676 +vn -0.6363 -0.0204 -0.7712 +vn -0.6412 -0.0172 -0.7672 +vn -0.6446 -0.0124 -0.7644 +vn 0.7861 0.5509 0.2803 +vn -0.0795 0.5748 -0.8144 +vn 0.2463 0.9421 -0.2276 +vn -0.2425 0.6901 -0.6818 +vn 0.6298 0.6614 0.4073 +vn -0.6449 -0.0119 -0.7642 +vn -0.6460 -0.0090 -0.7633 +vn 0.9063 0.3812 0.1826 +vn 0.0459 0.3978 -0.9163 +vn 0.6394 0.5403 -0.5471 +vn -0.4474 -0.8044 0.3909 +vn 0.0888 -0.5868 0.8048 +vn -0.7753 -0.5625 -0.2873 +vn 0.4688 0.7833 -0.4083 +vn 0.6981 0.3980 -0.5952 +vn -0.9479 -0.2790 -0.1536 +vn -0.0848 -0.2912 0.9529 +vn -0.6973 -0.4005 0.5945 +vn 0.6464 0.0092 0.7629 +vn 0.6454 0.0122 0.7638 +vn -0.6245 -0.5692 0.5348 +vn -0.0401 -0.4135 0.9096 +vn -0.8989 -0.3964 -0.1868 +vn -0.6137 -0.0027 -0.7895 +vn -0.6138 -0.0025 -0.7895 +vn 0.9759 0.1694 0.1375 +vn -0.7843 0.1162 0.6094 +vn -0.9759 -0.1695 -0.1375 +vn 0.0851 0.2899 -0.9533 +vn 0.9484 0.2777 0.1533 +vn -0.6456 -0.0079 -0.7636 +vn -0.6464 -0.0056 -0.7630 +vn 0.6470 0.0054 0.7624 +vn 0.6467 0.0070 0.7627 +vn 0.2260 0.6472 0.7281 +vn -0.6560 0.6748 -0.3381 +vn 0.2865 -0.9356 -0.2063 +vn -0.6282 -0.0216 -0.7778 +vn -0.6242 -0.0208 -0.7810 +vn -0.6196 -0.0183 -0.7847 +vn -0.6234 -0.0205 -0.7816 +vn -0.5070 0.7239 -0.4679 +vn 0.6280 0.0227 0.7778 +vn 0.6239 0.0218 0.7812 +vn 0.1025 -0.9932 -0.0560 +vn -0.6284 -0.0222 -0.7776 +vn -0.8000 0.5630 -0.2074 +vn 0.4668 -0.8103 -0.3542 +vn -0.6158 -0.0112 -0.7878 +vn -0.6187 -0.0173 -0.7854 +vn -0.0956 -0.5801 -0.8089 +vn 0.6233 0.0211 0.7817 +vn 0.6193 0.0187 0.7850 +vn -0.3297 0.9128 0.2410 +vn 0.6326 -0.6896 0.3526 +vn -0.2443 -0.6617 -0.7088 +vn 0.0278 -0.3366 -0.9412 +vn 0.9280 -0.3512 0.1241 +vn -0.6989 0.4682 0.5407 +vn 0.6155 0.0114 0.7880 +vn 0.6184 0.0175 0.7856 +vn 0.6151 0.0104 0.7884 +vn 0.6137 0.0032 0.7896 +vn 0.0746 0.5405 0.8380 +vn -0.5291 0.7463 0.4038 +vn 0.7658 -0.6033 0.2227 +vn -0.7825 0.1344 0.6080 +vn 0.6138 0.0027 0.7894 +vn -0.0771 0.0928 0.9927 +vn -0.0772 0.0866 0.9932 +vn -0.9917 0.0969 -0.0843 +vn -0.9923 0.0905 -0.0842 +vn -0.9923 0.0904 -0.0842 +vn -0.6145 -0.0030 -0.7889 +vn -0.6159 -0.0100 -0.7878 +vn 0.6931 -0.4821 -0.5360 +vn -0.9310 0.3437 -0.1228 +vn -0.0296 0.3294 0.9437 +vn 0.7843 -0.1162 -0.6094 +vn -0.6470 -0.0053 -0.7625 +vn 0.9924 -0.0898 0.0841 +vn 0.9929 -0.0839 0.0841 +vn 0.6470 0.0053 0.7625 +vn 0.9919 -0.0956 0.0841 +vn 0.0771 -0.0916 -0.9928 +vn 0.0772 -0.0860 -0.9933 +vn 0.0772 -0.0859 -0.9933 +vn 0.7828 -0.1319 -0.6081 +vn 0.1705 -0.9756 -0.1386 +vn 0.1706 -0.9756 -0.1386 +vn -0.0909 -0.9931 0.0739 +vn -0.0908 -0.9931 0.0739 +vn -0.0909 -0.9931 0.0738 +vn -0.0908 -0.9931 0.0738 +vn -0.1075 -0.1770 0.9783 +vn 0.6138 0.0025 0.7895 +vn 0.1075 0.1770 -0.9783 +vn 0.0774 -0.0803 -0.9938 +vn -0.7384 -0.2449 0.6283 +vn -0.0774 0.0803 0.9938 +vn 0.7384 0.2449 -0.6283 +vn -0.9929 0.0839 -0.0841 +vn -0.6305 -0.0221 -0.7758 +vn -0.6309 -0.0224 -0.7756 +vn -0.6359 -0.0214 -0.7715 +vn -0.4556 -0.6915 -0.5605 +vn -0.3854 -0.6956 -0.6063 +vn -0.6295 -0.0219 -0.7767 +vn -0.6294 -0.0219 -0.7767 +vn -0.6240 -0.0218 -0.7811 +vn -0.6279 -0.0228 -0.7780 +vn 0.6305 0.0224 0.7759 +vn 0.6358 0.0214 0.7716 +vn 0.6308 0.0224 0.7756 +vn -0.6306 -0.0218 -0.7758 +vn -0.4399 -0.7023 -0.5598 +vn 0.6410 0.0183 0.7673 +vn 0.6451 0.0133 0.7640 +vn -0.6410 -0.0183 -0.7673 +vn -0.6366 -0.0214 -0.7709 +vn -0.6417 -0.0178 -0.7667 +vn -0.6452 -0.0131 -0.7639 +vn -0.6454 -0.0122 -0.7638 +vn -0.6463 -0.0094 -0.7630 +vn -0.7753 -0.5626 -0.2872 +vn 0.4688 0.7833 -0.4084 +vn -0.9479 -0.2790 -0.1535 +vn 0.6465 0.0091 0.7629 +vn 0.6453 0.0123 0.7638 +vn -0.8989 -0.3964 -0.1867 +vn -0.6138 -0.0027 -0.7894 +vn 0.9759 0.1695 0.1375 +vn -0.6467 -0.0070 -0.7628 +vn -0.6473 -0.0058 -0.7622 +vn 0.6470 0.0055 0.7625 +vn 0.6467 0.0070 0.7628 +vn -0.6193 -0.0187 -0.7850 +vn -0.6233 -0.0210 -0.7817 +vn -0.2443 -0.6618 -0.7088 +vn 0.6284 0.0221 0.7776 +vn -0.6155 -0.0114 -0.7880 +vn -0.6184 -0.0176 -0.7856 +vn -0.0955 -0.5802 -0.8089 +vn 0.7828 -0.1319 -0.6082 +vn -0.6151 -0.0104 -0.7884 +vn -0.6136 -0.0032 -0.7896 +vn 0.0279 -0.3367 -0.9412 +vn 0.6930 -0.4821 -0.5360 +vn 0.0773 -0.0916 -0.9928 +vn 0.0774 -0.0860 -0.9933 +vn 0.0774 -0.0859 -0.9933 +vn 0.0775 -0.0803 -0.9938 +vn 0.0437 -0.9976 0.0530 +vn 0.0435 -0.9977 0.0528 +vn 0.0430 0.9976 0.0536 +vn 0.0428 0.9977 0.0534 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.973130 0.033128 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.677629 0.482142 +vt 0.409642 -0.009898 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.669677 0.481452 +vt 0.240570 0.058726 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +vt 0.296927 -0.019617 +vt 0.353285 -0.019617 +vt 0.470812 0.481452 +vt 0.296927 0.014692 +vt 0.271947 0.481452 +vt 0.353285 0.014692 +vt -0.849112 0.025953 +vt 0.468872 0.000137 +vt -0.911121 0.025955 +vt 0.273887 0.000137 +vt 0.475153 0.482142 +vt 0.353285 -0.053929 +vt 0.272677 0.482143 +vt 0.296927 -0.053929 +vt -0.911121 -0.024667 +vt 0.473178 0.006015 +vt -0.849112 -0.024667 +vt 0.274652 0.006015 +s 1 +usemtl Wood +f 11964/24806/9002 11965/24808/9003 11966/24811/9004 12236/25320/9004 12237/25322/9004 11967/24813/9004 11968/24815/9005 11969/24819/9006 11970/24820/9004 11971/24821/9004 +f 11969/24818/9006 11968/24816/9005 11972/24823/9007 11973/24826/9007 +f 11974/24828/9008 11975/24831/9009 11976/24834/9010 11977/24835/9008 +f 11978/24839/9011 11979/24840/9011 11965/24809/9003 11964/24805/9002 +f 11979/24841/9012 11978/24838/9012 11980/24843/9012 11981/24845/9012 +f 11982/24846/9012 11983/24849/9012 11980/24843/9012 11978/24838/9012 +f 11982/24847/9011 11978/24839/9011 11964/24805/9002 11984/24851/9011 +f 11977/24836/9007 11969/24818/9006 11973/24826/9007 11974/24829/9007 +f 11984/24852/9004 11964/24806/9004 11971/24821/9004 11970/24820/9004 11969/24819/9004 11977/24837/9004 11976/24833/9004 12240/25328/9004 12241/25330/9004 11985/24855/9004 +f 11977/24837/9004 11976/24833/9004 11970/24820/9004 11969/24819/9004 +f 11971/24822/9012 11964/24807/9012 11984/24853/9012 11985/24856/9012 +f 12235/25319/9012 12233/25315/9012 11986/24858/9012 11987/24859/9012 +f 11973/24827/9012 11972/24824/9012 11987/24859/9012 11986/24858/9012 +f 12232/25314/9012 11980/24843/9012 11983/24849/9012 12239/25327/9012 +f 11975/24832/9012 11974/24830/9012 11973/24827/9012 11986/24858/9012 +f 11979/24842/9013 11981/24844/9014 11966/24812/9015 11965/24810/9013 +f 11967/24814/9016 11987/24860/9017 11972/24825/9013 11968/24817/9013 +f 12237/25323/9018 12235/25318/9019 11987/24860/9017 11967/24814/9016 +f 11985/24857/9020 11983/24850/9021 11982/24848/9008 11984/24854/9008 +f 12241/25331/9022 12239/25326/9023 11983/24850/9021 11985/24857/9020 +f 11988/24861/9024 11989/24862/9024 11990/24863/9025 11991/24865/9026 +f 11992/24866/9027 11991/24864/9027 11993/24869/9028 11994/24871/9029 +f 11995/24873/9030 11996/24874/9030 11997/24875/9031 11998/24877/9032 +f 11997/24875/9033 11999/24878/9033 12000/24880/9033 12001/24882/9033 +f 12002/24884/9034 12003/24885/9034 12004/24886/9034 12005/24888/9034 +f 12006/24890/9035 11989/24862/9035 12007/24891/9035 11999/24879/9035 +f 11996/24874/9036 12006/24889/9036 11999/24878/9036 11997/24875/9036 +f 12008/24892/9037 12009/24893/9037 12006/24889/9036 11996/24874/9036 +f 12009/24894/9038 11990/24863/9038 11989/24862/9035 12006/24890/9035 +f 12010/24895/9039 12002/24883/9039 12005/24887/9039 12011/24896/9039 +f 11992/24867/9039 12012/24899/9039 12002/24883/9039 12010/24895/9039 +f 12012/24898/9034 12013/24900/9034 12003/24885/9034 12002/24884/9034 +f 12004/24886/9040 11998/24876/9040 12014/24902/9040 12015/24903/9040 +f 11999/24879/9041 12007/24891/9041 12016/24904/9041 12000/24881/9041 +f 12011/24896/9042 12005/24887/9042 12017/24906/9042 12018/24908/9042 +f 12003/24885/9043 11995/24872/9043 11998/24876/9043 12004/24886/9043 +f 12013/24900/9043 12019/24910/9043 11995/24872/9043 12003/24885/9043 +f 12019/24909/9044 12008/24892/9044 11996/24874/9030 11995/24873/9030 +f 12009/24893/9037 12008/24892/9037 12020/24911/9045 12021/24913/9045 +f 12013/24900/9046 12012/24898/9046 12022/24914/9046 12023/24916/9046 +f 12008/24892/9044 12019/24909/9044 12024/24917/9047 12020/24911/9048 +f 12025/24919/9024 12007/24891/9024 11989/24862/9024 11988/24861/9024 +f 12022/24915/9049 11994/24870/9049 12026/24922/9049 12027/24924/9049 +f 12024/24918/9050 12023/24916/9050 12028/24925/9050 12029/24927/9050 +f 12023/24916/9051 12022/24914/9051 12027/24923/9051 12028/24925/9051 +f 12020/24911/9048 12024/24917/9047 12029/24928/9052 12030/24929/9053 +f 11990/24863/9038 12009/24894/9038 12021/24912/9054 12031/24930/9054 +f 12019/24910/9055 12013/24900/9055 12023/24916/9055 12024/24918/9055 +f 11991/24865/9026 11990/24863/9025 12031/24930/9056 11993/24868/9056 +f 12012/24899/9057 11992/24867/9057 11994/24870/9057 12022/24915/9057 +f 12030/24929/9053 12029/24928/9052 12032/24931/9058 12033/24932/9059 +f 12026/24922/9060 12034/24933/9061 12035/24936/9062 12036/24937/9063 +f 12037/24938/9064 12030/24929/9064 12033/24932/9064 12038/24940/9064 +f 12034/24933/9065 12039/24943/9065 12040/24945/9065 12035/24936/9065 +f 12031/24930/9066 12021/24912/9066 12037/24939/9066 12039/24944/9066 +f 11993/24868/9067 12031/24930/9067 12039/24944/9067 12034/24934/9067 +f 12021/24913/9068 12020/24911/9068 12030/24929/9068 12037/24938/9068 +f 11994/24871/9029 11993/24869/9028 12034/24935/9061 12026/24921/9060 +f 12036/24937/9063 12035/24936/9062 12041/24949/9069 12042/24950/9070 +f 12038/24940/9071 12033/24932/9071 12043/24951/9071 12044/24953/9071 +f 12035/24936/9072 12040/24945/9072 12045/24954/9072 12041/24949/9072 +f 12040/24946/9073 12038/24941/9073 12044/24952/9073 12045/24955/9073 +f 12028/24925/9074 12027/24923/9074 12046/24956/9074 12047/24959/9074 +f 12029/24928/9075 12028/24926/9075 12047/24961/9075 12032/24931/9075 +f 12027/24924/9076 12026/24922/9076 12036/24937/9076 12046/24958/9076 +f 12039/24944/9077 12037/24939/9077 12038/24942/9077 12040/24947/9077 +f 12045/24955/9078 12044/24952/9078 12048/24963/9078 12049/24964/9078 +f 12050/24966/9079 12042/24950/9079 12051/24967/9079 12052/24968/9079 +f 12053/24970/9080 12054/24972/9080 12055/24974/9080 12056/24976/9080 +f 12054/24972/9081 12050/24965/9081 12052/24969/9081 12055/24974/9081 +f 12033/24932/9059 12032/24931/9058 12053/24971/9082 12043/24951/9083 +f 12047/24960/9084 12046/24957/9084 12050/24965/9084 12054/24972/9084 +f 12032/24931/9085 12047/24961/9085 12054/24973/9085 12053/24971/9085 +f 12046/24958/9086 12036/24937/9086 12042/24950/9086 12050/24966/9086 +f 12057/24977/9087 12058/24979/9087 12059/24981/9088 12060/24982/9088 +f 12048/24962/9089 12061/24985/9089 12062/24986/9089 12063/24988/9089 +f 12064/24991/9090 12065/24993/9090 12066/24995/9090 12067/24996/9090 +f 12052/24968/9091 12051/24967/9091 12068/24999/9091 12069/25001/9091 +f 12041/24948/9092 12045/24955/9092 12049/24964/9092 12070/25005/9092 +f 12044/24953/9093 12043/24951/9093 12061/24985/9093 12048/24962/9093 +f 12042/24950/9070 12041/24949/9069 12070/25004/9094 12051/24967/9095 +f 12043/24951/9083 12053/24971/9082 12056/24975/9096 12061/24985/9097 +f 12001/24882/9098 12000/24880/9098 12071/25006/9098 12072/25008/9098 +f 12016/24904/9099 12073/25009/9099 12074/25011/9099 12075/25015/9099 +f 12017/24905/9100 12015/24903/9100 12076/25016/9100 12077/25018/9100 +f 12073/25010/9101 12018/24907/9102 12078/25020/9103 12074/25012/9104 +f 12007/24891/9105 12025/24919/9105 12073/25009/9105 12016/24904/9105 +f 11998/24877/9032 11997/24875/9031 12001/24882/9106 12014/24901/9107 +f 12005/24888/9108 12004/24886/9108 12015/24903/9108 12017/24905/9108 +f 12025/24920/9109 12011/24897/9109 12018/24907/9102 12073/25010/9101 +f 12075/25014/9110 12074/25013/9110 12079/25022/9110 12080/25025/9110 +f 12077/25018/9111 12076/25016/9111 12081/25026/9111 12082/25029/9111 +f 12074/25013/9104 12078/25021/9103 12083/25032/9112 12079/25022/9113 +f 12078/25021/9114 12077/25019/9114 12082/25030/9114 12083/25032/9114 +f 12014/24901/9107 12001/24882/9106 12072/25008/9115 12084/25034/9116 +f 12000/24881/9117 12016/24904/9117 12075/25015/9117 12071/25007/9117 +f 12015/24903/9118 12014/24902/9118 12084/25033/9118 12076/25016/9118 +f 12018/24908/9119 12017/24906/9119 12077/25019/9119 12078/25021/9119 +f 12083/25032/9120 12082/25030/9120 12085/25035/9120 12086/25037/9120 +f 12081/25027/9121 12087/25038/9121 12088/25039/9121 12089/25041/9121 +f 12090/25043/9122 12080/25023/9122 12091/25046/9122 12092/25048/9122 +f 12087/25038/9123 12093/25050/9124 12094/25051/9125 12088/25039/9126 +f 12072/25008/9127 12071/25006/9127 12090/25045/9127 12093/25050/9127 +f 12084/25034/9116 12072/25008/9115 12093/25050/9124 12087/25038/9123 +f 12071/25007/9128 12075/25015/9128 12080/25024/9128 12090/25044/9128 +f 12076/25017/9129 12084/25034/9129 12087/25038/9129 12081/25027/9129 +f 12092/25048/9130 12091/25046/9130 12065/24993/9130 12064/24991/9130 +f 12088/25039/9126 12094/25051/9125 12095/25052/9131 12096/25054/9131 +f 12094/25051/9132 12092/25049/9132 12064/24992/9133 12095/25052/9133 +f 12091/25046/9134 12097/25055/9134 12057/24978/9135 12065/24993/9136 +f 12079/25022/9113 12083/25032/9112 12086/25037/9137 12097/25056/9138 +f 12082/25031/9139 12081/25028/9139 12089/25042/9139 12085/25036/9139 +f 12080/25025/9140 12079/25022/9140 12097/25056/9140 12091/25047/9140 +f 12093/25050/9141 12090/25045/9141 12092/25049/9141 12094/25051/9141 +f 12098/25057/9142 12099/25059/9142 12100/25060/9142 12101/25062/9142 +f 12051/24967/9095 12070/25004/9094 12102/25065/9143 12068/24999/9143 +f 12099/25059/9144 12096/25053/9144 12103/25068/9145 12100/25060/9145 +f 12061/24985/9097 12056/24975/9096 12104/25071/9146 12062/24986/9146 +f 12089/25042/9147 12088/25040/9147 12096/25053/9144 12099/25059/9144 +f 12086/25037/9148 12085/25035/9148 12098/25058/9149 12058/24979/9150 +f 12097/25056/9138 12086/25037/9137 12058/24979/9087 12057/24977/9087 +f 12085/25036/9151 12089/25042/9151 12099/25059/9151 12098/25057/9151 +f 12105/25074/9152 12063/24989/9152 12062/24987/9152 12104/25072/9152 +f 12069/25002/9152 12105/25074/9152 12104/25072/9152 12106/25075/9152 +f 12068/25000/9153 12102/25066/9152 12105/25074/9152 12069/25002/9152 +f 12102/25066/9152 12107/25077/9152 12063/24989/9152 12105/25074/9152 +f 12108/25079/9154 12067/24997/9154 12066/24994/9155 12060/24983/9155 +f 12101/25063/9156 12108/25079/9154 12060/24983/9155 12059/24980/9157 +f 12100/25061/9154 12103/25069/9154 12108/25079/9154 12101/25063/9156 +f 12103/25069/9154 12109/25080/9154 12067/24997/9154 12108/25079/9154 +f 12056/24976/9158 12055/24974/9158 12106/25076/9158 12104/25073/9158 +f 12096/25054/9131 12095/25052/9131 12109/25081/9159 12103/25070/9159 +f 12070/25005/9160 12049/24964/9160 12107/25078/9160 12102/25067/9160 +f 12058/24979/9150 12098/25058/9149 12101/25064/9161 12059/24981/9161 +f 12055/24974/9162 12052/24969/9162 12069/25003/9162 12106/25076/9162 +f 12095/25052/9133 12064/24992/9133 12067/24998/9163 12109/25081/9163 +f 12049/24964/9164 12048/24963/9164 12063/24990/9164 12107/25078/9164 +f 12065/24993/9136 12057/24978/9135 12060/24984/9165 12066/24995/9165 +f 12110/25083/9024 12111/25084/9024 12112/25085/9025 12113/25087/9026 +f 12114/25088/9166 12113/25086/9166 12115/25090/9167 12116/25091/9168 +f 12117/25092/9040 12118/25094/9040 12119/25097/9040 12120/25099/9040 +f 12121/25101/9034 12122/25102/9034 12117/25093/9034 12123/25105/9034 +f 12124/25107/9035 12111/25084/9035 12125/25108/9035 12126/25109/9035 +f 12127/25111/9036 12124/25106/9036 12126/25110/9036 12128/25112/9036 +f 12129/25113/9036 12130/25114/9036 12124/25106/9036 12127/25111/9036 +f 12130/25115/9038 12112/25085/9038 12111/25084/9035 12124/25107/9035 +f 12131/25116/9169 12121/25100/9169 12123/25104/9169 12132/25117/9169 +f 12114/25088/9169 12133/25119/9169 12121/25100/9169 12131/25116/9169 +f 12133/25118/9034 12134/25120/9034 12122/25102/9034 12121/25101/9034 +f 12126/25109/9041 12125/25108/9041 12135/25122/9041 12136/25124/9041 +f 12132/25117/9170 12123/25104/9170 12137/25125/9170 12138/25127/9170 +f 12139/25128/9171 12132/25117/9172 12138/25127/9173 12140/25130/9174 +f 12122/25103/9043 12141/25132/9043 12118/25094/9043 12117/25092/9043 +f 12134/25121/9043 12142/25134/9043 12141/25132/9043 12122/25103/9043 +f 12130/25114/9045 12129/25113/9045 12143/25135/9045 12144/25137/9045 +f 12134/25120/9046 12133/25118/9046 12145/25138/9046 12146/25140/9046 +f 12129/25113/9175 12142/25133/9175 12147/25143/9176 12143/25135/9177 +f 12131/25116/9178 12110/25082/9178 12113/25086/9166 12114/25088/9166 +f 12132/25117/9172 12139/25128/9171 12110/25082/9178 12131/25116/9178 +f 12139/25129/9024 12125/25108/9024 12111/25084/9024 12110/25083/9024 +f 12148/25144/9066 12144/25136/9066 12149/25146/9066 12150/25148/9066 +f 12145/25139/9049 12116/25091/9049 12151/25150/9049 12152/25152/9049 +f 12147/25142/9050 12146/25141/9050 12153/25153/9050 12154/25156/9050 +f 12146/25140/9051 12145/25138/9051 12152/25151/9051 12153/25155/9051 +f 12112/25085/9038 12130/25115/9038 12144/25136/9054 12148/25144/9054 +f 12142/25134/9055 12134/25121/9055 12146/25141/9055 12147/25142/9055 +f 12113/25087/9026 12112/25085/9025 12148/25144/9056 12115/25089/9056 +f 12133/25119/9179 12114/25088/9179 12116/25091/9179 12145/25139/9179 +f 12154/25157/9075 12153/25154/9075 12155/25161/9075 12156/25162/9075 +f 12153/25155/9074 12152/25151/9074 12157/25163/9074 12155/25159/9074 +f 12158/25167/9053 12154/25157/9180 12156/25162/9181 12159/25168/9059 +f 12151/25150/9182 12160/25170/9183 12161/25171/9184 12162/25172/9185 +f 12115/25089/9067 12148/25144/9067 12150/25148/9067 12160/25169/9067 +f 12144/25137/9068 12143/25135/9068 12158/25166/9068 12149/25145/9068 +f 12116/25091/9168 12115/25090/9167 12160/25170/9183 12151/25150/9182 +f 12143/25135/9177 12147/25143/9176 12154/25158/9180 12158/25166/9053 +f 12162/25172/9185 12161/25171/9184 12163/25174/9186 12164/25175/9187 +f 12165/25178/9071 12159/25168/9071 12166/25179/9071 12167/25180/9071 +f 12161/25171/9072 12168/25184/9072 12169/25185/9072 12163/25174/9072 +f 12168/25182/9073 12165/25176/9073 12167/25181/9073 12169/25186/9073 +f 12152/25152/9188 12151/25150/9188 12162/25172/9188 12157/25165/9188 +f 12150/25148/9189 12149/25146/9189 12165/25177/9189 12168/25183/9189 +f 12160/25170/9065 12150/25149/9065 12168/25184/9065 12161/25171/9065 +f 12149/25147/9064 12158/25167/9064 12159/25168/9064 12165/25178/9064 +f 12167/25180/9093 12166/25179/9093 12170/25187/9093 12171/25188/9093 +f 12163/25173/9092 12169/25186/9092 12172/25190/9092 12173/25192/9092 +f 12169/25186/9078 12167/25181/9078 12171/25189/9078 12172/25190/9078 +f 12174/25193/9190 12164/25175/9190 12175/25195/9190 12176/25196/9190 +f 12159/25168/9059 12156/25162/9181 12177/25198/9191 12166/25179/9192 +f 12155/25160/9084 12157/25164/9084 12174/25194/9084 12178/25201/9084 +f 12156/25162/9085 12155/25161/9085 12178/25200/9085 12177/25198/9085 +f 12157/25165/9193 12162/25172/9193 12164/25175/9193 12174/25193/9193 +f 12179/25202/9194 12180/25204/9194 12181/25206/9088 12182/25207/9088 +f 12171/25188/9195 12170/25187/9195 12183/25210/9195 12184/25212/9195 +f 12185/25216/9090 12186/25218/9090 12187/25220/9090 12188/25221/9090 +f 12176/25196/9091 12175/25195/9091 12189/25225/9091 12190/25227/9091 +f 12164/25175/9187 12163/25174/9186 12173/25191/9196 12175/25195/9197 +f 12166/25179/9192 12177/25198/9191 12191/25231/9198 12170/25187/9199 +f 12178/25201/9081 12174/25194/9081 12176/25197/9081 12192/25233/9081 +f 12177/25199/9080 12178/25201/9080 12192/25233/9080 12191/25232/9080 +f 12135/25122/9099 12140/25131/9099 12193/25234/9099 12194/25236/9099 +f 12137/25126/9100 12120/25098/9100 12195/25240/9100 12196/25242/9100 +f 12140/25130/9174 12138/25127/9173 12197/25243/9200 12193/25235/9201 +f 12138/25127/9202 12137/25125/9202 12196/25241/9202 12197/25243/9202 +f 12128/25112/9033 12126/25110/9033 12136/25123/9033 12198/25244/9033 +f 12125/25108/9105 12139/25129/9105 12140/25131/9105 12135/25122/9105 +f 12118/25095/9203 12128/25112/9203 12198/25244/9106 12119/25096/9107 +f 12123/25105/9108 12117/25093/9108 12120/25098/9108 12137/25126/9108 +f 12193/25235/9201 12197/25243/9200 12199/25245/9204 12200/25246/9205 +f 12197/25243/9206 12196/25241/9206 12201/25248/9206 12199/25245/9206 +f 12195/25238/9129 12202/25252/9129 12203/25253/9129 12204/25254/9129 +f 12205/25258/9128 12194/25236/9128 12206/25260/9128 12207/25263/9128 +f 12198/25244/9098 12136/25123/9098 12205/25257/9098 12208/25266/9098 +f 12119/25096/9107 12198/25244/9106 12208/25266/9115 12202/25250/9116 +f 12136/25124/9117 12135/25122/9117 12194/25236/9117 12205/25258/9117 +f 12120/25099/9118 12119/25097/9118 12202/25251/9118 12195/25239/9118 +f 12204/25254/9121 12203/25253/9121 12209/25268/9121 12210/25270/9121 +f 12207/25264/9122 12206/25261/9122 12211/25273/9122 12212/25275/9122 +f 12203/25253/9123 12213/25276/9124 12214/25277/9125 12209/25268/9126 +f 12213/25276/9141 12207/25265/9141 12212/25274/9141 12214/25277/9141 +f 12196/25242/9111 12195/25240/9111 12204/25255/9111 12201/25247/9111 +f 12194/25237/9110 12193/25235/9110 12200/25246/9110 12206/25262/9110 +f 12208/25267/9127 12205/25259/9127 12207/25265/9127 12213/25276/9127 +f 12202/25252/9116 12208/25267/9115 12213/25276/9124 12203/25253/9123 +f 12214/25277/9132 12212/25274/9132 12185/25217/9133 12215/25278/9133 +f 12211/25273/9134 12216/25279/9134 12179/25203/9135 12186/25218/9136 +f 12217/25281/9207 12210/25271/9207 12218/25283/9207 12219/25284/9207 +f 12216/25280/9208 12220/25286/9209 12180/25204/9194 12179/25202/9194 +f 12199/25245/9210 12201/25248/9210 12217/25282/9210 12220/25286/9210 +f 12200/25246/9205 12199/25245/9204 12220/25286/9209 12216/25280/9208 +f 12201/25249/9211 12204/25256/9211 12210/25271/9211 12217/25281/9211 +f 12206/25262/9140 12200/25246/9140 12216/25280/9140 12211/25272/9140 +f 12219/25284/9142 12218/25283/9142 12221/25287/9142 12222/25289/9142 +f 12175/25195/9197 12173/25191/9196 12223/25293/9143 12189/25225/9143 +f 12170/25187/9199 12191/25231/9198 12224/25296/9146 12183/25210/9146 +f 12218/25283/9144 12225/25299/9144 12226/25301/9145 12221/25287/9145 +f 12209/25268/9126 12214/25277/9125 12215/25278/9131 12225/25300/9131 +f 12212/25275/9130 12211/25273/9130 12186/25218/9130 12185/25216/9130 +f 12210/25271/9147 12209/25269/9147 12225/25299/9144 12218/25283/9144 +f 12220/25286/9212 12217/25282/9212 12219/25285/9213 12180/25204/9214 +f 12227/25304/9152 12184/25213/9152 12183/25211/9152 12224/25297/9152 +f 12190/25228/9152 12227/25304/9152 12224/25297/9152 12228/25306/9152 +f 12189/25226/9153 12223/25294/9152 12227/25305/9152 12190/25229/9152 +f 12223/25294/9152 12229/25308/9152 12184/25214/9152 12227/25305/9152 +f 12230/25310/9154 12188/25222/9154 12187/25219/9155 12182/25208/9155 +f 12222/25290/9156 12230/25310/9154 12182/25208/9155 12181/25205/9157 +f 12221/25288/9154 12226/25302/9154 12230/25311/9154 12222/25291/9156 +f 12226/25302/9154 12231/25312/9154 12188/25223/9154 12230/25311/9154 +f 12191/25232/9158 12192/25233/9158 12228/25307/9158 12224/25298/9158 +f 12225/25300/9131 12215/25278/9131 12231/25313/9159 12226/25303/9159 +f 12173/25192/9160 12172/25190/9160 12229/25309/9160 12223/25295/9160 +f 12180/25204/9214 12219/25285/9213 12222/25292/9215 12181/25206/9215 +f 12192/25233/9162 12176/25197/9162 12190/25230/9162 12228/25307/9162 +f 12215/25278/9133 12185/25217/9133 12188/25224/9163 12231/25313/9163 +f 12172/25190/9164 12171/25189/9164 12184/25215/9164 12229/25309/9164 +f 12186/25218/9136 12179/25203/9135 12182/25209/9165 12187/25220/9165 +f 11976/24834/9010 11975/24831/9009 12238/25324/9216 12240/25329/9217 +f 12240/25329/9217 12238/25324/9216 12239/25326/9023 12241/25331/9022 +f 11966/24812/9015 11981/24844/9014 12234/25316/9218 12236/25321/9219 +f 12236/25321/9219 12234/25316/9218 12235/25318/9019 12237/25323/9018 +f 11986/24858/9012 12233/25315/9012 12238/25325/9012 11975/24832/9012 +f 12233/25315/9012 12232/25314/9012 12239/25327/9012 12238/25325/9012 +f 11981/24845/9012 11980/24843/9012 12232/25314/9012 12234/25317/9012 +f 12234/25317/9012 12232/25314/9012 12233/25315/9012 12235/25319/9012 +o Chair.032 +v -9.113715 0.415382 -0.951295 +v -9.113715 0.429951 -0.951295 +v -9.138948 0.429951 -0.994018 +v -9.343361 0.429951 -1.340110 +v -9.368594 0.429951 -1.382833 +v -9.368594 0.415382 -1.382833 +v -9.343361 0.415382 -1.340110 +v -9.138948 0.415382 -0.994018 +v -9.037414 0.429951 -1.578438 +v -9.037414 0.415382 -1.578438 +v -9.037414 0.400812 -1.578438 +v -9.014214 0.400812 -1.539158 +v -9.343361 0.400812 -1.340110 +v -9.368594 0.400812 -1.382833 +v -8.782535 0.415382 -1.146900 +v -8.782535 0.429951 -1.146900 +v -8.805734 0.415382 -1.186179 +v -8.805734 0.429951 -1.186179 +v -8.782535 0.400812 -1.146900 +v -8.805734 0.400812 -1.186179 +v -9.113715 0.400812 -0.951295 +v -9.138948 0.400812 -0.994018 +v -9.014214 0.415382 -1.539158 +v -9.014214 0.429951 -1.539158 +v -9.204664 0.438060 -1.482175 +v -9.207635 0.443651 -1.487204 +v -9.320503 0.443651 -1.420541 +v -9.317533 0.438060 -1.415511 +v -9.317623 0.429976 -1.415664 +v -9.345428 0.437950 -1.399036 +v -9.343266 0.430300 -1.400518 +v -9.214679 0.429903 -1.499131 +v -9.214590 0.437987 -1.498980 +v -9.101722 0.437987 -1.565642 +v -9.101811 0.429903 -1.565794 +v -9.098878 0.443828 -1.560827 +v -9.071409 0.439408 -1.577051 +v -9.076265 0.434055 -1.580678 +v -9.207598 0.424135 -1.487141 +v -9.211709 0.424311 -1.494102 +v -9.098841 0.424311 -1.560765 +v -9.094730 0.424135 -1.553804 +v -9.211746 0.443828 -1.494165 +v -9.094768 0.443651 -1.553867 +v -9.327458 0.437987 -1.432316 +v -9.324615 0.443828 -1.427501 +v -9.204754 0.429976 -1.482327 +v -9.091887 0.429976 -1.548990 +v -9.320466 0.424135 -1.420478 +v -9.324577 0.424311 -1.427438 +v -9.079140 0.426646 -1.579185 +v -9.078095 0.421521 -1.573018 +v -9.067360 0.439247 -1.570055 +v -9.074045 0.421360 -1.566021 +v -9.069190 0.426713 -1.562395 +v -9.327548 0.429903 -1.432468 +v -9.355333 0.437881 -1.415852 +v -9.354115 0.443408 -1.410077 +v -9.344484 0.424773 -1.406292 +v -9.348644 0.424940 -1.413224 +v -9.353172 0.430231 -1.417333 +v -9.091797 0.438060 -1.548838 +v -9.367624 0.420977 -1.386131 +v -9.367390 0.416357 -1.392763 +v -9.371593 0.416497 -1.399669 +v -9.377511 0.420919 -1.402958 +v -9.381680 0.427313 -1.400291 +v -9.349955 0.443241 -1.403146 +v -9.397950 0.402967 -1.390886 +v -9.403671 0.407418 -1.387302 +v -9.371794 0.427371 -1.383463 +v -9.393799 0.407458 -1.370467 +v -9.388078 0.403008 -1.374051 +v -9.381914 0.431932 -1.393658 +v -9.405026 0.410634 -1.380008 +v -9.377711 0.431793 -1.386752 +v -9.400788 0.410537 -1.373122 +v -9.409078 0.380352 -1.361442 +v -9.402430 0.378323 -1.365575 +v -9.418941 0.380334 -1.378283 +v -9.420966 0.381800 -1.370593 +v -9.416708 0.381756 -1.363719 +v -9.386723 0.399792 -1.381345 +v -9.390960 0.399889 -1.388231 +v -9.434419 0.345795 -1.362648 +v -9.430159 0.345756 -1.355775 +v -9.400404 0.376856 -1.373264 +v -9.415791 0.342751 -1.357683 +v -9.413728 0.341467 -1.365395 +v -9.412293 0.378304 -1.382414 +v -9.404663 0.376901 -1.380138 +v -9.417987 0.341506 -1.372268 +v -9.425654 0.342735 -1.374523 +v -9.006373 0.349401 -1.599291 +v -9.013377 0.348454 -1.595360 +v -8.977983 -0.002953 -1.616263 +v -8.970981 -0.002007 -1.620195 +v -9.432355 0.344511 -1.370361 +v -9.506991 0.001491 -1.326278 +v -9.509055 0.002774 -1.318565 +v -9.008523 0.350077 -1.614194 +v -9.004562 0.350056 -1.607144 +v -8.969170 -0.001352 -1.628048 +v -8.973130 -0.001331 -1.635098 +v -9.490427 -0.000270 -1.313599 +v -9.488364 -0.001553 -1.321312 +v -9.422492 0.344527 -1.353520 +v -9.044765 0.425574 -1.592788 +v -9.051297 0.421603 -1.595425 +v -9.066316 0.434122 -1.563888 +v -9.041327 0.421652 -1.578647 +v -9.040766 0.425454 -1.585762 +v -9.057052 0.412305 -1.585447 +v -9.053052 0.412185 -1.578421 +v -9.046520 0.416156 -1.575785 +v -9.022641 0.403231 -1.589683 +v -9.021067 0.405075 -1.597397 +v -9.040862 0.398698 -1.595009 +v -9.036894 0.398640 -1.587964 +v -9.029303 0.400566 -1.585954 +v -9.056492 0.416106 -1.592561 +v -9.023902 0.371230 -1.595637 +v -9.016146 0.372479 -1.593725 +v -9.039287 0.400542 -1.602723 +v -9.026132 0.372464 -1.610492 +v -9.027864 0.371267 -1.602686 +v -9.025034 0.405133 -1.604442 +v -9.007524 0.375406 -1.605395 +v -9.011487 0.375443 -1.612443 +v -9.032626 0.403207 -1.606453 +v -9.019243 0.374194 -1.614357 +v -9.016362 0.349392 -1.616059 +v -9.023364 0.348446 -1.612128 +v -9.009256 0.374209 -1.597588 +v -9.021215 0.347770 -1.597224 +v -9.025175 0.347791 -1.604274 +v -8.989782 -0.003617 -1.625178 +v -8.985822 -0.003637 -1.618129 +v -9.497128 0.001507 -1.309437 +v -8.987971 -0.002962 -1.633031 +v -9.500291 -0.000286 -1.330440 +v -9.498710 0.000611 -1.319939 +v -9.492624 -0.001514 -1.328185 +v -9.504796 0.002736 -1.311692 +v -8.979477 -0.002484 -1.626613 +v -8.980969 -0.002015 -1.636963 +v -8.938416 0.438060 -1.031387 +v -8.941386 0.443651 -1.036417 +v -9.054255 0.443651 -0.969753 +v -9.051285 0.438060 -0.964724 +v -9.051374 0.429976 -0.964876 +v -9.079180 0.437950 -0.948249 +v -9.077018 0.430300 -0.949730 +v -8.832593 0.424311 -1.109977 +v -8.835564 0.429903 -1.115007 +v -8.812892 0.426646 -1.128397 +v -8.811848 0.421521 -1.122230 +v -8.941350 0.424135 -1.036354 +v -8.945460 0.424311 -1.043314 +v -8.828482 0.424135 -1.103017 +v -8.945498 0.443828 -1.043377 +v -8.828519 0.443651 -1.103080 +v -8.832630 0.443828 -1.110040 +v -8.948341 0.437987 -1.048192 +v -8.835474 0.437987 -1.114855 +v -9.061210 0.437987 -0.981529 +v -9.058366 0.443828 -0.976714 +v -8.938506 0.429976 -1.031539 +v -8.825638 0.429976 -1.098202 +v -9.054218 0.424135 -0.969691 +v -9.058329 0.424311 -0.976651 +v -8.801111 0.439247 -1.119267 +v -8.805161 0.439408 -1.126264 +v -8.807797 0.421360 -1.115234 +v -8.802941 0.426713 -1.111607 +v -8.825549 0.438060 -1.098050 +v -8.800067 0.434122 -1.113100 +v -8.948431 0.429903 -1.048344 +v -9.061299 0.429903 -0.981680 +v -9.089085 0.437881 -0.965065 +v -9.087867 0.443408 -0.959290 +v -9.078237 0.424773 -0.955505 +v -9.082397 0.424940 -0.962436 +v -9.086924 0.430231 -0.966546 +v -9.083707 0.443241 -0.952358 +v -9.115667 0.431932 -0.942870 +v -9.111463 0.431793 -0.935965 +v -9.101376 0.420977 -0.935343 +v -9.101143 0.416357 -0.941976 +v -9.105346 0.416497 -0.948882 +v -9.111262 0.420919 -0.952171 +v -9.124712 0.399889 -0.937443 +v -9.131701 0.402967 -0.940099 +v -9.120475 0.399792 -0.930558 +v -9.115433 0.427313 -0.949503 +v -9.137424 0.407418 -0.936515 +v -9.105546 0.427371 -0.932676 +v -9.127550 0.407458 -0.919679 +v -9.121829 0.403008 -0.923263 +v -9.142830 0.380352 -0.910655 +v -9.136181 0.378323 -0.914786 +v -9.138778 0.410634 -0.929220 +v -9.152694 0.380334 -0.927496 +v -9.154718 0.381800 -0.919806 +v -9.134541 0.410537 -0.922335 +v -9.150460 0.381756 -0.912932 +v -9.166108 0.344511 -0.919573 +v -9.168170 0.345795 -0.911861 +v -9.163911 0.345756 -0.904987 +v -9.156243 0.344527 -0.902732 +v -9.134156 0.376856 -0.922477 +v -9.149542 0.342751 -0.906895 +v -9.147480 0.341467 -0.914607 +v -9.146046 0.378304 -0.931627 +v -9.138414 0.376901 -0.929350 +v -8.740126 0.349401 -1.148504 +v -8.747128 0.348454 -1.144572 +v -8.711736 -0.002953 -1.165476 +v -8.704733 -0.002007 -1.169408 +v -9.240744 0.001491 -0.875491 +v -9.242807 0.002774 -0.867778 +v -8.742275 0.350077 -1.163406 +v -8.738315 0.350056 -1.156357 +v -8.702922 -0.001352 -1.177261 +v -8.706882 -0.001331 -1.184310 +v -9.224179 -0.000270 -0.862812 +v -9.222116 -0.001553 -0.870525 +v -9.159407 0.342735 -0.923736 +v -9.151739 0.341506 -0.921481 +v -8.775079 0.421652 -1.127859 +v -8.774518 0.425454 -1.134974 +v -8.790804 0.412305 -1.134659 +v -8.786804 0.412185 -1.127633 +v -8.780272 0.416156 -1.124996 +v -8.810018 0.434055 -1.129890 +v -8.763054 0.400566 -1.135166 +v -8.756393 0.403231 -1.138896 +v -8.770645 0.398640 -1.137177 +v -8.790244 0.416106 -1.141774 +v -8.773039 0.400542 -1.151935 +v -8.774613 0.398698 -1.144222 +v -8.778518 0.425574 -1.142001 +v -8.754818 0.405075 -1.146609 +v -8.758785 0.405133 -1.153655 +v -8.785049 0.421603 -1.144637 +v -8.759884 0.372464 -1.159705 +v -8.761617 0.371267 -1.151898 +v -8.741276 0.375406 -1.154608 +v -8.745239 0.375443 -1.161656 +v -8.766378 0.403207 -1.155665 +v -8.752995 0.374194 -1.163570 +v -8.750113 0.349392 -1.165271 +v -8.743009 0.374209 -1.146801 +v -8.757653 0.371230 -1.144850 +v -8.758926 0.347791 -1.153487 +v -8.754966 0.347770 -1.146437 +v -8.749897 0.372479 -1.142936 +v -8.723534 -0.003617 -1.174391 +v -8.719573 -0.003637 -1.167341 +v -9.230881 0.001507 -0.858650 +v -9.234043 -0.000286 -0.879653 +v -8.757115 0.348446 -1.161340 +v -8.721723 -0.002962 -1.182244 +v -9.232462 0.000611 -0.869151 +v -9.226376 -0.001514 -0.877398 +v -9.238547 0.002736 -0.860905 +v -8.713228 -0.002484 -1.175825 +v -8.714721 -0.002015 -1.186175 +v -8.875227 0.396685 -1.303839 +v -8.944720 0.396685 -1.421499 +v -8.875227 0.411254 -1.303839 +v -8.944720 0.411254 -1.421499 +v -9.207086 0.411254 -1.109382 +v -9.275224 0.411254 -1.224746 +v -8.944720 0.382115 -1.421499 +v -8.875227 0.382115 -1.303839 +v -9.275224 0.382115 -1.224746 +v -9.207086 0.382115 -1.109382 +vn 0.7171 -0.0000 0.6970 +vn -0.1762 -0.7071 0.6848 +vn -0.8610 -0.0000 0.5086 +vn -0.6848 -0.7071 -0.1762 +vn -0.6261 0.6667 -0.4045 +vn -0.5086 -0.0000 -0.8610 +vn -0.0000 -1.0000 -0.0000 +vn -0.0351 -0.9977 -0.0584 +vn -0.0355 -0.9976 -0.0592 +vn 0.5086 -0.0000 0.8610 +vn 0.8610 -0.0000 -0.5086 +vn -0.0000 1.0000 -0.0000 +vn -0.0342 0.9977 -0.0589 +vn -0.0347 0.9976 -0.0597 +vn 0.0355 0.9976 0.0592 +vn 0.0351 0.9977 0.0584 +vn 0.0352 0.9977 0.0587 +vn 0.0354 0.9976 0.0590 +vn 0.0347 -0.9976 0.0597 +vn 0.0342 -0.9977 0.0589 +vn 0.0344 -0.9977 0.0592 +vn 0.0346 -0.9976 0.0594 +vn 0.3517 0.7224 0.5954 +vn 0.3468 0.7268 0.5928 +vn 0.3468 0.7269 0.5928 +vn 0.5084 -0.0225 0.8609 +vn 0.5087 -0.0215 0.8607 +vn 0.5140 -0.0204 0.8575 +vn -0.5084 0.0218 -0.8608 +vn -0.5073 0.0219 -0.8615 +vn -0.5072 0.0219 -0.8616 +vn -0.2820 0.6937 -0.6627 +vn -0.0111 -0.9998 -0.0187 +vn 0.0111 0.9998 0.0188 +vn -0.3673 0.6915 -0.6220 +vn -0.3674 0.6962 -0.6167 +vn 0.0058 0.9997 0.0217 +vn 0.3674 -0.6915 0.6220 +vn -0.4220 -0.7257 -0.5434 +vn 0.1289 0.9903 -0.0514 +vn 0.2912 -0.6955 0.6569 +vn -0.3517 -0.7223 -0.5954 +vn -0.5084 0.0221 -0.8608 +vn -0.3675 0.7008 -0.6114 +vn -0.0303 -0.9995 -0.0067 +vn -0.5143 0.0214 -0.8573 +vn -0.5088 0.0224 -0.8606 +vn 0.5480 -0.6683 0.5031 +vn -0.1520 -0.6972 -0.7006 +vn 0.2490 -0.9532 -0.1717 +vn -0.5199 0.0184 -0.8540 +vn -0.5151 0.0214 -0.8569 +vn 0.0004 0.9997 0.0245 +vn -0.3566 -0.7326 -0.5798 +vn 0.3420 0.7313 0.5902 +vn 0.3519 -0.7022 0.6189 +vn -0.5245 0.0132 -0.8513 +vn -0.5209 0.0177 -0.8534 +vn 0.5196 -0.0175 0.8542 +vn 0.5148 -0.0204 0.8571 +vn 0.5202 -0.0172 0.8539 +vn 0.5240 -0.0124 0.8516 +vn -0.7358 0.5509 -0.3938 +vn -0.0423 0.5748 0.8172 +vn -0.2774 0.9421 0.1885 +vn 0.1386 0.6901 0.7103 +vn -0.5624 0.6614 -0.4962 +vn 0.5243 -0.0119 0.8515 +vn 0.5255 -0.0090 0.8508 +vn -0.8691 0.3812 -0.3151 +vn -0.1814 0.3978 0.8993 +vn -0.7135 0.5403 0.4461 +vn 0.5004 -0.8044 -0.3201 +vn 0.0316 -0.5868 -0.8091 +vn 0.7240 -0.5625 0.3992 +vn -0.5242 0.7833 0.3342 +vn -0.7788 0.3980 0.4849 +vn 0.9146 -0.2790 0.2926 +vn 0.2253 -0.2912 -0.9297 +vn 0.7778 -0.4005 -0.4844 +vn -0.5260 0.0092 -0.8504 +vn -0.5248 0.0122 -0.8511 +vn 0.6969 -0.5692 -0.4362 +vn 0.1747 -0.4135 -0.8936 +vn 0.8612 -0.3964 0.3182 +vn 0.4897 -0.0027 0.8719 +vn 0.4898 -0.0025 0.8719 +vn -0.9447 0.1694 -0.2809 +vn 0.8661 0.1162 -0.4862 +vn 0.9447 -0.1695 0.2809 +vn -0.2257 0.2899 0.9301 +vn -0.9151 0.2777 -0.2924 +vn 0.5251 -0.0079 0.8510 +vn 0.5259 -0.0056 0.8505 +vn -0.5267 0.0054 -0.8500 +vn -0.5263 0.0070 -0.8503 +vn -0.1155 0.6472 -0.7535 +vn 0.5986 0.6748 0.4317 +vn -0.3139 -0.9356 0.1615 +vn 0.5057 -0.0216 0.8624 +vn 0.5013 -0.0208 0.8650 +vn 0.4962 -0.0183 0.8680 +vn 0.5005 -0.0205 0.8655 +vn 0.4319 0.7239 0.5380 +vn -0.5056 0.0227 -0.8625 +vn -0.5010 0.0218 -0.8652 +vn -0.1097 -0.9932 0.0402 +vn 0.5060 -0.0222 0.8623 +vn 0.7604 0.5630 0.3239 +vn -0.5142 -0.8103 0.2809 +vn 0.4921 -0.0112 0.8705 +vn 0.4953 -0.0173 0.8686 +vn -0.0256 -0.5801 0.8141 +vn -0.5003 0.0211 -0.8656 +vn -0.4959 0.0187 -0.8682 +vn 0.3618 0.9128 -0.1894 +vn -0.5732 -0.6896 -0.4426 +vn 0.1364 -0.6617 0.7373 +vn -0.1672 -0.3366 0.9267 +vn -0.8993 -0.3512 -0.2605 +vn 0.7714 0.4682 -0.4309 +vn -0.4917 0.0114 -0.8707 +vn -0.4949 0.0175 -0.8687 +vn -0.4912 0.0104 -0.8710 +vn -0.4897 0.0032 -0.8719 +vn 0.0506 0.5405 -0.8398 +vn 0.5832 0.7463 -0.3208 +vn -0.7242 -0.6033 -0.3339 +vn 0.8641 0.1344 -0.4851 +vn -0.4898 0.0027 -0.8718 +vn 0.2236 0.0928 -0.9703 +vn 0.2238 0.0866 -0.9708 +vn 0.9682 0.0969 0.2305 +vn 0.9688 0.0905 0.2305 +vn 0.9689 0.0904 0.2305 +vn 0.4905 -0.0030 0.8714 +vn 0.4921 -0.0100 0.8705 +vn -0.7649 -0.4821 0.4272 +vn 0.9025 0.3437 0.2597 +vn 0.1693 0.3294 -0.9289 +vn -0.8661 -0.1162 0.4862 +vn 0.5267 -0.0053 0.8501 +vn -0.9689 -0.0898 -0.2305 +vn -0.9694 -0.0839 -0.2305 +vn -0.5266 0.0053 -0.8501 +vn -0.9684 -0.0956 -0.2304 +vn -0.2236 -0.0916 0.9704 +vn -0.2238 -0.0860 0.9708 +vn -0.2238 -0.0859 0.9708 +vn -0.8644 -0.1319 0.4852 +vn -0.1892 -0.9756 0.1118 +vn -0.1892 -0.9756 0.1117 +vn -0.1893 -0.9756 0.1117 +vn 0.1008 -0.9931 -0.0596 +vn 0.1008 -0.9931 -0.0595 +vn 0.1009 -0.9931 -0.0595 +vn 0.1009 -0.9931 -0.0596 +vn 0.2515 -0.1770 -0.9515 +vn -0.4898 0.0025 -0.8718 +vn -0.2515 0.1770 0.9515 +vn -0.2240 -0.0803 0.9713 +vn 0.8235 -0.2449 -0.5117 +vn 0.2240 0.0803 -0.9713 +vn -0.8235 0.2449 0.5117 +vn 0.9694 0.0839 0.2305 +vn 0.5084 -0.0221 0.8608 +vn 0.5088 -0.0224 0.8606 +vn 0.5143 -0.0214 0.8573 +vn 0.3673 -0.6915 0.6220 +vn 0.2911 -0.6956 0.6568 +vn 0.5073 -0.0219 0.8615 +vn 0.5072 -0.0219 0.8616 +vn 0.5011 -0.0218 0.8651 +vn 0.5054 -0.0228 0.8626 +vn -0.5084 0.0224 -0.8609 +vn -0.5142 0.0214 -0.8574 +vn -0.5087 0.0224 -0.8606 +vn 0.5084 -0.0218 0.8608 +vn 0.3519 -0.7023 0.6189 +vn 0.5005 -0.8044 -0.3201 +vn -0.5200 0.0183 -0.8540 +vn -0.5245 0.0133 -0.8513 +vn 0.5200 -0.0183 0.8540 +vn 0.5151 -0.0214 0.8569 +vn 0.5208 -0.0178 0.8535 +vn 0.5246 -0.0131 0.8512 +vn -0.5624 0.6614 -0.4963 +vn 0.5248 -0.0122 0.8511 +vn 0.5259 -0.0094 0.8505 +vn 0.7240 -0.5626 0.3991 +vn -0.5242 0.7833 0.3343 +vn -0.7358 0.5509 -0.3939 +vn 0.9147 -0.2790 0.2925 +vn -0.5260 0.0091 -0.8504 +vn -0.5248 0.0123 -0.8511 +vn 0.8612 -0.3964 0.3181 +vn 0.4898 -0.0027 0.8718 +vn 0.4898 -0.0025 0.8718 +vn -0.9447 0.1695 -0.2808 +vn 0.9447 -0.1695 0.2808 +vn 0.5263 -0.0070 0.8503 +vn 0.5270 -0.0058 0.8499 +vn -0.5267 0.0055 -0.8501 +vn 0.4959 -0.0187 0.8682 +vn 0.5003 -0.0210 0.8656 +vn 0.1364 -0.6618 0.7372 +vn -0.2820 0.6937 -0.6628 +vn -0.5060 0.0221 -0.8623 +vn -0.5011 0.0218 -0.8651 +vn 0.4917 -0.0114 0.8707 +vn 0.4950 -0.0176 0.8687 +vn -0.0256 -0.5802 0.8141 +vn -0.4950 0.0175 -0.8687 +vn -0.4896 0.0032 -0.8719 +vn -0.8644 -0.1319 0.4853 +vn 0.4912 -0.0104 0.8710 +vn 0.4896 -0.0032 0.8719 +vn -0.1673 -0.3367 0.9266 +vn 0.5266 -0.0053 0.8501 +vn -0.2238 -0.0916 0.9703 +vn -0.2240 -0.0860 0.9708 +vn -0.2240 -0.0859 0.9708 +vn -0.2241 -0.0803 0.9712 +vn -0.0354 -0.9976 -0.0590 +vn -0.0352 -0.9977 -0.0587 +vn -0.0346 0.9976 -0.0594 +vn -0.0344 0.9977 -0.0592 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.973130 0.033128 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.677629 0.482142 +vt 0.409642 -0.009898 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.669677 0.481452 +vt 0.240570 0.058726 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +vt 0.296927 -0.019617 +vt 0.353285 -0.019617 +vt 0.470812 0.481452 +vt 0.296927 0.014692 +vt 0.271947 0.481452 +vt 0.353285 0.014692 +vt -0.849112 0.025953 +vt 0.468872 0.000137 +vt -0.911121 0.025955 +vt 0.273887 0.000137 +vt 0.475153 0.482142 +vt 0.353285 -0.053929 +vt 0.272677 0.482143 +vt 0.296927 -0.053929 +vt -0.911121 -0.024667 +vt 0.473178 0.006015 +vt -0.849112 -0.024667 +vt 0.274652 0.006015 +s 1 +usemtl Wood +f 12242/25333/9220 12243/25335/9221 12244/25338/9222 12514/25847/9222 12515/25849/9222 12245/25340/9222 12246/25342/9223 12247/25346/9224 12248/25347/9222 12249/25348/9222 +f 12247/25345/9224 12246/25343/9223 12250/25350/9225 12251/25353/9225 +f 12252/25355/9226 12253/25358/9227 12254/25361/9228 12255/25362/9226 +f 12256/25366/9229 12257/25367/9229 12243/25336/9221 12242/25332/9220 +f 12257/25368/9230 12256/25365/9230 12258/25370/9230 12259/25372/9230 +f 12260/25373/9230 12261/25376/9230 12258/25370/9230 12256/25365/9230 +f 12260/25374/9229 12256/25366/9229 12242/25332/9220 12262/25378/9229 +f 12255/25363/9225 12247/25345/9224 12251/25353/9225 12252/25356/9225 +f 12262/25379/9222 12242/25333/9222 12249/25348/9222 12248/25347/9222 12247/25346/9222 12255/25364/9222 12254/25360/9222 12518/25855/9222 12519/25857/9222 12263/25382/9222 +f 12255/25364/9222 12254/25360/9222 12248/25347/9222 12247/25346/9222 +f 12249/25349/9230 12242/25334/9230 12262/25380/9230 12263/25383/9230 +f 12513/25846/9230 12511/25842/9230 12264/25385/9230 12265/25386/9230 +f 12251/25354/9230 12250/25351/9230 12265/25386/9230 12264/25385/9230 +f 12510/25841/9230 12258/25370/9230 12261/25376/9230 12517/25854/9230 +f 12253/25359/9230 12252/25357/9230 12251/25354/9230 12264/25385/9230 +f 12257/25369/9231 12259/25371/9232 12244/25339/9233 12243/25337/9231 +f 12245/25341/9234 12265/25387/9235 12250/25352/9231 12246/25344/9231 +f 12515/25850/9236 12513/25845/9237 12265/25387/9235 12245/25341/9234 +f 12263/25384/9238 12261/25377/9239 12260/25375/9226 12262/25381/9226 +f 12519/25858/9240 12517/25853/9241 12261/25377/9239 12263/25384/9238 +f 12266/25388/9242 12267/25389/9242 12268/25390/9243 12269/25392/9244 +f 12270/25393/9245 12269/25391/9245 12271/25396/9246 12272/25398/9247 +f 12273/25400/9248 12274/25401/9248 12275/25402/9249 12276/25404/9250 +f 12275/25402/9251 12277/25405/9251 12278/25407/9251 12279/25409/9251 +f 12280/25411/9252 12281/25412/9252 12282/25413/9252 12283/25415/9252 +f 12284/25417/9253 12267/25389/9253 12285/25418/9253 12277/25406/9253 +f 12274/25401/9254 12284/25416/9254 12277/25405/9254 12275/25402/9254 +f 12286/25419/9255 12287/25420/9255 12284/25416/9254 12274/25401/9254 +f 12287/25421/9256 12268/25390/9256 12267/25389/9253 12284/25417/9253 +f 12288/25422/9257 12280/25410/9257 12283/25414/9257 12289/25423/9257 +f 12270/25394/9257 12290/25426/9257 12280/25410/9257 12288/25422/9257 +f 12290/25425/9252 12291/25427/9252 12281/25412/9252 12280/25411/9252 +f 12282/25413/9258 12276/25403/9258 12292/25429/9258 12293/25430/9258 +f 12277/25406/9259 12285/25418/9259 12294/25431/9259 12278/25408/9259 +f 12289/25423/9260 12283/25414/9260 12295/25433/9260 12296/25435/9260 +f 12281/25412/9261 12273/25399/9261 12276/25403/9261 12282/25413/9261 +f 12291/25427/9261 12297/25437/9261 12273/25399/9261 12281/25412/9261 +f 12297/25436/9262 12286/25419/9262 12274/25401/9248 12273/25400/9248 +f 12287/25420/9255 12286/25419/9255 12298/25438/9263 12299/25440/9263 +f 12291/25427/9264 12290/25425/9264 12300/25441/9264 12301/25443/9264 +f 12286/25419/9262 12297/25436/9262 12302/25444/9265 12298/25438/9266 +f 12303/25446/9242 12285/25418/9242 12267/25389/9242 12266/25388/9242 +f 12300/25442/9267 12272/25397/9267 12304/25449/9267 12305/25451/9267 +f 12302/25445/9268 12301/25443/9268 12306/25452/9268 12307/25454/9268 +f 12301/25443/9269 12300/25441/9269 12305/25450/9269 12306/25452/9269 +f 12298/25438/9266 12302/25444/9265 12307/25455/9270 12308/25456/9271 +f 12268/25390/9256 12287/25421/9256 12299/25439/9272 12309/25457/9272 +f 12297/25437/9273 12291/25427/9273 12301/25443/9273 12302/25445/9273 +f 12269/25392/9244 12268/25390/9243 12309/25457/9274 12271/25395/9274 +f 12290/25426/9275 12270/25394/9275 12272/25397/9275 12300/25442/9275 +f 12308/25456/9271 12307/25455/9270 12310/25458/9276 12311/25459/9277 +f 12304/25449/9278 12312/25460/9279 12313/25463/9280 12314/25464/9281 +f 12315/25465/9282 12308/25456/9282 12311/25459/9282 12316/25467/9282 +f 12312/25460/9283 12317/25470/9283 12318/25472/9283 12313/25463/9283 +f 12309/25457/9284 12299/25439/9284 12315/25466/9284 12317/25471/9284 +f 12271/25395/9285 12309/25457/9285 12317/25471/9285 12312/25461/9285 +f 12299/25440/9286 12298/25438/9286 12308/25456/9286 12315/25465/9286 +f 12272/25398/9247 12271/25396/9246 12312/25462/9279 12304/25448/9278 +f 12314/25464/9281 12313/25463/9280 12319/25476/9287 12320/25477/9288 +f 12316/25467/9289 12311/25459/9289 12321/25478/9289 12322/25480/9289 +f 12313/25463/9290 12318/25472/9290 12323/25481/9290 12319/25476/9290 +f 12318/25473/9291 12316/25468/9291 12322/25479/9291 12323/25482/9291 +f 12306/25452/9292 12305/25450/9292 12324/25483/9292 12325/25486/9292 +f 12307/25455/9293 12306/25453/9293 12325/25488/9293 12310/25458/9293 +f 12305/25451/9294 12304/25449/9294 12314/25464/9294 12324/25485/9294 +f 12317/25471/9295 12315/25466/9295 12316/25469/9295 12318/25474/9295 +f 12323/25482/9296 12322/25479/9296 12326/25490/9296 12327/25491/9296 +f 12328/25493/9297 12320/25477/9297 12329/25494/9297 12330/25495/9297 +f 12331/25497/9298 12332/25499/9298 12333/25501/9298 12334/25503/9298 +f 12332/25499/9299 12328/25492/9299 12330/25496/9299 12333/25501/9299 +f 12311/25459/9277 12310/25458/9276 12331/25498/9300 12321/25478/9301 +f 12325/25487/9302 12324/25484/9302 12328/25492/9302 12332/25499/9302 +f 12310/25458/9303 12325/25488/9303 12332/25500/9303 12331/25498/9303 +f 12324/25485/9304 12314/25464/9304 12320/25477/9304 12328/25493/9304 +f 12335/25504/9305 12336/25506/9305 12337/25508/9306 12338/25509/9306 +f 12326/25489/9307 12339/25512/9307 12340/25513/9307 12341/25515/9307 +f 12342/25518/9308 12343/25520/9308 12344/25522/9308 12345/25523/9308 +f 12330/25495/9309 12329/25494/9309 12346/25526/9309 12347/25528/9309 +f 12319/25475/9310 12323/25482/9310 12327/25491/9310 12348/25532/9310 +f 12322/25480/9311 12321/25478/9311 12339/25512/9311 12326/25489/9311 +f 12320/25477/9288 12319/25476/9287 12348/25531/9312 12329/25494/9313 +f 12321/25478/9301 12331/25498/9300 12334/25502/9314 12339/25512/9315 +f 12279/25409/9316 12278/25407/9316 12349/25533/9316 12350/25535/9316 +f 12294/25431/9317 12351/25536/9317 12352/25538/9317 12353/25542/9317 +f 12295/25432/9318 12293/25430/9318 12354/25543/9318 12355/25545/9318 +f 12351/25537/9319 12296/25434/9320 12356/25547/9321 12352/25539/9322 +f 12285/25418/9323 12303/25446/9323 12351/25536/9323 12294/25431/9323 +f 12276/25404/9250 12275/25402/9249 12279/25409/9324 12292/25428/9325 +f 12283/25415/9326 12282/25413/9326 12293/25430/9326 12295/25432/9326 +f 12303/25447/9327 12289/25424/9327 12296/25434/9320 12351/25537/9319 +f 12353/25541/9328 12352/25540/9328 12357/25549/9328 12358/25552/9328 +f 12355/25545/9329 12354/25543/9329 12359/25553/9329 12360/25556/9329 +f 12352/25540/9322 12356/25548/9321 12361/25559/9330 12357/25549/9331 +f 12356/25548/9332 12355/25546/9332 12360/25557/9332 12361/25559/9332 +f 12292/25428/9325 12279/25409/9324 12350/25535/9333 12362/25561/9334 +f 12278/25408/9335 12294/25431/9335 12353/25542/9335 12349/25534/9335 +f 12293/25430/9336 12292/25429/9336 12362/25560/9336 12354/25543/9336 +f 12296/25435/9337 12295/25433/9337 12355/25546/9337 12356/25548/9337 +f 12361/25559/9338 12360/25557/9338 12363/25562/9338 12364/25564/9338 +f 12359/25554/9339 12365/25565/9339 12366/25566/9339 12367/25568/9339 +f 12368/25570/9340 12358/25550/9340 12369/25573/9340 12370/25575/9340 +f 12365/25565/9341 12371/25577/9342 12372/25578/9343 12366/25566/9344 +f 12350/25535/9345 12349/25533/9345 12368/25572/9345 12371/25577/9345 +f 12362/25561/9334 12350/25535/9333 12371/25577/9342 12365/25565/9341 +f 12349/25534/9346 12353/25542/9346 12358/25551/9346 12368/25571/9346 +f 12354/25544/9347 12362/25561/9347 12365/25565/9347 12359/25554/9347 +f 12370/25575/9348 12369/25573/9348 12343/25520/9348 12342/25518/9348 +f 12366/25566/9344 12372/25578/9343 12373/25579/9349 12374/25581/9349 +f 12372/25578/9350 12370/25576/9350 12342/25519/9351 12373/25579/9351 +f 12369/25573/9352 12375/25582/9352 12335/25505/9353 12343/25520/9354 +f 12357/25549/9331 12361/25559/9330 12364/25564/9355 12375/25583/9356 +f 12360/25558/9357 12359/25555/9357 12367/25569/9357 12363/25563/9357 +f 12358/25552/9358 12357/25549/9358 12375/25583/9358 12369/25574/9358 +f 12371/25577/9359 12368/25572/9359 12370/25576/9359 12372/25578/9359 +f 12376/25584/9360 12377/25586/9360 12378/25587/9360 12379/25589/9360 +f 12329/25494/9313 12348/25531/9312 12380/25592/9361 12346/25526/9361 +f 12377/25586/9362 12374/25580/9362 12381/25595/9363 12378/25587/9363 +f 12339/25512/9315 12334/25502/9314 12382/25598/9364 12340/25513/9364 +f 12367/25569/9365 12366/25567/9365 12374/25580/9362 12377/25586/9362 +f 12364/25564/9366 12363/25562/9366 12376/25585/9367 12336/25506/9368 +f 12375/25583/9356 12364/25564/9355 12336/25506/9305 12335/25504/9305 +f 12363/25563/9369 12367/25569/9369 12377/25586/9369 12376/25584/9369 +f 12383/25601/9370 12341/25516/9370 12340/25514/9370 12382/25599/9370 +f 12347/25529/9371 12383/25601/9370 12382/25599/9370 12384/25602/9370 +f 12346/25527/9372 12380/25593/9371 12383/25601/9370 12347/25529/9371 +f 12380/25593/9371 12385/25604/9370 12341/25516/9370 12383/25601/9370 +f 12386/25606/9373 12345/25524/9373 12344/25521/9373 12338/25510/9373 +f 12379/25590/9374 12386/25606/9373 12338/25510/9373 12337/25507/9374 +f 12378/25588/9375 12381/25596/9375 12386/25606/9373 12379/25590/9374 +f 12381/25596/9375 12387/25607/9376 12345/25524/9373 12386/25606/9373 +f 12334/25503/9377 12333/25501/9377 12384/25603/9377 12382/25600/9377 +f 12374/25581/9349 12373/25579/9349 12387/25608/9378 12381/25597/9378 +f 12348/25532/9379 12327/25491/9379 12385/25605/9379 12380/25594/9379 +f 12336/25506/9368 12376/25585/9367 12379/25591/9380 12337/25508/9380 +f 12333/25501/9381 12330/25496/9381 12347/25530/9381 12384/25603/9381 +f 12373/25579/9351 12342/25519/9351 12345/25525/9382 12387/25608/9382 +f 12327/25491/9383 12326/25490/9383 12341/25517/9383 12385/25605/9383 +f 12343/25520/9354 12335/25505/9353 12338/25511/9384 12344/25522/9384 +f 12388/25610/9242 12389/25611/9242 12390/25612/9243 12391/25614/9244 +f 12392/25615/9385 12391/25613/9385 12393/25617/9386 12394/25618/9387 +f 12395/25619/9258 12396/25621/9258 12397/25624/9258 12398/25626/9258 +f 12399/25628/9252 12400/25629/9252 12395/25620/9252 12401/25632/9252 +f 12402/25634/9253 12389/25611/9253 12403/25635/9253 12404/25636/9253 +f 12405/25638/9254 12402/25633/9254 12404/25637/9254 12406/25639/9254 +f 12407/25640/9254 12408/25641/9254 12402/25633/9254 12405/25638/9254 +f 12408/25642/9256 12390/25612/9256 12389/25611/9253 12402/25634/9253 +f 12409/25643/9388 12399/25627/9388 12401/25631/9388 12410/25644/9388 +f 12392/25615/9388 12411/25646/9388 12399/25627/9388 12409/25643/9388 +f 12411/25645/9252 12412/25647/9252 12400/25629/9252 12399/25628/9252 +f 12404/25636/9259 12403/25635/9259 12413/25649/9259 12414/25651/9259 +f 12410/25644/9389 12401/25631/9389 12415/25652/9389 12416/25654/9389 +f 12417/25655/9390 12410/25644/9391 12416/25654/9392 12418/25657/9393 +f 12400/25630/9261 12419/25659/9261 12396/25621/9261 12395/25619/9261 +f 12412/25648/9261 12420/25661/9261 12419/25659/9261 12400/25630/9261 +f 12408/25641/9263 12407/25640/9263 12421/25662/9263 12422/25664/9263 +f 12412/25647/9264 12411/25645/9264 12423/25665/9264 12424/25667/9264 +f 12407/25640/9394 12420/25660/9394 12425/25670/9395 12421/25662/9396 +f 12409/25643/9397 12388/25609/9397 12391/25613/9385 12392/25615/9385 +f 12410/25644/9391 12417/25655/9390 12388/25609/9397 12409/25643/9397 +f 12417/25656/9242 12403/25635/9242 12389/25611/9242 12388/25610/9242 +f 12426/25671/9284 12422/25663/9284 12427/25673/9284 12428/25675/9284 +f 12423/25666/9267 12394/25618/9267 12429/25677/9267 12430/25679/9267 +f 12425/25669/9268 12424/25668/9268 12431/25680/9268 12432/25683/9268 +f 12424/25667/9269 12423/25665/9269 12430/25678/9269 12431/25682/9269 +f 12390/25612/9256 12408/25642/9256 12422/25663/9272 12426/25671/9272 +f 12420/25661/9273 12412/25648/9273 12424/25668/9273 12425/25669/9273 +f 12391/25614/9244 12390/25612/9243 12426/25671/9274 12393/25616/9274 +f 12411/25646/9398 12392/25615/9398 12394/25618/9398 12423/25666/9398 +f 12432/25684/9293 12431/25681/9293 12433/25688/9293 12434/25689/9293 +f 12431/25682/9399 12430/25678/9399 12435/25690/9399 12433/25686/9399 +f 12436/25694/9271 12432/25684/9400 12434/25689/9401 12437/25695/9277 +f 12429/25677/9402 12438/25697/9403 12439/25698/9404 12440/25699/9405 +f 12393/25616/9285 12426/25671/9285 12428/25675/9285 12438/25696/9285 +f 12422/25664/9406 12421/25662/9406 12436/25693/9406 12427/25672/9406 +f 12394/25618/9387 12393/25617/9386 12438/25697/9403 12429/25677/9402 +f 12421/25662/9396 12425/25670/9395 12432/25685/9400 12436/25693/9271 +f 12440/25699/9405 12439/25698/9404 12441/25701/9407 12442/25702/9408 +f 12443/25705/9289 12437/25695/9289 12444/25706/9289 12445/25707/9289 +f 12439/25698/9290 12446/25711/9290 12447/25712/9290 12441/25701/9290 +f 12446/25709/9291 12443/25703/9291 12445/25708/9291 12447/25713/9291 +f 12430/25679/9409 12429/25677/9409 12440/25699/9409 12435/25692/9409 +f 12428/25675/9410 12427/25673/9410 12443/25704/9410 12446/25710/9410 +f 12438/25697/9283 12428/25676/9283 12446/25711/9283 12439/25698/9283 +f 12427/25674/9411 12436/25694/9411 12437/25695/9411 12443/25705/9411 +f 12445/25707/9311 12444/25706/9311 12448/25714/9311 12449/25715/9311 +f 12441/25700/9310 12447/25713/9310 12450/25717/9310 12451/25719/9310 +f 12447/25713/9296 12445/25708/9296 12449/25716/9296 12450/25717/9296 +f 12452/25720/9412 12442/25702/9412 12453/25722/9412 12454/25723/9412 +f 12437/25695/9277 12434/25689/9401 12455/25725/9413 12444/25706/9414 +f 12433/25687/9302 12435/25691/9302 12452/25721/9302 12456/25728/9302 +f 12434/25689/9303 12433/25688/9303 12456/25727/9303 12455/25725/9303 +f 12435/25692/9415 12440/25699/9415 12442/25702/9415 12452/25720/9415 +f 12457/25729/9416 12458/25731/9416 12459/25733/9417 12460/25734/9417 +f 12449/25715/9418 12448/25714/9418 12461/25737/9418 12462/25739/9418 +f 12463/25743/9308 12464/25745/9308 12465/25747/9308 12466/25748/9308 +f 12454/25723/9419 12453/25722/9419 12467/25752/9419 12468/25754/9419 +f 12442/25702/9408 12441/25701/9407 12451/25718/9420 12453/25722/9421 +f 12444/25706/9414 12455/25725/9413 12469/25758/9422 12448/25714/9315 +f 12456/25728/9299 12452/25721/9299 12454/25724/9299 12470/25760/9299 +f 12455/25726/9298 12456/25728/9298 12470/25760/9298 12469/25759/9298 +f 12413/25649/9317 12418/25658/9317 12471/25761/9317 12472/25763/9317 +f 12415/25653/9318 12398/25625/9318 12473/25767/9318 12474/25769/9318 +f 12418/25657/9393 12416/25654/9392 12475/25770/9423 12471/25762/9424 +f 12416/25654/9425 12415/25652/9425 12474/25768/9425 12475/25770/9425 +f 12406/25639/9426 12404/25637/9426 12414/25650/9426 12476/25771/9426 +f 12403/25635/9323 12417/25656/9323 12418/25658/9323 12413/25649/9323 +f 12396/25622/9427 12406/25639/9427 12476/25771/9324 12397/25623/9428 +f 12401/25632/9326 12395/25620/9326 12398/25625/9326 12415/25653/9326 +f 12471/25762/9424 12475/25770/9423 12477/25772/9429 12478/25773/9430 +f 12475/25770/9431 12474/25768/9431 12479/25775/9431 12477/25772/9431 +f 12473/25765/9347 12480/25779/9347 12481/25780/9347 12482/25781/9347 +f 12483/25785/9346 12472/25763/9346 12484/25787/9346 12485/25790/9346 +f 12476/25771/9316 12414/25650/9316 12483/25784/9316 12486/25793/9316 +f 12397/25623/9428 12476/25771/9324 12486/25793/9333 12480/25777/9334 +f 12414/25651/9335 12413/25649/9335 12472/25763/9335 12483/25785/9335 +f 12398/25626/9336 12397/25624/9336 12480/25778/9336 12473/25766/9336 +f 12482/25781/9339 12481/25780/9339 12487/25795/9339 12488/25797/9339 +f 12485/25791/9340 12484/25788/9340 12489/25800/9340 12490/25802/9340 +f 12481/25780/9341 12491/25803/9432 12492/25804/9343 12487/25795/9433 +f 12491/25803/9359 12485/25792/9359 12490/25801/9359 12492/25804/9359 +f 12474/25769/9329 12473/25767/9329 12482/25782/9329 12479/25774/9329 +f 12472/25764/9328 12471/25762/9328 12478/25773/9328 12484/25789/9328 +f 12486/25794/9345 12483/25786/9345 12485/25792/9345 12491/25803/9345 +f 12480/25779/9334 12486/25794/9333 12491/25803/9432 12481/25780/9341 +f 12492/25804/9350 12490/25801/9350 12463/25744/9351 12493/25805/9351 +f 12489/25800/9352 12494/25806/9352 12457/25730/9353 12464/25745/9354 +f 12495/25808/9434 12488/25798/9434 12496/25810/9434 12497/25811/9434 +f 12494/25807/9435 12498/25813/9436 12458/25731/9416 12457/25729/9416 +f 12477/25772/9437 12479/25775/9437 12495/25809/9437 12498/25813/9437 +f 12478/25773/9430 12477/25772/9429 12498/25813/9436 12494/25807/9435 +f 12479/25776/9357 12482/25783/9357 12488/25798/9357 12495/25808/9357 +f 12484/25789/9358 12478/25773/9358 12494/25807/9358 12489/25799/9358 +f 12497/25811/9360 12496/25810/9360 12499/25814/9360 12500/25816/9360 +f 12453/25722/9421 12451/25718/9420 12501/25820/9438 12467/25752/9438 +f 12448/25714/9315 12469/25758/9422 12502/25823/9364 12461/25737/9364 +f 12496/25810/9362 12503/25826/9362 12504/25828/9363 12499/25814/9363 +f 12487/25795/9433 12492/25804/9343 12493/25805/9349 12503/25827/9349 +f 12490/25802/9348 12489/25800/9348 12464/25745/9348 12463/25743/9348 +f 12488/25798/9365 12487/25796/9365 12503/25826/9362 12496/25810/9362 +f 12498/25813/9439 12495/25809/9439 12497/25812/9440 12458/25731/9441 +f 12505/25831/9370 12462/25740/9370 12461/25738/9370 12502/25824/9370 +f 12468/25755/9371 12505/25831/9370 12502/25824/9370 12506/25833/9370 +f 12467/25753/9372 12501/25821/9371 12505/25832/9370 12468/25756/9371 +f 12501/25821/9371 12507/25835/9370 12462/25741/9370 12505/25832/9370 +f 12508/25837/9373 12466/25749/9373 12465/25746/9373 12460/25735/9373 +f 12500/25817/9374 12508/25837/9373 12460/25735/9373 12459/25732/9374 +f 12499/25815/9375 12504/25829/9375 12508/25838/9373 12500/25818/9374 +f 12504/25829/9375 12509/25839/9376 12466/25750/9373 12508/25838/9373 +f 12469/25759/9377 12470/25760/9377 12506/25834/9377 12502/25825/9377 +f 12503/25827/9349 12493/25805/9349 12509/25840/9378 12504/25830/9378 +f 12451/25719/9379 12450/25717/9379 12507/25836/9379 12501/25822/9379 +f 12458/25731/9441 12497/25812/9440 12500/25819/9442 12459/25733/9442 +f 12470/25760/9381 12454/25724/9381 12468/25757/9381 12506/25834/9381 +f 12493/25805/9351 12463/25744/9351 12466/25751/9382 12509/25840/9382 +f 12450/25717/9383 12449/25716/9383 12462/25742/9383 12507/25836/9383 +f 12464/25745/9354 12457/25730/9353 12460/25736/9384 12465/25747/9384 +f 12254/25361/9228 12253/25358/9227 12516/25851/9443 12518/25856/9444 +f 12518/25856/9444 12516/25851/9443 12517/25853/9241 12519/25858/9240 +f 12244/25339/9233 12259/25371/9232 12512/25843/9445 12514/25848/9446 +f 12514/25848/9446 12512/25843/9445 12513/25845/9237 12515/25850/9236 +f 12264/25385/9230 12511/25842/9230 12516/25852/9230 12253/25359/9230 +f 12511/25842/9230 12510/25841/9230 12517/25854/9230 12516/25852/9230 +f 12259/25372/9230 12258/25370/9230 12510/25841/9230 12512/25844/9230 +f 12512/25844/9230 12510/25841/9230 12511/25842/9230 12513/25846/9230 +o Chair.033 +v -8.424152 0.415382 -2.539629 +v -8.424152 0.429951 -2.539629 +v -8.375533 0.429951 -2.529720 +v -7.981678 0.429951 -2.449456 +v -7.933060 0.429951 -2.439548 +v -7.933060 0.415382 -2.439548 +v -7.981678 0.415382 -2.449456 +v -8.375533 0.415382 -2.529720 +v -8.009866 0.429951 -2.062662 +v -8.009866 0.415382 -2.062662 +v -8.009866 0.400812 -2.062662 +v -8.054566 0.400812 -2.071772 +v -7.981678 0.400812 -2.449456 +v -7.933060 0.400812 -2.439548 +v -8.500958 0.415382 -2.162743 +v -8.500958 0.429951 -2.162743 +v -8.456259 0.415382 -2.153634 +v -8.456259 0.429951 -2.153634 +v -8.500958 0.400812 -2.162743 +v -8.456259 0.400812 -2.153634 +v -8.424152 0.400812 -2.539629 +v -8.375533 0.400812 -2.529720 +v -8.054566 0.415382 -2.071772 +v -8.054566 0.429951 -2.071772 +v -7.969207 0.438060 -2.251306 +v -7.963484 0.443651 -2.250139 +v -7.937308 0.443651 -2.378584 +v -7.943031 0.438060 -2.379750 +v -7.942858 0.429976 -2.379715 +v -7.936562 0.437950 -2.411495 +v -7.936910 0.430300 -2.408898 +v -7.949911 0.429903 -2.247373 +v -7.950083 0.437987 -2.247408 +v -7.976259 0.437987 -2.118964 +v -7.976087 0.429903 -2.118929 +v -7.981739 0.443828 -2.120081 +v -7.988109 0.439408 -2.088822 +v -7.982163 0.434055 -2.089995 +v -7.963555 0.424135 -2.250154 +v -7.955634 0.424311 -2.248540 +v -7.981810 0.424311 -2.120096 +v -7.989731 0.424135 -2.121710 +v -7.955563 0.443828 -2.248525 +v -7.989660 0.443651 -2.121696 +v -7.923907 0.437987 -2.375853 +v -7.929387 0.443828 -2.376970 +v -7.969034 0.429976 -2.251270 +v -7.995210 0.429976 -2.122826 +v -7.937379 0.424135 -2.378599 +v -7.929458 0.424311 -2.376985 +v -7.981345 0.426646 -2.093129 +v -7.986621 0.421521 -2.096487 +v -7.996016 0.439247 -2.090506 +v -7.994528 0.421360 -2.098171 +v -8.000473 0.426713 -2.096997 +v -7.923735 0.429903 -2.375818 +v -7.917442 0.437881 -2.407575 +v -7.922545 0.443408 -2.410542 +v -7.931809 0.424773 -2.405932 +v -7.923876 0.424940 -2.404374 +v -7.917792 0.430231 -2.404979 +v -7.995383 0.438060 -2.122862 +v -7.931262 0.420977 -2.436618 +v -7.926497 0.416357 -2.431998 +v -7.918554 0.416497 -2.430490 +v -7.912148 0.420919 -2.432677 +v -7.911332 0.427313 -2.437559 +v -7.930478 0.443241 -2.412100 +v -7.907407 0.402967 -2.455936 +v -7.906232 0.407418 -2.462584 +v -7.930447 0.427371 -2.441500 +v -7.925344 0.407458 -2.466542 +v -7.926518 0.403008 -2.459893 +v -7.916098 0.431932 -2.442178 +v -7.910738 0.410634 -2.468479 +v -7.924040 0.431793 -2.443687 +v -7.918688 0.410537 -2.469949 +v -7.921800 0.380352 -2.483929 +v -7.923190 0.378323 -2.476226 +v -7.902690 0.380334 -2.479962 +v -7.907041 0.381800 -2.486619 +v -7.914996 0.381756 -2.488066 +v -7.922013 0.399792 -2.453999 +v -7.914062 0.399889 -2.452529 +v -7.903921 0.345795 -2.501927 +v -7.911877 0.345756 -2.503373 +v -7.918840 0.376856 -2.469569 +v -7.920091 0.342751 -2.491431 +v -7.915751 0.341467 -2.484731 +v -7.904081 0.378304 -2.472260 +v -7.910885 0.376901 -2.468122 +v -7.907795 0.341506 -2.483285 +v -7.900982 0.342735 -2.487464 +v -8.015194 0.349401 -2.025650 +v -8.013417 0.348454 -2.033482 +v -8.021626 -0.002953 -1.993205 +v -8.023402 -0.002007 -1.985373 +v -7.899580 0.344511 -2.495227 +v -7.882270 0.001491 -2.580164 +v -7.886611 0.002774 -2.586865 +v -8.002693 0.350077 -2.017257 +v -8.010579 0.350056 -2.019042 +v -8.018787 -0.001352 -1.978765 +v -8.010901 -0.001331 -1.976979 +v -7.902782 -0.000270 -2.576368 +v -7.898441 -0.001553 -2.569668 +v -7.918689 0.344527 -2.499194 +v -7.994288 0.425574 -2.058501 +v -7.987953 0.421603 -2.061581 +v -8.001292 0.434122 -2.093864 +v -8.007088 0.421652 -2.065426 +v -8.002184 0.425454 -2.060241 +v -7.991502 0.412305 -2.072539 +v -7.999397 0.412185 -2.074280 +v -8.005731 0.416156 -2.071200 +v -8.011421 0.403231 -2.044162 +v -8.006752 0.405075 -2.037823 +v -7.995256 0.398698 -2.054115 +v -8.003144 0.398640 -2.055892 +v -8.009724 0.400566 -2.051605 +v -7.986597 0.416106 -2.067355 +v -8.006157 0.371230 -2.041108 +v -8.012775 0.372479 -2.036633 +v -7.990587 0.400542 -2.047776 +v -7.993638 0.372464 -2.032805 +v -7.998271 0.371267 -2.039324 +v -7.998864 0.405133 -2.036046 +v -8.009892 0.375406 -2.022412 +v -8.002006 0.375443 -2.020629 +v -7.992284 0.403207 -2.040333 +v -7.995388 0.374194 -2.025103 +v -7.996056 0.349392 -2.021824 +v -7.994280 0.348446 -2.029655 +v -8.014525 0.374209 -2.028930 +v -8.006781 0.347770 -2.038049 +v -7.998895 0.347791 -2.036263 +v -8.007103 -0.003617 -1.995986 +v -8.014989 -0.003637 -1.997771 +v -7.901380 0.001507 -2.584132 +v -8.002488 -0.002962 -1.989378 +v -7.883673 -0.000286 -2.572402 +v -7.892526 0.000611 -2.578266 +v -7.890485 -0.001514 -2.568223 +v -7.894567 0.002736 -2.588310 +v -8.012944 -0.002484 -1.987376 +v -8.004264 -0.002015 -1.981547 +v -8.482205 0.438060 -2.355851 +v -8.476482 0.443651 -2.354684 +v -8.450306 0.443651 -2.483129 +v -8.456030 0.438060 -2.484296 +v -8.455857 0.429976 -2.484261 +v -8.449560 0.437950 -2.516040 +v -8.449910 0.430300 -2.513444 +v -8.494808 0.424311 -2.224641 +v -8.489085 0.429903 -2.223475 +v -8.494343 0.426646 -2.197674 +v -8.499619 0.421521 -2.201032 +v -8.476554 0.424135 -2.354699 +v -8.468633 0.424311 -2.353085 +v -8.502729 0.424135 -2.226255 +v -8.468561 0.443828 -2.353070 +v -8.502658 0.443651 -2.226240 +v -8.494737 0.443828 -2.224626 +v -8.463081 0.437987 -2.351954 +v -8.489258 0.437987 -2.223510 +v -8.436906 0.437987 -2.480398 +v -8.442385 0.443828 -2.481515 +v -8.482034 0.429976 -2.355816 +v -8.508209 0.429976 -2.227372 +v -8.450377 0.424135 -2.483144 +v -8.442456 0.424311 -2.481530 +v -8.509014 0.439247 -2.195050 +v -8.501107 0.439408 -2.193367 +v -8.507527 0.421360 -2.202716 +v -8.513473 0.426713 -2.201543 +v -8.508382 0.438060 -2.227407 +v -8.514291 0.434122 -2.198409 +v -8.462910 0.429903 -2.351918 +v -8.436733 0.429903 -2.480363 +v -8.430441 0.437881 -2.512120 +v -8.435543 0.443408 -2.515087 +v -8.444808 0.424773 -2.510477 +v -8.436875 0.424940 -2.508919 +v -8.430791 0.430231 -2.509524 +v -8.443476 0.443241 -2.516645 +v -8.429096 0.431932 -2.546724 +v -8.437039 0.431793 -2.548232 +v -8.444261 0.420977 -2.541163 +v -8.439495 0.416357 -2.536544 +v -8.431553 0.416497 -2.535035 +v -8.425146 0.420919 -2.537221 +v -8.427061 0.399889 -2.557074 +v -8.420406 0.402967 -2.560482 +v -8.435012 0.399792 -2.558544 +v -8.424331 0.427313 -2.542104 +v -8.419230 0.407418 -2.567130 +v -8.443445 0.427371 -2.546046 +v -8.438342 0.407458 -2.571087 +v -8.439518 0.403008 -2.564439 +v -8.434799 0.380352 -2.588474 +v -8.436190 0.378323 -2.580771 +v -8.423737 0.410634 -2.573024 +v -8.415689 0.380334 -2.584507 +v -8.420039 0.381800 -2.591164 +v -8.431686 0.410537 -2.574494 +v -8.427995 0.381756 -2.592611 +v -8.412579 0.344511 -2.599773 +v -8.416920 0.345795 -2.606472 +v -8.424875 0.345756 -2.607918 +v -8.431688 0.344527 -2.603740 +v -8.431839 0.376856 -2.574114 +v -8.433090 0.342751 -2.595976 +v -8.428749 0.341467 -2.589276 +v -8.417079 0.378304 -2.576805 +v -8.423883 0.376901 -2.572667 +v -8.528193 0.349401 -2.130195 +v -8.526417 0.348454 -2.138027 +v -8.534625 -0.002953 -2.097750 +v -8.536401 -0.002007 -2.089918 +v -8.395269 0.001491 -2.684709 +v -8.399611 0.002774 -2.691410 +v -8.515692 0.350077 -2.121802 +v -8.523579 0.350056 -2.123587 +v -8.531786 -0.001352 -2.083310 +v -8.523900 -0.001331 -2.081525 +v -8.415781 -0.000270 -2.680913 +v -8.411439 -0.001553 -2.674213 +v -8.413980 0.342735 -2.592009 +v -8.420794 0.341506 -2.587831 +v -8.520086 0.421652 -2.169971 +v -8.515182 0.425454 -2.164787 +v -8.504500 0.412305 -2.177084 +v -8.512396 0.412185 -2.178825 +v -8.518730 0.416156 -2.175745 +v -8.495161 0.434055 -2.194540 +v -8.522723 0.400566 -2.156151 +v -8.524420 0.403231 -2.148707 +v -8.516143 0.398640 -2.160437 +v -8.499596 0.416106 -2.171901 +v -8.503586 0.400542 -2.152321 +v -8.508255 0.398698 -2.158660 +v -8.507287 0.425574 -2.163046 +v -8.519751 0.405075 -2.142368 +v -8.511863 0.405133 -2.140590 +v -8.500952 0.421603 -2.166126 +v -8.506637 0.372464 -2.137351 +v -8.511270 0.371267 -2.143869 +v -8.522891 0.375406 -2.126957 +v -8.515004 0.375443 -2.125174 +v -8.505282 0.403207 -2.144878 +v -8.508386 0.374194 -2.129648 +v -8.509054 0.349392 -2.126369 +v -8.527524 0.374209 -2.133476 +v -8.519156 0.371230 -2.145652 +v -8.511893 0.347791 -2.140808 +v -8.519779 0.347770 -2.142594 +v -8.525775 0.372479 -2.141178 +v -8.520102 -0.003617 -2.100531 +v -8.527987 -0.003637 -2.102316 +v -8.414378 0.001507 -2.688677 +v -8.396671 -0.000286 -2.676947 +v -8.507278 0.348446 -2.134200 +v -8.515487 -0.002962 -2.093923 +v -8.405525 0.000611 -2.682812 +v -8.403483 -0.001514 -2.672768 +v -8.407566 0.002736 -2.692855 +v -8.525944 -0.002484 -2.091921 +v -8.517262 -0.002015 -2.086092 +v -8.322361 0.396685 -2.126346 +v -8.188463 0.396685 -2.099059 +v -8.322361 0.411254 -2.126346 +v -8.188463 0.411254 -2.099059 +v -8.244247 0.411254 -2.502965 +v -8.112963 0.411254 -2.476211 +v -8.188463 0.382115 -2.099059 +v -8.322361 0.382115 -2.126346 +v -8.112963 0.382115 -2.476211 +v -8.244247 0.382115 -2.502965 +vn -0.9979 -0.0000 0.0650 +vn -0.3901 -0.7071 -0.5898 +vn 0.1997 -0.0000 -0.9799 +vn 0.5898 -0.7071 -0.3901 +vn 0.7198 0.6667 -0.1935 +vn 0.9799 -0.0000 0.1997 +vn -0.0000 -1.0000 -0.0000 +vn 0.0669 -0.9977 0.0131 +vn 0.0678 -0.9976 0.0133 +vn -0.9799 -0.0000 -0.1997 +vn -0.1997 -0.0000 0.9799 +vn -0.0000 1.0000 -0.0000 +vn 0.0667 0.9977 0.0141 +vn 0.0676 0.9976 0.0143 +vn -0.0678 0.9976 -0.0133 +vn -0.0669 0.9977 -0.0131 +vn -0.0672 0.9977 -0.0132 +vn -0.0675 0.9976 -0.0133 +vn -0.0676 -0.9976 -0.0143 +vn -0.0667 -0.9977 -0.0141 +vn -0.0670 -0.9977 -0.0141 +vn -0.0673 -0.9976 -0.0142 +vn -0.6776 0.7224 -0.1381 +vn -0.6724 0.7268 -0.1399 +vn -0.6724 0.7269 -0.1399 +vn -0.9796 -0.0225 -0.1997 +vn -0.9797 -0.0215 -0.1994 +vn -0.9809 -0.0204 -0.1933 +vn 0.9796 0.0218 0.1996 +vn 0.9794 0.0219 0.2010 +vn 0.9793 0.0219 0.2011 +vn 0.6808 0.6937 0.2349 +vn 0.0213 -0.9998 0.0043 +vn -0.0214 0.9998 -0.0044 +vn 0.7078 0.6915 0.1442 +vn 0.7039 0.6962 0.1406 +vn -0.0200 0.9997 -0.0103 +vn -0.7078 -0.6915 -0.1443 +vn 0.6861 -0.7257 0.0510 +vn -0.0483 0.9903 0.1301 +vn -0.6827 -0.6955 -0.2242 +vn 0.6776 -0.7223 0.1381 +vn 0.9796 0.0221 0.1997 +vn 0.7000 0.7008 0.1370 +vn 0.0252 -0.9995 -0.0180 +vn 0.9810 0.0214 0.1929 +vn 0.9797 0.0224 0.1992 +vn -0.7407 -0.6683 0.0694 +vn 0.6219 -0.6972 0.3567 +vn -0.0395 -0.9532 0.2999 +vn 0.9823 0.0184 0.1866 +vn 0.9812 0.0214 0.1920 +vn -0.0185 0.9997 -0.0161 +vn 0.6693 -0.7326 0.1240 +vn -0.6672 0.7313 -0.1418 +vn -0.6952 -0.7022 -0.1536 +vn 0.9833 0.0132 0.1813 +vn 0.9825 0.0177 0.1854 +vn -0.9822 -0.0175 -0.1869 +vn -0.9811 -0.0204 -0.1924 +vn -0.9824 -0.0172 -0.1862 +vn -0.9832 -0.0124 -0.1819 +vn 0.7854 0.5509 -0.2821 +vn -0.5781 0.5748 -0.5791 +vn 0.0460 0.9421 -0.3322 +vn -0.6201 0.6901 -0.3732 +vn 0.7452 0.6614 -0.0848 +vn -0.9833 -0.0119 -0.1816 +vn -0.9836 -0.0090 -0.1802 +vn 0.8164 0.3812 -0.4338 +vn -0.5458 0.3978 -0.7374 +vn 0.1472 0.5403 -0.8285 +vn -0.0978 -0.8044 0.5860 +vn 0.5793 -0.5868 0.5658 +vn -0.7815 -0.5625 0.2698 +vn 0.1033 0.7833 -0.6131 +vn 0.1621 0.3980 -0.9030 +vn -0.8302 -0.2790 0.4827 +vn 0.5390 -0.2912 0.7904 +vn -0.1618 -0.4005 0.9019 +vn 0.9837 0.0092 0.1796 +vn 0.9834 0.0122 0.1810 +vn -0.1434 -0.5692 0.8096 +vn 0.5461 -0.4135 0.7286 +vn -0.8133 -0.3964 0.4259 +vn -0.9753 -0.0027 -0.2209 +vn -0.9753 -0.0025 -0.2209 +vn 0.8416 0.1694 -0.5128 +vn -0.2196 0.1162 0.9686 +vn -0.8416 -0.1695 0.5128 +vn -0.5390 0.2899 -0.7909 +vn 0.8303 0.2777 -0.4831 +vn -0.9835 -0.0079 -0.1806 +vn -0.9837 -0.0056 -0.1797 +vn 0.9839 0.0054 0.1789 +vn 0.9838 0.0070 0.1793 +vn 0.6366 0.6472 0.4194 +vn -0.7216 0.6748 0.1548 +vn 0.0906 -0.9356 -0.3412 +vn -0.9790 -0.0216 -0.2027 +vn -0.9780 -0.0208 -0.2077 +vn -0.9768 -0.0183 -0.2135 +vn -0.9778 -0.0205 -0.2086 +vn -0.6887 0.7239 -0.0400 +vn 0.9790 0.0227 0.2028 +vn 0.9779 0.0218 0.2080 +vn 0.0437 -0.9932 -0.1083 +vn -0.9790 -0.0222 -0.2024 +vn -0.7500 0.5630 0.3472 +vn 0.1362 -0.8103 -0.5699 +vn -0.9758 -0.0112 -0.2182 +vn -0.9766 -0.0173 -0.2146 +vn -0.5870 -0.5801 -0.5646 +vn 0.9777 0.0211 0.2088 +vn 0.9767 0.0187 0.2139 +vn -0.1019 0.9128 0.3955 +vn 0.7126 -0.6896 -0.1288 +vn -0.6386 -0.6617 -0.3929 +vn -0.5757 -0.3366 -0.7452 +vn 0.7961 -0.3512 -0.4929 +vn -0.1972 0.4682 0.8613 +vn 0.9757 0.0114 0.2186 +vn 0.9765 0.0175 0.2150 +vn 0.9756 0.0104 0.2192 +vn 0.9753 0.0032 0.2210 +vn 0.5893 0.5405 0.6004 +vn -0.1528 0.7463 0.6478 +vn 0.7332 -0.6033 -0.3137 +vn -0.2191 0.1344 0.9664 +vn 0.9753 0.0027 0.2208 +vn 0.5702 0.0928 0.8162 +vn 0.5704 0.0866 0.8168 +vn -0.8200 0.0969 0.5640 +vn -0.8205 0.0905 0.5645 +vn -0.8205 0.0904 0.5645 +vn -0.9755 -0.0030 -0.2200 +vn -0.9758 -0.0100 -0.2182 +vn 0.1957 -0.4821 -0.8540 +vn -0.7976 0.3437 0.4957 +vn 0.5759 0.3294 0.7483 +vn 0.2197 -0.1162 -0.9686 +vn -0.9839 -0.0053 -0.1789 +vn 0.8205 -0.0898 -0.5646 +vn 0.8209 -0.0839 -0.5649 +vn 0.9838 0.0053 0.1790 +vn 0.8201 -0.0956 -0.5642 +vn -0.5703 -0.0916 -0.8163 +vn -0.5705 -0.0860 -0.8168 +vn -0.5705 -0.0859 -0.8168 +vn 0.2193 -0.1319 -0.9667 +vn 0.0439 -0.9756 -0.2153 +vn 0.0438 -0.9756 -0.2153 +vn -0.0234 -0.9931 0.1147 +vn -0.0233 -0.9931 0.1147 +vn -0.0234 -0.9931 0.1148 +vn 0.5376 -0.1770 0.8244 +vn 0.9753 0.0025 0.2208 +vn -0.5376 0.1770 -0.8244 +vn -0.5706 -0.0803 -0.8173 +vn -0.1722 -0.2449 0.9541 +vn 0.5706 0.0803 0.8173 +vn 0.1722 0.2449 -0.9541 +vn -0.8209 0.0839 0.5649 +vn -0.9796 -0.0221 -0.1997 +vn -0.9797 -0.0224 -0.1993 +vn -0.9810 -0.0214 -0.1929 +vn -0.7078 -0.6915 -0.1442 +vn -0.6826 -0.6956 -0.2242 +vn -0.9794 -0.0219 -0.2010 +vn -0.9793 -0.0219 -0.2011 +vn -0.9779 -0.0218 -0.2080 +vn -0.9789 -0.0228 -0.2030 +vn 0.9796 0.0224 0.1997 +vn 0.9810 0.0214 0.1931 +vn 0.9797 0.0224 0.1993 +vn -0.9796 -0.0218 -0.1996 +vn -0.7406 -0.6683 0.0695 +vn -0.6952 -0.7023 -0.1536 +vn -0.0979 -0.8044 0.5860 +vn 0.9823 0.0183 0.1864 +vn 0.9833 0.0133 0.1813 +vn -0.9823 -0.0183 -0.1864 +vn -0.9812 -0.0214 -0.1920 +vn -0.9825 -0.0178 -0.1855 +vn -0.9834 -0.0131 -0.1812 +vn 0.7452 0.6614 -0.0847 +vn -0.9834 -0.0122 -0.1810 +vn -0.9837 -0.0094 -0.1798 +vn -0.7815 -0.5626 0.2699 +vn 0.7855 0.5509 -0.2821 +vn 0.8303 0.2777 -0.4832 +vn -0.8301 -0.2790 0.4828 +vn 0.9837 0.0091 0.1796 +vn 0.9834 0.0123 0.1810 +vn -0.8133 -0.3964 0.4260 +vn -0.9753 -0.0027 -0.2208 +vn -0.9753 -0.0025 -0.2208 +vn 0.8416 0.1695 -0.5128 +vn -0.8416 -0.1695 0.5129 +vn -0.9838 -0.0070 -0.1793 +vn -0.9839 -0.0058 -0.1785 +vn 0.9839 0.0055 0.1789 +vn -0.9767 -0.0187 -0.2139 +vn -0.9777 -0.0210 -0.2088 +vn -0.6385 -0.6618 -0.3929 +vn 0.9790 0.0221 0.2024 +vn -0.9757 -0.0114 -0.2187 +vn -0.9765 -0.0176 -0.2149 +vn -0.5870 -0.5802 -0.5647 +vn 0.9765 0.0175 0.2149 +vn 0.2192 -0.1319 -0.9667 +vn -0.9756 -0.0104 -0.2192 +vn -0.9753 -0.0032 -0.2210 +vn -0.5756 -0.3367 -0.7452 +vn 0.1956 -0.4821 -0.8540 +vn 0.2196 -0.1162 -0.9686 +vn -0.9838 -0.0053 -0.1790 +vn -0.5701 -0.0916 -0.8164 +vn -0.5704 -0.0860 -0.8169 +vn -0.5704 -0.0859 -0.8169 +vn 0.0675 -0.9976 0.0133 +vn 0.0672 -0.9977 0.0132 +vn 0.0673 0.9976 0.0142 +vn 0.0670 0.9977 0.0141 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.973130 0.033128 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.677629 0.482142 +vt 0.409642 -0.009898 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.669677 0.481452 +vt 0.240570 0.058726 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +vt 0.296927 -0.019617 +vt 0.353285 -0.019617 +vt 0.470812 0.481452 +vt 0.296927 0.014692 +vt 0.271947 0.481452 +vt 0.353285 0.014692 +vt -0.849112 0.025953 +vt 0.468872 0.000137 +vt -0.911121 0.025955 +vt 0.273887 0.000137 +vt 0.475153 0.482142 +vt 0.353285 -0.053929 +vt 0.272677 0.482143 +vt 0.296927 -0.053929 +vt -0.911121 -0.024667 +vt 0.473178 0.006015 +vt -0.849112 -0.024667 +vt 0.274652 0.006015 +s 1 +usemtl Wood +f 12520/25860/9447 12521/25862/9448 12522/25865/9449 12792/26374/9449 12793/26376/9449 12523/25867/9449 12524/25869/9450 12525/25873/9451 12526/25874/9449 12527/25875/9449 +f 12525/25872/9451 12524/25870/9450 12528/25877/9452 12529/25880/9452 +f 12530/25882/9453 12531/25885/9454 12532/25888/9455 12533/25889/9453 +f 12534/25893/9456 12535/25894/9456 12521/25863/9448 12520/25859/9447 +f 12535/25895/9457 12534/25892/9457 12536/25897/9457 12537/25899/9457 +f 12538/25900/9457 12539/25903/9457 12536/25897/9457 12534/25892/9457 +f 12538/25901/9456 12534/25893/9456 12520/25859/9447 12540/25905/9456 +f 12533/25890/9452 12525/25872/9451 12529/25880/9452 12530/25883/9452 +f 12540/25906/9449 12520/25860/9449 12527/25875/9449 12526/25874/9449 12525/25873/9449 12533/25891/9449 12532/25887/9449 12796/26382/9449 12797/26384/9449 12541/25909/9449 +f 12533/25891/9449 12532/25887/9449 12526/25874/9449 12525/25873/9449 +f 12527/25876/9457 12520/25861/9457 12540/25907/9457 12541/25910/9457 +f 12791/26373/9457 12789/26369/9457 12542/25912/9457 12543/25913/9457 +f 12529/25881/9457 12528/25878/9457 12543/25913/9457 12542/25912/9457 +f 12788/26368/9457 12536/25897/9457 12539/25903/9457 12795/26381/9457 +f 12531/25886/9457 12530/25884/9457 12529/25881/9457 12542/25912/9457 +f 12535/25896/9458 12537/25898/9459 12522/25866/9460 12521/25864/9458 +f 12523/25868/9461 12543/25914/9462 12528/25879/9458 12524/25871/9458 +f 12793/26377/9463 12791/26372/9464 12543/25914/9462 12523/25868/9461 +f 12541/25911/9465 12539/25904/9466 12538/25902/9453 12540/25908/9453 +f 12797/26385/9467 12795/26380/9468 12539/25904/9466 12541/25911/9465 +f 12544/25915/9469 12545/25916/9469 12546/25917/9470 12547/25919/9471 +f 12548/25920/9472 12547/25918/9472 12549/25923/9473 12550/25925/9474 +f 12551/25927/9475 12552/25928/9475 12553/25929/9476 12554/25931/9477 +f 12553/25929/9478 12555/25932/9478 12556/25934/9478 12557/25936/9478 +f 12558/25938/9479 12559/25939/9479 12560/25940/9479 12561/25942/9479 +f 12562/25944/9480 12545/25916/9480 12563/25945/9480 12555/25933/9480 +f 12552/25928/9481 12562/25943/9481 12555/25932/9481 12553/25929/9481 +f 12564/25946/9482 12565/25947/9482 12562/25943/9481 12552/25928/9481 +f 12565/25948/9483 12546/25917/9483 12545/25916/9480 12562/25944/9480 +f 12566/25949/9484 12558/25937/9484 12561/25941/9484 12567/25950/9484 +f 12548/25921/9484 12568/25953/9484 12558/25937/9484 12566/25949/9484 +f 12568/25952/9479 12569/25954/9479 12559/25939/9479 12558/25938/9479 +f 12560/25940/9485 12554/25930/9485 12570/25956/9485 12571/25957/9485 +f 12555/25933/9486 12563/25945/9486 12572/25958/9486 12556/25935/9486 +f 12567/25950/9487 12561/25941/9487 12573/25960/9487 12574/25962/9487 +f 12559/25939/9488 12551/25926/9488 12554/25930/9488 12560/25940/9488 +f 12569/25954/9488 12575/25964/9488 12551/25926/9488 12559/25939/9488 +f 12575/25963/9489 12564/25946/9489 12552/25928/9475 12551/25927/9475 +f 12565/25947/9482 12564/25946/9482 12576/25965/9490 12577/25967/9490 +f 12569/25954/9491 12568/25952/9491 12578/25968/9491 12579/25970/9491 +f 12564/25946/9489 12575/25963/9489 12580/25971/9492 12576/25965/9493 +f 12581/25973/9469 12563/25945/9469 12545/25916/9469 12544/25915/9469 +f 12578/25969/9494 12550/25924/9494 12582/25976/9494 12583/25978/9494 +f 12580/25972/9495 12579/25970/9495 12584/25979/9495 12585/25981/9495 +f 12579/25970/9496 12578/25968/9496 12583/25977/9496 12584/25979/9496 +f 12576/25965/9493 12580/25971/9492 12585/25982/9497 12586/25983/9498 +f 12546/25917/9483 12565/25948/9483 12577/25966/9499 12587/25984/9499 +f 12575/25964/9500 12569/25954/9500 12579/25970/9500 12580/25972/9500 +f 12547/25919/9471 12546/25917/9470 12587/25984/9501 12549/25922/9501 +f 12568/25953/9502 12548/25921/9502 12550/25924/9502 12578/25969/9502 +f 12586/25983/9498 12585/25982/9497 12588/25985/9503 12589/25986/9504 +f 12582/25976/9505 12590/25987/9506 12591/25990/9507 12592/25991/9508 +f 12593/25992/9509 12586/25983/9509 12589/25986/9509 12594/25994/9509 +f 12590/25987/9510 12595/25997/9510 12596/25999/9510 12591/25990/9510 +f 12587/25984/9511 12577/25966/9511 12593/25993/9511 12595/25998/9511 +f 12549/25922/9512 12587/25984/9512 12595/25998/9512 12590/25988/9512 +f 12577/25967/9513 12576/25965/9513 12586/25983/9513 12593/25992/9513 +f 12550/25925/9474 12549/25923/9473 12590/25989/9506 12582/25975/9505 +f 12592/25991/9508 12591/25990/9507 12597/26003/9514 12598/26004/9515 +f 12594/25994/9516 12589/25986/9516 12599/26005/9516 12600/26007/9516 +f 12591/25990/9517 12596/25999/9517 12601/26008/9517 12597/26003/9517 +f 12596/26000/9518 12594/25995/9518 12600/26006/9518 12601/26009/9518 +f 12584/25979/9519 12583/25977/9519 12602/26010/9519 12603/26013/9519 +f 12585/25982/9520 12584/25980/9520 12603/26015/9520 12588/25985/9520 +f 12583/25978/9521 12582/25976/9521 12592/25991/9521 12602/26012/9521 +f 12595/25998/9522 12593/25993/9522 12594/25996/9522 12596/26001/9522 +f 12601/26009/9523 12600/26006/9523 12604/26017/9523 12605/26018/9523 +f 12606/26020/9524 12598/26004/9524 12607/26021/9524 12608/26022/9524 +f 12609/26024/9525 12610/26026/9525 12611/26028/9525 12612/26030/9525 +f 12610/26026/9526 12606/26019/9526 12608/26023/9526 12611/26028/9526 +f 12589/25986/9504 12588/25985/9503 12609/26025/9527 12599/26005/9528 +f 12603/26014/9529 12602/26011/9529 12606/26019/9529 12610/26026/9529 +f 12588/25985/9530 12603/26015/9530 12610/26027/9530 12609/26025/9530 +f 12602/26012/9531 12592/25991/9531 12598/26004/9531 12606/26020/9531 +f 12613/26031/9532 12614/26033/9532 12615/26035/9533 12616/26036/9533 +f 12604/26016/9534 12617/26039/9534 12618/26040/9534 12619/26042/9534 +f 12620/26045/9535 12621/26047/9535 12622/26049/9535 12623/26050/9535 +f 12608/26022/9536 12607/26021/9536 12624/26053/9536 12625/26055/9536 +f 12597/26002/9537 12601/26009/9537 12605/26018/9537 12626/26059/9537 +f 12600/26007/9538 12599/26005/9538 12617/26039/9538 12604/26016/9538 +f 12598/26004/9515 12597/26003/9514 12626/26058/9539 12607/26021/9540 +f 12599/26005/9528 12609/26025/9527 12612/26029/9541 12617/26039/9542 +f 12557/25936/9543 12556/25934/9543 12627/26060/9543 12628/26062/9543 +f 12572/25958/9544 12629/26063/9544 12630/26065/9544 12631/26069/9544 +f 12573/25959/9545 12571/25957/9545 12632/26070/9545 12633/26072/9545 +f 12629/26064/9546 12574/25961/9547 12634/26074/9548 12630/26066/9549 +f 12563/25945/9550 12581/25973/9550 12629/26063/9550 12572/25958/9550 +f 12554/25931/9477 12553/25929/9476 12557/25936/9551 12570/25955/9552 +f 12561/25942/9553 12560/25940/9553 12571/25957/9553 12573/25959/9553 +f 12581/25974/9554 12567/25951/9554 12574/25961/9547 12629/26064/9546 +f 12631/26068/9555 12630/26067/9555 12635/26076/9555 12636/26079/9555 +f 12633/26072/9556 12632/26070/9556 12637/26080/9556 12638/26083/9556 +f 12630/26067/9549 12634/26075/9548 12639/26086/9557 12635/26076/9558 +f 12634/26075/9559 12633/26073/9559 12638/26084/9559 12639/26086/9559 +f 12570/25955/9552 12557/25936/9551 12628/26062/9560 12640/26088/9561 +f 12556/25935/9562 12572/25958/9562 12631/26069/9562 12627/26061/9562 +f 12571/25957/9563 12570/25956/9563 12640/26087/9563 12632/26070/9563 +f 12574/25962/9564 12573/25960/9564 12633/26073/9564 12634/26075/9564 +f 12639/26086/9565 12638/26084/9565 12641/26089/9565 12642/26091/9565 +f 12637/26081/9566 12643/26092/9566 12644/26093/9566 12645/26095/9566 +f 12646/26097/9567 12636/26077/9567 12647/26100/9567 12648/26102/9567 +f 12643/26092/9568 12649/26104/9569 12650/26105/9570 12644/26093/9571 +f 12628/26062/9572 12627/26060/9572 12646/26099/9572 12649/26104/9572 +f 12640/26088/9561 12628/26062/9560 12649/26104/9569 12643/26092/9568 +f 12627/26061/9573 12631/26069/9573 12636/26078/9573 12646/26098/9573 +f 12632/26071/9574 12640/26088/9574 12643/26092/9574 12637/26081/9574 +f 12648/26102/9575 12647/26100/9575 12621/26047/9575 12620/26045/9575 +f 12644/26093/9571 12650/26105/9570 12651/26106/9576 12652/26108/9576 +f 12650/26105/9577 12648/26103/9577 12620/26046/9578 12651/26106/9578 +f 12647/26100/9579 12653/26109/9579 12613/26032/9580 12621/26047/9581 +f 12635/26076/9558 12639/26086/9557 12642/26091/9582 12653/26110/9583 +f 12638/26085/9584 12637/26082/9584 12645/26096/9584 12641/26090/9584 +f 12636/26079/9585 12635/26076/9585 12653/26110/9585 12647/26101/9585 +f 12649/26104/9586 12646/26099/9586 12648/26103/9586 12650/26105/9586 +f 12654/26111/9587 12655/26113/9587 12656/26114/9587 12657/26116/9587 +f 12607/26021/9540 12626/26058/9539 12658/26119/9588 12624/26053/9588 +f 12655/26113/9589 12652/26107/9589 12659/26122/9590 12656/26114/9590 +f 12617/26039/9542 12612/26029/9541 12660/26125/9591 12618/26040/9591 +f 12645/26096/9592 12644/26094/9592 12652/26107/9589 12655/26113/9589 +f 12642/26091/9593 12641/26089/9593 12654/26112/9594 12614/26033/9595 +f 12653/26110/9583 12642/26091/9582 12614/26033/9532 12613/26031/9532 +f 12641/26090/9596 12645/26096/9596 12655/26113/9596 12654/26111/9596 +f 12661/26128/9597 12619/26043/9597 12618/26041/9597 12660/26126/9597 +f 12625/26056/9597 12661/26128/9597 12660/26126/9597 12662/26129/9598 +f 12624/26054/9597 12658/26120/9597 12661/26128/9597 12625/26056/9597 +f 12658/26120/9597 12663/26131/9598 12619/26043/9597 12661/26128/9597 +f 12664/26133/9599 12623/26051/9599 12622/26048/9600 12616/26037/9600 +f 12657/26117/9599 12664/26133/9599 12616/26037/9600 12615/26034/9599 +f 12656/26115/9601 12659/26123/9601 12664/26133/9599 12657/26117/9599 +f 12659/26123/9601 12665/26134/9601 12623/26051/9599 12664/26133/9599 +f 12612/26030/9602 12611/26028/9602 12662/26130/9602 12660/26127/9602 +f 12652/26108/9576 12651/26106/9576 12665/26135/9603 12659/26124/9603 +f 12626/26059/9604 12605/26018/9604 12663/26132/9604 12658/26121/9604 +f 12614/26033/9595 12654/26112/9594 12657/26118/9605 12615/26035/9605 +f 12611/26028/9606 12608/26023/9606 12625/26057/9606 12662/26130/9606 +f 12651/26106/9578 12620/26046/9578 12623/26052/9607 12665/26135/9607 +f 12605/26018/9608 12604/26017/9608 12619/26044/9608 12663/26132/9608 +f 12621/26047/9581 12613/26032/9580 12616/26038/9609 12622/26049/9609 +f 12666/26137/9469 12667/26138/9469 12668/26139/9470 12669/26141/9471 +f 12670/26142/9610 12669/26140/9610 12671/26144/9611 12672/26145/9612 +f 12673/26146/9485 12674/26148/9485 12675/26151/9485 12676/26153/9485 +f 12677/26155/9479 12678/26156/9479 12673/26147/9479 12679/26159/9479 +f 12680/26161/9480 12667/26138/9480 12681/26162/9480 12682/26163/9480 +f 12683/26165/9481 12680/26160/9481 12682/26164/9481 12684/26166/9481 +f 12685/26167/9481 12686/26168/9481 12680/26160/9481 12683/26165/9481 +f 12686/26169/9483 12668/26139/9483 12667/26138/9480 12680/26161/9480 +f 12687/26170/9613 12677/26154/9613 12679/26158/9613 12688/26171/9613 +f 12670/26142/9613 12689/26173/9613 12677/26154/9613 12687/26170/9613 +f 12689/26172/9479 12690/26174/9479 12678/26156/9479 12677/26155/9479 +f 12682/26163/9486 12681/26162/9486 12691/26176/9486 12692/26178/9486 +f 12688/26171/9614 12679/26158/9614 12693/26179/9614 12694/26181/9614 +f 12695/26182/9615 12688/26171/9616 12694/26181/9617 12696/26184/9618 +f 12678/26157/9488 12697/26186/9488 12674/26148/9488 12673/26146/9488 +f 12690/26175/9488 12698/26188/9488 12697/26186/9488 12678/26157/9488 +f 12686/26168/9490 12685/26167/9490 12699/26189/9490 12700/26191/9490 +f 12690/26174/9491 12689/26172/9491 12701/26192/9491 12702/26194/9491 +f 12685/26167/9619 12698/26187/9619 12703/26197/9620 12699/26189/9621 +f 12687/26170/9622 12666/26136/9622 12669/26140/9610 12670/26142/9610 +f 12688/26171/9616 12695/26182/9615 12666/26136/9622 12687/26170/9622 +f 12695/26183/9469 12681/26162/9469 12667/26138/9469 12666/26137/9469 +f 12704/26198/9511 12700/26190/9511 12705/26200/9511 12706/26202/9511 +f 12701/26193/9623 12672/26145/9623 12707/26204/9623 12708/26206/9623 +f 12703/26196/9495 12702/26195/9495 12709/26207/9495 12710/26210/9495 +f 12702/26194/9496 12701/26192/9496 12708/26205/9496 12709/26209/9496 +f 12668/26139/9483 12686/26169/9483 12700/26190/9499 12704/26198/9499 +f 12698/26188/9500 12690/26175/9500 12702/26195/9500 12703/26196/9500 +f 12669/26141/9471 12668/26139/9470 12704/26198/9501 12671/26143/9501 +f 12689/26173/9624 12670/26142/9624 12672/26145/9624 12701/26193/9624 +f 12710/26211/9520 12709/26208/9520 12711/26215/9520 12712/26216/9520 +f 12709/26209/9625 12708/26205/9625 12713/26217/9625 12711/26213/9625 +f 12714/26221/9498 12710/26211/9626 12712/26216/9627 12715/26222/9504 +f 12707/26204/9628 12716/26224/9629 12717/26225/9630 12718/26226/9631 +f 12671/26143/9512 12704/26198/9512 12706/26202/9512 12716/26223/9512 +f 12700/26191/9632 12699/26189/9632 12714/26220/9632 12705/26199/9632 +f 12672/26145/9612 12671/26144/9611 12716/26224/9629 12707/26204/9628 +f 12699/26189/9621 12703/26197/9620 12710/26212/9626 12714/26220/9498 +f 12718/26226/9631 12717/26225/9630 12719/26228/9633 12720/26229/9634 +f 12721/26232/9516 12715/26222/9516 12722/26233/9516 12723/26234/9516 +f 12717/26225/9517 12724/26238/9517 12725/26239/9517 12719/26228/9517 +f 12724/26236/9518 12721/26230/9518 12723/26235/9518 12725/26240/9518 +f 12708/26206/9635 12707/26204/9635 12718/26226/9635 12713/26219/9635 +f 12706/26202/9522 12705/26200/9522 12721/26231/9522 12724/26237/9522 +f 12716/26224/9510 12706/26203/9510 12724/26238/9510 12717/26225/9510 +f 12705/26201/9636 12714/26221/9636 12715/26222/9636 12721/26232/9636 +f 12723/26234/9637 12722/26233/9637 12726/26241/9637 12727/26242/9637 +f 12719/26227/9537 12725/26240/9537 12728/26244/9537 12729/26246/9537 +f 12725/26240/9523 12723/26235/9523 12727/26243/9523 12728/26244/9523 +f 12730/26247/9638 12720/26229/9638 12731/26249/9638 12732/26250/9638 +f 12715/26222/9504 12712/26216/9627 12733/26252/9639 12722/26233/9640 +f 12711/26214/9529 12713/26218/9529 12730/26248/9529 12734/26255/9529 +f 12712/26216/9530 12711/26215/9530 12734/26254/9530 12733/26252/9530 +f 12713/26219/9641 12718/26226/9641 12720/26229/9641 12730/26247/9641 +f 12735/26256/9642 12736/26258/9642 12737/26260/9643 12738/26261/9643 +f 12727/26242/9644 12726/26241/9644 12739/26264/9644 12740/26266/9644 +f 12741/26270/9535 12742/26272/9535 12743/26274/9535 12744/26275/9535 +f 12732/26250/9645 12731/26249/9645 12745/26279/9645 12746/26281/9645 +f 12720/26229/9634 12719/26228/9633 12729/26245/9646 12731/26249/9647 +f 12722/26233/9640 12733/26252/9639 12747/26285/9648 12726/26241/9542 +f 12734/26255/9526 12730/26248/9526 12732/26251/9526 12748/26287/9526 +f 12733/26253/9525 12734/26255/9525 12748/26287/9525 12747/26286/9525 +f 12691/26176/9544 12696/26185/9544 12749/26288/9544 12750/26290/9544 +f 12693/26180/9545 12676/26152/9545 12751/26294/9545 12752/26296/9545 +f 12696/26184/9618 12694/26181/9617 12753/26297/9649 12749/26289/9650 +f 12694/26181/9651 12693/26179/9651 12752/26295/9651 12753/26297/9651 +f 12684/26166/9478 12682/26164/9478 12692/26177/9478 12754/26298/9478 +f 12681/26162/9550 12695/26183/9550 12696/26185/9550 12691/26176/9550 +f 12674/26149/9652 12684/26166/9652 12754/26298/9551 12675/26150/9552 +f 12679/26159/9553 12673/26147/9553 12676/26152/9553 12693/26180/9553 +f 12749/26289/9650 12753/26297/9649 12755/26299/9653 12756/26300/9654 +f 12753/26297/9655 12752/26295/9655 12757/26302/9655 12755/26299/9655 +f 12751/26292/9574 12758/26306/9574 12759/26307/9574 12760/26308/9574 +f 12761/26312/9573 12750/26290/9573 12762/26314/9573 12763/26317/9573 +f 12754/26298/9543 12692/26177/9543 12761/26311/9543 12764/26320/9543 +f 12675/26150/9552 12754/26298/9551 12764/26320/9560 12758/26304/9561 +f 12692/26178/9562 12691/26176/9562 12750/26290/9562 12761/26312/9562 +f 12676/26153/9563 12675/26151/9563 12758/26305/9563 12751/26293/9563 +f 12760/26308/9566 12759/26307/9566 12765/26322/9566 12766/26324/9566 +f 12763/26318/9567 12762/26315/9567 12767/26327/9567 12768/26329/9567 +f 12759/26307/9568 12769/26330/9656 12770/26331/9570 12765/26322/9571 +f 12769/26330/9586 12763/26319/9586 12768/26328/9586 12770/26331/9586 +f 12752/26296/9556 12751/26294/9556 12760/26309/9556 12757/26301/9556 +f 12750/26291/9555 12749/26289/9555 12756/26300/9555 12762/26316/9555 +f 12764/26321/9572 12761/26313/9572 12763/26319/9572 12769/26330/9572 +f 12758/26306/9561 12764/26321/9560 12769/26330/9656 12759/26307/9568 +f 12770/26331/9577 12768/26328/9577 12741/26271/9578 12771/26332/9578 +f 12767/26327/9579 12772/26333/9579 12735/26257/9580 12742/26272/9581 +f 12773/26335/9657 12766/26325/9657 12774/26337/9657 12775/26338/9657 +f 12772/26334/9658 12776/26340/9659 12736/26258/9642 12735/26256/9642 +f 12755/26299/9660 12757/26302/9660 12773/26336/9660 12776/26340/9660 +f 12756/26300/9654 12755/26299/9653 12776/26340/9659 12772/26334/9658 +f 12757/26303/9661 12760/26310/9661 12766/26325/9661 12773/26335/9661 +f 12762/26316/9585 12756/26300/9585 12772/26334/9585 12767/26326/9585 +f 12775/26338/9662 12774/26337/9662 12777/26341/9662 12778/26343/9662 +f 12731/26249/9647 12729/26245/9646 12779/26347/9663 12745/26279/9663 +f 12726/26241/9542 12747/26285/9648 12780/26350/9591 12739/26264/9591 +f 12774/26337/9589 12781/26353/9589 12782/26355/9590 12777/26341/9590 +f 12765/26322/9571 12770/26331/9570 12771/26332/9576 12781/26354/9576 +f 12768/26329/9575 12767/26327/9575 12742/26272/9575 12741/26270/9575 +f 12766/26325/9592 12765/26323/9592 12781/26353/9589 12774/26337/9589 +f 12776/26340/9664 12773/26336/9664 12775/26339/9665 12736/26258/9666 +f 12783/26358/9597 12740/26267/9597 12739/26265/9597 12780/26351/9597 +f 12746/26282/9597 12783/26358/9597 12780/26351/9597 12784/26360/9598 +f 12745/26280/9597 12779/26348/9597 12783/26359/9597 12746/26283/9597 +f 12779/26348/9597 12785/26362/9598 12740/26268/9597 12783/26359/9597 +f 12786/26364/9599 12744/26276/9599 12743/26273/9600 12738/26262/9600 +f 12778/26344/9599 12786/26364/9599 12738/26262/9600 12737/26259/9599 +f 12777/26342/9601 12782/26356/9601 12786/26365/9599 12778/26345/9599 +f 12782/26356/9601 12787/26366/9601 12744/26277/9599 12786/26365/9599 +f 12747/26286/9602 12748/26287/9602 12784/26361/9602 12780/26352/9602 +f 12781/26354/9576 12771/26332/9576 12787/26367/9603 12782/26357/9603 +f 12729/26246/9604 12728/26244/9604 12785/26363/9604 12779/26349/9604 +f 12736/26258/9666 12775/26339/9665 12778/26346/9605 12737/26260/9605 +f 12748/26287/9606 12732/26251/9606 12746/26284/9606 12784/26361/9606 +f 12771/26332/9578 12741/26271/9578 12744/26278/9607 12787/26367/9607 +f 12728/26244/9608 12727/26243/9608 12740/26269/9608 12785/26363/9608 +f 12742/26272/9581 12735/26257/9580 12738/26263/9609 12743/26274/9609 +f 12532/25888/9455 12531/25885/9454 12794/26378/9667 12796/26383/9668 +f 12796/26383/9668 12794/26378/9667 12795/26380/9468 12797/26385/9467 +f 12522/25866/9460 12537/25898/9459 12790/26370/9669 12792/26375/9670 +f 12792/26375/9670 12790/26370/9669 12791/26372/9464 12793/26377/9463 +f 12542/25912/9457 12789/26369/9457 12794/26379/9457 12531/25886/9457 +f 12789/26369/9457 12788/26368/9457 12795/26381/9457 12794/26379/9457 +f 12537/25899/9457 12536/25897/9457 12788/26368/9457 12790/26371/9457 +f 12790/26371/9457 12788/26368/9457 12789/26369/9457 12791/26373/9457 +o Chair.034 +v -9.233500 0.415382 -2.015367 +v -9.233500 0.429951 -2.015367 +v -9.204329 0.429951 -2.055505 +v -8.968014 0.429951 -2.380650 +v -8.938843 0.429951 -2.420787 +v -8.938843 0.415382 -2.420787 +v -8.968014 0.415382 -2.380650 +v -9.204329 0.415382 -2.055505 +v -8.627707 0.429951 -2.194654 +v -8.627707 0.415382 -2.194654 +v -8.627707 0.400812 -2.194654 +v -8.654527 0.400812 -2.157752 +v -8.968014 0.400812 -2.380650 +v -8.938843 0.400812 -2.420787 +v -8.922364 0.415382 -1.789234 +v -8.922364 0.429951 -1.789234 +v -8.895544 0.415382 -1.826136 +v -8.895544 0.429951 -1.826136 +v -8.922364 0.400812 -1.789234 +v -8.895544 0.400812 -1.826136 +v -9.233500 0.400812 -2.015367 +v -9.204329 0.400812 -2.055505 +v -8.654527 0.415382 -2.157752 +v -8.654527 0.429951 -2.157752 +v -8.782522 0.438060 -2.309856 +v -8.779088 0.443651 -2.314581 +v -8.885125 0.443651 -2.391649 +v -8.888559 0.438060 -2.386924 +v -8.888455 0.429976 -2.387067 +v -8.914766 0.437950 -2.405971 +v -8.912547 0.430300 -2.404577 +v -8.770945 0.429903 -2.325786 +v -8.771048 0.437987 -2.325644 +v -8.665011 0.437987 -2.248577 +v -8.664907 0.429903 -2.248719 +v -8.668299 0.443828 -2.244054 +v -8.642493 0.439408 -2.225298 +v -8.641095 0.434055 -2.231195 +v -8.779131 0.424135 -2.314522 +v -8.774378 0.424311 -2.321061 +v -8.668342 0.424311 -2.243995 +v -8.673095 0.424135 -2.237455 +v -8.774335 0.443828 -2.321121 +v -8.673052 0.443651 -2.237514 +v -8.877085 0.437987 -2.402711 +v -8.880373 0.443828 -2.398188 +v -8.782418 0.429976 -2.309999 +v -8.676382 0.429976 -2.232933 +v -8.885168 0.424135 -2.391590 +v -8.880416 0.424311 -2.398129 +v -8.643608 0.426646 -2.233239 +v -8.648851 0.421521 -2.229829 +v -8.647303 0.439247 -2.218800 +v -8.653662 0.421360 -2.223332 +v -8.655059 0.426713 -2.217435 +v -8.876982 0.429903 -2.402854 +v -8.903273 0.437881 -2.421745 +v -8.908088 0.443408 -2.418331 +v -8.907733 0.424773 -2.407990 +v -8.903027 0.424940 -2.414562 +v -8.901054 0.430231 -2.420350 +v -8.676486 0.438060 -2.232790 +v -8.935431 0.420977 -2.421209 +v -8.929252 0.416357 -2.423630 +v -8.924586 0.416497 -2.430232 +v -8.923921 0.420919 -2.436969 +v -8.928026 0.427313 -2.439735 +v -8.912794 0.443241 -2.411758 +v -8.943123 0.402967 -2.450925 +v -8.948686 0.407418 -2.454751 +v -8.939537 0.427371 -2.423974 +v -8.960209 0.407458 -2.438999 +v -8.954646 0.403008 -2.435174 +v -8.934204 0.431932 -2.437313 +v -8.955917 0.410634 -2.453094 +v -8.938870 0.431793 -2.430711 +v -8.960551 0.410537 -2.446468 +v -8.974564 0.380352 -2.449431 +v -8.968129 0.378323 -2.444973 +v -8.963032 0.380334 -2.465177 +v -8.970893 0.381800 -2.463978 +v -8.975508 0.381756 -2.457338 +v -8.947414 0.399792 -2.436830 +v -8.942780 0.399889 -2.443456 +v -8.983531 0.345795 -2.473163 +v -8.988144 0.345756 -2.466522 +v -8.960268 0.376856 -2.446172 +v -8.980681 0.342751 -2.454097 +v -8.972785 0.341467 -2.455270 +v -8.956598 0.378304 -2.460719 +v -8.955654 0.376901 -2.452812 +v -8.968172 0.341506 -2.461910 +v -8.969151 0.342735 -2.469842 +v -8.596232 0.349401 -2.174462 +v -8.602624 0.348454 -2.179326 +v -8.569373 -0.002953 -2.155158 +v -8.562983 -0.002007 -2.150295 +v -8.975633 0.344511 -2.474336 +v -9.045753 0.001491 -2.525299 +v -9.053650 0.002774 -2.524126 +v -8.583412 0.350077 -2.182359 +v -8.588306 0.350056 -2.175922 +v -8.555057 -0.001352 -2.151756 +v -8.550162 -0.001331 -2.158192 +v -9.050802 -0.000270 -2.505059 +v -9.042905 -0.001553 -2.506232 +v -8.987165 0.344527 -2.458591 +v -8.617461 0.425574 -2.207105 +v -8.617639 0.421603 -2.214147 +v -8.652547 0.434122 -2.215390 +v -8.629070 0.421652 -2.198328 +v -8.622318 0.425454 -2.200642 +v -8.629082 0.412305 -2.215461 +v -8.633939 0.412185 -2.208997 +v -8.633761 0.416156 -2.201956 +v -8.611516 0.403231 -2.185570 +v -8.603811 0.405075 -2.187191 +v -8.613872 0.398698 -2.204406 +v -8.618759 0.398640 -2.197964 +v -8.617585 0.400566 -2.190200 +v -8.622332 0.416106 -2.217775 +v -8.606554 0.371230 -2.189094 +v -8.605225 0.372479 -2.181216 +v -8.606168 0.400542 -2.206027 +v -8.593809 0.372464 -2.197045 +v -8.601661 0.371267 -2.195531 +v -8.598924 0.405133 -2.193632 +v -8.591089 0.375406 -2.177944 +v -8.586197 0.375443 -2.184382 +v -8.600097 0.403207 -2.201398 +v -8.587524 0.374194 -2.192260 +v -8.584818 0.349392 -2.190293 +v -8.591208 0.348446 -2.195155 +v -8.598941 0.374209 -2.176430 +v -8.604029 0.347770 -2.187259 +v -8.599133 0.347791 -2.193695 +v -8.565884 -0.003617 -2.169528 +v -8.570778 -0.003637 -2.163092 +v -9.057285 0.001507 -2.509553 +v -8.557958 -0.002962 -2.170988 +v -9.039270 -0.000286 -2.520804 +v -9.048277 0.000611 -2.515179 +v -9.038291 -0.001514 -2.512872 +v -9.058264 0.002736 -2.517485 +v -8.560470 -0.002484 -2.160643 +v -8.551567 -0.002015 -2.166126 +v -9.090323 0.438060 -1.886352 +v -9.086889 0.443651 -1.891077 +v -9.192926 0.443651 -1.968145 +v -9.196361 0.438060 -1.963420 +v -9.196257 0.429976 -1.963562 +v -9.222567 0.437950 -1.982466 +v -9.220349 0.430300 -1.981072 +v -8.976143 0.424311 -1.820490 +v -8.972709 0.429903 -1.825215 +v -8.951409 0.426646 -1.809735 +v -8.956653 0.421521 -1.806325 +v -9.086932 0.424135 -1.891018 +v -9.082179 0.424311 -1.897557 +v -8.980896 0.424135 -1.813951 +v -9.082136 0.443828 -1.897616 +v -8.980853 0.443651 -1.814010 +v -8.976100 0.443828 -1.820549 +v -9.078849 0.437987 -1.902140 +v -8.972813 0.437987 -1.825073 +v -9.184886 0.437987 -1.979207 +v -9.188173 0.443828 -1.974684 +v -9.090219 0.429976 -1.886495 +v -8.984183 0.429976 -1.809428 +v -9.192969 0.424135 -1.968086 +v -9.188216 0.424311 -1.974625 +v -8.955104 0.439247 -1.795296 +v -8.950294 0.439408 -1.801794 +v -8.961463 0.421360 -1.799828 +v -8.962860 0.426713 -1.793930 +v -8.984287 0.438060 -1.809285 +v -8.960348 0.434122 -1.791886 +v -9.078746 0.429903 -1.902282 +v -9.184783 0.429903 -1.979350 +v -9.211074 0.437881 -1.998241 +v -9.215889 0.443408 -1.994827 +v -9.215534 0.424773 -1.984486 +v -9.210828 0.424940 -1.991058 +v -9.208857 0.430231 -1.996846 +v -9.220595 0.443241 -1.988254 +v -9.242006 0.431932 -2.013809 +v -9.246672 0.431793 -2.007206 +v -9.243233 0.420977 -1.997704 +v -9.237054 0.416357 -2.000126 +v -9.232388 0.416497 -2.006728 +v -9.231722 0.420919 -2.013465 +v -9.250582 0.399889 -2.019952 +v -9.250924 0.402967 -2.027421 +v -9.255216 0.399792 -2.013326 +v -9.235826 0.427313 -2.016231 +v -9.256487 0.407418 -2.031246 +v -9.247337 0.427371 -2.000470 +v -9.268010 0.407458 -2.015495 +v -9.262447 0.403008 -2.011669 +v -9.282365 0.380352 -2.025927 +v -9.275930 0.378323 -2.021469 +v -9.263719 0.410634 -2.029590 +v -9.270833 0.380334 -2.041673 +v -9.278694 0.381800 -2.040474 +v -9.268353 0.410537 -2.022964 +v -9.283309 0.381756 -2.033834 +v -9.283435 0.344511 -2.050833 +v -9.291332 0.345795 -2.049659 +v -9.295945 0.345756 -2.043019 +v -9.294967 0.344527 -2.035086 +v -9.268069 0.376856 -2.022668 +v -9.288484 0.342751 -2.030592 +v -9.280586 0.341467 -2.031765 +v -9.264400 0.378304 -2.037215 +v -9.263455 0.376901 -2.029308 +v -8.904034 0.349401 -1.750958 +v -8.910425 0.348454 -1.755821 +v -8.877174 -0.002953 -1.731654 +v -8.870784 -0.002007 -1.726791 +v -9.353554 0.001491 -2.101794 +v -9.361451 0.002774 -2.100621 +v -8.891213 0.350077 -1.758854 +v -8.896108 0.350056 -1.752418 +v -8.862858 -0.001352 -1.728252 +v -8.857964 -0.001331 -1.734688 +v -9.358603 -0.000270 -2.081554 +v -9.350706 -0.001553 -2.082728 +v -9.276952 0.342735 -2.046338 +v -9.275973 0.341506 -2.038406 +v -8.936872 0.421652 -1.774824 +v -8.930120 0.425454 -1.777138 +v -8.936883 0.412305 -1.791956 +v -8.941740 0.412185 -1.785493 +v -8.941564 0.416156 -1.778451 +v -8.948896 0.434055 -1.807691 +v -8.925387 0.400566 -1.766695 +v -8.919317 0.403231 -1.762065 +v -8.926559 0.398640 -1.774460 +v -8.930133 0.416106 -1.794271 +v -8.913969 0.400542 -1.782523 +v -8.921673 0.398698 -1.780902 +v -8.925262 0.425574 -1.783601 +v -8.911613 0.405075 -1.763687 +v -8.906725 0.405133 -1.770128 +v -8.925440 0.421603 -1.790643 +v -8.901609 0.372464 -1.773541 +v -8.909462 0.371267 -1.772027 +v -8.898890 0.375406 -1.754440 +v -8.893998 0.375443 -1.760878 +v -8.907898 0.403207 -1.777894 +v -8.895326 0.374194 -1.768756 +v -8.892619 0.349392 -1.766788 +v -8.906742 0.374209 -1.752926 +v -8.914354 0.371230 -1.765589 +v -8.906935 0.347791 -1.770190 +v -8.911829 0.347770 -1.763754 +v -8.913027 0.372479 -1.757711 +v -8.873685 -0.003617 -1.746024 +v -8.878579 -0.003637 -1.739588 +v -9.365087 0.001507 -2.086049 +v -9.347072 -0.000286 -2.097301 +v -8.899009 0.348446 -1.771651 +v -8.865759 -0.002962 -1.747484 +v -9.356079 0.000611 -2.091674 +v -9.346092 -0.001514 -2.089368 +v -9.366065 0.002736 -2.093981 +v -8.868272 -0.002484 -1.737138 +v -8.859368 -0.002015 -1.742622 +v -8.815205 0.396685 -1.936675 +v -8.734866 0.396685 -2.047214 +v -8.815205 0.411254 -1.936675 +v -8.734866 0.411254 -2.047214 +v -9.125557 0.411254 -2.163887 +v -9.046785 0.411254 -2.272268 +v -8.734866 0.382115 -2.047214 +v -8.815205 0.382115 -1.936675 +v -9.046785 0.382115 -2.272268 +v -9.125557 0.382115 -2.163887 +vn -0.3545 -0.0000 0.9351 +vn -0.6984 -0.7071 0.1105 +vn -0.8089 -0.0000 -0.5879 +vn -0.1105 -0.7071 -0.6984 +vn 0.1223 0.6667 -0.7352 +vn 0.5879 -0.0000 -0.8089 +vn -0.0000 -1.0000 -0.0000 +vn 0.0397 -0.9977 -0.0554 +vn 0.0402 -0.9976 -0.0561 +vn -0.5879 -0.0000 0.8089 +vn 0.8089 -0.0000 0.5879 +vn -0.0000 1.0000 -0.0000 +vn 0.0404 0.9977 -0.0548 +vn 0.0410 0.9976 -0.0556 +vn -0.0402 0.9976 0.0561 +vn -0.0397 0.9977 0.0554 +vn -0.0399 0.9977 0.0556 +vn -0.0400 0.9976 0.0559 +vn -0.0410 -0.9976 0.0556 +vn -0.0404 -0.9977 0.0548 +vn -0.0406 -0.9977 0.0551 +vn -0.0408 -0.9976 0.0553 +vn -0.4065 0.7224 0.5594 +vn -0.4061 0.7268 0.5539 +vn -0.4061 0.7269 0.5539 +vn -0.5878 -0.0225 0.8087 +vn -0.5876 -0.0215 0.8089 +vn -0.5825 -0.0204 0.8126 +vn 0.5878 0.0218 -0.8087 +vn 0.5889 0.0219 -0.8079 +vn 0.5890 0.0219 -0.8079 +vn 0.4960 0.6937 -0.5222 +vn 0.0128 -0.9998 -0.0176 +vn -0.0129 0.9998 0.0177 +vn 0.4247 0.6915 -0.5843 +vn 0.4198 0.6962 -0.5823 +vn -0.0176 0.9997 0.0139 +vn -0.4247 -0.6915 0.5844 +vn 0.3308 -0.7257 -0.6032 +vn 0.0984 0.9903 0.0978 +vn -0.4870 -0.6955 0.5283 +vn 0.4066 -0.7223 -0.5594 +vn 0.5878 0.0221 -0.8087 +vn 0.4149 0.7008 -0.5803 +vn -0.0059 -0.9995 -0.0304 +vn 0.5822 0.0214 -0.8127 +vn 0.5874 0.0224 -0.8090 +vn -0.4065 0.7224 0.5593 +vn -0.2438 -0.6683 0.7028 +vn 0.5824 -0.6972 -0.4180 +vn 0.2565 -0.9532 0.1603 +vn 0.5770 0.0184 -0.8166 +vn 0.5815 0.0214 -0.8133 +vn -0.0223 0.9997 0.0101 +vn 0.3903 -0.7326 -0.5577 +vn -0.4056 0.7313 0.5484 +vn -0.4280 -0.7022 0.5690 +vn 0.5726 0.0132 -0.8197 +vn 0.5760 0.0177 -0.8172 +vn -0.5773 -0.0175 0.8164 +vn -0.5818 -0.0204 0.8131 +vn -0.5767 -0.0172 0.8168 +vn -0.5731 -0.0124 0.8194 +vn 0.0689 0.5509 -0.8317 +vn -0.7666 0.5748 0.2860 +vn -0.2832 0.9421 -0.1796 +vn -0.5966 0.6901 0.4096 +vn 0.2318 0.6614 -0.7133 +vn -0.5729 -0.0119 0.8195 +vn -0.5718 -0.0090 0.8204 +vn -0.0564 0.3812 -0.9228 +vn -0.8974 0.3978 0.1910 +vn -0.6930 0.5403 -0.4774 +vn 0.4927 -0.8044 0.3319 +vn 0.7550 -0.5868 -0.2926 +vn -0.0785 -0.5625 0.8231 +vn -0.5151 0.7833 -0.3481 +vn -0.7545 0.3980 -0.5218 +vn 0.0951 -0.2790 0.9556 +vn 0.9427 -0.2912 -0.1629 +vn 0.7536 -0.4005 0.5212 +vn 0.5713 0.0092 -0.8207 +vn 0.5724 0.0122 -0.8199 +vn 0.6773 -0.5692 0.4661 +vn 0.8894 -0.4135 -0.1949 +vn 0.0504 -0.3964 0.9167 +vn -0.6053 -0.0027 0.7960 +vn -0.6053 -0.0025 0.7960 +vn -0.1178 0.1694 -0.9785 +vn 0.7904 0.1162 0.6014 +vn 0.1178 -0.1695 0.9785 +vn -0.9431 0.2899 0.1627 +vn -0.0955 0.2777 -0.9559 +vn -0.5721 -0.0079 0.8201 +vn -0.5713 -0.0056 0.8207 +vn 0.5706 0.0054 -0.8212 +vn 0.5710 0.0070 -0.8209 +vn 0.6456 0.6472 -0.4055 +vn -0.1582 0.6748 0.7209 +vn -0.2730 -0.9356 -0.2239 +vn -0.5903 -0.0216 0.8069 +vn -0.5944 -0.0208 0.8039 +vn -0.5992 -0.0183 0.8004 +vn -0.5952 -0.0205 0.8033 +vn -0.3219 0.7239 0.6102 +vn 0.5904 0.0227 -0.8068 +vn 0.5947 0.0218 -0.8036 +vn -0.0804 -0.9932 -0.0847 +vn -0.5901 -0.0222 0.8070 +vn 0.0051 0.5630 0.8264 +vn -0.4622 -0.8103 -0.3602 +vn -0.6031 -0.0112 0.7976 +vn -0.6001 -0.0173 0.7997 +vn -0.7572 -0.5801 0.3002 +vn 0.5953 0.0211 -0.8032 +vn 0.5995 0.0187 -0.8001 +vn 0.3176 0.9128 0.2567 +vn 0.1782 -0.6896 -0.7019 +vn -0.6223 -0.6617 0.4182 +vn -0.9168 -0.3366 0.2150 +vn -0.1185 -0.3512 -0.9288 +vn 0.7021 0.4682 0.5366 +vn 0.6035 0.0114 -0.7973 +vn 0.6004 0.0175 -0.7995 +vn 0.6039 0.0104 -0.7970 +vn 0.6054 0.0032 -0.7959 +vn 0.7907 0.5405 -0.2874 +vn 0.5261 0.7463 0.4076 +vn 0.0185 -0.6033 -0.7973 +vn 0.7886 0.1344 0.6000 +vn 0.6053 0.0027 -0.7960 +vn 0.9792 0.0928 -0.1805 +vn 0.9798 0.0866 -0.1805 +vn 0.9797 0.0866 -0.1805 +vn 0.1733 0.0969 0.9801 +vn 0.1736 0.0905 0.9807 +vn 0.1736 0.0904 0.9807 +vn -0.6046 -0.0030 0.7965 +vn -0.6031 -0.0100 0.7976 +vn -0.6961 -0.4821 -0.5321 +vn 0.1205 0.3437 0.9313 +vn 0.9197 0.3294 -0.2139 +vn -0.7904 -0.1162 -0.6015 +vn -0.5707 -0.0053 0.8212 +vn -0.1737 -0.0898 -0.9807 +vn -0.1738 -0.0839 -0.9812 +vn 0.5707 0.0053 -0.8211 +vn -0.1735 -0.0956 -0.9802 +vn -0.9793 -0.0916 0.1805 +vn -0.9798 -0.0860 0.1805 +vn -0.9798 -0.0859 0.1805 +vn -0.7888 -0.1319 -0.6003 +vn -0.1778 -0.9756 -0.1292 +vn -0.1777 -0.9756 -0.1292 +vn -0.1777 -0.9756 -0.1293 +vn 0.0947 -0.9931 0.0688 +vn 0.0947 -0.9931 0.0689 +vn 0.9731 -0.1770 -0.1475 +vn 0.6053 0.0025 -0.7960 +vn -0.9731 0.1770 0.1475 +vn -0.9803 -0.0803 0.1805 +vn 0.7969 -0.2449 0.5522 +vn 0.9803 0.0803 -0.1805 +vn -0.7969 0.2449 -0.5522 +vn 0.1738 0.0839 0.9812 +vn -0.5878 -0.0221 0.8087 +vn -0.5875 -0.0224 0.8089 +vn -0.5822 -0.0214 0.8128 +vn -0.4247 -0.6915 0.5843 +vn -0.4870 -0.6956 0.5282 +vn -0.5889 -0.0219 0.8079 +vn -0.5890 -0.0219 0.8079 +vn -0.5946 -0.0218 0.8037 +vn -0.5906 -0.0228 0.8067 +vn 0.5878 0.0224 -0.8087 +vn 0.5824 0.0214 -0.8127 +vn 0.5875 0.0224 -0.8089 +vn -0.5878 -0.0218 0.8087 +vn -0.4280 -0.7023 0.5689 +vn 0.4927 -0.8044 0.3320 +vn 0.5769 0.0183 -0.8166 +vn 0.5726 0.0133 -0.8197 +vn -0.5769 -0.0183 0.8166 +vn -0.5815 -0.0214 0.8133 +vn -0.5761 -0.0178 0.8172 +vn -0.5725 -0.0131 0.8198 +vn -0.5724 -0.0122 0.8199 +vn -0.5714 -0.0094 0.8206 +vn -0.0784 -0.5626 0.8230 +vn 0.0952 -0.2790 0.9556 +vn 0.5712 0.0091 -0.8207 +vn 0.5724 0.0123 -0.8199 +vn 0.0505 -0.3964 0.9167 +vn -0.1178 0.1695 -0.9785 +vn 0.1179 -0.1695 0.9785 +vn -0.5710 -0.0070 0.8209 +vn -0.5703 -0.0058 0.8214 +vn 0.5706 0.0055 -0.8212 +vn -0.5995 -0.0187 0.8001 +vn -0.5954 -0.0210 0.8032 +vn -0.6223 -0.6618 0.4182 +vn 0.5901 0.0221 -0.8070 +vn 0.5947 0.0218 -0.8037 +vn -0.6035 -0.0114 0.7973 +vn -0.6004 -0.0176 0.7995 +vn -0.7572 -0.5802 0.3001 +vn -0.7889 -0.1319 -0.6002 +vn -0.6039 -0.0104 0.7970 +vn -0.6054 -0.0032 0.7959 +vn -0.9168 -0.3367 0.2149 +vn -0.6961 -0.4821 -0.5320 +vn -0.7904 -0.1162 -0.6014 +vn -0.5707 -0.0053 0.8211 +vn -0.9793 -0.0916 0.1804 +vn -0.9798 -0.0860 0.1804 +vn -0.9798 -0.0859 0.1804 +vn -0.9803 -0.0803 0.1804 +vn 0.0400 -0.9976 -0.0559 +vn 0.0399 -0.9977 -0.0556 +vn 0.0408 0.9976 -0.0553 +vn 0.0406 0.9977 -0.0551 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.973130 0.033128 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.677629 0.482142 +vt 0.409642 -0.009898 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.669677 0.481452 +vt 0.240570 0.058726 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +vt 0.296927 -0.019617 +vt 0.353285 -0.019617 +vt 0.470812 0.481452 +vt 0.296927 0.014692 +vt 0.271947 0.481452 +vt 0.353285 0.014692 +vt -0.849112 0.025953 +vt 0.468872 0.000137 +vt -0.911121 0.025955 +vt 0.273887 0.000137 +vt 0.475153 0.482142 +vt 0.353285 -0.053929 +vt 0.272677 0.482143 +vt 0.296927 -0.053929 +vt -0.911121 -0.024667 +vt 0.473178 0.006015 +vt -0.849112 -0.024667 +vt 0.274652 0.006015 +s 1 +usemtl Wood +f 12798/26387/9671 12799/26389/9672 12800/26392/9673 13070/26901/9673 13071/26903/9673 12801/26394/9673 12802/26396/9674 12803/26400/9675 12804/26401/9673 12805/26402/9673 +f 12803/26399/9675 12802/26397/9674 12806/26404/9676 12807/26407/9676 +f 12808/26409/9677 12809/26412/9678 12810/26415/9679 12811/26416/9677 +f 12812/26420/9680 12813/26421/9680 12799/26390/9672 12798/26386/9671 +f 12813/26422/9681 12812/26419/9681 12814/26424/9681 12815/26426/9681 +f 12816/26427/9681 12817/26430/9681 12814/26424/9681 12812/26419/9681 +f 12816/26428/9680 12812/26420/9680 12798/26386/9671 12818/26432/9680 +f 12811/26417/9676 12803/26399/9675 12807/26407/9676 12808/26410/9676 +f 12818/26433/9673 12798/26387/9673 12805/26402/9673 12804/26401/9673 12803/26400/9673 12811/26418/9673 12810/26414/9673 13074/26909/9673 13075/26911/9673 12819/26436/9673 +f 12811/26418/9673 12810/26414/9673 12804/26401/9673 12803/26400/9673 +f 12805/26403/9681 12798/26388/9681 12818/26434/9681 12819/26437/9681 +f 13069/26900/9681 13067/26896/9681 12820/26439/9681 12821/26440/9681 +f 12807/26408/9681 12806/26405/9681 12821/26440/9681 12820/26439/9681 +f 13066/26895/9681 12814/26424/9681 12817/26430/9681 13073/26908/9681 +f 12809/26413/9681 12808/26411/9681 12807/26408/9681 12820/26439/9681 +f 12813/26423/9682 12815/26425/9683 12800/26393/9684 12799/26391/9682 +f 12801/26395/9685 12821/26441/9686 12806/26406/9682 12802/26398/9682 +f 13071/26904/9687 13069/26899/9688 12821/26441/9686 12801/26395/9685 +f 12819/26438/9689 12817/26431/9690 12816/26429/9677 12818/26435/9677 +f 13075/26912/9691 13073/26907/9692 12817/26431/9690 12819/26438/9689 +f 12822/26442/9693 12823/26443/9693 12824/26444/9694 12825/26446/9695 +f 12826/26447/9696 12825/26445/9696 12827/26450/9697 12828/26452/9698 +f 12829/26454/9699 12830/26455/9699 12831/26456/9700 12832/26458/9701 +f 12831/26456/9702 12833/26459/9702 12834/26461/9702 12835/26463/9702 +f 12836/26465/9703 12837/26466/9703 12838/26467/9703 12839/26469/9703 +f 12840/26471/9704 12823/26443/9704 12841/26472/9704 12833/26460/9704 +f 12830/26455/9705 12840/26470/9705 12833/26459/9705 12831/26456/9705 +f 12842/26473/9706 12843/26474/9706 12840/26470/9705 12830/26455/9705 +f 12843/26475/9707 12824/26444/9707 12823/26443/9704 12840/26471/9704 +f 12844/26476/9708 12836/26464/9708 12839/26468/9708 12845/26477/9708 +f 12826/26448/9708 12846/26480/9708 12836/26464/9708 12844/26476/9708 +f 12846/26479/9703 12847/26481/9703 12837/26466/9703 12836/26465/9703 +f 12838/26467/9709 12832/26457/9709 12848/26483/9709 12849/26484/9709 +f 12833/26460/9710 12841/26472/9710 12850/26485/9710 12834/26462/9710 +f 12845/26477/9711 12839/26468/9711 12851/26487/9711 12852/26489/9711 +f 12837/26466/9712 12829/26453/9712 12832/26457/9712 12838/26467/9712 +f 12847/26481/9712 12853/26491/9712 12829/26453/9712 12837/26466/9712 +f 12853/26490/9713 12842/26473/9713 12830/26455/9699 12829/26454/9699 +f 12843/26474/9706 12842/26473/9706 12854/26492/9714 12855/26494/9714 +f 12847/26481/9715 12846/26479/9715 12856/26495/9715 12857/26497/9715 +f 12842/26473/9713 12853/26490/9713 12858/26498/9716 12854/26492/9717 +f 12859/26500/9718 12841/26472/9718 12823/26443/9693 12822/26442/9693 +f 12856/26496/9719 12828/26451/9719 12860/26503/9719 12861/26505/9719 +f 12858/26499/9720 12857/26497/9720 12862/26506/9720 12863/26508/9720 +f 12857/26497/9721 12856/26495/9721 12861/26504/9721 12862/26506/9721 +f 12854/26492/9717 12858/26498/9716 12863/26509/9722 12864/26510/9723 +f 12824/26444/9707 12843/26475/9707 12855/26493/9724 12865/26511/9724 +f 12853/26491/9725 12847/26481/9725 12857/26497/9725 12858/26499/9725 +f 12825/26446/9695 12824/26444/9694 12865/26511/9726 12827/26449/9726 +f 12846/26480/9727 12826/26448/9727 12828/26451/9727 12856/26496/9727 +f 12864/26510/9723 12863/26509/9722 12866/26512/9728 12867/26513/9729 +f 12860/26503/9730 12868/26514/9731 12869/26517/9732 12870/26518/9733 +f 12871/26519/9734 12864/26510/9734 12867/26513/9734 12872/26521/9734 +f 12868/26514/9735 12873/26524/9735 12874/26526/9735 12869/26517/9735 +f 12865/26511/9736 12855/26493/9736 12871/26520/9736 12873/26525/9736 +f 12827/26449/9737 12865/26511/9737 12873/26525/9737 12868/26515/9737 +f 12855/26494/9738 12854/26492/9738 12864/26510/9738 12871/26519/9738 +f 12828/26452/9698 12827/26450/9697 12868/26516/9731 12860/26502/9730 +f 12870/26518/9733 12869/26517/9732 12875/26530/9739 12876/26531/9740 +f 12872/26521/9741 12867/26513/9741 12877/26532/9741 12878/26534/9741 +f 12869/26517/9742 12874/26526/9742 12879/26535/9742 12875/26530/9742 +f 12874/26527/9743 12872/26522/9743 12878/26533/9743 12879/26536/9743 +f 12862/26506/9744 12861/26504/9744 12880/26537/9744 12881/26540/9744 +f 12863/26509/9745 12862/26507/9745 12881/26542/9745 12866/26512/9745 +f 12861/26505/9746 12860/26503/9746 12870/26518/9746 12880/26539/9746 +f 12873/26525/9747 12871/26520/9747 12872/26523/9747 12874/26528/9747 +f 12879/26536/9748 12878/26533/9748 12882/26544/9748 12883/26545/9748 +f 12884/26547/9749 12876/26531/9749 12885/26548/9749 12886/26549/9749 +f 12887/26551/9750 12888/26553/9750 12889/26555/9750 12890/26557/9750 +f 12888/26553/9751 12884/26546/9751 12886/26550/9751 12889/26555/9751 +f 12867/26513/9729 12866/26512/9728 12887/26552/9752 12877/26532/9753 +f 12881/26541/9754 12880/26538/9754 12884/26546/9754 12888/26553/9754 +f 12866/26512/9755 12881/26542/9755 12888/26554/9755 12887/26552/9755 +f 12880/26539/9756 12870/26518/9756 12876/26531/9756 12884/26547/9756 +f 12891/26558/9757 12892/26560/9757 12893/26562/9758 12894/26563/9758 +f 12882/26543/9759 12895/26566/9759 12896/26567/9759 12897/26569/9759 +f 12898/26572/9760 12899/26574/9760 12900/26576/9760 12901/26577/9760 +f 12886/26549/9761 12885/26548/9761 12902/26580/9761 12903/26582/9761 +f 12875/26529/9762 12879/26536/9762 12883/26545/9762 12904/26586/9762 +f 12878/26534/9763 12877/26532/9763 12895/26566/9763 12882/26543/9763 +f 12876/26531/9740 12875/26530/9739 12904/26585/9764 12885/26548/9765 +f 12877/26532/9753 12887/26552/9752 12890/26556/9766 12895/26566/9767 +f 12835/26463/9768 12834/26461/9768 12905/26587/9768 12906/26589/9768 +f 12850/26485/9769 12907/26590/9769 12908/26592/9769 12909/26596/9769 +f 12851/26486/9770 12849/26484/9770 12910/26597/9770 12911/26599/9770 +f 12907/26591/9771 12852/26488/9772 12912/26601/9773 12908/26593/9774 +f 12841/26472/9775 12859/26500/9775 12907/26590/9775 12850/26485/9775 +f 12832/26458/9701 12831/26456/9700 12835/26463/9776 12848/26482/9777 +f 12839/26469/9778 12838/26467/9778 12849/26484/9778 12851/26486/9778 +f 12859/26501/9779 12845/26478/9779 12852/26488/9772 12907/26591/9771 +f 12909/26595/9780 12908/26594/9780 12913/26603/9780 12914/26606/9780 +f 12911/26599/9781 12910/26597/9781 12915/26607/9781 12916/26610/9781 +f 12908/26594/9774 12912/26602/9773 12917/26613/9782 12913/26603/9783 +f 12912/26602/9784 12911/26600/9784 12916/26611/9784 12917/26613/9784 +f 12848/26482/9777 12835/26463/9776 12906/26589/9785 12918/26615/9786 +f 12834/26462/9787 12850/26485/9787 12909/26596/9787 12905/26588/9787 +f 12849/26484/9788 12848/26483/9788 12918/26614/9788 12910/26597/9788 +f 12852/26489/9789 12851/26487/9789 12911/26600/9789 12912/26602/9789 +f 12917/26613/9790 12916/26611/9790 12919/26616/9790 12920/26618/9790 +f 12915/26608/9791 12921/26619/9791 12922/26620/9791 12923/26622/9791 +f 12924/26624/9792 12914/26604/9792 12925/26627/9792 12926/26629/9792 +f 12921/26619/9793 12927/26631/9794 12928/26632/9795 12922/26620/9796 +f 12906/26589/9797 12905/26587/9797 12924/26626/9797 12927/26631/9797 +f 12918/26615/9786 12906/26589/9785 12927/26631/9794 12921/26619/9793 +f 12905/26588/9798 12909/26596/9798 12914/26605/9798 12924/26625/9798 +f 12910/26598/9799 12918/26615/9799 12921/26619/9799 12915/26608/9799 +f 12926/26629/9800 12925/26627/9800 12899/26574/9800 12898/26572/9800 +f 12922/26620/9796 12928/26632/9795 12929/26633/9801 12930/26635/9801 +f 12928/26632/9802 12926/26630/9802 12898/26573/9803 12929/26633/9804 +f 12925/26627/9805 12931/26636/9805 12891/26559/9806 12899/26574/9807 +f 12913/26603/9783 12917/26613/9782 12920/26618/9808 12931/26637/9809 +f 12916/26612/9810 12915/26609/9810 12923/26623/9810 12919/26617/9810 +f 12914/26606/9811 12913/26603/9811 12931/26637/9811 12925/26628/9811 +f 12927/26631/9812 12924/26626/9812 12926/26630/9812 12928/26632/9812 +f 12932/26638/9813 12933/26640/9813 12934/26641/9813 12935/26643/9813 +f 12885/26548/9765 12904/26585/9764 12936/26646/9814 12902/26580/9814 +f 12933/26640/9815 12930/26634/9815 12937/26649/9816 12934/26641/9816 +f 12895/26566/9767 12890/26556/9766 12938/26652/9817 12896/26567/9817 +f 12923/26623/9818 12922/26621/9818 12930/26634/9815 12933/26640/9815 +f 12920/26618/9819 12919/26616/9819 12932/26639/9820 12892/26560/9821 +f 12931/26637/9809 12920/26618/9808 12892/26560/9757 12891/26558/9757 +f 12919/26617/9822 12923/26623/9822 12933/26640/9822 12932/26638/9822 +f 12939/26655/9823 12897/26570/9823 12896/26568/9823 12938/26653/9823 +f 12903/26583/9824 12939/26655/9823 12938/26653/9823 12940/26656/9823 +f 12902/26581/9825 12936/26647/9823 12939/26655/9823 12903/26583/9824 +f 12936/26647/9823 12941/26658/9823 12897/26570/9823 12939/26655/9823 +f 12942/26660/9826 12901/26578/9826 12900/26575/9826 12894/26564/9826 +f 12935/26644/9827 12942/26660/9826 12894/26564/9826 12893/26561/9826 +f 12934/26642/9827 12937/26650/9827 12942/26660/9826 12935/26644/9827 +f 12937/26650/9827 12943/26661/9827 12901/26578/9826 12942/26660/9826 +f 12890/26557/9828 12889/26555/9828 12940/26657/9828 12938/26654/9828 +f 12930/26635/9801 12929/26633/9801 12943/26662/9829 12937/26651/9829 +f 12904/26586/9830 12883/26545/9830 12941/26659/9830 12936/26648/9830 +f 12892/26560/9821 12932/26639/9820 12935/26645/9831 12893/26562/9831 +f 12889/26555/9832 12886/26550/9832 12903/26584/9832 12940/26657/9832 +f 12929/26633/9804 12898/26573/9803 12901/26579/9833 12943/26662/9833 +f 12883/26545/9834 12882/26544/9834 12897/26571/9834 12941/26659/9834 +f 12899/26574/9807 12891/26559/9806 12894/26565/9835 12900/26576/9835 +f 12944/26664/9693 12945/26665/9693 12946/26666/9694 12947/26668/9695 +f 12948/26669/9836 12947/26667/9836 12949/26671/9837 12950/26672/9838 +f 12951/26673/9709 12952/26675/9709 12953/26678/9709 12954/26680/9709 +f 12955/26682/9703 12956/26683/9703 12951/26674/9703 12957/26686/9703 +f 12958/26688/9704 12945/26665/9704 12959/26689/9704 12960/26690/9704 +f 12961/26692/9705 12958/26687/9705 12960/26691/9705 12962/26693/9705 +f 12963/26694/9705 12964/26695/9705 12958/26687/9705 12961/26692/9705 +f 12964/26696/9707 12946/26666/9707 12945/26665/9704 12958/26688/9704 +f 12965/26697/9839 12955/26681/9839 12957/26685/9839 12966/26698/9839 +f 12948/26669/9839 12967/26700/9839 12955/26681/9839 12965/26697/9839 +f 12967/26699/9703 12968/26701/9703 12956/26683/9703 12955/26682/9703 +f 12960/26690/9710 12959/26689/9710 12969/26703/9710 12970/26705/9710 +f 12966/26698/9840 12957/26685/9840 12971/26706/9840 12972/26708/9840 +f 12973/26709/9841 12966/26698/9842 12972/26708/9843 12974/26711/9844 +f 12956/26684/9712 12975/26713/9712 12952/26675/9712 12951/26673/9712 +f 12968/26702/9712 12976/26715/9712 12975/26713/9712 12956/26684/9712 +f 12964/26695/9714 12963/26694/9714 12977/26716/9714 12978/26718/9714 +f 12968/26701/9715 12967/26699/9715 12979/26719/9715 12980/26721/9715 +f 12963/26694/9845 12976/26714/9845 12981/26724/9846 12977/26716/9847 +f 12965/26697/9848 12944/26663/9848 12947/26667/9836 12948/26669/9836 +f 12966/26698/9842 12973/26709/9841 12944/26663/9848 12965/26697/9848 +f 12973/26710/9693 12959/26689/9693 12945/26665/9693 12944/26664/9693 +f 12982/26725/9736 12978/26717/9736 12983/26727/9736 12984/26729/9736 +f 12979/26720/9719 12950/26672/9719 12985/26731/9719 12986/26733/9719 +f 12981/26723/9720 12980/26722/9720 12987/26734/9720 12988/26737/9720 +f 12980/26721/9721 12979/26719/9721 12986/26732/9721 12987/26736/9721 +f 12946/26666/9707 12964/26696/9707 12978/26717/9724 12982/26725/9724 +f 12976/26715/9725 12968/26702/9725 12980/26722/9725 12981/26723/9725 +f 12947/26668/9695 12946/26666/9694 12982/26725/9726 12949/26670/9726 +f 12967/26700/9849 12948/26669/9849 12950/26672/9849 12979/26720/9849 +f 12988/26738/9745 12987/26735/9745 12989/26742/9745 12990/26743/9745 +f 12987/26736/9850 12986/26732/9850 12991/26744/9850 12989/26740/9850 +f 12992/26748/9723 12988/26738/9851 12990/26743/9852 12993/26749/9729 +f 12985/26731/9853 12994/26751/9854 12995/26752/9855 12996/26753/9856 +f 12949/26670/9737 12982/26725/9737 12984/26729/9737 12994/26750/9737 +f 12978/26718/9738 12977/26716/9738 12992/26747/9738 12983/26726/9738 +f 12950/26672/9838 12949/26671/9837 12994/26751/9854 12985/26731/9853 +f 12977/26716/9847 12981/26724/9846 12988/26739/9851 12992/26747/9723 +f 12996/26753/9856 12995/26752/9855 12997/26755/9857 12998/26756/9858 +f 12999/26759/9741 12993/26749/9741 13000/26760/9741 13001/26761/9741 +f 12995/26752/9742 13002/26765/9742 13003/26766/9742 12997/26755/9742 +f 13002/26763/9743 12999/26757/9743 13001/26762/9743 13003/26767/9743 +f 12986/26733/9859 12985/26731/9859 12996/26753/9859 12991/26746/9859 +f 12984/26729/9747 12983/26727/9747 12999/26758/9747 13002/26764/9747 +f 12994/26751/9735 12984/26730/9735 13002/26765/9735 12995/26752/9735 +f 12983/26728/9734 12992/26748/9734 12993/26749/9734 12999/26759/9734 +f 13001/26761/9763 13000/26760/9763 13004/26768/9763 13005/26769/9763 +f 12997/26754/9762 13003/26767/9762 13006/26771/9762 13007/26773/9762 +f 13003/26767/9748 13001/26762/9748 13005/26770/9748 13006/26771/9748 +f 13008/26774/9860 12998/26756/9860 13009/26776/9860 13010/26777/9860 +f 12993/26749/9729 12990/26743/9852 13011/26779/9861 13000/26760/9862 +f 12989/26741/9754 12991/26745/9754 13008/26775/9754 13012/26782/9754 +f 12990/26743/9755 12989/26742/9755 13012/26781/9755 13011/26779/9755 +f 12991/26746/9863 12996/26753/9863 12998/26756/9863 13008/26774/9863 +f 13013/26783/9757 13014/26785/9757 13015/26787/9758 13016/26788/9758 +f 13005/26769/9864 13004/26768/9864 13017/26791/9864 13018/26793/9864 +f 13019/26797/9760 13020/26799/9760 13021/26801/9760 13022/26802/9760 +f 13010/26777/9865 13009/26776/9865 13023/26806/9865 13024/26808/9865 +f 12998/26756/9858 12997/26755/9857 13007/26772/9866 13009/26776/9867 +f 13000/26760/9862 13011/26779/9861 13025/26812/9868 13004/26768/9767 +f 13012/26782/9751 13008/26775/9751 13010/26778/9751 13026/26814/9751 +f 13011/26780/9750 13012/26782/9750 13026/26814/9750 13025/26813/9750 +f 12969/26703/9769 12974/26712/9769 13027/26815/9769 13028/26817/9769 +f 12971/26707/9770 12954/26679/9770 13029/26821/9770 13030/26823/9770 +f 12974/26711/9844 12972/26708/9843 13031/26824/9869 13027/26816/9870 +f 12972/26708/9871 12971/26706/9871 13030/26822/9871 13031/26824/9871 +f 12962/26693/9702 12960/26691/9702 12970/26704/9702 13032/26825/9702 +f 12959/26689/9775 12973/26710/9775 12974/26712/9775 12969/26703/9775 +f 12952/26676/9872 12962/26693/9872 13032/26825/9776 12953/26677/9873 +f 12957/26686/9778 12951/26674/9778 12954/26679/9778 12971/26707/9778 +f 13027/26816/9870 13031/26824/9869 13033/26826/9874 13034/26827/9875 +f 13031/26824/9876 13030/26822/9876 13035/26829/9876 13033/26826/9876 +f 13029/26819/9799 13036/26833/9799 13037/26834/9799 13038/26835/9799 +f 13039/26839/9798 13028/26817/9798 13040/26841/9798 13041/26844/9798 +f 13032/26825/9768 12970/26704/9768 13039/26838/9768 13042/26847/9768 +f 12953/26677/9873 13032/26825/9776 13042/26847/9785 13036/26831/9786 +f 12970/26705/9787 12969/26703/9787 13028/26817/9787 13039/26839/9787 +f 12954/26680/9788 12953/26678/9788 13036/26832/9788 13029/26820/9788 +f 13038/26835/9791 13037/26834/9791 13043/26849/9791 13044/26851/9791 +f 13041/26845/9792 13040/26842/9792 13045/26854/9792 13046/26856/9792 +f 13037/26834/9793 13047/26857/9794 13048/26858/9795 13043/26849/9796 +f 13047/26857/9812 13041/26846/9812 13046/26855/9812 13048/26858/9812 +f 13030/26823/9781 13029/26821/9781 13038/26836/9781 13035/26828/9781 +f 13028/26818/9780 13027/26816/9780 13034/26827/9780 13040/26843/9780 +f 13042/26848/9797 13039/26840/9797 13041/26846/9797 13047/26857/9797 +f 13036/26833/9786 13042/26848/9785 13047/26857/9794 13037/26834/9793 +f 13048/26858/9802 13046/26855/9802 13019/26798/9803 13049/26859/9804 +f 13045/26854/9805 13050/26860/9805 13013/26784/9806 13020/26799/9807 +f 13051/26862/9877 13044/26852/9877 13052/26864/9877 13053/26865/9877 +f 13050/26861/9878 13054/26867/9879 13014/26785/9757 13013/26783/9757 +f 13033/26826/9880 13035/26829/9880 13051/26863/9880 13054/26867/9880 +f 13034/26827/9875 13033/26826/9874 13054/26867/9879 13050/26861/9878 +f 13035/26830/9881 13038/26837/9881 13044/26852/9881 13051/26862/9881 +f 13040/26843/9811 13034/26827/9811 13050/26861/9811 13045/26853/9811 +f 13053/26865/9882 13052/26864/9882 13055/26868/9882 13056/26870/9882 +f 13009/26776/9867 13007/26772/9866 13057/26874/9883 13023/26806/9883 +f 13004/26768/9767 13025/26812/9868 13058/26877/9817 13017/26791/9817 +f 13052/26864/9815 13059/26880/9815 13060/26882/9816 13055/26868/9816 +f 13043/26849/9796 13048/26858/9795 13049/26859/9801 13059/26881/9801 +f 13046/26856/9800 13045/26854/9800 13020/26799/9800 13019/26797/9800 +f 13044/26852/9818 13043/26850/9818 13059/26880/9815 13052/26864/9815 +f 13054/26867/9884 13051/26863/9884 13053/26866/9885 13014/26785/9886 +f 13061/26885/9823 13018/26794/9823 13017/26792/9823 13058/26878/9823 +f 13024/26809/9824 13061/26885/9823 13058/26878/9823 13062/26887/9823 +f 13023/26807/9825 13057/26875/9823 13061/26886/9823 13024/26810/9824 +f 13057/26875/9823 13063/26889/9823 13018/26795/9823 13061/26886/9823 +f 13064/26891/9826 13022/26803/9826 13021/26800/9826 13016/26789/9826 +f 13056/26871/9827 13064/26891/9826 13016/26789/9826 13015/26786/9826 +f 13055/26869/9827 13060/26883/9827 13064/26892/9826 13056/26872/9827 +f 13060/26883/9827 13065/26893/9827 13022/26804/9826 13064/26892/9826 +f 13025/26813/9828 13026/26814/9828 13062/26888/9828 13058/26879/9828 +f 13059/26881/9801 13049/26859/9801 13065/26894/9829 13060/26884/9829 +f 13007/26773/9830 13006/26771/9830 13063/26890/9830 13057/26876/9830 +f 13014/26785/9886 13053/26866/9885 13056/26873/9887 13015/26787/9887 +f 13026/26814/9832 13010/26778/9832 13024/26811/9832 13062/26888/9832 +f 13049/26859/9804 13019/26798/9803 13022/26805/9833 13065/26894/9833 +f 13006/26771/9834 13005/26770/9834 13018/26796/9834 13063/26890/9834 +f 13020/26799/9807 13013/26784/9806 13016/26790/9835 13021/26801/9835 +f 12810/26415/9679 12809/26412/9678 13072/26905/9888 13074/26910/9889 +f 13074/26910/9889 13072/26905/9888 13073/26907/9692 13075/26912/9691 +f 12800/26393/9684 12815/26425/9683 13068/26897/9890 13070/26902/9891 +f 13070/26902/9891 13068/26897/9890 13069/26899/9688 13071/26904/9687 +f 12820/26439/9681 13067/26896/9681 13072/26906/9681 12809/26413/9681 +f 13067/26896/9681 13066/26895/9681 13073/26908/9681 13072/26906/9681 +f 12815/26426/9681 12814/26424/9681 13066/26895/9681 13068/26898/9681 +f 13068/26898/9681 13066/26895/9681 13067/26896/9681 13069/26900/9681 +o Top.007 +v -10.189297 1.307608 5.843791 +v -10.189297 1.340494 5.505750 +v -10.364860 1.307608 5.505750 +v -10.189297 1.316116 5.832281 +v -10.189297 1.324054 5.798486 +v -10.189297 1.330862 5.744781 +v -10.234719 1.307608 5.832281 +v -10.236149 1.316457 5.818576 +v -10.235384 1.324104 5.784396 +v -10.234442 1.330070 5.736851 +v -10.277092 1.307608 5.798486 +v -10.277409 1.316291 5.784178 +v -10.272923 1.323280 5.755531 +v -10.269245 1.328310 5.718570 +v -10.290658 1.326595 5.700918 +v -10.234719 1.339374 5.505750 +v -10.277092 1.336087 5.505750 +v -10.313438 1.330862 5.505750 +v -10.189297 1.339374 5.593211 +v -10.236535 1.338041 5.595963 +v -10.277362 1.334716 5.594491 +v -10.309208 1.330091 5.592676 +v -10.189297 1.336087 5.674798 +v -10.235649 1.334695 5.675407 +v -10.272964 1.331908 5.666771 +v -10.299813 1.328312 5.659688 +v -10.358882 1.307608 5.593211 +v -10.341331 1.307608 5.674798 +v -10.313438 1.307608 5.744781 +v -10.358882 1.316116 5.505750 +v -10.351765 1.316384 5.596707 +v -10.334013 1.316241 5.675317 +v -10.309319 1.316064 5.736635 +v -10.341331 1.324054 5.505750 +v -10.333900 1.324113 5.595000 +v -10.319022 1.323273 5.666850 +v -10.299826 1.322584 5.718547 +v -10.119827 1.107952 5.505750 +v -10.189297 1.140838 5.843791 +v -10.364860 1.140838 5.505750 +v -10.119827 1.109071 5.593211 +v -10.189297 1.112359 5.674798 +v -10.189297 1.117584 5.744781 +v -10.234719 1.109072 5.505750 +v -10.236150 1.110405 5.596707 +v -10.235384 1.113730 5.675316 +v -10.234442 1.118356 5.736635 +v -10.277092 1.112359 5.505750 +v -10.277409 1.113751 5.595000 +v -10.272923 1.116538 5.666849 +v -10.269245 1.120134 5.718546 +v -10.290658 1.121851 5.700918 +v -10.234719 1.140838 5.832281 +v -10.277092 1.140838 5.798486 +v -10.313438 1.140838 5.744781 +v -10.189297 1.132330 5.832281 +v -10.236535 1.132062 5.818576 +v -10.277362 1.132205 5.784396 +v -10.309208 1.132382 5.736851 +v -10.189297 1.124392 5.798486 +v -10.235649 1.124333 5.784178 +v -10.272964 1.125173 5.755531 +v -10.299813 1.125862 5.718570 +v -10.358882 1.132330 5.505750 +v -10.341331 1.124392 5.505750 +v -10.313438 1.117584 5.505750 +v -10.358882 1.140838 5.593211 +v -10.351765 1.131989 5.595963 +v -10.334013 1.124342 5.594491 +v -10.309320 1.118376 5.592676 +v -10.341331 1.140838 5.674798 +v -10.333899 1.132155 5.675407 +v -10.319022 1.125166 5.666771 +v -10.299826 1.120136 5.659688 +v -10.364861 1.307608 3.791521 +v -10.189297 1.340494 3.791521 +v -10.189297 1.307608 3.453480 +v -10.358883 1.316116 3.791521 +v -10.341331 1.324054 3.791521 +v -10.313439 1.330862 3.791521 +v -10.358883 1.307608 3.704061 +v -10.351765 1.316457 3.701308 +v -10.334014 1.324104 3.702781 +v -10.309320 1.330070 3.704595 +v -10.341331 1.307608 3.622473 +v -10.333900 1.316291 3.621864 +v -10.319022 1.323280 3.630500 +v -10.299827 1.328310 3.637583 +v -10.290659 1.326595 3.596353 +v -10.189297 1.339374 3.704060 +v -10.189297 1.336087 3.622473 +v -10.189297 1.330862 3.552490 +v -10.234720 1.339374 3.791521 +v -10.236150 1.338041 3.700564 +v -10.235385 1.334716 3.621954 +v -10.234443 1.330091 3.560636 +v -10.277093 1.336087 3.791521 +v -10.277410 1.334695 3.702271 +v -10.272924 1.331908 3.630422 +v -10.269245 1.328312 3.578724 +v -10.234720 1.307608 3.464991 +v -10.277093 1.307608 3.498785 +v -10.313439 1.307608 3.552490 +v -10.189297 1.316116 3.464991 +v -10.236536 1.316384 3.478695 +v -10.277363 1.316241 3.512875 +v -10.309209 1.316064 3.560421 +v -10.189297 1.324054 3.498785 +v -10.235650 1.324113 3.513093 +v -10.272965 1.323273 3.541740 +v -10.299814 1.322584 3.578701 +v -10.364861 1.140838 3.791521 +v -10.189297 1.140838 3.453480 +v -10.119827 1.107952 3.791521 +v -10.358883 1.140838 3.704061 +v -10.341331 1.140838 3.622473 +v -10.313439 1.140838 3.552490 +v -10.358883 1.132330 3.791521 +v -10.351765 1.132062 3.700564 +v -10.334014 1.132205 3.621955 +v -10.309320 1.132382 3.560636 +v -10.341331 1.124392 3.791521 +v -10.333900 1.124333 3.702271 +v -10.319022 1.125173 3.630422 +v -10.299827 1.125862 3.578725 +v -10.290659 1.121851 3.596353 +v -10.189297 1.132330 3.464991 +v -10.189297 1.124392 3.498785 +v -10.189297 1.117584 3.552490 +v -10.234720 1.140838 3.464991 +v -10.236150 1.131989 3.478695 +v -10.235385 1.124342 3.512875 +v -10.234443 1.118376 3.560421 +v -10.277093 1.140838 3.498785 +v -10.277410 1.132155 3.513093 +v -10.272924 1.125166 3.541740 +v -10.269245 1.120136 3.578701 +v -10.234720 1.109072 3.791521 +v -10.277093 1.112359 3.791521 +v -10.313439 1.117584 3.791521 +v -10.119827 1.109071 3.704060 +v -10.236536 1.110405 3.701308 +v -10.277363 1.113730 3.702781 +v -10.309209 1.118356 3.704595 +v -10.189297 1.112359 3.622473 +v -10.235650 1.113751 3.621864 +v -10.272965 1.116538 3.630500 +v -10.299814 1.120134 3.637583 +v -9.299002 1.307608 5.843791 +v -9.123438 1.307608 5.505750 +v -9.299002 1.340494 5.505750 +v -9.253578 1.307608 5.832280 +v -9.211205 1.307608 5.798486 +v -9.174859 1.307608 5.744781 +v -9.299002 1.316116 5.832280 +v -9.251762 1.316384 5.818575 +v -9.210936 1.316241 5.784396 +v -9.179090 1.316064 5.736850 +v -9.299002 1.324054 5.798486 +v -9.252648 1.324113 5.784178 +v -9.215333 1.323273 5.755531 +v -9.188484 1.322584 5.718570 +v -9.197639 1.326595 5.700918 +v -9.129416 1.316116 5.505750 +v -9.146967 1.324054 5.505750 +v -9.174859 1.330862 5.505750 +v -9.129416 1.307608 5.593210 +v -9.136534 1.316457 5.595963 +v -9.154284 1.324104 5.594490 +v -9.178978 1.330070 5.592676 +v -9.146967 1.307608 5.674798 +v -9.154398 1.316291 5.675406 +v -9.169276 1.323280 5.666770 +v -9.188472 1.328310 5.659687 +v -9.299002 1.339374 5.593210 +v -9.299002 1.336087 5.674798 +v -9.299002 1.330862 5.744781 +v -9.253578 1.339374 5.505750 +v -9.252149 1.338041 5.596706 +v -9.252913 1.334716 5.675316 +v -9.253856 1.330091 5.736635 +v -9.211205 1.336087 5.505750 +v -9.210889 1.334695 5.595000 +v -9.215374 1.331908 5.666849 +v -9.219053 1.328312 5.718546 +v -9.123438 1.140838 5.505750 +v -9.299002 1.140838 5.843791 +v -9.368471 1.107952 5.505750 +v -9.129416 1.140838 5.593210 +v -9.146967 1.140838 5.674798 +v -9.174859 1.140838 5.744781 +v -9.129416 1.132330 5.505750 +v -9.136534 1.132062 5.596706 +v -9.154284 1.132205 5.675316 +v -9.178978 1.132382 5.736635 +v -9.146967 1.124392 5.505750 +v -9.154398 1.124333 5.595000 +v -9.169276 1.125173 5.666849 +v -9.188472 1.125862 5.718546 +v -9.197639 1.121851 5.700918 +v -9.299002 1.132330 5.832280 +v -9.299002 1.124392 5.798486 +v -9.299002 1.117584 5.744781 +v -9.253578 1.140838 5.832280 +v -9.252149 1.131989 5.818575 +v -9.252913 1.124342 5.784396 +v -9.253856 1.118376 5.736850 +v -9.211205 1.140838 5.798486 +v -9.210889 1.132155 5.784178 +v -9.215374 1.125166 5.755531 +v -9.219053 1.120136 5.718570 +v -9.253578 1.109072 5.505750 +v -9.211205 1.112359 5.505750 +v -9.174859 1.117584 5.505750 +v -9.368471 1.109071 5.593210 +v -9.251762 1.110405 5.595963 +v -9.210936 1.113730 5.594490 +v -9.179090 1.118356 5.592676 +v -9.299002 1.112359 5.674798 +v -9.252648 1.113751 5.675406 +v -9.215333 1.116538 5.666770 +v -9.188484 1.120134 5.659687 +v -9.123439 1.307608 3.791521 +v -9.299002 1.307608 3.453480 +v -9.299002 1.340494 3.791521 +v -9.129416 1.307608 3.704060 +v -9.146968 1.307608 3.622473 +v -9.174860 1.307608 3.552490 +v -9.129416 1.316116 3.791521 +v -9.136534 1.316384 3.700564 +v -9.154285 1.316241 3.621954 +v -9.178979 1.316064 3.560636 +v -9.146968 1.324054 3.791521 +v -9.154398 1.324113 3.702270 +v -9.169276 1.323273 3.630421 +v -9.188473 1.322584 3.578724 +v -9.197640 1.326595 3.596353 +v -9.299002 1.316116 3.464990 +v -9.299002 1.324054 3.498785 +v -9.299002 1.330862 3.552490 +v -9.253579 1.307608 3.464990 +v -9.252150 1.316457 3.478695 +v -9.252914 1.324104 3.512874 +v -9.253857 1.330070 3.560420 +v -9.211206 1.307608 3.498785 +v -9.210890 1.316291 3.513093 +v -9.215375 1.323280 3.541739 +v -9.219053 1.328310 3.578701 +v -9.253579 1.339374 3.791521 +v -9.211206 1.336087 3.791521 +v -9.174860 1.330862 3.791521 +v -9.299002 1.339374 3.704060 +v -9.251763 1.338041 3.701307 +v -9.210937 1.334716 3.702780 +v -9.179090 1.330091 3.704595 +v -9.299002 1.336087 3.622473 +v -9.252649 1.334695 3.621864 +v -9.215334 1.331908 3.630500 +v -9.188485 1.328312 3.637583 +v -9.368471 1.107952 3.791521 +v -9.299002 1.140838 3.453480 +v -9.123439 1.140838 3.791521 +v -9.368471 1.109071 3.704060 +v -9.299002 1.112359 3.622473 +v -9.299002 1.117584 3.552490 +v -9.253579 1.109072 3.791521 +v -9.252149 1.110405 3.700564 +v -9.252914 1.113730 3.621954 +v -9.253857 1.118356 3.560636 +v -9.211206 1.112359 3.791521 +v -9.210890 1.113751 3.702270 +v -9.215375 1.116538 3.630421 +v -9.219053 1.120134 3.578724 +v -9.197640 1.121851 3.596353 +v -9.253579 1.140838 3.464990 +v -9.211206 1.140838 3.498785 +v -9.174860 1.140838 3.552490 +v -9.299002 1.132330 3.464990 +v -9.251763 1.132062 3.478695 +v -9.210937 1.132205 3.512874 +v -9.179090 1.132382 3.560420 +v -9.299002 1.124392 3.498785 +v -9.252649 1.124333 3.513093 +v -9.215334 1.125173 3.541739 +v -9.188485 1.125862 3.578701 +v -9.129416 1.132330 3.791521 +v -9.146968 1.124392 3.791521 +v -9.174860 1.117584 3.791521 +v -9.129416 1.140838 3.704060 +v -9.136534 1.131989 3.701307 +v -9.154285 1.124342 3.702780 +v -9.178978 1.118376 3.704595 +v -9.146968 1.140838 3.622473 +v -9.154399 1.132155 3.621864 +v -9.169276 1.125166 3.630500 +v -9.188473 1.120136 3.637583 +v -10.234719 -0.660429 5.505750 +v -10.119827 -0.661549 5.505750 +v -10.119827 -0.660429 5.593211 +v -10.236150 -0.659096 5.596707 +v -10.119827 -0.660429 3.704060 +v -10.119827 -0.661549 3.791521 +v -10.234720 -0.660429 3.791521 +v -10.236536 -0.659096 3.701308 +v -9.368471 -0.660429 5.593210 +v -9.368471 -0.661549 5.505750 +v -9.253578 -0.660429 5.505750 +v -9.251762 -0.659096 5.595963 +v -9.253579 -0.660429 3.791521 +v -9.368471 -0.661549 3.791521 +v -9.368471 -0.660429 3.704060 +v -9.252149 -0.659096 3.700564 +vn -0.0000 -0.1163 -0.0000 +vn 0.6207 -0.0000 -0.0000 +vn -0.0000 -0.0000 -1.1952 +vn -0.0000 0.1163 -0.0000 +vn -0.6207 -0.0000 -0.0000 +vn -0.0848 0.0159 1.1727 +vn -0.0825 0.0451 1.0899 +vn -0.0774 0.0706 0.9380 +vn -0.2406 0.0156 1.0899 +vn -0.2345 0.0440 1.0100 +vn -0.2225 0.0671 0.8771 +vn -0.3767 0.0146 0.9380 +vn -0.3584 0.0417 0.8765 +vn -0.3290 0.0616 0.7912 +vn -0.0848 0.1141 0.1632 +vn -0.2409 0.1060 0.1589 +vn -0.3768 0.0913 0.1491 +vn -0.0835 0.1060 0.4633 +vn -0.2348 0.0983 0.4515 +vn -0.3581 0.0853 0.4284 +vn -0.0777 0.0913 0.7253 +vn -0.2227 0.0853 0.6902 +vn -0.3290 0.0770 0.6335 +vn -0.6090 0.0159 0.1632 +vn -0.5661 0.0155 0.4639 +vn -0.4872 0.0145 0.7254 +vn -0.5661 0.0451 0.1608 +vn -0.5246 0.0439 0.4521 +vn -0.4555 0.0417 0.6896 +vn -0.4872 0.0706 0.1497 +vn -0.4552 0.0671 0.4288 +vn -0.4109 0.0616 0.6334 +vn -0.0492 -0.1092 0.3983 +vn -0.0774 -0.0913 0.7254 +vn -0.2406 -0.1060 0.1608 +vn -0.2345 -0.0983 0.4521 +vn -0.2225 -0.0853 0.6896 +vn -0.3767 -0.0913 0.1497 +vn -0.3584 -0.0853 0.4288 +vn -0.3290 -0.0770 0.6334 +vn -0.0848 -0.0159 1.1727 +vn -0.2409 -0.0155 1.0899 +vn -0.3768 -0.0145 0.9380 +vn -0.0835 -0.0451 1.0899 +vn -0.2348 -0.0439 1.0100 +vn -0.3581 -0.0417 0.8771 +vn -0.0777 -0.0706 0.9380 +vn -0.2227 -0.0671 0.8765 +vn -0.3290 -0.0616 0.7912 +vn -0.6090 -0.0159 0.1632 +vn -0.5661 -0.0451 0.1589 +vn -0.4872 -0.0706 0.1491 +vn -0.5661 -0.0156 0.4633 +vn -0.5246 -0.0440 0.4515 +vn -0.4555 -0.0671 0.4284 +vn -0.4872 -0.0146 0.7253 +vn -0.4552 -0.0417 0.6902 +vn -0.4109 -0.0616 0.6334 +vn -0.6090 0.0159 -0.1632 +vn -0.5661 0.0451 -0.1589 +vn -0.4872 0.0706 -0.1491 +vn -0.5661 0.0156 -0.4633 +vn -0.5246 0.0440 -0.4515 +vn -0.4555 0.0671 -0.4283 +vn -0.4872 0.0146 -0.7253 +vn -0.4552 0.0417 -0.6902 +vn -0.4109 0.0616 -0.6334 +vn -0.0848 0.1141 -0.1632 +vn -0.0825 0.1060 -0.4639 +vn -0.0774 0.0913 -0.7254 +vn -0.2406 0.1060 -0.1608 +vn -0.2345 0.0983 -0.4521 +vn -0.2225 0.0853 -0.6896 +vn -0.3767 0.0913 -0.1497 +vn -0.3584 0.0853 -0.4288 +vn -0.3290 0.0770 -0.6334 +vn -0.0848 0.0159 -1.1727 +vn -0.2409 0.0155 -1.0899 +vn -0.3768 0.0145 -0.9380 +vn -0.0835 0.0451 -1.0899 +vn -0.2348 0.0439 -1.0100 +vn -0.3581 0.0417 -0.8771 +vn -0.0777 0.0706 -0.9380 +vn -0.2227 0.0671 -0.8765 +vn -0.3290 0.0616 -0.7912 +vn -0.6090 -0.0159 -0.1632 +vn -0.5661 -0.0155 -0.4639 +vn -0.4872 -0.0145 -0.7254 +vn -0.5661 -0.0451 -0.1608 +vn -0.5246 -0.0439 -0.4521 +vn -0.4555 -0.0417 -0.6896 +vn -0.4872 -0.0706 -0.1497 +vn -0.4552 -0.0671 -0.4288 +vn -0.4109 -0.0616 -0.6334 +vn -0.0848 -0.0159 -1.1727 +vn -0.0825 -0.0451 -1.0899 +vn -0.0774 -0.0706 -0.9380 +vn -0.2406 -0.0156 -1.0899 +vn -0.2345 -0.0440 -1.0100 +vn -0.2225 -0.0671 -0.8771 +vn -0.3767 -0.0146 -0.9380 +vn -0.3584 -0.0417 -0.8765 +vn -0.3290 -0.0616 -0.7912 +vn -0.2409 -0.1060 -0.1589 +vn -0.3768 -0.0913 -0.1491 +vn -0.0498 -0.1093 -0.3970 +vn -0.2348 -0.0983 -0.4515 +vn -0.3581 -0.0853 -0.4284 +vn -0.0777 -0.0913 -0.7253 +vn -0.2227 -0.0853 -0.6902 +vn -0.3290 -0.0770 -0.6334 +vn 0.0848 0.0159 1.1727 +vn 0.2409 0.0155 1.0899 +vn 0.3768 0.0145 0.9380 +vn 0.0835 0.0451 1.0899 +vn 0.2348 0.0439 1.0100 +vn 0.3581 0.0417 0.8771 +vn 0.0777 0.0706 0.9380 +vn 0.2227 0.0671 0.8765 +vn 0.3290 0.0616 0.7912 +vn 0.6090 0.0159 0.1632 +vn 0.5661 0.0451 0.1589 +vn 0.4872 0.0706 0.1491 +vn 0.5661 0.0156 0.4633 +vn 0.5246 0.0440 0.4515 +vn 0.4555 0.0671 0.4283 +vn 0.4872 0.0146 0.7253 +vn 0.4552 0.0417 0.6902 +vn 0.4109 0.0616 0.6334 +vn 0.0848 0.1141 0.1632 +vn 0.0825 0.1060 0.4639 +vn 0.0774 0.0913 0.7254 +vn 0.2406 0.1060 0.1608 +vn 0.2345 0.0983 0.4521 +vn 0.2225 0.0853 0.6896 +vn 0.3767 0.0913 0.1497 +vn 0.3584 0.0853 0.4288 +vn 0.3290 0.0770 0.6334 +vn 0.6090 -0.0159 0.1632 +vn 0.5661 -0.0155 0.4639 +vn 0.4872 -0.0145 0.7254 +vn 0.5661 -0.0451 0.1608 +vn 0.5246 -0.0439 0.4521 +vn 0.4555 -0.0417 0.6896 +vn 0.4872 -0.0706 0.1497 +vn 0.4552 -0.0671 0.4288 +vn 0.4109 -0.0616 0.6334 +vn 0.0848 -0.0159 1.1727 +vn 0.0825 -0.0451 1.0899 +vn 0.0774 -0.0706 0.9380 +vn 0.2406 -0.0156 1.0899 +vn 0.2345 -0.0440 1.0100 +vn 0.2225 -0.0671 0.8771 +vn 0.3767 -0.0146 0.9380 +vn 0.3584 -0.0417 0.8765 +vn 0.3290 -0.0616 0.7912 +vn -0.0000 -0.0000 1.1952 +vn 0.2409 -0.1060 0.1589 +vn 0.3768 -0.0913 0.1491 +vn 0.0498 -0.1093 0.3970 +vn 0.2348 -0.0983 0.4515 +vn 0.3581 -0.0853 0.4284 +vn 0.0777 -0.0913 0.7253 +vn 0.2227 -0.0853 0.6902 +vn 0.3290 -0.0770 0.6334 +vn 0.6090 0.0159 -0.1632 +vn 0.5661 0.0155 -0.4639 +vn 0.4872 0.0145 -0.7254 +vn 0.5661 0.0451 -0.1608 +vn 0.5246 0.0439 -0.4521 +vn 0.4555 0.0417 -0.6896 +vn 0.4872 0.0706 -0.1497 +vn 0.4552 0.0671 -0.4288 +vn 0.4109 0.0616 -0.6334 +vn 0.0848 0.0159 -1.1727 +vn 0.0825 0.0451 -1.0899 +vn 0.0774 0.0706 -0.9380 +vn 0.2406 0.0156 -1.0899 +vn 0.2345 0.0440 -1.0100 +vn 0.2225 0.0671 -0.8771 +vn 0.3767 0.0146 -0.9380 +vn 0.3584 0.0417 -0.8765 +vn 0.3290 0.0616 -0.7912 +vn 0.0848 0.1141 -0.1632 +vn 0.2409 0.1060 -0.1589 +vn 0.3768 0.0913 -0.1491 +vn 0.0835 0.1060 -0.4633 +vn 0.2348 0.0983 -0.4515 +vn 0.3581 0.0853 -0.4284 +vn 0.0777 0.0913 -0.7253 +vn 0.2227 0.0853 -0.6902 +vn 0.3290 0.0770 -0.6334 +vn 0.0492 -0.1092 -0.3983 +vn 0.0774 -0.0913 -0.7254 +vn 0.2406 -0.1060 -0.1608 +vn 0.2345 -0.0983 -0.4521 +vn 0.2225 -0.0853 -0.6896 +vn 0.3767 -0.0913 -0.1497 +vn 0.3584 -0.0853 -0.4288 +vn 0.3290 -0.0770 -0.6334 +vn 0.0848 -0.0159 -1.1727 +vn 0.2409 -0.0155 -1.0899 +vn 0.3768 -0.0145 -0.9380 +vn 0.0835 -0.0451 -1.0899 +vn 0.2348 -0.0439 -1.0100 +vn 0.3581 -0.0417 -0.8771 +vn 0.0777 -0.0706 -0.9380 +vn 0.2227 -0.0671 -0.8765 +vn 0.3290 -0.0616 -0.7912 +vn 0.6090 -0.0159 -0.1632 +vn 0.5661 -0.0451 -0.1589 +vn 0.4872 -0.0706 -0.1491 +vn 0.5661 -0.0156 -0.4633 +vn 0.5246 -0.0440 -0.4515 +vn 0.4555 -0.0671 -0.4284 +vn 0.4872 -0.0146 -0.7253 +vn 0.4552 -0.0417 -0.6902 +vn 0.4109 -0.0616 -0.6334 +vn 0.0323 -0.1161 -0.0000 +vn 0.2375 -0.1074 -0.0000 +vn 0.3779 -0.0922 -0.0000 +vn 0.4924 -0.0708 -0.0000 +vn 0.5735 -0.0445 -0.0000 +vn 0.6154 -0.0152 -0.0000 +vn -0.0000 -0.1153 0.1559 +vn -0.0000 -0.1074 0.4574 +vn -0.0000 -0.0922 0.7276 +vn -0.0000 -0.0708 0.9481 +vn -0.0000 -0.0445 1.1042 +vn -0.0000 -0.0152 1.1849 +vn -0.6154 -0.0000 0.1559 +vn -0.5735 -0.0000 0.4574 +vn -0.4924 -0.0000 0.7276 +vn -0.3779 -0.0000 0.9481 +vn -0.2375 -0.0000 1.1042 +vn -0.0810 -0.0000 1.1849 +vn 0.0810 -0.0000 -1.1849 +vn 0.2375 -0.0000 -1.1042 +vn 0.3779 -0.0000 -0.9481 +vn 0.4924 -0.0000 -0.7276 +vn 0.5735 -0.0000 -0.4574 +vn 0.6154 -0.0000 -0.1559 +vn -0.0810 -0.0000 -1.1849 +vn -0.2375 -0.0000 -1.1042 +vn -0.3779 -0.0000 -0.9481 +vn -0.4924 -0.0000 -0.7276 +vn -0.5735 -0.0000 -0.4574 +vn -0.6154 -0.0000 -0.1559 +vn 0.0810 -0.0000 1.1849 +vn 0.2375 -0.0000 1.1042 +vn 0.3779 -0.0000 0.9481 +vn 0.4924 -0.0000 0.7276 +vn 0.5735 -0.0000 0.4574 +vn 0.6154 -0.0000 0.1559 +vn -0.0000 0.1153 -0.1559 +vn -0.0000 0.1074 -0.4574 +vn -0.0000 0.0922 -0.7276 +vn -0.0000 0.0708 -0.9481 +vn -0.0000 0.0445 -1.1042 +vn -0.0000 0.0152 -1.1849 +vn -0.0810 0.1153 -0.0000 +vn -0.2375 0.1074 -0.0000 +vn -0.3779 0.0922 -0.0000 +vn -0.4924 0.0708 -0.0000 +vn -0.5735 0.0445 -0.0000 +vn -0.6154 0.0152 -0.0000 +vn -0.0000 -0.1153 -0.1559 +vn -0.0000 -0.1074 -0.4574 +vn -0.0000 -0.0922 -0.7276 +vn -0.0000 -0.0708 -0.9481 +vn -0.0000 -0.0445 -1.1042 +vn -0.0000 -0.0152 -1.1849 +vn 0.0810 0.1153 -0.0000 +vn 0.2375 0.1074 -0.0000 +vn 0.3779 0.0922 -0.0000 +vn 0.4924 0.0708 -0.0000 +vn 0.5735 0.0445 -0.0000 +vn 0.6154 0.0152 -0.0000 +vn -0.0000 0.1153 0.1559 +vn -0.0000 0.1074 0.4574 +vn -0.0000 0.0922 0.7276 +vn -0.0000 0.0708 0.9481 +vn -0.0000 0.0445 1.1042 +vn -0.0000 0.0152 1.1849 +vn -0.0323 -0.1161 -0.0000 +vn -0.2375 -0.1074 -0.0000 +vn -0.3779 -0.0922 -0.0000 +vn -0.4924 -0.0708 -0.0000 +vn -0.5735 -0.0445 -0.0000 +vn -0.6154 -0.0152 -0.0000 +vn -0.0341 -0.1150 0.1660 +vn -0.0342 -0.1150 -0.1664 +vn 0.0342 -0.1150 0.1664 +vn 0.0341 -0.1150 -0.1660 +vn 0.0097 -0.0000 1.1950 +vn -0.0097 -0.0000 -1.1950 +vn -0.6202 -0.0000 0.0463 +vn 0.6202 -0.0000 -0.0463 +vn -0.6204 -0.0000 -0.0362 +vn 0.6204 -0.0000 0.0362 +vn 0.0076 -0.0000 -1.1951 +vn -0.0076 -0.0000 1.1951 +vt 0.579948 0.337500 +vt 0.840885 0.798611 +vt 0.578906 0.336574 +vt 0.579948 0.336574 +vt 0.840885 0.816204 +vt 0.579948 0.337500 +vt 0.579948 0.337500 +vt 0.578906 0.336574 +vt 0.579427 0.337500 +vt 0.579948 0.337500 +vt 0.840885 0.800463 +vt 0.579948 0.337500 +vt 0.579948 0.337500 +vt 0.579427 0.337500 +vt 0.578906 0.336574 +vt 0.579948 0.337500 +vt 0.840885 0.803241 +vt 0.579948 0.337500 +vt 0.579948 0.337500 +vt 0.579427 0.337500 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.579948 0.336574 +vt 0.840885 0.814352 +vt 0.579948 0.336574 +vt 0.840885 0.811574 +vt 0.579948 0.336574 +vt 0.840885 0.807870 +vt 0.579948 0.336574 +vt 0.842969 0.816204 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.776823 0.816204 +vt 0.794531 0.798611 +vt 0.794531 0.816204 +vt 0.776823 0.814352 +vt 0.776823 0.811574 +vt 0.776823 0.807870 +vt 0.785677 0.798611 +vt 0.778906 0.816204 +vt 0.779427 0.813426 +vt 0.779427 0.811574 +vt 0.778906 0.807870 +vt 0.785677 0.800463 +vt 0.780990 0.816204 +vt 0.780990 0.813426 +vt 0.780990 0.812500 +vt 0.780990 0.807870 +vt 0.785677 0.802315 +vt 0.785677 0.808796 +vt 0.794531 0.800463 +vt 0.794531 0.803241 +vt 0.794531 0.807870 +vt 0.792448 0.798611 +vt 0.792448 0.801389 +vt 0.792448 0.803241 +vt 0.792448 0.807870 +vt 0.790365 0.798611 +vt 0.790365 0.801389 +vt 0.790365 0.802315 +vt 0.790365 0.807870 +vt 0.792448 0.816204 +vt 0.790365 0.816204 +vt 0.785677 0.816204 +vt 0.794531 0.814352 +vt 0.792448 0.813426 +vt 0.790365 0.813426 +vt 0.785677 0.814352 +vt 0.794531 0.811574 +vt 0.792448 0.811574 +vt 0.790365 0.812500 +vt 0.785677 0.812500 +vt 0.579948 0.333796 +vt 0.840885 0.862500 +vt 0.578906 0.333796 +vt 0.840885 0.880093 +vt 0.579948 0.331944 +vt 0.579948 0.333796 +vt 0.842969 0.862500 +vt 0.579948 0.333796 +vt 0.579427 0.333796 +vt 0.579948 0.332870 +vt 0.840885 0.864352 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.579427 0.332870 +vt 0.579948 0.332870 +vt 0.840885 0.867130 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.579427 0.332870 +vt 0.579427 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.579427 0.331944 +vt 0.578906 0.333796 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.579427 0.331944 +vt 0.578906 0.333796 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.579427 0.332870 +vt 0.579948 0.331944 +vt 0.840885 0.877315 +vt 0.579948 0.332870 +vt 0.840885 0.875463 +vt 0.579948 0.332870 +vt 0.840885 0.870833 +vt 0.579948 0.331944 +vt 0.579948 0.331944 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.579948 0.331944 +vt 0.579948 0.331944 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.794531 0.862500 +vt 0.794531 0.880093 +vt 0.776823 0.862500 +vt 0.794531 0.864352 +vt 0.794531 0.867130 +vt 0.794531 0.870833 +vt 0.792448 0.862500 +vt 0.792448 0.864352 +vt 0.792448 0.867130 +vt 0.792448 0.870833 +vt 0.790365 0.862500 +vt 0.790365 0.864352 +vt 0.790365 0.866204 +vt 0.790365 0.870833 +vt 0.787240 0.870833 +vt 0.792448 0.880093 +vt 0.790365 0.880093 +vt 0.776823 0.870833 +vt 0.785677 0.880093 +vt 0.794531 0.877315 +vt 0.792448 0.877315 +vt 0.790365 0.877315 +vt 0.785677 0.877315 +vt 0.778906 0.870833 +vt 0.794531 0.875463 +vt 0.792448 0.875463 +vt 0.790365 0.875463 +vt 0.785677 0.876389 +vt 0.780990 0.870833 +vt 0.778906 0.862500 +vt 0.780990 0.862500 +vt 0.785677 0.862500 +vt 0.776823 0.864352 +vt 0.779427 0.864352 +vt 0.780990 0.864352 +vt 0.785677 0.864352 +vt 0.776823 0.867130 +vt 0.779427 0.867130 +vt 0.780990 0.866204 +vt 0.785677 0.866204 +vt 0.579948 0.340278 +vt 0.840885 0.752315 +vt 0.840885 0.734722 +vt 0.579948 0.342130 +vt 0.575781 0.336574 +vt 0.579948 0.341204 +vt 0.840885 0.750463 +vt 0.579948 0.341204 +vt 0.840885 0.747685 +vt 0.579948 0.341204 +vt 0.840885 0.743981 +vt 0.579948 0.340278 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579948 0.340278 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579427 0.341204 +vt 0.575260 0.336574 +vt 0.579948 0.342130 +vt 0.579948 0.342130 +vt 0.575260 0.336574 +vt 0.579427 0.342130 +vt 0.579948 0.342130 +vt 0.840885 0.737500 +vt 0.579948 0.342130 +vt 0.579948 0.342130 +vt 0.579427 0.342130 +vt 0.575260 0.336574 +vt 0.579948 0.341204 +vt 0.840885 0.739352 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579427 0.341204 +vt 0.575260 0.336574 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.579427 0.340278 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.579427 0.341204 +vt 0.575781 0.336574 +vt 0.575260 0.336574 +vt 0.575260 0.336574 +vt 0.575260 0.336574 +vt 0.579427 0.341204 +vt 0.575260 0.336574 +vt 0.794531 0.734722 +vt 0.794531 0.752315 +vt 0.730990 0.816204 +vt 0.794531 0.737500 +vt 0.794531 0.739352 +vt 0.794531 0.743981 +vt 0.792448 0.734722 +vt 0.792448 0.737500 +vt 0.792448 0.739352 +vt 0.792448 0.743981 +vt 0.790365 0.734722 +vt 0.790365 0.737500 +vt 0.790365 0.739352 +vt 0.790365 0.743981 +vt 0.789323 0.743981 +vt 0.785677 0.746759 +vt 0.722135 0.810648 +vt 0.792448 0.752315 +vt 0.790365 0.752315 +vt 0.730990 0.807870 +vt 0.785677 0.752315 +vt 0.794531 0.750463 +vt 0.792448 0.750463 +vt 0.790365 0.750463 +vt 0.785677 0.750463 +vt 0.728906 0.807870 +vt 0.794531 0.747685 +vt 0.792448 0.747685 +vt 0.790365 0.748611 +vt 0.785677 0.748611 +vt 0.726823 0.807870 +vt 0.728906 0.816204 +vt 0.726302 0.816204 +vt 0.722135 0.816204 +vt 0.785677 0.734722 +vt 0.730990 0.814352 +vt 0.728385 0.813426 +vt 0.726302 0.813426 +vt 0.785677 0.737500 +vt 0.722135 0.814352 +vt 0.730990 0.811574 +vt 0.728906 0.811574 +vt 0.726302 0.812500 +vt 0.785677 0.738426 +vt 0.722135 0.812500 +vt 0.840885 0.688426 +vt 0.579948 0.344907 +vt 0.840885 0.926389 +vt 0.579948 0.329167 +vt 0.575781 0.333796 +vt 0.579948 0.344907 +vt 0.840885 0.686574 +vt 0.579948 0.344907 +vt 0.840885 0.684722 +vt 0.579948 0.345833 +vt 0.579948 0.328241 +vt 0.840885 0.934722 +vt 0.840885 0.680093 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.345833 +vt 0.579948 0.328241 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.345833 +vt 0.579948 0.328241 +vt 0.579427 0.345833 +vt 0.579427 0.329167 +vt 0.575260 0.332870 +vt 0.579948 0.329167 +vt 0.579948 0.329167 +vt 0.575781 0.332870 +vt 0.579427 0.329167 +vt 0.579948 0.329167 +vt 0.840885 0.928241 +vt 0.579948 0.329167 +vt 0.579948 0.329167 +vt 0.579427 0.329167 +vt 0.575781 0.332870 +vt 0.579948 0.329167 +vt 0.840885 0.930093 +vt 0.579948 0.329167 +vt 0.579948 0.329167 +vt 0.579427 0.329167 +vt 0.575260 0.332870 +vt 0.575781 0.333796 +vt 0.575260 0.333796 +vt 0.575260 0.333796 +vt 0.579427 0.344907 +vt 0.575781 0.332870 +vt 0.575781 0.332870 +vt 0.575260 0.332870 +vt 0.579427 0.344907 +vt 0.575260 0.332870 +vt 0.575781 0.332870 +vt 0.575781 0.332870 +vt 0.575260 0.332870 +vt 0.579427 0.344907 +vt 0.575260 0.332870 +vt 0.730990 0.862500 +vt 0.794531 0.926389 +vt 0.794531 0.688426 +vt 0.730990 0.864352 +vt 0.730990 0.867130 +vt 0.730990 0.870833 +vt 0.785677 0.926389 +vt 0.728906 0.862500 +vt 0.728906 0.864352 +vt 0.728906 0.867130 +vt 0.728906 0.870833 +vt 0.785677 0.928241 +vt 0.726302 0.862500 +vt 0.726302 0.864352 +vt 0.726302 0.866204 +vt 0.726823 0.870833 +vt 0.785677 0.930093 +vt 0.725781 0.870833 +vt 0.789323 0.934722 +vt 0.785677 0.683796 +vt 0.794531 0.928241 +vt 0.794531 0.930093 +vt 0.794531 0.934722 +vt 0.794531 0.680093 +vt 0.792448 0.926389 +vt 0.792448 0.928241 +vt 0.792448 0.930093 +vt 0.792448 0.934722 +vt 0.792448 0.680093 +vt 0.790365 0.926389 +vt 0.790365 0.928241 +vt 0.790365 0.930093 +vt 0.790365 0.934722 +vt 0.790365 0.680093 +vt 0.792448 0.688426 +vt 0.790365 0.688426 +vt 0.722135 0.862500 +vt 0.785677 0.688426 +vt 0.794531 0.686574 +vt 0.792448 0.686574 +vt 0.790365 0.686574 +vt 0.722135 0.864352 +vt 0.785677 0.686574 +vt 0.794531 0.684722 +vt 0.792448 0.684722 +vt 0.790365 0.684722 +vt 0.722135 0.866204 +vt 0.785677 0.684722 +vt 0.778906 0.816204 +vt 0.776823 0.816204 +vt 0.776823 0.814352 +vt 0.779427 0.813426 +vt 0.776823 0.864352 +vt 0.776823 0.862500 +vt 0.778906 0.862500 +vt 0.779427 0.864352 +vt 0.730990 0.814352 +vt 0.730990 0.816204 +vt 0.728906 0.816204 +vt 0.728385 0.813426 +vt 0.728906 0.862500 +vt 0.730990 0.862500 +vt 0.730990 0.864352 +vt 0.728906 0.864352 +s 0 +usemtl CabnetDoors +f 13263/27142/9892 13113/26961/9892 13189/27051/9892 13335/27241/9892 +f 13337/27243/9893 13298/27185/9893 13225/27091/9893 13261/27140/9893 +f 13188/27050/9894 13152/27004/9894 13299/27187/9894 13336/27242/9894 +f 13077/26915/9895 13226/27093/9895 13300/27189/9895 13151/27003/9895 +f 13115/26963/9896 13078/26917/9896 13150/27002/9896 13187/27049/9896 +f 13076/26913/9897 13079/26918/9897 13083/26924/9897 13082/26922/9897 +f 13079/26918/9898 13080/26919/9898 13084/26925/9898 13083/26924/9898 +f 13080/26919/9899 13081/26921/9899 13085/26926/9899 13084/26925/9899 +f 13082/26922/9900 13083/26924/9900 13087/26930/9900 13086/26928/9900 +f 13083/26924/9901 13084/26925/9901 13088/26931/9901 13087/26930/9901 +f 13084/26925/9902 13085/26926/9902 13089/26932/9902 13088/26931/9902 +f 13086/26928/9903 13087/26930/9903 13108/26956/9903 13104/26950/9903 +f 13087/26930/9904 13088/26931/9904 13112/26960/9904 13108/26956/9904 +f 13088/26931/9905 13089/26932/9905 13090/26934/9905 13112/26960/9905 +f 13077/26915/9906 13091/26935/9906 13095/26939/9906 13094/26938/9906 +f 13091/26935/9907 13092/26936/9907 13096/26940/9907 13095/26939/9907 +f 13092/26936/9908 13093/26937/9908 13097/26941/9908 13096/26940/9908 +f 13094/26938/9909 13095/26939/9909 13099/26943/9909 13098/26942/9909 +f 13095/26939/9910 13096/26940/9910 13100/26944/9910 13099/26943/9910 +f 13096/26940/9911 13097/26941/9911 13101/26945/9911 13100/26944/9911 +f 13098/26942/9912 13099/26943/9912 13085/26927/9912 13081/26920/9912 +f 13099/26943/9913 13100/26944/9913 13089/26933/9913 13085/26927/9913 +f 13100/26944/9914 13101/26945/9914 13090/26934/9914 13089/26933/9914 +f 13078/26916/9915 13102/26946/9915 13106/26954/9915 13105/26952/9915 +f 13102/26946/9916 13103/26948/9916 13107/26955/9916 13106/26954/9916 +f 13103/26948/9917 13104/26950/9917 13108/26956/9917 13107/26955/9917 +f 13105/26952/9918 13106/26954/9918 13110/26958/9918 13109/26957/9918 +f 13106/26954/9919 13107/26955/9919 13111/26959/9919 13110/26958/9919 +f 13107/26955/9920 13108/26956/9920 13112/26960/9920 13111/26959/9920 +f 13109/26957/9921 13110/26958/9921 13097/26941/9921 13093/26937/9921 +f 13110/26958/9922 13111/26959/9922 13101/26945/9922 13097/26941/9922 +f 13111/26959/9923 13112/26960/9923 13090/26934/9923 13101/26945/9923 +f 13290/27175/9896 13263/27142/9896 13381/27298/9896 13380/27297/9896 +f 13116/26964/9924 13117/26965/9924 13121/26970/9924 13120/26969/9924 +f 13117/26965/9925 13118/26966/9925 13122/26971/9925 13121/26970/9925 +f 13119/26968/9926 13120/26969/9926 13124/26974/9926 13123/26973/9926 +f 13120/26969/9927 13121/26970/9927 13125/26975/9927 13124/26974/9927 +f 13121/26970/9928 13122/26971/9928 13126/26976/9928 13125/26975/9928 +f 13123/26973/9929 13124/26974/9929 13145/26996/9929 13141/26992/9929 +f 13124/26974/9930 13125/26975/9930 13149/27000/9930 13145/26996/9930 +f 13125/26975/9931 13126/26976/9931 13127/26978/9931 13149/27000/9931 +f 13114/26962/9932 13128/26979/9932 13132/26983/9932 13131/26982/9932 +f 13128/26979/9933 13129/26980/9933 13133/26984/9933 13132/26983/9933 +f 13129/26980/9934 13130/26981/9934 13134/26985/9934 13133/26984/9934 +f 13131/26982/9935 13132/26983/9935 13136/26987/9935 13135/26986/9935 +f 13132/26983/9936 13133/26984/9936 13137/26988/9936 13136/26987/9936 +f 13133/26984/9937 13134/26985/9937 13138/26989/9937 13137/26988/9937 +f 13135/26986/9938 13136/26987/9938 13122/26972/9938 13118/26967/9938 +f 13136/26987/9939 13137/26988/9939 13126/26977/9939 13122/26972/9939 +f 13137/26988/9940 13138/26989/9940 13127/26978/9940 13126/26977/9940 +f 13115/26963/9941 13139/26990/9941 13143/26994/9941 13142/26993/9941 +f 13139/26990/9942 13140/26991/9942 13144/26995/9942 13143/26994/9942 +f 13140/26991/9943 13141/26992/9943 13145/26996/9943 13144/26995/9943 +f 13142/26993/9944 13143/26994/9944 13147/26998/9944 13146/26997/9944 +f 13143/26994/9945 13144/26995/9945 13148/26999/9945 13147/26998/9945 +f 13144/26995/9946 13145/26996/9946 13149/27000/9946 13148/26999/9946 +f 13146/26997/9947 13147/26998/9947 13134/26985/9947 13130/26981/9947 +f 13147/26998/9948 13148/26999/9948 13138/26989/9948 13134/26985/9948 +f 13148/26999/9949 13149/27000/9949 13127/26978/9949 13138/26989/9949 +f 13150/27001/9950 13153/27006/9950 13157/27012/9950 13156/27010/9950 +f 13153/27006/9951 13154/27008/9951 13158/27013/9951 13157/27012/9951 +f 13154/27008/9952 13155/27009/9952 13159/27014/9952 13158/27013/9952 +f 13156/27010/9953 13157/27012/9953 13161/27017/9953 13160/27015/9953 +f 13157/27012/9954 13158/27013/9954 13162/27018/9954 13161/27017/9954 +f 13158/27013/9955 13159/27014/9955 13163/27019/9955 13162/27018/9955 +f 13160/27015/9956 13161/27017/9956 13182/27044/9956 13178/27039/9956 +f 13161/27017/9957 13162/27018/9957 13186/27048/9957 13182/27044/9957 +f 13162/27018/9958 13163/27019/9958 13164/27020/9958 13186/27048/9958 +f 13151/27003/9959 13165/27021/9959 13169/27026/9959 13168/27025/9959 +f 13165/27021/9960 13166/27022/9960 13170/27027/9960 13169/27026/9960 +f 13166/27022/9961 13167/27023/9961 13171/27028/9961 13170/27027/9961 +f 13168/27025/9962 13169/27026/9962 13173/27031/9962 13172/27030/9962 +f 13169/27026/9963 13170/27027/9963 13174/27032/9963 13173/27031/9963 +f 13170/27027/9964 13171/27028/9964 13175/27033/9964 13174/27032/9964 +f 13172/27030/9965 13173/27031/9965 13159/27014/9965 13155/27009/9965 +f 13173/27031/9966 13174/27032/9966 13163/27019/9966 13159/27014/9966 +f 13174/27032/9967 13175/27033/9967 13164/27020/9967 13163/27019/9967 +f 13152/27005/9968 13176/27035/9968 13180/27042/9968 13179/27041/9968 +f 13176/27035/9969 13177/27037/9969 13181/27043/9969 13180/27042/9969 +f 13177/27037/9970 13178/27039/9970 13182/27044/9970 13181/27043/9970 +f 13179/27041/9971 13180/27042/9971 13184/27046/9971 13183/27045/9971 +f 13180/27042/9972 13181/27043/9972 13185/27047/9972 13184/27046/9972 +f 13181/27043/9973 13182/27044/9973 13186/27048/9973 13185/27047/9973 +f 13183/27045/9974 13184/27046/9974 13171/27029/9974 13167/27024/9974 +f 13184/27046/9975 13185/27047/9975 13175/27034/9975 13171/27029/9975 +f 13185/27047/9976 13186/27048/9976 13164/27020/9976 13175/27034/9976 +f 13187/27049/9977 13190/27052/9977 13194/27056/9977 13193/27055/9977 +f 13190/27052/9978 13191/27053/9978 13195/27057/9978 13194/27056/9978 +f 13191/27053/9979 13192/27054/9979 13196/27058/9979 13195/27057/9979 +f 13193/27055/9980 13194/27056/9980 13198/27060/9980 13197/27059/9980 +f 13194/27056/9981 13195/27057/9981 13199/27061/9981 13198/27060/9981 +f 13195/27057/9982 13196/27058/9982 13200/27062/9982 13199/27061/9982 +f 13197/27059/9983 13198/27060/9983 13219/27084/9983 13215/27080/9983 +f 13198/27060/9984 13199/27061/9984 13223/27088/9984 13219/27084/9984 +f 13199/27061/9985 13200/27062/9985 13201/27063/9985 13223/27088/9985 +f 13188/27050/9986 13202/27064/9986 13206/27069/9986 13205/27068/9986 +f 13202/27064/9987 13203/27065/9987 13207/27070/9987 13206/27069/9987 +f 13203/27065/9988 13204/27067/9988 13208/27071/9988 13207/27070/9988 +f 13205/27068/9989 13206/27069/9989 13210/27074/9989 13209/27073/9989 +f 13206/27069/9990 13207/27070/9990 13211/27075/9990 13210/27074/9990 +f 13207/27070/9991 13208/27071/9991 13212/27076/9991 13211/27075/9991 +f 13209/27073/9992 13210/27074/9992 13196/27058/9992 13192/27054/9992 +f 13210/27074/9993 13211/27075/9993 13200/27062/9993 13196/27058/9993 +f 13211/27075/9994 13212/27076/9994 13201/27063/9994 13200/27062/9994 +f 13216/27081/9893 13189/27051/9893 13377/27294/9893 13376/27293/9893 +f 13213/27078/9995 13214/27079/9995 13218/27083/9995 13217/27082/9995 +f 13214/27079/9996 13215/27080/9996 13219/27084/9996 13218/27083/9996 +f 13216/27081/9997 13217/27082/9997 13221/27086/9997 13220/27085/9997 +f 13217/27082/9998 13218/27083/9998 13222/27087/9998 13221/27086/9998 +f 13218/27083/9999 13219/27084/9999 13223/27088/9999 13222/27087/9999 +f 13220/27085/10000 13221/27086/10000 13208/27072/10000 13204/27066/10000 +f 13221/27086/10001 13222/27087/10001 13212/27077/10001 13208/27072/10001 +f 13222/27087/10002 13223/27088/10002 13201/27063/10002 13212/27077/10002 +f 13224/27089/10003 13227/27094/10003 13231/27101/10003 13230/27100/10003 +f 13227/27094/10004 13228/27096/10004 13232/27102/10004 13231/27101/10004 +f 13228/27096/10005 13229/27098/10005 13233/27103/10005 13232/27102/10005 +f 13230/27100/10006 13231/27101/10006 13235/27105/10006 13234/27104/10006 +f 13231/27101/10007 13232/27102/10007 13236/27106/10007 13235/27105/10007 +f 13232/27102/10008 13233/27103/10008 13237/27107/10008 13236/27106/10008 +f 13234/27104/10009 13235/27105/10009 13256/27133/10009 13252/27129/10009 +f 13235/27105/10010 13236/27106/10010 13260/27138/10010 13256/27133/10010 +f 13236/27106/10011 13237/27107/10011 13238/27108/10011 13260/27138/10011 +f 13225/27092/10012 13239/27110/10012 13243/27116/10012 13242/27114/10012 +f 13239/27110/10013 13240/27111/10013 13244/27117/10013 13243/27116/10013 +f 13240/27111/10014 13241/27113/10014 13245/27118/10014 13244/27117/10014 +f 13242/27114/10015 13243/27116/10015 13247/27122/10015 13246/27120/10015 +f 13243/27116/10016 13244/27117/10016 13248/27123/10016 13247/27122/10016 +f 13244/27117/10017 13245/27118/10017 13249/27124/10017 13248/27123/10017 +f 13246/27120/10018 13247/27122/10018 13233/27103/10018 13229/27098/10018 +f 13247/27122/10019 13248/27123/10019 13237/27107/10019 13233/27103/10019 +f 13248/27123/10020 13249/27124/10020 13238/27108/10020 13237/27107/10020 +f 13226/27093/10021 13250/27126/10021 13254/27131/10021 13253/27130/10021 +f 13250/27126/10022 13251/27127/10022 13255/27132/10022 13254/27131/10022 +f 13251/27127/10023 13252/27128/10023 13256/27134/10023 13255/27132/10023 +f 13253/27130/10024 13254/27131/10024 13258/27136/10024 13257/27135/10024 +f 13254/27131/10025 13255/27132/10025 13259/27137/10025 13258/27136/10025 +f 13255/27132/10026 13256/27134/10026 13260/27139/10026 13259/27137/10026 +f 13257/27135/10027 13258/27136/10027 13245/27119/10027 13241/27112/10027 +f 13258/27136/10028 13259/27137/10028 13249/27125/10028 13245/27119/10028 +f 13259/27137/10029 13260/27139/10029 13238/27109/10029 13249/27125/10029 +f 13261/27140/10030 13264/27143/10030 13268/27147/10030 13267/27146/10030 +f 13264/27143/10031 13265/27144/10031 13269/27148/10031 13268/27147/10031 +f 13265/27144/10032 13266/27145/10032 13270/27149/10032 13269/27148/10032 +f 13267/27146/10033 13268/27147/10033 13272/27151/10033 13271/27150/10033 +f 13268/27147/10034 13269/27148/10034 13273/27152/10034 13272/27151/10034 +f 13269/27148/10035 13270/27149/10035 13274/27153/10035 13273/27152/10035 +f 13271/27150/10036 13272/27151/10036 13293/27178/10036 13289/27174/10036 +f 13272/27151/10037 13273/27152/10037 13297/27183/10037 13293/27178/10037 +f 13273/27152/10038 13274/27153/10038 13275/27154/10038 13297/27183/10038 +f 13262/27141/10039 13276/27157/10039 13280/27162/10039 13279/27161/10039 +f 13276/27157/10040 13277/27158/10040 13281/27163/10040 13280/27162/10040 +f 13277/27158/10041 13278/27160/10041 13282/27164/10041 13281/27163/10041 +f 13279/27161/10042 13280/27162/10042 13284/27167/10042 13283/27166/10042 +f 13280/27162/10043 13281/27163/10043 13285/27168/10043 13284/27167/10043 +f 13281/27163/10044 13282/27164/10044 13286/27169/10044 13285/27168/10044 +f 13283/27166/10045 13284/27167/10045 13270/27149/10045 13266/27145/10045 +f 13284/27167/10046 13285/27168/10046 13274/27153/10046 13270/27149/10046 +f 13285/27168/10047 13286/27169/10047 13275/27155/10047 13274/27153/10047 +f 13341/27248/10048 13335/27241/10048 13385/27302/10048 13384/27301/10048 +f 13287/27171/10049 13288/27172/10049 13292/27177/10049 13291/27176/10049 +f 13288/27172/10050 13289/27173/10050 13293/27179/10050 13292/27177/10050 +f 13290/27175/10051 13291/27176/10051 13295/27181/10051 13294/27180/10051 +f 13291/27176/10052 13292/27177/10052 13296/27182/10052 13295/27181/10052 +f 13292/27177/10053 13293/27179/10053 13297/27184/10053 13296/27182/10053 +f 13294/27180/10054 13295/27181/10054 13282/27165/10054 13278/27159/10054 +f 13295/27181/10055 13296/27182/10055 13286/27170/10055 13282/27165/10055 +f 13296/27182/10056 13297/27184/10056 13275/27156/10056 13286/27170/10056 +f 13298/27186/10057 13301/27190/10057 13305/27199/10057 13304/27198/10057 +f 13301/27190/10058 13302/27192/10058 13306/27200/10058 13305/27199/10058 +f 13302/27192/10059 13303/27194/10059 13307/27201/10059 13306/27200/10059 +f 13304/27198/10060 13305/27199/10060 13309/27204/10060 13308/27203/10060 +f 13305/27199/10061 13306/27200/10061 13310/27205/10061 13309/27204/10061 +f 13306/27200/10062 13307/27201/10062 13311/27206/10062 13310/27205/10062 +f 13308/27203/10063 13309/27204/10063 13330/27234/10063 13326/27230/10063 +f 13309/27204/10064 13310/27205/10064 13334/27239/10064 13330/27234/10064 +f 13310/27205/10065 13311/27206/10065 13312/27208/10065 13334/27239/10065 +f 13299/27188/10066 13313/27211/10066 13317/27217/10066 13316/27215/10066 +f 13313/27211/10067 13314/27212/10067 13318/27218/10067 13317/27217/10067 +f 13314/27212/10068 13315/27214/10068 13319/27219/10068 13318/27218/10068 +f 13316/27215/10069 13317/27217/10069 13321/27223/10069 13320/27221/10069 +f 13317/27217/10070 13318/27218/10070 13322/27224/10070 13321/27223/10070 +f 13318/27218/10071 13319/27219/10071 13323/27225/10071 13322/27224/10071 +f 13320/27221/10072 13321/27223/10072 13307/27202/10072 13303/27195/10072 +f 13321/27223/10073 13322/27224/10073 13311/27207/10073 13307/27202/10073 +f 13322/27224/10074 13323/27225/10074 13312/27209/10074 13311/27207/10074 +f 13300/27189/10075 13324/27227/10075 13328/27232/10075 13327/27231/10075 +f 13324/27227/10076 13325/27228/10076 13329/27233/10076 13328/27232/10076 +f 13325/27228/10077 13326/27229/10077 13330/27235/10077 13329/27233/10077 +f 13327/27231/10078 13328/27232/10078 13332/27237/10078 13331/27236/10078 +f 13328/27232/10079 13329/27233/10079 13333/27238/10079 13332/27237/10079 +f 13329/27233/10080 13330/27235/10080 13334/27240/10080 13333/27238/10080 +f 13331/27236/10081 13332/27237/10081 13319/27220/10081 13315/27213/10081 +f 13332/27237/10082 13333/27238/10082 13323/27226/10082 13319/27220/10082 +f 13333/27238/10083 13334/27240/10083 13312/27210/10083 13323/27226/10083 +f 13119/26968/9894 13113/26961/9894 13373/27290/9894 13372/27289/9894 +f 13338/27244/10084 13339/27245/10084 13343/27250/10084 13342/27249/10084 +f 13339/27245/10085 13340/27246/10085 13344/27251/10085 13343/27250/10085 +f 13341/27248/10086 13342/27249/10086 13346/27254/10086 13345/27253/10086 +f 13342/27249/10087 13343/27250/10087 13347/27255/10087 13346/27254/10087 +f 13343/27250/10088 13344/27251/10088 13348/27256/10088 13347/27255/10088 +f 13345/27253/10089 13346/27254/10089 13367/27282/10089 13363/27277/10089 +f 13346/27254/10090 13347/27255/10090 13371/27287/10090 13367/27282/10090 +f 13347/27255/10091 13348/27256/10091 13349/27258/10091 13371/27287/10091 +f 13336/27242/10092 13350/27261/10092 13354/27266/10092 13353/27265/10092 +f 13350/27261/10093 13351/27262/10093 13355/27267/10093 13354/27266/10093 +f 13351/27262/10094 13352/27263/10094 13356/27268/10094 13355/27267/10094 +f 13353/27265/10095 13354/27266/10095 13358/27271/10095 13357/27270/10095 +f 13354/27266/10096 13355/27267/10096 13359/27272/10096 13358/27271/10096 +f 13355/27267/10097 13356/27268/10097 13360/27273/10097 13359/27272/10097 +f 13357/27270/10098 13358/27271/10098 13344/27252/10098 13340/27247/10098 +f 13358/27271/10099 13359/27272/10099 13348/27257/10099 13344/27252/10099 +f 13359/27272/10100 13360/27273/10100 13349/27259/10100 13348/27257/10100 +f 13337/27243/10101 13361/27275/10101 13365/27280/10101 13364/27279/10101 +f 13361/27275/10102 13362/27276/10102 13366/27281/10102 13365/27280/10102 +f 13362/27276/10103 13363/27278/10103 13367/27283/10103 13366/27281/10103 +f 13364/27279/10104 13365/27280/10104 13369/27285/10104 13368/27284/10104 +f 13365/27280/10105 13366/27281/10105 13370/27286/10105 13369/27285/10105 +f 13366/27281/10106 13367/27283/10106 13371/27288/10106 13370/27286/10106 +f 13368/27284/10107 13369/27285/10107 13356/27269/10107 13352/27264/10107 +f 13369/27285/10108 13370/27286/10108 13360/27274/10108 13356/27269/10108 +f 13370/27286/10109 13371/27288/10109 13349/27260/10109 13360/27274/10109 +f 13263/27142/10110 13335/27241/10110 13341/27248/10110 13287/27171/10110 +f 13287/27171/10111 13341/27248/10111 13345/27253/10111 13288/27172/10111 +f 13288/27172/10112 13345/27253/10112 13363/27277/10112 13289/27173/10112 +f 13289/27174/10113 13363/27278/10113 13362/27276/10113 13271/27150/10113 +f 13271/27150/10114 13362/27276/10114 13361/27275/10114 13267/27146/10114 +f 13267/27146/10115 13361/27275/10115 13337/27243/10115 13261/27140/10115 +f 13113/26961/10116 13263/27142/10116 13290/27175/10116 13116/26964/10116 +f 13116/26964/10117 13290/27175/10117 13294/27180/10117 13117/26965/10117 +f 13117/26965/10118 13294/27180/10118 13278/27159/10118 13118/26966/10118 +f 13118/26967/10119 13278/27160/10119 13277/27158/10119 13135/26986/10119 +f 13135/26986/10120 13277/27158/10120 13276/27157/10120 13131/26982/10120 +f 13131/26982/10121 13276/27157/10121 13262/27141/10121 13114/26962/10121 +f 13078/26917/10122 13115/26963/10122 13142/26993/10122 13102/26947/10122 +f 13102/26947/10123 13142/26993/10123 13146/26997/10123 13103/26949/10123 +f 13103/26949/10124 13146/26997/10124 13130/26981/10124 13104/26951/10124 +f 13104/26951/10125 13130/26981/10125 13129/26980/10125 13086/26929/10125 +f 13086/26929/10126 13129/26980/10126 13128/26979/10126 13082/26923/10126 +f 13082/26923/10127 13128/26979/10127 13114/26962/10127 13076/26914/10127 +f 13336/27242/10128 13299/27187/10128 13316/27216/10128 13350/27261/10128 +f 13350/27261/10129 13316/27216/10129 13320/27222/10129 13351/27262/10129 +f 13351/27262/10130 13320/27222/10130 13303/27196/10130 13352/27263/10130 +f 13352/27264/10131 13303/27197/10131 13302/27193/10131 13368/27284/10131 +f 13368/27284/10132 13302/27193/10132 13301/27191/10132 13364/27279/10132 +f 13364/27279/10133 13301/27191/10133 13298/27185/10133 13337/27243/10133 +f 13152/27004/10134 13188/27050/10134 13205/27068/10134 13176/27036/10134 +f 13176/27036/10135 13205/27068/10135 13209/27073/10135 13177/27038/10135 +f 13177/27038/10136 13209/27073/10136 13192/27054/10136 13178/27040/10136 +f 13178/27040/10137 13192/27054/10137 13191/27053/10137 13160/27016/10137 +f 13160/27016/10138 13191/27053/10138 13190/27052/10138 13156/27011/10138 +f 13156/27011/10139 13190/27052/10139 13187/27049/10139 13150/27002/10139 +f 13224/27090/10140 13262/27141/10140 13279/27161/10140 13227/27095/10140 +f 13227/27095/10141 13279/27161/10141 13283/27166/10141 13228/27097/10141 +f 13228/27097/10142 13283/27166/10142 13266/27145/10142 13229/27099/10142 +f 13229/27099/10143 13266/27145/10143 13265/27144/10143 13246/27121/10143 +f 13246/27121/10144 13265/27144/10144 13264/27143/10144 13242/27115/10144 +f 13242/27115/10145 13264/27143/10145 13261/27140/10145 13225/27091/10145 +f 13151/27003/10146 13300/27189/10146 13327/27231/10146 13165/27021/10146 +f 13165/27021/10147 13327/27231/10147 13331/27236/10147 13166/27022/10147 +f 13166/27022/10148 13331/27236/10148 13315/27213/10148 13167/27023/10148 +f 13167/27024/10149 13315/27214/10149 13314/27212/10149 13183/27045/10149 +f 13183/27045/10150 13314/27212/10150 13313/27211/10150 13179/27041/10150 +f 13179/27041/10151 13313/27211/10151 13299/27188/10151 13152/27005/10151 +f 13077/26915/10152 13151/27003/10152 13168/27025/10152 13091/26935/10152 +f 13091/26935/10153 13168/27025/10153 13172/27030/10153 13092/26936/10153 +f 13092/26936/10154 13172/27030/10154 13155/27009/10154 13093/26937/10154 +f 13093/26937/10155 13155/27009/10155 13154/27008/10155 13109/26957/10155 +f 13109/26957/10156 13154/27008/10156 13153/27006/10156 13105/26952/10156 +f 13105/26953/10157 13153/27007/10157 13150/27002/10157 13078/26917/10157 +f 13335/27241/10158 13189/27051/10158 13216/27081/10158 13338/27244/10158 +f 13338/27244/10159 13216/27081/10159 13220/27085/10159 13339/27245/10159 +f 13339/27245/10160 13220/27085/10160 13204/27066/10160 13340/27246/10160 +f 13340/27247/10161 13204/27067/10161 13203/27065/10161 13357/27270/10161 +f 13357/27270/10162 13203/27065/10162 13202/27064/10162 13353/27265/10162 +f 13353/27265/10163 13202/27064/10163 13188/27050/10163 13336/27242/10163 +f 13300/27189/10164 13226/27093/10164 13253/27130/10164 13324/27227/10164 +f 13324/27227/10165 13253/27130/10165 13257/27135/10165 13325/27228/10165 +f 13325/27228/10166 13257/27135/10166 13241/27112/10166 13326/27229/10166 +f 13326/27230/10167 13241/27113/10167 13240/27111/10167 13308/27203/10167 +f 13308/27203/10168 13240/27111/10168 13239/27110/10168 13304/27198/10168 +f 13304/27198/10169 13239/27110/10169 13225/27092/10169 13298/27186/10169 +f 13226/27093/10170 13077/26915/10170 13094/26938/10170 13250/27126/10170 +f 13250/27126/10171 13094/26938/10171 13098/26942/10171 13251/27127/10171 +f 13251/27127/10172 13098/26942/10172 13081/26920/10172 13252/27128/10172 +f 13252/27129/10173 13081/26921/10173 13080/26919/10173 13234/27104/10173 +f 13234/27104/10174 13080/26919/10174 13079/26918/10174 13230/27100/10174 +f 13230/27100/10175 13079/26918/10175 13076/26913/10175 13224/27089/10175 +f 13189/27051/10176 13113/26961/10176 13119/26968/10176 13213/27078/10176 +f 13213/27078/10177 13119/26968/10177 13123/26973/10177 13214/27079/10177 +f 13214/27079/10178 13123/26973/10178 13141/26992/10178 13215/27080/10178 +f 13215/27080/10179 13141/26992/10179 13140/26991/10179 13197/27059/10179 +f 13197/27059/10180 13140/26991/10180 13139/26990/10180 13193/27055/10180 +f 13193/27055/10181 13139/26990/10181 13115/26963/10181 13187/27049/10181 +f 13262/27141/10048 13224/27090/10048 13076/26914/10048 13114/26962/10048 +f 13373/27290/10182 13374/27291/10182 13375/27292/10182 13372/27289/10182 +f 13377/27294/10183 13378/27295/10183 13379/27296/10183 13376/27293/10183 +f 13381/27298/10184 13382/27299/10184 13383/27300/10184 13380/27297/10184 +f 13385/27302/10185 13386/27303/10185 13387/27304/10185 13384/27301/10185 +f 13113/26961/9893 13116/26964/9893 13374/27291/9893 13373/27290/9893 +f 13335/27241/9896 13338/27244/9896 13386/27303/9896 13385/27302/9896 +f 13189/27051/10048 13213/27078/10048 13378/27295/10048 13377/27294/10048 +f 13263/27142/9894 13287/27171/9894 13382/27299/9894 13381/27298/9894 +f 13116/26964/10186 13120/26969/10186 13375/27292/10186 13374/27291/10186 +f 13338/27244/10187 13342/27249/10187 13387/27304/10187 13386/27303/10187 +f 13213/27078/10188 13217/27082/10188 13379/27296/10188 13378/27295/10188 +f 13287/27171/10189 13291/27176/10189 13383/27300/10189 13382/27299/10189 +f 13120/26969/10190 13119/26968/10190 13372/27289/10190 13375/27292/10190 +f 13342/27249/10191 13341/27248/10191 13384/27301/10191 13387/27304/10191 +f 13217/27082/10192 13216/27081/10192 13376/27293/10192 13379/27296/10192 +f 13291/27176/10193 13290/27175/10193 13380/27297/10193 13383/27300/10193 +o Cube.006 +v -10.852302 1.195763 7.142038 +v -10.852302 2.267463 7.142038 +v -10.852302 1.195763 6.831701 +v -10.852302 2.267463 6.831701 +v -8.694863 1.195763 7.142038 +v -8.694863 2.267463 7.142038 +v -8.694863 1.195763 6.831701 +v -8.694863 2.267463 6.831701 +vn -1.0787 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1552 +vn 1.0787 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.1552 +vn -0.0000 -0.5359 -0.0000 +vn -0.0000 0.5358 -0.0000 +vt 0.375000 0.000000 +vt 0.375000 1.000000 +vt 0.125000 0.750000 +vt 0.625000 0.000000 +vt 0.625000 1.000000 +vt 0.875000 0.750000 +vt 0.375000 0.250000 +vt 0.503333 0.375000 +vt 0.125000 0.500000 +vt 0.625000 0.250000 +vt 0.503333 0.375000 +vt 0.875000 0.500000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.503333 0.375000 +vt 0.375000 0.500000 +vt 0.503333 0.375000 +vt 0.625000 0.500000 +s 0 +usemtl CabnetDoors +f 13388/27305/10194 13389/27308/10194 13391/27314/10194 13390/27311/10194 +f 13390/27312/10195 13391/27315/10195 13395/27321/10195 13394/27319/10195 +f 13394/27320/10196 13395/27322/10196 13393/27318/10196 13392/27317/10196 +f 13392/27317/10197 13393/27318/10197 13389/27309/10197 13388/27306/10197 +f 13390/27313/10198 13394/27320/10198 13392/27317/10198 13388/27307/10198 +f 13395/27322/10199 13391/27316/10199 13389/27310/10199 13393/27318/10199 +o Cube.004 +v -6.841367 1.195763 7.142038 +v -6.841367 2.267463 7.142038 +v -6.841367 1.195763 6.831701 +v -6.841367 2.267463 6.831701 +v -4.683928 1.195763 7.142038 +v -4.683928 2.267463 7.142038 +v -4.683928 1.195763 6.831701 +v -4.683928 2.267463 6.831701 +vn -1.0787 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1552 +vn 1.0787 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.1552 +vn -0.0000 -0.5359 -0.0000 +vn -0.0000 0.5358 -0.0000 +vt 0.375000 0.000000 +vt 0.375000 1.000000 +vt 0.125000 0.750000 +vt 0.625000 0.000000 +vt 0.625000 1.000000 +vt 0.875000 0.750000 +vt 0.375000 0.250000 +vt 0.503333 0.375000 +vt 0.125000 0.500000 +vt 0.625000 0.250000 +vt 0.503333 0.375000 +vt 0.875000 0.500000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.503333 0.375000 +vt 0.375000 0.500000 +vt 0.503333 0.375000 +vt 0.625000 0.500000 +s 0 +usemtl CabnetDoors.023 +f 13396/27323/10200 13397/27326/10200 13399/27332/10200 13398/27329/10200 +f 13398/27330/10201 13399/27333/10201 13403/27339/10201 13402/27337/10201 +f 13402/27338/10202 13403/27340/10202 13401/27336/10202 13400/27335/10202 +f 13400/27335/10203 13401/27336/10203 13397/27327/10203 13396/27324/10203 +f 13398/27331/10204 13402/27338/10204 13400/27335/10204 13396/27325/10204 +f 13403/27340/10205 13399/27334/10205 13397/27328/10205 13401/27336/10205 +o Top.008 +v -6.384461 0.737263 5.609548 +v -6.384461 0.749833 5.508623 +v -6.490153 0.737263 5.508623 +v -6.384461 0.740515 5.606111 +v -6.384461 0.743549 5.596021 +v -6.384461 0.746151 5.579988 +v -6.411807 0.737263 5.606111 +v -6.412667 0.740645 5.602019 +v -6.412207 0.743568 5.591815 +v -6.411639 0.745849 5.577620 +v -6.437316 0.737263 5.596022 +v -6.437506 0.740582 5.591750 +v -6.434806 0.743253 5.583197 +v -6.432591 0.745176 5.572162 +v -6.445483 0.744520 5.566892 +v -6.411807 0.749405 5.508623 +v -6.437316 0.748149 5.508623 +v -6.459197 0.746151 5.508623 +v -6.384461 0.749405 5.534735 +v -6.412900 0.748896 5.535557 +v -6.437478 0.747625 5.535117 +v -6.456650 0.745857 5.534575 +v -6.384461 0.748149 5.559093 +v -6.412366 0.747617 5.559275 +v -6.434831 0.746551 5.556697 +v -6.450994 0.745177 5.554582 +v -6.486555 0.737263 5.534735 +v -6.475988 0.737263 5.559093 +v -6.459197 0.737263 5.579988 +v -6.486555 0.740515 5.508623 +v -6.482270 0.740617 5.535779 +v -6.471583 0.740563 5.559248 +v -6.456717 0.740495 5.577555 +v -6.475988 0.743549 5.508623 +v -6.471515 0.743572 5.535269 +v -6.462558 0.743250 5.556720 +v -6.451002 0.742987 5.572155 +v -6.342639 0.660944 5.508623 +v -6.384461 0.673515 5.609548 +v -6.490153 0.673515 5.508623 +v -6.342639 0.661372 5.534735 +v -6.384461 0.662629 5.559093 +v -6.384461 0.664626 5.579988 +v -6.411807 0.661372 5.508623 +v -6.412667 0.661882 5.535779 +v -6.412207 0.663153 5.559248 +v -6.411639 0.664921 5.577555 +v -6.437316 0.662629 5.508623 +v -6.437506 0.663161 5.535269 +v -6.434806 0.664226 5.556720 +v -6.432591 0.665601 5.572155 +v -6.445483 0.666257 5.566892 +v -6.411807 0.673515 5.606111 +v -6.437316 0.673515 5.596021 +v -6.459197 0.673515 5.579988 +v -6.384461 0.670263 5.606111 +v -6.412900 0.670160 5.602019 +v -6.437478 0.670215 5.591815 +v -6.456650 0.670282 5.577620 +v -6.384461 0.667229 5.596021 +v -6.412366 0.667206 5.591750 +v -6.434831 0.667527 5.583197 +v -6.450994 0.667790 5.572162 +v -6.486555 0.670263 5.508623 +v -6.475988 0.667229 5.508623 +v -6.459197 0.664626 5.508623 +v -6.486555 0.673515 5.534735 +v -6.482270 0.670133 5.535557 +v -6.471583 0.667209 5.535117 +v -6.456717 0.664929 5.534575 +v -6.475988 0.673515 5.559093 +v -6.471515 0.670196 5.559275 +v -6.462558 0.667524 5.556697 +v -6.451002 0.665602 5.554582 +v -6.490154 0.737263 4.996829 +v -6.384461 0.749833 4.996829 +v -6.384461 0.737263 4.895904 +v -6.486555 0.740515 4.996829 +v -6.475988 0.743549 4.996829 +v -6.459197 0.746151 4.996829 +v -6.486555 0.737263 4.970716 +v -6.482270 0.740645 4.969894 +v -6.471583 0.743568 4.970335 +v -6.456717 0.745849 4.970876 +v -6.475988 0.737263 4.946358 +v -6.471515 0.740582 4.946176 +v -6.462558 0.743253 4.948754 +v -6.451002 0.745176 4.950869 +v -6.445483 0.744520 4.938560 +v -6.384461 0.749405 4.970716 +v -6.384461 0.748149 4.946358 +v -6.384461 0.746151 4.925464 +v -6.411807 0.749405 4.996829 +v -6.412667 0.748896 4.969673 +v -6.412207 0.747625 4.946203 +v -6.411640 0.745857 4.927896 +v -6.437316 0.748149 4.996829 +v -6.437506 0.747617 4.970182 +v -6.434806 0.746551 4.948731 +v -6.432591 0.745177 4.933297 +v -6.411807 0.737263 4.899341 +v -6.437316 0.737263 4.909430 +v -6.459197 0.737263 4.925464 +v -6.384461 0.740515 4.899341 +v -6.412900 0.740617 4.903432 +v -6.437478 0.740563 4.913637 +v -6.456650 0.740495 4.927832 +v -6.384461 0.743549 4.909430 +v -6.412366 0.743572 4.913702 +v -6.434831 0.743250 4.922255 +v -6.450994 0.742987 4.933290 +v -6.490154 0.673515 4.996829 +v -6.384461 0.673515 4.895904 +v -6.342639 0.660944 4.996829 +v -6.486555 0.673515 4.970716 +v -6.475988 0.673515 4.946358 +v -6.459197 0.673515 4.925464 +v -6.486555 0.670263 4.996829 +v -6.482270 0.670160 4.969673 +v -6.471583 0.670215 4.946203 +v -6.456717 0.670282 4.927896 +v -6.475988 0.667229 4.996829 +v -6.471515 0.667206 4.970182 +v -6.462558 0.667527 4.948731 +v -6.451002 0.667790 4.933297 +v -6.445483 0.666257 4.938560 +v -6.384461 0.670263 4.899341 +v -6.384461 0.667229 4.909430 +v -6.384461 0.664626 4.925464 +v -6.411807 0.673515 4.899341 +v -6.412667 0.670133 4.903432 +v -6.412207 0.667209 4.913637 +v -6.411640 0.664929 4.927832 +v -6.437316 0.673515 4.909430 +v -6.437507 0.670196 4.913702 +v -6.434806 0.667524 4.922255 +v -6.432591 0.665602 4.933290 +v -6.411807 0.661372 4.996829 +v -6.437316 0.662629 4.996829 +v -6.459197 0.664626 4.996829 +v -6.342639 0.661372 4.970716 +v -6.412900 0.661882 4.969894 +v -6.437478 0.663153 4.970335 +v -6.456650 0.664921 4.970876 +v -6.384461 0.662629 4.946358 +v -6.412366 0.663161 4.946176 +v -6.434831 0.664226 4.948754 +v -6.450994 0.665601 4.950869 +v -5.848487 0.737263 5.609547 +v -5.742795 0.737263 5.508623 +v -5.848487 0.749833 5.508623 +v -5.821141 0.737263 5.606111 +v -5.795632 0.737263 5.596021 +v -5.773751 0.737263 5.579987 +v -5.848487 0.740515 5.606111 +v -5.820048 0.740617 5.602019 +v -5.795470 0.740563 5.591815 +v -5.776298 0.740495 5.577620 +v -5.848487 0.743549 5.596021 +v -5.820582 0.743572 5.591750 +v -5.798118 0.743250 5.583197 +v -5.781954 0.742987 5.572162 +v -5.787466 0.744520 5.566892 +v -5.746394 0.740515 5.508623 +v -5.756960 0.743549 5.508623 +v -5.773751 0.746151 5.508623 +v -5.746394 0.737263 5.534735 +v -5.750679 0.740645 5.535557 +v -5.761365 0.743568 5.535117 +v -5.776231 0.745849 5.534575 +v -5.756960 0.737263 5.559093 +v -5.761433 0.740582 5.559275 +v -5.770390 0.743253 5.556697 +v -5.781947 0.745176 5.554582 +v -5.848487 0.749405 5.534735 +v -5.848487 0.748149 5.559093 +v -5.848487 0.746151 5.579987 +v -5.821141 0.749405 5.508623 +v -5.820281 0.748896 5.535779 +v -5.820741 0.747625 5.559248 +v -5.821309 0.745857 5.577555 +v -5.795632 0.748149 5.508623 +v -5.795442 0.747617 5.535269 +v -5.798142 0.746551 5.556720 +v -5.800357 0.745177 5.572155 +v -5.742795 0.673515 5.508623 +v -5.848487 0.673515 5.609547 +v -5.890309 0.660944 5.508623 +v -5.746394 0.673515 5.534735 +v -5.756960 0.673515 5.559093 +v -5.773751 0.673515 5.579987 +v -5.746394 0.670263 5.508623 +v -5.750679 0.670160 5.535779 +v -5.761365 0.670215 5.559248 +v -5.776231 0.670282 5.577555 +v -5.756960 0.667229 5.508623 +v -5.761433 0.667206 5.535269 +v -5.770390 0.667527 5.556720 +v -5.781947 0.667790 5.572155 +v -5.787466 0.666257 5.566892 +v -5.848487 0.670263 5.606111 +v -5.848487 0.667229 5.596021 +v -5.848487 0.664626 5.579987 +v -5.821141 0.673515 5.606111 +v -5.820281 0.670133 5.602019 +v -5.820741 0.667209 5.591815 +v -5.821309 0.664929 5.577620 +v -5.795632 0.673515 5.596021 +v -5.795442 0.670196 5.591750 +v -5.798142 0.667524 5.583197 +v -5.800357 0.665602 5.572162 +v -5.821141 0.661372 5.508623 +v -5.795632 0.662629 5.508623 +v -5.773751 0.664626 5.508623 +v -5.890309 0.661372 5.534735 +v -5.820048 0.661882 5.535557 +v -5.795470 0.663153 5.535117 +v -5.776298 0.664921 5.534575 +v -5.848487 0.662629 5.559093 +v -5.820582 0.663161 5.559275 +v -5.798118 0.664226 5.556697 +v -5.781954 0.665601 5.554582 +v -5.742795 0.737263 4.996828 +v -5.848487 0.737263 4.895904 +v -5.848487 0.749833 4.996828 +v -5.746394 0.737263 4.970716 +v -5.756960 0.737263 4.946358 +v -5.773751 0.737263 4.925464 +v -5.746394 0.740515 4.996828 +v -5.750679 0.740617 4.969672 +v -5.761365 0.740563 4.946203 +v -5.776231 0.740495 4.927896 +v -5.756960 0.743549 4.996828 +v -5.761433 0.743572 4.970182 +v -5.770390 0.743250 4.948731 +v -5.781947 0.742987 4.933296 +v -5.787466 0.744520 4.938560 +v -5.848487 0.740515 4.899340 +v -5.848487 0.743549 4.909430 +v -5.848487 0.746151 4.925464 +v -5.821142 0.737263 4.899340 +v -5.820281 0.740645 4.903432 +v -5.820742 0.743568 4.913636 +v -5.821309 0.745849 4.927832 +v -5.795632 0.737263 4.909430 +v -5.795442 0.740582 4.913702 +v -5.798142 0.743253 4.922254 +v -5.800357 0.745176 4.933290 +v -5.821142 0.749405 4.996828 +v -5.795632 0.748149 4.996828 +v -5.773751 0.746151 4.996828 +v -5.848487 0.749405 4.970716 +v -5.820048 0.748896 4.969894 +v -5.795470 0.747625 4.970334 +v -5.776299 0.745857 4.970876 +v -5.848487 0.748149 4.946358 +v -5.820582 0.747617 4.946176 +v -5.798118 0.746551 4.948754 +v -5.781954 0.745177 4.950869 +v -5.890309 0.660944 4.996828 +v -5.848487 0.673515 4.895904 +v -5.742795 0.673515 4.996828 +v -5.890309 0.661372 4.970716 +v -5.848487 0.662629 4.946358 +v -5.848487 0.664626 4.925464 +v -5.821142 0.661372 4.996828 +v -5.820281 0.661882 4.969672 +v -5.820742 0.663153 4.946203 +v -5.821309 0.664921 4.927896 +v -5.795632 0.662629 4.996828 +v -5.795442 0.663161 4.970182 +v -5.798142 0.664226 4.948731 +v -5.800357 0.665601 4.933296 +v -5.787466 0.666257 4.938560 +v -5.821142 0.673515 4.899340 +v -5.795632 0.673515 4.909430 +v -5.773751 0.673515 4.925464 +v -5.848487 0.670263 4.899340 +v -5.820048 0.670160 4.903432 +v -5.795470 0.670215 4.913636 +v -5.776299 0.670282 4.927832 +v -5.848487 0.667229 4.909430 +v -5.820582 0.667206 4.913702 +v -5.798118 0.667527 4.922254 +v -5.781954 0.667790 4.933290 +v -5.746394 0.670263 4.996828 +v -5.756960 0.667229 4.996828 +v -5.773751 0.664626 4.996828 +v -5.746394 0.673515 4.970716 +v -5.750679 0.670133 4.969894 +v -5.761365 0.667209 4.970334 +v -5.776231 0.664929 4.970876 +v -5.756960 0.673515 4.946358 +v -5.761433 0.670196 4.946176 +v -5.770390 0.667524 4.948754 +v -5.781947 0.665602 4.950869 +v -6.411807 -0.015018 5.508623 +v -6.342639 -0.015446 5.508623 +v -6.342639 -0.015018 5.534735 +v -6.412667 -0.014508 5.535779 +v -6.342639 -0.015018 4.970716 +v -6.342639 -0.015446 4.996829 +v -6.411807 -0.015018 4.996829 +v -6.412900 -0.014508 4.969894 +v -5.890309 -0.015018 5.534735 +v -5.890309 -0.015446 5.508623 +v -5.821141 -0.015018 5.508623 +v -5.820048 -0.014508 5.535557 +v -5.821142 -0.015018 4.996828 +v -5.890309 -0.015446 4.996828 +v -5.890309 -0.015018 4.970716 +v -5.820281 -0.014508 4.969672 +vn -0.0000 -0.0444 -0.0000 +vn 0.3737 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.3568 +vn -0.0000 0.0444 -0.0000 +vn -0.3737 -0.0000 -0.0000 +vn -0.0510 0.0061 0.3501 +vn -0.0497 0.0173 0.3254 +vn -0.0466 0.0270 0.2801 +vn -0.1448 0.0060 0.3254 +vn -0.1412 0.0168 0.3016 +vn -0.1339 0.0256 0.2619 +vn -0.2268 0.0056 0.2801 +vn -0.2158 0.0159 0.2617 +vn -0.1981 0.0236 0.2362 +vn -0.0510 0.0436 0.0487 +vn -0.1451 0.0405 0.0474 +vn -0.2268 0.0349 0.0445 +vn -0.0503 0.0405 0.1383 +vn -0.1414 0.0376 0.1348 +vn -0.2156 0.0326 0.1279 +vn -0.0468 0.0349 0.2165 +vn -0.1341 0.0326 0.2061 +vn -0.1980 0.0294 0.1891 +vn -0.3666 0.0061 0.0487 +vn -0.3408 0.0059 0.1385 +vn -0.2933 0.0055 0.2166 +vn -0.3408 0.0172 0.0480 +vn -0.3158 0.0168 0.1350 +vn -0.2742 0.0159 0.2059 +vn -0.2933 0.0270 0.0447 +vn -0.2740 0.0257 0.1280 +vn -0.2474 0.0236 0.1891 +vn -0.0296 -0.0418 0.1189 +vn -0.0466 -0.0349 0.2166 +vn -0.1448 -0.0405 0.0480 +vn -0.1412 -0.0376 0.1350 +vn -0.1339 -0.0326 0.2059 +vn -0.2268 -0.0349 0.0447 +vn -0.2158 -0.0326 0.1280 +vn -0.1981 -0.0294 0.1891 +vn -0.0510 -0.0061 0.3501 +vn -0.1451 -0.0059 0.3254 +vn -0.2268 -0.0055 0.2801 +vn -0.0503 -0.0172 0.3254 +vn -0.1414 -0.0168 0.3016 +vn -0.2156 -0.0159 0.2619 +vn -0.0468 -0.0270 0.2801 +vn -0.1341 -0.0257 0.2617 +vn -0.1980 -0.0236 0.2362 +vn -0.3666 -0.0061 0.0487 +vn -0.3408 -0.0173 0.0474 +vn -0.2933 -0.0270 0.0445 +vn -0.3408 -0.0060 0.1383 +vn -0.3158 -0.0168 0.1348 +vn -0.2742 -0.0256 0.1279 +vn -0.2933 -0.0056 0.2165 +vn -0.2740 -0.0159 0.2061 +vn -0.2474 -0.0236 0.1891 +vn -0.3666 0.0061 -0.0487 +vn -0.3408 0.0173 -0.0474 +vn -0.2933 0.0270 -0.0445 +vn -0.3408 0.0060 -0.1383 +vn -0.3158 0.0168 -0.1348 +vn -0.2742 0.0256 -0.1279 +vn -0.2933 0.0056 -0.2165 +vn -0.2740 0.0159 -0.2061 +vn -0.2474 0.0236 -0.1891 +vn -0.0510 0.0436 -0.0487 +vn -0.0497 0.0405 -0.1385 +vn -0.0466 0.0349 -0.2166 +vn -0.1448 0.0405 -0.0480 +vn -0.1412 0.0376 -0.1350 +vn -0.1339 0.0326 -0.2059 +vn -0.2268 0.0349 -0.0447 +vn -0.2158 0.0326 -0.1280 +vn -0.1981 0.0294 -0.1891 +vn -0.0510 0.0061 -0.3501 +vn -0.1451 0.0059 -0.3254 +vn -0.2268 0.0055 -0.2801 +vn -0.0503 0.0172 -0.3254 +vn -0.1414 0.0168 -0.3016 +vn -0.2156 0.0159 -0.2619 +vn -0.0468 0.0270 -0.2801 +vn -0.1341 0.0257 -0.2617 +vn -0.1980 0.0236 -0.2362 +vn -0.3666 -0.0061 -0.0487 +vn -0.3408 -0.0059 -0.1385 +vn -0.2933 -0.0055 -0.2166 +vn -0.3408 -0.0172 -0.0480 +vn -0.3158 -0.0168 -0.1350 +vn -0.2742 -0.0159 -0.2059 +vn -0.2933 -0.0270 -0.0447 +vn -0.2740 -0.0257 -0.1280 +vn -0.2474 -0.0236 -0.1891 +vn -0.0510 -0.0061 -0.3501 +vn -0.0497 -0.0173 -0.3254 +vn -0.0466 -0.0270 -0.2801 +vn -0.1448 -0.0060 -0.3254 +vn -0.1412 -0.0168 -0.3016 +vn -0.1339 -0.0256 -0.2619 +vn -0.2268 -0.0056 -0.2801 +vn -0.2158 -0.0159 -0.2617 +vn -0.1981 -0.0236 -0.2362 +vn -0.1451 -0.0405 -0.0474 +vn -0.2268 -0.0349 -0.0445 +vn -0.0300 -0.0418 -0.1185 +vn -0.1414 -0.0376 -0.1348 +vn -0.2156 -0.0326 -0.1279 +vn -0.0468 -0.0349 -0.2165 +vn -0.1341 -0.0326 -0.2061 +vn -0.1980 -0.0294 -0.1891 +vn 0.0510 0.0061 0.3501 +vn 0.1451 0.0059 0.3254 +vn 0.2268 0.0055 0.2801 +vn 0.0503 0.0172 0.3254 +vn 0.1414 0.0168 0.3016 +vn 0.2156 0.0159 0.2619 +vn 0.0468 0.0270 0.2801 +vn 0.1341 0.0257 0.2617 +vn 0.1980 0.0236 0.2362 +vn 0.3666 0.0061 0.0487 +vn 0.3408 0.0173 0.0474 +vn 0.2933 0.0270 0.0445 +vn 0.3408 0.0060 0.1383 +vn 0.3158 0.0168 0.1348 +vn 0.2742 0.0256 0.1279 +vn 0.2933 0.0056 0.2165 +vn 0.2740 0.0159 0.2061 +vn 0.2474 0.0236 0.1891 +vn 0.0510 0.0436 0.0487 +vn 0.0497 0.0405 0.1385 +vn 0.0466 0.0349 0.2166 +vn 0.1448 0.0405 0.0480 +vn 0.1412 0.0376 0.1350 +vn 0.1339 0.0326 0.2059 +vn 0.2268 0.0349 0.0447 +vn 0.2158 0.0326 0.1280 +vn 0.1981 0.0294 0.1891 +vn 0.3666 -0.0061 0.0487 +vn 0.3408 -0.0059 0.1385 +vn 0.2933 -0.0055 0.2166 +vn 0.3408 -0.0172 0.0480 +vn 0.3158 -0.0168 0.1350 +vn 0.2742 -0.0159 0.2059 +vn 0.2933 -0.0270 0.0447 +vn 0.2740 -0.0257 0.1280 +vn 0.2474 -0.0236 0.1891 +vn 0.0510 -0.0061 0.3501 +vn 0.0497 -0.0173 0.3254 +vn 0.0466 -0.0270 0.2801 +vn 0.1448 -0.0060 0.3254 +vn 0.1412 -0.0168 0.3016 +vn 0.1339 -0.0256 0.2619 +vn 0.2268 -0.0056 0.2801 +vn 0.2158 -0.0159 0.2617 +vn 0.1981 -0.0236 0.2362 +vn -0.0000 -0.0000 0.3568 +vn 0.1451 -0.0405 0.0474 +vn 0.2268 -0.0349 0.0445 +vn 0.0300 -0.0418 0.1185 +vn 0.1414 -0.0376 0.1348 +vn 0.2156 -0.0326 0.1279 +vn 0.0468 -0.0349 0.2165 +vn 0.1341 -0.0326 0.2061 +vn 0.1980 -0.0294 0.1891 +vn 0.3666 0.0061 -0.0487 +vn 0.3408 0.0059 -0.1385 +vn 0.2933 0.0055 -0.2166 +vn 0.3408 0.0172 -0.0480 +vn 0.3158 0.0168 -0.1350 +vn 0.2742 0.0159 -0.2059 +vn 0.2933 0.0270 -0.0447 +vn 0.2740 0.0257 -0.1280 +vn 0.2474 0.0236 -0.1891 +vn 0.0510 0.0061 -0.3501 +vn 0.0497 0.0173 -0.3254 +vn 0.0466 0.0270 -0.2801 +vn 0.1448 0.0060 -0.3254 +vn 0.1412 0.0168 -0.3016 +vn 0.1339 0.0256 -0.2619 +vn 0.2268 0.0056 -0.2801 +vn 0.2158 0.0159 -0.2617 +vn 0.1981 0.0236 -0.2362 +vn 0.0510 0.0436 -0.0487 +vn 0.1451 0.0405 -0.0474 +vn 0.2268 0.0349 -0.0445 +vn 0.0503 0.0405 -0.1383 +vn 0.1414 0.0376 -0.1348 +vn 0.2156 0.0326 -0.1279 +vn 0.0468 0.0349 -0.2165 +vn 0.1341 0.0326 -0.2061 +vn 0.1980 0.0294 -0.1891 +vn 0.0296 -0.0418 -0.1189 +vn 0.0466 -0.0349 -0.2166 +vn 0.1448 -0.0405 -0.0480 +vn 0.1412 -0.0376 -0.1350 +vn 0.1339 -0.0326 -0.2059 +vn 0.2268 -0.0349 -0.0447 +vn 0.2158 -0.0326 -0.1280 +vn 0.1981 -0.0294 -0.1891 +vn 0.0510 -0.0061 -0.3501 +vn 0.1451 -0.0059 -0.3254 +vn 0.2268 -0.0055 -0.2801 +vn 0.0503 -0.0172 -0.3254 +vn 0.1414 -0.0168 -0.3016 +vn 0.2156 -0.0159 -0.2619 +vn 0.0468 -0.0270 -0.2801 +vn 0.1341 -0.0257 -0.2617 +vn 0.1980 -0.0236 -0.2362 +vn 0.3666 -0.0061 -0.0487 +vn 0.3408 -0.0173 -0.0474 +vn 0.2933 -0.0270 -0.0445 +vn 0.3408 -0.0060 -0.1383 +vn 0.3158 -0.0168 -0.1348 +vn 0.2742 -0.0256 -0.1279 +vn 0.2933 -0.0056 -0.2165 +vn 0.2740 -0.0159 -0.2061 +vn 0.2474 -0.0236 -0.1891 +vn 0.0194 -0.0444 -0.0000 +vn 0.1430 -0.0411 -0.0000 +vn 0.2275 -0.0353 -0.0000 +vn 0.2964 -0.0271 -0.0000 +vn 0.3452 -0.0170 -0.0000 +vn 0.3705 -0.0058 -0.0000 +vn -0.0000 -0.0441 0.0466 +vn -0.0000 -0.0411 0.1366 +vn -0.0000 -0.0353 0.2172 +vn -0.0000 -0.0271 0.2831 +vn -0.0000 -0.0170 0.3297 +vn -0.0000 -0.0058 0.3538 +vn -0.3705 -0.0000 0.0466 +vn -0.3452 -0.0000 0.1365 +vn -0.2964 -0.0000 0.2172 +vn -0.2275 -0.0000 0.2831 +vn -0.1430 -0.0000 0.3297 +vn -0.0488 -0.0000 0.3538 +vn 0.0488 -0.0000 -0.3538 +vn 0.1430 -0.0000 -0.3297 +vn 0.2275 -0.0000 -0.2831 +vn 0.2964 -0.0000 -0.2172 +vn 0.3452 -0.0000 -0.1365 +vn 0.3705 -0.0000 -0.0466 +vn -0.0488 -0.0000 -0.3538 +vn -0.1430 -0.0000 -0.3297 +vn -0.2275 -0.0000 -0.2831 +vn -0.2964 -0.0000 -0.2172 +vn -0.3452 -0.0000 -0.1365 +vn -0.3705 -0.0000 -0.0466 +vn 0.0488 -0.0000 0.3538 +vn 0.1430 -0.0000 0.3297 +vn 0.2275 -0.0000 0.2831 +vn 0.2964 -0.0000 0.2172 +vn 0.3452 -0.0000 0.1365 +vn 0.3705 -0.0000 0.0466 +vn -0.0000 0.0441 -0.0466 +vn -0.0000 0.0411 -0.1365 +vn -0.0000 0.0353 -0.2172 +vn -0.0000 0.0271 -0.2831 +vn -0.0000 0.0170 -0.3297 +vn -0.0000 0.0058 -0.3538 +vn -0.0488 0.0441 -0.0000 +vn -0.1430 0.0411 -0.0000 +vn -0.2275 0.0353 -0.0000 +vn -0.2964 0.0271 -0.0000 +vn -0.3452 0.0170 -0.0000 +vn -0.3705 0.0058 -0.0000 +vn -0.0000 -0.0441 -0.0466 +vn -0.0000 -0.0411 -0.1366 +vn -0.0000 -0.0353 -0.2172 +vn -0.0000 -0.0271 -0.2831 +vn -0.0000 -0.0170 -0.3297 +vn -0.0000 -0.0058 -0.3538 +vn 0.0488 0.0441 -0.0000 +vn 0.1430 0.0411 -0.0000 +vn 0.2275 0.0353 -0.0000 +vn 0.2964 0.0271 -0.0000 +vn 0.3452 0.0170 -0.0000 +vn 0.3705 0.0058 -0.0000 +vn -0.0000 0.0441 0.0466 +vn -0.0000 0.0411 0.1365 +vn -0.0000 0.0353 0.2172 +vn -0.0000 0.0271 0.2831 +vn -0.0000 0.0170 0.3297 +vn -0.0000 0.0058 0.3538 +vn -0.0194 -0.0444 -0.0000 +vn -0.1430 -0.0411 -0.0000 +vn -0.2275 -0.0353 -0.0000 +vn -0.2964 -0.0271 -0.0000 +vn -0.3452 -0.0170 -0.0000 +vn -0.3705 -0.0058 -0.0000 +vn -0.0205 -0.0439 0.0496 +vn -0.0206 -0.0439 -0.0497 +vn 0.0206 -0.0439 0.0497 +vn 0.0205 -0.0439 -0.0496 +vn 0.0058 -0.0000 0.3568 +vn -0.0058 -0.0000 -0.3568 +vn -0.3734 -0.0000 0.0138 +vn 0.3734 -0.0000 -0.0138 +vn -0.3735 -0.0000 -0.0108 +vn 0.3735 -0.0000 0.0108 +vn 0.0046 -0.0000 -0.3568 +vn -0.0046 -0.0000 0.3568 +vt 0.579948 0.337500 +vt 0.840885 0.798611 +vt 0.578906 0.336574 +vt 0.579948 0.336574 +vt 0.840885 0.816204 +vt 0.579948 0.337500 +vt 0.579948 0.337500 +vt 0.578906 0.336574 +vt 0.579427 0.337500 +vt 0.579948 0.337500 +vt 0.840885 0.800463 +vt 0.579948 0.337500 +vt 0.579948 0.337500 +vt 0.579427 0.337500 +vt 0.578906 0.336574 +vt 0.579948 0.337500 +vt 0.840885 0.803241 +vt 0.579948 0.337500 +vt 0.579948 0.337500 +vt 0.579427 0.337500 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.579948 0.336574 +vt 0.840885 0.814352 +vt 0.579948 0.336574 +vt 0.840885 0.811574 +vt 0.579948 0.336574 +vt 0.840885 0.807870 +vt 0.579948 0.336574 +vt 0.842969 0.816204 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.776823 0.816204 +vt 0.794531 0.798611 +vt 0.794531 0.816204 +vt 0.776823 0.814352 +vt 0.776823 0.811574 +vt 0.776823 0.807870 +vt 0.785677 0.798611 +vt 0.778906 0.816204 +vt 0.779427 0.813426 +vt 0.779427 0.811574 +vt 0.778906 0.807870 +vt 0.785677 0.800463 +vt 0.780990 0.816204 +vt 0.780990 0.813426 +vt 0.780990 0.812500 +vt 0.780990 0.807870 +vt 0.785677 0.802315 +vt 0.785677 0.808796 +vt 0.794531 0.800463 +vt 0.794531 0.803241 +vt 0.794531 0.807870 +vt 0.792448 0.798611 +vt 0.792448 0.801389 +vt 0.792448 0.803241 +vt 0.792448 0.807870 +vt 0.790365 0.798611 +vt 0.790365 0.801389 +vt 0.790365 0.802315 +vt 0.790365 0.807870 +vt 0.792448 0.816204 +vt 0.790365 0.816204 +vt 0.785677 0.816204 +vt 0.794531 0.814352 +vt 0.792448 0.813426 +vt 0.790365 0.813426 +vt 0.785677 0.814352 +vt 0.794531 0.811574 +vt 0.792448 0.811574 +vt 0.790365 0.812500 +vt 0.785677 0.812500 +vt 0.579948 0.333796 +vt 0.840885 0.862500 +vt 0.578906 0.333796 +vt 0.840885 0.880093 +vt 0.579948 0.331944 +vt 0.579948 0.333796 +vt 0.842969 0.862500 +vt 0.579948 0.333796 +vt 0.579427 0.333796 +vt 0.579948 0.332870 +vt 0.840885 0.864352 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.579427 0.332870 +vt 0.579948 0.332870 +vt 0.840885 0.867130 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.579427 0.332870 +vt 0.579427 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.579427 0.331944 +vt 0.578906 0.333796 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.579427 0.331944 +vt 0.578906 0.333796 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.579427 0.332870 +vt 0.579948 0.331944 +vt 0.840885 0.877315 +vt 0.579948 0.332870 +vt 0.840885 0.875463 +vt 0.579948 0.332870 +vt 0.840885 0.870833 +vt 0.579948 0.331944 +vt 0.579948 0.331944 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.579948 0.331944 +vt 0.579948 0.331944 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.794531 0.862500 +vt 0.794531 0.880093 +vt 0.776823 0.862500 +vt 0.794531 0.864352 +vt 0.794531 0.867130 +vt 0.794531 0.870833 +vt 0.792448 0.862500 +vt 0.792448 0.864352 +vt 0.792448 0.867130 +vt 0.792448 0.870833 +vt 0.790365 0.862500 +vt 0.790365 0.864352 +vt 0.790365 0.866204 +vt 0.790365 0.870833 +vt 0.787240 0.870833 +vt 0.792448 0.880093 +vt 0.790365 0.880093 +vt 0.776823 0.870833 +vt 0.785677 0.880093 +vt 0.794531 0.877315 +vt 0.792448 0.877315 +vt 0.790365 0.877315 +vt 0.785677 0.877315 +vt 0.778906 0.870833 +vt 0.794531 0.875463 +vt 0.792448 0.875463 +vt 0.790365 0.875463 +vt 0.785677 0.876389 +vt 0.780990 0.870833 +vt 0.778906 0.862500 +vt 0.780990 0.862500 +vt 0.785677 0.862500 +vt 0.776823 0.864352 +vt 0.779427 0.864352 +vt 0.780990 0.864352 +vt 0.785677 0.864352 +vt 0.776823 0.867130 +vt 0.779427 0.867130 +vt 0.780990 0.866204 +vt 0.785677 0.866204 +vt 0.579948 0.340278 +vt 0.840885 0.752315 +vt 0.840885 0.734722 +vt 0.579948 0.342130 +vt 0.575781 0.336574 +vt 0.579948 0.341204 +vt 0.840885 0.750463 +vt 0.579948 0.341204 +vt 0.840885 0.747685 +vt 0.579948 0.341204 +vt 0.840885 0.743981 +vt 0.579948 0.340278 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579948 0.340278 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579427 0.341204 +vt 0.575260 0.336574 +vt 0.579948 0.342130 +vt 0.579948 0.342130 +vt 0.575260 0.336574 +vt 0.579427 0.342130 +vt 0.579948 0.342130 +vt 0.840885 0.737500 +vt 0.579948 0.342130 +vt 0.579948 0.342130 +vt 0.579427 0.342130 +vt 0.575260 0.336574 +vt 0.579948 0.341204 +vt 0.840885 0.739352 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579427 0.341204 +vt 0.575260 0.336574 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.579427 0.340278 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.579427 0.341204 +vt 0.575781 0.336574 +vt 0.575260 0.336574 +vt 0.575260 0.336574 +vt 0.575260 0.336574 +vt 0.579427 0.341204 +vt 0.575260 0.336574 +vt 0.794531 0.734722 +vt 0.794531 0.752315 +vt 0.730990 0.816204 +vt 0.794531 0.737500 +vt 0.794531 0.739352 +vt 0.794531 0.743981 +vt 0.792448 0.734722 +vt 0.792448 0.737500 +vt 0.792448 0.739352 +vt 0.792448 0.743981 +vt 0.790365 0.734722 +vt 0.790365 0.737500 +vt 0.790365 0.739352 +vt 0.790365 0.743981 +vt 0.789323 0.743981 +vt 0.785677 0.746759 +vt 0.722135 0.810648 +vt 0.792448 0.752315 +vt 0.790365 0.752315 +vt 0.730990 0.807870 +vt 0.785677 0.752315 +vt 0.794531 0.750463 +vt 0.792448 0.750463 +vt 0.790365 0.750463 +vt 0.785677 0.750463 +vt 0.728906 0.807870 +vt 0.794531 0.747685 +vt 0.792448 0.747685 +vt 0.790365 0.748611 +vt 0.785677 0.748611 +vt 0.726823 0.807870 +vt 0.728906 0.816204 +vt 0.726302 0.816204 +vt 0.722135 0.816204 +vt 0.785677 0.734722 +vt 0.730990 0.814352 +vt 0.728385 0.813426 +vt 0.726302 0.813426 +vt 0.785677 0.737500 +vt 0.722135 0.814352 +vt 0.730990 0.811574 +vt 0.728906 0.811574 +vt 0.726302 0.812500 +vt 0.785677 0.738426 +vt 0.722135 0.812500 +vt 0.840885 0.688426 +vt 0.579948 0.344907 +vt 0.840885 0.926389 +vt 0.579948 0.329167 +vt 0.575781 0.333796 +vt 0.579948 0.344907 +vt 0.840885 0.686574 +vt 0.579948 0.344907 +vt 0.840885 0.684722 +vt 0.579948 0.345833 +vt 0.579948 0.328241 +vt 0.840885 0.934722 +vt 0.840885 0.680093 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.345833 +vt 0.579948 0.328241 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.345833 +vt 0.579948 0.328241 +vt 0.579427 0.345833 +vt 0.579427 0.329167 +vt 0.575260 0.332870 +vt 0.579948 0.329167 +vt 0.579948 0.329167 +vt 0.575781 0.332870 +vt 0.579427 0.329167 +vt 0.579948 0.329167 +vt 0.840885 0.928241 +vt 0.579948 0.329167 +vt 0.579948 0.329167 +vt 0.579427 0.329167 +vt 0.575781 0.332870 +vt 0.579948 0.329167 +vt 0.840885 0.930093 +vt 0.579948 0.329167 +vt 0.579948 0.329167 +vt 0.579427 0.329167 +vt 0.575260 0.332870 +vt 0.575781 0.333796 +vt 0.575260 0.333796 +vt 0.575260 0.333796 +vt 0.579427 0.344907 +vt 0.575781 0.332870 +vt 0.575781 0.332870 +vt 0.575260 0.332870 +vt 0.579427 0.344907 +vt 0.575260 0.332870 +vt 0.575781 0.332870 +vt 0.575781 0.332870 +vt 0.575260 0.332870 +vt 0.579427 0.344907 +vt 0.575260 0.332870 +vt 0.730990 0.862500 +vt 0.794531 0.926389 +vt 0.794531 0.688426 +vt 0.730990 0.864352 +vt 0.730990 0.867130 +vt 0.730990 0.870833 +vt 0.785677 0.926389 +vt 0.728906 0.862500 +vt 0.728906 0.864352 +vt 0.728906 0.867130 +vt 0.728906 0.870833 +vt 0.785677 0.928241 +vt 0.726302 0.862500 +vt 0.726302 0.864352 +vt 0.726302 0.866204 +vt 0.726823 0.870833 +vt 0.785677 0.930093 +vt 0.725781 0.870833 +vt 0.789323 0.934722 +vt 0.785677 0.683796 +vt 0.794531 0.928241 +vt 0.794531 0.930093 +vt 0.794531 0.934722 +vt 0.794531 0.680093 +vt 0.792448 0.926389 +vt 0.792448 0.928241 +vt 0.792448 0.930093 +vt 0.792448 0.934722 +vt 0.792448 0.680093 +vt 0.790365 0.926389 +vt 0.790365 0.928241 +vt 0.790365 0.930093 +vt 0.790365 0.934722 +vt 0.790365 0.680093 +vt 0.792448 0.688426 +vt 0.790365 0.688426 +vt 0.722135 0.862500 +vt 0.785677 0.688426 +vt 0.794531 0.686574 +vt 0.792448 0.686574 +vt 0.790365 0.686574 +vt 0.722135 0.864352 +vt 0.785677 0.686574 +vt 0.794531 0.684722 +vt 0.792448 0.684722 +vt 0.790365 0.684722 +vt 0.722135 0.866204 +vt 0.785677 0.684722 +vt 0.778906 0.816204 +vt 0.776823 0.816204 +vt 0.776823 0.814352 +vt 0.779427 0.813426 +vt 0.776823 0.864352 +vt 0.776823 0.862500 +vt 0.778906 0.862500 +vt 0.779427 0.864352 +vt 0.730990 0.814352 +vt 0.730990 0.816204 +vt 0.728906 0.816204 +vt 0.728385 0.813426 +vt 0.728906 0.862500 +vt 0.730990 0.862500 +vt 0.730990 0.864352 +vt 0.728906 0.864352 +s 0 +usemtl CabnetDoors +f 13591/27570/10206 13441/27389/10206 13517/27479/10206 13663/27669/10206 +f 13665/27671/10207 13626/27613/10207 13553/27519/10207 13589/27568/10207 +f 13516/27478/10208 13480/27432/10208 13627/27615/10208 13664/27670/10208 +f 13405/27343/10209 13554/27521/10209 13628/27617/10209 13479/27431/10209 +f 13443/27391/10210 13406/27345/10210 13478/27430/10210 13515/27477/10210 +f 13404/27341/10211 13407/27346/10211 13411/27352/10211 13410/27350/10211 +f 13407/27346/10212 13408/27347/10212 13412/27353/10212 13411/27352/10212 +f 13408/27347/10213 13409/27349/10213 13413/27354/10213 13412/27353/10213 +f 13410/27350/10214 13411/27352/10214 13415/27358/10214 13414/27356/10214 +f 13411/27352/10215 13412/27353/10215 13416/27359/10215 13415/27358/10215 +f 13412/27353/10216 13413/27354/10216 13417/27360/10216 13416/27359/10216 +f 13414/27356/10217 13415/27358/10217 13436/27384/10217 13432/27378/10217 +f 13415/27358/10218 13416/27359/10218 13440/27388/10218 13436/27384/10218 +f 13416/27359/10219 13417/27360/10219 13418/27362/10219 13440/27388/10219 +f 13405/27343/10220 13419/27363/10220 13423/27367/10220 13422/27366/10220 +f 13419/27363/10221 13420/27364/10221 13424/27368/10221 13423/27367/10221 +f 13420/27364/10222 13421/27365/10222 13425/27369/10222 13424/27368/10222 +f 13422/27366/10223 13423/27367/10223 13427/27371/10223 13426/27370/10223 +f 13423/27367/10224 13424/27368/10224 13428/27372/10224 13427/27371/10224 +f 13424/27368/10225 13425/27369/10225 13429/27373/10225 13428/27372/10225 +f 13426/27370/10226 13427/27371/10226 13413/27355/10226 13409/27348/10226 +f 13427/27371/10227 13428/27372/10227 13417/27361/10227 13413/27355/10227 +f 13428/27372/10228 13429/27373/10228 13418/27362/10228 13417/27361/10228 +f 13406/27344/10229 13430/27374/10229 13434/27382/10229 13433/27380/10229 +f 13430/27374/10230 13431/27376/10230 13435/27383/10230 13434/27382/10230 +f 13431/27376/10231 13432/27378/10231 13436/27384/10231 13435/27383/10231 +f 13433/27380/10232 13434/27382/10232 13438/27386/10232 13437/27385/10232 +f 13434/27382/10233 13435/27383/10233 13439/27387/10233 13438/27386/10233 +f 13435/27383/10234 13436/27384/10234 13440/27388/10234 13439/27387/10234 +f 13437/27385/10235 13438/27386/10235 13425/27369/10235 13421/27365/10235 +f 13438/27386/10236 13439/27387/10236 13429/27373/10236 13425/27369/10236 +f 13439/27387/10237 13440/27388/10237 13418/27362/10237 13429/27373/10237 +f 13618/27603/10210 13591/27570/10210 13709/27726/10210 13708/27725/10210 +f 13444/27392/10238 13445/27393/10238 13449/27398/10238 13448/27397/10238 +f 13445/27393/10239 13446/27394/10239 13450/27399/10239 13449/27398/10239 +f 13447/27396/10240 13448/27397/10240 13452/27402/10240 13451/27401/10240 +f 13448/27397/10241 13449/27398/10241 13453/27403/10241 13452/27402/10241 +f 13449/27398/10242 13450/27399/10242 13454/27404/10242 13453/27403/10242 +f 13451/27401/10243 13452/27402/10243 13473/27424/10243 13469/27420/10243 +f 13452/27402/10244 13453/27403/10244 13477/27428/10244 13473/27424/10244 +f 13453/27403/10245 13454/27404/10245 13455/27406/10245 13477/27428/10245 +f 13442/27390/10246 13456/27407/10246 13460/27411/10246 13459/27410/10246 +f 13456/27407/10247 13457/27408/10247 13461/27412/10247 13460/27411/10247 +f 13457/27408/10248 13458/27409/10248 13462/27413/10248 13461/27412/10248 +f 13459/27410/10249 13460/27411/10249 13464/27415/10249 13463/27414/10249 +f 13460/27411/10250 13461/27412/10250 13465/27416/10250 13464/27415/10250 +f 13461/27412/10251 13462/27413/10251 13466/27417/10251 13465/27416/10251 +f 13463/27414/10252 13464/27415/10252 13450/27400/10252 13446/27395/10252 +f 13464/27415/10253 13465/27416/10253 13454/27405/10253 13450/27400/10253 +f 13465/27416/10254 13466/27417/10254 13455/27406/10254 13454/27405/10254 +f 13443/27391/10255 13467/27418/10255 13471/27422/10255 13470/27421/10255 +f 13467/27418/10256 13468/27419/10256 13472/27423/10256 13471/27422/10256 +f 13468/27419/10257 13469/27420/10257 13473/27424/10257 13472/27423/10257 +f 13470/27421/10258 13471/27422/10258 13475/27426/10258 13474/27425/10258 +f 13471/27422/10259 13472/27423/10259 13476/27427/10259 13475/27426/10259 +f 13472/27423/10260 13473/27424/10260 13477/27428/10260 13476/27427/10260 +f 13474/27425/10261 13475/27426/10261 13462/27413/10261 13458/27409/10261 +f 13475/27426/10262 13476/27427/10262 13466/27417/10262 13462/27413/10262 +f 13476/27427/10263 13477/27428/10263 13455/27406/10263 13466/27417/10263 +f 13478/27429/10264 13481/27434/10264 13485/27440/10264 13484/27438/10264 +f 13481/27434/10265 13482/27436/10265 13486/27441/10265 13485/27440/10265 +f 13482/27436/10266 13483/27437/10266 13487/27442/10266 13486/27441/10266 +f 13484/27438/10267 13485/27440/10267 13489/27445/10267 13488/27443/10267 +f 13485/27440/10268 13486/27441/10268 13490/27446/10268 13489/27445/10268 +f 13486/27441/10269 13487/27442/10269 13491/27447/10269 13490/27446/10269 +f 13488/27443/10270 13489/27445/10270 13510/27472/10270 13506/27467/10270 +f 13489/27445/10271 13490/27446/10271 13514/27476/10271 13510/27472/10271 +f 13490/27446/10272 13491/27447/10272 13492/27448/10272 13514/27476/10272 +f 13479/27431/10273 13493/27449/10273 13497/27454/10273 13496/27453/10273 +f 13493/27449/10274 13494/27450/10274 13498/27455/10274 13497/27454/10274 +f 13494/27450/10275 13495/27451/10275 13499/27456/10275 13498/27455/10275 +f 13496/27453/10276 13497/27454/10276 13501/27459/10276 13500/27458/10276 +f 13497/27454/10277 13498/27455/10277 13502/27460/10277 13501/27459/10277 +f 13498/27455/10278 13499/27456/10278 13503/27461/10278 13502/27460/10278 +f 13500/27458/10279 13501/27459/10279 13487/27442/10279 13483/27437/10279 +f 13501/27459/10280 13502/27460/10280 13491/27447/10280 13487/27442/10280 +f 13502/27460/10281 13503/27461/10281 13492/27448/10281 13491/27447/10281 +f 13480/27433/10282 13504/27463/10282 13508/27470/10282 13507/27469/10282 +f 13504/27463/10283 13505/27465/10283 13509/27471/10283 13508/27470/10283 +f 13505/27465/10284 13506/27467/10284 13510/27472/10284 13509/27471/10284 +f 13507/27469/10285 13508/27470/10285 13512/27474/10285 13511/27473/10285 +f 13508/27470/10286 13509/27471/10286 13513/27475/10286 13512/27474/10286 +f 13509/27471/10287 13510/27472/10287 13514/27476/10287 13513/27475/10287 +f 13511/27473/10288 13512/27474/10288 13499/27457/10288 13495/27452/10288 +f 13512/27474/10289 13513/27475/10289 13503/27462/10289 13499/27457/10289 +f 13513/27475/10290 13514/27476/10290 13492/27448/10290 13503/27462/10290 +f 13515/27477/10291 13518/27480/10291 13522/27484/10291 13521/27483/10291 +f 13518/27480/10292 13519/27481/10292 13523/27485/10292 13522/27484/10292 +f 13519/27481/10293 13520/27482/10293 13524/27486/10293 13523/27485/10293 +f 13521/27483/10294 13522/27484/10294 13526/27488/10294 13525/27487/10294 +f 13522/27484/10295 13523/27485/10295 13527/27489/10295 13526/27488/10295 +f 13523/27485/10296 13524/27486/10296 13528/27490/10296 13527/27489/10296 +f 13525/27487/10297 13526/27488/10297 13547/27512/10297 13543/27508/10297 +f 13526/27488/10298 13527/27489/10298 13551/27516/10298 13547/27512/10298 +f 13527/27489/10299 13528/27490/10299 13529/27491/10299 13551/27516/10299 +f 13516/27478/10300 13530/27492/10300 13534/27497/10300 13533/27496/10300 +f 13530/27492/10301 13531/27493/10301 13535/27498/10301 13534/27497/10301 +f 13531/27493/10302 13532/27495/10302 13536/27499/10302 13535/27498/10302 +f 13533/27496/10303 13534/27497/10303 13538/27502/10303 13537/27501/10303 +f 13534/27497/10304 13535/27498/10304 13539/27503/10304 13538/27502/10304 +f 13535/27498/10305 13536/27499/10305 13540/27504/10305 13539/27503/10305 +f 13537/27501/10306 13538/27502/10306 13524/27486/10306 13520/27482/10306 +f 13538/27502/10307 13539/27503/10307 13528/27490/10307 13524/27486/10307 +f 13539/27503/10308 13540/27504/10308 13529/27491/10308 13528/27490/10308 +f 13544/27509/10207 13517/27479/10207 13705/27722/10207 13704/27721/10207 +f 13541/27506/10309 13542/27507/10309 13546/27511/10309 13545/27510/10309 +f 13542/27507/10310 13543/27508/10310 13547/27512/10310 13546/27511/10310 +f 13544/27509/10311 13545/27510/10311 13549/27514/10311 13548/27513/10311 +f 13545/27510/10312 13546/27511/10312 13550/27515/10312 13549/27514/10312 +f 13546/27511/10313 13547/27512/10313 13551/27516/10313 13550/27515/10313 +f 13548/27513/10314 13549/27514/10314 13536/27500/10314 13532/27494/10314 +f 13549/27514/10315 13550/27515/10315 13540/27505/10315 13536/27500/10315 +f 13550/27515/10316 13551/27516/10316 13529/27491/10316 13540/27505/10316 +f 13552/27517/10317 13555/27522/10317 13559/27529/10317 13558/27528/10317 +f 13555/27522/10318 13556/27524/10318 13560/27530/10318 13559/27529/10318 +f 13556/27524/10319 13557/27526/10319 13561/27531/10319 13560/27530/10319 +f 13558/27528/10320 13559/27529/10320 13563/27533/10320 13562/27532/10320 +f 13559/27529/10321 13560/27530/10321 13564/27534/10321 13563/27533/10321 +f 13560/27530/10322 13561/27531/10322 13565/27535/10322 13564/27534/10322 +f 13562/27532/10323 13563/27533/10323 13584/27561/10323 13580/27557/10323 +f 13563/27533/10324 13564/27534/10324 13588/27566/10324 13584/27561/10324 +f 13564/27534/10325 13565/27535/10325 13566/27536/10325 13588/27566/10325 +f 13553/27520/10326 13567/27538/10326 13571/27544/10326 13570/27542/10326 +f 13567/27538/10327 13568/27539/10327 13572/27545/10327 13571/27544/10327 +f 13568/27539/10328 13569/27541/10328 13573/27546/10328 13572/27545/10328 +f 13570/27542/10329 13571/27544/10329 13575/27550/10329 13574/27548/10329 +f 13571/27544/10330 13572/27545/10330 13576/27551/10330 13575/27550/10330 +f 13572/27545/10331 13573/27546/10331 13577/27552/10331 13576/27551/10331 +f 13574/27548/10332 13575/27550/10332 13561/27531/10332 13557/27526/10332 +f 13575/27550/10333 13576/27551/10333 13565/27535/10333 13561/27531/10333 +f 13576/27551/10334 13577/27552/10334 13566/27536/10334 13565/27535/10334 +f 13554/27521/10335 13578/27554/10335 13582/27559/10335 13581/27558/10335 +f 13578/27554/10336 13579/27555/10336 13583/27560/10336 13582/27559/10336 +f 13579/27555/10337 13580/27556/10337 13584/27562/10337 13583/27560/10337 +f 13581/27558/10338 13582/27559/10338 13586/27564/10338 13585/27563/10338 +f 13582/27559/10339 13583/27560/10339 13587/27565/10339 13586/27564/10339 +f 13583/27560/10340 13584/27562/10340 13588/27567/10340 13587/27565/10340 +f 13585/27563/10341 13586/27564/10341 13573/27547/10341 13569/27540/10341 +f 13586/27564/10342 13587/27565/10342 13577/27553/10342 13573/27547/10342 +f 13587/27565/10343 13588/27567/10343 13566/27537/10343 13577/27553/10343 +f 13589/27568/10344 13592/27571/10344 13596/27575/10344 13595/27574/10344 +f 13592/27571/10345 13593/27572/10345 13597/27576/10345 13596/27575/10345 +f 13593/27572/10346 13594/27573/10346 13598/27577/10346 13597/27576/10346 +f 13595/27574/10347 13596/27575/10347 13600/27579/10347 13599/27578/10347 +f 13596/27575/10348 13597/27576/10348 13601/27580/10348 13600/27579/10348 +f 13597/27576/10349 13598/27577/10349 13602/27581/10349 13601/27580/10349 +f 13599/27578/10350 13600/27579/10350 13621/27606/10350 13617/27602/10350 +f 13600/27579/10351 13601/27580/10351 13625/27611/10351 13621/27606/10351 +f 13601/27580/10352 13602/27581/10352 13603/27582/10352 13625/27611/10352 +f 13590/27569/10353 13604/27585/10353 13608/27590/10353 13607/27589/10353 +f 13604/27585/10354 13605/27586/10354 13609/27591/10354 13608/27590/10354 +f 13605/27586/10355 13606/27588/10355 13610/27592/10355 13609/27591/10355 +f 13607/27589/10356 13608/27590/10356 13612/27595/10356 13611/27594/10356 +f 13608/27590/10357 13609/27591/10357 13613/27596/10357 13612/27595/10357 +f 13609/27591/10358 13610/27592/10358 13614/27597/10358 13613/27596/10358 +f 13611/27594/10359 13612/27595/10359 13598/27577/10359 13594/27573/10359 +f 13612/27595/10360 13613/27596/10360 13602/27581/10360 13598/27577/10360 +f 13613/27596/10361 13614/27597/10361 13603/27583/10361 13602/27581/10361 +f 13669/27676/10362 13663/27669/10362 13713/27730/10362 13712/27729/10362 +f 13615/27599/10363 13616/27600/10363 13620/27605/10363 13619/27604/10363 +f 13616/27600/10364 13617/27601/10364 13621/27607/10364 13620/27605/10364 +f 13618/27603/10365 13619/27604/10365 13623/27609/10365 13622/27608/10365 +f 13619/27604/10366 13620/27605/10366 13624/27610/10366 13623/27609/10366 +f 13620/27605/10367 13621/27607/10367 13625/27612/10367 13624/27610/10367 +f 13622/27608/10368 13623/27609/10368 13610/27593/10368 13606/27587/10368 +f 13623/27609/10369 13624/27610/10369 13614/27598/10369 13610/27593/10369 +f 13624/27610/10370 13625/27612/10370 13603/27584/10370 13614/27598/10370 +f 13626/27614/10371 13629/27618/10371 13633/27627/10371 13632/27626/10371 +f 13629/27618/10372 13630/27620/10372 13634/27628/10372 13633/27627/10372 +f 13630/27620/10373 13631/27622/10373 13635/27629/10373 13634/27628/10373 +f 13632/27626/10374 13633/27627/10374 13637/27632/10374 13636/27631/10374 +f 13633/27627/10375 13634/27628/10375 13638/27633/10375 13637/27632/10375 +f 13634/27628/10376 13635/27629/10376 13639/27634/10376 13638/27633/10376 +f 13636/27631/10377 13637/27632/10377 13658/27662/10377 13654/27658/10377 +f 13637/27632/10378 13638/27633/10378 13662/27667/10378 13658/27662/10378 +f 13638/27633/10379 13639/27634/10379 13640/27636/10379 13662/27667/10379 +f 13627/27616/10380 13641/27639/10380 13645/27645/10380 13644/27643/10380 +f 13641/27639/10381 13642/27640/10381 13646/27646/10381 13645/27645/10381 +f 13642/27640/10382 13643/27642/10382 13647/27647/10382 13646/27646/10382 +f 13644/27643/10383 13645/27645/10383 13649/27651/10383 13648/27649/10383 +f 13645/27645/10384 13646/27646/10384 13650/27652/10384 13649/27651/10384 +f 13646/27646/10385 13647/27647/10385 13651/27653/10385 13650/27652/10385 +f 13648/27649/10386 13649/27651/10386 13635/27630/10386 13631/27623/10386 +f 13649/27651/10387 13650/27652/10387 13639/27635/10387 13635/27630/10387 +f 13650/27652/10388 13651/27653/10388 13640/27637/10388 13639/27635/10388 +f 13628/27617/10389 13652/27655/10389 13656/27660/10389 13655/27659/10389 +f 13652/27655/10390 13653/27656/10390 13657/27661/10390 13656/27660/10390 +f 13653/27656/10391 13654/27657/10391 13658/27663/10391 13657/27661/10391 +f 13655/27659/10392 13656/27660/10392 13660/27665/10392 13659/27664/10392 +f 13656/27660/10393 13657/27661/10393 13661/27666/10393 13660/27665/10393 +f 13657/27661/10394 13658/27663/10394 13662/27668/10394 13661/27666/10394 +f 13659/27664/10395 13660/27665/10395 13647/27648/10395 13643/27641/10395 +f 13660/27665/10396 13661/27666/10396 13651/27654/10396 13647/27648/10396 +f 13661/27666/10397 13662/27668/10397 13640/27638/10397 13651/27654/10397 +f 13447/27396/10208 13441/27389/10208 13701/27718/10208 13700/27717/10208 +f 13666/27672/10398 13667/27673/10398 13671/27678/10398 13670/27677/10398 +f 13667/27673/10399 13668/27674/10399 13672/27679/10399 13671/27678/10399 +f 13669/27676/10400 13670/27677/10400 13674/27682/10400 13673/27681/10400 +f 13670/27677/10401 13671/27678/10401 13675/27683/10401 13674/27682/10401 +f 13671/27678/10402 13672/27679/10402 13676/27684/10402 13675/27683/10402 +f 13673/27681/10403 13674/27682/10403 13695/27710/10403 13691/27705/10403 +f 13674/27682/10404 13675/27683/10404 13699/27715/10404 13695/27710/10404 +f 13675/27683/10405 13676/27684/10405 13677/27686/10405 13699/27715/10405 +f 13664/27670/10406 13678/27689/10406 13682/27694/10406 13681/27693/10406 +f 13678/27689/10407 13679/27690/10407 13683/27695/10407 13682/27694/10407 +f 13679/27690/10408 13680/27691/10408 13684/27696/10408 13683/27695/10408 +f 13681/27693/10409 13682/27694/10409 13686/27699/10409 13685/27698/10409 +f 13682/27694/10410 13683/27695/10410 13687/27700/10410 13686/27699/10410 +f 13683/27695/10411 13684/27696/10411 13688/27701/10411 13687/27700/10411 +f 13685/27698/10412 13686/27699/10412 13672/27680/10412 13668/27675/10412 +f 13686/27699/10413 13687/27700/10413 13676/27685/10413 13672/27680/10413 +f 13687/27700/10414 13688/27701/10414 13677/27687/10414 13676/27685/10414 +f 13665/27671/10415 13689/27703/10415 13693/27708/10415 13692/27707/10415 +f 13689/27703/10416 13690/27704/10416 13694/27709/10416 13693/27708/10416 +f 13690/27704/10417 13691/27706/10417 13695/27711/10417 13694/27709/10417 +f 13692/27707/10418 13693/27708/10418 13697/27713/10418 13696/27712/10418 +f 13693/27708/10419 13694/27709/10419 13698/27714/10419 13697/27713/10419 +f 13694/27709/10420 13695/27711/10420 13699/27716/10420 13698/27714/10420 +f 13696/27712/10421 13697/27713/10421 13684/27697/10421 13680/27692/10421 +f 13697/27713/10422 13698/27714/10422 13688/27702/10422 13684/27697/10422 +f 13698/27714/10423 13699/27716/10423 13677/27688/10423 13688/27702/10423 +f 13591/27570/10424 13663/27669/10424 13669/27676/10424 13615/27599/10424 +f 13615/27599/10425 13669/27676/10425 13673/27681/10425 13616/27600/10425 +f 13616/27600/10426 13673/27681/10426 13691/27705/10426 13617/27601/10426 +f 13617/27602/10427 13691/27706/10427 13690/27704/10427 13599/27578/10427 +f 13599/27578/10428 13690/27704/10428 13689/27703/10428 13595/27574/10428 +f 13595/27574/10429 13689/27703/10429 13665/27671/10429 13589/27568/10429 +f 13441/27389/10430 13591/27570/10430 13618/27603/10430 13444/27392/10430 +f 13444/27392/10431 13618/27603/10431 13622/27608/10431 13445/27393/10431 +f 13445/27393/10432 13622/27608/10432 13606/27587/10432 13446/27394/10432 +f 13446/27395/10433 13606/27588/10433 13605/27586/10433 13463/27414/10433 +f 13463/27414/10434 13605/27586/10434 13604/27585/10434 13459/27410/10434 +f 13459/27410/10435 13604/27585/10435 13590/27569/10435 13442/27390/10435 +f 13406/27345/10436 13443/27391/10436 13470/27421/10436 13430/27375/10436 +f 13430/27375/10437 13470/27421/10437 13474/27425/10437 13431/27377/10437 +f 13431/27377/10438 13474/27425/10438 13458/27409/10438 13432/27379/10438 +f 13432/27379/10439 13458/27409/10439 13457/27408/10439 13414/27357/10439 +f 13414/27357/10440 13457/27408/10440 13456/27407/10440 13410/27351/10440 +f 13410/27351/10441 13456/27407/10441 13442/27390/10441 13404/27342/10441 +f 13664/27670/10442 13627/27615/10442 13644/27644/10442 13678/27689/10442 +f 13678/27689/10443 13644/27644/10443 13648/27650/10443 13679/27690/10443 +f 13679/27690/10444 13648/27650/10444 13631/27624/10444 13680/27691/10444 +f 13680/27692/10445 13631/27625/10445 13630/27621/10445 13696/27712/10445 +f 13696/27712/10446 13630/27621/10446 13629/27619/10446 13692/27707/10446 +f 13692/27707/10447 13629/27619/10447 13626/27613/10447 13665/27671/10447 +f 13480/27432/10448 13516/27478/10448 13533/27496/10448 13504/27464/10448 +f 13504/27464/10449 13533/27496/10449 13537/27501/10449 13505/27466/10449 +f 13505/27466/10450 13537/27501/10450 13520/27482/10450 13506/27468/10450 +f 13506/27468/10451 13520/27482/10451 13519/27481/10451 13488/27444/10451 +f 13488/27444/10452 13519/27481/10452 13518/27480/10452 13484/27439/10452 +f 13484/27439/10453 13518/27480/10453 13515/27477/10453 13478/27430/10453 +f 13552/27518/10454 13590/27569/10454 13607/27589/10454 13555/27523/10454 +f 13555/27523/10455 13607/27589/10455 13611/27594/10455 13556/27525/10455 +f 13556/27525/10456 13611/27594/10456 13594/27573/10456 13557/27527/10456 +f 13557/27527/10457 13594/27573/10457 13593/27572/10457 13574/27549/10457 +f 13574/27549/10458 13593/27572/10458 13592/27571/10458 13570/27543/10458 +f 13570/27543/10459 13592/27571/10459 13589/27568/10459 13553/27519/10459 +f 13479/27431/10460 13628/27617/10460 13655/27659/10460 13493/27449/10460 +f 13493/27449/10461 13655/27659/10461 13659/27664/10461 13494/27450/10461 +f 13494/27450/10462 13659/27664/10462 13643/27641/10462 13495/27451/10462 +f 13495/27452/10463 13643/27642/10463 13642/27640/10463 13511/27473/10463 +f 13511/27473/10464 13642/27640/10464 13641/27639/10464 13507/27469/10464 +f 13507/27469/10465 13641/27639/10465 13627/27616/10465 13480/27433/10465 +f 13405/27343/10466 13479/27431/10466 13496/27453/10466 13419/27363/10466 +f 13419/27363/10467 13496/27453/10467 13500/27458/10467 13420/27364/10467 +f 13420/27364/10468 13500/27458/10468 13483/27437/10468 13421/27365/10468 +f 13421/27365/10469 13483/27437/10469 13482/27436/10469 13437/27385/10469 +f 13437/27385/10470 13482/27436/10470 13481/27434/10470 13433/27380/10470 +f 13433/27381/10471 13481/27435/10471 13478/27430/10471 13406/27345/10471 +f 13663/27669/10472 13517/27479/10472 13544/27509/10472 13666/27672/10472 +f 13666/27672/10473 13544/27509/10473 13548/27513/10473 13667/27673/10473 +f 13667/27673/10474 13548/27513/10474 13532/27494/10474 13668/27674/10474 +f 13668/27675/10475 13532/27495/10475 13531/27493/10475 13685/27698/10475 +f 13685/27698/10476 13531/27493/10476 13530/27492/10476 13681/27693/10476 +f 13681/27693/10477 13530/27492/10477 13516/27478/10477 13664/27670/10477 +f 13628/27617/10478 13554/27521/10478 13581/27558/10478 13652/27655/10478 +f 13652/27655/10479 13581/27558/10479 13585/27563/10479 13653/27656/10479 +f 13653/27656/10480 13585/27563/10480 13569/27540/10480 13654/27657/10480 +f 13654/27658/10481 13569/27541/10481 13568/27539/10481 13636/27631/10481 +f 13636/27631/10482 13568/27539/10482 13567/27538/10482 13632/27626/10482 +f 13632/27626/10483 13567/27538/10483 13553/27520/10483 13626/27614/10483 +f 13554/27521/10484 13405/27343/10484 13422/27366/10484 13578/27554/10484 +f 13578/27554/10485 13422/27366/10485 13426/27370/10485 13579/27555/10485 +f 13579/27555/10486 13426/27370/10486 13409/27348/10486 13580/27556/10486 +f 13580/27557/10487 13409/27349/10487 13408/27347/10487 13562/27532/10487 +f 13562/27532/10488 13408/27347/10488 13407/27346/10488 13558/27528/10488 +f 13558/27528/10489 13407/27346/10489 13404/27341/10489 13552/27517/10489 +f 13517/27479/10490 13441/27389/10490 13447/27396/10490 13541/27506/10490 +f 13541/27506/10491 13447/27396/10491 13451/27401/10491 13542/27507/10491 +f 13542/27507/10492 13451/27401/10492 13469/27420/10492 13543/27508/10492 +f 13543/27508/10493 13469/27420/10493 13468/27419/10493 13525/27487/10493 +f 13525/27487/10494 13468/27419/10494 13467/27418/10494 13521/27483/10494 +f 13521/27483/10495 13467/27418/10495 13443/27391/10495 13515/27477/10495 +f 13590/27569/10362 13552/27518/10362 13404/27342/10362 13442/27390/10362 +f 13701/27718/10496 13702/27719/10496 13703/27720/10496 13700/27717/10496 +f 13705/27722/10497 13706/27723/10497 13707/27724/10497 13704/27721/10497 +f 13709/27726/10498 13710/27727/10498 13711/27728/10498 13708/27725/10498 +f 13713/27730/10499 13714/27731/10499 13715/27732/10499 13712/27729/10499 +f 13441/27389/10207 13444/27392/10207 13702/27719/10207 13701/27718/10207 +f 13663/27669/10210 13666/27672/10210 13714/27731/10210 13713/27730/10210 +f 13517/27479/10362 13541/27506/10362 13706/27723/10362 13705/27722/10362 +f 13591/27570/10208 13615/27599/10208 13710/27727/10208 13709/27726/10208 +f 13444/27392/10500 13448/27397/10500 13703/27720/10500 13702/27719/10500 +f 13666/27672/10501 13670/27677/10501 13715/27732/10501 13714/27731/10501 +f 13541/27506/10502 13545/27510/10502 13707/27724/10502 13706/27723/10502 +f 13615/27599/10503 13619/27604/10503 13711/27728/10503 13710/27727/10503 +f 13448/27397/10504 13447/27396/10504 13700/27717/10504 13703/27720/10504 +f 13670/27677/10505 13669/27676/10505 13712/27729/10505 13715/27732/10505 +f 13545/27510/10506 13544/27509/10506 13704/27721/10506 13707/27724/10506 +f 13619/27604/10507 13618/27603/10507 13708/27725/10507 13711/27728/10507 +o Top.009 +v -6.384461 0.737263 4.893946 +v -6.384461 0.749833 4.793021 +v -6.490153 0.737263 4.793021 +v -6.384461 0.740515 4.890509 +v -6.384461 0.743549 4.880419 +v -6.384461 0.746151 4.864386 +v -6.411807 0.737263 4.890509 +v -6.412667 0.740645 4.886417 +v -6.412207 0.743568 4.876213 +v -6.411639 0.745849 4.862018 +v -6.437316 0.737263 4.880420 +v -6.437506 0.740582 4.876148 +v -6.434806 0.743253 4.867595 +v -6.432591 0.745176 4.856560 +v -6.445483 0.744520 4.851290 +v -6.411807 0.749405 4.793021 +v -6.437316 0.748149 4.793021 +v -6.459197 0.746151 4.793021 +v -6.384461 0.749405 4.819133 +v -6.412900 0.748896 4.819955 +v -6.437478 0.747625 4.819515 +v -6.456650 0.745857 4.818974 +v -6.384461 0.748149 4.843492 +v -6.412366 0.747617 4.843673 +v -6.434831 0.746551 4.841095 +v -6.450994 0.745177 4.838980 +v -6.486555 0.737263 4.819133 +v -6.475988 0.737263 4.843492 +v -6.459197 0.737263 4.864386 +v -6.486555 0.740515 4.793021 +v -6.482270 0.740617 4.820177 +v -6.471583 0.740563 4.843647 +v -6.456717 0.740495 4.861953 +v -6.475988 0.743549 4.793021 +v -6.471515 0.743572 4.819667 +v -6.462558 0.743250 4.841118 +v -6.451002 0.742987 4.856553 +v -6.342639 0.660944 4.793021 +v -6.384461 0.673515 4.893946 +v -6.490153 0.673515 4.793021 +v -6.342639 0.661372 4.819133 +v -6.384461 0.662629 4.843492 +v -6.384461 0.664626 4.864386 +v -6.411807 0.661372 4.793021 +v -6.412667 0.661882 4.820177 +v -6.412207 0.663153 4.843647 +v -6.411639 0.664921 4.861953 +v -6.437316 0.662629 4.793021 +v -6.437506 0.663161 4.819667 +v -6.434806 0.664226 4.841118 +v -6.432591 0.665601 4.856553 +v -6.445483 0.666257 4.851290 +v -6.411807 0.673515 4.890509 +v -6.437316 0.673515 4.880419 +v -6.459197 0.673515 4.864386 +v -6.384461 0.670263 4.890509 +v -6.412900 0.670160 4.886417 +v -6.437478 0.670215 4.876213 +v -6.456650 0.670282 4.862018 +v -6.384461 0.667229 4.880419 +v -6.412366 0.667206 4.876148 +v -6.434831 0.667527 4.867595 +v -6.450994 0.667790 4.856560 +v -6.486555 0.670263 4.793021 +v -6.475988 0.667229 4.793021 +v -6.459197 0.664626 4.793021 +v -6.486555 0.673515 4.819133 +v -6.482270 0.670133 4.819955 +v -6.471583 0.667209 4.819515 +v -6.456717 0.664929 4.818974 +v -6.475988 0.673515 4.843492 +v -6.471515 0.670196 4.843673 +v -6.462558 0.667524 4.841095 +v -6.451002 0.665602 4.838980 +v -6.490154 0.737263 4.281227 +v -6.384461 0.749833 4.281227 +v -6.384461 0.737263 4.180302 +v -6.486555 0.740515 4.281227 +v -6.475988 0.743549 4.281227 +v -6.459197 0.746151 4.281227 +v -6.486555 0.737263 4.255115 +v -6.482270 0.740645 4.254292 +v -6.471583 0.743568 4.254733 +v -6.456717 0.745849 4.255274 +v -6.475988 0.737263 4.230756 +v -6.471515 0.740582 4.230574 +v -6.462558 0.743253 4.233152 +v -6.451002 0.745176 4.235267 +v -6.445483 0.744520 4.222958 +v -6.384461 0.749405 4.255115 +v -6.384461 0.748149 4.230756 +v -6.384461 0.746151 4.209862 +v -6.411807 0.749405 4.281227 +v -6.412667 0.748896 4.254071 +v -6.412207 0.747625 4.230601 +v -6.411640 0.745857 4.212294 +v -6.437316 0.748149 4.281227 +v -6.437506 0.747617 4.254580 +v -6.434806 0.746551 4.233129 +v -6.432591 0.745177 4.217695 +v -6.411807 0.737263 4.183739 +v -6.437316 0.737263 4.193828 +v -6.459197 0.737263 4.209862 +v -6.384461 0.740515 4.183739 +v -6.412900 0.740617 4.187830 +v -6.437478 0.740563 4.198035 +v -6.456650 0.740495 4.212230 +v -6.384461 0.743549 4.193828 +v -6.412366 0.743572 4.198100 +v -6.434831 0.743250 4.206653 +v -6.450994 0.742987 4.217688 +v -6.490154 0.673515 4.281227 +v -6.384461 0.673515 4.180302 +v -6.342639 0.660944 4.281227 +v -6.486555 0.673515 4.255115 +v -6.475988 0.673515 4.230756 +v -6.459197 0.673515 4.209862 +v -6.486555 0.670263 4.281227 +v -6.482270 0.670160 4.254071 +v -6.471583 0.670215 4.230601 +v -6.456717 0.670282 4.212294 +v -6.475988 0.667229 4.281227 +v -6.471515 0.667206 4.254580 +v -6.462558 0.667527 4.233129 +v -6.451002 0.667790 4.217695 +v -6.445483 0.666257 4.222958 +v -6.384461 0.670263 4.183739 +v -6.384461 0.667229 4.193828 +v -6.384461 0.664626 4.209862 +v -6.411807 0.673515 4.183739 +v -6.412667 0.670133 4.187830 +v -6.412207 0.667209 4.198035 +v -6.411640 0.664929 4.212230 +v -6.437316 0.673515 4.193828 +v -6.437507 0.670196 4.198100 +v -6.434806 0.667524 4.206653 +v -6.432591 0.665602 4.217688 +v -6.411807 0.661372 4.281227 +v -6.437316 0.662629 4.281227 +v -6.459197 0.664626 4.281227 +v -6.342639 0.661372 4.255115 +v -6.412900 0.661882 4.254292 +v -6.437478 0.663153 4.254733 +v -6.456650 0.664921 4.255274 +v -6.384461 0.662629 4.230756 +v -6.412366 0.663161 4.230574 +v -6.434831 0.664226 4.233152 +v -6.450994 0.665601 4.235267 +v -5.848487 0.737263 4.893945 +v -5.742795 0.737263 4.793021 +v -5.848487 0.749833 4.793021 +v -5.821141 0.737263 4.890509 +v -5.795632 0.737263 4.880419 +v -5.773751 0.737263 4.864385 +v -5.848487 0.740515 4.890509 +v -5.820048 0.740617 4.886417 +v -5.795470 0.740563 4.876213 +v -5.776298 0.740495 4.862018 +v -5.848487 0.743549 4.880419 +v -5.820582 0.743572 4.876148 +v -5.798118 0.743250 4.867595 +v -5.781954 0.742987 4.856560 +v -5.787466 0.744520 4.851290 +v -5.746394 0.740515 4.793021 +v -5.756960 0.743549 4.793021 +v -5.773751 0.746151 4.793021 +v -5.746394 0.737263 4.819133 +v -5.750679 0.740645 4.819955 +v -5.761365 0.743568 4.819515 +v -5.776231 0.745849 4.818973 +v -5.756960 0.737263 4.843491 +v -5.761433 0.740582 4.843673 +v -5.770390 0.743253 4.841095 +v -5.781947 0.745176 4.838980 +v -5.848487 0.749405 4.819133 +v -5.848487 0.748149 4.843491 +v -5.848487 0.746151 4.864385 +v -5.821141 0.749405 4.793021 +v -5.820281 0.748896 4.820177 +v -5.820741 0.747625 4.843646 +v -5.821309 0.745857 4.861953 +v -5.795632 0.748149 4.793021 +v -5.795442 0.747617 4.819667 +v -5.798142 0.746551 4.841118 +v -5.800357 0.745177 4.856553 +v -5.742795 0.673515 4.793021 +v -5.848487 0.673515 4.893945 +v -5.890309 0.660944 4.793021 +v -5.746394 0.673515 4.819133 +v -5.756960 0.673515 4.843491 +v -5.773751 0.673515 4.864385 +v -5.746394 0.670263 4.793021 +v -5.750679 0.670160 4.820177 +v -5.761365 0.670215 4.843646 +v -5.776231 0.670282 4.861953 +v -5.756960 0.667229 4.793021 +v -5.761433 0.667206 4.819667 +v -5.770390 0.667527 4.841118 +v -5.781947 0.667790 4.856553 +v -5.787466 0.666257 4.851290 +v -5.848487 0.670263 4.890509 +v -5.848487 0.667229 4.880419 +v -5.848487 0.664626 4.864385 +v -5.821141 0.673515 4.890509 +v -5.820281 0.670133 4.886417 +v -5.820741 0.667209 4.876213 +v -5.821309 0.664929 4.862018 +v -5.795632 0.673515 4.880419 +v -5.795442 0.670196 4.876148 +v -5.798142 0.667524 4.867595 +v -5.800357 0.665602 4.856560 +v -5.821141 0.661372 4.793021 +v -5.795632 0.662629 4.793021 +v -5.773751 0.664626 4.793021 +v -5.890309 0.661372 4.819133 +v -5.820048 0.661882 4.819955 +v -5.795470 0.663153 4.819515 +v -5.776298 0.664921 4.818973 +v -5.848487 0.662629 4.843491 +v -5.820582 0.663161 4.843673 +v -5.798118 0.664226 4.841095 +v -5.781954 0.665601 4.838980 +v -5.742795 0.737263 4.281226 +v -5.848487 0.737263 4.180302 +v -5.848487 0.749833 4.281226 +v -5.746394 0.737263 4.255114 +v -5.756960 0.737263 4.230756 +v -5.773751 0.737263 4.209862 +v -5.746394 0.740515 4.281226 +v -5.750679 0.740617 4.254070 +v -5.761365 0.740563 4.230601 +v -5.776231 0.740495 4.212294 +v -5.756960 0.743549 4.281226 +v -5.761433 0.743572 4.254580 +v -5.770390 0.743250 4.233129 +v -5.781947 0.742987 4.217694 +v -5.787466 0.744520 4.222958 +v -5.848487 0.740515 4.183738 +v -5.848487 0.743549 4.193828 +v -5.848487 0.746151 4.209862 +v -5.821142 0.737263 4.183738 +v -5.820281 0.740645 4.187830 +v -5.820742 0.743568 4.198034 +v -5.821309 0.745849 4.212230 +v -5.795632 0.737263 4.193828 +v -5.795442 0.740582 4.198100 +v -5.798142 0.743253 4.206652 +v -5.800357 0.745176 4.217688 +v -5.821142 0.749405 4.281226 +v -5.795632 0.748149 4.281226 +v -5.773751 0.746151 4.281226 +v -5.848487 0.749405 4.255114 +v -5.820048 0.748896 4.254292 +v -5.795470 0.747625 4.254732 +v -5.776299 0.745857 4.255274 +v -5.848487 0.748149 4.230756 +v -5.820582 0.747617 4.230574 +v -5.798118 0.746551 4.233152 +v -5.781954 0.745177 4.235267 +v -5.890309 0.660944 4.281226 +v -5.848487 0.673515 4.180302 +v -5.742795 0.673515 4.281226 +v -5.890309 0.661372 4.255114 +v -5.848487 0.662629 4.230756 +v -5.848487 0.664626 4.209862 +v -5.821142 0.661372 4.281226 +v -5.820281 0.661882 4.254070 +v -5.820742 0.663153 4.230601 +v -5.821309 0.664921 4.212294 +v -5.795632 0.662629 4.281226 +v -5.795442 0.663161 4.254580 +v -5.798142 0.664226 4.233129 +v -5.800357 0.665601 4.217694 +v -5.787466 0.666257 4.222958 +v -5.821142 0.673515 4.183738 +v -5.795632 0.673515 4.193828 +v -5.773751 0.673515 4.209862 +v -5.848487 0.670263 4.183738 +v -5.820048 0.670160 4.187830 +v -5.795470 0.670215 4.198034 +v -5.776299 0.670282 4.212230 +v -5.848487 0.667229 4.193828 +v -5.820582 0.667206 4.198100 +v -5.798118 0.667527 4.206652 +v -5.781954 0.667790 4.217688 +v -5.746394 0.670263 4.281226 +v -5.756960 0.667229 4.281226 +v -5.773751 0.664626 4.281226 +v -5.746394 0.673515 4.255114 +v -5.750679 0.670133 4.254292 +v -5.761365 0.667209 4.254732 +v -5.776231 0.664929 4.255274 +v -5.756960 0.673515 4.230756 +v -5.761433 0.670196 4.230574 +v -5.770390 0.667524 4.233152 +v -5.781947 0.665602 4.235267 +v -6.411807 -0.015018 4.793021 +v -6.342639 -0.015446 4.793021 +v -6.342639 -0.015018 4.819133 +v -6.412667 -0.014508 4.820177 +v -6.342639 -0.015018 4.255115 +v -6.342639 -0.015446 4.281227 +v -6.411807 -0.015018 4.281227 +v -6.412900 -0.014508 4.254292 +v -5.890309 -0.015018 4.819133 +v -5.890309 -0.015446 4.793021 +v -5.821141 -0.015018 4.793021 +v -5.820048 -0.014508 4.819955 +v -5.821142 -0.015018 4.281226 +v -5.890309 -0.015446 4.281226 +v -5.890309 -0.015018 4.255114 +v -5.820281 -0.014508 4.254070 +vn -0.0000 -0.0444 -0.0000 +vn 0.3737 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.3568 +vn -0.0000 0.0444 -0.0000 +vn -0.3737 -0.0000 -0.0000 +vn -0.0510 0.0061 0.3501 +vn -0.0497 0.0173 0.3254 +vn -0.0466 0.0270 0.2801 +vn -0.1448 0.0060 0.3254 +vn -0.1412 0.0168 0.3016 +vn -0.1339 0.0256 0.2619 +vn -0.2268 0.0056 0.2801 +vn -0.2158 0.0159 0.2617 +vn -0.1981 0.0236 0.2362 +vn -0.0510 0.0436 0.0487 +vn -0.1451 0.0405 0.0474 +vn -0.2268 0.0349 0.0445 +vn -0.0503 0.0405 0.1383 +vn -0.1414 0.0376 0.1348 +vn -0.2156 0.0326 0.1279 +vn -0.0468 0.0349 0.2165 +vn -0.1341 0.0326 0.2061 +vn -0.1980 0.0294 0.1891 +vn -0.3666 0.0061 0.0487 +vn -0.3408 0.0059 0.1385 +vn -0.2933 0.0055 0.2166 +vn -0.3408 0.0172 0.0480 +vn -0.3158 0.0168 0.1350 +vn -0.2742 0.0159 0.2059 +vn -0.2933 0.0270 0.0447 +vn -0.2740 0.0257 0.1280 +vn -0.2474 0.0236 0.1891 +vn -0.0296 -0.0418 0.1189 +vn -0.0466 -0.0349 0.2166 +vn -0.1448 -0.0405 0.0480 +vn -0.1412 -0.0376 0.1350 +vn -0.1339 -0.0326 0.2059 +vn -0.2268 -0.0349 0.0447 +vn -0.2158 -0.0326 0.1280 +vn -0.1981 -0.0294 0.1891 +vn -0.0510 -0.0061 0.3501 +vn -0.1451 -0.0059 0.3254 +vn -0.2268 -0.0055 0.2801 +vn -0.0503 -0.0172 0.3254 +vn -0.1414 -0.0168 0.3016 +vn -0.2156 -0.0159 0.2619 +vn -0.0468 -0.0270 0.2801 +vn -0.1341 -0.0257 0.2617 +vn -0.1980 -0.0236 0.2362 +vn -0.3666 -0.0061 0.0487 +vn -0.3408 -0.0173 0.0474 +vn -0.2933 -0.0270 0.0445 +vn -0.3408 -0.0060 0.1383 +vn -0.3158 -0.0168 0.1348 +vn -0.2742 -0.0256 0.1279 +vn -0.2933 -0.0056 0.2165 +vn -0.2740 -0.0159 0.2061 +vn -0.2474 -0.0236 0.1891 +vn -0.3666 0.0061 -0.0487 +vn -0.3408 0.0173 -0.0474 +vn -0.2933 0.0270 -0.0445 +vn -0.3408 0.0060 -0.1383 +vn -0.3158 0.0168 -0.1348 +vn -0.2742 0.0256 -0.1279 +vn -0.2933 0.0056 -0.2165 +vn -0.2740 0.0159 -0.2061 +vn -0.2474 0.0236 -0.1891 +vn -0.0510 0.0436 -0.0487 +vn -0.0497 0.0405 -0.1385 +vn -0.0466 0.0349 -0.2166 +vn -0.1448 0.0405 -0.0480 +vn -0.1412 0.0376 -0.1350 +vn -0.1339 0.0326 -0.2059 +vn -0.2268 0.0349 -0.0447 +vn -0.2158 0.0326 -0.1280 +vn -0.1981 0.0294 -0.1891 +vn -0.0510 0.0061 -0.3501 +vn -0.1451 0.0059 -0.3254 +vn -0.2268 0.0055 -0.2801 +vn -0.0503 0.0172 -0.3254 +vn -0.1414 0.0168 -0.3016 +vn -0.2156 0.0159 -0.2619 +vn -0.0468 0.0270 -0.2801 +vn -0.1341 0.0257 -0.2617 +vn -0.1980 0.0236 -0.2362 +vn -0.3666 -0.0061 -0.0487 +vn -0.3408 -0.0059 -0.1385 +vn -0.2933 -0.0055 -0.2166 +vn -0.3408 -0.0172 -0.0480 +vn -0.3158 -0.0168 -0.1350 +vn -0.2742 -0.0159 -0.2059 +vn -0.2933 -0.0270 -0.0447 +vn -0.2740 -0.0257 -0.1280 +vn -0.2474 -0.0236 -0.1891 +vn -0.0510 -0.0061 -0.3501 +vn -0.0497 -0.0173 -0.3254 +vn -0.0466 -0.0270 -0.2801 +vn -0.1448 -0.0060 -0.3254 +vn -0.1412 -0.0168 -0.3016 +vn -0.1339 -0.0256 -0.2619 +vn -0.2268 -0.0056 -0.2801 +vn -0.2158 -0.0159 -0.2617 +vn -0.1981 -0.0236 -0.2362 +vn -0.1451 -0.0405 -0.0474 +vn -0.2268 -0.0349 -0.0445 +vn -0.0300 -0.0418 -0.1185 +vn -0.1414 -0.0376 -0.1348 +vn -0.2156 -0.0326 -0.1279 +vn -0.0468 -0.0349 -0.2165 +vn -0.1341 -0.0326 -0.2061 +vn -0.1980 -0.0294 -0.1891 +vn 0.0510 0.0061 0.3501 +vn 0.1451 0.0059 0.3254 +vn 0.2268 0.0055 0.2801 +vn 0.0503 0.0172 0.3254 +vn 0.1414 0.0168 0.3016 +vn 0.2156 0.0159 0.2619 +vn 0.0468 0.0270 0.2801 +vn 0.1341 0.0257 0.2617 +vn 0.1980 0.0236 0.2362 +vn 0.3666 0.0061 0.0487 +vn 0.3408 0.0173 0.0474 +vn 0.2933 0.0270 0.0445 +vn 0.3408 0.0060 0.1383 +vn 0.3158 0.0168 0.1348 +vn 0.2742 0.0256 0.1279 +vn 0.2933 0.0056 0.2165 +vn 0.2740 0.0159 0.2061 +vn 0.2474 0.0236 0.1891 +vn 0.0510 0.0436 0.0487 +vn 0.0497 0.0405 0.1385 +vn 0.0466 0.0349 0.2166 +vn 0.1448 0.0405 0.0480 +vn 0.1412 0.0376 0.1350 +vn 0.1339 0.0326 0.2059 +vn 0.2268 0.0349 0.0447 +vn 0.2158 0.0326 0.1280 +vn 0.1981 0.0294 0.1891 +vn 0.3666 -0.0061 0.0487 +vn 0.3408 -0.0059 0.1385 +vn 0.2933 -0.0055 0.2166 +vn 0.3408 -0.0172 0.0480 +vn 0.3158 -0.0168 0.1350 +vn 0.2742 -0.0159 0.2059 +vn 0.2933 -0.0270 0.0447 +vn 0.2740 -0.0257 0.1280 +vn 0.2474 -0.0236 0.1891 +vn 0.0510 -0.0061 0.3501 +vn 0.0497 -0.0173 0.3254 +vn 0.0466 -0.0270 0.2801 +vn 0.1448 -0.0060 0.3254 +vn 0.1412 -0.0168 0.3016 +vn 0.1339 -0.0256 0.2619 +vn 0.2268 -0.0056 0.2801 +vn 0.2158 -0.0159 0.2617 +vn 0.1981 -0.0236 0.2362 +vn -0.0000 -0.0000 0.3568 +vn 0.1451 -0.0405 0.0474 +vn 0.2268 -0.0349 0.0445 +vn 0.0300 -0.0418 0.1185 +vn 0.1414 -0.0376 0.1348 +vn 0.2156 -0.0326 0.1279 +vn 0.0468 -0.0349 0.2165 +vn 0.1341 -0.0326 0.2061 +vn 0.1980 -0.0294 0.1891 +vn 0.3666 0.0061 -0.0487 +vn 0.3408 0.0059 -0.1385 +vn 0.2933 0.0055 -0.2166 +vn 0.3408 0.0172 -0.0480 +vn 0.3158 0.0168 -0.1350 +vn 0.2742 0.0159 -0.2059 +vn 0.2933 0.0270 -0.0447 +vn 0.2740 0.0257 -0.1280 +vn 0.2474 0.0236 -0.1891 +vn 0.0510 0.0061 -0.3501 +vn 0.0497 0.0173 -0.3254 +vn 0.0466 0.0270 -0.2801 +vn 0.1448 0.0060 -0.3254 +vn 0.1412 0.0168 -0.3016 +vn 0.1339 0.0256 -0.2619 +vn 0.2268 0.0056 -0.2801 +vn 0.2158 0.0159 -0.2617 +vn 0.1981 0.0236 -0.2362 +vn 0.0510 0.0436 -0.0487 +vn 0.1451 0.0405 -0.0474 +vn 0.2268 0.0349 -0.0445 +vn 0.0503 0.0405 -0.1383 +vn 0.1414 0.0376 -0.1348 +vn 0.2156 0.0326 -0.1279 +vn 0.0468 0.0349 -0.2165 +vn 0.1341 0.0326 -0.2061 +vn 0.1980 0.0294 -0.1891 +vn 0.0296 -0.0418 -0.1189 +vn 0.0466 -0.0349 -0.2166 +vn 0.1448 -0.0405 -0.0480 +vn 0.1412 -0.0376 -0.1350 +vn 0.1339 -0.0326 -0.2059 +vn 0.2268 -0.0349 -0.0447 +vn 0.2158 -0.0326 -0.1280 +vn 0.1981 -0.0294 -0.1891 +vn 0.0510 -0.0061 -0.3501 +vn 0.1451 -0.0059 -0.3254 +vn 0.2268 -0.0055 -0.2801 +vn 0.0503 -0.0172 -0.3254 +vn 0.1414 -0.0168 -0.3016 +vn 0.2156 -0.0159 -0.2619 +vn 0.0468 -0.0270 -0.2801 +vn 0.1341 -0.0257 -0.2617 +vn 0.1980 -0.0236 -0.2362 +vn 0.3666 -0.0061 -0.0487 +vn 0.3408 -0.0173 -0.0474 +vn 0.2933 -0.0270 -0.0445 +vn 0.3408 -0.0060 -0.1383 +vn 0.3158 -0.0168 -0.1348 +vn 0.2742 -0.0256 -0.1279 +vn 0.2933 -0.0056 -0.2165 +vn 0.2740 -0.0159 -0.2061 +vn 0.2474 -0.0236 -0.1891 +vn 0.0194 -0.0444 -0.0000 +vn 0.1430 -0.0411 -0.0000 +vn 0.2275 -0.0353 -0.0000 +vn 0.2964 -0.0271 -0.0000 +vn 0.3452 -0.0170 -0.0000 +vn 0.3705 -0.0058 -0.0000 +vn -0.0000 -0.0441 0.0466 +vn -0.0000 -0.0411 0.1366 +vn -0.0000 -0.0353 0.2172 +vn -0.0000 -0.0271 0.2831 +vn -0.0000 -0.0170 0.3297 +vn -0.0000 -0.0058 0.3538 +vn -0.3705 -0.0000 0.0466 +vn -0.3452 -0.0000 0.1365 +vn -0.2964 -0.0000 0.2172 +vn -0.2275 -0.0000 0.2831 +vn -0.1430 -0.0000 0.3297 +vn -0.0488 -0.0000 0.3538 +vn 0.0488 -0.0000 -0.3538 +vn 0.1430 -0.0000 -0.3297 +vn 0.2275 -0.0000 -0.2831 +vn 0.2964 -0.0000 -0.2172 +vn 0.3452 -0.0000 -0.1365 +vn 0.3705 -0.0000 -0.0466 +vn -0.0488 -0.0000 -0.3538 +vn -0.1430 -0.0000 -0.3297 +vn -0.2275 -0.0000 -0.2831 +vn -0.2964 -0.0000 -0.2172 +vn -0.3452 -0.0000 -0.1365 +vn -0.3705 -0.0000 -0.0466 +vn 0.0488 -0.0000 0.3538 +vn 0.1430 -0.0000 0.3297 +vn 0.2275 -0.0000 0.2831 +vn 0.2964 -0.0000 0.2172 +vn 0.3452 -0.0000 0.1365 +vn 0.3705 -0.0000 0.0466 +vn -0.0000 0.0441 -0.0466 +vn -0.0000 0.0411 -0.1365 +vn -0.0000 0.0353 -0.2172 +vn -0.0000 0.0271 -0.2831 +vn -0.0000 0.0170 -0.3297 +vn -0.0000 0.0058 -0.3538 +vn -0.0488 0.0441 -0.0000 +vn -0.1430 0.0411 -0.0000 +vn -0.2275 0.0353 -0.0000 +vn -0.2964 0.0271 -0.0000 +vn -0.3452 0.0170 -0.0000 +vn -0.3705 0.0058 -0.0000 +vn -0.0000 -0.0441 -0.0466 +vn -0.0000 -0.0411 -0.1366 +vn -0.0000 -0.0353 -0.2172 +vn -0.0000 -0.0271 -0.2831 +vn -0.0000 -0.0170 -0.3297 +vn -0.0000 -0.0058 -0.3538 +vn 0.0488 0.0441 -0.0000 +vn 0.1430 0.0411 -0.0000 +vn 0.2275 0.0353 -0.0000 +vn 0.2964 0.0271 -0.0000 +vn 0.3452 0.0170 -0.0000 +vn 0.3705 0.0058 -0.0000 +vn -0.0000 0.0441 0.0466 +vn -0.0000 0.0411 0.1365 +vn -0.0000 0.0353 0.2172 +vn -0.0000 0.0271 0.2831 +vn -0.0000 0.0170 0.3297 +vn -0.0000 0.0058 0.3538 +vn -0.0194 -0.0444 -0.0000 +vn -0.1430 -0.0411 -0.0000 +vn -0.2275 -0.0353 -0.0000 +vn -0.2964 -0.0271 -0.0000 +vn -0.3452 -0.0170 -0.0000 +vn -0.3705 -0.0058 -0.0000 +vn -0.0205 -0.0439 0.0496 +vn -0.0206 -0.0439 -0.0497 +vn 0.0206 -0.0439 0.0497 +vn 0.0205 -0.0439 -0.0496 +vn 0.0058 -0.0000 0.3568 +vn -0.0058 -0.0000 -0.3568 +vn -0.3734 -0.0000 0.0138 +vn 0.3734 -0.0000 -0.0138 +vn -0.3735 -0.0000 -0.0108 +vn 0.3735 -0.0000 0.0108 +vn 0.0046 -0.0000 -0.3568 +vn -0.0046 -0.0000 0.3568 +vt 0.579948 0.337500 +vt 0.840885 0.798611 +vt 0.578906 0.336574 +vt 0.579948 0.336574 +vt 0.840885 0.816204 +vt 0.579948 0.337500 +vt 0.579948 0.337500 +vt 0.578906 0.336574 +vt 0.579427 0.337500 +vt 0.579948 0.337500 +vt 0.840885 0.800463 +vt 0.579948 0.337500 +vt 0.579948 0.337500 +vt 0.579427 0.337500 +vt 0.578906 0.336574 +vt 0.579948 0.337500 +vt 0.840885 0.803241 +vt 0.579948 0.337500 +vt 0.579948 0.337500 +vt 0.579427 0.337500 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.579948 0.336574 +vt 0.840885 0.814352 +vt 0.579948 0.336574 +vt 0.840885 0.811574 +vt 0.579948 0.336574 +vt 0.840885 0.807870 +vt 0.579948 0.336574 +vt 0.842969 0.816204 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.776823 0.816204 +vt 0.794531 0.798611 +vt 0.794531 0.816204 +vt 0.776823 0.814352 +vt 0.776823 0.811574 +vt 0.776823 0.807870 +vt 0.785677 0.798611 +vt 0.778906 0.816204 +vt 0.779427 0.813426 +vt 0.779427 0.811574 +vt 0.778906 0.807870 +vt 0.785677 0.800463 +vt 0.780990 0.816204 +vt 0.780990 0.813426 +vt 0.780990 0.812500 +vt 0.780990 0.807870 +vt 0.785677 0.802315 +vt 0.785677 0.808796 +vt 0.794531 0.800463 +vt 0.794531 0.803241 +vt 0.794531 0.807870 +vt 0.792448 0.798611 +vt 0.792448 0.801389 +vt 0.792448 0.803241 +vt 0.792448 0.807870 +vt 0.790365 0.798611 +vt 0.790365 0.801389 +vt 0.790365 0.802315 +vt 0.790365 0.807870 +vt 0.792448 0.816204 +vt 0.790365 0.816204 +vt 0.785677 0.816204 +vt 0.794531 0.814352 +vt 0.792448 0.813426 +vt 0.790365 0.813426 +vt 0.785677 0.814352 +vt 0.794531 0.811574 +vt 0.792448 0.811574 +vt 0.790365 0.812500 +vt 0.785677 0.812500 +vt 0.579948 0.333796 +vt 0.840885 0.862500 +vt 0.578906 0.333796 +vt 0.840885 0.880093 +vt 0.579948 0.331944 +vt 0.579948 0.333796 +vt 0.842969 0.862500 +vt 0.579948 0.333796 +vt 0.579427 0.333796 +vt 0.579948 0.332870 +vt 0.840885 0.864352 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.579427 0.332870 +vt 0.579948 0.332870 +vt 0.840885 0.867130 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.579427 0.332870 +vt 0.579427 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.579427 0.331944 +vt 0.578906 0.333796 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.579427 0.331944 +vt 0.578906 0.333796 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.579427 0.332870 +vt 0.579948 0.331944 +vt 0.840885 0.877315 +vt 0.579948 0.332870 +vt 0.840885 0.875463 +vt 0.579948 0.332870 +vt 0.840885 0.870833 +vt 0.579948 0.331944 +vt 0.579948 0.331944 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.579948 0.331944 +vt 0.579948 0.331944 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.794531 0.862500 +vt 0.794531 0.880093 +vt 0.776823 0.862500 +vt 0.794531 0.864352 +vt 0.794531 0.867130 +vt 0.794531 0.870833 +vt 0.792448 0.862500 +vt 0.792448 0.864352 +vt 0.792448 0.867130 +vt 0.792448 0.870833 +vt 0.790365 0.862500 +vt 0.790365 0.864352 +vt 0.790365 0.866204 +vt 0.790365 0.870833 +vt 0.787240 0.870833 +vt 0.792448 0.880093 +vt 0.790365 0.880093 +vt 0.776823 0.870833 +vt 0.785677 0.880093 +vt 0.794531 0.877315 +vt 0.792448 0.877315 +vt 0.790365 0.877315 +vt 0.785677 0.877315 +vt 0.778906 0.870833 +vt 0.794531 0.875463 +vt 0.792448 0.875463 +vt 0.790365 0.875463 +vt 0.785677 0.876389 +vt 0.780990 0.870833 +vt 0.778906 0.862500 +vt 0.780990 0.862500 +vt 0.785677 0.862500 +vt 0.776823 0.864352 +vt 0.779427 0.864352 +vt 0.780990 0.864352 +vt 0.785677 0.864352 +vt 0.776823 0.867130 +vt 0.779427 0.867130 +vt 0.780990 0.866204 +vt 0.785677 0.866204 +vt 0.579948 0.340278 +vt 0.840885 0.752315 +vt 0.840885 0.734722 +vt 0.579948 0.342130 +vt 0.575781 0.336574 +vt 0.579948 0.341204 +vt 0.840885 0.750463 +vt 0.579948 0.341204 +vt 0.840885 0.747685 +vt 0.579948 0.341204 +vt 0.840885 0.743981 +vt 0.579948 0.340278 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579948 0.340278 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579427 0.341204 +vt 0.575260 0.336574 +vt 0.579948 0.342130 +vt 0.579948 0.342130 +vt 0.575260 0.336574 +vt 0.579427 0.342130 +vt 0.579948 0.342130 +vt 0.840885 0.737500 +vt 0.579948 0.342130 +vt 0.579948 0.342130 +vt 0.579427 0.342130 +vt 0.575260 0.336574 +vt 0.579948 0.341204 +vt 0.840885 0.739352 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579427 0.341204 +vt 0.575260 0.336574 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.579427 0.340278 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.579427 0.341204 +vt 0.575781 0.336574 +vt 0.575260 0.336574 +vt 0.575260 0.336574 +vt 0.575260 0.336574 +vt 0.579427 0.341204 +vt 0.575260 0.336574 +vt 0.794531 0.734722 +vt 0.794531 0.752315 +vt 0.730990 0.816204 +vt 0.794531 0.737500 +vt 0.794531 0.739352 +vt 0.794531 0.743981 +vt 0.792448 0.734722 +vt 0.792448 0.737500 +vt 0.792448 0.739352 +vt 0.792448 0.743981 +vt 0.790365 0.734722 +vt 0.790365 0.737500 +vt 0.790365 0.739352 +vt 0.790365 0.743981 +vt 0.789323 0.743981 +vt 0.785677 0.746759 +vt 0.722135 0.810648 +vt 0.792448 0.752315 +vt 0.790365 0.752315 +vt 0.730990 0.807870 +vt 0.785677 0.752315 +vt 0.794531 0.750463 +vt 0.792448 0.750463 +vt 0.790365 0.750463 +vt 0.785677 0.750463 +vt 0.728906 0.807870 +vt 0.794531 0.747685 +vt 0.792448 0.747685 +vt 0.790365 0.748611 +vt 0.785677 0.748611 +vt 0.726823 0.807870 +vt 0.728906 0.816204 +vt 0.726302 0.816204 +vt 0.722135 0.816204 +vt 0.785677 0.734722 +vt 0.730990 0.814352 +vt 0.728385 0.813426 +vt 0.726302 0.813426 +vt 0.785677 0.737500 +vt 0.722135 0.814352 +vt 0.730990 0.811574 +vt 0.728906 0.811574 +vt 0.726302 0.812500 +vt 0.785677 0.738426 +vt 0.722135 0.812500 +vt 0.840885 0.688426 +vt 0.579948 0.344907 +vt 0.840885 0.926389 +vt 0.579948 0.329167 +vt 0.575781 0.333796 +vt 0.579948 0.344907 +vt 0.840885 0.686574 +vt 0.579948 0.344907 +vt 0.840885 0.684722 +vt 0.579948 0.345833 +vt 0.579948 0.328241 +vt 0.840885 0.934722 +vt 0.840885 0.680093 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.345833 +vt 0.579948 0.328241 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.345833 +vt 0.579948 0.328241 +vt 0.579427 0.345833 +vt 0.579427 0.329167 +vt 0.575260 0.332870 +vt 0.579948 0.329167 +vt 0.579948 0.329167 +vt 0.575781 0.332870 +vt 0.579427 0.329167 +vt 0.579948 0.329167 +vt 0.840885 0.928241 +vt 0.579948 0.329167 +vt 0.579948 0.329167 +vt 0.579427 0.329167 +vt 0.575781 0.332870 +vt 0.579948 0.329167 +vt 0.840885 0.930093 +vt 0.579948 0.329167 +vt 0.579948 0.329167 +vt 0.579427 0.329167 +vt 0.575260 0.332870 +vt 0.575781 0.333796 +vt 0.575260 0.333796 +vt 0.575260 0.333796 +vt 0.579427 0.344907 +vt 0.575781 0.332870 +vt 0.575781 0.332870 +vt 0.575260 0.332870 +vt 0.579427 0.344907 +vt 0.575260 0.332870 +vt 0.575781 0.332870 +vt 0.575781 0.332870 +vt 0.575260 0.332870 +vt 0.579427 0.344907 +vt 0.575260 0.332870 +vt 0.730990 0.862500 +vt 0.794531 0.926389 +vt 0.794531 0.688426 +vt 0.730990 0.864352 +vt 0.730990 0.867130 +vt 0.730990 0.870833 +vt 0.785677 0.926389 +vt 0.728906 0.862500 +vt 0.728906 0.864352 +vt 0.728906 0.867130 +vt 0.728906 0.870833 +vt 0.785677 0.928241 +vt 0.726302 0.862500 +vt 0.726302 0.864352 +vt 0.726302 0.866204 +vt 0.726823 0.870833 +vt 0.785677 0.930093 +vt 0.725781 0.870833 +vt 0.789323 0.934722 +vt 0.785677 0.683796 +vt 0.794531 0.928241 +vt 0.794531 0.930093 +vt 0.794531 0.934722 +vt 0.794531 0.680093 +vt 0.792448 0.926389 +vt 0.792448 0.928241 +vt 0.792448 0.930093 +vt 0.792448 0.934722 +vt 0.792448 0.680093 +vt 0.790365 0.926389 +vt 0.790365 0.928241 +vt 0.790365 0.930093 +vt 0.790365 0.934722 +vt 0.790365 0.680093 +vt 0.792448 0.688426 +vt 0.790365 0.688426 +vt 0.722135 0.862500 +vt 0.785677 0.688426 +vt 0.794531 0.686574 +vt 0.792448 0.686574 +vt 0.790365 0.686574 +vt 0.722135 0.864352 +vt 0.785677 0.686574 +vt 0.794531 0.684722 +vt 0.792448 0.684722 +vt 0.790365 0.684722 +vt 0.722135 0.866204 +vt 0.785677 0.684722 +vt 0.778906 0.816204 +vt 0.776823 0.816204 +vt 0.776823 0.814352 +vt 0.779427 0.813426 +vt 0.776823 0.864352 +vt 0.776823 0.862500 +vt 0.778906 0.862500 +vt 0.779427 0.864352 +vt 0.730990 0.814352 +vt 0.730990 0.816204 +vt 0.728906 0.816204 +vt 0.728385 0.813426 +vt 0.728906 0.862500 +vt 0.730990 0.862500 +vt 0.730990 0.864352 +vt 0.728906 0.864352 +s 0 +usemtl CabnetDoors +f 13903/27962/10508 13753/27781/10508 13829/27871/10508 13975/28061/10508 +f 13977/28063/10509 13938/28005/10509 13865/27911/10509 13901/27960/10509 +f 13828/27870/10510 13792/27824/10510 13939/28007/10510 13976/28062/10510 +f 13717/27735/10511 13866/27913/10511 13940/28009/10511 13791/27823/10511 +f 13755/27783/10512 13718/27737/10512 13790/27822/10512 13827/27869/10512 +f 13716/27733/10513 13719/27738/10513 13723/27744/10513 13722/27742/10513 +f 13719/27738/10514 13720/27739/10514 13724/27745/10514 13723/27744/10514 +f 13720/27739/10515 13721/27741/10515 13725/27746/10515 13724/27745/10515 +f 13722/27742/10516 13723/27744/10516 13727/27750/10516 13726/27748/10516 +f 13723/27744/10517 13724/27745/10517 13728/27751/10517 13727/27750/10517 +f 13724/27745/10518 13725/27746/10518 13729/27752/10518 13728/27751/10518 +f 13726/27748/10519 13727/27750/10519 13748/27776/10519 13744/27770/10519 +f 13727/27750/10520 13728/27751/10520 13752/27780/10520 13748/27776/10520 +f 13728/27751/10521 13729/27752/10521 13730/27754/10521 13752/27780/10521 +f 13717/27735/10522 13731/27755/10522 13735/27759/10522 13734/27758/10522 +f 13731/27755/10523 13732/27756/10523 13736/27760/10523 13735/27759/10523 +f 13732/27756/10524 13733/27757/10524 13737/27761/10524 13736/27760/10524 +f 13734/27758/10525 13735/27759/10525 13739/27763/10525 13738/27762/10525 +f 13735/27759/10526 13736/27760/10526 13740/27764/10526 13739/27763/10526 +f 13736/27760/10527 13737/27761/10527 13741/27765/10527 13740/27764/10527 +f 13738/27762/10528 13739/27763/10528 13725/27747/10528 13721/27740/10528 +f 13739/27763/10529 13740/27764/10529 13729/27753/10529 13725/27747/10529 +f 13740/27764/10530 13741/27765/10530 13730/27754/10530 13729/27753/10530 +f 13718/27736/10531 13742/27766/10531 13746/27774/10531 13745/27772/10531 +f 13742/27766/10532 13743/27768/10532 13747/27775/10532 13746/27774/10532 +f 13743/27768/10533 13744/27770/10533 13748/27776/10533 13747/27775/10533 +f 13745/27772/10534 13746/27774/10534 13750/27778/10534 13749/27777/10534 +f 13746/27774/10535 13747/27775/10535 13751/27779/10535 13750/27778/10535 +f 13747/27775/10536 13748/27776/10536 13752/27780/10536 13751/27779/10536 +f 13749/27777/10537 13750/27778/10537 13737/27761/10537 13733/27757/10537 +f 13750/27778/10538 13751/27779/10538 13741/27765/10538 13737/27761/10538 +f 13751/27779/10539 13752/27780/10539 13730/27754/10539 13741/27765/10539 +f 13930/27995/10512 13903/27962/10512 14021/28118/10512 14020/28117/10512 +f 13756/27784/10540 13757/27785/10540 13761/27790/10540 13760/27789/10540 +f 13757/27785/10541 13758/27786/10541 13762/27791/10541 13761/27790/10541 +f 13759/27788/10542 13760/27789/10542 13764/27794/10542 13763/27793/10542 +f 13760/27789/10543 13761/27790/10543 13765/27795/10543 13764/27794/10543 +f 13761/27790/10544 13762/27791/10544 13766/27796/10544 13765/27795/10544 +f 13763/27793/10545 13764/27794/10545 13785/27816/10545 13781/27812/10545 +f 13764/27794/10546 13765/27795/10546 13789/27820/10546 13785/27816/10546 +f 13765/27795/10547 13766/27796/10547 13767/27798/10547 13789/27820/10547 +f 13754/27782/10548 13768/27799/10548 13772/27803/10548 13771/27802/10548 +f 13768/27799/10549 13769/27800/10549 13773/27804/10549 13772/27803/10549 +f 13769/27800/10550 13770/27801/10550 13774/27805/10550 13773/27804/10550 +f 13771/27802/10551 13772/27803/10551 13776/27807/10551 13775/27806/10551 +f 13772/27803/10552 13773/27804/10552 13777/27808/10552 13776/27807/10552 +f 13773/27804/10553 13774/27805/10553 13778/27809/10553 13777/27808/10553 +f 13775/27806/10554 13776/27807/10554 13762/27792/10554 13758/27787/10554 +f 13776/27807/10555 13777/27808/10555 13766/27797/10555 13762/27792/10555 +f 13777/27808/10556 13778/27809/10556 13767/27798/10556 13766/27797/10556 +f 13755/27783/10557 13779/27810/10557 13783/27814/10557 13782/27813/10557 +f 13779/27810/10558 13780/27811/10558 13784/27815/10558 13783/27814/10558 +f 13780/27811/10559 13781/27812/10559 13785/27816/10559 13784/27815/10559 +f 13782/27813/10560 13783/27814/10560 13787/27818/10560 13786/27817/10560 +f 13783/27814/10561 13784/27815/10561 13788/27819/10561 13787/27818/10561 +f 13784/27815/10562 13785/27816/10562 13789/27820/10562 13788/27819/10562 +f 13786/27817/10563 13787/27818/10563 13774/27805/10563 13770/27801/10563 +f 13787/27818/10564 13788/27819/10564 13778/27809/10564 13774/27805/10564 +f 13788/27819/10565 13789/27820/10565 13767/27798/10565 13778/27809/10565 +f 13790/27821/10566 13793/27826/10566 13797/27832/10566 13796/27830/10566 +f 13793/27826/10567 13794/27828/10567 13798/27833/10567 13797/27832/10567 +f 13794/27828/10568 13795/27829/10568 13799/27834/10568 13798/27833/10568 +f 13796/27830/10569 13797/27832/10569 13801/27837/10569 13800/27835/10569 +f 13797/27832/10570 13798/27833/10570 13802/27838/10570 13801/27837/10570 +f 13798/27833/10571 13799/27834/10571 13803/27839/10571 13802/27838/10571 +f 13800/27835/10572 13801/27837/10572 13822/27864/10572 13818/27859/10572 +f 13801/27837/10573 13802/27838/10573 13826/27868/10573 13822/27864/10573 +f 13802/27838/10574 13803/27839/10574 13804/27840/10574 13826/27868/10574 +f 13791/27823/10575 13805/27841/10575 13809/27846/10575 13808/27845/10575 +f 13805/27841/10576 13806/27842/10576 13810/27847/10576 13809/27846/10576 +f 13806/27842/10577 13807/27843/10577 13811/27848/10577 13810/27847/10577 +f 13808/27845/10578 13809/27846/10578 13813/27851/10578 13812/27850/10578 +f 13809/27846/10579 13810/27847/10579 13814/27852/10579 13813/27851/10579 +f 13810/27847/10580 13811/27848/10580 13815/27853/10580 13814/27852/10580 +f 13812/27850/10581 13813/27851/10581 13799/27834/10581 13795/27829/10581 +f 13813/27851/10582 13814/27852/10582 13803/27839/10582 13799/27834/10582 +f 13814/27852/10583 13815/27853/10583 13804/27840/10583 13803/27839/10583 +f 13792/27825/10584 13816/27855/10584 13820/27862/10584 13819/27861/10584 +f 13816/27855/10585 13817/27857/10585 13821/27863/10585 13820/27862/10585 +f 13817/27857/10586 13818/27859/10586 13822/27864/10586 13821/27863/10586 +f 13819/27861/10587 13820/27862/10587 13824/27866/10587 13823/27865/10587 +f 13820/27862/10588 13821/27863/10588 13825/27867/10588 13824/27866/10588 +f 13821/27863/10589 13822/27864/10589 13826/27868/10589 13825/27867/10589 +f 13823/27865/10590 13824/27866/10590 13811/27849/10590 13807/27844/10590 +f 13824/27866/10591 13825/27867/10591 13815/27854/10591 13811/27849/10591 +f 13825/27867/10592 13826/27868/10592 13804/27840/10592 13815/27854/10592 +f 13827/27869/10593 13830/27872/10593 13834/27876/10593 13833/27875/10593 +f 13830/27872/10594 13831/27873/10594 13835/27877/10594 13834/27876/10594 +f 13831/27873/10595 13832/27874/10595 13836/27878/10595 13835/27877/10595 +f 13833/27875/10596 13834/27876/10596 13838/27880/10596 13837/27879/10596 +f 13834/27876/10597 13835/27877/10597 13839/27881/10597 13838/27880/10597 +f 13835/27877/10598 13836/27878/10598 13840/27882/10598 13839/27881/10598 +f 13837/27879/10599 13838/27880/10599 13859/27904/10599 13855/27900/10599 +f 13838/27880/10600 13839/27881/10600 13863/27908/10600 13859/27904/10600 +f 13839/27881/10601 13840/27882/10601 13841/27883/10601 13863/27908/10601 +f 13828/27870/10602 13842/27884/10602 13846/27889/10602 13845/27888/10602 +f 13842/27884/10603 13843/27885/10603 13847/27890/10603 13846/27889/10603 +f 13843/27885/10604 13844/27887/10604 13848/27891/10604 13847/27890/10604 +f 13845/27888/10605 13846/27889/10605 13850/27894/10605 13849/27893/10605 +f 13846/27889/10606 13847/27890/10606 13851/27895/10606 13850/27894/10606 +f 13847/27890/10607 13848/27891/10607 13852/27896/10607 13851/27895/10607 +f 13849/27893/10608 13850/27894/10608 13836/27878/10608 13832/27874/10608 +f 13850/27894/10609 13851/27895/10609 13840/27882/10609 13836/27878/10609 +f 13851/27895/10610 13852/27896/10610 13841/27883/10610 13840/27882/10610 +f 13856/27901/10509 13829/27871/10509 14017/28114/10509 14016/28113/10509 +f 13853/27898/10611 13854/27899/10611 13858/27903/10611 13857/27902/10611 +f 13854/27899/10612 13855/27900/10612 13859/27904/10612 13858/27903/10612 +f 13856/27901/10613 13857/27902/10613 13861/27906/10613 13860/27905/10613 +f 13857/27902/10614 13858/27903/10614 13862/27907/10614 13861/27906/10614 +f 13858/27903/10615 13859/27904/10615 13863/27908/10615 13862/27907/10615 +f 13860/27905/10616 13861/27906/10616 13848/27892/10616 13844/27886/10616 +f 13861/27906/10617 13862/27907/10617 13852/27897/10617 13848/27892/10617 +f 13862/27907/10618 13863/27908/10618 13841/27883/10618 13852/27897/10618 +f 13864/27909/10619 13867/27914/10619 13871/27921/10619 13870/27920/10619 +f 13867/27914/10620 13868/27916/10620 13872/27922/10620 13871/27921/10620 +f 13868/27916/10621 13869/27918/10621 13873/27923/10621 13872/27922/10621 +f 13870/27920/10622 13871/27921/10622 13875/27925/10622 13874/27924/10622 +f 13871/27921/10623 13872/27922/10623 13876/27926/10623 13875/27925/10623 +f 13872/27922/10624 13873/27923/10624 13877/27927/10624 13876/27926/10624 +f 13874/27924/10625 13875/27925/10625 13896/27953/10625 13892/27949/10625 +f 13875/27925/10626 13876/27926/10626 13900/27958/10626 13896/27953/10626 +f 13876/27926/10627 13877/27927/10627 13878/27928/10627 13900/27958/10627 +f 13865/27912/10628 13879/27930/10628 13883/27936/10628 13882/27934/10628 +f 13879/27930/10629 13880/27931/10629 13884/27937/10629 13883/27936/10629 +f 13880/27931/10630 13881/27933/10630 13885/27938/10630 13884/27937/10630 +f 13882/27934/10631 13883/27936/10631 13887/27942/10631 13886/27940/10631 +f 13883/27936/10632 13884/27937/10632 13888/27943/10632 13887/27942/10632 +f 13884/27937/10633 13885/27938/10633 13889/27944/10633 13888/27943/10633 +f 13886/27940/10634 13887/27942/10634 13873/27923/10634 13869/27918/10634 +f 13887/27942/10635 13888/27943/10635 13877/27927/10635 13873/27923/10635 +f 13888/27943/10636 13889/27944/10636 13878/27928/10636 13877/27927/10636 +f 13866/27913/10637 13890/27946/10637 13894/27951/10637 13893/27950/10637 +f 13890/27946/10638 13891/27947/10638 13895/27952/10638 13894/27951/10638 +f 13891/27947/10639 13892/27948/10639 13896/27954/10639 13895/27952/10639 +f 13893/27950/10640 13894/27951/10640 13898/27956/10640 13897/27955/10640 +f 13894/27951/10641 13895/27952/10641 13899/27957/10641 13898/27956/10641 +f 13895/27952/10642 13896/27954/10642 13900/27959/10642 13899/27957/10642 +f 13897/27955/10643 13898/27956/10643 13885/27939/10643 13881/27932/10643 +f 13898/27956/10644 13899/27957/10644 13889/27945/10644 13885/27939/10644 +f 13899/27957/10645 13900/27959/10645 13878/27929/10645 13889/27945/10645 +f 13901/27960/10646 13904/27963/10646 13908/27967/10646 13907/27966/10646 +f 13904/27963/10647 13905/27964/10647 13909/27968/10647 13908/27967/10647 +f 13905/27964/10648 13906/27965/10648 13910/27969/10648 13909/27968/10648 +f 13907/27966/10649 13908/27967/10649 13912/27971/10649 13911/27970/10649 +f 13908/27967/10650 13909/27968/10650 13913/27972/10650 13912/27971/10650 +f 13909/27968/10651 13910/27969/10651 13914/27973/10651 13913/27972/10651 +f 13911/27970/10652 13912/27971/10652 13933/27998/10652 13929/27994/10652 +f 13912/27971/10653 13913/27972/10653 13937/28003/10653 13933/27998/10653 +f 13913/27972/10654 13914/27973/10654 13915/27974/10654 13937/28003/10654 +f 13902/27961/10655 13916/27977/10655 13920/27982/10655 13919/27981/10655 +f 13916/27977/10656 13917/27978/10656 13921/27983/10656 13920/27982/10656 +f 13917/27978/10657 13918/27980/10657 13922/27984/10657 13921/27983/10657 +f 13919/27981/10658 13920/27982/10658 13924/27987/10658 13923/27986/10658 +f 13920/27982/10659 13921/27983/10659 13925/27988/10659 13924/27987/10659 +f 13921/27983/10660 13922/27984/10660 13926/27989/10660 13925/27988/10660 +f 13923/27986/10661 13924/27987/10661 13910/27969/10661 13906/27965/10661 +f 13924/27987/10662 13925/27988/10662 13914/27973/10662 13910/27969/10662 +f 13925/27988/10663 13926/27989/10663 13915/27975/10663 13914/27973/10663 +f 13981/28068/10664 13975/28061/10664 14025/28122/10664 14024/28121/10664 +f 13927/27991/10665 13928/27992/10665 13932/27997/10665 13931/27996/10665 +f 13928/27992/10666 13929/27993/10666 13933/27999/10666 13932/27997/10666 +f 13930/27995/10667 13931/27996/10667 13935/28001/10667 13934/28000/10667 +f 13931/27996/10668 13932/27997/10668 13936/28002/10668 13935/28001/10668 +f 13932/27997/10669 13933/27999/10669 13937/28004/10669 13936/28002/10669 +f 13934/28000/10670 13935/28001/10670 13922/27985/10670 13918/27979/10670 +f 13935/28001/10671 13936/28002/10671 13926/27990/10671 13922/27985/10671 +f 13936/28002/10672 13937/28004/10672 13915/27976/10672 13926/27990/10672 +f 13938/28006/10673 13941/28010/10673 13945/28019/10673 13944/28018/10673 +f 13941/28010/10674 13942/28012/10674 13946/28020/10674 13945/28019/10674 +f 13942/28012/10675 13943/28014/10675 13947/28021/10675 13946/28020/10675 +f 13944/28018/10676 13945/28019/10676 13949/28024/10676 13948/28023/10676 +f 13945/28019/10677 13946/28020/10677 13950/28025/10677 13949/28024/10677 +f 13946/28020/10678 13947/28021/10678 13951/28026/10678 13950/28025/10678 +f 13948/28023/10679 13949/28024/10679 13970/28054/10679 13966/28050/10679 +f 13949/28024/10680 13950/28025/10680 13974/28059/10680 13970/28054/10680 +f 13950/28025/10681 13951/28026/10681 13952/28028/10681 13974/28059/10681 +f 13939/28008/10682 13953/28031/10682 13957/28037/10682 13956/28035/10682 +f 13953/28031/10683 13954/28032/10683 13958/28038/10683 13957/28037/10683 +f 13954/28032/10684 13955/28034/10684 13959/28039/10684 13958/28038/10684 +f 13956/28035/10685 13957/28037/10685 13961/28043/10685 13960/28041/10685 +f 13957/28037/10686 13958/28038/10686 13962/28044/10686 13961/28043/10686 +f 13958/28038/10687 13959/28039/10687 13963/28045/10687 13962/28044/10687 +f 13960/28041/10688 13961/28043/10688 13947/28022/10688 13943/28015/10688 +f 13961/28043/10689 13962/28044/10689 13951/28027/10689 13947/28022/10689 +f 13962/28044/10690 13963/28045/10690 13952/28029/10690 13951/28027/10690 +f 13940/28009/10691 13964/28047/10691 13968/28052/10691 13967/28051/10691 +f 13964/28047/10692 13965/28048/10692 13969/28053/10692 13968/28052/10692 +f 13965/28048/10693 13966/28049/10693 13970/28055/10693 13969/28053/10693 +f 13967/28051/10694 13968/28052/10694 13972/28057/10694 13971/28056/10694 +f 13968/28052/10695 13969/28053/10695 13973/28058/10695 13972/28057/10695 +f 13969/28053/10696 13970/28055/10696 13974/28060/10696 13973/28058/10696 +f 13971/28056/10697 13972/28057/10697 13959/28040/10697 13955/28033/10697 +f 13972/28057/10698 13973/28058/10698 13963/28046/10698 13959/28040/10698 +f 13973/28058/10699 13974/28060/10699 13952/28030/10699 13963/28046/10699 +f 13759/27788/10510 13753/27781/10510 14013/28110/10510 14012/28109/10510 +f 13978/28064/10700 13979/28065/10700 13983/28070/10700 13982/28069/10700 +f 13979/28065/10701 13980/28066/10701 13984/28071/10701 13983/28070/10701 +f 13981/28068/10702 13982/28069/10702 13986/28074/10702 13985/28073/10702 +f 13982/28069/10703 13983/28070/10703 13987/28075/10703 13986/28074/10703 +f 13983/28070/10704 13984/28071/10704 13988/28076/10704 13987/28075/10704 +f 13985/28073/10705 13986/28074/10705 14007/28102/10705 14003/28097/10705 +f 13986/28074/10706 13987/28075/10706 14011/28107/10706 14007/28102/10706 +f 13987/28075/10707 13988/28076/10707 13989/28078/10707 14011/28107/10707 +f 13976/28062/10708 13990/28081/10708 13994/28086/10708 13993/28085/10708 +f 13990/28081/10709 13991/28082/10709 13995/28087/10709 13994/28086/10709 +f 13991/28082/10710 13992/28083/10710 13996/28088/10710 13995/28087/10710 +f 13993/28085/10711 13994/28086/10711 13998/28091/10711 13997/28090/10711 +f 13994/28086/10712 13995/28087/10712 13999/28092/10712 13998/28091/10712 +f 13995/28087/10713 13996/28088/10713 14000/28093/10713 13999/28092/10713 +f 13997/28090/10714 13998/28091/10714 13984/28072/10714 13980/28067/10714 +f 13998/28091/10715 13999/28092/10715 13988/28077/10715 13984/28072/10715 +f 13999/28092/10716 14000/28093/10716 13989/28079/10716 13988/28077/10716 +f 13977/28063/10717 14001/28095/10717 14005/28100/10717 14004/28099/10717 +f 14001/28095/10718 14002/28096/10718 14006/28101/10718 14005/28100/10718 +f 14002/28096/10719 14003/28098/10719 14007/28103/10719 14006/28101/10719 +f 14004/28099/10720 14005/28100/10720 14009/28105/10720 14008/28104/10720 +f 14005/28100/10721 14006/28101/10721 14010/28106/10721 14009/28105/10721 +f 14006/28101/10722 14007/28103/10722 14011/28108/10722 14010/28106/10722 +f 14008/28104/10723 14009/28105/10723 13996/28089/10723 13992/28084/10723 +f 14009/28105/10724 14010/28106/10724 14000/28094/10724 13996/28089/10724 +f 14010/28106/10725 14011/28108/10725 13989/28080/10725 14000/28094/10725 +f 13903/27962/10726 13975/28061/10726 13981/28068/10726 13927/27991/10726 +f 13927/27991/10727 13981/28068/10727 13985/28073/10727 13928/27992/10727 +f 13928/27992/10728 13985/28073/10728 14003/28097/10728 13929/27993/10728 +f 13929/27994/10729 14003/28098/10729 14002/28096/10729 13911/27970/10729 +f 13911/27970/10730 14002/28096/10730 14001/28095/10730 13907/27966/10730 +f 13907/27966/10731 14001/28095/10731 13977/28063/10731 13901/27960/10731 +f 13753/27781/10732 13903/27962/10732 13930/27995/10732 13756/27784/10732 +f 13756/27784/10733 13930/27995/10733 13934/28000/10733 13757/27785/10733 +f 13757/27785/10734 13934/28000/10734 13918/27979/10734 13758/27786/10734 +f 13758/27787/10735 13918/27980/10735 13917/27978/10735 13775/27806/10735 +f 13775/27806/10736 13917/27978/10736 13916/27977/10736 13771/27802/10736 +f 13771/27802/10737 13916/27977/10737 13902/27961/10737 13754/27782/10737 +f 13718/27737/10738 13755/27783/10738 13782/27813/10738 13742/27767/10738 +f 13742/27767/10739 13782/27813/10739 13786/27817/10739 13743/27769/10739 +f 13743/27769/10740 13786/27817/10740 13770/27801/10740 13744/27771/10740 +f 13744/27771/10741 13770/27801/10741 13769/27800/10741 13726/27749/10741 +f 13726/27749/10742 13769/27800/10742 13768/27799/10742 13722/27743/10742 +f 13722/27743/10743 13768/27799/10743 13754/27782/10743 13716/27734/10743 +f 13976/28062/10744 13939/28007/10744 13956/28036/10744 13990/28081/10744 +f 13990/28081/10745 13956/28036/10745 13960/28042/10745 13991/28082/10745 +f 13991/28082/10746 13960/28042/10746 13943/28016/10746 13992/28083/10746 +f 13992/28084/10747 13943/28017/10747 13942/28013/10747 14008/28104/10747 +f 14008/28104/10748 13942/28013/10748 13941/28011/10748 14004/28099/10748 +f 14004/28099/10749 13941/28011/10749 13938/28005/10749 13977/28063/10749 +f 13792/27824/10750 13828/27870/10750 13845/27888/10750 13816/27856/10750 +f 13816/27856/10751 13845/27888/10751 13849/27893/10751 13817/27858/10751 +f 13817/27858/10752 13849/27893/10752 13832/27874/10752 13818/27860/10752 +f 13818/27860/10753 13832/27874/10753 13831/27873/10753 13800/27836/10753 +f 13800/27836/10754 13831/27873/10754 13830/27872/10754 13796/27831/10754 +f 13796/27831/10755 13830/27872/10755 13827/27869/10755 13790/27822/10755 +f 13864/27910/10756 13902/27961/10756 13919/27981/10756 13867/27915/10756 +f 13867/27915/10757 13919/27981/10757 13923/27986/10757 13868/27917/10757 +f 13868/27917/10758 13923/27986/10758 13906/27965/10758 13869/27919/10758 +f 13869/27919/10759 13906/27965/10759 13905/27964/10759 13886/27941/10759 +f 13886/27941/10760 13905/27964/10760 13904/27963/10760 13882/27935/10760 +f 13882/27935/10761 13904/27963/10761 13901/27960/10761 13865/27911/10761 +f 13791/27823/10762 13940/28009/10762 13967/28051/10762 13805/27841/10762 +f 13805/27841/10763 13967/28051/10763 13971/28056/10763 13806/27842/10763 +f 13806/27842/10764 13971/28056/10764 13955/28033/10764 13807/27843/10764 +f 13807/27844/10765 13955/28034/10765 13954/28032/10765 13823/27865/10765 +f 13823/27865/10766 13954/28032/10766 13953/28031/10766 13819/27861/10766 +f 13819/27861/10767 13953/28031/10767 13939/28008/10767 13792/27825/10767 +f 13717/27735/10768 13791/27823/10768 13808/27845/10768 13731/27755/10768 +f 13731/27755/10769 13808/27845/10769 13812/27850/10769 13732/27756/10769 +f 13732/27756/10770 13812/27850/10770 13795/27829/10770 13733/27757/10770 +f 13733/27757/10771 13795/27829/10771 13794/27828/10771 13749/27777/10771 +f 13749/27777/10772 13794/27828/10772 13793/27826/10772 13745/27772/10772 +f 13745/27773/10773 13793/27827/10773 13790/27822/10773 13718/27737/10773 +f 13975/28061/10774 13829/27871/10774 13856/27901/10774 13978/28064/10774 +f 13978/28064/10775 13856/27901/10775 13860/27905/10775 13979/28065/10775 +f 13979/28065/10776 13860/27905/10776 13844/27886/10776 13980/28066/10776 +f 13980/28067/10777 13844/27887/10777 13843/27885/10777 13997/28090/10777 +f 13997/28090/10778 13843/27885/10778 13842/27884/10778 13993/28085/10778 +f 13993/28085/10779 13842/27884/10779 13828/27870/10779 13976/28062/10779 +f 13940/28009/10780 13866/27913/10780 13893/27950/10780 13964/28047/10780 +f 13964/28047/10781 13893/27950/10781 13897/27955/10781 13965/28048/10781 +f 13965/28048/10782 13897/27955/10782 13881/27932/10782 13966/28049/10782 +f 13966/28050/10783 13881/27933/10783 13880/27931/10783 13948/28023/10783 +f 13948/28023/10784 13880/27931/10784 13879/27930/10784 13944/28018/10784 +f 13944/28018/10785 13879/27930/10785 13865/27912/10785 13938/28006/10785 +f 13866/27913/10786 13717/27735/10786 13734/27758/10786 13890/27946/10786 +f 13890/27946/10787 13734/27758/10787 13738/27762/10787 13891/27947/10787 +f 13891/27947/10788 13738/27762/10788 13721/27740/10788 13892/27948/10788 +f 13892/27949/10789 13721/27741/10789 13720/27739/10789 13874/27924/10789 +f 13874/27924/10790 13720/27739/10790 13719/27738/10790 13870/27920/10790 +f 13870/27920/10791 13719/27738/10791 13716/27733/10791 13864/27909/10791 +f 13829/27871/10792 13753/27781/10792 13759/27788/10792 13853/27898/10792 +f 13853/27898/10793 13759/27788/10793 13763/27793/10793 13854/27899/10793 +f 13854/27899/10794 13763/27793/10794 13781/27812/10794 13855/27900/10794 +f 13855/27900/10795 13781/27812/10795 13780/27811/10795 13837/27879/10795 +f 13837/27879/10796 13780/27811/10796 13779/27810/10796 13833/27875/10796 +f 13833/27875/10797 13779/27810/10797 13755/27783/10797 13827/27869/10797 +f 13902/27961/10664 13864/27910/10664 13716/27734/10664 13754/27782/10664 +f 14013/28110/10798 14014/28111/10798 14015/28112/10798 14012/28109/10798 +f 14017/28114/10799 14018/28115/10799 14019/28116/10799 14016/28113/10799 +f 14021/28118/10800 14022/28119/10800 14023/28120/10800 14020/28117/10800 +f 14025/28122/10801 14026/28123/10801 14027/28124/10801 14024/28121/10801 +f 13753/27781/10509 13756/27784/10509 14014/28111/10509 14013/28110/10509 +f 13975/28061/10512 13978/28064/10512 14026/28123/10512 14025/28122/10512 +f 13829/27871/10664 13853/27898/10664 14018/28115/10664 14017/28114/10664 +f 13903/27962/10510 13927/27991/10510 14022/28119/10510 14021/28118/10510 +f 13756/27784/10802 13760/27789/10802 14015/28112/10802 14014/28111/10802 +f 13978/28064/10803 13982/28069/10803 14027/28124/10803 14026/28123/10803 +f 13853/27898/10804 13857/27902/10804 14019/28116/10804 14018/28115/10804 +f 13927/27991/10805 13931/27996/10805 14023/28120/10805 14022/28119/10805 +f 13760/27789/10806 13759/27788/10806 14012/28109/10806 14015/28112/10806 +f 13982/28069/10807 13981/28068/10807 14024/28121/10807 14027/28124/10807 +f 13857/27902/10808 13856/27901/10808 14016/28113/10808 14019/28116/10808 +f 13931/27996/10809 13930/27995/10809 14020/28117/10809 14023/28120/10809 +o Top.010 +v -6.384461 0.737263 4.192842 +v -6.384461 0.749833 4.091918 +v -6.490153 0.737263 4.091918 +v -6.384461 0.740515 4.189405 +v -6.384461 0.743549 4.179316 +v -6.384461 0.746151 4.163282 +v -6.411807 0.737263 4.189405 +v -6.412667 0.740645 4.185314 +v -6.412207 0.743568 4.175109 +v -6.411639 0.745849 4.160914 +v -6.437316 0.737263 4.179316 +v -6.437506 0.740582 4.175044 +v -6.434806 0.743253 4.166492 +v -6.432591 0.745176 4.155456 +v -6.445483 0.744520 4.150186 +v -6.411807 0.749405 4.091918 +v -6.437316 0.748149 4.091918 +v -6.459197 0.746151 4.091918 +v -6.384461 0.749405 4.118030 +v -6.412900 0.748896 4.118851 +v -6.437478 0.747625 4.118412 +v -6.456650 0.745857 4.117870 +v -6.384461 0.748149 4.142388 +v -6.412366 0.747617 4.142570 +v -6.434831 0.746551 4.139991 +v -6.450994 0.745177 4.137877 +v -6.486555 0.737263 4.118030 +v -6.475988 0.737263 4.142388 +v -6.459197 0.737263 4.163282 +v -6.486555 0.740515 4.091918 +v -6.482270 0.740617 4.119073 +v -6.471583 0.740563 4.142543 +v -6.456717 0.740495 4.160850 +v -6.475988 0.743549 4.091918 +v -6.471515 0.743572 4.118564 +v -6.462558 0.743250 4.140015 +v -6.451002 0.742987 4.155449 +v -6.342639 0.660944 4.091918 +v -6.384461 0.673515 4.192842 +v -6.490153 0.673515 4.091918 +v -6.342639 0.661372 4.118030 +v -6.384461 0.662629 4.142388 +v -6.384461 0.664626 4.163282 +v -6.411807 0.661372 4.091918 +v -6.412667 0.661882 4.119073 +v -6.412207 0.663153 4.142543 +v -6.411639 0.664921 4.160850 +v -6.437316 0.662629 4.091918 +v -6.437506 0.663161 4.118564 +v -6.434806 0.664226 4.140015 +v -6.432591 0.665601 4.155449 +v -6.445483 0.666257 4.150186 +v -6.411807 0.673515 4.189405 +v -6.437316 0.673515 4.179316 +v -6.459197 0.673515 4.163282 +v -6.384461 0.670263 4.189405 +v -6.412900 0.670160 4.185314 +v -6.437478 0.670215 4.175109 +v -6.456650 0.670282 4.160914 +v -6.384461 0.667229 4.179316 +v -6.412366 0.667206 4.175044 +v -6.434831 0.667527 4.166492 +v -6.450994 0.667790 4.155456 +v -6.486555 0.670263 4.091918 +v -6.475988 0.667229 4.091918 +v -6.459197 0.664626 4.091918 +v -6.486555 0.673515 4.118030 +v -6.482270 0.670133 4.118851 +v -6.471583 0.667209 4.118412 +v -6.456717 0.664929 4.117870 +v -6.475988 0.673515 4.142388 +v -6.471515 0.670196 4.142570 +v -6.462558 0.667524 4.139991 +v -6.451002 0.665602 4.137877 +v -6.490154 0.737263 3.580123 +v -6.384461 0.749833 3.580123 +v -6.384461 0.737263 3.479198 +v -6.486555 0.740515 3.580123 +v -6.475988 0.743549 3.580123 +v -6.459197 0.746151 3.580123 +v -6.486555 0.737263 3.554011 +v -6.482270 0.740645 3.553189 +v -6.471583 0.743568 3.553629 +v -6.456717 0.745849 3.554170 +v -6.475988 0.737263 3.529652 +v -6.471515 0.740582 3.529470 +v -6.462558 0.743253 3.532049 +v -6.451002 0.745176 3.534164 +v -6.445483 0.744520 3.521854 +v -6.384461 0.749405 3.554011 +v -6.384461 0.748149 3.529652 +v -6.384461 0.746151 3.508759 +v -6.411807 0.749405 3.580123 +v -6.412667 0.748896 3.552967 +v -6.412207 0.747625 3.529498 +v -6.411640 0.745857 3.511190 +v -6.437316 0.748149 3.580123 +v -6.437506 0.747617 3.553476 +v -6.434806 0.746551 3.532025 +v -6.432591 0.745177 3.516591 +v -6.411807 0.737263 3.482635 +v -6.437316 0.737263 3.492724 +v -6.459197 0.737263 3.508759 +v -6.384461 0.740515 3.482635 +v -6.412900 0.740617 3.486727 +v -6.437478 0.740563 3.496931 +v -6.456650 0.740495 3.511126 +v -6.384461 0.743549 3.492724 +v -6.412366 0.743572 3.496996 +v -6.434831 0.743250 3.505549 +v -6.450994 0.742987 3.516584 +v -6.490154 0.673515 3.580123 +v -6.384461 0.673515 3.479198 +v -6.342639 0.660944 3.580123 +v -6.486555 0.673515 3.554011 +v -6.475988 0.673515 3.529652 +v -6.459197 0.673515 3.508759 +v -6.486555 0.670263 3.580123 +v -6.482270 0.670160 3.552967 +v -6.471583 0.670215 3.529498 +v -6.456717 0.670282 3.511190 +v -6.475988 0.667229 3.580123 +v -6.471515 0.667206 3.553476 +v -6.462558 0.667527 3.532025 +v -6.451002 0.667790 3.516591 +v -6.445483 0.666257 3.521854 +v -6.384461 0.670263 3.482635 +v -6.384461 0.667229 3.492724 +v -6.384461 0.664626 3.508759 +v -6.411807 0.673515 3.482635 +v -6.412667 0.670133 3.486727 +v -6.412207 0.667209 3.496931 +v -6.411640 0.664929 3.511126 +v -6.437316 0.673515 3.492724 +v -6.437507 0.670196 3.496996 +v -6.434806 0.667524 3.505549 +v -6.432591 0.665602 3.516584 +v -6.411807 0.661372 3.580123 +v -6.437316 0.662629 3.580123 +v -6.459197 0.664626 3.580123 +v -6.342639 0.661372 3.554011 +v -6.412900 0.661882 3.553189 +v -6.437478 0.663153 3.553629 +v -6.456650 0.664921 3.554170 +v -6.384461 0.662629 3.529652 +v -6.412366 0.663161 3.529470 +v -6.434831 0.664226 3.532049 +v -6.450994 0.665601 3.534164 +v -5.848487 0.737263 4.192842 +v -5.742795 0.737263 4.091917 +v -5.848487 0.749833 4.091917 +v -5.821141 0.737263 4.189405 +v -5.795632 0.737263 4.179316 +v -5.773751 0.737263 4.163281 +v -5.848487 0.740515 4.189405 +v -5.820048 0.740617 4.185313 +v -5.795470 0.740563 4.175109 +v -5.776298 0.740495 4.160914 +v -5.848487 0.743549 4.179316 +v -5.820582 0.743572 4.175044 +v -5.798118 0.743250 4.166491 +v -5.781954 0.742987 4.155456 +v -5.787466 0.744520 4.150186 +v -5.746394 0.740515 4.091917 +v -5.756960 0.743549 4.091917 +v -5.773751 0.746151 4.091917 +v -5.746394 0.737263 4.118029 +v -5.750679 0.740645 4.118851 +v -5.761365 0.743568 4.118411 +v -5.776231 0.745849 4.117869 +v -5.756960 0.737263 4.142387 +v -5.761433 0.740582 4.142570 +v -5.770390 0.743253 4.139991 +v -5.781947 0.745176 4.137877 +v -5.848487 0.749405 4.118029 +v -5.848487 0.748149 4.142387 +v -5.848487 0.746151 4.163281 +v -5.821141 0.749405 4.091917 +v -5.820281 0.748896 4.119073 +v -5.820741 0.747625 4.142542 +v -5.821309 0.745857 4.160850 +v -5.795632 0.748149 4.091917 +v -5.795442 0.747617 4.118564 +v -5.798142 0.746551 4.140015 +v -5.800357 0.745177 4.155449 +v -5.742795 0.673515 4.091917 +v -5.848487 0.673515 4.192842 +v -5.890309 0.660944 4.091917 +v -5.746394 0.673515 4.118029 +v -5.756960 0.673515 4.142387 +v -5.773751 0.673515 4.163281 +v -5.746394 0.670263 4.091917 +v -5.750679 0.670160 4.119073 +v -5.761365 0.670215 4.142542 +v -5.776231 0.670282 4.160850 +v -5.756960 0.667229 4.091917 +v -5.761433 0.667206 4.118564 +v -5.770390 0.667527 4.140015 +v -5.781947 0.667790 4.155449 +v -5.787466 0.666257 4.150186 +v -5.848487 0.670263 4.189405 +v -5.848487 0.667229 4.179316 +v -5.848487 0.664626 4.163281 +v -5.821141 0.673515 4.189405 +v -5.820281 0.670133 4.185313 +v -5.820741 0.667209 4.175109 +v -5.821309 0.664929 4.160914 +v -5.795632 0.673515 4.179316 +v -5.795442 0.670196 4.175044 +v -5.798142 0.667524 4.166491 +v -5.800357 0.665602 4.155456 +v -5.821141 0.661372 4.091917 +v -5.795632 0.662629 4.091917 +v -5.773751 0.664626 4.091917 +v -5.890309 0.661372 4.118029 +v -5.820048 0.661882 4.118851 +v -5.795470 0.663153 4.118411 +v -5.776298 0.664921 4.117869 +v -5.848487 0.662629 4.142387 +v -5.820582 0.663161 4.142570 +v -5.798118 0.664226 4.139991 +v -5.781954 0.665601 4.137877 +v -5.742795 0.737263 3.580122 +v -5.848487 0.737263 3.479198 +v -5.848487 0.749833 3.580123 +v -5.746394 0.737263 3.554011 +v -5.756960 0.737263 3.529652 +v -5.773751 0.737263 3.508758 +v -5.746394 0.740515 3.580122 +v -5.750679 0.740617 3.552967 +v -5.761365 0.740563 3.529497 +v -5.776231 0.740495 3.511190 +v -5.756960 0.743549 3.580122 +v -5.761433 0.743572 3.553476 +v -5.770390 0.743250 3.532025 +v -5.781947 0.742987 3.516591 +v -5.787466 0.744520 3.521854 +v -5.848487 0.740515 3.482635 +v -5.848487 0.743549 3.492724 +v -5.848487 0.746151 3.508758 +v -5.821142 0.737263 3.482635 +v -5.820281 0.740645 3.486726 +v -5.820742 0.743568 3.496931 +v -5.821309 0.745849 3.511126 +v -5.795632 0.737263 3.492724 +v -5.795442 0.740582 3.496996 +v -5.798142 0.743253 3.505549 +v -5.800357 0.745176 3.516584 +v -5.821142 0.749405 3.580122 +v -5.795632 0.748149 3.580122 +v -5.773751 0.746151 3.580122 +v -5.848487 0.749405 3.554011 +v -5.820048 0.748896 3.553189 +v -5.795470 0.747625 3.553628 +v -5.776299 0.745857 3.554170 +v -5.848487 0.748149 3.529652 +v -5.820582 0.747617 3.529470 +v -5.798118 0.746551 3.532049 +v -5.781954 0.745177 3.534163 +v -5.890309 0.660944 3.580123 +v -5.848487 0.673515 3.479198 +v -5.742795 0.673515 3.580122 +v -5.890309 0.661372 3.554011 +v -5.848487 0.662629 3.529652 +v -5.848487 0.664626 3.508758 +v -5.821142 0.661372 3.580122 +v -5.820281 0.661882 3.552967 +v -5.820742 0.663153 3.529497 +v -5.821309 0.664921 3.511190 +v -5.795632 0.662629 3.580122 +v -5.795442 0.663161 3.553476 +v -5.798142 0.664226 3.532025 +v -5.800357 0.665601 3.516591 +v -5.787466 0.666257 3.521854 +v -5.821142 0.673515 3.482635 +v -5.795632 0.673515 3.492724 +v -5.773751 0.673515 3.508758 +v -5.848487 0.670263 3.482635 +v -5.820048 0.670160 3.486726 +v -5.795470 0.670215 3.496931 +v -5.776299 0.670282 3.511126 +v -5.848487 0.667229 3.492724 +v -5.820582 0.667206 3.496996 +v -5.798118 0.667527 3.505549 +v -5.781954 0.667790 3.516584 +v -5.746394 0.670263 3.580122 +v -5.756960 0.667229 3.580122 +v -5.773751 0.664626 3.580122 +v -5.746394 0.673515 3.554011 +v -5.750679 0.670133 3.553189 +v -5.761365 0.667209 3.553628 +v -5.776231 0.664929 3.554170 +v -5.756960 0.673515 3.529652 +v -5.761433 0.670196 3.529470 +v -5.770390 0.667524 3.532049 +v -5.781947 0.665602 3.534163 +v -6.411807 -0.015018 4.091918 +v -6.342639 -0.015446 4.091918 +v -6.342639 -0.015018 4.118030 +v -6.412667 -0.014508 4.119073 +v -6.342639 -0.015018 3.554011 +v -6.342639 -0.015446 3.580123 +v -6.411807 -0.015018 3.580123 +v -6.412900 -0.014508 3.553189 +v -5.890309 -0.015018 4.118029 +v -5.890309 -0.015446 4.091917 +v -5.821141 -0.015018 4.091917 +v -5.820048 -0.014508 4.118851 +v -5.821142 -0.015018 3.580122 +v -5.890309 -0.015446 3.580123 +v -5.890309 -0.015018 3.554011 +v -5.820281 -0.014508 3.552967 +vn -0.0000 -0.0444 -0.0000 +vn 0.3737 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.3568 +vn -0.0000 0.0444 -0.0000 +vn -0.3737 -0.0000 -0.0000 +vn -0.0510 0.0061 0.3501 +vn -0.0497 0.0173 0.3254 +vn -0.0466 0.0270 0.2801 +vn -0.1448 0.0060 0.3254 +vn -0.1412 0.0168 0.3016 +vn -0.1339 0.0256 0.2619 +vn -0.2268 0.0056 0.2801 +vn -0.2158 0.0159 0.2617 +vn -0.1981 0.0236 0.2362 +vn -0.0510 0.0436 0.0487 +vn -0.1451 0.0405 0.0474 +vn -0.2268 0.0349 0.0445 +vn -0.0503 0.0405 0.1383 +vn -0.1414 0.0376 0.1348 +vn -0.2156 0.0326 0.1279 +vn -0.0468 0.0349 0.2165 +vn -0.1341 0.0326 0.2061 +vn -0.1980 0.0294 0.1891 +vn -0.3666 0.0061 0.0487 +vn -0.3408 0.0059 0.1385 +vn -0.2933 0.0055 0.2166 +vn -0.3408 0.0172 0.0480 +vn -0.3158 0.0168 0.1350 +vn -0.2742 0.0159 0.2059 +vn -0.2933 0.0270 0.0447 +vn -0.2740 0.0257 0.1280 +vn -0.2474 0.0236 0.1891 +vn -0.0296 -0.0418 0.1189 +vn -0.0466 -0.0349 0.2166 +vn -0.1448 -0.0405 0.0480 +vn -0.1412 -0.0376 0.1350 +vn -0.1339 -0.0326 0.2059 +vn -0.2268 -0.0349 0.0447 +vn -0.2158 -0.0326 0.1280 +vn -0.1981 -0.0294 0.1891 +vn -0.0510 -0.0061 0.3501 +vn -0.1451 -0.0059 0.3254 +vn -0.2268 -0.0055 0.2801 +vn -0.0503 -0.0172 0.3254 +vn -0.1414 -0.0168 0.3016 +vn -0.2156 -0.0159 0.2619 +vn -0.0468 -0.0270 0.2801 +vn -0.1341 -0.0257 0.2617 +vn -0.1980 -0.0236 0.2362 +vn -0.3666 -0.0061 0.0487 +vn -0.3408 -0.0173 0.0474 +vn -0.2933 -0.0270 0.0445 +vn -0.3408 -0.0060 0.1383 +vn -0.3158 -0.0168 0.1348 +vn -0.2742 -0.0256 0.1279 +vn -0.2933 -0.0056 0.2165 +vn -0.2740 -0.0159 0.2061 +vn -0.2474 -0.0236 0.1891 +vn -0.3666 0.0061 -0.0487 +vn -0.3408 0.0173 -0.0474 +vn -0.2933 0.0270 -0.0445 +vn -0.3408 0.0060 -0.1383 +vn -0.3158 0.0168 -0.1348 +vn -0.2742 0.0256 -0.1279 +vn -0.2933 0.0056 -0.2165 +vn -0.2740 0.0159 -0.2061 +vn -0.2474 0.0236 -0.1891 +vn -0.0510 0.0436 -0.0487 +vn -0.0497 0.0405 -0.1385 +vn -0.0466 0.0349 -0.2166 +vn -0.1448 0.0405 -0.0480 +vn -0.1412 0.0376 -0.1350 +vn -0.1339 0.0326 -0.2059 +vn -0.2268 0.0349 -0.0447 +vn -0.2158 0.0326 -0.1280 +vn -0.1981 0.0294 -0.1891 +vn -0.0510 0.0061 -0.3501 +vn -0.1451 0.0059 -0.3254 +vn -0.2268 0.0055 -0.2801 +vn -0.0503 0.0172 -0.3254 +vn -0.1414 0.0168 -0.3016 +vn -0.2156 0.0159 -0.2619 +vn -0.0468 0.0270 -0.2801 +vn -0.1341 0.0257 -0.2617 +vn -0.1980 0.0236 -0.2362 +vn -0.3666 -0.0061 -0.0487 +vn -0.3408 -0.0059 -0.1385 +vn -0.2933 -0.0055 -0.2166 +vn -0.3408 -0.0172 -0.0480 +vn -0.3158 -0.0168 -0.1350 +vn -0.2742 -0.0159 -0.2059 +vn -0.2933 -0.0270 -0.0447 +vn -0.2740 -0.0257 -0.1280 +vn -0.2474 -0.0236 -0.1891 +vn -0.0510 -0.0061 -0.3501 +vn -0.0497 -0.0173 -0.3254 +vn -0.0466 -0.0270 -0.2801 +vn -0.1448 -0.0060 -0.3254 +vn -0.1412 -0.0168 -0.3016 +vn -0.1339 -0.0256 -0.2619 +vn -0.2268 -0.0056 -0.2801 +vn -0.2158 -0.0159 -0.2617 +vn -0.1981 -0.0236 -0.2362 +vn -0.1451 -0.0405 -0.0474 +vn -0.2268 -0.0349 -0.0445 +vn -0.0300 -0.0418 -0.1185 +vn -0.1414 -0.0376 -0.1348 +vn -0.2156 -0.0326 -0.1279 +vn -0.0468 -0.0349 -0.2165 +vn -0.1341 -0.0326 -0.2061 +vn -0.1980 -0.0294 -0.1891 +vn 0.0510 0.0061 0.3501 +vn 0.1451 0.0059 0.3254 +vn 0.2268 0.0055 0.2801 +vn 0.0503 0.0172 0.3254 +vn 0.1414 0.0168 0.3016 +vn 0.2156 0.0159 0.2619 +vn 0.0468 0.0270 0.2801 +vn 0.1341 0.0257 0.2617 +vn 0.1980 0.0236 0.2362 +vn 0.3666 0.0061 0.0487 +vn 0.3408 0.0173 0.0474 +vn 0.2933 0.0270 0.0445 +vn 0.3408 0.0060 0.1383 +vn 0.3158 0.0168 0.1348 +vn 0.2742 0.0256 0.1279 +vn 0.2933 0.0056 0.2165 +vn 0.2740 0.0159 0.2061 +vn 0.2474 0.0236 0.1891 +vn 0.0510 0.0436 0.0487 +vn 0.0497 0.0405 0.1385 +vn 0.0466 0.0349 0.2166 +vn 0.1448 0.0405 0.0480 +vn 0.1412 0.0376 0.1350 +vn 0.1339 0.0326 0.2059 +vn 0.2268 0.0349 0.0447 +vn 0.2158 0.0326 0.1280 +vn 0.1981 0.0294 0.1891 +vn 0.3666 -0.0061 0.0487 +vn 0.3408 -0.0059 0.1385 +vn 0.2933 -0.0055 0.2166 +vn 0.3408 -0.0172 0.0480 +vn 0.3158 -0.0168 0.1350 +vn 0.2742 -0.0159 0.2059 +vn 0.2933 -0.0270 0.0447 +vn 0.2740 -0.0257 0.1280 +vn 0.2474 -0.0236 0.1891 +vn 0.0510 -0.0061 0.3501 +vn 0.0497 -0.0173 0.3254 +vn 0.0466 -0.0270 0.2801 +vn 0.1448 -0.0060 0.3254 +vn 0.1412 -0.0168 0.3016 +vn 0.1339 -0.0256 0.2619 +vn 0.2268 -0.0056 0.2801 +vn 0.2158 -0.0159 0.2617 +vn 0.1981 -0.0236 0.2362 +vn -0.0000 -0.0000 0.3568 +vn 0.1451 -0.0405 0.0474 +vn 0.2268 -0.0349 0.0445 +vn 0.0300 -0.0418 0.1185 +vn 0.1414 -0.0376 0.1348 +vn 0.2156 -0.0326 0.1279 +vn 0.0468 -0.0349 0.2165 +vn 0.1341 -0.0326 0.2061 +vn 0.1980 -0.0294 0.1891 +vn 0.3666 0.0061 -0.0487 +vn 0.3408 0.0059 -0.1385 +vn 0.2933 0.0055 -0.2166 +vn 0.3408 0.0172 -0.0480 +vn 0.3158 0.0168 -0.1350 +vn 0.2742 0.0159 -0.2059 +vn 0.2933 0.0270 -0.0447 +vn 0.2740 0.0257 -0.1280 +vn 0.2474 0.0236 -0.1891 +vn 0.0510 0.0061 -0.3501 +vn 0.0497 0.0173 -0.3254 +vn 0.0466 0.0270 -0.2801 +vn 0.1448 0.0060 -0.3254 +vn 0.1412 0.0168 -0.3016 +vn 0.1339 0.0256 -0.2619 +vn 0.2268 0.0056 -0.2801 +vn 0.2158 0.0159 -0.2617 +vn 0.1981 0.0236 -0.2362 +vn 0.0510 0.0436 -0.0487 +vn 0.1451 0.0405 -0.0474 +vn 0.2268 0.0349 -0.0445 +vn 0.0503 0.0405 -0.1383 +vn 0.1414 0.0376 -0.1348 +vn 0.2156 0.0326 -0.1279 +vn 0.0468 0.0349 -0.2165 +vn 0.1341 0.0326 -0.2061 +vn 0.1980 0.0294 -0.1891 +vn 0.0296 -0.0418 -0.1189 +vn 0.0466 -0.0349 -0.2166 +vn 0.1448 -0.0405 -0.0480 +vn 0.1412 -0.0376 -0.1350 +vn 0.1339 -0.0326 -0.2059 +vn 0.2268 -0.0349 -0.0447 +vn 0.2158 -0.0326 -0.1280 +vn 0.1981 -0.0294 -0.1891 +vn 0.0510 -0.0061 -0.3501 +vn 0.1451 -0.0059 -0.3254 +vn 0.2268 -0.0055 -0.2801 +vn 0.0503 -0.0172 -0.3254 +vn 0.1414 -0.0168 -0.3016 +vn 0.2156 -0.0159 -0.2619 +vn 0.0468 -0.0270 -0.2801 +vn 0.1341 -0.0257 -0.2617 +vn 0.1980 -0.0236 -0.2362 +vn 0.3666 -0.0061 -0.0487 +vn 0.3408 -0.0173 -0.0474 +vn 0.2933 -0.0270 -0.0445 +vn 0.3408 -0.0060 -0.1383 +vn 0.3158 -0.0168 -0.1348 +vn 0.2742 -0.0256 -0.1279 +vn 0.2933 -0.0056 -0.2165 +vn 0.2740 -0.0159 -0.2061 +vn 0.2474 -0.0236 -0.1891 +vn 0.0194 -0.0444 -0.0000 +vn 0.1430 -0.0411 -0.0000 +vn 0.2275 -0.0353 -0.0000 +vn 0.2964 -0.0271 -0.0000 +vn 0.3452 -0.0170 -0.0000 +vn 0.3705 -0.0058 -0.0000 +vn -0.0000 -0.0441 0.0466 +vn -0.0000 -0.0411 0.1366 +vn -0.0000 -0.0353 0.2172 +vn -0.0000 -0.0271 0.2831 +vn -0.0000 -0.0170 0.3297 +vn -0.0000 -0.0058 0.3538 +vn -0.3705 -0.0000 0.0466 +vn -0.3452 -0.0000 0.1365 +vn -0.2964 -0.0000 0.2172 +vn -0.2275 -0.0000 0.2831 +vn -0.1430 -0.0000 0.3297 +vn -0.0488 -0.0000 0.3538 +vn 0.0488 -0.0000 -0.3538 +vn 0.1430 -0.0000 -0.3297 +vn 0.2275 -0.0000 -0.2831 +vn 0.2964 -0.0000 -0.2172 +vn 0.3452 -0.0000 -0.1365 +vn 0.3705 -0.0000 -0.0466 +vn -0.0488 -0.0000 -0.3538 +vn -0.1430 -0.0000 -0.3297 +vn -0.2275 -0.0000 -0.2831 +vn -0.2964 -0.0000 -0.2172 +vn -0.3452 -0.0000 -0.1365 +vn -0.3705 -0.0000 -0.0466 +vn 0.0488 -0.0000 0.3538 +vn 0.1430 -0.0000 0.3297 +vn 0.2275 -0.0000 0.2831 +vn 0.2964 -0.0000 0.2172 +vn 0.3452 -0.0000 0.1365 +vn 0.3705 -0.0000 0.0466 +vn -0.0000 0.0441 -0.0466 +vn -0.0000 0.0411 -0.1365 +vn -0.0000 0.0353 -0.2172 +vn -0.0000 0.0271 -0.2831 +vn -0.0000 0.0170 -0.3297 +vn -0.0000 0.0058 -0.3538 +vn -0.0488 0.0441 -0.0000 +vn -0.1430 0.0411 -0.0000 +vn -0.2275 0.0353 -0.0000 +vn -0.2964 0.0271 -0.0000 +vn -0.3452 0.0170 -0.0000 +vn -0.3705 0.0058 -0.0000 +vn -0.0000 -0.0441 -0.0466 +vn -0.0000 -0.0411 -0.1366 +vn -0.0000 -0.0353 -0.2172 +vn -0.0000 -0.0271 -0.2831 +vn -0.0000 -0.0170 -0.3297 +vn -0.0000 -0.0058 -0.3538 +vn 0.0488 0.0441 -0.0000 +vn 0.1430 0.0411 -0.0000 +vn 0.2275 0.0353 -0.0000 +vn 0.2964 0.0271 -0.0000 +vn 0.3452 0.0170 -0.0000 +vn 0.3705 0.0058 -0.0000 +vn -0.0000 0.0441 0.0466 +vn -0.0000 0.0411 0.1365 +vn -0.0000 0.0353 0.2172 +vn -0.0000 0.0271 0.2831 +vn -0.0000 0.0170 0.3297 +vn -0.0000 0.0058 0.3538 +vn -0.0194 -0.0444 -0.0000 +vn -0.1430 -0.0411 -0.0000 +vn -0.2275 -0.0353 -0.0000 +vn -0.2964 -0.0271 -0.0000 +vn -0.3452 -0.0170 -0.0000 +vn -0.3705 -0.0058 -0.0000 +vn -0.0205 -0.0439 0.0496 +vn -0.0206 -0.0439 -0.0497 +vn 0.0206 -0.0439 0.0497 +vn 0.0205 -0.0439 -0.0496 +vn 0.0058 -0.0000 0.3568 +vn -0.0058 -0.0000 -0.3568 +vn -0.3734 -0.0000 0.0138 +vn 0.3734 -0.0000 -0.0138 +vn -0.3735 -0.0000 -0.0108 +vn 0.3735 -0.0000 0.0108 +vn 0.0046 -0.0000 -0.3568 +vn -0.0046 -0.0000 0.3568 +vt 0.579948 0.337500 +vt 0.840885 0.798611 +vt 0.578906 0.336574 +vt 0.579948 0.336574 +vt 0.840885 0.816204 +vt 0.579948 0.337500 +vt 0.579948 0.337500 +vt 0.578906 0.336574 +vt 0.579427 0.337500 +vt 0.579948 0.337500 +vt 0.840885 0.800463 +vt 0.579948 0.337500 +vt 0.579948 0.337500 +vt 0.579427 0.337500 +vt 0.578906 0.336574 +vt 0.579948 0.337500 +vt 0.840885 0.803241 +vt 0.579948 0.337500 +vt 0.579948 0.337500 +vt 0.579427 0.337500 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.579948 0.336574 +vt 0.840885 0.814352 +vt 0.579948 0.336574 +vt 0.840885 0.811574 +vt 0.579948 0.336574 +vt 0.840885 0.807870 +vt 0.579948 0.336574 +vt 0.842969 0.816204 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.776823 0.816204 +vt 0.794531 0.798611 +vt 0.794531 0.816204 +vt 0.776823 0.814352 +vt 0.776823 0.811574 +vt 0.776823 0.807870 +vt 0.785677 0.798611 +vt 0.778906 0.816204 +vt 0.779427 0.813426 +vt 0.779427 0.811574 +vt 0.778906 0.807870 +vt 0.785677 0.800463 +vt 0.780990 0.816204 +vt 0.780990 0.813426 +vt 0.780990 0.812500 +vt 0.780990 0.807870 +vt 0.785677 0.802315 +vt 0.785677 0.808796 +vt 0.794531 0.800463 +vt 0.794531 0.803241 +vt 0.794531 0.807870 +vt 0.792448 0.798611 +vt 0.792448 0.801389 +vt 0.792448 0.803241 +vt 0.792448 0.807870 +vt 0.790365 0.798611 +vt 0.790365 0.801389 +vt 0.790365 0.802315 +vt 0.790365 0.807870 +vt 0.792448 0.816204 +vt 0.790365 0.816204 +vt 0.785677 0.816204 +vt 0.794531 0.814352 +vt 0.792448 0.813426 +vt 0.790365 0.813426 +vt 0.785677 0.814352 +vt 0.794531 0.811574 +vt 0.792448 0.811574 +vt 0.790365 0.812500 +vt 0.785677 0.812500 +vt 0.579948 0.333796 +vt 0.840885 0.862500 +vt 0.578906 0.333796 +vt 0.840885 0.880093 +vt 0.579948 0.331944 +vt 0.579948 0.333796 +vt 0.842969 0.862500 +vt 0.579948 0.333796 +vt 0.579427 0.333796 +vt 0.579948 0.332870 +vt 0.840885 0.864352 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.579427 0.332870 +vt 0.579948 0.332870 +vt 0.840885 0.867130 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.579427 0.332870 +vt 0.579427 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.579427 0.331944 +vt 0.578906 0.333796 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.579427 0.331944 +vt 0.578906 0.333796 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.579427 0.332870 +vt 0.579948 0.331944 +vt 0.840885 0.877315 +vt 0.579948 0.332870 +vt 0.840885 0.875463 +vt 0.579948 0.332870 +vt 0.840885 0.870833 +vt 0.579948 0.331944 +vt 0.579948 0.331944 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.579948 0.331944 +vt 0.579948 0.331944 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.794531 0.862500 +vt 0.794531 0.880093 +vt 0.776823 0.862500 +vt 0.794531 0.864352 +vt 0.794531 0.867130 +vt 0.794531 0.870833 +vt 0.792448 0.862500 +vt 0.792448 0.864352 +vt 0.792448 0.867130 +vt 0.792448 0.870833 +vt 0.790365 0.862500 +vt 0.790365 0.864352 +vt 0.790365 0.866204 +vt 0.790365 0.870833 +vt 0.787240 0.870833 +vt 0.792448 0.880093 +vt 0.790365 0.880093 +vt 0.776823 0.870833 +vt 0.785677 0.880093 +vt 0.794531 0.877315 +vt 0.792448 0.877315 +vt 0.790365 0.877315 +vt 0.785677 0.877315 +vt 0.778906 0.870833 +vt 0.794531 0.875463 +vt 0.792448 0.875463 +vt 0.790365 0.875463 +vt 0.785677 0.876389 +vt 0.780990 0.870833 +vt 0.778906 0.862500 +vt 0.780990 0.862500 +vt 0.785677 0.862500 +vt 0.776823 0.864352 +vt 0.779427 0.864352 +vt 0.780990 0.864352 +vt 0.785677 0.864352 +vt 0.776823 0.867130 +vt 0.779427 0.867130 +vt 0.780990 0.866204 +vt 0.785677 0.866204 +vt 0.579948 0.340278 +vt 0.840885 0.752315 +vt 0.840885 0.734722 +vt 0.579948 0.342130 +vt 0.575781 0.336574 +vt 0.579948 0.341204 +vt 0.840885 0.750463 +vt 0.579948 0.341204 +vt 0.840885 0.747685 +vt 0.579948 0.341204 +vt 0.840885 0.743981 +vt 0.579948 0.340278 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579948 0.340278 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579427 0.341204 +vt 0.575260 0.336574 +vt 0.579948 0.342130 +vt 0.579948 0.342130 +vt 0.575260 0.336574 +vt 0.579427 0.342130 +vt 0.579948 0.342130 +vt 0.840885 0.737500 +vt 0.579948 0.342130 +vt 0.579948 0.342130 +vt 0.579427 0.342130 +vt 0.575260 0.336574 +vt 0.579948 0.341204 +vt 0.840885 0.739352 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579427 0.341204 +vt 0.575260 0.336574 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.579427 0.340278 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.579427 0.341204 +vt 0.575781 0.336574 +vt 0.575260 0.336574 +vt 0.575260 0.336574 +vt 0.575260 0.336574 +vt 0.579427 0.341204 +vt 0.575260 0.336574 +vt 0.794531 0.734722 +vt 0.794531 0.752315 +vt 0.730990 0.816204 +vt 0.794531 0.737500 +vt 0.794531 0.739352 +vt 0.794531 0.743981 +vt 0.792448 0.734722 +vt 0.792448 0.737500 +vt 0.792448 0.739352 +vt 0.792448 0.743981 +vt 0.790365 0.734722 +vt 0.790365 0.737500 +vt 0.790365 0.739352 +vt 0.790365 0.743981 +vt 0.789323 0.743981 +vt 0.785677 0.746759 +vt 0.722135 0.810648 +vt 0.792448 0.752315 +vt 0.790365 0.752315 +vt 0.730990 0.807870 +vt 0.785677 0.752315 +vt 0.794531 0.750463 +vt 0.792448 0.750463 +vt 0.790365 0.750463 +vt 0.785677 0.750463 +vt 0.728906 0.807870 +vt 0.794531 0.747685 +vt 0.792448 0.747685 +vt 0.790365 0.748611 +vt 0.785677 0.748611 +vt 0.726823 0.807870 +vt 0.728906 0.816204 +vt 0.726302 0.816204 +vt 0.722135 0.816204 +vt 0.785677 0.734722 +vt 0.730990 0.814352 +vt 0.728385 0.813426 +vt 0.726302 0.813426 +vt 0.785677 0.737500 +vt 0.722135 0.814352 +vt 0.730990 0.811574 +vt 0.728906 0.811574 +vt 0.726302 0.812500 +vt 0.785677 0.738426 +vt 0.722135 0.812500 +vt 0.840885 0.688426 +vt 0.579948 0.344907 +vt 0.840885 0.926389 +vt 0.579948 0.329167 +vt 0.575781 0.333796 +vt 0.579948 0.344907 +vt 0.840885 0.686574 +vt 0.579948 0.344907 +vt 0.840885 0.684722 +vt 0.579948 0.345833 +vt 0.579948 0.328241 +vt 0.840885 0.934722 +vt 0.840885 0.680093 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.345833 +vt 0.579948 0.328241 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.345833 +vt 0.579948 0.328241 +vt 0.579427 0.345833 +vt 0.579427 0.329167 +vt 0.575260 0.332870 +vt 0.579948 0.329167 +vt 0.579948 0.329167 +vt 0.575781 0.332870 +vt 0.579427 0.329167 +vt 0.579948 0.329167 +vt 0.840885 0.928241 +vt 0.579948 0.329167 +vt 0.579948 0.329167 +vt 0.579427 0.329167 +vt 0.575781 0.332870 +vt 0.579948 0.329167 +vt 0.840885 0.930093 +vt 0.579948 0.329167 +vt 0.579948 0.329167 +vt 0.579427 0.329167 +vt 0.575260 0.332870 +vt 0.575781 0.333796 +vt 0.575260 0.333796 +vt 0.575260 0.333796 +vt 0.579427 0.344907 +vt 0.575781 0.332870 +vt 0.575781 0.332870 +vt 0.575260 0.332870 +vt 0.579427 0.344907 +vt 0.575260 0.332870 +vt 0.575781 0.332870 +vt 0.575781 0.332870 +vt 0.575260 0.332870 +vt 0.579427 0.344907 +vt 0.575260 0.332870 +vt 0.730990 0.862500 +vt 0.794531 0.926389 +vt 0.794531 0.688426 +vt 0.730990 0.864352 +vt 0.730990 0.867130 +vt 0.730990 0.870833 +vt 0.785677 0.926389 +vt 0.728906 0.862500 +vt 0.728906 0.864352 +vt 0.728906 0.867130 +vt 0.728906 0.870833 +vt 0.785677 0.928241 +vt 0.726302 0.862500 +vt 0.726302 0.864352 +vt 0.726302 0.866204 +vt 0.726823 0.870833 +vt 0.785677 0.930093 +vt 0.725781 0.870833 +vt 0.789323 0.934722 +vt 0.785677 0.683796 +vt 0.794531 0.928241 +vt 0.794531 0.930093 +vt 0.794531 0.934722 +vt 0.794531 0.680093 +vt 0.792448 0.926389 +vt 0.792448 0.928241 +vt 0.792448 0.930093 +vt 0.792448 0.934722 +vt 0.792448 0.680093 +vt 0.790365 0.926389 +vt 0.790365 0.928241 +vt 0.790365 0.930093 +vt 0.790365 0.934722 +vt 0.790365 0.680093 +vt 0.792448 0.688426 +vt 0.790365 0.688426 +vt 0.722135 0.862500 +vt 0.785677 0.688426 +vt 0.794531 0.686574 +vt 0.792448 0.686574 +vt 0.790365 0.686574 +vt 0.722135 0.864352 +vt 0.785677 0.686574 +vt 0.794531 0.684722 +vt 0.792448 0.684722 +vt 0.790365 0.684722 +vt 0.722135 0.866204 +vt 0.785677 0.684722 +vt 0.778906 0.816204 +vt 0.776823 0.816204 +vt 0.776823 0.814352 +vt 0.779427 0.813426 +vt 0.776823 0.864352 +vt 0.776823 0.862500 +vt 0.778906 0.862500 +vt 0.779427 0.864352 +vt 0.730990 0.814352 +vt 0.730990 0.816204 +vt 0.728906 0.816204 +vt 0.728385 0.813426 +vt 0.728906 0.862500 +vt 0.730990 0.862500 +vt 0.730990 0.864352 +vt 0.728906 0.864352 +s 0 +usemtl CabnetDoors +f 14215/28354/10810 14065/28173/10810 14141/28263/10810 14287/28453/10810 +f 14289/28455/10811 14250/28397/10811 14177/28303/10811 14213/28352/10811 +f 14140/28262/10812 14104/28216/10812 14251/28399/10812 14288/28454/10812 +f 14029/28127/10813 14178/28305/10813 14252/28401/10813 14103/28215/10813 +f 14067/28175/10814 14030/28129/10814 14102/28214/10814 14139/28261/10814 +f 14028/28125/10815 14031/28130/10815 14035/28136/10815 14034/28134/10815 +f 14031/28130/10816 14032/28131/10816 14036/28137/10816 14035/28136/10816 +f 14032/28131/10817 14033/28133/10817 14037/28138/10817 14036/28137/10817 +f 14034/28134/10818 14035/28136/10818 14039/28142/10818 14038/28140/10818 +f 14035/28136/10819 14036/28137/10819 14040/28143/10819 14039/28142/10819 +f 14036/28137/10820 14037/28138/10820 14041/28144/10820 14040/28143/10820 +f 14038/28140/10821 14039/28142/10821 14060/28168/10821 14056/28162/10821 +f 14039/28142/10822 14040/28143/10822 14064/28172/10822 14060/28168/10822 +f 14040/28143/10823 14041/28144/10823 14042/28146/10823 14064/28172/10823 +f 14029/28127/10824 14043/28147/10824 14047/28151/10824 14046/28150/10824 +f 14043/28147/10825 14044/28148/10825 14048/28152/10825 14047/28151/10825 +f 14044/28148/10826 14045/28149/10826 14049/28153/10826 14048/28152/10826 +f 14046/28150/10827 14047/28151/10827 14051/28155/10827 14050/28154/10827 +f 14047/28151/10828 14048/28152/10828 14052/28156/10828 14051/28155/10828 +f 14048/28152/10829 14049/28153/10829 14053/28157/10829 14052/28156/10829 +f 14050/28154/10830 14051/28155/10830 14037/28139/10830 14033/28132/10830 +f 14051/28155/10831 14052/28156/10831 14041/28145/10831 14037/28139/10831 +f 14052/28156/10832 14053/28157/10832 14042/28146/10832 14041/28145/10832 +f 14030/28128/10833 14054/28158/10833 14058/28166/10833 14057/28164/10833 +f 14054/28158/10834 14055/28160/10834 14059/28167/10834 14058/28166/10834 +f 14055/28160/10835 14056/28162/10835 14060/28168/10835 14059/28167/10835 +f 14057/28164/10836 14058/28166/10836 14062/28170/10836 14061/28169/10836 +f 14058/28166/10837 14059/28167/10837 14063/28171/10837 14062/28170/10837 +f 14059/28167/10838 14060/28168/10838 14064/28172/10838 14063/28171/10838 +f 14061/28169/10839 14062/28170/10839 14049/28153/10839 14045/28149/10839 +f 14062/28170/10840 14063/28171/10840 14053/28157/10840 14049/28153/10840 +f 14063/28171/10841 14064/28172/10841 14042/28146/10841 14053/28157/10841 +f 14242/28387/10814 14215/28354/10814 14333/28510/10814 14332/28509/10814 +f 14068/28176/10842 14069/28177/10842 14073/28182/10842 14072/28181/10842 +f 14069/28177/10843 14070/28178/10843 14074/28183/10843 14073/28182/10843 +f 14071/28180/10844 14072/28181/10844 14076/28186/10844 14075/28185/10844 +f 14072/28181/10845 14073/28182/10845 14077/28187/10845 14076/28186/10845 +f 14073/28182/10846 14074/28183/10846 14078/28188/10846 14077/28187/10846 +f 14075/28185/10847 14076/28186/10847 14097/28208/10847 14093/28204/10847 +f 14076/28186/10848 14077/28187/10848 14101/28212/10848 14097/28208/10848 +f 14077/28187/10849 14078/28188/10849 14079/28190/10849 14101/28212/10849 +f 14066/28174/10850 14080/28191/10850 14084/28195/10850 14083/28194/10850 +f 14080/28191/10851 14081/28192/10851 14085/28196/10851 14084/28195/10851 +f 14081/28192/10852 14082/28193/10852 14086/28197/10852 14085/28196/10852 +f 14083/28194/10853 14084/28195/10853 14088/28199/10853 14087/28198/10853 +f 14084/28195/10854 14085/28196/10854 14089/28200/10854 14088/28199/10854 +f 14085/28196/10855 14086/28197/10855 14090/28201/10855 14089/28200/10855 +f 14087/28198/10856 14088/28199/10856 14074/28184/10856 14070/28179/10856 +f 14088/28199/10857 14089/28200/10857 14078/28189/10857 14074/28184/10857 +f 14089/28200/10858 14090/28201/10858 14079/28190/10858 14078/28189/10858 +f 14067/28175/10859 14091/28202/10859 14095/28206/10859 14094/28205/10859 +f 14091/28202/10860 14092/28203/10860 14096/28207/10860 14095/28206/10860 +f 14092/28203/10861 14093/28204/10861 14097/28208/10861 14096/28207/10861 +f 14094/28205/10862 14095/28206/10862 14099/28210/10862 14098/28209/10862 +f 14095/28206/10863 14096/28207/10863 14100/28211/10863 14099/28210/10863 +f 14096/28207/10864 14097/28208/10864 14101/28212/10864 14100/28211/10864 +f 14098/28209/10865 14099/28210/10865 14086/28197/10865 14082/28193/10865 +f 14099/28210/10866 14100/28211/10866 14090/28201/10866 14086/28197/10866 +f 14100/28211/10867 14101/28212/10867 14079/28190/10867 14090/28201/10867 +f 14102/28213/10868 14105/28218/10868 14109/28224/10868 14108/28222/10868 +f 14105/28218/10869 14106/28220/10869 14110/28225/10869 14109/28224/10869 +f 14106/28220/10870 14107/28221/10870 14111/28226/10870 14110/28225/10870 +f 14108/28222/10871 14109/28224/10871 14113/28229/10871 14112/28227/10871 +f 14109/28224/10872 14110/28225/10872 14114/28230/10872 14113/28229/10872 +f 14110/28225/10873 14111/28226/10873 14115/28231/10873 14114/28230/10873 +f 14112/28227/10874 14113/28229/10874 14134/28256/10874 14130/28251/10874 +f 14113/28229/10875 14114/28230/10875 14138/28260/10875 14134/28256/10875 +f 14114/28230/10876 14115/28231/10876 14116/28232/10876 14138/28260/10876 +f 14103/28215/10877 14117/28233/10877 14121/28238/10877 14120/28237/10877 +f 14117/28233/10878 14118/28234/10878 14122/28239/10878 14121/28238/10878 +f 14118/28234/10879 14119/28235/10879 14123/28240/10879 14122/28239/10879 +f 14120/28237/10880 14121/28238/10880 14125/28243/10880 14124/28242/10880 +f 14121/28238/10881 14122/28239/10881 14126/28244/10881 14125/28243/10881 +f 14122/28239/10882 14123/28240/10882 14127/28245/10882 14126/28244/10882 +f 14124/28242/10883 14125/28243/10883 14111/28226/10883 14107/28221/10883 +f 14125/28243/10884 14126/28244/10884 14115/28231/10884 14111/28226/10884 +f 14126/28244/10885 14127/28245/10885 14116/28232/10885 14115/28231/10885 +f 14104/28217/10886 14128/28247/10886 14132/28254/10886 14131/28253/10886 +f 14128/28247/10887 14129/28249/10887 14133/28255/10887 14132/28254/10887 +f 14129/28249/10888 14130/28251/10888 14134/28256/10888 14133/28255/10888 +f 14131/28253/10889 14132/28254/10889 14136/28258/10889 14135/28257/10889 +f 14132/28254/10890 14133/28255/10890 14137/28259/10890 14136/28258/10890 +f 14133/28255/10891 14134/28256/10891 14138/28260/10891 14137/28259/10891 +f 14135/28257/10892 14136/28258/10892 14123/28241/10892 14119/28236/10892 +f 14136/28258/10893 14137/28259/10893 14127/28246/10893 14123/28241/10893 +f 14137/28259/10894 14138/28260/10894 14116/28232/10894 14127/28246/10894 +f 14139/28261/10895 14142/28264/10895 14146/28268/10895 14145/28267/10895 +f 14142/28264/10896 14143/28265/10896 14147/28269/10896 14146/28268/10896 +f 14143/28265/10897 14144/28266/10897 14148/28270/10897 14147/28269/10897 +f 14145/28267/10898 14146/28268/10898 14150/28272/10898 14149/28271/10898 +f 14146/28268/10899 14147/28269/10899 14151/28273/10899 14150/28272/10899 +f 14147/28269/10900 14148/28270/10900 14152/28274/10900 14151/28273/10900 +f 14149/28271/10901 14150/28272/10901 14171/28296/10901 14167/28292/10901 +f 14150/28272/10902 14151/28273/10902 14175/28300/10902 14171/28296/10902 +f 14151/28273/10903 14152/28274/10903 14153/28275/10903 14175/28300/10903 +f 14140/28262/10904 14154/28276/10904 14158/28281/10904 14157/28280/10904 +f 14154/28276/10905 14155/28277/10905 14159/28282/10905 14158/28281/10905 +f 14155/28277/10906 14156/28279/10906 14160/28283/10906 14159/28282/10906 +f 14157/28280/10907 14158/28281/10907 14162/28286/10907 14161/28285/10907 +f 14158/28281/10908 14159/28282/10908 14163/28287/10908 14162/28286/10908 +f 14159/28282/10909 14160/28283/10909 14164/28288/10909 14163/28287/10909 +f 14161/28285/10910 14162/28286/10910 14148/28270/10910 14144/28266/10910 +f 14162/28286/10911 14163/28287/10911 14152/28274/10911 14148/28270/10911 +f 14163/28287/10912 14164/28288/10912 14153/28275/10912 14152/28274/10912 +f 14168/28293/10811 14141/28263/10811 14329/28506/10811 14328/28505/10811 +f 14165/28290/10913 14166/28291/10913 14170/28295/10913 14169/28294/10913 +f 14166/28291/10914 14167/28292/10914 14171/28296/10914 14170/28295/10914 +f 14168/28293/10915 14169/28294/10915 14173/28298/10915 14172/28297/10915 +f 14169/28294/10916 14170/28295/10916 14174/28299/10916 14173/28298/10916 +f 14170/28295/10917 14171/28296/10917 14175/28300/10917 14174/28299/10917 +f 14172/28297/10918 14173/28298/10918 14160/28284/10918 14156/28278/10918 +f 14173/28298/10919 14174/28299/10919 14164/28289/10919 14160/28284/10919 +f 14174/28299/10920 14175/28300/10920 14153/28275/10920 14164/28289/10920 +f 14176/28301/10921 14179/28306/10921 14183/28313/10921 14182/28312/10921 +f 14179/28306/10922 14180/28308/10922 14184/28314/10922 14183/28313/10922 +f 14180/28308/10923 14181/28310/10923 14185/28315/10923 14184/28314/10923 +f 14182/28312/10924 14183/28313/10924 14187/28317/10924 14186/28316/10924 +f 14183/28313/10925 14184/28314/10925 14188/28318/10925 14187/28317/10925 +f 14184/28314/10926 14185/28315/10926 14189/28319/10926 14188/28318/10926 +f 14186/28316/10927 14187/28317/10927 14208/28345/10927 14204/28341/10927 +f 14187/28317/10928 14188/28318/10928 14212/28350/10928 14208/28345/10928 +f 14188/28318/10929 14189/28319/10929 14190/28320/10929 14212/28350/10929 +f 14177/28304/10930 14191/28322/10930 14195/28328/10930 14194/28326/10930 +f 14191/28322/10931 14192/28323/10931 14196/28329/10931 14195/28328/10931 +f 14192/28323/10932 14193/28325/10932 14197/28330/10932 14196/28329/10932 +f 14194/28326/10933 14195/28328/10933 14199/28334/10933 14198/28332/10933 +f 14195/28328/10934 14196/28329/10934 14200/28335/10934 14199/28334/10934 +f 14196/28329/10935 14197/28330/10935 14201/28336/10935 14200/28335/10935 +f 14198/28332/10936 14199/28334/10936 14185/28315/10936 14181/28310/10936 +f 14199/28334/10937 14200/28335/10937 14189/28319/10937 14185/28315/10937 +f 14200/28335/10938 14201/28336/10938 14190/28320/10938 14189/28319/10938 +f 14178/28305/10939 14202/28338/10939 14206/28343/10939 14205/28342/10939 +f 14202/28338/10940 14203/28339/10940 14207/28344/10940 14206/28343/10940 +f 14203/28339/10941 14204/28340/10941 14208/28346/10941 14207/28344/10941 +f 14205/28342/10942 14206/28343/10942 14210/28348/10942 14209/28347/10942 +f 14206/28343/10943 14207/28344/10943 14211/28349/10943 14210/28348/10943 +f 14207/28344/10944 14208/28346/10944 14212/28351/10944 14211/28349/10944 +f 14209/28347/10945 14210/28348/10945 14197/28331/10945 14193/28324/10945 +f 14210/28348/10946 14211/28349/10946 14201/28337/10946 14197/28331/10946 +f 14211/28349/10947 14212/28351/10947 14190/28321/10947 14201/28337/10947 +f 14213/28352/10948 14216/28355/10948 14220/28359/10948 14219/28358/10948 +f 14216/28355/10949 14217/28356/10949 14221/28360/10949 14220/28359/10949 +f 14217/28356/10950 14218/28357/10950 14222/28361/10950 14221/28360/10950 +f 14219/28358/10951 14220/28359/10951 14224/28363/10951 14223/28362/10951 +f 14220/28359/10952 14221/28360/10952 14225/28364/10952 14224/28363/10952 +f 14221/28360/10953 14222/28361/10953 14226/28365/10953 14225/28364/10953 +f 14223/28362/10954 14224/28363/10954 14245/28390/10954 14241/28386/10954 +f 14224/28363/10955 14225/28364/10955 14249/28395/10955 14245/28390/10955 +f 14225/28364/10956 14226/28365/10956 14227/28366/10956 14249/28395/10956 +f 14214/28353/10957 14228/28369/10957 14232/28374/10957 14231/28373/10957 +f 14228/28369/10958 14229/28370/10958 14233/28375/10958 14232/28374/10958 +f 14229/28370/10959 14230/28372/10959 14234/28376/10959 14233/28375/10959 +f 14231/28373/10960 14232/28374/10960 14236/28379/10960 14235/28378/10960 +f 14232/28374/10961 14233/28375/10961 14237/28380/10961 14236/28379/10961 +f 14233/28375/10962 14234/28376/10962 14238/28381/10962 14237/28380/10962 +f 14235/28378/10963 14236/28379/10963 14222/28361/10963 14218/28357/10963 +f 14236/28379/10964 14237/28380/10964 14226/28365/10964 14222/28361/10964 +f 14237/28380/10965 14238/28381/10965 14227/28367/10965 14226/28365/10965 +f 14293/28460/10966 14287/28453/10966 14337/28514/10966 14336/28513/10966 +f 14239/28383/10967 14240/28384/10967 14244/28389/10967 14243/28388/10967 +f 14240/28384/10968 14241/28385/10968 14245/28391/10968 14244/28389/10968 +f 14242/28387/10969 14243/28388/10969 14247/28393/10969 14246/28392/10969 +f 14243/28388/10970 14244/28389/10970 14248/28394/10970 14247/28393/10970 +f 14244/28389/10971 14245/28391/10971 14249/28396/10971 14248/28394/10971 +f 14246/28392/10972 14247/28393/10972 14234/28377/10972 14230/28371/10972 +f 14247/28393/10973 14248/28394/10973 14238/28382/10973 14234/28377/10973 +f 14248/28394/10974 14249/28396/10974 14227/28368/10974 14238/28382/10974 +f 14250/28398/10975 14253/28402/10975 14257/28411/10975 14256/28410/10975 +f 14253/28402/10976 14254/28404/10976 14258/28412/10976 14257/28411/10976 +f 14254/28404/10977 14255/28406/10977 14259/28413/10977 14258/28412/10977 +f 14256/28410/10978 14257/28411/10978 14261/28416/10978 14260/28415/10978 +f 14257/28411/10979 14258/28412/10979 14262/28417/10979 14261/28416/10979 +f 14258/28412/10980 14259/28413/10980 14263/28418/10980 14262/28417/10980 +f 14260/28415/10981 14261/28416/10981 14282/28446/10981 14278/28442/10981 +f 14261/28416/10982 14262/28417/10982 14286/28451/10982 14282/28446/10982 +f 14262/28417/10983 14263/28418/10983 14264/28420/10983 14286/28451/10983 +f 14251/28400/10984 14265/28423/10984 14269/28429/10984 14268/28427/10984 +f 14265/28423/10985 14266/28424/10985 14270/28430/10985 14269/28429/10985 +f 14266/28424/10986 14267/28426/10986 14271/28431/10986 14270/28430/10986 +f 14268/28427/10987 14269/28429/10987 14273/28435/10987 14272/28433/10987 +f 14269/28429/10988 14270/28430/10988 14274/28436/10988 14273/28435/10988 +f 14270/28430/10989 14271/28431/10989 14275/28437/10989 14274/28436/10989 +f 14272/28433/10990 14273/28435/10990 14259/28414/10990 14255/28407/10990 +f 14273/28435/10991 14274/28436/10991 14263/28419/10991 14259/28414/10991 +f 14274/28436/10992 14275/28437/10992 14264/28421/10992 14263/28419/10992 +f 14252/28401/10993 14276/28439/10993 14280/28444/10993 14279/28443/10993 +f 14276/28439/10994 14277/28440/10994 14281/28445/10994 14280/28444/10994 +f 14277/28440/10995 14278/28441/10995 14282/28447/10995 14281/28445/10995 +f 14279/28443/10996 14280/28444/10996 14284/28449/10996 14283/28448/10996 +f 14280/28444/10997 14281/28445/10997 14285/28450/10997 14284/28449/10997 +f 14281/28445/10998 14282/28447/10998 14286/28452/10998 14285/28450/10998 +f 14283/28448/10999 14284/28449/10999 14271/28432/10999 14267/28425/10999 +f 14284/28449/11000 14285/28450/11000 14275/28438/11000 14271/28432/11000 +f 14285/28450/11001 14286/28452/11001 14264/28422/11001 14275/28438/11001 +f 14071/28180/10812 14065/28173/10812 14325/28502/10812 14324/28501/10812 +f 14290/28456/11002 14291/28457/11002 14295/28462/11002 14294/28461/11002 +f 14291/28457/11003 14292/28458/11003 14296/28463/11003 14295/28462/11003 +f 14293/28460/11004 14294/28461/11004 14298/28466/11004 14297/28465/11004 +f 14294/28461/11005 14295/28462/11005 14299/28467/11005 14298/28466/11005 +f 14295/28462/11006 14296/28463/11006 14300/28468/11006 14299/28467/11006 +f 14297/28465/11007 14298/28466/11007 14319/28494/11007 14315/28489/11007 +f 14298/28466/11008 14299/28467/11008 14323/28499/11008 14319/28494/11008 +f 14299/28467/11009 14300/28468/11009 14301/28470/11009 14323/28499/11009 +f 14288/28454/11010 14302/28473/11010 14306/28478/11010 14305/28477/11010 +f 14302/28473/11011 14303/28474/11011 14307/28479/11011 14306/28478/11011 +f 14303/28474/11012 14304/28475/11012 14308/28480/11012 14307/28479/11012 +f 14305/28477/11013 14306/28478/11013 14310/28483/11013 14309/28482/11013 +f 14306/28478/11014 14307/28479/11014 14311/28484/11014 14310/28483/11014 +f 14307/28479/11015 14308/28480/11015 14312/28485/11015 14311/28484/11015 +f 14309/28482/11016 14310/28483/11016 14296/28464/11016 14292/28459/11016 +f 14310/28483/11017 14311/28484/11017 14300/28469/11017 14296/28464/11017 +f 14311/28484/11018 14312/28485/11018 14301/28471/11018 14300/28469/11018 +f 14289/28455/11019 14313/28487/11019 14317/28492/11019 14316/28491/11019 +f 14313/28487/11020 14314/28488/11020 14318/28493/11020 14317/28492/11020 +f 14314/28488/11021 14315/28490/11021 14319/28495/11021 14318/28493/11021 +f 14316/28491/11022 14317/28492/11022 14321/28497/11022 14320/28496/11022 +f 14317/28492/11023 14318/28493/11023 14322/28498/11023 14321/28497/11023 +f 14318/28493/11024 14319/28495/11024 14323/28500/11024 14322/28498/11024 +f 14320/28496/11025 14321/28497/11025 14308/28481/11025 14304/28476/11025 +f 14321/28497/11026 14322/28498/11026 14312/28486/11026 14308/28481/11026 +f 14322/28498/11027 14323/28500/11027 14301/28472/11027 14312/28486/11027 +f 14215/28354/11028 14287/28453/11028 14293/28460/11028 14239/28383/11028 +f 14239/28383/11029 14293/28460/11029 14297/28465/11029 14240/28384/11029 +f 14240/28384/11030 14297/28465/11030 14315/28489/11030 14241/28385/11030 +f 14241/28386/11031 14315/28490/11031 14314/28488/11031 14223/28362/11031 +f 14223/28362/11032 14314/28488/11032 14313/28487/11032 14219/28358/11032 +f 14219/28358/11033 14313/28487/11033 14289/28455/11033 14213/28352/11033 +f 14065/28173/11034 14215/28354/11034 14242/28387/11034 14068/28176/11034 +f 14068/28176/11035 14242/28387/11035 14246/28392/11035 14069/28177/11035 +f 14069/28177/11036 14246/28392/11036 14230/28371/11036 14070/28178/11036 +f 14070/28179/11037 14230/28372/11037 14229/28370/11037 14087/28198/11037 +f 14087/28198/11038 14229/28370/11038 14228/28369/11038 14083/28194/11038 +f 14083/28194/11039 14228/28369/11039 14214/28353/11039 14066/28174/11039 +f 14030/28129/11040 14067/28175/11040 14094/28205/11040 14054/28159/11040 +f 14054/28159/11041 14094/28205/11041 14098/28209/11041 14055/28161/11041 +f 14055/28161/11042 14098/28209/11042 14082/28193/11042 14056/28163/11042 +f 14056/28163/11043 14082/28193/11043 14081/28192/11043 14038/28141/11043 +f 14038/28141/11044 14081/28192/11044 14080/28191/11044 14034/28135/11044 +f 14034/28135/11045 14080/28191/11045 14066/28174/11045 14028/28126/11045 +f 14288/28454/11046 14251/28399/11046 14268/28428/11046 14302/28473/11046 +f 14302/28473/11047 14268/28428/11047 14272/28434/11047 14303/28474/11047 +f 14303/28474/11048 14272/28434/11048 14255/28408/11048 14304/28475/11048 +f 14304/28476/11049 14255/28409/11049 14254/28405/11049 14320/28496/11049 +f 14320/28496/11050 14254/28405/11050 14253/28403/11050 14316/28491/11050 +f 14316/28491/11051 14253/28403/11051 14250/28397/11051 14289/28455/11051 +f 14104/28216/11052 14140/28262/11052 14157/28280/11052 14128/28248/11052 +f 14128/28248/11053 14157/28280/11053 14161/28285/11053 14129/28250/11053 +f 14129/28250/11054 14161/28285/11054 14144/28266/11054 14130/28252/11054 +f 14130/28252/11055 14144/28266/11055 14143/28265/11055 14112/28228/11055 +f 14112/28228/11056 14143/28265/11056 14142/28264/11056 14108/28223/11056 +f 14108/28223/11057 14142/28264/11057 14139/28261/11057 14102/28214/11057 +f 14176/28302/11058 14214/28353/11058 14231/28373/11058 14179/28307/11058 +f 14179/28307/11059 14231/28373/11059 14235/28378/11059 14180/28309/11059 +f 14180/28309/11060 14235/28378/11060 14218/28357/11060 14181/28311/11060 +f 14181/28311/11061 14218/28357/11061 14217/28356/11061 14198/28333/11061 +f 14198/28333/11062 14217/28356/11062 14216/28355/11062 14194/28327/11062 +f 14194/28327/11063 14216/28355/11063 14213/28352/11063 14177/28303/11063 +f 14103/28215/11064 14252/28401/11064 14279/28443/11064 14117/28233/11064 +f 14117/28233/11065 14279/28443/11065 14283/28448/11065 14118/28234/11065 +f 14118/28234/11066 14283/28448/11066 14267/28425/11066 14119/28235/11066 +f 14119/28236/11067 14267/28426/11067 14266/28424/11067 14135/28257/11067 +f 14135/28257/11068 14266/28424/11068 14265/28423/11068 14131/28253/11068 +f 14131/28253/11069 14265/28423/11069 14251/28400/11069 14104/28217/11069 +f 14029/28127/11070 14103/28215/11070 14120/28237/11070 14043/28147/11070 +f 14043/28147/11071 14120/28237/11071 14124/28242/11071 14044/28148/11071 +f 14044/28148/11072 14124/28242/11072 14107/28221/11072 14045/28149/11072 +f 14045/28149/11073 14107/28221/11073 14106/28220/11073 14061/28169/11073 +f 14061/28169/11074 14106/28220/11074 14105/28218/11074 14057/28164/11074 +f 14057/28165/11075 14105/28219/11075 14102/28214/11075 14030/28129/11075 +f 14287/28453/11076 14141/28263/11076 14168/28293/11076 14290/28456/11076 +f 14290/28456/11077 14168/28293/11077 14172/28297/11077 14291/28457/11077 +f 14291/28457/11078 14172/28297/11078 14156/28278/11078 14292/28458/11078 +f 14292/28459/11079 14156/28279/11079 14155/28277/11079 14309/28482/11079 +f 14309/28482/11080 14155/28277/11080 14154/28276/11080 14305/28477/11080 +f 14305/28477/11081 14154/28276/11081 14140/28262/11081 14288/28454/11081 +f 14252/28401/11082 14178/28305/11082 14205/28342/11082 14276/28439/11082 +f 14276/28439/11083 14205/28342/11083 14209/28347/11083 14277/28440/11083 +f 14277/28440/11084 14209/28347/11084 14193/28324/11084 14278/28441/11084 +f 14278/28442/11085 14193/28325/11085 14192/28323/11085 14260/28415/11085 +f 14260/28415/11086 14192/28323/11086 14191/28322/11086 14256/28410/11086 +f 14256/28410/11087 14191/28322/11087 14177/28304/11087 14250/28398/11087 +f 14178/28305/11088 14029/28127/11088 14046/28150/11088 14202/28338/11088 +f 14202/28338/11089 14046/28150/11089 14050/28154/11089 14203/28339/11089 +f 14203/28339/11090 14050/28154/11090 14033/28132/11090 14204/28340/11090 +f 14204/28341/11091 14033/28133/11091 14032/28131/11091 14186/28316/11091 +f 14186/28316/11092 14032/28131/11092 14031/28130/11092 14182/28312/11092 +f 14182/28312/11093 14031/28130/11093 14028/28125/11093 14176/28301/11093 +f 14141/28263/11094 14065/28173/11094 14071/28180/11094 14165/28290/11094 +f 14165/28290/11095 14071/28180/11095 14075/28185/11095 14166/28291/11095 +f 14166/28291/11096 14075/28185/11096 14093/28204/11096 14167/28292/11096 +f 14167/28292/11097 14093/28204/11097 14092/28203/11097 14149/28271/11097 +f 14149/28271/11098 14092/28203/11098 14091/28202/11098 14145/28267/11098 +f 14145/28267/11099 14091/28202/11099 14067/28175/11099 14139/28261/11099 +f 14214/28353/10966 14176/28302/10966 14028/28126/10966 14066/28174/10966 +f 14325/28502/11100 14326/28503/11100 14327/28504/11100 14324/28501/11100 +f 14329/28506/11101 14330/28507/11101 14331/28508/11101 14328/28505/11101 +f 14333/28510/11102 14334/28511/11102 14335/28512/11102 14332/28509/11102 +f 14337/28514/11103 14338/28515/11103 14339/28516/11103 14336/28513/11103 +f 14065/28173/10811 14068/28176/10811 14326/28503/10811 14325/28502/10811 +f 14287/28453/10814 14290/28456/10814 14338/28515/10814 14337/28514/10814 +f 14141/28263/10966 14165/28290/10966 14330/28507/10966 14329/28506/10966 +f 14215/28354/10812 14239/28383/10812 14334/28511/10812 14333/28510/10812 +f 14068/28176/11104 14072/28181/11104 14327/28504/11104 14326/28503/11104 +f 14290/28456/11105 14294/28461/11105 14339/28516/11105 14338/28515/11105 +f 14165/28290/11106 14169/28294/11106 14331/28508/11106 14330/28507/11106 +f 14239/28383/11107 14243/28388/11107 14335/28512/11107 14334/28511/11107 +f 14072/28181/11108 14071/28180/11108 14324/28501/11108 14327/28504/11108 +f 14294/28461/11109 14293/28460/11109 14336/28513/11109 14339/28516/11109 +f 14169/28294/11110 14168/28293/11110 14328/28505/11110 14331/28508/11110 +f 14243/28388/11111 14242/28387/11111 14332/28509/11111 14335/28512/11111 +o Top.011 +v -6.384461 0.737263 6.279411 +v -6.384461 0.749833 6.178487 +v -6.490153 0.737263 6.178487 +v -6.384461 0.740515 6.275975 +v -6.384461 0.743549 6.265885 +v -6.384461 0.746151 6.249851 +v -6.411807 0.737263 6.275975 +v -6.412667 0.740645 6.271883 +v -6.412207 0.743568 6.261679 +v -6.411639 0.745849 6.247483 +v -6.437316 0.737263 6.265885 +v -6.437506 0.740582 6.261613 +v -6.434806 0.743253 6.253061 +v -6.432591 0.745176 6.242025 +v -6.445483 0.744520 6.236755 +v -6.411807 0.749405 6.178487 +v -6.437316 0.748149 6.178487 +v -6.459197 0.746151 6.178487 +v -6.384461 0.749405 6.204599 +v -6.412900 0.748896 6.205420 +v -6.437478 0.747625 6.204981 +v -6.456650 0.745857 6.204439 +v -6.384461 0.748149 6.228957 +v -6.412366 0.747617 6.229139 +v -6.434831 0.746551 6.226561 +v -6.450994 0.745177 6.224446 +v -6.486555 0.737263 6.204599 +v -6.475988 0.737263 6.228957 +v -6.459197 0.737263 6.249851 +v -6.486555 0.740515 6.178487 +v -6.482270 0.740617 6.205643 +v -6.471583 0.740563 6.229112 +v -6.456717 0.740495 6.247419 +v -6.475988 0.743549 6.178487 +v -6.471515 0.743572 6.205133 +v -6.462558 0.743250 6.226584 +v -6.451002 0.742987 6.242019 +v -6.342639 0.660944 6.178487 +v -6.384461 0.673515 6.279411 +v -6.490153 0.673515 6.178487 +v -6.342639 0.661372 6.204599 +v -6.384461 0.662629 6.228957 +v -6.384461 0.664626 6.249851 +v -6.411807 0.661372 6.178487 +v -6.412667 0.661882 6.205643 +v -6.412207 0.663153 6.229112 +v -6.411639 0.664921 6.247419 +v -6.437316 0.662629 6.178487 +v -6.437506 0.663161 6.205133 +v -6.434806 0.664226 6.226584 +v -6.432591 0.665601 6.242019 +v -6.445483 0.666257 6.236755 +v -6.411807 0.673515 6.275975 +v -6.437316 0.673515 6.265885 +v -6.459197 0.673515 6.249851 +v -6.384461 0.670263 6.275975 +v -6.412900 0.670160 6.271883 +v -6.437478 0.670215 6.261679 +v -6.456650 0.670282 6.247483 +v -6.384461 0.667229 6.265885 +v -6.412366 0.667206 6.261613 +v -6.434831 0.667527 6.253061 +v -6.450994 0.667790 6.242025 +v -6.486555 0.670263 6.178487 +v -6.475988 0.667229 6.178487 +v -6.459197 0.664626 6.178487 +v -6.486555 0.673515 6.204599 +v -6.482270 0.670133 6.205420 +v -6.471583 0.667209 6.204981 +v -6.456717 0.664929 6.204439 +v -6.475988 0.673515 6.228957 +v -6.471515 0.670196 6.229139 +v -6.462558 0.667524 6.226561 +v -6.451002 0.665602 6.224446 +v -6.490154 0.737263 5.666692 +v -6.384461 0.749833 5.666692 +v -6.384461 0.737263 5.565768 +v -6.486555 0.740515 5.666692 +v -6.475988 0.743549 5.666692 +v -6.459197 0.746151 5.666692 +v -6.486555 0.737263 5.640580 +v -6.482270 0.740645 5.639758 +v -6.471583 0.743568 5.640198 +v -6.456717 0.745849 5.640740 +v -6.475988 0.737263 5.616222 +v -6.471515 0.740582 5.616040 +v -6.462558 0.743253 5.618618 +v -6.451002 0.745176 5.620733 +v -6.445483 0.744520 5.608423 +v -6.384461 0.749405 5.640580 +v -6.384461 0.748149 5.616222 +v -6.384461 0.746151 5.595328 +v -6.411807 0.749405 5.666692 +v -6.412667 0.748896 5.639536 +v -6.412207 0.747625 5.616067 +v -6.411640 0.745857 5.597760 +v -6.437316 0.748149 5.666692 +v -6.437506 0.747617 5.640046 +v -6.434806 0.746551 5.618595 +v -6.432591 0.745177 5.603160 +v -6.411807 0.737263 5.569204 +v -6.437316 0.737263 5.579294 +v -6.459197 0.737263 5.595328 +v -6.384461 0.740515 5.569204 +v -6.412900 0.740617 5.573296 +v -6.437478 0.740563 5.583500 +v -6.456650 0.740495 5.597695 +v -6.384461 0.743549 5.579294 +v -6.412366 0.743572 5.583565 +v -6.434831 0.743250 5.592118 +v -6.450994 0.742987 5.603153 +v -6.490154 0.673515 5.666692 +v -6.384461 0.673515 5.565768 +v -6.342639 0.660944 5.666692 +v -6.486555 0.673515 5.640580 +v -6.475988 0.673515 5.616222 +v -6.459197 0.673515 5.595328 +v -6.486555 0.670263 5.666692 +v -6.482270 0.670160 5.639536 +v -6.471583 0.670215 5.616067 +v -6.456717 0.670282 5.597760 +v -6.475988 0.667229 5.666692 +v -6.471515 0.667206 5.640046 +v -6.462558 0.667527 5.618595 +v -6.451002 0.667790 5.603160 +v -6.445483 0.666257 5.608423 +v -6.384461 0.670263 5.569204 +v -6.384461 0.667229 5.579294 +v -6.384461 0.664626 5.595328 +v -6.411807 0.673515 5.569204 +v -6.412667 0.670133 5.573296 +v -6.412207 0.667209 5.583500 +v -6.411640 0.664929 5.597695 +v -6.437316 0.673515 5.579294 +v -6.437507 0.670196 5.583565 +v -6.434806 0.667524 5.592118 +v -6.432591 0.665602 5.603153 +v -6.411807 0.661372 5.666692 +v -6.437316 0.662629 5.666692 +v -6.459197 0.664626 5.666692 +v -6.342639 0.661372 5.640580 +v -6.412900 0.661882 5.639758 +v -6.437478 0.663153 5.640198 +v -6.456650 0.664921 5.640740 +v -6.384461 0.662629 5.616222 +v -6.412366 0.663161 5.616040 +v -6.434831 0.664226 5.618618 +v -6.450994 0.665601 5.620733 +v -5.848487 0.737263 6.279411 +v -5.742795 0.737263 6.178486 +v -5.848487 0.749833 6.178486 +v -5.821141 0.737263 6.275974 +v -5.795632 0.737263 6.265885 +v -5.773751 0.737263 6.249851 +v -5.848487 0.740515 6.275974 +v -5.820048 0.740617 6.271883 +v -5.795470 0.740563 6.261678 +v -5.776298 0.740495 6.247483 +v -5.848487 0.743549 6.265885 +v -5.820582 0.743572 6.261613 +v -5.798118 0.743250 6.253060 +v -5.781954 0.742987 6.242025 +v -5.787466 0.744520 6.236755 +v -5.746394 0.740515 6.178486 +v -5.756960 0.743549 6.178486 +v -5.773751 0.746151 6.178486 +v -5.746394 0.737263 6.204598 +v -5.750679 0.740645 6.205420 +v -5.761365 0.743568 6.204980 +v -5.776231 0.745849 6.204439 +v -5.756960 0.737263 6.228957 +v -5.761433 0.740582 6.229139 +v -5.770390 0.743253 6.226561 +v -5.781947 0.745176 6.224446 +v -5.848487 0.749405 6.204598 +v -5.848487 0.748149 6.228957 +v -5.848487 0.746151 6.249851 +v -5.821141 0.749405 6.178486 +v -5.820281 0.748896 6.205642 +v -5.820741 0.747625 6.229112 +v -5.821309 0.745857 6.247419 +v -5.795632 0.748149 6.178486 +v -5.795442 0.747617 6.205133 +v -5.798142 0.746551 6.226584 +v -5.800357 0.745177 6.242018 +v -5.742795 0.673515 6.178486 +v -5.848487 0.673515 6.279411 +v -5.890309 0.660944 6.178486 +v -5.746394 0.673515 6.204598 +v -5.756960 0.673515 6.228957 +v -5.773751 0.673515 6.249851 +v -5.746394 0.670263 6.178486 +v -5.750679 0.670160 6.205642 +v -5.761365 0.670215 6.229112 +v -5.776231 0.670282 6.247419 +v -5.756960 0.667229 6.178486 +v -5.761433 0.667206 6.205133 +v -5.770390 0.667527 6.226584 +v -5.781947 0.667790 6.242018 +v -5.787466 0.666257 6.236755 +v -5.848487 0.670263 6.275974 +v -5.848487 0.667229 6.265885 +v -5.848487 0.664626 6.249851 +v -5.821141 0.673515 6.275974 +v -5.820281 0.670133 6.271883 +v -5.820741 0.667209 6.261678 +v -5.821309 0.664929 6.247483 +v -5.795632 0.673515 6.265885 +v -5.795442 0.670196 6.261613 +v -5.798142 0.667524 6.253060 +v -5.800357 0.665602 6.242025 +v -5.821141 0.661372 6.178486 +v -5.795632 0.662629 6.178486 +v -5.773751 0.664626 6.178486 +v -5.890309 0.661372 6.204598 +v -5.820048 0.661882 6.205420 +v -5.795470 0.663153 6.204980 +v -5.776298 0.664921 6.204439 +v -5.848487 0.662629 6.228957 +v -5.820582 0.663161 6.229139 +v -5.798118 0.664226 6.226561 +v -5.781954 0.665601 6.224446 +v -5.742795 0.737263 5.666692 +v -5.848487 0.737263 5.565767 +v -5.848487 0.749833 5.666692 +v -5.746394 0.737263 5.640580 +v -5.756960 0.737263 5.616221 +v -5.773751 0.737263 5.595327 +v -5.746394 0.740515 5.666692 +v -5.750679 0.740617 5.639536 +v -5.761365 0.740563 5.616066 +v -5.776231 0.740495 5.597760 +v -5.756960 0.743549 5.666692 +v -5.761433 0.743572 5.640046 +v -5.770390 0.743250 5.618595 +v -5.781947 0.742987 5.603160 +v -5.787466 0.744520 5.608423 +v -5.848487 0.740515 5.569204 +v -5.848487 0.743549 5.579294 +v -5.848487 0.746151 5.595327 +v -5.821142 0.737263 5.569204 +v -5.820281 0.740645 5.573296 +v -5.820742 0.743568 5.583500 +v -5.821309 0.745849 5.597695 +v -5.795632 0.737263 5.579293 +v -5.795442 0.740582 5.583565 +v -5.798142 0.743253 5.592118 +v -5.800357 0.745176 5.603153 +v -5.821142 0.749405 5.666692 +v -5.795632 0.748149 5.666692 +v -5.773751 0.746151 5.666692 +v -5.848487 0.749405 5.640580 +v -5.820048 0.748896 5.639758 +v -5.795470 0.747625 5.640198 +v -5.776299 0.745857 5.640739 +v -5.848487 0.748149 5.616221 +v -5.820582 0.747617 5.616040 +v -5.798118 0.746551 5.618618 +v -5.781954 0.745177 5.620733 +v -5.890309 0.660944 5.666692 +v -5.848487 0.673515 5.565767 +v -5.742795 0.673515 5.666692 +v -5.890309 0.661372 5.640580 +v -5.848487 0.662629 5.616221 +v -5.848487 0.664626 5.595327 +v -5.821142 0.661372 5.666692 +v -5.820281 0.661882 5.639536 +v -5.820742 0.663153 5.616066 +v -5.821309 0.664921 5.597760 +v -5.795632 0.662629 5.666692 +v -5.795442 0.663161 5.640046 +v -5.798142 0.664226 5.618595 +v -5.800357 0.665601 5.603160 +v -5.787466 0.666257 5.608423 +v -5.821142 0.673515 5.569204 +v -5.795632 0.673515 5.579294 +v -5.773751 0.673515 5.595327 +v -5.848487 0.670263 5.569204 +v -5.820048 0.670160 5.573296 +v -5.795470 0.670215 5.583500 +v -5.776299 0.670282 5.597695 +v -5.848487 0.667229 5.579294 +v -5.820582 0.667206 5.583565 +v -5.798118 0.667527 5.592118 +v -5.781954 0.667790 5.603153 +v -5.746394 0.670263 5.666692 +v -5.756960 0.667229 5.666692 +v -5.773751 0.664626 5.666692 +v -5.746394 0.673515 5.640580 +v -5.750679 0.670133 5.639758 +v -5.761365 0.667209 5.640198 +v -5.776231 0.664929 5.640739 +v -5.756960 0.673515 5.616221 +v -5.761433 0.670196 5.616040 +v -5.770390 0.667524 5.618618 +v -5.781947 0.665602 5.620733 +v -6.411807 -0.015018 6.178487 +v -6.342639 -0.015446 6.178487 +v -6.342639 -0.015018 6.204599 +v -6.412667 -0.014508 6.205643 +v -6.342639 -0.015018 5.640580 +v -6.342639 -0.015446 5.666692 +v -6.411807 -0.015018 5.666692 +v -6.412900 -0.014508 5.639758 +v -5.890309 -0.015018 6.204598 +v -5.890309 -0.015446 6.178486 +v -5.821141 -0.015018 6.178486 +v -5.820048 -0.014508 6.205420 +v -5.821142 -0.015018 5.666692 +v -5.890309 -0.015446 5.666692 +v -5.890309 -0.015018 5.640580 +v -5.820281 -0.014508 5.639536 +vn -0.0000 -0.0444 -0.0000 +vn 0.3737 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.3568 +vn -0.0000 0.0444 -0.0000 +vn -0.3737 -0.0000 -0.0000 +vn -0.0510 0.0061 0.3501 +vn -0.0497 0.0173 0.3254 +vn -0.0466 0.0270 0.2801 +vn -0.1448 0.0060 0.3254 +vn -0.1412 0.0168 0.3016 +vn -0.1339 0.0256 0.2619 +vn -0.2268 0.0056 0.2801 +vn -0.2158 0.0159 0.2617 +vn -0.1981 0.0236 0.2362 +vn -0.0510 0.0436 0.0487 +vn -0.1451 0.0405 0.0474 +vn -0.2268 0.0349 0.0445 +vn -0.0503 0.0405 0.1383 +vn -0.1414 0.0376 0.1348 +vn -0.2156 0.0326 0.1279 +vn -0.0468 0.0349 0.2165 +vn -0.1341 0.0326 0.2061 +vn -0.1980 0.0294 0.1891 +vn -0.3666 0.0061 0.0487 +vn -0.3408 0.0059 0.1385 +vn -0.2933 0.0055 0.2166 +vn -0.3408 0.0172 0.0480 +vn -0.3158 0.0168 0.1350 +vn -0.2742 0.0159 0.2059 +vn -0.2933 0.0270 0.0447 +vn -0.2740 0.0257 0.1280 +vn -0.2474 0.0236 0.1891 +vn -0.0296 -0.0418 0.1189 +vn -0.0466 -0.0349 0.2166 +vn -0.1448 -0.0405 0.0480 +vn -0.1412 -0.0376 0.1350 +vn -0.1339 -0.0326 0.2059 +vn -0.2268 -0.0349 0.0447 +vn -0.2158 -0.0326 0.1280 +vn -0.1981 -0.0294 0.1891 +vn -0.0510 -0.0061 0.3501 +vn -0.1451 -0.0059 0.3254 +vn -0.2268 -0.0055 0.2801 +vn -0.0503 -0.0172 0.3254 +vn -0.1414 -0.0168 0.3016 +vn -0.2156 -0.0159 0.2619 +vn -0.0468 -0.0270 0.2801 +vn -0.1341 -0.0257 0.2617 +vn -0.1980 -0.0236 0.2362 +vn -0.3666 -0.0061 0.0487 +vn -0.3408 -0.0173 0.0474 +vn -0.2933 -0.0270 0.0445 +vn -0.3408 -0.0060 0.1383 +vn -0.3158 -0.0168 0.1348 +vn -0.2742 -0.0256 0.1279 +vn -0.2933 -0.0056 0.2165 +vn -0.2740 -0.0159 0.2061 +vn -0.2474 -0.0236 0.1891 +vn -0.3666 0.0061 -0.0487 +vn -0.3408 0.0173 -0.0474 +vn -0.2933 0.0270 -0.0445 +vn -0.3408 0.0060 -0.1383 +vn -0.3158 0.0168 -0.1348 +vn -0.2742 0.0256 -0.1279 +vn -0.2933 0.0056 -0.2165 +vn -0.2740 0.0159 -0.2061 +vn -0.2474 0.0236 -0.1891 +vn -0.0510 0.0436 -0.0487 +vn -0.0497 0.0405 -0.1385 +vn -0.0466 0.0349 -0.2166 +vn -0.1448 0.0405 -0.0480 +vn -0.1412 0.0376 -0.1350 +vn -0.1339 0.0326 -0.2059 +vn -0.2268 0.0349 -0.0447 +vn -0.2158 0.0326 -0.1280 +vn -0.1981 0.0294 -0.1891 +vn -0.0510 0.0061 -0.3501 +vn -0.1451 0.0059 -0.3254 +vn -0.2268 0.0055 -0.2801 +vn -0.0503 0.0172 -0.3254 +vn -0.1414 0.0168 -0.3016 +vn -0.2156 0.0159 -0.2619 +vn -0.0468 0.0270 -0.2801 +vn -0.1341 0.0257 -0.2617 +vn -0.1980 0.0236 -0.2362 +vn -0.3666 -0.0061 -0.0487 +vn -0.3408 -0.0059 -0.1385 +vn -0.2933 -0.0055 -0.2166 +vn -0.3408 -0.0172 -0.0480 +vn -0.3158 -0.0168 -0.1350 +vn -0.2742 -0.0159 -0.2059 +vn -0.2933 -0.0270 -0.0447 +vn -0.2740 -0.0257 -0.1280 +vn -0.2474 -0.0236 -0.1891 +vn -0.0510 -0.0061 -0.3501 +vn -0.0497 -0.0173 -0.3254 +vn -0.0466 -0.0270 -0.2801 +vn -0.1448 -0.0060 -0.3254 +vn -0.1412 -0.0168 -0.3016 +vn -0.1339 -0.0256 -0.2619 +vn -0.2268 -0.0056 -0.2801 +vn -0.2158 -0.0159 -0.2617 +vn -0.1981 -0.0236 -0.2362 +vn -0.1451 -0.0405 -0.0474 +vn -0.2268 -0.0349 -0.0445 +vn -0.0300 -0.0418 -0.1185 +vn -0.1414 -0.0376 -0.1348 +vn -0.2156 -0.0326 -0.1279 +vn -0.0468 -0.0349 -0.2165 +vn -0.1341 -0.0326 -0.2061 +vn -0.1980 -0.0294 -0.1891 +vn 0.0510 0.0061 0.3501 +vn 0.1451 0.0059 0.3254 +vn 0.2268 0.0055 0.2801 +vn 0.0503 0.0172 0.3254 +vn 0.1414 0.0168 0.3016 +vn 0.2156 0.0159 0.2619 +vn 0.0468 0.0270 0.2801 +vn 0.1341 0.0257 0.2617 +vn 0.1980 0.0236 0.2362 +vn 0.3666 0.0061 0.0487 +vn 0.3408 0.0173 0.0474 +vn 0.2933 0.0270 0.0445 +vn 0.3408 0.0060 0.1383 +vn 0.3158 0.0168 0.1348 +vn 0.2742 0.0256 0.1279 +vn 0.2933 0.0056 0.2165 +vn 0.2740 0.0159 0.2061 +vn 0.2474 0.0236 0.1891 +vn 0.0510 0.0436 0.0487 +vn 0.0497 0.0405 0.1385 +vn 0.0466 0.0349 0.2166 +vn 0.1448 0.0405 0.0480 +vn 0.1412 0.0376 0.1350 +vn 0.1339 0.0326 0.2059 +vn 0.2268 0.0349 0.0447 +vn 0.2158 0.0326 0.1280 +vn 0.1981 0.0294 0.1891 +vn 0.3666 -0.0061 0.0487 +vn 0.3408 -0.0059 0.1385 +vn 0.2933 -0.0055 0.2166 +vn 0.3408 -0.0172 0.0480 +vn 0.3158 -0.0168 0.1350 +vn 0.2742 -0.0159 0.2059 +vn 0.2933 -0.0270 0.0447 +vn 0.2740 -0.0257 0.1280 +vn 0.2474 -0.0236 0.1891 +vn 0.0510 -0.0061 0.3501 +vn 0.0497 -0.0173 0.3254 +vn 0.0466 -0.0270 0.2801 +vn 0.1448 -0.0060 0.3254 +vn 0.1412 -0.0168 0.3016 +vn 0.1339 -0.0256 0.2619 +vn 0.2268 -0.0056 0.2801 +vn 0.2158 -0.0159 0.2617 +vn 0.1981 -0.0236 0.2362 +vn -0.0000 -0.0000 0.3568 +vn 0.1451 -0.0405 0.0474 +vn 0.2268 -0.0349 0.0445 +vn 0.0300 -0.0418 0.1185 +vn 0.1414 -0.0376 0.1348 +vn 0.2156 -0.0326 0.1279 +vn 0.0468 -0.0349 0.2165 +vn 0.1341 -0.0326 0.2061 +vn 0.1980 -0.0294 0.1891 +vn 0.3666 0.0061 -0.0487 +vn 0.3408 0.0059 -0.1385 +vn 0.2933 0.0055 -0.2166 +vn 0.3408 0.0172 -0.0480 +vn 0.3158 0.0168 -0.1350 +vn 0.2742 0.0159 -0.2059 +vn 0.2933 0.0270 -0.0447 +vn 0.2740 0.0257 -0.1280 +vn 0.2474 0.0236 -0.1891 +vn 0.0510 0.0061 -0.3501 +vn 0.0497 0.0173 -0.3254 +vn 0.0466 0.0270 -0.2801 +vn 0.1448 0.0060 -0.3254 +vn 0.1412 0.0168 -0.3016 +vn 0.1339 0.0256 -0.2619 +vn 0.2268 0.0056 -0.2801 +vn 0.2158 0.0159 -0.2617 +vn 0.1981 0.0236 -0.2362 +vn 0.0510 0.0436 -0.0487 +vn 0.1451 0.0405 -0.0474 +vn 0.2268 0.0349 -0.0445 +vn 0.0503 0.0405 -0.1383 +vn 0.1414 0.0376 -0.1348 +vn 0.2156 0.0326 -0.1279 +vn 0.0468 0.0349 -0.2165 +vn 0.1341 0.0326 -0.2061 +vn 0.1980 0.0294 -0.1891 +vn 0.0296 -0.0418 -0.1189 +vn 0.0466 -0.0349 -0.2166 +vn 0.1448 -0.0405 -0.0480 +vn 0.1412 -0.0376 -0.1350 +vn 0.1339 -0.0326 -0.2059 +vn 0.2268 -0.0349 -0.0447 +vn 0.2158 -0.0326 -0.1280 +vn 0.1981 -0.0294 -0.1891 +vn 0.0510 -0.0061 -0.3501 +vn 0.1451 -0.0059 -0.3254 +vn 0.2268 -0.0055 -0.2801 +vn 0.0503 -0.0172 -0.3254 +vn 0.1414 -0.0168 -0.3016 +vn 0.2156 -0.0159 -0.2619 +vn 0.0468 -0.0270 -0.2801 +vn 0.1341 -0.0257 -0.2617 +vn 0.1980 -0.0236 -0.2362 +vn 0.3666 -0.0061 -0.0487 +vn 0.3408 -0.0173 -0.0474 +vn 0.2933 -0.0270 -0.0445 +vn 0.3408 -0.0060 -0.1383 +vn 0.3158 -0.0168 -0.1348 +vn 0.2742 -0.0256 -0.1279 +vn 0.2933 -0.0056 -0.2165 +vn 0.2740 -0.0159 -0.2061 +vn 0.2474 -0.0236 -0.1891 +vn 0.0194 -0.0444 -0.0000 +vn 0.1430 -0.0411 -0.0000 +vn 0.2275 -0.0353 -0.0000 +vn 0.2964 -0.0271 -0.0000 +vn 0.3452 -0.0170 -0.0000 +vn 0.3705 -0.0058 -0.0000 +vn -0.0000 -0.0441 0.0466 +vn -0.0000 -0.0411 0.1366 +vn -0.0000 -0.0353 0.2172 +vn -0.0000 -0.0271 0.2831 +vn -0.0000 -0.0170 0.3297 +vn -0.0000 -0.0058 0.3538 +vn -0.3705 -0.0000 0.0466 +vn -0.3452 -0.0000 0.1365 +vn -0.2964 -0.0000 0.2172 +vn -0.2275 -0.0000 0.2831 +vn -0.1430 -0.0000 0.3297 +vn -0.0488 -0.0000 0.3538 +vn 0.0488 -0.0000 -0.3538 +vn 0.1430 -0.0000 -0.3297 +vn 0.2275 -0.0000 -0.2831 +vn 0.2964 -0.0000 -0.2172 +vn 0.3452 -0.0000 -0.1365 +vn 0.3705 -0.0000 -0.0466 +vn -0.0488 -0.0000 -0.3538 +vn -0.1430 -0.0000 -0.3297 +vn -0.2275 -0.0000 -0.2831 +vn -0.2964 -0.0000 -0.2172 +vn -0.3452 -0.0000 -0.1365 +vn -0.3705 -0.0000 -0.0466 +vn 0.0488 -0.0000 0.3538 +vn 0.1430 -0.0000 0.3297 +vn 0.2275 -0.0000 0.2831 +vn 0.2964 -0.0000 0.2172 +vn 0.3452 -0.0000 0.1365 +vn 0.3705 -0.0000 0.0466 +vn -0.0000 0.0441 -0.0466 +vn -0.0000 0.0411 -0.1365 +vn -0.0000 0.0353 -0.2172 +vn -0.0000 0.0271 -0.2831 +vn -0.0000 0.0170 -0.3297 +vn -0.0000 0.0058 -0.3538 +vn -0.0488 0.0441 -0.0000 +vn -0.1430 0.0411 -0.0000 +vn -0.2275 0.0353 -0.0000 +vn -0.2964 0.0271 -0.0000 +vn -0.3452 0.0170 -0.0000 +vn -0.3705 0.0058 -0.0000 +vn -0.0000 -0.0441 -0.0466 +vn -0.0000 -0.0411 -0.1366 +vn -0.0000 -0.0353 -0.2172 +vn -0.0000 -0.0271 -0.2831 +vn -0.0000 -0.0170 -0.3297 +vn -0.0000 -0.0058 -0.3538 +vn 0.0488 0.0441 -0.0000 +vn 0.1430 0.0411 -0.0000 +vn 0.2275 0.0353 -0.0000 +vn 0.2964 0.0271 -0.0000 +vn 0.3452 0.0170 -0.0000 +vn 0.3705 0.0058 -0.0000 +vn -0.0000 0.0441 0.0466 +vn -0.0000 0.0411 0.1365 +vn -0.0000 0.0353 0.2172 +vn -0.0000 0.0271 0.2831 +vn -0.0000 0.0170 0.3297 +vn -0.0000 0.0058 0.3538 +vn -0.0194 -0.0444 -0.0000 +vn -0.1430 -0.0411 -0.0000 +vn -0.2275 -0.0353 -0.0000 +vn -0.2964 -0.0271 -0.0000 +vn -0.3452 -0.0170 -0.0000 +vn -0.3705 -0.0058 -0.0000 +vn -0.0205 -0.0439 0.0496 +vn -0.0206 -0.0439 -0.0497 +vn 0.0206 -0.0439 0.0497 +vn 0.0205 -0.0439 -0.0496 +vn 0.0058 -0.0000 0.3568 +vn -0.0058 -0.0000 -0.3568 +vn -0.3734 -0.0000 0.0138 +vn 0.3734 -0.0000 -0.0138 +vn -0.3735 -0.0000 -0.0108 +vn 0.3735 -0.0000 0.0108 +vn 0.0046 -0.0000 -0.3568 +vn -0.0046 -0.0000 0.3568 +vt 0.579948 0.337500 +vt 0.840885 0.798611 +vt 0.578906 0.336574 +vt 0.579948 0.336574 +vt 0.840885 0.816204 +vt 0.579948 0.337500 +vt 0.579948 0.337500 +vt 0.578906 0.336574 +vt 0.579427 0.337500 +vt 0.579948 0.337500 +vt 0.840885 0.800463 +vt 0.579948 0.337500 +vt 0.579948 0.337500 +vt 0.579427 0.337500 +vt 0.578906 0.336574 +vt 0.579948 0.337500 +vt 0.840885 0.803241 +vt 0.579948 0.337500 +vt 0.579948 0.337500 +vt 0.579427 0.337500 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.579948 0.336574 +vt 0.840885 0.814352 +vt 0.579948 0.336574 +vt 0.840885 0.811574 +vt 0.579948 0.336574 +vt 0.840885 0.807870 +vt 0.579948 0.336574 +vt 0.842969 0.816204 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.776823 0.816204 +vt 0.794531 0.798611 +vt 0.794531 0.816204 +vt 0.776823 0.814352 +vt 0.776823 0.811574 +vt 0.776823 0.807870 +vt 0.785677 0.798611 +vt 0.778906 0.816204 +vt 0.779427 0.813426 +vt 0.779427 0.811574 +vt 0.778906 0.807870 +vt 0.785677 0.800463 +vt 0.780990 0.816204 +vt 0.780990 0.813426 +vt 0.780990 0.812500 +vt 0.780990 0.807870 +vt 0.785677 0.802315 +vt 0.785677 0.808796 +vt 0.794531 0.800463 +vt 0.794531 0.803241 +vt 0.794531 0.807870 +vt 0.792448 0.798611 +vt 0.792448 0.801389 +vt 0.792448 0.803241 +vt 0.792448 0.807870 +vt 0.790365 0.798611 +vt 0.790365 0.801389 +vt 0.790365 0.802315 +vt 0.790365 0.807870 +vt 0.792448 0.816204 +vt 0.790365 0.816204 +vt 0.785677 0.816204 +vt 0.794531 0.814352 +vt 0.792448 0.813426 +vt 0.790365 0.813426 +vt 0.785677 0.814352 +vt 0.794531 0.811574 +vt 0.792448 0.811574 +vt 0.790365 0.812500 +vt 0.785677 0.812500 +vt 0.579948 0.333796 +vt 0.840885 0.862500 +vt 0.578906 0.333796 +vt 0.840885 0.880093 +vt 0.579948 0.331944 +vt 0.579948 0.333796 +vt 0.842969 0.862500 +vt 0.579948 0.333796 +vt 0.579427 0.333796 +vt 0.579948 0.332870 +vt 0.840885 0.864352 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.579427 0.332870 +vt 0.579948 0.332870 +vt 0.840885 0.867130 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.579427 0.332870 +vt 0.579427 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.579427 0.331944 +vt 0.578906 0.333796 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.579427 0.331944 +vt 0.578906 0.333796 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.579427 0.332870 +vt 0.579948 0.331944 +vt 0.840885 0.877315 +vt 0.579948 0.332870 +vt 0.840885 0.875463 +vt 0.579948 0.332870 +vt 0.840885 0.870833 +vt 0.579948 0.331944 +vt 0.579948 0.331944 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.579948 0.331944 +vt 0.579948 0.331944 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.794531 0.862500 +vt 0.794531 0.880093 +vt 0.776823 0.862500 +vt 0.794531 0.864352 +vt 0.794531 0.867130 +vt 0.794531 0.870833 +vt 0.792448 0.862500 +vt 0.792448 0.864352 +vt 0.792448 0.867130 +vt 0.792448 0.870833 +vt 0.790365 0.862500 +vt 0.790365 0.864352 +vt 0.790365 0.866204 +vt 0.790365 0.870833 +vt 0.787240 0.870833 +vt 0.792448 0.880093 +vt 0.790365 0.880093 +vt 0.776823 0.870833 +vt 0.785677 0.880093 +vt 0.794531 0.877315 +vt 0.792448 0.877315 +vt 0.790365 0.877315 +vt 0.785677 0.877315 +vt 0.778906 0.870833 +vt 0.794531 0.875463 +vt 0.792448 0.875463 +vt 0.790365 0.875463 +vt 0.785677 0.876389 +vt 0.780990 0.870833 +vt 0.778906 0.862500 +vt 0.780990 0.862500 +vt 0.785677 0.862500 +vt 0.776823 0.864352 +vt 0.779427 0.864352 +vt 0.780990 0.864352 +vt 0.785677 0.864352 +vt 0.776823 0.867130 +vt 0.779427 0.867130 +vt 0.780990 0.866204 +vt 0.785677 0.866204 +vt 0.579948 0.340278 +vt 0.840885 0.752315 +vt 0.840885 0.734722 +vt 0.579948 0.342130 +vt 0.575781 0.336574 +vt 0.579948 0.341204 +vt 0.840885 0.750463 +vt 0.579948 0.341204 +vt 0.840885 0.747685 +vt 0.579948 0.341204 +vt 0.840885 0.743981 +vt 0.579948 0.340278 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579948 0.340278 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579427 0.341204 +vt 0.575260 0.336574 +vt 0.579948 0.342130 +vt 0.579948 0.342130 +vt 0.575260 0.336574 +vt 0.579427 0.342130 +vt 0.579948 0.342130 +vt 0.840885 0.737500 +vt 0.579948 0.342130 +vt 0.579948 0.342130 +vt 0.579427 0.342130 +vt 0.575260 0.336574 +vt 0.579948 0.341204 +vt 0.840885 0.739352 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579427 0.341204 +vt 0.575260 0.336574 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.579427 0.340278 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.579427 0.341204 +vt 0.575781 0.336574 +vt 0.575260 0.336574 +vt 0.575260 0.336574 +vt 0.575260 0.336574 +vt 0.579427 0.341204 +vt 0.575260 0.336574 +vt 0.794531 0.734722 +vt 0.794531 0.752315 +vt 0.730990 0.816204 +vt 0.794531 0.737500 +vt 0.794531 0.739352 +vt 0.794531 0.743981 +vt 0.792448 0.734722 +vt 0.792448 0.737500 +vt 0.792448 0.739352 +vt 0.792448 0.743981 +vt 0.790365 0.734722 +vt 0.790365 0.737500 +vt 0.790365 0.739352 +vt 0.790365 0.743981 +vt 0.789323 0.743981 +vt 0.785677 0.746759 +vt 0.722135 0.810648 +vt 0.792448 0.752315 +vt 0.790365 0.752315 +vt 0.730990 0.807870 +vt 0.785677 0.752315 +vt 0.794531 0.750463 +vt 0.792448 0.750463 +vt 0.790365 0.750463 +vt 0.785677 0.750463 +vt 0.728906 0.807870 +vt 0.794531 0.747685 +vt 0.792448 0.747685 +vt 0.790365 0.748611 +vt 0.785677 0.748611 +vt 0.726823 0.807870 +vt 0.728906 0.816204 +vt 0.726302 0.816204 +vt 0.722135 0.816204 +vt 0.785677 0.734722 +vt 0.730990 0.814352 +vt 0.728385 0.813426 +vt 0.726302 0.813426 +vt 0.785677 0.737500 +vt 0.722135 0.814352 +vt 0.730990 0.811574 +vt 0.728906 0.811574 +vt 0.726302 0.812500 +vt 0.785677 0.738426 +vt 0.722135 0.812500 +vt 0.840885 0.688426 +vt 0.579948 0.344907 +vt 0.840885 0.926389 +vt 0.579948 0.329167 +vt 0.575781 0.333796 +vt 0.579948 0.344907 +vt 0.840885 0.686574 +vt 0.579948 0.344907 +vt 0.840885 0.684722 +vt 0.579948 0.345833 +vt 0.579948 0.328241 +vt 0.840885 0.934722 +vt 0.840885 0.680093 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.345833 +vt 0.579948 0.328241 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.345833 +vt 0.579948 0.328241 +vt 0.579427 0.345833 +vt 0.579427 0.329167 +vt 0.575260 0.332870 +vt 0.579948 0.329167 +vt 0.579948 0.329167 +vt 0.575781 0.332870 +vt 0.579427 0.329167 +vt 0.579948 0.329167 +vt 0.840885 0.928241 +vt 0.579948 0.329167 +vt 0.579948 0.329167 +vt 0.579427 0.329167 +vt 0.575781 0.332870 +vt 0.579948 0.329167 +vt 0.840885 0.930093 +vt 0.579948 0.329167 +vt 0.579948 0.329167 +vt 0.579427 0.329167 +vt 0.575260 0.332870 +vt 0.575781 0.333796 +vt 0.575260 0.333796 +vt 0.575260 0.333796 +vt 0.579427 0.344907 +vt 0.575781 0.332870 +vt 0.575781 0.332870 +vt 0.575260 0.332870 +vt 0.579427 0.344907 +vt 0.575260 0.332870 +vt 0.575781 0.332870 +vt 0.575781 0.332870 +vt 0.575260 0.332870 +vt 0.579427 0.344907 +vt 0.575260 0.332870 +vt 0.730990 0.862500 +vt 0.794531 0.926389 +vt 0.794531 0.688426 +vt 0.730990 0.864352 +vt 0.730990 0.867130 +vt 0.730990 0.870833 +vt 0.785677 0.926389 +vt 0.728906 0.862500 +vt 0.728906 0.864352 +vt 0.728906 0.867130 +vt 0.728906 0.870833 +vt 0.785677 0.928241 +vt 0.726302 0.862500 +vt 0.726302 0.864352 +vt 0.726302 0.866204 +vt 0.726823 0.870833 +vt 0.785677 0.930093 +vt 0.725781 0.870833 +vt 0.789323 0.934722 +vt 0.785677 0.683796 +vt 0.794531 0.928241 +vt 0.794531 0.930093 +vt 0.794531 0.934722 +vt 0.794531 0.680093 +vt 0.792448 0.926389 +vt 0.792448 0.928241 +vt 0.792448 0.930093 +vt 0.792448 0.934722 +vt 0.792448 0.680093 +vt 0.790365 0.926389 +vt 0.790365 0.928241 +vt 0.790365 0.930093 +vt 0.790365 0.934722 +vt 0.790365 0.680093 +vt 0.792448 0.688426 +vt 0.790365 0.688426 +vt 0.722135 0.862500 +vt 0.785677 0.688426 +vt 0.794531 0.686574 +vt 0.792448 0.686574 +vt 0.790365 0.686574 +vt 0.722135 0.864352 +vt 0.785677 0.686574 +vt 0.794531 0.684722 +vt 0.792448 0.684722 +vt 0.790365 0.684722 +vt 0.722135 0.866204 +vt 0.785677 0.684722 +vt 0.778906 0.816204 +vt 0.776823 0.816204 +vt 0.776823 0.814352 +vt 0.779427 0.813426 +vt 0.776823 0.864352 +vt 0.776823 0.862500 +vt 0.778906 0.862500 +vt 0.779427 0.864352 +vt 0.730990 0.814352 +vt 0.730990 0.816204 +vt 0.728906 0.816204 +vt 0.728385 0.813426 +vt 0.728906 0.862500 +vt 0.730990 0.862500 +vt 0.730990 0.864352 +vt 0.728906 0.864352 +s 0 +usemtl CabnetDoors +f 14527/28746/11112 14377/28565/11112 14453/28655/11112 14599/28845/11112 +f 14601/28847/11113 14562/28789/11113 14489/28695/11113 14525/28744/11113 +f 14452/28654/11114 14416/28608/11114 14563/28791/11114 14600/28846/11114 +f 14341/28519/11115 14490/28697/11115 14564/28793/11115 14415/28607/11115 +f 14379/28567/11116 14342/28521/11116 14414/28606/11116 14451/28653/11116 +f 14340/28517/11117 14343/28522/11117 14347/28528/11117 14346/28526/11117 +f 14343/28522/11118 14344/28523/11118 14348/28529/11118 14347/28528/11118 +f 14344/28523/11119 14345/28525/11119 14349/28530/11119 14348/28529/11119 +f 14346/28526/11120 14347/28528/11120 14351/28534/11120 14350/28532/11120 +f 14347/28528/11121 14348/28529/11121 14352/28535/11121 14351/28534/11121 +f 14348/28529/11122 14349/28530/11122 14353/28536/11122 14352/28535/11122 +f 14350/28532/11123 14351/28534/11123 14372/28560/11123 14368/28554/11123 +f 14351/28534/11124 14352/28535/11124 14376/28564/11124 14372/28560/11124 +f 14352/28535/11125 14353/28536/11125 14354/28538/11125 14376/28564/11125 +f 14341/28519/11126 14355/28539/11126 14359/28543/11126 14358/28542/11126 +f 14355/28539/11127 14356/28540/11127 14360/28544/11127 14359/28543/11127 +f 14356/28540/11128 14357/28541/11128 14361/28545/11128 14360/28544/11128 +f 14358/28542/11129 14359/28543/11129 14363/28547/11129 14362/28546/11129 +f 14359/28543/11130 14360/28544/11130 14364/28548/11130 14363/28547/11130 +f 14360/28544/11131 14361/28545/11131 14365/28549/11131 14364/28548/11131 +f 14362/28546/11132 14363/28547/11132 14349/28531/11132 14345/28524/11132 +f 14363/28547/11133 14364/28548/11133 14353/28537/11133 14349/28531/11133 +f 14364/28548/11134 14365/28549/11134 14354/28538/11134 14353/28537/11134 +f 14342/28520/11135 14366/28550/11135 14370/28558/11135 14369/28556/11135 +f 14366/28550/11136 14367/28552/11136 14371/28559/11136 14370/28558/11136 +f 14367/28552/11137 14368/28554/11137 14372/28560/11137 14371/28559/11137 +f 14369/28556/11138 14370/28558/11138 14374/28562/11138 14373/28561/11138 +f 14370/28558/11139 14371/28559/11139 14375/28563/11139 14374/28562/11139 +f 14371/28559/11140 14372/28560/11140 14376/28564/11140 14375/28563/11140 +f 14373/28561/11141 14374/28562/11141 14361/28545/11141 14357/28541/11141 +f 14374/28562/11142 14375/28563/11142 14365/28549/11142 14361/28545/11142 +f 14375/28563/11143 14376/28564/11143 14354/28538/11143 14365/28549/11143 +f 14554/28779/11116 14527/28746/11116 14645/28902/11116 14644/28901/11116 +f 14380/28568/11144 14381/28569/11144 14385/28574/11144 14384/28573/11144 +f 14381/28569/11145 14382/28570/11145 14386/28575/11145 14385/28574/11145 +f 14383/28572/11146 14384/28573/11146 14388/28578/11146 14387/28577/11146 +f 14384/28573/11147 14385/28574/11147 14389/28579/11147 14388/28578/11147 +f 14385/28574/11148 14386/28575/11148 14390/28580/11148 14389/28579/11148 +f 14387/28577/11149 14388/28578/11149 14409/28600/11149 14405/28596/11149 +f 14388/28578/11150 14389/28579/11150 14413/28604/11150 14409/28600/11150 +f 14389/28579/11151 14390/28580/11151 14391/28582/11151 14413/28604/11151 +f 14378/28566/11152 14392/28583/11152 14396/28587/11152 14395/28586/11152 +f 14392/28583/11153 14393/28584/11153 14397/28588/11153 14396/28587/11153 +f 14393/28584/11154 14394/28585/11154 14398/28589/11154 14397/28588/11154 +f 14395/28586/11155 14396/28587/11155 14400/28591/11155 14399/28590/11155 +f 14396/28587/11156 14397/28588/11156 14401/28592/11156 14400/28591/11156 +f 14397/28588/11157 14398/28589/11157 14402/28593/11157 14401/28592/11157 +f 14399/28590/11158 14400/28591/11158 14386/28576/11158 14382/28571/11158 +f 14400/28591/11159 14401/28592/11159 14390/28581/11159 14386/28576/11159 +f 14401/28592/11160 14402/28593/11160 14391/28582/11160 14390/28581/11160 +f 14379/28567/11161 14403/28594/11161 14407/28598/11161 14406/28597/11161 +f 14403/28594/11162 14404/28595/11162 14408/28599/11162 14407/28598/11162 +f 14404/28595/11163 14405/28596/11163 14409/28600/11163 14408/28599/11163 +f 14406/28597/11164 14407/28598/11164 14411/28602/11164 14410/28601/11164 +f 14407/28598/11165 14408/28599/11165 14412/28603/11165 14411/28602/11165 +f 14408/28599/11166 14409/28600/11166 14413/28604/11166 14412/28603/11166 +f 14410/28601/11167 14411/28602/11167 14398/28589/11167 14394/28585/11167 +f 14411/28602/11168 14412/28603/11168 14402/28593/11168 14398/28589/11168 +f 14412/28603/11169 14413/28604/11169 14391/28582/11169 14402/28593/11169 +f 14414/28605/11170 14417/28610/11170 14421/28616/11170 14420/28614/11170 +f 14417/28610/11171 14418/28612/11171 14422/28617/11171 14421/28616/11171 +f 14418/28612/11172 14419/28613/11172 14423/28618/11172 14422/28617/11172 +f 14420/28614/11173 14421/28616/11173 14425/28621/11173 14424/28619/11173 +f 14421/28616/11174 14422/28617/11174 14426/28622/11174 14425/28621/11174 +f 14422/28617/11175 14423/28618/11175 14427/28623/11175 14426/28622/11175 +f 14424/28619/11176 14425/28621/11176 14446/28648/11176 14442/28643/11176 +f 14425/28621/11177 14426/28622/11177 14450/28652/11177 14446/28648/11177 +f 14426/28622/11178 14427/28623/11178 14428/28624/11178 14450/28652/11178 +f 14415/28607/11179 14429/28625/11179 14433/28630/11179 14432/28629/11179 +f 14429/28625/11180 14430/28626/11180 14434/28631/11180 14433/28630/11180 +f 14430/28626/11181 14431/28627/11181 14435/28632/11181 14434/28631/11181 +f 14432/28629/11182 14433/28630/11182 14437/28635/11182 14436/28634/11182 +f 14433/28630/11183 14434/28631/11183 14438/28636/11183 14437/28635/11183 +f 14434/28631/11184 14435/28632/11184 14439/28637/11184 14438/28636/11184 +f 14436/28634/11185 14437/28635/11185 14423/28618/11185 14419/28613/11185 +f 14437/28635/11186 14438/28636/11186 14427/28623/11186 14423/28618/11186 +f 14438/28636/11187 14439/28637/11187 14428/28624/11187 14427/28623/11187 +f 14416/28609/11188 14440/28639/11188 14444/28646/11188 14443/28645/11188 +f 14440/28639/11189 14441/28641/11189 14445/28647/11189 14444/28646/11189 +f 14441/28641/11190 14442/28643/11190 14446/28648/11190 14445/28647/11190 +f 14443/28645/11191 14444/28646/11191 14448/28650/11191 14447/28649/11191 +f 14444/28646/11192 14445/28647/11192 14449/28651/11192 14448/28650/11192 +f 14445/28647/11193 14446/28648/11193 14450/28652/11193 14449/28651/11193 +f 14447/28649/11194 14448/28650/11194 14435/28633/11194 14431/28628/11194 +f 14448/28650/11195 14449/28651/11195 14439/28638/11195 14435/28633/11195 +f 14449/28651/11196 14450/28652/11196 14428/28624/11196 14439/28638/11196 +f 14451/28653/11197 14454/28656/11197 14458/28660/11197 14457/28659/11197 +f 14454/28656/11198 14455/28657/11198 14459/28661/11198 14458/28660/11198 +f 14455/28657/11199 14456/28658/11199 14460/28662/11199 14459/28661/11199 +f 14457/28659/11200 14458/28660/11200 14462/28664/11200 14461/28663/11200 +f 14458/28660/11201 14459/28661/11201 14463/28665/11201 14462/28664/11201 +f 14459/28661/11202 14460/28662/11202 14464/28666/11202 14463/28665/11202 +f 14461/28663/11203 14462/28664/11203 14483/28688/11203 14479/28684/11203 +f 14462/28664/11204 14463/28665/11204 14487/28692/11204 14483/28688/11204 +f 14463/28665/11205 14464/28666/11205 14465/28667/11205 14487/28692/11205 +f 14452/28654/11206 14466/28668/11206 14470/28673/11206 14469/28672/11206 +f 14466/28668/11207 14467/28669/11207 14471/28674/11207 14470/28673/11207 +f 14467/28669/11208 14468/28671/11208 14472/28675/11208 14471/28674/11208 +f 14469/28672/11209 14470/28673/11209 14474/28678/11209 14473/28677/11209 +f 14470/28673/11210 14471/28674/11210 14475/28679/11210 14474/28678/11210 +f 14471/28674/11211 14472/28675/11211 14476/28680/11211 14475/28679/11211 +f 14473/28677/11212 14474/28678/11212 14460/28662/11212 14456/28658/11212 +f 14474/28678/11213 14475/28679/11213 14464/28666/11213 14460/28662/11213 +f 14475/28679/11214 14476/28680/11214 14465/28667/11214 14464/28666/11214 +f 14480/28685/11113 14453/28655/11113 14641/28898/11113 14640/28897/11113 +f 14477/28682/11215 14478/28683/11215 14482/28687/11215 14481/28686/11215 +f 14478/28683/11216 14479/28684/11216 14483/28688/11216 14482/28687/11216 +f 14480/28685/11217 14481/28686/11217 14485/28690/11217 14484/28689/11217 +f 14481/28686/11218 14482/28687/11218 14486/28691/11218 14485/28690/11218 +f 14482/28687/11219 14483/28688/11219 14487/28692/11219 14486/28691/11219 +f 14484/28689/11220 14485/28690/11220 14472/28676/11220 14468/28670/11220 +f 14485/28690/11221 14486/28691/11221 14476/28681/11221 14472/28676/11221 +f 14486/28691/11222 14487/28692/11222 14465/28667/11222 14476/28681/11222 +f 14488/28693/11223 14491/28698/11223 14495/28705/11223 14494/28704/11223 +f 14491/28698/11224 14492/28700/11224 14496/28706/11224 14495/28705/11224 +f 14492/28700/11225 14493/28702/11225 14497/28707/11225 14496/28706/11225 +f 14494/28704/11226 14495/28705/11226 14499/28709/11226 14498/28708/11226 +f 14495/28705/11227 14496/28706/11227 14500/28710/11227 14499/28709/11227 +f 14496/28706/11228 14497/28707/11228 14501/28711/11228 14500/28710/11228 +f 14498/28708/11229 14499/28709/11229 14520/28737/11229 14516/28733/11229 +f 14499/28709/11230 14500/28710/11230 14524/28742/11230 14520/28737/11230 +f 14500/28710/11231 14501/28711/11231 14502/28712/11231 14524/28742/11231 +f 14489/28696/11232 14503/28714/11232 14507/28720/11232 14506/28718/11232 +f 14503/28714/11233 14504/28715/11233 14508/28721/11233 14507/28720/11233 +f 14504/28715/11234 14505/28717/11234 14509/28722/11234 14508/28721/11234 +f 14506/28718/11235 14507/28720/11235 14511/28726/11235 14510/28724/11235 +f 14507/28720/11236 14508/28721/11236 14512/28727/11236 14511/28726/11236 +f 14508/28721/11237 14509/28722/11237 14513/28728/11237 14512/28727/11237 +f 14510/28724/11238 14511/28726/11238 14497/28707/11238 14493/28702/11238 +f 14511/28726/11239 14512/28727/11239 14501/28711/11239 14497/28707/11239 +f 14512/28727/11240 14513/28728/11240 14502/28712/11240 14501/28711/11240 +f 14490/28697/11241 14514/28730/11241 14518/28735/11241 14517/28734/11241 +f 14514/28730/11242 14515/28731/11242 14519/28736/11242 14518/28735/11242 +f 14515/28731/11243 14516/28732/11243 14520/28738/11243 14519/28736/11243 +f 14517/28734/11244 14518/28735/11244 14522/28740/11244 14521/28739/11244 +f 14518/28735/11245 14519/28736/11245 14523/28741/11245 14522/28740/11245 +f 14519/28736/11246 14520/28738/11246 14524/28743/11246 14523/28741/11246 +f 14521/28739/11247 14522/28740/11247 14509/28723/11247 14505/28716/11247 +f 14522/28740/11248 14523/28741/11248 14513/28729/11248 14509/28723/11248 +f 14523/28741/11249 14524/28743/11249 14502/28713/11249 14513/28729/11249 +f 14525/28744/11250 14528/28747/11250 14532/28751/11250 14531/28750/11250 +f 14528/28747/11251 14529/28748/11251 14533/28752/11251 14532/28751/11251 +f 14529/28748/11252 14530/28749/11252 14534/28753/11252 14533/28752/11252 +f 14531/28750/11253 14532/28751/11253 14536/28755/11253 14535/28754/11253 +f 14532/28751/11254 14533/28752/11254 14537/28756/11254 14536/28755/11254 +f 14533/28752/11255 14534/28753/11255 14538/28757/11255 14537/28756/11255 +f 14535/28754/11256 14536/28755/11256 14557/28782/11256 14553/28778/11256 +f 14536/28755/11257 14537/28756/11257 14561/28787/11257 14557/28782/11257 +f 14537/28756/11258 14538/28757/11258 14539/28758/11258 14561/28787/11258 +f 14526/28745/11259 14540/28761/11259 14544/28766/11259 14543/28765/11259 +f 14540/28761/11260 14541/28762/11260 14545/28767/11260 14544/28766/11260 +f 14541/28762/11261 14542/28764/11261 14546/28768/11261 14545/28767/11261 +f 14543/28765/11262 14544/28766/11262 14548/28771/11262 14547/28770/11262 +f 14544/28766/11263 14545/28767/11263 14549/28772/11263 14548/28771/11263 +f 14545/28767/11264 14546/28768/11264 14550/28773/11264 14549/28772/11264 +f 14547/28770/11265 14548/28771/11265 14534/28753/11265 14530/28749/11265 +f 14548/28771/11266 14549/28772/11266 14538/28757/11266 14534/28753/11266 +f 14549/28772/11267 14550/28773/11267 14539/28759/11267 14538/28757/11267 +f 14605/28852/11268 14599/28845/11268 14649/28906/11268 14648/28905/11268 +f 14551/28775/11269 14552/28776/11269 14556/28781/11269 14555/28780/11269 +f 14552/28776/11270 14553/28777/11270 14557/28783/11270 14556/28781/11270 +f 14554/28779/11271 14555/28780/11271 14559/28785/11271 14558/28784/11271 +f 14555/28780/11272 14556/28781/11272 14560/28786/11272 14559/28785/11272 +f 14556/28781/11273 14557/28783/11273 14561/28788/11273 14560/28786/11273 +f 14558/28784/11274 14559/28785/11274 14546/28769/11274 14542/28763/11274 +f 14559/28785/11275 14560/28786/11275 14550/28774/11275 14546/28769/11275 +f 14560/28786/11276 14561/28788/11276 14539/28760/11276 14550/28774/11276 +f 14562/28790/11277 14565/28794/11277 14569/28803/11277 14568/28802/11277 +f 14565/28794/11278 14566/28796/11278 14570/28804/11278 14569/28803/11278 +f 14566/28796/11279 14567/28798/11279 14571/28805/11279 14570/28804/11279 +f 14568/28802/11280 14569/28803/11280 14573/28808/11280 14572/28807/11280 +f 14569/28803/11281 14570/28804/11281 14574/28809/11281 14573/28808/11281 +f 14570/28804/11282 14571/28805/11282 14575/28810/11282 14574/28809/11282 +f 14572/28807/11283 14573/28808/11283 14594/28838/11283 14590/28834/11283 +f 14573/28808/11284 14574/28809/11284 14598/28843/11284 14594/28838/11284 +f 14574/28809/11285 14575/28810/11285 14576/28812/11285 14598/28843/11285 +f 14563/28792/11286 14577/28815/11286 14581/28821/11286 14580/28819/11286 +f 14577/28815/11287 14578/28816/11287 14582/28822/11287 14581/28821/11287 +f 14578/28816/11288 14579/28818/11288 14583/28823/11288 14582/28822/11288 +f 14580/28819/11289 14581/28821/11289 14585/28827/11289 14584/28825/11289 +f 14581/28821/11290 14582/28822/11290 14586/28828/11290 14585/28827/11290 +f 14582/28822/11291 14583/28823/11291 14587/28829/11291 14586/28828/11291 +f 14584/28825/11292 14585/28827/11292 14571/28806/11292 14567/28799/11292 +f 14585/28827/11293 14586/28828/11293 14575/28811/11293 14571/28806/11293 +f 14586/28828/11294 14587/28829/11294 14576/28813/11294 14575/28811/11294 +f 14564/28793/11295 14588/28831/11295 14592/28836/11295 14591/28835/11295 +f 14588/28831/11296 14589/28832/11296 14593/28837/11296 14592/28836/11296 +f 14589/28832/11297 14590/28833/11297 14594/28839/11297 14593/28837/11297 +f 14591/28835/11298 14592/28836/11298 14596/28841/11298 14595/28840/11298 +f 14592/28836/11299 14593/28837/11299 14597/28842/11299 14596/28841/11299 +f 14593/28837/11300 14594/28839/11300 14598/28844/11300 14597/28842/11300 +f 14595/28840/11301 14596/28841/11301 14583/28824/11301 14579/28817/11301 +f 14596/28841/11302 14597/28842/11302 14587/28830/11302 14583/28824/11302 +f 14597/28842/11303 14598/28844/11303 14576/28814/11303 14587/28830/11303 +f 14383/28572/11114 14377/28565/11114 14637/28894/11114 14636/28893/11114 +f 14602/28848/11304 14603/28849/11304 14607/28854/11304 14606/28853/11304 +f 14603/28849/11305 14604/28850/11305 14608/28855/11305 14607/28854/11305 +f 14605/28852/11306 14606/28853/11306 14610/28858/11306 14609/28857/11306 +f 14606/28853/11307 14607/28854/11307 14611/28859/11307 14610/28858/11307 +f 14607/28854/11308 14608/28855/11308 14612/28860/11308 14611/28859/11308 +f 14609/28857/11309 14610/28858/11309 14631/28886/11309 14627/28881/11309 +f 14610/28858/11310 14611/28859/11310 14635/28891/11310 14631/28886/11310 +f 14611/28859/11311 14612/28860/11311 14613/28862/11311 14635/28891/11311 +f 14600/28846/11312 14614/28865/11312 14618/28870/11312 14617/28869/11312 +f 14614/28865/11313 14615/28866/11313 14619/28871/11313 14618/28870/11313 +f 14615/28866/11314 14616/28867/11314 14620/28872/11314 14619/28871/11314 +f 14617/28869/11315 14618/28870/11315 14622/28875/11315 14621/28874/11315 +f 14618/28870/11316 14619/28871/11316 14623/28876/11316 14622/28875/11316 +f 14619/28871/11317 14620/28872/11317 14624/28877/11317 14623/28876/11317 +f 14621/28874/11318 14622/28875/11318 14608/28856/11318 14604/28851/11318 +f 14622/28875/11319 14623/28876/11319 14612/28861/11319 14608/28856/11319 +f 14623/28876/11320 14624/28877/11320 14613/28863/11320 14612/28861/11320 +f 14601/28847/11321 14625/28879/11321 14629/28884/11321 14628/28883/11321 +f 14625/28879/11322 14626/28880/11322 14630/28885/11322 14629/28884/11322 +f 14626/28880/11323 14627/28882/11323 14631/28887/11323 14630/28885/11323 +f 14628/28883/11324 14629/28884/11324 14633/28889/11324 14632/28888/11324 +f 14629/28884/11325 14630/28885/11325 14634/28890/11325 14633/28889/11325 +f 14630/28885/11326 14631/28887/11326 14635/28892/11326 14634/28890/11326 +f 14632/28888/11327 14633/28889/11327 14620/28873/11327 14616/28868/11327 +f 14633/28889/11328 14634/28890/11328 14624/28878/11328 14620/28873/11328 +f 14634/28890/11329 14635/28892/11329 14613/28864/11329 14624/28878/11329 +f 14527/28746/11330 14599/28845/11330 14605/28852/11330 14551/28775/11330 +f 14551/28775/11331 14605/28852/11331 14609/28857/11331 14552/28776/11331 +f 14552/28776/11332 14609/28857/11332 14627/28881/11332 14553/28777/11332 +f 14553/28778/11333 14627/28882/11333 14626/28880/11333 14535/28754/11333 +f 14535/28754/11334 14626/28880/11334 14625/28879/11334 14531/28750/11334 +f 14531/28750/11335 14625/28879/11335 14601/28847/11335 14525/28744/11335 +f 14377/28565/11336 14527/28746/11336 14554/28779/11336 14380/28568/11336 +f 14380/28568/11337 14554/28779/11337 14558/28784/11337 14381/28569/11337 +f 14381/28569/11338 14558/28784/11338 14542/28763/11338 14382/28570/11338 +f 14382/28571/11339 14542/28764/11339 14541/28762/11339 14399/28590/11339 +f 14399/28590/11340 14541/28762/11340 14540/28761/11340 14395/28586/11340 +f 14395/28586/11341 14540/28761/11341 14526/28745/11341 14378/28566/11341 +f 14342/28521/11342 14379/28567/11342 14406/28597/11342 14366/28551/11342 +f 14366/28551/11343 14406/28597/11343 14410/28601/11343 14367/28553/11343 +f 14367/28553/11344 14410/28601/11344 14394/28585/11344 14368/28555/11344 +f 14368/28555/11345 14394/28585/11345 14393/28584/11345 14350/28533/11345 +f 14350/28533/11346 14393/28584/11346 14392/28583/11346 14346/28527/11346 +f 14346/28527/11347 14392/28583/11347 14378/28566/11347 14340/28518/11347 +f 14600/28846/11348 14563/28791/11348 14580/28820/11348 14614/28865/11348 +f 14614/28865/11349 14580/28820/11349 14584/28826/11349 14615/28866/11349 +f 14615/28866/11350 14584/28826/11350 14567/28800/11350 14616/28867/11350 +f 14616/28868/11351 14567/28801/11351 14566/28797/11351 14632/28888/11351 +f 14632/28888/11352 14566/28797/11352 14565/28795/11352 14628/28883/11352 +f 14628/28883/11353 14565/28795/11353 14562/28789/11353 14601/28847/11353 +f 14416/28608/11354 14452/28654/11354 14469/28672/11354 14440/28640/11354 +f 14440/28640/11355 14469/28672/11355 14473/28677/11355 14441/28642/11355 +f 14441/28642/11356 14473/28677/11356 14456/28658/11356 14442/28644/11356 +f 14442/28644/11357 14456/28658/11357 14455/28657/11357 14424/28620/11357 +f 14424/28620/11358 14455/28657/11358 14454/28656/11358 14420/28615/11358 +f 14420/28615/11359 14454/28656/11359 14451/28653/11359 14414/28606/11359 +f 14488/28694/11360 14526/28745/11360 14543/28765/11360 14491/28699/11360 +f 14491/28699/11361 14543/28765/11361 14547/28770/11361 14492/28701/11361 +f 14492/28701/11362 14547/28770/11362 14530/28749/11362 14493/28703/11362 +f 14493/28703/11363 14530/28749/11363 14529/28748/11363 14510/28725/11363 +f 14510/28725/11364 14529/28748/11364 14528/28747/11364 14506/28719/11364 +f 14506/28719/11365 14528/28747/11365 14525/28744/11365 14489/28695/11365 +f 14415/28607/11366 14564/28793/11366 14591/28835/11366 14429/28625/11366 +f 14429/28625/11367 14591/28835/11367 14595/28840/11367 14430/28626/11367 +f 14430/28626/11368 14595/28840/11368 14579/28817/11368 14431/28627/11368 +f 14431/28628/11369 14579/28818/11369 14578/28816/11369 14447/28649/11369 +f 14447/28649/11370 14578/28816/11370 14577/28815/11370 14443/28645/11370 +f 14443/28645/11371 14577/28815/11371 14563/28792/11371 14416/28609/11371 +f 14341/28519/11372 14415/28607/11372 14432/28629/11372 14355/28539/11372 +f 14355/28539/11373 14432/28629/11373 14436/28634/11373 14356/28540/11373 +f 14356/28540/11374 14436/28634/11374 14419/28613/11374 14357/28541/11374 +f 14357/28541/11375 14419/28613/11375 14418/28612/11375 14373/28561/11375 +f 14373/28561/11376 14418/28612/11376 14417/28610/11376 14369/28556/11376 +f 14369/28557/11377 14417/28611/11377 14414/28606/11377 14342/28521/11377 +f 14599/28845/11378 14453/28655/11378 14480/28685/11378 14602/28848/11378 +f 14602/28848/11379 14480/28685/11379 14484/28689/11379 14603/28849/11379 +f 14603/28849/11380 14484/28689/11380 14468/28670/11380 14604/28850/11380 +f 14604/28851/11381 14468/28671/11381 14467/28669/11381 14621/28874/11381 +f 14621/28874/11382 14467/28669/11382 14466/28668/11382 14617/28869/11382 +f 14617/28869/11383 14466/28668/11383 14452/28654/11383 14600/28846/11383 +f 14564/28793/11384 14490/28697/11384 14517/28734/11384 14588/28831/11384 +f 14588/28831/11385 14517/28734/11385 14521/28739/11385 14589/28832/11385 +f 14589/28832/11386 14521/28739/11386 14505/28716/11386 14590/28833/11386 +f 14590/28834/11387 14505/28717/11387 14504/28715/11387 14572/28807/11387 +f 14572/28807/11388 14504/28715/11388 14503/28714/11388 14568/28802/11388 +f 14568/28802/11389 14503/28714/11389 14489/28696/11389 14562/28790/11389 +f 14490/28697/11390 14341/28519/11390 14358/28542/11390 14514/28730/11390 +f 14514/28730/11391 14358/28542/11391 14362/28546/11391 14515/28731/11391 +f 14515/28731/11392 14362/28546/11392 14345/28524/11392 14516/28732/11392 +f 14516/28733/11393 14345/28525/11393 14344/28523/11393 14498/28708/11393 +f 14498/28708/11394 14344/28523/11394 14343/28522/11394 14494/28704/11394 +f 14494/28704/11395 14343/28522/11395 14340/28517/11395 14488/28693/11395 +f 14453/28655/11396 14377/28565/11396 14383/28572/11396 14477/28682/11396 +f 14477/28682/11397 14383/28572/11397 14387/28577/11397 14478/28683/11397 +f 14478/28683/11398 14387/28577/11398 14405/28596/11398 14479/28684/11398 +f 14479/28684/11399 14405/28596/11399 14404/28595/11399 14461/28663/11399 +f 14461/28663/11400 14404/28595/11400 14403/28594/11400 14457/28659/11400 +f 14457/28659/11401 14403/28594/11401 14379/28567/11401 14451/28653/11401 +f 14526/28745/11268 14488/28694/11268 14340/28518/11268 14378/28566/11268 +f 14637/28894/11402 14638/28895/11402 14639/28896/11402 14636/28893/11402 +f 14641/28898/11403 14642/28899/11403 14643/28900/11403 14640/28897/11403 +f 14645/28902/11404 14646/28903/11404 14647/28904/11404 14644/28901/11404 +f 14649/28906/11405 14650/28907/11405 14651/28908/11405 14648/28905/11405 +f 14377/28565/11113 14380/28568/11113 14638/28895/11113 14637/28894/11113 +f 14599/28845/11116 14602/28848/11116 14650/28907/11116 14649/28906/11116 +f 14453/28655/11268 14477/28682/11268 14642/28899/11268 14641/28898/11268 +f 14527/28746/11114 14551/28775/11114 14646/28903/11114 14645/28902/11114 +f 14380/28568/11406 14384/28573/11406 14639/28896/11406 14638/28895/11406 +f 14602/28848/11407 14606/28853/11407 14651/28908/11407 14650/28907/11407 +f 14477/28682/11408 14481/28686/11408 14643/28900/11408 14642/28899/11408 +f 14551/28775/11409 14555/28780/11409 14647/28904/11409 14646/28903/11409 +f 14384/28573/11410 14383/28572/11410 14636/28893/11410 14639/28896/11410 +f 14606/28853/11411 14605/28852/11411 14648/28905/11411 14651/28908/11411 +f 14481/28686/11412 14480/28685/11412 14640/28897/11412 14643/28900/11412 +f 14555/28780/11413 14554/28779/11413 14644/28901/11413 14647/28904/11413 +o Top.012 +v -5.642359 0.737263 6.279411 +v -5.642359 0.749833 6.178487 +v -5.748052 0.737263 6.178487 +v -5.642359 0.740515 6.275975 +v -5.642359 0.743549 6.265885 +v -5.642359 0.746151 6.249851 +v -5.669704 0.737263 6.275975 +v -5.670565 0.740645 6.271883 +v -5.670105 0.743568 6.261679 +v -5.669538 0.745849 6.247483 +v -5.695214 0.737263 6.265885 +v -5.695404 0.740582 6.261613 +v -5.692704 0.743253 6.253061 +v -5.690489 0.745176 6.242025 +v -5.703381 0.744520 6.236755 +v -5.669704 0.749405 6.178487 +v -5.695214 0.748149 6.178487 +v -5.717095 0.746151 6.178487 +v -5.642359 0.749405 6.204599 +v -5.670798 0.748896 6.205420 +v -5.695376 0.747625 6.204981 +v -5.714548 0.745857 6.204439 +v -5.642359 0.748149 6.228957 +v -5.670264 0.747617 6.229139 +v -5.692729 0.746551 6.226561 +v -5.708892 0.745177 6.224446 +v -5.744452 0.737263 6.204599 +v -5.733886 0.737263 6.228957 +v -5.717095 0.737263 6.249851 +v -5.744452 0.740515 6.178487 +v -5.740168 0.740617 6.205643 +v -5.729481 0.740563 6.229112 +v -5.714615 0.740495 6.247419 +v -5.733886 0.743549 6.178487 +v -5.729413 0.743572 6.205133 +v -5.720456 0.743250 6.226584 +v -5.708899 0.742987 6.242019 +v -5.600537 0.660944 6.178487 +v -5.642359 0.673515 6.279411 +v -5.748052 0.673515 6.178487 +v -5.600537 0.661372 6.204599 +v -5.642359 0.662629 6.228957 +v -5.642359 0.664626 6.249851 +v -5.669704 0.661372 6.178487 +v -5.670566 0.661882 6.205643 +v -5.670105 0.663153 6.229112 +v -5.669538 0.664921 6.247419 +v -5.695214 0.662629 6.178487 +v -5.695404 0.663161 6.205133 +v -5.692704 0.664226 6.226584 +v -5.690489 0.665601 6.242019 +v -5.703381 0.666257 6.236755 +v -5.669704 0.673515 6.275975 +v -5.695214 0.673515 6.265885 +v -5.717095 0.673515 6.249851 +v -5.642359 0.670263 6.275975 +v -5.670798 0.670160 6.271883 +v -5.695376 0.670215 6.261679 +v -5.714548 0.670282 6.247483 +v -5.642359 0.667229 6.265885 +v -5.670264 0.667206 6.261613 +v -5.692729 0.667527 6.253061 +v -5.708892 0.667790 6.242025 +v -5.744452 0.670263 6.178487 +v -5.733886 0.667229 6.178487 +v -5.717095 0.664626 6.178487 +v -5.744452 0.673515 6.204599 +v -5.740168 0.670133 6.205420 +v -5.729481 0.667209 6.204981 +v -5.714615 0.664929 6.204439 +v -5.733886 0.673515 6.228957 +v -5.729413 0.670196 6.229139 +v -5.720456 0.667524 6.226561 +v -5.708899 0.665602 6.224446 +v -5.748052 0.737263 5.666692 +v -5.642359 0.749833 5.666692 +v -5.642359 0.737263 5.565768 +v -5.744453 0.740515 5.666692 +v -5.733887 0.743549 5.666692 +v -5.717095 0.746151 5.666692 +v -5.744453 0.737263 5.640580 +v -5.740168 0.740645 5.639758 +v -5.729481 0.743568 5.640198 +v -5.714615 0.745849 5.640740 +v -5.733887 0.737263 5.616222 +v -5.729413 0.740582 5.616040 +v -5.720456 0.743253 5.618618 +v -5.708900 0.745176 5.620733 +v -5.703381 0.744520 5.608423 +v -5.642359 0.749405 5.640580 +v -5.642359 0.748149 5.616222 +v -5.642359 0.746151 5.595328 +v -5.669705 0.749405 5.666692 +v -5.670566 0.748896 5.639536 +v -5.670105 0.747625 5.616067 +v -5.669538 0.745857 5.597760 +v -5.695214 0.748149 5.666692 +v -5.695405 0.747617 5.640046 +v -5.692704 0.746551 5.618595 +v -5.690490 0.745177 5.603160 +v -5.669705 0.737263 5.569204 +v -5.695214 0.737263 5.579294 +v -5.717095 0.737263 5.595328 +v -5.642359 0.740515 5.569204 +v -5.670798 0.740617 5.573296 +v -5.695376 0.740563 5.583500 +v -5.714548 0.740495 5.597695 +v -5.642359 0.743549 5.579294 +v -5.670264 0.743572 5.583565 +v -5.692729 0.743250 5.592118 +v -5.708893 0.742987 5.603153 +v -5.748052 0.673515 5.666692 +v -5.642359 0.673515 5.565768 +v -5.600537 0.660944 5.666692 +v -5.744453 0.673515 5.640580 +v -5.733887 0.673515 5.616222 +v -5.717095 0.673515 5.595328 +v -5.744453 0.670263 5.666692 +v -5.740168 0.670160 5.639536 +v -5.729481 0.670215 5.616067 +v -5.714615 0.670282 5.597760 +v -5.733887 0.667229 5.666692 +v -5.729413 0.667206 5.640046 +v -5.720456 0.667527 5.618595 +v -5.708900 0.667790 5.603160 +v -5.703381 0.666257 5.608423 +v -5.642359 0.670263 5.569204 +v -5.642359 0.667229 5.579294 +v -5.642359 0.664626 5.595328 +v -5.669705 0.673515 5.569204 +v -5.670566 0.670133 5.573296 +v -5.670105 0.667209 5.583500 +v -5.669538 0.664929 5.597695 +v -5.695214 0.673515 5.579294 +v -5.695405 0.670196 5.583565 +v -5.692704 0.667524 5.592118 +v -5.690490 0.665602 5.603153 +v -5.669705 0.661372 5.666692 +v -5.695214 0.662629 5.666692 +v -5.717095 0.664626 5.666692 +v -5.600537 0.661372 5.640580 +v -5.670798 0.661882 5.639758 +v -5.695376 0.663153 5.640198 +v -5.714548 0.664921 5.640740 +v -5.642359 0.662629 5.616222 +v -5.670264 0.663161 5.616040 +v -5.692729 0.664226 5.618618 +v -5.708893 0.665601 5.620733 +v -5.106386 0.737263 6.279411 +v -5.000693 0.737263 6.178486 +v -5.106386 0.749833 6.178486 +v -5.079040 0.737263 6.275974 +v -5.053531 0.737263 6.265885 +v -5.031650 0.737263 6.249851 +v -5.106386 0.740515 6.275974 +v -5.077947 0.740617 6.271883 +v -5.053369 0.740563 6.261678 +v -5.034197 0.740495 6.247483 +v -5.106386 0.743549 6.265885 +v -5.078481 0.743572 6.261613 +v -5.056016 0.743250 6.253060 +v -5.039853 0.742987 6.242025 +v -5.045364 0.744520 6.236755 +v -5.004292 0.740515 6.178486 +v -5.014858 0.743549 6.178486 +v -5.031650 0.746151 6.178486 +v -5.004292 0.737263 6.204598 +v -5.008577 0.740645 6.205420 +v -5.019264 0.743568 6.204980 +v -5.034130 0.745849 6.204439 +v -5.014858 0.737263 6.228957 +v -5.019332 0.740582 6.229139 +v -5.028289 0.743253 6.226561 +v -5.039845 0.745176 6.224446 +v -5.106386 0.749405 6.204598 +v -5.106386 0.748149 6.228957 +v -5.106386 0.746151 6.249851 +v -5.079040 0.749405 6.178486 +v -5.078179 0.748896 6.205642 +v -5.078640 0.747625 6.229112 +v -5.079207 0.745857 6.247419 +v -5.053531 0.748149 6.178486 +v -5.053340 0.747617 6.205133 +v -5.056041 0.746551 6.226584 +v -5.058255 0.745177 6.242018 +v -5.000693 0.673515 6.178486 +v -5.106386 0.673515 6.279411 +v -5.148208 0.660944 6.178486 +v -5.004292 0.673515 6.204598 +v -5.014858 0.673515 6.228957 +v -5.031650 0.673515 6.249851 +v -5.004292 0.670263 6.178486 +v -5.008577 0.670160 6.205642 +v -5.019264 0.670215 6.229112 +v -5.034130 0.670282 6.247419 +v -5.014858 0.667229 6.178486 +v -5.019332 0.667206 6.205133 +v -5.028289 0.667527 6.226584 +v -5.039845 0.667790 6.242018 +v -5.045364 0.666257 6.236755 +v -5.106386 0.670263 6.275974 +v -5.106386 0.667229 6.265885 +v -5.106386 0.664626 6.249851 +v -5.079040 0.673515 6.275974 +v -5.078179 0.670133 6.271883 +v -5.078640 0.667209 6.261678 +v -5.079207 0.664929 6.247483 +v -5.053531 0.673515 6.265885 +v -5.053340 0.670196 6.261613 +v -5.056041 0.667524 6.253060 +v -5.058255 0.665602 6.242025 +v -5.079040 0.661372 6.178486 +v -5.053531 0.662629 6.178486 +v -5.031650 0.664626 6.178486 +v -5.148208 0.661372 6.204598 +v -5.077947 0.661882 6.205420 +v -5.053369 0.663153 6.204980 +v -5.034197 0.664921 6.204439 +v -5.106386 0.662629 6.228957 +v -5.078481 0.663161 6.229139 +v -5.056016 0.664226 6.226561 +v -5.039852 0.665601 6.224446 +v -5.000693 0.737263 5.666692 +v -5.106386 0.737263 5.565767 +v -5.106386 0.749833 5.666692 +v -5.004292 0.737263 5.640580 +v -5.014859 0.737263 5.616221 +v -5.031650 0.737263 5.595327 +v -5.004292 0.740515 5.666692 +v -5.008577 0.740617 5.639536 +v -5.019264 0.740563 5.616066 +v -5.034130 0.740495 5.597760 +v -5.014859 0.743549 5.666692 +v -5.019332 0.743572 5.640046 +v -5.028289 0.743250 5.618595 +v -5.039845 0.742987 5.603160 +v -5.045364 0.744520 5.608423 +v -5.106386 0.740515 5.569204 +v -5.106386 0.743549 5.579294 +v -5.106386 0.746151 5.595327 +v -5.079041 0.737263 5.569204 +v -5.078180 0.740645 5.573296 +v -5.078640 0.743568 5.583500 +v -5.079207 0.745849 5.597695 +v -5.053531 0.737263 5.579293 +v -5.053341 0.740582 5.583565 +v -5.056041 0.743253 5.592118 +v -5.058256 0.745176 5.603153 +v -5.079041 0.749405 5.666692 +v -5.053531 0.748149 5.666692 +v -5.031650 0.746151 5.666692 +v -5.106386 0.749405 5.640580 +v -5.077947 0.748896 5.639758 +v -5.053369 0.747625 5.640198 +v -5.034197 0.745857 5.640739 +v -5.106386 0.748149 5.616221 +v -5.078481 0.747617 5.616040 +v -5.056016 0.746551 5.618618 +v -5.039853 0.745177 5.620733 +v -5.148208 0.660944 5.666692 +v -5.106386 0.673515 5.565767 +v -5.000693 0.673515 5.666692 +v -5.148208 0.661372 5.640580 +v -5.106386 0.662629 5.616221 +v -5.106386 0.664626 5.595327 +v -5.079041 0.661372 5.666692 +v -5.078179 0.661882 5.639536 +v -5.078640 0.663153 5.616066 +v -5.079207 0.664921 5.597760 +v -5.053531 0.662629 5.666692 +v -5.053341 0.663161 5.640046 +v -5.056041 0.664226 5.618595 +v -5.058256 0.665601 5.603160 +v -5.045364 0.666257 5.608423 +v -5.079041 0.673515 5.569204 +v -5.053531 0.673515 5.579294 +v -5.031650 0.673515 5.595327 +v -5.106386 0.670263 5.569204 +v -5.077947 0.670160 5.573296 +v -5.053369 0.670215 5.583500 +v -5.034197 0.670282 5.597695 +v -5.106386 0.667229 5.579294 +v -5.078481 0.667206 5.583565 +v -5.056016 0.667527 5.592118 +v -5.039853 0.667790 5.603153 +v -5.004292 0.670263 5.666692 +v -5.014859 0.667229 5.666692 +v -5.031650 0.664626 5.666692 +v -5.004292 0.673515 5.640580 +v -5.008577 0.670133 5.639758 +v -5.019264 0.667209 5.640198 +v -5.034130 0.664929 5.640739 +v -5.014859 0.673515 5.616221 +v -5.019332 0.670196 5.616040 +v -5.028289 0.667524 5.618618 +v -5.039845 0.665602 5.620733 +v -5.669704 -0.015018 6.178487 +v -5.600537 -0.015446 6.178487 +v -5.600537 -0.015018 6.204599 +v -5.670566 -0.014508 6.205643 +v -5.600537 -0.015018 5.640580 +v -5.600537 -0.015446 5.666692 +v -5.669705 -0.015018 5.666692 +v -5.670798 -0.014508 5.639758 +v -5.148208 -0.015018 6.204598 +v -5.148208 -0.015446 6.178486 +v -5.079040 -0.015018 6.178486 +v -5.077947 -0.014508 6.205420 +v -5.079041 -0.015018 5.666692 +v -5.148208 -0.015446 5.666692 +v -5.148208 -0.015018 5.640580 +v -5.078179 -0.014508 5.639536 +vn -0.0000 -0.0444 -0.0000 +vn 0.3737 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.3568 +vn -0.0000 0.0444 -0.0000 +vn -0.3737 -0.0000 -0.0000 +vn -0.0510 0.0061 0.3501 +vn -0.0497 0.0173 0.3254 +vn -0.0466 0.0270 0.2801 +vn -0.1448 0.0060 0.3254 +vn -0.1412 0.0168 0.3016 +vn -0.1339 0.0256 0.2619 +vn -0.2268 0.0056 0.2801 +vn -0.2158 0.0159 0.2617 +vn -0.1981 0.0236 0.2362 +vn -0.0510 0.0436 0.0487 +vn -0.1451 0.0405 0.0474 +vn -0.2268 0.0349 0.0445 +vn -0.0503 0.0405 0.1383 +vn -0.1414 0.0376 0.1348 +vn -0.2156 0.0326 0.1279 +vn -0.0468 0.0349 0.2165 +vn -0.1341 0.0326 0.2061 +vn -0.1980 0.0294 0.1891 +vn -0.3666 0.0061 0.0487 +vn -0.3408 0.0059 0.1385 +vn -0.2933 0.0055 0.2166 +vn -0.3408 0.0172 0.0480 +vn -0.3158 0.0168 0.1350 +vn -0.2742 0.0159 0.2059 +vn -0.2933 0.0270 0.0447 +vn -0.2740 0.0257 0.1280 +vn -0.2474 0.0236 0.1891 +vn -0.0296 -0.0418 0.1189 +vn -0.0466 -0.0349 0.2166 +vn -0.1448 -0.0405 0.0480 +vn -0.1412 -0.0376 0.1350 +vn -0.1339 -0.0326 0.2059 +vn -0.2268 -0.0349 0.0447 +vn -0.2158 -0.0326 0.1280 +vn -0.1981 -0.0294 0.1891 +vn -0.0510 -0.0061 0.3501 +vn -0.1451 -0.0059 0.3254 +vn -0.2268 -0.0055 0.2801 +vn -0.0503 -0.0172 0.3254 +vn -0.1414 -0.0168 0.3016 +vn -0.2156 -0.0159 0.2619 +vn -0.0468 -0.0270 0.2801 +vn -0.1341 -0.0257 0.2617 +vn -0.1980 -0.0236 0.2362 +vn -0.3666 -0.0061 0.0487 +vn -0.3408 -0.0173 0.0474 +vn -0.2933 -0.0270 0.0445 +vn -0.3408 -0.0060 0.1383 +vn -0.3158 -0.0168 0.1348 +vn -0.2742 -0.0256 0.1279 +vn -0.2933 -0.0056 0.2165 +vn -0.2740 -0.0159 0.2061 +vn -0.2474 -0.0236 0.1891 +vn -0.3666 0.0061 -0.0487 +vn -0.3408 0.0173 -0.0474 +vn -0.2933 0.0270 -0.0445 +vn -0.3408 0.0060 -0.1383 +vn -0.3158 0.0168 -0.1348 +vn -0.2742 0.0256 -0.1279 +vn -0.2933 0.0056 -0.2165 +vn -0.2740 0.0159 -0.2061 +vn -0.2474 0.0236 -0.1891 +vn -0.0510 0.0436 -0.0487 +vn -0.0497 0.0405 -0.1385 +vn -0.0466 0.0349 -0.2166 +vn -0.1448 0.0405 -0.0480 +vn -0.1412 0.0376 -0.1350 +vn -0.1339 0.0326 -0.2059 +vn -0.2268 0.0349 -0.0447 +vn -0.2158 0.0326 -0.1280 +vn -0.1981 0.0294 -0.1891 +vn -0.0510 0.0061 -0.3501 +vn -0.1451 0.0059 -0.3254 +vn -0.2268 0.0055 -0.2801 +vn -0.0503 0.0172 -0.3254 +vn -0.1414 0.0168 -0.3016 +vn -0.2156 0.0159 -0.2619 +vn -0.0468 0.0270 -0.2801 +vn -0.1341 0.0257 -0.2617 +vn -0.1980 0.0236 -0.2362 +vn -0.3666 -0.0061 -0.0487 +vn -0.3408 -0.0059 -0.1385 +vn -0.2933 -0.0055 -0.2166 +vn -0.3408 -0.0172 -0.0480 +vn -0.3158 -0.0168 -0.1350 +vn -0.2742 -0.0159 -0.2059 +vn -0.2933 -0.0270 -0.0447 +vn -0.2740 -0.0257 -0.1280 +vn -0.2474 -0.0236 -0.1891 +vn -0.0510 -0.0061 -0.3501 +vn -0.0497 -0.0173 -0.3254 +vn -0.0466 -0.0270 -0.2801 +vn -0.1448 -0.0060 -0.3254 +vn -0.1412 -0.0168 -0.3016 +vn -0.1339 -0.0256 -0.2619 +vn -0.2268 -0.0056 -0.2801 +vn -0.2158 -0.0159 -0.2617 +vn -0.1981 -0.0236 -0.2362 +vn -0.1451 -0.0405 -0.0474 +vn -0.2268 -0.0349 -0.0445 +vn -0.0300 -0.0418 -0.1185 +vn -0.1414 -0.0376 -0.1348 +vn -0.2156 -0.0326 -0.1279 +vn -0.0468 -0.0349 -0.2165 +vn -0.1341 -0.0326 -0.2061 +vn -0.1980 -0.0294 -0.1891 +vn 0.0510 0.0061 0.3501 +vn 0.1451 0.0059 0.3254 +vn 0.2268 0.0055 0.2801 +vn 0.0503 0.0172 0.3254 +vn 0.1414 0.0168 0.3016 +vn 0.2156 0.0159 0.2619 +vn 0.0468 0.0270 0.2801 +vn 0.1341 0.0257 0.2617 +vn 0.1980 0.0236 0.2362 +vn 0.3666 0.0061 0.0487 +vn 0.3408 0.0173 0.0474 +vn 0.2933 0.0270 0.0445 +vn 0.3408 0.0060 0.1383 +vn 0.3158 0.0168 0.1348 +vn 0.2742 0.0256 0.1279 +vn 0.2933 0.0056 0.2165 +vn 0.2740 0.0159 0.2061 +vn 0.2474 0.0236 0.1891 +vn 0.0510 0.0436 0.0487 +vn 0.0497 0.0405 0.1385 +vn 0.0466 0.0349 0.2166 +vn 0.1448 0.0405 0.0480 +vn 0.1412 0.0376 0.1350 +vn 0.1339 0.0326 0.2059 +vn 0.2268 0.0349 0.0447 +vn 0.2158 0.0326 0.1280 +vn 0.1981 0.0294 0.1891 +vn 0.3666 -0.0061 0.0487 +vn 0.3408 -0.0059 0.1385 +vn 0.2933 -0.0055 0.2166 +vn 0.3408 -0.0172 0.0480 +vn 0.3158 -0.0168 0.1350 +vn 0.2742 -0.0159 0.2059 +vn 0.2933 -0.0270 0.0447 +vn 0.2740 -0.0257 0.1280 +vn 0.2474 -0.0236 0.1891 +vn 0.0510 -0.0061 0.3501 +vn 0.0497 -0.0173 0.3254 +vn 0.0466 -0.0270 0.2801 +vn 0.1448 -0.0060 0.3254 +vn 0.1412 -0.0168 0.3016 +vn 0.1339 -0.0256 0.2619 +vn 0.2268 -0.0056 0.2801 +vn 0.2158 -0.0159 0.2617 +vn 0.1981 -0.0236 0.2362 +vn -0.0000 -0.0000 0.3568 +vn 0.1451 -0.0405 0.0474 +vn 0.2268 -0.0349 0.0445 +vn 0.0300 -0.0418 0.1185 +vn 0.1414 -0.0376 0.1348 +vn 0.2156 -0.0326 0.1279 +vn 0.0468 -0.0349 0.2165 +vn 0.1341 -0.0326 0.2061 +vn 0.1980 -0.0294 0.1891 +vn 0.3666 0.0061 -0.0487 +vn 0.3408 0.0059 -0.1385 +vn 0.2933 0.0055 -0.2166 +vn 0.3408 0.0172 -0.0480 +vn 0.3158 0.0168 -0.1350 +vn 0.2742 0.0159 -0.2059 +vn 0.2933 0.0270 -0.0447 +vn 0.2740 0.0257 -0.1280 +vn 0.2474 0.0236 -0.1891 +vn 0.0510 0.0061 -0.3501 +vn 0.0497 0.0173 -0.3254 +vn 0.0466 0.0270 -0.2801 +vn 0.1448 0.0060 -0.3254 +vn 0.1412 0.0168 -0.3016 +vn 0.1339 0.0256 -0.2619 +vn 0.2268 0.0056 -0.2801 +vn 0.2158 0.0159 -0.2617 +vn 0.1981 0.0236 -0.2362 +vn 0.0510 0.0436 -0.0487 +vn 0.1451 0.0405 -0.0474 +vn 0.2268 0.0349 -0.0445 +vn 0.0503 0.0405 -0.1383 +vn 0.1414 0.0376 -0.1348 +vn 0.2156 0.0326 -0.1279 +vn 0.0468 0.0349 -0.2165 +vn 0.1341 0.0326 -0.2061 +vn 0.1980 0.0294 -0.1891 +vn 0.0296 -0.0418 -0.1189 +vn 0.0466 -0.0349 -0.2166 +vn 0.1448 -0.0405 -0.0480 +vn 0.1412 -0.0376 -0.1350 +vn 0.1339 -0.0326 -0.2059 +vn 0.2268 -0.0349 -0.0447 +vn 0.2158 -0.0326 -0.1280 +vn 0.1981 -0.0294 -0.1891 +vn 0.0510 -0.0061 -0.3501 +vn 0.1451 -0.0059 -0.3254 +vn 0.2268 -0.0055 -0.2801 +vn 0.0503 -0.0172 -0.3254 +vn 0.1414 -0.0168 -0.3016 +vn 0.2156 -0.0159 -0.2619 +vn 0.0468 -0.0270 -0.2801 +vn 0.1341 -0.0257 -0.2617 +vn 0.1980 -0.0236 -0.2362 +vn 0.3666 -0.0061 -0.0487 +vn 0.3408 -0.0173 -0.0474 +vn 0.2933 -0.0270 -0.0445 +vn 0.3408 -0.0060 -0.1383 +vn 0.3158 -0.0168 -0.1348 +vn 0.2742 -0.0256 -0.1279 +vn 0.2933 -0.0056 -0.2165 +vn 0.2740 -0.0159 -0.2061 +vn 0.2474 -0.0236 -0.1891 +vn 0.0194 -0.0444 -0.0000 +vn 0.1430 -0.0411 -0.0000 +vn 0.2275 -0.0353 -0.0000 +vn 0.2964 -0.0271 -0.0000 +vn 0.3452 -0.0170 -0.0000 +vn 0.3705 -0.0058 -0.0000 +vn -0.0000 -0.0441 0.0466 +vn -0.0000 -0.0411 0.1366 +vn -0.0000 -0.0353 0.2172 +vn -0.0000 -0.0271 0.2831 +vn -0.0000 -0.0170 0.3297 +vn -0.0000 -0.0058 0.3538 +vn -0.3705 -0.0000 0.0466 +vn -0.3452 -0.0000 0.1365 +vn -0.2964 -0.0000 0.2172 +vn -0.2275 -0.0000 0.2831 +vn -0.1430 -0.0000 0.3297 +vn -0.0488 -0.0000 0.3538 +vn 0.0488 -0.0000 -0.3538 +vn 0.1430 -0.0000 -0.3297 +vn 0.2275 -0.0000 -0.2831 +vn 0.2964 -0.0000 -0.2172 +vn 0.3452 -0.0000 -0.1365 +vn 0.3705 -0.0000 -0.0466 +vn -0.0488 -0.0000 -0.3538 +vn -0.1430 -0.0000 -0.3297 +vn -0.2275 -0.0000 -0.2831 +vn -0.2964 -0.0000 -0.2172 +vn -0.3452 -0.0000 -0.1365 +vn -0.3705 -0.0000 -0.0466 +vn 0.0488 -0.0000 0.3538 +vn 0.1430 -0.0000 0.3297 +vn 0.2275 -0.0000 0.2831 +vn 0.2964 -0.0000 0.2172 +vn 0.3452 -0.0000 0.1365 +vn 0.3705 -0.0000 0.0466 +vn -0.0000 0.0441 -0.0466 +vn -0.0000 0.0411 -0.1365 +vn -0.0000 0.0353 -0.2172 +vn -0.0000 0.0271 -0.2831 +vn -0.0000 0.0170 -0.3297 +vn -0.0000 0.0058 -0.3538 +vn -0.0488 0.0441 -0.0000 +vn -0.1430 0.0411 -0.0000 +vn -0.2275 0.0353 -0.0000 +vn -0.2964 0.0271 -0.0000 +vn -0.3452 0.0170 -0.0000 +vn -0.3705 0.0058 -0.0000 +vn -0.0000 -0.0441 -0.0466 +vn -0.0000 -0.0411 -0.1366 +vn -0.0000 -0.0353 -0.2172 +vn -0.0000 -0.0271 -0.2831 +vn -0.0000 -0.0170 -0.3297 +vn -0.0000 -0.0058 -0.3538 +vn 0.0488 0.0441 -0.0000 +vn 0.1430 0.0411 -0.0000 +vn 0.2275 0.0353 -0.0000 +vn 0.2964 0.0271 -0.0000 +vn 0.3452 0.0170 -0.0000 +vn 0.3705 0.0058 -0.0000 +vn -0.0000 0.0441 0.0466 +vn -0.0000 0.0411 0.1365 +vn -0.0000 0.0353 0.2172 +vn -0.0000 0.0271 0.2831 +vn -0.0000 0.0170 0.3297 +vn -0.0000 0.0058 0.3538 +vn -0.0194 -0.0444 -0.0000 +vn -0.1430 -0.0411 -0.0000 +vn -0.2275 -0.0353 -0.0000 +vn -0.2964 -0.0271 -0.0000 +vn -0.3452 -0.0170 -0.0000 +vn -0.3705 -0.0058 -0.0000 +vn -0.0205 -0.0439 0.0496 +vn -0.0206 -0.0439 -0.0497 +vn 0.0206 -0.0439 0.0497 +vn 0.0205 -0.0439 -0.0496 +vn 0.0058 -0.0000 0.3568 +vn -0.0058 -0.0000 -0.3568 +vn -0.3734 -0.0000 0.0138 +vn 0.3734 -0.0000 -0.0138 +vn -0.3735 -0.0000 -0.0108 +vn 0.3735 -0.0000 0.0108 +vn 0.0046 -0.0000 -0.3568 +vn -0.0046 -0.0000 0.3568 +vt 0.579948 0.337500 +vt 0.840885 0.798611 +vt 0.578906 0.336574 +vt 0.579948 0.336574 +vt 0.840885 0.816204 +vt 0.579948 0.337500 +vt 0.579948 0.337500 +vt 0.578906 0.336574 +vt 0.579427 0.337500 +vt 0.579948 0.337500 +vt 0.840885 0.800463 +vt 0.579948 0.337500 +vt 0.579948 0.337500 +vt 0.579427 0.337500 +vt 0.578906 0.336574 +vt 0.579948 0.337500 +vt 0.840885 0.803241 +vt 0.579948 0.337500 +vt 0.579948 0.337500 +vt 0.579427 0.337500 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.579948 0.336574 +vt 0.840885 0.814352 +vt 0.579948 0.336574 +vt 0.840885 0.811574 +vt 0.579948 0.336574 +vt 0.840885 0.807870 +vt 0.579948 0.336574 +vt 0.842969 0.816204 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.776823 0.816204 +vt 0.794531 0.798611 +vt 0.794531 0.816204 +vt 0.776823 0.814352 +vt 0.776823 0.811574 +vt 0.776823 0.807870 +vt 0.785677 0.798611 +vt 0.778906 0.816204 +vt 0.779427 0.813426 +vt 0.779427 0.811574 +vt 0.778906 0.807870 +vt 0.785677 0.800463 +vt 0.780990 0.816204 +vt 0.780990 0.813426 +vt 0.780990 0.812500 +vt 0.780990 0.807870 +vt 0.785677 0.802315 +vt 0.785677 0.808796 +vt 0.794531 0.800463 +vt 0.794531 0.803241 +vt 0.794531 0.807870 +vt 0.792448 0.798611 +vt 0.792448 0.801389 +vt 0.792448 0.803241 +vt 0.792448 0.807870 +vt 0.790365 0.798611 +vt 0.790365 0.801389 +vt 0.790365 0.802315 +vt 0.790365 0.807870 +vt 0.792448 0.816204 +vt 0.790365 0.816204 +vt 0.785677 0.816204 +vt 0.794531 0.814352 +vt 0.792448 0.813426 +vt 0.790365 0.813426 +vt 0.785677 0.814352 +vt 0.794531 0.811574 +vt 0.792448 0.811574 +vt 0.790365 0.812500 +vt 0.785677 0.812500 +vt 0.579948 0.333796 +vt 0.840885 0.862500 +vt 0.578906 0.333796 +vt 0.840885 0.880093 +vt 0.579948 0.331944 +vt 0.579948 0.333796 +vt 0.842969 0.862500 +vt 0.579948 0.333796 +vt 0.579427 0.333796 +vt 0.579948 0.332870 +vt 0.840885 0.864352 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.579427 0.332870 +vt 0.579948 0.332870 +vt 0.840885 0.867130 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.579427 0.332870 +vt 0.579427 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.579427 0.331944 +vt 0.578906 0.333796 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.579427 0.331944 +vt 0.578906 0.333796 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.579427 0.332870 +vt 0.579948 0.331944 +vt 0.840885 0.877315 +vt 0.579948 0.332870 +vt 0.840885 0.875463 +vt 0.579948 0.332870 +vt 0.840885 0.870833 +vt 0.579948 0.331944 +vt 0.579948 0.331944 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.579948 0.331944 +vt 0.579948 0.331944 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.794531 0.862500 +vt 0.794531 0.880093 +vt 0.776823 0.862500 +vt 0.794531 0.864352 +vt 0.794531 0.867130 +vt 0.794531 0.870833 +vt 0.792448 0.862500 +vt 0.792448 0.864352 +vt 0.792448 0.867130 +vt 0.792448 0.870833 +vt 0.790365 0.862500 +vt 0.790365 0.864352 +vt 0.790365 0.866204 +vt 0.790365 0.870833 +vt 0.787240 0.870833 +vt 0.792448 0.880093 +vt 0.790365 0.880093 +vt 0.776823 0.870833 +vt 0.785677 0.880093 +vt 0.794531 0.877315 +vt 0.792448 0.877315 +vt 0.790365 0.877315 +vt 0.785677 0.877315 +vt 0.778906 0.870833 +vt 0.794531 0.875463 +vt 0.792448 0.875463 +vt 0.790365 0.875463 +vt 0.785677 0.876389 +vt 0.780990 0.870833 +vt 0.778906 0.862500 +vt 0.780990 0.862500 +vt 0.785677 0.862500 +vt 0.776823 0.864352 +vt 0.779427 0.864352 +vt 0.780990 0.864352 +vt 0.785677 0.864352 +vt 0.776823 0.867130 +vt 0.779427 0.867130 +vt 0.780990 0.866204 +vt 0.785677 0.866204 +vt 0.579948 0.340278 +vt 0.840885 0.752315 +vt 0.840885 0.734722 +vt 0.579948 0.342130 +vt 0.575781 0.336574 +vt 0.579948 0.341204 +vt 0.840885 0.750463 +vt 0.579948 0.341204 +vt 0.840885 0.747685 +vt 0.579948 0.341204 +vt 0.840885 0.743981 +vt 0.579948 0.340278 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579948 0.340278 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579427 0.341204 +vt 0.575260 0.336574 +vt 0.579948 0.342130 +vt 0.579948 0.342130 +vt 0.575260 0.336574 +vt 0.579427 0.342130 +vt 0.579948 0.342130 +vt 0.840885 0.737500 +vt 0.579948 0.342130 +vt 0.579948 0.342130 +vt 0.579427 0.342130 +vt 0.575260 0.336574 +vt 0.579948 0.341204 +vt 0.840885 0.739352 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579427 0.341204 +vt 0.575260 0.336574 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.579427 0.340278 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.579427 0.341204 +vt 0.575781 0.336574 +vt 0.575260 0.336574 +vt 0.575260 0.336574 +vt 0.575260 0.336574 +vt 0.579427 0.341204 +vt 0.575260 0.336574 +vt 0.794531 0.734722 +vt 0.794531 0.752315 +vt 0.730990 0.816204 +vt 0.794531 0.737500 +vt 0.794531 0.739352 +vt 0.794531 0.743981 +vt 0.792448 0.734722 +vt 0.792448 0.737500 +vt 0.792448 0.739352 +vt 0.792448 0.743981 +vt 0.790365 0.734722 +vt 0.790365 0.737500 +vt 0.790365 0.739352 +vt 0.790365 0.743981 +vt 0.789323 0.743981 +vt 0.785677 0.746759 +vt 0.722135 0.810648 +vt 0.792448 0.752315 +vt 0.790365 0.752315 +vt 0.730990 0.807870 +vt 0.785677 0.752315 +vt 0.794531 0.750463 +vt 0.792448 0.750463 +vt 0.790365 0.750463 +vt 0.785677 0.750463 +vt 0.728906 0.807870 +vt 0.794531 0.747685 +vt 0.792448 0.747685 +vt 0.790365 0.748611 +vt 0.785677 0.748611 +vt 0.726823 0.807870 +vt 0.728906 0.816204 +vt 0.726302 0.816204 +vt 0.722135 0.816204 +vt 0.785677 0.734722 +vt 0.730990 0.814352 +vt 0.728385 0.813426 +vt 0.726302 0.813426 +vt 0.785677 0.737500 +vt 0.722135 0.814352 +vt 0.730990 0.811574 +vt 0.728906 0.811574 +vt 0.726302 0.812500 +vt 0.785677 0.738426 +vt 0.722135 0.812500 +vt 0.840885 0.688426 +vt 0.579948 0.344907 +vt 0.840885 0.926389 +vt 0.579948 0.329167 +vt 0.575781 0.333796 +vt 0.579948 0.344907 +vt 0.840885 0.686574 +vt 0.579948 0.344907 +vt 0.840885 0.684722 +vt 0.579948 0.345833 +vt 0.579948 0.328241 +vt 0.840885 0.934722 +vt 0.840885 0.680093 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.345833 +vt 0.579948 0.328241 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.345833 +vt 0.579948 0.328241 +vt 0.579427 0.345833 +vt 0.579427 0.329167 +vt 0.575260 0.332870 +vt 0.579948 0.329167 +vt 0.579948 0.329167 +vt 0.575781 0.332870 +vt 0.579427 0.329167 +vt 0.579948 0.329167 +vt 0.840885 0.928241 +vt 0.579948 0.329167 +vt 0.579948 0.329167 +vt 0.579427 0.329167 +vt 0.575781 0.332870 +vt 0.579948 0.329167 +vt 0.840885 0.930093 +vt 0.579948 0.329167 +vt 0.579948 0.329167 +vt 0.579427 0.329167 +vt 0.575260 0.332870 +vt 0.575781 0.333796 +vt 0.575260 0.333796 +vt 0.575260 0.333796 +vt 0.579427 0.344907 +vt 0.575781 0.332870 +vt 0.575781 0.332870 +vt 0.575260 0.332870 +vt 0.579427 0.344907 +vt 0.575260 0.332870 +vt 0.575781 0.332870 +vt 0.575781 0.332870 +vt 0.575260 0.332870 +vt 0.579427 0.344907 +vt 0.575260 0.332870 +vt 0.730990 0.862500 +vt 0.794531 0.926389 +vt 0.794531 0.688426 +vt 0.730990 0.864352 +vt 0.730990 0.867130 +vt 0.730990 0.870833 +vt 0.785677 0.926389 +vt 0.728906 0.862500 +vt 0.728906 0.864352 +vt 0.728906 0.867130 +vt 0.728906 0.870833 +vt 0.785677 0.928241 +vt 0.726302 0.862500 +vt 0.726302 0.864352 +vt 0.726302 0.866204 +vt 0.726823 0.870833 +vt 0.785677 0.930093 +vt 0.725781 0.870833 +vt 0.789323 0.934722 +vt 0.785677 0.683796 +vt 0.794531 0.928241 +vt 0.794531 0.930093 +vt 0.794531 0.934722 +vt 0.794531 0.680093 +vt 0.792448 0.926389 +vt 0.792448 0.928241 +vt 0.792448 0.930093 +vt 0.792448 0.934722 +vt 0.792448 0.680093 +vt 0.790365 0.926389 +vt 0.790365 0.928241 +vt 0.790365 0.930093 +vt 0.790365 0.934722 +vt 0.790365 0.680093 +vt 0.792448 0.688426 +vt 0.790365 0.688426 +vt 0.722135 0.862500 +vt 0.785677 0.688426 +vt 0.794531 0.686574 +vt 0.792448 0.686574 +vt 0.790365 0.686574 +vt 0.722135 0.864352 +vt 0.785677 0.686574 +vt 0.794531 0.684722 +vt 0.792448 0.684722 +vt 0.790365 0.684722 +vt 0.722135 0.866204 +vt 0.785677 0.684722 +vt 0.778906 0.816204 +vt 0.776823 0.816204 +vt 0.776823 0.814352 +vt 0.779427 0.813426 +vt 0.776823 0.864352 +vt 0.776823 0.862500 +vt 0.778906 0.862500 +vt 0.779427 0.864352 +vt 0.730990 0.814352 +vt 0.730990 0.816204 +vt 0.728906 0.816204 +vt 0.728385 0.813426 +vt 0.728906 0.862500 +vt 0.730990 0.862500 +vt 0.730990 0.864352 +vt 0.728906 0.864352 +s 0 +usemtl CabnetDoors +f 14839/29138/11414 14689/28957/11414 14765/29047/11414 14911/29237/11414 +f 14913/29239/11415 14874/29181/11415 14801/29087/11415 14837/29136/11415 +f 14764/29046/11416 14728/29000/11416 14875/29183/11416 14912/29238/11416 +f 14653/28911/11417 14802/29089/11417 14876/29185/11417 14727/28999/11417 +f 14691/28959/11418 14654/28913/11418 14726/28998/11418 14763/29045/11418 +f 14652/28909/11419 14655/28914/11419 14659/28920/11419 14658/28918/11419 +f 14655/28914/11420 14656/28915/11420 14660/28921/11420 14659/28920/11420 +f 14656/28915/11421 14657/28917/11421 14661/28922/11421 14660/28921/11421 +f 14658/28918/11422 14659/28920/11422 14663/28926/11422 14662/28924/11422 +f 14659/28920/11423 14660/28921/11423 14664/28927/11423 14663/28926/11423 +f 14660/28921/11424 14661/28922/11424 14665/28928/11424 14664/28927/11424 +f 14662/28924/11425 14663/28926/11425 14684/28952/11425 14680/28946/11425 +f 14663/28926/11426 14664/28927/11426 14688/28956/11426 14684/28952/11426 +f 14664/28927/11427 14665/28928/11427 14666/28930/11427 14688/28956/11427 +f 14653/28911/11428 14667/28931/11428 14671/28935/11428 14670/28934/11428 +f 14667/28931/11429 14668/28932/11429 14672/28936/11429 14671/28935/11429 +f 14668/28932/11430 14669/28933/11430 14673/28937/11430 14672/28936/11430 +f 14670/28934/11431 14671/28935/11431 14675/28939/11431 14674/28938/11431 +f 14671/28935/11432 14672/28936/11432 14676/28940/11432 14675/28939/11432 +f 14672/28936/11433 14673/28937/11433 14677/28941/11433 14676/28940/11433 +f 14674/28938/11434 14675/28939/11434 14661/28923/11434 14657/28916/11434 +f 14675/28939/11435 14676/28940/11435 14665/28929/11435 14661/28923/11435 +f 14676/28940/11436 14677/28941/11436 14666/28930/11436 14665/28929/11436 +f 14654/28912/11437 14678/28942/11437 14682/28950/11437 14681/28948/11437 +f 14678/28942/11438 14679/28944/11438 14683/28951/11438 14682/28950/11438 +f 14679/28944/11439 14680/28946/11439 14684/28952/11439 14683/28951/11439 +f 14681/28948/11440 14682/28950/11440 14686/28954/11440 14685/28953/11440 +f 14682/28950/11441 14683/28951/11441 14687/28955/11441 14686/28954/11441 +f 14683/28951/11442 14684/28952/11442 14688/28956/11442 14687/28955/11442 +f 14685/28953/11443 14686/28954/11443 14673/28937/11443 14669/28933/11443 +f 14686/28954/11444 14687/28955/11444 14677/28941/11444 14673/28937/11444 +f 14687/28955/11445 14688/28956/11445 14666/28930/11445 14677/28941/11445 +f 14866/29171/11418 14839/29138/11418 14957/29294/11418 14956/29293/11418 +f 14692/28960/11446 14693/28961/11446 14697/28966/11446 14696/28965/11446 +f 14693/28961/11447 14694/28962/11447 14698/28967/11447 14697/28966/11447 +f 14695/28964/11448 14696/28965/11448 14700/28970/11448 14699/28969/11448 +f 14696/28965/11449 14697/28966/11449 14701/28971/11449 14700/28970/11449 +f 14697/28966/11450 14698/28967/11450 14702/28972/11450 14701/28971/11450 +f 14699/28969/11451 14700/28970/11451 14721/28992/11451 14717/28988/11451 +f 14700/28970/11452 14701/28971/11452 14725/28996/11452 14721/28992/11452 +f 14701/28971/11453 14702/28972/11453 14703/28974/11453 14725/28996/11453 +f 14690/28958/11454 14704/28975/11454 14708/28979/11454 14707/28978/11454 +f 14704/28975/11455 14705/28976/11455 14709/28980/11455 14708/28979/11455 +f 14705/28976/11456 14706/28977/11456 14710/28981/11456 14709/28980/11456 +f 14707/28978/11457 14708/28979/11457 14712/28983/11457 14711/28982/11457 +f 14708/28979/11458 14709/28980/11458 14713/28984/11458 14712/28983/11458 +f 14709/28980/11459 14710/28981/11459 14714/28985/11459 14713/28984/11459 +f 14711/28982/11460 14712/28983/11460 14698/28968/11460 14694/28963/11460 +f 14712/28983/11461 14713/28984/11461 14702/28973/11461 14698/28968/11461 +f 14713/28984/11462 14714/28985/11462 14703/28974/11462 14702/28973/11462 +f 14691/28959/11463 14715/28986/11463 14719/28990/11463 14718/28989/11463 +f 14715/28986/11464 14716/28987/11464 14720/28991/11464 14719/28990/11464 +f 14716/28987/11465 14717/28988/11465 14721/28992/11465 14720/28991/11465 +f 14718/28989/11466 14719/28990/11466 14723/28994/11466 14722/28993/11466 +f 14719/28990/11467 14720/28991/11467 14724/28995/11467 14723/28994/11467 +f 14720/28991/11468 14721/28992/11468 14725/28996/11468 14724/28995/11468 +f 14722/28993/11469 14723/28994/11469 14710/28981/11469 14706/28977/11469 +f 14723/28994/11470 14724/28995/11470 14714/28985/11470 14710/28981/11470 +f 14724/28995/11471 14725/28996/11471 14703/28974/11471 14714/28985/11471 +f 14726/28997/11472 14729/29002/11472 14733/29008/11472 14732/29006/11472 +f 14729/29002/11473 14730/29004/11473 14734/29009/11473 14733/29008/11473 +f 14730/29004/11474 14731/29005/11474 14735/29010/11474 14734/29009/11474 +f 14732/29006/11475 14733/29008/11475 14737/29013/11475 14736/29011/11475 +f 14733/29008/11476 14734/29009/11476 14738/29014/11476 14737/29013/11476 +f 14734/29009/11477 14735/29010/11477 14739/29015/11477 14738/29014/11477 +f 14736/29011/11478 14737/29013/11478 14758/29040/11478 14754/29035/11478 +f 14737/29013/11479 14738/29014/11479 14762/29044/11479 14758/29040/11479 +f 14738/29014/11480 14739/29015/11480 14740/29016/11480 14762/29044/11480 +f 14727/28999/11481 14741/29017/11481 14745/29022/11481 14744/29021/11481 +f 14741/29017/11482 14742/29018/11482 14746/29023/11482 14745/29022/11482 +f 14742/29018/11483 14743/29019/11483 14747/29024/11483 14746/29023/11483 +f 14744/29021/11484 14745/29022/11484 14749/29027/11484 14748/29026/11484 +f 14745/29022/11485 14746/29023/11485 14750/29028/11485 14749/29027/11485 +f 14746/29023/11486 14747/29024/11486 14751/29029/11486 14750/29028/11486 +f 14748/29026/11487 14749/29027/11487 14735/29010/11487 14731/29005/11487 +f 14749/29027/11488 14750/29028/11488 14739/29015/11488 14735/29010/11488 +f 14750/29028/11489 14751/29029/11489 14740/29016/11489 14739/29015/11489 +f 14728/29001/11490 14752/29031/11490 14756/29038/11490 14755/29037/11490 +f 14752/29031/11491 14753/29033/11491 14757/29039/11491 14756/29038/11491 +f 14753/29033/11492 14754/29035/11492 14758/29040/11492 14757/29039/11492 +f 14755/29037/11493 14756/29038/11493 14760/29042/11493 14759/29041/11493 +f 14756/29038/11494 14757/29039/11494 14761/29043/11494 14760/29042/11494 +f 14757/29039/11495 14758/29040/11495 14762/29044/11495 14761/29043/11495 +f 14759/29041/11496 14760/29042/11496 14747/29025/11496 14743/29020/11496 +f 14760/29042/11497 14761/29043/11497 14751/29030/11497 14747/29025/11497 +f 14761/29043/11498 14762/29044/11498 14740/29016/11498 14751/29030/11498 +f 14763/29045/11499 14766/29048/11499 14770/29052/11499 14769/29051/11499 +f 14766/29048/11500 14767/29049/11500 14771/29053/11500 14770/29052/11500 +f 14767/29049/11501 14768/29050/11501 14772/29054/11501 14771/29053/11501 +f 14769/29051/11502 14770/29052/11502 14774/29056/11502 14773/29055/11502 +f 14770/29052/11503 14771/29053/11503 14775/29057/11503 14774/29056/11503 +f 14771/29053/11504 14772/29054/11504 14776/29058/11504 14775/29057/11504 +f 14773/29055/11505 14774/29056/11505 14795/29080/11505 14791/29076/11505 +f 14774/29056/11506 14775/29057/11506 14799/29084/11506 14795/29080/11506 +f 14775/29057/11507 14776/29058/11507 14777/29059/11507 14799/29084/11507 +f 14764/29046/11508 14778/29060/11508 14782/29065/11508 14781/29064/11508 +f 14778/29060/11509 14779/29061/11509 14783/29066/11509 14782/29065/11509 +f 14779/29061/11510 14780/29063/11510 14784/29067/11510 14783/29066/11510 +f 14781/29064/11511 14782/29065/11511 14786/29070/11511 14785/29069/11511 +f 14782/29065/11512 14783/29066/11512 14787/29071/11512 14786/29070/11512 +f 14783/29066/11513 14784/29067/11513 14788/29072/11513 14787/29071/11513 +f 14785/29069/11514 14786/29070/11514 14772/29054/11514 14768/29050/11514 +f 14786/29070/11515 14787/29071/11515 14776/29058/11515 14772/29054/11515 +f 14787/29071/11516 14788/29072/11516 14777/29059/11516 14776/29058/11516 +f 14792/29077/11415 14765/29047/11415 14953/29290/11415 14952/29289/11415 +f 14789/29074/11517 14790/29075/11517 14794/29079/11517 14793/29078/11517 +f 14790/29075/11518 14791/29076/11518 14795/29080/11518 14794/29079/11518 +f 14792/29077/11519 14793/29078/11519 14797/29082/11519 14796/29081/11519 +f 14793/29078/11520 14794/29079/11520 14798/29083/11520 14797/29082/11520 +f 14794/29079/11521 14795/29080/11521 14799/29084/11521 14798/29083/11521 +f 14796/29081/11522 14797/29082/11522 14784/29068/11522 14780/29062/11522 +f 14797/29082/11523 14798/29083/11523 14788/29073/11523 14784/29068/11523 +f 14798/29083/11524 14799/29084/11524 14777/29059/11524 14788/29073/11524 +f 14800/29085/11525 14803/29090/11525 14807/29097/11525 14806/29096/11525 +f 14803/29090/11526 14804/29092/11526 14808/29098/11526 14807/29097/11526 +f 14804/29092/11527 14805/29094/11527 14809/29099/11527 14808/29098/11527 +f 14806/29096/11528 14807/29097/11528 14811/29101/11528 14810/29100/11528 +f 14807/29097/11529 14808/29098/11529 14812/29102/11529 14811/29101/11529 +f 14808/29098/11530 14809/29099/11530 14813/29103/11530 14812/29102/11530 +f 14810/29100/11531 14811/29101/11531 14832/29129/11531 14828/29125/11531 +f 14811/29101/11532 14812/29102/11532 14836/29134/11532 14832/29129/11532 +f 14812/29102/11533 14813/29103/11533 14814/29104/11533 14836/29134/11533 +f 14801/29088/11534 14815/29106/11534 14819/29112/11534 14818/29110/11534 +f 14815/29106/11535 14816/29107/11535 14820/29113/11535 14819/29112/11535 +f 14816/29107/11536 14817/29109/11536 14821/29114/11536 14820/29113/11536 +f 14818/29110/11537 14819/29112/11537 14823/29118/11537 14822/29116/11537 +f 14819/29112/11538 14820/29113/11538 14824/29119/11538 14823/29118/11538 +f 14820/29113/11539 14821/29114/11539 14825/29120/11539 14824/29119/11539 +f 14822/29116/11540 14823/29118/11540 14809/29099/11540 14805/29094/11540 +f 14823/29118/11541 14824/29119/11541 14813/29103/11541 14809/29099/11541 +f 14824/29119/11542 14825/29120/11542 14814/29104/11542 14813/29103/11542 +f 14802/29089/11543 14826/29122/11543 14830/29127/11543 14829/29126/11543 +f 14826/29122/11544 14827/29123/11544 14831/29128/11544 14830/29127/11544 +f 14827/29123/11545 14828/29124/11545 14832/29130/11545 14831/29128/11545 +f 14829/29126/11546 14830/29127/11546 14834/29132/11546 14833/29131/11546 +f 14830/29127/11547 14831/29128/11547 14835/29133/11547 14834/29132/11547 +f 14831/29128/11548 14832/29130/11548 14836/29135/11548 14835/29133/11548 +f 14833/29131/11549 14834/29132/11549 14821/29115/11549 14817/29108/11549 +f 14834/29132/11550 14835/29133/11550 14825/29121/11550 14821/29115/11550 +f 14835/29133/11551 14836/29135/11551 14814/29105/11551 14825/29121/11551 +f 14837/29136/11552 14840/29139/11552 14844/29143/11552 14843/29142/11552 +f 14840/29139/11553 14841/29140/11553 14845/29144/11553 14844/29143/11553 +f 14841/29140/11554 14842/29141/11554 14846/29145/11554 14845/29144/11554 +f 14843/29142/11555 14844/29143/11555 14848/29147/11555 14847/29146/11555 +f 14844/29143/11556 14845/29144/11556 14849/29148/11556 14848/29147/11556 +f 14845/29144/11557 14846/29145/11557 14850/29149/11557 14849/29148/11557 +f 14847/29146/11558 14848/29147/11558 14869/29174/11558 14865/29170/11558 +f 14848/29147/11559 14849/29148/11559 14873/29179/11559 14869/29174/11559 +f 14849/29148/11560 14850/29149/11560 14851/29150/11560 14873/29179/11560 +f 14838/29137/11561 14852/29153/11561 14856/29158/11561 14855/29157/11561 +f 14852/29153/11562 14853/29154/11562 14857/29159/11562 14856/29158/11562 +f 14853/29154/11563 14854/29156/11563 14858/29160/11563 14857/29159/11563 +f 14855/29157/11564 14856/29158/11564 14860/29163/11564 14859/29162/11564 +f 14856/29158/11565 14857/29159/11565 14861/29164/11565 14860/29163/11565 +f 14857/29159/11566 14858/29160/11566 14862/29165/11566 14861/29164/11566 +f 14859/29162/11567 14860/29163/11567 14846/29145/11567 14842/29141/11567 +f 14860/29163/11568 14861/29164/11568 14850/29149/11568 14846/29145/11568 +f 14861/29164/11569 14862/29165/11569 14851/29151/11569 14850/29149/11569 +f 14917/29244/11570 14911/29237/11570 14961/29298/11570 14960/29297/11570 +f 14863/29167/11571 14864/29168/11571 14868/29173/11571 14867/29172/11571 +f 14864/29168/11572 14865/29169/11572 14869/29175/11572 14868/29173/11572 +f 14866/29171/11573 14867/29172/11573 14871/29177/11573 14870/29176/11573 +f 14867/29172/11574 14868/29173/11574 14872/29178/11574 14871/29177/11574 +f 14868/29173/11575 14869/29175/11575 14873/29180/11575 14872/29178/11575 +f 14870/29176/11576 14871/29177/11576 14858/29161/11576 14854/29155/11576 +f 14871/29177/11577 14872/29178/11577 14862/29166/11577 14858/29161/11577 +f 14872/29178/11578 14873/29180/11578 14851/29152/11578 14862/29166/11578 +f 14874/29182/11579 14877/29186/11579 14881/29195/11579 14880/29194/11579 +f 14877/29186/11580 14878/29188/11580 14882/29196/11580 14881/29195/11580 +f 14878/29188/11581 14879/29190/11581 14883/29197/11581 14882/29196/11581 +f 14880/29194/11582 14881/29195/11582 14885/29200/11582 14884/29199/11582 +f 14881/29195/11583 14882/29196/11583 14886/29201/11583 14885/29200/11583 +f 14882/29196/11584 14883/29197/11584 14887/29202/11584 14886/29201/11584 +f 14884/29199/11585 14885/29200/11585 14906/29230/11585 14902/29226/11585 +f 14885/29200/11586 14886/29201/11586 14910/29235/11586 14906/29230/11586 +f 14886/29201/11587 14887/29202/11587 14888/29204/11587 14910/29235/11587 +f 14875/29184/11588 14889/29207/11588 14893/29213/11588 14892/29211/11588 +f 14889/29207/11589 14890/29208/11589 14894/29214/11589 14893/29213/11589 +f 14890/29208/11590 14891/29210/11590 14895/29215/11590 14894/29214/11590 +f 14892/29211/11591 14893/29213/11591 14897/29219/11591 14896/29217/11591 +f 14893/29213/11592 14894/29214/11592 14898/29220/11592 14897/29219/11592 +f 14894/29214/11593 14895/29215/11593 14899/29221/11593 14898/29220/11593 +f 14896/29217/11594 14897/29219/11594 14883/29198/11594 14879/29191/11594 +f 14897/29219/11595 14898/29220/11595 14887/29203/11595 14883/29198/11595 +f 14898/29220/11596 14899/29221/11596 14888/29205/11596 14887/29203/11596 +f 14876/29185/11597 14900/29223/11597 14904/29228/11597 14903/29227/11597 +f 14900/29223/11598 14901/29224/11598 14905/29229/11598 14904/29228/11598 +f 14901/29224/11599 14902/29225/11599 14906/29231/11599 14905/29229/11599 +f 14903/29227/11600 14904/29228/11600 14908/29233/11600 14907/29232/11600 +f 14904/29228/11601 14905/29229/11601 14909/29234/11601 14908/29233/11601 +f 14905/29229/11602 14906/29231/11602 14910/29236/11602 14909/29234/11602 +f 14907/29232/11603 14908/29233/11603 14895/29216/11603 14891/29209/11603 +f 14908/29233/11604 14909/29234/11604 14899/29222/11604 14895/29216/11604 +f 14909/29234/11605 14910/29236/11605 14888/29206/11605 14899/29222/11605 +f 14695/28964/11416 14689/28957/11416 14949/29286/11416 14948/29285/11416 +f 14914/29240/11606 14915/29241/11606 14919/29246/11606 14918/29245/11606 +f 14915/29241/11607 14916/29242/11607 14920/29247/11607 14919/29246/11607 +f 14917/29244/11608 14918/29245/11608 14922/29250/11608 14921/29249/11608 +f 14918/29245/11609 14919/29246/11609 14923/29251/11609 14922/29250/11609 +f 14919/29246/11610 14920/29247/11610 14924/29252/11610 14923/29251/11610 +f 14921/29249/11611 14922/29250/11611 14943/29278/11611 14939/29273/11611 +f 14922/29250/11612 14923/29251/11612 14947/29283/11612 14943/29278/11612 +f 14923/29251/11613 14924/29252/11613 14925/29254/11613 14947/29283/11613 +f 14912/29238/11614 14926/29257/11614 14930/29262/11614 14929/29261/11614 +f 14926/29257/11615 14927/29258/11615 14931/29263/11615 14930/29262/11615 +f 14927/29258/11616 14928/29259/11616 14932/29264/11616 14931/29263/11616 +f 14929/29261/11617 14930/29262/11617 14934/29267/11617 14933/29266/11617 +f 14930/29262/11618 14931/29263/11618 14935/29268/11618 14934/29267/11618 +f 14931/29263/11619 14932/29264/11619 14936/29269/11619 14935/29268/11619 +f 14933/29266/11620 14934/29267/11620 14920/29248/11620 14916/29243/11620 +f 14934/29267/11621 14935/29268/11621 14924/29253/11621 14920/29248/11621 +f 14935/29268/11622 14936/29269/11622 14925/29255/11622 14924/29253/11622 +f 14913/29239/11623 14937/29271/11623 14941/29276/11623 14940/29275/11623 +f 14937/29271/11624 14938/29272/11624 14942/29277/11624 14941/29276/11624 +f 14938/29272/11625 14939/29274/11625 14943/29279/11625 14942/29277/11625 +f 14940/29275/11626 14941/29276/11626 14945/29281/11626 14944/29280/11626 +f 14941/29276/11627 14942/29277/11627 14946/29282/11627 14945/29281/11627 +f 14942/29277/11628 14943/29279/11628 14947/29284/11628 14946/29282/11628 +f 14944/29280/11629 14945/29281/11629 14932/29265/11629 14928/29260/11629 +f 14945/29281/11630 14946/29282/11630 14936/29270/11630 14932/29265/11630 +f 14946/29282/11631 14947/29284/11631 14925/29256/11631 14936/29270/11631 +f 14839/29138/11632 14911/29237/11632 14917/29244/11632 14863/29167/11632 +f 14863/29167/11633 14917/29244/11633 14921/29249/11633 14864/29168/11633 +f 14864/29168/11634 14921/29249/11634 14939/29273/11634 14865/29169/11634 +f 14865/29170/11635 14939/29274/11635 14938/29272/11635 14847/29146/11635 +f 14847/29146/11636 14938/29272/11636 14937/29271/11636 14843/29142/11636 +f 14843/29142/11637 14937/29271/11637 14913/29239/11637 14837/29136/11637 +f 14689/28957/11638 14839/29138/11638 14866/29171/11638 14692/28960/11638 +f 14692/28960/11639 14866/29171/11639 14870/29176/11639 14693/28961/11639 +f 14693/28961/11640 14870/29176/11640 14854/29155/11640 14694/28962/11640 +f 14694/28963/11641 14854/29156/11641 14853/29154/11641 14711/28982/11641 +f 14711/28982/11642 14853/29154/11642 14852/29153/11642 14707/28978/11642 +f 14707/28978/11643 14852/29153/11643 14838/29137/11643 14690/28958/11643 +f 14654/28913/11644 14691/28959/11644 14718/28989/11644 14678/28943/11644 +f 14678/28943/11645 14718/28989/11645 14722/28993/11645 14679/28945/11645 +f 14679/28945/11646 14722/28993/11646 14706/28977/11646 14680/28947/11646 +f 14680/28947/11647 14706/28977/11647 14705/28976/11647 14662/28925/11647 +f 14662/28925/11648 14705/28976/11648 14704/28975/11648 14658/28919/11648 +f 14658/28919/11649 14704/28975/11649 14690/28958/11649 14652/28910/11649 +f 14912/29238/11650 14875/29183/11650 14892/29212/11650 14926/29257/11650 +f 14926/29257/11651 14892/29212/11651 14896/29218/11651 14927/29258/11651 +f 14927/29258/11652 14896/29218/11652 14879/29192/11652 14928/29259/11652 +f 14928/29260/11653 14879/29193/11653 14878/29189/11653 14944/29280/11653 +f 14944/29280/11654 14878/29189/11654 14877/29187/11654 14940/29275/11654 +f 14940/29275/11655 14877/29187/11655 14874/29181/11655 14913/29239/11655 +f 14728/29000/11656 14764/29046/11656 14781/29064/11656 14752/29032/11656 +f 14752/29032/11657 14781/29064/11657 14785/29069/11657 14753/29034/11657 +f 14753/29034/11658 14785/29069/11658 14768/29050/11658 14754/29036/11658 +f 14754/29036/11659 14768/29050/11659 14767/29049/11659 14736/29012/11659 +f 14736/29012/11660 14767/29049/11660 14766/29048/11660 14732/29007/11660 +f 14732/29007/11661 14766/29048/11661 14763/29045/11661 14726/28998/11661 +f 14800/29086/11662 14838/29137/11662 14855/29157/11662 14803/29091/11662 +f 14803/29091/11663 14855/29157/11663 14859/29162/11663 14804/29093/11663 +f 14804/29093/11664 14859/29162/11664 14842/29141/11664 14805/29095/11664 +f 14805/29095/11665 14842/29141/11665 14841/29140/11665 14822/29117/11665 +f 14822/29117/11666 14841/29140/11666 14840/29139/11666 14818/29111/11666 +f 14818/29111/11667 14840/29139/11667 14837/29136/11667 14801/29087/11667 +f 14727/28999/11668 14876/29185/11668 14903/29227/11668 14741/29017/11668 +f 14741/29017/11669 14903/29227/11669 14907/29232/11669 14742/29018/11669 +f 14742/29018/11670 14907/29232/11670 14891/29209/11670 14743/29019/11670 +f 14743/29020/11671 14891/29210/11671 14890/29208/11671 14759/29041/11671 +f 14759/29041/11672 14890/29208/11672 14889/29207/11672 14755/29037/11672 +f 14755/29037/11673 14889/29207/11673 14875/29184/11673 14728/29001/11673 +f 14653/28911/11674 14727/28999/11674 14744/29021/11674 14667/28931/11674 +f 14667/28931/11675 14744/29021/11675 14748/29026/11675 14668/28932/11675 +f 14668/28932/11676 14748/29026/11676 14731/29005/11676 14669/28933/11676 +f 14669/28933/11677 14731/29005/11677 14730/29004/11677 14685/28953/11677 +f 14685/28953/11678 14730/29004/11678 14729/29002/11678 14681/28948/11678 +f 14681/28949/11679 14729/29003/11679 14726/28998/11679 14654/28913/11679 +f 14911/29237/11680 14765/29047/11680 14792/29077/11680 14914/29240/11680 +f 14914/29240/11681 14792/29077/11681 14796/29081/11681 14915/29241/11681 +f 14915/29241/11682 14796/29081/11682 14780/29062/11682 14916/29242/11682 +f 14916/29243/11683 14780/29063/11683 14779/29061/11683 14933/29266/11683 +f 14933/29266/11684 14779/29061/11684 14778/29060/11684 14929/29261/11684 +f 14929/29261/11685 14778/29060/11685 14764/29046/11685 14912/29238/11685 +f 14876/29185/11686 14802/29089/11686 14829/29126/11686 14900/29223/11686 +f 14900/29223/11687 14829/29126/11687 14833/29131/11687 14901/29224/11687 +f 14901/29224/11688 14833/29131/11688 14817/29108/11688 14902/29225/11688 +f 14902/29226/11689 14817/29109/11689 14816/29107/11689 14884/29199/11689 +f 14884/29199/11690 14816/29107/11690 14815/29106/11690 14880/29194/11690 +f 14880/29194/11691 14815/29106/11691 14801/29088/11691 14874/29182/11691 +f 14802/29089/11692 14653/28911/11692 14670/28934/11692 14826/29122/11692 +f 14826/29122/11693 14670/28934/11693 14674/28938/11693 14827/29123/11693 +f 14827/29123/11694 14674/28938/11694 14657/28916/11694 14828/29124/11694 +f 14828/29125/11695 14657/28917/11695 14656/28915/11695 14810/29100/11695 +f 14810/29100/11696 14656/28915/11696 14655/28914/11696 14806/29096/11696 +f 14806/29096/11697 14655/28914/11697 14652/28909/11697 14800/29085/11697 +f 14765/29047/11698 14689/28957/11698 14695/28964/11698 14789/29074/11698 +f 14789/29074/11699 14695/28964/11699 14699/28969/11699 14790/29075/11699 +f 14790/29075/11700 14699/28969/11700 14717/28988/11700 14791/29076/11700 +f 14791/29076/11701 14717/28988/11701 14716/28987/11701 14773/29055/11701 +f 14773/29055/11702 14716/28987/11702 14715/28986/11702 14769/29051/11702 +f 14769/29051/11703 14715/28986/11703 14691/28959/11703 14763/29045/11703 +f 14838/29137/11570 14800/29086/11570 14652/28910/11570 14690/28958/11570 +f 14949/29286/11704 14950/29287/11704 14951/29288/11704 14948/29285/11704 +f 14953/29290/11705 14954/29291/11705 14955/29292/11705 14952/29289/11705 +f 14957/29294/11706 14958/29295/11706 14959/29296/11706 14956/29293/11706 +f 14961/29298/11707 14962/29299/11707 14963/29300/11707 14960/29297/11707 +f 14689/28957/11415 14692/28960/11415 14950/29287/11415 14949/29286/11415 +f 14911/29237/11418 14914/29240/11418 14962/29299/11418 14961/29298/11418 +f 14765/29047/11570 14789/29074/11570 14954/29291/11570 14953/29290/11570 +f 14839/29138/11416 14863/29167/11416 14958/29295/11416 14957/29294/11416 +f 14692/28960/11708 14696/28965/11708 14951/29288/11708 14950/29287/11708 +f 14914/29240/11709 14918/29245/11709 14963/29300/11709 14962/29299/11709 +f 14789/29074/11710 14793/29078/11710 14955/29292/11710 14954/29291/11710 +f 14863/29167/11711 14867/29172/11711 14959/29296/11711 14958/29295/11711 +f 14696/28965/11712 14695/28964/11712 14948/29285/11712 14951/29288/11712 +f 14918/29245/11713 14917/29244/11713 14960/29297/11713 14963/29300/11713 +f 14793/29078/11714 14792/29077/11714 14952/29289/11714 14955/29292/11714 +f 14867/29172/11715 14866/29171/11715 14956/29293/11715 14959/29296/11715 +o Top.013 +v -5.642359 0.737263 4.192842 +v -5.642359 0.749833 4.091918 +v -5.748052 0.737263 4.091918 +v -5.642359 0.740515 4.189405 +v -5.642359 0.743549 4.179316 +v -5.642359 0.746151 4.163282 +v -5.669704 0.737263 4.189405 +v -5.670565 0.740645 4.185314 +v -5.670105 0.743568 4.175109 +v -5.669538 0.745849 4.160914 +v -5.695214 0.737263 4.179316 +v -5.695404 0.740582 4.175044 +v -5.692704 0.743253 4.166492 +v -5.690489 0.745176 4.155456 +v -5.703381 0.744520 4.150186 +v -5.669704 0.749405 4.091918 +v -5.695214 0.748149 4.091918 +v -5.717095 0.746151 4.091918 +v -5.642359 0.749405 4.118030 +v -5.670798 0.748896 4.118851 +v -5.695376 0.747625 4.118412 +v -5.714548 0.745857 4.117870 +v -5.642359 0.748149 4.142388 +v -5.670264 0.747617 4.142570 +v -5.692729 0.746551 4.139991 +v -5.708892 0.745177 4.137877 +v -5.744452 0.737263 4.118030 +v -5.733886 0.737263 4.142388 +v -5.717095 0.737263 4.163282 +v -5.744452 0.740515 4.091918 +v -5.740168 0.740617 4.119073 +v -5.729481 0.740563 4.142543 +v -5.714615 0.740495 4.160850 +v -5.733886 0.743549 4.091918 +v -5.729413 0.743572 4.118564 +v -5.720456 0.743250 4.140015 +v -5.708899 0.742987 4.155449 +v -5.600537 0.660944 4.091918 +v -5.642359 0.673515 4.192842 +v -5.748052 0.673515 4.091918 +v -5.600537 0.661372 4.118030 +v -5.642359 0.662629 4.142388 +v -5.642359 0.664626 4.163282 +v -5.669704 0.661372 4.091918 +v -5.670566 0.661882 4.119073 +v -5.670105 0.663153 4.142543 +v -5.669538 0.664921 4.160850 +v -5.695214 0.662629 4.091918 +v -5.695404 0.663161 4.118564 +v -5.692704 0.664226 4.140015 +v -5.690489 0.665601 4.155449 +v -5.703381 0.666257 4.150186 +v -5.669704 0.673515 4.189405 +v -5.695214 0.673515 4.179316 +v -5.717095 0.673515 4.163282 +v -5.642359 0.670263 4.189405 +v -5.670798 0.670160 4.185314 +v -5.695376 0.670215 4.175109 +v -5.714548 0.670282 4.160914 +v -5.642359 0.667229 4.179316 +v -5.670264 0.667206 4.175044 +v -5.692729 0.667527 4.166492 +v -5.708892 0.667790 4.155456 +v -5.744452 0.670263 4.091918 +v -5.733886 0.667229 4.091918 +v -5.717095 0.664626 4.091918 +v -5.744452 0.673515 4.118030 +v -5.740168 0.670133 4.118851 +v -5.729481 0.667209 4.118412 +v -5.714615 0.664929 4.117870 +v -5.733886 0.673515 4.142388 +v -5.729413 0.670196 4.142570 +v -5.720456 0.667524 4.139991 +v -5.708899 0.665602 4.137877 +v -5.748052 0.737263 3.580123 +v -5.642359 0.749833 3.580123 +v -5.642359 0.737263 3.479198 +v -5.744453 0.740515 3.580123 +v -5.733887 0.743549 3.580123 +v -5.717095 0.746151 3.580123 +v -5.744453 0.737263 3.554011 +v -5.740168 0.740645 3.553189 +v -5.729481 0.743568 3.553629 +v -5.714615 0.745849 3.554170 +v -5.733887 0.737263 3.529652 +v -5.729413 0.740582 3.529470 +v -5.720456 0.743253 3.532049 +v -5.708900 0.745176 3.534164 +v -5.703381 0.744520 3.521854 +v -5.642359 0.749405 3.554011 +v -5.642359 0.748149 3.529652 +v -5.642359 0.746151 3.508759 +v -5.669705 0.749405 3.580123 +v -5.670566 0.748896 3.552967 +v -5.670105 0.747625 3.529498 +v -5.669538 0.745857 3.511190 +v -5.695214 0.748149 3.580123 +v -5.695405 0.747617 3.553476 +v -5.692704 0.746551 3.532025 +v -5.690490 0.745177 3.516591 +v -5.669705 0.737263 3.482635 +v -5.695214 0.737263 3.492724 +v -5.717095 0.737263 3.508759 +v -5.642359 0.740515 3.482635 +v -5.670798 0.740617 3.486727 +v -5.695376 0.740563 3.496931 +v -5.714548 0.740495 3.511126 +v -5.642359 0.743549 3.492724 +v -5.670264 0.743572 3.496996 +v -5.692729 0.743250 3.505549 +v -5.708893 0.742987 3.516584 +v -5.748052 0.673515 3.580123 +v -5.642359 0.673515 3.479198 +v -5.600537 0.660944 3.580123 +v -5.744453 0.673515 3.554011 +v -5.733887 0.673515 3.529652 +v -5.717095 0.673515 3.508759 +v -5.744453 0.670263 3.580123 +v -5.740168 0.670160 3.552967 +v -5.729481 0.670215 3.529498 +v -5.714615 0.670282 3.511190 +v -5.733887 0.667229 3.580123 +v -5.729413 0.667206 3.553476 +v -5.720456 0.667527 3.532025 +v -5.708900 0.667790 3.516591 +v -5.703381 0.666257 3.521854 +v -5.642359 0.670263 3.482635 +v -5.642359 0.667229 3.492724 +v -5.642359 0.664626 3.508759 +v -5.669705 0.673515 3.482635 +v -5.670566 0.670133 3.486727 +v -5.670105 0.667209 3.496931 +v -5.669538 0.664929 3.511126 +v -5.695214 0.673515 3.492724 +v -5.695405 0.670196 3.496996 +v -5.692704 0.667524 3.505549 +v -5.690490 0.665602 3.516584 +v -5.669705 0.661372 3.580123 +v -5.695214 0.662629 3.580123 +v -5.717095 0.664626 3.580123 +v -5.600537 0.661372 3.554011 +v -5.670798 0.661882 3.553189 +v -5.695376 0.663153 3.553629 +v -5.714548 0.664921 3.554170 +v -5.642359 0.662629 3.529652 +v -5.670264 0.663161 3.529470 +v -5.692729 0.664226 3.532049 +v -5.708893 0.665601 3.534164 +v -5.106386 0.737263 4.192842 +v -5.000693 0.737263 4.091917 +v -5.106386 0.749833 4.091917 +v -5.079040 0.737263 4.189405 +v -5.053531 0.737263 4.179316 +v -5.031650 0.737263 4.163281 +v -5.106386 0.740515 4.189405 +v -5.077947 0.740617 4.185313 +v -5.053369 0.740563 4.175109 +v -5.034197 0.740495 4.160914 +v -5.106386 0.743549 4.179316 +v -5.078481 0.743572 4.175044 +v -5.056016 0.743250 4.166491 +v -5.039853 0.742987 4.155456 +v -5.045364 0.744520 4.150186 +v -5.004292 0.740515 4.091917 +v -5.014858 0.743549 4.091917 +v -5.031650 0.746151 4.091917 +v -5.004292 0.737263 4.118029 +v -5.008577 0.740645 4.118851 +v -5.019264 0.743568 4.118411 +v -5.034130 0.745849 4.117869 +v -5.014858 0.737263 4.142387 +v -5.019332 0.740582 4.142570 +v -5.028289 0.743253 4.139991 +v -5.039845 0.745176 4.137877 +v -5.106386 0.749405 4.118029 +v -5.106386 0.748149 4.142387 +v -5.106386 0.746151 4.163281 +v -5.079040 0.749405 4.091917 +v -5.078179 0.748896 4.119073 +v -5.078640 0.747625 4.142542 +v -5.079207 0.745857 4.160850 +v -5.053531 0.748149 4.091917 +v -5.053340 0.747617 4.118564 +v -5.056041 0.746551 4.140015 +v -5.058255 0.745177 4.155449 +v -5.000693 0.673515 4.091917 +v -5.106386 0.673515 4.192842 +v -5.148208 0.660944 4.091917 +v -5.004292 0.673515 4.118029 +v -5.014858 0.673515 4.142387 +v -5.031650 0.673515 4.163281 +v -5.004292 0.670263 4.091917 +v -5.008577 0.670160 4.119073 +v -5.019264 0.670215 4.142542 +v -5.034130 0.670282 4.160850 +v -5.014858 0.667229 4.091917 +v -5.019332 0.667206 4.118564 +v -5.028289 0.667527 4.140015 +v -5.039845 0.667790 4.155449 +v -5.045364 0.666257 4.150186 +v -5.106386 0.670263 4.189405 +v -5.106386 0.667229 4.179316 +v -5.106386 0.664626 4.163281 +v -5.079040 0.673515 4.189405 +v -5.078179 0.670133 4.185313 +v -5.078640 0.667209 4.175109 +v -5.079207 0.664929 4.160914 +v -5.053531 0.673515 4.179316 +v -5.053340 0.670196 4.175044 +v -5.056041 0.667524 4.166491 +v -5.058255 0.665602 4.155456 +v -5.079040 0.661372 4.091917 +v -5.053531 0.662629 4.091917 +v -5.031650 0.664626 4.091917 +v -5.148208 0.661372 4.118029 +v -5.077947 0.661882 4.118851 +v -5.053369 0.663153 4.118411 +v -5.034197 0.664921 4.117869 +v -5.106386 0.662629 4.142387 +v -5.078481 0.663161 4.142570 +v -5.056016 0.664226 4.139991 +v -5.039852 0.665601 4.137877 +v -5.000693 0.737263 3.580122 +v -5.106386 0.737263 3.479198 +v -5.106386 0.749833 3.580123 +v -5.004292 0.737263 3.554011 +v -5.014859 0.737263 3.529652 +v -5.031650 0.737263 3.508758 +v -5.004292 0.740515 3.580122 +v -5.008577 0.740617 3.552967 +v -5.019264 0.740563 3.529497 +v -5.034130 0.740495 3.511190 +v -5.014859 0.743549 3.580122 +v -5.019332 0.743572 3.553476 +v -5.028289 0.743250 3.532025 +v -5.039845 0.742987 3.516591 +v -5.045364 0.744520 3.521854 +v -5.106386 0.740515 3.482635 +v -5.106386 0.743549 3.492724 +v -5.106386 0.746151 3.508758 +v -5.079041 0.737263 3.482635 +v -5.078180 0.740645 3.486726 +v -5.078640 0.743568 3.496931 +v -5.079207 0.745849 3.511126 +v -5.053531 0.737263 3.492724 +v -5.053341 0.740582 3.496996 +v -5.056041 0.743253 3.505549 +v -5.058256 0.745176 3.516584 +v -5.079041 0.749405 3.580122 +v -5.053531 0.748149 3.580122 +v -5.031650 0.746151 3.580122 +v -5.106386 0.749405 3.554011 +v -5.077947 0.748896 3.553189 +v -5.053369 0.747625 3.553628 +v -5.034197 0.745857 3.554170 +v -5.106386 0.748149 3.529652 +v -5.078481 0.747617 3.529470 +v -5.056016 0.746551 3.532049 +v -5.039853 0.745177 3.534163 +v -5.148208 0.660944 3.580123 +v -5.106386 0.673515 3.479198 +v -5.000693 0.673515 3.580122 +v -5.148208 0.661372 3.554011 +v -5.106386 0.662629 3.529652 +v -5.106386 0.664626 3.508758 +v -5.079041 0.661372 3.580122 +v -5.078179 0.661882 3.552967 +v -5.078640 0.663153 3.529497 +v -5.079207 0.664921 3.511190 +v -5.053531 0.662629 3.580122 +v -5.053341 0.663161 3.553476 +v -5.056041 0.664226 3.532025 +v -5.058256 0.665601 3.516591 +v -5.045364 0.666257 3.521854 +v -5.079041 0.673515 3.482635 +v -5.053531 0.673515 3.492724 +v -5.031650 0.673515 3.508758 +v -5.106386 0.670263 3.482635 +v -5.077947 0.670160 3.486726 +v -5.053369 0.670215 3.496931 +v -5.034197 0.670282 3.511126 +v -5.106386 0.667229 3.492724 +v -5.078481 0.667206 3.496996 +v -5.056016 0.667527 3.505549 +v -5.039853 0.667790 3.516584 +v -5.004292 0.670263 3.580122 +v -5.014859 0.667229 3.580122 +v -5.031650 0.664626 3.580122 +v -5.004292 0.673515 3.554011 +v -5.008577 0.670133 3.553189 +v -5.019264 0.667209 3.553628 +v -5.034130 0.664929 3.554170 +v -5.014859 0.673515 3.529652 +v -5.019332 0.670196 3.529470 +v -5.028289 0.667524 3.532049 +v -5.039845 0.665602 3.534163 +v -5.669704 -0.015018 4.091918 +v -5.600537 -0.015446 4.091918 +v -5.600537 -0.015018 4.118030 +v -5.670566 -0.014508 4.119073 +v -5.600537 -0.015018 3.554011 +v -5.600537 -0.015446 3.580123 +v -5.669705 -0.015018 3.580123 +v -5.670798 -0.014508 3.553189 +v -5.148208 -0.015018 4.118029 +v -5.148208 -0.015446 4.091917 +v -5.079040 -0.015018 4.091917 +v -5.077947 -0.014508 4.118851 +v -5.079041 -0.015018 3.580122 +v -5.148208 -0.015446 3.580123 +v -5.148208 -0.015018 3.554011 +v -5.078179 -0.014508 3.552967 +vn -0.0000 -0.0444 -0.0000 +vn 0.3737 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.3568 +vn -0.0000 0.0444 -0.0000 +vn -0.3737 -0.0000 -0.0000 +vn -0.0510 0.0061 0.3501 +vn -0.0497 0.0173 0.3254 +vn -0.0466 0.0270 0.2801 +vn -0.1448 0.0060 0.3254 +vn -0.1412 0.0168 0.3016 +vn -0.1339 0.0256 0.2619 +vn -0.2268 0.0056 0.2801 +vn -0.2158 0.0159 0.2617 +vn -0.1981 0.0236 0.2362 +vn -0.0510 0.0436 0.0487 +vn -0.1451 0.0405 0.0474 +vn -0.2268 0.0349 0.0445 +vn -0.0503 0.0405 0.1383 +vn -0.1414 0.0376 0.1348 +vn -0.2156 0.0326 0.1279 +vn -0.0468 0.0349 0.2165 +vn -0.1341 0.0326 0.2061 +vn -0.1980 0.0294 0.1891 +vn -0.3666 0.0061 0.0487 +vn -0.3408 0.0059 0.1385 +vn -0.2933 0.0055 0.2166 +vn -0.3408 0.0172 0.0480 +vn -0.3158 0.0168 0.1350 +vn -0.2742 0.0159 0.2059 +vn -0.2933 0.0270 0.0447 +vn -0.2740 0.0257 0.1280 +vn -0.2474 0.0236 0.1891 +vn -0.0296 -0.0418 0.1189 +vn -0.0466 -0.0349 0.2166 +vn -0.1448 -0.0405 0.0480 +vn -0.1412 -0.0376 0.1350 +vn -0.1339 -0.0326 0.2059 +vn -0.2268 -0.0349 0.0447 +vn -0.2158 -0.0326 0.1280 +vn -0.1981 -0.0294 0.1891 +vn -0.0510 -0.0061 0.3501 +vn -0.1451 -0.0059 0.3254 +vn -0.2268 -0.0055 0.2801 +vn -0.0503 -0.0172 0.3254 +vn -0.1414 -0.0168 0.3016 +vn -0.2156 -0.0159 0.2619 +vn -0.0468 -0.0270 0.2801 +vn -0.1341 -0.0257 0.2617 +vn -0.1980 -0.0236 0.2362 +vn -0.3666 -0.0061 0.0487 +vn -0.3408 -0.0173 0.0474 +vn -0.2933 -0.0270 0.0445 +vn -0.3408 -0.0060 0.1383 +vn -0.3158 -0.0168 0.1348 +vn -0.2742 -0.0256 0.1279 +vn -0.2933 -0.0056 0.2165 +vn -0.2740 -0.0159 0.2061 +vn -0.2474 -0.0236 0.1891 +vn -0.3666 0.0061 -0.0487 +vn -0.3408 0.0173 -0.0474 +vn -0.2933 0.0270 -0.0445 +vn -0.3408 0.0060 -0.1383 +vn -0.3158 0.0168 -0.1348 +vn -0.2742 0.0256 -0.1279 +vn -0.2933 0.0056 -0.2165 +vn -0.2740 0.0159 -0.2061 +vn -0.2474 0.0236 -0.1891 +vn -0.0510 0.0436 -0.0487 +vn -0.0497 0.0405 -0.1385 +vn -0.0466 0.0349 -0.2166 +vn -0.1448 0.0405 -0.0480 +vn -0.1412 0.0376 -0.1350 +vn -0.1339 0.0326 -0.2059 +vn -0.2268 0.0349 -0.0447 +vn -0.2158 0.0326 -0.1280 +vn -0.1981 0.0294 -0.1891 +vn -0.0510 0.0061 -0.3501 +vn -0.1451 0.0059 -0.3254 +vn -0.2268 0.0055 -0.2801 +vn -0.0503 0.0172 -0.3254 +vn -0.1414 0.0168 -0.3016 +vn -0.2156 0.0159 -0.2619 +vn -0.0468 0.0270 -0.2801 +vn -0.1341 0.0257 -0.2617 +vn -0.1980 0.0236 -0.2362 +vn -0.3666 -0.0061 -0.0487 +vn -0.3408 -0.0059 -0.1385 +vn -0.2933 -0.0055 -0.2166 +vn -0.3408 -0.0172 -0.0480 +vn -0.3158 -0.0168 -0.1350 +vn -0.2742 -0.0159 -0.2059 +vn -0.2933 -0.0270 -0.0447 +vn -0.2740 -0.0257 -0.1280 +vn -0.2474 -0.0236 -0.1891 +vn -0.0510 -0.0061 -0.3501 +vn -0.0497 -0.0173 -0.3254 +vn -0.0466 -0.0270 -0.2801 +vn -0.1448 -0.0060 -0.3254 +vn -0.1412 -0.0168 -0.3016 +vn -0.1339 -0.0256 -0.2619 +vn -0.2268 -0.0056 -0.2801 +vn -0.2158 -0.0159 -0.2617 +vn -0.1981 -0.0236 -0.2362 +vn -0.1451 -0.0405 -0.0474 +vn -0.2268 -0.0349 -0.0445 +vn -0.0300 -0.0418 -0.1185 +vn -0.1414 -0.0376 -0.1348 +vn -0.2156 -0.0326 -0.1279 +vn -0.0468 -0.0349 -0.2165 +vn -0.1341 -0.0326 -0.2061 +vn -0.1980 -0.0294 -0.1891 +vn 0.0510 0.0061 0.3501 +vn 0.1451 0.0059 0.3254 +vn 0.2268 0.0055 0.2801 +vn 0.0503 0.0172 0.3254 +vn 0.1414 0.0168 0.3016 +vn 0.2156 0.0159 0.2619 +vn 0.0468 0.0270 0.2801 +vn 0.1341 0.0257 0.2617 +vn 0.1980 0.0236 0.2362 +vn 0.3666 0.0061 0.0487 +vn 0.3408 0.0173 0.0474 +vn 0.2933 0.0270 0.0445 +vn 0.3408 0.0060 0.1383 +vn 0.3158 0.0168 0.1348 +vn 0.2742 0.0256 0.1279 +vn 0.2933 0.0056 0.2165 +vn 0.2740 0.0159 0.2061 +vn 0.2474 0.0236 0.1891 +vn 0.0510 0.0436 0.0487 +vn 0.0497 0.0405 0.1385 +vn 0.0466 0.0349 0.2166 +vn 0.1448 0.0405 0.0480 +vn 0.1412 0.0376 0.1350 +vn 0.1339 0.0326 0.2059 +vn 0.2268 0.0349 0.0447 +vn 0.2158 0.0326 0.1280 +vn 0.1981 0.0294 0.1891 +vn 0.3666 -0.0061 0.0487 +vn 0.3408 -0.0059 0.1385 +vn 0.2933 -0.0055 0.2166 +vn 0.3408 -0.0172 0.0480 +vn 0.3158 -0.0168 0.1350 +vn 0.2742 -0.0159 0.2059 +vn 0.2933 -0.0270 0.0447 +vn 0.2740 -0.0257 0.1280 +vn 0.2474 -0.0236 0.1891 +vn 0.0510 -0.0061 0.3501 +vn 0.0497 -0.0173 0.3254 +vn 0.0466 -0.0270 0.2801 +vn 0.1448 -0.0060 0.3254 +vn 0.1412 -0.0168 0.3016 +vn 0.1339 -0.0256 0.2619 +vn 0.2268 -0.0056 0.2801 +vn 0.2158 -0.0159 0.2617 +vn 0.1981 -0.0236 0.2362 +vn -0.0000 -0.0000 0.3568 +vn 0.1451 -0.0405 0.0474 +vn 0.2268 -0.0349 0.0445 +vn 0.0300 -0.0418 0.1185 +vn 0.1414 -0.0376 0.1348 +vn 0.2156 -0.0326 0.1279 +vn 0.0468 -0.0349 0.2165 +vn 0.1341 -0.0326 0.2061 +vn 0.1980 -0.0294 0.1891 +vn 0.3666 0.0061 -0.0487 +vn 0.3408 0.0059 -0.1385 +vn 0.2933 0.0055 -0.2166 +vn 0.3408 0.0172 -0.0480 +vn 0.3158 0.0168 -0.1350 +vn 0.2742 0.0159 -0.2059 +vn 0.2933 0.0270 -0.0447 +vn 0.2740 0.0257 -0.1280 +vn 0.2474 0.0236 -0.1891 +vn 0.0510 0.0061 -0.3501 +vn 0.0497 0.0173 -0.3254 +vn 0.0466 0.0270 -0.2801 +vn 0.1448 0.0060 -0.3254 +vn 0.1412 0.0168 -0.3016 +vn 0.1339 0.0256 -0.2619 +vn 0.2268 0.0056 -0.2801 +vn 0.2158 0.0159 -0.2617 +vn 0.1981 0.0236 -0.2362 +vn 0.0510 0.0436 -0.0487 +vn 0.1451 0.0405 -0.0474 +vn 0.2268 0.0349 -0.0445 +vn 0.0503 0.0405 -0.1383 +vn 0.1414 0.0376 -0.1348 +vn 0.2156 0.0326 -0.1279 +vn 0.0468 0.0349 -0.2165 +vn 0.1341 0.0326 -0.2061 +vn 0.1980 0.0294 -0.1891 +vn 0.0296 -0.0418 -0.1189 +vn 0.0466 -0.0349 -0.2166 +vn 0.1448 -0.0405 -0.0480 +vn 0.1412 -0.0376 -0.1350 +vn 0.1339 -0.0326 -0.2059 +vn 0.2268 -0.0349 -0.0447 +vn 0.2158 -0.0326 -0.1280 +vn 0.1981 -0.0294 -0.1891 +vn 0.0510 -0.0061 -0.3501 +vn 0.1451 -0.0059 -0.3254 +vn 0.2268 -0.0055 -0.2801 +vn 0.0503 -0.0172 -0.3254 +vn 0.1414 -0.0168 -0.3016 +vn 0.2156 -0.0159 -0.2619 +vn 0.0468 -0.0270 -0.2801 +vn 0.1341 -0.0257 -0.2617 +vn 0.1980 -0.0236 -0.2362 +vn 0.3666 -0.0061 -0.0487 +vn 0.3408 -0.0173 -0.0474 +vn 0.2933 -0.0270 -0.0445 +vn 0.3408 -0.0060 -0.1383 +vn 0.3158 -0.0168 -0.1348 +vn 0.2742 -0.0256 -0.1279 +vn 0.2933 -0.0056 -0.2165 +vn 0.2740 -0.0159 -0.2061 +vn 0.2474 -0.0236 -0.1891 +vn 0.0194 -0.0444 -0.0000 +vn 0.1430 -0.0411 -0.0000 +vn 0.2275 -0.0353 -0.0000 +vn 0.2964 -0.0271 -0.0000 +vn 0.3452 -0.0170 -0.0000 +vn 0.3705 -0.0058 -0.0000 +vn -0.0000 -0.0441 0.0466 +vn -0.0000 -0.0411 0.1366 +vn -0.0000 -0.0353 0.2172 +vn -0.0000 -0.0271 0.2831 +vn -0.0000 -0.0170 0.3297 +vn -0.0000 -0.0058 0.3538 +vn -0.3705 -0.0000 0.0466 +vn -0.3452 -0.0000 0.1365 +vn -0.2964 -0.0000 0.2172 +vn -0.2275 -0.0000 0.2831 +vn -0.1430 -0.0000 0.3297 +vn -0.0488 -0.0000 0.3538 +vn 0.0488 -0.0000 -0.3538 +vn 0.1430 -0.0000 -0.3297 +vn 0.2275 -0.0000 -0.2831 +vn 0.2964 -0.0000 -0.2172 +vn 0.3452 -0.0000 -0.1365 +vn 0.3705 -0.0000 -0.0466 +vn -0.0488 -0.0000 -0.3538 +vn -0.1430 -0.0000 -0.3297 +vn -0.2275 -0.0000 -0.2831 +vn -0.2964 -0.0000 -0.2172 +vn -0.3452 -0.0000 -0.1365 +vn -0.3705 -0.0000 -0.0466 +vn 0.0488 -0.0000 0.3538 +vn 0.1430 -0.0000 0.3297 +vn 0.2275 -0.0000 0.2831 +vn 0.2964 -0.0000 0.2172 +vn 0.3452 -0.0000 0.1365 +vn 0.3705 -0.0000 0.0466 +vn -0.0000 0.0441 -0.0466 +vn -0.0000 0.0411 -0.1365 +vn -0.0000 0.0353 -0.2172 +vn -0.0000 0.0271 -0.2831 +vn -0.0000 0.0170 -0.3297 +vn -0.0000 0.0058 -0.3538 +vn -0.0488 0.0441 -0.0000 +vn -0.1430 0.0411 -0.0000 +vn -0.2275 0.0353 -0.0000 +vn -0.2964 0.0271 -0.0000 +vn -0.3452 0.0170 -0.0000 +vn -0.3705 0.0058 -0.0000 +vn -0.0000 -0.0441 -0.0466 +vn -0.0000 -0.0411 -0.1366 +vn -0.0000 -0.0353 -0.2172 +vn -0.0000 -0.0271 -0.2831 +vn -0.0000 -0.0170 -0.3297 +vn -0.0000 -0.0058 -0.3538 +vn 0.0488 0.0441 -0.0000 +vn 0.1430 0.0411 -0.0000 +vn 0.2275 0.0353 -0.0000 +vn 0.2964 0.0271 -0.0000 +vn 0.3452 0.0170 -0.0000 +vn 0.3705 0.0058 -0.0000 +vn -0.0000 0.0441 0.0466 +vn -0.0000 0.0411 0.1365 +vn -0.0000 0.0353 0.2172 +vn -0.0000 0.0271 0.2831 +vn -0.0000 0.0170 0.3297 +vn -0.0000 0.0058 0.3538 +vn -0.0194 -0.0444 -0.0000 +vn -0.1430 -0.0411 -0.0000 +vn -0.2275 -0.0353 -0.0000 +vn -0.2964 -0.0271 -0.0000 +vn -0.3452 -0.0170 -0.0000 +vn -0.3705 -0.0058 -0.0000 +vn -0.0205 -0.0439 0.0496 +vn -0.0206 -0.0439 -0.0497 +vn 0.0206 -0.0439 0.0497 +vn 0.0205 -0.0439 -0.0496 +vn 0.0058 -0.0000 0.3568 +vn -0.0058 -0.0000 -0.3568 +vn -0.3734 -0.0000 0.0138 +vn 0.3734 -0.0000 -0.0138 +vn -0.3735 -0.0000 -0.0108 +vn 0.3735 -0.0000 0.0108 +vn 0.0046 -0.0000 -0.3568 +vn -0.0046 -0.0000 0.3568 +vt 0.579948 0.337500 +vt 0.840885 0.798611 +vt 0.578906 0.336574 +vt 0.579948 0.336574 +vt 0.840885 0.816204 +vt 0.579948 0.337500 +vt 0.579948 0.337500 +vt 0.578906 0.336574 +vt 0.579427 0.337500 +vt 0.579948 0.337500 +vt 0.840885 0.800463 +vt 0.579948 0.337500 +vt 0.579948 0.337500 +vt 0.579427 0.337500 +vt 0.578906 0.336574 +vt 0.579948 0.337500 +vt 0.840885 0.803241 +vt 0.579948 0.337500 +vt 0.579948 0.337500 +vt 0.579427 0.337500 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.579948 0.336574 +vt 0.840885 0.814352 +vt 0.579948 0.336574 +vt 0.840885 0.811574 +vt 0.579948 0.336574 +vt 0.840885 0.807870 +vt 0.579948 0.336574 +vt 0.842969 0.816204 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.776823 0.816204 +vt 0.794531 0.798611 +vt 0.794531 0.816204 +vt 0.776823 0.814352 +vt 0.776823 0.811574 +vt 0.776823 0.807870 +vt 0.785677 0.798611 +vt 0.778906 0.816204 +vt 0.779427 0.813426 +vt 0.779427 0.811574 +vt 0.778906 0.807870 +vt 0.785677 0.800463 +vt 0.780990 0.816204 +vt 0.780990 0.813426 +vt 0.780990 0.812500 +vt 0.780990 0.807870 +vt 0.785677 0.802315 +vt 0.785677 0.808796 +vt 0.794531 0.800463 +vt 0.794531 0.803241 +vt 0.794531 0.807870 +vt 0.792448 0.798611 +vt 0.792448 0.801389 +vt 0.792448 0.803241 +vt 0.792448 0.807870 +vt 0.790365 0.798611 +vt 0.790365 0.801389 +vt 0.790365 0.802315 +vt 0.790365 0.807870 +vt 0.792448 0.816204 +vt 0.790365 0.816204 +vt 0.785677 0.816204 +vt 0.794531 0.814352 +vt 0.792448 0.813426 +vt 0.790365 0.813426 +vt 0.785677 0.814352 +vt 0.794531 0.811574 +vt 0.792448 0.811574 +vt 0.790365 0.812500 +vt 0.785677 0.812500 +vt 0.579948 0.333796 +vt 0.840885 0.862500 +vt 0.578906 0.333796 +vt 0.840885 0.880093 +vt 0.579948 0.331944 +vt 0.579948 0.333796 +vt 0.842969 0.862500 +vt 0.579948 0.333796 +vt 0.579427 0.333796 +vt 0.579948 0.332870 +vt 0.840885 0.864352 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.579427 0.332870 +vt 0.579948 0.332870 +vt 0.840885 0.867130 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.579427 0.332870 +vt 0.579427 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.579427 0.331944 +vt 0.578906 0.333796 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.579427 0.331944 +vt 0.578906 0.333796 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.579427 0.332870 +vt 0.579948 0.331944 +vt 0.840885 0.877315 +vt 0.579948 0.332870 +vt 0.840885 0.875463 +vt 0.579948 0.332870 +vt 0.840885 0.870833 +vt 0.579948 0.331944 +vt 0.579948 0.331944 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.579948 0.331944 +vt 0.579948 0.331944 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.794531 0.862500 +vt 0.794531 0.880093 +vt 0.776823 0.862500 +vt 0.794531 0.864352 +vt 0.794531 0.867130 +vt 0.794531 0.870833 +vt 0.792448 0.862500 +vt 0.792448 0.864352 +vt 0.792448 0.867130 +vt 0.792448 0.870833 +vt 0.790365 0.862500 +vt 0.790365 0.864352 +vt 0.790365 0.866204 +vt 0.790365 0.870833 +vt 0.787240 0.870833 +vt 0.792448 0.880093 +vt 0.790365 0.880093 +vt 0.776823 0.870833 +vt 0.785677 0.880093 +vt 0.794531 0.877315 +vt 0.792448 0.877315 +vt 0.790365 0.877315 +vt 0.785677 0.877315 +vt 0.778906 0.870833 +vt 0.794531 0.875463 +vt 0.792448 0.875463 +vt 0.790365 0.875463 +vt 0.785677 0.876389 +vt 0.780990 0.870833 +vt 0.778906 0.862500 +vt 0.780990 0.862500 +vt 0.785677 0.862500 +vt 0.776823 0.864352 +vt 0.779427 0.864352 +vt 0.780990 0.864352 +vt 0.785677 0.864352 +vt 0.776823 0.867130 +vt 0.779427 0.867130 +vt 0.780990 0.866204 +vt 0.785677 0.866204 +vt 0.579948 0.340278 +vt 0.840885 0.752315 +vt 0.840885 0.734722 +vt 0.579948 0.342130 +vt 0.575781 0.336574 +vt 0.579948 0.341204 +vt 0.840885 0.750463 +vt 0.579948 0.341204 +vt 0.840885 0.747685 +vt 0.579948 0.341204 +vt 0.840885 0.743981 +vt 0.579948 0.340278 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579948 0.340278 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579427 0.341204 +vt 0.575260 0.336574 +vt 0.579948 0.342130 +vt 0.579948 0.342130 +vt 0.575260 0.336574 +vt 0.579427 0.342130 +vt 0.579948 0.342130 +vt 0.840885 0.737500 +vt 0.579948 0.342130 +vt 0.579948 0.342130 +vt 0.579427 0.342130 +vt 0.575260 0.336574 +vt 0.579948 0.341204 +vt 0.840885 0.739352 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579427 0.341204 +vt 0.575260 0.336574 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.579427 0.340278 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.579427 0.341204 +vt 0.575781 0.336574 +vt 0.575260 0.336574 +vt 0.575260 0.336574 +vt 0.575260 0.336574 +vt 0.579427 0.341204 +vt 0.575260 0.336574 +vt 0.794531 0.734722 +vt 0.794531 0.752315 +vt 0.730990 0.816204 +vt 0.794531 0.737500 +vt 0.794531 0.739352 +vt 0.794531 0.743981 +vt 0.792448 0.734722 +vt 0.792448 0.737500 +vt 0.792448 0.739352 +vt 0.792448 0.743981 +vt 0.790365 0.734722 +vt 0.790365 0.737500 +vt 0.790365 0.739352 +vt 0.790365 0.743981 +vt 0.789323 0.743981 +vt 0.785677 0.746759 +vt 0.722135 0.810648 +vt 0.792448 0.752315 +vt 0.790365 0.752315 +vt 0.730990 0.807870 +vt 0.785677 0.752315 +vt 0.794531 0.750463 +vt 0.792448 0.750463 +vt 0.790365 0.750463 +vt 0.785677 0.750463 +vt 0.728906 0.807870 +vt 0.794531 0.747685 +vt 0.792448 0.747685 +vt 0.790365 0.748611 +vt 0.785677 0.748611 +vt 0.726823 0.807870 +vt 0.728906 0.816204 +vt 0.726302 0.816204 +vt 0.722135 0.816204 +vt 0.785677 0.734722 +vt 0.730990 0.814352 +vt 0.728385 0.813426 +vt 0.726302 0.813426 +vt 0.785677 0.737500 +vt 0.722135 0.814352 +vt 0.730990 0.811574 +vt 0.728906 0.811574 +vt 0.726302 0.812500 +vt 0.785677 0.738426 +vt 0.722135 0.812500 +vt 0.840885 0.688426 +vt 0.579948 0.344907 +vt 0.840885 0.926389 +vt 0.579948 0.329167 +vt 0.575781 0.333796 +vt 0.579948 0.344907 +vt 0.840885 0.686574 +vt 0.579948 0.344907 +vt 0.840885 0.684722 +vt 0.579948 0.345833 +vt 0.579948 0.328241 +vt 0.840885 0.934722 +vt 0.840885 0.680093 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.345833 +vt 0.579948 0.328241 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.345833 +vt 0.579948 0.328241 +vt 0.579427 0.345833 +vt 0.579427 0.329167 +vt 0.575260 0.332870 +vt 0.579948 0.329167 +vt 0.579948 0.329167 +vt 0.575781 0.332870 +vt 0.579427 0.329167 +vt 0.579948 0.329167 +vt 0.840885 0.928241 +vt 0.579948 0.329167 +vt 0.579948 0.329167 +vt 0.579427 0.329167 +vt 0.575781 0.332870 +vt 0.579948 0.329167 +vt 0.840885 0.930093 +vt 0.579948 0.329167 +vt 0.579948 0.329167 +vt 0.579427 0.329167 +vt 0.575260 0.332870 +vt 0.575781 0.333796 +vt 0.575260 0.333796 +vt 0.575260 0.333796 +vt 0.579427 0.344907 +vt 0.575781 0.332870 +vt 0.575781 0.332870 +vt 0.575260 0.332870 +vt 0.579427 0.344907 +vt 0.575260 0.332870 +vt 0.575781 0.332870 +vt 0.575781 0.332870 +vt 0.575260 0.332870 +vt 0.579427 0.344907 +vt 0.575260 0.332870 +vt 0.730990 0.862500 +vt 0.794531 0.926389 +vt 0.794531 0.688426 +vt 0.730990 0.864352 +vt 0.730990 0.867130 +vt 0.730990 0.870833 +vt 0.785677 0.926389 +vt 0.728906 0.862500 +vt 0.728906 0.864352 +vt 0.728906 0.867130 +vt 0.728906 0.870833 +vt 0.785677 0.928241 +vt 0.726302 0.862500 +vt 0.726302 0.864352 +vt 0.726302 0.866204 +vt 0.726823 0.870833 +vt 0.785677 0.930093 +vt 0.725781 0.870833 +vt 0.789323 0.934722 +vt 0.785677 0.683796 +vt 0.794531 0.928241 +vt 0.794531 0.930093 +vt 0.794531 0.934722 +vt 0.794531 0.680093 +vt 0.792448 0.926389 +vt 0.792448 0.928241 +vt 0.792448 0.930093 +vt 0.792448 0.934722 +vt 0.792448 0.680093 +vt 0.790365 0.926389 +vt 0.790365 0.928241 +vt 0.790365 0.930093 +vt 0.790365 0.934722 +vt 0.790365 0.680093 +vt 0.792448 0.688426 +vt 0.790365 0.688426 +vt 0.722135 0.862500 +vt 0.785677 0.688426 +vt 0.794531 0.686574 +vt 0.792448 0.686574 +vt 0.790365 0.686574 +vt 0.722135 0.864352 +vt 0.785677 0.686574 +vt 0.794531 0.684722 +vt 0.792448 0.684722 +vt 0.790365 0.684722 +vt 0.722135 0.866204 +vt 0.785677 0.684722 +vt 0.778906 0.816204 +vt 0.776823 0.816204 +vt 0.776823 0.814352 +vt 0.779427 0.813426 +vt 0.776823 0.864352 +vt 0.776823 0.862500 +vt 0.778906 0.862500 +vt 0.779427 0.864352 +vt 0.730990 0.814352 +vt 0.730990 0.816204 +vt 0.728906 0.816204 +vt 0.728385 0.813426 +vt 0.728906 0.862500 +vt 0.730990 0.862500 +vt 0.730990 0.864352 +vt 0.728906 0.864352 +s 0 +usemtl CabnetDoors +f 15151/29530/11716 15001/29349/11716 15077/29439/11716 15223/29629/11716 +f 15225/29631/11717 15186/29573/11717 15113/29479/11717 15149/29528/11717 +f 15076/29438/11718 15040/29392/11718 15187/29575/11718 15224/29630/11718 +f 14965/29303/11719 15114/29481/11719 15188/29577/11719 15039/29391/11719 +f 15003/29351/11720 14966/29305/11720 15038/29390/11720 15075/29437/11720 +f 14964/29301/11721 14967/29306/11721 14971/29312/11721 14970/29310/11721 +f 14967/29306/11722 14968/29307/11722 14972/29313/11722 14971/29312/11722 +f 14968/29307/11723 14969/29309/11723 14973/29314/11723 14972/29313/11723 +f 14970/29310/11724 14971/29312/11724 14975/29318/11724 14974/29316/11724 +f 14971/29312/11725 14972/29313/11725 14976/29319/11725 14975/29318/11725 +f 14972/29313/11726 14973/29314/11726 14977/29320/11726 14976/29319/11726 +f 14974/29316/11727 14975/29318/11727 14996/29344/11727 14992/29338/11727 +f 14975/29318/11728 14976/29319/11728 15000/29348/11728 14996/29344/11728 +f 14976/29319/11729 14977/29320/11729 14978/29322/11729 15000/29348/11729 +f 14965/29303/11730 14979/29323/11730 14983/29327/11730 14982/29326/11730 +f 14979/29323/11731 14980/29324/11731 14984/29328/11731 14983/29327/11731 +f 14980/29324/11732 14981/29325/11732 14985/29329/11732 14984/29328/11732 +f 14982/29326/11733 14983/29327/11733 14987/29331/11733 14986/29330/11733 +f 14983/29327/11734 14984/29328/11734 14988/29332/11734 14987/29331/11734 +f 14984/29328/11735 14985/29329/11735 14989/29333/11735 14988/29332/11735 +f 14986/29330/11736 14987/29331/11736 14973/29315/11736 14969/29308/11736 +f 14987/29331/11737 14988/29332/11737 14977/29321/11737 14973/29315/11737 +f 14988/29332/11738 14989/29333/11738 14978/29322/11738 14977/29321/11738 +f 14966/29304/11739 14990/29334/11739 14994/29342/11739 14993/29340/11739 +f 14990/29334/11740 14991/29336/11740 14995/29343/11740 14994/29342/11740 +f 14991/29336/11741 14992/29338/11741 14996/29344/11741 14995/29343/11741 +f 14993/29340/11742 14994/29342/11742 14998/29346/11742 14997/29345/11742 +f 14994/29342/11743 14995/29343/11743 14999/29347/11743 14998/29346/11743 +f 14995/29343/11744 14996/29344/11744 15000/29348/11744 14999/29347/11744 +f 14997/29345/11745 14998/29346/11745 14985/29329/11745 14981/29325/11745 +f 14998/29346/11746 14999/29347/11746 14989/29333/11746 14985/29329/11746 +f 14999/29347/11747 15000/29348/11747 14978/29322/11747 14989/29333/11747 +f 15178/29563/11720 15151/29530/11720 15269/29686/11720 15268/29685/11720 +f 15004/29352/11748 15005/29353/11748 15009/29358/11748 15008/29357/11748 +f 15005/29353/11749 15006/29354/11749 15010/29359/11749 15009/29358/11749 +f 15007/29356/11750 15008/29357/11750 15012/29362/11750 15011/29361/11750 +f 15008/29357/11751 15009/29358/11751 15013/29363/11751 15012/29362/11751 +f 15009/29358/11752 15010/29359/11752 15014/29364/11752 15013/29363/11752 +f 15011/29361/11753 15012/29362/11753 15033/29384/11753 15029/29380/11753 +f 15012/29362/11754 15013/29363/11754 15037/29388/11754 15033/29384/11754 +f 15013/29363/11755 15014/29364/11755 15015/29366/11755 15037/29388/11755 +f 15002/29350/11756 15016/29367/11756 15020/29371/11756 15019/29370/11756 +f 15016/29367/11757 15017/29368/11757 15021/29372/11757 15020/29371/11757 +f 15017/29368/11758 15018/29369/11758 15022/29373/11758 15021/29372/11758 +f 15019/29370/11759 15020/29371/11759 15024/29375/11759 15023/29374/11759 +f 15020/29371/11760 15021/29372/11760 15025/29376/11760 15024/29375/11760 +f 15021/29372/11761 15022/29373/11761 15026/29377/11761 15025/29376/11761 +f 15023/29374/11762 15024/29375/11762 15010/29360/11762 15006/29355/11762 +f 15024/29375/11763 15025/29376/11763 15014/29365/11763 15010/29360/11763 +f 15025/29376/11764 15026/29377/11764 15015/29366/11764 15014/29365/11764 +f 15003/29351/11765 15027/29378/11765 15031/29382/11765 15030/29381/11765 +f 15027/29378/11766 15028/29379/11766 15032/29383/11766 15031/29382/11766 +f 15028/29379/11767 15029/29380/11767 15033/29384/11767 15032/29383/11767 +f 15030/29381/11768 15031/29382/11768 15035/29386/11768 15034/29385/11768 +f 15031/29382/11769 15032/29383/11769 15036/29387/11769 15035/29386/11769 +f 15032/29383/11770 15033/29384/11770 15037/29388/11770 15036/29387/11770 +f 15034/29385/11771 15035/29386/11771 15022/29373/11771 15018/29369/11771 +f 15035/29386/11772 15036/29387/11772 15026/29377/11772 15022/29373/11772 +f 15036/29387/11773 15037/29388/11773 15015/29366/11773 15026/29377/11773 +f 15038/29389/11774 15041/29394/11774 15045/29400/11774 15044/29398/11774 +f 15041/29394/11775 15042/29396/11775 15046/29401/11775 15045/29400/11775 +f 15042/29396/11776 15043/29397/11776 15047/29402/11776 15046/29401/11776 +f 15044/29398/11777 15045/29400/11777 15049/29405/11777 15048/29403/11777 +f 15045/29400/11778 15046/29401/11778 15050/29406/11778 15049/29405/11778 +f 15046/29401/11779 15047/29402/11779 15051/29407/11779 15050/29406/11779 +f 15048/29403/11780 15049/29405/11780 15070/29432/11780 15066/29427/11780 +f 15049/29405/11781 15050/29406/11781 15074/29436/11781 15070/29432/11781 +f 15050/29406/11782 15051/29407/11782 15052/29408/11782 15074/29436/11782 +f 15039/29391/11783 15053/29409/11783 15057/29414/11783 15056/29413/11783 +f 15053/29409/11784 15054/29410/11784 15058/29415/11784 15057/29414/11784 +f 15054/29410/11785 15055/29411/11785 15059/29416/11785 15058/29415/11785 +f 15056/29413/11786 15057/29414/11786 15061/29419/11786 15060/29418/11786 +f 15057/29414/11787 15058/29415/11787 15062/29420/11787 15061/29419/11787 +f 15058/29415/11788 15059/29416/11788 15063/29421/11788 15062/29420/11788 +f 15060/29418/11789 15061/29419/11789 15047/29402/11789 15043/29397/11789 +f 15061/29419/11790 15062/29420/11790 15051/29407/11790 15047/29402/11790 +f 15062/29420/11791 15063/29421/11791 15052/29408/11791 15051/29407/11791 +f 15040/29393/11792 15064/29423/11792 15068/29430/11792 15067/29429/11792 +f 15064/29423/11793 15065/29425/11793 15069/29431/11793 15068/29430/11793 +f 15065/29425/11794 15066/29427/11794 15070/29432/11794 15069/29431/11794 +f 15067/29429/11795 15068/29430/11795 15072/29434/11795 15071/29433/11795 +f 15068/29430/11796 15069/29431/11796 15073/29435/11796 15072/29434/11796 +f 15069/29431/11797 15070/29432/11797 15074/29436/11797 15073/29435/11797 +f 15071/29433/11798 15072/29434/11798 15059/29417/11798 15055/29412/11798 +f 15072/29434/11799 15073/29435/11799 15063/29422/11799 15059/29417/11799 +f 15073/29435/11800 15074/29436/11800 15052/29408/11800 15063/29422/11800 +f 15075/29437/11801 15078/29440/11801 15082/29444/11801 15081/29443/11801 +f 15078/29440/11802 15079/29441/11802 15083/29445/11802 15082/29444/11802 +f 15079/29441/11803 15080/29442/11803 15084/29446/11803 15083/29445/11803 +f 15081/29443/11804 15082/29444/11804 15086/29448/11804 15085/29447/11804 +f 15082/29444/11805 15083/29445/11805 15087/29449/11805 15086/29448/11805 +f 15083/29445/11806 15084/29446/11806 15088/29450/11806 15087/29449/11806 +f 15085/29447/11807 15086/29448/11807 15107/29472/11807 15103/29468/11807 +f 15086/29448/11808 15087/29449/11808 15111/29476/11808 15107/29472/11808 +f 15087/29449/11809 15088/29450/11809 15089/29451/11809 15111/29476/11809 +f 15076/29438/11810 15090/29452/11810 15094/29457/11810 15093/29456/11810 +f 15090/29452/11811 15091/29453/11811 15095/29458/11811 15094/29457/11811 +f 15091/29453/11812 15092/29455/11812 15096/29459/11812 15095/29458/11812 +f 15093/29456/11813 15094/29457/11813 15098/29462/11813 15097/29461/11813 +f 15094/29457/11814 15095/29458/11814 15099/29463/11814 15098/29462/11814 +f 15095/29458/11815 15096/29459/11815 15100/29464/11815 15099/29463/11815 +f 15097/29461/11816 15098/29462/11816 15084/29446/11816 15080/29442/11816 +f 15098/29462/11817 15099/29463/11817 15088/29450/11817 15084/29446/11817 +f 15099/29463/11818 15100/29464/11818 15089/29451/11818 15088/29450/11818 +f 15104/29469/11717 15077/29439/11717 15265/29682/11717 15264/29681/11717 +f 15101/29466/11819 15102/29467/11819 15106/29471/11819 15105/29470/11819 +f 15102/29467/11820 15103/29468/11820 15107/29472/11820 15106/29471/11820 +f 15104/29469/11821 15105/29470/11821 15109/29474/11821 15108/29473/11821 +f 15105/29470/11822 15106/29471/11822 15110/29475/11822 15109/29474/11822 +f 15106/29471/11823 15107/29472/11823 15111/29476/11823 15110/29475/11823 +f 15108/29473/11824 15109/29474/11824 15096/29460/11824 15092/29454/11824 +f 15109/29474/11825 15110/29475/11825 15100/29465/11825 15096/29460/11825 +f 15110/29475/11826 15111/29476/11826 15089/29451/11826 15100/29465/11826 +f 15112/29477/11827 15115/29482/11827 15119/29489/11827 15118/29488/11827 +f 15115/29482/11828 15116/29484/11828 15120/29490/11828 15119/29489/11828 +f 15116/29484/11829 15117/29486/11829 15121/29491/11829 15120/29490/11829 +f 15118/29488/11830 15119/29489/11830 15123/29493/11830 15122/29492/11830 +f 15119/29489/11831 15120/29490/11831 15124/29494/11831 15123/29493/11831 +f 15120/29490/11832 15121/29491/11832 15125/29495/11832 15124/29494/11832 +f 15122/29492/11833 15123/29493/11833 15144/29521/11833 15140/29517/11833 +f 15123/29493/11834 15124/29494/11834 15148/29526/11834 15144/29521/11834 +f 15124/29494/11835 15125/29495/11835 15126/29496/11835 15148/29526/11835 +f 15113/29480/11836 15127/29498/11836 15131/29504/11836 15130/29502/11836 +f 15127/29498/11837 15128/29499/11837 15132/29505/11837 15131/29504/11837 +f 15128/29499/11838 15129/29501/11838 15133/29506/11838 15132/29505/11838 +f 15130/29502/11839 15131/29504/11839 15135/29510/11839 15134/29508/11839 +f 15131/29504/11840 15132/29505/11840 15136/29511/11840 15135/29510/11840 +f 15132/29505/11841 15133/29506/11841 15137/29512/11841 15136/29511/11841 +f 15134/29508/11842 15135/29510/11842 15121/29491/11842 15117/29486/11842 +f 15135/29510/11843 15136/29511/11843 15125/29495/11843 15121/29491/11843 +f 15136/29511/11844 15137/29512/11844 15126/29496/11844 15125/29495/11844 +f 15114/29481/11845 15138/29514/11845 15142/29519/11845 15141/29518/11845 +f 15138/29514/11846 15139/29515/11846 15143/29520/11846 15142/29519/11846 +f 15139/29515/11847 15140/29516/11847 15144/29522/11847 15143/29520/11847 +f 15141/29518/11848 15142/29519/11848 15146/29524/11848 15145/29523/11848 +f 15142/29519/11849 15143/29520/11849 15147/29525/11849 15146/29524/11849 +f 15143/29520/11850 15144/29522/11850 15148/29527/11850 15147/29525/11850 +f 15145/29523/11851 15146/29524/11851 15133/29507/11851 15129/29500/11851 +f 15146/29524/11852 15147/29525/11852 15137/29513/11852 15133/29507/11852 +f 15147/29525/11853 15148/29527/11853 15126/29497/11853 15137/29513/11853 +f 15149/29528/11854 15152/29531/11854 15156/29535/11854 15155/29534/11854 +f 15152/29531/11855 15153/29532/11855 15157/29536/11855 15156/29535/11855 +f 15153/29532/11856 15154/29533/11856 15158/29537/11856 15157/29536/11856 +f 15155/29534/11857 15156/29535/11857 15160/29539/11857 15159/29538/11857 +f 15156/29535/11858 15157/29536/11858 15161/29540/11858 15160/29539/11858 +f 15157/29536/11859 15158/29537/11859 15162/29541/11859 15161/29540/11859 +f 15159/29538/11860 15160/29539/11860 15181/29566/11860 15177/29562/11860 +f 15160/29539/11861 15161/29540/11861 15185/29571/11861 15181/29566/11861 +f 15161/29540/11862 15162/29541/11862 15163/29542/11862 15185/29571/11862 +f 15150/29529/11863 15164/29545/11863 15168/29550/11863 15167/29549/11863 +f 15164/29545/11864 15165/29546/11864 15169/29551/11864 15168/29550/11864 +f 15165/29546/11865 15166/29548/11865 15170/29552/11865 15169/29551/11865 +f 15167/29549/11866 15168/29550/11866 15172/29555/11866 15171/29554/11866 +f 15168/29550/11867 15169/29551/11867 15173/29556/11867 15172/29555/11867 +f 15169/29551/11868 15170/29552/11868 15174/29557/11868 15173/29556/11868 +f 15171/29554/11869 15172/29555/11869 15158/29537/11869 15154/29533/11869 +f 15172/29555/11870 15173/29556/11870 15162/29541/11870 15158/29537/11870 +f 15173/29556/11871 15174/29557/11871 15163/29543/11871 15162/29541/11871 +f 15229/29636/11872 15223/29629/11872 15273/29690/11872 15272/29689/11872 +f 15175/29559/11873 15176/29560/11873 15180/29565/11873 15179/29564/11873 +f 15176/29560/11874 15177/29561/11874 15181/29567/11874 15180/29565/11874 +f 15178/29563/11875 15179/29564/11875 15183/29569/11875 15182/29568/11875 +f 15179/29564/11876 15180/29565/11876 15184/29570/11876 15183/29569/11876 +f 15180/29565/11877 15181/29567/11877 15185/29572/11877 15184/29570/11877 +f 15182/29568/11878 15183/29569/11878 15170/29553/11878 15166/29547/11878 +f 15183/29569/11879 15184/29570/11879 15174/29558/11879 15170/29553/11879 +f 15184/29570/11880 15185/29572/11880 15163/29544/11880 15174/29558/11880 +f 15186/29574/11881 15189/29578/11881 15193/29587/11881 15192/29586/11881 +f 15189/29578/11882 15190/29580/11882 15194/29588/11882 15193/29587/11882 +f 15190/29580/11883 15191/29582/11883 15195/29589/11883 15194/29588/11883 +f 15192/29586/11884 15193/29587/11884 15197/29592/11884 15196/29591/11884 +f 15193/29587/11885 15194/29588/11885 15198/29593/11885 15197/29592/11885 +f 15194/29588/11886 15195/29589/11886 15199/29594/11886 15198/29593/11886 +f 15196/29591/11887 15197/29592/11887 15218/29622/11887 15214/29618/11887 +f 15197/29592/11888 15198/29593/11888 15222/29627/11888 15218/29622/11888 +f 15198/29593/11889 15199/29594/11889 15200/29596/11889 15222/29627/11889 +f 15187/29576/11890 15201/29599/11890 15205/29605/11890 15204/29603/11890 +f 15201/29599/11891 15202/29600/11891 15206/29606/11891 15205/29605/11891 +f 15202/29600/11892 15203/29602/11892 15207/29607/11892 15206/29606/11892 +f 15204/29603/11893 15205/29605/11893 15209/29611/11893 15208/29609/11893 +f 15205/29605/11894 15206/29606/11894 15210/29612/11894 15209/29611/11894 +f 15206/29606/11895 15207/29607/11895 15211/29613/11895 15210/29612/11895 +f 15208/29609/11896 15209/29611/11896 15195/29590/11896 15191/29583/11896 +f 15209/29611/11897 15210/29612/11897 15199/29595/11897 15195/29590/11897 +f 15210/29612/11898 15211/29613/11898 15200/29597/11898 15199/29595/11898 +f 15188/29577/11899 15212/29615/11899 15216/29620/11899 15215/29619/11899 +f 15212/29615/11900 15213/29616/11900 15217/29621/11900 15216/29620/11900 +f 15213/29616/11901 15214/29617/11901 15218/29623/11901 15217/29621/11901 +f 15215/29619/11902 15216/29620/11902 15220/29625/11902 15219/29624/11902 +f 15216/29620/11903 15217/29621/11903 15221/29626/11903 15220/29625/11903 +f 15217/29621/11904 15218/29623/11904 15222/29628/11904 15221/29626/11904 +f 15219/29624/11905 15220/29625/11905 15207/29608/11905 15203/29601/11905 +f 15220/29625/11906 15221/29626/11906 15211/29614/11906 15207/29608/11906 +f 15221/29626/11907 15222/29628/11907 15200/29598/11907 15211/29614/11907 +f 15007/29356/11718 15001/29349/11718 15261/29678/11718 15260/29677/11718 +f 15226/29632/11908 15227/29633/11908 15231/29638/11908 15230/29637/11908 +f 15227/29633/11909 15228/29634/11909 15232/29639/11909 15231/29638/11909 +f 15229/29636/11910 15230/29637/11910 15234/29642/11910 15233/29641/11910 +f 15230/29637/11911 15231/29638/11911 15235/29643/11911 15234/29642/11911 +f 15231/29638/11912 15232/29639/11912 15236/29644/11912 15235/29643/11912 +f 15233/29641/11913 15234/29642/11913 15255/29670/11913 15251/29665/11913 +f 15234/29642/11914 15235/29643/11914 15259/29675/11914 15255/29670/11914 +f 15235/29643/11915 15236/29644/11915 15237/29646/11915 15259/29675/11915 +f 15224/29630/11916 15238/29649/11916 15242/29654/11916 15241/29653/11916 +f 15238/29649/11917 15239/29650/11917 15243/29655/11917 15242/29654/11917 +f 15239/29650/11918 15240/29651/11918 15244/29656/11918 15243/29655/11918 +f 15241/29653/11919 15242/29654/11919 15246/29659/11919 15245/29658/11919 +f 15242/29654/11920 15243/29655/11920 15247/29660/11920 15246/29659/11920 +f 15243/29655/11921 15244/29656/11921 15248/29661/11921 15247/29660/11921 +f 15245/29658/11922 15246/29659/11922 15232/29640/11922 15228/29635/11922 +f 15246/29659/11923 15247/29660/11923 15236/29645/11923 15232/29640/11923 +f 15247/29660/11924 15248/29661/11924 15237/29647/11924 15236/29645/11924 +f 15225/29631/11925 15249/29663/11925 15253/29668/11925 15252/29667/11925 +f 15249/29663/11926 15250/29664/11926 15254/29669/11926 15253/29668/11926 +f 15250/29664/11927 15251/29666/11927 15255/29671/11927 15254/29669/11927 +f 15252/29667/11928 15253/29668/11928 15257/29673/11928 15256/29672/11928 +f 15253/29668/11929 15254/29669/11929 15258/29674/11929 15257/29673/11929 +f 15254/29669/11930 15255/29671/11930 15259/29676/11930 15258/29674/11930 +f 15256/29672/11931 15257/29673/11931 15244/29657/11931 15240/29652/11931 +f 15257/29673/11932 15258/29674/11932 15248/29662/11932 15244/29657/11932 +f 15258/29674/11933 15259/29676/11933 15237/29648/11933 15248/29662/11933 +f 15151/29530/11934 15223/29629/11934 15229/29636/11934 15175/29559/11934 +f 15175/29559/11935 15229/29636/11935 15233/29641/11935 15176/29560/11935 +f 15176/29560/11936 15233/29641/11936 15251/29665/11936 15177/29561/11936 +f 15177/29562/11937 15251/29666/11937 15250/29664/11937 15159/29538/11937 +f 15159/29538/11938 15250/29664/11938 15249/29663/11938 15155/29534/11938 +f 15155/29534/11939 15249/29663/11939 15225/29631/11939 15149/29528/11939 +f 15001/29349/11940 15151/29530/11940 15178/29563/11940 15004/29352/11940 +f 15004/29352/11941 15178/29563/11941 15182/29568/11941 15005/29353/11941 +f 15005/29353/11942 15182/29568/11942 15166/29547/11942 15006/29354/11942 +f 15006/29355/11943 15166/29548/11943 15165/29546/11943 15023/29374/11943 +f 15023/29374/11944 15165/29546/11944 15164/29545/11944 15019/29370/11944 +f 15019/29370/11945 15164/29545/11945 15150/29529/11945 15002/29350/11945 +f 14966/29305/11946 15003/29351/11946 15030/29381/11946 14990/29335/11946 +f 14990/29335/11947 15030/29381/11947 15034/29385/11947 14991/29337/11947 +f 14991/29337/11948 15034/29385/11948 15018/29369/11948 14992/29339/11948 +f 14992/29339/11949 15018/29369/11949 15017/29368/11949 14974/29317/11949 +f 14974/29317/11950 15017/29368/11950 15016/29367/11950 14970/29311/11950 +f 14970/29311/11951 15016/29367/11951 15002/29350/11951 14964/29302/11951 +f 15224/29630/11952 15187/29575/11952 15204/29604/11952 15238/29649/11952 +f 15238/29649/11953 15204/29604/11953 15208/29610/11953 15239/29650/11953 +f 15239/29650/11954 15208/29610/11954 15191/29584/11954 15240/29651/11954 +f 15240/29652/11955 15191/29585/11955 15190/29581/11955 15256/29672/11955 +f 15256/29672/11956 15190/29581/11956 15189/29579/11956 15252/29667/11956 +f 15252/29667/11957 15189/29579/11957 15186/29573/11957 15225/29631/11957 +f 15040/29392/11958 15076/29438/11958 15093/29456/11958 15064/29424/11958 +f 15064/29424/11959 15093/29456/11959 15097/29461/11959 15065/29426/11959 +f 15065/29426/11960 15097/29461/11960 15080/29442/11960 15066/29428/11960 +f 15066/29428/11961 15080/29442/11961 15079/29441/11961 15048/29404/11961 +f 15048/29404/11962 15079/29441/11962 15078/29440/11962 15044/29399/11962 +f 15044/29399/11963 15078/29440/11963 15075/29437/11963 15038/29390/11963 +f 15112/29478/11964 15150/29529/11964 15167/29549/11964 15115/29483/11964 +f 15115/29483/11965 15167/29549/11965 15171/29554/11965 15116/29485/11965 +f 15116/29485/11966 15171/29554/11966 15154/29533/11966 15117/29487/11966 +f 15117/29487/11967 15154/29533/11967 15153/29532/11967 15134/29509/11967 +f 15134/29509/11968 15153/29532/11968 15152/29531/11968 15130/29503/11968 +f 15130/29503/11969 15152/29531/11969 15149/29528/11969 15113/29479/11969 +f 15039/29391/11970 15188/29577/11970 15215/29619/11970 15053/29409/11970 +f 15053/29409/11971 15215/29619/11971 15219/29624/11971 15054/29410/11971 +f 15054/29410/11972 15219/29624/11972 15203/29601/11972 15055/29411/11972 +f 15055/29412/11973 15203/29602/11973 15202/29600/11973 15071/29433/11973 +f 15071/29433/11974 15202/29600/11974 15201/29599/11974 15067/29429/11974 +f 15067/29429/11975 15201/29599/11975 15187/29576/11975 15040/29393/11975 +f 14965/29303/11976 15039/29391/11976 15056/29413/11976 14979/29323/11976 +f 14979/29323/11977 15056/29413/11977 15060/29418/11977 14980/29324/11977 +f 14980/29324/11978 15060/29418/11978 15043/29397/11978 14981/29325/11978 +f 14981/29325/11979 15043/29397/11979 15042/29396/11979 14997/29345/11979 +f 14997/29345/11980 15042/29396/11980 15041/29394/11980 14993/29340/11980 +f 14993/29341/11981 15041/29395/11981 15038/29390/11981 14966/29305/11981 +f 15223/29629/11982 15077/29439/11982 15104/29469/11982 15226/29632/11982 +f 15226/29632/11983 15104/29469/11983 15108/29473/11983 15227/29633/11983 +f 15227/29633/11984 15108/29473/11984 15092/29454/11984 15228/29634/11984 +f 15228/29635/11985 15092/29455/11985 15091/29453/11985 15245/29658/11985 +f 15245/29658/11986 15091/29453/11986 15090/29452/11986 15241/29653/11986 +f 15241/29653/11987 15090/29452/11987 15076/29438/11987 15224/29630/11987 +f 15188/29577/11988 15114/29481/11988 15141/29518/11988 15212/29615/11988 +f 15212/29615/11989 15141/29518/11989 15145/29523/11989 15213/29616/11989 +f 15213/29616/11990 15145/29523/11990 15129/29500/11990 15214/29617/11990 +f 15214/29618/11991 15129/29501/11991 15128/29499/11991 15196/29591/11991 +f 15196/29591/11992 15128/29499/11992 15127/29498/11992 15192/29586/11992 +f 15192/29586/11993 15127/29498/11993 15113/29480/11993 15186/29574/11993 +f 15114/29481/11994 14965/29303/11994 14982/29326/11994 15138/29514/11994 +f 15138/29514/11995 14982/29326/11995 14986/29330/11995 15139/29515/11995 +f 15139/29515/11996 14986/29330/11996 14969/29308/11996 15140/29516/11996 +f 15140/29517/11997 14969/29309/11997 14968/29307/11997 15122/29492/11997 +f 15122/29492/11998 14968/29307/11998 14967/29306/11998 15118/29488/11998 +f 15118/29488/11999 14967/29306/11999 14964/29301/11999 15112/29477/11999 +f 15077/29439/12000 15001/29349/12000 15007/29356/12000 15101/29466/12000 +f 15101/29466/12001 15007/29356/12001 15011/29361/12001 15102/29467/12001 +f 15102/29467/12002 15011/29361/12002 15029/29380/12002 15103/29468/12002 +f 15103/29468/12003 15029/29380/12003 15028/29379/12003 15085/29447/12003 +f 15085/29447/12004 15028/29379/12004 15027/29378/12004 15081/29443/12004 +f 15081/29443/12005 15027/29378/12005 15003/29351/12005 15075/29437/12005 +f 15150/29529/11872 15112/29478/11872 14964/29302/11872 15002/29350/11872 +f 15261/29678/12006 15262/29679/12006 15263/29680/12006 15260/29677/12006 +f 15265/29682/12007 15266/29683/12007 15267/29684/12007 15264/29681/12007 +f 15269/29686/12008 15270/29687/12008 15271/29688/12008 15268/29685/12008 +f 15273/29690/12009 15274/29691/12009 15275/29692/12009 15272/29689/12009 +f 15001/29349/11717 15004/29352/11717 15262/29679/11717 15261/29678/11717 +f 15223/29629/11720 15226/29632/11720 15274/29691/11720 15273/29690/11720 +f 15077/29439/11872 15101/29466/11872 15266/29683/11872 15265/29682/11872 +f 15151/29530/11718 15175/29559/11718 15270/29687/11718 15269/29686/11718 +f 15004/29352/12010 15008/29357/12010 15263/29680/12010 15262/29679/12010 +f 15226/29632/12011 15230/29637/12011 15275/29692/12011 15274/29691/12011 +f 15101/29466/12012 15105/29470/12012 15267/29684/12012 15266/29683/12012 +f 15175/29559/12013 15179/29564/12013 15271/29688/12013 15270/29687/12013 +f 15008/29357/12014 15007/29356/12014 15260/29677/12014 15263/29680/12014 +f 15230/29637/12015 15229/29636/12015 15272/29689/12015 15275/29692/12015 +f 15105/29470/12016 15104/29469/12016 15264/29681/12016 15267/29684/12016 +f 15179/29564/12017 15178/29563/12017 15268/29685/12017 15271/29688/12017 +o Top.014 +v -5.642359 0.737263 4.893946 +v -5.642359 0.749833 4.793021 +v -5.748052 0.737263 4.793021 +v -5.642359 0.740515 4.890509 +v -5.642359 0.743549 4.880419 +v -5.642359 0.746151 4.864386 +v -5.669704 0.737263 4.890509 +v -5.670565 0.740645 4.886417 +v -5.670105 0.743568 4.876213 +v -5.669538 0.745849 4.862018 +v -5.695214 0.737263 4.880420 +v -5.695404 0.740582 4.876148 +v -5.692704 0.743253 4.867595 +v -5.690489 0.745176 4.856560 +v -5.703381 0.744520 4.851290 +v -5.669704 0.749405 4.793021 +v -5.695214 0.748149 4.793021 +v -5.717095 0.746151 4.793021 +v -5.642359 0.749405 4.819133 +v -5.670798 0.748896 4.819955 +v -5.695376 0.747625 4.819515 +v -5.714548 0.745857 4.818974 +v -5.642359 0.748149 4.843492 +v -5.670264 0.747617 4.843673 +v -5.692729 0.746551 4.841095 +v -5.708892 0.745177 4.838980 +v -5.744452 0.737263 4.819133 +v -5.733886 0.737263 4.843492 +v -5.717095 0.737263 4.864386 +v -5.744452 0.740515 4.793021 +v -5.740168 0.740617 4.820177 +v -5.729481 0.740563 4.843647 +v -5.714615 0.740495 4.861953 +v -5.733886 0.743549 4.793021 +v -5.729413 0.743572 4.819667 +v -5.720456 0.743250 4.841118 +v -5.708899 0.742987 4.856553 +v -5.600537 0.660944 4.793021 +v -5.642359 0.673515 4.893946 +v -5.748052 0.673515 4.793021 +v -5.600537 0.661372 4.819133 +v -5.642359 0.662629 4.843492 +v -5.642359 0.664626 4.864386 +v -5.669704 0.661372 4.793021 +v -5.670566 0.661882 4.820177 +v -5.670105 0.663153 4.843647 +v -5.669538 0.664921 4.861953 +v -5.695214 0.662629 4.793021 +v -5.695404 0.663161 4.819667 +v -5.692704 0.664226 4.841118 +v -5.690489 0.665601 4.856553 +v -5.703381 0.666257 4.851290 +v -5.669704 0.673515 4.890509 +v -5.695214 0.673515 4.880419 +v -5.717095 0.673515 4.864386 +v -5.642359 0.670263 4.890509 +v -5.670798 0.670160 4.886417 +v -5.695376 0.670215 4.876213 +v -5.714548 0.670282 4.862018 +v -5.642359 0.667229 4.880419 +v -5.670264 0.667206 4.876148 +v -5.692729 0.667527 4.867595 +v -5.708892 0.667790 4.856560 +v -5.744452 0.670263 4.793021 +v -5.733886 0.667229 4.793021 +v -5.717095 0.664626 4.793021 +v -5.744452 0.673515 4.819133 +v -5.740168 0.670133 4.819955 +v -5.729481 0.667209 4.819515 +v -5.714615 0.664929 4.818974 +v -5.733886 0.673515 4.843492 +v -5.729413 0.670196 4.843673 +v -5.720456 0.667524 4.841095 +v -5.708899 0.665602 4.838980 +v -5.748052 0.737263 4.281227 +v -5.642359 0.749833 4.281227 +v -5.642359 0.737263 4.180302 +v -5.744453 0.740515 4.281227 +v -5.733887 0.743549 4.281227 +v -5.717095 0.746151 4.281227 +v -5.744453 0.737263 4.255115 +v -5.740168 0.740645 4.254292 +v -5.729481 0.743568 4.254733 +v -5.714615 0.745849 4.255274 +v -5.733887 0.737263 4.230756 +v -5.729413 0.740582 4.230574 +v -5.720456 0.743253 4.233152 +v -5.708900 0.745176 4.235267 +v -5.703381 0.744520 4.222958 +v -5.642359 0.749405 4.255115 +v -5.642359 0.748149 4.230756 +v -5.642359 0.746151 4.209862 +v -5.669705 0.749405 4.281227 +v -5.670566 0.748896 4.254071 +v -5.670105 0.747625 4.230601 +v -5.669538 0.745857 4.212294 +v -5.695214 0.748149 4.281227 +v -5.695405 0.747617 4.254580 +v -5.692704 0.746551 4.233129 +v -5.690490 0.745177 4.217695 +v -5.669705 0.737263 4.183739 +v -5.695214 0.737263 4.193828 +v -5.717095 0.737263 4.209862 +v -5.642359 0.740515 4.183739 +v -5.670798 0.740617 4.187830 +v -5.695376 0.740563 4.198035 +v -5.714548 0.740495 4.212230 +v -5.642359 0.743549 4.193828 +v -5.670264 0.743572 4.198100 +v -5.692729 0.743250 4.206653 +v -5.708893 0.742987 4.217688 +v -5.748052 0.673515 4.281227 +v -5.642359 0.673515 4.180302 +v -5.600537 0.660944 4.281227 +v -5.744453 0.673515 4.255115 +v -5.733887 0.673515 4.230756 +v -5.717095 0.673515 4.209862 +v -5.744453 0.670263 4.281227 +v -5.740168 0.670160 4.254071 +v -5.729481 0.670215 4.230601 +v -5.714615 0.670282 4.212294 +v -5.733887 0.667229 4.281227 +v -5.729413 0.667206 4.254580 +v -5.720456 0.667527 4.233129 +v -5.708900 0.667790 4.217695 +v -5.703381 0.666257 4.222958 +v -5.642359 0.670263 4.183739 +v -5.642359 0.667229 4.193828 +v -5.642359 0.664626 4.209862 +v -5.669705 0.673515 4.183739 +v -5.670566 0.670133 4.187830 +v -5.670105 0.667209 4.198035 +v -5.669538 0.664929 4.212230 +v -5.695214 0.673515 4.193828 +v -5.695405 0.670196 4.198100 +v -5.692704 0.667524 4.206653 +v -5.690490 0.665602 4.217688 +v -5.669705 0.661372 4.281227 +v -5.695214 0.662629 4.281227 +v -5.717095 0.664626 4.281227 +v -5.600537 0.661372 4.255115 +v -5.670798 0.661882 4.254292 +v -5.695376 0.663153 4.254733 +v -5.714548 0.664921 4.255274 +v -5.642359 0.662629 4.230756 +v -5.670264 0.663161 4.230574 +v -5.692729 0.664226 4.233152 +v -5.708893 0.665601 4.235267 +v -5.106386 0.737263 4.893945 +v -5.000693 0.737263 4.793021 +v -5.106386 0.749833 4.793021 +v -5.079040 0.737263 4.890509 +v -5.053531 0.737263 4.880419 +v -5.031650 0.737263 4.864385 +v -5.106386 0.740515 4.890509 +v -5.077947 0.740617 4.886417 +v -5.053369 0.740563 4.876213 +v -5.034197 0.740495 4.862018 +v -5.106386 0.743549 4.880419 +v -5.078481 0.743572 4.876148 +v -5.056016 0.743250 4.867595 +v -5.039853 0.742987 4.856560 +v -5.045364 0.744520 4.851290 +v -5.004292 0.740515 4.793021 +v -5.014858 0.743549 4.793021 +v -5.031650 0.746151 4.793021 +v -5.004292 0.737263 4.819133 +v -5.008577 0.740645 4.819955 +v -5.019264 0.743568 4.819515 +v -5.034130 0.745849 4.818973 +v -5.014858 0.737263 4.843491 +v -5.019332 0.740582 4.843673 +v -5.028289 0.743253 4.841095 +v -5.039845 0.745176 4.838980 +v -5.106386 0.749405 4.819133 +v -5.106386 0.748149 4.843491 +v -5.106386 0.746151 4.864385 +v -5.079040 0.749405 4.793021 +v -5.078179 0.748896 4.820177 +v -5.078640 0.747625 4.843646 +v -5.079207 0.745857 4.861953 +v -5.053531 0.748149 4.793021 +v -5.053340 0.747617 4.819667 +v -5.056041 0.746551 4.841118 +v -5.058255 0.745177 4.856553 +v -5.000693 0.673515 4.793021 +v -5.106386 0.673515 4.893945 +v -5.148208 0.660944 4.793021 +v -5.004292 0.673515 4.819133 +v -5.014858 0.673515 4.843491 +v -5.031650 0.673515 4.864385 +v -5.004292 0.670263 4.793021 +v -5.008577 0.670160 4.820177 +v -5.019264 0.670215 4.843646 +v -5.034130 0.670282 4.861953 +v -5.014858 0.667229 4.793021 +v -5.019332 0.667206 4.819667 +v -5.028289 0.667527 4.841118 +v -5.039845 0.667790 4.856553 +v -5.045364 0.666257 4.851290 +v -5.106386 0.670263 4.890509 +v -5.106386 0.667229 4.880419 +v -5.106386 0.664626 4.864385 +v -5.079040 0.673515 4.890509 +v -5.078179 0.670133 4.886417 +v -5.078640 0.667209 4.876213 +v -5.079207 0.664929 4.862018 +v -5.053531 0.673515 4.880419 +v -5.053340 0.670196 4.876148 +v -5.056041 0.667524 4.867595 +v -5.058255 0.665602 4.856560 +v -5.079040 0.661372 4.793021 +v -5.053531 0.662629 4.793021 +v -5.031650 0.664626 4.793021 +v -5.148208 0.661372 4.819133 +v -5.077947 0.661882 4.819955 +v -5.053369 0.663153 4.819515 +v -5.034197 0.664921 4.818973 +v -5.106386 0.662629 4.843491 +v -5.078481 0.663161 4.843673 +v -5.056016 0.664226 4.841095 +v -5.039852 0.665601 4.838980 +v -5.000693 0.737263 4.281226 +v -5.106386 0.737263 4.180302 +v -5.106386 0.749833 4.281226 +v -5.004292 0.737263 4.255114 +v -5.014859 0.737263 4.230756 +v -5.031650 0.737263 4.209862 +v -5.004292 0.740515 4.281226 +v -5.008577 0.740617 4.254070 +v -5.019264 0.740563 4.230601 +v -5.034130 0.740495 4.212294 +v -5.014859 0.743549 4.281226 +v -5.019332 0.743572 4.254580 +v -5.028289 0.743250 4.233129 +v -5.039845 0.742987 4.217694 +v -5.045364 0.744520 4.222958 +v -5.106386 0.740515 4.183738 +v -5.106386 0.743549 4.193828 +v -5.106386 0.746151 4.209862 +v -5.079041 0.737263 4.183738 +v -5.078180 0.740645 4.187830 +v -5.078640 0.743568 4.198034 +v -5.079207 0.745849 4.212230 +v -5.053531 0.737263 4.193828 +v -5.053341 0.740582 4.198100 +v -5.056041 0.743253 4.206652 +v -5.058256 0.745176 4.217688 +v -5.079041 0.749405 4.281226 +v -5.053531 0.748149 4.281226 +v -5.031650 0.746151 4.281226 +v -5.106386 0.749405 4.255114 +v -5.077947 0.748896 4.254292 +v -5.053369 0.747625 4.254732 +v -5.034197 0.745857 4.255274 +v -5.106386 0.748149 4.230756 +v -5.078481 0.747617 4.230574 +v -5.056016 0.746551 4.233152 +v -5.039853 0.745177 4.235267 +v -5.148208 0.660944 4.281226 +v -5.106386 0.673515 4.180302 +v -5.000693 0.673515 4.281226 +v -5.148208 0.661372 4.255114 +v -5.106386 0.662629 4.230756 +v -5.106386 0.664626 4.209862 +v -5.079041 0.661372 4.281226 +v -5.078179 0.661882 4.254070 +v -5.078640 0.663153 4.230601 +v -5.079207 0.664921 4.212294 +v -5.053531 0.662629 4.281226 +v -5.053341 0.663161 4.254580 +v -5.056041 0.664226 4.233129 +v -5.058256 0.665601 4.217694 +v -5.045364 0.666257 4.222958 +v -5.079041 0.673515 4.183738 +v -5.053531 0.673515 4.193828 +v -5.031650 0.673515 4.209862 +v -5.106386 0.670263 4.183738 +v -5.077947 0.670160 4.187830 +v -5.053369 0.670215 4.198034 +v -5.034197 0.670282 4.212230 +v -5.106386 0.667229 4.193828 +v -5.078481 0.667206 4.198100 +v -5.056016 0.667527 4.206652 +v -5.039853 0.667790 4.217688 +v -5.004292 0.670263 4.281226 +v -5.014859 0.667229 4.281226 +v -5.031650 0.664626 4.281226 +v -5.004292 0.673515 4.255114 +v -5.008577 0.670133 4.254292 +v -5.019264 0.667209 4.254732 +v -5.034130 0.664929 4.255274 +v -5.014859 0.673515 4.230756 +v -5.019332 0.670196 4.230574 +v -5.028289 0.667524 4.233152 +v -5.039845 0.665602 4.235267 +v -5.669704 -0.015018 4.793021 +v -5.600537 -0.015446 4.793021 +v -5.600537 -0.015018 4.819133 +v -5.670566 -0.014508 4.820177 +v -5.600537 -0.015018 4.255115 +v -5.600537 -0.015446 4.281227 +v -5.669705 -0.015018 4.281227 +v -5.670798 -0.014508 4.254292 +v -5.148208 -0.015018 4.819133 +v -5.148208 -0.015446 4.793021 +v -5.079040 -0.015018 4.793021 +v -5.077947 -0.014508 4.819955 +v -5.079041 -0.015018 4.281226 +v -5.148208 -0.015446 4.281226 +v -5.148208 -0.015018 4.255114 +v -5.078179 -0.014508 4.254070 +vn -0.0000 -0.0444 -0.0000 +vn 0.3737 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.3568 +vn -0.0000 0.0444 -0.0000 +vn -0.3737 -0.0000 -0.0000 +vn -0.0510 0.0061 0.3501 +vn -0.0497 0.0173 0.3254 +vn -0.0466 0.0270 0.2801 +vn -0.1448 0.0060 0.3254 +vn -0.1412 0.0168 0.3016 +vn -0.1339 0.0256 0.2619 +vn -0.2268 0.0056 0.2801 +vn -0.2158 0.0159 0.2617 +vn -0.1981 0.0236 0.2362 +vn -0.0510 0.0436 0.0487 +vn -0.1451 0.0405 0.0474 +vn -0.2268 0.0349 0.0445 +vn -0.0503 0.0405 0.1383 +vn -0.1414 0.0376 0.1348 +vn -0.2156 0.0326 0.1279 +vn -0.0468 0.0349 0.2165 +vn -0.1341 0.0326 0.2061 +vn -0.1980 0.0294 0.1891 +vn -0.3666 0.0061 0.0487 +vn -0.3408 0.0059 0.1385 +vn -0.2933 0.0055 0.2166 +vn -0.3408 0.0172 0.0480 +vn -0.3158 0.0168 0.1350 +vn -0.2742 0.0159 0.2059 +vn -0.2933 0.0270 0.0447 +vn -0.2740 0.0257 0.1280 +vn -0.2474 0.0236 0.1891 +vn -0.0296 -0.0418 0.1189 +vn -0.0466 -0.0349 0.2166 +vn -0.1448 -0.0405 0.0480 +vn -0.1412 -0.0376 0.1350 +vn -0.1339 -0.0326 0.2059 +vn -0.2268 -0.0349 0.0447 +vn -0.2158 -0.0326 0.1280 +vn -0.1981 -0.0294 0.1891 +vn -0.0510 -0.0061 0.3501 +vn -0.1451 -0.0059 0.3254 +vn -0.2268 -0.0055 0.2801 +vn -0.0503 -0.0172 0.3254 +vn -0.1414 -0.0168 0.3016 +vn -0.2156 -0.0159 0.2619 +vn -0.0468 -0.0270 0.2801 +vn -0.1341 -0.0257 0.2617 +vn -0.1980 -0.0236 0.2362 +vn -0.3666 -0.0061 0.0487 +vn -0.3408 -0.0173 0.0474 +vn -0.2933 -0.0270 0.0445 +vn -0.3408 -0.0060 0.1383 +vn -0.3158 -0.0168 0.1348 +vn -0.2742 -0.0256 0.1279 +vn -0.2933 -0.0056 0.2165 +vn -0.2740 -0.0159 0.2061 +vn -0.2474 -0.0236 0.1891 +vn -0.3666 0.0061 -0.0487 +vn -0.3408 0.0173 -0.0474 +vn -0.2933 0.0270 -0.0445 +vn -0.3408 0.0060 -0.1383 +vn -0.3158 0.0168 -0.1348 +vn -0.2742 0.0256 -0.1279 +vn -0.2933 0.0056 -0.2165 +vn -0.2740 0.0159 -0.2061 +vn -0.2474 0.0236 -0.1891 +vn -0.0510 0.0436 -0.0487 +vn -0.0497 0.0405 -0.1385 +vn -0.0466 0.0349 -0.2166 +vn -0.1448 0.0405 -0.0480 +vn -0.1412 0.0376 -0.1350 +vn -0.1339 0.0326 -0.2059 +vn -0.2268 0.0349 -0.0447 +vn -0.2158 0.0326 -0.1280 +vn -0.1981 0.0294 -0.1891 +vn -0.0510 0.0061 -0.3501 +vn -0.1451 0.0059 -0.3254 +vn -0.2268 0.0055 -0.2801 +vn -0.0503 0.0172 -0.3254 +vn -0.1414 0.0168 -0.3016 +vn -0.2156 0.0159 -0.2619 +vn -0.0468 0.0270 -0.2801 +vn -0.1341 0.0257 -0.2617 +vn -0.1980 0.0236 -0.2362 +vn -0.3666 -0.0061 -0.0487 +vn -0.3408 -0.0059 -0.1385 +vn -0.2933 -0.0055 -0.2166 +vn -0.3408 -0.0172 -0.0480 +vn -0.3158 -0.0168 -0.1350 +vn -0.2742 -0.0159 -0.2059 +vn -0.2933 -0.0270 -0.0447 +vn -0.2740 -0.0257 -0.1280 +vn -0.2474 -0.0236 -0.1891 +vn -0.0510 -0.0061 -0.3501 +vn -0.0497 -0.0173 -0.3254 +vn -0.0466 -0.0270 -0.2801 +vn -0.1448 -0.0060 -0.3254 +vn -0.1412 -0.0168 -0.3016 +vn -0.1339 -0.0256 -0.2619 +vn -0.2268 -0.0056 -0.2801 +vn -0.2158 -0.0159 -0.2617 +vn -0.1981 -0.0236 -0.2362 +vn -0.1451 -0.0405 -0.0474 +vn -0.2268 -0.0349 -0.0445 +vn -0.0300 -0.0418 -0.1185 +vn -0.1414 -0.0376 -0.1348 +vn -0.2156 -0.0326 -0.1279 +vn -0.0468 -0.0349 -0.2165 +vn -0.1341 -0.0326 -0.2061 +vn -0.1980 -0.0294 -0.1891 +vn 0.0510 0.0061 0.3501 +vn 0.1451 0.0059 0.3254 +vn 0.2268 0.0055 0.2801 +vn 0.0503 0.0172 0.3254 +vn 0.1414 0.0168 0.3016 +vn 0.2156 0.0159 0.2619 +vn 0.0468 0.0270 0.2801 +vn 0.1341 0.0257 0.2617 +vn 0.1980 0.0236 0.2362 +vn 0.3666 0.0061 0.0487 +vn 0.3408 0.0173 0.0474 +vn 0.2933 0.0270 0.0445 +vn 0.3408 0.0060 0.1383 +vn 0.3158 0.0168 0.1348 +vn 0.2742 0.0256 0.1279 +vn 0.2933 0.0056 0.2165 +vn 0.2740 0.0159 0.2061 +vn 0.2474 0.0236 0.1891 +vn 0.0510 0.0436 0.0487 +vn 0.0497 0.0405 0.1385 +vn 0.0466 0.0349 0.2166 +vn 0.1448 0.0405 0.0480 +vn 0.1412 0.0376 0.1350 +vn 0.1339 0.0326 0.2059 +vn 0.2268 0.0349 0.0447 +vn 0.2158 0.0326 0.1280 +vn 0.1981 0.0294 0.1891 +vn 0.3666 -0.0061 0.0487 +vn 0.3408 -0.0059 0.1385 +vn 0.2933 -0.0055 0.2166 +vn 0.3408 -0.0172 0.0480 +vn 0.3158 -0.0168 0.1350 +vn 0.2742 -0.0159 0.2059 +vn 0.2933 -0.0270 0.0447 +vn 0.2740 -0.0257 0.1280 +vn 0.2474 -0.0236 0.1891 +vn 0.0510 -0.0061 0.3501 +vn 0.0497 -0.0173 0.3254 +vn 0.0466 -0.0270 0.2801 +vn 0.1448 -0.0060 0.3254 +vn 0.1412 -0.0168 0.3016 +vn 0.1339 -0.0256 0.2619 +vn 0.2268 -0.0056 0.2801 +vn 0.2158 -0.0159 0.2617 +vn 0.1981 -0.0236 0.2362 +vn -0.0000 -0.0000 0.3568 +vn 0.1451 -0.0405 0.0474 +vn 0.2268 -0.0349 0.0445 +vn 0.0300 -0.0418 0.1185 +vn 0.1414 -0.0376 0.1348 +vn 0.2156 -0.0326 0.1279 +vn 0.0468 -0.0349 0.2165 +vn 0.1341 -0.0326 0.2061 +vn 0.1980 -0.0294 0.1891 +vn 0.3666 0.0061 -0.0487 +vn 0.3408 0.0059 -0.1385 +vn 0.2933 0.0055 -0.2166 +vn 0.3408 0.0172 -0.0480 +vn 0.3158 0.0168 -0.1350 +vn 0.2742 0.0159 -0.2059 +vn 0.2933 0.0270 -0.0447 +vn 0.2740 0.0257 -0.1280 +vn 0.2474 0.0236 -0.1891 +vn 0.0510 0.0061 -0.3501 +vn 0.0497 0.0173 -0.3254 +vn 0.0466 0.0270 -0.2801 +vn 0.1448 0.0060 -0.3254 +vn 0.1412 0.0168 -0.3016 +vn 0.1339 0.0256 -0.2619 +vn 0.2268 0.0056 -0.2801 +vn 0.2158 0.0159 -0.2617 +vn 0.1981 0.0236 -0.2362 +vn 0.0510 0.0436 -0.0487 +vn 0.1451 0.0405 -0.0474 +vn 0.2268 0.0349 -0.0445 +vn 0.0503 0.0405 -0.1383 +vn 0.1414 0.0376 -0.1348 +vn 0.2156 0.0326 -0.1279 +vn 0.0468 0.0349 -0.2165 +vn 0.1341 0.0326 -0.2061 +vn 0.1980 0.0294 -0.1891 +vn 0.0296 -0.0418 -0.1189 +vn 0.0466 -0.0349 -0.2166 +vn 0.1448 -0.0405 -0.0480 +vn 0.1412 -0.0376 -0.1350 +vn 0.1339 -0.0326 -0.2059 +vn 0.2268 -0.0349 -0.0447 +vn 0.2158 -0.0326 -0.1280 +vn 0.1981 -0.0294 -0.1891 +vn 0.0510 -0.0061 -0.3501 +vn 0.1451 -0.0059 -0.3254 +vn 0.2268 -0.0055 -0.2801 +vn 0.0503 -0.0172 -0.3254 +vn 0.1414 -0.0168 -0.3016 +vn 0.2156 -0.0159 -0.2619 +vn 0.0468 -0.0270 -0.2801 +vn 0.1341 -0.0257 -0.2617 +vn 0.1980 -0.0236 -0.2362 +vn 0.3666 -0.0061 -0.0487 +vn 0.3408 -0.0173 -0.0474 +vn 0.2933 -0.0270 -0.0445 +vn 0.3408 -0.0060 -0.1383 +vn 0.3158 -0.0168 -0.1348 +vn 0.2742 -0.0256 -0.1279 +vn 0.2933 -0.0056 -0.2165 +vn 0.2740 -0.0159 -0.2061 +vn 0.2474 -0.0236 -0.1891 +vn 0.0194 -0.0444 -0.0000 +vn 0.1430 -0.0411 -0.0000 +vn 0.2275 -0.0353 -0.0000 +vn 0.2964 -0.0271 -0.0000 +vn 0.3452 -0.0170 -0.0000 +vn 0.3705 -0.0058 -0.0000 +vn -0.0000 -0.0441 0.0466 +vn -0.0000 -0.0411 0.1366 +vn -0.0000 -0.0353 0.2172 +vn -0.0000 -0.0271 0.2831 +vn -0.0000 -0.0170 0.3297 +vn -0.0000 -0.0058 0.3538 +vn -0.3705 -0.0000 0.0466 +vn -0.3452 -0.0000 0.1365 +vn -0.2964 -0.0000 0.2172 +vn -0.2275 -0.0000 0.2831 +vn -0.1430 -0.0000 0.3297 +vn -0.0488 -0.0000 0.3538 +vn 0.0488 -0.0000 -0.3538 +vn 0.1430 -0.0000 -0.3297 +vn 0.2275 -0.0000 -0.2831 +vn 0.2964 -0.0000 -0.2172 +vn 0.3452 -0.0000 -0.1365 +vn 0.3705 -0.0000 -0.0466 +vn -0.0488 -0.0000 -0.3538 +vn -0.1430 -0.0000 -0.3297 +vn -0.2275 -0.0000 -0.2831 +vn -0.2964 -0.0000 -0.2172 +vn -0.3452 -0.0000 -0.1365 +vn -0.3705 -0.0000 -0.0466 +vn 0.0488 -0.0000 0.3538 +vn 0.1430 -0.0000 0.3297 +vn 0.2275 -0.0000 0.2831 +vn 0.2964 -0.0000 0.2172 +vn 0.3452 -0.0000 0.1365 +vn 0.3705 -0.0000 0.0466 +vn -0.0000 0.0441 -0.0466 +vn -0.0000 0.0411 -0.1365 +vn -0.0000 0.0353 -0.2172 +vn -0.0000 0.0271 -0.2831 +vn -0.0000 0.0170 -0.3297 +vn -0.0000 0.0058 -0.3538 +vn -0.0488 0.0441 -0.0000 +vn -0.1430 0.0411 -0.0000 +vn -0.2275 0.0353 -0.0000 +vn -0.2964 0.0271 -0.0000 +vn -0.3452 0.0170 -0.0000 +vn -0.3705 0.0058 -0.0000 +vn -0.0000 -0.0441 -0.0466 +vn -0.0000 -0.0411 -0.1366 +vn -0.0000 -0.0353 -0.2172 +vn -0.0000 -0.0271 -0.2831 +vn -0.0000 -0.0170 -0.3297 +vn -0.0000 -0.0058 -0.3538 +vn 0.0488 0.0441 -0.0000 +vn 0.1430 0.0411 -0.0000 +vn 0.2275 0.0353 -0.0000 +vn 0.2964 0.0271 -0.0000 +vn 0.3452 0.0170 -0.0000 +vn 0.3705 0.0058 -0.0000 +vn -0.0000 0.0441 0.0466 +vn -0.0000 0.0411 0.1365 +vn -0.0000 0.0353 0.2172 +vn -0.0000 0.0271 0.2831 +vn -0.0000 0.0170 0.3297 +vn -0.0000 0.0058 0.3538 +vn -0.0194 -0.0444 -0.0000 +vn -0.1430 -0.0411 -0.0000 +vn -0.2275 -0.0353 -0.0000 +vn -0.2964 -0.0271 -0.0000 +vn -0.3452 -0.0170 -0.0000 +vn -0.3705 -0.0058 -0.0000 +vn -0.0205 -0.0439 0.0496 +vn -0.0206 -0.0439 -0.0497 +vn 0.0206 -0.0439 0.0497 +vn 0.0205 -0.0439 -0.0496 +vn 0.0058 -0.0000 0.3568 +vn -0.0058 -0.0000 -0.3568 +vn -0.3734 -0.0000 0.0138 +vn 0.3734 -0.0000 -0.0138 +vn -0.3735 -0.0000 -0.0108 +vn 0.3735 -0.0000 0.0108 +vn 0.0046 -0.0000 -0.3568 +vn -0.0046 -0.0000 0.3568 +vt 0.579948 0.337500 +vt 0.840885 0.798611 +vt 0.578906 0.336574 +vt 0.579948 0.336574 +vt 0.840885 0.816204 +vt 0.579948 0.337500 +vt 0.579948 0.337500 +vt 0.578906 0.336574 +vt 0.579427 0.337500 +vt 0.579948 0.337500 +vt 0.840885 0.800463 +vt 0.579948 0.337500 +vt 0.579948 0.337500 +vt 0.579427 0.337500 +vt 0.578906 0.336574 +vt 0.579948 0.337500 +vt 0.840885 0.803241 +vt 0.579948 0.337500 +vt 0.579948 0.337500 +vt 0.579427 0.337500 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.579948 0.336574 +vt 0.840885 0.814352 +vt 0.579948 0.336574 +vt 0.840885 0.811574 +vt 0.579948 0.336574 +vt 0.840885 0.807870 +vt 0.579948 0.336574 +vt 0.842969 0.816204 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.776823 0.816204 +vt 0.794531 0.798611 +vt 0.794531 0.816204 +vt 0.776823 0.814352 +vt 0.776823 0.811574 +vt 0.776823 0.807870 +vt 0.785677 0.798611 +vt 0.778906 0.816204 +vt 0.779427 0.813426 +vt 0.779427 0.811574 +vt 0.778906 0.807870 +vt 0.785677 0.800463 +vt 0.780990 0.816204 +vt 0.780990 0.813426 +vt 0.780990 0.812500 +vt 0.780990 0.807870 +vt 0.785677 0.802315 +vt 0.785677 0.808796 +vt 0.794531 0.800463 +vt 0.794531 0.803241 +vt 0.794531 0.807870 +vt 0.792448 0.798611 +vt 0.792448 0.801389 +vt 0.792448 0.803241 +vt 0.792448 0.807870 +vt 0.790365 0.798611 +vt 0.790365 0.801389 +vt 0.790365 0.802315 +vt 0.790365 0.807870 +vt 0.792448 0.816204 +vt 0.790365 0.816204 +vt 0.785677 0.816204 +vt 0.794531 0.814352 +vt 0.792448 0.813426 +vt 0.790365 0.813426 +vt 0.785677 0.814352 +vt 0.794531 0.811574 +vt 0.792448 0.811574 +vt 0.790365 0.812500 +vt 0.785677 0.812500 +vt 0.579948 0.333796 +vt 0.840885 0.862500 +vt 0.578906 0.333796 +vt 0.840885 0.880093 +vt 0.579948 0.331944 +vt 0.579948 0.333796 +vt 0.842969 0.862500 +vt 0.579948 0.333796 +vt 0.579427 0.333796 +vt 0.579948 0.332870 +vt 0.840885 0.864352 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.579427 0.332870 +vt 0.579948 0.332870 +vt 0.840885 0.867130 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.579427 0.332870 +vt 0.579427 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.579427 0.331944 +vt 0.578906 0.333796 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.579427 0.331944 +vt 0.578906 0.333796 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.579427 0.332870 +vt 0.579948 0.331944 +vt 0.840885 0.877315 +vt 0.579948 0.332870 +vt 0.840885 0.875463 +vt 0.579948 0.332870 +vt 0.840885 0.870833 +vt 0.579948 0.331944 +vt 0.579948 0.331944 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.579948 0.331944 +vt 0.579948 0.331944 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.794531 0.862500 +vt 0.794531 0.880093 +vt 0.776823 0.862500 +vt 0.794531 0.864352 +vt 0.794531 0.867130 +vt 0.794531 0.870833 +vt 0.792448 0.862500 +vt 0.792448 0.864352 +vt 0.792448 0.867130 +vt 0.792448 0.870833 +vt 0.790365 0.862500 +vt 0.790365 0.864352 +vt 0.790365 0.866204 +vt 0.790365 0.870833 +vt 0.787240 0.870833 +vt 0.792448 0.880093 +vt 0.790365 0.880093 +vt 0.776823 0.870833 +vt 0.785677 0.880093 +vt 0.794531 0.877315 +vt 0.792448 0.877315 +vt 0.790365 0.877315 +vt 0.785677 0.877315 +vt 0.778906 0.870833 +vt 0.794531 0.875463 +vt 0.792448 0.875463 +vt 0.790365 0.875463 +vt 0.785677 0.876389 +vt 0.780990 0.870833 +vt 0.778906 0.862500 +vt 0.780990 0.862500 +vt 0.785677 0.862500 +vt 0.776823 0.864352 +vt 0.779427 0.864352 +vt 0.780990 0.864352 +vt 0.785677 0.864352 +vt 0.776823 0.867130 +vt 0.779427 0.867130 +vt 0.780990 0.866204 +vt 0.785677 0.866204 +vt 0.579948 0.340278 +vt 0.840885 0.752315 +vt 0.840885 0.734722 +vt 0.579948 0.342130 +vt 0.575781 0.336574 +vt 0.579948 0.341204 +vt 0.840885 0.750463 +vt 0.579948 0.341204 +vt 0.840885 0.747685 +vt 0.579948 0.341204 +vt 0.840885 0.743981 +vt 0.579948 0.340278 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579948 0.340278 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579427 0.341204 +vt 0.575260 0.336574 +vt 0.579948 0.342130 +vt 0.579948 0.342130 +vt 0.575260 0.336574 +vt 0.579427 0.342130 +vt 0.579948 0.342130 +vt 0.840885 0.737500 +vt 0.579948 0.342130 +vt 0.579948 0.342130 +vt 0.579427 0.342130 +vt 0.575260 0.336574 +vt 0.579948 0.341204 +vt 0.840885 0.739352 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579427 0.341204 +vt 0.575260 0.336574 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.579427 0.340278 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.579427 0.341204 +vt 0.575781 0.336574 +vt 0.575260 0.336574 +vt 0.575260 0.336574 +vt 0.575260 0.336574 +vt 0.579427 0.341204 +vt 0.575260 0.336574 +vt 0.794531 0.734722 +vt 0.794531 0.752315 +vt 0.730990 0.816204 +vt 0.794531 0.737500 +vt 0.794531 0.739352 +vt 0.794531 0.743981 +vt 0.792448 0.734722 +vt 0.792448 0.737500 +vt 0.792448 0.739352 +vt 0.792448 0.743981 +vt 0.790365 0.734722 +vt 0.790365 0.737500 +vt 0.790365 0.739352 +vt 0.790365 0.743981 +vt 0.789323 0.743981 +vt 0.785677 0.746759 +vt 0.722135 0.810648 +vt 0.792448 0.752315 +vt 0.790365 0.752315 +vt 0.730990 0.807870 +vt 0.785677 0.752315 +vt 0.794531 0.750463 +vt 0.792448 0.750463 +vt 0.790365 0.750463 +vt 0.785677 0.750463 +vt 0.728906 0.807870 +vt 0.794531 0.747685 +vt 0.792448 0.747685 +vt 0.790365 0.748611 +vt 0.785677 0.748611 +vt 0.726823 0.807870 +vt 0.728906 0.816204 +vt 0.726302 0.816204 +vt 0.722135 0.816204 +vt 0.785677 0.734722 +vt 0.730990 0.814352 +vt 0.728385 0.813426 +vt 0.726302 0.813426 +vt 0.785677 0.737500 +vt 0.722135 0.814352 +vt 0.730990 0.811574 +vt 0.728906 0.811574 +vt 0.726302 0.812500 +vt 0.785677 0.738426 +vt 0.722135 0.812500 +vt 0.840885 0.688426 +vt 0.579948 0.344907 +vt 0.840885 0.926389 +vt 0.579948 0.329167 +vt 0.575781 0.333796 +vt 0.579948 0.344907 +vt 0.840885 0.686574 +vt 0.579948 0.344907 +vt 0.840885 0.684722 +vt 0.579948 0.345833 +vt 0.579948 0.328241 +vt 0.840885 0.934722 +vt 0.840885 0.680093 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.345833 +vt 0.579948 0.328241 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.345833 +vt 0.579948 0.328241 +vt 0.579427 0.345833 +vt 0.579427 0.329167 +vt 0.575260 0.332870 +vt 0.579948 0.329167 +vt 0.579948 0.329167 +vt 0.575781 0.332870 +vt 0.579427 0.329167 +vt 0.579948 0.329167 +vt 0.840885 0.928241 +vt 0.579948 0.329167 +vt 0.579948 0.329167 +vt 0.579427 0.329167 +vt 0.575781 0.332870 +vt 0.579948 0.329167 +vt 0.840885 0.930093 +vt 0.579948 0.329167 +vt 0.579948 0.329167 +vt 0.579427 0.329167 +vt 0.575260 0.332870 +vt 0.575781 0.333796 +vt 0.575260 0.333796 +vt 0.575260 0.333796 +vt 0.579427 0.344907 +vt 0.575781 0.332870 +vt 0.575781 0.332870 +vt 0.575260 0.332870 +vt 0.579427 0.344907 +vt 0.575260 0.332870 +vt 0.575781 0.332870 +vt 0.575781 0.332870 +vt 0.575260 0.332870 +vt 0.579427 0.344907 +vt 0.575260 0.332870 +vt 0.730990 0.862500 +vt 0.794531 0.926389 +vt 0.794531 0.688426 +vt 0.730990 0.864352 +vt 0.730990 0.867130 +vt 0.730990 0.870833 +vt 0.785677 0.926389 +vt 0.728906 0.862500 +vt 0.728906 0.864352 +vt 0.728906 0.867130 +vt 0.728906 0.870833 +vt 0.785677 0.928241 +vt 0.726302 0.862500 +vt 0.726302 0.864352 +vt 0.726302 0.866204 +vt 0.726823 0.870833 +vt 0.785677 0.930093 +vt 0.725781 0.870833 +vt 0.789323 0.934722 +vt 0.785677 0.683796 +vt 0.794531 0.928241 +vt 0.794531 0.930093 +vt 0.794531 0.934722 +vt 0.794531 0.680093 +vt 0.792448 0.926389 +vt 0.792448 0.928241 +vt 0.792448 0.930093 +vt 0.792448 0.934722 +vt 0.792448 0.680093 +vt 0.790365 0.926389 +vt 0.790365 0.928241 +vt 0.790365 0.930093 +vt 0.790365 0.934722 +vt 0.790365 0.680093 +vt 0.792448 0.688426 +vt 0.790365 0.688426 +vt 0.722135 0.862500 +vt 0.785677 0.688426 +vt 0.794531 0.686574 +vt 0.792448 0.686574 +vt 0.790365 0.686574 +vt 0.722135 0.864352 +vt 0.785677 0.686574 +vt 0.794531 0.684722 +vt 0.792448 0.684722 +vt 0.790365 0.684722 +vt 0.722135 0.866204 +vt 0.785677 0.684722 +vt 0.778906 0.816204 +vt 0.776823 0.816204 +vt 0.776823 0.814352 +vt 0.779427 0.813426 +vt 0.776823 0.864352 +vt 0.776823 0.862500 +vt 0.778906 0.862500 +vt 0.779427 0.864352 +vt 0.730990 0.814352 +vt 0.730990 0.816204 +vt 0.728906 0.816204 +vt 0.728385 0.813426 +vt 0.728906 0.862500 +vt 0.730990 0.862500 +vt 0.730990 0.864352 +vt 0.728906 0.864352 +s 0 +usemtl CabnetDoors +f 15463/29922/12018 15313/29741/12018 15389/29831/12018 15535/30021/12018 +f 15537/30023/12019 15498/29965/12019 15425/29871/12019 15461/29920/12019 +f 15388/29830/12020 15352/29784/12020 15499/29967/12020 15536/30022/12020 +f 15277/29695/12021 15426/29873/12021 15500/29969/12021 15351/29783/12021 +f 15315/29743/12022 15278/29697/12022 15350/29782/12022 15387/29829/12022 +f 15276/29693/12023 15279/29698/12023 15283/29704/12023 15282/29702/12023 +f 15279/29698/12024 15280/29699/12024 15284/29705/12024 15283/29704/12024 +f 15280/29699/12025 15281/29701/12025 15285/29706/12025 15284/29705/12025 +f 15282/29702/12026 15283/29704/12026 15287/29710/12026 15286/29708/12026 +f 15283/29704/12027 15284/29705/12027 15288/29711/12027 15287/29710/12027 +f 15284/29705/12028 15285/29706/12028 15289/29712/12028 15288/29711/12028 +f 15286/29708/12029 15287/29710/12029 15308/29736/12029 15304/29730/12029 +f 15287/29710/12030 15288/29711/12030 15312/29740/12030 15308/29736/12030 +f 15288/29711/12031 15289/29712/12031 15290/29714/12031 15312/29740/12031 +f 15277/29695/12032 15291/29715/12032 15295/29719/12032 15294/29718/12032 +f 15291/29715/12033 15292/29716/12033 15296/29720/12033 15295/29719/12033 +f 15292/29716/12034 15293/29717/12034 15297/29721/12034 15296/29720/12034 +f 15294/29718/12035 15295/29719/12035 15299/29723/12035 15298/29722/12035 +f 15295/29719/12036 15296/29720/12036 15300/29724/12036 15299/29723/12036 +f 15296/29720/12037 15297/29721/12037 15301/29725/12037 15300/29724/12037 +f 15298/29722/12038 15299/29723/12038 15285/29707/12038 15281/29700/12038 +f 15299/29723/12039 15300/29724/12039 15289/29713/12039 15285/29707/12039 +f 15300/29724/12040 15301/29725/12040 15290/29714/12040 15289/29713/12040 +f 15278/29696/12041 15302/29726/12041 15306/29734/12041 15305/29732/12041 +f 15302/29726/12042 15303/29728/12042 15307/29735/12042 15306/29734/12042 +f 15303/29728/12043 15304/29730/12043 15308/29736/12043 15307/29735/12043 +f 15305/29732/12044 15306/29734/12044 15310/29738/12044 15309/29737/12044 +f 15306/29734/12045 15307/29735/12045 15311/29739/12045 15310/29738/12045 +f 15307/29735/12046 15308/29736/12046 15312/29740/12046 15311/29739/12046 +f 15309/29737/12047 15310/29738/12047 15297/29721/12047 15293/29717/12047 +f 15310/29738/12048 15311/29739/12048 15301/29725/12048 15297/29721/12048 +f 15311/29739/12049 15312/29740/12049 15290/29714/12049 15301/29725/12049 +f 15490/29955/12022 15463/29922/12022 15581/30078/12022 15580/30077/12022 +f 15316/29744/12050 15317/29745/12050 15321/29750/12050 15320/29749/12050 +f 15317/29745/12051 15318/29746/12051 15322/29751/12051 15321/29750/12051 +f 15319/29748/12052 15320/29749/12052 15324/29754/12052 15323/29753/12052 +f 15320/29749/12053 15321/29750/12053 15325/29755/12053 15324/29754/12053 +f 15321/29750/12054 15322/29751/12054 15326/29756/12054 15325/29755/12054 +f 15323/29753/12055 15324/29754/12055 15345/29776/12055 15341/29772/12055 +f 15324/29754/12056 15325/29755/12056 15349/29780/12056 15345/29776/12056 +f 15325/29755/12057 15326/29756/12057 15327/29758/12057 15349/29780/12057 +f 15314/29742/12058 15328/29759/12058 15332/29763/12058 15331/29762/12058 +f 15328/29759/12059 15329/29760/12059 15333/29764/12059 15332/29763/12059 +f 15329/29760/12060 15330/29761/12060 15334/29765/12060 15333/29764/12060 +f 15331/29762/12061 15332/29763/12061 15336/29767/12061 15335/29766/12061 +f 15332/29763/12062 15333/29764/12062 15337/29768/12062 15336/29767/12062 +f 15333/29764/12063 15334/29765/12063 15338/29769/12063 15337/29768/12063 +f 15335/29766/12064 15336/29767/12064 15322/29752/12064 15318/29747/12064 +f 15336/29767/12065 15337/29768/12065 15326/29757/12065 15322/29752/12065 +f 15337/29768/12066 15338/29769/12066 15327/29758/12066 15326/29757/12066 +f 15315/29743/12067 15339/29770/12067 15343/29774/12067 15342/29773/12067 +f 15339/29770/12068 15340/29771/12068 15344/29775/12068 15343/29774/12068 +f 15340/29771/12069 15341/29772/12069 15345/29776/12069 15344/29775/12069 +f 15342/29773/12070 15343/29774/12070 15347/29778/12070 15346/29777/12070 +f 15343/29774/12071 15344/29775/12071 15348/29779/12071 15347/29778/12071 +f 15344/29775/12072 15345/29776/12072 15349/29780/12072 15348/29779/12072 +f 15346/29777/12073 15347/29778/12073 15334/29765/12073 15330/29761/12073 +f 15347/29778/12074 15348/29779/12074 15338/29769/12074 15334/29765/12074 +f 15348/29779/12075 15349/29780/12075 15327/29758/12075 15338/29769/12075 +f 15350/29781/12076 15353/29786/12076 15357/29792/12076 15356/29790/12076 +f 15353/29786/12077 15354/29788/12077 15358/29793/12077 15357/29792/12077 +f 15354/29788/12078 15355/29789/12078 15359/29794/12078 15358/29793/12078 +f 15356/29790/12079 15357/29792/12079 15361/29797/12079 15360/29795/12079 +f 15357/29792/12080 15358/29793/12080 15362/29798/12080 15361/29797/12080 +f 15358/29793/12081 15359/29794/12081 15363/29799/12081 15362/29798/12081 +f 15360/29795/12082 15361/29797/12082 15382/29824/12082 15378/29819/12082 +f 15361/29797/12083 15362/29798/12083 15386/29828/12083 15382/29824/12083 +f 15362/29798/12084 15363/29799/12084 15364/29800/12084 15386/29828/12084 +f 15351/29783/12085 15365/29801/12085 15369/29806/12085 15368/29805/12085 +f 15365/29801/12086 15366/29802/12086 15370/29807/12086 15369/29806/12086 +f 15366/29802/12087 15367/29803/12087 15371/29808/12087 15370/29807/12087 +f 15368/29805/12088 15369/29806/12088 15373/29811/12088 15372/29810/12088 +f 15369/29806/12089 15370/29807/12089 15374/29812/12089 15373/29811/12089 +f 15370/29807/12090 15371/29808/12090 15375/29813/12090 15374/29812/12090 +f 15372/29810/12091 15373/29811/12091 15359/29794/12091 15355/29789/12091 +f 15373/29811/12092 15374/29812/12092 15363/29799/12092 15359/29794/12092 +f 15374/29812/12093 15375/29813/12093 15364/29800/12093 15363/29799/12093 +f 15352/29785/12094 15376/29815/12094 15380/29822/12094 15379/29821/12094 +f 15376/29815/12095 15377/29817/12095 15381/29823/12095 15380/29822/12095 +f 15377/29817/12096 15378/29819/12096 15382/29824/12096 15381/29823/12096 +f 15379/29821/12097 15380/29822/12097 15384/29826/12097 15383/29825/12097 +f 15380/29822/12098 15381/29823/12098 15385/29827/12098 15384/29826/12098 +f 15381/29823/12099 15382/29824/12099 15386/29828/12099 15385/29827/12099 +f 15383/29825/12100 15384/29826/12100 15371/29809/12100 15367/29804/12100 +f 15384/29826/12101 15385/29827/12101 15375/29814/12101 15371/29809/12101 +f 15385/29827/12102 15386/29828/12102 15364/29800/12102 15375/29814/12102 +f 15387/29829/12103 15390/29832/12103 15394/29836/12103 15393/29835/12103 +f 15390/29832/12104 15391/29833/12104 15395/29837/12104 15394/29836/12104 +f 15391/29833/12105 15392/29834/12105 15396/29838/12105 15395/29837/12105 +f 15393/29835/12106 15394/29836/12106 15398/29840/12106 15397/29839/12106 +f 15394/29836/12107 15395/29837/12107 15399/29841/12107 15398/29840/12107 +f 15395/29837/12108 15396/29838/12108 15400/29842/12108 15399/29841/12108 +f 15397/29839/12109 15398/29840/12109 15419/29864/12109 15415/29860/12109 +f 15398/29840/12110 15399/29841/12110 15423/29868/12110 15419/29864/12110 +f 15399/29841/12111 15400/29842/12111 15401/29843/12111 15423/29868/12111 +f 15388/29830/12112 15402/29844/12112 15406/29849/12112 15405/29848/12112 +f 15402/29844/12113 15403/29845/12113 15407/29850/12113 15406/29849/12113 +f 15403/29845/12114 15404/29847/12114 15408/29851/12114 15407/29850/12114 +f 15405/29848/12115 15406/29849/12115 15410/29854/12115 15409/29853/12115 +f 15406/29849/12116 15407/29850/12116 15411/29855/12116 15410/29854/12116 +f 15407/29850/12117 15408/29851/12117 15412/29856/12117 15411/29855/12117 +f 15409/29853/12118 15410/29854/12118 15396/29838/12118 15392/29834/12118 +f 15410/29854/12119 15411/29855/12119 15400/29842/12119 15396/29838/12119 +f 15411/29855/12120 15412/29856/12120 15401/29843/12120 15400/29842/12120 +f 15416/29861/12019 15389/29831/12019 15577/30074/12019 15576/30073/12019 +f 15413/29858/12121 15414/29859/12121 15418/29863/12121 15417/29862/12121 +f 15414/29859/12122 15415/29860/12122 15419/29864/12122 15418/29863/12122 +f 15416/29861/12123 15417/29862/12123 15421/29866/12123 15420/29865/12123 +f 15417/29862/12124 15418/29863/12124 15422/29867/12124 15421/29866/12124 +f 15418/29863/12125 15419/29864/12125 15423/29868/12125 15422/29867/12125 +f 15420/29865/12126 15421/29866/12126 15408/29852/12126 15404/29846/12126 +f 15421/29866/12127 15422/29867/12127 15412/29857/12127 15408/29852/12127 +f 15422/29867/12128 15423/29868/12128 15401/29843/12128 15412/29857/12128 +f 15424/29869/12129 15427/29874/12129 15431/29881/12129 15430/29880/12129 +f 15427/29874/12130 15428/29876/12130 15432/29882/12130 15431/29881/12130 +f 15428/29876/12131 15429/29878/12131 15433/29883/12131 15432/29882/12131 +f 15430/29880/12132 15431/29881/12132 15435/29885/12132 15434/29884/12132 +f 15431/29881/12133 15432/29882/12133 15436/29886/12133 15435/29885/12133 +f 15432/29882/12134 15433/29883/12134 15437/29887/12134 15436/29886/12134 +f 15434/29884/12135 15435/29885/12135 15456/29913/12135 15452/29909/12135 +f 15435/29885/12136 15436/29886/12136 15460/29918/12136 15456/29913/12136 +f 15436/29886/12137 15437/29887/12137 15438/29888/12137 15460/29918/12137 +f 15425/29872/12138 15439/29890/12138 15443/29896/12138 15442/29894/12138 +f 15439/29890/12139 15440/29891/12139 15444/29897/12139 15443/29896/12139 +f 15440/29891/12140 15441/29893/12140 15445/29898/12140 15444/29897/12140 +f 15442/29894/12141 15443/29896/12141 15447/29902/12141 15446/29900/12141 +f 15443/29896/12142 15444/29897/12142 15448/29903/12142 15447/29902/12142 +f 15444/29897/12143 15445/29898/12143 15449/29904/12143 15448/29903/12143 +f 15446/29900/12144 15447/29902/12144 15433/29883/12144 15429/29878/12144 +f 15447/29902/12145 15448/29903/12145 15437/29887/12145 15433/29883/12145 +f 15448/29903/12146 15449/29904/12146 15438/29888/12146 15437/29887/12146 +f 15426/29873/12147 15450/29906/12147 15454/29911/12147 15453/29910/12147 +f 15450/29906/12148 15451/29907/12148 15455/29912/12148 15454/29911/12148 +f 15451/29907/12149 15452/29908/12149 15456/29914/12149 15455/29912/12149 +f 15453/29910/12150 15454/29911/12150 15458/29916/12150 15457/29915/12150 +f 15454/29911/12151 15455/29912/12151 15459/29917/12151 15458/29916/12151 +f 15455/29912/12152 15456/29914/12152 15460/29919/12152 15459/29917/12152 +f 15457/29915/12153 15458/29916/12153 15445/29899/12153 15441/29892/12153 +f 15458/29916/12154 15459/29917/12154 15449/29905/12154 15445/29899/12154 +f 15459/29917/12155 15460/29919/12155 15438/29889/12155 15449/29905/12155 +f 15461/29920/12156 15464/29923/12156 15468/29927/12156 15467/29926/12156 +f 15464/29923/12157 15465/29924/12157 15469/29928/12157 15468/29927/12157 +f 15465/29924/12158 15466/29925/12158 15470/29929/12158 15469/29928/12158 +f 15467/29926/12159 15468/29927/12159 15472/29931/12159 15471/29930/12159 +f 15468/29927/12160 15469/29928/12160 15473/29932/12160 15472/29931/12160 +f 15469/29928/12161 15470/29929/12161 15474/29933/12161 15473/29932/12161 +f 15471/29930/12162 15472/29931/12162 15493/29958/12162 15489/29954/12162 +f 15472/29931/12163 15473/29932/12163 15497/29963/12163 15493/29958/12163 +f 15473/29932/12164 15474/29933/12164 15475/29934/12164 15497/29963/12164 +f 15462/29921/12165 15476/29937/12165 15480/29942/12165 15479/29941/12165 +f 15476/29937/12166 15477/29938/12166 15481/29943/12166 15480/29942/12166 +f 15477/29938/12167 15478/29940/12167 15482/29944/12167 15481/29943/12167 +f 15479/29941/12168 15480/29942/12168 15484/29947/12168 15483/29946/12168 +f 15480/29942/12169 15481/29943/12169 15485/29948/12169 15484/29947/12169 +f 15481/29943/12170 15482/29944/12170 15486/29949/12170 15485/29948/12170 +f 15483/29946/12171 15484/29947/12171 15470/29929/12171 15466/29925/12171 +f 15484/29947/12172 15485/29948/12172 15474/29933/12172 15470/29929/12172 +f 15485/29948/12173 15486/29949/12173 15475/29935/12173 15474/29933/12173 +f 15541/30028/12174 15535/30021/12174 15585/30082/12174 15584/30081/12174 +f 15487/29951/12175 15488/29952/12175 15492/29957/12175 15491/29956/12175 +f 15488/29952/12176 15489/29953/12176 15493/29959/12176 15492/29957/12176 +f 15490/29955/12177 15491/29956/12177 15495/29961/12177 15494/29960/12177 +f 15491/29956/12178 15492/29957/12178 15496/29962/12178 15495/29961/12178 +f 15492/29957/12179 15493/29959/12179 15497/29964/12179 15496/29962/12179 +f 15494/29960/12180 15495/29961/12180 15482/29945/12180 15478/29939/12180 +f 15495/29961/12181 15496/29962/12181 15486/29950/12181 15482/29945/12181 +f 15496/29962/12182 15497/29964/12182 15475/29936/12182 15486/29950/12182 +f 15498/29966/12183 15501/29970/12183 15505/29979/12183 15504/29978/12183 +f 15501/29970/12184 15502/29972/12184 15506/29980/12184 15505/29979/12184 +f 15502/29972/12185 15503/29974/12185 15507/29981/12185 15506/29980/12185 +f 15504/29978/12186 15505/29979/12186 15509/29984/12186 15508/29983/12186 +f 15505/29979/12187 15506/29980/12187 15510/29985/12187 15509/29984/12187 +f 15506/29980/12188 15507/29981/12188 15511/29986/12188 15510/29985/12188 +f 15508/29983/12189 15509/29984/12189 15530/30014/12189 15526/30010/12189 +f 15509/29984/12190 15510/29985/12190 15534/30019/12190 15530/30014/12190 +f 15510/29985/12191 15511/29986/12191 15512/29988/12191 15534/30019/12191 +f 15499/29968/12192 15513/29991/12192 15517/29997/12192 15516/29995/12192 +f 15513/29991/12193 15514/29992/12193 15518/29998/12193 15517/29997/12193 +f 15514/29992/12194 15515/29994/12194 15519/29999/12194 15518/29998/12194 +f 15516/29995/12195 15517/29997/12195 15521/30003/12195 15520/30001/12195 +f 15517/29997/12196 15518/29998/12196 15522/30004/12196 15521/30003/12196 +f 15518/29998/12197 15519/29999/12197 15523/30005/12197 15522/30004/12197 +f 15520/30001/12198 15521/30003/12198 15507/29982/12198 15503/29975/12198 +f 15521/30003/12199 15522/30004/12199 15511/29987/12199 15507/29982/12199 +f 15522/30004/12200 15523/30005/12200 15512/29989/12200 15511/29987/12200 +f 15500/29969/12201 15524/30007/12201 15528/30012/12201 15527/30011/12201 +f 15524/30007/12202 15525/30008/12202 15529/30013/12202 15528/30012/12202 +f 15525/30008/12203 15526/30009/12203 15530/30015/12203 15529/30013/12203 +f 15527/30011/12204 15528/30012/12204 15532/30017/12204 15531/30016/12204 +f 15528/30012/12205 15529/30013/12205 15533/30018/12205 15532/30017/12205 +f 15529/30013/12206 15530/30015/12206 15534/30020/12206 15533/30018/12206 +f 15531/30016/12207 15532/30017/12207 15519/30000/12207 15515/29993/12207 +f 15532/30017/12208 15533/30018/12208 15523/30006/12208 15519/30000/12208 +f 15533/30018/12209 15534/30020/12209 15512/29990/12209 15523/30006/12209 +f 15319/29748/12020 15313/29741/12020 15573/30070/12020 15572/30069/12020 +f 15538/30024/12210 15539/30025/12210 15543/30030/12210 15542/30029/12210 +f 15539/30025/12211 15540/30026/12211 15544/30031/12211 15543/30030/12211 +f 15541/30028/12212 15542/30029/12212 15546/30034/12212 15545/30033/12212 +f 15542/30029/12213 15543/30030/12213 15547/30035/12213 15546/30034/12213 +f 15543/30030/12214 15544/30031/12214 15548/30036/12214 15547/30035/12214 +f 15545/30033/12215 15546/30034/12215 15567/30062/12215 15563/30057/12215 +f 15546/30034/12216 15547/30035/12216 15571/30067/12216 15567/30062/12216 +f 15547/30035/12217 15548/30036/12217 15549/30038/12217 15571/30067/12217 +f 15536/30022/12218 15550/30041/12218 15554/30046/12218 15553/30045/12218 +f 15550/30041/12219 15551/30042/12219 15555/30047/12219 15554/30046/12219 +f 15551/30042/12220 15552/30043/12220 15556/30048/12220 15555/30047/12220 +f 15553/30045/12221 15554/30046/12221 15558/30051/12221 15557/30050/12221 +f 15554/30046/12222 15555/30047/12222 15559/30052/12222 15558/30051/12222 +f 15555/30047/12223 15556/30048/12223 15560/30053/12223 15559/30052/12223 +f 15557/30050/12224 15558/30051/12224 15544/30032/12224 15540/30027/12224 +f 15558/30051/12225 15559/30052/12225 15548/30037/12225 15544/30032/12225 +f 15559/30052/12226 15560/30053/12226 15549/30039/12226 15548/30037/12226 +f 15537/30023/12227 15561/30055/12227 15565/30060/12227 15564/30059/12227 +f 15561/30055/12228 15562/30056/12228 15566/30061/12228 15565/30060/12228 +f 15562/30056/12229 15563/30058/12229 15567/30063/12229 15566/30061/12229 +f 15564/30059/12230 15565/30060/12230 15569/30065/12230 15568/30064/12230 +f 15565/30060/12231 15566/30061/12231 15570/30066/12231 15569/30065/12231 +f 15566/30061/12232 15567/30063/12232 15571/30068/12232 15570/30066/12232 +f 15568/30064/12233 15569/30065/12233 15556/30049/12233 15552/30044/12233 +f 15569/30065/12234 15570/30066/12234 15560/30054/12234 15556/30049/12234 +f 15570/30066/12235 15571/30068/12235 15549/30040/12235 15560/30054/12235 +f 15463/29922/12236 15535/30021/12236 15541/30028/12236 15487/29951/12236 +f 15487/29951/12237 15541/30028/12237 15545/30033/12237 15488/29952/12237 +f 15488/29952/12238 15545/30033/12238 15563/30057/12238 15489/29953/12238 +f 15489/29954/12239 15563/30058/12239 15562/30056/12239 15471/29930/12239 +f 15471/29930/12240 15562/30056/12240 15561/30055/12240 15467/29926/12240 +f 15467/29926/12241 15561/30055/12241 15537/30023/12241 15461/29920/12241 +f 15313/29741/12242 15463/29922/12242 15490/29955/12242 15316/29744/12242 +f 15316/29744/12243 15490/29955/12243 15494/29960/12243 15317/29745/12243 +f 15317/29745/12244 15494/29960/12244 15478/29939/12244 15318/29746/12244 +f 15318/29747/12245 15478/29940/12245 15477/29938/12245 15335/29766/12245 +f 15335/29766/12246 15477/29938/12246 15476/29937/12246 15331/29762/12246 +f 15331/29762/12247 15476/29937/12247 15462/29921/12247 15314/29742/12247 +f 15278/29697/12248 15315/29743/12248 15342/29773/12248 15302/29727/12248 +f 15302/29727/12249 15342/29773/12249 15346/29777/12249 15303/29729/12249 +f 15303/29729/12250 15346/29777/12250 15330/29761/12250 15304/29731/12250 +f 15304/29731/12251 15330/29761/12251 15329/29760/12251 15286/29709/12251 +f 15286/29709/12252 15329/29760/12252 15328/29759/12252 15282/29703/12252 +f 15282/29703/12253 15328/29759/12253 15314/29742/12253 15276/29694/12253 +f 15536/30022/12254 15499/29967/12254 15516/29996/12254 15550/30041/12254 +f 15550/30041/12255 15516/29996/12255 15520/30002/12255 15551/30042/12255 +f 15551/30042/12256 15520/30002/12256 15503/29976/12256 15552/30043/12256 +f 15552/30044/12257 15503/29977/12257 15502/29973/12257 15568/30064/12257 +f 15568/30064/12258 15502/29973/12258 15501/29971/12258 15564/30059/12258 +f 15564/30059/12259 15501/29971/12259 15498/29965/12259 15537/30023/12259 +f 15352/29784/12260 15388/29830/12260 15405/29848/12260 15376/29816/12260 +f 15376/29816/12261 15405/29848/12261 15409/29853/12261 15377/29818/12261 +f 15377/29818/12262 15409/29853/12262 15392/29834/12262 15378/29820/12262 +f 15378/29820/12263 15392/29834/12263 15391/29833/12263 15360/29796/12263 +f 15360/29796/12264 15391/29833/12264 15390/29832/12264 15356/29791/12264 +f 15356/29791/12265 15390/29832/12265 15387/29829/12265 15350/29782/12265 +f 15424/29870/12266 15462/29921/12266 15479/29941/12266 15427/29875/12266 +f 15427/29875/12267 15479/29941/12267 15483/29946/12267 15428/29877/12267 +f 15428/29877/12268 15483/29946/12268 15466/29925/12268 15429/29879/12268 +f 15429/29879/12269 15466/29925/12269 15465/29924/12269 15446/29901/12269 +f 15446/29901/12270 15465/29924/12270 15464/29923/12270 15442/29895/12270 +f 15442/29895/12271 15464/29923/12271 15461/29920/12271 15425/29871/12271 +f 15351/29783/12272 15500/29969/12272 15527/30011/12272 15365/29801/12272 +f 15365/29801/12273 15527/30011/12273 15531/30016/12273 15366/29802/12273 +f 15366/29802/12274 15531/30016/12274 15515/29993/12274 15367/29803/12274 +f 15367/29804/12275 15515/29994/12275 15514/29992/12275 15383/29825/12275 +f 15383/29825/12276 15514/29992/12276 15513/29991/12276 15379/29821/12276 +f 15379/29821/12277 15513/29991/12277 15499/29968/12277 15352/29785/12277 +f 15277/29695/12278 15351/29783/12278 15368/29805/12278 15291/29715/12278 +f 15291/29715/12279 15368/29805/12279 15372/29810/12279 15292/29716/12279 +f 15292/29716/12280 15372/29810/12280 15355/29789/12280 15293/29717/12280 +f 15293/29717/12281 15355/29789/12281 15354/29788/12281 15309/29737/12281 +f 15309/29737/12282 15354/29788/12282 15353/29786/12282 15305/29732/12282 +f 15305/29733/12283 15353/29787/12283 15350/29782/12283 15278/29697/12283 +f 15535/30021/12284 15389/29831/12284 15416/29861/12284 15538/30024/12284 +f 15538/30024/12285 15416/29861/12285 15420/29865/12285 15539/30025/12285 +f 15539/30025/12286 15420/29865/12286 15404/29846/12286 15540/30026/12286 +f 15540/30027/12287 15404/29847/12287 15403/29845/12287 15557/30050/12287 +f 15557/30050/12288 15403/29845/12288 15402/29844/12288 15553/30045/12288 +f 15553/30045/12289 15402/29844/12289 15388/29830/12289 15536/30022/12289 +f 15500/29969/12290 15426/29873/12290 15453/29910/12290 15524/30007/12290 +f 15524/30007/12291 15453/29910/12291 15457/29915/12291 15525/30008/12291 +f 15525/30008/12292 15457/29915/12292 15441/29892/12292 15526/30009/12292 +f 15526/30010/12293 15441/29893/12293 15440/29891/12293 15508/29983/12293 +f 15508/29983/12294 15440/29891/12294 15439/29890/12294 15504/29978/12294 +f 15504/29978/12295 15439/29890/12295 15425/29872/12295 15498/29966/12295 +f 15426/29873/12296 15277/29695/12296 15294/29718/12296 15450/29906/12296 +f 15450/29906/12297 15294/29718/12297 15298/29722/12297 15451/29907/12297 +f 15451/29907/12298 15298/29722/12298 15281/29700/12298 15452/29908/12298 +f 15452/29909/12299 15281/29701/12299 15280/29699/12299 15434/29884/12299 +f 15434/29884/12300 15280/29699/12300 15279/29698/12300 15430/29880/12300 +f 15430/29880/12301 15279/29698/12301 15276/29693/12301 15424/29869/12301 +f 15389/29831/12302 15313/29741/12302 15319/29748/12302 15413/29858/12302 +f 15413/29858/12303 15319/29748/12303 15323/29753/12303 15414/29859/12303 +f 15414/29859/12304 15323/29753/12304 15341/29772/12304 15415/29860/12304 +f 15415/29860/12305 15341/29772/12305 15340/29771/12305 15397/29839/12305 +f 15397/29839/12306 15340/29771/12306 15339/29770/12306 15393/29835/12306 +f 15393/29835/12307 15339/29770/12307 15315/29743/12307 15387/29829/12307 +f 15462/29921/12174 15424/29870/12174 15276/29694/12174 15314/29742/12174 +f 15573/30070/12308 15574/30071/12308 15575/30072/12308 15572/30069/12308 +f 15577/30074/12309 15578/30075/12309 15579/30076/12309 15576/30073/12309 +f 15581/30078/12310 15582/30079/12310 15583/30080/12310 15580/30077/12310 +f 15585/30082/12311 15586/30083/12311 15587/30084/12311 15584/30081/12311 +f 15313/29741/12019 15316/29744/12019 15574/30071/12019 15573/30070/12019 +f 15535/30021/12022 15538/30024/12022 15586/30083/12022 15585/30082/12022 +f 15389/29831/12174 15413/29858/12174 15578/30075/12174 15577/30074/12174 +f 15463/29922/12020 15487/29951/12020 15582/30079/12020 15581/30078/12020 +f 15316/29744/12312 15320/29749/12312 15575/30072/12312 15574/30071/12312 +f 15538/30024/12313 15542/30029/12313 15587/30084/12313 15586/30083/12313 +f 15413/29858/12314 15417/29862/12314 15579/30076/12314 15578/30075/12314 +f 15487/29951/12315 15491/29956/12315 15583/30080/12315 15582/30079/12315 +f 15320/29749/12316 15319/29748/12316 15572/30069/12316 15575/30072/12316 +f 15542/30029/12317 15541/30028/12317 15584/30081/12317 15587/30084/12317 +f 15417/29862/12318 15416/29861/12318 15576/30073/12318 15579/30076/12318 +f 15491/29956/12319 15490/29955/12319 15580/30077/12319 15583/30080/12319 +o Top.015 +v -5.642359 0.737263 5.609548 +v -5.642359 0.749833 5.508623 +v -5.748052 0.737263 5.508623 +v -5.642359 0.740515 5.606111 +v -5.642359 0.743549 5.596022 +v -5.642359 0.746151 5.579988 +v -5.669704 0.737263 5.606111 +v -5.670565 0.740645 5.602020 +v -5.670105 0.743568 5.591815 +v -5.669538 0.745849 5.577620 +v -5.695214 0.737263 5.596022 +v -5.695404 0.740582 5.591750 +v -5.692704 0.743253 5.583197 +v -5.690489 0.745176 5.572162 +v -5.703381 0.744520 5.566892 +v -5.669704 0.749405 5.508623 +v -5.695214 0.748149 5.508623 +v -5.717095 0.746151 5.508623 +v -5.642359 0.749405 5.534735 +v -5.670798 0.748896 5.535557 +v -5.695376 0.747625 5.535117 +v -5.714548 0.745857 5.534575 +v -5.642359 0.748149 5.559093 +v -5.670264 0.747617 5.559276 +v -5.692729 0.746551 5.556697 +v -5.708892 0.745177 5.554583 +v -5.744452 0.737263 5.534735 +v -5.733886 0.737263 5.559093 +v -5.717095 0.737263 5.579988 +v -5.744452 0.740515 5.508623 +v -5.740168 0.740617 5.535779 +v -5.729481 0.740563 5.559248 +v -5.714615 0.740495 5.577556 +v -5.733886 0.743549 5.508623 +v -5.729413 0.743572 5.535270 +v -5.720456 0.743250 5.556721 +v -5.708899 0.742987 5.572155 +v -5.600537 0.660944 5.508623 +v -5.642359 0.673515 5.609548 +v -5.748052 0.673515 5.508623 +v -5.600537 0.661372 5.534735 +v -5.642359 0.662629 5.559093 +v -5.642359 0.664626 5.579988 +v -5.669704 0.661372 5.508623 +v -5.670566 0.661882 5.535779 +v -5.670105 0.663153 5.559248 +v -5.669538 0.664921 5.577556 +v -5.695214 0.662629 5.508623 +v -5.695404 0.663161 5.535270 +v -5.692704 0.664226 5.556721 +v -5.690489 0.665601 5.572155 +v -5.703381 0.666257 5.566892 +v -5.669704 0.673515 5.606111 +v -5.695214 0.673515 5.596022 +v -5.717095 0.673515 5.579988 +v -5.642359 0.670263 5.606111 +v -5.670798 0.670160 5.602020 +v -5.695376 0.670215 5.591815 +v -5.714548 0.670282 5.577620 +v -5.642359 0.667229 5.596022 +v -5.670264 0.667206 5.591750 +v -5.692729 0.667527 5.583197 +v -5.708892 0.667790 5.572162 +v -5.744452 0.670263 5.508623 +v -5.733886 0.667229 5.508623 +v -5.717095 0.664626 5.508623 +v -5.744452 0.673515 5.534735 +v -5.740168 0.670133 5.535557 +v -5.729481 0.667209 5.535117 +v -5.714615 0.664929 5.534575 +v -5.733886 0.673515 5.559093 +v -5.729413 0.670196 5.559276 +v -5.720456 0.667524 5.556697 +v -5.708899 0.665602 5.554583 +v -5.748052 0.737263 4.996828 +v -5.642359 0.749833 4.996828 +v -5.642359 0.737263 4.895904 +v -5.744453 0.740515 4.996828 +v -5.733887 0.743549 4.996828 +v -5.717095 0.746151 4.996828 +v -5.744453 0.737263 4.970716 +v -5.740168 0.740645 4.969894 +v -5.729481 0.743568 4.970334 +v -5.714615 0.745849 4.970876 +v -5.733887 0.737263 4.946358 +v -5.729413 0.740582 4.946176 +v -5.720456 0.743253 4.948754 +v -5.708900 0.745176 4.950869 +v -5.703381 0.744520 4.938560 +v -5.642359 0.749405 4.970716 +v -5.642359 0.748149 4.946358 +v -5.642359 0.746151 4.925464 +v -5.669705 0.749405 4.996828 +v -5.670566 0.748896 4.969672 +v -5.670105 0.747625 4.946203 +v -5.669538 0.745857 4.927896 +v -5.695214 0.748149 4.996828 +v -5.695405 0.747617 4.970182 +v -5.692704 0.746551 4.948731 +v -5.690490 0.745177 4.933296 +v -5.669705 0.737263 4.899340 +v -5.695214 0.737263 4.909430 +v -5.717095 0.737263 4.925464 +v -5.642359 0.740515 4.899340 +v -5.670798 0.740617 4.903432 +v -5.695376 0.740563 4.913636 +v -5.714548 0.740495 4.927832 +v -5.642359 0.743549 4.909430 +v -5.670264 0.743572 4.913702 +v -5.692729 0.743250 4.922254 +v -5.708893 0.742987 4.933289 +v -5.748052 0.673515 4.996828 +v -5.642359 0.673515 4.895904 +v -5.600537 0.660944 4.996828 +v -5.744453 0.673515 4.970716 +v -5.733887 0.673515 4.946358 +v -5.717095 0.673515 4.925464 +v -5.744453 0.670263 4.996828 +v -5.740168 0.670160 4.969672 +v -5.729481 0.670215 4.946203 +v -5.714615 0.670282 4.927896 +v -5.733887 0.667229 4.996828 +v -5.729413 0.667206 4.970182 +v -5.720456 0.667527 4.948731 +v -5.708900 0.667790 4.933296 +v -5.703381 0.666257 4.938560 +v -5.642359 0.670263 4.899340 +v -5.642359 0.667229 4.909430 +v -5.642359 0.664626 4.925464 +v -5.669705 0.673515 4.899340 +v -5.670566 0.670133 4.903432 +v -5.670105 0.667209 4.913636 +v -5.669538 0.664929 4.927832 +v -5.695214 0.673515 4.909430 +v -5.695405 0.670196 4.913702 +v -5.692704 0.667524 4.922254 +v -5.690490 0.665602 4.933289 +v -5.669705 0.661372 4.996828 +v -5.695214 0.662629 4.996828 +v -5.717095 0.664626 4.996828 +v -5.600537 0.661372 4.970716 +v -5.670798 0.661882 4.969894 +v -5.695376 0.663153 4.970334 +v -5.714548 0.664921 4.970876 +v -5.642359 0.662629 4.946358 +v -5.670264 0.663161 4.946176 +v -5.692729 0.664226 4.948754 +v -5.708893 0.665601 4.950869 +v -5.106386 0.737263 5.609548 +v -5.000693 0.737263 5.508623 +v -5.106386 0.749833 5.508623 +v -5.079040 0.737263 5.606111 +v -5.053531 0.737263 5.596022 +v -5.031650 0.737263 5.579988 +v -5.106386 0.740515 5.606111 +v -5.077947 0.740617 5.602019 +v -5.053369 0.740563 5.591815 +v -5.034197 0.740495 5.577620 +v -5.106386 0.743549 5.596022 +v -5.078481 0.743572 5.591750 +v -5.056016 0.743250 5.583197 +v -5.039853 0.742987 5.572162 +v -5.045364 0.744520 5.566892 +v -5.004292 0.740515 5.508623 +v -5.014858 0.743549 5.508623 +v -5.031650 0.746151 5.508623 +v -5.004292 0.737263 5.534735 +v -5.008577 0.740645 5.535557 +v -5.019264 0.743568 5.535117 +v -5.034130 0.745849 5.534575 +v -5.014858 0.737263 5.559093 +v -5.019332 0.740582 5.559275 +v -5.028289 0.743253 5.556697 +v -5.039845 0.745176 5.554582 +v -5.106386 0.749405 5.534735 +v -5.106386 0.748149 5.559093 +v -5.106386 0.746151 5.579988 +v -5.079040 0.749405 5.508623 +v -5.078179 0.748896 5.535779 +v -5.078640 0.747625 5.559248 +v -5.079207 0.745857 5.577556 +v -5.053531 0.748149 5.508623 +v -5.053340 0.747617 5.535269 +v -5.056041 0.746551 5.556720 +v -5.058255 0.745177 5.572155 +v -5.000693 0.673515 5.508623 +v -5.106386 0.673515 5.609548 +v -5.148208 0.660944 5.508623 +v -5.004292 0.673515 5.534735 +v -5.014858 0.673515 5.559093 +v -5.031650 0.673515 5.579988 +v -5.004292 0.670263 5.508623 +v -5.008577 0.670160 5.535779 +v -5.019264 0.670215 5.559248 +v -5.034130 0.670282 5.577556 +v -5.014858 0.667229 5.508623 +v -5.019332 0.667206 5.535269 +v -5.028289 0.667527 5.556720 +v -5.039845 0.667790 5.572155 +v -5.045364 0.666257 5.566892 +v -5.106386 0.670263 5.606111 +v -5.106386 0.667229 5.596022 +v -5.106386 0.664626 5.579988 +v -5.079040 0.673515 5.606111 +v -5.078179 0.670133 5.602019 +v -5.078640 0.667209 5.591815 +v -5.079207 0.664929 5.577620 +v -5.053531 0.673515 5.596022 +v -5.053340 0.670196 5.591750 +v -5.056041 0.667524 5.583197 +v -5.058255 0.665602 5.572162 +v -5.079040 0.661372 5.508623 +v -5.053531 0.662629 5.508623 +v -5.031650 0.664626 5.508623 +v -5.148208 0.661372 5.534735 +v -5.077947 0.661882 5.535557 +v -5.053369 0.663153 5.535117 +v -5.034197 0.664921 5.534575 +v -5.106386 0.662629 5.559093 +v -5.078481 0.663161 5.559275 +v -5.056016 0.664226 5.556697 +v -5.039852 0.665601 5.554582 +v -5.000693 0.737263 4.996828 +v -5.106386 0.737263 4.895904 +v -5.106386 0.749833 4.996828 +v -5.004292 0.737263 4.970716 +v -5.014859 0.737263 4.946358 +v -5.031650 0.737263 4.925464 +v -5.004292 0.740515 4.996828 +v -5.008577 0.740617 4.969672 +v -5.019264 0.740563 4.946203 +v -5.034130 0.740495 4.927896 +v -5.014859 0.743549 4.996828 +v -5.019332 0.743572 4.970181 +v -5.028289 0.743250 4.948730 +v -5.039845 0.742987 4.933296 +v -5.045364 0.744520 4.938559 +v -5.106386 0.740515 4.899340 +v -5.106386 0.743549 4.909430 +v -5.106386 0.746151 4.925464 +v -5.079041 0.737263 4.899340 +v -5.078180 0.740645 4.903431 +v -5.078640 0.743568 4.913636 +v -5.079207 0.745849 4.927831 +v -5.053531 0.737263 4.909430 +v -5.053341 0.740582 4.913701 +v -5.056041 0.743253 4.922254 +v -5.058256 0.745176 4.933289 +v -5.079041 0.749405 4.996828 +v -5.053531 0.748149 4.996828 +v -5.031650 0.746151 4.996828 +v -5.106386 0.749405 4.970716 +v -5.077947 0.748896 4.969894 +v -5.053369 0.747625 4.970334 +v -5.034197 0.745857 4.970876 +v -5.106386 0.748149 4.946358 +v -5.078481 0.747617 4.946176 +v -5.056016 0.746551 4.948754 +v -5.039853 0.745177 4.950869 +v -5.148208 0.660944 4.996828 +v -5.106386 0.673515 4.895904 +v -5.000693 0.673515 4.996828 +v -5.148208 0.661372 4.970716 +v -5.106386 0.662629 4.946358 +v -5.106386 0.664626 4.925464 +v -5.079041 0.661372 4.996828 +v -5.078179 0.661882 4.969672 +v -5.078640 0.663153 4.946203 +v -5.079207 0.664921 4.927896 +v -5.053531 0.662629 4.996828 +v -5.053341 0.663161 4.970181 +v -5.056041 0.664226 4.948730 +v -5.058256 0.665601 4.933296 +v -5.045364 0.666257 4.938559 +v -5.079041 0.673515 4.899340 +v -5.053531 0.673515 4.909430 +v -5.031650 0.673515 4.925464 +v -5.106386 0.670263 4.899340 +v -5.077947 0.670160 4.903431 +v -5.053369 0.670215 4.913636 +v -5.034197 0.670282 4.927831 +v -5.106386 0.667229 4.909430 +v -5.078481 0.667206 4.913701 +v -5.056016 0.667527 4.922254 +v -5.039853 0.667790 4.933289 +v -5.004292 0.670263 4.996828 +v -5.014859 0.667229 4.996828 +v -5.031650 0.664626 4.996828 +v -5.004292 0.673515 4.970716 +v -5.008577 0.670133 4.969894 +v -5.019264 0.667209 4.970334 +v -5.034130 0.664929 4.970876 +v -5.014859 0.673515 4.946358 +v -5.019332 0.670196 4.946176 +v -5.028289 0.667524 4.948754 +v -5.039845 0.665602 4.950869 +v -5.669704 -0.015018 5.508623 +v -5.600537 -0.015446 5.508623 +v -5.600537 -0.015018 5.534735 +v -5.670566 -0.014508 5.535779 +v -5.600537 -0.015018 4.970716 +v -5.600537 -0.015446 4.996828 +v -5.669705 -0.015018 4.996828 +v -5.670798 -0.014508 4.969894 +v -5.148208 -0.015018 5.534735 +v -5.148208 -0.015446 5.508623 +v -5.079040 -0.015018 5.508623 +v -5.077947 -0.014508 5.535557 +v -5.079041 -0.015018 4.996828 +v -5.148208 -0.015446 4.996828 +v -5.148208 -0.015018 4.970716 +v -5.078179 -0.014508 4.969672 +vn -0.0000 -0.0444 -0.0000 +vn 0.3737 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.3568 +vn -0.0000 0.0444 -0.0000 +vn -0.3737 -0.0000 -0.0000 +vn -0.0510 0.0061 0.3501 +vn -0.0497 0.0173 0.3254 +vn -0.0466 0.0270 0.2801 +vn -0.1448 0.0060 0.3254 +vn -0.1412 0.0168 0.3016 +vn -0.1339 0.0256 0.2619 +vn -0.2268 0.0056 0.2801 +vn -0.2158 0.0159 0.2617 +vn -0.1981 0.0236 0.2362 +vn -0.0510 0.0436 0.0487 +vn -0.1451 0.0405 0.0474 +vn -0.2268 0.0349 0.0445 +vn -0.0503 0.0405 0.1383 +vn -0.1414 0.0376 0.1348 +vn -0.2156 0.0326 0.1279 +vn -0.0468 0.0349 0.2165 +vn -0.1341 0.0326 0.2061 +vn -0.1980 0.0294 0.1891 +vn -0.3666 0.0061 0.0487 +vn -0.3408 0.0059 0.1385 +vn -0.2933 0.0055 0.2166 +vn -0.3408 0.0172 0.0480 +vn -0.3158 0.0168 0.1350 +vn -0.2742 0.0159 0.2059 +vn -0.2933 0.0270 0.0447 +vn -0.2740 0.0257 0.1280 +vn -0.2474 0.0236 0.1891 +vn -0.0296 -0.0418 0.1189 +vn -0.0466 -0.0349 0.2166 +vn -0.1448 -0.0405 0.0480 +vn -0.1412 -0.0376 0.1350 +vn -0.1339 -0.0326 0.2059 +vn -0.2268 -0.0349 0.0447 +vn -0.2158 -0.0326 0.1280 +vn -0.1981 -0.0294 0.1891 +vn -0.0510 -0.0061 0.3501 +vn -0.1451 -0.0059 0.3254 +vn -0.2268 -0.0055 0.2801 +vn -0.0503 -0.0172 0.3254 +vn -0.1414 -0.0168 0.3016 +vn -0.2156 -0.0159 0.2619 +vn -0.0468 -0.0270 0.2801 +vn -0.1341 -0.0257 0.2617 +vn -0.1980 -0.0236 0.2362 +vn -0.3666 -0.0061 0.0487 +vn -0.3408 -0.0173 0.0474 +vn -0.2933 -0.0270 0.0445 +vn -0.3408 -0.0060 0.1383 +vn -0.3158 -0.0168 0.1348 +vn -0.2742 -0.0256 0.1279 +vn -0.2933 -0.0056 0.2165 +vn -0.2740 -0.0159 0.2061 +vn -0.2474 -0.0236 0.1891 +vn -0.3666 0.0061 -0.0487 +vn -0.3408 0.0173 -0.0474 +vn -0.2933 0.0270 -0.0445 +vn -0.3408 0.0060 -0.1383 +vn -0.3158 0.0168 -0.1348 +vn -0.2742 0.0256 -0.1279 +vn -0.2933 0.0056 -0.2165 +vn -0.2740 0.0159 -0.2061 +vn -0.2474 0.0236 -0.1891 +vn -0.0510 0.0436 -0.0487 +vn -0.0497 0.0405 -0.1385 +vn -0.0466 0.0349 -0.2166 +vn -0.1448 0.0405 -0.0480 +vn -0.1412 0.0376 -0.1350 +vn -0.1339 0.0326 -0.2059 +vn -0.2268 0.0349 -0.0447 +vn -0.2158 0.0326 -0.1280 +vn -0.1981 0.0294 -0.1891 +vn -0.0510 0.0061 -0.3501 +vn -0.1451 0.0059 -0.3254 +vn -0.2268 0.0055 -0.2801 +vn -0.0503 0.0172 -0.3254 +vn -0.1414 0.0168 -0.3016 +vn -0.2156 0.0159 -0.2619 +vn -0.0468 0.0270 -0.2801 +vn -0.1341 0.0257 -0.2617 +vn -0.1980 0.0236 -0.2362 +vn -0.3666 -0.0061 -0.0487 +vn -0.3408 -0.0059 -0.1385 +vn -0.2933 -0.0055 -0.2166 +vn -0.3408 -0.0172 -0.0480 +vn -0.3158 -0.0168 -0.1350 +vn -0.2742 -0.0159 -0.2059 +vn -0.2933 -0.0270 -0.0447 +vn -0.2740 -0.0257 -0.1280 +vn -0.2474 -0.0236 -0.1891 +vn -0.0510 -0.0061 -0.3501 +vn -0.0497 -0.0173 -0.3254 +vn -0.0466 -0.0270 -0.2801 +vn -0.1448 -0.0060 -0.3254 +vn -0.1412 -0.0168 -0.3016 +vn -0.1339 -0.0256 -0.2619 +vn -0.2268 -0.0056 -0.2801 +vn -0.2158 -0.0159 -0.2617 +vn -0.1981 -0.0236 -0.2362 +vn -0.1451 -0.0405 -0.0474 +vn -0.2268 -0.0349 -0.0445 +vn -0.0300 -0.0418 -0.1185 +vn -0.1414 -0.0376 -0.1348 +vn -0.2156 -0.0326 -0.1279 +vn -0.0468 -0.0349 -0.2165 +vn -0.1341 -0.0326 -0.2061 +vn -0.1980 -0.0294 -0.1891 +vn 0.0510 0.0061 0.3501 +vn 0.1451 0.0059 0.3254 +vn 0.2268 0.0055 0.2801 +vn 0.0503 0.0172 0.3254 +vn 0.1414 0.0168 0.3016 +vn 0.2156 0.0159 0.2619 +vn 0.0468 0.0270 0.2801 +vn 0.1341 0.0257 0.2617 +vn 0.1980 0.0236 0.2362 +vn 0.3666 0.0061 0.0487 +vn 0.3408 0.0173 0.0474 +vn 0.2933 0.0270 0.0445 +vn 0.3408 0.0060 0.1383 +vn 0.3158 0.0168 0.1348 +vn 0.2742 0.0256 0.1279 +vn 0.2933 0.0056 0.2165 +vn 0.2740 0.0159 0.2061 +vn 0.2474 0.0236 0.1891 +vn 0.0510 0.0436 0.0487 +vn 0.0497 0.0405 0.1385 +vn 0.0466 0.0349 0.2166 +vn 0.1448 0.0405 0.0480 +vn 0.1412 0.0376 0.1350 +vn 0.1339 0.0326 0.2059 +vn 0.2268 0.0349 0.0447 +vn 0.2158 0.0326 0.1280 +vn 0.1981 0.0294 0.1891 +vn 0.3666 -0.0061 0.0487 +vn 0.3408 -0.0059 0.1385 +vn 0.2933 -0.0055 0.2166 +vn 0.3408 -0.0172 0.0480 +vn 0.3158 -0.0168 0.1350 +vn 0.2742 -0.0159 0.2059 +vn 0.2933 -0.0270 0.0447 +vn 0.2740 -0.0257 0.1280 +vn 0.2474 -0.0236 0.1891 +vn 0.0510 -0.0061 0.3501 +vn 0.0497 -0.0173 0.3254 +vn 0.0466 -0.0270 0.2801 +vn 0.1448 -0.0060 0.3254 +vn 0.1412 -0.0168 0.3016 +vn 0.1339 -0.0256 0.2619 +vn 0.2268 -0.0056 0.2801 +vn 0.2158 -0.0159 0.2617 +vn 0.1981 -0.0236 0.2362 +vn -0.0000 -0.0000 0.3568 +vn 0.1451 -0.0405 0.0474 +vn 0.2268 -0.0349 0.0445 +vn 0.0300 -0.0418 0.1185 +vn 0.1414 -0.0376 0.1348 +vn 0.2156 -0.0326 0.1279 +vn 0.0468 -0.0349 0.2165 +vn 0.1341 -0.0326 0.2061 +vn 0.1980 -0.0294 0.1891 +vn 0.3666 0.0061 -0.0487 +vn 0.3408 0.0059 -0.1385 +vn 0.2933 0.0055 -0.2166 +vn 0.3408 0.0172 -0.0480 +vn 0.3158 0.0168 -0.1350 +vn 0.2742 0.0159 -0.2059 +vn 0.2933 0.0270 -0.0447 +vn 0.2740 0.0257 -0.1280 +vn 0.2474 0.0236 -0.1891 +vn 0.0510 0.0061 -0.3501 +vn 0.0497 0.0173 -0.3254 +vn 0.0466 0.0270 -0.2801 +vn 0.1448 0.0060 -0.3254 +vn 0.1412 0.0168 -0.3016 +vn 0.1339 0.0256 -0.2619 +vn 0.2268 0.0056 -0.2801 +vn 0.2158 0.0159 -0.2617 +vn 0.1981 0.0236 -0.2362 +vn 0.0510 0.0436 -0.0487 +vn 0.1451 0.0405 -0.0474 +vn 0.2268 0.0349 -0.0445 +vn 0.0503 0.0405 -0.1383 +vn 0.1414 0.0376 -0.1348 +vn 0.2156 0.0326 -0.1279 +vn 0.0468 0.0349 -0.2165 +vn 0.1341 0.0326 -0.2061 +vn 0.1980 0.0294 -0.1891 +vn 0.0296 -0.0418 -0.1189 +vn 0.0466 -0.0349 -0.2166 +vn 0.1448 -0.0405 -0.0480 +vn 0.1412 -0.0376 -0.1350 +vn 0.1339 -0.0326 -0.2059 +vn 0.2268 -0.0349 -0.0447 +vn 0.2158 -0.0326 -0.1280 +vn 0.1981 -0.0294 -0.1891 +vn 0.0510 -0.0061 -0.3501 +vn 0.1451 -0.0059 -0.3254 +vn 0.2268 -0.0055 -0.2801 +vn 0.0503 -0.0172 -0.3254 +vn 0.1414 -0.0168 -0.3016 +vn 0.2156 -0.0159 -0.2619 +vn 0.0468 -0.0270 -0.2801 +vn 0.1341 -0.0257 -0.2617 +vn 0.1980 -0.0236 -0.2362 +vn 0.3666 -0.0061 -0.0487 +vn 0.3408 -0.0173 -0.0474 +vn 0.2933 -0.0270 -0.0445 +vn 0.3408 -0.0060 -0.1383 +vn 0.3158 -0.0168 -0.1348 +vn 0.2742 -0.0256 -0.1279 +vn 0.2933 -0.0056 -0.2165 +vn 0.2740 -0.0159 -0.2061 +vn 0.2474 -0.0236 -0.1891 +vn 0.0194 -0.0444 -0.0000 +vn 0.1430 -0.0411 -0.0000 +vn 0.2275 -0.0353 -0.0000 +vn 0.2964 -0.0271 -0.0000 +vn 0.3452 -0.0170 -0.0000 +vn 0.3705 -0.0058 -0.0000 +vn -0.0000 -0.0441 0.0466 +vn -0.0000 -0.0411 0.1366 +vn -0.0000 -0.0353 0.2172 +vn -0.0000 -0.0271 0.2831 +vn -0.0000 -0.0170 0.3297 +vn -0.0000 -0.0058 0.3538 +vn -0.3705 -0.0000 0.0466 +vn -0.3452 -0.0000 0.1366 +vn -0.2964 -0.0000 0.2172 +vn -0.2275 -0.0000 0.2831 +vn -0.1430 -0.0000 0.3297 +vn -0.0488 -0.0000 0.3538 +vn 0.0488 -0.0000 -0.3538 +vn 0.1430 -0.0000 -0.3297 +vn 0.2275 -0.0000 -0.2831 +vn 0.2964 -0.0000 -0.2172 +vn 0.3452 -0.0000 -0.1366 +vn 0.3705 -0.0000 -0.0466 +vn -0.0488 -0.0000 -0.3538 +vn -0.1430 -0.0000 -0.3297 +vn -0.2275 -0.0000 -0.2831 +vn -0.2964 -0.0000 -0.2172 +vn -0.3452 -0.0000 -0.1365 +vn -0.3705 -0.0000 -0.0466 +vn 0.0488 -0.0000 0.3538 +vn 0.1430 -0.0000 0.3297 +vn 0.2275 -0.0000 0.2831 +vn 0.2964 -0.0000 0.2172 +vn 0.3452 -0.0000 0.1365 +vn 0.3705 -0.0000 0.0466 +vn -0.0000 0.0441 -0.0466 +vn -0.0000 0.0411 -0.1365 +vn -0.0000 0.0353 -0.2172 +vn -0.0000 0.0271 -0.2831 +vn -0.0000 0.0170 -0.3297 +vn -0.0000 0.0058 -0.3538 +vn -0.0488 0.0441 -0.0000 +vn -0.1430 0.0411 -0.0000 +vn -0.2275 0.0353 -0.0000 +vn -0.2964 0.0271 -0.0000 +vn -0.3452 0.0170 -0.0000 +vn -0.3705 0.0058 -0.0000 +vn -0.0000 -0.0441 -0.0466 +vn -0.0000 -0.0411 -0.1366 +vn -0.0000 -0.0353 -0.2172 +vn -0.0000 -0.0271 -0.2831 +vn -0.0000 -0.0170 -0.3297 +vn -0.0000 -0.0058 -0.3538 +vn 0.0488 0.0441 -0.0000 +vn 0.1430 0.0411 -0.0000 +vn 0.2275 0.0353 -0.0000 +vn 0.2964 0.0271 -0.0000 +vn 0.3452 0.0170 -0.0000 +vn 0.3705 0.0058 -0.0000 +vn -0.0000 0.0441 0.0466 +vn -0.0000 0.0411 0.1365 +vn -0.0000 0.0353 0.2172 +vn -0.0000 0.0271 0.2831 +vn -0.0000 0.0170 0.3297 +vn -0.0000 0.0058 0.3538 +vn -0.0194 -0.0444 -0.0000 +vn -0.1430 -0.0411 -0.0000 +vn -0.2275 -0.0353 -0.0000 +vn -0.2964 -0.0271 -0.0000 +vn -0.3452 -0.0170 -0.0000 +vn -0.3705 -0.0058 -0.0000 +vn -0.0205 -0.0439 0.0496 +vn -0.0206 -0.0439 -0.0497 +vn 0.0206 -0.0439 0.0497 +vn 0.0205 -0.0439 -0.0496 +vn 0.0058 -0.0000 0.3568 +vn -0.0058 -0.0000 -0.3568 +vn -0.3734 -0.0000 0.0138 +vn 0.3734 -0.0000 -0.0138 +vn -0.3735 -0.0000 -0.0108 +vn 0.3735 -0.0000 0.0108 +vn 0.0046 -0.0000 -0.3568 +vn -0.0046 -0.0000 0.3568 +vt 0.579948 0.337500 +vt 0.840885 0.798611 +vt 0.578906 0.336574 +vt 0.579948 0.336574 +vt 0.840885 0.816204 +vt 0.579948 0.337500 +vt 0.579948 0.337500 +vt 0.578906 0.336574 +vt 0.579427 0.337500 +vt 0.579948 0.337500 +vt 0.840885 0.800463 +vt 0.579948 0.337500 +vt 0.579948 0.337500 +vt 0.579427 0.337500 +vt 0.578906 0.336574 +vt 0.579948 0.337500 +vt 0.840885 0.803241 +vt 0.579948 0.337500 +vt 0.579948 0.337500 +vt 0.579427 0.337500 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.578906 0.336574 +vt 0.579427 0.336574 +vt 0.579948 0.336574 +vt 0.840885 0.814352 +vt 0.579948 0.336574 +vt 0.840885 0.811574 +vt 0.579948 0.336574 +vt 0.840885 0.807870 +vt 0.579948 0.336574 +vt 0.842969 0.816204 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.579948 0.336574 +vt 0.776823 0.816204 +vt 0.794531 0.798611 +vt 0.794531 0.816204 +vt 0.776823 0.814352 +vt 0.776823 0.811574 +vt 0.776823 0.807870 +vt 0.785677 0.798611 +vt 0.778906 0.816204 +vt 0.779427 0.813426 +vt 0.779427 0.811574 +vt 0.778906 0.807870 +vt 0.785677 0.800463 +vt 0.780990 0.816204 +vt 0.780990 0.813426 +vt 0.780990 0.812500 +vt 0.780990 0.807870 +vt 0.785677 0.802315 +vt 0.785677 0.808796 +vt 0.794531 0.800463 +vt 0.794531 0.803241 +vt 0.794531 0.807870 +vt 0.792448 0.798611 +vt 0.792448 0.801389 +vt 0.792448 0.803241 +vt 0.792448 0.807870 +vt 0.790365 0.798611 +vt 0.790365 0.801389 +vt 0.790365 0.802315 +vt 0.790365 0.807870 +vt 0.792448 0.816204 +vt 0.790365 0.816204 +vt 0.785677 0.816204 +vt 0.794531 0.814352 +vt 0.792448 0.813426 +vt 0.790365 0.813426 +vt 0.785677 0.814352 +vt 0.794531 0.811574 +vt 0.792448 0.811574 +vt 0.790365 0.812500 +vt 0.785677 0.812500 +vt 0.579948 0.333796 +vt 0.840885 0.862500 +vt 0.578906 0.333796 +vt 0.840885 0.880093 +vt 0.579948 0.331944 +vt 0.579948 0.333796 +vt 0.842969 0.862500 +vt 0.579948 0.333796 +vt 0.579427 0.333796 +vt 0.579948 0.332870 +vt 0.840885 0.864352 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.579427 0.332870 +vt 0.579948 0.332870 +vt 0.840885 0.867130 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.579427 0.332870 +vt 0.579427 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.579427 0.331944 +vt 0.578906 0.333796 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.579427 0.331944 +vt 0.578906 0.333796 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.578906 0.332870 +vt 0.579427 0.332870 +vt 0.579948 0.331944 +vt 0.840885 0.877315 +vt 0.579948 0.332870 +vt 0.840885 0.875463 +vt 0.579948 0.332870 +vt 0.840885 0.870833 +vt 0.579948 0.331944 +vt 0.579948 0.331944 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.579948 0.331944 +vt 0.579948 0.331944 +vt 0.579948 0.332870 +vt 0.579948 0.332870 +vt 0.794531 0.862500 +vt 0.794531 0.880093 +vt 0.776823 0.862500 +vt 0.794531 0.864352 +vt 0.794531 0.867130 +vt 0.794531 0.870833 +vt 0.792448 0.862500 +vt 0.792448 0.864352 +vt 0.792448 0.867130 +vt 0.792448 0.870833 +vt 0.790365 0.862500 +vt 0.790365 0.864352 +vt 0.790365 0.866204 +vt 0.790365 0.870833 +vt 0.787240 0.870833 +vt 0.792448 0.880093 +vt 0.790365 0.880093 +vt 0.776823 0.870833 +vt 0.785677 0.880093 +vt 0.794531 0.877315 +vt 0.792448 0.877315 +vt 0.790365 0.877315 +vt 0.785677 0.877315 +vt 0.778906 0.870833 +vt 0.794531 0.875463 +vt 0.792448 0.875463 +vt 0.790365 0.875463 +vt 0.785677 0.876389 +vt 0.780990 0.870833 +vt 0.778906 0.862500 +vt 0.780990 0.862500 +vt 0.785677 0.862500 +vt 0.776823 0.864352 +vt 0.779427 0.864352 +vt 0.780990 0.864352 +vt 0.785677 0.864352 +vt 0.776823 0.867130 +vt 0.779427 0.867130 +vt 0.780990 0.866204 +vt 0.785677 0.866204 +vt 0.579948 0.340278 +vt 0.840885 0.752315 +vt 0.840885 0.734722 +vt 0.579948 0.342130 +vt 0.575781 0.336574 +vt 0.579948 0.341204 +vt 0.840885 0.750463 +vt 0.579948 0.341204 +vt 0.840885 0.747685 +vt 0.579948 0.341204 +vt 0.840885 0.743981 +vt 0.579948 0.340278 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579948 0.340278 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579427 0.341204 +vt 0.575260 0.336574 +vt 0.579948 0.342130 +vt 0.579948 0.342130 +vt 0.575260 0.336574 +vt 0.579427 0.342130 +vt 0.579948 0.342130 +vt 0.840885 0.737500 +vt 0.579948 0.342130 +vt 0.579948 0.342130 +vt 0.579427 0.342130 +vt 0.575260 0.336574 +vt 0.579948 0.341204 +vt 0.840885 0.739352 +vt 0.579948 0.341204 +vt 0.579948 0.341204 +vt 0.579427 0.341204 +vt 0.575260 0.336574 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.579427 0.340278 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.575781 0.336574 +vt 0.579427 0.341204 +vt 0.575781 0.336574 +vt 0.575260 0.336574 +vt 0.575260 0.336574 +vt 0.575260 0.336574 +vt 0.579427 0.341204 +vt 0.575260 0.336574 +vt 0.794531 0.734722 +vt 0.794531 0.752315 +vt 0.730990 0.816204 +vt 0.794531 0.737500 +vt 0.794531 0.739352 +vt 0.794531 0.743981 +vt 0.792448 0.734722 +vt 0.792448 0.737500 +vt 0.792448 0.739352 +vt 0.792448 0.743981 +vt 0.790365 0.734722 +vt 0.790365 0.737500 +vt 0.790365 0.739352 +vt 0.790365 0.743981 +vt 0.789323 0.743981 +vt 0.785677 0.746759 +vt 0.722135 0.810648 +vt 0.792448 0.752315 +vt 0.790365 0.752315 +vt 0.730990 0.807870 +vt 0.785677 0.752315 +vt 0.794531 0.750463 +vt 0.792448 0.750463 +vt 0.790365 0.750463 +vt 0.785677 0.750463 +vt 0.728906 0.807870 +vt 0.794531 0.747685 +vt 0.792448 0.747685 +vt 0.790365 0.748611 +vt 0.785677 0.748611 +vt 0.726823 0.807870 +vt 0.728906 0.816204 +vt 0.726302 0.816204 +vt 0.722135 0.816204 +vt 0.785677 0.734722 +vt 0.730990 0.814352 +vt 0.728385 0.813426 +vt 0.726302 0.813426 +vt 0.785677 0.737500 +vt 0.722135 0.814352 +vt 0.730990 0.811574 +vt 0.728906 0.811574 +vt 0.726302 0.812500 +vt 0.785677 0.738426 +vt 0.722135 0.812500 +vt 0.840885 0.688426 +vt 0.579948 0.344907 +vt 0.840885 0.926389 +vt 0.579948 0.329167 +vt 0.575781 0.333796 +vt 0.579948 0.344907 +vt 0.840885 0.686574 +vt 0.579948 0.344907 +vt 0.840885 0.684722 +vt 0.579948 0.345833 +vt 0.579948 0.328241 +vt 0.840885 0.934722 +vt 0.840885 0.680093 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.345833 +vt 0.579948 0.328241 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.344907 +vt 0.579948 0.345833 +vt 0.579948 0.328241 +vt 0.579427 0.345833 +vt 0.579427 0.329167 +vt 0.575260 0.332870 +vt 0.579948 0.329167 +vt 0.579948 0.329167 +vt 0.575781 0.332870 +vt 0.579427 0.329167 +vt 0.579948 0.329167 +vt 0.840885 0.928241 +vt 0.579948 0.329167 +vt 0.579948 0.329167 +vt 0.579427 0.329167 +vt 0.575781 0.332870 +vt 0.579948 0.329167 +vt 0.840885 0.930093 +vt 0.579948 0.329167 +vt 0.579948 0.329167 +vt 0.579427 0.329167 +vt 0.575260 0.332870 +vt 0.575781 0.333796 +vt 0.575260 0.333796 +vt 0.575260 0.333796 +vt 0.579427 0.344907 +vt 0.575781 0.332870 +vt 0.575781 0.332870 +vt 0.575260 0.332870 +vt 0.579427 0.344907 +vt 0.575260 0.332870 +vt 0.575781 0.332870 +vt 0.575781 0.332870 +vt 0.575260 0.332870 +vt 0.579427 0.344907 +vt 0.575260 0.332870 +vt 0.730990 0.862500 +vt 0.794531 0.926389 +vt 0.794531 0.688426 +vt 0.730990 0.864352 +vt 0.730990 0.867130 +vt 0.730990 0.870833 +vt 0.785677 0.926389 +vt 0.728906 0.862500 +vt 0.728906 0.864352 +vt 0.728906 0.867130 +vt 0.728906 0.870833 +vt 0.785677 0.928241 +vt 0.726302 0.862500 +vt 0.726302 0.864352 +vt 0.726302 0.866204 +vt 0.726823 0.870833 +vt 0.785677 0.930093 +vt 0.725781 0.870833 +vt 0.789323 0.934722 +vt 0.785677 0.683796 +vt 0.794531 0.928241 +vt 0.794531 0.930093 +vt 0.794531 0.934722 +vt 0.794531 0.680093 +vt 0.792448 0.926389 +vt 0.792448 0.928241 +vt 0.792448 0.930093 +vt 0.792448 0.934722 +vt 0.792448 0.680093 +vt 0.790365 0.926389 +vt 0.790365 0.928241 +vt 0.790365 0.930093 +vt 0.790365 0.934722 +vt 0.790365 0.680093 +vt 0.792448 0.688426 +vt 0.790365 0.688426 +vt 0.722135 0.862500 +vt 0.785677 0.688426 +vt 0.794531 0.686574 +vt 0.792448 0.686574 +vt 0.790365 0.686574 +vt 0.722135 0.864352 +vt 0.785677 0.686574 +vt 0.794531 0.684722 +vt 0.792448 0.684722 +vt 0.790365 0.684722 +vt 0.722135 0.866204 +vt 0.785677 0.684722 +vt 0.778906 0.816204 +vt 0.776823 0.816204 +vt 0.776823 0.814352 +vt 0.779427 0.813426 +vt 0.776823 0.864352 +vt 0.776823 0.862500 +vt 0.778906 0.862500 +vt 0.779427 0.864352 +vt 0.730990 0.814352 +vt 0.730990 0.816204 +vt 0.728906 0.816204 +vt 0.728385 0.813426 +vt 0.728906 0.862500 +vt 0.730990 0.862500 +vt 0.730990 0.864352 +vt 0.728906 0.864352 +s 0 +usemtl CabnetDoors +f 15775/30314/12320 15625/30133/12320 15701/30223/12320 15847/30413/12320 +f 15849/30415/12321 15810/30357/12321 15737/30263/12321 15773/30312/12321 +f 15700/30222/12322 15664/30176/12322 15811/30359/12322 15848/30414/12322 +f 15589/30087/12323 15738/30265/12323 15812/30361/12323 15663/30175/12323 +f 15627/30135/12324 15590/30089/12324 15662/30174/12324 15699/30221/12324 +f 15588/30085/12325 15591/30090/12325 15595/30096/12325 15594/30094/12325 +f 15591/30090/12326 15592/30091/12326 15596/30097/12326 15595/30096/12326 +f 15592/30091/12327 15593/30093/12327 15597/30098/12327 15596/30097/12327 +f 15594/30094/12328 15595/30096/12328 15599/30102/12328 15598/30100/12328 +f 15595/30096/12329 15596/30097/12329 15600/30103/12329 15599/30102/12329 +f 15596/30097/12330 15597/30098/12330 15601/30104/12330 15600/30103/12330 +f 15598/30100/12331 15599/30102/12331 15620/30128/12331 15616/30122/12331 +f 15599/30102/12332 15600/30103/12332 15624/30132/12332 15620/30128/12332 +f 15600/30103/12333 15601/30104/12333 15602/30106/12333 15624/30132/12333 +f 15589/30087/12334 15603/30107/12334 15607/30111/12334 15606/30110/12334 +f 15603/30107/12335 15604/30108/12335 15608/30112/12335 15607/30111/12335 +f 15604/30108/12336 15605/30109/12336 15609/30113/12336 15608/30112/12336 +f 15606/30110/12337 15607/30111/12337 15611/30115/12337 15610/30114/12337 +f 15607/30111/12338 15608/30112/12338 15612/30116/12338 15611/30115/12338 +f 15608/30112/12339 15609/30113/12339 15613/30117/12339 15612/30116/12339 +f 15610/30114/12340 15611/30115/12340 15597/30099/12340 15593/30092/12340 +f 15611/30115/12341 15612/30116/12341 15601/30105/12341 15597/30099/12341 +f 15612/30116/12342 15613/30117/12342 15602/30106/12342 15601/30105/12342 +f 15590/30088/12343 15614/30118/12343 15618/30126/12343 15617/30124/12343 +f 15614/30118/12344 15615/30120/12344 15619/30127/12344 15618/30126/12344 +f 15615/30120/12345 15616/30122/12345 15620/30128/12345 15619/30127/12345 +f 15617/30124/12346 15618/30126/12346 15622/30130/12346 15621/30129/12346 +f 15618/30126/12347 15619/30127/12347 15623/30131/12347 15622/30130/12347 +f 15619/30127/12348 15620/30128/12348 15624/30132/12348 15623/30131/12348 +f 15621/30129/12349 15622/30130/12349 15609/30113/12349 15605/30109/12349 +f 15622/30130/12350 15623/30131/12350 15613/30117/12350 15609/30113/12350 +f 15623/30131/12351 15624/30132/12351 15602/30106/12351 15613/30117/12351 +f 15802/30347/12324 15775/30314/12324 15893/30470/12324 15892/30469/12324 +f 15628/30136/12352 15629/30137/12352 15633/30142/12352 15632/30141/12352 +f 15629/30137/12353 15630/30138/12353 15634/30143/12353 15633/30142/12353 +f 15631/30140/12354 15632/30141/12354 15636/30146/12354 15635/30145/12354 +f 15632/30141/12355 15633/30142/12355 15637/30147/12355 15636/30146/12355 +f 15633/30142/12356 15634/30143/12356 15638/30148/12356 15637/30147/12356 +f 15635/30145/12357 15636/30146/12357 15657/30168/12357 15653/30164/12357 +f 15636/30146/12358 15637/30147/12358 15661/30172/12358 15657/30168/12358 +f 15637/30147/12359 15638/30148/12359 15639/30150/12359 15661/30172/12359 +f 15626/30134/12360 15640/30151/12360 15644/30155/12360 15643/30154/12360 +f 15640/30151/12361 15641/30152/12361 15645/30156/12361 15644/30155/12361 +f 15641/30152/12362 15642/30153/12362 15646/30157/12362 15645/30156/12362 +f 15643/30154/12363 15644/30155/12363 15648/30159/12363 15647/30158/12363 +f 15644/30155/12364 15645/30156/12364 15649/30160/12364 15648/30159/12364 +f 15645/30156/12365 15646/30157/12365 15650/30161/12365 15649/30160/12365 +f 15647/30158/12366 15648/30159/12366 15634/30144/12366 15630/30139/12366 +f 15648/30159/12367 15649/30160/12367 15638/30149/12367 15634/30144/12367 +f 15649/30160/12368 15650/30161/12368 15639/30150/12368 15638/30149/12368 +f 15627/30135/12369 15651/30162/12369 15655/30166/12369 15654/30165/12369 +f 15651/30162/12370 15652/30163/12370 15656/30167/12370 15655/30166/12370 +f 15652/30163/12371 15653/30164/12371 15657/30168/12371 15656/30167/12371 +f 15654/30165/12372 15655/30166/12372 15659/30170/12372 15658/30169/12372 +f 15655/30166/12373 15656/30167/12373 15660/30171/12373 15659/30170/12373 +f 15656/30167/12374 15657/30168/12374 15661/30172/12374 15660/30171/12374 +f 15658/30169/12375 15659/30170/12375 15646/30157/12375 15642/30153/12375 +f 15659/30170/12376 15660/30171/12376 15650/30161/12376 15646/30157/12376 +f 15660/30171/12377 15661/30172/12377 15639/30150/12377 15650/30161/12377 +f 15662/30173/12378 15665/30178/12378 15669/30184/12378 15668/30182/12378 +f 15665/30178/12379 15666/30180/12379 15670/30185/12379 15669/30184/12379 +f 15666/30180/12380 15667/30181/12380 15671/30186/12380 15670/30185/12380 +f 15668/30182/12381 15669/30184/12381 15673/30189/12381 15672/30187/12381 +f 15669/30184/12382 15670/30185/12382 15674/30190/12382 15673/30189/12382 +f 15670/30185/12383 15671/30186/12383 15675/30191/12383 15674/30190/12383 +f 15672/30187/12384 15673/30189/12384 15694/30216/12384 15690/30211/12384 +f 15673/30189/12385 15674/30190/12385 15698/30220/12385 15694/30216/12385 +f 15674/30190/12386 15675/30191/12386 15676/30192/12386 15698/30220/12386 +f 15663/30175/12387 15677/30193/12387 15681/30198/12387 15680/30197/12387 +f 15677/30193/12388 15678/30194/12388 15682/30199/12388 15681/30198/12388 +f 15678/30194/12389 15679/30195/12389 15683/30200/12389 15682/30199/12389 +f 15680/30197/12390 15681/30198/12390 15685/30203/12390 15684/30202/12390 +f 15681/30198/12391 15682/30199/12391 15686/30204/12391 15685/30203/12391 +f 15682/30199/12392 15683/30200/12392 15687/30205/12392 15686/30204/12392 +f 15684/30202/12393 15685/30203/12393 15671/30186/12393 15667/30181/12393 +f 15685/30203/12394 15686/30204/12394 15675/30191/12394 15671/30186/12394 +f 15686/30204/12395 15687/30205/12395 15676/30192/12395 15675/30191/12395 +f 15664/30177/12396 15688/30207/12396 15692/30214/12396 15691/30213/12396 +f 15688/30207/12397 15689/30209/12397 15693/30215/12397 15692/30214/12397 +f 15689/30209/12398 15690/30211/12398 15694/30216/12398 15693/30215/12398 +f 15691/30213/12399 15692/30214/12399 15696/30218/12399 15695/30217/12399 +f 15692/30214/12400 15693/30215/12400 15697/30219/12400 15696/30218/12400 +f 15693/30215/12401 15694/30216/12401 15698/30220/12401 15697/30219/12401 +f 15695/30217/12402 15696/30218/12402 15683/30201/12402 15679/30196/12402 +f 15696/30218/12403 15697/30219/12403 15687/30206/12403 15683/30201/12403 +f 15697/30219/12404 15698/30220/12404 15676/30192/12404 15687/30206/12404 +f 15699/30221/12405 15702/30224/12405 15706/30228/12405 15705/30227/12405 +f 15702/30224/12406 15703/30225/12406 15707/30229/12406 15706/30228/12406 +f 15703/30225/12407 15704/30226/12407 15708/30230/12407 15707/30229/12407 +f 15705/30227/12408 15706/30228/12408 15710/30232/12408 15709/30231/12408 +f 15706/30228/12409 15707/30229/12409 15711/30233/12409 15710/30232/12409 +f 15707/30229/12410 15708/30230/12410 15712/30234/12410 15711/30233/12410 +f 15709/30231/12411 15710/30232/12411 15731/30256/12411 15727/30252/12411 +f 15710/30232/12412 15711/30233/12412 15735/30260/12412 15731/30256/12412 +f 15711/30233/12413 15712/30234/12413 15713/30235/12413 15735/30260/12413 +f 15700/30222/12414 15714/30236/12414 15718/30241/12414 15717/30240/12414 +f 15714/30236/12415 15715/30237/12415 15719/30242/12415 15718/30241/12415 +f 15715/30237/12416 15716/30239/12416 15720/30243/12416 15719/30242/12416 +f 15717/30240/12417 15718/30241/12417 15722/30246/12417 15721/30245/12417 +f 15718/30241/12418 15719/30242/12418 15723/30247/12418 15722/30246/12418 +f 15719/30242/12419 15720/30243/12419 15724/30248/12419 15723/30247/12419 +f 15721/30245/12420 15722/30246/12420 15708/30230/12420 15704/30226/12420 +f 15722/30246/12421 15723/30247/12421 15712/30234/12421 15708/30230/12421 +f 15723/30247/12422 15724/30248/12422 15713/30235/12422 15712/30234/12422 +f 15728/30253/12321 15701/30223/12321 15889/30466/12321 15888/30465/12321 +f 15725/30250/12423 15726/30251/12423 15730/30255/12423 15729/30254/12423 +f 15726/30251/12424 15727/30252/12424 15731/30256/12424 15730/30255/12424 +f 15728/30253/12425 15729/30254/12425 15733/30258/12425 15732/30257/12425 +f 15729/30254/12426 15730/30255/12426 15734/30259/12426 15733/30258/12426 +f 15730/30255/12427 15731/30256/12427 15735/30260/12427 15734/30259/12427 +f 15732/30257/12428 15733/30258/12428 15720/30244/12428 15716/30238/12428 +f 15733/30258/12429 15734/30259/12429 15724/30249/12429 15720/30244/12429 +f 15734/30259/12430 15735/30260/12430 15713/30235/12430 15724/30249/12430 +f 15736/30261/12431 15739/30266/12431 15743/30273/12431 15742/30272/12431 +f 15739/30266/12432 15740/30268/12432 15744/30274/12432 15743/30273/12432 +f 15740/30268/12433 15741/30270/12433 15745/30275/12433 15744/30274/12433 +f 15742/30272/12434 15743/30273/12434 15747/30277/12434 15746/30276/12434 +f 15743/30273/12435 15744/30274/12435 15748/30278/12435 15747/30277/12435 +f 15744/30274/12436 15745/30275/12436 15749/30279/12436 15748/30278/12436 +f 15746/30276/12437 15747/30277/12437 15768/30305/12437 15764/30301/12437 +f 15747/30277/12438 15748/30278/12438 15772/30310/12438 15768/30305/12438 +f 15748/30278/12439 15749/30279/12439 15750/30280/12439 15772/30310/12439 +f 15737/30264/12440 15751/30282/12440 15755/30288/12440 15754/30286/12440 +f 15751/30282/12441 15752/30283/12441 15756/30289/12441 15755/30288/12441 +f 15752/30283/12442 15753/30285/12442 15757/30290/12442 15756/30289/12442 +f 15754/30286/12443 15755/30288/12443 15759/30294/12443 15758/30292/12443 +f 15755/30288/12444 15756/30289/12444 15760/30295/12444 15759/30294/12444 +f 15756/30289/12445 15757/30290/12445 15761/30296/12445 15760/30295/12445 +f 15758/30292/12446 15759/30294/12446 15745/30275/12446 15741/30270/12446 +f 15759/30294/12447 15760/30295/12447 15749/30279/12447 15745/30275/12447 +f 15760/30295/12448 15761/30296/12448 15750/30280/12448 15749/30279/12448 +f 15738/30265/12449 15762/30298/12449 15766/30303/12449 15765/30302/12449 +f 15762/30298/12450 15763/30299/12450 15767/30304/12450 15766/30303/12450 +f 15763/30299/12451 15764/30300/12451 15768/30306/12451 15767/30304/12451 +f 15765/30302/12452 15766/30303/12452 15770/30308/12452 15769/30307/12452 +f 15766/30303/12453 15767/30304/12453 15771/30309/12453 15770/30308/12453 +f 15767/30304/12454 15768/30306/12454 15772/30311/12454 15771/30309/12454 +f 15769/30307/12455 15770/30308/12455 15757/30291/12455 15753/30284/12455 +f 15770/30308/12456 15771/30309/12456 15761/30297/12456 15757/30291/12456 +f 15771/30309/12457 15772/30311/12457 15750/30281/12457 15761/30297/12457 +f 15773/30312/12458 15776/30315/12458 15780/30319/12458 15779/30318/12458 +f 15776/30315/12459 15777/30316/12459 15781/30320/12459 15780/30319/12459 +f 15777/30316/12460 15778/30317/12460 15782/30321/12460 15781/30320/12460 +f 15779/30318/12461 15780/30319/12461 15784/30323/12461 15783/30322/12461 +f 15780/30319/12462 15781/30320/12462 15785/30324/12462 15784/30323/12462 +f 15781/30320/12463 15782/30321/12463 15786/30325/12463 15785/30324/12463 +f 15783/30322/12464 15784/30323/12464 15805/30350/12464 15801/30346/12464 +f 15784/30323/12465 15785/30324/12465 15809/30355/12465 15805/30350/12465 +f 15785/30324/12466 15786/30325/12466 15787/30326/12466 15809/30355/12466 +f 15774/30313/12467 15788/30329/12467 15792/30334/12467 15791/30333/12467 +f 15788/30329/12468 15789/30330/12468 15793/30335/12468 15792/30334/12468 +f 15789/30330/12469 15790/30332/12469 15794/30336/12469 15793/30335/12469 +f 15791/30333/12470 15792/30334/12470 15796/30339/12470 15795/30338/12470 +f 15792/30334/12471 15793/30335/12471 15797/30340/12471 15796/30339/12471 +f 15793/30335/12472 15794/30336/12472 15798/30341/12472 15797/30340/12472 +f 15795/30338/12473 15796/30339/12473 15782/30321/12473 15778/30317/12473 +f 15796/30339/12474 15797/30340/12474 15786/30325/12474 15782/30321/12474 +f 15797/30340/12475 15798/30341/12475 15787/30327/12475 15786/30325/12475 +f 15853/30420/12476 15847/30413/12476 15897/30474/12476 15896/30473/12476 +f 15799/30343/12477 15800/30344/12477 15804/30349/12477 15803/30348/12477 +f 15800/30344/12478 15801/30345/12478 15805/30351/12478 15804/30349/12478 +f 15802/30347/12479 15803/30348/12479 15807/30353/12479 15806/30352/12479 +f 15803/30348/12480 15804/30349/12480 15808/30354/12480 15807/30353/12480 +f 15804/30349/12481 15805/30351/12481 15809/30356/12481 15808/30354/12481 +f 15806/30352/12482 15807/30353/12482 15794/30337/12482 15790/30331/12482 +f 15807/30353/12483 15808/30354/12483 15798/30342/12483 15794/30337/12483 +f 15808/30354/12484 15809/30356/12484 15787/30328/12484 15798/30342/12484 +f 15810/30358/12485 15813/30362/12485 15817/30371/12485 15816/30370/12485 +f 15813/30362/12486 15814/30364/12486 15818/30372/12486 15817/30371/12486 +f 15814/30364/12487 15815/30366/12487 15819/30373/12487 15818/30372/12487 +f 15816/30370/12488 15817/30371/12488 15821/30376/12488 15820/30375/12488 +f 15817/30371/12489 15818/30372/12489 15822/30377/12489 15821/30376/12489 +f 15818/30372/12490 15819/30373/12490 15823/30378/12490 15822/30377/12490 +f 15820/30375/12491 15821/30376/12491 15842/30406/12491 15838/30402/12491 +f 15821/30376/12492 15822/30377/12492 15846/30411/12492 15842/30406/12492 +f 15822/30377/12493 15823/30378/12493 15824/30380/12493 15846/30411/12493 +f 15811/30360/12494 15825/30383/12494 15829/30389/12494 15828/30387/12494 +f 15825/30383/12495 15826/30384/12495 15830/30390/12495 15829/30389/12495 +f 15826/30384/12496 15827/30386/12496 15831/30391/12496 15830/30390/12496 +f 15828/30387/12497 15829/30389/12497 15833/30395/12497 15832/30393/12497 +f 15829/30389/12498 15830/30390/12498 15834/30396/12498 15833/30395/12498 +f 15830/30390/12499 15831/30391/12499 15835/30397/12499 15834/30396/12499 +f 15832/30393/12500 15833/30395/12500 15819/30374/12500 15815/30367/12500 +f 15833/30395/12501 15834/30396/12501 15823/30379/12501 15819/30374/12501 +f 15834/30396/12502 15835/30397/12502 15824/30381/12502 15823/30379/12502 +f 15812/30361/12503 15836/30399/12503 15840/30404/12503 15839/30403/12503 +f 15836/30399/12504 15837/30400/12504 15841/30405/12504 15840/30404/12504 +f 15837/30400/12505 15838/30401/12505 15842/30407/12505 15841/30405/12505 +f 15839/30403/12506 15840/30404/12506 15844/30409/12506 15843/30408/12506 +f 15840/30404/12507 15841/30405/12507 15845/30410/12507 15844/30409/12507 +f 15841/30405/12508 15842/30407/12508 15846/30412/12508 15845/30410/12508 +f 15843/30408/12509 15844/30409/12509 15831/30392/12509 15827/30385/12509 +f 15844/30409/12510 15845/30410/12510 15835/30398/12510 15831/30392/12510 +f 15845/30410/12511 15846/30412/12511 15824/30382/12511 15835/30398/12511 +f 15631/30140/12322 15625/30133/12322 15885/30462/12322 15884/30461/12322 +f 15850/30416/12512 15851/30417/12512 15855/30422/12512 15854/30421/12512 +f 15851/30417/12513 15852/30418/12513 15856/30423/12513 15855/30422/12513 +f 15853/30420/12514 15854/30421/12514 15858/30426/12514 15857/30425/12514 +f 15854/30421/12515 15855/30422/12515 15859/30427/12515 15858/30426/12515 +f 15855/30422/12516 15856/30423/12516 15860/30428/12516 15859/30427/12516 +f 15857/30425/12517 15858/30426/12517 15879/30454/12517 15875/30449/12517 +f 15858/30426/12518 15859/30427/12518 15883/30459/12518 15879/30454/12518 +f 15859/30427/12519 15860/30428/12519 15861/30430/12519 15883/30459/12519 +f 15848/30414/12520 15862/30433/12520 15866/30438/12520 15865/30437/12520 +f 15862/30433/12521 15863/30434/12521 15867/30439/12521 15866/30438/12521 +f 15863/30434/12522 15864/30435/12522 15868/30440/12522 15867/30439/12522 +f 15865/30437/12523 15866/30438/12523 15870/30443/12523 15869/30442/12523 +f 15866/30438/12524 15867/30439/12524 15871/30444/12524 15870/30443/12524 +f 15867/30439/12525 15868/30440/12525 15872/30445/12525 15871/30444/12525 +f 15869/30442/12526 15870/30443/12526 15856/30424/12526 15852/30419/12526 +f 15870/30443/12527 15871/30444/12527 15860/30429/12527 15856/30424/12527 +f 15871/30444/12528 15872/30445/12528 15861/30431/12528 15860/30429/12528 +f 15849/30415/12529 15873/30447/12529 15877/30452/12529 15876/30451/12529 +f 15873/30447/12530 15874/30448/12530 15878/30453/12530 15877/30452/12530 +f 15874/30448/12531 15875/30450/12531 15879/30455/12531 15878/30453/12531 +f 15876/30451/12532 15877/30452/12532 15881/30457/12532 15880/30456/12532 +f 15877/30452/12533 15878/30453/12533 15882/30458/12533 15881/30457/12533 +f 15878/30453/12534 15879/30455/12534 15883/30460/12534 15882/30458/12534 +f 15880/30456/12535 15881/30457/12535 15868/30441/12535 15864/30436/12535 +f 15881/30457/12536 15882/30458/12536 15872/30446/12536 15868/30441/12536 +f 15882/30458/12537 15883/30460/12537 15861/30432/12537 15872/30446/12537 +f 15775/30314/12538 15847/30413/12538 15853/30420/12538 15799/30343/12538 +f 15799/30343/12539 15853/30420/12539 15857/30425/12539 15800/30344/12539 +f 15800/30344/12540 15857/30425/12540 15875/30449/12540 15801/30345/12540 +f 15801/30346/12541 15875/30450/12541 15874/30448/12541 15783/30322/12541 +f 15783/30322/12542 15874/30448/12542 15873/30447/12542 15779/30318/12542 +f 15779/30318/12543 15873/30447/12543 15849/30415/12543 15773/30312/12543 +f 15625/30133/12544 15775/30314/12544 15802/30347/12544 15628/30136/12544 +f 15628/30136/12545 15802/30347/12545 15806/30352/12545 15629/30137/12545 +f 15629/30137/12546 15806/30352/12546 15790/30331/12546 15630/30138/12546 +f 15630/30139/12547 15790/30332/12547 15789/30330/12547 15647/30158/12547 +f 15647/30158/12548 15789/30330/12548 15788/30329/12548 15643/30154/12548 +f 15643/30154/12549 15788/30329/12549 15774/30313/12549 15626/30134/12549 +f 15590/30089/12550 15627/30135/12550 15654/30165/12550 15614/30119/12550 +f 15614/30119/12551 15654/30165/12551 15658/30169/12551 15615/30121/12551 +f 15615/30121/12552 15658/30169/12552 15642/30153/12552 15616/30123/12552 +f 15616/30123/12553 15642/30153/12553 15641/30152/12553 15598/30101/12553 +f 15598/30101/12554 15641/30152/12554 15640/30151/12554 15594/30095/12554 +f 15594/30095/12555 15640/30151/12555 15626/30134/12555 15588/30086/12555 +f 15848/30414/12556 15811/30359/12556 15828/30388/12556 15862/30433/12556 +f 15862/30433/12557 15828/30388/12557 15832/30394/12557 15863/30434/12557 +f 15863/30434/12558 15832/30394/12558 15815/30368/12558 15864/30435/12558 +f 15864/30436/12559 15815/30369/12559 15814/30365/12559 15880/30456/12559 +f 15880/30456/12560 15814/30365/12560 15813/30363/12560 15876/30451/12560 +f 15876/30451/12561 15813/30363/12561 15810/30357/12561 15849/30415/12561 +f 15664/30176/12562 15700/30222/12562 15717/30240/12562 15688/30208/12562 +f 15688/30208/12563 15717/30240/12563 15721/30245/12563 15689/30210/12563 +f 15689/30210/12564 15721/30245/12564 15704/30226/12564 15690/30212/12564 +f 15690/30212/12565 15704/30226/12565 15703/30225/12565 15672/30188/12565 +f 15672/30188/12566 15703/30225/12566 15702/30224/12566 15668/30183/12566 +f 15668/30183/12567 15702/30224/12567 15699/30221/12567 15662/30174/12567 +f 15736/30262/12568 15774/30313/12568 15791/30333/12568 15739/30267/12568 +f 15739/30267/12569 15791/30333/12569 15795/30338/12569 15740/30269/12569 +f 15740/30269/12570 15795/30338/12570 15778/30317/12570 15741/30271/12570 +f 15741/30271/12571 15778/30317/12571 15777/30316/12571 15758/30293/12571 +f 15758/30293/12572 15777/30316/12572 15776/30315/12572 15754/30287/12572 +f 15754/30287/12573 15776/30315/12573 15773/30312/12573 15737/30263/12573 +f 15663/30175/12574 15812/30361/12574 15839/30403/12574 15677/30193/12574 +f 15677/30193/12575 15839/30403/12575 15843/30408/12575 15678/30194/12575 +f 15678/30194/12576 15843/30408/12576 15827/30385/12576 15679/30195/12576 +f 15679/30196/12577 15827/30386/12577 15826/30384/12577 15695/30217/12577 +f 15695/30217/12578 15826/30384/12578 15825/30383/12578 15691/30213/12578 +f 15691/30213/12579 15825/30383/12579 15811/30360/12579 15664/30177/12579 +f 15589/30087/12580 15663/30175/12580 15680/30197/12580 15603/30107/12580 +f 15603/30107/12581 15680/30197/12581 15684/30202/12581 15604/30108/12581 +f 15604/30108/12582 15684/30202/12582 15667/30181/12582 15605/30109/12582 +f 15605/30109/12583 15667/30181/12583 15666/30180/12583 15621/30129/12583 +f 15621/30129/12584 15666/30180/12584 15665/30178/12584 15617/30124/12584 +f 15617/30125/12585 15665/30179/12585 15662/30174/12585 15590/30089/12585 +f 15847/30413/12586 15701/30223/12586 15728/30253/12586 15850/30416/12586 +f 15850/30416/12587 15728/30253/12587 15732/30257/12587 15851/30417/12587 +f 15851/30417/12588 15732/30257/12588 15716/30238/12588 15852/30418/12588 +f 15852/30419/12589 15716/30239/12589 15715/30237/12589 15869/30442/12589 +f 15869/30442/12590 15715/30237/12590 15714/30236/12590 15865/30437/12590 +f 15865/30437/12591 15714/30236/12591 15700/30222/12591 15848/30414/12591 +f 15812/30361/12592 15738/30265/12592 15765/30302/12592 15836/30399/12592 +f 15836/30399/12593 15765/30302/12593 15769/30307/12593 15837/30400/12593 +f 15837/30400/12594 15769/30307/12594 15753/30284/12594 15838/30401/12594 +f 15838/30402/12595 15753/30285/12595 15752/30283/12595 15820/30375/12595 +f 15820/30375/12596 15752/30283/12596 15751/30282/12596 15816/30370/12596 +f 15816/30370/12597 15751/30282/12597 15737/30264/12597 15810/30358/12597 +f 15738/30265/12598 15589/30087/12598 15606/30110/12598 15762/30298/12598 +f 15762/30298/12599 15606/30110/12599 15610/30114/12599 15763/30299/12599 +f 15763/30299/12600 15610/30114/12600 15593/30092/12600 15764/30300/12600 +f 15764/30301/12601 15593/30093/12601 15592/30091/12601 15746/30276/12601 +f 15746/30276/12602 15592/30091/12602 15591/30090/12602 15742/30272/12602 +f 15742/30272/12603 15591/30090/12603 15588/30085/12603 15736/30261/12603 +f 15701/30223/12604 15625/30133/12604 15631/30140/12604 15725/30250/12604 +f 15725/30250/12605 15631/30140/12605 15635/30145/12605 15726/30251/12605 +f 15726/30251/12606 15635/30145/12606 15653/30164/12606 15727/30252/12606 +f 15727/30252/12607 15653/30164/12607 15652/30163/12607 15709/30231/12607 +f 15709/30231/12608 15652/30163/12608 15651/30162/12608 15705/30227/12608 +f 15705/30227/12609 15651/30162/12609 15627/30135/12609 15699/30221/12609 +f 15774/30313/12476 15736/30262/12476 15588/30086/12476 15626/30134/12476 +f 15885/30462/12610 15886/30463/12610 15887/30464/12610 15884/30461/12610 +f 15889/30466/12611 15890/30467/12611 15891/30468/12611 15888/30465/12611 +f 15893/30470/12612 15894/30471/12612 15895/30472/12612 15892/30469/12612 +f 15897/30474/12613 15898/30475/12613 15899/30476/12613 15896/30473/12613 +f 15625/30133/12321 15628/30136/12321 15886/30463/12321 15885/30462/12321 +f 15847/30413/12324 15850/30416/12324 15898/30475/12324 15897/30474/12324 +f 15701/30223/12476 15725/30250/12476 15890/30467/12476 15889/30466/12476 +f 15775/30314/12322 15799/30343/12322 15894/30471/12322 15893/30470/12322 +f 15628/30136/12614 15632/30141/12614 15887/30464/12614 15886/30463/12614 +f 15850/30416/12615 15854/30421/12615 15899/30476/12615 15898/30475/12615 +f 15725/30250/12616 15729/30254/12616 15891/30468/12616 15890/30467/12616 +f 15799/30343/12617 15803/30348/12617 15895/30472/12617 15894/30471/12617 +f 15632/30141/12618 15631/30140/12618 15884/30461/12618 15887/30464/12618 +f 15854/30421/12619 15853/30420/12619 15896/30473/12619 15899/30476/12619 +f 15729/30254/12620 15728/30253/12620 15888/30465/12620 15891/30468/12620 +f 15803/30348/12621 15802/30347/12621 15892/30469/12621 15895/30472/12621 +o Cylinder +v -8.380784 0.655249 -1.073761 +v -8.380784 0.621995 -1.073761 +v -8.277054 0.655249 -1.083977 +v -8.277054 0.621995 -1.083977 +v -8.177309 0.655249 -1.114234 +v -8.177309 0.621995 -1.114234 +v -8.085384 0.655249 -1.163369 +v -8.085384 0.621995 -1.163369 +v -8.004811 0.655249 -1.229493 +v -8.004811 0.621995 -1.229493 +v -7.938687 0.655249 -1.310066 +v -7.938687 0.621996 -1.310066 +v -7.889553 0.655250 -1.401991 +v -7.889553 0.621996 -1.401991 +v -7.859295 0.655250 -1.501735 +v -7.859295 0.621996 -1.501735 +v -7.849079 0.655250 -1.605466 +v -7.849079 0.621996 -1.605466 +v -7.859295 0.655250 -1.709196 +v -7.859295 0.621996 -1.709196 +v -7.889552 0.655250 -1.808941 +v -7.889552 0.621996 -1.808941 +v -7.938687 0.655250 -1.900866 +v -7.938687 0.621996 -1.900866 +v -8.004811 0.655250 -1.981438 +v -8.004811 0.621996 -1.981438 +v -8.085384 0.655250 -2.047563 +v -8.085384 0.621996 -2.047563 +v -8.177309 0.655250 -2.096698 +v -8.177309 0.621996 -2.096698 +v -8.277054 0.655250 -2.126955 +v -8.277054 0.621996 -2.126955 +v -8.380784 0.655250 -2.137171 +v -8.380784 0.621996 -2.137171 +v -8.484514 0.655250 -2.126955 +v -8.484514 0.621996 -2.126955 +v -8.584259 0.655250 -2.096698 +v -8.584259 0.621996 -2.096698 +v -8.676184 0.655250 -2.047563 +v -8.676184 0.621996 -2.047563 +v -8.756757 0.655250 -1.981438 +v -8.756757 0.621996 -1.981438 +v -8.822881 0.655250 -1.900866 +v -8.822881 0.621996 -1.900866 +v -8.872016 0.655250 -1.808941 +v -8.872016 0.621996 -1.808941 +v -8.902273 0.655250 -1.709196 +v -8.902273 0.621996 -1.709196 +v -8.912489 0.655250 -1.605466 +v -8.912489 0.621996 -1.605466 +v -8.902273 0.655250 -1.501735 +v -8.902273 0.621996 -1.501735 +v -8.872016 0.655250 -1.401991 +v -8.872016 0.621996 -1.401991 +v -8.822881 0.655249 -1.310066 +v -8.822881 0.621996 -1.310066 +v -8.756757 0.655249 -1.229493 +v -8.756757 0.621995 -1.229493 +v -8.676184 0.655249 -1.163369 +v -8.676184 0.621995 -1.163369 +v -8.584259 0.655249 -1.114234 +v -8.584259 0.621995 -1.114234 +v -8.484514 0.655249 -1.083977 +v -8.484514 0.621995 -1.083977 +vn 0.0521 -0.0000 0.5291 +vn 0.1543 -0.0000 0.5088 +vn 0.2506 -0.0000 0.4689 +vn 0.3373 -0.0000 0.4110 +vn 0.4110 -0.0000 0.3373 +vn 0.4689 -0.0000 0.2506 +vn 0.5088 -0.0000 0.1543 +vn 0.5291 -0.0000 0.0521 +vn 0.5291 -0.0000 -0.0521 +vn 0.5088 -0.0000 -0.1543 +vn 0.4689 -0.0000 -0.2506 +vn 0.4110 -0.0000 -0.3373 +vn 0.3373 -0.0000 -0.4110 +vn 0.2506 -0.0000 -0.4689 +vn 0.1543 -0.0000 -0.5088 +vn 0.0521 -0.0000 -0.5291 +vn -0.0521 -0.0000 -0.5291 +vn -0.1543 -0.0000 -0.5088 +vn -0.2506 -0.0000 -0.4689 +vn -0.3373 -0.0000 -0.4110 +vn -0.4110 -0.0000 -0.3373 +vn -0.4689 -0.0000 -0.2506 +vn -0.5088 -0.0000 -0.1543 +vn -0.5291 -0.0000 -0.0521 +vn -0.5291 -0.0000 0.0521 +vn -0.5088 -0.0000 0.1543 +vn -0.4689 -0.0000 0.2506 +vn -0.4110 -0.0000 0.3373 +vn -0.3373 -0.0000 0.4110 +vn -0.2506 -0.0000 0.4689 +vn -0.0000 -0.0166 -0.0000 +vn -0.1543 -0.0000 0.5088 +vn -0.0521 -0.0000 0.5291 +vn -0.0000 0.0166 -0.0000 +vt 0.931510 0.308796 +vt 0.776302 0.308796 +vt 0.859115 0.593982 +vt 0.931510 0.386574 +vt 0.883073 0.477315 +vt 0.776302 0.386574 +vt 0.926823 0.308796 +vt 0.873698 0.589352 +vt 0.926823 0.386574 +vt 0.898177 0.474537 +vt 0.922135 0.308796 +vt 0.887240 0.575463 +vt 0.922135 0.386574 +vt 0.912760 0.465278 +vt 0.916927 0.308796 +vt 0.933073 0.232870 +vt 0.899740 0.553241 +vt 0.916927 0.386574 +vt 0.933073 0.538426 +vt 0.925781 0.451389 +vt 0.913802 0.232870 +vt 0.911198 0.523611 +vt 0.913802 0.538426 +vt 0.937240 0.432870 +vt 0.895052 0.232870 +vt 0.920052 0.487500 +vt 0.895052 0.538426 +vt 0.947135 0.409722 +vt 0.875781 0.232870 +vt 0.926823 0.445833 +vt 0.875781 0.538426 +vt 0.953906 0.383796 +vt 0.857031 0.232870 +vt 0.930990 0.401389 +vt 0.857031 0.538426 +vt 0.958073 0.355093 +vt 0.837760 0.232870 +vt 0.932552 0.354167 +vt 0.837760 0.538426 +vt 0.959635 0.325463 +vt 0.819010 0.232870 +vt 0.930990 0.306944 +vt 0.819010 0.538426 +vt 0.958073 0.295833 +vt 0.799740 0.232870 +vt 0.938281 0.287500 +vt 0.926823 0.262500 +vt 0.799740 0.538426 +vt 0.938281 0.504167 +vt 0.953906 0.267130 +vt 0.924740 0.287500 +vt 0.920052 0.220833 +vt 0.924740 0.504167 +vt 0.947135 0.241204 +vt 0.911198 0.287500 +vt 0.911198 0.184722 +vt 0.911198 0.504167 +vt 0.937240 0.218056 +vt 0.897656 0.287500 +vt 0.899740 0.154167 +vt 0.897656 0.504167 +vt 0.925781 0.199537 +vt 0.884115 0.287500 +vt 0.887240 0.131944 +vt 0.884115 0.504167 +vt 0.912760 0.184722 +vt 0.870573 0.287500 +vt 0.873698 0.118981 +vt 0.870573 0.504167 +vt 0.898177 0.176389 +vt 0.857031 0.287500 +vt 0.859115 0.114352 +vt 0.857031 0.504167 +vt 0.883073 0.173611 +vt 0.843490 0.287500 +vt 0.844531 0.118981 +vt 0.843490 0.504167 +vt 0.868490 0.176389 +vt 0.829948 0.287500 +vt 0.830990 0.131944 +vt 0.829948 0.504167 +vt 0.853906 0.184722 +vt 0.816406 0.287500 +vt 0.818490 0.154167 +vt 0.816406 0.504167 +vt 0.840885 0.199537 +vt 0.802865 0.287500 +vt 0.807031 0.184722 +vt 0.802865 0.504167 +vt 0.829427 0.218056 +vt 0.789323 0.287500 +vt 0.798177 0.220833 +vt 0.789323 0.504167 +vt 0.819531 0.241204 +vt 0.775781 0.287500 +vt 0.938281 0.093056 +vt 0.791406 0.262500 +vt 0.775781 0.504167 +vt 0.938281 0.593056 +vt 0.812760 0.267130 +vt 0.907031 0.093056 +vt 0.787240 0.306944 +vt 0.907031 0.593056 +vt 0.808594 0.295833 +vt 0.875781 0.093056 +vt 0.785677 0.354167 +vt 0.875781 0.593056 +vt 0.807031 0.325463 +vt 0.844531 0.093056 +vt 0.787240 0.401389 +vt 0.844531 0.593056 +vt 0.808594 0.355093 +vt 0.813281 0.093056 +vt 0.791406 0.445833 +vt 0.813281 0.593056 +vt 0.812760 0.383796 +vt 0.782031 0.093056 +vt 0.800260 0.308796 +vt 0.798177 0.487500 +vt 0.782031 0.593056 +vt 0.800260 0.386574 +vt 0.819531 0.409722 +vt 0.795573 0.308796 +vt 0.807031 0.523611 +vt 0.795573 0.386574 +vt 0.829427 0.432870 +vt 0.790885 0.308796 +vt 0.818490 0.553241 +vt 0.790885 0.386574 +vt 0.840885 0.451389 +vt 0.785677 0.308796 +vt 0.830990 0.575463 +vt 0.853906 0.465278 +vt 0.785677 0.386574 +vt 0.780990 0.308796 +vt 0.844531 0.589352 +vt 0.868490 0.474537 +vt 0.780990 0.386574 +s 0 +usemtl Generic_walls +f 15900/30477/12622 15901/30480/12622 15903/30485/12622 15902/30483/12622 +f 15902/30483/12623 15903/30485/12623 15905/30489/12623 15904/30487/12623 +f 15904/30487/12624 15905/30489/12624 15907/30494/12624 15906/30491/12624 +f 15906/30492/12625 15907/30495/12625 15909/30499/12625 15908/30497/12625 +f 15908/30497/12626 15909/30499/12626 15911/30503/12626 15910/30501/12626 +f 15910/30501/12627 15911/30503/12627 15913/30507/12627 15912/30505/12627 +f 15912/30505/12628 15913/30507/12628 15915/30511/12628 15914/30509/12628 +f 15914/30509/12629 15915/30511/12629 15917/30515/12629 15916/30513/12629 +f 15916/30513/12630 15917/30515/12630 15919/30519/12630 15918/30517/12630 +f 15918/30517/12631 15919/30519/12631 15921/30524/12631 15920/30521/12631 +f 15920/30522/12632 15921/30525/12632 15923/30529/12632 15922/30527/12632 +f 15922/30527/12633 15923/30529/12633 15925/30533/12633 15924/30531/12633 +f 15924/30531/12634 15925/30533/12634 15927/30537/12634 15926/30535/12634 +f 15926/30535/12635 15927/30537/12635 15929/30541/12635 15928/30539/12635 +f 15928/30539/12636 15929/30541/12636 15931/30545/12636 15930/30543/12636 +f 15930/30543/12637 15931/30545/12637 15933/30549/12637 15932/30547/12637 +f 15932/30547/12638 15933/30549/12638 15935/30553/12638 15934/30551/12638 +f 15934/30551/12639 15935/30553/12639 15937/30557/12639 15936/30555/12639 +f 15936/30555/12640 15937/30557/12640 15939/30561/12640 15938/30559/12640 +f 15938/30559/12641 15939/30561/12641 15941/30565/12641 15940/30563/12641 +f 15940/30563/12642 15941/30565/12642 15943/30569/12642 15942/30567/12642 +f 15942/30567/12643 15943/30569/12643 15945/30574/12643 15944/30571/12643 +f 15944/30572/12644 15945/30575/12644 15947/30579/12644 15946/30577/12644 +f 15946/30577/12645 15947/30579/12645 15949/30583/12645 15948/30581/12645 +f 15948/30581/12646 15949/30583/12646 15951/30587/12646 15950/30585/12646 +f 15950/30585/12647 15951/30587/12647 15953/30591/12647 15952/30589/12647 +f 15952/30589/12648 15953/30591/12648 15955/30596/12648 15954/30593/12648 +f 15954/30594/12649 15955/30597/12649 15957/30601/12649 15956/30599/12649 +f 15956/30599/12650 15957/30601/12650 15959/30605/12650 15958/30603/12650 +f 15958/30603/12651 15959/30605/12651 15961/30610/12651 15960/30607/12651 +f 15903/30486/12652 15901/30481/12652 15963/30613/12652 15961/30609/12652 15959/30606/12652 15957/30602/12652 15955/30598/12652 15953/30592/12652 15951/30588/12652 15949/30584/12652 15947/30580/12652 15945/30576/12652 15943/30570/12652 15941/30566/12652 15939/30562/12652 15937/30558/12652 15935/30554/12652 15933/30550/12652 15931/30546/12652 15929/30542/12652 15927/30538/12652 15925/30534/12652 15923/30530/12652 15921/30526/12652 15919/30520/12652 15917/30516/12652 15915/30512/12652 15913/30508/12652 15911/30504/12652 15909/30500/12652 15907/30496/12652 15905/30490/12652 +f 15960/30607/12653 15961/30610/12653 15963/30614/12653 15962/30611/12653 +f 15962/30611/12654 15963/30614/12654 15901/30482/12654 15900/30478/12654 +f 15900/30479/12655 15902/30484/12655 15904/30488/12655 15906/30493/12655 15908/30498/12655 15910/30502/12655 15912/30506/12655 15914/30510/12655 15916/30514/12655 15918/30518/12655 15920/30523/12655 15922/30528/12655 15924/30532/12655 15926/30536/12655 15928/30540/12655 15930/30544/12655 15932/30548/12655 15934/30552/12655 15936/30556/12655 15938/30560/12655 15940/30564/12655 15942/30568/12655 15944/30573/12655 15946/30578/12655 15948/30582/12655 15950/30586/12655 15952/30590/12655 15954/30595/12655 15956/30600/12655 15958/30604/12655 15960/30608/12655 15962/30612/12655 +o Cylinder.002 +v -8.380784 -0.038342 -1.673494 +v -8.380784 0.632942 -1.673494 +v -8.367513 -0.038342 -1.672187 +v -8.367513 0.632942 -1.672187 +v -8.354751 -0.038342 -1.668316 +v -8.354751 0.632942 -1.668316 +v -8.342990 -0.038342 -1.662029 +v -8.342990 0.632942 -1.662029 +v -8.332681 -0.038342 -1.653569 +v -8.332681 0.632942 -1.653569 +v -8.324221 -0.038342 -1.643260 +v -8.324221 0.632942 -1.643260 +v -8.317934 -0.038342 -1.631499 +v -8.317934 0.632942 -1.631499 +v -8.314063 -0.038342 -1.618737 +v -8.314063 0.632942 -1.618737 +v -8.312757 -0.038342 -1.605466 +v -8.312757 0.632942 -1.605466 +v -8.314063 -0.038342 -1.592194 +v -8.314063 0.632942 -1.592194 +v -8.317934 -0.038342 -1.579433 +v -8.317934 0.632942 -1.579433 +v -8.324221 -0.038342 -1.567672 +v -8.324221 0.632942 -1.567672 +v -8.332681 -0.038342 -1.557363 +v -8.332681 0.632942 -1.557363 +v -8.342990 -0.038342 -1.548903 +v -8.342990 0.632942 -1.548903 +v -8.354751 -0.038342 -1.542616 +v -8.354751 0.632942 -1.542616 +v -8.367513 -0.038342 -1.538745 +v -8.367513 0.632942 -1.538745 +v -8.380784 -0.038342 -1.537438 +v -8.380784 0.632942 -1.537438 +v -8.394055 -0.038342 -1.538745 +v -8.394055 0.632942 -1.538745 +v -8.406817 -0.038342 -1.542616 +v -8.406817 0.632942 -1.542616 +v -8.418578 -0.038342 -1.548903 +v -8.418578 0.632942 -1.548903 +v -8.428887 -0.038342 -1.557363 +v -8.428887 0.632942 -1.557363 +v -8.437347 -0.038342 -1.567672 +v -8.437347 0.632942 -1.567672 +v -8.443634 -0.038342 -1.579433 +v -8.443634 0.632942 -1.579433 +v -8.447505 -0.038342 -1.592194 +v -8.447505 0.632942 -1.592194 +v -8.448812 -0.038342 -1.605466 +v -8.448812 0.632942 -1.605466 +v -8.447505 -0.038342 -1.618737 +v -8.447505 0.632942 -1.618737 +v -8.443634 -0.038342 -1.631499 +v -8.443634 0.632942 -1.631499 +v -8.437347 -0.038342 -1.643260 +v -8.437347 0.632942 -1.643260 +v -8.428887 -0.038342 -1.653569 +v -8.428887 0.632942 -1.653569 +v -8.418578 -0.038342 -1.662029 +v -8.418578 0.632942 -1.662029 +v -8.406817 -0.038342 -1.668316 +v -8.406817 0.632942 -1.668316 +v -8.394055 -0.038342 -1.672187 +v -8.394055 0.632942 -1.672187 +vn 0.0067 -0.0000 -0.0677 +vn 0.0197 -0.0000 -0.0651 +vn 0.0321 -0.0000 -0.0600 +vn 0.0432 -0.0000 -0.0526 +vn 0.0526 -0.0000 -0.0432 +vn 0.0600 -0.0000 -0.0321 +vn 0.0651 -0.0000 -0.0197 +vn 0.0677 -0.0000 -0.0067 +vn 0.0677 -0.0000 0.0067 +vn 0.0651 -0.0000 0.0197 +vn 0.0600 -0.0000 0.0321 +vn 0.0526 -0.0000 0.0432 +vn 0.0432 -0.0000 0.0526 +vn 0.0321 -0.0000 0.0600 +vn 0.0197 -0.0000 0.0651 +vn 0.0067 -0.0000 0.0677 +vn -0.0067 -0.0000 0.0677 +vn -0.0197 -0.0000 0.0651 +vn -0.0321 -0.0000 0.0600 +vn -0.0432 -0.0000 0.0526 +vn -0.0526 -0.0000 0.0432 +vn -0.0600 -0.0000 0.0321 +vn -0.0651 -0.0000 0.0197 +vn -0.0677 -0.0000 0.0067 +vn -0.0677 -0.0000 -0.0067 +vn -0.0651 -0.0000 -0.0197 +vn -0.0600 -0.0000 -0.0321 +vn -0.0526 -0.0000 -0.0432 +vn -0.0432 -0.0000 -0.0526 +vn -0.0321 -0.0000 -0.0600 +vn -0.0000 0.3356 -0.0000 +vn -0.0197 -0.0000 -0.0651 +vn -0.0067 -0.0000 -0.0677 +vn -0.0000 -0.3356 -0.0000 +vt 1.000000 0.500000 +vt 0.000000 0.500000 +vt 0.750000 0.490000 +vt 1.000000 1.000000 +vt 0.250000 0.490000 +vt 0.000000 1.000000 +vt 0.968750 0.500000 +vt 0.796822 0.485388 +vt 0.968750 1.000000 +vt 0.296822 0.485388 +vt 0.937500 0.500000 +vt 0.841844 0.471731 +vt 0.937500 1.000000 +vt 0.341844 0.471731 +vt 0.906250 0.500000 +vt 0.883337 0.449553 +vt 0.906250 1.000000 +vt 0.383337 0.449553 +vt 0.875000 0.500000 +vt 0.919706 0.419706 +vt 0.875000 1.000000 +vt 0.419706 0.419706 +vt 0.843750 0.500000 +vt 0.949553 0.383337 +vt 0.843750 1.000000 +vt 0.449553 0.383337 +vt 0.812500 0.500000 +vt 0.971731 0.341844 +vt 0.812500 1.000000 +vt 0.471731 0.341844 +vt 0.781250 0.500000 +vt 0.985388 0.296822 +vt 0.781250 1.000000 +vt 0.485388 0.296822 +vt 0.750000 0.500000 +vt 0.990000 0.250000 +vt 0.750000 1.000000 +vt 0.490000 0.250000 +vt 0.718750 0.500000 +vt 0.985388 0.203178 +vt 0.718750 1.000000 +vt 0.485388 0.203178 +vt 0.687500 0.500000 +vt 0.971731 0.158156 +vt 0.687500 1.000000 +vt 0.471731 0.158156 +vt 0.656250 0.500000 +vt 0.949553 0.116663 +vt 0.656250 1.000000 +vt 0.449553 0.116663 +vt 0.625000 0.500000 +vt 0.919706 0.080294 +vt 0.625000 1.000000 +vt 0.419706 0.080294 +vt 0.593750 0.500000 +vt 0.883337 0.050447 +vt 0.593750 1.000000 +vt 0.383337 0.050447 +vt 0.562500 0.500000 +vt 0.841844 0.028269 +vt 0.562500 1.000000 +vt 0.341844 0.028269 +vt 0.531250 0.500000 +vt 0.796822 0.014612 +vt 0.531250 1.000000 +vt 0.296822 0.014612 +vt 0.500000 0.500000 +vt 0.750000 0.010000 +vt 0.500000 1.000000 +vt 0.250000 0.010000 +vt 0.468750 0.500000 +vt 0.703178 0.014612 +vt 0.468750 1.000000 +vt 0.203178 0.014612 +vt 0.437500 0.500000 +vt 0.658156 0.028269 +vt 0.437500 1.000000 +vt 0.158156 0.028269 +vt 0.406250 0.500000 +vt 0.616663 0.050447 +vt 0.406250 1.000000 +vt 0.116663 0.050447 +vt 0.375000 0.500000 +vt 0.580294 0.080294 +vt 0.375000 1.000000 +vt 0.080294 0.080294 +vt 0.343750 0.500000 +vt 0.550447 0.116663 +vt 0.343750 1.000000 +vt 0.050447 0.116663 +vt 0.312500 0.500000 +vt 0.528269 0.158156 +vt 0.312500 1.000000 +vt 0.028269 0.158156 +vt 0.281250 0.500000 +vt 0.514612 0.203178 +vt 0.281250 1.000000 +vt 0.014612 0.203178 +vt 0.250000 0.500000 +vt 0.510000 0.250000 +vt 0.250000 1.000000 +vt 0.010000 0.250000 +vt 0.218750 0.500000 +vt 0.514612 0.296822 +vt 0.218750 1.000000 +vt 0.014612 0.296822 +vt 0.187500 0.500000 +vt 0.528269 0.341844 +vt 0.187500 1.000000 +vt 0.028269 0.341844 +vt 0.156250 0.500000 +vt 0.550447 0.383337 +vt 0.156250 1.000000 +vt 0.050447 0.383337 +vt 0.125000 0.500000 +vt 0.580294 0.419706 +vt 0.125000 1.000000 +vt 0.080294 0.419706 +vt 0.093750 0.500000 +vt 0.616663 0.449553 +vt 0.093750 1.000000 +vt 0.116663 0.449553 +vt 0.062500 0.500000 +vt 0.658156 0.471731 +vt 0.158156 0.471731 +vt 0.062500 1.000000 +vt 0.031250 0.500000 +vt 0.703178 0.485388 +vt 0.203178 0.485388 +vt 0.031250 1.000000 +s 0 +usemtl Wood +f 15964/30615/12656 15965/30618/12656 15967/30623/12656 15966/30621/12656 +f 15966/30621/12657 15967/30623/12657 15969/30627/12657 15968/30625/12657 +f 15968/30625/12658 15969/30627/12658 15971/30631/12658 15970/30629/12658 +f 15970/30629/12659 15971/30631/12659 15973/30635/12659 15972/30633/12659 +f 15972/30633/12660 15973/30635/12660 15975/30639/12660 15974/30637/12660 +f 15974/30637/12661 15975/30639/12661 15977/30643/12661 15976/30641/12661 +f 15976/30641/12662 15977/30643/12662 15979/30647/12662 15978/30645/12662 +f 15978/30645/12663 15979/30647/12663 15981/30651/12663 15980/30649/12663 +f 15980/30649/12664 15981/30651/12664 15983/30655/12664 15982/30653/12664 +f 15982/30653/12665 15983/30655/12665 15985/30659/12665 15984/30657/12665 +f 15984/30657/12666 15985/30659/12666 15987/30663/12666 15986/30661/12666 +f 15986/30661/12667 15987/30663/12667 15989/30667/12667 15988/30665/12667 +f 15988/30665/12668 15989/30667/12668 15991/30671/12668 15990/30669/12668 +f 15990/30669/12669 15991/30671/12669 15993/30675/12669 15992/30673/12669 +f 15992/30673/12670 15993/30675/12670 15995/30679/12670 15994/30677/12670 +f 15994/30677/12671 15995/30679/12671 15997/30683/12671 15996/30681/12671 +f 15996/30681/12672 15997/30683/12672 15999/30687/12672 15998/30685/12672 +f 15998/30685/12673 15999/30687/12673 16001/30691/12673 16000/30689/12673 +f 16000/30689/12674 16001/30691/12674 16003/30695/12674 16002/30693/12674 +f 16002/30693/12675 16003/30695/12675 16005/30699/12675 16004/30697/12675 +f 16004/30697/12676 16005/30699/12676 16007/30703/12676 16006/30701/12676 +f 16006/30701/12677 16007/30703/12677 16009/30707/12677 16008/30705/12677 +f 16008/30705/12678 16009/30707/12678 16011/30711/12678 16010/30709/12678 +f 16010/30709/12679 16011/30711/12679 16013/30715/12679 16012/30713/12679 +f 16012/30713/12680 16013/30715/12680 16015/30719/12680 16014/30717/12680 +f 16014/30717/12681 16015/30719/12681 16017/30723/12681 16016/30721/12681 +f 16016/30721/12682 16017/30723/12682 16019/30727/12682 16018/30725/12682 +f 16018/30725/12683 16019/30727/12683 16021/30731/12683 16020/30729/12683 +f 16020/30729/12684 16021/30731/12684 16023/30735/12684 16022/30733/12684 +f 16022/30733/12685 16023/30735/12685 16025/30740/12685 16024/30737/12685 +f 15967/30624/12686 15965/30619/12686 16027/30743/12686 16025/30739/12686 16023/30736/12686 16021/30732/12686 16019/30728/12686 16017/30724/12686 16015/30720/12686 16013/30716/12686 16011/30712/12686 16009/30708/12686 16007/30704/12686 16005/30700/12686 16003/30696/12686 16001/30692/12686 15999/30688/12686 15997/30684/12686 15995/30680/12686 15993/30676/12686 15991/30672/12686 15989/30668/12686 15987/30664/12686 15985/30660/12686 15983/30656/12686 15981/30652/12686 15979/30648/12686 15977/30644/12686 15975/30640/12686 15973/30636/12686 15971/30632/12686 15969/30628/12686 +f 16024/30737/12687 16025/30740/12687 16027/30744/12687 16026/30741/12687 +f 16026/30741/12688 16027/30744/12688 15965/30620/12688 15964/30616/12688 +f 15964/30617/12689 15966/30622/12689 15968/30626/12689 15970/30630/12689 15972/30634/12689 15974/30638/12689 15976/30642/12689 15978/30646/12689 15980/30650/12689 15982/30654/12689 15984/30658/12689 15986/30662/12689 15988/30666/12689 15990/30670/12689 15992/30674/12689 15994/30678/12689 15996/30682/12689 15998/30686/12689 16000/30690/12689 16002/30694/12689 16004/30698/12689 16006/30702/12689 16008/30706/12689 16010/30710/12689 16012/30714/12689 16014/30718/12689 16016/30722/12689 16018/30726/12689 16020/30730/12689 16022/30734/12689 16024/30738/12689 16026/30742/12689 +o Cylinder.003 +v -8.380784 0.001525 -1.858998 +v -8.380784 0.017381 -1.858998 +v -8.331323 0.001525 -1.854127 +v -8.331323 0.017381 -1.854127 +v -8.283761 0.001525 -1.839699 +v -8.283761 0.017381 -1.839699 +v -8.239929 0.001525 -1.816270 +v -8.239929 0.017381 -1.816270 +v -8.201509 0.001525 -1.784740 +v -8.201509 0.017381 -1.784740 +v -8.169980 0.001525 -1.746321 +v -8.169980 0.017381 -1.746321 +v -8.146551 0.001525 -1.702488 +v -8.146551 0.017381 -1.702488 +v -8.132123 0.001525 -1.654928 +v -8.132123 0.017381 -1.654928 +v -8.127252 0.001525 -1.605466 +v -8.127252 0.017381 -1.605466 +v -8.132123 0.001525 -1.556004 +v -8.132123 0.017381 -1.556004 +v -8.146551 0.001525 -1.508443 +v -8.146551 0.017381 -1.508443 +v -8.169980 0.001525 -1.464611 +v -8.169980 0.017381 -1.464611 +v -8.201509 0.001525 -1.426192 +v -8.201509 0.017381 -1.426192 +v -8.239929 0.001525 -1.394662 +v -8.239929 0.017381 -1.394662 +v -8.283761 0.001525 -1.371233 +v -8.283761 0.017381 -1.371233 +v -8.331323 0.001525 -1.356805 +v -8.331323 0.017381 -1.356805 +v -8.380784 0.001525 -1.351934 +v -8.380784 0.017381 -1.351934 +v -8.430245 0.001525 -1.356805 +v -8.430245 0.017381 -1.356805 +v -8.477807 0.001525 -1.371233 +v -8.477807 0.017381 -1.371233 +v -8.521639 0.001525 -1.394662 +v -8.521639 0.017381 -1.394662 +v -8.560059 0.001525 -1.426192 +v -8.560059 0.017381 -1.426192 +v -8.591588 0.001525 -1.464611 +v -8.591588 0.017381 -1.464611 +v -8.615017 0.001525 -1.508443 +v -8.615017 0.017381 -1.508443 +v -8.629445 0.001525 -1.556004 +v -8.629445 0.017381 -1.556004 +v -8.634316 0.001525 -1.605466 +v -8.634316 0.017381 -1.605466 +v -8.629445 0.001525 -1.654928 +v -8.629445 0.017381 -1.654928 +v -8.615017 0.001525 -1.702489 +v -8.615017 0.017381 -1.702489 +v -8.591588 0.001525 -1.746321 +v -8.591588 0.017381 -1.746321 +v -8.560059 0.001525 -1.784740 +v -8.560059 0.017381 -1.784740 +v -8.521639 0.001525 -1.816270 +v -8.521639 0.017381 -1.816270 +v -8.477807 0.001525 -1.839699 +v -8.477807 0.017381 -1.839699 +v -8.430245 0.001525 -1.854127 +v -8.430245 0.017381 -1.854127 +vn 0.0249 -0.0000 -0.2523 +vn 0.0736 -0.0000 -0.2426 +vn 0.1195 -0.0000 -0.2236 +vn 0.1608 -0.0000 -0.1960 +vn 0.1960 -0.0000 -0.1608 +vn 0.2236 -0.0000 -0.1195 +vn 0.2426 -0.0000 -0.0736 +vn 0.2523 -0.0000 -0.0249 +vn 0.2523 -0.0000 0.0249 +vn 0.2426 -0.0000 0.0736 +vn 0.2236 -0.0000 0.1195 +vn 0.1960 -0.0000 0.1608 +vn 0.1608 -0.0000 0.1960 +vn 0.1195 -0.0000 0.2236 +vn 0.0736 -0.0000 0.2426 +vn 0.0249 -0.0000 0.2523 +vn -0.0249 -0.0000 0.2523 +vn -0.0736 -0.0000 0.2426 +vn -0.1195 -0.0000 0.2236 +vn -0.1608 -0.0000 0.1960 +vn -0.1960 -0.0000 0.1608 +vn -0.2236 -0.0000 0.1195 +vn -0.2426 -0.0000 0.0736 +vn -0.2523 -0.0000 0.0249 +vn -0.2523 -0.0000 -0.0249 +vn -0.2426 -0.0000 -0.0736 +vn -0.2236 -0.0000 -0.1195 +vn -0.1960 -0.0000 -0.1608 +vn -0.1608 -0.0000 -0.1960 +vn -0.1195 -0.0000 -0.2236 +vn -0.0000 0.0079 -0.0000 +vn -0.0736 -0.0000 -0.2426 +vn -0.0249 -0.0000 -0.2523 +vn -0.0000 -0.0079 -0.0000 +vt 1.000000 0.500000 +vt 0.000000 0.500000 +vt 0.750000 0.490000 +vt 1.000000 1.000000 +vt 0.250000 0.490000 +vt 0.000000 1.000000 +vt 0.968750 0.500000 +vt 0.796822 0.485388 +vt 0.968750 1.000000 +vt 0.296822 0.485388 +vt 0.937500 0.500000 +vt 0.841844 0.471731 +vt 0.937500 1.000000 +vt 0.341844 0.471731 +vt 0.906250 0.500000 +vt 0.883337 0.449553 +vt 0.906250 1.000000 +vt 0.383337 0.449553 +vt 0.875000 0.500000 +vt 0.919706 0.419706 +vt 0.875000 1.000000 +vt 0.419706 0.419706 +vt 0.843750 0.500000 +vt 0.949553 0.383337 +vt 0.843750 1.000000 +vt 0.449553 0.383337 +vt 0.812500 0.500000 +vt 0.971731 0.341844 +vt 0.812500 1.000000 +vt 0.471731 0.341844 +vt 0.781250 0.500000 +vt 0.985388 0.296822 +vt 0.781250 1.000000 +vt 0.485388 0.296822 +vt 0.750000 0.500000 +vt 0.990000 0.250000 +vt 0.750000 1.000000 +vt 0.490000 0.250000 +vt 0.718750 0.500000 +vt 0.985388 0.203178 +vt 0.718750 1.000000 +vt 0.485388 0.203178 +vt 0.687500 0.500000 +vt 0.971731 0.158156 +vt 0.687500 1.000000 +vt 0.471731 0.158156 +vt 0.656250 0.500000 +vt 0.949553 0.116663 +vt 0.656250 1.000000 +vt 0.449553 0.116663 +vt 0.625000 0.500000 +vt 0.919706 0.080294 +vt 0.625000 1.000000 +vt 0.419706 0.080294 +vt 0.593750 0.500000 +vt 0.883337 0.050447 +vt 0.593750 1.000000 +vt 0.383337 0.050447 +vt 0.562500 0.500000 +vt 0.841844 0.028269 +vt 0.562500 1.000000 +vt 0.341844 0.028269 +vt 0.531250 0.500000 +vt 0.796822 0.014612 +vt 0.531250 1.000000 +vt 0.296822 0.014612 +vt 0.500000 0.500000 +vt 0.750000 0.010000 +vt 0.500000 1.000000 +vt 0.250000 0.010000 +vt 0.468750 0.500000 +vt 0.703178 0.014612 +vt 0.468750 1.000000 +vt 0.203178 0.014612 +vt 0.437500 0.500000 +vt 0.658156 0.028269 +vt 0.437500 1.000000 +vt 0.158156 0.028269 +vt 0.406250 0.500000 +vt 0.616663 0.050447 +vt 0.406250 1.000000 +vt 0.116663 0.050447 +vt 0.375000 0.500000 +vt 0.580294 0.080294 +vt 0.375000 1.000000 +vt 0.080294 0.080294 +vt 0.343750 0.500000 +vt 0.550447 0.116663 +vt 0.343750 1.000000 +vt 0.050447 0.116663 +vt 0.312500 0.500000 +vt 0.528269 0.158156 +vt 0.312500 1.000000 +vt 0.028269 0.158156 +vt 0.281250 0.500000 +vt 0.514612 0.203178 +vt 0.281250 1.000000 +vt 0.014612 0.203178 +vt 0.250000 0.500000 +vt 0.510000 0.250000 +vt 0.250000 1.000000 +vt 0.010000 0.250000 +vt 0.218750 0.500000 +vt 0.514612 0.296822 +vt 0.218750 1.000000 +vt 0.014612 0.296822 +vt 0.187500 0.500000 +vt 0.528269 0.341844 +vt 0.187500 1.000000 +vt 0.028269 0.341844 +vt 0.156250 0.500000 +vt 0.550447 0.383337 +vt 0.156250 1.000000 +vt 0.050447 0.383337 +vt 0.125000 0.500000 +vt 0.580294 0.419706 +vt 0.125000 1.000000 +vt 0.080294 0.419706 +vt 0.093750 0.500000 +vt 0.616663 0.449553 +vt 0.093750 1.000000 +vt 0.116663 0.449553 +vt 0.062500 0.500000 +vt 0.658156 0.471731 +vt 0.158156 0.471731 +vt 0.062500 1.000000 +vt 0.031250 0.500000 +vt 0.703178 0.485388 +vt 0.203178 0.485388 +vt 0.031250 1.000000 +s 0 +usemtl Wood +f 16028/30745/12690 16029/30748/12690 16031/30753/12690 16030/30751/12690 +f 16030/30751/12691 16031/30753/12691 16033/30757/12691 16032/30755/12691 +f 16032/30755/12692 16033/30757/12692 16035/30761/12692 16034/30759/12692 +f 16034/30759/12693 16035/30761/12693 16037/30765/12693 16036/30763/12693 +f 16036/30763/12694 16037/30765/12694 16039/30769/12694 16038/30767/12694 +f 16038/30767/12695 16039/30769/12695 16041/30773/12695 16040/30771/12695 +f 16040/30771/12696 16041/30773/12696 16043/30777/12696 16042/30775/12696 +f 16042/30775/12697 16043/30777/12697 16045/30781/12697 16044/30779/12697 +f 16044/30779/12698 16045/30781/12698 16047/30785/12698 16046/30783/12698 +f 16046/30783/12699 16047/30785/12699 16049/30789/12699 16048/30787/12699 +f 16048/30787/12700 16049/30789/12700 16051/30793/12700 16050/30791/12700 +f 16050/30791/12701 16051/30793/12701 16053/30797/12701 16052/30795/12701 +f 16052/30795/12702 16053/30797/12702 16055/30801/12702 16054/30799/12702 +f 16054/30799/12703 16055/30801/12703 16057/30805/12703 16056/30803/12703 +f 16056/30803/12704 16057/30805/12704 16059/30809/12704 16058/30807/12704 +f 16058/30807/12705 16059/30809/12705 16061/30813/12705 16060/30811/12705 +f 16060/30811/12706 16061/30813/12706 16063/30817/12706 16062/30815/12706 +f 16062/30815/12707 16063/30817/12707 16065/30821/12707 16064/30819/12707 +f 16064/30819/12708 16065/30821/12708 16067/30825/12708 16066/30823/12708 +f 16066/30823/12709 16067/30825/12709 16069/30829/12709 16068/30827/12709 +f 16068/30827/12710 16069/30829/12710 16071/30833/12710 16070/30831/12710 +f 16070/30831/12711 16071/30833/12711 16073/30837/12711 16072/30835/12711 +f 16072/30835/12712 16073/30837/12712 16075/30841/12712 16074/30839/12712 +f 16074/30839/12713 16075/30841/12713 16077/30845/12713 16076/30843/12713 +f 16076/30843/12714 16077/30845/12714 16079/30849/12714 16078/30847/12714 +f 16078/30847/12715 16079/30849/12715 16081/30853/12715 16080/30851/12715 +f 16080/30851/12716 16081/30853/12716 16083/30857/12716 16082/30855/12716 +f 16082/30855/12717 16083/30857/12717 16085/30861/12717 16084/30859/12717 +f 16084/30859/12718 16085/30861/12718 16087/30865/12718 16086/30863/12718 +f 16086/30863/12719 16087/30865/12719 16089/30870/12719 16088/30867/12719 +f 16031/30754/12720 16029/30749/12720 16091/30873/12720 16089/30869/12720 16087/30866/12720 16085/30862/12720 16083/30858/12720 16081/30854/12720 16079/30850/12720 16077/30846/12720 16075/30842/12720 16073/30838/12720 16071/30834/12720 16069/30830/12720 16067/30826/12720 16065/30822/12720 16063/30818/12720 16061/30814/12720 16059/30810/12720 16057/30806/12720 16055/30802/12720 16053/30798/12720 16051/30794/12720 16049/30790/12720 16047/30786/12720 16045/30782/12720 16043/30778/12720 16041/30774/12720 16039/30770/12720 16037/30766/12720 16035/30762/12720 16033/30758/12720 +f 16088/30867/12721 16089/30870/12721 16091/30874/12721 16090/30871/12721 +f 16090/30871/12722 16091/30874/12722 16029/30750/12722 16028/30746/12722 +f 16028/30747/12723 16030/30752/12723 16032/30756/12723 16034/30760/12723 16036/30764/12723 16038/30768/12723 16040/30772/12723 16042/30776/12723 16044/30780/12723 16046/30784/12723 16048/30788/12723 16050/30792/12723 16052/30796/12723 16054/30800/12723 16056/30804/12723 16058/30808/12723 16060/30812/12723 16062/30816/12723 16064/30820/12723 16066/30824/12723 16068/30828/12723 16070/30832/12723 16072/30836/12723 16074/30840/12723 16076/30844/12723 16078/30848/12723 16080/30852/12723 16082/30856/12723 16084/30860/12723 16086/30864/12723 16088/30868/12723 16090/30872/12723 +o Cylinder.004 +v -11.225771 0.001525 -1.858998 +v -11.225771 0.017381 -1.858998 +v -11.176310 0.001525 -1.854127 +v -11.176310 0.017381 -1.854127 +v -11.128748 0.001525 -1.839699 +v -11.128748 0.017381 -1.839699 +v -11.084916 0.001525 -1.816270 +v -11.084916 0.017381 -1.816270 +v -11.046496 0.001525 -1.784740 +v -11.046496 0.017381 -1.784740 +v -11.014967 0.001525 -1.746321 +v -11.014967 0.017381 -1.746321 +v -10.991538 0.001525 -1.702488 +v -10.991538 0.017381 -1.702488 +v -10.977110 0.001525 -1.654928 +v -10.977110 0.017381 -1.654928 +v -10.972239 0.001525 -1.605466 +v -10.972239 0.017381 -1.605466 +v -10.977110 0.001525 -1.556004 +v -10.977110 0.017381 -1.556004 +v -10.991538 0.001525 -1.508443 +v -10.991538 0.017381 -1.508443 +v -11.014967 0.001525 -1.464611 +v -11.014967 0.017381 -1.464611 +v -11.046496 0.001525 -1.426192 +v -11.046496 0.017381 -1.426192 +v -11.084916 0.001525 -1.394662 +v -11.084916 0.017381 -1.394662 +v -11.128748 0.001525 -1.371233 +v -11.128748 0.017381 -1.371233 +v -11.176310 0.001525 -1.356805 +v -11.176310 0.017381 -1.356805 +v -11.225771 0.001525 -1.351934 +v -11.225771 0.017381 -1.351934 +v -11.275232 0.001525 -1.356805 +v -11.275232 0.017381 -1.356805 +v -11.322794 0.001525 -1.371233 +v -11.322794 0.017381 -1.371233 +v -11.366626 0.001525 -1.394662 +v -11.366626 0.017381 -1.394662 +v -11.405046 0.001525 -1.426192 +v -11.405046 0.017381 -1.426192 +v -11.436575 0.001525 -1.464611 +v -11.436575 0.017381 -1.464611 +v -11.460004 0.001525 -1.508443 +v -11.460004 0.017381 -1.508443 +v -11.474432 0.001525 -1.556004 +v -11.474432 0.017381 -1.556004 +v -11.479303 0.001525 -1.605466 +v -11.479303 0.017381 -1.605466 +v -11.474432 0.001525 -1.654928 +v -11.474432 0.017381 -1.654928 +v -11.460004 0.001525 -1.702489 +v -11.460004 0.017381 -1.702489 +v -11.436575 0.001525 -1.746321 +v -11.436575 0.017381 -1.746321 +v -11.405046 0.001525 -1.784740 +v -11.405046 0.017381 -1.784740 +v -11.366626 0.001525 -1.816270 +v -11.366626 0.017381 -1.816270 +v -11.322794 0.001525 -1.839699 +v -11.322794 0.017381 -1.839699 +v -11.275232 0.001525 -1.854127 +v -11.275232 0.017381 -1.854127 +vn 0.0249 -0.0000 -0.2523 +vn 0.0736 -0.0000 -0.2426 +vn 0.1195 -0.0000 -0.2236 +vn 0.1608 -0.0000 -0.1960 +vn 0.1960 -0.0000 -0.1608 +vn 0.2236 -0.0000 -0.1195 +vn 0.2426 -0.0000 -0.0736 +vn 0.2523 -0.0000 -0.0249 +vn 0.2523 -0.0000 0.0249 +vn 0.2426 -0.0000 0.0736 +vn 0.2236 -0.0000 0.1195 +vn 0.1960 -0.0000 0.1608 +vn 0.1608 -0.0000 0.1960 +vn 0.1195 -0.0000 0.2236 +vn 0.0736 -0.0000 0.2426 +vn 0.0249 -0.0000 0.2523 +vn -0.0249 -0.0000 0.2523 +vn -0.0736 -0.0000 0.2426 +vn -0.1195 -0.0000 0.2236 +vn -0.1608 -0.0000 0.1960 +vn -0.1960 -0.0000 0.1608 +vn -0.2236 -0.0000 0.1195 +vn -0.2426 -0.0000 0.0736 +vn -0.2523 -0.0000 0.0249 +vn -0.2523 -0.0000 -0.0249 +vn -0.2426 -0.0000 -0.0736 +vn -0.2236 -0.0000 -0.1195 +vn -0.1960 -0.0000 -0.1608 +vn -0.1608 -0.0000 -0.1960 +vn -0.1195 -0.0000 -0.2236 +vn -0.0000 0.0079 -0.0000 +vn -0.0736 -0.0000 -0.2426 +vn -0.0249 -0.0000 -0.2523 +vn -0.0000 -0.0079 -0.0000 +vt 1.000000 0.500000 +vt 0.000000 0.500000 +vt 0.750000 0.490000 +vt 1.000000 1.000000 +vt 0.250000 0.490000 +vt 0.000000 1.000000 +vt 0.968750 0.500000 +vt 0.796822 0.485388 +vt 0.968750 1.000000 +vt 0.296822 0.485388 +vt 0.937500 0.500000 +vt 0.841844 0.471731 +vt 0.937500 1.000000 +vt 0.341844 0.471731 +vt 0.906250 0.500000 +vt 0.883337 0.449553 +vt 0.906250 1.000000 +vt 0.383337 0.449553 +vt 0.875000 0.500000 +vt 0.919706 0.419706 +vt 0.875000 1.000000 +vt 0.419706 0.419706 +vt 0.843750 0.500000 +vt 0.949553 0.383337 +vt 0.843750 1.000000 +vt 0.449553 0.383337 +vt 0.812500 0.500000 +vt 0.971731 0.341844 +vt 0.812500 1.000000 +vt 0.471731 0.341844 +vt 0.781250 0.500000 +vt 0.985388 0.296822 +vt 0.781250 1.000000 +vt 0.485388 0.296822 +vt 0.750000 0.500000 +vt 0.990000 0.250000 +vt 0.750000 1.000000 +vt 0.490000 0.250000 +vt 0.718750 0.500000 +vt 0.985388 0.203178 +vt 0.718750 1.000000 +vt 0.485388 0.203178 +vt 0.687500 0.500000 +vt 0.971731 0.158156 +vt 0.687500 1.000000 +vt 0.471731 0.158156 +vt 0.656250 0.500000 +vt 0.949553 0.116663 +vt 0.656250 1.000000 +vt 0.449553 0.116663 +vt 0.625000 0.500000 +vt 0.919706 0.080294 +vt 0.625000 1.000000 +vt 0.419706 0.080294 +vt 0.593750 0.500000 +vt 0.883337 0.050447 +vt 0.593750 1.000000 +vt 0.383337 0.050447 +vt 0.562500 0.500000 +vt 0.841844 0.028269 +vt 0.562500 1.000000 +vt 0.341844 0.028269 +vt 0.531250 0.500000 +vt 0.796822 0.014612 +vt 0.531250 1.000000 +vt 0.296822 0.014612 +vt 0.500000 0.500000 +vt 0.750000 0.010000 +vt 0.500000 1.000000 +vt 0.250000 0.010000 +vt 0.468750 0.500000 +vt 0.703178 0.014612 +vt 0.468750 1.000000 +vt 0.203178 0.014612 +vt 0.437500 0.500000 +vt 0.658156 0.028269 +vt 0.437500 1.000000 +vt 0.158156 0.028269 +vt 0.406250 0.500000 +vt 0.616663 0.050447 +vt 0.406250 1.000000 +vt 0.116663 0.050447 +vt 0.375000 0.500000 +vt 0.580294 0.080294 +vt 0.375000 1.000000 +vt 0.080294 0.080294 +vt 0.343750 0.500000 +vt 0.550447 0.116663 +vt 0.343750 1.000000 +vt 0.050447 0.116663 +vt 0.312500 0.500000 +vt 0.528269 0.158156 +vt 0.312500 1.000000 +vt 0.028269 0.158156 +vt 0.281250 0.500000 +vt 0.514612 0.203178 +vt 0.281250 1.000000 +vt 0.014612 0.203178 +vt 0.250000 0.500000 +vt 0.510000 0.250000 +vt 0.250000 1.000000 +vt 0.010000 0.250000 +vt 0.218750 0.500000 +vt 0.514612 0.296822 +vt 0.218750 1.000000 +vt 0.014612 0.296822 +vt 0.187500 0.500000 +vt 0.528269 0.341844 +vt 0.187500 1.000000 +vt 0.028269 0.341844 +vt 0.156250 0.500000 +vt 0.550447 0.383337 +vt 0.156250 1.000000 +vt 0.050447 0.383337 +vt 0.125000 0.500000 +vt 0.580294 0.419706 +vt 0.125000 1.000000 +vt 0.080294 0.419706 +vt 0.093750 0.500000 +vt 0.616663 0.449553 +vt 0.093750 1.000000 +vt 0.116663 0.449553 +vt 0.062500 0.500000 +vt 0.658156 0.471731 +vt 0.158156 0.471731 +vt 0.062500 1.000000 +vt 0.031250 0.500000 +vt 0.703178 0.485388 +vt 0.203178 0.485388 +vt 0.031250 1.000000 +s 0 +usemtl Wood.003 +f 16092/30875/12724 16093/30878/12724 16095/30883/12724 16094/30881/12724 +f 16094/30881/12725 16095/30883/12725 16097/30887/12725 16096/30885/12725 +f 16096/30885/12726 16097/30887/12726 16099/30891/12726 16098/30889/12726 +f 16098/30889/12727 16099/30891/12727 16101/30895/12727 16100/30893/12727 +f 16100/30893/12728 16101/30895/12728 16103/30899/12728 16102/30897/12728 +f 16102/30897/12729 16103/30899/12729 16105/30903/12729 16104/30901/12729 +f 16104/30901/12730 16105/30903/12730 16107/30907/12730 16106/30905/12730 +f 16106/30905/12731 16107/30907/12731 16109/30911/12731 16108/30909/12731 +f 16108/30909/12732 16109/30911/12732 16111/30915/12732 16110/30913/12732 +f 16110/30913/12733 16111/30915/12733 16113/30919/12733 16112/30917/12733 +f 16112/30917/12734 16113/30919/12734 16115/30923/12734 16114/30921/12734 +f 16114/30921/12735 16115/30923/12735 16117/30927/12735 16116/30925/12735 +f 16116/30925/12736 16117/30927/12736 16119/30931/12736 16118/30929/12736 +f 16118/30929/12737 16119/30931/12737 16121/30935/12737 16120/30933/12737 +f 16120/30933/12738 16121/30935/12738 16123/30939/12738 16122/30937/12738 +f 16122/30937/12739 16123/30939/12739 16125/30943/12739 16124/30941/12739 +f 16124/30941/12740 16125/30943/12740 16127/30947/12740 16126/30945/12740 +f 16126/30945/12741 16127/30947/12741 16129/30951/12741 16128/30949/12741 +f 16128/30949/12742 16129/30951/12742 16131/30955/12742 16130/30953/12742 +f 16130/30953/12743 16131/30955/12743 16133/30959/12743 16132/30957/12743 +f 16132/30957/12744 16133/30959/12744 16135/30963/12744 16134/30961/12744 +f 16134/30961/12745 16135/30963/12745 16137/30967/12745 16136/30965/12745 +f 16136/30965/12746 16137/30967/12746 16139/30971/12746 16138/30969/12746 +f 16138/30969/12747 16139/30971/12747 16141/30975/12747 16140/30973/12747 +f 16140/30973/12748 16141/30975/12748 16143/30979/12748 16142/30977/12748 +f 16142/30977/12749 16143/30979/12749 16145/30983/12749 16144/30981/12749 +f 16144/30981/12750 16145/30983/12750 16147/30987/12750 16146/30985/12750 +f 16146/30985/12751 16147/30987/12751 16149/30991/12751 16148/30989/12751 +f 16148/30989/12752 16149/30991/12752 16151/30995/12752 16150/30993/12752 +f 16150/30993/12753 16151/30995/12753 16153/31000/12753 16152/30997/12753 +f 16095/30884/12754 16093/30879/12754 16155/31003/12754 16153/30999/12754 16151/30996/12754 16149/30992/12754 16147/30988/12754 16145/30984/12754 16143/30980/12754 16141/30976/12754 16139/30972/12754 16137/30968/12754 16135/30964/12754 16133/30960/12754 16131/30956/12754 16129/30952/12754 16127/30948/12754 16125/30944/12754 16123/30940/12754 16121/30936/12754 16119/30932/12754 16117/30928/12754 16115/30924/12754 16113/30920/12754 16111/30916/12754 16109/30912/12754 16107/30908/12754 16105/30904/12754 16103/30900/12754 16101/30896/12754 16099/30892/12754 16097/30888/12754 +f 16152/30997/12755 16153/31000/12755 16155/31004/12755 16154/31001/12755 +f 16154/31001/12756 16155/31004/12756 16093/30880/12756 16092/30876/12756 +f 16092/30877/12757 16094/30882/12757 16096/30886/12757 16098/30890/12757 16100/30894/12757 16102/30898/12757 16104/30902/12757 16106/30906/12757 16108/30910/12757 16110/30914/12757 16112/30918/12757 16114/30922/12757 16116/30926/12757 16118/30930/12757 16120/30934/12757 16122/30938/12757 16124/30942/12757 16126/30946/12757 16128/30950/12757 16130/30954/12757 16132/30958/12757 16134/30962/12757 16136/30966/12757 16138/30970/12757 16140/30974/12757 16142/30978/12757 16144/30982/12757 16146/30986/12757 16148/30990/12757 16150/30994/12757 16152/30998/12757 16154/31002/12757 +o Cylinder.005 +v -11.225771 -0.038342 -1.673494 +v -11.225771 0.632942 -1.673494 +v -11.212500 -0.038342 -1.672187 +v -11.212500 0.632942 -1.672187 +v -11.199738 -0.038342 -1.668316 +v -11.199738 0.632942 -1.668316 +v -11.187977 -0.038342 -1.662029 +v -11.187977 0.632942 -1.662029 +v -11.177668 -0.038342 -1.653569 +v -11.177668 0.632942 -1.653569 +v -11.169208 -0.038342 -1.643260 +v -11.169208 0.632942 -1.643260 +v -11.162921 -0.038342 -1.631499 +v -11.162921 0.632942 -1.631499 +v -11.159050 -0.038342 -1.618737 +v -11.159050 0.632942 -1.618737 +v -11.157743 -0.038342 -1.605466 +v -11.157743 0.632942 -1.605466 +v -11.159050 -0.038342 -1.592194 +v -11.159050 0.632942 -1.592194 +v -11.162921 -0.038342 -1.579433 +v -11.162921 0.632942 -1.579433 +v -11.169208 -0.038342 -1.567672 +v -11.169208 0.632942 -1.567672 +v -11.177668 -0.038342 -1.557363 +v -11.177668 0.632942 -1.557363 +v -11.187977 -0.038342 -1.548903 +v -11.187977 0.632942 -1.548903 +v -11.199738 -0.038342 -1.542616 +v -11.199738 0.632942 -1.542616 +v -11.212500 -0.038342 -1.538745 +v -11.212500 0.632942 -1.538745 +v -11.225771 -0.038342 -1.537438 +v -11.225771 0.632942 -1.537438 +v -11.239042 -0.038342 -1.538745 +v -11.239042 0.632942 -1.538745 +v -11.251804 -0.038342 -1.542616 +v -11.251804 0.632942 -1.542616 +v -11.263565 -0.038342 -1.548903 +v -11.263565 0.632942 -1.548903 +v -11.273874 -0.038342 -1.557363 +v -11.273874 0.632942 -1.557363 +v -11.282334 -0.038342 -1.567672 +v -11.282334 0.632942 -1.567672 +v -11.288621 -0.038342 -1.579433 +v -11.288621 0.632942 -1.579433 +v -11.292492 -0.038342 -1.592194 +v -11.292492 0.632942 -1.592194 +v -11.293798 -0.038342 -1.605466 +v -11.293798 0.632942 -1.605466 +v -11.292492 -0.038342 -1.618737 +v -11.292492 0.632942 -1.618737 +v -11.288621 -0.038342 -1.631499 +v -11.288621 0.632942 -1.631499 +v -11.282334 -0.038342 -1.643260 +v -11.282334 0.632942 -1.643260 +v -11.273874 -0.038342 -1.653569 +v -11.273874 0.632942 -1.653569 +v -11.263565 -0.038342 -1.662029 +v -11.263565 0.632942 -1.662029 +v -11.251804 -0.038342 -1.668316 +v -11.251804 0.632942 -1.668316 +v -11.239042 -0.038342 -1.672187 +v -11.239042 0.632942 -1.672187 +vn 0.0067 -0.0000 -0.0677 +vn 0.0197 -0.0000 -0.0651 +vn 0.0321 -0.0000 -0.0600 +vn 0.0432 -0.0000 -0.0526 +vn 0.0526 -0.0000 -0.0432 +vn 0.0600 -0.0000 -0.0321 +vn 0.0651 -0.0000 -0.0197 +vn 0.0677 -0.0000 -0.0067 +vn 0.0677 -0.0000 0.0067 +vn 0.0651 -0.0000 0.0197 +vn 0.0600 -0.0000 0.0321 +vn 0.0526 -0.0000 0.0432 +vn 0.0432 -0.0000 0.0526 +vn 0.0321 -0.0000 0.0600 +vn 0.0197 -0.0000 0.0651 +vn 0.0067 -0.0000 0.0677 +vn -0.0067 -0.0000 0.0677 +vn -0.0197 -0.0000 0.0651 +vn -0.0321 -0.0000 0.0600 +vn -0.0432 -0.0000 0.0526 +vn -0.0526 -0.0000 0.0432 +vn -0.0600 -0.0000 0.0321 +vn -0.0651 -0.0000 0.0197 +vn -0.0677 -0.0000 0.0067 +vn -0.0677 -0.0000 -0.0067 +vn -0.0651 -0.0000 -0.0197 +vn -0.0600 -0.0000 -0.0321 +vn -0.0526 -0.0000 -0.0432 +vn -0.0432 -0.0000 -0.0526 +vn -0.0321 -0.0000 -0.0600 +vn -0.0000 0.3356 -0.0000 +vn -0.0197 -0.0000 -0.0651 +vn -0.0067 -0.0000 -0.0677 +vn -0.0000 -0.3356 -0.0000 +vt 1.000000 0.500000 +vt 0.000000 0.500000 +vt 0.750000 0.490000 +vt 1.000000 1.000000 +vt 0.250000 0.490000 +vt 0.000000 1.000000 +vt 0.968750 0.500000 +vt 0.796822 0.485388 +vt 0.968750 1.000000 +vt 0.296822 0.485388 +vt 0.937500 0.500000 +vt 0.841844 0.471731 +vt 0.937500 1.000000 +vt 0.341844 0.471731 +vt 0.906250 0.500000 +vt 0.883337 0.449553 +vt 0.906250 1.000000 +vt 0.383337 0.449553 +vt 0.875000 0.500000 +vt 0.919706 0.419706 +vt 0.875000 1.000000 +vt 0.419706 0.419706 +vt 0.843750 0.500000 +vt 0.949553 0.383337 +vt 0.843750 1.000000 +vt 0.449553 0.383337 +vt 0.812500 0.500000 +vt 0.971731 0.341844 +vt 0.812500 1.000000 +vt 0.471731 0.341844 +vt 0.781250 0.500000 +vt 0.985388 0.296822 +vt 0.781250 1.000000 +vt 0.485388 0.296822 +vt 0.750000 0.500000 +vt 0.990000 0.250000 +vt 0.750000 1.000000 +vt 0.490000 0.250000 +vt 0.718750 0.500000 +vt 0.985388 0.203178 +vt 0.718750 1.000000 +vt 0.485388 0.203178 +vt 0.687500 0.500000 +vt 0.971731 0.158156 +vt 0.687500 1.000000 +vt 0.471731 0.158156 +vt 0.656250 0.500000 +vt 0.949553 0.116663 +vt 0.656250 1.000000 +vt 0.449553 0.116663 +vt 0.625000 0.500000 +vt 0.919706 0.080294 +vt 0.625000 1.000000 +vt 0.419706 0.080294 +vt 0.593750 0.500000 +vt 0.883337 0.050447 +vt 0.593750 1.000000 +vt 0.383337 0.050447 +vt 0.562500 0.500000 +vt 0.841844 0.028269 +vt 0.562500 1.000000 +vt 0.341844 0.028269 +vt 0.531250 0.500000 +vt 0.796822 0.014612 +vt 0.531250 1.000000 +vt 0.296822 0.014612 +vt 0.500000 0.500000 +vt 0.750000 0.010000 +vt 0.500000 1.000000 +vt 0.250000 0.010000 +vt 0.468750 0.500000 +vt 0.703178 0.014612 +vt 0.468750 1.000000 +vt 0.203178 0.014612 +vt 0.437500 0.500000 +vt 0.658156 0.028269 +vt 0.437500 1.000000 +vt 0.158156 0.028269 +vt 0.406250 0.500000 +vt 0.616663 0.050447 +vt 0.406250 1.000000 +vt 0.116663 0.050447 +vt 0.375000 0.500000 +vt 0.580294 0.080294 +vt 0.375000 1.000000 +vt 0.080294 0.080294 +vt 0.343750 0.500000 +vt 0.550447 0.116663 +vt 0.343750 1.000000 +vt 0.050447 0.116663 +vt 0.312500 0.500000 +vt 0.528269 0.158156 +vt 0.312500 1.000000 +vt 0.028269 0.158156 +vt 0.281250 0.500000 +vt 0.514612 0.203178 +vt 0.281250 1.000000 +vt 0.014612 0.203178 +vt 0.250000 0.500000 +vt 0.510000 0.250000 +vt 0.250000 1.000000 +vt 0.010000 0.250000 +vt 0.218750 0.500000 +vt 0.514612 0.296822 +vt 0.218750 1.000000 +vt 0.014612 0.296822 +vt 0.187500 0.500000 +vt 0.528269 0.341844 +vt 0.187500 1.000000 +vt 0.028269 0.341844 +vt 0.156250 0.500000 +vt 0.550447 0.383337 +vt 0.156250 1.000000 +vt 0.050447 0.383337 +vt 0.125000 0.500000 +vt 0.580294 0.419706 +vt 0.125000 1.000000 +vt 0.080294 0.419706 +vt 0.093750 0.500000 +vt 0.616663 0.449553 +vt 0.093750 1.000000 +vt 0.116663 0.449553 +vt 0.062500 0.500000 +vt 0.658156 0.471731 +vt 0.158156 0.471731 +vt 0.062500 1.000000 +vt 0.031250 0.500000 +vt 0.703178 0.485388 +vt 0.203178 0.485388 +vt 0.031250 1.000000 +s 0 +usemtl Wood.003 +f 16156/31005/12758 16157/31008/12758 16159/31013/12758 16158/31011/12758 +f 16158/31011/12759 16159/31013/12759 16161/31017/12759 16160/31015/12759 +f 16160/31015/12760 16161/31017/12760 16163/31021/12760 16162/31019/12760 +f 16162/31019/12761 16163/31021/12761 16165/31025/12761 16164/31023/12761 +f 16164/31023/12762 16165/31025/12762 16167/31029/12762 16166/31027/12762 +f 16166/31027/12763 16167/31029/12763 16169/31033/12763 16168/31031/12763 +f 16168/31031/12764 16169/31033/12764 16171/31037/12764 16170/31035/12764 +f 16170/31035/12765 16171/31037/12765 16173/31041/12765 16172/31039/12765 +f 16172/31039/12766 16173/31041/12766 16175/31045/12766 16174/31043/12766 +f 16174/31043/12767 16175/31045/12767 16177/31049/12767 16176/31047/12767 +f 16176/31047/12768 16177/31049/12768 16179/31053/12768 16178/31051/12768 +f 16178/31051/12769 16179/31053/12769 16181/31057/12769 16180/31055/12769 +f 16180/31055/12770 16181/31057/12770 16183/31061/12770 16182/31059/12770 +f 16182/31059/12771 16183/31061/12771 16185/31065/12771 16184/31063/12771 +f 16184/31063/12772 16185/31065/12772 16187/31069/12772 16186/31067/12772 +f 16186/31067/12773 16187/31069/12773 16189/31073/12773 16188/31071/12773 +f 16188/31071/12774 16189/31073/12774 16191/31077/12774 16190/31075/12774 +f 16190/31075/12775 16191/31077/12775 16193/31081/12775 16192/31079/12775 +f 16192/31079/12776 16193/31081/12776 16195/31085/12776 16194/31083/12776 +f 16194/31083/12777 16195/31085/12777 16197/31089/12777 16196/31087/12777 +f 16196/31087/12778 16197/31089/12778 16199/31093/12778 16198/31091/12778 +f 16198/31091/12779 16199/31093/12779 16201/31097/12779 16200/31095/12779 +f 16200/31095/12780 16201/31097/12780 16203/31101/12780 16202/31099/12780 +f 16202/31099/12781 16203/31101/12781 16205/31105/12781 16204/31103/12781 +f 16204/31103/12782 16205/31105/12782 16207/31109/12782 16206/31107/12782 +f 16206/31107/12783 16207/31109/12783 16209/31113/12783 16208/31111/12783 +f 16208/31111/12784 16209/31113/12784 16211/31117/12784 16210/31115/12784 +f 16210/31115/12785 16211/31117/12785 16213/31121/12785 16212/31119/12785 +f 16212/31119/12786 16213/31121/12786 16215/31125/12786 16214/31123/12786 +f 16214/31123/12787 16215/31125/12787 16217/31130/12787 16216/31127/12787 +f 16159/31014/12788 16157/31009/12788 16219/31133/12788 16217/31129/12788 16215/31126/12788 16213/31122/12788 16211/31118/12788 16209/31114/12788 16207/31110/12788 16205/31106/12788 16203/31102/12788 16201/31098/12788 16199/31094/12788 16197/31090/12788 16195/31086/12788 16193/31082/12788 16191/31078/12788 16189/31074/12788 16187/31070/12788 16185/31066/12788 16183/31062/12788 16181/31058/12788 16179/31054/12788 16177/31050/12788 16175/31046/12788 16173/31042/12788 16171/31038/12788 16169/31034/12788 16167/31030/12788 16165/31026/12788 16163/31022/12788 16161/31018/12788 +f 16216/31127/12789 16217/31130/12789 16219/31134/12789 16218/31131/12789 +f 16218/31131/12790 16219/31134/12790 16157/31010/12790 16156/31006/12790 +f 16156/31007/12791 16158/31012/12791 16160/31016/12791 16162/31020/12791 16164/31024/12791 16166/31028/12791 16168/31032/12791 16170/31036/12791 16172/31040/12791 16174/31044/12791 16176/31048/12791 16178/31052/12791 16180/31056/12791 16182/31060/12791 16184/31064/12791 16186/31068/12791 16188/31072/12791 16190/31076/12791 16192/31080/12791 16194/31084/12791 16196/31088/12791 16198/31092/12791 16200/31096/12791 16202/31100/12791 16204/31104/12791 16206/31108/12791 16208/31112/12791 16210/31116/12791 16212/31120/12791 16214/31124/12791 16216/31128/12791 16218/31132/12791 +o Cylinder.006 +v -11.225771 0.621996 -2.137171 +v -11.225771 0.655250 -2.137171 +v -11.122041 0.621996 -2.126955 +v -11.122041 0.655250 -2.126955 +v -11.022296 0.621996 -2.096698 +v -11.022296 0.655250 -2.096698 +v -10.930371 0.621996 -2.047563 +v -10.930371 0.655250 -2.047563 +v -10.849798 0.621996 -1.981438 +v -10.849798 0.655250 -1.981438 +v -10.783674 0.621996 -1.900866 +v -10.783674 0.655250 -1.900866 +v -10.734539 0.621996 -1.808941 +v -10.734539 0.655250 -1.808941 +v -10.704282 0.621996 -1.709196 +v -10.704282 0.655250 -1.709196 +v -10.694066 0.621996 -1.605466 +v -10.694066 0.655250 -1.605466 +v -10.704282 0.621996 -1.501735 +v -10.704282 0.655250 -1.501735 +v -10.734539 0.621996 -1.401991 +v -10.734539 0.655250 -1.401991 +v -10.783674 0.621996 -1.310066 +v -10.783674 0.655250 -1.310066 +v -10.849798 0.621996 -1.229493 +v -10.849798 0.655250 -1.229493 +v -10.930371 0.621996 -1.163369 +v -10.930371 0.655250 -1.163369 +v -11.022296 0.621996 -1.114234 +v -11.022296 0.655250 -1.114234 +v -11.122041 0.621996 -1.083977 +v -11.122041 0.655250 -1.083977 +v -11.225771 0.621996 -1.073761 +v -11.225771 0.655250 -1.073761 +v -11.329501 0.621996 -1.083977 +v -11.329501 0.655250 -1.083977 +v -11.429246 0.621996 -1.114234 +v -11.429246 0.655250 -1.114234 +v -11.521171 0.621996 -1.163369 +v -11.521171 0.655250 -1.163369 +v -11.601744 0.621996 -1.229493 +v -11.601744 0.655250 -1.229493 +v -11.667868 0.621996 -1.310066 +v -11.667868 0.655250 -1.310066 +v -11.717003 0.621996 -1.401991 +v -11.717003 0.655250 -1.401991 +v -11.747260 0.621996 -1.501735 +v -11.747260 0.655250 -1.501735 +v -11.757476 0.621996 -1.605466 +v -11.757476 0.655250 -1.605466 +v -11.747260 0.621996 -1.709196 +v -11.747260 0.655250 -1.709196 +v -11.717003 0.621996 -1.808941 +v -11.717003 0.655250 -1.808941 +v -11.667868 0.621996 -1.900865 +v -11.667868 0.655250 -1.900865 +v -11.601744 0.621996 -1.981438 +v -11.601744 0.655250 -1.981438 +v -11.521171 0.621996 -2.047563 +v -11.521171 0.655250 -2.047563 +v -11.429246 0.621996 -2.096698 +v -11.429246 0.655250 -2.096698 +v -11.329501 0.621996 -2.126955 +v -11.329501 0.655250 -2.126955 +vn 0.0521 -0.0000 -0.5291 +vn 0.1543 -0.0000 -0.5088 +vn 0.2506 -0.0000 -0.4689 +vn 0.3373 -0.0000 -0.4110 +vn 0.4110 -0.0000 -0.3373 +vn 0.4689 -0.0000 -0.2506 +vn 0.5088 -0.0000 -0.1543 +vn 0.5291 -0.0000 -0.0521 +vn 0.5291 -0.0000 0.0521 +vn 0.5088 -0.0000 0.1543 +vn 0.4689 -0.0000 0.2506 +vn 0.4110 -0.0000 0.3373 +vn 0.3373 -0.0000 0.4110 +vn 0.2506 -0.0000 0.4689 +vn 0.1543 -0.0000 0.5088 +vn 0.0521 -0.0000 0.5291 +vn -0.0521 -0.0000 0.5291 +vn -0.1543 -0.0000 0.5088 +vn -0.2506 -0.0000 0.4689 +vn -0.3373 -0.0000 0.4110 +vn -0.4110 -0.0000 0.3373 +vn -0.4689 -0.0000 0.2506 +vn -0.5088 -0.0000 0.1543 +vn -0.5291 -0.0000 0.0521 +vn -0.5291 -0.0000 -0.0521 +vn -0.5088 -0.0000 -0.1543 +vn -0.4689 -0.0000 -0.2506 +vn -0.4110 -0.0000 -0.3373 +vn -0.3373 -0.0000 -0.4110 +vn -0.2506 -0.0000 -0.4689 +vn -0.0000 0.0166 -0.0000 +vn -0.1543 -0.0000 -0.5088 +vn -0.0521 -0.0000 -0.5291 +vn -0.0000 -0.0166 -0.0000 +vt 0.931510 0.308796 +vt 0.776302 0.308796 +vt 0.859115 0.593982 +vt 0.931510 0.386574 +vt 0.862240 0.502315 +vt 0.776302 0.386574 +vt 0.926823 0.308796 +vt 0.873698 0.589352 +vt 0.926823 0.386574 +vt 0.880469 0.499537 +vt 0.922135 0.308796 +vt 0.887240 0.575463 +vt 0.922135 0.386574 +vt 0.897135 0.491204 +vt 0.916927 0.308796 +vt 0.933073 0.232870 +vt 0.899740 0.553241 +vt 0.916927 0.386574 +vt 0.933073 0.538426 +vt 0.913281 0.477315 +vt 0.913802 0.232870 +vt 0.911198 0.523611 +vt 0.913802 0.538426 +vt 0.927344 0.459722 +vt 0.895052 0.232870 +vt 0.920052 0.487500 +vt 0.895052 0.538426 +vt 0.938281 0.436574 +vt 0.875781 0.232870 +vt 0.926823 0.445833 +vt 0.875781 0.538426 +vt 0.947135 0.410648 +vt 0.857031 0.232870 +vt 0.930990 0.401389 +vt 0.857031 0.538426 +vt 0.952344 0.382870 +vt 0.837760 0.232870 +vt 0.932552 0.354167 +vt 0.837760 0.538426 +vt 0.953906 0.353241 +vt 0.819010 0.232870 +vt 0.930990 0.306944 +vt 0.819010 0.538426 +vt 0.952344 0.324537 +vt 0.799740 0.232870 +vt 0.938281 0.287500 +vt 0.926823 0.262500 +vt 0.799740 0.538426 +vt 0.938281 0.504167 +vt 0.947135 0.296759 +vt 0.924740 0.287500 +vt 0.920052 0.220833 +vt 0.924740 0.504167 +vt 0.938281 0.270833 +vt 0.911198 0.287500 +vt 0.911198 0.184722 +vt 0.911198 0.504167 +vt 0.927344 0.247685 +vt 0.897656 0.287500 +vt 0.899740 0.154167 +vt 0.897656 0.504167 +vt 0.913281 0.230093 +vt 0.884115 0.287500 +vt 0.887240 0.131944 +vt 0.884115 0.504167 +vt 0.897135 0.216204 +vt 0.870573 0.287500 +vt 0.873698 0.118981 +vt 0.870573 0.504167 +vt 0.880469 0.207870 +vt 0.857031 0.287500 +vt 0.859115 0.114352 +vt 0.857031 0.504167 +vt 0.862240 0.205093 +vt 0.843490 0.287500 +vt 0.844531 0.118981 +vt 0.843490 0.504167 +vt 0.844531 0.207870 +vt 0.829948 0.287500 +vt 0.830990 0.131944 +vt 0.829948 0.504167 +vt 0.827344 0.216204 +vt 0.816406 0.287500 +vt 0.818490 0.154167 +vt 0.816406 0.504167 +vt 0.811198 0.230093 +vt 0.802865 0.287500 +vt 0.807031 0.184722 +vt 0.802865 0.504167 +vt 0.797135 0.247685 +vt 0.789323 0.287500 +vt 0.798177 0.220833 +vt 0.789323 0.504167 +vt 0.786198 0.270833 +vt 0.775781 0.287500 +vt 0.938281 0.093056 +vt 0.791406 0.262500 +vt 0.775781 0.504167 +vt 0.938281 0.593056 +vt 0.777344 0.296759 +vt 0.907031 0.093056 +vt 0.787240 0.306944 +vt 0.907031 0.593056 +vt 0.772135 0.324537 +vt 0.875781 0.093056 +vt 0.785677 0.354167 +vt 0.875781 0.593056 +vt 0.770573 0.353241 +vt 0.844531 0.093056 +vt 0.787240 0.401389 +vt 0.844531 0.593056 +vt 0.772135 0.382870 +vt 0.813281 0.093056 +vt 0.791406 0.445833 +vt 0.813281 0.593056 +vt 0.777344 0.410648 +vt 0.782031 0.093056 +vt 0.800260 0.308796 +vt 0.798177 0.487500 +vt 0.782031 0.593056 +vt 0.800260 0.386574 +vt 0.786198 0.436574 +vt 0.795573 0.308796 +vt 0.807031 0.523611 +vt 0.795573 0.386574 +vt 0.797135 0.459722 +vt 0.790885 0.308796 +vt 0.818490 0.553241 +vt 0.790885 0.386574 +vt 0.811198 0.477315 +vt 0.785677 0.308796 +vt 0.830990 0.575463 +vt 0.827344 0.491204 +vt 0.785677 0.386574 +vt 0.780990 0.308796 +vt 0.844531 0.589352 +vt 0.844531 0.499537 +vt 0.780990 0.386574 +s 0 +usemtl Generic_walls +f 16220/31135/12792 16221/31138/12792 16223/31143/12792 16222/31141/12792 +f 16222/31141/12793 16223/31143/12793 16225/31147/12793 16224/31145/12793 +f 16224/31145/12794 16225/31147/12794 16227/31152/12794 16226/31149/12794 +f 16226/31150/12795 16227/31153/12795 16229/31157/12795 16228/31155/12795 +f 16228/31155/12796 16229/31157/12796 16231/31161/12796 16230/31159/12796 +f 16230/31159/12797 16231/31161/12797 16233/31165/12797 16232/31163/12797 +f 16232/31163/12798 16233/31165/12798 16235/31169/12798 16234/31167/12798 +f 16234/31167/12799 16235/31169/12799 16237/31173/12799 16236/31171/12799 +f 16236/31171/12800 16237/31173/12800 16239/31177/12800 16238/31175/12800 +f 16238/31175/12801 16239/31177/12801 16241/31182/12801 16240/31179/12801 +f 16240/31180/12802 16241/31183/12802 16243/31187/12802 16242/31185/12802 +f 16242/31185/12803 16243/31187/12803 16245/31191/12803 16244/31189/12803 +f 16244/31189/12804 16245/31191/12804 16247/31195/12804 16246/31193/12804 +f 16246/31193/12805 16247/31195/12805 16249/31199/12805 16248/31197/12805 +f 16248/31197/12806 16249/31199/12806 16251/31203/12806 16250/31201/12806 +f 16250/31201/12807 16251/31203/12807 16253/31207/12807 16252/31205/12807 +f 16252/31205/12808 16253/31207/12808 16255/31211/12808 16254/31209/12808 +f 16254/31209/12809 16255/31211/12809 16257/31215/12809 16256/31213/12809 +f 16256/31213/12810 16257/31215/12810 16259/31219/12810 16258/31217/12810 +f 16258/31217/12811 16259/31219/12811 16261/31223/12811 16260/31221/12811 +f 16260/31221/12812 16261/31223/12812 16263/31227/12812 16262/31225/12812 +f 16262/31225/12813 16263/31227/12813 16265/31232/12813 16264/31229/12813 +f 16264/31230/12814 16265/31233/12814 16267/31237/12814 16266/31235/12814 +f 16266/31235/12815 16267/31237/12815 16269/31241/12815 16268/31239/12815 +f 16268/31239/12816 16269/31241/12816 16271/31245/12816 16270/31243/12816 +f 16270/31243/12817 16271/31245/12817 16273/31249/12817 16272/31247/12817 +f 16272/31247/12818 16273/31249/12818 16275/31254/12818 16274/31251/12818 +f 16274/31252/12819 16275/31255/12819 16277/31259/12819 16276/31257/12819 +f 16276/31257/12820 16277/31259/12820 16279/31263/12820 16278/31261/12820 +f 16278/31261/12821 16279/31263/12821 16281/31268/12821 16280/31265/12821 +f 16223/31144/12822 16221/31139/12822 16283/31271/12822 16281/31267/12822 16279/31264/12822 16277/31260/12822 16275/31256/12822 16273/31250/12822 16271/31246/12822 16269/31242/12822 16267/31238/12822 16265/31234/12822 16263/31228/12822 16261/31224/12822 16259/31220/12822 16257/31216/12822 16255/31212/12822 16253/31208/12822 16251/31204/12822 16249/31200/12822 16247/31196/12822 16245/31192/12822 16243/31188/12822 16241/31184/12822 16239/31178/12822 16237/31174/12822 16235/31170/12822 16233/31166/12822 16231/31162/12822 16229/31158/12822 16227/31154/12822 16225/31148/12822 +f 16280/31265/12823 16281/31268/12823 16283/31272/12823 16282/31269/12823 +f 16282/31269/12824 16283/31272/12824 16221/31140/12824 16220/31136/12824 +f 16220/31137/12825 16222/31142/12825 16224/31146/12825 16226/31151/12825 16228/31156/12825 16230/31160/12825 16232/31164/12825 16234/31168/12825 16236/31172/12825 16238/31176/12825 16240/31181/12825 16242/31186/12825 16244/31190/12825 16246/31194/12825 16248/31198/12825 16250/31202/12825 16252/31206/12825 16254/31210/12825 16256/31214/12825 16258/31218/12825 16260/31222/12825 16262/31226/12825 16264/31231/12825 16266/31236/12825 16268/31240/12825 16270/31244/12825 16272/31248/12825 16274/31253/12825 16276/31258/12825 16278/31262/12825 16280/31266/12825 16282/31270/12825 +o parent & care/guild meeting top wall.001 +v 14.562323 3.018906 1.845285 +v 14.562323 2.428760 1.845285 +v 14.562325 3.018906 2.020135 +v 14.562325 2.428760 2.020135 +v -11.650439 3.018906 1.845285 +v -11.650439 2.428760 1.845285 +v -11.650439 3.018906 2.020135 +v -11.650439 2.428760 2.020135 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.0874 +vn -12.6281 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 12.6281 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0874 +vt 0.625000 0.500000 +vt 0.625260 5.007870 +vt 0.375000 0.500000 +vt 0.375260 5.007870 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.625260 -4.257870 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.375260 -4.257870 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl DarkWall +f 16284/31273/12826 16288/31279/12826 16290/31285/12826 16286/31277/12826 +f 16287/31278/12827 16286/31277/12827 16290/31286/12827 16291/31288/12827 +f 16291/31289/12828 16290/31287/12828 16288/31280/12828 16289/31282/12828 +f 16289/31283/12829 16285/31275/12829 16287/31278/12829 16291/31290/12829 +f 16285/31275/12830 16284/31273/12830 16286/31277/12830 16287/31278/12830 +f 16289/31284/12831 16288/31281/12831 16284/31274/12831 16285/31276/12831 +o parent & care/guild meeting top wall.003 +v 14.562322 0.050816 1.849897 +v 14.562322 -0.539330 1.849897 +v 14.562324 0.050816 1.950943 +v 14.562324 -0.539330 1.950943 +v -11.650438 0.050816 1.849897 +v -11.650438 -0.539330 1.849897 +v -11.650438 0.050816 1.950943 +v -11.650438 -0.539330 1.950943 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.0505 +vn -12.6281 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 12.6281 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0505 +vt 0.625000 0.500000 +vt 0.625260 5.007870 +vt 0.375000 0.500000 +vt 0.375260 5.007870 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.625260 -4.257870 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.375260 -4.257870 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl DarkWall +f 16292/31291/12832 16296/31297/12832 16298/31303/12832 16294/31295/12832 +f 16295/31296/12833 16294/31295/12833 16298/31304/12833 16299/31306/12833 +f 16299/31307/12834 16298/31305/12834 16296/31298/12834 16297/31300/12834 +f 16297/31301/12835 16293/31293/12835 16295/31296/12835 16299/31308/12835 +f 16293/31293/12836 16292/31291/12836 16294/31295/12836 16295/31296/12836 +f 16297/31302/12837 16296/31299/12837 16292/31292/12837 16293/31294/12837 +o Guild Meeting room left wall +v -12.006012 3.000000 -2.880315 +v -12.006012 0.000000 -2.880315 +v -11.831161 3.000000 -2.880315 +v -11.831161 0.000000 -2.880315 +v -12.006012 3.000000 0.455236 +v -12.006012 0.000000 0.455236 +v -11.831161 3.000000 0.455236 +v -11.831161 0.000000 0.455236 +vn -0.0000 1.5000 -0.0000 +vn 0.0874 -0.0000 -0.0000 +vn -0.0000 -0.0000 1.6678 +vn -0.0000 -1.5000 -0.0000 +vn -0.0000 -0.0000 -1.6678 +vn -0.0874 -0.0000 -0.0000 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl Wood +f 16300/31309/12838 16304/31313/12838 16306/31317/12838 16302/31311/12838 +f 16303/31312/12839 16302/31311/12839 16306/31318/12839 16307/31320/12839 +f 16307/31321/12840 16306/31319/12840 16304/31314/12840 16305/31316/12840 +f 16305/31315/12841 16301/31310/12841 16303/31312/12841 16307/31322/12841 +f 16301/31310/12842 16300/31309/12842 16302/31311/12842 16303/31312/12842 +f 16305/31316/12843 16304/31314/12843 16300/31309/12843 16301/31310/12843 +o Guild Meeting room right wall +v -7.749732 3.000000 -2.846856 +v -7.749732 0.000000 -2.846856 +v -7.574882 3.000000 -2.846856 +v -7.574882 0.000000 -2.846856 +v -7.749731 3.000000 0.421777 +v -7.749731 0.000000 0.421777 +v -7.574881 3.000000 0.421777 +v -7.574881 0.000000 0.421777 +vn -0.0000 1.5000 -0.0000 +vn 0.0874 -0.0000 -0.0000 +vn -0.0000 -0.0000 1.6343 +vn -0.0000 -1.5000 -0.0000 +vn -0.0000 -0.0000 -1.6343 +vn -0.0874 -0.0000 -0.0000 +vt 0.625000 0.500000 +vt 0.888281 0.671759 +vt 0.855469 0.930093 +vt 0.375000 0.500000 +vt 0.576823 0.671759 +vt 0.605469 0.930093 +vt 0.625000 0.750000 +vt 0.888281 0.668056 +vt 0.888281 0.982870 +vt 0.566406 0.668056 +vt 0.375000 0.750000 +vt 0.576823 0.982870 +vt 0.875000 0.500000 +vt 0.584635 0.693981 +vt 0.855469 0.680093 +vt 0.584635 0.986574 +vt 0.125000 0.500000 +vt 0.605469 0.680093 +vt 0.875000 0.750000 +vt 0.888281 0.990278 +vt 0.912760 0.693981 +vt 0.566406 0.990278 +vt 0.912760 0.986574 +vt 0.125000 0.750000 +s 0 +usemtl Generic_walls +f 16308/31323/12844 16312/31335/12844 16314/31341/12844 16310/31329/12844 +f 16311/31332/12845 16310/31330/12845 16314/31342/12845 16315/31344/12845 +f 16315/31345/12846 16314/31343/12846 16312/31336/12846 16313/31338/12846 +f 16313/31339/12847 16309/31326/12847 16311/31333/12847 16315/31346/12847 +f 16309/31327/12848 16308/31324/12848 16310/31331/12848 16311/31334/12848 +f 16313/31340/12849 16312/31337/12849 16308/31325/12849 16309/31328/12849 +o Guild Meeting room top wall +v -9.844620 3.000000 -2.846856 +v -9.844620 0.000000 -2.846856 +v -9.669769 3.000000 -2.846856 +v -9.669769 0.000000 -2.846856 +v -9.844620 3.000000 0.449821 +v -9.844620 0.000000 0.449821 +v -9.669769 3.000000 0.449821 +v -9.669769 0.000000 0.449821 +vn -0.0000 1.5000 -0.0000 +vn 0.0874 -0.0000 -0.0000 +vn -0.0000 -0.0000 1.6343 +vn -0.0000 -1.5000 -0.0000 +vn -0.0000 -0.0000 -1.6343 +vn -0.0874 -0.0000 -0.0000 +vt 0.625000 0.500000 +vt 0.898698 0.681944 +vt 0.882031 0.974537 +vt 0.375000 0.500000 +vt 0.592448 0.681944 +vt 0.575781 0.974537 +vt 0.625000 0.750000 +vt 0.931510 0.670833 +vt 0.898698 0.987500 +vt 0.614844 0.670833 +vt 0.375000 0.750000 +vt 0.592448 0.987500 +vt 0.875000 0.500000 +vt 0.878385 0.981019 +vt 0.882031 0.668981 +vt 0.563802 0.981019 +vt 0.125000 0.500000 +vt 0.575781 0.668981 +vt 0.875000 0.750000 +vt 0.931510 0.987500 +vt 0.878385 0.666204 +vt 0.614844 0.987500 +vt 0.563802 0.666204 +vt 0.125000 0.750000 +s 0 +usemtl Wood +f 16316/31347/12850 16320/31359/12850 16322/31365/12850 16318/31353/12850 +f 16319/31356/12851 16318/31354/12851 16322/31366/12851 16323/31368/12851 +f 16323/31369/12852 16322/31367/12852 16320/31360/12852 16321/31362/12852 +f 16321/31363/12853 16317/31350/12853 16319/31357/12853 16323/31370/12853 +f 16317/31351/12854 16316/31348/12854 16318/31355/12854 16319/31358/12854 +f 16321/31364/12855 16320/31361/12855 16316/31349/12855 16317/31352/12855 +o GuildClubs top wall +v -7.463389 2.428760 1.845285 +v -7.463389 0.000000 1.845285 +v -7.463389 2.428760 2.020135 +v -7.463389 0.000000 2.020135 +v -7.912315 2.428760 1.845285 +v -7.912315 0.000000 1.845285 +v -7.912315 2.428760 2.020135 +v -7.912315 0.000000 2.020135 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.0874 +vn -1.5522 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 1.5522 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0874 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl DarkWall +f 16324/31371/12856 16328/31375/12856 16330/31379/12856 16326/31373/12856 +f 16327/31374/12857 16326/31373/12857 16330/31380/12857 16331/31382/12857 +f 16331/31383/12858 16330/31381/12858 16328/31376/12858 16329/31378/12858 +f 16329/31377/12859 16325/31372/12859 16327/31374/12859 16331/31384/12859 +f 16325/31372/12860 16324/31371/12860 16326/31373/12860 16327/31374/12860 +f 16329/31378/12861 16328/31376/12861 16324/31371/12861 16325/31372/12861 +o M02 top wall +v -11.680671 2.724678 2.488166 +v -11.680671 0.000000 2.488166 +v -11.680671 2.724678 2.663016 +v -11.680671 0.000000 2.663016 +v -14.784995 2.724678 2.488166 +v -14.784995 0.000000 2.488166 +v -14.784995 2.724678 2.663016 +v -14.784995 0.000000 2.663016 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.0874 +vn -1.5522 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 1.5522 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0874 +vt 0.625000 0.500000 +vt -0.002813 0.996786 +vt 0.375000 0.500000 +vt 0.004062 0.021786 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 1.005937 0.996786 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 1.012812 0.021786 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl CornerRoom +f 16332/31385/12862 16336/31391/12862 16338/31397/12862 16334/31389/12862 +f 16335/31390/12863 16334/31389/12863 16338/31398/12863 16339/31400/12863 +f 16339/31401/12864 16338/31399/12864 16336/31392/12864 16337/31394/12864 +f 16337/31395/12865 16333/31387/12865 16335/31390/12865 16339/31402/12865 +f 16333/31387/12866 16332/31385/12866 16334/31389/12866 16335/31390/12866 +f 16337/31396/12867 16336/31393/12867 16332/31386/12867 16333/31388/12867 +o GuildClubs/parent & care top wall +v -1.110955 2.428760 1.845285 +v -1.110955 0.000000 1.845285 +v -1.110955 2.428760 2.020135 +v -1.110955 0.000000 2.020135 +v -3.785845 2.428760 1.845285 +v -3.785845 0.000000 1.845285 +v -3.785845 2.428760 2.020135 +v -3.785845 0.000000 2.020135 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.0874 +vn -2.7074 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 2.7074 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0874 +vt 0.625000 0.500000 +vt 1.508789 1.487305 +vt 0.375000 0.500000 +vt -0.506836 1.487305 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.487240 0.556944 +vt 1.508789 -0.528320 +vt 0.487240 0.556944 +vt 0.125000 0.500000 +vt -0.506836 -0.528320 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.487240 0.556944 +vt 0.375000 1.000000 +vt 0.487240 0.556944 +vt 0.125000 0.750000 +s 0 +usemtl WallPattern +f 16340/31403/12868 16344/31409/12868 16346/31415/12868 16342/31407/12868 +f 16343/31408/12869 16342/31407/12869 16346/31416/12869 16347/31418/12869 +f 16347/31419/12870 16346/31417/12870 16344/31410/12870 16345/31412/12870 +f 16345/31413/12871 16341/31405/12871 16343/31408/12871 16347/31420/12871 +f 16341/31405/12872 16340/31403/12872 16342/31407/12872 16343/31408/12872 +f 16345/31414/12873 16344/31411/12873 16340/31404/12873 16341/31406/12873 +o parent & care/guild meeting top wall +v 4.051411 2.428760 1.845285 +v 4.051411 0.000000 1.845285 +v 4.051411 2.428760 2.020135 +v 4.051411 0.000000 2.020135 +v 2.755750 2.428760 1.845285 +v 2.755750 0.000000 1.845285 +v 2.755750 2.428760 2.020135 +v 2.755750 0.000000 2.020135 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.0874 +vn -2.1172 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 2.1172 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0874 +vt 0.625000 0.500000 +vt 0.750260 0.625463 +vt 0.375000 0.500000 +vt 0.249740 0.625463 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.750260 0.125463 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.249740 0.125463 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl DarkWall +f 16348/31421/12874 16352/31427/12874 16354/31433/12874 16350/31425/12874 +f 16351/31426/12875 16350/31425/12875 16354/31434/12875 16355/31436/12875 +f 16355/31437/12876 16354/31435/12876 16352/31428/12876 16353/31430/12876 +f 16353/31431/12877 16349/31423/12877 16351/31426/12877 16355/31438/12877 +f 16349/31423/12878 16348/31421/12878 16350/31425/12878 16351/31426/12878 +f 16353/31432/12879 16352/31429/12879 16348/31422/12879 16349/31424/12879 +o parent & care/guild meeting top wall.002 +v 2.755750 2.428760 1.845285 +v 2.755750 0.000000 1.845285 +v 2.755750 2.428760 2.020135 +v 2.755750 0.000000 2.020135 +v -0.182948 2.428760 1.845285 +v -0.182948 0.000000 1.845285 +v -0.182948 2.428760 2.020135 +v -0.182948 0.000000 2.020135 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.0874 +vn -2.1172 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 2.1172 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0874 +vt 0.625000 0.500000 +vt 1.524414 1.516602 +vt 0.375000 0.500000 +vt -0.514648 1.516602 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 1.524414 -0.522461 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt -0.514648 -0.522461 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl WallPattern +f 16356/31439/12880 16360/31445/12880 16362/31451/12880 16358/31443/12880 +f 16359/31444/12881 16358/31443/12881 16362/31452/12881 16363/31454/12881 +f 16363/31455/12882 16362/31453/12882 16360/31446/12882 16361/31448/12882 +f 16361/31449/12883 16357/31441/12883 16359/31444/12883 16363/31456/12883 +f 16357/31441/12884 16356/31439/12884 16358/31443/12884 16359/31444/12884 +f 16361/31450/12885 16360/31447/12885 16356/31440/12885 16357/31442/12885 +o parent & care/guild meeting top wall.005 +v -7.699286 0.035692 0.358390 +v -7.699286 -0.554454 0.358390 +v -7.699286 0.035692 0.450799 +v -7.699286 -0.554454 0.450799 +v -11.875742 0.035692 0.358390 +v -11.875742 -0.554454 0.358390 +v -11.875742 0.035692 0.450799 +v -11.875742 -0.554454 0.450799 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.0462 +vn -2.0120 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 2.0120 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0462 +vt 0.625000 0.500000 +vt 0.625260 5.007870 +vt 0.375000 0.500000 +vt 0.375260 5.007870 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.625260 -4.257870 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.375260 -4.257870 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl DarkWall +f 16364/31457/12886 16368/31463/12886 16370/31469/12886 16366/31461/12886 +f 16367/31462/12887 16366/31461/12887 16370/31470/12887 16371/31472/12887 +f 16371/31473/12888 16370/31471/12888 16368/31464/12888 16369/31466/12888 +f 16369/31467/12889 16365/31459/12889 16367/31462/12889 16371/31474/12889 +f 16365/31459/12890 16364/31457/12890 16366/31461/12890 16367/31462/12890 +f 16369/31468/12891 16368/31465/12891 16364/31458/12891 16365/31460/12891 +o parent & care/guild meeting top wall.006 +v -7.699286 0.035692 -2.872473 +v -7.699286 -0.554454 -2.872473 +v -7.699286 0.035692 -2.780064 +v -7.699286 -0.554454 -2.780064 +v -11.875742 0.035692 -2.872473 +v -11.875742 -0.554454 -2.872473 +v -11.875742 0.035692 -2.780064 +v -11.875742 -0.554454 -2.780064 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.0462 +vn -2.0120 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 2.0120 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0462 +vt 0.625000 0.500000 +vt 0.625260 5.007870 +vt 0.375000 0.500000 +vt 0.375260 5.007870 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.625260 -4.257870 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.375260 -4.257870 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl DarkWall +f 16372/31475/12892 16376/31481/12892 16378/31487/12892 16374/31479/12892 +f 16375/31480/12893 16374/31479/12893 16378/31488/12893 16379/31490/12893 +f 16379/31491/12894 16378/31489/12894 16376/31482/12894 16377/31484/12894 +f 16377/31485/12895 16373/31477/12895 16375/31480/12895 16379/31492/12895 +f 16373/31477/12896 16372/31475/12896 16374/31479/12896 16375/31480/12896 +f 16377/31486/12897 16376/31483/12897 16372/31476/12897 16373/31478/12897 +o Middle right upper wall.004 +v -6.347156 3.000000 -2.868740 +v -6.347156 0.000000 -2.868740 +v -6.347156 3.000000 -2.668740 +v -6.347156 0.000000 -2.668740 +v -7.717966 3.000000 -2.868740 +v -7.717966 0.000000 -2.868740 +v -7.717966 3.000000 -2.668740 +v -7.717966 0.000000 -2.668740 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.1000 +vn -0.6854 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 0.6854 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1000 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl Wood.001 +f 16380/31493/12898 16384/31497/12898 16386/31501/12898 16382/31495/12898 +f 16383/31496/12899 16382/31495/12899 16386/31502/12899 16387/31504/12899 +f 16387/31505/12900 16386/31503/12900 16384/31498/12900 16385/31500/12900 +f 16385/31499/12901 16381/31494/12901 16383/31496/12901 16387/31506/12901 +f 16381/31494/12902 16380/31493/12902 16382/31495/12902 16383/31496/12902 +f 16385/31500/12903 16384/31498/12903 16380/31493/12903 16381/31494/12903 +o Middle right upper wall.005 +v -6.347156 3.000000 0.248451 +v -6.347156 0.000000 0.248451 +v -6.347156 3.000000 0.448451 +v -6.347156 0.000000 0.448451 +v -7.717966 3.000000 0.248451 +v -7.717966 0.000000 0.248451 +v -7.717966 3.000000 0.448451 +v -7.717966 0.000000 0.448451 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.1000 +vn -0.6854 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 0.6854 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1000 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl Wood.001 +f 16388/31507/12904 16392/31511/12904 16394/31515/12904 16390/31509/12904 +f 16391/31510/12905 16390/31509/12905 16394/31516/12905 16395/31518/12905 +f 16395/31519/12906 16394/31517/12906 16392/31512/12906 16393/31514/12906 +f 16393/31513/12907 16389/31508/12907 16391/31510/12907 16395/31520/12907 +f 16389/31508/12908 16388/31507/12908 16390/31509/12908 16391/31510/12908 +f 16393/31514/12909 16392/31512/12909 16388/31507/12909 16389/31508/12909 +o Middle right upper wall.006 +v 0.665834 3.000000 0.248451 +v 0.665834 0.000000 0.248451 +v 0.665834 3.000000 0.448451 +v 0.665834 0.000000 0.448451 +v -1.325542 3.000000 0.248451 +v -1.325542 0.000000 0.248451 +v -1.325542 3.000000 0.448451 +v -1.325542 0.000000 0.448451 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.1000 +vn -0.9957 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 0.9957 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1000 +vt 0.625000 0.500000 +vt 0.293981 0.956010 +vt 0.893981 0.863221 +vt 0.375000 0.500000 +vt 0.293981 0.110337 +vt 0.131944 0.863221 +vt 0.625000 0.750000 +vt 0.691204 0.244471 +vt 0.143056 0.958894 +vt 0.019907 0.244471 +vt 0.375000 0.750000 +vt 0.143056 0.113221 +vt 0.875000 0.500000 +vt 0.310648 0.083413 +vt 0.893981 0.101202 +vt 0.310648 0.980529 +vt 0.125000 0.500000 +vt 0.131944 0.101202 +vt 0.875000 0.750000 +vt 0.691204 0.916106 +vt 0.125463 0.083413 +vt 0.019907 0.916106 +vt 0.125463 0.980529 +vt 0.125000 0.750000 +s 0 +usemtl Wood.001 +f 16396/31521/12910 16400/31533/12910 16402/31539/12910 16398/31527/12910 +f 16399/31530/12911 16398/31528/12911 16402/31540/12911 16403/31542/12911 +f 16403/31543/12912 16402/31541/12912 16400/31534/12912 16401/31536/12912 +f 16401/31537/12913 16397/31524/12913 16399/31531/12913 16403/31544/12913 +f 16397/31525/12914 16396/31522/12914 16398/31529/12914 16399/31532/12914 +f 16401/31538/12915 16400/31535/12915 16396/31523/12915 16397/31526/12915 +o Middle right upper wall.007 +v 0.665834 3.000000 -2.868740 +v 0.665834 0.000000 -2.868740 +v 0.665834 3.000000 -2.668740 +v 0.665834 0.000000 -2.668740 +v -1.325542 3.000000 -2.868740 +v -1.325542 0.000000 -2.868740 +v -1.325542 3.000000 -2.668740 +v -1.325542 0.000000 -2.668740 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.1000 +vn -0.9957 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 0.9957 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1000 +vt 0.625000 0.500000 +vt 0.276389 0.023798 +vt 0.966204 -0.000240 +vt 0.375000 0.500000 +vt 0.276389 0.977644 +vt 0.966204 0.995913 +vt 0.625000 0.750000 +vt 0.405093 -0.759856 +vt 0.357870 0.023798 +vt 0.405093 1.845913 +vt 0.375000 0.750000 +vt 0.357870 0.977644 +vt 0.875000 0.500000 +vt 0.393981 0.835337 +vt 0.016204 -0.000240 +vt 0.393981 0.201683 +vt 0.125000 0.500000 +vt 0.016204 0.995913 +vt 0.875000 0.750000 +vt 3.029167 -0.759856 +vt 0.093981 0.835337 +vt 3.029167 1.845913 +vt 0.093981 0.201683 +vt 0.125000 0.750000 +s 0 +usemtl Wood.001 +f 16404/31545/12916 16408/31557/12916 16410/31563/12916 16406/31551/12916 +f 16407/31554/12917 16406/31552/12917 16410/31564/12917 16411/31566/12917 +f 16411/31567/12918 16410/31565/12918 16408/31558/12918 16409/31560/12918 +f 16409/31561/12919 16405/31548/12919 16407/31555/12919 16411/31568/12919 +f 16405/31549/12920 16404/31546/12920 16406/31553/12920 16407/31556/12920 +f 16409/31562/12921 16408/31559/12921 16404/31547/12921 16405/31550/12921 +o Middle right wall.005 +v -0.091425 3.000000 -2.846856 +v -0.091425 0.000000 -2.846856 +v 0.108575 3.000000 -2.846856 +v 0.108575 0.000000 -2.846856 +v -0.091425 3.000000 0.421777 +v -0.091425 0.000000 0.421777 +v 0.108575 3.000000 0.421777 +v 0.108575 0.000000 0.421777 +vn -0.0000 1.5000 -0.0000 +vn 0.1000 -0.0000 -0.0000 +vn -0.0000 -0.0000 1.6343 +vn -0.0000 -1.5000 -0.0000 +vn -0.0000 -0.0000 -1.6343 +vn -0.1000 -0.0000 -0.0000 +vt 0.625000 0.500000 +vt 1.308796 0.715144 +vt 0.375000 0.500000 +vt 1.314352 1.140625 +vt 0.912500 1.032933 +vt 0.625000 0.750000 +vt 0.917130 0.830529 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt -0.268056 0.719952 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt -0.262500 1.145433 +vt 0.875000 0.750000 +vt 0.160648 1.028125 +vt 0.625000 0.000000 +vt 0.165278 0.825721 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl Wood.001 +f 16412/31569/12922 16416/31577/12922 16418/31583/12922 16414/31574/12922 +f 16415/31575/12923 16414/31573/12923 16418/31584/12923 16419/31586/12923 +f 16419/31587/12924 16418/31585/12924 16416/31578/12924 16417/31580/12924 +f 16417/31581/12925 16413/31571/12925 16415/31576/12925 16419/31588/12925 +f 16413/31571/12926 16412/31569/12926 16414/31574/12926 16415/31576/12926 +f 16417/31582/12927 16416/31579/12927 16412/31570/12927 16413/31572/12927 +o Seeting +v -0.199942 -0.031200 0.166589 +v -0.199942 0.490564 0.166589 +v -0.199942 -0.031199 -2.573842 +v -0.199942 0.490565 -2.573842 +v -0.676418 -0.031200 0.166589 +v -0.676418 0.490564 0.166589 +v -0.676418 -0.031199 -2.573842 +v -0.676418 0.490565 -2.573842 +v -0.676418 0.490564 -0.320987 +v -0.676418 0.490565 -2.086267 +v -0.199942 -0.031200 -0.320987 +v -0.199942 -0.031199 -2.086267 +v -0.676418 -0.031199 -2.086267 +v -0.676418 -0.031200 -0.320987 +v -0.199942 0.490565 -2.086267 +v -0.199942 0.490564 -0.320987 +v -1.319706 0.490565 -2.086267 +v -1.319706 0.490565 -2.573842 +v -1.319706 -0.031199 -2.573842 +v -1.319706 -0.031200 0.166589 +v -1.319706 0.490564 0.166589 +v -1.319706 -0.031200 -0.320987 +v -1.319706 0.490564 -0.320987 +v -1.319706 -0.031199 -2.086267 +v -0.199942 0.999999 0.166589 +v -0.199942 1.000000 -2.573842 +v -0.676418 0.999999 0.166589 +v -0.676418 1.000000 -2.573842 +v -0.199942 1.000000 -2.086267 +v -0.199942 1.000000 -0.320986 +v -1.319706 1.000000 -2.573842 +v -1.319706 0.999999 0.166589 +v -0.083790 0.999999 0.328909 +v -0.083790 1.000000 -2.736162 +v -0.620916 0.999999 0.328909 +v -0.620916 1.000000 -2.736162 +v -0.083790 1.000000 -2.190827 +v -0.083790 1.000000 -0.216426 +v -1.319710 1.000000 -2.722512 +v -1.319710 0.999999 0.315257 +v -1.319706 0.490565 -2.722513 +v -1.319706 -0.031199 -2.722513 +v -1.319706 -0.031200 0.315259 +v -1.319706 0.490564 0.315260 +v -1.319710 1.000000 -2.722512 +v -1.319710 0.999999 0.315257 +vn -0.0000 -0.2609 -0.0000 +vn -0.0000 -0.0000 -1.3702 +vn -0.0000 -0.0000 1.3702 +vn -0.0000 0.2609 -0.0000 +vn 0.3000 -0.0000 -0.0000 +vn -0.3000 -0.0000 -0.0000 +vn -0.3000 -0.0000 0.0001 +vn -0.3000 -0.0000 -0.0001 +vt 0.750260 0.500463 +vt 0.015365 0.006944 +vt 0.250260 0.500463 +vt 0.999901 0.000099 +vt 0.750260 1.000463 +vt 0.970573 0.006944 +vt 0.250260 1.000463 +vt 0.999740 0.000463 +vt 0.000099 0.000099 +vt 1.250260 0.500463 +vt 0.750260 -0.000463 +vt 0.015365 0.897685 +vt 0.079427 -0.005093 +vt 0.250260 -0.000463 +vt -0.250260 0.500463 +vt 1.250260 1.000463 +vt 0.750260 1.500463 +vt 0.970573 0.897685 +vt 0.000041 0.999959 +vt 0.250260 1.500463 +vt 0.574219 0.000463 +vt 0.199219 0.897685 +vt 0.931510 -0.005093 +vt 0.998047 0.998047 +vt 0.784635 0.897685 +vt 0.998047 0.998047 +vt 0.165974 0.999959 +vt 0.750260 0.596759 +vt 0.750260 0.903241 +vt 0.998047 0.998047 +vt 1.250260 0.903241 +vt 1.250260 0.596759 +vt 0.998047 0.998047 +vt 0.250260 0.903241 +vt 0.784635 0.006944 +vt 0.177983 0.000099 +vt 0.250260 0.596759 +vt 0.199219 0.006944 +vt 0.822017 0.000099 +vt 0.998047 0.998047 +vt 0.165974 0.000041 +vt 0.000041 0.000041 +vt 0.250260 1.500463 +vt 0.000260 0.000463 +vt 0.998047 0.998047 +vt 1.250260 1.000463 +vt 0.750260 1.500463 +vt 0.998047 0.998047 +vt 1.250260 0.500463 +vt 0.750260 -0.000463 +vt 0.998047 0.998047 +vt 0.084635 0.984722 +vt 0.250260 -0.000463 +vt -0.250260 0.500463 +vt 0.998047 0.998047 +vt 1.250260 0.596759 +vt 0.998047 0.998047 +vt 0.936719 0.984722 +vt 0.998047 0.998047 +vt 0.998047 0.998047 +vt 1.250260 0.903241 +vt 0.250260 0.500463 +vt 0.999901 0.976277 +vt 0.091927 0.765278 +vt -0.000260 0.250463 +vt 0.999740 0.523611 +vt 0.000099 0.976277 +vt 0.899219 0.765278 +vt 0.250260 1.250463 +vt 0.250260 -0.000463 +vt -0.250260 0.500463 +vt -0.000260 0.249537 +vt -0.000260 0.250463 +vt 0.574219 0.523611 +vt 0.250260 1.250463 +vt -0.250260 1.000463 +vt 0.177983 0.976277 +vt 0.756510 0.765278 +vt 0.822017 0.976277 +vt 0.235677 0.765278 +vt 0.000260 0.523611 +vt -0.250260 1.000463 +vt 0.998047 0.998047 +vt -0.250260 0.500463 +vt -0.000260 0.250463 +vt 0.998047 0.998047 +vt 0.044010 0.269907 +vt -0.000260 0.250463 +vt 0.948177 0.269907 +vt 0.250260 1.250463 +vt -0.000260 0.249537 +vt -0.000260 0.250463 +vt 0.250260 1.250463 +vt -0.250260 1.000463 +vt 0.787240 0.269907 +vt 0.204948 0.269907 +vt -0.250260 1.000463 +vt -0.000260 0.250463 +vt 0.998047 0.998047 +vt 0.998047 0.998047 +vt 0.998047 0.998047 +vt 0.998047 0.998047 +vt 0.998047 0.998047 +vt 0.998047 0.998047 +s 0 +usemtl ChairTexture +f 16431/31617/12928 16432/31619/12928 16426/31604/12928 16422/31593/12928 +f 16423/31595/12929 16422/31593/12929 16426/31605/12929 16427/31608/12929 +f 16432/31618/12930 16429/31614/12930 16436/31628/12930 16443/31648/12930 +f 16429/31613/12931 16434/31623/12931 16423/31594/12931 16427/31606/12931 +f 16434/31622/12932 16431/31617/12932 16422/31593/12932 16423/31595/12932 +f 16425/31602/12930 16424/31599/12930 16420/31589/12930 16421/31591/12930 +f 16421/31591/12932 16420/31589/12932 16430/31616/12932 16435/31625/12932 +f 16435/31625/12932 16430/31616/12932 16431/31617/12932 16434/31622/12932 +f 16425/31600/12931 16421/31590/12931 16435/31626/12931 16428/31610/12931 +f 16428/31610/12931 16435/31626/12931 16434/31623/12931 16429/31613/12931 +f 16425/31601/12931 16428/31611/12931 16442/31646/12931 16440/31640/12931 +f 16429/31614/12933 16432/31618/12933 16433/31621/12933 16428/31612/12933 +f 16420/31589/12928 16424/31598/12928 16433/31620/12928 16430/31616/12928 +f 16430/31616/12928 16433/31620/12928 16432/31619/12928 16431/31617/12928 +f 16442/31647/12933 16441/31645/12933 16439/31639/12933 16440/31643/12933 +f 16437/31633/12933 16438/31636/12933 16443/31648/12933 16436/31628/12933 +f 16429/31615/12931 16427/31607/12931 16437/31630/12931 16436/31629/12931 +f 16433/31620/12928 16424/31598/12928 16439/31637/12928 16441/31644/12928 +f 16426/31604/12928 16432/31619/12928 16443/31649/12928 16438/31634/12928 +f 16424/31599/12930 16425/31602/12930 16440/31641/12930 16439/31638/12930 +f 16428/31612/12929 16433/31621/12929 16441/31645/12929 16442/31647/12929 +f 16427/31608/12929 16426/31605/12929 16438/31635/12929 16437/31631/12929 +f 16421/31591/12929 16425/31602/12929 16446/31658/12929 16444/31650/12929 +f 16434/31624/12933 16435/31627/12933 16449/31667/12933 16448/31665/12933 +f 16427/31609/12930 16423/31596/12930 16445/31654/12930 16447/31662/12930 +f 16440/31642/12929 16451/31672/12929 16446/31659/12929 16425/31603/12929 +f 16435/31627/12933 16421/31592/12933 16444/31651/12933 16449/31667/12933 +f 16427/31609/12930 16447/31662/12930 16450/31669/12930 16437/31632/12930 +f 16434/31624/12933 16448/31665/12933 16445/31655/12933 16423/31597/12933 +f 16448/31666/12931 16456/31683/12931 16453/31677/12931 16445/31656/12931 +f 16447/31663/12931 16445/31657/12931 16453/31678/12931 16455/31681/12931 +f 16447/31664/12931 16455/31682/12931 16458/31685/12931 16450/31670/12931 +f 16448/31666/12931 16449/31668/12931 16457/31684/12931 16456/31683/12931 +f 16449/31668/12931 16444/31652/12931 16452/31675/12931 16457/31684/12931 +f 16444/31653/12931 16446/31660/12931 16454/31679/12931 16452/31676/12931 +f 16451/31673/12931 16459/31686/12931 16454/31680/12931 16446/31661/12931 +f 16450/31671/12934 16464/31691/12934 16460/31687/12934 16437/31633/12934 +f 16439/31639/12933 16462/31689/12933 16463/31690/12933 16440/31643/12933 +f 16440/31643/12935 16463/31690/12935 16465/31692/12935 16451/31674/12935 +f 16437/31633/12933 16460/31687/12933 16461/31688/12933 16438/31636/12933 +o Stand +v -1.266469 0.750000 -1.803115 +v -1.266469 0.000000 -1.803115 +v -0.939968 0.750000 -1.803115 +v -0.939968 0.000000 -1.803115 +v -1.266469 0.750000 -0.621963 +v -1.266469 0.000000 -0.621963 +v -0.939968 0.750000 -0.621963 +v -0.939968 0.000000 -0.621963 +vn -0.0000 0.3750 -0.0000 +vn 0.1633 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.5906 +vn -0.0000 -0.3750 -0.0000 +vn -0.0000 -0.0000 -0.5906 +vn -0.1633 -0.0000 -0.0000 +vt 0.765365 0.112500 +vt 0.779427 0.626389 +vt 0.960156 0.616204 +vt 0.938802 0.123611 +vt 0.949219 0.626389 +vt 0.772656 0.616204 +vt 0.765365 0.611574 +vt 0.774219 0.612500 +vt 0.779427 0.127315 +vt 0.945573 0.612500 +vt 0.938802 0.622685 +vt 0.949219 0.127315 +vt 0.941406 0.112500 +vt 0.777865 0.113426 +vt 0.960156 0.116204 +vt 0.945052 0.113426 +vt 0.772656 0.123611 +vt 0.772656 0.116204 +vt 0.941406 0.611574 +vt 0.774219 0.113426 +vt 0.777865 0.612500 +vt 0.945573 0.113426 +vt 0.945052 0.612500 +vt 0.772656 0.622685 +s 0 +usemtl Generic_walls +f 16466/31693/12936 16470/31705/12936 16472/31711/12936 16468/31699/12936 +f 16469/31702/12937 16468/31700/12937 16472/31712/12937 16473/31714/12937 +f 16473/31715/12938 16472/31713/12938 16470/31706/12938 16471/31708/12938 +f 16471/31709/12939 16467/31696/12939 16469/31703/12939 16473/31716/12939 +f 16467/31697/12940 16466/31694/12940 16468/31701/12940 16469/31704/12940 +f 16471/31710/12941 16470/31707/12941 16466/31695/12941 16467/31698/12941 +o Top.001 +v -1.321758 0.785000 -2.315012 +v -1.321758 0.715000 -2.315012 +v -0.487470 0.785000 -2.315012 +v -0.487470 0.715000 -2.315012 +v -1.321758 0.785000 -0.110067 +v -1.321758 0.715000 -0.110067 +v -0.487470 0.785000 -0.110067 +v -0.487470 0.715000 -0.110067 +vn -0.0000 0.0350 -0.0000 +vn 0.4171 -0.0000 -0.0000 +vn -0.0000 -0.0000 1.1025 +vn -0.0000 -0.0350 -0.0000 +vn -0.0000 -0.0000 -1.1025 +vn -0.4171 -0.0000 -0.0000 +vt 0.784115 0.050463 +vt 0.772656 0.633796 +vt 0.922135 0.623611 +vt 0.924740 0.105093 +vt 0.944010 0.633796 +vt 0.774219 0.623611 +vt 0.784115 0.550463 +vt 0.769010 0.627315 +vt 0.772656 0.133796 +vt 0.942448 0.627315 +vt 0.924740 0.604167 +vt 0.944010 0.133796 +vt 0.930469 0.050463 +vt 0.794531 0.123611 +vt 0.922135 0.123611 +vt 0.924219 0.123611 +vt 0.790885 0.105093 +vt 0.774219 0.123611 +vt 0.930469 0.550463 +vt 0.769010 0.127315 +vt 0.794531 0.623611 +vt 0.942448 0.127315 +vt 0.924219 0.623611 +vt 0.790885 0.604167 +s 0 +usemtl Generic_walls +f 16474/31717/12942 16478/31729/12942 16480/31735/12942 16476/31723/12942 +f 16477/31726/12943 16476/31724/12943 16480/31736/12943 16481/31738/12943 +f 16481/31739/12944 16480/31737/12944 16478/31730/12944 16479/31732/12944 +f 16479/31733/12945 16475/31720/12945 16477/31727/12945 16481/31740/12945 +f 16475/31721/12946 16474/31718/12946 16476/31725/12946 16477/31728/12946 +f 16479/31734/12947 16478/31731/12947 16474/31719/12947 16475/31722/12947 +o Top.002 +v -6.351287 0.785000 -0.104125 +v -6.351287 0.715000 -0.104125 +v -7.185575 0.785000 -0.104125 +v -7.185575 0.715000 -0.104125 +v -6.351287 0.785000 -2.309070 +v -6.351287 0.715000 -2.309070 +v -7.185575 0.785000 -2.309070 +v -7.185575 0.715000 -2.309070 +vn -0.0000 0.0350 -0.0000 +vn -0.4171 -0.0000 -0.0000 +vn -0.0000 -0.0000 -1.1025 +vn -0.0000 -0.0350 -0.0000 +vn -0.0000 -0.0000 1.1025 +vn 0.4171 -0.0000 -0.0000 +vt 0.782552 0.082870 +vt 0.799219 0.608796 +vt 0.927344 0.597685 +vt 0.916927 0.105093 +vt 0.917448 0.608796 +vt 0.777344 0.597685 +vt 0.782552 0.582870 +vt 0.794010 0.580093 +vt 0.799219 0.108796 +vt 0.901302 0.580093 +vt 0.916927 0.605093 +vt 0.917448 0.108796 +vt 0.940885 0.082870 +vt 0.783594 0.073611 +vt 0.927344 0.098611 +vt 0.919010 0.073611 +vt 0.790365 0.105093 +vt 0.777344 0.098611 +vt 0.940885 0.582870 +vt 0.794010 0.080093 +vt 0.783594 0.572685 +vt 0.901302 0.080093 +vt 0.919010 0.572685 +vt 0.790365 0.605093 +s 0 +usemtl Generic_walls +f 16482/31741/12948 16486/31753/12948 16488/31759/12948 16484/31747/12948 +f 16485/31750/12949 16484/31748/12949 16488/31760/12949 16489/31762/12949 +f 16489/31763/12950 16488/31761/12950 16486/31754/12950 16487/31756/12950 +f 16487/31757/12951 16483/31744/12951 16485/31751/12951 16489/31764/12951 +f 16483/31745/12952 16482/31742/12952 16484/31749/12952 16485/31752/12952 +f 16487/31758/12953 16486/31755/12953 16482/31743/12953 16483/31746/12953 +o Stand.001 +v -6.406577 0.750000 -0.616022 +v -6.406577 0.000000 -0.616022 +v -6.733077 0.750000 -0.616022 +v -6.733077 0.000000 -0.616022 +v -6.406577 0.750000 -1.797174 +v -6.406577 0.000000 -1.797174 +v -6.733077 0.750000 -1.797174 +v -6.733077 0.000000 -1.797174 +vn -0.0000 0.3750 -0.0000 +vn -0.1633 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.5906 +vn -0.0000 -0.3750 -0.0000 +vn -0.0000 -0.0000 0.5906 +vn 0.1633 -0.0000 -0.0000 +vt 0.797135 0.093981 +vt 0.783073 0.601389 +vt 0.927344 0.616204 +vt 0.914844 0.083796 +vt 0.921615 0.601389 +vt 0.785156 0.616204 +vt 0.797135 0.593982 +vt 0.778385 0.587500 +vt 0.783073 0.101389 +vt 0.921094 0.587500 +vt 0.914844 0.582870 +vt 0.921615 0.101389 +vt 0.901302 0.093981 +vt 0.780469 0.091204 +vt 0.927344 0.116204 +vt 0.922135 0.091204 +vt 0.784635 0.083796 +vt 0.785156 0.116204 +vt 0.901302 0.593982 +vt 0.778385 0.087500 +vt 0.780469 0.591204 +vt 0.921094 0.087500 +vt 0.922135 0.591204 +vt 0.784635 0.582870 +s 0 +usemtl Generic_walls +f 16490/31765/12954 16494/31777/12954 16496/31783/12954 16492/31771/12954 +f 16493/31774/12955 16492/31772/12955 16496/31784/12955 16497/31786/12955 +f 16497/31787/12956 16496/31785/12956 16494/31778/12956 16495/31780/12956 +f 16495/31781/12957 16491/31768/12957 16493/31775/12957 16497/31788/12957 +f 16491/31769/12958 16490/31766/12958 16492/31773/12958 16493/31776/12958 +f 16495/31782/12959 16494/31779/12959 16490/31767/12959 16491/31770/12959 +o Mid Top +v -3.230820 0.785000 -0.096205 +v -3.230820 0.715000 -0.096205 +v -4.730820 0.785000 -0.096205 +v -4.730820 0.715000 -0.096205 +v -3.230820 0.785000 -2.316991 +v -3.230820 0.715000 -2.316991 +v -4.730820 0.785000 -2.316991 +v -4.730820 0.715000 -2.316991 +v -3.230820 0.715000 -1.206598 +v -4.730820 0.785000 -1.206598 +v -4.730820 0.715000 -1.206598 +v -3.230820 0.785000 -1.206598 +vn -0.0000 0.0350 -0.0000 +vn -0.7500 -0.0000 -0.0000 +vn -0.0000 -0.0000 -1.1104 +vn -0.0000 -0.0350 -0.0000 +vn -0.0000 -0.0000 1.1104 +vn 0.7500 -0.0000 -0.0000 +vt 0.780469 0.030093 +vt 0.802865 0.590278 +vt 0.948177 0.652315 +vt 0.773177 0.622685 +vt 0.780469 0.599537 +vt 0.802865 0.091204 +vt 0.939323 0.030093 +vt 0.770052 0.031019 +vt 0.948177 0.008796 +vt 0.773177 0.024537 +vt 0.939323 0.599537 +vt 0.770052 0.646759 +vt 0.942969 0.019907 +vt 0.775260 0.588426 +vt 0.925781 0.545833 +vt 0.775260 0.089352 +vt 0.925781 0.046759 +vt 0.942969 0.620833 +vt 0.942969 0.641204 +vt 0.775781 0.618981 +vt 0.914323 0.588426 +vt 0.775781 0.029167 +vt 0.914323 0.089352 +vt 0.942969 0.018981 +vt 0.941927 0.622685 +vt 0.943490 0.091204 +vt 0.785156 0.046759 +vt 0.773177 0.620833 +vt 0.767969 0.641204 +vt 0.940885 0.618981 +vt 0.942448 0.031019 +vt 0.766927 0.008796 +vt 0.940885 0.029167 +vt 0.941927 0.024537 +vt 0.773177 0.018981 +vt 0.942448 0.646759 +vt 0.767969 0.019907 +vt 0.943490 0.590278 +vt 0.785156 0.545833 +vt 0.766927 0.652315 +s 0 +usemtl Generic_walls +f 16509/31825/12960 16502/31801/12960 16504/31807/12960 16507/31817/12960 +f 16508/31821/12961 16507/31818/12961 16504/31808/12961 16505/31810/12961 +f 16505/31811/12962 16504/31809/12962 16502/31802/12962 16503/31804/12962 +f 16506/31813/12963 16499/31792/12963 16501/31798/12963 16508/31822/12963 +f 16499/31793/12964 16498/31789/12964 16500/31795/12964 16501/31799/12964 +f 16506/31814/12965 16509/31826/12965 16498/31790/12965 16499/31794/12965 +f 16503/31805/12965 16502/31803/12965 16509/31827/12965 16506/31815/12965 +f 16503/31806/12963 16506/31816/12963 16508/31823/12963 16505/31812/12963 +f 16501/31800/12961 16500/31796/12961 16507/31819/12961 16508/31824/12961 +f 16498/31791/12960 16509/31828/12960 16507/31820/12960 16500/31797/12960 +o Mid Stand +v -3.817570 0.750000 -0.718754 +v -3.817570 0.000000 -0.718754 +v -4.144070 0.750000 -0.718754 +v -4.144070 0.000000 -0.718754 +v -3.817570 0.750000 -1.694441 +v -3.817570 0.000000 -1.694441 +v -4.144070 0.750000 -1.694441 +v -4.144070 0.000000 -1.694441 +vn -0.0000 0.3750 -0.0000 +vn -0.1633 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.4878 +vn -0.0000 -0.3750 -0.0000 +vn -0.0000 -0.0000 0.4878 +vn 0.1633 -0.0000 -0.0000 +vt 0.780469 0.083796 +vt 0.778385 0.579167 +vt 0.944531 0.583796 +vt 0.940365 0.072685 +vt 0.938281 0.579167 +vt 0.771615 0.583796 +vt 0.780469 0.582870 +vt 0.773177 0.593982 +vt 0.778385 0.080093 +vt 0.930469 0.593982 +vt 0.940365 0.571759 +vt 0.938281 0.080093 +vt 0.950260 0.083796 +vt 0.802865 0.069907 +vt 0.944531 0.084722 +vt 0.936198 0.069907 +vt 0.779427 0.072685 +vt 0.771615 0.084722 +vt 0.950260 0.582870 +vt 0.773177 0.094907 +vt 0.802865 0.568981 +vt 0.930469 0.094907 +vt 0.936198 0.568981 +vt 0.779427 0.571759 +s 0 +usemtl floor +f 16510/31829/12966 16514/31841/12966 16516/31847/12966 16512/31835/12966 +f 16513/31838/12967 16512/31836/12967 16516/31848/12967 16517/31850/12967 +f 16517/31851/12968 16516/31849/12968 16514/31842/12968 16515/31844/12968 +f 16515/31845/12969 16511/31832/12969 16513/31839/12969 16517/31852/12969 +f 16511/31833/12970 16510/31830/12970 16512/31837/12970 16513/31840/12970 +f 16515/31846/12971 16514/31843/12971 16510/31831/12971 16511/31834/12971 +o Top.003 +v -0.072148 0.950000 -2.699727 +v -0.072148 0.850000 -2.699727 +v 0.658513 0.950000 -2.699727 +v 0.658513 0.850000 -2.699727 +v -0.072148 0.950000 0.274648 +v -0.072148 0.850000 0.274648 +v 0.658513 0.950000 0.274648 +v 0.658513 0.850000 0.274648 +v -0.072148 0.850000 -1.956133 +v -0.072148 0.850000 -1.212539 +v -0.072148 0.850000 -0.468945 +v 0.658513 0.950000 -1.956133 +v 0.658513 0.950000 -1.212539 +v 0.658513 0.950000 -0.468945 +v 0.658513 0.850000 -0.468945 +v 0.658513 0.850000 -1.212539 +v 0.658513 0.850000 -1.956133 +v -0.072148 0.950000 -0.468945 +v -0.072148 0.950000 -1.212539 +v -0.072148 0.950000 -1.956133 +vn -0.0000 0.0500 -0.0000 +vn 0.3653 -0.0000 -0.0000 +vn -0.0000 -0.0000 1.4872 +vn -0.0000 -0.0500 -0.0000 +vn -0.0000 -0.0000 -1.4872 +vn -0.3653 -0.0000 -0.0000 +vt 0.625000 0.500000 +vt 0.770573 0.502315 +vt 0.774219 0.080093 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.796615 0.363426 +vt 0.939844 0.502315 +vt 0.914844 0.080093 +vt 0.375000 0.750000 +vt 0.796615 0.431944 +vt 0.770573 0.202315 +vt 0.625000 0.250000 +vt 0.375000 0.250000 +vt 0.774219 0.524537 +vt 0.939844 0.202315 +vt 0.832031 0.543056 +vt 0.625000 0.000000 +vt 0.794531 0.543056 +vt 0.375000 0.000000 +vt 0.914844 0.524537 +vt 0.375000 0.437500 +vt 0.774219 0.191204 +vt 0.375000 0.375000 +vt 0.774219 0.302315 +vt 0.375000 0.312500 +vt 0.774219 0.413426 +vt 0.944531 0.363426 +vt 0.838281 0.525463 +vt 0.939844 0.427315 +vt 0.838281 0.119907 +vt 0.910677 0.156944 +vt 0.939844 0.352315 +vt 0.832031 0.243981 +vt 0.910677 0.490278 +vt 0.939844 0.277315 +vt 0.794531 0.243981 +vt 0.914844 0.413426 +vt 0.794010 0.490278 +vt 0.914844 0.302315 +vt 0.877865 0.119907 +vt 0.794010 0.156944 +vt 0.914844 0.191204 +vt 0.944531 0.431944 +vt 0.877865 0.525463 +vt 0.625000 0.312500 +vt 0.770573 0.277315 +vt 0.625000 0.375000 +vt 0.770573 0.352315 +vt 0.625000 0.437500 +vt 0.770573 0.427315 +s 0 +usemtl Generic_walls +f 16535/31898/12972 16522/31863/12972 16524/31867/12972 16531/31887/12972 +f 16532/31888/12973 16531/31885/12973 16524/31868/12973 16525/31870/12973 +f 16525/31871/12974 16524/31869/12974 16522/31864/12974 16523/31865/12974 +f 16526/31874/12975 16519/31855/12975 16521/31860/12975 16534/31894/12975 +f 16519/31856/12976 16518/31853/12976 16520/31857/12976 16521/31861/12976 +f 16526/31873/12977 16537/31901/12977 16518/31853/12977 16519/31856/12977 +f 16523/31865/12977 16522/31864/12977 16535/31897/12977 16528/31877/12977 +f 16528/31877/12977 16535/31897/12977 16536/31899/12977 16527/31875/12977 +f 16527/31875/12977 16536/31899/12977 16537/31901/12977 16526/31873/12977 +f 16523/31866/12975 16528/31878/12975 16532/31889/12975 16525/31872/12975 +f 16528/31878/12975 16527/31876/12975 16533/31891/12975 16532/31889/12975 +f 16527/31876/12975 16526/31874/12975 16534/31894/12975 16533/31891/12975 +f 16521/31862/12973 16520/31858/12973 16529/31879/12973 16534/31895/12973 +f 16534/31896/12973 16529/31880/12973 16530/31882/12973 16533/31892/12973 +f 16533/31893/12973 16530/31883/12973 16531/31886/12973 16532/31890/12973 +f 16518/31854/12972 16537/31902/12972 16529/31881/12972 16520/31859/12972 +f 16537/31902/12972 16536/31900/12972 16530/31884/12972 16529/31881/12972 +f 16536/31900/12972 16535/31898/12972 16531/31887/12972 16530/31884/12972 +o Seeting.002 +v -7.473101 -0.031200 -2.573842 +v -7.473101 0.490564 -2.573842 +v -7.473100 -0.031199 0.166589 +v -7.473100 0.490565 0.166589 +v -6.996624 -0.031200 -2.573842 +v -6.996624 0.490564 -2.573842 +v -6.996624 -0.031199 0.166589 +v -6.996624 0.490565 0.166589 +v -6.996624 0.490564 -2.086267 +v -6.996624 0.490565 -0.320987 +v -7.473100 -0.031200 -2.086266 +v -7.473100 -0.031199 -0.320986 +v -6.996624 -0.031199 -0.320987 +v -6.996624 -0.031200 -2.086267 +v -7.473100 0.490565 -0.320987 +v -7.473100 0.490564 -2.086267 +v -6.353335 0.490565 -0.320987 +v -6.353335 0.490565 0.166588 +v -6.353335 -0.031199 0.166589 +v -6.353336 -0.031200 -2.573842 +v -6.353336 0.490564 -2.573843 +v -6.353336 -0.031200 -2.086267 +v -6.353336 0.490564 -2.086267 +v -6.353335 -0.031199 -0.320987 +v -7.473101 0.999999 -2.573843 +v -7.473100 1.000001 0.166588 +v -6.996624 0.999999 -2.573843 +v -6.996624 1.000001 0.166588 +v -7.473100 1.000000 -0.320987 +v -7.473100 0.999999 -2.086267 +v -6.353335 1.000001 0.166588 +v -6.353336 0.999999 -2.573843 +v -7.589252 0.999999 -2.736162 +v -7.589251 1.000001 0.328908 +v -7.052126 0.999999 -2.736162 +v -7.052125 1.000001 0.328908 +v -7.589251 1.000000 -0.216426 +v -7.589252 0.999999 -2.190827 +v -6.353331 1.000001 0.315258 +v -6.353332 0.999999 -2.722511 +v -6.353335 0.490565 0.315259 +v -6.353335 -0.031199 0.315259 +v -6.353336 -0.031201 -2.722513 +v -6.353336 0.490563 -2.722513 +v -6.353331 1.000001 0.315258 +v -6.353332 0.999999 -2.722511 +vn -0.0000 -0.2609 -0.0000 +vn -0.0000 -0.0000 1.3702 +vn -0.0000 -0.0000 -1.3702 +vn -0.0000 0.2609 -0.0000 +vn -0.3000 -0.0000 -0.0000 +vn 0.3000 -0.0000 -0.0000 +vn 0.3000 -0.0000 -0.0001 +vn 0.3000 -0.0000 0.0001 +vt 0.750260 0.500463 +vt 0.015365 0.006944 +vt 0.250260 0.500463 +vt 0.999901 0.000099 +vt 0.750260 1.000463 +vt 0.970573 0.006944 +vt 0.250260 1.000463 +vt 0.999740 0.000463 +vt 0.000099 0.000099 +vt 1.250260 0.500463 +vt 0.750260 -0.000463 +vt 0.015365 0.897685 +vt 0.079427 -0.005093 +vt 0.250260 -0.000463 +vt -0.250260 0.500463 +vt 1.250260 1.000463 +vt 0.750260 1.500463 +vt 0.970573 0.897685 +vt 0.000041 0.999959 +vt 0.250260 1.500463 +vt 0.574219 0.000463 +vt 0.199219 0.897685 +vt 0.931510 -0.005093 +vt 0.998047 0.998047 +vt 0.784635 0.897685 +vt 0.998047 0.998047 +vt 0.165974 0.999959 +vt 0.750260 0.596759 +vt 0.750260 0.903241 +vt 0.998047 0.998047 +vt 1.250260 0.903241 +vt 1.250260 0.596759 +vt 0.998047 0.998047 +vt 0.250260 0.903241 +vt 0.784635 0.006944 +vt 0.177983 0.000099 +vt 0.250260 0.596759 +vt 0.199219 0.006944 +vt 0.822017 0.000099 +vt 0.998047 0.998047 +vt 0.165974 0.000041 +vt 0.000041 0.000041 +vt 0.250260 1.500463 +vt 0.000260 0.000463 +vt 0.998047 0.998047 +vt 1.250260 1.000463 +vt 0.750260 1.500463 +vt 0.998047 0.998047 +vt 1.250260 0.500463 +vt 0.750260 -0.000463 +vt 0.998047 0.998047 +vt 0.084635 0.984722 +vt 0.250260 -0.000463 +vt -0.250260 0.500463 +vt 0.998047 0.998047 +vt 1.250260 0.596759 +vt 0.998047 0.998047 +vt 0.936719 0.984722 +vt 0.998047 0.998047 +vt 0.998047 0.998047 +vt 1.250260 0.903241 +vt 0.250260 0.500463 +vt 0.999901 0.976277 +vt 0.091927 0.765278 +vt -0.000260 0.250463 +vt 0.999740 0.523611 +vt 0.000099 0.976277 +vt 0.899219 0.765278 +vt 0.250260 1.250463 +vt 0.250260 -0.000463 +vt -0.250260 0.500463 +vt -0.000260 0.249537 +vt -0.000260 0.250463 +vt 0.574219 0.523611 +vt 0.250260 1.250463 +vt -0.250260 1.000463 +vt 0.177983 0.976277 +vt 0.756510 0.765278 +vt 0.822017 0.976277 +vt 0.235677 0.765278 +vt 0.000260 0.523611 +vt -0.250260 1.000463 +vt 0.998047 0.998047 +vt -0.250260 0.500463 +vt -0.000260 0.250463 +vt 0.998047 0.998047 +vt 0.044010 0.269907 +vt -0.000260 0.250463 +vt 0.948177 0.269907 +vt 0.250260 1.250463 +vt -0.000260 0.249537 +vt -0.000260 0.250463 +vt 0.250260 1.250463 +vt -0.250260 1.000463 +vt 0.787240 0.269907 +vt 0.204948 0.269907 +vt -0.250260 1.000463 +vt -0.000260 0.250463 +vt 0.998047 0.998047 +vt 0.998047 0.998047 +vt 0.998047 0.998047 +vt 0.998047 0.998047 +vt 0.998047 0.998047 +vt 0.998047 0.998047 +s 0 +usemtl ChairTexture +f 16549/31931/12978 16550/31933/12978 16544/31918/12978 16540/31907/12978 +f 16541/31909/12979 16540/31907/12979 16544/31919/12979 16545/31922/12979 +f 16550/31932/12980 16547/31928/12980 16554/31942/12980 16561/31962/12980 +f 16547/31927/12981 16552/31937/12981 16541/31908/12981 16545/31920/12981 +f 16552/31936/12982 16549/31931/12982 16540/31907/12982 16541/31909/12982 +f 16543/31916/12980 16542/31913/12980 16538/31903/12980 16539/31905/12980 +f 16539/31905/12982 16538/31903/12982 16548/31930/12982 16553/31939/12982 +f 16553/31939/12982 16548/31930/12982 16549/31931/12982 16552/31936/12982 +f 16543/31914/12981 16539/31904/12981 16553/31940/12981 16546/31924/12981 +f 16546/31924/12981 16553/31940/12981 16552/31937/12981 16547/31927/12981 +f 16543/31915/12981 16546/31925/12981 16560/31960/12981 16558/31954/12981 +f 16547/31928/12983 16550/31932/12983 16551/31935/12983 16546/31926/12983 +f 16538/31903/12978 16542/31912/12978 16551/31934/12978 16548/31930/12978 +f 16548/31930/12978 16551/31934/12978 16550/31933/12978 16549/31931/12978 +f 16560/31961/12983 16559/31959/12983 16557/31953/12983 16558/31957/12983 +f 16555/31947/12983 16556/31950/12983 16561/31962/12983 16554/31942/12983 +f 16547/31929/12981 16545/31921/12981 16555/31944/12981 16554/31943/12981 +f 16551/31934/12978 16542/31912/12978 16557/31951/12978 16559/31958/12978 +f 16544/31918/12978 16550/31933/12978 16561/31963/12978 16556/31948/12978 +f 16542/31913/12980 16543/31916/12980 16558/31955/12980 16557/31952/12980 +f 16546/31926/12979 16551/31935/12979 16559/31959/12979 16560/31961/12979 +f 16545/31922/12979 16544/31919/12979 16556/31949/12979 16555/31945/12979 +f 16539/31905/12979 16543/31916/12979 16564/31972/12979 16562/31964/12979 +f 16552/31938/12983 16553/31941/12983 16567/31981/12983 16566/31979/12983 +f 16545/31923/12980 16541/31910/12980 16563/31968/12980 16565/31976/12980 +f 16558/31956/12979 16569/31986/12979 16564/31973/12979 16543/31917/12979 +f 16553/31941/12983 16539/31906/12983 16562/31965/12983 16567/31981/12983 +f 16545/31923/12980 16565/31976/12980 16568/31983/12980 16555/31946/12980 +f 16552/31938/12983 16566/31979/12983 16563/31969/12983 16541/31911/12983 +f 16566/31980/12981 16574/31997/12981 16571/31991/12981 16563/31970/12981 +f 16565/31977/12981 16563/31971/12981 16571/31992/12981 16573/31995/12981 +f 16565/31978/12981 16573/31996/12981 16576/31999/12981 16568/31984/12981 +f 16566/31980/12981 16567/31982/12981 16575/31998/12981 16574/31997/12981 +f 16567/31982/12981 16562/31966/12981 16570/31989/12981 16575/31998/12981 +f 16562/31967/12981 16564/31974/12981 16572/31993/12981 16570/31990/12981 +f 16569/31987/12981 16577/32000/12981 16572/31994/12981 16564/31975/12981 +f 16568/31985/12984 16582/32005/12984 16578/32001/12984 16555/31947/12984 +f 16557/31953/12983 16580/32003/12983 16581/32004/12983 16558/31957/12983 +f 16558/31957/12985 16581/32004/12985 16583/32006/12985 16569/31988/12985 +f 16555/31947/12983 16578/32001/12983 16579/32002/12983 16556/31950/12983 +o Chair.040 +v -9.636270 0.415382 -4.729980 +v -9.636270 0.429951 -4.729980 +v -9.685712 0.429951 -4.734164 +v -10.086230 0.429951 -4.768060 +v -10.135672 0.429951 -4.772244 +v -10.135672 0.415382 -4.772244 +v -10.086230 0.415382 -4.768060 +v -9.685712 0.415382 -4.734164 +v -10.103235 0.429951 -5.155506 +v -10.103235 0.415382 -5.155506 +v -10.103235 0.400812 -5.155506 +v -10.057779 0.400812 -5.151659 +v -10.086230 0.400812 -4.768060 +v -10.135672 0.400812 -4.772244 +v -9.603833 0.415382 -5.113241 +v -9.603833 0.429951 -5.113241 +v -9.649290 0.415382 -5.117088 +v -9.649290 0.429951 -5.117088 +v -9.603833 0.400812 -5.113241 +v -9.649290 0.400812 -5.117088 +v -9.636270 0.400812 -4.729980 +v -9.685712 0.400812 -4.734164 +v -10.057779 0.415382 -5.151659 +v -10.057779 0.429951 -5.151659 +v -10.121670 0.438060 -4.963413 +v -10.127490 0.443651 -4.963906 +v -10.138544 0.443651 -4.833288 +v -10.132725 0.438060 -4.832795 +v -10.132901 0.429976 -4.832810 +v -10.135456 0.437950 -4.800514 +v -10.135412 0.430300 -4.803133 +v -10.141293 0.429903 -4.965074 +v -10.141118 0.437987 -4.965059 +v -10.130063 0.437987 -5.095676 +v -10.130239 0.429903 -5.095691 +v -10.124492 0.443828 -5.095205 +v -10.121801 0.439408 -5.126993 +v -10.127570 0.434055 -5.125136 +v -10.127418 0.424135 -4.963900 +v -10.135473 0.424311 -4.964581 +v -10.124418 0.424311 -5.095199 +v -10.116364 0.424135 -5.094517 +v -10.135546 0.443828 -4.964588 +v -10.116436 0.443651 -5.094523 +v -10.152172 0.437987 -4.834441 +v -10.146600 0.443828 -4.833970 +v -10.121846 0.429976 -4.963428 +v -10.110792 0.429976 -5.094045 +v -10.138472 0.424135 -4.833282 +v -10.146527 0.424311 -4.833963 +v -10.128018 0.426646 -5.121928 +v -10.122387 0.421521 -5.119207 +v -10.113751 0.439247 -5.126241 +v -10.114338 0.421360 -5.118454 +v -10.108569 0.426713 -5.120311 +v -10.152348 0.429903 -4.834456 +v -10.154902 0.437881 -4.802183 +v -10.149489 0.443408 -4.799829 +v -10.140824 0.424773 -4.805486 +v -10.148884 0.424940 -4.806111 +v -10.154857 0.430231 -4.804802 +v -10.110616 0.438060 -5.094030 +v -10.137798 0.420977 -4.774945 +v -10.143067 0.416357 -4.778979 +v -10.151132 0.416497 -4.779553 +v -10.157241 0.420919 -4.776636 +v -10.157482 0.427313 -4.771691 +v -10.141429 0.443241 -4.799205 +v -10.159243 0.402967 -4.752982 +v -10.159636 0.407418 -4.746243 +v -10.138039 0.427371 -4.770001 +v -10.140194 0.407458 -4.744536 +v -10.139801 0.403008 -4.751276 +v -10.152212 0.431932 -4.767659 +v -10.154475 0.410634 -4.740912 +v -10.144148 0.431793 -4.767084 +v -10.146408 0.410537 -4.740377 +v -10.141690 0.380352 -4.726854 +v -10.141207 0.378323 -4.734667 +v -10.161132 0.380334 -4.728570 +v -10.156036 0.381800 -4.722465 +v -10.147966 0.381756 -4.721954 +v -10.144961 0.399792 -4.756606 +v -10.153028 0.399889 -4.757141 +v -10.157354 0.345795 -4.706898 +v -10.149284 0.345756 -4.706388 +v -10.146301 0.376856 -4.740772 +v -10.142515 0.342751 -4.719204 +v -10.147606 0.341467 -4.725354 +v -10.160647 0.378304 -4.736382 +v -10.154370 0.376901 -4.741284 +v -10.155676 0.341506 -4.725864 +v -10.161956 0.342735 -4.720921 +v -10.102249 0.349401 -5.192887 +v -10.103103 0.348454 -5.184902 +v -10.099636 -0.002953 -5.225860 +v -10.098783 -0.002007 -5.233846 +v -10.162445 0.344511 -4.713048 +v -10.169755 0.001491 -4.626674 +v -10.164664 0.002774 -4.620523 +v -10.115642 0.350077 -5.199769 +v -10.107601 0.350056 -5.198913 +v -10.104136 -0.001352 -5.239872 +v -10.112176 -0.001331 -5.240727 +v -10.149824 -0.000270 -4.632830 +v -10.154916 -0.001553 -4.638979 +v -10.143004 0.344527 -4.711330 +v -10.119191 0.425574 -5.157827 +v -10.125125 0.421603 -5.154031 +v -10.108120 0.434122 -5.123519 +v -10.105673 0.421652 -5.152438 +v -10.111147 0.425454 -5.157017 +v -10.120326 0.412305 -5.143559 +v -10.112282 0.412185 -5.142749 +v -10.106349 0.416156 -5.146546 +v -10.103843 0.403231 -5.174061 +v -10.109218 0.405075 -5.179814 +v -10.118740 0.398698 -5.162296 +v -10.110699 0.398640 -5.161448 +v -10.104663 0.400566 -5.166471 +v -10.125800 0.416106 -5.148138 +v -10.109426 0.371230 -5.176483 +v -10.103374 0.372479 -5.181697 +v -10.124115 0.400542 -5.168048 +v -10.122827 0.372464 -5.183272 +v -10.117467 0.371267 -5.177337 +v -10.117259 0.405133 -5.180662 +v -10.107891 0.375406 -5.195486 +v -10.115932 0.375443 -5.196339 +v -10.123296 0.403207 -5.175639 +v -10.121985 0.374194 -5.191126 +v -10.121703 0.349392 -5.194460 +v -10.122556 0.348446 -5.186476 +v -10.102531 0.374209 -5.189551 +v -10.109163 0.347770 -5.179593 +v -10.117204 0.347791 -5.180450 +v -10.113737 -0.003617 -5.221408 +v -10.105697 -0.003637 -5.220552 +v -10.150314 0.001507 -4.624956 +v -10.119089 -0.002962 -5.227434 +v -10.169266 -0.000286 -4.634547 +v -10.159790 0.000611 -4.629752 +v -10.162986 -0.001514 -4.639490 +v -10.156594 0.002736 -4.620013 +v -10.108936 -0.002484 -5.230639 +v -10.118237 -0.002015 -5.235419 +v -9.599992 0.438060 -4.919263 +v -9.605812 0.443651 -4.919756 +v -9.616866 0.443651 -4.789138 +v -9.611046 0.438060 -4.788645 +v -9.611221 0.429976 -4.788660 +v -9.613778 0.437950 -4.756364 +v -9.613733 0.430300 -4.758983 +v -9.602740 0.424311 -5.051049 +v -9.608561 0.429903 -5.051541 +v -9.606340 0.426646 -5.077778 +v -9.600709 0.421521 -5.075057 +v -9.605740 0.424135 -4.919750 +v -9.613794 0.424311 -4.920432 +v -9.594686 0.424135 -5.050367 +v -9.613868 0.443828 -4.920438 +v -9.594758 0.443651 -5.050373 +v -9.602813 0.443828 -5.051055 +v -9.619439 0.437987 -4.920909 +v -9.608385 0.437987 -5.051527 +v -9.630494 0.437987 -4.790291 +v -9.624922 0.443828 -4.789820 +v -9.600167 0.429976 -4.919278 +v -9.589113 0.429976 -5.049895 +v -9.616794 0.424135 -4.789132 +v -9.624849 0.424311 -4.789814 +v -9.592073 0.439247 -5.082091 +v -9.600122 0.439408 -5.082843 +v -9.592659 0.421360 -5.074304 +v -9.586890 0.426713 -5.076161 +v -9.588938 0.438060 -5.049881 +v -9.586442 0.434122 -5.079369 +v -9.619615 0.429903 -4.920924 +v -9.630669 0.429903 -4.790306 +v -9.633224 0.437881 -4.758032 +v -9.627811 0.443408 -4.755680 +v -9.619146 0.424773 -4.761336 +v -9.627206 0.424940 -4.761961 +v -9.633179 0.430231 -4.760652 +v -9.619751 0.443241 -4.755054 +v -9.630533 0.431932 -4.723508 +v -9.622469 0.431793 -4.722934 +v -9.616118 0.420977 -4.730795 +v -9.621389 0.416357 -4.734828 +v -9.629454 0.416497 -4.735403 +v -9.635563 0.420919 -4.732486 +v -9.631351 0.399889 -4.712991 +v -9.637565 0.402967 -4.708832 +v -9.623282 0.399792 -4.712456 +v -9.635804 0.427313 -4.727541 +v -9.637959 0.407418 -4.702093 +v -9.616361 0.427371 -4.725851 +v -9.618516 0.407458 -4.700386 +v -9.618122 0.403008 -4.707126 +v -9.620012 0.380352 -4.682704 +v -9.619528 0.378323 -4.690517 +v -9.632797 0.410634 -4.696762 +v -9.639454 0.380334 -4.684421 +v -9.634358 0.381800 -4.678315 +v -9.624729 0.410537 -4.696227 +v -9.626288 0.381756 -4.677804 +v -9.640767 0.344511 -4.668897 +v -9.635675 0.345795 -4.662748 +v -9.627606 0.345756 -4.662238 +v -9.621325 0.344527 -4.667181 +v -9.624623 0.376856 -4.696622 +v -9.620836 0.342751 -4.675054 +v -9.625928 0.341467 -4.681203 +v -9.638969 0.378304 -4.692233 +v -9.632692 0.376901 -4.697134 +v -9.580571 0.349401 -5.148737 +v -9.581424 0.348454 -5.140751 +v -9.577957 -0.002953 -5.181710 +v -9.577106 -0.002007 -5.189696 +v -9.648077 0.001491 -4.582524 +v -9.642985 0.002774 -4.576374 +v -9.593964 0.350077 -5.155619 +v -9.585923 0.350056 -5.154763 +v -9.582457 -0.001352 -5.195722 +v -9.590497 -0.001331 -5.196578 +v -9.628146 -0.000270 -4.588680 +v -9.633238 -0.001553 -4.594830 +v -9.640278 0.342735 -4.676771 +v -9.633998 0.341506 -4.681714 +v -9.583995 0.421652 -5.108288 +v -9.589469 0.425454 -5.112866 +v -9.598648 0.412305 -5.099410 +v -9.590603 0.412185 -5.098599 +v -9.584670 0.416156 -5.102396 +v -9.605892 0.434055 -5.080986 +v -9.582984 0.400566 -5.122322 +v -9.582165 0.403231 -5.129911 +v -9.589021 0.398640 -5.117299 +v -9.604122 0.416106 -5.103988 +v -9.602437 0.400542 -5.123899 +v -9.597062 0.398698 -5.118146 +v -9.597513 0.425574 -5.113677 +v -9.587540 0.405075 -5.135664 +v -9.595581 0.405133 -5.136512 +v -9.603447 0.421603 -5.109881 +v -9.601149 0.372464 -5.139122 +v -9.595789 0.371267 -5.133187 +v -9.586213 0.375406 -5.151336 +v -9.594254 0.375443 -5.152189 +v -9.601618 0.403207 -5.131488 +v -9.600307 0.374194 -5.146976 +v -9.600025 0.349392 -5.150310 +v -9.580853 0.374209 -5.145401 +v -9.587749 0.371230 -5.132334 +v -9.595526 0.347791 -5.136300 +v -9.587485 0.347770 -5.135444 +v -9.581696 0.372479 -5.137547 +v -9.592059 -0.003617 -5.177258 +v -9.584019 -0.003637 -5.176403 +v -9.628635 0.001507 -4.580806 +v -9.647588 -0.000286 -4.590397 +v -9.600878 0.348446 -5.142325 +v -9.597411 -0.002962 -5.183284 +v -9.638111 0.000611 -4.585601 +v -9.641308 -0.001514 -4.595340 +v -9.634916 0.002736 -4.575863 +v -9.587257 -0.002484 -5.186490 +v -9.596559 -0.002015 -5.191269 +v -9.785453 0.396685 -5.128612 +v -9.921616 0.396685 -5.140135 +v -9.785453 0.411254 -5.128612 +v -9.921616 0.411254 -5.140135 +v -9.819218 0.411254 -4.745462 +v -9.952724 0.411254 -4.756761 +v -9.921616 0.382115 -5.140135 +v -9.785453 0.382115 -5.128612 +v -9.952724 0.382115 -4.756761 +v -9.819218 0.382115 -4.745462 +vn 0.9835 -0.0000 -0.1807 +vn 0.4560 -0.7071 0.5404 +vn -0.0843 -0.0000 0.9964 +vn -0.5404 -0.7071 0.4560 +vn -0.6924 0.6667 0.2760 +vn -0.9964 -0.0000 -0.0843 +vn -0.0000 -1.0000 -0.0000 +vn -0.0679 -0.9977 -0.0053 +vn -0.0688 -0.9976 -0.0053 +vn 0.9964 -0.0000 0.0843 +vn 0.0843 -0.0000 -0.9964 +vn -0.0000 1.0000 -0.0000 +vn -0.0679 0.9977 -0.0062 +vn -0.0688 0.9976 -0.0063 +vn 0.0688 0.9976 0.0053 +vn 0.0679 0.9977 0.0053 +vn 0.0682 0.9977 0.0053 +vn 0.0685 0.9976 0.0053 +vn 0.0688 -0.9976 0.0063 +vn 0.0679 -0.9977 0.0062 +vn 0.0682 -0.9977 0.0062 +vn 0.0685 -0.9976 0.0063 +vn 0.6890 0.7224 0.0583 +vn 0.6841 0.7268 0.0608 +vn 0.6841 0.7269 0.0608 +vn 0.9962 -0.0225 0.0844 +vn 0.9962 -0.0215 0.0840 +vn 0.9968 -0.0204 0.0778 +vn -0.9962 0.0218 -0.0843 +vn -0.9961 0.0219 -0.0857 +vn -0.9961 0.0219 -0.0858 +vn -0.7035 0.6937 -0.1541 +vn -0.0217 -0.9998 -0.0018 +vn 0.0218 0.9998 0.0018 +vn -0.7198 0.6915 -0.0609 +vn -0.7155 0.6962 -0.0578 +vn 0.0210 0.9997 0.0079 +vn 0.7198 -0.6915 0.0609 +vn -0.6874 -0.7257 0.0292 +vn 0.0328 0.9903 -0.1348 +vn 0.7041 -0.6955 0.1432 +vn -0.6891 -0.7223 -0.0583 +vn -0.9962 0.0221 -0.0843 +vn -0.7112 0.7008 -0.0546 +vn -0.0230 -0.9995 0.0208 +vn -0.9968 0.0214 -0.0775 +vn -0.9962 0.0224 -0.0839 +vn 0.7276 -0.6683 -0.1552 +vn -0.6591 -0.6972 -0.2820 +vn 0.0043 -0.9532 -0.3025 +vn -0.9973 0.0184 -0.0710 +vn -0.9968 0.0214 -0.0766 +vn 0.0202 0.9997 0.0139 +vn -0.6792 -0.7326 -0.0453 +vn 0.6792 0.7313 0.0632 +vn 0.7084 -0.7022 0.0717 +vn -0.9978 0.0132 -0.0656 +vn -0.9974 0.0177 -0.0698 +vn 0.9973 -0.0175 0.0714 +vn 0.9968 -0.0204 0.0769 +vn 0.9974 -0.0172 0.0707 +vn 0.9977 -0.0124 0.0663 +vn -0.7473 0.5509 0.3716 +vn 0.6416 0.5748 0.5079 +vn -0.0071 0.9421 0.3353 +vn 0.6593 0.6901 0.2985 +vn -0.7303 0.6614 0.1709 +vn 0.9977 -0.0119 0.0660 +vn 0.9979 -0.0090 0.0646 +vn -0.7604 0.3812 0.5259 +vn 0.6279 0.3978 0.6689 +vn -0.0498 0.5403 0.8400 +vn 0.0290 -0.8044 -0.5934 +vn -0.6411 -0.5868 -0.4945 +vn 0.7448 -0.5625 -0.3589 +vn -0.0313 0.7833 0.6209 +vn -0.0559 0.3980 0.9157 +vn 0.7684 -0.2790 -0.5760 +vn -0.6273 -0.2912 -0.7223 +vn 0.0558 -0.4005 -0.9146 +vn -0.9979 0.0092 -0.0640 +vn -0.9978 0.0122 -0.0653 +vn 0.0482 -0.5692 -0.8208 +vn -0.6271 -0.4135 -0.6601 +vn 0.7583 -0.3964 -0.5176 +vn 0.9944 -0.0027 0.1059 +vn 0.9944 -0.0025 0.1059 +vn -0.7762 0.1694 0.6072 +vn 0.1055 0.1162 -0.9876 +vn 0.7762 -0.1695 -0.6073 +vn 0.6274 0.2899 0.7228 +vn -0.7685 0.2777 0.5765 +vn 0.9979 -0.0079 0.0650 +vn 0.9979 -0.0056 0.0641 +vn -0.9980 0.0054 -0.0632 +vn -0.9979 0.0070 -0.0637 +vn -0.6811 0.6472 -0.3425 +vn 0.6987 0.6748 -0.2377 +vn -0.0503 -0.9356 0.3494 +vn 0.9959 -0.0216 0.0874 +vn 0.9955 -0.0208 0.0925 +vn 0.9950 -0.0183 0.0984 +vn 0.9954 -0.0205 0.0935 +vn 0.6887 0.7239 -0.0404 +vn -0.9959 0.0227 -0.0875 +vn -0.9954 0.0218 -0.0929 +vn -0.0308 -0.9932 0.1127 +vn 0.9959 -0.0222 0.0872 +vn 0.7045 0.5630 -0.4321 +vn -0.0689 -0.8103 0.5819 +vn 0.9946 -0.0112 0.1032 +vn 0.9949 -0.0173 0.0995 +vn 0.6488 -0.5801 0.4925 +vn -0.9954 0.0211 -0.0936 +vn -0.9949 0.0187 -0.0988 +vn 0.0552 0.9128 -0.4046 +vn -0.6928 -0.6896 0.2108 +vn 0.6800 -0.6617 0.3159 +vn 0.6585 -0.3366 0.6731 +vn -0.7333 -0.3512 0.5821 +vn 0.0957 0.4682 -0.8784 +vn -0.9945 0.0114 -0.1036 +vn -0.9948 0.0175 -0.0999 +vn -0.9945 0.0104 -0.1042 +vn -0.9944 0.0032 -0.1060 +vn -0.6552 0.5405 -0.5278 +vn 0.0764 0.7463 -0.6612 +vn -0.6918 -0.6033 0.3968 +vn 0.1052 0.1344 -0.9853 +vn -0.9944 0.0027 -0.1058 +vn -0.6613 0.0928 -0.7443 +vn -0.6616 0.0866 -0.7448 +vn 0.7488 0.0969 -0.6556 +vn 0.7492 0.0905 -0.6561 +vn 0.7492 0.0904 -0.6561 +vn 0.9945 -0.0030 0.1050 +vn 0.9946 -0.0100 0.1032 +vn -0.0950 -0.4821 0.8710 +vn 0.7345 0.3437 -0.5852 +vn -0.6590 0.3294 -0.6762 +vn -0.1055 -0.1162 0.9876 +vn 0.9980 -0.0053 0.0632 +vn -0.7492 -0.0898 0.6562 +vn -0.7496 -0.0839 0.6566 +vn -0.9980 0.0053 -0.0633 +vn -0.7488 -0.0956 0.6558 +vn 0.6614 -0.0916 0.7445 +vn 0.6616 -0.0860 0.7449 +vn 0.6616 -0.0859 0.7449 +vn -0.1054 -0.1319 0.9857 +vn -0.0185 -0.9756 0.2190 +vn -0.0186 -0.9756 0.2190 +vn 0.0099 -0.9931 -0.1167 +vn 0.0098 -0.9931 -0.1167 +vn 0.0099 -0.9931 -0.1166 +vn -0.6299 -0.1770 -0.7563 +vn -0.9944 0.0025 -0.1059 +vn 0.6299 0.1770 0.7563 +vn 0.6619 -0.0803 0.7453 +vn 0.0600 -0.2449 -0.9677 +vn -0.6619 0.0803 -0.7453 +vn -0.0600 0.2449 0.9677 +vn 0.7496 0.0839 -0.6566 +vn 0.9962 -0.0221 0.0843 +vn 0.9962 -0.0224 0.0839 +vn 0.9968 -0.0214 0.0775 +vn 0.7040 -0.6956 0.1432 +vn 0.9961 -0.0219 0.0857 +vn 0.9961 -0.0219 0.0858 +vn 0.9954 -0.0218 0.0928 +vn 0.9959 -0.0228 0.0878 +vn -0.9962 0.0224 -0.0844 +vn -0.9968 0.0214 -0.0776 +vn -0.9962 0.0224 -0.0840 +vn 0.9962 -0.0218 0.0843 +vn 0.7275 -0.6683 -0.1552 +vn 0.0044 -0.9532 -0.3024 +vn 0.7083 -0.7023 0.0717 +vn -0.9973 0.0183 -0.0709 +vn -0.9978 0.0133 -0.0657 +vn 0.9973 -0.0183 0.0709 +vn 0.9968 -0.0214 0.0766 +vn 0.9974 -0.0178 0.0700 +vn 0.9978 -0.0131 0.0656 +vn 0.9978 -0.0122 0.0653 +vn 0.9979 -0.0094 0.0641 +vn 0.7448 -0.5626 -0.3589 +vn -0.0312 0.7833 0.6209 +vn -0.7473 0.5509 0.3715 +vn 0.7683 -0.2790 -0.5761 +vn -0.9979 0.0091 -0.0639 +vn -0.9978 0.0123 -0.0653 +vn 0.7582 -0.3964 -0.5177 +vn 0.9944 -0.0027 0.1058 +vn 0.9944 -0.0025 0.1058 +vn -0.7762 0.1695 0.6073 +vn 0.9979 -0.0070 0.0637 +vn 0.9980 -0.0058 0.0628 +vn -0.9980 0.0055 -0.0632 +vn 0.9949 -0.0187 0.0988 +vn 0.9954 -0.0210 0.0937 +vn 0.6799 -0.6618 0.3160 +vn -0.7036 0.6937 -0.1541 +vn -0.9960 0.0221 -0.0871 +vn -0.9954 0.0218 -0.0928 +vn 0.9945 -0.0114 0.1036 +vn 0.9948 -0.0176 0.0999 +vn 0.6487 -0.5802 0.4925 +vn -0.1052 -0.1319 0.9857 +vn 0.9945 -0.0104 0.1042 +vn 0.9944 -0.0032 0.1060 +vn 0.6584 -0.3367 0.6732 +vn -0.0949 -0.4821 0.8710 +vn 0.9980 -0.0053 0.0633 +vn 0.6612 -0.0916 0.7446 +vn 0.6615 -0.0860 0.7450 +vn 0.6615 -0.0859 0.7450 +vn 0.6618 -0.0803 0.7454 +vn -0.0685 -0.9976 -0.0053 +vn -0.0682 -0.9977 -0.0053 +vn -0.0685 0.9976 -0.0063 +vn -0.0682 0.9977 -0.0062 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.663857 0.000137 +vt -0.973130 0.058439 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.973130 0.033128 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.677629 0.482142 +vt 0.409642 -0.009898 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.669677 0.481452 +vt 0.240570 0.058726 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +vt 0.296927 -0.019617 +vt 0.353285 -0.019617 +vt 0.470812 0.481452 +vt 0.296927 0.014692 +vt 0.271947 0.481452 +vt 0.353285 0.014692 +vt -0.849112 0.025953 +vt 0.468872 0.000137 +vt -0.911121 0.025955 +vt 0.273887 0.000137 +vt 0.475153 0.482142 +vt 0.353285 -0.053929 +vt 0.272677 0.482143 +vt 0.296927 -0.053929 +vt -0.911121 -0.024667 +vt 0.473178 0.006015 +vt -0.849112 -0.024667 +vt 0.274652 0.006015 +s 1 +usemtl Wood.009 +f 16584/32008/12986 16585/32010/12987 16586/32013/12988 16856/32522/12988 16857/32524/12988 16587/32015/12988 16588/32017/12989 16589/32021/12990 16590/32022/12988 16591/32023/12988 +f 16589/32020/12990 16588/32018/12989 16592/32025/12991 16593/32028/12991 +f 16594/32030/12992 16595/32033/12993 16596/32036/12994 16597/32037/12992 +f 16598/32041/12995 16599/32042/12995 16585/32011/12987 16584/32007/12986 +f 16599/32043/12996 16598/32040/12996 16600/32045/12996 16601/32047/12996 +f 16602/32048/12996 16603/32051/12996 16600/32045/12996 16598/32040/12996 +f 16602/32049/12995 16598/32041/12995 16584/32007/12986 16604/32053/12995 +f 16597/32038/12991 16589/32020/12990 16593/32028/12991 16594/32031/12991 +f 16604/32054/12988 16584/32008/12988 16591/32023/12988 16590/32022/12988 16589/32021/12988 16597/32039/12988 16596/32035/12988 16860/32530/12988 16861/32532/12988 16605/32057/12988 +f 16597/32039/12988 16596/32035/12988 16590/32022/12988 16589/32021/12988 +f 16591/32024/12996 16584/32009/12996 16604/32055/12996 16605/32058/12996 +f 16855/32521/12996 16853/32517/12996 16606/32060/12996 16607/32061/12996 +f 16593/32029/12996 16592/32026/12996 16607/32061/12996 16606/32060/12996 +f 16852/32516/12996 16600/32045/12996 16603/32051/12996 16859/32529/12996 +f 16595/32034/12996 16594/32032/12996 16593/32029/12996 16606/32060/12996 +f 16599/32044/12997 16601/32046/12998 16586/32014/12999 16585/32012/12997 +f 16587/32016/13000 16607/32062/13001 16592/32027/12997 16588/32019/12997 +f 16857/32525/13002 16855/32520/13003 16607/32062/13001 16587/32016/13000 +f 16605/32059/13004 16603/32052/13005 16602/32050/12992 16604/32056/12992 +f 16861/32533/13006 16859/32528/13007 16603/32052/13005 16605/32059/13004 +f 16608/32063/13008 16609/32064/13008 16610/32065/13009 16611/32067/13010 +f 16612/32068/13011 16611/32066/13011 16613/32071/13012 16614/32073/13013 +f 16615/32075/13014 16616/32076/13014 16617/32077/13015 16618/32079/13016 +f 16617/32077/13017 16619/32080/13017 16620/32082/13017 16621/32084/13017 +f 16622/32086/13018 16623/32087/13018 16624/32088/13018 16625/32090/13018 +f 16626/32092/13019 16609/32064/13019 16627/32093/13019 16619/32081/13019 +f 16616/32076/13020 16626/32091/13020 16619/32080/13020 16617/32077/13020 +f 16628/32094/13021 16629/32095/13021 16626/32091/13020 16616/32076/13020 +f 16629/32096/13022 16610/32065/13022 16609/32064/13019 16626/32092/13019 +f 16630/32097/13023 16622/32085/13023 16625/32089/13023 16631/32098/13023 +f 16612/32069/13023 16632/32101/13023 16622/32085/13023 16630/32097/13023 +f 16632/32100/13018 16633/32102/13018 16623/32087/13018 16622/32086/13018 +f 16624/32088/13024 16618/32078/13024 16634/32104/13024 16635/32105/13024 +f 16619/32081/13025 16627/32093/13025 16636/32106/13025 16620/32083/13025 +f 16631/32098/13026 16625/32089/13026 16637/32108/13026 16638/32110/13026 +f 16623/32087/13027 16615/32074/13027 16618/32078/13027 16624/32088/13027 +f 16633/32102/13027 16639/32112/13027 16615/32074/13027 16623/32087/13027 +f 16639/32111/13028 16628/32094/13028 16616/32076/13014 16615/32075/13014 +f 16629/32095/13021 16628/32094/13021 16640/32113/13029 16641/32115/13029 +f 16633/32102/13030 16632/32100/13030 16642/32116/13030 16643/32118/13030 +f 16628/32094/13028 16639/32111/13028 16644/32119/13031 16640/32113/13032 +f 16645/32121/13008 16627/32093/13008 16609/32064/13008 16608/32063/13008 +f 16642/32117/13033 16614/32072/13033 16646/32124/13033 16647/32126/13033 +f 16644/32120/13034 16643/32118/13034 16648/32127/13034 16649/32129/13034 +f 16643/32118/13035 16642/32116/13035 16647/32125/13035 16648/32127/13035 +f 16640/32113/13032 16644/32119/13031 16649/32130/13036 16650/32131/13037 +f 16610/32065/13022 16629/32096/13022 16641/32114/13038 16651/32132/13038 +f 16639/32112/13039 16633/32102/13039 16643/32118/13039 16644/32120/13039 +f 16611/32067/13010 16610/32065/13009 16651/32132/13040 16613/32070/13040 +f 16632/32101/13041 16612/32069/13041 16614/32072/13041 16642/32117/13041 +f 16650/32131/13037 16649/32130/13036 16652/32133/13042 16653/32134/13043 +f 16646/32124/13044 16654/32135/13045 16655/32138/13046 16656/32139/13047 +f 16657/32140/13048 16650/32131/13048 16653/32134/13048 16658/32142/13048 +f 16654/32135/13049 16659/32145/13049 16660/32147/13049 16655/32138/13049 +f 16651/32132/13050 16641/32114/13050 16657/32141/13050 16659/32146/13050 +f 16613/32070/13051 16651/32132/13051 16659/32146/13051 16654/32136/13051 +f 16641/32115/13052 16640/32113/13052 16650/32131/13052 16657/32140/13052 +f 16614/32073/13013 16613/32071/13012 16654/32137/13045 16646/32123/13044 +f 16656/32139/13047 16655/32138/13046 16661/32151/13053 16662/32152/13054 +f 16658/32142/13055 16653/32134/13055 16663/32153/13055 16664/32155/13055 +f 16655/32138/13056 16660/32147/13056 16665/32156/13056 16661/32151/13056 +f 16660/32148/13057 16658/32143/13057 16664/32154/13057 16665/32157/13057 +f 16648/32127/13058 16647/32125/13058 16666/32158/13058 16667/32161/13058 +f 16649/32130/13059 16648/32128/13059 16667/32163/13059 16652/32133/13059 +f 16647/32126/13060 16646/32124/13060 16656/32139/13060 16666/32160/13060 +f 16659/32146/13061 16657/32141/13061 16658/32144/13061 16660/32149/13061 +f 16665/32157/13062 16664/32154/13062 16668/32165/13062 16669/32166/13062 +f 16670/32168/13063 16662/32152/13063 16671/32169/13063 16672/32170/13063 +f 16673/32172/13064 16674/32174/13064 16675/32176/13064 16676/32178/13064 +f 16674/32174/13065 16670/32167/13065 16672/32171/13065 16675/32176/13065 +f 16653/32134/13043 16652/32133/13042 16673/32173/13066 16663/32153/13067 +f 16667/32162/13068 16666/32159/13068 16670/32167/13068 16674/32174/13068 +f 16652/32133/13069 16667/32163/13069 16674/32175/13069 16673/32173/13069 +f 16666/32160/13070 16656/32139/13070 16662/32152/13070 16670/32168/13070 +f 16677/32179/13071 16678/32181/13071 16679/32183/13072 16680/32184/13072 +f 16668/32164/13073 16681/32187/13073 16682/32188/13073 16683/32190/13073 +f 16684/32193/13074 16685/32195/13074 16686/32197/13074 16687/32198/13074 +f 16672/32170/13075 16671/32169/13075 16688/32201/13075 16689/32203/13075 +f 16661/32150/13076 16665/32157/13076 16669/32166/13076 16690/32207/13076 +f 16664/32155/13077 16663/32153/13077 16681/32187/13077 16668/32164/13077 +f 16662/32152/13054 16661/32151/13053 16690/32206/13078 16671/32169/13079 +f 16663/32153/13067 16673/32173/13066 16676/32177/13080 16681/32187/13081 +f 16621/32084/13082 16620/32082/13082 16691/32208/13082 16692/32210/13082 +f 16636/32106/13083 16693/32211/13083 16694/32213/13083 16695/32217/13083 +f 16637/32107/13084 16635/32105/13084 16696/32218/13084 16697/32220/13084 +f 16693/32212/13085 16638/32109/13086 16698/32222/13087 16694/32214/13088 +f 16627/32093/13089 16645/32121/13089 16693/32211/13089 16636/32106/13089 +f 16618/32079/13016 16617/32077/13015 16621/32084/13090 16634/32103/13091 +f 16625/32090/13092 16624/32088/13092 16635/32105/13092 16637/32107/13092 +f 16645/32122/13093 16631/32099/13093 16638/32109/13086 16693/32212/13085 +f 16695/32216/13094 16694/32215/13094 16699/32224/13094 16700/32227/13094 +f 16697/32220/13095 16696/32218/13095 16701/32228/13095 16702/32231/13095 +f 16694/32215/13088 16698/32223/13087 16703/32234/13096 16699/32224/13097 +f 16698/32223/13098 16697/32221/13098 16702/32232/13098 16703/32234/13098 +f 16634/32103/13091 16621/32084/13090 16692/32210/13099 16704/32236/13100 +f 16620/32083/13101 16636/32106/13101 16695/32217/13101 16691/32209/13101 +f 16635/32105/13102 16634/32104/13102 16704/32235/13102 16696/32218/13102 +f 16638/32110/13103 16637/32108/13103 16697/32221/13103 16698/32223/13103 +f 16703/32234/13104 16702/32232/13104 16705/32237/13104 16706/32239/13104 +f 16701/32229/13105 16707/32240/13105 16708/32241/13105 16709/32243/13105 +f 16710/32245/13106 16700/32225/13106 16711/32248/13106 16712/32250/13106 +f 16707/32240/13107 16713/32252/13108 16714/32253/13109 16708/32241/13110 +f 16692/32210/13111 16691/32208/13111 16710/32247/13111 16713/32252/13111 +f 16704/32236/13100 16692/32210/13099 16713/32252/13108 16707/32240/13107 +f 16691/32209/13112 16695/32217/13112 16700/32226/13112 16710/32246/13112 +f 16696/32219/13113 16704/32236/13113 16707/32240/13113 16701/32229/13113 +f 16712/32250/13114 16711/32248/13114 16685/32195/13114 16684/32193/13114 +f 16708/32241/13110 16714/32253/13109 16715/32254/13115 16716/32256/13115 +f 16714/32253/13116 16712/32251/13116 16684/32194/13117 16715/32254/13117 +f 16711/32248/13118 16717/32257/13118 16677/32180/13119 16685/32195/13120 +f 16699/32224/13097 16703/32234/13096 16706/32239/13121 16717/32258/13122 +f 16702/32233/13123 16701/32230/13123 16709/32244/13123 16705/32238/13123 +f 16700/32227/13124 16699/32224/13124 16717/32258/13124 16711/32249/13124 +f 16713/32252/13125 16710/32247/13125 16712/32251/13125 16714/32253/13125 +f 16718/32259/13126 16719/32261/13126 16720/32262/13126 16721/32264/13126 +f 16671/32169/13079 16690/32206/13078 16722/32267/13127 16688/32201/13127 +f 16719/32261/13128 16716/32255/13128 16723/32270/13129 16720/32262/13129 +f 16681/32187/13081 16676/32177/13080 16724/32273/13130 16682/32188/13130 +f 16709/32244/13131 16708/32242/13131 16716/32255/13128 16719/32261/13128 +f 16706/32239/13132 16705/32237/13132 16718/32260/13133 16678/32181/13134 +f 16717/32258/13122 16706/32239/13121 16678/32181/13071 16677/32179/13071 +f 16705/32238/13135 16709/32244/13135 16719/32261/13135 16718/32259/13135 +f 16725/32276/13136 16683/32191/13136 16682/32189/13136 16724/32274/13136 +f 16689/32204/13136 16725/32276/13136 16724/32274/13136 16726/32277/13136 +f 16688/32202/13137 16722/32268/13136 16725/32276/13136 16689/32204/13136 +f 16722/32268/13136 16727/32279/13136 16683/32191/13136 16725/32276/13136 +f 16728/32281/13138 16687/32199/13138 16686/32196/13139 16680/32185/13139 +f 16721/32265/13138 16728/32281/13138 16680/32185/13139 16679/32182/13140 +f 16720/32263/13138 16723/32271/13138 16728/32281/13138 16721/32265/13138 +f 16723/32271/13138 16729/32282/13138 16687/32199/13138 16728/32281/13138 +f 16676/32178/13141 16675/32176/13141 16726/32278/13141 16724/32275/13141 +f 16716/32256/13115 16715/32254/13115 16729/32283/13142 16723/32272/13142 +f 16690/32207/13143 16669/32166/13143 16727/32280/13143 16722/32269/13143 +f 16678/32181/13134 16718/32260/13133 16721/32266/13144 16679/32183/13144 +f 16675/32176/13145 16672/32171/13145 16689/32205/13145 16726/32278/13145 +f 16715/32254/13117 16684/32194/13117 16687/32200/13146 16729/32283/13146 +f 16669/32166/13147 16668/32165/13147 16683/32192/13147 16727/32280/13147 +f 16685/32195/13120 16677/32180/13119 16680/32186/13148 16686/32197/13148 +f 16730/32285/13008 16731/32286/13008 16732/32287/13009 16733/32289/13010 +f 16734/32290/13149 16733/32288/13149 16735/32292/13150 16736/32293/13151 +f 16737/32294/13024 16738/32296/13024 16739/32299/13024 16740/32301/13024 +f 16741/32303/13018 16742/32304/13018 16737/32295/13018 16743/32307/13018 +f 16744/32309/13019 16731/32286/13019 16745/32310/13019 16746/32311/13019 +f 16747/32313/13020 16744/32308/13020 16746/32312/13020 16748/32314/13020 +f 16749/32315/13020 16750/32316/13020 16744/32308/13020 16747/32313/13020 +f 16750/32317/13022 16732/32287/13022 16731/32286/13019 16744/32309/13019 +f 16751/32318/13023 16741/32302/13023 16743/32306/13023 16752/32319/13023 +f 16734/32290/13023 16753/32321/13023 16741/32302/13023 16751/32318/13023 +f 16753/32320/13018 16754/32322/13018 16742/32304/13018 16741/32303/13018 +f 16746/32311/13025 16745/32310/13025 16755/32324/13025 16756/32326/13025 +f 16752/32319/13152 16743/32306/13152 16757/32327/13152 16758/32329/13152 +f 16759/32330/13153 16752/32319/13154 16758/32329/13155 16760/32332/13156 +f 16742/32305/13027 16761/32334/13027 16738/32296/13027 16737/32294/13027 +f 16754/32323/13027 16762/32336/13027 16761/32334/13027 16742/32305/13027 +f 16750/32316/13029 16749/32315/13029 16763/32337/13029 16764/32339/13029 +f 16754/32322/13030 16753/32320/13030 16765/32340/13030 16766/32342/13030 +f 16749/32315/13157 16762/32335/13157 16767/32345/13158 16763/32337/13159 +f 16751/32318/13160 16730/32284/13160 16733/32288/13149 16734/32290/13149 +f 16752/32319/13154 16759/32330/13153 16730/32284/13160 16751/32318/13160 +f 16759/32331/13008 16745/32310/13008 16731/32286/13008 16730/32285/13008 +f 16768/32346/13050 16764/32338/13050 16769/32348/13050 16770/32350/13050 +f 16765/32341/13161 16736/32293/13161 16771/32352/13161 16772/32354/13161 +f 16767/32344/13034 16766/32343/13034 16773/32355/13034 16774/32358/13034 +f 16766/32342/13162 16765/32340/13162 16772/32353/13162 16773/32357/13162 +f 16732/32287/13022 16750/32317/13022 16764/32338/13038 16768/32346/13038 +f 16762/32336/13039 16754/32323/13039 16766/32343/13039 16767/32344/13039 +f 16733/32289/13010 16732/32287/13009 16768/32346/13040 16735/32291/13040 +f 16753/32321/13163 16734/32290/13163 16736/32293/13163 16765/32341/13163 +f 16774/32359/13059 16773/32356/13059 16775/32363/13059 16776/32364/13059 +f 16773/32357/13058 16772/32353/13058 16777/32365/13058 16775/32361/13058 +f 16778/32369/13037 16774/32359/13164 16776/32364/13165 16779/32370/13043 +f 16771/32352/13166 16780/32372/13167 16781/32373/13168 16782/32374/13169 +f 16735/32291/13051 16768/32346/13051 16770/32350/13051 16780/32371/13051 +f 16764/32339/13052 16763/32337/13052 16778/32368/13052 16769/32347/13052 +f 16736/32293/13151 16735/32292/13150 16780/32372/13167 16771/32352/13166 +f 16763/32337/13159 16767/32345/13158 16774/32360/13164 16778/32368/13037 +f 16782/32374/13169 16781/32373/13168 16783/32376/13170 16784/32377/13171 +f 16785/32380/13055 16779/32370/13055 16786/32381/13055 16787/32382/13055 +f 16781/32373/13056 16788/32386/13056 16789/32387/13056 16783/32376/13056 +f 16788/32384/13057 16785/32378/13057 16787/32383/13057 16789/32388/13057 +f 16772/32354/13172 16771/32352/13172 16782/32374/13172 16777/32367/13172 +f 16770/32350/13173 16769/32348/13173 16785/32379/13173 16788/32385/13173 +f 16780/32372/13049 16770/32351/13049 16788/32386/13049 16781/32373/13049 +f 16769/32349/13174 16778/32369/13174 16779/32370/13174 16785/32380/13174 +f 16787/32382/13077 16786/32381/13077 16790/32389/13077 16791/32390/13077 +f 16783/32375/13076 16789/32388/13076 16792/32392/13076 16793/32394/13076 +f 16789/32388/13062 16787/32383/13062 16791/32391/13062 16792/32392/13062 +f 16794/32395/13175 16784/32377/13175 16795/32397/13175 16796/32398/13175 +f 16779/32370/13043 16776/32364/13165 16797/32400/13176 16786/32381/13177 +f 16775/32362/13068 16777/32366/13068 16794/32396/13068 16798/32403/13068 +f 16776/32364/13069 16775/32363/13069 16798/32402/13069 16797/32400/13069 +f 16777/32367/13178 16782/32374/13178 16784/32377/13178 16794/32395/13178 +f 16799/32404/13179 16800/32406/13179 16801/32408/13180 16802/32409/13180 +f 16791/32390/13181 16790/32389/13181 16803/32412/13181 16804/32414/13181 +f 16805/32418/13074 16806/32420/13074 16807/32422/13074 16808/32423/13074 +f 16796/32398/13075 16795/32397/13075 16809/32427/13075 16810/32429/13075 +f 16784/32377/13171 16783/32376/13170 16793/32393/13182 16795/32397/13183 +f 16786/32381/13177 16797/32400/13176 16811/32433/13184 16790/32389/13081 +f 16798/32403/13065 16794/32396/13065 16796/32399/13065 16812/32435/13065 +f 16797/32401/13064 16798/32403/13064 16812/32435/13064 16811/32434/13064 +f 16755/32324/13083 16760/32333/13083 16813/32436/13083 16814/32438/13083 +f 16757/32328/13084 16740/32300/13084 16815/32442/13084 16816/32444/13084 +f 16760/32332/13156 16758/32329/13155 16817/32445/13185 16813/32437/13186 +f 16758/32329/13187 16757/32327/13187 16816/32443/13187 16817/32445/13187 +f 16748/32314/13188 16746/32312/13188 16756/32325/13188 16818/32446/13188 +f 16745/32310/13089 16759/32331/13089 16760/32333/13089 16755/32324/13089 +f 16738/32297/13189 16748/32314/13189 16818/32446/13090 16739/32298/13190 +f 16743/32307/13092 16737/32295/13092 16740/32300/13092 16757/32328/13092 +f 16813/32437/13186 16817/32445/13185 16819/32447/13191 16820/32448/13192 +f 16817/32445/13193 16816/32443/13193 16821/32450/13193 16819/32447/13193 +f 16815/32440/13113 16822/32454/13113 16823/32455/13113 16824/32456/13113 +f 16825/32460/13112 16814/32438/13112 16826/32462/13112 16827/32465/13112 +f 16818/32446/13082 16756/32325/13082 16825/32459/13082 16828/32468/13082 +f 16739/32298/13190 16818/32446/13090 16828/32468/13099 16822/32452/13100 +f 16756/32326/13101 16755/32324/13101 16814/32438/13101 16825/32460/13101 +f 16740/32301/13102 16739/32299/13102 16822/32453/13102 16815/32441/13102 +f 16824/32456/13105 16823/32455/13105 16829/32470/13105 16830/32472/13105 +f 16827/32466/13106 16826/32463/13106 16831/32475/13106 16832/32477/13106 +f 16823/32455/13107 16833/32478/13108 16834/32479/13109 16829/32470/13110 +f 16833/32478/13125 16827/32467/13125 16832/32476/13125 16834/32479/13125 +f 16816/32444/13095 16815/32442/13095 16824/32457/13095 16821/32449/13095 +f 16814/32439/13094 16813/32437/13094 16820/32448/13094 16826/32464/13094 +f 16828/32469/13111 16825/32461/13111 16827/32467/13111 16833/32478/13111 +f 16822/32454/13100 16828/32469/13099 16833/32478/13108 16823/32455/13107 +f 16834/32479/13116 16832/32476/13116 16805/32419/13117 16835/32480/13117 +f 16831/32475/13118 16836/32481/13118 16799/32405/13119 16806/32420/13120 +f 16837/32483/13194 16830/32473/13194 16838/32485/13194 16839/32486/13194 +f 16836/32482/13195 16840/32488/13196 16800/32406/13179 16799/32404/13179 +f 16819/32447/13197 16821/32450/13197 16837/32484/13197 16840/32488/13197 +f 16820/32448/13192 16819/32447/13191 16840/32488/13196 16836/32482/13195 +f 16821/32451/13198 16824/32458/13198 16830/32473/13198 16837/32483/13198 +f 16826/32464/13124 16820/32448/13124 16836/32482/13124 16831/32474/13124 +f 16839/32486/13126 16838/32485/13126 16841/32489/13126 16842/32491/13126 +f 16795/32397/13183 16793/32393/13182 16843/32495/13199 16809/32427/13199 +f 16790/32389/13081 16811/32433/13184 16844/32498/13130 16803/32412/13130 +f 16838/32485/13128 16845/32501/13128 16846/32503/13129 16841/32489/13129 +f 16829/32470/13110 16834/32479/13109 16835/32480/13115 16845/32502/13115 +f 16832/32477/13114 16831/32475/13114 16806/32420/13114 16805/32418/13114 +f 16830/32473/13131 16829/32471/13131 16845/32501/13128 16838/32485/13128 +f 16840/32488/13200 16837/32484/13200 16839/32487/13201 16800/32406/13202 +f 16847/32506/13136 16804/32415/13136 16803/32413/13136 16844/32499/13136 +f 16810/32430/13136 16847/32506/13136 16844/32499/13136 16848/32508/13136 +f 16809/32428/13137 16843/32496/13136 16847/32507/13136 16810/32431/13136 +f 16843/32496/13136 16849/32510/13136 16804/32416/13136 16847/32507/13136 +f 16850/32512/13138 16808/32424/13138 16807/32421/13139 16802/32410/13139 +f 16842/32492/13138 16850/32512/13138 16802/32410/13139 16801/32407/13140 +f 16841/32490/13138 16846/32504/13138 16850/32513/13138 16842/32493/13138 +f 16846/32504/13138 16851/32514/13138 16808/32425/13138 16850/32513/13138 +f 16811/32434/13141 16812/32435/13141 16848/32509/13141 16844/32500/13141 +f 16845/32502/13115 16835/32480/13115 16851/32515/13142 16846/32505/13142 +f 16793/32394/13143 16792/32392/13143 16849/32511/13143 16843/32497/13143 +f 16800/32406/13202 16839/32487/13201 16842/32494/13203 16801/32408/13203 +f 16812/32435/13145 16796/32399/13145 16810/32432/13145 16848/32509/13145 +f 16835/32480/13117 16805/32419/13117 16808/32426/13146 16851/32515/13146 +f 16792/32392/13147 16791/32391/13147 16804/32417/13147 16849/32511/13147 +f 16806/32420/13120 16799/32405/13119 16802/32411/13148 16807/32422/13148 +f 16596/32036/12994 16595/32033/12993 16858/32526/13204 16860/32531/13205 +f 16860/32531/13205 16858/32526/13204 16859/32528/13007 16861/32533/13006 +f 16586/32014/12999 16601/32046/12998 16854/32518/13206 16856/32523/13207 +f 16856/32523/13207 16854/32518/13206 16855/32520/13003 16857/32525/13002 +f 16606/32060/12996 16853/32517/12996 16858/32527/12996 16595/32034/12996 +f 16853/32517/12996 16852/32516/12996 16859/32529/12996 16858/32527/12996 +f 16601/32047/12996 16600/32045/12996 16852/32516/12996 16854/32519/12996 +f 16854/32519/12996 16852/32516/12996 16853/32517/12996 16855/32521/12996 +o Cube.007 +v -1.307942 -0.157897 -2.847554 +v -1.307942 1.000000 -2.847554 +v -1.307942 -0.157897 -3.428799 +v -1.307942 1.000000 -3.428799 +v -0.145452 -0.157897 -2.847554 +v -0.145452 1.000000 -2.847554 +v -0.145452 -0.157897 -3.428799 +v -0.145452 1.000000 -3.428799 +v -0.726697 -0.157897 -3.428799 +v -0.726697 1.000000 -3.428799 +v -0.726697 -0.157897 -2.847554 +v -0.726697 1.000000 -2.847554 +vn -0.5812 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.2906 +vn 0.5812 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.2906 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vt 0.501953 0.501953 +vt 0.125000 0.750000 +vt 0.501953 0.501953 +vt 0.990723 0.975586 +vt 0.125000 0.500000 +vt 0.501953 0.501953 +vt 0.990723 0.069336 +vt 0.501953 0.501953 +vt 0.375000 0.750000 +vt 0.501953 0.501953 +vt 0.006348 0.946289 +vt 0.501953 0.501953 +vt 0.501953 0.501953 +vt 0.375000 0.500000 +vt 0.501953 0.501953 +vt 0.006348 0.067383 +vt 0.250000 0.500000 +vt 0.501953 0.501953 +vt 0.502441 0.069336 +vt 0.506348 0.067383 +vt 0.501953 0.501953 +vt 0.250000 0.750000 +vt 0.501953 0.501953 +vt 0.502441 0.975586 +vt 0.506348 0.946289 +vt 0.501953 0.501953 +s 0 +usemtl Bin +f 16862/32534/13208 16863/32536/13208 16865/32541/13208 16864/32539/13208 +f 16870/32551/13209 16871/32554/13209 16869/32548/13209 16868/32546/13209 +f 16868/32546/13210 16869/32548/13210 16867/32545/13210 16866/32543/13210 +f 16872/32556/13211 16873/32559/13211 16863/32536/13211 16862/32534/13211 +f 16870/32550/13212 16868/32547/13212 16866/32542/13212 16872/32555/13212 +f 16871/32552/13213 16865/32540/13213 16863/32537/13213 16873/32557/13213 +f 16869/32549/13213 16871/32553/13213 16873/32558/13213 16867/32544/13213 +f 16864/32538/13212 16870/32550/13212 16872/32555/13212 16862/32535/13212 +f 16866/32543/13211 16867/32545/13211 16873/32559/13211 16872/32556/13211 +f 16864/32539/13209 16865/32541/13209 16871/32554/13209 16870/32551/13209 +o Cube.008 +v -7.476047 -0.157897 -2.847554 +v -7.476047 1.000000 -2.847554 +v -7.476047 -0.157897 -3.428799 +v -7.476047 1.000000 -3.428799 +v -6.313557 -0.157897 -2.847554 +v -6.313557 1.000000 -2.847554 +v -6.313557 -0.157897 -3.428799 +v -6.313557 1.000000 -3.428799 +v -6.894802 -0.157897 -3.428799 +v -6.894802 1.000000 -3.428799 +v -6.894802 -0.157897 -2.847554 +v -6.894802 1.000000 -2.847554 +vn -0.5812 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.2906 +vn 0.5812 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.2906 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vt 0.501953 0.501953 +vt 0.125000 0.750000 +vt 0.501953 0.501953 +vt 0.990723 0.975586 +vt 0.125000 0.500000 +vt 0.501953 0.501953 +vt 0.990723 0.069336 +vt 0.501953 0.501953 +vt 0.375000 0.750000 +vt 0.501953 0.501953 +vt 0.006348 0.946289 +vt 0.501953 0.501953 +vt 0.501953 0.501953 +vt 0.375000 0.500000 +vt 0.501953 0.501953 +vt 0.006348 0.067383 +vt 0.250000 0.500000 +vt 0.501953 0.501953 +vt 0.502441 0.069336 +vt 0.506348 0.067383 +vt 0.501953 0.501953 +vt 0.250000 0.750000 +vt 0.501953 0.501953 +vt 0.502441 0.975586 +vt 0.506348 0.946289 +vt 0.501953 0.501953 +s 0 +usemtl Bin +f 16874/32560/13214 16875/32562/13214 16877/32567/13214 16876/32565/13214 +f 16882/32577/13215 16883/32580/13215 16881/32574/13215 16880/32572/13215 +f 16880/32572/13216 16881/32574/13216 16879/32571/13216 16878/32569/13216 +f 16884/32582/13217 16885/32585/13217 16875/32562/13217 16874/32560/13217 +f 16882/32576/13218 16880/32573/13218 16878/32568/13218 16884/32581/13218 +f 16883/32578/13219 16877/32566/13219 16875/32563/13219 16885/32583/13219 +f 16881/32575/13219 16883/32579/13219 16885/32584/13219 16879/32570/13219 +f 16876/32564/13218 16882/32576/13218 16884/32581/13218 16874/32561/13218 +f 16878/32569/13217 16879/32571/13217 16885/32585/13217 16884/32582/13217 +f 16876/32565/13215 16877/32567/13215 16883/32580/13215 16882/32577/13215 +o Top.016 +v -6.555705 0.785858 -5.832962 +v -6.086166 0.800000 -5.832962 +v -6.086166 0.785858 -6.045779 +v -6.539717 0.789517 -5.832962 +v -6.492777 0.792930 -5.832962 +v -6.418180 0.795858 -5.832962 +v -6.539717 0.785858 -5.888023 +v -6.520681 0.789663 -5.889757 +v -6.473207 0.792952 -5.888829 +v -6.407165 0.795517 -5.887687 +v -6.492777 0.785858 -5.939387 +v -6.472904 0.789592 -5.939771 +v -6.433113 0.792598 -5.934334 +v -6.381773 0.794760 -5.929875 +v -6.357255 0.794023 -5.955832 +v -6.086166 0.799518 -5.888023 +v -6.086166 0.798105 -5.939387 +v -6.086166 0.795858 -5.983446 +v -6.207649 0.799518 -5.832962 +v -6.211473 0.798945 -5.890224 +v -6.209427 0.797515 -5.939714 +v -6.206907 0.795526 -5.978318 +v -6.320974 0.798105 -5.832962 +v -6.321820 0.797506 -5.889150 +v -6.309824 0.796308 -5.934383 +v -6.299986 0.794761 -5.966930 +v -6.207649 0.785858 -6.038532 +v -6.320974 0.785858 -6.017257 +v -6.418180 0.785858 -5.983446 +v -6.086166 0.789517 -6.038532 +v -6.212506 0.789632 -6.029904 +v -6.321694 0.789570 -6.008387 +v -6.406866 0.789494 -5.978454 +v -6.086166 0.792930 -6.017257 +v -6.210135 0.792956 -6.008249 +v -6.309934 0.792594 -5.990214 +v -6.381741 0.792298 -5.966945 +v -6.086166 0.700000 -5.783140 +v -6.555705 0.714142 -5.832962 +v -6.086166 0.714142 -6.045779 +v -6.207649 0.700482 -5.783140 +v -6.320974 0.701895 -5.832962 +v -6.418180 0.704142 -5.832962 +v -6.086166 0.700482 -5.888023 +v -6.212506 0.701055 -5.889757 +v -6.321694 0.702485 -5.888829 +v -6.406866 0.704474 -5.887687 +v -6.086166 0.701895 -5.939387 +v -6.210135 0.702494 -5.939771 +v -6.309934 0.703692 -5.934334 +v -6.381741 0.705239 -5.929875 +v -6.357255 0.705977 -5.955832 +v -6.539717 0.714142 -5.888023 +v -6.492777 0.714142 -5.939387 +v -6.418180 0.714142 -5.983446 +v -6.539717 0.710483 -5.832962 +v -6.520681 0.710368 -5.890224 +v -6.473207 0.710430 -5.939714 +v -6.407165 0.710506 -5.978318 +v -6.492777 0.707070 -5.832962 +v -6.472904 0.707044 -5.889150 +v -6.433113 0.707406 -5.934383 +v -6.381773 0.707702 -5.966930 +v -6.086166 0.710483 -6.038532 +v -6.086166 0.707070 -6.017257 +v -6.086166 0.704142 -5.983446 +v -6.207649 0.714142 -6.038532 +v -6.211473 0.710337 -6.029904 +v -6.209427 0.707048 -6.008387 +v -6.206907 0.704483 -5.978454 +v -6.320974 0.714142 -6.017257 +v -6.321820 0.710408 -6.008249 +v -6.309824 0.707402 -5.990214 +v -6.299986 0.705240 -5.966945 +v -3.705104 0.785858 -6.045779 +v -3.705104 0.800000 -5.832962 +v -3.235565 0.785858 -5.832962 +v -3.705104 0.789517 -6.038532 +v -3.705104 0.792930 -6.017257 +v -3.705104 0.795858 -5.983446 +v -3.583621 0.785858 -6.038532 +v -3.579797 0.789663 -6.029904 +v -3.581843 0.792952 -6.008387 +v -3.584363 0.795517 -5.978454 +v -3.470296 0.785858 -6.017257 +v -3.469450 0.789592 -6.008249 +v -3.481446 0.792598 -5.990214 +v -3.491284 0.794760 -5.966945 +v -3.434016 0.794023 -5.955832 +v -3.583621 0.799518 -5.832962 +v -3.470296 0.798105 -5.832962 +v -3.373090 0.795858 -5.832962 +v -3.705104 0.799518 -5.888024 +v -3.578764 0.798945 -5.889757 +v -3.469576 0.797515 -5.888829 +v -3.384404 0.795526 -5.887687 +v -3.705104 0.798105 -5.939388 +v -3.581135 0.797506 -5.939771 +v -3.481337 0.796308 -5.934334 +v -3.409529 0.794761 -5.929875 +v -3.251553 0.785858 -5.888024 +v -3.298493 0.785858 -5.939388 +v -3.373090 0.785858 -5.983446 +v -3.251553 0.789517 -5.832962 +v -3.270589 0.789632 -5.890224 +v -3.318064 0.789570 -5.939714 +v -3.384105 0.789494 -5.978318 +v -3.298493 0.792930 -5.832962 +v -3.318367 0.792956 -5.889151 +v -3.358158 0.792594 -5.934383 +v -3.409497 0.792298 -5.966930 +v -3.705104 0.714142 -6.045779 +v -3.235565 0.714142 -5.832962 +v -3.705104 0.700000 -5.783140 +v -3.583621 0.714142 -6.038532 +v -3.470296 0.714142 -6.017257 +v -3.373090 0.714142 -5.983446 +v -3.705104 0.710483 -6.038532 +v -3.578764 0.710368 -6.029904 +v -3.469576 0.710430 -6.008387 +v -3.384404 0.710506 -5.978454 +v -3.705104 0.707070 -6.017257 +v -3.581135 0.707044 -6.008249 +v -3.481337 0.707406 -5.990214 +v -3.409529 0.707702 -5.966945 +v -3.434016 0.705977 -5.955832 +v -3.251553 0.710483 -5.832962 +v -3.298493 0.707070 -5.832962 +v -3.373090 0.704142 -5.832962 +v -3.251553 0.714142 -5.888024 +v -3.270589 0.710337 -5.889757 +v -3.318064 0.707048 -5.888829 +v -3.384105 0.704483 -5.887687 +v -3.298493 0.714142 -5.939388 +v -3.318367 0.710408 -5.939771 +v -3.358158 0.707402 -5.934334 +v -3.409497 0.705240 -5.929875 +v -3.705104 0.700482 -5.888024 +v -3.705104 0.701895 -5.939388 +v -3.705104 0.704142 -5.983446 +v -3.583621 0.700482 -5.783140 +v -3.579797 0.701055 -5.890224 +v -3.581843 0.702485 -5.939714 +v -3.584363 0.704474 -5.978318 +v -3.470296 0.701895 -5.832962 +v -3.469450 0.702494 -5.889151 +v -3.481446 0.703692 -5.934383 +v -3.491284 0.705239 -5.966930 +v -6.555705 0.785858 -4.753753 +v -6.086166 0.785858 -4.540936 +v -6.086166 0.800000 -4.753753 +v -6.539717 0.785858 -4.698691 +v -6.492777 0.785858 -4.647327 +v -6.418180 0.785858 -4.603269 +v -6.539717 0.789517 -4.753753 +v -6.520681 0.789632 -4.696490 +v -6.473207 0.789570 -4.647000 +v -6.407165 0.789494 -4.608397 +v -6.492777 0.792930 -4.753753 +v -6.472904 0.792956 -4.697564 +v -6.433113 0.792594 -4.652331 +v -6.381773 0.792298 -4.619785 +v -6.357255 0.794023 -4.630883 +v -6.086166 0.789517 -4.548182 +v -6.086166 0.792930 -4.569458 +v -6.086166 0.795858 -4.603269 +v -6.207649 0.785858 -4.548182 +v -6.211473 0.789663 -4.556810 +v -6.209427 0.792952 -4.578328 +v -6.206907 0.795517 -4.608261 +v -6.320974 0.785858 -4.569458 +v -6.321820 0.789592 -4.578465 +v -6.309824 0.792598 -4.596500 +v -6.299986 0.794760 -4.619770 +v -6.207649 0.799518 -4.753753 +v -6.320974 0.798105 -4.753753 +v -6.418180 0.795858 -4.753753 +v -6.086166 0.799518 -4.698691 +v -6.212506 0.798945 -4.696958 +v -6.321694 0.797515 -4.697886 +v -6.406866 0.795526 -4.699028 +v -6.086166 0.798105 -4.647327 +v -6.210135 0.797506 -4.646944 +v -6.309934 0.796308 -4.652380 +v -6.381741 0.794761 -4.656840 +v -6.086166 0.714142 -4.540936 +v -6.555705 0.714142 -4.753753 +v -6.086166 0.700000 -4.803575 +v -6.207649 0.714142 -4.548182 +v -6.320974 0.714142 -4.569458 +v -6.418180 0.714142 -4.603269 +v -6.086166 0.710483 -4.548182 +v -6.212506 0.710368 -4.556810 +v -6.321694 0.710430 -4.578328 +v -6.406866 0.710506 -4.608261 +v -6.086166 0.707070 -4.569458 +v -6.210135 0.707044 -4.578465 +v -6.309934 0.707406 -4.596500 +v -6.381741 0.707702 -4.619770 +v -6.357255 0.705977 -4.630883 +v -6.539717 0.710483 -4.753753 +v -6.492777 0.707070 -4.753753 +v -6.418180 0.704142 -4.753753 +v -6.539717 0.714142 -4.698691 +v -6.520681 0.710337 -4.696958 +v -6.473207 0.707048 -4.697886 +v -6.407165 0.704483 -4.699028 +v -6.492777 0.714142 -4.647327 +v -6.472904 0.710408 -4.646944 +v -6.433113 0.707402 -4.652380 +v -6.381773 0.705240 -4.656840 +v -6.086166 0.700482 -4.698691 +v -6.086166 0.701895 -4.647327 +v -6.086166 0.704142 -4.603269 +v -6.207649 0.700482 -4.803575 +v -6.211473 0.701055 -4.696490 +v -6.209427 0.702485 -4.647000 +v -6.206907 0.704474 -4.608397 +v -6.320974 0.701895 -4.753753 +v -6.321820 0.702494 -4.697564 +v -6.309824 0.703692 -4.652331 +v -6.299986 0.705239 -4.619785 +v -3.705104 0.785858 -4.540936 +v -3.235565 0.785858 -4.753753 +v -3.705104 0.800000 -4.753753 +v -3.583621 0.785858 -4.548182 +v -3.470296 0.785858 -4.569458 +v -3.373090 0.785858 -4.603269 +v -3.705104 0.789517 -4.548182 +v -3.578764 0.789632 -4.556810 +v -3.469576 0.789570 -4.578328 +v -3.384404 0.789494 -4.608261 +v -3.705104 0.792930 -4.569458 +v -3.581135 0.792956 -4.578465 +v -3.481337 0.792594 -4.596501 +v -3.409529 0.792298 -4.619770 +v -3.434016 0.794023 -4.630883 +v -3.251553 0.789517 -4.753753 +v -3.298493 0.792930 -4.753753 +v -3.373090 0.795858 -4.753753 +v -3.251553 0.785858 -4.698691 +v -3.270589 0.789663 -4.696958 +v -3.318064 0.792952 -4.697886 +v -3.384105 0.795517 -4.699028 +v -3.298493 0.785858 -4.647327 +v -3.318367 0.789592 -4.646944 +v -3.358158 0.792598 -4.652380 +v -3.409497 0.794760 -4.656840 +v -3.705104 0.799518 -4.698691 +v -3.705104 0.798105 -4.647327 +v -3.705104 0.795858 -4.603269 +v -3.583621 0.799518 -4.753753 +v -3.579797 0.798945 -4.696490 +v -3.581843 0.797515 -4.647001 +v -3.584363 0.795526 -4.608397 +v -3.470296 0.798105 -4.753753 +v -3.469450 0.797506 -4.697565 +v -3.481446 0.796308 -4.652331 +v -3.491284 0.794761 -4.619785 +v -3.705104 0.700000 -4.803575 +v -3.235565 0.714142 -4.753753 +v -3.705104 0.714142 -4.540936 +v -3.583621 0.700482 -4.803575 +v -3.470296 0.701895 -4.753753 +v -3.373090 0.704142 -4.753753 +v -3.705104 0.700482 -4.698691 +v -3.578764 0.701055 -4.696958 +v -3.469576 0.702485 -4.697886 +v -3.384404 0.704474 -4.699028 +v -3.705104 0.701895 -4.647327 +v -3.581135 0.702494 -4.646944 +v -3.481337 0.703692 -4.652380 +v -3.409529 0.705239 -4.656840 +v -3.434016 0.705977 -4.630883 +v -3.251553 0.714142 -4.698691 +v -3.298493 0.714142 -4.647327 +v -3.373090 0.714142 -4.603269 +v -3.251553 0.710483 -4.753753 +v -3.270589 0.710368 -4.696490 +v -3.318064 0.710430 -4.647001 +v -3.384105 0.710506 -4.608397 +v -3.298493 0.707070 -4.753753 +v -3.318367 0.707044 -4.697565 +v -3.358158 0.707406 -4.652331 +v -3.409497 0.707702 -4.619785 +v -3.705104 0.710483 -4.548182 +v -3.705104 0.707070 -4.569458 +v -3.705104 0.704142 -4.603269 +v -3.583621 0.714142 -4.548182 +v -3.579797 0.710337 -4.556810 +v -3.581843 0.707048 -4.578328 +v -3.584363 0.704483 -4.608261 +v -3.470296 0.714142 -4.569458 +v -3.469450 0.710408 -4.578465 +v -3.481446 0.707402 -4.596501 +v -3.491284 0.705240 -4.619770 +v -6.082668 -0.060455 -5.887569 +v -6.082668 -0.060937 -5.782765 +v -6.203794 -0.060455 -5.782765 +v -6.208636 -0.059882 -5.889300 +v -3.587477 -0.060455 -5.782765 +v -3.708603 -0.060937 -5.782765 +v -3.708603 -0.060455 -5.887569 +v -3.583664 -0.059882 -5.889768 +v -6.203794 -0.060455 -4.803949 +v -6.082668 -0.060937 -4.803949 +v -6.082668 -0.060455 -4.699146 +v -6.207606 -0.059882 -4.696947 +v -3.708603 -0.060455 -4.699146 +v -3.708603 -0.060937 -4.803949 +v -3.587477 -0.060455 -4.803949 +v -3.582635 -0.059882 -4.697414 +vn -0.0000 -0.0500 -0.0000 +vn -0.0000 -0.0000 0.7524 +vn 1.6601 -0.0000 -0.0000 +vn -0.0000 0.0500 -0.0000 +vn -0.0000 -0.0000 -0.7524 +vn -1.6288 0.0068 -0.1027 +vn -1.5139 0.0194 -0.1000 +vn -1.3030 0.0303 -0.0939 +vn -1.5139 0.0067 -0.2916 +vn -1.4030 0.0189 -0.2842 +vn -1.2183 0.0288 -0.2697 +vn -1.3029 0.0063 -0.4566 +vn -1.2174 0.0179 -0.4345 +vn -1.0989 0.0265 -0.3988 +vn -0.2267 0.0491 -0.1027 +vn -0.2207 0.0456 -0.2921 +vn -0.2071 0.0392 -0.4567 +vn -0.6435 0.0456 -0.1012 +vn -0.6271 0.0423 -0.2846 +vn -0.5950 0.0367 -0.4341 +vn -1.0074 0.0392 -0.0942 +vn -0.9586 0.0367 -0.2699 +vn -0.8799 0.0331 -0.3988 +vn -0.2267 0.0068 -0.7383 +vn -0.6444 0.0066 -0.6862 +vn -1.0076 0.0062 -0.5906 +vn -0.2233 0.0194 -0.6862 +vn -0.6280 0.0189 -0.6359 +vn -0.9579 0.0179 -0.5522 +vn -0.2079 0.0303 -0.5906 +vn -0.5956 0.0289 -0.5518 +vn -0.8798 0.0265 -0.4981 +vn -0.5802 -0.0466 -0.0714 +vn -1.0076 -0.0392 -0.0939 +vn -0.2233 -0.0456 -0.2916 +vn -0.6280 -0.0423 -0.2842 +vn -0.9579 -0.0367 -0.2697 +vn -0.2079 -0.0392 -0.4566 +vn -0.5956 -0.0367 -0.4345 +vn -0.8798 -0.0331 -0.3988 +vn -1.6288 -0.0068 -0.1027 +vn -1.5139 -0.0066 -0.2921 +vn -1.3029 -0.0062 -0.4567 +vn -1.5139 -0.0194 -0.1012 +vn -1.4030 -0.0189 -0.2846 +vn -1.2183 -0.0179 -0.4341 +vn -1.3029 -0.0303 -0.0942 +vn -1.2174 -0.0289 -0.2699 +vn -1.0989 -0.0265 -0.3988 +vn -0.2267 -0.0068 -0.7383 +vn -0.2207 -0.0194 -0.6862 +vn -0.2071 -0.0303 -0.5906 +vn -0.6435 -0.0067 -0.6862 +vn -0.6271 -0.0189 -0.6359 +vn -0.5950 -0.0288 -0.5522 +vn -1.0074 -0.0063 -0.5906 +vn -0.9586 -0.0179 -0.5518 +vn -0.8799 -0.0265 -0.4981 +vn 0.2267 0.0068 -0.7383 +vn 0.2207 0.0194 -0.6862 +vn 0.2071 0.0303 -0.5906 +vn 0.6435 0.0067 -0.6862 +vn 0.6271 0.0189 -0.6359 +vn 0.5950 0.0288 -0.5522 +vn 1.0074 0.0063 -0.5906 +vn 0.9586 0.0179 -0.5518 +vn 0.8799 0.0265 -0.4981 +vn 0.2267 0.0491 -0.1027 +vn 0.6444 0.0456 -0.1000 +vn 1.0076 0.0392 -0.0939 +vn 0.2233 0.0456 -0.2916 +vn 0.6280 0.0423 -0.2842 +vn 0.9579 0.0367 -0.2697 +vn 0.2079 0.0392 -0.4566 +vn 0.5956 0.0367 -0.4345 +vn 0.8798 0.0331 -0.3988 +vn 1.6288 0.0068 -0.1027 +vn 1.5139 0.0066 -0.2921 +vn 1.3029 0.0062 -0.4567 +vn 1.5139 0.0194 -0.1012 +vn 1.4030 0.0189 -0.2846 +vn 1.2183 0.0179 -0.4341 +vn 1.3029 0.0303 -0.0942 +vn 1.2174 0.0289 -0.2699 +vn 1.0989 0.0265 -0.3988 +vn 0.2267 -0.0068 -0.7383 +vn 0.6444 -0.0066 -0.6862 +vn 1.0076 -0.0062 -0.5906 +vn 0.2233 -0.0194 -0.6862 +vn 0.6280 -0.0189 -0.6359 +vn 0.9579 -0.0179 -0.5522 +vn 0.2079 -0.0303 -0.5906 +vn 0.5956 -0.0289 -0.5518 +vn 0.8798 -0.0265 -0.4981 +vn 1.6288 -0.0068 -0.1027 +vn 1.5139 -0.0194 -0.1000 +vn 1.3030 -0.0303 -0.0939 +vn 1.5139 -0.0067 -0.2916 +vn 1.4030 -0.0189 -0.2842 +vn 1.2183 -0.0288 -0.2697 +vn 1.3029 -0.0063 -0.4566 +vn 1.2174 -0.0179 -0.4345 +vn 1.0989 -0.0265 -0.3988 +vn 0.2207 -0.0456 -0.2921 +vn 0.2071 -0.0392 -0.4567 +vn 0.5786 -0.0466 -0.0724 +vn 0.6271 -0.0423 -0.2846 +vn 0.5950 -0.0367 -0.4341 +vn 1.0074 -0.0392 -0.0942 +vn 0.9586 -0.0367 -0.2699 +vn 0.8799 -0.0331 -0.3988 +vn -1.6288 0.0068 0.1027 +vn -1.5139 0.0066 0.2921 +vn -1.3029 0.0062 0.4567 +vn -1.5139 0.0194 0.1012 +vn -1.4030 0.0189 0.2846 +vn -1.2183 0.0179 0.4341 +vn -1.3029 0.0303 0.0942 +vn -1.2174 0.0289 0.2699 +vn -1.0989 0.0265 0.3988 +vn -0.2267 0.0068 0.7383 +vn -0.2207 0.0194 0.6862 +vn -0.2071 0.0303 0.5906 +vn -0.6435 0.0067 0.6862 +vn -0.6271 0.0189 0.6359 +vn -0.5950 0.0288 0.5522 +vn -1.0074 0.0063 0.5906 +vn -0.9586 0.0179 0.5518 +vn -0.8799 0.0265 0.4981 +vn -0.2267 0.0491 0.1027 +vn -0.6444 0.0456 0.1000 +vn -1.0076 0.0392 0.0939 +vn -0.2233 0.0456 0.2916 +vn -0.6280 0.0423 0.2842 +vn -0.9579 0.0367 0.2697 +vn -0.2079 0.0392 0.4566 +vn -0.5956 0.0367 0.4345 +vn -0.8798 0.0331 0.3988 +vn -0.2267 -0.0068 0.7383 +vn -0.6444 -0.0066 0.6862 +vn -1.0076 -0.0062 0.5906 +vn -0.2233 -0.0194 0.6862 +vn -0.6280 -0.0189 0.6359 +vn -0.9579 -0.0179 0.5522 +vn -0.2079 -0.0303 0.5906 +vn -0.5956 -0.0289 0.5518 +vn -0.8798 -0.0265 0.4981 +vn -1.6288 -0.0068 0.1027 +vn -1.5139 -0.0194 0.1000 +vn -1.3030 -0.0303 0.0939 +vn -1.5139 -0.0067 0.2916 +vn -1.4030 -0.0189 0.2842 +vn -1.2183 -0.0288 0.2697 +vn -1.3029 -0.0063 0.4566 +vn -1.2174 -0.0179 0.4345 +vn -1.0989 -0.0265 0.3988 +vn -1.6601 -0.0000 -0.0000 +vn -0.2207 -0.0456 0.2921 +vn -0.2071 -0.0392 0.4567 +vn -0.5786 -0.0466 0.0724 +vn -0.6271 -0.0423 0.2846 +vn -0.5950 -0.0367 0.4341 +vn -1.0074 -0.0392 0.0942 +vn -0.9586 -0.0367 0.2699 +vn -0.8799 -0.0331 0.3988 +vn 0.2267 0.0068 0.7383 +vn 0.6444 0.0066 0.6862 +vn 1.0076 0.0062 0.5906 +vn 0.2233 0.0194 0.6862 +vn 0.6280 0.0189 0.6359 +vn 0.9579 0.0179 0.5522 +vn 0.2079 0.0303 0.5906 +vn 0.5956 0.0289 0.5518 +vn 0.8798 0.0265 0.4981 +vn 1.6288 0.0068 0.1027 +vn 1.5139 0.0194 0.1000 +vn 1.3030 0.0303 0.0939 +vn 1.5139 0.0067 0.2916 +vn 1.4030 0.0189 0.2842 +vn 1.2183 0.0288 0.2697 +vn 1.3029 0.0063 0.4566 +vn 1.2174 0.0179 0.4345 +vn 1.0989 0.0265 0.3988 +vn 0.2267 0.0491 0.1027 +vn 0.2207 0.0456 0.2921 +vn 0.2071 0.0392 0.4567 +vn 0.6435 0.0456 0.1012 +vn 0.6271 0.0423 0.2846 +vn 0.5950 0.0367 0.4341 +vn 1.0074 0.0392 0.0942 +vn 0.9586 0.0367 0.2699 +vn 0.8799 0.0331 0.3988 +vn 0.5802 -0.0466 0.0714 +vn 1.0076 -0.0392 0.0939 +vn 0.2233 -0.0456 0.2916 +vn 0.6280 -0.0423 0.2842 +vn 0.9579 -0.0367 0.2697 +vn 0.2079 -0.0392 0.4566 +vn 0.5956 -0.0367 0.4345 +vn 0.8798 -0.0331 0.3988 +vn 1.6288 -0.0068 0.1027 +vn 1.5139 -0.0066 0.2921 +vn 1.3029 -0.0062 0.4567 +vn 1.5139 -0.0194 0.1012 +vn 1.4030 -0.0189 0.2846 +vn 1.2183 -0.0179 0.4341 +vn 1.3029 -0.0303 0.0942 +vn 1.2174 -0.0289 0.2699 +vn 1.0989 -0.0265 0.3988 +vn 0.2267 -0.0068 0.7383 +vn 0.2207 -0.0194 0.6862 +vn 0.2071 -0.0303 0.5906 +vn 0.6435 -0.0067 0.6862 +vn 0.6271 -0.0189 0.6359 +vn 0.5950 -0.0288 0.5522 +vn 1.0074 -0.0063 0.5906 +vn 0.9586 -0.0179 0.5518 +vn 0.8799 -0.0265 0.4981 +vn -0.0000 -0.0499 0.0519 +vn -0.0000 -0.0462 0.2879 +vn -0.0000 -0.0397 0.4581 +vn -0.0000 -0.0304 0.5969 +vn -0.0000 -0.0191 0.6951 +vn -0.0000 -0.0065 0.7460 +vn -0.2166 -0.0496 -0.0000 +vn -0.6353 -0.0462 -0.0000 +vn -1.0106 -0.0397 -0.0000 +vn -1.3170 -0.0304 -0.0000 +vn -1.5337 -0.0191 -0.0000 +vn -1.6459 -0.0065 -0.0000 +vn -0.2166 -0.0000 -0.7460 +vn -0.6353 -0.0000 -0.6951 +vn -1.0106 -0.0000 -0.5969 +vn -1.3170 -0.0000 -0.4581 +vn -1.5337 -0.0000 -0.2879 +vn -1.6459 -0.0000 -0.0982 +vn 1.6459 -0.0000 0.0982 +vn 1.5337 -0.0000 0.2879 +vn 1.3170 -0.0000 0.4581 +vn 1.0106 -0.0000 0.5969 +vn 0.6353 -0.0000 0.6951 +vn 0.2166 -0.0000 0.7460 +vn 1.6459 -0.0000 -0.0982 +vn 1.5337 -0.0000 -0.2879 +vn 1.3170 -0.0000 -0.4581 +vn 1.0106 -0.0000 -0.5969 +vn 0.6353 -0.0000 -0.6951 +vn 0.2166 -0.0000 -0.7460 +vn -1.6459 -0.0000 0.0982 +vn -1.5337 -0.0000 0.2879 +vn -1.3170 -0.0000 0.4581 +vn -1.0106 -0.0000 0.5969 +vn -0.6353 -0.0000 0.6951 +vn -0.2166 -0.0000 0.7460 +vn 0.2166 0.0496 -0.0000 +vn 0.6353 0.0462 -0.0000 +vn 1.0106 0.0397 -0.0000 +vn 1.3170 0.0304 -0.0000 +vn 1.5337 0.0191 -0.0000 +vn 1.6459 0.0065 -0.0000 +vn -0.0000 0.0496 -0.0982 +vn -0.0000 0.0462 -0.2879 +vn -0.0000 0.0397 -0.4581 +vn -0.0000 0.0304 -0.5969 +vn -0.0000 0.0191 -0.6951 +vn -0.0000 0.0065 -0.7460 +vn 0.2166 -0.0496 -0.0000 +vn 0.6353 -0.0462 -0.0000 +vn 1.0106 -0.0397 -0.0000 +vn 1.3170 -0.0304 -0.0000 +vn 1.5337 -0.0191 -0.0000 +vn 1.6459 -0.0065 -0.0000 +vn -0.0000 0.0496 0.0982 +vn -0.0000 0.0462 0.2879 +vn -0.0000 0.0397 0.4581 +vn -0.0000 0.0304 0.5969 +vn -0.0000 0.0191 0.6951 +vn -0.0000 0.0065 0.7460 +vn -0.2166 0.0496 -0.0000 +vn -0.6353 0.0462 -0.0000 +vn -1.0106 0.0397 -0.0000 +vn -1.3170 0.0304 -0.0000 +vn -1.5337 0.0191 -0.0000 +vn -1.6459 0.0065 -0.0000 +vn -0.0000 -0.0499 -0.0519 +vn -0.0000 -0.0462 -0.2879 +vn -0.0000 -0.0397 -0.4581 +vn -0.0000 -0.0304 -0.5969 +vn -0.0000 -0.0191 -0.6951 +vn -0.0000 -0.0065 -0.7460 +vn -0.2305 -0.0494 -0.0547 +vn 0.2309 -0.0494 -0.0548 +vn -0.2309 -0.0494 0.0548 +vn 0.2305 -0.0494 0.0547 +vn -1.6597 -0.0000 0.0155 +vn 1.6597 -0.0000 -0.0155 +vn -0.0643 -0.0000 -0.7519 +vn 0.0643 -0.0000 0.7519 +vn 0.0503 -0.0000 -0.7521 +vn -0.0503 -0.0000 0.7521 +vn 1.6599 -0.0000 0.0122 +vn -1.6599 -0.0000 -0.0122 +vt 0.799740 0.114352 +vt 0.840885 0.798611 +vt 0.803906 0.201389 +vt 0.840885 0.816204 +vt 0.769531 0.189352 +vt 0.801302 0.130093 +vt 0.801823 0.144907 +vt 0.802865 0.158796 +vt 0.792448 0.118056 +vt 0.840885 0.800463 +vt 0.795052 0.135648 +vt 0.796094 0.150463 +vt 0.797135 0.161574 +vt 0.785156 0.126389 +vt 0.840885 0.803241 +vt 0.788802 0.142130 +vt 0.791406 0.154167 +vt 0.792969 0.163426 +vt 0.790365 0.165278 +vt 0.798177 0.199537 +vt 0.792969 0.198611 +vt 0.787760 0.197685 +vt 0.803906 0.186574 +vt 0.798177 0.186574 +vt 0.792969 0.185648 +vt 0.788281 0.182870 +vt 0.803385 0.172685 +vt 0.798177 0.173611 +vt 0.792969 0.173611 +vt 0.789844 0.172685 +vt 0.771094 0.171759 +vt 0.840885 0.814352 +vt 0.774219 0.154167 +vt 0.840885 0.811574 +vt 0.778906 0.138426 +vt 0.840885 0.807870 +vt 0.775781 0.192130 +vt 0.777865 0.176389 +vt 0.780469 0.161574 +vt 0.784115 0.151389 +vt 0.781510 0.194907 +vt 0.783594 0.181019 +vt 0.785156 0.168981 +vt 0.788281 0.159722 +vt 0.776823 0.816204 +vt 0.794531 0.798611 +vt 0.794531 0.816204 +vt 0.776823 0.814352 +vt 0.776823 0.811574 +vt 0.776823 0.807870 +vt 0.785677 0.798611 +vt 0.778906 0.816204 +vt 0.779427 0.813426 +vt 0.779427 0.811574 +vt 0.778906 0.807870 +vt 0.785677 0.800463 +vt 0.780990 0.816204 +vt 0.780990 0.813426 +vt 0.780990 0.812500 +vt 0.780990 0.807870 +vt 0.785677 0.802315 +vt 0.785677 0.808796 +vt 0.794531 0.800463 +vt 0.794531 0.803241 +vt 0.794531 0.807870 +vt 0.792448 0.798611 +vt 0.792448 0.801389 +vt 0.792448 0.803241 +vt 0.792448 0.807870 +vt 0.790365 0.798611 +vt 0.790365 0.801389 +vt 0.790365 0.802315 +vt 0.790365 0.807870 +vt 0.792448 0.816204 +vt 0.790365 0.816204 +vt 0.785677 0.816204 +vt 0.794531 0.814352 +vt 0.792448 0.813426 +vt 0.790365 0.813426 +vt 0.785677 0.814352 +vt 0.794531 0.811574 +vt 0.792448 0.811574 +vt 0.790365 0.812500 +vt 0.785677 0.812500 +vt 0.840885 0.862500 +vt 0.769531 0.480093 +vt 0.803906 0.468981 +vt 0.840885 0.880093 +vt 0.799740 0.556019 +vt 0.775781 0.477315 +vt 0.781510 0.474537 +vt 0.787240 0.472685 +vt 0.771094 0.497685 +vt 0.840885 0.864352 +vt 0.777865 0.493056 +vt 0.783594 0.489352 +vt 0.788281 0.485648 +vt 0.773698 0.515278 +vt 0.840885 0.867130 +vt 0.780469 0.506944 +vt 0.785156 0.499537 +vt 0.789323 0.496759 +vt 0.789844 0.504167 +vt 0.803385 0.483796 +vt 0.802865 0.496759 +vt 0.802865 0.510648 +vt 0.798177 0.468981 +vt 0.798177 0.483796 +vt 0.798177 0.496759 +vt 0.797135 0.508796 +vt 0.792969 0.470833 +vt 0.792969 0.484722 +vt 0.792969 0.496759 +vt 0.792969 0.506019 +vt 0.792448 0.552315 +vt 0.840885 0.877315 +vt 0.785156 0.543981 +vt 0.840885 0.875463 +vt 0.778906 0.531944 +vt 0.840885 0.870833 +vt 0.800781 0.540278 +vt 0.794531 0.534722 +vt 0.788802 0.527315 +vt 0.784115 0.518981 +vt 0.801823 0.525463 +vt 0.796094 0.519907 +vt 0.791406 0.515278 +vt 0.787760 0.508796 +vt 0.794531 0.862500 +vt 0.794531 0.880093 +vt 0.776823 0.862500 +vt 0.794531 0.864352 +vt 0.794531 0.867130 +vt 0.794531 0.870833 +vt 0.792448 0.862500 +vt 0.792448 0.864352 +vt 0.792448 0.867130 +vt 0.792448 0.870833 +vt 0.790365 0.862500 +vt 0.790365 0.864352 +vt 0.790365 0.866204 +vt 0.790365 0.870833 +vt 0.787240 0.870833 +vt 0.792448 0.880093 +vt 0.790365 0.880093 +vt 0.776823 0.870833 +vt 0.785677 0.880093 +vt 0.794531 0.877315 +vt 0.792448 0.877315 +vt 0.790365 0.877315 +vt 0.785677 0.877315 +vt 0.778906 0.870833 +vt 0.794531 0.875463 +vt 0.792448 0.875463 +vt 0.790365 0.875463 +vt 0.785677 0.876389 +vt 0.780990 0.870833 +vt 0.778906 0.862500 +vt 0.780990 0.862500 +vt 0.785677 0.862500 +vt 0.776823 0.864352 +vt 0.779427 0.864352 +vt 0.780990 0.864352 +vt 0.785677 0.864352 +vt 0.776823 0.867130 +vt 0.779427 0.867130 +vt 0.780990 0.866204 +vt 0.785677 0.866204 +vt 0.916927 0.114352 +vt 0.840885 0.752315 +vt 0.840885 0.734722 +vt 0.947135 0.190278 +vt 0.912760 0.201389 +vt 0.924219 0.118056 +vt 0.840885 0.750463 +vt 0.931510 0.126389 +vt 0.840885 0.747685 +vt 0.937760 0.138426 +vt 0.840885 0.743981 +vt 0.915365 0.130093 +vt 0.922135 0.135648 +vt 0.927865 0.143056 +vt 0.932552 0.151389 +vt 0.914844 0.144907 +vt 0.920573 0.150463 +vt 0.925260 0.155093 +vt 0.928906 0.161574 +vt 0.926823 0.166204 +vt 0.940885 0.193056 +vt 0.935156 0.195833 +vt 0.928906 0.197685 +vt 0.945573 0.172685 +vt 0.840885 0.737500 +vt 0.938802 0.177315 +vt 0.933073 0.181019 +vt 0.928385 0.184722 +vt 0.942448 0.155093 +vt 0.840885 0.739352 +vt 0.936198 0.163426 +vt 0.931510 0.170833 +vt 0.927344 0.173611 +vt 0.913281 0.186574 +vt 0.913281 0.173611 +vt 0.913802 0.159722 +vt 0.918490 0.201389 +vt 0.918490 0.186574 +vt 0.918490 0.173611 +vt 0.919531 0.161574 +vt 0.923698 0.199537 +vt 0.923698 0.185648 +vt 0.923698 0.173611 +vt 0.923698 0.164352 +vt 0.794531 0.734722 +vt 0.794531 0.752315 +vt 0.730990 0.816204 +vt 0.794531 0.737500 +vt 0.794531 0.739352 +vt 0.794531 0.743981 +vt 0.792448 0.734722 +vt 0.792448 0.737500 +vt 0.792448 0.739352 +vt 0.792448 0.743981 +vt 0.790365 0.734722 +vt 0.790365 0.737500 +vt 0.790365 0.739352 +vt 0.790365 0.743981 +vt 0.789323 0.743981 +vt 0.785677 0.746759 +vt 0.722135 0.810648 +vt 0.792448 0.752315 +vt 0.790365 0.752315 +vt 0.730990 0.807870 +vt 0.785677 0.752315 +vt 0.794531 0.750463 +vt 0.792448 0.750463 +vt 0.790365 0.750463 +vt 0.785677 0.750463 +vt 0.728906 0.807870 +vt 0.794531 0.747685 +vt 0.792448 0.747685 +vt 0.790365 0.748611 +vt 0.785677 0.748611 +vt 0.726823 0.807870 +vt 0.728906 0.816204 +vt 0.726302 0.816204 +vt 0.722135 0.816204 +vt 0.785677 0.734722 +vt 0.730990 0.814352 +vt 0.728385 0.813426 +vt 0.726302 0.813426 +vt 0.785677 0.737500 +vt 0.722135 0.814352 +vt 0.730990 0.811574 +vt 0.728906 0.811574 +vt 0.726302 0.812500 +vt 0.785677 0.738426 +vt 0.722135 0.812500 +vt 0.840885 0.688426 +vt 0.947135 0.481019 +vt 0.840885 0.926389 +vt 0.916927 0.556019 +vt 0.912760 0.468981 +vt 0.945573 0.498611 +vt 0.840885 0.686574 +vt 0.942448 0.516204 +vt 0.840885 0.684722 +vt 0.937760 0.531944 +vt 0.840885 0.934722 +vt 0.840885 0.680093 +vt 0.940885 0.478241 +vt 0.938802 0.493981 +vt 0.935677 0.508796 +vt 0.932552 0.518981 +vt 0.935156 0.475463 +vt 0.933073 0.489352 +vt 0.930990 0.501389 +vt 0.928385 0.510648 +vt 0.926302 0.505093 +vt 0.915365 0.540278 +vt 0.914844 0.525463 +vt 0.913802 0.511574 +vt 0.923698 0.552315 +vt 0.840885 0.928241 +vt 0.921615 0.534722 +vt 0.920573 0.519907 +vt 0.919010 0.508796 +vt 0.930990 0.543981 +vt 0.840885 0.930093 +vt 0.927344 0.528241 +vt 0.925260 0.516204 +vt 0.923698 0.506944 +vt 0.918490 0.470833 +vt 0.923698 0.471759 +vt 0.928906 0.472685 +vt 0.912760 0.483796 +vt 0.918490 0.483796 +vt 0.923698 0.484722 +vt 0.928385 0.487500 +vt 0.913281 0.497685 +vt 0.918490 0.496759 +vt 0.923698 0.496759 +vt 0.926823 0.497685 +vt 0.730990 0.862500 +vt 0.794531 0.926389 +vt 0.794531 0.688426 +vt 0.730990 0.864352 +vt 0.730990 0.867130 +vt 0.730990 0.870833 +vt 0.785677 0.926389 +vt 0.728906 0.862500 +vt 0.728906 0.864352 +vt 0.728906 0.867130 +vt 0.728906 0.870833 +vt 0.785677 0.928241 +vt 0.726302 0.862500 +vt 0.726302 0.864352 +vt 0.726302 0.866204 +vt 0.726823 0.870833 +vt 0.785677 0.930093 +vt 0.725781 0.870833 +vt 0.789323 0.934722 +vt 0.785677 0.683796 +vt 0.794531 0.928241 +vt 0.794531 0.930093 +vt 0.794531 0.934722 +vt 0.794531 0.680093 +vt 0.792448 0.926389 +vt 0.792448 0.928241 +vt 0.792448 0.930093 +vt 0.792448 0.934722 +vt 0.792448 0.680093 +vt 0.790365 0.926389 +vt 0.790365 0.928241 +vt 0.790365 0.930093 +vt 0.790365 0.934722 +vt 0.790365 0.680093 +vt 0.792448 0.688426 +vt 0.790365 0.688426 +vt 0.722135 0.862500 +vt 0.785677 0.688426 +vt 0.794531 0.686574 +vt 0.792448 0.686574 +vt 0.790365 0.686574 +vt 0.722135 0.864352 +vt 0.785677 0.686574 +vt 0.794531 0.684722 +vt 0.792448 0.684722 +vt 0.790365 0.684722 +vt 0.722135 0.866204 +vt 0.785677 0.684722 +vt 0.778906 0.816204 +vt 0.776823 0.816204 +vt 0.776823 0.814352 +vt 0.779427 0.813426 +vt 0.776823 0.864352 +vt 0.776823 0.862500 +vt 0.778906 0.862500 +vt 0.779427 0.864352 +vt 0.730990 0.814352 +vt 0.730990 0.816204 +vt 0.728906 0.816204 +vt 0.728385 0.813426 +vt 0.728906 0.862500 +vt 0.730990 0.862500 +vt 0.730990 0.864352 +vt 0.728906 0.864352 +s 0 +usemtl Generic_walls.003 +f 17073/32800/13220 16923/32630/13220 16999/32716/13220 17145/32888/13220 +f 17147/32890/13221 17108/32843/13221 17035/32756/13221 17071/32798/13221 +f 16998/32715/13222 16962/32673/13222 17109/32845/13222 17146/32889/13222 +f 16887/32588/13223 17036/32758/13223 17110/32847/13223 16961/32672/13223 +f 16925/32632/13224 16888/32589/13224 16960/32670/13224 16997/32714/13224 +f 16886/32586/13225 16889/32591/13225 16893/32596/13225 16892/32594/13225 +f 16889/32591/13226 16890/32592/13226 16894/32597/13226 16893/32596/13226 +f 16890/32592/13227 16891/32593/13227 16895/32598/13227 16894/32597/13227 +f 16892/32594/13228 16893/32596/13228 16897/32601/13228 16896/32599/13228 +f 16893/32596/13229 16894/32597/13229 16898/32602/13229 16897/32601/13229 +f 16894/32597/13230 16895/32598/13230 16899/32603/13230 16898/32602/13230 +f 16896/32599/13231 16897/32601/13231 16918/32625/13231 16914/32620/13231 +f 16897/32601/13232 16898/32602/13232 16922/32629/13232 16918/32625/13232 +f 16898/32602/13233 16899/32603/13233 16900/32604/13233 16922/32629/13233 +f 16887/32588/13234 16901/32605/13234 16905/32609/13234 16904/32608/13234 +f 16901/32605/13235 16902/32606/13235 16906/32610/13235 16905/32609/13235 +f 16902/32606/13236 16903/32607/13236 16907/32611/13236 16906/32610/13236 +f 16904/32608/13237 16905/32609/13237 16909/32613/13237 16908/32612/13237 +f 16905/32609/13238 16906/32610/13238 16910/32614/13238 16909/32613/13238 +f 16906/32610/13239 16907/32611/13239 16911/32615/13239 16910/32614/13239 +f 16908/32612/13240 16909/32613/13240 16895/32598/13240 16891/32593/13240 +f 16909/32613/13241 16910/32614/13241 16899/32603/13241 16895/32598/13241 +f 16910/32614/13242 16911/32615/13242 16900/32604/13242 16899/32603/13242 +f 16888/32590/13243 16912/32616/13243 16916/32623/13243 16915/32622/13243 +f 16912/32616/13244 16913/32618/13244 16917/32624/13244 16916/32623/13244 +f 16913/32618/13245 16914/32620/13245 16918/32625/13245 16917/32624/13245 +f 16915/32622/13246 16916/32623/13246 16920/32627/13246 16919/32626/13246 +f 16916/32623/13247 16917/32624/13247 16921/32628/13247 16920/32627/13247 +f 16917/32624/13248 16918/32625/13248 16922/32629/13248 16921/32628/13248 +f 16919/32626/13249 16920/32627/13249 16907/32611/13249 16903/32607/13249 +f 16920/32627/13250 16921/32628/13250 16911/32615/13250 16907/32611/13250 +f 16921/32628/13251 16922/32629/13251 16900/32604/13251 16911/32615/13251 +f 17100/32833/13224 17073/32800/13224 17191/32945/13224 17190/32944/13224 +f 16926/32633/13252 16927/32634/13252 16931/32639/13252 16930/32638/13252 +f 16927/32634/13253 16928/32635/13253 16932/32640/13253 16931/32639/13253 +f 16929/32637/13254 16930/32638/13254 16934/32643/13254 16933/32642/13254 +f 16930/32638/13255 16931/32639/13255 16935/32644/13255 16934/32643/13255 +f 16931/32639/13256 16932/32640/13256 16936/32645/13256 16935/32644/13256 +f 16933/32642/13257 16934/32643/13257 16955/32665/13257 16951/32661/13257 +f 16934/32643/13258 16935/32644/13258 16959/32669/13258 16955/32665/13258 +f 16935/32644/13259 16936/32645/13259 16937/32647/13259 16959/32669/13259 +f 16924/32631/13260 16938/32648/13260 16942/32652/13260 16941/32651/13260 +f 16938/32648/13261 16939/32649/13261 16943/32653/13261 16942/32652/13261 +f 16939/32649/13262 16940/32650/13262 16944/32654/13262 16943/32653/13262 +f 16941/32651/13263 16942/32652/13263 16946/32656/13263 16945/32655/13263 +f 16942/32652/13264 16943/32653/13264 16947/32657/13264 16946/32656/13264 +f 16943/32653/13265 16944/32654/13265 16948/32658/13265 16947/32657/13265 +f 16945/32655/13266 16946/32656/13266 16932/32641/13266 16928/32636/13266 +f 16946/32656/13267 16947/32657/13267 16936/32646/13267 16932/32641/13267 +f 16947/32657/13268 16948/32658/13268 16937/32647/13268 16936/32646/13268 +f 16925/32632/13269 16949/32659/13269 16953/32663/13269 16952/32662/13269 +f 16949/32659/13270 16950/32660/13270 16954/32664/13270 16953/32663/13270 +f 16950/32660/13271 16951/32661/13271 16955/32665/13271 16954/32664/13271 +f 16952/32662/13272 16953/32663/13272 16957/32667/13272 16956/32666/13272 +f 16953/32663/13273 16954/32664/13273 16958/32668/13273 16957/32667/13273 +f 16954/32664/13274 16955/32665/13274 16959/32669/13274 16958/32668/13274 +f 16956/32666/13275 16957/32667/13275 16944/32654/13275 16940/32650/13275 +f 16957/32667/13276 16958/32668/13276 16948/32658/13276 16944/32654/13276 +f 16958/32668/13277 16959/32669/13277 16937/32647/13277 16948/32658/13277 +f 16960/32671/13278 16963/32675/13278 16967/32680/13278 16966/32678/13278 +f 16963/32675/13279 16964/32676/13279 16968/32681/13279 16967/32680/13279 +f 16964/32676/13280 16965/32677/13280 16969/32682/13280 16968/32681/13280 +f 16966/32678/13281 16967/32680/13281 16971/32685/13281 16970/32683/13281 +f 16967/32680/13282 16968/32681/13282 16972/32686/13282 16971/32685/13282 +f 16968/32681/13283 16969/32682/13283 16973/32687/13283 16972/32686/13283 +f 16970/32683/13284 16971/32685/13284 16992/32709/13284 16988/32704/13284 +f 16971/32685/13285 16972/32686/13285 16996/32713/13285 16992/32709/13285 +f 16972/32686/13286 16973/32687/13286 16974/32688/13286 16996/32713/13286 +f 16961/32672/13287 16975/32689/13287 16979/32693/13287 16978/32692/13287 +f 16975/32689/13288 16976/32690/13288 16980/32694/13288 16979/32693/13288 +f 16976/32690/13289 16977/32691/13289 16981/32695/13289 16980/32694/13289 +f 16978/32692/13290 16979/32693/13290 16983/32697/13290 16982/32696/13290 +f 16979/32693/13291 16980/32694/13291 16984/32698/13291 16983/32697/13291 +f 16980/32694/13292 16981/32695/13292 16985/32699/13292 16984/32698/13292 +f 16982/32696/13293 16983/32697/13293 16969/32682/13293 16965/32677/13293 +f 16983/32697/13294 16984/32698/13294 16973/32687/13294 16969/32682/13294 +f 16984/32698/13295 16985/32699/13295 16974/32688/13295 16973/32687/13295 +f 16962/32674/13296 16986/32700/13296 16990/32707/13296 16989/32706/13296 +f 16986/32700/13297 16987/32702/13297 16991/32708/13297 16990/32707/13297 +f 16987/32702/13298 16988/32704/13298 16992/32709/13298 16991/32708/13298 +f 16989/32706/13299 16990/32707/13299 16994/32711/13299 16993/32710/13299 +f 16990/32707/13300 16991/32708/13300 16995/32712/13300 16994/32711/13300 +f 16991/32708/13301 16992/32709/13301 16996/32713/13301 16995/32712/13301 +f 16993/32710/13302 16994/32711/13302 16981/32695/13302 16977/32691/13302 +f 16994/32711/13303 16995/32712/13303 16985/32699/13303 16981/32695/13303 +f 16995/32712/13304 16996/32713/13304 16974/32688/13304 16985/32699/13304 +f 16997/32714/13305 17000/32717/13305 17004/32721/13305 17003/32720/13305 +f 17000/32717/13306 17001/32718/13306 17005/32722/13306 17004/32721/13306 +f 17001/32718/13307 17002/32719/13307 17006/32723/13307 17005/32722/13307 +f 17003/32720/13308 17004/32721/13308 17008/32725/13308 17007/32724/13308 +f 17004/32721/13309 17005/32722/13309 17009/32726/13309 17008/32725/13309 +f 17005/32722/13310 17006/32723/13310 17010/32727/13310 17009/32726/13310 +f 17007/32724/13311 17008/32725/13311 17029/32749/13311 17025/32745/13311 +f 17008/32725/13312 17009/32726/13312 17033/32753/13312 17029/32749/13312 +f 17009/32726/13313 17010/32727/13313 17011/32728/13313 17033/32753/13313 +f 16998/32715/13314 17012/32729/13314 17016/32734/13314 17015/32733/13314 +f 17012/32729/13315 17013/32730/13315 17017/32735/13315 17016/32734/13315 +f 17013/32730/13316 17014/32732/13316 17018/32736/13316 17017/32735/13316 +f 17015/32733/13317 17016/32734/13317 17020/32739/13317 17019/32738/13317 +f 17016/32734/13318 17017/32735/13318 17021/32740/13318 17020/32739/13318 +f 17017/32735/13319 17018/32736/13319 17022/32741/13319 17021/32740/13319 +f 17019/32738/13320 17020/32739/13320 17006/32723/13320 17002/32719/13320 +f 17020/32739/13321 17021/32740/13321 17010/32727/13321 17006/32723/13321 +f 17021/32740/13322 17022/32741/13322 17011/32728/13322 17010/32727/13322 +f 17026/32746/13221 16999/32716/13221 17187/32941/13221 17186/32940/13221 +f 17023/32743/13323 17024/32744/13323 17028/32748/13323 17027/32747/13323 +f 17024/32744/13324 17025/32745/13324 17029/32749/13324 17028/32748/13324 +f 17026/32746/13325 17027/32747/13325 17031/32751/13325 17030/32750/13325 +f 17027/32747/13326 17028/32748/13326 17032/32752/13326 17031/32751/13326 +f 17028/32748/13327 17029/32749/13327 17033/32753/13327 17032/32752/13327 +f 17030/32750/13328 17031/32751/13328 17018/32737/13328 17014/32731/13328 +f 17031/32751/13329 17032/32752/13329 17022/32742/13329 17018/32737/13329 +f 17032/32752/13330 17033/32753/13330 17011/32728/13330 17022/32742/13330 +f 17034/32754/13331 17037/32759/13331 17041/32766/13331 17040/32765/13331 +f 17037/32759/13332 17038/32761/13332 17042/32767/13332 17041/32766/13332 +f 17038/32761/13333 17039/32763/13333 17043/32768/13333 17042/32767/13333 +f 17040/32765/13334 17041/32766/13334 17045/32770/13334 17044/32769/13334 +f 17041/32766/13335 17042/32767/13335 17046/32771/13335 17045/32770/13335 +f 17042/32767/13336 17043/32768/13336 17047/32772/13336 17046/32771/13336 +f 17044/32769/13337 17045/32770/13337 17066/32793/13337 17062/32789/13337 +f 17045/32770/13338 17046/32771/13338 17070/32797/13338 17066/32793/13338 +f 17046/32771/13339 17047/32772/13339 17048/32773/13339 17070/32797/13339 +f 17035/32757/13340 17049/32774/13340 17053/32779/13340 17052/32777/13340 +f 17049/32774/13341 17050/32775/13341 17054/32780/13341 17053/32779/13341 +f 17050/32775/13342 17051/32776/13342 17055/32781/13342 17054/32780/13342 +f 17052/32777/13343 17053/32779/13343 17057/32784/13343 17056/32782/13343 +f 17053/32779/13344 17054/32780/13344 17058/32785/13344 17057/32784/13344 +f 17054/32780/13345 17055/32781/13345 17059/32786/13345 17058/32785/13345 +f 17056/32782/13346 17057/32784/13346 17043/32768/13346 17039/32763/13346 +f 17057/32784/13347 17058/32785/13347 17047/32772/13347 17043/32768/13347 +f 17058/32785/13348 17059/32786/13348 17048/32773/13348 17047/32772/13348 +f 17036/32758/13349 17060/32787/13349 17064/32791/13349 17063/32790/13349 +f 17060/32787/13350 17061/32788/13350 17065/32792/13350 17064/32791/13350 +f 17061/32788/13351 17062/32789/13351 17066/32793/13351 17065/32792/13351 +f 17063/32790/13352 17064/32791/13352 17068/32795/13352 17067/32794/13352 +f 17064/32791/13353 17065/32792/13353 17069/32796/13353 17068/32795/13353 +f 17065/32792/13354 17066/32793/13354 17070/32797/13354 17069/32796/13354 +f 17067/32794/13355 17068/32795/13355 17055/32781/13355 17051/32776/13355 +f 17068/32795/13356 17069/32796/13356 17059/32786/13356 17055/32781/13356 +f 17069/32796/13357 17070/32797/13357 17048/32773/13357 17059/32786/13357 +f 17071/32798/13358 17074/32801/13358 17078/32805/13358 17077/32804/13358 +f 17074/32801/13359 17075/32802/13359 17079/32806/13359 17078/32805/13359 +f 17075/32802/13360 17076/32803/13360 17080/32807/13360 17079/32806/13360 +f 17077/32804/13361 17078/32805/13361 17082/32809/13361 17081/32808/13361 +f 17078/32805/13362 17079/32806/13362 17083/32810/13362 17082/32809/13362 +f 17079/32806/13363 17080/32807/13363 17084/32811/13363 17083/32810/13363 +f 17081/32808/13364 17082/32809/13364 17103/32836/13364 17099/32832/13364 +f 17082/32809/13365 17083/32810/13365 17107/32841/13365 17103/32836/13365 +f 17083/32810/13366 17084/32811/13366 17085/32812/13366 17107/32841/13366 +f 17072/32799/13367 17086/32815/13367 17090/32820/13367 17089/32819/13367 +f 17086/32815/13368 17087/32816/13368 17091/32821/13368 17090/32820/13368 +f 17087/32816/13369 17088/32818/13369 17092/32822/13369 17091/32821/13369 +f 17089/32819/13370 17090/32820/13370 17094/32825/13370 17093/32824/13370 +f 17090/32820/13371 17091/32821/13371 17095/32826/13371 17094/32825/13371 +f 17091/32821/13372 17092/32822/13372 17096/32827/13372 17095/32826/13372 +f 17093/32824/13373 17094/32825/13373 17080/32807/13373 17076/32803/13373 +f 17094/32825/13374 17095/32826/13374 17084/32811/13374 17080/32807/13374 +f 17095/32826/13375 17096/32827/13375 17085/32813/13375 17084/32811/13375 +f 17151/32895/13376 17145/32888/13376 17195/32949/13376 17194/32948/13376 +f 17097/32829/13377 17098/32830/13377 17102/32835/13377 17101/32834/13377 +f 17098/32830/13378 17099/32831/13378 17103/32837/13378 17102/32835/13378 +f 17100/32833/13379 17101/32834/13379 17105/32839/13379 17104/32838/13379 +f 17101/32834/13380 17102/32835/13380 17106/32840/13380 17105/32839/13380 +f 17102/32835/13381 17103/32837/13381 17107/32842/13381 17106/32840/13381 +f 17104/32838/13382 17105/32839/13382 17092/32823/13382 17088/32817/13382 +f 17105/32839/13383 17106/32840/13383 17096/32828/13383 17092/32823/13383 +f 17106/32840/13384 17107/32842/13384 17085/32814/13384 17096/32828/13384 +f 17108/32844/13385 17111/32848/13385 17115/32856/13385 17114/32855/13385 +f 17111/32848/13386 17112/32850/13386 17116/32857/13386 17115/32856/13386 +f 17112/32850/13387 17113/32852/13387 17117/32858/13387 17116/32857/13387 +f 17114/32855/13388 17115/32856/13388 17119/32860/13388 17118/32859/13388 +f 17115/32856/13389 17116/32857/13389 17120/32861/13389 17119/32860/13389 +f 17116/32857/13390 17117/32858/13390 17121/32862/13390 17120/32861/13390 +f 17118/32859/13391 17119/32860/13391 17140/32883/13391 17136/32879/13391 +f 17119/32860/13392 17120/32861/13392 17144/32887/13392 17140/32883/13392 +f 17120/32861/13393 17121/32862/13393 17122/32863/13393 17144/32887/13393 +f 17109/32846/13394 17123/32864/13394 17127/32869/13394 17126/32867/13394 +f 17123/32864/13395 17124/32865/13395 17128/32870/13395 17127/32869/13395 +f 17124/32865/13396 17125/32866/13396 17129/32871/13396 17128/32870/13396 +f 17126/32867/13397 17127/32869/13397 17131/32874/13397 17130/32872/13397 +f 17127/32869/13398 17128/32870/13398 17132/32875/13398 17131/32874/13398 +f 17128/32870/13399 17129/32871/13399 17133/32876/13399 17132/32875/13399 +f 17130/32872/13400 17131/32874/13400 17117/32858/13400 17113/32852/13400 +f 17131/32874/13401 17132/32875/13401 17121/32862/13401 17117/32858/13401 +f 17132/32875/13402 17133/32876/13402 17122/32863/13402 17121/32862/13402 +f 17110/32847/13403 17134/32877/13403 17138/32881/13403 17137/32880/13403 +f 17134/32877/13404 17135/32878/13404 17139/32882/13404 17138/32881/13404 +f 17135/32878/13405 17136/32879/13405 17140/32883/13405 17139/32882/13405 +f 17137/32880/13406 17138/32881/13406 17142/32885/13406 17141/32884/13406 +f 17138/32881/13407 17139/32882/13407 17143/32886/13407 17142/32885/13407 +f 17139/32882/13408 17140/32883/13408 17144/32887/13408 17143/32886/13408 +f 17141/32884/13409 17142/32885/13409 17129/32871/13409 17125/32866/13409 +f 17142/32885/13410 17143/32886/13410 17133/32876/13410 17129/32871/13410 +f 17143/32886/13411 17144/32887/13411 17122/32863/13411 17133/32876/13411 +f 16929/32637/13222 16923/32630/13222 17183/32937/13222 17182/32936/13222 +f 17148/32891/13412 17149/32892/13412 17153/32897/13412 17152/32896/13412 +f 17149/32892/13413 17150/32893/13413 17154/32898/13413 17153/32897/13413 +f 17151/32895/13414 17152/32896/13414 17156/32901/13414 17155/32900/13414 +f 17152/32896/13415 17153/32897/13415 17157/32902/13415 17156/32901/13415 +f 17153/32897/13416 17154/32898/13416 17158/32903/13416 17157/32902/13416 +f 17155/32900/13417 17156/32901/13417 17177/32929/13417 17173/32924/13417 +f 17156/32901/13418 17157/32902/13418 17181/32934/13418 17177/32929/13418 +f 17157/32902/13419 17158/32903/13419 17159/32905/13419 17181/32934/13419 +f 17146/32889/13420 17160/32908/13420 17164/32913/13420 17163/32912/13420 +f 17160/32908/13421 17161/32909/13421 17165/32914/13421 17164/32913/13421 +f 17161/32909/13422 17162/32910/13422 17166/32915/13422 17165/32914/13422 +f 17163/32912/13423 17164/32913/13423 17168/32918/13423 17167/32917/13423 +f 17164/32913/13424 17165/32914/13424 17169/32919/13424 17168/32918/13424 +f 17165/32914/13425 17166/32915/13425 17170/32920/13425 17169/32919/13425 +f 17167/32917/13426 17168/32918/13426 17154/32899/13426 17150/32894/13426 +f 17168/32918/13427 17169/32919/13427 17158/32904/13427 17154/32899/13427 +f 17169/32919/13428 17170/32920/13428 17159/32906/13428 17158/32904/13428 +f 17147/32890/13429 17171/32922/13429 17175/32927/13429 17174/32926/13429 +f 17171/32922/13430 17172/32923/13430 17176/32928/13430 17175/32927/13430 +f 17172/32923/13431 17173/32925/13431 17177/32930/13431 17176/32928/13431 +f 17174/32926/13432 17175/32927/13432 17179/32932/13432 17178/32931/13432 +f 17175/32927/13433 17176/32928/13433 17180/32933/13433 17179/32932/13433 +f 17176/32928/13434 17177/32930/13434 17181/32935/13434 17180/32933/13434 +f 17178/32931/13435 17179/32932/13435 17166/32916/13435 17162/32911/13435 +f 17179/32932/13436 17180/32933/13436 17170/32921/13436 17166/32916/13436 +f 17180/32933/13437 17181/32935/13437 17159/32907/13437 17170/32921/13437 +f 17073/32800/13438 17145/32888/13438 17151/32895/13438 17097/32829/13438 +f 17097/32829/13439 17151/32895/13439 17155/32900/13439 17098/32830/13439 +f 17098/32830/13440 17155/32900/13440 17173/32924/13440 17099/32831/13440 +f 17099/32832/13441 17173/32925/13441 17172/32923/13441 17081/32808/13441 +f 17081/32808/13442 17172/32923/13442 17171/32922/13442 17077/32804/13442 +f 17077/32804/13443 17171/32922/13443 17147/32890/13443 17071/32798/13443 +f 16923/32630/13444 17073/32800/13444 17100/32833/13444 16926/32633/13444 +f 16926/32633/13445 17100/32833/13445 17104/32838/13445 16927/32634/13445 +f 16927/32634/13446 17104/32838/13446 17088/32817/13446 16928/32635/13446 +f 16928/32636/13447 17088/32818/13447 17087/32816/13447 16945/32655/13447 +f 16945/32655/13448 17087/32816/13448 17086/32815/13448 16941/32651/13448 +f 16941/32651/13449 17086/32815/13449 17072/32799/13449 16924/32631/13449 +f 16888/32589/13450 16925/32632/13450 16952/32662/13450 16912/32617/13450 +f 16912/32617/13451 16952/32662/13451 16956/32666/13451 16913/32619/13451 +f 16913/32619/13452 16956/32666/13452 16940/32650/13452 16914/32621/13452 +f 16914/32621/13453 16940/32650/13453 16939/32649/13453 16896/32600/13453 +f 16896/32600/13454 16939/32649/13454 16938/32648/13454 16892/32595/13454 +f 16892/32595/13455 16938/32648/13455 16924/32631/13455 16886/32587/13455 +f 17146/32889/13456 17109/32845/13456 17126/32868/13456 17160/32908/13456 +f 17160/32908/13457 17126/32868/13457 17130/32873/13457 17161/32909/13457 +f 17161/32909/13458 17130/32873/13458 17113/32853/13458 17162/32910/13458 +f 17162/32911/13459 17113/32854/13459 17112/32851/13459 17178/32931/13459 +f 17178/32931/13460 17112/32851/13460 17111/32849/13460 17174/32926/13460 +f 17174/32926/13461 17111/32849/13461 17108/32843/13461 17147/32890/13461 +f 16962/32673/13462 16998/32715/13462 17015/32733/13462 16986/32701/13462 +f 16986/32701/13463 17015/32733/13463 17019/32738/13463 16987/32703/13463 +f 16987/32703/13464 17019/32738/13464 17002/32719/13464 16988/32705/13464 +f 16988/32705/13465 17002/32719/13465 17001/32718/13465 16970/32684/13465 +f 16970/32684/13466 17001/32718/13466 17000/32717/13466 16966/32679/13466 +f 16966/32679/13467 17000/32717/13467 16997/32714/13467 16960/32670/13467 +f 17034/32755/13468 17072/32799/13468 17089/32819/13468 17037/32760/13468 +f 17037/32760/13469 17089/32819/13469 17093/32824/13469 17038/32762/13469 +f 17038/32762/13470 17093/32824/13470 17076/32803/13470 17039/32764/13470 +f 17039/32764/13471 17076/32803/13471 17075/32802/13471 17056/32783/13471 +f 17056/32783/13472 17075/32802/13472 17074/32801/13472 17052/32778/13472 +f 17052/32778/13473 17074/32801/13473 17071/32798/13473 17035/32756/13473 +f 16961/32672/13474 17110/32847/13474 17137/32880/13474 16975/32689/13474 +f 16975/32689/13475 17137/32880/13475 17141/32884/13475 16976/32690/13475 +f 16976/32690/13476 17141/32884/13476 17125/32866/13476 16977/32691/13476 +f 16977/32691/13477 17125/32866/13477 17124/32865/13477 16993/32710/13477 +f 16993/32710/13478 17124/32865/13478 17123/32864/13478 16989/32706/13478 +f 16989/32706/13479 17123/32864/13479 17109/32846/13479 16962/32674/13479 +f 16887/32588/13480 16961/32672/13480 16978/32692/13480 16901/32605/13480 +f 16901/32605/13481 16978/32692/13481 16982/32696/13481 16902/32606/13481 +f 16902/32606/13482 16982/32696/13482 16965/32677/13482 16903/32607/13482 +f 16903/32607/13483 16965/32677/13483 16964/32676/13483 16919/32626/13483 +f 16919/32626/13484 16964/32676/13484 16963/32675/13484 16915/32622/13484 +f 16915/32622/13485 16963/32675/13485 16960/32671/13485 16888/32590/13485 +f 17145/32888/13486 16999/32716/13486 17026/32746/13486 17148/32891/13486 +f 17148/32891/13487 17026/32746/13487 17030/32750/13487 17149/32892/13487 +f 17149/32892/13488 17030/32750/13488 17014/32731/13488 17150/32893/13488 +f 17150/32894/13489 17014/32732/13489 17013/32730/13489 17167/32917/13489 +f 17167/32917/13490 17013/32730/13490 17012/32729/13490 17163/32912/13490 +f 17163/32912/13491 17012/32729/13491 16998/32715/13491 17146/32889/13491 +f 17110/32847/13492 17036/32758/13492 17063/32790/13492 17134/32877/13492 +f 17134/32877/13493 17063/32790/13493 17067/32794/13493 17135/32878/13493 +f 17135/32878/13494 17067/32794/13494 17051/32776/13494 17136/32879/13494 +f 17136/32879/13495 17051/32776/13495 17050/32775/13495 17118/32859/13495 +f 17118/32859/13496 17050/32775/13496 17049/32774/13496 17114/32855/13496 +f 17114/32855/13497 17049/32774/13497 17035/32757/13497 17108/32844/13497 +f 17036/32758/13498 16887/32588/13498 16904/32608/13498 17060/32787/13498 +f 17060/32787/13499 16904/32608/13499 16908/32612/13499 17061/32788/13499 +f 17061/32788/13500 16908/32612/13500 16891/32593/13500 17062/32789/13500 +f 17062/32789/13501 16891/32593/13501 16890/32592/13501 17044/32769/13501 +f 17044/32769/13502 16890/32592/13502 16889/32591/13502 17040/32765/13502 +f 17040/32765/13503 16889/32591/13503 16886/32586/13503 17034/32754/13503 +f 16999/32716/13504 16923/32630/13504 16929/32637/13504 17023/32743/13504 +f 17023/32743/13505 16929/32637/13505 16933/32642/13505 17024/32744/13505 +f 17024/32744/13506 16933/32642/13506 16951/32661/13506 17025/32745/13506 +f 17025/32745/13507 16951/32661/13507 16950/32660/13507 17007/32724/13507 +f 17007/32724/13508 16950/32660/13508 16949/32659/13508 17003/32720/13508 +f 17003/32720/13509 16949/32659/13509 16925/32632/13509 16997/32714/13509 +f 17072/32799/13376 17034/32755/13376 16886/32587/13376 16924/32631/13376 +f 17183/32937/13510 17184/32938/13510 17185/32939/13510 17182/32936/13510 +f 17187/32941/13511 17188/32942/13511 17189/32943/13511 17186/32940/13511 +f 17191/32945/13512 17192/32946/13512 17193/32947/13512 17190/32944/13512 +f 17195/32949/13513 17196/32950/13513 17197/32951/13513 17194/32948/13513 +f 16923/32630/13221 16926/32633/13221 17184/32938/13221 17183/32937/13221 +f 17145/32888/13224 17148/32891/13224 17196/32950/13224 17195/32949/13224 +f 16999/32716/13376 17023/32743/13376 17188/32942/13376 17187/32941/13376 +f 17073/32800/13222 17097/32829/13222 17192/32946/13222 17191/32945/13222 +f 16926/32633/13514 16930/32638/13514 17185/32939/13514 17184/32938/13514 +f 17148/32891/13515 17152/32896/13515 17197/32951/13515 17196/32950/13515 +f 17023/32743/13516 17027/32747/13516 17189/32943/13516 17188/32942/13516 +f 17097/32829/13517 17101/32834/13517 17193/32947/13517 17192/32946/13517 +f 16930/32638/13518 16929/32637/13518 17182/32936/13518 17185/32939/13518 +f 17152/32896/13519 17151/32895/13519 17194/32948/13519 17197/32951/13519 +f 17027/32747/13520 17026/32746/13520 17186/32940/13520 17189/32943/13520 +f 17101/32834/13521 17100/32833/13521 17190/32944/13521 17193/32947/13521 +o Theatrette - Right.001 +v 14.605465 2.123810 -6.661314 +v 14.605465 0.876190 -6.661314 +v 14.605465 2.123810 -4.059472 +v 14.605465 0.876190 -4.059472 +v 14.522291 2.123810 -6.661314 +v 14.522291 0.876190 -6.661314 +v 14.522291 2.123810 -4.059472 +v 14.522291 0.876190 -4.059472 +vn -0.0000 0.6238 -0.0000 +vn -0.0000 -0.0000 1.3009 +vn -0.0416 -0.0000 -0.0000 +vn -0.0000 -0.6238 -0.0000 +vn 0.0416 -0.0000 -0.0000 +vn -0.0000 -0.0000 -1.3009 +vt 0.425000 0.635000 +vt 0.455000 0.635000 +vt 0.425000 0.605000 +vt 0.455000 0.605000 +vt 0.395000 0.635000 +vt 0.500781 0.745833 +vt 0.425000 0.655000 +vt 0.505990 0.745833 +vt 0.485000 0.635000 +vt 0.455000 0.655000 +vt 0.395000 0.605000 +vt 0.425000 0.575000 +vt 0.500781 0.751389 +vt 0.455000 0.575000 +vt 0.505990 0.751389 +vt 0.485000 0.605000 +s 0 +usemtl Generic_walls +f 17198/32952/13522 17202/32956/13522 17204/32962/13522 17200/32954/13522 +f 17201/32955/13523 17200/32954/13523 17204/32963/13523 17205/32965/13523 +f 17205/32966/13524 17204/32964/13524 17202/32957/13524 17203/32959/13524 +f 17203/32960/13525 17199/32953/13525 17201/32955/13525 17205/32967/13525 +f 17199/32953/13526 17198/32952/13526 17200/32954/13526 17201/32955/13526 +f 17203/32961/13527 17202/32958/13527 17198/32952/13527 17199/32953/13527 +o Theatrette - glass wall.001 +v 4.996949 3.088673 -7.482034 +v 4.996949 2.400000 -7.482034 +v 4.996949 3.088673 -3.135219 +v 4.996949 2.400000 -3.135219 +v 4.796949 3.088673 -7.482034 +v 4.796949 2.400000 -7.482034 +v 4.796949 3.088673 -3.135219 +v 4.796949 2.400000 -3.135219 +vn -0.0000 0.2488 -0.0000 +vn -0.0000 -0.0000 2.3487 +vn -0.1000 -0.0000 -0.0000 +vn -0.0000 -0.2488 -0.0000 +vn 0.1000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -2.3487 +vt 0.505000 0.505000 +vt 0.495000 0.505000 +vt 0.505000 0.515000 +vt 0.495000 0.515000 +vt 0.525000 0.505000 +vt 0.505000 0.485000 +vt 0.475000 0.505000 +vt 0.495000 0.485000 +vt 0.525000 0.515000 +vt 0.505000 0.525000 +vt 0.505000 0.475000 +vt 0.495000 0.525000 +vt 0.495000 0.475000 +vt 0.475000 0.515000 +s 0 +usemtl DarkWall +f 17206/32968/13528 17210/32972/13528 17212/32976/13528 17208/32970/13528 +f 17209/32971/13529 17208/32970/13529 17212/32977/13529 17213/32979/13529 +f 17213/32980/13530 17212/32978/13530 17210/32973/13530 17211/32975/13530 +f 17211/32974/13531 17207/32969/13531 17209/32971/13531 17213/32981/13531 +f 17207/32969/13532 17206/32968/13532 17208/32970/13532 17209/32971/13532 +f 17211/32975/13533 17210/32973/13533 17206/32968/13533 17207/32969/13533 +o Theatrette - Bottom Left glass wall.001 +v 4.812383 3.076038 -3.141650 +v 4.812383 2.400000 -3.141650 +v 7.760053 3.076038 -3.141650 +v 7.760053 2.400000 -3.141650 +v 4.812383 3.076038 -2.941650 +v 4.812383 2.400000 -2.941650 +v 7.760053 3.076038 -2.941650 +v 7.760053 2.400000 -2.941650 +vn -0.0000 1.5000 -0.0000 +vn 1.4738 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.1000 +vn -0.0000 -1.5000 -0.0000 +vn -0.0000 -0.0000 -0.1000 +vn -1.4738 -0.0000 -0.0000 +vt 0.505000 0.505000 +vt 0.495000 0.505000 +vt 0.505000 0.505000 +vt 0.495000 0.505000 +vt 0.505000 0.505000 +vt 0.505000 0.495000 +vt 0.495000 0.505000 +vt 0.495000 0.495000 +vt 0.505000 0.505000 +vt 0.505000 0.515000 +vt 0.505000 0.485000 +vt 0.495000 0.515000 +vt 0.495000 0.485000 +vt 0.495000 0.505000 +s 0 +usemtl DarkWall +f 17214/32982/13534 17218/32986/13534 17220/32990/13534 17216/32984/13534 +f 17217/32985/13535 17216/32984/13535 17220/32991/13535 17221/32993/13535 +f 17221/32994/13536 17220/32992/13536 17218/32987/13536 17219/32989/13536 +f 17219/32988/13537 17215/32983/13537 17217/32985/13537 17221/32995/13537 +f 17215/32983/13538 17214/32982/13538 17216/32984/13538 17217/32985/13538 +f 17219/32989/13539 17218/32987/13539 17214/32982/13539 17215/32983/13539 +o Theatrette - Bottom.001 +v 4.808777 0.500000 -7.482163 +v 4.808777 0.000000 -7.482163 +v 4.808777 0.500000 -2.789483 +v 4.808777 0.000000 -2.789483 +v 3.808777 0.500000 -7.482163 +v 3.808777 0.000000 -7.482163 +v 3.808777 0.500000 -2.789483 +v 3.808777 0.000000 -2.789483 +vn -0.0000 0.2500 -0.0000 +vn -0.0000 -0.0000 2.3463 +vn -0.5000 -0.0000 -0.0000 +vn -0.0000 -0.2500 -0.0000 +vn 0.5000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -2.3463 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl Wood +f 17222/32996/13540 17226/33000/13540 17228/33004/13540 17224/32998/13540 +f 17225/32999/13541 17224/32998/13541 17228/33005/13541 17229/33007/13541 +f 17229/33008/13542 17228/33006/13542 17226/33001/13542 17227/33003/13542 +f 17227/33002/13543 17223/32997/13543 17225/32999/13543 17229/33009/13543 +f 17223/32997/13544 17222/32996/13544 17224/32998/13544 17225/32999/13544 +f 17227/33003/13545 17226/33001/13545 17222/32996/13545 17223/32997/13545 +o Theatrette - Bottom.002 +v 6.827080 0.600000 -7.479465 +v 6.827080 0.000000 -7.479465 +v 6.827080 0.600000 -3.127930 +v 6.827080 0.000000 -3.127930 +v 4.804616 0.600000 -7.479465 +v 4.804616 0.000000 -7.479465 +v 4.804616 0.600000 -3.127929 +v 4.804616 0.000000 -3.127929 +vn -0.0000 0.3000 -0.0000 +vn -0.0000 -0.0000 2.1758 +vn -0.5000 -0.0000 -0.0000 +vn -0.0000 -0.3000 -0.0000 +vn 0.5000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -2.1758 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl Wood +f 17230/33010/13546 17234/33014/13546 17236/33018/13546 17232/33012/13546 +f 17233/33013/13547 17232/33012/13547 17236/33019/13547 17237/33021/13547 +f 17237/33022/13548 17236/33020/13548 17234/33015/13548 17235/33017/13548 +f 17235/33016/13549 17231/33011/13549 17233/33013/13549 17237/33023/13549 +f 17231/33011/13550 17230/33010/13550 17232/33012/13550 17233/33013/13550 +f 17235/33017/13551 17234/33015/13551 17230/33010/13551 17231/33011/13551 +o Theatrette - Bottom.003 +v 7.752580 0.300000 -7.479465 +v 7.752580 0.000000 -7.479465 +v 7.752580 0.300000 -3.127930 +v 7.752580 0.000000 -3.127930 +v 5.842932 0.300000 -7.479465 +v 5.842932 0.000000 -7.479465 +v 5.842932 0.300000 -3.127929 +v 5.842932 0.000000 -3.127929 +vn -0.0000 0.1500 -0.0000 +vn -0.0000 -0.0000 2.1758 +vn -0.5000 -0.0000 -0.0000 +vn -0.0000 -0.1500 -0.0000 +vn 0.5000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -2.1758 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl Wood +f 17238/33024/13552 17242/33028/13552 17244/33032/13552 17240/33026/13552 +f 17241/33027/13553 17240/33026/13553 17244/33033/13553 17245/33035/13553 +f 17245/33036/13554 17244/33034/13554 17242/33029/13554 17243/33031/13554 +f 17243/33030/13555 17239/33025/13555 17241/33027/13555 17245/33037/13555 +f 17239/33025/13556 17238/33024/13556 17240/33026/13556 17241/33027/13556 +f 17243/33031/13557 17242/33029/13557 17238/33024/13557 17239/33025/13557 +o Floor.001 +v 14.795513 0.000000 1.868013 +v 14.795513 -0.250000 1.868013 +v 14.795513 0.000000 7.253408 +v 14.795513 -0.250000 7.253408 +v 7.628441 0.000000 1.868013 +v 7.628441 -0.250000 1.868013 +v 7.628441 0.000000 7.253408 +v 7.628441 -0.250000 7.253408 +vn -0.0000 0.1250 -0.0000 +vn -0.0000 -0.0000 2.6927 +vn -3.5835 -0.0000 -0.0000 +vn -0.0000 -0.1250 -0.0000 +vn 3.5835 -0.0000 -0.0000 +vn -0.0000 -0.0000 -2.6927 +vt -0.766204 -0.746759 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt -0.766204 1.781018 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 1.761574 -0.746759 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 1.761574 1.781018 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl Carpet +f 17246/33038/13558 17250/33044/13558 17252/33048/13558 17248/33041/13558 +f 17249/33043/13559 17248/33042/13559 17252/33049/13559 17253/33051/13559 +f 17253/33052/13560 17252/33050/13560 17250/33045/13560 17251/33047/13560 +f 17251/33046/13561 17247/33040/13561 17249/33043/13561 17253/33053/13561 +f 17247/33040/13562 17246/33039/13562 17248/33042/13562 17249/33043/13562 +f 17251/33047/13563 17250/33045/13563 17246/33039/13563 17247/33040/13563 +o Floor.002 +v 7.585629 0.000000 1.873751 +v 7.585629 -0.250000 1.873751 +v 7.585629 0.000000 7.247670 +v 7.585629 -0.250000 7.247670 +v 0.418556 0.000000 1.873751 +v 0.418556 -0.250000 1.873751 +v 0.418556 0.000000 7.247670 +v 0.418556 -0.250000 7.247670 +vn -0.0000 0.1250 -0.0000 +vn -0.0000 -0.0000 2.6870 +vn -3.5835 -0.0000 -0.0000 +vn -0.0000 -0.1250 -0.0000 +vn 3.5835 -0.0000 -0.0000 +vn -0.0000 -0.0000 -2.6870 +vt -0.766204 -0.746759 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt -0.766204 1.781018 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 1.761574 -0.746759 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 1.761574 1.781018 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl Carpet +f 17254/33054/13564 17258/33060/13564 17260/33064/13564 17256/33057/13564 +f 17257/33059/13565 17256/33058/13565 17260/33065/13565 17261/33067/13565 +f 17261/33068/13566 17260/33066/13566 17258/33061/13566 17259/33063/13566 +f 17259/33062/13567 17255/33056/13567 17257/33059/13567 17261/33069/13567 +f 17255/33056/13568 17254/33055/13568 17256/33058/13568 17257/33059/13568 +f 17259/33063/13569 17258/33061/13569 17254/33055/13569 17255/33056/13569 +o Floor.003 +v -2.912925 0.000000 1.873751 +v -2.912925 -0.250000 1.873751 +v -2.912925 0.000000 7.247670 +v -2.912925 -0.250000 7.247670 +v -11.720645 0.000000 1.873751 +v -11.720645 -0.250000 1.873751 +v -11.720645 0.000000 7.247670 +v -11.720645 -0.250000 7.247670 +vn -0.0000 0.1250 -0.0000 +vn -0.0000 -0.0000 2.6870 +vn -4.4039 -0.0000 -0.0000 +vn -0.0000 -0.1250 -0.0000 +vn 4.4039 -0.0000 -0.0000 +vn -0.0000 -0.0000 -2.6870 +vt -0.766204 -0.746759 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt -0.766204 1.781018 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 1.761574 -0.746759 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 1.761574 1.781018 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl Carpet +f 17262/33070/13570 17266/33076/13570 17268/33080/13570 17264/33073/13570 +f 17265/33075/13571 17264/33074/13571 17268/33081/13571 17269/33083/13571 +f 17269/33084/13572 17268/33082/13572 17266/33077/13572 17267/33079/13572 +f 17267/33078/13573 17263/33072/13573 17265/33075/13573 17269/33085/13573 +f 17263/33072/13574 17262/33071/13574 17264/33074/13574 17265/33075/13574 +f 17267/33079/13575 17266/33077/13575 17262/33071/13575 17263/33072/13575 +o Floor.004 +v 15.250984 0.000000 -7.929147 +v 15.250984 -0.250000 -7.929147 +v 15.250984 0.000000 -2.980418 +v 15.250984 -0.250000 -2.980418 +v 4.757103 0.000000 -7.929147 +v 4.757103 -0.250000 -7.929147 +v 4.757103 0.000000 -2.980418 +v 4.757103 -0.250000 -2.980418 +vn -0.0000 0.1250 -0.0000 +vn -0.0000 -0.0000 2.4744 +vn -5.2469 -0.0000 -0.0000 +vn -0.0000 -0.1250 -0.0000 +vn 5.2469 -0.0000 -0.0000 +vn -0.0000 -0.0000 -2.4744 +vt -2.461574 -0.746759 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt -2.461574 1.781018 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 3.456944 -0.746759 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 3.456944 1.781018 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl Carpet +f 17270/33086/13576 17274/33092/13576 17276/33096/13576 17272/33089/13576 +f 17273/33091/13577 17272/33090/13577 17276/33097/13577 17277/33099/13577 +f 17277/33100/13578 17276/33098/13578 17274/33093/13578 17275/33095/13578 +f 17275/33094/13579 17271/33088/13579 17273/33091/13579 17277/33101/13579 +f 17271/33088/13580 17270/33087/13580 17272/33090/13580 17273/33091/13580 +f 17275/33095/13581 17274/33093/13581 17270/33087/13581 17271/33088/13581 +o Middle floor +v -11.955427 0.000000 -2.878299 +v -11.955427 -0.250000 -2.878299 +v 0.100242 0.000000 -2.878299 +v 0.100242 -0.250000 -2.878299 +v -11.955427 0.000000 0.453221 +v -11.955427 -0.250000 0.453221 +v 0.100242 0.000000 0.453220 +v 0.100242 -0.250000 0.453220 +v -10.233189 -0.250000 0.453221 +v -8.510950 -0.250000 0.453220 +v -6.788712 -0.250000 0.453220 +v -5.066473 -0.250000 0.453220 +v -3.344235 -0.250000 0.453220 +v -1.621996 -0.250000 0.453220 +v -10.233189 0.000000 -2.878299 +v -8.510950 0.000000 -2.878299 +v -6.788712 0.000000 -2.878299 +v -5.066473 0.000000 -2.878299 +v -3.344235 0.000000 -2.878299 +v -1.621996 0.000000 -2.878299 +v -1.621996 0.000000 0.453220 +v -3.344235 0.000000 0.453220 +v -5.066473 0.000000 0.453220 +v -6.788712 0.000000 0.453220 +v -8.510950 0.000000 0.453220 +v -10.233189 0.000000 0.453221 +v -1.621996 -0.250000 -2.878299 +v -3.344235 -0.250000 -2.878299 +v -5.066473 -0.250000 -2.878299 +v -6.788712 -0.250000 -2.878299 +v -8.510950 -0.250000 -2.878299 +v -10.233189 -0.250000 -2.878299 +v -11.955427 -0.250000 -1.212539 +v 0.100242 0.000000 -1.212540 +v 0.100242 -0.250000 -1.212540 +v -11.955427 0.000000 -1.212539 +v -10.233189 -0.250000 -1.212539 +v -8.510950 -0.250000 -1.212539 +v -6.788712 -0.250000 -1.212539 +v -5.066473 -0.250000 -1.212539 +v -3.344235 -0.250000 -1.212539 +v -1.621996 -0.250000 -1.212540 +v -10.233189 0.000000 -1.212539 +v -8.510950 0.000000 -1.212539 +v -6.788712 0.000000 -1.212539 +v -5.066473 0.000000 -1.212539 +v -3.344235 0.000000 -1.212539 +v -1.621996 0.000000 -1.212540 +v -4.205354 -0.250000 0.453220 +v -4.205354 0.000000 -2.878299 +v -4.205354 0.000000 0.453220 +v -4.205354 -0.250000 -2.878299 +v -4.205354 0.000000 -1.212539 +v -4.205354 -0.250000 -1.212539 +v -2.483115 -0.250000 0.453220 +v -2.483115 0.000000 -2.878299 +v -2.483115 0.000000 0.453220 +v -2.483115 -0.250000 -2.878299 +v -2.483115 0.000000 -1.212539 +v -2.483115 -0.250000 -1.212539 +v -5.927592 -0.250000 0.453220 +v -5.927592 0.000000 -2.878299 +v -5.927592 0.000000 0.453220 +v -5.927592 -0.250000 -2.878299 +v -5.927592 0.000000 -1.212539 +v -5.927592 -0.250000 -1.212539 +v -7.649830 -0.250000 0.453220 +v -7.649831 0.000000 -2.878299 +v -7.649830 0.000000 0.453220 +v -7.649831 -0.250000 -2.878299 +v -7.649831 0.000000 -1.212539 +v -7.649831 -0.250000 -1.212539 +v -9.372069 -0.250000 0.453220 +v -9.372069 0.000000 -2.878299 +v -9.372069 0.000000 0.453220 +v -9.372069 -0.250000 -2.878299 +v -9.372069 0.000000 -1.212539 +v -9.372069 -0.250000 -1.212539 +v -11.094307 0.000000 0.453221 +v -11.094307 -0.250000 -2.878299 +v -11.094307 -0.250000 0.453221 +v -11.094307 0.000000 -2.878299 +v -11.094307 0.000000 -1.212539 +v -11.094307 -0.250000 -1.212539 +v -0.760877 -0.250000 0.453220 +v -0.760877 0.000000 -2.878299 +v -0.760877 0.000000 0.453220 +v -0.760877 -0.250000 -2.878299 +v -0.760877 -0.250000 -1.212540 +v -0.760877 0.000000 -1.212540 +v -11.955427 -0.250000 -0.379659 +v 0.100242 0.000000 -0.379660 +v -10.233189 -0.250000 -0.379659 +v -8.510950 -0.250000 -0.379659 +v -6.788712 -0.250000 -0.379659 +v -5.066473 -0.250000 -0.379660 +v -3.344235 -0.250000 -0.379660 +v -1.621996 -0.250000 -0.379660 +v 0.100242 -0.250000 -0.379660 +v -11.955427 0.000000 -0.379659 +v -10.233189 0.000000 -0.379659 +v -8.510950 0.000000 -0.379659 +v -6.788712 0.000000 -0.379659 +v -5.066473 0.000000 -0.379660 +v -3.344235 0.000000 -0.379660 +v -1.621996 0.000000 -0.379660 +v -4.205354 -0.250000 -0.379660 +v -4.205354 0.000000 -0.379660 +v -2.483115 -0.250000 -0.379660 +v -2.483115 0.000000 -0.379660 +v -5.927592 -0.250000 -0.379659 +v -5.927592 0.000000 -0.379659 +v -7.649831 -0.250000 -0.379659 +v -7.649831 0.000000 -0.379659 +v -9.372069 -0.250000 -0.379659 +v -9.372069 0.000000 -0.379659 +v -11.094307 -0.250000 -0.379659 +v -11.094307 0.000000 -0.379659 +v -0.760877 -0.250000 -0.379660 +v -0.760877 0.000000 -0.379660 +v 0.100242 -0.250000 -2.045419 +v -11.955427 0.000000 -2.045419 +v -10.233189 0.000000 -2.045419 +v -8.510950 0.000000 -2.045419 +v -6.788712 0.000000 -2.045419 +v -5.066473 0.000000 -2.045419 +v -3.344235 0.000000 -2.045419 +v -1.621996 0.000000 -2.045419 +v -11.955427 -0.250000 -2.045419 +v 0.100242 0.000000 -2.045419 +v -10.233189 -0.250000 -2.045419 +v -8.510950 -0.250000 -2.045419 +v -6.788712 -0.250000 -2.045419 +v -5.066473 -0.250000 -2.045419 +v -3.344235 -0.250000 -2.045419 +v -1.621996 -0.250000 -2.045419 +v -4.205354 0.000000 -2.045419 +v -4.205354 -0.250000 -2.045419 +v -2.483115 0.000000 -2.045419 +v -2.483115 -0.250000 -2.045419 +v -5.927592 0.000000 -2.045419 +v -5.927592 -0.250000 -2.045419 +v -7.649831 0.000000 -2.045419 +v -7.649831 -0.250000 -2.045419 +v -9.372069 0.000000 -2.045419 +v -9.372069 -0.250000 -2.045419 +v -11.094307 0.000000 -2.045419 +v -11.094307 -0.250000 -2.045419 +v -0.760877 0.000000 -2.045419 +v -0.760877 -0.250000 -2.045419 +vn -0.0000 0.1250 -0.0000 +vn 6.0278 -0.0000 -0.0000 +vn -0.0000 -0.0000 1.6658 +vn -0.0000 -0.1250 -0.0000 +vn -0.0000 -0.0000 -1.6658 +vn -6.0278 -0.0000 -0.0000 +vt 0.001389 1.080529 +vt 0.144907 0.914663 +vt 0.299537 1.092548 +vt 0.001389 0.929567 +vt 0.196759 0.904087 +vt 0.144907 1.089183 +vt -0.003241 1.089183 +vt 0.499537 1.092548 +vt 0.063426 0.689183 +vt -0.003241 0.904087 +vt -0.003241 0.914663 +vt 0.113426 0.689183 +vt 0.150463 1.089183 +vt 0.299537 0.920913 +vt 0.201389 1.080529 +vt 0.150463 0.909375 +vt 0.196759 0.904087 +vt 0.201389 0.929567 +vt 0.499537 0.920913 +vt 0.063426 0.637740 +vt 0.006944 0.909375 +vt 0.113426 0.637740 +vt 0.006944 1.089183 +vt -0.003241 0.552644 +vt 0.006944 0.909375 +vt 0.206944 0.909375 +vt 0.196759 0.552644 +vt -0.003241 0.552644 +vt 0.006944 0.909375 +vt 0.150463 1.089183 +vt 0.196759 0.552644 +vt -0.003241 0.552644 +vt 0.156944 0.909375 +vt 0.201389 0.909375 +vt 0.196759 0.552644 +vt -0.003241 0.552644 +vt 0.006944 0.909375 +vt 0.206944 0.909375 +vt 0.196759 0.552644 +vt -0.003241 0.552644 +vt 0.006944 0.909375 +vt 0.156944 1.089183 +vt 0.196759 0.552644 +vt -0.003241 0.552644 +vt 0.156944 0.909375 +vt 0.006944 1.089183 +vt 0.190278 0.552644 +vt -0.003241 0.552644 +vt 0.299537 1.089183 +vt 0.504167 1.089183 +vt 0.299537 1.092548 +vt 0.499537 1.092548 +vt 0.144907 1.089183 +vt 0.001389 0.914663 +vt 0.299537 1.092548 +vt 0.499537 1.092548 +vt 0.001389 1.089183 +vt 0.356019 1.089183 +vt 0.299537 1.092548 +vt 0.499537 1.092548 +vt 0.001389 1.086779 +vt 0.206944 1.086779 +vt 0.299537 1.092548 +vt 0.499537 1.092548 +vt 0.356019 0.914663 +vt 0.299537 0.909375 +vt 0.299537 1.092548 +vt 0.499537 1.092548 +vt 0.299537 1.083894 +vt 0.356019 1.089183 +vt 0.299537 1.092548 +vt 0.499537 1.092548 +vt 0.156944 1.089183 +vt 0.499537 0.920913 +vt 0.006944 0.909375 +vt 0.299537 0.920913 +vt 0.006944 1.089183 +vt 0.499537 0.920913 +vt 0.156944 0.909375 +vt 0.299537 0.920913 +vt 0.006944 1.089183 +vt 0.499537 0.920913 +vt 0.299537 0.920913 +vt 0.206944 1.089183 +vt 0.156944 1.089183 +vt 0.499537 0.920913 +vt 0.299537 0.920913 +vt 0.201389 1.089183 +vt 0.006944 1.089183 +vt 0.499537 0.920913 +vt 0.299537 0.920913 +vt 0.150463 0.909375 +vt 0.006944 1.089183 +vt 0.499537 0.920913 +vt 0.299537 0.920913 +vt 0.206944 1.089183 +vt 0.299537 0.909375 +vt -0.003241 0.904087 +vt 0.356019 0.914663 +vt 0.196759 0.904087 +vt 0.356019 1.089183 +vt -0.003241 0.904087 +vt 0.196759 0.904087 +vt 0.299537 1.083894 +vt 0.001389 0.912260 +vt -0.003241 0.904087 +vt 0.196759 0.904087 +vt 0.206944 0.912260 +vt 0.001389 0.914663 +vt -0.003241 0.904087 +vt 0.196759 0.904087 +vt 0.356019 0.914663 +vt 0.144907 0.914663 +vt -0.003241 0.904087 +vt 0.196759 0.904087 +vt 0.001389 1.089183 +vt 0.299537 0.914663 +vt -0.003241 0.904087 +vt -0.003241 0.552644 +vt 0.504167 0.914663 +vt 0.201389 1.080529 +vt 0.196759 0.904087 +vt 0.196759 0.552644 +vt 0.201389 0.929567 +vt 0.499537 0.920913 +vt 0.063426 0.663702 +vt 0.499537 1.092548 +vt -0.003241 0.904087 +vt 0.113426 0.663702 +vt -0.003241 0.552644 +vt 0.201389 0.929567 +vt 0.299537 0.920913 +vt 0.299537 1.092548 +vt 0.201389 1.080529 +vt -0.003241 0.904087 +vt 0.196759 0.904087 +vt 0.196759 0.552644 +vt -0.003241 0.552644 +vt -0.003241 0.904087 +vt 0.196759 0.904087 +vt 0.196759 0.552644 +vt -0.003241 0.552644 +vt -0.003241 0.904087 +vt 0.196759 0.552644 +vt 0.196759 0.904087 +vt -0.003241 0.904087 +vt 0.196759 0.552644 +vt -0.003241 0.552644 +vt -0.003241 0.904087 +vt 0.196759 0.904087 +vt 0.196759 0.552644 +vt -0.003241 0.552644 +vt -0.003241 0.904087 +vt 0.196759 0.904087 +vt 0.196759 0.552644 +vt -0.003241 0.552644 +vt 0.499537 0.920913 +vt 0.299537 0.920913 +vt 0.299537 1.092548 +vt 0.499537 1.092548 +vt 0.499537 0.920913 +vt 0.299537 0.920913 +vt 0.299537 1.092548 +vt 0.499537 1.092548 +vt 0.499537 0.920913 +vt 0.299537 0.920913 +vt 0.299537 1.092548 +vt 0.499537 1.092548 +vt 0.499537 0.920913 +vt 0.299537 0.920913 +vt 0.299537 1.092548 +vt 0.499537 1.092548 +vt 0.499537 0.920913 +vt 0.299537 0.920913 +vt 0.299537 1.092548 +vt 0.499537 1.092548 +vt 0.499537 0.920913 +vt 0.299537 0.920913 +vt 0.299537 1.092548 +vt 0.499537 1.092548 +vt 0.201389 0.909375 +vt 0.350463 1.089183 +vt -0.003241 0.552644 +vt 0.196759 0.552644 +vt 0.144907 0.914663 +vt 0.001389 1.086779 +vt 0.499537 1.092548 +vt 0.299537 1.092548 +vt 0.201389 1.089183 +vt 0.299537 0.920913 +vt 0.499537 0.920913 +vt 0.350463 0.909375 +vt 0.144907 1.089183 +vt 0.196759 0.904087 +vt -0.003241 0.904087 +vt 0.001389 0.912260 +vt 0.299537 0.920913 +vt 0.499537 0.920913 +vt 0.499537 1.092548 +vt 0.299537 1.092548 +vt 0.196759 0.904087 +vt -0.003241 0.552644 +vt 0.196759 0.552644 +vt 0.201389 0.909375 +vt 0.201389 1.089183 +vt -0.003241 0.552644 +vt 0.196759 0.552644 +vt 0.504167 1.083894 +vt 0.504167 0.909375 +vt 0.499537 1.092548 +vt 0.299537 1.092548 +vt 0.201389 1.089183 +vt 0.299537 0.920913 +vt 0.499537 0.920913 +vt 0.201389 0.909375 +vt 0.504167 0.909375 +vt 0.196759 0.904087 +vt -0.003241 0.904087 +vt 0.504167 1.083894 +vt 0.299537 0.920913 +vt 0.499537 0.920913 +vt 0.499537 1.092548 +vt 0.299537 1.092548 +vt 0.196759 0.904087 +vt -0.003241 0.904087 +vt -0.003241 0.552644 +vt 0.196759 0.552644 +vt 0.356019 0.909375 +vt 0.006944 0.909375 +vt -0.003241 0.552644 +vt 0.196759 0.552644 +vt 0.206944 1.086779 +vt 0.144907 1.089183 +vt 0.499537 1.092548 +vt 0.299537 1.092548 +vt 0.356019 1.089183 +vt 0.299537 0.920913 +vt 0.499537 0.920913 +vt 0.006944 1.089183 +vt 0.206944 0.912260 +vt 0.196759 0.904087 +vt -0.003241 0.904087 +vt 0.144907 0.914663 +vt 0.299537 0.920913 +vt 0.499537 0.920913 +vt 0.499537 1.092548 +vt 0.299537 1.092548 +vt 0.196759 0.904087 +vt -0.003241 0.904087 +vt -0.003241 0.552644 +vt 0.196759 0.552644 +vt 0.201389 0.909375 +vt 0.006944 0.909375 +vt -0.003241 0.552644 +vt 0.196759 0.552644 +vt 0.206944 1.089183 +vt 0.206944 0.914663 +vt 0.499537 1.092548 +vt 0.299537 1.092548 +vt 0.201389 1.089183 +vt 0.299537 0.920913 +vt 0.499537 0.920913 +vt 0.006944 1.089183 +vt 0.206944 0.914663 +vt 0.196759 0.904087 +vt -0.003241 0.904087 +vt 0.206944 1.089183 +vt 0.299537 0.920913 +vt 0.499537 0.920913 +vt 0.499537 1.092548 +vt 0.299537 1.092548 +vt 0.196759 0.904087 +vt -0.003241 0.552644 +vt -0.003241 0.904087 +vt 0.201389 0.909375 +vt 0.343981 1.089183 +vt -0.003241 0.552644 +vt 0.196759 0.552644 +vt 0.356019 1.089183 +vt 0.299537 1.089183 +vt 0.499537 1.092548 +vt 0.299537 1.092548 +vt 0.201389 1.089183 +vt 0.299537 0.920913 +vt 0.499537 0.920913 +vt 0.343981 0.909375 +vt 0.356019 0.914663 +vt 0.196759 0.904087 +vt 0.196759 0.552644 +vt 0.299537 0.914663 +vt 0.299537 0.920913 +vt 0.499537 0.920913 +vt 0.499537 1.092548 +vt 0.299537 1.092548 +vt 0.196759 0.904087 +vt -0.003241 0.904087 +vt -0.003241 0.552644 +vt 0.196759 0.552644 +vt 0.350463 1.089183 +vt 0.299537 0.920913 +vt 0.499537 0.920913 +vt 0.006944 1.089183 +vt 0.504167 0.914663 +vt 0.196759 0.904087 +vt -0.003241 0.904087 +vt 0.356019 1.089183 +vt 0.350463 0.909375 +vt 0.006944 0.909375 +vt 0.196759 0.549279 +vt 0.196759 0.552644 +vt 0.504167 1.089183 +vt 0.356019 0.914663 +vt 0.499537 1.092548 +vt 0.299537 1.092548 +vt 0.299537 0.920913 +vt 0.499537 0.920913 +vt 0.499537 1.092548 +vt 0.299537 1.092548 +vt 0.196759 0.904087 +vt -0.003241 0.904087 +vt -0.003241 0.552644 +vt 0.196759 0.552644 +vt 0.356019 0.909375 +vt 0.201389 1.089183 +vt -0.003241 0.552644 +vt 0.196759 0.552644 +vt 0.206944 1.089183 +vt 0.144907 1.089183 +vt 0.499537 1.092548 +vt 0.299537 1.092548 +vt 0.299537 0.920913 +vt 0.356019 1.089183 +vt 0.201389 0.909375 +vt 0.499537 0.920913 +vt 0.196759 0.904087 +vt 0.206944 0.914663 +vt 0.144907 0.914663 +vt -0.003241 0.904087 +vt 0.196759 0.904087 +vt -0.003241 0.904087 +vt -0.003241 0.552644 +vt 0.196759 0.552644 +vt 0.299537 0.920913 +vt 0.499537 0.920913 +vt 0.499537 1.092548 +vt 0.299537 1.092548 +vt 0.001389 1.080529 +vt 0.196759 0.552644 +vt -0.003241 0.904087 +vt 0.001389 0.929567 +vt 0.499537 1.092548 +vt 0.063426 0.649760 +vt 0.499537 0.920913 +vt -0.003241 0.552644 +vt 0.196759 0.552644 +vt 0.196759 0.904087 +vt -0.003241 0.904087 +vt -0.003241 0.552644 +vt 0.196759 0.552644 +vt 0.196759 0.904087 +vt -0.003241 0.904087 +vt -0.003241 0.552644 +vt 0.196759 0.552644 +vt 0.196759 0.904087 +vt -0.003241 0.904087 +vt -0.003241 0.552644 +vt 0.196759 0.904087 +vt -0.003241 0.904087 +vt -0.003241 0.552644 +vt 0.196759 0.552644 +vt 0.196759 0.904087 +vt -0.003241 0.904087 +vt -0.003241 0.552644 +vt 0.196759 0.552644 +vt 0.196759 0.904087 +vt -0.003241 0.904087 +vt -0.003241 0.552644 +vt -0.003241 0.904087 +vt 0.113426 0.649760 +vt 0.001389 0.929567 +vt 0.299537 1.092548 +vt 0.299537 0.920913 +vt 0.001389 1.080529 +vt 0.499537 1.092548 +vt 0.299537 1.092548 +vt 0.299537 0.920913 +vt 0.499537 0.920913 +vt 0.499537 1.092548 +vt 0.299537 1.092548 +vt 0.299537 0.920913 +vt 0.499537 0.920913 +vt 0.499537 1.092548 +vt 0.299537 1.092548 +vt 0.299537 0.920913 +vt 0.499537 0.920913 +vt 0.499537 1.092548 +vt 0.299537 1.092548 +vt 0.299537 0.920913 +vt 0.499537 0.920913 +vt 0.499537 1.092548 +vt 0.299537 1.092548 +vt 0.299537 0.920913 +vt 0.499537 0.920913 +vt 0.499537 1.092548 +vt 0.299537 1.092548 +vt 0.299537 0.920913 +vt 0.499537 0.920913 +vt 0.196759 0.552644 +vt -0.003241 0.904087 +vt 0.196759 0.904087 +vt 0.299537 1.092548 +vt 0.499537 1.092548 +vt 0.499537 0.920913 +vt 0.299537 0.920913 +vt 0.196759 0.552644 +vt -0.003241 0.552644 +vt -0.003241 0.904087 +vt 0.196759 0.904087 +vt 0.299537 1.092548 +vt 0.499537 1.092548 +vt 0.499537 0.920913 +vt 0.299537 0.920913 +vt 0.196759 0.552644 +vt -0.003241 0.552644 +vt -0.003241 0.904087 +vt 0.196759 0.904087 +vt 0.299537 1.092548 +vt 0.499537 1.092548 +vt 0.499537 0.920913 +vt 0.299537 0.920913 +vt 0.196759 0.552644 +vt -0.003241 0.552644 +vt -0.003241 0.904087 +vt 0.196759 0.904087 +vt 0.299537 1.092548 +vt 0.499537 1.092548 +vt 0.499537 0.920913 +vt 0.299537 0.920913 +vt 0.196759 0.552644 +vt -0.003241 0.552644 +vt -0.003241 0.904087 +vt 0.196759 0.904087 +vt 0.299537 1.092548 +vt 0.499537 1.092548 +vt 0.499537 0.920913 +vt 0.299537 0.920913 +vt 0.196759 0.552644 +vt -0.003241 0.552644 +vt -0.003241 0.549279 +vt 0.196759 0.904087 +vt 0.299537 1.092548 +vt 0.499537 1.092548 +vt 0.499537 0.920913 +vt 0.299537 0.920913 +vt 0.196759 0.552644 +vt -0.003241 0.552644 +vt -0.003241 0.904087 +vt 0.196759 0.904087 +vt 0.299537 1.092548 +vt 0.499537 1.092548 +vt 0.499537 0.920913 +vt 0.299537 0.920913 +vt -0.003241 0.552644 +vt 0.113426 0.675240 +vt -0.003241 0.904087 +vt 0.201389 1.080529 +vt 0.299537 1.092548 +vt 0.299537 0.920913 +vt 0.001389 1.080529 +vt 0.499537 1.092548 +vt 0.299537 1.092548 +vt 0.299537 0.920913 +vt 0.499537 0.920913 +vt 0.499537 1.092548 +vt 0.299537 1.092548 +vt 0.299537 0.920913 +vt 0.499537 0.920913 +vt 0.499537 1.092548 +vt 0.299537 1.092548 +vt 0.299537 0.920913 +vt 0.499537 0.920913 +vt 0.499537 1.092548 +vt 0.299537 1.092548 +vt 0.299537 0.920913 +vt 0.499537 0.920913 +vt 0.499537 1.092548 +vt 0.299537 1.092548 +vt 0.299537 0.920913 +vt 0.499537 0.920913 +vt 0.499537 1.092548 +vt 0.299537 1.092548 +vt 0.299537 0.920913 +vt 0.499537 0.920913 +vt 0.201389 0.929567 +vt 0.196759 0.552644 +vt 0.196759 0.904087 +vt 0.001389 0.929567 +vt 0.499537 1.092548 +vt 0.499537 0.920913 +vt 0.063426 0.675240 +vt -0.003241 0.552644 +vt 0.196759 0.904087 +vt -0.003241 0.904087 +vt -0.003241 0.552644 +vt 0.196759 0.552644 +vt 0.196759 0.904087 +vt -0.003241 0.904087 +vt -0.003241 0.552644 +vt 0.196759 0.904087 +vt 0.196759 0.552644 +vt -0.003241 0.552644 +vt 0.196759 0.552644 +vt 0.196759 0.904087 +vt -0.003241 0.904087 +vt -0.003241 0.552644 +vt 0.196759 0.552644 +vt 0.196759 0.904087 +vt -0.003241 0.904087 +vt -0.003241 0.552644 +vt 0.196759 0.552644 +vt 0.196759 0.904087 +vt -0.003241 0.904087 +vt 0.299537 1.092548 +vt 0.499537 1.092548 +vt 0.499537 0.920913 +vt 0.299537 0.920913 +vt 0.196759 0.552644 +vt -0.003241 0.552644 +vt -0.003241 0.904087 +vt 0.196759 0.904087 +vt 0.299537 1.092548 +vt 0.499537 1.092548 +vt 0.499537 0.920913 +vt 0.299537 0.920913 +vt 0.196759 0.552644 +vt -0.003241 0.552644 +vt -0.003241 0.904087 +vt 0.196759 0.904087 +vt 0.299537 1.092548 +vt 0.499537 1.092548 +vt 0.499537 0.920913 +vt 0.299537 0.920913 +vt 0.196759 0.552644 +vt -0.003241 0.552644 +vt -0.003241 0.904087 +vt 0.196759 0.904087 +vt 0.299537 1.092548 +vt 0.499537 1.092548 +vt 0.499537 0.920913 +vt 0.299537 0.920913 +vt 0.196759 0.552644 +vt -0.003241 0.904087 +vt -0.003241 0.552644 +vt 0.299537 1.092548 +vt 0.499537 1.092548 +vt 0.499537 0.920913 +vt 0.299537 0.920913 +vt 0.196759 0.552644 +vt -0.003241 0.904087 +vt 0.196759 0.904087 +vt 0.299537 1.092548 +vt 0.499537 1.092548 +vt 0.499537 0.920913 +vt 0.299537 0.920913 +vt 0.196759 0.552644 +vt -0.003241 0.552644 +vt -0.003241 0.904087 +vt 0.196759 0.904087 +vt 0.299537 1.092548 +vt 0.499537 1.092548 +vt 0.499537 0.920913 +vt 0.299537 0.920913 +vt 0.196759 0.552644 +vt -0.003241 0.552644 +vt -0.003241 0.904087 +vt 0.196759 0.904087 +s 0 +usemtl Wood +f 17397/33560/13582 17364/33432/13582 17284/33120/13582 17369/33452/13582 +f 17376/33480/13583 17369/33453/13583 17284/33121/13583 17285/33123/13583 +f 17358/33408/13584 17356/33400/13584 17282/33114/13584 17283/33117/13584 +f 17427/33674/13585 17365/33436/13585 17281/33111/13585 17398/33564/13585 +f 17365/33437/13586 17363/33428/13586 17280/33108/13586 17281/33112/13586 +f 17406/33595/13587 17399/33567/13587 17278/33102/13587 17279/33105/13587 +f 17357/33404/13586 17359/33412/13586 17292/33150/13586 17309/33218/13586 +f 17353/33388/13586 17351/33380/13586 17293/33154/13586 17308/33214/13586 +f 17347/33365/13586 17345/33357/13586 17294/33158/13586 17307/33210/13586 +f 17341/33341/13586 17339/33333/13586 17295/33162/13586 17306/33206/13586 +f 17329/33294/13586 17327/33286/13586 17296/33166/13586 17305/33202/13586 +f 17335/33317/13586 17333/33309/13586 17297/33170/13586 17304/33198/13586 +f 17425/33666/13585 17357/33405/13585 17309/33219/13585 17408/33602/13585 +f 17423/33659/13585 17353/33389/13585 17308/33215/13585 17409/33605/13585 +f 17421/33652/13585 17347/33366/13585 17307/33211/13585 17410/33609/13585 +f 17419/33644/13585 17341/33342/13585 17306/33207/13585 17411/33612/13585 +f 17415/33628/13585 17329/33295/13585 17305/33203/13585 17412/33616/13585 +f 17417/33636/13585 17335/33318/13585 17304/33199/13585 17413/33620/13585 +f 17362/33424/13584 17364/33433/13584 17298/33174/13584 17291/33146/13584 +f 17332/33305/13584 17334/33313/13584 17299/33178/13584 17290/33142/13584 +f 17326/33282/13584 17328/33290/13584 17300/33182/13584 17289/33138/13584 +f 17338/33329/13584 17340/33337/13584 17301/33186/13584 17288/33134/13584 +f 17344/33353/13584 17346/33361/13584 17302/33190/13584 17287/33130/13584 +f 17350/33376/13584 17352/33384/13584 17303/33194/13584 17286/33126/13584 +f 17395/33552/13582 17356/33401/13582 17303/33195/13582 17378/33485/13582 +f 17393/33544/13582 17352/33385/13582 17302/33191/13582 17379/33489/13582 +f 17391/33536/13582 17346/33362/13582 17301/33187/13582 17380/33493/13582 +f 17389/33528/13582 17340/33338/13582 17300/33183/13582 17381/33497/13582 +f 17385/33512/13582 17328/33291/13582 17299/33179/13582 17382/33501/13582 +f 17387/33520/13582 17334/33314/13582 17298/33175/13582 17383/33505/13582 +f 17416/33632/13582 17336/33321/13582 17325/33278/13582 17405/33591/13582 +f 17414/33624/13582 17330/33298/13582 17324/33274/13582 17404/33587/13582 +f 17418/33640/13582 17342/33345/13582 17323/33270/13582 17403/33583/13582 +f 17420/33648/13582 17348/33369/13582 17322/33266/13582 17402/33579/13582 +f 17422/33655/13582 17354/33392/13582 17321/33262/13582 17401/33575/13582 +f 17424/33662/13582 17360/33416/13582 17320/33258/13582 17400/33571/13582 +f 17386/33516/13585 17337/33325/13585 17319/33254/13585 17375/33474/13585 +f 17384/33509/13585 17331/33302/13585 17318/33250/13585 17374/33470/13585 +f 17388/33524/13585 17343/33349/13585 17317/33247/13585 17373/33467/13585 +f 17390/33532/13585 17349/33373/13585 17316/33244/13585 17372/33463/13585 +f 17392/33540/13585 17355/33396/13585 17315/33240/13585 17371/33459/13585 +f 17394/33548/13585 17361/33420/13585 17314/33236/13585 17370/33455/13585 +f 17368/33448/13587 17377/33481/13587 17313/33232/13587 17310/33222/13587 +f 17396/33556/13585 17366/33440/13585 17312/33229/13585 17376/33478/13585 +f 17398/33565/13583 17407/33601/13583 17311/33227/13583 17312/33230/13583 +f 17426/33670/13582 17367/33444/13582 17311/33226/13582 17407/33599/13582 +f 17373/33469/13585 17317/33249/13585 17331/33304/13585 17384/33511/13585 +f 17403/33584/13582 17323/33271/13582 17330/33299/13582 17414/33625/13582 +f 17381/33498/13582 17300/33184/13582 17328/33292/13582 17385/33513/13582 +f 17290/33143/13584 17299/33180/13584 17328/33293/13584 17326/33283/13584 +f 17411/33613/13585 17306/33208/13585 17329/33296/13585 17415/33629/13585 +f 17306/33209/13586 17295/33163/13586 17327/33287/13586 17329/33297/13586 +f 17374/33471/13585 17318/33251/13585 17337/33326/13585 17386/33517/13585 +f 17404/33588/13582 17324/33275/13582 17336/33322/13582 17416/33633/13582 +f 17382/33502/13582 17299/33181/13582 17334/33315/13582 17387/33521/13582 +f 17291/33147/13584 17298/33176/13584 17334/33316/13584 17332/33306/13584 +f 17412/33617/13585 17305/33204/13585 17335/33319/13585 17417/33637/13585 +f 17305/33205/13586 17296/33167/13586 17333/33310/13586 17335/33320/13586 +f 17372/33464/13585 17316/33246/13585 17343/33350/13585 17388/33525/13585 +f 17402/33580/13582 17322/33267/13582 17342/33346/13582 17418/33641/13582 +f 17380/33494/13582 17301/33188/13582 17340/33339/13582 17389/33529/13582 +f 17289/33139/13584 17300/33185/13584 17340/33340/13584 17338/33330/13584 +f 17410/33611/13585 17307/33212/13585 17341/33343/13585 17419/33645/13585 +f 17307/33213/13586 17294/33159/13586 17339/33334/13586 17341/33344/13586 +f 17371/33460/13585 17315/33241/13585 17349/33375/13585 17390/33533/13585 +f 17401/33576/13582 17321/33263/13582 17348/33370/13582 17420/33649/13582 +f 17379/33490/13582 17302/33192/13582 17346/33363/13582 17391/33537/13582 +f 17288/33135/13584 17301/33189/13584 17346/33364/13584 17344/33354/13584 +f 17409/33606/13585 17308/33216/13585 17347/33367/13585 17421/33654/13585 +f 17308/33217/13586 17293/33155/13586 17345/33358/13586 17347/33368/13586 +f 17370/33456/13585 17314/33237/13585 17355/33397/13585 17392/33541/13585 +f 17400/33572/13582 17320/33259/13582 17354/33393/13582 17422/33656/13582 +f 17378/33486/13582 17303/33196/13582 17352/33386/13582 17393/33545/13582 +f 17287/33131/13584 17302/33193/13584 17352/33387/13584 17350/33377/13584 +f 17408/33604/13585 17309/33220/13585 17353/33390/13585 17423/33661/13585 +f 17309/33221/13586 17292/33151/13586 17351/33381/13586 17353/33391/13586 +f 17368/33449/13585 17310/33223/13585 17361/33421/13585 17394/33549/13585 +f 17399/33568/13582 17313/33233/13582 17360/33417/13582 17424/33663/13582 +f 17377/33482/13582 17282/33115/13582 17356/33402/13582 17395/33553/13582 +f 17406/33596/13585 17279/33106/13585 17357/33406/13585 17425/33667/13585 +f 17279/33107/13586 17278/33103/13586 17359/33413/13586 17357/33407/13586 +f 17286/33127/13584 17303/33197/13584 17356/33403/13584 17358/33409/13584 +f 17405/33592/13582 17325/33279/13582 17367/33445/13582 17426/33671/13582 +f 17375/33475/13585 17319/33255/13585 17366/33441/13585 17396/33557/13585 +f 17285/33124/13584 17284/33122/13584 17364/33434/13584 17362/33425/13584 +f 17304/33200/13586 17297/33171/13586 17363/33429/13586 17365/33438/13586 +f 17413/33621/13585 17304/33201/13585 17365/33439/13585 17427/33675/13585 +f 17383/33506/13582 17298/33177/13582 17364/33435/13582 17397/33561/13582 +f 17325/33280/13582 17383/33507/13582 17397/33562/13582 17367/33446/13582 +f 17291/33148/13585 17375/33476/13585 17396/33558/13585 17362/33426/13585 +f 17313/33234/13582 17377/33483/13582 17395/33554/13582 17360/33418/13582 +f 17283/33118/13585 17368/33450/13585 17394/33550/13585 17358/33410/13585 +f 17320/33260/13582 17378/33487/13582 17393/33546/13582 17354/33394/13582 +f 17286/33128/13585 17370/33457/13585 17392/33542/13585 17350/33378/13585 +f 17321/33264/13582 17379/33491/13582 17391/33538/13582 17348/33371/13582 +f 17287/33132/13585 17371/33461/13585 17390/33534/13585 17344/33355/13585 +f 17322/33268/13582 17380/33495/13582 17389/33530/13582 17342/33347/13582 +f 17288/33136/13585 17372/33465/13585 17388/33526/13585 17338/33331/13585 +f 17324/33276/13582 17382/33503/13582 17387/33522/13582 17336/33323/13582 +f 17290/33144/13585 17374/33472/13585 17386/33518/13585 17332/33307/13585 +f 17323/33272/13582 17381/33499/13582 17385/33514/13582 17330/33300/13582 +f 17289/33140/13585 17373/33468/13585 17384/33510/13585 17326/33284/13585 +f 17362/33427/13585 17396/33559/13585 17376/33479/13585 17285/33125/13585 +f 17283/33119/13587 17282/33116/13587 17377/33484/13587 17368/33451/13587 +f 17358/33411/13585 17394/33551/13585 17370/33458/13585 17286/33129/13585 +f 17350/33379/13585 17392/33543/13585 17371/33462/13585 17287/33133/13585 +f 17344/33356/13585 17390/33535/13585 17372/33466/13585 17288/33137/13585 +f 17338/33332/13585 17388/33527/13585 17373/33469/13585 17289/33141/13585 +f 17326/33285/13585 17384/33511/13585 17374/33473/13585 17290/33145/13585 +f 17332/33308/13585 17386/33519/13585 17375/33477/13585 17291/33149/13585 +f 17336/33324/13582 17387/33523/13582 17383/33508/13582 17325/33281/13582 +f 17330/33301/13582 17385/33515/13582 17382/33504/13582 17324/33277/13582 +f 17342/33348/13582 17389/33531/13582 17381/33500/13582 17323/33273/13582 +f 17348/33372/13582 17391/33539/13582 17380/33496/13582 17322/33269/13582 +f 17354/33395/13582 17393/33547/13582 17379/33492/13582 17321/33265/13582 +f 17360/33419/13582 17395/33555/13582 17378/33488/13582 17320/33261/13582 +f 17312/33230/13583 17311/33227/13583 17369/33453/13583 17376/33480/13583 +f 17367/33447/13582 17397/33563/13582 17369/33454/13582 17311/33228/13582 +f 17319/33256/13585 17413/33622/13585 17427/33676/13585 17366/33442/13585 +f 17297/33172/13582 17405/33593/13582 17426/33672/13582 17363/33430/13582 +f 17310/33224/13585 17406/33597/13585 17425/33668/13585 17361/33422/13585 +f 17278/33104/13582 17399/33569/13582 17424/33664/13582 17359/33414/13582 +f 17314/33238/13585 17408/33603/13585 17423/33660/13585 17355/33398/13585 +f 17292/33152/13582 17400/33573/13582 17422/33657/13582 17351/33382/13582 +f 17315/33242/13585 17409/33607/13585 17421/33653/13585 17349/33374/13585 +f 17293/33156/13582 17401/33577/13582 17420/33650/13582 17345/33359/13582 +f 17316/33245/13585 17410/33610/13585 17419/33646/13585 17343/33351/13585 +f 17294/33160/13582 17402/33581/13582 17418/33642/13582 17339/33335/13582 +f 17318/33252/13585 17412/33618/13585 17417/33638/13585 17337/33327/13585 +f 17296/33168/13582 17404/33589/13582 17416/33634/13582 17333/33311/13582 +f 17317/33248/13585 17411/33614/13585 17415/33630/13585 17331/33303/13585 +f 17295/33164/13582 17403/33585/13582 17414/33626/13582 17327/33288/13582 +f 17363/33431/13582 17426/33673/13582 17407/33600/13582 17280/33109/13582 +f 17281/33113/13583 17280/33110/13583 17407/33601/13583 17398/33565/13583 +f 17359/33415/13582 17424/33665/13582 17400/33574/13582 17292/33153/13582 +f 17351/33383/13582 17422/33658/13582 17401/33578/13582 17293/33157/13582 +f 17345/33360/13582 17420/33651/13582 17402/33582/13582 17294/33161/13582 +f 17339/33336/13582 17418/33643/13582 17403/33586/13582 17295/33165/13582 +f 17327/33289/13582 17414/33627/13582 17404/33590/13582 17296/33169/13582 +f 17333/33312/13582 17416/33635/13582 17405/33594/13582 17297/33173/13582 +f 17337/33328/13585 17417/33639/13585 17413/33623/13585 17319/33257/13585 +f 17331/33304/13585 17415/33631/13585 17412/33619/13585 17318/33253/13585 +f 17343/33352/13585 17419/33647/13585 17411/33615/13585 17317/33249/13585 +f 17349/33375/13585 17421/33654/13585 17410/33611/13585 17316/33246/13585 +f 17355/33399/13585 17423/33661/13585 17409/33608/13585 17315/33243/13585 +f 17361/33423/13585 17425/33669/13585 17408/33604/13585 17314/33239/13585 +f 17310/33225/13587 17313/33235/13587 17399/33570/13587 17406/33598/13587 +f 17366/33443/13585 17427/33677/13585 17398/33566/13585 17312/33231/13585 +o Middle floor.001 +v -18.637897 -0.005000 -7.614707 +v -18.637897 -0.255000 -7.614707 +v 17.205841 -0.005000 -7.614709 +v 17.205841 -0.255000 -7.614709 +v -18.637897 -0.005000 8.369568 +v -18.637897 -0.255000 8.369568 +v 17.205841 -0.005000 8.369566 +v 17.205841 -0.255000 8.369566 +v -13.517364 -0.255000 8.369567 +v -8.396830 -0.255000 8.369567 +v -3.276295 -0.255000 8.369566 +v 1.844239 -0.255000 8.369566 +v 6.964774 -0.255000 8.369566 +v 12.085307 -0.255000 8.369566 +v -13.517364 -0.005000 -7.614708 +v -8.396830 -0.005000 -7.614708 +v -3.276295 -0.005000 -7.614708 +v 1.844239 -0.005000 -7.614708 +v 6.964773 -0.005000 -7.614709 +v 12.085307 -0.005000 -7.614709 +v 12.085307 -0.005000 8.369566 +v 6.964774 -0.005000 8.369566 +v 1.844239 -0.005000 8.369566 +v -3.276295 -0.005000 8.369566 +v -8.396830 -0.005000 8.369567 +v -13.517364 -0.005000 8.369567 +v 12.085307 -0.255000 -7.614709 +v 6.964773 -0.255000 -7.614709 +v 1.844239 -0.255000 -7.614708 +v -3.276295 -0.255000 -7.614708 +v -8.396830 -0.255000 -7.614708 +v -13.517364 -0.255000 -7.614708 +v -18.637897 -0.255000 0.377430 +v 17.205841 -0.005000 0.377428 +v 17.205841 -0.255000 0.377428 +v -18.637897 -0.005000 0.377430 +v -13.517364 -0.255000 0.377430 +v -8.396830 -0.255000 0.377429 +v -3.276295 -0.255000 0.377429 +v 1.844239 -0.255000 0.377429 +v 6.964773 -0.255000 0.377429 +v 12.085307 -0.255000 0.377428 +v 4.404506 -0.255000 8.369566 +v 4.404505 -0.005000 -7.614708 +v 4.404506 -0.005000 8.369566 +v 4.404505 -0.255000 -7.614708 +v 4.404506 -0.255000 0.377429 +v 9.525041 -0.255000 8.369566 +v 9.525041 -0.005000 -7.614709 +v 9.525041 -0.005000 8.369566 +v 9.525041 -0.255000 -7.614709 +v 9.525041 -0.255000 0.377429 +v -0.716028 -0.255000 8.369566 +v -0.716029 -0.005000 -7.614708 +v -0.716028 -0.005000 8.369566 +v -0.716029 -0.255000 -7.614708 +v -0.716028 -0.255000 0.377429 +v -5.836562 -0.255000 8.369566 +v -5.836563 -0.005000 -7.614708 +v -5.836562 -0.005000 8.369566 +v -5.836563 -0.255000 -7.614708 +v -5.836562 -0.255000 0.377429 +v -10.957097 -0.255000 8.369567 +v -10.957097 -0.005000 -7.614708 +v -10.957097 -0.005000 8.369567 +v -10.957097 -0.255000 -7.614708 +v -10.957097 -0.255000 0.377429 +v -16.077631 -0.005000 8.369567 +v -16.077631 -0.255000 -7.614708 +v -16.077631 -0.255000 8.369567 +v -16.077631 -0.005000 -7.614708 +v -16.077631 -0.255000 0.377430 +v 14.645575 -0.255000 8.369566 +v 14.645575 -0.005000 -7.614709 +v 14.645575 -0.005000 8.369566 +v 14.645575 -0.255000 -7.614709 +v 14.645575 -0.255000 0.377428 +v -18.637897 -0.255000 4.373498 +v 17.205841 -0.005000 4.373497 +v -13.517364 -0.255000 4.373498 +v -8.396830 -0.255000 4.373498 +v -3.276295 -0.255000 4.373498 +v 1.844239 -0.255000 4.373498 +v 6.964773 -0.255000 4.373497 +v 12.085307 -0.255000 4.373497 +v 17.205841 -0.255000 4.373497 +v -18.637897 -0.005000 4.373498 +v 4.404506 -0.255000 4.373497 +v 9.525041 -0.255000 4.373497 +v -0.716028 -0.255000 4.373498 +v -5.836562 -0.255000 4.373498 +v -10.957097 -0.255000 4.373498 +v -16.077631 -0.255000 4.373498 +v 14.645575 -0.255000 4.373497 +v 17.205841 -0.255000 -3.618640 +v -18.637897 -0.005000 -3.618639 +v -18.637897 -0.255000 -3.618639 +v 17.205841 -0.005000 -3.618640 +v -13.517364 -0.255000 -3.618639 +v -8.396830 -0.255000 -3.618639 +v -3.276295 -0.255000 -3.618640 +v 1.844239 -0.255000 -3.618640 +v 6.964773 -0.255000 -3.618640 +v 12.085307 -0.255000 -3.618640 +v 4.404506 -0.255000 -3.618640 +v 9.525041 -0.255000 -3.618640 +v -0.716028 -0.255000 -3.618640 +v -5.836562 -0.255000 -3.618639 +v -10.957097 -0.255000 -3.618639 +v -16.077631 -0.255000 -3.618639 +v 14.645575 -0.255000 -3.618640 +vn 17.9219 -0.0000 -0.0000 +vn -0.0000 -0.0000 7.9921 +vn -0.0000 -0.1250 -0.0000 +vn -0.0000 -0.0000 -7.9921 +vn -17.9219 -0.0000 -0.0000 +vn -0.0000 0.1250 -0.0000 +vt 0.007552 0.974537 +vt 0.276302 0.669907 +vt -11.951389 6.495833 +vt 0.007552 0.695833 +vt 0.363802 0.651389 +vt 0.276302 0.989352 +vt 0.005469 0.989352 +vt 0.122910 0.256174 +vt 12.951389 6.495833 +vt 0.003385 0.651389 +vt 0.005469 0.669907 +vt 0.217412 0.256174 +vt 0.284635 0.990278 +vt 0.377344 0.974537 +vt -11.951389 -5.495833 +vt 0.284635 0.662500 +vt 0.367448 0.651389 +vt 0.377344 0.695833 +vt 0.122910 0.161672 +vt 0.020052 0.662500 +vt 12.951389 -5.495833 +vt 0.217412 0.161672 +vt 0.020052 0.990278 +vt 0.001302 0.006019 +vt 0.020052 0.662500 +vt 0.379427 0.662500 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.020052 0.662500 +vt 0.286719 0.990278 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.297135 0.662500 +vt 0.374740 0.662500 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.020052 0.662500 +vt 0.379427 0.662500 +vt 0.361719 0.006019 +vt 0.001302 0.006019 +vt 0.020052 0.662500 +vt 0.290885 0.990278 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.292969 0.662500 +vt 0.020052 0.990278 +vt 0.358073 0.004167 +vt 0.001302 0.006019 +vt 0.551302 0.993056 +vt 0.926823 0.993056 +vt 0.276302 0.989352 +vt 0.007552 0.669907 +vt 0.007552 0.989352 +vt 0.651823 0.989352 +vt 0.007552 0.985648 +vt 0.383073 0.985648 +vt 0.651823 0.669907 +vt 0.553385 0.658796 +vt 0.553385 0.978241 +vt 0.651823 0.989352 +vt 0.292969 0.990278 +vt 0.020052 0.662500 +vt 0.020052 0.990278 +vt 0.290885 0.662500 +vt 0.020052 0.990278 +vt 0.379427 0.990278 +vt 0.297135 0.990278 +vt 0.374740 0.990278 +vt 0.020052 0.990278 +vt 0.286719 0.662500 +vt 0.020052 0.990278 +vt 0.379427 0.990278 +vt 0.553385 0.658796 +vt 0.003385 0.651389 +vt 0.651823 0.669907 +vt 0.361719 0.651389 +vt 0.651823 0.989352 +vt 0.003385 0.651389 +vt 0.361719 0.651389 +vt 0.553385 0.978241 +vt 0.007552 0.666204 +vt 0.003385 0.651389 +vt 0.361719 0.651389 +vt 0.383073 0.666204 +vt 0.007552 0.669907 +vt 0.003385 0.651389 +vt 0.361719 0.651389 +vt 0.651823 0.669907 +vt 0.276302 0.669907 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.007552 0.989352 +vt 0.551302 0.673611 +vt 0.003385 0.651389 +vt 0.003385 0.006019 +vt 0.926823 0.673611 +vt 0.377344 0.974537 +vt 0.363802 0.651389 +vt 0.363802 0.006019 +vt 0.375260 0.695833 +vt 0.122910 0.208923 +vt 0.001302 0.651389 +vt 0.217412 0.208923 +vt 0.001302 0.006019 +vt 0.377344 0.695833 +vt 0.375260 0.974537 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.001302 0.651389 +vt 0.361719 0.651389 +vt 0.363802 0.006019 +vt 0.001302 0.004167 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.363802 0.006019 +vt 0.361719 0.651389 +vt 0.001302 0.651389 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.003385 0.651389 +vt 0.363802 0.651389 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.374740 0.662500 +vt 0.650260 0.990278 +vt 0.003385 0.006019 +vt 0.363802 0.006019 +vt 0.276302 0.669907 +vt 0.007552 0.985648 +vt 0.374740 0.990278 +vt 0.650260 0.662500 +vt 0.276302 0.989352 +vt 0.361719 0.651389 +vt 0.003385 0.651389 +vt 0.007552 0.666204 +vt 0.363802 0.651389 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.374740 0.662500 +vt 0.374740 0.990278 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.928906 0.978241 +vt 0.928906 0.658796 +vt 0.374740 0.990278 +vt 0.374740 0.662500 +vt 0.928906 0.658796 +vt 0.361719 0.651389 +vt 0.003385 0.651389 +vt 0.928906 0.978241 +vt 0.361719 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.651823 0.662500 +vt 0.020052 0.662500 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.383073 0.985648 +vt 0.276302 0.989352 +vt 0.651823 0.990278 +vt 0.020052 0.990278 +vt 0.383073 0.666204 +vt 0.361719 0.651389 +vt 0.003385 0.651389 +vt 0.276302 0.669907 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.374740 0.662500 +vt 0.020052 0.662500 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.383073 0.989352 +vt 0.383073 0.669907 +vt 0.374740 0.990278 +vt 0.020052 0.990278 +vt 0.383073 0.669907 +vt 0.361719 0.651389 +vt 0.001302 0.651389 +vt 0.383073 0.989352 +vt 0.363802 0.651389 +vt 0.001302 0.006019 +vt 0.003385 0.651389 +vt 0.374740 0.662500 +vt 0.641406 0.990278 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.651823 0.989352 +vt 0.551302 0.993056 +vt 0.374740 0.990278 +vt 0.641406 0.662500 +vt 0.651823 0.669907 +vt 0.363802 0.651389 +vt 0.361719 0.006019 +vt 0.551302 0.673611 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.363802 0.004167 +vt 0.644010 0.990278 +vt 0.020052 0.990278 +vt 0.926823 0.673611 +vt 0.361719 0.651389 +vt 0.001302 0.651389 +vt 0.651823 0.989352 +vt 0.644010 0.662500 +vt 0.020052 0.662500 +vt 0.364323 -0.000463 +vt 0.363802 0.006019 +vt 0.926823 0.993056 +vt 0.651823 0.669907 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.652344 0.662500 +vt 0.374740 0.990278 +vt 0.003385 0.004167 +vt 0.363802 0.006019 +vt 0.380990 0.989352 +vt 0.276302 0.989352 +vt 0.652344 0.990278 +vt 0.374740 0.662500 +vt 0.365885 0.651389 +vt 0.380990 0.669907 +vt 0.276302 0.669907 +vt 0.003385 0.651389 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.007552 0.974537 +vt 0.360156 0.006019 +vt 0.000260 0.651389 +vt 0.007552 0.695833 +vt 0.122910 0.185297 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.361719 0.006019 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.361719 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.003385 0.006019 +vt 0.363802 0.006019 +vt 0.361719 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.001302 0.651389 +vt 0.217412 0.185297 +vt 0.007552 0.695833 +vt 0.007552 0.974537 +vt 0.363802 0.006019 +vt 0.003385 0.651389 +vt 0.363802 0.651389 +vt 0.361719 0.006019 +vt 0.001302 0.006019 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.363802 0.006019 +vt 0.003385 0.006019 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt -0.002344 -0.000463 +vt 0.363802 0.651389 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.003385 0.651389 +vt 0.363802 0.651389 +vt -0.000260 0.006019 +vt 0.217412 0.232548 +vt 0.001302 0.651389 +vt 0.375260 0.974537 +vt 0.007552 0.974537 +vt 0.375260 0.695833 +vt 0.363802 0.006019 +vt 0.363802 0.651389 +vt 0.007552 0.695833 +vt 0.122910 0.232548 +vt 0.003385 0.006019 +vt 0.003385 0.651389 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.003385 0.006019 +vt 0.363802 0.651389 +vt 0.361719 0.006019 +vt 0.003385 0.006019 +vt 0.361719 0.006019 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.003385 0.006019 +vt 0.361719 0.006019 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.003385 0.006019 +vt 0.361719 0.006019 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.361719 0.006019 +vt 0.003385 0.006019 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.361719 0.006019 +vt 0.003385 0.006019 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.361719 0.006019 +vt 0.003385 0.006019 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.361719 0.006019 +vt 0.001302 0.006019 +vt 0.001302 0.651389 +vt 0.003385 0.006019 +vt 0.363802 0.006019 +vt 0.361719 0.651389 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.361719 0.006019 +vt 0.001302 0.006019 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.365885 0.006019 +vt 0.003385 0.006019 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +s 0 +usemtl floor +f 17513/33947/13588 17506/33921/13588 17434/33696/13588 17435/33699/13588 +f 17497/33891/13589 17495/33885/13589 17432/33690/13589 17433/33693/13589 +f 17538/34034/13590 17503/33909/13590 17431/33687/13590 17522/33977/13590 +f 17503/33910/13591 17501/33905/13591 17430/33684/13591 17431/33688/13591 +f 17524/33982/13592 17523/33980/13592 17428/33678/13592 17429/33681/13592 +f 17496/33887/13591 17498/33895/13591 17442/33726/13591 17459/33770/13591 +f 17493/33877/13591 17491/33873/13591 17443/33728/13591 17458/33766/13591 +f 17488/33862/13591 17486/33858/13591 17444/33730/13591 17457/33762/13591 +f 17483/33846/13591 17481/33842/13591 17445/33732/13591 17456/33758/13591 +f 17473/33815/13591 17471/33811/13591 17446/33734/13591 17455/33754/13591 +f 17478/33830/13591 17476/33826/13591 17447/33736/13591 17454/33750/13591 +f 17537/34030/13590 17496/33888/13590 17459/33771/13590 17526/33987/13590 +f 17536/34026/13590 17493/33878/13590 17458/33767/13590 17527/33991/13590 +f 17535/34022/13590 17488/33863/13590 17457/33763/13590 17528/33995/13590 +f 17534/34018/13590 17483/33847/13590 17456/33759/13590 17529/33998/13590 +f 17532/34010/13590 17473/33816/13590 17455/33755/13590 17530/34002/13590 +f 17533/34014/13590 17478/33831/13590 17454/33751/13590 17531/34006/13590 +f 17500/33901/13589 17502/33907/13589 17448/33738/13589 17441/33722/13589 +f 17475/33822/13589 17477/33828/13589 17449/33740/13589 17440/33718/13589 +f 17470/33807/13589 17472/33813/13589 17450/33742/13589 17439/33714/13589 +f 17480/33838/13589 17482/33844/13589 17451/33744/13589 17438/33710/13589 +f 17485/33854/13589 17487/33860/13589 17452/33746/13589 17437/33706/13589 +f 17490/33869/13589 17492/33875/13589 17453/33748/13589 17436/33702/13589 +f 17516/33953/13590 17479/33834/13590 17469/33803/13590 17512/33941/13590 +f 17515/33950/13590 17474/33819/13590 17468/33799/13590 17511/33937/13590 +f 17517/33957/13590 17484/33850/13590 17467/33796/13590 17510/33934/13590 +f 17518/33961/13590 17489/33866/13590 17466/33792/13590 17509/33930/13590 +f 17519/33965/13590 17494/33881/13590 17465/33788/13590 17508/33926/13590 +f 17520/33969/13590 17499/33897/13590 17464/33784/13590 17507/33922/13590 +f 17505/33917/13592 17514/33948/13592 17463/33782/13592 17460/33774/13592 +f 17521/33973/13590 17504/33913/13590 17462/33779/13590 17513/33945/13590 +f 17522/33978/13588 17525/33986/13588 17461/33778/13588 17462/33780/13588 +f 17510/33936/13590 17467/33798/13590 17474/33821/13590 17515/33952/13590 +f 17440/33719/13589 17449/33741/13589 17472/33814/13589 17470/33808/13589 +f 17529/33999/13590 17456/33760/13590 17473/33817/13590 17532/34011/13590 +f 17456/33761/13591 17445/33733/13591 17471/33812/13591 17473/33818/13591 +f 17511/33938/13590 17468/33800/13590 17479/33835/13590 17516/33954/13590 +f 17441/33723/13589 17448/33739/13589 17477/33829/13589 17475/33823/13589 +f 17530/34003/13590 17455/33756/13590 17478/33832/13590 17533/34015/13590 +f 17455/33757/13591 17446/33735/13591 17476/33827/13591 17478/33833/13591 +f 17509/33931/13590 17466/33793/13590 17484/33851/13590 17517/33958/13590 +f 17439/33715/13589 17450/33743/13589 17482/33845/13589 17480/33839/13589 +f 17528/33997/13590 17457/33764/13590 17483/33848/13590 17534/34019/13590 +f 17457/33765/13591 17444/33731/13591 17481/33843/13591 17483/33849/13591 +f 17508/33927/13590 17465/33789/13590 17489/33868/13590 17518/33962/13590 +f 17438/33711/13589 17451/33745/13589 17487/33861/13589 17485/33855/13589 +f 17527/33992/13590 17458/33768/13590 17488/33864/13590 17535/34023/13590 +f 17458/33769/13591 17443/33729/13591 17486/33859/13591 17488/33865/13591 +f 17507/33923/13590 17464/33785/13590 17494/33882/13590 17519/33966/13590 +f 17437/33707/13589 17452/33747/13589 17492/33876/13589 17490/33870/13589 +f 17526/33988/13590 17459/33772/13590 17493/33879/13590 17536/34027/13590 +f 17459/33773/13591 17442/33727/13591 17491/33874/13591 17493/33880/13591 +f 17505/33918/13590 17460/33775/13590 17499/33898/13590 17520/33970/13590 +f 17524/33983/13590 17429/33682/13590 17496/33889/13590 17537/34031/13590 +f 17429/33683/13591 17428/33679/13591 17498/33896/13591 17496/33890/13591 +f 17436/33703/13589 17453/33749/13589 17495/33886/13589 17497/33892/13589 +f 17512/33942/13590 17469/33804/13590 17504/33914/13590 17521/33974/13590 +f 17435/33700/13589 17434/33697/13589 17502/33908/13589 17500/33902/13589 +f 17454/33752/13591 17447/33737/13591 17501/33906/13591 17503/33911/13591 +f 17531/34007/13590 17454/33753/13590 17503/33912/13590 17538/34035/13590 +f 17441/33724/13590 17512/33943/13590 17521/33975/13590 17500/33903/13590 +f 17433/33694/13590 17505/33919/13590 17520/33971/13590 17497/33893/13590 +f 17436/33704/13590 17507/33924/13590 17519/33967/13590 17490/33871/13590 +f 17437/33708/13590 17508/33928/13590 17518/33963/13590 17485/33856/13590 +f 17438/33712/13590 17509/33932/13590 17517/33959/13590 17480/33840/13590 +f 17440/33720/13590 17511/33939/13590 17516/33955/13590 17475/33824/13590 +f 17439/33716/13590 17510/33935/13590 17515/33951/13590 17470/33809/13590 +f 17500/33904/13590 17521/33976/13590 17513/33946/13590 17435/33701/13590 +f 17433/33695/13592 17432/33691/13592 17514/33949/13592 17505/33920/13592 +f 17497/33894/13590 17520/33972/13590 17507/33925/13590 17436/33705/13590 +f 17490/33872/13590 17519/33968/13590 17508/33929/13590 17437/33709/13590 +f 17485/33857/13590 17518/33964/13590 17509/33933/13590 17438/33713/13590 +f 17480/33841/13590 17517/33960/13590 17510/33936/13590 17439/33717/13590 +f 17470/33810/13590 17515/33952/13590 17511/33940/13590 17440/33721/13590 +f 17475/33825/13590 17516/33956/13590 17512/33944/13590 17441/33725/13590 +f 17462/33780/13588 17461/33778/13588 17506/33921/13588 17513/33947/13588 +f 17469/33805/13590 17531/34008/13590 17538/34036/13590 17504/33915/13590 +f 17460/33776/13590 17524/33984/13590 17537/34032/13590 17499/33899/13590 +f 17464/33786/13590 17526/33989/13590 17536/34028/13590 17494/33883/13590 +f 17465/33790/13590 17527/33993/13590 17535/34024/13590 17489/33867/13590 +f 17466/33794/13590 17528/33996/13590 17534/34020/13590 17484/33852/13590 +f 17468/33801/13590 17530/34004/13590 17533/34016/13590 17479/33836/13590 +f 17467/33797/13590 17529/34000/13590 17532/34012/13590 17474/33820/13590 +f 17431/33689/13588 17430/33685/13588 17525/33986/13588 17522/33978/13588 +f 17479/33837/13590 17533/34017/13590 17531/34009/13590 17469/33806/13590 +f 17474/33821/13590 17532/34013/13590 17530/34005/13590 17468/33802/13590 +f 17484/33853/13590 17534/34021/13590 17529/34001/13590 17467/33798/13590 +f 17489/33868/13590 17535/34025/13590 17528/33997/13590 17466/33795/13590 +f 17494/33884/13590 17536/34029/13590 17527/33994/13590 17465/33791/13590 +f 17499/33900/13590 17537/34033/13590 17526/33990/13590 17464/33787/13590 +f 17460/33777/13592 17463/33783/13592 17523/33981/13592 17524/33985/13592 +f 17504/33916/13590 17538/34037/13590 17522/33979/13590 17462/33781/13590 +f 17430/33686/13593 17428/33680/13593 17432/33692/13593 17434/33698/13593 +o Circle +v -4.831635 -0.025320 -24.469242 +v -4.831635 -0.025320 -24.469242 +v -4.831634 -0.025320 -13.819242 +v -2.753922 -0.025320 -14.023880 +v -0.756055 -0.025320 -14.629926 +v 1.085189 -0.025320 -15.614092 +v 2.699053 -0.025320 -16.938557 +v 4.023518 -0.025320 -18.552422 +v 5.007682 -0.025320 -20.393665 +v 5.613728 -0.025320 -22.391531 +v 5.818365 -0.025320 -24.469242 +v 5.613729 -0.025320 -26.546953 +v 5.007683 -0.025320 -28.544819 +v 4.023516 -0.025320 -30.386066 +v 2.699052 -0.025320 -31.999929 +v 1.085187 -0.025320 -33.324394 +v -0.756059 -0.025320 -34.308559 +v -2.753926 -0.025320 -34.914604 +v -2.753926 -0.025320 -34.914604 +v -4.831639 -0.025320 -35.119240 +v -4.831639 -0.025320 -35.119240 +v -6.909351 -0.025320 -34.914604 +v -8.907219 -0.025320 -34.308556 +v -8.907219 -0.025320 -34.308556 +v -10.748464 -0.025320 -33.324387 +v -10.748464 -0.025320 -33.324387 +v -12.362328 -0.025320 -31.999924 +v -13.686790 -0.025320 -30.386059 +v -13.686790 -0.025320 -30.386059 +v -14.670955 -0.025320 -28.544811 +v -14.670955 -0.025320 -28.544811 +v -15.276999 -0.025320 -26.546944 +v -15.481634 -0.025320 -24.469231 +v -15.276995 -0.025320 -22.391518 +v -14.670946 -0.025320 -20.393652 +v -13.686777 -0.025320 -18.552406 +v -12.362311 -0.025320 -16.938545 +v -10.748445 -0.025320 -15.614082 +v -10.748445 -0.025320 -15.614082 +v -8.907198 -0.025320 -14.629919 +v -8.907198 -0.025320 -14.629919 +v -6.909329 -0.025320 -14.023876 +vn -0.0000 1.0000 -0.0000 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +vt 0.632552 0.618981 +s 0 +usemtl Generic_walls +f 17540/34039/13594 17541/34040/13594 17542/34041/13594 +f 17540/34039/13594 17542/34041/13594 17543/34042/13594 +f 17540/34039/13594 17543/34042/13594 17544/34043/13594 +f 17540/34039/13594 17544/34043/13594 17545/34044/13594 +f 17540/34039/13594 17545/34044/13594 17546/34045/13594 +f 17540/34039/13594 17546/34045/13594 17547/34046/13594 +f 17540/34039/13594 17547/34046/13594 17548/34047/13594 +f 17540/34039/13594 17548/34047/13594 17549/34048/13594 +f 17540/34039/13594 17549/34048/13594 17550/34049/13594 +f 17540/34039/13594 17550/34049/13594 17551/34050/13594 +f 17540/34039/13594 17551/34050/13594 17552/34051/13594 +f 17540/34039/13594 17552/34051/13594 17553/34052/13594 +f 17540/34039/13594 17553/34052/13594 17554/34053/13594 +f 17540/34039/13594 17554/34053/13594 17555/34054/13594 +f 17540/34039/13594 17555/34054/13594 17557/34056/13594 +f 17539/34038/13594 17556/34055/13594 17558/34057/13594 +f 17540/34039/13594 17559/34058/13594 17560/34059/13594 +f 17540/34039/13594 17560/34059/13594 17562/34061/13594 +s 1 +f 17539/34038/13594 17561/34060/13594 17563/34062/13594 +s 0 +f 17540/34039/13594 17564/34063/13594 17565/34064/13594 +f 17540/34039/13594 17565/34064/13594 17567/34066/13594 +s 1 +f 17539/34038/13594 17566/34065/13594 17568/34067/13594 +s 0 +f 17540/34039/13594 17569/34068/13594 17570/34069/13594 +f 17540/34039/13594 17570/34069/13594 17571/34070/13594 +f 17540/34039/13594 17571/34070/13594 17572/34071/13594 +f 17540/34039/13594 17572/34071/13594 17573/34072/13594 +f 17540/34039/13594 17573/34072/13594 17574/34073/13594 +f 17540/34039/13594 17574/34073/13594 17575/34074/13594 +f 17540/34039/13594 17575/34074/13594 17577/34076/13594 +f 17539/34038/13594 17576/34075/13594 17578/34077/13594 +f 17540/34039/13594 17579/34078/13594 17580/34079/13594 +f 17540/34039/13594 17580/34079/13594 17541/34040/13594 +o Circle.001 +v -7.511147 -0.020320 -26.313496 +v -7.511146 -0.020320 -21.453495 +v -6.563007 -0.020320 -21.546879 +v -5.651304 -0.020320 -21.823441 +v -4.811075 -0.020320 -22.272552 +v -4.074607 -0.020320 -22.876957 +v -3.470204 -0.020320 -23.613424 +v -3.021092 -0.020320 -24.453655 +v -2.744530 -0.020320 -25.365356 +v -2.651146 -0.020320 -26.313496 +v -2.744530 -0.020320 -27.261635 +v -3.021092 -0.020320 -28.173336 +v -3.470204 -0.020320 -29.013567 +v -4.074608 -0.020320 -29.750034 +v -4.811076 -0.020320 -30.354439 +v -5.651306 -0.020320 -30.803551 +v -6.563009 -0.020320 -31.080112 +v -7.511148 -0.020320 -31.173496 +v -8.459288 -0.020320 -31.080112 +v -9.370991 -0.020320 -30.803549 +v -10.211221 -0.020320 -30.354437 +v -10.947688 -0.020320 -29.750032 +v -11.552092 -0.020320 -29.013563 +v -12.001203 -0.020320 -28.173332 +v -12.277763 -0.020320 -27.261629 +v -12.371147 -0.020320 -26.313490 +v -12.277761 -0.020320 -25.365351 +v -12.001200 -0.020320 -24.453650 +v -11.552086 -0.020320 -23.613419 +v -10.947681 -0.020320 -22.876953 +v -10.211212 -0.020320 -22.272549 +v -9.370981 -0.020320 -21.823439 +v -8.459278 -0.020320 -21.546879 +vn -0.0000 1.0000 -0.0000 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +vt 0.956510 0.819907 +s 0 +usemtl Generic_walls +f 17581/34080/13595 17582/34081/13595 17583/34082/13595 +f 17581/34080/13595 17583/34082/13595 17584/34083/13595 +f 17581/34080/13595 17584/34083/13595 17585/34084/13595 +f 17581/34080/13595 17585/34084/13595 17586/34085/13595 +f 17581/34080/13595 17586/34085/13595 17587/34086/13595 +f 17581/34080/13595 17587/34086/13595 17588/34087/13595 +f 17581/34080/13595 17588/34087/13595 17589/34088/13595 +f 17581/34080/13595 17589/34088/13595 17590/34089/13595 +f 17581/34080/13595 17590/34089/13595 17591/34090/13595 +f 17581/34080/13595 17591/34090/13595 17592/34091/13595 +f 17581/34080/13595 17592/34091/13595 17593/34092/13595 +f 17581/34080/13595 17593/34092/13595 17594/34093/13595 +f 17581/34080/13595 17594/34093/13595 17595/34094/13595 +f 17581/34080/13595 17595/34094/13595 17596/34095/13595 +f 17581/34080/13595 17596/34095/13595 17597/34096/13595 +f 17581/34080/13595 17597/34096/13595 17598/34097/13595 +f 17581/34080/13595 17598/34097/13595 17599/34098/13595 +f 17581/34080/13595 17599/34098/13595 17600/34099/13595 +f 17581/34080/13595 17600/34099/13595 17601/34100/13595 +f 17581/34080/13595 17601/34100/13595 17602/34101/13595 +f 17581/34080/13595 17602/34101/13595 17603/34102/13595 +f 17581/34080/13595 17603/34102/13595 17604/34103/13595 +f 17581/34080/13595 17604/34103/13595 17605/34104/13595 +f 17581/34080/13595 17605/34104/13595 17606/34105/13595 +f 17581/34080/13595 17606/34105/13595 17607/34106/13595 +f 17581/34080/13595 17607/34106/13595 17608/34107/13595 +f 17581/34080/13595 17608/34107/13595 17609/34108/13595 +f 17581/34080/13595 17609/34108/13595 17610/34109/13595 +f 17581/34080/13595 17610/34109/13595 17611/34110/13595 +f 17581/34080/13595 17611/34110/13595 17612/34111/13595 +f 17581/34080/13595 17612/34111/13595 17613/34112/13595 +f 17581/34080/13595 17613/34112/13595 17582/34081/13595 +o Circle.003 +v 0.673004 -0.011491 -32.152493 +v 0.673004 -0.011491 -32.152493 +v -2.768320 -0.011491 -30.213474 +v -2.768320 -0.011491 -30.213474 +v -2.323912 -0.011491 -29.579365 +v -2.323912 -0.011491 -29.579365 +v -1.764335 -0.011491 -29.044136 +v -1.764335 -0.011491 -29.044136 +v -1.111092 -0.011491 -28.628361 +v -1.111092 -0.011491 -28.628361 +v -0.389287 -0.011491 -28.348017 +v 0.373341 -0.011491 -28.213877 +v 1.147485 -0.011491 -28.231094 +v 1.903395 -0.011491 -28.399010 +v 2.612021 -0.011491 -28.711168 +v 3.246132 -0.011491 -29.155575 +v 3.781360 -0.011491 -29.715153 +v 4.197135 -0.011491 -30.368397 +v 4.477480 -0.011491 -31.090200 +v 4.611621 -0.011491 -31.852829 +v 4.594403 -0.011491 -32.626972 +v 4.426487 -0.011491 -33.382885 +v 4.114327 -0.011491 -34.091511 +v 3.669919 -0.011491 -34.725624 +v 3.110342 -0.011491 -35.260849 +v 2.457098 -0.011491 -35.676624 +v 1.735293 -0.011491 -35.956970 +v 0.972665 -0.011491 -36.091110 +v 0.198520 -0.011491 -36.073891 +v -0.557390 -0.011491 -35.905975 +v -1.266016 -0.011491 -35.593815 +v -1.900128 -0.011491 -35.149406 +v -2.435355 -0.011491 -34.589828 +v -2.851129 -0.011491 -33.936584 +v -3.131473 -0.011491 -33.214779 +v -3.265613 -0.011491 -32.452152 +v -3.248394 -0.011491 -31.678005 +v -3.080477 -0.011491 -30.922096 +v -0.132879 0.013081 -31.227287 +v -0.132879 0.013081 -31.227287 +v -0.132879 0.013081 -31.227287 +v -0.132879 0.013081 -31.227287 +v -0.132879 0.013081 -31.227287 +v -0.132879 0.013081 -31.227287 +v -0.132879 0.013081 -31.227287 +v -0.132879 0.013081 -31.227287 +v -0.132879 0.013081 -31.227287 +v -1.004100 0.013081 -30.736397 +v -1.004100 0.013081 -30.736397 +v -0.749927 0.013081 -30.440363 +v -0.749927 0.013081 -30.440363 +v -0.401814 0.013081 -30.264130 +v -0.401814 0.013081 -30.264130 +v -0.012757 0.013081 -30.234529 +v -0.012757 0.013081 -30.234529 +v 0.358011 0.013081 -30.356068 +v 0.654047 0.013081 -30.610241 +v 0.830279 0.013081 -30.958353 +v 0.830279 0.013081 -30.958353 +v 0.859880 0.013081 -31.347410 +v 0.859880 0.013081 -31.347410 +v 0.738342 0.013081 -31.718178 +v 0.738342 0.013081 -31.718178 +v 0.484169 0.013081 -32.014214 +v 0.484169 0.013081 -32.014214 +v 0.136056 0.013081 -32.190445 +v 0.136056 0.013081 -32.190445 +v -0.253000 0.013081 -32.220047 +v -0.253000 0.013081 -32.220047 +v -0.623769 0.013081 -32.098511 +v -0.919805 0.013081 -31.844336 +v -0.919805 0.013081 -31.844336 +v -1.096038 0.013081 -31.496222 +v -1.096038 0.013081 -31.496222 +v -1.125638 0.013081 -31.107166 +v -1.125638 0.013081 -31.107166 +v -0.132879 0.028637 -31.227287 +v -0.132879 0.028637 -31.227287 +v -0.132879 0.028637 -31.227287 +v -0.132879 0.028637 -31.227287 +v -0.132879 0.028637 -31.227287 +v -0.132879 0.028637 -31.227287 +v -0.132879 0.028637 -31.227287 +v -0.132879 0.028637 -31.227287 +v -0.132879 0.028637 -31.227287 +v -0.132879 0.028637 -31.227287 +v -0.132879 0.028637 -31.227287 +v -0.132879 0.028637 -31.227287 +v -0.742366 0.028637 -30.883873 +v -0.742366 0.028637 -30.883873 +v -0.742366 0.028637 -30.883873 +v -0.742366 0.028637 -30.883873 +v -0.564552 0.028637 -30.676773 +v -0.564552 0.028637 -30.676773 +v -0.564552 0.028637 -30.676773 +v -0.564552 0.028637 -30.676773 +v -0.321019 0.028637 -30.553484 +v -0.321019 0.028637 -30.553484 +v -0.321019 0.028637 -30.553484 +v -0.321019 0.028637 -30.553484 +v -0.048844 0.028637 -30.532776 +v -0.048844 0.028637 -30.532776 +v -0.048844 0.028637 -30.532776 +v -0.048844 0.028637 -30.532776 +v 0.210537 0.028637 -30.617802 +v 0.210537 0.028637 -30.617802 +v 0.210537 0.028637 -30.617802 +v 0.417636 0.028637 -30.795616 +v 0.417636 0.028637 -30.795616 +v 0.417636 0.028637 -30.795616 +v 0.417636 0.028637 -30.795616 +v 0.540925 0.028637 -31.039148 +v 0.540925 0.028637 -31.039148 +v 0.540925 0.028637 -31.039148 +v 0.540925 0.028637 -31.039148 +v 0.561633 0.028637 -31.311323 +v 0.561633 0.028637 -31.311323 +v 0.561633 0.028637 -31.311323 +v 0.561633 0.028637 -31.311323 +v 0.476608 0.028637 -31.570704 +v 0.476608 0.028637 -31.570704 +v 0.476608 0.028637 -31.570704 +v 0.476608 0.028637 -31.570704 +v 0.298794 0.028637 -31.777803 +v 0.298794 0.028637 -31.777803 +v 0.298794 0.028637 -31.777803 +v 0.298794 0.028637 -31.777803 +v 0.055262 0.028637 -31.901093 +v 0.055262 0.028637 -31.901093 +v 0.055262 0.028637 -31.901093 +v 0.055262 0.028637 -31.901093 +v -0.216913 0.028637 -31.921801 +v -0.216913 0.028637 -31.921801 +v -0.216913 0.028637 -31.921801 +v -0.216913 0.028637 -31.921801 +v -0.476295 0.028637 -31.836775 +v -0.476295 0.028637 -31.836775 +v -0.476295 0.028637 -31.836775 +v -0.683394 0.028637 -31.658960 +v -0.683394 0.028637 -31.658960 +v -0.683394 0.028637 -31.658960 +v -0.683394 0.028637 -31.658960 +v -0.806683 0.028637 -31.415428 +v -0.806683 0.028637 -31.415428 +v -0.806683 0.028637 -31.415428 +v -0.806683 0.028637 -31.415428 +v -0.827391 0.028637 -31.143253 +v -0.827391 0.028637 -31.143253 +v -0.827391 0.028637 -31.143253 +v -0.827391 0.028637 -31.143253 +v -0.940344 0.174727 -30.772320 +v -0.940344 0.174727 -30.772320 +v -0.704771 0.174727 -30.497950 +v -0.704771 0.174727 -30.497950 +v -0.382133 0.174727 -30.334614 +v -0.382133 0.174727 -30.334614 +v -0.021548 0.174727 -30.307178 +v -0.021548 0.174727 -30.307178 +v 0.322088 0.174727 -30.419823 +v 0.322088 0.174727 -30.419823 +v 0.596460 0.174727 -30.655396 +v 0.596460 0.174727 -30.655396 +v 0.759796 0.174727 -30.978033 +v 0.759796 0.174727 -30.978033 +v 0.787230 0.174727 -31.338619 +v 0.787230 0.174727 -31.338619 +v 0.674587 0.174727 -31.682255 +v 0.674587 0.174727 -31.682255 +v 0.439014 0.174727 -31.956627 +v 0.439014 0.174727 -31.956627 +v 0.116375 0.174727 -32.119961 +v 0.116375 0.174727 -32.119961 +v -0.244210 0.174727 -32.147396 +v -0.244210 0.174727 -32.147396 +v -0.587846 0.174727 -32.034752 +v -0.587846 0.174727 -32.034752 +v -0.862217 0.174727 -31.799179 +v -0.862217 0.174727 -31.799179 +v -1.025553 0.174727 -31.476542 +v -1.025553 0.174727 -31.476542 +v -1.052988 0.174727 -31.115955 +v -1.052988 0.174727 -31.115955 +v 0.597088 -0.023520 -32.947769 +v 0.597088 -0.023520 -32.947769 +v 0.597088 0.615713 -32.947769 +v 0.597088 0.615713 -32.947769 +v 0.597088 0.615713 -32.947769 +v 0.597088 0.615713 -32.947769 +v 0.152879 -0.023520 -32.992874 +v 0.152879 -0.023520 -32.992874 +v 0.152879 0.615713 -32.992874 +v 0.152879 0.615713 -32.992874 +v 0.152879 0.615713 -32.992874 +v 0.953559 -0.023520 -32.679008 +v 0.953559 -0.023520 -32.679008 +v 0.953559 0.615713 -32.679008 +v 0.953559 0.615713 -32.679008 +v 0.953559 0.615713 -32.679008 +v 0.385808 0.615713 -32.997936 +v 0.385808 0.615713 -32.997936 +v 0.385808 0.615713 -32.997936 +v 0.385808 0.615713 -32.997936 +v 0.385808 -0.023520 -32.997936 +v 0.385808 -0.023520 -32.997936 +v 0.786148 -0.023520 -32.841003 +v 0.786148 -0.023520 -32.841003 +v 0.786148 0.615713 -32.841003 +v 0.786148 0.615713 -32.841003 +v 0.786148 0.615713 -32.841003 +v 0.786148 0.615713 -32.841003 +v 1.254066 -0.023520 -34.623749 +v 1.254066 -0.023520 -34.623749 +v 1.254066 0.615713 -34.623749 +v 1.254066 0.615713 -34.623749 +v 1.254066 0.615713 -34.623749 +v 1.254066 0.615713 -34.623749 +v 0.285016 0.615713 -34.866528 +v 0.285016 0.615713 -34.866528 +v 0.285016 0.615713 -34.866528 +v 0.285016 -0.023520 -34.866528 +v 0.285016 -0.023520 -34.866528 +v 2.129598 0.615713 -34.143555 +v 2.129598 0.615713 -34.143555 +v 2.129598 0.615713 -34.143555 +v 2.129598 -0.023520 -34.143555 +v 2.129598 -0.023520 -34.143555 +v 1.052898 -0.023520 -34.699707 +v 1.052898 -0.023520 -34.699707 +v 1.052898 0.615713 -34.699707 +v 1.052898 0.615713 -34.699707 +v 1.052898 0.615713 -34.699707 +v 1.052898 0.615713 -34.699707 +v 1.453238 0.615713 -34.542774 +v 1.453238 0.615713 -34.542774 +v 1.453238 0.615713 -34.542774 +v 1.453238 -0.023520 -34.542774 +v 1.453238 -0.023520 -34.542774 +v 1.773800 0.615713 -34.381001 +v 1.773800 0.615713 -34.381001 +v 1.773800 0.615713 -34.381001 +v 1.773800 0.615713 -34.381001 +v 1.773800 -0.023520 -34.381001 +v 1.773800 -0.023520 -34.381001 +v 0.707778 -0.023520 -34.798878 +v 0.707778 -0.023520 -34.798878 +v 0.707778 0.615713 -34.798878 +v 0.707778 0.615713 -34.798878 +v 0.707778 0.615713 -34.798878 +v 0.707778 0.615713 -34.798878 +v 0.491448 -0.023520 -32.972855 +v 0.491448 -0.023520 -32.972855 +v 0.491448 0.615713 -32.972855 +v 0.491448 0.615713 -32.972855 +v 0.491448 0.615713 -32.972855 +v 0.491448 0.615713 -32.972855 +v 0.691618 0.615713 -32.894386 +v 0.691618 0.615713 -32.894386 +v 0.691618 0.615713 -32.894386 +v 0.691618 -0.023520 -32.894386 +v 0.691618 -0.023520 -32.894386 +v 3.419496 -0.145310 -32.706753 +v 3.419496 -0.145310 -32.706753 +v 3.419496 0.552742 -32.706753 +v 3.419496 0.552742 -32.706753 +v 3.419496 0.552742 -32.706753 +v 3.419496 0.552742 -32.706753 +v 2.631844 -0.145310 -32.387215 +v 2.631844 -0.145310 -32.387215 +v 2.631844 0.552742 -32.387215 +v 2.631844 0.552742 -32.387215 +v 2.631844 0.552742 -32.387215 +v 2.631844 0.552742 -32.387215 +v 2.795088 -0.145310 -33.630844 +v 2.795088 -0.145310 -33.630844 +v 2.795088 0.552742 -33.630844 +v 2.795088 0.552742 -33.630844 +v 2.795088 0.552742 -33.630844 +v 2.270826 -0.145310 -32.961777 +v 2.270826 -0.145310 -32.961777 +v 2.270826 0.552742 -32.961777 +v 2.270826 0.552742 -32.961777 +v 2.270826 0.552742 -32.961777 +v 2.779933 -0.145310 -31.541025 +v 2.779933 -0.145310 -31.541025 +v 3.629598 -0.145310 -31.517141 +v 3.629598 -0.145310 -31.517141 +v 3.629598 0.552742 -31.517141 +v 3.629598 0.552742 -31.517141 +v 3.629598 0.552742 -31.517141 +v 2.779933 0.552742 -31.541025 +v 2.779933 0.552742 -31.541025 +v 2.779933 0.552742 -31.541025 +v 2.540477 -0.145310 -30.620552 +v 2.540477 -0.145310 -30.620552 +v 3.275691 -0.145310 -30.193983 +v 3.275691 -0.145310 -30.193983 +v 3.275691 0.552742 -30.193983 +v 3.275691 0.552742 -30.193983 +v 3.275691 0.552742 -30.193983 +v 3.275691 0.552742 -30.193983 +v 2.540477 0.552742 -30.620552 +v 2.540477 0.552742 -30.620552 +v 2.540477 0.552742 -30.620552 +v 2.540477 0.552742 -30.620552 +v 1.991585 -0.145310 -30.037746 +v 1.991585 -0.145310 -30.037746 +v 2.415964 -0.145310 -29.301266 +v 2.415964 -0.145310 -29.301266 +v 2.415964 0.552742 -29.301266 +v 2.415964 0.552742 -29.301266 +v 2.415964 0.552742 -29.301266 +v 2.415964 0.552742 -29.301266 +v 1.991585 0.552742 -30.037746 +v 1.991585 0.552742 -30.037746 +v 1.991585 0.552742 -30.037746 +v 1.991585 0.552742 -30.037746 +v 1.043900 -0.092799 -29.532791 +v 1.043900 -0.092799 -29.532791 +v 1.243374 -0.092799 -28.775978 +v 1.243374 -0.092799 -28.775978 +v 1.243374 0.537911 -28.775978 +v 1.243374 0.537911 -28.775978 +v 1.243374 0.537911 -28.775978 +v 1.243374 0.537911 -28.775978 +v 1.043900 0.537911 -29.532791 +v 1.043900 0.537911 -29.532791 +v 1.043900 0.537911 -29.532791 +v 1.043900 0.537911 -29.532791 +v 0.024286 -0.092799 -29.493185 +v 0.024286 -0.092799 -29.493185 +v -0.286674 -0.092799 -28.774952 +v -0.286674 -0.092799 -28.774952 +v -0.286674 0.537911 -28.774952 +v -0.286674 0.537911 -28.774952 +v -0.286674 0.537911 -28.774952 +v 0.024286 0.537911 -29.493185 +v 0.024286 0.537911 -29.493185 +v 0.024286 0.537911 -29.493185 +v 0.467414 0.537911 -29.444178 +v 0.467414 0.537911 -29.444178 +v 0.467414 0.537911 -29.444178 +v 0.467414 0.537911 -29.444178 +v 0.525522 0.537911 -28.706837 +v 0.525522 0.537911 -28.706837 +v 0.525522 0.537911 -28.706837 +v 0.525522 0.537911 -28.706837 +v 0.525522 -0.092799 -28.706837 +v 0.525522 -0.092799 -28.706837 +v 0.467414 -0.092799 -29.444178 +v 0.467414 -0.092799 -29.444178 +v 1.535553 -0.119055 -29.688833 +v 1.535553 -0.119055 -29.688833 +v 1.535553 0.545326 -29.688833 +v 1.535553 0.545326 -29.688833 +v 1.535553 0.545326 -29.688833 +v 1.535553 0.545326 -29.688833 +v 1.912884 0.545326 -28.973011 +v 1.912884 0.545326 -28.973011 +v 1.912884 0.545326 -28.973011 +v 1.912884 0.545326 -28.973011 +v 1.912884 -0.119055 -28.973011 +v 1.912884 -0.119055 -28.973011 +v 2.738616 0.552742 -31.105528 +v 2.738616 0.552742 -31.105528 +v 2.738616 0.552742 -31.105528 +v 2.738616 0.552742 -31.105528 +v 3.531055 0.552742 -30.880301 +v 3.531055 0.552742 -30.880301 +v 3.531055 0.552742 -30.880301 +v 3.531055 0.552742 -30.880301 +v 3.531055 -0.145310 -30.880301 +v 3.531055 -0.145310 -30.880301 +v 2.738616 -0.145310 -31.105528 +v 2.738616 -0.145310 -31.105528 +v 3.572039 -0.145310 -32.148426 +v 3.572039 -0.145310 -32.148426 +v 2.753381 -0.145310 -32.000599 +v 2.753381 -0.145310 -32.000599 +v 2.753381 0.552742 -32.000599 +v 2.753381 0.552742 -32.000599 +v 2.753381 0.552742 -32.000599 +v 2.753381 0.552742 -32.000599 +v 3.572039 0.552742 -32.148426 +v 3.572039 0.552742 -32.148426 +v 3.572039 0.552742 -32.148426 +v 3.572039 0.552742 -32.148426 +v 2.488228 -0.145310 -32.695282 +v 2.488228 -0.145310 -32.695282 +v 2.488228 0.552742 -32.695282 +v 2.488228 0.552742 -32.695282 +v 2.488228 0.552742 -32.695282 +v 2.488228 0.552742 -32.695282 +v 3.144184 -0.145310 -33.189583 +v 3.144184 -0.145310 -33.189583 +v 3.144184 0.552742 -33.189583 +v 3.144184 0.552742 -33.189583 +v 3.144184 0.552742 -33.189583 +v 3.144184 0.552742 -33.189583 +v 2.266761 0.552742 -30.276094 +v 2.266761 0.552742 -30.276094 +v 2.266761 0.552742 -30.276094 +v 2.266761 0.552742 -30.276094 +v 2.846558 0.552742 -29.694571 +v 2.846558 0.552742 -29.694571 +v 2.846558 0.552742 -29.694571 +v 2.846558 0.552742 -29.694571 +v 2.846558 -0.145310 -29.694571 +v 2.846558 -0.145310 -29.694571 +v 2.266761 -0.145310 -30.276094 +v 2.266761 -0.145310 -30.276094 +v -0.418840 -0.023520 -32.873089 +v -0.418840 -0.023520 -32.873089 +v -0.418840 0.615713 -32.873089 +v -0.418840 0.615713 -32.873089 +v -0.418840 0.615713 -32.873089 +v -0.675807 0.615713 -34.733715 +v -0.675807 0.615713 -34.733715 +v -0.675807 0.615713 -34.733715 +v -0.675807 -0.023520 -34.733715 +v -0.675807 -0.023520 -34.733715 +v -1.044153 -0.023520 -32.915928 +v -1.044153 -0.023520 -32.915928 +v -1.044153 -0.023520 -32.915928 +v -1.044153 0.615713 -32.915928 +v -1.044153 0.615713 -32.915928 +v -1.044153 0.615713 -32.915928 +v -1.044153 0.615713 -32.915928 +v -1.721660 0.615713 -34.366096 +v -1.721660 0.615713 -34.366096 +v -1.721660 0.615713 -34.366096 +v -1.721660 0.615713 -34.366096 +v -1.721660 -0.023520 -34.366096 +v -1.721660 -0.023520 -34.366096 +v -1.721660 -0.023520 -34.366096 +v -1.566270 -0.023520 -32.791122 +v -1.566270 -0.023520 -32.791122 +v -1.566270 -0.023520 -32.791122 +v -1.566270 -0.023520 -32.791122 +v -1.566270 0.615713 -32.791122 +v -1.566270 0.615713 -32.791122 +v -1.566270 0.615713 -32.791122 +v -1.566270 0.615713 -32.791122 +v -2.474205 0.615713 -33.516708 +v -2.474205 0.615713 -33.516708 +v -2.474205 0.615713 -33.516708 +v -2.474205 0.615713 -33.516708 +v -2.474205 -0.023520 -33.516708 +v -2.474205 -0.023520 -33.516708 +v -2.474205 -0.023520 -33.516708 +v -2.474205 -0.023520 -33.516708 +v -1.918833 -0.023520 -32.062130 +v -1.918833 -0.023520 -32.062130 +v -1.918833 -0.023520 -32.062130 +v -1.918833 -0.023520 -32.062130 +v -1.918833 0.615713 -32.062130 +v -1.918833 0.615713 -32.062130 +v -1.918833 0.615713 -32.062130 +v -1.918833 0.615713 -32.062130 +v -2.852597 0.615713 -32.346672 +v -2.852597 0.615713 -32.346672 +v -2.852597 0.615713 -32.346672 +v -2.852597 0.615713 -32.346672 +v -2.852597 -0.023520 -32.346672 +v -2.852597 -0.023520 -32.346672 +v -2.852597 -0.023520 -32.346672 +v -2.852597 -0.023520 -32.346672 +v -1.930289 -0.023520 -31.403364 +v -1.930289 -0.023520 -31.403364 +v -1.930289 -0.023520 -31.403364 +v -1.930289 -0.023520 -31.403364 +v -1.930289 0.615713 -31.403364 +v -1.930289 0.615713 -31.403364 +v -1.930289 0.615713 -31.403364 +v -1.930289 0.615713 -31.403364 +v -2.732434 0.615713 -31.120117 +v -2.732434 0.615713 -31.120117 +v -2.732434 0.615713 -31.120117 +v -2.732434 0.615713 -31.120117 +v -2.732434 -0.023520 -31.120117 +v -2.732434 -0.023520 -31.120117 +v -2.732434 -0.023520 -31.120117 +v -2.732434 -0.023520 -31.120117 +v -1.675467 -0.023520 -30.527876 +v -1.675467 -0.023520 -30.527876 +v -1.675467 -0.023520 -30.527876 +v -1.675467 -0.023520 -30.527876 +v -1.675467 0.615713 -30.527876 +v -1.675467 0.615713 -30.527876 +v -1.675467 0.615713 -30.527876 +v -1.675467 0.615713 -30.527876 +v -2.242061 0.615713 -30.138943 +v -2.242061 0.615713 -30.138943 +v -2.242061 0.615713 -30.138943 +v -2.242061 0.615713 -30.138943 +v -2.242061 -0.023520 -30.138943 +v -2.242061 -0.023520 -30.138943 +v -2.242061 -0.023520 -30.138943 +v -2.242061 -0.023520 -30.138943 +v -1.133838 -0.023520 -29.934856 +v -1.133838 -0.023520 -29.934856 +v -1.133838 -0.023520 -29.934856 +v -1.133838 0.615713 -29.934856 +v -1.133838 0.615713 -29.934856 +v -1.133838 0.615713 -29.934856 +v -1.376351 0.615713 -29.291828 +v -1.376351 0.615713 -29.291828 +v -1.376351 0.615713 -29.291828 +v -1.376351 -0.023520 -29.291828 +v -1.376351 -0.023520 -29.291828 +v -1.376351 -0.023520 -29.291828 +v -1.808117 0.615713 -32.475388 +v -1.808117 0.615713 -32.475388 +v -1.808117 0.615713 -32.475388 +v -1.808117 0.615713 -32.475388 +v -2.728967 0.615713 -32.980450 +v -2.728967 0.615713 -32.980450 +v -2.728967 0.615713 -32.980450 +v -2.728967 0.615713 -32.980450 +v -2.728967 -0.023520 -32.980450 +v -2.728967 -0.023520 -32.980450 +v -2.728967 -0.023520 -32.980450 +v -2.728967 -0.023520 -32.980450 +v -1.808117 -0.023520 -32.475388 +v -1.808117 -0.023520 -32.475388 +v -1.808117 -0.023520 -32.475388 +v -1.808117 -0.023520 -32.475388 +v -2.144970 -0.023520 -33.991081 +v -2.144970 -0.023520 -33.991081 +v -2.144970 -0.023520 -33.991081 +v -2.144970 -0.023520 -33.991081 +v -1.352249 -0.023520 -32.903206 +v -1.352249 -0.023520 -32.903206 +v -1.352249 -0.023520 -32.903206 +v -1.352249 -0.023520 -32.903206 +v -1.352249 0.615713 -32.903206 +v -1.352249 0.615713 -32.903206 +v -1.352249 0.615713 -32.903206 +v -1.352249 0.615713 -32.903206 +v -2.144970 0.615713 -33.991081 +v -2.144970 0.615713 -33.991081 +v -2.144970 0.615713 -33.991081 +v -2.144970 0.615713 -33.991081 +v -2.863475 -0.023520 -31.741026 +v -2.863475 -0.023520 -31.741026 +v -2.863475 -0.023520 -31.741026 +v -2.863475 -0.023520 -31.741026 +v -1.995520 -0.023520 -31.740379 +v -1.995520 -0.023520 -31.740379 +v -1.995520 -0.023520 -31.740379 +v -1.995520 -0.023520 -31.740379 +v -1.995520 0.615713 -31.740379 +v -1.995520 0.615713 -31.740379 +v -1.995520 0.615713 -31.740379 +v -1.995520 0.615713 -31.740379 +v -2.863475 0.615713 -31.741026 +v -2.863475 0.615713 -31.741026 +v -2.863475 0.615713 -31.741026 +v -2.863475 0.615713 -31.741026 +v -2.540999 -0.023520 -30.589720 +v -2.540999 -0.023520 -30.589720 +v -2.540999 -0.023520 -30.589720 +v -2.540999 -0.023520 -30.589720 +v -1.856630 -0.023520 -30.925812 +v -1.856630 -0.023520 -30.925812 +v -1.856630 -0.023520 -30.925812 +v -1.856630 -0.023520 -30.925812 +v -1.856630 0.615713 -30.925812 +v -1.856630 0.615713 -30.925812 +v -1.856630 0.615713 -30.925812 +v -1.856630 0.615713 -30.925812 +v -2.540999 0.615713 -30.589720 +v -2.540999 0.615713 -30.589720 +v -2.540999 0.615713 -30.589720 +v -2.540999 0.615713 -30.589720 +v -1.464715 0.615713 -30.168955 +v -1.464715 0.615713 -30.168955 +v -1.464715 0.615713 -30.168955 +v -1.464715 0.615713 -30.168955 +v -1.869268 0.615713 -29.652973 +v -1.869268 0.615713 -29.652973 +v -1.869268 0.615713 -29.652973 +v -1.869268 0.615713 -29.652973 +v -1.869268 -0.023520 -29.652973 +v -1.869268 -0.023520 -29.652973 +v -1.869268 -0.023520 -29.652973 +v -1.869268 -0.023520 -29.652973 +v -1.464715 -0.023520 -30.168955 +v -1.464715 -0.023520 -30.168955 +v -1.464715 -0.023520 -30.168955 +v -1.464715 -0.023520 -30.168955 +vn -0.0000 1.0000 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn -0.2476 0.8363 0.4891 +vn 0.4891 0.8363 0.2476 +vn -0.0416 -0.8363 0.5466 +vn -0.5466 0.8363 -0.0416 +vn -0.0416 0.8363 0.5466 +vn 0.5466 0.8363 0.0416 +vn 0.1708 -0.8363 0.5209 +vn -0.4159 -0.8363 0.3571 +vn -0.5209 0.8363 0.1708 +vn 0.1708 0.8363 0.5209 +vn -0.5209 -0.8363 0.1708 +vn 0.3571 -0.8363 0.4159 +vn -0.4159 0.8363 0.3571 +vn 0.3571 0.8363 0.4159 +vn -0.2476 -0.8363 0.4891 +vn -0.4891 0.8363 -0.2476 +vn -0.6954 -0.0000 0.7186 +vn 0.0217 -0.0000 0.9998 +vn -0.2310 -0.0000 0.9730 +vn -0.4917 -0.0000 0.8707 +vn 0.1580 -0.0000 -0.9874 +vn 0.5551 -0.0000 -0.8318 +vn 0.3532 -0.0000 -0.9355 +vn 0.3766 -0.0000 -0.9264 +vn 0.4505 -0.0000 -0.8928 +vn 0.2762 -0.0000 -0.9611 +vn -0.9975 -0.0000 -0.0703 +vn 0.7797 -0.0000 0.6261 +vn -0.7749 -0.0000 0.6321 +vn 0.7871 -0.0000 0.6168 +vn 0.8687 -0.0000 -0.4953 +vn -0.9983 -0.0000 0.0577 +vn 0.9959 -0.0000 -0.0908 +vn -0.9257 -0.0000 -0.3782 +vn 0.9372 -0.0000 0.3487 +vn -0.3025 -0.0000 -0.9531 +vn -0.6547 -0.0000 -0.7559 +vn 0.6744 -0.0000 0.7384 +vn 0.2823 -0.0000 0.9593 +vn -0.0114 0.9999 0.0045 +vn -0.0113 0.9999 0.0044 +vn -0.0114 0.9999 0.0044 +vn -0.9177 -0.0000 -0.3973 +vn 0.1099 -0.0000 -0.9939 +vn -0.0836 -0.0000 0.9965 +vn 0.0959 -0.0000 0.9954 +vn -0.1519 -0.0000 -0.9884 +vn -0.0111 0.9999 0.0062 +vn -0.0110 0.9999 0.0058 +vn 0.5465 -0.0000 0.8375 +vn -0.6077 -0.0000 -0.7942 +vn 0.9882 -0.0000 0.1529 +vn -0.9955 -0.0000 -0.0944 +vn 0.9646 -0.0000 -0.2636 +vn -0.9540 -0.0000 0.2999 +vn 0.7842 -0.0000 -0.6204 +vn -0.9064 -0.0000 0.4225 +vn 0.7585 -0.0000 0.6517 +vn -0.7829 -0.0000 -0.6221 +vn -0.9906 -0.0000 0.1368 +vn -0.0683 -0.0000 0.9977 +vn -0.3316 -0.0000 -0.9434 +vn 0.4639 -0.0000 0.8859 +vn -0.8215 -0.0000 -0.5702 +vn -0.9815 -0.0000 -0.1915 +vn 0.9659 -0.0000 0.2588 +vn 0.9818 -0.0000 -0.1900 +vn -0.9784 -0.0000 0.2065 +vn 0.9101 -0.0000 -0.4143 +vn -0.8334 -0.0000 0.5527 +vn 0.9357 -0.0000 0.3529 +vn -0.5910 -0.0000 0.8067 +vn 0.5776 -0.0000 -0.8163 +vn 0.7939 -0.0000 0.6081 +vn -0.9033 -0.0000 -0.4291 +vn -0.6631 -0.0000 -0.7485 +vn 0.0413 -0.0000 0.9991 +vn -0.9998 -0.0000 -0.0180 +vn 0.9728 -0.0000 0.2318 +vn -0.9406 -0.0000 0.3395 +vn 0.9883 -0.0000 -0.1524 +vn 0.8623 -0.0000 -0.5063 +vn -0.7934 -0.0000 0.6087 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476302 0.723611 +vt 0.476302 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476302 0.723611 +vt 0.476302 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476302 0.723611 +vt 0.476302 0.723611 +vt 0.476302 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476302 0.723611 +vt 0.476302 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476302 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +vt 0.476823 0.723611 +s 0 +usemtl Generic_walls +f 17614/34113/13596 17616/34115/13596 17618/34117/13596 +f 17615/34114/13596 17619/34118/13596 17621/34120/13596 +s 1 +f 17614/34113/13596 17620/34119/13596 17622/34121/13596 +s 0 +f 17615/34114/13596 17623/34122/13596 17624/34123/13596 +f 17615/34114/13596 17624/34123/13596 17625/34124/13596 +f 17615/34114/13596 17625/34124/13596 17626/34125/13596 +f 17615/34114/13596 17626/34125/13596 17627/34126/13596 +f 17615/34114/13596 17627/34126/13596 17628/34127/13596 +f 17615/34114/13596 17628/34127/13596 17629/34128/13596 +f 17615/34114/13596 17629/34128/13596 17630/34129/13596 +f 17615/34114/13596 17630/34129/13596 17631/34130/13596 +f 17615/34114/13596 17631/34130/13596 17632/34131/13596 +f 17615/34114/13596 17632/34131/13596 17633/34132/13596 +f 17615/34114/13596 17633/34132/13596 17634/34133/13596 +f 17615/34114/13596 17634/34133/13596 17635/34134/13596 +f 17615/34114/13596 17635/34134/13596 17636/34135/13596 +f 17615/34114/13596 17636/34135/13596 17637/34136/13596 +f 17615/34114/13596 17637/34136/13596 17638/34137/13596 +f 17615/34114/13596 17638/34137/13596 17639/34138/13596 +f 17615/34114/13596 17639/34138/13596 17640/34139/13596 +f 17615/34114/13596 17640/34139/13596 17641/34140/13596 +f 17615/34114/13596 17641/34140/13596 17642/34141/13596 +f 17615/34114/13596 17642/34141/13596 17643/34142/13596 +f 17615/34114/13596 17643/34142/13596 17644/34143/13596 +f 17615/34114/13596 17644/34143/13596 17645/34144/13596 +f 17615/34114/13596 17645/34144/13596 17646/34145/13596 +f 17615/34114/13596 17646/34145/13596 17647/34146/13596 +f 17615/34114/13596 17647/34146/13596 17648/34147/13596 +f 17615/34114/13596 17648/34147/13596 17649/34148/13596 +f 17615/34114/13596 17649/34148/13596 17650/34149/13596 +f 17615/34114/13596 17650/34149/13596 17651/34150/13596 +f 17615/34114/13596 17651/34150/13596 17617/34116/13596 +f 17659/34158/13597 17664/34163/13597 17662/34161/13597 +f 17656/34155/13597 17666/34165/13597 17663/34162/13597 +f 17652/34151/13597 17667/34166/13597 17665/34164/13597 +f 17656/34155/13596 17668/34167/13596 17669/34168/13596 +f 17656/34155/13596 17669/34168/13596 17670/34169/13596 +f 17656/34155/13596 17670/34169/13596 17671/34170/13596 +f 17658/34157/13597 17674/34173/13597 17672/34171/13597 +f 17655/34154/13597 17676/34175/13597 17673/34172/13597 +f 17654/34153/13597 17677/34176/13597 17675/34174/13597 +f 17657/34156/13597 17679/34178/13597 17678/34177/13597 +f 17660/34159/13597 17682/34181/13597 17680/34179/13597 +f 17656/34155/13596 17681/34180/13596 17683/34182/13596 +f 17656/34155/13596 17683/34182/13596 17684/34183/13596 +f 17660/34159/13597 17687/34186/13597 17685/34184/13597 +f 17656/34155/13597 17689/34188/13597 17686/34185/13597 +f 17653/34152/13596 17688/34187/13596 17661/34160/13596 +f 17691/34190/13596 17703/34202/13596 17706/34205/13596 +f 17692/34191/13596 17707/34206/13596 17710/34209/13596 +f 17698/34197/13596 17711/34210/13596 17715/34214/13596 +f 17695/34194/13596 17714/34213/13596 17718/34217/13596 +f 17695/34194/13596 17718/34217/13596 17721/34220/13596 +f 17700/34199/13596 17722/34221/13596 17726/34225/13596 +f 17694/34193/13596 17725/34224/13596 17730/34229/13596 +f 17693/34192/13596 17729/34228/13596 17734/34233/13596 +f 17701/34200/13596 17735/34234/13596 17740/34239/13596 +f 17690/34189/13596 17739/34238/13596 17743/34242/13596 +f 17699/34198/13596 17744/34243/13596 17748/34247/13596 +f 17695/34194/13596 17747/34246/13596 17751/34250/13596 +f 17695/34194/13596 17751/34250/13596 17754/34253/13596 +f 17697/34196/13596 17755/34254/13596 17759/34258/13596 +f 17694/34193/13596 17758/34257/13596 17762/34261/13596 +f 17696/34195/13596 17763/34262/13596 17704/34203/13596 +f 17742/34241/13598 17737/34236/13598 17782/34281/13598 +f 17742/34241/13598 17782/34281/13598 17785/34284/13598 +f 17756/34255/13599 17753/34252/13599 17791/34290/13599 +f 17756/34255/13599 17791/34290/13599 17792/34291/13599 +s 1 +f 17716/34215/13600 17769/34268/13600 17713/34212/13600 +s 0 +f 17716/34215/13600 17770/34269/13600 17769/34268/13600 +f 17732/34231/13601 17727/34226/13601 17776/34275/13601 +f 17732/34231/13601 17776/34275/13601 17779/34278/13601 +s 1 +f 17746/34245/13602 17741/34240/13602 17784/34283/13602 +s 0 +f 17746/34245/13602 17784/34283/13602 17787/34286/13602 +f 17760/34259/13603 17757/34256/13603 17793/34292/13603 +f 17760/34259/13603 17793/34292/13603 17794/34293/13603 +s 1 +f 17719/34218/13604 17771/34270/13604 17717/34216/13604 +s 0 +f 17719/34218/13604 17772/34271/13604 17771/34270/13604 +f 17708/34207/13605 17765/34264/13605 17705/34204/13605 +f 17708/34207/13605 17766/34265/13605 17765/34264/13605 +f 17736/34235/13606 17731/34230/13606 17778/34277/13606 +f 17736/34235/13606 17778/34277/13606 17781/34280/13606 +f 17750/34249/13607 17745/34244/13607 17786/34285/13607 +f 17750/34249/13607 17786/34285/13607 17789/34288/13607 +f 17702/34201/13608 17795/34294/13608 17761/34260/13608 +f 17702/34201/13608 17764/34263/13608 17795/34294/13608 +f 17724/34223/13609 17773/34272/13609 17720/34219/13609 +f 17724/34223/13609 17775/34274/13609 17773/34272/13609 +f 17738/34237/13610 17733/34232/13610 17780/34279/13610 +f 17738/34237/13610 17780/34279/13610 17783/34282/13610 +f 17752/34251/13611 17749/34248/13611 17788/34287/13611 +f 17752/34251/13611 17788/34287/13611 17790/34289/13611 +f 17712/34211/13612 17767/34266/13612 17709/34208/13612 +f 17712/34211/13612 17768/34267/13612 17767/34266/13612 +f 17728/34227/13613 17723/34222/13613 17774/34273/13613 +f 17728/34227/13613 17774/34273/13613 17777/34276/13613 +f 17821/34320/13614 17819/34318/13614 17808/34307/13614 +f 17821/34320/13614 17808/34307/13614 17810/34309/13614 +f 17816/34315/13615 17812/34311/13615 17804/34303/13615 +f 17816/34315/13615 17804/34303/13615 17802/34301/13615 +s 1 +f 17863/34362/13616 17865/34364/13616 17813/34312/13616 +s 0 +f 17863/34362/13616 17813/34312/13616 17817/34316/13616 +f 17869/34368/13617 17872/34371/13617 17818/34317/13617 +f 17869/34368/13617 17818/34317/13617 17820/34319/13617 +s 1 +f 17862/34361/13618 17858/34357/13618 17834/34333/13618 +s 0 +f 17862/34361/13618 17834/34333/13618 17832/34331/13618 +f 17855/34354/13619 17853/34352/13619 17837/34336/13619 +f 17855/34354/13619 17837/34336/13619 17839/34338/13619 +f 17829/34328/13620 17825/34324/13620 17840/34339/13620 +f 17829/34328/13620 17840/34339/13620 17844/34343/13620 +f 17824/34323/13621 17828/34327/13621 17848/34347/13621 +f 17824/34323/13621 17848/34347/13621 17850/34349/13621 +f 17849/34348/13622 17847/34346/13622 17854/34353/13622 +f 17849/34348/13622 17854/34353/13622 17856/34355/13622 +f 17845/34344/13623 17841/34340/13623 17857/34356/13623 +f 17845/34344/13623 17857/34356/13623 17861/34360/13623 +f 17803/34302/13624 17806/34305/13624 17831/34330/13624 +f 17803/34302/13624 17831/34330/13624 17833/34332/13624 +s 1 +f 17809/34308/13625 17807/34306/13625 17838/34337/13625 +s 0 +f 17809/34308/13625 17838/34337/13625 17835/34334/13625 +f 17814/34313/13596 17859/34358/13596 17830/34329/13596 +f 17814/34313/13596 17830/34329/13596 17805/34304/13596 +f 17796/34295/13616 17798/34297/13616 17866/34365/13616 +s 1 +f 17796/34295/13616 17866/34365/13616 17864/34363/13616 +s 0 +f 17799/34298/13617 17797/34296/13617 17873/34372/13617 +f 17799/34298/13617 17873/34372/13617 17870/34369/13617 +f 17868/34367/13596 17843/34342/13596 17860/34359/13596 +f 17868/34367/13596 17860/34359/13596 17815/34314/13596 +f 17842/34341/13596 17867/34366/13596 17800/34299/13596 +f 17842/34341/13596 17800/34299/13596 17826/34325/13596 +f 17871/34370/13596 17846/34345/13596 17827/34326/13596 +f 17871/34370/13596 17827/34326/13596 17801/34300/13596 +f 17846/34345/13596 17871/34370/13596 17823/34322/13596 +f 17846/34345/13596 17823/34322/13596 17852/34351/13596 +f 17811/34310/13596 17836/34335/13596 17851/34350/13596 +f 17811/34310/13596 17851/34350/13596 17822/34321/13596 +f 18000/34499/13626 18002/34501/13626 17893/34392/13626 +f 18000/34499/13626 17893/34392/13626 17891/34390/13626 +f 17892/34391/13627 17890/34389/13627 17895/34394/13627 +f 17892/34391/13627 17887/34386/13627 17890/34389/13627 +f 18006/34505/13628 18010/34509/13628 17879/34378/13628 +f 18006/34505/13628 17879/34378/13628 17875/34374/13628 +f 18003/34502/13596 17882/34381/13596 17877/34376/13596 +f 18003/34502/13596 17877/34376/13596 18008/34507/13596 +f 17983/34482/13596 17977/34476/13596 17915/34414/13596 +f 17983/34482/13596 17915/34414/13596 17913/34412/13596 +f 17995/34494/13629 17991/34490/13629 17896/34395/13629 +f 17995/34494/13629 17896/34395/13629 17904/34403/13629 +f 17988/34487/13630 17996/34495/13630 17901/34400/13630 +f 17988/34487/13630 17901/34400/13630 17899/34398/13630 +f 17999/34498/13596 17993/34492/13596 17903/34402/13596 +f 17999/34498/13596 17903/34402/13596 17902/34401/13596 +f 18018/34517/13596 18012/34511/13596 17926/34425/13596 +f 18018/34517/13596 17926/34425/13596 17924/34423/13596 +f 17979/34478/13631 17987/34486/13631 17906/34405/13631 +f 17979/34478/13631 17906/34405/13631 17916/34415/13631 +f 17984/34483/13632 17980/34479/13632 17911/34410/13632 +f 17984/34483/13632 17911/34410/13632 17909/34408/13632 +f 17968/34467/13633 17964/34463/13633 17931/34430/13633 +f 17968/34467/13633 17931/34430/13633 17941/34440/13633 +f 18015/34514/13634 18023/34522/13634 17918/34417/13634 +f 18015/34514/13634 17918/34417/13634 17928/34427/13634 +f 18020/34519/13635 18016/34515/13635 17923/34422/13635 +f 18020/34519/13635 17923/34422/13635 17921/34420/13635 +f 17958/34457/13596 17952/34451/13596 17949/34448/13596 +f 17958/34457/13596 17949/34448/13596 17947/34446/13596 +f 17975/34474/13636 17971/34470/13636 17934/34433/13636 +f 17975/34474/13636 17934/34433/13636 17932/34431/13636 +s 1 +f 17973/34472/13637 17967/34466/13637 17939/34438/13638 +f 17973/34472/13637 17939/34438/13638 17937/34436/13639 +s 0 +f 17945/34444/13640 17948/34447/13640 17950/34449/13640 +f 17945/34444/13640 17950/34449/13640 17942/34441/13640 +f 17954/34453/13641 17962/34461/13641 17943/34442/13641 +f 17954/34453/13641 17943/34442/13641 17951/34450/13641 +s 1 +f 17961/34460/13642 17957/34456/13642 17946/34445/13642 +f 17961/34460/13642 17946/34445/13642 17944/34443/13642 +s 0 +f 17933/34432/13643 17935/34434/13643 17956/34455/13643 +f 17933/34432/13643 17956/34455/13643 17960/34459/13643 +f 17940/34439/13644 17930/34429/13644 17963/34462/13644 +f 17940/34439/13644 17963/34462/13644 17955/34454/13644 +f 17936/34435/13596 17938/34437/13596 17953/34452/13596 +f 17936/34435/13596 17953/34452/13596 17959/34458/13596 +f 17925/34424/13645 17927/34426/13645 17966/34465/13645 +f 17925/34424/13646 17966/34465/13646 17972/34471/13646 +f 17920/34419/13647 17922/34421/13647 17970/34469/13647 +f 17920/34419/13647 17970/34469/13647 17974/34473/13647 +f 17929/34428/13648 17919/34418/13648 17965/34464/13648 +s 1 +f 17929/34428/13648 17965/34464/13648 17969/34468/13648 +s 0 +f 17898/34397/13649 17900/34399/13649 17981/34480/13649 +f 17898/34397/13649 17981/34480/13649 17985/34484/13649 +f 17905/34404/13650 17897/34396/13650 17986/34485/13650 +f 17905/34404/13650 17986/34485/13650 17978/34477/13650 +f 17902/34401/13596 17903/34402/13596 17976/34475/13596 +f 17902/34401/13596 17976/34475/13596 17982/34481/13596 +f 17878/34377/13596 17883/34382/13596 17992/34491/13596 +s 1 +f 17878/34377/13596 17992/34491/13596 17998/34497/13596 +s 0 +f 17874/34373/13651 17876/34375/13651 17997/34496/13651 +f 17874/34373/13651 17997/34496/13651 17989/34488/13651 +s 1 +f 17885/34384/13652 17881/34380/13652 17990/34489/13652 +f 17885/34384/13652 17990/34489/13652 17994/34493/13652 +s 0 +f 17894/34393/13596 18004/34503/13596 18009/34508/13596 +f 17894/34393/13596 18009/34508/13596 17888/34387/13596 +f 17886/34385/13653 17889/34388/13653 18011/34510/13653 +f 17886/34385/13653 18011/34510/13653 18007/34506/13653 +f 17880/34379/13654 17884/34383/13654 18005/34504/13654 +f 17880/34379/13654 18005/34504/13654 18001/34500/13654 +f 17908/34407/13655 17910/34409/13655 18017/34516/13655 +f 17908/34407/13655 18017/34516/13655 18021/34520/13655 +f 17917/34416/13656 17907/34406/13656 18022/34521/13656 +f 17917/34416/13656 18022/34521/13656 18014/34513/13656 +f 17912/34411/13596 17914/34413/13596 18013/34512/13596 +f 17912/34411/13596 18013/34512/13596 18019/34518/13596 +f 18027/34526/13657 18031/34530/13657 18033/34532/13657 +f 18027/34526/13657 18033/34532/13657 18024/34523/13657 +f 18145/34644/13597 18063/34562/13597 18143/34642/13597 +f 18145/34644/13597 18049/34548/13597 18063/34562/13597 +f 18131/34630/13596 18068/34567/13596 18125/34624/13596 +f 18131/34630/13596 18074/34573/13596 18068/34567/13596 +f 18028/34527/13658 18035/34534/13658 18025/34524/13658 +f 18028/34527/13658 18039/34538/13658 18035/34534/13658 +f 18030/34529/13596 18038/34537/13596 18026/34525/13596 +f 18030/34529/13596 18044/34543/13596 18038/34537/13596 +f 18032/34531/13659 18041/34540/13659 18029/34528/13659 +f 18032/34531/13659 18045/34544/13659 18041/34540/13659 +f 18151/34650/13660 18051/34550/13660 18147/34646/13660 +f 18151/34650/13660 18055/34554/13660 18051/34550/13660 +f 18155/34654/13596 18053/34552/13596 18149/34648/13596 +f 18155/34654/13596 18059/34558/13596 18053/34552/13596 +f 18141/34640/13661 18056/34555/13661 18153/34652/13661 +f 18141/34640/13661 18060/34559/13661 18056/34555/13661 +f 18161/34660/13597 18094/34593/13597 18159/34658/13597 +f 18161/34660/13597 18080/34579/13597 18094/34593/13597 +f 18133/34632/13662 18072/34571/13662 18129/34628/13662 +f 18133/34632/13662 18076/34575/13662 18072/34571/13662 +f 18136/34635/13597 18078/34577/13597 18134/34633/13597 +f 18136/34635/13597 18064/34563/13597 18078/34577/13597 +f 18126/34625/13663 18067/34566/13663 18138/34637/13663 +f 18126/34625/13663 18071/34570/13663 18067/34566/13663 +f 18176/34675/13597 18108/34607/13597 18173/34672/13597 +f 18176/34675/13597 18097/34596/13597 18108/34607/13597 +f 18166/34665/13664 18082/34581/13664 18162/34661/13664 +f 18166/34665/13664 18086/34585/13664 18082/34581/13664 +f 18171/34670/13596 18085/34584/13596 18165/34664/13596 +f 18171/34670/13596 18091/34590/13596 18085/34584/13596 +f 18157/34656/13665 18088/34587/13665 18169/34668/13665 +f 18157/34656/13665 18092/34591/13665 18088/34587/13665 +f 18193/34692/13596 18116/34615/13596 18191/34690/13596 +f 18193/34692/13596 18118/34617/13596 18116/34615/13596 +f 18182/34681/13666 18099/34598/13666 18178/34677/13666 +f 18182/34681/13666 18103/34602/13666 18099/34598/13666 +f 18185/34684/13596 18101/34600/13596 18180/34679/13596 +f 18185/34684/13596 18104/34603/13596 18101/34600/13596 +f 18175/34674/13667 18106/34605/13667 18187/34686/13667 +f 18175/34674/13667 18110/34609/13667 18106/34605/13667 +f 18117/34616/13668 18123/34622/13668 18114/34613/13668 +f 18117/34616/13668 18120/34619/13668 18123/34622/13668 +f 18199/34698/13669 18119/34618/13669 18195/34694/13669 +f 18199/34698/13669 18122/34621/13669 18119/34618/13669 +f 18202/34701/13597 18121/34620/13597 18196/34695/13597 +f 18202/34701/13597 18113/34612/13597 18121/34620/13597 +f 18188/34687/13670 18112/34611/13670 18200/34699/13670 +f 18188/34687/13670 18115/34614/13670 18112/34611/13670 +s 1 +f 18054/34553/13671 18139/34638/13671 18050/34549/13671 +f 18054/34553/13671 18127/34626/13671 18139/34638/13671 +s 0 +f 18048/34547/13597 18135/34634/13597 18062/34561/13597 +f 18048/34547/13597 18137/34636/13597 18135/34634/13597 +f 18061/34560/13672 18128/34627/13672 18057/34556/13672 +f 18061/34560/13672 18132/34631/13672 18128/34627/13672 +f 18058/34557/13596 18124/34623/13596 18052/34551/13596 +f 18058/34557/13596 18130/34629/13596 18124/34623/13596 +f 18046/34545/13673 18152/34651/13673 18042/34541/13673 +f 18046/34545/13673 18140/34639/13673 18152/34651/13673 +f 18043/34542/13596 18148/34647/13596 18037/34536/13596 +f 18043/34542/13596 18154/34653/13596 18148/34647/13596 +f 18040/34539/13674 18146/34645/13674 18036/34535/13674 +f 18040/34539/13674 18150/34649/13674 18146/34645/13674 +f 18034/34533/13597 18142/34641/13597 18047/34546/13597 +f 18034/34533/13597 18144/34643/13597 18142/34641/13597 +f 18077/34576/13675 18168/34667/13675 18073/34572/13675 +f 18077/34576/13675 18156/34655/13675 18168/34667/13675 +f 18075/34574/13596 18164/34663/13596 18069/34568/13596 +f 18075/34574/13596 18170/34669/13596 18164/34663/13596 +s 1 +f 18070/34569/13676 18163/34662/13676 18066/34565/13676 +f 18070/34569/13676 18167/34666/13676 18163/34662/13676 +s 0 +f 18065/34564/13597 18158/34657/13597 18079/34578/13597 +f 18065/34564/13597 18160/34659/13597 18158/34657/13597 +f 18093/34592/13677 18184/34683/13677 18089/34588/13677 +f 18093/34592/13677 18172/34671/13677 18184/34683/13677 +f 18090/34589/13596 18181/34680/13596 18084/34583/13596 +f 18090/34589/13596 18186/34685/13596 18181/34680/13596 +f 18087/34586/13678 18179/34678/13678 18083/34582/13678 +f 18087/34586/13678 18183/34682/13678 18179/34678/13678 +f 18081/34580/13597 18174/34673/13597 18095/34594/13597 +f 18081/34580/13597 18177/34676/13597 18174/34673/13597 +f 18100/34599/13679 18201/34700/13679 18096/34595/13679 +f 18100/34599/13679 18189/34688/13679 18201/34700/13679 +f 18098/34597/13597 18197/34696/13597 18109/34608/13597 +f 18098/34597/13597 18203/34702/13597 18197/34696/13597 +s 1 +f 18111/34610/13680 18194/34693/13680 18107/34606/13680 +f 18111/34610/13680 18198/34697/13680 18194/34693/13680 +s 0 +f 18105/34604/13596 18190/34689/13596 18102/34601/13596 +f 18105/34604/13596 18192/34691/13596 18190/34689/13596 +o Cube +v 42.804764 3.369680 -9.602528 +v 42.804764 3.369680 -14.602528 +v 42.804764 3.369680 -14.602528 +v 34.204765 3.369680 -9.602527 +v 34.204765 3.369680 -14.602527 +v 34.204765 3.369680 -14.602527 +v 42.804764 9.194399 -14.602528 +v 34.204765 9.194399 -14.602527 +v 19.604763 3.369680 -9.602526 +v 19.604763 3.369680 -14.602526 +v 19.604763 3.369680 -14.602526 +v 19.604763 3.369680 -14.602526 +v 34.204765 3.369680 -7.602527 +v 19.604763 3.369680 -7.602526 +v 22.804764 3.369680 -14.602526 +v 22.804764 3.369680 -14.602526 +v 22.804764 3.369680 -14.602526 +v 22.804764 9.194399 -14.602526 +v 22.804764 9.194399 -14.602526 +v 18.544764 3.369680 -9.602526 +v 18.544764 3.369680 -9.602526 +v 18.544764 3.369680 -14.602526 +v 18.544764 3.369680 -14.602526 +v 18.544764 3.369680 -14.602526 +v 18.544764 3.369680 -14.602526 +v 18.544764 3.199680 -9.602526 +v 18.544764 3.199680 -9.602526 +v 18.544764 3.199680 -14.602526 +v 18.544764 3.199680 -14.602526 +v 18.204763 3.199680 -9.602526 +v 18.204763 3.199680 -9.602526 +v 18.204763 3.199680 -14.602526 +v 18.204763 3.199680 -14.602526 +v 18.204763 3.029680 -9.602526 +v 18.204763 3.029680 -9.602526 +v 18.204763 3.029680 -14.602526 +v 18.204763 3.029680 -14.602526 +v 17.864763 3.029680 -9.602526 +v 17.864763 3.029680 -9.602526 +v 17.864763 3.029680 -14.602526 +v 17.864763 3.029680 -14.602526 +v 17.864763 2.859680 -9.602526 +v 17.864763 2.859680 -9.602526 +v 17.864763 2.859680 -14.602526 +v 17.864763 2.859680 -14.602526 +v 17.524763 2.859680 -9.602526 +v 17.524763 2.859680 -9.602526 +v 17.524763 2.859680 -14.602526 +v 17.524763 2.859680 -14.602526 +v 17.524763 2.689680 -9.602526 +v 17.524763 2.689680 -9.602526 +v 17.524763 2.689680 -14.602526 +v 17.524763 2.689680 -14.602526 +v 17.184763 2.689680 -9.602526 +v 17.184763 2.689680 -9.602526 +v 17.184763 2.689680 -14.602526 +v 17.184763 2.689680 -14.602526 +v 17.184763 2.519680 -9.602526 +v 17.184763 2.519680 -9.602526 +v 17.184763 2.519680 -14.602526 +v 17.184763 2.519680 -14.602526 +v 15.684763 2.519680 -9.602526 +v 15.684763 2.519680 -9.602526 +v 15.684763 2.519680 -14.602526 +v 15.684763 2.519680 -14.602526 +v 15.684763 2.519680 -14.602526 +v 15.684763 2.349680 -9.602526 +v 15.684763 2.349680 -9.602526 +v 15.684763 2.349680 -14.602526 +v 15.684763 2.349680 -14.602526 +v 15.344765 2.349680 -9.602526 +v 15.344765 2.349680 -9.602526 +v 15.344765 2.349680 -14.602526 +v 15.344765 2.349680 -14.602526 +v 15.344765 2.179680 -9.602526 +v 15.344765 2.179680 -9.602526 +v 15.344765 2.179680 -14.602526 +v 15.344765 2.179680 -14.602526 +v 15.004765 2.179680 -9.602526 +v 15.004765 2.179680 -9.602526 +v 15.004765 2.179680 -14.602526 +v 15.004765 2.179680 -14.602526 +v 15.004765 2.009680 -9.602526 +v 15.004765 2.009680 -9.602526 +v 15.004765 2.009680 -14.602526 +v 15.004765 2.009680 -14.602526 +v 14.664764 2.009680 -9.602526 +v 14.664764 2.009680 -9.602526 +v 14.664764 2.009680 -14.602526 +v 14.664764 2.009680 -14.602526 +v 14.664764 1.839680 -9.602526 +v 14.664764 1.839680 -9.602526 +v 14.664764 1.839680 -14.602526 +v 14.664764 1.839680 -14.602526 +v 14.324764 1.839680 -9.602526 +v 14.324764 1.839680 -9.602526 +v 14.324764 1.839680 -14.602526 +v 14.324764 1.839680 -14.602526 +v 14.324764 1.669680 -9.602526 +v 14.324764 1.669680 -9.602526 +v 14.324764 1.669680 -14.602526 +v 14.324764 1.669680 -14.602526 +v 14.324764 1.669680 -14.602526 +v 12.824764 1.669680 -9.602525 +v 12.824764 1.669680 -9.602525 +v 12.824764 1.669680 -14.602525 +v 12.824764 1.669680 -14.602525 +v 12.824764 1.669680 -14.602525 +v 12.824764 1.669680 -14.602525 +v 12.824764 1.499680 -9.602525 +v 12.824764 1.499680 -9.602525 +v 12.824764 1.499680 -14.602525 +v 12.824764 1.499680 -14.602525 +v 12.484764 1.499680 -9.602525 +v 12.484764 1.499680 -9.602525 +v 12.484764 1.499680 -14.602525 +v 12.484764 1.499680 -14.602525 +v 12.484764 1.329680 -9.602525 +v 12.484764 1.329680 -9.602525 +v 12.484764 1.329680 -14.602525 +v 12.484764 1.329680 -14.602525 +v 12.144764 1.329680 -9.602525 +v 12.144764 1.329680 -9.602525 +v 12.144764 1.329680 -14.602525 +v 12.144764 1.329680 -14.602525 +v 12.144764 1.159680 -9.602525 +v 12.144764 1.159680 -9.602525 +v 12.144764 1.159680 -14.602525 +v 12.144764 1.159680 -14.602525 +v 11.804764 1.159680 -9.602525 +v 11.804764 1.159680 -9.602525 +v 11.804764 1.159680 -14.602525 +v 11.804764 1.159680 -14.602525 +v 11.804764 0.989680 -9.602525 +v 11.804764 0.989680 -9.602525 +v 11.804764 0.989680 -14.602525 +v 11.804764 0.989680 -14.602525 +v 11.464764 0.989680 -9.602525 +v 11.464764 0.989680 -9.602525 +v 11.464764 0.989680 -14.602525 +v 11.464764 0.989680 -14.602525 +v 11.464764 0.819680 -9.602525 +v 11.464764 0.819680 -9.602525 +v 11.464764 0.819680 -14.602525 +v 11.464764 0.819680 -14.602525 +v 11.464764 0.819680 -14.602525 +v 9.964764 0.819680 -9.602525 +v 9.964764 0.819680 -9.602525 +v 9.964764 0.819680 -14.602525 +v 9.964764 0.819680 -14.602525 +v 9.964764 0.819680 -14.602525 +v 9.964764 0.819680 -14.602525 +v 9.964764 0.649680 -9.602525 +v 9.964764 0.649680 -9.602525 +v 9.964764 0.649680 -14.602525 +v 9.964764 0.649680 -14.602525 +v 9.624763 0.649680 -9.602525 +v 9.624763 0.649680 -9.602525 +v 9.624763 0.649680 -14.602525 +v 9.624763 0.649680 -14.602525 +v 9.624763 0.479680 -9.602525 +v 9.624763 0.479680 -9.602525 +v 9.624763 0.479680 -14.602525 +v 9.624763 0.479680 -14.602525 +v 9.284798 0.479680 -9.602525 +v 9.284798 0.479680 -9.602525 +v 9.284798 0.479680 -14.602525 +v 9.284798 0.479680 -14.602525 +v 9.284798 0.309680 -9.602525 +v 9.284798 0.309680 -9.602525 +v 9.284798 0.309680 -14.602525 +v 9.284798 0.309680 -14.602525 +v 8.944798 0.309680 -9.602525 +v 8.944798 0.309680 -9.602525 +v 8.944798 0.309680 -14.602525 +v 8.944798 0.309680 -14.602525 +v 8.944798 0.139680 -9.602525 +v 8.944798 0.139680 -9.602525 +v 8.944798 0.139680 -14.602525 +v 8.944798 0.139680 -14.602525 +v 8.604763 0.139680 -9.602525 +v 8.604763 0.139680 -9.602525 +v 8.604763 0.139680 -14.602525 +v 8.604763 0.139680 -14.602525 +v 8.604763 -0.030320 -9.602525 +v 8.604763 -0.030320 -9.602525 +v 8.604763 -0.030320 -14.602525 +v 8.604763 -0.030320 -14.602525 +v 8.456161 -0.030320 -14.602525 +v 8.456161 -0.030320 -9.602525 +v 16.844765 2.519680 -9.602526 +v 16.844765 2.519680 -9.602526 +v 16.844765 2.519680 -9.602526 +v 16.844765 3.369680 -9.602526 +v 16.844765 3.369680 -9.602526 +v 16.844765 3.369680 -9.602526 +v 19.605751 2.519680 -9.602526 +v 19.605751 3.369680 -9.602526 +v 19.605751 3.369680 -9.602526 +v 16.844765 3.369680 -9.102526 +v 16.844765 3.369680 -9.102526 +v 19.605751 3.369680 -9.102526 +v 19.605751 3.369680 -9.102526 +v 16.874399 3.094612 -9.102526 +v 16.874399 3.094612 -9.102526 +v 19.605751 3.094612 -9.102526 +v 19.605751 3.094612 -9.102526 +v 19.605751 3.094612 -9.102526 +v 16.844765 2.525565 -9.102526 +v 16.844765 2.525565 -9.102526 +v 16.844765 2.525565 -9.102526 +v 16.844765 3.369680 -9.102526 +v 16.844765 3.369680 -9.102526 +v 16.844765 3.369680 -9.102526 +v 16.874399 3.094612 -7.602525 +v 19.605751 3.094612 -7.602526 +v 19.605751 3.094612 -7.602526 +v 19.605751 3.094612 -7.602526 +v 19.605751 3.369680 -9.102526 +v 19.605751 3.369680 -7.602526 +v 19.605751 3.369680 -7.602526 +v 19.605751 -0.030320 -7.602526 +v 19.605751 -0.030320 -7.602526 +v 19.605751 3.369680 -7.602526 +v 19.605751 3.369680 -7.602526 +v 7.004765 -0.030320 -7.602524 +v 8.725864 3.369680 -7.602525 +v 8.725864 3.369680 -7.602525 +v 16.844765 2.525565 -7.599903 +v 16.844765 3.369680 -7.599903 +v 16.844765 3.369680 -7.599903 +v 16.844765 2.519680 -9.602526 +v 16.844765 2.519680 -9.602526 +v 16.844765 2.519680 -9.602526 +v 16.844765 2.519680 -9.602526 +v 16.844765 2.519680 -9.602526 +v 16.844765 2.519680 -9.602526 +v 16.844765 3.369680 -9.602526 +v 16.844765 3.369680 -9.602526 +v 16.844765 2.519680 -9.102526 +v 16.844765 2.519680 -9.102526 +v 16.844765 2.519680 -9.102526 +v 16.844765 2.519680 -9.102526 +v 16.844765 2.519680 -9.102526 +v 16.844765 2.519680 -9.102526 +v 16.844765 3.369680 -9.102526 +v 16.844765 3.369680 -9.102526 +v 17.344765 3.369680 -9.102526 +v 17.344765 3.369680 -9.102526 +v 17.344765 3.369680 -7.599903 +v 17.344765 3.369680 -7.599903 +v 17.344765 2.923074 -9.102526 +v 17.344765 2.923074 -7.599903 +v 16.844765 1.669680 -9.602526 +v 16.844765 1.669680 -9.602526 +v 16.844765 1.669680 -9.102526 +v 16.844765 1.669680 -9.102526 +v 13.994764 2.519680 -9.102525 +v 13.994764 2.519680 -9.102525 +v 13.994764 2.519680 -9.102525 +v 13.994764 2.519680 -9.102525 +v 13.994764 2.519680 -9.102525 +v 13.994764 2.519680 -9.602525 +v 13.994764 2.519680 -9.602525 +v 13.994764 2.519680 -9.602525 +v 13.994764 0.819680 -9.102525 +v 13.994764 0.819680 -9.102525 +v 13.994764 0.819680 -9.102525 +v 13.994764 0.819680 -9.102525 +v 13.994764 0.819680 -9.102525 +v 13.994764 0.819680 -9.602525 +v 13.994764 0.819680 -9.602525 +v 13.994764 0.819680 -9.602525 +v 13.994764 0.819680 -9.602525 +v 16.844765 2.649680 -9.102526 +v 16.844765 2.649680 -9.102526 +v 16.844765 2.649680 -9.102526 +v 16.844765 2.649680 -9.602526 +v 16.844765 2.649680 -9.602526 +v 16.844765 2.649680 -9.602526 +v 13.994764 2.649680 -9.102525 +v 13.994764 2.649680 -9.102525 +v 13.994764 2.649680 -9.102525 +v 13.994764 2.649680 -9.102525 +v 13.994764 2.649680 -9.602525 +v 13.994764 2.649680 -9.602525 +v 13.994764 2.649680 -9.602525 +v 11.144764 0.819680 -9.102525 +v 11.144764 0.819680 -9.102525 +v 11.144764 0.819680 -9.102525 +v 11.144764 0.819680 -9.102525 +v 11.144764 0.819680 -9.102525 +v 11.144764 0.819680 -9.102525 +v 11.144764 0.819680 -9.602525 +v 11.144764 0.819680 -9.602525 +v 11.144764 0.819680 -9.602525 +v 11.144764 0.819680 -9.602525 +v 13.994764 1.669680 -9.102525 +v 13.994764 1.669680 -9.102525 +v 13.994764 1.669680 -9.102525 +v 13.994764 1.669680 -9.102525 +v 13.994764 1.669680 -9.602525 +v 13.994764 1.669680 -9.602525 +v 13.994764 1.669680 -9.602525 +v 11.144764 1.669680 -9.102525 +v 11.144764 1.669680 -9.102525 +v 11.144764 1.669680 -9.102525 +v 11.144764 1.669680 -9.102525 +v 11.144764 1.669680 -9.602525 +v 11.144764 1.669680 -9.602525 +v 11.144764 1.669680 -9.602525 +v 11.144764 -0.030320 -9.102525 +v 11.144764 -0.030320 -9.102525 +v 11.144764 -0.030320 -9.602525 +v 11.144764 -0.030320 -9.602525 +v 8.294765 0.819680 -9.102525 +v 8.294765 0.819680 -9.102525 +v 8.294765 0.819680 -9.102525 +v 8.294765 0.819680 -9.102525 +v 8.294765 0.819680 -9.602525 +v 8.294765 0.819680 -9.602525 +v 8.294765 -0.030320 -9.102525 +v 8.294765 -0.030320 -9.102525 +v 8.294765 -0.030320 -9.102525 +v 8.294765 -0.030320 -9.602525 +v 8.294765 -0.030320 -9.602525 +v 8.294765 -0.030320 -9.602525 +v 11.144764 0.969680 -9.102525 +v 11.144764 0.969680 -9.102525 +v 11.144764 0.969680 -9.102525 +v 11.144764 0.969680 -9.602525 +v 11.144764 0.969680 -9.602525 +v 11.144764 0.969680 -9.602525 +v 8.294765 0.969680 -9.102525 +v 8.294765 0.969680 -9.102525 +v 8.294765 0.969680 -9.102525 +v 8.294765 0.969680 -9.102525 +v 8.294765 0.969680 -9.102525 +v 8.294765 0.969680 -9.602525 +v 8.294765 0.969680 -9.602525 +v 8.294765 0.969680 -9.602525 +v 13.994764 1.819680 -9.102525 +v 13.994764 1.819680 -9.102525 +v 13.994764 1.819680 -9.102525 +v 13.994764 1.819680 -9.602525 +v 13.994764 1.819680 -9.602525 +v 13.994764 1.819680 -9.602525 +v 11.144764 1.819680 -9.102525 +v 11.144764 1.819680 -9.102525 +v 11.144764 1.819680 -9.102525 +v 11.144764 1.819680 -9.102525 +v 11.144764 1.819680 -9.102525 +v 11.144764 1.819680 -9.602525 +v 11.144764 1.819680 -9.602525 +v 11.144764 1.819680 -9.602525 +v 16.844765 2.519680 -9.102526 +v 16.844765 2.519680 -9.102526 +v 14.284077 2.519680 -9.102526 +v 14.284077 2.519680 -9.102526 +v 16.844765 2.519680 -7.598699 +v 14.284077 2.519680 -7.598699 +v 13.994764 1.669680 -9.102525 +v 13.994764 1.669680 -9.102525 +v 11.328508 1.669680 -9.102525 +v 11.328508 1.669680 -9.102525 +v 13.994764 1.669680 -7.598854 +v 11.328508 1.669680 -7.598854 +v 11.144764 0.819680 -9.102525 +v 11.144764 0.819680 -9.102525 +v 8.583519 0.819680 -9.102525 +v 8.583519 0.819680 -9.102525 +v 11.144764 0.819680 -7.601265 +v 8.583519 0.819680 -7.601265 +v 13.994764 2.519680 -7.603288 +v 13.994764 2.519680 -7.603288 +v 13.994764 0.819680 -7.603288 +v 13.994764 2.649680 -7.603288 +v 13.994764 2.649680 -7.603288 +v 14.494764 2.649680 -9.102526 +v 14.494764 2.649680 -9.102526 +v 14.494764 2.649680 -7.603288 +v 14.494764 2.649680 -7.603288 +v 14.494764 2.489033 -9.102526 +v 14.494764 2.489033 -7.603288 +v 11.144764 0.819680 -7.587424 +v 11.144764 1.669680 -7.587424 +v 11.144764 1.669680 -7.587424 +v 11.144764 1.819680 -7.587424 +v 11.144764 1.819680 -7.587424 +v 8.294765 0.819680 -7.561437 +v 8.294765 0.819680 -7.561437 +v 8.294765 -0.030320 -7.561437 +v 8.294765 0.969680 -7.561437 +v 8.294765 0.969680 -7.561437 +v 11.644764 1.819680 -9.102525 +v 11.644764 1.819680 -9.102525 +v 11.644764 1.819680 -7.587424 +v 11.644764 1.819680 -7.587424 +v 11.644764 1.618522 -9.102525 +v 11.644764 1.618522 -7.587424 +v 8.794765 0.969680 -9.102525 +v 8.794765 0.969680 -9.102525 +v 8.794765 0.969680 -7.561437 +v 8.794765 0.969680 -7.561437 +v 8.794765 0.760224 -9.102525 +v 8.794765 0.760224 -7.561437 +v 19.604763 2.519680 -14.602526 +v 19.604763 2.519680 -14.602526 +v 18.544764 2.519680 -14.602526 +v 18.544764 2.519680 -14.602526 +v 18.544764 2.519680 -14.602526 +v 19.604763 3.539680 -14.602526 +v 19.604763 2.519680 -15.352526 +v 19.604763 2.519680 -15.352526 +v 16.844765 3.369680 -14.602526 +v 16.844765 2.519680 -14.602526 +v 16.844765 2.519680 -14.602526 +v 16.844765 2.519680 -15.352526 +v 16.844765 2.519680 -15.352526 +v 19.604763 2.513267 -15.352526 +v 16.844765 3.539680 -14.602526 +v 19.604763 3.539680 -15.352526 +v 19.604763 3.539680 -15.352526 +v 19.604763 3.539680 -15.352526 +v 16.844765 3.539680 -15.352526 +v 16.844765 3.539680 -15.352526 +v 16.844765 3.539680 -15.352526 +v 19.604763 3.539680 -14.602526 +v 19.604763 3.539680 -14.602526 +v 16.844765 3.539680 -14.602526 +v 16.844765 3.539680 -14.602526 +v 19.604763 2.513267 -14.602526 +v 16.844765 2.474328 -15.352526 +v 16.844765 2.474328 -14.602526 +v 17.184763 2.519680 -15.352526 +v 17.184763 2.519680 -15.352526 +v 15.684763 2.519680 -15.352526 +v 15.684763 2.519680 -15.352526 +v 15.684763 2.519680 -15.352526 +v 17.184761 2.519680 -24.352526 +v 17.184761 2.519680 -24.352526 +v 17.184761 2.519680 -24.352526 +v 15.684761 2.519680 -24.352526 +v 15.684761 2.519680 -24.352526 +v 15.684761 2.519680 -24.352526 +v 17.184763 2.949680 -15.352526 +v 17.184763 2.949680 -15.352526 +v 17.184761 2.949680 -24.352526 +v 17.184761 2.949680 -24.352526 +v 17.184761 2.949680 -24.352526 +v 18.684763 2.949680 -15.352526 +v 18.684763 2.949680 -15.352526 +v 18.684761 2.949680 -24.352526 +v 18.684761 2.949680 -24.352526 +v 18.684761 2.949680 -24.352526 +v 14.186899 1.669680 -15.352526 +v 14.186899 1.669680 -15.352526 +v 14.186899 1.669680 -15.352526 +v 12.832014 1.669680 -15.352525 +v 12.832014 1.669680 -15.352525 +v 12.832014 1.669680 -15.352525 +v 12.832014 1.669680 -15.352525 +v 14.186899 1.669680 -22.852524 +v 12.832014 1.669680 -22.852524 +v 11.464764 0.799680 -15.352525 +v 11.464764 0.799680 -15.352525 +v 11.464764 0.799680 -15.352525 +v 9.964764 0.819680 -15.346748 +v 9.964764 0.819680 -15.346748 +v 9.964764 0.819680 -15.346748 +v 9.964764 0.819680 -15.346748 +v 11.464762 0.799680 -28.852526 +v 11.464762 0.799680 -28.852526 +v 11.464762 0.799680 -28.852526 +v 9.964764 0.819680 -28.852524 +v 9.964764 0.819680 -28.852524 +v 9.964764 0.819680 -28.852524 +v 15.684763 2.089680 -15.352526 +v 15.684763 2.089680 -15.352526 +v 15.684761 2.089680 -24.352526 +v 17.184761 2.089680 -24.352526 +v 18.684761 2.089680 -24.352526 +v 17.184761 2.089680 -24.352526 +v 15.684761 2.089680 -24.352526 +v 9.964764 0.389680 -15.346748 +v 9.964764 0.389680 -15.346748 +v 18.684763 3.539680 -15.352526 +v 18.684763 3.539680 -15.352526 +v 18.684761 3.539680 -24.352526 +v 18.684761 3.539680 -24.352526 +v 19.604763 3.539680 -15.352526 +v 19.604761 3.539680 -24.352526 +v 19.604761 3.539680 -24.352526 +v 16.024763 2.519680 -14.602526 +v 16.024763 2.519680 -14.602526 +v 16.024763 2.519680 -15.352526 +v 16.024763 2.519680 -15.352526 +v 16.024763 2.689680 -14.602526 +v 16.024763 2.689680 -14.602526 +v 16.024763 2.689680 -14.602526 +v 16.024763 2.689680 -15.352526 +v 16.024763 2.689680 -15.352526 +v 16.024763 2.689680 -15.352526 +v 13.984764 2.689680 -14.602525 +v 13.984764 2.689680 -14.602525 +v 13.984764 2.689680 -14.602525 +v 13.984764 2.689680 -15.352525 +v 13.984764 2.689680 -15.352525 +v 13.984764 2.689680 -15.352525 +v 13.984764 1.653501 -14.602525 +v 13.984764 1.653501 -15.352525 +v 16.024763 1.646168 -14.602526 +v 13.984764 1.646168 -14.602525 +v 16.024763 1.662800 -15.352526 +v 13.984764 1.662800 -15.352525 +v 13.164764 1.669680 -14.602525 +v 13.164764 1.669680 -14.602525 +v 13.164764 1.669680 -15.352525 +v 13.164764 1.669680 -15.352525 +v 13.164764 1.839680 -14.602525 +v 13.164764 1.839680 -14.602525 +v 13.164764 1.839680 -14.602525 +v 13.164764 1.839680 -15.352525 +v 13.164764 1.839680 -15.352525 +v 13.164764 1.839680 -15.352525 +v 11.124763 1.839680 -14.602525 +v 11.124763 1.839680 -14.602525 +v 11.124763 1.839680 -14.602525 +v 11.124763 1.839680 -15.352525 +v 11.124763 1.839680 -15.352525 +v 11.124763 1.839680 -15.352525 +v 11.124763 0.775057 -14.602525 +v 11.124763 0.775057 -15.352525 +v 13.164764 0.809098 -15.352525 +v 11.124763 0.809098 -15.352525 +v 13.164764 0.771243 -14.602525 +v 11.124763 0.771243 -14.602525 +v 10.304764 0.819680 -14.602525 +v 10.304764 0.819680 -14.602525 +v 10.304764 0.819680 -15.352525 +v 10.304764 0.819680 -15.352525 +v 10.304764 0.989680 -14.602525 +v 10.304764 0.989680 -14.602525 +v 10.304764 0.989680 -14.602525 +v 10.304764 0.989680 -15.352525 +v 10.304764 0.989680 -15.352525 +v 10.304764 0.989680 -15.352525 +v 8.264763 0.989680 -14.602525 +v 8.264763 0.989680 -14.602525 +v 8.264763 0.989680 -14.602525 +v 8.264763 0.989680 -15.352525 +v 8.264763 0.989680 -15.352525 +v 8.264763 0.989680 -15.352525 +v 8.264763 -0.030320 -14.602525 +v 8.264763 -0.030320 -15.352525 +v 10.304764 -0.030320 -14.602525 +v 8.264763 -0.030320 -14.602525 +v 10.304764 -0.030320 -15.352525 +v 8.264763 -0.030320 -15.352525 +v 8.464764 0.389680 -15.346747 +v 8.464764 0.389680 -15.346747 +v 9.964764 0.389680 -16.852524 +v 8.464764 0.389680 -16.852524 +v 8.464764 0.389680 -16.852524 +v 8.464764 -0.030320 -15.346747 +v 8.464764 -0.030320 -15.346747 +v 11.464762 1.229680 -24.352524 +v 8.464764 0.389680 -28.852524 +v 8.464764 0.389680 -28.852524 +v 8.464764 0.389680 -28.852524 +v 8.464764 -0.030320 -28.852524 +v 8.464764 -0.030320 -28.852524 +v 8.464764 -0.030320 -28.852524 +v 8.464764 -0.030320 -28.852524 +v 9.964764 0.389680 -28.852524 +v 9.964764 0.389680 -28.852524 +v 9.964764 0.389680 -28.852524 +v 9.964764 -0.030320 -28.852524 +v 9.964764 -0.030320 -28.852524 +v 12.816628 1.229680 -24.352524 +v 9.964764 -0.030320 -30.352524 +v 9.964764 -0.030320 -30.352524 +v 8.464764 0.389680 -24.352524 +v 9.964764 0.389680 -24.352524 +v 8.464764 0.389680 -22.852524 +v 9.964764 0.389680 -22.852524 +v 8.464764 0.389680 -18.352524 +v 9.964764 0.389680 -18.352524 +v 9.964764 0.819680 -28.852524 +v 9.964764 0.819680 -30.352524 +v 9.964764 0.819680 -30.352524 +v 9.964764 0.819680 -30.352524 +v 11.464766 -0.030320 -30.352526 +v 11.464766 -0.030320 -30.352526 +v 11.464766 0.819680 -30.352526 +v 11.464766 0.819680 -30.352526 +v 11.464766 0.819680 -30.352526 +v 14.184763 2.089680 -15.352526 +v 14.184763 2.089680 -15.352526 +v 15.684763 2.089680 -18.352526 +v 14.184763 2.089680 -18.352526 +v 15.684763 2.089680 -19.852526 +v 14.184763 2.089680 -19.852526 +v 15.684761 2.089680 -25.852526 +v 15.684761 2.089680 -25.852526 +v 14.184761 2.089680 -25.852524 +v 14.184761 2.089680 -25.852524 +v 14.184761 2.089680 -25.852524 +v 15.684761 1.659680 -25.852526 +v 15.684761 1.659680 -25.852526 +v 15.684761 1.659680 -25.852526 +v 14.184761 1.659680 -25.852524 +v 14.184761 1.659680 -25.852524 +v 14.184761 1.659680 -25.852524 +v 15.684761 1.659680 -27.352526 +v 15.684761 1.659680 -27.352526 +v 15.684761 1.659680 -27.352526 +v 15.684761 1.659680 -27.352526 +v 14.184761 1.659680 -27.352524 +v 14.184761 1.659680 -27.352524 +v 15.684761 1.229680 -27.352526 +v 15.684761 1.229680 -27.352526 +v 15.684761 1.229680 -27.352526 +v 14.184761 1.229680 -27.352524 +v 14.184761 1.229680 -27.352524 +v 15.684761 1.229680 -30.352526 +v 15.684761 1.229680 -30.352526 +v 14.184761 1.229680 -30.352526 +v 14.184761 1.229680 -30.352526 +v 14.184761 1.229680 -30.352526 +v 15.684761 0.799680 -30.352526 +v 15.684761 0.799680 -30.352526 +v 14.184761 0.799680 -30.352526 +v 14.184761 0.799680 -30.352526 +v 14.184761 0.799680 -30.352526 +v 15.684761 0.799680 -31.852526 +v 15.684761 0.799680 -31.852526 +v 15.684761 0.799680 -31.852526 +v 14.184761 0.799680 -31.852526 +v 15.684761 -0.030320 -31.852526 +v 15.684761 -0.030320 -31.852526 +v 18.684761 1.659680 -25.852526 +v 15.684761 0.799680 -33.352524 +v 15.684761 0.799680 -33.352524 +v 15.684761 0.799680 -33.352524 +v 15.684761 -0.030320 -33.352524 +v 15.684761 -0.030320 -33.352524 +v 17.184761 0.799680 -33.352524 +v 17.184761 0.799680 -33.352524 +v 17.184761 0.799680 -33.352524 +v 17.184761 -0.030320 -33.352524 +v 17.184761 -0.030320 -33.352524 +v 15.684761 0.799680 -30.352526 +v 15.684761 0.799680 -30.352526 +v 17.184761 0.799680 -30.352526 +v 17.184761 0.799680 -30.352526 +v 17.184761 0.799680 -31.852526 +v 17.184761 0.799680 -31.852526 +v 17.184761 -0.030320 -31.852526 +v 17.184761 -0.030320 -31.852526 +v 18.684761 0.799680 -31.852526 +v 18.684761 -0.030320 -31.852526 +v 19.604761 3.539680 -33.352524 +v 18.684761 3.539680 -24.352526 +v 18.684761 3.539680 -24.352526 +v 18.684761 3.539680 -33.352524 +v 18.684761 3.539680 -33.352524 +v 18.684761 -0.030320 -24.352526 +v 18.684761 -0.030320 -33.352524 +v 17.184761 1.659680 -25.852526 +v 17.184761 1.659680 -25.852526 +v 17.184761 1.659680 -27.352526 +v 15.684761 2.089680 -25.852526 +v 15.684761 2.089680 -25.852526 +v 17.184761 2.089680 -25.852526 +v 17.184761 2.089680 -25.852526 +v 14.184761 1.229680 -28.852526 +v 14.184761 1.229680 -28.852526 +v 12.819805 0.799680 -31.852526 +v 12.819805 0.799680 -31.852526 +v 14.184761 0.799680 -28.852526 +v 14.184761 0.799680 -28.852526 +v 12.819805 0.799680 -28.852526 +v 12.819805 0.799680 -28.852526 +v 12.819805 0.799680 -28.852526 +v 12.819805 1.229680 -28.852526 +v 12.819805 1.229680 -28.852526 +v 12.819805 1.229680 -28.852526 +v 14.184761 1.229680 -27.352524 +v 14.184761 1.229680 -27.352524 +v 12.828304 1.229680 -27.352524 +v 12.828304 1.229680 -27.352524 +v 12.828304 1.229680 -27.352524 +v 14.184761 1.659680 -27.352524 +v 14.184761 1.659680 -27.352524 +v 12.828304 1.659680 -27.352524 +v 12.828304 1.659680 -27.352524 +v 12.828304 1.659680 -27.352524 +v 14.184761 1.659680 -25.852524 +v 12.821054 1.659680 -25.852524 +v 14.184761 1.229680 -28.852526 +v 14.184761 0.799680 -28.852526 +v 11.464762 1.229680 -28.852526 +v 11.464762 1.229680 -28.852526 +v 11.464762 1.229680 -28.852526 +v 11.464762 1.229680 -27.352524 +v 12.819805 0.799680 -28.852526 +v 12.816593 1.229680 -24.552525 +v 12.816593 1.229680 -24.552525 +v 11.464727 1.229680 -24.552525 +v 11.464727 1.229680 -24.552525 +v 11.464762 0.799680 -28.852526 +v 11.464764 1.229680 -16.852524 +v 12.816629 1.229680 -16.852526 +v 11.464766 -0.030320 -31.852526 +v 11.464766 -0.030320 -31.852526 +v 11.464766 0.819680 -31.852526 +v 11.464766 0.819680 -31.852526 +v 11.464766 0.819680 -31.852526 +v 18.684761 2.089680 -25.852526 +v 18.684761 2.089680 -25.852526 +v 15.684761 1.229680 -30.352526 +v 17.184761 1.229680 -30.352526 +v 15.684761 1.659680 -28.852526 +v 15.684761 1.659680 -28.852526 +v 15.684761 1.659680 -28.852526 +v 15.684761 1.659680 -28.852526 +v 15.684761 1.229680 -28.852526 +v 15.684761 1.229680 -28.852526 +v 18.684761 1.659680 -28.852526 +v 18.684761 1.659680 -28.852526 +v 18.684761 1.229680 -28.852526 +v 18.684761 0.799680 -30.352526 +v 18.684761 1.229680 -30.352526 +v -14.335236 -0.030320 -28.852522 +v -14.335236 -0.030320 -28.852522 +v 8.464764 -0.030320 -7.402525 +v -14.335236 -0.030320 -7.402523 +v -14.335236 -0.030320 -7.402523 +v -14.359970 3.369680 -7.602523 +v 8.725849 3.369680 -9.337568 +v -14.359970 3.369680 -9.337566 +v 8.729656 2.869680 -9.352525 +v 8.729656 2.869680 -9.352525 +v 8.729656 2.869680 -9.352525 +v 8.729656 2.869680 -9.352525 +v -14.359970 2.869680 -9.352523 +v -14.359970 2.869680 -9.352523 +v -14.359970 2.869680 -9.352523 +v -14.359970 2.869680 -9.352523 +v 8.642883 2.869680 -9.102525 +v 8.642883 2.869680 -9.102525 +v -14.359970 2.869680 -9.102523 +v -14.359970 2.869680 -9.102523 +v 8.642883 3.372278 -9.102525 +v -14.359970 3.372278 -9.102523 +v -14.359970 2.869680 -7.588808 +v -14.359970 2.869680 -7.588808 +v 8.729656 2.869680 -7.593173 +v 8.729656 2.869680 -7.593173 +v 8.489220 2.869680 -9.352525 +v 8.489220 2.869680 -9.352525 +v 8.489220 2.869680 -7.593173 +v 8.489220 2.869680 -7.593173 +v 8.489220 3.369553 -9.352525 +v 8.489220 3.369553 -7.593173 +v -14.158604 2.869680 -9.352523 +v -14.158604 2.869680 -9.352523 +v -14.158604 2.869680 -7.588808 +v -14.158604 2.869680 -7.588808 +v -14.158604 3.372111 -9.352523 +v -14.158604 3.372111 -7.588808 +v 8.464760 -0.030320 -39.852524 +v -14.335239 -0.030320 -39.852524 +v 11.464762 0.799680 -28.852526 +v 11.464762 0.799680 -28.852526 +v 9.964764 0.819680 -28.852524 +v 9.964764 0.819680 -28.852524 +v 9.964764 0.819680 -28.852524 +v 12.819805 0.799680 -31.852526 +v 12.819805 0.799680 -31.852526 +v 12.819805 0.799680 -28.852526 +v 12.819805 0.799680 -28.852526 +v 12.819805 0.499680 -28.852526 +v 11.464762 0.499680 -28.852526 +v -23.195236 -0.030320 -28.852522 +v -23.195236 -0.030320 -7.402522 +v -23.195236 -0.030320 -39.852524 +v 9.964764 0.389680 -17.052525 +v 9.964764 0.389680 -17.052525 +v 8.464764 0.389680 -17.052525 +v 8.464764 0.389680 -17.052525 +v 8.464764 0.389680 -18.152525 +v 8.464764 0.389680 -18.152525 +v 9.964764 0.389680 -18.152525 +v 9.964764 0.389680 -18.152525 +v 8.464764 0.089680 -18.152525 +v 9.964764 0.089680 -18.152525 +v 9.964764 0.089680 -17.052525 +v 9.964764 0.089680 -17.052525 +v 9.964764 0.089680 -17.052525 +v 8.664764 0.089680 -17.052525 +v 8.664764 0.089680 -17.052525 +v 8.664764 0.089680 -17.052525 +v 9.964764 0.089680 -18.152525 +v 9.964764 0.089680 -18.152525 +v 8.664764 0.089680 -18.152525 +v 8.664764 0.089680 -18.152525 +v 9.964764 0.389680 -17.052525 +v 9.964764 0.389680 -18.152525 +v 8.464764 0.389680 -16.852524 +v 8.464764 0.389680 -28.852524 +v 8.464764 0.389680 -28.852524 +v 8.664764 0.389680 -17.052525 +v 8.664764 0.389680 -17.052525 +v 8.664764 0.389680 -18.152525 +v 8.664764 0.389680 -18.152525 +v 8.464764 0.389680 -17.052525 +v 8.464764 0.389680 -18.152525 +v 11.464729 1.229680 -16.652525 +v 11.464729 1.229680 -16.652525 +v 12.816595 1.229680 -16.652525 +v 12.816595 1.229680 -16.652525 +v 11.664764 0.929680 -16.652525 +v 11.664764 0.929680 -16.652525 +v 11.664764 0.929680 -16.652525 +v 12.816595 0.929680 -16.652525 +v 12.816595 0.929680 -16.652525 +v 12.816595 0.929680 -16.652525 +v 11.664764 0.929680 -15.552525 +v 11.664764 0.929680 -15.552525 +v 11.664764 0.929680 -15.552525 +v 12.816595 0.929680 -15.552525 +v 12.816595 0.929680 -15.552525 +v 12.816595 0.929680 -15.552525 +v 11.464729 0.929680 -15.552525 +v 11.464729 0.929680 -15.552525 +v 12.816595 0.929680 -15.552525 +v 12.816595 0.929680 -15.552525 +v 11.464729 1.229680 -15.552525 +v 11.464729 1.229680 -15.552525 +v 12.816595 1.229680 -15.552525 +v 12.816595 1.229680 -15.552525 +v 11.464729 1.229680 -15.552525 +v 11.464729 1.229680 -15.552525 +v 12.816595 1.229680 -15.552525 +v 12.816595 1.229680 -15.552525 +v 11.464729 1.229680 -15.352525 +v 11.464729 1.229680 -15.352525 +v 12.816595 1.229680 -15.352525 +v 12.816595 1.229680 -15.352525 +v 12.816595 1.229680 -16.652525 +v 12.816595 1.229680 -15.552525 +v 11.664764 1.229680 -16.652525 +v 11.664764 1.229680 -16.652525 +v 11.664764 1.229680 -15.552525 +v 11.664764 1.229680 -15.552525 +v 11.464764 1.229680 -16.652525 +v 11.464764 1.229680 -15.552525 +v 15.684763 2.089680 -18.552525 +v 15.684763 2.089680 -18.552525 +v 14.184763 2.089680 -18.552525 +v 14.184763 2.089680 -18.552525 +v 15.684763 1.789680 -18.552525 +v 15.684763 1.789680 -18.552525 +v 15.684763 1.789680 -18.552525 +v 14.384764 1.789680 -18.552525 +v 14.384764 1.789680 -18.552525 +v 14.384764 1.789680 -18.552525 +v 15.684763 1.789680 -19.652525 +v 15.684763 1.789680 -19.652525 +v 15.684763 1.789680 -19.652525 +v 14.384764 1.789680 -19.652525 +v 14.384764 1.789680 -19.652525 +v 14.384764 1.789680 -19.652525 +v 15.684763 2.089680 -19.652525 +v 15.684763 2.089680 -19.652525 +v 14.184763 2.089680 -19.652525 +v 14.184763 2.089680 -19.652525 +v 15.684763 2.089680 -19.652525 +v 15.684763 2.089680 -19.652525 +v 14.184763 2.089680 -19.652525 +v 14.184763 2.089680 -19.652525 +v 15.684763 2.089680 -19.852526 +v 14.184763 2.089680 -19.852526 +v 15.684763 2.089680 -18.552525 +v 15.684763 2.089680 -19.652525 +v 14.384764 2.089680 -18.552525 +v 14.384764 2.089680 -18.552525 +v 14.384764 2.089680 -19.652525 +v 14.384764 2.089680 -19.652525 +v 14.184763 2.089680 -18.552525 +v 14.184763 2.089680 -19.652525 +v 12.816593 0.929680 -24.552525 +v 12.816593 0.929680 -24.552525 +v 12.816593 0.929680 -24.552525 +v 11.664762 0.929680 -24.552525 +v 11.664762 0.929680 -24.552525 +v 11.664762 0.929680 -24.552525 +v 12.816593 0.929680 -27.152525 +v 12.816593 0.929680 -27.152525 +v 12.816593 0.929680 -27.152525 +v 11.664762 0.929680 -27.152525 +v 11.664762 0.929680 -27.152525 +v 11.664762 0.929680 -27.152525 +v 12.816593 1.229680 -27.152525 +v 12.816593 1.229680 -27.152525 +v 11.464727 1.229680 -27.152525 +v 11.464727 1.229680 -27.152525 +v 12.816593 1.229680 -27.352524 +v 11.464727 1.229680 -27.352524 +v 12.816593 1.229680 -24.552525 +v 12.816593 1.229680 -27.152525 +v 11.664762 1.229680 -24.552525 +v 11.664762 1.229680 -24.552525 +v 11.664762 1.229680 -27.152525 +v 11.664762 1.229680 -27.152525 +v 11.464762 1.229680 -24.552525 +v 11.464762 1.229680 -27.152525 +v 12.619762 0.799680 -31.852526 +v 12.619762 0.799680 -31.852526 +v 12.619762 0.799680 -28.852526 +v 12.619762 0.799680 -28.852526 +v 12.619762 0.499680 -31.652525 +v 12.619762 0.499680 -31.652525 +v 12.619762 0.499680 -31.652525 +v 12.619762 0.499680 -28.852526 +v 12.619762 0.499680 -28.852526 +v 11.519762 0.499680 -31.652525 +v 11.519762 0.499680 -31.652525 +v 11.519762 0.499680 -28.852526 +v 11.664762 0.819680 -30.352526 +v 11.664762 0.819680 -30.352526 +v 11.664762 0.819680 -31.852526 +v 11.664762 0.819680 -31.852526 +v 11.664762 0.519680 -30.352526 +v 11.664762 0.519680 -31.852526 +v 12.619762 0.799680 -31.652525 +v 12.619762 0.799680 -31.652525 +v 11.519762 0.799680 -31.652525 +v 11.519762 0.799680 -31.652525 +v 12.619762 0.799680 -31.852526 +v 11.519762 0.799680 -31.852526 +v 10.164764 0.819680 -28.852526 +v 10.164764 0.819680 -28.852526 +v 10.164764 0.819680 -30.352526 +v 10.164764 0.819680 -30.352526 +v 10.164764 0.519680 -28.852526 +v 10.164764 0.519680 -28.852526 +v 10.164764 0.519680 -30.152525 +v 10.164764 0.519680 -30.152525 +v 10.164764 0.519680 -30.152525 +v 11.664762 0.501869 -28.852526 +v 11.664762 0.501869 -30.152525 +v 11.664762 0.501869 -30.152525 +v 11.664762 0.501869 -30.152525 +v 10.164764 0.819680 -30.152525 +v 10.164764 0.819680 -30.152525 +v 11.664762 0.819680 -30.152525 +v 11.664762 0.819680 -30.152525 +v 11.664762 0.819680 -30.152525 +v 10.164764 0.819680 -30.352526 +v 11.664762 0.819680 -30.352526 +v 11.464762 0.499680 -28.852526 +v 9.964764 0.519680 -28.852524 +v 11.664762 0.501869 -30.353405 +v 11.664762 0.819680 -30.353405 +v 8.464764 0.389680 -24.152525 +v 8.464764 0.389680 -24.152525 +v 9.964764 0.389680 -24.152525 +v 9.964764 0.389680 -24.152525 +v 8.664764 0.089680 -24.152525 +v 8.664764 0.089680 -24.152525 +v 8.664764 0.089680 -24.152525 +v 9.964764 0.089680 -24.152525 +v 9.964764 0.089680 -24.152525 +v 9.964764 0.089680 -24.152525 +v 8.664764 0.089680 -23.052525 +v 8.664764 0.089680 -23.052525 +v 8.664764 0.089680 -23.052525 +v 9.964764 0.089680 -23.052525 +v 9.964764 0.089680 -23.052525 +v 9.964764 0.089680 -23.052525 +v 8.464764 0.389680 -23.052525 +v 8.464764 0.389680 -23.052525 +v 9.964764 0.389680 -23.052525 +v 9.964764 0.389680 -23.052525 +v 8.464764 0.389680 -22.852524 +v 9.964764 0.389680 -22.852524 +v 8.664764 0.389680 -24.152525 +v 8.664764 0.389680 -24.152525 +v 8.664764 0.389680 -23.052525 +v 8.664764 0.389680 -23.052525 +v 8.464764 0.389680 -24.152525 +v 8.464764 0.389680 -23.052525 +v 9.964764 0.389680 -24.152525 +v 9.964764 0.389680 -23.052525 +v 14.186897 1.669680 -23.052525 +v 14.186897 1.669680 -23.052525 +v 12.832012 1.669680 -23.052525 +v 12.832012 1.669680 -23.052525 +v 14.184656 1.369680 -23.052525 +v 14.184656 1.369680 -23.052525 +v 14.184656 1.369680 -23.052525 +v 13.032063 1.369680 -23.052525 +v 13.032063 1.369680 -23.052525 +v 13.032063 1.369680 -23.052525 +v 14.184656 1.369680 -25.652525 +v 14.184656 1.369680 -25.652525 +v 14.184656 1.369680 -25.652525 +v 13.032063 1.369680 -25.652525 +v 13.032063 1.369680 -25.652525 +v 13.032063 1.369680 -25.652525 +v 14.186897 1.665907 -25.652525 +v 14.186897 1.665907 -25.652525 +v 12.832012 1.665907 -25.652525 +v 12.832012 1.665907 -25.652525 +v 14.186897 1.657128 -25.852524 +v 12.832012 1.657128 -25.852524 +v 14.184656 1.669680 -23.052525 +v 14.184656 1.669680 -25.652525 +v 13.032063 1.669680 -23.052525 +v 13.032063 1.669680 -23.052525 +v 13.032063 1.669680 -25.652525 +v 13.032063 1.669680 -25.652525 +v 12.832062 1.669680 -23.052525 +v 12.832062 1.669680 -25.652525 +v 17.184761 1.789680 -24.352526 +v 15.684761 1.789680 -24.352526 +v 17.184761 1.789680 -24.352526 +v 18.684761 1.789680 -24.352526 +v 15.884764 2.089680 -19.852526 +v 15.884764 2.089680 -19.852526 +v 15.884762 2.089680 -25.852526 +v 15.884762 2.089680 -25.852526 +v 15.884764 1.789680 -19.852526 +v 15.884764 1.789680 -19.852526 +v 15.884762 1.789680 -25.852526 +v 15.884762 1.789680 -25.852526 +v 18.684763 1.789680 -19.852526 +v 18.684761 1.789680 -25.852526 +v 15.684761 2.089680 -25.652527 +v 15.684761 2.089680 -25.652527 +v 17.184761 2.089680 -25.652527 +v 17.184761 2.089680 -25.652527 +v 18.684761 2.089680 -25.652527 +v 18.684761 2.089680 -25.652527 +v 15.684761 1.789680 -25.652527 +v 17.184761 1.789680 -25.652527 +v 18.684761 1.789680 -25.652527 +v 15.684761 1.659680 -28.652525 +v 15.684761 1.659680 -28.652525 +v 18.684761 1.659680 -28.652525 +v 18.684761 1.659680 -28.652525 +v 15.684761 1.359680 -28.652525 +v 15.684761 1.359680 -28.652525 +v 18.684761 1.359680 -28.652525 +v 18.684761 1.359680 -28.652525 +v 15.684761 1.359680 -25.852526 +v 15.684761 1.359680 -25.852526 +v 18.684761 1.359680 -25.852526 +v 18.684761 1.359680 -25.852526 +v 15.684761 1.659680 -25.852526 +v 18.684761 1.659680 -25.852526 +v 15.884762 1.659680 -27.352526 +v 15.884762 1.659680 -27.352526 +v 15.884762 1.659680 -28.852526 +v 15.884762 1.659680 -28.852526 +v 15.884762 1.359680 -27.352526 +v 15.884762 1.359680 -28.852526 +v 15.684761 1.659680 -27.552525 +v 15.684761 1.659680 -27.552525 +v 17.184761 1.659680 -27.552525 +v 17.184761 1.659680 -27.552525 +v 17.184761 1.659680 -27.552525 +v 15.684761 1.359680 -27.552525 +v 17.184761 1.359680 -27.552525 +v 17.384762 1.659680 -25.852526 +v 17.384762 1.659680 -25.852526 +v 17.384762 1.659680 -27.352526 +v 17.384762 1.659680 -27.352526 +v 17.384762 1.659680 -27.552525 +v 17.384762 1.659680 -27.552525 +v 17.384762 1.659680 -27.552525 +v 17.384762 1.359680 -25.852526 +v 17.384762 1.359680 -27.352526 +v 17.384762 1.359680 -27.552525 +v 17.184761 1.346087 -27.552525 +v 17.384762 1.346087 -27.552525 +v 15.684761 0.929680 -28.852526 +v 15.684761 0.929680 -28.852526 +v 18.684761 0.929680 -28.852526 +v 18.684761 0.929680 -28.852526 +v 15.684761 0.929680 -30.152525 +v 15.684761 0.929680 -30.152525 +v 18.684761 0.929680 -30.152525 +v 18.684761 0.929680 -30.152525 +v 15.684761 1.229680 -30.152525 +v 15.684761 1.229680 -30.152525 +v 18.684761 1.229680 -30.152525 +v 18.684761 1.229680 -30.152525 +v 15.684761 1.229680 -30.352526 +v 18.684761 1.229680 -30.352526 +v 15.884762 1.229680 -27.352526 +v 15.884762 1.229680 -27.352526 +v 15.884762 1.229680 -30.352526 +v 15.884762 1.229680 -30.352526 +v 15.884762 0.929680 -27.352526 +v 15.884762 0.929680 -30.352526 +v 17.384762 0.499680 -30.352526 +v 17.384762 0.499680 -30.352526 +v 17.384762 0.499680 -30.352526 +v 18.684761 0.499680 -30.352526 +v 18.684761 0.499680 -30.352526 +v 17.384762 0.499680 -31.652525 +v 17.384762 0.499680 -31.652525 +v 17.384762 0.499680 -31.652525 +v 18.684761 0.499680 -31.652525 +v 18.684761 0.499680 -31.652525 +v 17.184761 0.799680 -31.652525 +v 17.184761 0.799680 -31.652525 +v 18.684761 0.799680 -31.652525 +v 18.684761 0.799680 -31.652525 +v 17.184761 0.799680 -31.852526 +v 18.684761 0.799680 -31.852526 +v 17.384762 0.799680 -30.352526 +v 17.384762 0.799680 -30.352526 +v 17.384762 0.799680 -31.652525 +v 17.384762 0.799680 -31.652525 +v 17.184761 0.799680 -30.352526 +v 17.184761 0.799680 -31.652525 +v 18.684761 -0.030320 -28.852526 +v 18.684761 -0.030320 -39.852524 +v 22.804762 3.369680 -33.352524 +v 22.804762 3.369680 -33.352524 +v 22.804762 9.194399 -33.352524 +v 19.604763 3.369680 -14.602526 +v 19.604761 3.369680 -33.352524 +v 8.786587 0.019680 -31.129763 +v 6.786587 0.019680 -31.129763 +v 8.786587 0.019680 -29.129763 +v 6.786587 0.019680 -29.129763 +v 8.729656 3.369680 -9.352525 +v 8.729656 3.369680 -7.593173 +v 8.729656 3.369680 -9.352525 +v -14.359970 3.369680 -9.352523 +v -14.359936 3.369680 -9.352523 +v -14.359970 3.369680 -7.588808 +v 34.204765 3.369680 -3.052526 +v 19.604763 3.369680 -3.052526 +vn -0.0000 1.0000 -0.0000 +vn -0.0000 -0.0000 1.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 -0.0000 -0.0000 +vn 0.0001 -0.0118 0.9999 +vn -0.0000 0.0059 1.0000 +vn -0.2858 0.9583 -0.0000 +vn 1.0000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -1.0000 +vn 0.9766 0.1061 -0.1873 +vn 0.9743 0.1459 -0.1716 +vn 0.0066 0.9999 -0.0133 +vn 0.0067 0.9999 -0.0134 +vn 0.0066 0.9999 -0.0134 +vn 0.0133 0.9999 -0.0000 +vn -1.0000 -0.0002 0.0024 +vn -1.0000 -0.0049 -0.0023 +vn -1.0000 0.0001 -0.0025 +vn -1.0000 -0.0052 0.0027 +vn -1.0000 -0.0001 -0.0000 +vn -0.9993 0.0336 0.0156 +vn -0.9999 0.0014 -0.0166 +vn -0.9992 0.0356 -0.0183 +vn -0.9998 -0.0006 0.0180 +vn 0.0119 0.9999 -0.0000 +vn -0.0000 0.9990 -0.0439 +vn -1.0000 0.0001 -0.0000 +vt 0.646214 0.526332 +vt 0.754639 0.526333 +vt 0.754639 0.433911 +vt 0.646214 0.339751 +vt 0.754639 0.339751 +vt 0.754639 0.247329 +vt 0.880949 0.433911 +vt 0.880949 0.247329 +vt 0.646214 0.022997 +vt 0.754639 0.022997 +vt 0.877344 0.491204 +vt 0.606530 0.892472 +vt 0.818490 0.507870 +vt 0.606530 0.892472 +vt 0.602844 0.339751 +vt 0.602844 0.022997 +vt 0.801302 0.510648 +vt 0.754639 0.000000 +vt 0.754639 0.000000 +vt 0.927344 0.510648 +vt 0.880949 0.000000 +vt 0.851823 0.506944 +vt 0.646214 0.000000 +vt 0.873177 0.490278 +vt 0.851823 0.504167 +vt 0.877344 0.490278 +vt 0.818490 0.510648 +vt 0.606530 0.869475 +vt 0.606530 0.869475 +vt 0.851823 0.506944 +vt 0.872656 0.526389 +vt 0.851823 0.504167 +vt 0.872656 0.521759 +vt 0.872135 0.495833 +vt 0.872656 0.526389 +vt 0.872135 0.498611 +vt 0.872656 0.521759 +vt 0.872135 0.495833 +vt 0.883594 0.518056 +vt 0.872135 0.498611 +vt 0.883594 0.522685 +vt 0.851823 0.496759 +vt 0.884115 0.518056 +vt 0.851823 0.498611 +vt 0.884115 0.522685 +vt 0.851823 0.496759 +vt 0.884635 0.518056 +vt 0.851823 0.498611 +vt 0.884635 0.522685 +vt 0.864323 0.496759 +vt 0.884635 0.518056 +vt 0.864323 0.499537 +vt 0.884635 0.522685 +vt 0.864844 0.496759 +vt 0.884635 0.526389 +vt 0.864844 0.499537 +vt 0.884635 0.522685 +vt 0.851823 0.504167 +vt 0.884635 0.526389 +vt 0.851823 0.501389 +vt 0.884635 0.522685 +vt 0.851302 0.504167 +vt 0.885156 0.490278 +vt 0.851302 0.501389 +vt 0.885156 0.493981 +vt 0.861719 0.514352 +vt 0.851302 0.498611 +vt 0.886198 0.490278 +vt 0.851302 0.501389 +vt 0.886198 0.493981 +vt 0.894010 0.514352 +vt 0.762012 0.946981 +vt 0.851823 0.498611 +vt 0.870052 0.521759 +vt 0.851823 0.501389 +vt 0.870052 0.526389 +vt 0.852865 0.501389 +vt 0.870052 0.521759 +vt 0.852865 0.498611 +vt 0.870052 0.526389 +vt 0.852865 0.501389 +vt 0.869531 0.521759 +vt 0.852865 0.498611 +vt 0.869531 0.526389 +vt 0.851823 0.506944 +vt 0.870052 0.521759 +vt 0.851823 0.504167 +vt 0.870052 0.526389 +vt 0.851302 0.506944 +vt 0.853906 0.526389 +vt 0.851302 0.504167 +vt 0.853906 0.521759 +vt 0.851823 0.501389 +vt 0.853385 0.526389 +vt 0.851823 0.504167 +vt 0.853385 0.521759 +vt 0.851823 0.501389 +vt 0.862760 0.521759 +vt 0.851823 0.504167 +vt 0.862760 0.526389 +vt 0.851823 0.498611 +vt 0.862760 0.521759 +vt 0.851823 0.495833 +vt 0.862760 0.526389 +vt 0.851823 0.498611 +vt 0.886198 0.513426 +vt 0.851823 0.495833 +vt 0.886198 0.509722 +vt 0.855990 0.556019 +vt 0.851823 0.498611 +vt 0.885156 0.513426 +vt 0.851823 0.501389 +vt 0.885156 0.509722 +vt 0.823698 0.556019 +vt 0.675434 0.829188 +vt 0.851823 0.498611 +vt 0.883594 0.522685 +vt 0.851823 0.501389 +vt 0.883594 0.526389 +vt 0.851823 0.501389 +vt 0.884115 0.522685 +vt 0.851823 0.504167 +vt 0.884115 0.526389 +vt 0.851823 0.501389 +vt 0.885156 0.522685 +vt 0.851823 0.504167 +vt 0.885156 0.518056 +vt 0.853906 0.497685 +vt 0.884635 0.522685 +vt 0.853906 0.494907 +vt 0.884635 0.518056 +vt 0.853906 0.497685 +vt 0.884635 0.522685 +vt 0.853906 0.494907 +vt 0.884635 0.526389 +vt 0.857552 0.500463 +vt 0.885156 0.522685 +vt 0.857552 0.503241 +vt 0.885156 0.526389 +vt 0.857552 0.500463 +vt 0.883594 0.522685 +vt 0.857552 0.503241 +vt 0.883594 0.526389 +vt 0.867448 0.494907 +vt 0.883594 0.522685 +vt 0.867448 0.497685 +vt 0.883594 0.526389 +vt 0.867448 0.494907 +vt 0.879948 0.506944 +vt 0.867448 0.497685 +vt 0.879948 0.510648 +vt 0.824032 0.542388 +vt 0.852865 0.495833 +vt 0.881510 0.506944 +vt 0.852865 0.498611 +vt 0.881510 0.510648 +vt 0.906320 0.945856 +vt 0.856559 0.542388 +vt 0.852865 0.495833 +vt 0.884115 0.522685 +vt 0.852865 0.498611 +vt 0.884115 0.526389 +vt 0.870573 0.497685 +vt 0.884635 0.522685 +vt 0.870573 0.494907 +vt 0.884635 0.526389 +vt 0.870573 0.497685 +vt 0.866927 0.522685 +vt 0.870573 0.494907 +vt 0.866927 0.527315 +vt 0.851823 0.498611 +vt 0.867448 0.522685 +vt 0.851823 0.501389 +vt 0.867448 0.527315 +vt 0.851823 0.498611 +vt 0.884115 0.518056 +vt 0.851823 0.501389 +vt 0.884115 0.522685 +vt 0.857552 0.506019 +vt 0.884635 0.518056 +vt 0.857552 0.503241 +vt 0.884635 0.522685 +vt 0.857552 0.506019 +vt 0.883594 0.518056 +vt 0.857552 0.503241 +vt 0.883594 0.522685 +vt 0.866927 0.494907 +vt 0.883594 0.518056 +vt 0.866927 0.497685 +vt 0.883594 0.522685 +vt 0.866927 0.494907 +vt 0.848698 0.490278 +vt 0.866927 0.497685 +vt 0.848698 0.490278 +vt 0.848698 0.490278 +vt 0.848698 0.490278 +vt 0.210779 0.830391 +vt 0.000000 0.000000 +vt 0.602844 0.714869 +vt 0.533601 0.892338 +vt 0.192346 0.830391 +vt 0.000000 0.000000 +vt 0.210779 0.890292 +vt 0.533601 0.952239 +vt 0.192346 0.890292 +vt 0.522758 0.892338 +vt 0.720731 0.778001 +vt 0.522759 0.952239 +vt 0.720731 0.837902 +vt 0.377795 0.769107 +vt 0.714766 0.778644 +vt 0.720731 0.870445 +vt 0.377795 0.828365 +vt 0.714766 0.837902 +vt 0.875781 0.496759 +vt 0.000000 0.000000 +vt 0.602844 0.704021 +vt 0.875260 0.496759 +vt 0.377795 0.904921 +vt 0.000000 0.000000 +vt 0.345267 0.769107 +vt 0.720731 0.837902 +vt 0.345267 0.828365 +vt 0.602716 0.704034 +vt 0.714766 0.870445 +vt 0.714766 0.837902 +vt 0.602716 0.704021 +vt 0.602716 0.704188 +vt 0.954678 0.736905 +vt 0.602716 0.704021 +vt 0.880949 0.736905 +vt 0.954678 0.463519 +vt 0.880949 0.496799 +vt 0.890885 0.544907 +vt 0.875781 0.496759 +vt 0.875260 0.496759 +vt 0.377795 0.937521 +vt 0.024810 0.942711 +vt 0.874740 0.495833 +vt 0.639708 0.774746 +vt 0.639708 0.774746 +vt 0.000000 0.000000 +vt 0.602844 0.714869 +vt 0.874740 0.496759 +vt 0.000000 0.000000 +vt 0.035653 0.942711 +vt 0.874740 0.495833 +vt 0.679392 0.712914 +vt 0.679392 0.712914 +vt 0.000000 0.000000 +vt 0.602716 0.704022 +vt 0.874740 0.496759 +vt 0.000000 0.000000 +vt 0.388637 0.904921 +vt 0.846380 0.851550 +vt 0.388637 0.937521 +vt 0.846380 0.884150 +vt 0.856064 0.851550 +vt 0.856064 0.884150 +vt 0.707366 0.871835 +vt 0.621276 0.774746 +vt 0.718208 0.871833 +vt 0.660960 0.712914 +vt 0.867969 0.498611 +vt 0.679392 0.774746 +vt 0.679392 0.774746 +vt 0.000000 0.000000 +vt 0.863802 0.498611 +vt 0.639708 0.712914 +vt 0.639708 0.712914 +vt 0.863802 0.498611 +vt 0.867969 0.497685 +vt 0.718208 0.933706 +vt 0.642527 0.774746 +vt 0.366952 0.828365 +vt 0.864323 0.498611 +vt 0.457703 0.838516 +vt 0.707366 0.933708 +vt 0.657136 0.892134 +vt 0.602844 0.712914 +vt 0.864323 0.498611 +vt 0.457703 0.849364 +vt 0.035653 0.939891 +vt 0.682211 0.712914 +vt 0.230295 0.875415 +vt 0.024810 0.939891 +vt 0.642527 0.774746 +vt 0.241138 0.875415 +vt 0.682211 0.774746 +vt 0.399480 0.904921 +vt 0.230295 0.937248 +vt 0.863802 0.498611 +vt 0.642527 0.712914 +vt 0.241138 0.937248 +vt 0.863802 0.498611 +vt 0.867448 0.496759 +vt 0.867448 0.496759 +vt 0.189094 0.892223 +vt 0.366952 0.890198 +vt 0.000000 0.000000 +vt 0.754525 0.830961 +vt 0.867448 0.496759 +vt 0.657136 0.830302 +vt 0.660389 0.892134 +vt 0.754525 0.820114 +vt 0.348520 0.828365 +vt 0.000000 0.000000 +vt 0.476136 0.838516 +vt 0.476136 0.838516 +vt 0.638704 0.892134 +vt 0.476136 0.849364 +vt 0.476136 0.849364 +vt 0.867969 0.496759 +vt 0.867969 0.496759 +vt 0.348520 0.890198 +vt 0.000000 0.000000 +vt 0.867969 0.496759 +vt 0.867969 0.496759 +vt 0.638704 0.830302 +vt 0.170661 0.892223 +vt 0.659304 0.892134 +vt 0.678821 0.892134 +vt 0.670147 0.892134 +vt 0.853906 0.497685 +vt 0.189094 0.830391 +vt 0.000000 0.000000 +vt 0.857552 0.499537 +vt 0.853906 0.497685 +vt 0.660389 0.830302 +vt 0.853906 0.497685 +vt 0.170661 0.830391 +vt 0.659304 0.953967 +vt 0.853906 0.497685 +vt 0.678821 0.830302 +vt 0.670147 0.953967 +vt 0.897135 0.531018 +vt 0.192346 0.892223 +vt 0.751272 0.830961 +vt 0.899219 0.531018 +vt 0.657136 0.892134 +vt 0.751272 0.820114 +vt 0.854427 0.497685 +vt 0.897135 0.518981 +vt 0.192346 0.830391 +vt 0.857552 0.520833 +vt 0.857552 0.499537 +vt 0.854427 0.497685 +vt 0.899219 0.518981 +vt 0.657136 0.830302 +vt 0.210779 0.890292 +vt 0.345267 0.828365 +vt 0.479388 0.838516 +vt 0.199936 0.890292 +vt 0.635451 0.892134 +vt 0.479388 0.849364 +vt 0.867969 0.496759 +vt 0.867969 0.496759 +vt 0.210779 0.952124 +vt 0.259611 0.903744 +vt 0.345267 0.890198 +vt 0.867969 0.496759 +vt 0.199936 0.952124 +vt 0.635451 0.830302 +vt 0.000000 0.000000 +vt 0.635451 0.830302 +vt 0.000000 0.000000 +vt 0.635451 0.774747 +vt 0.668061 0.830302 +vt 0.668061 0.774747 +vt 0.602844 0.774747 +vt 0.000000 0.000000 +vt 0.602844 0.832592 +vt 0.000000 0.000000 +vt 0.635451 0.774747 +vt 0.635451 0.832592 +vt 0.682211 0.778001 +vt 0.000000 0.000000 +vt 0.682211 0.833568 +vt 0.000000 0.000000 +vt 0.714766 0.778001 +vt 0.714766 0.833568 +vt 0.867448 0.498611 +vt 0.863802 0.499537 +vt 0.867448 0.497685 +vt 0.399480 0.937448 +vt 0.863802 0.499537 +vt 0.555286 0.805973 +vt 0.388637 0.904921 +vt 0.555286 0.773446 +vt 0.388637 0.937448 +vt 0.558770 0.805973 +vt 0.558770 0.773446 +vt 0.867448 0.497685 +vt 0.867969 0.497685 +vt 0.867969 0.497685 +vt 0.867969 0.497685 +vt 0.259611 0.936615 +vt 0.853906 0.498611 +vt 0.857552 0.498611 +vt 0.853906 0.498611 +vt 0.857552 0.527315 +vt 0.857552 0.498611 +vt 0.270454 0.903744 +vt 0.954678 0.904829 +vt 0.270454 0.936615 +vt 0.954678 0.937700 +vt 0.959040 0.904829 +vt 0.959040 0.937700 +vt 0.194720 0.920427 +vt 0.855469 0.520833 +vt 0.194720 0.953862 +vt 0.855469 0.527315 +vt 0.190178 0.920427 +vt 0.190178 0.953862 +vt 0.890273 0.841043 +vt 0.624962 0.892472 +vt 0.890273 0.818046 +vt 0.816406 0.510648 +vt 0.624962 0.869475 +vt 0.818490 0.507870 +vt 0.906537 0.841043 +vt 0.522758 0.892338 +vt 0.606530 0.832592 +vt 0.818490 0.513426 +vt 0.890273 0.781163 +vt 0.816406 0.513426 +vt 0.906537 0.781163 +vt 0.522758 0.832458 +vt 0.259611 0.903744 +vt 0.818490 0.513426 +vt 0.259611 0.926013 +vt 0.544877 0.892338 +vt 0.846094 0.507870 +vt 0.544877 0.832458 +vt 0.846094 0.513426 +vt 0.864323 0.507870 +vt 0.243347 0.926013 +vt 0.845052 0.507870 +vt 0.845052 0.513426 +vt 0.865885 0.507870 +vt 0.243347 0.903744 +vt 0.864323 0.505093 +vt 0.865885 0.505093 +vt 0.880949 0.932164 +vt 0.861719 0.530093 +vt 0.900260 0.444907 +vt 0.855469 0.392130 +vt 0.894010 0.530093 +vt 0.904948 0.444907 +vt 0.762012 0.930709 +vt 0.880949 0.736905 +vt 0.900260 0.474537 +vt 0.296042 0.930956 +vt 0.855469 0.567130 +vt 0.904948 0.474537 +vt 0.296042 0.898413 +vt 0.890273 0.932164 +vt 0.138134 0.899280 +vt 0.890273 0.736905 +vt 0.138134 0.704021 +vt 0.707366 0.904377 +vt 0.896094 0.501389 +vt 0.170661 0.899280 +vt 0.896094 0.531018 +vt 0.170661 0.704021 +vt 0.707366 0.871833 +vt 0.591067 0.704021 +vt 0.921615 0.465278 +vt 0.853385 0.539352 +vt 0.795052 0.561574 +vt 0.917969 0.465278 +vt 0.823698 0.539352 +vt 0.675277 0.812917 +vt 0.921615 0.443056 +vt 0.917969 0.443056 +vt 0.765365 0.665278 +vt 0.824033 0.558660 +vt 0.795052 0.569907 +vt 0.772656 0.539352 +vt 0.906320 0.929710 +vt 0.856559 0.558535 +vt 0.795052 0.524537 +vt 0.765365 0.958796 +vt 0.000000 0.000000 +vt 0.923698 0.569907 +vt 0.937760 0.539352 +vt 0.000000 0.000000 +vt 0.923698 0.524537 +vt 0.863802 0.392130 +vt 0.767969 0.825463 +vt 0.863802 0.567130 +vt 0.688717 0.904377 +vt 0.688717 0.871833 +vt 0.305367 0.930956 +vt 0.305367 0.898413 +vt 0.772656 0.523611 +vt 0.075781 0.750463 +vt 0.894531 0.501389 +vt 0.749103 0.526333 +vt 0.894531 0.531018 +vt 0.749103 0.721592 +vt 0.729153 0.526333 +vt 0.403057 0.704021 +vt 0.729153 0.721592 +vt 0.754639 0.946981 +vt 0.679121 0.829188 +vt 0.754639 0.930709 +vt 0.679121 0.812917 +vt 0.867448 0.562500 +vt 0.893490 0.554167 +vt 0.675434 0.829188 +vt 0.870573 0.562500 +vt 0.377795 0.904921 +vt 0.675434 0.812917 +vt 0.854948 0.560648 +vt 0.867448 0.553241 +vt 0.893490 0.545833 +vt 0.858073 0.560648 +vt 0.870573 0.553241 +vt 0.377795 0.860662 +vt 0.854948 0.556019 +vt 0.858073 0.556019 +vt 0.889323 0.554167 +vt 0.889323 0.545833 +vt 0.400063 0.904921 +vt 0.400063 0.860662 +vt 0.668061 0.829188 +vt 0.558973 0.822245 +vt 0.668061 0.812917 +vt 0.558973 0.805973 +vt 0.842448 0.361574 +vt 0.931510 0.356944 +vt 0.555286 0.822245 +vt 0.845573 0.361574 +vt 0.846380 0.851550 +vt 0.555286 0.805973 +vt 0.877865 0.361574 +vt 0.842448 0.354167 +vt 0.931510 0.349537 +vt 0.880469 0.361574 +vt 0.845573 0.354167 +vt 0.846380 0.895809 +vt 0.877865 0.357870 +vt 0.880469 0.357870 +vt 0.824032 0.851550 +vt 0.824032 0.895809 +vt 0.927344 0.356944 +vt 0.927344 0.349537 +vt 0.898947 0.945856 +vt 0.624962 0.908744 +vt 0.898947 0.929584 +vt 0.624962 0.892472 +vt 0.902865 0.495833 +vt 0.817969 0.500463 +vt 0.621276 0.908744 +vt 0.899740 0.495833 +vt 0.912392 0.736905 +vt 0.621276 0.892472 +vt 0.857552 0.499537 +vt 0.902865 0.505093 +vt 0.817969 0.490278 +vt 0.853906 0.499537 +vt 0.899740 0.505093 +vt 0.912392 0.781163 +vt 0.857552 0.504167 +vt 0.853906 0.504167 +vt 0.813281 0.500463 +vt 0.813281 0.490278 +vt 0.890273 0.736905 +vt 0.890273 0.781163 +vt 0.684115 0.831944 +vt 0.236719 0.750463 +vt 0.075781 0.909722 +vt 0.236719 0.909722 +vt 0.000000 0.000000 +vt 0.684115 0.816204 +vt 0.602844 0.531666 +vt 0.139844 0.893056 +vt 0.707031 0.944907 +vt 0.753874 0.949395 +vt 0.000000 0.000000 +vt 0.849219 0.816204 +vt 0.602844 0.238651 +vt 0.385156 0.506019 +vt 0.666927 0.348611 +vt 0.743490 0.451389 +vt 0.594531 0.404167 +vt 0.602844 0.238651 +vt 0.744766 0.949395 +vt 0.937760 0.523611 +vt 0.629427 0.944907 +vt 0.753874 0.916852 +vt 0.842464 0.895809 +vt 0.744766 0.916852 +vt 0.139844 0.788426 +vt 0.842464 0.928352 +vt 0.602844 0.925015 +vt 0.707031 0.711574 +vt 0.629427 0.711574 +vt 0.786198 0.944907 +vt 0.707031 0.944907 +vt 0.786198 0.711574 +vt 0.707031 0.711574 +vt 0.841380 0.928352 +vt 0.824032 0.928352 +vt 0.841380 0.960895 +vt 0.621276 0.925015 +vt 0.476136 0.893623 +vt 0.602844 0.892472 +vt 0.457703 0.893623 +vt 0.659304 0.920338 +vt 0.621276 0.892472 +vt 0.581959 0.704021 +vt 0.764844 0.825463 +vt 0.767969 0.818981 +vt 0.764844 0.818981 +vt 0.764323 0.825463 +vt 0.275875 0.834194 +vt 0.760677 0.825463 +vt 0.764323 0.811574 +vt 0.275875 0.704021 +vt 0.506712 0.906657 +vt 0.581959 0.931824 +vt 0.760677 0.811574 +vt 0.506712 0.939200 +vt 0.794010 0.815278 +vt 0.839844 0.538426 +vt 0.487704 0.914451 +vt 0.497387 0.906657 +vt 0.591283 0.931824 +vt 0.794010 0.818981 +vt 0.497387 0.939200 +vt 0.322064 0.914795 +vt 0.790365 0.815278 +vt 0.834635 0.538426 +vt 0.828369 0.928352 +vt 0.487704 0.946994 +vt 0.790365 0.818981 +vt 0.487704 0.914451 +vt 0.331389 0.914795 +vt 0.807031 0.812500 +vt 0.686548 0.712914 +vt 0.497029 0.946994 +vt 0.810677 0.812500 +vt 0.497029 0.914451 +vt 0.807031 0.819907 +vt 0.686548 0.778001 +vt 0.516036 0.906657 +vt 0.312740 0.947338 +vt 0.810677 0.819907 +vt 0.516036 0.939200 +vt 0.764844 0.815278 +vt 0.506712 0.906657 +vt 0.322064 0.947338 +vt 0.767969 0.815278 +vt 0.312740 0.736564 +vt 0.506712 0.939200 +vt 0.042158 0.899280 +vt 0.764844 0.818981 +vt 0.395793 0.769107 +vt 0.767969 0.818981 +vt 0.312740 0.769107 +vt 0.832031 0.502315 +vt 0.060157 0.899280 +vt 0.377795 0.769107 +vt 0.487704 0.849364 +vt 0.042158 0.931824 +vt 0.802344 0.543056 +vt 0.156132 0.931824 +vt 0.060157 0.931824 +vt 0.138134 0.931824 +vt 0.807031 0.543056 +vt 0.156132 0.899280 +vt 0.403057 0.899280 +vt 0.138134 0.899280 +vt 0.421056 0.899280 +vt 0.802344 0.553241 +vt 0.119268 0.834194 +vt 0.807031 0.553241 +vt 0.119268 0.866737 +vt 0.125773 0.931824 +vt 0.403057 0.931824 +vt 0.107775 0.931824 +vt 0.421056 0.931824 +vt 0.125773 0.899280 +vt 0.107775 0.899280 +vt 0.403057 0.899280 +vt 0.820052 0.531018 +vt 0.423007 0.704021 +vt 0.820052 0.501389 +vt 0.423007 0.899280 +vt 0.808594 0.531018 +vt 0.808594 0.501389 +vt 0.839844 0.533796 +vt 0.559623 0.708360 +vt 0.487704 0.881907 +vt 0.834635 0.533796 +vt 0.527095 0.708360 +vt 0.840885 0.572685 +vt 0.497029 0.914451 +vt 0.840885 0.568056 +vt 0.566129 0.931824 +vt 0.497029 0.881907 +vt 0.860156 0.503241 +vt 0.223356 0.919674 +vt 0.836198 0.502315 +vt 0.000000 0.000000 +vt 0.312740 0.704021 +vt 0.832031 0.493981 +vt 0.214031 0.919674 +vt 0.836198 0.493981 +vt 0.214031 0.949288 +vt 0.000000 0.000000 +vt 0.860156 0.506944 +vt 0.611198 0.780093 +vt 0.075987 0.899280 +vt 0.223356 0.949288 +vt 0.864323 0.503241 +vt 0.720913 0.919889 +vt 0.941406 0.543981 +vt 0.864323 0.506944 +vt 0.838281 0.773611 +vt 0.720913 0.949318 +vt 0.850781 0.516204 +vt 0.730237 0.919889 +vt 0.941406 0.560648 +vt 0.846615 0.516204 +vt 0.730237 0.949318 +vt 0.850781 0.520833 +vt 0.846615 0.520833 +vt 0.312740 0.914795 +vt 0.322064 0.914795 +vt 0.755990 0.958796 +vt 0.611198 0.981019 +vt 0.075987 0.928679 +vt 0.838281 0.981019 +vt 0.066662 0.899280 +vt 0.135156 0.788426 +vt 0.602844 0.954345 +vt 0.135156 0.893056 +vt 0.602844 0.925015 +vt 0.066662 0.928679 +vt 0.327865 0.893056 +vt 0.327865 0.788426 +vt 0.476136 0.926166 +vt 0.377795 0.860662 +vt 0.457703 0.926166 +vt 0.659304 0.952882 +vt 0.396227 0.860662 +vt 0.566129 0.899280 +vt 0.497029 0.849364 +vt 0.109943 0.834194 +vt 0.109943 0.866737 +vt 0.322064 0.947338 +vt 0.861719 0.563426 +vt 0.828369 0.960896 +vt 0.296042 0.903620 +vt 0.331389 0.947338 +vt 0.286718 0.903620 +vt 0.861719 0.573611 +vt 0.296042 0.838533 +vt 0.286718 0.838533 +vt 0.119268 0.899280 +vt 0.109943 0.899280 +vt 0.416406 0.203241 +vt 0.732552 0.506019 +vt 0.479427 0.348611 +vt 0.463281 0.433796 +vt 0.535156 0.133796 +vt 0.585677 0.178241 +vt 0.602844 0.704020 +vt 0.713281 0.483796 +vt 0.385156 0.155093 +vt 0.416406 0.483796 +vt 0.535156 0.598611 +vt 0.890885 0.443981 +vt 0.883594 0.544907 +vt 0.883594 0.443981 +vt 0.749103 0.781458 +vt 0.749103 0.781458 +vt 0.878385 0.506944 +vt 0.987206 0.499059 +vt 0.702812 0.904377 +vt 0.878385 0.537500 +vt 0.987206 1.000000 +vt 0.858594 0.496759 +vt 0.878906 0.507870 +vt 0.878906 0.506944 +vt 0.878906 0.537500 +vt 0.878906 0.477315 +vt 0.878385 0.506944 +vt 0.878385 0.477315 +vt 0.702812 0.942641 +vt 0.858594 0.495833 +vt 0.749103 0.743288 +vt 0.749103 0.743288 +vt 0.754317 0.781458 +vt 0.886719 0.511574 +vt 0.754317 0.743288 +vt 0.886719 0.549537 +vt 0.875260 0.511574 +vt 0.875260 0.549537 +vt 0.853909 0.934074 +vt 0.707178 0.904377 +vt 0.853909 0.895809 +vt 0.707178 0.942641 +vt 0.842464 0.934074 +vt 0.842464 0.895809 +vt 0.743490 0.282870 +vt 0.594531 0.165278 +vt 0.479427 0.257870 +vt 0.395052 0.282870 +vt 0.463281 0.194907 +vt 0.108425 0.000000 +vt 0.730237 0.952436 +vt 0.000000 0.000000 +vt 0.824032 0.895809 +vt 0.730237 0.919889 +vt 0.000000 0.000000 +vt 0.540107 0.957424 +vt 0.000000 0.000000 +vt 0.540107 0.892338 +vt 0.000000 0.000000 +vt 0.060157 0.899280 +vt 0.060157 0.928679 +vt 0.354948 0.433796 +vt 0.000000 0.238651 +vt 0.477344 0.178241 +vt 0.426823 0.598611 +vt 0.477344 0.643981 +vt 0.000000 0.000001 +vt 0.075781 0.931944 +vt 0.077416 0.956225 +vt 0.236719 0.931944 +vt 0.077416 0.923682 +vt 0.786198 0.700463 +vt 0.654967 0.920338 +vt 0.707031 0.700463 +vt 0.654967 0.952882 +vt 0.648462 0.920338 +vt 0.648462 0.952882 +vt 0.292789 0.926100 +vt 0.661719 0.979167 +vt 0.083921 0.956225 +vt 0.661719 0.700463 +vt 0.083921 0.928021 +vt 0.403057 0.858059 +vt 0.292789 0.949965 +vt 0.895052 0.979167 +vt 0.895052 0.700463 +vt 0.403057 0.834194 +vt 0.286284 0.926100 +vt 0.286284 0.949965 +vt 0.000000 0.000000 +vt 0.849219 0.831944 +vt 0.000000 0.000000 +vt 0.766349 0.930709 +vt 0.396551 0.858059 +vt 0.766349 0.954574 +vt 0.396551 0.834194 +vt 0.770686 0.930709 +vt 0.770686 0.954574 +vt 0.332552 0.893056 +vt 0.615855 0.925015 +vt 0.332552 0.788426 +vt 0.615855 0.954345 +vt 0.048177 0.833796 +vt 0.609349 0.929355 +vt 0.695222 0.926506 +vt 0.464209 0.950031 +vt 0.048177 0.734722 +vt 0.609349 0.954345 +vt 0.142969 0.833796 +vt 0.000000 0.000000 +vt 0.695222 0.950371 +vt 0.464209 0.926166 +vt 0.142969 0.734722 +vt 0.000000 0.000000 +vt 0.429513 0.953877 +vt 0.000000 0.000000 +vt 0.429513 0.924548 +vt 0.000000 0.000000 +vt 0.436018 0.953877 +vt 0.000000 0.000000 +vt 0.436018 0.924548 +vt 0.000000 0.000000 +vt 0.890273 0.958914 +vt 0.000000 0.000000 +vt 0.890273 0.929584 +vt 0.000000 0.000000 +vt 0.755990 0.665278 +vt 0.894610 0.958914 +vt 0.795052 0.543981 +vt 0.894610 0.929584 +vt 0.457703 0.950031 +vt 0.457703 0.926166 +vt 0.779360 0.930709 +vt 0.688716 0.926506 +vt 0.779360 0.954574 +vt 0.688716 0.950371 +vt 0.775023 0.930709 +vt 0.775023 0.954574 +vt 0.767969 0.818981 +vt 0.641956 0.952882 +vt 0.764844 0.818981 +vt 0.641956 0.920338 +vt 0.477220 0.926166 +vt 0.753385 0.834722 +vt 0.648462 0.952882 +vt 0.753385 0.831019 +vt 0.648462 0.924678 +vt 0.286284 0.949965 +vt 0.477220 0.950031 +vt 0.755469 0.834722 +vt 0.170661 0.952970 +vt 0.755469 0.831019 +vt 0.170661 0.924766 +vt 0.286284 0.926100 +vt 0.177167 0.952970 +vt 0.000000 0.000000 +vt 0.177167 0.920427 +vt 0.000000 0.000000 +vt 0.741406 0.838426 +vt 0.000000 0.000000 +vt 0.741406 0.835648 +vt 0.000000 0.000000 +vt 0.741927 0.838426 +vt 0.741927 0.835648 +vt 0.470714 0.926166 +vt 0.470715 0.950031 +vt 0.762012 0.930709 +vt 0.279778 0.949965 +vt 0.762012 0.954574 +vt 0.279778 0.926100 +vt 0.766349 0.930709 +vt 0.766349 0.954574 +vt 0.093680 0.956977 +vt 0.680990 0.709722 +vt 0.609349 0.954345 +vt 0.798698 0.709722 +vt 0.609349 0.929355 +vt 0.106691 0.956977 +vt 0.093680 0.900568 +vt 0.680990 0.970833 +vt 0.423007 0.953877 +vt 0.798698 0.970833 +vt 0.423007 0.928887 +vt 0.106691 0.900568 +vt 0.198177 0.909722 +vt 0.429513 0.953877 +vt 0.198177 0.777315 +vt 0.429513 0.924548 +vt 0.216927 0.909722 +vt 0.216927 0.777315 +vt 0.100185 0.956977 +vt 0.100185 0.900568 +vt 0.296094 0.774537 +vt 0.100185 0.956977 +vt 0.296094 0.831019 +vt 0.100185 0.900568 +vt 0.300260 0.774537 +vt 0.300260 0.831019 +vt 0.403057 0.769107 +vt 0.544445 0.957424 +vt 0.403057 0.834194 +vt 0.544445 0.892338 +vt 0.396551 0.773446 +vt 0.720913 0.847426 +vt 0.682211 0.950371 +vt 0.396551 0.834194 +vt 0.720913 0.786679 +vt 0.744766 0.847426 +vt 0.682211 0.926506 +vt 0.744766 0.786679 +vt 0.654968 0.920338 +vt 0.635451 0.952882 +vt 0.654967 0.952882 +vt 0.635451 0.920338 +vt 0.641956 0.952882 +vt 0.641956 0.920338 +vt 0.109943 0.872364 +vt 0.688716 0.950371 +vt 0.109943 0.896229 +vt 0.688716 0.926506 +vt 0.105606 0.872364 +vt 0.105606 0.896229 +vt 0.837043 0.928352 +vt 0.736742 0.952433 +vt 0.837043 0.960895 +vt 0.736742 0.919889 +vt 0.243347 0.871202 +vt 0.743248 0.952433 +vt 0.223742 0.919674 +vt 0.271538 0.871202 +vt 0.743248 0.924229 +vt 0.243348 0.903744 +vt 0.223356 0.952217 +vt 0.271538 0.903744 +vt 0.719075 0.719809 +vt 0.280212 0.866737 +vt 0.230248 0.919674 +vt 0.280212 0.834194 +vt 0.230248 0.952217 +vt 0.719075 0.712914 +vt 0.275875 0.866737 +vt 0.275875 0.834194 +vt 0.736742 0.952522 +vt 0.736742 0.919976 +vt 0.723432 0.719809 +vt 0.723432 0.712914 +vt 0.707031 0.700463 +vt 0.457703 0.920976 +vt 0.629427 0.700463 +vt 0.457703 0.953519 +vt 0.583594 0.963426 +vt 0.451198 0.925315 +vt 0.256359 0.926013 +vt 0.464209 0.926166 +vt 0.583594 0.699537 +vt 0.451198 0.953519 +vt 0.812760 0.963426 +vt 0.190178 0.924766 +vt 0.256359 0.949878 +vt 0.464209 0.950032 +vt 0.812760 0.699537 +vt 0.190178 0.952970 +vt 0.849219 0.955093 +vt 0.183672 0.920427 +vt 0.849219 0.725463 +vt 0.183672 0.952970 +vt 0.877344 0.955093 +vt 0.877344 0.725463 +vt 0.770686 0.954574 +vt 0.249853 0.926013 +vt 0.770686 0.930709 +vt 0.249853 0.949878 +vt 0.775023 0.954574 +vt 0.775023 0.930709 +vt 0.470714 0.926166 +vt 0.470714 0.950031 +vt 0.921615 0.443056 +vt 0.035653 0.953665 +vt 0.917969 0.443056 +vt 0.035653 0.924270 +vt 0.566129 0.899280 +vt 0.856510 0.507870 +vt 0.042158 0.953616 +vt 0.860156 0.507870 +vt 0.042158 0.928610 +vt 0.597789 0.955689 +vt 0.566129 0.955689 +vt 0.856510 0.515278 +vt 0.622278 0.925064 +vt 0.860156 0.515278 +vt 0.622278 0.950070 +vt 0.597789 0.899280 +vt 0.798698 0.528241 +vt 0.615855 0.925015 +vt 0.798698 0.523611 +vt 0.615855 0.954410 +vt 0.799219 0.528241 +vt 0.799219 0.523611 +vt 0.559623 0.899280 +vt 0.559623 0.955689 +vt 0.911719 0.511574 +vt 0.591283 0.955689 +vt 0.911719 0.504167 +vt 0.591283 0.899280 +vt 0.911198 0.511574 +vt 0.911198 0.504167 +vt 0.311872 0.930956 +vt 0.311872 0.898413 +vt 0.682211 0.904377 +vt 0.682211 0.871833 +vt 0.280212 0.834194 +vt 0.744766 0.916852 +vt 0.280212 0.704021 +vt 0.744766 0.786679 +vt 0.766406 0.553241 +vt 0.077416 0.834194 +vt 0.751272 0.916852 +vt 0.766406 0.532870 +vt 0.751272 0.786679 +vt 0.138134 0.834194 +vt 0.775260 0.532870 +vt 0.138134 0.704021 +vt 0.841406 0.572685 +vt 0.169143 0.899280 +vt 0.841406 0.568056 +vt 0.570466 0.931824 +vt 0.169143 0.931824 +vt 0.570466 0.899280 +vt 0.169143 0.964367 +vt 0.162638 0.899280 +vt 0.162638 0.931824 +vt 0.162638 0.964367 +vt 0.861198 0.563426 +vt 0.278044 0.871202 +vt 0.861198 0.573611 +vt 0.278044 0.936288 +vt 0.806510 0.543056 +vt 0.271538 0.871202 +vt 0.806510 0.532870 +vt 0.271538 0.936288 +vt 0.815885 0.543056 +vt 0.156132 0.964367 +vt 0.815885 0.532870 +vt 0.156132 0.899280 +vt 0.162638 0.964367 +vt 0.162638 0.899280 +vt 0.824032 0.928352 +vt 0.083921 0.956225 +vt 0.824032 0.960896 +vt 0.083921 0.923682 +vt 0.090427 0.956225 +vt 0.090427 0.923682 +vt 0.834115 0.538426 +vt 0.183672 0.952971 +vt 0.834115 0.533796 +vt 0.522759 0.708360 +vt 0.183672 0.920427 +vt 0.727769 0.712914 +vt 0.177167 0.952971 +vt 0.177167 0.920427 +vt 0.559623 0.704021 +vt 0.516036 0.943539 +vt 0.527095 0.704021 +vt 0.516036 0.910996 +vt 0.522759 0.704021 +vt 0.723432 0.712914 +vt 0.516036 0.906657 +vt 0.522542 0.943539 +vt 0.522542 0.910996 +vt 0.522542 0.906657 +vt 0.727769 0.719718 +vt 0.723432 0.719718 +vt 0.864323 0.535648 +vt 0.280212 0.903620 +vt 0.864323 0.545833 +vt 0.280212 0.838533 +vt 0.868490 0.535648 +vt 0.334425 0.871076 +vt 0.868490 0.545833 +vt 0.334425 0.936163 +vt 0.846094 0.572685 +vt 0.340930 0.871076 +vt 0.846094 0.563426 +vt 0.340930 0.936163 +vt 0.845573 0.572685 +vt 0.845573 0.563426 +vt 0.682211 0.712914 +vt 0.533601 0.957424 +vt 0.682211 0.778001 +vt 0.533601 0.892338 +vt 0.540107 0.957424 +vt 0.540107 0.892338 +vt 0.105606 0.872364 +vt 0.125773 0.871076 +vt 0.249853 0.954217 +vt 0.077416 0.872364 +vt 0.125773 0.899280 +vt 0.105606 0.900568 +vt 0.018305 0.928609 +vt 0.249853 0.926013 +vt 0.077416 0.900568 +vt 0.018305 0.956813 +vt 0.832706 0.960895 +vt 0.024810 0.924270 +vt 0.832706 0.928352 +vt 0.024810 0.956813 +vt 0.828369 0.960895 +vt 0.828369 0.928352 +vt 0.894610 0.929584 +vt 0.243347 0.954217 +vt 0.894610 0.957788 +vt 0.243347 0.926013 +vt 0.898947 0.929584 +vt 0.898947 0.957788 +vt 0.602844 0.238651 +vt 0.594531 0.165278 +vt 0.602844 0.000000 +vt 0.801302 0.510648 +vt 0.754639 0.000000 +vt 0.927344 0.510648 +vt 0.754639 0.000000 +vt 0.754639 0.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 0.000000 1.000000 +vt 1.000000 1.000000 +vt 0.749103 0.781458 +vt 0.749103 0.743288 +vt 0.987206 0.499059 +vt 0.987206 1.000000 +vt 0.858594 0.496759 +vt 0.858594 0.495833 +vt 0.602844 0.339751 +vt 0.602844 0.022997 +s 0 +usemtl Generic_walls +f 18204/34703/13681 18208/34707/13681 18207/34706/13681 +f 18204/34703/13681 18205/34704/13681 18208/34707/13681 +f 18206/34705/13682 18211/34710/13682 18209/34708/13682 +f 18206/34705/13682 18210/34709/13682 18211/34710/13682 +f 18208/34707/13681 18212/34711/13681 18207/34706/13681 +f 18208/34707/13681 18213/34712/13681 18212/34711/13681 +f 18212/34711/13681 18216/34717/13681 18207/34706/13681 +f 18212/34711/13681 18217/34718/13681 18216/34717/13681 +f 18211/34710/13682 18220/34721/13682 18209/34708/13682 +f 18211/34710/13682 18222/34723/13682 18220/34721/13682 +f 18213/34712/13681 18224/34725/13681 18212/34711/13681 +f 18213/34713/13681 18226/34728/13681 18224/34726/13681 +f 18225/34727/13683 18229/34732/13683 18223/34724/13683 +f 18225/34727/13683 18231/34734/13683 18229/34732/13683 +f 18232/34735/13681 18234/34737/13681 18230/34733/13681 +f 18232/34735/13681 18236/34739/13681 18234/34737/13681 +f 18235/34738/13683 18237/34740/13683 18233/34736/13683 +f 18235/34738/13683 18239/34742/13683 18237/34740/13683 +f 18240/34743/13681 18242/34745/13681 18238/34741/13681 +f 18240/34743/13681 18244/34747/13681 18242/34745/13681 +f 18243/34746/13683 18245/34748/13683 18241/34744/13683 +f 18243/34746/13683 18247/34750/13683 18245/34748/13683 +f 18248/34751/13681 18250/34753/13681 18246/34749/13681 +f 18248/34751/13681 18252/34755/13681 18250/34753/13681 +f 18251/34754/13683 18253/34756/13683 18249/34752/13683 +f 18251/34754/13683 18255/34758/13683 18253/34756/13683 +f 18256/34759/13681 18258/34761/13681 18254/34757/13681 +f 18256/34759/13681 18260/34763/13681 18258/34761/13681 +f 18259/34762/13683 18261/34764/13683 18257/34760/13683 +f 18259/34762/13683 18263/34766/13683 18261/34764/13683 +f 18264/34767/13681 18266/34770/13681 18262/34765/13681 +f 18264/34767/13681 18268/34772/13681 18266/34770/13681 +f 18267/34771/13683 18270/34775/13683 18265/34769/13683 +f 18267/34771/13683 18272/34777/13683 18270/34775/13683 +f 18273/34778/13681 18275/34780/13681 18271/34776/13681 +f 18273/34778/13681 18277/34782/13681 18275/34780/13681 +f 18276/34781/13683 18278/34783/13683 18274/34779/13683 +f 18276/34781/13683 18280/34785/13683 18278/34783/13683 +f 18281/34786/13681 18283/34788/13681 18279/34784/13681 +f 18281/34786/13681 18285/34790/13681 18283/34788/13681 +f 18284/34789/13683 18286/34791/13683 18282/34787/13683 +f 18284/34789/13683 18288/34793/13683 18286/34791/13683 +f 18289/34794/13681 18291/34796/13681 18287/34792/13681 +f 18289/34794/13681 18293/34798/13681 18291/34796/13681 +f 18292/34797/13683 18294/34799/13683 18290/34795/13683 +f 18292/34797/13683 18296/34801/13683 18294/34799/13683 +f 18297/34802/13681 18299/34804/13681 18295/34800/13681 +f 18297/34802/13681 18301/34806/13681 18299/34804/13681 +f 18300/34805/13683 18302/34807/13683 18298/34803/13683 +f 18300/34805/13683 18304/34809/13683 18302/34807/13683 +f 18305/34810/13681 18308/34813/13681 18303/34808/13681 +f 18305/34810/13681 18310/34815/13681 18308/34813/13681 +f 18309/34814/13683 18313/34818/13683 18307/34812/13683 +f 18309/34814/13683 18315/34820/13683 18313/34818/13683 +f 18316/34821/13681 18318/34823/13681 18314/34819/13681 +f 18316/34821/13681 18320/34825/13681 18318/34823/13681 +f 18319/34824/13683 18321/34826/13683 18317/34822/13683 +f 18319/34824/13683 18323/34828/13683 18321/34826/13683 +f 18324/34829/13681 18326/34831/13681 18322/34827/13681 +f 18324/34829/13681 18328/34833/13681 18326/34831/13681 +f 18327/34832/13683 18329/34834/13683 18325/34830/13683 +f 18327/34832/13683 18331/34836/13683 18329/34834/13683 +f 18332/34837/13681 18334/34839/13681 18330/34835/13681 +f 18332/34837/13681 18336/34841/13681 18334/34839/13681 +f 18335/34840/13683 18337/34842/13683 18333/34838/13683 +f 18335/34840/13683 18339/34844/13683 18337/34842/13683 +f 18340/34845/13681 18342/34847/13681 18338/34843/13681 +f 18340/34845/13681 18344/34849/13681 18342/34847/13681 +f 18343/34848/13683 18345/34850/13683 18341/34846/13683 +f 18343/34848/13683 18347/34852/13683 18345/34850/13683 +f 18348/34853/13681 18351/34856/13681 18346/34851/13681 +f 18348/34853/13681 18353/34858/13681 18351/34856/13681 +f 18352/34857/13683 18356/34861/13683 18350/34855/13683 +f 18352/34857/13683 18358/34863/13683 18356/34861/13683 +f 18359/34864/13681 18361/34866/13681 18357/34862/13681 +f 18359/34864/13681 18363/34868/13681 18361/34866/13681 +f 18362/34867/13683 18364/34869/13683 18360/34865/13683 +f 18362/34867/13683 18366/34871/13683 18364/34869/13683 +f 18367/34872/13681 18369/34874/13681 18365/34870/13681 +f 18367/34872/13681 18371/34876/13681 18369/34874/13681 +f 18370/34875/13683 18372/34877/13683 18368/34873/13683 +f 18370/34875/13683 18374/34879/13683 18372/34877/13683 +f 18375/34880/13681 18377/34882/13681 18373/34878/13681 +f 18375/34880/13681 18379/34884/13681 18377/34882/13681 +f 18378/34883/13683 18380/34885/13683 18376/34881/13683 +f 18378/34883/13683 18382/34887/13683 18380/34885/13683 +f 18383/34888/13681 18385/34890/13681 18381/34886/13681 +f 18383/34888/13681 18387/34892/13681 18385/34890/13681 +f 18386/34891/13683 18388/34893/13683 18384/34889/13683 +f 18386/34891/13683 18390/34895/13683 18388/34893/13683 +f 18391/34896/13681 18392/34897/13681 18393/34898/13681 18389/34894/13681 +f 18398/34903/13682 18394/34899/13682 18400/34905/13682 +f 18398/34903/13682 18400/34905/13682 18402/34907/13682 +f 18397/34902/13684 18401/34906/13684 18405/34910/13684 +f 18397/34902/13684 18405/34910/13684 18403/34908/13684 +s 1 +f 18404/34909/13682 18411/34916/13682 18406/34911/13682 +s 0 +f 18404/34909/13682 18408/34913/13682 18411/34916/13682 +s 1 +f 18399/34904/13685 18417/34922/13685 18450/34955/13685 +f 18399/34904/13685 18450/34955/13685 18442/34947/13685 +s 0 +f 18407/34912/13684 18410/34915/13684 18420/34925/13684 +f 18407/34912/13684 18420/34925/13684 18418/34923/13684 +f 18419/34924/13683 18422/34927/13683 18409/34914/13683 +f 18419/34924/13683 18423/34928/13683 18422/34927/13683 +s 1 +f 18421/34926/13682 18424/34929/13685 18427/34932/13685 +f 18421/34926/13682 18427/34932/13685 18425/34930/13682 +s 0 +f 18426/34931/13682 18428/34933/13682 18430/34935/13682 +f 18426/34931/13682 18430/34935/13682 18429/34934/13682 +f 18412/34917/13683 18433/34938/13683 18415/34920/13683 +f 18412/34917/13683 18432/34937/13683 18433/34938/13683 +s 1 +f 18436/34941/13683 18449/34954/13683 18441/34946/13683 +f 18436/34941/13683 18444/34949/13683 18449/34954/13683 +f 18417/34922/13685 18413/34918/13681 18447/34952/13681 +f 18417/34922/13685 18447/34952/13681 18450/34955/13685 +f 18395/34900/13685 18399/34904/13685 18442/34947/13685 +f 18395/34900/13685 18442/34947/13685 18439/34944/13685 +f 18414/34919/13686 18396/34901/13681 18440/34945/13687 +s 0 +f 18414/34919/13683 18440/34945/13683 18448/34953/13683 +f 18434/34939/13684 18416/34921/13684 18451/34956/13684 +f 18434/34939/13684 18451/34956/13684 18453/34958/13684 +f 18454/34959/13683 18452/34957/13683 18455/34960/13683 +f 18454/34959/13683 18455/34960/13683 18456/34961/13683 +f 18443/34948/13683 18481/34988/13683 18435/34940/13683 +f 18443/34948/13683 18478/34985/13683 18481/34988/13683 +f 18465/34970/13683 18468/34973/13683 18477/34983/13683 +f 18465/34970/13683 18477/34983/13683 18473/34978/13683 +f 18437/34942/13682 18476/34982/13682 18458/34963/13682 +f 18437/34942/13682 18466/34971/13682 18476/34982/13682 +f 18457/34962/13688 18470/34975/13688 18459/34964/13688 +f 18457/34962/13688 18474/34980/13688 18470/34975/13688 +f 18460/34965/13682 18446/34951/13682 18463/34968/13682 +f 18460/34965/13682 18463/34968/13682 18471/34976/13682 +f 18480/34987/13684 18489/34996/13684 18483/34990/13684 +f 18480/34987/13684 18486/34993/13684 18489/34996/13684 +f 18462/34967/13682 18445/34950/13682 18479/34986/13682 +f 18462/34967/13682 18479/34986/13682 18484/34991/13682 +f 18438/34943/13682 18488/34995/13682 18467/34972/13682 +f 18438/34943/13682 18482/34989/13682 18488/34995/13682 +f 18468/34973/13683 18465/34970/13683 18487/34994/13683 +f 18468/34973/13683 18487/34994/13683 18490/34997/13683 +f 18472/34977/13682 18510/35017/13682 18494/35001/13682 +f 18472/34977/13682 18501/35008/13682 18510/35017/13682 +f 18501/35008/13682 18555/35062/13682 18510/35017/13682 +f 18501/35008/13682 18546/35053/13682 18555/35062/13682 +f 18491/34998/13683 18512/35019/13683 18497/35004/13683 +f 18491/34998/13683 18508/35015/13683 18512/35019/13683 +f 18477/34984/13689 18504/35011/13689 18473/34979/13689 +f 18477/34984/13689 18507/35014/13689 18504/35011/13689 +f 18498/35005/13682 18475/34981/13682 18505/35012/13682 +f 18498/35005/13682 18505/35012/13682 18514/35021/13682 +f 18493/35000/13682 18526/35033/13682 18515/35022/13682 +f 18493/35000/13682 18520/35027/13682 18526/35033/13682 +f 18523/35030/13683 18525/35032/13683 18519/35026/13683 +f 18523/35030/13683 18528/35035/13683 18525/35032/13683 +f 18500/35007/13683 18496/35003/13683 18533/35040/13683 +f 18500/35007/13683 18533/35040/13683 18536/35043/13683 +f 18516/35023/13684 18530/35037/13684 18518/35025/13684 +f 18516/35023/13684 18527/35034/13684 18530/35037/13684 +f 18517/35024/13690 18524/35031/13690 18499/35006/13690 +f 18517/35024/13690 18529/35036/13690 18524/35031/13690 +f 18534/35041/13681 18538/35045/13681 18531/35038/13681 +f 18534/35041/13681 18543/35050/13681 18538/35045/13681 +f 18524/35031/13690 18535/35042/13690 18499/35006/13690 +f 18524/35031/13690 18544/35051/13690 18535/35042/13690 +f 18519/35026/13683 18542/35049/13683 18523/35030/13683 +f 18519/35026/13683 18537/35044/13683 18542/35049/13683 +f 18493/35000/13682 18539/35046/13682 18520/35027/13682 +f 18493/35000/13682 18532/35039/13682 18539/35046/13682 +f 18548/35055/13681 18553/35060/13681 18545/35052/13681 +f 18548/35055/13681 18557/35064/13681 18553/35060/13681 +s 1 +f 18509/35016/13683 18556/35063/13683 18513/35020/13683 +f 18509/35016/13683 18552/35059/13683 18556/35063/13683 +s 0 +f 18514/35021/13682 18505/35012/13682 18549/35056/13682 +f 18514/35021/13682 18549/35056/13682 18558/35065/13682 +s 1 +f 18506/35013/13683 18503/35010/13683 18547/35054/13683 +f 18506/35013/13683 18547/35054/13683 18550/35057/13683 +f 18447/34952/13681 18464/34969/13681 18561/35068/13681 +f 18447/34952/13681 18561/35068/13681 18559/35066/13681 +s 0 +f 18560/35067/13684 18564/35071/13684 18562/35069/13684 +f 18560/35067/13684 18563/35070/13684 18564/35071/13684 +s 1 +f 18511/35018/13691 18502/35009/13681 18566/35073/13681 +f 18511/35018/13691 18566/35073/13681 18568/35075/13681 +s 0 +f 18567/35074/13681 18569/35076/13681 18565/35072/13681 +f 18567/35074/13681 18570/35077/13681 18569/35076/13681 +s 1 +f 18521/35028/13692 18495/35002/13681 18572/35079/13681 +f 18521/35028/13692 18572/35079/13681 18574/35081/13681 +s 0 +f 18573/35080/13681 18575/35082/13681 18571/35078/13681 +f 18573/35080/13681 18576/35083/13681 18575/35082/13681 +f 18487/34994/13683 18465/34970/13683 18578/35085/13683 +f 18487/34994/13683 18578/35085/13683 18581/35088/13683 +f 18469/34974/13683 18577/35084/13683 18461/34966/13683 +f 18469/34974/13683 18579/35086/13683 18577/35084/13683 +s 1 +f 18485/34992/13684 18585/35092/13684 18580/35087/13684 +f 18485/34992/13684 18583/35090/13684 18585/35092/13684 +s 0 +f 18582/35089/13683 18587/35094/13683 18584/35091/13683 +f 18582/35089/13683 18586/35093/13683 18587/35094/13683 +f 18508/35015/13683 18591/35098/13683 18551/35058/13683 +f 18508/35015/13683 18589/35096/13683 18591/35098/13683 +f 18492/34999/13683 18590/35097/13683 18509/35016/13683 +f 18492/34999/13683 18588/35095/13683 18590/35097/13683 +f 18541/35048/13683 18522/35029/13683 18594/35101/13683 +f 18541/35048/13683 18594/35101/13683 18597/35104/13683 +f 18525/35032/13683 18593/35100/13683 18519/35026/13683 +f 18525/35032/13683 18595/35102/13683 18593/35100/13683 +f 18592/35099/13681 18598/35105/13681 18554/35061/13681 +f 18592/35099/13681 18600/35107/13681 18598/35105/13681 +f 18601/35108/13683 18599/35106/13683 18602/35109/13683 +f 18601/35108/13683 18602/35109/13683 18603/35110/13683 +s 1 +f 18540/35047/13681 18596/35103/13681 18607/35114/13681 +f 18540/35047/13681 18607/35114/13681 18605/35112/13681 +s 0 +f 18604/35111/13683 18609/35116/13683 18606/35113/13683 +f 18604/35111/13683 18608/35115/13683 18609/35116/13683 +s 1 +f 18215/34716/13690 18614/35121/13690 18228/34731/13690 +f 18215/34716/13690 18611/35118/13690 18614/35121/13690 +s 0 +f 18625/35133/13683 18635/35143/13683 18631/35139/13683 +f 18625/35133/13683 18623/35131/13683 18635/35143/13683 +f 18613/35120/13682 18227/34729/13682 18618/35126/13682 +f 18613/35120/13682 18618/35126/13682 18620/35128/13682 +f 18634/35142/13683 18630/35138/13683 18636/35144/13683 +f 18634/35142/13683 18636/35144/13683 18637/35145/13683 +f 18616/35123/13684 18610/35117/13684 18612/35119/13684 +f 18612/35119/13684 18619/35127/13684 18621/35129/13684 +f 18612/35119/13684 18621/35129/13684 18616/35123/13684 +f 18617/35124/13690 18622/35130/13690 18628/35136/13690 +f 18617/35124/13690 18628/35136/13690 18626/35134/13690 +f 18627/35135/13681 18629/35137/13681 18633/35141/13681 +f 18627/35135/13681 18633/35141/13681 18632/35140/13681 +s 1 +f 18618/35125/13681 18214/34714/13681 18227/34730/13681 +s 0 +f 18214/34715/13682 18615/35122/13682 18624/35132/13682 +f 18214/34715/13682 18624/35132/13682 18618/35126/13682 +f 18264/34768/13681 18641/35150/13681 18268/34773/13681 +f 18264/34768/13681 18639/35147/13681 18641/35150/13681 +f 18639/35148/13681 18647/35157/13681 18641/35151/13681 +f 18639/35148/13681 18644/35154/13681 18647/35157/13681 +f 18638/35146/13683 18651/35161/13683 18643/35153/13683 +f 18638/35146/13683 18649/35159/13683 18651/35161/13683 +f 18650/35160/13681 18657/35167/13681 18652/35162/13681 +f 18650/35160/13681 18655/35165/13681 18657/35167/13681 +f 18306/34811/13681 18664/35174/13681 18311/34816/13681 +f 18306/34811/13681 18661/35171/13681 18664/35174/13681 +f 18660/35170/13681 18667/35177/13681 18663/35173/13681 +f 18660/35170/13681 18666/35176/13681 18667/35177/13681 +s 1 +f 18349/34854/13693 18673/35183/13694 18355/34860/13695 +f 18349/34854/13693 18669/35179/13695 18673/35183/13694 +s 0 +f 18670/35180/13696 18680/35190/13696 18674/35184/13696 +f 18670/35180/13696 18677/35187/13696 18680/35190/13696 +f 18646/35156/13683 18681/35191/13683 18640/35149/13683 +f 18646/35156/13683 18683/35193/13683 18681/35191/13683 +f 18658/35168/13690 18684/35194/13690 18653/35163/13690 +f 18658/35168/13690 18685/35195/13690 18684/35194/13690 +f 18645/35155/13690 18687/35197/13690 18648/35158/13690 +f 18645/35155/13690 18686/35196/13690 18687/35197/13690 +f 18778/35292/13683 18671/35181/13683 18678/35188/13683 +f 18778/35292/13683 18688/35198/13683 18671/35181/13683 +f 18654/35164/13683 18692/35202/13683 18656/35166/13683 +f 18654/35164/13683 18690/35200/13683 18692/35202/13683 +f 18691/35201/13681 18696/35206/13681 18693/35203/13681 +f 18691/35201/13681 18694/35204/13681 18696/35206/13681 +f 18642/35152/13684 18697/35207/13684 18269/34774/13684 +f 18642/35152/13684 18699/35209/13684 18697/35207/13684 +f 18700/35210/13683 18698/35208/13683 18703/35213/13683 +f 18700/35210/13683 18703/35213/13683 18706/35216/13683 +f 18704/35214/13681 18708/35218/13681 18701/35211/13681 +f 18704/35214/13681 18711/35221/13681 18708/35218/13681 +f 18710/35220/13683 18713/35223/13683 18707/35217/13683 +f 18710/35220/13683 18714/35224/13683 18713/35223/13683 +f 18709/35219/13682 18715/35225/13682 18702/35212/13682 +f 18709/35219/13682 18716/35226/13682 18715/35225/13682 +f 18705/35215/13690 18718/35228/13690 18712/35222/13690 +f 18705/35215/13690 18717/35227/13690 18718/35228/13690 +f 18665/35175/13684 18719/35229/13684 18312/34817/13684 +f 18665/35175/13684 18721/35231/13684 18719/35229/13684 +f 18722/35232/13683 18720/35230/13683 18725/35235/13683 +f 18722/35232/13683 18725/35235/13683 18728/35238/13683 +f 18726/35236/13681 18730/35240/13681 18723/35233/13681 +f 18726/35236/13681 18733/35243/13681 18730/35240/13681 +f 18732/35242/13683 18735/35245/13683 18729/35239/13683 +f 18732/35242/13683 18736/35246/13683 18735/35245/13683 +f 18727/35237/13690 18738/35248/13690 18734/35244/13690 +f 18727/35237/13690 18737/35247/13690 18738/35248/13690 +f 18731/35241/13682 18739/35249/13682 18724/35234/13682 +f 18731/35241/13682 18740/35250/13682 18739/35249/13682 +f 18672/35182/13684 18741/35251/13684 18354/34859/13684 +f 18672/35182/13684 18743/35253/13684 18741/35251/13684 +f 18744/35254/13683 18742/35252/13683 18747/35257/13683 +f 18744/35254/13683 18747/35257/13683 18750/35260/13683 +f 18748/35258/13681 18752/35262/13681 18745/35255/13681 +f 18748/35258/13681 18755/35265/13681 18752/35262/13681 +f 18754/35264/13683 18757/35267/13683 18751/35261/13683 +f 18754/35264/13683 18758/35268/13683 18757/35267/13683 +f 18753/35263/13682 18759/35269/13682 18746/35256/13682 +f 18753/35263/13682 18760/35270/13682 18759/35269/13682 +f 18749/35259/13690 18762/35272/13690 18756/35266/13690 +f 18749/35259/13690 18761/35271/13690 18762/35272/13690 +f 18689/35199/13681 18766/35276/13681 18764/35274/13681 +f 18689/35199/13681 18765/35275/13681 18766/35276/13681 +f 18793/35307/13683 18781/35295/13683 18980/35519/13683 +f 18793/35307/13683 18784/35298/13683 18781/35295/13683 +f 18772/35282/13690 18782/35296/13690 18777/35291/13690 +f 18772/35282/13690 18780/35294/13690 18782/35296/13690 +f 18771/35281/13681 18787/35301/13681 18779/35293/13681 +f 18771/35281/13681 18786/35300/13681 18787/35301/13681 +f 18788/35302/13681 18791/35305/13681 18789/35303/13681 +f 18788/35302/13681 18790/35304/13681 18791/35305/13681 +f 18785/35299/13690 18800/35314/13690 18797/35311/13690 +f 18785/35299/13690 18795/35309/13690 18800/35314/13690 +f 18682/35192/13681 18804/35318/13681 18802/35316/13681 +f 18682/35192/13681 18803/35317/13681 18804/35318/13681 +f 18805/35319/13681 18810/35326/13681 18806/35321/13681 +f 18805/35319/13681 18807/35322/13681 18810/35326/13681 +s 1 +f 18815/35332/13697 18801/35315/13698 18809/35325/13699 +f 18815/35332/13697 18659/35169/13700 18801/35315/13698 +s 0 +f 18808/35324/13690 18817/35334/13690 18811/35327/13690 +f 18808/35324/13690 18814/35331/13690 18817/35334/13690 +f 18812/35328/13681 18822/35340/13681 18816/35333/13681 +f 18812/35328/13681 18819/35336/13681 18822/35340/13681 +f 18821/35339/13690 18828/35347/13690 18823/35341/13690 +f 18821/35339/13690 18826/35345/13690 18828/35347/13690 +f 18825/35343/13681 18832/35352/13681 18827/35346/13681 +f 18825/35343/13681 18829/35348/13681 18832/35352/13681 +f 18830/35350/13690 18838/35359/13690 18833/35353/13690 +f 18830/35350/13690 18835/35355/13690 18838/35359/13690 +f 18834/35354/13681 18842/35363/13681 18837/35357/13681 +f 18834/35354/13681 18840/35361/13681 18842/35363/13681 +f 18879/35405/13690 18845/35368/13690 18874/35398/13690 +f 18879/35405/13690 18924/35453/13690 18845/35368/13690 +f 18839/35360/13683 18849/35372/13683 18843/35366/13683 +f 18839/35360/13683 18846/35369/13683 18849/35372/13683 +f 18848/35371/13690 18854/35377/13690 18850/35373/13690 +f 18848/35371/13690 18852/35375/13690 18854/35377/13690 +f 18847/35370/13681 18858/35381/13681 18851/35374/13681 +f 18847/35370/13681 18856/35379/13681 18858/35381/13681 +f 18853/35376/13683 18855/35378/13683 18863/35386/13683 +f 18853/35376/13683 18863/35386/13683 18861/35384/13683 +f 18860/35383/13690 18865/35388/13690 18862/35385/13690 +f 18860/35383/13690 18864/35387/13690 18865/35388/13690 +f 18866/35389/13681 18868/35391/13681 18695/35205/13681 +f 18866/35389/13681 18870/35393/13681 18868/35391/13681 +f 18869/35392/13683 18871/35394/13683 18867/35390/13683 +f 18869/35392/13683 18872/35395/13683 18871/35394/13683 +f 18812/35329/13681 18875/35399/13681 18819/35337/13681 +f 18812/35329/13681 18873/35396/13681 18875/35399/13681 +f 18813/35330/13690 18879/35405/13690 18874/35398/13690 +f 18813/35330/13690 18877/35402/13690 18879/35405/13690 +f 18887/35414/13690 18881/35407/13690 18885/35412/13690 +f 18887/35414/13690 18891/35419/13690 18881/35407/13690 +f 18889/35416/13681 18892/35420/13681 18880/35406/13681 +f 18889/35416/13681 18895/35423/13681 18892/35420/13681 +s 1 +f 18842/35364/13681 18837/35358/13681 18884/35410/13681 +s 0 +f 18884/35411/13681 18882/35408/13681 18886/35413/13681 +f 18884/35411/13681 18842/35365/13681 18882/35408/13681 +f 18896/35425/13690 18898/35427/13690 18893/35421/13690 +f 18896/35425/13690 18901/35430/13690 18898/35427/13690 +f 18900/35429/13681 18902/35431/13681 18897/35426/13681 +f 18900/35429/13681 18903/35432/13681 18902/35431/13681 +f 18836/35356/13683 18904/35433/13683 18831/35351/13683 +f 18836/35356/13683 18905/35434/13683 18904/35433/13683 +f 18889/35417/13681 18909/35438/13681 18895/35424/13681 +f 18889/35417/13681 18907/35436/13681 18909/35438/13681 +f 18890/35418/13690 18915/35444/13690 18908/35437/13690 +f 18890/35418/13690 18910/35439/13690 18915/35444/13690 +f 18668/35178/13683 18906/35435/13683 18675/35185/13683 +f 18668/35178/13701 19051/35593/13701 18906/35435/13701 +f 18770/35280/13681 18917/35446/13681 18783/35297/13681 +f 18770/35280/13681 18916/35445/13681 18917/35446/13681 +f 18798/35312/13683 18918/35447/13683 18796/35310/13683 +f 18798/35312/13683 18920/35449/13683 18918/35447/13683 +f 18841/35362/13690 18919/35448/13690 18922/35451/13690 +f 18841/35362/13690 18844/35367/13690 18919/35448/13690 +f 18857/35380/13690 18926/35455/13690 18859/35382/13690 +f 18857/35380/13690 18925/35454/13690 18926/35455/13690 +f 18818/35335/13683 18931/35460/13683 18824/35342/13683 +f 18818/35335/13683 18927/35456/13683 18931/35460/13683 +f 18930/35459/13690 18935/35464/13690 18932/35461/13690 +f 18930/35459/13690 18934/35463/13690 18935/35464/13690 +f 18926/35455/13690 18936/35465/13690 18859/35382/13690 +f 18926/35455/13690 18937/35466/13690 18936/35465/13690 +s 1 +f 18775/35285/13689 18769/35279/13690 18940/35473/13689 +s 0 +f 18940/35474/13681 18938/35467/13681 18941/35476/13681 +f 18940/35475/13681 18775/35286/13681 18938/35468/13681 +f 18943/35478/13681 18431/34936/13681 18944/35479/13681 +f 18943/35478/13681 18944/35479/13681 18945/35480/13681 +f 18951/35486/13684 18948/35483/13684 18954/35489/13684 +f 18951/35486/13684 18954/35489/13684 18956/35491/13684 +s 1 +f 18957/35492/13682 18955/35490/13682 18958/35493/13682 +f 18957/35492/13682 18958/35493/13682 18959/35494/13682 +s 0 +f 18947/35482/13684 18963/35498/13684 18966/35501/13684 +f 18947/35482/13684 18966/35501/13684 18964/35499/13684 +f 18965/35500/13683 18967/35502/13683 18969/35504/13683 +f 18965/35500/13683 18969/35504/13683 18968/35503/13683 +f 18960/35495/13684 18950/35485/13684 18971/35506/13684 +f 18960/35495/13684 18971/35506/13684 18973/35508/13684 +f 18972/35507/13683 18974/35509/13683 18970/35505/13683 +f 18972/35507/13683 18975/35510/13683 18974/35509/13683 +f 18776/35287/13681 18977/35513/13681 18939/35469/13681 +f 18776/35288/13681 18976/35511/13681 18977/35514/13681 +f 18910/35439/13690 18988/35527/13690 18915/35444/13690 +f 18910/35439/13690 18987/35526/13690 18988/35527/13690 +s 1 +f 18883/35409/13681 18888/35415/13681 18986/35525/13681 +f 18883/35409/13681 18986/35525/13681 18984/35523/13681 +f 18676/35186/13681 18679/35189/13681 18982/35521/13681 +f 18676/35186/13681 18982/35521/13681 18979/35518/13681 +s 0 +f 18977/35515/13681 18989/35528/13681 18939/35470/13681 +f 18977/35516/13684 18989/35529/13684 18991/35533/13684 +f 18939/35471/13681 18990/35531/13681 18942/35477/13681 +f 18939/35472/13681 18989/35530/13681 18990/35532/13681 +f 18765/35275/13681 18994/35536/13681 18766/35276/13681 +f 18765/35275/13681 18992/35534/13681 18994/35536/13681 +f 18790/35304/13681 18998/35540/13681 18791/35305/13681 +f 18790/35304/13681 18996/35538/13681 18998/35540/13681 +f 18997/35539/13682 19001/35543/13682 18999/35541/13682 +f 18997/35539/13682 19000/35542/13682 19001/35543/13682 +f 18993/35535/13690 19006/35548/13690 18995/35537/13690 +f 18993/35535/13690 19004/35546/13690 19006/35548/13690 +f 19003/35545/13681 19010/35552/13681 19005/35547/13681 +f 19003/35545/13681 19009/35551/13681 19010/35552/13681 +f 19002/35544/13683 19013/35555/13683 19008/35550/13683 +f 19002/35544/13683 19012/35554/13683 19013/35555/13683 +s 1 +f 18767/35277/13681 18773/35283/13681 19016/35558/13681 +f 18767/35277/13681 19016/35558/13681 19014/35556/13681 +s 0 +f 19011/35553/13683 19007/35549/13683 19018/35560/13683 +f 19011/35553/13683 19018/35560/13683 19020/35562/13683 +f 19019/35561/13681 19021/35563/13681 19017/35559/13681 +f 19019/35561/13681 19022/35564/13681 19021/35563/13681 +f 18916/35445/13681 19025/35567/13681 18917/35446/13681 +f 18916/35445/13681 19023/35565/13681 19025/35567/13681 +f 19024/35566/13682 19032/35574/13682 19026/35568/13682 +f 19024/35566/13682 19028/35570/13682 19032/35574/13682 +f 19027/35569/13681 19037/35579/13681 19031/35573/13681 +f 19027/35569/13681 19033/35575/13681 19037/35579/13681 +s 1 +f 19034/35576/13681 19038/35580/13681 19042/35584/13681 +f 19034/35576/13681 19042/35584/13681 19040/35582/13681 +s 0 +f 19039/35581/13690 19045/35587/13690 19041/35583/13690 +f 19039/35581/13690 19043/35585/13690 19045/35587/13690 +s 1 +f 19044/35586/13681 19046/35588/13681 19050/35592/13681 +f 19044/35586/13681 19050/35592/13681 19048/35590/13681 +s 0 +f 19047/35589/13681 19054/35596/13681 19049/35591/13681 +f 19047/35589/13681 19052/35594/13681 19054/35596/13681 +f 19036/35578/13683 19055/35597/13683 19030/35572/13683 +f 19036/35578/13683 19056/35598/13683 19055/35597/13683 +f 19029/35571/13683 19035/35577/13683 19060/35602/13683 +f 19029/35571/13683 19060/35602/13683 19058/35600/13683 +f 19057/35599/13681 19062/35604/13681 19059/35601/13681 +f 19057/35599/13681 19061/35603/13681 19062/35604/13681 +f 18803/35317/13681 19065/35607/13681 18804/35318/13681 +f 18803/35317/13681 19063/35605/13681 19065/35607/13681 +f 19064/35606/13690 19071/35613/13690 19066/35608/13690 +f 19064/35606/13690 19069/35611/13690 19071/35613/13690 +f 19068/35610/13681 19076/35618/13681 19070/35612/13681 +f 19068/35610/13681 19074/35616/13681 19076/35618/13681 +f 19075/35617/13682 19081/35623/13682 19077/35619/13682 +f 19075/35617/13682 19079/35621/13682 19081/35623/13682 +s 1 +f 19080/35622/13681 19082/35624/13681 19086/35628/13681 +f 19080/35622/13681 19086/35628/13681 19084/35626/13681 +s 0 +f 19083/35625/13681 19088/35630/13681 19085/35627/13681 +f 19083/35625/13681 19087/35629/13681 19088/35630/13681 +f 19067/35609/13683 19090/35632/13683 19073/35615/13683 +f 19067/35609/13683 19089/35631/13683 19090/35632/13683 +f 19078/35620/13683 19072/35614/13683 19092/35634/13683 +f 19078/35620/13683 19092/35634/13683 19094/35636/13683 +f 19093/35635/13681 19095/35637/13681 19091/35633/13681 +f 19093/35635/13681 19096/35638/13681 19095/35637/13681 +s 1 +f 18662/35172/13702 18894/35422/13703 19053/35595/13704 +f 18662/35172/13702 18899/35428/13705 18894/35422/13703 +s 0 +f 18783/35297/13681 18913/35442/13681 18770/35280/13681 +f 18783/35297/13681 18911/35440/13681 18913/35442/13681 +f 18912/35441/13690 19101/35643/13690 18914/35443/13690 +f 18912/35441/13690 19099/35641/13690 19101/35643/13690 +f 19098/35640/13681 19106/35648/13681 19100/35642/13681 +f 19098/35640/13681 19104/35646/13681 19106/35648/13681 +f 19105/35647/13682 19112/35654/13682 19107/35649/13682 +f 19105/35647/13682 19110/35652/13682 19112/35654/13682 +f 19109/35651/13681 19114/35656/13681 19111/35653/13681 +f 19109/35651/13681 19113/35655/13681 19114/35656/13681 +f 19097/35639/13683 19116/35658/13683 19103/35645/13683 +f 19097/35639/13683 19115/35657/13683 19116/35658/13683 +f 19108/35650/13683 19102/35644/13683 19118/35660/13683 +f 19108/35650/13683 19118/35660/13683 19120/35662/13683 +f 19119/35661/13681 19121/35663/13681 19117/35659/13681 +f 19119/35661/13681 19122/35664/13681 19121/35663/13681 +f 18983/35522/13681 19126/35668/13681 18985/35524/13681 +f 18983/35522/13681 19124/35666/13681 19126/35668/13681 +f 19123/35665/13683 19130/35672/13683 19125/35667/13683 +f 19123/35665/13683 19127/35669/13683 19130/35672/13683 +f 19128/35670/13681 19134/35676/13681 19131/35673/13681 +f 19128/35670/13681 19132/35674/13681 19134/35676/13681 +f 18799/35313/13681 19137/35679/13681 18921/35450/13681 +f 18799/35313/13681 19135/35677/13681 19137/35679/13681 +f 19136/35678/13683 19138/35680/13683 19140/35682/13683 +f 19136/35678/13683 19140/35682/13683 19139/35681/13683 +f 19129/35671/13682 19144/35686/13682 19133/35675/13682 +f 19129/35671/13682 19142/35684/13682 19144/35686/13682 +f 19141/35683/13681 19146/35688/13681 19143/35685/13681 +f 19141/35683/13681 19145/35687/13681 19146/35688/13681 +f 18792/35306/13681 19149/35691/13681 18794/35308/13681 +f 18792/35306/13681 19147/35689/13681 19149/35691/13681 +f 19148/35690/13683 19150/35692/13683 19155/35697/13683 +f 19148/35690/13683 19155/35697/13683 19152/35694/13683 +f 19151/35693/13706 19158/35700/13706 19154/35696/13706 +f 19151/35693/13706 19156/35698/13706 19158/35700/13706 +f 19157/35699/13682 19161/35703/13682 19153/35695/13682 +f 19157/35699/13682 19163/35705/13682 19161/35703/13682 +f 19162/35704/13681 19165/35707/13681 19160/35702/13681 +f 19162/35704/13681 19166/35708/13681 19165/35707/13681 +f 18978/35517/13690 19168/35710/13690 18981/35520/13690 +f 18978/35517/13690 19167/35709/13690 19168/35710/13690 +f 19159/35701/13683 19164/35706/13683 19170/35712/13683 +f 19159/35701/13683 19170/35712/13683 19169/35711/13683 +f 18786/35300/13681 19173/35715/13681 18787/35301/13681 +f 18786/35300/13681 19171/35713/13681 19173/35715/13681 +f 19172/35714/13682 19180/35722/13682 19174/35716/13682 +f 19172/35714/13682 19176/35718/13682 19180/35722/13682 +f 19175/35717/13681 19185/35727/13681 19179/35721/13681 +f 19175/35717/13681 19181/35723/13681 19185/35727/13681 +f 19182/35724/13690 19190/35732/13690 19186/35728/13690 +f 19182/35724/13690 19188/35730/13690 19190/35732/13690 +f 19187/35729/13681 19192/35734/13681 19189/35731/13681 +f 19187/35729/13681 19191/35733/13681 19192/35734/13681 +f 19177/35719/13683 19183/35725/13683 19196/35738/13683 +f 19177/35719/13683 19196/35738/13683 19194/35736/13683 +f 19193/35735/13681 19198/35740/13681 19195/35737/13681 +f 19193/35735/13681 19197/35739/13681 19198/35740/13681 +f 19184/35726/13683 19199/35741/13683 19178/35720/13683 +f 19184/35726/13683 19200/35742/13683 19199/35741/13683 +f 18666/35176/13681 19203/35745/13681 18667/35177/13681 +f 18666/35176/13681 19201/35743/13681 19203/35745/13681 +f 19202/35744/13690 19209/35751/13690 19204/35746/13690 +f 19202/35744/13690 19207/35749/13690 19209/35751/13690 +f 19206/35748/13681 19214/35756/13681 19208/35750/13681 +f 19206/35748/13681 19212/35754/13681 19214/35756/13681 +f 19213/35755/13682 19220/35762/13682 19215/35757/13682 +f 19213/35755/13682 19218/35760/13682 19220/35762/13682 +f 19217/35759/13707 19222/35764/13707 19219/35761/13707 +f 19217/35759/13707 19221/35763/13707 19222/35764/13707 +f 19205/35747/13683 19224/35766/13683 19211/35753/13683 +f 19205/35747/13683 19223/35765/13683 19224/35766/13683 +f 19216/35758/13683 19210/35752/13683 19226/35768/13683 +f 19216/35758/13683 19226/35768/13683 19228/35770/13683 +f 19227/35769/13681 19229/35771/13681 19225/35767/13681 +f 19227/35769/13681 19230/35772/13681 19229/35771/13681 +f 18686/35196/13690 19232/35774/13690 18687/35197/13690 +f 18686/35196/13690 19231/35773/13690 19232/35774/13690 +f 18685/35195/13690 19233/35775/13690 18684/35194/13690 +f 18685/35195/13690 19234/35776/13690 19233/35775/13690 +f 18805/35320/13681 19237/35779/13681 18807/35323/13681 +f 18805/35320/13681 19235/35777/13681 19237/35779/13681 +f 19236/35778/13683 19238/35780/13683 19242/35785/13683 +f 19236/35778/13683 19242/35785/13683 19240/35783/13683 +f 19239/35781/13681 19244/35787/13681 19241/35784/13681 +f 19239/35782/13681 19243/35786/13681 19244/35788/13681 +f 18876/35401/13681 19247/35791/13681 18878/35403/13681 +f 18876/35401/13681 19245/35789/13681 19247/35791/13681 +f 18878/35404/13681 19249/35794/13681 18923/35452/13681 +f 18878/35404/13681 19247/35792/13681 19249/35794/13681 +f 19246/35790/13682 19252/35797/13682 19248/35793/13682 +f 19246/35790/13682 19251/35796/13682 19252/35797/13682 +f 19248/35793/13682 19253/35798/13682 19250/35795/13682 +f 19248/35793/13682 19252/35797/13682 19253/35798/13682 +f 18928/35457/13681 19256/35801/13681 18933/35462/13681 +f 18928/35457/13681 19254/35799/13681 19256/35801/13681 +f 19255/35800/13682 19261/35806/13682 19257/35802/13682 +f 19255/35800/13682 19259/35804/13682 19261/35806/13682 +f 19258/35803/13681 19264/35809/13681 19260/35805/13681 +f 19258/35803/13681 19262/35807/13681 19264/35809/13681 +f 19263/35808/13690 19267/35812/13690 19265/35810/13690 +f 19263/35808/13690 19266/35811/13690 19267/35812/13690 +f 18820/35338/13681 19270/35815/13681 18929/35458/13681 +f 18820/35338/13681 19268/35813/13681 19270/35815/13681 +f 19269/35814/13683 19271/35816/13683 19273/35818/13683 +f 19269/35814/13683 19273/35818/13683 19272/35817/13683 +f 18875/35399/13681 19274/35819/13681 18819/35337/13681 +f 18875/35399/13681 19276/35821/13681 19274/35819/13681 +f 19277/35823/13690 19279/35825/13690 19275/35820/13690 +f 19277/35823/13690 19280/35826/13690 19279/35825/13690 +f 18875/35400/13681 19285/35831/13681 19276/35822/13681 +f 18875/35400/13681 19283/35829/13681 19285/35831/13681 +f 18873/35397/13681 19283/35829/13681 18875/35400/13681 +f 18873/35397/13681 19281/35827/13681 19283/35829/13681 +f 19284/35830/13683 19287/35833/13683 19290/35836/13683 +f 19284/35830/13683 19290/35836/13683 19289/35835/13683 +f 19282/35828/13683 19284/35830/13683 19289/35835/13683 +f 19282/35828/13683 19289/35835/13683 19288/35834/13683 +f 19286/35832/13690 19291/35837/13690 19278/35824/13690 +f 19286/35832/13690 19292/35838/13690 19291/35837/13690 +f 18935/35464/13690 19294/35840/13690 18932/35461/13690 +f 18935/35464/13690 19296/35842/13690 19294/35840/13690 +f 19295/35841/13681 19297/35843/13681 19293/35839/13681 +f 19295/35841/13681 19299/35845/13681 19297/35843/13681 +f 19300/35846/13682 19302/35848/13682 19298/35844/13682 +f 19300/35846/13682 19304/35850/13682 19302/35848/13682 +f 19303/35849/13681 19305/35851/13681 19301/35847/13681 +f 19303/35849/13681 19306/35852/13681 19305/35851/13681 +f 18825/35344/13681 19309/35855/13681 18829/35349/13681 +f 18825/35344/13681 19307/35853/13681 19309/35855/13681 +f 19308/35854/13683 19310/35856/13683 19312/35858/13683 +f 19308/35854/13683 19312/35858/13683 19311/35857/13683 +f 18936/35465/13690 19314/35860/13690 18859/35382/13690 +f 18936/35465/13690 19317/35863/13690 19314/35860/13690 +f 19316/35862/13681 19318/35864/13681 19313/35859/13681 +f 19316/35862/13681 19321/35867/13681 19318/35864/13681 +f 19322/35868/13682 19324/35870/13682 19319/35865/13682 +f 19322/35868/13682 19326/35872/13682 19324/35870/13682 +f 19325/35871/13681 19327/35873/13681 19323/35869/13681 +f 19325/35871/13681 19328/35874/13681 19327/35873/13681 +f 19320/35866/13683 19315/35861/13683 19330/35876/13683 +f 19320/35866/13683 19330/35876/13683 19332/35878/13683 +f 19331/35877/13681 19333/35879/13681 19329/35875/13681 +f 19331/35877/13681 19334/35880/13681 19333/35879/13681 +f 18768/35278/13683 19015/35557/13683 18774/35284/13683 +f 18768/35278/13683 18763/35273/13683 19015/35557/13683 +f 18776/35289/13681 19336/35882/13681 18976/35512/13681 +f 18776/35290/13681 19335/35881/13681 19336/35883/13681 +f 18221/34722/13683 19337/35884/13683 18218/34719/13683 +f 18221/34722/13683 19339/35886/13683 19337/35884/13683 +f 19338/35885/13681 19340/35887/13681 18219/34720/13681 +f 19338/35885/13681 19341/35888/13681 19340/35887/13681 +f 19342/35889/13681 19343/35890/13681 19345/35892/13681 +f 19342/35889/13681 19345/35892/13681 19344/35891/13681 +f 18962/35497/13683 19346/35893/13683 18946/35481/13683 +f 18962/35497/13683 19347/35894/13683 19346/35893/13683 +s 1 +f 18949/35484/13682 19349/35896/13682 18952/35487/13682 +f 18949/35484/13682 19348/35895/13682 19349/35896/13682 +s 0 +f 18953/35488/13683 18961/35496/13683 19351/35898/13683 +f 18953/35488/13708 19351/35898/13708 19350/35897/13708 +f 18217/34718/13684 18216/34717/13684 19352/35899/13684 +f 18217/34718/13684 19352/35899/13684 19353/35900/13684 +o Cube.001 +v -7.891569 -0.319850 -26.793911 +v -7.891569 -0.319850 -26.793911 +v -7.891569 -0.319850 -26.793911 +v -7.891569 -0.019850 -26.793911 +v -7.891569 -0.019850 -26.793911 +v -7.891569 -0.019850 -26.793911 +v -7.891569 -0.319850 -26.493912 +v -7.891569 -0.319850 -26.493912 +v -7.891569 -0.319850 -26.493912 +v -7.891569 -0.019850 -26.493912 +v -7.891569 -0.019850 -26.493912 +v -7.891569 -0.019850 -26.493912 +v -8.191568 -0.319850 -26.793911 +v -8.191568 -0.319850 -26.793911 +v -8.191568 -0.319850 -26.793911 +v -8.191568 -0.019850 -26.793911 +v -8.191568 -0.019850 -26.793911 +v -8.191568 -0.019850 -26.793911 +v -8.191568 -0.319850 -26.493912 +v -8.191568 -0.319850 -26.493912 +v -8.191568 -0.319850 -26.493912 +v -8.191568 -0.019850 -26.493912 +v -8.191568 -0.019850 -26.493912 +v -8.191568 -0.019850 -26.493912 +vn 1.0000 -0.0000 -0.0000 +vn -0.0000 -0.0000 1.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -1.0000 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vt 0.492448 0.470833 +vt 0.477865 0.514352 +vt 0.492448 0.529167 +vt 0.507552 0.470833 +vt 0.507552 0.529167 +vt 0.522135 0.514352 +vt 0.492448 0.485648 +vt 0.477865 0.500463 +vt 0.492448 0.485648 +vt 0.507552 0.485648 +vt 0.507552 0.485648 +vt 0.522135 0.500463 +vt 0.492448 0.514352 +vt 0.492448 0.514352 +vt 0.492448 0.514352 +vt 0.507552 0.514352 +vt 0.507552 0.514352 +vt 0.507552 0.514352 +vt 0.492448 0.500463 +vt 0.492448 0.500463 +vt 0.492448 0.500463 +vt 0.507552 0.500463 +vt 0.507552 0.500463 +vt 0.507552 0.500463 +s 0 +usemtl Generic_walls +f 19354/35901/13709 19357/35904/13709 19363/35910/13709 +f 19354/35901/13709 19363/35910/13709 19360/35907/13709 +f 19362/35909/13710 19364/35911/13710 19375/35922/13710 +f 19362/35909/13710 19375/35922/13710 19373/35920/13710 +f 19374/35921/13711 19377/35924/13711 19371/35918/13711 +f 19374/35921/13711 19371/35918/13711 19368/35915/13711 +f 19367/35914/13712 19369/35916/13712 19358/35905/13712 +f 19367/35914/13712 19358/35905/13712 19356/35903/13712 +f 19361/35908/13713 19372/35919/13713 19366/35913/13713 +f 19361/35908/13713 19366/35913/13713 19355/35902/13713 +f 19376/35923/13714 19365/35912/13714 19359/35906/13714 +f 19376/35923/13714 19359/35906/13714 19370/35917/13714 +o Cube.002 +v -12.758720 -0.206374 -34.001987 +v -12.758720 -0.206374 -34.001987 +v -12.758720 -0.206374 -34.001987 +v -13.302132 -0.206374 -34.110081 +v -13.302132 -0.206374 -34.110081 +v -13.302132 -0.206374 -34.110081 +v -13.762813 -0.206374 -34.417896 +v -13.762813 -0.206374 -34.417896 +v -13.762813 -0.206374 -34.417896 +v -14.070630 -0.206374 -34.878578 +v -14.070630 -0.206374 -34.878578 +v -14.070630 -0.206374 -34.878578 +v -14.178721 -0.206374 -35.421989 +v -14.178721 -0.206374 -35.421989 +v -14.178721 -0.206374 -35.421989 +v -14.070630 -0.206374 -35.965397 +v -14.070630 -0.206374 -35.965397 +v -14.070630 -0.206374 -35.965397 +v -13.762813 -0.206374 -36.426079 +v -13.762813 -0.206374 -36.426079 +v -13.762813 -0.206374 -36.426079 +v -13.762813 -0.206374 -36.426079 +v -13.302132 -0.206374 -36.733898 +v -13.302132 -0.206374 -36.733898 +v -13.302132 -0.206374 -36.733898 +v -12.758721 -0.206374 -36.841988 +v -12.758721 -0.206374 -36.841988 +v -12.758721 -0.206374 -36.841988 +v -12.215311 -0.206374 -36.733898 +v -12.215311 -0.206374 -36.733898 +v -12.215311 -0.206374 -36.733898 +v -11.754629 -0.206374 -36.426079 +v -11.754629 -0.206374 -36.426079 +v -11.754629 -0.206374 -36.426079 +v -11.446812 -0.206374 -35.965397 +v -11.446812 -0.206374 -35.965397 +v -11.446812 -0.206374 -35.965397 +v -11.338720 -0.206374 -35.421989 +v -11.338720 -0.206374 -35.421989 +v -11.338720 -0.206374 -35.421989 +v -11.446812 -0.206374 -34.878578 +v -11.446812 -0.206374 -34.878578 +v -11.446812 -0.206374 -34.878578 +v -11.754629 -0.206374 -34.417896 +v -11.754629 -0.206374 -34.417896 +v -11.754629 -0.206374 -34.417896 +v -11.754629 -0.206374 -34.417896 +v -12.215311 -0.206374 -34.110077 +v -12.215311 -0.206374 -34.110077 +v -12.215311 -0.206374 -34.110077 +v -15.564468 -0.030320 -29.131683 +v -15.564468 -0.030320 -29.131683 +v -15.564468 -0.030320 -29.131683 +v -15.564472 0.469680 -29.131681 +v -15.564472 0.469680 -29.131681 +v -15.564472 0.469680 -29.131681 +v -15.564472 0.469680 -29.131681 +v -15.564472 0.469680 -29.131681 +v -15.564472 0.469680 -29.131681 +v -22.208776 -0.030320 -29.695868 +v -22.208776 -0.030320 -29.695868 +v -22.208776 -0.030320 -29.695868 +v -22.208776 0.469680 -29.695868 +v -22.208776 0.469680 -29.695868 +v -22.208776 0.469680 -29.695868 +v -22.208776 0.469680 -29.695868 +v -22.208776 0.469680 -29.695868 +v -22.208776 0.469680 -29.695868 +v -10.834124 -0.030320 -35.594975 +v -10.834124 -0.030320 -35.594975 +v -10.834124 0.469680 -35.594975 +v -10.834124 0.469680 -35.594975 +v -10.834124 0.469680 -35.594975 +v -10.834124 0.469680 -35.594975 +v -11.702402 -0.030320 -36.947998 +v -11.702402 -0.030320 -36.947998 +v -11.702402 0.469680 -36.947998 +v -11.702402 0.469680 -36.947998 +v -11.702402 0.469680 -36.947998 +v -11.702402 0.469680 -36.947998 +v -15.816469 -0.030320 -35.956917 +v -15.816469 -0.030320 -35.956917 +v -13.327617 0.469680 -32.689980 +v -13.327617 0.469680 -32.689980 +v -13.327617 0.469680 -32.689980 +v -13.327617 0.469680 -32.689980 +v -15.816471 0.469680 -35.956959 +v -15.816471 0.469680 -35.956959 +v -15.816471 0.469680 -35.956959 +v -15.816471 0.469680 -35.956959 +v -13.327617 -0.030320 -32.689980 +v -18.894421 -0.030320 -29.452751 +v -18.894421 -0.030320 -29.452751 +v -18.838463 0.469680 -29.715481 +v -18.838463 0.469680 -29.715481 +v -18.838463 0.469680 -29.715481 +v -18.838463 0.469680 -29.715481 +v -10.982808 -0.030320 -36.455997 +v -10.982808 -0.030320 -36.455997 +v -10.982808 0.469680 -36.455997 +v -10.982808 0.469680 -36.455997 +v -10.982808 0.469680 -36.455997 +v -10.982808 0.469680 -36.455997 +v -14.564901 0.469680 -34.192921 +v -14.564901 0.469680 -34.192921 +v -14.564901 0.469680 -34.192921 +v -14.564901 0.469680 -34.192921 +v -13.530028 0.469680 -37.113876 +v -13.530028 0.469680 -37.113876 +v -13.530028 0.469680 -37.113876 +v -13.530028 0.469680 -37.113876 +v -11.328451 -0.030320 -34.127857 +v -11.328451 -0.030320 -34.127857 +v -13.530028 -0.030320 -37.113876 +v -13.530028 -0.030320 -37.113876 +v -11.328451 0.469680 -34.127857 +v -11.328451 0.469680 -34.127857 +v -11.328451 0.469680 -34.127857 +v -11.328451 0.469680 -34.127857 +v -16.613605 0.469680 -29.530779 +v -16.613605 0.469680 -29.530779 +v -16.613605 0.469680 -29.530779 +v -16.613605 0.469680 -29.530779 +v -16.613605 0.469680 -29.530779 +v -22.618362 -0.030320 -28.977131 +v -22.618362 -0.030320 -28.977131 +v -22.618362 -0.030320 -28.977131 +v -22.618362 0.469680 -28.977131 +v -22.618362 0.469680 -28.977131 +v -22.618362 0.469680 -28.977131 +v -22.618362 0.469680 -28.977131 +v -22.618362 0.469680 -28.977131 +v -15.883825 -0.030320 -28.276569 +v -15.883825 -0.030320 -28.276569 +v -15.883825 -0.030320 -28.276569 +v -15.883824 0.469680 -28.276566 +v -15.883824 0.469680 -28.276566 +v -15.883824 0.469680 -28.276566 +v -15.883824 0.469680 -28.276566 +v -15.883824 0.469680 -28.276566 +v -18.903143 -0.030320 -20.720402 +v -18.903143 -0.030320 -20.720402 +v -18.903143 0.469680 -20.720406 +v -18.903143 0.469680 -20.720406 +v -18.903143 0.469680 -20.720406 +v -16.310219 -0.030320 -22.662256 +v -16.310219 -0.030320 -22.662256 +v -16.310219 0.469680 -22.662256 +v -16.310219 0.469680 -22.662256 +v -16.310219 0.469680 -22.662256 +v -16.141582 -0.030320 -27.033762 +v -16.141582 -0.030320 -27.033762 +v -22.419514 0.469680 -28.187683 +v -22.419514 0.469680 -28.187683 +v -22.419514 0.469680 -28.187683 +v -22.419514 0.469680 -28.187683 +v -16.141582 0.469680 -27.033762 +v -16.141582 0.469680 -27.033762 +v -16.141582 0.469680 -27.033762 +v -16.141582 0.469680 -27.033762 +v -22.419514 -0.030320 -28.187683 +v -22.419514 -0.030320 -28.187683 +v -13.302132 0.469882 -34.110081 +v -13.302132 0.469882 -34.110081 +v -13.302132 0.469882 -34.110081 +v -13.302132 0.469882 -34.110081 +v -12.758720 0.469680 -34.001987 +v -12.758720 0.469680 -34.001987 +v -12.758720 0.469680 -34.001987 +v -12.758720 0.469680 -34.001987 +v -11.338720 0.489826 -35.421989 +v -11.338720 0.489826 -35.421989 +v -11.338720 0.489826 -35.421989 +v -11.338720 0.489826 -35.421989 +v -11.754629 0.497678 -36.426079 +v -11.754629 0.497678 -36.426079 +v -11.754629 0.497678 -36.426079 +v -11.754629 0.497678 -36.426079 +v -13.945692 0.469680 -33.064194 +v -13.945692 0.469680 -33.064194 +v -13.945692 0.469680 -33.064194 +v -13.945692 0.469680 -33.064194 +v -14.208815 0.469680 -33.235573 +v -14.208815 0.469680 -33.235573 +v -14.208815 0.469680 -33.235573 +v -14.208815 0.469680 -33.235573 +v -14.208815 0.469680 -33.235573 +v -14.208815 0.469680 -33.235573 +v -13.762813 0.469873 -36.426079 +v -13.762813 0.469873 -36.426079 +v -13.762813 0.469873 -36.426079 +v -13.762813 0.469873 -36.426079 +v -12.215311 0.483915 -36.733898 +v -12.215311 0.483915 -36.733898 +v -12.215311 0.483915 -36.733898 +v -12.215311 0.483915 -36.733898 +v -11.446812 0.504443 -35.965397 +v -11.446812 0.504443 -35.965397 +v -11.446812 0.504443 -35.965397 +v -11.446812 0.504443 -35.965397 +v -13.302132 0.476092 -36.733898 +v -13.302132 0.476092 -36.733898 +v -13.302132 0.476092 -36.733898 +v -13.302132 0.476092 -36.733898 +v -14.178721 0.469680 -35.421989 +v -14.178721 0.469680 -35.421989 +v -14.178721 0.469680 -35.421989 +v -14.178721 0.469680 -35.421989 +v -14.178721 0.469680 -35.421989 +v -16.674454 -0.030320 -29.238705 +v -16.674454 -0.030320 -29.238705 +v -11.754629 0.477959 -34.417896 +v -11.754629 0.477959 -34.417896 +v -11.754629 0.477959 -34.417896 +v -11.754629 0.477959 -34.417896 +v -14.070630 0.469680 -35.965397 +v -14.070630 0.469680 -35.965397 +v -14.070630 0.469680 -35.965397 +v -14.070630 0.469680 -35.965397 +v -14.070630 0.474125 -34.878578 +v -14.070630 0.474125 -34.878578 +v -14.070630 0.474125 -34.878578 +v -14.070630 0.474125 -34.878578 +v -13.762813 0.475118 -34.417896 +v -13.762813 0.475118 -34.417896 +v -13.762813 0.475118 -34.417896 +v -13.762813 0.475118 -34.417896 +v -12.215311 0.471419 -34.110077 +v -12.215311 0.471419 -34.110077 +v -12.215311 0.471419 -34.110077 +v -12.215311 0.471419 -34.110077 +v -11.446812 0.485155 -34.878578 +v -11.446812 0.485155 -34.878578 +v -11.446812 0.485155 -34.878578 +v -11.446812 0.485155 -34.878578 +v -17.784437 -0.030320 -29.345728 +v -17.784437 -0.030320 -29.345728 +v -12.758721 0.480491 -36.841988 +v -12.758721 0.480491 -36.841988 +v -12.758721 0.480491 -36.841988 +v -12.758721 0.480491 -36.841988 +v -17.716797 0.469680 -29.624216 +v -17.716797 0.469680 -29.624216 +v -17.716797 0.469680 -29.624216 +v -17.716797 0.469680 -29.624216 +v -19.931564 0.469680 -29.812279 +v -19.931564 0.469680 -29.812279 +v -19.931564 0.469680 -29.812279 +v -19.931564 0.469680 -29.812279 +v -21.043142 0.469680 -29.906904 +v -21.043142 0.469680 -29.906904 +v -21.043142 0.469680 -29.906904 +v -21.043142 0.469680 -29.906904 +v -21.043142 0.469680 -29.906904 +v -21.103992 -0.030320 -29.614828 +v -21.103992 -0.030320 -29.614828 +v -19.999207 -0.030320 -29.533789 +v -19.999207 -0.030320 -29.533789 +v -15.399281 0.469680 -35.368946 +v -14.982091 0.469680 -34.780933 +v -14.982091 0.469680 -34.780933 +v -14.982091 0.469680 -34.780933 +v -14.982091 0.469680 -34.780933 +v -12.090465 0.469680 -33.555912 +v -12.090465 0.469680 -33.555912 +v -12.090465 0.469680 -33.555912 +v -12.090465 0.469680 -33.555912 +v -12.717492 0.469680 -33.148300 +v -12.717492 0.469680 -33.148300 +v -12.717492 0.469680 -33.148300 +v -12.717492 0.469680 -33.148300 +v -12.717492 -0.030320 -33.148300 +v -12.717492 -0.030320 -33.148300 +v -12.090464 -0.030320 -33.555912 +v -12.090464 -0.030320 -33.555912 +v -14.292175 -0.030320 -36.728226 +v -14.292175 -0.030320 -36.728226 +v -15.054322 -0.030320 -36.342571 +v -15.054322 -0.030320 -36.342571 +v -15.054323 0.469680 -36.342598 +v -15.054323 0.469680 -36.342598 +v -15.054323 0.469680 -36.342598 +v -15.054323 0.469680 -36.342598 +v -14.292176 0.469680 -36.728237 +v -14.292176 0.469680 -36.728237 +v -14.292176 0.469680 -36.728237 +v -14.292176 0.469680 -36.728237 +v -12.946252 0.469680 -37.183788 +v -12.946252 0.469680 -37.183788 +v -12.946252 0.469680 -37.183788 +v -12.946252 0.469680 -37.183788 +v -12.274441 0.469680 -37.124584 +v -12.274441 0.469680 -37.124584 +v -12.274441 0.469680 -37.124584 +v -12.274441 0.469680 -37.124584 +v -12.274442 -0.030320 -37.124584 +v -12.274442 -0.030320 -37.124584 +v -12.946252 -0.030320 -37.183788 +v -12.946252 -0.030320 -37.183788 +v -10.948482 -0.030320 -34.853607 +v -10.948482 -0.030320 -34.853607 +v -10.948482 0.469680 -34.853607 +v -10.948482 0.469680 -34.853607 +v -10.948482 0.469680 -34.853607 +v -10.948482 0.469680 -34.853607 +v -21.697308 0.469680 -26.628767 +v -21.697308 0.469680 -26.628767 +v -21.697308 0.469680 -26.628767 +v -21.697308 0.469680 -26.628767 +v -16.160990 -0.030320 -26.530712 +v -21.697306 -0.030320 -26.628767 +v -21.697306 -0.030320 -26.628767 +v -16.160990 0.469680 -26.530712 +v -16.160990 0.469680 -26.530712 +v -16.160990 0.469680 -26.530712 +v -20.242956 0.469680 -23.514309 +v -20.242956 0.469680 -23.514309 +v -20.242956 0.469680 -23.514309 +v -20.242956 0.469680 -23.514309 +v -16.281548 -0.030320 -23.405460 +v -16.281548 0.469680 -23.405460 +v -16.281548 0.469680 -23.405460 +v -16.281548 0.469680 -23.405460 +v -20.242954 -0.030320 -23.514305 +v -20.242954 -0.030320 -23.514305 +v -17.229025 -0.030320 -22.114555 +v -17.229025 -0.030320 -22.114555 +v -17.229027 0.469680 -22.114555 +v -17.229027 0.469680 -22.114555 +v -17.229027 0.469680 -22.114555 +v -17.229027 0.469680 -22.114555 +v -18.256968 0.469680 -27.422583 +v -18.256968 0.469680 -27.422583 +v -18.256968 0.469680 -27.422583 +v -17.235445 0.469680 -26.553610 +v -17.235445 0.469680 -26.553610 +v -17.235445 0.469680 -26.553610 +v -17.235445 0.469680 -26.553610 +v -17.235445 0.469680 -26.553610 +v -17.312122 0.469680 -23.431995 +v -17.312122 0.469680 -23.431995 +v -17.312122 0.469680 -23.431995 +v -17.312122 0.469680 -23.431995 +v -17.312122 0.469680 -23.431995 +v -17.235445 0.299680 -26.553610 +v -17.235445 0.299680 -26.553610 +v -17.312122 0.299680 -23.431995 +v -17.312122 0.299680 -23.431995 +v -16.160990 -0.030320 -26.530712 +v -17.235445 -0.030320 -26.553610 +v -16.281548 -0.030320 -23.405460 +v -17.312122 -0.030320 -23.431995 +v -16.885399 0.299680 -26.553610 +v -16.885399 0.299680 -26.553610 +v -16.962074 0.299680 -23.431995 +v -16.962074 0.299680 -23.431995 +v -16.885401 0.129680 -26.553629 +v -16.885401 0.129680 -26.553629 +v -16.962076 0.129680 -23.432014 +v -16.962076 0.129680 -23.432014 +v -16.535397 0.129680 -26.553627 +v -16.535397 0.129680 -26.553627 +v -16.612074 0.129680 -23.432014 +v -16.612074 0.129680 -23.432014 +v -16.535397 -0.030320 -26.553608 +v -16.612072 -0.030320 -23.431995 +v -20.579590 -0.030320 -31.291599 +v -20.579590 -0.030320 -31.291599 +v -14.998680 0.469680 -30.051497 +v -14.998680 0.469680 -30.051497 +v -14.998680 0.469680 -30.051497 +v -20.579592 0.469680 -31.291611 +v -20.579592 0.469680 -31.291611 +v -20.579592 0.469680 -31.291611 +v -14.998678 -0.030320 -30.051498 +v -17.749275 0.469680 -30.856630 +v -17.749275 0.469680 -30.856630 +v -17.749275 0.469680 -30.856630 +v -17.749275 0.469680 -30.856630 +v -15.871716 0.469680 -30.597641 +v -15.871716 0.469680 -30.597641 +v -15.871716 0.469680 -30.597641 +v -15.871716 0.469680 -30.597641 +v -15.871716 0.469680 -30.597641 +v -15.871716 0.469680 -30.597641 +v -15.469992 0.469680 -30.362387 +v -15.469992 0.469680 -30.362387 +v -15.469992 0.469680 -30.362387 +v -15.469992 0.469680 -30.362387 +v -19.604710 0.469680 -31.298996 +v -19.604710 0.469680 -31.298996 +v -18.670109 0.469680 -31.078623 +v -18.670109 0.469680 -31.078623 +v -18.670109 0.469680 -31.078623 +v -18.670109 0.469680 -31.078623 +v -14.998680 -0.046158 -30.051497 +v -15.871716 -0.046158 -30.597641 +v -15.469992 -0.046158 -30.362387 +v -15.469992 -0.046158 -30.362387 +v -13.327617 -0.045187 -32.689980 +v -13.945692 -0.045187 -33.064194 +v -13.945692 -0.045187 -33.064194 +v -14.208815 -0.045187 -33.235573 +v -14.208815 0.299680 -33.235573 +v -14.208815 0.299680 -33.235573 +v -15.871716 0.299680 -30.597641 +v -15.871716 0.299680 -30.597641 +v -14.208813 0.299680 -33.235584 +v -15.871715 0.299680 -30.597652 +v -15.575650 0.469680 -30.411007 +v -13.912748 0.469680 -33.048939 +v -15.575650 0.299680 -30.411007 +v -15.575650 0.299680 -30.411007 +v -15.575650 0.299680 -30.411007 +v -15.575650 0.299680 -30.411007 +v -13.912748 0.299680 -33.048939 +v -13.912748 0.299680 -33.048939 +v -13.912748 0.299680 -33.048939 +v -13.912748 0.299680 -33.048939 +v -14.208815 0.283118 -33.235573 +v -15.871716 0.283118 -30.597641 +v -15.575650 0.129680 -30.411007 +v -15.575650 0.129680 -30.411007 +v -13.912748 0.129680 -33.048939 +v -13.912748 0.129680 -33.048939 +v -15.279600 0.299680 -30.224382 +v -13.616698 0.299680 -32.862312 +v -15.279600 0.129680 -30.224382 +v -15.279600 0.129680 -30.224382 +v -15.279600 0.129680 -30.224382 +v -13.616698 0.129680 -32.862312 +v -13.616698 0.129680 -32.862312 +v -13.616698 0.129680 -32.862312 +v -15.575650 0.114832 -30.411007 +v -13.912748 0.114832 -33.048939 +v -15.279600 -0.053496 -30.224382 +v -13.616698 -0.053496 -32.862312 +v -13.762813 0.048618 -36.426079 +v -13.762813 0.048618 -36.426079 +v -13.762813 0.048618 -36.426079 +v -11.754629 0.048618 -34.417896 +v -11.754629 0.048618 -34.417896 +v -11.754629 0.048618 -34.417896 +v -13.762813 0.048618 -36.426079 +v -13.762813 0.048618 -36.426079 +v -11.754629 0.048618 -34.417896 +v -11.754629 0.048618 -34.417896 +v -14.901385 0.048618 -35.469444 +v -12.893202 0.048618 -33.461262 +v -13.114883 0.048618 -37.081051 +v -13.114883 0.048618 -37.081051 +v -11.106700 0.048618 -35.072868 +v -11.106700 0.048618 -35.072868 +v -12.161484 0.048618 -36.930523 +v -11.369914 0.048618 -36.138950 +vn 5.7287 -0.0000 -4.1046 +vn 6.3799 -0.0000 -3.8551 +vn 6.6575 -0.0000 -3.5835 +vn 6.7885 -0.0000 -3.2644 +vn 6.7801 -0.0000 -2.7893 +vn 6.3269 -0.0000 -1.7959 +vn 3.1696 -0.0000 1.0838 +vn -3.5089 -0.0000 4.0045 +vn -6.7885 -0.0000 3.2644 +vn -5.7287 -0.0000 4.1046 +vn -6.7801 -0.0000 2.7893 +vn -6.3269 -0.0000 1.7959 +vn -6.3269 -0.0000 1.7958 +vn -3.1696 -0.0000 -1.0838 +vn 3.5089 -0.0000 -4.0045 +vn -0.0000 0.2500 -0.0000 +vn -0.0001 0.2500 -0.0000 +vn -4.6670 0.0046 4.1589 +vn -4.6668 0.0046 4.1589 +vn 6.7930 -0.0000 -3.2402 +vn 6.4183 -0.0000 -1.9383 +vn 3.9979 -0.0000 0.4975 +vn -5.3890 0.0078 4.1502 +vn -5.3891 0.0078 4.1502 +vn -5.3889 0.0078 4.1502 +vn 5.9675 -0.0000 -4.0447 +vn -5.3554 -0.0000 0.6563 +vn -5.3553 -0.0000 0.6562 +vn -6.6575 -0.0000 3.5835 +vn -5.8146 0.0035 4.0855 +vn -5.8147 0.0035 4.0855 +vn 6.3905 -0.0000 -3.8479 +vn -5.3828 0.0074 4.1510 +vn -5.3829 0.0074 4.1510 +vn -5.3827 0.0074 4.1510 +vn -0.9199 -0.0000 -2.3943 +vn -0.9202 -0.0000 -2.3942 +vn 6.5475 -0.0000 -2.1650 +vn 5.4405 -0.0000 -4.1475 +vn 4.6135 -0.0000 0.0112 +vn -6.7781 -0.0000 3.3106 +vn -6.7230 -0.0000 3.4668 +vn 6.7775 -0.0000 -2.7762 +vn 6.8072 -0.0000 -3.0117 +vn 6.6924 -0.0000 -2.4862 +vn -6.4865 -0.0000 2.0533 +vn -5.3526 0.0075 4.1535 +vn -5.3525 0.0075 4.1535 +vn -5.3527 0.0075 4.1535 +vn -5.3459 0.0079 4.1538 +vn -5.3460 0.0079 4.1538 +vn 3.9925 -0.0000 0.5016 +vn 2.9587 -0.0000 1.2228 +vn 4.2257 -0.0000 -4.1200 +vn 5.3825 -0.0000 -4.1531 +vn -1.3004 0.2453 0.6529 +vn -1.3008 0.2453 0.6535 +vn -1.3005 0.2453 0.6531 +vn 0.3956 0.2492 -0.0309 +vn 0.3954 0.2492 -0.0309 +vn 0.0090 0.2500 0.0005 +vn 0.0091 0.2500 0.0005 +vn 0.0092 0.2500 0.0005 +vn 0.0093 0.2500 0.0005 +vn -0.2788 0.2498 0.1275 +vn -0.2787 0.2498 0.1275 +vn -0.2789 0.2498 0.1276 +vn -0.9528 0.2473 0.5523 +vn -0.9529 0.2473 0.5524 +vn 0.2686 0.2458 0.3812 +vn 0.2685 0.2458 0.3812 +vn 0.2684 0.2458 0.3813 +vn 0.2684 0.2459 0.3812 +vn 3.6201 0.2086 -1.2155 +vn 3.6200 0.2086 -1.2155 +vn 3.6201 0.2086 -1.2156 +vn 4.9180 0.1714 -1.9541 +vn 4.9181 0.1714 -1.9542 +vn 5.7850 0.1276 -2.9711 +vn 5.7851 0.1276 -2.9712 +vn 5.0105 0.1463 -3.2156 +vn 5.0106 0.1463 -3.2156 +vn 3.4326 0.1988 -2.4974 +vn 3.4327 0.1988 -2.4975 +vn 3.4328 0.1988 -2.4975 +vn 1.4199 0.2323 -1.5033 +vn 1.4197 0.2323 -1.5032 +vn 1.4198 0.2323 -1.5033 +vn -0.9112 0.2459 0.0641 +vn -0.9113 0.2459 0.0641 +vn -0.0417 0.2500 0.0143 +vn -0.0419 0.2500 0.0145 +vn -0.7981 0.2482 0.3080 +vn -0.7980 0.2482 0.3079 +vn -6.3799 -0.0000 3.8551 +vn -6.7181 -0.0000 3.4772 +vn -6.7219 -0.0000 3.4692 +vn 2.2654 -0.0000 1.6544 +vn 2.2655 -0.0000 1.6543 +vn 6.8077 -0.0000 -3.0290 +vn -5.0995 -0.0000 4.1682 +vn 5.1205 -0.0000 -4.1677 +vn 6.3739 -0.0000 -3.8591 +vn 6.3164 -0.0000 -3.8948 +vn -6.3680 -0.0000 3.8630 +vn -6.3328 -0.0000 3.8851 +vn -6.3524 -0.0000 3.8730 +vn -0.0002 -0.2500 0.0001 +vn -0.0001 -0.2500 -0.0000 +vn -0.0001 -0.2500 0.0001 +vn -0.0000 -0.2500 -0.0000 +vn 6.3524 -0.0000 -3.8730 +vn 6.3933 -0.0000 -1.8982 +vn 6.7920 -0.0000 -2.8562 +vn -6.5436 -0.0000 3.7218 +vt 0.880469 0.529167 +vt 0.829948 0.530093 +vt 0.897135 0.530093 +vt 0.886719 0.527315 +vt 0.892969 0.530093 +vt 0.892969 0.530093 +vt 0.891927 0.524537 +vt 0.888802 0.530093 +vt 0.888802 0.530093 +vt 0.895052 0.518981 +vt 0.884635 0.530093 +vt 0.884635 0.530093 +vt 0.896615 0.512500 +vt 0.880469 0.530093 +vt 0.880469 0.530093 +vt 0.895052 0.506944 +vt 0.876302 0.530093 +vt 0.876302 0.530093 +vt 0.829948 0.495833 +vt 0.891927 0.501389 +vt 0.872135 0.530093 +vt 0.872135 0.530093 +vt 0.886719 0.497685 +vt 0.886719 0.497685 +vt 0.867969 0.530093 +vt 0.863802 0.530093 +vt 0.880469 0.496759 +vt 0.880469 0.496759 +vt 0.859115 0.530093 +vt 0.859115 0.530093 +vt 0.874219 0.497685 +vt 0.854948 0.530093 +vt 0.854948 0.530093 +vt 0.869010 0.501389 +vt 0.850781 0.530093 +vt 0.850781 0.530093 +vt 0.865365 0.506944 +vt 0.846615 0.530093 +vt 0.846615 0.530093 +vt 0.864323 0.512500 +vt 0.842448 0.530093 +vt 0.842448 0.530093 +vt 0.865365 0.518981 +vt 0.829948 0.495833 +vt 0.838281 0.530093 +vt 0.838281 0.530093 +vt 0.869010 0.524537 +vt 0.834115 0.530093 +vt 0.874219 0.527315 +vt 0.834115 0.530093 +vt 0.854948 0.495833 +vt 0.854948 0.563426 +vt 0.854948 0.563426 +vt 0.872135 0.495833 +vt 0.888802 0.546759 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.872135 0.563426 +vt 0.872135 0.563426 +vt 0.854948 0.512500 +vt 0.854948 0.512500 +vt 0.854948 0.512500 +vt 0.872135 0.512500 +vt 0.872135 0.512500 +vt 0.872135 0.512500 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.888802 0.530093 +vt 0.854948 0.546759 +vt 0.854948 0.546759 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.872135 0.546759 +vt 0.872135 0.546759 +vt 0.854948 0.530093 +vt 0.854948 0.530093 +vt 0.872135 0.530093 +vt 0.872135 0.530093 +vt 0.872135 0.530093 +vt 0.872135 0.530093 +vt 0.854948 0.515278 +vt 0.854948 0.515278 +vt 0.886198 0.546759 +vt 0.886198 0.546759 +vt 0.886198 0.546759 +vt 0.872135 0.560648 +vt 0.872135 0.515278 +vt 0.886198 0.530093 +vt 0.872135 0.515278 +vt 0.872135 0.515278 +vt 0.854948 0.560648 +vt 0.854948 0.504167 +vt 0.854948 0.504167 +vt 0.872135 0.504167 +vt 0.872135 0.504167 +vt 0.888802 0.538426 +vt 0.888802 0.538426 +vt 0.854948 0.538426 +vt 0.854948 0.538426 +vt 0.872135 0.538426 +vt 0.872135 0.538426 +vt 0.872135 0.538426 +vt 0.872135 0.538426 +vt 0.886198 0.538426 +vt 0.886198 0.538426 +vt 0.886198 0.538426 +vt 0.886198 0.538426 +vt 0.872135 0.526389 +vt 0.872135 0.526389 +vt 0.872135 0.526389 +vt 0.872135 0.526389 +vt 0.854948 0.549537 +vt 0.854948 0.549537 +vt 0.854948 0.526389 +vt 0.854948 0.526389 +vt 0.872135 0.549537 +vt 0.872135 0.549537 +vt 0.872135 0.549537 +vt 0.872135 0.549537 +vt 0.872135 0.498611 +vt 0.872135 0.498611 +vt 0.888802 0.543981 +vt 0.829948 0.495833 +vt 0.888802 0.543981 +vt 0.854948 0.563426 +vt 0.854948 0.495833 +vt 0.854948 0.495833 +vt 0.872135 0.563426 +vt 0.872135 0.495833 +vt 0.829948 0.495833 +vt 0.888802 0.546759 +vt 0.872135 0.495833 +vt 0.854948 0.512500 +vt 0.854948 0.512500 +vt 0.854948 0.512500 +vt 0.829948 0.495833 +vt 0.888802 0.530093 +vt 0.872135 0.512500 +vt 0.872135 0.512500 +vt 0.872135 0.512500 +vt 0.854948 0.546759 +vt 0.854948 0.546759 +vt 0.872135 0.546759 +vt 0.872135 0.546759 +vt 0.872135 0.546759 +vt 0.854948 0.530093 +vt 0.854948 0.530093 +vt 0.872135 0.530093 +vt 0.872135 0.530093 +vt 0.872135 0.530093 +vt 0.854948 0.515278 +vt 0.854948 0.515278 +vt 0.872135 0.560648 +vt 0.872135 0.560648 +vt 0.886198 0.546759 +vt 0.886198 0.546759 +vt 0.886198 0.530093 +vt 0.886198 0.530093 +vt 0.872135 0.515278 +vt 0.872135 0.515278 +vt 0.854948 0.560648 +vt 0.854948 0.560648 +vt 0.892969 0.555093 +vt 0.892969 0.555093 +vt 0.892969 0.555093 +vt 0.892969 0.555093 +vt 0.897135 0.555093 +vt 0.897135 0.555093 +vt 0.829948 0.555093 +vt 0.897135 0.555093 +vt 0.846615 0.556019 +vt 0.846615 0.556019 +vt 0.846615 0.556019 +vt 0.846615 0.556019 +vt 0.854948 0.556019 +vt 0.854948 0.556019 +vt 0.854948 0.556019 +vt 0.829948 0.495833 +vt 0.886198 0.543981 +vt 0.886198 0.543981 +vt 0.886198 0.543981 +vt 0.886198 0.543981 +vt 0.886198 0.541204 +vt 0.886198 0.541204 +vt 0.886198 0.541204 +vt 0.886198 0.541204 +vt 0.886198 0.541204 +vt 0.829948 0.495833 +vt 0.872135 0.555093 +vt 0.872135 0.555093 +vt 0.872135 0.555093 +vt 0.872135 0.555093 +vt 0.859115 0.556019 +vt 0.859115 0.556019 +vt 0.859115 0.556019 +vt 0.859115 0.556019 +vt 0.850781 0.556019 +vt 0.850781 0.556019 +vt 0.850781 0.556019 +vt 0.850781 0.556019 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.867969 0.555093 +vt 0.880469 0.555093 +vt 0.880469 0.555093 +vt 0.880469 0.555093 +vt 0.880469 0.555093 +vt 0.880469 0.555093 +vt 0.854948 0.498611 +vt 0.854948 0.498611 +vt 0.838281 0.555093 +vt 0.838281 0.555093 +vt 0.838281 0.555093 +vt 0.838281 0.555093 +vt 0.876302 0.555093 +vt 0.876302 0.555093 +vt 0.876302 0.555093 +vt 0.876302 0.555093 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.884635 0.555093 +vt 0.884635 0.555093 +vt 0.829948 0.495833 +vt 0.888802 0.555093 +vt 0.888802 0.555093 +vt 0.888802 0.555093 +vt 0.834115 0.555093 +vt 0.834115 0.555093 +vt 0.834115 0.555093 +vt 0.834115 0.555093 +vt 0.842448 0.556019 +vt 0.842448 0.556019 +vt 0.829948 0.495833 +vt 0.842448 0.556019 +vt 0.854948 0.501389 +vt 0.854948 0.501389 +vt 0.863802 0.555093 +vt 0.863802 0.555093 +vt 0.863802 0.555093 +vt 0.863802 0.555093 +vt 0.872135 0.501389 +vt 0.872135 0.501389 +vt 0.888802 0.541204 +vt 0.888802 0.541204 +vt 0.872135 0.506944 +vt 0.872135 0.506944 +vt 0.888802 0.535648 +vt 0.888802 0.535648 +vt 0.872135 0.509722 +vt 0.872135 0.509722 +vt 0.888802 0.532870 +vt 0.829948 0.495833 +vt 0.888802 0.532870 +vt 0.854948 0.509722 +vt 0.854948 0.509722 +vt 0.854948 0.506944 +vt 0.854948 0.506944 +vt 0.886198 0.532870 +vt 0.886198 0.535648 +vt 0.886198 0.535648 +vt 0.886198 0.535648 +vt 0.886198 0.535648 +vt 0.872135 0.553241 +vt 0.872135 0.553241 +vt 0.872135 0.553241 +vt 0.872135 0.553241 +vt 0.872135 0.556944 +vt 0.872135 0.556944 +vt 0.872135 0.556944 +vt 0.872135 0.556944 +vt 0.854948 0.556944 +vt 0.854948 0.556944 +vt 0.854948 0.553241 +vt 0.854948 0.553241 +vt 0.854948 0.522685 +vt 0.854948 0.522685 +vt 0.854948 0.518981 +vt 0.854948 0.518981 +vt 0.872135 0.518981 +vt 0.872135 0.518981 +vt 0.872135 0.518981 +vt 0.872135 0.518981 +vt 0.872135 0.522685 +vt 0.872135 0.522685 +vt 0.872135 0.522685 +vt 0.872135 0.522685 +vt 0.872135 0.527315 +vt 0.872135 0.527315 +vt 0.872135 0.527315 +vt 0.872135 0.527315 +vt 0.872135 0.528241 +vt 0.872135 0.528241 +vt 0.872135 0.528241 +vt 0.872135 0.528241 +vt 0.854948 0.528241 +vt 0.854948 0.528241 +vt 0.854948 0.527315 +vt 0.854948 0.527315 +vt 0.854948 0.548611 +vt 0.854948 0.548611 +vt 0.872135 0.548611 +vt 0.872135 0.548611 +vt 0.872135 0.548611 +vt 0.872135 0.548611 +vt 0.872135 0.558796 +vt 0.872135 0.558796 +vt 0.884635 0.546759 +vt 0.884635 0.546759 +vt 0.854948 0.517130 +vt 0.854948 0.558796 +vt 0.854948 0.558796 +vt 0.884635 0.530093 +vt 0.884635 0.530093 +vt 0.872135 0.517130 +vt 0.872135 0.548611 +vt 0.872135 0.548611 +vt 0.874219 0.546759 +vt 0.874219 0.546759 +vt 0.854948 0.527315 +vt 0.874219 0.530093 +vt 0.874219 0.530093 +vt 0.872135 0.527315 +vt 0.854948 0.548611 +vt 0.854948 0.548611 +vt 0.854948 0.535648 +vt 0.854948 0.535648 +vt 0.872135 0.535648 +vt 0.872135 0.535648 +vt 0.872135 0.535648 +vt 0.872135 0.535648 +vt 0.886198 0.535648 +vt 0.886198 0.535648 +vt 0.886198 0.535648 +vt 0.884635 0.535648 +vt 0.884635 0.535648 +vt 0.884635 0.535648 +vt 0.884635 0.535648 +vt 0.884635 0.535648 +vt 0.874219 0.535648 +vt 0.874219 0.535648 +vt 0.874219 0.535648 +vt 0.874219 0.535648 +vt 0.874219 0.535648 +vt 0.884635 0.535648 +vt 0.884635 0.535648 +vt 0.874219 0.535648 +vt 0.874219 0.535648 +vt 0.884635 0.530093 +vt 0.884635 0.535648 +vt 0.874219 0.530093 +vt 0.874219 0.535648 +vt 0.884635 0.535648 +vt 0.884635 0.535648 +vt 0.874219 0.535648 +vt 0.874219 0.535648 +vt 0.884635 0.535648 +vt 0.884635 0.535648 +vt 0.874219 0.535648 +vt 0.874219 0.535648 +vt 0.884635 0.535648 +vt 0.884635 0.535648 +vt 0.874219 0.535648 +vt 0.874219 0.535648 +vt 0.884635 0.535648 +vt 0.874219 0.535648 +vt 0.854948 0.513426 +vt 0.854948 0.513426 +vt 0.888281 0.546759 +vt 0.872135 0.562500 +vt 0.888281 0.546759 +vt 0.872135 0.513426 +vt 0.872135 0.513426 +vt 0.888281 0.530093 +vt 0.854948 0.562500 +vt 0.888281 0.538426 +vt 0.888281 0.538426 +vt 0.888281 0.538426 +vt 0.888281 0.538426 +vt 0.829948 0.495833 +vt 0.888281 0.541204 +vt 0.888281 0.541204 +vt 0.888281 0.541204 +vt 0.888281 0.541204 +vt 0.888281 0.541204 +vt 0.888281 0.543981 +vt 0.888281 0.543981 +vt 0.888281 0.543981 +vt 0.888281 0.543981 +vt 0.888281 0.532870 +vt 0.888281 0.532870 +vt 0.888281 0.535648 +vt 0.888281 0.535648 +vt 0.888281 0.535648 +vt 0.888281 0.535648 +vt 0.888281 0.546759 +vt 0.888281 0.541204 +vt 0.888281 0.543981 +vt 0.888281 0.543981 +vt 0.886198 0.546759 +vt 0.886198 0.543981 +vt 0.886198 0.543981 +vt 0.886198 0.541204 +vt 0.886198 0.541204 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.888281 0.541204 +vt 0.886198 0.541204 +vt 0.888281 0.541204 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.888281 0.541204 +vt 0.888281 0.541204 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.886198 0.541204 +vt 0.886198 0.541204 +vt 0.829948 0.495833 +vt 0.886198 0.541204 +vt 0.888281 0.541204 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.888281 0.541204 +vt 0.886198 0.541204 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +vt 0.829948 0.495833 +s 0 +usemtl Generic_walls +f 19380/35927/13715 19382/35929/13715 19542/36089/13715 +f 19380/35927/13715 19542/36089/13715 19547/36094/13715 +f 19383/35930/13716 19385/35932/13716 19603/36150/13716 +f 19383/35930/13716 19603/36150/13716 19543/36090/13716 +f 19386/35933/13717 19389/35936/13717 19600/36147/13717 +f 19386/35933/13717 19600/36147/13717 19604/36151/13717 +f 19388/35935/13718 19392/35939/13718 19586/36133/13718 +f 19388/35935/13718 19586/36133/13718 19599/36146/13718 +f 19391/35938/13719 19395/35942/13719 19596/36143/13719 +f 19391/35938/13719 19596/36143/13719 19585/36132/13719 +f 19394/35941/13720 19399/35946/13720 19569/36116/13720 +f 19394/35941/13720 19569/36116/13720 19595/36142/13720 +f 19398/35945/13721 19402/35949/13721 19581/36128/13721 +f 19398/35945/13721 19581/36128/13721 19568/36115/13721 +f 19578/36125/13722 19400/35947/13722 19404/35951/13722 +f 19578/36125/13722 19404/35951/13722 19616/36163/13722 +f 19415/35962/13723 19548/36095/13723 19575/36122/13723 +f 19415/35962/13723 19575/36122/13723 19413/35960/13723 +f 19407/35954/13724 19571/36118/13724 19615/36162/13724 +f 19407/35954/13724 19615/36162/13724 19403/35950/13724 +f 19418/35965/13725 19609/36156/13725 19549/36096/13725 +f 19418/35965/13725 19549/36096/13725 19416/35963/13725 +f 19419/35966/13726 19422/35969/13726 19589/36136/13726 +f 19419/35966/13727 19589/36136/13727 19610/36157/13727 +f 19423/35970/13728 19425/35972/13728 19605/36152/13728 +f 19423/35970/13728 19605/36152/13728 19590/36137/13728 +f 19427/35974/13729 19379/35926/13729 19546/36093/13729 +f 19427/35974/13729 19546/36093/13729 19608/36155/13729 +f 19381/35928/13730 19378/35925/13730 19426/35973/13730 +f 19426/35973/13730 19424/35971/13730 19420/35967/13730 +f 19420/35967/13731 19417/35964/13731 19414/35961/13731 +f 19414/35961/13730 19411/35958/13730 19408/35955/13730 +f 19408/35955/13730 19405/35952/13730 19401/35948/13730 +f 19401/35948/13730 19397/35944/13730 19393/35940/13730 +f 19393/35940/13730 19390/35937/13730 19387/35934/13730 +f 19387/35934/13730 19384/35931/13730 19381/35928/13730 +f 19381/35928/13730 19426/35973/13730 19420/35967/13730 +f 19420/35967/13730 19414/35961/13730 19408/35955/13730 +f 19408/35955/13730 19401/35948/13730 19393/35940/13730 +f 19393/35940/13730 19387/35934/13730 19381/35928/13730 +f 19381/35928/13730 19420/35967/13730 19408/35955/13730 +f 19408/35955/13730 19393/35940/13730 19381/35928/13730 +s 1 +f 19633/36180/13732 19628/36175/13732 19441/35988/13733 +f 19633/36180/13732 19441/35988/13733 19438/35985/13733 +s 0 +f 19476/36023/13734 19480/36027/13734 19451/35998/13734 +f 19476/36023/13734 19451/35998/13734 19447/35994/13734 +f 19752/36299/13735 19747/36294/13735 19435/35982/13735 +f 19752/36299/13735 19435/35982/13735 19429/35976/13735 +f 19648/36195/13736 19463/36010/13736 19468/36015/13736 +f 19648/36195/13736 19468/36015/13736 19650/36197/13736 +f 19763/36310/13730 19499/36046/13730 19432/35979/13730 +f 19763/36310/13730 19432/35979/13730 19746/36293/13730 +s 1 +f 19588/36135/13737 19498/36045/13738 19619/36166/13737 +f 19588/36135/13737 19619/36166/13737 19613/36160/13739 +s 0 +f 19674/36221/13740 19672/36219/13740 19456/36003/13740 +f 19674/36221/13740 19456/36003/13740 19452/35999/13740 +f 19744/36291/13741 19749/36296/13741 19464/36011/13741 +f 19744/36291/13742 19464/36011/13742 19458/36005/13742 +f 19574/36121/13743 19552/36099/13743 19409/35956/13743 +s 1 +f 19574/36121/13743 19409/35956/13743 19412/35959/13743 +f 19428/35975/13744 19431/35978/13744 19497/36044/13745 +f 19428/35975/13744 19497/36044/13745 19587/36134/13744 +s 0 +f 19769/36316/13730 19625/36172/13730 19473/36020/13730 +f 19769/36316/13730 19473/36020/13730 19753/36300/13730 +f 19453/36000/13746 19457/36004/13746 19479/36026/13746 +f 19453/36000/13746 19479/36026/13746 19475/36022/13746 +s 1 +f 19614/36161/13747 19620/36167/13748 19471/36018/13747 +f 19614/36161/13747 19471/36018/13747 19469/36016/13749 +s 0 +f 19653/36200/13750 19663/36210/13750 19487/36034/13750 +s 1 +f 19653/36200/13751 19487/36034/13751 19491/36038/13751 +f 19681/36228/13752 19496/36043/13752 19490/36037/13752 +f 19681/36228/13752 19490/36037/13752 19677/36224/13752 +s 0 +f 19504/36051/13753 19509/36056/13753 19515/36062/13753 +f 19504/36051/13753 19515/36062/13753 19510/36057/13753 +f 19704/36251/13754 19708/36255/13754 19522/36069/13754 +f 19704/36251/13754 19522/36069/13754 19519/36066/13754 +f 19539/36086/13755 19531/36078/13755 19505/36052/13755 +f 19539/36086/13755 19505/36052/13755 19502/36049/13755 +f 19718/36265/13730 19715/36262/13730 19686/36233/13730 +f 19718/36265/13730 19686/36233/13730 19695/36242/13730 +f 19711/36258/13730 19535/36082/13730 19514/36061/13730 +f 19514/36061/13730 19508/36055/13730 19533/36080/13730 +f 19514/36061/13730 19533/36080/13730 19711/36258/13730 +s 1 +f 19684/36231/13756 19530/36077/13756 19538/36085/13756 +s 0 +f 19684/36231/13756 19538/36085/13756 19689/36236/13756 +f 19512/36059/13757 19517/36064/13757 19536/36083/13757 +f 19512/36059/13757 19536/36083/13757 19528/36075/13757 +f 19697/36244/13758 19700/36247/13758 19527/36074/13758 +f 19697/36244/13758 19527/36074/13758 19524/36071/13758 +f 19436/35983/13759 19516/36063/13759 19511/36058/13759 +s 1 +f 19436/35983/13759 19511/36058/13759 19430/35977/13759 +f 19440/35987/13760 19437/35984/13760 19503/36050/13760 +f 19440/35987/13760 19503/36050/13760 19506/36053/13760 +s 0 +f 19443/35990/13730 19507/36054/13730 19513/36060/13730 +f 19443/35990/13730 19513/36060/13730 19433/35980/13730 +f 19755/36302/13730 19474/36021/13730 19622/36169/13730 +f 19755/36302/13730 19622/36169/13730 19760/36307/13730 +f 19759/36306/13730 19621/36168/13730 19501/36048/13730 +f 19759/36306/13730 19501/36048/13730 19764/36311/13730 +f 19751/36298/13730 19445/35992/13730 19631/36178/13730 +f 19751/36298/13730 19631/36178/13730 19768/36315/13730 +f 19767/36314/13730 19629/36176/13730 19626/36173/13730 +f 19767/36314/13730 19626/36173/13730 19770/36317/13730 +s 1 +f 19470/36017/13761 19472/36019/13762 19623/36170/13761 +f 19470/36017/13761 19623/36170/13761 19634/36181/13763 +f 19635/36182/13764 19624/36171/13765 19627/36174/13765 +f 19635/36182/13764 19627/36174/13765 19632/36179/13765 +s 0 +f 19494/36041/13766 19644/36191/13766 19652/36199/13766 +f 19494/36041/13766 19652/36199/13766 19489/36036/13766 +s 1 +f 19643/36190/13767 19647/36194/13767 19649/36196/13767 +f 19643/36190/13767 19649/36196/13767 19651/36198/13767 +s 0 +f 19459/36006/13750 19467/36014/13750 19660/36207/13750 +f 19459/36006/13751 19660/36207/13751 19656/36203/13751 +f 19655/36202/13750 19659/36206/13750 19664/36211/13750 +s 1 +f 19655/36202/13751 19664/36211/13751 19654/36201/13751 +s 0 +f 19492/36039/13768 19488/36035/13768 19667/36214/13768 +f 19492/36039/13768 19667/36214/13768 19675/36222/13768 +f 19676/36223/13769 19668/36215/13769 19671/36218/13769 +f 19676/36223/13769 19671/36218/13769 19673/36220/13769 +s 1 +f 19481/36028/13770 19561/36108/13771 19601/36148/13770 +f 19481/36028/13770 19601/36148/13770 19597/36144/13772 +f 19559/36106/13773 19541/36088/13773 19602/36149/13774 +f 19559/36106/13773 19602/36149/13774 19563/36110/13773 +f 19558/36105/13775 19462/36009/13776 19545/36092/13777 +f 19558/36105/13775 19545/36092/13777 19540/36087/13778 +f 19461/36008/13779 19646/36193/13780 19607/36154/13781 +f 19461/36008/13779 19607/36154/13781 19544/36091/13780 +f 19606/36153/13782 19645/36192/13782 19641/36188/13783 +f 19606/36153/13782 19641/36188/13783 19591/36138/13783 +f 19642/36189/13784 19493/36040/13785 19611/36158/13786 +f 19642/36189/13784 19611/36158/13786 19592/36139/13787 +f 19679/36226/13788 19550/36097/13789 19612/36159/13790 +f 19679/36226/13788 19612/36159/13790 19495/36042/13789 +f 19551/36098/13791 19680/36227/13792 19448/35995/13792 +f 19551/36098/13791 19448/35995/13792 19576/36123/13791 +f 19449/35996/13793 19478/36025/13794 19555/36102/13794 +f 19449/35996/13793 19555/36102/13794 19577/36124/13794 +f 19455/36002/13795 19573/36120/13796 19554/36101/13795 +f 19455/36002/13795 19554/36101/13795 19477/36024/13795 +f 19670/36217/13797 19618/36165/13798 19572/36119/13798 +f 19670/36217/13797 19572/36119/13798 19454/36001/13799 +f 19669/36216/13800 19666/36213/13801 19580/36127/13802 +f 19669/36216/13800 19580/36127/13802 19617/36164/13800 +f 19579/36126/13803 19665/36212/13804 19485/36032/13803 +f 19579/36126/13803 19485/36032/13803 19566/36113/13803 +f 19661/36208/13805 19593/36140/13806 19567/36114/13806 +f 19661/36208/13805 19567/36114/13806 19486/36033/13806 +s 0 +f 19594/36141/13730 19662/36209/13730 19658/36205/13730 +f 19594/36141/13730 19658/36205/13730 19584/36131/13730 +s 1 +f 19482/36029/13807 19598/36145/13808 19582/36129/13807 +f 19482/36029/13807 19582/36129/13807 19637/36184/13808 +s 0 +f 19657/36204/13730 19466/36013/13730 19640/36187/13730 +f 19657/36204/13730 19640/36187/13730 19583/36130/13730 +f 19410/35957/13809 19553/36100/13809 19570/36117/13809 +f 19410/35957/13809 19570/36117/13809 19406/35953/13809 +f 19520/36067/13810 19693/36240/13810 19701/36248/13810 +f 19520/36067/13810 19701/36248/13810 19518/36065/13810 +f 19694/36241/13811 19683/36230/13811 19688/36235/13811 +f 19694/36241/13811 19688/36235/13811 19702/36249/13811 +f 19529/36076/13758 19537/36084/13758 19692/36239/13758 +f 19529/36076/13758 19692/36239/13758 19687/36234/13758 +f 19713/36260/13730 19709/36256/13730 19532/36079/13730 +f 19713/36260/13730 19532/36079/13730 19685/36232/13730 +f 19706/36253/13730 19719/36266/13730 19696/36243/13730 +f 19706/36253/13730 19696/36243/13730 19521/36068/13730 +f 19525/36072/13730 19698/36245/13730 19717/36264/13730 +f 19525/36072/13730 19717/36264/13730 19705/36252/13730 +f 19691/36238/13730 19534/36081/13730 19710/36257/13730 +s 1 +f 19691/36238/13730 19710/36257/13730 19714/36261/13730 +s 0 +f 19523/36070/13812 19526/36073/13812 19707/36254/13812 +f 19523/36070/13813 19707/36254/13813 19703/36250/13813 +f 19716/36263/13814 19721/36268/13814 19725/36272/13814 +f 19716/36263/13814 19725/36272/13814 19723/36270/13814 +f 19690/36237/13815 19712/36259/13815 19727/36274/13815 +f 19690/36237/13815 19727/36274/13815 19726/36273/13815 +f 19720/36267/13816 19699/36246/13816 19728/36275/13816 +f 19720/36267/13816 19728/36275/13816 19729/36276/13816 +f 19722/36269/13730 19724/36271/13730 19732/36279/13730 +f 19722/36269/13730 19732/36279/13730 19730/36277/13730 +f 19731/36278/13814 19733/36280/13814 19737/36284/13814 +f 19731/36278/13814 19737/36284/13814 19735/36282/13814 +s 1 +f 19734/36281/13730 19736/36283/13730 19740/36287/13730 +s 0 +f 19734/36281/13730 19740/36287/13730 19738/36285/13730 +f 19739/36286/13814 19741/36288/13814 19743/36290/13814 +f 19739/36286/13814 19743/36290/13814 19742/36289/13814 +f 19500/36047/13730 19630/36177/13730 19444/35991/13730 +f 19500/36047/13730 19444/35991/13730 19434/35981/13730 +f 19636/36183/13730 19768/36315/13730 19771/36318/13730 +f 19636/36183/13730 19771/36318/13730 19638/36185/13730 +f 19465/36012/13730 19751/36298/13730 19768/36315/13730 +f 19465/36012/13730 19768/36315/13730 19636/36183/13730 +f 19483/36030/13730 19754/36301/13730 19758/36305/13730 +f 19483/36030/13730 19758/36305/13730 19562/36109/13730 +f 19639/36186/13730 19772/36319/13730 19756/36303/13730 +f 19639/36186/13730 19756/36303/13730 19484/36031/13730 +f 19439/35986/13741 19442/35989/13741 19750/36297/13741 +f 19439/35986/13742 19750/36297/13742 19745/36292/13742 +f 19766/36313/13817 19748/36295/13817 19773/36320/13817 +f 19766/36313/13817 19773/36320/13817 19776/36323/13817 +f 19762/36309/13818 19765/36312/13818 19775/36322/13818 +f 19762/36309/13818 19775/36322/13818 19774/36321/13818 +f 19556/36103/13819 19560/36107/13819 19780/36327/13819 +f 19556/36103/13819 19780/36327/13819 19778/36325/13819 +f 19460/36007/13820 19557/36104/13820 19779/36326/13820 +f 19460/36007/13820 19779/36326/13820 19777/36324/13820 +f 19757/36304/13821 19783/36330/13821 19789/36336/13821 +f 19757/36304/13821 19789/36336/13821 19787/36334/13821 +f 19781/36328/13822 19784/36331/13823 19786/36333/13824 +f 19781/36328/13825 19786/36333/13825 19785/36332/13825 +f 19800/36347/13826 19792/36339/13826 19803/36350/13826 +f 19800/36347/13826 19803/36350/13826 19807/36354/13826 +f 19784/36331/13730 19795/36342/13730 19781/36328/13730 +f 19784/36331/13730 19791/36338/13730 19795/36342/13730 +f 19564/36111/13827 19761/36308/13827 19798/36345/13827 +f 19564/36111/13827 19798/36345/13827 19797/36344/13827 +f 19782/36329/13826 19565/36112/13826 19788/36335/13826 +f 19782/36329/13826 19788/36335/13826 19796/36343/13826 +f 19810/36357/13827 19806/36353/13827 19813/36360/13827 +f 19810/36357/13827 19813/36360/13827 19814/36361/13827 +f 19790/36337/13827 19812/36359/13827 19794/36341/13827 +f 19790/36337/13827 19811/36358/13827 19812/36359/13827 +s 1 +f 19793/36340/13821 19801/36348/13821 19808/36355/13821 +f 19793/36340/13821 19808/36355/13821 19804/36351/13821 +s 0 +f 19802/36349/13730 19799/36346/13730 19805/36352/13730 +f 19802/36349/13730 19805/36352/13730 19809/36356/13730 +f 19450/35997/13828 19682/36229/13828 19678/36225/13828 +f 19450/35997/13828 19678/36225/13828 19446/35993/13828 +f 19396/35943/13829 19421/35968/13829 19818/36365/13829 +f 19396/35943/13829 19818/36365/13829 19815/36362/13829 +s 1 +f 19817/36364/13730 19820/36367/13730 19824/36371/13730 +f 19817/36364/13730 19824/36371/13730 19822/36369/13730 +s 0 +f 19821/36368/13730 19826/36373/13730 19823/36370/13730 +f 19821/36368/13730 19825/36372/13730 19826/36373/13730 +f 19819/36366/13730 19828/36375/13730 19816/36363/13730 +f 19819/36366/13730 19830/36377/13730 19828/36375/13730 +f 19829/36376/13730 19831/36378/13730 19827/36374/13730 +f 19829/36376/13730 19832/36379/13730 19831/36378/13730 +o Cube.003 +v 1.101124 -0.030320 -36.439911 +v 1.101124 -0.030320 -36.439911 +v 1.101124 -0.030320 -36.439911 +v 1.101124 -0.030320 -36.439911 +v 1.094106 -0.030320 -36.107475 +v 1.094106 -0.030320 -36.107475 +v 1.094106 -0.030320 -36.107475 +v 1.094106 -0.030320 -36.107475 +v 0.569982 -0.030320 -36.448563 +v 0.569982 -0.030320 -36.448563 +v 0.569982 -0.030320 -36.448563 +v 0.575108 -0.030320 -36.115467 +v 0.575108 -0.030320 -36.115467 +v 0.575108 -0.030320 -36.115467 +v 2.258133 -0.030320 -35.826313 +v 2.258133 -0.030320 -35.826313 +v 2.258133 -0.030320 -35.826313 +v 2.258133 -0.030320 -35.826313 +v 2.293251 -0.030320 -36.249542 +v 2.293251 -0.030320 -36.249542 +v 2.293251 -0.030320 -36.249542 +v 2.293251 -0.030320 -36.249542 +v 2.293251 -0.030320 -36.249542 +v 2.293251 0.689680 -36.249542 +v 2.293251 0.689680 -36.249542 +v 2.293251 0.689680 -36.249542 +v 2.293251 0.689680 -36.249542 +v 3.072551 -0.030320 -35.388271 +v 3.072551 -0.030320 -35.388271 +v 3.072551 -0.030320 -35.388271 +v 3.072551 -0.030320 -35.388271 +v 3.297036 -0.030320 -35.628475 +v 3.297036 -0.030320 -35.628475 +v 3.297036 -0.030320 -35.628475 +v 3.297036 -0.030320 -35.628475 +v 3.297035 0.719680 -35.628475 +v 3.297035 0.719680 -35.628475 +v 3.297035 0.719680 -35.628475 +v 3.297035 0.719680 -35.628475 +v 3.991535 -0.030320 -34.422962 +v 3.991535 -0.030320 -34.422962 +v 3.991535 -0.030320 -34.422962 +v 3.991535 -0.030320 -34.422962 +v 4.209831 -0.030320 -34.667900 +v 4.209831 -0.030320 -34.667900 +v 4.209831 -0.030320 -34.667900 +v 4.209831 -0.030320 -34.667900 +v 4.209831 0.719680 -34.667900 +v 4.209831 0.719680 -34.667900 +v 4.209831 0.719680 -34.667900 +v 4.209831 0.719680 -34.667900 +v 4.559877 -0.030320 -34.005966 +v 4.559877 -0.030320 -34.005966 +v 4.559877 -0.030320 -34.005966 +v 4.559877 -0.030320 -34.005966 +v 4.673441 -0.030320 -34.310356 +v 4.673441 -0.030320 -34.310356 +v 4.673441 -0.030320 -34.310356 +v 4.673441 -0.030320 -34.310356 +v 4.673441 0.719680 -34.310356 +v 4.673441 0.719680 -34.310356 +v 4.673441 0.719680 -34.310356 +v 4.673441 0.719680 -34.310356 +v 5.208609 -0.030320 -33.805611 +v 5.208609 -0.030320 -33.805611 +v 5.208609 -0.030320 -33.805611 +v 5.208609 -0.030320 -33.805611 +v 5.222896 -0.030320 -34.134647 +v 5.222896 -0.030320 -34.134647 +v 5.222896 -0.030320 -34.134647 +v 5.222896 -0.030320 -34.134647 +v 5.222896 0.719680 -34.134647 +v 5.222896 0.719680 -34.134647 +v 5.222896 0.719680 -34.134647 +v 5.222896 0.719680 -34.134647 +v 5.860374 -0.030320 -33.864300 +v 5.860374 -0.030320 -33.864300 +v 5.860374 -0.030320 -33.864300 +v 5.860374 -0.030320 -33.864300 +v 5.783776 -0.030320 -34.182201 +v 5.783776 -0.030320 -34.182201 +v 5.783776 -0.030320 -34.182201 +v 5.783776 -0.030320 -34.182201 +v 5.783776 0.719680 -34.182201 +v 5.783776 0.719680 -34.182201 +v 5.783776 0.719680 -34.182201 +v 5.783776 0.719680 -34.182201 +v 6.630247 -0.030320 -34.296227 +v 6.630247 -0.030320 -34.296227 +v 6.630247 -0.030320 -34.296227 +v 6.630247 -0.030320 -34.296227 +v 6.455572 -0.030320 -34.575367 +v 6.455572 -0.030320 -34.575367 +v 6.455572 -0.030320 -34.575367 +v 6.455572 -0.030320 -34.575367 +v 6.455572 0.719680 -34.575367 +v 6.455572 0.719680 -34.575367 +v 6.455572 0.719680 -34.575367 +v 6.455572 0.719680 -34.575367 +v 8.704240 -0.030320 -35.788101 +v 8.704240 -0.030320 -35.788101 +v 8.704240 -0.030320 -35.788101 +v 8.704240 -0.030320 -35.788101 +v 8.508410 -0.030320 -36.057846 +v 8.508410 -0.030320 -36.057846 +v 8.508410 -0.030320 -36.057846 +v 8.508410 -0.030320 -36.057846 +v 8.508410 0.719680 -36.057846 +v 8.508410 0.719680 -36.057846 +v 8.508410 0.719680 -36.057846 +v 8.508410 0.719680 -36.057846 +v 1.648588 -0.030320 -36.013439 +v 1.648588 -0.030320 -36.013439 +v 1.648588 -0.030320 -36.013439 +v 1.648588 -0.030320 -36.013439 +v 1.690492 -0.030320 -36.341393 +v 1.690492 -0.030320 -36.341393 +v 1.690492 -0.030320 -36.341393 +v 1.690492 -0.030320 -36.341393 +v 3.551229 -0.030320 -34.932228 +v 3.551229 -0.030320 -34.932228 +v 3.551229 -0.030320 -34.932228 +v 3.551229 -0.030320 -34.932228 +v 3.791731 0.719680 -35.163029 +v 3.791731 0.719680 -35.163029 +v 3.791731 0.719680 -35.163029 +v 3.791731 0.719680 -35.163029 +v 3.791731 -0.030320 -35.163029 +v 3.791731 -0.030320 -35.163029 +v 3.791731 -0.030320 -35.163029 +v 3.791731 -0.030320 -35.163029 +v 2.102402 -0.030320 -35.884850 +v 2.102402 -0.030320 -35.884850 +v 2.102402 -0.030320 -35.884850 +v 2.102402 -0.030320 -35.884850 +v 2.178790 -0.030320 -36.208374 +v 2.178790 -0.030320 -36.208374 +v 2.178790 -0.030320 -36.208374 +v 2.178790 -0.030320 -36.208374 +v 2.678171 0.719680 -36.089592 +v 2.678171 0.719680 -36.089592 +v 2.678171 0.719680 -36.089592 +v 2.678171 0.719680 -36.089592 +v 2.678171 0.719680 -36.089592 +v 2.678171 -0.030320 -36.089592 +v 2.678171 -0.030320 -36.089592 +v 2.678171 -0.030320 -36.089592 +v 2.678171 -0.030320 -36.089592 +v 2.678171 -0.030320 -36.089592 +v 2.575821 -0.030320 -35.671902 +v 2.575821 -0.030320 -35.671902 +v 2.575821 -0.030320 -35.671902 +v 2.575821 -0.030320 -35.671902 +v 1.969819 -0.030320 -36.903481 +v 1.969819 -0.030320 -36.903481 +v 1.969819 -0.030320 -36.903481 +v 1.969819 -0.030320 -36.903481 +v 1.969819 0.719680 -36.903481 +v 1.969819 0.719680 -36.903481 +v 1.969819 0.719680 -36.903481 +v 1.969819 0.719680 -36.903481 +v 2.245055 0.719680 -36.996418 +v 2.245055 0.719680 -36.996418 +v 2.245055 0.719680 -36.996418 +v 2.245055 0.719680 -36.996418 +v 2.245055 -0.030320 -36.996422 +v 2.245055 -0.030320 -36.996422 +v 2.245055 -0.030320 -36.996422 +v 2.245055 -0.030320 -36.996422 +v 1.435230 -0.030320 -37.934177 +v 1.435230 -0.030320 -37.934177 +v 1.435230 -0.030320 -37.934177 +v 1.435230 -0.030320 -37.934177 +v 1.435230 0.719680 -37.934177 +v 1.435230 0.719680 -37.934177 +v 1.435230 0.719680 -37.934177 +v 1.435230 0.719680 -37.934177 +v 1.710452 0.719680 -38.073544 +v 1.710452 0.719680 -38.073544 +v 1.710452 0.719680 -38.073544 +v 1.710452 0.719680 -38.073544 +v 1.710452 -0.030320 -38.073544 +v 1.710452 -0.030320 -38.073544 +v 1.710452 -0.030320 -38.073544 +v 1.710452 -0.030320 -38.073544 +v 0.682665 -0.030320 -39.505688 +v 0.682665 -0.030320 -39.505688 +v 0.682665 -0.030320 -39.505688 +v 0.682665 0.719680 -39.505688 +v 0.682665 0.719680 -39.505688 +v 0.682665 0.719680 -39.505688 +v 0.889081 0.719680 -39.610214 +v 0.889081 0.719680 -39.610214 +v 0.889081 0.719680 -39.610214 +v 0.889081 -0.030320 -39.610214 +v 0.889081 -0.030320 -39.610214 +v 0.889081 -0.030320 -39.610214 +v 16.153183 -0.030320 -39.087246 +v 16.153183 -0.030320 -39.087246 +v 16.153183 -0.030320 -39.087246 +v 16.124693 -0.030320 -39.335617 +v 16.124693 -0.030320 -39.335617 +v 16.124693 -0.030320 -39.335617 +v 16.124693 0.719680 -39.335617 +v 16.124693 0.719680 -39.335617 +v 16.124693 0.719680 -39.335617 +v 0.019837 -0.030320 -36.056606 +v 0.019837 -0.030320 -36.056606 +v 0.019837 -0.030320 -36.056606 +v 0.019837 -0.030320 -36.056606 +v -0.014661 -0.030320 -36.387199 +v -0.014661 -0.030320 -36.387199 +v -0.014661 -0.030320 -36.387199 +v -0.014661 -0.030320 -36.387199 +v -0.629338 -0.030320 -35.894508 +v -0.629338 -0.030320 -35.894508 +v -0.629338 -0.030320 -35.894508 +v -0.629338 -0.030320 -35.894508 +v -0.711090 -0.030320 -36.216461 +v -0.711090 -0.030320 -36.216461 +v -0.711090 -0.030320 -36.216461 +v -0.711090 -0.030320 -36.216461 +v -1.348418 -0.030320 -35.513184 +v -1.348418 -0.030320 -35.513184 +v -1.348418 -0.030320 -35.513184 +v -1.348418 -0.030320 -35.513184 +v -1.475978 -0.030320 -35.819374 +v -1.475978 -0.030320 -35.819374 +v -1.475978 -0.030320 -35.819374 +v -1.475978 -0.030320 -35.819374 +v -2.194187 -0.030320 -34.863831 +v -2.194187 -0.030320 -34.863831 +v -2.194187 -0.030320 -34.863831 +v -2.194187 -0.030320 -34.863831 +v -2.351027 -0.030320 -35.154076 +v -2.351027 -0.030320 -35.154076 +v -2.351027 -0.030320 -35.154076 +v -2.351027 -0.030320 -35.154076 +v -2.901061 -0.030320 -34.513309 +v -2.901061 -0.030320 -34.513309 +v -2.901061 -0.030320 -34.513309 +v -2.901061 -0.030320 -34.513309 +v -2.969275 -0.030320 -34.830360 +v -2.969275 -0.030320 -34.830360 +v -2.969275 -0.030320 -34.830360 +v -2.969275 -0.030320 -34.830360 +v -3.550619 -0.030320 -34.451321 +v -3.550619 -0.030320 -34.451321 +v -3.550619 -0.030320 -34.451321 +v -3.550619 -0.030320 -34.451321 +v -3.484242 -0.030320 -34.768829 +v -3.484242 -0.030320 -34.768829 +v -3.484242 -0.030320 -34.768829 +v -3.484242 -0.030320 -34.768829 +v -4.138845 -0.030320 -34.668190 +v -4.138845 -0.030320 -34.668190 +v -4.138845 -0.030320 -34.668190 +v -4.138845 -0.030320 -34.668190 +v -3.964144 -0.030320 -34.946133 +v -3.964144 -0.030320 -34.946133 +v -3.964144 -0.030320 -34.946133 +v -3.964144 -0.030320 -34.946133 +v -4.593854 -0.030320 -35.065544 +v -4.593854 -0.030320 -35.065544 +v -4.593854 -0.030320 -35.065544 +v -4.593854 -0.030320 -35.065544 +v -4.349028 -0.030320 -35.282017 +v -4.349028 -0.030320 -35.282017 +v -4.349028 -0.030320 -35.282017 +v -4.349028 -0.030320 -35.282017 +v -4.866961 -0.015155 -35.690651 +v -4.866961 -0.015155 -35.690651 +v -4.866961 -0.015155 -35.690651 +v -4.866961 -0.015155 -35.690651 +v -4.560689 -0.015155 -35.807011 +v -4.560689 -0.015155 -35.807011 +v -4.560689 -0.015155 -35.807011 +v -4.560689 -0.015155 -35.807011 +v -5.125505 0.045507 -37.246979 +v -5.125505 0.045507 -37.246979 +v -5.125505 0.045507 -37.246979 +v -5.125505 0.045507 -37.246979 +v -4.798179 0.045507 -37.306442 +v -4.798179 0.045507 -37.306442 +v -4.798179 0.045507 -37.306442 +v -4.798179 0.045507 -37.306442 +v -5.829012 0.060673 -42.132381 +v -5.829012 0.060673 -42.132381 +v -5.829012 0.060673 -42.132381 +v -5.581888 0.060673 -42.170193 +v -5.581888 0.060673 -42.170193 +v -5.581888 0.060673 -42.170193 +v -5.724681 0.060673 -41.175022 +v -5.724681 0.060673 -41.175022 +v -5.724681 0.060673 -41.175022 +v -5.724681 0.060673 -41.175022 +v -5.395182 0.060673 -41.225437 +v -5.395182 0.060673 -41.225437 +v -5.395182 0.060673 -41.225437 +v -5.395182 0.060673 -41.225437 +v 1.102878 0.053013 -36.523018 +v 1.102878 0.053013 -36.523018 +v 1.102878 0.053013 -36.523018 +v 1.102878 0.053013 -36.523018 +v 1.092352 0.053013 -36.024368 +v 1.092352 0.053013 -36.024368 +v 1.092352 0.053013 -36.024368 +v 1.092352 0.053013 -36.024368 +v 0.576389 0.053013 -36.032192 +v 0.576389 0.053013 -36.032192 +v 0.576389 0.053013 -36.032192 +v 0.576389 0.053013 -36.032192 +v 0.568700 0.053013 -36.531837 +v 0.568700 0.053013 -36.531837 +v 0.568700 0.053013 -36.531837 +v 0.568700 0.053013 -36.531837 +v 2.241524 0.087735 -36.349354 +v 2.241524 0.087735 -36.349354 +v 2.241524 0.087735 -36.349354 +v 2.241524 0.087735 -36.349354 +v 2.234622 0.087735 -35.747147 +v 2.234622 0.087735 -35.747147 +v 2.234622 0.087735 -35.747147 +v 2.234622 0.087735 -35.747147 +v 3.353157 0.094680 -35.688526 +v 3.353157 0.094680 -35.688526 +v 3.353157 0.094680 -35.688526 +v 3.353157 0.094680 -35.688526 +v 3.016430 0.094680 -35.328224 +v 3.016430 0.094680 -35.328224 +v 3.016430 0.094680 -35.328224 +v 3.016430 0.094680 -35.328224 +v 4.264405 0.094680 -34.729134 +v 4.264405 0.094680 -34.729134 +v 4.264405 0.094680 -34.729134 +v 4.264405 0.094680 -34.729134 +v 3.936961 0.094680 -34.361729 +v 3.936961 0.094680 -34.361729 +v 3.936961 0.094680 -34.361729 +v 3.936961 0.094680 -34.361729 +v 4.701832 0.094680 -34.386456 +v 4.701832 0.094680 -34.386456 +v 4.701832 0.094680 -34.386456 +v 4.701832 0.094680 -34.386456 +v 4.531487 0.094680 -33.929867 +v 4.531487 0.094680 -33.929867 +v 4.531487 0.094680 -33.929867 +v 4.531487 0.094680 -33.929867 +v 5.226468 0.094680 -34.216908 +v 5.226468 0.094680 -34.216908 +v 5.226468 0.094680 -34.216908 +v 5.226468 0.094680 -34.216908 +v 5.205037 0.094680 -33.723351 +v 5.205037 0.094680 -33.723351 +v 5.205037 0.094680 -33.723351 +v 5.205037 0.094680 -33.723351 +v 5.764626 0.094680 -34.261677 +v 5.764626 0.094680 -34.261677 +v 5.764626 0.094680 -34.261677 +v 5.764626 0.094680 -34.261677 +v 5.879524 0.094680 -33.784824 +v 5.879524 0.094680 -33.784824 +v 5.879524 0.094680 -33.784824 +v 5.879524 0.094680 -33.784824 +v 6.411903 0.094680 -34.645153 +v 6.411903 0.094680 -34.645153 +v 6.411903 0.094680 -34.645153 +v 6.411903 0.094680 -34.645153 +v 6.673915 0.094680 -34.226440 +v 6.673915 0.094680 -34.226440 +v 6.673915 0.094680 -34.226440 +v 6.673915 0.094680 -34.226440 +v 8.459454 0.094680 -36.125278 +v 8.459454 0.094680 -36.125278 +v 8.459454 0.094680 -36.125278 +v 8.459454 0.094680 -36.125278 +v 8.753197 0.094680 -35.720665 +v 8.753197 0.094680 -35.720665 +v 8.753197 0.094680 -35.720665 +v 8.753197 0.094680 -35.720665 +v 1.700969 0.053013 -36.423378 +v 1.700969 0.053013 -36.423378 +v 1.700969 0.053013 -36.423378 +v 1.700969 0.053013 -36.423378 +v 1.638112 0.053013 -35.931450 +v 1.638112 0.053013 -35.931450 +v 1.638112 0.053013 -35.931450 +v 1.638112 0.053013 -35.931450 +v 3.851857 0.094680 -35.220730 +v 3.851857 0.094680 -35.220730 +v 3.851857 0.094680 -35.220730 +v 3.851857 0.094680 -35.220730 +v 3.491103 0.094680 -34.874527 +v 3.491103 0.094680 -34.874527 +v 3.491103 0.094680 -34.874527 +v 3.491103 0.094680 -34.874527 +v 2.197886 0.059958 -36.289257 +v 2.197886 0.059958 -36.289257 +v 2.197886 0.059958 -36.289257 +v 2.197886 0.059958 -36.289257 +v 2.083306 0.059958 -35.803970 +v 2.083306 0.059958 -35.803970 +v 2.083306 0.059958 -35.803970 +v 2.083306 0.059958 -35.803970 +v 2.767271 0.094680 -36.153774 +v 2.767271 0.094680 -36.153774 +v 2.767271 0.094680 -36.153774 +v 2.767271 0.094680 -36.153774 +v 2.538226 0.094680 -35.600979 +v 2.538226 0.094680 -35.600979 +v 2.538226 0.094680 -35.600979 +v 2.538226 0.094680 -35.600979 +v 1.901010 0.094680 -36.880245 +v 1.901010 0.094680 -36.880245 +v 1.901010 0.094680 -36.880245 +v 1.901010 0.094680 -36.880245 +v 2.313865 0.094680 -37.019653 +v 2.313865 0.094680 -37.019653 +v 2.313865 0.094680 -37.019653 +v 2.313865 0.094680 -37.019653 +v 1.366424 0.094680 -37.899334 +v 1.366424 0.094680 -37.899334 +v 1.366424 0.094680 -37.899334 +v 1.366424 0.094680 -37.899334 +v 1.779257 0.094680 -38.108387 +v 1.779257 0.094680 -38.108387 +v 1.779257 0.094680 -38.108387 +v 1.779257 0.094680 -38.108387 +v 0.648262 0.094680 -39.488266 +v 0.648262 0.094680 -39.488266 +v 0.648262 0.094680 -39.488266 +v 0.648262 0.094680 -39.488266 +v 0.923484 0.094680 -39.627632 +v 0.923484 0.094680 -39.627632 +v 0.923484 0.094680 -39.627632 +v 0.923484 0.094680 -39.627632 +v 16.119942 0.094680 -39.377014 +v 16.119942 0.094680 -39.377014 +v 16.119942 0.094680 -39.377014 +v 16.119942 0.094680 -39.377014 +v 16.157930 0.094680 -39.045853 +v 16.157930 0.094680 -39.045853 +v 16.157930 0.094680 -39.045853 +v 16.157930 0.094680 -39.045853 +v 0.028462 0.053013 -35.973957 +v 0.028462 0.053013 -35.973957 +v 0.028462 0.053013 -35.973957 +v 0.028462 0.053013 -35.973957 +v -0.023285 0.053013 -36.469849 +v -0.023285 0.053013 -36.469849 +v -0.023285 0.053013 -36.469849 +v -0.023285 0.053013 -36.469849 +v -0.608900 0.053013 -35.814022 +v -0.608900 0.053013 -35.814022 +v -0.608900 0.053013 -35.814022 +v -0.608900 0.053013 -35.814022 +v -0.731528 0.053013 -36.296947 +v -0.731528 0.053013 -36.296947 +v -0.731528 0.053013 -36.296947 +v -0.731528 0.053013 -36.296947 +v -1.316528 0.053013 -35.436638 +v -1.316528 0.053013 -35.436638 +v -1.316528 0.053013 -35.436638 +v -1.316528 0.053013 -35.436638 +v -1.507868 0.053013 -35.895920 +v -1.507868 0.053013 -35.895920 +v -1.507868 0.053013 -35.895920 +v -1.507868 0.053013 -35.895920 +v -2.154977 0.053013 -34.791267 +v -2.154977 0.053013 -34.791267 +v -2.154977 0.053013 -34.791267 +v -2.154977 0.053013 -34.791267 +v -2.390236 0.053013 -35.226635 +v -2.390236 0.053013 -35.226635 +v -2.390236 0.053013 -35.226635 +v -2.390236 0.053013 -35.226635 +v -2.884007 0.053013 -34.434048 +v -2.884007 0.053013 -34.434048 +v -2.884007 0.053013 -34.434048 +v -2.884007 0.053013 -34.434048 +v -2.986329 0.053013 -34.909626 +v -2.986329 0.053013 -34.909626 +v -2.986329 0.053013 -34.909626 +v -2.986329 0.053013 -34.909626 +v -3.567213 0.053013 -34.371944 +v -3.567213 0.053013 -34.371944 +v -3.567213 0.053013 -34.371944 +v -3.567213 0.053013 -34.371944 +v -3.467648 0.053013 -34.848206 +v -3.467648 0.053013 -34.848206 +v -3.467648 0.053013 -34.848206 +v -3.467648 0.053013 -34.848206 +v -4.182520 0.053013 -34.598705 +v -4.182520 0.053013 -34.598705 +v -4.182520 0.053013 -34.598705 +v -4.182520 0.053013 -34.598705 +v -3.920469 0.053013 -35.015621 +v -3.920469 0.053013 -35.015621 +v -3.920469 0.053013 -35.015621 +v -3.920469 0.053013 -35.015621 +v -4.655061 0.053013 -35.011429 +v -4.655061 0.053013 -35.011429 +v -4.655061 0.053013 -35.011429 +v -4.655061 0.053013 -35.011429 +v -4.287821 0.053013 -35.336136 +v -4.287821 0.053013 -35.336136 +v -4.287821 0.053013 -35.336136 +v -4.287821 0.053013 -35.336136 +v -4.943528 0.068179 -35.661560 +v -4.943528 0.068179 -35.661560 +v -4.943528 0.068179 -35.661560 +v -4.943528 0.068179 -35.661560 +v -4.484122 0.068179 -35.836102 +v -4.484122 0.068179 -35.836102 +v -4.484122 0.068179 -35.836102 +v -4.484122 0.068179 -35.836102 +v -5.207336 0.128841 -37.232113 +v -5.207336 0.128841 -37.232113 +v -5.207336 0.128841 -37.232113 +v -5.207336 0.128841 -37.232113 +v -4.716347 0.128841 -37.321304 +v -4.716347 0.128841 -37.321304 +v -4.716347 0.128841 -37.321304 +v -4.716347 0.128841 -37.321304 +v -5.870199 0.144006 -42.126080 +v -5.870199 0.144006 -42.126080 +v -5.870199 0.144006 -42.126080 +v -5.870199 0.144006 -42.126080 +v -5.540700 0.144006 -42.176498 +v -5.540700 0.144006 -42.176498 +v -5.540700 0.144006 -42.176498 +v -5.540700 0.144006 -42.176498 +v -5.312808 0.144006 -41.238041 +v -5.312808 0.144006 -41.238041 +v -5.312808 0.144006 -41.238041 +v -5.312808 0.144006 -41.238041 +v -5.807056 0.144006 -41.162418 +v -5.807056 0.144006 -41.162418 +v -5.807056 0.144006 -41.162418 +v -5.807056 0.144006 -41.162418 +v 1.102878 0.386347 -36.523018 +v 1.102878 0.386347 -36.523018 +v 1.102878 0.386347 -36.523018 +v 1.102878 0.386347 -36.523018 +v 2.241524 0.559958 -36.349354 +v 2.241524 0.559958 -36.349354 +v 2.241524 0.559958 -36.349354 +v 2.241524 0.559958 -36.349354 +v 3.353157 0.594680 -35.688526 +v 3.353157 0.594680 -35.688526 +v 3.353157 0.594680 -35.688526 +v 3.353157 0.594680 -35.688526 +v 4.264404 0.594680 -34.729134 +v 4.264404 0.594680 -34.729134 +v 4.264404 0.594680 -34.729134 +v 4.264404 0.594680 -34.729134 +v 4.701832 0.594680 -34.386456 +v 4.701832 0.594680 -34.386456 +v 4.701832 0.594680 -34.386456 +v 4.701832 0.594680 -34.386456 +v 5.226468 0.594680 -34.216908 +v 5.226468 0.594680 -34.216908 +v 5.226468 0.594680 -34.216908 +v 5.226468 0.594680 -34.216908 +v 5.764626 0.594680 -34.261677 +v 5.764626 0.594680 -34.261677 +v 5.764626 0.594680 -34.261677 +v 5.764626 0.594680 -34.261677 +v 6.411903 0.594680 -34.645153 +v 6.411903 0.594680 -34.645153 +v 6.411903 0.594680 -34.645153 +v 6.411903 0.594680 -34.645153 +v 8.459454 0.594680 -36.125278 +v 8.459454 0.594680 -36.125278 +v 8.459454 0.594680 -36.125278 +v 8.459454 0.594680 -36.125278 +v 1.638112 0.386347 -35.931450 +v 1.638112 0.386347 -35.931450 +v 1.638112 0.386347 -35.931450 +v 1.638112 0.386347 -35.931450 +v 3.491103 0.594680 -34.874527 +v 3.491103 0.594680 -34.874527 +v 3.491103 0.594680 -34.874527 +v 3.491103 0.594680 -34.874527 +v 2.083306 0.421069 -35.803970 +v 2.083306 0.421069 -35.803970 +v 2.083306 0.421069 -35.803970 +v 2.083306 0.421069 -35.803970 +v 2.538226 0.594680 -35.600979 +v 2.538226 0.594680 -35.600979 +v 2.538226 0.594680 -35.600979 +v 2.538226 0.594680 -35.600979 +v 1.901010 0.594680 -36.880245 +v 1.901010 0.594680 -36.880245 +v 1.901010 0.594680 -36.880245 +v 1.901010 0.594680 -36.880245 +v 1.366424 0.594680 -37.899334 +v 1.366424 0.594680 -37.899334 +v 1.366424 0.594680 -37.899334 +v 1.366424 0.594680 -37.899334 +v 0.648262 0.594680 -39.488266 +v 0.648262 0.594680 -39.488266 +v 0.648262 0.594680 -39.488266 +v 0.648262 0.594680 -39.488266 +v 16.119942 0.594680 -39.377014 +v 16.119942 0.594680 -39.377014 +v 16.119942 0.594680 -39.377014 +v 16.119942 0.594680 -39.377014 +v -5.312808 0.477339 -41.238041 +v -5.312808 0.477339 -41.238041 +v -5.312808 0.477339 -41.238041 +v -5.312808 0.477339 -41.238041 +v 1.092352 0.386347 -36.024368 +v 1.092352 0.386347 -36.024368 +v 1.092352 0.386347 -36.024368 +v 1.092352 0.386347 -36.024368 +v 0.576389 0.386347 -36.032192 +v 0.576389 0.386347 -36.032192 +v 0.576389 0.386347 -36.032192 +v 0.576389 0.386347 -36.032192 +v 0.568700 0.386347 -36.531837 +v 0.568700 0.386347 -36.531837 +v 0.568700 0.386347 -36.531837 +v 0.568700 0.386347 -36.531837 +v 2.234622 0.559958 -35.747147 +v 2.234622 0.559958 -35.747147 +v 2.234622 0.559958 -35.747147 +v 2.234622 0.559958 -35.747147 +v 3.016430 0.594680 -35.328224 +v 3.016430 0.594680 -35.328224 +v 3.016430 0.594680 -35.328224 +v 3.016430 0.594680 -35.328224 +v 3.936961 0.594680 -34.361729 +v 3.936961 0.594680 -34.361729 +v 3.936961 0.594680 -34.361729 +v 3.936961 0.594680 -34.361729 +v 4.531487 0.594680 -33.929867 +v 4.531487 0.594680 -33.929867 +v 4.531487 0.594680 -33.929867 +v 4.531487 0.594680 -33.929867 +v 5.205037 0.594680 -33.723351 +v 5.205037 0.594680 -33.723351 +v 5.205037 0.594680 -33.723351 +v 5.205037 0.594680 -33.723351 +v 5.879524 0.594680 -33.784824 +v 5.879524 0.594680 -33.784824 +v 5.879524 0.594680 -33.784824 +v 5.879524 0.594680 -33.784824 +v 6.673915 0.594680 -34.226440 +v 6.673915 0.594680 -34.226440 +v 6.673915 0.594680 -34.226440 +v 6.673915 0.594680 -34.226440 +v 8.753197 0.594680 -35.720665 +v 8.753197 0.594680 -35.720665 +v 8.753197 0.594680 -35.720665 +v 8.753197 0.594680 -35.720665 +v 1.700969 0.386347 -36.423378 +v 1.700969 0.386347 -36.423378 +v 1.700969 0.386347 -36.423378 +v 1.700969 0.386347 -36.423378 +v 3.851856 0.594680 -35.220730 +v 3.851856 0.594680 -35.220730 +v 3.851856 0.594680 -35.220730 +v 3.851856 0.594680 -35.220730 +v 2.197887 0.421069 -36.289257 +v 2.197887 0.421069 -36.289257 +v 2.197887 0.421069 -36.289257 +v 2.197887 0.421069 -36.289257 +v 2.767271 0.594680 -36.153774 +v 2.767271 0.594680 -36.153774 +v 2.767271 0.594680 -36.153774 +v 2.767271 0.594680 -36.153774 +v 2.313865 0.594680 -37.019653 +v 2.313865 0.594680 -37.019653 +v 2.313865 0.594680 -37.019653 +v 2.313865 0.594680 -37.019653 +v 1.779257 0.594680 -38.108387 +v 1.779257 0.594680 -38.108387 +v 1.779257 0.594680 -38.108387 +v 1.779257 0.594680 -38.108387 +v 0.923484 0.594680 -39.627632 +v 0.923484 0.594680 -39.627632 +v 0.923484 0.594680 -39.627632 +v 0.923484 0.594680 -39.627632 +v 16.157930 0.594680 -39.045853 +v 16.157930 0.594680 -39.045853 +v 16.157930 0.594680 -39.045853 +v 16.157930 0.594680 -39.045853 +v 0.028462 0.386347 -35.973957 +v 0.028462 0.386347 -35.973957 +v 0.028462 0.386347 -35.973957 +v 0.028462 0.386347 -35.973957 +v -0.023285 0.386347 -36.469849 +v -0.023285 0.386347 -36.469849 +v -0.023285 0.386347 -36.469849 +v -0.023285 0.386347 -36.469849 +v -0.608900 0.386347 -35.814022 +v -0.608900 0.386347 -35.814022 +v -0.608900 0.386347 -35.814022 +v -0.608900 0.386347 -35.814022 +v -0.731528 0.386347 -36.296947 +v -0.731528 0.386347 -36.296947 +v -0.731528 0.386347 -36.296947 +v -0.731528 0.386347 -36.296947 +v -1.316528 0.386347 -35.436638 +v -1.316528 0.386347 -35.436638 +v -1.316528 0.386347 -35.436638 +v -1.316528 0.386347 -35.436638 +v -1.507868 0.386347 -35.895920 +v -1.507868 0.386347 -35.895920 +v -1.507868 0.386347 -35.895920 +v -1.507868 0.386347 -35.895920 +v -2.154977 0.386347 -34.791267 +v -2.154977 0.386347 -34.791267 +v -2.154977 0.386347 -34.791267 +v -2.154977 0.386347 -34.791267 +v -2.390236 0.386347 -35.226635 +v -2.390236 0.386347 -35.226635 +v -2.390236 0.386347 -35.226635 +v -2.390236 0.386347 -35.226635 +v -2.884007 0.386347 -34.434048 +v -2.884007 0.386347 -34.434048 +v -2.884007 0.386347 -34.434048 +v -2.884007 0.386347 -34.434048 +v -2.986329 0.386347 -34.909626 +v -2.986329 0.386347 -34.909626 +v -2.986329 0.386347 -34.909626 +v -2.986329 0.386347 -34.909626 +v -3.567213 0.386347 -34.371944 +v -3.567213 0.386347 -34.371944 +v -3.567213 0.386347 -34.371944 +v -3.567213 0.386347 -34.371944 +v -3.467648 0.386347 -34.848206 +v -3.467648 0.386347 -34.848206 +v -3.467648 0.386347 -34.848206 +v -3.467648 0.386347 -34.848206 +v -4.182520 0.386347 -34.598705 +v -4.182520 0.386347 -34.598705 +v -4.182520 0.386347 -34.598705 +v -4.182520 0.386347 -34.598705 +v -3.920469 0.386347 -35.015621 +v -3.920469 0.386347 -35.015621 +v -3.920469 0.386347 -35.015621 +v -3.920469 0.386347 -35.015621 +v -4.655061 0.386347 -35.011429 +v -4.655061 0.386347 -35.011429 +v -4.655061 0.386347 -35.011429 +v -4.655061 0.386347 -35.011429 +v -4.287821 0.386347 -35.336136 +v -4.287821 0.386347 -35.336136 +v -4.287821 0.386347 -35.336136 +v -4.287821 0.386347 -35.336136 +v -4.943528 0.401512 -35.661560 +v -4.943528 0.401512 -35.661560 +v -4.943528 0.401512 -35.661560 +v -4.943528 0.401512 -35.661560 +v -4.484122 0.401512 -35.836102 +v -4.484122 0.401512 -35.836102 +v -4.484122 0.401512 -35.836102 +v -4.484122 0.401512 -35.836102 +v -5.207337 0.462174 -37.232113 +v -5.207337 0.462174 -37.232113 +v -5.207337 0.462174 -37.232113 +v -5.207337 0.462174 -37.232113 +v -4.716347 0.462174 -37.321308 +v -4.716347 0.462174 -37.321308 +v -4.716347 0.462174 -37.321308 +v -4.716347 0.462174 -37.321308 +v -5.870199 0.477339 -42.126080 +v -5.870199 0.477339 -42.126080 +v -5.870199 0.477339 -42.126080 +v -5.870199 0.477339 -42.126080 +v -5.540700 0.477339 -42.176498 +v -5.540700 0.477339 -42.176498 +v -5.540700 0.477339 -42.176498 +v -5.540700 0.477339 -42.176498 +v -5.807056 0.477339 -41.162418 +v -5.807056 0.477339 -41.162418 +v -5.807056 0.477339 -41.162418 +v -5.807056 0.477339 -41.162418 +v 1.064464 0.719680 -39.349228 +v 1.064464 0.719680 -39.349228 +v 1.064464 0.719680 -39.349228 +v 1.064464 0.719680 -39.349228 +v 0.789242 0.719680 -39.209862 +v 0.789242 0.719680 -39.209862 +v 0.789242 0.719680 -39.209862 +v 0.789242 0.719680 -39.209862 +v 0.789242 -0.030320 -39.209862 +v 0.789242 -0.030320 -39.209862 +v 0.789242 -0.030320 -39.209862 +v 0.789242 -0.030320 -39.209862 +v 1.064464 -0.030320 -39.349228 +v 1.064464 -0.030320 -39.349228 +v 1.064464 -0.030320 -39.349228 +v 1.064464 -0.030320 -39.349228 +v 1.133269 0.094680 -39.384071 +v 1.133269 0.094680 -39.384071 +v 1.133269 0.094680 -39.384071 +v 1.133269 0.094680 -39.384071 +v 0.720436 0.094680 -39.175018 +v 0.720436 0.094680 -39.175018 +v 0.720436 0.094680 -39.175018 +v 0.720436 0.094680 -39.175018 +v 1.133269 0.594680 -39.384071 +v 1.133269 0.594680 -39.384071 +v 1.133269 0.594680 -39.384071 +v 1.133269 0.594680 -39.384071 +v 0.720436 0.594680 -39.175018 +v 0.720436 0.594680 -39.175018 +v 0.720436 0.594680 -39.175018 +v 0.720436 0.594680 -39.175018 +v 13.762095 -0.030320 -38.355957 +v 13.762095 -0.030320 -38.355957 +v 13.762095 -0.030320 -38.355957 +v 13.762095 -0.030320 -38.355957 +v 13.626731 0.719680 -38.660568 +v 13.626731 0.719680 -38.660568 +v 13.626731 0.719680 -38.660568 +v 13.626731 0.719680 -38.660568 +v 13.626732 -0.030320 -38.660568 +v 13.626732 -0.030320 -38.660568 +v 13.626732 -0.030320 -38.660568 +v 13.626732 -0.030320 -38.660568 +v 13.592890 0.094680 -38.736721 +v 13.592890 0.094680 -38.736721 +v 13.592890 0.094680 -38.736721 +v 13.592890 0.094680 -38.736721 +v 13.795937 0.094680 -38.279804 +v 13.795937 0.094680 -38.279804 +v 13.795937 0.094680 -38.279804 +v 13.795937 0.094680 -38.279804 +v 13.795938 0.594680 -38.279804 +v 13.795938 0.594680 -38.279804 +v 13.795938 0.594680 -38.279804 +v 13.795938 0.594680 -38.279804 +v 13.592890 0.594680 -38.736721 +v 13.592890 0.594680 -38.736721 +v 13.592890 0.594680 -38.736721 +v 13.592890 0.594680 -38.736721 +v 1.102659 0.459263 -36.512630 +v 1.102659 0.459263 -36.512630 +v 1.102659 0.459263 -36.512630 +v 1.102659 0.459263 -36.512630 +v 1.092571 -0.019903 -36.034756 +v 1.092571 -0.019903 -36.034756 +v 1.092571 -0.019903 -36.034756 +v 1.092571 -0.019903 -36.034756 +v 0.832561 -0.030320 -36.120895 +v 0.832561 -0.030320 -36.120895 +v 0.832561 -0.030320 -36.120895 +v 0.832561 -0.030320 -36.120895 +v 0.576229 -0.019903 -36.042603 +v 0.576229 -0.019903 -36.042603 +v 0.576229 -0.019903 -36.042603 +v 0.576229 -0.019903 -36.042603 +v 0.568861 -0.019903 -36.521427 +v 0.568861 -0.019903 -36.521427 +v 0.568861 -0.019903 -36.521427 +v 0.568861 -0.019903 -36.521427 +v 0.832797 -0.030320 -36.454086 +v 0.832797 -0.030320 -36.454086 +v 0.832797 -0.030320 -36.454086 +v 0.832797 -0.030320 -36.454086 +v 2.247018 0.664506 -36.339245 +v 2.247018 0.664506 -36.339245 +v 2.247018 0.664506 -36.339245 +v 2.247018 0.664506 -36.339245 +v 2.237561 -0.015563 -35.757042 +v 2.237561 -0.015563 -35.757042 +v 2.237561 -0.015563 -35.757042 +v 2.237561 -0.015563 -35.757042 +v 2.192498 -0.030320 -35.855446 +v 2.192498 -0.030320 -35.855446 +v 2.192498 -0.030320 -35.855446 +v 2.192498 -0.030320 -35.855446 +v 1.391163 -0.030320 -36.401405 +v 1.391163 -0.030320 -36.401405 +v 1.391163 -0.030320 -36.401405 +v 1.391163 -0.030320 -36.401405 +v 3.346142 0.704055 -35.681019 +v 3.346142 0.704055 -35.681019 +v 3.346142 0.704055 -35.681019 +v 3.346142 0.704055 -35.681019 +v 3.023445 -0.014695 -35.335728 +v 3.023445 -0.014695 -35.335728 +v 3.023445 -0.014695 -35.335728 +v 3.023445 -0.014695 -35.335728 +v 2.435474 0.716590 -36.195827 +v 2.435474 0.716590 -36.195827 +v 2.435474 0.716590 -36.195827 +v 2.435474 0.716590 -36.195827 +v 3.002638 -0.030320 -35.823456 +v 3.002638 -0.030320 -35.823456 +v 3.002638 -0.030320 -35.823456 +v 3.002638 -0.030320 -35.823456 +v 2.384254 -0.030320 -35.765232 +v 2.384254 -0.030320 -35.765232 +v 2.384254 -0.030320 -35.765232 +v 2.384254 -0.030320 -35.765232 +v 4.257583 0.704055 -34.721481 +v 4.257583 0.704055 -34.721481 +v 4.257583 0.704055 -34.721481 +v 4.257583 0.704055 -34.721481 +v 3.943783 -0.014695 -34.369385 +v 3.943783 -0.014695 -34.369385 +v 3.943783 -0.014695 -34.369385 +v 3.943783 -0.014695 -34.369385 +v 3.764926 -0.030320 -34.674923 +v 3.764926 -0.030320 -34.674923 +v 3.764926 -0.030320 -34.674923 +v 3.764926 -0.030320 -34.674923 +v 4.002653 0.719680 -34.907494 +v 4.002653 0.719680 -34.907494 +v 4.002653 0.719680 -34.907494 +v 4.002653 0.719680 -34.907494 +v 3.559597 -0.030320 -35.409039 +v 3.559597 -0.030320 -35.409039 +v 3.559597 -0.030320 -35.409039 +v 3.559597 -0.030320 -35.409039 +v 4.698283 0.704055 -34.376942 +v 4.698283 0.704055 -34.376942 +v 4.698283 0.704055 -34.376942 +v 4.698283 0.704055 -34.376942 +v 4.535035 -0.014695 -33.939381 +v 4.535035 -0.014695 -33.939381 +v 4.535035 -0.014695 -33.939381 +v 4.535035 -0.014695 -33.939381 +v 4.430592 0.719680 -34.467274 +v 4.430592 0.719680 -34.467274 +v 4.430592 0.719680 -34.467274 +v 4.430592 0.719680 -34.467274 +v 4.430592 -0.030320 -34.467274 +v 4.430592 -0.030320 -34.467274 +v 4.430592 -0.030320 -34.467274 +v 4.430592 -0.030320 -34.467274 +v 4.258698 -0.030320 -34.193703 +v 4.258698 -0.030320 -34.193703 +v 4.258698 -0.030320 -34.193703 +v 4.258698 -0.030320 -34.193703 +v 5.226021 0.704055 -34.206623 +v 5.226021 0.704055 -34.206623 +v 5.226021 0.704055 -34.206623 +v 5.226021 0.704055 -34.206623 +v 5.205483 -0.014695 -33.733631 +v 5.205483 -0.014695 -33.733631 +v 5.205483 -0.014695 -33.733631 +v 5.205483 -0.014695 -33.733631 +v 4.941215 0.719680 -34.198120 +v 4.941215 0.719680 -34.198120 +v 4.941215 0.719680 -34.198120 +v 4.941215 0.719680 -34.198120 +v 4.941216 -0.030320 -34.198120 +v 4.941216 -0.030320 -34.198120 +v 4.941216 -0.030320 -34.198120 +v 4.941216 -0.030320 -34.198120 +v 4.880571 -0.030320 -33.875668 +v 4.880571 -0.030320 -33.875668 +v 4.880571 -0.030320 -33.875668 +v 4.880571 -0.030320 -33.875668 +v 5.767019 0.704055 -34.251743 +v 5.767019 0.704055 -34.251743 +v 5.767019 0.704055 -34.251743 +v 5.767019 0.704055 -34.251743 +v 5.877130 -0.014695 -33.794758 +v 5.877130 -0.014695 -33.794758 +v 5.877130 -0.014695 -33.794758 +v 5.877130 -0.014695 -33.794758 +v 5.534902 -0.030320 -33.797813 +v 5.534902 -0.030320 -33.797813 +v 5.534902 -0.030320 -33.797813 +v 5.534902 -0.030320 -33.797813 +v 5.505716 0.719680 -34.125900 +v 5.505716 0.719680 -34.125900 +v 5.505716 0.719680 -34.125900 +v 5.505716 0.719680 -34.125900 +v 5.505716 -0.030320 -34.125900 +v 5.505716 -0.030320 -34.125900 +v 5.505716 -0.030320 -34.125900 +v 5.505716 -0.030320 -34.125900 +v 6.417362 0.704055 -34.636429 +v 6.417362 0.704055 -34.636429 +v 6.417362 0.704055 -34.636429 +v 6.417362 0.704055 -34.636429 +v 6.668457 -0.014695 -34.235161 +v 6.668457 -0.014695 -34.235161 +v 6.668457 -0.014695 -34.235161 +v 6.668457 -0.014695 -34.235161 +v 6.071228 0.719680 -34.319931 +v 6.071228 0.719680 -34.319931 +v 6.071228 0.719680 -34.319931 +v 6.071228 0.719680 -34.319931 +v 6.071228 -0.030320 -34.319931 +v 6.071228 -0.030320 -34.319931 +v 6.071228 -0.030320 -34.319931 +v 6.071228 -0.030320 -34.319931 +v 6.201910 -0.030320 -34.021847 +v 6.201910 -0.030320 -34.021847 +v 6.201910 -0.030320 -34.021847 +v 6.201910 -0.030320 -34.021847 +v 8.465572 0.704055 -36.116852 +v 8.465572 0.704055 -36.116852 +v 8.465572 0.704055 -36.116852 +v 8.465572 0.704055 -36.116852 +v 8.747078 -0.014695 -35.729095 +v 8.747078 -0.014695 -35.729095 +v 8.747078 -0.014695 -35.729095 +v 8.747078 -0.014695 -35.729095 +v 7.113911 0.719680 -35.046440 +v 7.113911 0.719680 -35.046440 +v 7.113911 0.719680 -35.046440 +v 7.113911 0.719680 -35.046440 +v 7.113911 -0.030320 -35.046444 +v 7.113911 -0.030320 -35.046444 +v 7.113911 -0.030320 -35.046444 +v 7.113911 -0.030320 -35.046444 +v 7.307096 -0.030320 -34.775524 +v 7.307096 -0.030320 -34.775524 +v 7.307096 -0.030320 -34.775524 +v 7.307096 -0.030320 -34.775524 +v 1.369258 -0.030320 -36.070885 +v 1.369258 -0.030320 -36.070885 +v 1.369258 -0.030320 -36.070885 +v 1.369258 -0.030320 -36.070885 +v 1.972045 -0.030320 -36.268654 +v 1.972045 -0.030320 -36.268654 +v 1.972045 -0.030320 -36.268654 +v 1.972045 -0.030320 -36.268654 +v 1.699659 -0.019903 -36.413132 +v 1.699659 -0.019903 -36.413132 +v 1.699659 -0.019903 -36.413132 +v 1.699659 -0.019903 -36.413132 +v 1.639421 0.459263 -35.941700 +v 1.639421 0.459263 -35.941700 +v 1.639421 0.459263 -35.941700 +v 1.639421 0.459263 -35.941700 +v 3.321097 -0.030320 -35.177059 +v 3.321097 -0.030320 -35.177059 +v 3.321097 -0.030320 -35.177059 +v 3.321097 -0.030320 -35.177059 +v 3.559597 0.719680 -35.409039 +v 3.559597 0.719680 -35.409039 +v 3.559597 0.719680 -35.409039 +v 3.559597 0.719680 -35.409039 +v 4.002653 -0.030320 -34.907490 +v 4.002653 -0.030320 -34.907490 +v 4.002653 -0.030320 -34.907490 +v 4.002653 -0.030320 -34.907490 +v 3.844341 -0.014695 -35.213516 +v 3.844341 -0.014695 -35.213516 +v 3.844341 -0.014695 -35.213516 +v 3.844341 -0.014695 -35.213516 +v 3.498619 0.704055 -34.881741 +v 3.498619 0.704055 -34.881741 +v 3.498619 0.704055 -34.881741 +v 3.498619 0.704055 -34.881741 +v 1.910343 -0.030320 -35.943245 +v 1.910343 -0.030320 -35.943245 +v 1.910343 -0.030320 -35.943245 +v 1.910343 -0.030320 -35.943245 +v 2.268936 -0.030320 -36.188866 +v 2.268936 -0.030320 -36.188866 +v 2.268936 -0.030320 -36.188866 +v 2.268936 -0.030320 -36.188866 +v 2.195500 -0.019035 -36.279144 +v 2.195500 -0.019035 -36.279144 +v 2.195500 -0.019035 -36.279144 +v 2.195500 -0.019035 -36.279144 +v 2.085693 0.500062 -35.814079 +v 2.085693 0.500062 -35.814079 +v 2.085693 0.500062 -35.814079 +v 2.085693 0.500062 -35.814079 +v 3.002637 0.719680 -35.823456 +v 3.002637 0.719680 -35.823456 +v 3.002637 0.719680 -35.823456 +v 3.002637 0.719680 -35.823456 +v 2.435474 -0.030320 -36.195827 +v 2.435474 -0.030320 -36.195827 +v 2.435474 -0.030320 -36.195827 +v 2.435474 -0.030320 -36.195827 +v 2.814972 -0.030320 -35.550133 +v 2.814972 -0.030320 -35.550133 +v 2.814972 -0.030320 -35.550133 +v 2.814972 -0.030320 -35.550133 +v 2.757842 -0.014695 -36.146828 +v 2.757842 -0.014695 -36.146828 +v 2.757842 -0.014695 -36.146828 +v 2.757842 -0.014695 -36.146828 +v 2.542925 0.704055 -35.609844 +v 2.542925 0.704055 -35.609844 +v 2.542925 0.704055 -35.609844 +v 2.542925 0.704055 -35.609844 +v 1.909611 0.704055 -36.883148 +v 1.909611 0.704055 -36.883148 +v 1.909611 0.704055 -36.883148 +v 1.909611 0.704055 -36.883148 +v 2.107437 0.719680 -36.949951 +v 2.107437 0.719680 -36.949951 +v 2.107437 0.719680 -36.949951 +v 2.107437 0.719680 -36.949951 +v 2.107437 -0.030320 -36.949951 +v 2.107437 -0.030320 -36.949951 +v 2.107437 -0.030320 -36.949951 +v 2.305264 -0.014695 -37.016750 +v 2.305264 -0.014695 -37.016750 +v 2.305264 -0.014695 -37.016750 +v 2.305264 -0.014695 -37.016750 +v 2.457165 -0.030320 -36.538555 +v 2.457165 -0.030320 -36.538555 +v 2.457165 -0.030320 -36.538555 +v 2.457165 -0.030320 -36.538555 +v 2.457165 0.719680 -36.538555 +v 2.457165 0.719680 -36.538555 +v 2.457165 0.719680 -36.538555 +v 2.457165 0.719680 -36.538555 +v 2.170166 0.716590 -36.545864 +v 2.170166 0.716590 -36.545864 +v 2.170166 0.716590 -36.545864 +v 2.170166 0.716590 -36.545864 +v 2.170166 -0.030320 -36.545864 +v 2.170166 -0.030320 -36.545864 +v 2.170166 -0.030320 -36.545864 +v 2.170166 -0.030320 -36.545864 +v 1.375025 0.704055 -37.903690 +v 1.375025 0.704055 -37.903690 +v 1.375025 0.704055 -37.903690 +v 1.375025 0.704055 -37.903690 +v 1.572840 0.719680 -38.003860 +v 1.572840 0.719680 -38.003860 +v 1.572840 0.719680 -38.003860 +v 1.572840 0.719680 -38.003860 +v 1.572841 -0.030320 -38.003860 +v 1.572841 -0.030320 -38.003860 +v 1.572841 -0.030320 -38.003860 +v 1.572841 -0.030320 -38.003860 +v 1.770656 -0.014695 -38.104031 +v 1.770656 -0.014695 -38.104031 +v 1.770656 -0.014695 -38.104031 +v 1.770656 -0.014695 -38.104031 +v 2.006114 -0.030320 -37.487000 +v 2.006114 -0.030320 -37.487000 +v 2.006114 -0.030320 -37.487000 +v 2.006114 -0.030320 -37.487000 +v 2.006114 0.719680 -37.487000 +v 2.006114 0.719680 -37.487000 +v 2.006114 0.719680 -37.487000 +v 2.006114 0.719680 -37.487000 +v 1.730890 0.719680 -37.353436 +v 1.730890 0.719680 -37.353436 +v 1.730890 0.719680 -37.353436 +v 1.730890 0.719680 -37.353436 +v 1.730890 -0.030320 -37.353436 +v 1.730890 -0.030320 -37.353436 +v 1.730890 -0.030320 -37.353436 +v 1.730890 -0.030320 -37.353436 +v 0.654155 0.704055 -39.491249 +v 0.654155 0.704055 -39.491249 +v 0.654155 0.704055 -39.491249 +v 0.654155 0.704055 -39.491249 +v 0.785873 0.719680 -39.557949 +v 0.785873 0.719680 -39.557949 +v 0.785873 0.719680 -39.557949 +v 0.785873 0.719680 -39.557949 +v 0.785873 -0.030320 -39.557949 +v 0.785873 -0.030320 -39.557949 +v 0.785873 -0.030320 -39.557949 +v 0.785873 -0.030320 -39.557949 +v 0.917591 -0.014695 -39.624649 +v 0.917591 -0.014695 -39.624649 +v 0.917591 -0.014695 -39.624649 +v 0.917591 -0.014695 -39.624649 +v 0.935213 0.719680 -39.589848 +v 0.935213 0.719680 -39.589848 +v 0.935213 0.719680 -39.589848 +v 0.935213 0.719680 -39.589848 +v 1.081460 0.719680 -38.632793 +v 1.081460 0.719680 -38.632793 +v 1.081460 0.719680 -38.632793 +v 1.081460 0.719680 -38.632793 +v 0.671777 -0.030320 -39.456448 +v 0.671777 -0.030320 -39.456448 +v 0.671777 -0.030320 -39.456448 +v 0.671777 -0.030320 -39.456448 +v 1.356682 -0.030320 -38.772163 +v 1.356682 -0.030320 -38.772163 +v 1.356682 -0.030320 -38.772163 +v 1.356682 -0.030320 -38.772163 +v 16.120756 0.704055 -39.369923 +v 16.120756 0.704055 -39.369923 +v 16.120756 0.704055 -39.369923 +v 16.120756 0.704055 -39.369923 +v 16.157120 -0.014695 -39.052940 +v 16.157120 -0.014695 -39.052940 +v 16.157120 -0.014695 -39.052940 +v 16.157120 -0.014695 -39.052940 +v 15.992916 -0.030320 -39.034107 +v 15.992916 -0.030320 -39.034107 +v 15.992916 -0.030320 -39.034107 +v 15.992916 -0.030320 -39.034107 +v 15.956554 0.719680 -39.351086 +v 15.956554 0.719680 -39.351086 +v 15.956554 0.719680 -39.351086 +v 15.956554 0.719680 -39.351086 +v 11.178569 -0.030320 -37.572643 +v 11.178569 -0.030320 -37.572643 +v 11.178569 -0.030320 -37.572643 +v 11.178569 -0.030320 -37.572643 +v 0.027384 -0.019903 -35.984291 +v 0.027384 -0.019903 -35.984291 +v 0.027384 -0.019903 -35.984291 +v 0.027384 -0.019903 -35.984291 +v -0.022207 -0.019903 -36.459518 +v -0.022207 -0.019903 -36.459518 +v -0.022207 -0.019903 -36.459518 +v -0.022207 -0.019903 -36.459518 +v 0.308043 -0.030320 -36.095257 +v 0.308043 -0.030320 -36.095257 +v 0.308043 -0.030320 -36.095257 +v 0.308043 -0.030320 -36.095257 +v 0.291556 -0.030320 -36.427685 +v 0.291556 -0.030320 -36.427685 +v 0.291556 -0.030320 -36.427685 +v 0.291556 -0.030320 -36.427685 +v -0.611455 -0.019903 -35.824085 +v -0.611455 -0.019903 -35.824085 +v -0.611455 -0.019903 -35.824085 +v -0.611455 -0.019903 -35.824085 +v -0.728974 -0.019903 -36.286888 +v -0.728974 -0.019903 -36.286888 +v -0.728974 -0.019903 -36.286888 +v -0.728974 -0.019903 -36.286888 +v -0.296168 -0.030320 -35.993042 +v -0.296168 -0.030320 -35.993042 +v -0.296168 -0.030320 -35.993042 +v -0.296168 -0.030320 -35.993042 +v -0.353720 -0.030320 -36.320045 +v -0.353720 -0.030320 -36.320045 +v -0.353720 -0.030320 -36.320045 +v -0.353720 -0.030320 -36.320045 +v -1.320514 -0.019903 -35.446205 +v -1.320514 -0.019903 -35.446205 +v -1.320514 -0.019903 -35.446205 +v -1.320514 -0.019903 -35.446205 +v -1.503881 -0.019903 -35.886353 +v -1.503881 -0.019903 -35.886353 +v -1.503881 -0.019903 -35.886353 +v -1.503881 -0.019903 -35.886353 +v -0.972349 -0.030320 -35.745617 +v -0.972349 -0.030320 -35.745617 +v -0.972349 -0.030320 -35.745617 +v -0.972349 -0.030320 -35.745617 +v -1.076461 -0.030320 -36.061150 +v -1.076461 -0.030320 -36.061150 +v -1.076461 -0.030320 -36.061150 +v -1.076461 -0.030320 -36.061150 +v -2.159878 -0.019903 -34.800339 +v -2.159878 -0.019903 -34.800339 +v -2.159878 -0.019903 -34.800339 +v -2.159878 -0.019903 -34.800339 +v -2.385335 -0.019903 -35.217564 +v -2.385335 -0.019903 -35.217564 +v -2.385335 -0.019903 -35.217564 +v -2.385335 -0.019903 -35.217564 +v -1.923967 -0.030320 -35.481037 +v -1.923967 -0.030320 -35.481037 +v -1.923967 -0.030320 -35.481037 +v -1.923967 -0.030320 -35.481037 +v -1.772279 -0.030320 -35.186657 +v -1.772279 -0.030320 -35.186657 +v -1.772279 -0.030320 -35.186657 +v -1.772279 -0.030320 -35.186657 +v -2.886140 -0.019903 -34.443954 +v -2.886140 -0.019903 -34.443954 +v -2.886140 -0.019903 -34.443954 +v -2.886140 -0.019903 -34.443954 +v -2.984197 -0.019903 -34.899715 +v -2.984197 -0.019903 -34.899715 +v -2.984197 -0.019903 -34.899715 +v -2.984197 -0.019903 -34.899715 +v -2.564823 -0.030320 -34.642643 +v -2.564823 -0.030320 -34.642643 +v -2.564823 -0.030320 -34.642643 +v -2.564823 -0.030320 -34.642643 +v -2.690351 -0.030320 -34.944221 +v -2.690351 -0.030320 -34.944221 +v -2.690351 -0.030320 -34.944221 +v -2.690351 -0.030320 -34.944221 +v -3.565139 -0.019903 -34.381866 +v -3.565139 -0.019903 -34.381866 +v -3.565139 -0.019903 -34.381866 +v -3.565139 -0.019903 -34.381866 +v -3.469722 -0.019903 -34.838284 +v -3.469722 -0.019903 -34.838284 +v -3.469722 -0.019903 -34.838284 +v -3.469722 -0.019903 -34.838284 +v -3.229646 -0.030320 -34.447617 +v -3.229646 -0.030320 -34.447617 +v -3.229646 -0.030320 -34.447617 +v -3.229646 -0.030320 -34.447617 +v -3.230525 -0.030320 -34.770859 +v -3.230525 -0.030320 -34.770859 +v -3.230525 -0.030320 -34.770859 +v -3.230525 -0.030320 -34.770859 +v -4.177061 -0.019903 -34.607391 +v -4.177061 -0.019903 -34.607391 +v -4.177061 -0.019903 -34.607391 +v -4.177061 -0.019903 -34.607391 +v -3.925928 -0.019903 -35.006935 +v -3.925928 -0.019903 -35.006935 +v -3.925928 -0.019903 -35.006935 +v -3.925928 -0.019903 -35.006935 +v -3.730812 -0.030320 -34.832554 +v -3.730812 -0.030320 -34.832554 +v -3.730812 -0.030320 -34.832554 +v -3.730812 -0.030320 -34.832554 +v -3.856806 -0.030320 -34.531719 +v -3.856806 -0.030320 -34.531719 +v -3.856806 -0.030320 -34.531719 +v -3.856806 -0.030320 -34.531719 +v -4.647410 -0.019903 -35.018192 +v -4.647410 -0.019903 -35.018192 +v -4.647410 -0.019903 -35.018192 +v -4.647410 -0.019903 -35.018192 +v -4.295473 -0.019903 -35.329369 +v -4.295473 -0.019903 -35.329369 +v -4.295473 -0.019903 -35.329369 +v -4.295473 -0.019903 -35.329369 +v -4.387208 -0.030320 -34.841469 +v -4.387208 -0.030320 -34.841469 +v -4.387208 -0.030320 -34.841469 +v -4.387208 -0.030320 -34.841469 +v -4.175128 -0.030320 -35.093498 +v -4.175128 -0.030320 -35.093498 +v -4.175128 -0.030320 -35.093498 +v -4.175128 -0.030320 -35.093498 +v -4.933957 -0.004738 -35.665199 +v -4.933957 -0.004738 -35.665199 +v -4.933957 -0.004738 -35.665199 +v -4.933957 -0.004738 -35.665199 +v -4.493692 -0.004738 -35.832462 +v -4.493692 -0.004738 -35.832462 +v -4.493692 -0.004738 -35.832462 +v -4.493692 -0.004738 -35.832462 +v -4.753071 -0.028424 -35.354645 +v -4.753071 -0.028424 -35.354645 +v -4.753071 -0.028424 -35.354645 +v -4.753071 -0.028424 -35.354645 +v -4.474660 -0.028424 -35.521366 +v -4.474660 -0.028424 -35.521366 +v -4.474660 -0.028424 -35.521366 +v -4.474660 -0.028424 -35.521366 +v -5.197108 0.055924 -37.233971 +v -5.197108 0.055924 -37.233971 +v -5.197108 0.055924 -37.233971 +v -5.197108 0.055924 -37.233971 +v -4.726576 0.055924 -37.319447 +v -4.726576 0.055924 -37.319447 +v -4.726576 0.055924 -37.319447 +v -4.726576 0.055924 -37.319447 +v -4.636958 0.015176 -36.233566 +v -4.636958 0.015176 -36.233566 +v -4.636958 0.015176 -36.233566 +v -4.636958 0.015176 -36.233566 +v -4.958395 0.015176 -36.153419 +v -4.958395 0.015176 -36.153419 +v -4.958395 0.015176 -36.153419 +v -4.958395 0.015176 -36.153419 +v -5.863145 0.071089 -42.127159 +v -5.863145 0.071089 -42.127159 +v -5.863145 0.071089 -42.127159 +v -5.863145 0.071089 -42.127159 +v -5.547756 0.071089 -42.175415 +v -5.547756 0.071089 -42.175415 +v -5.547756 0.071089 -42.175415 +v -5.547756 0.071089 -42.175415 +v -5.431507 0.058777 -39.257431 +v -5.431507 0.058777 -39.257431 +v -5.431507 0.058777 -39.257431 +v -5.431507 0.058777 -39.257431 +v -5.529566 0.060673 -42.056534 +v -5.529566 0.060673 -42.056534 +v -5.529566 0.060673 -42.056534 +v -5.529566 0.060673 -42.056534 +v -5.844955 0.060673 -42.008278 +v -5.844955 0.060673 -42.008278 +v -5.844955 0.060673 -42.008278 +v -5.844955 0.060673 -42.008278 +v -5.102280 0.058777 -39.308979 +v -5.102280 0.058777 -39.308979 +v -5.102280 0.058777 -39.308979 +v -5.102280 0.058777 -39.308979 +v -5.323105 0.550256 -41.236465 +v -5.323105 0.550256 -41.236465 +v -5.323105 0.550256 -41.236465 +v -5.323105 0.550256 -41.236465 +v -5.796760 0.071089 -41.163994 +v -5.796760 0.071089 -41.163994 +v -5.796760 0.071089 -41.163994 +v -5.796760 0.071089 -41.163994 +v 1.102659 -0.019903 -36.512630 +v 1.102659 -0.019903 -36.512630 +v 1.102659 -0.019903 -36.512630 +v 1.102659 -0.019903 -36.512630 +v 2.247018 -0.015563 -36.339245 +v 2.247018 -0.015563 -36.339245 +v 2.247018 -0.015563 -36.339245 +v 2.247018 -0.015563 -36.339245 +v 3.346141 -0.014695 -35.681019 +v 3.346141 -0.014695 -35.681019 +v 3.346141 -0.014695 -35.681019 +v 3.346141 -0.014695 -35.681019 +v 4.257583 -0.014695 -34.721481 +v 4.257583 -0.014695 -34.721481 +v 4.257583 -0.014695 -34.721481 +v 4.257583 -0.014695 -34.721481 +v 4.698283 -0.014695 -34.376942 +v 4.698283 -0.014695 -34.376942 +v 4.698283 -0.014695 -34.376942 +v 4.698283 -0.014695 -34.376942 +v 5.226021 -0.014695 -34.206627 +v 5.226021 -0.014695 -34.206627 +v 5.226021 -0.014695 -34.206627 +v 5.226021 -0.014695 -34.206627 +v 5.767019 -0.014695 -34.251743 +v 5.767019 -0.014695 -34.251743 +v 5.767019 -0.014695 -34.251743 +v 5.767019 -0.014695 -34.251743 +v 6.417362 -0.014695 -34.636429 +v 6.417362 -0.014695 -34.636429 +v 6.417362 -0.014695 -34.636429 +v 6.417362 -0.014695 -34.636429 +v 8.465572 -0.014695 -36.116852 +v 8.465572 -0.014695 -36.116852 +v 8.465572 -0.014695 -36.116852 +v 8.465572 -0.014695 -36.116852 +v 1.639421 -0.019903 -35.941700 +v 1.639421 -0.019903 -35.941700 +v 1.639421 -0.019903 -35.941700 +v 1.639421 -0.019903 -35.941700 +v 3.498619 -0.014695 -34.881741 +v 3.498619 -0.014695 -34.881741 +v 3.498619 -0.014695 -34.881741 +v 3.498619 -0.014695 -34.881741 +v 2.085693 -0.019035 -35.814079 +v 2.085693 -0.019035 -35.814079 +v 2.085693 -0.019035 -35.814079 +v 2.085693 -0.019035 -35.814079 +v 2.542925 -0.014695 -35.609844 +v 2.542925 -0.014695 -35.609844 +v 2.542925 -0.014695 -35.609844 +v 2.542925 -0.014695 -35.609844 +v 1.909611 -0.014695 -36.883148 +v 1.909611 -0.014695 -36.883148 +v 1.909611 -0.014695 -36.883148 +v 1.909611 -0.014695 -36.883148 +v 1.375025 -0.014695 -37.903690 +v 1.375025 -0.014695 -37.903690 +v 1.375025 -0.014695 -37.903690 +v 1.375025 -0.014695 -37.903690 +v 0.654155 -0.014695 -39.491249 +v 0.654155 -0.014695 -39.491249 +v 0.654155 -0.014695 -39.491249 +v 0.654155 -0.014695 -39.491249 +v 16.120754 -0.014695 -39.369923 +v 16.120754 -0.014695 -39.369923 +v 16.120754 -0.014695 -39.369923 +v 16.120754 -0.014695 -39.369923 +v -5.323104 0.071089 -41.236465 +v -5.323104 0.071089 -41.236465 +v -5.323104 0.071089 -41.236465 +v -5.323104 0.071089 -41.236465 +v -5.513814 0.142110 -39.244545 +v -5.513814 0.142110 -39.244545 +v -5.513814 0.142110 -39.244545 +v -5.513814 0.142110 -39.244545 +v -5.019972 0.142110 -39.321865 +v -5.019972 0.142110 -39.321865 +v -5.019972 0.142110 -39.321865 +v -5.019972 0.142110 -39.321865 +v -5.450433 0.144006 -42.068642 +v -5.450433 0.144006 -42.068642 +v -5.450433 0.144006 -42.068642 +v -5.450433 0.144006 -42.068642 +v -5.924088 0.144006 -41.996170 +v -5.924088 0.144006 -41.996170 +v -5.924088 0.144006 -41.996170 +v -5.924088 0.144006 -41.996170 +v -5.038753 0.098510 -36.133385 +v -5.038753 0.098510 -36.133385 +v -5.038753 0.098510 -36.133385 +v -5.038753 0.098510 -36.133385 +v -4.405057 0.054909 -35.563046 +v -4.405057 0.054909 -35.563046 +v -4.405057 0.054909 -35.563046 +v -4.405057 0.054909 -35.563046 +v -4.822674 0.054909 -35.312962 +v -4.822674 0.054909 -35.312962 +v -4.822674 0.054909 -35.312962 +v -4.822674 0.054909 -35.312962 +v -4.556599 0.098510 -36.253601 +v -4.556599 0.098510 -36.253601 +v -4.556599 0.098510 -36.253601 +v -4.556599 0.098510 -36.253601 +v -4.122108 0.053013 -35.156506 +v -4.122108 0.053013 -35.156506 +v -4.122108 0.053013 -35.156506 +v -4.122108 0.053013 -35.156506 +v -4.440228 0.053013 -34.778461 +v -4.440228 0.053013 -34.778461 +v -4.440228 0.053013 -34.778461 +v -4.440228 0.053013 -34.778461 +v -3.888304 0.053013 -34.456509 +v -3.888304 0.053013 -34.456509 +v -3.888304 0.053013 -34.456509 +v -3.888304 0.053013 -34.456509 +v -3.230743 0.053013 -34.851669 +v -3.230743 0.053013 -34.851669 +v -3.230743 0.053013 -34.851669 +v -3.230743 0.053013 -34.851669 +v -3.699313 0.053013 -34.907761 +v -3.699313 0.053013 -34.907761 +v -3.699313 0.053013 -34.907761 +v -3.699313 0.053013 -34.907761 +v -2.721733 0.053013 -35.019615 +v -2.721733 0.053013 -35.019615 +v -2.721733 0.053013 -35.019615 +v -2.721733 0.053013 -35.019615 +v -2.533442 0.053013 -34.567249 +v -2.533442 0.053013 -34.567249 +v -2.533442 0.053013 -34.567249 +v -2.533442 0.053013 -34.567249 +v -3.229426 0.053013 -34.366806 +v -3.229426 0.053013 -34.366806 +v -3.229426 0.053013 -34.366806 +v -3.229426 0.053013 -34.366806 +v -1.734357 0.053013 -35.113064 +v -1.734357 0.053013 -35.113064 +v -1.734357 0.053013 -35.113064 +v -1.734357 0.053013 -35.113064 +v -1.102489 0.053013 -36.140034 +v -1.102489 0.053013 -36.140034 +v -1.102489 0.053013 -36.140034 +v -1.102489 0.053013 -36.140034 +v -0.946321 0.053013 -35.666737 +v -0.946321 0.053013 -35.666737 +v -0.946321 0.053013 -35.666737 +v -0.946321 0.053013 -35.666737 +v -1.961890 0.053013 -35.554630 +v -1.961890 0.053013 -35.554630 +v -1.961890 0.053013 -35.554630 +v -1.961890 0.053013 -35.554630 +v -0.368108 0.053013 -36.401798 +v -0.368108 0.053013 -36.401798 +v -0.368108 0.053013 -36.401798 +v -0.368108 0.053013 -36.401798 +v -0.281780 0.053013 -35.911289 +v -0.281780 0.053013 -35.911289 +v -0.281780 0.053013 -35.911289 +v -0.281780 0.053013 -35.911289 +v 0.287435 0.053013 -36.510792 +v 0.287435 0.053013 -36.510792 +v 0.287435 0.053013 -36.510792 +v 0.287435 0.053013 -36.510792 +v 0.312164 0.053013 -36.012150 +v 0.312164 0.053013 -36.012150 +v 0.312164 0.053013 -36.012150 +v 0.312164 0.053013 -36.012150 +v 15.947432 0.094680 -39.430618 +v 15.947432 0.094680 -39.430618 +v 15.947432 0.094680 -39.430618 +v 15.947432 0.094680 -39.430618 +v 1.001311 0.094680 -39.623322 +v 1.001311 0.094680 -39.623322 +v 1.001311 0.094680 -39.623322 +v 1.001311 0.094680 -39.623322 +v 0.605680 0.094680 -39.422977 +v 0.605680 0.094680 -39.422977 +v 0.605680 0.094680 -39.422977 +v 0.605680 0.094680 -39.422977 +v 0.785873 0.094680 -39.557949 +v 0.785873 0.094680 -39.557949 +v 0.785873 0.094680 -39.557949 +v 0.785873 0.094680 -39.557949 +v 1.662084 0.094680 -37.320045 +v 1.662084 0.094680 -37.320045 +v 1.662084 0.094680 -37.320045 +v 1.662084 0.094680 -37.320045 +v 2.103124 0.093812 -36.553703 +v 2.103124 0.093812 -36.553703 +v 2.103124 0.093812 -36.553703 +v 2.103124 0.093812 -36.553703 +v 2.074920 0.094680 -37.520393 +v 2.074920 0.094680 -37.520393 +v 2.074920 0.094680 -37.520393 +v 2.074920 0.094680 -37.520393 +v 2.355184 0.093812 -35.689308 +v 2.355184 0.093812 -35.689308 +v 2.355184 0.093812 -35.689308 +v 2.355184 0.093812 -35.689308 +v 2.530124 0.094680 -36.546780 +v 2.530124 0.094680 -36.546780 +v 2.530124 0.094680 -36.546780 +v 2.530124 0.094680 -36.546780 +v 1.894917 0.053881 -35.861889 +v 1.894917 0.053881 -35.861889 +v 1.894917 0.053881 -35.861889 +v 1.894917 0.053881 -35.861889 +v 1.987470 0.053881 -36.350006 +v 1.987470 0.053881 -36.350006 +v 1.987470 0.053881 -36.350006 +v 1.987470 0.053881 -36.350006 +v 3.261472 0.094680 -35.119064 +v 3.261472 0.094680 -35.119064 +v 3.261472 0.094680 -35.119064 +v 3.261472 0.094680 -35.119064 +v 3.619223 0.094680 -35.467033 +v 3.619223 0.094680 -35.467033 +v 3.619223 0.094680 -35.467033 +v 3.619223 0.094680 -35.467033 +v 1.363781 0.053013 -35.988255 +v 1.363781 0.053013 -35.988255 +v 1.363781 0.053013 -35.988255 +v 1.363781 0.053013 -35.988255 +v 1.396639 0.053013 -36.484035 +v 1.396639 0.053013 -36.484035 +v 1.396639 0.053013 -36.484035 +v 1.396639 0.053013 -36.484035 +v 7.065614 0.094680 -35.114170 +v 7.065614 0.094680 -35.114170 +v 7.065614 0.094680 -35.114170 +v 7.065614 0.094680 -35.114170 +v 7.355392 0.094680 -34.707794 +v 7.355392 0.094680 -34.707794 +v 7.355392 0.094680 -34.707794 +v 7.355392 0.094680 -34.707794 +v 16.002039 0.094680 -38.954575 +v 16.002039 0.094680 -38.954575 +v 16.002039 0.094680 -38.954575 +v 16.002039 0.094680 -38.954575 +v 6.038557 0.094680 -34.394455 +v 6.038557 0.094680 -34.394455 +v 6.038557 0.094680 -34.394455 +v 6.038557 0.094680 -34.394455 +v 6.234581 0.094680 -33.947327 +v 6.234581 0.094680 -33.947327 +v 6.234581 0.094680 -33.947327 +v 6.234581 0.094680 -33.947327 +v 5.498419 0.094680 -34.207924 +v 5.498419 0.094680 -34.207924 +v 5.498419 0.094680 -34.207924 +v 5.498419 0.094680 -34.207924 +v 4.956377 0.094680 -34.278732 +v 4.956377 0.094680 -34.278732 +v 4.956377 0.094680 -34.278732 +v 4.956377 0.094680 -34.278732 +v 4.865410 0.094680 -33.795055 +v 4.865410 0.094680 -33.795055 +v 4.865410 0.094680 -33.795055 +v 4.865410 0.094680 -33.795055 +v 5.542199 0.094680 -33.715790 +v 5.542199 0.094680 -33.715790 +v 5.542199 0.094680 -33.715790 +v 5.542199 0.094680 -33.715790 +v 4.215725 0.094680 -34.125313 +v 4.215725 0.094680 -34.125313 +v 4.215725 0.094680 -34.125313 +v 4.215725 0.094680 -34.125313 +v 4.062085 0.094680 -34.965633 +v 4.062085 0.094680 -34.965633 +v 4.062085 0.094680 -34.965633 +v 4.062085 0.094680 -34.965633 +v 4.473565 0.094680 -34.535664 +v 4.473565 0.094680 -34.535664 +v 4.473565 0.094680 -34.535664 +v 4.473565 0.094680 -34.535664 +v 3.054399 0.094680 -35.890713 +v 3.054399 0.094680 -35.890713 +v 3.054399 0.094680 -35.890713 +v 3.054399 0.094680 -35.890713 +v 2.767174 0.094680 -35.485195 +v 2.767174 0.094680 -35.485195 +v 2.767174 0.094680 -35.485195 +v 2.767174 0.094680 -35.485195 +v 3.705495 0.094680 -34.616779 +v 3.705495 0.094680 -34.616779 +v 3.705495 0.094680 -34.616779 +v 3.705495 0.094680 -34.616779 +v 2.280739 0.073847 -36.273811 +v 2.280739 0.073847 -36.273811 +v 2.280739 0.073847 -36.273811 +v 2.280739 0.073847 -36.273811 +v 0.832856 0.053013 -36.537384 +v 0.832856 0.053013 -36.537384 +v 0.832856 0.053013 -36.537384 +v 0.832856 0.053013 -36.537384 +v 0.832502 0.053013 -36.037598 +v 0.832502 0.053013 -36.037598 +v 0.832502 0.053013 -36.037598 +v 0.832502 0.053013 -36.037598 +v 2.171496 0.073847 -35.774952 +v 2.171496 0.073847 -35.774952 +v 2.171496 0.073847 -35.774952 +v 2.171496 0.073847 -35.774952 +v 1.092571 0.459263 -36.034756 +v 1.092571 0.459263 -36.034756 +v 1.092571 0.459263 -36.034756 +v 1.092571 0.459263 -36.034756 +v 0.576229 0.459263 -36.042603 +v 0.576229 0.459263 -36.042603 +v 0.576229 0.459263 -36.042603 +v 0.576229 0.459263 -36.042603 +v 0.568861 0.459263 -36.521427 +v 0.568861 0.459263 -36.521427 +v 0.568861 0.459263 -36.521427 +v 0.568861 0.459263 -36.521427 +v 2.237561 0.663256 -35.757042 +v 2.237561 0.663256 -35.757042 +v 2.237561 0.663256 -35.757042 +v 2.237561 0.663256 -35.757042 +v 3.023445 0.704055 -35.335728 +v 3.023445 0.704055 -35.335728 +v 3.023445 0.704055 -35.335728 +v 3.023445 0.704055 -35.335728 +v 3.943784 0.704055 -34.369385 +v 3.943784 0.704055 -34.369385 +v 3.943784 0.704055 -34.369385 +v 3.943784 0.704055 -34.369385 +v 4.535035 0.704055 -33.939381 +v 4.535035 0.704055 -33.939381 +v 4.535035 0.704055 -33.939381 +v 4.535035 0.704055 -33.939381 +v 5.205483 0.704055 -33.733631 +v 5.205483 0.704055 -33.733631 +v 5.205483 0.704055 -33.733631 +v 5.205483 0.704055 -33.733631 +v 5.877130 0.704055 -33.794758 +v 5.877130 0.704055 -33.794758 +v 5.877130 0.704055 -33.794758 +v 5.877130 0.704055 -33.794758 +v 6.668457 0.704055 -34.235161 +v 6.668457 0.704055 -34.235161 +v 6.668457 0.704055 -34.235161 +v 6.668457 0.704055 -34.235161 +v 8.747078 0.704055 -35.729095 +v 8.747078 0.704055 -35.729095 +v 8.747078 0.704055 -35.729095 +v 8.747078 0.704055 -35.729095 +v 1.699659 0.459263 -36.413132 +v 1.699659 0.459263 -36.413132 +v 1.699659 0.459263 -36.413132 +v 1.699659 0.459263 -36.413132 +v 3.844341 0.704055 -35.213516 +v 3.844341 0.704055 -35.213516 +v 3.844341 0.704055 -35.213516 +v 3.844341 0.704055 -35.213516 +v 2.195499 0.500062 -36.279144 +v 2.195499 0.500062 -36.279144 +v 2.195499 0.500062 -36.279144 +v 2.195499 0.500062 -36.279144 +v 2.757842 0.704055 -36.146828 +v 2.757842 0.704055 -36.146828 +v 2.757842 0.704055 -36.146828 +v 2.757842 0.704055 -36.146828 +v 2.305264 0.704055 -37.016750 +v 2.305264 0.704055 -37.016750 +v 2.305264 0.704055 -37.016750 +v 2.305264 0.704055 -37.016750 +v 1.770656 0.704055 -38.104031 +v 1.770656 0.704055 -38.104031 +v 1.770656 0.704055 -38.104031 +v 1.770656 0.704055 -38.104031 +v 0.917591 0.704055 -39.624649 +v 0.917591 0.704055 -39.624649 +v 0.917591 0.704055 -39.624649 +v 0.917591 0.704055 -39.624649 +v 16.157118 0.704055 -39.052940 +v 16.157118 0.704055 -39.052940 +v 16.157118 0.704055 -39.052940 +v 16.157118 0.704055 -39.052940 +v 0.027384 0.459263 -35.984291 +v 0.027384 0.459263 -35.984291 +v 0.027384 0.459263 -35.984291 +v 0.027384 0.459263 -35.984291 +v -0.022207 0.459263 -36.459518 +v -0.022207 0.459263 -36.459518 +v -0.022207 0.459263 -36.459518 +v -0.022207 0.459263 -36.459518 +v -0.611455 0.459263 -35.824085 +v -0.611455 0.459263 -35.824085 +v -0.611455 0.459263 -35.824085 +v -0.611455 0.459263 -35.824085 +v -0.728974 0.459263 -36.286888 +v -0.728974 0.459263 -36.286888 +v -0.728974 0.459263 -36.286888 +v -0.728974 0.459263 -36.286888 +v -1.320514 0.459263 -35.446205 +v -1.320514 0.459263 -35.446205 +v -1.320514 0.459263 -35.446205 +v -1.320514 0.459263 -35.446205 +v -1.503881 0.459263 -35.886353 +v -1.503881 0.459263 -35.886353 +v -1.503881 0.459263 -35.886353 +v -1.503881 0.459263 -35.886353 +v -2.159878 0.459263 -34.800339 +v -2.159878 0.459263 -34.800339 +v -2.159878 0.459263 -34.800339 +v -2.159878 0.459263 -34.800339 +v -2.385335 0.459263 -35.217564 +v -2.385335 0.459263 -35.217564 +v -2.385335 0.459263 -35.217564 +v -2.385335 0.459263 -35.217564 +v -2.886140 0.459263 -34.443954 +v -2.886140 0.459263 -34.443954 +v -2.886140 0.459263 -34.443954 +v -2.886140 0.459263 -34.443954 +v -2.984198 0.459263 -34.899715 +v -2.984198 0.459263 -34.899715 +v -2.984198 0.459263 -34.899715 +v -2.984198 0.459263 -34.899715 +v -3.565139 0.459263 -34.381866 +v -3.565139 0.459263 -34.381866 +v -3.565139 0.459263 -34.381866 +v -3.469722 0.459263 -34.838284 +v -3.469722 0.459263 -34.838284 +v -3.469722 0.459263 -34.838284 +v -4.177061 0.459263 -34.607391 +v -4.177061 0.459263 -34.607391 +v -4.177061 0.459263 -34.607391 +v -4.177061 0.459263 -34.607391 +v -3.925929 0.459263 -35.006935 +v -3.925929 0.459263 -35.006935 +v -3.925929 0.459263 -35.006935 +v -3.925929 0.459263 -35.006935 +v -4.647410 0.459263 -35.018192 +v -4.647410 0.459263 -35.018192 +v -4.647410 0.459263 -35.018192 +v -4.647410 0.459263 -35.018192 +v -4.295473 0.459263 -35.329369 +v -4.295473 0.459263 -35.329369 +v -4.295473 0.459263 -35.329369 +v -4.295473 0.459263 -35.329369 +v -4.933957 0.474429 -35.665199 +v -4.933957 0.474429 -35.665199 +v -4.933957 0.474429 -35.665199 +v -4.933957 0.474429 -35.665199 +v -4.493693 0.474429 -35.832462 +v -4.493693 0.474429 -35.832462 +v -4.493693 0.474429 -35.832462 +v -4.493693 0.474429 -35.832462 +v -5.197108 0.535091 -37.233971 +v -5.197108 0.535091 -37.233971 +v -5.197108 0.535091 -37.233971 +v -5.197108 0.535091 -37.233971 +v -4.726576 0.535091 -37.319447 +v -4.726576 0.535091 -37.319447 +v -4.726576 0.535091 -37.319447 +v -4.726576 0.535091 -37.319447 +v -5.863144 0.550256 -42.127159 +v -5.863144 0.550256 -42.127159 +v -5.863144 0.550256 -42.127159 +v -5.547756 0.550256 -42.175415 +v -5.547756 0.550256 -42.175415 +v -5.547756 0.550256 -42.175415 +v -5.796759 0.550256 -41.163994 +v -5.796759 0.550256 -41.163994 +v -5.796759 0.550256 -41.163994 +v -5.796759 0.550256 -41.163994 +v 2.171496 0.490513 -35.774952 +v 2.171496 0.490513 -35.774952 +v 2.171496 0.490513 -35.774952 +v 2.171496 0.490513 -35.774952 +v 3.705495 0.594680 -34.616779 +v 3.705495 0.594680 -34.616779 +v 3.705495 0.594680 -34.616779 +v 3.705495 0.594680 -34.616779 +v 2.767174 0.594680 -35.485195 +v 2.767174 0.594680 -35.485195 +v 2.767174 0.594680 -35.485195 +v 2.767174 0.594680 -35.485195 +v 4.215725 0.594680 -34.125313 +v 4.215725 0.594680 -34.125313 +v 4.215725 0.594680 -34.125313 +v 4.215725 0.594680 -34.125313 +v 5.542199 0.594680 -33.715790 +v 5.542199 0.594680 -33.715790 +v 5.542199 0.594680 -33.715790 +v 5.542199 0.594680 -33.715790 +v 4.865410 0.594680 -33.795055 +v 4.865410 0.594680 -33.795055 +v 4.865410 0.594680 -33.795055 +v 4.865410 0.594680 -33.795055 +v 6.234581 0.594680 -33.947327 +v 6.234581 0.594680 -33.947327 +v 6.234581 0.594680 -33.947327 +v 6.234581 0.594680 -33.947327 +v 16.002037 0.594680 -38.954575 +v 16.002037 0.594680 -38.954575 +v 16.002037 0.594680 -38.954575 +v 16.002037 0.594680 -38.954575 +v 7.355392 0.594680 -34.707794 +v 7.355392 0.594680 -34.707794 +v 7.355392 0.594680 -34.707794 +v 7.355392 0.594680 -34.707794 +v 1.363781 0.386347 -35.988255 +v 1.363781 0.386347 -35.988255 +v 1.363781 0.386347 -35.988255 +v 1.363781 0.386347 -35.988255 +v 3.261472 0.594680 -35.119064 +v 3.261472 0.594680 -35.119064 +v 3.261472 0.594680 -35.119064 +v 3.261472 0.594680 -35.119064 +v 1.894917 0.390687 -35.861889 +v 1.894917 0.390687 -35.861889 +v 1.894917 0.390687 -35.861889 +v 1.894917 0.390687 -35.861889 +v 2.530124 0.594680 -36.546780 +v 2.530124 0.594680 -36.546780 +v 2.530124 0.594680 -36.546780 +v 2.530124 0.594680 -36.546780 +v 2.355184 0.590340 -35.689308 +v 2.355184 0.590340 -35.689308 +v 2.355184 0.590340 -35.689308 +v 2.355184 0.590340 -35.689308 +v 2.074920 0.594680 -37.520393 +v 2.074920 0.594680 -37.520393 +v 2.074920 0.594680 -37.520393 +v 2.074920 0.594680 -37.520393 +v 1.001311 0.594680 -39.623322 +v 1.001311 0.594680 -39.623322 +v 1.001311 0.594680 -39.623322 +v 1.001311 0.594680 -39.623322 +v 0.287435 0.386347 -36.510792 +v 0.287435 0.386347 -36.510792 +v 0.287435 0.386347 -36.510792 +v 0.287435 0.386347 -36.510792 +v -0.368108 0.386347 -36.401798 +v -0.368108 0.386347 -36.401798 +v -0.368108 0.386347 -36.401798 +v -0.368108 0.386347 -36.401798 +v -1.961890 0.386347 -35.554630 +v -1.961890 0.386347 -35.554630 +v -1.961890 0.386347 -35.554630 +v -1.961890 0.386347 -35.554630 +v -1.102489 0.386347 -36.140034 +v -1.102489 0.386347 -36.140034 +v -1.102489 0.386347 -36.140034 +v -1.102489 0.386347 -36.140034 +v -2.721733 0.386347 -35.019615 +v -2.721733 0.386347 -35.019615 +v -2.721733 0.386347 -35.019615 +v -2.721733 0.386347 -35.019615 +v -3.699312 0.386347 -34.907761 +v -3.699312 0.386347 -34.907761 +v -3.699312 0.386347 -34.907761 +v -3.699312 0.386347 -34.907761 +v -3.230743 0.386347 -34.851669 +v -3.230743 0.386347 -34.851669 +v -3.230743 0.386347 -34.851669 +v -3.230743 0.386347 -34.851669 +v -4.122108 0.386347 -35.156506 +v -4.122108 0.386347 -35.156506 +v -4.122108 0.386347 -35.156506 +v -4.122108 0.386347 -35.156506 +v -4.556599 0.431843 -36.253601 +v -4.556599 0.431843 -36.253601 +v -4.556599 0.431843 -36.253601 +v -4.556599 0.431843 -36.253601 +v -4.405057 0.388242 -35.563046 +v -4.405057 0.388242 -35.563046 +v -4.405057 0.388242 -35.563046 +v -4.405057 0.388242 -35.563046 +v -5.450434 0.477339 -42.068642 +v -5.450434 0.477339 -42.068642 +v -5.450434 0.477339 -42.068642 +v -5.450434 0.477339 -42.068642 +v -5.019973 0.475444 -39.321865 +v -5.019973 0.475444 -39.321865 +v -5.019973 0.475444 -39.321865 +v -5.019973 0.475444 -39.321865 +v -5.513814 0.475444 -39.244545 +v -5.513814 0.475444 -39.244545 +v -5.513814 0.475444 -39.244545 +v -5.513814 0.475444 -39.244545 +v -5.924088 0.477339 -41.996170 +v -5.924088 0.477339 -41.996170 +v -5.924088 0.477339 -41.996170 +v -5.924088 0.477339 -41.996170 +v -5.038754 0.431843 -36.133385 +v -5.038754 0.431843 -36.133385 +v -5.038754 0.431843 -36.133385 +v -5.038754 0.431843 -36.133385 +v -4.822674 0.388242 -35.312962 +v -4.822674 0.388242 -35.312962 +v -4.822674 0.388242 -35.312962 +v -4.822674 0.388242 -35.312962 +v -4.440228 0.386347 -34.778461 +v -4.440228 0.386347 -34.778461 +v -4.440228 0.386347 -34.778461 +v -4.440228 0.386347 -34.778461 +v -3.888304 0.386347 -34.456509 +v -3.888304 0.386347 -34.456509 +v -3.888304 0.386347 -34.456509 +v -3.888304 0.386347 -34.456509 +v -2.533442 0.386347 -34.567249 +v -2.533442 0.386347 -34.567249 +v -2.533442 0.386347 -34.567249 +v -2.533442 0.386347 -34.567249 +v -3.229426 0.386347 -34.366806 +v -3.229426 0.386347 -34.366806 +v -3.229426 0.386347 -34.366806 +v -3.229426 0.386347 -34.366806 +v -1.734357 0.386347 -35.113064 +v -1.734357 0.386347 -35.113064 +v -1.734357 0.386347 -35.113064 +v -1.734357 0.386347 -35.113064 +v -0.946321 0.386347 -35.666737 +v -0.946321 0.386347 -35.666737 +v -0.946321 0.386347 -35.666737 +v -0.946321 0.386347 -35.666737 +v -0.281780 0.386347 -35.911289 +v -0.281780 0.386347 -35.911289 +v -0.281780 0.386347 -35.911289 +v -0.281780 0.386347 -35.911289 +v 0.312164 0.386347 -36.012150 +v 0.312164 0.386347 -36.012150 +v 0.312164 0.386347 -36.012150 +v 0.312164 0.386347 -36.012150 +v 15.947432 0.594680 -39.430618 +v 15.947432 0.594680 -39.430618 +v 15.947432 0.594680 -39.430618 +v 15.947432 0.594680 -39.430618 +v 0.605680 0.594680 -39.422977 +v 0.605680 0.594680 -39.422977 +v 0.605680 0.594680 -39.422977 +v 0.605680 0.594680 -39.422977 +v 0.785873 0.594680 -39.557949 +v 0.785873 0.594680 -39.557949 +v 0.785873 0.594680 -39.557949 +v 0.785873 0.594680 -39.557949 +v 1.662084 0.594680 -37.320045 +v 1.662084 0.594680 -37.320045 +v 1.662084 0.594680 -37.320045 +v 1.662084 0.594680 -37.320045 +v 2.103124 0.590340 -36.553703 +v 2.103124 0.590340 -36.553703 +v 2.103124 0.590340 -36.553703 +v 2.103124 0.590340 -36.553703 +v 1.987470 0.390687 -36.350006 +v 1.987470 0.390687 -36.350006 +v 1.987470 0.390687 -36.350006 +v 1.987470 0.390687 -36.350006 +v 3.619222 0.594680 -35.467033 +v 3.619222 0.594680 -35.467033 +v 3.619222 0.594680 -35.467033 +v 3.619222 0.594680 -35.467033 +v 1.396639 0.386347 -36.484035 +v 1.396639 0.386347 -36.484035 +v 1.396639 0.386347 -36.484035 +v 1.396639 0.386347 -36.484035 +v 7.065614 0.594680 -35.114170 +v 7.065614 0.594680 -35.114170 +v 7.065614 0.594680 -35.114170 +v 7.065614 0.594680 -35.114170 +v 6.038557 0.594680 -34.394455 +v 6.038557 0.594680 -34.394455 +v 6.038557 0.594680 -34.394455 +v 6.038557 0.594680 -34.394455 +v 5.498419 0.594680 -34.207924 +v 5.498419 0.594680 -34.207924 +v 5.498419 0.594680 -34.207924 +v 5.498419 0.594680 -34.207924 +v 4.956377 0.594680 -34.278732 +v 4.956377 0.594680 -34.278732 +v 4.956377 0.594680 -34.278732 +v 4.956377 0.594680 -34.278732 +v 4.062085 0.594680 -34.965633 +v 4.062085 0.594680 -34.965633 +v 4.062085 0.594680 -34.965633 +v 4.062085 0.594680 -34.965633 +v 4.473565 0.594680 -34.535664 +v 4.473565 0.594680 -34.535664 +v 4.473565 0.594680 -34.535664 +v 4.473565 0.594680 -34.535664 +v 3.054399 0.594680 -35.890713 +v 3.054399 0.594680 -35.890713 +v 3.054399 0.594680 -35.890713 +v 3.054399 0.594680 -35.890713 +v 2.280739 0.490513 -36.273811 +v 2.280739 0.490513 -36.273811 +v 2.280739 0.490513 -36.273811 +v 2.280739 0.490513 -36.273811 +v 0.832856 0.386347 -36.537384 +v 0.832856 0.386347 -36.537384 +v 0.832856 0.386347 -36.537384 +v 0.832856 0.386347 -36.537384 +v 0.832502 0.386347 -36.037598 +v 0.832502 0.386347 -36.037598 +v 0.832502 0.386347 -36.037598 +v 0.832502 0.386347 -36.037598 +v 1.356682 0.719680 -38.772163 +v 1.356682 0.719680 -38.772163 +v 1.356682 0.719680 -38.772163 +v 1.356682 0.719680 -38.772163 +v 0.671777 0.719680 -39.456448 +v 0.671777 0.719680 -39.456448 +v 0.671777 0.719680 -39.456448 +v 0.671777 0.719680 -39.456448 +v 1.081460 -0.030320 -38.632793 +v 1.081460 -0.030320 -38.632793 +v 1.081460 -0.030320 -38.632793 +v 1.081460 -0.030320 -38.632793 +v 0.935213 -0.030320 -39.589848 +v 0.935213 -0.030320 -39.589848 +v 0.935213 -0.030320 -39.589848 +v 0.935213 -0.030320 -39.589848 +v 1.425488 0.094680 -38.807003 +v 1.425488 0.094680 -38.807003 +v 1.425488 0.094680 -38.807003 +v 1.425488 0.094680 -38.807003 +v 1.012655 0.094680 -38.597954 +v 1.012655 0.094680 -38.597954 +v 1.012655 0.094680 -38.597954 +v 1.012655 0.094680 -38.597954 +v 1.425488 0.594680 -38.807003 +v 1.425488 0.594680 -38.807003 +v 1.425488 0.594680 -38.807003 +v 1.425488 0.594680 -38.807003 +v 1.012655 0.594680 -38.597954 +v 1.012655 0.594680 -38.597954 +v 1.012655 0.594680 -38.597954 +v 1.012655 0.594680 -38.597954 +v 1.124669 0.704055 -39.379715 +v 1.124669 0.704055 -39.379715 +v 1.124669 0.704055 -39.379715 +v 1.124669 0.704055 -39.379715 +v 0.729037 -0.014695 -39.179375 +v 0.729037 -0.014695 -39.179375 +v 0.729037 -0.014695 -39.179375 +v 0.729037 -0.014695 -39.179375 +v 1.124669 -0.014695 -39.379715 +v 1.124669 -0.014695 -39.379715 +v 1.124669 -0.014695 -39.379715 +v 1.124669 -0.014695 -39.379715 +v 0.729037 0.704055 -39.179375 +v 0.729037 0.704055 -39.179375 +v 0.729037 0.704055 -39.179375 +v 0.729037 0.704055 -39.179375 +v 0.926853 -0.030320 -39.279545 +v 0.926853 -0.030320 -39.279545 +v 0.926853 -0.030320 -39.279545 +v 0.926853 -0.030320 -39.279545 +v 0.926853 0.719680 -39.279545 +v 0.926853 0.719680 -39.279545 +v 0.926853 0.719680 -39.279545 +v 0.926853 0.719680 -39.279545 +v 11.313932 -0.030320 -37.268032 +v 11.313932 -0.030320 -37.268032 +v 11.313932 -0.030320 -37.268032 +v 11.313932 -0.030320 -37.268032 +v 11.178569 0.719680 -37.572643 +v 11.178569 0.719680 -37.572643 +v 11.178569 0.719680 -37.572643 +v 11.178569 0.719680 -37.572643 +v 15.956554 -0.030320 -39.351086 +v 15.956554 -0.030320 -39.351086 +v 15.956554 -0.030320 -39.351086 +v 15.956554 -0.030320 -39.351086 +v 11.144728 0.094680 -37.648796 +v 11.144728 0.094680 -37.648796 +v 11.144728 0.094680 -37.648796 +v 11.144728 0.094680 -37.648796 +v 11.347774 0.094680 -37.191879 +v 11.347774 0.094680 -37.191879 +v 11.347774 0.094680 -37.191879 +v 11.347774 0.094680 -37.191879 +v 11.347774 0.594680 -37.191879 +v 11.347774 0.594680 -37.191879 +v 11.347774 0.594680 -37.191879 +v 11.347774 0.594680 -37.191879 +v 11.144728 0.594680 -37.648796 +v 11.144728 0.594680 -37.648796 +v 11.144728 0.594680 -37.648796 +v 11.144728 0.594680 -37.648796 +v 13.791707 0.704055 -38.289326 +v 13.791707 0.704055 -38.289326 +v 13.791707 0.704055 -38.289326 +v 13.791707 0.704055 -38.289326 +v 13.597122 -0.014695 -38.727203 +v 13.597122 -0.014695 -38.727203 +v 13.597122 -0.014695 -38.727203 +v 13.597122 -0.014695 -38.727203 +v 13.597122 0.704055 -38.727203 +v 13.597122 0.704055 -38.727203 +v 13.597122 0.704055 -38.727203 +v 13.597122 0.704055 -38.727203 +v 13.791707 -0.014695 -38.289322 +v 13.791707 -0.014695 -38.289322 +v 13.791707 -0.014695 -38.289322 +v 13.791707 -0.014695 -38.289322 +v 2.174121 -0.017299 -35.785015 +v 2.174121 -0.017299 -35.785015 +v 2.174121 -0.017299 -35.785015 +v 2.174121 -0.017299 -35.785015 +v 0.832509 0.459263 -36.048008 +v 0.832509 0.459263 -36.048008 +v 0.832509 0.459263 -36.048008 +v 0.832509 0.459263 -36.048008 +v 0.832849 0.459263 -36.526970 +v 0.832849 0.459263 -36.526970 +v 0.832849 0.459263 -36.526970 +v 0.832849 0.459263 -36.526970 +v 2.279715 0.581972 -36.263302 +v 2.279715 0.581972 -36.263302 +v 2.279715 0.581972 -36.263302 +v 2.279715 0.581972 -36.263302 +v 3.712924 -0.014695 -34.624046 +v 3.712924 -0.014695 -34.624046 +v 3.712924 -0.014695 -34.624046 +v 3.712924 -0.014695 -34.624046 +v 2.773149 -0.014695 -35.493313 +v 2.773149 -0.014695 -35.493313 +v 2.773149 -0.014695 -35.493313 +v 2.773149 -0.014695 -35.493313 +v 3.047452 0.704055 -35.882679 +v 3.047452 0.704055 -35.882679 +v 3.047452 0.704055 -35.882679 +v 3.047452 0.704055 -35.882679 +v 4.468194 0.704055 -34.527115 +v 4.468194 0.704055 -34.527115 +v 4.468194 0.704055 -34.527115 +v 4.468194 0.704055 -34.527115 +v 4.054655 0.704055 -34.958366 +v 4.054655 0.704055 -34.958366 +v 4.054655 0.704055 -34.958366 +v 4.054655 0.704055 -34.958366 +v 4.221097 -0.014695 -34.133862 +v 4.221097 -0.014695 -34.133862 +v 4.221097 -0.014695 -34.133862 +v 4.221097 -0.014695 -34.133862 +v 5.541287 -0.014695 -33.726044 +v 5.541287 -0.014695 -33.726044 +v 5.541287 -0.014695 -33.726044 +v 5.541287 -0.014695 -33.726044 +v 4.867305 -0.014695 -33.805130 +v 4.867305 -0.014695 -33.805130 +v 4.867305 -0.014695 -33.805130 +v 4.867305 -0.014695 -33.805130 +v 4.954482 0.704055 -34.268654 +v 4.954482 0.704055 -34.268654 +v 4.954482 0.704055 -34.268654 +v 4.954482 0.704055 -34.268654 +v 5.499331 0.704055 -34.197670 +v 5.499331 0.704055 -34.197670 +v 5.499331 0.704055 -34.197670 +v 5.499331 0.704055 -34.197670 +v 6.230497 -0.014695 -33.956642 +v 6.230497 -0.014695 -33.956642 +v 6.230497 -0.014695 -33.956642 +v 6.230497 -0.014695 -33.956642 +v 6.042642 0.704055 -34.385139 +v 6.042642 0.704055 -34.385139 +v 6.042642 0.704055 -34.385139 +v 6.042642 0.704055 -34.385139 +v 16.000896 -0.014695 -38.964539 +v 16.000896 -0.014695 -38.964539 +v 16.000896 -0.014695 -38.964539 +v 16.000896 -0.014695 -38.964539 +v 7.349356 -0.014695 -34.716259 +v 7.349356 -0.014695 -34.716259 +v 7.349356 -0.014695 -34.716259 +v 7.349356 -0.014695 -34.716259 +v 7.071651 0.704055 -35.105705 +v 7.071651 0.704055 -35.105705 +v 7.071651 0.704055 -35.105705 +v 7.071651 0.704055 -35.105705 +v 1.395955 0.459263 -36.473705 +v 1.395955 0.459263 -36.473705 +v 1.395955 0.459263 -36.473705 +v 1.395955 0.459263 -36.473705 +v 1.364466 -0.019903 -35.998581 +v 1.364466 -0.019903 -35.998581 +v 1.364466 -0.019903 -35.998581 +v 1.364466 -0.019903 -35.998581 +v 3.611769 0.704055 -35.459782 +v 3.611769 0.704055 -35.459782 +v 3.611769 0.704055 -35.459782 +v 3.611769 0.704055 -35.459782 +v 3.268925 -0.014695 -35.126316 +v 3.268925 -0.014695 -35.126316 +v 3.268925 -0.014695 -35.126316 +v 3.268925 -0.014695 -35.126316 +v 1.985542 0.464363 -36.339836 +v 1.985542 0.464363 -36.339836 +v 1.985542 0.464363 -36.339836 +v 1.985542 0.464363 -36.339836 +v 1.896845 -0.019795 -35.872059 +v 1.896845 -0.019795 -35.872059 +v 1.896845 -0.019795 -35.872059 +v 1.896845 -0.019795 -35.872059 +v 2.521207 -0.014695 -36.544834 +v 2.521207 -0.014695 -36.544834 +v 2.521207 -0.014695 -36.544834 +v 2.521207 -0.014695 -36.544834 +v 2.358818 -0.014804 -35.698799 +v 2.358818 -0.014804 -35.698799 +v 2.358818 -0.014804 -35.698799 +v 2.358818 -0.014804 -35.698799 +v 2.066319 -0.014695 -37.516216 +v 2.066319 -0.014695 -37.516216 +v 2.066319 -0.014695 -37.516216 +v 2.066319 -0.014695 -37.516216 +v 2.309159 0.719124 -36.542664 +v 2.309159 0.719124 -36.542664 +v 2.309159 0.719124 -36.542664 +v 2.309159 0.719124 -36.542664 +v 2.309159 -0.030320 -36.542664 +v 2.309159 -0.030320 -36.542664 +v 2.309159 -0.030320 -36.542664 +v 2.111417 0.699268 -36.552143 +v 2.111417 0.699268 -36.552143 +v 2.111417 0.699268 -36.552143 +v 2.111417 0.699268 -36.552143 +v 0.803495 0.719680 -39.523148 +v 0.803495 0.719680 -39.523148 +v 0.803495 0.719680 -39.523148 +v 0.803495 0.719680 -39.523148 +v 1.868502 0.719680 -37.420219 +v 1.868502 0.719680 -37.420219 +v 1.868502 0.719680 -37.420219 +v 1.868502 0.719680 -37.420219 +v 1.868502 -0.030320 -37.420219 +v 1.868502 -0.030320 -37.420219 +v 1.868502 -0.030320 -37.420219 +v 1.868502 -0.030320 -37.420219 +v 1.670685 0.704055 -37.324219 +v 1.670685 0.704055 -37.324219 +v 1.670685 0.704055 -37.324219 +v 1.670685 0.704055 -37.324219 +v 0.785873 0.704055 -39.557949 +v 0.785873 0.704055 -39.557949 +v 0.785873 0.704055 -39.557949 +v 0.785873 0.704055 -39.557949 +v 0.803495 -0.030320 -39.523148 +v 0.803495 -0.030320 -39.523148 +v 0.803495 -0.030320 -39.523148 +v 0.803495 -0.030320 -39.523148 +v 0.613962 0.704055 -39.427174 +v 0.613962 0.704055 -39.427174 +v 0.613962 0.704055 -39.427174 +v 0.613962 0.704055 -39.427174 +v 0.993029 -0.014695 -39.619125 +v 0.993029 -0.014695 -39.619125 +v 0.993029 -0.014695 -39.619125 +v 0.993029 -0.014695 -39.619125 +v 15.948574 0.704055 -39.420654 +v 15.948574 0.704055 -39.420654 +v 15.948574 0.704055 -39.420654 +v 15.948574 0.704055 -39.420654 +v 0.311649 0.459263 -36.022537 +v 0.311649 0.459263 -36.022537 +v 0.311649 0.459263 -36.022537 +v 0.311649 0.459263 -36.022537 +v 0.287950 -0.019903 -36.500404 +v 0.287950 -0.019903 -36.500404 +v 0.287950 -0.019903 -36.500404 +v 0.287950 -0.019903 -36.500404 +v -0.283579 0.459263 -35.921509 +v -0.283579 0.459263 -35.921509 +v -0.283579 0.459263 -35.921509 +v -0.283579 0.459263 -35.921509 +v -0.366309 -0.019903 -36.391579 +v -0.366309 -0.019903 -36.391579 +v -0.366309 -0.019903 -36.391579 +v -0.366309 -0.019903 -36.391579 +v -1.957149 -0.019903 -35.545429 +v -1.957149 -0.019903 -35.545429 +v -1.957149 -0.019903 -35.545429 +v -1.957149 -0.019903 -35.545429 +v -0.949574 0.459263 -35.676598 +v -0.949574 0.459263 -35.676598 +v -0.949574 0.459263 -35.676598 +v -0.949574 0.459263 -35.676598 +v -1.099236 -0.019903 -36.130173 +v -1.099236 -0.019903 -36.130173 +v -1.099236 -0.019903 -36.130173 +v -1.099236 -0.019903 -36.130173 +v -1.739098 0.459263 -35.122261 +v -1.739098 0.459263 -35.122261 +v -1.739098 0.459263 -35.122261 +v -1.739098 0.459263 -35.122261 +v -3.229454 0.459263 -34.376907 +v -3.229454 0.459263 -34.376907 +v -3.229454 0.459263 -34.376907 +v -3.229454 0.459263 -34.376907 +v -2.537364 0.459263 -34.576672 +v -2.537364 0.459263 -34.576672 +v -2.537364 0.459263 -34.576672 +v -2.717810 -0.019903 -35.010193 +v -2.717810 -0.019903 -35.010193 +v -2.717810 -0.019903 -35.010193 +v -2.717810 -0.019903 -35.010193 +v -3.703250 -0.019903 -34.898361 +v -3.703250 -0.019903 -34.898361 +v -3.703250 -0.019903 -34.898361 +v -3.703250 -0.019903 -34.898361 +v -3.230716 -0.019903 -34.841568 +v -3.230716 -0.019903 -34.841568 +v -3.230716 -0.019903 -34.841568 +v -3.230716 -0.019903 -34.841568 +v -3.884367 0.459263 -34.465912 +v -3.884367 0.459263 -34.465912 +v -3.884367 0.459263 -34.465912 +v -3.884367 0.459263 -34.465912 +v -4.433600 0.459263 -34.786339 +v -4.433600 0.459263 -34.786339 +v -4.433600 0.459263 -34.786339 +v -4.433600 0.459263 -34.786339 +v -4.128736 -0.019903 -35.148632 +v -4.128736 -0.019903 -35.148632 +v -4.128736 -0.019903 -35.148632 +v -4.128736 -0.019903 -35.148632 +v -4.566643 0.025593 -36.251095 +v -4.566643 0.025593 -36.251095 +v -4.566643 0.025593 -36.251095 +v -4.566643 0.025593 -36.251095 +v -4.813972 0.461159 -35.318172 +v -4.813972 0.461159 -35.318172 +v -4.813972 0.461159 -35.318172 +v -4.813972 0.461159 -35.318172 +v -4.413758 -0.018008 -35.557835 +v -4.413758 -0.018008 -35.557835 +v -4.413758 -0.018008 -35.557835 +v -4.413758 -0.018008 -35.557835 +v -5.028708 0.504760 -36.135887 +v -5.028708 0.504760 -36.135887 +v -5.028708 0.504760 -36.135887 +v -5.028708 0.504760 -36.135887 +v -5.914173 0.550256 -41.997688 +v -5.914173 0.550256 -41.997688 +v -5.914173 0.550256 -41.997688 +v -5.914173 0.550256 -41.997688 +v -5.460349 0.071089 -42.067123 +v -5.460349 0.071089 -42.067123 +v -5.460349 0.071089 -42.067123 +v -5.460349 0.071089 -42.067123 +v -5.030261 0.069194 -39.320255 +v -5.030261 0.069194 -39.320255 +v -5.030261 0.069194 -39.320255 +v -5.030261 0.069194 -39.320255 +v -5.503526 0.548360 -39.246155 +v -5.503526 0.548360 -39.246155 +v -5.503526 0.548360 -39.246155 +v -5.503526 0.548360 -39.246155 +v -5.503526 0.069194 -39.246155 +v -5.503526 0.069194 -39.246155 +v -5.503526 0.069194 -39.246155 +v -5.503526 0.069194 -39.246155 +v -5.914172 0.071089 -41.997688 +v -5.914172 0.071089 -41.997688 +v -5.914172 0.071089 -41.997688 +v -5.914172 0.071089 -41.997688 +v -5.028708 0.025593 -36.135887 +v -5.028708 0.025593 -36.135887 +v -5.028708 0.025593 -36.135887 +v -5.028708 0.025593 -36.135887 +v -4.813973 -0.018008 -35.318172 +v -4.813973 -0.018008 -35.318172 +v -4.813973 -0.018008 -35.318172 +v -4.813973 -0.018008 -35.318172 +v -4.433600 -0.019903 -34.786339 +v -4.433600 -0.019903 -34.786339 +v -4.433600 -0.019903 -34.786339 +v -4.433600 -0.019903 -34.786339 +v -3.884367 -0.019903 -34.465912 +v -3.884367 -0.019903 -34.465912 +v -3.884367 -0.019903 -34.465912 +v -3.884367 -0.019903 -34.465912 +v -2.537364 -0.019903 -34.576672 +v -2.537364 -0.019903 -34.576672 +v -2.537364 -0.019903 -34.576672 +v -2.537364 -0.019903 -34.576672 +v -3.229453 -0.019903 -34.376907 +v -3.229453 -0.019903 -34.376907 +v -3.229453 -0.019903 -34.376907 +v -3.229453 -0.019903 -34.376907 +v -1.739098 -0.019903 -35.122261 +v -1.739098 -0.019903 -35.122261 +v -1.739098 -0.019903 -35.122261 +v -1.739098 -0.019903 -35.122261 +v -0.949574 -0.019903 -35.676598 +v -0.949574 -0.019903 -35.676598 +v -0.949574 -0.019903 -35.676598 +v -0.949574 -0.019903 -35.676598 +v -0.283579 -0.019903 -35.921509 +v -0.283579 -0.019903 -35.921509 +v -0.283579 -0.019903 -35.921509 +v -0.283579 -0.019903 -35.921509 +v 0.311649 -0.019903 -36.022537 +v 0.311649 -0.019903 -36.022537 +v 0.311649 -0.019903 -36.022537 +v 0.311649 -0.019903 -36.022537 +v 15.948574 -0.014695 -39.420654 +v 15.948574 -0.014695 -39.420654 +v 15.948574 -0.014695 -39.420654 +v 15.948574 -0.014695 -39.420654 +v 0.613962 -0.014695 -39.427174 +v 0.613962 -0.014695 -39.427174 +v 0.613962 -0.014695 -39.427174 +v 0.613962 -0.014695 -39.427174 +v 0.785873 -0.014695 -39.557949 +v 0.785873 -0.014695 -39.557949 +v 0.785873 -0.014695 -39.557949 +v 0.785873 -0.014695 -39.557949 +v 1.670685 -0.014695 -37.324219 +v 1.670685 -0.014695 -37.324219 +v 1.670685 -0.014695 -37.324219 +v 1.670685 -0.014695 -37.324219 +v 2.111417 -0.014804 -36.552143 +v 2.111417 -0.014804 -36.552143 +v 2.111417 -0.014804 -36.552143 +v 2.111417 -0.014804 -36.552143 +v 1.985542 -0.019795 -36.339836 +v 1.985542 -0.019795 -36.339836 +v 1.985542 -0.019795 -36.339836 +v 1.985542 -0.019795 -36.339836 +v 3.611769 -0.014695 -35.459782 +v 3.611769 -0.014695 -35.459782 +v 3.611769 -0.014695 -35.459782 +v 3.611769 -0.014695 -35.459782 +v 1.395955 -0.019903 -36.473705 +v 1.395955 -0.019903 -36.473705 +v 1.395955 -0.019903 -36.473705 +v 1.395955 -0.019903 -36.473705 +v 7.071651 -0.014695 -35.105705 +v 7.071651 -0.014695 -35.105705 +v 7.071651 -0.014695 -35.105705 +v 7.071651 -0.014695 -35.105705 +v 6.042641 -0.014695 -34.385139 +v 6.042641 -0.014695 -34.385139 +v 6.042641 -0.014695 -34.385139 +v 6.042641 -0.014695 -34.385139 +v 5.499331 -0.014695 -34.197670 +v 5.499331 -0.014695 -34.197670 +v 5.499331 -0.014695 -34.197670 +v 5.499331 -0.014695 -34.197670 +v 4.954481 -0.014695 -34.268654 +v 4.954481 -0.014695 -34.268654 +v 4.954481 -0.014695 -34.268654 +v 4.954481 -0.014695 -34.268654 +v 4.054656 -0.014695 -34.958366 +v 4.054656 -0.014695 -34.958366 +v 4.054656 -0.014695 -34.958366 +v 4.054656 -0.014695 -34.958366 +v 4.468194 -0.014695 -34.527115 +v 4.468194 -0.014695 -34.527115 +v 4.468194 -0.014695 -34.527115 +v 4.468194 -0.014695 -34.527115 +v 3.047452 -0.014695 -35.882679 +v 3.047452 -0.014695 -35.882679 +v 3.047452 -0.014695 -35.882679 +v 3.047452 -0.014695 -35.882679 +v 2.279715 -0.017299 -36.263302 +v 2.279715 -0.017299 -36.263302 +v 2.279715 -0.017299 -36.263302 +v 2.279715 -0.017299 -36.263302 +v 0.832849 -0.019903 -36.526970 +v 0.832849 -0.019903 -36.526970 +v 0.832849 -0.019903 -36.526970 +v 0.832849 -0.019903 -36.526970 +v 0.832509 -0.019903 -36.048008 +v 0.832509 -0.019903 -36.048008 +v 0.832509 -0.019903 -36.048008 +v 0.832509 -0.019903 -36.048008 +v 2.174121 0.581659 -35.785015 +v 2.174121 0.581659 -35.785015 +v 2.174121 0.581659 -35.785015 +v 2.174121 0.581659 -35.785015 +v 3.712924 0.704055 -34.624046 +v 3.712924 0.704055 -34.624046 +v 3.712924 0.704055 -34.624046 +v 3.712924 0.704055 -34.624046 +v 2.773149 0.704055 -35.493313 +v 2.773149 0.704055 -35.493313 +v 2.773149 0.704055 -35.493313 +v 2.773149 0.704055 -35.493313 +v 4.221097 0.704055 -34.133862 +v 4.221097 0.704055 -34.133862 +v 4.221097 0.704055 -34.133862 +v 4.221097 0.704055 -34.133862 +v 5.541286 0.704055 -33.726044 +v 5.541286 0.704055 -33.726044 +v 5.541286 0.704055 -33.726044 +v 5.541286 0.704055 -33.726044 +v 4.867305 0.704055 -33.805130 +v 4.867305 0.704055 -33.805130 +v 4.867305 0.704055 -33.805130 +v 4.867305 0.704055 -33.805130 +v 6.230497 0.704055 -33.956642 +v 6.230497 0.704055 -33.956642 +v 6.230497 0.704055 -33.956642 +v 6.230497 0.704055 -33.956642 +v 16.000896 0.704055 -38.964539 +v 16.000896 0.704055 -38.964539 +v 16.000896 0.704055 -38.964539 +v 16.000896 0.704055 -38.964539 +v 7.349355 0.704055 -34.716259 +v 7.349355 0.704055 -34.716259 +v 7.349355 0.704055 -34.716259 +v 7.349355 0.704055 -34.716259 +v 1.364466 0.459263 -35.998581 +v 1.364466 0.459263 -35.998581 +v 1.364466 0.459263 -35.998581 +v 1.364466 0.459263 -35.998581 +v 3.268925 0.704055 -35.126316 +v 3.268925 0.704055 -35.126316 +v 3.268925 0.704055 -35.126316 +v 3.268925 0.704055 -35.126316 +v 1.896845 0.464363 -35.872059 +v 1.896845 0.464363 -35.872059 +v 1.896845 0.464363 -35.872059 +v 1.896845 0.464363 -35.872059 +v 2.521207 0.704055 -36.544834 +v 2.521207 0.704055 -36.544834 +v 2.521207 0.704055 -36.544834 +v 2.521207 0.704055 -36.544834 +v 2.358818 0.698955 -35.698799 +v 2.358818 0.698955 -35.698799 +v 2.358818 0.698955 -35.698799 +v 2.358818 0.698955 -35.698799 +v 2.066319 0.704055 -37.516216 +v 2.066319 0.704055 -37.516216 +v 2.066319 0.704055 -37.516216 +v 2.066319 0.704055 -37.516216 +v 0.993029 0.704055 -39.619125 +v 0.993029 0.704055 -39.619125 +v 0.993029 0.704055 -39.619125 +v 0.993029 0.704055 -39.619125 +v 0.287950 0.459263 -36.500404 +v 0.287950 0.459263 -36.500404 +v 0.287950 0.459263 -36.500404 +v 0.287950 0.459263 -36.500404 +v -0.366309 0.459263 -36.391579 +v -0.366309 0.459263 -36.391579 +v -0.366309 0.459263 -36.391579 +v -0.366309 0.459263 -36.391579 +v -1.957149 0.459263 -35.545429 +v -1.957149 0.459263 -35.545429 +v -1.957149 0.459263 -35.545429 +v -1.957149 0.459263 -35.545429 +v -1.099236 0.459263 -36.130173 +v -1.099236 0.459263 -36.130173 +v -1.099236 0.459263 -36.130173 +v -1.099236 0.459263 -36.130173 +v -2.717810 0.459263 -35.010193 +v -2.717810 0.459263 -35.010193 +v -2.717810 0.459263 -35.010193 +v -3.703250 0.459263 -34.898361 +v -3.703250 0.459263 -34.898361 +v -3.703250 0.459263 -34.898361 +v -3.703250 0.459263 -34.898361 +v -3.230716 0.459263 -34.841568 +v -3.230716 0.459263 -34.841568 +v -3.230716 0.459263 -34.841568 +v -3.230716 0.459263 -34.841568 +v -4.128736 0.459263 -35.148632 +v -4.128736 0.459263 -35.148632 +v -4.128736 0.459263 -35.148632 +v -4.128736 0.459263 -35.148632 +v -4.566644 0.504760 -36.251095 +v -4.566644 0.504760 -36.251095 +v -4.566644 0.504760 -36.251095 +v -4.566644 0.504760 -36.251095 +v -4.413758 0.461159 -35.557835 +v -4.413758 0.461159 -35.557835 +v -4.413758 0.461159 -35.557835 +v -4.413758 0.461159 -35.557835 +v -5.460349 0.550256 -42.067123 +v -5.460349 0.550256 -42.067123 +v -5.460349 0.550256 -42.067123 +v -5.460349 0.550256 -42.067123 +v -5.030261 0.548360 -39.320255 +v -5.030261 0.548360 -39.320255 +v -5.030261 0.548360 -39.320255 +v -5.030261 0.548360 -39.320255 +v 1.416887 0.704055 -38.802650 +v 1.416887 0.704055 -38.802650 +v 1.416887 0.704055 -38.802650 +v 1.416887 0.704055 -38.802650 +v 1.021255 -0.014695 -38.602306 +v 1.021255 -0.014695 -38.602306 +v 1.021255 -0.014695 -38.602306 +v 1.021255 -0.014695 -38.602306 +v 1.416887 -0.014695 -38.802650 +v 1.416887 -0.014695 -38.802650 +v 1.416887 -0.014695 -38.802650 +v 1.416887 -0.014695 -38.802650 +v 1.021255 0.704055 -38.602306 +v 1.021255 0.704055 -38.602306 +v 1.021255 0.704055 -38.602306 +v 1.021255 0.704055 -38.602306 +v 1.219071 -0.030320 -38.702477 +v 1.219071 -0.030320 -38.702477 +v 1.219071 -0.030320 -38.702477 +v 1.219071 -0.030320 -38.702477 +v 1.219071 0.719680 -38.702477 +v 1.219071 0.719680 -38.702477 +v 1.219071 0.719680 -38.702477 +v 1.219071 0.719680 -38.702477 +v 11.343544 0.704055 -37.201397 +v 11.343544 0.704055 -37.201397 +v 11.343544 0.704055 -37.201397 +v 11.343544 0.704055 -37.201397 +v 11.148959 -0.014695 -37.639278 +v 11.148959 -0.014695 -37.639278 +v 11.148959 -0.014695 -37.639278 +v 11.148959 -0.014695 -37.639278 +v 11.148959 0.704055 -37.639278 +v 11.148959 0.704055 -37.639278 +v 11.148959 0.704055 -37.639278 +v 11.148959 0.704055 -37.639278 +v 11.343545 -0.014695 -37.201397 +v 11.343545 -0.014695 -37.201397 +v 11.343545 -0.014695 -37.201397 +v 11.343545 -0.014695 -37.201397 +vn -0.6009 -0.2421 1.8922 +vn -0.6008 -0.2421 1.8922 +vn -0.6010 -0.2423 1.8921 +vn -0.0851 -1.9726 0.3185 +vn -0.0851 -1.9727 0.3184 +vn -0.0851 -1.9727 0.3185 +vn -0.1303 -1.9641 0.3541 +vn -0.1303 -1.9641 0.3542 +vn -0.1302 -1.9640 0.3544 +vn -0.1303 -1.9641 0.3543 +vn -0.7803 -0.2101 1.8295 +vn -0.7804 -0.2101 1.8295 +vn -0.1007 0.2821 1.9774 +vn -0.1008 0.2820 1.9774 +vn -0.1007 0.2823 1.9774 +vn -0.1007 0.2824 1.9774 +vn -0.0406 1.9987 0.0588 +vn -0.0405 1.9987 0.0590 +vn -0.0406 1.9987 0.0589 +vn 0.0418 0.2827 1.9795 +vn -0.0000 -2.0000 -0.0000 +vn -0.0416 0.2827 -1.9795 +vn 0.1051 0.2823 -1.9772 +vn 0.1052 0.2820 -1.9772 +vn -0.0000 2.0000 -0.0000 +vn -0.0427 1.9985 0.0658 +vn -0.0430 1.9985 0.0659 +vn -0.0424 1.9985 0.0658 +vn -0.0423 1.9985 0.0658 +vn -1.3179 1.4740 -0.3004 +vn -1.3179 1.4741 -0.3004 +vn 0.1509 0.2426 -1.9795 +vn 0.1510 0.2425 -1.9795 +vn -1.8233 -0.0448 0.8207 +vn -1.8234 -0.0448 0.8206 +vn -1.8233 -0.0448 0.8206 +vn -1.5308 -0.1891 1.2731 +vn -1.5308 -0.1892 1.2731 +vn -0.3232 -1.9554 0.2684 +vn -0.3239 -1.9551 0.2694 +vn -0.3147 -1.9545 0.2842 +vn -0.3148 -1.9545 0.2843 +vn -1.4749 -0.1875 1.3377 +vn -1.4749 -0.1874 1.3377 +vn -1.4749 -0.1873 1.3378 +vn -0.0592 1.9985 0.0493 +vn -0.0596 1.9985 0.0492 +vn -0.8993 -0.1822 1.7771 +vn -0.8992 -0.1821 1.7771 +vn -0.8993 -0.1823 1.7771 +vn -0.1974 -1.9520 0.3884 +vn -0.1974 -1.9519 0.3887 +vn -0.1977 -1.9516 0.3902 +vn -0.1975 -1.9518 0.3892 +vn -0.2305 -1.9526 0.3665 +vn -0.2304 -1.9526 0.3662 +vn -1.0611 -0.1830 1.6854 +vn -1.0613 -0.1837 1.6852 +vn 1.3426 0.2011 -1.4687 +vn 1.3426 0.2010 -1.4687 +vn 0.2370 1.9669 -0.2744 +vn 0.2370 1.9668 -0.2745 +vn 0.2341 1.9552 -0.3500 +vn 0.2340 1.9552 -0.3499 +vn 1.1151 0.1883 -1.6496 +vn 1.1150 0.1884 -1.6496 +vn 1.1150 0.1885 -1.6496 +vn 1.3515 0.1837 -1.4628 +vn 0.2917 1.9528 -0.3186 +vn 0.2917 1.9528 -0.3185 +vn 0.2372 1.9520 -0.3653 +vn 0.2371 1.9520 -0.3653 +vn 1.0892 0.1819 -1.6675 +vn 1.0892 0.1820 -1.6675 +vn 1.0892 0.1821 -1.6675 +vn 1.5364 0.1891 -1.2664 +vn 1.5365 0.1885 -1.2663 +vn 0.3249 1.9552 -0.2679 +vn 0.3244 1.9553 -0.2676 +vn 0.3221 1.9543 -0.2772 +vn 0.3220 1.9544 -0.2771 +vn 0.3219 1.9544 -0.2771 +vn 1.5126 0.1871 -1.2950 +vn 1.5126 0.1870 -1.2950 +vn 1.5127 0.1869 -1.2949 +vn 1.5127 0.1867 -1.2949 +vn -0.0585 1.9985 0.0516 +vn -0.0582 1.9985 0.0517 +vn -0.0296 1.9984 0.0731 +vn -0.0309 1.9984 0.0736 +vn -0.0162 1.9985 0.0764 +vn -0.0165 1.9985 0.0766 +vn -0.0524 1.9984 0.0596 +vn -0.0523 1.9984 0.0596 +vn -0.0520 1.9984 0.0596 +vn -0.0424 1.9984 0.0675 +vn -0.0427 1.9984 0.0676 +vn -1.2887 -0.1845 1.5183 +vn -1.2886 -0.1842 1.5184 +vn -1.2886 -0.1841 1.5184 +vn -1.2887 -0.1844 1.5183 +vn -0.2797 -1.9530 0.3277 +vn -0.2796 -1.9531 0.3276 +vn -0.2796 -1.9531 0.3275 +vn -0.2295 -1.9522 0.3694 +vn -0.2294 -1.9522 0.3693 +vn -0.2294 -1.9522 0.3692 +vn -0.2294 -1.9522 0.3691 +vn -1.0487 -0.1834 1.6931 +vn -1.0486 -0.1827 1.6933 +vn -1.0484 -0.1818 1.6935 +vn -1.0485 -0.1826 1.6933 +vn -0.0450 -0.1873 1.9907 +vn -0.0448 -0.1869 1.9907 +vn -0.0099 -1.9543 0.4251 +vn -0.0099 -1.9543 0.4250 +vn -0.0099 -1.9543 0.4252 +vn 0.0854 -1.9540 0.4178 +vn 0.0853 -1.9540 0.4178 +vn 0.3992 -0.1862 1.9509 +vn 0.3993 -0.1859 1.9509 +vn 0.0333 1.9984 0.0726 +vn 0.0336 1.9984 0.0719 +vn -0.7459 -0.1841 1.8466 +vn -0.7458 -0.1840 1.8466 +vn -0.1621 -1.9528 0.4002 +vn -0.1620 -1.9529 0.3999 +vn -0.1621 -1.9529 0.4000 +vn -0.1621 -1.9529 0.4001 +vn -0.0889 -1.9538 0.4182 +vn -0.0889 -1.9537 0.4184 +vn -0.0889 -1.9537 0.4183 +vn -0.4116 -0.1856 1.9484 +vn -0.4115 -0.1853 1.9484 +vn -0.4115 -0.1852 1.9484 +vn -0.4117 -0.1858 1.9483 +vn 0.7758 0.1835 -1.8343 +vn 0.7757 0.1836 -1.8343 +vn 0.1677 1.9527 -0.3985 +vn 0.1677 1.9527 -0.3984 +vn 0.1676 1.9527 -0.3983 +vn 0.0947 1.9536 -0.4175 +vn 0.0946 1.9537 -0.4174 +vn 0.0946 1.9537 -0.4173 +vn 0.0947 1.9536 -0.4176 +vn 0.4439 0.1854 -1.9413 +vn 0.4438 0.1856 -1.9413 +vn 0.4439 0.1855 -1.9413 +vn 0.0428 1.9984 0.0665 +vn 0.0429 1.9985 0.0658 +vn -0.0018 1.9985 0.0778 +vn -0.0024 1.9985 0.0783 +vn 0.0652 0.1874 -1.9901 +vn 0.0657 0.1860 -1.9902 +vn 0.0134 1.9543 -0.4248 +vn 0.0135 1.9542 -0.4252 +vn 0.0136 1.9542 -0.4252 +vn 0.0136 1.9542 -0.4254 +vn -0.0846 1.9540 -0.4179 +vn -0.0846 1.9539 -0.4186 +vn -0.3943 0.1863 -1.9519 +vn -0.3941 0.1859 -1.9519 +vn 0.0157 1.9985 0.0767 +vn 0.0156 1.9985 0.0768 +vn 0.0449 1.9985 0.0630 +vn 0.0449 1.9985 0.0633 +vn 0.0452 1.9985 0.0624 +vn 0.0451 1.9985 0.0622 +vn 0.8290 -0.1844 1.8107 +vn 0.8291 -0.1839 1.8107 +vn 0.8291 -0.1841 1.8107 +vn 0.1803 -1.9529 0.3922 +vn 0.1804 -1.9528 0.3923 +vn 0.2306 -1.9535 0.3614 +vn 0.2307 -1.9535 0.3614 +vn 0.2307 -1.9535 0.3615 +vn 1.0683 -0.1849 1.6806 +vn 1.0683 -0.1851 1.6806 +vn 1.0683 -0.1852 1.6806 +vn -0.8682 0.1836 -1.7924 +vn -0.8681 0.1834 -1.7924 +vn -0.8681 0.1833 -1.7924 +vn -0.1877 1.9526 -0.3899 +vn -0.1877 1.9527 -0.3898 +vn -0.1876 1.9527 -0.3896 +vn -0.2386 1.9533 -0.3573 +vn -0.2385 1.9533 -0.3573 +vn -0.2385 1.9533 -0.3572 +vn -1.1097 0.1847 -1.6536 +vn -1.1097 0.1850 -1.6536 +vn -1.1097 0.1848 -1.6536 +vn 0.5823 -0.1839 1.9045 +vn 0.5823 -0.1840 1.9045 +vn 0.1260 -1.9528 0.4133 +vn 0.1260 -1.9528 0.4132 +vn 0.2443 -1.9084 0.5462 +vn 0.2442 -1.9084 0.5461 +vn 0.2443 -1.9084 0.5461 +vn 0.9953 -0.1436 1.7288 +vn 0.9953 -0.1437 1.7288 +vn 0.9952 -0.1437 1.7288 +vn 1.1489 -0.1882 1.6263 +vn 1.1489 -0.1881 1.6263 +vn 1.1488 -0.1886 1.6263 +vn 0.2439 -1.9549 0.3448 +vn 0.2438 -1.9549 0.3447 +vn 0.2437 -1.9550 0.3446 +vn 0.2459 -1.9556 0.3394 +vn 0.2465 -1.9554 0.3401 +vn 1.1683 -0.1893 1.6122 +vn 1.1682 -0.1896 1.6122 +vn -1.1606 0.1881 -1.6179 +vn -1.1606 0.1880 -1.6179 +vn -0.2458 1.9550 -0.3431 +vn -0.2459 1.9549 -0.3432 +vn -0.2460 1.9549 -0.3434 +vn -0.2465 1.9555 -0.3398 +vn -0.2466 1.9554 -0.3400 +vn -1.1691 0.1893 -1.6117 +vn -1.1691 0.1896 -1.6116 +vn -1.8461 0.7493 -0.1741 +vn -1.8461 0.7494 -0.1741 +vn -1.8461 0.7494 -0.1742 +vn 0.2605 0.2805 -1.9630 +vn 0.3874 0.2788 -1.9422 +vn 0.3871 0.2799 -1.9421 +vn -0.2612 -0.2805 1.9629 +vn -0.2612 -0.2804 1.9629 +vn -0.0376 -1.9796 0.2828 +vn -0.0376 -1.9796 0.2827 +vn -0.0579 -1.9794 0.2805 +vn -0.0579 -1.9794 0.2807 +vn -0.0579 -1.9793 0.2809 +vn -0.0579 -1.9793 0.2810 +vn -0.4014 -0.2794 1.9393 +vn -0.4015 -0.2798 1.9392 +vn -0.0506 1.9985 0.0593 +vn -0.0503 1.9985 0.0594 +vn -0.0561 1.9985 0.0527 +vn -0.0559 1.9985 0.0528 +vn 1.2742 0.1874 -1.5302 +vn 1.2742 0.1873 -1.5301 +vn 0.2718 1.9545 -0.3256 +vn 0.2714 1.9546 -0.3253 +vn 0.2712 1.9547 -0.3251 +vn 0.2713 1.9546 -0.3252 +vn 0.3048 1.9556 -0.2878 +vn 0.3052 1.9555 -0.2881 +vn 1.4475 0.1892 -1.3670 +vn 1.4474 0.1896 -1.3671 +vn -1.2925 -0.1875 1.5147 +vn -1.2925 -0.1876 1.5147 +vn -0.2745 -1.9547 0.3224 +vn -0.2744 -1.9547 0.3223 +vn -0.2744 -1.9547 0.3222 +vn -0.3059 -1.9554 0.2876 +vn -0.3055 -1.9556 0.2869 +vn -1.4513 -0.1892 1.3630 +vn -1.4514 -0.1896 1.3629 +vn -0.0354 1.9997 -0.0059 +vn -0.0361 1.9997 -0.0057 +vn -0.0368 1.9997 -0.0055 +vn -0.0360 1.9997 -0.0057 +vn -0.3318 1.9710 -0.0706 +vn -0.3319 1.9710 -0.0706 +vn 0.4875 0.2776 -1.9197 +vn 0.4872 0.2784 -1.9197 +vn 0.5109 0.2688 -1.9149 +vn -0.5171 -0.2780 1.9119 +vn -0.5170 -0.2774 1.9120 +vn -0.0745 -1.9792 0.2779 +vn -0.0745 -1.9791 0.2785 +vn -0.0835 -1.9777 0.2861 +vn -0.0835 -1.9777 0.2860 +vn -0.5777 -0.2682 1.8959 +vn -0.5776 -0.2681 1.8959 +vn 1.7084 -0.1849 -1.0233 +vn 1.7084 -0.1848 -1.0233 +vn 0.3443 -1.9613 -0.1860 +vn 0.4440 -1.9394 -0.2044 +vn 0.4440 -1.9393 -0.2044 +vn 1.8126 -0.1636 -0.8292 +vn 1.8126 -0.1639 -0.8291 +vn -0.8572 -0.1910 1.7968 +vn -0.8572 -0.1910 1.7969 +vn -0.8567 -0.1902 1.7972 +vn -0.8571 -0.1909 1.7969 +vn -0.1758 -1.9563 0.3767 +vn -0.1758 -1.9563 0.3768 +vn -0.1758 -1.9563 0.3770 +vn -0.1878 -1.9530 0.3882 +vn -0.1877 -1.9530 0.3881 +vn -0.8658 -0.1847 1.7934 +vn -0.8656 -0.1841 1.7936 +vn -0.8653 -0.1835 1.7937 +vn -0.8656 -0.1842 1.7935 +vn -0.4718 1.9434 0.0234 +vn -0.4717 1.9434 0.0234 +vn -0.0632 1.9983 0.0543 +vn 1.9870 -0.0002 -0.2279 +vn 1.7981 -0.1691 -0.8591 +vn 1.7981 -0.1693 -0.8591 +vn 0.4210 -1.9446 -0.2032 +vn 0.4211 -1.9446 -0.2032 +vn 0.4044 -1.9481 -0.2036 +vn 0.4045 -1.9480 -0.2037 +vn 0.4045 -1.9481 -0.2037 +vn 0.4046 -1.9480 -0.2037 +vn 1.7799 -0.1743 -0.8953 +vn 1.7799 -0.1741 -0.8953 +vn 1.7799 -0.1743 -0.8952 +vn 1.7799 -0.1756 -0.8950 +vn -0.2444 1.9763 0.1853 +vn -0.0234 1.9998 0.0166 +vn -0.0233 1.9998 0.0166 +vn -0.0034 2.0000 0.0029 +vn -0.0033 2.0000 0.0029 +vn -0.0036 2.0000 0.0030 +vn -0.0156 1.9999 0.0177 +vn -0.0155 1.9999 0.0177 +vn -1.6679 0.0474 1.1027 +vn -1.6679 0.0475 1.1027 +vn -1.2697 1.3191 0.8048 +vn -1.2698 1.3191 0.8047 +vn -1.2698 1.3191 0.8048 +vn -0.4933 1.9133 0.3100 +vn -1.6992 0.1379 1.0457 +vn -1.6992 0.1380 1.0457 +vn -1.7517 0.1685 0.9503 +vn -1.7517 0.1686 0.9503 +vn -0.4134 1.9442 0.2217 +vn -0.4133 1.9442 0.2217 +vn -0.4035 1.9480 0.2057 +vn -0.4037 1.9480 0.2057 +vn -0.4031 1.9481 0.2055 +vn -1.7746 0.1749 0.9056 +vn -1.7746 0.1752 0.9056 +vn -1.7747 0.1743 0.9055 +vn -0.9035 -0.0000 -1.7843 +vn -0.9035 -0.0001 -1.7843 +vn -0.9035 0.0001 -1.7843 +vn -1.8078 0.1722 0.8381 +vn -1.8077 0.1724 0.8381 +vn -1.8077 0.1723 0.8381 +vn -0.4162 1.9464 0.1958 +vn -0.8342 1.7784 -0.3760 +vn -0.8342 1.7784 -0.3761 +vn -1.6835 0.0737 -1.0772 +vn 1.7454 -0.1722 -0.9612 +vn 1.7454 -0.1723 -0.9612 +vn 0.4042 -1.9464 -0.2197 +vn 0.4041 -1.9464 -0.2196 +vn 0.1906 -1.7784 -0.8950 +vn 0.1906 -1.7784 -0.8949 +vn 0.1280 -0.0737 -1.9945 +vn 0.1281 -0.0738 -1.9945 +vn 0.0230 1.9984 0.0762 +vn 0.0229 1.9984 0.0761 +vn 0.0228 1.9984 0.0760 +vn 1.9870 -0.0000 -0.2279 +vn -0.5631 0.1839 -1.9103 +vn -0.5631 0.1839 -1.9102 +vn -0.5631 0.1840 -1.9102 +vn -0.1225 1.9528 -0.4143 +vn -0.1225 1.9528 -0.4142 +vn 0.1142 1.9084 -0.5873 +vn 0.1142 1.9084 -0.5872 +vn 0.1143 1.9084 -0.5873 +vn 0.5779 0.1437 -1.9093 +vn 0.5779 0.1438 -1.9093 +vn 0.0205 1.9978 0.0909 +vn 0.0204 1.9978 0.0909 +vn 0.1497 0.2822 1.9743 +vn 0.1498 0.2823 1.9743 +vn 0.2640 0.2814 1.9624 +vn 0.2642 0.2819 1.9623 +vn -0.1478 -0.2822 -1.9745 +vn -0.1477 -0.2823 -1.9745 +vn -0.0212 -1.9798 -0.2827 +vn -0.0211 -1.9798 -0.2826 +vn -0.0372 -1.9797 -0.2817 +vn -0.0371 -1.9798 -0.2813 +vn -0.2588 -0.2815 -1.9631 +vn -0.2588 -0.2813 -1.9631 +vn 0.3919 0.2808 1.9410 +vn 0.3920 0.2817 1.9409 +vn 0.5643 0.2811 1.8981 +vn 0.5642 0.2811 1.8981 +vn 0.5643 0.2814 1.8980 +vn 0.5642 0.2810 1.8981 +vn -0.3836 -0.2809 -1.9427 +vn -0.3834 -0.2817 -1.9426 +vn -0.0553 -1.9796 -0.2794 +vn -0.0553 -1.9796 -0.2792 +vn -0.0795 -1.9795 -0.2743 +vn -0.0788 -1.9797 -0.2728 +vn -0.5492 -0.2802 -1.9026 +vn -0.5489 -0.2817 -1.9025 +vn -1.1905 -0.2751 -1.5833 +vn -1.1906 -0.2749 -1.5833 +vn -0.1751 -1.9787 -0.2324 +vn -0.1751 -1.9787 -0.2323 +vn -0.1758 -1.9790 -0.2296 +vn -0.1759 -1.9790 -0.2297 +vn -1.2042 -0.2767 -1.5727 +vn -1.2042 -0.2766 -1.5727 +vn 0.7920 0.2792 1.8152 +vn 0.7920 0.2795 1.8151 +vn 1.0454 0.2764 1.6825 +vn 1.0454 0.2761 1.6825 +vn 1.0454 0.2758 1.6826 +vn 1.0454 0.2760 1.6825 +vn -0.7717 -0.2796 -1.8238 +vn -0.7716 -0.2801 -1.8238 +vn -0.1114 -1.9795 -0.2629 +vn -0.1115 -1.9795 -0.2630 +vn -0.1117 -1.9794 -0.2633 +vn -0.1493 -1.9790 -0.2473 +vn -0.1494 -1.9790 -0.2475 +vn -0.1494 -1.9790 -0.2474 +vn -1.0221 -0.2765 -1.6967 +vn -1.0220 -0.2768 -1.6967 +vn -1.0220 -0.2770 -1.6967 +vn -1.0221 -0.2767 -1.6967 +vn 1.2128 0.2742 1.5665 +vn 1.2128 0.2743 1.5665 +vn 1.2127 0.2741 1.5666 +vn 1.2036 0.2767 1.5732 +vn 1.2036 0.2766 1.5732 +vn 0.3792 0.2723 1.9448 +vn 0.3792 0.2724 1.9447 +vn 0.3792 0.2725 1.9447 +vn -0.0297 0.2724 1.9811 +vn -0.0297 0.2726 1.9811 +vn -0.0298 0.2721 1.9812 +vn -0.0298 0.2722 1.9812 +vn 1.0093 0.2772 1.7043 +vn 1.0093 0.2770 1.7043 +vn 1.0093 0.2771 1.7043 +vn 0.7041 0.2747 1.8517 +vn 0.7041 0.2744 1.8518 +vn 0.7041 0.2749 1.8517 +vn -1.0487 -0.2766 -1.6804 +vn -1.0487 -0.2767 -1.6804 +vn -1.0488 -0.2764 -1.6804 +vn -0.1525 -1.9790 -0.2456 +vn -0.1526 -1.9790 -0.2457 +vn -0.1110 -1.9786 -0.2698 +vn -0.1110 -1.9786 -0.2699 +vn -0.1111 -1.9786 -0.2699 +vn -0.7597 -0.2741 -1.8297 +vn -0.7598 -0.2739 -1.8297 +vn -0.7597 -0.2740 -1.8297 +vn -0.7597 -0.2742 -1.8297 +vn 0.4934 -0.2745 -1.9187 +vn 0.4935 -0.2749 -1.9186 +vn 0.0727 -1.9786 -0.2825 +vn 0.0728 -1.9787 -0.2818 +vn 0.1265 -1.9791 -0.2592 +vn 0.1265 -1.9790 -0.2595 +vn 0.1267 -1.9789 -0.2606 +vn 0.1267 -1.9790 -0.2602 +vn 0.8682 -0.2771 -1.7803 +vn 0.8681 -0.2761 -1.7805 +vn -0.4560 -0.2714 -1.9283 +vn -0.4561 -0.2713 -1.9283 +vn -0.0665 -1.9782 -0.2871 +vn -0.0665 -1.9782 -0.2870 +vn -0.0031 -1.9782 -0.2942 +vn -0.0032 -1.9782 -0.2943 +vn -0.0031 -1.9782 -0.2943 +vn -0.0032 -1.9782 -0.2944 +vn -0.0281 -0.2716 -1.9813 +vn 0.0071 2.0000 0.0101 +vn 0.0075 2.0000 0.0103 +vn 0.0074 2.0000 0.0102 +vn 0.0358 1.9983 0.0739 +vn 0.0357 1.9983 0.0738 +vn 0.0358 1.9983 0.0738 +vn -0.5044 0.2750 1.9157 +vn -0.5046 0.2742 1.9158 +vn -0.8620 0.2765 1.7834 +vn -0.8621 0.2763 1.7834 +vn 1.9774 -0.0000 -0.3001 +vn -1.1331 0.2783 1.6244 +vn -1.1331 0.2784 1.6244 +vn -1.4561 0.2774 1.3427 +vn -1.4561 0.2773 1.3427 +vn 1.1343 -0.2783 -1.6235 +vn 1.1343 -0.2785 -1.6235 +vn 0.1646 -1.9792 -0.2356 +vn 0.1645 -1.9793 -0.2355 +vn 0.2120 -1.9791 -0.1955 +vn 0.2120 -1.9791 -0.1956 +vn 1.4558 -0.2774 -1.3430 +vn -0.0075 -2.0000 -0.0104 +vn -0.0075 -2.0000 -0.0103 +vn -0.0076 -2.0000 -0.0102 +vn 1.9479 -0.2770 -0.3589 +vn 1.9479 -0.2772 -0.3589 +vn 1.9479 -0.2771 -0.3589 +vn 0.2422 -1.9767 -0.1846 +vn 0.2421 -1.9767 -0.1846 +vn 0.2699 -1.9794 -0.0966 +vn 0.2695 -1.9794 -0.0965 +vn 1.9572 -0.2810 -0.3009 +vn 1.9572 -0.2811 -0.3009 +vn 1.9571 -0.2813 -0.3009 +vn -1.7313 0.2729 0.9635 +vn -1.7312 0.2732 0.9635 +vn -1.7312 0.2731 0.9635 +vn -1.7312 0.2733 0.9635 +vn -1.8689 0.2739 0.6575 +vn -1.8689 0.2740 0.6575 +vn -1.8689 0.2741 0.6575 +vn 1.7590 -0.2721 -0.9120 +vn 1.7590 -0.2722 -0.9120 +vn 1.7590 -0.2720 -0.9121 +vn 0.2520 -1.9786 -0.1474 +vn 0.2521 -1.9786 -0.1475 +vn 0.2522 -1.9785 -0.1476 +vn 0.2522 -1.9785 -0.1475 +vn 0.2421 -1.9784 -0.1654 +vn 0.2423 -1.9784 -0.1655 +vn 1.8992 -0.2723 -0.5645 +vn 1.8993 -0.2722 -0.5646 +vn 1.8993 -0.2720 -0.5646 +vn -0.0360 -1.9983 -0.0732 +vn -0.0357 -1.9983 -0.0739 +vn -0.0361 -1.9983 -0.0730 +vn -0.0358 -1.9983 -0.0738 +vn -0.0403 -1.9955 -0.1285 +vn -0.0401 -1.9955 -0.1287 +vn -0.0402 -1.9955 -0.1285 +vn -0.3025 -0.0000 -1.9770 +vn -0.0121 -1.9992 -0.0540 +vn -0.0118 -1.9992 -0.0542 +vn -0.0116 -1.9992 -0.0542 +vn 0.0402 1.9955 0.1285 +vn 0.0115 1.9992 0.0542 +vn 0.0123 1.9992 0.0544 +vn 0.0120 1.9992 0.0543 +vn -1.9380 0.2780 0.4085 +vn -1.9381 0.2777 0.4085 +vn -1.9380 0.2778 0.4085 +vn -1.9561 0.2808 0.3078 +vn -1.9561 0.2812 0.3078 +vn -1.9560 0.2813 0.3078 +vn -0.3025 0.0001 -1.9770 +vn -1.9613 0.2777 0.2758 +vn -1.9613 0.2776 0.2758 +vn -1.8447 0.2014 -0.7461 +vn -1.8446 0.2014 -0.7461 +vn 1.9541 -0.2777 -0.3233 +vn 0.2847 -1.9791 -0.0465 +vn 0.2848 -1.9791 -0.0466 +vn 0.3594 -1.9544 -0.2263 +vn 0.3594 -1.9544 -0.2262 +vn 0.3593 -1.9544 -0.2262 +vn 1.5372 -0.2014 -1.2635 +vn 1.5372 -0.2014 -1.2636 +vn -0.0023 -2.0000 -0.0128 +vn -0.0020 -2.0000 -0.0129 +vn -0.0003 -2.0000 -0.0019 +vn 0.0023 2.0000 0.0129 +vn 0.0020 2.0000 0.0129 +vn 1.9573 -0.2822 -0.2990 +vn 1.9572 -0.2828 -0.2989 +vn 0.2780 -1.9798 -0.0553 +vn 0.2777 -1.9799 -0.0553 +vn 0.2794 -1.9799 -0.0447 +vn 0.2793 -1.9799 -0.0446 +vn 1.9571 -0.2828 -0.2994 +vn -1.9571 0.2822 0.2999 +vn -1.9571 0.2828 0.2999 +vn 0.0003 2.0000 0.0019 +vn -1.9571 0.2828 0.2995 +vn -0.2826 -1.9797 0.0300 +vn -0.2823 -1.9797 0.0299 +vn -1.9577 -0.2822 0.2963 +vn -1.9576 -0.2827 0.2962 +vn -1.9572 -0.2827 0.2990 +vn -1.9572 -0.2828 0.2990 +vn -0.2800 -1.9799 0.0408 +vn -0.2799 -1.9799 0.0408 +vn 1.9770 -0.0000 -0.3021 +vn 1.9731 -0.0000 -0.3269 +vn 1.5337 -0.0000 -1.2836 +vn 1.7769 -0.0000 -0.9180 +vn -0.2857 -1.9791 0.0407 +vn -0.2856 -1.9791 0.0407 +vn -0.2855 -1.9791 0.0407 +vn -1.9613 -0.2777 0.2758 +vn -1.9613 -0.2776 0.2758 +vn -1.8447 -0.2013 -0.7461 +vn -1.8446 -0.2014 -0.7461 +vn -0.4106 -1.9543 -0.1091 +vn -0.4106 -1.9544 -0.1084 +vn -0.4105 -1.9544 -0.1084 +vn 1.9870 -0.0000 -0.2280 +vn -0.3025 -0.0002 -1.9770 +vn -0.3025 0.0002 -1.9770 +vn -0.3196 -1.9733 -0.0645 +vn -0.3196 -1.9732 -0.0645 +vn -0.3195 -1.9733 -0.0645 +vn -1.9450 -0.2774 0.3742 +vn -1.9450 -0.2775 0.3742 +vn -1.9450 -0.2775 0.3741 +vn -1.9584 -0.2810 0.2927 +vn -0.2927 -1.9784 -0.0099 +vn -0.2926 -1.9785 -0.0100 +vn -0.2925 -1.9785 -0.0100 +vn 1.9211 -0.0000 -0.5563 +vn 1.9705 -0.0000 -0.3421 +vn -0.2630 -1.9782 0.1328 +vn -0.2629 -1.9782 0.1327 +vn -0.2628 -1.9782 0.1326 +vn -0.2630 -1.9782 0.1327 +vn -1.7327 -0.2732 0.9608 +vn -1.7327 -0.2732 0.9609 +vn -1.7327 -0.2730 0.9609 +vn -1.8754 -0.2738 0.6388 +vn -1.8754 -0.2736 0.6389 +vn -0.3079 -1.9759 0.0287 +vn -0.3080 -1.9759 0.0287 +vn 1.9780 -0.0000 -0.2959 +vn 1.1455 -0.0000 -1.6395 +vn 1.4700 -0.0000 -1.3561 +vn -0.4615 -0.0000 -1.9460 +vn -0.1644 -1.9792 0.2357 +vn -0.1644 -1.9793 0.2356 +vn -1.1331 -0.2783 1.6244 +vn -1.1331 -0.2784 1.6244 +vn -1.4561 -0.2774 1.3427 +vn -1.4561 -0.2773 1.3427 +vn -0.2120 -1.9791 0.1955 +vn -0.0741 -1.9787 0.2813 +vn -0.0741 -1.9786 0.2822 +vn -0.5045 -0.2750 1.9157 +vn -0.5045 -0.2749 1.9157 +vn -0.8619 -0.2765 1.7834 +vn -0.8620 -0.2770 1.7833 +vn -0.1259 -1.9790 0.2604 +vn -0.1258 -1.9791 0.2599 +vn -0.1258 -1.9790 0.2601 +vn -0.1258 -1.9790 0.2600 +vn -0.0292 -0.0000 -1.9998 +vn 0.4980 -0.0000 -1.9370 +vn 0.8767 -0.0000 -1.7976 +vn -1.0594 -0.0000 -1.6964 +vn -0.7677 -0.0000 -1.8468 +vn -0.7792 -0.0000 -1.8420 +vn 0.1475 -1.9791 0.2481 +vn 0.1475 -1.9791 0.2480 +vn 1.0093 -0.2774 1.7042 +vn 1.0093 -0.2774 1.7043 +vn 1.0093 -0.2770 1.7043 +vn 1.0093 -0.2771 1.7043 +vn 0.7041 -0.2748 1.8517 +vn 0.7041 -0.2747 1.8517 +vn 0.7041 -0.2746 1.8517 +vn 0.1040 -1.9787 0.2719 +vn 0.1042 -1.9787 0.2722 +vn 0.1040 -1.9787 0.2720 +vn 0.0569 -1.9783 0.2880 +vn 0.0569 -1.9783 0.2881 +vn 0.0570 -1.9783 0.2882 +vn 0.0570 -1.9783 0.2883 +vn 0.3792 -0.2725 1.9447 +vn 0.3792 -0.2724 1.9447 +vn 0.3792 -0.2726 1.9447 +vn -0.0297 -0.2726 1.9811 +vn -0.0298 -0.2726 1.9811 +vn -0.0297 -0.2723 1.9812 +vn -0.0297 -0.2722 1.9812 +vn -0.0039 -1.9783 0.2938 +vn -0.0039 -1.9783 0.2936 +vn 0.1782 -1.9786 0.2308 +vn 0.1783 -1.9786 0.2309 +vn 0.1783 -1.9786 0.2310 +vn 1.2128 -0.2741 1.5665 +vn 1.2127 -0.2743 1.5665 +vn 1.2036 -0.2767 1.5732 +vn 1.2036 -0.2766 1.5732 +vn 0.1757 -1.9790 0.2296 +vn 0.1758 -1.9790 0.2297 +vn -1.0317 -0.0000 -1.7133 +vn -1.2017 -0.0000 -1.5987 +vn 0.1142 -1.9794 0.2625 +vn 0.1143 -1.9794 0.2626 +vn 0.1142 -1.9794 0.2624 +vn 0.7921 -0.2792 1.8151 +vn 0.7920 -0.2795 1.8151 +vn 0.7920 -0.2798 1.8151 +vn 1.0454 -0.2761 1.6825 +vn 1.0454 -0.2762 1.6825 +vn 1.0454 -0.2760 1.6825 +vn 0.1529 -1.9788 0.2466 +vn 0.1527 -1.9789 0.2464 +vn 0.1523 -1.9790 0.2460 +vn 0.1525 -1.9789 0.2462 +vn -1.2159 -0.0000 -1.5879 +vn -0.3872 -0.0000 -1.9622 +vn -0.5544 -0.0000 -1.9216 +vn -0.1492 -0.0000 -1.9944 +vn 0.0561 -1.9797 0.2787 +vn 0.0563 -1.9796 0.2790 +vn 0.3921 -0.2808 1.9410 +vn 0.3918 -0.2817 1.9409 +vn 0.5642 -0.2809 1.8981 +vn 0.5640 -0.2817 1.8980 +vn 0.0809 -1.9796 0.2729 +vn 0.0810 -1.9796 0.2732 +vn -0.2613 -0.0000 -1.9829 +vn 1.7513 -0.0000 -0.9659 +vn 0.0214 -1.9798 0.2827 +vn 0.0214 -1.9798 0.2825 +vn 0.1498 -0.2822 1.9743 +vn 0.1497 -0.2823 1.9743 +vn 0.2640 -0.2821 1.9623 +vn 0.2640 -0.2819 1.9623 +vn 0.0379 -1.9797 0.2817 +vn 0.0377 -1.9798 0.2812 +vn -0.1225 -1.9528 -0.4142 +vn -0.1224 -1.9528 -0.4142 +vn -0.1225 -1.9528 -0.4143 +vn -0.5631 -0.1842 -1.9102 +vn -0.5631 -0.1841 -1.9102 +vn -0.5632 -0.1838 -1.9103 +vn -0.5632 -0.1839 -1.9102 +vn 0.5779 -0.1437 -1.9093 +vn 0.5780 -0.1438 -1.9093 +vn 0.1142 -1.9084 -0.5872 +vn 0.1142 -1.9084 -0.5873 +vn -1.9605 -0.0000 0.3957 +vn 1.9870 0.0005 -0.2279 +vn 0.1107 -0.0000 -1.9969 +vn 1.8050 -0.0000 -0.8613 +vn -0.4163 -1.9464 0.1958 +vn -0.4162 -1.9464 0.1958 +vn -1.8078 -0.1725 0.8380 +vn -1.8077 -0.1722 0.8381 +vn -1.8078 -0.1723 0.8381 +vn -1.8078 -0.1723 0.8380 +vn -1.6834 -0.0738 -1.0773 +vn -1.6835 -0.0737 -1.0772 +vn -1.6835 -0.0738 -1.0772 +vn -0.8341 -1.7784 -0.3761 +vn -0.8342 -1.7784 -0.3760 +vn -0.4133 -1.9442 0.2217 +vn -0.4133 -1.9442 0.2216 +vn -1.7517 -0.1685 0.9503 +vn -1.7746 -0.1749 0.9056 +vn -1.7746 -0.1751 0.9056 +vn -1.7746 -0.1748 0.9056 +vn -1.7746 -0.1747 0.9056 +vn -0.4037 -1.9480 0.2058 +vn -0.4037 -1.9480 0.2057 +vn -0.4035 -1.9481 0.2056 +vn -0.4036 -1.9480 0.2057 +vn -0.9189 -1.7146 0.4643 +vn -0.9189 -1.7147 0.4642 +vn -0.9189 -1.7147 0.4643 +vn -1.6716 -0.0483 1.0970 +vn -1.6716 -0.0484 1.0969 +vn -1.7002 -0.1382 1.0442 +vn -0.4712 -1.9242 0.2749 +vn -0.4713 -1.9241 0.2749 +vn 1.7868 -0.0000 -0.8985 +vn -0.8651 -0.0000 1.8032 +vn -0.8692 -0.0000 1.8012 +vn 1.7124 -0.0000 -1.0333 +vn 1.8188 -0.0000 -0.8318 +vn -0.5229 -0.0000 1.9304 +vn -0.5878 -0.0000 1.9117 +vn -1.2984 -0.0000 1.5212 +vn 0.0721 -1.9792 -0.2782 +vn 0.0721 -1.9791 -0.2790 +vn 0.4919 -0.2776 -1.9186 +vn 0.4922 -0.2786 -1.9184 +vn 0.5541 -0.2684 -1.9029 +vn 0.5541 -0.2685 -1.9029 +vn 0.0865 -1.9776 -0.2855 +vn 0.0865 -1.9776 -0.2854 +vn -1.4580 -0.0000 1.3691 +vn -0.2638 -0.0000 1.9825 +vn 0.2714 -1.9546 -0.3254 +vn 0.2714 -1.9546 -0.3253 +vn 0.2713 -1.9546 -0.3252 +vn 1.2741 -0.1874 -1.5302 +vn 1.2743 -0.1882 -1.5300 +vn 1.4475 -0.1893 -1.3671 +vn 1.4475 -0.1896 -1.3670 +vn 0.3049 -1.9556 -0.2877 +vn 0.3048 -1.9556 -0.2876 +vn -0.4055 -0.0000 1.9585 +vn 1.1539 -0.0000 1.6336 +vn 0.0375 -1.9796 -0.2828 +vn 0.0375 -1.9796 -0.2827 +vn 0.2605 -0.2805 -1.9630 +vn 0.3871 -0.2788 -1.9423 +vn 0.3873 -0.2799 -1.9421 +vn 0.0561 -1.9793 -0.2814 +vn 0.0562 -1.9795 -0.2802 +vn -0.2459 -1.9549 -0.3432 +vn -0.2459 -1.9549 -0.3433 +vn -1.1606 -0.1881 -1.6179 +vn -1.1606 -0.1883 -1.6179 +vn -1.1607 -0.1878 -1.6179 +vn -1.1606 -0.1880 -1.6179 +vn -1.1691 -0.1893 -1.6116 +vn -1.1691 -0.1896 -1.6116 +vn -0.2465 -1.9554 -0.3398 +vn -0.2460 -1.9556 -0.3392 +vn 1.1735 -0.0000 1.6195 +vn 0.5850 -0.0000 1.9125 +vn 1.0105 -0.0000 1.7259 +vn 1.0106 -0.0000 1.7259 +vn 0.8323 -0.0000 1.8186 +vn -0.1877 -1.9526 -0.3898 +vn -0.1877 -1.9527 -0.3897 +vn -0.1876 -1.9527 -0.3896 +vn -0.1876 -1.9527 -0.3897 +vn -0.8682 -0.1831 -1.7924 +vn -0.8681 -0.1835 -1.7924 +vn -0.8680 -0.1837 -1.7924 +vn -0.8682 -0.1834 -1.7924 +vn -1.1097 -0.1847 -1.6536 +vn -1.1097 -0.1848 -1.6536 +vn -0.2384 -1.9533 -0.3572 +vn -0.2385 -1.9533 -0.3572 +vn -0.2385 -1.9533 -0.3573 +vn 1.0725 -0.0000 1.6881 +vn -0.7487 -0.0000 1.8546 +vn 0.0135 -1.9542 -0.4253 +vn 0.0135 -1.9542 -0.4255 +vn 0.0135 -1.9543 -0.4251 +vn 0.0655 -0.1867 -1.9902 +vn 0.0655 -0.1866 -1.9902 +vn -0.3941 -0.1863 -1.9519 +vn -0.3943 -0.1859 -1.9519 +vn -0.0847 -1.9539 -0.4185 +vn -0.0845 -1.9540 -0.4180 +vn 0.1677 -1.9527 -0.3984 +vn 0.1677 -1.9527 -0.3983 +vn 0.1677 -1.9527 -0.3986 +vn 0.1677 -1.9527 -0.3985 +vn 0.7758 -0.1838 -1.8342 +vn 0.7757 -0.1835 -1.8343 +vn 0.4438 -0.1851 -1.9413 +vn 0.4439 -0.1853 -1.9413 +vn 0.4441 -0.1859 -1.9412 +vn 0.4439 -0.1854 -1.9413 +vn 0.0947 -1.9536 -0.4177 +vn 0.0947 -1.9537 -0.4174 +vn -0.4132 -0.0000 1.9569 +vn -0.0448 -0.0000 1.9995 +vn 0.4010 -0.0000 1.9594 +vn -1.2936 -0.0000 1.5253 +vn -1.0526 -0.0000 1.7006 +vn -0.9026 -0.0000 1.7848 +vn 0.3246 -1.9552 -0.2678 +vn 0.3246 -1.9552 -0.2677 +vn 1.5365 -0.1891 -1.2663 +vn 1.5365 -0.1891 -1.2662 +vn 1.5126 -0.1862 -1.2952 +vn 1.5126 -0.1867 -1.2950 +vn 1.5127 -0.1871 -1.2949 +vn 1.5127 -0.1872 -1.2949 +vn 0.3220 -1.9544 -0.2771 +vn 0.3221 -1.9543 -0.2773 +vn 0.2917 -1.9528 -0.3186 +vn 0.2917 -1.9528 -0.3185 +vn 1.3515 -0.1838 -1.4627 +vn 1.3515 -0.1837 -1.4628 +vn 1.3515 -0.1835 -1.4628 +vn 1.3515 -0.1836 -1.4628 +vn 1.0891 -0.1819 -1.6676 +vn 1.0892 -0.1821 -1.6675 +vn 1.0891 -0.1821 -1.6675 +vn 0.2373 -1.9520 -0.3654 +vn 0.2372 -1.9520 -0.3653 +vn 0.2370 -1.9669 -0.2744 +vn 1.3426 -0.2011 -1.4687 +vn 1.3426 -0.2010 -1.4687 +vn 1.1150 -0.1883 -1.6496 +vn 1.1150 -0.1882 -1.6496 +vn 0.2341 -1.9552 -0.3500 +vn -1.0658 -0.0000 1.6924 +vn -1.5376 -0.0000 1.2790 +vn -1.4810 -0.0000 1.3441 +vn -0.6251 -0.0000 1.8998 +vn 0.0833 -1.9733 -0.3147 +vn 0.0834 -1.9734 -0.3145 +vn 0.0835 -1.9734 -0.3144 +vn 0.3872 -0.2435 -1.9470 +vn 0.3875 -0.2438 -1.9469 +vn 0.3879 -0.2442 -1.9468 +vn -1.8042 0.0499 0.8616 +vn -1.4219 -1.4048 0.0694 +vn -0.0059 -1.9799 -0.2829 +vn -0.0059 -1.9799 -0.2830 +vn -0.0416 -0.2827 -1.9795 +vn 0.1052 -0.2823 -1.9772 +vn 0.1051 -0.2820 -1.9772 +vn 0.0150 -1.9798 -0.2829 +vn 0.0150 -1.9798 -0.2833 +vn -0.0144 -1.9798 0.2833 +vn -0.0145 -1.9798 0.2829 +vn -0.1007 -0.2820 1.9775 +vn -0.1008 -0.2824 1.9774 +vn 0.0418 -0.2827 1.9795 +vn 0.0060 -1.9799 0.2830 +vn 0.0060 -1.9799 0.2829 +vn -0.8062 -0.0000 1.8303 +vn -1.9772 -0.0000 0.3011 +vn -0.8018 0.2390 1.8166 +vn -1.0021 0.2050 1.7186 +vn -1.0021 0.2051 1.7186 +vn -1.5307 0.1891 1.2732 +vn -1.5309 0.1886 1.2731 +vn -1.4749 0.1873 1.3378 +vn -1.4748 0.1876 1.3378 +vn -1.4749 0.1874 1.3378 +vn -0.8991 0.1821 1.7772 +vn -0.8991 0.1819 1.7772 +vn -1.0611 0.1837 1.6853 +vn -1.0613 0.1831 1.6853 +vn -1.2885 0.1848 1.5184 +vn -1.2886 0.1844 1.5184 +vn -1.2887 0.1841 1.5183 +vn -1.0486 0.1823 1.6933 +vn -1.0486 0.1824 1.6933 +vn -1.0484 0.1829 1.6933 +vn -1.0485 0.1827 1.6933 +vn -0.0448 0.1867 1.9908 +vn -0.0450 0.1862 1.9908 +vn 0.3993 0.1862 1.9509 +vn 0.3992 0.1859 1.9509 +vn -0.7457 0.1841 1.8466 +vn -0.7458 0.1840 1.8466 +vn -0.4116 0.1860 1.9483 +vn -0.4116 0.1859 1.9483 +vn 0.8291 0.1840 1.8107 +vn 0.8291 0.1837 1.8108 +vn 0.8292 0.1841 1.8107 +vn 0.8291 0.1839 1.8107 +vn 1.0683 0.1853 1.6806 +vn 1.0683 0.1854 1.6806 +vn 1.0682 0.1850 1.6807 +vn 1.0683 0.1852 1.6806 +vn 0.5823 0.1839 1.9045 +vn 0.5823 0.1840 1.9045 +vn 0.9953 0.1437 1.7288 +vn 0.9952 0.1436 1.7288 +vn 1.1489 0.1882 1.6263 +vn 1.1488 0.1877 1.6263 +vn 1.1489 0.1884 1.6262 +vn 1.1489 0.1880 1.6263 +vn 1.1683 0.1893 1.6122 +vn 1.1683 0.1896 1.6122 +vn -0.2612 0.2804 1.9629 +vn -0.2612 0.2805 1.9629 +vn -0.4013 0.2794 1.9393 +vn -0.4014 0.2791 1.9393 +vn -1.2926 0.1872 1.5146 +vn -1.2925 0.1878 1.5147 +vn -1.2923 0.1881 1.5147 +vn -1.2926 0.1874 1.5146 +vn -1.4514 0.1892 1.3629 +vn -1.4513 0.1896 1.3630 +vn -0.5225 0.2770 1.9106 +vn -0.5223 0.2774 1.9106 +vn -0.6248 0.2675 1.8810 +vn 0.3442 1.9614 -0.1860 +vn 0.3443 1.9613 -0.1860 +vn 1.7084 0.1848 -1.0233 +vn 1.7084 0.1849 -1.0233 +vn 1.8127 0.1635 -0.8292 +vn 1.8125 0.1646 -0.8294 +vn 0.4440 1.9394 -0.2044 +vn -0.9038 0.1900 1.7740 +vn -0.9036 0.1903 1.7740 +vn -0.9035 0.1905 1.7741 +vn -0.8699 0.1838 1.7915 +vn -0.8699 0.1840 1.7915 +vn -0.8697 0.1844 1.7916 +vn -0.8698 0.1841 1.7915 +vn 0.4210 1.9446 -0.2032 +vn 1.7981 0.1692 -0.8591 +vn 1.7981 0.1691 -0.8591 +vn 1.7981 0.1693 -0.8591 +vn 1.7799 0.1751 -0.8952 +vn 1.7800 0.1747 -0.8951 +vn 0.4045 1.9481 -0.2037 +vn 0.4044 1.9481 -0.2036 +vn 0.4047 1.9480 -0.2037 +vn 0.4048 1.9480 -0.2038 +vn 0.4042 1.9464 -0.2197 +vn 0.4042 1.9464 -0.2196 +vn 0.4041 1.9464 -0.2196 +vn 1.7454 0.1722 -0.9612 +vn 1.7454 0.1724 -0.9612 +vn 1.7454 0.1723 -0.9612 +vn 0.1281 0.0737 -1.9945 +vn 0.1280 0.0737 -1.9945 +vn 0.1280 0.0738 -1.9945 +vn 0.1905 1.7784 -0.8949 +vn 0.1906 1.7784 -0.8950 +vn -0.1477 0.2822 -1.9745 +vn -0.1478 0.2823 -1.9744 +vn -0.2589 0.2824 -1.9630 +vn -0.2586 0.2813 -1.9632 +vn -0.3836 0.2818 -1.9425 +vn -0.3834 0.2808 -1.9427 +vn -0.5489 0.2802 -1.9027 +vn -0.5492 0.2817 -1.9024 +vn -1.1906 0.2753 -1.5833 +vn -1.1906 0.2751 -1.5833 +vn -1.1905 0.2749 -1.5834 +vn -1.1906 0.2750 -1.5833 +vn -1.2042 0.2767 -1.5727 +vn -1.2042 0.2766 -1.5727 +vn -0.7717 0.2801 -1.8237 +vn -0.7717 0.2800 -1.8238 +vn -0.7717 0.2798 -1.8238 +vn -0.7717 0.2799 -1.8238 +vn -1.0220 0.2765 -1.6968 +vn -1.0220 0.2768 -1.6967 +vn -1.0220 0.2767 -1.6967 +vn -1.0488 0.2767 -1.6803 +vn -1.0487 0.2765 -1.6804 +vn -1.0487 0.2766 -1.6804 +vn -0.7597 0.2741 -1.8297 +vn 0.4932 0.2751 -1.9186 +vn 0.4936 0.2740 -1.9187 +vn 0.8681 0.2771 -1.7804 +vn 0.8683 0.2764 -1.7804 +vn -0.4560 0.2712 -1.9283 +vn -0.4560 0.2713 -1.9283 +vn -0.4561 0.2715 -1.9283 +vn -0.4561 0.2713 -1.9283 +vn -0.0282 0.2721 -1.9812 +vn -0.0281 0.2718 -1.9812 +vn -0.0280 0.2716 -1.9813 +vn -0.0281 0.2716 -1.9813 +vn 1.1344 0.2783 -1.6235 +vn 1.1343 0.2785 -1.6235 +vn 1.4558 0.2774 -1.3430 +vn 1.9548 0.2763 -0.3199 +vn 1.9548 0.2765 -0.3199 +vn 1.9548 0.2765 -0.3200 +vn 1.9595 0.2810 -0.2853 +vn 1.9595 0.2809 -0.2853 +vn 1.9595 0.2811 -0.2853 +vn 1.9595 0.2812 -0.2853 +vn 1.7609 0.2720 -0.9084 +vn 1.7609 0.2720 -0.9085 +vn 1.7608 0.2722 -0.9085 +vn 1.7609 0.2721 -0.9085 +vn 1.9064 0.2715 -0.5403 +vn 1.9064 0.2716 -0.5403 +vn 1.9064 0.2717 -0.5403 +vn 1.9541 0.2777 -0.3233 +vn 1.9541 0.2776 -0.3233 +vn 1.5372 0.2014 -1.2636 +vn 1.5371 0.2014 -1.2636 +vn 1.5372 0.2014 -1.2635 +vn 1.9579 0.2822 -0.2953 +vn 1.9578 0.2828 -0.2953 +vn 1.9572 0.2828 -0.2988 +vn -1.9770 -0.0000 0.3023 +vn -1.9806 -0.0000 0.2780 +vn -1.8474 -0.0000 -0.7663 +vn -1.8150 -0.0000 0.8400 +vn -1.9769 -0.0000 0.3033 +vn -1.7481 -0.0000 0.9717 +vn -1.8897 -0.0000 0.6551 +vn -1.1442 -0.0000 1.6404 +vn -1.4703 -0.0000 1.3558 +vn -0.5094 -0.0000 1.9340 +vn -0.8703 -0.0000 1.8007 +vn 1.0188 -0.0000 1.7211 +vn 1.0187 -0.0000 1.7211 +vn 0.7104 -0.0000 1.8696 +vn 0.3822 -0.0000 1.9631 +vn -0.0304 -0.0000 1.9998 +vn 1.2246 -0.0000 1.5813 +vn 1.2152 -0.0000 1.5885 +vn 0.8001 -0.0000 1.8330 +vn 1.0558 -0.0000 1.6986 +vn 0.3960 -0.0000 1.9604 +vn 0.5700 -0.0000 1.9170 +vn 0.1513 -0.0000 1.9943 +vn 0.2668 -0.0000 1.9821 +vn -0.5654 -0.0000 -1.9184 +vn 0.5935 -0.0000 -1.9099 +vn -1.6752 -0.0000 -1.0926 +vn -1.7574 -0.0000 0.9547 +vn -1.7814 -0.0000 0.9092 +vn -1.6559 -0.0000 1.1215 +vn -1.6560 -0.0000 1.1215 +vn -1.7006 -0.0000 1.0526 +vn 0.4962 -0.0000 -1.9375 +vn 0.5548 -0.0000 -1.9215 +vn 1.2796 -0.0000 -1.5371 +vn 1.4540 -0.0000 -1.3733 +vn 0.2631 -0.0000 -1.9826 +vn 0.3909 -0.0000 -1.9614 +vn -1.1659 -0.0000 -1.6250 +vn -1.1744 -0.0000 -1.6189 +vn -0.8723 -0.0000 -1.7997 +vn -1.1149 -0.0000 -1.6604 +vn 0.0660 -0.0000 -1.9989 +vn -0.3959 -0.0000 -1.9604 +vn 0.7795 -0.0000 -1.8419 +vn 0.4463 -0.0000 -1.9496 +vn 1.5434 -0.0000 -1.2720 +vn 1.5198 -0.0000 -1.3001 +vn 1.3581 -0.0000 -1.4682 +vn 1.0943 -0.0000 -1.6741 +vn 1.3511 -0.0000 -1.4747 +vn 1.1209 -0.0000 -1.6563 +vn 0.3665 -0.0000 -1.9661 +vn -1.7751 -0.0000 0.9215 +vn -0.0420 -0.0000 -1.9996 +vn 0.1063 -0.0000 -1.9972 +vn -0.1017 -0.0000 1.9974 +vn 0.0422 -0.0000 1.9996 +vn -1.7843 -0.0000 0.9035 +vn 1.7843 -0.0000 -0.9035 +vn 0.4025 1.9485 -0.2038 +vn 1.7774 0.1756 -0.9000 +vn -0.4025 -1.9485 0.2038 +vn -1.7774 -0.1756 0.9000 +vn -0.9869 -0.0000 -1.7395 +vn 1.7774 -0.1756 -0.9000 +vn 0.4025 -1.9485 -0.2038 +vn -1.7774 0.1756 0.9000 +vn -0.4025 1.9485 0.2038 +vn -0.8122 -0.0000 -1.8277 +vn 0.9865 -0.0000 1.7398 +vn 0.9821 0.1884 1.7320 +vn 0.9821 0.1887 1.7320 +vn 0.8085 0.1896 1.8194 +vn 0.8122 -0.0000 1.8277 +vn -0.2080 -1.9551 -0.3667 +vn -0.2077 -1.9552 -0.3662 +vn -0.9825 -0.1884 -1.7318 +vn -0.9825 -0.1887 -1.7318 +vn -0.8085 -0.1896 -1.8194 +vn -0.1702 -1.9556 -0.3830 +vn 0.0382 1.9985 0.0673 +vn 0.0381 1.9985 0.0672 +vn 0.0312 1.9985 0.0702 +vn -0.9825 0.1884 -1.7318 +vn -0.9825 0.1887 -1.7318 +vn -0.2077 1.9552 -0.3661 +vn -0.2077 1.9552 -0.3662 +vn -0.1702 1.9556 -0.3830 +vn -0.8085 0.1896 -1.8194 +vn 0.9821 -0.1884 1.7320 +vn 0.9821 -0.1887 1.7320 +vn 0.2075 -1.9553 0.3659 +vn 0.2081 -1.9550 0.3670 +vn 0.1702 -1.9556 0.3829 +vn 0.8085 -0.1896 1.8194 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +vt 0.392969 0.525463 +s 1 +usemtl Generic_walls +f 20235/36782/13830 21279/37826/13831 22034/38581/13832 +f 20235/36782/13830 22034/38581/13832 21532/38079/13831 +f 21277/37824/13833 19967/36514/13834 20707/37254/13835 +f 21277/37824/13833 20707/37254/13835 22032/38579/13834 +f 22033/38580/13836 20708/37255/13837 19849/36396/13838 +f 22033/38580/13836 19849/36396/13838 20701/37248/13839 +f 21534/38081/13840 22035/38582/13840 20703/37250/13841 +f 21534/38081/13840 20703/37250/13841 20153/36700/13840 +f 20445/36992/13842 21538/38085/13843 22039/38586/13844 +f 20445/36992/13842 22039/38586/13844 21930/38477/13845 +f 20921/37468/13846 22414/38961/13846 20907/37454/13847 +f 20921/37468/13846 20907/37454/13847 19975/36522/13848 +s 0 +f 21929/38476/13849 22036/38583/13849 21541/38088/13849 +s 1 +f 21929/38476/13849 21541/38088/13849 20452/36999/13849 +s 0 +f 21052/37599/13850 21050/37597/13850 20041/36588/13850 +f 21052/37599/13850 20041/36588/13850 20043/36590/13850 +f 19841/36388/13850 20695/37242/13850 20683/37230/13850 +f 19841/36388/13850 20683/37230/13850 19846/36393/13850 +f 20453/37000/13851 21546/38093/13851 22043/38590/13851 +f 20453/37000/13851 22043/38590/13851 21926/38473/13851 +f 19861/36408/13850 19867/36414/13850 20752/37299/13850 +f 19861/36408/13850 20752/37299/13850 20870/37417/13850 +f 21925/38472/13852 22040/38587/13852 20674/37221/13852 +f 21925/38472/13853 20674/37221/13853 20376/36923/13853 +f 20675/37222/13854 22041/38588/13854 22037/38584/13854 +f 20675/37222/13854 22037/38584/13854 21536/38083/13854 +f 20682/37229/13850 20694/37241/13850 19835/36382/13850 +f 20682/37229/13850 19835/36382/13850 19837/36384/13850 +s 1 +f 20908/37455/13855 22415/38962/13856 21552/38099/13857 +f 20908/37455/13855 21552/38099/13857 19870/36417/13858 +f 21591/38138/13859 20904/37451/13860 22408/38955/13860 +f 21591/38138/13859 22408/38955/13860 22045/38592/13860 +f 20500/37047/13861 21589/38136/13862 22044/38591/13862 +f 20500/37047/13861 22044/38591/13862 21921/38468/13862 +s 0 +f 19971/36518/13850 20895/37442/13850 20706/37253/13850 +f 19971/36518/13850 20706/37253/13850 19965/36512/13850 +s 1 +f 21923/38470/13863 22046/38593/13864 20699/37246/13865 +f 21923/38470/13863 20699/37246/13865 20380/36927/13863 +s 0 +f 20705/37252/13850 20894/37441/13850 19851/36398/13850 +f 20705/37252/13850 19851/36398/13850 19847/36394/13850 +f 19981/36528/13850 20727/37274/13850 20913/37460/13850 +f 19981/36528/13850 20913/37460/13850 19983/36530/13850 +f 20227/36774/13866 21275/37822/13866 22051/38598/13866 +f 20227/36774/13867 22051/38598/13867 21518/38065/13867 +f 21273/37820/13868 19955/36502/13868 20744/37291/13868 +f 21273/37820/13869 20744/37291/13869 22049/38596/13869 +s 1 +f 22048/38595/13870 20743/37290/13870 19875/36422/13870 +f 22048/38595/13870 19875/36422/13870 20738/37285/13871 +f 21516/38063/13872 22050/38597/13873 20740/37287/13873 +f 21516/38063/13872 20740/37287/13873 20171/36718/13874 +f 20914/37461/13850 20728/37275/13850 19866/36413/13850 +s 0 +f 20914/37461/13850 19866/36413/13850 19860/36407/13850 +f 19959/36506/13875 20886/37433/13875 22411/38958/13875 +f 19959/36506/13876 22411/38958/13876 20748/37295/13876 +s 1 +f 20243/36790/13877 21283/37830/13878 22054/38601/13879 +f 20243/36790/13877 22054/38601/13879 21512/38059/13878 +f 21281/37828/13880 19985/36532/13881 20915/37462/13882 +f 21281/37828/13880 20915/37462/13882 22052/38599/13883 +s 0 +f 22053/38600/13884 20916/37463/13884 19862/36409/13884 +f 22053/38600/13885 19862/36409/13885 20717/37264/13885 +f 21514/38061/13886 22055/38602/13886 20719/37266/13886 +f 21514/38061/13887 20719/37266/13887 20161/36708/13887 +s 1 +f 20504/37051/13888 21593/38140/13888 22056/38603/13888 +f 20504/37051/13888 22056/38603/13888 21917/38464/13889 +f 21595/38142/13890 19973/36520/13890 20905/37452/13890 +f 21595/38142/13890 20905/37452/13890 22058/38605/13891 +f 22059/38606/13892 20906/37453/13893 19869/36416/13893 +f 22059/38606/13892 19869/36416/13893 20716/37263/13892 +f 21919/38466/13894 22057/38604/13895 20714/37261/13896 +f 21919/38466/13894 20714/37261/13896 20384/36931/13894 +f 20388/36935/13897 20734/37281/13897 22060/38607/13897 +f 20388/36935/13897 22060/38607/13897 21913/38460/13897 +f 20736/37283/13898 19881/36428/13898 20761/37308/13898 +f 20736/37283/13898 20761/37308/13898 22062/38609/13899 +f 22063/38610/13900 20762/37309/13901 19892/36439/13900 +f 22063/38610/13900 19892/36439/13900 20755/37302/13901 +f 21915/38462/13902 22061/38608/13903 20753/37300/13904 +f 21915/38462/13902 20753/37300/13904 20390/36937/13904 +s 0 +f 20494/37041/13905 21584/38131/13905 22064/38611/13905 +f 20494/37041/13906 22064/38611/13906 21909/38456/13906 +f 21586/38133/13907 19956/36503/13907 20745/37292/13907 +s 1 +f 21586/38133/13908 20745/37292/13908 22066/38613/13908 +f 22067/38614/13909 20746/37293/13909 19880/36427/13910 +f 22067/38614/13909 19880/36427/13910 20735/37282/13911 +f 21911/38458/13912 22065/38612/13913 20733/37280/13914 +f 21911/38458/13912 20733/37280/13914 20386/36933/13915 +f 20747/37294/13916 22410/38957/13916 21557/38104/13917 +f 20747/37294/13916 21557/38104/13917 19883/36430/13917 +s 0 +f 19963/36510/13850 20880/37427/13850 20742/37289/13850 +f 19963/36510/13850 20742/37289/13850 19953/36500/13850 +f 20741/37288/13850 20879/37426/13850 19878/36425/13850 +f 20741/37288/13850 19878/36425/13850 19872/36419/13850 +f 19894/36441/13918 21560/38107/13918 22427/38974/13918 +f 19894/36441/13919 22427/38974/13919 20784/37331/13919 +f 20783/37330/13920 22426/38973/13920 21565/38112/13920 +f 20783/37330/13921 21565/38112/13921 19907/36454/13921 +s 1 +f 19882/36429/13922 21556/38103/13923 22419/38966/13924 +f 19882/36429/13922 22419/38966/13924 20764/37311/13922 +s 0 +f 20763/37310/13925 22418/38965/13925 21561/38108/13925 +s 1 +f 20763/37310/13926 21561/38108/13926 19895/36442/13926 +s 0 +f 19873/36420/13850 19879/36426/13850 20768/37315/13850 +f 19873/36420/13850 20768/37315/13850 20770/37317/13850 +f 20769/37316/13850 20767/37314/13850 19890/36437/13850 +f 20769/37316/13850 19890/36437/13850 19884/36431/13850 +f 19885/36432/13850 19891/36438/13850 20788/37335/13850 +f 19885/36432/13850 20788/37335/13850 20790/37337/13850 +s 1 +f 20169/36716/13927 20739/37286/13928 22071/38618/13929 +f 20169/36716/13927 22071/38618/13929 21498/38045/13930 +f 20737/37284/13931 19874/36421/13931 20772/37319/13932 +f 20737/37284/13931 20772/37319/13932 22069/38616/13933 +f 22068/38615/13934 20771/37318/13935 19887/36434/13936 +f 22068/38615/13934 19887/36434/13936 20758/37305/13937 +f 21496/38043/13938 22070/38617/13939 20760/37307/13940 +f 21496/38043/13938 20760/37307/13940 20179/36726/13941 +s 0 +f 20185/36732/13942 20778/37325/13942 22075/38622/13942 +f 20185/36732/13943 22075/38622/13943 21494/38041/13943 +s 1 +f 20777/37324/13944 19898/36445/13944 20804/37351/13945 +f 20777/37324/13944 20804/37351/13945 22074/38621/13946 +s 0 +f 22073/38620/13947 20801/37348/13947 19909/36456/13947 +f 22073/38620/13948 19909/36456/13948 20800/37347/13948 +f 21493/38040/13949 22072/38619/13949 20798/37345/13949 +f 21493/38040/13950 20798/37345/13950 20196/36743/13950 +f 20789/37336/13850 20787/37334/13850 19902/36449/13850 +f 20789/37336/13850 19902/36449/13850 19896/36443/13850 +f 19916/36463/13951 21570/38117/13951 22433/38980/13951 +s 1 +f 19916/36463/13952 22433/38980/13952 20822/37369/13952 +s 0 +f 20177/36724/13953 20759/37306/13953 22079/38626/13953 +s 1 +f 20177/36724/13954 22079/38626/13954 21490/38037/13954 +f 20757/37304/13955 19886/36433/13956 20792/37339/13957 +f 20757/37304/13955 20792/37339/13957 22077/38624/13958 +f 22076/38623/13959 20791/37338/13959 19899/36446/13960 +f 22076/38623/13959 19899/36446/13960 20779/37326/13961 +f 21488/38035/13962 22078/38625/13963 20780/37327/13964 +f 21488/38035/13962 20780/37327/13964 20187/36734/13965 +f 20392/36939/13966 20754/37301/13967 22080/38627/13967 +f 20392/36939/13966 22080/38627/13967 21905/38452/13966 +f 20756/37303/13968 19893/36440/13968 20781/37328/13969 +f 20756/37303/13968 20781/37328/13969 22082/38629/13970 +f 22083/38630/13971 20782/37329/13972 19904/36451/13973 +f 22083/38630/13971 19904/36451/13973 20774/37321/13974 +f 21907/38454/13975 22081/38628/13976 20773/37320/13977 +f 21907/38454/13975 20773/37320/13977 20394/36941/13975 +f 20821/37368/13978 22432/38979/13978 21575/38122/13978 +s 0 +f 20821/37368/13979 21575/38122/13979 19929/36476/13979 +f 19906/36453/13980 21564/38111/13980 22424/38971/13980 +f 19906/36453/13981 22424/38971/13981 20807/37354/13981 +f 20396/36943/13982 20775/37322/13982 22084/38631/13982 +f 20396/36943/13983 22084/38631/13983 21901/38448/13983 +s 1 +f 20776/37323/13984 19905/36452/13985 20806/37353/13986 +f 20776/37323/13984 20806/37353/13986 22085/38632/13987 +s 0 +f 22086/38633/13988 20808/37355/13988 19918/36465/13988 +f 22086/38633/13989 19918/36465/13989 20793/37340/13989 +f 21902/38449/13990 22087/38634/13990 20795/37342/13990 +f 21902/38449/13991 20795/37342/13991 20397/36944/13991 +f 20805/37352/13992 22423/38970/13992 21571/38118/13992 +f 20805/37352/13993 21571/38118/13993 19917/36464/13993 +f 19897/36444/13850 19903/36450/13850 20811/37358/13850 +f 19897/36444/13850 20811/37358/13850 20803/37350/13850 +f 20802/37349/13850 20810/37357/13850 19912/36459/13850 +f 20802/37349/13850 19912/36459/13850 19910/36457/13850 +f 19928/36475/13994 21574/38121/13994 22441/38988/13994 +f 19928/36475/13995 22441/38988/13995 20842/37389/13995 +f 20841/37388/13996 22440/38987/13996 21578/38125/13996 +f 20841/37388/13997 21578/38125/13997 19940/36487/13997 +f 19848/36395/13850 19853/36400/13850 20912/37459/13850 +f 19848/36395/13850 20912/37459/13850 20730/37277/13850 +f 19911/36458/13850 19913/36460/13850 20826/37373/13850 +f 19911/36458/13850 20826/37373/13850 20832/37379/13850 +f 20831/37378/13850 20825/37372/13850 19924/36471/13850 +f 20831/37378/13850 19924/36471/13850 19922/36469/13850 +f 19923/36470/13850 19925/36472/13850 20846/37393/13850 +f 19923/36470/13850 20846/37393/13850 20852/37399/13850 +s 1 +f 20194/36741/13998 20797/37344/13999 22089/38636/14000 +f 20194/36741/13998 22089/38636/14000 21479/38026/13999 +f 20799/37346/14001 19908/36455/14002 20830/37377/14001 +f 20799/37346/14001 20830/37377/14001 22091/38638/14001 +f 22090/38637/14003 20829/37376/14004 19921/36468/14005 +f 22090/38637/14003 19921/36468/14005 20820/37367/14003 +f 21477/38024/14006 22088/38635/14007 20818/37365/14007 +f 21477/38024/14006 20818/37365/14007 20204/36751/14008 +f 20399/36946/14009 20796/37343/14010 22094/38641/14011 +f 20399/36946/14009 22094/38641/14011 21896/38443/14011 +f 20794/37341/14012 19919/36466/14013 20823/37370/14014 +f 20794/37341/14012 20823/37370/14014 22092/38639/14014 +f 22093/38640/14015 20824/37371/14016 19930/36477/14016 +f 22093/38640/14015 19930/36477/14016 20813/37360/14017 +f 21898/38445/14018 22095/38642/14018 20815/37362/14019 +f 21898/38445/14018 20815/37362/14019 20401/36948/14020 +f 20664/37211/14021 22029/38576/14021 22097/38644/14022 +f 20664/37211/14021 22097/38644/14022 21471/38018/14021 +f 22031/38578/14023 20646/37193/14023 21029/37576/14024 +f 22031/38578/14023 21029/37576/14024 22099/38646/14024 +f 22098/38645/14025 21028/37575/14026 20031/36578/14027 +f 22098/38645/14025 20031/36578/14027 21027/37574/14026 +f 21469/38016/14028 22096/38643/14029 21026/37573/14028 +f 21469/38016/14028 21026/37573/14028 20276/36823/14030 +s 0 +f 20851/37398/13850 20845/37392/13850 19937/36484/13850 +f 20851/37398/13850 19937/36484/13850 19935/36482/13850 +f 19838/36385/13850 19836/36383/13850 20712/37259/13850 +f 19838/36385/13850 20712/37259/13850 20854/37401/13850 +s 1 +f 20202/36749/14031 20817/37364/14031 22101/38648/14032 +f 20202/36749/14031 22101/38648/14032 21467/38014/14033 +f 20819/37366/14034 19920/36467/14035 20850/37397/14036 +f 20819/37366/14034 20850/37397/14036 22103/38650/14034 +s 0 +f 22102/38649/14037 20849/37396/14037 19932/36479/14037 +s 1 +f 22102/38649/14038 19932/36479/14038 20839/37386/14038 +s 0 +f 21465/38012/14039 22100/38647/14039 20837/37384/14039 +f 21465/38012/14040 20837/37384/14040 20210/36757/14040 +s 1 +f 20403/36950/14041 20816/37363/14041 22106/38653/14041 +f 20403/36950/14041 22106/38653/14041 21892/38439/14042 +f 20814/37361/14043 19931/36478/14044 20843/37390/14045 +f 20814/37361/14043 20843/37390/14045 22104/38651/14045 +s 0 +f 22105/38652/14046 20844/37391/14046 19943/36490/14046 +s 1 +f 22105/38652/14047 19943/36490/14047 20834/37381/14047 +s 0 +f 21894/38441/14048 22107/38654/14048 20836/37383/14048 +f 21894/38441/14049 20836/37383/14049 20407/36954/14049 +f 20853/37400/13850 20711/37258/13850 19950/36497/13850 +f 20853/37400/13850 19950/36497/13850 19944/36491/13850 +f 20676/37223/13854 21537/38084/13854 22443/38990/13854 +f 20676/37223/13854 22443/38990/13854 22111/38658/13854 +s 1 +f 20700/37247/14050 22047/38594/14050 22409/38956/14051 +f 22409/38956/14051 21551/38098/14051 19859/36406/14052 +f 22409/38956/14051 19859/36406/14052 20700/37247/14050 +s 0 +f 22110/38657/13854 22442/38989/13854 20865/37412/13854 +f 22110/38657/13854 20865/37412/13854 21582/38129/13854 +f 20374/36921/14053 20673/37220/14053 22109/38656/14053 +f 20374/36921/14053 22109/38656/14053 21891/38438/14053 +f 21889/38436/14054 22108/38655/14054 21581/38128/14054 +f 21889/38436/14055 21581/38128/14055 20492/37039/14055 +s 1 +f 20139/36686/14056 20680/37227/14057 22114/38661/14056 +f 20139/36686/14056 22114/38661/14056 21452/37999/14056 +s 0 +f 20678/37225/14058 19840/36387/14058 20855/37402/14058 +f 20678/37225/14059 20855/37402/14059 22112/38659/14059 +s 1 +f 22113/38660/14060 20856/37403/14061 19946/36493/14062 +f 22113/38660/14060 19946/36493/14062 21268/37815/14063 +f 21454/38001/14064 22115/38662/14064 21270/37817/14064 +s 0 +f 21454/38001/14065 21270/37817/14065 20217/36764/14065 +f 20869/37416/13850 20751/37298/13850 19962/36509/13850 +f 20869/37416/13850 19962/36509/13850 19952/36499/13850 +f 19871/36418/14066 21553/38100/14066 22446/38993/14066 +s 1 +f 19871/36418/14067 22446/38993/14067 20875/37422/14067 +f 20876/37423/14068 22447/38994/14068 20885/37432/14068 +s 0 +f 20876/37423/14069 20885/37432/14069 19958/36505/14069 +f 19951/36498/13850 20860/37407/13850 20890/37437/13850 +f 19951/36498/13850 20890/37437/13850 19945/36492/13850 +f 20382/36929/14070 20713/37260/14070 22117/38664/14070 +f 20382/36929/14071 22117/38664/14071 21887/38434/14071 +s 1 +f 20715/37262/14072 19868/36415/14073 20874/37421/14074 +f 20715/37262/14072 20874/37421/14074 22119/38666/14075 +s 0 +f 22118/38665/14076 20873/37420/14076 19957/36504/14076 +f 22118/38665/14077 19957/36504/14077 21587/38134/14077 +f 21885/38432/14078 22116/38663/14078 21585/38132/14078 +f 21885/38432/14079 21585/38132/14079 20496/37043/14079 +s 1 +f 20163/36710/14080 20720/37267/14080 22122/38669/14080 +s 0 +f 20163/36710/14081 22122/38669/14081 21444/37991/14081 +s 1 +f 20718/37265/14082 19863/36410/14082 20871/37418/14083 +f 20718/37265/14082 20871/37418/14083 22120/38667/14084 +s 0 +f 22121/38668/14085 20872/37419/14085 19954/36501/14085 +f 22121/38668/14086 19954/36501/14086 21272/37819/14086 +f 21446/37993/14087 22123/38670/14087 21274/37821/14087 +f 21446/37993/14088 21274/37821/14088 20225/36772/14088 +f 20889/37436/13850 20859/37406/13850 19970/36517/13850 +f 20889/37436/13850 19970/36517/13850 19964/36511/13850 +s 1 +f 21583/38130/14089 20866/37413/14090 22450/38997/14091 +f 21583/38130/14089 22450/38997/14091 22126/38673/14092 +f 22127/38674/14093 22451/38998/14093 20901/37448/14094 +f 22127/38674/14093 20901/37448/14094 21590/38137/14093 +s 0 +f 20490/37037/14095 21580/38127/14095 22125/38672/14095 +f 20490/37037/14096 22125/38672/14096 21883/38430/14096 +s 1 +f 21881/38428/14097 22124/38671/14097 21588/38135/14097 +f 21881/38428/14097 21588/38135/14097 20498/37045/14097 +f 20219/36766/14098 21271/37818/14098 22130/38677/14098 +s 0 +f 20219/36766/14099 22130/38677/14099 21436/37983/14099 +f 21269/37816/14100 19947/36494/14100 20891/37438/14100 +f 21269/37816/14101 20891/37438/14101 22128/38675/14101 +s 1 +f 22129/38676/14102 20892/37439/14103 19966/36513/14102 +f 22129/38676/14102 19966/36513/14102 21276/37823/14102 +f 21438/37985/14104 22131/38678/14104 21278/37825/14105 +f 21438/37985/14104 21278/37825/14105 20233/36780/14104 +f 20238/36785/14106 20917/37464/14106 22133/38680/14107 +f 20238/36785/14106 22133/38680/14107 21435/37982/14106 +f 20919/37466/14108 19977/36524/14108 20941/37488/14108 +f 20919/37466/14108 20941/37488/14108 22135/38682/14108 +f 22134/38681/14109 20940/37487/14109 19998/36545/14110 +f 22134/38681/14109 19998/36545/14110 20938/37485/14110 +s 0 +f 21433/37980/14111 22132/38679/14111 20936/37483/14111 +s 1 +f 21433/37980/14112 20936/37483/14112 20250/36797/14112 +f 20155/36702/14113 20704/37251/14114 22138/38685/14115 +f 20155/36702/14113 22138/38685/14115 21428/37975/14116 +f 20702/37249/14117 19850/36397/14118 20731/37278/14119 +f 20702/37249/14117 20731/37278/14119 22136/38683/14118 +f 22137/38684/14120 20732/37279/14120 19984/36531/14121 +f 22137/38684/14120 19984/36531/14121 21280/37827/14121 +f 21430/37977/14122 22139/38686/14123 21282/37829/14124 +f 21430/37977/14122 21282/37829/14124 20241/36788/14125 +s 0 +f 20729/37276/13850 20909/37456/13850 19979/36526/13850 +f 20729/37276/13850 19979/36526/13850 19982/36529/13850 +s 1 +f 19857/36404/14126 21548/38095/14127 22459/39006/14126 +f 19857/36404/14126 22459/39006/14126 20724/37271/14126 +f 20722/37269/14128 22458/39005/14128 20922/37469/14128 +f 20722/37269/14128 20922/37469/14128 19976/36523/14128 +s 0 +f 20036/36583/14129 21608/38155/14129 21020/37567/14129 +s 1 +f 20252/36799/14130 20937/37484/14130 22140/38687/14131 +f 20252/36799/14130 22140/38687/14131 21425/37972/14131 +f 20939/37486/14132 19999/36546/14132 20972/37519/14133 +f 20939/37486/14132 20972/37519/14133 22142/38689/14132 +f 22143/38690/14134 20973/37520/14135 20014/36561/14136 +f 22143/38690/14134 20014/36561/14136 20970/37517/14137 +f 21427/37974/14138 22141/38688/14139 20968/37515/14140 +f 21427/37974/14138 20968/37515/14140 20259/36806/14141 +f 19856/36403/14142 20723/37270/14142 22147/38694/14142 +f 19856/36403/14142 22147/38694/14142 20949/37496/14142 +f 20721/37268/14143 19974/36521/14143 20947/37494/14143 +f 20721/37268/14143 20947/37494/14143 22146/38693/14144 +f 22144/38691/14145 20946/37493/14145 19997/36544/14146 +f 22144/38691/14145 19997/36544/14146 20931/37478/14147 +f 20948/37495/14148 22145/38692/14149 20932/37479/14148 +f 20948/37495/14148 20932/37479/14148 19991/36538/14148 +s 0 +f 19980/36527/13850 20910/37457/13850 22148/38695/13850 +f 19980/36527/13850 22148/38695/13850 20942/37489/13850 +f 20911/37458/13850 19852/36399/13850 20953/37500/13850 +f 20911/37458/13850 20953/37500/13850 22150/38697/13850 +f 22149/38696/13850 20952/37499/13850 19987/36534/13850 +f 22149/38696/13850 19987/36534/13850 20935/37482/13850 +f 20943/37490/13850 22149/38696/13850 20935/37482/13850 +f 20943/37490/13850 20935/37482/13850 20001/36548/13850 +s 1 +f 20378/36925/14150 20698/37245/14151 22153/38700/14150 +f 20378/36925/14150 22153/38700/14150 21877/38424/14150 +f 20697/37244/14152 19858/36405/14153 20951/37498/14154 +f 20697/37244/14152 20951/37498/14154 22152/38699/14152 +f 22151/38698/14155 20950/37497/14155 19993/36540/14155 +f 22151/38698/14155 19993/36540/14155 20926/37473/14155 +f 21878/38425/14156 22154/38701/14156 20927/37474/14157 +f 21878/38425/14156 20927/37474/14157 20425/36972/14156 +s 0 +f 20617/37164/13854 21984/38531/13854 22157/38704/13854 +f 20617/37164/13854 22157/38704/13854 21937/38484/13854 +f 21986/38533/13854 20615/37162/13854 21007/37554/13854 +f 21986/38533/13854 21007/37554/13854 22158/38705/13854 +f 22155/38702/13854 21006/37553/13854 20025/36572/13854 +f 22155/38702/13854 20025/36572/13854 20992/37539/13854 +f 21936/38483/13854 22156/38703/13854 20993/37540/13854 +f 21936/38483/13854 20993/37540/13854 20021/36568/13854 +f 19990/36537/13854 20929/37476/13854 22160/38707/13854 +f 19990/36537/13854 22160/38707/13854 20980/37527/13854 +f 20930/37477/13854 19996/36543/13854 20979/37526/13854 +f 20930/37477/13854 20979/37526/13854 22161/38708/13854 +f 22159/38706/13854 20978/37525/13854 20012/36559/13854 +f 22159/38706/13854 20012/36559/13854 20960/37507/13854 +f 20981/37528/13854 22162/38709/13854 20963/37510/13854 +f 20981/37528/13854 20963/37510/13854 20007/36554/13854 +f 20000/36547/13850 20934/37481/13850 22165/38712/13850 +f 20000/36547/13850 22165/38712/13850 20975/37522/13850 +f 20933/37480/13850 19986/36533/13850 20984/37531/13850 +f 20933/37480/13850 20984/37531/13850 22164/38711/13850 +f 22166/38713/13850 20985/37532/13850 20003/36550/13850 +s 1 +f 22166/38713/13850 20003/36550/13850 20967/37514/13850 +s 0 +f 20974/37521/13850 22163/38710/13850 20964/37511/13850 +f 20974/37521/13850 20964/37511/13850 20016/36563/13850 +s 1 +f 20427/36974/14158 20928/37475/14159 22169/38716/14158 +f 20427/36974/14158 22169/38716/14158 21872/38419/14158 +f 20925/37472/14160 19992/36539/14161 20983/37530/14161 +f 20925/37472/14160 20983/37530/14161 22168/38715/14161 +f 22167/38714/14162 20982/37529/14163 20009/36556/14164 +f 22167/38714/14162 20009/36556/14164 20957/37504/14162 +f 21874/38421/14165 22170/38717/14166 20958/37505/14167 +f 21874/38421/14165 20958/37505/14167 20429/36976/14167 +s 0 +f 20434/36981/14168 20989/37536/14168 22173/38720/14168 +s 1 +f 20434/36981/14168 22173/38720/14168 21871/38418/14168 +s 0 +f 20990/37537/14169 20023/36570/14169 20995/37542/14169 +f 20990/37537/14170 20995/37542/14170 22174/38721/14170 +f 22171/38718/14170 20994/37541/14170 20026/36573/14170 +f 22171/38718/14168 20026/36573/14168 21606/38153/14168 +f 21868/38415/14168 22172/38719/14168 21607/38154/14168 +f 21868/38415/14168 21607/38154/14168 20515/37062/14168 +f 20627/37174/13850 21981/38528/13850 22177/38724/13850 +f 20627/37174/13850 22177/38724/13850 21947/38494/13850 +f 21982/38529/13850 20622/37169/13850 21013/37560/13850 +f 21982/38529/13850 21013/37560/13850 22178/38725/13850 +f 22176/38723/13850 21012/37559/13850 20018/36565/13850 +f 22176/38723/13850 20018/36565/13850 20997/37544/13850 +f 21946/38493/13850 22175/38722/13850 20996/37543/13850 +f 21946/38493/13850 20996/37543/13850 20028/36575/13850 +s 1 +f 20643/37190/14171 21979/38526/14171 22182/38729/14172 +f 20643/37190/14171 22182/38729/14172 21866/38413/14173 +f 21977/38524/14174 20620/37167/14174 21938/38485/14174 +f 21977/38524/14174 21938/38485/14174 22179/38726/14174 +f 22180/38727/14175 21939/38486/14175 20022/36569/14175 +f 22180/38727/14175 20022/36569/14175 20988/37535/14176 +f 21865/38412/14177 22181/38728/14177 20991/37538/14177 +f 21865/38412/14177 20991/37538/14177 20436/36983/14177 +f 20632/37179/14178 21973/38520/14178 22183/38730/14178 +f 20632/37179/14178 22183/38730/14178 21405/37952/14179 +f 21974/38521/14180 20625/37172/14181 21944/38491/14181 +f 21974/38521/14180 21944/38491/14181 22184/38731/14181 +f 22185/38732/14182 21945/38492/14183 20027/36574/14182 +f 22185/38732/14182 20027/36574/14182 21000/37547/14182 +f 21406/37953/14184 22186/38733/14184 21001/37548/14185 +f 21406/37953/14184 21001/37548/14185 20265/36812/14184 +f 22019/38566/14186 22436/38983/14187 21033/37580/14188 +f 22019/38566/14186 21033/37580/14188 20650/37197/14186 +s 0 +f 21021/37568/14189 21609/38156/14189 20518/37065/14189 +f 21021/37568/14189 20518/37065/14189 20438/36985/14189 +s 1 +f 20669/37216/14190 22026/38573/14191 22190/38737/14192 +f 20669/37216/14190 22190/38737/14192 21862/38409/14192 +f 22024/38571/14193 20651/37198/14193 21035/37582/14194 +f 22024/38571/14193 21035/37582/14194 22189/38736/14193 +f 22188/38735/14195 21032/37579/14196 20037/36584/14197 +f 22188/38735/14195 20037/36584/14197 21023/37570/14195 +f 21861/38408/14198 22187/38734/14198 21022/37569/14199 +f 21861/38408/14198 21022/37569/14199 20440/36987/14198 +f 21034/37581/14200 22437/38984/14200 21611/38158/14201 +f 21034/37581/14200 21611/38158/14201 20038/36585/14200 +s 0 +f 19841/36388/13850 19846/36393/13850 21051/37598/13850 +f 19841/36388/13850 21051/37598/13850 21053/37600/13850 +f 20654/37201/13850 21997/38544/13850 21030/37577/13850 +s 1 +f 20654/37201/13850 21030/37577/13850 20648/37195/13850 +s 0 +f 21031/37578/13850 21998/38545/13850 20035/36582/13850 +f 21031/37578/13850 20035/36582/13850 20032/36579/13850 +f 21614/38161/13854 21616/38163/13854 22474/39021/13854 +f 21614/38161/13854 22474/39021/13854 22201/38748/13854 +f 22213/38760/13854 22482/39029/13854 21633/38180/13854 +f 22213/38760/13854 21633/38180/13854 21631/38178/13854 +f 21542/38089/13854 21544/38091/13854 22470/39017/13854 +f 21542/38089/13854 22470/39017/13854 22193/38740/13854 +f 22202/38749/13854 22475/39022/13854 21625/38172/13854 +f 22202/38749/13854 21625/38172/13854 21623/38170/13854 +f 21622/38169/13854 21624/38171/13854 22483/39030/13854 +f 21622/38169/13854 22483/39030/13854 22214/38761/13854 +f 20450/36997/14202 21540/38087/14202 22192/38739/14202 +f 20450/36997/14203 22192/38739/14203 21859/38406/14203 +f 21857/38404/14204 22191/38738/14204 21613/38160/14204 +f 21857/38404/14205 21613/38160/14205 20524/37071/14205 +f 20147/36694/14206 20692/37239/14206 22197/38744/14206 +f 20147/36694/14207 22197/38744/14207 21392/37939/14207 +f 20690/37237/14208 19843/36390/14208 21054/37601/14208 +f 20690/37237/14209 21054/37601/14209 22195/38742/14209 +f 22196/38743/14210 21055/37602/14210 20045/36592/14210 +f 22196/38743/14211 20045/36592/14211 21044/37591/14211 +f 21394/37941/14212 22198/38745/14212 21046/37593/14212 +s 1 +f 21394/37941/14213 21046/37593/14213 20281/36828/14213 +s 0 +f 20067/36614/13850 20065/36612/13850 21114/37661/13850 +f 20067/36614/13850 21114/37661/13850 21116/37663/13850 +f 20044/36591/13850 20042/36589/13850 21066/37613/13850 +f 20044/36591/13850 21066/37613/13850 21068/37615/13850 +f 20522/37069/14214 21612/38159/14214 22200/38747/14214 +f 20522/37069/14215 22200/38747/14215 21855/38402/14215 +s 1 +f 21853/38400/14216 22199/38746/14217 21621/38168/14218 +f 21853/38400/14216 21621/38168/14218 20532/37079/14219 +s 0 +f 20283/36830/14220 21047/37594/14220 22205/38752/14220 +f 20283/36830/14221 22205/38752/14221 21384/37931/14221 +f 21045/37592/14222 20046/36593/14222 21070/37617/14222 +f 21045/37592/14223 21070/37617/14223 22203/38750/14223 +f 22204/38751/14224 21071/37618/14224 20053/36600/14224 +f 22204/38751/14225 20053/36600/14225 21060/37607/14225 +s 1 +f 21386/37933/14226 22206/38753/14226 21062/37609/14226 +s 0 +f 21386/37933/14227 21062/37609/14227 20289/36836/14227 +f 21069/37616/13850 21067/37614/13850 20050/36597/13850 +f 21069/37616/13850 20050/36597/13850 20052/36599/13850 +f 20051/36598/13850 20049/36596/13850 21082/37629/13850 +f 20051/36598/13850 21082/37629/13850 21084/37631/13850 +s 1 +f 20299/36846/14228 21079/37626/14228 22209/38756/14228 +f 20299/36846/14228 22209/38756/14228 21380/37927/14229 +f 21077/37624/14230 20062/36609/14231 21098/37645/14231 +f 21077/37624/14230 21098/37645/14231 22207/38754/14230 +s 0 +f 22208/38755/14232 21099/37646/14232 20070/36617/14232 +f 22208/38755/14233 20070/36617/14233 21093/37640/14233 +f 21382/37929/14234 22210/38757/14234 21095/37642/14234 +f 21382/37929/14235 21095/37642/14235 20307/36854/14235 +s 1 +f 20530/37077/14236 21620/38167/14236 22212/38759/14237 +f 20530/37077/14236 22212/38759/14237 21851/38398/14237 +f 21849/38396/14238 22211/38758/14239 21629/38176/14240 +f 21849/38396/14238 21629/38176/14240 20540/37087/14241 +f 20291/36838/14242 21063/37610/14242 22217/38764/14243 +f 20291/36838/14242 22217/38764/14243 21372/37919/14243 +f 21061/37608/14244 20054/36601/14245 21086/37633/14246 +f 21061/37608/14244 21086/37633/14246 22215/38762/14246 +f 22216/38763/14247 21087/37634/14248 20061/36608/14249 +f 22216/38763/14247 20061/36608/14249 21076/37623/14249 +f 21374/37921/14250 22218/38765/14251 21078/37625/14252 +f 21374/37921/14250 21078/37625/14252 20297/36844/14253 +s 0 +f 21085/37632/13850 21083/37630/13850 20058/36605/13850 +f 21085/37632/13850 20058/36605/13850 20060/36607/13850 +f 21638/38185/13854 21640/38187/13854 22486/39033/13854 +f 21638/38185/13854 22486/39033/13854 22229/38776/13854 +f 22224/38771/13854 22493/39040/13854 21656/38203/13854 +f 22224/38771/13854 21656/38203/13854 21652/38199/13854 +f 20059/36606/13850 20057/36604/13850 21102/37649/13850 +f 20059/36606/13850 21102/37649/13850 21096/37643/13850 +f 21097/37644/13850 21103/37650/13850 20066/36613/13850 +f 21097/37644/13850 20066/36613/13850 20068/36615/13850 +f 21630/38177/13854 21632/38179/13854 22478/39025/13854 +f 21630/38177/13854 22478/39025/13854 22221/38768/13854 +f 22229/38776/13854 22486/39033/13854 21648/38195/13854 +f 22229/38776/13854 21648/38195/13854 21646/38193/13854 +f 22222/38769/13854 22479/39026/13854 21641/38188/13854 +f 22222/38769/13854 21641/38188/13854 21639/38186/13854 +s 1 +f 20538/37085/14254 21628/38175/14255 22219/38766/14254 +f 20538/37085/14254 22219/38766/14254 21846/38393/14256 +s 0 +f 21847/38394/14257 22220/38767/14257 21636/38183/14257 +f 21847/38394/14258 21636/38183/14258 20546/37093/14258 +s 1 +f 20556/37103/14259 21645/38192/14260 22223/38770/14261 +f 20556/37103/14259 22223/38770/14261 21841/38388/14261 +s 0 +f 21659/38206/13854 21665/38212/13854 22500/39047/13854 +f 21659/38206/13854 22500/39047/13854 22247/38794/13854 +s 1 +f 21842/38389/14262 22226/38773/14263 21653/38200/14264 +f 21842/38389/14262 21653/38200/14264 20561/37108/14265 +f 20548/37095/14266 21637/38184/14266 22227/38774/14267 +f 20548/37095/14266 22227/38774/14267 21837/38384/14268 +f 21839/38386/14269 22228/38775/14270 21644/38191/14271 +f 21839/38386/14269 21644/38191/14271 20554/37101/14271 +f 20305/36852/14272 21094/37641/14273 22233/38780/14274 +f 20305/36852/14272 22233/38780/14274 21358/37905/14274 +f 21092/37639/14275 20069/36616/14275 21119/37666/14276 +f 21092/37639/14275 21119/37666/14276 22231/38778/14275 +f 22230/38777/14277 21118/37665/14278 20078/36625/14277 +f 22230/38777/14277 20078/36625/14277 21109/37656/14279 +f 21356/37903/14280 22232/38779/14281 21111/37658/14282 +f 21356/37903/14280 21111/37658/14282 20315/36862/14283 +s 0 +f 21117/37664/13850 21115/37662/13850 20074/36621/13850 +f 21117/37664/13850 20074/36621/13850 20076/36623/13850 +f 20075/36622/13850 20073/36620/13850 21129/37676/13850 +f 20075/36622/13850 21129/37676/13850 21132/37679/13850 +f 20322/36869/14284 21124/37671/14284 22235/38782/14284 +f 20322/36869/14285 22235/38782/14285 21355/37902/14285 +s 1 +f 21125/37672/14286 20083/36630/14286 21145/37692/14286 +s 0 +f 21125/37672/14287 21145/37692/14287 22237/38784/14287 +s 1 +f 22236/38783/14288 21144/37691/14289 20092/36639/14290 +f 22236/38783/14288 20092/36639/14290 21143/37690/14291 +s 0 +f 21353/37900/14292 22234/38781/14292 21141/37688/14292 +f 21353/37900/14293 21141/37688/14293 20332/36879/14293 +s 1 +f 20313/36860/14294 21110/37657/14294 22241/38788/14295 +f 20313/36860/14294 22241/38788/14295 21350/37897/14295 +f 21108/37655/14296 20077/36624/14297 21135/37682/14297 +f 21108/37655/14296 21135/37682/14297 22240/38787/14297 +f 22238/38785/14298 21134/37681/14299 20086/36633/14300 +f 22238/38785/14298 20086/36633/14300 21126/37673/14301 +f 21348/37895/14302 22239/38786/14302 21127/37674/14302 +f 21348/37895/14302 21127/37674/14302 20323/36870/14302 +s 0 +f 21133/37680/13850 21130/37677/13850 20079/36626/13850 +f 21133/37680/13850 20079/36626/13850 20084/36631/13850 +f 21647/38194/13854 21649/38196/13854 22494/39041/13854 +f 21647/38194/13854 22494/39041/13854 22225/38772/13854 +s 1 +f 21666/38213/14303 21672/38219/14304 22508/39055/14305 +f 21666/38213/14303 22508/39055/14305 22259/38806/14305 +f 22258/38805/14306 22507/39054/14307 21681/38228/14308 +f 22258/38805/14306 21681/38228/14308 21675/38222/14308 +s 0 +f 20085/36632/13850 20080/36627/13850 21149/37696/13850 +f 20085/36632/13850 21149/37696/13850 21147/37694/13850 +f 21146/37693/13850 21148/37695/13850 20088/36635/13850 +f 21146/37693/13850 20088/36635/13850 20094/36641/13850 +f 21652/38199/13854 21656/38203/13854 22492/39039/13854 +f 21652/38199/13854 22492/39039/13854 22243/38790/13854 +f 22246/38793/13854 22499/39046/13854 21673/38220/13854 +f 22246/38793/13854 21673/38220/13854 21667/38214/13854 +f 22242/38789/13854 22491/39038/13854 21664/38211/13854 +f 22242/38789/13854 21664/38211/13854 21658/38205/13854 +f 20563/37110/14309 21654/38201/14309 22244/38791/14309 +f 20563/37110/14310 22244/38791/14310 21832/38379/14310 +f 21834/38381/14311 22245/38792/14311 21660/38207/14311 +f 21834/38381/14312 21660/38207/14312 20569/37116/14312 +f 20598/37145/14313 20354/36901/14313 21308/37855/14313 +f 20598/37145/14313 21308/37855/14313 21808/38355/14313 +f 20093/36640/13850 20087/36634/13850 21160/37707/13850 +f 20093/36640/13850 21160/37707/13850 21166/37713/13850 +f 20571/37118/14314 21661/38208/14314 22248/38795/14314 +f 20571/37118/14315 22248/38795/14315 21828/38375/14315 +f 21830/38377/14316 22249/38796/14316 21668/38215/14316 +f 21830/38377/14317 21668/38215/14317 20577/37124/14317 +f 20330/36877/14318 21140/37687/14318 22251/38798/14318 +f 20330/36877/14319 22251/38798/14319 21339/37886/14319 +f 21142/37689/14320 20091/36638/14320 21165/37712/14320 +f 21142/37689/14321 21165/37712/14321 22253/38800/14321 +f 22252/38799/14322 21164/37711/14322 20100/36647/14322 +f 22252/38799/14323 20100/36647/14323 21159/37706/14323 +f 21337/37884/14324 22250/38797/14324 21157/37704/14324 +f 21337/37884/14324 21157/37704/14324 20340/36887/14324 +f 21167/37714/13850 21161/37708/13850 20095/36642/13850 +f 21167/37714/13850 20095/36642/13850 20101/36648/13850 +s 1 +f 20102/36649/14325 20096/36643/14326 21176/37723/14326 +f 20102/36649/14325 21176/37723/14326 21182/37729/14327 +f 20346/36893/14328 21172/37719/14328 22255/38802/14329 +f 20346/36893/14328 22255/38802/14329 21335/37882/14330 +f 21175/37722/14331 20108/36655/14331 21193/37740/14331 +f 21175/37722/14331 21193/37740/14331 22257/38804/14332 +s 0 +f 22256/38803/14333 21192/37739/14333 20116/36663/14333 +s 1 +f 22256/38803/14334 20116/36663/14334 21191/37738/14334 +f 21334/37881/14335 22254/38801/14336 21189/37736/14335 +f 21334/37881/14335 21189/37736/14335 20356/36903/14337 +f 20579/37126/14338 21669/38216/14339 22260/38807/14340 +f 20579/37126/14338 22260/38807/14340 21824/38371/14341 +f 21826/38373/14342 22261/38808/14343 21676/38223/14343 +f 21826/38373/14342 21676/38223/14343 20585/37132/14344 +f 20338/36885/14345 21156/37703/14346 22263/38810/14347 +f 20338/36885/14345 22263/38810/14347 21327/37874/14345 +f 21158/37705/14348 20099/36646/14349 21180/37727/14350 +f 21158/37705/14348 21180/37727/14350 22264/38811/14351 +f 22265/38812/14352 21181/37728/14352 20107/36654/14352 +f 22265/38812/14352 20107/36654/14352 21174/37721/14353 +f 21325/37872/14354 22262/38809/14355 21173/37720/14355 +f 21325/37872/14354 21173/37720/14355 20348/36895/14356 +f 21183/37730/14357 21177/37724/14358 20103/36650/14359 +f 21183/37730/14357 20103/36650/14359 20109/36656/14360 +s 0 +f 21697/38244/13854 21227/37774/13854 22512/39059/13854 +f 21697/38244/13854 22512/39059/13854 22271/38818/13854 +s 1 +f 20110/36657/14361 20104/36651/14361 21197/37744/14362 +f 20110/36657/14361 21197/37744/14362 21195/37742/14363 +s 0 +f 20357/36904/14364 20363/36910/14364 21207/37754/14364 +f 20357/36904/14364 21207/37754/14364 21201/37748/14364 +s 1 +f 21194/37741/14365 21196/37743/14366 20112/36659/14367 +f 21194/37741/14365 20112/36659/14367 20118/36665/14367 +f 21674/38221/14368 21680/38227/14368 22503/39050/14368 +f 21674/38221/14368 22503/39050/14368 22266/38813/14368 +s 0 +f 22270/38817/13854 22511/39058/13854 21694/38241/13854 +f 22270/38817/13854 21694/38241/13854 21690/38237/13854 +s 1 +f 22267/38814/14369 22504/39051/14369 21688/38235/14370 +f 22267/38814/14369 21688/38235/14370 21682/38229/14371 +f 20587/37134/14372 21677/38224/14372 22268/38815/14373 +f 20587/37134/14372 22268/38815/14373 21820/38367/14374 +f 21821/38368/14375 22269/38816/14376 21684/38231/14376 +f 21821/38368/14375 21684/38231/14376 20593/37140/14377 +s 0 +f 20125/36672/13850 21217/37764/13850 21215/37762/13850 +f 20125/36672/13850 21215/37762/13850 20131/36678/13850 +f 21691/38238/14378 21695/38242/14378 20607/37154/14378 +f 21691/38238/14364 20607/37154/14364 20601/37148/14364 +s 1 +f 20610/37157/14379 21699/38246/14379 22273/38820/14379 +f 20610/37157/14379 22273/38820/14379 21818/38365/14380 +f 21816/38363/14381 22272/38819/14382 21692/38239/14382 +f 21816/38363/14381 21692/38239/14382 20603/37150/14382 +f 20368/36915/14383 21301/37848/14383 22274/38821/14383 +f 20368/36915/14383 22274/38821/14383 21313/37860/14383 +f 21302/37849/14384 20129/36676/14384 21213/37760/14385 +f 21302/37849/14384 21213/37760/14385 22277/38824/14385 +f 22276/38823/14386 21212/37759/14387 20122/36669/14388 +f 22276/38823/14386 20122/36669/14388 21205/37752/14387 +f 21314/37861/14389 22275/38822/14390 21204/37751/14390 +f 21314/37861/14389 21204/37751/14390 20361/36908/14390 +s 0 +f 21214/37761/13850 21216/37763/13850 20119/36666/13850 +f 21214/37761/13850 20119/36666/13850 20123/36670/13850 +f 20117/36664/14391 20111/36658/14391 21209/37756/14391 +f 20117/36664/14392 21209/37756/14392 21223/37770/14392 +f 21222/37769/14393 21208/37755/14393 20126/36673/14393 +f 21222/37769/14393 20126/36673/14393 20132/36679/14393 +f 21683/38230/14394 21689/38236/14394 22515/39062/14394 +f 21683/38230/14395 22515/39062/14395 22282/38829/14395 +f 20355/36902/14396 21188/37735/14396 22278/38825/14396 +f 20355/36902/14397 22278/38825/14397 21310/37857/14397 +f 21190/37737/14398 20115/36662/14398 21221/37768/14398 +f 21190/37737/14399 21221/37768/14399 22281/38828/14399 +f 22280/38827/14400 21220/37767/14400 20130/36677/14400 +f 22280/38827/14401 20130/36677/14401 21303/37850/14401 +f 21311/37858/14402 22279/38826/14402 21300/37847/14402 +f 21311/37858/14402 21300/37847/14402 20367/36914/14402 +f 20594/37141/14403 21685/38232/14403 22284/38831/14403 +f 20594/37141/14404 22284/38831/14404 21812/38359/14404 +f 22283/38830/14405 22516/39063/14405 21226/37773/14405 +f 22283/38830/14405 21226/37773/14405 21696/38243/14405 +f 21813/38360/14406 22285/38832/14406 21698/38245/14406 +f 21813/38360/14406 21698/38245/14406 20609/37156/14406 +f 20113/36660/14407 21184/37731/14407 22287/38834/14407 +f 20113/36660/14408 22287/38834/14408 21211/37758/14408 +f 21186/37733/14409 20349/36896/14409 21305/37852/14409 +f 21186/37733/14410 21305/37852/14410 22289/38836/14410 +f 22288/38835/14411 21304/37851/14411 20369/36916/14411 +f 22288/38835/14412 20369/36916/14412 21230/37777/14412 +f 21210/37757/14413 22286/38833/14413 21228/37775/14413 +f 21210/37757/14414 21228/37775/14414 20127/36674/14414 +f 21809/38356/14415 21309/37856/14415 20365/36912/14415 +f 21809/38356/14415 20365/36912/14415 20441/36988/14415 +f 20366/36913/14416 21312/37859/14416 21804/38351/14416 +f 20366/36913/14416 21804/38351/14416 20442/36989/14416 +f 21807/38354/14417 21315/37862/14417 20362/36909/14417 +f 21807/38354/14417 20362/36909/14417 20606/37153/14417 +f 20581/37128/14418 20337/36884/14418 21326/37873/14418 +f 20581/37128/14418 21326/37873/14418 21802/38349/14418 +s 1 +f 20128/36675/14419 21229/37776/14420 22290/38837/14421 +f 20128/36675/14419 22290/38837/14421 21218/37765/14421 +f 21231/37778/14422 20370/36917/14423 21318/37865/14422 +f 21231/37778/14422 21318/37865/14422 22293/38840/14422 +f 22292/38839/14424 21316/37863/14425 20359/36906/14425 +f 22292/38839/14424 20359/36906/14425 21203/37750/14425 +f 21219/37766/14426 22291/38838/14427 21202/37749/14428 +f 21219/37766/14426 21202/37749/14428 20121/36668/14427 +s 0 +f 20270/36817/14189 20274/36821/14189 21025/37572/14189 +f 20270/36817/14429 21025/37572/14429 21297/37844/14429 +f 21200/37747/14430 21206/37753/14430 20124/36671/14430 +f 21200/37747/14431 20124/36671/14431 20120/36667/14431 +s 1 +f 20106/36653/14432 21169/37716/14433 22295/38842/14434 +f 20106/36653/14432 22295/38842/14434 21199/37746/14434 +f 21171/37718/14435 20343/36890/14436 21320/37867/14437 +f 21171/37718/14435 21320/37867/14437 22296/38843/14435 +s 0 +f 22297/38844/14438 21321/37868/14438 20350/36897/14438 +s 1 +f 22297/38844/14438 20350/36897/14438 21187/37734/14438 +f 21198/37745/14439 22294/38841/14440 21185/37732/14441 +f 21198/37745/14439 21185/37732/14441 20114/36661/14440 +s 0 +f 21800/38347/14442 21324/37871/14442 20347/36894/14442 +f 21800/38347/14442 20347/36894/14442 20591/37138/14442 +f 20589/37136/14443 20345/36892/14443 21333/37880/14443 +f 20589/37136/14443 21333/37880/14443 21797/38344/14443 +s 1 +f 20098/36645/14444 21153/37700/14445 22298/38845/14446 +f 20098/36645/14444 22298/38845/14446 21178/37725/14447 +f 21155/37702/14448 20335/36882/14449 21328/37875/14450 +f 21155/37702/14448 21328/37875/14450 22300/38847/14449 +f 22301/38848/14451 21330/37877/14451 20341/36888/14452 +f 22301/38848/14451 20341/36888/14452 21170/37717/14452 +f 21179/37726/14453 22299/38846/14453 21168/37715/14454 +f 21179/37726/14453 21168/37715/14454 20105/36652/14454 +s 0 +f 21796/38343/14455 21332/37879/14455 20353/36900/14455 +f 21796/38343/14455 20353/36900/14455 20597/37144/14455 +f 20573/37120/14456 20329/36876/14456 21338/37885/14456 +f 20573/37120/14456 21338/37885/14456 21794/38341/14456 +f 21792/38339/14457 21336/37883/14457 20339/36886/14457 +f 21792/38339/14457 20339/36886/14457 20583/37130/14457 +f 20558/37105/14458 20314/36861/14458 21351/37898/14458 +f 20558/37105/14458 21351/37898/14458 21791/38338/14458 +f 20090/36637/14459 21137/37684/14459 22302/38849/14459 +f 20090/36637/14460 22302/38849/14460 21162/37709/14460 +f 21139/37686/14461 20327/36874/14461 21340/37887/14461 +f 21139/37686/14462 21340/37887/14462 22304/38851/14462 +f 22305/38852/14463 21342/37889/14463 20333/36880/14463 +f 22305/38852/14464 20333/36880/14464 21154/37701/14464 +s 1 +f 21163/37710/14465 22303/38850/14465 21152/37699/14465 +f 21163/37710/14465 21152/37699/14465 20097/36644/14465 +s 0 +f 20082/36629/14466 21122/37669/14466 22306/38853/14466 +f 20082/36629/14467 22306/38853/14467 21150/37697/14467 +f 21123/37670/14468 20319/36866/14468 21344/37891/14468 +f 21123/37670/14469 21344/37891/14469 22308/38855/14469 +f 22309/38856/14470 21346/37893/14470 20325/36872/14470 +f 22309/38856/14471 20325/36872/14471 21138/37685/14471 +s 1 +f 21151/37698/14472 22307/38854/14473 21136/37683/14474 +f 21151/37698/14472 21136/37683/14474 20089/36636/14475 +f 21789/38336/14476 21349/37896/14476 20324/36871/14476 +s 0 +f 21789/38336/14476 20324/36871/14476 20568/37115/14476 +s 1 +f 20565/37112/14477 20321/36868/14477 21354/37901/14477 +s 0 +f 20565/37112/14477 21354/37901/14477 21786/38333/14477 +f 21784/38331/14478 21352/37899/14478 20331/36878/14478 +f 21784/38331/14478 20331/36878/14478 20575/37122/14478 +s 1 +f 20550/37097/14479 20306/36853/14479 21359/37906/14479 +f 20550/37097/14479 21359/37906/14479 21783/38330/14479 +s 0 +f 21781/38328/14480 21357/37904/14480 20316/36863/14480 +f 21781/38328/14480 20316/36863/14480 20560/37107/14480 +f 20536/37083/14481 20292/36839/14481 21373/37920/14481 +f 20536/37083/14481 21373/37920/14481 21777/38324/14481 +s 1 +f 20064/36611/14482 21091/37638/14482 22312/38859/14483 +f 20064/36611/14482 22312/38859/14483 21112/37659/14483 +f 21089/37636/14484 20304/36851/14485 21361/37908/14486 +f 21089/37636/14484 21361/37908/14486 22310/38857/14487 +f 22311/38858/14488 21363/37910/14489 20310/36857/14490 +f 22311/38858/14488 20310/36857/14490 21104/37651/14488 +f 21113/37660/14491 22313/38860/14492 21106/37653/14491 +f 21113/37660/14491 21106/37653/14491 20071/36618/14493 +f 20072/36619/14494 21107/37654/14495 22315/38862/14496 +f 20072/36619/14494 22315/38862/14496 21128/37675/14497 +f 21105/37652/14498 20312/36859/14499 21365/37912/14499 +f 21105/37652/14498 21365/37912/14499 22314/38861/14500 +f 22317/38864/14501 21366/37913/14502 20317/36864/14503 +f 22317/38864/14501 20317/36864/14503 21121/37668/14504 +f 21131/37678/14505 22316/38863/14506 21120/37667/14506 +f 21131/37678/14505 21120/37667/14506 20081/36628/14506 +f 20055/36602/14507 21074/37621/14508 22320/38867/14509 +f 20055/36602/14507 22320/38867/14509 21100/37647/14508 +f 21072/37619/14510 20294/36841/14511 21370/37917/14511 +f 21072/37619/14510 21370/37917/14511 22318/38865/14510 +s 0 +f 22319/38866/14512 21371/37918/14512 20302/36849/14512 +f 22319/38866/14513 20302/36849/14513 21088/37635/14513 +f 21101/37648/14514 22321/38868/14514 21090/37637/14514 +f 21101/37648/14515 21090/37637/14515 20063/36610/14515 +f 21779/38326/14516 21375/37922/14516 20298/36845/14516 +f 21779/38326/14516 20298/36845/14516 20542/37089/14516 +f 20544/37091/14517 20300/36847/14517 21381/37928/14517 +f 20544/37091/14517 21381/37928/14517 21773/38320/14517 +s 1 +f 20047/36594/14518 21058/37605/14519 22325/38872/14520 +f 20047/36594/14518 22325/38872/14520 21081/37628/14520 +f 21056/37603/14521 20286/36833/14522 21379/37926/14523 +f 21056/37603/14521 21379/37926/14523 22323/38870/14522 +f 22322/38869/14524 21377/37924/14525 20296/36843/14526 +f 22322/38869/14524 20296/36843/14526 21073/37620/14526 +f 21080/37627/14527 22324/38871/14528 21075/37622/14529 +f 21080/37627/14527 21075/37622/14529 20056/36603/14530 +s 0 +f 21775/38322/14531 21383/37930/14531 20308/36855/14531 +f 21775/38322/14531 20308/36855/14531 20552/37099/14531 +f 20528/37075/14532 20284/36831/14532 21385/37932/14532 +f 20528/37075/14532 21385/37932/14532 21769/38316/14532 +f 21771/38318/14533 21387/37934/14533 20290/36837/14533 +f 21771/38318/14533 20290/36837/14533 20534/37081/14533 +s 1 +f 20456/37003/14534 20148/36695/14534 21393/37940/14534 +f 20456/37003/14534 21393/37940/14534 21765/38312/14534 +f 20039/36586/14535 21042/37589/14535 22329/38876/14535 +s 0 +f 20039/36586/14536 22329/38876/14536 21065/37612/14536 +f 21040/37587/14537 20278/36825/14537 21391/37938/14537 +f 21040/37587/14538 21391/37938/14538 22327/38874/14538 +f 22326/38873/14539 21389/37936/14539 20288/36835/14539 +s 1 +f 22326/38873/14540 20288/36835/14540 21057/37604/14540 +f 21064/37611/14541 22328/38875/14541 21059/37606/14541 +s 0 +f 21064/37611/14542 21059/37606/14542 20048/36595/14542 +s 1 +f 21767/38314/14543 21395/37942/14543 20282/36829/14543 +s 0 +f 21767/38314/14543 20282/36829/14543 20526/37073/14543 +f 20631/37178/14544 21404/37951/14544 21760/38307/14544 +f 20631/37178/14544 21760/38307/14544 20639/37186/14544 +f 19844/36391/14545 20687/37234/14545 22333/38880/14545 +f 19844/36391/14546 22333/38880/14546 21049/37596/14546 +f 20685/37232/14547 20142/36689/14547 21399/37946/14547 +s 1 +f 20685/37232/14548 21399/37946/14548 22331/38878/14548 +s 0 +f 22330/38877/14549 21397/37944/14549 20280/36827/14549 +f 22330/38877/14550 20280/36827/14550 21041/37588/14550 +f 21048/37595/14551 22332/38879/14551 21043/37590/14551 +f 21048/37595/14552 21043/37590/14552 20040/36587/14552 +s 1 +f 20655/37202/14553 22020/38567/14554 22336/38883/14553 +f 20655/37202/14553 22336/38883/14553 21999/38546/14555 +f 22022/38569/14556 20657/37204/14557 21402/37949/14558 +f 22022/38569/14556 21402/37949/14558 22337/38884/14559 +f 22334/38881/14560 21401/37948/14560 20272/36819/14561 +f 22334/38881/14560 20272/36819/14561 21298/37845/14560 +f 21996/38543/14562 22335/38882/14562 21299/37846/14563 +f 21996/38543/14562 21299/37846/14563 20034/36581/14563 +s 0 +f 20588/37135/14564 21822/38369/14564 21322/37869/14564 +f 20588/37135/14564 21322/37869/14564 20344/36891/14564 +f 21296/37843/14565 21024/37571/14565 20030/36577/14565 +f 21296/37843/14565 20030/36577/14565 20033/36580/14565 +f 21763/38310/14566 21407/37954/14566 20266/36813/14566 +f 21763/38310/14566 20266/36813/14566 20514/37061/14566 +f 20507/37054/14567 20251/36798/14567 21424/37971/14567 +f 20507/37054/14567 21424/37971/14567 21756/38303/14567 +s 1 +f 20624/37171/14568 21969/38516/14569 22338/38885/14568 +f 20624/37171/14568 22338/38885/14568 21014/37561/14569 +f 21971/38518/14570 20635/37182/14571 21410/37957/14572 +f 21971/38518/14570 21410/37957/14572 22341/38888/14573 +f 22340/38887/14574 21409/37956/14575 20264/36811/14575 +f 22340/38887/14574 20264/36811/14575 21295/37842/14576 +f 21015/37562/14577 22339/38886/14578 21292/37839/14578 +f 21015/37562/14577 21292/37839/14578 20019/36566/14578 +s 0 +f 20020/36567/14170 21294/37841/14170 22343/38890/14170 +f 20020/36567/14168 22343/38890/14168 20998/37545/14168 +f 21293/37840/14168 20261/36808/14168 21412/37959/14168 +f 21293/37840/14168 21412/37959/14168 22342/38889/14168 +f 22345/38892/14168 21415/37962/14168 20268/36815/14168 +f 22345/38892/14168 20268/36815/14168 21003/37550/14168 +f 20999/37546/14170 22344/38891/14170 21002/37549/14170 +f 20999/37546/14169 21002/37549/14169 20029/36576/14169 +s 1 +f 19988/36535/14579 21284/37831/14579 22347/38894/14580 +f 19988/36535/14579 22347/38894/14580 20987/37534/14580 +f 21287/37834/14581 20247/36794/14581 21416/37963/14581 +f 21287/37834/14581 21416/37963/14581 22348/38895/14581 +f 22349/38896/14582 21418/37965/14583 20253/36800/14584 +f 22349/38896/14582 20253/36800/14584 21290/37837/14585 +f 20986/37533/14586 22346/38893/14587 21289/37836/14588 +f 20986/37533/14586 21289/37836/14588 20005/36552/14589 +f 19854/36401/14590 21236/37783/14591 20955/37502/14592 +f 21236/37783/14591 22351/38898/14591 20955/37502/14592 +f 21238/37785/14593 20150/36697/14593 21421/37968/14594 +f 21238/37785/14593 21421/37968/14594 22352/38899/14594 +f 22353/38900/14595 21422/37969/14595 20245/36792/14595 +f 22353/38900/14595 20245/36792/14595 21286/37833/14595 +f 20954/37501/14596 22350/38897/14596 21285/37832/14597 +f 20954/37501/14596 21285/37832/14597 19989/36536/14597 +s 0 +f 21758/38305/14598 21426/37973/14598 20257/36804/14598 +f 21758/38305/14598 20257/36804/14598 20509/37056/14598 +f 20458/37005/14599 20156/36703/14599 21429/37976/14599 +f 20458/37005/14599 21429/37976/14599 21752/38299/14599 +f 21753/38300/14600 21431/37978/14600 20242/36789/14600 +f 21753/38300/14600 20242/36789/14600 20421/36968/14600 +f 20501/37048/14601 20237/36784/14601 21434/37981/14601 +f 20501/37048/14601 21434/37981/14601 21750/38297/14601 +s 1 +f 21748/38295/14602 21432/37979/14602 20249/36796/14602 +f 21748/38295/14602 20249/36796/14602 20505/37052/14602 +s 0 +f 20220/36767/14603 21437/37984/14603 21745/38292/14603 +f 20220/36767/14603 21745/38292/14603 20412/36959/14603 +f 21746/38293/14604 21439/37986/14604 20234/36781/14604 +f 21746/38293/14604 20234/36781/14604 20417/36964/14604 +f 20464/37011/14605 20164/36711/14605 21445/37992/14605 +f 20464/37011/14605 21445/37992/14605 21741/38288/14605 +f 19948/36495/14606 20863/37410/14606 22357/38904/14606 +f 19948/36495/14607 22357/38904/14607 20858/37405/14607 +s 1 +f 20861/37408/14608 20214/36761/14608 21443/37990/14608 +s 0 +f 20861/37408/14609 21443/37990/14609 22355/38902/14609 +s 1 +f 22354/38901/14610 21441/37988/14610 20230/36777/14610 +f 22354/38901/14610 20230/36777/14610 20897/37444/14611 +f 20857/37404/14612 22356/38903/14612 20899/37446/14613 +f 20857/37404/14612 20899/37446/14613 19968/36515/14613 +s 0 +f 21743/38290/14614 21447/37994/14614 20226/36773/14614 +s 1 +f 21743/38290/14614 20226/36773/14614 20414/36961/14614 +s 0 +f 20448/36995/14615 20140/36687/14615 21453/38000/14615 +f 20448/36995/14615 21453/38000/14615 21737/38284/14615 +s 1 +f 19864/36411/14616 21242/37789/14617 22361/38908/14618 +f 19864/36411/14616 22361/38908/14618 20750/37297/14617 +s 0 +f 21240/37787/14619 20158/36705/14619 21451/37998/14619 +f 21240/37787/14620 21451/37998/14620 22359/38906/14620 +f 22358/38905/14621 21449/37996/14621 20224/36771/14621 +f 22358/38905/14622 20224/36771/14622 20882/37429/14622 +f 20749/37296/14623 22360/38907/14623 20884/37431/14623 +f 20749/37296/14624 20884/37431/14624 19961/36508/14624 +f 21739/38286/14625 21455/38002/14625 20218/36765/14625 +f 21739/38286/14625 20218/36765/14625 20410/36957/14625 +f 20481/37028/14626 20201/36748/14626 21466/38013/14626 +f 20481/37028/14626 21466/38013/14626 21734/38281/14626 +f 19833/36380/14627 21234/37781/14627 22365/38912/14627 +s 1 +f 19833/36380/14628 22365/38912/14628 20710/37257/14628 +s 0 +f 21232/37779/14629 20134/36681/14629 21459/38006/14629 +f 21232/37779/14629 21459/38006/14629 22363/38910/14629 +f 22362/38909/14630 21457/38004/14630 20216/36763/14630 +f 22362/38909/14631 20216/36763/14631 20862/37409/14631 +f 20709/37256/14632 22364/38911/14632 20864/37411/14632 +f 20709/37256/14633 20864/37411/14633 19949/36496/14633 +s 1 +f 19927/36474/14634 21261/37808/14635 22366/38913/14635 +f 19927/36474/14634 22366/38913/14635 20847/37394/14634 +f 21263/37810/14636 20199/36746/14637 21460/38007/14638 +f 21263/37810/14636 21460/38007/14638 22368/38915/14639 +s 0 +f 22369/38916/14640 21462/38009/14640 20207/36754/14640 +f 22369/38916/14641 20207/36754/14641 21267/37814/14641 +s 1 +f 20848/37395/14642 22367/38914/14642 21265/37812/14642 +s 0 +f 20848/37395/14643 21265/37812/14643 19939/36486/14643 +s 1 +f 21732/38279/14644 21464/38011/14644 20209/36756/14644 +s 0 +f 21732/38279/14644 20209/36756/14644 20485/37032/14644 +f 20663/37210/14645 21470/38017/14645 21730/38277/14645 +s 1 +f 20663/37210/14645 21730/38277/14645 20667/37214/14645 +f 21728/38275/14646 21468/38015/14647 20275/36822/14647 +f 21728/38275/14646 20275/36822/14647 20519/37066/14646 +s 0 +f 20477/37024/14648 20193/36740/14648 21478/38025/14648 +f 20477/37024/14648 21478/38025/14648 21726/38273/14648 +s 1 +f 19915/36462/14649 21257/37804/14650 22370/38917/14651 +f 19915/36462/14649 22370/38917/14651 20827/37374/14652 +f 21259/37806/14653 20191/36738/14654 21472/38019/14655 +f 21259/37806/14653 21472/38019/14655 22372/38919/14656 +f 22373/38920/14657 21474/38021/14657 20197/36744/14658 +f 22373/38920/14657 20197/36744/14658 21262/37809/14658 +f 20828/37375/14659 22371/38918/14660 21260/37807/14661 +f 20828/37375/14659 21260/37807/14661 19926/36473/14661 +s 0 +f 21724/38271/14662 21476/38023/14662 20203/36750/14662 +f 21724/38271/14662 20203/36750/14662 20483/37030/14662 +f 20470/37017/14663 20178/36725/14663 21491/38038/14663 +f 20470/37017/14663 21491/38038/14663 21723/38270/14663 +s 1 +f 19901/36448/14664 21255/37802/14664 22375/38922/14665 +f 19901/36448/14664 22375/38922/14665 20809/37356/14666 +s 0 +f 21254/37801/14667 20184/36731/14667 21481/38028/14667 +s 1 +f 21254/37801/14668 21481/38028/14668 22374/38921/14668 +s 0 +f 22377/38924/14669 21482/38029/14669 20189/36736/14669 +f 22377/38924/14670 20189/36736/14670 21258/37805/14670 +f 20812/37359/14671 22376/38923/14671 21256/37803/14671 +f 20812/37359/14672 21256/37803/14672 19914/36461/14672 +s 1 +f 19889/36436/14673 21251/37798/14674 22380/38927/14675 +f 19889/36436/14673 22380/38927/14675 20785/37332/14676 +s 0 +f 21249/37796/14677 20176/36723/14677 21485/38032/14677 +s 1 +f 21249/37796/14678 21485/38032/14678 22378/38925/14678 +f 22379/38926/14679 21487/38034/14680 20182/36729/14681 +f 22379/38926/14679 20182/36729/14681 21252/37799/14682 +f 20786/37333/14683 22381/38928/14684 21253/37800/14684 +f 20786/37333/14683 21253/37800/14684 19900/36447/14684 +s 0 +f 21721/38268/14685 21489/38036/14685 20188/36735/14685 +f 21721/38268/14685 20188/36735/14685 20476/37023/14685 +f 20474/37021/14686 20186/36733/14686 21495/38042/14686 +f 20474/37021/14686 21495/38042/14686 21719/38266/14686 +s 1 +f 21716/38263/14687 21492/38039/14687 20195/36742/14687 +f 21716/38263/14687 20195/36742/14687 20479/37026/14687 +s 0 +f 20466/37013/14688 20170/36717/14688 21499/38046/14688 +f 20466/37013/14688 21499/38046/14688 21715/38262/14688 +f 21713/38260/14689 21497/38044/14689 20180/36727/14689 +f 21713/38260/14689 20180/36727/14689 20472/37019/14689 +f 20244/36791/14690 21513/38060/14690 21709/38256/14690 +f 20244/36791/14690 21709/38256/14690 20424/36971/14690 +f 19960/36507/14691 20883/37430/14691 22384/38931/14691 +f 19960/36507/14692 22384/38931/14692 20877/37424/14692 +f 20881/37428/14693 20222/36769/14693 21501/38048/14693 +f 20881/37428/14694 21501/38048/14694 22382/38929/14694 +s 1 +f 22383/38930/14695 21503/38050/14696 20166/36713/14697 +f 22383/38930/14695 20166/36713/14697 21244/37791/14698 +f 20878/37425/14699 22385/38932/14699 21246/37793/14700 +f 20878/37425/14699 21246/37793/14700 19876/36423/14700 +f 19877/36424/14701 21247/37794/14701 22388/38935/14702 +f 19877/36424/14701 22388/38935/14702 20765/37312/14702 +f 21245/37792/14703 20168/36715/14704 21505/38052/14705 +f 21245/37792/14703 21505/38052/14705 22386/38933/14706 +f 22387/38934/14707 21507/38054/14708 20174/36721/14708 +f 22387/38934/14707 20174/36721/14708 21248/37795/14709 +f 20766/37313/14710 22389/38936/14711 21250/37797/14711 +f 20766/37313/14710 21250/37797/14711 19888/36435/14711 +f 19978/36525/14712 20920/37467/14712 22392/38939/14712 +f 19978/36525/14712 22392/38939/14712 20725/37272/14712 +f 20918/37465/14713 20240/36787/14713 21509/38056/14714 +f 20918/37465/14713 21509/38056/14714 22390/38937/14713 +f 22391/38938/14715 21511/38058/14715 20160/36707/14716 +f 22391/38938/14715 20160/36707/14716 21241/37788/14715 +f 20726/37273/14717 22393/38940/14717 21243/37790/14717 +f 20726/37273/14717 21243/37790/14717 19865/36412/14717 +s 0 +f 21711/38258/14718 21515/38062/14718 20162/36709/14718 +f 21711/38258/14718 20162/36709/14718 20462/37009/14718 +f 20228/36775/14719 21519/38066/14719 21707/38254/14719 +f 20228/36775/14719 21707/38254/14719 20416/36963/14719 +f 21705/38252/14720 21517/38064/14720 20172/36719/14720 +f 21705/38252/14720 20172/36719/14720 20468/37015/14720 +f 20236/36783/14721 21533/38080/14721 21700/38247/14721 +f 20236/36783/14721 21700/38247/14721 20419/36966/14721 +s 1 +f 19969/36516/14722 20900/37447/14723 22395/38942/14724 +f 19969/36516/14722 22395/38942/14724 20893/37440/14723 +f 20898/37445/14725 20231/36778/14726 21520/38067/14727 +f 20898/37445/14725 21520/38067/14727 22394/38941/14726 +f 22397/38944/14728 21523/38070/14728 20152/36699/14728 +f 22397/38944/14728 20152/36699/14728 21239/37786/14728 +f 20896/37443/14729 22396/38943/14729 19855/36402/14729 +f 22396/38943/14729 21237/37784/14729 19855/36402/14729 +s 0 +f 19842/36389/14730 20689/37236/14730 22400/38947/14730 +f 19842/36389/14731 22400/38947/14731 20696/37243/14731 +f 20691/37238/14732 20145/36692/14732 21526/38073/14732 +f 20691/37238/14732 21526/38073/14732 22401/38948/14732 +f 22398/38945/14733 21525/38072/14733 20136/36683/14733 +f 22398/38945/14734 20136/36683/14734 21233/37780/14734 +f 20693/37240/14735 22399/38946/14735 21235/37782/14735 +f 20693/37240/14736 21235/37782/14736 19834/36381/14736 +f 19839/36386/14737 20677/37224/14737 22404/38951/14737 +s 1 +f 19839/36386/14738 22404/38951/14738 20684/37231/14738 +s 0 +f 20679/37226/14739 20137/36684/14739 21530/38077/14739 +f 20679/37226/14740 21530/38077/14740 22405/38952/14740 +s 1 +f 22402/38949/14741 21529/38076/14741 20144/36691/14741 +s 0 +f 22402/38949/14741 20144/36691/14741 20686/37233/14741 +f 20681/37228/14742 22403/38950/14742 20688/37235/14742 +s 1 +f 20681/37228/14743 20688/37235/14743 19845/36392/14743 +s 0 +f 21702/38249/14744 21535/38082/14744 20154/36701/14744 +f 21702/38249/14744 20154/36701/14744 20457/37004/14744 +f 20596/37143/14745 21815/38362/14745 21307/37854/14745 +f 20596/37143/14745 21307/37854/14745 20352/36899/14745 +s 1 +f 20903/37450/14746 20420/36967/14746 21701/38248/14746 +f 20903/37450/14746 21701/38248/14746 22406/38953/14746 +f 22407/38954/14747 21703/38250/14748 20460/37007/14747 +f 22407/38954/14747 20460/37007/14747 21550/38097/14748 +s 0 +f 20888/37435/14749 20415/36962/14749 21706/38253/14749 +f 20888/37435/14750 21706/38253/14750 22413/38960/14750 +s 1 +f 22412/38959/14751 21704/38251/14752 20467/37014/14753 +f 22412/38959/14751 20467/37014/14753 21559/38106/14753 +f 20924/37471/14754 20423/36970/14754 21708/38255/14754 +s 0 +f 20924/37471/14755 21708/38255/14755 22416/38963/14755 +f 22417/38964/14756 21710/38257/14756 20461/37008/14756 +s 1 +f 22417/38964/14757 20461/37008/14757 21554/38101/14757 +f 21558/38105/14758 20465/37012/14759 21714/38261/14760 +f 21558/38105/14758 21714/38261/14760 22421/38968/14760 +f 22420/38967/14761 21712/38259/14762 20471/37018/14763 +f 22420/38967/14761 20471/37018/14763 21563/38110/14764 +s 0 +f 21566/38113/14765 20473/37020/14765 21718/38265/14765 +f 21566/38113/14766 21718/38265/14766 22425/38972/14766 +f 22422/38969/14767 21717/38264/14767 20480/37027/14767 +f 22422/38969/14768 20480/37027/14768 21569/38116/14768 +s 1 +f 21562/38109/14769 20469/37016/14769 21722/38269/14769 +s 0 +f 21562/38109/14770 21722/38269/14770 22429/38976/14770 +f 22428/38975/14771 21720/38267/14771 20475/37022/14771 +s 1 +f 22428/38975/14772 20475/37022/14772 21567/38114/14772 +f 21568/38115/14773 20478/37025/14774 21727/38274/14775 +f 21568/38115/14773 21727/38274/14775 22431/38978/14776 +f 22430/38977/14777 21725/38272/14778 20484/37031/14779 +f 22430/38977/14777 20484/37031/14779 21573/38120/14780 +f 22017/38564/14781 20668/37215/14781 21731/38278/14782 +f 22017/38564/14781 21731/38278/14782 22435/38982/14782 +f 22434/38981/14783 21729/38276/14784 20520/37067/14783 +f 22434/38981/14783 20520/37067/14783 21610/38157/14783 +f 21572/38119/14785 20482/37029/14786 21735/38282/14787 +f 21572/38119/14785 21735/38282/14787 22439/38986/14788 +s 0 +f 22438/38985/14789 21733/38280/14789 20486/37033/14789 +f 22438/38985/14790 20486/37033/14790 21576/38123/14790 +f 21539/38086/14791 20447/36994/14791 21736/38283/14791 +f 21539/38086/14792 21736/38283/14792 22444/38991/14792 +s 1 +f 22445/38992/14793 21738/38285/14793 20409/36956/14793 +s 0 +f 22445/38992/14794 20409/36956/14794 20867/37414/14794 +s 1 +f 21555/38102/14795 20463/37010/14796 21740/38287/14797 +f 21555/38102/14795 21740/38287/14797 22448/38995/14798 +s 0 +f 22449/38996/14799 21742/38289/14799 20413/36960/14799 +f 22449/38996/14800 20413/36960/14800 20887/37434/14800 +f 20868/37415/14801 20411/36958/14801 21744/38291/14801 +f 20868/37415/14802 21744/38291/14802 22452/38999/14802 +s 1 +f 22453/39000/14803 21747/38294/14803 20418/36965/14803 +f 22453/39000/14803 20418/36965/14803 20902/37449/14803 +f 19972/36519/14804 21594/38141/14805 22457/39004/14805 +f 19972/36519/14804 22457/39004/14805 20945/37492/14805 +f 21592/38139/14806 20502/37049/14807 21751/38298/14807 +f 21592/38139/14806 21751/38298/14807 22455/39002/14807 +s 0 +f 22454/39001/14808 21749/38296/14808 20506/37053/14808 +f 22454/39001/14809 20506/37053/14809 21596/38143/14809 +s 1 +f 20944/37491/14810 22456/39003/14810 21598/38145/14810 +f 20944/37491/14810 21598/38145/14810 19994/36541/14810 +f 21549/38096/14811 20459/37006/14812 21755/38302/14813 +f 21549/38096/14811 21755/38302/14813 22461/39008/14812 +f 22460/39007/14814 21754/38301/14815 20422/36969/14816 +f 22460/39007/14814 20422/36969/14816 20923/37470/14817 +f 19995/36542/14818 21599/38146/14818 22464/39011/14818 +f 19995/36542/14818 22464/39011/14818 20976/37523/14818 +f 21597/38144/14819 20508/37055/14820 21757/38304/14821 +f 21597/38144/14819 21757/38304/14821 22462/39009/14821 +f 22463/39010/14822 21759/38306/14822 20511/37058/14822 +s 0 +f 22463/39010/14823 20511/37058/14823 21600/38147/14823 +s 1 +f 20977/37524/14824 22465/39012/14825 21602/38149/14826 +f 20977/37524/14824 21602/38149/14826 20010/36557/14827 +f 20613/37160/14828 21966/38513/14829 22467/39014/14828 +f 20613/37160/14828 22467/39014/14828 21004/37551/14830 +f 21965/38512/14831 20640/37187/14831 21761/38308/14832 +f 21965/38512/14831 21761/38308/14832 22466/39013/14833 +f 22469/39016/14834 21762/38309/14835 20513/37060/14836 +f 22469/39016/14834 20513/37060/14836 21605/38152/14834 +f 21005/37552/14837 22468/39015/14838 21604/38151/14838 +f 21005/37552/14837 21604/38151/14838 20024/36571/14838 +s 0 +f 21547/38094/14839 20455/37002/14839 21764/38311/14839 +f 21547/38094/14840 21764/38311/14840 22472/39019/14840 +f 22473/39020/14841 21766/38313/14841 20525/37072/14841 +f 22473/39020/14842 20525/37072/14842 21618/38165/14842 +s 1 +f 21619/38166/14843 20527/37074/14843 21768/38315/14843 +s 0 +f 21619/38166/14844 21768/38315/14844 22476/39023/14844 +f 22477/39024/14845 21770/38317/14845 20533/37080/14845 +s 1 +f 22477/39024/14846 20533/37080/14846 21626/38173/14846 +f 21635/38182/14847 20543/37090/14848 21772/38319/14849 +f 21635/38182/14847 21772/38319/14849 22480/39027/14850 +f 22481/39028/14851 21774/38321/14851 20551/37098/14852 +f 22481/39028/14851 20551/37098/14852 21643/38190/14852 +f 21627/38174/14853 20535/37082/14854 21776/38323/14855 +f 21627/38174/14853 21776/38323/14855 22484/39031/14856 +f 22485/39032/14857 21778/38325/14858 20541/37088/14859 +f 22485/39032/14857 20541/37088/14859 21634/38181/14859 +f 21642/38189/14860 20549/37096/14861 21782/38329/14862 +f 21642/38189/14860 21782/38329/14862 22488/39035/14862 +f 22487/39034/14863 21780/38327/14863 20559/37106/14863 +f 22487/39034/14863 20559/37106/14863 21651/38198/14863 +s 0 +f 21655/38202/14864 20566/37113/14864 21787/38334/14864 +f 21655/38202/14865 21787/38334/14865 22490/39037/14865 +f 22489/39036/14866 21785/38332/14866 20576/37123/14866 +f 22489/39036/14867 20576/37123/14867 21663/38210/14867 +s 1 +f 21650/38197/14868 20557/37104/14869 21790/38337/14870 +f 21650/38197/14868 21790/38337/14870 22496/39043/14871 +f 22495/39042/14872 21788/38335/14873 20567/37114/14874 +f 22495/39042/14872 20567/37114/14874 21657/38204/14875 +s 0 +f 21662/38209/14876 20574/37121/14876 21795/38342/14876 +f 21662/38209/14877 21795/38342/14877 22498/39045/14877 +f 22497/39044/14878 21793/38340/14878 20584/37131/14878 +f 22497/39044/14878 20584/37131/14878 21671/38218/14878 +s 1 +f 21678/38225/14879 20590/37137/14879 21799/38346/14880 +f 21678/38225/14879 21799/38346/14880 22502/39049/14881 +f 22501/39048/14882 21798/38345/14883 20599/37146/14884 +f 22501/39048/14882 20599/37146/14884 21686/38233/14885 +f 21670/38217/14886 20582/37129/14887 21803/38350/14888 +f 21670/38217/14886 21803/38350/14888 22506/39053/14889 +f 22505/39052/14890 21801/38348/14891 20592/37139/14891 +f 22505/39052/14890 20592/37139/14891 21679/38226/14892 +f 21225/37772/14893 20444/36991/14893 21805/38352/14894 +f 21225/37772/14893 21805/38352/14894 22509/39056/14894 +f 22510/39057/14895 21806/38353/14895 20605/37152/14896 +f 22510/39057/14895 20605/37152/14896 21693/38240/14897 +s 0 +f 21687/38234/14898 20600/37147/14898 21810/38357/14898 +f 21687/38234/14899 21810/38357/14899 22513/39060/14899 +f 22514/39061/14900 21811/38358/14900 20443/36990/14900 +f 22514/39061/14900 20443/36990/14900 21224/37771/14900 +f 21306/37853/14901 21814/38361/14901 20611/37158/14901 +f 21306/37853/14901 20611/37158/14901 20371/36918/14901 +f 20612/37159/14902 21819/38366/14902 21319/37866/14902 +s 1 +f 20612/37159/14902 21319/37866/14902 20372/36919/14902 +s 0 +f 21317/37864/14903 21817/38364/14903 20604/37151/14903 +f 21317/37864/14903 20604/37151/14903 20360/36907/14903 +f 20608/37155/14364 20364/36911/14364 20358/36905/14364 +f 20608/37155/14364 20358/36905/14364 20602/37149/14364 +f 20644/37191/14904 21867/38414/14904 21411/37958/14904 +f 20644/37191/14904 21411/37958/14904 20636/37183/14904 +f 21323/37870/14905 21823/38370/14905 20595/37142/14905 +f 21323/37870/14905 20595/37142/14905 20351/36898/14905 +f 20580/37127/14906 21825/38372/14906 21329/37876/14906 +f 20580/37127/14906 21329/37876/14906 20336/36883/14906 +f 21331/37878/14907 21827/38374/14907 20586/37133/14907 +f 21331/37878/14907 20586/37133/14907 20342/36889/14907 +f 20572/37119/14908 21829/38376/14908 21341/37888/14908 +f 20572/37119/14908 21341/37888/14908 20328/36875/14908 +s 1 +f 21343/37890/14909 21831/38378/14909 20578/37125/14909 +s 0 +f 21343/37890/14909 20578/37125/14909 20334/36881/14909 +f 20564/37111/14910 21833/38380/14910 21345/37892/14910 +f 20564/37111/14910 21345/37892/14910 20320/36867/14910 +f 21347/37894/14911 21835/38382/14911 20570/37117/14911 +f 21347/37894/14911 20570/37117/14911 20326/36873/14911 +f 20547/37094/14912 21836/38383/14912 21360/37907/14912 +f 20547/37094/14913 21360/37907/14913 20303/36850/14913 +f 21362/37909/14914 21838/38385/14914 20553/37100/14914 +f 21362/37909/14914 20553/37100/14914 20309/36856/14914 +s 1 +f 20555/37102/14915 21840/38387/14915 21364/37911/14915 +f 20555/37102/14915 21364/37911/14915 20311/36858/14915 +s 0 +f 21367/37914/14916 21843/38390/14916 20562/37109/14916 +f 21367/37914/14916 20562/37109/14916 20318/36865/14916 +f 20537/37084/14917 21844/38391/14917 21368/37915/14917 +f 20537/37084/14917 21368/37915/14917 20293/36840/14917 +f 21369/37916/14918 21845/38392/14918 20545/37092/14918 +f 21369/37916/14918 20545/37092/14918 20301/36848/14918 +f 20529/37076/14919 21850/38397/14919 21378/37925/14919 +f 20529/37076/14919 21378/37925/14919 20285/36832/14919 +f 21376/37923/14920 21848/38395/14920 20539/37086/14920 +f 21376/37923/14920 20539/37086/14920 20295/36842/14920 +f 20521/37068/14921 21854/38401/14921 21390/37937/14921 +f 20521/37068/14921 21390/37937/14921 20277/36824/14921 +f 21388/37935/14922 21852/38399/14922 20531/37078/14922 +f 21388/37935/14922 20531/37078/14922 20287/36834/14922 +f 20449/36996/14923 21858/38405/14923 21398/37945/14923 +f 20449/36996/14923 21398/37945/14923 20141/36688/14923 +f 21396/37943/14924 21856/38403/14924 20523/37070/14924 +f 21396/37943/14924 20523/37070/14924 20279/36826/14924 +f 20670/37217/14925 21863/38410/14925 21403/37950/14925 +f 20670/37217/14925 21403/37950/14925 20658/37205/14925 +f 21400/37947/14926 21860/38407/14926 20439/36986/14926 +f 21400/37947/14926 20439/36986/14926 20271/36818/14926 +f 20517/37064/14189 20273/36820/14189 20269/36816/14189 +f 20517/37064/14189 20269/36816/14189 20437/36984/14189 +f 19934/36481/13850 19936/36483/13850 21037/37584/13850 +f 19934/36481/13850 21037/37584/13850 21991/38538/13850 +f 21408/37955/14927 21864/38411/14927 20435/36982/14927 +f 21408/37955/14927 20435/36982/14927 20263/36810/14927 +f 20262/36809/14168 20433/36980/14168 21869/38416/14168 +f 20262/36809/14168 21869/38416/14168 21413/37960/14168 +f 21414/37961/14168 21870/38417/14168 20516/37063/14168 +f 21414/37961/14168 20516/37063/14168 20267/36814/14168 +s 1 +f 20248/36795/14928 20428/36975/14928 21873/38420/14928 +f 20248/36795/14928 21873/38420/14928 21417/37964/14928 +s 0 +f 21419/37966/14929 21875/38422/14929 20431/36978/14929 +f 21419/37966/14929 20431/36978/14929 20255/36802/14929 +f 20149/36696/14930 20377/36924/14930 21876/38423/14930 +f 20149/36696/14931 21876/38423/14931 21420/37967/14931 +f 21423/37970/14932 21879/38426/14932 20426/36973/14932 +f 21423/37970/14932 20426/36973/14932 20246/36793/14932 +f 20489/37036/14933 21882/38429/14933 21442/37989/14933 +f 20489/37036/14933 21442/37989/14933 20213/36760/14933 +f 21440/37987/14934 21880/38427/14934 20497/37044/14934 +f 21440/37987/14934 20497/37044/14934 20229/36776/14934 +f 20157/36704/14935 20381/36928/14935 21886/38433/14935 +f 20157/36704/14935 21886/38433/14935 21450/37997/14935 +f 21448/37995/14936 21884/38431/14936 20495/37042/14936 +f 21448/37995/14936 20495/37042/14936 20223/36770/14936 +f 20133/36680/14937 20373/36920/14937 21890/38437/14937 +f 20133/36680/14937 21890/38437/14937 21458/38005/14937 +s 1 +f 21456/38003/14938 21888/38435/14938 20491/37038/14938 +f 21456/38003/14938 20491/37038/14938 20215/36762/14938 +s 0 +f 20200/36747/14939 20404/36951/14939 21893/38440/14939 +f 20200/36747/14939 21893/38440/14939 21461/38008/14939 +f 21463/38010/14940 21895/38442/14940 20408/36955/14940 +f 21463/38010/14940 20408/36955/14940 20208/36755/14940 +f 20192/36739/14941 20400/36947/14941 21897/38444/14941 +f 20192/36739/14941 21897/38444/14941 21473/38020/14941 +f 21475/38022/14942 21899/38446/14942 20402/36949/14942 +f 21475/38022/14942 20402/36949/14942 20198/36745/14942 +f 20183/36730/14943 20395/36942/14943 21900/38447/14943 +f 20183/36730/14943 21900/38447/14943 21480/38027/14943 +f 21483/38030/14944 21903/38450/14944 20398/36945/14944 +f 21483/38030/14944 20398/36945/14944 20190/36737/14944 +f 20175/36722/14945 20391/36938/14945 21904/38451/14945 +f 20175/36722/14945 21904/38451/14945 21484/38031/14945 +f 21486/38033/14946 21906/38453/14946 20393/36940/14946 +f 21486/38033/14946 20393/36940/14946 20181/36728/14946 +f 20493/37040/14947 21908/38455/14947 21500/38047/14947 +s 1 +f 20493/37040/14947 21500/38047/14947 20221/36768/14947 +s 0 +f 21502/38049/14948 21910/38457/14948 20385/36932/14948 +f 21502/38049/14948 20385/36932/14948 20165/36712/14948 +f 20167/36714/14949 20387/36934/14949 21912/38459/14949 +f 20167/36714/14949 21912/38459/14949 21504/38051/14949 +s 1 +f 21506/38053/14950 21914/38461/14950 20389/36936/14950 +s 0 +f 21506/38053/14950 20389/36936/14950 20173/36720/14950 +f 20503/37050/14951 21916/38463/14951 21508/38055/14951 +f 20503/37050/14951 21508/38055/14951 20239/36786/14951 +f 21510/38057/14952 21918/38465/14952 20383/36930/14952 +f 21510/38057/14952 20383/36930/14952 20159/36706/14952 +f 20499/37046/14953 21920/38467/14953 21521/38068/14953 +f 20499/37046/14953 21521/38068/14953 20232/36779/14953 +f 21522/38069/14954 21922/38469/14954 20379/36926/14954 +f 21522/38069/14954 20379/36926/14954 20151/36698/14954 +s 1 +f 20454/37001/14955 21927/38474/14955 21527/38074/14955 +f 20454/37001/14955 21527/38074/14955 20146/36693/14955 +s 0 +f 21524/38071/14956 21924/38471/14956 20375/36922/14956 +f 21524/38071/14956 20375/36922/14956 20135/36682/14956 +f 20446/36993/14957 21931/38478/14957 21531/38078/14957 +f 20446/36993/14957 21531/38078/14957 20138/36685/14957 +s 1 +f 21528/38075/14958 21928/38475/14958 20451/36998/14958 +f 21528/38075/14958 20451/36998/14958 20143/36690/14958 +s 0 +f 20256/36803/14959 20432/36979/14959 21963/38510/14959 +f 20256/36803/14959 21963/38510/14959 21955/38502/14959 +f 21954/38501/14959 21962/38509/14959 20642/37189/14959 +f 21954/38501/14959 20642/37189/14959 20634/37181/14959 +f 20510/37057/14960 20258/36805/14960 21948/38495/14960 +f 20510/37057/14960 21948/38495/14960 21956/38503/14960 +f 20011/36558/14961 21603/38150/14961 22520/39067/14961 +f 20011/36558/14961 22520/39067/14961 21933/38480/14961 +f 21601/38148/14962 20512/37059/14962 21958/38505/14962 +f 21601/38148/14962 21958/38505/14962 22517/39064/14962 +f 22518/39065/14962 21959/38506/14962 20638/37185/14962 +f 22518/39065/14962 20638/37185/14962 21964/38511/14962 +f 21932/38479/14961 22519/39066/14961 21967/38514/14961 +f 21932/38479/14961 21967/38514/14961 20614/37161/14961 +f 20004/36551/14963 21288/37835/14963 22521/39068/14963 +f 20004/36551/14963 22521/39068/14963 21942/38489/14963 +f 21291/37838/14964 20254/36801/14964 21953/38500/14964 +f 21291/37838/14964 21953/38500/14964 22524/39071/14964 +f 22523/39070/14964 21952/38499/14964 20633/37180/14964 +f 22523/39070/14964 20633/37180/14964 21970/38517/14964 +f 21943/38490/14963 22522/39069/14963 21968/38515/14963 +f 21943/38490/14963 21968/38515/14963 20623/37170/14963 +f 21957/38504/14960 21949/38496/14960 20629/37176/14960 +f 21957/38504/14960 20629/37176/14960 20637/37184/14960 +s 1 +f 20206/36753/14965 20406/36953/14965 22015/38562/14965 +f 20206/36753/14965 22015/38562/14965 22003/38550/14965 +s 0 +f 20260/36807/14966 20969/37516/14966 22525/39072/14966 +f 20260/36807/14966 22525/39072/14966 21950/38497/14966 +f 20971/37518/14967 20015/36562/14967 21017/37564/14967 +f 20971/37518/14967 21017/37564/14967 22528/39075/14967 +f 22527/39074/14967 21016/37563/14967 20626/37173/14967 +s 1 +f 22527/39074/14967 20626/37173/14967 21975/38522/14967 +s 0 +f 21951/38498/14966 22526/39073/14966 21972/38519/14966 +f 21951/38498/14966 21972/38519/14966 20630/37177/14966 +f 20430/36977/14968 20959/37506/14968 22532/39079/14968 +f 20430/36977/14968 22532/39079/14968 21961/38508/14968 +s 1 +f 20956/37503/14969 20008/36555/14969 21011/37558/14969 +s 0 +f 20956/37503/14969 21011/37558/14969 22530/39077/14969 +f 22529/39076/14969 21010/37557/14969 20619/37166/14969 +f 22529/39076/14969 20619/37166/14969 21976/38523/14969 +f 21960/38507/14968 22531/39078/14968 21978/38525/14968 +f 21960/38507/14968 21978/38525/14968 20641/37188/14968 +s 1 +f 20017/36564/13850 20965/37512/13850 22533/39080/13850 +s 0 +f 20017/36564/13850 22533/39080/13850 21018/37565/13850 +f 20966/37513/13850 20002/36549/13850 21941/38488/13850 +s 1 +f 20966/37513/13850 21941/38488/13850 22536/39083/13850 +s 0 +f 22534/39081/13850 21940/38487/13850 20621/37168/13850 +f 22534/39081/13850 20621/37168/13850 21980/38527/13850 +s 1 +f 21019/37566/13850 22535/39082/13850 21983/38530/13850 +s 0 +f 21019/37566/13850 21983/38530/13850 20628/37175/13850 +f 20006/36553/13854 20962/37509/13854 22540/39087/13854 +f 20006/36553/13854 22540/39087/13854 21009/37556/13854 +f 20961/37508/13854 20013/36560/13854 21934/38481/13854 +s 1 +f 20961/37508/13854 21934/38481/13854 22537/39084/13854 +s 0 +f 22539/39086/13854 21935/38482/13854 20616/37163/13854 +f 22539/39086/13854 20616/37163/13854 21987/38534/13854 +f 21008/37555/13854 22538/39085/13854 21985/38532/13854 +f 21008/37555/13854 21985/38532/13854 20618/37165/13854 +f 22001/38548/14970 22013/38560/14970 20672/37219/14970 +f 22001/38548/14970 20672/37219/14970 20660/37207/14970 +s 1 +f 20487/37034/14971 20211/36758/14971 22004/38551/14971 +s 0 +f 20487/37034/14971 22004/38551/14971 22008/38555/14971 +f 22194/38741/13854 22471/39018/13854 21617/38164/13854 +f 22194/38741/13854 21617/38164/13854 21615/38162/13854 +f 21577/38124/14972 20488/37035/14972 22009/38556/14972 +f 21577/38124/14973 22009/38556/14973 22541/39088/14973 +f 22542/39089/14974 22011/38558/14974 20666/37213/14974 +f 22542/39089/14974 20666/37213/14974 22016/38563/14974 +f 22010/38557/14975 22006/38553/14975 20661/37208/14975 +f 22010/38557/14975 20661/37208/14975 20665/37212/14975 +f 19938/36485/14976 21264/37811/14976 22546/39093/14976 +f 19938/36485/14977 22546/39093/14977 21039/37586/14977 +f 21266/37813/14978 20205/36752/14978 22002/38549/14978 +f 21266/37813/14979 22002/38549/14979 22548/39095/14979 +f 22547/39094/14980 22000/38547/14980 20659/37206/14980 +f 22547/39094/14980 20659/37206/14980 22023/38570/14980 +f 21038/37585/14981 22545/39092/14981 22021/38568/14981 +f 21038/37585/14981 22021/38568/14981 20656/37203/14981 +f 21990/38537/13850 21036/37583/13850 20653/37200/13850 +f 21990/38537/13850 20653/37200/13850 20647/37194/13850 +f 19941/36488/14982 21579/38126/14982 22543/39090/14982 +f 19941/36488/14983 22543/39090/14983 21992/38539/14983 +f 22544/39091/14984 22018/38565/14984 20649/37196/14984 +f 22544/39091/14984 20649/37196/14984 21993/38540/14984 +f 20405/36952/14985 20835/37382/14985 22552/39099/14985 +f 20405/36952/14986 22552/39099/14986 22014/38561/14986 +f 20833/37380/14987 19942/36489/14987 21995/38542/14987 +f 20833/37380/14988 21995/38542/14988 22550/39097/14988 +f 22549/39096/14989 21994/38541/14989 20652/37199/14989 +f 22549/39096/14989 20652/37199/14989 22025/38572/14989 +f 22012/38559/14990 22551/39098/14990 22027/38574/14990 +f 22012/38559/14990 22027/38574/14990 20671/37218/14990 +f 20212/36759/14991 20838/37385/14991 22553/39100/14991 +f 20212/36759/14992 22553/39100/14992 22005/38552/14992 +f 20840/37387/14993 19933/36480/14993 21988/38535/14993 +s 1 +f 20840/37387/14994 21988/38535/14994 22555/39102/14994 +s 0 +f 22556/39103/14995 21989/38536/14995 20645/37192/14995 +f 22556/39103/14995 20645/37192/14995 22030/38577/14995 +f 22007/38554/14996 22554/39101/14996 22028/38575/14996 +f 22007/38554/14996 22028/38575/14996 20662/37209/14996 +f 22038/38585/13854 22042/38589/13854 21545/38092/13854 +f 22038/38585/13854 21545/38092/13854 21543/38090/13854 +o Cube.005 +v 8.775827 3.271681 -7.651776 +v 8.775827 3.271681 -7.651776 +v 8.775827 3.371681 -7.651776 +v 8.775827 3.371681 -7.651776 +v 8.275824 3.271681 -7.651776 +v 8.275824 3.271681 -7.651776 +v 8.275824 3.371681 -7.651776 +v 8.275824 3.371681 -7.651776 +v 8.775827 3.371681 -8.902522 +v 8.775827 3.371681 -8.902522 +v 8.775827 3.371681 -8.902522 +v 8.775827 3.271681 -8.902522 +v 8.775827 3.271681 -8.902522 +v 8.775827 3.271681 -8.902522 +v 8.275824 3.371681 -8.902522 +v 8.275824 3.371681 -8.902522 +v 8.275824 3.371681 -8.902522 +v 8.275824 3.371681 -8.902522 +v 8.275824 3.271681 -8.902522 +v 8.275824 3.271681 -8.902522 +v 8.275824 3.271681 -8.902522 +v 8.275824 3.271681 -8.902522 +v 8.775827 3.371681 -9.402521 +v 8.775827 3.371681 -9.402521 +v 8.775827 3.371681 -9.402521 +v 8.775827 3.271681 -9.402521 +v 8.775827 3.271681 -9.402521 +v 8.775827 3.271681 -9.402521 +v 8.275824 3.371681 -9.402521 +v 8.275824 3.371681 -9.402521 +v 8.275824 3.271681 -9.402521 +v 8.275824 3.271681 -9.402521 +v -13.809975 3.371681 -8.902520 +v -13.809975 3.371681 -8.902520 +v -13.809975 3.371681 -8.902520 +v -13.809975 3.271681 -8.902520 +v -13.809975 3.271681 -8.902520 +v -13.809975 3.271681 -8.902520 +v -13.809975 3.371681 -9.402519 +v -13.809975 3.371681 -9.402519 +v -13.809975 3.271681 -9.402519 +v -13.809975 3.271681 -9.402519 +v -14.409935 3.371681 -8.902519 +v -14.409935 3.371681 -8.902519 +v -14.409935 3.371681 -8.902519 +v -14.409935 3.271681 -8.902519 +v -14.409935 3.271681 -8.902519 +v -14.409935 3.271681 -8.902519 +v -14.409935 3.371681 -9.402519 +v -14.409935 3.371681 -9.402519 +v -14.409935 3.371681 -9.402519 +v -14.409935 3.271681 -9.402519 +v -14.409935 3.271681 -9.402519 +v -14.409935 3.271681 -9.402519 +v -13.809975 3.371681 -3.057707 +v -13.809975 3.371681 -3.057707 +v -13.809975 3.371681 -3.057707 +v -13.809975 3.271681 -3.057707 +v -13.809975 3.271681 -3.057707 +v -13.809975 3.271681 -3.057707 +v -14.409935 3.371681 -3.057707 +v -14.409935 3.371681 -3.057707 +v -14.409935 3.371681 -3.057707 +v -14.409935 3.271681 -3.057707 +v -14.409935 3.271681 -3.057707 +v -14.409935 3.271681 -3.057707 +vn 1.0000 -0.0000 -0.0000 +vn -0.0000 -0.2000 -0.0000 +vn -0.0000 0.2000 -0.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -1.0000 +vn -0.0000 -0.0000 1.0000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +s 0 +f 22559/39106/14997 22557/39104/14997 22568/39115/14997 +f 22559/39106/14997 22568/39115/14997 22565/39112/14997 +f 22569/39116/14998 22575/39122/14998 22587/39134/14998 +f 22569/39116/14998 22587/39134/14998 22583/39130/14998 +s 1 +f 22558/39105/14998 22561/39108/14998 22576/39123/14998 +f 22558/39105/14998 22576/39123/14998 22570/39117/14998 +f 22563/39110/14999 22560/39107/14999 22566/39113/14999 +f 22563/39110/14999 22566/39113/14999 22572/39119/14999 +s 0 +f 22562/39109/15000 22564/39111/15000 22574/39121/15000 +f 22562/39109/15000 22574/39121/15000 22578/39125/15000 +f 22580/39127/15001 22584/39131/15001 22588/39135/15001 +f 22580/39127/15001 22588/39135/15001 22585/39132/15001 +f 22565/39112/14997 22568/39115/14997 22582/39129/14997 +f 22565/39112/14997 22582/39129/14997 22579/39126/14997 +f 22573/39120/14999 22567/39114/14999 22581/39128/14999 +f 22573/39120/14999 22581/39128/14999 22586/39133/14999 +f 22573/39120/14999 22586/39133/14999 22596/39143/14999 +f 22573/39120/14999 22596/39143/14999 22591/39138/14999 +f 22597/39144/14998 22593/39140/14998 22602/39149/14998 +f 22597/39144/14998 22602/39149/14998 22608/39155/14998 +f 22585/39132/15001 22588/39135/15001 22598/39145/15001 +f 22585/39132/15001 22598/39145/15001 22595/39142/15001 +f 22577/39124/15002 22571/39118/15002 22590/39137/15002 +f 22577/39124/15002 22590/39137/15002 22594/39141/15002 +f 22587/39134/14998 22575/39122/14998 22593/39140/14998 +f 22587/39134/14998 22593/39140/14998 22597/39144/14998 +f 22604/39151/15000 22601/39148/15000 22607/39154/15000 +f 22604/39151/15000 22607/39154/15000 22610/39157/15000 +s 1 +f 22600/39147/15000 22603/39150/15000 22622/39169/15000 +f 22600/39147/15000 22622/39169/15000 22619/39166/15000 +s 0 +f 22591/39138/14999 22596/39143/14999 22606/39153/14999 +f 22591/39138/14999 22606/39153/14999 22599/39146/14999 +f 22595/39142/15001 22598/39145/15001 22609/39156/15001 +f 22595/39142/15001 22609/39156/15001 22605/39152/15001 +f 22616/39163/15002 22612/39159/15002 22617/39164/15002 +f 22616/39163/15002 22617/39164/15002 22621/39168/15002 +s 1 +f 22592/39139/14997 22589/39136/14997 22611/39158/14997 +f 22592/39139/14997 22611/39158/14997 22614/39161/14997 +s 0 +f 22591/39138/14999 22599/39146/14999 22618/39165/14999 +f 22591/39138/14999 22618/39165/14999 22613/39160/14999 +f 22602/39149/14998 22593/39140/14998 22615/39162/14998 +f 22602/39149/14998 22615/39162/14998 22620/39167/14998 +o Cube.019 +v 8.607395 3.274535 -9.195597 +v 8.607395 3.274535 -9.195597 +v 8.607395 3.274535 -9.195597 +v 8.607395 3.721602 -9.195597 +v 8.607395 3.721602 -9.195597 +v 8.607395 3.721602 -9.195597 +v 8.607395 3.274535 -8.945597 +v 8.607395 3.274535 -8.945597 +v 8.607395 3.274535 -8.945597 +v 8.607395 3.721602 -8.945597 +v 8.607395 3.721602 -8.945597 +v 8.607395 3.721602 -8.945597 +v 8.357395 3.274535 -9.195597 +v 8.357395 3.274535 -9.195597 +v 8.357395 3.274535 -9.195597 +v 8.357395 3.721602 -9.195597 +v 8.357395 3.721602 -9.195597 +v 8.357395 3.721602 -9.195597 +v 8.357395 3.274535 -8.945597 +v 8.357395 3.274535 -8.945597 +v 8.357395 3.274535 -8.945597 +v 8.357395 3.721602 -8.945597 +v 8.357395 3.721602 -8.945597 +v 8.357395 3.721602 -8.945597 +vn 0.5000 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.5000 +vn -0.5000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.5000 +vn -0.0000 -0.7578 -0.0000 +vn -0.0000 0.7578 -0.0000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +vt 0.375000 1.000000 +vt 0.625000 0.000000 +vt 0.625000 1.000000 +vt 0.875000 0.750000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.625000 0.250000 +vt 0.625000 0.250000 +vt 0.875000 0.500000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.500000 +vt 0.375000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.500000 +vt 0.625000 0.500000 +vt 0.625000 0.500000 +s 0 +f 22623/39170/15003 22626/39173/15003 22632/39179/15003 +f 22623/39170/15003 22632/39179/15003 22629/39176/15003 +f 22631/39178/15004 22633/39180/15004 22644/39191/15004 +f 22631/39178/15004 22644/39191/15004 22642/39189/15004 +f 22643/39190/15005 22646/39193/15005 22640/39187/15005 +f 22643/39190/15005 22640/39187/15005 22637/39184/15005 +f 22636/39183/15006 22638/39185/15006 22627/39174/15006 +f 22636/39183/15006 22627/39174/15006 22625/39172/15006 +f 22630/39177/15007 22641/39188/15007 22635/39182/15007 +f 22630/39177/15007 22635/39182/15007 22624/39171/15007 +f 22645/39192/15008 22634/39181/15008 22628/39175/15008 +f 22645/39192/15008 22628/39175/15008 22639/39186/15008 +o Cube.020 +v 4.907364 3.274535 -9.195597 +v 4.907364 3.274535 -9.195597 +v 4.907364 3.274535 -9.195597 +v 4.907364 3.721602 -9.195597 +v 4.907364 3.721602 -9.195597 +v 4.907364 3.721602 -9.195597 +v 4.907364 3.274535 -8.945597 +v 4.907364 3.274535 -8.945597 +v 4.907364 3.274535 -8.945597 +v 4.907364 3.721602 -8.945597 +v 4.907364 3.721602 -8.945597 +v 4.907364 3.721602 -8.945597 +v 4.657364 3.274535 -9.195597 +v 4.657364 3.274535 -9.195597 +v 4.657364 3.274535 -9.195597 +v 4.657364 3.721602 -9.195597 +v 4.657364 3.721602 -9.195597 +v 4.657364 3.721602 -9.195597 +v 4.657364 3.274535 -8.945597 +v 4.657364 3.274535 -8.945597 +v 4.657364 3.274535 -8.945597 +v 4.657364 3.721602 -8.945597 +v 4.657364 3.721602 -8.945597 +v 4.657364 3.721602 -8.945597 +vn 0.5000 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.5000 +vn -0.5000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.5000 +vn -0.0000 -0.7578 -0.0000 +vn -0.0000 0.7578 -0.0000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +vt 0.375000 1.000000 +vt 0.625000 0.000000 +vt 0.625000 1.000000 +vt 0.875000 0.750000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.625000 0.250000 +vt 0.625000 0.250000 +vt 0.875000 0.500000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.500000 +vt 0.375000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.500000 +vt 0.625000 0.500000 +vt 0.625000 0.500000 +s 0 +f 22647/39194/15009 22650/39197/15009 22656/39203/15009 +f 22647/39194/15009 22656/39203/15009 22653/39200/15009 +f 22655/39202/15010 22657/39204/15010 22668/39215/15010 +f 22655/39202/15010 22668/39215/15010 22666/39213/15010 +f 22667/39214/15011 22670/39217/15011 22664/39211/15011 +f 22667/39214/15011 22664/39211/15011 22661/39208/15011 +f 22660/39207/15012 22662/39209/15012 22651/39198/15012 +f 22660/39207/15012 22651/39198/15012 22649/39196/15012 +f 22654/39201/15013 22665/39212/15013 22659/39206/15013 +f 22654/39201/15013 22659/39206/15013 22648/39195/15013 +f 22669/39216/15014 22658/39205/15014 22652/39199/15014 +f 22669/39216/15014 22652/39199/15014 22663/39210/15014 +o Cube.021 +v 1.207363 3.274535 -9.195596 +v 1.207363 3.274535 -9.195596 +v 1.207363 3.274535 -9.195596 +v 1.207363 3.721602 -9.195596 +v 1.207363 3.721602 -9.195596 +v 1.207363 3.721602 -9.195596 +v 1.207363 3.274535 -8.945596 +v 1.207363 3.274535 -8.945596 +v 1.207363 3.274535 -8.945596 +v 1.207363 3.721602 -8.945596 +v 1.207363 3.721602 -8.945596 +v 1.207363 3.721602 -8.945596 +v 0.957363 3.274535 -9.195596 +v 0.957363 3.274535 -9.195596 +v 0.957363 3.274535 -9.195596 +v 0.957363 3.721602 -9.195596 +v 0.957363 3.721602 -9.195596 +v 0.957363 3.721602 -9.195596 +v 0.957363 3.274535 -8.945596 +v 0.957363 3.274535 -8.945596 +v 0.957363 3.274535 -8.945596 +v 0.957363 3.721602 -8.945596 +v 0.957363 3.721602 -8.945596 +v 0.957363 3.721602 -8.945596 +vn 0.5000 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.5000 +vn -0.5000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.5000 +vn -0.0000 -0.7578 -0.0000 +vn -0.0000 0.7578 -0.0000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +vt 0.375000 1.000000 +vt 0.625000 0.000000 +vt 0.625000 1.000000 +vt 0.875000 0.750000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.625000 0.250000 +vt 0.625000 0.250000 +vt 0.875000 0.500000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.500000 +vt 0.375000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.500000 +vt 0.625000 0.500000 +vt 0.625000 0.500000 +s 0 +f 22671/39218/15015 22674/39221/15015 22680/39227/15015 +f 22671/39218/15015 22680/39227/15015 22677/39224/15015 +f 22679/39226/15016 22681/39228/15016 22692/39239/15016 +f 22679/39226/15016 22692/39239/15016 22690/39237/15016 +f 22691/39238/15017 22694/39241/15017 22688/39235/15017 +f 22691/39238/15017 22688/39235/15017 22685/39232/15017 +f 22684/39231/15018 22686/39233/15018 22675/39222/15018 +f 22684/39231/15018 22675/39222/15018 22673/39220/15018 +f 22678/39225/15019 22689/39236/15019 22683/39230/15019 +f 22678/39225/15019 22683/39230/15019 22672/39219/15019 +f 22693/39240/15020 22682/39229/15020 22676/39223/15020 +f 22693/39240/15020 22676/39223/15020 22687/39234/15020 +o Cube.022 +v -2.492638 3.274535 -9.195596 +v -2.492638 3.274535 -9.195596 +v -2.492638 3.274535 -9.195596 +v -2.492638 3.721602 -9.195596 +v -2.492638 3.721602 -9.195596 +v -2.492638 3.721602 -9.195596 +v -2.492638 3.274535 -8.945596 +v -2.492638 3.274535 -8.945596 +v -2.492638 3.274535 -8.945596 +v -2.492638 3.721602 -8.945596 +v -2.492638 3.721602 -8.945596 +v -2.492638 3.721602 -8.945596 +v -2.742638 3.274535 -9.195596 +v -2.742638 3.274535 -9.195596 +v -2.742638 3.274535 -9.195596 +v -2.742638 3.721602 -9.195596 +v -2.742638 3.721602 -9.195596 +v -2.742638 3.721602 -9.195596 +v -2.742638 3.274535 -8.945596 +v -2.742638 3.274535 -8.945596 +v -2.742638 3.274535 -8.945596 +v -2.742638 3.721602 -8.945596 +v -2.742638 3.721602 -8.945596 +v -2.742638 3.721602 -8.945596 +vn 0.5000 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.5000 +vn -0.5000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.5000 +vn -0.0000 -0.7578 -0.0000 +vn -0.0000 0.7578 -0.0000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +vt 0.375000 1.000000 +vt 0.625000 0.000000 +vt 0.625000 1.000000 +vt 0.875000 0.750000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.625000 0.250000 +vt 0.625000 0.250000 +vt 0.875000 0.500000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.500000 +vt 0.375000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.500000 +vt 0.625000 0.500000 +vt 0.625000 0.500000 +s 0 +f 22695/39242/15021 22698/39245/15021 22704/39251/15021 +f 22695/39242/15021 22704/39251/15021 22701/39248/15021 +f 22703/39250/15022 22705/39252/15022 22716/39263/15022 +f 22703/39250/15022 22716/39263/15022 22714/39261/15022 +f 22715/39262/15023 22718/39265/15023 22712/39259/15023 +f 22715/39262/15023 22712/39259/15023 22709/39256/15023 +f 22708/39255/15024 22710/39257/15024 22699/39246/15024 +f 22708/39255/15024 22699/39246/15024 22697/39244/15024 +f 22702/39249/15025 22713/39260/15025 22707/39254/15025 +f 22702/39249/15025 22707/39254/15025 22696/39243/15025 +f 22717/39264/15026 22706/39253/15026 22700/39247/15026 +f 22717/39264/15026 22700/39247/15026 22711/39258/15026 +o Cube.023 +v -6.192635 3.274535 -9.195596 +v -6.192635 3.274535 -9.195596 +v -6.192635 3.274535 -9.195596 +v -6.192635 3.721602 -9.195596 +v -6.192635 3.721602 -9.195596 +v -6.192635 3.721602 -9.195596 +v -6.192635 3.274535 -8.945596 +v -6.192635 3.274535 -8.945596 +v -6.192635 3.274535 -8.945596 +v -6.192635 3.721602 -8.945596 +v -6.192635 3.721602 -8.945596 +v -6.192635 3.721602 -8.945596 +v -6.442635 3.274535 -9.195596 +v -6.442635 3.274535 -9.195596 +v -6.442635 3.274535 -9.195596 +v -6.442635 3.721602 -9.195596 +v -6.442635 3.721602 -9.195596 +v -6.442635 3.721602 -9.195596 +v -6.442635 3.274535 -8.945596 +v -6.442635 3.274535 -8.945596 +v -6.442635 3.274535 -8.945596 +v -6.442635 3.721602 -8.945596 +v -6.442635 3.721602 -8.945596 +v -6.442635 3.721602 -8.945596 +vn 0.5000 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.5000 +vn -0.5000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.5000 +vn -0.0000 -0.7578 -0.0000 +vn -0.0000 0.7578 -0.0000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +vt 0.375000 1.000000 +vt 0.625000 0.000000 +vt 0.625000 1.000000 +vt 0.875000 0.750000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.625000 0.250000 +vt 0.625000 0.250000 +vt 0.875000 0.500000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.500000 +vt 0.375000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.500000 +vt 0.625000 0.500000 +vt 0.625000 0.500000 +s 0 +f 22719/39266/15027 22722/39269/15027 22728/39275/15027 +f 22719/39266/15027 22728/39275/15027 22725/39272/15027 +f 22727/39274/15028 22729/39276/15028 22740/39287/15028 +f 22727/39274/15028 22740/39287/15028 22738/39285/15028 +f 22739/39286/15029 22742/39289/15029 22736/39283/15029 +f 22739/39286/15029 22736/39283/15029 22733/39280/15029 +f 22732/39279/15030 22734/39281/15030 22723/39270/15030 +f 22732/39279/15030 22723/39270/15030 22721/39268/15030 +f 22726/39273/15031 22737/39284/15031 22731/39278/15031 +f 22726/39273/15031 22731/39278/15031 22720/39267/15031 +f 22741/39288/15032 22730/39277/15032 22724/39271/15032 +f 22741/39288/15032 22724/39271/15032 22735/39282/15032 +o Cube.024 +v -9.991795 3.274535 -9.195595 +v -9.991795 3.274535 -9.195595 +v -9.991795 3.274535 -9.195595 +v -9.991795 3.721602 -9.195595 +v -9.991795 3.721602 -9.195595 +v -9.991795 3.721602 -9.195595 +v -9.991795 3.274535 -8.945595 +v -9.991795 3.274535 -8.945595 +v -9.991795 3.274535 -8.945595 +v -9.991795 3.721602 -8.945595 +v -9.991795 3.721602 -8.945595 +v -9.991795 3.721602 -8.945595 +v -10.241795 3.274535 -9.195595 +v -10.241795 3.274535 -9.195595 +v -10.241795 3.274535 -9.195595 +v -10.241795 3.721602 -9.195595 +v -10.241795 3.721602 -9.195595 +v -10.241795 3.721602 -9.195595 +v -10.241795 3.274535 -8.945595 +v -10.241795 3.274535 -8.945595 +v -10.241795 3.274535 -8.945595 +v -10.241795 3.721602 -8.945595 +v -10.241795 3.721602 -8.945595 +v -10.241795 3.721602 -8.945595 +vn 0.5000 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.5000 +vn -0.5000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.5000 +vn -0.0000 -0.7578 -0.0000 +vn -0.0000 0.7578 -0.0000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +vt 0.375000 1.000000 +vt 0.625000 0.000000 +vt 0.625000 1.000000 +vt 0.875000 0.750000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.625000 0.250000 +vt 0.625000 0.250000 +vt 0.875000 0.500000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.500000 +vt 0.375000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.500000 +vt 0.625000 0.500000 +vt 0.625000 0.500000 +s 0 +f 22743/39290/15033 22746/39293/15033 22752/39299/15033 +f 22743/39290/15033 22752/39299/15033 22749/39296/15033 +f 22751/39298/15034 22753/39300/15034 22764/39311/15034 +f 22751/39298/15034 22764/39311/15034 22762/39309/15034 +f 22763/39310/15035 22766/39313/15035 22760/39307/15035 +f 22763/39310/15035 22760/39307/15035 22757/39304/15035 +f 22756/39303/15036 22758/39305/15036 22747/39294/15036 +f 22756/39303/15036 22747/39294/15036 22745/39292/15036 +f 22750/39297/15037 22761/39308/15037 22755/39302/15037 +f 22750/39297/15037 22755/39302/15037 22744/39291/15037 +f 22765/39312/15038 22754/39301/15038 22748/39295/15038 +f 22765/39312/15038 22748/39295/15038 22759/39306/15038 +o Cube.025 +v -13.959277 3.274535 -9.195598 +v -13.959277 3.274535 -9.195598 +v -13.959277 3.274535 -9.195598 +v -13.959277 3.721602 -9.195598 +v -13.959277 3.721602 -9.195598 +v -13.959277 3.721602 -9.195598 +v -13.959277 3.274535 -8.945598 +v -13.959277 3.274535 -8.945598 +v -13.959277 3.274535 -8.945598 +v -13.959277 3.721602 -8.945598 +v -13.959277 3.721602 -8.945598 +v -13.959277 3.721602 -8.945598 +v -14.209277 3.274535 -9.195598 +v -14.209277 3.274535 -9.195598 +v -14.209277 3.274535 -9.195598 +v -14.209277 3.721602 -9.195598 +v -14.209277 3.721602 -9.195598 +v -14.209277 3.721602 -9.195598 +v -14.209277 3.274535 -8.945598 +v -14.209277 3.274535 -8.945598 +v -14.209277 3.274535 -8.945598 +v -14.209277 3.721602 -8.945598 +v -14.209277 3.721602 -8.945598 +v -14.209277 3.721602 -8.945598 +vn 0.5000 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.5000 +vn -0.5000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.5000 +vn -0.0000 -0.7578 -0.0000 +vn -0.0000 0.7578 -0.0000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +vt 0.375000 1.000000 +vt 0.625000 0.000000 +vt 0.625000 1.000000 +vt 0.875000 0.750000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.625000 0.250000 +vt 0.625000 0.250000 +vt 0.875000 0.500000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.500000 +vt 0.375000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.500000 +vt 0.625000 0.500000 +vt 0.625000 0.500000 +s 0 +f 22767/39314/15039 22770/39317/15039 22776/39323/15039 +f 22767/39314/15039 22776/39323/15039 22773/39320/15039 +f 22775/39322/15040 22777/39324/15040 22788/39335/15040 +f 22775/39322/15040 22788/39335/15040 22786/39333/15040 +f 22787/39334/15041 22790/39337/15041 22784/39331/15041 +f 22787/39334/15041 22784/39331/15041 22781/39328/15041 +f 22780/39327/15042 22782/39329/15042 22771/39318/15042 +f 22780/39327/15042 22771/39318/15042 22769/39316/15042 +f 22774/39321/15043 22785/39332/15043 22779/39326/15043 +f 22774/39321/15043 22779/39326/15043 22768/39315/15043 +f 22789/39336/15044 22778/39325/15044 22772/39319/15044 +f 22789/39336/15044 22772/39319/15044 22783/39330/15044 +o Cylinder.001 +v -16.208555 -0.030320 -18.547264 +v -16.208555 -0.030320 -18.547264 +v -16.208555 0.869680 -18.547264 +v -16.208555 0.869680 -18.547264 +v -16.208555 0.869680 -18.547264 +v -16.208555 0.869680 -18.547264 +v -16.773138 -0.030320 -18.457310 +v -16.773138 -0.030320 -18.457310 +v -16.773138 0.869680 -18.457310 +v -16.773138 0.869680 -18.457310 +v -16.773138 0.869680 -18.457310 +v -16.773138 0.869680 -18.457310 +v -17.341766 -0.030320 -18.516544 +v -17.341766 -0.030320 -18.516544 +v -17.341766 0.869680 -18.516544 +v -17.341766 0.869680 -18.516544 +v -17.341766 0.869680 -18.516544 +v -17.341766 0.869680 -18.516544 +v -17.875687 -0.030320 -18.720932 +v -17.875687 -0.030320 -18.720932 +v -17.875687 0.869680 -18.720932 +v -17.875687 0.869680 -18.720932 +v -17.875687 0.869680 -18.720932 +v -17.875687 0.869680 -18.720932 +v -18.338516 -0.030320 -19.056545 +v -18.338516 -0.030320 -19.056545 +v -18.338516 0.869680 -19.056545 +v -18.338516 0.869680 -19.056545 +v -18.338516 0.869680 -19.056545 +v -18.338516 0.869680 -19.056545 +v -18.338516 0.869680 -19.056545 +v -18.698711 -0.030320 -19.500511 +v -18.698711 -0.030320 -19.500511 +v -18.698711 0.869680 -19.500511 +v -18.698711 0.869680 -19.500511 +v -18.698711 0.869680 -19.500511 +v -18.698711 0.869680 -19.500511 +v -18.931726 -0.030320 -20.022575 +v -18.931726 -0.030320 -20.022575 +v -18.931726 0.869680 -20.022575 +v -18.931726 0.869680 -20.022575 +v -18.931726 0.869680 -20.022575 +v -18.931726 0.869680 -20.022575 +v -19.021681 -0.030320 -20.587158 +v -19.021681 -0.030320 -20.587158 +v -19.021681 0.869680 -20.587158 +v -19.021681 0.869680 -20.587158 +v -19.021681 0.869680 -20.587158 +v -19.021681 0.869680 -20.587158 +v -18.962446 -0.030320 -21.155787 +v -18.962446 -0.030320 -21.155787 +v -18.962446 0.869680 -21.155787 +v -18.962446 0.869680 -21.155787 +v -18.962446 0.869680 -21.155787 +v -18.962446 0.869680 -21.155787 +v -18.962446 0.869680 -21.155787 +v -18.758059 -0.030320 -21.689707 +v -18.758059 -0.030320 -21.689707 +v -18.758059 0.869680 -21.689707 +v -18.758059 0.869680 -21.689707 +v -18.758059 0.869680 -21.689707 +v -18.758059 0.869680 -21.689707 +v -18.422445 -0.030320 -22.152536 +v -18.422445 -0.030320 -22.152536 +v -18.422445 0.869680 -22.152536 +v -18.422445 0.869680 -22.152536 +v -18.422445 0.869680 -22.152536 +v -18.422445 0.869680 -22.152536 +v -17.978479 -0.030320 -22.512732 +v -17.978479 -0.030320 -22.512732 +v -17.978479 0.869680 -22.512732 +v -17.978479 0.869680 -22.512732 +v -17.978479 0.869680 -22.512732 +v -17.978479 0.869680 -22.512732 +v -17.456415 -0.030320 -22.745747 +v -17.456415 -0.030320 -22.745747 +v -17.456415 0.869680 -22.745747 +v -17.456415 0.869680 -22.745747 +v -17.456415 0.869680 -22.745747 +v -17.456415 0.869680 -22.745747 +v -16.891832 -0.030320 -22.835701 +v -16.891832 -0.030320 -22.835701 +v -16.891832 0.869680 -22.835701 +v -16.891832 0.869680 -22.835701 +v -16.891832 0.869680 -22.835701 +v -16.891832 0.869680 -22.835701 +v -16.323206 -0.030320 -22.776466 +v -16.323206 -0.030320 -22.776466 +v -16.323206 0.869680 -22.776466 +v -16.323206 0.869680 -22.776466 +v -16.323206 0.869680 -22.776466 +v -16.323206 0.869680 -22.776466 +v -15.789284 -0.030320 -22.572079 +v -15.789284 -0.030320 -22.572079 +v -15.789284 0.869680 -22.572079 +v -15.789284 0.869680 -22.572079 +v -15.789284 0.869680 -22.572079 +v -15.789284 0.869680 -22.572079 +v -15.326455 -0.030320 -22.236465 +v -15.326455 -0.030320 -22.236465 +v -15.326455 0.869680 -22.236465 +v -15.326455 0.869680 -22.236465 +v -15.326455 0.869680 -22.236465 +v -15.326455 0.869680 -22.236465 +v -14.966260 -0.030320 -21.792500 +v -14.966260 -0.030320 -21.792500 +v -14.966260 0.869680 -21.792500 +v -14.966260 0.869680 -21.792500 +v -14.966260 0.869680 -21.792500 +v -14.966260 0.869680 -21.792500 +v -14.733245 -0.030320 -21.270435 +v -14.733245 -0.030320 -21.270435 +v -14.733245 0.869680 -21.270435 +v -14.733245 0.869680 -21.270435 +v -14.733245 0.869680 -21.270435 +v -14.733245 0.869680 -21.270435 +v -14.643290 -0.030320 -20.705853 +v -14.643290 -0.030320 -20.705853 +v -14.643290 0.869680 -20.705853 +v -14.643290 0.869680 -20.705853 +v -14.643290 0.869680 -20.705853 +v -14.643290 0.869680 -20.705853 +v -14.702524 -0.030320 -20.137226 +v -14.702524 -0.030320 -20.137226 +v -14.702524 0.869680 -20.137226 +v -14.702524 0.869680 -20.137226 +v -14.702524 0.869680 -20.137226 +v -14.702524 0.869680 -20.137226 +v -14.906912 -0.030320 -19.603304 +v -14.906912 -0.030320 -19.603304 +v -14.906912 0.869680 -19.603304 +v -14.906912 0.869680 -19.603304 +v -14.906912 0.869680 -19.603304 +v -14.906912 0.869680 -19.603304 +v -15.242525 -0.030320 -19.140476 +v -15.242525 -0.030320 -19.140476 +v -15.242525 0.869680 -19.140476 +v -15.242525 0.869680 -19.140476 +v -15.242525 0.869680 -19.140476 +v -15.242525 0.869680 -19.140476 +v -15.686490 -0.030320 -18.780281 +v -15.686490 -0.030320 -18.780281 +v -15.686490 0.869680 -18.780281 +v -15.686490 0.869680 -18.780281 +v -15.686490 0.869680 -18.780281 +v -15.686490 0.869680 -18.780281 +v -16.351006 -0.030320 -19.026543 +v -16.351006 -0.030320 -19.026543 +v -16.351006 0.869680 -19.026543 +v -16.351006 0.869680 -19.026543 +v -16.351006 0.869680 -19.026543 +v -16.351006 0.869680 -19.026543 +v -16.786688 -0.030320 -18.957127 +v -16.786688 -0.030320 -18.957127 +v -16.786688 0.869680 -18.957127 +v -16.786688 0.869680 -18.957127 +v -16.786688 0.869680 -18.957127 +v -16.786688 0.869680 -18.957127 +v -15.948133 -0.030320 -19.206360 +v -15.948133 -0.030320 -19.206360 +v -15.948133 0.869680 -19.206360 +v -15.948133 0.869680 -19.206360 +v -15.948133 0.869680 -19.206360 +v -15.948133 0.869680 -19.206360 +v -15.605530 -0.030320 -19.484318 +v -15.605530 -0.030320 -19.484318 +v -15.605530 0.869680 -19.484318 +v -15.605530 0.869680 -19.484318 +v -15.605530 0.869680 -19.484318 +v -15.605530 0.869680 -19.484318 +v -17.225492 -0.030320 -19.002836 +v -17.225492 -0.030320 -19.002836 +v -17.225492 0.869680 -19.002836 +v -17.225492 0.869680 -19.002836 +v -17.225492 0.869680 -19.002836 +v -17.225492 0.869680 -19.002836 +v -17.637514 -0.030320 -19.160561 +v -17.637514 -0.030320 -19.160561 +v -17.637514 0.869680 -19.160561 +v -17.637514 0.869680 -19.160561 +v -17.637514 0.869680 -19.160561 +v -17.637514 0.869680 -19.160561 +v -17.994673 -0.030320 -19.419550 +v -17.994673 -0.030320 -19.419550 +v -17.994673 0.869680 -19.419550 +v -17.994673 0.869680 -19.419550 +v -17.994673 0.869680 -19.419550 +v -17.994673 0.869680 -19.419550 +v -15.346540 -0.030320 -19.841478 +v -15.346540 -0.030320 -19.841478 +v -15.346540 0.869680 -19.841478 +v -15.346540 0.869680 -19.841478 +v -15.346540 0.869680 -19.841478 +v -15.346540 0.869680 -19.841478 +v -15.188817 -0.030320 -20.253500 +v -15.188817 -0.030320 -20.253500 +v -15.188817 0.869680 -20.253500 +v -15.188817 0.869680 -20.253500 +v -15.188817 0.869680 -20.253500 +v -15.188817 0.869680 -20.253500 +v -18.452448 -0.030320 -20.165026 +v -18.452448 -0.030320 -20.165026 +v -18.452448 0.869680 -20.165026 +v -18.452448 0.869680 -20.165026 +v -18.452448 0.869680 -20.165026 +v -18.452448 0.869680 -20.165026 +v -18.272633 -0.030320 -19.762154 +v -18.272633 -0.030320 -19.762154 +v -18.272633 0.869680 -19.762154 +v -18.272633 0.869680 -19.762154 +v -18.272633 0.869680 -19.762154 +v -18.272633 0.869680 -19.762154 +v -15.143106 -0.030320 -20.692303 +v -15.143106 -0.030320 -20.692303 +v -15.143106 0.869680 -20.692303 +v -15.143106 0.869680 -20.692303 +v -15.143106 0.869680 -20.692303 +v -15.143106 0.869680 -20.692303 +v -15.212523 0.869680 -21.127987 +v -15.212523 0.869680 -21.127987 +v -15.212523 0.869680 -21.127987 +v -15.212523 0.869680 -21.127987 +v -15.212523 -0.030320 -21.127987 +v -15.212523 -0.030320 -21.127987 +v -18.521864 -0.030320 -20.600708 +v -18.521864 -0.030320 -20.600708 +v -18.521864 0.869680 -20.600708 +v -18.521864 0.869680 -20.600708 +v -18.521864 0.869680 -20.600708 +v -18.521864 0.869680 -20.600708 +v -15.392339 0.869680 -21.530857 +v -15.392339 0.869680 -21.530857 +v -15.392339 0.869680 -21.530857 +v -15.392339 0.869680 -21.530857 +v -15.392339 -0.030320 -21.530857 +v -15.392339 -0.030320 -21.530857 +v -18.476154 0.869680 -21.039513 +v -18.476154 0.869680 -21.039513 +v -18.476154 0.869680 -21.039513 +v -18.476154 0.869680 -21.039513 +v -18.476154 -0.030320 -21.039513 +v -18.476154 -0.030320 -21.039513 +v -17.716837 0.869680 -22.086653 +v -17.716837 0.869680 -22.086653 +v -17.716837 0.869680 -22.086653 +v -17.716837 0.869680 -22.086653 +v -17.716837 -0.030320 -22.086653 +v -17.716837 -0.030320 -22.086653 +v -18.059441 0.869680 -21.808693 +v -18.059441 0.869680 -21.808693 +v -18.059441 0.869680 -21.808693 +v -18.059441 0.869680 -21.808693 +v -18.059441 -0.030320 -21.808693 +v -18.059441 -0.030320 -21.808693 +v -18.318430 0.869680 -21.451532 +v -18.318430 0.869680 -21.451532 +v -18.318430 0.869680 -21.451532 +v -18.318430 0.869680 -21.451532 +v -18.318430 -0.030320 -21.451532 +v -18.318430 -0.030320 -21.451532 +v -17.313967 0.869680 -22.266468 +v -17.313967 0.869680 -22.266468 +v -17.313967 0.869680 -22.266468 +v -17.313967 0.869680 -22.266468 +v -17.313967 -0.030320 -22.266468 +v -17.313967 -0.030320 -22.266468 +v -16.878283 0.869680 -22.335884 +v -16.878283 0.869680 -22.335884 +v -16.878283 0.869680 -22.335884 +v -16.878283 0.869680 -22.335884 +v -16.878283 -0.030320 -22.335884 +v -16.878283 -0.030320 -22.335884 +v -16.439480 0.869680 -22.290174 +v -16.439480 0.869680 -22.290174 +v -16.439480 0.869680 -22.290174 +v -16.439480 0.869680 -22.290174 +v -16.439480 -0.030320 -22.290174 +v -16.439480 -0.030320 -22.290174 +v -16.027458 0.869680 -22.132450 +v -16.027458 0.869680 -22.132450 +v -16.027458 0.869680 -22.132450 +v -16.027458 0.869680 -22.132450 +v -16.027458 -0.030320 -22.132450 +v -16.027458 -0.030320 -22.132450 +v -15.670298 0.869680 -21.873461 +v -15.670298 0.869680 -21.873461 +v -15.670298 0.869680 -21.873461 +v -15.670298 0.869680 -21.873461 +v -15.670298 -0.030320 -21.873461 +v -15.670298 -0.030320 -21.873461 +v -18.338516 0.607320 -19.056545 +v -18.338516 0.607320 -19.056545 +v -18.962446 0.607320 -21.155787 +v -18.962446 0.607320 -21.155787 +v -14.819242 0.607320 -20.102533 +v -15.443172 0.607320 -22.201775 +v -18.536268 0.607320 -21.884922 +v -16.198410 0.607320 -22.579773 +v -16.999401 0.607320 -18.513157 +v -15.644180 0.607320 -18.915951 +vn 0.1573 -0.0000 0.9875 +vn -0.1036 -0.0000 0.9946 +vn -0.3575 -0.0000 0.9339 +vn -0.5870 -0.0000 0.8096 +vn -0.7766 -0.0000 0.6300 +vn -0.9132 -0.0000 0.4076 +vn -0.9875 -0.0000 0.1573 +vn -0.9946 -0.0000 -0.1036 +vn -0.9339 -0.0000 -0.3575 +vn -0.8096 -0.0000 -0.5870 +vn -0.6300 -0.0000 -0.7766 +vn -0.4076 -0.0000 -0.9132 +vn -0.1573 -0.0000 -0.9875 +vn 0.1036 -0.0000 -0.9946 +vn 0.3575 -0.0000 -0.9339 +vn 0.5870 -0.0000 -0.8096 +vn 0.7766 -0.0000 -0.6300 +vn 0.9132 -0.0000 -0.4076 +vn 0.9875 -0.0000 -0.1573 +vn 0.9946 -0.0000 0.1036 +vn 0.9339 -0.0000 0.3575 +vn 0.8096 -0.0000 0.5870 +vn 0.6300 -0.0000 0.7766 +vn 0.4076 -0.0000 0.9132 +vn -0.0000 1.0000 -0.0000 +vn -0.9586 -0.0000 0.2849 +vn -0.0000 -1.0000 -0.0000 +vt 0.826823 0.500463 +vt 0.900260 0.500463 +vt 0.826823 0.536574 +vt 0.900260 0.536574 +vt 0.900260 0.536574 +vt 0.900260 0.536574 +vt 0.897656 0.500463 +vt 0.897656 0.500463 +vt 0.897656 0.536574 +vt 0.897656 0.536574 +vt 0.897656 0.536574 +vt 0.897656 0.536574 +vt 0.894531 0.500463 +vt 0.894531 0.500463 +vt 0.894531 0.536574 +vt 0.894531 0.536574 +vt 0.894531 0.536574 +vt 0.894531 0.536574 +vt 0.891406 0.500463 +vt 0.891406 0.500463 +vt 0.891406 0.536574 +vt 0.891406 0.536574 +vt 0.891406 0.536574 +vt 0.891406 0.536574 +vt 0.888281 0.500463 +vt 0.888281 0.500463 +vt 0.888281 0.536574 +vt 0.888281 0.536574 +vt 0.888281 0.536574 +vt 0.888281 0.536574 +vt 0.826823 0.463426 +vt 0.885156 0.500463 +vt 0.885156 0.500463 +vt 0.885156 0.536574 +vt 0.885156 0.536574 +vt 0.885156 0.536574 +vt 0.885156 0.536574 +vt 0.882031 0.500463 +vt 0.882031 0.500463 +vt 0.882031 0.536574 +vt 0.882031 0.536574 +vt 0.882031 0.536574 +vt 0.882031 0.536574 +vt 0.878906 0.500463 +vt 0.878906 0.500463 +vt 0.878906 0.536574 +vt 0.878906 0.536574 +vt 0.878906 0.536574 +vt 0.878906 0.536574 +vt 0.875781 0.500463 +vt 0.875781 0.500463 +vt 0.875781 0.536574 +vt 0.875781 0.536574 +vt 0.875781 0.536574 +vt 0.875781 0.536574 +vt 0.826823 0.463426 +vt 0.872656 0.500463 +vt 0.872656 0.500463 +vt 0.872656 0.536574 +vt 0.872656 0.536574 +vt 0.872656 0.536574 +vt 0.872656 0.536574 +vt 0.869531 0.500463 +vt 0.869531 0.500463 +vt 0.869531 0.536574 +vt 0.869531 0.536574 +vt 0.869531 0.536574 +vt 0.869531 0.536574 +vt 0.866406 0.500463 +vt 0.866406 0.500463 +vt 0.866406 0.536574 +vt 0.866406 0.536574 +vt 0.866406 0.536574 +vt 0.866406 0.536574 +vt 0.863281 0.500463 +vt 0.863281 0.500463 +vt 0.863281 0.536574 +vt 0.863281 0.536574 +vt 0.863281 0.536574 +vt 0.863281 0.536574 +vt 0.860677 0.500463 +vt 0.860677 0.500463 +vt 0.860677 0.536574 +vt 0.860677 0.536574 +vt 0.860677 0.536574 +vt 0.860677 0.536574 +vt 0.857552 0.500463 +vt 0.857552 0.500463 +vt 0.857552 0.536574 +vt 0.857552 0.536574 +vt 0.857552 0.536574 +vt 0.857552 0.536574 +vt 0.854427 0.500463 +vt 0.854427 0.500463 +vt 0.854427 0.536574 +vt 0.854427 0.536574 +vt 0.854427 0.536574 +vt 0.854427 0.536574 +vt 0.851302 0.500463 +vt 0.851302 0.500463 +vt 0.851302 0.536574 +vt 0.851302 0.536574 +vt 0.851302 0.536574 +vt 0.851302 0.536574 +vt 0.848177 0.500463 +vt 0.848177 0.500463 +vt 0.848177 0.536574 +vt 0.848177 0.536574 +vt 0.848177 0.536574 +vt 0.848177 0.536574 +vt 0.845052 0.500463 +vt 0.845052 0.500463 +vt 0.845052 0.536574 +vt 0.845052 0.536574 +vt 0.845052 0.536574 +vt 0.845052 0.536574 +vt 0.841927 0.500463 +vt 0.841927 0.500463 +vt 0.841927 0.536574 +vt 0.841927 0.536574 +vt 0.841927 0.536574 +vt 0.841927 0.536574 +vt 0.838802 0.500463 +vt 0.838802 0.500463 +vt 0.838802 0.536574 +vt 0.838802 0.536574 +vt 0.838802 0.536574 +vt 0.838802 0.536574 +vt 0.835677 0.500463 +vt 0.835677 0.500463 +vt 0.835677 0.536574 +vt 0.835677 0.536574 +vt 0.835677 0.536574 +vt 0.835677 0.536574 +vt 0.832552 0.500463 +vt 0.832552 0.500463 +vt 0.832552 0.536574 +vt 0.832552 0.536574 +vt 0.832552 0.536574 +vt 0.832552 0.536574 +vt 0.829427 0.500463 +vt 0.829427 0.500463 +vt 0.829427 0.536574 +vt 0.829427 0.536574 +vt 0.829427 0.536574 +vt 0.829427 0.536574 +vt 0.900260 0.513426 +vt 0.826823 0.513426 +vt 0.900260 0.523611 +vt 0.826823 0.523611 +vt 0.900260 0.523611 +vt 0.826823 0.523611 +vt 0.897656 0.513426 +vt 0.897656 0.513426 +vt 0.897656 0.523611 +vt 0.897656 0.523611 +vt 0.897656 0.523611 +vt 0.897656 0.523611 +vt 0.829427 0.513426 +vt 0.829427 0.513426 +vt 0.829427 0.523611 +vt 0.829427 0.523611 +vt 0.829427 0.523611 +vt 0.829427 0.523611 +vt 0.832552 0.513426 +vt 0.832552 0.513426 +vt 0.832552 0.523611 +vt 0.832552 0.523611 +vt 0.832552 0.523611 +vt 0.832552 0.523611 +vt 0.894531 0.513426 +vt 0.894531 0.513426 +vt 0.894531 0.523611 +vt 0.894531 0.523611 +vt 0.894531 0.523611 +vt 0.894531 0.523611 +vt 0.891406 0.513426 +vt 0.891406 0.513426 +vt 0.891406 0.523611 +vt 0.891406 0.523611 +vt 0.891406 0.523611 +vt 0.891406 0.523611 +vt 0.888281 0.513426 +vt 0.888281 0.513426 +vt 0.888281 0.523611 +vt 0.888281 0.523611 +vt 0.888281 0.523611 +vt 0.888281 0.523611 +vt 0.835677 0.513426 +vt 0.835677 0.513426 +vt 0.835677 0.523611 +vt 0.835677 0.523611 +vt 0.835677 0.523611 +vt 0.835677 0.523611 +vt 0.838802 0.513426 +vt 0.838802 0.513426 +vt 0.838802 0.523611 +vt 0.838802 0.523611 +vt 0.838802 0.523611 +vt 0.838802 0.523611 +vt 0.882031 0.513426 +vt 0.882031 0.513426 +vt 0.882031 0.523611 +vt 0.882031 0.523611 +vt 0.882031 0.523611 +vt 0.882031 0.523611 +vt 0.885156 0.513426 +vt 0.885156 0.513426 +vt 0.885156 0.523611 +vt 0.885156 0.523611 +vt 0.885156 0.523611 +vt 0.885156 0.523611 +vt 0.841927 0.513426 +vt 0.841927 0.513426 +vt 0.841927 0.523611 +vt 0.841927 0.523611 +vt 0.841927 0.523611 +vt 0.841927 0.523611 +vt 0.845052 0.523611 +vt 0.845052 0.523611 +vt 0.845052 0.523611 +vt 0.845052 0.523611 +vt 0.845052 0.513426 +vt 0.845052 0.513426 +vt 0.878906 0.513426 +vt 0.878906 0.513426 +vt 0.878906 0.523611 +vt 0.878906 0.523611 +vt 0.878906 0.523611 +vt 0.878906 0.523611 +vt 0.848177 0.523611 +vt 0.848177 0.523611 +vt 0.848177 0.523611 +vt 0.848177 0.523611 +vt 0.848177 0.513426 +vt 0.848177 0.513426 +vt 0.875781 0.523611 +vt 0.875781 0.523611 +vt 0.875781 0.523611 +vt 0.875781 0.523611 +vt 0.875781 0.513426 +vt 0.875781 0.513426 +vt 0.866406 0.523611 +vt 0.866406 0.523611 +vt 0.866406 0.523611 +vt 0.866406 0.523611 +vt 0.866406 0.513426 +vt 0.866406 0.513426 +vt 0.869531 0.523611 +vt 0.869531 0.523611 +vt 0.869531 0.523611 +vt 0.869531 0.523611 +vt 0.869531 0.513426 +vt 0.869531 0.513426 +vt 0.872656 0.523611 +vt 0.872656 0.523611 +vt 0.872656 0.523611 +vt 0.872656 0.523611 +vt 0.872656 0.513426 +vt 0.872656 0.513426 +vt 0.863281 0.523611 +vt 0.863281 0.523611 +vt 0.863281 0.523611 +vt 0.863281 0.523611 +vt 0.863281 0.513426 +vt 0.863281 0.513426 +vt 0.860677 0.523611 +vt 0.860677 0.523611 +vt 0.860677 0.523611 +vt 0.860677 0.523611 +vt 0.860677 0.513426 +vt 0.860677 0.513426 +vt 0.857552 0.523611 +vt 0.857552 0.523611 +vt 0.857552 0.523611 +vt 0.857552 0.523611 +vt 0.857552 0.513426 +vt 0.857552 0.513426 +vt 0.854427 0.523611 +vt 0.854427 0.523611 +vt 0.854427 0.523611 +vt 0.854427 0.523611 +vt 0.854427 0.513426 +vt 0.854427 0.513426 +vt 0.851302 0.523611 +vt 0.851302 0.523611 +vt 0.851302 0.523611 +vt 0.851302 0.523611 +vt 0.851302 0.513426 +vt 0.851302 0.513426 +vt 0.826823 0.463426 +vt 0.826823 0.463426 +vt 0.826823 0.463426 +vt 0.826823 0.463426 +vt 0.826823 0.463426 +vt 0.826823 0.463426 +vt 0.826823 0.463426 +vt 0.826823 0.463426 +vt 0.826823 0.463426 +vt 0.826823 0.463426 +s 0 +usemtl Generic_walls +f 22792/39339/15045 22796/39343/15045 22801/39348/15045 +f 22792/39339/15045 22801/39348/15045 22797/39344/15045 +f 22798/39345/15046 22802/39349/15046 22807/39354/15046 +f 22798/39345/15046 22807/39354/15046 22803/39350/15046 +f 22804/39351/15047 22808/39355/15047 22813/39360/15047 +f 22804/39351/15047 22813/39360/15047 22809/39356/15047 +s 1 +f 22810/39357/15048 22814/39361/15048 22819/39366/15048 +f 22810/39357/15048 22819/39366/15048 22815/39362/15048 +s 0 +f 22816/39363/15049 22820/39367/15049 22826/39373/15049 +f 22816/39363/15049 22826/39373/15049 22822/39369/15049 +f 22823/39370/15050 22827/39374/15050 22833/39380/15050 +f 22823/39370/15050 22833/39380/15050 22829/39376/15050 +s 1 +f 22828/39375/15051 22832/39379/15051 22839/39386/15051 +f 22828/39375/15051 22839/39386/15051 22835/39382/15051 +s 0 +f 22834/39381/15052 22838/39385/15052 22845/39392/15052 +f 22834/39381/15052 22845/39392/15052 22841/39388/15052 +f 22840/39387/15053 22844/39391/15053 22852/39399/15053 +f 22840/39387/15053 22852/39399/15053 22848/39395/15053 +f 22847/39394/15054 22851/39398/15054 22858/39405/15054 +f 22847/39394/15054 22858/39405/15054 22854/39401/15054 +f 22853/39400/15055 22857/39404/15055 22864/39411/15055 +f 22853/39400/15055 22864/39411/15055 22860/39407/15055 +f 22859/39406/15056 22863/39410/15056 22870/39417/15056 +f 22859/39406/15056 22870/39417/15056 22866/39413/15056 +f 22865/39412/15057 22867/39414/15057 22874/39421/15057 +f 22865/39412/15057 22874/39421/15057 22872/39419/15057 +f 22871/39418/15058 22873/39420/15058 22880/39427/15058 +f 22871/39418/15058 22880/39427/15058 22878/39425/15058 +f 22877/39424/15059 22879/39426/15059 22886/39433/15059 +f 22877/39424/15059 22886/39433/15059 22884/39431/15059 +f 22883/39430/15060 22885/39432/15060 22892/39439/15060 +f 22883/39430/15060 22892/39439/15060 22890/39437/15060 +f 22889/39436/15061 22891/39438/15061 22898/39445/15061 +f 22889/39436/15061 22898/39445/15061 22896/39443/15061 +f 22895/39442/15062 22897/39444/15062 22904/39451/15062 +f 22895/39442/15062 22904/39451/15062 22902/39449/15062 +f 22901/39448/15063 22903/39450/15063 22909/39456/15063 +f 22901/39448/15063 22909/39456/15063 22907/39454/15063 +f 22908/39455/15064 22910/39457/15064 22915/39462/15064 +f 22908/39455/15064 22915/39462/15064 22913/39460/15064 +f 22914/39461/15065 22916/39463/15065 22921/39468/15065 +f 22914/39461/15065 22921/39468/15065 22919/39466/15065 +f 22920/39467/15066 22922/39469/15066 22927/39474/15066 +f 22920/39467/15066 22927/39474/15066 22925/39472/15066 +f 22926/39473/15067 22928/39475/15067 22933/39480/15067 +f 22926/39473/15067 22933/39480/15067 22931/39478/15067 +f 22932/39479/15068 22934/39481/15068 22793/39340/15068 +f 22932/39479/15068 22793/39340/15068 22791/39338/15068 +f 22881/39428/15069 23063/39610/15069 23069/39616/15069 +f 22881/39428/15069 23069/39616/15069 22887/39434/15069 +f 23015/39562/15063 23017/39564/15063 22994/39541/15063 +f 23015/39562/15063 22994/39541/15063 22992/39539/15063 +f 23031/39578/15064 23027/39574/15064 23018/39565/15064 +f 23031/39578/15064 23018/39565/15064 23016/39563/15064 +f 22968/39515/15059 22970/39517/15059 22963/39510/15059 +f 22968/39515/15059 22963/39510/15059 22961/39508/15059 +f 22991/39538/15062 22993/39540/15062 22999/39546/15062 +f 22991/39538/15062 22999/39546/15062 22997/39544/15062 +s 1 +f 22974/39521/15060 22976/39523/15060 22969/39516/15060 +f 22974/39521/15060 22969/39516/15060 22967/39514/15060 +s 0 +f 22980/39527/15053 22984/39531/15053 22989/39536/15053 +f 22980/39527/15053 22989/39536/15053 22985/39532/15053 +f 22888/39435/15069 23070/39617/15069 23076/39623/15069 +f 22888/39435/15069 23076/39623/15069 22894/39441/15069 +f 22938/39485/15056 22942/39489/15056 22953/39500/15056 +f 22938/39485/15056 22953/39500/15056 22949/39496/15056 +f 23049/39596/15065 23045/39592/15065 23028/39575/15065 +f 23049/39596/15065 23028/39575/15065 23032/39579/15065 +f 23037/39584/15067 23033/39580/15067 23040/39587/15067 +f 23037/39584/15067 23040/39587/15067 23044/39591/15067 +f 23013/39560/15050 23011/39558/15050 23024/39571/15050 +f 23013/39560/15050 23024/39571/15050 23026/39573/15050 +f 23043/39590/15066 23039/39586/15066 23046/39593/15066 +f 23043/39590/15066 23046/39593/15066 23050/39597/15066 +f 23079/39626/15048 23077/39624/15048 23072/39619/15048 +s 1 +f 23079/39626/15048 23072/39619/15048 23074/39621/15048 +s 0 +f 22876/39423/15069 23058/39605/15069 23064/39611/15069 +f 22876/39423/15069 23064/39611/15069 22882/39429/15069 +f 23073/39620/15047 23071/39618/15047 23066/39613/15047 +s 1 +f 23073/39620/15047 23066/39613/15047 23068/39615/15047 +f 23055/39602/15068 23051/39598/15068 23034/39581/15068 +s 0 +f 23055/39602/15068 23034/39581/15068 23038/39585/15068 +f 22986/39533/15052 22990/39537/15052 23007/39554/15052 +f 22986/39533/15052 23007/39554/15052 23003/39550/15052 +f 23004/39551/15051 23008/39555/15051 23012/39559/15051 +f 23004/39551/15051 23012/39559/15051 23014/39561/15051 +f 22944/39491/15057 22946/39493/15057 22939/39486/15057 +f 22944/39491/15057 22939/39486/15057 22937/39484/15057 +f 22956/39503/15054 22960/39507/15054 22983/39530/15054 +f 22956/39503/15054 22983/39530/15054 22979/39526/15054 +s 1 +f 23025/39572/15049 23023/39570/15049 23078/39625/15049 +f 23025/39572/15049 23078/39625/15049 23080/39627/15049 +s 0 +f 23067/39614/15046 23065/39612/15046 23060/39607/15046 +f 23067/39614/15046 23060/39607/15046 23062/39609/15046 +f 23061/39608/15045 23059/39606/15045 23054/39601/15045 +f 23061/39608/15045 23054/39601/15045 23056/39603/15045 +f 22962/39509/15058 22964/39511/15058 22945/39492/15058 +s 1 +f 22962/39509/15058 22945/39492/15058 22943/39490/15058 +s 0 +f 22998/39545/15061 23000/39547/15061 22975/39522/15061 +f 22998/39545/15061 22975/39522/15061 22973/39520/15061 +f 22950/39497/15055 22954/39501/15055 22959/39506/15055 +f 22950/39497/15055 22959/39506/15055 22955/39502/15055 +f 22893/39440/15069 23075/39622/15069 23022/39569/15069 +f 22893/39440/15069 23022/39569/15069 22900/39447/15069 +f 22899/39446/15069 23021/39568/15069 23010/39557/15069 +f 22899/39446/15069 23010/39557/15069 22906/39453/15069 +f 22905/39452/15069 23009/39556/15069 23006/39553/15069 +f 22905/39452/15069 23006/39553/15069 22912/39459/15069 +f 22911/39458/15069 23005/39552/15069 22987/39534/15069 +f 22911/39458/15069 22987/39534/15069 22917/39464/15069 +f 22868/39415/15069 23052/39599/15069 23057/39604/15069 +f 22868/39415/15069 23057/39604/15069 22875/39422/15069 +f 22861/39408/15069 23035/39582/15069 23053/39600/15069 +f 22861/39408/15069 23053/39600/15069 22869/39416/15069 +f 22856/39403/15069 23042/39589/15069 23036/39583/15069 +f 22856/39403/15069 23036/39583/15069 22862/39409/15069 +f 22849/39396/15069 23047/39594/15069 23041/39588/15069 +f 22849/39396/15069 23041/39588/15069 22855/39402/15069 +f 22842/39389/15069 23029/39576/15069 23048/39595/15069 +f 22842/39389/15069 23048/39595/15069 22850/39397/15069 +f 22836/39383/15069 23019/39566/15069 23030/39577/15069 +f 22836/39383/15069 23030/39577/15069 22843/39390/15069 +f 22830/39377/15069 22995/39542/15069 23020/39567/15069 +f 22830/39377/15069 23020/39567/15069 22837/39384/15069 +f 22825/39372/15069 23002/39549/15069 22996/39543/15069 +f 22825/39372/15069 22996/39543/15069 22831/39378/15069 +f 22818/39365/15069 22978/39525/15069 23001/39548/15069 +f 22818/39365/15069 23001/39548/15069 22824/39371/15069 +f 22811/39358/15069 22971/39518/15069 22977/39524/15069 +f 22811/39358/15069 22977/39524/15069 22817/39364/15069 +f 22806/39353/15069 22966/39513/15069 22972/39519/15069 +f 22806/39353/15069 22972/39519/15069 22812/39359/15069 +f 22800/39347/15069 22948/39495/15069 22965/39512/15069 +f 22800/39347/15069 22965/39512/15069 22805/39352/15069 +f 22795/39342/15069 22941/39488/15069 22947/39494/15069 +f 22795/39342/15069 22947/39494/15069 22799/39346/15069 +f 22935/39482/15069 22951/39498/15069 22940/39487/15069 +f 22935/39482/15069 22940/39487/15069 22794/39341/15069 +f 22929/39476/15069 22957/39504/15069 22952/39499/15069 +f 22929/39476/15069 22952/39499/15069 22936/39483/15069 +f 22924/39471/15069 22982/39529/15069 22958/39505/15069 +f 22924/39471/15069 22958/39505/15069 22930/39477/15069 +f 22918/39465/15069 22988/39535/15069 22981/39528/15069 +f 22918/39465/15069 22981/39528/15069 22923/39470/15069 +f 22821/39368/15070 22846/39393/15070 23084/39631/15070 +f 22821/39368/15070 23084/39631/15070 23082/39629/15070 +f 23081/39628/15069 23086/39633/15069 23083/39630/15069 +f 23081/39628/15069 23085/39632/15069 23086/39633/15069 +f 23086/39633/15069 23087/39634/15069 23083/39630/15069 +f 23086/39633/15069 23088/39635/15069 23087/39634/15069 +f 23081/39628/15069 23090/39637/15069 23085/39632/15069 +f 23081/39628/15071 23090/39637/15071 23089/39636/15071 +o Plane.001 +v 20.536451 0.029680 -35.392410 +v 20.256880 0.029680 -36.400314 +v 10.177874 0.029680 -27.134884 +v 8.436815 0.029680 -28.832199 +v 11.763360 0.029680 -28.683849 +v 13.348846 0.029680 -30.232817 +v 13.348846 0.029680 -30.232817 +v 15.239130 0.029680 -31.504694 +v 15.239130 0.029680 -31.504694 +v 17.254103 0.029680 -31.876034 +v 18.562500 0.029680 -31.845594 +v 19.344431 0.029680 -33.477688 +v 19.344431 0.029680 -33.477688 +v 18.591885 0.029680 -36.298210 +v 18.591885 0.029680 -36.298210 +v 16.794657 0.029680 -35.946114 +v 14.490126 0.029680 -35.374424 +v 12.577521 0.029680 -34.373863 +v 12.577521 0.029680 -34.373863 +v 10.578327 0.029680 -32.892242 +v 10.578327 0.029680 -32.892242 +v 8.992840 0.029680 -30.814116 +vn -0.0000 1.0000 -0.0000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 0.000000 1.000000 +vt 1.000000 1.000000 +vt 0.000000 0.857143 +vt 0.000000 0.714286 +vt 0.000000 0.714286 +vt 0.000000 0.571429 +vt 0.000000 0.571429 +vt 0.000000 0.428571 +vt 0.000000 0.285714 +vt 0.000000 0.142857 +vt 0.000000 0.142857 +vt 1.000000 0.142857 +vt 1.000000 0.142857 +vt 1.000000 0.285714 +vt 1.000000 0.428571 +vt 1.000000 0.571429 +vt 1.000000 0.571429 +vt 1.000000 0.714286 +vt 1.000000 0.714286 +vt 1.000000 0.857143 +s 0 +f 23095/39642/15072 23112/39659/15072 23094/39641/15072 +f 23095/39642/15072 23094/39641/15072 23093/39640/15072 +f 23091/39638/15072 23092/39639/15072 23104/39651/15072 +f 23091/39638/15072 23104/39651/15072 23102/39649/15072 +f 23103/39650/15072 23105/39652/15072 23106/39653/15072 +f 23103/39650/15072 23106/39653/15072 23101/39648/15072 +f 23101/39648/15072 23106/39653/15072 23107/39654/15072 +f 23101/39648/15072 23107/39654/15072 23100/39647/15072 +f 23100/39647/15072 23107/39654/15072 23109/39656/15072 +f 23100/39647/15072 23109/39656/15072 23099/39646/15072 +f 23098/39645/15072 23108/39655/15072 23110/39657/15072 +f 23098/39645/15072 23110/39657/15072 23096/39643/15072 +f 23097/39644/15072 23111/39658/15072 23112/39659/15072 +f 23097/39644/15072 23112/39659/15072 23095/39642/15072 +o Roof +v 20.000000 3.700000 -10.000000 +v 20.000000 2.800000 -10.000000 +v 20.000000 3.700000 10.000000 +v 20.000000 2.800000 10.000000 +v -20.000000 3.700000 -10.000000 +v -20.000000 2.800000 -10.000000 +v -20.000000 3.700000 10.000000 +v -20.000000 2.800000 10.000000 +vn -0.0000 0.5000 -0.0000 +vn -0.0000 -0.0000 10.0000 +vn -20.0000 -0.0000 -0.0000 +vn -0.0000 -0.5000 -0.0000 +vn 20.0000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -10.0000 +vt 0.625000 0.500000 +vt 0.937500 0.809250 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.937500 0.988250 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.759500 0.809250 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.759500 0.988250 +s 0 +usemtl Pillars +f 23113/39660/15073 23117/39666/15073 23119/39670/15073 23115/39663/15073 +f 23116/39665/15074 23115/39663/15074 23119/39671/15074 23120/39673/15074 +f 23120/39674/15075 23119/39672/15075 23117/39667/15075 23118/39669/15075 +f 23118/39668/15076 23114/39661/15076 23116/39664/15076 23120/39675/15076 +f 23114/39662/15077 23113/39660/15077 23115/39663/15077 23116/39665/15077 +f 23118/39669/15078 23117/39667/15078 23113/39660/15078 23114/39662/15078 +o Roof theatrette +v 15.250984 3.598630 -7.929147 +v 15.250984 2.790000 -7.929147 +v 15.250984 3.598630 -2.980418 +v 15.250984 2.790000 -2.980418 +v 4.801097 3.598630 -7.929147 +v 4.801097 2.790000 -7.929147 +v 4.801097 3.598630 -2.980418 +v 4.801097 2.790000 -2.980418 +v 9.695722 2.790000 -7.929147 +v 9.695722 3.598630 -2.980418 +v 9.695722 2.790000 -2.980418 +v 9.695722 3.598630 -7.929147 +v 4.801097 2.790000 -5.454782 +v 7.226412 2.790000 -7.929147 +v 7.226412 2.790000 -2.980418 +v 9.695722 2.790000 -5.454782 +v 7.226412 2.790000 -5.454782 +vn -0.0000 0.1250 -0.0000 +vn -0.0000 -0.0000 2.4744 +vn -5.2469 -0.0000 -0.0000 +vn -0.0000 -0.1250 -0.0000 +vn 5.2469 -0.0000 -0.0000 +vn -0.0000 -0.0000 -2.4744 +vt 0.625000 0.500000 +vt -2.461574 -0.746759 +vt 0.485677 0.777315 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.499219 0.818056 +vt -2.461574 1.781018 +vt 0.485677 0.777315 +vt 0.375000 0.750000 +vt 0.499219 0.818056 +vt 3.456944 -0.746759 +vt 0.503385 0.761574 +vt 0.625000 0.250000 +vt 0.503385 0.761574 +vt 0.375000 0.250000 +vt 0.774740 0.177315 +vt 3.456944 1.781018 +vt 0.503385 0.761574 +vt 0.503385 0.761574 +vt 0.770052 0.540278 +vt 0.485677 0.777315 +vt 0.375000 0.367655 +vt 0.950260 0.144907 +vt 0.503385 0.761574 +vt 0.499219 0.818056 +vt 0.671578 1.781018 +vt 0.503385 0.761574 +vt 0.485677 0.777315 +vt 0.933073 0.507870 +vt 0.499219 0.818056 +vt 0.625000 0.367655 +vt 0.671578 -0.746759 +vt 0.503385 0.761574 +vt 0.770052 0.172685 +vt 0.774740 0.533796 +vt 0.375000 0.308827 +vt 0.942969 0.177315 +vt 0.768490 0.144907 +vt 0.503385 0.761574 +vt 0.766927 0.507870 +vt 0.942448 0.540278 +vt 0.485677 0.777315 +vt 0.933073 0.155093 +vt 0.950260 0.532870 +vt 0.766927 0.155093 +vt 0.942448 0.172685 +vt 0.942969 0.533796 +vt 0.768490 0.532870 +s 0 +usemtl Generic_walls +f 23132/39707/15079 23125/39686/15079 23127/39692/15079 23130/39701/15079 +f 23131/39702/15080 23130/39699/15080 23127/39693/15080 23128/39694/15080 23135/39714/15080 +f 23128/39694/15081 23127/39693/15081 23125/39687/15081 23126/39689/15081 23133/39708/15081 +f 23129/39696/15082 23122/39678/15082 23124/39683/15082 23131/39703/15082 23136/39717/15082 +f 23122/39679/15083 23121/39676/15083 23123/39680/15083 23124/39684/15083 +f 23129/39697/15084 23132/39706/15084 23121/39676/15084 23122/39679/15084 +f 23126/39690/15084 23125/39688/15084 23132/39706/15084 23129/39697/15084 23134/39711/15084 +f 23137/39720/15082 23136/39718/15082 23131/39704/15082 23135/39715/15082 +f 23124/39685/15080 23123/39681/15080 23130/39700/15080 23131/39705/15080 +f 23121/39677/15079 23132/39707/15079 23130/39701/15079 23123/39682/15079 +f 23133/39709/15082 23137/39721/15082 23135/39716/15082 23128/39695/15082 +f 23126/39691/15082 23134/39712/15082 23137/39722/15082 23133/39710/15082 +f 23134/39713/15082 23129/39698/15082 23136/39719/15082 23137/39723/15082 +o Middle right wall.001 +v -11.955427 2.869207 -2.878299 +v -11.955427 2.415524 -2.878299 +v 0.100242 2.869207 -2.878299 +v 0.100242 2.415524 -2.878299 +v -11.955427 2.869207 0.453221 +v -11.955427 2.415524 0.453221 +v 0.100242 2.869207 0.453220 +v 0.100242 2.415524 0.453220 +v -10.233189 2.415524 0.453221 +v -8.510950 2.415524 0.453220 +v -6.788712 2.415524 0.453220 +v -5.066473 2.415524 0.453220 +v -3.344235 2.415524 0.453220 +v -1.621996 2.415524 0.453220 +v -10.233189 2.869207 -2.878299 +v -8.510950 2.869207 -2.878299 +v -6.788712 2.869207 -2.878299 +v -5.066473 2.869207 -2.878299 +v -3.344235 2.869207 -2.878299 +v -1.621996 2.869207 -2.878299 +v -1.621996 2.869207 0.453220 +v -3.344235 2.869207 0.453220 +v -5.066473 2.869207 0.453220 +v -6.788712 2.869207 0.453220 +v -8.510950 2.869207 0.453220 +v -10.233189 2.869207 0.453221 +v -1.621996 2.415524 -2.878299 +v -3.344235 2.415524 -2.878299 +v -5.066473 2.415524 -2.878299 +v -6.788712 2.415524 -2.878299 +v -8.510950 2.415524 -2.878299 +v -10.233189 2.415524 -2.878299 +v -11.955427 2.415524 -1.212539 +v 0.100242 2.869207 -1.212540 +v 0.100242 2.415524 -1.212540 +v -11.955427 2.869207 -1.212539 +v -10.233189 2.415524 -1.212539 +v -8.510950 2.415524 -1.212539 +v -6.788712 2.415524 -1.212539 +v -5.066473 2.415524 -1.212539 +v -3.344235 2.415524 -1.212539 +v -1.621996 2.415524 -1.212540 +v -10.233189 2.869207 -1.212539 +v -8.510950 2.869207 -1.212539 +v -6.788712 2.869207 -1.212539 +v -5.066473 2.869207 -1.212539 +v -3.344235 2.869207 -1.212539 +v -1.621996 2.869207 -1.212540 +v -4.205354 2.415524 0.453220 +v -4.205354 2.869207 -2.878299 +v -4.205354 2.869207 0.453220 +v -4.205354 2.415524 -2.878299 +v -4.205354 2.869207 -1.212539 +v -4.205354 2.415524 -1.212539 +v -2.483115 2.415524 0.453220 +v -2.483115 2.869207 -2.878299 +v -2.483115 2.869207 0.453220 +v -2.483115 2.415524 -2.878299 +v -2.483115 2.869207 -1.212539 +v -2.483115 2.415524 -1.212539 +v -5.927592 2.415524 0.453220 +v -5.927592 2.869207 -2.878299 +v -5.927592 2.869207 0.453220 +v -5.927592 2.415524 -2.878299 +v -5.927592 2.869207 -1.212539 +v -5.927592 2.415524 -1.212539 +v -7.649830 2.415524 0.453220 +v -7.649831 2.869207 -2.878299 +v -7.649830 2.869207 0.453220 +v -7.649831 2.415524 -2.878299 +v -7.649831 2.869207 -1.212539 +v -7.649831 2.415524 -1.212539 +v -9.372069 2.415524 0.453220 +v -9.372069 2.869207 -2.878299 +v -9.372069 2.869207 0.453220 +v -9.372069 2.415524 -2.878299 +v -9.372069 2.869207 -1.212539 +v -9.372069 2.415524 -1.212539 +v -11.094307 2.869207 0.453221 +v -11.094307 2.415524 -2.878299 +v -11.094307 2.415524 0.453221 +v -11.094307 2.869207 -2.878299 +v -11.094307 2.869207 -1.212539 +v -11.094307 2.415524 -1.212539 +v -0.760877 2.415524 0.453220 +v -0.760877 2.869207 -2.878299 +v -0.760877 2.869207 0.453220 +v -0.760877 2.415524 -2.878299 +v -0.760877 2.415524 -1.212540 +v -0.760877 2.869207 -1.212540 +v -11.955427 2.415524 -0.379659 +v 0.100242 2.869207 -0.379660 +v -10.233189 2.415524 -0.379659 +v -8.510950 2.415524 -0.379659 +v -6.788712 2.415524 -0.379659 +v -5.066473 2.415524 -0.379660 +v -3.344235 2.415524 -0.379660 +v -1.621996 2.415524 -0.379660 +v 0.100242 2.415524 -0.379660 +v -11.955427 2.869207 -0.379659 +v -10.233189 2.869207 -0.379659 +v -8.510950 2.869207 -0.379659 +v -6.788712 2.869207 -0.379659 +v -5.066473 2.869207 -0.379660 +v -3.344235 2.869207 -0.379660 +v -1.621996 2.869207 -0.379660 +v -4.205354 2.415524 -0.379660 +v -4.205354 2.869207 -0.379660 +v -2.483115 2.415524 -0.379660 +v -2.483115 2.869207 -0.379660 +v -5.927592 2.415524 -0.379659 +v -5.927592 2.869207 -0.379659 +v -7.649831 2.415524 -0.379659 +v -7.649831 2.869207 -0.379659 +v -9.372069 2.415524 -0.379659 +v -9.372069 2.869207 -0.379659 +v -11.094307 2.415524 -0.379659 +v -11.094307 2.869207 -0.379659 +v -0.760877 2.415524 -0.379660 +v -0.760877 2.869207 -0.379660 +v 0.100242 2.415524 -2.045419 +v -11.955427 2.869207 -2.045419 +v -10.233189 2.869207 -2.045419 +v -8.510950 2.869207 -2.045419 +v -6.788712 2.869207 -2.045419 +v -5.066473 2.869207 -2.045419 +v -3.344235 2.869207 -2.045419 +v -1.621996 2.869207 -2.045419 +v -11.955427 2.415524 -2.045419 +v 0.100242 2.869207 -2.045419 +v -10.233189 2.415524 -2.045419 +v -8.510950 2.415524 -2.045419 +v -6.788712 2.415524 -2.045419 +v -5.066473 2.415524 -2.045419 +v -3.344235 2.415524 -2.045419 +v -1.621996 2.415524 -2.045419 +v -4.205354 2.869207 -2.045419 +v -4.205354 2.415524 -2.045419 +v -2.483115 2.869207 -2.045419 +v -2.483115 2.415524 -2.045419 +v -5.927592 2.869207 -2.045419 +v -5.927592 2.415524 -2.045419 +v -7.649831 2.869207 -2.045419 +v -7.649831 2.415524 -2.045419 +v -9.372069 2.869207 -2.045419 +v -9.372069 2.415524 -2.045419 +v -11.094307 2.869207 -2.045419 +v -11.094307 2.415524 -2.045419 +v -0.760877 2.869207 -2.045419 +v -0.760877 2.415524 -2.045419 +vn -0.0000 0.1500 -0.0000 +vn 6.0278 -0.0000 -0.0000 +vn -0.0000 -0.0000 1.6658 +vn -0.0000 -0.1500 -0.0000 +vn -0.0000 -0.0000 -1.6658 +vn -6.0278 -0.0000 -0.0000 +vt 0.007552 0.974537 +vt 0.276302 0.669907 +vt 0.122910 0.350676 +vt 0.007552 0.695833 +vt 0.363802 0.651389 +vt 0.276302 0.989352 +vt 0.005469 0.989352 +vt 0.122910 0.256174 +vt 0.003385 0.651389 +vt 0.005469 0.669907 +vt 0.217412 0.256174 +vt 0.284635 0.990278 +vt 0.028408 0.350676 +vt 0.377344 0.974537 +vt 0.284635 0.662500 +vt 0.367448 0.651389 +vt 0.377344 0.695833 +vt 0.028408 0.256174 +vt 0.122910 0.161672 +vt 0.020052 0.662500 +vt 0.217412 0.161672 +vt 0.020052 0.990278 +vt 0.001302 0.006019 +vt 0.020052 0.662500 +vt 0.379427 0.662500 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.020052 0.662500 +vt 0.286719 0.990278 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.297135 0.662500 +vt 0.374740 0.662500 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.020052 0.662500 +vt 0.379427 0.662500 +vt 0.361719 0.006019 +vt 0.001302 0.006019 +vt 0.020052 0.662500 +vt 0.290885 0.990278 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.292969 0.662500 +vt 0.020052 0.990278 +vt 0.358073 0.004167 +vt 0.001302 0.006019 +vt 0.551302 0.993056 +vt 0.926823 0.993056 +vt 0.122910 0.337176 +vt 0.276302 0.989352 +vt 0.007552 0.669907 +vt 0.122910 0.323675 +vt 0.007552 0.989352 +vt 0.651823 0.989352 +vt 0.122910 0.310175 +vt 0.007552 0.985648 +vt 0.383073 0.985648 +vt 0.122910 0.296675 +vt 0.651823 0.669907 +vt 0.553385 0.658796 +vt 0.122910 0.283175 +vt 0.553385 0.978241 +vt 0.651823 0.989352 +vt 0.122910 0.269674 +vt 0.292969 0.990278 +vt 0.020052 0.662500 +vt 0.028408 0.269674 +vt 0.020052 0.990278 +vt 0.290885 0.662500 +vt 0.028408 0.283175 +vt 0.020052 0.990278 +vt 0.028408 0.296675 +vt 0.379427 0.990278 +vt 0.297135 0.990278 +vt 0.028408 0.310175 +vt 0.374740 0.990278 +vt 0.020052 0.990278 +vt 0.028408 0.323675 +vt 0.286719 0.662500 +vt 0.020052 0.990278 +vt 0.028408 0.337176 +vt 0.379427 0.990278 +vt 0.553385 0.658796 +vt 0.003385 0.651389 +vt 0.651823 0.669907 +vt 0.361719 0.651389 +vt 0.651823 0.989352 +vt 0.003385 0.651389 +vt 0.361719 0.651389 +vt 0.553385 0.978241 +vt 0.007552 0.666204 +vt 0.003385 0.651389 +vt 0.361719 0.651389 +vt 0.383073 0.666204 +vt 0.007552 0.669907 +vt 0.003385 0.651389 +vt 0.361719 0.651389 +vt 0.651823 0.669907 +vt 0.276302 0.669907 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.007552 0.989352 +vt 0.551302 0.673611 +vt 0.003385 0.651389 +vt 0.003385 0.006019 +vt 0.926823 0.673611 +vt 0.377344 0.974537 +vt 0.363802 0.651389 +vt 0.363802 0.006019 +vt 0.375260 0.695833 +vt 0.122910 0.208923 +vt 0.075659 0.256174 +vt 0.001302 0.651389 +vt 0.217412 0.208923 +vt 0.001302 0.006019 +vt 0.377344 0.695833 +vt 0.075659 0.350676 +vt 0.375260 0.974537 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.001302 0.651389 +vt 0.361719 0.651389 +vt 0.363802 0.006019 +vt 0.001302 0.004167 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.363802 0.006019 +vt 0.361719 0.651389 +vt 0.001302 0.651389 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.003385 0.651389 +vt 0.363802 0.651389 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.075659 0.337176 +vt 0.075659 0.323675 +vt 0.075659 0.310175 +vt 0.075659 0.296675 +vt 0.075659 0.283175 +vt 0.075659 0.269674 +vt 0.374740 0.662500 +vt 0.650260 0.990278 +vt 0.003385 0.006019 +vt 0.363802 0.006019 +vt 0.276302 0.669907 +vt 0.007552 0.985648 +vt 0.122910 0.289925 +vt 0.374740 0.990278 +vt 0.028408 0.289925 +vt 0.650260 0.662500 +vt 0.276302 0.989352 +vt 0.361719 0.651389 +vt 0.003385 0.651389 +vt 0.007552 0.666204 +vt 0.075659 0.289925 +vt 0.363802 0.651389 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.374740 0.662500 +vt 0.374740 0.990278 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.928906 0.978241 +vt 0.928906 0.658796 +vt 0.122910 0.276424 +vt 0.374740 0.990278 +vt 0.028408 0.276424 +vt 0.374740 0.662500 +vt 0.928906 0.658796 +vt 0.361719 0.651389 +vt 0.003385 0.651389 +vt 0.928906 0.978241 +vt 0.075659 0.276424 +vt 0.361719 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.651823 0.662500 +vt 0.020052 0.662500 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.383073 0.985648 +vt 0.276302 0.989352 +vt 0.122910 0.303425 +vt 0.651823 0.990278 +vt 0.028408 0.303425 +vt 0.020052 0.990278 +vt 0.383073 0.666204 +vt 0.361719 0.651389 +vt 0.003385 0.651389 +vt 0.276302 0.669907 +vt 0.075659 0.303425 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.374740 0.662500 +vt 0.020052 0.662500 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.383073 0.989352 +vt 0.383073 0.669907 +vt 0.122910 0.316925 +vt 0.374740 0.990278 +vt 0.028408 0.316925 +vt 0.020052 0.990278 +vt 0.383073 0.669907 +vt 0.361719 0.651389 +vt 0.001302 0.651389 +vt 0.383073 0.989352 +vt 0.075659 0.316925 +vt 0.363802 0.651389 +vt 0.001302 0.006019 +vt 0.003385 0.651389 +vt 0.374740 0.662500 +vt 0.641406 0.990278 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.651823 0.989352 +vt 0.551302 0.993056 +vt 0.122910 0.330426 +vt 0.374740 0.990278 +vt 0.028408 0.330426 +vt 0.641406 0.662500 +vt 0.651823 0.669907 +vt 0.363802 0.651389 +vt 0.361719 0.006019 +vt 0.551302 0.673611 +vt 0.075659 0.330426 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.363802 0.004167 +vt 0.644010 0.990278 +vt 0.028408 0.343926 +vt 0.020052 0.990278 +vt 0.926823 0.673611 +vt 0.361719 0.651389 +vt 0.001302 0.651389 +vt 0.651823 0.989352 +vt 0.644010 0.662500 +vt 0.020052 0.662500 +vt 0.364323 -0.000463 +vt 0.363802 0.006019 +vt 0.926823 0.993056 +vt 0.651823 0.669907 +vt 0.122910 0.343926 +vt 0.075659 0.343926 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.652344 0.662500 +vt 0.374740 0.990278 +vt 0.003385 0.004167 +vt 0.363802 0.006019 +vt 0.380990 0.989352 +vt 0.276302 0.989352 +vt 0.122910 0.262924 +vt 0.652344 0.990278 +vt 0.374740 0.662500 +vt 0.028408 0.262924 +vt 0.365885 0.651389 +vt 0.380990 0.669907 +vt 0.276302 0.669907 +vt 0.003385 0.651389 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.075659 0.262924 +vt 0.007552 0.974537 +vt 0.360156 0.006019 +vt 0.000260 0.651389 +vt 0.007552 0.695833 +vt 0.122910 0.185297 +vt 0.052034 0.256174 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.361719 0.006019 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.361719 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.003385 0.006019 +vt 0.363802 0.006019 +vt 0.361719 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.001302 0.651389 +vt 0.217412 0.185297 +vt 0.007552 0.695833 +vt 0.052034 0.350676 +vt 0.007552 0.974537 +vt 0.052034 0.337176 +vt 0.052034 0.323675 +vt 0.052034 0.310175 +vt 0.052034 0.296675 +vt 0.052034 0.283175 +vt 0.052034 0.269674 +vt 0.363802 0.006019 +vt 0.003385 0.651389 +vt 0.363802 0.651389 +vt 0.052034 0.289925 +vt 0.361719 0.006019 +vt 0.001302 0.006019 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.052034 0.276424 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.052034 0.303425 +vt 0.363802 0.006019 +vt 0.003385 0.006019 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.052034 0.316925 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.052034 0.330426 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt -0.002344 -0.000463 +vt 0.363802 0.651389 +vt 0.052034 0.343926 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.003385 0.651389 +vt 0.363802 0.651389 +vt 0.052034 0.262924 +vt -0.000260 0.006019 +vt 0.217412 0.232548 +vt 0.001302 0.651389 +vt 0.375260 0.974537 +vt 0.099285 0.350676 +vt 0.007552 0.974537 +vt 0.099285 0.337176 +vt 0.099285 0.323675 +vt 0.099285 0.310175 +vt 0.099285 0.296675 +vt 0.099285 0.283175 +vt 0.099285 0.269674 +vt 0.375260 0.695833 +vt 0.363802 0.006019 +vt 0.363802 0.651389 +vt 0.007552 0.695833 +vt 0.099285 0.256174 +vt 0.122910 0.232548 +vt 0.003385 0.006019 +vt 0.003385 0.651389 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.003385 0.006019 +vt 0.363802 0.651389 +vt 0.361719 0.006019 +vt 0.003385 0.006019 +vt 0.361719 0.006019 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.003385 0.006019 +vt 0.361719 0.006019 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.003385 0.006019 +vt 0.361719 0.006019 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.099285 0.289925 +vt 0.361719 0.006019 +vt 0.003385 0.006019 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.099285 0.276424 +vt 0.361719 0.006019 +vt 0.003385 0.006019 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.099285 0.303425 +vt 0.361719 0.006019 +vt 0.003385 0.006019 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.099285 0.316925 +vt 0.361719 0.006019 +vt 0.001302 0.006019 +vt 0.001302 0.651389 +vt 0.003385 0.006019 +vt 0.099285 0.330426 +vt 0.363802 0.006019 +vt 0.361719 0.651389 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.099285 0.343926 +vt 0.361719 0.006019 +vt 0.001302 0.006019 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.099285 0.262924 +vt 0.365885 0.006019 +vt 0.003385 0.006019 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +s 0 +usemtl Material.057 +f 23257/40077/15085 23224/39993/15085 23144/39741/15085 23229/40008/15085 +f 23236/40034/15086 23229/40007/15086 23144/39742/15086 23145/39744/15086 +f 23218/39972/15087 23216/39965/15087 23142/39735/15087 23143/39738/15087 +f 23287/40150/15088 23225/39994/15088 23141/39732/15088 23258/40078/15088 +f 23225/39995/15089 23223/39988/15089 23140/39730/15089 23141/39733/15089 +f 23266/40090/15090 23259/40081/15090 23138/39724/15090 23139/39727/15090 +f 23217/39968/15089 23219/39976/15089 23152/39771/15089 23169/39827/15089 +f 23213/39956/15089 23211/39950/15089 23153/39774/15089 23168/39823/15089 +f 23207/39938/15089 23205/39932/15089 23154/39777/15089 23167/39819/15089 +f 23201/39919/15089 23199/39913/15089 23155/39780/15089 23166/39815/15089 +f 23189/39882/15089 23187/39876/15089 23156/39783/15089 23165/39811/15089 +f 23195/39900/15089 23193/39894/15089 23157/39786/15089 23164/39807/15089 +f 23285/40145/15088 23217/39969/15088 23169/39828/15088 23268/40096/15088 +f 23283/40140/15088 23213/39957/15088 23168/39824/15088 23269/40100/15088 +f 23281/40135/15088 23207/39939/15088 23167/39820/15088 23270/40104/15088 +f 23279/40130/15088 23201/39920/15088 23166/39816/15088 23271/40107/15088 +f 23275/40120/15088 23189/39883/15088 23165/39812/15088 23272/40111/15088 +f 23277/40125/15088 23195/39901/15088 23164/39808/15088 23273/40115/15088 +f 23222/39984/15087 23224/39991/15087 23158/39789/15087 23151/39767/15087 +f 23192/39890/15087 23194/39897/15087 23159/39792/15087 23150/39763/15087 +f 23186/39872/15087 23188/39879/15087 23160/39795/15087 23149/39759/15087 +f 23198/39909/15087 23200/39916/15087 23161/39798/15087 23148/39755/15087 +f 23204/39928/15087 23206/39935/15087 23162/39801/15087 23147/39751/15087 +f 23210/39946/15087 23212/39953/15087 23163/39804/15087 23146/39747/15087 +f 23255/40072/15085 23216/39966/15085 23163/39805/15085 23238/40038/15085 +f 23253/40067/15085 23212/39954/15085 23162/39802/15085 23239/40039/15085 +f 23251/40062/15085 23206/39936/15085 23161/39799/15085 23240/40040/15085 +f 23249/40057/15085 23200/39917/15085 23160/39796/15085 23241/40041/15085 +f 23245/40047/15085 23188/39880/15085 23159/39794/15085 23242/40042/15085 +f 23247/40052/15085 23194/39898/15085 23158/39791/15085 23243/40043/15085 +f 23276/40124/15085 23196/39904/15085 23185/39871/15085 23265/40089/15085 +f 23274/40119/15085 23190/39886/15085 23184/39870/15085 23264/40088/15085 +f 23278/40129/15085 23202/39923/15085 23183/39869/15085 23263/40087/15085 +f 23280/40134/15085 23208/39942/15085 23182/39868/15085 23262/40086/15085 +f 23282/40139/15085 23214/39960/15085 23181/39867/15085 23261/40085/15085 +f 23284/40144/15085 23220/39979/15085 23180/39866/15085 23260/40084/15085 +f 23246/40048/15088 23197/39905/15088 23179/39862/15088 23235/40028/15088 +f 23244/40044/15088 23191/39887/15088 23178/39858/15088 23234/40024/15088 +f 23248/40053/15088 23203/39924/15088 23177/39855/15088 23233/40021/15088 +f 23250/40058/15088 23209/39943/15088 23176/39851/15088 23232/40017/15088 +f 23252/40063/15088 23215/39961/15088 23175/39847/15088 23231/40013/15088 +f 23254/40068/15088 23221/39980/15088 23174/39843/15088 23230/40009/15088 +f 23228/40003/15090 23237/40035/15090 23173/39840/15090 23170/39831/15090 +f 23256/40073/15088 23226/39998/15088 23172/39837/15088 23236/40032/15088 +f 23258/40079/15086 23267/40095/15086 23171/39835/15086 23172/39838/15086 +f 23286/40149/15085 23227/40002/15085 23171/39836/15085 23267/40094/15085 +f 23233/40023/15088 23177/39857/15088 23191/39889/15088 23244/40046/15088 +f 23263/40087/15085 23183/39869/15085 23190/39886/15085 23274/40119/15085 +f 23241/40041/15085 23160/39796/15085 23188/39880/15085 23245/40047/15085 +f 23150/39764/15087 23159/39793/15087 23188/39881/15087 23186/39873/15087 +f 23271/40108/15088 23166/39817/15088 23189/39884/15088 23275/40121/15088 +f 23166/39818/15089 23155/39781/15089 23187/39877/15089 23189/39885/15089 +f 23234/40025/15088 23178/39859/15088 23197/39906/15088 23246/40049/15088 +f 23264/40088/15085 23184/39870/15085 23196/39904/15085 23276/40124/15085 +f 23242/40042/15085 23159/39794/15085 23194/39898/15085 23247/40052/15085 +f 23151/39768/15087 23158/39790/15087 23194/39899/15087 23192/39891/15087 +f 23272/40112/15088 23165/39813/15088 23195/39902/15088 23277/40126/15088 +f 23165/39814/15089 23156/39784/15089 23193/39895/15089 23195/39903/15089 +f 23232/40018/15088 23176/39852/15088 23203/39925/15088 23248/40054/15088 +f 23262/40086/15085 23182/39868/15085 23202/39923/15085 23278/40129/15085 +f 23240/40040/15085 23161/39799/15085 23200/39917/15085 23249/40057/15085 +f 23149/39760/15087 23160/39797/15087 23200/39918/15087 23198/39910/15087 +f 23270/40106/15088 23167/39821/15088 23201/39921/15088 23279/40131/15088 +f 23167/39822/15089 23154/39778/15089 23199/39914/15089 23201/39922/15089 +f 23231/40014/15088 23175/39848/15088 23209/39945/15088 23250/40059/15088 +f 23261/40085/15085 23181/39867/15085 23208/39942/15085 23280/40134/15085 +f 23239/40039/15085 23162/39802/15085 23206/39936/15085 23251/40062/15085 +f 23148/39756/15087 23161/39800/15087 23206/39937/15087 23204/39929/15087 +f 23269/40101/15088 23168/39825/15088 23207/39940/15088 23281/40136/15088 +f 23168/39826/15089 23153/39775/15089 23205/39933/15089 23207/39941/15089 +f 23230/40010/15088 23174/39844/15088 23215/39962/15088 23252/40064/15088 +f 23260/40084/15085 23180/39866/15085 23214/39960/15085 23282/40139/15085 +f 23238/40038/15085 23163/39805/15085 23212/39954/15085 23253/40067/15085 +f 23147/39752/15087 23162/39803/15087 23212/39955/15087 23210/39947/15087 +f 23268/40097/15088 23169/39829/15088 23213/39958/15088 23283/40141/15088 +f 23169/39830/15089 23152/39772/15089 23211/39951/15089 23213/39959/15089 +f 23228/40004/15088 23170/39832/15088 23221/39981/15088 23254/40069/15088 +f 23259/40082/15085 23173/39841/15085 23220/39979/15085 23284/40144/15085 +f 23237/40036/15085 23142/39736/15085 23216/39966/15085 23255/40072/15085 +f 23266/40091/15088 23139/39728/15088 23217/39970/15088 23285/40146/15088 +f 23139/39729/15089 23138/39725/15089 23219/39977/15089 23217/39971/15089 +f 23146/39748/15087 23163/39806/15087 23216/39967/15087 23218/39973/15087 +f 23265/40089/15085 23185/39871/15085 23227/40002/15085 23286/40149/15085 +f 23235/40029/15088 23179/39863/15088 23226/39999/15088 23256/40074/15088 +f 23145/39745/15087 23144/39743/15087 23224/39992/15087 23222/39985/15087 +f 23164/39809/15089 23157/39787/15089 23223/39989/15089 23225/39996/15089 +f 23273/40116/15088 23164/39810/15088 23225/39997/15088 23287/40151/15088 +f 23243/40043/15085 23158/39791/15085 23224/39993/15085 23257/40077/15085 +f 23185/39871/15085 23243/40043/15085 23257/40077/15085 23227/40002/15085 +f 23151/39769/15088 23235/40030/15088 23256/40075/15088 23222/39986/15088 +f 23173/39841/15085 23237/40036/15085 23255/40072/15085 23220/39979/15085 +f 23143/39739/15088 23228/40005/15088 23254/40070/15088 23218/39974/15088 +f 23180/39866/15085 23238/40038/15085 23253/40067/15085 23214/39960/15085 +f 23146/39749/15088 23230/40011/15088 23252/40065/15088 23210/39948/15088 +f 23181/39867/15085 23239/40039/15085 23251/40062/15085 23208/39942/15085 +f 23147/39753/15088 23231/40015/15088 23250/40060/15088 23204/39930/15088 +f 23182/39868/15085 23240/40040/15085 23249/40057/15085 23202/39923/15085 +f 23148/39757/15088 23232/40019/15088 23248/40055/15088 23198/39911/15088 +f 23184/39870/15085 23242/40042/15085 23247/40052/15085 23196/39904/15085 +f 23150/39765/15088 23234/40026/15088 23246/40050/15088 23192/39892/15088 +f 23183/39869/15085 23241/40041/15085 23245/40047/15085 23190/39886/15085 +f 23149/39761/15088 23233/40022/15088 23244/40045/15088 23186/39874/15088 +f 23222/39987/15088 23256/40076/15088 23236/40033/15088 23145/39746/15088 +f 23143/39740/15090 23142/39737/15090 23237/40037/15090 23228/40006/15090 +f 23218/39975/15088 23254/40071/15088 23230/40012/15088 23146/39750/15088 +f 23210/39949/15088 23252/40066/15088 23231/40016/15088 23147/39754/15088 +f 23204/39931/15088 23250/40061/15088 23232/40020/15088 23148/39758/15088 +f 23198/39912/15088 23248/40056/15088 23233/40023/15088 23149/39762/15088 +f 23186/39875/15088 23244/40046/15088 23234/40027/15088 23150/39766/15088 +f 23192/39893/15088 23246/40051/15088 23235/40031/15088 23151/39770/15088 +f 23196/39904/15085 23247/40052/15085 23243/40043/15085 23185/39871/15085 +f 23190/39886/15085 23245/40047/15085 23242/40042/15085 23184/39870/15085 +f 23202/39923/15085 23249/40057/15085 23241/40041/15085 23183/39869/15085 +f 23208/39942/15085 23251/40062/15085 23240/40040/15085 23182/39868/15085 +f 23214/39960/15085 23253/40067/15085 23239/40039/15085 23181/39867/15085 +f 23220/39979/15085 23255/40072/15085 23238/40038/15085 23180/39866/15085 +f 23172/39838/15086 23171/39835/15086 23229/40007/15086 23236/40034/15086 +f 23227/40002/15085 23257/40077/15085 23229/40008/15085 23171/39836/15085 +f 23179/39864/15088 23273/40117/15088 23287/40152/15088 23226/40000/15088 +f 23157/39788/15085 23265/40089/15085 23286/40149/15085 23223/39990/15085 +f 23170/39833/15088 23266/40092/15088 23285/40147/15088 23221/39982/15088 +f 23138/39726/15085 23259/40082/15085 23284/40144/15085 23219/39978/15085 +f 23174/39845/15088 23268/40098/15088 23283/40142/15088 23215/39963/15088 +f 23152/39773/15085 23260/40084/15085 23282/40139/15085 23211/39952/15085 +f 23175/39849/15088 23269/40102/15088 23281/40137/15088 23209/39944/15088 +f 23153/39776/15085 23261/40085/15085 23280/40134/15085 23205/39934/15085 +f 23176/39853/15088 23270/40105/15088 23279/40132/15088 23203/39926/15088 +f 23154/39779/15085 23262/40086/15085 23278/40129/15085 23199/39915/15085 +f 23178/39860/15088 23272/40113/15088 23277/40127/15088 23197/39907/15088 +f 23156/39785/15085 23264/40088/15085 23276/40124/15085 23193/39896/15085 +f 23177/39856/15088 23271/40109/15088 23275/40122/15088 23191/39888/15088 +f 23155/39782/15085 23263/40087/15085 23274/40119/15085 23187/39878/15085 +f 23223/39990/15085 23286/40149/15085 23267/40094/15085 23140/39731/15085 +f 23141/39734/15086 23140/39731/15086 23267/40095/15086 23258/40079/15086 +f 23219/39978/15085 23284/40144/15085 23260/40084/15085 23152/39773/15085 +f 23211/39952/15085 23282/40139/15085 23261/40085/15085 23153/39776/15085 +f 23205/39934/15085 23280/40134/15085 23262/40086/15085 23154/39779/15085 +f 23199/39915/15085 23278/40129/15085 23263/40087/15085 23155/39782/15085 +f 23187/39878/15085 23274/40119/15085 23264/40088/15085 23156/39785/15085 +f 23193/39896/15085 23276/40124/15085 23265/40089/15085 23157/39788/15085 +f 23197/39908/15088 23277/40128/15088 23273/40118/15088 23179/39865/15088 +f 23191/39889/15088 23275/40123/15088 23272/40114/15088 23178/39861/15088 +f 23203/39927/15088 23279/40133/15088 23271/40110/15088 23177/39857/15088 +f 23209/39945/15088 23281/40138/15088 23270/40106/15088 23176/39854/15088 +f 23215/39964/15088 23283/40143/15088 23269/40103/15088 23175/39850/15088 +f 23221/39983/15088 23285/40148/15088 23268/40099/15088 23174/39846/15088 +f 23170/39834/15090 23173/39842/15090 23259/40083/15090 23266/40093/15090 +f 23226/40001/15088 23287/40153/15088 23258/40080/15088 23172/39839/15088 +o Cabling +v -12.689369 2.649925 1.783765 +v -12.689369 2.838777 1.783765 +v -12.689369 2.649925 1.357777 +v -12.689369 2.838777 1.357777 +v -13.105462 2.649925 1.357777 +v -13.105462 2.649925 1.783765 +v -13.105462 2.838777 1.783765 +v -13.105462 2.838777 1.357777 +v -15.165670 2.649925 1.357777 +v -15.165670 2.649925 1.783765 +v -15.165670 2.838777 1.783765 +v -15.165670 2.838777 1.357777 +v -12.689369 2.838777 -3.584048 +v -12.689369 2.649925 -3.584048 +v -13.105462 2.838777 -3.584048 +v -13.105462 2.649925 -3.584048 +v -12.689369 2.838777 -3.966388 +v -12.689369 2.649925 -3.966388 +v -13.105462 2.838777 -3.966388 +v -13.105462 2.649925 -3.966388 +v 4.874203 2.649925 -3.966388 +v 4.874203 2.838777 -3.966388 +v 4.874203 2.649925 -3.584048 +v 4.874203 2.838777 -3.584048 +v 9.779582 2.838777 1.357777 +v 9.779582 2.649925 1.357777 +v 9.779582 2.838777 1.783765 +v 9.779582 2.649925 1.783765 +vn -0.0000 0.0944 -0.0000 +vn -0.0000 -0.0000 -0.2130 +vn -0.0000 -0.0000 0.2130 +vn -0.0000 -0.0944 -0.0000 +vn -7.2349 -0.0000 -0.0000 +vn 7.2349 -0.0000 -0.0000 +vt 0.816667 0.217000 +vt 0.003333 -5.491000 +vt 0.375000 1.000000 +vt 0.030000 0.947000 +vt 0.625000 1.000000 +vt 0.150000 0.217000 +vt 0.030000 -0.329000 +vt 0.996667 -5.491000 +vt 0.023333 0.945000 +vt 0.030000 0.947000 +vt 0.030000 0.945000 +vt 0.150000 0.443000 +vt 0.990000 0.627000 +vt 0.023333 0.945000 +vt 0.976667 -0.329000 +vt 0.816667 0.443000 +vt 0.375000 1.000000 +vt 0.016667 0.627000 +vt 0.625000 1.000000 +vt 0.030000 0.947000 +vt 0.030000 0.947000 +vt 0.030000 0.945000 +vt 0.023333 0.945000 +vt 0.375000 0.250000 +vt 0.990000 -0.109000 +vt 0.375000 0.000000 +vt 0.375000 1.000000 +vt 0.016667 -0.109000 +vt 0.625000 0.000000 +vt 0.625000 1.000000 +vt 0.030000 0.947000 +vt 0.030000 0.945000 +vt 0.625000 0.250000 +vt 0.030000 0.947000 +vt 0.030000 0.947000 +vt 0.030000 0.945000 +vt 0.896667 0.555000 +vt 0.030000 1.361000 +vt 0.023333 0.945000 +vt 0.003333 -4.641000 +vt 0.030000 0.947000 +vt 0.030000 0.945000 +vt 0.896667 0.229000 +vt 0.976667 1.361000 +vt 0.023333 0.945000 +vt 0.030000 0.947000 +vt 0.030000 0.945000 +vt 0.056667 0.555000 +vt 0.976667 -4.641000 +vt 0.023333 0.945000 +vt 0.030000 0.947000 +vt 0.030000 0.945000 +vt 0.056667 0.229000 +vt 0.023333 0.945000 +vt 0.976667 5.203000 +vt 0.023333 0.945000 +vt 0.030000 0.947000 +vt 0.030000 0.945000 +vt 0.023333 0.945000 +vt 0.003333 5.203000 +vt 0.030000 0.947000 +vt 0.030000 0.945000 +vt 0.030000 0.947000 +vt 0.030000 0.945000 +vt 0.996667 5.957000 +vt 0.023333 0.945000 +vt 0.030000 0.947000 +vt 0.625000 1.000000 +vt 0.003333 5.957000 +vt 0.375000 1.000000 +s 0 +usemtl CeilingCabling +f 23295/40174/15091 23291/40163/15091 23300/40188/15091 23302/40194/15091 +f 23295/40175/15092 23292/40167/15092 23296/40176/15092 23299/40185/15092 +f 23288/40156/15093 23289/40158/15093 23294/40172/15093 23293/40170/15093 +f 23289/40157/15091 23291/40163/15091 23295/40174/15091 23294/40173/15091 +f 23290/40159/15094 23288/40154/15094 23293/40169/15094 23292/40165/15094 +f 23297/40179/15095 23298/40182/15095 23299/40186/15095 23296/40177/15095 +f 23293/40170/15093 23294/40172/15093 23298/40183/15093 23297/40180/15093 +f 23294/40173/15091 23295/40174/15091 23299/40187/15091 23298/40184/15091 +f 23292/40166/15094 23293/40171/15094 23297/40181/15094 23296/40178/15094 +f 23301/40190/15094 23303/40196/15094 23307/40206/15094 23305/40201/15094 +f 23291/40164/15096 23290/40162/15096 23301/40192/15096 23300/40189/15096 +f 23292/40167/15095 23295/40175/15095 23302/40195/15095 23303/40198/15095 +f 23290/40160/15094 23292/40168/15094 23303/40197/15094 23301/40191/15094 +f 23304/40200/15092 23305/40203/15092 23307/40207/15092 23306/40205/15092 +f 23302/40194/15091 23300/40188/15091 23304/40199/15091 23306/40204/15091 +f 23303/40198/15095 23302/40195/15095 23306/40205/15095 23307/40207/15095 +f 23304/40199/15091 23300/40188/15091 23311/40214/15091 23309/40210/15091 +f 23300/40189/15093 23301/40192/15093 23310/40212/15093 23311/40215/15093 +f 23301/40193/15094 23305/40202/15094 23308/40208/15094 23310/40213/15094 +f 23305/40203/15092 23304/40200/15092 23309/40211/15092 23308/40209/15092 +f 23288/40155/15094 23290/40161/15094 23313/40218/15094 23315/40222/15094 +f 23291/40163/15091 23289/40157/15091 23314/40220/15091 23312/40216/15091 +f 23289/40158/15093 23288/40156/15093 23315/40223/15093 23314/40221/15093 +f 23290/40162/15092 23291/40164/15092 23312/40217/15092 23313/40219/15092 +o book1 +v 10.394854 0.828691 3.918174 +v 10.399233 0.828691 3.916137 +v 10.310685 0.828691 3.725719 +v 10.306306 0.828691 3.727755 +v 10.308576 0.826178 3.732635 +v 10.310685 0.826178 3.725719 +v 10.399233 0.826178 3.916137 +v 10.377095 0.826178 3.868533 +v 10.354959 0.826178 3.820928 +v 10.332822 0.826178 3.773324 +v 10.394854 0.798691 3.918174 +v 10.263219 0.798691 3.979386 +v 10.174671 0.798691 3.788967 +v 10.306306 0.798691 3.727755 +v 10.265903 0.826178 3.972202 +v 10.263219 0.828691 3.979386 +v 10.174671 0.828691 3.788967 +v 10.181894 0.826178 3.791544 +v 10.392585 0.826178 3.913294 +v 10.392585 0.801204 3.913294 +v 10.265903 0.801204 3.972202 +v 10.181894 0.801204 3.791544 +v 10.310685 0.798691 3.725719 +v 10.310685 0.801204 3.725719 +v 10.332822 0.801204 3.773324 +v 10.354959 0.801204 3.820928 +v 10.377095 0.801204 3.868533 +v 10.399233 0.801204 3.916137 +v 10.399233 0.798691 3.916137 +v 10.378207 0.819934 3.868016 +v 10.400344 0.819934 3.915621 +v 10.308576 0.801204 3.732635 +v 10.311796 0.807448 3.725202 +v 10.311796 0.819934 3.725202 +v 10.311803 0.813691 3.725199 +v 10.400344 0.807448 3.915621 +v 10.400351 0.813691 3.915618 +v 10.378207 0.807448 3.868016 +v 10.378214 0.813691 3.868013 +v 10.333934 0.807448 3.772807 +v 10.333940 0.813691 3.772804 +v 10.356077 0.813691 3.820408 +v 10.356071 0.807448 3.820411 +v 10.333934 0.819934 3.772807 +v 10.356071 0.819934 3.820411 +vn -0.0000 1.0000 -0.0000 +vn -0.6537 -0.0209 -0.7565 +vn -0.6536 -0.0209 -0.7565 +vn 0.9067 0.0039 -0.4217 +vn 0.9068 -0.0000 -0.4217 +vn 0.9067 0.0053 -0.4216 +vn -0.0000 -1.0000 -0.0000 +vn -0.9033 -0.0869 0.4201 +vn -0.9033 -0.0869 0.4200 +vn 0.4213 -0.0438 0.9059 +vn 0.4212 -0.0438 0.9059 +vn 0.4212 0.0438 0.9059 +vn 0.4213 0.0438 0.9059 +vn 0.4217 -0.0000 0.9068 +vn -0.9033 0.0869 0.4200 +vn -0.9033 0.0869 0.4201 +vn -0.9068 -0.0000 0.4217 +vn 0.9067 -0.0039 -0.4217 +vn 0.9067 -0.0053 -0.4217 +vn 0.9068 -0.0039 -0.4217 +vn -0.6537 0.0209 -0.7565 +vn -0.6536 0.0209 -0.7565 +vn -0.4217 -0.0000 -0.9068 +vn -0.4213 0.0438 -0.9059 +vn -0.4212 0.0438 -0.9059 +vn 0.1573 0.0209 0.9873 +vn 0.1572 0.0209 0.9873 +vn 0.1573 -0.0209 0.9873 +vn 0.1572 -0.0209 0.9873 +vn -0.4212 -0.0438 -0.9059 +vn -0.4213 -0.0438 -0.9059 +vn 0.9068 -0.0039 -0.4216 +vn 0.9068 0.0039 -0.4216 +vn -0.0103 -0.0000 0.9999 +vn -0.0104 -0.0000 0.9999 +vn -0.0103 -0.0001 0.9999 +vn -0.7713 -0.0000 -0.6365 +vn -0.7713 0.0001 -0.6365 +vt 0.010325 0.285645 +vt 0.784740 0.035402 +vt 0.006235 0.988336 +vt 0.014009 0.285645 +vt 0.803290 0.100165 +vt 0.784740 0.034893 +vt 0.014009 0.400084 +vt 0.774959 0.059934 +vt 0.803290 0.040460 +vt 0.010325 0.400084 +vt 0.774959 0.059684 +vt 0.793443 0.092013 +vt 0.006235 0.019833 +vt 0.824124 0.046271 +vt 0.780733 0.092013 +vt 0.772367 0.059684 +vt 0.783388 0.040460 +vt 0.772367 0.059934 +vt 0.783388 0.100165 +vt 0.779472 0.034893 +vt 0.783388 0.085239 +vt 0.783388 0.070313 +vt 0.783388 0.055386 +vt 0.436911 0.004379 +vt 0.768937 0.035402 +vt 0.461563 0.337588 +vt 0.816161 0.004379 +vt 0.768937 0.050696 +vt 0.768469 0.075977 +vt 0.816161 0.999325 +vt 0.768469 0.106043 +vt 0.779011 0.030548 +vt 0.436911 0.999325 +vt 0.767184 0.059684 +vt 0.779011 0.031696 +vt 0.461563 0.587588 +vt 0.780733 0.016978 +vt 0.779472 0.050696 +vt 0.997618 0.821941 +vt 0.992766 0.003169 +vt 0.793443 0.016978 +vt 0.784740 0.050696 +vt 0.422281 0.988336 +vt 0.793443 0.055109 +vt 0.422281 0.019833 +vt 0.992766 0.813733 +vt 0.824124 0.799906 +vt 0.780733 0.055109 +vt 0.997618 0.005010 +vt 0.779472 0.035402 +vt 0.821822 0.005010 +vt 0.774204 0.035402 +vt 0.774204 0.050696 +vt 0.821822 0.821941 +vt 0.778491 0.075977 +vt 0.824213 0.003169 +vt 0.778491 0.106043 +vt 0.824213 0.813733 +vt 0.995819 0.799906 +vt 0.779407 0.030548 +vt 0.743585 0.040460 +vt 0.767184 0.059934 +vt 0.453515 0.587588 +vt 0.763487 0.040460 +vt 0.769775 0.059934 +vt 0.763487 0.055386 +vt 0.763487 0.070313 +vt 0.763487 0.085239 +vt 0.763487 0.100165 +vt 0.774204 0.034893 +vt 0.743585 0.100165 +vt 0.768937 0.034893 +vt 0.453515 0.337588 +vt 0.778413 0.085239 +vt 0.520833 0.250000 +vt 0.778155 0.034893 +vt 0.778413 0.100165 +vt 0.995819 0.046271 +vt 0.779407 0.031696 +vt 0.769775 0.059684 +vt 0.479167 1.000000 +vt 0.768462 0.040460 +vt 0.770423 0.059934 +vt 0.520833 1.000000 +vt 0.778413 0.040460 +vt 0.771719 0.059934 +vt 0.500000 1.000000 +vt 0.773438 0.040460 +vt 0.479167 0.250000 +vt 0.768462 0.100165 +vt 0.775521 0.034893 +vt 0.500000 0.250000 +vt 0.773438 0.100165 +vt 0.768462 0.085239 +vt 0.773438 0.085239 +vt 0.768462 0.055386 +vt 0.773438 0.055386 +vt 0.773438 0.070313 +vt 0.768462 0.070313 +vt 0.778413 0.055386 +vt 0.778413 0.070313 +s 1 +usemtl Book1 +f 23316/40224/15097 23317/40227/15097 23318/40230/15097 23319/40233/15097 +f 23320/40239/15098 23319/40234/15098 23318/40231/15099 23321/40241/15099 +f 23321/40240/15100 23318/40232/15101 23317/40228/15101 23322/40242/15100 23323/40244/15102 23324/40245/15102 23325/40246/15102 +f 23326/40247/15103 23327/40250/15103 23328/40253/15103 23329/40256/15103 +f 23330/40260/15104 23331/40264/15105 23332/40267/15104 23333/40271/15104 +f 23334/40273/15106 23316/40225/15107 23331/40265/15107 23330/40261/15106 +f 23326/40248/15108 23335/40275/15109 23336/40276/15109 23327/40251/15108 +f 23335/40274/15110 23334/40272/15110 23330/40262/15110 23336/40277/15110 +f 23327/40252/15111 23336/40278/15112 23337/40280/15112 23328/40254/15112 +f 23336/40279/15113 23330/40263/15113 23333/40269/15113 23337/40281/15113 +f 23338/40284/15101 23339/40287/15114 23340/40289/15115 23341/40290/15115 23342/40291/15115 23343/40292/15116 23344/40294/15101 +f 23345/40297/15100 23323/40244/15102 23322/40242/15100 23346/40300/15100 +f 23329/40257/15117 23347/40303/15117 23339/40288/15118 23338/40285/15118 +f 23348/40304/15119 23349/40307/15119 23350/40310/15119 +f 23337/40282/15119 23333/40270/15119 23320/40237/15119 23347/40301/15119 +f 23328/40255/15120 23337/40283/15121 23347/40302/15120 23329/40258/15120 +f 23351/40312/15110 23352/40315/15110 23346/40298/15110 +f 23344/40295/15122 23343/40293/15122 23335/40275/15123 23326/40248/15123 +f 23322/40243/15124 23317/40229/15124 23316/40225/15125 23334/40273/15125 +f 23344/40296/15103 23326/40249/15103 23329/40259/15103 23338/40286/15103 +f 23333/40271/15126 23332/40267/15127 23319/40235/15127 23320/40238/15127 +f 23331/40266/15097 23316/40226/15097 23319/40236/15097 23332/40268/15097 +f 23353/40317/15114 23354/40318/15101 23352/40316/15101 23351/40313/15114 +f 23355/40319/15114 23356/40320/15101 23357/40321/15101 23358/40322/15128 +f 23359/40323/15100 23325/40246/15102 23324/40245/15102 23360/40324/15129 +f 23356/40320/15101 23359/40323/15100 23360/40324/15129 23357/40321/15101 +f 23350/40311/15101 23349/40308/15100 23359/40323/15100 23356/40320/15101 +f 23349/40308/15100 23321/40240/15100 23325/40246/15102 23359/40323/15100 +f 23340/40289/15115 23355/40319/15114 23358/40322/15128 23341/40290/15115 +f 23339/40287/15114 23348/40305/15114 23355/40319/15114 23340/40289/15115 +f 23348/40305/15114 23350/40311/15101 23356/40320/15101 23355/40319/15114 +f 23342/40291/15115 23353/40317/15114 23351/40313/15114 23343/40292/15116 +f 23341/40290/15115 23358/40322/15128 23353/40317/15114 23342/40291/15115 +f 23358/40322/15128 23357/40321/15101 23354/40318/15101 23353/40317/15114 +f 23343/40293/15130 23351/40314/15131 23346/40299/15131 23322/40243/15132 23334/40273/15130 23335/40275/15130 +f 23347/40303/15133 23320/40239/15133 23321/40241/15133 23349/40309/15133 23348/40306/15133 23339/40288/15134 +f 23354/40318/15101 23345/40297/15100 23346/40300/15100 23352/40316/15101 +f 23357/40321/15101 23360/40324/15129 23345/40297/15100 23354/40318/15101 +f 23360/40324/15129 23324/40245/15102 23323/40244/15102 23345/40297/15100 +o book2 +v -11.441183 0.706514 -2.014946 +v -11.442795 0.724014 -2.017199 +v -11.396037 0.724014 -2.050665 +v -11.394425 0.706514 -2.048412 +v -11.396037 0.654014 -2.050665 +v -11.394425 0.671514 -2.048412 +v -11.393607 0.689014 -2.047270 +v -11.288364 0.724014 -1.900226 +v -11.286753 0.706514 -1.897974 +v -11.285934 0.689014 -1.896831 +v -11.286753 0.671514 -1.897974 +v -11.288364 0.654014 -1.900226 +v -11.427026 0.706514 -1.797577 +v -11.428638 0.724014 -1.799829 +v -11.475396 0.724014 -1.766363 +v -11.473783 0.706514 -1.764111 +v -11.475396 0.654014 -1.766363 +v -11.473783 0.671513 -1.764111 +v -11.472966 0.689014 -1.762968 +v -11.583069 0.724014 -1.916802 +v -11.581456 0.706514 -1.914549 +v -11.580639 0.689014 -1.913407 +v -11.581456 0.671513 -1.914549 +v -11.583069 0.654014 -1.916802 +v -11.335123 0.654014 -1.866761 +v -11.381881 0.654014 -1.833295 +v -11.428638 0.654014 -1.799829 +v -11.536310 0.654014 -1.950267 +v -11.489552 0.654014 -1.983733 +v -11.442795 0.654014 -2.017199 +v -11.489552 0.724014 -1.983733 +v -11.536310 0.724014 -1.950267 +v -11.381881 0.724014 -1.833295 +v -11.335123 0.724014 -1.866761 +v -11.441183 0.671514 -2.014946 +v -11.440365 0.689014 -2.013804 +v -11.534698 0.671514 -1.948015 +v -11.533881 0.689014 -1.946872 +v -11.487123 0.689014 -1.980338 +v -11.487941 0.671514 -1.981481 +v -11.534698 0.706514 -1.948015 +v -11.487941 0.706514 -1.981481 +v -11.427026 0.671514 -1.797577 +v -11.426208 0.689014 -1.796434 +v -11.333510 0.671514 -1.864508 +v -11.332693 0.689014 -1.863366 +v -11.379451 0.689014 -1.829900 +v -11.380268 0.671514 -1.831042 +v -11.333510 0.706514 -1.864508 +v -11.380268 0.706514 -1.831042 +vn -0.5819 -0.0172 -0.8131 +vn -0.5819 -0.0228 -0.8130 +vn 0.8132 -0.0000 -0.5820 +vn 0.5819 0.0172 0.8131 +vn 0.5819 0.0228 0.8130 +vn -0.8132 -0.0000 0.5820 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vn -0.5819 0.0172 -0.8131 +vn -0.5820 0.0119 -0.8131 +vn -0.5820 -0.0119 -0.8131 +vn -0.5819 0.0228 -0.8130 +vn 0.5819 -0.0172 0.8131 +vn 0.5820 -0.0119 0.8131 +vn 0.5820 0.0119 0.8131 +vn 0.5819 -0.0228 0.8130 +vt 0.741556 0.255748 +vt 0.335685 0.743119 +vt 0.717479 0.255748 +vt 0.717479 0.008939 +vt 0.995512 0.830695 +vt 0.335685 0.988355 +vt 0.958268 0.830695 +vt 0.741556 0.008939 +vt 0.846535 0.830695 +vt 0.317891 0.997591 +vt 0.813788 0.008939 +vt 0.883779 0.830695 +vt 0.789710 0.008939 +vt 0.921023 0.830695 +vt 0.765633 0.008939 +vt 0.995512 0.032501 +vt 0.698677 0.988354 +vt 0.991683 0.017355 +vt 0.958268 0.032501 +vt 0.955080 0.017355 +vt 0.921023 0.032501 +vt 0.918478 0.017355 +vt 0.883779 0.032501 +vt 0.881876 0.017355 +vt 0.846535 0.032501 +vt 0.001520 0.997591 +vt 0.845273 0.017355 +vt 0.955080 0.622323 +vt 0.698677 0.252649 +vt 0.991683 0.622323 +vt 0.991683 0.823979 +vt 0.979373 0.041022 +vt 0.698677 0.007413 +vt 0.945387 0.041022 +vt 0.955080 0.823979 +vt 0.843430 0.041022 +vt 0.001520 0.006331 +vt 0.845273 0.823979 +vt 0.877416 0.041022 +vt 0.881876 0.823979 +vt 0.911401 0.041022 +vt 0.918478 0.823979 +vt 0.979373 0.809865 +vt 0.335685 0.007413 +vt 0.717479 0.996177 +vt 0.945387 0.809865 +vt 0.741556 0.996177 +vt 0.911401 0.809865 +vt 0.765633 0.996177 +vt 0.877416 0.809865 +vt 0.789710 0.996177 +vt 0.843430 0.809865 +vt 0.317891 0.006331 +vt 0.813788 0.996177 +vt 0.001520 0.749776 +vt 0.845273 0.219011 +vt 0.001520 0.501961 +vt 0.845273 0.420667 +vt 0.001520 0.254146 +vt 0.845273 0.622323 +vt 0.317891 0.254146 +vt 0.813788 0.749367 +vt 0.317891 0.501961 +vt 0.813788 0.502558 +vt 0.317891 0.749776 +vt 0.813788 0.255748 +vt 0.335685 0.497884 +vt 0.717479 0.502558 +vt 0.335685 0.252649 +vt 0.717479 0.749367 +vt 0.698677 0.497884 +vt 0.991683 0.420667 +vt 0.698677 0.743119 +vt 0.991683 0.219011 +vt 0.789710 0.255748 +vt 0.765633 0.255748 +vt 0.789710 0.749367 +vt 0.765633 0.749367 +vt 0.765633 0.502558 +vt 0.789710 0.502558 +vt 0.741556 0.749367 +vt 0.741556 0.502558 +vt 0.881876 0.622323 +vt 0.918478 0.622323 +vt 0.881876 0.219011 +vt 0.918478 0.219011 +vt 0.918478 0.420667 +vt 0.881876 0.420667 +vt 0.955080 0.219011 +vt 0.955080 0.420667 +s 1 +usemtl Book_2 +f 23361/40325/15135 23362/40327/15136 23363/40328/15136 23364/40332/15135 +f 23365/40333/15137 23366/40336/15137 23367/40338/15137 23364/40331/15137 23363/40329/15137 23368/40340/15137 23369/40343/15137 23370/40345/15137 23371/40347/15137 23372/40349/15137 +f 23373/40352/15138 23374/40354/15139 23375/40355/15139 23376/40359/15138 +f 23377/40360/15140 23378/40363/15140 23379/40365/15140 23376/40358/15140 23375/40356/15140 23380/40367/15140 23381/40370/15140 23382/40372/15140 23383/40374/15140 23384/40376/15140 +f 23365/40334/15141 23372/40350/15141 23385/40379/15141 23386/40381/15141 23387/40383/15141 23377/40361/15141 23384/40377/15141 23388/40385/15141 23389/40387/15141 23390/40389/15141 +f 23368/40341/15142 23363/40330/15142 23362/40326/15142 23391/40391/15142 23392/40393/15142 23380/40368/15142 23375/40357/15142 23374/40353/15142 23393/40395/15142 23394/40397/15142 +f 23395/40399/15143 23396/40400/15144 23367/40339/15144 23366/40337/15143 +f 23397/40401/15143 23398/40402/15144 23399/40403/15144 23400/40404/15143 +f 23401/40405/15135 23392/40394/15136 23391/40392/15136 23402/40406/15135 +f 23398/40402/15145 23401/40405/15135 23402/40406/15135 23399/40403/15145 +f 23382/40373/15145 23381/40371/15135 23401/40405/15135 23398/40402/15145 +f 23381/40371/15135 23380/40369/15136 23392/40394/15136 23401/40405/15135 +f 23388/40386/15146 23397/40401/15143 23400/40404/15143 23389/40388/15146 +f 23384/40378/15146 23383/40375/15143 23397/40401/15143 23388/40386/15146 +f 23383/40375/15143 23382/40373/15144 23398/40402/15144 23397/40401/15143 +f 23390/40390/15146 23395/40399/15143 23366/40337/15143 23365/40335/15146 +f 23389/40388/15146 23400/40404/15143 23395/40399/15143 23390/40390/15146 +f 23400/40404/15143 23399/40403/15144 23396/40400/15144 23395/40399/15143 +f 23396/40400/15145 23361/40325/15135 23364/40332/15135 23367/40339/15145 +f 23399/40403/15145 23402/40406/15135 23361/40325/15135 23396/40400/15145 +f 23402/40406/15135 23391/40392/15136 23362/40327/15136 23361/40325/15135 +f 23403/40407/15147 23404/40408/15148 23379/40366/15148 23378/40364/15147 +f 23405/40409/15147 23406/40410/15148 23407/40411/15148 23408/40412/15147 +f 23409/40413/15138 23394/40398/15139 23393/40396/15139 23410/40414/15138 +f 23406/40410/15149 23409/40413/15138 23410/40414/15138 23407/40411/15149 +f 23370/40346/15149 23369/40344/15138 23409/40413/15138 23406/40410/15149 +f 23369/40344/15138 23368/40342/15139 23394/40398/15139 23409/40413/15138 +f 23385/40380/15150 23405/40409/15147 23408/40412/15147 23386/40382/15150 +f 23372/40351/15150 23371/40348/15147 23405/40409/15147 23385/40380/15150 +f 23371/40348/15147 23370/40346/15148 23406/40410/15148 23405/40409/15147 +f 23387/40384/15150 23403/40407/15147 23378/40364/15147 23377/40362/15150 +f 23386/40382/15150 23408/40412/15147 23403/40407/15147 23387/40384/15150 +f 23408/40412/15147 23407/40411/15148 23404/40408/15148 23403/40407/15147 +f 23404/40408/15149 23373/40352/15138 23376/40359/15138 23379/40366/15149 +f 23407/40411/15149 23410/40414/15138 23373/40352/15138 23404/40408/15149 +f 23410/40414/15138 23393/40396/15139 23374/40354/15139 23373/40352/15138 +o book3 +v -11.199945 0.652938 -1.788556 +v -11.199945 0.672938 -1.788556 +v -11.199945 0.672938 -2.048556 +v -11.199945 0.652938 -2.048556 +v -11.019945 0.672938 -2.048556 +v -11.019945 0.652938 -2.048556 +v -11.019945 0.672938 -1.788556 +v -11.019945 0.652938 -1.788556 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -1.0000 +vn 1.0000 -0.0000 -0.0000 +vn -0.0000 -0.0000 1.0000 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vt 0.858609 0.818595 +vt 0.994261 0.775996 +vt 0.339334 0.973622 +vt 0.858609 0.012150 +vt 0.994261 0.029063 +vt 0.318014 0.985568 +vt 0.989738 0.012150 +vt 0.998646 0.004883 +vt 0.318014 0.008511 +vt 0.989738 0.818595 +vt 0.849701 0.004883 +vt 0.339334 0.010753 +vt 0.998646 0.794333 +vt 0.696836 0.992045 +vt 0.010259 0.008511 +vt 0.849701 0.794333 +vt 0.739936 0.992045 +vt 0.620667 0.010753 +vt 0.702789 0.002576 +vt 0.858286 0.029063 +vt 0.010259 0.985568 +vt 0.739936 0.002576 +vt 0.858286 0.775996 +vt 0.620667 0.973622 +s 1 +usemtl book_3 +f 23411/40415/15151 23412/40418/15151 23413/40421/15151 23414/40424/15151 +f 23414/40425/15152 23413/40422/15152 23415/40427/15152 23416/40430/15152 +f 23416/40431/15153 23415/40428/15153 23417/40433/15153 23418/40436/15153 +f 23418/40437/15154 23417/40434/15154 23412/40419/15154 23411/40416/15154 +f 23414/40426/15155 23416/40432/15155 23418/40438/15155 23411/40417/15155 +f 23415/40429/15156 23413/40423/15156 23412/40420/15156 23417/40435/15156 +o book4 +v 9.461124 0.828342 4.570023 +v 9.466619 0.828342 4.568335 +v 9.387319 0.828342 4.310243 +v 9.381824 0.828342 4.311931 +v 9.421474 0.828342 4.440977 +v 9.383856 0.825410 4.318546 +v 9.387319 0.825410 4.310243 +v 9.466619 0.825410 4.568335 +v 9.446794 0.825410 4.503812 +v 9.426969 0.825410 4.439289 +v 9.407144 0.825410 4.374766 +v 9.338892 0.793342 4.466351 +v 9.256310 0.793342 4.491724 +v 9.216660 0.793342 4.362679 +v 9.299242 0.793342 4.337305 +v 9.300143 0.825410 4.612246 +v 9.295960 0.828342 4.620770 +v 9.256310 0.828342 4.491724 +v 9.216660 0.828342 4.362679 +v 9.224908 0.825410 4.367383 +v 9.459092 0.825410 4.563408 +v 9.378543 0.828342 4.595397 +v 9.461124 0.793342 4.570023 +v 9.459092 0.796274 4.563408 +v 9.300143 0.796274 4.612246 +v 9.295960 0.793342 4.620770 +v 9.378543 0.793342 4.595397 +v 9.224908 0.796274 4.367383 +v 9.387319 0.793342 4.310243 +v 9.387319 0.796274 4.310243 +v 9.407144 0.796274 4.374766 +v 9.426969 0.796274 4.439289 +v 9.446794 0.796274 4.503812 +v 9.466619 0.796274 4.568335 +v 9.466619 0.793342 4.568335 +v 9.448188 0.818126 4.503383 +v 9.468014 0.818126 4.567906 +v 9.381824 0.793342 4.311931 +v 9.383856 0.796274 4.318546 +v 9.388713 0.803558 4.309814 +v 9.388713 0.818126 4.309814 +v 9.388721 0.810842 4.309812 +v 9.468014 0.803558 4.567906 +v 9.468022 0.810842 4.567904 +v 9.421474 0.793342 4.440977 +v 9.299242 0.828342 4.337305 +v 9.338892 0.828342 4.466351 +v 9.448188 0.803558 4.503383 +v 9.448196 0.810842 4.503380 +v 9.408538 0.803558 4.374337 +v 9.408546 0.810842 4.374334 +v 9.428371 0.810842 4.438858 +v 9.428363 0.803558 4.438860 +v 9.408538 0.818126 4.374337 +v 9.428363 0.818126 4.438860 +vn -0.0000 1.0000 -0.0000 +vn -0.5273 -0.0195 -0.8494 +vn -0.5273 -0.0195 -0.8495 +vn 0.9559 0.0039 -0.2937 +vn 0.9559 -0.0000 -0.2937 +vn 0.9559 0.0052 -0.2937 +vn -0.0000 -1.0000 -0.0000 +vn -0.9524 -0.0852 0.2927 +vn -0.9524 -0.0852 0.2926 +vn 0.2935 -0.0395 0.9552 +vn 0.2934 -0.0395 0.9552 +vn 0.2935 -0.0395 0.9551 +vn 0.2934 0.0395 0.9552 +vn 0.2935 0.0395 0.9552 +vn 0.2937 -0.0000 0.9559 +vn -0.9524 0.0852 0.2927 +vn -0.9524 0.0852 0.2926 +vn -0.9559 -0.0000 0.2937 +vn 0.9559 -0.0039 -0.2937 +vn 0.9559 -0.0052 -0.2937 +vn 0.9559 0.0038 -0.2937 +vn -0.5273 0.0195 -0.8495 +vn -0.5273 0.0195 -0.8494 +vn -0.2937 -0.0000 -0.9559 +vn -0.2935 0.0395 -0.9551 +vn -0.2935 0.0395 -0.9552 +vn -0.2934 0.0395 -0.9552 +vn 0.0407 0.0195 0.9990 +vn 0.0406 0.0195 0.9990 +vn 0.0407 -0.0195 0.9990 +vn 0.0406 -0.0195 0.9990 +vn -0.2935 -0.0395 -0.9552 +vn -0.2935 -0.0395 -0.9551 +vn 0.9559 -0.0038 -0.2937 +vn -0.1179 -0.0000 0.9930 +vn -0.1178 -0.0000 0.9930 +vn -0.1179 -0.0002 0.9930 +vn -0.6551 -0.0000 -0.7555 +vt 0.487034 0.050981 +vt 0.501133 0.046425 +vt 0.398872 0.917006 +vt 0.487101 0.050981 +vt 0.473275 0.024841 +vt 0.501133 0.046415 +vt 0.487101 0.053064 +vt 0.500955 0.046871 +vt 0.473275 0.032117 +vt 0.487034 0.053064 +vt 0.500955 0.046867 +vt 0.501292 0.047455 +vt 0.509607 0.922908 +vt 0.487034 0.052022 +vt 0.509607 0.902732 +vt 0.398872 0.937183 +vt 0.824124 0.046271 +vt 0.501060 0.047455 +vt 0.500908 0.046867 +vt 0.475700 0.032117 +vt 0.500908 0.046871 +vt 0.475700 0.024841 +vt 0.501038 0.046415 +vt 0.475700 0.026660 +vt 0.475700 0.028479 +vt 0.475700 0.030298 +vt 0.497345 0.947253 +vt 0.390301 0.927567 +vt 0.485041 0.949714 +vt 0.398689 0.927567 +vt 0.500837 0.047437 +vt 0.493429 0.949714 +vt 0.398689 0.949573 +vt 0.500837 0.047711 +vt 0.501029 0.046336 +vt 0.390301 0.949573 +vt 0.501029 0.046347 +vt 0.497345 0.969259 +vt 0.501060 0.046089 +vt 0.501038 0.046703 +vt 0.997618 0.821941 +vt 0.992766 0.003169 +vt 0.501292 0.046089 +vt 0.501133 0.046703 +vt 0.481199 0.963761 +vt 0.501292 0.046436 +vt 0.381537 0.937183 +vt 0.481199 0.983937 +vt 0.501292 0.046783 +vt 0.381537 0.957359 +vt 0.992766 0.813733 +vt 0.824124 0.799906 +vt 0.501060 0.046783 +vt 0.997618 0.005010 +vt 0.501038 0.046425 +vt 0.501133 0.046564 +vt 0.489866 0.963761 +vt 0.390204 0.917006 +vt 0.500846 0.046425 +vt 0.495250 0.051926 +vt 0.381913 0.905562 +vt 0.821822 0.005010 +vt 0.500942 0.046425 +vt 0.500942 0.046703 +vt 0.821822 0.821941 +vt 0.501020 0.047163 +vt 0.824213 0.003169 +vt 0.500846 0.046703 +vt 0.500837 0.047163 +vt 0.493429 0.927709 +vt 0.500846 0.046564 +vt 0.390301 0.905562 +vt 0.485041 0.927709 +vt 0.501020 0.047711 +vt 0.824213 0.813733 +vt 0.995819 0.799906 +vt 0.501036 0.046336 +vt 0.480551 0.032117 +vt 0.500814 0.046871 +vt 0.495103 0.056478 +vt 0.478126 0.032117 +vt 0.500861 0.046871 +vt 0.478126 0.030298 +vt 0.478126 0.028479 +vt 0.478126 0.026660 +vt 0.478126 0.024841 +vt 0.500942 0.046415 +vt 0.480551 0.024841 +vt 0.500846 0.046415 +vt 0.495103 0.051926 +vt 0.476307 0.026660 +vt 0.520833 0.250000 +vt 0.501014 0.046415 +vt 0.476307 0.024841 +vt 0.500814 0.046867 +vt 0.501029 0.046357 +vt 0.495250 0.056478 +vt 0.488957 0.969259 +vt 0.995819 0.046271 +vt 0.501036 0.046357 +vt 0.500861 0.046867 +vt 0.479167 1.000000 +vt 0.477520 0.032117 +vt 0.500873 0.046871 +vt 0.520833 1.000000 +vt 0.476307 0.032117 +vt 0.500896 0.046871 +vt 0.500000 1.000000 +vt 0.476913 0.032117 +vt 0.479167 0.250000 +vt 0.477520 0.024841 +vt 0.500966 0.046415 +vt 0.500000 0.250000 +vt 0.476913 0.024841 +vt 0.495250 0.054202 +vt 0.488957 0.947253 +vt 0.381913 0.927567 +vt 0.501292 0.047119 +vt 0.500939 0.922908 +vt 0.390204 0.957359 +vt 0.500939 0.902732 +vt 0.489866 0.983937 +vt 0.390204 0.937183 +vt 0.477520 0.026660 +vt 0.476913 0.026660 +vt 0.477520 0.030298 +vt 0.476913 0.030298 +vt 0.476913 0.028479 +vt 0.477520 0.028479 +vt 0.476307 0.030298 +vt 0.476307 0.028479 +s 1 +usemtl Book1.001 +f 23419/40439/15157 23420/40442/15157 23421/40445/15157 23422/40448/15157 23423/40452/15157 +f 23424/40457/15158 23422/40449/15159 23421/40446/15159 23425/40459/15159 +f 23425/40458/15160 23421/40447/15161 23420/40443/15161 23426/40460/15160 23427/40462/15162 23428/40463/15162 23429/40464/15162 +f 23430/40466/15163 23431/40468/15163 23432/40471/15163 23433/40474/15163 +f 23434/40477/15164 23435/40481/15164 23436/40484/15164 23437/40487/15165 23438/40491/15165 +f 23439/40493/15166 23419/40440/15167 23440/40494/15168 23435/40482/15167 23434/40478/15166 +f 23441/40497/15169 23442/40501/15170 23443/40502/15170 23444/40506/15169 23445/40509/15169 +f 23442/40500/15171 23439/40492/15171 23434/40479/15171 23443/40503/15171 +f 23444/40507/15172 23443/40504/15172 23446/40512/15173 23432/40472/15173 23431/40469/15173 +f 23443/40505/15174 23434/40480/15174 23438/40489/15174 23446/40513/15174 +f 23447/40516/15161 23448/40519/15175 23449/40521/15176 23450/40522/15176 23451/40523/15176 23452/40524/15175 23453/40526/15161 +f 23454/40529/15177 23427/40462/15162 23426/40460/15160 23455/40532/15177 +f 23456/40533/15178 23457/40539/15179 23448/40520/15178 23447/40517/15178 +f 23458/40540/15180 23459/40543/15180 23460/40546/15180 +f 23446/40514/15180 23438/40490/15180 23424/40455/15180 23457/40537/15180 +f 23432/40473/15181 23446/40515/15182 23457/40538/15182 23456/40534/15181 23433/40475/15183 +f 23461/40548/15171 23462/40551/15171 23455/40530/15171 +f 23453/40527/15184 23452/40525/15184 23442/40501/15185 23441/40497/15184 +f 23426/40461/15186 23420/40444/15186 23419/40440/15186 23439/40493/15187 +f 23453/40528/15163 23441/40498/15163 23463/40553/15163 23456/40535/15163 23447/40518/15163 +f 23438/40491/15188 23437/40487/15189 23464/40556/15189 23422/40450/15189 23424/40456/15188 +f 23465/40559/15157 23423/40453/15157 23422/40451/15157 23464/40557/15157 +f 23466/40562/15190 23467/40563/15161 23462/40552/15161 23461/40549/15190 +f 23468/40564/15190 23469/40565/15161 23470/40566/15161 23471/40567/15190 +f 23472/40568/15177 23429/40464/15162 23428/40463/15162 23473/40569/15177 +f 23469/40565/15161 23472/40568/15177 23473/40569/15177 23470/40566/15161 +f 23460/40547/15161 23459/40544/15177 23472/40568/15177 23469/40565/15161 +f 23459/40544/15177 23425/40458/15160 23429/40464/15162 23472/40568/15177 +f 23449/40521/15176 23468/40564/15190 23471/40567/15190 23450/40522/15176 +f 23448/40519/15175 23458/40541/15190 23468/40564/15190 23449/40521/15176 +f 23458/40541/15190 23460/40547/15161 23469/40565/15161 23468/40564/15190 +f 23451/40523/15176 23466/40562/15190 23461/40549/15190 23452/40524/15175 +f 23450/40522/15176 23471/40567/15190 23466/40562/15190 23451/40523/15176 +f 23471/40567/15190 23470/40566/15161 23467/40563/15161 23466/40562/15190 +f 23452/40525/15191 23461/40550/15192 23455/40531/15192 23426/40461/15193 23439/40493/15191 23442/40501/15191 +f 23457/40539/15194 23424/40457/15194 23425/40459/15194 23459/40545/15194 23458/40542/15194 23448/40520/15194 +f 23467/40563/15161 23454/40529/15177 23455/40532/15177 23462/40552/15161 +f 23470/40566/15161 23473/40569/15177 23454/40529/15177 23467/40563/15161 +f 23473/40569/15177 23428/40463/15162 23427/40462/15162 23454/40529/15177 +f 23436/40485/15157 23465/40561/15157 23464/40558/15157 23437/40488/15157 +f 23435/40483/15157 23440/40495/15157 23465/40560/15157 23436/40486/15157 +f 23440/40496/15157 23419/40441/15157 23423/40454/15157 23465/40561/15157 +f 23463/40554/15163 23430/40465/15163 23433/40476/15163 23456/40536/15163 +f 23441/40499/15163 23445/40510/15163 23430/40466/15163 23463/40555/15163 +f 23445/40511/15163 23444/40508/15163 23431/40470/15163 23430/40467/15163 +o book5 +v 11.777565 0.832844 4.564721 +v 11.771817 0.832844 4.564721 +v 11.771817 0.832844 4.834722 +v 11.777565 0.832844 4.834722 +v 11.777565 0.832844 4.699721 +v 11.777565 0.829912 4.827801 +v 11.771817 0.829912 4.834722 +v 11.771817 0.829912 4.564721 +v 11.771817 0.829912 4.632221 +v 11.771817 0.829912 4.699721 +v 11.771817 0.829912 4.767221 +v 11.863957 0.797844 4.699721 +v 11.950349 0.797844 4.699721 +v 11.950349 0.797844 4.834722 +v 11.863957 0.797844 4.834722 +v 11.943847 0.829912 4.571641 +v 11.950349 0.832844 4.564721 +v 11.950349 0.832844 4.699721 +v 11.950349 0.832844 4.834722 +v 11.943847 0.829912 4.827801 +v 11.777565 0.829912 4.571641 +v 11.863957 0.832844 4.564721 +v 11.777565 0.797844 4.564721 +v 11.777565 0.800776 4.571641 +v 11.943847 0.800776 4.571641 +v 11.950349 0.797844 4.564721 +v 11.863957 0.797844 4.564721 +v 11.943847 0.800776 4.827801 +v 11.771817 0.797844 4.834722 +v 11.771817 0.800776 4.834722 +v 11.771817 0.800776 4.767221 +v 11.771817 0.800776 4.699721 +v 11.771817 0.800776 4.632221 +v 11.771817 0.800776 4.564721 +v 11.771817 0.797844 4.564721 +v 11.770358 0.822628 4.632221 +v 11.770358 0.822628 4.564721 +v 11.777565 0.797844 4.834722 +v 11.777565 0.800776 4.827801 +v 11.770358 0.808060 4.834722 +v 11.770358 0.822628 4.834722 +v 11.770350 0.815344 4.834722 +v 11.770358 0.808060 4.564721 +v 11.770350 0.815344 4.564721 +v 11.777565 0.797844 4.699721 +v 11.863957 0.832844 4.834722 +v 11.863957 0.832844 4.699721 +v 11.770358 0.808060 4.632221 +v 11.770350 0.815344 4.632221 +v 11.770358 0.808060 4.767221 +v 11.770350 0.815344 4.767221 +v 11.770350 0.815344 4.699721 +v 11.770358 0.808060 4.699721 +v 11.770358 0.822628 4.767221 +v 11.770358 0.822628 4.699721 +vn -0.0000 1.0000 -0.0000 +vn 0.2546 -0.0195 0.9669 +vn 0.2545 -0.0195 0.9669 +vn -1.0000 0.0039 -0.0000 +vn -1.0000 -0.0000 -0.0000 +vn -1.0000 0.0052 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn 0.9964 -0.0852 -0.0000 +vn -0.0000 -0.0395 -0.9992 +vn 0.0001 -0.0395 -0.9992 +vn -0.0000 0.0395 -0.9992 +vn 0.0001 0.0395 -0.9992 +vn -0.0000 -0.0000 -1.0000 +vn 0.9964 0.0852 -0.0000 +vn 1.0000 -0.0000 -0.0000 +vn -1.0000 -0.0039 -0.0000 +vn -1.0000 -0.0052 -0.0000 +vn -1.0000 0.0038 -0.0000 +vn 0.2545 0.0195 0.9669 +vn 0.2546 0.0195 0.9669 +vn -0.0000 -0.0000 1.0000 +vn 0.0001 0.0395 0.9992 +vn -0.0000 0.0395 0.9992 +vn 0.2545 0.0195 -0.9669 +vn 0.2546 0.0195 -0.9669 +vn 0.2545 -0.0195 -0.9669 +vn 0.2546 -0.0195 -0.9669 +vn -0.0000 -0.0395 0.9992 +vn 0.0001 -0.0395 0.9992 +vn -1.0000 -0.0038 -0.0000 +vn 0.4043 -0.0000 -0.9146 +vn 0.4043 -0.0002 -0.9146 +vn 0.4043 -0.0000 0.9146 +vt 0.487034 0.050981 +vt 0.501133 0.046425 +vt 0.905793 0.919467 +vt 0.487101 0.050981 +vt 0.473275 0.024841 +vt 0.501133 0.046415 +vt 0.487101 0.053064 +vt 0.500955 0.046871 +vt 0.473275 0.032117 +vt 0.487034 0.053064 +vt 0.500955 0.046867 +vt 0.501292 0.047455 +vt 0.509607 0.922908 +vt 0.487034 0.052022 +vt 0.509607 0.902732 +vt 0.905793 0.939643 +vt 0.824124 0.046271 +vt 0.501060 0.047455 +vt 0.500908 0.046867 +vt 0.475700 0.032117 +vt 0.500908 0.046871 +vt 0.475700 0.024841 +vt 0.501038 0.046415 +vt 0.475700 0.026660 +vt 0.475700 0.028479 +vt 0.475700 0.030298 +vt 0.497345 0.947253 +vt 0.894761 0.927567 +vt 0.485041 0.949714 +vt 0.903149 0.927567 +vt 0.500837 0.047437 +vt 0.493429 0.949714 +vt 0.903149 0.949573 +vt 0.500837 0.047711 +vt 0.501029 0.046336 +vt 0.894761 0.949573 +vt 0.501029 0.046347 +vt 0.497345 0.969259 +vt 0.501060 0.046089 +vt 0.501038 0.046703 +vt 0.997618 0.821941 +vt 0.992766 0.003169 +vt 0.501292 0.046089 +vt 0.501133 0.046703 +vt 0.481199 0.963761 +vt 0.501292 0.046436 +vt 0.888458 0.939643 +vt 0.481199 0.983937 +vt 0.501292 0.046783 +vt 0.888458 0.959820 +vt 0.992766 0.813733 +vt 0.824124 0.799906 +vt 0.501060 0.046783 +vt 0.997618 0.005010 +vt 0.501038 0.046425 +vt 0.501133 0.046564 +vt 0.489866 0.963761 +vt 0.897125 0.919467 +vt 0.500846 0.046425 +vt 0.495250 0.051926 +vt 0.886373 0.905562 +vt 0.821822 0.005010 +vt 0.500942 0.046425 +vt 0.500942 0.046703 +vt 0.821822 0.821941 +vt 0.501020 0.047163 +vt 0.824213 0.003169 +vt 0.500846 0.046703 +vt 0.500837 0.047163 +vt 0.493429 0.927709 +vt 0.500846 0.046564 +vt 0.894761 0.905562 +vt 0.485041 0.927709 +vt 0.501020 0.047711 +vt 0.824213 0.813733 +vt 0.995819 0.799906 +vt 0.501036 0.046336 +vt 0.480551 0.032117 +vt 0.500814 0.046871 +vt 0.495103 0.056478 +vt 0.478126 0.032117 +vt 0.500861 0.046871 +vt 0.478126 0.030298 +vt 0.478126 0.028479 +vt 0.478126 0.026660 +vt 0.478126 0.024841 +vt 0.500942 0.046415 +vt 0.480551 0.024841 +vt 0.500846 0.046415 +vt 0.495103 0.051926 +vt 0.476307 0.026660 +vt 0.520833 0.250000 +vt 0.501014 0.046415 +vt 0.476307 0.024841 +vt 0.500814 0.046867 +vt 0.501029 0.046357 +vt 0.495250 0.056478 +vt 0.488957 0.969259 +vt 0.995819 0.046271 +vt 0.501036 0.046357 +vt 0.500861 0.046867 +vt 0.479167 1.000000 +vt 0.477520 0.032117 +vt 0.500873 0.046871 +vt 0.520833 1.000000 +vt 0.476307 0.032117 +vt 0.500896 0.046871 +vt 0.500000 1.000000 +vt 0.476913 0.032117 +vt 0.479167 0.250000 +vt 0.477520 0.024841 +vt 0.500966 0.046415 +vt 0.500000 0.250000 +vt 0.476913 0.024841 +vt 0.495250 0.054202 +vt 0.488957 0.947253 +vt 0.886373 0.927567 +vt 0.501292 0.047119 +vt 0.500939 0.922908 +vt 0.897125 0.959820 +vt 0.500939 0.902732 +vt 0.489866 0.983937 +vt 0.897125 0.939643 +vt 0.477520 0.026660 +vt 0.476913 0.026660 +vt 0.477520 0.030298 +vt 0.476913 0.030298 +vt 0.476913 0.028479 +vt 0.477520 0.028479 +vt 0.476307 0.030298 +vt 0.476307 0.028479 +s 1 +usemtl Book1.002 +f 23474/40570/15195 23475/40573/15195 23476/40576/15195 23477/40579/15195 23478/40583/15195 +f 23479/40588/15196 23477/40580/15197 23476/40577/15197 23480/40590/15197 +f 23480/40589/15198 23476/40578/15199 23475/40574/15199 23481/40591/15198 23482/40593/15200 23483/40594/15200 23484/40595/15200 +f 23485/40597/15201 23486/40599/15201 23487/40602/15201 23488/40605/15201 +f 23489/40608/15202 23490/40612/15202 23491/40615/15202 23492/40618/15202 23493/40622/15202 +f 23494/40624/15203 23474/40571/15203 23495/40625/15203 23490/40613/15204 23489/40609/15203 +f 23496/40628/15205 23497/40632/15205 23498/40633/15205 23499/40637/15206 23500/40640/15205 +f 23497/40631/15207 23494/40623/15207 23489/40610/15207 23498/40634/15207 +f 23499/40638/15208 23498/40635/15208 23501/40643/15208 23487/40603/15208 23486/40600/15208 +f 23498/40636/15209 23489/40611/15209 23493/40620/15209 23501/40644/15209 +f 23502/40647/15199 23503/40650/15210 23504/40652/15211 23505/40653/15211 23506/40654/15211 23507/40655/15210 23508/40657/15199 +f 23509/40660/15212 23482/40593/15200 23481/40591/15198 23510/40663/15212 +f 23511/40664/15213 23512/40670/15214 23503/40651/15213 23502/40648/15213 +f 23513/40671/15215 23514/40674/15215 23515/40677/15215 +f 23501/40645/15215 23493/40621/15215 23479/40586/15215 23512/40668/15215 +f 23487/40604/15216 23501/40646/15217 23512/40669/15217 23511/40665/15217 23488/40606/15217 +f 23516/40679/15207 23517/40682/15207 23510/40661/15207 +f 23508/40658/15218 23507/40656/15218 23497/40632/15219 23496/40628/15218 +f 23481/40592/15220 23475/40575/15220 23474/40571/15220 23494/40624/15221 +f 23508/40659/15201 23496/40629/15201 23518/40684/15201 23511/40666/15201 23502/40649/15201 +f 23493/40622/15222 23492/40618/15223 23519/40687/15222 23477/40581/15222 23479/40587/15222 +f 23520/40690/15195 23478/40584/15195 23477/40582/15195 23519/40688/15195 +f 23521/40693/15224 23522/40694/15199 23517/40683/15199 23516/40680/15224 +f 23523/40695/15224 23524/40696/15199 23525/40697/15199 23526/40698/15224 +f 23527/40699/15212 23484/40595/15200 23483/40594/15200 23528/40700/15212 +f 23524/40696/15199 23527/40699/15212 23528/40700/15212 23525/40697/15199 +f 23515/40678/15199 23514/40675/15212 23527/40699/15212 23524/40696/15199 +f 23514/40675/15212 23480/40589/15198 23484/40595/15200 23527/40699/15212 +f 23504/40652/15211 23523/40695/15224 23526/40698/15224 23505/40653/15211 +f 23503/40650/15210 23513/40672/15224 23523/40695/15224 23504/40652/15211 +f 23513/40672/15224 23515/40678/15199 23524/40696/15199 23523/40695/15224 +f 23506/40654/15211 23521/40693/15224 23516/40680/15224 23507/40655/15210 +f 23505/40653/15211 23526/40698/15224 23521/40693/15224 23506/40654/15211 +f 23526/40698/15224 23525/40697/15199 23522/40694/15199 23521/40693/15224 +f 23507/40656/15225 23516/40681/15225 23510/40662/15225 23481/40592/15226 23494/40624/15225 23497/40632/15225 +f 23512/40670/15227 23479/40588/15227 23480/40590/15227 23514/40676/15227 23513/40673/15227 23503/40651/15227 +f 23522/40694/15199 23509/40660/15212 23510/40663/15212 23517/40683/15199 +f 23525/40697/15199 23528/40700/15212 23509/40660/15212 23522/40694/15199 +f 23528/40700/15212 23483/40594/15200 23482/40593/15200 23509/40660/15212 +f 23491/40616/15195 23520/40692/15195 23519/40689/15195 23492/40619/15195 +f 23490/40614/15195 23495/40626/15195 23520/40691/15195 23491/40617/15195 +f 23495/40627/15195 23474/40572/15195 23478/40585/15195 23520/40692/15195 +f 23518/40685/15201 23485/40596/15201 23488/40607/15201 23511/40667/15201 +f 23496/40630/15201 23500/40641/15201 23485/40597/15201 23518/40686/15201 +f 23500/40642/15201 23499/40639/15201 23486/40601/15201 23485/40598/15201 +o calculator +v -11.004730 0.666004 -1.399632 +v -11.019236 0.666053 -1.399624 +v -11.019236 0.666026 -1.387521 +v -11.005281 0.665978 -1.387588 +v -11.033741 0.666004 -1.399632 +v -11.033190 0.665978 -1.387588 +v -11.019236 0.665954 -1.380419 +v -11.006511 0.665911 -1.380640 +v -11.031960 0.665911 -1.380640 +v -11.004653 0.666007 -1.444138 +v -10.992569 0.665858 -1.444138 +v -10.994080 0.667907 -1.445982 +v -11.003141 0.668019 -1.445982 +v -11.045831 0.665857 -1.408978 +v -11.045759 0.665855 -1.399641 +v -11.044264 0.667904 -1.400807 +v -11.044317 0.667905 -1.407810 +v -11.004653 0.666007 -1.458887 +v -11.003141 0.668019 -1.457043 +v -11.033818 0.666007 -1.487995 +v -11.045902 0.665858 -1.487995 +v -11.044392 0.667907 -1.486200 +v -11.035330 0.668019 -1.486200 +v -11.044761 0.665835 -1.387656 +v -11.042295 0.665786 -1.380892 +v -11.039236 0.665725 -1.377916 +v -11.031101 0.665783 -1.377006 +v -11.019236 0.665813 -1.376549 +v -11.007370 0.665783 -1.377006 +v -10.996176 0.665786 -1.380892 +v -10.999235 0.665725 -1.377916 +v -10.993711 0.665835 -1.387656 +v -10.992712 0.665855 -1.399641 +v -11.004730 0.664195 -1.373553 +v -11.005281 0.665065 -1.373948 +v -11.019236 0.665070 -1.373198 +v -11.019236 0.664196 -1.372777 +v -11.006511 0.665546 -1.375002 +v -11.019236 0.665560 -1.374339 +v -11.033190 0.665065 -1.373948 +v -11.033741 0.664195 -1.373553 +v -11.031960 0.665546 -1.375002 +v -10.992569 0.662806 -1.375837 +v -10.992712 0.664195 -1.375881 +v -11.004653 0.662806 -1.373497 +v -10.993711 0.665061 -1.376193 +v -10.996176 0.665530 -1.376962 +v -11.042295 0.665530 -1.376962 +v -11.044761 0.665061 -1.376193 +v -11.045759 0.664195 -1.375881 +v -11.033818 0.662806 -1.373497 +v -11.045902 0.662806 -1.375837 +v -11.019236 0.662806 -1.372717 +v -11.058820 0.664197 -1.540776 +v -11.057368 0.665078 -1.540776 +v -11.055964 0.665074 -1.548447 +v -11.057368 0.664196 -1.548447 +v -11.053429 0.661075 -1.540776 +v -11.052156 0.665573 -1.548447 +v -11.052156 0.665066 -1.551273 +v -11.053429 0.664195 -1.551273 +v -11.048758 0.665548 -1.551273 +v -11.059236 0.662806 -1.525837 +v -11.059028 0.664197 -1.525837 +v -11.059028 0.662806 -1.540776 +v -11.057569 0.665078 -1.525837 +v -11.053611 0.661077 -1.525837 +v -11.045902 0.661349 -1.525837 +v -11.045759 0.661346 -1.540776 +v -11.044761 0.665835 -1.548447 +v -11.042295 0.665786 -1.551273 +v -11.039236 0.665725 -1.551677 +v -11.042295 0.665530 -1.551677 +v -11.044761 0.665061 -1.551677 +v -11.045759 0.664195 -1.551677 +v -11.053611 0.662806 -1.551273 +v -11.045902 0.662806 -1.551677 +v -11.057569 0.662806 -1.548447 +v -11.033741 0.653485 -1.399632 +v -11.019236 0.653113 -1.399624 +v -11.019236 0.653315 -1.387521 +v -11.033190 0.653674 -1.387588 +v -11.004730 0.653485 -1.399632 +v -11.005281 0.653674 -1.387588 +v -11.019236 0.653861 -1.380419 +v -11.031960 0.654178 -1.380640 +v -11.006511 0.654178 -1.380640 +v -11.045831 0.654588 -1.408978 +v -11.033779 0.653471 -1.408974 +v -11.045759 0.654599 -1.399641 +v -11.019236 0.653099 -1.408970 +v -11.004692 0.653471 -1.408974 +v -10.992640 0.654588 -1.408978 +v -10.992712 0.654599 -1.399641 +v -10.993711 0.654748 -1.387656 +v -10.996176 0.655116 -1.380892 +v -10.999235 0.655573 -1.377916 +v -11.007370 0.655137 -1.377006 +v -11.019236 0.654918 -1.376549 +v -11.031101 0.655137 -1.377006 +v -11.042295 0.655116 -1.380892 +v -11.039236 0.655573 -1.377916 +v -11.044761 0.654748 -1.387656 +v -10.979651 0.664197 -1.399608 +v -10.981103 0.665078 -1.399615 +v -10.982508 0.665074 -1.387453 +v -10.981103 0.664196 -1.387394 +v -10.985043 0.665585 -1.399631 +v -10.986315 0.665573 -1.387580 +v -10.986315 0.665066 -1.380215 +v -10.985043 0.664195 -1.380036 +v -10.989714 0.665548 -1.380614 +v -10.979340 0.662806 -1.408961 +v -10.979548 0.664197 -1.408962 +v -10.979444 0.662806 -1.399607 +v -10.981003 0.665078 -1.408965 +v -10.984952 0.665586 -1.408973 +v -10.984860 0.665586 -1.418316 +v -10.984860 0.665586 -1.431227 +v -10.985825 0.667650 -1.429613 +v -10.985825 0.667650 -1.419930 +v -10.984860 0.662806 -1.380010 +v -10.980903 0.662806 -1.387386 +v -11.033741 0.664195 -1.551677 +v -11.033190 0.665065 -1.551677 +v -11.019236 0.665070 -1.551677 +v -11.019236 0.664196 -1.551677 +v -11.031960 0.665546 -1.551677 +v -11.019236 0.665560 -1.551677 +v -11.005281 0.665065 -1.551677 +v -11.004730 0.664195 -1.551677 +v -11.006511 0.665546 -1.551677 +v -11.033818 0.662806 -1.551677 +v -11.031101 0.665783 -1.551677 +v -11.019236 0.665813 -1.551677 +v -11.007370 0.665783 -1.551677 +v -10.999235 0.665725 -1.551677 +v -10.996176 0.665530 -1.551677 +v -10.993711 0.665061 -1.551677 +v -10.992712 0.664195 -1.551677 +v -11.004653 0.662806 -1.551677 +v -10.992569 0.662806 -1.551677 +v -11.019236 0.662806 -1.551677 +v -10.985043 0.664195 -1.551273 +v -10.986315 0.665066 -1.551273 +v -10.982508 0.665074 -1.548447 +v -10.981103 0.664196 -1.548447 +v -10.989714 0.665548 -1.551273 +v -10.986315 0.665573 -1.548447 +v -10.981103 0.665078 -1.540776 +v -10.979651 0.664197 -1.540776 +v -10.985043 0.661075 -1.540776 +v -10.984860 0.662806 -1.551273 +v -10.996176 0.665786 -1.551273 +v -10.993711 0.665835 -1.548447 +v -10.992712 0.661346 -1.540776 +v -10.992569 0.661349 -1.525837 +v -10.984860 0.661077 -1.525837 +v -10.980903 0.665078 -1.525837 +v -10.979444 0.664197 -1.525837 +v -10.979444 0.662806 -1.540776 +v -10.979236 0.662806 -1.525837 +v -10.980903 0.662806 -1.548447 +v -11.031960 0.654178 -1.551273 +v -11.019236 0.653861 -1.551273 +v -11.019236 0.653315 -1.548447 +v -11.033190 0.653674 -1.548447 +v -11.006511 0.654178 -1.551273 +v -11.005281 0.653674 -1.548447 +v -11.019236 0.653113 -1.540776 +v -11.033741 0.653485 -1.540776 +v -11.004730 0.653485 -1.540776 +v -11.039236 0.655573 -1.551677 +v -11.031101 0.655137 -1.551677 +v -11.042295 0.655116 -1.551273 +v -11.019236 0.654918 -1.551677 +v -11.007370 0.655137 -1.551677 +v -10.999235 0.655573 -1.551677 +v -10.996176 0.655116 -1.551273 +v -10.993711 0.654748 -1.548447 +v -10.992712 0.654599 -1.540776 +v -10.992569 0.654577 -1.525837 +v -11.004653 0.653458 -1.525837 +v -11.019236 0.653084 -1.525837 +v -11.033818 0.653458 -1.525837 +v -11.045759 0.654599 -1.540776 +v -11.045902 0.654577 -1.525837 +v -11.044761 0.654748 -1.548447 +v -11.059028 0.664197 -1.458887 +v -11.057569 0.665078 -1.458887 +v -11.057569 0.665078 -1.473636 +v -11.059028 0.664197 -1.473636 +v -11.053611 0.665586 -1.458887 +v -11.053611 0.665586 -1.473636 +v -11.059028 0.664197 -1.487995 +v -11.057569 0.665078 -1.487995 +v -11.057569 0.665078 -1.502354 +v -11.059028 0.664197 -1.502354 +v -11.053611 0.665586 -1.487995 +v -11.053611 0.665586 -1.502354 +v -11.059236 0.662806 -1.431227 +v -11.059028 0.664197 -1.431227 +v -11.059028 0.664197 -1.444138 +v -11.059236 0.662806 -1.444138 +v -11.057569 0.665078 -1.431227 +v -11.057569 0.665078 -1.444138 +v -11.053611 0.665586 -1.431227 +v -11.053611 0.665586 -1.444138 +v -11.019236 0.666057 -1.473636 +v -11.033818 0.666007 -1.473636 +v -11.031996 0.668045 -1.471792 +v -11.021059 0.668082 -1.471792 +v -11.019236 0.666057 -1.431227 +v -11.019236 0.666057 -1.444138 +v -11.021059 0.668082 -1.442524 +v -11.021059 0.668082 -1.432841 +v -11.045902 0.665858 -1.502354 +v -11.053611 0.661077 -1.514095 +v -11.045902 0.661349 -1.514095 +v -11.057569 0.665078 -1.514095 +v -11.059028 0.664197 -1.514095 +v -11.059236 0.662806 -1.514095 +v -11.059236 0.662806 -1.487995 +v -11.059236 0.662806 -1.502354 +v -11.059236 0.662806 -1.458887 +v -11.059236 0.662806 -1.473636 +v -11.006511 0.665911 -1.551273 +v -11.019236 0.665954 -1.551273 +v -11.019236 0.666026 -1.548447 +v -11.005281 0.665978 -1.548447 +v -11.031960 0.665911 -1.551273 +v -11.033190 0.665978 -1.548447 +v -11.019236 0.661544 -1.540776 +v -11.004730 0.661494 -1.540776 +v -11.033741 0.661494 -1.540776 +v -11.033818 0.661498 -1.525837 +v -11.019236 0.661548 -1.525837 +v -11.004653 0.661498 -1.525837 +v -11.053429 0.664195 -1.380036 +v -11.052156 0.665066 -1.380215 +v -11.055964 0.665074 -1.387453 +v -11.057368 0.664196 -1.387394 +v -11.048758 0.665548 -1.380614 +v -11.052156 0.665573 -1.387580 +v -11.057368 0.665078 -1.399615 +v -11.058820 0.664197 -1.399608 +v -11.053429 0.665585 -1.399631 +v -11.053611 0.662806 -1.380010 +v -11.004653 0.666007 -1.473636 +v -11.003141 0.668020 -1.460731 +v -11.003141 0.668020 -1.471792 +v -11.057468 0.665078 -1.408965 +v -11.053519 0.665586 -1.408973 +v -11.053611 0.665586 -1.418316 +v -11.057569 0.665078 -1.418316 +v -11.058924 0.664197 -1.408962 +v -11.059028 0.664197 -1.418316 +v -11.059132 0.662806 -1.408961 +v -11.059236 0.662806 -1.418316 +v -11.057569 0.662806 -1.387386 +v -11.059028 0.662806 -1.399607 +v -10.979444 0.664197 -1.487995 +v -10.980903 0.665078 -1.487995 +v -10.980903 0.665078 -1.473636 +v -10.979444 0.664197 -1.473636 +v -10.984860 0.665586 -1.487995 +v -10.984860 0.665586 -1.473636 +v -10.979444 0.664197 -1.458887 +v -10.980903 0.665078 -1.458887 +v -10.980903 0.665078 -1.444138 +v -10.979444 0.664197 -1.444138 +v -10.984860 0.665586 -1.458887 +v -10.984860 0.665586 -1.444138 +v -10.979236 0.662806 -1.514095 +v -10.979444 0.664197 -1.514095 +v -10.979444 0.664197 -1.502354 +v -10.979236 0.662806 -1.502354 +v -10.980903 0.665078 -1.514095 +v -10.980903 0.665078 -1.502354 +v -10.984860 0.661077 -1.514095 +v -10.984860 0.665586 -1.502354 +v -10.992569 0.661349 -1.514095 +v -10.992569 0.665858 -1.502354 +v -11.006475 0.668044 -1.457044 +v -11.006475 0.668044 -1.445982 +v -11.033818 0.666007 -1.431227 +v -11.045902 0.665858 -1.431227 +v -11.044392 0.667907 -1.429613 +v -11.035330 0.668019 -1.429613 +v -11.006475 0.668044 -1.475431 +v -11.017412 0.668081 -1.475431 +v -10.980903 0.665078 -1.431227 +v -10.980903 0.665078 -1.418316 +v -10.979444 0.664197 -1.431227 +v -10.979444 0.664197 -1.418316 +v -10.979236 0.662806 -1.431227 +v -10.979236 0.662806 -1.418316 +v -10.979236 0.662806 -1.458887 +v -10.979236 0.662806 -1.444138 +v -10.979236 0.662806 -1.487995 +v -10.979236 0.662806 -1.473636 +v -11.033818 0.653458 -1.487995 +v -11.019236 0.653084 -1.487995 +v -11.019236 0.653084 -1.473636 +v -11.033818 0.653458 -1.473636 +v -11.004653 0.653458 -1.487995 +v -11.004653 0.653458 -1.473636 +v -11.033818 0.653458 -1.458887 +v -11.019236 0.653084 -1.458887 +v -11.019236 0.653084 -1.444138 +v -11.033818 0.653458 -1.444138 +v -11.004653 0.653458 -1.458887 +v -11.004653 0.653458 -1.444138 +v -11.045902 0.654577 -1.514095 +v -11.033818 0.653458 -1.514095 +v -11.033818 0.653458 -1.502354 +v -11.045902 0.654577 -1.502354 +v -11.019236 0.653084 -1.514095 +v -11.019236 0.653084 -1.502354 +v -11.004653 0.653458 -1.514095 +v -11.004653 0.653458 -1.502354 +v -10.992569 0.654577 -1.514095 +v -10.992569 0.654577 -1.502354 +v -10.992569 0.654577 -1.487995 +v -10.992569 0.654577 -1.473636 +v -10.992569 0.654577 -1.458887 +v -10.992569 0.654577 -1.444138 +v -11.004653 0.653458 -1.431227 +v -10.992569 0.654577 -1.431227 +v -10.992569 0.654577 -1.418316 +v -11.004653 0.653458 -1.418316 +v -11.019236 0.653084 -1.431227 +v -11.019236 0.653084 -1.418316 +v -11.033818 0.653458 -1.431227 +v -11.033818 0.653458 -1.418316 +v -11.045902 0.654577 -1.431227 +v -11.045902 0.654577 -1.418316 +v -11.045902 0.654577 -1.458887 +v -11.045902 0.654577 -1.444138 +v -11.045902 0.654577 -1.487995 +v -11.045902 0.654577 -1.473636 +v -10.992569 0.665858 -1.458887 +v -10.991702 0.667857 -1.457228 +v -10.985727 0.667647 -1.457228 +v -10.992569 0.665858 -1.487995 +v -11.004653 0.666007 -1.487995 +v -11.003141 0.668019 -1.486200 +v -10.994080 0.667907 -1.486200 +v -11.004653 0.666007 -1.431227 +v -11.017412 0.668081 -1.429613 +v -11.006475 0.668044 -1.429613 +v -11.053033 0.667637 -1.419284 +v -11.053033 0.667637 -1.430259 +v -11.004653 0.661498 -1.514095 +v -11.004653 0.666007 -1.502354 +v -11.019236 0.661548 -1.514095 +v -11.019236 0.666057 -1.502354 +v -11.033818 0.661498 -1.514095 +v -11.033818 0.666007 -1.502354 +v -11.035330 0.668019 -1.475431 +v -11.045902 0.665858 -1.458887 +v -11.045902 0.665858 -1.444138 +v -11.044392 0.667907 -1.445982 +v -11.044392 0.667907 -1.457044 +v -11.033818 0.666007 -1.444138 +v -11.035330 0.668019 -1.445982 +v -11.021059 0.668081 -1.475431 +v -11.031996 0.668044 -1.475431 +v -11.019236 0.666057 -1.487995 +v -11.017412 0.668081 -1.486200 +v -10.994207 0.667904 -1.400807 +v -11.003222 0.668016 -1.400801 +v -11.031996 0.668044 -1.429613 +v -11.021059 0.668081 -1.429613 +v -11.031996 0.668044 -1.486200 +v -10.984860 0.656386 -1.487995 +v -10.980903 0.658592 -1.487995 +v -10.980903 0.658592 -1.473636 +v -10.984860 0.656386 -1.473636 +v -10.979444 0.660848 -1.487995 +v -10.979444 0.660848 -1.473636 +v -10.984860 0.656386 -1.458887 +v -10.980903 0.658592 -1.458887 +v -10.980903 0.658592 -1.444138 +v -10.984860 0.656386 -1.444138 +v -10.979444 0.660848 -1.458887 +v -10.979444 0.660848 -1.444138 +v -10.984860 0.656386 -1.514095 +v -10.984860 0.656386 -1.502354 +v -10.980903 0.658592 -1.514095 +v -10.980903 0.658592 -1.502354 +v -10.979444 0.660848 -1.514095 +v -10.979444 0.660848 -1.502354 +v -10.979444 0.660848 -1.431227 +v -10.979444 0.660848 -1.418316 +v -10.980903 0.658592 -1.431227 +v -10.980903 0.658592 -1.418316 +v -10.984860 0.656386 -1.431227 +v -10.984860 0.656386 -1.418316 +v -11.048758 0.656675 -1.380614 +v -11.052156 0.658685 -1.380215 +v -11.055964 0.658624 -1.387453 +v -11.052156 0.656483 -1.387580 +v -11.053429 0.660860 -1.380036 +v -11.057368 0.660852 -1.387394 +v -11.057368 0.658596 -1.399615 +v -11.053429 0.656398 -1.399631 +v -11.058820 0.660849 -1.399608 +v -11.042295 0.656807 -1.376962 +v -11.044761 0.658721 -1.376193 +v -11.045759 0.660864 -1.375881 +v -11.058924 0.660848 -1.408962 +v -11.059028 0.660848 -1.418316 +v -11.057468 0.658594 -1.408965 +v -11.057569 0.658592 -1.418316 +v -11.053519 0.656392 -1.408973 +v -11.053611 0.656386 -1.418316 +v -11.053611 0.656386 -1.458887 +v -11.057569 0.658592 -1.458887 +v -11.057569 0.658592 -1.473636 +v -11.053611 0.656386 -1.473636 +v -11.059028 0.660848 -1.458887 +v -11.059028 0.660848 -1.473636 +v -11.053611 0.656386 -1.487995 +v -11.057569 0.658592 -1.487995 +v -11.057569 0.658592 -1.502354 +v -11.053611 0.656386 -1.502354 +v -11.059028 0.660848 -1.487995 +v -11.059028 0.660848 -1.502354 +v -11.053611 0.656386 -1.431227 +v -11.053611 0.656386 -1.444138 +v -11.057569 0.658592 -1.431227 +v -11.057569 0.658592 -1.444138 +v -11.059028 0.660848 -1.431227 +v -11.059028 0.660848 -1.444138 +v -11.059028 0.660848 -1.514095 +v -11.059028 0.660848 -1.525837 +v -11.057569 0.658592 -1.514095 +v -11.057569 0.658592 -1.525837 +v -11.053611 0.656386 -1.514095 +v -11.053611 0.656386 -1.525837 +v -10.989714 0.656675 -1.551273 +v -10.986315 0.658685 -1.551273 +v -10.982508 0.658624 -1.548447 +v -10.986315 0.656483 -1.548447 +v -10.985043 0.660860 -1.551273 +v -10.981103 0.660852 -1.548447 +v -10.981103 0.658596 -1.540776 +v -10.985043 0.656398 -1.540776 +v -10.979651 0.660849 -1.540776 +v -10.996176 0.656807 -1.551677 +v -10.993711 0.658721 -1.551677 +v -10.992712 0.660864 -1.551677 +v -10.979444 0.660848 -1.525837 +v -10.980903 0.658592 -1.525837 +v -10.984860 0.656386 -1.525837 +v -11.031960 0.656687 -1.551677 +v -11.033190 0.658689 -1.551677 +v -11.019236 0.658656 -1.551677 +v -11.019236 0.656581 -1.551677 +v -11.033741 0.660860 -1.551677 +v -11.019236 0.660856 -1.551677 +v -11.005281 0.658689 -1.551677 +v -11.006511 0.656687 -1.551677 +v -11.004730 0.660860 -1.551677 +v -11.042295 0.656807 -1.551677 +v -11.044761 0.658721 -1.551677 +v -11.045759 0.660864 -1.551677 +v -10.985043 0.656398 -1.399631 +v -10.981103 0.658596 -1.399615 +v -10.982508 0.658624 -1.387453 +v -10.986315 0.656483 -1.387580 +v -10.979651 0.660849 -1.399608 +v -10.981103 0.660852 -1.387394 +v -10.986315 0.658685 -1.380215 +v -10.989714 0.656675 -1.380614 +v -10.985043 0.660860 -1.380036 +v -10.984952 0.656392 -1.408973 +v -10.981003 0.658594 -1.408965 +v -10.979548 0.660848 -1.408962 +v -10.992712 0.660864 -1.375881 +v -10.993711 0.658721 -1.376193 +v -10.996176 0.656807 -1.376962 +v -11.053429 0.656398 -1.540776 +v -11.057368 0.658596 -1.540776 +v -11.055964 0.658624 -1.548447 +v -11.052156 0.656483 -1.548447 +v -11.058820 0.660849 -1.540776 +v -11.057368 0.660852 -1.548447 +v -11.052156 0.658685 -1.551273 +v -11.048758 0.656675 -1.551273 +v -11.053429 0.660860 -1.551273 +v -11.006511 0.656687 -1.375002 +v -11.005281 0.658689 -1.373948 +v -11.019236 0.658656 -1.373198 +v -11.019236 0.656581 -1.374339 +v -11.004730 0.660860 -1.373553 +v -11.019236 0.660856 -1.372777 +v -11.033190 0.658689 -1.373948 +v -11.031960 0.656687 -1.375002 +v -11.033741 0.660860 -1.373553 +v -11.052647 0.667651 -1.486200 +v -11.046865 0.667855 -1.486200 +v -11.031996 0.668045 -1.432841 +v -10.992569 0.665858 -1.431227 +v -10.991606 0.667855 -1.432841 +v -10.991606 0.667855 -1.442524 +v -11.045902 0.665858 -1.418316 +v -11.046856 0.667855 -1.417148 +v -11.046803 0.667854 -1.410145 +v -10.985825 0.667651 -1.432841 +v -11.033779 0.666005 -1.408974 +v -11.033818 0.666007 -1.418316 +v -11.035322 0.668020 -1.417148 +v -11.035293 0.668018 -1.410142 +v -11.046865 0.667855 -1.457043 +v -11.046865 0.667855 -1.445982 +v -11.052647 0.667651 -1.460731 +v -11.052647 0.667651 -1.471792 +v -10.992569 0.665858 -1.418316 +v -10.991615 0.667855 -1.417148 +v -10.985835 0.667651 -1.417148 +v -11.031996 0.668045 -1.442524 +v -11.019236 0.666057 -1.418316 +v -11.019236 0.666055 -1.408970 +v -11.017416 0.668080 -1.410138 +v -11.017416 0.668082 -1.417148 +v -11.019236 0.666057 -1.458887 +v -11.006475 0.668045 -1.460731 +v -11.017412 0.668082 -1.460731 +v -11.003141 0.668019 -1.429613 +v -10.994080 0.667907 -1.429613 +v -11.021059 0.668081 -1.486200 +v -11.004692 0.666005 -1.408974 +v -11.004653 0.666007 -1.418316 +v -11.006477 0.668044 -1.417148 +v -11.006508 0.668043 -1.410141 +v -10.994080 0.667908 -1.432841 +v -11.003141 0.668020 -1.432841 +v -11.045902 0.665858 -1.473636 +v -11.044392 0.667908 -1.460731 +v -11.044392 0.667908 -1.471792 +v -11.046865 0.667855 -1.471792 +v -11.052647 0.667651 -1.475431 +v -11.046865 0.667855 -1.475431 +v -11.006512 0.668042 -1.407806 +v -11.017420 0.668079 -1.407802 +v -11.017420 0.668077 -1.400793 +v -11.006541 0.668040 -1.400799 +v -11.035279 0.668017 -1.407807 +v -11.035250 0.668015 -1.400801 +v -10.985923 0.667649 -1.407807 +v -10.991690 0.667853 -1.407810 +v -10.991743 0.667852 -1.400807 +v -10.985991 0.667649 -1.400800 +v -10.985825 0.667650 -1.486200 +v -10.991606 0.667854 -1.486200 +v -10.991606 0.667854 -1.475431 +v -10.985825 0.667650 -1.475431 +v -10.991702 0.667857 -1.445798 +v -10.985727 0.667647 -1.445798 +v -10.991606 0.667854 -1.429613 +v -10.991606 0.667854 -1.419930 +v -11.006475 0.668044 -1.486200 +v -11.017412 0.668081 -1.457044 +v -11.017412 0.668081 -1.445982 +v -11.044392 0.667907 -1.475431 +v -11.035330 0.668019 -1.457044 +v -11.044392 0.667907 -1.419930 +v -11.035330 0.668019 -1.419930 +v -11.017412 0.668081 -1.419930 +v -11.006475 0.668044 -1.419930 +v -10.992569 0.665858 -1.473636 +v -11.033818 0.666007 -1.458887 +v -10.992640 0.665857 -1.408978 +v -10.994154 0.667906 -1.407810 +v -11.003192 0.668017 -1.407807 +v -11.021051 0.668079 -1.407802 +v -11.031960 0.668042 -1.407805 +v -11.031930 0.668041 -1.400799 +v -11.021051 0.668078 -1.400793 +v -11.021059 0.668081 -1.457043 +v -11.031996 0.668044 -1.457043 +v -11.031996 0.668044 -1.445982 +v -11.021059 0.668081 -1.445982 +v -11.031996 0.668044 -1.419930 +v -11.021059 0.668081 -1.419930 +v -11.003141 0.668019 -1.419930 +v -10.994080 0.667907 -1.419930 +v -10.994080 0.667907 -1.457043 +v -11.003141 0.668019 -1.475431 +v -10.994080 0.667907 -1.475431 +v -11.052647 0.667651 -1.445982 +v -11.052647 0.667651 -1.457043 +v -11.046480 0.667868 -1.419284 +v -11.046480 0.667868 -1.430259 +v -11.052481 0.667649 -1.400800 +v -11.046728 0.667852 -1.400807 +v -11.046782 0.667853 -1.407810 +v -11.052548 0.667650 -1.407806 +v -11.052647 0.667651 -1.432841 +v -11.046865 0.667855 -1.432841 +v -11.046865 0.667855 -1.442524 +v -11.052647 0.667651 -1.442524 +v -11.046865 0.667855 -1.460731 +v -11.052568 0.667651 -1.410141 +v -11.052636 0.667651 -1.417148 +v -10.994080 0.667908 -1.471792 +v -10.994080 0.667908 -1.460731 +v -11.031996 0.668045 -1.460731 +v -11.021059 0.668082 -1.460731 +v -10.994080 0.667908 -1.442524 +v -11.003141 0.668020 -1.442524 +v -11.020328 0.668084 -1.417615 +v -11.032723 0.668042 -1.417615 +v -11.032691 0.668040 -1.409674 +v -11.020328 0.668083 -1.409671 +v -10.994086 0.667908 -1.417148 +v -11.003149 0.668020 -1.417148 +v -11.003179 0.668018 -1.410142 +v -10.994140 0.667906 -1.410145 +v -11.035330 0.668020 -1.471792 +v -11.035330 0.668020 -1.460731 +v -11.006475 0.668045 -1.471792 +v -11.017412 0.668082 -1.471792 +v -10.985825 0.667651 -1.471792 +v -10.991606 0.667855 -1.471792 +v -10.991606 0.667855 -1.460731 +v -10.985825 0.667651 -1.460731 +v -11.006475 0.668045 -1.442524 +v -11.017412 0.668082 -1.442524 +v -11.017412 0.668082 -1.432841 +v -11.006475 0.668045 -1.432841 +v -11.035330 0.668020 -1.442524 +v -11.044392 0.667908 -1.442524 +v -11.044392 0.667908 -1.432841 +v -11.035330 0.668020 -1.432841 +v -10.985825 0.667651 -1.442524 +v -10.991669 0.667854 -1.410145 +v -10.985903 0.667651 -1.410141 +v -11.044385 0.667908 -1.417148 +v -11.044332 0.667906 -1.410145 +vn 0.1087 0.9239 0.3668 +vn 0.1087 0.9239 0.3669 +vn -0.1087 0.9239 0.3669 +vn -0.1087 0.9239 0.3668 +vn 0.0573 0.4806 0.8751 +vn 0.0574 0.4806 0.8751 +vn -0.0574 0.4806 0.8751 +vn -0.0573 0.4806 0.8751 +vn 0.0022 0.0055 1.0000 +vn 0.0022 0.0056 1.0000 +vn -0.9990 0.0201 0.0402 +vn -0.9990 0.0201 0.0403 +vn -0.9997 0.0227 -0.0000 +vn -0.0022 0.0044 -1.0000 +vn -0.0023 0.0045 -1.0000 +vn -0.0022 0.0045 -1.0000 +vn -0.3638 0.8405 0.4014 +vn -0.1847 0.4268 0.8853 +vn -0.1847 0.4267 0.8853 +vn -0.1848 0.4268 0.8853 +vn -0.1848 0.4267 0.8853 +vn -0.0664 0.1558 0.9856 +vn -0.0664 0.1557 0.9856 +vn -0.0202 0.1541 0.9878 +vn -0.0202 0.1541 0.9879 +vn 0.0202 0.1541 0.9878 +vn 0.0202 0.1541 0.9879 +vn 0.0664 0.1558 0.9856 +vn 0.0664 0.1557 0.9856 +vn 0.0663 0.1557 0.9856 +vn 0.1847 0.4267 0.8853 +vn 0.1847 0.4268 0.8853 +vn 0.1848 0.4267 0.8853 +vn 0.1848 0.4268 0.8853 +vn 0.3638 0.8405 0.4014 +vn 0.0111 0.0011 0.9999 +vn 0.0112 0.0079 0.9999 +vn 0.0113 0.0135 0.9998 +vn 0.0088 0.0136 0.9999 +vn -0.0111 0.0011 0.9999 +vn -0.0112 0.0079 0.9999 +vn -0.0113 0.0136 0.9998 +vn -0.0113 0.0135 0.9998 +vn 0.0379 -0.0000 0.9993 +vn 0.0379 0.0017 0.9993 +vn 0.0383 0.0090 0.9992 +vn 0.0383 0.0091 0.9992 +vn 0.0386 0.0148 0.9991 +vn 0.0370 0.0489 0.9981 +vn 0.0119 0.0491 0.9987 +vn 0.0011 0.0491 0.9988 +vn -0.0119 0.0491 0.9987 +vn -0.0370 0.0489 0.9981 +vn -0.0383 0.0091 0.9992 +vn -0.0386 0.0148 0.9991 +vn -0.0383 0.0090 0.9992 +vn -0.0379 0.0017 0.9993 +vn -0.0379 -0.0000 0.9993 +vn -0.0111 -0.0000 0.9999 +vn 0.0111 -0.0000 0.9999 +vn -0.7267 0.0345 -0.6861 +vn 0.2332 0.0150 0.9723 +vn 0.2331 0.0150 0.9723 +vn -0.1411 0.0029 -0.9900 +vn -0.1426 0.0058 -0.9898 +vn -0.1484 0.0311 -0.9884 +vn -0.1483 0.0311 -0.9885 +vn -0.1484 0.0312 -0.9884 +vn -0.1483 0.0312 -0.9885 +vn -0.9975 0.0012 -0.0700 +vn -0.9975 0.0050 -0.0698 +vn -0.9976 0.0012 -0.0699 +vn -0.9965 0.0466 -0.0699 +vn 0.9976 0.0279 0.0633 +vn 0.9976 0.0278 0.0633 +vn -0.7778 0.6260 -0.0569 +vn -0.7777 0.6260 -0.0569 +vn -0.0123 0.0101 0.9999 +vn -0.0084 0.0101 0.9999 +vn -0.1391 0.1093 -0.9842 +vn -0.1392 0.1094 -0.9842 +vn -0.1392 0.1093 -0.9842 +vn -0.0128 0.0056 -0.9999 +vn -0.0107 0.0142 -0.9998 +vn -0.0064 0.0027 -1.0000 +vn -0.0111 0.0011 -0.9999 +vn -0.0055 0.0004 -1.0000 +vn -0.0106 -0.0000 -0.9999 +vn -0.0050 -0.0003 -1.0000 +vn -0.0100 -0.0000 -0.9999 +vn -0.0045 -0.0000 -1.0000 +vn -0.1396 -0.0000 -0.9902 +vn -0.7217 0.0010 -0.6922 +vn -0.7217 0.0039 -0.6922 +vn -0.7216 0.0040 -0.6923 +vn -0.2771 -0.3053 0.9111 +vn -0.2771 -0.3052 0.9111 +vn 0.2771 -0.3052 0.9111 +vn 0.2771 -0.3053 0.9111 +vn -0.0668 -0.0731 0.9951 +vn -0.0669 -0.0731 0.9951 +vn 0.0669 -0.0731 0.9951 +vn 0.0668 -0.0731 0.9951 +vn -0.9516 -0.2924 0.0942 +vn -0.9517 -0.2924 0.0942 +vn -0.6542 -0.7304 0.1962 +vn -0.6541 -0.7305 0.1963 +vn -0.6541 -0.7305 0.1962 +vn 0.6541 -0.7305 0.1963 +vn 0.6542 -0.7304 0.1962 +vn 0.6541 -0.7305 0.1962 +vn 0.9516 -0.2924 0.0942 +vn 0.9517 -0.2924 0.0942 +vn 0.6597 -0.2046 0.7232 +vn 0.6596 -0.2046 0.7232 +vn 0.2024 -0.0619 0.9773 +vn 0.2025 -0.0619 0.9773 +vn 0.0674 -0.0209 0.9975 +vn 0.0675 -0.0209 0.9975 +vn 0.0207 -0.0208 0.9996 +vn 0.0207 -0.0207 0.9996 +vn 0.0208 -0.0207 0.9996 +vn -0.0207 -0.0207 0.9996 +vn -0.0080 -0.0211 0.9997 +vn -0.0208 -0.0207 0.9996 +vn -0.0675 -0.0209 0.9975 +vn -0.0674 -0.0209 0.9975 +vn -0.2024 -0.0619 0.9773 +vn -0.2025 -0.0619 0.9773 +vn -0.6596 -0.2046 0.7232 +vn -0.6597 -0.2046 0.7232 +vn 0.8592 0.0390 0.5101 +vn 0.8593 0.0390 0.5100 +vn 0.8592 0.0391 0.5101 +vn 0.8593 0.0391 0.5100 +vn 0.8485 0.1874 0.4950 +vn 0.8485 0.1874 0.4949 +vn 0.8484 0.1874 0.4950 +vn 0.3486 0.0165 0.9371 +vn 0.3486 0.0166 0.9371 +vn 0.3487 0.0165 0.9371 +vn 0.3501 0.0760 0.9336 +vn 0.9985 0.0012 0.0550 +vn 0.9985 0.0050 0.0549 +vn 0.9985 0.0012 0.0551 +vn 0.9974 0.0466 0.0544 +vn 0.9974 0.0467 0.0544 +vn 0.9747 0.2175 0.0524 +vn 0.9747 0.2175 0.0523 +vn 0.9999 0.0125 -0.0000 +vn 0.6931 0.5579 0.4565 +vn 0.6931 0.5579 0.4564 +vn 0.3107 0.2518 0.9166 +vn 0.3108 0.2518 0.9165 +vn 0.3108 0.2517 0.9166 +vn 0.1108 0.0852 0.9902 +vn 0.1107 0.0852 0.9902 +vn 0.1067 0.0264 0.9939 +vn 0.1063 0.0028 0.9943 +vn 0.1059 0.0057 0.9944 +vn 0.1064 0.0028 0.9943 +vn 0.1068 -0.0000 0.9943 +vn 0.3453 -0.0000 0.9385 +vn 0.3453 0.0014 0.9385 +vn 0.8561 0.0011 0.5168 +vn 0.8561 0.0044 0.5168 +vn -0.0000 -0.0000 -1.0000 +vn 0.0064 0.0022 -1.0000 +vn 0.0055 0.0004 -1.0000 +vn 0.0050 -0.0003 -1.0000 +vn 0.0045 -0.0000 -1.0000 +vn 0.1411 0.0029 -0.9900 +vn 0.1426 0.0058 -0.9898 +vn 0.1483 0.0312 -0.9885 +vn 0.1484 0.0312 -0.9884 +vn 0.1483 0.0311 -0.9885 +vn 0.1484 0.0311 -0.9884 +vn 0.7267 0.0345 -0.6861 +vn -0.2331 0.0150 0.9723 +vn -0.2332 0.0150 0.9723 +vn 0.0106 -0.0000 -0.9999 +vn 0.0100 -0.0000 -0.9999 +vn 0.0111 0.0011 -0.9999 +vn 0.0128 0.0056 -0.9999 +vn 0.0107 0.0142 -0.9998 +vn 0.1392 0.1094 -0.9842 +vn 0.1392 0.1093 -0.9842 +vn 0.1391 0.1093 -0.9842 +vn 0.0123 0.0101 0.9999 +vn 0.0084 0.0101 0.9999 +vn 0.7777 0.6260 -0.0569 +vn 0.7778 0.6260 -0.0569 +vn -0.9976 0.0278 0.0633 +vn -0.9976 0.0279 0.0633 +vn 0.9965 0.0466 -0.0699 +vn 0.9976 0.0012 -0.0699 +vn 0.9975 0.0050 -0.0698 +vn 0.9975 0.0012 -0.0700 +vn 0.7217 0.0010 -0.6922 +vn 0.7216 0.0040 -0.6923 +vn 0.7217 0.0039 -0.6922 +vn 0.1396 -0.0000 -0.9902 +vn -0.0263 -0.0299 -0.9992 +vn 0.0263 -0.0299 -0.9992 +vn -0.1857 -0.2052 -0.9609 +vn 0.1857 -0.2052 -0.9609 +vn -0.0067 -0.0010 -1.0000 +vn -0.0022 -0.0011 -1.0000 +vn -0.0045 -0.0022 -1.0000 +vn -0.0100 -0.0017 -0.9999 +vn -0.0001 -0.0011 -1.0000 +vn -0.0000 -0.0022 -1.0000 +vn 0.0022 -0.0011 -1.0000 +vn 0.0045 -0.0022 -1.0000 +vn 0.0067 -0.0010 -1.0000 +vn 0.0100 -0.0017 -0.9999 +vn 0.0847 -0.0262 -0.9961 +vn 0.0846 -0.0262 -0.9961 +vn 0.4982 -0.1541 -0.8533 +vn 0.4982 -0.1541 -0.8532 +vn 0.9492 -0.2916 -0.1186 +vn 0.9491 -0.2917 -0.1186 +vn 0.9491 -0.2917 -0.1187 +vn 0.6463 -0.7217 -0.2478 +vn 0.6463 -0.7217 -0.2477 +vn -0.6463 -0.7217 -0.2478 +vn -0.6463 -0.7217 -0.2477 +vn -0.9491 -0.2917 -0.1186 +vn -0.9492 -0.2916 -0.1186 +vn -0.4982 -0.1541 -0.8532 +vn -0.4982 -0.1541 -0.8533 +vn -0.0846 -0.0262 -0.9961 +vn -0.0847 -0.0262 -0.9961 +vn -0.9989 0.0467 -0.0000 +vn -0.9760 0.2178 -0.0000 +vn -1.0000 0.0009 -0.0000 +vn -1.0000 0.0050 -0.0000 +vn -0.0012 0.0055 -1.0000 +vn -0.0012 0.0056 -1.0000 +vn -0.0011 0.0055 -1.0000 +vn -0.0011 0.0056 -1.0000 +vn 0.9997 0.0253 -0.0000 +vn -0.7790 0.6270 -0.0000 +vn 0.9996 0.0278 -0.0000 +vn 0.0271 0.2161 -0.9760 +vn 0.0270 0.2161 -0.9760 +vn -0.0271 0.2161 -0.9760 +vn -0.0270 0.2161 -0.9760 +vn 0.0028 0.0101 0.9999 +vn -0.0000 0.0101 0.9999 +vn -0.0028 0.0101 0.9999 +vn 0.0046 0.0183 -0.9998 +vn -0.0000 0.0171 -0.9999 +vn -0.0046 0.0183 -0.9998 +vn -0.0827 0.1931 -0.9777 +vn -0.0828 0.1931 -0.9777 +vn -0.3917 0.9185 -0.0540 +vn -0.3917 0.9185 -0.0541 +vn -0.1167 0.9922 -0.0438 +vn 0.1167 0.9922 -0.0438 +vn 0.3917 0.9185 -0.0541 +vn 0.3917 0.9185 -0.0540 +vn 0.0828 0.1931 -0.9777 +vn 0.0827 0.1931 -0.9777 +vn -0.3487 0.0165 0.9371 +vn -0.3486 0.0166 0.9371 +vn -0.3486 0.0165 0.9371 +vn -0.3501 0.0760 0.9336 +vn -0.8593 0.0391 0.5100 +vn -0.8592 0.0391 0.5101 +vn -0.8593 0.0390 0.5100 +vn -0.8592 0.0390 0.5101 +vn -0.8484 0.1874 0.4950 +vn -0.8485 0.1874 0.4950 +vn -0.8485 0.1874 0.4949 +vn -0.1068 -0.0000 0.9943 +vn -0.1064 0.0028 0.9943 +vn -0.1063 0.0028 0.9943 +vn -0.1059 0.0057 0.9944 +vn -0.1067 0.0264 0.9939 +vn -0.1107 0.0852 0.9902 +vn -0.1108 0.0852 0.9902 +vn -0.3108 0.2518 0.9165 +vn -0.3108 0.2517 0.9166 +vn -0.3107 0.2518 0.9166 +vn -0.6931 0.5579 0.4564 +vn -0.6931 0.5579 0.4565 +vn -0.9747 0.2175 0.0524 +vn -0.9974 0.0466 0.0544 +vn -0.9974 0.0467 0.0544 +vn -0.9985 0.0012 0.0550 +vn -0.9985 0.0050 0.0549 +vn -0.9985 0.0012 0.0551 +vn -0.8561 0.0011 0.5168 +vn -0.8561 0.0044 0.5168 +vn -0.3453 -0.0000 0.9385 +vn -0.3453 0.0014 0.9385 +vn 0.9989 0.0467 -0.0000 +vn 0.9760 0.2178 -0.0000 +vn 1.0000 0.0009 -0.0000 +vn 1.0000 0.0050 -0.0000 +vn -0.4138 0.0270 -0.9100 +vn -0.4138 0.0269 -0.9100 +vn -0.4137 0.0269 -0.9100 +vn 0.0182 0.0147 -0.9997 +vn 0.0125 0.0147 -0.9998 +vn 0.0124 0.0147 -0.9998 +vn 0.0123 0.0149 -0.9998 +vn 0.0011 0.0044 1.0000 +vn 0.0011 0.0045 1.0000 +vn -0.6671 -0.7450 -0.0000 +vn 0.6671 -0.7450 -0.0000 +vn -0.9559 -0.2937 -0.0000 +vn 0.9559 -0.2937 -0.0000 +vn 0.0056 0.0045 -1.0000 +vn 0.0055 0.0044 -1.0000 +vn 0.0056 0.0044 -1.0000 +vn 0.0023 0.0045 -1.0000 +vn 0.0022 0.0044 -1.0000 +vn 0.0022 0.0045 -1.0000 +vn -0.0000 0.0045 -1.0000 +vn -0.0000 0.0044 -1.0000 +vn -1.0000 0.0075 -0.0000 +vn 0.0045 0.0147 -0.9999 +vn -0.0000 0.0147 -0.9999 +vn -0.0045 0.0147 -0.9999 +vn -0.0125 0.0147 -0.9998 +vn -0.0124 0.0147 -0.9998 +vn 0.9997 0.0227 -0.0000 +vn -0.9998 0.0202 -0.0000 +vn -0.0022 0.0056 1.0000 +vn -0.0022 0.0055 1.0000 +vn -0.0011 0.0045 1.0000 +vn -0.0011 0.0044 1.0000 +vn -0.9997 0.0253 -0.0000 +vn 0.0011 0.0034 1.0000 +vn 0.0011 0.0033 1.0000 +vn 0.9986 -0.0521 -0.0000 +vn 0.9998 -0.0176 -0.0000 +vn 0.9925 -0.1225 -0.0000 +vn 1.0000 -0.0025 -0.0000 +vn 0.9925 -0.1225 -0.0004 +vn -0.3441 -0.0179 0.9387 +vn -0.3454 -0.0123 0.9384 +vn -0.3441 -0.0179 0.9388 +vn -0.3460 -0.0041 0.9382 +vn -0.8562 -0.0438 0.5147 +vn -0.8563 -0.0438 0.5147 +vn -0.8563 -0.0439 0.5147 +vn -0.8584 -0.0156 0.5128 +vn -0.1084 -0.0127 0.9940 +vn -0.1072 -0.0092 0.9942 +vn -0.1064 -0.0040 0.9943 +vn -0.1068 -0.0011 0.9943 +vn -0.1068 -0.0012 0.9943 +vn -0.8561 -0.0022 0.5168 +vn -0.9985 -0.0025 0.0549 +vn -0.9983 -0.0176 0.0552 +vn -0.9971 -0.0521 0.0547 +vn -0.9904 -0.1223 0.0642 +vn -0.8194 -0.0989 0.5646 +vn -0.8195 -0.0989 0.5645 +vn -0.3125 -0.0385 0.9491 +vn -0.3126 -0.0386 0.9491 +vn -0.3126 -0.0385 0.9491 +vn -0.9986 -0.0521 -0.0000 +vn -0.9998 -0.0176 -0.0000 +vn -0.9925 -0.1225 -0.0000 +vn -1.0000 -0.0025 -0.0000 +vn -0.9925 -0.1225 0.0003 +vn 0.1397 -0.0117 -0.9901 +vn 0.1432 -0.0047 -0.9897 +vn 0.1432 -0.0046 -0.9897 +vn 0.1396 -0.0117 -0.9901 +vn 0.1410 -0.0012 -0.9900 +vn 0.7248 -0.0368 -0.6880 +vn 0.7247 -0.0368 -0.6880 +vn 0.7247 -0.0367 -0.6881 +vn 0.7248 -0.0367 -0.6880 +vn 0.7256 -0.0138 -0.6880 +vn 0.7236 -0.0079 -0.6902 +vn 0.7236 -0.0079 -0.6901 +vn 0.0061 -0.0001 -1.0000 +vn 0.0122 -0.0006 -0.9999 +vn 0.0054 0.0003 -1.0000 +vn 0.0111 -0.0000 -0.9999 +vn 0.0048 0.0002 -1.0000 +vn 0.9976 -0.0025 -0.0698 +vn 0.9974 -0.0176 -0.0703 +vn 0.9974 -0.0176 -0.0704 +vn 0.9962 -0.0520 -0.0702 +vn 0.9962 -0.0520 -0.0703 +vn 0.9893 -0.1221 -0.0794 +vn 0.9893 -0.1222 -0.0794 +vn 0.6773 -0.0830 -0.7310 +vn 0.6772 -0.0830 -0.7311 +vn 0.1351 -0.0165 -0.9907 +vn 0.1352 -0.0164 -0.9907 +vn -0.0061 -0.0001 -1.0000 +vn -0.0054 0.0003 -1.0000 +vn -0.0048 0.0002 -1.0000 +vn 0.8563 -0.0439 0.5147 +vn 0.8563 -0.0438 0.5147 +vn 0.8562 -0.0438 0.5147 +vn 0.8584 -0.0156 0.5128 +vn 0.3441 -0.0179 0.9388 +vn 0.3454 -0.0123 0.9384 +vn 0.3441 -0.0179 0.9387 +vn 0.3460 -0.0041 0.9382 +vn 0.9904 -0.1223 0.0642 +vn 0.9904 -0.1223 0.0643 +vn 0.9971 -0.0521 0.0547 +vn 0.9972 -0.0520 0.0546 +vn 0.9983 -0.0176 0.0552 +vn 0.9985 -0.0025 0.0549 +vn 0.8561 -0.0022 0.5168 +vn 0.1068 -0.0012 0.9943 +vn 0.1068 -0.0011 0.9943 +vn 0.1064 -0.0040 0.9943 +vn 0.1072 -0.0092 0.9942 +vn 0.1084 -0.0127 0.9940 +vn 0.3126 -0.0385 0.9491 +vn 0.3126 -0.0386 0.9491 +vn 0.3125 -0.0385 0.9491 +vn 0.8195 -0.0989 0.5645 +vn 0.8194 -0.0989 0.5646 +vn -0.7248 -0.0367 -0.6880 +vn -0.7247 -0.0367 -0.6881 +vn -0.7247 -0.0368 -0.6880 +vn -0.7248 -0.0368 -0.6880 +vn -0.7256 -0.0139 -0.6880 +vn -0.7236 -0.0079 -0.6901 +vn -0.7236 -0.0079 -0.6902 +vn -0.7256 -0.0138 -0.6880 +vn -0.1396 -0.0117 -0.9901 +vn -0.1432 -0.0046 -0.9897 +vn -0.1432 -0.0047 -0.9897 +vn -0.1397 -0.0117 -0.9901 +vn -0.1410 -0.0012 -0.9900 +vn -0.9893 -0.1222 -0.0794 +vn -0.9893 -0.1221 -0.0794 +vn -0.9962 -0.0520 -0.0702 +vn -0.9962 -0.0520 -0.0703 +vn -0.9974 -0.0176 -0.0704 +vn -0.9974 -0.0176 -0.0703 +vn -0.9976 -0.0025 -0.0698 +vn -0.0111 -0.0000 -0.9999 +vn -0.0122 -0.0006 -0.9999 +vn -0.1352 -0.0164 -0.9907 +vn -0.1351 -0.0165 -0.9907 +vn -0.6773 -0.0830 -0.7310 +vn -0.6772 -0.0830 -0.7311 +vn 0.0117 -0.0056 0.9999 +vn 0.0111 -0.0022 0.9999 +vn 0.0111 -0.0006 0.9999 +vn -0.0117 -0.0056 0.9999 +vn -0.0111 -0.0022 0.9999 +vn -0.0111 -0.0006 0.9999 +vn 0.0381 -0.0078 0.9992 +vn 0.0386 -0.0056 0.9992 +vn 0.0380 -0.0079 0.9992 +vn 0.0384 -0.0022 0.9993 +vn 0.0379 -0.0006 0.9993 +vn 0.0379 -0.0005 0.9993 +vn -0.0379 -0.0005 0.9993 +vn -0.0379 -0.0006 0.9993 +vn -0.0384 -0.0022 0.9993 +vn -0.0386 -0.0056 0.9992 +vn -0.0380 -0.0079 0.9992 +vn -0.0381 -0.0078 0.9992 +vn -0.0230 -0.0075 0.9997 +vn -0.0123 -0.0078 0.9999 +vn 0.0123 -0.0078 0.9999 +vn 0.0122 -0.0078 0.9999 +vn 0.3923 0.9198 -0.0000 +vn -0.3923 0.9198 -0.0000 +vn -0.1168 0.9932 -0.0000 +vn 0.1168 0.9932 -0.0000 +vn 0.7790 0.6270 -0.0000 +vn -0.0067 0.0044 -1.0000 +vn -0.0066 0.0044 -1.0000 +vn -0.9996 0.0278 -0.0000 +vn 0.4137 0.0269 -0.9100 +vn 0.4138 0.0270 -0.9100 +vn 0.4138 0.0269 -0.9100 +vn -0.0181 0.0147 -0.9997 +vn -0.0180 0.0147 -0.9997 +vn -0.0000 0.0045 1.0000 +vn -0.0000 0.0044 1.0000 +vn -0.9999 0.0151 -0.0000 +vn 0.9992 0.0125 -0.0375 +vn 0.9992 0.0125 -0.0376 +vn 0.0056 0.0045 1.0000 +vn 0.0055 0.0045 1.0000 +vn 0.9995 0.0227 -0.0201 +vn 0.9995 0.0226 -0.0201 +vn 0.9999 0.0151 -0.0000 +vn -0.9999 0.0126 -0.0000 +vn 0.0045 0.0033 -1.0000 +vn 0.0044 0.0033 -1.0000 +vn 0.0012 0.0055 1.0000 +vn 0.0012 0.0056 1.0000 +vn 0.0011 0.0055 1.0000 +vn 0.0011 0.0056 1.0000 +vn -0.9904 -0.1223 0.0641 +vn -0.9972 -0.0520 0.0546 +vn -0.9747 0.2175 0.0523 +vn 0.9994 0.0253 0.0228 +vn 0.9994 0.0253 0.0227 +vn 0.6542 -0.7305 0.1963 +vn -0.6542 -0.7305 0.1963 +vn -0.0000 0.0033 1.0000 +vn -0.0000 0.0034 1.0000 +vn 0.0022 0.0045 1.0000 +vn -0.9998 0.0201 -0.0000 +vn -0.0067 0.0056 -1.0000 +vn -0.0066 0.0044 1.0000 +vn -0.0067 0.0044 1.0000 +vn 0.1168 0.9927 0.0292 +vn -0.3920 0.9191 0.0405 +vn -0.3920 0.9191 0.0406 +vn 0.7781 0.6263 0.0475 +vn 0.7781 0.6263 0.0474 +vn 0.9994 0.0252 0.0227 +vn 0.0067 0.0044 1.0000 +vn -0.0022 0.0045 1.0000 +vn -0.0023 0.0045 1.0000 +vn -0.9992 0.0125 -0.0376 +vn 0.0056 0.0044 1.0000 +vn -0.0011 0.0033 -1.0000 +vn 0.0011 0.0045 -1.0000 +vn 0.0011 0.0044 -1.0000 +vn -0.0022 0.0056 -1.0000 +vn -0.0023 0.0056 -1.0000 +vn 0.9996 0.0202 -0.0202 +vn 0.9996 0.0201 -0.0201 +vn 0.9996 0.0202 -0.0201 +vn 0.9996 0.0201 -0.0202 +vn -0.0011 0.0033 1.0000 +vn -0.0000 0.0034 -1.0000 +vn -0.0000 0.0033 -1.0000 +vn 0.0011 0.0056 -1.0000 +vn 0.9987 0.0125 0.0501 +vn 0.0034 0.0033 1.0000 +vn 0.0033 0.0033 1.0000 +vn -0.9999 0.0125 -0.0000 +vn 0.0044 0.0034 -1.0000 +vn 0.0067 0.0044 -1.0000 +vn -0.0022 0.0044 1.0000 +vn 0.3920 0.9191 0.0406 +vn 0.3920 0.9191 0.0405 +vn -0.1168 0.9927 0.0292 +vn -0.7790 0.6270 -0.0004 +vn -0.7781 0.6263 0.0475 +vn -0.7781 0.6263 0.0474 +vn -0.9996 0.0202 -0.0201 +vn -0.9996 0.0201 -0.0201 +vn 0.0022 0.0044 1.0000 +vn 0.0023 0.0045 1.0000 +vn -0.0011 0.0044 -1.0000 +vn -0.0011 0.0045 -1.0000 +vn 0.0022 0.0056 -1.0000 +vn 0.0022 0.0055 -1.0000 +vn 0.9990 0.0201 0.0403 +vn 0.9990 0.0201 0.0402 +vn -0.0034 0.0022 1.0000 +vn -0.0033 0.0022 1.0000 +vn -0.9994 0.0252 0.0227 +vn -0.9994 0.0252 0.0228 +vn -0.0011 0.0056 1.0000 +vn 1.0000 0.0075 -0.0000 +vn -0.0033 0.0033 1.0000 +vn -0.0034 0.0033 1.0000 +vn 0.9998 0.0202 -0.0000 +vn 0.0011 0.0034 -1.0000 +vn -0.9987 0.0125 0.0501 +vn -0.9987 0.0125 0.0500 +vn -0.0045 0.0033 -1.0000 +vn -0.0045 0.0034 -1.0000 +vn -0.0044 0.0033 -1.0000 +vn -0.0033 0.0022 -1.0000 +vn -0.0034 0.0022 -1.0000 +vn -0.0067 0.0056 1.0000 +vn 0.9998 0.0201 -0.0000 +vn -0.0000 0.0022 -1.0000 +vn -0.0000 0.0022 1.0000 +vn -0.0012 0.0056 1.0000 +vn -0.0012 0.0055 1.0000 +vn -0.0011 0.0055 1.0000 +vn 0.0011 0.0033 -1.0000 +vn -0.9995 0.0226 -0.0201 +vn -0.9995 0.0227 -0.0201 +vn -0.9996 0.0151 0.0226 +vn -0.0055 0.0045 1.0000 +vn -0.0056 0.0045 1.0000 +vn -0.0056 0.0045 -1.0000 +vn -0.0055 0.0045 -1.0000 +vn 0.9999 0.0126 -0.0000 +vn 0.0067 0.0056 1.0000 +vn 0.0012 0.0056 -1.0000 +vn 0.0012 0.0055 -1.0000 +vn 0.0011 0.0055 -1.0000 +vn -0.9992 0.0125 -0.0375 +vn 0.0067 0.0056 -1.0000 +vn 0.0055 0.0045 -1.0000 +vt 0.899886 0.606919 +vt 0.371268 0.124910 +vt 0.655824 0.179890 +vt 0.614461 0.083159 +vt 0.390407 0.130699 +vt 0.899887 0.614644 +vt 0.722563 0.138507 +vt 0.614461 0.115343 +vt 0.645237 0.148240 +vt 0.641031 0.050713 +vt 0.897030 0.614644 +vt 0.897042 0.607212 +vt 0.899886 0.622368 +vt 0.730355 0.077151 +vt 0.206811 0.125616 +vt 0.711952 0.192173 +vt 0.641031 0.018529 +vt 0.897042 0.622075 +vt 0.895349 0.614644 +vt 0.895398 0.607866 +vt 0.895398 0.621421 +vt 0.371285 0.098033 +vt 0.437253 0.180586 +vt 0.508152 0.179916 +vt 0.324333 0.072008 +vt 0.604912 0.162338 +vt 0.297694 0.131156 +vt 0.508152 0.192044 +vt 0.371348 0.033316 +vt 0.371285 0.124910 +vt 0.492401 0.112451 +vt 0.341618 0.091870 +vt 0.592644 0.113182 +vt 0.706525 0.082807 +vt 0.297694 0.104279 +vt 0.573878 0.165452 +vt 0.314976 0.133315 +vt 0.344768 0.119609 +vt 0.526768 0.717223 +vt 0.655462 0.086281 +vt 0.344768 0.099451 +vt 0.439068 0.154104 +vt 0.464067 0.717224 +vt 0.440944 0.113182 +vt 0.730374 0.044640 +vt 0.553154 0.082766 +vt 0.554490 0.166823 +vt 0.612985 0.163283 +vt 0.600219 0.115664 +vt 0.541162 0.113182 +vt 0.706616 0.082807 +vt 0.440944 0.130699 +vt 0.899877 0.628770 +vt 0.206811 0.152350 +vt 0.554490 0.184341 +vt 0.756788 0.115622 +vt 0.389490 0.128434 +vt 0.046477 1.001923 +vt 0.233304 0.147084 +vt 0.389490 0.115297 +vt 0.046744 0.943079 +vt 0.563278 0.032225 +vt 0.451752 0.180586 +vt 0.454535 0.180591 +vt 0.493653 0.179916 +vt 0.371356 0.033316 +vt 0.614461 0.050888 +vt 0.501548 0.131237 +vt 0.534676 0.083246 +vt 0.706525 0.110476 +vt 0.449942 0.154104 +vt 0.464012 0.796750 +vt 0.475034 0.129819 +vt 0.667524 0.110036 +vt 0.385964 0.186063 +vt 0.713375 0.165341 +vt 0.941145 0.570567 +vt 0.297758 0.072008 +vt 0.667524 0.136913 +vt 0.941127 0.582128 +vt 0.684808 0.107877 +vt 0.414195 0.185911 +vt 0.440944 0.112451 +vt 0.641018 0.131613 +vt 0.309021 0.935840 +vt 0.492401 0.109089 +vt 0.641018 0.111455 +vt 0.387720 0.159801 +vt 0.445079 0.935840 +vt 0.897048 0.628237 +vt 0.895449 0.626925 +vt 0.900408 0.584593 +vt 0.894743 0.625295 +vt 0.894532 0.620963 +vt 0.900644 0.580263 +vt 0.894426 0.614644 +vt 0.900820 0.573946 +vt 0.894532 0.608324 +vt 0.900820 0.567626 +vt 0.895449 0.602362 +vt 0.900705 0.563291 +vt 0.894743 0.603992 +vt 0.897048 0.601050 +vt 0.899877 0.600517 +vt 0.371268 0.151644 +vt 0.730360 0.110036 +vt 0.631656 0.168505 +vt 0.721178 0.108324 +vt 0.895834 0.566150 +vt 0.722006 0.097400 +vt 0.898562 0.566482 +vt 0.898466 0.573913 +vt 0.895723 0.573874 +vt 0.680879 0.116843 +vt 0.721895 0.105124 +vt 0.900068 0.567158 +vt 0.900013 0.573934 +vt 0.898355 0.581344 +vt 0.895619 0.581598 +vt 0.680775 0.124567 +vt 0.899879 0.580710 +vt 0.717754 0.090863 +vt 0.731932 0.073817 +vt 0.895939 0.559750 +vt 0.722111 0.091000 +vt 0.717647 0.097297 +vt 0.731820 0.080572 +vt 0.898651 0.560320 +vt 0.894504 0.602362 +vt 0.900109 0.561653 +vt 0.899766 0.586213 +vt 0.894504 0.626925 +vt 0.898272 0.587505 +vt 0.680701 0.130968 +vt 0.895545 0.587999 +vt 0.676415 0.124548 +vt 0.690577 0.108599 +vt 0.676343 0.130983 +vt 0.690500 0.115355 +vt 0.676518 0.116782 +vt 0.717533 0.105063 +vt 0.731700 0.088726 +vt 0.690684 0.100445 +vt 0.925679 0.591039 +vt 0.710835 0.134008 +vt 0.895459 0.532056 +vt 0.926834 0.587587 +vt 0.918434 0.671783 +vt 0.929088 0.588319 +vt 0.896366 0.532421 +vt 0.938781 0.538778 +vt 0.927937 0.591757 +vt 0.938933 0.538557 +vt 0.724090 0.081526 +vt 0.713094 0.134726 +vt 0.903247 0.517393 +vt 0.902931 0.666600 +vt -0.000475 0.483217 +vt 0.068932 0.552925 +vt 0.898228 0.535197 +vt 0.938552 0.538853 +vt 0.084324 0.665519 +vt 0.920161 0.610289 +vt 0.938603 0.538710 +vt 0.880136 0.586721 +vt 0.938748 0.538490 +vt 0.881694 0.587137 +vt 0.549134 0.093498 +vt 0.723904 0.081459 +vt 0.938395 0.538788 +vt 0.919780 0.611326 +vt 0.879289 0.585670 +vt 0.704652 0.137953 +vt 0.301205 0.094788 +vt 0.686366 0.156286 +vt 0.921302 0.589581 +vt 0.706459 0.132550 +vt 0.709029 0.139411 +vt 0.686370 0.159999 +vt 0.916972 0.676143 +vt 0.922458 0.586127 +vt -0.003132 0.332274 +vt 0.901474 0.670962 +vt 0.109522 0.333083 +vt 0.161683 0.559668 +vt 0.111608 0.484022 +vt 0.920150 0.612546 +vt 0.173769 0.672050 +vt 0.878895 0.583691 +vt 0.919770 0.613298 +vt 0.882088 0.631172 +vt 0.879022 0.582759 +vt 0.879356 0.583699 +vt 0.883440 0.634970 +vt 0.880186 0.584465 +vt 0.868824 0.604555 +vt 0.886794 0.638069 +vt 0.881737 0.584797 +vt 0.549734 0.061036 +vt 0.719997 0.145906 +vt 0.870388 0.604890 +vt 0.724050 0.081075 +vt 0.627979 0.119664 +vt 0.583772 0.094872 +vt 0.722512 0.145993 +vt 0.584359 0.062244 +vt 0.724236 0.081143 +vt 0.711288 0.140127 +vt 0.686400 0.161906 +vt 0.627920 0.121877 +vt 0.922743 0.573089 +vt 0.930921 0.573090 +vt 0.930811 0.576092 +vt 0.874389 0.557039 +vt 0.875462 0.564858 +vt 0.922943 0.576077 +vt 0.938693 0.573068 +vt 0.938287 0.576056 +vt 0.875680 0.549253 +vt 0.930512 0.577843 +vt 0.876132 0.557063 +vt 0.923343 0.577790 +vt 0.877080 0.564193 +vt 0.877278 0.549963 +vt 0.874425 0.584285 +vt 0.915493 0.570747 +vt 0.922729 0.570768 +vt 0.915526 0.573067 +vt 0.874462 0.581964 +vt 0.930929 0.570768 +vt 0.938722 0.570746 +vt 0.832823 0.613570 +vt 0.944737 0.570708 +vt 0.944692 0.573028 +vt 0.832857 0.615891 +vt 0.944061 0.576003 +vt 0.879308 0.542834 +vt 0.833332 0.618868 +vt 0.880449 0.544228 +vt 0.881906 0.545960 +vt 0.880402 0.550488 +vt 0.879585 0.557112 +vt 0.880216 0.563757 +vt 0.880089 0.570015 +vt 0.881594 0.568325 +vt 0.915994 0.576041 +vt 0.874973 0.578986 +vt 0.878910 0.571377 +vt 0.946679 0.638574 +vt 0.707417 0.167167 +vt 0.881245 0.635917 +vt 0.772851 0.169824 +vt 0.946973 0.638574 +vt 0.951751 0.634811 +vt 0.883578 0.635914 +vt 0.921561 0.606009 +vt 0.946969 0.638882 +vt 0.951444 0.634892 +vt 0.898857 0.554355 +vt 0.896948 0.595083 +vt 0.946677 0.638883 +vt 0.896115 0.553569 +vt 0.722287 0.084819 +vt 0.772848 0.170133 +vt 0.951755 0.635036 +vt 0.921595 0.607795 +vt 0.899856 0.596433 +vt 0.644144 0.130707 +vt 0.614461 0.170646 +vt 0.951451 0.635109 +vt 0.897012 0.597111 +vt 0.895239 0.597111 +vt 0.898750 0.556382 +vt 0.896028 0.555666 +vt 0.722200 0.086916 +vt 0.895367 0.598921 +vt 0.900239 0.558213 +vt 0.116944 0.055817 +vt 0.686275 0.144838 +vt 0.703706 0.165283 +vt 0.881246 0.634033 +vt 0.707418 0.165283 +vt 0.703704 0.167168 +vt 0.772384 0.169824 +vt 0.116932 0.073417 +vt 0.686273 0.147162 +vt 0.923439 0.605963 +vt 0.883580 0.634030 +vt 0.923471 0.607754 +vt 0.644144 0.113182 +vt 0.667524 0.138507 +vt 0.806076 0.082791 +vt 0.640840 0.169220 +vt 0.699307 0.081567 +vt 0.508152 0.137000 +vt 0.925347 0.607712 +vt 0.561185 0.165452 +vt 0.631656 0.169220 +vt 0.711999 0.081567 +vt 0.261882 0.159622 +vt 0.927941 0.607712 +vt 0.578467 0.137000 +vt 0.711998 0.137036 +vt 0.710418 0.108554 +vt 0.753088 0.806118 +vt 0.582788 0.163832 +vt 0.700899 0.108554 +vt 0.797000 0.806321 +vt 0.565506 0.138618 +vt 0.717842 0.086758 +vt 0.732024 0.069507 +vt 0.717926 0.084651 +vt 0.772382 0.170134 +vt 0.686249 0.150198 +vt 0.732112 0.067295 +vt 0.870451 0.601195 +vt 0.720060 0.142211 +vt 0.868878 0.600999 +vt 0.887010 0.623800 +vt 0.868945 0.596709 +vt 0.887277 0.606591 +vt 0.870527 0.596736 +vt 0.720136 0.137752 +vt 0.883544 0.622223 +vt 0.883714 0.606529 +vt 0.887607 0.589383 +vt 0.869027 0.592419 +vt 0.870605 0.592278 +vt 0.720215 0.133293 +vt 0.884088 0.590839 +vt 0.722576 0.142279 +vt 0.881840 0.621134 +vt 0.878960 0.580276 +vt 0.881882 0.606497 +vt 0.878971 0.576655 +vt 0.882347 0.591868 +vt 0.879086 0.573036 +vt 0.882943 0.581845 +vt 0.879233 0.570557 +vt 0.884426 0.578096 +vt 0.879600 0.569629 +vt 0.887885 0.575116 +vt 0.869097 0.588863 +vt 0.880456 0.568892 +vt 0.870670 0.588583 +vt 0.720280 0.129599 +vt 0.688658 0.133068 +vt 0.882018 0.568614 +vt 0.722731 0.133313 +vt 0.691155 0.133068 +vt 0.650057 0.107021 +vt 0.722796 0.129599 +vt 0.722654 0.137796 +vt 0.882055 0.566275 +vt 0.688696 0.130728 +vt 0.880485 0.566636 +vt 0.880479 0.565474 +vt 0.749291 0.492561 +vt 0.834886 0.641451 +vt 0.882063 0.565073 +vt 0.727581 0.492574 +vt 0.534222 0.057027 +vt 0.688704 0.129526 +vt 0.879601 0.567657 +vt 0.919780 0.629341 +vt 0.879562 0.566620 +vt 0.822437 0.625331 +vt 0.920161 0.630378 +vt 0.880599 0.665519 +vt 0.749556 0.507007 +vt 0.835239 0.647396 +vt 0.910204 0.639676 +vt 0.883578 0.607471 +vt 0.727771 0.507020 +vt 0.881245 0.607473 +vt 0.584370 0.121145 +vt 0.534411 0.071473 +vt 0.935030 0.630718 +vt 0.895990 0.552925 +vt 0.998958 0.483217 +vt 0.910204 0.650458 +vt 0.691194 0.130716 +vt 0.650129 0.102711 +vt 0.746147 0.168301 +vt 0.879138 0.569621 +vt 0.919770 0.627370 +vt 0.791155 0.672050 +vt 0.920150 0.628122 +vt 0.886876 0.484021 +vt 0.803238 0.559668 +vt 0.888962 0.333082 +vt 1.001615 0.332274 +vt 0.907203 0.650451 +vt 0.907203 0.639672 +vt 0.883582 0.610482 +vt 0.881248 0.610483 +vt 0.584373 0.124155 +vt 0.580657 0.121145 +vt 0.499744 0.071477 +vt 0.666742 0.145282 +vt 0.563226 0.094501 +vt 0.563229 0.098214 +vt 0.580660 0.124155 +vt 0.499565 0.057031 +vt 0.691204 0.129508 +vt 0.746149 0.168141 +vt 0.666718 0.143374 +vt 0.871442 0.565086 +vt 0.872611 0.557990 +vt 0.874389 0.558021 +vt 0.930811 0.536100 +vt 0.922943 0.536101 +vt 0.873072 0.565802 +vt 0.871689 0.550858 +vt 0.873342 0.550199 +vt 0.938287 0.536081 +vt 0.930921 0.538012 +vt 0.922743 0.538013 +vt 0.938693 0.537991 +vt 0.886034 0.603157 +vt 0.866782 0.569074 +vt 0.868296 0.564551 +vt 0.886865 0.600670 +vt 0.868254 0.570811 +vt 0.869131 0.557930 +vt 0.887325 0.597029 +vt 0.868526 0.551283 +vt 0.886992 0.593375 +vt 0.867170 0.546710 +vt 0.930320 0.624700 +vt 0.886247 0.590861 +vt 0.930431 0.624578 +vt 0.868701 0.545026 +vt 0.944061 0.536045 +vt 0.833332 0.578908 +vt 0.869917 0.543668 +vt 0.944692 0.537954 +vt 0.832857 0.580816 +vt 0.832789 0.584529 +vt 0.944782 0.541667 +vt 0.938751 0.541705 +vt 0.930937 0.541725 +vt 0.922715 0.541726 +vt 0.915526 0.537993 +vt 0.874462 0.617039 +vt 0.874389 0.613326 +vt 0.915459 0.541706 +vt 0.915994 0.536082 +vt 0.869422 0.572210 +vt 0.874973 0.618946 +vt 0.686853 0.125996 +vt 0.901697 0.583027 +vt 0.940451 0.565467 +vt 0.902853 0.579573 +vt 0.941890 0.561161 +vt 0.907172 0.581017 +vt 0.691172 0.127439 +vt 0.906016 0.584471 +vt 0.937857 0.564551 +vt 0.699259 0.138507 +vt 0.475034 0.159701 +vt 0.699300 0.078015 +vt 0.324354 0.122792 +vt 0.939296 0.560246 +vt 0.684760 0.138507 +vt 0.667519 0.079359 +vt 0.454535 0.125631 +vt 0.552528 0.115664 +vt 0.695377 0.128845 +vt 0.910221 0.585876 +vt 0.943291 0.556970 +vt 0.911377 0.582422 +vt 0.944692 0.552778 +vt 0.915581 0.583828 +vt 0.914678 0.682999 +vt 0.699582 0.130251 +vt 0.914426 0.587282 +vt 0.941093 0.589503 +vt 0.667526 0.110036 +vt 0.940698 0.556054 +vt 0.552528 0.142602 +vt 0.942099 0.551863 +vt 0.947179 0.589503 +vt 0.916729 0.683691 +vt 0.837751 0.654217 +vt 0.705502 0.141387 +vt 0.676947 0.128691 +vt 0.893597 0.580319 +vt 0.678753 0.123288 +vt 0.682534 0.124552 +vt 0.897378 0.581583 +vt 0.705502 0.165680 +vt 0.680728 0.129955 +vt 0.937751 0.573541 +vt 0.894753 0.576865 +vt 0.939011 0.569772 +vt 0.898534 0.578129 +vt 0.653711 0.192293 +vt 0.935158 0.572625 +vt 0.324354 0.065547 +vt 0.711992 0.050888 +vt 0.244600 0.131156 +vt 0.936418 0.568856 +vt 0.684801 0.078015 +vt 0.667534 0.018529 +vt 0.699300 0.050888 +vt 0.279164 0.159620 +vt 0.271186 0.007291 +vt 0.561307 0.050888 +vt 0.587895 0.050888 +vt 0.244600 0.186286 +vt 0.385964 0.186213 +vt 0.760875 0.143290 +vt 0.297772 0.039649 +vt 0.235809 0.179028 +vt 0.271186 0.039649 +vt 0.400080 0.186063 +vt 0.587895 0.018529 +vt 0.699259 0.165341 +vt 0.614280 0.137000 +vt 0.344768 0.151644 +vt 0.614292 0.083246 +vt 0.644144 0.085514 +vt 0.244600 0.035067 +vt -0.001609 0.805037 +vt 0.346577 0.178485 +vt 0.244600 0.010798 +vt 0.186304 0.805037 +vt 0.710460 0.139850 +vt 0.680217 0.193373 +vt 0.233377 0.098739 +vt 0.587888 0.050888 +vt 0.561315 0.050888 +vt 0.538125 0.192121 +vt 0.604308 0.166823 +vt 0.534734 0.018529 +vt 0.555407 0.165455 +vt 0.667524 0.193373 +vt 0.655462 0.138116 +vt 0.324333 0.039649 +vt 0.809947 0.143359 +vt 0.297772 0.007291 +vt 0.501613 0.039643 +vt 0.542714 0.165456 +vt 0.371348 0.065674 +vt 0.669101 0.166954 +vt 0.570280 1.001414 +vt 0.475034 0.043151 +vt 0.678621 0.166954 +vt 0.534734 0.047380 +vt 0.570266 0.944607 +vt 0.947213 0.582128 +vt 0.836220 0.646842 +vt -0.003132 0.213635 +vt 0.900327 0.674390 +vt 0.863306 0.654217 +vt 0.109522 0.214444 +vt 0.861775 0.646842 +vt 0.919020 0.584977 +vt 0.915825 0.679571 +vt 0.703020 0.131400 +vt 0.917864 0.588431 +vt 0.301205 0.072696 +vt 0.303159 0.105899 +vt 0.701214 0.136804 +vt 0.303159 0.056791 +vt 0.287534 0.084135 +vt 0.693571 0.134249 +vt 0.303159 0.083807 +vt 0.697776 0.135654 +vt 0.351987 0.062571 +vt 0.705502 0.193430 +vt 0.685047 0.131399 +vt 0.351987 0.090321 +vt 0.287534 0.057118 +vt 0.689366 0.132843 +vt 0.878859 0.572770 +vt 0.919765 0.624216 +vt 0.919763 0.620334 +vt 0.878716 0.576651 +vt 0.920143 0.620334 +vt 0.482462 0.676815 +vt 0.651226 0.675622 +vt 0.920144 0.624591 +vt 0.878725 0.580534 +vt 0.919765 0.616451 +vt 0.920144 0.616076 +vt 0.313698 0.675622 +vt 0.482461 0.564607 +vt 0.499242 0.484611 +vt 0.711221 0.484463 +vt 0.657879 0.563372 +vt 0.307042 0.563372 +vt 0.287263 0.484463 +vt 0.286114 0.333526 +vt 0.499242 0.333674 +vt 0.712370 0.333526 +vt 0.879722 0.570311 +vt 0.680677 0.135053 +vt 0.895520 0.592084 +vt 0.664878 0.113279 +vt 0.880064 0.566655 +vt 0.938979 0.627278 +vt 0.898261 0.591444 +vt 0.882595 0.567432 +vt 0.939384 0.627117 +vt 0.881943 0.572558 +vt 0.932422 0.585965 +vt 0.882330 0.571144 +vt 0.880775 0.575990 +vt 0.665931 0.118959 +vt 0.667486 0.114113 +vt 0.938704 0.627164 +vt 0.899801 0.589656 +vt 0.895367 0.630367 +vt 0.939072 0.627002 +vt 0.929940 0.585047 +vt 0.897012 0.632176 +vt 0.885497 0.573767 +vt 0.934534 0.582724 +vt 0.669496 0.120188 +vt 0.884339 0.577219 +vt 0.899856 0.632854 +vt 0.931955 0.581808 +vt 0.760875 0.082807 +vt 0.658298 0.164038 +vt 0.676316 0.135088 +vt 0.663119 0.118689 +vt 0.690472 0.119665 +vt 0.469034 0.180591 +vt 0.561307 0.083246 +vt 0.275998 0.186190 +vt 0.271115 0.104279 +vt 0.475034 0.186184 +vt 0.587771 0.110123 +vt 0.297772 0.007291 +vt 0.706525 0.138144 +vt 0.456350 0.154102 +vt 0.187388 0.801758 +vt 0.508152 0.084664 +vt 0.467224 0.154102 +vt 0.133860 0.801708 +vt 0.561250 0.108705 +vt 0.888234 0.574684 +vt 0.935513 0.580017 +vt 0.932926 0.579101 +vt 0.667482 0.164038 +vt 0.595749 0.165455 +vt 0.314976 0.158289 +vt 0.604308 0.082766 +vt 0.641018 0.192293 +vt 0.933898 0.576394 +vt 0.324354 0.007291 +vt 0.324160 0.158289 +vt 0.641018 0.165375 +vt 0.936491 0.577310 +vt 0.890972 0.575601 +vt 0.672234 0.121106 +vt 0.887078 0.578137 +vt 0.889816 0.579055 +vt 0.674972 0.122024 +vt 0.686368 0.127240 +vt 0.670428 0.126509 +vt 0.686366 0.129565 +vt 0.705502 0.117094 +vt 0.673166 0.127427 +vt 0.664123 0.124360 +vt 0.665738 0.119531 +vt 0.690498 0.121879 +vt 0.686400 0.121879 +vt 0.686370 0.124916 +vt 0.667689 0.125591 +vt 0.584373 0.131780 +vt 0.881248 0.618108 +vt 0.939313 0.605918 +vt 0.883582 0.618107 +vt 0.936429 0.605918 +vt 0.883582 0.621000 +vt 0.584373 0.134673 +vt 0.881248 0.621001 +vt 0.941093 0.523726 +vt 0.939343 0.607712 +vt 0.592644 0.085514 +vt 0.542714 0.137000 +vt 0.936459 0.607712 +vt 0.525433 0.165457 +vt 0.592644 0.112451 +vt 0.684806 0.137036 +vt 0.667524 0.110036 +vt 0.584373 0.137645 +vt 0.881248 0.623973 +vt 0.933466 0.605918 +vt 0.883582 0.623972 +vt 0.883582 0.626943 +vt 0.930504 0.605918 +vt 0.584373 0.140617 +vt 0.881248 0.626945 +vt 0.324354 0.094170 +vt 0.933496 0.607712 +vt 0.324354 0.178214 +vt 0.699305 0.137036 +vt 0.437253 0.154104 +vt 0.930534 0.607712 +vt 0.324354 0.094170 +vt 0.338853 0.178214 +vt 0.297694 0.131156 +vt 0.699305 0.137036 +vt 0.563229 0.101132 +vt 0.580660 0.126521 +vt 0.881248 0.612849 +vt 0.584373 0.126521 +vt 0.584373 0.128887 +vt 0.881248 0.615215 +vt 0.563229 0.104050 +vt 0.580660 0.128887 +vt 0.904844 0.639672 +vt 0.883582 0.612848 +vt 0.902485 0.639672 +vt 0.942197 0.605918 +vt 0.883582 0.615213 +vt 0.863306 0.588441 +vt 1.001615 0.213635 +vt 0.904844 0.650451 +vt 0.902483 0.638378 +vt 0.837751 0.588441 +vt 0.947179 0.523726 +vt 0.942227 0.607712 +vt 0.861775 0.595816 +vt 0.888962 0.214443 +vt 0.836220 0.595816 +vt 0.947213 0.531101 +vt 0.495456 0.153347 +vt 0.451635 0.860853 +vt 0.587888 0.055470 +vt 0.506330 0.153347 +vt 0.451663 0.797868 +vt 0.297758 0.067426 +vt 0.640962 0.115343 +vt 0.587888 0.083246 +vt 0.561315 0.018529 +vt 0.653711 0.192215 +vt 0.644144 0.136672 +vt 0.591160 0.192284 +vt 0.810207 0.167580 +vt 0.437253 0.098753 +vt 0.640962 0.142220 +vt 0.711952 0.192305 +vt 0.760875 0.167512 +vt 0.341556 0.062822 +vt 0.639846 0.196756 +vt 0.261882 0.133315 +vt 0.437253 0.125631 +vt 0.699314 0.045507 +vt 0.614461 0.136920 +vt 0.241599 1.001492 +vt 0.710368 0.165341 +vt 0.614461 0.116762 +vt 0.290418 1.001492 +vt 0.594027 0.133660 +vt 0.534734 0.078664 +vt 0.938870 0.856837 +vt 0.274223 0.159622 +vt 0.534734 0.054395 +vt 0.246368 0.159622 +vt 0.692641 0.856837 +vt 0.883582 0.629545 +vt 0.927911 0.605918 +vt 0.925317 0.605918 +vt 0.883582 0.632147 +vt 0.584373 0.143218 +vt 0.881248 0.629546 +vt 0.584373 0.145820 +vt 0.881248 0.632148 +vt 0.707420 0.163398 +vt 0.563229 0.121726 +vt 0.580660 0.143219 +vt 0.580660 0.145820 +vt 0.563229 0.124935 +vt 0.686276 0.142513 +vt 0.703707 0.163398 +vt 0.563229 0.114852 +vt 0.580660 0.137645 +vt 0.563229 0.118517 +vt 0.580660 0.140617 +vt 0.563229 0.107618 +vt 0.580660 0.131780 +vt 0.563229 0.111187 +vt 0.580660 0.134674 +vt 0.922715 0.551130 +vt 0.930937 0.551129 +vt 0.930937 0.554698 +vt 0.922715 0.554699 +vt 0.938751 0.551109 +vt 0.938751 0.554677 +vt 0.922715 0.558364 +vt 0.930937 0.558363 +vt 0.930937 0.562028 +vt 0.922715 0.562029 +vt 0.938751 0.558343 +vt 0.938751 0.562008 +vt 0.874389 0.610408 +vt 0.915459 0.544624 +vt 0.922715 0.544644 +vt 0.922715 0.547562 +vt 0.915459 0.547542 +vt 0.874389 0.607490 +vt 0.930937 0.544643 +vt 0.930937 0.547561 +vt 0.938751 0.544623 +vt 0.938751 0.547540 +vt 0.832789 0.587447 +vt 0.944782 0.544585 +vt 0.832789 0.590365 +vt 0.944782 0.547503 +vt 0.832789 0.593933 +vt 0.944782 0.551071 +vt 0.832789 0.597502 +vt 0.944782 0.554640 +vt 0.832789 0.601167 +vt 0.944782 0.558305 +vt 0.832789 0.604832 +vt 0.944782 0.561970 +vt 0.938751 0.565217 +vt 0.832789 0.608041 +vt 0.944782 0.565179 +vt 0.832789 0.611250 +vt 0.944782 0.568388 +vt 0.938751 0.568425 +vt 0.930937 0.565237 +vt 0.930937 0.568445 +vt 0.922715 0.565238 +vt 0.922715 0.568446 +vt 0.874389 0.589814 +vt 0.915459 0.565218 +vt 0.874389 0.586605 +vt 0.915459 0.568427 +vt 0.874389 0.596688 +vt 0.915459 0.558344 +vt 0.874389 0.593023 +vt 0.915459 0.562009 +vt 0.874389 0.603922 +vt 0.915459 0.551110 +vt 0.874389 0.600353 +vt 0.915459 0.554679 +vt 0.341618 0.096471 +vt 0.592644 0.085514 +vt 0.501548 0.104360 +vt 0.706525 0.110476 +vt 0.604386 0.110447 +vt 0.534676 0.110123 +vt 0.454535 0.151945 +vt 0.390862 0.085514 +vt 0.341618 0.122792 +vt 0.524273 0.791873 +vt 0.542518 0.088624 +vt 0.328238 0.121009 +vt 0.556474 0.791873 +vt 0.325980 0.151265 +vt 0.508152 0.137000 +vt 0.941127 0.531101 +vt 0.400080 0.159801 +vt 0.559996 0.139158 +vt 0.308162 0.186378 +vt 0.508152 0.110123 +vt 0.941145 0.542662 +vt 0.614466 0.018529 +vt 0.261882 0.186190 +vt 0.489150 0.186184 +vt 0.534665 0.111542 +vt 0.461725 0.942002 +vt 0.487388 0.159701 +vt 0.534665 0.131700 +vt 0.688234 0.942002 +vt 0.309918 0.159620 +vt 0.233377 0.066381 +vt 0.641011 0.050888 +vt 0.233327 0.098739 +vt 0.697453 0.165641 +vt 0.655988 0.162366 +vt 0.604912 0.138116 +vt 0.534734 0.050888 +vt 0.520845 0.192044 +vt 0.206811 0.095231 +vt 0.363738 1.004481 +vt 0.536542 0.165457 +vt 0.206811 0.070962 +vt 0.426171 1.004481 +vt 0.695876 0.192209 +vt 0.641970 0.165375 +vt 0.707054 0.866536 +vt 0.326934 0.034103 +vt 0.652759 0.165375 +vt 0.754036 0.866319 +vt 0.326934 0.038735 +vt 0.860933 0.607376 +vt 0.712370 0.214888 +vt 0.835379 0.607376 +vt 0.947231 0.542662 +vt 0.860653 0.621329 +vt 0.499242 0.215036 +vt 0.835098 0.621329 +vt 0.947238 0.556615 +vt 0.860933 0.635282 +vt 0.286114 0.214888 +vt 0.835378 0.635282 +vt 0.947231 0.570567 +vt 0.398307 0.159801 +vt 0.444963 0.864212 +vt 0.587771 0.135581 +vt 0.684815 0.018529 +vt 0.308162 0.159620 +vt 0.684808 0.108545 +vt 0.641018 0.083159 +vt 0.492316 0.157543 +vt 0.341636 0.124951 +vt 0.279164 0.159620 +vt 0.534727 0.110123 +vt 0.699314 0.018529 +vt 0.534676 0.137000 +vt 0.293663 0.159620 +vt 0.684815 0.020688 +vt 0.627153 0.196756 +vt 0.296446 0.157462 +vt 0.324251 0.131156 +vt 0.712007 0.045507 +vt 0.697499 0.045494 +vt 0.561185 0.131700 +vt 0.001830 0.801395 +vt 0.686625 0.045494 +vt 0.001925 0.860310 +vt 0.667526 0.088459 +vt 0.534676 0.110123 +vt 0.666403 0.192215 +vt 0.542518 0.085514 +vt 0.206811 0.179184 +vt 0.297772 0.039649 +vt 0.501613 0.072002 +vt 0.324251 0.104279 +vt 0.810207 0.143359 +vt 0.561185 0.111542 +vt 0.110779 0.801395 +vt 0.492401 0.088988 +vt 0.561315 0.047380 +vt 0.384190 0.159801 +vt 0.685768 0.796037 +vt 0.561315 0.023111 +vt 0.701027 0.138507 +vt 0.471216 0.796037 +vt 0.258716 0.186286 +vt 0.941151 0.556615 +vt 0.371848 0.186213 +vt 0.614466 0.050888 +vt 0.297758 0.039649 +vt 0.256955 0.159622 +vt 0.692592 0.943376 +vt 0.587895 0.047380 +vt 0.344768 0.146378 +vt 0.984250 0.933886 +vt 0.719956 0.081567 +vt 0.344768 0.126327 +vt 0.833982 0.933858 +vt 0.440944 0.133042 +vt 0.561315 0.078664 +vt 0.296578 0.998874 +vt 0.589576 0.165450 +vt 0.561315 0.054395 +vt 0.362954 0.998874 +vt 0.553905 0.163813 +vt 0.711614 0.138507 +vt 0.471258 0.856504 +vt 0.271180 0.067426 +vt 0.838869 0.593941 +vt 0.541994 0.107613 +vt 0.549325 0.107617 +vt 0.549325 0.111186 +vt 0.838869 0.597510 +vt 0.541994 0.111182 +vt 0.556779 0.107618 +vt 0.556779 0.111187 +vt 0.838869 0.601175 +vt 0.541994 0.114847 +vt 0.549325 0.114851 +vt 0.549325 0.118516 +vt 0.838869 0.604841 +vt 0.541994 0.118512 +vt 0.556779 0.114852 +vt 0.556779 0.118518 +vt 0.541994 0.101127 +vt 0.838869 0.587455 +vt 0.838869 0.590373 +vt 0.541994 0.104045 +vt 0.549325 0.101131 +vt 0.549325 0.104049 +vt 0.556779 0.101132 +vt 0.556779 0.104050 +vt 0.556779 0.121726 +vt 0.556779 0.124935 +vt 0.679826 0.142513 +vt 0.549325 0.121725 +vt 0.549325 0.124934 +vt 0.672372 0.142512 +vt 0.838869 0.608049 +vt 0.541994 0.121721 +vt 0.541994 0.124930 +vt 0.665041 0.142508 +vt 0.838869 0.611258 +vt 0.670326 0.116669 +vt 0.885169 0.573700 +vt 0.676915 0.118662 +vt 0.676742 0.120789 +vt 0.672665 0.121897 +vt 0.669723 0.118561 +vt 0.665694 0.121931 +vt 0.880537 0.578963 +vt 0.884567 0.575592 +vt 0.684066 0.119474 +vt 0.684067 0.121677 +vt 0.679972 0.121882 +vt 0.672543 0.124919 +vt 0.880229 0.581957 +vt 0.665386 0.124926 +vt 0.679931 0.124916 +vt 0.670785 0.113061 +vt 0.885629 0.570093 +vt 0.677061 0.114528 +vt 0.684109 0.115185 +vt 0.679928 0.127241 +vt 0.656736 0.117097 +vt 0.679925 0.129565 +vt 0.672534 0.127243 +vt 0.672526 0.129566 +vt 0.880207 0.584279 +vt 0.665364 0.127247 +vt 0.665342 0.129569 +vt 0.880185 0.586600 +vt 0.880185 0.596683 +vt 0.665342 0.139652 +vt 0.672526 0.139649 +vt 0.672526 0.143315 +vt 0.880185 0.600349 +vt 0.665342 0.143317 +vt 0.303221 0.062573 +vt 0.656736 0.193433 +vt 0.679925 0.139648 +vt 0.303221 0.090324 +vt 0.238768 0.057121 +vt 0.679925 0.143314 +vt 0.880185 0.603917 +vt 0.665342 0.146886 +vt 0.672526 0.146883 +vt 0.672526 0.150452 +vt 0.880185 0.607486 +vt 0.665342 0.150454 +vt 0.254393 0.056794 +vt 0.238768 0.084137 +vt 0.679925 0.146882 +vt 0.679925 0.150451 +vt 0.254393 0.083810 +vt 0.665342 0.132778 +vt 0.880185 0.589809 +vt 0.880185 0.593018 +vt 0.665342 0.135987 +vt 0.672526 0.132775 +vt 0.672526 0.135984 +vt 0.656736 0.141389 +vt 0.679925 0.132774 +vt 0.656736 0.165682 +vt 0.679925 0.135983 +vt 0.252439 0.072699 +vt 0.679925 0.153369 +vt 0.254393 0.105902 +vt 0.252439 0.094791 +vt 0.679925 0.156287 +vt 0.672526 0.153370 +vt 0.672526 0.156288 +vt 0.880185 0.610404 +vt 0.665342 0.153372 +vt 0.880185 0.613322 +vt 0.665342 0.156290 +vt 0.930063 0.624309 +vt 0.670272 0.105776 +vt 0.863631 0.541323 +vt 0.663685 0.103761 +vt 0.663901 0.101635 +vt 0.652921 0.143373 +vt 0.670914 0.103887 +vt 0.645809 0.143369 +vt 0.839168 0.578916 +vt 0.864273 0.539434 +vt 0.656535 0.102925 +vt 0.746609 0.168316 +vt 0.656578 0.100722 +vt 0.746612 0.168158 +vt 0.660281 0.143374 +vt 0.652850 0.145281 +vt 0.549335 0.094500 +vt 0.645547 0.145277 +vt 0.542032 0.094496 +vt 0.838906 0.580824 +vt 0.660293 0.145282 +vt 0.556777 0.094501 +vt 0.930027 0.624571 +vt 0.669775 0.109382 +vt 0.733637 0.130897 +vt 0.884027 0.589881 +vt 0.663497 0.107894 +vt 0.730185 0.130079 +vt 0.656449 0.107212 +vt 0.726310 0.129704 +vt 0.556779 0.098214 +vt 0.549325 0.098213 +vt 0.541994 0.098209 +vt 0.838869 0.584537 +vt 0.733664 0.141901 +vt 0.884055 0.600885 +vt 0.730033 0.142216 +vt 0.730166 0.137927 +vt 0.733923 0.137993 +vt 0.884314 0.596977 +vt 0.726099 0.142316 +vt 0.726183 0.137858 +vt 0.730182 0.133636 +vt 0.733800 0.134077 +vt 0.884191 0.593062 +vt 0.726253 0.133399 +vt 0.883782 0.604058 +vt 0.733391 0.145074 +vt 0.712296 0.111730 +vt 0.862687 0.570714 +vt 0.729913 0.145771 +vt 0.705971 0.112998 +vt 0.726027 0.146011 +vt 0.632771 0.062484 +vt 0.698904 0.113433 +vt 0.665078 0.147151 +vt 0.838906 0.615901 +vt 0.672382 0.147159 +vt 0.672452 0.150180 +vt 0.718331 0.067999 +vt 0.665340 0.150145 +vt 0.711253 0.070029 +vt 0.885081 0.538779 +vt 0.839168 0.618895 +vt 0.068109 0.073416 +vt 0.679824 0.147162 +vt 0.679812 0.150196 +vt 0.725677 0.067316 +vt 0.718444 0.070130 +vt 0.711802 0.071937 +vt 0.885630 0.540687 +vt 0.725615 0.069519 +vt 0.665060 0.144830 +vt 0.838888 0.613580 +vt 0.672377 0.144836 +vt 0.068115 0.055817 +vt 0.679825 0.144838 +vt 0.725538 0.073807 +vt 0.718475 0.074266 +vt 0.885989 0.544306 +vt 0.712161 0.075556 +vt 0.665386 0.160003 +vt 0.880229 0.617034 +vt 0.672543 0.160001 +vt 0.672665 0.161908 +vt 0.641705 0.121220 +vt 0.665694 0.161910 +vt 0.648791 0.119214 +vt 0.863635 0.576245 +vt 0.880537 0.618942 +vt 0.679931 0.159999 +vt 0.679972 0.161907 +vt 0.634355 0.121877 +vt 0.641563 0.119088 +vt 0.706016 0.117135 +vt 0.648215 0.117303 +vt 0.712668 0.115350 +vt 0.863059 0.574334 +vt 0.634388 0.119674 +vt 0.632299 0.094948 +vt 0.698841 0.117721 +vt 0.711668 0.081329 +vt 0.885496 0.550079 +vt 0.718261 0.080734 +vt 0.718041 0.088534 +vt 0.677025 0.100253 +vt 0.711216 0.088439 +vt 0.670201 0.100157 +vt 0.885044 0.557189 +vt 0.725413 0.080526 +vt 0.725281 0.088636 +vt 0.684265 0.100355 +vt 0.677028 0.108057 +vt 0.670454 0.107277 +vt 0.885298 0.564308 +vt 0.684171 0.108465 +vt 0.671846 0.083186 +vt 0.167878 0.943740 +vt 0.604308 0.139237 +vt 0.684808 0.081567 +vt 0.287854 0.943740 +vt 0.415954 0.159801 +vt 0.534734 0.023111 +vt 0.655300 0.165375 +vt 0.487678 0.944607 +vt 0.492401 0.136672 +vt 0.279164 0.157463 +vt 0.641011 0.077765 +vt 0.233327 0.125616 +vt 0.595749 0.139158 +vt 0.614461 0.170646 +vt 0.595749 0.192213 +vt 0.561185 0.165452 +vt 0.442319 0.133642 +vt 0.279164 0.131156 +vt 0.129476 0.735323 +vt 0.442319 0.115476 +vt 0.129283 0.776952 +vt 0.314976 0.159620 +vt 0.721195 0.044640 +vt 0.667534 0.018529 +vt 0.699259 0.192305 +vt 0.341556 0.010016 +vt 0.760875 0.143290 +vt 0.658298 0.163202 +vt 0.541162 0.130699 +vt 0.757770 0.082791 +vt 0.722297 0.018529 +vt 0.264582 0.801994 +vt 0.658298 0.136913 +vt 0.729182 0.018529 +vt 0.304655 0.802489 +vt 0.550034 0.115664 +vt 0.266202 0.132775 +vt 0.185576 0.735323 +vt 0.710405 0.110036 +vt 0.730319 0.191617 +vt 0.604308 0.082766 +vt 0.721171 0.077151 +vt 0.721135 0.192173 +vt 0.271180 0.072008 +vt 0.297758 0.104279 +vt 0.711998 0.136784 +vt 0.655462 0.082807 +vt 0.721135 0.191617 +vt 0.667534 0.045406 +vt 0.644144 0.112451 +vt 0.508152 0.083246 +vt 0.578467 0.192284 +vt 0.475034 0.072002 +vt 0.721181 0.136784 +vt 0.809060 0.082791 +vt 0.722215 0.165341 +vt 0.103658 0.998282 +vt 0.806379 0.032225 +vt 0.729103 0.165341 +vt 0.103804 0.943323 +vt 0.658182 0.032225 +vt 0.306355 0.185724 +vt 0.084796 0.939068 +vt 0.492316 0.131237 +vt 0.295481 0.185724 +vt 0.155115 0.938742 +vt 0.684815 0.046995 +vt 0.697446 0.165641 +vt 0.746833 0.745262 +vt 0.328675 0.149646 +vt 0.686571 0.165641 +vt 0.671839 0.052507 +vt 0.747084 0.799592 +vt 0.525433 0.139173 +vt 0.578467 0.163294 +vt 0.627153 0.170646 +vt 0.587760 0.137000 +vt 0.608442 0.192213 +vt 0.711992 0.077652 +vt 0.809060 0.032225 +vt 0.721178 0.081567 +vt 0.525433 0.165462 +vt 0.367180 0.792692 +vt 0.722255 0.107811 +vt 0.512472 0.163833 +vt 0.409873 0.792722 +vt 0.632750 0.142220 +vt 0.664820 0.165375 +vt 0.487692 1.001414 +vt 0.475034 0.067419 +vt 0.721195 0.045206 +vt 0.371336 0.065674 +vt 0.525433 0.192121 +vt 0.508152 0.050888 +vt 0.604308 0.142602 +vt 0.475034 0.104360 +vt 0.368455 0.175913 +vt 0.463817 0.098753 +vt 0.712007 0.045206 +vt 0.244600 0.104279 +vt 0.713375 0.138507 +vt 0.641011 0.083159 +vt 0.645237 0.130707 +vt 0.271180 0.104279 +vt 0.297758 0.072008 +vt 0.359267 0.175913 +vt 0.713232 0.018529 +vt 0.271171 0.100777 +vt 0.174663 0.938844 +vt 0.720122 0.018529 +vt 0.174658 0.998772 +vt 0.437253 0.095251 +vt 0.371356 0.000958 +vt 0.655462 0.110447 +vt 0.614461 0.083246 +vt 0.809947 0.115690 +vt 0.244600 0.072008 +vt 0.760875 0.115622 +vt 0.501622 0.039643 +vt 0.221310 0.179028 +vt 0.344768 0.028734 +vt 0.801872 0.733190 +vt 0.655798 0.113952 +vt 0.344768 0.004465 +vt 0.664005 0.733190 +vt 0.223125 0.152350 +vt 0.667519 0.052307 +vt 0.699158 1.005132 +vt 0.706525 0.159343 +vt 0.667519 0.072464 +vt 0.699158 0.945679 +vt 0.597328 0.165455 +vt 0.373603 0.159801 +vt 0.685809 0.856504 +vt 0.271180 0.043157 +vt 0.655462 0.162337 +vt 0.244600 0.072008 +vt 0.655824 0.162366 +vt 0.641011 0.050888 +vt 0.390407 0.148224 +vt 0.604308 0.082779 +vt 0.592644 0.148224 +vt 0.757770 0.082807 +vt 0.655462 0.179862 +vt 0.371336 0.098033 +vt 0.684760 0.165641 +vt 0.587760 0.110123 +vt 0.655988 0.138144 +vt 0.860350 0.032225 +vt 0.592644 0.130699 +vt 0.463817 0.066395 +vt 0.604735 0.177833 +vt 0.231822 0.998745 +vt 0.437253 0.070982 +vt 0.604735 0.164689 +vt 0.271171 0.076573 +vt 0.231674 0.938844 +vt 0.206811 0.120315 +vt 0.828586 0.940322 +vt 0.562780 0.192217 +vt 0.206811 0.100158 +vt 0.754766 0.940322 +vt 0.655462 0.141149 +vt 0.699307 0.108545 +vt 0.684801 0.077200 +vt 0.471817 0.127789 +vt 0.428311 0.185911 +vt 0.440944 0.085514 +vt 0.293663 0.159620 +vt 0.614292 0.110123 +vt 0.686622 0.081567 +vt 0.207916 0.715017 +vt 0.561250 0.104822 +vt 0.697497 0.081567 +vt 0.208055 0.807249 +vt 0.587771 0.104822 +vt 0.684801 0.050888 +vt 0.811179 0.799592 +vt 0.291856 0.185731 +vt 0.167420 0.859166 +vt 0.458855 0.152483 +vt 0.604308 0.119034 +vt 0.287396 0.859166 +vt 0.471817 0.154102 +vt 0.426541 0.159801 +vt 0.651057 0.785208 +vt 0.706525 0.164396 +vt 0.614461 0.055464 +vt 0.574515 0.785208 +vt 0.714447 0.165170 +vt 0.614461 0.079667 +vt 0.574522 0.738744 +vt 0.721337 0.165170 +vt 0.641018 0.111851 +vt 0.650857 0.738765 +vt 0.706525 0.177540 +vt 0.641018 0.087713 +vt -0.002560 0.943079 +vt 0.601643 0.032225 +vt 0.722250 0.050888 +vt -0.002696 1.001950 +vt 0.729138 0.050888 +vt 0.233304 0.127034 +vt 0.292478 0.935540 +vt 0.695641 0.115268 +vt 0.671833 0.165326 +vt 0.221750 0.935508 +vt 0.722259 0.136268 +vt 0.684760 0.166954 +vt 0.221290 0.871782 +vt 0.729143 0.136268 +vt 0.631656 0.142220 +vt 0.291838 0.871782 +vt 0.695641 0.128412 +vt 0.618760 0.143826 +vt 0.150220 0.871356 +vt 0.644144 0.088870 +vt 0.547035 0.163837 +vt 0.150220 0.931285 +vt 0.401843 0.186032 +vt 0.559996 0.165455 +vt 0.100763 0.931056 +vt 0.542714 0.137000 +vt 0.412429 0.186032 +vt 0.100763 0.871127 +vt 0.529753 0.138619 +vt 0.644144 0.109072 +vt 0.524399 0.719919 +vt 0.341618 0.065547 +vt 0.542518 0.110067 +vt 0.556600 0.719919 +vt 0.328238 0.067329 +vt 0.337216 0.151265 +vt 0.753088 0.746942 +vt 0.595749 0.165450 +vt 0.616046 0.196876 +vt 0.797000 0.747145 +vt 0.578467 0.137000 +vt 0.625565 0.196876 +vt 0.938822 0.943376 +vt 0.587895 0.023111 +vt 0.263637 0.159622 +vt 0.311061 0.860853 +vt 0.604579 0.113899 +vt 0.587888 0.079738 +vt 0.311089 0.797868 +vt 0.604579 0.134651 +vt 0.297758 0.043157 +vt 0.308905 0.864212 +vt 0.492401 0.088886 +vt 0.587771 0.115423 +vt 0.110875 0.860310 +vt 0.492401 0.109739 +vt 0.667526 0.108617 +vt 0.241562 0.940958 +vt 0.641031 0.023829 +vt 0.700849 0.165341 +vt 0.290381 0.940958 +vt 0.641031 0.043987 +vt 0.594027 0.115494 +vt 0.363749 0.939264 +vt 0.344768 0.069182 +vt 0.527022 0.165457 +vt 0.426182 0.939264 +vt 0.344768 0.093451 +vt 0.686357 0.192209 +vt 0.542714 0.163299 +vt 0.414195 0.159801 +vt 0.271115 0.131156 +vt 0.322277 0.186378 +vt 0.604386 0.082779 +vt 0.587771 0.083246 +vt 0.390862 0.113182 +vt 0.684806 0.112195 +vt 0.542518 0.113182 +vt 0.641018 0.110036 +vt 0.221310 0.179184 +vt 0.244600 0.039649 +vt 0.359267 0.151644 +vt 0.501622 0.007285 +vt 0.644144 0.113182 +vt 0.534727 0.083246 +vt 0.721181 0.110036 +vt 0.684760 0.140678 +vt 0.711999 0.108324 +vt 0.655462 0.082779 +vt 0.721171 0.077652 +vt 0.706616 0.082807 +vt 0.810165 0.115690 +vt 0.730358 0.081567 +vt 0.985067 0.996475 +vt 0.713072 0.081567 +vt 0.645336 0.032225 +vt 0.834398 0.996475 +vt 0.440944 0.146186 +vt 0.606971 0.032225 +vt 0.163682 0.928410 +vt 0.695641 0.132742 +vt 0.297737 0.100788 +vt 0.087308 0.928382 +vt 0.720049 0.165341 +vt 0.297737 0.076584 +vt 0.087511 0.866956 +vt 0.713162 0.165341 +vt 0.614467 0.023084 +vt 0.163678 0.866956 +vt 0.695641 0.145892 +vt 0.614467 0.047222 +vt 0.286845 0.861406 +vt 0.860350 0.119131 +vt 0.271180 0.068500 +vt 0.140028 0.861406 +vt 0.219501 0.152350 +vt 0.271180 0.044232 +vt 0.139998 0.795624 +vt 0.208626 0.152350 +vt 0.324354 0.035067 +vt 0.286816 0.795623 +vt 0.860350 0.139882 +vt 0.324354 0.010798 +vt 0.296567 0.936596 +vt 0.534727 0.078664 +vt 0.580057 0.165450 +vt 0.362942 0.936596 +vt 0.534727 0.054395 +vt 0.553905 0.145647 +vt 0.762060 1.005086 +vt 0.561250 0.111542 +vt 0.706525 0.141177 +vt 0.762060 0.945634 +vt 0.561250 0.131700 +vt 0.606847 0.165455 +vt 0.526713 0.796750 +vt 0.475034 0.109661 +vt 0.655462 0.107033 +vt 0.461918 0.861956 +vt 0.244600 0.105698 +vt 0.476801 0.159701 +vt 0.688428 0.861956 +vt 0.244600 0.125856 +vt 0.320505 0.159620 +vt 0.155115 0.855786 +vt 0.686614 0.050888 +vt 0.671854 0.045376 +vt 0.084796 0.856111 +vt 0.479354 0.132856 +vt 0.697489 0.050888 +vt 0.707054 0.803222 +vt 0.341556 0.036419 +vt 0.710674 0.145115 +vt 0.754036 0.803005 +vt 0.710674 0.165703 +vt 0.341556 0.036419 +vt 0.651489 0.737042 +vt 0.709681 0.091011 +vt 0.659458 0.136913 +vt 0.747814 0.737042 +vt 0.604308 0.182066 +vt 0.706616 0.115622 +vt 0.747186 0.789004 +vt 0.604308 0.168928 +vt 0.612985 0.137000 +vt 0.650617 0.789030 +vt 0.666346 0.136913 +vt 0.600058 0.138629 +vt 0.004056 0.875480 +vt 0.710405 0.078022 +vt 0.248921 0.158003 +vt 0.079746 0.875480 +vt 0.638254 0.170646 +vt 0.261882 0.159622 +vt 0.080006 0.931645 +vt 0.628734 0.170646 +vt 0.296446 0.131156 +vt 0.004316 0.931645 +vt 0.700885 0.078022 +vt 0.283484 0.132775 +vt 0.810928 0.745262 +vt 0.341636 0.151265 +vt 0.280982 0.185731 +vt 0.304655 0.728016 +vt 0.316135 0.131156 +vt 0.553101 0.090990 +vt 0.264562 0.727333 +vt 0.323023 0.131156 +vt 0.645338 0.138542 +vt 0.133860 0.858876 +vt 0.655462 0.086222 +vt 0.561250 0.088547 +vt 0.187388 0.858927 +vt 0.655462 0.106973 +vt 0.508152 0.104822 +vt -0.001647 0.720842 +vt 0.357451 0.178485 +vt 0.475034 0.011867 +vt 0.186266 0.720842 +vt 0.710460 0.119098 +vt 0.475034 0.036136 +vt 0.828529 0.996759 +vt 0.271180 0.109580 +vt 0.572299 0.192217 +vt 0.754709 0.996759 +vt 0.655462 0.159315 +vt 0.271180 0.129737 +vt 0.157887 1.002813 +vt 0.501586 0.102473 +vt 0.367844 0.202411 +vt 0.108714 1.002786 +vt 0.501586 0.074969 +vt 0.720553 0.110036 +vt 0.108843 0.942968 +vt 0.324313 0.101325 +vt 0.712747 0.110036 +vt 0.157882 0.942968 +vt 0.324313 0.073894 +vt 0.360035 0.202411 +vt 0.621140 0.953882 +vt 0.713065 0.050888 +vt 0.819202 0.082791 +vt 0.712633 0.953882 +vt 0.857670 0.082791 +vt 0.542095 0.132738 +vt 0.712880 0.993855 +vt 0.542095 0.145882 +vt 0.755049 0.032225 +vt 0.621630 0.993837 +vt 0.719949 0.050888 +vt 0.716683 0.032225 +vt 0.365837 0.807249 +vt 0.587771 0.084664 +vt 0.694286 0.088957 +vt 0.365699 0.715017 +vt 0.694286 0.109708 +vt 0.561250 0.084664 +vt 0.801844 0.794963 +vt 0.271186 0.011873 +vt 0.655798 0.134704 +vt 0.663977 0.794963 +vt 0.271186 0.036142 +vt 0.234000 0.152350 +vt 0.746837 0.749913 +vt 0.686613 0.110036 +vt 0.671845 0.136888 +vt 0.806911 0.749913 +vt 0.440944 0.109726 +vt 0.684806 0.138507 +vt 0.806675 0.800835 +vt 0.454535 0.125631 +vt 0.440944 0.088975 +vt 0.746602 0.800835 +vt 0.697487 0.110036 +vt 0.441574 0.127250 +vt 0.628174 0.996468 +vt 0.509729 0.165462 +vt 0.344768 0.037898 +vt 0.558678 0.996468 +vt 0.544298 0.192133 +vt 0.344768 0.062167 +vt 0.558690 0.944480 +vt 0.508152 0.022037 +vt 0.553817 0.192133 +vt 0.628186 0.944480 +vt 0.508152 0.046305 +vt 0.519249 0.165462 +vt 0.486936 0.999431 +vt 0.297737 0.105698 +vt 0.860350 0.146371 +vt 0.436189 0.999431 +vt 0.297737 0.125855 +vt 0.710423 0.018529 +vt 0.436150 0.944361 +vt 0.463769 0.120330 +vt 0.700904 0.018529 +vt 0.486897 0.944361 +vt 0.860350 0.164537 +vt 0.463769 0.100172 +vt 0.185384 0.776952 +vt 0.302015 0.158001 +vt 0.700886 0.110036 +vt 0.366897 0.733180 +vt 0.860350 0.115690 +vt 0.729140 0.107811 +vt 0.409482 0.733180 +vt 0.857283 0.091016 +vt 0.639638 0.142220 +vt 0.049691 0.998282 +vt 0.592644 0.128585 +vt 0.767912 0.032225 +vt 0.049979 0.943348 +vt 0.592644 0.115448 +vt 0.696548 0.032225 +s 1 +usemtl calculator +f 23529/40701/15228 23530/40706/15229 23531/40711/15228 23532/40712/15228 +f 23530/40706/15230 23533/40713/15231 23534/40718/15231 23531/40711/15231 +f 23532/40712/15232 23531/40711/15233 23535/40719/15233 23536/40720/15233 +f 23531/40711/15234 23534/40718/15235 23537/40721/15234 23535/40719/15234 +f 23538/40722/15236 23539/40730/15237 23540/40738/15236 23541/40741/15237 +f 23542/40744/15238 23543/40752/15238 23544/40757/15239 23545/40760/15239 +f 23546/40763/15240 23538/40723/15240 23541/40742/15240 23547/40771/15240 +f 23548/40774/15241 23549/40779/15242 23550/40784/15241 23551/40787/15243 +f 23533/40713/15244 23543/40753/15244 23552/40790/15244 23534/40718/15244 +f 23534/40718/15245 23552/40790/15246 23553/40791/15247 23537/40721/15248 +f 23537/40721/15249 23553/40791/15249 23554/40793/15250 23555/40794/15250 +f 23535/40719/15251 23537/40721/15251 23555/40794/15251 23556/40796/15252 +f 23536/40720/15253 23535/40719/15253 23556/40796/15254 23557/40798/15253 +f 23558/40800/15255 23536/40720/15255 23557/40798/15256 23559/40802/15257 +f 23560/40803/15258 23532/40712/15259 23536/40720/15260 23558/40800/15261 +f 23561/40804/15262 23529/40701/15262 23532/40712/15262 23560/40803/15262 +f 23562/40809/15263 23563/40811/15264 23564/40812/15264 23565/40813/15263 +f 23563/40811/15264 23566/40816/15265 23567/40817/15266 23564/40812/15264 +f 23565/40813/15267 23564/40812/15268 23568/40818/15268 23569/40819/15267 +f 23564/40812/15268 23567/40817/15269 23570/40821/15270 23568/40818/15268 +f 23571/40822/15271 23572/40825/15272 23562/40810/15272 23573/40826/15271 +f 23572/40824/15272 23574/40828/15273 23563/40811/15274 23562/40809/15272 +f 23574/40828/15273 23575/40830/15275 23566/40816/15275 23563/40811/15274 +f 23575/40830/15276 23559/40801/15276 23557/40799/15276 23566/40816/15276 +f 23566/40816/15277 23557/40799/15277 23556/40797/15278 23567/40817/15277 +f 23567/40817/15279 23556/40797/15279 23555/40795/15279 23570/40821/15279 +f 23570/40821/15280 23555/40795/15280 23554/40792/15280 23576/40831/15280 +f 23568/40818/15281 23570/40821/15282 23576/40831/15282 23577/40833/15283 +f 23569/40819/15284 23568/40818/15281 23577/40833/15283 23578/40835/15284 +f 23579/40836/15285 23569/40820/15284 23578/40834/15284 23580/40838/15285 +f 23581/40840/15286 23565/40814/15267 23569/40820/15267 23579/40836/15286 +f 23573/40826/15287 23562/40810/15263 23565/40815/15263 23581/40841/15287 +f 23582/40844/15288 23583/40847/15288 23584/40849/15288 23585/40852/15288 +f 23583/40846/15289 23586/40856/15290 23587/40860/15290 23584/40850/15290 +f 23585/40853/15291 23584/40851/15292 23588/40864/15292 23589/40866/15291 +f 23584/40851/15293 23587/40861/15294 23590/40870/15295 23588/40864/15296 +f 23591/40873/15297 23592/40877/15298 23582/40845/15298 23593/40878/15299 +f 23592/40876/15300 23594/40881/15300 23583/40847/15300 23582/40844/15300 +f 23594/40880/15301 23595/40883/15302 23586/40857/15301 23583/40848/15302 +f 23595/40882/15303 23596/40884/15304 23597/40886/15303 23586/40858/15304 +f 23586/40859/15305 23597/40885/15306 23598/40888/15306 23587/40862/15305 +f 23587/40863/15307 23598/40887/15308 23599/40890/15309 23590/40871/15308 +f 23590/40872/15310 23599/40889/15311 23600/40892/15311 23601/40893/15312 +f 23588/40865/15313 23590/40872/15310 23601/40893/15312 23602/40895/15314 +f 23589/40867/15315 23588/40865/15313 23602/40895/15314 23603/40898/15316 +f 23604/40904/15317 23589/40868/15315 23603/40899/15316 23605/40906/15318 +f 23606/40907/15319 23585/40854/15291 23589/40869/15291 23604/40902/15319 +f 23593/40878/15320 23582/40845/15321 23585/40855/15322 23606/40908/15320 +f 23607/40911/15323 23608/40912/15324 23609/40913/15323 23610/40916/15324 +f 23608/40912/15325 23611/40917/15326 23612/40918/15325 23609/40913/15326 +f 23610/40916/15327 23609/40913/15328 23613/40920/15327 23614/40922/15328 +f 23609/40914/15329 23612/40919/15330 23615/40924/15330 23613/40921/15330 +f 23616/40926/15331 23617/40927/15331 23607/40911/15332 23618/40928/15331 +f 23617/40927/15333 23619/40930/15334 23608/40912/15333 23607/40911/15335 +f 23619/40930/15336 23620/40931/15337 23611/40917/15338 23608/40912/15337 +f 23620/40931/15339 23621/40933/15339 23622/40934/15339 23611/40917/15340 +f 23611/40917/15341 23622/40934/15342 23623/40936/15342 23612/40918/15342 +f 23612/40919/15343 23623/40937/15343 23624/40939/15344 23615/40924/15343 +f 23615/40924/15345 23624/40939/15346 23625/40940/15345 23626/40941/15345 +f 23613/40921/15347 23615/40924/15348 23626/40941/15348 23627/40942/15349 +f 23614/40923/15350 23613/40921/15351 23627/40942/15352 23628/40943/15350 +f 23629/40944/15353 23614/40923/15354 23628/40943/15354 23630/40945/15354 +f 23631/40948/15355 23610/40915/15355 23614/40923/15355 23629/40944/15356 +f 23618/40928/15357 23607/40911/15358 23610/40916/15357 23631/40946/15357 +f 23632/40949/15359 23633/40953/15360 23634/40957/15361 23635/40961/15362 +f 23633/40954/15363 23636/40965/15364 23637/40970/15363 23634/40958/15365 +f 23635/40962/15366 23634/40959/15367 23638/40973/15368 23639/40974/15368 +f 23634/40960/15369 23637/40971/15369 23640/40976/15369 23638/40972/15369 +f 23641/40980/15370 23642/40982/15371 23632/40950/15371 23643/40983/15372 +f 23642/40981/15373 23644/40988/15374 23633/40955/15373 23632/40951/15373 +f 23644/40987/15375 23645/40989/15375 23636/40966/15375 23633/40956/15376 +f 23646/40994/15377 23647/40999/15377 23648/41004/15377 23649/41007/15377 +f 23636/40967/15378 23561/40804/15378 23560/40803/15378 23637/40971/15379 +f 23637/40971/15380 23560/40803/15381 23558/40800/15382 23640/40976/15381 +f 23640/40976/15383 23558/40800/15383 23559/40802/15383 23575/40829/15384 +f 23638/40973/15385 23640/40977/15385 23575/40830/15385 23574/40828/15385 +f 23639/40974/15386 23638/40973/15387 23574/40828/15387 23572/40824/15388 +f 23650/41010/15389 23639/40975/15386 23572/40825/15388 23571/40822/15389 +f 23651/41012/15390 23635/40963/15391 23639/40975/15391 23650/41010/15390 +f 23643/40984/15392 23632/40952/15393 23635/40964/15393 23651/41013/15392 +f 23652/41016/15394 23653/41018/15394 23654/41020/15394 23655/41022/15394 +f 23653/41019/15394 23656/41024/15394 23657/41025/15394 23654/41021/15394 +f 23655/41022/15394 23654/41020/15394 23658/41027/15394 23659/41028/15394 +f 23654/41021/15394 23657/41025/15394 23660/41030/15394 23658/41026/15394 +f 23605/40905/15318 23603/40900/15316 23652/41017/15394 23661/41031/15394 +f 23603/40901/15316 23602/40896/15314 23653/41018/15394 23652/41016/15394 +f 23602/40897/15314 23601/40894/15312 23656/41024/15394 23653/41019/15394 +f 23601/40894/15312 23600/40891/15394 23662/41032/15394 23656/41024/15394 +f 23656/41024/15394 23662/41032/15394 23663/41034/15394 23657/41025/15394 +f 23657/41025/15394 23663/41034/15394 23664/41036/15394 23660/41030/15394 +f 23660/41030/15394 23664/41036/15394 23665/41038/15394 23666/41040/15395 +f 23658/41026/15394 23660/41030/15394 23666/41040/15395 23667/41042/15396 +f 23659/41028/15394 23658/41027/15394 23667/41043/15396 23668/41045/15397 +f 23669/41049/15394 23659/41029/15394 23668/41046/15397 23670/41052/15398 +f 23671/41053/15394 23655/41023/15394 23659/41029/15394 23669/41049/15394 +f 23661/41031/15394 23652/41017/15394 23655/41023/15394 23671/41053/15394 +f 23672/41054/15399 23673/41056/15400 23674/41057/15400 23675/41060/15399 +f 23673/41056/15401 23676/41064/15402 23677/41066/15403 23674/41057/15404 +f 23675/41061/15405 23674/41058/15405 23678/41070/15405 23679/41074/15405 +f 23674/41059/15406 23677/41067/15406 23680/41078/15406 23678/41071/15407 +f 23670/41050/15398 23668/41047/15397 23672/41055/15408 23681/41082/15409 +f 23668/41048/15397 23667/41044/15396 23673/41056/15410 23672/41054/15408 +f 23667/41044/15396 23666/41041/15395 23676/41064/15411 23673/41056/15410 +f 23666/41041/15395 23665/41039/15412 23682/41085/15412 23676/41064/15411 +f 23676/41065/15413 23682/41086/15414 23683/41088/15413 23677/41068/15415 +f 23677/41069/15416 23683/41087/15417 23684/41090/15417 23680/41079/15416 +f 23680/41080/15418 23684/41089/15419 23685/41091/15418 23686/41092/15419 +f 23678/41072/15420 23680/41081/15421 23686/41093/15420 23687/41094/15421 +f 23679/41075/15422 23678/41073/15422 23687/41095/15422 23688/41096/15422 +f 23689/41098/15423 23679/41076/15424 23688/41097/15424 23690/41103/15425 +f 23691/41104/15426 23675/41062/15427 23679/41077/15428 23689/41099/15426 +f 23681/41082/15429 23672/41055/15399 23675/41063/15399 23691/41105/15429 +f 23692/41108/15430 23693/41109/15430 23694/41110/15430 23695/41113/15430 +f 23693/41109/15431 23696/41114/15431 23697/41115/15431 23694/41110/15431 +f 23695/41112/15432 23694/41111/15432 23698/41117/15432 23699/41118/15432 +f 23694/41111/15433 23697/41116/15433 23700/41119/15433 23698/41117/15433 +f 23701/41121/15434 23702/41122/15435 23692/41108/15436 23703/41124/15437 +f 23702/41122/15435 23704/41125/15438 23693/41109/15439 23692/41108/15436 +f 23704/41125/15438 23705/41127/15440 23696/41114/15441 23693/41109/15439 +f 23705/41127/15440 23706/41129/15442 23707/41133/15443 23696/41114/15441 +f 23696/41114/15444 23707/41133/15445 23708/41136/15445 23697/41115/15445 +f 23697/41116/15446 23708/41134/15447 23709/41137/15446 23700/41119/15446 +f 23700/41119/15448 23709/41137/15449 23710/41140/15448 23711/41141/15450 +f 23698/41117/15451 23700/41119/15451 23711/41141/15452 23712/41142/15452 +f 23699/41118/15453 23698/41117/15453 23712/41142/15454 23713/41143/15454 +f 23714/41144/15455 23699/41118/15456 23713/41143/15455 23715/41147/15456 +f 23716/41148/15457 23695/41112/15458 23699/41118/15458 23714/41144/15458 +f 23703/41124/15459 23692/41108/15460 23695/41113/15459 23716/41149/15459 +f 23717/41152/15461 23718/41154/15461 23719/41156/15461 23720/41158/15461 +f 23718/41153/15462 23721/41159/15462 23722/41164/15462 23719/41155/15462 +f 23723/41170/15461 23724/41172/15461 23725/41174/15461 23726/41177/15461 +f 23724/41171/15462 23727/41180/15462 23728/41182/15462 23725/41173/15462 +f 23729/41187/15463 23730/41189/15464 23731/41190/15464 23732/41193/15463 +f 23730/41188/15461 23733/41195/15461 23734/41197/15461 23731/41191/15461 +f 23733/41194/15462 23735/41199/15462 23736/41203/15462 23734/41196/15462 +f 23737/41208/15465 23738/41216/15466 23739/41224/15467 23740/41227/15468 +f 23741/41230/15469 23742/41238/15469 23743/41246/15469 23744/41249/15469 +f 23727/41178/15470 23549/40780/15470 23745/41252/15470 23728/41183/15470 +f 23746/41254/15470 23747/41257/15470 23596/40884/15470 23595/40882/15470 +f 23748/41260/15471 23746/41255/15471 23595/40883/15471 23594/40880/15471 +f 23749/41262/15461 23748/41259/15461 23594/40881/15461 23592/40876/15461 +f 23750/41265/15463 23749/41261/15464 23592/40877/15464 23591/40873/15463 +f 23751/41268/15463 23723/41169/15464 23726/41176/15464 23752/41270/15463 +f 23753/41273/15463 23717/41151/15464 23720/41157/15464 23754/41276/15463 +f 23755/41278/15472 23756/41279/15472 23757/41281/15473 23758/41284/15473 +f 23756/41279/15474 23759/41286/15474 23760/41287/15475 23757/41281/15475 +f 23758/41283/15476 23757/41282/15477 23761/41289/15477 23762/41292/15476 +f 23757/41282/15477 23760/41288/15478 23763/41293/15478 23761/41289/15477 +f 23665/41039/15412 23664/41037/15479 23755/41277/15479 23682/41085/15412 +f 23664/41037/15479 23663/41035/15480 23756/41280/15480 23755/41277/15479 +f 23663/41035/15480 23662/41033/15481 23759/41285/15481 23756/41280/15480 +f 23662/41033/15481 23600/40892/15311 23599/40889/15311 23759/41285/15481 +f 23759/41286/15482 23599/40890/15483 23598/40887/15483 23760/41287/15482 +f 23760/41288/15478 23598/40888/15306 23597/40885/15306 23763/41293/15478 +f 23763/41294/15484 23597/40886/15485 23596/40884/15484 23764/41295/15484 +f 23761/41290/15486 23763/41294/15486 23764/41295/15486 23765/41296/15486 +f 23762/41291/15487 23761/41290/15487 23765/41296/15487 23766/41297/15487 +f 23684/41089/15488 23762/41291/15489 23766/41297/15489 23685/41091/15489 +f 23683/41087/15417 23758/41283/15476 23762/41292/15476 23684/41090/15417 +f 23682/41086/15490 23755/41278/15491 23758/41284/15491 23683/41088/15490 +f 23767/41298/15492 23768/41302/15492 23769/41305/15493 23770/41309/15494 +f 23768/41303/15495 23771/41313/15495 23772/41316/15495 23769/41306/15495 +f 23770/41310/15496 23769/41307/15497 23773/41319/15498 23774/41322/15499 +f 23769/41308/15500 23772/41317/15501 23775/41324/15502 23773/41320/15501 +f 23580/40838/15503 23578/40834/15504 23767/41299/15505 23776/41327/15503 +f 23578/40835/15504 23577/40833/15506 23768/41304/15506 23767/41300/15505 +f 23577/40833/15507 23576/40831/15507 23771/41314/15507 23768/41304/15507 +f 23576/40832/15508 23554/40793/15509 23553/40791/15509 23771/41315/15509 +f 23771/41315/15510 23553/40791/15511 23552/40790/15510 23772/41318/15512 +f 23772/41318/15513 23552/40790/15514 23543/40753/15514 23775/41323/15514 +f 23777/41330/15240 23546/40764/15240 23778/41338/15240 23779/41341/15240 +f 23780/41345/15515 23781/41346/15515 23782/41352/15515 23783/41356/15515 +f 23784/41359/15516 23780/41344/15517 23783/41357/15516 23785/41360/15517 +f 23786/41363/15518 23784/41358/15519 23785/41361/15519 23787/41366/15520 +f 23788/41367/15521 23770/41311/15522 23774/41321/15522 23789/41372/15521 +f 23776/41328/15523 23767/41301/15524 23770/41312/15524 23788/41368/15523 +f 23790/41374/15525 23791/41376/15525 23792/41378/15525 23793/41380/15525 +f 23791/41375/15526 23794/41382/15526 23795/41385/15526 23792/41377/15526 +f 23796/41391/15525 23797/41393/15525 23798/41394/15525 23799/41397/15525 +f 23797/41392/15526 23800/41399/15526 23801/41403/15526 23798/41395/15526 +f 23802/41409/15527 23803/41411/15528 23804/41412/15528 23805/41415/15527 +f 23803/41410/15525 23806/41417/15525 23807/41420/15525 23804/41413/15525 +f 23806/41416/15529 23808/41423/15530 23809/41424/15529 23807/41418/15531 +f 23808/41421/15532 23810/41428/15533 23811/41430/15534 23809/41425/15535 +f 23538/40724/15469 23546/40765/15469 23812/41432/15469 23813/41435/15469 +f 23814/41438/15242 23815/41446/15243 23816/41454/15243 23817/41457/15243 +f 23737/41209/15536 23777/41331/15537 23818/41460/15536 23819/41463/15537 +f 23820/41467/15526 23647/41001/15526 23646/40996/15526 23821/41468/15526 +f 23822/41471/15525 23820/41466/15525 23821/41469/15525 23823/41473/15525 +f 23824/41476/15527 23822/41470/15528 23823/41472/15528 23825/41477/15527 +f 23826/41482/15527 23796/41390/15528 23799/41396/15528 23827/41484/15527 +f 23828/41486/15527 23790/41373/15528 23793/41379/15528 23829/41488/15527 +f 23830/41489/15538 23831/41490/15538 23832/41491/15538 23833/41492/15538 +f 23831/41490/15539 23834/41493/15539 23835/41494/15539 23832/41491/15539 +f 23836/41495/15538 23837/41496/15538 23838/41497/15538 23839/41498/15538 +f 23837/41496/15539 23840/41499/15539 23841/41500/15539 23838/41497/15539 +f 23842/41502/15540 23843/41503/15540 23844/41504/15540 23845/41505/15540 +f 23843/41503/15538 23846/41507/15538 23847/41508/15538 23844/41504/15538 +f 23846/41507/15539 23848/41509/15539 23849/41510/15539 23847/41508/15539 +f 23848/41509/15541 23850/41512/15541 23851/41514/15541 23849/41510/15541 +f 23834/41493/15541 23852/41516/15541 23853/41518/15541 23835/41494/15541 +f 23840/41499/15541 23854/41520/15541 23855/41522/15541 23841/41500/15541 +f 23856/41523/15541 23857/41525/15541 23858/41527/15541 23859/41528/15541 +f 23860/41529/15539 23856/41523/15539 23859/41528/15539 23861/41530/15539 +f 23862/41531/15538 23860/41529/15538 23861/41530/15538 23863/41532/15538 +f 23864/41534/15540 23862/41531/15540 23863/41532/15540 23865/41536/15540 +f 23866/41538/15540 23836/41495/15540 23839/41498/15540 23867/41540/15540 +f 23868/41542/15540 23830/41489/15540 23833/41492/15540 23869/41544/15540 +f 23800/41398/15542 23870/41545/15543 23871/41553/15542 23872/41556/15544 +f 23873/41559/15545 23874/41564/15546 23875/41569/15547 23876/41572/15546 +f 23877/41575/15548 23741/41231/15549 23878/41583/15548 23879/41586/15549 +f 23735/41198/15550 23782/41351/15550 23880/41589/15550 23881/41592/15550 +f 23810/41428/15533 23882/41595/15551 23883/41597/15551 23811/41430/15534 +f 23882/41595/15551 23884/41599/15552 23885/41601/15552 23883/41597/15551 +f 23884/41599/15552 23886/41603/15553 23887/41605/15553 23885/41601/15552 +f 23886/41603/15553 23747/41258/15554 23745/41253/15555 23887/41605/15553 +f 23738/41217/15556 23548/40775/15556 23551/40788/15556 23888/41607/15556 +f 23889/41610/15557 23890/41618/15557 23891/41626/15557 23892/41629/15557 +f 23890/41619/15558 23893/41632/15559 23894/41640/15558 23891/41627/15559 +f 23738/41218/15560 23737/41210/15561 23895/41643/15560 23896/41646/15561 +f 23897/41649/15562 23737/41211/15562 23819/41464/15562 23898/41654/15562 +f 23529/40702/15563 23561/40805/15564 23899/41657/15563 23900/41660/15564 +f 23741/41232/15549 23814/41439/15548 23901/41663/15549 23902/41666/15548 +f 23548/40776/15562 23738/41219/15562 23896/41647/15562 23903/41669/15562 +f 23904/41673/15565 23905/41674/15565 23906/41675/15565 23907/41677/15565 +f 23905/41674/15566 23908/41678/15566 23909/41679/15566 23906/41675/15566 +f 23910/41681/15565 23911/41682/15565 23912/41683/15565 23913/41685/15565 +f 23911/41682/15566 23914/41686/15566 23915/41687/15566 23912/41683/15566 +f 23850/41511/15567 23916/41689/15567 23917/41690/15567 23851/41513/15567 +f 23916/41688/15565 23918/41692/15565 23919/41693/15565 23917/41691/15565 +f 23918/41692/15566 23920/41694/15566 23921/41695/15566 23919/41693/15566 +f 23920/41694/15568 23802/41408/15527 23805/41414/15527 23921/41695/15568 +f 23908/41678/15568 23828/41485/15527 23829/41487/15527 23909/41679/15568 +f 23914/41686/15568 23826/41481/15527 23827/41483/15527 23915/41687/15568 +f 23922/41696/15568 23824/41475/15527 23825/41478/15527 23923/41697/15568 +f 23924/41699/15566 23922/41696/15566 23923/41697/15566 23925/41700/15566 +f 23926/41703/15565 23924/41699/15565 23925/41700/15565 23927/41704/15565 +f 23857/41524/15567 23926/41702/15567 23927/41706/15569 23858/41526/15567 +f 23854/41519/15567 23910/41680/15567 23913/41684/15567 23855/41521/15567 +f 23852/41515/15567 23904/41672/15567 23907/41676/15567 23853/41517/15567 +f 23928/41707/15570 23929/41709/15571 23930/41710/15571 23931/41712/15572 +f 23929/41709/15571 23932/41716/15573 23933/41717/15573 23930/41710/15571 +f 23931/41713/15574 23930/41711/15574 23934/41719/15575 23935/41721/15576 +f 23930/41711/15577 23933/41718/15577 23936/41722/15577 23934/41719/15577 +f 23630/40945/15578 23937/41724/15579 23928/41708/15579 23629/40944/15578 +f 23937/41723/15579 23938/41725/15580 23929/41709/15580 23928/41707/15579 +f 23938/41725/15580 23939/41726/15581 23932/41716/15582 23929/41709/15580 +f 23939/41726/15581 23580/40839/15503 23776/41329/15503 23932/41716/15582 +f 23932/41716/15573 23776/41329/15523 23788/41369/15523 23933/41717/15573 +f 23933/41718/15583 23788/41370/15521 23789/41371/15521 23936/41722/15583 +f 23940/41727/15584 23786/41362/15518 23787/41364/15520 23941/41729/15584 +f 23942/41730/15585 23940/41727/15585 23941/41729/15585 23943/41731/15585 +f 23944/41733/15586 23942/41730/15586 23943/41731/15586 23945/41734/15586 +f 23616/40925/15587 23944/41732/15587 23945/41735/15587 23865/41535/15587 +f 23631/40947/15588 23931/41714/15589 23935/41720/15589 23618/40929/15589 +f 23629/40944/15590 23928/41708/15591 23931/41715/15592 23631/40948/15592 +f 23946/41737/15593 23947/41738/15593 23948/41739/15593 23949/41741/15593 +f 23947/41738/15594 23950/41744/15594 23951/41747/15594 23948/41739/15594 +f 23952/41749/15593 23953/41750/15593 23954/41751/15593 23955/41753/15593 +f 23953/41750/15594 23956/41756/15594 23957/41757/15594 23954/41751/15594 +f 23864/41533/15595 23958/41760/15595 23959/41761/15595 23867/41539/15595 +f 23958/41759/15593 23960/41763/15593 23961/41764/15593 23959/41762/15593 +f 23960/41763/15594 23962/41766/15594 23963/41768/15594 23961/41764/15594 +f 23962/41765/15596 23729/41186/15463 23732/41192/15463 23963/41767/15596 +f 23950/41742/15596 23753/41271/15463 23754/41274/15463 23951/41745/15596 +f 23956/41754/15596 23751/41266/15463 23752/41269/15463 23957/41758/15596 +f 23964/41769/15596 23750/41263/15463 23591/40874/15463 23965/41772/15596 +f 23966/41774/15594 23964/41770/15594 23965/41773/15594 23967/41775/15594 +f 23968/41777/15593 23966/41774/15593 23967/41775/15593 23969/41779/15593 +f 23842/41501/15595 23968/41776/15595 23969/41778/15597 23715/41146/15595 +f 23868/41541/15595 23952/41748/15595 23955/41752/15595 23845/41506/15595 +f 23866/41537/15595 23946/41736/15595 23949/41740/15595 23869/41543/15595 +f 23970/41781/15598 23971/41783/15599 23972/41784/15600 23973/41786/15601 +f 23971/41783/15599 23974/41790/15602 23975/41792/15602 23972/41784/15600 +f 23973/41787/15603 23972/41785/15604 23976/41795/15605 23977/41797/15606 +f 23972/41785/15607 23975/41794/15608 23978/41800/15609 23976/41795/15607 +f 23706/41130/15442 23979/41802/15610 23970/41780/15611 23707/41132/15443 +f 23979/41803/15610 23980/41806/15612 23971/41783/15613 23970/41781/15611 +f 23980/41806/15612 23981/41808/15614 23974/41790/15408 23971/41783/15613 +f 23981/41808/15614 23670/41051/15398 23681/41083/15409 23974/41790/15408 +f 23974/41791/15602 23681/41084/15429 23691/41106/15429 23975/41793/15602 +f 23975/41794/15608 23691/41107/15426 23689/41100/15426 23978/41800/15609 +f 23978/41801/15615 23689/41101/15423 23690/41102/15425 23982/41810/15615 +f 23976/41796/15616 23978/41801/15616 23982/41810/15616 23983/41811/15617 +f 23977/41798/15618 23976/41796/15619 23983/41811/15619 23984/41812/15618 +f 23709/41138/15620 23977/41799/15621 23984/41813/15620 23710/41139/15621 +f 23708/41135/15622 23973/41788/15623 23977/41799/15623 23709/41138/15622 +f 23707/41133/15624 23970/41782/15598 23973/41789/15601 23708/41136/15625 +f 23985/41814/15394 23986/41816/15394 23987/41817/15394 23988/41818/15394 +f 23986/41816/15394 23989/41820/15394 23990/41821/15394 23987/41817/15394 +f 23988/41818/15394 23987/41817/15394 23991/41822/15394 23992/41823/15394 +f 23987/41817/15394 23990/41821/15394 23993/41825/15394 23991/41822/15394 +f 23701/41120/15434 23994/41826/15626 23985/41815/15394 23702/41123/15435 +f 23994/41827/15626 23995/41830/15627 23986/41816/15394 23985/41814/15394 +f 23995/41830/15627 23996/41832/15628 23989/41820/15394 23986/41816/15394 +f 23996/41832/15628 23605/40905/15318 23661/41031/15394 23989/41820/15394 +f 23989/41820/15394 23661/41031/15394 23671/41053/15394 23990/41821/15394 +f 23990/41821/15394 23671/41053/15394 23669/41049/15394 23993/41825/15394 +f 23993/41825/15394 23669/41049/15394 23670/41052/15398 23981/41809/15614 +f 23991/41822/15394 23993/41825/15394 23981/41809/15614 23980/41807/15612 +f 23992/41823/15394 23991/41822/15394 23980/41807/15612 23979/41804/15610 +f 23705/41128/15440 23992/41824/15394 23979/41805/15610 23706/41131/15442 +f 23704/41126/15438 23988/41819/15394 23992/41824/15394 23705/41128/15440 +f 23702/41123/15435 23985/41815/15394 23988/41819/15394 23704/41126/15438 +f 23997/41835/15629 23998/41837/15630 23999/41838/15631 24000/41840/15631 +f 23998/41837/15632 24001/41845/15632 24002/41846/15632 23999/41838/15632 +f 24000/41841/15633 23999/41839/15634 24003/41848/15634 24004/41849/15635 +f 23999/41839/15634 24002/41847/15636 24005/41851/15636 24003/41848/15634 +f 23621/40932/15637 24006/41853/15637 23997/41836/15638 23622/40935/15637 +f 24006/41852/15639 24007/41854/15639 23998/41837/15640 23997/41835/15639 +f 24007/41854/15641 24008/41856/15641 24001/41845/15641 23998/41837/15641 +f 24008/41855/15642 23641/40978/15370 23643/40985/15372 24001/41844/15642 +f 24001/41845/15643 23643/40986/15392 23651/41014/15392 24002/41846/15643 +f 24002/41847/15636 23651/41015/15390 23650/41011/15390 24005/41851/15636 +f 24005/41851/15644 23650/41011/15389 23571/40823/15389 24009/41857/15645 +f 24003/41848/15646 24005/41851/15644 24009/41857/15645 24010/41858/15646 +f 24004/41849/15647 24003/41848/15646 24010/41858/15646 24011/41860/15647 +f 23624/40939/15648 24004/41850/15647 24011/41859/15647 23625/40940/15648 +f 23623/40937/15649 24000/41842/15649 24004/41850/15650 23624/40939/15651 +f 23622/40935/15652 23997/41836/15652 24000/41843/15652 23623/40938/15653 +f 24012/41861/15654 24013/41863/15655 24014/41864/15656 24015/41866/15657 +f 24013/41863/15658 24016/41870/15659 24017/41871/15660 24014/41864/15661 +f 24015/41867/15662 24014/41865/15663 24018/41873/15664 24019/41875/15665 +f 24014/41865/15663 24017/41872/15666 24020/41878/15666 24018/41873/15664 +f 23715/41146/15667 23969/41778/15668 24012/41862/15667 23714/41145/15668 +f 23969/41779/15669 23967/41775/15670 24013/41863/15670 24012/41861/15669 +f 23967/41775/15671 23965/41773/15672 24016/41870/15672 24013/41863/15672 +f 23965/41773/15673 23591/40875/15297 23593/40879/15299 24016/41870/15673 +f 24016/41870/15659 23593/40879/15320 23606/40909/15320 24017/41871/15660 +f 24017/41872/15666 23606/40910/15319 23604/40903/15319 24020/41878/15666 +f 24020/41879/15315 23604/40904/15317 23605/40906/15318 23996/41833/15628 +f 24018/41874/15674 24020/41880/15315 23996/41834/15628 23995/41831/15627 +f 24019/41876/15675 24018/41874/15674 23995/41831/15627 23994/41828/15626 +f 23703/41124/15437 24019/41877/15675 23994/41829/15626 23701/41121/15434 +f 23716/41149/15676 24015/41868/15662 24019/41877/15665 23703/41124/15677 +f 23714/41145/15678 24012/41862/15679 24015/41869/15679 23716/41150/15678 +f 24021/41881/15680 24022/41883/15681 24023/41884/15681 24024/41886/15680 +f 24022/41883/15681 24025/41889/15682 24026/41890/15682 24023/41884/15681 +f 24024/41887/15683 24023/41885/15684 24027/41892/15684 24028/41893/15683 +f 24023/41885/15684 24026/41891/15685 24029/41895/15685 24027/41892/15684 +f 23625/40940/15686 24011/41859/15687 24021/41882/15687 23626/40941/15688 +f 24011/41860/15687 24010/41858/15689 24022/41883/15689 24021/41881/15687 +f 24010/41858/15689 24009/41857/15690 24025/41889/15691 24022/41883/15689 +f 24009/41857/15690 23571/40823/15271 23573/40827/15271 24025/41889/15691 +f 24025/41889/15682 23573/40827/15287 23581/40842/15287 24026/41890/15682 +f 24026/41891/15685 23581/40843/15286 23579/40837/15286 24029/41895/15685 +f 24029/41895/15692 23579/40837/15285 23580/40839/15285 23939/41726/15693 +f 24027/41892/15694 24029/41895/15692 23939/41726/15693 23938/41725/15694 +f 24028/41893/15695 24027/41892/15694 23938/41725/15694 23937/41723/15695 +f 23628/40943/15696 24028/41894/15695 23937/41724/15695 23630/40945/15697 +f 23627/40942/15698 24024/41888/15683 24028/41894/15683 23628/40943/15699 +f 23626/40941/15700 24021/41882/15680 24024/41888/15680 23627/40942/15701 +f 23869/41543/15595 23949/41740/15595 23952/41748/15595 23868/41541/15595 +f 23951/41746/15596 23754/41275/15463 23751/41267/15463 23956/41755/15596 +f 23948/41739/15594 23951/41747/15594 23956/41756/15594 23953/41750/15594 +f 23949/41741/15593 23948/41739/15593 23953/41750/15593 23952/41749/15593 +f 23851/41513/15567 23917/41690/15567 23904/41672/15567 23852/41515/15567 +f 23921/41695/15568 23805/41414/15527 23828/41485/15527 23908/41678/15568 +f 23919/41693/15566 23921/41695/15566 23908/41678/15566 23905/41674/15566 +f 23917/41691/15565 23919/41693/15565 23905/41674/15565 23904/41673/15565 +f 23811/41431/15702 23883/41598/15702 23874/41565/15702 23873/41560/15702 +f 23887/41606/15703 23745/41252/15703 23549/40780/15703 23548/40777/15703 +f 23885/41602/15704 23887/41606/15704 23548/40777/15704 23897/41650/15704 +f 23883/41598/15705 23885/41602/15705 23897/41650/15705 23874/41565/15705 +f 23845/41505/15540 23844/41504/15540 23830/41489/15540 23868/41542/15540 +f 23849/41510/15541 23851/41514/15541 23852/41516/15541 23834/41493/15541 +f 23847/41508/15539 23849/41510/15539 23834/41493/15539 23831/41490/15539 +f 23844/41504/15538 23847/41508/15538 23831/41490/15538 23830/41489/15538 +f 23805/41415/15527 23804/41412/15528 23790/41373/15528 23828/41486/15527 +f 23809/41426/15706 23811/41431/15706 23873/41560/15706 23794/41381/15706 +f 23807/41419/15526 23809/41427/15526 23794/41382/15526 23791/41375/15526 +f 23804/41413/15525 23807/41420/15525 23791/41376/15525 23790/41374/15525 +f 23754/41276/15463 23720/41157/15464 23723/41169/15464 23751/41268/15463 +f 23549/40781/15707 23727/41179/15708 24030/41896/15707 24031/41899/15707 +f 23719/41155/15462 23722/41164/15462 23727/41180/15462 23724/41171/15462 +f 23720/41158/15461 23719/41156/15461 23724/41172/15461 23723/41170/15461 +f 23845/41506/15595 23955/41752/15595 23968/41776/15595 23842/41501/15595 +f 23955/41753/15593 23954/41751/15593 23966/41774/15593 23968/41777/15593 +f 23954/41751/15594 23957/41757/15594 23964/41770/15594 23966/41774/15594 +f 23957/41758/15596 23752/41269/15463 23750/41264/15463 23964/41771/15596 +f 23982/41810/15568 23690/41102/15527 23802/41408/15527 23920/41694/15568 +f 23983/41811/15566 23982/41810/15566 23920/41694/15566 23918/41692/15566 +f 23984/41812/15565 23983/41811/15565 23918/41692/15565 23916/41688/15565 +f 23710/41139/15567 23984/41813/15567 23916/41689/15567 23850/41511/15567 +f 23764/41295/15703 23596/40884/15703 23747/41257/15703 23886/41604/15703 +f 23765/41296/15704 23764/41295/15704 23886/41604/15704 23884/41600/15704 +f 23766/41297/15705 23765/41296/15705 23884/41600/15705 23882/41596/15705 +f 23685/41091/15702 23766/41297/15702 23882/41596/15702 23810/41429/15702 +f 23711/41141/15541 23710/41140/15541 23850/41512/15541 23848/41509/15541 +f 23712/41142/15539 23711/41141/15539 23848/41509/15539 23846/41507/15539 +f 23713/41143/15538 23712/41142/15538 23846/41507/15538 23843/41503/15538 +f 23715/41147/15540 23713/41143/15540 23843/41503/15540 23842/41502/15540 +f 23686/41092/15706 23685/41091/15706 23810/41429/15706 23808/41422/15706 +f 23687/41094/15709 23686/41093/15709 23808/41423/15709 23806/41416/15709 +f 23688/41096/15525 23687/41095/15525 23806/41417/15525 23803/41410/15525 +f 23690/41103/15527 23688/41097/15528 23803/41411/15528 23802/41409/15527 +f 23752/41270/15463 23726/41176/15464 23749/41261/15464 23750/41265/15463 +f 23726/41177/15461 23725/41174/15461 23748/41259/15461 23749/41262/15461 +f 23725/41175/15710 23728/41184/15711 23746/41255/15712 23748/41260/15711 +f 23728/41185/15713 23745/41253/15555 23747/41258/15554 23746/41256/15714 +f 23867/41539/15595 23959/41761/15595 23946/41736/15595 23866/41537/15595 +f 23963/41767/15596 23732/41192/15463 23753/41272/15463 23950/41743/15596 +f 23961/41764/15594 23963/41768/15594 23950/41744/15594 23947/41738/15594 +f 23959/41762/15593 23961/41764/15593 23947/41738/15593 23946/41737/15593 +f 23853/41517/15567 23907/41676/15567 23910/41680/15567 23854/41519/15567 +f 23909/41679/15568 23829/41487/15527 23826/41481/15527 23914/41686/15568 +f 23906/41675/15566 23909/41679/15566 23914/41686/15566 23911/41682/15566 +f 23907/41677/15565 23906/41675/15565 23911/41682/15565 23910/41681/15565 +f 23814/41440/15715 23741/41233/15716 23744/41250/15715 24032/41902/15716 +f 23539/40731/15717 24033/41905/15717 24034/41913/15717 24035/41916/15717 +f 23542/40745/15718 24036/41919/15719 24037/41927/15719 24038/41930/15719 +f 24033/41906/15720 23647/41000/15721 24039/41933/15720 24034/41914/15720 +f 23869/41544/15540 23833/41492/15540 23836/41495/15540 23866/41538/15540 +f 23835/41494/15541 23853/41518/15541 23854/41520/15541 23840/41499/15541 +f 23832/41491/15539 23835/41494/15539 23840/41499/15539 23837/41496/15539 +f 23833/41492/15538 23832/41491/15538 23837/41496/15538 23836/41495/15538 +f 23829/41488/15527 23793/41379/15528 23796/41390/15528 23826/41482/15527 +f 24040/41936/15722 24041/41944/15723 24042/41952/15722 24043/41955/15723 +f 23792/41377/15526 23795/41385/15526 23800/41399/15526 23797/41392/15526 +f 23793/41380/15525 23792/41378/15525 23797/41393/15525 23796/41391/15525 +f 23732/41193/15463 23731/41190/15464 23717/41151/15464 23753/41273/15463 +f 23890/41620/15724 23889/41611/15724 24044/41958/15724 24045/41961/15724 +f 23734/41196/15462 23736/41203/15462 23721/41159/15462 23718/41153/15462 +f 23731/41191/15461 23734/41197/15461 23718/41154/15461 23717/41152/15461 +f 23941/41728/15596 23787/41365/15463 23729/41186/15463 23962/41765/15596 +f 23943/41731/15594 23941/41729/15594 23962/41766/15594 23960/41763/15594 +f 23945/41734/15593 23943/41731/15593 23960/41763/15593 23958/41759/15593 +f 23865/41535/15595 23945/41735/15595 23958/41760/15595 23864/41533/15595 +f 23855/41521/15567 23913/41684/15567 23926/41702/15567 23857/41524/15567 +f 23913/41685/15565 23912/41683/15565 23924/41699/15565 23926/41703/15565 +f 23912/41683/15566 23915/41687/15566 23922/41696/15566 23924/41699/15566 +f 23915/41687/15568 23827/41483/15527 23824/41475/15527 23922/41696/15568 +f 23722/41165/15725 23721/41160/15725 24046/41964/15725 24047/41967/15725 +f 23646/40995/15726 24048/41970/15726 24049/41978/15726 24050/41981/15727 +f 23893/41633/15562 23814/41441/15562 24032/41903/15562 24051/41984/15562 +f 24052/41987/15562 24053/41995/15562 24054/42003/15562 24055/42006/15562 +f 23867/41540/15540 23839/41498/15540 23862/41531/15540 23864/41534/15540 +f 23839/41498/15538 23838/41497/15538 23860/41529/15538 23862/41531/15538 +f 23838/41497/15539 23841/41500/15539 23856/41523/15539 23860/41529/15539 +f 23841/41500/15541 23855/41522/15541 23857/41525/15541 23856/41523/15541 +f 23827/41484/15527 23799/41396/15528 23822/41470/15528 23824/41476/15527 +f 23799/41397/15525 23798/41394/15525 23820/41466/15525 23822/41471/15525 +f 23798/41395/15526 23801/41403/15526 23647/41001/15526 23820/41467/15526 +f 24056/42009/15728 23546/40766/15729 24057/42017/15730 24058/42020/15731 +f 24033/41907/15547 23877/41576/15545 24059/42023/15547 24060/42026/15547 +f 23783/41356/15462 23782/41352/15462 23735/41199/15462 23733/41194/15462 +f 23785/41360/15461 23783/41357/15461 23733/41195/15461 23730/41188/15461 +f 23787/41366/15463 23785/41361/15464 23730/41189/15464 23729/41187/15463 +f 23923/41698/15642 23825/41479/15372 23641/40979/15370 24008/41856/15642 +f 23925/41701/15641 23923/41698/15641 24008/41856/15641 24007/41854/15641 +f 23927/41705/15639 23925/41701/15639 24007/41854/15639 24006/41852/15639 +f 23858/41526/15637 23927/41706/15637 24006/41853/15637 23621/40932/15637 +f 23618/40929/15587 23935/41720/15732 23944/41732/15587 23616/40925/15587 +f 23935/41721/15586 23934/41719/15733 23942/41730/15586 23944/41733/15586 +f 23934/41719/15585 23936/41722/15585 23940/41727/15585 23942/41730/15585 +f 23936/41722/15584 23789/41371/15520 23786/41362/15518 23940/41727/15584 +f 23789/41372/15520 23774/41321/15519 23784/41358/15519 23786/41363/15518 +f 23774/41322/15516 23773/41319/15516 23780/41344/15517 23784/41359/15516 +f 23773/41320/15734 23775/41324/15734 23781/41346/15515 23780/41345/15515 +f 23737/41212/15469 23897/41651/15469 24061/42029/15469 23895/41644/15469 +f 24062/42032/15735 24063/42040/15736 24064/42048/15735 24065/42051/15735 +f 23821/41468/15375 23646/40996/15375 23645/40989/15375 23644/40987/15375 +f 23823/41473/15374 23821/41469/15373 23644/40988/15374 23642/40981/15373 +f 23825/41480/15372 23823/41474/15371 23642/40982/15371 23641/40980/15370 +f 23859/41528/15339 23858/41527/15340 23621/40933/15339 23620/40931/15339 +f 23861/41530/15737 23859/41528/15336 23620/40931/15337 23619/40930/15336 +f 23863/41532/15334 23861/41530/15738 23619/40930/15334 23617/40927/15333 +f 23865/41536/15332 23863/41532/15331 23617/40927/15331 23616/40926/15331 +f 24053/41996/15739 24062/42033/15740 24065/42052/15739 24054/42004/15740 +f 23877/41577/15741 24033/41908/15741 24066/42054/15741 24067/42057/15741 +f 24068/42060/15742 23889/41612/15742 24069/42067/15742 24070/42070/15742 +f 24068/42061/15743 23722/41166/15743 24047/41968/15743 24071/42073/15743 +f 24072/42076/15470 24073/42079/15470 24031/41900/15470 24030/41897/15470 +f 23722/41167/15744 24068/42062/15745 24073/42080/15745 24072/42077/15745 +f 23727/41181/15725 23722/41168/15725 24072/42078/15725 24030/41898/15725 +f 24068/42063/15724 23549/40782/15724 24031/41901/15724 24073/42081/15724 +f 24074/42082/15746 24075/42085/15746 24076/42088/15746 24077/42091/15746 +f 24078/42094/15747 23545/40761/15748 23544/40758/15748 24079/42097/15747 +f 24080/42100/15749 24081/42103/15749 24082/42106/15749 24083/42109/15750 +f 24084/42112/15706 24085/42115/15706 24086/42118/15706 24087/42121/15706 +f 23872/41557/15706 23871/41554/15706 24088/42124/15706 24089/42127/15706 +f 23648/41005/15706 24090/42130/15706 24091/42133/15706 23649/41008/15706 +f 24092/42136/15705 23898/41655/15705 23819/41465/15705 23818/41461/15705 +f 23812/41433/15705 24093/42139/15705 24094/42142/15705 23813/41436/15705 +f 23551/40789/15703 23550/40785/15703 24095/42145/15703 23888/41608/15703 +f 24096/42148/15703 23892/41630/15703 23891/41628/15703 23894/41641/15703 +f 23817/41458/15703 23816/41455/15703 24097/42151/15703 24098/42154/15703 +f 23879/41587/15705 23878/41584/15705 24099/42157/15705 24100/42160/15705 +f 24056/42010/15562 23742/41239/15562 24094/42143/15562 24093/42140/15562 +f 23529/40703/15751 24062/42034/15751 24074/42083/15751 24077/42092/15751 +f 24101/42163/15752 23795/41386/15752 24087/42122/15752 24086/42119/15752 +f 24036/41920/15753 24041/41945/15754 24098/42155/15753 24097/42152/15753 +f 23893/41634/15556 24102/42171/15556 24096/42149/15556 23894/41642/15556 +f 24103/42179/15755 23561/40806/15755 24082/42107/15755 24081/42104/15755 +f 23539/40732/15721 23801/41404/15721 24089/42128/15756 24088/42125/15720 +f 24053/41997/15562 23530/40707/15562 24076/42089/15562 24075/42086/15562 +f 23795/41387/15377 23794/41383/15377 24084/42113/15377 24087/42123/15377 +f 23530/40708/15739 23529/40704/15739 24077/42093/15739 24076/42090/15739 +f 24040/41937/15757 23542/40746/15757 23545/40762/15757 24078/42095/15757 +f 23874/41566/15758 23897/41652/15759 23898/41656/15758 24092/42137/15759 +f 24102/42172/15760 23889/41613/15761 23892/41631/15760 24096/42150/15760 +f 23742/41240/15731 23538/40725/15731 23813/41437/15731 24094/42144/15731 +f 23533/40714/15762 24040/41938/15763 24078/42096/15764 24079/42098/15765 +f 24052/41988/15716 24063/42041/15715 24100/42161/15716 24099/42158/15715 +f 23543/40754/15766 23533/40715/15766 24079/42099/15766 23544/40759/15766 +f 23815/41447/15557 24036/41921/15557 24097/42153/15557 23816/41456/15557 +f 24062/42035/15767 24053/41998/15768 24075/42087/15767 24074/42084/15768 +f 23546/40767/15769 24056/42011/15769 24093/42141/15769 23812/41434/15769 +f 23873/41561/15717 24101/42164/15717 24086/42120/15717 24085/42116/15717 +f 23636/40968/15770 23645/40990/15770 24080/42101/15770 24083/42110/15770 +f 24041/41946/15556 23814/41442/15556 23817/41459/15556 24098/42156/15556 +f 23561/40807/15771 23636/40969/15772 24083/42111/15772 24082/42108/15772 +f 23870/41546/15773 23539/40733/15773 24088/42126/15773 23871/41555/15773 +f 24048/41971/15720 23646/40997/15720 23649/41009/15720 24091/42134/15720 +f 23741/41234/15562 24052/41989/15562 24099/42159/15562 23878/41585/15562 +f 23647/41002/15542 24033/41909/15542 24090/42131/15542 23648/41006/15542 +f 24033/41910/15717 24048/41972/15717 24091/42135/15717 24090/42132/15717 +f 23801/41405/15377 23800/41400/15377 23872/41558/15377 24089/42129/15377 +f 23549/40783/15557 24068/42064/15557 24095/42146/15557 23550/40786/15557 +f 23645/40991/15726 24103/42180/15727 24081/42105/15726 24080/42102/15774 +f 24063/42042/15469 23877/41578/15469 23879/41588/15469 24100/42162/15469 +f 23777/41332/15469 23874/41567/15469 24092/42138/15469 23818/41462/15469 +f 23794/41384/15775 23873/41562/15775 24085/42117/15775 24084/42114/15775 +f 24068/42066/15754 23738/41220/15776 23888/41609/15753 24095/42147/15776 +f 24104/42187/15777 24105/42190/15778 23900/41661/15778 23899/41658/15777 +f 24106/42193/15779 24107/42196/15779 24108/42199/15779 24109/42202/15779 +f 24061/42030/15704 23903/41670/15704 23896/41648/15704 23895/41645/15704 +f 24110/42205/15704 24111/42208/15704 24112/42211/15704 24113/42214/15704 +f 23902/41667/15704 23901/41664/15704 24114/42217/15704 24115/42220/15704 +f 24060/42027/15702 24059/42024/15702 24116/42223/15702 24117/42226/15702 +f 24118/42229/15702 23547/40772/15702 23541/40743/15702 23540/40739/15702 +f 23876/41573/15702 23875/41570/15702 24119/42232/15702 24120/42235/15702 +f 24121/42238/15470 24045/41962/15470 24044/41959/15470 24122/42241/15470 +f 23880/41590/15780 24123/42244/15470 24124/42247/15470 23881/41593/15470 +f 24125/42250/15781 24126/42253/15782 24127/42256/15782 24128/42259/15781 +f 23543/40755/15719 23542/40747/15719 24127/42257/15719 24126/42254/15719 +f 23742/41241/15469 24056/42012/15469 24110/42206/15469 24113/42215/15469 +f 24062/42036/15783 23529/40705/15783 23900/41662/15783 24105/42191/15784 +f 23889/41614/15743 23721/41161/15743 24122/42242/15743 24044/41960/15743 +f 23777/41333/15785 24101/42165/15786 24120/42236/15785 24119/42233/15741 +f 23897/41653/15787 23548/40778/15788 23903/41671/15787 24061/42031/15788 +f 23870/41547/15789 23546/40768/15789 23547/40773/15789 24118/42230/15790 +f 24102/42173/15562 23893/41635/15562 24112/42212/15562 24111/42209/15562 +f 23561/40808/15791 24103/42181/15791 24104/42188/15791 23899/41659/15792 +f 23530/40709/15469 24053/41999/15469 24106/42194/15469 24109/42203/15469 +f 24041/41947/15715 24052/41990/15716 24115/42221/15715 24114/42218/15716 +f 23782/41353/15793 24036/41922/15794 24123/42245/15794 23880/41591/15794 +f 24040/41939/15795 23533/40716/15796 24108/42200/15795 24107/42197/15795 +f 23533/40717/15739 23530/40710/15740 24109/42204/15739 24108/42201/15740 +f 24053/42000/15768 24040/41940/15768 24107/42198/15768 24106/42195/15768 +f 24056/42013/15468 24102/42174/15468 24111/42210/15468 24110/42207/15468 +f 23893/41636/15797 23742/41242/15797 24113/42216/15797 24112/42213/15797 +f 24036/41923/15798 23815/41448/15798 24124/42248/15798 24123/42246/15798 +f 24063/42043/15786 24048/41973/15741 24117/42227/15741 24116/42224/15741 +f 23721/41162/15725 23736/41204/15725 24121/42239/15725 24122/42243/15725 +f 23775/41325/15799 23543/40756/15800 24126/42255/15799 24125/42251/15799 +f 24101/42166/15801 23873/41563/15801 23876/41574/15801 24120/42237/15801 +f 24103/42182/15802 24062/42037/15802 24105/42192/15802 24104/42189/15802 +f 23781/41347/15803 23775/41326/15804 24125/42252/15804 24128/42260/15803 +f 23814/41443/15562 24041/41948/15562 24114/42219/15562 23901/41665/15562 +f 23539/40734/15801 23870/41548/15801 24118/42231/15801 23540/40740/15801 +f 23542/40748/15805 23781/41348/15806 24128/42261/15807 24127/42258/15806 +f 24052/41991/15469 23741/41235/15469 23902/41668/15469 24115/42222/15469 +f 24048/41974/15801 24033/41911/15801 24060/42028/15801 24117/42228/15801 +f 23877/41579/15240 24063/42044/15240 24116/42225/15240 24059/42025/15240 +f 23815/41449/15808 23735/41200/15809 23881/41594/15808 24124/42249/15808 +f 23874/41568/15240 23777/41334/15240 24119/42234/15240 23875/41571/15240 +f 23736/41205/15810 23890/41621/15810 24045/41963/15810 24121/42240/15810 +f 24129/42262/15470 24130/42265/15470 24131/42268/15470 24132/42271/15470 +f 24046/41965/15470 24133/42274/15470 24071/42074/15470 24047/41969/15470 +f 24134/42277/15782 24038/41931/15782 24037/41928/15782 24135/42280/15781 +f 24136/42283/15702 23779/41342/15702 23778/41339/15702 24137/42286/15702 +f 23740/41228/15704 23739/41225/15704 24138/42289/15704 24139/42292/15704 +f 24140/42295/15702 24141/42298/15702 24067/42058/15702 24066/42055/15702 +f 23743/41247/15704 24051/41985/15704 24032/41904/15704 23744/41251/15704 +f 24142/42301/15779 24143/42304/15779 24144/42307/15779 24145/42310/15779 +f 24146/42313/15777 24147/42316/15778 24148/42319/15777 24149/42322/15778 +f 24056/42014/15469 23737/41213/15469 23740/41229/15469 24139/42293/15469 +f 23538/40726/15240 23877/41580/15240 24067/42059/15240 24141/42299/15240 +f 23870/41549/15811 24101/42167/15811 24136/42284/15811 24137/42287/15811 +f 24103/42183/15791 24048/41975/15791 24146/42314/15791 24149/42323/15791 +f 23738/41221/15562 24102/42175/15562 24138/42290/15562 23739/41226/15562 +f 23782/41354/15803 23781/41349/15803 24134/42278/15803 24135/42281/15803 +f 23539/40735/15547 23538/40727/15547 24141/42300/15547 24140/42296/15547 +f 23721/41163/15810 23889/41615/15810 24133/42275/15810 24046/41966/15810 +f 24101/42168/15789 23777/41335/15789 23779/41343/15789 24136/42285/15789 +f 23546/40769/15237 23870/41550/15237 24137/42288/15237 23778/41340/15237 +f 24052/41992/15812 24041/41949/15812 24143/42305/15812 24142/42302/15812 +f 24036/41924/15805 23782/41355/15805 24135/42282/15807 24037/41929/15805 +f 23815/41450/15724 23890/41622/15724 24131/42269/15724 24130/42266/15724 +f 24040/41941/15813 24053/42001/15813 24145/42311/15813 24144/42308/15813 +f 23742/41243/15549 23893/41637/15548 24051/41986/15549 23743/41248/15548 +f 24102/42176/15814 24056/42015/15815 24139/42294/15797 24138/42291/15816 +f 23889/41616/15724 24068/42065/15724 24071/42075/15724 24133/42276/15724 +f 24048/41976/15817 24063/42045/15817 24147/42317/15817 24146/42315/15817 +f 24063/42046/15818 24062/42038/15819 24148/42320/15818 24147/42318/15819 +f 24062/42039/15564 24103/42184/15564 24149/42324/15564 24148/42321/15564 +f 24053/42002/15724 24052/41993/15724 24142/42303/15724 24145/42312/15724 +f 24041/41950/15820 24040/41942/15820 24144/42309/15820 24143/42306/15820 +f 23781/41350/15799 23542/40749/15799 24038/41932/15799 24134/42279/15799 +f 24033/41912/15811 23539/40736/15811 24140/42297/15811 24066/42056/15811 +f 23736/41206/15725 23735/41201/15725 24129/42263/15725 24132/42272/15725 +f 23735/41202/15821 23815/41451/15822 24130/42267/15822 24129/42264/15822 +f 23890/41623/15823 23736/41207/15824 24132/42273/15823 24131/42270/15823 +f 24150/42325/15703 24070/42071/15703 24069/42068/15703 24151/42328/15703 +f 24152/42331/15705 24153/42334/15705 24058/42021/15705 24057/42018/15705 +f 24154/42337/15706 24155/42340/15706 24156/42343/15706 24157/42346/15706 +f 24158/42349/15705 24159/42352/15705 24160/42355/15705 24161/42358/15705 +f 24162/42361/15703 24163/42364/15703 24164/42367/15703 24165/42370/15703 +f 24166/42373/15706 24035/41917/15706 24034/41915/15706 24039/41934/15706 +f 24050/41982/15749 24049/41979/15750 24167/42376/15750 24168/42379/15750 +f 24042/41953/15747 24169/42382/15748 24170/42385/15747 24043/41956/15748 +f 24064/42049/15746 24055/42007/15746 24054/42005/15746 24065/42053/15746 +f 23800/41401/15825 23795/41388/15825 24154/42338/15825 24157/42347/15825 +f 24103/42185/15771 23645/40992/15772 24168/42380/15772 24167/42377/15772 +f 23738/41222/15760 24068/42066/15760 24070/42072/15760 24150/42326/15760 +f 23893/41638/15243 23890/41624/15243 24163/42365/15243 24162/42362/15243 +f 23741/41236/15716 23877/41581/15715 24161/42359/15716 24160/42356/15715 +f 23814/41444/15556 23893/41639/15556 24162/42363/15556 24165/42371/15556 +f 23870/41551/15826 23800/41402/15826 24157/42348/15826 24156/42344/15826 +f 24036/41925/15239 23542/40750/15239 24170/42386/15239 24169/42383/15239 +f 23777/41336/15827 23737/41214/15828 24153/42335/15769 24152/42332/15829 +f 23546/40770/15469 23777/41337/15469 24152/42333/15469 24057/42019/15469 +f 23742/41244/15562 23741/41237/15562 24160/42357/15562 24159/42353/15562 +f 23815/41452/15753 23814/41445/15753 24165/42372/15753 24164/42368/15753 +f 23737/41215/15562 24056/42016/15562 24058/42022/15562 24153/42336/15562 +f 23645/40993/15770 23646/40998/15770 24050/41983/15770 24168/42381/15770 +f 23877/41582/15469 23538/40728/15469 24158/42350/15469 24161/42360/15469 +f 24101/42169/15717 23870/41552/15717 24156/42345/15717 24155/42341/15717 +f 24048/41977/15755 24103/42186/15830 24167/42378/15755 24049/41980/15755 +f 24102/42177/15556 23738/41223/15556 24150/42327/15556 24151/42329/15556 +f 23795/41389/15831 24101/42170/15831 24155/42342/15831 24154/42339/15831 +f 24041/41951/15757 24036/41926/15757 24169/42384/15757 24042/41954/15757 +f 23801/41406/15832 23539/40737/15542 24035/41918/15542 24166/42374/15542 +f 23542/40751/15766 24040/41943/15766 24043/41957/15766 24170/42387/15766 +f 23538/40729/15548 23742/41245/15549 24159/42354/15548 24158/42351/15549 +f 23889/41617/15558 24102/42178/15558 24151/42330/15558 24069/42069/15558 +f 23647/41003/15825 23801/41407/15825 24166/42375/15825 24039/41935/15825 +f 23890/41625/15742 23815/41453/15742 24164/42369/15742 24163/42366/15742 +f 24063/42047/15768 24052/41994/15768 24055/42008/15768 24064/42050/15768 +o laptop +v 5.629983 1.065456 6.570033 +v 5.634954 1.065456 6.633853 +v 5.656791 1.065456 6.632152 +v 5.655782 1.065456 6.619201 +v 5.919107 0.795456 6.547512 +v 5.919107 0.826354 6.547512 +v 5.924079 0.826354 6.611331 +v 5.924079 0.795456 6.611331 +v 5.646131 0.849285 6.632982 +v 5.651718 0.838463 6.632547 +v 5.675532 0.840718 6.630692 +v 5.669285 0.853328 6.631178 +v 5.667590 0.802217 6.314366 +v 5.662619 0.802217 6.250547 +v 5.894568 0.795456 6.232479 +v 5.899539 0.795456 6.296299 +v 5.616620 0.849285 6.254130 +v 5.639774 0.853328 6.252326 +v 5.646021 0.840718 6.251840 +v 5.622207 0.838463 6.253695 +v 5.616003 1.052730 6.318385 +v 5.610415 1.065456 6.318820 +v 5.605444 1.065456 6.255000 +v 5.611032 1.052730 6.254565 +v 5.627285 1.054751 6.266328 +v 5.633527 1.054751 6.252813 +v 5.627280 1.065456 6.253299 +v 5.628289 1.065456 6.266250 +v 5.663038 1.054751 6.631665 +v 5.654778 1.054751 6.619279 +v 5.640543 1.052730 6.633418 +v 5.635571 1.052730 6.569598 +v 5.692130 0.802217 6.629399 +v 5.687158 0.802217 6.565579 +v 5.894568 0.826354 6.232479 +v 5.899539 0.826354 6.296299 +v 5.671758 0.832337 6.566779 +v 5.652190 0.832337 6.315566 +v 5.647030 0.840718 6.264791 +v 5.674523 0.840718 6.617741 +v 5.647533 0.827823 6.568666 +v 5.646747 0.838463 6.568727 +v 5.627178 0.838463 6.317514 +v 5.627965 0.827823 6.317453 +v 5.630355 0.795456 6.317267 +v 5.622994 0.827823 6.253633 +v 5.625383 0.795456 6.253447 +v 5.654894 0.795456 6.632299 +v 5.652504 0.827823 6.632486 +v 5.649923 0.795456 6.568480 +v 5.647218 0.832337 6.251746 +v 5.676729 0.832337 6.630599 +v 5.641160 0.849285 6.569162 +v 5.621591 0.849285 6.317949 +v 5.633532 0.853328 6.265842 +v 5.661025 0.853328 6.618793 +vn -0.0000 1.0000 -0.0000 +vn 0.9970 -0.0000 -0.0777 +vn 0.0777 -0.0000 0.9970 +vn -0.0284 -0.9996 0.0022 +vn -0.0286 -0.9996 0.0022 +vn -0.0777 -0.0000 -0.9970 +vn -0.9124 -0.4031 0.0711 +vn 0.8892 0.2102 0.4065 +vn 0.8891 0.2102 0.4065 +vn 0.8892 0.2100 0.4064 +vn 0.8155 0.2102 -0.5393 +vn 0.8155 0.2102 -0.5392 +vn 0.8155 0.2101 -0.5393 +vn 0.9926 -0.0937 -0.0773 +vn 0.9869 0.1422 -0.0769 +vn -0.9942 -0.0742 0.0774 +vn -0.9943 -0.0739 0.0774 +vn -0.2384 -0.7964 -0.5558 +vn -0.2384 -0.7964 -0.5559 +vn 0.0937 -0.9956 -0.0073 +vn -0.1821 0.9832 0.0142 +vn -0.1494 -0.7964 0.5861 +vn -0.1494 -0.7964 0.5860 +vn -0.8853 -0.4598 0.0690 +vn -0.9966 -0.0272 0.0776 +vn -0.9966 -0.0275 0.0776 +vn 0.6795 0.7318 -0.0529 +vn 0.9965 0.0311 -0.0776 +vn 0.6877 0.5662 -0.4544 +vn 0.6878 0.5660 -0.4544 +vn 0.6097 0.0208 -0.7923 +vn 0.6097 0.0209 -0.7923 +vn 0.7499 0.5660 0.3424 +vn 0.7251 0.0209 0.6884 +vn 0.7251 0.0208 0.6884 +vn 0.1769 -0.9841 -0.0138 +vn 0.1776 -0.9840 -0.0138 +vn 0.0244 0.9997 -0.0019 +vt 0.843507 0.115975 +vt 0.854445 0.126913 +vt 0.859914 0.126913 +vt 0.843507 0.110506 +vt 0.846470 0.077745 +vt 0.859914 0.128244 +vt 0.758802 0.142316 +vt 0.817861 0.142316 +vt 0.758802 0.182602 +vt 0.817861 0.182602 +vt 0.854445 0.128244 +vt 0.628827 0.198692 +vt 0.847470 0.129216 +vt 0.876080 0.129216 +vt 0.876080 0.212549 +vt 0.884870 0.418901 +vt 0.046050 0.035046 +vt 0.847470 0.212549 +vt 0.602943 0.198692 +vt 0.872433 0.418901 +vt 0.714726 0.043387 +vt 0.706351 0.077745 +vt 0.636292 0.077745 +vt 0.862684 0.131882 +vt 0.692964 0.043387 +vt 0.836163 0.196454 +vt 0.609771 0.142316 +vt 0.816938 0.019277 +vt 0.679134 0.142316 +vt 0.897019 0.170385 +vt 0.654712 0.131781 +vt 0.680596 0.131781 +vt 0.931137 0.218471 +vt 0.680596 0.198692 +vt 0.654712 0.198692 +vt 0.931137 0.301804 +vt 0.714726 0.121039 +vt 0.484881 0.500000 +vt 0.787408 0.125370 +vt 0.910448 0.066311 +vt 0.457664 0.435429 +vt 0.388300 0.435429 +vt 0.718045 0.125370 +vt 0.414821 0.500000 +vt 0.692964 0.121039 +vt 0.554940 0.416667 +vt 0.838909 0.121444 +vt 0.736487 0.095155 +vt 0.625000 0.416667 +vt 0.843507 0.121444 +vt 0.848976 0.126913 +vt 0.843507 0.126913 +vt 0.625000 0.500000 +vt 0.736487 0.121039 +vt 0.554940 0.500000 +vt 0.812478 0.109692 +vt 0.748497 0.222888 +vt 0.884232 0.996204 +vt 0.979811 0.026026 +vt 0.812478 0.149978 +vt 0.979811 0.066311 +vt 0.527027 0.435429 +vt 0.881841 0.149978 +vt 0.843507 0.128244 +vt 0.596390 0.435429 +vt 0.881841 0.109692 +vt 0.817861 0.222888 +vt 0.848976 0.128244 +vt 0.689439 0.142316 +vt 0.886301 0.019277 +vt 0.748497 0.142316 +vt 0.689439 0.182602 +vt 0.748497 0.182602 +vt 0.010615 0.996204 +vt 0.886301 0.059563 +vt 0.838909 0.110506 +vt 0.736487 0.043387 +vt 0.776411 0.077745 +vt 0.838909 0.115975 +vt 0.736487 0.069271 +vt 0.602943 0.131781 +vt 0.872433 0.137963 +vt 0.740196 0.145777 +vt 0.628827 0.131781 +vt 0.813686 0.170385 +vt 0.823529 0.145777 +vt 0.959746 0.218471 +vt 0.689482 0.198692 +vt 0.730721 0.035046 +vt 0.959746 0.301804 +vt 0.813019 0.143230 +vt 0.817575 0.126913 +vt 0.722014 0.258843 +vt 0.813019 0.183516 +vt 0.965588 0.139222 +vt 0.827101 0.120031 +vt 0.826320 0.183516 +vt 0.978888 0.139222 +vt 0.388300 0.395143 +vt 0.609771 0.222888 +vt 0.718045 0.085084 +vt 0.826320 0.143230 +vt 0.836163 0.236739 +vt 0.880457 0.113700 +vt 0.609771 0.182602 +vt 0.689904 0.069271 +vt 0.829067 0.115975 +vt 0.897126 0.092177 +vt 0.862684 0.215216 +vt 0.906978 0.092177 +vt 0.692964 0.069271 +vt 1.005409 0.160745 +vt 0.414821 0.416667 +vt 0.692964 0.095155 +vt 0.689904 0.095155 +vt 0.995557 0.160745 +vt 0.829067 0.121444 +vt 0.680596 0.095155 +vt 0.897019 0.135804 +vt 0.654712 0.121039 +vt 0.689904 0.121039 +vt 0.829067 0.126913 +vt 0.680596 0.121039 +vt 0.680596 0.043387 +vt 0.872433 0.092864 +vt 0.740196 0.111196 +vt 0.689904 0.043387 +vt 0.885461 0.092864 +vt 0.829067 0.110506 +vt 0.680596 0.069271 +vt 0.813686 0.135804 +vt 0.823529 0.111196 +vt 0.660539 0.121039 +vt 0.822863 0.126913 +vt 0.730721 0.468669 +vt 0.791824 0.201543 +vt 0.814932 0.126913 +vt 0.046050 0.468669 +vt 0.714726 0.069271 +vt 0.714726 0.095155 +vt 0.679134 0.222888 +vt 0.884232 0.499889 +vt 0.787408 0.085084 +vt 0.910448 0.026026 +vt 0.010615 0.499889 +vt 0.679134 0.182602 +vt 0.816938 0.059563 +s 1 +usemtl Computer +f 24171/42389/15833 24172/42390/15833 24173/42393/15833 24174/42398/15833 +f 24175/42400/15834 24176/42401/15834 24177/42402/15834 24178/42405/15834 +f 24179/42409/15835 24180/42410/15835 24181/42414/15835 24182/42416/15835 +f 24183/42418/15836 24184/42419/15837 24185/42421/15837 24186/42422/15836 +f 24187/42425/15838 24188/42428/15838 24189/42429/15838 24190/42431/15838 +f 24191/42433/15839 24192/42436/15839 24193/42440/15839 24194/42442/15839 +f 24195/42443/15840 24196/42447/15841 24197/42450/15842 24198/42453/15841 +f 24199/42456/15843 24200/42459/15844 24174/42396/15845 24173/42394/15843 +f 24200/42460/15846 24195/42444/15846 24198/42454/15846 24174/42397/15846 +f 24201/42463/15839 24172/42391/15839 24171/42388/15839 24202/42466/15839 +f 24202/42466/15839 24171/42388/15839 24192/42437/15839 24191/42434/15839 +f 24203/42468/15837 24204/42471/15836 24175/42399/15836 24178/42406/15837 +f 24204/42471/15836 24183/42418/15836 24186/42422/15836 24175/42399/15836 +f 24185/42420/15834 24205/42474/15834 24206/42477/15834 24186/42423/15834 +f 24193/42439/15833 24192/42438/15833 24198/42455/15833 24197/42451/15833 +f 24192/42438/15833 24171/42389/15833 24174/42398/15833 24198/42455/15833 +f 24207/42478/15847 24208/42481/15847 24209/42484/15847 24210/42489/15847 +f 24211/42493/15848 24212/42498/15849 24213/42501/15849 24214/42502/15848 +f 24215/42505/15848 24214/42502/15848 24216/42508/15848 24217/42510/15848 +f 24218/42511/15848 24219/42514/15848 24211/42493/15848 24220/42517/15848 +f 24220/42517/15848 24211/42493/15848 24214/42502/15848 24215/42505/15848 +f 24217/42510/15838 24216/42508/15838 24221/42520/15838 24205/42475/15838 24185/42421/15838 24184/42419/15838 +f 24178/42407/15835 24177/42403/15835 24222/42523/15835 24219/42515/15835 24218/42512/15835 24203/42469/15835 +f 24208/42482/15850 24214/42503/15851 24213/42499/15850 24209/42485/15851 +f 24189/42429/15852 24209/42486/15852 24213/42500/15852 24190/42431/15852 +f 24221/42521/15853 24216/42509/15853 24214/42504/15853 24208/42483/15853 +f 24207/42479/15853 24211/42494/15853 24219/42516/15853 24222/42524/15853 +f 24210/42490/15852 24181/42413/15852 24180/42411/15852 24212/42496/15852 +f 24207/42480/15854 24210/42491/15854 24212/42497/15855 24211/42495/15854 +f 24212/42498/15856 24223/42526/15856 24224/42527/15856 24213/42501/15856 +f 24223/42526/15857 24202/42467/15857 24191/42435/15857 24224/42527/15857 +f 24180/42412/15856 24179/42408/15856 24223/42526/15856 24212/42498/15856 +f 24179/42408/15858 24201/42464/15858 24202/42467/15857 24223/42526/15857 +f 24210/42492/15859 24209/42487/15859 24225/42528/15859 24226/42533/15859 +f 24226/42532/15860 24225/42529/15860 24195/42445/15860 24200/42461/15860 +f 24181/42414/15861 24210/42492/15862 24226/42533/15862 24182/42416/15862 +f 24182/42415/15863 24226/42534/15864 24200/42462/15864 24199/42457/15863 +f 24209/42488/15865 24189/42430/15865 24188/42426/15865 24225/42530/15865 +f 24225/42531/15866 24188/42427/15867 24196/42448/15867 24195/42446/15866 +f 24213/42501/15856 24224/42527/15856 24187/42424/15856 24190/42432/15856 +f 24224/42527/15857 24191/42435/15857 24194/42441/15858 24187/42424/15858 +f 24193/42440/15838 24197/42452/15838 24196/42449/15838 24194/42442/15838 +f 24194/42442/15838 24196/42449/15838 24188/42428/15838 24187/42425/15838 +f 24172/42392/15835 24201/42465/15835 24199/42458/15835 24173/42395/15835 +f 24201/42465/15835 24179/42409/15835 24182/42416/15835 24199/42458/15835 +f 24220/42518/15868 24215/42506/15868 24183/42417/15868 24204/42472/15868 +f 24218/42513/15869 24220/42519/15868 24204/42473/15868 24203/42470/15869 +f 24215/42507/15868 24217/42510/15869 24184/42419/15869 24183/42418/15868 +f 24222/42525/15870 24177/42404/15870 24205/42476/15870 24221/42522/15870 +f 24175/42400/15834 24186/42423/15834 24206/42477/15834 24176/42401/15834 +o marker +v -11.135651 0.657892 -1.673568 +v -11.161632 0.657708 -1.692984 +v -11.161528 0.659166 -1.693138 +v -11.135546 0.659351 -1.673721 +v -11.161596 0.660633 -1.693060 +v -11.135614 0.660818 -1.673644 +v -11.161834 0.662051 -1.692755 +v -11.135853 0.662236 -1.673339 +v -11.162233 0.663367 -1.692234 +v -11.136251 0.663551 -1.672817 +v -11.162777 0.664529 -1.691517 +v -11.136795 0.664714 -1.672100 +v -11.163446 0.665493 -1.690631 +v -11.137465 0.665678 -1.671214 +v -11.164214 0.666223 -1.689611 +v -11.138232 0.666408 -1.670194 +v -11.165051 0.666689 -1.688495 +v -11.139069 0.666874 -1.669079 +v -11.165924 0.666874 -1.687328 +v -11.139942 0.667059 -1.667911 +v -11.166802 0.666771 -1.686153 +v -11.140821 0.666956 -1.666736 +v -11.167649 0.666384 -1.685015 +v -11.141667 0.666569 -1.665598 +v -11.168434 0.665728 -1.683959 +v -11.142452 0.665912 -1.664543 +v -11.169126 0.664828 -1.683025 +v -11.143144 0.665013 -1.663608 +v -11.169698 0.663718 -1.682249 +v -11.143716 0.663902 -1.662832 +v -11.170129 0.662441 -1.681660 +v -11.144147 0.662626 -1.662243 +v -11.170402 0.661047 -1.681282 +v -11.144420 0.661232 -1.661865 +v -11.170506 0.659589 -1.681128 +v -11.144524 0.659773 -1.661712 +v -11.170437 0.658122 -1.681206 +v -11.144455 0.658307 -1.661789 +v -11.170199 0.656703 -1.681511 +v -11.144217 0.656888 -1.662094 +v -11.169800 0.655388 -1.682033 +v -11.143818 0.655573 -1.662616 +v -11.169256 0.654226 -1.682749 +v -11.143274 0.654410 -1.663333 +v -11.168587 0.653261 -1.683635 +v -11.142605 0.653446 -1.664219 +v -11.167819 0.652532 -1.684656 +v -11.141838 0.652716 -1.665239 +v -11.166983 0.652066 -1.685771 +v -11.141001 0.652250 -1.666354 +v -11.166109 0.651880 -1.686938 +v -11.140127 0.652065 -1.667522 +v -11.165232 0.651983 -1.688114 +v -11.139250 0.652168 -1.668697 +v -11.164384 0.652370 -1.689251 +v -11.138402 0.652555 -1.669835 +v -11.163600 0.653027 -1.690307 +v -11.137618 0.653212 -1.670891 +v -11.162908 0.653927 -1.691241 +v -11.136926 0.654112 -1.671825 +v -11.162335 0.655037 -1.692018 +v -11.136353 0.655222 -1.672601 +v -11.161904 0.656314 -1.692606 +v -11.135922 0.656498 -1.673190 +v -11.051228 0.658935 -1.608105 +v -11.051149 0.660014 -1.608219 +v -11.051200 0.661099 -1.608162 +v -11.051376 0.662149 -1.607936 +v -11.051672 0.663123 -1.607550 +v -11.052074 0.663984 -1.607019 +v -11.052570 0.664698 -1.606363 +v -11.053138 0.665238 -1.605609 +v -11.053758 0.665582 -1.604783 +v -11.054404 0.665720 -1.603919 +v -11.055054 0.665643 -1.603049 +v -11.055680 0.665357 -1.602207 +v -11.056261 0.664871 -1.601425 +v -11.056773 0.664204 -1.600734 +v -11.057198 0.663383 -1.600159 +v -11.057516 0.662438 -1.599723 +v -11.057717 0.661406 -1.599444 +v -11.057795 0.660327 -1.599330 +v -11.057744 0.659241 -1.599387 +v -11.057569 0.658191 -1.599613 +v -11.057273 0.657218 -1.600000 +v -11.056870 0.656357 -1.600530 +v -11.056375 0.655643 -1.601186 +v -11.055807 0.655103 -1.601941 +v -11.055187 0.654759 -1.602766 +v -11.054541 0.654621 -1.603631 +v -11.053891 0.654697 -1.604500 +v -11.053264 0.654984 -1.605342 +v -11.052683 0.655470 -1.606124 +v -11.052171 0.656136 -1.606816 +v -11.051747 0.656958 -1.607390 +v -11.051429 0.657902 -1.607826 +v -11.054838 0.657878 -1.610374 +v -11.054368 0.657078 -1.612243 +v -11.054095 0.658472 -1.612621 +v -11.054636 0.658910 -1.610653 +v -11.055157 0.656934 -1.609938 +v -11.054799 0.655801 -1.611654 +v -11.055580 0.656112 -1.609363 +v -11.055371 0.654691 -1.610878 +v -11.056092 0.655446 -1.608672 +v -11.056063 0.653792 -1.609944 +v -11.056673 0.654959 -1.607890 +v -11.056847 0.653135 -1.608888 +v -11.057301 0.654673 -1.607048 +v -11.057694 0.652748 -1.607750 +v -11.057950 0.654597 -1.606178 +v -11.058572 0.652645 -1.606575 +v -11.058597 0.654734 -1.605314 +v -11.059446 0.652830 -1.605407 +v -11.059216 0.655079 -1.604488 +v -11.060283 0.653296 -1.604292 +v -11.059784 0.655619 -1.603734 +v -11.061050 0.654026 -1.603272 +v -11.060279 0.656333 -1.603078 +v -11.061719 0.654990 -1.602386 +v -11.060681 0.657193 -1.602547 +v -11.062263 0.656152 -1.601669 +v -11.060977 0.658167 -1.602161 +v -11.062662 0.657468 -1.601147 +v -11.061153 0.659217 -1.601935 +v -11.062901 0.658886 -1.600842 +v -11.061204 0.660302 -1.601878 +v -11.062968 0.660353 -1.600765 +v -11.061127 0.661382 -1.601992 +v -11.062864 0.661811 -1.600918 +v -11.060925 0.662414 -1.602271 +v -11.062592 0.663206 -1.601296 +v -11.060606 0.663359 -1.602707 +v -11.062160 0.664482 -1.601885 +v -11.060183 0.664180 -1.603281 +v -11.061588 0.665592 -1.602661 +v -11.059670 0.664846 -1.603973 +v -11.060897 0.666492 -1.603595 +v -11.059090 0.665333 -1.604755 +v -11.060113 0.667149 -1.604651 +v -11.058462 0.665619 -1.605597 +v -11.059265 0.667536 -1.605789 +v -11.057814 0.665695 -1.606466 +v -11.058388 0.667639 -1.606964 +v -11.057166 0.665558 -1.607331 +v -11.057514 0.667454 -1.608132 +v -11.056547 0.665213 -1.608156 +v -11.056677 0.666987 -1.609247 +v -11.055979 0.664674 -1.608911 +v -11.055909 0.666258 -1.610267 +v -11.055484 0.663960 -1.609567 +v -11.055241 0.665294 -1.611153 +v -11.055081 0.663099 -1.610097 +v -11.054696 0.664131 -1.611870 +v -11.054786 0.662125 -1.610484 +v -11.054297 0.662816 -1.612392 +v -11.054609 0.661075 -1.610710 +v -11.054059 0.661397 -1.612697 +v -11.054559 0.659990 -1.610767 +v -11.053991 0.659931 -1.612774 +vn 0.5944 -0.1260 -0.7942 +vn 0.5968 0.0701 -0.7993 +vn 0.5763 0.2631 -0.7737 +vn 0.5335 0.4467 -0.7182 +vn 0.5337 0.4463 -0.7184 +vn 0.4705 0.6124 -0.6354 +vn 0.4704 0.6125 -0.6353 +vn 0.3891 0.7549 -0.5279 +vn 0.2930 0.8682 -0.4004 +vn 0.1855 0.9484 -0.2572 +vn 0.0709 0.9920 -0.1043 +vn -0.0465 0.9975 0.0528 +vn -0.1619 0.9648 0.2075 +vn -0.2713 0.8948 0.3546 +vn -0.2712 0.8949 0.3544 +vn -0.3700 0.7908 0.4876 +vn -0.3702 0.7905 0.4879 +vn -0.4549 0.6558 0.6025 +vn -0.5220 0.4961 0.6938 +vn -0.5692 0.3170 0.7586 +vn -0.5944 0.1260 0.7942 +vn -0.5968 -0.0701 0.7993 +vn -0.5763 -0.2631 0.7737 +vn -0.5335 -0.4467 0.7182 +vn -0.5337 -0.4463 0.7184 +vn -0.4705 -0.6124 0.6354 +vn -0.4704 -0.6125 0.6353 +vn -0.3891 -0.7549 0.5279 +vn -0.2930 -0.8682 0.4004 +vn -0.1855 -0.9484 0.2572 +vn -0.0709 -0.9920 0.1043 +vn 0.0465 -0.9975 -0.0528 +vn 0.1619 -0.9648 -0.2075 +vn 0.2713 -0.8948 -0.3546 +vn 0.2712 -0.8949 -0.3544 +vn 0.3700 -0.7908 -0.4876 +vn 0.3702 -0.7905 -0.4879 +vn 0.4549 -0.6558 -0.6025 +vn -0.8010 -0.0057 -0.5986 +vn 0.5220 -0.4961 -0.6938 +vn 0.5692 -0.3170 -0.7586 +vn 0.8010 0.0057 0.5986 +vn 0.9521 -0.1086 0.2859 +vn 0.9351 -0.1730 0.3092 +vn 0.9110 -0.2304 0.3420 +vn 0.8805 -0.2789 0.3834 +vn 0.8451 -0.3162 0.4311 +vn 0.8057 -0.3415 0.4840 +vn 0.7642 -0.3533 0.5396 +vn 0.7219 -0.3512 0.5962 +vn 0.6809 -0.3356 0.6510 +vn 0.6424 -0.3069 0.7023 +vn 0.6076 -0.2661 0.7484 +vn 0.5784 -0.2149 0.7869 +vn 0.5557 -0.1553 0.8167 +vn 0.5403 -0.0893 0.8367 +vn 0.5330 -0.0196 0.8459 +vn 0.5338 0.0507 0.8441 +vn 0.5429 0.1192 0.8313 +vn 0.5598 0.1837 0.8080 +vn 0.5839 0.2410 0.7752 +vn 0.6145 0.2896 0.7339 +vn 0.6499 0.3269 0.6862 +vn 0.6893 0.3521 0.6332 +vn 0.7307 0.3639 0.5776 +vn 0.7730 0.3619 0.5210 +vn 0.8141 0.3462 0.4662 +vn 0.8527 0.3175 0.4149 +vn 0.8874 0.2767 0.3688 +vn 0.9165 0.2256 0.3303 +vn 0.9392 0.1659 0.3005 +vn 0.9546 0.0999 0.2805 +vn 0.9620 0.0302 0.2714 +vn 0.9611 -0.0401 0.2731 +vn 0.5968 0.0702 -0.7993 +vn 0.5336 0.4464 -0.7183 +vn 0.4704 0.6124 -0.6353 +vn 0.2931 0.8682 -0.4004 +vn 0.1854 0.9484 -0.2571 +vn 0.0710 0.9920 -0.1044 +vn -0.0466 0.9975 0.0528 +vn -0.1619 0.9647 0.2075 +vn -0.2713 0.8948 0.3545 +vn -0.3702 0.7905 0.4878 +vn -0.5220 0.4962 0.6938 +vn -0.5692 0.3171 0.7586 +vn -0.5968 -0.0702 0.7993 +vn -0.5336 -0.4464 0.7183 +vn -0.4704 -0.6124 0.6353 +vn -0.2931 -0.8682 0.4004 +vn -0.1854 -0.9484 0.2571 +vn -0.0710 -0.9920 0.1044 +vn 0.0466 -0.9975 -0.0528 +vn 0.1619 -0.9647 -0.2075 +vn 0.2713 -0.8948 -0.3545 +vn 0.3702 -0.7905 -0.4878 +vn 0.5220 -0.4962 -0.6938 +vn 0.5692 -0.3171 -0.7586 +vt 0.237251 0.520373 +vt 0.229481 0.520373 +vt 0.410159 0.335830 +vt 0.415502 0.765085 +vt 0.237251 0.521248 +vt 0.231424 0.517285 +vt 0.229481 0.521248 +vt 0.237008 0.521248 +vt 0.231788 0.517249 +vt 0.237008 0.520373 +vt 0.415335 0.751671 +vt 0.236766 0.521248 +vt 0.232137 0.517143 +vt 0.236766 0.520373 +vt 0.415168 0.738256 +vt 0.236523 0.521248 +vt 0.232460 0.516971 +vt 0.236523 0.520373 +vt 0.415001 0.724842 +vt 0.236280 0.521248 +vt 0.232742 0.516739 +vt 0.236280 0.520373 +vt 0.414834 0.711428 +vt 0.236037 0.521248 +vt 0.232974 0.516456 +vt 0.236037 0.520373 +vt 0.414667 0.698014 +vt 0.235794 0.521248 +vt 0.233147 0.516134 +vt 0.235794 0.520373 +vt 0.414500 0.684600 +vt 0.235551 0.521248 +vt 0.233253 0.515784 +vt 0.235551 0.520373 +vt 0.414333 0.671185 +vt 0.235309 0.521248 +vt 0.233289 0.515420 +vt 0.235309 0.520373 +vt 0.414166 0.657771 +vt 0.235066 0.521248 +vt 0.233253 0.515056 +vt 0.235066 0.520373 +vt 0.413999 0.644357 +vt 0.234823 0.521248 +vt 0.233147 0.514707 +vt 0.234823 0.520373 +vt 0.413832 0.630943 +vt 0.234580 0.521248 +vt 0.232974 0.514384 +vt 0.234580 0.520373 +vt 0.413665 0.617528 +vt 0.234337 0.521248 +vt 0.232742 0.514102 +vt 0.234337 0.520373 +vt 0.413498 0.604114 +vt 0.234095 0.521248 +vt 0.232460 0.513870 +vt 0.234095 0.520373 +vt 0.413331 0.590700 +vt 0.233852 0.521248 +vt 0.232137 0.513698 +vt 0.233852 0.520373 +vt 0.413164 0.577286 +vt 0.233609 0.521248 +vt 0.231788 0.513591 +vt 0.233609 0.520373 +vt 0.412997 0.563872 +vt 0.233366 0.521248 +vt 0.231424 0.513556 +vt 0.233366 0.520373 +vt 0.412830 0.550457 +vt 0.233123 0.521248 +vt 0.231060 0.513591 +vt 0.233123 0.520373 +vt 0.412663 0.537043 +vt 0.232881 0.521248 +vt 0.230710 0.513698 +vt 0.232881 0.520373 +vt 0.412496 0.523629 +vt 0.232638 0.521248 +vt 0.230388 0.513870 +vt 0.232638 0.520373 +vt 0.412329 0.510215 +vt 0.232395 0.521248 +vt 0.230105 0.514102 +vt 0.232395 0.520373 +vt 0.412162 0.496801 +vt 0.232152 0.521248 +vt 0.229873 0.514384 +vt 0.232152 0.520373 +vt 0.411995 0.483386 +vt 0.231909 0.521248 +vt 0.229701 0.514707 +vt 0.231909 0.520373 +vt 0.411828 0.469972 +vt 0.231667 0.521248 +vt 0.229595 0.515056 +vt 0.231667 0.520373 +vt 0.411662 0.456558 +vt 0.231424 0.521248 +vt 0.229559 0.515420 +vt 0.231424 0.520373 +vt 0.411494 0.443144 +vt 0.231181 0.521248 +vt 0.229595 0.515784 +vt 0.231181 0.520373 +vt 0.411328 0.429729 +vt 0.230938 0.521248 +vt 0.229701 0.516134 +vt 0.230938 0.520373 +vt 0.411161 0.416315 +vt 0.230695 0.521248 +vt 0.229873 0.516456 +vt 0.230695 0.520373 +vt 0.410994 0.402901 +vt 0.230453 0.521248 +vt 0.230105 0.516739 +vt 0.230453 0.520373 +vt 0.410827 0.389487 +vt 0.230210 0.521248 +vt 0.230388 0.516971 +vt 0.230210 0.520373 +vt 0.410660 0.376073 +vt 0.230710 0.517143 +vt 0.229967 0.521248 +vt 0.229967 0.520373 +vt 0.410493 0.362658 +vt 0.231060 0.517249 +vt 0.229724 0.521248 +vt 0.229724 0.520373 +vt 0.410326 0.349244 +vt 0.275995 0.553405 +vt 0.300022 0.554367 +vt 0.203915 0.554367 +vt 0.280495 0.552962 +vt 0.297019 0.554367 +vt 0.284822 0.551650 +vt 0.294016 0.554367 +vt 0.288810 0.549518 +vt 0.291012 0.554367 +vt 0.292305 0.546650 +vt 0.288009 0.554367 +vt 0.295174 0.543154 +vt 0.285006 0.554367 +vt 0.297305 0.539167 +vt 0.282002 0.554367 +vt 0.298618 0.534840 +vt 0.278999 0.554367 +vt 0.299061 0.530340 +vt 0.275995 0.554367 +vt 0.298618 0.525840 +vt 0.272992 0.554367 +vt 0.297305 0.521513 +vt 0.269989 0.554367 +vt 0.295174 0.517525 +vt 0.266985 0.554367 +vt 0.292305 0.514030 +vt 0.263982 0.554367 +vt 0.288810 0.511161 +vt 0.260979 0.554367 +vt 0.284822 0.509030 +vt 0.257975 0.554367 +vt 0.280495 0.507717 +vt 0.254972 0.554367 +vt 0.275995 0.507274 +vt 0.251969 0.554367 +vt 0.271496 0.507717 +vt 0.248965 0.554367 +vt 0.267169 0.509030 +vt 0.245962 0.554367 +vt 0.263181 0.511161 +vt 0.242959 0.554367 +vt 0.259686 0.514030 +vt 0.239955 0.554367 +vt 0.256817 0.517525 +vt 0.236952 0.554367 +vt 0.254685 0.521513 +vt 0.233948 0.554367 +vt 0.253373 0.525840 +vt 0.230945 0.554367 +vt 0.252930 0.530340 +vt 0.227942 0.554367 +vt 0.253373 0.534840 +vt 0.224938 0.554367 +vt 0.254685 0.539167 +vt 0.221935 0.554367 +vt 0.256817 0.543154 +vt 0.218932 0.554367 +vt 0.259686 0.546650 +vt 0.215928 0.554367 +vt 0.263181 0.549518 +vt 0.212925 0.554367 +vt 0.267169 0.551650 +vt 0.209922 0.554367 +vt 0.271496 0.552962 +vt 0.206918 0.554367 +vt 0.031250 0.534047 +vt 0.206918 0.557639 +vt 0.031250 0.534047 +vt 0.448247 0.347356 +vt 0.000000 0.534047 +vt 1.000000 0.534047 +vt 0.448080 0.333942 +vt 0.453424 0.763196 +vt 0.000000 0.534047 +vt 1.000000 0.534047 +vt 0.300022 0.557639 +vt 0.203915 0.557639 +vt 0.062500 0.534047 +vt 0.209922 0.557639 +vt 0.062500 0.534047 +vt 0.448414 0.360770 +vt 0.093750 0.534047 +vt 0.212925 0.557639 +vt 0.093750 0.534047 +vt 0.448581 0.374184 +vt 0.125000 0.534047 +vt 0.215928 0.557639 +vt 0.125000 0.534047 +vt 0.448748 0.387598 +vt 0.156250 0.534047 +vt 0.218932 0.557639 +vt 0.156250 0.534047 +vt 0.448915 0.401013 +vt 0.187500 0.534047 +vt 0.221935 0.557639 +vt 0.187500 0.534047 +vt 0.449082 0.414427 +vt 0.218750 0.534047 +vt 0.224938 0.557639 +vt 0.218750 0.534047 +vt 0.449249 0.427841 +vt 0.250000 0.534047 +vt 0.227942 0.557639 +vt 0.250000 0.534047 +vt 0.449416 0.441255 +vt 0.281250 0.534047 +vt 0.230945 0.557639 +vt 0.281250 0.534047 +vt 0.449583 0.454670 +vt 0.312500 0.534047 +vt 0.233948 0.557639 +vt 0.312500 0.534047 +vt 0.449750 0.468084 +vt 0.343750 0.534047 +vt 0.236952 0.557639 +vt 0.343750 0.534047 +vt 0.449917 0.481498 +vt 0.375000 0.534047 +vt 0.239955 0.557639 +vt 0.375000 0.534047 +vt 0.450084 0.494912 +vt 0.406250 0.534047 +vt 0.242959 0.557639 +vt 0.406250 0.534047 +vt 0.450251 0.508326 +vt 0.437500 0.534047 +vt 0.245962 0.557639 +vt 0.437500 0.534047 +vt 0.450418 0.521741 +vt 0.468750 0.534047 +vt 0.248965 0.557639 +vt 0.468750 0.534047 +vt 0.450585 0.535155 +vt 0.500000 0.534047 +vt 0.251969 0.557639 +vt 0.500000 0.534047 +vt 0.450752 0.548569 +vt 0.531250 0.534047 +vt 0.254972 0.557639 +vt 0.531250 0.534047 +vt 0.450919 0.561983 +vt 0.562500 0.534047 +vt 0.257975 0.557639 +vt 0.562500 0.534047 +vt 0.451086 0.575397 +vt 0.593750 0.534047 +vt 0.260979 0.557639 +vt 0.593750 0.534047 +vt 0.451253 0.588812 +vt 0.625000 0.534047 +vt 0.263982 0.557639 +vt 0.625000 0.534047 +vt 0.451420 0.602226 +vt 0.656250 0.534047 +vt 0.266985 0.557639 +vt 0.656250 0.534047 +vt 0.451587 0.615640 +vt 0.687500 0.534047 +vt 0.269989 0.557639 +vt 0.687500 0.534047 +vt 0.451754 0.629054 +vt 0.718750 0.534047 +vt 0.272992 0.557639 +vt 0.718750 0.534047 +vt 0.451921 0.642469 +vt 0.750000 0.534047 +vt 0.275995 0.557639 +vt 0.750000 0.534047 +vt 0.452088 0.655883 +vt 0.781250 0.534047 +vt 0.278999 0.557639 +vt 0.781250 0.534047 +vt 0.452255 0.669297 +vt 0.812500 0.534047 +vt 0.282002 0.557639 +vt 0.812500 0.534047 +vt 0.452422 0.682711 +vt 0.843750 0.534047 +vt 0.285006 0.557639 +vt 0.843750 0.534047 +vt 0.452589 0.696125 +vt 0.875000 0.534047 +vt 0.288009 0.557639 +vt 0.875000 0.534047 +vt 0.452756 0.709540 +vt 0.906250 0.534047 +vt 0.291012 0.557639 +vt 0.906250 0.534047 +vt 0.452923 0.722954 +vt 0.937500 0.534047 +vt 0.294016 0.557639 +vt 0.937500 0.534047 +vt 0.453090 0.736368 +vt 0.968750 0.534047 +vt 0.297019 0.557639 +vt 0.968750 0.534047 +vt 0.453257 0.749782 +s 1 +usemtl marker +f 24227/42535/15871 24228/42539/15871 24229/42542/15871 24230/42544/15871 +f 24230/42544/15872 24229/42542/15872 24231/42546/15872 24232/42548/15872 +f 24232/42548/15873 24231/42546/15873 24233/42550/15873 24234/42552/15873 +f 24234/42552/15874 24233/42550/15875 24235/42554/15875 24236/42556/15874 +f 24236/42556/15876 24235/42554/15877 24237/42558/15877 24238/42560/15876 +f 24238/42560/15878 24237/42558/15878 24239/42562/15878 24240/42564/15878 +f 24240/42564/15879 24239/42562/15879 24241/42566/15879 24242/42568/15879 +f 24242/42568/15880 24241/42566/15880 24243/42570/15880 24244/42572/15880 +f 24244/42572/15881 24243/42570/15881 24245/42574/15881 24246/42576/15881 +f 24246/42576/15882 24245/42574/15882 24247/42578/15882 24248/42580/15882 +f 24248/42580/15883 24247/42578/15883 24249/42582/15883 24250/42584/15883 +f 24250/42584/15884 24249/42582/15885 24251/42586/15885 24252/42588/15884 +f 24252/42588/15886 24251/42586/15887 24253/42590/15887 24254/42592/15886 +f 24254/42592/15888 24253/42590/15888 24255/42594/15888 24256/42596/15888 +f 24256/42596/15889 24255/42594/15889 24257/42598/15889 24258/42600/15889 +f 24258/42600/15890 24257/42598/15890 24259/42602/15890 24260/42604/15890 +f 24260/42604/15891 24259/42602/15891 24261/42606/15891 24262/42608/15891 +f 24262/42608/15892 24261/42606/15892 24263/42610/15892 24264/42612/15892 +f 24264/42612/15893 24263/42610/15893 24265/42614/15893 24266/42616/15893 +f 24266/42616/15894 24265/42614/15895 24267/42618/15895 24268/42620/15894 +f 24268/42620/15896 24267/42618/15897 24269/42622/15897 24270/42624/15896 +f 24270/42624/15898 24269/42622/15898 24271/42626/15898 24272/42628/15898 +f 24272/42628/15899 24271/42626/15899 24273/42630/15899 24274/42632/15899 +f 24274/42632/15900 24273/42630/15900 24275/42634/15900 24276/42636/15900 +f 24276/42636/15901 24275/42634/15901 24277/42638/15901 24278/42640/15901 +f 24278/42640/15902 24277/42638/15902 24279/42642/15902 24280/42644/15902 +f 24280/42644/15903 24279/42642/15903 24281/42646/15903 24282/42648/15903 +f 24282/42648/15904 24281/42646/15905 24283/42650/15905 24284/42652/15904 +f 24284/42652/15906 24283/42650/15907 24285/42654/15907 24286/42656/15906 +f 24286/42656/15908 24285/42654/15908 24287/42659/15908 24288/42660/15908 +f 24229/42543/15909 24228/42540/15909 24289/42662/15909 24287/42658/15909 24285/42655/15909 24283/42651/15909 24281/42647/15909 24279/42643/15909 24277/42639/15909 24275/42635/15909 24273/42631/15909 24271/42627/15909 24269/42623/15909 24267/42619/15909 24265/42615/15909 24263/42611/15909 24261/42607/15909 24259/42603/15909 24257/42599/15909 24255/42595/15909 24253/42591/15909 24251/42587/15909 24249/42583/15909 24247/42579/15909 24245/42575/15909 24243/42571/15909 24241/42567/15909 24239/42563/15909 24237/42559/15909 24235/42555/15909 24233/42551/15909 24231/42547/15909 +f 24288/42660/15910 24287/42659/15910 24289/42663/15910 24290/42664/15910 +f 24290/42664/15911 24289/42663/15911 24228/42541/15911 24227/42536/15911 +f 24291/42666/15912 24292/42669/15912 24293/42671/15912 24294/42673/15912 24295/42675/15912 24296/42677/15912 24297/42679/15912 24298/42681/15912 24299/42683/15912 24300/42685/15912 24301/42687/15912 24302/42689/15912 24303/42691/15912 24304/42693/15912 24305/42695/15912 24306/42697/15912 24307/42699/15912 24308/42701/15912 24309/42703/15912 24310/42705/15912 24311/42707/15912 24312/42709/15912 24313/42711/15912 24314/42713/15912 24315/42715/15912 24316/42717/15912 24317/42719/15912 24318/42721/15912 24319/42723/15912 24320/42725/15912 24321/42727/15912 24322/42729/15912 +f 24323/42731/15913 24324/42733/15913 24325/42735/15913 24326/42739/15913 +f 24327/42743/15914 24328/42745/15914 24324/42733/15914 24323/42731/15914 +f 24329/42747/15915 24330/42749/15915 24328/42745/15915 24327/42743/15915 +f 24331/42751/15916 24332/42753/15916 24330/42749/15916 24329/42747/15916 +f 24333/42755/15917 24334/42757/15917 24332/42753/15917 24331/42751/15917 +f 24335/42759/15918 24336/42761/15918 24334/42757/15918 24333/42755/15918 +f 24337/42763/15919 24338/42765/15919 24336/42761/15919 24335/42759/15919 +f 24339/42767/15920 24340/42769/15920 24338/42765/15920 24337/42763/15920 +f 24341/42771/15921 24342/42773/15921 24340/42769/15921 24339/42767/15921 +f 24343/42775/15922 24344/42777/15922 24342/42773/15922 24341/42771/15922 +f 24345/42779/15923 24346/42781/15923 24344/42777/15923 24343/42775/15923 +f 24347/42783/15924 24348/42785/15924 24346/42781/15924 24345/42779/15924 +f 24349/42787/15925 24350/42789/15925 24348/42785/15925 24347/42783/15925 +f 24351/42791/15926 24352/42793/15926 24350/42789/15926 24349/42787/15926 +f 24353/42795/15927 24354/42797/15927 24352/42793/15927 24351/42791/15927 +f 24355/42799/15928 24356/42801/15928 24354/42797/15928 24353/42795/15928 +f 24357/42803/15929 24358/42805/15929 24356/42801/15929 24355/42799/15929 +f 24359/42807/15930 24360/42809/15930 24358/42805/15930 24357/42803/15930 +f 24361/42811/15931 24362/42813/15931 24360/42809/15931 24359/42807/15931 +f 24363/42815/15932 24364/42817/15932 24362/42813/15932 24361/42811/15932 +f 24365/42819/15933 24366/42821/15933 24364/42817/15933 24363/42815/15933 +f 24367/42823/15934 24368/42825/15934 24366/42821/15934 24365/42819/15934 +f 24369/42827/15935 24370/42829/15935 24368/42825/15935 24367/42823/15935 +f 24371/42831/15936 24372/42833/15936 24370/42829/15936 24369/42827/15936 +f 24373/42835/15937 24374/42837/15937 24372/42833/15937 24371/42831/15937 +f 24375/42839/15938 24376/42841/15938 24374/42837/15938 24373/42835/15938 +f 24377/42843/15939 24378/42845/15939 24376/42841/15939 24375/42839/15939 +f 24379/42847/15940 24380/42849/15940 24378/42845/15940 24377/42843/15940 +f 24381/42851/15941 24382/42853/15941 24380/42849/15941 24379/42847/15941 +f 24383/42855/15942 24384/42857/15942 24382/42853/15942 24381/42851/15942 +f 24385/42859/15943 24386/42861/15943 24384/42857/15943 24383/42855/15943 +f 24326/42740/15944 24325/42736/15944 24386/42861/15944 24385/42859/15944 +f 24291/42667/15871 24326/42741/15871 24385/42860/15871 24292/42670/15871 +f 24292/42670/15945 24385/42860/15945 24383/42856/15945 24293/42672/15945 +f 24293/42672/15873 24383/42856/15873 24381/42852/15873 24294/42674/15873 +f 24294/42674/15946 24381/42852/15946 24379/42848/15946 24295/42676/15946 +f 24295/42676/15947 24379/42848/15947 24377/42844/15947 24296/42678/15947 +f 24296/42678/15878 24377/42844/15878 24375/42840/15878 24297/42680/15878 +f 24297/42680/15948 24375/42840/15948 24373/42836/15948 24298/42682/15948 +f 24298/42682/15949 24373/42836/15949 24371/42832/15949 24299/42684/15949 +f 24299/42684/15950 24371/42832/15950 24369/42828/15950 24300/42686/15950 +f 24300/42686/15951 24369/42828/15951 24367/42824/15951 24301/42688/15951 +f 24301/42688/15952 24367/42824/15952 24365/42820/15952 24302/42690/15952 +f 24302/42690/15953 24365/42820/15953 24363/42816/15953 24303/42692/15953 +f 24303/42692/15954 24363/42816/15954 24361/42812/15954 24304/42694/15954 +f 24304/42694/15888 24361/42812/15888 24359/42808/15888 24305/42696/15888 +f 24305/42696/15955 24359/42808/15955 24357/42804/15955 24306/42698/15955 +f 24306/42698/15956 24357/42804/15956 24355/42800/15956 24307/42700/15956 +f 24307/42700/15891 24355/42800/15891 24353/42796/15891 24308/42702/15891 +f 24308/42702/15957 24353/42796/15957 24351/42792/15957 24309/42704/15957 +f 24309/42704/15893 24351/42792/15893 24349/42788/15893 24310/42706/15893 +f 24310/42706/15958 24349/42788/15958 24347/42784/15958 24311/42708/15958 +f 24311/42708/15959 24347/42784/15959 24345/42780/15959 24312/42710/15959 +f 24312/42710/15898 24345/42780/15898 24343/42776/15898 24313/42712/15898 +f 24313/42712/15960 24343/42776/15960 24341/42772/15960 24314/42714/15960 +f 24314/42714/15961 24341/42772/15961 24339/42768/15961 24315/42716/15961 +f 24315/42716/15962 24339/42768/15962 24337/42764/15962 24316/42718/15962 +f 24316/42718/15963 24337/42764/15963 24335/42760/15963 24317/42720/15963 +f 24317/42720/15964 24335/42760/15964 24333/42756/15964 24318/42722/15964 +f 24318/42722/15965 24333/42756/15965 24331/42752/15965 24319/42724/15965 +f 24319/42724/15966 24331/42752/15966 24329/42748/15966 24320/42726/15966 +f 24320/42726/15908 24329/42748/15908 24327/42744/15908 24321/42728/15908 +f 24321/42728/15967 24327/42744/15967 24323/42732/15967 24322/42730/15967 +f 24322/42730/15968 24323/42732/15968 24326/42742/15968 24291/42668/15968 +f 24324/42734/15911 24290/42665/15911 24227/42537/15911 24325/42737/15911 +f 24328/42746/15910 24288/42661/15910 24290/42665/15910 24324/42734/15910 +f 24330/42750/15908 24286/42657/15908 24288/42661/15908 24328/42746/15908 +f 24332/42754/15907 24284/42653/15906 24286/42657/15906 24330/42750/15907 +f 24334/42758/15905 24282/42649/15904 24284/42653/15904 24332/42754/15905 +f 24336/42762/15903 24280/42645/15903 24282/42649/15903 24334/42758/15903 +f 24338/42766/15902 24278/42641/15902 24280/42645/15902 24336/42762/15902 +f 24340/42770/15901 24276/42637/15901 24278/42641/15901 24338/42766/15901 +f 24342/42774/15900 24274/42633/15900 24276/42637/15900 24340/42770/15900 +f 24344/42778/15899 24272/42629/15899 24274/42633/15899 24342/42774/15899 +f 24346/42782/15898 24270/42625/15898 24272/42629/15898 24344/42778/15898 +f 24348/42786/15897 24268/42621/15896 24270/42625/15896 24346/42782/15897 +f 24350/42790/15895 24266/42617/15894 24268/42621/15894 24348/42786/15895 +f 24352/42794/15893 24264/42613/15893 24266/42617/15893 24350/42790/15893 +f 24354/42798/15892 24262/42609/15892 24264/42613/15892 24352/42794/15892 +f 24356/42802/15891 24260/42605/15891 24262/42609/15891 24354/42798/15891 +f 24358/42806/15890 24258/42601/15890 24260/42605/15890 24356/42802/15890 +f 24360/42810/15889 24256/42597/15889 24258/42601/15889 24358/42806/15889 +f 24362/42814/15888 24254/42593/15888 24256/42597/15888 24360/42810/15888 +f 24364/42818/15887 24252/42589/15886 24254/42593/15886 24362/42814/15887 +f 24366/42822/15885 24250/42585/15884 24252/42589/15884 24364/42818/15885 +f 24368/42826/15883 24248/42581/15883 24250/42585/15883 24366/42822/15883 +f 24370/42830/15882 24246/42577/15882 24248/42581/15882 24368/42826/15882 +f 24372/42834/15881 24244/42573/15881 24246/42577/15881 24370/42830/15881 +f 24374/42838/15880 24242/42569/15880 24244/42573/15880 24372/42834/15880 +f 24376/42842/15879 24240/42565/15879 24242/42569/15879 24374/42838/15879 +f 24378/42846/15878 24238/42561/15878 24240/42565/15878 24376/42842/15878 +f 24380/42850/15877 24236/42557/15876 24238/42561/15876 24378/42846/15877 +f 24382/42854/15875 24234/42553/15874 24236/42557/15874 24380/42850/15875 +f 24384/42858/15873 24232/42549/15873 24234/42553/15873 24382/42854/15873 +f 24386/42862/15872 24230/42545/15872 24232/42549/15872 24384/42858/15872 +f 24325/42738/15871 24227/42538/15871 24230/42545/15871 24386/42862/15871 +o rubixcube +v -11.430551 0.655343 -1.465793 +v -11.430551 0.715343 -1.465793 +v -11.430551 0.715343 -1.525793 +v -11.430551 0.655343 -1.525793 +v -11.370551 0.715343 -1.525793 +v -11.370551 0.655343 -1.525793 +v -11.370551 0.715343 -1.465793 +v -11.370551 0.655343 -1.465793 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -1.0000 +vn 1.0000 -0.0000 -0.0000 +vn -0.0000 -0.0000 1.0000 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vt 0.024396 0.013024 +vt 0.343469 0.976800 +vt 0.706996 0.422386 +vt 0.342271 0.013024 +vt 0.633198 0.976800 +vt 0.310059 0.972308 +vt 0.342271 0.501976 +vt 0.985391 0.496782 +vt 0.312156 0.548497 +vt 0.024396 0.501976 +vt 0.657984 0.496782 +vt 0.706996 0.042614 +vt 0.985391 0.992792 +vt 0.668252 0.003293 +vt 0.013517 0.545172 +vt 0.657984 0.992792 +vt 0.365082 0.003293 +vt 0.979670 0.042614 +vt 0.668252 0.461708 +vt 0.633198 0.553200 +vt 0.011420 0.968983 +vt 0.365082 0.461708 +vt 0.343469 0.553200 +vt 0.979670 0.422386 +s 1 +usemtl rubixcube +f 24387/42863/15969 24388/42866/15969 24389/42869/15969 24390/42872/15969 +f 24390/42873/15970 24389/42870/15970 24391/42875/15970 24392/42878/15970 +f 24392/42879/15971 24391/42876/15971 24393/42881/15971 24394/42884/15971 +f 24394/42885/15972 24393/42882/15972 24388/42867/15972 24387/42864/15972 +f 24390/42874/15973 24392/42880/15973 24394/42886/15973 24387/42865/15973 +f 24391/42877/15974 24389/42871/15974 24388/42868/15974 24393/42883/15974 +o tissuebox +v 3.292099 0.799962 6.877819 +v 3.292099 0.919962 6.877819 +v 3.292099 0.919962 6.762819 +v 3.292099 0.799962 6.762819 +v 3.507099 0.919962 6.762819 +v 3.507099 0.799962 6.762819 +v 3.507099 0.919962 6.877819 +v 3.507099 0.799962 6.877819 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -1.0000 +vn 1.0000 -0.0000 -0.0000 +vn -0.0000 -0.0000 1.0000 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vt 0.995476 0.261945 +vt 0.282795 0.992674 +vt 0.839733 0.973224 +vt 0.862857 0.261945 +vt 0.579630 0.992674 +vt 0.267187 0.007014 +vt 0.862857 0.028055 +vt 0.581996 0.013119 +vt 0.014890 0.007014 +vt 0.995476 0.028055 +vt 0.285720 0.013119 +vt 0.607416 0.973224 +vt 0.581996 1.001448 +vt 0.855463 0.271477 +vt 0.014890 1.016201 +vt 0.285720 1.001448 +vt 0.997871 0.271477 +vt 0.607416 0.043957 +vt 0.855463 0.005190 +vt 0.579630 0.016539 +vt 0.267187 1.016201 +vt 0.997871 0.005190 +vt 0.282795 0.016539 +vt 0.839733 0.043957 +s 1 +usemtl Tissuebox +f 24395/42887/15975 24396/42890/15975 24397/42893/15975 24398/42896/15975 +f 24398/42897/15976 24397/42894/15976 24399/42899/15976 24400/42902/15976 +f 24400/42903/15977 24399/42900/15977 24401/42905/15977 24402/42908/15977 +f 24402/42909/15978 24401/42906/15978 24396/42891/15978 24395/42888/15978 +f 24398/42898/15979 24400/42904/15979 24402/42910/15979 24395/42889/15979 +f 24399/42901/15980 24397/42895/15980 24396/42892/15980 24401/42907/15980 +o Cube.220 +v -8.253209 0.651551 -1.434427 +v -8.253209 0.691551 -1.434427 +v -8.519736 0.691551 -1.572134 +v -8.519736 0.651551 -1.572134 +v -8.382030 0.691551 -1.838661 +v -8.382030 0.651551 -1.838661 +v -8.115502 0.691551 -1.700954 +v -8.115502 0.651551 -1.700954 +vn -0.4590 -0.0000 0.8884 +vn -0.8884 -0.0000 -0.4590 +vn 0.4590 -0.0000 -0.8884 +vn 0.8884 -0.0000 0.4590 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vt 0.375000 0.000000 +vt 0.332579 0.651772 +vt 0.380216 0.649803 +vt 0.625000 0.000000 +vt 0.332579 0.651772 +vt 0.832372 0.843789 +vt 0.625000 0.250000 +vt 1.211269 0.822006 +vt 0.832372 0.195384 +vt 0.375000 0.250000 +vt 1.211269 0.427994 +vt 0.380216 0.649803 +vt -0.186958 0.822006 +vt 0.649803 0.177559 +vt 0.183967 0.195384 +vt -0.186958 0.427994 +vt 0.399803 0.177559 +vt 0.380216 0.649803 +vt 0.649803 0.427559 +vt 0.332579 0.651772 +vt 0.183967 0.843789 +vt 0.399803 0.427559 +vt 0.332579 0.651772 +vt 0.380216 0.649803 +s 1 +usemtl Pizza +f 24403/42911/15981 24404/42914/15981 24405/42917/15981 24406/42920/15981 +f 24406/42921/15982 24405/42918/15982 24407/42923/15982 24408/42926/15982 +f 24408/42927/15983 24407/42924/15983 24409/42929/15983 24410/42932/15983 +f 24410/42933/15984 24409/42930/15984 24404/42915/15984 24403/42912/15984 +f 24406/42922/15985 24408/42928/15985 24410/42934/15985 24403/42913/15985 +f 24407/42925/15986 24405/42919/15986 24404/42916/15986 24409/42931/15986 +o laptop.001 +v 9.867156 1.070777 3.971972 +v 9.930147 1.070777 3.960584 +v 9.926250 1.070777 3.939032 +v 9.913468 1.070777 3.941343 +v 9.815562 0.800777 3.686599 +v 9.815562 0.831675 3.686599 +v 9.878554 0.831675 3.675210 +v 9.878554 0.800777 3.675210 +v 9.928153 0.854606 3.949553 +v 9.927156 0.843784 3.944038 +v 9.922907 0.846039 3.920533 +v 9.924022 0.858649 3.926700 +v 9.608998 0.807538 3.960367 +v 9.546007 0.807538 3.971756 +v 9.504617 0.800777 3.742815 +v 9.567608 0.800777 3.731427 +v 9.554215 0.854606 4.017158 +v 9.550083 0.858649 3.994304 +v 9.548968 0.846039 3.988138 +v 9.553218 0.843784 4.011643 +v 9.618204 1.058051 4.011285 +v 9.619202 1.070777 4.016800 +v 9.556210 1.070777 4.028189 +v 9.555212 1.058051 4.022673 +v 9.565275 1.060072 4.005316 +v 9.551198 1.060072 4.000470 +v 9.552313 1.070777 4.006636 +v 9.565096 1.070777 4.004325 +v 9.925137 1.060072 3.932866 +v 9.913648 1.060072 3.942333 +v 9.929151 1.058051 3.955069 +v 9.866158 1.058051 3.966457 +v 9.919945 0.807538 3.904151 +v 9.856953 0.807538 3.915540 +v 9.504617 0.831675 3.742815 +v 9.567608 0.831675 3.731427 +v 9.859701 0.837658 3.930740 +v 9.611747 0.837658 3.975568 +v 9.561751 0.846039 3.985827 +v 9.910124 0.846039 3.922844 +v 9.864024 0.833144 3.954650 +v 9.864164 0.843784 3.955427 +v 9.616210 0.843784 4.000255 +v 9.616070 0.833144 3.999478 +v 9.615644 0.800777 3.997119 +v 9.553078 0.833144 4.010867 +v 9.552651 0.800777 4.008508 +v 9.926589 0.800777 3.940903 +v 9.927015 0.833144 3.943262 +v 9.863598 0.800777 3.952291 +v 9.548755 0.837658 3.986956 +v 9.922693 0.837658 3.919352 +v 9.865161 0.854606 3.960941 +v 9.617207 0.854606 4.005769 +v 9.564160 0.858649 3.999150 +v 9.912533 0.858649 3.936167 +vn -0.0000 1.0000 -0.0000 +vn -0.1779 -0.0000 -0.9840 +vn 0.9840 -0.0000 -0.1779 +vn 0.0051 -0.9996 0.0280 +vn 0.0051 -0.9996 0.0283 +vn -0.9840 -0.0000 0.1779 +vn 0.1628 -0.4031 0.9006 +vn 0.3146 0.2102 -0.9256 +vn 0.3147 0.2102 -0.9256 +vn 0.3146 0.2100 -0.9257 +vn -0.6188 0.2102 -0.7569 +vn -0.6188 0.2101 -0.7569 +vn -0.1771 -0.0937 -0.9797 +vn -0.1761 0.1422 -0.9740 +vn 0.1774 -0.0742 0.9813 +vn 0.1774 -0.0739 0.9814 +vn -0.5289 -0.7964 0.2933 +vn -0.5290 -0.7964 0.2933 +vn -0.0167 -0.9956 -0.0925 +vn 0.0325 0.9832 0.1797 +vn 0.5982 -0.7964 0.0895 +vn 0.5981 -0.7964 0.0895 +vn 0.1580 -0.4598 0.8738 +vn 0.1778 -0.0272 0.9837 +vn 0.1778 -0.0275 0.9837 +vn -0.1213 0.7318 -0.6707 +vn -0.1778 0.0311 -0.9836 +vn -0.5215 0.5662 -0.6384 +vn -0.5215 0.5660 -0.6384 +vn -0.8498 0.0208 -0.5266 +vn -0.8498 0.0209 -0.5266 +vn 0.2650 0.5660 -0.7806 +vn 0.6117 0.0209 -0.7908 +vn 0.6117 0.0208 -0.7908 +vn -0.0316 -0.9841 -0.1746 +vn -0.0317 -0.9840 -0.1753 +vn -0.0043 0.9997 -0.0241 +vt 0.843507 0.115975 +vt 0.854445 0.126913 +vt 0.859914 0.126913 +vt 0.843507 0.110506 +vt 0.846470 0.077745 +vt 0.859914 0.128244 +vt 0.758802 0.142316 +vt 0.817861 0.142316 +vt 0.758802 0.182602 +vt 0.817861 0.182602 +vt 0.854445 0.128244 +vt 0.628827 0.198692 +vt 0.847470 0.129216 +vt 0.876080 0.129216 +vt 0.876080 0.212549 +vt 0.884870 0.418901 +vt 0.046050 0.035046 +vt 0.847470 0.212549 +vt 0.602943 0.198692 +vt 0.872433 0.418901 +vt 0.714726 0.043387 +vt 0.706351 0.077745 +vt 0.636292 0.077745 +vt 0.862684 0.131882 +vt 0.692964 0.043387 +vt 0.836163 0.196454 +vt 0.609771 0.142316 +vt 0.816938 0.019277 +vt 0.679134 0.142316 +vt 0.897019 0.170385 +vt 0.654712 0.131781 +vt 0.680596 0.131781 +vt 0.931137 0.218471 +vt 0.680596 0.198692 +vt 0.654712 0.198692 +vt 0.931137 0.301804 +vt 0.714726 0.121039 +vt 0.484881 0.500000 +vt 0.787408 0.125370 +vt 0.910448 0.066311 +vt 0.457664 0.435429 +vt 0.388300 0.435429 +vt 0.718045 0.125370 +vt 0.414821 0.500000 +vt 0.692964 0.121039 +vt 0.554940 0.416667 +vt 0.838909 0.121444 +vt 0.736487 0.095155 +vt 0.625000 0.416667 +vt 0.843507 0.121444 +vt 0.848976 0.126913 +vt 0.843507 0.126913 +vt 0.625000 0.500000 +vt 0.736487 0.121039 +vt 0.554940 0.500000 +vt 0.812478 0.109692 +vt 0.748497 0.222888 +vt 0.884232 0.996204 +vt 0.979811 0.026026 +vt 0.812478 0.149978 +vt 0.979811 0.066311 +vt 0.527027 0.435429 +vt 0.881841 0.149978 +vt 0.843507 0.128244 +vt 0.596390 0.435429 +vt 0.881841 0.109692 +vt 0.817861 0.222888 +vt 0.848976 0.128244 +vt 0.689439 0.142316 +vt 0.886301 0.019277 +vt 0.748497 0.142316 +vt 0.689439 0.182602 +vt 0.748497 0.182602 +vt 0.010615 0.996204 +vt 0.886301 0.059563 +vt 0.838909 0.110506 +vt 0.736487 0.043387 +vt 0.776411 0.077745 +vt 0.838909 0.115975 +vt 0.736487 0.069271 +vt 0.602943 0.131781 +vt 0.872433 0.137963 +vt 0.740196 0.145777 +vt 0.628827 0.131781 +vt 0.813686 0.170385 +vt 0.823529 0.145777 +vt 0.959746 0.218471 +vt 0.689482 0.198692 +vt 0.730721 0.035046 +vt 0.959746 0.301804 +vt 0.813019 0.143230 +vt 0.817575 0.126913 +vt 0.722014 0.258843 +vt 0.813019 0.183516 +vt 0.965588 0.139222 +vt 0.827101 0.120031 +vt 0.826320 0.183516 +vt 0.978888 0.139222 +vt 0.388300 0.395143 +vt 0.609771 0.222888 +vt 0.718045 0.085084 +vt 0.826320 0.143230 +vt 0.836163 0.236739 +vt 0.880457 0.113700 +vt 0.609771 0.182602 +vt 0.689904 0.069271 +vt 0.829067 0.115975 +vt 0.897126 0.092177 +vt 0.862684 0.215216 +vt 0.906978 0.092177 +vt 0.692964 0.069271 +vt 1.005409 0.160745 +vt 0.414821 0.416667 +vt 0.692964 0.095155 +vt 0.689904 0.095155 +vt 0.995557 0.160745 +vt 0.829067 0.121444 +vt 0.680596 0.095155 +vt 0.897019 0.135804 +vt 0.654712 0.121039 +vt 0.689904 0.121039 +vt 0.829067 0.126913 +vt 0.680596 0.121039 +vt 0.680596 0.043387 +vt 0.872433 0.092864 +vt 0.740196 0.111196 +vt 0.689904 0.043387 +vt 0.885461 0.092864 +vt 0.829067 0.110506 +vt 0.680596 0.069271 +vt 0.813686 0.135804 +vt 0.823529 0.111196 +vt 0.660539 0.121039 +vt 0.822863 0.126913 +vt 0.730721 0.468669 +vt 0.791824 0.201543 +vt 0.814932 0.126913 +vt 0.046050 0.468669 +vt 0.714726 0.069271 +vt 0.714726 0.095155 +vt 0.679134 0.222888 +vt 0.884232 0.499889 +vt 0.787408 0.085084 +vt 0.910448 0.026026 +vt 0.010615 0.499889 +vt 0.679134 0.182602 +vt 0.816938 0.059563 +s 1 +usemtl Computer +f 24411/42936/15987 24412/42937/15987 24413/42940/15987 24414/42945/15987 +f 24415/42947/15988 24416/42948/15988 24417/42949/15988 24418/42952/15988 +f 24419/42956/15989 24420/42957/15989 24421/42961/15989 24422/42963/15989 +f 24423/42965/15990 24424/42966/15991 24425/42968/15991 24426/42969/15990 +f 24427/42972/15992 24428/42975/15992 24429/42976/15992 24430/42978/15992 +f 24431/42980/15993 24432/42983/15993 24433/42987/15993 24434/42989/15993 +f 24435/42990/15994 24436/42994/15995 24437/42997/15996 24438/43000/15994 +f 24439/43003/15997 24440/43006/15997 24414/42943/15998 24413/42941/15997 +f 24440/43007/15999 24435/42991/15999 24438/43001/15999 24414/42944/15999 +f 24441/43010/15993 24412/42938/15993 24411/42935/15993 24442/43013/15993 +f 24442/43013/15993 24411/42935/15993 24432/42984/15993 24431/42981/15993 +f 24443/43015/15991 24444/43018/15990 24415/42946/15990 24418/42953/15991 +f 24444/43018/15990 24423/42965/15990 24426/42969/15990 24415/42946/15990 +f 24425/42967/15988 24445/43021/15988 24446/43024/15988 24426/42970/15988 +f 24433/42986/15987 24432/42985/15987 24438/43002/15987 24437/42998/15987 +f 24432/42985/15987 24411/42936/15987 24414/42945/15987 24438/43002/15987 +f 24447/43025/16000 24448/43028/16000 24449/43031/16000 24450/43036/16000 +f 24451/43040/16001 24452/43045/16002 24453/43048/16002 24454/43049/16001 +f 24455/43052/16001 24454/43049/16001 24456/43055/16001 24457/43057/16001 +f 24458/43058/16001 24459/43061/16001 24451/43040/16001 24460/43064/16001 +f 24460/43064/16001 24451/43040/16001 24454/43049/16001 24455/43052/16001 +f 24457/43057/15992 24456/43055/15992 24461/43067/15992 24445/43022/15992 24425/42968/15992 24424/42966/15992 +f 24418/42954/15989 24417/42950/15989 24462/43070/15989 24459/43062/15989 24458/43059/15989 24443/43016/15989 +f 24448/43029/16003 24454/43050/16004 24453/43046/16003 24449/43032/16004 +f 24429/42976/16005 24449/43033/16005 24453/43047/16005 24430/42978/16005 +f 24461/43068/16006 24456/43056/16006 24454/43051/16006 24448/43030/16006 +f 24447/43026/16006 24451/43041/16006 24459/43063/16006 24462/43071/16006 +f 24450/43037/16005 24421/42960/16005 24420/42958/16005 24452/43043/16005 +f 24447/43027/16007 24450/43038/16007 24452/43044/16008 24451/43042/16007 +f 24452/43045/16009 24463/43073/16009 24464/43074/16009 24453/43048/16009 +f 24463/43073/16010 24442/43014/16010 24431/42982/16010 24464/43074/16010 +f 24420/42959/16009 24419/42955/16009 24463/43073/16009 24452/43045/16009 +f 24419/42955/16011 24441/43011/16011 24442/43014/16010 24463/43073/16010 +f 24450/43039/16012 24449/43034/16012 24465/43075/16012 24466/43080/16012 +f 24466/43079/16013 24465/43076/16013 24435/42992/16013 24440/43008/16013 +f 24421/42961/16014 24450/43039/16015 24466/43080/16015 24422/42963/16015 +f 24422/42962/16016 24466/43081/16017 24440/43009/16017 24439/43004/16016 +f 24449/43035/16018 24429/42977/16018 24428/42973/16018 24465/43077/16018 +f 24465/43078/16019 24428/42974/16020 24436/42995/16020 24435/42993/16019 +f 24453/43048/16009 24464/43074/16009 24427/42971/16009 24430/42979/16009 +f 24464/43074/16010 24431/42982/16010 24434/42988/16011 24427/42971/16011 +f 24433/42987/15992 24437/42999/15992 24436/42996/15992 24434/42989/15992 +f 24434/42989/15992 24436/42996/15992 24428/42975/15992 24427/42972/15992 +f 24412/42939/15989 24441/43012/15989 24439/43005/15989 24413/42942/15989 +f 24441/43012/15989 24419/42956/15989 24422/42963/15989 24439/43005/15989 +f 24460/43065/16021 24455/43053/16021 24423/42964/16021 24444/43019/16021 +f 24458/43060/16022 24460/43066/16021 24444/43020/16021 24443/43017/16022 +f 24455/43054/16021 24457/43057/16022 24424/42966/16022 24423/42965/16021 +f 24462/43072/16023 24417/42951/16023 24445/43023/16023 24461/43069/16023 +f 24415/42947/15988 24426/42970/15988 24446/43024/15988 24416/42948/15988 +o laptop.002 +v 10.852777 1.070777 4.026957 +v 10.913983 1.070777 4.045701 +v 10.920397 1.070777 4.024758 +v 10.907976 1.070777 4.020955 +v 10.937694 0.800777 3.749668 +v 10.937694 0.831675 3.749668 +v 10.998900 0.831675 3.768412 +v 10.998900 0.800777 3.768412 +v 10.917266 0.854606 4.034982 +v 10.918907 0.843784 4.029624 +v 10.925901 0.846039 4.006784 +v 10.924067 0.858649 4.012776 +v 10.628639 0.807538 3.898340 +v 10.567432 0.807538 3.879596 +v 10.635557 0.800777 3.657141 +v 10.696764 0.800777 3.675885 +v 10.553923 0.854606 3.923711 +v 10.560722 0.858649 3.901505 +v 10.562557 0.846039 3.895514 +v 10.555563 0.843784 3.918353 +v 10.613488 1.058051 3.947815 +v 10.611847 1.070777 3.953174 +v 10.550640 1.070777 3.934430 +v 10.552281 1.058051 3.929070 +v 10.569179 1.060072 3.918254 +v 10.558887 1.060072 3.907496 +v 10.557054 1.070777 3.913488 +v 10.569473 1.070777 3.917292 +v 10.922232 1.060072 4.018767 +v 10.907681 1.060072 4.021918 +v 10.915625 1.058051 4.040341 +v 10.854418 1.058051 4.021597 +v 10.930777 0.807538 3.990866 +v 10.869569 0.807538 3.972122 +v 10.635557 0.831675 3.657141 +v 10.696764 0.831675 3.675885 +v 10.865046 0.837658 3.986892 +v 10.624116 0.837658 3.913110 +v 10.574978 0.846039 3.899318 +v 10.913481 0.846039 4.002981 +v 10.857931 0.833144 4.010125 +v 10.857700 0.843784 4.010880 +v 10.616771 0.843784 3.937097 +v 10.617002 0.833144 3.936343 +v 10.617703 0.800777 3.934051 +v 10.555795 0.833144 3.917598 +v 10.556497 0.800777 3.915307 +v 10.919840 0.800777 4.026577 +v 10.919138 0.833144 4.028869 +v 10.858633 0.800777 4.007833 +v 10.562909 0.837658 3.894366 +v 10.926253 0.837658 4.005636 +v 10.856059 0.854606 4.016238 +v 10.615129 0.854606 3.942455 +v 10.571013 0.858649 3.912263 +v 10.909516 0.858649 4.015926 +vn -0.0000 1.0000 -0.0000 +vn 0.2928 -0.0000 -0.9562 +vn 0.9562 -0.0000 0.2928 +vn -0.0083 -0.9996 0.0272 +vn -0.0084 -0.9996 0.0275 +vn -0.9562 -0.0000 -0.2928 +vn -0.2680 -0.4031 0.8751 +vn 0.7038 0.2102 -0.6786 +vn 0.7039 0.2102 -0.6785 +vn 0.7038 0.2100 -0.6786 +vn 0.7038 0.2102 -0.6785 +vn -0.2032 0.2102 -0.9563 +vn -0.2032 0.2101 -0.9563 +vn 0.2915 -0.0937 -0.9520 +vn 0.2898 0.1422 -0.9465 +vn -0.2920 -0.0742 0.9535 +vn -0.2920 -0.0739 0.9536 +vn -0.6045 -0.7964 0.0183 +vn -0.6046 -0.7964 0.0183 +vn 0.0275 -0.9956 -0.0899 +vn -0.0535 0.9832 0.1746 +vn 0.4906 -0.7964 0.3537 +vn 0.4907 -0.7964 0.3537 +vn -0.2600 -0.4598 0.8491 +vn -0.2927 -0.0272 0.9558 +vn -0.2927 -0.0275 0.9558 +vn 0.1996 0.7318 -0.6517 +vn 0.2927 0.0311 -0.9557 +vn -0.1710 0.5662 -0.8064 +vn -0.1710 0.5660 -0.8065 +vn -0.5140 0.0208 -0.8575 +vn -0.5140 0.0209 -0.8575 +vn 0.5933 0.5660 -0.5724 +vn 0.5932 0.5660 -0.5724 +vn 0.9061 0.0209 -0.4226 +vn 0.9061 0.0208 -0.4226 +vn 0.0520 -0.9841 -0.1697 +vn 0.0522 -0.9840 -0.1703 +vn 0.0072 0.9997 -0.0234 +vt 0.843507 0.115975 +vt 0.854445 0.126913 +vt 0.859914 0.126913 +vt 0.843507 0.110506 +vt 0.846470 0.077745 +vt 0.859914 0.128244 +vt 0.758802 0.142316 +vt 0.817861 0.142316 +vt 0.758802 0.182602 +vt 0.817861 0.182602 +vt 0.854445 0.128244 +vt 0.628827 0.198692 +vt 0.847470 0.129216 +vt 0.876080 0.129216 +vt 0.876080 0.212549 +vt 0.884870 0.418901 +vt 0.046050 0.035046 +vt 0.847470 0.212549 +vt 0.602943 0.198692 +vt 0.872433 0.418901 +vt 0.714726 0.043387 +vt 0.706351 0.077745 +vt 0.636292 0.077745 +vt 0.862684 0.131882 +vt 0.692964 0.043387 +vt 0.836163 0.196454 +vt 0.609771 0.142316 +vt 0.816938 0.019277 +vt 0.679134 0.142316 +vt 0.897019 0.170385 +vt 0.654712 0.131781 +vt 0.680596 0.131781 +vt 0.931137 0.218471 +vt 0.680596 0.198692 +vt 0.654712 0.198692 +vt 0.931137 0.301804 +vt 0.714726 0.121039 +vt 0.484881 0.500000 +vt 0.787408 0.125370 +vt 0.910448 0.066311 +vt 0.457664 0.435429 +vt 0.388300 0.435429 +vt 0.718045 0.125370 +vt 0.414821 0.500000 +vt 0.692964 0.121039 +vt 0.554940 0.416667 +vt 0.838909 0.121444 +vt 0.736487 0.095155 +vt 0.625000 0.416667 +vt 0.843507 0.121444 +vt 0.848976 0.126913 +vt 0.843507 0.126913 +vt 0.625000 0.500000 +vt 0.736487 0.121039 +vt 0.554940 0.500000 +vt 0.812478 0.109692 +vt 0.748497 0.222888 +vt 0.884232 0.996204 +vt 0.979811 0.026026 +vt 0.812478 0.149978 +vt 0.979811 0.066311 +vt 0.527027 0.435429 +vt 0.881841 0.149978 +vt 0.843507 0.128244 +vt 0.596390 0.435429 +vt 0.881841 0.109692 +vt 0.817861 0.222888 +vt 0.848976 0.128244 +vt 0.689439 0.142316 +vt 0.886301 0.019277 +vt 0.748497 0.142316 +vt 0.689439 0.182602 +vt 0.748497 0.182602 +vt 0.010615 0.996204 +vt 0.886301 0.059563 +vt 0.838909 0.110506 +vt 0.736487 0.043387 +vt 0.776411 0.077745 +vt 0.838909 0.115975 +vt 0.736487 0.069271 +vt 0.602943 0.131781 +vt 0.872433 0.137963 +vt 0.740196 0.145777 +vt 0.628827 0.131781 +vt 0.813686 0.170385 +vt 0.823529 0.145777 +vt 0.959746 0.218471 +vt 0.689482 0.198692 +vt 0.730721 0.035046 +vt 0.959746 0.301804 +vt 0.813019 0.143230 +vt 0.817575 0.126913 +vt 0.722014 0.258843 +vt 0.813019 0.183516 +vt 0.965588 0.139222 +vt 0.827101 0.120031 +vt 0.826320 0.183516 +vt 0.978888 0.139222 +vt 0.388300 0.395143 +vt 0.609771 0.222888 +vt 0.718045 0.085084 +vt 0.826320 0.143230 +vt 0.836163 0.236739 +vt 0.880457 0.113700 +vt 0.609771 0.182602 +vt 0.689904 0.069271 +vt 0.829067 0.115975 +vt 0.897126 0.092177 +vt 0.862684 0.215216 +vt 0.906978 0.092177 +vt 0.692964 0.069271 +vt 1.005409 0.160745 +vt 0.414821 0.416667 +vt 0.692964 0.095155 +vt 0.689904 0.095155 +vt 0.995557 0.160745 +vt 0.829067 0.121444 +vt 0.680596 0.095155 +vt 0.897019 0.135804 +vt 0.654712 0.121039 +vt 0.689904 0.121039 +vt 0.829067 0.126913 +vt 0.680596 0.121039 +vt 0.680596 0.043387 +vt 0.872433 0.092864 +vt 0.740196 0.111196 +vt 0.689904 0.043387 +vt 0.885461 0.092864 +vt 0.829067 0.110506 +vt 0.680596 0.069271 +vt 0.813686 0.135804 +vt 0.823529 0.111196 +vt 0.660539 0.121039 +vt 0.822863 0.126913 +vt 0.730721 0.468669 +vt 0.791824 0.201543 +vt 0.814932 0.126913 +vt 0.046050 0.468669 +vt 0.714726 0.069271 +vt 0.714726 0.095155 +vt 0.679134 0.222888 +vt 0.884232 0.499889 +vt 0.787408 0.085084 +vt 0.910448 0.026026 +vt 0.010615 0.499889 +vt 0.679134 0.182602 +vt 0.816938 0.059563 +s 1 +usemtl Computer +f 24467/43083/16024 24468/43084/16024 24469/43087/16024 24470/43092/16024 +f 24471/43094/16025 24472/43095/16025 24473/43096/16025 24474/43099/16025 +f 24475/43103/16026 24476/43104/16026 24477/43108/16026 24478/43110/16026 +f 24479/43112/16027 24480/43113/16028 24481/43115/16028 24482/43116/16027 +f 24483/43119/16029 24484/43122/16029 24485/43123/16029 24486/43125/16029 +f 24487/43127/16030 24488/43130/16030 24489/43134/16030 24490/43136/16030 +f 24491/43137/16031 24492/43141/16032 24493/43144/16033 24494/43147/16034 +f 24495/43150/16035 24496/43153/16035 24470/43090/16036 24469/43088/16035 +f 24496/43154/16037 24491/43138/16037 24494/43148/16037 24470/43091/16037 +f 24497/43157/16030 24468/43085/16030 24467/43082/16030 24498/43160/16030 +f 24498/43160/16030 24467/43082/16030 24488/43131/16030 24487/43128/16030 +f 24499/43162/16028 24500/43165/16027 24471/43093/16027 24474/43100/16028 +f 24500/43165/16027 24479/43112/16027 24482/43116/16027 24471/43093/16027 +f 24481/43114/16025 24501/43168/16025 24502/43171/16025 24482/43117/16025 +f 24489/43133/16024 24488/43132/16024 24494/43149/16024 24493/43145/16024 +f 24488/43132/16024 24467/43083/16024 24470/43092/16024 24494/43149/16024 +f 24503/43172/16038 24504/43175/16038 24505/43178/16038 24506/43183/16038 +f 24507/43187/16039 24508/43192/16040 24509/43195/16040 24510/43196/16039 +f 24511/43199/16039 24510/43196/16039 24512/43202/16039 24513/43204/16039 +f 24514/43205/16039 24515/43208/16039 24507/43187/16039 24516/43211/16039 +f 24516/43211/16039 24507/43187/16039 24510/43196/16039 24511/43199/16039 +f 24513/43204/16029 24512/43202/16029 24517/43214/16029 24501/43169/16029 24481/43115/16029 24480/43113/16029 +f 24474/43101/16026 24473/43097/16026 24518/43217/16026 24515/43209/16026 24514/43206/16026 24499/43163/16026 +f 24504/43176/16041 24510/43197/16041 24509/43193/16041 24505/43179/16042 +f 24485/43123/16043 24505/43180/16043 24509/43194/16043 24486/43125/16043 +f 24517/43215/16044 24512/43203/16044 24510/43198/16044 24504/43177/16044 +f 24503/43173/16044 24507/43188/16044 24515/43210/16044 24518/43218/16044 +f 24506/43184/16043 24477/43107/16043 24476/43105/16043 24508/43190/16043 +f 24503/43174/16045 24506/43185/16045 24508/43191/16045 24507/43189/16046 +f 24508/43192/16047 24519/43220/16047 24520/43221/16047 24509/43195/16047 +f 24519/43220/16048 24498/43161/16048 24487/43129/16048 24520/43221/16048 +f 24476/43106/16047 24475/43102/16047 24519/43220/16047 24508/43192/16047 +f 24475/43102/16049 24497/43158/16049 24498/43161/16048 24519/43220/16048 +f 24506/43186/16050 24505/43181/16050 24521/43222/16050 24522/43227/16050 +f 24522/43226/16051 24521/43223/16051 24491/43139/16051 24496/43155/16051 +f 24477/43108/16052 24506/43186/16053 24522/43227/16053 24478/43110/16053 +f 24478/43109/16054 24522/43228/16055 24496/43156/16055 24495/43151/16054 +f 24505/43182/16056 24485/43124/16056 24484/43120/16057 24521/43224/16056 +f 24521/43225/16058 24484/43121/16059 24492/43142/16059 24491/43140/16058 +f 24509/43195/16047 24520/43221/16047 24483/43118/16047 24486/43126/16047 +f 24520/43221/16048 24487/43129/16048 24490/43135/16049 24483/43118/16049 +f 24489/43134/16029 24493/43146/16029 24492/43143/16029 24490/43136/16029 +f 24490/43136/16029 24492/43143/16029 24484/43122/16029 24483/43119/16029 +f 24468/43086/16026 24497/43159/16026 24495/43152/16026 24469/43089/16026 +f 24497/43159/16026 24475/43103/16026 24478/43110/16026 24495/43152/16026 +f 24516/43212/16060 24511/43200/16060 24479/43111/16060 24500/43166/16060 +f 24514/43207/16061 24516/43213/16060 24500/43167/16060 24499/43164/16061 +f 24511/43201/16060 24513/43204/16061 24480/43113/16061 24479/43112/16060 +f 24518/43219/16062 24473/43098/16062 24501/43170/16062 24517/43216/16062 +f 24471/43094/16025 24482/43117/16025 24502/43171/16025 24472/43095/16025 +o laptop.003 +v 11.865123 1.070777 4.026957 +v 11.926330 1.070777 4.045701 +v 11.932743 1.070777 4.024758 +v 11.920322 1.070777 4.020955 +v 11.950040 0.800777 3.749668 +v 11.950040 0.831675 3.749668 +v 12.011247 0.831675 3.768412 +v 12.011247 0.800777 3.768412 +v 11.929612 0.854606 4.034982 +v 11.931253 0.843784 4.029624 +v 11.938248 0.846039 4.006784 +v 11.936413 0.858649 4.012776 +v 11.640985 0.807538 3.898340 +v 11.579779 0.807538 3.879596 +v 11.647903 0.800777 3.657141 +v 11.709110 0.800777 3.675885 +v 11.566269 0.854606 3.923711 +v 11.573069 0.858649 3.901505 +v 11.574903 0.846039 3.895514 +v 11.567909 0.843784 3.918353 +v 11.625834 1.058051 3.947815 +v 11.624193 1.070777 3.953174 +v 11.562986 1.070777 3.934430 +v 11.564628 1.058051 3.929070 +v 11.581525 1.060072 3.918254 +v 11.571234 1.060072 3.907496 +v 11.569400 1.070777 3.913488 +v 11.581820 1.070777 3.917292 +v 11.934578 1.060072 4.018767 +v 11.920028 1.060072 4.021918 +v 11.927971 1.058051 4.040341 +v 11.866764 1.058051 4.021597 +v 11.943123 0.807538 3.990866 +v 11.881915 0.807538 3.972122 +v 11.647903 0.831675 3.657141 +v 11.709110 0.831675 3.675885 +v 11.877392 0.837658 3.986892 +v 11.636462 0.837658 3.913110 +v 11.587324 0.846039 3.899318 +v 11.925827 0.846039 4.002981 +v 11.870277 0.833144 4.010125 +v 11.870047 0.843784 4.010880 +v 11.629117 0.843784 3.937097 +v 11.629348 0.833144 3.936343 +v 11.630050 0.800777 3.934051 +v 11.568141 0.833144 3.917598 +v 11.568843 0.800777 3.915307 +v 11.932186 0.800777 4.026577 +v 11.931484 0.833144 4.028869 +v 11.870979 0.800777 4.007833 +v 11.575255 0.837658 3.894366 +v 11.938600 0.837658 4.005636 +v 11.868405 0.854606 4.016238 +v 11.627476 0.854606 3.942455 +v 11.583360 0.858649 3.912263 +v 11.921863 0.858649 4.015926 +vn -0.0000 1.0000 -0.0000 +vn 0.2928 -0.0000 -0.9562 +vn 0.9562 -0.0000 0.2928 +vn -0.0083 -0.9996 0.0272 +vn -0.0084 -0.9996 0.0275 +vn -0.9562 -0.0000 -0.2928 +vn -0.2680 -0.4031 0.8751 +vn 0.7038 0.2102 -0.6786 +vn 0.7039 0.2102 -0.6785 +vn 0.7038 0.2100 -0.6786 +vn 0.7038 0.2102 -0.6785 +vn -0.2032 0.2102 -0.9563 +vn -0.2032 0.2101 -0.9563 +vn 0.2915 -0.0937 -0.9520 +vn 0.2898 0.1422 -0.9465 +vn -0.2920 -0.0742 0.9535 +vn -0.2920 -0.0739 0.9536 +vn -0.6045 -0.7964 0.0183 +vn -0.6046 -0.7964 0.0183 +vn 0.0275 -0.9956 -0.0899 +vn -0.0535 0.9832 0.1746 +vn 0.4906 -0.7964 0.3537 +vn 0.4907 -0.7964 0.3537 +vn -0.2600 -0.4598 0.8491 +vn -0.2927 -0.0272 0.9558 +vn -0.2927 -0.0275 0.9558 +vn 0.1996 0.7318 -0.6517 +vn 0.2927 0.0311 -0.9557 +vn -0.1710 0.5662 -0.8064 +vn -0.1710 0.5660 -0.8065 +vn -0.5140 0.0208 -0.8575 +vn -0.5140 0.0209 -0.8575 +vn 0.5933 0.5660 -0.5724 +vn 0.5932 0.5660 -0.5724 +vn 0.9061 0.0209 -0.4226 +vn 0.9061 0.0208 -0.4226 +vn 0.0520 -0.9841 -0.1697 +vn 0.0522 -0.9840 -0.1703 +vn 0.0072 0.9997 -0.0234 +vt 0.843507 0.115975 +vt 0.854445 0.126913 +vt 0.859914 0.126913 +vt 0.843507 0.110506 +vt 0.846470 0.077745 +vt 0.859914 0.128244 +vt 0.758802 0.142316 +vt 0.817861 0.142316 +vt 0.758802 0.182602 +vt 0.817861 0.182602 +vt 0.854445 0.128244 +vt 0.628827 0.198692 +vt 0.847470 0.129216 +vt 0.876080 0.129216 +vt 0.876080 0.212549 +vt 0.884870 0.418901 +vt 0.046050 0.035046 +vt 0.847470 0.212549 +vt 0.602943 0.198692 +vt 0.872433 0.418901 +vt 0.714726 0.043387 +vt 0.706351 0.077745 +vt 0.636292 0.077745 +vt 0.862684 0.131882 +vt 0.692964 0.043387 +vt 0.836163 0.196454 +vt 0.609771 0.142316 +vt 0.816938 0.019277 +vt 0.679134 0.142316 +vt 0.897019 0.170385 +vt 0.654712 0.131781 +vt 0.680596 0.131781 +vt 0.931137 0.218471 +vt 0.680596 0.198692 +vt 0.654712 0.198692 +vt 0.931137 0.301804 +vt 0.714726 0.121039 +vt 0.484881 0.500000 +vt 0.787408 0.125370 +vt 0.910448 0.066311 +vt 0.457664 0.435429 +vt 0.388300 0.435429 +vt 0.718045 0.125370 +vt 0.414821 0.500000 +vt 0.692964 0.121039 +vt 0.554940 0.416667 +vt 0.838909 0.121444 +vt 0.736487 0.095155 +vt 0.625000 0.416667 +vt 0.843507 0.121444 +vt 0.848976 0.126913 +vt 0.843507 0.126913 +vt 0.625000 0.500000 +vt 0.736487 0.121039 +vt 0.554940 0.500000 +vt 0.812478 0.109692 +vt 0.748497 0.222888 +vt 0.884232 0.996204 +vt 0.979811 0.026026 +vt 0.812478 0.149978 +vt 0.979811 0.066311 +vt 0.527027 0.435429 +vt 0.881841 0.149978 +vt 0.843507 0.128244 +vt 0.596390 0.435429 +vt 0.881841 0.109692 +vt 0.817861 0.222888 +vt 0.848976 0.128244 +vt 0.689439 0.142316 +vt 0.886301 0.019277 +vt 0.748497 0.142316 +vt 0.689439 0.182602 +vt 0.748497 0.182602 +vt 0.010615 0.996204 +vt 0.886301 0.059563 +vt 0.838909 0.110506 +vt 0.736487 0.043387 +vt 0.776411 0.077745 +vt 0.838909 0.115975 +vt 0.736487 0.069271 +vt 0.602943 0.131781 +vt 0.872433 0.137963 +vt 0.740196 0.145777 +vt 0.628827 0.131781 +vt 0.813686 0.170385 +vt 0.823529 0.145777 +vt 0.959746 0.218471 +vt 0.689482 0.198692 +vt 0.730721 0.035046 +vt 0.959746 0.301804 +vt 0.813019 0.143230 +vt 0.817575 0.126913 +vt 0.722014 0.258843 +vt 0.813019 0.183516 +vt 0.965588 0.139222 +vt 0.827101 0.120031 +vt 0.826320 0.183516 +vt 0.978888 0.139222 +vt 0.388300 0.395143 +vt 0.609771 0.222888 +vt 0.718045 0.085084 +vt 0.826320 0.143230 +vt 0.836163 0.236739 +vt 0.880457 0.113700 +vt 0.609771 0.182602 +vt 0.689904 0.069271 +vt 0.829067 0.115975 +vt 0.897126 0.092177 +vt 0.862684 0.215216 +vt 0.906978 0.092177 +vt 0.692964 0.069271 +vt 1.005409 0.160745 +vt 0.414821 0.416667 +vt 0.692964 0.095155 +vt 0.689904 0.095155 +vt 0.995557 0.160745 +vt 0.829067 0.121444 +vt 0.680596 0.095155 +vt 0.897019 0.135804 +vt 0.654712 0.121039 +vt 0.689904 0.121039 +vt 0.829067 0.126913 +vt 0.680596 0.121039 +vt 0.680596 0.043387 +vt 0.872433 0.092864 +vt 0.740196 0.111196 +vt 0.689904 0.043387 +vt 0.885461 0.092864 +vt 0.829067 0.110506 +vt 0.680596 0.069271 +vt 0.813686 0.135804 +vt 0.823529 0.111196 +vt 0.660539 0.121039 +vt 0.822863 0.126913 +vt 0.730721 0.468669 +vt 0.791824 0.201543 +vt 0.814932 0.126913 +vt 0.046050 0.468669 +vt 0.714726 0.069271 +vt 0.714726 0.095155 +vt 0.679134 0.222888 +vt 0.884232 0.499889 +vt 0.787408 0.085084 +vt 0.910448 0.026026 +vt 0.010615 0.499889 +vt 0.679134 0.182602 +vt 0.816938 0.059563 +s 1 +usemtl Computer +f 24523/43230/16063 24524/43231/16063 24525/43234/16063 24526/43239/16063 +f 24527/43241/16064 24528/43242/16064 24529/43243/16064 24530/43246/16064 +f 24531/43250/16065 24532/43251/16065 24533/43255/16065 24534/43257/16065 +f 24535/43259/16066 24536/43260/16067 24537/43262/16067 24538/43263/16066 +f 24539/43266/16068 24540/43269/16068 24541/43270/16068 24542/43272/16068 +f 24543/43274/16069 24544/43277/16069 24545/43281/16069 24546/43283/16069 +f 24547/43284/16070 24548/43288/16071 24549/43291/16072 24550/43294/16073 +f 24551/43297/16074 24552/43300/16074 24526/43237/16075 24525/43235/16074 +f 24552/43301/16076 24547/43285/16076 24550/43295/16076 24526/43238/16076 +f 24553/43304/16069 24524/43232/16069 24523/43229/16069 24554/43307/16069 +f 24554/43307/16069 24523/43229/16069 24544/43278/16069 24543/43275/16069 +f 24555/43309/16067 24556/43312/16066 24527/43240/16066 24530/43247/16067 +f 24556/43312/16066 24535/43259/16066 24538/43263/16066 24527/43240/16066 +f 24537/43261/16064 24557/43315/16064 24558/43318/16064 24538/43264/16064 +f 24545/43280/16063 24544/43279/16063 24550/43296/16063 24549/43292/16063 +f 24544/43279/16063 24523/43230/16063 24526/43239/16063 24550/43296/16063 +f 24559/43319/16077 24560/43322/16077 24561/43325/16077 24562/43330/16077 +f 24563/43334/16078 24564/43339/16079 24565/43342/16079 24566/43343/16078 +f 24567/43346/16078 24566/43343/16078 24568/43349/16078 24569/43351/16078 +f 24570/43352/16078 24571/43355/16078 24563/43334/16078 24572/43358/16078 +f 24572/43358/16078 24563/43334/16078 24566/43343/16078 24567/43346/16078 +f 24569/43351/16068 24568/43349/16068 24573/43361/16068 24557/43316/16068 24537/43262/16068 24536/43260/16068 +f 24530/43248/16065 24529/43244/16065 24574/43364/16065 24571/43356/16065 24570/43353/16065 24555/43310/16065 +f 24560/43323/16080 24566/43344/16080 24565/43340/16080 24561/43326/16081 +f 24541/43270/16082 24561/43327/16082 24565/43341/16082 24542/43272/16082 +f 24573/43362/16083 24568/43350/16083 24566/43345/16083 24560/43324/16083 +f 24559/43320/16083 24563/43335/16083 24571/43357/16083 24574/43365/16083 +f 24562/43331/16082 24533/43254/16082 24532/43252/16082 24564/43337/16082 +f 24559/43321/16084 24562/43332/16084 24564/43338/16084 24563/43336/16085 +f 24564/43339/16086 24575/43367/16086 24576/43368/16086 24565/43342/16086 +f 24575/43367/16087 24554/43308/16087 24543/43276/16087 24576/43368/16087 +f 24532/43253/16086 24531/43249/16086 24575/43367/16086 24564/43339/16086 +f 24531/43249/16088 24553/43305/16088 24554/43308/16087 24575/43367/16087 +f 24562/43333/16089 24561/43328/16089 24577/43369/16089 24578/43374/16089 +f 24578/43373/16090 24577/43370/16090 24547/43286/16090 24552/43302/16090 +f 24533/43255/16091 24562/43333/16092 24578/43374/16092 24534/43257/16092 +f 24534/43256/16093 24578/43375/16094 24552/43303/16094 24551/43298/16093 +f 24561/43329/16095 24541/43271/16095 24540/43267/16096 24577/43371/16095 +f 24577/43372/16097 24540/43268/16098 24548/43289/16098 24547/43287/16097 +f 24565/43342/16086 24576/43368/16086 24539/43265/16086 24542/43273/16086 +f 24576/43368/16087 24543/43276/16087 24546/43282/16088 24539/43265/16088 +f 24545/43281/16068 24549/43293/16068 24548/43290/16068 24546/43283/16068 +f 24546/43283/16068 24548/43290/16068 24540/43269/16068 24539/43266/16068 +f 24524/43233/16065 24553/43306/16065 24551/43299/16065 24525/43236/16065 +f 24553/43306/16065 24531/43250/16065 24534/43257/16065 24551/43299/16065 +f 24572/43359/16099 24567/43347/16099 24535/43258/16099 24556/43313/16099 +f 24570/43354/16100 24572/43360/16099 24556/43314/16099 24555/43311/16100 +f 24567/43348/16099 24569/43351/16100 24536/43260/16100 24535/43259/16099 +f 24574/43366/16101 24529/43245/16101 24557/43317/16101 24573/43363/16101 +f 24527/43241/16064 24538/43264/16064 24558/43318/16064 24528/43242/16064 +o laptop.004 +v 9.563276 1.070777 5.012037 +v 9.500353 1.070777 5.023801 +v 9.504378 1.070777 5.045330 +v 9.517147 1.070777 5.042943 +v 9.616572 0.800777 5.297097 +v 9.616572 0.831675 5.297097 +v 9.553649 0.831675 5.308862 +v 9.553649 0.800777 5.308862 +v 9.502414 0.854606 5.034820 +v 9.503444 0.843784 5.040329 +v 9.507833 0.846039 5.063808 +v 9.506681 0.858649 5.057649 +v 9.821498 0.807538 5.022100 +v 9.884420 0.807538 5.010336 +v 9.927176 0.800777 5.239026 +v 9.864254 0.800777 5.250790 +v 9.875941 0.854606 4.964984 +v 9.880209 0.858649 4.987813 +v 9.881361 0.846039 4.993972 +v 9.876971 0.843784 4.970492 +v 9.811988 1.058051 4.971239 +v 9.810958 1.070777 4.965729 +v 9.873881 1.070777 4.953965 +v 9.874911 1.058051 4.959475 +v 9.864952 1.060072 4.976892 +v 9.879058 1.060072 4.981653 +v 9.877906 1.070777 4.975494 +v 9.865137 1.070777 4.977881 +v 9.505530 1.060072 5.051489 +v 9.516962 1.060072 5.041953 +v 9.501384 1.058051 5.029311 +v 9.564306 1.058051 5.017546 +v 9.510893 0.807538 5.080173 +v 9.573815 0.807538 5.068408 +v 9.927176 0.831675 5.239026 +v 9.864254 0.831675 5.250790 +v 9.570976 0.837658 5.053224 +v 9.818659 0.837658 5.006917 +v 9.868592 0.846039 4.996359 +v 9.520602 0.846039 5.061420 +v 9.566511 0.833144 5.029340 +v 9.566366 0.843784 5.028564 +v 9.814048 0.843784 4.982257 +v 9.814194 0.833144 4.983032 +v 9.814633 0.800777 4.985389 +v 9.877116 0.833144 4.971268 +v 9.877557 0.800777 4.973624 +v 9.504029 0.800777 5.043460 +v 9.503589 0.833144 5.041104 +v 9.566952 0.800777 5.031696 +v 9.881581 0.837658 4.995152 +v 9.508054 0.837658 5.064989 +v 9.565336 0.854606 5.023056 +v 9.813019 0.854606 4.976748 +v 9.866104 0.858649 4.983050 +v 9.518114 0.858649 5.048112 +vn -0.0000 1.0000 -0.0000 +vn 0.1838 -0.0000 0.9830 +vn -0.9830 -0.0000 0.1838 +vn -0.0052 -0.9996 -0.0280 +vn -0.0053 -0.9996 -0.0282 +vn 0.9830 -0.0000 -0.1838 +vn -0.1682 -0.4031 -0.8996 +vn -0.3091 0.2102 0.9275 +vn -0.3091 0.2100 0.9276 +vn 0.6234 0.2102 0.7532 +vn 0.6233 0.2102 0.7532 +vn 0.6233 0.2101 0.7532 +vn 0.1830 -0.0937 0.9786 +vn 0.1819 0.1422 0.9730 +vn -0.1833 -0.0742 -0.9803 +vn -0.1833 -0.0739 -0.9803 +vn 0.5272 -0.7964 -0.2964 +vn 0.0173 -0.9956 0.0924 +vn -0.0336 0.9832 -0.1795 +vn -0.5987 -0.7964 -0.0859 +vn -0.1632 -0.4598 -0.8729 +vn -0.1837 -0.0272 -0.9826 +vn -0.1837 -0.0275 -0.9826 +vn 0.1253 0.7318 0.6699 +vn 0.1837 0.0311 0.9825 +vn 0.5253 0.5662 0.6352 +vn 0.5254 0.5660 0.6353 +vn 0.5253 0.5660 0.6353 +vn 0.8530 0.0208 0.5215 +vn 0.8530 0.0209 0.5215 +vn -0.2603 0.5660 0.7822 +vn -0.6069 0.0209 0.7945 +vn -0.6069 0.0208 0.7945 +vn 0.0326 -0.9841 0.1744 +vn 0.0327 -0.9840 0.1751 +vn 0.0045 0.9997 0.0240 +vt 0.843507 0.115975 +vt 0.854445 0.126913 +vt 0.859914 0.126913 +vt 0.843507 0.110506 +vt 0.846470 0.077745 +vt 0.859914 0.128244 +vt 0.758802 0.142316 +vt 0.817861 0.142316 +vt 0.758802 0.182602 +vt 0.817861 0.182602 +vt 0.854445 0.128244 +vt 0.628827 0.198692 +vt 0.847470 0.129216 +vt 0.876080 0.129216 +vt 0.876080 0.212549 +vt 0.884870 0.418901 +vt 0.046050 0.035046 +vt 0.847470 0.212549 +vt 0.602943 0.198692 +vt 0.872433 0.418901 +vt 0.714726 0.043387 +vt 0.706351 0.077745 +vt 0.636292 0.077745 +vt 0.862684 0.131882 +vt 0.692964 0.043387 +vt 0.836163 0.196454 +vt 0.609771 0.142316 +vt 0.816938 0.019277 +vt 0.679134 0.142316 +vt 0.897019 0.170385 +vt 0.654712 0.131781 +vt 0.680596 0.131781 +vt 0.931137 0.218471 +vt 0.680596 0.198692 +vt 0.654712 0.198692 +vt 0.931137 0.301804 +vt 0.714726 0.121039 +vt 0.484881 0.500000 +vt 0.787408 0.125370 +vt 0.910448 0.066311 +vt 0.457664 0.435429 +vt 0.388300 0.435429 +vt 0.718045 0.125370 +vt 0.414821 0.500000 +vt 0.692964 0.121039 +vt 0.554940 0.416667 +vt 0.838909 0.121444 +vt 0.736487 0.095155 +vt 0.625000 0.416667 +vt 0.843507 0.121444 +vt 0.848976 0.126913 +vt 0.843507 0.126913 +vt 0.625000 0.500000 +vt 0.736487 0.121039 +vt 0.554940 0.500000 +vt 0.812478 0.109692 +vt 0.748497 0.222888 +vt 0.884232 0.996204 +vt 0.979811 0.026026 +vt 0.812478 0.149978 +vt 0.979811 0.066311 +vt 0.527027 0.435429 +vt 0.881841 0.149978 +vt 0.843507 0.128244 +vt 0.596390 0.435429 +vt 0.881841 0.109692 +vt 0.817861 0.222888 +vt 0.848976 0.128244 +vt 0.689439 0.142316 +vt 0.886301 0.019277 +vt 0.748497 0.142316 +vt 0.689439 0.182602 +vt 0.748497 0.182602 +vt 0.010615 0.996204 +vt 0.886301 0.059563 +vt 0.838909 0.110506 +vt 0.736487 0.043387 +vt 0.776411 0.077745 +vt 0.838909 0.115975 +vt 0.736487 0.069271 +vt 0.602943 0.131781 +vt 0.872433 0.137963 +vt 0.740196 0.145777 +vt 0.628827 0.131781 +vt 0.813686 0.170385 +vt 0.823529 0.145777 +vt 0.959746 0.218471 +vt 0.689482 0.198692 +vt 0.730721 0.035046 +vt 0.959746 0.301804 +vt 0.813019 0.143230 +vt 0.817575 0.126913 +vt 0.722014 0.258843 +vt 0.813019 0.183516 +vt 0.965588 0.139222 +vt 0.827101 0.120031 +vt 0.826320 0.183516 +vt 0.978888 0.139222 +vt 0.388300 0.395143 +vt 0.609771 0.222888 +vt 0.718045 0.085084 +vt 0.826320 0.143230 +vt 0.836163 0.236739 +vt 0.880457 0.113700 +vt 0.609771 0.182602 +vt 0.689904 0.069271 +vt 0.829067 0.115975 +vt 0.897126 0.092177 +vt 0.862684 0.215216 +vt 0.906978 0.092177 +vt 0.692964 0.069271 +vt 1.005409 0.160745 +vt 0.414821 0.416667 +vt 0.692964 0.095155 +vt 0.689904 0.095155 +vt 0.995557 0.160745 +vt 0.829067 0.121444 +vt 0.680596 0.095155 +vt 0.897019 0.135804 +vt 0.654712 0.121039 +vt 0.689904 0.121039 +vt 0.829067 0.126913 +vt 0.680596 0.121039 +vt 0.680596 0.043387 +vt 0.872433 0.092864 +vt 0.740196 0.111196 +vt 0.689904 0.043387 +vt 0.885461 0.092864 +vt 0.829067 0.110506 +vt 0.680596 0.069271 +vt 0.813686 0.135804 +vt 0.823529 0.111196 +vt 0.660539 0.121039 +vt 0.822863 0.126913 +vt 0.730721 0.468669 +vt 0.791824 0.201543 +vt 0.814932 0.126913 +vt 0.046050 0.468669 +vt 0.714726 0.069271 +vt 0.714726 0.095155 +vt 0.679134 0.222888 +vt 0.884232 0.499889 +vt 0.787408 0.085084 +vt 0.910448 0.026026 +vt 0.010615 0.499889 +vt 0.679134 0.182602 +vt 0.816938 0.059563 +s 1 +usemtl Computer +f 24579/43377/16102 24580/43378/16102 24581/43381/16102 24582/43386/16102 +f 24583/43388/16103 24584/43389/16103 24585/43390/16103 24586/43393/16103 +f 24587/43397/16104 24588/43398/16104 24589/43402/16104 24590/43404/16104 +f 24591/43406/16105 24592/43407/16106 24593/43409/16106 24594/43410/16105 +f 24595/43413/16107 24596/43416/16107 24597/43417/16107 24598/43419/16107 +f 24599/43421/16108 24600/43424/16108 24601/43428/16108 24602/43430/16108 +f 24603/43431/16109 24604/43435/16109 24605/43438/16110 24606/43441/16109 +f 24607/43444/16111 24608/43447/16112 24582/43384/16113 24581/43382/16112 +f 24608/43448/16114 24603/43432/16114 24606/43442/16114 24582/43385/16114 +f 24609/43451/16108 24580/43379/16108 24579/43376/16108 24610/43454/16108 +f 24610/43454/16108 24579/43376/16108 24600/43425/16108 24599/43422/16108 +f 24611/43456/16106 24612/43459/16105 24583/43387/16105 24586/43394/16106 +f 24612/43459/16105 24591/43406/16105 24594/43410/16105 24583/43387/16105 +f 24593/43408/16103 24613/43462/16103 24614/43465/16103 24594/43411/16103 +f 24601/43427/16102 24600/43426/16102 24606/43443/16102 24605/43439/16102 +f 24600/43426/16102 24579/43377/16102 24582/43386/16102 24606/43443/16102 +f 24615/43466/16115 24616/43469/16115 24617/43472/16115 24618/43477/16115 +f 24619/43481/16116 24620/43486/16117 24621/43489/16117 24622/43490/16116 +f 24623/43493/16116 24622/43490/16116 24624/43496/16116 24625/43498/16116 +f 24626/43499/16116 24627/43502/16116 24619/43481/16116 24628/43505/16116 +f 24628/43505/16116 24619/43481/16116 24622/43490/16116 24623/43493/16116 +f 24625/43498/16107 24624/43496/16107 24629/43508/16107 24613/43463/16107 24593/43409/16107 24592/43407/16107 +f 24586/43395/16104 24585/43391/16104 24630/43511/16104 24627/43503/16104 24626/43500/16104 24611/43457/16104 +f 24616/43470/16118 24622/43491/16118 24621/43487/16118 24617/43473/16118 +f 24597/43417/16119 24617/43474/16119 24621/43488/16119 24598/43419/16119 +f 24629/43509/16120 24624/43497/16120 24622/43492/16120 24616/43471/16120 +f 24615/43467/16120 24619/43482/16120 24627/43504/16120 24630/43512/16120 +f 24618/43478/16119 24589/43401/16119 24588/43399/16119 24620/43484/16119 +f 24615/43468/16121 24618/43479/16121 24620/43485/16121 24619/43483/16121 +f 24620/43486/16122 24631/43514/16122 24632/43515/16122 24621/43489/16122 +f 24631/43514/16123 24610/43455/16123 24599/43423/16123 24632/43515/16123 +f 24588/43400/16122 24587/43396/16122 24631/43514/16122 24620/43486/16122 +f 24587/43396/16124 24609/43452/16124 24610/43455/16123 24631/43514/16123 +f 24618/43480/16125 24617/43475/16125 24633/43516/16125 24634/43521/16125 +f 24634/43520/16126 24633/43517/16126 24603/43433/16126 24608/43449/16126 +f 24589/43402/16127 24618/43480/16128 24634/43521/16129 24590/43404/16129 +f 24590/43403/16130 24634/43522/16131 24608/43450/16131 24607/43445/16130 +f 24617/43476/16132 24597/43418/16132 24596/43414/16132 24633/43518/16132 +f 24633/43519/16133 24596/43415/16134 24604/43436/16134 24603/43434/16133 +f 24621/43489/16122 24632/43515/16122 24595/43412/16122 24598/43420/16122 +f 24632/43515/16123 24599/43423/16123 24602/43429/16124 24595/43412/16124 +f 24601/43428/16107 24605/43440/16107 24604/43437/16107 24602/43430/16107 +f 24602/43430/16107 24604/43437/16107 24596/43416/16107 24595/43413/16107 +f 24580/43380/16104 24609/43453/16104 24607/43446/16104 24581/43383/16104 +f 24609/43453/16104 24587/43397/16104 24590/43404/16104 24607/43446/16104 +f 24628/43506/16135 24623/43494/16135 24591/43405/16135 24612/43460/16135 +f 24626/43501/16136 24628/43507/16135 24612/43461/16135 24611/43458/16136 +f 24623/43495/16135 24625/43498/16136 24592/43407/16136 24591/43406/16135 +f 24630/43513/16137 24585/43392/16137 24613/43464/16137 24629/43510/16137 +f 24583/43388/16103 24594/43411/16103 24614/43465/16103 24584/43389/16103 +o laptop.005 +v 10.865460 1.070777 4.968269 +v 10.802253 1.070777 4.958145 +v 10.798789 1.070777 4.979772 +v 10.811615 1.070777 4.981826 +v 10.819596 0.800777 5.254619 +v 10.819596 0.831675 5.254619 +v 10.756390 0.831675 5.244495 +v 10.756390 0.800777 5.244495 +v 10.800480 0.854606 4.969214 +v 10.799593 0.843784 4.974748 +v 10.795815 0.846039 4.998333 +v 10.796807 0.858649 4.992146 +v 11.105193 0.807538 5.064744 +v 11.168401 0.807538 5.074868 +v 11.131607 0.800777 5.304593 +v 11.068399 0.800777 5.294469 +v 11.175697 0.854606 5.029311 +v 11.172025 0.858649 5.052243 +v 11.171034 0.846039 5.058430 +v 11.174811 0.843784 5.034844 +v 11.113377 1.058051 5.013653 +v 11.114263 1.070777 5.008119 +v 11.177470 1.070777 5.018242 +v 11.176584 1.058051 5.023777 +v 11.161339 1.060072 5.036820 +v 11.173016 1.060072 5.046056 +v 11.174006 1.070777 5.039868 +v 11.161180 1.070777 5.037814 +v 10.797798 1.060072 4.985959 +v 10.811774 1.060072 4.980832 +v 10.801366 1.058051 4.963680 +v 10.864573 1.058051 4.973804 +v 10.793183 0.807538 5.014771 +v 10.856390 0.807538 5.024895 +v 11.131607 0.831675 5.304593 +v 11.068399 0.831675 5.294469 +v 10.858833 0.837658 5.009643 +v 11.107636 0.837658 5.049492 +v 11.158207 0.846039 5.056376 +v 10.808642 0.846039 5.000387 +v 10.862676 0.833144 4.985650 +v 10.862801 0.843784 4.984871 +v 11.111604 0.843784 5.024721 +v 11.111479 0.833144 5.025500 +v 11.111100 0.800777 5.027867 +v 11.174686 0.833144 5.035624 +v 11.174307 0.800777 5.037991 +v 10.799089 0.800777 4.977893 +v 10.799469 0.833144 4.975527 +v 10.862297 0.800777 4.988017 +v 11.170844 0.837658 5.059616 +v 10.795626 0.837658 4.999519 +v 10.863688 0.854606 4.979338 +v 11.112490 0.854606 5.019187 +v 11.160348 0.858649 5.043007 +v 10.810783 0.858649 4.987019 +vn -0.0000 1.0000 -0.0000 +vn -0.1581 -0.0000 0.9874 +vn -0.9874 -0.0000 -0.1581 +vn 0.0045 -0.9996 -0.0281 +vn 0.0045 -0.9996 -0.0284 +vn 0.9874 -0.0000 0.1581 +vn 0.1447 -0.4031 -0.9037 +vn -0.6035 0.2102 0.7691 +vn -0.6036 0.2102 0.7691 +vn -0.6035 0.2100 0.7692 +vn 0.3331 0.2102 0.9191 +vn 0.3331 0.2102 0.9192 +vn 0.3331 0.2101 0.9192 +vn -0.1575 -0.0937 0.9831 +vn -0.1565 0.1422 0.9774 +vn 0.1577 -0.0742 -0.9847 +vn 0.1577 -0.0739 -0.9847 +vn 0.5962 -0.7964 -0.1015 +vn 0.5963 -0.7964 -0.1015 +vn -0.0149 -0.9956 0.0928 +vn 0.0289 0.9832 -0.1804 +vn -0.5347 -0.7964 -0.2826 +vn 0.1404 -0.4598 -0.8768 +vn 0.1581 -0.0272 -0.9870 +vn 0.1581 -0.0275 -0.9870 +vn -0.1078 0.7318 0.6730 +vn -0.1581 0.0311 0.9869 +vn 0.2806 0.5662 0.7751 +vn 0.2806 0.5660 0.7752 +vn 0.6274 0.0208 0.7784 +vn 0.6274 0.0209 0.7784 +vn -0.5086 0.5660 0.6488 +vn -0.8391 0.0209 0.5435 +vn -0.8391 0.0208 0.5435 +vn -0.0281 -0.9841 0.1752 +vn -0.0282 -0.9840 0.1759 +vn -0.0039 0.9997 0.0241 +vt 0.843507 0.115975 +vt 0.854445 0.126913 +vt 0.859914 0.126913 +vt 0.843507 0.110506 +vt 0.846470 0.077745 +vt 0.859914 0.128244 +vt 0.758802 0.142316 +vt 0.817861 0.142316 +vt 0.758802 0.182602 +vt 0.817861 0.182602 +vt 0.854445 0.128244 +vt 0.628827 0.198692 +vt 0.847470 0.129216 +vt 0.876080 0.129216 +vt 0.876080 0.212549 +vt 0.884870 0.418901 +vt 0.046050 0.035046 +vt 0.847470 0.212549 +vt 0.602943 0.198692 +vt 0.872433 0.418901 +vt 0.714726 0.043387 +vt 0.706351 0.077745 +vt 0.636292 0.077745 +vt 0.862684 0.131882 +vt 0.692964 0.043387 +vt 0.836163 0.196454 +vt 0.609771 0.142316 +vt 0.816938 0.019277 +vt 0.679134 0.142316 +vt 0.897019 0.170385 +vt 0.654712 0.131781 +vt 0.680596 0.131781 +vt 0.931137 0.218471 +vt 0.680596 0.198692 +vt 0.654712 0.198692 +vt 0.931137 0.301804 +vt 0.714726 0.121039 +vt 0.484881 0.500000 +vt 0.787408 0.125370 +vt 0.910448 0.066311 +vt 0.457664 0.435429 +vt 0.388300 0.435429 +vt 0.718045 0.125370 +vt 0.414821 0.500000 +vt 0.692964 0.121039 +vt 0.554940 0.416667 +vt 0.838909 0.121444 +vt 0.736487 0.095155 +vt 0.625000 0.416667 +vt 0.843507 0.121444 +vt 0.848976 0.126913 +vt 0.843507 0.126913 +vt 0.625000 0.500000 +vt 0.736487 0.121039 +vt 0.554940 0.500000 +vt 0.812478 0.109692 +vt 0.748497 0.222888 +vt 0.884232 0.996204 +vt 0.979811 0.026026 +vt 0.812478 0.149978 +vt 0.979811 0.066311 +vt 0.527027 0.435429 +vt 0.881841 0.149978 +vt 0.843507 0.128244 +vt 0.596390 0.435429 +vt 0.881841 0.109692 +vt 0.817861 0.222888 +vt 0.848976 0.128244 +vt 0.689439 0.142316 +vt 0.886301 0.019277 +vt 0.748497 0.142316 +vt 0.689439 0.182602 +vt 0.748497 0.182602 +vt 0.010615 0.996204 +vt 0.886301 0.059563 +vt 0.838909 0.110506 +vt 0.736487 0.043387 +vt 0.776411 0.077745 +vt 0.838909 0.115975 +vt 0.736487 0.069271 +vt 0.602943 0.131781 +vt 0.872433 0.137963 +vt 0.740196 0.145777 +vt 0.628827 0.131781 +vt 0.813686 0.170385 +vt 0.823529 0.145777 +vt 0.959746 0.218471 +vt 0.689482 0.198692 +vt 0.730721 0.035046 +vt 0.959746 0.301804 +vt 0.813019 0.143230 +vt 0.817575 0.126913 +vt 0.722014 0.258843 +vt 0.813019 0.183516 +vt 0.965588 0.139222 +vt 0.827101 0.120031 +vt 0.826320 0.183516 +vt 0.978888 0.139222 +vt 0.388300 0.395143 +vt 0.609771 0.222888 +vt 0.718045 0.085084 +vt 0.826320 0.143230 +vt 0.836163 0.236739 +vt 0.880457 0.113700 +vt 0.609771 0.182602 +vt 0.689904 0.069271 +vt 0.829067 0.115975 +vt 0.897126 0.092177 +vt 0.862684 0.215216 +vt 0.906978 0.092177 +vt 0.692964 0.069271 +vt 1.005409 0.160745 +vt 0.414821 0.416667 +vt 0.692964 0.095155 +vt 0.689904 0.095155 +vt 0.995557 0.160745 +vt 0.829067 0.121444 +vt 0.680596 0.095155 +vt 0.897019 0.135804 +vt 0.654712 0.121039 +vt 0.689904 0.121039 +vt 0.829067 0.126913 +vt 0.680596 0.121039 +vt 0.680596 0.043387 +vt 0.872433 0.092864 +vt 0.740196 0.111196 +vt 0.689904 0.043387 +vt 0.885461 0.092864 +vt 0.829067 0.110506 +vt 0.680596 0.069271 +vt 0.813686 0.135804 +vt 0.823529 0.111196 +vt 0.660539 0.121039 +vt 0.822863 0.126913 +vt 0.730721 0.468669 +vt 0.791824 0.201543 +vt 0.814932 0.126913 +vt 0.046050 0.468669 +vt 0.714726 0.069271 +vt 0.714726 0.095155 +vt 0.679134 0.222888 +vt 0.884232 0.499889 +vt 0.787408 0.085084 +vt 0.910448 0.026026 +vt 0.010615 0.499889 +vt 0.679134 0.182602 +vt 0.816938 0.059563 +s 1 +usemtl Computer +f 24635/43524/16138 24636/43525/16138 24637/43528/16138 24638/43533/16138 +f 24639/43535/16139 24640/43536/16139 24641/43537/16139 24642/43540/16139 +f 24643/43544/16140 24644/43545/16140 24645/43549/16140 24646/43551/16140 +f 24647/43553/16141 24648/43554/16142 24649/43556/16142 24650/43557/16141 +f 24651/43560/16143 24652/43563/16143 24653/43564/16143 24654/43566/16143 +f 24655/43568/16144 24656/43571/16144 24657/43575/16144 24658/43577/16144 +f 24659/43578/16145 24660/43582/16146 24661/43585/16147 24662/43588/16145 +f 24663/43591/16148 24664/43594/16149 24638/43531/16150 24637/43529/16149 +f 24664/43595/16151 24659/43579/16151 24662/43589/16151 24638/43532/16151 +f 24665/43598/16144 24636/43526/16144 24635/43523/16144 24666/43601/16144 +f 24666/43601/16144 24635/43523/16144 24656/43572/16144 24655/43569/16144 +f 24667/43603/16142 24668/43606/16141 24639/43534/16141 24642/43541/16142 +f 24668/43606/16141 24647/43553/16141 24650/43557/16141 24639/43534/16141 +f 24649/43555/16139 24669/43609/16139 24670/43612/16139 24650/43558/16139 +f 24657/43574/16138 24656/43573/16138 24662/43590/16138 24661/43586/16138 +f 24656/43573/16138 24635/43524/16138 24638/43533/16138 24662/43590/16138 +f 24671/43613/16152 24672/43616/16152 24673/43619/16152 24674/43624/16152 +f 24675/43628/16153 24676/43633/16154 24677/43636/16154 24678/43637/16153 +f 24679/43640/16153 24678/43637/16153 24680/43643/16153 24681/43645/16153 +f 24682/43646/16153 24683/43649/16153 24675/43628/16153 24684/43652/16153 +f 24684/43652/16153 24675/43628/16153 24678/43637/16153 24679/43640/16153 +f 24681/43645/16143 24680/43643/16143 24685/43655/16143 24669/43610/16143 24649/43556/16143 24648/43554/16143 +f 24642/43542/16140 24641/43538/16140 24686/43658/16140 24683/43650/16140 24682/43647/16140 24667/43604/16140 +f 24672/43617/16155 24678/43638/16156 24677/43634/16155 24673/43620/16156 +f 24653/43564/16157 24673/43621/16157 24677/43635/16157 24654/43566/16157 +f 24685/43656/16158 24680/43644/16158 24678/43639/16158 24672/43618/16158 +f 24671/43614/16158 24675/43629/16158 24683/43651/16158 24686/43659/16158 +f 24674/43625/16157 24645/43548/16157 24644/43546/16157 24676/43631/16157 +f 24671/43615/16159 24674/43626/16159 24676/43632/16159 24675/43630/16159 +f 24676/43633/16160 24687/43661/16160 24688/43662/16160 24677/43636/16160 +f 24687/43661/16161 24666/43602/16161 24655/43570/16161 24688/43662/16161 +f 24644/43547/16160 24643/43543/16160 24687/43661/16160 24676/43633/16160 +f 24643/43543/16162 24665/43599/16162 24666/43602/16161 24687/43661/16161 +f 24674/43627/16163 24673/43622/16163 24689/43663/16163 24690/43668/16163 +f 24690/43667/16164 24689/43664/16164 24659/43580/16164 24664/43596/16164 +f 24645/43549/16165 24674/43627/16166 24690/43668/16166 24646/43551/16166 +f 24646/43550/16167 24690/43669/16168 24664/43597/16168 24663/43592/16167 +f 24673/43623/16169 24653/43565/16169 24652/43561/16169 24689/43665/16169 +f 24689/43666/16170 24652/43562/16171 24660/43583/16171 24659/43581/16170 +f 24677/43636/16160 24688/43662/16160 24651/43559/16160 24654/43567/16160 +f 24688/43662/16161 24655/43570/16161 24658/43576/16162 24651/43559/16162 +f 24657/43575/16143 24661/43587/16143 24660/43584/16143 24658/43577/16143 +f 24658/43577/16143 24660/43584/16143 24652/43563/16143 24651/43560/16143 +f 24636/43527/16140 24665/43600/16140 24663/43593/16140 24637/43530/16140 +f 24665/43600/16140 24643/43544/16140 24646/43551/16140 24663/43593/16140 +f 24684/43653/16172 24679/43641/16172 24647/43552/16172 24668/43607/16172 +f 24682/43648/16173 24684/43654/16172 24668/43608/16172 24667/43605/16173 +f 24679/43642/16172 24681/43645/16173 24648/43554/16173 24647/43553/16172 +f 24686/43660/16174 24641/43539/16174 24669/43611/16174 24685/43657/16174 +f 24639/43535/16139 24650/43558/16139 24670/43612/16139 24640/43536/16139 +o laptop.006 +v 12.574541 1.070777 5.061008 +v 12.517613 1.070777 5.090280 +v 12.527628 1.070777 5.109757 +v 12.539181 1.070777 5.103817 +v 12.707151 0.800777 5.318913 +v 12.707151 0.831675 5.318913 +v 12.650223 0.831675 5.348184 +v 12.650223 0.800777 5.348184 +v 12.522739 0.854606 5.100249 +v 12.525302 0.843784 5.105233 +v 12.536224 0.846039 5.126475 +v 12.533359 0.858649 5.120903 +v 12.824852 0.807538 4.996788 +v 12.881781 0.807538 4.967516 +v 12.988167 0.800777 5.174420 +v 12.931238 0.800777 5.203691 +v 12.860683 0.854606 4.926485 +v 12.871303 0.858649 4.947138 +v 12.874168 0.846039 4.952711 +v 12.863246 0.843784 4.931468 +v 12.801191 1.058051 4.950772 +v 12.798629 1.070777 4.945787 +v 12.855557 1.070777 4.916515 +v 12.858120 1.058051 4.921500 +v 12.853559 1.060072 4.941038 +v 12.868438 1.060072 4.941566 +v 12.865572 1.070777 4.935994 +v 12.854020 1.070777 4.941934 +v 12.530494 1.060072 5.115330 +v 12.538720 1.060072 5.102922 +v 12.520176 1.058051 5.095264 +v 12.577105 1.058051 5.065993 +v 12.543837 0.807538 5.141281 +v 12.600765 0.807538 5.112009 +v 12.988167 0.831675 5.174420 +v 12.931238 0.831675 5.203691 +v 12.593701 0.837658 5.098272 +v 12.817789 0.837658 4.983050 +v 12.862616 0.846039 4.958651 +v 12.547776 0.846039 5.120535 +v 12.582591 0.833144 5.076663 +v 12.582231 0.843784 5.075961 +v 12.806317 0.843784 4.960740 +v 12.806678 0.833144 4.961442 +v 12.807774 0.800777 4.963573 +v 12.863606 0.833144 4.932170 +v 12.864702 0.800777 4.934302 +v 12.526758 0.800777 5.108066 +v 12.525662 0.833144 5.105934 +v 12.583687 0.800777 5.078794 +v 12.874717 0.837658 4.953779 +v 12.536774 0.837658 5.127543 +v 12.579668 0.854606 5.070977 +v 12.803755 0.854606 4.955756 +v 12.856424 0.858649 4.946610 +v 12.541586 0.858649 5.108494 +vn -0.0000 1.0000 -0.0000 +vn 0.4573 -0.0000 0.8893 +vn -0.8893 -0.0000 0.4573 +vn -0.0130 -0.9996 -0.0253 +vn -0.0131 -0.9996 -0.0255 +vn 0.8893 -0.0000 -0.4573 +vn -0.4185 -0.4031 -0.8139 +vn -0.0309 0.2102 0.9772 +vn -0.0308 0.2100 0.9772 +vn 0.8127 0.2102 0.5434 +vn 0.8127 0.2101 0.5434 +vn 0.4553 -0.0937 0.8854 +vn 0.4526 0.1422 0.8803 +vn -0.4560 -0.0742 -0.8869 +vn -0.4560 -0.0739 -0.8869 +vn 0.4204 -0.7964 -0.4349 +vn 0.4204 -0.7964 -0.4348 +vn 0.0430 -0.9956 0.0836 +vn -0.0835 0.9832 -0.1624 +vn -0.5982 -0.7964 0.0889 +vn -0.5983 -0.7964 0.0889 +vn -0.4061 -0.4598 -0.7897 +vn -0.4571 -0.0272 -0.8890 +vn -0.4571 -0.0275 -0.8890 +vn 0.3117 0.7318 0.6061 +vn 0.4571 0.0311 0.8889 +vn 0.6850 0.5662 0.4584 +vn 0.6851 0.5660 0.4585 +vn 0.9665 0.0208 0.2558 +vn 0.9665 0.0209 0.2557 +vn 0.9665 0.0208 0.2557 +vn -0.0257 0.5660 0.8240 +vn -0.3543 0.0209 0.9349 +vn -0.3543 0.0208 0.9349 +vn 0.0812 -0.9841 0.1578 +vn 0.0815 -0.9840 0.1584 +vn 0.0112 0.9997 0.0217 +vt 0.843507 0.115975 +vt 0.854445 0.126913 +vt 0.859914 0.126913 +vt 0.843507 0.110506 +vt 0.846470 0.077745 +vt 0.859914 0.128244 +vt 0.758802 0.142316 +vt 0.817861 0.142316 +vt 0.758802 0.182602 +vt 0.817861 0.182602 +vt 0.854445 0.128244 +vt 0.628827 0.198692 +vt 0.847470 0.129216 +vt 0.876080 0.129216 +vt 0.876080 0.212549 +vt 0.884870 0.418901 +vt 0.046050 0.035046 +vt 0.847470 0.212549 +vt 0.602943 0.198692 +vt 0.872433 0.418901 +vt 0.714726 0.043387 +vt 0.706351 0.077745 +vt 0.636292 0.077745 +vt 0.862684 0.131882 +vt 0.692964 0.043387 +vt 0.836163 0.196454 +vt 0.609771 0.142316 +vt 0.816938 0.019277 +vt 0.679134 0.142316 +vt 0.897019 0.170385 +vt 0.654712 0.131781 +vt 0.680596 0.131781 +vt 0.931137 0.218471 +vt 0.680596 0.198692 +vt 0.654712 0.198692 +vt 0.931137 0.301804 +vt 0.714726 0.121039 +vt 0.484881 0.500000 +vt 0.787408 0.125370 +vt 0.910448 0.066311 +vt 0.457664 0.435429 +vt 0.388300 0.435429 +vt 0.718045 0.125370 +vt 0.414821 0.500000 +vt 0.692964 0.121039 +vt 0.554940 0.416667 +vt 0.838909 0.121444 +vt 0.736487 0.095155 +vt 0.625000 0.416667 +vt 0.843507 0.121444 +vt 0.848976 0.126913 +vt 0.843507 0.126913 +vt 0.625000 0.500000 +vt 0.736487 0.121039 +vt 0.554940 0.500000 +vt 0.812478 0.109692 +vt 0.748497 0.222888 +vt 0.884232 0.996204 +vt 0.979811 0.026026 +vt 0.812478 0.149978 +vt 0.979811 0.066311 +vt 0.527027 0.435429 +vt 0.881841 0.149978 +vt 0.843507 0.128244 +vt 0.596390 0.435429 +vt 0.881841 0.109692 +vt 0.817861 0.222888 +vt 0.848976 0.128244 +vt 0.689439 0.142316 +vt 0.886301 0.019277 +vt 0.748497 0.142316 +vt 0.689439 0.182602 +vt 0.748497 0.182602 +vt 0.010615 0.996204 +vt 0.886301 0.059563 +vt 0.838909 0.110506 +vt 0.736487 0.043387 +vt 0.776411 0.077745 +vt 0.838909 0.115975 +vt 0.736487 0.069271 +vt 0.602943 0.131781 +vt 0.872433 0.137963 +vt 0.740196 0.145777 +vt 0.628827 0.131781 +vt 0.813686 0.170385 +vt 0.823529 0.145777 +vt 0.959746 0.218471 +vt 0.689482 0.198692 +vt 0.730721 0.035046 +vt 0.959746 0.301804 +vt 0.813019 0.143230 +vt 0.817575 0.126913 +vt 0.722014 0.258843 +vt 0.813019 0.183516 +vt 0.965588 0.139222 +vt 0.827101 0.120031 +vt 0.826320 0.183516 +vt 0.978888 0.139222 +vt 0.388300 0.395143 +vt 0.609771 0.222888 +vt 0.718045 0.085084 +vt 0.826320 0.143230 +vt 0.836163 0.236739 +vt 0.880457 0.113700 +vt 0.609771 0.182602 +vt 0.689904 0.069271 +vt 0.829067 0.115975 +vt 0.897126 0.092177 +vt 0.862684 0.215216 +vt 0.906978 0.092177 +vt 0.692964 0.069271 +vt 1.005409 0.160745 +vt 0.414821 0.416667 +vt 0.692964 0.095155 +vt 0.689904 0.095155 +vt 0.995557 0.160745 +vt 0.829067 0.121444 +vt 0.680596 0.095155 +vt 0.897019 0.135804 +vt 0.654712 0.121039 +vt 0.689904 0.121039 +vt 0.829067 0.126913 +vt 0.680596 0.121039 +vt 0.680596 0.043387 +vt 0.872433 0.092864 +vt 0.740196 0.111196 +vt 0.689904 0.043387 +vt 0.885461 0.092864 +vt 0.829067 0.110506 +vt 0.680596 0.069271 +vt 0.813686 0.135804 +vt 0.823529 0.111196 +vt 0.660539 0.121039 +vt 0.822863 0.126913 +vt 0.730721 0.468669 +vt 0.791824 0.201543 +vt 0.814932 0.126913 +vt 0.046050 0.468669 +vt 0.714726 0.069271 +vt 0.714726 0.095155 +vt 0.679134 0.222888 +vt 0.884232 0.499889 +vt 0.787408 0.085084 +vt 0.910448 0.026026 +vt 0.010615 0.499889 +vt 0.679134 0.182602 +vt 0.816938 0.059563 +s 1 +usemtl Computer +f 24691/43671/16175 24692/43672/16175 24693/43675/16175 24694/43680/16175 +f 24695/43682/16176 24696/43683/16176 24697/43684/16176 24698/43687/16176 +f 24699/43691/16177 24700/43692/16177 24701/43696/16177 24702/43698/16177 +f 24703/43700/16178 24704/43701/16179 24705/43703/16179 24706/43704/16178 +f 24707/43707/16180 24708/43710/16180 24709/43711/16180 24710/43713/16180 +f 24711/43715/16181 24712/43718/16181 24713/43722/16181 24714/43724/16181 +f 24715/43725/16182 24716/43729/16182 24717/43732/16183 24718/43735/16182 +f 24719/43738/16184 24720/43741/16184 24694/43678/16185 24693/43676/16184 +f 24720/43742/16186 24715/43726/16186 24718/43736/16186 24694/43679/16186 +f 24721/43745/16181 24692/43673/16181 24691/43670/16181 24722/43748/16181 +f 24722/43748/16181 24691/43670/16181 24712/43719/16181 24711/43716/16181 +f 24723/43750/16179 24724/43753/16178 24695/43681/16178 24698/43688/16179 +f 24724/43753/16178 24703/43700/16178 24706/43704/16178 24695/43681/16178 +f 24705/43702/16176 24725/43756/16176 24726/43759/16176 24706/43705/16176 +f 24713/43721/16175 24712/43720/16175 24718/43737/16175 24717/43733/16175 +f 24712/43720/16175 24691/43671/16175 24694/43680/16175 24718/43737/16175 +f 24727/43760/16187 24728/43763/16187 24729/43766/16187 24730/43771/16187 +f 24731/43775/16188 24732/43780/16189 24733/43783/16189 24734/43784/16188 +f 24735/43787/16188 24734/43784/16188 24736/43790/16188 24737/43792/16188 +f 24738/43793/16188 24739/43796/16188 24731/43775/16188 24740/43799/16188 +f 24740/43799/16188 24731/43775/16188 24734/43784/16188 24735/43787/16188 +f 24737/43792/16180 24736/43790/16180 24741/43802/16180 24725/43757/16180 24705/43703/16180 24704/43701/16180 +f 24698/43689/16177 24697/43685/16177 24742/43805/16177 24739/43797/16177 24738/43794/16177 24723/43751/16177 +f 24728/43764/16190 24734/43785/16191 24733/43781/16191 24729/43767/16190 +f 24709/43711/16192 24729/43768/16192 24733/43782/16192 24710/43713/16192 +f 24741/43803/16193 24736/43791/16193 24734/43786/16193 24728/43765/16193 +f 24727/43761/16193 24731/43776/16193 24739/43798/16193 24742/43806/16193 +f 24730/43772/16192 24701/43695/16192 24700/43693/16192 24732/43778/16192 +f 24727/43762/16194 24730/43773/16195 24732/43779/16194 24731/43777/16195 +f 24732/43780/16196 24743/43808/16196 24744/43809/16196 24733/43783/16196 +f 24743/43808/16197 24722/43749/16197 24711/43717/16197 24744/43809/16197 +f 24700/43694/16196 24699/43690/16196 24743/43808/16196 24732/43780/16196 +f 24699/43690/16198 24721/43746/16198 24722/43749/16197 24743/43808/16197 +f 24730/43774/16199 24729/43769/16199 24745/43810/16199 24746/43815/16199 +f 24746/43814/16200 24745/43811/16200 24715/43727/16200 24720/43743/16200 +f 24701/43696/16201 24730/43774/16202 24746/43815/16202 24702/43698/16202 +f 24702/43697/16203 24746/43816/16204 24720/43744/16204 24719/43739/16205 +f 24729/43770/16206 24709/43712/16206 24708/43708/16206 24745/43812/16206 +f 24745/43813/16207 24708/43709/16208 24716/43730/16208 24715/43728/16207 +f 24733/43783/16196 24744/43809/16196 24707/43706/16196 24710/43714/16196 +f 24744/43809/16197 24711/43717/16197 24714/43723/16198 24707/43706/16198 +f 24713/43722/16180 24717/43734/16180 24716/43731/16180 24714/43724/16180 +f 24714/43724/16180 24716/43731/16180 24708/43710/16180 24707/43707/16180 +f 24692/43674/16177 24721/43747/16177 24719/43740/16177 24693/43677/16177 +f 24721/43747/16177 24699/43691/16177 24702/43698/16177 24719/43740/16177 +f 24740/43800/16209 24735/43788/16209 24703/43699/16209 24724/43754/16209 +f 24738/43795/16210 24740/43801/16209 24724/43755/16209 24723/43752/16210 +f 24735/43789/16209 24737/43792/16210 24704/43701/16210 24703/43700/16209 +f 24742/43807/16211 24697/43686/16211 24725/43758/16211 24741/43804/16211 +f 24695/43682/16176 24706/43705/16176 24726/43759/16176 24696/43683/16176 +o tissuebox.001 +v 10.227768 0.794067 4.287953 +v 10.227768 0.914067 4.287953 +v 10.303874 0.914067 4.201739 +v 10.303874 0.794067 4.201739 +v 10.465057 0.914067 4.344025 +v 10.465057 0.794067 4.344025 +v 10.388951 0.914067 4.430239 +v 10.388951 0.794067 4.430239 +vn -0.7497 -0.0000 -0.6618 +vn 0.6618 -0.0000 -0.7497 +vn 0.7497 -0.0000 0.6618 +vn -0.6618 -0.0000 0.7497 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vt 0.995476 0.261945 +vt 0.282795 0.992674 +vt 0.839733 0.973224 +vt 0.862857 0.261945 +vt 0.579630 0.992674 +vt 0.267187 0.007014 +vt 0.862857 0.028055 +vt 0.581996 0.013119 +vt 0.014890 0.007014 +vt 0.995476 0.028055 +vt 0.285720 0.013119 +vt 0.607416 0.973224 +vt 0.581996 1.001448 +vt 0.855463 0.271477 +vt 0.014890 1.016201 +vt 0.285720 1.001448 +vt 0.997871 0.271477 +vt 0.607416 0.043957 +vt 0.855463 0.005190 +vt 0.579630 0.016539 +vt 0.267187 1.016201 +vt 0.997871 0.005190 +vt 0.282795 0.016539 +vt 0.839733 0.043957 +s 1 +usemtl Tissuebox +f 24747/43817/16212 24748/43820/16212 24749/43823/16212 24750/43826/16212 +f 24750/43827/16213 24749/43824/16213 24751/43829/16213 24752/43832/16213 +f 24752/43833/16214 24751/43830/16214 24753/43835/16214 24754/43838/16214 +f 24754/43839/16215 24753/43836/16215 24748/43821/16215 24747/43818/16215 +f 24750/43828/16216 24752/43834/16216 24754/43840/16216 24747/43819/16216 +f 24751/43831/16217 24749/43825/16217 24748/43822/16217 24753/43837/16217 +o calculator.001 +v 9.348177 0.805691 4.077972 +v 9.357618 0.805740 4.066961 +v 9.348434 0.805713 4.059078 +v 9.339396 0.805665 4.069710 +v 9.367071 0.805691 4.055959 +v 9.357574 0.805665 4.048533 +v 9.343045 0.805641 4.054452 +v 9.334925 0.805598 4.064252 +v 9.351501 0.805598 4.044940 +v 9.381897 0.805694 4.107019 +v 9.374026 0.805545 4.116189 +v 9.376410 0.807594 4.116243 +v 9.382313 0.807706 4.109367 +v 9.382038 0.805544 4.052873 +v 9.374907 0.805542 4.046845 +v 9.374817 0.807591 4.048740 +v 9.380166 0.807592 4.053260 +v 9.393089 0.805694 4.116625 +v 9.390705 0.807706 4.116571 +v 9.434173 0.805694 4.113453 +v 9.442043 0.805545 4.104283 +v 9.439697 0.807594 4.104261 +v 9.433795 0.807706 4.111137 +v 9.365162 0.805522 4.039797 +v 9.358423 0.805473 4.037262 +v 9.354173 0.805412 4.037646 +v 9.348184 0.805470 4.043225 +v 9.340109 0.805500 4.051931 +v 9.332727 0.805470 4.061233 +v 9.328384 0.805473 4.072258 +v 9.328119 0.805412 4.067998 +v 9.331912 0.805522 4.078534 +v 9.340355 0.805542 4.087098 +v 9.328388 0.803882 4.060987 +v 9.329046 0.804752 4.060826 +v 9.337566 0.804757 4.049749 +v 9.337247 0.803883 4.049475 +v 9.330647 0.805233 4.060580 +v 9.338431 0.805247 4.050492 +v 9.347223 0.804752 4.039649 +v 9.347282 0.803882 4.038974 +v 9.347223 0.805233 4.041268 +v 9.322200 0.802493 4.071702 +v 9.322327 0.803882 4.071623 +v 9.328295 0.802493 4.061009 +v 9.323214 0.804748 4.071068 +v 9.325402 0.805217 4.069698 +v 9.355442 0.805217 4.034702 +v 9.356463 0.804748 4.032331 +v 9.356877 0.803882 4.031370 +v 9.347291 0.802493 4.038878 +v 9.356937 0.802493 4.031233 +v 9.337201 0.802493 4.049436 +v 9.490506 0.803884 4.128860 +v 9.489561 0.804765 4.129961 +v 9.494467 0.804761 4.136023 +v 9.495382 0.803883 4.134957 +v 9.486996 0.800762 4.132950 +v 9.491987 0.805260 4.138912 +v 9.494132 0.804753 4.140752 +v 9.494961 0.803882 4.139787 +v 9.491918 0.805235 4.143332 +v 9.479442 0.802493 4.118814 +v 9.479306 0.803884 4.118971 +v 9.490642 0.802493 4.128702 +v 9.478356 0.804765 4.120079 +v 9.475778 0.800764 4.123082 +v 9.470757 0.801036 4.128931 +v 9.482000 0.801033 4.138770 +v 9.487170 0.805522 4.144524 +v 9.487709 0.805473 4.148235 +v 9.486023 0.805412 4.150820 +v 9.488016 0.805217 4.148498 +v 9.489621 0.804748 4.146627 +v 9.490272 0.803882 4.145869 +v 9.495079 0.802493 4.139649 +v 9.490365 0.802493 4.145761 +v 9.495512 0.802493 4.134805 +v 9.367071 0.793172 4.055959 +v 9.357618 0.792800 4.066961 +v 9.348434 0.793002 4.059078 +v 9.357574 0.793361 4.048533 +v 9.348177 0.793172 4.077972 +v 9.339396 0.793361 4.069710 +v 9.343045 0.793548 4.054452 +v 9.351501 0.793865 4.044940 +v 9.334925 0.793865 4.064252 +v 9.382038 0.794275 4.052873 +v 9.374186 0.793158 4.062015 +v 9.374907 0.794286 4.046845 +v 9.364710 0.792786 4.073048 +v 9.355240 0.793158 4.084086 +v 9.347394 0.794275 4.093234 +v 9.340355 0.794286 4.087098 +v 9.331912 0.794435 4.078534 +v 9.328384 0.794803 4.072258 +v 9.328119 0.795260 4.067998 +v 9.332727 0.794824 4.061233 +v 9.340109 0.794605 4.051931 +v 9.348184 0.794824 4.043225 +v 9.358423 0.794803 4.037262 +v 9.354173 0.795260 4.037646 +v 9.365162 0.794435 4.039797 +v 9.331824 0.803884 4.096987 +v 9.332774 0.804765 4.095890 +v 9.324461 0.804761 4.086903 +v 9.323502 0.803883 4.087930 +v 9.335353 0.805272 4.092911 +v 9.327037 0.805260 4.084097 +v 9.321448 0.804753 4.079300 +v 9.320484 0.803882 4.080148 +v 9.323965 0.805235 4.076981 +v 9.338718 0.802493 4.103315 +v 9.338854 0.803884 4.103158 +v 9.331688 0.802493 4.097144 +v 9.339804 0.804765 4.102056 +v 9.342382 0.805273 4.099065 +v 9.349413 0.805273 4.105219 +v 9.359209 0.805273 4.113628 +v 9.358613 0.807337 4.111845 +v 9.351265 0.807337 4.105539 +v 9.320346 0.802493 4.080269 +v 9.323365 0.802493 4.088077 +v 9.482444 0.803882 4.154990 +v 9.482085 0.804752 4.155407 +v 9.472997 0.804757 4.165996 +v 9.472997 0.803883 4.165996 +v 9.481284 0.805233 4.156340 +v 9.472997 0.805247 4.165996 +v 9.463908 0.804752 4.176584 +v 9.463549 0.803882 4.177002 +v 9.464708 0.805233 4.175652 +v 9.482494 0.802493 4.154930 +v 9.480725 0.805470 4.156992 +v 9.472997 0.805500 4.165996 +v 9.465268 0.805470 4.175000 +v 9.459970 0.805412 4.181172 +v 9.457977 0.805217 4.183494 +v 9.456371 0.804748 4.185364 +v 9.455721 0.803882 4.186122 +v 9.463498 0.802493 4.177062 +v 9.455627 0.802493 4.186231 +v 9.472997 0.802493 4.165996 +v 9.450419 0.803882 4.191679 +v 9.451247 0.804753 4.190713 +v 9.446624 0.804761 4.191761 +v 9.445708 0.803883 4.192828 +v 9.453462 0.805235 4.188134 +v 9.449103 0.805260 4.188873 +v 9.439888 0.804765 4.187831 +v 9.438943 0.803884 4.188932 +v 9.442454 0.800762 4.184842 +v 9.450300 0.802493 4.191817 +v 9.457670 0.805473 4.183231 +v 9.453920 0.805522 4.183260 +v 9.447449 0.801033 4.179022 +v 9.436020 0.801036 4.169401 +v 9.431000 0.800764 4.175250 +v 9.428422 0.804765 4.178253 +v 9.427471 0.803884 4.179360 +v 9.438807 0.802493 4.189090 +v 9.427336 0.802493 4.179518 +v 9.445579 0.802493 4.192979 +v 9.480978 0.793865 4.156077 +v 9.472690 0.793548 4.165733 +v 9.470546 0.793002 4.163892 +v 9.479634 0.793361 4.153304 +v 9.464401 0.793865 4.175388 +v 9.461457 0.793361 4.174480 +v 9.464725 0.792800 4.158896 +v 9.474172 0.793172 4.147890 +v 9.455277 0.793172 4.169902 +v 9.486023 0.795260 4.150820 +v 9.480725 0.794824 4.156992 +v 9.487709 0.794803 4.148235 +v 9.472997 0.794605 4.165996 +v 9.465268 0.794824 4.175000 +v 9.459970 0.795260 4.181172 +v 9.457670 0.794803 4.183231 +v 9.453920 0.794435 4.183260 +v 9.447449 0.794286 4.179022 +v 9.436020 0.794264 4.169401 +v 9.443891 0.793145 4.160232 +v 9.453389 0.792771 4.149166 +v 9.462887 0.793145 4.138100 +v 9.482000 0.794286 4.138770 +v 9.470757 0.794264 4.128931 +v 9.487170 0.794435 4.144524 +v 9.428504 0.803884 4.075366 +v 9.427554 0.804765 4.076473 +v 9.438745 0.804765 4.086079 +v 9.439696 0.803884 4.084972 +v 9.424976 0.805273 4.079476 +v 9.436168 0.805273 4.089082 +v 9.450592 0.803884 4.094324 +v 9.449641 0.804765 4.095431 +v 9.460537 0.804765 4.104784 +v 9.461487 0.803884 4.103677 +v 9.447063 0.805273 4.098434 +v 9.457959 0.805273 4.107787 +v 9.407651 0.802493 4.057192 +v 9.407516 0.803884 4.057350 +v 9.417313 0.803884 4.065759 +v 9.417448 0.802493 4.065601 +v 9.406566 0.804765 4.058457 +v 9.416363 0.804765 4.066866 +v 9.403988 0.805273 4.061460 +v 9.413785 0.805273 4.069870 +v 9.413778 0.805744 4.115166 +v 9.423277 0.805694 4.104101 +v 9.420691 0.807732 4.104283 +v 9.413567 0.807769 4.112582 +v 9.381598 0.805744 4.087544 +v 9.391396 0.805744 4.095953 +v 9.391358 0.807769 4.093519 +v 9.384010 0.807769 4.087212 +v 9.452939 0.805545 4.113636 +v 9.466868 0.800764 4.115434 +v 9.461847 0.801036 4.121283 +v 9.469446 0.804765 4.112431 +v 9.470396 0.803884 4.111324 +v 9.470531 0.802493 4.111166 +v 9.450727 0.802493 4.094166 +v 9.461623 0.802493 4.103519 +v 9.428639 0.802493 4.075208 +v 9.439832 0.802493 4.084814 +v 9.464401 0.805598 4.175388 +v 9.472690 0.805641 4.165733 +v 9.470546 0.805713 4.163892 +v 9.461457 0.805665 4.174480 +v 9.480978 0.805598 4.156077 +v 9.479634 0.805665 4.153304 +v 9.464725 0.801231 4.158896 +v 9.455277 0.801181 4.169902 +v 9.474172 0.801181 4.147890 +v 9.462887 0.801185 4.138100 +v 9.453389 0.801235 4.149166 +v 9.443891 0.801185 4.160232 +v 9.365026 0.803882 4.028257 +v 9.364332 0.804753 4.029339 +v 9.372305 0.804761 4.031164 +v 9.373175 0.803883 4.030060 +v 9.362422 0.805235 4.032177 +v 9.369922 0.805260 4.034136 +v 9.382448 0.804765 4.038019 +v 9.383388 0.803884 4.036914 +v 9.379894 0.805272 4.041019 +v 9.365124 0.802493 4.028102 +v 9.404281 0.805694 4.126232 +v 9.393504 0.807707 4.118973 +v 9.401897 0.807707 4.126177 +v 9.389608 0.804765 4.044034 +v 9.387042 0.805273 4.047035 +v 9.394191 0.805273 4.053051 +v 9.396769 0.804765 4.050048 +v 9.390553 0.803884 4.042927 +v 9.397719 0.803884 4.048941 +v 9.390688 0.802493 4.042769 +v 9.397855 0.802493 4.048783 +v 9.373299 0.802493 4.029902 +v 9.383523 0.802493 4.036755 +v 9.398757 0.803884 4.154713 +v 9.399707 0.804765 4.153605 +v 9.388811 0.804765 4.144253 +v 9.387861 0.803884 4.145360 +v 9.402286 0.805273 4.150602 +v 9.391390 0.805273 4.141250 +v 9.376670 0.803884 4.135754 +v 9.377620 0.804765 4.134647 +v 9.366428 0.804765 4.125041 +v 9.365479 0.803884 4.126148 +v 9.380198 0.805273 4.131644 +v 9.369006 0.805273 4.122037 +v 9.418427 0.802493 4.171870 +v 9.418562 0.803884 4.171712 +v 9.409653 0.803884 4.164065 +v 9.409517 0.802493 4.164223 +v 9.419512 0.804765 4.170605 +v 9.410603 0.804765 4.162958 +v 9.422090 0.800764 4.167602 +v 9.413180 0.805273 4.159955 +v 9.427111 0.801036 4.161753 +v 9.418201 0.805545 4.154106 +v 9.392878 0.807731 4.114042 +v 9.384484 0.807731 4.106837 +v 9.391097 0.805694 4.076478 +v 9.398968 0.805545 4.067309 +v 9.396758 0.807594 4.067405 +v 9.390856 0.807706 4.074281 +v 9.406830 0.807731 4.126018 +v 9.413954 0.807768 4.117719 +v 9.356631 0.804765 4.116632 +v 9.346834 0.804765 4.108222 +v 9.355681 0.803884 4.117739 +v 9.345884 0.803884 4.109329 +v 9.355546 0.802493 4.117897 +v 9.345749 0.802493 4.109487 +v 9.376534 0.802493 4.135912 +v 9.365343 0.802493 4.126306 +v 9.398622 0.802493 4.154871 +v 9.387726 0.802493 4.145518 +v 9.434173 0.793145 4.113453 +v 9.424674 0.792771 4.124518 +v 9.413778 0.792771 4.115166 +v 9.423277 0.793145 4.104101 +v 9.415176 0.793145 4.135584 +v 9.404281 0.793145 4.126232 +v 9.412086 0.793145 4.094494 +v 9.402587 0.792771 4.105560 +v 9.391396 0.792771 4.095953 +v 9.400893 0.793145 4.084888 +v 9.393089 0.793145 4.116625 +v 9.381897 0.793145 4.107019 +v 9.461847 0.794264 4.121283 +v 9.453978 0.793145 4.130452 +v 9.445068 0.793145 4.122805 +v 9.452939 0.794264 4.113636 +v 9.444479 0.792771 4.141518 +v 9.435570 0.792771 4.133871 +v 9.434980 0.793145 4.152584 +v 9.426072 0.793145 4.144937 +v 9.427111 0.794264 4.161753 +v 9.418201 0.794264 4.154106 +v 9.407306 0.794264 4.144753 +v 9.396410 0.794264 4.135401 +v 9.385219 0.794264 4.125795 +v 9.374026 0.794264 4.116189 +v 9.372100 0.793145 4.098610 +v 9.364230 0.794264 4.107780 +v 9.354433 0.794264 4.099370 +v 9.362304 0.793145 4.090201 +v 9.381598 0.792771 4.087544 +v 9.371801 0.792771 4.079135 +v 9.391097 0.793145 4.076478 +v 9.381300 0.793145 4.068069 +v 9.398968 0.794264 4.067309 +v 9.389171 0.794264 4.058900 +v 9.419956 0.794264 4.085325 +v 9.408764 0.794264 4.075718 +v 9.442043 0.794264 4.104283 +v 9.431148 0.794264 4.094931 +v 9.385219 0.805545 4.125795 +v 9.383394 0.807544 4.125372 +v 9.379503 0.807334 4.129905 +v 9.407306 0.805545 4.144753 +v 9.415176 0.805694 4.135584 +v 9.412829 0.807706 4.135561 +v 9.406927 0.807594 4.142438 +v 9.372100 0.805694 4.098610 +v 9.379187 0.807768 4.087876 +v 9.372063 0.807731 4.096175 +v 9.394548 0.807324 4.054121 +v 9.402877 0.807324 4.061269 +v 9.434980 0.801185 4.152584 +v 9.426072 0.805694 4.144937 +v 9.444479 0.801235 4.141518 +v 9.435570 0.805744 4.133871 +v 9.453978 0.801185 4.130452 +v 9.445068 0.805694 4.122805 +v 9.425623 0.807706 4.104123 +v 9.419956 0.805545 4.085325 +v 9.408764 0.805545 4.075718 +v 9.409180 0.807594 4.078066 +v 9.417573 0.807594 4.085271 +v 9.400893 0.805694 4.084888 +v 9.403277 0.807706 4.084942 +v 9.416328 0.807768 4.114952 +v 9.423451 0.807731 4.106653 +v 9.424674 0.805744 4.124518 +v 9.422125 0.807768 4.124732 +v 9.342215 0.807591 4.086722 +v 9.348081 0.807703 4.079879 +v 9.388684 0.807731 4.076811 +v 9.381561 0.807768 4.085110 +v 9.431623 0.807731 4.113667 +v 9.402286 0.796073 4.150602 +v 9.399707 0.798279 4.153605 +v 9.388811 0.798279 4.144253 +v 9.391390 0.796073 4.141250 +v 9.398757 0.800535 4.154713 +v 9.387861 0.800535 4.145360 +v 9.380198 0.796073 4.131644 +v 9.377620 0.798279 4.134647 +v 9.366428 0.798279 4.125041 +v 9.369006 0.796073 4.122037 +v 9.376670 0.800535 4.135754 +v 9.365479 0.800535 4.126148 +v 9.422090 0.796073 4.167602 +v 9.413180 0.796073 4.159955 +v 9.419512 0.798279 4.170605 +v 9.410603 0.798279 4.162958 +v 9.418562 0.800535 4.171712 +v 9.409653 0.800535 4.164065 +v 9.355681 0.800535 4.117739 +v 9.345884 0.800535 4.109329 +v 9.356631 0.798279 4.116632 +v 9.346834 0.798279 4.108222 +v 9.359209 0.796073 4.113628 +v 9.349413 0.796073 4.105219 +v 9.362422 0.796362 4.032177 +v 9.364332 0.798372 4.029339 +v 9.372305 0.798311 4.031164 +v 9.369922 0.796170 4.034136 +v 9.365026 0.800547 4.028257 +v 9.373175 0.800539 4.030060 +v 9.382448 0.798283 4.038019 +v 9.379894 0.796085 4.041019 +v 9.383388 0.800536 4.036914 +v 9.355442 0.796494 4.034702 +v 9.356463 0.798408 4.032331 +v 9.356877 0.800551 4.031370 +v 9.390553 0.800535 4.042927 +v 9.397719 0.800535 4.048941 +v 9.389608 0.798281 4.044034 +v 9.396769 0.798279 4.050048 +v 9.387042 0.796079 4.047035 +v 9.394191 0.796073 4.053051 +v 9.424976 0.796073 4.079476 +v 9.427554 0.798279 4.076473 +v 9.438745 0.798279 4.086079 +v 9.436168 0.796073 4.089082 +v 9.428504 0.800535 4.075366 +v 9.439696 0.800535 4.084972 +v 9.447063 0.796073 4.098434 +v 9.449641 0.798279 4.095431 +v 9.460537 0.798279 4.104784 +v 9.457959 0.796073 4.107787 +v 9.450592 0.800535 4.094324 +v 9.461487 0.800535 4.103677 +v 9.403988 0.796073 4.061460 +v 9.413785 0.796073 4.069870 +v 9.406566 0.798279 4.058457 +v 9.416363 0.798279 4.066866 +v 9.407516 0.800535 4.057350 +v 9.417313 0.800535 4.065759 +v 9.470396 0.800535 4.111324 +v 9.479306 0.800535 4.118971 +v 9.469446 0.798279 4.112431 +v 9.478356 0.798279 4.120079 +v 9.466868 0.796073 4.115434 +v 9.475778 0.796073 4.123082 +v 9.453462 0.796362 4.188134 +v 9.451247 0.798372 4.190713 +v 9.446624 0.798311 4.191761 +v 9.449103 0.796170 4.188873 +v 9.450419 0.800547 4.191679 +v 9.445708 0.800539 4.192828 +v 9.439888 0.798283 4.187831 +v 9.442454 0.796085 4.184842 +v 9.438943 0.800536 4.188932 +v 9.457977 0.796494 4.183494 +v 9.456371 0.798408 4.185364 +v 9.455721 0.800551 4.186122 +v 9.427471 0.800535 4.179360 +v 9.428422 0.798279 4.178253 +v 9.431000 0.796073 4.175250 +v 9.481284 0.796374 4.156340 +v 9.482085 0.798376 4.155407 +v 9.472997 0.798343 4.165996 +v 9.472997 0.796268 4.165996 +v 9.482444 0.800547 4.154990 +v 9.472997 0.800543 4.165996 +v 9.463908 0.798376 4.176584 +v 9.464708 0.796374 4.175652 +v 9.463549 0.800547 4.177002 +v 9.488016 0.796494 4.148498 +v 9.489621 0.798408 4.146627 +v 9.490272 0.800551 4.145869 +v 9.335353 0.796085 4.092911 +v 9.332774 0.798283 4.095890 +v 9.324461 0.798311 4.086903 +v 9.327037 0.796170 4.084097 +v 9.331824 0.800536 4.096987 +v 9.323502 0.800539 4.087930 +v 9.321448 0.798372 4.079300 +v 9.323965 0.796362 4.076981 +v 9.320484 0.800547 4.080148 +v 9.342382 0.796079 4.099065 +v 9.339804 0.798281 4.102056 +v 9.338854 0.800535 4.103158 +v 9.322327 0.800551 4.071623 +v 9.323214 0.798408 4.071068 +v 9.325402 0.796494 4.069698 +v 9.486996 0.796085 4.132950 +v 9.489561 0.798283 4.129961 +v 9.494467 0.798311 4.136023 +v 9.491987 0.796170 4.138912 +v 9.490506 0.800536 4.128860 +v 9.495382 0.800539 4.134957 +v 9.494132 0.798372 4.140752 +v 9.491918 0.796362 4.143332 +v 9.494961 0.800547 4.139787 +v 9.330647 0.796374 4.060580 +v 9.329046 0.798376 4.060826 +v 9.337566 0.798343 4.049749 +v 9.338431 0.796268 4.050492 +v 9.328388 0.800547 4.060987 +v 9.337247 0.800543 4.049475 +v 9.347223 0.798376 4.039649 +v 9.347223 0.796374 4.041268 +v 9.347282 0.800547 4.038974 +v 9.445073 0.807338 4.097997 +v 9.441308 0.807542 4.102384 +v 9.391134 0.807732 4.078913 +v 9.364230 0.805545 4.107780 +v 9.364827 0.807542 4.109561 +v 9.372175 0.807542 4.115868 +v 9.389171 0.805545 4.058900 +v 9.388905 0.807542 4.057416 +v 9.383556 0.807541 4.052895 +v 9.361062 0.807338 4.113948 +v 9.374186 0.805692 4.062015 +v 9.381300 0.805694 4.068069 +v 9.381393 0.807707 4.066167 +v 9.376058 0.807705 4.061627 +v 9.419184 0.807542 4.083393 +v 9.410790 0.807542 4.076189 +v 9.425748 0.807338 4.081409 +v 9.434140 0.807338 4.088613 +v 9.354433 0.805545 4.099370 +v 9.352926 0.807542 4.099332 +v 9.349160 0.807338 4.103719 +v 9.398481 0.807732 4.085220 +v 9.371801 0.805744 4.079135 +v 9.364710 0.805742 4.073048 +v 9.364410 0.807767 4.075190 +v 9.369730 0.807769 4.079755 +v 9.402587 0.805744 4.105560 +v 9.395676 0.807732 4.116443 +v 9.402799 0.807769 4.108144 +v 9.369891 0.807706 4.098705 +v 9.363989 0.807594 4.105582 +v 9.424500 0.807768 4.121966 +v 9.355240 0.805692 4.084086 +v 9.362304 0.805694 4.090201 +v 9.362606 0.807731 4.088055 +v 9.357308 0.807730 4.083468 +v 9.366439 0.807595 4.107684 +v 9.372341 0.807707 4.100808 +v 9.431148 0.805545 4.094931 +v 9.420371 0.807595 4.087672 +v 9.428764 0.807595 4.094877 +v 9.430375 0.807542 4.092999 +v 9.436902 0.807338 4.090983 +v 9.433137 0.807542 4.095370 +v 9.355539 0.807729 4.081945 +v 9.362640 0.807766 4.073665 +v 9.357323 0.807764 4.069100 +v 9.350242 0.807727 4.077358 +v 9.374277 0.807704 4.060116 +v 9.368941 0.807702 4.055576 +v 9.342130 0.807336 4.097569 +v 9.345888 0.807540 4.093194 +v 9.340609 0.807539 4.088593 +v 9.336857 0.807336 4.092953 +v 9.401551 0.807337 4.148702 +v 9.405316 0.807541 4.144315 +v 9.397144 0.807541 4.137301 +v 9.393379 0.807337 4.141688 +v 9.374722 0.807544 4.117928 +v 9.370831 0.807334 4.122461 +v 9.362378 0.807541 4.107459 +v 9.355030 0.807541 4.101152 +v 9.415001 0.807731 4.133032 +v 9.400002 0.807768 4.105743 +v 9.391607 0.807768 4.098538 +v 9.431525 0.807594 4.097247 +v 9.411671 0.807706 4.092147 +v 9.389411 0.807594 4.061098 +v 9.383509 0.807706 4.067974 +v 9.371839 0.807768 4.081570 +v 9.364716 0.807731 4.089869 +v 9.396410 0.805545 4.135401 +v 9.412086 0.805694 4.094494 +v 9.347394 0.805544 4.093234 +v 9.347493 0.807593 4.091325 +v 9.353377 0.807704 4.084465 +v 9.365006 0.807766 4.070909 +v 9.372113 0.807729 4.062634 +v 9.366777 0.807728 4.058094 +v 9.359688 0.807765 4.066344 +v 9.402375 0.807768 4.102975 +v 9.409498 0.807731 4.094676 +v 9.401106 0.807731 4.087472 +v 9.393982 0.807768 4.095771 +v 9.381337 0.807731 4.070504 +v 9.374214 0.807768 4.078803 +v 9.362544 0.807706 4.092399 +v 9.356642 0.807594 4.099275 +v 9.384803 0.807594 4.123447 +v 9.404658 0.807706 4.128548 +v 9.398756 0.807594 4.135424 +v 9.414556 0.807338 4.071802 +v 9.422949 0.807338 4.079007 +v 9.390282 0.807555 4.059092 +v 9.398609 0.807555 4.066240 +v 9.380163 0.807336 4.042500 +v 9.376423 0.807539 4.046869 +v 9.381771 0.807540 4.051390 +v 9.385524 0.807337 4.047012 +v 9.404585 0.807338 4.063243 +v 9.400819 0.807542 4.067630 +v 9.408167 0.807542 4.073936 +v 9.411932 0.807338 4.069550 +v 9.421982 0.807542 4.085795 +v 9.387309 0.807338 4.048517 +v 9.392670 0.807338 4.053030 +v 9.395995 0.807595 4.133054 +v 9.387602 0.807595 4.125849 +v 9.412297 0.807732 4.097079 +v 9.405173 0.807769 4.105378 +v 9.373786 0.807595 4.113991 +v 9.379688 0.807707 4.107114 +v 9.371981 0.807771 4.077850 +v 9.380054 0.807729 4.068444 +v 9.374007 0.807727 4.063297 +v 9.365953 0.807770 4.072676 +v 9.354535 0.807595 4.097457 +v 9.360437 0.807707 4.090581 +v 9.355141 0.807705 4.085995 +v 9.349256 0.807593 4.092856 +v 9.422862 0.807707 4.101753 +v 9.414469 0.807707 4.094549 +v 9.404069 0.807732 4.123648 +v 9.411192 0.807769 4.115348 +v 9.390618 0.807338 4.139318 +v 9.394383 0.807542 4.134931 +v 9.385990 0.807542 4.127727 +v 9.382225 0.807338 4.132113 +v 9.381860 0.807732 4.104585 +v 9.388984 0.807769 4.096286 +v 9.381636 0.807769 4.089979 +v 9.374513 0.807732 4.098278 +v 9.400653 0.807707 4.082690 +v 9.406555 0.807595 4.075814 +v 9.399208 0.807595 4.069507 +v 9.393306 0.807707 4.076384 +v 9.368409 0.807338 4.120255 +v 9.347647 0.807541 4.094731 +v 9.343888 0.807338 4.099104 +v 9.387296 0.807595 4.059291 +v 9.381947 0.807593 4.054770 +vn -0.3492 0.9239 -0.1564 +vn -0.3492 0.9239 -0.1565 +vn -0.3491 0.9239 -0.1564 +vn -0.2076 0.9239 -0.3215 +vn -0.2075 0.9239 -0.3214 +vn -0.2076 0.9239 -0.3214 +vn -0.7014 0.4806 -0.5265 +vn -0.7014 0.4806 -0.5264 +vn -0.6266 0.4806 -0.6135 +vn -0.6267 0.4806 -0.6135 +vn -0.7602 0.0055 -0.6496 +vn -0.7603 0.0056 -0.6496 +vn -0.7602 0.0055 -0.6497 +vn -0.7602 0.0056 -0.6497 +vn 0.6201 0.0201 -0.7842 +vn 0.6201 0.0201 -0.7843 +vn 0.6512 0.0227 -0.7586 +vn 0.6511 0.0227 -0.7586 +vn 0.7602 0.0044 0.6496 +vn 0.7603 0.0045 0.6496 +vn 0.7602 0.0044 0.6497 +vn 0.7602 0.0045 0.6496 +vn -0.0676 0.8405 -0.5375 +vn -0.5514 0.4268 -0.7168 +vn -0.5515 0.4267 -0.7168 +vn -0.5514 0.4267 -0.7168 +vn -0.7046 0.1558 -0.6923 +vn -0.7046 0.1557 -0.6923 +vn -0.7364 0.1541 -0.6587 +vn -0.7364 0.1541 -0.6588 +vn -0.7628 0.1541 -0.6281 +vn -0.7627 0.1541 -0.6281 +vn -0.7911 0.1558 -0.5915 +vn -0.7911 0.1557 -0.5916 +vn -0.7921 0.4267 -0.4365 +vn -0.7921 0.4268 -0.4364 +vn -0.7921 0.4267 -0.4364 +vn -0.5415 0.8405 0.0146 +vn -0.7660 0.0011 -0.6429 +vn -0.7660 0.0079 -0.6428 +vn -0.7660 0.0135 -0.6427 +vn -0.7644 0.0136 -0.6446 +vn -0.7515 0.0011 -0.6597 +vn -0.7514 0.0079 -0.6598 +vn -0.7513 0.0136 -0.6598 +vn -0.7513 0.0135 -0.6598 +vn -0.7829 -0.0000 -0.6221 +vn -0.7829 0.0017 -0.6221 +vn -0.7831 0.0090 -0.6218 +vn -0.7832 0.0091 -0.6217 +vn -0.7833 0.0148 -0.6215 +vn -0.7814 0.0489 -0.6221 +vn -0.7815 0.0489 -0.6220 +vn -0.7814 0.0489 -0.6220 +vn -0.7656 0.0491 -0.6415 +vn -0.7656 0.0491 -0.6414 +vn -0.7586 0.0491 -0.6497 +vn -0.7501 0.0491 -0.6595 +vn -0.7333 0.0489 -0.6781 +vn -0.7333 0.0489 -0.6782 +vn -0.7333 0.0091 -0.6799 +vn -0.7330 0.0148 -0.6801 +vn -0.7333 0.0090 -0.6799 +vn -0.7336 0.0017 -0.6796 +vn -0.7336 -0.0000 -0.6796 +vn -0.7515 -0.0000 -0.6597 +vn -0.7660 -0.0000 -0.6428 +vn -0.7660 -0.0000 -0.6429 +vn 0.9939 0.0345 -0.1046 +vn 0.9939 0.0345 -0.1045 +vn -0.8897 0.0150 -0.4563 +vn -0.8896 0.0150 -0.4565 +vn -0.8896 0.0150 -0.4564 +vn 0.8431 0.0029 0.5377 +vn 0.8439 0.0058 0.5365 +vn 0.8439 0.0058 0.5364 +vn 0.8431 0.0029 0.5378 +vn 0.8467 0.0311 0.5312 +vn 0.8466 0.0311 0.5313 +vn 0.8467 0.0312 0.5312 +vn 0.8466 0.0312 0.5313 +vn 0.7028 0.0012 -0.7113 +vn 0.7027 0.0050 -0.7115 +vn 0.7028 0.0012 -0.7114 +vn 0.7021 0.0466 -0.7106 +vn 0.7020 0.0466 -0.7106 +vn -0.6978 0.0279 0.7157 +vn -0.6978 0.0278 0.7157 +vn -0.6978 0.0279 0.7158 +vn -0.6978 0.0278 0.7158 +vn 0.5498 0.6260 -0.5531 +vn 0.5497 0.6260 -0.5531 +vn -0.7507 0.0101 -0.6606 +vn -0.7533 0.0101 -0.6577 +vn -0.7533 0.0101 -0.6576 +vn 0.8374 0.1093 0.5355 +vn 0.8375 0.1094 0.5354 +vn 0.8375 0.1093 0.5354 +vn 0.7671 0.0056 0.6415 +vn 0.7657 0.0142 0.6431 +vn 0.7630 0.0027 0.6464 +vn 0.7660 0.0011 0.6429 +vn 0.7624 0.0004 0.6471 +vn 0.7657 -0.0000 0.6432 +vn 0.7620 -0.0003 0.6475 +vn 0.7653 -0.0000 0.6437 +vn 0.7617 -0.0000 0.6479 +vn 0.8423 -0.0000 0.5390 +vn 0.9953 0.0010 -0.0968 +vn 0.9953 0.0039 -0.0968 +vn 0.9953 0.0040 -0.0966 +vn -0.5108 -0.3053 -0.8036 +vn -0.5109 -0.3052 -0.8037 +vn -0.8718 -0.3052 -0.3832 +vn -0.8718 -0.3053 -0.3831 +vn -0.7116 -0.0731 -0.6988 +vn -0.7115 -0.0731 -0.6989 +vn -0.7115 -0.0731 -0.6988 +vn -0.7987 -0.0731 -0.5973 +vn -0.7986 -0.0731 -0.5974 +vn 0.5484 -0.2924 -0.7834 +vn 0.5484 -0.2924 -0.7835 +vn 0.2772 -0.7304 -0.6242 +vn 0.2771 -0.7305 -0.6242 +vn 0.2772 -0.7305 -0.6241 +vn -0.5750 -0.7305 0.3685 +vn -0.5750 -0.7304 0.3686 +vn -0.5749 -0.7305 0.3686 +vn -0.6913 -0.2924 0.6608 +vn -0.9784 -0.2046 0.0295 +vn -0.8734 -0.0619 -0.4830 +vn -0.8735 -0.0619 -0.4829 +vn -0.8735 -0.0619 -0.4830 +vn -0.8008 -0.0209 -0.5986 +vn -0.8009 -0.0209 -0.5985 +vn -0.8008 -0.0209 -0.5985 +vn -0.7720 -0.0208 -0.6353 +vn -0.7720 -0.0207 -0.6353 +vn -0.7450 -0.0207 -0.6668 +vn -0.7534 -0.0211 -0.6572 +vn -0.7449 -0.0207 -0.6668 +vn -0.7129 -0.0209 -0.7009 +vn -0.7130 -0.0209 -0.7008 +vn -0.7130 -0.0209 -0.7009 +vn -0.6098 -0.0619 -0.7901 +vn -0.6098 -0.0619 -0.7902 +vn -0.6097 -0.0619 -0.7902 +vn -0.1192 -0.2046 -0.9716 +vn -0.1191 -0.2046 -0.9716 +vn -0.9467 0.0390 0.3198 +vn -0.9467 0.0390 0.3199 +vn -0.9467 0.0391 0.3198 +vn -0.9282 0.1874 0.3214 +vn -0.9282 0.1874 0.3215 +vn -0.9382 0.0165 -0.3458 +vn -0.9381 0.0166 -0.3459 +vn -0.9365 0.0760 -0.3424 +vn -0.9365 0.0760 -0.3425 +vn -0.6921 0.0012 0.7218 +vn -0.6920 0.0050 0.7219 +vn -0.6909 0.0466 0.7214 +vn -0.6909 0.0467 0.7214 +vn -0.6910 0.0466 0.7214 +vn -0.6746 0.2175 0.7055 +vn -0.6746 0.2175 0.7054 +vn -0.6745 0.2175 0.7055 +vn -0.6513 0.0125 0.7587 +vn -0.6513 0.0125 0.7588 +vn -0.7978 0.5579 0.2286 +vn -0.7978 0.5579 0.2287 +vn -0.8978 0.2518 -0.3612 +vn -0.8979 0.2518 -0.3611 +vn -0.8979 0.2517 -0.3612 +vn -0.8235 0.0852 -0.5609 +vn -0.8237 0.0264 -0.5664 +vn -0.8237 0.0028 -0.5670 +vn -0.8235 0.0057 -0.5673 +vn -0.8238 0.0028 -0.5669 +vn -0.8240 -0.0000 -0.5665 +vn -0.8240 -0.0000 -0.5666 +vn -0.9370 -0.0000 -0.3492 +vn -0.9370 0.0014 -0.3492 +vn -0.9498 0.0011 0.3130 +vn -0.9497 0.0044 0.3130 +vn -0.9497 0.0011 0.3130 +vn 0.7588 -0.0000 0.6513 +vn 0.7546 0.0022 0.6562 +vn 0.7552 0.0004 0.6555 +vn 0.7555 -0.0003 0.6551 +vn 0.7559 -0.0000 0.6547 +vn 0.6593 0.0029 0.7519 +vn 0.6582 0.0058 0.7529 +vn 0.6582 0.0058 0.7528 +vn 0.6534 0.0312 0.7563 +vn 0.6534 0.0312 0.7564 +vn 0.6535 0.0311 0.7563 +vn 0.6534 0.0311 0.7564 +vn 0.0473 0.0345 0.9983 +vn -0.5860 0.0150 -0.8102 +vn -0.5859 0.0150 -0.8102 +vn 0.7518 -0.0000 0.6593 +vn 0.7522 -0.0000 0.6589 +vn 0.7515 0.0011 0.6597 +vn 0.7504 0.0056 0.6610 +vn 0.7517 0.0142 0.6594 +vn 0.7517 0.0142 0.6593 +vn 0.6561 0.1094 0.7467 +vn 0.6562 0.1093 0.7466 +vn -0.7667 0.0101 -0.6419 +vn -0.7642 0.0101 -0.6449 +vn -0.4633 0.6260 0.6272 +vn -0.4634 0.6260 0.6273 +vn -0.4634 0.6260 0.6272 +vn 0.6017 0.0278 -0.7982 +vn 0.6017 0.0279 -0.7982 +vn -0.5960 0.0466 0.8016 +vn -0.5960 0.0466 0.8017 +vn -0.5967 0.0012 0.8025 +vn -0.5967 0.0050 0.8024 +vn -0.5968 0.0050 0.8024 +vn -0.5966 0.0012 0.8025 +vn 0.0552 0.0010 0.9985 +vn 0.0553 0.0040 0.9985 +vn 0.0552 0.0039 0.9985 +vn 0.6604 -0.0000 0.7509 +vn 0.6605 -0.0000 0.7509 +vn 0.7754 -0.0299 0.6308 +vn 0.7753 -0.0299 0.6309 +vn 0.7753 -0.0299 0.6308 +vn 0.7411 -0.0299 0.6707 +vn 0.7410 -0.0299 0.6708 +vn 0.7411 -0.0299 0.6708 +vn 0.8501 -0.2052 0.4850 +vn 0.6082 -0.2052 0.7668 +vn 0.7631 -0.0010 0.6462 +vn 0.7602 -0.0011 0.6496 +vn 0.7617 -0.0022 0.6479 +vn 0.7653 -0.0017 0.6437 +vn 0.7589 -0.0011 0.6512 +vn 0.7588 -0.0022 0.6513 +vn 0.7574 -0.0011 0.6530 +vn 0.7559 -0.0022 0.6547 +vn 0.7544 -0.0010 0.6564 +vn 0.7522 -0.0017 0.6589 +vn 0.7007 -0.0262 0.7130 +vn 0.3230 -0.1541 0.9338 +vn 0.3229 -0.1541 0.9338 +vn -0.5282 -0.2916 0.7975 +vn -0.5282 -0.2917 0.7974 +vn -0.5281 -0.2917 0.7975 +vn -0.2329 -0.7217 0.6518 +vn -0.2330 -0.7217 0.6518 +vn 0.6090 -0.7217 -0.3291 +vn 0.6090 -0.7217 -0.3290 +vn 0.6089 -0.7217 -0.3291 +vn 0.7082 -0.2917 -0.6430 +vn 0.7082 -0.2916 -0.6429 +vn 0.7082 -0.2917 -0.6429 +vn 0.7082 -0.2916 -0.6430 +vn 0.9719 -0.1541 0.1777 +vn 0.9719 -0.1541 0.1778 +vn 0.8109 -0.0262 0.5845 +vn 0.8110 -0.0262 0.5845 +vn 0.8109 -0.0262 0.5846 +vn 0.6506 0.0467 -0.7579 +vn 0.6506 0.0467 -0.7580 +vn 0.6357 0.2178 -0.7406 +vn 0.6356 0.2178 -0.7406 +vn 0.6513 0.0009 -0.7588 +vn 0.6513 0.0050 -0.7588 +vn 0.7595 0.0055 0.6504 +vn 0.7595 0.0056 0.6504 +vn 0.7595 0.0055 0.6505 +vn 0.7595 0.0056 0.6505 +vn -0.6511 0.0253 0.7586 +vn -0.6511 0.0253 0.7585 +vn 0.5074 0.6270 -0.5911 +vn -0.6511 0.0278 0.7585 +vn -0.6510 0.0278 0.7585 +vn 0.7230 0.2161 0.6562 +vn 0.7582 0.2161 0.6152 +vn 0.7582 0.2161 0.6151 +vn -0.7606 0.0101 -0.6491 +vn -0.7587 0.0101 -0.6513 +vn -0.7588 0.0101 -0.6513 +vn -0.7569 0.0101 -0.6534 +vn -0.7570 0.0101 -0.6534 +vn 0.7557 0.0183 0.6547 +vn 0.7587 0.0171 0.6512 +vn 0.7617 0.0183 0.6477 +vn 0.7616 0.0183 0.6477 +vn 0.7957 0.1931 0.5740 +vn 0.7958 0.1931 0.5740 +vn 0.2961 0.9185 -0.2620 +vn 0.2962 0.9185 -0.2620 +vn 0.1093 0.9922 -0.0600 +vn 0.1092 0.9922 -0.0600 +vn -0.0428 0.9922 0.1171 +vn -0.2141 0.9185 0.3325 +vn -0.2141 0.9185 0.3324 +vn 0.6880 0.1931 0.6996 +vn 0.6880 0.1931 0.6995 +vn -0.4840 0.0165 -0.8749 +vn -0.4840 0.0166 -0.8749 +vn -0.4804 0.0760 -0.8737 +vn -0.4804 0.0760 -0.8738 +vn 0.1726 0.0391 -0.9842 +vn 0.1727 0.0390 -0.9842 +vn 0.1726 0.0390 -0.9842 +vn 0.1770 0.1874 -0.9662 +vn 0.1771 0.1874 -0.9662 +vn -0.6849 -0.0000 -0.7286 +vn -0.6852 0.0028 -0.7284 +vn -0.6853 0.0028 -0.7283 +vn -0.6855 0.0057 -0.7280 +vn -0.6847 0.0264 -0.7283 +vn -0.6792 0.0852 -0.7290 +vn -0.4930 0.2518 -0.8328 +vn -0.4931 0.2517 -0.8328 +vn -0.4931 0.2518 -0.8327 +vn 0.1051 0.5579 -0.8232 +vn 0.1050 0.5579 -0.8232 +vn 0.5951 0.2175 -0.7737 +vn 0.6084 0.0466 -0.7923 +vn 0.6084 0.0467 -0.7923 +vn 0.6086 0.0012 -0.7935 +vn 0.6087 0.0050 -0.7934 +vn 0.6085 0.0012 -0.7935 +vn 0.1654 0.0011 -0.9862 +vn 0.1655 0.0044 -0.9862 +vn -0.4872 -0.0000 -0.8733 +vn -0.4872 0.0014 -0.8733 +vn -0.6506 0.0467 0.7579 +vn -0.6506 0.0467 0.7580 +vn -0.6357 0.2178 0.7406 +vn -0.6356 0.2178 0.7406 +vn -0.6513 0.0009 0.7588 +vn -0.6513 0.0050 0.7588 +vn 0.9600 0.0270 0.2787 +vn 0.9600 0.0269 0.2787 +vn 0.9600 0.0269 0.2788 +vn 0.7468 0.0147 0.6649 +vn 0.7505 0.0147 0.6607 +vn 0.7506 0.0147 0.6606 +vn 0.7507 0.0149 0.6605 +vn 0.7602 0.0045 0.6497 +vn -0.7595 0.0044 -0.6505 +vn -0.7595 0.0045 -0.6505 +vn 0.4345 -0.7450 -0.5062 +vn -0.4345 -0.7450 0.5062 +vn 0.6226 -0.2937 -0.7254 +vn 0.6226 -0.2937 -0.7253 +vn -0.6226 -0.2937 0.7253 +vn -0.6226 -0.2937 0.7254 +vn 0.7552 0.0045 0.6555 +vn 0.7552 0.0044 0.6555 +vn 0.7551 0.0045 0.6556 +vn 0.7551 0.0044 0.6556 +vn 0.7573 0.0045 0.6530 +vn 0.7573 0.0044 0.6530 +vn 0.7574 0.0045 0.6530 +vn 0.7574 0.0044 0.6530 +vn 0.7588 0.0045 0.6514 +vn 0.7588 0.0044 0.6513 +vn 0.7588 0.0045 0.6513 +vn 0.6513 0.0075 -0.7588 +vn 0.7558 0.0147 0.6547 +vn 0.7587 0.0147 0.6512 +vn 0.7587 0.0147 0.6513 +vn 0.7616 0.0147 0.6478 +vn 0.7617 0.0147 0.6478 +vn 0.7668 0.0147 0.6417 +vn 0.7667 0.0147 0.6418 +vn -0.6512 0.0227 0.7586 +vn -0.6511 0.0227 0.7586 +vn 0.6512 0.0202 -0.7587 +vn 0.6512 0.0202 -0.7586 +vn -0.7573 0.0056 -0.6530 +vn -0.7573 0.0055 -0.6530 +vn -0.7574 0.0056 -0.6530 +vn -0.7574 0.0055 -0.6530 +vn -0.7581 0.0045 -0.6521 +vn -0.7581 0.0044 -0.6521 +vn 0.6511 0.0253 -0.7586 +vn 0.6511 0.0253 -0.7585 +vn -0.7595 0.0034 -0.6505 +vn -0.7595 0.0033 -0.6505 +vn -0.6505 -0.0521 0.7577 +vn -0.6504 -0.0521 0.7578 +vn -0.6512 -0.0176 0.7587 +vn -0.6465 -0.1225 0.7531 +vn -0.6464 -0.1225 0.7531 +vn -0.6513 -0.0025 0.7588 +vn -0.6461 -0.1225 0.7534 +vn -0.4882 -0.0179 -0.8726 +vn -0.4871 -0.0123 -0.8733 +vn -0.4882 -0.0179 -0.8725 +vn -0.4866 -0.0041 -0.8736 +vn 0.1671 -0.0438 -0.9850 +vn 0.1671 -0.0439 -0.9850 +vn 0.1699 -0.0156 -0.9853 +vn 0.1700 -0.0156 -0.9853 +vn -0.6836 -0.0127 -0.7297 +vn -0.6846 -0.0092 -0.7289 +vn -0.6837 -0.0127 -0.7297 +vn -0.6852 -0.0040 -0.7284 +vn -0.6849 -0.0011 -0.7286 +vn -0.6849 -0.0012 -0.7286 +vn 0.1655 -0.0022 -0.9862 +vn 0.1654 -0.0022 -0.9862 +vn 0.6087 -0.0025 -0.7934 +vn 0.6084 -0.0176 -0.7935 +vn 0.6083 -0.0176 -0.7935 +vn 0.6079 -0.0521 -0.7923 +vn 0.6080 -0.0521 -0.7923 +vn 0.5964 -0.1223 -0.7933 +vn 0.5963 -0.1223 -0.7934 +vn 0.1053 -0.0989 -0.9895 +vn 0.1054 -0.0989 -0.9895 +vn -0.5167 -0.0385 -0.8553 +vn -0.5166 -0.0386 -0.8553 +vn -0.5166 -0.0385 -0.8554 +vn 0.6505 -0.0521 -0.7577 +vn 0.6504 -0.0521 -0.7578 +vn 0.6512 -0.0176 -0.7587 +vn 0.6465 -0.1225 -0.7531 +vn 0.6464 -0.1225 -0.7531 +vn 0.6513 -0.0025 -0.7588 +vn 0.6462 -0.1225 -0.7533 +vn 0.6603 -0.0117 0.7509 +vn 0.6577 -0.0047 0.7533 +vn 0.6577 -0.0046 0.7533 +vn 0.6604 -0.0117 0.7508 +vn 0.6594 -0.0012 0.7518 +vn 0.0500 -0.0368 0.9981 +vn 0.0501 -0.0367 0.9981 +vn 0.0500 -0.0367 0.9981 +vn 0.0495 -0.0138 0.9987 +vn 0.0524 -0.0079 0.9986 +vn 0.0494 -0.0138 0.9987 +vn 0.7548 -0.0001 0.6559 +vn 0.7508 -0.0006 0.6605 +vn 0.7553 0.0003 0.6554 +vn 0.7515 -0.0000 0.6597 +vn 0.7557 0.0002 0.6550 +vn -0.5968 -0.0025 0.8024 +vn -0.5963 -0.0176 0.8026 +vn -0.5962 -0.0176 0.8027 +vn -0.5956 -0.0520 0.8016 +vn -0.5955 -0.0520 0.8017 +vn -0.5841 -0.1221 0.8025 +vn -0.5841 -0.1222 0.8024 +vn -0.5841 -0.1221 0.8024 +vn 0.1136 -0.0830 0.9901 +vn 0.1137 -0.0830 0.9900 +vn 0.6637 -0.0165 0.7478 +vn 0.6637 -0.0164 0.7479 +vn 0.7628 -0.0001 0.6467 +vn 0.7623 0.0003 0.6472 +vn 0.7619 0.0002 0.6477 +vn -0.9482 -0.0439 0.3145 +vn -0.9482 -0.0438 0.3145 +vn -0.9483 -0.0438 0.3145 +vn -0.9483 -0.0438 0.3144 +vn -0.9482 -0.0156 0.3173 +vn -0.9482 -0.0156 0.3174 +vn -0.9365 -0.0179 -0.3503 +vn -0.9370 -0.0123 -0.3491 +vn -0.9373 -0.0041 -0.3485 +vn -0.9373 -0.0041 -0.3486 +vn -0.6938 -0.1223 0.7097 +vn -0.6910 -0.0521 0.7210 +vn -0.6909 -0.0520 0.7211 +vn -0.6921 -0.0176 0.7216 +vn -0.6920 -0.0025 0.7219 +vn -0.9497 -0.0022 0.3130 +vn -0.8240 -0.0012 -0.5666 +vn -0.8240 -0.0011 -0.5666 +vn -0.8238 -0.0040 -0.5669 +vn -0.8242 -0.0092 -0.5662 +vn -0.8249 -0.0127 -0.5652 +vn -0.9238 -0.0385 -0.3810 +vn -0.9238 -0.0386 -0.3810 +vn -0.9237 -0.0385 -0.3811 +vn -0.9621 -0.0989 0.2542 +vn -0.9621 -0.0989 0.2541 +vn 0.9941 -0.0367 -0.1019 +vn 0.9941 -0.0367 -0.1018 +vn 0.9941 -0.0368 -0.1018 +vn 0.9946 -0.0139 -0.1025 +vn 0.9950 -0.0079 -0.0996 +vn 0.9950 -0.0079 -0.0995 +vn 0.9946 -0.0138 -0.1024 +vn 0.8422 -0.0117 0.5390 +vn 0.8442 -0.0046 0.5359 +vn 0.8442 -0.0047 0.5359 +vn 0.8423 -0.0117 0.5389 +vn 0.8431 -0.0012 0.5378 +vn 0.7046 -0.1222 -0.6990 +vn 0.7046 -0.1221 -0.6990 +vn 0.7047 -0.1221 -0.6990 +vn 0.7021 -0.0520 -0.7102 +vn 0.7022 -0.0520 -0.7101 +vn 0.7021 -0.0520 -0.7101 +vn 0.7030 -0.0176 -0.7109 +vn 0.7030 -0.0176 -0.7110 +vn 0.7027 -0.0025 -0.7115 +vn 0.7660 -0.0000 0.6429 +vn 0.7667 -0.0006 0.6420 +vn 0.8398 -0.0164 0.5426 +vn 0.8397 -0.0165 0.5427 +vn 0.9958 -0.0830 -0.0378 +vn 0.9958 -0.0830 -0.0377 +vn -0.7663 -0.0056 -0.6424 +vn -0.7660 -0.0022 -0.6429 +vn -0.7660 -0.0022 -0.6428 +vn -0.7664 -0.0056 -0.6424 +vn -0.7660 -0.0006 -0.6429 +vn -0.7511 -0.0056 -0.6602 +vn -0.7515 -0.0022 -0.6597 +vn -0.7511 -0.0056 -0.6601 +vn -0.7515 -0.0006 -0.6597 +vn -0.7830 -0.0078 -0.6219 +vn -0.7834 -0.0056 -0.6215 +vn -0.7830 -0.0079 -0.6220 +vn -0.7833 -0.0022 -0.6217 +vn -0.7832 -0.0022 -0.6217 +vn -0.7830 -0.0006 -0.6221 +vn -0.7829 -0.0005 -0.6221 +vn -0.7336 -0.0005 -0.6796 +vn -0.7336 -0.0006 -0.6796 +vn -0.7332 -0.0022 -0.6800 +vn -0.7331 -0.0056 -0.6801 +vn -0.7334 -0.0079 -0.6797 +vn -0.7334 -0.0078 -0.6797 +vn -0.7436 -0.0075 -0.6686 +vn -0.7507 -0.0078 -0.6606 +vn -0.7667 -0.0078 -0.6419 +vn -0.7667 -0.0078 -0.6420 +vn -0.2555 0.9198 0.2977 +vn 0.2555 0.9198 -0.2977 +vn 0.0761 0.9932 -0.0886 +vn -0.0761 0.9932 0.0886 +vn -0.5074 0.6270 0.5911 +vn 0.7632 0.0044 0.6462 +vn 0.7631 0.0044 0.6463 +vn 0.7631 0.0044 0.6462 +vn 0.6511 0.0278 -0.7585 +vn 0.6510 0.0278 -0.7585 +vn 0.4210 0.0269 0.9066 +vn 0.4210 0.0270 0.9067 +vn 0.4210 0.0269 0.9067 +vn 0.7704 0.0147 0.6374 +vn 0.7703 0.0147 0.6375 +vn -0.7588 0.0045 -0.6513 +vn -0.7588 0.0044 -0.6513 +vn 0.6513 0.0151 -0.7587 +vn 0.6512 0.0151 -0.7587 +vn -0.6223 0.0125 0.7827 +vn -0.7624 0.0045 -0.6471 +vn -0.7624 0.0045 -0.6470 +vn -0.6357 0.0227 0.7716 +vn -0.6357 0.0226 0.7716 +vn -0.6358 0.0227 0.7715 +vn -0.6358 0.0226 0.7716 +vn -0.6513 0.0151 0.7587 +vn -0.6512 0.0151 0.7587 +vn 0.6512 0.0126 -0.7588 +vn 0.6513 0.0126 -0.7587 +vn 0.7558 0.0033 0.6548 +vn 0.7559 0.0033 0.6547 +vn -0.7595 0.0055 -0.6504 +vn -0.7595 0.0056 -0.6504 +vn -0.7595 0.0055 -0.6505 +vn -0.7595 0.0056 -0.6505 +vn 0.6080 -0.0520 -0.7922 +vn 0.6083 0.0466 -0.7923 +vn 0.5951 0.2175 -0.7736 +vn -0.6682 0.0253 0.7435 +vn -0.6682 0.0253 0.7436 +vn -0.6683 0.0253 0.7435 +vn 0.5483 -0.2924 -0.7835 +vn -0.7588 0.0033 -0.6513 +vn -0.7588 0.0034 -0.6513 +vn -0.7602 0.0045 -0.6496 +vn -0.7602 0.0045 -0.6497 +vn 0.6512 0.0201 -0.7587 +vn 0.6512 0.0201 -0.7586 +vn 0.7631 0.0056 0.6462 +vn -0.7545 0.0044 -0.6563 +vn -0.7544 0.0044 -0.6564 +vn 0.6513 0.0126 -0.7588 +vn -0.0982 0.9927 0.0696 +vn 0.2246 0.9191 -0.3238 +vn 0.2245 0.9191 -0.3239 +vn -0.5428 0.6263 0.5595 +vn -0.6682 0.0252 0.7436 +vn -0.6681 0.0252 0.7436 +vn -0.7631 0.0044 -0.6462 +vn -0.7631 0.0044 -0.6463 +vn -0.7573 0.0045 -0.6530 +vn -0.7574 0.0045 -0.6530 +vn 0.6794 0.0125 -0.7337 +vn 0.6793 0.0125 -0.7337 +vn -0.7624 0.0044 -0.6471 +vn -0.6512 0.0125 0.7588 +vn 0.7595 0.0033 0.6505 +vn 0.7581 0.0045 0.6521 +vn 0.7581 0.0044 0.6521 +vn 0.7602 0.0056 0.6496 +vn 0.7603 0.0056 0.6496 +vn -0.6357 0.0202 0.7716 +vn -0.6358 0.0201 0.7716 +vn -0.6358 0.0202 0.7716 +vn -0.6357 0.0201 0.7716 +vn -0.7581 0.0033 -0.6521 +vn -0.7581 0.0033 -0.6522 +vn 0.7588 0.0034 0.6513 +vn 0.7588 0.0033 0.6513 +vn 0.7581 0.0056 0.6521 +vn 0.7581 0.0056 0.6522 +vn -0.6885 0.0125 0.7252 +vn -0.6884 0.0125 0.7252 +vn -0.7610 0.0033 -0.6488 +vn -0.7609 0.0033 -0.6488 +vn 0.6513 0.0125 -0.7587 +vn 0.6512 0.0125 -0.7588 +vn 0.7551 0.0045 0.6555 +vn 0.7559 0.0033 0.6546 +vn 0.7559 0.0034 0.6547 +vn 0.7544 0.0044 0.6563 +vn 0.7544 0.0044 0.6564 +vn -0.7573 0.0044 -0.6530 +vn -0.7574 0.0044 -0.6530 +vn -0.2861 0.9191 0.2710 +vn -0.2860 0.9191 0.2711 +vn 0.0539 0.9927 -0.1076 +vn 0.5077 0.6270 -0.5909 +vn 0.4708 0.6263 -0.6214 +vn 0.4708 0.6263 -0.6213 +vn 0.6663 0.0202 -0.7454 +vn 0.6663 0.0201 -0.7454 +vn -0.7602 0.0044 -0.6496 +vn -0.7603 0.0045 -0.6496 +vn -0.7602 0.0044 -0.6497 +vn 0.7595 0.0044 0.6505 +vn 0.7595 0.0045 0.6505 +vn 0.7573 0.0056 0.6530 +vn 0.7574 0.0056 0.6530 +vn 0.7574 0.0055 0.6530 +vn -0.6812 0.0201 0.7318 +vn -0.7588 0.0045 -0.6514 +vn -0.7566 0.0022 -0.6539 +vn -0.7567 0.0022 -0.6538 +vn -0.7566 0.0022 -0.6538 +vn 0.6337 0.0252 -0.7731 +vn 0.6337 0.0252 -0.7732 +vn -0.7581 0.0056 -0.6521 +vn -0.7581 0.0056 -0.6522 +vn -0.6513 0.0075 0.7588 +vn -0.7566 0.0033 -0.6538 +vn -0.7566 0.0033 -0.6539 +vn -0.7567 0.0033 -0.6538 +vn -0.6512 0.0202 0.7587 +vn -0.6512 0.0202 0.7586 +vn 0.7581 0.0034 0.6521 +vn 0.7581 0.0034 0.6522 +vn 0.6124 0.0125 -0.7904 +vn 0.6125 0.0125 -0.7903 +vn 0.6125 0.0125 -0.7904 +vn 0.7617 0.0033 0.6479 +vn 0.7617 0.0034 0.6479 +vn 0.7617 0.0033 0.6480 +vn 0.7609 0.0022 0.6488 +vn 0.7610 0.0022 0.6487 +vn -0.7544 0.0056 -0.6563 +vn -0.7544 0.0056 -0.6564 +vn -0.6512 0.0201 0.7587 +vn -0.6512 0.0201 0.7586 +vn -0.7602 0.0056 -0.6496 +vn 0.7588 0.0022 0.6513 +vn -0.7588 0.0022 -0.6513 +vn -0.7580 0.0056 -0.6522 +vn -0.7580 0.0055 -0.6522 +vn -0.7581 0.0055 -0.6522 +vn 0.7581 0.0033 0.6521 +vn 0.7581 0.0033 0.6522 +vn 0.6663 0.0226 -0.7453 +vn 0.6663 0.0227 -0.7453 +vn 0.6663 0.0226 -0.7454 +vn 0.6663 0.0227 -0.7454 +vn 0.6339 0.0151 -0.7732 +vn -0.7552 0.0045 -0.6554 +vn -0.7551 0.0045 -0.6555 +vn -0.7551 0.0045 -0.6556 +vn 0.7624 0.0045 0.6471 +vn 0.7623 0.0045 0.6472 +vn 0.7624 0.0045 0.6470 +vn -0.5428 0.6263 0.5596 +vn -0.6512 0.0126 0.7588 +vn -0.6513 0.0126 0.7587 +vn -0.7631 0.0056 -0.6462 +vn 0.7580 0.0056 0.6522 +vn 0.7580 0.0055 0.6522 +vn 0.7581 0.0055 0.6522 +vn 0.6793 0.0125 -0.7338 +vn 0.7544 0.0056 0.6563 +vn 0.7544 0.0056 0.6564 +vn 0.7552 0.0045 0.6554 +vn -0.6513 0.0126 0.7588 +vt 0.899886 0.606919 +vt 0.371268 0.124910 +vt 0.655824 0.179890 +vt 0.614461 0.083159 +vt 0.390407 0.130699 +vt 0.899887 0.614644 +vt 0.722563 0.138507 +vt 0.614461 0.115343 +vt 0.645237 0.148240 +vt 0.641031 0.050713 +vt 0.897030 0.614644 +vt 0.897042 0.607212 +vt 0.899886 0.622368 +vt 0.730355 0.077151 +vt 0.206811 0.125616 +vt 0.711952 0.192173 +vt 0.641031 0.018529 +vt 0.897042 0.622075 +vt 0.895349 0.614644 +vt 0.895398 0.607866 +vt 0.895398 0.621421 +vt 0.371285 0.098033 +vt 0.437253 0.180586 +vt 0.508152 0.179916 +vt 0.324333 0.072008 +vt 0.604912 0.162338 +vt 0.297694 0.131156 +vt 0.508152 0.192044 +vt 0.371348 0.033316 +vt 0.371285 0.124910 +vt 0.492401 0.112451 +vt 0.341618 0.091870 +vt 0.592644 0.113182 +vt 0.706525 0.082807 +vt 0.297694 0.104279 +vt 0.573878 0.165452 +vt 0.314976 0.133315 +vt 0.344768 0.119609 +vt 0.526768 0.717223 +vt 0.655462 0.086281 +vt 0.344768 0.099451 +vt 0.439068 0.154104 +vt 0.464067 0.717224 +vt 0.440944 0.113182 +vt 0.730374 0.044640 +vt 0.553154 0.082766 +vt 0.554490 0.166823 +vt 0.612985 0.163283 +vt 0.600219 0.115664 +vt 0.541162 0.113182 +vt 0.706616 0.082807 +vt 0.440944 0.130699 +vt 0.899877 0.628770 +vt 0.206811 0.152350 +vt 0.554490 0.184341 +vt 0.756788 0.115622 +vt 0.389490 0.128434 +vt 0.046477 1.001923 +vt 0.233304 0.147084 +vt 0.389490 0.115297 +vt 0.046744 0.943079 +vt 0.563278 0.032225 +vt 0.451752 0.180586 +vt 0.454535 0.180591 +vt 0.493653 0.179916 +vt 0.371356 0.033316 +vt 0.614461 0.050888 +vt 0.501548 0.131237 +vt 0.534676 0.083246 +vt 0.706525 0.110476 +vt 0.449942 0.154104 +vt 0.464012 0.796750 +vt 0.475034 0.129819 +vt 0.667524 0.110036 +vt 0.385964 0.186063 +vt 0.713375 0.165341 +vt 0.941145 0.570567 +vt 0.297758 0.072008 +vt 0.667524 0.136913 +vt 0.941127 0.582128 +vt 0.684808 0.107877 +vt 0.414195 0.185911 +vt 0.440944 0.112451 +vt 0.641018 0.131613 +vt 0.309021 0.935840 +vt 0.492401 0.109089 +vt 0.641018 0.111455 +vt 0.387720 0.159801 +vt 0.445079 0.935840 +vt 0.897048 0.628237 +vt 0.895449 0.626925 +vt 0.900408 0.584593 +vt 0.894743 0.625295 +vt 0.894532 0.620963 +vt 0.900644 0.580263 +vt 0.894426 0.614644 +vt 0.900820 0.573946 +vt 0.894532 0.608324 +vt 0.900820 0.567626 +vt 0.895449 0.602362 +vt 0.900705 0.563291 +vt 0.894743 0.603992 +vt 0.897048 0.601050 +vt 0.899877 0.600517 +vt 0.371268 0.151644 +vt 0.730360 0.110036 +vt 0.631656 0.168505 +vt 0.721178 0.108324 +vt 0.895834 0.566150 +vt 0.722006 0.097400 +vt 0.898562 0.566482 +vt 0.898466 0.573913 +vt 0.895723 0.573874 +vt 0.680879 0.116843 +vt 0.721895 0.105124 +vt 0.900068 0.567158 +vt 0.900013 0.573934 +vt 0.898355 0.581344 +vt 0.895619 0.581598 +vt 0.680775 0.124567 +vt 0.899879 0.580710 +vt 0.717754 0.090863 +vt 0.731932 0.073817 +vt 0.895939 0.559750 +vt 0.722111 0.091000 +vt 0.717647 0.097297 +vt 0.731820 0.080572 +vt 0.898651 0.560320 +vt 0.894504 0.602362 +vt 0.900109 0.561653 +vt 0.899766 0.586213 +vt 0.894504 0.626925 +vt 0.898272 0.587505 +vt 0.680701 0.130968 +vt 0.895545 0.587999 +vt 0.676415 0.124548 +vt 0.690577 0.108599 +vt 0.676343 0.130983 +vt 0.690500 0.115355 +vt 0.676518 0.116782 +vt 0.717533 0.105063 +vt 0.731700 0.088726 +vt 0.690684 0.100445 +vt 0.925679 0.591039 +vt 0.710835 0.134008 +vt 0.895459 0.532056 +vt 0.926834 0.587587 +vt 0.918434 0.671783 +vt 0.929088 0.588319 +vt 0.896366 0.532421 +vt 0.938781 0.538778 +vt 0.927937 0.591757 +vt 0.938933 0.538557 +vt 0.724090 0.081526 +vt 0.713094 0.134726 +vt 0.903247 0.517393 +vt 0.902931 0.666600 +vt -0.000475 0.483217 +vt 0.068932 0.552925 +vt 0.898228 0.535197 +vt 0.938552 0.538853 +vt 0.084324 0.665519 +vt 0.920161 0.610289 +vt 0.938603 0.538710 +vt 0.880136 0.586721 +vt 0.938748 0.538490 +vt 0.881694 0.587137 +vt 0.549134 0.093498 +vt 0.723904 0.081459 +vt 0.938395 0.538788 +vt 0.919780 0.611326 +vt 0.879289 0.585670 +vt 0.704652 0.137953 +vt 0.301205 0.094788 +vt 0.686366 0.156286 +vt 0.921302 0.589581 +vt 0.706459 0.132550 +vt 0.709029 0.139411 +vt 0.686370 0.159999 +vt 0.916972 0.676143 +vt 0.922458 0.586127 +vt -0.003132 0.332274 +vt 0.901474 0.670962 +vt 0.109522 0.333083 +vt 0.161683 0.559668 +vt 0.111608 0.484022 +vt 0.920150 0.612546 +vt 0.173769 0.672050 +vt 0.878895 0.583691 +vt 0.919770 0.613298 +vt 0.882088 0.631172 +vt 0.879022 0.582759 +vt 0.879356 0.583699 +vt 0.883440 0.634970 +vt 0.880186 0.584465 +vt 0.868824 0.604555 +vt 0.886794 0.638069 +vt 0.881737 0.584797 +vt 0.549734 0.061036 +vt 0.719997 0.145906 +vt 0.870388 0.604890 +vt 0.724050 0.081075 +vt 0.627979 0.119664 +vt 0.583772 0.094872 +vt 0.722512 0.145993 +vt 0.584359 0.062244 +vt 0.724236 0.081143 +vt 0.711288 0.140127 +vt 0.686400 0.161906 +vt 0.627920 0.121877 +vt 0.922743 0.573089 +vt 0.930921 0.573090 +vt 0.930811 0.576092 +vt 0.874389 0.557039 +vt 0.875462 0.564858 +vt 0.922943 0.576077 +vt 0.938693 0.573068 +vt 0.938287 0.576056 +vt 0.875680 0.549253 +vt 0.930512 0.577843 +vt 0.876132 0.557063 +vt 0.923343 0.577790 +vt 0.877080 0.564193 +vt 0.877278 0.549963 +vt 0.874425 0.584285 +vt 0.915493 0.570747 +vt 0.922729 0.570768 +vt 0.915526 0.573067 +vt 0.874462 0.581964 +vt 0.930929 0.570768 +vt 0.938722 0.570746 +vt 0.832823 0.613570 +vt 0.944737 0.570708 +vt 0.944692 0.573028 +vt 0.832857 0.615891 +vt 0.944061 0.576003 +vt 0.879308 0.542834 +vt 0.833332 0.618868 +vt 0.880449 0.544228 +vt 0.881906 0.545960 +vt 0.880402 0.550488 +vt 0.879585 0.557112 +vt 0.880216 0.563757 +vt 0.880089 0.570015 +vt 0.881594 0.568325 +vt 0.915994 0.576041 +vt 0.874973 0.578986 +vt 0.878910 0.571377 +vt 0.946679 0.638574 +vt 0.707417 0.167167 +vt 0.881245 0.635917 +vt 0.772851 0.169824 +vt 0.946973 0.638574 +vt 0.951751 0.634811 +vt 0.883578 0.635914 +vt 0.921561 0.606009 +vt 0.946969 0.638882 +vt 0.951444 0.634892 +vt 0.898857 0.554355 +vt 0.896948 0.595083 +vt 0.946677 0.638883 +vt 0.896115 0.553569 +vt 0.722287 0.084819 +vt 0.772848 0.170133 +vt 0.951755 0.635036 +vt 0.921595 0.607795 +vt 0.899856 0.596433 +vt 0.644144 0.130707 +vt 0.614461 0.170646 +vt 0.951451 0.635109 +vt 0.897012 0.597111 +vt 0.895239 0.597111 +vt 0.898750 0.556382 +vt 0.896028 0.555666 +vt 0.722200 0.086916 +vt 0.895367 0.598921 +vt 0.900239 0.558213 +vt 0.116944 0.055817 +vt 0.686275 0.144838 +vt 0.703706 0.165283 +vt 0.881246 0.634033 +vt 0.707418 0.165283 +vt 0.703704 0.167168 +vt 0.772384 0.169824 +vt 0.116932 0.073417 +vt 0.686273 0.147162 +vt 0.923439 0.605963 +vt 0.883580 0.634030 +vt 0.923471 0.607754 +vt 0.644144 0.113182 +vt 0.667524 0.138507 +vt 0.806076 0.082791 +vt 0.640840 0.169220 +vt 0.699307 0.081567 +vt 0.508152 0.137000 +vt 0.925347 0.607712 +vt 0.561185 0.165452 +vt 0.631656 0.169220 +vt 0.711999 0.081567 +vt 0.261882 0.159622 +vt 0.927941 0.607712 +vt 0.578467 0.137000 +vt 0.711998 0.137036 +vt 0.710418 0.108554 +vt 0.753088 0.806118 +vt 0.582788 0.163832 +vt 0.700899 0.108554 +vt 0.797000 0.806321 +vt 0.565506 0.138618 +vt 0.717842 0.086758 +vt 0.732024 0.069507 +vt 0.717926 0.084651 +vt 0.772382 0.170134 +vt 0.686249 0.150198 +vt 0.732112 0.067295 +vt 0.870451 0.601195 +vt 0.720060 0.142211 +vt 0.868878 0.600999 +vt 0.887010 0.623800 +vt 0.868945 0.596709 +vt 0.887277 0.606591 +vt 0.870527 0.596736 +vt 0.720136 0.137752 +vt 0.883544 0.622223 +vt 0.883714 0.606529 +vt 0.887607 0.589383 +vt 0.869027 0.592419 +vt 0.870605 0.592278 +vt 0.720215 0.133293 +vt 0.884088 0.590839 +vt 0.722576 0.142279 +vt 0.881840 0.621134 +vt 0.878960 0.580276 +vt 0.881882 0.606497 +vt 0.878971 0.576655 +vt 0.882347 0.591868 +vt 0.879086 0.573036 +vt 0.882943 0.581845 +vt 0.879233 0.570557 +vt 0.884426 0.578096 +vt 0.879600 0.569629 +vt 0.887885 0.575116 +vt 0.869097 0.588863 +vt 0.880456 0.568892 +vt 0.870670 0.588583 +vt 0.720280 0.129599 +vt 0.688658 0.133068 +vt 0.882018 0.568614 +vt 0.722731 0.133313 +vt 0.691155 0.133068 +vt 0.650057 0.107021 +vt 0.722796 0.129599 +vt 0.722654 0.137796 +vt 0.882055 0.566275 +vt 0.688696 0.130728 +vt 0.880485 0.566636 +vt 0.880479 0.565474 +vt 0.749291 0.492561 +vt 0.834886 0.641451 +vt 0.882063 0.565073 +vt 0.727581 0.492574 +vt 0.534222 0.057027 +vt 0.688704 0.129526 +vt 0.879601 0.567657 +vt 0.919780 0.629341 +vt 0.879562 0.566620 +vt 0.822437 0.625331 +vt 0.920161 0.630378 +vt 0.880599 0.665519 +vt 0.749556 0.507007 +vt 0.835239 0.647396 +vt 0.910204 0.639676 +vt 0.883578 0.607471 +vt 0.727771 0.507020 +vt 0.881245 0.607473 +vt 0.584370 0.121145 +vt 0.534411 0.071473 +vt 0.935030 0.630718 +vt 0.895990 0.552925 +vt 0.998958 0.483217 +vt 0.910204 0.650458 +vt 0.691194 0.130716 +vt 0.650129 0.102711 +vt 0.746147 0.168301 +vt 0.879138 0.569621 +vt 0.919770 0.627370 +vt 0.791155 0.672050 +vt 0.920150 0.628122 +vt 0.886876 0.484021 +vt 0.803238 0.559668 +vt 0.888962 0.333082 +vt 1.001615 0.332274 +vt 0.907203 0.650451 +vt 0.907203 0.639672 +vt 0.883582 0.610482 +vt 0.881248 0.610483 +vt 0.584373 0.124155 +vt 0.580657 0.121145 +vt 0.499744 0.071477 +vt 0.666742 0.145282 +vt 0.563226 0.094501 +vt 0.563229 0.098214 +vt 0.580660 0.124155 +vt 0.499565 0.057031 +vt 0.691204 0.129508 +vt 0.746149 0.168141 +vt 0.666718 0.143374 +vt 0.871442 0.565086 +vt 0.872611 0.557990 +vt 0.874389 0.558021 +vt 0.930811 0.536100 +vt 0.922943 0.536101 +vt 0.873072 0.565802 +vt 0.871689 0.550858 +vt 0.873342 0.550199 +vt 0.938287 0.536081 +vt 0.930921 0.538012 +vt 0.922743 0.538013 +vt 0.938693 0.537991 +vt 0.886034 0.603157 +vt 0.866782 0.569074 +vt 0.868296 0.564551 +vt 0.886865 0.600670 +vt 0.868254 0.570811 +vt 0.869131 0.557930 +vt 0.887325 0.597029 +vt 0.868526 0.551283 +vt 0.886992 0.593375 +vt 0.867170 0.546710 +vt 0.930320 0.624700 +vt 0.886247 0.590861 +vt 0.930431 0.624578 +vt 0.868701 0.545026 +vt 0.944061 0.536045 +vt 0.833332 0.578908 +vt 0.869917 0.543668 +vt 0.944692 0.537954 +vt 0.832857 0.580816 +vt 0.832789 0.584529 +vt 0.944782 0.541667 +vt 0.938751 0.541705 +vt 0.930937 0.541725 +vt 0.922715 0.541726 +vt 0.915526 0.537993 +vt 0.874462 0.617039 +vt 0.874389 0.613326 +vt 0.915459 0.541706 +vt 0.915994 0.536082 +vt 0.869422 0.572210 +vt 0.874973 0.618946 +vt 0.686853 0.125996 +vt 0.901697 0.583027 +vt 0.940451 0.565467 +vt 0.902853 0.579573 +vt 0.941890 0.561161 +vt 0.907172 0.581017 +vt 0.691172 0.127439 +vt 0.906016 0.584471 +vt 0.937857 0.564551 +vt 0.699259 0.138507 +vt 0.475034 0.159701 +vt 0.699300 0.078015 +vt 0.324354 0.122792 +vt 0.939296 0.560246 +vt 0.684760 0.138507 +vt 0.667519 0.079359 +vt 0.454535 0.125631 +vt 0.552528 0.115664 +vt 0.695377 0.128845 +vt 0.910221 0.585876 +vt 0.943291 0.556970 +vt 0.911377 0.582422 +vt 0.944692 0.552778 +vt 0.915581 0.583828 +vt 0.914678 0.682999 +vt 0.699582 0.130251 +vt 0.914426 0.587282 +vt 0.941093 0.589503 +vt 0.667526 0.110036 +vt 0.940698 0.556054 +vt 0.552528 0.142602 +vt 0.942099 0.551863 +vt 0.947179 0.589503 +vt 0.916729 0.683691 +vt 0.837751 0.654217 +vt 0.705502 0.141387 +vt 0.676947 0.128691 +vt 0.893597 0.580319 +vt 0.678753 0.123288 +vt 0.682534 0.124552 +vt 0.897378 0.581583 +vt 0.705502 0.165680 +vt 0.680728 0.129955 +vt 0.937751 0.573541 +vt 0.894753 0.576865 +vt 0.939011 0.569772 +vt 0.898534 0.578129 +vt 0.653711 0.192293 +vt 0.935158 0.572625 +vt 0.324354 0.065547 +vt 0.711992 0.050888 +vt 0.244600 0.131156 +vt 0.936418 0.568856 +vt 0.684801 0.078015 +vt 0.667534 0.018529 +vt 0.699300 0.050888 +vt 0.279164 0.159620 +vt 0.271186 0.007291 +vt 0.561307 0.050888 +vt 0.587895 0.050888 +vt 0.244600 0.186286 +vt 0.385964 0.186213 +vt 0.760875 0.143290 +vt 0.297772 0.039649 +vt 0.235809 0.179028 +vt 0.271186 0.039649 +vt 0.400080 0.186063 +vt 0.587895 0.018529 +vt 0.699259 0.165341 +vt 0.614280 0.137000 +vt 0.344768 0.151644 +vt 0.614292 0.083246 +vt 0.644144 0.085514 +vt 0.244600 0.035067 +vt -0.001609 0.805037 +vt 0.346577 0.178485 +vt 0.244600 0.010798 +vt 0.186304 0.805037 +vt 0.710460 0.139850 +vt 0.680217 0.193373 +vt 0.233377 0.098739 +vt 0.587888 0.050888 +vt 0.561315 0.050888 +vt 0.538125 0.192121 +vt 0.604308 0.166823 +vt 0.534734 0.018529 +vt 0.555407 0.165455 +vt 0.667524 0.193373 +vt 0.655462 0.138116 +vt 0.324333 0.039649 +vt 0.809947 0.143359 +vt 0.297772 0.007291 +vt 0.501613 0.039643 +vt 0.542714 0.165456 +vt 0.371348 0.065674 +vt 0.669101 0.166954 +vt 0.570280 1.001414 +vt 0.475034 0.043151 +vt 0.678621 0.166954 +vt 0.534734 0.047380 +vt 0.570266 0.944607 +vt 0.947213 0.582128 +vt 0.836220 0.646842 +vt -0.003132 0.213635 +vt 0.900327 0.674390 +vt 0.863306 0.654217 +vt 0.109522 0.214444 +vt 0.861775 0.646842 +vt 0.919020 0.584977 +vt 0.915825 0.679571 +vt 0.703020 0.131400 +vt 0.917864 0.588431 +vt 0.301205 0.072696 +vt 0.303159 0.105899 +vt 0.701214 0.136804 +vt 0.303159 0.056791 +vt 0.287534 0.084135 +vt 0.693571 0.134249 +vt 0.303159 0.083807 +vt 0.697776 0.135654 +vt 0.351987 0.062571 +vt 0.705502 0.193430 +vt 0.685047 0.131399 +vt 0.351987 0.090321 +vt 0.287534 0.057118 +vt 0.689366 0.132843 +vt 0.878859 0.572770 +vt 0.919765 0.624216 +vt 0.919763 0.620334 +vt 0.878716 0.576651 +vt 0.920143 0.620334 +vt 0.482462 0.676815 +vt 0.651226 0.675622 +vt 0.920144 0.624591 +vt 0.878725 0.580534 +vt 0.919765 0.616451 +vt 0.920144 0.616076 +vt 0.313698 0.675622 +vt 0.482461 0.564607 +vt 0.499242 0.484611 +vt 0.711221 0.484463 +vt 0.657879 0.563372 +vt 0.307042 0.563372 +vt 0.287263 0.484463 +vt 0.286114 0.333526 +vt 0.499242 0.333674 +vt 0.712370 0.333526 +vt 0.879722 0.570311 +vt 0.680677 0.135053 +vt 0.895520 0.592084 +vt 0.664878 0.113279 +vt 0.880064 0.566655 +vt 0.938979 0.627278 +vt 0.898261 0.591444 +vt 0.882595 0.567432 +vt 0.939384 0.627117 +vt 0.881943 0.572558 +vt 0.932422 0.585965 +vt 0.882330 0.571144 +vt 0.880775 0.575990 +vt 0.665931 0.118959 +vt 0.667486 0.114113 +vt 0.938704 0.627164 +vt 0.899801 0.589656 +vt 0.895367 0.630367 +vt 0.939072 0.627002 +vt 0.929940 0.585047 +vt 0.897012 0.632176 +vt 0.885497 0.573767 +vt 0.934534 0.582724 +vt 0.669496 0.120188 +vt 0.884339 0.577219 +vt 0.899856 0.632854 +vt 0.931955 0.581808 +vt 0.760875 0.082807 +vt 0.658298 0.164038 +vt 0.676316 0.135088 +vt 0.663119 0.118689 +vt 0.690472 0.119665 +vt 0.469034 0.180591 +vt 0.561307 0.083246 +vt 0.275998 0.186190 +vt 0.271115 0.104279 +vt 0.475034 0.186184 +vt 0.587771 0.110123 +vt 0.297772 0.007291 +vt 0.706525 0.138144 +vt 0.456350 0.154102 +vt 0.187388 0.801758 +vt 0.508152 0.084664 +vt 0.467224 0.154102 +vt 0.133860 0.801708 +vt 0.561250 0.108705 +vt 0.888234 0.574684 +vt 0.935513 0.580017 +vt 0.932926 0.579101 +vt 0.667482 0.164038 +vt 0.595749 0.165455 +vt 0.314976 0.158289 +vt 0.604308 0.082766 +vt 0.641018 0.192293 +vt 0.933898 0.576394 +vt 0.324354 0.007291 +vt 0.324160 0.158289 +vt 0.641018 0.165375 +vt 0.936491 0.577310 +vt 0.890972 0.575601 +vt 0.672234 0.121106 +vt 0.887078 0.578137 +vt 0.889816 0.579055 +vt 0.674972 0.122024 +vt 0.686368 0.127240 +vt 0.670428 0.126509 +vt 0.686366 0.129565 +vt 0.705502 0.117094 +vt 0.673166 0.127427 +vt 0.664123 0.124360 +vt 0.665738 0.119531 +vt 0.690498 0.121879 +vt 0.686400 0.121879 +vt 0.686370 0.124916 +vt 0.667689 0.125591 +vt 0.584373 0.131780 +vt 0.881248 0.618108 +vt 0.939313 0.605918 +vt 0.883582 0.618107 +vt 0.936429 0.605918 +vt 0.883582 0.621000 +vt 0.584373 0.134673 +vt 0.881248 0.621001 +vt 0.941093 0.523726 +vt 0.939343 0.607712 +vt 0.592644 0.085514 +vt 0.542714 0.137000 +vt 0.936459 0.607712 +vt 0.525433 0.165457 +vt 0.592644 0.112451 +vt 0.684806 0.137036 +vt 0.667524 0.110036 +vt 0.584373 0.137645 +vt 0.881248 0.623973 +vt 0.933466 0.605918 +vt 0.883582 0.623972 +vt 0.883582 0.626943 +vt 0.930504 0.605918 +vt 0.584373 0.140617 +vt 0.881248 0.626945 +vt 0.324354 0.094170 +vt 0.933496 0.607712 +vt 0.324354 0.178214 +vt 0.699305 0.137036 +vt 0.437253 0.154104 +vt 0.930534 0.607712 +vt 0.324354 0.094170 +vt 0.338853 0.178214 +vt 0.297694 0.131156 +vt 0.699305 0.137036 +vt 0.563229 0.101132 +vt 0.580660 0.126521 +vt 0.881248 0.612849 +vt 0.584373 0.126521 +vt 0.584373 0.128887 +vt 0.881248 0.615215 +vt 0.563229 0.104050 +vt 0.580660 0.128887 +vt 0.904844 0.639672 +vt 0.883582 0.612848 +vt 0.902485 0.639672 +vt 0.942197 0.605918 +vt 0.883582 0.615213 +vt 0.863306 0.588441 +vt 1.001615 0.213635 +vt 0.904844 0.650451 +vt 0.902483 0.638378 +vt 0.837751 0.588441 +vt 0.947179 0.523726 +vt 0.942227 0.607712 +vt 0.861775 0.595816 +vt 0.888962 0.214443 +vt 0.836220 0.595816 +vt 0.947213 0.531101 +vt 0.495456 0.153347 +vt 0.451635 0.860853 +vt 0.587888 0.055470 +vt 0.506330 0.153347 +vt 0.451663 0.797868 +vt 0.297758 0.067426 +vt 0.640962 0.115343 +vt 0.587888 0.083246 +vt 0.561315 0.018529 +vt 0.653711 0.192215 +vt 0.644144 0.136672 +vt 0.591160 0.192284 +vt 0.810207 0.167580 +vt 0.437253 0.098753 +vt 0.640962 0.142220 +vt 0.711952 0.192305 +vt 0.760875 0.167512 +vt 0.341556 0.062822 +vt 0.639846 0.196756 +vt 0.261882 0.133315 +vt 0.437253 0.125631 +vt 0.699314 0.045507 +vt 0.614461 0.136920 +vt 0.241599 1.001492 +vt 0.710368 0.165341 +vt 0.614461 0.116762 +vt 0.290418 1.001492 +vt 0.594027 0.133660 +vt 0.534734 0.078664 +vt 0.938870 0.856837 +vt 0.274223 0.159622 +vt 0.534734 0.054395 +vt 0.246368 0.159622 +vt 0.692641 0.856837 +vt 0.883582 0.629545 +vt 0.927911 0.605918 +vt 0.925317 0.605918 +vt 0.883582 0.632147 +vt 0.584373 0.143218 +vt 0.881248 0.629546 +vt 0.584373 0.145820 +vt 0.881248 0.632148 +vt 0.707420 0.163398 +vt 0.563229 0.121726 +vt 0.580660 0.143219 +vt 0.580660 0.145820 +vt 0.563229 0.124935 +vt 0.686276 0.142513 +vt 0.703707 0.163398 +vt 0.563229 0.114852 +vt 0.580660 0.137645 +vt 0.563229 0.118517 +vt 0.580660 0.140617 +vt 0.563229 0.107618 +vt 0.580660 0.131780 +vt 0.563229 0.111187 +vt 0.580660 0.134674 +vt 0.922715 0.551130 +vt 0.930937 0.551129 +vt 0.930937 0.554698 +vt 0.922715 0.554699 +vt 0.938751 0.551109 +vt 0.938751 0.554677 +vt 0.922715 0.558364 +vt 0.930937 0.558363 +vt 0.930937 0.562028 +vt 0.922715 0.562029 +vt 0.938751 0.558343 +vt 0.938751 0.562008 +vt 0.874389 0.610408 +vt 0.915459 0.544624 +vt 0.922715 0.544644 +vt 0.922715 0.547562 +vt 0.915459 0.547542 +vt 0.874389 0.607490 +vt 0.930937 0.544643 +vt 0.930937 0.547561 +vt 0.938751 0.544623 +vt 0.938751 0.547540 +vt 0.832789 0.587447 +vt 0.944782 0.544585 +vt 0.832789 0.590365 +vt 0.944782 0.547503 +vt 0.832789 0.593933 +vt 0.944782 0.551071 +vt 0.832789 0.597502 +vt 0.944782 0.554640 +vt 0.832789 0.601167 +vt 0.944782 0.558305 +vt 0.832789 0.604832 +vt 0.944782 0.561970 +vt 0.938751 0.565217 +vt 0.832789 0.608041 +vt 0.944782 0.565179 +vt 0.832789 0.611250 +vt 0.944782 0.568388 +vt 0.938751 0.568425 +vt 0.930937 0.565237 +vt 0.930937 0.568445 +vt 0.922715 0.565238 +vt 0.922715 0.568446 +vt 0.874389 0.589814 +vt 0.915459 0.565218 +vt 0.874389 0.586605 +vt 0.915459 0.568427 +vt 0.874389 0.596688 +vt 0.915459 0.558344 +vt 0.874389 0.593023 +vt 0.915459 0.562009 +vt 0.874389 0.603922 +vt 0.915459 0.551110 +vt 0.874389 0.600353 +vt 0.915459 0.554679 +vt 0.341618 0.096471 +vt 0.592644 0.085514 +vt 0.501548 0.104360 +vt 0.706525 0.110476 +vt 0.604386 0.110447 +vt 0.534676 0.110123 +vt 0.454535 0.151945 +vt 0.390862 0.085514 +vt 0.341618 0.122792 +vt 0.524273 0.791873 +vt 0.542518 0.088624 +vt 0.328238 0.121009 +vt 0.556474 0.791873 +vt 0.325980 0.151265 +vt 0.508152 0.137000 +vt 0.941127 0.531101 +vt 0.400080 0.159801 +vt 0.559996 0.139158 +vt 0.308162 0.186378 +vt 0.508152 0.110123 +vt 0.941145 0.542662 +vt 0.614466 0.018529 +vt 0.261882 0.186190 +vt 0.489150 0.186184 +vt 0.534665 0.111542 +vt 0.461725 0.942002 +vt 0.487388 0.159701 +vt 0.534665 0.131700 +vt 0.688234 0.942002 +vt 0.309918 0.159620 +vt 0.233377 0.066381 +vt 0.641011 0.050888 +vt 0.233327 0.098739 +vt 0.697453 0.165641 +vt 0.655988 0.162366 +vt 0.604912 0.138116 +vt 0.534734 0.050888 +vt 0.520845 0.192044 +vt 0.206811 0.095231 +vt 0.363738 1.004481 +vt 0.536542 0.165457 +vt 0.206811 0.070962 +vt 0.426171 1.004481 +vt 0.695876 0.192209 +vt 0.641970 0.165375 +vt 0.707054 0.866536 +vt 0.326934 0.034103 +vt 0.652759 0.165375 +vt 0.754036 0.866319 +vt 0.326934 0.038735 +vt 0.860933 0.607376 +vt 0.712370 0.214888 +vt 0.835379 0.607376 +vt 0.947231 0.542662 +vt 0.860653 0.621329 +vt 0.499242 0.215036 +vt 0.835098 0.621329 +vt 0.947238 0.556615 +vt 0.860933 0.635282 +vt 0.286114 0.214888 +vt 0.835378 0.635282 +vt 0.947231 0.570567 +vt 0.398307 0.159801 +vt 0.444963 0.864212 +vt 0.587771 0.135581 +vt 0.684815 0.018529 +vt 0.308162 0.159620 +vt 0.684808 0.108545 +vt 0.641018 0.083159 +vt 0.492316 0.157543 +vt 0.341636 0.124951 +vt 0.279164 0.159620 +vt 0.534727 0.110123 +vt 0.699314 0.018529 +vt 0.534676 0.137000 +vt 0.293663 0.159620 +vt 0.684815 0.020688 +vt 0.627153 0.196756 +vt 0.296446 0.157462 +vt 0.324251 0.131156 +vt 0.712007 0.045507 +vt 0.697499 0.045494 +vt 0.561185 0.131700 +vt 0.001830 0.801395 +vt 0.686625 0.045494 +vt 0.001925 0.860310 +vt 0.667526 0.088459 +vt 0.534676 0.110123 +vt 0.666403 0.192215 +vt 0.542518 0.085514 +vt 0.206811 0.179184 +vt 0.297772 0.039649 +vt 0.501613 0.072002 +vt 0.324251 0.104279 +vt 0.810207 0.143359 +vt 0.561185 0.111542 +vt 0.110779 0.801395 +vt 0.492401 0.088988 +vt 0.561315 0.047380 +vt 0.384190 0.159801 +vt 0.685768 0.796037 +vt 0.561315 0.023111 +vt 0.701027 0.138507 +vt 0.471216 0.796037 +vt 0.258716 0.186286 +vt 0.941151 0.556615 +vt 0.371848 0.186213 +vt 0.614466 0.050888 +vt 0.297758 0.039649 +vt 0.256955 0.159622 +vt 0.692592 0.943376 +vt 0.587895 0.047380 +vt 0.344768 0.146378 +vt 0.984250 0.933886 +vt 0.719956 0.081567 +vt 0.344768 0.126327 +vt 0.833982 0.933858 +vt 0.440944 0.133042 +vt 0.561315 0.078664 +vt 0.296578 0.998874 +vt 0.589576 0.165450 +vt 0.561315 0.054395 +vt 0.362954 0.998874 +vt 0.553905 0.163813 +vt 0.711614 0.138507 +vt 0.471258 0.856504 +vt 0.271180 0.067426 +vt 0.838869 0.593941 +vt 0.541994 0.107613 +vt 0.549325 0.107617 +vt 0.549325 0.111186 +vt 0.838869 0.597510 +vt 0.541994 0.111182 +vt 0.556779 0.107618 +vt 0.556779 0.111187 +vt 0.838869 0.601175 +vt 0.541994 0.114847 +vt 0.549325 0.114851 +vt 0.549325 0.118516 +vt 0.838869 0.604841 +vt 0.541994 0.118512 +vt 0.556779 0.114852 +vt 0.556779 0.118518 +vt 0.541994 0.101127 +vt 0.838869 0.587455 +vt 0.838869 0.590373 +vt 0.541994 0.104045 +vt 0.549325 0.101131 +vt 0.549325 0.104049 +vt 0.556779 0.101132 +vt 0.556779 0.104050 +vt 0.556779 0.121726 +vt 0.556779 0.124935 +vt 0.679826 0.142513 +vt 0.549325 0.121725 +vt 0.549325 0.124934 +vt 0.672372 0.142512 +vt 0.838869 0.608049 +vt 0.541994 0.121721 +vt 0.541994 0.124930 +vt 0.665041 0.142508 +vt 0.838869 0.611258 +vt 0.670326 0.116669 +vt 0.885169 0.573700 +vt 0.676915 0.118662 +vt 0.676742 0.120789 +vt 0.672665 0.121897 +vt 0.669723 0.118561 +vt 0.665694 0.121931 +vt 0.880537 0.578963 +vt 0.884567 0.575592 +vt 0.684066 0.119474 +vt 0.684067 0.121677 +vt 0.679972 0.121882 +vt 0.672543 0.124919 +vt 0.880229 0.581957 +vt 0.665386 0.124926 +vt 0.679931 0.124916 +vt 0.670785 0.113061 +vt 0.885629 0.570093 +vt 0.677061 0.114528 +vt 0.684109 0.115185 +vt 0.679928 0.127241 +vt 0.656736 0.117097 +vt 0.679925 0.129565 +vt 0.672534 0.127243 +vt 0.672526 0.129566 +vt 0.880207 0.584279 +vt 0.665364 0.127247 +vt 0.665342 0.129569 +vt 0.880185 0.586600 +vt 0.880185 0.596683 +vt 0.665342 0.139652 +vt 0.672526 0.139649 +vt 0.672526 0.143315 +vt 0.880185 0.600349 +vt 0.665342 0.143317 +vt 0.303221 0.062573 +vt 0.656736 0.193433 +vt 0.679925 0.139648 +vt 0.303221 0.090324 +vt 0.238768 0.057121 +vt 0.679925 0.143314 +vt 0.880185 0.603917 +vt 0.665342 0.146886 +vt 0.672526 0.146883 +vt 0.672526 0.150452 +vt 0.880185 0.607486 +vt 0.665342 0.150454 +vt 0.254393 0.056794 +vt 0.238768 0.084137 +vt 0.679925 0.146882 +vt 0.679925 0.150451 +vt 0.254393 0.083810 +vt 0.665342 0.132778 +vt 0.880185 0.589809 +vt 0.880185 0.593018 +vt 0.665342 0.135987 +vt 0.672526 0.132775 +vt 0.672526 0.135984 +vt 0.656736 0.141389 +vt 0.679925 0.132774 +vt 0.656736 0.165682 +vt 0.679925 0.135983 +vt 0.252439 0.072699 +vt 0.679925 0.153369 +vt 0.254393 0.105902 +vt 0.252439 0.094791 +vt 0.679925 0.156287 +vt 0.672526 0.153370 +vt 0.672526 0.156288 +vt 0.880185 0.610404 +vt 0.665342 0.153372 +vt 0.880185 0.613322 +vt 0.665342 0.156290 +vt 0.930063 0.624309 +vt 0.670272 0.105776 +vt 0.863631 0.541323 +vt 0.663685 0.103761 +vt 0.663901 0.101635 +vt 0.652921 0.143373 +vt 0.670914 0.103887 +vt 0.645809 0.143369 +vt 0.839168 0.578916 +vt 0.864273 0.539434 +vt 0.656535 0.102925 +vt 0.746609 0.168316 +vt 0.656578 0.100722 +vt 0.746612 0.168158 +vt 0.660281 0.143374 +vt 0.652850 0.145281 +vt 0.549335 0.094500 +vt 0.645547 0.145277 +vt 0.542032 0.094496 +vt 0.838906 0.580824 +vt 0.660293 0.145282 +vt 0.556777 0.094501 +vt 0.930027 0.624571 +vt 0.669775 0.109382 +vt 0.733637 0.130897 +vt 0.884027 0.589881 +vt 0.663497 0.107894 +vt 0.730185 0.130079 +vt 0.656449 0.107212 +vt 0.726310 0.129704 +vt 0.556779 0.098214 +vt 0.549325 0.098213 +vt 0.541994 0.098209 +vt 0.838869 0.584537 +vt 0.733664 0.141901 +vt 0.884055 0.600885 +vt 0.730033 0.142216 +vt 0.730166 0.137927 +vt 0.733923 0.137993 +vt 0.884314 0.596977 +vt 0.726099 0.142316 +vt 0.726183 0.137858 +vt 0.730182 0.133636 +vt 0.733800 0.134077 +vt 0.884191 0.593062 +vt 0.726253 0.133399 +vt 0.883782 0.604058 +vt 0.733391 0.145074 +vt 0.712296 0.111730 +vt 0.862687 0.570714 +vt 0.729913 0.145771 +vt 0.705971 0.112998 +vt 0.726027 0.146011 +vt 0.632771 0.062484 +vt 0.698904 0.113433 +vt 0.665078 0.147151 +vt 0.838906 0.615901 +vt 0.672382 0.147159 +vt 0.672452 0.150180 +vt 0.718331 0.067999 +vt 0.665340 0.150145 +vt 0.711253 0.070029 +vt 0.885081 0.538779 +vt 0.839168 0.618895 +vt 0.068109 0.073416 +vt 0.679824 0.147162 +vt 0.679812 0.150196 +vt 0.725677 0.067316 +vt 0.718444 0.070130 +vt 0.711802 0.071937 +vt 0.885630 0.540687 +vt 0.725615 0.069519 +vt 0.665060 0.144830 +vt 0.838888 0.613580 +vt 0.672377 0.144836 +vt 0.068115 0.055817 +vt 0.679825 0.144838 +vt 0.725538 0.073807 +vt 0.718475 0.074266 +vt 0.885989 0.544306 +vt 0.712161 0.075556 +vt 0.665386 0.160003 +vt 0.880229 0.617034 +vt 0.672543 0.160001 +vt 0.672665 0.161908 +vt 0.641705 0.121220 +vt 0.665694 0.161910 +vt 0.648791 0.119214 +vt 0.863635 0.576245 +vt 0.880537 0.618942 +vt 0.679931 0.159999 +vt 0.679972 0.161907 +vt 0.634355 0.121877 +vt 0.641563 0.119088 +vt 0.706016 0.117135 +vt 0.648215 0.117303 +vt 0.712668 0.115350 +vt 0.863059 0.574334 +vt 0.634388 0.119674 +vt 0.632299 0.094948 +vt 0.698841 0.117721 +vt 0.711668 0.081329 +vt 0.885496 0.550079 +vt 0.718261 0.080734 +vt 0.718041 0.088534 +vt 0.677025 0.100253 +vt 0.711216 0.088439 +vt 0.670201 0.100157 +vt 0.885044 0.557189 +vt 0.725413 0.080526 +vt 0.725281 0.088636 +vt 0.684265 0.100355 +vt 0.677028 0.108057 +vt 0.670454 0.107277 +vt 0.885298 0.564308 +vt 0.684171 0.108465 +vt 0.671846 0.083186 +vt 0.167878 0.943740 +vt 0.604308 0.139237 +vt 0.684808 0.081567 +vt 0.287854 0.943740 +vt 0.415954 0.159801 +vt 0.534734 0.023111 +vt 0.655300 0.165375 +vt 0.487678 0.944607 +vt 0.492401 0.136672 +vt 0.279164 0.157463 +vt 0.641011 0.077765 +vt 0.233327 0.125616 +vt 0.595749 0.139158 +vt 0.614461 0.170646 +vt 0.595749 0.192213 +vt 0.561185 0.165452 +vt 0.442319 0.133642 +vt 0.279164 0.131156 +vt 0.129476 0.735323 +vt 0.442319 0.115476 +vt 0.129283 0.776952 +vt 0.314976 0.159620 +vt 0.721195 0.044640 +vt 0.667534 0.018529 +vt 0.699259 0.192305 +vt 0.341556 0.010016 +vt 0.760875 0.143290 +vt 0.658298 0.163202 +vt 0.541162 0.130699 +vt 0.757770 0.082791 +vt 0.722297 0.018529 +vt 0.264582 0.801994 +vt 0.658298 0.136913 +vt 0.729182 0.018529 +vt 0.304655 0.802489 +vt 0.550034 0.115664 +vt 0.266202 0.132775 +vt 0.185576 0.735323 +vt 0.710405 0.110036 +vt 0.730319 0.191617 +vt 0.604308 0.082766 +vt 0.721171 0.077151 +vt 0.721135 0.192173 +vt 0.271180 0.072008 +vt 0.297758 0.104279 +vt 0.711998 0.136784 +vt 0.655462 0.082807 +vt 0.721135 0.191617 +vt 0.667534 0.045406 +vt 0.644144 0.112451 +vt 0.508152 0.083246 +vt 0.578467 0.192284 +vt 0.475034 0.072002 +vt 0.721181 0.136784 +vt 0.809060 0.082791 +vt 0.722215 0.165341 +vt 0.103658 0.998282 +vt 0.806379 0.032225 +vt 0.729103 0.165341 +vt 0.103804 0.943323 +vt 0.658182 0.032225 +vt 0.306355 0.185724 +vt 0.084796 0.939068 +vt 0.492316 0.131237 +vt 0.295481 0.185724 +vt 0.155115 0.938742 +vt 0.684815 0.046995 +vt 0.697446 0.165641 +vt 0.746833 0.745262 +vt 0.328675 0.149646 +vt 0.686571 0.165641 +vt 0.671839 0.052507 +vt 0.747084 0.799592 +vt 0.525433 0.139173 +vt 0.578467 0.163294 +vt 0.627153 0.170646 +vt 0.587760 0.137000 +vt 0.608442 0.192213 +vt 0.711992 0.077652 +vt 0.809060 0.032225 +vt 0.721178 0.081567 +vt 0.525433 0.165462 +vt 0.367180 0.792692 +vt 0.722255 0.107811 +vt 0.512472 0.163833 +vt 0.409873 0.792722 +vt 0.632750 0.142220 +vt 0.664820 0.165375 +vt 0.487692 1.001414 +vt 0.475034 0.067419 +vt 0.721195 0.045206 +vt 0.371336 0.065674 +vt 0.525433 0.192121 +vt 0.508152 0.050888 +vt 0.604308 0.142602 +vt 0.475034 0.104360 +vt 0.368455 0.175913 +vt 0.463817 0.098753 +vt 0.712007 0.045206 +vt 0.244600 0.104279 +vt 0.713375 0.138507 +vt 0.641011 0.083159 +vt 0.645237 0.130707 +vt 0.271180 0.104279 +vt 0.297758 0.072008 +vt 0.359267 0.175913 +vt 0.713232 0.018529 +vt 0.271171 0.100777 +vt 0.174663 0.938844 +vt 0.720122 0.018529 +vt 0.174658 0.998772 +vt 0.437253 0.095251 +vt 0.371356 0.000958 +vt 0.655462 0.110447 +vt 0.614461 0.083246 +vt 0.809947 0.115690 +vt 0.244600 0.072008 +vt 0.760875 0.115622 +vt 0.501622 0.039643 +vt 0.221310 0.179028 +vt 0.344768 0.028734 +vt 0.801872 0.733190 +vt 0.655798 0.113952 +vt 0.344768 0.004465 +vt 0.664005 0.733190 +vt 0.223125 0.152350 +vt 0.667519 0.052307 +vt 0.699158 1.005132 +vt 0.706525 0.159343 +vt 0.667519 0.072464 +vt 0.699158 0.945679 +vt 0.597328 0.165455 +vt 0.373603 0.159801 +vt 0.685809 0.856504 +vt 0.271180 0.043157 +vt 0.655462 0.162337 +vt 0.244600 0.072008 +vt 0.655824 0.162366 +vt 0.641011 0.050888 +vt 0.390407 0.148224 +vt 0.604308 0.082779 +vt 0.592644 0.148224 +vt 0.757770 0.082807 +vt 0.655462 0.179862 +vt 0.371336 0.098033 +vt 0.684760 0.165641 +vt 0.587760 0.110123 +vt 0.655988 0.138144 +vt 0.860350 0.032225 +vt 0.592644 0.130699 +vt 0.463817 0.066395 +vt 0.604735 0.177833 +vt 0.231822 0.998745 +vt 0.437253 0.070982 +vt 0.604735 0.164689 +vt 0.271171 0.076573 +vt 0.231674 0.938844 +vt 0.206811 0.120315 +vt 0.828586 0.940322 +vt 0.562780 0.192217 +vt 0.206811 0.100158 +vt 0.754766 0.940322 +vt 0.655462 0.141149 +vt 0.699307 0.108545 +vt 0.684801 0.077200 +vt 0.471817 0.127789 +vt 0.428311 0.185911 +vt 0.440944 0.085514 +vt 0.293663 0.159620 +vt 0.614292 0.110123 +vt 0.686622 0.081567 +vt 0.207916 0.715017 +vt 0.561250 0.104822 +vt 0.697497 0.081567 +vt 0.208055 0.807249 +vt 0.587771 0.104822 +vt 0.684801 0.050888 +vt 0.811179 0.799592 +vt 0.291856 0.185731 +vt 0.167420 0.859166 +vt 0.458855 0.152483 +vt 0.604308 0.119034 +vt 0.287396 0.859166 +vt 0.471817 0.154102 +vt 0.426541 0.159801 +vt 0.651057 0.785208 +vt 0.706525 0.164396 +vt 0.614461 0.055464 +vt 0.574515 0.785208 +vt 0.714447 0.165170 +vt 0.614461 0.079667 +vt 0.574522 0.738744 +vt 0.721337 0.165170 +vt 0.641018 0.111851 +vt 0.650857 0.738765 +vt 0.706525 0.177540 +vt 0.641018 0.087713 +vt -0.002560 0.943079 +vt 0.601643 0.032225 +vt 0.722250 0.050888 +vt -0.002696 1.001950 +vt 0.729138 0.050888 +vt 0.233304 0.127034 +vt 0.292478 0.935540 +vt 0.695641 0.115268 +vt 0.671833 0.165326 +vt 0.221750 0.935508 +vt 0.722259 0.136268 +vt 0.684760 0.166954 +vt 0.221290 0.871782 +vt 0.729143 0.136268 +vt 0.631656 0.142220 +vt 0.291838 0.871782 +vt 0.695641 0.128412 +vt 0.618760 0.143826 +vt 0.150220 0.871356 +vt 0.644144 0.088870 +vt 0.547035 0.163837 +vt 0.150220 0.931285 +vt 0.401843 0.186032 +vt 0.559996 0.165455 +vt 0.100763 0.931056 +vt 0.542714 0.137000 +vt 0.412429 0.186032 +vt 0.100763 0.871127 +vt 0.529753 0.138619 +vt 0.644144 0.109072 +vt 0.524399 0.719919 +vt 0.341618 0.065547 +vt 0.542518 0.110067 +vt 0.556600 0.719919 +vt 0.328238 0.067329 +vt 0.337216 0.151265 +vt 0.753088 0.746942 +vt 0.595749 0.165450 +vt 0.616046 0.196876 +vt 0.797000 0.747145 +vt 0.578467 0.137000 +vt 0.625565 0.196876 +vt 0.938822 0.943376 +vt 0.587895 0.023111 +vt 0.263637 0.159622 +vt 0.311061 0.860853 +vt 0.604579 0.113899 +vt 0.587888 0.079738 +vt 0.311089 0.797868 +vt 0.604579 0.134651 +vt 0.297758 0.043157 +vt 0.308905 0.864212 +vt 0.492401 0.088886 +vt 0.587771 0.115423 +vt 0.110875 0.860310 +vt 0.492401 0.109739 +vt 0.667526 0.108617 +vt 0.241562 0.940958 +vt 0.641031 0.023829 +vt 0.700849 0.165341 +vt 0.290381 0.940958 +vt 0.641031 0.043987 +vt 0.594027 0.115494 +vt 0.363749 0.939264 +vt 0.344768 0.069182 +vt 0.527022 0.165457 +vt 0.426182 0.939264 +vt 0.344768 0.093451 +vt 0.686357 0.192209 +vt 0.542714 0.163299 +vt 0.414195 0.159801 +vt 0.271115 0.131156 +vt 0.322277 0.186378 +vt 0.604386 0.082779 +vt 0.587771 0.083246 +vt 0.390862 0.113182 +vt 0.684806 0.112195 +vt 0.542518 0.113182 +vt 0.641018 0.110036 +vt 0.221310 0.179184 +vt 0.244600 0.039649 +vt 0.359267 0.151644 +vt 0.501622 0.007285 +vt 0.644144 0.113182 +vt 0.534727 0.083246 +vt 0.721181 0.110036 +vt 0.684760 0.140678 +vt 0.711999 0.108324 +vt 0.655462 0.082779 +vt 0.721171 0.077652 +vt 0.706616 0.082807 +vt 0.810165 0.115690 +vt 0.730358 0.081567 +vt 0.985067 0.996475 +vt 0.713072 0.081567 +vt 0.645336 0.032225 +vt 0.834398 0.996475 +vt 0.440944 0.146186 +vt 0.606971 0.032225 +vt 0.163682 0.928410 +vt 0.695641 0.132742 +vt 0.297737 0.100788 +vt 0.087308 0.928382 +vt 0.720049 0.165341 +vt 0.297737 0.076584 +vt 0.087511 0.866956 +vt 0.713162 0.165341 +vt 0.614467 0.023084 +vt 0.163678 0.866956 +vt 0.695641 0.145892 +vt 0.614467 0.047222 +vt 0.286845 0.861406 +vt 0.860350 0.119131 +vt 0.271180 0.068500 +vt 0.140028 0.861406 +vt 0.219501 0.152350 +vt 0.271180 0.044232 +vt 0.139998 0.795624 +vt 0.208626 0.152350 +vt 0.324354 0.035067 +vt 0.286816 0.795623 +vt 0.860350 0.139882 +vt 0.324354 0.010798 +vt 0.296567 0.936596 +vt 0.534727 0.078664 +vt 0.580057 0.165450 +vt 0.362942 0.936596 +vt 0.534727 0.054395 +vt 0.553905 0.145647 +vt 0.762060 1.005086 +vt 0.561250 0.111542 +vt 0.706525 0.141177 +vt 0.762060 0.945634 +vt 0.561250 0.131700 +vt 0.606847 0.165455 +vt 0.526713 0.796750 +vt 0.475034 0.109661 +vt 0.655462 0.107033 +vt 0.461918 0.861956 +vt 0.244600 0.105698 +vt 0.476801 0.159701 +vt 0.688428 0.861956 +vt 0.244600 0.125856 +vt 0.320505 0.159620 +vt 0.155115 0.855786 +vt 0.686614 0.050888 +vt 0.671854 0.045376 +vt 0.084796 0.856111 +vt 0.479354 0.132856 +vt 0.697489 0.050888 +vt 0.707054 0.803222 +vt 0.341556 0.036419 +vt 0.710674 0.145115 +vt 0.754036 0.803005 +vt 0.710674 0.165703 +vt 0.341556 0.036419 +vt 0.651489 0.737042 +vt 0.709681 0.091011 +vt 0.659458 0.136913 +vt 0.747814 0.737042 +vt 0.604308 0.182066 +vt 0.706616 0.115622 +vt 0.747186 0.789004 +vt 0.604308 0.168928 +vt 0.612985 0.137000 +vt 0.650617 0.789030 +vt 0.666346 0.136913 +vt 0.600058 0.138629 +vt 0.004056 0.875480 +vt 0.710405 0.078022 +vt 0.248921 0.158003 +vt 0.079746 0.875480 +vt 0.638254 0.170646 +vt 0.261882 0.159622 +vt 0.080006 0.931645 +vt 0.628734 0.170646 +vt 0.296446 0.131156 +vt 0.004316 0.931645 +vt 0.700885 0.078022 +vt 0.283484 0.132775 +vt 0.810928 0.745262 +vt 0.341636 0.151265 +vt 0.280982 0.185731 +vt 0.304655 0.728016 +vt 0.316135 0.131156 +vt 0.553101 0.090990 +vt 0.264562 0.727333 +vt 0.323023 0.131156 +vt 0.645338 0.138542 +vt 0.133860 0.858876 +vt 0.655462 0.086222 +vt 0.561250 0.088547 +vt 0.187388 0.858927 +vt 0.655462 0.106973 +vt 0.508152 0.104822 +vt -0.001647 0.720842 +vt 0.357451 0.178485 +vt 0.475034 0.011867 +vt 0.186266 0.720842 +vt 0.710460 0.119098 +vt 0.475034 0.036136 +vt 0.828529 0.996759 +vt 0.271180 0.109580 +vt 0.572299 0.192217 +vt 0.754709 0.996759 +vt 0.655462 0.159315 +vt 0.271180 0.129737 +vt 0.157887 1.002813 +vt 0.501586 0.102473 +vt 0.367844 0.202411 +vt 0.108714 1.002786 +vt 0.501586 0.074969 +vt 0.720553 0.110036 +vt 0.108843 0.942968 +vt 0.324313 0.101325 +vt 0.712747 0.110036 +vt 0.157882 0.942968 +vt 0.324313 0.073894 +vt 0.360035 0.202411 +vt 0.621140 0.953882 +vt 0.713065 0.050888 +vt 0.819202 0.082791 +vt 0.712633 0.953882 +vt 0.857670 0.082791 +vt 0.542095 0.132738 +vt 0.712880 0.993855 +vt 0.542095 0.145882 +vt 0.755049 0.032225 +vt 0.621630 0.993837 +vt 0.719949 0.050888 +vt 0.716683 0.032225 +vt 0.365837 0.807249 +vt 0.587771 0.084664 +vt 0.694286 0.088957 +vt 0.365699 0.715017 +vt 0.694286 0.109708 +vt 0.561250 0.084664 +vt 0.801844 0.794963 +vt 0.271186 0.011873 +vt 0.655798 0.134704 +vt 0.663977 0.794963 +vt 0.271186 0.036142 +vt 0.234000 0.152350 +vt 0.746837 0.749913 +vt 0.686613 0.110036 +vt 0.671845 0.136888 +vt 0.806911 0.749913 +vt 0.440944 0.109726 +vt 0.684806 0.138507 +vt 0.806675 0.800835 +vt 0.454535 0.125631 +vt 0.440944 0.088975 +vt 0.746602 0.800835 +vt 0.697487 0.110036 +vt 0.441574 0.127250 +vt 0.628174 0.996468 +vt 0.509729 0.165462 +vt 0.344768 0.037898 +vt 0.558678 0.996468 +vt 0.544298 0.192133 +vt 0.344768 0.062167 +vt 0.558690 0.944480 +vt 0.508152 0.022037 +vt 0.553817 0.192133 +vt 0.628186 0.944480 +vt 0.508152 0.046305 +vt 0.519249 0.165462 +vt 0.486936 0.999431 +vt 0.297737 0.105698 +vt 0.860350 0.146371 +vt 0.436189 0.999431 +vt 0.297737 0.125855 +vt 0.710423 0.018529 +vt 0.436150 0.944361 +vt 0.463769 0.120330 +vt 0.700904 0.018529 +vt 0.486897 0.944361 +vt 0.860350 0.164537 +vt 0.463769 0.100172 +vt 0.185384 0.776952 +vt 0.302015 0.158001 +vt 0.700886 0.110036 +vt 0.366897 0.733180 +vt 0.860350 0.115690 +vt 0.729140 0.107811 +vt 0.409482 0.733180 +vt 0.857283 0.091016 +vt 0.639638 0.142220 +vt 0.049691 0.998282 +vt 0.592644 0.128585 +vt 0.767912 0.032225 +vt 0.049979 0.943348 +vt 0.592644 0.115448 +vt 0.696548 0.032225 +s 1 +usemtl calculator +f 24755/43841/16218 24756/43846/16219 24757/43851/16220 24758/43852/16220 +f 24756/43846/16221 24759/43853/16222 24760/43858/16222 24757/43851/16223 +f 24758/43852/16224 24757/43851/16225 24761/43859/16225 24762/43860/16225 +f 24757/43851/16226 24760/43858/16227 24763/43861/16226 24761/43859/16227 +f 24764/43862/16228 24765/43870/16229 24766/43878/16230 24767/43881/16231 +f 24768/43884/16232 24769/43892/16232 24770/43897/16233 24771/43900/16233 +f 24772/43903/16234 24764/43863/16235 24767/43882/16234 24773/43911/16235 +f 24774/43914/16236 24775/43919/16237 24776/43924/16238 24777/43927/16239 +f 24759/43853/16240 24769/43893/16240 24778/43930/16240 24760/43858/16240 +f 24760/43858/16241 24778/43930/16242 24779/43931/16241 24763/43861/16243 +f 24763/43861/16244 24779/43931/16244 24780/43933/16245 24781/43934/16245 +f 24761/43859/16246 24763/43861/16247 24781/43934/16246 24782/43936/16247 +f 24762/43860/16248 24761/43859/16249 24782/43936/16248 24783/43938/16249 +f 24784/43940/16250 24762/43860/16250 24783/43938/16251 24785/43942/16251 +f 24786/43943/16252 24758/43852/16253 24762/43860/16254 24784/43940/16253 +f 24787/43944/16255 24755/43841/16255 24758/43852/16255 24786/43943/16255 +f 24788/43949/16256 24789/43951/16257 24790/43952/16257 24791/43953/16256 +f 24789/43951/16257 24792/43956/16258 24793/43957/16259 24790/43952/16257 +f 24791/43953/16260 24790/43952/16261 24794/43958/16261 24795/43959/16260 +f 24790/43952/16261 24793/43957/16262 24796/43961/16263 24794/43958/16261 +f 24797/43962/16264 24798/43965/16265 24788/43950/16265 24799/43966/16264 +f 24798/43964/16265 24800/43968/16266 24789/43951/16267 24788/43949/16265 +f 24800/43968/16266 24801/43970/16268 24792/43956/16268 24789/43951/16267 +f 24801/43970/16269 24785/43941/16270 24783/43939/16270 24792/43956/16271 +f 24792/43956/16272 24783/43939/16273 24782/43937/16274 24793/43957/16272 +f 24793/43957/16275 24782/43937/16275 24781/43935/16275 24796/43961/16275 +f 24796/43961/16276 24781/43935/16276 24780/43932/16277 24802/43971/16276 +f 24794/43958/16278 24796/43961/16279 24802/43971/16279 24803/43973/16280 +f 24795/43959/16281 24794/43958/16278 24803/43973/16280 24804/43975/16281 +f 24805/43976/16282 24795/43960/16281 24804/43974/16281 24806/43978/16282 +f 24807/43980/16283 24791/43954/16260 24795/43960/16260 24805/43976/16283 +f 24799/43966/16284 24788/43950/16256 24791/43955/16256 24807/43981/16285 +f 24808/43984/16286 24809/43987/16286 24810/43989/16286 24811/43992/16287 +f 24809/43986/16288 24812/43996/16289 24813/44000/16290 24810/43990/16290 +f 24811/43993/16291 24810/43991/16292 24814/44004/16293 24815/44006/16294 +f 24810/43991/16295 24813/44001/16296 24816/44010/16297 24814/44004/16298 +f 24817/44013/16299 24818/44017/16300 24808/43985/16300 24819/44018/16301 +f 24818/44016/16302 24820/44021/16302 24809/43987/16303 24808/43984/16302 +f 24820/44020/16304 24821/44023/16305 24812/43997/16306 24809/43988/16307 +f 24821/44022/16308 24822/44024/16309 24823/44026/16308 24812/43998/16309 +f 24812/43999/16310 24823/44025/16311 24824/44028/16312 24813/44002/16310 +f 24813/44003/16313 24824/44027/16314 24825/44030/16315 24816/44011/16314 +f 24816/44012/16316 24825/44029/16317 24826/44032/16317 24827/44033/16318 +f 24814/44005/16319 24816/44012/16316 24827/44033/16318 24828/44035/16320 +f 24815/44007/16321 24814/44005/16319 24828/44035/16320 24829/44038/16322 +f 24830/44044/16323 24815/44008/16321 24829/44039/16322 24831/44046/16324 +f 24832/44047/16325 24811/43994/16291 24815/44009/16294 24830/44042/16325 +f 24819/44018/16326 24808/43985/16327 24811/43995/16328 24832/44048/16326 +f 24833/44051/16329 24834/44052/16330 24835/44053/16329 24836/44056/16330 +f 24834/44052/16331 24837/44057/16332 24838/44058/16331 24835/44053/16332 +f 24836/44056/16333 24835/44053/16334 24839/44060/16335 24840/44062/16334 +f 24835/44054/16336 24838/44059/16337 24841/44064/16337 24839/44061/16337 +f 24842/44066/16338 24843/44067/16338 24833/44051/16339 24844/44068/16338 +f 24843/44067/16340 24845/44070/16341 24834/44052/16340 24833/44051/16342 +f 24845/44070/16343 24846/44071/16344 24837/44057/16345 24834/44052/16344 +f 24846/44071/16346 24847/44073/16346 24848/44074/16346 24837/44057/16346 +f 24837/44057/16347 24848/44074/16347 24849/44076/16347 24838/44058/16347 +f 24838/44059/16348 24849/44077/16348 24850/44079/16349 24841/44064/16350 +f 24841/44064/16351 24850/44079/16352 24851/44080/16353 24852/44081/16351 +f 24839/44061/16354 24841/44064/16355 24852/44081/16355 24853/44082/16355 +f 24840/44063/16356 24839/44061/16357 24853/44082/16358 24854/44083/16356 +f 24855/44084/16359 24840/44063/16360 24854/44083/16360 24856/44085/16361 +f 24857/44088/16362 24836/44055/16363 24840/44063/16363 24855/44084/16364 +f 24844/44068/16365 24833/44051/16366 24836/44056/16366 24857/44086/16366 +f 24858/44089/16367 24859/44093/16368 24860/44097/16369 24861/44101/16369 +f 24859/44094/16370 24862/44105/16371 24863/44110/16370 24860/44098/16370 +f 24861/44102/16372 24860/44099/16373 24864/44113/16372 24865/44114/16372 +f 24860/44100/16374 24863/44111/16374 24866/44116/16374 24864/44112/16375 +f 24867/44120/16376 24868/44122/16377 24858/44090/16377 24869/44123/16376 +f 24868/44121/16378 24870/44128/16379 24859/44095/16378 24858/44091/16380 +f 24870/44127/16381 24871/44129/16381 24862/44106/16382 24859/44096/16383 +f 24872/44134/16384 24873/44139/16384 24874/44144/16384 24875/44147/16385 +f 24862/44107/16386 24787/43944/16386 24786/43943/16386 24863/44111/16387 +f 24863/44111/16388 24786/43943/16389 24784/43940/16390 24866/44116/16389 +f 24866/44116/16391 24784/43940/16391 24785/43942/16391 24801/43969/16391 +f 24864/44113/16392 24866/44117/16392 24801/43970/16392 24800/43968/16392 +f 24865/44114/16393 24864/44113/16394 24800/43968/16394 24798/43964/16395 +f 24876/44150/16396 24865/44115/16393 24798/43965/16395 24797/43962/16397 +f 24877/44152/16398 24861/44103/16399 24865/44115/16399 24876/44150/16398 +f 24869/44124/16400 24858/44092/16401 24861/44104/16401 24877/44153/16402 +f 24878/44156/16403 24879/44158/16403 24880/44160/16403 24881/44162/16403 +f 24879/44159/16403 24882/44164/16403 24883/44165/16403 24880/44161/16403 +f 24881/44162/16403 24880/44160/16403 24884/44167/16403 24885/44168/16403 +f 24880/44161/16403 24883/44165/16403 24886/44170/16403 24884/44166/16403 +f 24831/44045/16324 24829/44040/16322 24878/44157/16403 24887/44171/16403 +f 24829/44041/16322 24828/44036/16320 24879/44158/16403 24878/44156/16403 +f 24828/44037/16320 24827/44034/16318 24882/44164/16403 24879/44159/16403 +f 24827/44034/16318 24826/44031/16403 24888/44172/16403 24882/44164/16403 +f 24882/44164/16403 24888/44172/16403 24889/44174/16403 24883/44165/16403 +f 24883/44165/16403 24889/44174/16403 24890/44176/16403 24886/44170/16403 +f 24886/44170/16403 24890/44176/16403 24891/44178/16403 24892/44180/16404 +f 24884/44166/16403 24886/44170/16403 24892/44180/16404 24893/44182/16405 +f 24885/44168/16403 24884/44167/16403 24893/44183/16405 24894/44185/16406 +f 24895/44189/16403 24885/44169/16403 24894/44186/16406 24896/44192/16407 +f 24897/44193/16403 24881/44163/16403 24885/44169/16403 24895/44189/16403 +f 24887/44171/16403 24878/44157/16403 24881/44163/16403 24897/44193/16403 +f 24898/44194/16408 24899/44196/16409 24900/44197/16410 24901/44200/16408 +f 24899/44196/16411 24902/44204/16412 24903/44206/16413 24900/44197/16414 +f 24901/44201/16415 24900/44198/16415 24904/44210/16415 24905/44214/16415 +f 24900/44199/16416 24903/44207/16416 24906/44218/16416 24904/44211/16417 +f 24896/44190/16407 24894/44187/16406 24898/44195/16418 24907/44222/16419 +f 24894/44188/16406 24893/44184/16405 24899/44196/16420 24898/44194/16418 +f 24893/44184/16405 24892/44181/16404 24902/44204/16421 24899/44196/16420 +f 24892/44181/16404 24891/44179/16422 24908/44225/16423 24902/44204/16421 +f 24902/44205/16424 24908/44226/16425 24909/44228/16424 24903/44208/16425 +f 24903/44209/16426 24909/44227/16427 24910/44230/16427 24906/44219/16426 +f 24906/44220/16428 24910/44229/16429 24911/44231/16430 24912/44232/16430 +f 24904/44212/16431 24906/44221/16432 24912/44233/16431 24913/44234/16432 +f 24905/44215/16433 24904/44213/16433 24913/44235/16433 24914/44236/16434 +f 24915/44238/16435 24905/44216/16436 24914/44237/16437 24916/44243/16438 +f 24917/44244/16439 24901/44202/16440 24905/44217/16441 24915/44239/16439 +f 24907/44222/16442 24898/44195/16408 24901/44203/16408 24917/44245/16443 +f 24918/44248/16444 24919/44249/16445 24920/44250/16446 24921/44253/16445 +f 24919/44249/16447 24922/44254/16448 24923/44255/16447 24920/44250/16449 +f 24921/44252/16450 24920/44251/16450 24924/44257/16450 24925/44258/16450 +f 24920/44251/16451 24923/44256/16451 24926/44259/16451 24924/44257/16451 +f 24927/44261/16452 24928/44262/16453 24918/44248/16454 24929/44264/16455 +f 24928/44262/16453 24930/44265/16456 24919/44249/16457 24918/44248/16454 +f 24930/44265/16456 24931/44267/16458 24922/44254/16459 24919/44249/16457 +f 24931/44267/16458 24932/44269/16460 24933/44273/16461 24922/44254/16459 +f 24922/44254/16462 24933/44273/16462 24934/44276/16462 24923/44255/16462 +f 24923/44256/16463 24934/44274/16464 24935/44277/16463 24926/44259/16463 +f 24926/44259/16465 24935/44277/16466 24936/44280/16465 24937/44281/16467 +f 24924/44257/16468 24926/44259/16469 24937/44281/16469 24938/44282/16469 +f 24925/44258/16470 24924/44257/16471 24938/44282/16472 24939/44283/16472 +f 24940/44284/16473 24925/44258/16474 24939/44283/16475 24941/44287/16476 +f 24942/44288/16477 24921/44252/16478 24925/44258/16477 24940/44284/16477 +f 24929/44264/16479 24918/44248/16480 24921/44253/16481 24942/44289/16480 +f 24943/44292/16482 24944/44294/16483 24945/44296/16483 24946/44298/16482 +f 24944/44293/16484 24947/44299/16485 24948/44304/16485 24945/44295/16484 +f 24949/44310/16482 24950/44312/16483 24951/44314/16483 24952/44317/16482 +f 24950/44311/16484 24953/44320/16485 24954/44322/16484 24951/44313/16485 +f 24955/44327/16486 24956/44329/16487 24957/44330/16487 24958/44333/16486 +f 24956/44328/16482 24959/44335/16483 24960/44337/16483 24957/44331/16482 +f 24959/44334/16484 24961/44339/16485 24962/44343/16485 24960/44336/16484 +f 24963/44348/16488 24964/44356/16489 24965/44364/16490 24966/44367/16491 +f 24967/44370/16492 24968/44378/16493 24969/44386/16492 24970/44389/16492 +f 24953/44318/16494 24775/43920/16494 24971/44392/16494 24954/44323/16494 +f 24972/44394/16494 24973/44397/16494 24822/44024/16494 24821/44022/16494 +f 24974/44400/16495 24972/44395/16496 24821/44023/16495 24820/44020/16495 +f 24975/44402/16482 24974/44399/16483 24820/44021/16483 24818/44016/16483 +f 24976/44405/16486 24975/44401/16487 24818/44017/16487 24817/44013/16486 +f 24977/44408/16486 24949/44309/16487 24952/44316/16487 24978/44410/16486 +f 24979/44413/16486 24943/44291/16487 24946/44297/16487 24980/44416/16486 +f 24981/44418/16497 24982/44419/16497 24983/44421/16497 24984/44424/16497 +f 24982/44419/16498 24985/44426/16499 24986/44427/16498 24983/44421/16498 +f 24984/44423/16500 24983/44422/16501 24987/44429/16502 24988/44432/16500 +f 24983/44422/16501 24986/44428/16503 24989/44433/16504 24987/44429/16502 +f 24891/44179/16422 24890/44177/16505 24981/44417/16505 24908/44225/16423 +f 24890/44177/16505 24889/44175/16506 24982/44420/16506 24981/44417/16505 +f 24889/44175/16506 24888/44173/16507 24985/44425/16508 24982/44420/16506 +f 24888/44173/16507 24826/44032/16317 24825/44029/16317 24985/44425/16508 +f 24985/44426/16509 24825/44030/16510 24824/44027/16510 24986/44427/16509 +f 24986/44428/16503 24824/44028/16312 24823/44025/16311 24989/44433/16504 +f 24989/44434/16511 24823/44026/16512 24822/44024/16511 24990/44435/16511 +f 24987/44430/16513 24989/44434/16513 24990/44435/16514 24991/44436/16514 +f 24988/44431/16515 24987/44430/16515 24991/44436/16515 24992/44437/16515 +f 24910/44229/16516 24988/44431/16517 24992/44437/16517 24911/44231/16517 +f 24909/44227/16427 24984/44423/16500 24988/44432/16500 24910/44230/16427 +f 24908/44226/16518 24981/44418/16519 24984/44424/16519 24909/44228/16518 +f 24993/44438/16520 24994/44442/16520 24995/44445/16521 24996/44449/16520 +f 24994/44443/16522 24997/44453/16523 24998/44456/16523 24995/44446/16523 +f 24996/44450/16524 24995/44447/16524 24999/44459/16525 25000/44462/16526 +f 24995/44448/16527 24998/44457/16527 25001/44464/16528 24999/44460/16527 +f 24806/43978/16529 24804/43974/16530 24993/44439/16531 25002/44467/16529 +f 24804/43975/16530 24803/43973/16532 24994/44444/16532 24993/44440/16531 +f 24803/43973/16533 24802/43971/16533 24997/44454/16533 24994/44444/16533 +f 24802/43972/16534 24780/43933/16534 24779/43931/16534 24997/44455/16534 +f 24997/44455/16535 24779/43931/16536 24778/43930/16535 24998/44458/16537 +f 24998/44458/16538 24778/43930/16539 24769/43893/16539 25001/44463/16538 +f 25003/44470/16235 24772/43904/16234 25004/44478/16235 25005/44481/16234 +f 25006/44485/16540 25007/44486/16540 25008/44492/16540 25009/44496/16540 +f 25010/44499/16541 25006/44484/16542 25009/44497/16541 25011/44500/16542 +f 25012/44503/16543 25010/44498/16544 25011/44501/16544 25013/44506/16545 +f 25014/44507/16546 24996/44451/16547 25000/44461/16547 25015/44512/16546 +f 25002/44468/16548 24993/44441/16549 24996/44452/16549 25014/44508/16548 +f 25016/44514/16550 25017/44516/16551 25018/44518/16551 25019/44520/16550 +f 25017/44515/16552 25020/44522/16553 25021/44525/16553 25018/44517/16552 +f 25022/44531/16550 25023/44533/16551 25024/44534/16551 25025/44537/16550 +f 25023/44532/16552 25026/44539/16553 25027/44543/16553 25024/44535/16552 +f 25028/44549/16554 25029/44551/16555 25030/44552/16555 25031/44555/16554 +f 25029/44550/16550 25032/44557/16551 25033/44560/16551 25030/44553/16550 +f 25032/44556/16556 25034/44563/16557 25035/44564/16556 25033/44558/16558 +f 25034/44561/16559 25036/44568/16560 25037/44570/16561 25035/44565/16562 +f 24764/43864/16493 24772/43905/16493 25038/44572/16492 25039/44575/16492 +f 25040/44578/16237 25041/44586/16239 25042/44594/16563 25043/44597/16239 +f 24963/44349/16564 25003/44471/16565 25044/44600/16564 25045/44603/16565 +f 25046/44607/16552 24873/44141/16553 24872/44136/16552 25047/44608/16553 +f 25048/44611/16550 25046/44606/16551 25047/44609/16551 25049/44613/16551 +f 25050/44616/16554 25048/44610/16555 25049/44612/16555 25051/44617/16554 +f 25052/44622/16554 25022/44530/16555 25025/44536/16555 25053/44624/16554 +f 25054/44626/16554 25016/44513/16555 25019/44519/16555 25055/44628/16554 +f 25056/44629/16566 25057/44630/16566 25058/44631/16566 25059/44632/16566 +f 25057/44630/16567 25060/44633/16567 25061/44634/16567 25058/44631/16567 +f 25062/44635/16566 25063/44636/16566 25064/44637/16566 25065/44638/16566 +f 25063/44636/16567 25066/44639/16567 25067/44640/16567 25064/44637/16567 +f 25068/44642/16568 25069/44643/16569 25070/44644/16569 25071/44645/16568 +f 25069/44643/16566 25072/44647/16566 25073/44648/16566 25070/44644/16566 +f 25072/44647/16567 25074/44649/16567 25075/44650/16567 25073/44648/16567 +f 25074/44649/16570 25076/44652/16571 25077/44654/16571 25075/44650/16570 +f 25060/44633/16570 25078/44656/16571 25079/44658/16571 25061/44634/16570 +f 25066/44639/16570 25080/44660/16571 25081/44662/16571 25067/44640/16570 +f 25082/44663/16570 25083/44665/16571 25084/44667/16571 25085/44668/16570 +f 25086/44669/16567 25082/44663/16567 25085/44668/16567 25087/44670/16567 +f 25088/44671/16566 25086/44669/16566 25087/44670/16566 25089/44672/16566 +f 25090/44674/16568 25088/44671/16569 25089/44672/16569 25091/44676/16569 +f 25092/44678/16568 25062/44635/16569 25065/44638/16569 25093/44680/16568 +f 25094/44682/16568 25056/44629/16569 25059/44632/16569 25095/44684/16568 +f 25026/44538/16572 25096/44685/16573 25097/44693/16574 25098/44696/16575 +f 25099/44699/16576 25100/44704/16577 25101/44709/16578 25102/44712/16579 +f 25103/44715/16580 24967/44371/16581 25104/44723/16582 25105/44726/16581 +f 24961/44338/16583 25008/44491/16583 25106/44729/16583 25107/44732/16583 +f 25036/44568/16560 25108/44735/16584 25109/44737/16584 25037/44570/16561 +f 25108/44735/16584 25110/44739/16585 25111/44741/16586 25109/44737/16584 +f 25110/44739/16585 25112/44743/16587 25113/44745/16588 25111/44741/16586 +f 25112/44743/16587 24973/44398/16589 24971/44393/16590 25113/44745/16588 +f 24964/44357/16591 24774/43915/16591 24777/43928/16592 25114/44747/16591 +f 25115/44750/16593 25116/44758/16594 25117/44766/16593 25118/44769/16593 +f 25116/44759/16595 25119/44772/16596 25120/44780/16597 25117/44767/16598 +f 24964/44358/16599 24963/44350/16600 25121/44783/16599 25122/44786/16600 +f 25123/44789/16601 24963/44351/16602 25045/44604/16601 25124/44794/16601 +f 24755/43842/16603 24787/43945/16604 25125/44797/16603 25126/44800/16604 +f 24967/44372/16581 25040/44579/16582 25127/44803/16581 25128/44806/16582 +f 24774/43916/16601 24964/44359/16602 25122/44787/16602 25129/44809/16601 +f 25130/44813/16605 25131/44814/16606 25132/44815/16606 25133/44817/16605 +f 25131/44814/16607 25134/44818/16607 25135/44819/16607 25132/44815/16607 +f 25136/44821/16605 25137/44822/16606 25138/44823/16606 25139/44825/16605 +f 25137/44822/16607 25140/44826/16607 25141/44827/16607 25138/44823/16607 +f 25076/44651/16608 25142/44829/16609 25143/44830/16609 25077/44653/16608 +f 25142/44828/16605 25144/44832/16606 25145/44833/16606 25143/44831/16605 +f 25144/44832/16607 25146/44834/16607 25147/44835/16607 25145/44833/16607 +f 25146/44834/16610 25028/44548/16554 25031/44554/16554 25147/44835/16610 +f 25134/44818/16610 25054/44625/16554 25055/44627/16554 25135/44819/16610 +f 25140/44826/16610 25052/44621/16554 25053/44623/16554 25141/44827/16610 +f 25148/44836/16610 25050/44615/16554 25051/44618/16554 25149/44837/16610 +f 25150/44839/16607 25148/44836/16607 25149/44837/16607 25151/44840/16607 +f 25152/44843/16605 25150/44839/16606 25151/44840/16606 25153/44844/16606 +f 25083/44664/16608 25152/44842/16609 25153/44846/16611 25084/44666/16609 +f 25080/44659/16608 25136/44820/16609 25139/44824/16609 25081/44661/16608 +f 25078/44655/16608 25130/44812/16609 25133/44816/16609 25079/44657/16608 +f 25154/44847/16612 25155/44849/16613 25156/44850/16613 25157/44852/16614 +f 25155/44849/16613 25158/44856/16615 25159/44857/16615 25156/44850/16613 +f 25157/44853/16616 25156/44851/16616 25160/44859/16616 25161/44861/16617 +f 25156/44851/16618 25159/44858/16619 25162/44862/16619 25160/44859/16619 +f 24856/44085/16620 25163/44864/16621 25154/44848/16621 24855/44084/16622 +f 25163/44863/16621 25164/44865/16623 25155/44849/16623 25154/44847/16621 +f 25164/44865/16623 25165/44866/16624 25158/44856/16625 25155/44849/16623 +f 25165/44866/16624 24806/43979/16529 25002/44469/16529 25158/44856/16625 +f 25158/44856/16615 25002/44469/16548 25014/44509/16548 25159/44857/16615 +f 25159/44858/16626 25014/44510/16546 25015/44511/16546 25162/44862/16627 +f 25166/44867/16628 25012/44502/16543 25013/44504/16545 25167/44869/16628 +f 25168/44870/16629 25166/44867/16630 25167/44869/16629 25169/44871/16630 +f 25170/44873/16631 25168/44870/16632 25169/44871/16632 25171/44874/16632 +f 24842/44065/16633 25170/44872/16633 25171/44875/16633 25091/44675/16634 +f 24857/44087/16635 25157/44854/16636 25161/44860/16636 24844/44069/16636 +f 24855/44084/16637 25154/44848/16638 25157/44855/16639 24857/44088/16639 +f 25172/44877/16640 25173/44878/16641 25174/44879/16641 25175/44881/16640 +f 25173/44878/16642 25176/44884/16642 25177/44887/16642 25174/44879/16642 +f 25178/44889/16640 25179/44890/16641 25180/44891/16641 25181/44893/16640 +f 25179/44890/16642 25182/44896/16642 25183/44897/16642 25180/44891/16642 +f 25090/44673/16643 25184/44900/16644 25185/44901/16644 25093/44679/16643 +f 25184/44899/16640 25186/44903/16641 25187/44904/16641 25185/44902/16640 +f 25186/44903/16642 25188/44906/16642 25189/44908/16642 25187/44904/16642 +f 25188/44905/16645 24955/44326/16486 24958/44332/16486 25189/44907/16645 +f 25176/44882/16645 24979/44411/16486 24980/44414/16486 25177/44885/16645 +f 25182/44894/16645 24977/44406/16486 24978/44409/16486 25183/44898/16645 +f 25190/44909/16645 24976/44403/16486 24817/44014/16486 25191/44912/16645 +f 25192/44914/16642 25190/44910/16642 25191/44913/16642 25193/44915/16642 +f 25194/44917/16640 25192/44914/16641 25193/44915/16641 25195/44919/16641 +f 25068/44641/16643 25194/44916/16644 25195/44918/16646 24941/44286/16644 +f 25094/44681/16643 25178/44888/16644 25181/44892/16644 25071/44646/16643 +f 25092/44677/16643 25172/44876/16644 25175/44880/16644 25095/44683/16643 +f 25196/44921/16647 25197/44923/16648 25198/44924/16649 25199/44926/16650 +f 25197/44923/16648 25200/44930/16651 25201/44932/16651 25198/44924/16649 +f 25199/44927/16652 25198/44925/16652 25202/44935/16653 25203/44937/16654 +f 25198/44925/16655 25201/44934/16656 25204/44940/16656 25202/44935/16657 +f 24932/44270/16460 25205/44942/16658 25196/44920/16659 24933/44272/16461 +f 25205/44943/16658 25206/44946/16660 25197/44923/16661 25196/44921/16659 +f 25206/44946/16660 25207/44948/16662 25200/44930/16418 25197/44923/16661 +f 25207/44948/16662 24896/44191/16407 24907/44223/16419 25200/44930/16418 +f 25200/44931/16651 24907/44224/16442 24917/44246/16443 25201/44933/16651 +f 25201/44934/16656 24917/44247/16439 24915/44240/16439 25204/44940/16656 +f 25204/44941/16663 24915/44241/16435 24916/44242/16438 25208/44950/16663 +f 25202/44936/16664 25204/44941/16664 25208/44950/16664 25209/44951/16665 +f 25203/44938/16666 25202/44936/16667 25209/44951/16667 25210/44952/16666 +f 24935/44278/16668 25203/44939/16669 25210/44953/16670 24936/44279/16669 +f 24934/44275/16671 25199/44928/16672 25203/44939/16672 24935/44278/16671 +f 24933/44273/16673 25196/44922/16647 25199/44929/16650 24934/44276/16674 +f 25211/44954/16403 25212/44956/16403 25213/44957/16403 25214/44958/16403 +f 25212/44956/16403 25215/44960/16403 25216/44961/16403 25213/44957/16403 +f 25214/44958/16403 25213/44957/16403 25217/44962/16403 25218/44963/16403 +f 25213/44957/16403 25216/44961/16403 25219/44965/16403 25217/44962/16403 +f 24927/44260/16452 25220/44966/16675 25211/44955/16403 24928/44263/16453 +f 25220/44967/16675 25221/44970/16676 25212/44956/16403 25211/44954/16403 +f 25221/44970/16676 25222/44972/16677 25215/44960/16403 25212/44956/16403 +f 25222/44972/16677 24831/44045/16324 24887/44171/16403 25215/44960/16403 +f 25215/44960/16403 24887/44171/16403 24897/44193/16403 25216/44961/16403 +f 25216/44961/16403 24897/44193/16403 24895/44189/16403 25219/44965/16403 +f 25219/44965/16403 24895/44189/16403 24896/44192/16407 25207/44949/16662 +f 25217/44962/16403 25219/44965/16403 25207/44949/16662 25206/44947/16660 +f 25218/44963/16403 25217/44962/16403 25206/44947/16660 25205/44944/16658 +f 24931/44268/16458 25218/44964/16403 25205/44945/16658 24932/44271/16460 +f 24930/44266/16456 25214/44959/16403 25218/44964/16403 24931/44268/16458 +f 24928/44263/16453 25211/44955/16403 25214/44959/16403 24930/44266/16456 +f 25223/44975/16678 25224/44977/16679 25225/44978/16680 25226/44980/16681 +f 25224/44977/16682 25227/44985/16683 25228/44986/16683 25225/44978/16682 +f 25226/44981/16684 25225/44979/16685 25229/44988/16685 25230/44989/16684 +f 25225/44979/16685 25228/44987/16686 25231/44991/16687 25229/44988/16685 +f 24847/44072/16688 25232/44993/16688 25223/44976/16688 24848/44075/16688 +f 25232/44992/16689 25233/44994/16689 25224/44977/16690 25223/44975/16689 +f 25233/44994/16691 25234/44996/16691 25227/44985/16691 25224/44977/16691 +f 25234/44995/16692 24867/44118/16376 24869/44125/16376 25227/44984/16692 +f 25227/44985/16693 24869/44126/16400 24877/44154/16402 25228/44986/16693 +f 25228/44987/16686 24877/44155/16398 24876/44151/16398 25231/44991/16687 +f 25231/44991/16694 24876/44151/16396 24797/43963/16397 25235/44997/16695 +f 25229/44988/16696 25231/44991/16694 25235/44997/16695 25236/44998/16696 +f 25230/44989/16697 25229/44988/16696 25236/44998/16696 25237/45000/16697 +f 24850/44079/16698 25230/44990/16697 25237/44999/16697 24851/44080/16698 +f 24849/44077/16699 25226/44982/16699 25230/44990/16700 24850/44079/16701 +f 24848/44075/16702 25223/44976/16703 25226/44983/16702 24849/44078/16703 +f 25238/45001/16704 25239/45003/16705 25240/45004/16706 25241/45006/16706 +f 25239/45003/16707 25242/45010/16708 25243/45011/16709 25240/45004/16710 +f 25241/45007/16711 25240/45005/16712 25244/45013/16713 25245/45015/16714 +f 25240/45005/16712 25243/45012/16715 25246/45018/16715 25244/45013/16713 +f 24941/44286/16716 25195/44918/16717 25238/45002/16716 24940/44285/16718 +f 25195/44919/16719 25193/44915/16720 25239/45003/16721 25238/45001/16719 +f 25193/44915/16722 25191/44913/16723 25242/45010/16723 25239/45003/16723 +f 25191/44913/16724 24817/44015/16299 24819/44019/16301 25242/45010/16724 +f 25242/45010/16708 24819/44019/16326 24832/44049/16326 25243/45011/16709 +f 25243/45012/16715 24832/44050/16325 24830/44043/16325 25246/45018/16715 +f 25246/45019/16321 24830/44044/16323 24831/44046/16324 25222/44973/16677 +f 25244/45014/16725 25246/45020/16321 25222/44974/16677 25221/44971/16676 +f 25245/45016/16726 25244/45014/16725 25221/44971/16676 25220/44968/16675 +f 24929/44264/16455 25245/45017/16726 25220/44969/16675 24927/44261/16452 +f 24942/44289/16727 25241/45008/16711 25245/45017/16714 24929/44264/16728 +f 24940/44285/16729 25238/45002/16730 25241/45009/16730 24942/44290/16729 +f 25247/45021/16731 25248/45023/16732 25249/45024/16733 25250/45026/16734 +f 25248/45023/16732 25251/45029/16735 25252/45030/16735 25249/45024/16733 +f 25250/45027/16736 25249/45025/16737 25253/45032/16737 25254/45033/16738 +f 25249/45025/16737 25252/45031/16739 25255/45035/16739 25253/45032/16737 +f 24851/44080/16740 25237/44999/16741 25247/45022/16741 24852/44081/16742 +f 25237/45000/16741 25236/44998/16743 25248/45023/16744 25247/45021/16741 +f 25236/44998/16743 25235/44997/16745 25251/45029/16746 25248/45023/16744 +f 25235/44997/16745 24797/43963/16264 24799/43967/16264 25251/45029/16746 +f 25251/45029/16735 24799/43967/16284 24807/43982/16285 25252/45030/16735 +f 25252/45031/16739 24807/43983/16283 24805/43977/16283 25255/45035/16739 +f 25255/45035/16747 24805/43977/16282 24806/43979/16282 25165/44866/16748 +f 25253/45032/16749 25255/45035/16747 25165/44866/16748 25164/44865/16749 +f 25254/45033/16750 25253/45032/16749 25164/44865/16749 25163/44863/16750 +f 24854/44083/16751 25254/45034/16750 25163/44864/16750 24856/44085/16752 +f 24853/44082/16753 25250/45028/16736 25254/45034/16738 24854/44083/16754 +f 24852/44081/16755 25247/45022/16731 25250/45028/16734 24853/44082/16756 +f 25095/44683/16643 25175/44880/16644 25178/44888/16644 25094/44681/16643 +f 25177/44886/16645 24980/44415/16486 24977/44407/16486 25182/44895/16645 +f 25174/44879/16642 25177/44887/16642 25182/44896/16642 25179/44890/16642 +f 25175/44881/16640 25174/44879/16641 25179/44890/16641 25178/44889/16640 +f 25077/44653/16608 25143/44830/16609 25130/44812/16609 25078/44655/16608 +f 25147/44835/16610 25031/44554/16554 25054/44625/16554 25134/44818/16610 +f 25145/44833/16607 25147/44835/16607 25134/44818/16607 25131/44814/16607 +f 25143/44831/16605 25145/44833/16606 25131/44814/16606 25130/44813/16605 +f 25037/44571/16757 25109/44738/16757 25100/44705/16757 25099/44700/16757 +f 25113/44746/16758 24971/44392/16758 24775/43920/16758 24774/43917/16758 +f 25111/44742/16759 25113/44746/16759 24774/43917/16759 25123/44790/16759 +f 25109/44738/16760 25111/44742/16760 25123/44790/16760 25100/44705/16760 +f 25071/44645/16568 25070/44644/16569 25056/44629/16569 25094/44682/16568 +f 25075/44650/16570 25077/44654/16571 25078/44656/16571 25060/44633/16570 +f 25073/44648/16567 25075/44650/16567 25060/44633/16567 25057/44630/16567 +f 25070/44644/16566 25073/44648/16566 25057/44630/16566 25056/44629/16566 +f 25031/44555/16554 25030/44552/16555 25016/44513/16555 25054/44626/16554 +f 25035/44566/16761 25037/44571/16761 25099/44700/16761 25020/44521/16761 +f 25033/44559/16552 25035/44567/16552 25020/44522/16553 25017/44515/16552 +f 25030/44553/16550 25033/44560/16551 25017/44516/16551 25016/44514/16550 +f 24980/44416/16486 24946/44297/16487 24949/44309/16487 24977/44408/16486 +f 24775/43921/16762 24953/44319/16763 25256/45036/16764 25257/45039/16764 +f 24945/44295/16484 24948/44304/16485 24953/44320/16485 24950/44311/16484 +f 24946/44298/16482 24945/44296/16483 24950/44312/16483 24949/44310/16482 +f 25071/44646/16643 25181/44892/16644 25194/44916/16644 25068/44641/16643 +f 25181/44893/16640 25180/44891/16641 25192/44914/16641 25194/44917/16640 +f 25180/44891/16642 25183/44897/16642 25190/44910/16642 25192/44914/16642 +f 25183/44898/16645 24978/44409/16486 24976/44404/16486 25190/44911/16645 +f 25208/44950/16610 24916/44242/16554 25028/44548/16554 25146/44834/16610 +f 25209/44951/16607 25208/44950/16607 25146/44834/16607 25144/44832/16607 +f 25210/44952/16606 25209/44951/16605 25144/44832/16606 25142/44828/16605 +f 24936/44279/16609 25210/44953/16608 25142/44829/16609 25076/44651/16608 +f 24990/44435/16758 24822/44024/16758 24973/44397/16758 25112/44744/16758 +f 24991/44436/16759 24990/44435/16759 25112/44744/16759 25110/44740/16759 +f 24992/44437/16760 24991/44436/16760 25110/44740/16760 25108/44736/16760 +f 24911/44231/16757 24992/44437/16757 25108/44736/16757 25036/44569/16757 +f 24937/44281/16570 24936/44280/16570 25076/44652/16571 25074/44649/16570 +f 24938/44282/16567 24937/44281/16567 25074/44649/16567 25072/44647/16567 +f 24939/44283/16566 24938/44282/16566 25072/44647/16566 25069/44643/16566 +f 24941/44287/16568 24939/44283/16569 25069/44643/16569 25068/44642/16568 +f 24912/44232/16761 24911/44231/16761 25036/44569/16761 25034/44562/16761 +f 24913/44234/16765 24912/44233/16766 25034/44563/16765 25032/44556/16765 +f 24914/44236/16550 24913/44235/16551 25032/44557/16551 25029/44550/16550 +f 24916/44243/16554 24914/44237/16555 25029/44551/16555 25028/44549/16554 +f 24978/44410/16486 24952/44316/16487 24975/44401/16487 24976/44405/16486 +f 24952/44317/16482 24951/44314/16483 24974/44399/16483 24975/44402/16482 +f 24951/44315/16767 24954/44324/16768 24972/44395/16769 24974/44400/16768 +f 24954/44325/16770 24971/44393/16590 24973/44398/16589 24972/44396/16771 +f 25093/44679/16643 25185/44901/16644 25172/44876/16644 25092/44677/16643 +f 25189/44907/16645 24958/44332/16486 24979/44412/16486 25176/44883/16645 +f 25187/44904/16642 25189/44908/16642 25176/44884/16642 25173/44878/16642 +f 25185/44902/16640 25187/44904/16641 25173/44878/16641 25172/44877/16640 +f 25079/44657/16608 25133/44816/16609 25136/44820/16609 25080/44659/16608 +f 25135/44819/16610 25055/44627/16554 25052/44621/16554 25140/44826/16610 +f 25132/44815/16607 25135/44819/16607 25140/44826/16607 25137/44822/16607 +f 25133/44817/16605 25132/44815/16606 25137/44822/16606 25136/44821/16605 +f 25040/44580/16772 24967/44373/16773 24970/44390/16772 25258/45042/16773 +f 24765/43871/16774 25259/45045/16775 25260/45053/16775 25261/45056/16775 +f 24768/43885/16776 25262/45059/16776 25263/45067/16776 25264/45070/16776 +f 25259/45046/16777 24873/44140/16777 25265/45073/16778 25260/45054/16777 +f 25095/44684/16568 25059/44632/16569 25062/44635/16569 25092/44678/16568 +f 25061/44634/16570 25079/44658/16571 25080/44660/16571 25066/44639/16570 +f 25058/44631/16567 25061/44634/16567 25066/44639/16567 25063/44636/16567 +f 25059/44632/16566 25058/44631/16566 25063/44636/16566 25062/44635/16566 +f 25055/44628/16554 25019/44519/16555 25022/44530/16555 25052/44622/16554 +f 25266/45076/16779 25267/45084/16780 25268/45092/16781 25269/45095/16782 +f 25018/44517/16552 25021/44525/16553 25026/44539/16553 25023/44532/16552 +f 25019/44520/16550 25018/44518/16551 25023/44533/16551 25022/44531/16550 +f 24958/44333/16486 24957/44330/16487 24943/44291/16487 24979/44413/16486 +f 25116/44760/16783 25115/44751/16784 25270/45098/16783 25271/45101/16784 +f 24960/44336/16484 24962/44343/16485 24947/44299/16485 24944/44293/16484 +f 24957/44331/16482 24960/44337/16483 24944/44294/16483 24943/44292/16482 +f 25167/44868/16645 25013/44505/16486 24955/44326/16486 25188/44905/16645 +f 25169/44871/16642 25167/44869/16642 25188/44906/16642 25186/44903/16642 +f 25171/44874/16641 25169/44871/16640 25186/44903/16641 25184/44899/16640 +f 25091/44675/16644 25171/44875/16643 25184/44900/16644 25090/44673/16643 +f 25081/44661/16608 25139/44824/16609 25152/44842/16609 25083/44664/16608 +f 25139/44825/16605 25138/44823/16606 25150/44839/16606 25152/44843/16605 +f 25138/44823/16607 25141/44827/16607 25148/44836/16607 25150/44839/16607 +f 25141/44827/16610 25053/44623/16554 25050/44615/16554 25148/44836/16610 +f 24948/44305/16785 24947/44300/16786 25272/45104/16786 25273/45107/16786 +f 24872/44135/16787 25274/45110/16788 25275/45118/16788 25276/45121/16788 +f 25119/44773/16601 25040/44581/16601 25258/45043/16601 25277/45124/16601 +f 25278/45127/16601 25279/45135/16601 25280/45143/16601 25281/45146/16601 +f 25093/44680/16568 25065/44638/16569 25088/44671/16569 25090/44674/16568 +f 25065/44638/16566 25064/44637/16566 25086/44669/16566 25088/44671/16566 +f 25064/44637/16567 25067/44640/16567 25082/44663/16567 25086/44669/16567 +f 25067/44640/16570 25081/44662/16571 25083/44665/16571 25082/44663/16570 +f 25053/44624/16554 25025/44536/16555 25048/44610/16555 25050/44616/16554 +f 25025/44537/16550 25024/44534/16551 25046/44606/16551 25048/44611/16550 +f 25024/44535/16552 25027/44543/16553 24873/44141/16553 25046/44607/16552 +f 25282/45149/16789 24772/43906/16790 25283/45157/16791 25284/45160/16792 +f 25259/45047/16576 25103/44716/16576 25285/45163/16578 25286/45166/16578 +f 25009/44496/16484 25008/44492/16484 24961/44339/16485 24959/44334/16484 +f 25011/44500/16482 25009/44497/16483 24959/44335/16483 24956/44328/16482 +f 25013/44506/16486 25011/44501/16487 24956/44329/16487 24955/44327/16486 +f 25149/44838/16692 25051/44619/16376 24867/44119/16376 25234/44996/16692 +f 25151/44841/16691 25149/44838/16691 25234/44996/16691 25233/44994/16691 +f 25153/44845/16689 25151/44841/16689 25233/44994/16689 25232/44992/16689 +f 25084/44666/16688 25153/44846/16688 25232/44993/16688 24847/44072/16688 +f 24844/44069/16633 25161/44860/16633 25170/44872/16633 24842/44065/16633 +f 25161/44861/16631 25160/44859/16793 25168/44870/16632 25170/44873/16631 +f 25160/44859/16629 25162/44862/16630 25166/44867/16630 25168/44870/16629 +f 25162/44862/16628 25015/44511/16545 25012/44502/16543 25166/44867/16628 +f 25015/44512/16545 25000/44461/16544 25010/44498/16544 25012/44503/16543 +f 25000/44462/16794 24999/44459/16541 25006/44484/16542 25010/44499/16541 +f 24999/44460/16540 25001/44464/16795 25007/44486/16540 25006/44485/16540 +f 24963/44352/16492 25123/44791/16493 25287/45169/16492 25121/44784/16492 +f 25288/45172/16796 25289/45180/16797 25290/45188/16796 25291/45191/16798 +f 25047/44608/16381 24872/44136/16382 24871/44129/16381 24870/44127/16381 +f 25049/44613/16379 25047/44609/16378 24870/44128/16379 24868/44121/16378 +f 25051/44620/16376 25049/44614/16377 24868/44122/16377 24867/44120/16376 +f 25085/44668/16346 25084/44667/16346 24847/44073/16346 24846/44071/16346 +f 25087/44670/16343 25085/44668/16343 24846/44071/16344 24845/44070/16343 +f 25089/44672/16341 25087/44670/16341 24845/44070/16341 24843/44067/16340 +f 25091/44676/16338 25089/44672/16799 24843/44067/16338 24842/44066/16338 +f 25279/45136/16800 25288/45173/16801 25291/45192/16800 25280/45144/16801 +f 25103/44717/16802 25259/45048/16802 25292/45194/16802 25293/45197/16803 +f 25294/45200/16804 25115/44752/16805 25295/45207/16805 25296/45210/16804 +f 25294/45201/16806 24948/44306/16806 25273/45108/16806 25297/45213/16806 +f 25298/45216/16494 25299/45219/16494 25257/45040/16494 25256/45037/16494 +f 24948/44307/16807 25294/45202/16808 25299/45220/16808 25298/45217/16808 +f 24953/44321/16786 24948/44308/16809 25298/45218/16786 25256/45038/16786 +f 25294/45203/16784 24775/43922/16784 25257/45041/16784 25299/45221/16783 +f 25300/45222/16810 25301/45225/16810 25302/45228/16810 25303/45231/16810 +f 25304/45234/16811 24771/43901/16812 24770/43898/16812 25305/45237/16811 +f 25306/45240/16813 25307/45243/16813 25308/45246/16813 25309/45249/16813 +f 25310/45252/16761 25311/45255/16761 25312/45258/16761 25313/45261/16761 +f 25098/44697/16761 25097/44694/16761 25314/45264/16761 25315/45267/16761 +f 24874/44145/16761 25316/45270/16761 25317/45273/16761 24875/44148/16761 +f 25318/45276/16760 25124/44795/16760 25045/44605/16760 25044/44601/16760 +f 25038/44573/16760 25319/45279/16760 25320/45282/16760 25039/44576/16760 +f 24777/43929/16758 24776/43925/16758 25321/45285/16758 25114/44748/16758 +f 25322/45288/16758 25118/44770/16758 25117/44768/16758 25120/44781/16758 +f 25043/44598/16758 25042/44595/16758 25323/45291/16758 25324/45294/16758 +f 25105/44727/16760 25104/44724/16760 25325/45297/16760 25326/45300/16760 +f 25282/45150/16601 24968/44379/16601 25320/45283/16601 25319/45280/16601 +f 24755/43843/16814 25288/45174/16815 25300/45223/16814 25303/45232/16814 +f 25327/45303/16816 25021/44526/16817 25313/45262/16816 25312/45259/16816 +f 25262/45060/16818 25267/45085/16818 25324/45295/16819 25323/45292/16819 +f 25119/44774/16591 25328/45311/16591 25322/45289/16591 25120/44782/16592 +f 25329/45319/16820 24787/43946/16820 25308/45247/16821 25307/45244/16821 +f 24765/43872/16777 25027/44544/16777 25315/45268/16822 25314/45265/16778 +f 25279/45137/16601 24756/43847/16602 25302/45229/16601 25301/45226/16601 +f 25021/44527/16823 25020/44523/16384 25310/45253/16384 25313/45263/16384 +f 24756/43848/16800 24755/43844/16800 25303/45233/16800 25302/45230/16800 +f 25266/45077/16824 24768/43886/16824 24771/43902/16824 25304/45235/16824 +f 25100/44706/16825 25123/44792/16826 25124/44796/16825 25318/45277/16826 +f 25328/45312/16827 25115/44753/16828 25118/44771/16827 25322/45290/16827 +f 24968/44380/16792 24764/43865/16792 25039/44577/16792 25320/45284/16792 +f 24759/43854/16829 25266/45078/16830 25304/45236/16831 25305/45238/16832 +f 25278/45128/16773 25289/45181/16772 25326/45301/16773 25325/45298/16772 +f 24769/43894/16833 24759/43855/16834 25305/45239/16833 24770/43899/16834 +f 25041/44587/16594 25262/45061/16593 25323/45293/16593 25042/44596/16594 +f 25288/45175/16835 25279/45138/16836 25301/45227/16835 25300/45224/16836 +f 24772/43907/16837 25282/45151/16838 25319/45281/16837 25038/44574/16837 +f 25099/44701/16774 25327/45304/16775 25312/45260/16775 25311/45256/16774 +f 24862/44108/16839 24871/44130/16840 25306/45241/16839 25309/45250/16839 +f 25267/45086/16592 25040/44582/16591 25043/44599/16592 25324/45296/16591 +f 24787/43947/16841 24862/44109/16841 25309/45251/16842 25308/45248/16841 +f 25096/44686/16843 24765/43873/16844 25314/45266/16843 25097/44695/16843 +f 25274/45111/16777 24872/44137/16777 24875/44149/16777 25317/45274/16777 +f 24967/44374/16601 25278/45129/16601 25325/45299/16601 25104/44725/16601 +f 24873/44142/16572 25259/45049/16572 25316/45271/16574 24874/44146/16845 +f 25259/45050/16775 25274/45112/16774 25317/45275/16775 25316/45272/16775 +f 25027/44545/16384 25026/44540/16384 25098/44698/16384 25315/45269/16384 +f 24775/43923/16593 25294/45204/16594 25321/45286/16594 24776/43926/16593 +f 24871/44131/16788 25329/45320/16846 25307/45245/16788 25306/45242/16847 +f 25289/45182/16493 25103/44718/16492 25105/44728/16493 25326/45302/16492 +f 25003/44472/16492 25100/44707/16493 25318/45278/16493 25044/44602/16492 +f 25020/44524/16848 25099/44702/16849 25311/45257/16849 25310/45254/16849 +f 25294/45206/16818 24964/44360/16850 25114/44749/16819 25321/45287/16851 +f 25330/45327/16852 25331/45330/16853 25126/44801/16853 25125/44798/16852 +f 25332/45333/16854 25333/45336/16854 25334/45339/16854 25335/45342/16854 +f 25287/45170/16759 25129/44810/16759 25122/44788/16759 25121/44785/16759 +f 25336/45345/16759 25337/45348/16759 25338/45351/16759 25339/45354/16759 +f 25128/44807/16759 25127/44804/16759 25340/45357/16759 25341/45360/16759 +f 25286/45167/16757 25285/45164/16757 25342/45363/16757 25343/45366/16757 +f 25344/45369/16757 24773/43912/16757 24767/43883/16757 24766/43879/16757 +f 25102/44713/16757 25101/44710/16757 25345/45372/16757 25346/45375/16757 +f 25347/45378/16494 25271/45102/16494 25270/45099/16494 25348/45381/16494 +f 25106/44730/16855 25349/45384/16494 25350/45387/16494 25107/44733/16494 +f 25351/45390/16856 25352/45393/16857 25353/45396/16857 25354/45399/16856 +f 24769/43895/16776 24768/43887/16776 25353/45397/16776 25352/45394/16776 +f 24968/44381/16493 25282/45152/16492 25336/45346/16492 25339/45355/16492 +f 25288/45176/16858 24755/43845/16858 25126/44802/16858 25331/45331/16859 +f 25115/44754/16806 24947/44301/16806 25348/45382/16806 25270/45100/16806 +f 25003/44473/16860 25327/45305/16861 25346/45376/16862 25345/45373/16802 +f 25123/44793/16863 24774/43918/16864 25129/44811/16863 25287/45171/16864 +f 25096/44687/16865 24772/43908/16865 24773/43913/16866 25344/45370/16867 +f 25328/45313/16602 25119/44775/16601 25338/45352/16601 25337/45349/16601 +f 24787/43948/16868 25329/45321/16868 25330/45328/16868 25125/44799/16868 +f 24756/43849/16492 25279/45139/16492 25332/45334/16492 25335/45343/16492 +f 25267/45087/16869 25278/45130/16773 25341/45361/16772 25340/45358/16773 +f 25008/44493/16870 25262/45062/16871 25349/45385/16871 25106/44731/16872 +f 25266/45079/16873 24759/43856/16874 25334/45340/16873 25333/45337/16874 +f 24759/43857/16800 24756/43850/16801 25335/45344/16800 25334/45341/16801 +f 25279/45140/16836 25266/45080/16836 25333/45338/16836 25332/45335/16836 +f 25282/45153/16491 25328/45314/16491 25337/45350/16491 25336/45347/16491 +f 25119/44776/16875 24968/44382/16876 25339/45356/16875 25338/45353/16875 +f 25262/45063/16877 25041/44588/16877 25350/45388/16877 25349/45386/16877 +f 25289/45183/16861 25274/45113/16802 25343/45367/16803 25342/45364/16802 +f 24947/44302/16785 24962/44344/16786 25347/45379/16786 25348/45383/16786 +f 25001/44465/16878 24769/43896/16879 25352/45395/16878 25351/45391/16880 +f 25327/45306/16881 25099/44703/16882 25102/44714/16882 25346/45377/16881 +f 25329/45322/16883 25288/45177/16884 25331/45332/16883 25330/45329/16883 +f 25007/44487/16885 25001/44466/16886 25351/45392/16887 25354/45400/16885 +f 25040/44583/16602 25267/45088/16601 25340/45359/16602 25127/44805/16601 +f 24765/43874/16882 25096/44688/16882 25344/45371/16881 24766/43880/16882 +f 24768/43888/16888 25007/44488/16889 25354/45401/16890 25353/45398/16889 +f 25278/45131/16492 24967/44375/16492 25128/44808/16492 25341/45362/16492 +f 25274/45114/16882 25259/45051/16881 25286/45168/16881 25343/45368/16882 +f 25103/44719/16235 25289/45184/16234 25342/45365/16235 25285/45165/16234 +f 25041/44589/16891 24961/44340/16892 25107/44734/16891 25350/45389/16891 +f 25100/44708/16234 25003/44474/16234 25345/45374/16235 25101/44711/16234 +f 24962/44345/16893 25116/44761/16894 25271/45103/16894 25347/45380/16894 +f 25355/45402/16494 25356/45405/16494 25357/45408/16494 25358/45411/16494 +f 25272/45105/16494 25359/45414/16494 25297/45214/16494 25273/45109/16494 +f 25360/45417/16857 25264/45071/16857 25263/45068/16857 25361/45420/16856 +f 25362/45423/16757 25005/44482/16757 25004/44479/16757 25363/45426/16757 +f 24966/44368/16759 24965/44365/16759 25364/45429/16759 25365/45432/16759 +f 25366/45435/16757 25367/45438/16757 25293/45198/16757 25292/45195/16757 +f 24969/44387/16759 25277/45125/16759 25258/45044/16759 24970/44391/16759 +f 25368/45441/16854 25369/45444/16854 25370/45447/16854 25371/45450/16854 +f 25372/45453/16852 25373/45456/16853 25374/45459/16852 25375/45462/16853 +f 25282/45154/16492 24963/44353/16492 24966/44369/16493 25365/45433/16492 +f 24764/43866/16235 25103/44720/16234 25293/45199/16234 25367/45439/16235 +f 25096/44689/16895 25327/45307/16896 25362/45424/16896 25363/45427/16895 +f 25329/45323/16868 25274/45115/16868 25372/45454/16868 25375/45463/16868 +f 24964/44361/16601 25328/45315/16601 25364/45430/16602 24965/44366/16601 +f 25008/44494/16887 25007/44489/16887 25360/45418/16885 25361/45421/16885 +f 24765/43875/16578 24764/43867/16578 25367/45440/16578 25366/45436/16578 +f 24947/44303/16893 25115/44755/16894 25359/45415/16894 25272/45106/16894 +f 25327/45308/16865 25003/44475/16865 25005/44483/16866 25362/45425/16865 +f 24772/43909/16897 25096/44690/16897 25363/45428/16897 25004/44480/16897 +f 25278/45132/16898 25267/45089/16898 25369/45445/16898 25368/45442/16898 +f 25262/45064/16888 25008/44495/16888 25361/45422/16890 25263/45069/16888 +f 25041/44590/16783 25116/44762/16784 25357/45409/16784 25356/45406/16784 +f 25266/45081/16899 25279/45141/16899 25371/45451/16899 25370/45448/16899 +f 24968/44383/16581 25119/44777/16582 25277/45126/16581 24969/44388/16582 +f 25328/45316/16900 25282/45155/16901 25365/45434/16876 25364/45431/16902 +f 25115/44756/16783 25294/45205/16784 25297/45215/16783 25359/45416/16784 +f 25274/45116/16903 25289/45185/16904 25373/45457/16904 25372/45455/16903 +f 25289/45186/16905 25288/45178/16906 25374/45460/16907 25373/45458/16908 +f 25288/45179/16604 25329/45324/16604 25375/45464/16604 25374/45461/16604 +f 25279/45142/16783 25278/45133/16784 25368/45443/16784 25371/45452/16784 +f 25267/45090/16909 25266/45082/16909 25370/45449/16909 25369/45446/16909 +f 25007/44490/16878 24768/43889/16878 25264/45072/16880 25360/45419/16878 +f 25259/45052/16895 24765/43876/16896 25366/45437/16896 25292/45196/16895 +f 24962/44346/16809 24961/44341/16786 25355/45403/16786 25358/45412/16786 +f 24961/44342/16910 25041/44591/16911 25356/45407/16911 25355/45404/16912 +f 25116/44763/16913 24962/44347/16914 25358/45413/16915 25357/45410/16913 +f 25376/45465/16758 25296/45211/16758 25295/45208/16758 25377/45468/16758 +f 25378/45471/16760 25379/45474/16760 25284/45161/16760 25283/45158/16760 +f 25380/45477/16761 25381/45480/16761 25382/45483/16761 25383/45486/16761 +f 25384/45489/16760 25385/45492/16760 25386/45495/16760 25387/45498/16760 +f 25388/45501/16758 25389/45504/16758 25390/45507/16758 25391/45510/16758 +f 25392/45513/16761 25261/45057/16761 25260/45055/16761 25265/45074/16761 +f 25276/45122/16813 25275/45119/16916 25393/45516/16916 25394/45519/16916 +f 25268/45093/16811 25395/45522/16812 25396/45525/16811 25269/45096/16812 +f 25290/45189/16810 25281/45147/16810 25280/45145/16810 25291/45193/16810 +f 25026/44541/16917 25021/44528/16918 25380/45478/16918 25383/45487/16918 +f 25329/45325/16841 24871/44132/16841 25394/45520/16841 25393/45517/16842 +f 24964/44362/16827 25294/45206/16827 25296/45212/16827 25376/45466/16827 +f 25119/44778/16239 25116/44764/16239 25389/45505/16239 25388/45502/16563 +f 24967/44376/16773 25103/44721/16772 25387/45499/16773 25386/45496/16772 +f 25040/44584/16592 25119/44779/16591 25388/45503/16591 25391/45511/16592 +f 25096/44691/16919 25026/44542/16919 25383/45488/16919 25382/45484/16919 +f 25262/45065/16233 24768/43890/16233 25396/45526/16233 25395/45523/16233 +f 25003/44476/16920 24963/44354/16921 25379/45475/16838 25378/45472/16922 +f 24772/43910/16492 25003/44477/16492 25378/45473/16493 25283/45159/16492 +f 24968/44384/16601 24967/44377/16602 25386/45497/16601 25385/45493/16601 +f 25041/44592/16819 25040/44585/16819 25391/45512/16819 25390/45508/16819 +f 24963/44355/16601 25282/45156/16601 25284/45162/16602 25379/45476/16601 +f 24871/44133/16840 24872/44138/16840 25276/45123/16839 25394/45521/16839 +f 25103/44722/16492 24764/43868/16492 25384/45490/16492 25387/45500/16492 +f 25327/45309/16774 25096/44692/16775 25382/45485/16774 25381/45481/16775 +f 25274/45117/16820 25329/45326/16923 25393/45518/16821 25275/45120/16821 +f 25328/45317/16592 24964/44363/16591 25376/45467/16592 25377/45469/16591 +f 25021/44529/16924 25327/45310/16925 25381/45482/16925 25380/45479/16925 +f 25267/45091/16824 25262/45066/16824 25395/45524/16824 25268/45094/16824 +f 25027/44546/16926 24765/43877/16845 25261/45058/16845 25392/45514/16574 +f 24768/43891/16833 25266/45083/16834 25269/45097/16833 25396/45527/16833 +f 24764/43869/16582 24968/44385/16581 25385/45494/16582 25384/45491/16581 +f 25115/44757/16595 25328/45318/16595 25377/45470/16597 25295/45209/16595 +f 24873/44143/16927 25027/44547/16918 25392/45515/16918 25265/45075/16918 +f 25116/44765/16804 25041/44593/16805 25390/45509/16805 25389/45506/16804 +f 25289/45187/16836 25278/45134/16836 25281/45148/16836 25290/45190/16836 +o book3.001 +v 5.625198 0.797756 4.607375 +v 5.625198 0.817756 4.607375 +v 5.884043 0.817756 4.631853 +v 5.884043 0.797756 4.631853 +v 5.867096 0.817756 4.811053 +v 5.867096 0.797756 4.811053 +v 5.608252 0.817756 4.786575 +v 5.608252 0.797756 4.786575 +vn 0.0941 -0.0000 -0.9956 +vn 0.9956 -0.0000 0.0941 +vn -0.0941 -0.0000 0.9956 +vn -0.9956 -0.0000 -0.0941 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vt 0.858609 0.818595 +vt 0.994261 0.775996 +vt 0.339334 0.973622 +vt 0.858609 0.012150 +vt 0.994261 0.029063 +vt 0.318014 0.985568 +vt 0.989738 0.012150 +vt 0.998646 0.004883 +vt 0.318014 0.008511 +vt 0.989738 0.818595 +vt 0.849701 0.004883 +vt 0.339334 0.010753 +vt 0.998646 0.794333 +vt 0.696836 0.992045 +vt 0.010259 0.008511 +vt 0.849701 0.794333 +vt 0.739936 0.992045 +vt 0.620667 0.010753 +vt 0.702789 0.002576 +vt 0.858286 0.029063 +vt 0.010259 0.985568 +vt 0.739936 0.002576 +vt 0.858286 0.775996 +vt 0.620667 0.973622 +s 1 +usemtl book_3.001 +f 25397/45528/16928 25398/45531/16928 25399/45534/16928 25400/45537/16928 +f 25400/45538/16929 25399/45535/16929 25401/45540/16929 25402/45543/16929 +f 25402/45544/16930 25401/45541/16930 25403/45546/16930 25404/45549/16930 +f 25404/45550/16931 25403/45547/16931 25398/45532/16931 25397/45529/16931 +f 25400/45539/16932 25402/45545/16932 25404/45551/16932 25397/45530/16932 +f 25401/45542/16933 25399/45536/16933 25398/45533/16933 25403/45548/16933 +o book2.001 +v 5.339769 0.845723 4.481871 +v 5.338682 0.863223 4.484419 +v 5.285792 0.863223 4.461859 +v 5.286879 0.845723 4.459311 +v 5.285792 0.793223 4.461859 +v 5.286879 0.810723 4.459311 +v 5.287430 0.828223 4.458019 +v 5.358376 0.863223 4.291693 +v 5.359462 0.845723 4.289145 +v 5.360013 0.828223 4.287852 +v 5.359462 0.810723 4.289145 +v 5.358375 0.793223 4.291693 +v 5.518131 0.845723 4.356823 +v 5.517044 0.863223 4.359371 +v 5.569934 0.863223 4.381931 +v 5.571021 0.845723 4.379383 +v 5.569934 0.793223 4.381931 +v 5.571021 0.810723 4.379383 +v 5.571572 0.828223 4.378090 +v 5.497351 0.863223 4.552097 +v 5.498438 0.845723 4.549550 +v 5.498989 0.828223 4.548257 +v 5.498438 0.810723 4.549550 +v 5.497351 0.793223 4.552097 +v 5.411265 0.793223 4.314252 +v 5.464155 0.793223 4.336812 +v 5.517044 0.793223 4.359371 +v 5.444461 0.793223 4.529538 +v 5.391572 0.793223 4.506979 +v 5.338682 0.793223 4.484419 +v 5.391572 0.863223 4.506979 +v 5.444461 0.863223 4.529538 +v 5.464155 0.863223 4.336812 +v 5.411265 0.863223 4.314252 +v 5.339769 0.810723 4.481871 +v 5.340320 0.828223 4.480578 +v 5.445548 0.810723 4.526990 +v 5.446099 0.828223 4.525698 +v 5.393209 0.828223 4.503138 +v 5.392658 0.810723 4.504430 +v 5.445548 0.845723 4.526990 +v 5.392658 0.845723 4.504430 +v 5.518131 0.810723 4.356823 +v 5.518682 0.828223 4.355531 +v 5.412352 0.810723 4.311704 +v 5.412903 0.828223 4.310412 +v 5.465793 0.828223 4.332972 +v 5.465241 0.810723 4.334264 +v 5.412352 0.845723 4.311704 +v 5.465241 0.845723 4.334264 +vn -0.3923 -0.0172 0.9197 +vn -0.3922 -0.0228 0.9196 +vn -0.9198 -0.0000 -0.3923 +vn 0.3923 0.0172 -0.9197 +vn 0.3922 0.0228 -0.9196 +vn 0.9198 -0.0000 0.3923 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vn -0.3923 0.0172 0.9197 +vn -0.3923 0.0119 0.9198 +vn -0.3923 -0.0119 0.9198 +vn -0.3922 0.0228 0.9196 +vn 0.3923 -0.0172 -0.9197 +vn 0.3923 -0.0119 -0.9198 +vn 0.3923 0.0119 -0.9198 +vn 0.3923 0.0119 -0.9197 +vn 0.3922 -0.0228 -0.9196 +vt 0.741556 0.255748 +vt 0.335685 0.743119 +vt 0.717479 0.255748 +vt 0.717479 0.008939 +vt 0.995512 0.830695 +vt 0.335685 0.988355 +vt 0.958268 0.830695 +vt 0.741556 0.008939 +vt 0.846535 0.830695 +vt 0.317891 0.997591 +vt 0.813788 0.008939 +vt 0.883779 0.830695 +vt 0.789710 0.008939 +vt 0.921023 0.830695 +vt 0.765633 0.008939 +vt 0.995512 0.032501 +vt 0.698677 0.988354 +vt 0.991683 0.017355 +vt 0.958268 0.032501 +vt 0.955080 0.017355 +vt 0.921023 0.032501 +vt 0.918478 0.017355 +vt 0.883779 0.032501 +vt 0.881876 0.017355 +vt 0.846535 0.032501 +vt 0.001520 0.997591 +vt 0.845273 0.017355 +vt 0.955080 0.622323 +vt 0.698677 0.252649 +vt 0.991683 0.622323 +vt 0.991683 0.823979 +vt 0.979373 0.041022 +vt 0.698677 0.007413 +vt 0.945387 0.041022 +vt 0.955080 0.823979 +vt 0.843430 0.041022 +vt 0.001520 0.006331 +vt 0.845273 0.823979 +vt 0.877416 0.041022 +vt 0.881876 0.823979 +vt 0.911401 0.041022 +vt 0.918478 0.823979 +vt 0.979373 0.809865 +vt 0.335685 0.007413 +vt 0.717479 0.996177 +vt 0.945387 0.809865 +vt 0.741556 0.996177 +vt 0.911401 0.809865 +vt 0.765633 0.996177 +vt 0.877416 0.809865 +vt 0.789710 0.996177 +vt 0.843430 0.809865 +vt 0.317891 0.006331 +vt 0.813788 0.996177 +vt 0.001520 0.749776 +vt 0.845273 0.219011 +vt 0.001520 0.501961 +vt 0.845273 0.420667 +vt 0.001520 0.254146 +vt 0.845273 0.622323 +vt 0.317891 0.254146 +vt 0.813788 0.749367 +vt 0.317891 0.501961 +vt 0.813788 0.502558 +vt 0.317891 0.749776 +vt 0.813788 0.255748 +vt 0.335685 0.497884 +vt 0.717479 0.502558 +vt 0.335685 0.252649 +vt 0.717479 0.749367 +vt 0.698677 0.497884 +vt 0.991683 0.420667 +vt 0.698677 0.743119 +vt 0.991683 0.219011 +vt 0.789710 0.255748 +vt 0.765633 0.255748 +vt 0.789710 0.749367 +vt 0.765633 0.749367 +vt 0.765633 0.502558 +vt 0.789710 0.502558 +vt 0.741556 0.749367 +vt 0.741556 0.502558 +vt 0.881876 0.622323 +vt 0.918478 0.622323 +vt 0.881876 0.219011 +vt 0.918478 0.219011 +vt 0.918478 0.420667 +vt 0.881876 0.420667 +vt 0.955080 0.219011 +vt 0.955080 0.420667 +s 1 +usemtl Book_2.001 +f 25405/45552/16934 25406/45554/16935 25407/45555/16935 25408/45559/16934 +f 25409/45560/16936 25410/45563/16936 25411/45565/16936 25408/45558/16936 25407/45556/16936 25412/45567/16936 25413/45570/16936 25414/45572/16936 25415/45574/16936 25416/45576/16936 +f 25417/45579/16937 25418/45581/16938 25419/45582/16938 25420/45586/16937 +f 25421/45587/16939 25422/45590/16939 25423/45592/16939 25420/45585/16939 25419/45583/16939 25424/45594/16939 25425/45597/16939 25426/45599/16939 25427/45601/16939 25428/45603/16939 +f 25409/45561/16940 25416/45577/16940 25429/45606/16940 25430/45608/16940 25431/45610/16940 25421/45588/16940 25428/45604/16940 25432/45612/16940 25433/45614/16940 25434/45616/16940 +f 25412/45568/16941 25407/45557/16941 25406/45553/16941 25435/45618/16941 25436/45620/16941 25424/45595/16941 25419/45584/16941 25418/45580/16941 25437/45622/16941 25438/45624/16941 +f 25439/45626/16942 25440/45627/16943 25411/45566/16943 25410/45564/16942 +f 25441/45628/16942 25442/45629/16943 25443/45630/16943 25444/45631/16942 +f 25445/45632/16934 25436/45621/16935 25435/45619/16935 25446/45633/16934 +f 25442/45629/16944 25445/45632/16934 25446/45633/16934 25443/45630/16944 +f 25426/45600/16944 25425/45598/16934 25445/45632/16934 25442/45629/16944 +f 25425/45598/16934 25424/45596/16935 25436/45621/16935 25445/45632/16934 +f 25432/45613/16945 25441/45628/16942 25444/45631/16942 25433/45615/16945 +f 25428/45605/16945 25427/45602/16942 25441/45628/16942 25432/45613/16945 +f 25427/45602/16942 25426/45600/16943 25442/45629/16943 25441/45628/16942 +f 25434/45617/16945 25439/45626/16942 25410/45564/16942 25409/45562/16945 +f 25433/45615/16945 25444/45631/16942 25439/45626/16942 25434/45617/16945 +f 25444/45631/16942 25443/45630/16943 25440/45627/16943 25439/45626/16942 +f 25440/45627/16944 25405/45552/16934 25408/45559/16934 25411/45566/16944 +f 25443/45630/16944 25446/45633/16934 25405/45552/16934 25440/45627/16944 +f 25446/45633/16934 25435/45619/16935 25406/45554/16935 25405/45552/16934 +f 25447/45634/16946 25448/45635/16947 25423/45593/16947 25422/45591/16946 +f 25449/45636/16946 25450/45637/16947 25451/45638/16947 25452/45639/16946 +f 25453/45640/16937 25438/45625/16938 25437/45623/16938 25454/45641/16937 +f 25450/45637/16948 25453/45640/16937 25454/45641/16937 25451/45638/16948 +f 25414/45573/16949 25413/45571/16937 25453/45640/16937 25450/45637/16948 +f 25413/45571/16937 25412/45569/16938 25438/45625/16938 25453/45640/16937 +f 25429/45607/16950 25449/45636/16946 25452/45639/16946 25430/45609/16950 +f 25416/45578/16950 25415/45575/16946 25449/45636/16946 25429/45607/16950 +f 25415/45575/16946 25414/45573/16947 25450/45637/16947 25449/45636/16946 +f 25431/45611/16950 25447/45634/16946 25422/45591/16946 25421/45589/16950 +f 25430/45609/16950 25452/45639/16946 25447/45634/16946 25431/45611/16950 +f 25452/45639/16946 25451/45638/16947 25448/45635/16947 25447/45634/16946 +f 25448/45635/16948 25417/45579/16937 25420/45586/16937 25423/45593/16948 +f 25451/45638/16948 25454/45641/16937 25417/45579/16937 25448/45635/16948 +f 25454/45641/16937 25437/45623/16938 25418/45581/16938 25417/45579/16937 +o book4.001 +v 5.550662 0.828342 5.221837 +v 5.556156 0.828342 5.220148 +v 5.476855 0.828342 4.962056 +v 5.471361 0.828342 4.963745 +v 5.511011 0.828342 5.092791 +v 5.473393 0.825410 4.970359 +v 5.476855 0.825410 4.962056 +v 5.556156 0.825410 5.220148 +v 5.536331 0.825410 5.155625 +v 5.516506 0.825410 5.091102 +v 5.496681 0.825410 5.026579 +v 5.428430 0.793342 5.118164 +v 5.345848 0.793342 5.143538 +v 5.306198 0.793342 5.014492 +v 5.388779 0.793342 4.989118 +v 5.389681 0.825410 5.264060 +v 5.385498 0.828342 5.272584 +v 5.345848 0.828342 5.143538 +v 5.306198 0.828342 5.014492 +v 5.314445 0.825410 5.019197 +v 5.548629 0.825410 5.215221 +v 5.468080 0.828342 5.247210 +v 5.550662 0.793342 5.221837 +v 5.548629 0.796274 5.215221 +v 5.389681 0.796274 5.264060 +v 5.385498 0.793342 5.272584 +v 5.468080 0.793342 5.247210 +v 5.314445 0.796274 5.019197 +v 5.476855 0.793342 4.962056 +v 5.476855 0.796274 4.962056 +v 5.496681 0.796274 5.026579 +v 5.516506 0.796274 5.091102 +v 5.536331 0.796274 5.155625 +v 5.556156 0.796274 5.220148 +v 5.556156 0.793342 5.220148 +v 5.537725 0.818126 5.155197 +v 5.557550 0.818126 5.219719 +v 5.471361 0.793342 4.963745 +v 5.473393 0.796274 4.970359 +v 5.478250 0.803558 4.961627 +v 5.478250 0.818126 4.961627 +v 5.478259 0.810842 4.961625 +v 5.557550 0.803558 5.219719 +v 5.557559 0.810842 5.219717 +v 5.511011 0.793342 5.092791 +v 5.388779 0.828342 4.989118 +v 5.428430 0.828342 5.118164 +v 5.537725 0.803558 5.155197 +v 5.537734 0.810842 5.155194 +v 5.498075 0.803558 5.026151 +v 5.498084 0.810842 5.026148 +v 5.517909 0.810842 5.090671 +v 5.517900 0.803558 5.090673 +v 5.498075 0.818126 5.026151 +v 5.517900 0.818126 5.090673 +vn -0.0000 1.0000 -0.0000 +vn -0.5273 -0.0195 -0.8494 +vn -0.5273 -0.0195 -0.8495 +vn 0.9559 0.0039 -0.2937 +vn 0.9559 -0.0000 -0.2937 +vn 0.9559 0.0052 -0.2937 +vn -0.0000 -1.0000 -0.0000 +vn -0.9524 -0.0852 0.2927 +vn -0.9524 -0.0852 0.2926 +vn 0.2935 -0.0395 0.9552 +vn 0.2934 -0.0395 0.9552 +vn 0.2935 -0.0395 0.9551 +vn 0.2934 0.0395 0.9552 +vn 0.2935 0.0395 0.9552 +vn 0.2937 -0.0000 0.9559 +vn -0.9524 0.0852 0.2927 +vn -0.9524 0.0852 0.2926 +vn -0.9559 -0.0000 0.2937 +vn 0.9559 -0.0039 -0.2937 +vn 0.9559 -0.0052 -0.2937 +vn 0.9559 0.0038 -0.2937 +vn -0.5273 0.0195 -0.8495 +vn -0.5273 0.0195 -0.8494 +vn -0.2937 -0.0000 -0.9559 +vn -0.2935 0.0395 -0.9551 +vn -0.2935 0.0395 -0.9552 +vn -0.2934 0.0395 -0.9552 +vn 0.0407 0.0195 0.9990 +vn 0.0406 0.0195 0.9990 +vn 0.0407 -0.0195 0.9990 +vn 0.0406 -0.0195 0.9990 +vn -0.2935 -0.0395 -0.9552 +vn -0.2935 -0.0395 -0.9551 +vn 0.9559 -0.0038 -0.2937 +vn -0.1179 -0.0000 0.9930 +vn -0.1178 -0.0000 0.9930 +vn -0.1179 -0.0002 0.9930 +vn -0.6551 -0.0000 -0.7555 +vt 0.487034 0.050981 +vt 0.501133 0.046425 +vt 0.398872 0.917006 +vt 0.487101 0.050981 +vt 0.473275 0.024841 +vt 0.501133 0.046415 +vt 0.487101 0.053064 +vt 0.500955 0.046871 +vt 0.473275 0.032117 +vt 0.487034 0.053064 +vt 0.500955 0.046867 +vt 0.501292 0.047455 +vt 0.509607 0.922908 +vt 0.487034 0.052022 +vt 0.509607 0.902732 +vt 0.398872 0.937183 +vt 0.824124 0.046271 +vt 0.501060 0.047455 +vt 0.500908 0.046867 +vt 0.475700 0.032117 +vt 0.500908 0.046871 +vt 0.475700 0.024841 +vt 0.501038 0.046415 +vt 0.475700 0.026660 +vt 0.475700 0.028479 +vt 0.475700 0.030298 +vt 0.497345 0.947253 +vt 0.390301 0.927567 +vt 0.485041 0.949714 +vt 0.398689 0.927567 +vt 0.500837 0.047437 +vt 0.493429 0.949714 +vt 0.398689 0.949573 +vt 0.500837 0.047711 +vt 0.501029 0.046336 +vt 0.390301 0.949573 +vt 0.501029 0.046347 +vt 0.497345 0.969259 +vt 0.501060 0.046089 +vt 0.501038 0.046703 +vt 0.997618 0.821941 +vt 0.992766 0.003169 +vt 0.501292 0.046089 +vt 0.501133 0.046703 +vt 0.481199 0.963761 +vt 0.501292 0.046436 +vt 0.381537 0.937183 +vt 0.481199 0.983937 +vt 0.501292 0.046783 +vt 0.381537 0.957359 +vt 0.992766 0.813733 +vt 0.824124 0.799906 +vt 0.501060 0.046783 +vt 0.997618 0.005010 +vt 0.501038 0.046425 +vt 0.501133 0.046564 +vt 0.489866 0.963761 +vt 0.390204 0.917006 +vt 0.500846 0.046425 +vt 0.495250 0.051926 +vt 0.381913 0.905562 +vt 0.821822 0.005010 +vt 0.500942 0.046425 +vt 0.500942 0.046703 +vt 0.821822 0.821941 +vt 0.501020 0.047163 +vt 0.824213 0.003169 +vt 0.500846 0.046703 +vt 0.500837 0.047163 +vt 0.493429 0.927709 +vt 0.500846 0.046564 +vt 0.390301 0.905562 +vt 0.485041 0.927709 +vt 0.501020 0.047711 +vt 0.824213 0.813733 +vt 0.995819 0.799906 +vt 0.501036 0.046336 +vt 0.480551 0.032117 +vt 0.500814 0.046871 +vt 0.495103 0.056478 +vt 0.478126 0.032117 +vt 0.500861 0.046871 +vt 0.478126 0.030298 +vt 0.478126 0.028479 +vt 0.478126 0.026660 +vt 0.478126 0.024841 +vt 0.500942 0.046415 +vt 0.480551 0.024841 +vt 0.500846 0.046415 +vt 0.495103 0.051926 +vt 0.476307 0.026660 +vt 0.520833 0.250000 +vt 0.501014 0.046415 +vt 0.476307 0.024841 +vt 0.500814 0.046867 +vt 0.501029 0.046357 +vt 0.495250 0.056478 +vt 0.488957 0.969259 +vt 0.995819 0.046271 +vt 0.501036 0.046357 +vt 0.500861 0.046867 +vt 0.479167 1.000000 +vt 0.477520 0.032117 +vt 0.500873 0.046871 +vt 0.520833 1.000000 +vt 0.476307 0.032117 +vt 0.500896 0.046871 +vt 0.500000 1.000000 +vt 0.476913 0.032117 +vt 0.479167 0.250000 +vt 0.477520 0.024841 +vt 0.500966 0.046415 +vt 0.500000 0.250000 +vt 0.476913 0.024841 +vt 0.495250 0.054202 +vt 0.488957 0.947253 +vt 0.381913 0.927567 +vt 0.501292 0.047119 +vt 0.500939 0.922908 +vt 0.390204 0.957359 +vt 0.500939 0.902732 +vt 0.489866 0.983937 +vt 0.390204 0.937183 +vt 0.477520 0.026660 +vt 0.476913 0.026660 +vt 0.477520 0.030298 +vt 0.476913 0.030298 +vt 0.476913 0.028479 +vt 0.477520 0.028479 +vt 0.476307 0.030298 +vt 0.476307 0.028479 +s 1 +usemtl Book1.003 +f 25455/45642/16951 25456/45645/16951 25457/45648/16951 25458/45651/16951 25459/45655/16951 +f 25460/45660/16952 25458/45652/16953 25457/45649/16953 25461/45662/16953 +f 25461/45661/16954 25457/45650/16955 25456/45646/16955 25462/45663/16954 25463/45665/16956 25464/45666/16956 25465/45667/16956 +f 25466/45669/16957 25467/45671/16957 25468/45674/16957 25469/45677/16957 +f 25470/45680/16958 25471/45684/16958 25472/45687/16958 25473/45690/16959 25474/45694/16959 +f 25475/45696/16960 25455/45643/16961 25476/45697/16962 25471/45685/16961 25470/45681/16960 +f 25477/45700/16963 25478/45704/16964 25479/45705/16964 25480/45709/16963 25481/45712/16963 +f 25478/45703/16965 25475/45695/16965 25470/45682/16965 25479/45706/16965 +f 25480/45710/16966 25479/45707/16966 25482/45715/16967 25468/45675/16967 25467/45672/16967 +f 25479/45708/16968 25470/45683/16968 25474/45692/16968 25482/45716/16968 +f 25483/45719/16955 25484/45722/16969 25485/45724/16970 25486/45725/16970 25487/45726/16970 25488/45727/16969 25489/45729/16955 +f 25490/45732/16971 25463/45665/16956 25462/45663/16954 25491/45735/16971 +f 25492/45736/16972 25493/45742/16973 25484/45723/16972 25483/45720/16972 +f 25494/45743/16974 25495/45746/16974 25496/45749/16974 +f 25482/45717/16974 25474/45693/16974 25460/45658/16974 25493/45740/16974 +f 25468/45676/16975 25482/45718/16976 25493/45741/16976 25492/45737/16975 25469/45678/16977 +f 25497/45751/16965 25498/45754/16965 25491/45733/16965 +f 25489/45730/16978 25488/45728/16978 25478/45704/16979 25477/45700/16978 +f 25462/45664/16980 25456/45647/16980 25455/45643/16980 25475/45696/16981 +f 25489/45731/16957 25477/45701/16957 25499/45756/16957 25492/45738/16957 25483/45721/16957 +f 25474/45694/16982 25473/45690/16983 25500/45759/16983 25458/45653/16983 25460/45659/16982 +f 25501/45762/16951 25459/45656/16951 25458/45654/16951 25500/45760/16951 +f 25502/45765/16984 25503/45766/16955 25498/45755/16955 25497/45752/16984 +f 25504/45767/16984 25505/45768/16955 25506/45769/16955 25507/45770/16984 +f 25508/45771/16971 25465/45667/16956 25464/45666/16956 25509/45772/16971 +f 25505/45768/16955 25508/45771/16971 25509/45772/16971 25506/45769/16955 +f 25496/45750/16955 25495/45747/16971 25508/45771/16971 25505/45768/16955 +f 25495/45747/16971 25461/45661/16954 25465/45667/16956 25508/45771/16971 +f 25485/45724/16970 25504/45767/16984 25507/45770/16984 25486/45725/16970 +f 25484/45722/16969 25494/45744/16984 25504/45767/16984 25485/45724/16970 +f 25494/45744/16984 25496/45750/16955 25505/45768/16955 25504/45767/16984 +f 25487/45726/16970 25502/45765/16984 25497/45752/16984 25488/45727/16969 +f 25486/45725/16970 25507/45770/16984 25502/45765/16984 25487/45726/16970 +f 25507/45770/16984 25506/45769/16955 25503/45766/16955 25502/45765/16984 +f 25488/45728/16985 25497/45753/16986 25491/45734/16986 25462/45664/16987 25475/45696/16985 25478/45704/16985 +f 25493/45742/16988 25460/45660/16988 25461/45662/16988 25495/45748/16988 25494/45745/16988 25484/45723/16988 +f 25503/45766/16955 25490/45732/16971 25491/45735/16971 25498/45755/16955 +f 25506/45769/16955 25509/45772/16971 25490/45732/16971 25503/45766/16955 +f 25509/45772/16971 25464/45666/16956 25463/45665/16956 25490/45732/16971 +f 25472/45688/16951 25501/45764/16951 25500/45761/16951 25473/45691/16951 +f 25471/45686/16951 25476/45698/16951 25501/45763/16951 25472/45689/16951 +f 25476/45699/16951 25455/45644/16951 25459/45657/16951 25501/45764/16951 +f 25499/45757/16957 25466/45668/16957 25469/45679/16957 25492/45739/16957 +f 25477/45702/16957 25481/45713/16957 25466/45669/16957 25499/45758/16957 +f 25481/45714/16957 25480/45711/16957 25467/45673/16957 25466/45670/16957 +o book4.002 +v 5.648015 0.828342 5.251694 +v 5.650542 0.828342 5.256856 +v 5.893037 0.828342 5.138128 +v 5.890509 0.828342 5.132966 +v 5.769262 0.828342 5.192330 +v 5.884294 0.825410 5.136009 +v 5.893037 0.825410 5.138128 +v 5.650542 0.825410 5.256856 +v 5.711166 0.825410 5.227174 +v 5.771790 0.825410 5.197493 +v 5.832413 0.825410 5.167810 +v 5.731273 0.793342 5.114739 +v 5.693283 0.793342 5.037148 +v 5.814530 0.793342 4.977784 +v 5.852520 0.793342 5.055375 +v 5.581110 0.825410 5.099308 +v 5.572036 0.828342 5.096512 +v 5.693283 0.828342 5.037148 +v 5.814530 0.828342 4.977784 +v 5.811174 0.825410 4.986666 +v 5.654230 0.825410 5.248651 +v 5.610025 0.828342 5.174103 +v 5.648015 0.793342 5.251694 +v 5.654230 0.796274 5.248651 +v 5.581110 0.796274 5.099308 +v 5.572036 0.793342 5.096512 +v 5.610025 0.793342 5.174103 +v 5.811174 0.796274 4.986666 +v 5.893037 0.793342 5.138128 +v 5.893037 0.796274 5.138128 +v 5.832413 0.796274 5.167810 +v 5.771790 0.796274 5.197493 +v 5.711166 0.796274 5.227174 +v 5.650542 0.796274 5.256856 +v 5.650542 0.793342 5.256856 +v 5.711807 0.818126 5.228485 +v 5.651184 0.818126 5.258167 +v 5.890509 0.793342 5.132966 +v 5.884294 0.796274 5.136009 +v 5.893679 0.803558 5.139439 +v 5.893679 0.818126 5.139439 +v 5.893682 0.810842 5.139447 +v 5.651184 0.803558 5.258167 +v 5.651188 0.810842 5.258175 +v 5.769262 0.793342 5.192330 +v 5.852520 0.828342 5.055375 +v 5.731273 0.828342 5.114739 +v 5.711807 0.803558 5.228485 +v 5.711812 0.810842 5.228493 +v 5.833055 0.803558 5.169121 +v 5.833059 0.810842 5.169129 +v 5.772435 0.810842 5.198811 +v 5.772431 0.803558 5.198803 +v 5.833055 0.818126 5.169121 +v 5.772431 0.818126 5.198803 +vn -0.0000 1.0000 -0.0000 +vn 0.7564 -0.0195 -0.6538 +vn 0.7565 -0.0195 -0.6538 +vn 0.4397 0.0039 0.8981 +vn 0.4397 -0.0000 0.8981 +vn 0.4397 0.0052 0.8981 +vn -0.0000 -1.0000 -0.0000 +vn -0.4381 -0.0852 -0.8949 +vn -0.4382 -0.0852 -0.8949 +vn -0.4382 -0.0852 -0.8948 +vn -0.8974 -0.0395 0.4394 +vn -0.8975 -0.0395 0.4393 +vn -0.8974 0.0395 0.4394 +vn -0.8975 0.0395 0.4393 +vn -0.8981 -0.0000 0.4397 +vn -0.4382 0.0852 -0.8949 +vn -0.4381 0.0852 -0.8949 +vn -0.4397 -0.0000 -0.8981 +vn 0.4397 -0.0039 0.8981 +vn 0.4397 -0.0052 0.8981 +vn 0.4397 0.0038 0.8981 +vn 0.7565 0.0195 -0.6538 +vn 0.7564 0.0195 -0.6538 +vn 0.8981 -0.0000 -0.4397 +vn 0.8974 0.0395 -0.4395 +vn 0.8974 0.0395 -0.4394 +vn -0.9803 0.0195 0.1966 +vn -0.9803 0.0195 0.1965 +vn -0.9803 -0.0195 0.1966 +vn -0.9803 -0.0195 0.1965 +vn 0.8974 -0.0395 -0.4394 +vn 0.8974 -0.0395 -0.4395 +vn 0.4397 -0.0038 0.8981 +vn -0.9992 -0.0000 0.0390 +vn -0.9992 -0.0000 0.0391 +vn -0.9992 -0.0002 0.0390 +vn 0.6436 -0.0000 -0.7653 +vn 0.6437 -0.0000 -0.7653 +vt 0.487034 0.050981 +vt 0.501133 0.046425 +vt 0.398872 0.917006 +vt 0.487101 0.050981 +vt 0.473275 0.024841 +vt 0.501133 0.046415 +vt 0.487101 0.053064 +vt 0.500955 0.046871 +vt 0.473275 0.032117 +vt 0.487034 0.053064 +vt 0.500955 0.046867 +vt 0.501292 0.047455 +vt 0.509607 0.922908 +vt 0.487034 0.052022 +vt 0.509607 0.902732 +vt 0.398872 0.937183 +vt 0.824124 0.046271 +vt 0.501060 0.047455 +vt 0.500908 0.046867 +vt 0.475700 0.032117 +vt 0.500908 0.046871 +vt 0.475700 0.024841 +vt 0.501038 0.046415 +vt 0.475700 0.026660 +vt 0.475700 0.028479 +vt 0.475700 0.030298 +vt 0.497345 0.947253 +vt 0.390301 0.927567 +vt 0.485041 0.949714 +vt 0.398689 0.927567 +vt 0.500837 0.047437 +vt 0.493429 0.949714 +vt 0.398689 0.949573 +vt 0.500837 0.047711 +vt 0.501029 0.046336 +vt 0.390301 0.949573 +vt 0.501029 0.046347 +vt 0.497345 0.969259 +vt 0.501060 0.046089 +vt 0.501038 0.046703 +vt 0.997618 0.821941 +vt 0.992766 0.003169 +vt 0.501292 0.046089 +vt 0.501133 0.046703 +vt 0.481199 0.963761 +vt 0.501292 0.046436 +vt 0.381537 0.937183 +vt 0.481199 0.983937 +vt 0.501292 0.046783 +vt 0.381537 0.957359 +vt 0.992766 0.813733 +vt 0.824124 0.799906 +vt 0.501060 0.046783 +vt 0.997618 0.005010 +vt 0.501038 0.046425 +vt 0.501133 0.046564 +vt 0.489866 0.963761 +vt 0.390204 0.917006 +vt 0.500846 0.046425 +vt 0.495250 0.051926 +vt 0.381913 0.905562 +vt 0.821822 0.005010 +vt 0.500942 0.046425 +vt 0.500942 0.046703 +vt 0.821822 0.821941 +vt 0.501020 0.047163 +vt 0.824213 0.003169 +vt 0.500846 0.046703 +vt 0.500837 0.047163 +vt 0.493429 0.927709 +vt 0.500846 0.046564 +vt 0.390301 0.905562 +vt 0.485041 0.927709 +vt 0.501020 0.047711 +vt 0.824213 0.813733 +vt 0.995819 0.799906 +vt 0.501036 0.046336 +vt 0.480551 0.032117 +vt 0.500814 0.046871 +vt 0.495103 0.056478 +vt 0.478126 0.032117 +vt 0.500861 0.046871 +vt 0.478126 0.030298 +vt 0.478126 0.028479 +vt 0.478126 0.026660 +vt 0.478126 0.024841 +vt 0.500942 0.046415 +vt 0.480551 0.024841 +vt 0.500846 0.046415 +vt 0.495103 0.051926 +vt 0.476307 0.026660 +vt 0.520833 0.250000 +vt 0.501014 0.046415 +vt 0.476307 0.024841 +vt 0.500814 0.046867 +vt 0.501029 0.046357 +vt 0.495250 0.056478 +vt 0.488957 0.969259 +vt 0.995819 0.046271 +vt 0.501036 0.046357 +vt 0.500861 0.046867 +vt 0.479167 1.000000 +vt 0.477520 0.032117 +vt 0.500873 0.046871 +vt 0.520833 1.000000 +vt 0.476307 0.032117 +vt 0.500896 0.046871 +vt 0.500000 1.000000 +vt 0.476913 0.032117 +vt 0.479167 0.250000 +vt 0.477520 0.024841 +vt 0.500966 0.046415 +vt 0.500000 0.250000 +vt 0.476913 0.024841 +vt 0.495250 0.054202 +vt 0.488957 0.947253 +vt 0.381913 0.927567 +vt 0.501292 0.047119 +vt 0.500939 0.922908 +vt 0.390204 0.957359 +vt 0.500939 0.902732 +vt 0.489866 0.983937 +vt 0.390204 0.937183 +vt 0.477520 0.026660 +vt 0.476913 0.026660 +vt 0.477520 0.030298 +vt 0.476913 0.030298 +vt 0.476913 0.028479 +vt 0.477520 0.028479 +vt 0.476307 0.030298 +vt 0.476307 0.028479 +s 1 +usemtl Book1.004 +f 25510/45773/16989 25511/45776/16989 25512/45779/16989 25513/45782/16989 25514/45786/16989 +f 25515/45791/16990 25513/45783/16991 25512/45780/16991 25516/45793/16990 +f 25516/45792/16992 25512/45781/16993 25511/45777/16993 25517/45794/16992 25518/45796/16994 25519/45797/16994 25520/45798/16994 +f 25521/45800/16995 25522/45802/16995 25523/45805/16995 25524/45808/16995 +f 25525/45811/16996 25526/45815/16997 25527/45818/16998 25528/45821/16996 25529/45825/16996 +f 25530/45827/16999 25510/45774/16999 25531/45828/16999 25526/45816/17000 25525/45812/16999 +f 25532/45831/17001 25533/45835/17001 25534/45836/17001 25535/45840/17002 25536/45843/17001 +f 25533/45834/17003 25530/45826/17003 25525/45813/17003 25534/45837/17003 +f 25535/45841/17004 25534/45838/17005 25537/45846/17005 25523/45806/17005 25522/45803/17005 +f 25534/45839/17006 25525/45814/17006 25529/45823/17006 25537/45847/17006 +f 25538/45850/16993 25539/45853/17007 25540/45855/17008 25541/45856/17008 25542/45857/17008 25543/45858/17007 25544/45860/16993 +f 25545/45863/17009 25518/45796/16994 25517/45794/16992 25546/45866/17009 +f 25547/45867/17010 25548/45873/17011 25539/45854/17011 25538/45851/17010 +f 25549/45874/17012 25550/45877/17012 25551/45880/17012 +f 25537/45848/17012 25529/45824/17012 25515/45789/17012 25548/45871/17012 +f 25523/45807/17013 25537/45849/17014 25548/45872/17014 25547/45868/17014 25524/45809/17014 +f 25552/45882/17003 25553/45885/17003 25546/45864/17003 +f 25544/45861/17015 25543/45859/17015 25533/45835/17016 25532/45831/17015 +f 25517/45795/17017 25511/45778/17017 25510/45774/17017 25530/45827/17018 +f 25544/45862/16995 25532/45832/16995 25554/45887/16995 25547/45869/16995 25538/45852/16995 +f 25529/45825/17019 25528/45821/17020 25555/45890/17019 25513/45784/17019 25515/45790/17019 +f 25556/45893/16989 25514/45787/16989 25513/45785/16989 25555/45891/16989 +f 25557/45896/17021 25558/45897/16993 25553/45886/16993 25552/45883/17021 +f 25559/45898/17021 25560/45899/16993 25561/45900/16993 25562/45901/17021 +f 25563/45902/17009 25520/45798/16994 25519/45797/16994 25564/45903/17009 +f 25560/45899/16993 25563/45902/17009 25564/45903/17009 25561/45900/16993 +f 25551/45881/16993 25550/45878/17009 25563/45902/17009 25560/45899/16993 +f 25550/45878/17009 25516/45792/16992 25520/45798/16994 25563/45902/17009 +f 25540/45855/17008 25559/45898/17021 25562/45901/17021 25541/45856/17008 +f 25539/45853/17007 25549/45875/17021 25559/45898/17021 25540/45855/17008 +f 25549/45875/17021 25551/45881/16993 25560/45899/16993 25559/45898/17021 +f 25542/45857/17008 25557/45896/17021 25552/45883/17021 25543/45858/17007 +f 25541/45856/17008 25562/45901/17021 25557/45896/17021 25542/45857/17008 +f 25562/45901/17021 25561/45900/16993 25558/45897/16993 25557/45896/17021 +f 25543/45859/17022 25552/45884/17023 25546/45865/17023 25517/45795/17024 25530/45827/17022 25533/45835/17022 +f 25548/45873/17025 25515/45791/17025 25516/45793/17025 25550/45879/17026 25549/45876/17026 25539/45854/17025 +f 25558/45897/16993 25545/45863/17009 25546/45866/17009 25553/45886/16993 +f 25561/45900/16993 25564/45903/17009 25545/45863/17009 25558/45897/16993 +f 25564/45903/17009 25519/45797/16994 25518/45796/16994 25545/45863/17009 +f 25527/45819/16989 25556/45895/16989 25555/45892/16989 25528/45822/16989 +f 25526/45817/16989 25531/45829/16989 25556/45894/16989 25527/45820/16989 +f 25531/45830/16989 25510/45775/16989 25514/45788/16989 25556/45895/16989 +f 25554/45888/16995 25521/45799/16995 25524/45810/16995 25547/45870/16995 +f 25532/45833/16995 25536/45844/16995 25521/45800/16995 25554/45889/16995 +f 25536/45845/16995 25535/45842/16995 25522/45804/16995 25521/45801/16995 +o book4.003 +v 5.416693 0.863384 5.107130 +v 5.413361 0.863384 5.111814 +v 5.633381 0.863384 5.268310 +v 5.636713 0.863384 5.263626 +v 5.526703 0.863384 5.185378 +v 5.631074 0.860452 5.259615 +v 5.633381 0.860452 5.268310 +v 5.413361 0.860452 5.111814 +v 5.468366 0.860452 5.150938 +v 5.523371 0.860452 5.190062 +v 5.578376 0.860452 5.229186 +v 5.576777 0.828384 5.114978 +v 5.626852 0.828384 5.044578 +v 5.736862 0.828384 5.122827 +v 5.686787 0.828384 5.193226 +v 5.518712 0.860452 4.975639 +v 5.516841 0.863384 4.966330 +v 5.626852 0.863384 5.044578 +v 5.736862 0.863384 5.122827 +v 5.727454 0.860452 5.124114 +v 5.422332 0.860452 5.111140 +v 5.466767 0.863384 5.036730 +v 5.416693 0.828384 5.107130 +v 5.422332 0.831316 5.111140 +v 5.518712 0.831316 4.975639 +v 5.516841 0.828384 4.966330 +v 5.466767 0.828384 5.036730 +v 5.727454 0.831316 5.124114 +v 5.633381 0.828384 5.268310 +v 5.633381 0.831316 5.268310 +v 5.578376 0.831316 5.229186 +v 5.523371 0.831316 5.190062 +v 5.468366 0.831316 5.150938 +v 5.413361 0.831316 5.111814 +v 5.413361 0.828384 5.111814 +v 5.467521 0.853168 5.152127 +v 5.412516 0.853168 5.113002 +v 5.636713 0.828384 5.263626 +v 5.631074 0.831316 5.259615 +v 5.632535 0.838600 5.269499 +v 5.632535 0.853168 5.269499 +v 5.632530 0.845884 5.269506 +v 5.412516 0.838600 5.113002 +v 5.412510 0.845884 5.113010 +v 5.526703 0.828384 5.185378 +v 5.686787 0.863384 5.193226 +v 5.576777 0.863384 5.114978 +v 5.467521 0.838600 5.152127 +v 5.467515 0.845884 5.152134 +v 5.577530 0.838600 5.230375 +v 5.577525 0.845884 5.230382 +v 5.522521 0.845884 5.191258 +v 5.522526 0.838600 5.191251 +v 5.577530 0.853168 5.230375 +v 5.522526 0.853168 5.191251 +vn -0.0000 1.0000 -0.0000 +vn 0.9354 -0.0195 0.3529 +vn 0.9354 -0.0195 0.3530 +vn -0.5796 0.0039 0.8149 +vn -0.5796 -0.0000 0.8149 +vn -0.5796 0.0052 0.8149 +vn -0.0000 -1.0000 -0.0000 +vn 0.5775 -0.0852 -0.8119 +vn 0.5775 -0.0852 -0.8120 +vn -0.8143 -0.0395 -0.5792 +vn -0.8142 -0.0395 -0.5792 +vn -0.8143 -0.0395 -0.5791 +vn -0.8142 0.0395 -0.5792 +vn -0.8143 0.0395 -0.5792 +vn -0.8149 -0.0000 -0.5796 +vn 0.5775 0.0852 -0.8119 +vn 0.5796 -0.0000 -0.8149 +vn -0.5796 -0.0039 0.8149 +vn -0.5796 -0.0052 0.8149 +vn -0.5796 0.0038 0.8149 +vn 0.9354 0.0195 0.3530 +vn 0.9354 0.0195 0.3529 +vn 0.8149 -0.0000 0.5796 +vn 0.8143 0.0395 0.5791 +vn 0.8143 0.0395 0.5792 +vn 0.8142 0.0395 0.5792 +vn -0.6404 0.0195 -0.7678 +vn -0.6403 0.0195 -0.7679 +vn -0.6404 -0.0195 -0.7678 +vn -0.6403 -0.0195 -0.7679 +vn 0.8143 -0.0395 0.5792 +vn 0.8143 -0.0395 0.5791 +vn -0.5796 -0.0038 0.8149 +vn -0.5109 -0.0000 -0.8596 +vn -0.5110 -0.0000 -0.8596 +vn -0.5109 -0.0002 -0.8596 +vn 0.9797 -0.0000 0.2006 +vn 0.9797 -0.0000 0.2007 +vt 0.487034 0.050981 +vt 0.501133 0.046425 +vt 0.398872 0.917006 +vt 0.487101 0.050981 +vt 0.473275 0.024841 +vt 0.501133 0.046415 +vt 0.487101 0.053064 +vt 0.500955 0.046871 +vt 0.473275 0.032117 +vt 0.487034 0.053064 +vt 0.500955 0.046867 +vt 0.501292 0.047455 +vt 0.509607 0.922908 +vt 0.487034 0.052022 +vt 0.509607 0.902732 +vt 0.398872 0.937183 +vt 0.824124 0.046271 +vt 0.501060 0.047455 +vt 0.500908 0.046867 +vt 0.475700 0.032117 +vt 0.500908 0.046871 +vt 0.475700 0.024841 +vt 0.501038 0.046415 +vt 0.475700 0.026660 +vt 0.475700 0.028479 +vt 0.475700 0.030298 +vt 0.497345 0.947253 +vt 0.390301 0.927567 +vt 0.485041 0.949714 +vt 0.398689 0.927567 +vt 0.500837 0.047437 +vt 0.493429 0.949714 +vt 0.398689 0.949573 +vt 0.500837 0.047711 +vt 0.501029 0.046336 +vt 0.390301 0.949573 +vt 0.501029 0.046347 +vt 0.497345 0.969259 +vt 0.501060 0.046089 +vt 0.501038 0.046703 +vt 0.997618 0.821941 +vt 0.992766 0.003169 +vt 0.501292 0.046089 +vt 0.501133 0.046703 +vt 0.481199 0.963761 +vt 0.501292 0.046436 +vt 0.381537 0.937183 +vt 0.481199 0.983937 +vt 0.501292 0.046783 +vt 0.381537 0.957359 +vt 0.992766 0.813733 +vt 0.824124 0.799906 +vt 0.501060 0.046783 +vt 0.997618 0.005010 +vt 0.501038 0.046425 +vt 0.501133 0.046564 +vt 0.489866 0.963761 +vt 0.390204 0.917006 +vt 0.500846 0.046425 +vt 0.495250 0.051926 +vt 0.381913 0.905562 +vt 0.821822 0.005010 +vt 0.500942 0.046425 +vt 0.500942 0.046703 +vt 0.821822 0.821941 +vt 0.501020 0.047163 +vt 0.824213 0.003169 +vt 0.500846 0.046703 +vt 0.500837 0.047163 +vt 0.493429 0.927709 +vt 0.500846 0.046564 +vt 0.390301 0.905562 +vt 0.485041 0.927709 +vt 0.501020 0.047711 +vt 0.824213 0.813733 +vt 0.995819 0.799906 +vt 0.501036 0.046336 +vt 0.480551 0.032117 +vt 0.500814 0.046871 +vt 0.495103 0.056478 +vt 0.478126 0.032117 +vt 0.500861 0.046871 +vt 0.478126 0.030298 +vt 0.478126 0.028479 +vt 0.478126 0.026660 +vt 0.478126 0.024841 +vt 0.500942 0.046415 +vt 0.480551 0.024841 +vt 0.500846 0.046415 +vt 0.495103 0.051926 +vt 0.476307 0.026660 +vt 0.520833 0.250000 +vt 0.501014 0.046415 +vt 0.476307 0.024841 +vt 0.500814 0.046867 +vt 0.501029 0.046357 +vt 0.495250 0.056478 +vt 0.488957 0.969259 +vt 0.995819 0.046271 +vt 0.501036 0.046357 +vt 0.500861 0.046867 +vt 0.479167 1.000000 +vt 0.477520 0.032117 +vt 0.500873 0.046871 +vt 0.520833 1.000000 +vt 0.476307 0.032117 +vt 0.500896 0.046871 +vt 0.500000 1.000000 +vt 0.476913 0.032117 +vt 0.479167 0.250000 +vt 0.477520 0.024841 +vt 0.500966 0.046415 +vt 0.500000 0.250000 +vt 0.476913 0.024841 +vt 0.495250 0.054202 +vt 0.488957 0.947253 +vt 0.381913 0.927567 +vt 0.501292 0.047119 +vt 0.500939 0.922908 +vt 0.390204 0.957359 +vt 0.500939 0.902732 +vt 0.489866 0.983937 +vt 0.390204 0.937183 +vt 0.477520 0.026660 +vt 0.476913 0.026660 +vt 0.477520 0.030298 +vt 0.476913 0.030298 +vt 0.476913 0.028479 +vt 0.477520 0.028479 +vt 0.476307 0.030298 +vt 0.476307 0.028479 +s 1 +usemtl Book1.005 +f 25565/45904/17027 25566/45907/17027 25567/45910/17027 25568/45913/17027 25569/45917/17027 +f 25570/45922/17028 25568/45914/17029 25567/45911/17029 25571/45924/17029 +f 25571/45923/17030 25567/45912/17031 25566/45908/17031 25572/45925/17030 25573/45927/17032 25574/45928/17032 25575/45929/17032 +f 25576/45931/17033 25577/45933/17033 25578/45936/17033 25579/45939/17033 +f 25580/45942/17034 25581/45946/17034 25582/45949/17035 25583/45952/17034 25584/45956/17034 +f 25585/45958/17036 25565/45905/17037 25586/45959/17038 25581/45947/17037 25580/45943/17036 +f 25587/45962/17039 25588/45966/17040 25589/45967/17040 25590/45971/17039 25591/45974/17039 +f 25588/45965/17041 25585/45957/17041 25580/45944/17041 25589/45968/17041 +f 25590/45972/17042 25589/45969/17042 25592/45977/17042 25578/45937/17042 25577/45934/17042 +f 25589/45970/17043 25580/45945/17043 25584/45954/17043 25592/45978/17043 +f 25593/45981/17031 25594/45984/17044 25595/45986/17045 25596/45987/17045 25597/45988/17045 25598/45989/17044 25599/45991/17031 +f 25600/45994/17046 25573/45927/17032 25572/45925/17030 25601/45997/17046 +f 25602/45998/17047 25603/46004/17048 25594/45985/17047 25593/45982/17047 +f 25604/46005/17049 25605/46008/17049 25606/46011/17049 +f 25592/45979/17049 25584/45955/17049 25570/45920/17049 25603/46002/17049 +f 25578/45938/17050 25592/45980/17051 25603/46003/17051 25602/45999/17050 25579/45940/17052 +f 25607/46013/17041 25608/46016/17041 25601/45995/17041 +f 25599/45992/17053 25598/45990/17053 25588/45966/17054 25587/45962/17053 +f 25572/45926/17055 25566/45909/17055 25565/45905/17055 25585/45958/17056 +f 25599/45993/17033 25587/45963/17033 25609/46018/17033 25602/46000/17033 25593/45983/17033 +f 25584/45956/17057 25583/45952/17058 25610/46021/17058 25568/45915/17058 25570/45921/17057 +f 25611/46024/17027 25569/45918/17027 25568/45916/17027 25610/46022/17027 +f 25612/46027/17059 25613/46028/17031 25608/46017/17031 25607/46014/17059 +f 25614/46029/17059 25615/46030/17031 25616/46031/17031 25617/46032/17059 +f 25618/46033/17046 25575/45929/17032 25574/45928/17032 25619/46034/17046 +f 25615/46030/17031 25618/46033/17046 25619/46034/17046 25616/46031/17031 +f 25606/46012/17031 25605/46009/17046 25618/46033/17046 25615/46030/17031 +f 25605/46009/17046 25571/45923/17030 25575/45929/17032 25618/46033/17046 +f 25595/45986/17045 25614/46029/17059 25617/46032/17059 25596/45987/17045 +f 25594/45984/17044 25604/46006/17059 25614/46029/17059 25595/45986/17045 +f 25604/46006/17059 25606/46012/17031 25615/46030/17031 25614/46029/17059 +f 25597/45988/17045 25612/46027/17059 25607/46014/17059 25598/45989/17044 +f 25596/45987/17045 25617/46032/17059 25612/46027/17059 25597/45988/17045 +f 25617/46032/17059 25616/46031/17031 25613/46028/17031 25612/46027/17059 +f 25598/45990/17060 25607/46015/17061 25601/45996/17061 25572/45926/17062 25585/45958/17060 25588/45966/17060 +f 25603/46004/17063 25570/45922/17063 25571/45924/17063 25605/46010/17064 25604/46007/17064 25594/45985/17063 +f 25613/46028/17031 25600/45994/17046 25601/45997/17046 25608/46017/17031 +f 25616/46031/17031 25619/46034/17046 25600/45994/17046 25613/46028/17031 +f 25619/46034/17046 25574/45928/17032 25573/45927/17032 25600/45994/17046 +f 25582/45950/17027 25611/46026/17027 25610/46023/17027 25583/45953/17027 +f 25581/45948/17027 25586/45960/17027 25611/46025/17027 25582/45951/17027 +f 25586/45961/17027 25565/45906/17027 25569/45919/17027 25611/46026/17027 +f 25609/46019/17033 25576/45930/17033 25579/45941/17033 25602/46001/17033 +f 25587/45964/17033 25591/45975/17033 25576/45931/17033 25609/46020/17033 +f 25591/45976/17033 25590/45973/17033 25577/45935/17033 25576/45932/17033 +o book4.004 +v 3.243064 0.863384 2.980961 +v 3.246598 0.863384 2.976428 +v 3.033676 0.863384 2.810403 +v 3.030142 0.863384 2.814936 +v 3.136603 0.863384 2.897948 +v 3.035599 0.860452 2.819191 +v 3.033676 0.860452 2.810403 +v 3.246598 0.860452 2.976428 +v 3.193368 0.860452 2.934922 +v 3.140137 0.860452 2.893415 +v 3.086907 0.860452 2.851909 +v 3.083480 0.828384 2.966077 +v 3.030357 0.828384 3.034206 +v 2.923896 0.828384 2.951194 +v 2.977019 0.828384 2.883065 +v 3.135359 0.860452 3.107836 +v 3.136818 0.863384 3.117218 +v 3.030357 0.863384 3.034206 +v 2.923896 0.863384 2.951194 +v 2.933351 0.860452 2.950321 +v 3.237607 0.860452 2.976706 +v 3.189941 0.863384 3.049089 +v 3.243064 0.828384 2.980961 +v 3.237607 0.831316 2.976706 +v 3.135359 0.831316 3.107836 +v 3.136818 0.828384 3.117218 +v 3.189941 0.828384 3.049089 +v 2.933351 0.831316 2.950321 +v 3.033676 0.828384 2.810403 +v 3.033676 0.831316 2.810403 +v 3.086907 0.831316 2.851909 +v 3.140137 0.831316 2.893415 +v 3.193368 0.831316 2.934922 +v 3.246598 0.831316 2.976428 +v 3.246598 0.828384 2.976428 +v 3.194265 0.853168 2.933771 +v 3.247495 0.853168 2.975277 +v 3.030142 0.828384 2.814936 +v 3.035599 0.831316 2.819191 +v 3.034573 0.838600 2.809253 +v 3.034573 0.853168 2.809253 +v 3.034579 0.845884 2.809246 +v 3.247495 0.838600 2.975277 +v 3.247501 0.845884 2.975270 +v 3.136603 0.828384 2.897948 +v 2.977019 0.863384 2.883065 +v 3.083480 0.863384 2.966077 +v 3.194265 0.838600 2.933771 +v 3.194270 0.845884 2.933764 +v 3.087804 0.838600 2.850759 +v 3.087809 0.845884 2.850752 +v 3.141040 0.845884 2.892258 +v 3.141034 0.838600 2.892265 +v 3.087804 0.853168 2.850759 +v 3.141034 0.853168 2.892265 +vn -0.0000 1.0000 -0.0000 +vn -0.9190 -0.0195 -0.3937 +vn -0.9190 -0.0195 -0.3938 +vn 0.6149 0.0039 -0.7886 +vn 0.6149 -0.0000 -0.7886 +vn 0.6149 0.0052 -0.7886 +vn -0.0000 -1.0000 -0.0000 +vn -0.6127 -0.0852 0.7857 +vn -0.6127 -0.0852 0.7858 +vn -0.6126 -0.0852 0.7858 +vn 0.7880 -0.0395 0.6144 +vn 0.7880 -0.0395 0.6145 +vn 0.7879 -0.0395 0.6145 +vn 0.7880 0.0395 0.6145 +vn 0.7880 0.0395 0.6144 +vn 0.7879 0.0395 0.6145 +vn 0.7886 -0.0000 0.6149 +vn -0.6127 0.0852 0.7858 +vn -0.6127 0.0852 0.7857 +vn -0.6149 -0.0000 0.7886 +vn 0.6149 -0.0039 -0.7886 +vn 0.6149 -0.0052 -0.7886 +vn 0.6149 0.0038 -0.7886 +vn -0.9190 0.0195 -0.3938 +vn -0.9190 0.0195 -0.3937 +vn -0.7886 -0.0000 -0.6149 +vn -0.7880 0.0395 -0.6144 +vn -0.7880 0.0395 -0.6145 +vn 0.6060 0.0195 0.7952 +vn 0.6060 0.0195 0.7953 +vn 0.6059 0.0195 0.7953 +vn 0.6060 -0.0195 0.7953 +vn 0.6060 -0.0195 0.7952 +vn 0.6059 -0.0195 0.7953 +vn -0.7880 -0.0395 -0.6144 +vn 0.6149 -0.0038 -0.7886 +vn 0.4726 -0.0000 0.8813 +vn 0.4727 -0.0000 0.8812 +vn 0.4726 -0.0002 0.8813 +vn -0.9699 -0.0000 -0.2435 +vn -0.9699 -0.0000 -0.2436 +vt 0.487034 0.050981 +vt 0.501133 0.046425 +vt 0.398872 0.917006 +vt 0.487101 0.050981 +vt 0.473275 0.024841 +vt 0.501133 0.046415 +vt 0.487101 0.053064 +vt 0.500955 0.046871 +vt 0.473275 0.032117 +vt 0.487034 0.053064 +vt 0.500955 0.046867 +vt 0.501292 0.047455 +vt 0.509607 0.922908 +vt 0.487034 0.052022 +vt 0.509607 0.902732 +vt 0.398872 0.937183 +vt 0.824124 0.046271 +vt 0.501060 0.047455 +vt 0.500908 0.046867 +vt 0.475700 0.032117 +vt 0.500908 0.046871 +vt 0.475700 0.024841 +vt 0.501038 0.046415 +vt 0.475700 0.026660 +vt 0.475700 0.028479 +vt 0.475700 0.030298 +vt 0.497345 0.947253 +vt 0.390301 0.927567 +vt 0.485041 0.949714 +vt 0.398689 0.927567 +vt 0.500837 0.047437 +vt 0.493429 0.949714 +vt 0.398689 0.949573 +vt 0.500837 0.047711 +vt 0.501029 0.046336 +vt 0.390301 0.949573 +vt 0.501029 0.046347 +vt 0.497345 0.969259 +vt 0.501060 0.046089 +vt 0.501038 0.046703 +vt 0.997618 0.821941 +vt 0.992766 0.003169 +vt 0.501292 0.046089 +vt 0.501133 0.046703 +vt 0.481199 0.963761 +vt 0.501292 0.046436 +vt 0.381537 0.937183 +vt 0.481199 0.983937 +vt 0.501292 0.046783 +vt 0.381537 0.957359 +vt 0.992766 0.813733 +vt 0.824124 0.799906 +vt 0.501060 0.046783 +vt 0.997618 0.005010 +vt 0.501038 0.046425 +vt 0.501133 0.046564 +vt 0.489866 0.963761 +vt 0.390204 0.917006 +vt 0.500846 0.046425 +vt 0.495250 0.051926 +vt 0.381913 0.905562 +vt 0.821822 0.005010 +vt 0.500942 0.046425 +vt 0.500942 0.046703 +vt 0.821822 0.821941 +vt 0.501020 0.047163 +vt 0.824213 0.003169 +vt 0.500846 0.046703 +vt 0.500837 0.047163 +vt 0.493429 0.927709 +vt 0.500846 0.046564 +vt 0.390301 0.905562 +vt 0.485041 0.927709 +vt 0.501020 0.047711 +vt 0.824213 0.813733 +vt 0.995819 0.799906 +vt 0.501036 0.046336 +vt 0.480551 0.032117 +vt 0.500814 0.046871 +vt 0.495103 0.056478 +vt 0.478126 0.032117 +vt 0.500861 0.046871 +vt 0.478126 0.030298 +vt 0.478126 0.028479 +vt 0.478126 0.026660 +vt 0.478126 0.024841 +vt 0.500942 0.046415 +vt 0.480551 0.024841 +vt 0.500846 0.046415 +vt 0.495103 0.051926 +vt 0.476307 0.026660 +vt 0.520833 0.250000 +vt 0.501014 0.046415 +vt 0.476307 0.024841 +vt 0.500814 0.046867 +vt 0.501029 0.046357 +vt 0.495250 0.056478 +vt 0.488957 0.969259 +vt 0.995819 0.046271 +vt 0.501036 0.046357 +vt 0.500861 0.046867 +vt 0.479167 1.000000 +vt 0.477520 0.032117 +vt 0.500873 0.046871 +vt 0.520833 1.000000 +vt 0.476307 0.032117 +vt 0.500896 0.046871 +vt 0.500000 1.000000 +vt 0.476913 0.032117 +vt 0.479167 0.250000 +vt 0.477520 0.024841 +vt 0.500966 0.046415 +vt 0.500000 0.250000 +vt 0.476913 0.024841 +vt 0.495250 0.054202 +vt 0.488957 0.947253 +vt 0.381913 0.927567 +vt 0.501292 0.047119 +vt 0.500939 0.922908 +vt 0.390204 0.957359 +vt 0.500939 0.902732 +vt 0.489866 0.983937 +vt 0.390204 0.937183 +vt 0.477520 0.026660 +vt 0.476913 0.026660 +vt 0.477520 0.030298 +vt 0.476913 0.030298 +vt 0.476913 0.028479 +vt 0.477520 0.028479 +vt 0.476307 0.030298 +vt 0.476307 0.028479 +s 1 +usemtl Book1.006 +f 25620/46035/17065 25621/46038/17065 25622/46041/17065 25623/46044/17065 25624/46048/17065 +f 25625/46053/17066 25623/46045/17067 25622/46042/17067 25626/46055/17067 +f 25626/46054/17068 25622/46043/17069 25621/46039/17069 25627/46056/17068 25628/46058/17070 25629/46059/17070 25630/46060/17070 +f 25631/46062/17071 25632/46064/17071 25633/46067/17071 25634/46070/17071 +f 25635/46073/17072 25636/46077/17073 25637/46080/17074 25638/46083/17072 25639/46087/17072 +f 25640/46089/17075 25620/46036/17076 25641/46090/17075 25636/46078/17077 25635/46074/17075 +f 25642/46093/17078 25643/46097/17079 25644/46098/17079 25645/46102/17080 25646/46105/17078 +f 25643/46096/17081 25640/46088/17081 25635/46075/17081 25644/46099/17081 +f 25645/46103/17082 25644/46100/17083 25647/46108/17083 25633/46068/17083 25632/46065/17083 +f 25644/46101/17084 25635/46076/17084 25639/46085/17084 25647/46109/17084 +f 25648/46112/17069 25649/46115/17085 25650/46117/17086 25651/46118/17086 25652/46119/17086 25653/46120/17085 25654/46122/17069 +f 25655/46125/17087 25628/46058/17070 25627/46056/17068 25656/46128/17087 +f 25657/46129/17088 25658/46135/17089 25649/46116/17088 25648/46113/17088 +f 25659/46136/17090 25660/46139/17090 25661/46142/17090 +f 25647/46110/17090 25639/46086/17090 25625/46051/17090 25658/46133/17090 +f 25633/46069/17091 25647/46111/17091 25658/46134/17091 25657/46130/17091 25634/46071/17092 +f 25662/46144/17081 25663/46147/17081 25656/46126/17081 +f 25654/46123/17093 25653/46121/17094 25643/46097/17095 25642/46093/17094 +f 25627/46057/17096 25621/46040/17097 25620/46036/17096 25640/46089/17098 +f 25654/46124/17071 25642/46094/17071 25664/46149/17071 25657/46131/17071 25648/46114/17071 +f 25639/46087/17099 25638/46083/17099 25665/46152/17099 25623/46046/17099 25625/46052/17099 +f 25666/46155/17065 25624/46049/17065 25623/46047/17065 25665/46153/17065 +f 25667/46158/17100 25668/46159/17069 25663/46148/17069 25662/46145/17100 +f 25669/46160/17100 25670/46161/17069 25671/46162/17069 25672/46163/17100 +f 25673/46164/17087 25630/46060/17070 25629/46059/17070 25674/46165/17087 +f 25670/46161/17069 25673/46164/17087 25674/46165/17087 25671/46162/17069 +f 25661/46143/17069 25660/46140/17087 25673/46164/17087 25670/46161/17069 +f 25660/46140/17087 25626/46054/17068 25630/46060/17070 25673/46164/17087 +f 25650/46117/17086 25669/46160/17100 25672/46163/17100 25651/46118/17086 +f 25649/46115/17085 25659/46137/17100 25669/46160/17100 25650/46117/17086 +f 25659/46137/17100 25661/46143/17069 25670/46161/17069 25669/46160/17100 +f 25652/46119/17086 25667/46158/17100 25662/46145/17100 25653/46120/17085 +f 25651/46118/17086 25672/46163/17100 25667/46158/17100 25652/46119/17086 +f 25672/46163/17100 25671/46162/17069 25668/46159/17069 25667/46158/17100 +f 25653/46121/17101 25662/46146/17102 25656/46127/17102 25627/46057/17103 25640/46089/17101 25643/46097/17101 +f 25658/46135/17104 25625/46053/17104 25626/46055/17104 25660/46141/17105 25659/46138/17105 25649/46116/17104 +f 25668/46159/17069 25655/46125/17087 25656/46128/17087 25663/46148/17069 +f 25671/46162/17069 25674/46165/17087 25655/46125/17087 25668/46159/17069 +f 25674/46165/17087 25629/46059/17070 25628/46058/17070 25655/46125/17087 +f 25637/46081/17065 25666/46157/17065 25665/46154/17065 25638/46084/17065 +f 25636/46079/17065 25641/46091/17065 25666/46156/17065 25637/46082/17065 +f 25641/46092/17065 25620/46037/17065 25624/46050/17065 25666/46157/17065 +f 25664/46150/17071 25631/46061/17071 25634/46072/17071 25657/46132/17071 +f 25642/46095/17071 25646/46106/17071 25631/46062/17071 25664/46151/17071 +f 25646/46107/17071 25645/46104/17071 25632/46066/17071 25631/46063/17071 +o book4.005 +v 3.018326 0.828342 2.826360 +v 3.016028 0.828342 2.821091 +v 2.768545 0.828342 2.929036 +v 2.770843 0.828342 2.934304 +v 2.894584 0.828342 2.880332 +v 2.777186 0.825410 2.931538 +v 2.768545 0.825410 2.929036 +v 3.016028 0.825410 2.821091 +v 2.954157 0.825410 2.848077 +v 2.892286 0.825410 2.875063 +v 2.830415 0.825410 2.902050 +v 2.929123 0.793342 2.959519 +v 2.963663 0.793342 3.038707 +v 2.839921 0.793342 3.092679 +v 2.805382 0.793342 3.013492 +v 3.078462 0.825410 2.981541 +v 3.087404 0.828342 2.984734 +v 2.963663 0.828342 3.038707 +v 2.839921 0.828342 3.092679 +v 2.843664 0.825410 3.083953 +v 3.011983 0.825410 2.829126 +v 3.052865 0.828342 2.905547 +v 3.018326 0.793342 2.826360 +v 3.011983 0.796274 2.829126 +v 3.078462 0.796274 2.981541 +v 3.087404 0.793342 2.984734 +v 3.052865 0.793342 2.905547 +v 2.843664 0.796274 3.083953 +v 2.768545 0.793342 2.929036 +v 2.768545 0.796274 2.929036 +v 2.830415 0.796274 2.902050 +v 2.892286 0.796274 2.875063 +v 2.954157 0.796274 2.848077 +v 3.016028 0.796274 2.821091 +v 3.016028 0.793342 2.821091 +v 2.953574 0.818126 2.846740 +v 3.015445 0.818126 2.819754 +v 2.770843 0.793342 2.934304 +v 2.777186 0.796274 2.931538 +v 2.767962 0.803558 2.927699 +v 2.767962 0.818126 2.927699 +v 2.767958 0.810842 2.927690 +v 3.015445 0.803558 2.819754 +v 3.015441 0.810842 2.819746 +v 2.894584 0.793342 2.880332 +v 2.805382 0.828342 3.013492 +v 2.929123 0.828342 2.959519 +v 2.953574 0.803558 2.846740 +v 2.953570 0.810842 2.846732 +v 2.829832 0.803558 2.900712 +v 2.829829 0.810842 2.900704 +v 2.891699 0.810842 2.873718 +v 2.891703 0.803558 2.873726 +v 2.829832 0.818126 2.900712 +v 2.891703 0.818126 2.873726 +vn -0.0000 1.0000 -0.0000 +vn -0.7844 -0.0195 0.6199 +vn -0.7845 -0.0195 0.6198 +vn -0.7845 -0.0195 0.6199 +vn -0.3998 0.0039 -0.9166 +vn -0.3998 -0.0000 -0.9166 +vn -0.3998 0.0052 -0.9166 +vn -0.0000 -1.0000 -0.0000 +vn 0.3984 -0.0852 0.9133 +vn 0.3983 -0.0852 0.9133 +vn 0.9159 -0.0395 -0.3995 +vn 0.9159 -0.0395 -0.3994 +vn 0.9159 0.0395 -0.3994 +vn 0.9159 0.0395 -0.3995 +vn 0.9166 -0.0000 -0.3998 +vn 0.3984 0.0852 0.9133 +vn 0.3983 0.0852 0.9133 +vn 0.3998 -0.0000 0.9166 +vn -0.3998 -0.0039 -0.9166 +vn -0.3998 -0.0052 -0.9166 +vn -0.3998 0.0038 -0.9166 +vn -0.7845 0.0195 0.6198 +vn -0.7844 0.0195 0.6199 +vn -0.7845 0.0195 0.6199 +vn -0.9166 -0.0000 0.3998 +vn -0.9159 0.0395 0.3995 +vn -0.9159 0.0395 0.3994 +vn 0.9880 0.0195 -0.1533 +vn 0.9880 0.0195 -0.1532 +vn 0.9880 -0.0195 -0.1532 +vn 0.9880 -0.0195 -0.1533 +vn -0.9159 -0.0395 0.3995 +vn -0.3998 -0.0038 -0.9166 +vn 1.0000 -0.0000 0.0050 +vn 1.0000 -0.0000 0.0049 +vn 1.0000 -0.0002 0.0050 +vn -0.6767 -0.0000 0.7363 +vt 0.487034 0.050981 +vt 0.501133 0.046425 +vt 0.398872 0.917006 +vt 0.487101 0.050981 +vt 0.473275 0.024841 +vt 0.501133 0.046415 +vt 0.487101 0.053064 +vt 0.500955 0.046871 +vt 0.473275 0.032117 +vt 0.487034 0.053064 +vt 0.500955 0.046867 +vt 0.501292 0.047455 +vt 0.509607 0.922908 +vt 0.487034 0.052022 +vt 0.509607 0.902732 +vt 0.398872 0.937183 +vt 0.824124 0.046271 +vt 0.501060 0.047455 +vt 0.500908 0.046867 +vt 0.475700 0.032117 +vt 0.500908 0.046871 +vt 0.475700 0.024841 +vt 0.501038 0.046415 +vt 0.475700 0.026660 +vt 0.475700 0.028479 +vt 0.475700 0.030298 +vt 0.497345 0.947253 +vt 0.390301 0.927567 +vt 0.485041 0.949714 +vt 0.398689 0.927567 +vt 0.500837 0.047437 +vt 0.493429 0.949714 +vt 0.398689 0.949573 +vt 0.500837 0.047711 +vt 0.501029 0.046336 +vt 0.390301 0.949573 +vt 0.501029 0.046347 +vt 0.497345 0.969259 +vt 0.501060 0.046089 +vt 0.501038 0.046703 +vt 0.997618 0.821941 +vt 0.992766 0.003169 +vt 0.501292 0.046089 +vt 0.501133 0.046703 +vt 0.481199 0.963761 +vt 0.501292 0.046436 +vt 0.381537 0.937183 +vt 0.481199 0.983937 +vt 0.501292 0.046783 +vt 0.381537 0.957359 +vt 0.992766 0.813733 +vt 0.824124 0.799906 +vt 0.501060 0.046783 +vt 0.997618 0.005010 +vt 0.501038 0.046425 +vt 0.501133 0.046564 +vt 0.489866 0.963761 +vt 0.390204 0.917006 +vt 0.500846 0.046425 +vt 0.495250 0.051926 +vt 0.381913 0.905562 +vt 0.821822 0.005010 +vt 0.500942 0.046425 +vt 0.500942 0.046703 +vt 0.821822 0.821941 +vt 0.501020 0.047163 +vt 0.824213 0.003169 +vt 0.500846 0.046703 +vt 0.500837 0.047163 +vt 0.493429 0.927709 +vt 0.500846 0.046564 +vt 0.390301 0.905562 +vt 0.485041 0.927709 +vt 0.501020 0.047711 +vt 0.824213 0.813733 +vt 0.995819 0.799906 +vt 0.501036 0.046336 +vt 0.480551 0.032117 +vt 0.500814 0.046871 +vt 0.495103 0.056478 +vt 0.478126 0.032117 +vt 0.500861 0.046871 +vt 0.478126 0.030298 +vt 0.478126 0.028479 +vt 0.478126 0.026660 +vt 0.478126 0.024841 +vt 0.500942 0.046415 +vt 0.480551 0.024841 +vt 0.500846 0.046415 +vt 0.495103 0.051926 +vt 0.476307 0.026660 +vt 0.520833 0.250000 +vt 0.501014 0.046415 +vt 0.476307 0.024841 +vt 0.500814 0.046867 +vt 0.501029 0.046357 +vt 0.495250 0.056478 +vt 0.488957 0.969259 +vt 0.995819 0.046271 +vt 0.501036 0.046357 +vt 0.500861 0.046867 +vt 0.479167 1.000000 +vt 0.477520 0.032117 +vt 0.500873 0.046871 +vt 0.520833 1.000000 +vt 0.476307 0.032117 +vt 0.500896 0.046871 +vt 0.500000 1.000000 +vt 0.476913 0.032117 +vt 0.479167 0.250000 +vt 0.477520 0.024841 +vt 0.500966 0.046415 +vt 0.500000 0.250000 +vt 0.476913 0.024841 +vt 0.495250 0.054202 +vt 0.488957 0.947253 +vt 0.381913 0.927567 +vt 0.501292 0.047119 +vt 0.500939 0.922908 +vt 0.390204 0.957359 +vt 0.500939 0.902732 +vt 0.489866 0.983937 +vt 0.390204 0.937183 +vt 0.477520 0.026660 +vt 0.476913 0.026660 +vt 0.477520 0.030298 +vt 0.476913 0.030298 +vt 0.476913 0.028479 +vt 0.477520 0.028479 +vt 0.476307 0.030298 +vt 0.476307 0.028479 +s 1 +usemtl Book1.007 +f 25675/46166/17106 25676/46169/17106 25677/46172/17106 25678/46175/17106 25679/46179/17106 +f 25680/46184/17107 25678/46176/17108 25677/46173/17108 25681/46186/17109 +f 25681/46185/17110 25677/46174/17111 25676/46170/17111 25682/46187/17110 25683/46189/17112 25684/46190/17112 25685/46191/17112 +f 25686/46193/17113 25687/46195/17113 25688/46198/17113 25689/46201/17113 +f 25690/46204/17114 25691/46208/17114 25692/46211/17114 25693/46214/17115 25694/46218/17115 +f 25695/46220/17116 25675/46167/17117 25696/46221/17116 25691/46209/17117 25690/46205/17116 +f 25697/46224/17118 25698/46228/17119 25699/46229/17119 25700/46233/17118 25701/46236/17118 +f 25698/46227/17120 25695/46219/17120 25690/46206/17120 25699/46230/17120 +f 25700/46234/17121 25699/46231/17121 25702/46239/17122 25688/46199/17122 25687/46196/17122 +f 25699/46232/17123 25690/46207/17123 25694/46216/17123 25702/46240/17123 +f 25703/46243/17111 25704/46246/17124 25705/46248/17125 25706/46249/17125 25707/46250/17125 25708/46251/17124 25709/46253/17111 +f 25710/46256/17126 25683/46189/17112 25682/46187/17110 25711/46259/17126 +f 25712/46260/17127 25713/46266/17128 25704/46247/17129 25703/46244/17127 +f 25714/46267/17130 25715/46270/17130 25716/46273/17130 +f 25702/46241/17130 25694/46217/17130 25680/46182/17130 25713/46264/17130 +f 25688/46200/17131 25702/46242/17131 25713/46265/17131 25712/46261/17131 25689/46202/17132 +f 25717/46275/17120 25718/46278/17120 25711/46257/17120 +f 25709/46254/17133 25708/46252/17134 25698/46228/17134 25697/46224/17133 +f 25682/46188/17135 25676/46171/17136 25675/46167/17136 25695/46220/17135 +f 25709/46255/17113 25697/46225/17113 25719/46280/17113 25712/46262/17113 25703/46245/17113 +f 25694/46218/17137 25693/46214/17137 25720/46283/17137 25678/46177/17137 25680/46183/17137 +f 25721/46286/17106 25679/46180/17106 25678/46178/17106 25720/46284/17106 +f 25722/46289/17138 25723/46290/17111 25718/46279/17111 25717/46276/17138 +f 25724/46291/17138 25725/46292/17111 25726/46293/17111 25727/46294/17138 +f 25728/46295/17126 25685/46191/17112 25684/46190/17112 25729/46296/17126 +f 25725/46292/17111 25728/46295/17126 25729/46296/17126 25726/46293/17111 +f 25716/46274/17111 25715/46271/17126 25728/46295/17126 25725/46292/17111 +f 25715/46271/17126 25681/46185/17110 25685/46191/17112 25728/46295/17126 +f 25705/46248/17125 25724/46291/17138 25727/46294/17138 25706/46249/17125 +f 25704/46246/17124 25714/46268/17138 25724/46291/17138 25705/46248/17125 +f 25714/46268/17138 25716/46274/17111 25725/46292/17111 25724/46291/17138 +f 25707/46250/17125 25722/46289/17138 25717/46276/17138 25708/46251/17124 +f 25706/46249/17125 25727/46294/17138 25722/46289/17138 25707/46250/17125 +f 25727/46294/17138 25726/46293/17111 25723/46290/17111 25722/46289/17138 +f 25708/46252/17139 25717/46277/17140 25711/46258/17140 25682/46188/17141 25695/46220/17139 25698/46228/17139 +f 25713/46266/17142 25680/46184/17142 25681/46186/17142 25715/46272/17142 25714/46269/17142 25704/46247/17142 +f 25723/46290/17111 25710/46256/17126 25711/46259/17126 25718/46279/17111 +f 25726/46293/17111 25729/46296/17126 25710/46256/17126 25723/46290/17111 +f 25729/46296/17126 25684/46190/17112 25683/46189/17112 25710/46256/17126 +f 25692/46212/17106 25721/46288/17106 25720/46285/17106 25693/46215/17106 +f 25691/46210/17106 25696/46222/17106 25721/46287/17106 25692/46213/17106 +f 25696/46223/17106 25675/46168/17106 25679/46181/17106 25721/46288/17106 +f 25719/46281/17113 25686/46192/17113 25689/46203/17113 25712/46263/17113 +f 25697/46226/17113 25701/46237/17113 25686/46193/17113 25719/46282/17113 +f 25701/46238/17113 25700/46235/17113 25687/46197/17113 25686/46194/17113 +o book4.006 +v 3.114271 0.828342 2.860471 +v 3.108708 0.828342 2.861916 +v 3.176577 0.828342 3.123247 +v 3.182141 0.828342 3.121802 +v 3.148206 0.828342 2.991136 +v 3.180401 0.825410 3.115104 +v 3.176577 0.825410 3.123247 +v 3.108708 0.825410 2.861916 +v 3.125675 0.825410 2.927248 +v 3.142642 0.825410 2.992581 +v 3.159610 0.825410 3.057914 +v 3.231824 0.793342 2.969420 +v 3.315442 0.793342 2.947704 +v 3.349377 0.793342 3.078369 +v 3.265759 0.793342 3.100085 +v 3.276954 0.825410 2.825371 +v 3.281507 0.828342 2.817039 +v 3.315442 0.828342 2.947704 +v 3.349377 0.828342 3.078369 +v 3.341344 0.825410 3.073306 +v 3.116011 0.825410 2.867169 +v 3.197889 0.828342 2.838755 +v 3.114271 0.793342 2.860471 +v 3.116011 0.796274 2.867169 +v 3.276954 0.796274 2.825371 +v 3.281507 0.793342 2.817039 +v 3.197889 0.793342 2.838755 +v 3.341344 0.796274 3.073306 +v 3.176577 0.793342 3.123247 +v 3.176577 0.796274 3.123247 +v 3.159610 0.796274 3.057914 +v 3.142642 0.796274 2.992581 +v 3.125675 0.796274 2.927248 +v 3.108708 0.796274 2.861916 +v 3.108708 0.793342 2.861916 +v 3.124263 0.818126 2.927615 +v 3.107296 0.818126 2.862283 +v 3.182141 0.793342 3.121802 +v 3.180401 0.796274 3.115104 +v 3.175165 0.803558 3.123613 +v 3.175165 0.818126 3.123613 +v 3.175156 0.810842 3.123616 +v 3.107296 0.803558 2.862283 +v 3.107287 0.810842 2.862285 +v 3.148206 0.793342 2.991136 +v 3.265759 0.828342 3.100085 +v 3.231824 0.828342 2.969420 +v 3.124263 0.803558 2.927615 +v 3.124254 0.810842 2.927618 +v 3.158198 0.803558 3.058280 +v 3.158189 0.810842 3.058283 +v 3.141222 0.810842 2.992950 +v 3.141230 0.803558 2.992948 +v 3.158198 0.818126 3.058281 +v 3.141230 0.818126 2.992948 +vn -0.0000 1.0000 -0.0000 +vn 0.4895 -0.0195 0.8718 +vn 0.4894 -0.0195 0.8718 +vn 0.4894 -0.0195 0.8719 +vn -0.9679 0.0039 0.2514 +vn -0.9679 -0.0000 0.2514 +vn -0.9679 0.0052 0.2514 +vn -0.0000 -1.0000 -0.0000 +vn 0.9644 -0.0852 -0.2505 +vn 0.9644 -0.0852 -0.2504 +vn -0.2512 -0.0395 -0.9671 +vn -0.2511 -0.0395 -0.9671 +vn -0.2511 -0.0395 -0.9672 +vn -0.2511 0.0395 -0.9671 +vn -0.2512 0.0395 -0.9671 +vn -0.2511 0.0395 -0.9672 +vn -0.2514 -0.0000 -0.9679 +vn 0.9644 0.0852 -0.2505 +vn 0.9644 0.0852 -0.2504 +vn 0.9679 -0.0000 -0.2514 +vn -0.9679 -0.0039 0.2514 +vn -0.9679 -0.0052 0.2514 +vn -0.9679 0.0038 0.2514 +vn 0.4894 0.0195 0.8718 +vn 0.4895 0.0195 0.8718 +vn 0.4894 0.0195 0.8719 +vn 0.2514 -0.0000 0.9679 +vn 0.2512 0.0395 0.9671 +vn 0.2511 0.0395 0.9671 +vn 0.0033 0.0195 -0.9998 +vn 0.0034 0.0195 -0.9998 +vn 0.0033 -0.0195 -0.9998 +vn 0.0034 -0.0195 -0.9998 +vn 0.2512 -0.0395 0.9671 +vn -0.9679 -0.0038 0.2514 +vn 0.1615 -0.0000 -0.9869 +vn 0.1614 -0.0000 -0.9869 +vn 0.1615 -0.0002 -0.9869 +vn 0.6213 -0.0000 0.7836 +vn 0.6212 -0.0000 0.7836 +vt 0.487034 0.050981 +vt 0.501133 0.046425 +vt 0.398872 0.917006 +vt 0.487101 0.050981 +vt 0.473275 0.024841 +vt 0.501133 0.046415 +vt 0.487101 0.053064 +vt 0.500955 0.046871 +vt 0.473275 0.032117 +vt 0.487034 0.053064 +vt 0.500955 0.046867 +vt 0.501292 0.047455 +vt 0.509607 0.922908 +vt 0.487034 0.052022 +vt 0.509607 0.902732 +vt 0.398872 0.937183 +vt 0.824124 0.046271 +vt 0.501060 0.047455 +vt 0.500908 0.046867 +vt 0.475700 0.032117 +vt 0.500908 0.046871 +vt 0.475700 0.024841 +vt 0.501038 0.046415 +vt 0.475700 0.026660 +vt 0.475700 0.028479 +vt 0.475700 0.030298 +vt 0.497345 0.947253 +vt 0.390301 0.927567 +vt 0.485041 0.949714 +vt 0.398689 0.927567 +vt 0.500837 0.047437 +vt 0.493429 0.949714 +vt 0.398689 0.949573 +vt 0.500837 0.047711 +vt 0.501029 0.046336 +vt 0.390301 0.949573 +vt 0.501029 0.046347 +vt 0.497345 0.969259 +vt 0.501060 0.046089 +vt 0.501038 0.046703 +vt 0.997618 0.821941 +vt 0.992766 0.003169 +vt 0.501292 0.046089 +vt 0.501133 0.046703 +vt 0.481199 0.963761 +vt 0.501292 0.046436 +vt 0.381537 0.937183 +vt 0.481199 0.983937 +vt 0.501292 0.046783 +vt 0.381537 0.957359 +vt 0.992766 0.813733 +vt 0.824124 0.799906 +vt 0.501060 0.046783 +vt 0.997618 0.005010 +vt 0.501038 0.046425 +vt 0.501133 0.046564 +vt 0.489866 0.963761 +vt 0.390204 0.917006 +vt 0.500846 0.046425 +vt 0.495250 0.051926 +vt 0.381913 0.905562 +vt 0.821822 0.005010 +vt 0.500942 0.046425 +vt 0.500942 0.046703 +vt 0.821822 0.821941 +vt 0.501020 0.047163 +vt 0.824213 0.003169 +vt 0.500846 0.046703 +vt 0.500837 0.047163 +vt 0.493429 0.927709 +vt 0.500846 0.046564 +vt 0.390301 0.905562 +vt 0.485041 0.927709 +vt 0.501020 0.047711 +vt 0.824213 0.813733 +vt 0.995819 0.799906 +vt 0.501036 0.046336 +vt 0.480551 0.032117 +vt 0.500814 0.046871 +vt 0.495103 0.056478 +vt 0.478126 0.032117 +vt 0.500861 0.046871 +vt 0.478126 0.030298 +vt 0.478126 0.028479 +vt 0.478126 0.026660 +vt 0.478126 0.024841 +vt 0.500942 0.046415 +vt 0.480551 0.024841 +vt 0.500846 0.046415 +vt 0.495103 0.051926 +vt 0.476307 0.026660 +vt 0.520833 0.250000 +vt 0.501014 0.046415 +vt 0.476307 0.024841 +vt 0.500814 0.046867 +vt 0.501029 0.046357 +vt 0.495250 0.056478 +vt 0.488957 0.969259 +vt 0.995819 0.046271 +vt 0.501036 0.046357 +vt 0.500861 0.046867 +vt 0.479167 1.000000 +vt 0.477520 0.032117 +vt 0.500873 0.046871 +vt 0.520833 1.000000 +vt 0.476307 0.032117 +vt 0.500896 0.046871 +vt 0.500000 1.000000 +vt 0.476913 0.032117 +vt 0.479167 0.250000 +vt 0.477520 0.024841 +vt 0.500966 0.046415 +vt 0.500000 0.250000 +vt 0.476913 0.024841 +vt 0.495250 0.054202 +vt 0.488957 0.947253 +vt 0.381913 0.927567 +vt 0.501292 0.047119 +vt 0.500939 0.922908 +vt 0.390204 0.957359 +vt 0.500939 0.902732 +vt 0.489866 0.983937 +vt 0.390204 0.937183 +vt 0.477520 0.026660 +vt 0.476913 0.026660 +vt 0.477520 0.030298 +vt 0.476913 0.030298 +vt 0.476913 0.028479 +vt 0.477520 0.028479 +vt 0.476307 0.030298 +vt 0.476307 0.028479 +s 1 +usemtl Book1.008 +f 25730/46297/17143 25731/46300/17143 25732/46303/17143 25733/46306/17143 25734/46310/17143 +f 25735/46315/17144 25733/46307/17145 25732/46304/17146 25736/46317/17145 +f 25736/46316/17147 25732/46305/17148 25731/46301/17148 25737/46318/17147 25738/46320/17149 25739/46321/17149 25740/46322/17149 +f 25741/46324/17150 25742/46326/17150 25743/46329/17150 25744/46332/17150 +f 25745/46335/17151 25746/46339/17151 25747/46342/17151 25748/46345/17152 25749/46349/17152 +f 25750/46351/17153 25730/46298/17154 25751/46352/17153 25746/46340/17155 25745/46336/17153 +f 25752/46355/17156 25753/46359/17157 25754/46360/17157 25755/46364/17158 25756/46367/17156 +f 25753/46358/17159 25750/46350/17159 25745/46337/17159 25754/46361/17159 +f 25755/46365/17160 25754/46362/17160 25757/46370/17161 25743/46330/17161 25742/46327/17161 +f 25754/46363/17162 25745/46338/17162 25749/46347/17162 25757/46371/17162 +f 25758/46374/17148 25759/46377/17163 25760/46379/17164 25761/46380/17164 25762/46381/17164 25763/46382/17163 25764/46384/17148 +f 25765/46387/17165 25738/46320/17149 25737/46318/17147 25766/46390/17165 +f 25767/46391/17166 25768/46397/17167 25759/46378/17166 25758/46375/17168 +f 25769/46398/17169 25770/46401/17169 25771/46404/17169 +f 25757/46372/17169 25749/46348/17169 25735/46313/17169 25768/46395/17169 +f 25743/46331/17170 25757/46373/17170 25768/46396/17170 25767/46392/17170 25744/46333/17171 +f 25772/46406/17159 25773/46409/17159 25766/46388/17159 +f 25764/46385/17172 25763/46383/17172 25753/46359/17173 25752/46355/17172 +f 25737/46319/17174 25731/46302/17174 25730/46298/17174 25750/46351/17175 +f 25764/46386/17150 25752/46356/17150 25774/46411/17150 25767/46393/17150 25758/46376/17150 +f 25749/46349/17176 25748/46345/17176 25775/46414/17176 25733/46308/17176 25735/46314/17176 +f 25776/46417/17143 25734/46311/17143 25733/46309/17143 25775/46415/17143 +f 25777/46420/17177 25778/46421/17148 25773/46410/17148 25772/46407/17177 +f 25779/46422/17177 25780/46423/17148 25781/46424/17148 25782/46425/17177 +f 25783/46426/17165 25740/46322/17149 25739/46321/17149 25784/46427/17165 +f 25780/46423/17148 25783/46426/17165 25784/46427/17165 25781/46424/17148 +f 25771/46405/17148 25770/46402/17165 25783/46426/17165 25780/46423/17148 +f 25770/46402/17165 25736/46316/17147 25740/46322/17149 25783/46426/17165 +f 25760/46379/17164 25779/46422/17177 25782/46425/17177 25761/46380/17164 +f 25759/46377/17163 25769/46399/17177 25779/46422/17177 25760/46379/17164 +f 25769/46399/17177 25771/46405/17148 25780/46423/17148 25779/46422/17177 +f 25762/46381/17164 25777/46420/17177 25772/46407/17177 25763/46382/17163 +f 25761/46380/17164 25782/46425/17177 25777/46420/17177 25762/46381/17164 +f 25782/46425/17177 25781/46424/17148 25778/46421/17148 25777/46420/17177 +f 25763/46383/17178 25772/46408/17179 25766/46389/17179 25737/46319/17180 25750/46351/17179 25753/46359/17179 +f 25768/46397/17181 25735/46315/17181 25736/46317/17181 25770/46403/17182 25769/46400/17182 25759/46378/17181 +f 25778/46421/17148 25765/46387/17165 25766/46390/17165 25773/46410/17148 +f 25781/46424/17148 25784/46427/17165 25765/46387/17165 25778/46421/17148 +f 25784/46427/17165 25739/46321/17149 25738/46320/17149 25765/46387/17165 +f 25747/46343/17143 25776/46419/17143 25775/46416/17143 25748/46346/17143 +f 25746/46341/17143 25751/46353/17143 25776/46418/17143 25747/46344/17143 +f 25751/46354/17143 25730/46299/17143 25734/46312/17143 25776/46419/17143 +f 25774/46412/17150 25741/46323/17150 25744/46334/17150 25767/46394/17150 +f 25752/46357/17150 25756/46368/17150 25741/46324/17150 25774/46413/17150 +f 25756/46369/17150 25755/46366/17150 25742/46328/17150 25741/46325/17150 +o laptop.007 +v 3.256114 1.065456 5.587902 +v 3.301126 1.065456 5.633417 +v 3.316698 1.065456 5.618016 +v 3.307564 1.065456 5.608780 +v 3.462313 0.795456 5.383985 +v 3.462313 0.826354 5.383985 +v 3.507324 0.826354 5.429500 +v 3.507324 0.795456 5.429500 +v 3.309096 0.849285 5.625534 +v 3.313081 0.838463 5.621593 +v 3.330064 0.840718 5.604798 +v 3.325609 0.853328 5.609204 +v 3.119712 0.802217 5.368415 +v 3.074700 0.802217 5.322900 +v 3.240123 0.795456 5.159308 +v 3.285135 0.795456 5.204823 +v 3.041895 0.849285 5.355343 +v 3.058408 0.853328 5.339013 +v 3.062863 0.840718 5.334606 +v 3.045879 0.838463 5.351402 +v 3.082921 1.052730 5.404799 +v 3.078936 1.065456 5.408740 +v 3.033924 1.065456 5.363225 +v 3.037910 1.052730 5.359284 +v 3.057915 1.054751 5.357769 +v 3.053952 1.054751 5.343419 +v 3.049497 1.065456 5.347825 +v 3.058631 1.065456 5.357061 +v 3.321154 1.054751 5.613610 +v 3.306848 1.054751 5.609488 +v 3.305111 1.052730 5.629476 +v 3.260099 1.052730 5.583960 +v 3.341902 0.802217 5.593092 +v 3.296890 0.802217 5.547576 +v 3.240123 0.826354 5.159308 +v 3.285135 0.826354 5.204823 +v 3.285907 0.832337 5.558438 +v 3.108728 0.832337 5.379277 +v 3.071997 0.840718 5.343843 +v 3.320930 0.840718 5.595562 +v 3.268630 0.827823 5.575524 +v 3.268069 0.838463 5.576078 +v 3.090891 0.838463 5.396917 +v 3.091452 0.827823 5.396362 +v 3.093156 0.795456 5.394677 +v 3.046440 0.827823 5.350847 +v 3.048145 0.795456 5.349162 +v 3.315346 0.795456 5.619353 +v 3.313642 0.827823 5.621039 +v 3.270334 0.795456 5.573838 +v 3.063717 0.832337 5.333762 +v 3.330918 0.832337 5.603953 +v 3.264085 0.849285 5.580019 +v 3.086906 0.849285 5.400858 +v 3.062371 0.853328 5.353363 +v 3.311304 0.853328 5.605082 +vn -0.0000 1.0000 -0.0000 +vn 0.7110 -0.0000 -0.7032 +vn 0.7032 -0.0000 0.7110 +vn -0.0202 -0.9996 0.0200 +vn -0.0204 -0.9996 0.0202 +vn -0.7032 -0.0000 -0.7110 +vn -0.6507 -0.4031 0.6435 +vn 0.9414 0.2102 -0.2639 +vn 0.9414 0.2100 -0.2640 +vn 0.2743 0.2102 -0.9384 +vn 0.2744 0.2102 -0.9384 +vn 0.2744 0.2101 -0.9384 +vn 0.7079 -0.0937 -0.7001 +vn 0.7038 0.1422 -0.6960 +vn -0.7091 -0.0742 0.7012 +vn -0.7091 -0.0739 0.7012 +vn -0.5410 -0.7964 -0.2704 +vn -0.5410 -0.7964 -0.2705 +vn 0.0668 -0.9956 -0.0661 +vn -0.1299 0.9832 0.1284 +vn 0.2644 -0.7964 0.5440 +vn -0.6314 -0.4598 0.6244 +vn -0.7108 -0.0272 0.7029 +vn -0.7108 -0.0275 0.7029 +vn 0.4846 0.7318 -0.4792 +vn 0.7107 0.0311 -0.7028 +vn 0.2316 0.5662 -0.7911 +vn 0.2317 0.5660 -0.7912 +vn -0.0462 0.0208 -0.9987 +vn -0.0462 0.0209 -0.9987 +vn 0.7937 0.5660 -0.2228 +vn 0.7937 0.5660 -0.2229 +vn 0.9981 0.0209 0.0573 +vn 0.9981 0.0208 0.0573 +vn 0.1262 -0.9841 -0.1248 +vn 0.1267 -0.9840 -0.1253 +vn 0.0174 0.9997 -0.0172 +vt 0.843507 0.115975 +vt 0.854445 0.126913 +vt 0.859914 0.126913 +vt 0.843507 0.110506 +vt 0.846470 0.077745 +vt 0.859914 0.128244 +vt 0.758802 0.142316 +vt 0.817861 0.142316 +vt 0.758802 0.182602 +vt 0.817861 0.182602 +vt 0.854445 0.128244 +vt 0.628827 0.198692 +vt 0.847470 0.129216 +vt 0.876080 0.129216 +vt 0.876080 0.212549 +vt 0.884870 0.418901 +vt 0.046050 0.035046 +vt 0.847470 0.212549 +vt 0.602943 0.198692 +vt 0.872433 0.418901 +vt 0.714726 0.043387 +vt 0.706351 0.077745 +vt 0.636292 0.077745 +vt 0.862684 0.131882 +vt 0.692964 0.043387 +vt 0.836163 0.196454 +vt 0.609771 0.142316 +vt 0.816938 0.019277 +vt 0.679134 0.142316 +vt 0.897019 0.170385 +vt 0.654712 0.131781 +vt 0.680596 0.131781 +vt 0.931137 0.218471 +vt 0.680596 0.198692 +vt 0.654712 0.198692 +vt 0.931137 0.301804 +vt 0.714726 0.121039 +vt 0.484881 0.500000 +vt 0.787408 0.125370 +vt 0.910448 0.066311 +vt 0.457664 0.435429 +vt 0.388300 0.435429 +vt 0.718045 0.125370 +vt 0.414821 0.500000 +vt 0.692964 0.121039 +vt 0.554940 0.416667 +vt 0.838909 0.121444 +vt 0.736487 0.095155 +vt 0.625000 0.416667 +vt 0.843507 0.121444 +vt 0.848976 0.126913 +vt 0.843507 0.126913 +vt 0.625000 0.500000 +vt 0.736487 0.121039 +vt 0.554940 0.500000 +vt 0.812478 0.109692 +vt 0.748497 0.222888 +vt 0.884232 0.996204 +vt 0.979811 0.026026 +vt 0.812478 0.149978 +vt 0.979811 0.066311 +vt 0.527027 0.435429 +vt 0.881841 0.149978 +vt 0.843507 0.128244 +vt 0.596390 0.435429 +vt 0.881841 0.109692 +vt 0.817861 0.222888 +vt 0.848976 0.128244 +vt 0.689439 0.142316 +vt 0.886301 0.019277 +vt 0.748497 0.142316 +vt 0.689439 0.182602 +vt 0.748497 0.182602 +vt 0.010615 0.996204 +vt 0.886301 0.059563 +vt 0.838909 0.110506 +vt 0.736487 0.043387 +vt 0.776411 0.077745 +vt 0.838909 0.115975 +vt 0.736487 0.069271 +vt 0.602943 0.131781 +vt 0.872433 0.137963 +vt 0.740196 0.145777 +vt 0.628827 0.131781 +vt 0.813686 0.170385 +vt 0.823529 0.145777 +vt 0.959746 0.218471 +vt 0.689482 0.198692 +vt 0.730721 0.035046 +vt 0.959746 0.301804 +vt 0.813019 0.143230 +vt 0.817575 0.126913 +vt 0.722014 0.258843 +vt 0.813019 0.183516 +vt 0.965588 0.139222 +vt 0.827101 0.120031 +vt 0.826320 0.183516 +vt 0.978888 0.139222 +vt 0.388300 0.395143 +vt 0.609771 0.222888 +vt 0.718045 0.085084 +vt 0.826320 0.143230 +vt 0.836163 0.236739 +vt 0.880457 0.113700 +vt 0.609771 0.182602 +vt 0.689904 0.069271 +vt 0.829067 0.115975 +vt 0.897126 0.092177 +vt 0.862684 0.215216 +vt 0.906978 0.092177 +vt 0.692964 0.069271 +vt 1.005409 0.160745 +vt 0.414821 0.416667 +vt 0.692964 0.095155 +vt 0.689904 0.095155 +vt 0.995557 0.160745 +vt 0.829067 0.121444 +vt 0.680596 0.095155 +vt 0.897019 0.135804 +vt 0.654712 0.121039 +vt 0.689904 0.121039 +vt 0.829067 0.126913 +vt 0.680596 0.121039 +vt 0.680596 0.043387 +vt 0.872433 0.092864 +vt 0.740196 0.111196 +vt 0.689904 0.043387 +vt 0.885461 0.092864 +vt 0.829067 0.110506 +vt 0.680596 0.069271 +vt 0.813686 0.135804 +vt 0.823529 0.111196 +vt 0.660539 0.121039 +vt 0.822863 0.126913 +vt 0.730721 0.468669 +vt 0.791824 0.201543 +vt 0.814932 0.126913 +vt 0.046050 0.468669 +vt 0.714726 0.069271 +vt 0.714726 0.095155 +vt 0.679134 0.222888 +vt 0.884232 0.499889 +vt 0.787408 0.085084 +vt 0.910448 0.026026 +vt 0.010615 0.499889 +vt 0.679134 0.182602 +vt 0.816938 0.059563 +s 1 +usemtl Computer.007 +f 25785/46429/17183 25786/46430/17183 25787/46433/17183 25788/46438/17183 +f 25789/46440/17184 25790/46441/17184 25791/46442/17184 25792/46445/17184 +f 25793/46449/17185 25794/46450/17185 25795/46454/17185 25796/46456/17185 +f 25797/46458/17186 25798/46459/17187 25799/46461/17187 25800/46462/17186 +f 25801/46465/17188 25802/46468/17188 25803/46469/17188 25804/46471/17188 +f 25805/46473/17189 25806/46476/17189 25807/46480/17189 25808/46482/17189 +f 25809/46483/17190 25810/46487/17190 25811/46490/17191 25812/46493/17190 +f 25813/46496/17192 25814/46499/17193 25788/46436/17194 25787/46434/17192 +f 25814/46500/17195 25809/46484/17195 25812/46494/17195 25788/46437/17195 +f 25815/46503/17189 25786/46431/17189 25785/46428/17189 25816/46506/17189 +f 25816/46506/17189 25785/46428/17189 25806/46477/17189 25805/46474/17189 +f 25817/46508/17187 25818/46511/17186 25789/46439/17186 25792/46446/17187 +f 25818/46511/17186 25797/46458/17186 25800/46462/17186 25789/46439/17186 +f 25799/46460/17184 25819/46514/17184 25820/46517/17184 25800/46463/17184 +f 25807/46479/17183 25806/46478/17183 25812/46495/17183 25811/46491/17183 +f 25806/46478/17183 25785/46429/17183 25788/46438/17183 25812/46495/17183 +f 25821/46518/17196 25822/46521/17196 25823/46524/17196 25824/46529/17196 +f 25825/46533/17197 25826/46538/17198 25827/46541/17198 25828/46542/17197 +f 25829/46545/17197 25828/46542/17197 25830/46548/17197 25831/46550/17197 +f 25832/46551/17197 25833/46554/17197 25825/46533/17197 25834/46557/17197 +f 25834/46557/17197 25825/46533/17197 25828/46542/17197 25829/46545/17197 +f 25831/46550/17188 25830/46548/17188 25835/46560/17188 25819/46515/17188 25799/46461/17188 25798/46459/17188 +f 25792/46447/17185 25791/46443/17185 25836/46563/17185 25833/46555/17185 25832/46552/17185 25817/46509/17185 +f 25822/46522/17199 25828/46543/17200 25827/46539/17199 25823/46525/17199 +f 25803/46469/17201 25823/46526/17201 25827/46540/17201 25804/46471/17201 +f 25835/46561/17202 25830/46549/17202 25828/46544/17202 25822/46523/17202 +f 25821/46519/17202 25825/46534/17202 25833/46556/17202 25836/46564/17202 +f 25824/46530/17201 25795/46453/17201 25794/46451/17201 25826/46536/17201 +f 25821/46520/17203 25824/46531/17203 25826/46537/17203 25825/46535/17203 +f 25826/46538/17204 25837/46566/17204 25838/46567/17204 25827/46541/17204 +f 25837/46566/17205 25816/46507/17205 25805/46475/17205 25838/46567/17205 +f 25794/46452/17204 25793/46448/17204 25837/46566/17204 25826/46538/17204 +f 25793/46448/17206 25815/46504/17206 25816/46507/17205 25837/46566/17205 +f 25824/46532/17207 25823/46527/17207 25839/46568/17207 25840/46573/17207 +f 25840/46572/17208 25839/46569/17208 25809/46485/17208 25814/46501/17208 +f 25795/46454/17209 25824/46532/17210 25840/46573/17210 25796/46456/17210 +f 25796/46455/17211 25840/46574/17212 25814/46502/17212 25813/46497/17211 +f 25823/46528/17213 25803/46470/17214 25802/46466/17214 25839/46570/17214 +f 25839/46571/17215 25802/46467/17216 25810/46488/17216 25809/46486/17215 +f 25827/46541/17204 25838/46567/17204 25801/46464/17204 25804/46472/17204 +f 25838/46567/17205 25805/46475/17205 25808/46481/17206 25801/46464/17206 +f 25807/46480/17188 25811/46492/17188 25810/46489/17188 25808/46482/17188 +f 25808/46482/17188 25810/46489/17188 25802/46468/17188 25801/46465/17188 +f 25786/46432/17185 25815/46505/17185 25813/46498/17185 25787/46435/17185 +f 25815/46505/17185 25793/46449/17185 25796/46456/17185 25813/46498/17185 +f 25834/46558/17217 25829/46546/17217 25797/46457/17217 25818/46512/17217 +f 25832/46553/17218 25834/46559/17217 25818/46513/17217 25817/46510/17218 +f 25829/46547/17217 25831/46550/17218 25798/46459/17218 25797/46458/17217 +f 25836/46565/17219 25791/46444/17219 25819/46516/17219 25835/46562/17219 +f 25789/46440/17184 25800/46463/17184 25820/46517/17184 25790/46441/17184 +o Cube.011 +v -9.974173 1.338449 4.342150 +v -9.974173 1.378448 4.342150 +v -10.240700 1.378448 4.204443 +v -10.240700 1.338449 4.204443 +v -10.102993 1.378448 3.937916 +v -10.102993 1.338449 3.937916 +v -9.836466 1.378448 4.075623 +v -9.836466 1.338449 4.075623 +vn -0.4590 -0.0000 0.8884 +vn -0.8884 -0.0000 -0.4590 +vn 0.4590 -0.0000 -0.8884 +vn 0.8884 -0.0000 0.4590 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vt 0.375000 0.000000 +vt 0.332579 0.651772 +vt 0.380216 0.649803 +vt 0.625000 0.000000 +vt 0.332579 0.651772 +vt 0.832372 0.843789 +vt 0.625000 0.250000 +vt 1.211269 0.822006 +vt 0.832372 0.195384 +vt 0.375000 0.250000 +vt 1.211269 0.427994 +vt 0.380216 0.649803 +vt -0.186958 0.822006 +vt 0.649803 0.177559 +vt 0.183967 0.195384 +vt -0.186958 0.427994 +vt 0.399803 0.177559 +vt 0.380216 0.649803 +vt 0.649803 0.427559 +vt 0.332579 0.651772 +vt 0.183967 0.843789 +vt 0.399803 0.427559 +vt 0.332579 0.651772 +vt 0.380216 0.649803 +s 1 +usemtl Pizza.001 +f 25841/46575/17220 25842/46578/17220 25843/46581/17220 25844/46584/17220 +f 25844/46585/17221 25843/46582/17221 25845/46587/17221 25846/46590/17221 +f 25846/46591/17222 25845/46588/17222 25847/46593/17222 25848/46596/17222 +f 25848/46597/17223 25847/46594/17223 25842/46579/17223 25841/46576/17223 +f 25844/46586/17224 25846/46592/17224 25848/46598/17224 25841/46577/17224 +f 25845/46589/17225 25843/46583/17225 25842/46580/17225 25847/46595/17225 +o Cube.012 +v -9.829834 1.338449 5.232229 +v -9.829834 1.378448 5.232229 +v -10.076317 1.378448 5.403244 +v -10.076317 1.338449 5.403244 +v -10.247332 1.378448 5.156761 +v -10.247332 1.338449 5.156761 +v -10.000849 1.378448 4.985746 +v -10.000849 1.338449 4.985746 +vn 0.5700 -0.0000 0.8216 +vn -0.8216 -0.0000 0.5700 +vn -0.5700 -0.0000 -0.8216 +vn 0.8216 -0.0000 -0.5700 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vt 0.375000 0.000000 +vt 0.332579 0.651772 +vt 0.380216 0.649803 +vt 0.625000 0.000000 +vt 0.332579 0.651772 +vt 0.832372 0.843789 +vt 0.625000 0.250000 +vt 1.211269 0.822006 +vt 0.832372 0.195384 +vt 0.375000 0.250000 +vt 1.211269 0.427994 +vt 0.380216 0.649803 +vt -0.186958 0.822006 +vt 0.649803 0.177559 +vt 0.183967 0.195384 +vt -0.186958 0.427994 +vt 0.399803 0.177559 +vt 0.380216 0.649803 +vt 0.649803 0.427559 +vt 0.332579 0.651772 +vt 0.183967 0.843789 +vt 0.399803 0.427559 +vt 0.332579 0.651772 +vt 0.380216 0.649803 +s 1 +usemtl Pizza.002 +f 25849/46599/17226 25850/46602/17226 25851/46605/17226 25852/46608/17226 +f 25852/46609/17227 25851/46606/17227 25853/46611/17227 25854/46614/17227 +f 25854/46615/17228 25853/46612/17228 25855/46617/17228 25856/46620/17228 +f 25856/46621/17229 25855/46618/17229 25850/46603/17229 25849/46600/17229 +f 25852/46610/17230 25854/46616/17230 25856/46622/17230 25849/46601/17230 +f 25853/46613/17231 25851/46607/17231 25850/46604/17231 25855/46619/17231 +o Cube.013 +v -9.645522 1.338449 5.071747 +v -9.645522 1.378448 5.071747 +v -9.349763 1.378448 5.021483 +v -9.349763 1.338449 5.021483 +v -9.299499 1.378448 5.317242 +v -9.299499 1.338449 5.317242 +v -9.595258 1.378448 5.367507 +v -9.595258 1.338449 5.367507 +vn -0.1675 -0.0000 -0.9859 +vn 0.9859 -0.0000 -0.1675 +vn 0.1675 -0.0000 0.9859 +vn -0.9859 -0.0000 0.1675 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vt 0.375000 0.000000 +vt 0.332579 0.651772 +vt 0.380216 0.649803 +vt 0.625000 0.000000 +vt 0.332579 0.651772 +vt 0.832372 0.843789 +vt 0.625000 0.250000 +vt 1.211269 0.822006 +vt 0.832372 0.195384 +vt 0.375000 0.250000 +vt 1.211269 0.427994 +vt 0.380216 0.649803 +vt -0.186958 0.822006 +vt 0.649803 0.177559 +vt 0.183967 0.195384 +vt -0.186958 0.427994 +vt 0.399803 0.177559 +vt 0.380216 0.649803 +vt 0.649803 0.427559 +vt 0.332579 0.651772 +vt 0.183967 0.843789 +vt 0.399803 0.427559 +vt 0.332579 0.651772 +vt 0.380216 0.649803 +s 1 +usemtl Pizza.003 +f 25857/46623/17232 25858/46626/17232 25859/46629/17232 25860/46632/17232 +f 25860/46633/17233 25859/46630/17233 25861/46635/17233 25862/46638/17233 +f 25862/46639/17234 25861/46636/17234 25863/46641/17234 25864/46644/17234 +f 25864/46645/17235 25863/46642/17235 25858/46627/17235 25857/46624/17235 +f 25860/46634/17236 25862/46640/17236 25864/46646/17236 25857/46625/17236 +f 25861/46637/17237 25859/46631/17237 25858/46628/17237 25863/46643/17237 +o Cube.014 +v -9.667698 1.338449 4.376728 +v -9.667698 1.378448 4.376728 +v -9.433869 1.378448 4.188780 +v -9.433869 1.338449 4.188780 +v -9.245922 1.378448 4.422608 +v -9.245922 1.338449 4.422608 +v -9.479751 1.378448 4.610556 +v -9.479751 1.338449 4.610556 +vn -0.6265 -0.0000 -0.7794 +vn 0.7794 -0.0000 -0.6265 +vn 0.6265 -0.0000 0.7794 +vn -0.7794 -0.0000 0.6265 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vt 0.375000 0.000000 +vt 0.332579 0.651772 +vt 0.380216 0.649803 +vt 0.625000 0.000000 +vt 0.332579 0.651772 +vt 0.832372 0.843789 +vt 0.625000 0.250000 +vt 1.211269 0.822006 +vt 0.832372 0.195384 +vt 0.375000 0.250000 +vt 1.211269 0.427994 +vt 0.380216 0.649803 +vt -0.186958 0.822006 +vt 0.649803 0.177559 +vt 0.183967 0.195384 +vt -0.186958 0.427994 +vt 0.399803 0.177559 +vt 0.380216 0.649803 +vt 0.649803 0.427559 +vt 0.332579 0.651772 +vt 0.183967 0.843789 +vt 0.399803 0.427559 +vt 0.332579 0.651772 +vt 0.380216 0.649803 +s 1 +usemtl Pizza.004 +f 25865/46647/17238 25866/46650/17238 25867/46653/17238 25868/46656/17238 +f 25868/46657/17239 25867/46654/17239 25869/46659/17239 25870/46662/17239 +f 25870/46663/17240 25869/46660/17240 25871/46665/17240 25872/46668/17240 +f 25872/46669/17241 25871/46666/17241 25866/46651/17241 25865/46648/17241 +f 25868/46658/17242 25870/46664/17242 25872/46670/17242 25865/46649/17242 +f 25869/46661/17243 25867/46655/17243 25866/46652/17243 25871/46667/17243 +o book5.001 +v -11.328348 0.689048 -1.355271 +v -11.334096 0.689048 -1.355271 +v -11.334096 0.689048 -1.085271 +v -11.328348 0.689048 -1.085271 +v -11.328348 0.689048 -1.220271 +v -11.328348 0.686116 -1.092191 +v -11.334096 0.686116 -1.085271 +v -11.334096 0.686116 -1.355271 +v -11.334096 0.686116 -1.287771 +v -11.334096 0.686116 -1.220271 +v -11.334096 0.686116 -1.152771 +v -11.241956 0.654048 -1.220271 +v -11.155564 0.654048 -1.220271 +v -11.155564 0.654048 -1.085271 +v -11.241956 0.654048 -1.085271 +v -11.162066 0.686116 -1.348351 +v -11.155564 0.689048 -1.355271 +v -11.155564 0.689048 -1.220271 +v -11.155564 0.689048 -1.085271 +v -11.162066 0.686116 -1.092191 +v -11.328348 0.686116 -1.348351 +v -11.241956 0.689048 -1.355271 +v -11.328348 0.654048 -1.355271 +v -11.328348 0.656980 -1.348351 +v -11.162066 0.656980 -1.348351 +v -11.155564 0.654048 -1.355271 +v -11.241956 0.654048 -1.355271 +v -11.162066 0.656980 -1.092191 +v -11.334096 0.654048 -1.085271 +v -11.334096 0.656980 -1.085271 +v -11.334096 0.656980 -1.152771 +v -11.334096 0.656980 -1.220271 +v -11.334096 0.656980 -1.287771 +v -11.334096 0.656980 -1.355271 +v -11.334096 0.654048 -1.355271 +v -11.335555 0.678832 -1.287771 +v -11.335555 0.678832 -1.355271 +v -11.328348 0.654048 -1.085271 +v -11.328348 0.656980 -1.092191 +v -11.335555 0.664264 -1.085271 +v -11.335555 0.678832 -1.085271 +v -11.335564 0.671548 -1.085271 +v -11.335555 0.664264 -1.355271 +v -11.335564 0.671548 -1.355271 +v -11.328348 0.654048 -1.220271 +v -11.241956 0.689048 -1.085271 +v -11.241956 0.689048 -1.220271 +v -11.335555 0.664264 -1.287771 +v -11.335564 0.671548 -1.287771 +v -11.335555 0.664264 -1.152771 +v -11.335564 0.671548 -1.152771 +v -11.335564 0.671548 -1.220271 +v -11.335555 0.664264 -1.220271 +v -11.335555 0.678832 -1.152771 +v -11.335555 0.678832 -1.220271 +vn -0.0000 1.0000 -0.0000 +vn 0.2546 -0.0195 0.9669 +vn 0.2545 -0.0195 0.9669 +vn -1.0000 0.0039 -0.0000 +vn -1.0000 -0.0000 -0.0000 +vn -1.0000 0.0052 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn 0.9964 -0.0852 -0.0000 +vn -0.0000 -0.0395 -0.9992 +vn 0.0001 -0.0395 -0.9992 +vn -0.0000 0.0395 -0.9992 +vn 0.0001 0.0395 -0.9992 +vn -0.0000 -0.0000 -1.0000 +vn 0.9964 0.0852 -0.0000 +vn 1.0000 -0.0000 -0.0000 +vn -1.0000 -0.0039 -0.0000 +vn -1.0000 -0.0052 -0.0000 +vn -1.0000 0.0038 -0.0000 +vn 0.2545 0.0195 0.9669 +vn 0.2546 0.0195 0.9669 +vn -0.0000 -0.0000 1.0000 +vn 0.0001 0.0395 0.9992 +vn -0.0000 0.0395 0.9992 +vn 0.2545 0.0195 -0.9669 +vn 0.2546 0.0195 -0.9669 +vn 0.2545 -0.0195 -0.9669 +vn 0.2546 -0.0195 -0.9669 +vn -0.0000 -0.0395 0.9992 +vn 0.0001 -0.0395 0.9992 +vn -1.0000 -0.0038 -0.0000 +vn 0.4043 -0.0000 -0.9146 +vn 0.4043 -0.0002 -0.9146 +vn 0.4043 -0.0000 0.9146 +vt 0.487034 0.050981 +vt 0.501133 0.046425 +vt 0.905793 0.919467 +vt 0.487101 0.050981 +vt 0.473275 0.024841 +vt 0.501133 0.046415 +vt 0.487101 0.053064 +vt 0.500955 0.046871 +vt 0.473275 0.032117 +vt 0.487034 0.053064 +vt 0.500955 0.046867 +vt 0.501292 0.047455 +vt 0.509607 0.922908 +vt 0.487034 0.052022 +vt 0.509607 0.902732 +vt 0.905793 0.939643 +vt 0.824124 0.046271 +vt 0.501060 0.047455 +vt 0.500908 0.046867 +vt 0.475700 0.032117 +vt 0.500908 0.046871 +vt 0.475700 0.024841 +vt 0.501038 0.046415 +vt 0.475700 0.026660 +vt 0.475700 0.028479 +vt 0.475700 0.030298 +vt 0.497345 0.947253 +vt 0.894761 0.927567 +vt 0.485041 0.949714 +vt 0.903149 0.927567 +vt 0.500837 0.047437 +vt 0.493429 0.949714 +vt 0.903149 0.949573 +vt 0.500837 0.047711 +vt 0.501029 0.046336 +vt 0.894761 0.949573 +vt 0.501029 0.046347 +vt 0.497345 0.969259 +vt 0.501060 0.046089 +vt 0.501038 0.046703 +vt 0.997618 0.821941 +vt 0.992766 0.003169 +vt 0.501292 0.046089 +vt 0.501133 0.046703 +vt 0.481199 0.963761 +vt 0.501292 0.046436 +vt 0.888458 0.939643 +vt 0.481199 0.983937 +vt 0.501292 0.046783 +vt 0.888458 0.959820 +vt 0.992766 0.813733 +vt 0.824124 0.799906 +vt 0.501060 0.046783 +vt 0.997618 0.005010 +vt 0.501038 0.046425 +vt 0.501133 0.046564 +vt 0.489866 0.963761 +vt 0.897125 0.919467 +vt 0.500846 0.046425 +vt 0.495250 0.051926 +vt 0.886373 0.905562 +vt 0.821822 0.005010 +vt 0.500942 0.046425 +vt 0.500942 0.046703 +vt 0.821822 0.821941 +vt 0.501020 0.047163 +vt 0.824213 0.003169 +vt 0.500846 0.046703 +vt 0.500837 0.047163 +vt 0.493429 0.927709 +vt 0.500846 0.046564 +vt 0.894761 0.905562 +vt 0.485041 0.927709 +vt 0.501020 0.047711 +vt 0.824213 0.813733 +vt 0.995819 0.799906 +vt 0.501036 0.046336 +vt 0.480551 0.032117 +vt 0.500814 0.046871 +vt 0.495103 0.056478 +vt 0.478126 0.032117 +vt 0.500861 0.046871 +vt 0.478126 0.030298 +vt 0.478126 0.028479 +vt 0.478126 0.026660 +vt 0.478126 0.024841 +vt 0.500942 0.046415 +vt 0.480551 0.024841 +vt 0.500846 0.046415 +vt 0.495103 0.051926 +vt 0.476307 0.026660 +vt 0.520833 0.250000 +vt 0.501014 0.046415 +vt 0.476307 0.024841 +vt 0.500814 0.046867 +vt 0.501029 0.046357 +vt 0.495250 0.056478 +vt 0.488957 0.969259 +vt 0.995819 0.046271 +vt 0.501036 0.046357 +vt 0.500861 0.046867 +vt 0.479167 1.000000 +vt 0.477520 0.032117 +vt 0.500873 0.046871 +vt 0.520833 1.000000 +vt 0.476307 0.032117 +vt 0.500896 0.046871 +vt 0.500000 1.000000 +vt 0.476913 0.032117 +vt 0.479167 0.250000 +vt 0.477520 0.024841 +vt 0.500966 0.046415 +vt 0.500000 0.250000 +vt 0.476913 0.024841 +vt 0.495250 0.054202 +vt 0.488957 0.947253 +vt 0.886373 0.927567 +vt 0.501292 0.047119 +vt 0.500939 0.922908 +vt 0.897125 0.959820 +vt 0.500939 0.902732 +vt 0.489866 0.983937 +vt 0.897125 0.939643 +vt 0.477520 0.026660 +vt 0.476913 0.026660 +vt 0.477520 0.030298 +vt 0.476913 0.030298 +vt 0.476913 0.028479 +vt 0.477520 0.028479 +vt 0.476307 0.030298 +vt 0.476307 0.028479 +s 1 +usemtl Book1.009 +f 25873/46671/17244 25874/46674/17244 25875/46677/17244 25876/46680/17244 25877/46684/17244 +f 25878/46689/17245 25876/46681/17246 25875/46678/17246 25879/46691/17246 +f 25879/46690/17247 25875/46679/17248 25874/46675/17248 25880/46692/17247 25881/46694/17249 25882/46695/17249 25883/46696/17249 +f 25884/46698/17250 25885/46700/17250 25886/46703/17250 25887/46706/17250 +f 25888/46709/17251 25889/46713/17251 25890/46716/17251 25891/46719/17251 25892/46723/17251 +f 25893/46725/17252 25873/46672/17252 25894/46726/17252 25889/46714/17253 25888/46710/17252 +f 25895/46729/17254 25896/46733/17254 25897/46734/17254 25898/46738/17255 25899/46741/17254 +f 25896/46732/17256 25893/46724/17256 25888/46711/17256 25897/46735/17256 +f 25898/46739/17257 25897/46736/17257 25900/46744/17257 25886/46704/17257 25885/46701/17257 +f 25897/46737/17258 25888/46712/17258 25892/46721/17258 25900/46745/17258 +f 25901/46748/17248 25902/46751/17259 25903/46753/17260 25904/46754/17260 25905/46755/17260 25906/46756/17259 25907/46758/17248 +f 25908/46761/17261 25881/46694/17249 25880/46692/17247 25909/46764/17261 +f 25910/46765/17262 25911/46771/17263 25902/46752/17262 25901/46749/17262 +f 25912/46772/17264 25913/46775/17264 25914/46778/17264 +f 25900/46746/17264 25892/46722/17264 25878/46687/17264 25911/46769/17264 +f 25886/46705/17265 25900/46747/17266 25911/46770/17266 25910/46766/17266 25887/46707/17266 +f 25915/46780/17256 25916/46783/17256 25909/46762/17256 +f 25907/46759/17267 25906/46757/17267 25896/46733/17268 25895/46729/17267 +f 25880/46693/17269 25874/46676/17269 25873/46672/17269 25893/46725/17270 +f 25907/46760/17250 25895/46730/17250 25917/46785/17250 25910/46767/17250 25901/46750/17250 +f 25892/46723/17271 25891/46719/17272 25918/46788/17271 25876/46682/17271 25878/46688/17271 +f 25919/46791/17244 25877/46685/17244 25876/46683/17244 25918/46789/17244 +f 25920/46794/17273 25921/46795/17248 25916/46784/17248 25915/46781/17273 +f 25922/46796/17273 25923/46797/17248 25924/46798/17248 25925/46799/17273 +f 25926/46800/17261 25883/46696/17249 25882/46695/17249 25927/46801/17261 +f 25923/46797/17248 25926/46800/17261 25927/46801/17261 25924/46798/17248 +f 25914/46779/17248 25913/46776/17261 25926/46800/17261 25923/46797/17248 +f 25913/46776/17261 25879/46690/17247 25883/46696/17249 25926/46800/17261 +f 25903/46753/17260 25922/46796/17273 25925/46799/17273 25904/46754/17260 +f 25902/46751/17259 25912/46773/17273 25922/46796/17273 25903/46753/17260 +f 25912/46773/17273 25914/46779/17248 25923/46797/17248 25922/46796/17273 +f 25905/46755/17260 25920/46794/17273 25915/46781/17273 25906/46756/17259 +f 25904/46754/17260 25925/46799/17273 25920/46794/17273 25905/46755/17260 +f 25925/46799/17273 25924/46798/17248 25921/46795/17248 25920/46794/17273 +f 25906/46757/17274 25915/46782/17274 25909/46763/17274 25880/46693/17275 25893/46725/17274 25896/46733/17274 +f 25911/46771/17276 25878/46689/17276 25879/46691/17276 25913/46777/17276 25912/46774/17276 25902/46752/17276 +f 25921/46795/17248 25908/46761/17261 25909/46764/17261 25916/46784/17248 +f 25924/46798/17248 25927/46801/17261 25908/46761/17261 25921/46795/17248 +f 25927/46801/17261 25882/46695/17249 25881/46694/17249 25908/46761/17261 +f 25890/46717/17244 25919/46793/17244 25918/46790/17244 25891/46720/17244 +f 25889/46715/17244 25894/46727/17244 25919/46792/17244 25890/46718/17244 +f 25894/46728/17244 25873/46673/17244 25877/46686/17244 25919/46793/17244 +f 25917/46786/17250 25884/46697/17250 25887/46708/17250 25910/46768/17250 +f 25895/46731/17250 25899/46742/17250 25884/46698/17250 25917/46787/17250 +f 25899/46743/17250 25898/46740/17250 25885/46702/17250 25884/46699/17250 +o Cube.015 +v -8.056847 0.690832 -1.542582 +v -8.056847 0.730832 -1.542582 +v -8.340996 0.730832 -1.446357 +v -8.340996 0.690832 -1.446357 +v -8.437220 0.730832 -1.730507 +v -8.437220 0.690832 -1.730507 +v -8.153070 0.730832 -1.826731 +v -8.153070 0.690832 -1.826731 +vn 0.3207 -0.0000 0.9472 +vn -0.9472 -0.0000 0.3207 +vn -0.3207 -0.0000 -0.9472 +vn 0.9472 -0.0000 -0.3207 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vt 0.375000 0.000000 +vt 0.332579 0.651772 +vt 0.380216 0.649803 +vt 0.625000 0.000000 +vt 0.332579 0.651772 +vt 0.832372 0.843789 +vt 0.625000 0.250000 +vt 1.211269 0.822006 +vt 0.832372 0.195384 +vt 0.375000 0.250000 +vt 1.211269 0.427994 +vt 0.380216 0.649803 +vt -0.186958 0.822006 +vt 0.649803 0.177559 +vt 0.183967 0.195384 +vt -0.186958 0.427994 +vt 0.399803 0.177559 +vt 0.380216 0.649803 +vt 0.649803 0.427559 +vt 0.332579 0.651772 +vt 0.183967 0.843789 +vt 0.399803 0.427559 +vt 0.332579 0.651772 +vt 0.380216 0.649803 +s 1 +usemtl Pizza.005 +f 25928/46802/17277 25929/46805/17277 25930/46808/17277 25931/46811/17277 +f 25931/46812/17278 25930/46809/17278 25932/46814/17278 25933/46817/17278 +f 25933/46818/17279 25932/46815/17279 25934/46820/17279 25935/46823/17279 +f 25935/46824/17280 25934/46821/17280 25929/46806/17280 25928/46803/17280 +f 25931/46813/17281 25933/46819/17281 25935/46825/17281 25928/46804/17281 +f 25932/46816/17282 25930/46810/17282 25929/46807/17282 25934/46822/17282 +o laptop.008 +v -6.056466 1.016192 4.228660 +v -6.085346 1.016192 4.171532 +v -6.104893 1.016192 4.181413 +v -6.099032 1.016192 4.193006 +v -6.315274 0.746192 4.359497 +v -6.315274 0.777090 4.359497 +v -6.344154 0.777090 4.302369 +v -6.344154 0.746192 4.302369 +v -6.095350 0.800021 4.176589 +v -6.100352 0.789199 4.179118 +v -6.121669 0.791454 4.189894 +v -6.116076 0.804064 4.187067 +v -5.993965 0.752953 4.479405 +v -5.965085 0.752953 4.536533 +v -6.172713 0.746192 4.641497 +v -6.201593 0.746192 4.584369 +v -5.923909 0.800021 4.515718 +v -5.944635 0.804064 4.526196 +v -5.950227 0.791454 4.529022 +v -5.928911 0.789199 4.518246 +v -5.947787 1.003466 4.456061 +v -5.942785 1.016192 4.453532 +v -5.913905 1.016192 4.510660 +v -5.918907 1.003466 4.513189 +v -5.938413 1.005487 4.508494 +v -5.939044 1.005487 4.523368 +v -5.933451 1.016192 4.520542 +v -5.939312 1.016192 4.508949 +v -6.110485 1.005487 4.184240 +v -6.098133 1.005487 4.192552 +v -6.090348 1.003466 4.174061 +v -6.061468 1.003466 4.231189 +v -6.136526 0.752953 4.197405 +v -6.107646 0.752953 4.254533 +v -6.172713 0.777090 4.641497 +v -6.201593 0.777090 4.584369 +v -6.093860 0.783073 4.247564 +v -5.980179 0.783073 4.472436 +v -5.956088 0.791454 4.517429 +v -6.115808 0.791454 4.201487 +v -6.072176 0.778559 4.236602 +v -6.071472 0.789199 4.236246 +v -5.957791 0.789199 4.461118 +v -5.958495 0.778559 4.461474 +v -5.960634 0.746192 4.462555 +v -5.929615 0.778559 4.518602 +v -5.931754 0.746192 4.519683 +v -6.103195 0.746192 4.180555 +v -6.101056 0.778559 4.179474 +v -6.074315 0.746192 4.237683 +v -5.951299 0.783073 4.529564 +v -6.122740 0.783073 4.190436 +v -6.066470 0.800021 4.233717 +v -5.952789 0.800021 4.458590 +v -5.944005 0.804064 4.511321 +v -6.103725 0.804064 4.195379 +vn -0.0000 1.0000 -0.0000 +vn -0.8924 -0.0000 0.4512 +vn -0.4512 -0.0000 -0.8924 +vn 0.0254 -0.9996 -0.0128 +vn 0.0256 -0.9996 -0.0130 +vn 0.4512 -0.0000 0.8924 +vn 0.8167 -0.4031 -0.4129 +vn -0.9769 0.2102 -0.0376 +vn -0.9770 0.2100 -0.0375 +vn -0.5489 0.2102 0.8090 +vn -0.5490 0.2102 0.8090 +vn -0.5490 0.2101 0.8090 +vn -0.8885 -0.0937 0.4492 +vn -0.8834 0.1422 0.4466 +vn 0.8900 -0.0742 -0.4499 +vn 0.8900 -0.0739 -0.4499 +vn 0.4320 -0.7964 0.4233 +vn 0.4319 -0.7964 0.4234 +vn 0.4319 -0.7964 0.4233 +vn -0.0839 -0.9956 0.0424 +vn 0.1630 0.9832 -0.0824 +vn -0.0848 -0.7964 -0.5988 +vn -0.0848 -0.7964 -0.5989 +vn 0.7925 -0.4598 -0.4006 +vn 0.8921 -0.0272 -0.4510 +vn 0.8921 -0.0275 -0.4510 +vn -0.6082 0.7318 0.3075 +vn -0.8920 0.0311 0.4509 +vn -0.4631 0.5662 0.6819 +vn -0.4632 0.5660 0.6820 +vn -0.2624 0.0208 0.9647 +vn -0.2624 0.0209 0.9647 +vn -0.8238 0.5660 -0.0314 +vn -0.8238 0.5660 -0.0313 +vn -0.9324 0.0209 -0.3607 +vn -0.9324 0.0208 -0.3607 +vn -0.1584 -0.9841 0.0801 +vn -0.1590 -0.9840 0.0804 +vn -0.0218 0.9997 0.0110 +vt 0.843507 0.115975 +vt 0.854445 0.126913 +vt 0.859914 0.126913 +vt 0.843507 0.110506 +vt 0.846470 0.077745 +vt 0.859914 0.128244 +vt 0.758802 0.142316 +vt 0.817861 0.142316 +vt 0.758802 0.182602 +vt 0.817861 0.182602 +vt 0.854445 0.128244 +vt 0.628827 0.198692 +vt 0.847470 0.129216 +vt 0.876080 0.129216 +vt 0.876080 0.212549 +vt 0.884870 0.418901 +vt 0.046050 0.035046 +vt 0.847470 0.212549 +vt 0.602943 0.198692 +vt 0.872433 0.418901 +vt 0.714726 0.043387 +vt 0.706351 0.077745 +vt 0.636292 0.077745 +vt 0.862684 0.131882 +vt 0.692964 0.043387 +vt 0.836163 0.196454 +vt 0.609771 0.142316 +vt 0.816938 0.019277 +vt 0.679134 0.142316 +vt 0.897019 0.170385 +vt 0.654712 0.131781 +vt 0.680596 0.131781 +vt 0.931137 0.218471 +vt 0.680596 0.198692 +vt 0.654712 0.198692 +vt 0.931137 0.301804 +vt 0.714726 0.121039 +vt 0.484881 0.500000 +vt 0.787408 0.125370 +vt 0.910448 0.066311 +vt 0.457664 0.435429 +vt 0.388300 0.435429 +vt 0.718045 0.125370 +vt 0.414821 0.500000 +vt 0.692964 0.121039 +vt 0.554940 0.416667 +vt 0.838909 0.121444 +vt 0.736487 0.095155 +vt 0.625000 0.416667 +vt 0.843507 0.121444 +vt 0.848976 0.126913 +vt 0.843507 0.126913 +vt 0.625000 0.500000 +vt 0.736487 0.121039 +vt 0.554940 0.500000 +vt 0.812478 0.109692 +vt 0.748497 0.222888 +vt 0.884232 0.996204 +vt 0.979811 0.026026 +vt 0.812478 0.149978 +vt 0.979811 0.066311 +vt 0.527027 0.435429 +vt 0.881841 0.149978 +vt 0.843507 0.128244 +vt 0.596390 0.435429 +vt 0.881841 0.109692 +vt 0.817861 0.222888 +vt 0.848976 0.128244 +vt 0.689439 0.142316 +vt 0.886301 0.019277 +vt 0.748497 0.142316 +vt 0.689439 0.182602 +vt 0.748497 0.182602 +vt 0.010615 0.996204 +vt 0.886301 0.059563 +vt 0.838909 0.110506 +vt 0.736487 0.043387 +vt 0.776411 0.077745 +vt 0.838909 0.115975 +vt 0.736487 0.069271 +vt 0.602943 0.131781 +vt 0.872433 0.137963 +vt 0.740196 0.145777 +vt 0.628827 0.131781 +vt 0.813686 0.170385 +vt 0.823529 0.145777 +vt 0.959746 0.218471 +vt 0.689482 0.198692 +vt 0.730721 0.035046 +vt 0.959746 0.301804 +vt 0.813019 0.143230 +vt 0.817575 0.126913 +vt 0.722014 0.258843 +vt 0.813019 0.183516 +vt 0.965588 0.139222 +vt 0.827101 0.120031 +vt 0.826320 0.183516 +vt 0.978888 0.139222 +vt 0.388300 0.395143 +vt 0.609771 0.222888 +vt 0.718045 0.085084 +vt 0.826320 0.143230 +vt 0.836163 0.236739 +vt 0.880457 0.113700 +vt 0.609771 0.182602 +vt 0.689904 0.069271 +vt 0.829067 0.115975 +vt 0.897126 0.092177 +vt 0.862684 0.215216 +vt 0.906978 0.092177 +vt 0.692964 0.069271 +vt 1.005409 0.160745 +vt 0.414821 0.416667 +vt 0.692964 0.095155 +vt 0.689904 0.095155 +vt 0.995557 0.160745 +vt 0.829067 0.121444 +vt 0.680596 0.095155 +vt 0.897019 0.135804 +vt 0.654712 0.121039 +vt 0.689904 0.121039 +vt 0.829067 0.126913 +vt 0.680596 0.121039 +vt 0.680596 0.043387 +vt 0.872433 0.092864 +vt 0.740196 0.111196 +vt 0.689904 0.043387 +vt 0.885461 0.092864 +vt 0.829067 0.110506 +vt 0.680596 0.069271 +vt 0.813686 0.135804 +vt 0.823529 0.111196 +vt 0.660539 0.121039 +vt 0.822863 0.126913 +vt 0.730721 0.468669 +vt 0.791824 0.201543 +vt 0.814932 0.126913 +vt 0.046050 0.468669 +vt 0.714726 0.069271 +vt 0.714726 0.095155 +vt 0.679134 0.222888 +vt 0.884232 0.499889 +vt 0.787408 0.085084 +vt 0.910448 0.026026 +vt 0.010615 0.499889 +vt 0.679134 0.182602 +vt 0.816938 0.059563 +s 1 +usemtl Computer.008 +f 25936/46827/17283 25937/46828/17283 25938/46831/17283 25939/46836/17283 +f 25940/46838/17284 25941/46839/17284 25942/46840/17284 25943/46843/17284 +f 25944/46847/17285 25945/46848/17285 25946/46852/17285 25947/46854/17285 +f 25948/46856/17286 25949/46857/17287 25950/46859/17287 25951/46860/17286 +f 25952/46863/17288 25953/46866/17288 25954/46867/17288 25955/46869/17288 +f 25956/46871/17289 25957/46874/17289 25958/46878/17289 25959/46880/17289 +f 25960/46881/17290 25961/46885/17290 25962/46888/17291 25963/46891/17290 +f 25964/46894/17292 25965/46897/17293 25939/46834/17294 25938/46832/17293 +f 25965/46898/17295 25960/46882/17295 25963/46892/17295 25939/46835/17295 +f 25966/46901/17289 25937/46829/17289 25936/46826/17289 25967/46904/17289 +f 25967/46904/17289 25936/46826/17289 25957/46875/17289 25956/46872/17289 +f 25968/46906/17287 25969/46909/17286 25940/46837/17286 25943/46844/17287 +f 25969/46909/17286 25948/46856/17286 25951/46860/17286 25940/46837/17286 +f 25950/46858/17284 25970/46912/17284 25971/46915/17284 25951/46861/17284 +f 25958/46877/17283 25957/46876/17283 25963/46893/17283 25962/46889/17283 +f 25957/46876/17283 25936/46827/17283 25939/46836/17283 25963/46893/17283 +f 25972/46916/17296 25973/46919/17296 25974/46922/17296 25975/46927/17296 +f 25976/46931/17297 25977/46936/17298 25978/46939/17298 25979/46940/17297 +f 25980/46943/17297 25979/46940/17297 25981/46946/17297 25982/46948/17297 +f 25983/46949/17297 25984/46952/17297 25976/46931/17297 25985/46955/17297 +f 25985/46955/17297 25976/46931/17297 25979/46940/17297 25980/46943/17297 +f 25982/46948/17288 25981/46946/17288 25986/46958/17288 25970/46913/17288 25950/46859/17288 25949/46857/17288 +f 25943/46845/17285 25942/46841/17285 25987/46961/17285 25984/46953/17285 25983/46950/17285 25968/46907/17285 +f 25973/46920/17299 25979/46941/17300 25978/46937/17301 25974/46923/17299 +f 25954/46867/17302 25974/46924/17302 25978/46938/17302 25955/46869/17302 +f 25986/46959/17303 25981/46947/17303 25979/46942/17303 25973/46921/17303 +f 25972/46917/17303 25976/46932/17303 25984/46954/17303 25987/46962/17303 +f 25975/46928/17302 25946/46851/17302 25945/46849/17302 25977/46934/17302 +f 25972/46918/17304 25975/46929/17305 25977/46935/17304 25976/46933/17304 +f 25977/46936/17306 25988/46964/17306 25989/46965/17306 25978/46939/17306 +f 25988/46964/17307 25967/46905/17307 25956/46873/17307 25989/46965/17307 +f 25945/46850/17306 25944/46846/17306 25988/46964/17306 25977/46936/17306 +f 25944/46846/17308 25966/46902/17308 25967/46905/17307 25988/46964/17307 +f 25975/46930/17309 25974/46925/17309 25990/46966/17309 25991/46971/17309 +f 25991/46970/17310 25990/46967/17310 25960/46883/17310 25965/46899/17310 +f 25946/46852/17311 25975/46930/17312 25991/46971/17312 25947/46854/17312 +f 25947/46853/17313 25991/46972/17314 25965/46900/17314 25964/46895/17313 +f 25974/46926/17315 25954/46868/17316 25953/46864/17316 25990/46968/17316 +f 25990/46969/17317 25953/46865/17318 25961/46886/17318 25960/46884/17317 +f 25978/46939/17306 25989/46965/17306 25952/46862/17306 25955/46870/17306 +f 25989/46965/17307 25956/46873/17307 25959/46879/17308 25952/46862/17308 +f 25958/46878/17288 25962/46890/17288 25961/46887/17288 25959/46880/17288 +f 25959/46880/17288 25961/46887/17288 25953/46866/17288 25952/46863/17288 +f 25937/46830/17285 25966/46903/17285 25964/46896/17285 25938/46833/17285 +f 25966/46903/17285 25944/46847/17285 25947/46854/17285 25964/46896/17285 +f 25985/46956/17319 25980/46944/17319 25948/46855/17319 25969/46910/17319 +f 25983/46951/17320 25985/46957/17319 25969/46911/17319 25968/46908/17320 +f 25980/46945/17319 25982/46948/17320 25949/46857/17320 25948/46856/17319 +f 25987/46963/17321 25942/46842/17321 25970/46914/17321 25986/46960/17321 +f 25940/46838/17284 25951/46861/17284 25971/46915/17284 25941/46839/17284 +o laptop.009 +v -5.938216 1.016192 5.807843 +v -5.898233 1.016192 5.757853 +v -5.915337 1.016192 5.744173 +v -5.923450 1.016192 5.754317 +v -6.164687 0.746192 5.626705 +v -6.164687 0.777090 5.626705 +v -6.124703 0.777090 5.576715 +v -6.124703 0.746192 5.576715 +v -5.906987 0.800021 5.750851 +v -5.911364 0.789199 5.747351 +v -5.930017 0.791454 5.732431 +v -5.925123 0.804064 5.736345 +v -6.140388 0.752953 5.968797 +v -6.180371 0.752953 6.018787 +v -6.362057 0.746192 5.873469 +v -6.322073 0.746192 5.823479 +v -6.144341 0.800021 6.047606 +v -6.162477 0.804064 6.033100 +v -6.167370 0.791454 6.029186 +v -6.148717 0.789199 6.044105 +v -6.099980 1.003466 6.001117 +v -6.095603 1.016192 6.004618 +v -6.135586 1.016192 6.054607 +v -6.139964 1.003466 6.051106 +v -6.143790 1.005487 6.031412 +v -6.157584 1.005487 6.037013 +v -6.152690 1.016192 6.040927 +v -6.144577 1.016192 6.030783 +v -5.920230 1.005487 5.740259 +v -5.922664 1.005487 5.754946 +v -5.902610 1.003466 5.754352 +v -5.942594 1.003466 5.804342 +v -5.943018 0.752953 5.722033 +v -5.983001 0.752953 5.772022 +v -6.362057 0.777090 5.873469 +v -6.322073 0.777090 5.823479 +v -5.970938 0.783073 5.781671 +v -6.128325 0.783073 5.978446 +v -6.159256 0.791454 6.019041 +v -5.938130 0.791454 5.742575 +v -5.951963 0.778559 5.796848 +v -5.951347 0.789199 5.797340 +v -6.108734 0.789199 5.994115 +v -6.109350 0.778559 5.993622 +v -6.111222 0.746192 5.992126 +v -6.149333 0.778559 6.043612 +v -6.151205 0.746192 6.042115 +v -5.913851 0.746192 5.745360 +v -5.911980 0.778559 5.746858 +v -5.953835 0.746192 5.795351 +v -6.168308 0.783073 6.028435 +v -5.930954 0.783073 5.731681 +v -5.946970 0.800021 5.800841 +v -6.104357 0.800021 5.997616 +v -6.148684 0.804064 6.027498 +v -5.927557 0.804064 5.751032 +vn -0.0000 1.0000 -0.0000 +vn -0.7809 -0.0000 -0.6246 +vn 0.6246 -0.0000 -0.7809 +vn 0.0222 -0.9996 0.0178 +vn 0.0224 -0.9996 0.0179 +vn -0.6246 -0.0000 0.7809 +vn 0.7147 -0.4031 0.5716 +vn -0.3714 0.2102 -0.9044 +vn -0.3713 0.2102 -0.9044 +vn -0.3714 0.2100 -0.9044 +vn -0.9639 0.2102 -0.1636 +vn -0.9639 0.2101 -0.1636 +vn -0.7775 -0.0937 -0.6219 +vn -0.7730 0.1422 -0.6183 +vn 0.7788 -0.0742 0.6229 +vn 0.7788 -0.0739 0.6229 +vn -0.2058 -0.7964 0.5687 +vn -0.0734 -0.9956 -0.0587 +vn 0.1426 0.9832 0.1141 +vn 0.5096 -0.7964 -0.3257 +vn 0.5096 -0.7964 -0.3258 +vn 0.6935 -0.4598 0.5547 +vn 0.7806 -0.0272 0.6244 +vn 0.7806 -0.0275 0.6244 +vn -0.5322 0.7318 -0.4257 +vn -0.7806 0.0311 -0.6243 +vn -0.8126 0.5662 -0.1383 +vn -0.8127 0.5660 -0.1383 +vn -0.9866 0.0208 0.1618 +vn -0.9866 0.0209 0.1618 +vn -0.3135 0.5660 -0.7625 +vn -0.0589 0.0209 -0.9980 +vn -0.0589 0.0208 -0.9980 +vn -0.1386 -0.9841 -0.1109 +vn -0.1391 -0.9840 -0.1113 +vn -0.0191 0.9997 -0.0153 +vt 0.843507 0.115975 +vt 0.854445 0.126913 +vt 0.859914 0.126913 +vt 0.843507 0.110506 +vt 0.846470 0.077745 +vt 0.859914 0.128244 +vt 0.758802 0.142316 +vt 0.817861 0.142316 +vt 0.758802 0.182602 +vt 0.817861 0.182602 +vt 0.854445 0.128244 +vt 0.628827 0.198692 +vt 0.847470 0.129216 +vt 0.876080 0.129216 +vt 0.876080 0.212549 +vt 0.884870 0.418901 +vt 0.046050 0.035046 +vt 0.847470 0.212549 +vt 0.602943 0.198692 +vt 0.872433 0.418901 +vt 0.714726 0.043387 +vt 0.706351 0.077745 +vt 0.636292 0.077745 +vt 0.862684 0.131882 +vt 0.692964 0.043387 +vt 0.836163 0.196454 +vt 0.609771 0.142316 +vt 0.816938 0.019277 +vt 0.679134 0.142316 +vt 0.897019 0.170385 +vt 0.654712 0.131781 +vt 0.680596 0.131781 +vt 0.931137 0.218471 +vt 0.680596 0.198692 +vt 0.654712 0.198692 +vt 0.931137 0.301804 +vt 0.714726 0.121039 +vt 0.484881 0.500000 +vt 0.787408 0.125370 +vt 0.910448 0.066311 +vt 0.457664 0.435429 +vt 0.388300 0.435429 +vt 0.718045 0.125370 +vt 0.414821 0.500000 +vt 0.692964 0.121039 +vt 0.554940 0.416667 +vt 0.838909 0.121444 +vt 0.736487 0.095155 +vt 0.625000 0.416667 +vt 0.843507 0.121444 +vt 0.848976 0.126913 +vt 0.843507 0.126913 +vt 0.625000 0.500000 +vt 0.736487 0.121039 +vt 0.554940 0.500000 +vt 0.812478 0.109692 +vt 0.748497 0.222888 +vt 0.884232 0.996204 +vt 0.979811 0.026026 +vt 0.812478 0.149978 +vt 0.979811 0.066311 +vt 0.527027 0.435429 +vt 0.881841 0.149978 +vt 0.843507 0.128244 +vt 0.596390 0.435429 +vt 0.881841 0.109692 +vt 0.817861 0.222888 +vt 0.848976 0.128244 +vt 0.689439 0.142316 +vt 0.886301 0.019277 +vt 0.748497 0.142316 +vt 0.689439 0.182602 +vt 0.748497 0.182602 +vt 0.010615 0.996204 +vt 0.886301 0.059563 +vt 0.838909 0.110506 +vt 0.736487 0.043387 +vt 0.776411 0.077745 +vt 0.838909 0.115975 +vt 0.736487 0.069271 +vt 0.602943 0.131781 +vt 0.872433 0.137963 +vt 0.740196 0.145777 +vt 0.628827 0.131781 +vt 0.813686 0.170385 +vt 0.823529 0.145777 +vt 0.959746 0.218471 +vt 0.689482 0.198692 +vt 0.730721 0.035046 +vt 0.959746 0.301804 +vt 0.813019 0.143230 +vt 0.817575 0.126913 +vt 0.722014 0.258843 +vt 0.813019 0.183516 +vt 0.965588 0.139222 +vt 0.827101 0.120031 +vt 0.826320 0.183516 +vt 0.978888 0.139222 +vt 0.388300 0.395143 +vt 0.609771 0.222888 +vt 0.718045 0.085084 +vt 0.826320 0.143230 +vt 0.836163 0.236739 +vt 0.880457 0.113700 +vt 0.609771 0.182602 +vt 0.689904 0.069271 +vt 0.829067 0.115975 +vt 0.897126 0.092177 +vt 0.862684 0.215216 +vt 0.906978 0.092177 +vt 0.692964 0.069271 +vt 1.005409 0.160745 +vt 0.414821 0.416667 +vt 0.692964 0.095155 +vt 0.689904 0.095155 +vt 0.995557 0.160745 +vt 0.829067 0.121444 +vt 0.680596 0.095155 +vt 0.897019 0.135804 +vt 0.654712 0.121039 +vt 0.689904 0.121039 +vt 0.829067 0.126913 +vt 0.680596 0.121039 +vt 0.680596 0.043387 +vt 0.872433 0.092864 +vt 0.740196 0.111196 +vt 0.689904 0.043387 +vt 0.885461 0.092864 +vt 0.829067 0.110506 +vt 0.680596 0.069271 +vt 0.813686 0.135804 +vt 0.823529 0.111196 +vt 0.660539 0.121039 +vt 0.822863 0.126913 +vt 0.730721 0.468669 +vt 0.791824 0.201543 +vt 0.814932 0.126913 +vt 0.046050 0.468669 +vt 0.714726 0.069271 +vt 0.714726 0.095155 +vt 0.679134 0.222888 +vt 0.884232 0.499889 +vt 0.787408 0.085084 +vt 0.910448 0.026026 +vt 0.010615 0.499889 +vt 0.679134 0.182602 +vt 0.816938 0.059563 +s 1 +usemtl Computer.009 +f 25992/46974/17322 25993/46975/17322 25994/46978/17322 25995/46983/17322 +f 25996/46985/17323 25997/46986/17323 25998/46987/17323 25999/46990/17323 +f 26000/46994/17324 26001/46995/17324 26002/46999/17324 26003/47001/17324 +f 26004/47003/17325 26005/47004/17326 26006/47006/17326 26007/47007/17325 +f 26008/47010/17327 26009/47013/17327 26010/47014/17327 26011/47016/17327 +f 26012/47018/17328 26013/47021/17328 26014/47025/17328 26015/47027/17328 +f 26016/47028/17329 26017/47032/17330 26018/47035/17331 26019/47038/17329 +f 26020/47041/17332 26021/47044/17332 25995/46981/17333 25994/46979/17332 +f 26021/47045/17334 26016/47029/17334 26019/47039/17334 25995/46982/17334 +f 26022/47048/17328 25993/46976/17328 25992/46973/17328 26023/47051/17328 +f 26023/47051/17328 25992/46973/17328 26013/47022/17328 26012/47019/17328 +f 26024/47053/17326 26025/47056/17325 25996/46984/17325 25999/46991/17326 +f 26025/47056/17325 26004/47003/17325 26007/47007/17325 25996/46984/17325 +f 26006/47005/17323 26026/47059/17323 26027/47062/17323 26007/47008/17323 +f 26014/47024/17322 26013/47023/17322 26019/47040/17322 26018/47036/17322 +f 26013/47023/17322 25992/46974/17322 25995/46983/17322 26019/47040/17322 +f 26028/47063/17335 26029/47066/17335 26030/47069/17335 26031/47074/17335 +f 26032/47078/17336 26033/47083/17337 26034/47086/17337 26035/47087/17336 +f 26036/47090/17336 26035/47087/17336 26037/47093/17336 26038/47095/17336 +f 26039/47096/17336 26040/47099/17336 26032/47078/17336 26041/47102/17336 +f 26041/47102/17336 26032/47078/17336 26035/47087/17336 26036/47090/17336 +f 26038/47095/17327 26037/47093/17327 26042/47105/17327 26026/47060/17327 26006/47006/17327 26005/47004/17327 +f 25999/46992/17324 25998/46988/17324 26043/47108/17324 26040/47100/17324 26039/47097/17324 26024/47054/17324 +f 26029/47067/17338 26035/47088/17338 26034/47084/17338 26030/47070/17338 +f 26010/47014/17339 26030/47071/17339 26034/47085/17339 26011/47016/17339 +f 26042/47106/17340 26037/47094/17340 26035/47089/17340 26029/47068/17340 +f 26028/47064/17340 26032/47079/17340 26040/47101/17340 26043/47109/17340 +f 26031/47075/17339 26002/46998/17339 26001/46996/17339 26033/47081/17339 +f 26028/47065/17341 26031/47076/17341 26033/47082/17341 26032/47080/17342 +f 26033/47083/17343 26044/47111/17343 26045/47112/17343 26034/47086/17343 +f 26044/47111/17344 26023/47052/17344 26012/47020/17344 26045/47112/17344 +f 26001/46997/17343 26000/46993/17343 26044/47111/17343 26033/47083/17343 +f 26000/46993/17345 26022/47049/17345 26023/47052/17344 26044/47111/17344 +f 26031/47077/17346 26030/47072/17346 26046/47113/17346 26047/47118/17346 +f 26047/47117/17347 26046/47114/17347 26016/47030/17347 26021/47046/17347 +f 26002/46999/17348 26031/47077/17349 26047/47118/17349 26003/47001/17349 +f 26003/47000/17350 26047/47119/17351 26021/47047/17351 26020/47042/17350 +f 26030/47073/17352 26010/47015/17352 26009/47011/17352 26046/47115/17352 +f 26046/47116/17353 26009/47012/17354 26017/47033/17354 26016/47031/17353 +f 26034/47086/17343 26045/47112/17343 26008/47009/17343 26011/47017/17343 +f 26045/47112/17344 26012/47020/17344 26015/47026/17345 26008/47009/17345 +f 26014/47025/17327 26018/47037/17327 26017/47034/17327 26015/47027/17327 +f 26015/47027/17327 26017/47034/17327 26009/47013/17327 26008/47010/17327 +f 25993/46977/17324 26022/47050/17324 26020/47043/17324 25994/46980/17324 +f 26022/47050/17324 26000/46994/17324 26003/47001/17324 26020/47043/17324 +f 26041/47103/17355 26036/47091/17355 26004/47002/17355 26025/47057/17355 +f 26039/47098/17356 26041/47104/17355 26025/47058/17355 26024/47055/17356 +f 26036/47092/17355 26038/47095/17356 26005/47004/17356 26004/47003/17355 +f 26043/47110/17357 25998/46989/17357 26026/47061/17357 26042/47107/17357 +f 25996/46985/17323 26007/47008/17323 26027/47062/17323 25997/46986/17323 +o laptop.010 +v -5.555729 1.016192 3.944052 +v -5.605351 1.016192 3.984492 +v -5.591515 1.016192 4.001470 +v -5.581445 1.016192 3.993264 +v -5.372526 0.746192 4.168856 +v -5.372526 0.777090 4.168856 +v -5.422148 0.777090 4.209295 +v -5.422148 0.746192 4.209295 +v -5.598269 0.800021 3.993182 +v -5.594729 0.789199 3.997526 +v -5.579639 0.791454 4.016042 +v -5.583598 0.804064 4.011185 +v -5.324174 0.752953 3.829327 +v -5.274552 0.752953 3.788888 +v -5.127578 0.746192 3.969236 +v -5.177200 0.746192 4.009675 +v -5.303699 0.800021 3.753122 +v -5.289028 0.804064 3.771125 +v -5.285069 0.791454 3.775982 +v -5.300159 0.789199 3.757466 +v -5.356862 1.003466 3.789217 +v -5.360403 1.016192 3.784872 +v -5.310781 1.016192 3.744432 +v -5.307240 1.003466 3.748777 +v -5.307651 1.005487 3.768836 +v -5.292986 1.005487 3.766268 +v -5.296945 1.016192 3.761410 +v -5.307014 1.016192 3.769617 +v -5.587556 1.005487 4.006327 +v -5.582081 1.005487 3.992483 +v -5.601810 1.003466 3.988837 +v -5.552188 1.003466 3.948397 +v -5.569122 0.752953 4.028947 +v -5.519500 0.752953 3.988508 +v -5.127578 0.777090 3.969236 +v -5.177200 0.777090 4.009675 +v -5.529259 0.783073 3.976533 +v -5.333932 0.783073 3.817353 +v -5.295139 0.791454 3.784189 +v -5.569570 0.791454 4.007835 +v -5.544609 0.778559 3.957698 +v -5.545107 0.789199 3.957086 +v -5.349781 0.789199 3.797905 +v -5.349282 0.778559 3.798517 +v -5.347768 0.746192 3.800375 +v -5.299661 0.778559 3.758078 +v -5.298146 0.746192 3.759936 +v -5.592716 0.746192 3.999995 +v -5.594231 0.778559 3.998137 +v -5.543095 0.746192 3.959556 +v -5.284311 0.783073 3.776913 +v -5.578881 0.783073 4.016973 +v -5.548647 0.800021 3.952742 +v -5.353321 0.800021 3.793561 +v -5.303692 0.804064 3.773693 +v -5.578123 0.804064 3.997340 +vn -0.0000 1.0000 -0.0000 +vn 0.6317 -0.0000 0.7752 +vn -0.7752 -0.0000 0.6317 +vn -0.0180 -0.9996 -0.0221 +vn -0.0181 -0.9996 -0.0223 +vn 0.7752 -0.0000 -0.6317 +vn -0.5781 -0.4031 -0.7094 +vn 0.1724 0.2102 0.9623 +vn 0.1725 0.2100 0.9624 +vn 0.9078 0.2102 0.3631 +vn 0.9077 0.2102 0.3631 +vn 0.9077 0.2101 0.3631 +vn 0.6290 -0.0937 0.7718 +vn 0.6253 0.1422 0.7673 +vn -0.6300 -0.0742 -0.7730 +vn -0.6300 -0.0739 -0.7731 +vn 0.3211 -0.7964 -0.5126 +vn 0.0594 -0.9956 0.0729 +vn -0.1154 0.9832 -0.1416 +vn -0.5668 -0.7964 0.2110 +vn -0.5610 -0.4598 -0.6884 +vn -0.6315 -0.0272 -0.7749 +vn -0.6315 -0.0275 -0.7749 +vn 0.4306 0.7318 0.5283 +vn 0.6314 0.0311 0.7748 +vn 0.7652 0.5662 0.3064 +vn 0.7653 0.5660 0.3065 +vn 0.9985 0.0208 0.0498 +vn 0.9985 0.0209 0.0498 +vn 0.1457 0.5660 0.8114 +vn -0.1528 0.0209 0.9880 +vn -0.1528 0.0208 0.9880 +vn 0.1121 -0.9841 0.1376 +vn 0.1125 -0.9840 0.1381 +vn 0.0154 0.9997 0.0189 +vt 0.843507 0.115975 +vt 0.854445 0.126913 +vt 0.859914 0.126913 +vt 0.843507 0.110506 +vt 0.846470 0.077745 +vt 0.859914 0.128244 +vt 0.758802 0.142316 +vt 0.817861 0.142316 +vt 0.758802 0.182602 +vt 0.817861 0.182602 +vt 0.854445 0.128244 +vt 0.628827 0.198692 +vt 0.847470 0.129216 +vt 0.876080 0.129216 +vt 0.876080 0.212549 +vt 0.884870 0.418901 +vt 0.046050 0.035046 +vt 0.847470 0.212549 +vt 0.602943 0.198692 +vt 0.872433 0.418901 +vt 0.714726 0.043387 +vt 0.706351 0.077745 +vt 0.636292 0.077745 +vt 0.862684 0.131882 +vt 0.692964 0.043387 +vt 0.836163 0.196454 +vt 0.609771 0.142316 +vt 0.816938 0.019277 +vt 0.679134 0.142316 +vt 0.897019 0.170385 +vt 0.654712 0.131781 +vt 0.680596 0.131781 +vt 0.931137 0.218471 +vt 0.680596 0.198692 +vt 0.654712 0.198692 +vt 0.931137 0.301804 +vt 0.714726 0.121039 +vt 0.484881 0.500000 +vt 0.787408 0.125370 +vt 0.910448 0.066311 +vt 0.457664 0.435429 +vt 0.388300 0.435429 +vt 0.718045 0.125370 +vt 0.414821 0.500000 +vt 0.692964 0.121039 +vt 0.554940 0.416667 +vt 0.838909 0.121444 +vt 0.736487 0.095155 +vt 0.625000 0.416667 +vt 0.843507 0.121444 +vt 0.848976 0.126913 +vt 0.843507 0.126913 +vt 0.625000 0.500000 +vt 0.736487 0.121039 +vt 0.554940 0.500000 +vt 0.812478 0.109692 +vt 0.748497 0.222888 +vt 0.884232 0.996204 +vt 0.979811 0.026026 +vt 0.812478 0.149978 +vt 0.979811 0.066311 +vt 0.527027 0.435429 +vt 0.881841 0.149978 +vt 0.843507 0.128244 +vt 0.596390 0.435429 +vt 0.881841 0.109692 +vt 0.817861 0.222888 +vt 0.848976 0.128244 +vt 0.689439 0.142316 +vt 0.886301 0.019277 +vt 0.748497 0.142316 +vt 0.689439 0.182602 +vt 0.748497 0.182602 +vt 0.010615 0.996204 +vt 0.886301 0.059563 +vt 0.838909 0.110506 +vt 0.736487 0.043387 +vt 0.776411 0.077745 +vt 0.838909 0.115975 +vt 0.736487 0.069271 +vt 0.602943 0.131781 +vt 0.872433 0.137963 +vt 0.740196 0.145777 +vt 0.628827 0.131781 +vt 0.813686 0.170385 +vt 0.823529 0.145777 +vt 0.959746 0.218471 +vt 0.689482 0.198692 +vt 0.730721 0.035046 +vt 0.959746 0.301804 +vt 0.813019 0.143230 +vt 0.817575 0.126913 +vt 0.722014 0.258843 +vt 0.813019 0.183516 +vt 0.965588 0.139222 +vt 0.827101 0.120031 +vt 0.826320 0.183516 +vt 0.978888 0.139222 +vt 0.388300 0.395143 +vt 0.609771 0.222888 +vt 0.718045 0.085084 +vt 0.826320 0.143230 +vt 0.836163 0.236739 +vt 0.880457 0.113700 +vt 0.609771 0.182602 +vt 0.689904 0.069271 +vt 0.829067 0.115975 +vt 0.897126 0.092177 +vt 0.862684 0.215216 +vt 0.906978 0.092177 +vt 0.692964 0.069271 +vt 1.005409 0.160745 +vt 0.414821 0.416667 +vt 0.692964 0.095155 +vt 0.689904 0.095155 +vt 0.995557 0.160745 +vt 0.829067 0.121444 +vt 0.680596 0.095155 +vt 0.897019 0.135804 +vt 0.654712 0.121039 +vt 0.689904 0.121039 +vt 0.829067 0.126913 +vt 0.680596 0.121039 +vt 0.680596 0.043387 +vt 0.872433 0.092864 +vt 0.740196 0.111196 +vt 0.689904 0.043387 +vt 0.885461 0.092864 +vt 0.829067 0.110506 +vt 0.680596 0.069271 +vt 0.813686 0.135804 +vt 0.823529 0.111196 +vt 0.660539 0.121039 +vt 0.822863 0.126913 +vt 0.730721 0.468669 +vt 0.791824 0.201543 +vt 0.814932 0.126913 +vt 0.046050 0.468669 +vt 0.714726 0.069271 +vt 0.714726 0.095155 +vt 0.679134 0.222888 +vt 0.884232 0.499889 +vt 0.787408 0.085084 +vt 0.910448 0.026026 +vt 0.010615 0.499889 +vt 0.679134 0.182602 +vt 0.816938 0.059563 +s 1 +usemtl Computer.010 +f 26048/47121/17358 26049/47122/17358 26050/47125/17358 26051/47130/17358 +f 26052/47132/17359 26053/47133/17359 26054/47134/17359 26055/47137/17359 +f 26056/47141/17360 26057/47142/17360 26058/47146/17360 26059/47148/17360 +f 26060/47150/17361 26061/47151/17362 26062/47153/17362 26063/47154/17361 +f 26064/47157/17363 26065/47160/17363 26066/47161/17363 26067/47163/17363 +f 26068/47165/17364 26069/47168/17364 26070/47172/17364 26071/47174/17364 +f 26072/47175/17365 26073/47179/17365 26074/47182/17366 26075/47185/17365 +f 26076/47188/17367 26077/47191/17368 26051/47128/17369 26050/47126/17368 +f 26077/47192/17370 26072/47176/17370 26075/47186/17370 26051/47129/17370 +f 26078/47195/17364 26049/47123/17364 26048/47120/17364 26079/47198/17364 +f 26079/47198/17364 26048/47120/17364 26069/47169/17364 26068/47166/17364 +f 26080/47200/17362 26081/47203/17361 26052/47131/17361 26055/47138/17362 +f 26081/47203/17361 26060/47150/17361 26063/47154/17361 26052/47131/17361 +f 26062/47152/17359 26082/47206/17359 26083/47209/17359 26063/47155/17359 +f 26070/47171/17358 26069/47170/17358 26075/47187/17358 26074/47183/17358 +f 26069/47170/17358 26048/47121/17358 26051/47130/17358 26075/47187/17358 +f 26084/47210/17371 26085/47213/17371 26086/47216/17371 26087/47221/17371 +f 26088/47225/17372 26089/47230/17373 26090/47233/17373 26091/47234/17372 +f 26092/47237/17372 26091/47234/17372 26093/47240/17372 26094/47242/17372 +f 26095/47243/17372 26096/47246/17372 26088/47225/17372 26097/47249/17372 +f 26097/47249/17372 26088/47225/17372 26091/47234/17372 26092/47237/17372 +f 26094/47242/17363 26093/47240/17363 26098/47252/17363 26082/47207/17363 26062/47153/17363 26061/47151/17363 +f 26055/47139/17360 26054/47135/17360 26099/47255/17360 26096/47247/17360 26095/47244/17360 26080/47201/17360 +f 26085/47214/17374 26091/47235/17374 26090/47231/17374 26086/47217/17374 +f 26066/47161/17375 26086/47218/17375 26090/47232/17375 26067/47163/17375 +f 26098/47253/17376 26093/47241/17376 26091/47236/17376 26085/47215/17376 +f 26084/47211/17376 26088/47226/17376 26096/47248/17376 26099/47256/17376 +f 26087/47222/17375 26058/47145/17375 26057/47143/17375 26089/47228/17375 +f 26084/47212/17377 26087/47223/17377 26089/47229/17377 26088/47227/17377 +f 26089/47230/17378 26100/47258/17378 26101/47259/17378 26090/47233/17378 +f 26100/47258/17379 26079/47199/17379 26068/47167/17379 26101/47259/17379 +f 26057/47144/17378 26056/47140/17378 26100/47258/17378 26089/47230/17378 +f 26056/47140/17380 26078/47196/17380 26079/47199/17379 26100/47258/17379 +f 26087/47224/17381 26086/47219/17381 26102/47260/17381 26103/47265/17381 +f 26103/47264/17382 26102/47261/17382 26072/47177/17382 26077/47193/17382 +f 26058/47146/17383 26087/47224/17384 26103/47265/17384 26059/47148/17384 +f 26059/47147/17385 26103/47266/17386 26077/47194/17386 26076/47189/17385 +f 26086/47220/17387 26066/47162/17387 26065/47158/17387 26102/47262/17387 +f 26102/47263/17388 26065/47159/17389 26073/47180/17389 26072/47178/17388 +f 26090/47233/17378 26101/47259/17378 26064/47156/17378 26067/47164/17378 +f 26101/47259/17379 26068/47167/17379 26071/47173/17380 26064/47156/17380 +f 26070/47172/17363 26074/47184/17363 26073/47181/17363 26071/47174/17363 +f 26071/47174/17363 26073/47181/17363 26065/47160/17363 26064/47157/17363 +f 26049/47124/17360 26078/47197/17360 26076/47190/17360 26050/47127/17360 +f 26078/47197/17360 26056/47141/17360 26059/47148/17360 26076/47190/17360 +f 26097/47250/17390 26092/47238/17390 26060/47149/17390 26081/47204/17390 +f 26095/47245/17391 26097/47251/17390 26081/47205/17390 26080/47202/17391 +f 26092/47239/17390 26094/47242/17391 26061/47151/17391 26060/47150/17390 +f 26099/47257/17392 26054/47136/17392 26082/47208/17392 26098/47254/17392 +f 26052/47132/17359 26063/47155/17359 26083/47209/17359 26053/47133/17359 +o book5.002 +v -5.831817 0.782642 3.842225 +v -5.836182 0.782642 3.838485 +v -6.011875 0.782642 4.043501 +v -6.007510 0.782642 4.047242 +v -5.919663 0.782642 3.944733 +v -6.003007 0.779710 4.041987 +v -6.011875 0.779710 4.043501 +v -5.836182 0.779710 3.838485 +v -5.880105 0.779710 3.889739 +v -5.924028 0.779710 3.940993 +v -5.967951 0.779710 3.992247 +v -5.854064 0.747642 4.000950 +v -5.788465 0.747642 4.057167 +v -5.876311 0.747642 4.159675 +v -5.941911 0.747642 4.103458 +v -5.710058 0.779710 3.955681 +v -5.700618 0.782642 3.954658 +v -5.788465 0.782642 4.057167 +v -5.876311 0.782642 4.159675 +v -5.876745 0.779710 4.150189 +v -5.836320 0.779710 3.847479 +v -5.766218 0.782642 3.898441 +v -5.831817 0.747642 3.842225 +v -5.836320 0.750574 3.847479 +v -5.710058 0.750574 3.955681 +v -5.700618 0.747642 3.954658 +v -5.766218 0.747642 3.898441 +v -5.876745 0.750574 4.150189 +v -6.011875 0.747642 4.043501 +v -6.011875 0.750574 4.043501 +v -5.967951 0.750574 3.992247 +v -5.924028 0.750574 3.940993 +v -5.880105 0.750574 3.889739 +v -5.836182 0.750574 3.838485 +v -5.836182 0.747642 3.838485 +v -5.881213 0.772426 3.888789 +v -5.837289 0.772426 3.837535 +v -6.007510 0.747642 4.047242 +v -6.003007 0.750574 4.041987 +v -6.012982 0.757858 4.042552 +v -6.012982 0.772426 4.042552 +v -6.012990 0.765142 4.042546 +v -5.837289 0.757858 3.837535 +v -5.837296 0.765142 3.837529 +v -5.919663 0.747642 3.944733 +v -5.941911 0.782642 4.103458 +v -5.854064 0.782642 4.000950 +v -5.881213 0.757858 3.888789 +v -5.881219 0.765142 3.888783 +v -5.969059 0.757858 3.991298 +v -5.969066 0.765142 3.991292 +v -5.925143 0.765142 3.940038 +v -5.925136 0.757858 3.940044 +v -5.969059 0.772426 3.991298 +v -5.925136 0.772426 3.940044 +vn -0.0000 1.0000 -0.0000 +vn -0.4358 -0.0195 0.8998 +vn -0.4359 -0.0195 0.8998 +vn -0.7593 0.0039 -0.6507 +vn -0.7593 -0.0000 -0.6507 +vn -0.7593 0.0052 -0.6507 +vn -0.0000 -1.0000 -0.0000 +vn 0.7566 -0.0852 0.6483 +vn 0.7565 -0.0852 0.6484 +vn 0.7566 -0.0852 0.6484 +vn 0.6502 -0.0395 -0.7587 +vn 0.6502 -0.0395 -0.7588 +vn 0.6503 -0.0395 -0.7587 +vn 0.6502 0.0395 -0.7587 +vn 0.6503 0.0395 -0.7587 +vn 0.6507 -0.0000 -0.7593 +vn 0.7566 0.0852 0.6483 +vn 0.7566 0.0852 0.6484 +vn 0.7565 0.0852 0.6484 +vn 0.7593 -0.0000 0.6507 +vn -0.7593 -0.0039 -0.6507 +vn -0.7593 -0.0052 -0.6507 +vn -0.7593 0.0038 -0.6507 +vn -0.4359 0.0195 0.8998 +vn -0.4358 0.0195 0.8998 +vn -0.6507 -0.0000 0.7593 +vn -0.6502 0.0395 0.7588 +vn -0.6502 0.0395 0.7587 +vn 0.8224 0.0195 -0.5686 +vn 0.8224 0.0195 -0.5685 +vn 0.8225 0.0195 -0.5685 +vn 0.8224 -0.0195 -0.5685 +vn 0.8224 -0.0195 -0.5686 +vn 0.8225 -0.0195 -0.5685 +vn -0.6502 -0.0395 0.7587 +vn -0.6502 -0.0395 0.7588 +vn -0.7593 -0.0038 -0.6507 +vn 0.9022 -0.0000 -0.4314 +vn 0.9022 -0.0002 -0.4314 +vn -0.2881 -0.0000 0.9576 +vn -0.2882 -0.0000 0.9576 +vt 0.487034 0.050981 +vt 0.501133 0.046425 +vt 0.905793 0.919467 +vt 0.487101 0.050981 +vt 0.473275 0.024841 +vt 0.501133 0.046415 +vt 0.487101 0.053064 +vt 0.500955 0.046871 +vt 0.473275 0.032117 +vt 0.487034 0.053064 +vt 0.500955 0.046867 +vt 0.501292 0.047455 +vt 0.509607 0.922908 +vt 0.487034 0.052022 +vt 0.509607 0.902732 +vt 0.905793 0.939643 +vt 0.824124 0.046271 +vt 0.501060 0.047455 +vt 0.500908 0.046867 +vt 0.475700 0.032117 +vt 0.500908 0.046871 +vt 0.475700 0.024841 +vt 0.501038 0.046415 +vt 0.475700 0.026660 +vt 0.475700 0.028479 +vt 0.475700 0.030298 +vt 0.497345 0.947253 +vt 0.894761 0.927567 +vt 0.485041 0.949714 +vt 0.903149 0.927567 +vt 0.500837 0.047437 +vt 0.493429 0.949714 +vt 0.903149 0.949573 +vt 0.500837 0.047711 +vt 0.501029 0.046336 +vt 0.894761 0.949573 +vt 0.501029 0.046347 +vt 0.497345 0.969259 +vt 0.501060 0.046089 +vt 0.501038 0.046703 +vt 0.997618 0.821941 +vt 0.992766 0.003169 +vt 0.501292 0.046089 +vt 0.501133 0.046703 +vt 0.481199 0.963761 +vt 0.501292 0.046436 +vt 0.888458 0.939643 +vt 0.481199 0.983937 +vt 0.501292 0.046783 +vt 0.888458 0.959820 +vt 0.992766 0.813733 +vt 0.824124 0.799906 +vt 0.501060 0.046783 +vt 0.997618 0.005010 +vt 0.501038 0.046425 +vt 0.501133 0.046564 +vt 0.489866 0.963761 +vt 0.897125 0.919467 +vt 0.500846 0.046425 +vt 0.495250 0.051926 +vt 0.886373 0.905562 +vt 0.821822 0.005010 +vt 0.500942 0.046425 +vt 0.500942 0.046703 +vt 0.821822 0.821941 +vt 0.501020 0.047163 +vt 0.824213 0.003169 +vt 0.500846 0.046703 +vt 0.500837 0.047163 +vt 0.493429 0.927709 +vt 0.500846 0.046564 +vt 0.894761 0.905562 +vt 0.485041 0.927709 +vt 0.501020 0.047711 +vt 0.824213 0.813733 +vt 0.995819 0.799906 +vt 0.501036 0.046336 +vt 0.480551 0.032117 +vt 0.500814 0.046871 +vt 0.495103 0.056478 +vt 0.478126 0.032117 +vt 0.500861 0.046871 +vt 0.478126 0.030298 +vt 0.478126 0.028479 +vt 0.478126 0.026660 +vt 0.478126 0.024841 +vt 0.500942 0.046415 +vt 0.480551 0.024841 +vt 0.500846 0.046415 +vt 0.495103 0.051926 +vt 0.476307 0.026660 +vt 0.520833 0.250000 +vt 0.501014 0.046415 +vt 0.476307 0.024841 +vt 0.500814 0.046867 +vt 0.501029 0.046357 +vt 0.495250 0.056478 +vt 0.488957 0.969259 +vt 0.995819 0.046271 +vt 0.501036 0.046357 +vt 0.500861 0.046867 +vt 0.479167 1.000000 +vt 0.477520 0.032117 +vt 0.500873 0.046871 +vt 0.520833 1.000000 +vt 0.476307 0.032117 +vt 0.500896 0.046871 +vt 0.500000 1.000000 +vt 0.476913 0.032117 +vt 0.479167 0.250000 +vt 0.477520 0.024841 +vt 0.500966 0.046415 +vt 0.500000 0.250000 +vt 0.476913 0.024841 +vt 0.495250 0.054202 +vt 0.488957 0.947253 +vt 0.886373 0.927567 +vt 0.501292 0.047119 +vt 0.500939 0.922908 +vt 0.897125 0.959820 +vt 0.500939 0.902732 +vt 0.489866 0.983937 +vt 0.897125 0.939643 +vt 0.477520 0.026660 +vt 0.476913 0.026660 +vt 0.477520 0.030298 +vt 0.476913 0.030298 +vt 0.476913 0.028479 +vt 0.477520 0.028479 +vt 0.476307 0.030298 +vt 0.476307 0.028479 +s 1 +usemtl Book1.010 +f 26104/47267/17393 26105/47270/17393 26106/47273/17393 26107/47276/17393 26108/47280/17393 +f 26109/47285/17394 26107/47277/17395 26106/47274/17395 26110/47287/17395 +f 26110/47286/17396 26106/47275/17397 26105/47271/17397 26111/47288/17396 26112/47290/17398 26113/47291/17398 26114/47292/17398 +f 26115/47294/17399 26116/47296/17399 26117/47299/17399 26118/47302/17399 +f 26119/47305/17400 26120/47309/17400 26121/47312/17400 26122/47315/17401 26123/47319/17402 +f 26124/47321/17403 26104/47268/17403 26125/47322/17404 26120/47310/17405 26119/47306/17403 +f 26126/47325/17406 26127/47329/17406 26128/47330/17406 26129/47334/17407 26130/47337/17406 +f 26127/47328/17408 26124/47320/17408 26119/47307/17408 26128/47331/17408 +f 26129/47335/17409 26128/47332/17409 26131/47340/17410 26117/47300/17411 26116/47297/17411 +f 26128/47333/17412 26119/47308/17412 26123/47317/17412 26131/47341/17412 +f 26132/47344/17397 26133/47347/17413 26134/47349/17414 26135/47350/17414 26136/47351/17414 26137/47352/17413 26138/47354/17397 +f 26139/47357/17415 26112/47290/17398 26111/47288/17396 26140/47360/17415 +f 26141/47361/17416 26142/47367/17417 26133/47348/17416 26132/47345/17416 +f 26143/47368/17418 26144/47371/17418 26145/47374/17418 +f 26131/47342/17418 26123/47318/17418 26109/47283/17418 26142/47365/17418 +f 26117/47301/17419 26131/47343/17420 26142/47366/17420 26141/47362/17419 26118/47303/17420 +f 26146/47376/17408 26147/47379/17408 26140/47358/17408 +f 26138/47355/17421 26137/47353/17422 26127/47329/17423 26126/47325/17422 +f 26111/47289/17424 26105/47272/17425 26104/47268/17424 26124/47321/17426 +f 26138/47356/17399 26126/47326/17399 26148/47381/17399 26141/47363/17399 26132/47346/17399 +f 26123/47319/17427 26122/47315/17428 26149/47384/17428 26107/47278/17428 26109/47284/17427 +f 26150/47387/17393 26108/47281/17393 26107/47279/17393 26149/47385/17393 +f 26151/47390/17429 26152/47391/17397 26147/47380/17397 26146/47377/17429 +f 26153/47392/17429 26154/47393/17397 26155/47394/17397 26156/47395/17429 +f 26157/47396/17415 26114/47292/17398 26113/47291/17398 26158/47397/17415 +f 26154/47393/17397 26157/47396/17415 26158/47397/17415 26155/47394/17397 +f 26145/47375/17397 26144/47372/17415 26157/47396/17415 26154/47393/17397 +f 26144/47372/17415 26110/47286/17396 26114/47292/17398 26157/47396/17415 +f 26134/47349/17414 26153/47392/17429 26156/47395/17429 26135/47350/17414 +f 26133/47347/17413 26143/47369/17429 26153/47392/17429 26134/47349/17414 +f 26143/47369/17429 26145/47375/17397 26154/47393/17397 26153/47392/17429 +f 26136/47351/17414 26151/47390/17429 26146/47377/17429 26137/47352/17413 +f 26135/47350/17414 26156/47395/17429 26151/47390/17429 26136/47351/17414 +f 26156/47395/17429 26155/47394/17397 26152/47391/17397 26151/47390/17429 +f 26137/47353/17430 26146/47378/17430 26140/47359/17430 26111/47289/17431 26124/47321/17430 26127/47329/17430 +f 26142/47367/17432 26109/47285/17432 26110/47287/17432 26144/47373/17433 26143/47370/17433 26133/47348/17432 +f 26152/47391/17397 26139/47357/17415 26140/47360/17415 26147/47380/17397 +f 26155/47394/17397 26158/47397/17415 26139/47357/17415 26152/47391/17397 +f 26158/47397/17415 26113/47291/17398 26112/47290/17398 26139/47357/17415 +f 26121/47313/17393 26150/47389/17393 26149/47386/17393 26122/47316/17393 +f 26120/47311/17393 26125/47323/17393 26150/47388/17393 26121/47314/17393 +f 26125/47324/17393 26104/47269/17393 26108/47282/17393 26150/47389/17393 +f 26148/47382/17399 26115/47293/17399 26118/47304/17399 26141/47364/17399 +f 26126/47327/17399 26130/47338/17399 26115/47294/17399 26148/47383/17399 +f 26130/47339/17399 26129/47336/17399 26116/47298/17399 26115/47295/17399 diff --git a/resources/models/TheDenCollisions.mtl b/resources/models/TheDenCollisions.mtl new file mode 100644 index 00000000..32a5df24 --- /dev/null +++ b/resources/models/TheDenCollisions.mtl @@ -0,0 +1,54 @@ +# Blender 3.1.0 MTL File: 'TheDen.blend' +# www.blender.org + +newmtl Generic_walls.005 +Ns 250.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd GenericWalls.png + +newmtl Material.001 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd GenericWalls.png + +newmtl Material.041 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 + +newmtl Material.043 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 + +newmtl plain +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 diff --git a/resources/models/TheDenCollisions.obj b/resources/models/TheDenCollisions.obj new file mode 100644 index 00000000..0051fd65 --- /dev/null +++ b/resources/models/TheDenCollisions.obj @@ -0,0 +1,3819 @@ +# Blender 3.1.0 +# www.blender.org +mtllib TheDenCollisions.mtl +o Top +v 15.330101 3.000000 -8.453190 +v 15.330101 0.000000 -8.453190 +v 15.330101 3.000000 -7.453190 +v 15.330101 0.000000 -7.453190 +v -15.021439 3.000000 -8.453190 +v -15.021439 0.000000 -8.453190 +v -15.021439 3.000000 -7.453190 +v -15.021439 0.000000 -7.453190 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.5000 +vn -15.1758 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 15.1758 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.5000 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl plain +f 1/1/1 5/5/1 7/9/1 3/3/1 +f 4/4/2 3/3/2 7/10/2 8/12/2 +f 8/13/3 7/11/3 5/6/3 6/8/3 +f 6/7/4 2/2/4 4/4/4 8/14/4 +f 2/2/5 1/1/5 3/3/5 4/4/5 +f 6/8/6 5/6/6 1/1/6 2/2/6 +o Bottom +v 10.267729 3.000000 1.845210 +v 10.267729 0.000000 1.845210 +v 10.267729 3.000000 2.845210 +v 10.267729 0.000000 2.845210 +v -11.819096 3.000000 1.845210 +v -11.819096 0.000000 1.845210 +v -11.819096 3.000000 2.845210 +v -11.819096 0.000000 2.845210 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.5000 +vn -11.0434 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 11.0434 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.5000 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl plain +f 9/15/7 13/19/7 15/23/7 11/17/7 +f 12/18/8 11/17/8 15/24/8 16/26/8 +f 16/27/9 15/25/9 13/20/9 14/22/9 +f 14/21/10 10/16/10 12/18/10 16/28/10 +f 10/16/11 9/15/11 11/17/11 12/18/11 +f 14/22/12 13/20/12 9/15/12 10/16/12 +o Bottom Left.001 +v -10.933090 3.000000 2.488100 +v -10.933090 0.000000 2.488100 +v -10.933090 3.000000 3.488100 +v -10.933090 0.000000 3.488100 +v -15.366093 3.000000 2.488100 +v -15.366093 0.000000 2.488100 +v -15.366093 3.000000 3.488100 +v -15.366093 0.000000 3.488100 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.5000 +vn -2.2165 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 2.2165 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.5000 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl plain +f 17/29/13 21/33/13 23/37/13 19/31/13 +f 20/32/14 19/31/14 23/38/14 24/40/14 +f 24/41/15 23/39/15 21/34/15 22/36/15 +f 22/35/16 18/30/16 20/32/16 24/42/16 +f 18/30/17 17/29/17 19/31/17 20/32/17 +f 22/36/18 21/34/18 17/29/18 18/30/18 +o Middle Room +v -7.569115 3.000000 -2.858999 +v -7.569115 0.000000 -2.858999 +v -7.569115 3.000000 0.415970 +v -7.569115 0.000000 0.415970 +v -12.002117 3.000000 -2.858999 +v -12.002117 0.000000 -2.858999 +v -12.002117 3.000000 0.415970 +v -12.002117 0.000000 0.415970 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 1.6375 +vn -2.2165 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 2.2165 -0.0000 -0.0000 +vn -0.0000 -0.0000 -1.6375 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl Material.041 +f 25/43/19 29/47/19 31/51/19 27/45/19 +f 28/46/20 27/45/20 31/52/20 32/54/20 +f 32/55/21 31/53/21 29/48/21 30/50/21 +f 30/49/22 26/44/22 28/46/22 32/56/22 +f 26/44/23 25/43/23 27/45/23 28/46/23 +f 30/50/24 29/48/24 25/43/24 26/44/24 +o Left +v -14.120000 3.000000 -7.542170 +v -14.120000 0.000000 -7.542170 +v -14.120000 3.000000 -0.072270 +v -14.120000 0.000000 -0.072270 +v -15.120000 3.000000 -7.542170 +v -15.120000 0.000000 -7.542170 +v -15.120000 3.000000 -0.072270 +v -15.120000 0.000000 -0.072270 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 3.7349 +vn -0.5000 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 0.5000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -3.7350 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl plain +f 33/57/25 37/61/25 39/65/25 35/59/25 +f 36/60/26 35/59/26 39/66/26 40/68/26 +f 40/69/27 39/67/27 37/62/27 38/64/27 +f 38/63/28 34/58/28 36/60/28 40/70/28 +f 34/58/29 33/57/29 35/59/29 36/60/29 +f 38/64/30 37/62/30 33/57/30 34/58/30 +o Bottom Left +v -14.680000 3.000000 -0.225316 +v -14.680000 0.000000 -0.225316 +v -14.680000 3.000000 2.648202 +v -14.680000 0.000000 2.648202 +v -15.680000 3.000000 -0.225316 +v -15.680000 0.000000 -0.225316 +v -15.680000 3.000000 2.648202 +v -15.680000 0.000000 2.648202 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 1.4368 +vn -0.5000 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 0.5000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -1.4368 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl Material.043 +f 41/71/31 45/75/31 47/79/31 43/73/31 +f 44/74/32 43/73/32 47/80/32 48/82/32 +f 48/83/33 47/81/33 45/76/33 46/78/33 +f 46/77/34 42/72/34 44/74/34 48/84/34 +f 42/72/35 41/71/35 43/73/35 44/74/35 +f 46/78/36 45/76/36 41/71/36 42/72/36 +o Bottom Right +v 15.083402 3.137308 -2.968632 +v 15.083402 -0.137308 -2.968632 +v 15.083402 3.137308 2.130828 +v 15.083402 -0.137308 2.130828 +v 9.709519 3.137308 -2.968632 +v 9.709519 -0.137308 -2.968632 +v 9.709519 3.137308 2.130828 +v 9.709519 -0.137308 2.130828 +vn -0.0000 1.6373 -0.0000 +vn -0.0000 -0.0000 2.5203 +vn -2.6869 -0.0000 -0.0000 +vn -0.0000 -1.6373 -0.0000 +vn 2.6869 -0.0000 -0.0000 +vn -0.0000 -0.0000 -2.5203 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl plain +f 49/85/37 53/89/37 55/93/37 51/87/37 +f 52/88/38 51/87/38 55/94/38 56/96/38 +f 56/97/39 55/95/39 53/90/39 54/92/39 +f 54/91/40 50/86/40 52/88/40 56/98/40 +f 50/86/41 49/85/41 51/87/41 52/88/41 +f 54/92/42 53/90/42 49/85/42 50/86/42 +o Top Right +v 15.536477 3.000000 -8.224418 +v 15.536477 0.000000 -8.224418 +v 15.536477 3.000000 -1.931603 +v 15.536477 0.000000 -1.931603 +v 14.536477 3.000000 -8.224418 +v 14.536477 0.000000 -8.224418 +v 14.536477 3.000000 -1.931603 +v 14.536477 0.000000 -1.931603 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 3.1464 +vn -0.5000 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 0.5000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -3.1464 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl plain +f 57/99/43 61/103/43 63/107/43 59/101/43 +f 60/102/44 59/101/44 63/108/44 64/110/44 +f 64/111/45 63/109/45 61/104/45 62/106/45 +f 62/105/46 58/100/46 60/102/46 64/112/46 +f 58/100/47 57/99/47 59/101/47 60/102/47 +f 62/106/48 61/104/48 57/99/48 58/100/48 +o Floor +v -18.637897 -0.005000 -7.614707 +v -18.637897 -1.924188 -7.614707 +v 17.205841 -0.005000 -7.614709 +v 17.205841 -1.924188 -7.614709 +v -18.637897 -0.005000 8.369568 +v -18.637897 -1.924188 8.369568 +v 17.205841 -0.005000 8.369566 +v 17.205841 -1.924188 8.369566 +v -13.517364 -1.924188 8.369567 +v -8.396830 -1.924188 8.369567 +v -3.276295 -1.924188 8.369566 +v 1.844239 -1.924188 8.369566 +v 6.964774 -1.924188 8.369566 +v 12.085307 -1.924188 8.369566 +v -13.517364 -0.005000 -7.614708 +v -8.396830 -0.005000 -7.614708 +v -3.276295 -0.005000 -7.614708 +v 1.844239 -0.005000 -7.614708 +v 6.964773 -0.005000 -7.614709 +v 12.085307 -0.005000 -7.614709 +v 12.085307 -0.005000 8.369566 +v 6.964774 -0.005000 8.369566 +v 1.844239 -0.005000 8.369566 +v -3.276295 -0.005000 8.369566 +v -8.396830 -0.005000 8.369567 +v -13.517364 -0.005000 8.369567 +v 12.085307 -1.924188 -7.614709 +v 6.964773 -1.924188 -7.614709 +v 1.844239 -1.924188 -7.614708 +v -3.276295 -1.924188 -7.614708 +v -8.396830 -1.924188 -7.614708 +v -13.517364 -1.924188 -7.614708 +v -18.637897 -1.924188 0.377430 +v 17.205841 -0.005000 0.377428 +v 17.205841 -1.924188 0.377428 +v -18.637897 -0.005000 0.377430 +v -13.517364 -1.924188 0.377430 +v -8.396830 -1.924188 0.377429 +v -3.276295 -1.924188 0.377429 +v 1.844239 -1.924188 0.377429 +v 6.964773 -1.924188 0.377429 +v 12.085307 -1.924188 0.377428 +v 4.404506 -1.924188 8.369566 +v 4.404505 -0.005000 -7.614708 +v 4.404506 -0.005000 8.369566 +v 4.404505 -1.924188 -7.614708 +v 4.404506 -1.924188 0.377429 +v 9.525041 -1.924188 8.369566 +v 9.525041 -0.005000 -7.614709 +v 9.525041 -0.005000 8.369566 +v 9.525041 -1.924188 -7.614709 +v 9.525041 -1.924188 0.377429 +v -0.716028 -1.924188 8.369566 +v -0.716029 -0.005000 -7.614708 +v -0.716028 -0.005000 8.369566 +v -0.716029 -1.924188 -7.614708 +v -0.716028 -1.924188 0.377429 +v -5.836562 -1.924188 8.369566 +v -5.836563 -0.005000 -7.614708 +v -5.836562 -0.005000 8.369566 +v -5.836563 -1.924188 -7.614708 +v -5.836562 -1.924188 0.377429 +v -10.957097 -1.924188 8.369567 +v -10.957097 -0.005000 -7.614708 +v -10.957097 -0.005000 8.369567 +v -10.957097 -1.924188 -7.614708 +v -10.957097 -1.924188 0.377429 +v -16.077631 -0.005000 8.369567 +v -16.077631 -1.924188 -7.614708 +v -16.077631 -1.924188 8.369567 +v -16.077631 -0.005000 -7.614708 +v -16.077631 -1.924188 0.377430 +v 14.645575 -1.924188 8.369566 +v 14.645575 -0.005000 -7.614709 +v 14.645575 -0.005000 8.369566 +v 14.645575 -1.924188 -7.614709 +v 14.645575 -1.924188 0.377428 +v -18.637897 -1.924188 4.373498 +v 17.205841 -0.005000 4.373497 +v -13.517364 -1.924188 4.373498 +v -8.396830 -1.924188 4.373498 +v -3.276295 -1.924188 4.373498 +v 1.844239 -1.924188 4.373498 +v 6.964773 -1.924188 4.373497 +v 12.085307 -1.924188 4.373497 +v 17.205841 -1.924188 4.373497 +v -18.637897 -0.005000 4.373498 +v 4.404506 -1.924188 4.373497 +v 9.525041 -1.924188 4.373497 +v -0.716028 -1.924188 4.373498 +v -5.836562 -1.924188 4.373498 +v -10.957097 -1.924188 4.373498 +v -16.077631 -1.924188 4.373498 +v 14.645575 -1.924188 4.373497 +v 17.205841 -1.924188 -3.618640 +v -18.637897 -0.005000 -3.618639 +v -18.637897 -1.924188 -3.618639 +v 17.205841 -0.005000 -3.618640 +v -13.517364 -1.924188 -3.618639 +v -8.396830 -1.924188 -3.618639 +v -3.276295 -1.924188 -3.618640 +v 1.844239 -1.924188 -3.618640 +v 6.964773 -1.924188 -3.618640 +v 12.085307 -1.924188 -3.618640 +v 4.404506 -1.924188 -3.618640 +v 9.525041 -1.924188 -3.618640 +v -0.716028 -1.924188 -3.618640 +v -5.836562 -1.924188 -3.618639 +v -10.957097 -1.924188 -3.618639 +v -16.077631 -1.924188 -3.618639 +v 14.645575 -1.924188 -3.618640 +vn 17.9219 -0.0000 -0.0000 +vn -0.0000 -0.0000 7.9921 +vn -0.0000 -0.1250 -0.0000 +vn -0.0000 -0.0000 -7.9921 +vn -17.9219 -0.0000 -0.0000 +vn -0.0000 0.1250 -0.0000 +vt 0.007552 0.974537 +vt 0.276302 0.669907 +vt -11.951389 6.495833 +vt 0.007552 0.695833 +vt 0.363802 0.651389 +vt 0.276302 0.989352 +vt 0.005469 0.989352 +vt 0.122910 0.256174 +vt 12.951389 6.495833 +vt 0.003385 0.651389 +vt 0.005469 0.669907 +vt 0.217412 0.256174 +vt 0.284635 0.990278 +vt 0.377344 0.974537 +vt -11.951389 -5.495833 +vt 0.284635 0.662500 +vt 0.367448 0.651389 +vt 0.377344 0.695833 +vt 0.122910 0.161672 +vt 0.020052 0.662500 +vt 12.951389 -5.495833 +vt 0.217412 0.161672 +vt 0.020052 0.990278 +vt 0.001302 0.006019 +vt 0.020052 0.662500 +vt 0.379427 0.662500 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.020052 0.662500 +vt 0.286719 0.990278 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.297135 0.662500 +vt 0.374740 0.662500 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.020052 0.662500 +vt 0.379427 0.662500 +vt 0.361719 0.006019 +vt 0.001302 0.006019 +vt 0.020052 0.662500 +vt 0.290885 0.990278 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.292969 0.662500 +vt 0.020052 0.990278 +vt 0.358073 0.004167 +vt 0.001302 0.006019 +vt 0.551302 0.993056 +vt 0.926823 0.993056 +vt 0.276302 0.989352 +vt 0.007552 0.669907 +vt 0.007552 0.989352 +vt 0.651823 0.989352 +vt 0.007552 0.985648 +vt 0.383073 0.985648 +vt 0.651823 0.669907 +vt 0.553385 0.658796 +vt 0.553385 0.978241 +vt 0.651823 0.989352 +vt 0.292969 0.990278 +vt 0.020052 0.662500 +vt 0.020052 0.990278 +vt 0.290885 0.662500 +vt 0.020052 0.990278 +vt 0.379427 0.990278 +vt 0.297135 0.990278 +vt 0.374740 0.990278 +vt 0.020052 0.990278 +vt 0.286719 0.662500 +vt 0.020052 0.990278 +vt 0.379427 0.990278 +vt 0.553385 0.658796 +vt 0.003385 0.651389 +vt 0.651823 0.669907 +vt 0.361719 0.651389 +vt 0.651823 0.989352 +vt 0.003385 0.651389 +vt 0.361719 0.651389 +vt 0.553385 0.978241 +vt 0.007552 0.666204 +vt 0.003385 0.651389 +vt 0.361719 0.651389 +vt 0.383073 0.666204 +vt 0.007552 0.669907 +vt 0.003385 0.651389 +vt 0.361719 0.651389 +vt 0.651823 0.669907 +vt 0.276302 0.669907 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.007552 0.989352 +vt 0.551302 0.673611 +vt 0.003385 0.651389 +vt 0.003385 0.006019 +vt 0.926823 0.673611 +vt 0.377344 0.974537 +vt 0.363802 0.651389 +vt 0.363802 0.006019 +vt 0.375260 0.695833 +vt 0.122910 0.208923 +vt 0.001302 0.651389 +vt 0.217412 0.208923 +vt 0.001302 0.006019 +vt 0.377344 0.695833 +vt 0.375260 0.974537 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.001302 0.651389 +vt 0.361719 0.651389 +vt 0.363802 0.006019 +vt 0.001302 0.004167 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.363802 0.006019 +vt 0.361719 0.651389 +vt 0.001302 0.651389 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.003385 0.651389 +vt 0.363802 0.651389 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.374740 0.662500 +vt 0.650260 0.990278 +vt 0.003385 0.006019 +vt 0.363802 0.006019 +vt 0.276302 0.669907 +vt 0.007552 0.985648 +vt 0.374740 0.990278 +vt 0.650260 0.662500 +vt 0.276302 0.989352 +vt 0.361719 0.651389 +vt 0.003385 0.651389 +vt 0.007552 0.666204 +vt 0.363802 0.651389 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.374740 0.662500 +vt 0.374740 0.990278 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.928906 0.978241 +vt 0.928906 0.658796 +vt 0.374740 0.990278 +vt 0.374740 0.662500 +vt 0.928906 0.658796 +vt 0.361719 0.651389 +vt 0.003385 0.651389 +vt 0.928906 0.978241 +vt 0.361719 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.651823 0.662500 +vt 0.020052 0.662500 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.383073 0.985648 +vt 0.276302 0.989352 +vt 0.651823 0.990278 +vt 0.020052 0.990278 +vt 0.383073 0.666204 +vt 0.361719 0.651389 +vt 0.003385 0.651389 +vt 0.276302 0.669907 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.374740 0.662500 +vt 0.020052 0.662500 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.383073 0.989352 +vt 0.383073 0.669907 +vt 0.374740 0.990278 +vt 0.020052 0.990278 +vt 0.383073 0.669907 +vt 0.361719 0.651389 +vt 0.001302 0.651389 +vt 0.383073 0.989352 +vt 0.363802 0.651389 +vt 0.001302 0.006019 +vt 0.003385 0.651389 +vt 0.374740 0.662500 +vt 0.641406 0.990278 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.651823 0.989352 +vt 0.551302 0.993056 +vt 0.374740 0.990278 +vt 0.641406 0.662500 +vt 0.651823 0.669907 +vt 0.363802 0.651389 +vt 0.361719 0.006019 +vt 0.551302 0.673611 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.363802 0.004167 +vt 0.644010 0.990278 +vt 0.020052 0.990278 +vt 0.926823 0.673611 +vt 0.361719 0.651389 +vt 0.001302 0.651389 +vt 0.651823 0.989352 +vt 0.644010 0.662500 +vt 0.020052 0.662500 +vt 0.364323 -0.000463 +vt 0.363802 0.006019 +vt 0.926823 0.993056 +vt 0.651823 0.669907 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.652344 0.662500 +vt 0.374740 0.990278 +vt 0.003385 0.004167 +vt 0.363802 0.006019 +vt 0.380990 0.989352 +vt 0.276302 0.989352 +vt 0.652344 0.990278 +vt 0.374740 0.662500 +vt 0.365885 0.651389 +vt 0.380990 0.669907 +vt 0.276302 0.669907 +vt 0.003385 0.651389 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.007552 0.974537 +vt 0.360156 0.006019 +vt 0.000260 0.651389 +vt 0.007552 0.695833 +vt 0.122910 0.185297 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.361719 0.006019 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.361719 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.003385 0.006019 +vt 0.363802 0.006019 +vt 0.361719 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.001302 0.651389 +vt 0.217412 0.185297 +vt 0.007552 0.695833 +vt 0.007552 0.974537 +vt 0.363802 0.006019 +vt 0.003385 0.651389 +vt 0.363802 0.651389 +vt 0.361719 0.006019 +vt 0.001302 0.006019 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.363802 0.006019 +vt 0.003385 0.006019 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt -0.002344 -0.000463 +vt 0.363802 0.651389 +vt 0.363802 0.006019 +vt 0.001302 0.006019 +vt 0.003385 0.651389 +vt 0.363802 0.651389 +vt -0.000260 0.006019 +vt 0.217412 0.232548 +vt 0.001302 0.651389 +vt 0.375260 0.974537 +vt 0.007552 0.974537 +vt 0.375260 0.695833 +vt 0.363802 0.006019 +vt 0.363802 0.651389 +vt 0.007552 0.695833 +vt 0.122910 0.232548 +vt 0.003385 0.006019 +vt 0.003385 0.651389 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.001302 0.006019 +vt 0.363802 0.006019 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.003385 0.006019 +vt 0.363802 0.651389 +vt 0.361719 0.006019 +vt 0.003385 0.006019 +vt 0.361719 0.006019 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.003385 0.006019 +vt 0.361719 0.006019 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.003385 0.006019 +vt 0.361719 0.006019 +vt 0.363802 0.651389 +vt 0.001302 0.651389 +vt 0.361719 0.006019 +vt 0.003385 0.006019 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.361719 0.006019 +vt 0.003385 0.006019 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.361719 0.006019 +vt 0.003385 0.006019 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.361719 0.006019 +vt 0.001302 0.006019 +vt 0.001302 0.651389 +vt 0.003385 0.006019 +vt 0.363802 0.006019 +vt 0.361719 0.651389 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.361719 0.006019 +vt 0.001302 0.006019 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +vt 0.365885 0.006019 +vt 0.003385 0.006019 +vt 0.001302 0.651389 +vt 0.363802 0.651389 +s 0 +usemtl plain +f 150/382/49 143/356/49 71/131/49 72/134/49 +f 134/326/50 132/320/50 69/125/50 70/128/50 +f 175/469/51 140/344/51 68/122/51 159/412/51 +f 140/345/52 138/340/52 67/119/52 68/123/52 +f 161/417/53 160/415/53 65/113/53 66/116/53 +f 133/322/52 135/330/52 79/161/52 96/205/52 +f 130/312/52 128/308/52 80/163/52 95/201/52 +f 125/297/52 123/293/52 81/165/52 94/197/52 +f 120/281/52 118/277/52 82/167/52 93/193/52 +f 110/250/52 108/246/52 83/169/52 92/189/52 +f 115/265/52 113/261/52 84/171/52 91/185/52 +f 174/465/51 133/323/51 96/206/51 163/422/51 +f 173/461/51 130/313/51 95/202/51 164/426/51 +f 172/457/51 125/298/51 94/198/51 165/430/51 +f 171/453/51 120/282/51 93/194/51 166/433/51 +f 169/445/51 110/251/51 92/190/51 167/437/51 +f 170/449/51 115/266/51 91/186/51 168/441/51 +f 137/336/50 139/342/50 85/173/50 78/157/50 +f 112/257/50 114/263/50 86/175/50 77/153/50 +f 107/242/50 109/248/50 87/177/50 76/149/50 +f 117/273/50 119/279/50 88/179/50 75/145/50 +f 122/289/50 124/295/50 89/181/50 74/141/50 +f 127/304/50 129/310/50 90/183/50 73/137/50 +f 153/388/51 116/269/51 106/238/51 149/376/51 +f 152/385/51 111/254/51 105/234/51 148/372/51 +f 154/392/51 121/285/51 104/231/51 147/369/51 +f 155/396/51 126/301/51 103/227/51 146/365/51 +f 156/400/51 131/316/51 102/223/51 145/361/51 +f 157/404/51 136/332/51 101/219/51 144/357/51 +f 142/352/53 151/383/53 100/217/53 97/209/53 +f 158/408/51 141/348/51 99/214/51 150/380/51 +f 159/413/49 162/421/49 98/213/49 99/215/49 +f 147/371/51 104/233/51 111/256/51 152/387/51 +f 77/154/50 86/176/50 109/249/50 107/243/50 +f 166/434/51 93/195/51 110/252/51 169/446/51 +f 93/196/52 82/168/52 108/247/52 110/253/52 +f 148/373/51 105/235/51 116/270/51 153/389/51 +f 78/158/50 85/174/50 114/264/50 112/258/50 +f 167/438/51 92/191/51 115/267/51 170/450/51 +f 92/192/52 83/170/52 113/262/52 115/268/52 +f 146/366/51 103/228/51 121/286/51 154/393/51 +f 76/150/50 87/178/50 119/280/50 117/274/50 +f 165/432/51 94/199/51 120/283/51 171/454/51 +f 94/200/52 81/166/52 118/278/52 120/284/52 +f 145/362/51 102/224/51 126/303/51 155/397/51 +f 75/146/50 88/180/50 124/296/50 122/290/50 +f 164/427/51 95/203/51 125/299/51 172/458/51 +f 95/204/52 80/164/52 123/294/52 125/300/52 +f 144/358/51 101/220/51 131/317/51 156/401/51 +f 74/142/50 89/182/50 129/311/50 127/305/50 +f 163/423/51 96/207/51 130/314/51 173/462/51 +f 96/208/52 79/162/52 128/309/52 130/315/52 +f 142/353/51 97/210/51 136/333/51 157/405/51 +f 161/418/51 66/117/51 133/324/51 174/466/51 +f 66/118/52 65/114/52 135/331/52 133/325/52 +f 73/138/50 90/184/50 132/321/50 134/327/50 +f 149/377/51 106/239/51 141/349/51 158/409/51 +f 72/135/50 71/132/50 139/343/50 137/337/50 +f 91/187/52 84/172/52 138/341/52 140/346/52 +f 168/442/51 91/188/51 140/347/51 175/470/51 +f 78/159/51 149/378/51 158/410/51 137/338/51 +f 70/129/51 142/354/51 157/406/51 134/328/51 +f 73/139/51 144/359/51 156/402/51 127/306/51 +f 74/143/51 145/363/51 155/398/51 122/291/51 +f 75/147/51 146/367/51 154/394/51 117/275/51 +f 77/155/51 148/374/51 153/390/51 112/259/51 +f 76/151/51 147/370/51 152/386/51 107/244/51 +f 137/339/51 158/411/51 150/381/51 72/136/51 +f 70/130/53 69/126/53 151/384/53 142/355/53 +f 134/329/51 157/407/51 144/360/51 73/140/51 +f 127/307/51 156/403/51 145/364/51 74/144/51 +f 122/292/51 155/399/51 146/368/51 75/148/51 +f 117/276/51 154/395/51 147/371/51 76/152/51 +f 107/245/51 152/387/51 148/375/51 77/156/51 +f 112/260/51 153/391/51 149/379/51 78/160/51 +f 99/215/49 98/213/49 143/356/49 150/382/49 +f 106/240/51 168/443/51 175/471/51 141/350/51 +f 97/211/51 161/419/51 174/467/51 136/334/51 +f 101/221/51 163/424/51 173/463/51 131/318/51 +f 102/225/51 164/428/51 172/459/51 126/302/51 +f 103/229/51 165/431/51 171/455/51 121/287/51 +f 105/236/51 167/439/51 170/451/51 116/271/51 +f 104/232/51 166/435/51 169/447/51 111/255/51 +f 68/124/49 67/120/49 162/421/49 159/413/49 +f 116/272/51 170/452/51 168/444/51 106/241/51 +f 111/256/51 169/448/51 167/440/51 105/237/51 +f 121/288/51 171/456/51 166/436/51 104/233/51 +f 126/303/51 172/460/51 165/432/51 103/230/51 +f 131/319/51 173/464/51 164/429/51 102/226/51 +f 136/335/51 174/468/51 163/425/51 101/222/51 +f 97/212/53 100/218/53 160/416/53 161/420/53 +f 141/351/51 175/472/51 159/414/51 99/216/51 +f 67/121/54 65/115/54 69/127/54 71/133/54 +o Theatrette - Bottom Left glass wall.002 +v 4.812383 3.250806 -3.141650 +v 4.812383 -1.420077 -3.141650 +v 7.760053 3.250806 -3.141650 +v 7.760053 -1.420077 -3.141650 +v 4.812383 3.250806 -2.941650 +v 4.812383 -1.420077 -2.941650 +v 7.760053 3.250806 -2.941650 +v 7.760053 -1.420077 -2.941650 +vn -0.0000 10.3638 -0.0000 +vn 1.4738 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.1000 +vn -0.0000 -10.3638 -0.0000 +vn -0.0000 -0.0000 -0.1000 +vn -1.4738 -0.0000 -0.0000 +vt 0.505000 0.505000 +vt 0.495000 0.505000 +vt 0.505000 0.505000 +vt 0.495000 0.505000 +vt 0.505000 0.505000 +vt 0.505000 0.495000 +vt 0.495000 0.505000 +vt 0.495000 0.495000 +vt 0.505000 0.505000 +vt 0.505000 0.515000 +vt 0.505000 0.485000 +vt 0.495000 0.515000 +vt 0.495000 0.485000 +vt 0.495000 0.505000 +s 0 +usemtl plain +f 176/473/55 180/477/55 182/481/55 178/475/55 +f 179/476/56 178/475/56 182/482/56 183/484/56 +f 183/485/57 182/483/57 180/478/57 181/480/57 +f 181/479/58 177/474/58 179/476/58 183/486/58 +f 177/474/59 176/473/59 178/475/59 179/476/59 +f 181/480/60 180/478/60 176/473/60 177/474/60 +o Theatrette - glass wall.002 +v 4.996949 3.338105 -7.482034 +v 4.996949 -1.420076 -7.482034 +v 4.996949 3.338105 -3.135219 +v 4.996949 -1.420076 -3.135219 +v 4.796949 3.338105 -7.482034 +v 4.796949 -1.420076 -7.482034 +v 4.796949 3.338105 -3.135219 +v 4.796949 -1.420076 -3.135219 +vn -0.0000 1.7193 -0.0000 +vn -0.0000 -0.0000 2.3487 +vn -0.1000 -0.0000 -0.0000 +vn -0.0000 -1.7193 -0.0000 +vn 0.1000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -2.3487 +vt 0.505000 0.505000 +vt 0.495000 0.505000 +vt 0.505000 0.515000 +vt 0.495000 0.515000 +vt 0.525000 0.505000 +vt 0.505000 0.485000 +vt 0.475000 0.505000 +vt 0.495000 0.485000 +vt 0.525000 0.515000 +vt 0.505000 0.525000 +vt 0.505000 0.475000 +vt 0.495000 0.525000 +vt 0.495000 0.475000 +vt 0.475000 0.515000 +s 0 +usemtl plain +f 184/487/61 188/491/61 190/495/61 186/489/61 +f 187/490/62 186/489/62 190/496/62 191/498/62 +f 191/499/63 190/497/63 188/492/63 189/494/63 +f 189/493/64 185/488/64 187/490/64 191/500/64 +f 185/488/65 184/487/65 186/489/65 187/490/65 +f 189/494/66 188/492/66 184/487/66 185/488/66 +o Theatrette - Mid Bottom.001 +v 9.933788 3.000000 -3.198536 +v 9.933788 0.000000 -3.198536 +v 9.933788 3.000000 -2.904123 +v 9.933788 0.000000 -2.904123 +v 9.703789 3.000000 -3.198536 +v 9.703789 0.000000 -3.198536 +v 9.703789 3.000000 -2.904123 +v 9.703789 0.000000 -2.904123 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.1472 +vn -0.1150 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 0.1150 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1472 +vt 0.625000 0.500000 +vt 0.144500 0.987250 +vt 0.375000 0.500000 +vt 0.144500 0.013250 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.557500 0.983250 +vt 0.014500 0.987250 +vt 0.557500 0.025250 +vt 0.125000 0.500000 +vt 0.014500 0.013250 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.703500 0.983250 +vt 0.375000 1.000000 +vt 0.703500 0.025250 +vt 0.125000 0.750000 +s 0 +usemtl plain +f 192/501/67 196/507/67 198/513/67 194/505/67 +f 195/506/68 194/505/68 198/514/68 199/516/68 +f 199/517/69 198/515/69 196/508/69 197/510/69 +f 197/511/70 193/503/70 195/506/70 199/518/70 +f 193/503/71 192/501/71 194/505/71 195/506/71 +f 197/512/72 196/509/72 192/502/72 193/504/72 +o Main - Mid.007 +v 0.107729 3.000000 -3.069562 +v 0.107729 0.000000 -3.069562 +v 0.107729 3.000000 -2.839562 +v 0.107729 0.000000 -2.839562 +v -0.122271 3.000000 -3.069562 +v -0.122271 0.000000 -3.069562 +v -0.122271 3.000000 -2.839562 +v -0.122271 0.000000 -2.839562 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.1150 +vn -0.1150 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 0.1150 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1150 +vt 0.625000 0.500000 +vt 0.682500 0.995250 +vt 0.686500 0.041250 +vt 0.375000 0.500000 +vt 0.682500 0.000250 +vt 0.686500 0.903250 +vt 0.625000 0.750000 +vt 0.559500 0.007750 +vt 0.544500 0.995250 +vt 0.559500 0.995750 +vt 0.375000 0.750000 +vt 0.544500 0.000250 +vt 0.875000 0.500000 +vt 0.698500 0.069250 +vt 0.562500 0.041250 +vt 0.698500 0.880250 +vt 0.125000 0.500000 +vt 0.562500 0.903250 +vt 0.875000 0.750000 +vt 0.699500 0.007750 +vt 0.534500 0.069250 +vt 0.699500 0.995750 +vt 0.534500 0.880250 +vt 0.125000 0.750000 +s 0 +usemtl plain +f 200/519/73 204/531/73 206/537/73 202/525/73 +f 203/528/74 202/526/74 206/538/74 207/540/74 +f 207/541/75 206/539/75 204/532/75 205/534/75 +f 205/535/76 201/522/76 203/529/76 207/542/76 +f 201/523/77 200/520/77 202/527/77 203/530/77 +f 205/536/78 204/533/78 200/521/78 201/524/78 +o Main - Left.003 +v -9.707244 3.000000 -3.069562 +v -9.707244 0.000000 -3.069562 +v -9.707244 3.000000 -2.839562 +v -9.707244 0.000000 -2.839562 +v -9.937243 3.000000 -3.069562 +v -9.937243 0.000000 -3.069562 +v -9.937243 3.000000 -2.839562 +v -9.937243 0.000000 -2.839562 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.1150 +vn -0.1150 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 0.1150 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1150 +vt 0.625000 0.500000 +vt 0.717500 0.991250 +vt 0.351500 0.991750 +vt 0.375000 0.500000 +vt 0.717500 0.009250 +vt 0.351500 0.019750 +vt 0.625000 0.750000 +vt 0.650500 0.140750 +vt 0.533500 0.991250 +vt 0.554500 0.140750 +vt 0.375000 0.750000 +vt 0.533500 0.009250 +vt 0.875000 0.500000 +vt 0.542500 0.991250 +vt 0.523500 0.993750 +vt 0.542500 0.004250 +vt 0.125000 0.500000 +vt 0.523500 0.021750 +vt 0.875000 0.750000 +vt 0.650500 0.859250 +vt 0.692500 0.991250 +vt 0.554500 0.859250 +vt 0.692500 0.004250 +vt 0.125000 0.750000 +s 0 +usemtl plain +f 208/543/79 212/555/79 214/561/79 210/549/79 +f 211/552/80 210/550/80 214/562/80 215/564/80 +f 215/565/81 214/563/81 212/556/81 213/558/81 +f 213/559/82 209/546/82 211/553/82 215/566/82 +f 209/547/83 208/544/83 210/551/83 211/554/83 +f 213/560/84 212/557/84 208/545/84 209/548/84 +o Main - Mid.006 +v -4.583330 3.000000 -3.069562 +v -4.583330 0.000000 -3.069562 +v -4.583330 3.000000 -2.839562 +v -4.583330 0.000000 -2.839562 +v -4.813330 3.000000 -3.069562 +v -4.813330 0.000000 -3.069562 +v -4.813330 3.000000 -2.839562 +v -4.813330 0.000000 -2.839562 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.1150 +vn -0.1150 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 0.1150 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1150 +vt 0.625000 0.500000 +vt 0.679500 0.020750 +vt 0.523500 0.834750 +vt 0.375000 0.500000 +vt 0.679500 0.927750 +vt 0.523500 0.048750 +vt 0.625000 0.750000 +vt 0.519500 0.997250 +vt 0.549500 0.020750 +vt 0.519500 0.037250 +vt 0.375000 0.750000 +vt 0.549500 0.927750 +vt 0.875000 0.500000 +vt 0.547500 0.882250 +vt 0.673500 0.834750 +vt 0.547500 0.065250 +vt 0.125000 0.500000 +vt 0.673500 0.048750 +vt 0.875000 0.750000 +vt 0.347500 0.995750 +vt 0.679500 0.882250 +vt 0.347500 0.035750 +vt 0.679500 0.065250 +vt 0.125000 0.750000 +s 0 +usemtl plain +f 216/567/85 220/579/85 222/585/85 218/573/85 +f 219/576/86 218/574/86 222/586/86 223/588/86 +f 223/589/87 222/587/87 220/580/87 221/582/87 +f 221/583/88 217/570/88 219/577/88 223/590/88 +f 217/571/89 216/568/89 218/575/89 219/578/89 +f 221/584/90 220/581/90 216/569/90 217/572/90 +o Main - Mid.005 +v 4.993284 3.000000 -3.014522 +v 4.993284 0.000000 -3.014522 +v 4.993284 3.000000 -2.784522 +v 4.993284 0.000000 -2.784522 +v 4.793606 3.000000 -3.014522 +v 4.793606 0.000000 -3.014522 +v 4.793606 3.000000 -2.784522 +v 4.793606 0.000000 -2.784522 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.1150 +vn -0.0998 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 0.0998 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1150 +vt 0.625000 0.500000 +vt 0.682500 0.995250 +vt 0.686500 0.041250 +vt 0.375000 0.500000 +vt 0.682500 0.000250 +vt 0.686500 0.903250 +vt 0.625000 0.750000 +vt 0.559500 0.007750 +vt 0.544500 0.995250 +vt 0.559500 0.995750 +vt 0.375000 0.750000 +vt 0.544500 0.000250 +vt 0.875000 0.500000 +vt 0.698500 0.069250 +vt 0.562500 0.041250 +vt 0.698500 0.880250 +vt 0.125000 0.500000 +vt 0.562500 0.903250 +vt 0.875000 0.750000 +vt 0.699500 0.007750 +vt 0.534500 0.069250 +vt 0.699500 0.995750 +vt 0.534500 0.880250 +vt 0.125000 0.750000 +s 0 +usemtl plain +f 224/591/91 228/603/91 230/609/91 226/597/91 +f 227/600/92 226/598/92 230/610/92 231/612/92 +f 231/613/93 230/611/93 228/604/93 229/606/93 +f 229/607/94 225/594/94 227/601/94 231/614/94 +f 225/595/95 224/592/95 226/599/95 227/602/95 +f 229/608/96 228/605/96 224/593/96 225/596/96 +o Middle right upper wall +v 0.665834 3.000000 -2.868740 +v 0.665834 0.000000 -2.868740 +v 0.665834 3.000000 -2.668740 +v 0.665834 0.000000 -2.668740 +v -1.325542 3.000000 -2.868740 +v -1.325542 0.000000 -2.868740 +v -1.325542 3.000000 -2.668740 +v -1.325542 0.000000 -2.668740 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.1000 +vn -0.9957 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 0.9957 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1000 +vt 0.625000 0.500000 +vt 0.276389 0.023798 +vt 0.966204 -0.000240 +vt 0.375000 0.500000 +vt 0.276389 0.977644 +vt 0.966204 0.995913 +vt 0.625000 0.750000 +vt 0.405093 -0.759856 +vt 0.357870 0.023798 +vt 0.405093 1.845913 +vt 0.375000 0.750000 +vt 0.357870 0.977644 +vt 0.875000 0.500000 +vt 0.393981 0.835337 +vt 0.016204 -0.000240 +vt 0.393981 0.201683 +vt 0.125000 0.500000 +vt 0.016204 0.995913 +vt 0.875000 0.750000 +vt 3.029167 -0.759856 +vt 0.093981 0.835337 +vt 3.029167 1.845913 +vt 0.093981 0.201683 +vt 0.125000 0.750000 +s 0 +usemtl plain +f 232/615/97 236/627/97 238/633/97 234/621/97 +f 235/624/98 234/622/98 238/634/98 239/636/98 +f 239/637/99 238/635/99 236/628/99 237/630/99 +f 237/631/100 233/618/100 235/625/100 239/638/100 +f 233/619/101 232/616/101 234/623/101 235/626/101 +f 237/632/102 236/629/102 232/617/102 233/620/102 +o Middle right upper wall.001 +v 0.665834 3.000000 0.248451 +v 0.665834 0.000000 0.248451 +v 0.665834 3.000000 0.448451 +v 0.665834 0.000000 0.448451 +v -1.325542 3.000000 0.248451 +v -1.325542 0.000000 0.248451 +v -1.325542 3.000000 0.448451 +v -1.325542 0.000000 0.448451 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.1000 +vn -0.9957 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 0.9957 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1000 +vt 0.625000 0.500000 +vt 0.293981 0.956010 +vt 0.893981 0.863221 +vt 0.375000 0.500000 +vt 0.293981 0.110337 +vt 0.131944 0.863221 +vt 0.625000 0.750000 +vt 0.691204 0.244471 +vt 0.143056 0.958894 +vt 0.019907 0.244471 +vt 0.375000 0.750000 +vt 0.143056 0.113221 +vt 0.875000 0.500000 +vt 0.310648 0.083413 +vt 0.893981 0.101202 +vt 0.310648 0.980529 +vt 0.125000 0.500000 +vt 0.131944 0.101202 +vt 0.875000 0.750000 +vt 0.691204 0.916106 +vt 0.125463 0.083413 +vt 0.019907 0.916106 +vt 0.125463 0.980529 +vt 0.125000 0.750000 +s 0 +usemtl plain +f 240/639/103 244/651/103 246/657/103 242/645/103 +f 243/648/104 242/646/104 246/658/104 247/660/104 +f 247/661/105 246/659/105 244/652/105 245/654/105 +f 245/655/106 241/642/106 243/649/106 247/662/106 +f 241/643/107 240/640/107 242/647/107 243/650/107 +f 245/656/108 244/653/108 240/641/108 241/644/108 +o Middle right upper wall.002 +v -6.347156 3.000000 0.248451 +v -6.347156 0.000000 0.248451 +v -6.347156 3.000000 0.448451 +v -6.347156 0.000000 0.448451 +v -7.717966 3.000000 0.248451 +v -7.717966 0.000000 0.248451 +v -7.717966 3.000000 0.448451 +v -7.717966 0.000000 0.448451 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.1000 +vn -0.6854 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 0.6854 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1000 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl plain +f 248/663/109 252/667/109 254/671/109 250/665/109 +f 251/666/110 250/665/110 254/672/110 255/674/110 +f 255/675/111 254/673/111 252/668/111 253/670/111 +f 253/669/112 249/664/112 251/666/112 255/676/112 +f 249/664/113 248/663/113 250/665/113 251/666/113 +f 253/670/114 252/668/114 248/663/114 249/664/114 +o Middle right upper wall.003 +v -6.347156 3.000000 -2.868740 +v -6.347156 0.000000 -2.868740 +v -6.347156 3.000000 -2.668740 +v -6.347156 0.000000 -2.668740 +v -7.717966 3.000000 -2.868740 +v -7.717966 0.000000 -2.868740 +v -7.717966 3.000000 -2.668740 +v -7.717966 0.000000 -2.668740 +vn -0.0000 1.5000 -0.0000 +vn -0.0000 -0.0000 0.1000 +vn -0.6854 -0.0000 -0.0000 +vn -0.0000 -1.5000 -0.0000 +vn 0.6854 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1000 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl plain +f 256/677/115 260/681/115 262/685/115 258/679/115 +f 259/680/116 258/679/116 262/686/116 263/688/116 +f 263/689/117 262/687/117 260/682/117 261/684/117 +f 261/683/118 257/678/118 259/680/118 263/690/118 +f 257/678/119 256/677/119 258/679/119 259/680/119 +f 261/684/120 260/682/120 256/677/120 257/678/120 +o Middle right wall +v -0.091425 3.000000 -2.846856 +v -0.091425 0.000000 -2.846856 +v 0.108575 3.000000 -2.846856 +v 0.108575 0.000000 -2.846856 +v -0.091425 3.000000 0.421777 +v -0.091425 0.000000 0.421777 +v 0.108575 3.000000 0.421777 +v 0.108575 0.000000 0.421777 +vn -0.0000 1.5000 -0.0000 +vn 0.1000 -0.0000 -0.0000 +vn -0.0000 -0.0000 1.6343 +vn -0.0000 -1.5000 -0.0000 +vn -0.0000 -0.0000 -1.6343 +vn -0.1000 -0.0000 -0.0000 +vt 0.625000 0.500000 +vt 1.308796 0.715144 +vt 0.375000 0.500000 +vt 1.314352 1.140625 +vt 0.912500 1.032933 +vt 0.625000 0.750000 +vt 0.917130 0.830529 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt -0.268056 0.719952 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt -0.262500 1.145433 +vt 0.875000 0.750000 +vt 0.160648 1.028125 +vt 0.625000 0.000000 +vt 0.165278 0.825721 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl plain +f 264/691/121 268/699/121 270/705/121 266/696/121 +f 267/697/122 266/695/122 270/706/122 271/708/122 +f 271/709/123 270/707/123 268/700/123 269/702/123 +f 269/703/124 265/693/124 267/698/124 271/710/124 +f 265/693/125 264/691/125 266/696/125 267/698/125 +f 269/704/126 268/701/126 264/692/126 265/694/126 +o Cube.009 +v -7.476047 -0.157897 -2.847554 +v -7.476047 1.000000 -2.847554 +v -7.476047 -0.157897 -3.428799 +v -7.476047 1.000000 -3.428799 +v -6.313557 -0.157897 -2.847554 +v -6.313557 1.000000 -2.847554 +v -6.313557 -0.157897 -3.428799 +v -6.313557 1.000000 -3.428799 +v -6.894802 -0.157897 -3.428799 +v -6.894802 1.000000 -3.428799 +v -6.894802 -0.157897 -2.847554 +v -6.894802 1.000000 -2.847554 +vn -0.5812 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.2906 +vn 0.5812 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.2906 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vt 0.501953 0.501953 +vt 0.125000 0.750000 +vt 0.501953 0.501953 +vt 0.990723 0.975586 +vt 0.125000 0.500000 +vt 0.501953 0.501953 +vt 0.990723 0.069336 +vt 0.501953 0.501953 +vt 0.375000 0.750000 +vt 0.501953 0.501953 +vt 0.006348 0.946289 +vt 0.501953 0.501953 +vt 0.501953 0.501953 +vt 0.375000 0.500000 +vt 0.501953 0.501953 +vt 0.006348 0.067383 +vt 0.250000 0.500000 +vt 0.501953 0.501953 +vt 0.502441 0.069336 +vt 0.506348 0.067383 +vt 0.501953 0.501953 +vt 0.250000 0.750000 +vt 0.501953 0.501953 +vt 0.502441 0.975586 +vt 0.506348 0.946289 +vt 0.501953 0.501953 +s 0 +usemtl plain +f 272/711/127 273/713/127 275/718/127 274/716/127 +f 280/728/128 281/731/128 279/725/128 278/723/128 +f 278/723/129 279/725/129 277/722/129 276/720/129 +f 282/733/130 283/736/130 273/713/130 272/711/130 +f 280/727/131 278/724/131 276/719/131 282/732/131 +f 281/729/132 275/717/132 273/714/132 283/734/132 +f 279/726/132 281/730/132 283/735/132 277/721/132 +f 274/715/131 280/727/131 282/732/131 272/712/131 +f 276/720/130 277/722/130 283/736/130 282/733/130 +f 274/716/128 275/718/128 281/731/128 280/728/128 +o Cube.010 +v -1.307942 -0.157897 -2.847554 +v -1.307942 1.000000 -2.847554 +v -1.307942 -0.157897 -3.428799 +v -1.307942 1.000000 -3.428799 +v -0.145452 -0.157897 -2.847554 +v -0.145452 1.000000 -2.847554 +v -0.145452 -0.157897 -3.428799 +v -0.145452 1.000000 -3.428799 +v -0.726697 -0.157897 -3.428799 +v -0.726697 1.000000 -3.428799 +v -0.726697 -0.157897 -2.847554 +v -0.726697 1.000000 -2.847554 +vn -0.5812 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.2906 +vn 0.5812 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.2906 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vt 0.501953 0.501953 +vt 0.125000 0.750000 +vt 0.501953 0.501953 +vt 0.990723 0.975586 +vt 0.125000 0.500000 +vt 0.501953 0.501953 +vt 0.990723 0.069336 +vt 0.501953 0.501953 +vt 0.375000 0.750000 +vt 0.501953 0.501953 +vt 0.006348 0.946289 +vt 0.501953 0.501953 +vt 0.501953 0.501953 +vt 0.375000 0.500000 +vt 0.501953 0.501953 +vt 0.006348 0.067383 +vt 0.250000 0.500000 +vt 0.501953 0.501953 +vt 0.502441 0.069336 +vt 0.506348 0.067383 +vt 0.501953 0.501953 +vt 0.250000 0.750000 +vt 0.501953 0.501953 +vt 0.502441 0.975586 +vt 0.506348 0.946289 +vt 0.501953 0.501953 +s 0 +usemtl plain +f 284/737/133 285/739/133 287/744/133 286/742/133 +f 292/754/134 293/757/134 291/751/134 290/749/134 +f 290/749/135 291/751/135 289/748/135 288/746/135 +f 294/759/136 295/762/136 285/739/136 284/737/136 +f 292/753/137 290/750/137 288/745/137 294/758/137 +f 293/755/138 287/743/138 285/740/138 295/760/138 +f 291/752/138 293/756/138 295/761/138 289/747/138 +f 286/741/137 292/753/137 294/758/137 284/738/137 +f 288/746/136 289/748/136 295/762/136 294/759/136 +f 286/742/134 287/744/134 293/757/134 292/754/134 +o Top.017 +v -0.072148 0.950000 -2.699727 +v -0.072148 0.850000 -2.699727 +v 0.658513 0.950000 -2.699727 +v 0.658513 0.850000 -2.699727 +v -0.072148 0.950000 0.274648 +v -0.072148 0.850000 0.274648 +v 0.658513 0.950000 0.274648 +v 0.658513 0.850000 0.274648 +v -0.072148 0.850000 -1.956133 +v -0.072148 0.850000 -1.212539 +v -0.072148 0.850000 -0.468945 +v 0.658513 0.950000 -1.956133 +v 0.658513 0.950000 -1.212539 +v 0.658513 0.950000 -0.468945 +v 0.658513 0.850000 -0.468945 +v 0.658513 0.850000 -1.212539 +v 0.658513 0.850000 -1.956133 +v -0.072148 0.950000 -0.468945 +v -0.072148 0.950000 -1.212539 +v -0.072148 0.950000 -1.956133 +vn -0.0000 0.0500 -0.0000 +vn 0.3653 -0.0000 -0.0000 +vn -0.0000 -0.0000 1.4872 +vn -0.0000 -0.0500 -0.0000 +vn -0.0000 -0.0000 -1.4872 +vn -0.3653 -0.0000 -0.0000 +vt 0.625000 0.500000 +vt 0.770573 0.502315 +vt 0.774219 0.080093 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.796615 0.363426 +vt 0.939844 0.502315 +vt 0.914844 0.080093 +vt 0.375000 0.750000 +vt 0.796615 0.431944 +vt 0.770573 0.202315 +vt 0.625000 0.250000 +vt 0.375000 0.250000 +vt 0.774219 0.524537 +vt 0.939844 0.202315 +vt 0.832031 0.543056 +vt 0.625000 0.000000 +vt 0.794531 0.543056 +vt 0.375000 0.000000 +vt 0.914844 0.524537 +vt 0.375000 0.437500 +vt 0.774219 0.191204 +vt 0.375000 0.375000 +vt 0.774219 0.302315 +vt 0.375000 0.312500 +vt 0.774219 0.413426 +vt 0.944531 0.363426 +vt 0.838281 0.525463 +vt 0.939844 0.427315 +vt 0.838281 0.119907 +vt 0.910677 0.156944 +vt 0.939844 0.352315 +vt 0.832031 0.243981 +vt 0.910677 0.490278 +vt 0.939844 0.277315 +vt 0.794531 0.243981 +vt 0.914844 0.413426 +vt 0.794010 0.490278 +vt 0.914844 0.302315 +vt 0.877865 0.119907 +vt 0.794010 0.156944 +vt 0.914844 0.191204 +vt 0.944531 0.431944 +vt 0.877865 0.525463 +vt 0.625000 0.312500 +vt 0.770573 0.277315 +vt 0.625000 0.375000 +vt 0.770573 0.352315 +vt 0.625000 0.437500 +vt 0.770573 0.427315 +s 0 +usemtl plain +f 313/808/139 300/773/139 302/777/139 309/797/139 +f 310/798/140 309/795/140 302/778/140 303/780/140 +f 303/781/141 302/779/141 300/774/141 301/775/141 +f 304/784/142 297/765/142 299/770/142 312/804/142 +f 297/766/143 296/763/143 298/767/143 299/771/143 +f 304/783/144 315/811/144 296/763/144 297/766/144 +f 301/775/144 300/774/144 313/807/144 306/787/144 +f 306/787/144 313/807/144 314/809/144 305/785/144 +f 305/785/144 314/809/144 315/811/144 304/783/144 +f 301/776/142 306/788/142 310/799/142 303/782/142 +f 306/788/142 305/786/142 311/801/142 310/799/142 +f 305/786/142 304/784/142 312/804/142 311/801/142 +f 299/772/140 298/768/140 307/789/140 312/805/140 +f 312/806/140 307/790/140 308/792/140 311/802/140 +f 311/803/140 308/793/140 309/796/140 310/800/140 +f 296/764/139 315/812/139 307/791/139 298/769/139 +f 315/812/139 314/810/139 308/794/139 307/791/139 +f 314/810/139 313/808/139 309/797/139 308/794/139 +o Mid Top.001 +v -3.230820 0.785000 -0.096205 +v -3.230820 0.715000 -0.096205 +v -4.730820 0.785000 -0.096205 +v -4.730820 0.715000 -0.096205 +v -3.230820 0.785000 -2.316991 +v -3.230820 0.715000 -2.316991 +v -4.730820 0.785000 -2.316991 +v -4.730820 0.715000 -2.316991 +v -3.230820 0.715000 -1.206598 +v -4.730820 0.785000 -1.206598 +v -4.730820 0.715000 -1.206598 +v -3.230820 0.785000 -1.206598 +vn -0.0000 0.0350 -0.0000 +vn -0.7500 -0.0000 -0.0000 +vn -0.0000 -0.0000 -1.1104 +vn -0.0000 -0.0350 -0.0000 +vn -0.0000 -0.0000 1.1104 +vn 0.7500 -0.0000 -0.0000 +vt 0.780469 0.030093 +vt 0.802865 0.590278 +vt 0.948177 0.652315 +vt 0.773177 0.622685 +vt 0.780469 0.599537 +vt 0.802865 0.091204 +vt 0.939323 0.030093 +vt 0.770052 0.031019 +vt 0.948177 0.008796 +vt 0.773177 0.024537 +vt 0.939323 0.599537 +vt 0.770052 0.646759 +vt 0.942969 0.019907 +vt 0.775260 0.588426 +vt 0.925781 0.545833 +vt 0.775260 0.089352 +vt 0.925781 0.046759 +vt 0.942969 0.620833 +vt 0.942969 0.641204 +vt 0.775781 0.618981 +vt 0.914323 0.588426 +vt 0.775781 0.029167 +vt 0.914323 0.089352 +vt 0.942969 0.018981 +vt 0.941927 0.622685 +vt 0.943490 0.091204 +vt 0.785156 0.046759 +vt 0.773177 0.620833 +vt 0.767969 0.641204 +vt 0.940885 0.618981 +vt 0.942448 0.031019 +vt 0.766927 0.008796 +vt 0.940885 0.029167 +vt 0.941927 0.024537 +vt 0.773177 0.018981 +vt 0.942448 0.646759 +vt 0.767969 0.019907 +vt 0.943490 0.590278 +vt 0.785156 0.545833 +vt 0.766927 0.652315 +s 0 +usemtl plain +f 327/849/145 320/825/145 322/831/145 325/841/145 +f 326/845/146 325/842/146 322/832/146 323/834/146 +f 323/835/147 322/833/147 320/826/147 321/828/147 +f 324/837/148 317/816/148 319/822/148 326/846/148 +f 317/817/149 316/813/149 318/819/149 319/823/149 +f 324/838/150 327/850/150 316/814/150 317/818/150 +f 321/829/150 320/827/150 327/851/150 324/839/150 +f 321/830/148 324/840/148 326/847/148 323/836/148 +f 319/824/146 318/820/146 325/843/146 326/848/146 +f 316/815/145 327/852/145 325/844/145 318/821/145 +o Mid Stand.001 +v -3.817570 0.750000 -0.718754 +v -3.817570 0.000000 -0.718754 +v -4.144070 0.750000 -0.718754 +v -4.144070 0.000000 -0.718754 +v -3.817570 0.750000 -1.694441 +v -3.817570 0.000000 -1.694441 +v -4.144070 0.750000 -1.694441 +v -4.144070 0.000000 -1.694441 +vn -0.0000 0.3750 -0.0000 +vn -0.1633 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.4878 +vn -0.0000 -0.3750 -0.0000 +vn -0.0000 -0.0000 0.4878 +vn 0.1633 -0.0000 -0.0000 +vt 0.780469 0.083796 +vt 0.778385 0.579167 +vt 0.944531 0.583796 +vt 0.940365 0.072685 +vt 0.938281 0.579167 +vt 0.771615 0.583796 +vt 0.780469 0.582870 +vt 0.773177 0.593982 +vt 0.778385 0.080093 +vt 0.930469 0.593982 +vt 0.940365 0.571759 +vt 0.938281 0.080093 +vt 0.950260 0.083796 +vt 0.802865 0.069907 +vt 0.944531 0.084722 +vt 0.936198 0.069907 +vt 0.779427 0.072685 +vt 0.771615 0.084722 +vt 0.950260 0.582870 +vt 0.773177 0.094907 +vt 0.802865 0.568981 +vt 0.930469 0.094907 +vt 0.936198 0.568981 +vt 0.779427 0.571759 +s 0 +usemtl Material.001 +f 328/853/151 332/865/151 334/871/151 330/859/151 +f 331/862/152 330/860/152 334/872/152 335/874/152 +f 335/875/153 334/873/153 332/866/153 333/868/153 +f 333/869/154 329/856/154 331/863/154 335/876/154 +f 329/857/155 328/854/155 330/861/155 331/864/155 +f 333/870/156 332/867/156 328/855/156 329/858/156 +o Stand.002 +v -6.406577 0.750000 -0.616022 +v -6.406577 0.000000 -0.616022 +v -6.733077 0.750000 -0.616022 +v -6.733077 0.000000 -0.616022 +v -6.406577 0.750000 -1.797174 +v -6.406577 0.000000 -1.797174 +v -6.733077 0.750000 -1.797174 +v -6.733077 0.000000 -1.797174 +vn -0.0000 0.3750 -0.0000 +vn -0.1633 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.5906 +vn -0.0000 -0.3750 -0.0000 +vn -0.0000 -0.0000 0.5906 +vn 0.1633 -0.0000 -0.0000 +vt 0.797135 0.093981 +vt 0.783073 0.601389 +vt 0.927344 0.616204 +vt 0.914844 0.083796 +vt 0.921615 0.601389 +vt 0.785156 0.616204 +vt 0.797135 0.593982 +vt 0.778385 0.587500 +vt 0.783073 0.101389 +vt 0.921094 0.587500 +vt 0.914844 0.582870 +vt 0.921615 0.101389 +vt 0.901302 0.093981 +vt 0.780469 0.091204 +vt 0.927344 0.116204 +vt 0.922135 0.091204 +vt 0.784635 0.083796 +vt 0.785156 0.116204 +vt 0.901302 0.593982 +vt 0.778385 0.087500 +vt 0.780469 0.591204 +vt 0.921094 0.087500 +vt 0.922135 0.591204 +vt 0.784635 0.582870 +s 0 +usemtl plain +f 336/877/157 340/889/157 342/895/157 338/883/157 +f 339/886/158 338/884/158 342/896/158 343/898/158 +f 343/899/159 342/897/159 340/890/159 341/892/159 +f 341/893/160 337/880/160 339/887/160 343/900/160 +f 337/881/161 336/878/161 338/885/161 339/888/161 +f 341/894/162 340/891/162 336/879/162 337/882/162 +o Stand.003 +v -1.266469 0.750000 -1.803115 +v -1.266469 0.000000 -1.803115 +v -0.939968 0.750000 -1.803115 +v -0.939968 0.000000 -1.803115 +v -1.266469 0.750000 -0.621963 +v -1.266469 0.000000 -0.621963 +v -0.939968 0.750000 -0.621963 +v -0.939968 0.000000 -0.621963 +vn -0.0000 0.3750 -0.0000 +vn 0.1633 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.5906 +vn -0.0000 -0.3750 -0.0000 +vn -0.0000 -0.0000 -0.5906 +vn -0.1633 -0.0000 -0.0000 +vt 0.765365 0.112500 +vt 0.779427 0.626389 +vt 0.960156 0.616204 +vt 0.938802 0.123611 +vt 0.949219 0.626389 +vt 0.772656 0.616204 +vt 0.765365 0.611574 +vt 0.774219 0.612500 +vt 0.779427 0.127315 +vt 0.945573 0.612500 +vt 0.938802 0.622685 +vt 0.949219 0.127315 +vt 0.941406 0.112500 +vt 0.777865 0.113426 +vt 0.960156 0.116204 +vt 0.945052 0.113426 +vt 0.772656 0.123611 +vt 0.772656 0.116204 +vt 0.941406 0.611574 +vt 0.774219 0.113426 +vt 0.777865 0.612500 +vt 0.945573 0.113426 +vt 0.945052 0.612500 +vt 0.772656 0.622685 +s 0 +usemtl plain +f 344/901/163 348/913/163 350/919/163 346/907/163 +f 347/910/164 346/908/164 350/920/164 351/922/164 +f 351/923/165 350/921/165 348/914/165 349/916/165 +f 349/917/166 345/904/166 347/911/166 351/924/166 +f 345/905/167 344/902/167 346/909/167 347/912/167 +f 349/918/168 348/915/168 344/903/168 345/906/168 +o Top.019 +v -6.351287 0.785000 -0.104125 +v -6.351287 0.715000 -0.104125 +v -7.185575 0.785000 -0.104125 +v -7.185575 0.715000 -0.104125 +v -6.351287 0.785000 -2.309070 +v -6.351287 0.715000 -2.309070 +v -7.185575 0.785000 -2.309070 +v -7.185575 0.715000 -2.309070 +vn -0.0000 0.0350 -0.0000 +vn -0.4171 -0.0000 -0.0000 +vn -0.0000 -0.0000 -1.1025 +vn -0.0000 -0.0350 -0.0000 +vn -0.0000 -0.0000 1.1025 +vn 0.4171 -0.0000 -0.0000 +vt 0.782552 0.082870 +vt 0.799219 0.608796 +vt 0.927344 0.597685 +vt 0.916927 0.105093 +vt 0.917448 0.608796 +vt 0.777344 0.597685 +vt 0.782552 0.582870 +vt 0.794010 0.580093 +vt 0.799219 0.108796 +vt 0.901302 0.580093 +vt 0.916927 0.605093 +vt 0.917448 0.108796 +vt 0.940885 0.082870 +vt 0.783594 0.073611 +vt 0.927344 0.098611 +vt 0.919010 0.073611 +vt 0.790365 0.105093 +vt 0.777344 0.098611 +vt 0.940885 0.582870 +vt 0.794010 0.080093 +vt 0.783594 0.572685 +vt 0.901302 0.080093 +vt 0.919010 0.572685 +vt 0.790365 0.605093 +s 0 +usemtl plain +f 352/925/169 356/937/169 358/943/169 354/931/169 +f 355/934/170 354/932/170 358/944/170 359/946/170 +f 359/947/171 358/945/171 356/938/171 357/940/171 +f 357/941/172 353/928/172 355/935/172 359/948/172 +f 353/929/173 352/926/173 354/933/173 355/936/173 +f 357/942/174 356/939/174 352/927/174 353/930/174 +o Top.020 +v -1.321758 0.785000 -2.315012 +v -1.321758 0.715000 -2.315012 +v -0.487470 0.785000 -2.315012 +v -0.487470 0.715000 -2.315012 +v -1.321758 0.785000 -0.110067 +v -1.321758 0.715000 -0.110067 +v -0.487470 0.785000 -0.110067 +v -0.487470 0.715000 -0.110067 +vn -0.0000 0.0350 -0.0000 +vn 0.4171 -0.0000 -0.0000 +vn -0.0000 -0.0000 1.1025 +vn -0.0000 -0.0350 -0.0000 +vn -0.0000 -0.0000 -1.1025 +vn -0.4171 -0.0000 -0.0000 +vt 0.784115 0.050463 +vt 0.772656 0.633796 +vt 0.922135 0.623611 +vt 0.924740 0.105093 +vt 0.944010 0.633796 +vt 0.774219 0.623611 +vt 0.784115 0.550463 +vt 0.769010 0.627315 +vt 0.772656 0.133796 +vt 0.942448 0.627315 +vt 0.924740 0.604167 +vt 0.944010 0.133796 +vt 0.930469 0.050463 +vt 0.794531 0.123611 +vt 0.922135 0.123611 +vt 0.924219 0.123611 +vt 0.790885 0.105093 +vt 0.774219 0.123611 +vt 0.930469 0.550463 +vt 0.769010 0.127315 +vt 0.794531 0.623611 +vt 0.942448 0.127315 +vt 0.924219 0.623611 +vt 0.790885 0.604167 +s 0 +usemtl plain +f 360/949/175 364/961/175 366/967/175 362/955/175 +f 363/958/176 362/956/176 366/968/176 367/970/176 +f 367/971/177 366/969/177 364/962/177 365/964/177 +f 365/965/178 361/952/178 363/959/178 367/972/178 +f 361/953/179 360/950/179 362/957/179 363/960/179 +f 365/966/180 364/963/180 360/951/180 361/954/180 +o Top.018 +v -6.555705 0.785858 -5.832962 +v -6.086166 0.800000 -5.832962 +v -6.086166 0.785858 -6.045779 +v -6.539717 0.789517 -5.832962 +v -6.492777 0.792930 -5.832962 +v -6.418180 0.795858 -5.832962 +v -6.539717 0.785858 -5.888023 +v -6.520681 0.789663 -5.889757 +v -6.473207 0.792952 -5.888829 +v -6.407165 0.795517 -5.887687 +v -6.492777 0.785858 -5.939387 +v -6.472904 0.789592 -5.939771 +v -6.433113 0.792598 -5.934334 +v -6.381773 0.794760 -5.929875 +v -6.357255 0.794023 -5.955832 +v -6.086166 0.799518 -5.888023 +v -6.086166 0.798105 -5.939387 +v -6.086166 0.795858 -5.983446 +v -6.207649 0.799518 -5.832962 +v -6.211473 0.798945 -5.890224 +v -6.209427 0.797515 -5.939714 +v -6.206907 0.795526 -5.978318 +v -6.320974 0.798105 -5.832962 +v -6.321820 0.797506 -5.889150 +v -6.309824 0.796308 -5.934383 +v -6.299986 0.794761 -5.966930 +v -6.207649 0.785858 -6.038532 +v -6.320974 0.785858 -6.017257 +v -6.418180 0.785858 -5.983446 +v -6.086166 0.789517 -6.038532 +v -6.212506 0.789632 -6.029904 +v -6.321694 0.789570 -6.008387 +v -6.406866 0.789494 -5.978454 +v -6.086166 0.792930 -6.017257 +v -6.210135 0.792956 -6.008249 +v -6.309934 0.792594 -5.990214 +v -6.381741 0.792298 -5.966945 +v -6.086166 0.700000 -5.783140 +v -6.555705 0.714142 -5.832962 +v -6.086166 0.714142 -6.045779 +v -6.207649 0.700482 -5.783140 +v -6.320974 0.701895 -5.832962 +v -6.418180 0.704142 -5.832962 +v -6.086166 0.700482 -5.888023 +v -6.212506 0.701055 -5.889757 +v -6.321694 0.702485 -5.888829 +v -6.406866 0.704474 -5.887687 +v -6.086166 0.701895 -5.939387 +v -6.210135 0.702494 -5.939771 +v -6.309934 0.703692 -5.934334 +v -6.381741 0.705239 -5.929875 +v -6.357255 0.705977 -5.955832 +v -6.539717 0.714142 -5.888023 +v -6.492777 0.714142 -5.939387 +v -6.418180 0.714142 -5.983446 +v -6.539717 0.710483 -5.832962 +v -6.520681 0.710368 -5.890224 +v -6.473207 0.710430 -5.939714 +v -6.407165 0.710506 -5.978318 +v -6.492777 0.707070 -5.832962 +v -6.472904 0.707044 -5.889150 +v -6.433113 0.707406 -5.934383 +v -6.381773 0.707702 -5.966930 +v -6.086166 0.710483 -6.038532 +v -6.086166 0.707070 -6.017257 +v -6.086166 0.704142 -5.983446 +v -6.207649 0.714142 -6.038532 +v -6.211473 0.710337 -6.029904 +v -6.209427 0.707048 -6.008387 +v -6.206907 0.704483 -5.978454 +v -6.320974 0.714142 -6.017257 +v -6.321820 0.710408 -6.008249 +v -6.309824 0.707402 -5.990214 +v -6.299986 0.705240 -5.966945 +v -3.705104 0.785858 -6.045779 +v -3.705104 0.800000 -5.832962 +v -3.235565 0.785858 -5.832962 +v -3.705104 0.789517 -6.038532 +v -3.705104 0.792930 -6.017257 +v -3.705104 0.795858 -5.983446 +v -3.583621 0.785858 -6.038532 +v -3.579797 0.789663 -6.029904 +v -3.581843 0.792952 -6.008387 +v -3.584363 0.795517 -5.978454 +v -3.470296 0.785858 -6.017257 +v -3.469450 0.789592 -6.008249 +v -3.481446 0.792598 -5.990214 +v -3.491284 0.794760 -5.966945 +v -3.434016 0.794023 -5.955832 +v -3.583621 0.799518 -5.832962 +v -3.470296 0.798105 -5.832962 +v -3.373090 0.795858 -5.832962 +v -3.705104 0.799518 -5.888024 +v -3.578764 0.798945 -5.889757 +v -3.469576 0.797515 -5.888829 +v -3.384404 0.795526 -5.887687 +v -3.705104 0.798105 -5.939388 +v -3.581135 0.797506 -5.939771 +v -3.481337 0.796308 -5.934334 +v -3.409529 0.794761 -5.929875 +v -3.251553 0.785858 -5.888024 +v -3.298493 0.785858 -5.939388 +v -3.373090 0.785858 -5.983446 +v -3.251553 0.789517 -5.832962 +v -3.270589 0.789632 -5.890224 +v -3.318064 0.789570 -5.939714 +v -3.384105 0.789494 -5.978318 +v -3.298493 0.792930 -5.832962 +v -3.318367 0.792956 -5.889151 +v -3.358158 0.792594 -5.934383 +v -3.409497 0.792298 -5.966930 +v -3.705104 0.714142 -6.045779 +v -3.235565 0.714142 -5.832962 +v -3.705104 0.700000 -5.783140 +v -3.583621 0.714142 -6.038532 +v -3.470296 0.714142 -6.017257 +v -3.373090 0.714142 -5.983446 +v -3.705104 0.710483 -6.038532 +v -3.578764 0.710368 -6.029904 +v -3.469576 0.710430 -6.008387 +v -3.384404 0.710506 -5.978454 +v -3.705104 0.707070 -6.017257 +v -3.581135 0.707044 -6.008249 +v -3.481337 0.707406 -5.990214 +v -3.409529 0.707702 -5.966945 +v -3.434016 0.705977 -5.955832 +v -3.251553 0.710483 -5.832962 +v -3.298493 0.707070 -5.832962 +v -3.373090 0.704142 -5.832962 +v -3.251553 0.714142 -5.888024 +v -3.270589 0.710337 -5.889757 +v -3.318064 0.707048 -5.888829 +v -3.384105 0.704483 -5.887687 +v -3.298493 0.714142 -5.939388 +v -3.318367 0.710408 -5.939771 +v -3.358158 0.707402 -5.934334 +v -3.409497 0.705240 -5.929875 +v -3.705104 0.700482 -5.888024 +v -3.705104 0.701895 -5.939388 +v -3.705104 0.704142 -5.983446 +v -3.583621 0.700482 -5.783140 +v -3.579797 0.701055 -5.890224 +v -3.581843 0.702485 -5.939714 +v -3.584363 0.704474 -5.978318 +v -3.470296 0.701895 -5.832962 +v -3.469450 0.702494 -5.889151 +v -3.481446 0.703692 -5.934383 +v -3.491284 0.705239 -5.966930 +v -6.555705 0.785858 -4.753753 +v -6.086166 0.785858 -4.540936 +v -6.086166 0.800000 -4.753753 +v -6.539717 0.785858 -4.698691 +v -6.492777 0.785858 -4.647327 +v -6.418180 0.785858 -4.603269 +v -6.539717 0.789517 -4.753753 +v -6.520681 0.789632 -4.696490 +v -6.473207 0.789570 -4.647000 +v -6.407165 0.789494 -4.608397 +v -6.492777 0.792930 -4.753753 +v -6.472904 0.792956 -4.697564 +v -6.433113 0.792594 -4.652331 +v -6.381773 0.792298 -4.619785 +v -6.357255 0.794023 -4.630883 +v -6.086166 0.789517 -4.548182 +v -6.086166 0.792930 -4.569458 +v -6.086166 0.795858 -4.603269 +v -6.207649 0.785858 -4.548182 +v -6.211473 0.789663 -4.556810 +v -6.209427 0.792952 -4.578328 +v -6.206907 0.795517 -4.608261 +v -6.320974 0.785858 -4.569458 +v -6.321820 0.789592 -4.578465 +v -6.309824 0.792598 -4.596500 +v -6.299986 0.794760 -4.619770 +v -6.207649 0.799518 -4.753753 +v -6.320974 0.798105 -4.753753 +v -6.418180 0.795858 -4.753753 +v -6.086166 0.799518 -4.698691 +v -6.212506 0.798945 -4.696958 +v -6.321694 0.797515 -4.697886 +v -6.406866 0.795526 -4.699028 +v -6.086166 0.798105 -4.647327 +v -6.210135 0.797506 -4.646944 +v -6.309934 0.796308 -4.652380 +v -6.381741 0.794761 -4.656840 +v -6.086166 0.714142 -4.540936 +v -6.555705 0.714142 -4.753753 +v -6.086166 0.700000 -4.803575 +v -6.207649 0.714142 -4.548182 +v -6.320974 0.714142 -4.569458 +v -6.418180 0.714142 -4.603269 +v -6.086166 0.710483 -4.548182 +v -6.212506 0.710368 -4.556810 +v -6.321694 0.710430 -4.578328 +v -6.406866 0.710506 -4.608261 +v -6.086166 0.707070 -4.569458 +v -6.210135 0.707044 -4.578465 +v -6.309934 0.707406 -4.596500 +v -6.381741 0.707702 -4.619770 +v -6.357255 0.705977 -4.630883 +v -6.539717 0.710483 -4.753753 +v -6.492777 0.707070 -4.753753 +v -6.418180 0.704142 -4.753753 +v -6.539717 0.714142 -4.698691 +v -6.520681 0.710337 -4.696958 +v -6.473207 0.707048 -4.697886 +v -6.407165 0.704483 -4.699028 +v -6.492777 0.714142 -4.647327 +v -6.472904 0.710408 -4.646944 +v -6.433113 0.707402 -4.652380 +v -6.381773 0.705240 -4.656840 +v -6.086166 0.700482 -4.698691 +v -6.086166 0.701895 -4.647327 +v -6.086166 0.704142 -4.603269 +v -6.207649 0.700482 -4.803575 +v -6.211473 0.701055 -4.696490 +v -6.209427 0.702485 -4.647000 +v -6.206907 0.704474 -4.608397 +v -6.320974 0.701895 -4.753753 +v -6.321820 0.702494 -4.697564 +v -6.309824 0.703692 -4.652331 +v -6.299986 0.705239 -4.619785 +v -3.705104 0.785858 -4.540936 +v -3.235565 0.785858 -4.753753 +v -3.705104 0.800000 -4.753753 +v -3.583621 0.785858 -4.548182 +v -3.470296 0.785858 -4.569458 +v -3.373090 0.785858 -4.603269 +v -3.705104 0.789517 -4.548182 +v -3.578764 0.789632 -4.556810 +v -3.469576 0.789570 -4.578328 +v -3.384404 0.789494 -4.608261 +v -3.705104 0.792930 -4.569458 +v -3.581135 0.792956 -4.578465 +v -3.481337 0.792594 -4.596501 +v -3.409529 0.792298 -4.619770 +v -3.434016 0.794023 -4.630883 +v -3.251553 0.789517 -4.753753 +v -3.298493 0.792930 -4.753753 +v -3.373090 0.795858 -4.753753 +v -3.251553 0.785858 -4.698691 +v -3.270589 0.789663 -4.696958 +v -3.318064 0.792952 -4.697886 +v -3.384105 0.795517 -4.699028 +v -3.298493 0.785858 -4.647327 +v -3.318367 0.789592 -4.646944 +v -3.358158 0.792598 -4.652380 +v -3.409497 0.794760 -4.656840 +v -3.705104 0.799518 -4.698691 +v -3.705104 0.798105 -4.647327 +v -3.705104 0.795858 -4.603269 +v -3.583621 0.799518 -4.753753 +v -3.579797 0.798945 -4.696490 +v -3.581843 0.797515 -4.647001 +v -3.584363 0.795526 -4.608397 +v -3.470296 0.798105 -4.753753 +v -3.469450 0.797506 -4.697565 +v -3.481446 0.796308 -4.652331 +v -3.491284 0.794761 -4.619785 +v -3.705104 0.700000 -4.803575 +v -3.235565 0.714142 -4.753753 +v -3.705104 0.714142 -4.540936 +v -3.583621 0.700482 -4.803575 +v -3.470296 0.701895 -4.753753 +v -3.373090 0.704142 -4.753753 +v -3.705104 0.700482 -4.698691 +v -3.578764 0.701055 -4.696958 +v -3.469576 0.702485 -4.697886 +v -3.384404 0.704474 -4.699028 +v -3.705104 0.701895 -4.647327 +v -3.581135 0.702494 -4.646944 +v -3.481337 0.703692 -4.652380 +v -3.409529 0.705239 -4.656840 +v -3.434016 0.705977 -4.630883 +v -3.251553 0.714142 -4.698691 +v -3.298493 0.714142 -4.647327 +v -3.373090 0.714142 -4.603269 +v -3.251553 0.710483 -4.753753 +v -3.270589 0.710368 -4.696490 +v -3.318064 0.710430 -4.647001 +v -3.384105 0.710506 -4.608397 +v -3.298493 0.707070 -4.753753 +v -3.318367 0.707044 -4.697565 +v -3.358158 0.707406 -4.652331 +v -3.409497 0.707702 -4.619785 +v -3.705104 0.710483 -4.548182 +v -3.705104 0.707070 -4.569458 +v -3.705104 0.704142 -4.603269 +v -3.583621 0.714142 -4.548182 +v -3.579797 0.710337 -4.556810 +v -3.581843 0.707048 -4.578328 +v -3.584363 0.704483 -4.608261 +v -3.470296 0.714142 -4.569458 +v -3.469450 0.710408 -4.578465 +v -3.481446 0.707402 -4.596501 +v -3.491284 0.705240 -4.619770 +vn -0.0000 -0.0500 -0.0000 +vn -0.0000 -0.0000 0.7524 +vn 1.6601 -0.0000 -0.0000 +vn -0.0000 0.0500 -0.0000 +vn -0.0000 -0.0000 -0.7524 +vn -1.6288 0.0068 -0.1027 +vn -1.5139 0.0194 -0.1000 +vn -1.3030 0.0303 -0.0939 +vn -1.5139 0.0067 -0.2916 +vn -1.4030 0.0189 -0.2842 +vn -1.2183 0.0288 -0.2697 +vn -1.3029 0.0063 -0.4566 +vn -1.2174 0.0179 -0.4345 +vn -1.0989 0.0265 -0.3988 +vn -0.2267 0.0491 -0.1027 +vn -0.2207 0.0456 -0.2921 +vn -0.2071 0.0392 -0.4567 +vn -0.6435 0.0456 -0.1012 +vn -0.6271 0.0423 -0.2846 +vn -0.5950 0.0367 -0.4341 +vn -1.0074 0.0392 -0.0942 +vn -0.9586 0.0367 -0.2699 +vn -0.8799 0.0331 -0.3988 +vn -0.2267 0.0068 -0.7383 +vn -0.6444 0.0066 -0.6862 +vn -1.0076 0.0062 -0.5906 +vn -0.2233 0.0194 -0.6862 +vn -0.6280 0.0189 -0.6359 +vn -0.9579 0.0179 -0.5522 +vn -0.2079 0.0303 -0.5906 +vn -0.5956 0.0289 -0.5518 +vn -0.8798 0.0265 -0.4981 +vn -0.5802 -0.0466 -0.0714 +vn -1.0076 -0.0392 -0.0939 +vn -0.2233 -0.0456 -0.2916 +vn -0.6280 -0.0423 -0.2842 +vn -0.9579 -0.0367 -0.2697 +vn -0.2079 -0.0392 -0.4566 +vn -0.5956 -0.0367 -0.4345 +vn -0.8798 -0.0331 -0.3988 +vn -1.6288 -0.0068 -0.1027 +vn -1.5139 -0.0066 -0.2921 +vn -1.3029 -0.0062 -0.4567 +vn -1.5139 -0.0194 -0.1012 +vn -1.4030 -0.0189 -0.2846 +vn -1.2183 -0.0179 -0.4341 +vn -1.3029 -0.0303 -0.0942 +vn -1.2174 -0.0289 -0.2699 +vn -1.0989 -0.0265 -0.3988 +vn -0.2267 -0.0068 -0.7383 +vn -0.2207 -0.0194 -0.6862 +vn -0.2071 -0.0303 -0.5906 +vn -0.6435 -0.0067 -0.6862 +vn -0.6271 -0.0189 -0.6359 +vn -0.5950 -0.0288 -0.5522 +vn -1.0074 -0.0063 -0.5906 +vn -0.9586 -0.0179 -0.5518 +vn -0.8799 -0.0265 -0.4981 +vn 0.2267 0.0068 -0.7383 +vn 0.2207 0.0194 -0.6862 +vn 0.2071 0.0303 -0.5906 +vn 0.6435 0.0067 -0.6862 +vn 0.6271 0.0189 -0.6359 +vn 0.5950 0.0288 -0.5522 +vn 1.0074 0.0063 -0.5906 +vn 0.9586 0.0179 -0.5518 +vn 0.8799 0.0265 -0.4981 +vn 0.2267 0.0491 -0.1027 +vn 0.6444 0.0456 -0.1000 +vn 1.0076 0.0392 -0.0939 +vn 0.2233 0.0456 -0.2916 +vn 0.6280 0.0423 -0.2842 +vn 0.9579 0.0367 -0.2697 +vn 0.2079 0.0392 -0.4566 +vn 0.5956 0.0367 -0.4345 +vn 0.8798 0.0331 -0.3988 +vn 1.6288 0.0068 -0.1027 +vn 1.5139 0.0066 -0.2921 +vn 1.3029 0.0062 -0.4567 +vn 1.5139 0.0194 -0.1012 +vn 1.4030 0.0189 -0.2846 +vn 1.2183 0.0179 -0.4341 +vn 1.3029 0.0303 -0.0942 +vn 1.2174 0.0289 -0.2699 +vn 1.0989 0.0265 -0.3988 +vn 0.2267 -0.0068 -0.7383 +vn 0.6444 -0.0066 -0.6862 +vn 1.0076 -0.0062 -0.5906 +vn 0.2233 -0.0194 -0.6862 +vn 0.6280 -0.0189 -0.6359 +vn 0.9579 -0.0179 -0.5522 +vn 0.2079 -0.0303 -0.5906 +vn 0.5956 -0.0289 -0.5518 +vn 0.8798 -0.0265 -0.4981 +vn 1.6288 -0.0068 -0.1027 +vn 1.5139 -0.0194 -0.1000 +vn 1.3030 -0.0303 -0.0939 +vn 1.5139 -0.0067 -0.2916 +vn 1.4030 -0.0189 -0.2842 +vn 1.2183 -0.0288 -0.2697 +vn 1.3029 -0.0063 -0.4566 +vn 1.2174 -0.0179 -0.4345 +vn 1.0989 -0.0265 -0.3988 +vn 0.2207 -0.0456 -0.2921 +vn 0.2071 -0.0392 -0.4567 +vn 0.5786 -0.0466 -0.0724 +vn 0.6271 -0.0423 -0.2846 +vn 0.5950 -0.0367 -0.4341 +vn 1.0074 -0.0392 -0.0942 +vn 0.9586 -0.0367 -0.2699 +vn 0.8799 -0.0331 -0.3988 +vn -1.6288 0.0068 0.1027 +vn -1.5139 0.0066 0.2921 +vn -1.3029 0.0062 0.4567 +vn -1.5139 0.0194 0.1012 +vn -1.4030 0.0189 0.2846 +vn -1.2183 0.0179 0.4341 +vn -1.3029 0.0303 0.0942 +vn -1.2174 0.0289 0.2699 +vn -1.0989 0.0265 0.3988 +vn -0.2267 0.0068 0.7383 +vn -0.2207 0.0194 0.6862 +vn -0.2071 0.0303 0.5906 +vn -0.6435 0.0067 0.6862 +vn -0.6271 0.0189 0.6359 +vn -0.5950 0.0288 0.5522 +vn -1.0074 0.0063 0.5906 +vn -0.9586 0.0179 0.5518 +vn -0.8799 0.0265 0.4981 +vn -0.2267 0.0491 0.1027 +vn -0.6444 0.0456 0.1000 +vn -1.0076 0.0392 0.0939 +vn -0.2233 0.0456 0.2916 +vn -0.6280 0.0423 0.2842 +vn -0.9579 0.0367 0.2697 +vn -0.2079 0.0392 0.4566 +vn -0.5956 0.0367 0.4345 +vn -0.8798 0.0331 0.3988 +vn -0.2267 -0.0068 0.7383 +vn -0.6444 -0.0066 0.6862 +vn -1.0076 -0.0062 0.5906 +vn -0.2233 -0.0194 0.6862 +vn -0.6280 -0.0189 0.6359 +vn -0.9579 -0.0179 0.5522 +vn -0.2079 -0.0303 0.5906 +vn -0.5956 -0.0289 0.5518 +vn -0.8798 -0.0265 0.4981 +vn -1.6288 -0.0068 0.1027 +vn -1.5139 -0.0194 0.1000 +vn -1.3030 -0.0303 0.0939 +vn -1.5139 -0.0067 0.2916 +vn -1.4030 -0.0189 0.2842 +vn -1.2183 -0.0288 0.2697 +vn -1.3029 -0.0063 0.4566 +vn -1.2174 -0.0179 0.4345 +vn -1.0989 -0.0265 0.3988 +vn -0.2207 -0.0456 0.2921 +vn -0.2071 -0.0392 0.4567 +vn -0.5786 -0.0466 0.0724 +vn -0.6271 -0.0423 0.2846 +vn -0.5950 -0.0367 0.4341 +vn -1.0074 -0.0392 0.0942 +vn -0.9586 -0.0367 0.2699 +vn -0.8799 -0.0331 0.3988 +vn 0.2267 0.0068 0.7383 +vn 0.6444 0.0066 0.6862 +vn 1.0076 0.0062 0.5906 +vn 0.2233 0.0194 0.6862 +vn 0.6280 0.0189 0.6359 +vn 0.9579 0.0179 0.5522 +vn 0.2079 0.0303 0.5906 +vn 0.5956 0.0289 0.5518 +vn 0.8798 0.0265 0.4981 +vn 1.6288 0.0068 0.1027 +vn 1.5139 0.0194 0.1000 +vn 1.3030 0.0303 0.0939 +vn 1.5139 0.0067 0.2916 +vn 1.4030 0.0189 0.2842 +vn 1.2183 0.0288 0.2697 +vn 1.3029 0.0063 0.4566 +vn 1.2174 0.0179 0.4345 +vn 1.0989 0.0265 0.3988 +vn 0.2267 0.0491 0.1027 +vn 0.2207 0.0456 0.2921 +vn 0.2071 0.0392 0.4567 +vn 0.6435 0.0456 0.1012 +vn 0.6271 0.0423 0.2846 +vn 0.5950 0.0367 0.4341 +vn 1.0074 0.0392 0.0942 +vn 0.9586 0.0367 0.2699 +vn 0.8799 0.0331 0.3988 +vn 0.5802 -0.0466 0.0714 +vn 1.0076 -0.0392 0.0939 +vn 0.2233 -0.0456 0.2916 +vn 0.6280 -0.0423 0.2842 +vn 0.9579 -0.0367 0.2697 +vn 0.2079 -0.0392 0.4566 +vn 0.5956 -0.0367 0.4345 +vn 0.8798 -0.0331 0.3988 +vn 1.6288 -0.0068 0.1027 +vn 1.5139 -0.0066 0.2921 +vn 1.3029 -0.0062 0.4567 +vn 1.5139 -0.0194 0.1012 +vn 1.4030 -0.0189 0.2846 +vn 1.2183 -0.0179 0.4341 +vn 1.3029 -0.0303 0.0942 +vn 1.2174 -0.0289 0.2699 +vn 1.0989 -0.0265 0.3988 +vn 0.2267 -0.0068 0.7383 +vn 0.2207 -0.0194 0.6862 +vn 0.2071 -0.0303 0.5906 +vn 0.6435 -0.0067 0.6862 +vn 0.6271 -0.0189 0.6359 +vn 0.5950 -0.0288 0.5522 +vn 1.0074 -0.0063 0.5906 +vn 0.9586 -0.0179 0.5518 +vn 0.8799 -0.0265 0.4981 +vn -0.0000 -0.0499 0.0519 +vn -0.0000 -0.0462 0.2879 +vn -0.0000 -0.0397 0.4581 +vn -0.0000 -0.0304 0.5969 +vn -0.0000 -0.0191 0.6951 +vn -0.0000 -0.0065 0.7460 +vn -0.2166 -0.0496 -0.0000 +vn -0.6353 -0.0462 -0.0000 +vn -1.0106 -0.0397 -0.0000 +vn -1.3170 -0.0304 -0.0000 +vn -1.5337 -0.0191 -0.0000 +vn -1.6459 -0.0065 -0.0000 +vn -0.2166 -0.0000 -0.7460 +vn -0.6353 -0.0000 -0.6951 +vn -1.0106 -0.0000 -0.5969 +vn -1.3170 -0.0000 -0.4581 +vn -1.5337 -0.0000 -0.2879 +vn -1.6459 -0.0000 -0.0982 +vn 1.6459 -0.0000 0.0982 +vn 1.5337 -0.0000 0.2879 +vn 1.3170 -0.0000 0.4581 +vn 1.0106 -0.0000 0.5969 +vn 0.6353 -0.0000 0.6951 +vn 0.2166 -0.0000 0.7460 +vn 1.6459 -0.0000 -0.0982 +vn 1.5337 -0.0000 -0.2879 +vn 1.3170 -0.0000 -0.4581 +vn 1.0106 -0.0000 -0.5969 +vn 0.6353 -0.0000 -0.6951 +vn 0.2166 -0.0000 -0.7460 +vn -1.6459 -0.0000 0.0982 +vn -1.5337 -0.0000 0.2879 +vn -1.3170 -0.0000 0.4581 +vn -1.0106 -0.0000 0.5969 +vn -0.6353 -0.0000 0.6951 +vn -0.2166 -0.0000 0.7460 +vn 0.2166 0.0496 -0.0000 +vn 0.6353 0.0462 -0.0000 +vn 1.0106 0.0397 -0.0000 +vn 1.3170 0.0304 -0.0000 +vn 1.5337 0.0191 -0.0000 +vn 1.6459 0.0065 -0.0000 +vn -0.0000 0.0496 -0.0982 +vn -0.0000 0.0462 -0.2879 +vn -0.0000 0.0397 -0.4581 +vn -0.0000 0.0304 -0.5969 +vn -0.0000 0.0191 -0.6951 +vn -0.0000 0.0065 -0.7460 +vn 0.2166 -0.0496 -0.0000 +vn 0.6353 -0.0462 -0.0000 +vn 1.0106 -0.0397 -0.0000 +vn 1.3170 -0.0304 -0.0000 +vn 1.5337 -0.0191 -0.0000 +vn 1.6459 -0.0065 -0.0000 +vn -0.0000 0.0496 0.0982 +vn -0.0000 0.0462 0.2879 +vn -0.0000 0.0397 0.4581 +vn -0.0000 0.0304 0.5969 +vn -0.0000 0.0191 0.6951 +vn -0.0000 0.0065 0.7460 +vn -0.2166 0.0496 -0.0000 +vn -0.6353 0.0462 -0.0000 +vn -1.0106 0.0397 -0.0000 +vn -1.3170 0.0304 -0.0000 +vn -1.5337 0.0191 -0.0000 +vn -1.6459 0.0065 -0.0000 +vn -0.0000 -0.0499 -0.0519 +vn -0.0000 -0.0462 -0.2879 +vn -0.0000 -0.0397 -0.4581 +vn -0.0000 -0.0304 -0.5969 +vn -0.0000 -0.0191 -0.6951 +vn -0.0000 -0.0065 -0.7460 +vn -1.6601 -0.0000 -0.0000 +vt 0.799740 0.114352 +vt 0.840885 0.798611 +vt 0.803906 0.201389 +vt 0.840885 0.816204 +vt 0.769531 0.189352 +vt 0.801302 0.130093 +vt 0.801823 0.144907 +vt 0.802865 0.158796 +vt 0.792448 0.118056 +vt 0.840885 0.800463 +vt 0.795052 0.135648 +vt 0.796094 0.150463 +vt 0.797135 0.161574 +vt 0.785156 0.126389 +vt 0.840885 0.803241 +vt 0.788802 0.142130 +vt 0.791406 0.154167 +vt 0.792969 0.163426 +vt 0.790365 0.165278 +vt 0.798177 0.199537 +vt 0.792969 0.198611 +vt 0.787760 0.197685 +vt 0.803906 0.186574 +vt 0.798177 0.186574 +vt 0.792969 0.185648 +vt 0.788281 0.182870 +vt 0.803385 0.172685 +vt 0.798177 0.173611 +vt 0.792969 0.173611 +vt 0.789844 0.172685 +vt 0.771094 0.171759 +vt 0.840885 0.814352 +vt 0.774219 0.154167 +vt 0.840885 0.811574 +vt 0.778906 0.138426 +vt 0.840885 0.807870 +vt 0.775781 0.192130 +vt 0.777865 0.176389 +vt 0.780469 0.161574 +vt 0.784115 0.151389 +vt 0.781510 0.194907 +vt 0.783594 0.181019 +vt 0.785156 0.168981 +vt 0.788281 0.159722 +vt 0.776823 0.816204 +vt 0.794531 0.798611 +vt 0.794531 0.816204 +vt 0.776823 0.814352 +vt 0.776823 0.811574 +vt 0.776823 0.807870 +vt 0.785677 0.798611 +vt 0.778906 0.816204 +vt 0.779427 0.813426 +vt 0.779427 0.811574 +vt 0.778906 0.807870 +vt 0.785677 0.800463 +vt 0.780990 0.816204 +vt 0.780990 0.813426 +vt 0.780990 0.812500 +vt 0.780990 0.807870 +vt 0.785677 0.802315 +vt 0.785677 0.808796 +vt 0.794531 0.800463 +vt 0.794531 0.803241 +vt 0.794531 0.807870 +vt 0.792448 0.798611 +vt 0.792448 0.801389 +vt 0.792448 0.803241 +vt 0.792448 0.807870 +vt 0.790365 0.798611 +vt 0.790365 0.801389 +vt 0.790365 0.802315 +vt 0.790365 0.807870 +vt 0.792448 0.816204 +vt 0.790365 0.816204 +vt 0.785677 0.816204 +vt 0.794531 0.814352 +vt 0.792448 0.813426 +vt 0.790365 0.813426 +vt 0.785677 0.814352 +vt 0.794531 0.811574 +vt 0.792448 0.811574 +vt 0.790365 0.812500 +vt 0.785677 0.812500 +vt 0.840885 0.862500 +vt 0.769531 0.480093 +vt 0.803906 0.468981 +vt 0.840885 0.880093 +vt 0.799740 0.556019 +vt 0.775781 0.477315 +vt 0.781510 0.474537 +vt 0.787240 0.472685 +vt 0.771094 0.497685 +vt 0.840885 0.864352 +vt 0.777865 0.493056 +vt 0.783594 0.489352 +vt 0.788281 0.485648 +vt 0.773698 0.515278 +vt 0.840885 0.867130 +vt 0.780469 0.506944 +vt 0.785156 0.499537 +vt 0.789323 0.496759 +vt 0.789844 0.504167 +vt 0.803385 0.483796 +vt 0.802865 0.496759 +vt 0.802865 0.510648 +vt 0.798177 0.468981 +vt 0.798177 0.483796 +vt 0.798177 0.496759 +vt 0.797135 0.508796 +vt 0.792969 0.470833 +vt 0.792969 0.484722 +vt 0.792969 0.496759 +vt 0.792969 0.506019 +vt 0.792448 0.552315 +vt 0.840885 0.877315 +vt 0.785156 0.543981 +vt 0.840885 0.875463 +vt 0.778906 0.531944 +vt 0.840885 0.870833 +vt 0.800781 0.540278 +vt 0.794531 0.534722 +vt 0.788802 0.527315 +vt 0.784115 0.518981 +vt 0.801823 0.525463 +vt 0.796094 0.519907 +vt 0.791406 0.515278 +vt 0.787760 0.508796 +vt 0.794531 0.862500 +vt 0.794531 0.880093 +vt 0.776823 0.862500 +vt 0.794531 0.864352 +vt 0.794531 0.867130 +vt 0.794531 0.870833 +vt 0.792448 0.862500 +vt 0.792448 0.864352 +vt 0.792448 0.867130 +vt 0.792448 0.870833 +vt 0.790365 0.862500 +vt 0.790365 0.864352 +vt 0.790365 0.866204 +vt 0.790365 0.870833 +vt 0.787240 0.870833 +vt 0.792448 0.880093 +vt 0.790365 0.880093 +vt 0.776823 0.870833 +vt 0.785677 0.880093 +vt 0.794531 0.877315 +vt 0.792448 0.877315 +vt 0.790365 0.877315 +vt 0.785677 0.877315 +vt 0.778906 0.870833 +vt 0.794531 0.875463 +vt 0.792448 0.875463 +vt 0.790365 0.875463 +vt 0.785677 0.876389 +vt 0.780990 0.870833 +vt 0.778906 0.862500 +vt 0.780990 0.862500 +vt 0.785677 0.862500 +vt 0.776823 0.864352 +vt 0.779427 0.864352 +vt 0.780990 0.864352 +vt 0.785677 0.864352 +vt 0.776823 0.867130 +vt 0.779427 0.867130 +vt 0.780990 0.866204 +vt 0.785677 0.866204 +vt 0.916927 0.114352 +vt 0.840885 0.752315 +vt 0.840885 0.734722 +vt 0.947135 0.190278 +vt 0.912760 0.201389 +vt 0.924219 0.118056 +vt 0.840885 0.750463 +vt 0.931510 0.126389 +vt 0.840885 0.747685 +vt 0.937760 0.138426 +vt 0.840885 0.743981 +vt 0.915365 0.130093 +vt 0.922135 0.135648 +vt 0.927865 0.143056 +vt 0.932552 0.151389 +vt 0.914844 0.144907 +vt 0.920573 0.150463 +vt 0.925260 0.155093 +vt 0.928906 0.161574 +vt 0.926823 0.166204 +vt 0.940885 0.193056 +vt 0.935156 0.195833 +vt 0.928906 0.197685 +vt 0.945573 0.172685 +vt 0.840885 0.737500 +vt 0.938802 0.177315 +vt 0.933073 0.181019 +vt 0.928385 0.184722 +vt 0.942448 0.155093 +vt 0.840885 0.739352 +vt 0.936198 0.163426 +vt 0.931510 0.170833 +vt 0.927344 0.173611 +vt 0.913281 0.186574 +vt 0.913281 0.173611 +vt 0.913802 0.159722 +vt 0.918490 0.201389 +vt 0.918490 0.186574 +vt 0.918490 0.173611 +vt 0.919531 0.161574 +vt 0.923698 0.199537 +vt 0.923698 0.185648 +vt 0.923698 0.173611 +vt 0.923698 0.164352 +vt 0.794531 0.734722 +vt 0.794531 0.752315 +vt 0.730990 0.816204 +vt 0.794531 0.737500 +vt 0.794531 0.739352 +vt 0.794531 0.743981 +vt 0.792448 0.734722 +vt 0.792448 0.737500 +vt 0.792448 0.739352 +vt 0.792448 0.743981 +vt 0.790365 0.734722 +vt 0.790365 0.737500 +vt 0.790365 0.739352 +vt 0.790365 0.743981 +vt 0.789323 0.743981 +vt 0.785677 0.746759 +vt 0.722135 0.810648 +vt 0.792448 0.752315 +vt 0.790365 0.752315 +vt 0.730990 0.807870 +vt 0.785677 0.752315 +vt 0.794531 0.750463 +vt 0.792448 0.750463 +vt 0.790365 0.750463 +vt 0.785677 0.750463 +vt 0.728906 0.807870 +vt 0.794531 0.747685 +vt 0.792448 0.747685 +vt 0.790365 0.748611 +vt 0.785677 0.748611 +vt 0.726823 0.807870 +vt 0.728906 0.816204 +vt 0.726302 0.816204 +vt 0.722135 0.816204 +vt 0.785677 0.734722 +vt 0.730990 0.814352 +vt 0.728385 0.813426 +vt 0.726302 0.813426 +vt 0.785677 0.737500 +vt 0.722135 0.814352 +vt 0.730990 0.811574 +vt 0.728906 0.811574 +vt 0.726302 0.812500 +vt 0.785677 0.738426 +vt 0.722135 0.812500 +vt 0.840885 0.688426 +vt 0.947135 0.481019 +vt 0.840885 0.926389 +vt 0.916927 0.556019 +vt 0.912760 0.468981 +vt 0.945573 0.498611 +vt 0.840885 0.686574 +vt 0.942448 0.516204 +vt 0.840885 0.684722 +vt 0.937760 0.531944 +vt 0.840885 0.934722 +vt 0.840885 0.680093 +vt 0.940885 0.478241 +vt 0.938802 0.493981 +vt 0.935677 0.508796 +vt 0.932552 0.518981 +vt 0.935156 0.475463 +vt 0.933073 0.489352 +vt 0.930990 0.501389 +vt 0.928385 0.510648 +vt 0.926302 0.505093 +vt 0.915365 0.540278 +vt 0.914844 0.525463 +vt 0.913802 0.511574 +vt 0.923698 0.552315 +vt 0.840885 0.928241 +vt 0.921615 0.534722 +vt 0.920573 0.519907 +vt 0.919010 0.508796 +vt 0.930990 0.543981 +vt 0.840885 0.930093 +vt 0.927344 0.528241 +vt 0.925260 0.516204 +vt 0.923698 0.506944 +vt 0.918490 0.470833 +vt 0.923698 0.471759 +vt 0.928906 0.472685 +vt 0.912760 0.483796 +vt 0.918490 0.483796 +vt 0.923698 0.484722 +vt 0.928385 0.487500 +vt 0.913281 0.497685 +vt 0.918490 0.496759 +vt 0.923698 0.496759 +vt 0.926823 0.497685 +vt 0.730990 0.862500 +vt 0.794531 0.926389 +vt 0.794531 0.688426 +vt 0.730990 0.864352 +vt 0.730990 0.867130 +vt 0.730990 0.870833 +vt 0.785677 0.926389 +vt 0.728906 0.862500 +vt 0.728906 0.864352 +vt 0.728906 0.867130 +vt 0.728906 0.870833 +vt 0.785677 0.928241 +vt 0.726302 0.862500 +vt 0.726302 0.864352 +vt 0.726302 0.866204 +vt 0.726823 0.870833 +vt 0.785677 0.930093 +vt 0.725781 0.870833 +vt 0.789323 0.934722 +vt 0.785677 0.683796 +vt 0.794531 0.928241 +vt 0.794531 0.930093 +vt 0.794531 0.934722 +vt 0.794531 0.680093 +vt 0.792448 0.926389 +vt 0.792448 0.928241 +vt 0.792448 0.930093 +vt 0.792448 0.934722 +vt 0.792448 0.680093 +vt 0.790365 0.926389 +vt 0.790365 0.928241 +vt 0.790365 0.930093 +vt 0.790365 0.934722 +vt 0.790365 0.680093 +vt 0.792448 0.688426 +vt 0.790365 0.688426 +vt 0.722135 0.862500 +vt 0.785677 0.688426 +vt 0.794531 0.686574 +vt 0.792448 0.686574 +vt 0.790365 0.686574 +vt 0.722135 0.864352 +vt 0.785677 0.686574 +vt 0.794531 0.684722 +vt 0.792448 0.684722 +vt 0.790365 0.684722 +vt 0.722135 0.866204 +vt 0.785677 0.684722 +s 0 +usemtl Generic_walls.005 +f 555/1187/181 405/1017/181 481/1103/181 627/1275/181 +f 629/1277/182 590/1230/182 517/1143/182 553/1185/182 +f 480/1102/183 444/1060/183 591/1232/183 628/1276/183 +f 369/975/184 518/1145/184 592/1234/184 443/1059/184 +f 407/1019/185 370/976/185 442/1057/185 479/1101/185 +f 368/973/186 371/978/186 375/983/186 374/981/186 +f 371/978/187 372/979/187 376/984/187 375/983/187 +f 372/979/188 373/980/188 377/985/188 376/984/188 +f 374/981/189 375/983/189 379/988/189 378/986/189 +f 375/983/190 376/984/190 380/989/190 379/988/190 +f 376/984/191 377/985/191 381/990/191 380/989/191 +f 378/986/192 379/988/192 400/1012/192 396/1007/192 +f 379/988/193 380/989/193 404/1016/193 400/1012/193 +f 380/989/194 381/990/194 382/991/194 404/1016/194 +f 369/975/195 383/992/195 387/996/195 386/995/195 +f 383/992/196 384/993/196 388/997/196 387/996/196 +f 384/993/197 385/994/197 389/998/197 388/997/197 +f 386/995/198 387/996/198 391/1000/198 390/999/198 +f 387/996/199 388/997/199 392/1001/199 391/1000/199 +f 388/997/200 389/998/200 393/1002/200 392/1001/200 +f 390/999/201 391/1000/201 377/985/201 373/980/201 +f 391/1000/202 392/1001/202 381/990/202 377/985/202 +f 392/1001/203 393/1002/203 382/991/203 381/990/203 +f 370/977/204 394/1003/204 398/1010/204 397/1009/204 +f 394/1003/205 395/1005/205 399/1011/205 398/1010/205 +f 395/1005/206 396/1007/206 400/1012/206 399/1011/206 +f 397/1009/207 398/1010/207 402/1014/207 401/1013/207 +f 398/1010/208 399/1011/208 403/1015/208 402/1014/208 +f 399/1011/209 400/1012/209 404/1016/209 403/1015/209 +f 401/1013/210 402/1014/210 389/998/210 385/994/210 +f 402/1014/211 403/1015/211 393/1002/211 389/998/211 +f 403/1015/212 404/1016/212 382/991/212 393/1002/212 +f 408/1020/213 409/1021/213 413/1026/213 412/1025/213 +f 409/1021/214 410/1022/214 414/1027/214 413/1026/214 +f 411/1024/215 412/1025/215 416/1030/215 415/1029/215 +f 412/1025/216 413/1026/216 417/1031/216 416/1030/216 +f 413/1026/217 414/1027/217 418/1032/217 417/1031/217 +f 415/1029/218 416/1030/218 437/1052/218 433/1048/218 +f 416/1030/219 417/1031/219 441/1056/219 437/1052/219 +f 417/1031/220 418/1032/220 419/1034/220 441/1056/220 +f 406/1018/221 420/1035/221 424/1039/221 423/1038/221 +f 420/1035/222 421/1036/222 425/1040/222 424/1039/222 +f 421/1036/223 422/1037/223 426/1041/223 425/1040/223 +f 423/1038/224 424/1039/224 428/1043/224 427/1042/224 +f 424/1039/225 425/1040/225 429/1044/225 428/1043/225 +f 425/1040/226 426/1041/226 430/1045/226 429/1044/226 +f 427/1042/227 428/1043/227 414/1028/227 410/1023/227 +f 428/1043/228 429/1044/228 418/1033/228 414/1028/228 +f 429/1044/229 430/1045/229 419/1034/229 418/1033/229 +f 407/1019/230 431/1046/230 435/1050/230 434/1049/230 +f 431/1046/231 432/1047/231 436/1051/231 435/1050/231 +f 432/1047/232 433/1048/232 437/1052/232 436/1051/232 +f 434/1049/233 435/1050/233 439/1054/233 438/1053/233 +f 435/1050/234 436/1051/234 440/1055/234 439/1054/234 +f 436/1051/235 437/1052/235 441/1056/235 440/1055/235 +f 438/1053/236 439/1054/236 426/1041/236 422/1037/236 +f 439/1054/237 440/1055/237 430/1045/237 426/1041/237 +f 440/1055/238 441/1056/238 419/1034/238 430/1045/238 +f 442/1058/239 445/1062/239 449/1067/239 448/1065/239 +f 445/1062/240 446/1063/240 450/1068/240 449/1067/240 +f 446/1063/241 447/1064/241 451/1069/241 450/1068/241 +f 448/1065/242 449/1067/242 453/1072/242 452/1070/242 +f 449/1067/243 450/1068/243 454/1073/243 453/1072/243 +f 450/1068/244 451/1069/244 455/1074/244 454/1073/244 +f 452/1070/245 453/1072/245 474/1096/245 470/1091/245 +f 453/1072/246 454/1073/246 478/1100/246 474/1096/246 +f 454/1073/247 455/1074/247 456/1075/247 478/1100/247 +f 443/1059/248 457/1076/248 461/1080/248 460/1079/248 +f 457/1076/249 458/1077/249 462/1081/249 461/1080/249 +f 458/1077/250 459/1078/250 463/1082/250 462/1081/250 +f 460/1079/251 461/1080/251 465/1084/251 464/1083/251 +f 461/1080/252 462/1081/252 466/1085/252 465/1084/252 +f 462/1081/253 463/1082/253 467/1086/253 466/1085/253 +f 464/1083/254 465/1084/254 451/1069/254 447/1064/254 +f 465/1084/255 466/1085/255 455/1074/255 451/1069/255 +f 466/1085/256 467/1086/256 456/1075/256 455/1074/256 +f 444/1061/257 468/1087/257 472/1094/257 471/1093/257 +f 468/1087/258 469/1089/258 473/1095/258 472/1094/258 +f 469/1089/259 470/1091/259 474/1096/259 473/1095/259 +f 471/1093/260 472/1094/260 476/1098/260 475/1097/260 +f 472/1094/261 473/1095/261 477/1099/261 476/1098/261 +f 473/1095/262 474/1096/262 478/1100/262 477/1099/262 +f 475/1097/263 476/1098/263 463/1082/263 459/1078/263 +f 476/1098/264 477/1099/264 467/1086/264 463/1082/264 +f 477/1099/265 478/1100/265 456/1075/265 467/1086/265 +f 479/1101/266 482/1104/266 486/1108/266 485/1107/266 +f 482/1104/267 483/1105/267 487/1109/267 486/1108/267 +f 483/1105/268 484/1106/268 488/1110/268 487/1109/268 +f 485/1107/269 486/1108/269 490/1112/269 489/1111/269 +f 486/1108/270 487/1109/270 491/1113/270 490/1112/270 +f 487/1109/271 488/1110/271 492/1114/271 491/1113/271 +f 489/1111/272 490/1112/272 511/1136/272 507/1132/272 +f 490/1112/273 491/1113/273 515/1140/273 511/1136/273 +f 491/1113/274 492/1114/274 493/1115/274 515/1140/274 +f 480/1102/275 494/1116/275 498/1121/275 497/1120/275 +f 494/1116/276 495/1117/276 499/1122/276 498/1121/276 +f 495/1117/277 496/1119/277 500/1123/277 499/1122/277 +f 497/1120/278 498/1121/278 502/1126/278 501/1125/278 +f 498/1121/279 499/1122/279 503/1127/279 502/1126/279 +f 499/1122/280 500/1123/280 504/1128/280 503/1127/280 +f 501/1125/281 502/1126/281 488/1110/281 484/1106/281 +f 502/1126/282 503/1127/282 492/1114/282 488/1110/282 +f 503/1127/283 504/1128/283 493/1115/283 492/1114/283 +f 505/1130/284 506/1131/284 510/1135/284 509/1134/284 +f 506/1131/285 507/1132/285 511/1136/285 510/1135/285 +f 508/1133/286 509/1134/286 513/1138/286 512/1137/286 +f 509/1134/287 510/1135/287 514/1139/287 513/1138/287 +f 510/1135/288 511/1136/288 515/1140/288 514/1139/288 +f 512/1137/289 513/1138/289 500/1124/289 496/1118/289 +f 513/1138/290 514/1139/290 504/1129/290 500/1124/290 +f 514/1139/291 515/1140/291 493/1115/291 504/1129/291 +f 516/1141/292 519/1146/292 523/1153/292 522/1152/292 +f 519/1146/293 520/1148/293 524/1154/293 523/1153/293 +f 520/1148/294 521/1150/294 525/1155/294 524/1154/294 +f 522/1152/295 523/1153/295 527/1157/295 526/1156/295 +f 523/1153/296 524/1154/296 528/1158/296 527/1157/296 +f 524/1154/297 525/1155/297 529/1159/297 528/1158/297 +f 526/1156/298 527/1157/298 548/1180/298 544/1176/298 +f 527/1157/299 528/1158/299 552/1184/299 548/1180/299 +f 528/1158/300 529/1159/300 530/1160/300 552/1184/300 +f 517/1144/301 531/1161/301 535/1166/301 534/1164/301 +f 531/1161/302 532/1162/302 536/1167/302 535/1166/302 +f 532/1162/303 533/1163/303 537/1168/303 536/1167/303 +f 534/1164/304 535/1166/304 539/1171/304 538/1169/304 +f 535/1166/305 536/1167/305 540/1172/305 539/1171/305 +f 536/1167/306 537/1168/306 541/1173/306 540/1172/306 +f 538/1169/307 539/1171/307 525/1155/307 521/1150/307 +f 539/1171/308 540/1172/308 529/1159/308 525/1155/308 +f 540/1172/309 541/1173/309 530/1160/309 529/1159/309 +f 518/1145/310 542/1174/310 546/1178/310 545/1177/310 +f 542/1174/311 543/1175/311 547/1179/311 546/1178/311 +f 543/1175/312 544/1176/312 548/1180/312 547/1179/312 +f 545/1177/313 546/1178/313 550/1182/313 549/1181/313 +f 546/1178/314 547/1179/314 551/1183/314 550/1182/314 +f 547/1179/315 548/1180/315 552/1184/315 551/1183/315 +f 549/1181/316 550/1182/316 537/1168/316 533/1163/316 +f 550/1182/317 551/1183/317 541/1173/317 537/1168/317 +f 551/1183/318 552/1184/318 530/1160/318 541/1173/318 +f 553/1185/319 556/1188/319 560/1192/319 559/1191/319 +f 556/1188/320 557/1189/320 561/1193/320 560/1192/320 +f 557/1189/321 558/1190/321 562/1194/321 561/1193/321 +f 559/1191/322 560/1192/322 564/1196/322 563/1195/322 +f 560/1192/323 561/1193/323 565/1197/323 564/1196/323 +f 561/1193/324 562/1194/324 566/1198/324 565/1197/324 +f 563/1195/325 564/1196/325 585/1223/325 581/1219/325 +f 564/1196/326 565/1197/326 589/1228/326 585/1223/326 +f 565/1197/327 566/1198/327 567/1199/327 589/1228/327 +f 554/1186/328 568/1202/328 572/1207/328 571/1206/328 +f 568/1202/329 569/1203/329 573/1208/329 572/1207/329 +f 569/1203/330 570/1205/330 574/1209/330 573/1208/330 +f 571/1206/331 572/1207/331 576/1212/331 575/1211/331 +f 572/1207/332 573/1208/332 577/1213/332 576/1212/332 +f 573/1208/333 574/1209/333 578/1214/333 577/1213/333 +f 575/1211/334 576/1212/334 562/1194/334 558/1190/334 +f 576/1212/335 577/1213/335 566/1198/335 562/1194/335 +f 577/1213/336 578/1214/336 567/1200/336 566/1198/336 +f 579/1216/337 580/1217/337 584/1222/337 583/1221/337 +f 580/1217/338 581/1218/338 585/1224/338 584/1222/338 +f 582/1220/339 583/1221/339 587/1226/339 586/1225/339 +f 583/1221/340 584/1222/340 588/1227/340 587/1226/340 +f 584/1222/341 585/1224/341 589/1229/341 588/1227/341 +f 586/1225/342 587/1226/342 574/1210/342 570/1204/342 +f 587/1226/343 588/1227/343 578/1215/343 574/1210/343 +f 588/1227/344 589/1229/344 567/1201/344 578/1215/344 +f 590/1231/345 593/1235/345 597/1243/345 596/1242/345 +f 593/1235/346 594/1237/346 598/1244/346 597/1243/346 +f 594/1237/347 595/1239/347 599/1245/347 598/1244/347 +f 596/1242/348 597/1243/348 601/1247/348 600/1246/348 +f 597/1243/349 598/1244/349 602/1248/349 601/1247/349 +f 598/1244/350 599/1245/350 603/1249/350 602/1248/350 +f 600/1246/351 601/1247/351 622/1270/351 618/1266/351 +f 601/1247/352 602/1248/352 626/1274/352 622/1270/352 +f 602/1248/353 603/1249/353 604/1250/353 626/1274/353 +f 591/1233/354 605/1251/354 609/1256/354 608/1254/354 +f 605/1251/355 606/1252/355 610/1257/355 609/1256/355 +f 606/1252/356 607/1253/356 611/1258/356 610/1257/356 +f 608/1254/357 609/1256/357 613/1261/357 612/1259/357 +f 609/1256/358 610/1257/358 614/1262/358 613/1261/358 +f 610/1257/359 611/1258/359 615/1263/359 614/1262/359 +f 612/1259/360 613/1261/360 599/1245/360 595/1239/360 +f 613/1261/361 614/1262/361 603/1249/361 599/1245/361 +f 614/1262/362 615/1263/362 604/1250/362 603/1249/362 +f 592/1234/363 616/1264/363 620/1268/363 619/1267/363 +f 616/1264/364 617/1265/364 621/1269/364 620/1268/364 +f 617/1265/365 618/1266/365 622/1270/365 621/1269/365 +f 619/1267/366 620/1268/366 624/1272/366 623/1271/366 +f 620/1268/367 621/1269/367 625/1273/367 624/1272/367 +f 621/1269/368 622/1270/368 626/1274/368 625/1273/368 +f 623/1271/369 624/1272/369 611/1258/369 607/1253/369 +f 624/1272/370 625/1273/370 615/1263/370 611/1258/370 +f 625/1273/371 626/1274/371 604/1250/371 615/1263/371 +f 630/1278/372 631/1279/372 635/1284/372 634/1283/372 +f 631/1279/373 632/1280/373 636/1285/373 635/1284/373 +f 633/1282/374 634/1283/374 638/1288/374 637/1287/374 +f 634/1283/375 635/1284/375 639/1289/375 638/1288/375 +f 635/1284/376 636/1285/376 640/1290/376 639/1289/376 +f 637/1287/377 638/1288/377 659/1316/377 655/1311/377 +f 638/1288/378 639/1289/378 663/1321/378 659/1316/378 +f 639/1289/379 640/1290/379 641/1292/379 663/1321/379 +f 628/1276/380 642/1295/380 646/1300/380 645/1299/380 +f 642/1295/381 643/1296/381 647/1301/381 646/1300/381 +f 643/1296/382 644/1297/382 648/1302/382 647/1301/382 +f 645/1299/383 646/1300/383 650/1305/383 649/1304/383 +f 646/1300/384 647/1301/384 651/1306/384 650/1305/384 +f 647/1301/385 648/1302/385 652/1307/385 651/1306/385 +f 649/1304/386 650/1305/386 636/1286/386 632/1281/386 +f 650/1305/387 651/1306/387 640/1291/387 636/1286/387 +f 651/1306/388 652/1307/388 641/1293/388 640/1291/388 +f 629/1277/389 653/1309/389 657/1314/389 656/1313/389 +f 653/1309/390 654/1310/390 658/1315/390 657/1314/390 +f 654/1310/391 655/1312/391 659/1317/391 658/1315/391 +f 656/1313/392 657/1314/392 661/1319/392 660/1318/392 +f 657/1314/393 658/1315/393 662/1320/393 661/1319/393 +f 658/1315/394 659/1317/394 663/1322/394 662/1320/394 +f 660/1318/395 661/1319/395 648/1303/395 644/1298/395 +f 661/1319/396 662/1320/396 652/1308/396 648/1303/396 +f 662/1320/397 663/1322/397 641/1294/397 652/1308/397 +f 555/1187/398 627/1275/398 633/1282/398 579/1216/398 +f 579/1216/399 633/1282/399 637/1287/399 580/1217/399 +f 580/1217/400 637/1287/400 655/1311/400 581/1218/400 +f 581/1219/401 655/1312/401 654/1310/401 563/1195/401 +f 563/1195/402 654/1310/402 653/1309/402 559/1191/402 +f 559/1191/403 653/1309/403 629/1277/403 553/1185/403 +f 405/1017/404 555/1187/404 582/1220/404 408/1020/404 +f 408/1020/405 582/1220/405 586/1225/405 409/1021/405 +f 409/1021/406 586/1225/406 570/1204/406 410/1022/406 +f 410/1023/407 570/1205/407 569/1203/407 427/1042/407 +f 427/1042/408 569/1203/408 568/1202/408 423/1038/408 +f 423/1038/409 568/1202/409 554/1186/409 406/1018/409 +f 370/976/410 407/1019/410 434/1049/410 394/1004/410 +f 394/1004/411 434/1049/411 438/1053/411 395/1006/411 +f 395/1006/412 438/1053/412 422/1037/412 396/1008/412 +f 396/1008/413 422/1037/413 421/1036/413 378/987/413 +f 378/987/414 421/1036/414 420/1035/414 374/982/414 +f 374/982/415 420/1035/415 406/1018/415 368/974/415 +f 628/1276/416 591/1232/416 608/1255/416 642/1295/416 +f 642/1295/417 608/1255/417 612/1260/417 643/1296/417 +f 643/1296/418 612/1260/418 595/1240/418 644/1297/418 +f 644/1298/419 595/1241/419 594/1238/419 660/1318/419 +f 660/1318/420 594/1238/420 593/1236/420 656/1313/420 +f 656/1313/421 593/1236/421 590/1230/421 629/1277/421 +f 444/1060/422 480/1102/422 497/1120/422 468/1088/422 +f 468/1088/423 497/1120/423 501/1125/423 469/1090/423 +f 469/1090/424 501/1125/424 484/1106/424 470/1092/424 +f 470/1092/425 484/1106/425 483/1105/425 452/1071/425 +f 452/1071/426 483/1105/426 482/1104/426 448/1066/426 +f 448/1066/427 482/1104/427 479/1101/427 442/1057/427 +f 516/1142/428 554/1186/428 571/1206/428 519/1147/428 +f 519/1147/429 571/1206/429 575/1211/429 520/1149/429 +f 520/1149/430 575/1211/430 558/1190/430 521/1151/430 +f 521/1151/431 558/1190/431 557/1189/431 538/1170/431 +f 538/1170/432 557/1189/432 556/1188/432 534/1165/432 +f 534/1165/433 556/1188/433 553/1185/433 517/1143/433 +f 443/1059/434 592/1234/434 619/1267/434 457/1076/434 +f 457/1076/435 619/1267/435 623/1271/435 458/1077/435 +f 458/1077/436 623/1271/436 607/1253/436 459/1078/436 +f 459/1078/437 607/1253/437 606/1252/437 475/1097/437 +f 475/1097/438 606/1252/438 605/1251/438 471/1093/438 +f 471/1093/439 605/1251/439 591/1233/439 444/1061/439 +f 369/975/440 443/1059/440 460/1079/440 383/992/440 +f 383/992/441 460/1079/441 464/1083/441 384/993/441 +f 384/993/442 464/1083/442 447/1064/442 385/994/442 +f 385/994/443 447/1064/443 446/1063/443 401/1013/443 +f 401/1013/444 446/1063/444 445/1062/444 397/1009/444 +f 397/1009/445 445/1062/445 442/1058/445 370/977/445 +f 627/1275/446 481/1103/446 508/1133/446 630/1278/446 +f 630/1278/447 508/1133/447 512/1137/447 631/1279/447 +f 631/1279/448 512/1137/448 496/1118/448 632/1280/448 +f 632/1281/449 496/1119/449 495/1117/449 649/1304/449 +f 649/1304/450 495/1117/450 494/1116/450 645/1299/450 +f 645/1299/451 494/1116/451 480/1102/451 628/1276/451 +f 592/1234/452 518/1145/452 545/1177/452 616/1264/452 +f 616/1264/453 545/1177/453 549/1181/453 617/1265/453 +f 617/1265/454 549/1181/454 533/1163/454 618/1266/454 +f 618/1266/455 533/1163/455 532/1162/455 600/1246/455 +f 600/1246/456 532/1162/456 531/1161/456 596/1242/456 +f 596/1242/457 531/1161/457 517/1144/457 590/1231/457 +f 518/1145/458 369/975/458 386/995/458 542/1174/458 +f 542/1174/459 386/995/459 390/999/459 543/1175/459 +f 543/1175/460 390/999/460 373/980/460 544/1176/460 +f 544/1176/461 373/980/461 372/979/461 526/1156/461 +f 526/1156/462 372/979/462 371/978/462 522/1152/462 +f 522/1152/463 371/978/463 368/973/463 516/1141/463 +f 481/1103/464 405/1017/464 411/1024/464 505/1130/464 +f 505/1130/465 411/1024/465 415/1029/465 506/1131/465 +f 506/1131/466 415/1029/466 433/1048/466 507/1132/466 +f 507/1132/467 433/1048/467 432/1047/467 489/1111/467 +f 489/1111/468 432/1047/468 431/1046/468 485/1107/468 +f 485/1107/469 431/1046/469 407/1019/469 479/1101/469 +f 554/1186/470 516/1142/470 368/974/470 406/1018/470 +o Cube.016 +v -3.708341 -0.035659 -5.781968 +v -3.708341 0.704719 -5.781968 +v -3.708341 -0.035659 -5.890337 +v -3.708341 0.704719 -5.890337 +v -3.585381 -0.035659 -5.781968 +v -3.585381 0.704719 -5.781968 +v -3.585381 -0.035659 -5.890337 +v -3.585381 0.704719 -5.890337 +vn -0.1000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1000 +vn 0.1000 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.1000 +vn -0.0000 -0.3702 -0.0000 +vn -0.0000 0.3702 -0.0000 +vt 0.375000 0.000000 +vt 0.375000 1.000000 +vt 0.125000 0.750000 +vt 0.625000 0.000000 +vt 0.625000 1.000000 +vt 0.875000 0.750000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.625000 0.250000 +vt 0.875000 0.500000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.500000 +vt 0.625000 0.500000 +s 0 +f 664/1323/471 665/1326/471 667/1331/471 666/1329/471 +f 666/1329/472 667/1331/472 671/1336/472 670/1335/472 +f 670/1335/473 671/1336/473 669/1334/473 668/1333/473 +f 668/1333/474 669/1334/474 665/1327/474 664/1324/474 +f 666/1330/475 670/1335/475 668/1333/475 664/1325/475 +f 671/1336/476 667/1332/476 665/1328/476 669/1334/476 +o Cube.017 +v -6.211990 -0.035659 -5.781968 +v -6.211990 0.704719 -5.781968 +v -6.211990 -0.035659 -5.890337 +v -6.211990 0.704719 -5.890337 +v -6.089030 -0.035659 -5.781968 +v -6.089030 0.704719 -5.781968 +v -6.089030 -0.035659 -5.890337 +v -6.089030 0.704719 -5.890337 +vn -0.1000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1000 +vn 0.1000 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.1000 +vn -0.0000 -0.3702 -0.0000 +vn -0.0000 0.3702 -0.0000 +vt 0.375000 0.000000 +vt 0.375000 1.000000 +vt 0.125000 0.750000 +vt 0.625000 0.000000 +vt 0.625000 1.000000 +vt 0.875000 0.750000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.625000 0.250000 +vt 0.875000 0.500000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.500000 +vt 0.625000 0.500000 +s 0 +f 672/1337/477 673/1340/477 675/1345/477 674/1343/477 +f 674/1343/478 675/1345/478 679/1350/478 678/1349/478 +f 678/1349/479 679/1350/479 677/1348/479 676/1347/479 +f 676/1347/480 677/1348/480 673/1341/480 672/1338/480 +f 674/1344/481 678/1349/481 676/1347/481 672/1339/481 +f 679/1350/482 675/1346/482 673/1342/482 677/1348/482 +o Cube.018 +v -6.211990 -0.035659 -4.694294 +v -6.211990 0.704719 -4.694294 +v -6.211990 -0.035659 -4.802663 +v -6.211990 0.704719 -4.802663 +v -6.089030 -0.035659 -4.694294 +v -6.089030 0.704719 -4.694294 +v -6.089030 -0.035659 -4.802663 +v -6.089030 0.704719 -4.802663 +vn -0.1000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1000 +vn 0.1000 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.1000 +vn -0.0000 -0.3702 -0.0000 +vn -0.0000 0.3702 -0.0000 +vt 0.375000 0.000000 +vt 0.375000 1.000000 +vt 0.125000 0.750000 +vt 0.625000 0.000000 +vt 0.625000 1.000000 +vt 0.875000 0.750000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.625000 0.250000 +vt 0.875000 0.500000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.500000 +vt 0.625000 0.500000 +s 0 +f 680/1351/483 681/1354/483 683/1359/483 682/1357/483 +f 682/1357/484 683/1359/484 687/1364/484 686/1363/484 +f 686/1363/485 687/1364/485 685/1362/485 684/1361/485 +f 684/1361/486 685/1362/486 681/1355/486 680/1352/486 +f 682/1358/487 686/1363/487 684/1361/487 680/1353/487 +f 687/1364/488 683/1360/488 681/1356/488 685/1362/488 +o Cube.026 +v -3.708341 -0.035659 -4.698632 +v -3.708341 0.704719 -4.698632 +v -3.708341 -0.035659 -4.807001 +v -3.708341 0.704719 -4.807001 +v -3.585381 -0.035659 -4.698632 +v -3.585381 0.704719 -4.698632 +v -3.585381 -0.035659 -4.807001 +v -3.585381 0.704719 -4.807001 +vn -0.1000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1000 +vn 0.1000 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.1000 +vn -0.0000 -0.3702 -0.0000 +vn -0.0000 0.3702 -0.0000 +vt 0.375000 0.000000 +vt 0.375000 1.000000 +vt 0.125000 0.750000 +vt 0.625000 0.000000 +vt 0.625000 1.000000 +vt 0.875000 0.750000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.625000 0.250000 +vt 0.875000 0.500000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.500000 +vt 0.625000 0.500000 +s 0 +f 688/1365/489 689/1368/489 691/1373/489 690/1371/489 +f 690/1371/490 691/1373/490 695/1378/490 694/1377/490 +f 694/1377/491 695/1378/491 693/1376/491 692/1375/491 +f 692/1375/492 693/1376/492 689/1369/492 688/1366/492 +f 690/1372/493 694/1377/493 692/1375/493 688/1367/493 +f 695/1378/494 691/1374/494 689/1370/494 693/1376/494 +o Cube.027 +v -7.541216 -0.008422 0.273364 +v -7.541216 0.491578 0.273364 +v -7.541216 -0.008422 -0.320852 +v -7.541216 0.491578 -0.320852 +v -6.352357 -0.008422 0.273364 +v -6.352357 0.491578 0.273364 +v -6.352357 -0.008422 -0.320852 +v -6.352357 0.491578 -0.320852 +vn -0.7167 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.2971 +vn 0.7167 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.2971 +vn -0.0000 -0.2500 -0.0000 +vn -0.0000 0.2500 -0.0000 +vt 0.375000 0.000000 +vt 0.375000 1.000000 +vt 0.125000 0.750000 +vt 0.625000 0.000000 +vt 0.625000 1.000000 +vt 0.875000 0.750000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.625000 0.250000 +vt 0.875000 0.500000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.500000 +vt 0.625000 0.500000 +s 0 +f 696/1379/495 697/1382/495 699/1387/495 698/1385/495 +f 698/1385/496 699/1387/496 703/1392/496 702/1391/496 +f 702/1391/497 703/1392/497 701/1390/497 700/1389/497 +f 700/1389/498 701/1390/498 697/1383/498 696/1380/498 +f 698/1386/499 702/1391/499 700/1389/499 696/1381/499 +f 703/1392/500 699/1388/500 697/1384/500 701/1390/500 +o Cube.028 +v -7.561815 -0.008503 -2.085760 +v -7.561815 0.491497 -2.085760 +v -7.561815 -0.008503 -2.679976 +v -7.561815 0.491497 -2.679976 +v -6.352357 -0.008503 -2.085760 +v -6.352357 0.491497 -2.085760 +v -6.352357 -0.008503 -2.679976 +v -6.352357 0.491497 -2.679976 +vn -0.7167 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.2971 +vn 0.7167 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.2971 +vn -0.0000 -0.2500 -0.0000 +vn -0.0000 0.2500 -0.0000 +vt 0.375000 0.000000 +vt 0.375000 1.000000 +vt 0.125000 0.750000 +vt 0.625000 0.000000 +vt 0.625000 1.000000 +vt 0.875000 0.750000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.625000 0.250000 +vt 0.875000 0.500000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.500000 +vt 0.625000 0.500000 +s 0 +f 704/1393/501 705/1396/501 707/1401/501 706/1399/501 +f 706/1399/502 707/1401/502 711/1406/502 710/1405/502 +f 710/1405/503 711/1406/503 709/1404/503 708/1403/503 +f 708/1403/504 709/1404/504 705/1397/504 704/1394/504 +f 706/1400/505 710/1405/505 708/1403/505 704/1395/505 +f 711/1406/506 707/1402/506 705/1398/506 709/1404/506 +o Cube.029 +v -1.341988 -0.008503 -2.085760 +v -1.341988 0.491497 -2.085760 +v -1.341988 -0.008503 -2.679976 +v -1.341988 0.491497 -2.679976 +v -0.132531 -0.008503 -2.085760 +v -0.132531 0.491497 -2.085760 +v -0.132531 -0.008503 -2.679976 +v -0.132531 0.491497 -2.679976 +vn -0.7167 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.2971 +vn 0.7167 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.2971 +vn -0.0000 -0.2500 -0.0000 +vn -0.0000 0.2500 -0.0000 +vt 0.375000 0.000000 +vt 0.375000 1.000000 +vt 0.125000 0.750000 +vt 0.625000 0.000000 +vt 0.625000 1.000000 +vt 0.875000 0.750000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.625000 0.250000 +vt 0.875000 0.500000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.500000 +vt 0.625000 0.500000 +s 0 +f 712/1407/507 713/1410/507 715/1415/507 714/1413/507 +f 714/1413/508 715/1415/508 719/1420/508 718/1419/508 +f 718/1419/509 719/1420/509 717/1418/509 716/1417/509 +f 716/1417/510 717/1418/510 713/1411/510 712/1408/510 +f 714/1414/511 718/1419/511 716/1417/511 712/1409/511 +f 719/1420/512 715/1416/512 713/1412/512 717/1418/512 +o Cube.030 +v -1.321389 -0.008422 0.273364 +v -1.321389 0.491578 0.273364 +v -1.321389 -0.008422 -0.320852 +v -1.321389 0.491578 -0.320852 +v -0.132531 -0.008422 0.273364 +v -0.132531 0.491578 0.273364 +v -0.132531 -0.008422 -0.320852 +v -0.132531 0.491578 -0.320852 +vn -0.7167 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.2971 +vn 0.7167 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.2971 +vn -0.0000 -0.2500 -0.0000 +vn -0.0000 0.2500 -0.0000 +vt 0.375000 0.000000 +vt 0.375000 1.000000 +vt 0.125000 0.750000 +vt 0.625000 0.000000 +vt 0.625000 1.000000 +vt 0.875000 0.750000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.625000 0.250000 +vt 0.875000 0.500000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.500000 +vt 0.625000 0.500000 +s 0 +f 720/1421/513 721/1424/513 723/1429/513 722/1427/513 +f 722/1427/514 723/1429/514 727/1434/514 726/1433/514 +f 726/1433/515 727/1434/515 725/1432/515 724/1431/515 +f 724/1431/516 725/1432/516 721/1425/516 720/1422/516 +f 722/1428/517 726/1433/517 724/1431/517 720/1423/517 +f 727/1434/518 723/1430/518 721/1426/518 725/1432/518 +o Cube.031 +v -7.539256 -0.008422 -0.312904 +v -7.539256 0.491578 -0.312904 +v -7.539256 -0.008422 -2.123013 +v -7.539256 0.491578 -2.123013 +v -6.996161 -0.008422 -0.312904 +v -6.996161 0.491578 -0.312904 +v -6.996161 -0.008422 -2.123013 +v -6.996161 0.491578 -2.123013 +vn -0.3274 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.9051 +vn 0.3274 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.9051 +vn -0.0000 -0.2500 -0.0000 +vn -0.0000 0.2500 -0.0000 +vt 0.375000 0.000000 +vt 0.375000 1.000000 +vt 0.125000 0.750000 +vt 0.625000 0.000000 +vt 0.625000 1.000000 +vt 0.875000 0.750000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.625000 0.250000 +vt 0.875000 0.500000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.500000 +vt 0.625000 0.500000 +s 0 +f 728/1435/519 729/1438/519 731/1443/519 730/1441/519 +f 730/1441/520 731/1443/520 735/1448/520 734/1447/520 +f 734/1447/521 735/1448/521 733/1446/521 732/1445/521 +f 732/1445/522 733/1446/522 729/1439/522 728/1436/522 +f 730/1442/523 734/1447/523 732/1445/523 728/1437/523 +f 735/1448/524 731/1444/524 729/1440/524 733/1446/524 +o Cube.032 +v -0.676367 -0.008422 -0.312904 +v -0.676367 0.491578 -0.312904 +v -0.676367 -0.008422 -2.123013 +v -0.676367 0.491578 -2.123013 +v -0.133272 -0.008422 -0.312904 +v -0.133272 0.491578 -0.312904 +v -0.133272 -0.008422 -2.123013 +v -0.133272 0.491578 -2.123013 +vn -0.3274 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.9051 +vn 0.3274 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.9051 +vn -0.0000 -0.2500 -0.0000 +vn -0.0000 0.2500 -0.0000 +vt 0.375000 0.000000 +vt 0.375000 1.000000 +vt 0.125000 0.750000 +vt 0.625000 0.000000 +vt 0.625000 1.000000 +vt 0.875000 0.750000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.625000 0.250000 +vt 0.875000 0.500000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.500000 +vt 0.625000 0.500000 +s 0 +f 736/1449/525 737/1452/525 739/1457/525 738/1455/525 +f 738/1455/526 739/1457/526 743/1462/526 742/1461/526 +f 742/1461/527 743/1462/527 741/1460/527 740/1459/527 +f 740/1459/528 741/1460/528 737/1453/528 736/1450/528 +f 738/1456/529 742/1461/529 740/1459/529 736/1451/529 +f 743/1462/530 739/1458/530 737/1454/530 741/1460/530 +o Cube.033 +v -7.569619 0.472647 0.249831 +v -7.569619 0.998968 0.249831 +v -7.569619 0.472647 -2.685748 +v -7.569619 0.998968 -2.685748 +v -7.471073 0.472647 0.249831 +v -7.471073 0.998968 0.249831 +v -7.471073 0.472647 -2.685748 +v -7.471073 0.998968 -2.685748 +vn -0.3274 -0.0000 -0.0000 +vn -0.0000 -0.0000 -1.4678 +vn 0.3274 -0.0000 -0.0000 +vn -0.0000 -0.0000 1.4678 +vn -0.0000 -0.2632 -0.0000 +vn -0.0000 0.2632 -0.0000 +vt 0.375000 0.000000 +vt 0.375000 1.000000 +vt 0.125000 0.750000 +vt 0.625000 0.000000 +vt 0.625000 1.000000 +vt 0.875000 0.750000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.625000 0.250000 +vt 0.875000 0.500000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.500000 +vt 0.625000 0.500000 +s 0 +f 744/1463/531 745/1466/531 747/1471/531 746/1469/531 +f 746/1469/532 747/1471/532 751/1476/532 750/1475/532 +f 750/1475/533 751/1476/533 749/1474/533 748/1473/533 +f 748/1473/534 749/1474/534 745/1467/534 744/1464/534 +f 746/1470/535 750/1475/535 748/1473/535 744/1465/535 +f 751/1476/536 747/1472/536 745/1468/536 749/1474/536 +o Cube.034 +v -7.561815 0.472561 -2.575687 +v -7.561815 0.998883 -2.575687 +v -7.561815 0.472561 -2.679976 +v -7.561815 0.998883 -2.679976 +v -6.352357 0.472561 -2.575687 +v -6.352357 0.998883 -2.575687 +v -6.352357 0.472561 -2.679976 +v -6.352357 0.998883 -2.679976 +vn -0.7167 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.2971 +vn 0.7167 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.2971 +vn -0.0000 -0.2632 -0.0000 +vn -0.0000 0.2632 -0.0000 +vt 0.375000 0.000000 +vt 0.375000 1.000000 +vt 0.125000 0.750000 +vt 0.625000 0.000000 +vt 0.625000 1.000000 +vt 0.875000 0.750000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.625000 0.250000 +vt 0.875000 0.500000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.500000 +vt 0.625000 0.500000 +s 0 +f 752/1477/537 753/1480/537 755/1485/537 754/1483/537 +f 754/1483/538 755/1485/538 759/1490/538 758/1489/538 +f 758/1489/539 759/1490/539 757/1488/539 756/1487/539 +f 756/1487/540 757/1488/540 753/1481/540 752/1478/540 +f 754/1484/541 758/1489/541 756/1487/541 752/1479/541 +f 759/1490/542 755/1486/542 753/1482/542 757/1488/542 +o Cube.035 +v -7.541216 0.472647 0.273364 +v -7.541216 0.998968 0.273364 +v -7.541216 0.472647 0.169075 +v -7.541216 0.998968 0.169075 +v -6.352357 0.472647 0.273364 +v -6.352357 0.998968 0.273364 +v -6.352357 0.472647 0.169075 +v -6.352357 0.998968 0.169075 +vn -0.7167 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.2971 +vn 0.7167 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.2971 +vn -0.0000 -0.2632 -0.0000 +vn -0.0000 0.2632 -0.0000 +vt 0.375000 0.000000 +vt 0.375000 1.000000 +vt 0.125000 0.750000 +vt 0.625000 0.000000 +vt 0.625000 1.000000 +vt 0.875000 0.750000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.625000 0.250000 +vt 0.875000 0.500000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.500000 +vt 0.625000 0.500000 +s 0 +f 760/1491/543 761/1494/543 763/1499/543 762/1497/543 +f 762/1497/544 763/1499/544 767/1504/544 766/1503/544 +f 766/1503/545 767/1504/545 765/1502/545 764/1501/545 +f 764/1501/546 765/1502/546 761/1495/546 760/1492/546 +f 762/1498/547 766/1503/547 764/1501/547 760/1493/547 +f 767/1504/548 763/1500/548 761/1496/548 765/1502/548 +o Cube.036 +v -1.300320 0.472647 0.273364 +v -1.300320 0.998968 0.273364 +v -1.300320 0.472647 0.169075 +v -1.300320 0.998968 0.169075 +v -0.111462 0.472647 0.273364 +v -0.111462 0.998968 0.273364 +v -0.111462 0.472647 0.169075 +v -0.111462 0.998968 0.169075 +vn -0.7167 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.2971 +vn 0.7167 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.2971 +vn -0.0000 -0.2632 -0.0000 +vn -0.0000 0.2632 -0.0000 +vt 0.375000 0.000000 +vt 0.375000 1.000000 +vt 0.125000 0.750000 +vt 0.625000 0.000000 +vt 0.625000 1.000000 +vt 0.875000 0.750000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.625000 0.250000 +vt 0.875000 0.500000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.500000 +vt 0.625000 0.500000 +s 0 +f 768/1505/549 769/1508/549 771/1513/549 770/1511/549 +f 770/1511/550 771/1513/550 775/1518/550 774/1517/550 +f 774/1517/551 775/1518/551 773/1516/551 772/1515/551 +f 772/1515/552 773/1516/552 769/1509/552 768/1506/552 +f 770/1512/553 774/1517/553 772/1515/553 768/1507/553 +f 775/1518/554 771/1514/554 769/1510/554 773/1516/554 +o Cube.037 +v -1.320919 0.472561 -2.575687 +v -1.320919 0.998883 -2.575687 +v -1.320919 0.472561 -2.679976 +v -1.320919 0.998883 -2.679976 +v -0.111462 0.472561 -2.575687 +v -0.111462 0.998883 -2.575687 +v -0.111462 0.472561 -2.679976 +v -0.111462 0.998883 -2.679976 +vn -0.7167 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.2971 +vn 0.7167 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.2971 +vn -0.0000 -0.2632 -0.0000 +vn -0.0000 0.2632 -0.0000 +vt 0.375000 0.000000 +vt 0.375000 1.000000 +vt 0.125000 0.750000 +vt 0.625000 0.000000 +vt 0.625000 1.000000 +vt 0.875000 0.750000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.625000 0.250000 +vt 0.875000 0.500000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.500000 +vt 0.625000 0.500000 +s 0 +f 776/1519/555 777/1522/555 779/1527/555 778/1525/555 +f 778/1525/556 779/1527/556 783/1532/556 782/1531/556 +f 782/1531/557 783/1532/557 781/1530/557 780/1529/557 +f 780/1529/558 781/1530/558 777/1523/558 776/1520/558 +f 778/1526/559 782/1531/559 780/1529/559 776/1521/559 +f 783/1532/560 779/1528/560 777/1524/560 781/1530/560 +o Cube.038 +v -0.203232 0.472647 0.249831 +v -0.203232 0.998968 0.249831 +v -0.203232 0.472647 -2.685748 +v -0.203232 0.998968 -2.685748 +v -0.078872 0.472647 0.249831 +v -0.078872 0.998968 0.249831 +v -0.078872 0.472647 -2.685748 +v -0.078872 0.998968 -2.685748 +vn -0.3274 -0.0000 -0.0000 +vn -0.0000 -0.0000 -1.4678 +vn 0.3274 -0.0000 -0.0000 +vn -0.0000 -0.0000 1.4678 +vn -0.0000 -0.2632 -0.0000 +vn -0.0000 0.2632 -0.0000 +vt 0.375000 0.000000 +vt 0.375000 1.000000 +vt 0.125000 0.750000 +vt 0.625000 0.000000 +vt 0.625000 1.000000 +vt 0.875000 0.750000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.625000 0.250000 +vt 0.875000 0.500000 +vt 0.375000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.500000 +vt 0.625000 0.500000 +s 0 +f 784/1533/561 785/1536/561 787/1541/561 786/1539/561 +f 786/1539/562 787/1541/562 791/1546/562 790/1545/562 +f 790/1545/563 791/1546/563 789/1544/563 788/1543/563 +f 788/1543/564 789/1544/564 785/1537/564 784/1534/564 +f 786/1540/565 790/1545/565 788/1543/565 784/1535/565 +f 791/1546/566 787/1542/566 785/1538/566 789/1544/566 +o Theatrette - Bottom.004 +v 4.808777 0.500000 -7.482163 +v 4.808777 0.000000 -7.482163 +v 4.808777 0.500000 -2.789483 +v 4.808777 0.000000 -2.789483 +v 3.808777 0.500000 -7.482163 +v 3.808777 0.000000 -7.482163 +v 3.808777 0.500000 -2.789483 +v 3.808777 0.000000 -2.789483 +vn -0.0000 0.2500 -0.0000 +vn -0.0000 -0.0000 2.3463 +vn -0.5000 -0.0000 -0.0000 +vn -0.0000 -0.2500 -0.0000 +vn 0.5000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -2.3463 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl plain +f 792/1547/567 796/1551/567 798/1555/567 794/1549/567 +f 795/1550/568 794/1549/568 798/1556/568 799/1558/568 +f 799/1559/569 798/1557/569 796/1552/569 797/1554/569 +f 797/1553/570 793/1548/570 795/1550/570 799/1560/570 +f 793/1548/571 792/1547/571 794/1549/571 795/1550/571 +f 797/1554/572 796/1552/572 792/1547/572 793/1548/572 +o Theatrette - Bottom.005 +v 7.752580 0.300000 -7.479465 +v 7.752580 0.000000 -7.479465 +v 7.752580 0.300000 -3.127930 +v 7.752580 0.000000 -3.127930 +v 5.842932 0.300000 -7.479465 +v 5.842932 0.000000 -7.479465 +v 5.842932 0.300000 -3.127929 +v 5.842932 0.000000 -3.127929 +vn -0.0000 0.1500 -0.0000 +vn -0.0000 -0.0000 2.1758 +vn -0.5000 -0.0000 -0.0000 +vn -0.0000 -0.1500 -0.0000 +vn 0.5000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -2.1758 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl plain +f 800/1561/573 804/1565/573 806/1569/573 802/1563/573 +f 803/1564/574 802/1563/574 806/1570/574 807/1572/574 +f 807/1573/575 806/1571/575 804/1566/575 805/1568/575 +f 805/1567/576 801/1562/576 803/1564/576 807/1574/576 +f 801/1562/577 800/1561/577 802/1563/577 803/1564/577 +f 805/1568/578 804/1566/578 800/1561/578 801/1562/578 +o Theatrette - Bottom.006 +v 6.827080 0.600000 -7.479465 +v 6.827080 0.000000 -7.479465 +v 6.827080 0.600000 -3.127930 +v 6.827080 0.000000 -3.127930 +v 4.804616 0.600000 -7.479465 +v 4.804616 0.000000 -7.479465 +v 4.804616 0.600000 -3.127929 +v 4.804616 0.000000 -3.127929 +vn -0.0000 0.3000 -0.0000 +vn -0.0000 -0.0000 2.1758 +vn -0.5000 -0.0000 -0.0000 +vn -0.0000 -0.3000 -0.0000 +vn 0.5000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -2.1758 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl plain +f 808/1575/579 812/1579/579 814/1583/579 810/1577/579 +f 811/1578/580 810/1577/580 814/1584/580 815/1586/580 +f 815/1587/581 814/1585/581 812/1580/581 813/1582/581 +f 813/1581/582 809/1576/582 811/1578/582 815/1588/582 +f 809/1576/583 808/1575/583 810/1577/583 811/1578/583 +f 813/1582/584 812/1580/584 808/1575/584 809/1576/584 diff --git a/resources/models/book1.mtl b/resources/models/book1.mtl new file mode 100644 index 00000000..b76d278c --- /dev/null +++ b/resources/models/book1.mtl @@ -0,0 +1,13 @@ +# Blender 3.1.0 MTL File: 'TheDenObjects.blend' +# www.blender.org + +newmtl Book1 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd book 1.png diff --git a/resources/models/book1.obj b/resources/models/book1.obj new file mode 100644 index 00000000..ea84b373 --- /dev/null +++ b/resources/models/book1.obj @@ -0,0 +1,211 @@ +# Blender 3.1.0 +# www.blender.org +mtllib book1.mtl +o Cube +v 0.075000 0.015000 -0.105000 +v 0.075000 -0.015000 -0.105000 +v 0.075000 0.015000 0.105000 +v 0.075000 -0.015000 0.105000 +v -0.075000 0.015000 -0.105000 +v -0.075000 -0.015000 -0.105000 +v -0.075000 0.015000 0.105000 +v -0.075000 -0.015000 0.105000 +v 0.069537 0.012487 -0.099618 +v 0.069537 -0.012487 -0.099618 +v -0.075000 -0.012487 0.105000 +v -0.075000 0.012487 0.105000 +v 0.069537 0.012487 0.099618 +v 0.069537 -0.012487 0.099618 +v -0.075000 0.012487 -0.105000 +v -0.075000 -0.012487 -0.105000 +v -0.070171 -0.015000 -0.105000 +v -0.070171 0.015000 0.105000 +v -0.070171 -0.015000 0.105000 +v -0.070171 0.015000 -0.105000 +v -0.070171 -0.012487 -0.099618 +v -0.070171 0.012487 -0.099618 +v -0.070171 -0.012487 0.099618 +v -0.070171 0.012487 0.099618 +v -0.076233 0.000000 0.105000 +v -0.076233 0.000000 -0.105000 +v -0.075000 -0.012487 0.000000 +v -0.075000 0.012487 0.000000 +v -0.076233 0.000000 0.000000 +v -0.076226 0.006243 0.105000 +v -0.076226 -0.006243 -0.105000 +v -0.075000 -0.012487 -0.052500 +v -0.075000 0.012487 -0.052500 +v -0.076226 -0.006243 0.105000 +v -0.076226 0.006243 -0.105000 +v -0.075000 -0.012487 0.052500 +v -0.075000 0.012487 0.052500 +v -0.076233 0.000000 -0.052500 +v -0.076233 0.000000 0.052500 +v -0.076226 -0.006243 0.000000 +v -0.076226 0.006243 0.000000 +v -0.076226 0.006243 0.052500 +v -0.076226 -0.006243 0.052500 +v -0.076226 -0.006243 -0.052500 +v -0.076226 0.006243 -0.052500 +vn -0.0000 0.0150 -0.0000 +vn 0.0275 -0.0021 0.0966 +vn -0.0750 -0.0000 -0.0000 +vn -0.0000 -0.0150 -0.0000 +vn 0.0688 -0.0060 -0.0000 +vn -0.0000 -0.0044 -0.1004 +vn -0.0000 0.0044 -0.1004 +vn -0.0000 -0.0000 -0.1050 +vn 0.0688 0.0060 -0.0000 +vn 0.0750 -0.0000 -0.0000 +vn -0.0749 0.0006 -0.0000 +vn 0.0275 0.0021 0.0966 +vn -0.0000 -0.0000 0.1050 +vn -0.0000 0.0044 0.1004 +vn 0.0275 0.0021 -0.0966 +vn 0.0275 -0.0021 -0.0966 +vn -0.0000 -0.0044 0.1004 +vn -0.0749 -0.0006 -0.0000 +vn 0.0417 -0.0000 -0.0873 +vn 0.0417 -0.0000 0.0873 +vt 0.793443 0.016978 +vt 0.784740 0.050696 +vt 0.422281 0.988336 +vt 0.816161 0.004379 +vt 0.768937 0.050696 +vt 0.768469 0.075977 +vt 0.793443 0.055109 +vt 0.422281 0.019833 +vt 0.816161 0.999325 +vt 0.768469 0.106043 +vt 0.779011 0.030548 +vt 0.014009 0.285645 +vt 0.803290 0.100165 +vt 0.784740 0.034893 +vt 0.743585 0.100165 +vt 0.768937 0.034893 +vt 0.453515 0.337588 +vt 0.014009 0.400084 +vt 0.774959 0.059934 +vt 0.803290 0.040460 +vt 0.743585 0.040460 +vt 0.767184 0.059934 +vt 0.453515 0.587588 +vt 0.780733 0.016978 +vt 0.779472 0.050696 +vt 0.997618 0.821941 +vt 0.992766 0.003169 +vt 0.774204 0.050696 +vt 0.821822 0.821941 +vt 0.778491 0.075977 +vt 0.824213 0.003169 +vt 0.763487 0.040460 +vt 0.769775 0.059934 +vt 0.783388 0.040460 +vt 0.772367 0.059934 +vt 0.992766 0.813733 +vt 0.824124 0.799906 +vt 0.780733 0.055109 +vt 0.778491 0.106043 +vt 0.824213 0.813733 +vt 0.995819 0.799906 +vt 0.779407 0.030548 +vt 0.783388 0.100165 +vt 0.779472 0.034893 +vt 0.763487 0.100165 +vt 0.774204 0.034893 +vt 0.436911 0.004379 +vt 0.768937 0.035402 +vt 0.461563 0.337588 +vt 0.010325 0.400084 +vt 0.774959 0.059684 +vt 0.793443 0.092013 +vt 0.006235 0.019833 +vt 0.436911 0.999325 +vt 0.767184 0.059684 +vt 0.779011 0.031696 +vt 0.461563 0.587588 +vt 0.010325 0.285645 +vt 0.784740 0.035402 +vt 0.006235 0.988336 +vt 0.821822 0.005010 +vt 0.774204 0.035402 +vt 0.997618 0.005010 +vt 0.779472 0.035402 +vt 0.995819 0.046271 +vt 0.779407 0.031696 +vt 0.769775 0.059684 +vt 0.824124 0.046271 +vt 0.780733 0.092013 +vt 0.772367 0.059684 +vt 0.500000 1.000000 +vt 0.773438 0.040460 +vt 0.500000 0.250000 +vt 0.773438 0.100165 +vt 0.763487 0.070313 +vt 0.783388 0.070313 +vt 0.773438 0.070313 +vt 0.520833 1.000000 +vt 0.778413 0.040460 +vt 0.771719 0.059934 +vt 0.479167 0.250000 +vt 0.768462 0.100165 +vt 0.775521 0.034893 +vt 0.763487 0.085239 +vt 0.783388 0.085239 +vt 0.479167 1.000000 +vt 0.768462 0.040460 +vt 0.770423 0.059934 +vt 0.520833 0.250000 +vt 0.778155 0.034893 +vt 0.778413 0.100165 +vt 0.763487 0.055386 +vt 0.783388 0.055386 +vt 0.773438 0.085239 +vt 0.773438 0.055386 +vt 0.768462 0.070313 +vt 0.778413 0.070313 +vt 0.778413 0.055386 +vt 0.768462 0.055386 +vt 0.768462 0.085239 +vt 0.778413 0.085239 +s 0 +usemtl Book1 +f 20/58/1 5/12/1 7/18/1 18/50/1 +f 24/70/2 18/51/2 7/19/2 12/35/2 +f 12/34/3 7/20/3 5/13/3 15/43/3 33/85/3 28/76/3 37/93/3 +f 17/47/4 2/4/4 4/9/4 19/54/4 +f 9/24/5 1/1/5 3/7/5 13/38/5 +f 22/64/6 20/59/6 1/2/6 9/25/6 +f 17/48/7 21/62/7 10/28/7 2/5/7 +f 21/61/8 22/63/8 9/26/8 10/29/8 +f 2/6/9 10/30/9 14/39/9 4/10/9 +f 10/31/10 9/27/10 13/36/10 14/40/10 +f 8/21/3 11/32/3 36/92/3 27/75/3 32/84/3 16/45/3 6/15/3 +f 45/101/11 33/85/11 15/43/11 35/91/11 +f 19/55/12 23/67/12 11/33/12 8/22/12 +f 34/86/13 30/78/13 25/71/13 +f 14/41/13 13/37/13 24/68/13 23/65/13 +f 4/11/14 14/42/14 23/66/14 19/56/14 +f 31/81/8 26/73/8 35/89/8 +f 6/16/15 16/46/15 21/62/15 17/48/15 +f 15/44/16 5/14/16 20/59/16 22/64/16 +f 6/17/4 17/49/4 19/57/4 8/23/4 +f 13/38/17 3/7/17 18/52/17 24/69/17 +f 1/3/1 20/60/1 18/53/1 3/8/1 +f 44/100/3 38/94/3 26/74/3 31/82/3 +f 43/99/3 39/95/3 29/77/3 40/96/3 +f 42/98/11 37/93/11 28/76/11 41/97/11 +f 39/95/3 42/98/3 41/97/3 29/77/3 +f 25/72/3 30/79/3 42/98/3 39/95/3 +f 30/79/11 12/34/11 37/93/11 42/98/11 +f 36/92/18 43/99/18 40/96/18 27/75/18 +f 11/32/18 34/87/18 43/99/18 36/92/18 +f 34/87/3 25/72/3 39/95/3 43/99/3 +f 32/84/18 44/100/18 31/82/18 16/45/18 +f 27/75/18 40/96/18 44/100/18 32/84/18 +f 40/96/3 29/77/3 38/94/3 44/100/3 +f 16/46/19 31/83/19 35/90/19 15/44/19 22/64/19 21/62/19 +f 23/67/20 24/70/20 12/35/20 30/80/20 34/88/20 11/33/20 +f 38/94/3 45/101/3 35/91/3 26/74/3 +f 29/77/3 41/97/3 45/101/3 38/94/3 +f 41/97/11 28/76/11 33/85/11 45/101/11 diff --git a/resources/models/book2.mtl b/resources/models/book2.mtl new file mode 100644 index 00000000..58a52eda --- /dev/null +++ b/resources/models/book2.mtl @@ -0,0 +1,13 @@ +# Blender 3.1.0 MTL File: 'TheDenObjects.blend' +# www.blender.org + +newmtl Book_2 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd book 2.png diff --git a/resources/models/book2.obj b/resources/models/book2.obj new file mode 100644 index 00000000..222a2e45 --- /dev/null +++ b/resources/models/book2.obj @@ -0,0 +1,194 @@ +# Blender 3.1.0 +# www.blender.org +mtllib book2.mtl +o Cube.004 +v -0.092500 -0.035000 0.115000 +v -0.092500 0.035000 0.115000 +v -0.092500 -0.035000 -0.115000 +v -0.092500 0.035000 -0.115000 +v 0.092500 -0.035000 0.115000 +v 0.092500 0.035000 0.115000 +v 0.092500 -0.035000 -0.115000 +v 0.092500 0.035000 -0.115000 +v -0.092500 -0.035000 0.000000 +v -0.088325 0.000000 0.115000 +v -0.092500 0.035000 0.000000 +v -0.088325 0.000000 -0.115000 +v -0.088325 0.000000 0.000000 +v -0.092500 -0.035000 0.057500 +v -0.089730 0.017500 0.115000 +v -0.092500 0.035000 -0.057500 +v -0.089730 -0.017500 -0.115000 +v -0.092500 -0.035000 -0.057500 +v -0.089730 -0.017500 0.115000 +v -0.092500 0.035000 0.057500 +v -0.089730 0.017500 -0.115000 +v -0.088325 0.000000 -0.057500 +v -0.088325 0.000000 0.057500 +v -0.089730 -0.017500 0.000000 +v -0.089730 0.017500 0.000000 +v -0.089730 0.017500 0.057500 +v -0.089730 -0.017500 0.057500 +v -0.089730 -0.017500 -0.057500 +v -0.089730 0.017500 -0.057500 +v 0.096675 0.000000 -0.115000 +v 0.092500 -0.035000 0.000000 +v 0.092500 0.035000 0.000000 +v 0.096675 0.000000 0.115000 +v 0.096675 0.000000 0.000000 +v 0.095270 -0.017500 -0.115000 +v 0.092500 -0.035000 -0.057500 +v 0.092500 0.035000 0.057500 +v 0.095270 -0.017500 0.115000 +v 0.095270 0.017500 -0.115000 +v 0.092500 -0.035000 0.057500 +v 0.092500 0.035000 -0.057500 +v 0.095270 0.017500 0.115000 +v 0.096675 0.000000 0.057500 +v 0.096675 0.000000 -0.057500 +v 0.095270 -0.017500 0.000000 +v 0.095270 0.017500 0.000000 +v 0.095270 0.017500 -0.057500 +v 0.095270 -0.017500 -0.057500 +v 0.095270 -0.017500 0.057500 +v 0.095270 0.017500 0.057500 +vn -0.0923 -0.0021 -0.0000 +vn -0.0000 -0.0000 -0.1150 +vn 0.0923 0.0021 -0.0000 +vn -0.0000 -0.0000 0.1150 +vn -0.0000 -0.0350 -0.0000 +vn -0.0000 0.0350 -0.0000 +vn -0.0925 0.0011 -0.0000 +vn -0.0925 -0.0011 -0.0000 +vn -0.0923 0.0021 -0.0000 +vn 0.0925 -0.0011 -0.0000 +vn 0.0925 0.0011 -0.0000 +vn 0.0923 -0.0021 -0.0000 +vt 0.843430 0.809865 +vt 0.317891 0.006331 +vt 0.813788 0.996177 +vt 0.979373 0.809865 +vt 0.335685 0.007413 +vt 0.717479 0.996177 +vt 0.846535 0.830695 +vt 0.317891 0.997591 +vt 0.813788 0.008939 +vt 0.717479 0.008939 +vt 0.995512 0.830695 +vt 0.335685 0.988355 +vt 0.843430 0.041022 +vt 0.001520 0.006331 +vt 0.845273 0.823979 +vt 0.991683 0.823979 +vt 0.979373 0.041022 +vt 0.698677 0.007413 +vt 0.846535 0.032501 +vt 0.001520 0.997591 +vt 0.845273 0.017355 +vt 0.995512 0.032501 +vt 0.698677 0.988354 +vt 0.991683 0.017355 +vt 0.317891 0.501961 +vt 0.813788 0.502558 +vt 0.911401 0.809865 +vt 0.765633 0.996177 +vt 0.335685 0.497884 +vt 0.717479 0.502558 +vt 0.921023 0.830695 +vt 0.765633 0.008939 +vt 0.765633 0.502558 +vt 0.317891 0.254146 +vt 0.813788 0.749367 +vt 0.945387 0.809865 +vt 0.741556 0.996177 +vt 0.335685 0.743119 +vt 0.717479 0.255748 +vt 0.883779 0.830695 +vt 0.789710 0.008939 +vt 0.317891 0.749776 +vt 0.813788 0.255748 +vt 0.877416 0.809865 +vt 0.789710 0.996177 +vt 0.335685 0.252649 +vt 0.717479 0.749367 +vt 0.958268 0.830695 +vt 0.741556 0.008939 +vt 0.765633 0.255748 +vt 0.765633 0.749367 +vt 0.789710 0.502558 +vt 0.741556 0.502558 +vt 0.741556 0.749367 +vt 0.789710 0.749367 +vt 0.789710 0.255748 +vt 0.741556 0.255748 +vt 0.921023 0.032501 +vt 0.918478 0.017355 +vt 0.001520 0.501961 +vt 0.845273 0.420667 +vt 0.698677 0.497884 +vt 0.991683 0.420667 +vt 0.911401 0.041022 +vt 0.918478 0.823979 +vt 0.918478 0.420667 +vt 0.883779 0.032501 +vt 0.881876 0.017355 +vt 0.001520 0.749776 +vt 0.845273 0.219011 +vt 0.698677 0.252649 +vt 0.991683 0.622323 +vt 0.877416 0.041022 +vt 0.881876 0.823979 +vt 0.958268 0.032501 +vt 0.955080 0.017355 +vt 0.001520 0.254146 +vt 0.845273 0.622323 +vt 0.698677 0.743119 +vt 0.991683 0.219011 +vt 0.945387 0.041022 +vt 0.955080 0.823979 +vt 0.918478 0.622323 +vt 0.918478 0.219011 +vt 0.881876 0.420667 +vt 0.955080 0.420667 +vt 0.955080 0.219011 +vt 0.881876 0.219011 +vt 0.881876 0.622323 +vt 0.955080 0.622323 +s 0 +usemtl Book_2 +f 29/57/1 16/39/1 4/10/1 21/49/1 +f 3/7/2 17/40/2 12/31/2 21/48/2 4/11/2 8/22/2 39/75/2 30/58/2 35/67/2 7/19/2 +f 50/90/3 37/72/3 6/16/3 42/82/3 +f 5/13/4 38/73/4 33/64/4 42/81/4 6/17/4 2/4/4 15/36/4 10/27/4 19/44/4 1/1/4 +f 3/8/5 7/20/5 36/69/5 31/60/5 40/77/5 5/14/5 1/2/5 14/34/5 9/25/5 18/42/5 +f 8/23/6 4/12/6 16/38/6 11/29/6 20/46/6 2/5/6 6/18/6 37/71/6 32/62/6 41/79/6 +f 28/56/7 22/50/7 12/32/7 17/41/7 +f 27/55/7 23/51/7 13/33/7 24/52/7 +f 26/54/1 20/47/1 11/30/1 25/53/1 +f 23/51/8 26/54/8 25/53/8 13/33/8 +f 10/28/8 15/37/8 26/54/8 23/51/8 +f 15/37/1 2/6/1 20/47/1 26/54/1 +f 14/35/9 27/55/9 24/52/9 9/26/9 +f 1/3/9 19/45/9 27/55/9 14/35/9 +f 19/45/7 10/28/7 23/51/7 27/55/7 +f 18/43/9 28/56/9 17/41/9 3/9/9 +f 9/26/9 24/52/9 28/56/9 18/43/9 +f 24/52/7 13/33/7 22/50/7 28/56/7 +f 22/50/8 29/57/8 21/49/8 12/32/8 +f 13/33/8 25/53/8 29/57/8 22/50/8 +f 25/53/1 11/30/1 16/39/1 29/57/1 +f 49/89/10 43/83/10 33/65/10 38/74/10 +f 48/88/10 44/84/10 34/66/10 45/85/10 +f 47/87/3 41/80/3 32/63/3 46/86/3 +f 44/84/11 47/87/11 46/86/11 34/66/11 +f 30/59/11 39/76/11 47/87/11 44/84/11 +f 39/76/3 8/24/3 41/80/3 47/87/3 +f 36/70/12 48/88/12 45/85/12 31/61/12 +f 7/21/12 35/68/12 48/88/12 36/70/12 +f 35/68/10 30/59/10 44/84/10 48/88/10 +f 40/78/12 49/89/12 38/74/12 5/15/12 +f 31/61/12 45/85/12 49/89/12 40/78/12 +f 45/85/10 34/66/10 43/83/10 49/89/10 +f 43/83/11 50/90/11 42/82/11 33/65/11 +f 34/66/11 46/86/11 50/90/11 43/83/11 +f 46/86/3 32/63/3 37/72/3 50/90/3 diff --git a/resources/models/book3.mtl b/resources/models/book3.mtl new file mode 100644 index 00000000..a23ec377 --- /dev/null +++ b/resources/models/book3.mtl @@ -0,0 +1,13 @@ +# Blender 3.1.0 MTL File: 'TheDenObjects.blend' +# www.blender.org + +newmtl book_3 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd book 3.png diff --git a/resources/models/book3.obj b/resources/models/book3.obj new file mode 100644 index 00000000..164ed9a4 --- /dev/null +++ b/resources/models/book3.obj @@ -0,0 +1,50 @@ +# Blender 3.1.0 +# www.blender.org +mtllib book3.mtl +o Cube.005 +v -0.090000 -0.010000 0.130000 +v -0.090000 0.010000 0.130000 +v -0.090000 -0.010000 -0.130000 +v -0.090000 0.010000 -0.130000 +v 0.090000 -0.010000 0.130000 +v 0.090000 0.010000 0.130000 +v 0.090000 -0.010000 -0.130000 +v 0.090000 0.010000 -0.130000 +vn -0.0900 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1300 +vn 0.0900 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.1300 +vn -0.0000 -0.0100 -0.0000 +vn -0.0000 0.0100 -0.0000 +vt 0.858609 0.818595 +vt 0.994261 0.775996 +vt 0.339334 0.973622 +vt 0.858609 0.012150 +vt 0.994261 0.029063 +vt 0.318014 0.985568 +vt 0.989738 0.818595 +vt 0.849701 0.004883 +vt 0.339334 0.010753 +vt 0.989738 0.012150 +vt 0.998646 0.004883 +vt 0.318014 0.008511 +vt 0.739936 0.002576 +vt 0.858286 0.775996 +vt 0.620667 0.973622 +vt 0.702789 0.002576 +vt 0.858286 0.029063 +vt 0.010259 0.985568 +vt 0.849701 0.794333 +vt 0.739936 0.992045 +vt 0.620667 0.010753 +vt 0.998646 0.794333 +vt 0.696836 0.992045 +vt 0.010259 0.008511 +s 0 +usemtl book_3 +f 1/1/1 2/4/1 4/10/1 3/7/1 +f 3/8/2 4/11/2 8/22/2 7/19/2 +f 7/20/3 8/23/3 6/16/3 5/13/3 +f 5/14/4 6/17/4 2/5/4 1/2/4 +f 3/9/5 7/21/5 5/15/5 1/3/5 +f 8/24/6 4/12/6 2/6/6 6/18/6 diff --git a/resources/models/book4.mtl b/resources/models/book4.mtl new file mode 100644 index 00000000..b76d278c --- /dev/null +++ b/resources/models/book4.mtl @@ -0,0 +1,13 @@ +# Blender 3.1.0 MTL File: 'TheDenObjects.blend' +# www.blender.org + +newmtl Book1 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd book 1.png diff --git a/resources/models/book4.obj b/resources/models/book4.obj new file mode 100644 index 00000000..b3f9cb54 --- /dev/null +++ b/resources/models/book4.obj @@ -0,0 +1,257 @@ +# Blender 3.1.0 +# www.blender.org +mtllib book4.mtl +o Cube.008 +v 0.089266 0.017500 -0.135000 +v 0.089266 -0.017500 -0.135000 +v 0.089266 0.017500 0.135000 +v 0.089266 -0.017500 0.135000 +v -0.089266 0.017500 -0.135000 +v -0.089266 -0.017500 -0.135000 +v -0.089266 0.017500 0.135000 +v -0.089266 -0.017500 0.135000 +v 0.082764 0.014568 -0.128080 +v 0.082764 -0.014568 -0.128080 +v -0.089266 -0.014568 0.135000 +v -0.089266 0.014568 0.135000 +v 0.082764 0.014568 0.128080 +v 0.082764 -0.014568 0.128080 +v -0.089266 0.014568 -0.135000 +v -0.089266 -0.014568 -0.135000 +v -0.083518 -0.017500 -0.135000 +v -0.083518 0.017500 0.135000 +v -0.083518 -0.017500 0.135000 +v -0.083518 0.017500 -0.135000 +v -0.083518 -0.014568 -0.128080 +v -0.083518 0.014568 -0.128080 +v -0.083518 -0.014568 0.128080 +v -0.083518 0.014568 0.128080 +v -0.090734 0.000000 0.135000 +v -0.090734 0.000000 -0.135000 +v -0.089266 -0.014568 0.000000 +v -0.089266 0.014568 0.000000 +v -0.090734 0.000000 0.000000 +v -0.090725 0.007284 0.135000 +v -0.090725 -0.007284 -0.135000 +v -0.089266 -0.014568 -0.067500 +v -0.089266 0.014568 -0.067500 +v -0.090725 -0.007284 0.135000 +v -0.090725 0.007284 -0.135000 +v -0.089266 -0.014568 0.067500 +v -0.089266 0.014568 0.067500 +v -0.090734 0.000000 -0.067500 +v -0.090734 0.000000 0.067500 +v -0.090725 -0.007284 0.000000 +v -0.090725 0.007284 0.000000 +v -0.090725 0.007284 0.067500 +v -0.090725 -0.007284 0.067500 +v -0.090725 -0.007284 -0.067500 +v -0.090725 0.007284 -0.067500 +v 0.089266 0.017500 0.000000 +v 0.002874 0.017500 -0.135000 +v 0.002874 0.017500 0.135000 +v -0.083518 0.017500 0.000000 +v 0.002874 0.017500 0.000000 +v 0.002874 -0.017500 0.135000 +v 0.089266 -0.017500 0.000000 +v 0.002874 -0.017500 -0.135000 +v -0.083518 -0.017500 0.000000 +v 0.002874 -0.017500 0.000000 +vn -0.0000 0.0175 -0.0000 +vn 0.0327 -0.0025 0.1242 +vn -0.0893 -0.0000 -0.0000 +vn -0.0000 -0.0175 -0.0000 +vn 0.0819 -0.0070 -0.0000 +vn -0.0000 -0.0051 -0.1291 +vn -0.0000 0.0051 -0.1291 +vn -0.0000 -0.0000 -0.1350 +vn 0.0819 0.0070 -0.0000 +vn 0.0893 -0.0000 -0.0000 +vn -0.0892 0.0007 -0.0000 +vn 0.0327 0.0025 0.1242 +vn -0.0000 -0.0000 0.1350 +vn -0.0000 0.0051 0.1291 +vn 0.0327 0.0025 -0.1242 +vn 0.0327 -0.0025 -0.1242 +vn -0.0000 -0.0051 0.1291 +vn -0.0892 -0.0007 -0.0000 +vn 0.0496 -0.0000 -0.1122 +vn 0.0496 -0.0000 0.1122 +vt 0.501292 0.046089 +vt 0.501133 0.046703 +vt 0.481199 0.963761 +vt 0.500846 0.046703 +vt 0.500837 0.047163 +vt 0.493429 0.927709 +vt 0.501292 0.046783 +vt 0.381537 0.957359 +vt 0.398689 0.949573 +vt 0.500837 0.047711 +vt 0.501029 0.046336 +vt 0.487101 0.050981 +vt 0.473275 0.024841 +vt 0.501133 0.046415 +vt 0.480551 0.024841 +vt 0.500846 0.046415 +vt 0.495103 0.051926 +vt 0.487101 0.053064 +vt 0.500955 0.046871 +vt 0.473275 0.032117 +vt 0.480551 0.032117 +vt 0.500814 0.046871 +vt 0.495103 0.056478 +vt 0.501060 0.046089 +vt 0.501038 0.046703 +vt 0.997618 0.821941 +vt 0.992766 0.003169 +vt 0.500942 0.046703 +vt 0.821822 0.821941 +vt 0.501020 0.047163 +vt 0.824213 0.003169 +vt 0.478126 0.032117 +vt 0.500861 0.046871 +vt 0.475700 0.032117 +vt 0.500908 0.046871 +vt 0.992766 0.813733 +vt 0.824124 0.799906 +vt 0.501060 0.046783 +vt 0.501020 0.047711 +vt 0.824213 0.813733 +vt 0.995819 0.799906 +vt 0.501036 0.046336 +vt 0.475700 0.024841 +vt 0.501038 0.046415 +vt 0.478126 0.024841 +vt 0.500942 0.046415 +vt 0.500846 0.046425 +vt 0.495250 0.051926 +vt 0.381913 0.905562 +vt 0.487034 0.053064 +vt 0.500955 0.046867 +vt 0.501292 0.047455 +vt 0.509607 0.922908 +vt 0.500814 0.046867 +vt 0.501029 0.046357 +vt 0.495250 0.056478 +vt 0.488957 0.969259 +vt 0.487034 0.050981 +vt 0.501133 0.046425 +vt 0.398872 0.917006 +vt 0.821822 0.005010 +vt 0.500942 0.046425 +vt 0.997618 0.005010 +vt 0.501038 0.046425 +vt 0.995819 0.046271 +vt 0.501036 0.046357 +vt 0.500861 0.046867 +vt 0.824124 0.046271 +vt 0.501060 0.047455 +vt 0.500908 0.046867 +vt 0.500000 1.000000 +vt 0.476913 0.032117 +vt 0.500000 0.250000 +vt 0.476913 0.024841 +vt 0.478126 0.028479 +vt 0.475700 0.028479 +vt 0.476913 0.028479 +vt 0.520833 1.000000 +vt 0.476307 0.032117 +vt 0.500896 0.046871 +vt 0.479167 0.250000 +vt 0.477520 0.024841 +vt 0.500966 0.046415 +vt 0.478126 0.026660 +vt 0.475700 0.026660 +vt 0.479167 1.000000 +vt 0.477520 0.032117 +vt 0.500873 0.046871 +vt 0.520833 0.250000 +vt 0.501014 0.046415 +vt 0.476307 0.024841 +vt 0.478126 0.030298 +vt 0.475700 0.030298 +vt 0.476913 0.026660 +vt 0.476913 0.030298 +vt 0.477520 0.028479 +vt 0.476307 0.028479 +vt 0.476307 0.030298 +vt 0.477520 0.030298 +vt 0.477520 0.026660 +vt 0.476307 0.026660 +vt 0.501292 0.046436 +vt 0.381537 0.937183 +vt 0.481199 0.983937 +vt 0.501133 0.046564 +vt 0.489866 0.963761 +vt 0.390204 0.917006 +vt 0.501292 0.047119 +vt 0.500939 0.922908 +vt 0.390204 0.957359 +vt 0.487034 0.052022 +vt 0.509607 0.902732 +vt 0.398872 0.937183 +vt 0.500939 0.902732 +vt 0.489866 0.983937 +vt 0.390204 0.937183 +vt 0.390301 0.949573 +vt 0.501029 0.046347 +vt 0.497345 0.969259 +vt 0.398689 0.927567 +vt 0.500837 0.047437 +vt 0.493429 0.949714 +vt 0.500846 0.046564 +vt 0.390301 0.905562 +vt 0.485041 0.927709 +vt 0.495250 0.054202 +vt 0.488957 0.947253 +vt 0.381913 0.927567 +vt 0.497345 0.947253 +vt 0.390301 0.927567 +vt 0.485041 0.949714 +s 0 +usemtl Book1 +f 20/58/1 5/12/1 7/18/1 18/50/1 49/111/1 +f 24/70/2 18/51/2 7/19/2 12/35/2 +f 12/34/3 7/20/3 5/13/3 15/43/3 33/85/3 28/76/3 37/93/3 +f 55/130/4 52/120/4 4/9/4 51/117/4 +f 9/24/5 1/1/5 46/102/5 3/7/5 13/38/5 +f 22/64/6 20/59/6 47/105/6 1/2/6 9/25/6 +f 17/47/7 21/62/7 10/28/7 2/4/7 53/123/7 +f 21/61/8 22/63/8 9/26/8 10/29/8 +f 2/5/9 10/30/9 14/39/9 4/10/9 52/121/9 +f 10/31/10 9/27/10 13/36/10 14/40/10 +f 8/21/3 11/32/3 36/92/3 27/75/3 32/84/3 16/45/3 6/15/3 +f 45/101/11 33/85/11 15/43/11 35/91/11 +f 19/54/12 23/67/12 11/33/12 8/22/12 +f 34/86/13 30/78/13 25/71/13 +f 14/41/13 13/37/13 24/68/13 23/65/13 +f 4/11/14 14/42/14 23/66/14 19/55/14 51/118/14 +f 31/81/8 26/73/8 35/89/8 +f 6/16/15 16/46/15 21/62/15 17/47/15 +f 15/44/16 5/14/16 20/59/16 22/64/16 +f 6/17/4 17/48/4 54/126/4 19/56/4 8/23/4 +f 13/38/17 3/7/17 48/108/17 18/52/17 24/69/17 +f 50/114/1 49/112/1 18/53/1 48/109/1 +f 44/100/3 38/94/3 26/74/3 31/82/3 +f 43/99/3 39/95/3 29/77/3 40/96/3 +f 42/98/11 37/93/11 28/76/11 41/97/11 +f 39/95/3 42/98/3 41/97/3 29/77/3 +f 25/72/3 30/79/3 42/98/3 39/95/3 +f 30/79/11 12/34/11 37/93/11 42/98/11 +f 36/92/18 43/99/18 40/96/18 27/75/18 +f 11/32/18 34/87/18 43/99/18 36/92/18 +f 34/87/3 25/72/3 39/95/3 43/99/3 +f 32/84/18 44/100/18 31/82/18 16/45/18 +f 27/75/18 40/96/18 44/100/18 32/84/18 +f 40/96/3 29/77/3 38/94/3 44/100/3 +f 16/46/19 31/83/19 35/90/19 15/44/19 22/64/19 21/62/19 +f 23/67/20 24/70/20 12/35/20 30/80/20 34/88/20 11/33/20 +f 38/94/3 45/101/3 35/91/3 26/74/3 +f 29/77/3 41/97/3 45/101/3 38/94/3 +f 41/97/11 28/76/11 33/85/11 45/101/11 +f 46/103/1 50/116/1 48/110/1 3/8/1 +f 1/3/1 47/106/1 50/115/1 46/104/1 +f 47/107/1 20/60/1 49/113/1 50/116/1 +f 54/127/4 55/129/4 51/119/4 19/57/4 +f 17/49/4 53/124/4 55/130/4 54/128/4 +f 53/125/4 2/6/4 52/122/4 55/131/4 diff --git a/resources/models/book5.mtl b/resources/models/book5.mtl new file mode 100644 index 00000000..b76d278c --- /dev/null +++ b/resources/models/book5.mtl @@ -0,0 +1,13 @@ +# Blender 3.1.0 MTL File: 'TheDenObjects.blend' +# www.blender.org + +newmtl Book1 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd book 1.png diff --git a/resources/models/book5.obj b/resources/models/book5.obj new file mode 100644 index 00000000..6e8ebcf3 --- /dev/null +++ b/resources/models/book5.obj @@ -0,0 +1,257 @@ +# Blender 3.1.0 +# www.blender.org +mtllib book5.mtl +o Cube.007 +v 0.089266 0.017500 -0.135000 +v 0.089266 -0.017500 -0.135000 +v 0.089266 0.017500 0.135000 +v 0.089266 -0.017500 0.135000 +v -0.089266 0.017500 -0.135000 +v -0.089266 -0.017500 -0.135000 +v -0.089266 0.017500 0.135000 +v -0.089266 -0.017500 0.135000 +v 0.082764 0.014568 -0.128080 +v 0.082764 -0.014568 -0.128080 +v -0.089266 -0.014568 0.135000 +v -0.089266 0.014568 0.135000 +v 0.082764 0.014568 0.128080 +v 0.082764 -0.014568 0.128080 +v -0.089266 0.014568 -0.135000 +v -0.089266 -0.014568 -0.135000 +v -0.083518 -0.017500 -0.135000 +v -0.083518 0.017500 0.135000 +v -0.083518 -0.017500 0.135000 +v -0.083518 0.017500 -0.135000 +v -0.083518 -0.014568 -0.128080 +v -0.083518 0.014568 -0.128080 +v -0.083518 -0.014568 0.128080 +v -0.083518 0.014568 0.128080 +v -0.090734 0.000000 0.135000 +v -0.090734 0.000000 -0.135000 +v -0.089266 -0.014568 0.000000 +v -0.089266 0.014568 0.000000 +v -0.090734 0.000000 0.000000 +v -0.090725 0.007284 0.135000 +v -0.090725 -0.007284 -0.135000 +v -0.089266 -0.014568 -0.067500 +v -0.089266 0.014568 -0.067500 +v -0.090725 -0.007284 0.135000 +v -0.090725 0.007284 -0.135000 +v -0.089266 -0.014568 0.067500 +v -0.089266 0.014568 0.067500 +v -0.090734 0.000000 -0.067500 +v -0.090734 0.000000 0.067500 +v -0.090725 -0.007284 0.000000 +v -0.090725 0.007284 0.000000 +v -0.090725 0.007284 0.067500 +v -0.090725 -0.007284 0.067500 +v -0.090725 -0.007284 -0.067500 +v -0.090725 0.007284 -0.067500 +v 0.089266 0.017500 0.000000 +v 0.002874 0.017500 -0.135000 +v 0.002874 0.017500 0.135000 +v -0.083518 0.017500 0.000000 +v 0.002874 0.017500 0.000000 +v 0.002874 -0.017500 0.135000 +v 0.089266 -0.017500 0.000000 +v 0.002874 -0.017500 -0.135000 +v -0.083518 -0.017500 0.000000 +v 0.002874 -0.017500 0.000000 +vn -0.0000 0.0175 -0.0000 +vn 0.0327 -0.0025 0.1242 +vn -0.0893 -0.0000 -0.0000 +vn -0.0000 -0.0175 -0.0000 +vn 0.0819 -0.0070 -0.0000 +vn -0.0000 -0.0051 -0.1291 +vn -0.0000 0.0051 -0.1291 +vn -0.0000 -0.0000 -0.1350 +vn 0.0819 0.0070 -0.0000 +vn 0.0893 -0.0000 -0.0000 +vn -0.0892 0.0007 -0.0000 +vn 0.0327 0.0025 0.1242 +vn -0.0000 -0.0000 0.1350 +vn -0.0000 0.0051 0.1291 +vn 0.0327 0.0025 -0.1242 +vn 0.0327 -0.0025 -0.1242 +vn -0.0000 -0.0051 0.1291 +vn -0.0892 -0.0007 -0.0000 +vn 0.0496 -0.0000 -0.1122 +vn 0.0496 -0.0000 0.1122 +vt 0.501292 0.046089 +vt 0.501133 0.046703 +vt 0.481199 0.963761 +vt 0.500846 0.046703 +vt 0.500837 0.047163 +vt 0.493429 0.927709 +vt 0.501292 0.046783 +vt 0.888458 0.959820 +vt 0.903149 0.949573 +vt 0.500837 0.047711 +vt 0.501029 0.046336 +vt 0.487101 0.050981 +vt 0.473275 0.024841 +vt 0.501133 0.046415 +vt 0.480551 0.024841 +vt 0.500846 0.046415 +vt 0.495103 0.051926 +vt 0.487101 0.053064 +vt 0.500955 0.046871 +vt 0.473275 0.032117 +vt 0.480551 0.032117 +vt 0.500814 0.046871 +vt 0.495103 0.056478 +vt 0.501060 0.046089 +vt 0.501038 0.046703 +vt 0.997618 0.821941 +vt 0.992766 0.003169 +vt 0.500942 0.046703 +vt 0.821822 0.821941 +vt 0.501020 0.047163 +vt 0.824213 0.003169 +vt 0.478126 0.032117 +vt 0.500861 0.046871 +vt 0.475700 0.032117 +vt 0.500908 0.046871 +vt 0.992766 0.813733 +vt 0.824124 0.799906 +vt 0.501060 0.046783 +vt 0.501020 0.047711 +vt 0.824213 0.813733 +vt 0.995819 0.799906 +vt 0.501036 0.046336 +vt 0.475700 0.024841 +vt 0.501038 0.046415 +vt 0.478126 0.024841 +vt 0.500942 0.046415 +vt 0.500846 0.046425 +vt 0.495250 0.051926 +vt 0.886373 0.905562 +vt 0.487034 0.053064 +vt 0.500955 0.046867 +vt 0.501292 0.047455 +vt 0.509607 0.922908 +vt 0.500814 0.046867 +vt 0.501029 0.046357 +vt 0.495250 0.056478 +vt 0.488957 0.969259 +vt 0.487034 0.050981 +vt 0.501133 0.046425 +vt 0.905793 0.919467 +vt 0.821822 0.005010 +vt 0.500942 0.046425 +vt 0.997618 0.005010 +vt 0.501038 0.046425 +vt 0.995819 0.046271 +vt 0.501036 0.046357 +vt 0.500861 0.046867 +vt 0.824124 0.046271 +vt 0.501060 0.047455 +vt 0.500908 0.046867 +vt 0.500000 1.000000 +vt 0.476913 0.032117 +vt 0.500000 0.250000 +vt 0.476913 0.024841 +vt 0.478126 0.028479 +vt 0.475700 0.028479 +vt 0.476913 0.028479 +vt 0.520833 1.000000 +vt 0.476307 0.032117 +vt 0.500896 0.046871 +vt 0.479167 0.250000 +vt 0.477520 0.024841 +vt 0.500966 0.046415 +vt 0.478126 0.026660 +vt 0.475700 0.026660 +vt 0.479167 1.000000 +vt 0.477520 0.032117 +vt 0.500873 0.046871 +vt 0.520833 0.250000 +vt 0.501014 0.046415 +vt 0.476307 0.024841 +vt 0.478126 0.030298 +vt 0.475700 0.030298 +vt 0.476913 0.026660 +vt 0.476913 0.030298 +vt 0.477520 0.028479 +vt 0.476307 0.028479 +vt 0.476307 0.030298 +vt 0.477520 0.030298 +vt 0.477520 0.026660 +vt 0.476307 0.026660 +vt 0.501292 0.046436 +vt 0.888458 0.939643 +vt 0.481199 0.983937 +vt 0.501133 0.046564 +vt 0.489866 0.963761 +vt 0.897125 0.919467 +vt 0.501292 0.047119 +vt 0.500939 0.922908 +vt 0.897125 0.959820 +vt 0.487034 0.052022 +vt 0.509607 0.902732 +vt 0.905793 0.939643 +vt 0.500939 0.902732 +vt 0.489866 0.983937 +vt 0.897125 0.939643 +vt 0.894761 0.949573 +vt 0.501029 0.046347 +vt 0.497345 0.969259 +vt 0.903149 0.927567 +vt 0.500837 0.047437 +vt 0.493429 0.949714 +vt 0.500846 0.046564 +vt 0.894761 0.905562 +vt 0.485041 0.927709 +vt 0.495250 0.054202 +vt 0.488957 0.947253 +vt 0.886373 0.927567 +vt 0.497345 0.947253 +vt 0.894761 0.927567 +vt 0.485041 0.949714 +s 0 +usemtl Book1 +f 20/58/1 5/12/1 7/18/1 18/50/1 49/111/1 +f 24/70/2 18/51/2 7/19/2 12/35/2 +f 12/34/3 7/20/3 5/13/3 15/43/3 33/85/3 28/76/3 37/93/3 +f 55/130/4 52/120/4 4/9/4 51/117/4 +f 9/24/5 1/1/5 46/102/5 3/7/5 13/38/5 +f 22/64/6 20/59/6 47/105/6 1/2/6 9/25/6 +f 17/47/7 21/62/7 10/28/7 2/4/7 53/123/7 +f 21/61/8 22/63/8 9/26/8 10/29/8 +f 2/5/9 10/30/9 14/39/9 4/10/9 52/121/9 +f 10/31/10 9/27/10 13/36/10 14/40/10 +f 8/21/3 11/32/3 36/92/3 27/75/3 32/84/3 16/45/3 6/15/3 +f 45/101/11 33/85/11 15/43/11 35/91/11 +f 19/54/12 23/67/12 11/33/12 8/22/12 +f 34/86/13 30/78/13 25/71/13 +f 14/41/13 13/37/13 24/68/13 23/65/13 +f 4/11/14 14/42/14 23/66/14 19/55/14 51/118/14 +f 31/81/8 26/73/8 35/89/8 +f 6/16/15 16/46/15 21/62/15 17/47/15 +f 15/44/16 5/14/16 20/59/16 22/64/16 +f 6/17/4 17/48/4 54/126/4 19/56/4 8/23/4 +f 13/38/17 3/7/17 48/108/17 18/52/17 24/69/17 +f 50/114/1 49/112/1 18/53/1 48/109/1 +f 44/100/3 38/94/3 26/74/3 31/82/3 +f 43/99/3 39/95/3 29/77/3 40/96/3 +f 42/98/11 37/93/11 28/76/11 41/97/11 +f 39/95/3 42/98/3 41/97/3 29/77/3 +f 25/72/3 30/79/3 42/98/3 39/95/3 +f 30/79/11 12/34/11 37/93/11 42/98/11 +f 36/92/18 43/99/18 40/96/18 27/75/18 +f 11/32/18 34/87/18 43/99/18 36/92/18 +f 34/87/3 25/72/3 39/95/3 43/99/3 +f 32/84/18 44/100/18 31/82/18 16/45/18 +f 27/75/18 40/96/18 44/100/18 32/84/18 +f 40/96/3 29/77/3 38/94/3 44/100/3 +f 16/46/19 31/83/19 35/90/19 15/44/19 22/64/19 21/62/19 +f 23/67/20 24/70/20 12/35/20 30/80/20 34/88/20 11/33/20 +f 38/94/3 45/101/3 35/91/3 26/74/3 +f 29/77/3 41/97/3 45/101/3 38/94/3 +f 41/97/11 28/76/11 33/85/11 45/101/11 +f 46/103/1 50/116/1 48/110/1 3/8/1 +f 1/3/1 47/106/1 50/115/1 46/104/1 +f 47/107/1 20/60/1 49/113/1 50/116/1 +f 54/127/4 55/129/4 51/119/4 19/57/4 +f 17/49/4 53/124/4 55/130/4 54/128/4 +f 53/125/4 2/6/4 52/122/4 55/131/4 diff --git a/resources/models/calculator.mtl b/resources/models/calculator.mtl new file mode 100644 index 00000000..5644acc8 --- /dev/null +++ b/resources/models/calculator.mtl @@ -0,0 +1,13 @@ +# Blender 3.1.0 MTL File: 'TheDenObjects.blend' +# www.blender.org + +newmtl calculator +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd Calculator.png diff --git a/resources/models/calculator.obj b/resources/models/calculator.obj new file mode 100644 index 00000000..7e054ff1 --- /dev/null +++ b/resources/models/calculator.obj @@ -0,0 +1,3579 @@ +# Blender 3.1.0 +# www.blender.org +mtllib calculator.mtl +o Cube.012 +v 0.014505 0.006649 0.062045 +v 0.000000 0.006698 0.062053 +v 0.000000 0.006671 0.074156 +v 0.013954 0.006623 0.074089 +v -0.014505 0.006649 0.062045 +v -0.013954 0.006623 0.074089 +v 0.000000 0.006599 0.081258 +v 0.012725 0.006556 0.081037 +v -0.012725 0.006556 0.081037 +v 0.014583 0.006652 0.017539 +v 0.026667 0.006503 0.017539 +v 0.025156 0.008552 0.015695 +v 0.016094 0.008664 0.015695 +v -0.026595 0.006502 0.052699 +v -0.026524 0.006500 0.062036 +v -0.025028 0.008549 0.060870 +v -0.025082 0.008550 0.053867 +v 0.014583 0.006652 0.002790 +v 0.016094 0.008664 0.004634 +v -0.014583 0.006652 -0.026318 +v -0.026667 0.006503 -0.026318 +v -0.025156 0.008552 -0.024523 +v -0.016094 0.008664 -0.024523 +v -0.025525 0.006480 0.074021 +v -0.023060 0.006431 0.080785 +v -0.020000 0.006370 0.083761 +v -0.011866 0.006428 0.084671 +v 0.000000 0.006458 0.085128 +v 0.011866 0.006428 0.084671 +v 0.023060 0.006431 0.080785 +v 0.020000 0.006370 0.083761 +v 0.025525 0.006480 0.074021 +v 0.026524 0.006500 0.062036 +v 0.014505 0.004840 0.088124 +v 0.013954 0.005710 0.087729 +v 0.000000 0.005715 0.088479 +v 0.000000 0.004841 0.088900 +v 0.012725 0.006191 0.086675 +v 0.000000 0.006205 0.087338 +v -0.013954 0.005710 0.087729 +v -0.014505 0.004840 0.088124 +v -0.012725 0.006191 0.086675 +v 0.026667 0.003451 0.085840 +v 0.026524 0.004840 0.085796 +v 0.014583 0.003451 0.088180 +v 0.025525 0.005706 0.085484 +v 0.023060 0.006175 0.084715 +v -0.023060 0.006175 0.084715 +v -0.025525 0.005706 0.085484 +v -0.026524 0.004840 0.085796 +v -0.014583 0.003451 0.088180 +v -0.026667 0.003451 0.085840 +v 0.000000 0.003451 0.088960 +v -0.039584 0.004842 -0.079099 +v -0.038133 0.005723 -0.079099 +v -0.036728 0.005719 -0.086770 +v -0.038133 0.004841 -0.086770 +v -0.034193 0.001720 -0.079099 +v -0.032921 0.006218 -0.086770 +v -0.032921 0.005711 -0.089596 +v -0.034193 0.004840 -0.089596 +v -0.029522 0.006193 -0.089596 +v -0.040000 0.003451 -0.064160 +v -0.039792 0.004842 -0.064160 +v -0.039792 0.003451 -0.079099 +v -0.038333 0.005723 -0.064160 +v -0.034375 0.001722 -0.064160 +v -0.026667 0.001994 -0.064160 +v -0.026524 0.001991 -0.079099 +v -0.025525 0.006480 -0.086770 +v -0.023060 0.006431 -0.089596 +v -0.020000 0.006370 -0.090000 +v -0.023060 0.006175 -0.090000 +v -0.025525 0.005706 -0.090000 +v -0.026524 0.004840 -0.090000 +v -0.034375 0.003451 -0.089596 +v -0.026667 0.003451 -0.090000 +v -0.038333 0.003451 -0.086770 +v -0.014505 -0.005870 0.062045 +v 0.000000 -0.006242 0.062053 +v 0.000000 -0.006040 0.074156 +v -0.013954 -0.005681 0.074089 +v 0.014505 -0.005870 0.062045 +v 0.013954 -0.005681 0.074089 +v 0.000000 -0.005494 0.081258 +v -0.012725 -0.005177 0.081037 +v 0.012725 -0.005177 0.081037 +v -0.026595 -0.004767 0.052699 +v -0.014544 -0.005884 0.052703 +v -0.026524 -0.004756 0.062036 +v 0.000000 -0.006256 0.052707 +v 0.014544 -0.005884 0.052703 +v 0.026595 -0.004767 0.052699 +v 0.026524 -0.004756 0.062036 +v 0.025525 -0.004607 0.074021 +v 0.023060 -0.004239 0.080785 +v 0.020000 -0.003782 0.083761 +v 0.011866 -0.004218 0.084671 +v 0.000000 -0.004437 0.085128 +v -0.011866 -0.004218 0.084671 +v -0.023060 -0.004239 0.080785 +v -0.020000 -0.003782 0.083761 +v -0.025525 -0.004607 0.074021 +v 0.039584 0.004842 0.062069 +v 0.038133 0.005723 0.062062 +v 0.036728 0.005719 0.074224 +v 0.038133 0.004841 0.074283 +v 0.034193 0.006230 0.062046 +v 0.032921 0.006218 0.074097 +v 0.032921 0.005711 0.081462 +v 0.034193 0.004840 0.081641 +v 0.029522 0.006193 0.081063 +v 0.039896 0.003451 0.052716 +v 0.039688 0.004842 0.052715 +v 0.039792 0.003451 0.062070 +v 0.038233 0.005723 0.052712 +v 0.034284 0.006231 0.052704 +v 0.034375 0.006231 0.043361 +v 0.034375 0.006231 0.030450 +v 0.033411 0.008295 0.032064 +v 0.033411 0.008295 0.041747 +v 0.034375 0.003451 0.081667 +v 0.038333 0.003451 0.074291 +v -0.014505 0.004840 -0.090000 +v -0.013954 0.005710 -0.090000 +v 0.000000 0.005715 -0.090000 +v 0.000000 0.004841 -0.090000 +v -0.012725 0.006191 -0.090000 +v 0.000000 0.006205 -0.090000 +v 0.013954 0.005710 -0.090000 +v 0.014505 0.004840 -0.090000 +v 0.012725 0.006191 -0.090000 +v -0.014583 0.003451 -0.090000 +v -0.011866 0.006428 -0.090000 +v 0.000000 0.006458 -0.090000 +v 0.011866 0.006428 -0.090000 +v 0.020000 0.006370 -0.090000 +v 0.023060 0.006175 -0.090000 +v 0.025525 0.005706 -0.090000 +v 0.026524 0.004840 -0.090000 +v 0.014583 0.003451 -0.090000 +v 0.026667 0.003451 -0.090000 +v 0.000000 0.003451 -0.090000 +v 0.034193 0.004840 -0.089596 +v 0.032921 0.005711 -0.089596 +v 0.036728 0.005719 -0.086770 +v 0.038133 0.004841 -0.086770 +v 0.029522 0.006193 -0.089596 +v 0.032921 0.006218 -0.086770 +v 0.038133 0.005723 -0.079099 +v 0.039584 0.004842 -0.079099 +v 0.034193 0.001720 -0.079099 +v 0.034375 0.003451 -0.089596 +v 0.023060 0.006431 -0.089596 +v 0.025525 0.006480 -0.086770 +v 0.026524 0.001991 -0.079099 +v 0.026667 0.001994 -0.064160 +v 0.034375 0.001722 -0.064160 +v 0.038333 0.005723 -0.064160 +v 0.039792 0.004842 -0.064160 +v 0.039792 0.003451 -0.079099 +v 0.040000 0.003451 -0.064160 +v 0.038333 0.003451 -0.086770 +v -0.012725 -0.005177 -0.089596 +v 0.000000 -0.005494 -0.089596 +v 0.000000 -0.006040 -0.086770 +v -0.013954 -0.005681 -0.086770 +v 0.012725 -0.005177 -0.089596 +v 0.013954 -0.005681 -0.086770 +v 0.000000 -0.006242 -0.079099 +v -0.014505 -0.005870 -0.079099 +v 0.014505 -0.005870 -0.079099 +v -0.020000 -0.003782 -0.090000 +v -0.011866 -0.004218 -0.090000 +v -0.023060 -0.004239 -0.089596 +v 0.000000 -0.004437 -0.090000 +v 0.011866 -0.004218 -0.090000 +v 0.020000 -0.003782 -0.090000 +v 0.023060 -0.004239 -0.089596 +v 0.025525 -0.004607 -0.086770 +v 0.026524 -0.004756 -0.079099 +v 0.026667 -0.004778 -0.064160 +v 0.014583 -0.005897 -0.064160 +v 0.000000 -0.006271 -0.064160 +v -0.014583 -0.005897 -0.064160 +v -0.026524 -0.004756 -0.079099 +v -0.026667 -0.004778 -0.064160 +v -0.025525 -0.004607 -0.086770 +v -0.039792 0.004842 0.002790 +v -0.038333 0.005723 0.002790 +v -0.038333 0.005723 -0.011959 +v -0.039792 0.004842 -0.011959 +v -0.034375 0.006231 0.002790 +v -0.034375 0.006231 -0.011959 +v -0.039792 0.004842 -0.026318 +v -0.038333 0.005723 -0.026318 +v -0.038333 0.005723 -0.040677 +v -0.039792 0.004842 -0.040677 +v -0.034375 0.006231 -0.026318 +v -0.034375 0.006231 -0.040677 +v -0.040000 0.003451 0.030450 +v -0.039792 0.004842 0.030450 +v -0.039792 0.004842 0.017539 +v -0.040000 0.003451 0.017539 +v -0.038333 0.005723 0.030450 +v -0.038333 0.005723 0.017539 +v -0.034375 0.006231 0.030450 +v -0.034375 0.006231 0.017539 +v 0.000000 0.006702 -0.011959 +v -0.014583 0.006652 -0.011959 +v -0.012760 0.008690 -0.010115 +v -0.001823 0.008727 -0.010115 +v 0.000000 0.006702 0.030450 +v 0.000000 0.006702 0.017539 +v -0.001823 0.008727 0.019153 +v -0.001823 0.008727 0.028836 +v -0.026667 0.006503 -0.040677 +v -0.034375 0.001722 -0.052418 +v -0.026667 0.001994 -0.052418 +v -0.038333 0.005723 -0.052418 +v -0.039792 0.004842 -0.052418 +v -0.040000 0.003451 -0.052418 +v -0.040000 0.003451 -0.026318 +v -0.040000 0.003451 -0.040677 +v -0.040000 0.003451 0.002790 +v -0.040000 0.003451 -0.011959 +v 0.012725 0.006556 -0.089596 +v 0.000000 0.006599 -0.089596 +v 0.000000 0.006671 -0.086770 +v 0.013954 0.006623 -0.086770 +v -0.012725 0.006556 -0.089596 +v -0.013954 0.006623 -0.086770 +v 0.000000 0.002189 -0.079099 +v 0.014505 0.002139 -0.079099 +v -0.014505 0.002139 -0.079099 +v -0.014583 0.002143 -0.064160 +v 0.000000 0.002193 -0.064160 +v 0.014583 0.002143 -0.064160 +v -0.034193 0.004840 0.081641 +v -0.032921 0.005711 0.081462 +v -0.036728 0.005719 0.074224 +v -0.038133 0.004841 0.074283 +v -0.029522 0.006193 0.081063 +v -0.032921 0.006218 0.074097 +v -0.038133 0.005723 0.062062 +v -0.039584 0.004842 0.062069 +v -0.034193 0.006230 0.062046 +v -0.034375 0.003451 0.081667 +v 0.014583 0.006652 -0.011959 +v 0.016094 0.008665 0.000946 +v 0.016094 0.008665 -0.010115 +v -0.038233 0.005723 0.052712 +v -0.034284 0.006231 0.052704 +v -0.034375 0.006231 0.043361 +v -0.038333 0.005723 0.043361 +v -0.039688 0.004842 0.052715 +v -0.039792 0.004842 0.043361 +v -0.039896 0.003451 0.052716 +v -0.040000 0.003451 0.043361 +v -0.038333 0.003451 0.074291 +v -0.039792 0.003451 0.062070 +v 0.039792 0.004842 -0.026318 +v 0.038333 0.005723 -0.026318 +v 0.038333 0.005723 -0.011959 +v 0.039792 0.004842 -0.011959 +v 0.034375 0.006231 -0.026318 +v 0.034375 0.006231 -0.011959 +v 0.039792 0.004842 0.002790 +v 0.038333 0.005723 0.002790 +v 0.038333 0.005723 0.017539 +v 0.039792 0.004842 0.017539 +v 0.034375 0.006231 0.002790 +v 0.034375 0.006231 0.017539 +v 0.040000 0.003451 -0.052418 +v 0.039792 0.004842 -0.052418 +v 0.039792 0.004842 -0.040677 +v 0.040000 0.003451 -0.040677 +v 0.038333 0.005723 -0.052418 +v 0.038333 0.005723 -0.040677 +v 0.034375 0.001722 -0.052418 +v 0.034375 0.006231 -0.040677 +v 0.026667 0.001994 -0.052418 +v 0.026667 0.006503 -0.040677 +v 0.012760 0.008689 0.004633 +v 0.012760 0.008689 0.015695 +v -0.014583 0.006652 0.030450 +v -0.026667 0.006503 0.030450 +v -0.025156 0.008552 0.032064 +v -0.016094 0.008664 0.032064 +v 0.012760 0.008689 -0.013754 +v 0.001823 0.008726 -0.013754 +v 0.038333 0.005723 0.030450 +v 0.038333 0.005723 0.043361 +v 0.039792 0.004842 0.030450 +v 0.039792 0.004842 0.043361 +v 0.040000 0.003451 0.030450 +v 0.040000 0.003451 0.043361 +v 0.040000 0.003451 0.002790 +v 0.040000 0.003451 0.017539 +v 0.040000 0.003451 -0.026318 +v 0.040000 0.003451 -0.011959 +v -0.014583 -0.005897 -0.026318 +v 0.000000 -0.006271 -0.026318 +v 0.000000 -0.006271 -0.011959 +v -0.014583 -0.005897 -0.011959 +v 0.014583 -0.005897 -0.026318 +v 0.014583 -0.005897 -0.011959 +v -0.014583 -0.005897 0.002790 +v 0.000000 -0.006271 0.002790 +v 0.000000 -0.006271 0.017539 +v -0.014583 -0.005897 0.017539 +v 0.014583 -0.005897 0.002790 +v 0.014583 -0.005897 0.017539 +v -0.026667 -0.004778 -0.052418 +v -0.014583 -0.005897 -0.052418 +v -0.014583 -0.005897 -0.040677 +v -0.026667 -0.004778 -0.040677 +v 0.000000 -0.006271 -0.052418 +v 0.000000 -0.006271 -0.040677 +v 0.014583 -0.005897 -0.052418 +v 0.014583 -0.005897 -0.040677 +v 0.026667 -0.004778 -0.052418 +v 0.026667 -0.004778 -0.040677 +v 0.026667 -0.004778 -0.026318 +v 0.026667 -0.004778 -0.011959 +v 0.026667 -0.004778 0.002790 +v 0.026667 -0.004778 0.017539 +v 0.014583 -0.005897 0.030450 +v 0.026667 -0.004778 0.030450 +v 0.026667 -0.004778 0.043361 +v 0.014583 -0.005897 0.043361 +v 0.000000 -0.006271 0.030450 +v 0.000000 -0.006271 0.043361 +v -0.014583 -0.005897 0.030450 +v -0.014583 -0.005897 0.043361 +v -0.026667 -0.004778 0.030450 +v -0.026667 -0.004778 0.043361 +v -0.026667 -0.004778 0.002790 +v -0.026667 -0.004778 0.017539 +v -0.026667 -0.004778 -0.026318 +v -0.026667 -0.004778 -0.011959 +v 0.026667 0.006503 0.002790 +v 0.027534 0.008502 0.004449 +v 0.033508 0.008292 0.004449 +v 0.026667 0.006503 -0.026318 +v 0.014583 0.006652 -0.026318 +v 0.016094 0.008664 -0.024523 +v 0.025156 0.008552 -0.024523 +v 0.014583 0.006652 0.030450 +v 0.001823 0.008726 0.032064 +v 0.012760 0.008689 0.032064 +v -0.033797 0.008282 0.042393 +v -0.033797 0.008282 0.031418 +v 0.014583 0.002143 -0.052418 +v 0.014583 0.006652 -0.040677 +v 0.000000 0.002193 -0.052418 +v 0.000000 0.006702 -0.040677 +v -0.014583 0.002143 -0.052418 +v -0.014583 0.006652 -0.040677 +v -0.016094 0.008664 -0.013754 +v -0.026667 0.006503 0.002790 +v -0.026667 0.006503 0.017539 +v -0.025156 0.008552 0.015695 +v -0.025156 0.008552 0.004633 +v -0.014583 0.006652 0.017539 +v -0.016094 0.008664 0.015695 +v -0.001823 0.008726 -0.013754 +v -0.012760 0.008689 -0.013754 +v 0.000000 0.006702 -0.026318 +v 0.001823 0.008726 -0.024523 +v 0.025028 0.008549 0.060870 +v 0.016014 0.008661 0.060876 +v -0.012760 0.008689 0.032064 +v -0.001823 0.008726 0.032064 +v -0.012760 0.008689 -0.024523 +v 0.034375 -0.002969 -0.026318 +v 0.038333 -0.000763 -0.026318 +v 0.038333 -0.000763 -0.011959 +v 0.034375 -0.002969 -0.011959 +v 0.039792 0.001493 -0.026318 +v 0.039792 0.001493 -0.011959 +v 0.034375 -0.002969 0.002790 +v 0.038333 -0.000763 0.002790 +v 0.038333 -0.000763 0.017539 +v 0.034375 -0.002969 0.017539 +v 0.039792 0.001493 0.002790 +v 0.039792 0.001493 0.017539 +v 0.034375 -0.002969 -0.052418 +v 0.034375 -0.002969 -0.040677 +v 0.038333 -0.000763 -0.052418 +v 0.038333 -0.000763 -0.040677 +v 0.039792 0.001493 -0.052418 +v 0.039792 0.001493 -0.040677 +v 0.039792 0.001493 0.030450 +v 0.039792 0.001493 0.043361 +v 0.038333 -0.000763 0.030450 +v 0.038333 -0.000763 0.043361 +v 0.034375 -0.002969 0.030450 +v 0.034375 -0.002969 0.043361 +v -0.029522 -0.002680 0.081063 +v -0.032921 -0.000670 0.081462 +v -0.036728 -0.000731 0.074224 +v -0.032921 -0.002872 0.074097 +v -0.034193 0.001505 0.081641 +v -0.038133 0.001497 0.074283 +v -0.038133 -0.000759 0.062062 +v -0.034193 -0.002957 0.062046 +v -0.039584 0.001494 0.062069 +v -0.023060 -0.002548 0.084715 +v -0.025525 -0.000634 0.085484 +v -0.026524 0.001509 0.085796 +v -0.039688 0.001493 0.052715 +v -0.039792 0.001493 0.043361 +v -0.038233 -0.000761 0.052712 +v -0.038333 -0.000763 0.043361 +v -0.034284 -0.002963 0.052704 +v -0.034375 -0.002969 0.043361 +v -0.034375 -0.002969 0.002790 +v -0.038333 -0.000763 0.002790 +v -0.038333 -0.000763 -0.011959 +v -0.034375 -0.002969 -0.011959 +v -0.039792 0.001493 0.002790 +v -0.039792 0.001493 -0.011959 +v -0.034375 -0.002969 -0.026318 +v -0.038333 -0.000763 -0.026318 +v -0.038333 -0.000763 -0.040677 +v -0.034375 -0.002969 -0.040677 +v -0.039792 0.001493 -0.026318 +v -0.039792 0.001493 -0.040677 +v -0.034375 -0.002969 0.030450 +v -0.034375 -0.002969 0.017539 +v -0.038333 -0.000763 0.030450 +v -0.038333 -0.000763 0.017539 +v -0.039792 0.001493 0.030450 +v -0.039792 0.001493 0.017539 +v -0.039792 0.001493 -0.052418 +v -0.039792 0.001493 -0.064160 +v -0.038333 -0.000763 -0.052418 +v -0.038333 -0.000763 -0.064160 +v -0.034375 -0.002969 -0.052418 +v -0.034375 -0.002969 -0.064160 +v 0.029522 -0.002680 -0.089596 +v 0.032921 -0.000670 -0.089596 +v 0.036728 -0.000731 -0.086770 +v 0.032921 -0.002872 -0.086770 +v 0.034193 0.001505 -0.089596 +v 0.038133 0.001497 -0.086770 +v 0.038133 -0.000759 -0.079099 +v 0.034193 -0.002957 -0.079099 +v 0.039584 0.001494 -0.079099 +v 0.023060 -0.002548 -0.090000 +v 0.025525 -0.000634 -0.090000 +v 0.026524 0.001509 -0.090000 +v 0.039792 0.001493 -0.064160 +v 0.038333 -0.000763 -0.064160 +v 0.034375 -0.002969 -0.064160 +v -0.012725 -0.002668 -0.090000 +v -0.013954 -0.000666 -0.090000 +v 0.000000 -0.000699 -0.090000 +v 0.000000 -0.002774 -0.090000 +v -0.014505 0.001505 -0.090000 +v 0.000000 0.001501 -0.090000 +v 0.013954 -0.000666 -0.090000 +v 0.012725 -0.002668 -0.090000 +v 0.014505 0.001505 -0.090000 +v -0.023060 -0.002548 -0.090000 +v -0.025525 -0.000634 -0.090000 +v -0.026524 0.001509 -0.090000 +v 0.034193 -0.002957 0.062046 +v 0.038133 -0.000759 0.062062 +v 0.036728 -0.000731 0.074224 +v 0.032921 -0.002872 0.074097 +v 0.039584 0.001494 0.062069 +v 0.038133 0.001497 0.074283 +v 0.032921 -0.000670 0.081462 +v 0.029522 -0.002680 0.081063 +v 0.034193 0.001505 0.081641 +v 0.034284 -0.002963 0.052704 +v 0.038233 -0.000761 0.052712 +v 0.039688 0.001493 0.052715 +v 0.026524 0.001509 0.085796 +v 0.025525 -0.000634 0.085484 +v 0.023060 -0.002548 0.084715 +v -0.034193 -0.002957 -0.079099 +v -0.038133 -0.000759 -0.079099 +v -0.036728 -0.000731 -0.086770 +v -0.032921 -0.002872 -0.086770 +v -0.039584 0.001494 -0.079099 +v -0.038133 0.001497 -0.086770 +v -0.032921 -0.000670 -0.089596 +v -0.029522 -0.002680 -0.089596 +v -0.034193 0.001505 -0.089596 +v 0.012725 -0.002668 0.086675 +v 0.013954 -0.000666 0.087729 +v 0.000000 -0.000699 0.088479 +v 0.000000 -0.002774 0.087338 +v 0.014505 0.001505 0.088124 +v 0.000000 0.001501 0.088900 +v -0.013954 -0.000666 0.087729 +v -0.012725 -0.002668 0.086675 +v -0.014505 0.001505 0.088124 +v -0.033411 0.008296 -0.024523 +v -0.027630 0.008500 -0.024523 +v -0.012760 0.008690 0.028836 +v 0.026667 0.006503 0.030450 +v 0.027630 0.008500 0.028836 +v 0.027630 0.008500 0.019153 +v -0.026667 0.006503 0.043361 +v -0.027620 0.008500 0.044529 +v -0.027567 0.008499 0.051532 +v 0.033411 0.008296 0.028836 +v -0.014544 0.006650 0.052703 +v -0.014583 0.006652 0.043361 +v -0.016087 0.008665 0.044529 +v -0.016057 0.008663 0.051535 +v -0.027630 0.008500 0.004634 +v -0.027630 0.008500 0.015695 +v -0.033411 0.008296 0.000946 +v -0.033411 0.008296 -0.010115 +v 0.026667 0.006503 0.043361 +v 0.027620 0.008500 0.044529 +v 0.033401 0.008296 0.044529 +v -0.012760 0.008690 0.019153 +v 0.000000 0.006702 0.043361 +v 0.000000 0.006700 0.052707 +v 0.001820 0.008725 0.051539 +v 0.001820 0.008727 0.044529 +v 0.000000 0.006702 0.002790 +v 0.012760 0.008690 0.000946 +v 0.001823 0.008727 0.000946 +v 0.016094 0.008664 0.032064 +v 0.025156 0.008552 0.032064 +v -0.001823 0.008726 -0.024523 +v 0.014544 0.006650 0.052703 +v 0.014583 0.006652 0.043361 +v 0.012758 0.008689 0.044529 +v 0.012728 0.008688 0.051536 +v 0.025156 0.008553 0.028836 +v 0.016094 0.008665 0.028836 +v -0.026667 0.006503 -0.011959 +v -0.025156 0.008553 0.000946 +v -0.025156 0.008553 -0.010115 +v -0.027630 0.008500 -0.010115 +v -0.033411 0.008296 -0.013754 +v -0.027630 0.008500 -0.013754 +v 0.012724 0.008687 0.053871 +v 0.001816 0.008724 0.053875 +v 0.001816 0.008722 0.060884 +v 0.012694 0.008685 0.060878 +v -0.016044 0.008662 0.053870 +v -0.016014 0.008660 0.060876 +v 0.033313 0.008294 0.053870 +v 0.027546 0.008498 0.053867 +v 0.027493 0.008497 0.060870 +v 0.033245 0.008294 0.060877 +v 0.033411 0.008295 -0.024523 +v 0.027630 0.008499 -0.024523 +v 0.027630 0.008499 -0.013754 +v 0.033411 0.008295 -0.013754 +v 0.027534 0.008502 0.015879 +v 0.033508 0.008292 0.015879 +v 0.027630 0.008499 0.032064 +v 0.027630 0.008499 0.041747 +v 0.012760 0.008689 -0.024523 +v 0.001823 0.008726 0.004633 +v 0.001823 0.008726 0.015695 +v -0.025156 0.008552 -0.013754 +v -0.016094 0.008664 0.004633 +v -0.025156 0.008552 0.041747 +v -0.016094 0.008664 0.041747 +v 0.001823 0.008726 0.041747 +v 0.012760 0.008689 0.041747 +v 0.026667 0.006503 -0.011959 +v -0.014583 0.006652 0.002790 +v 0.026595 0.006502 0.052699 +v 0.025082 0.008551 0.053867 +v 0.016044 0.008662 0.053870 +v -0.001816 0.008724 0.053875 +v -0.012724 0.008687 0.053872 +v -0.012694 0.008686 0.060878 +v -0.001816 0.008723 0.060884 +v -0.001823 0.008726 0.004634 +v -0.012760 0.008689 0.004634 +v -0.012760 0.008689 0.015695 +v -0.001823 0.008726 0.015695 +v -0.012760 0.008689 0.041747 +v -0.001823 0.008726 0.041747 +v 0.016094 0.008664 0.041747 +v 0.025156 0.008552 0.041747 +v 0.025156 0.008552 0.004634 +v 0.016094 0.008664 -0.013754 +v 0.025156 0.008552 -0.013754 +v -0.033411 0.008296 0.015695 +v -0.033411 0.008296 0.004634 +v -0.027245 0.008513 0.042393 +v -0.027245 0.008513 0.031418 +v -0.033245 0.008294 0.060877 +v -0.027493 0.008497 0.060870 +v -0.027546 0.008498 0.053867 +v -0.033313 0.008295 0.053871 +v -0.033411 0.008296 0.028836 +v -0.027630 0.008500 0.028836 +v -0.027630 0.008500 0.019153 +v -0.033411 0.008296 0.019153 +v -0.027630 0.008500 0.000946 +v -0.033333 0.008296 0.051536 +v -0.033401 0.008296 0.044529 +v 0.025156 0.008553 -0.010115 +v 0.025156 0.008553 0.000946 +v -0.012760 0.008690 0.000946 +v -0.001823 0.008727 0.000946 +v 0.025156 0.008553 0.019153 +v 0.016094 0.008665 0.019153 +v -0.001092 0.008729 0.044062 +v -0.013488 0.008687 0.044062 +v -0.013455 0.008685 0.052003 +v -0.001092 0.008728 0.052006 +v 0.025149 0.008553 0.044529 +v 0.016087 0.008665 0.044529 +v 0.016057 0.008663 0.051535 +v 0.025096 0.008551 0.051532 +v -0.016094 0.008665 -0.010115 +v -0.016094 0.008665 0.000946 +v 0.012760 0.008690 -0.010115 +v 0.001823 0.008727 -0.010115 +v 0.033411 0.008296 -0.010115 +v 0.027630 0.008500 -0.010115 +v 0.027630 0.008500 0.000946 +v 0.033411 0.008296 0.000946 +v 0.012760 0.008690 0.019153 +v 0.001823 0.008727 0.019153 +v 0.001823 0.008727 0.028836 +v 0.012760 0.008690 0.028836 +v -0.016094 0.008665 0.019153 +v -0.025156 0.008553 0.019153 +v -0.025156 0.008553 0.028836 +v -0.016094 0.008665 0.028836 +v 0.033411 0.008296 0.019153 +v 0.027567 0.008499 0.051532 +v 0.033333 0.008296 0.051536 +v -0.025149 0.008553 0.044529 +v -0.025096 0.008551 0.051532 +vn 0.1087 0.9239 0.3668 +vn 0.1087 0.9239 0.3669 +vn -0.1087 0.9239 0.3669 +vn -0.1087 0.9239 0.3668 +vn 0.0573 0.4806 0.8751 +vn 0.0574 0.4806 0.8751 +vn -0.0574 0.4806 0.8751 +vn -0.0573 0.4806 0.8751 +vn 0.0022 0.0055 1.0000 +vn 0.0022 0.0056 1.0000 +vn -0.9990 0.0201 0.0402 +vn -0.9990 0.0201 0.0403 +vn -0.9997 0.0227 -0.0000 +vn -0.0022 0.0044 -1.0000 +vn -0.0023 0.0045 -1.0000 +vn -0.0022 0.0045 -1.0000 +vn -0.3638 0.8405 0.4014 +vn -0.1847 0.4268 0.8853 +vn -0.1847 0.4267 0.8853 +vn -0.1848 0.4268 0.8853 +vn -0.1848 0.4267 0.8853 +vn -0.0664 0.1558 0.9856 +vn -0.0663 0.1557 0.9856 +vn -0.0664 0.1557 0.9856 +vn -0.0202 0.1541 0.9878 +vn 0.0202 0.1541 0.9878 +vn 0.0664 0.1558 0.9856 +vn 0.0664 0.1557 0.9856 +vn 0.0663 0.1557 0.9856 +vn 0.1847 0.4267 0.8853 +vn 0.1847 0.4268 0.8853 +vn 0.1848 0.4267 0.8853 +vn 0.1848 0.4268 0.8853 +vn 0.3638 0.8405 0.4014 +vn 0.0111 0.0011 0.9999 +vn 0.0112 0.0079 0.9999 +vn 0.0113 0.0135 0.9998 +vn 0.0088 0.0136 0.9999 +vn -0.0111 0.0011 0.9999 +vn -0.0112 0.0079 0.9999 +vn -0.0113 0.0136 0.9998 +vn -0.0113 0.0135 0.9998 +vn 0.0379 -0.0000 0.9993 +vn 0.0379 0.0017 0.9993 +vn 0.0383 0.0090 0.9992 +vn 0.0383 0.0091 0.9992 +vn 0.0386 0.0148 0.9991 +vn 0.0370 0.0489 0.9981 +vn 0.0119 0.0491 0.9987 +vn 0.0011 0.0491 0.9988 +vn -0.0119 0.0491 0.9987 +vn -0.0370 0.0489 0.9981 +vn -0.0383 0.0091 0.9992 +vn -0.0386 0.0148 0.9991 +vn -0.0383 0.0090 0.9992 +vn -0.0379 0.0017 0.9993 +vn -0.0379 -0.0000 0.9993 +vn -0.0111 -0.0000 0.9999 +vn 0.0111 -0.0000 0.9999 +vn -0.7267 0.0345 -0.6861 +vn 0.2332 0.0150 0.9723 +vn 0.2331 0.0150 0.9723 +vn -0.1411 0.0029 -0.9900 +vn -0.1426 0.0058 -0.9898 +vn -0.1484 0.0311 -0.9884 +vn -0.1483 0.0311 -0.9885 +vn -0.1484 0.0312 -0.9884 +vn -0.1483 0.0312 -0.9885 +vn -0.9975 0.0012 -0.0700 +vn -0.9975 0.0050 -0.0698 +vn -0.9976 0.0012 -0.0699 +vn -0.9965 0.0466 -0.0699 +vn 0.9976 0.0279 0.0633 +vn 0.9976 0.0278 0.0633 +vn -0.7778 0.6260 -0.0569 +vn -0.7777 0.6260 -0.0569 +vn -0.0123 0.0101 0.9999 +vn -0.0084 0.0101 0.9999 +vn -0.1391 0.1093 -0.9842 +vn -0.1392 0.1094 -0.9842 +vn -0.1392 0.1093 -0.9842 +vn -0.0128 0.0056 -0.9999 +vn -0.0107 0.0142 -0.9998 +vn -0.0064 0.0027 -1.0000 +vn -0.0111 0.0011 -0.9999 +vn -0.0055 0.0004 -1.0000 +vn -0.0106 -0.0000 -0.9999 +vn -0.0050 -0.0003 -1.0000 +vn -0.0100 -0.0000 -1.0000 +vn -0.0045 -0.0000 -1.0000 +vn -0.1396 -0.0000 -0.9902 +vn -0.7217 0.0010 -0.6922 +vn -0.7217 0.0039 -0.6922 +vn -0.7216 0.0040 -0.6923 +vn -0.2771 -0.3053 0.9111 +vn -0.2771 -0.3052 0.9111 +vn 0.2771 -0.3052 0.9111 +vn 0.2771 -0.3053 0.9111 +vn -0.0668 -0.0731 0.9951 +vn -0.0669 -0.0731 0.9951 +vn 0.0669 -0.0731 0.9951 +vn 0.0668 -0.0731 0.9951 +vn -0.9516 -0.2924 0.0942 +vn -0.6542 -0.7304 0.1962 +vn -0.6541 -0.7305 0.1963 +vn -0.6541 -0.7305 0.1962 +vn 0.6541 -0.7305 0.1963 +vn 0.6542 -0.7304 0.1962 +vn 0.6541 -0.7305 0.1962 +vn 0.9516 -0.2924 0.0942 +vn 0.6597 -0.2046 0.7232 +vn 0.6596 -0.2046 0.7232 +vn 0.2024 -0.0619 0.9773 +vn 0.2025 -0.0619 0.9773 +vn 0.0674 -0.0209 0.9975 +vn 0.0675 -0.0209 0.9975 +vn 0.0207 -0.0208 0.9996 +vn 0.0207 -0.0207 0.9996 +vn 0.0208 -0.0207 0.9996 +vn -0.0207 -0.0207 0.9996 +vn -0.0080 -0.0211 0.9997 +vn -0.0208 -0.0207 0.9996 +vn -0.0675 -0.0209 0.9975 +vn -0.0674 -0.0209 0.9975 +vn -0.2024 -0.0619 0.9773 +vn -0.2025 -0.0619 0.9773 +vn -0.6596 -0.2046 0.7232 +vn -0.6597 -0.2046 0.7232 +vn 0.8592 0.0390 0.5101 +vn 0.8593 0.0390 0.5100 +vn 0.8592 0.0391 0.5101 +vn 0.8593 0.0391 0.5100 +vn 0.8485 0.1874 0.4950 +vn 0.8485 0.1874 0.4949 +vn 0.8484 0.1874 0.4950 +vn 0.3486 0.0165 0.9371 +vn 0.3486 0.0166 0.9371 +vn 0.3487 0.0165 0.9371 +vn 0.3501 0.0760 0.9336 +vn 0.9985 0.0012 0.0550 +vn 0.9985 0.0050 0.0549 +vn 0.9985 0.0012 0.0551 +vn 0.9974 0.0466 0.0544 +vn 0.9974 0.0467 0.0544 +vn 0.9747 0.2175 0.0524 +vn 0.9747 0.2175 0.0523 +vn 0.9999 0.0125 -0.0000 +vn 0.6931 0.5579 0.4565 +vn 0.6931 0.5579 0.4564 +vn 0.3107 0.2518 0.9166 +vn 0.3108 0.2518 0.9165 +vn 0.3108 0.2517 0.9165 +vn 0.1108 0.0852 0.9902 +vn 0.1107 0.0852 0.9902 +vn 0.1067 0.0264 0.9939 +vn 0.1063 0.0028 0.9943 +vn 0.1059 0.0057 0.9944 +vn 0.1064 0.0028 0.9943 +vn 0.1068 -0.0000 0.9943 +vn 0.3453 -0.0000 0.9385 +vn 0.3453 0.0014 0.9385 +vn 0.8561 0.0011 0.5168 +vn 0.8561 0.0044 0.5168 +vn -0.0000 -0.0000 -1.0000 +vn 0.0037 -0.0000 -1.0000 +vn 0.0055 0.0004 -1.0000 +vn 0.0050 -0.0003 -1.0000 +vn 0.0045 -0.0000 -1.0000 +vn 0.1411 0.0029 -0.9900 +vn 0.1426 0.0058 -0.9898 +vn 0.1483 0.0312 -0.9885 +vn 0.1484 0.0312 -0.9884 +vn 0.1483 0.0311 -0.9885 +vn 0.1484 0.0311 -0.9884 +vn 0.7267 0.0345 -0.6861 +vn -0.2331 0.0150 0.9723 +vn -0.2332 0.0150 0.9723 +vn 0.0106 -0.0000 -0.9999 +vn 0.0100 -0.0000 -1.0000 +vn 0.0111 0.0011 -0.9999 +vn 0.0111 0.0022 -0.9999 +vn 0.0145 0.0089 -0.9999 +vn 0.0107 0.0142 -0.9998 +vn 0.0146 0.0089 -0.9999 +vn 0.1392 0.1094 -0.9842 +vn 0.1392 0.1093 -0.9842 +vn 0.1391 0.1093 -0.9842 +vn 0.0123 0.0101 0.9999 +vn 0.0084 0.0101 0.9999 +vn 0.7777 0.6260 -0.0569 +vn 0.7778 0.6260 -0.0569 +vn -0.9976 0.0278 0.0633 +vn -0.9976 0.0279 0.0633 +vn 0.9965 0.0466 -0.0699 +vn 0.9975 0.0012 -0.0699 +vn 0.9975 0.0050 -0.0698 +vn 0.9975 0.0012 -0.0700 +vn 0.7217 0.0010 -0.6922 +vn 0.7216 0.0040 -0.6923 +vn 0.7217 0.0039 -0.6922 +vn 0.1396 -0.0000 -0.9902 +vn -0.0263 -0.0299 -0.9992 +vn 0.0263 -0.0299 -0.9992 +vn -0.1857 -0.2052 -0.9609 +vn 0.1857 -0.2052 -0.9609 +vn -0.0067 -0.0010 -1.0000 +vn -0.0022 -0.0011 -1.0000 +vn -0.0045 -0.0022 -1.0000 +vn -0.0100 -0.0017 -0.9999 +vn -0.0000 -0.0011 -1.0000 +vn -0.0000 -0.0022 -1.0000 +vn 0.0022 -0.0011 -1.0000 +vn 0.0045 -0.0022 -1.0000 +vn 0.0067 -0.0010 -1.0000 +vn 0.0100 -0.0017 -0.9999 +vn 0.0847 -0.0262 -0.9961 +vn 0.0846 -0.0262 -0.9961 +vn 0.4982 -0.1541 -0.8533 +vn 0.4982 -0.1541 -0.8532 +vn 0.9491 -0.2916 -0.1186 +vn 0.9491 -0.2917 -0.1186 +vn 0.9491 -0.2917 -0.1187 +vn 0.6463 -0.7217 -0.2478 +vn 0.6463 -0.7217 -0.2477 +vn -0.6463 -0.7217 -0.2478 +vn -0.6463 -0.7217 -0.2477 +vn -0.9491 -0.2917 -0.1186 +vn -0.9491 -0.2916 -0.1186 +vn -0.4982 -0.1541 -0.8532 +vn -0.4982 -0.1541 -0.8533 +vn -0.0846 -0.0262 -0.9961 +vn -0.0847 -0.0262 -0.9961 +vn -0.9989 0.0467 -0.0000 +vn -0.9760 0.2178 -0.0000 +vn -1.0000 0.0009 -0.0000 +vn -1.0000 0.0050 -0.0000 +vn -0.0012 0.0055 -1.0000 +vn -0.0012 0.0056 -1.0000 +vn -0.0011 0.0055 -1.0000 +vn -0.0011 0.0056 -1.0000 +vn 0.9997 0.0253 -0.0000 +vn -0.7790 0.6270 -0.0000 +vn 0.9996 0.0278 -0.0000 +vn 0.0271 0.2161 -0.9760 +vn 0.0270 0.2161 -0.9760 +vn -0.0271 0.2161 -0.9760 +vn -0.0270 0.2161 -0.9760 +vn 0.0028 0.0101 0.9999 +vn -0.0000 0.0101 0.9999 +vn -0.0028 0.0101 0.9999 +vn 0.0046 0.0183 -0.9998 +vn -0.0000 0.0171 -0.9999 +vn -0.0046 0.0183 -0.9998 +vn -0.0827 0.1931 -0.9777 +vn -0.0828 0.1931 -0.9777 +vn -0.3917 0.9185 -0.0540 +vn -0.3917 0.9185 -0.0541 +vn -0.1167 0.9922 -0.0438 +vn 0.1167 0.9922 -0.0438 +vn 0.3917 0.9185 -0.0541 +vn 0.3917 0.9185 -0.0540 +vn 0.0828 0.1931 -0.9777 +vn 0.0827 0.1931 -0.9777 +vn -0.3487 0.0165 0.9371 +vn -0.3486 0.0166 0.9371 +vn -0.3486 0.0165 0.9371 +vn -0.3501 0.0760 0.9336 +vn -0.8593 0.0391 0.5100 +vn -0.8592 0.0391 0.5101 +vn -0.8593 0.0390 0.5100 +vn -0.8592 0.0390 0.5101 +vn -0.8484 0.1874 0.4950 +vn -0.8485 0.1874 0.4950 +vn -0.8485 0.1874 0.4949 +vn -0.1068 -0.0000 0.9943 +vn -0.1064 0.0028 0.9943 +vn -0.1063 0.0028 0.9943 +vn -0.1059 0.0057 0.9944 +vn -0.1067 0.0264 0.9939 +vn -0.1107 0.0852 0.9902 +vn -0.1108 0.0852 0.9902 +vn -0.3108 0.2518 0.9165 +vn -0.3108 0.2517 0.9165 +vn -0.3107 0.2518 0.9166 +vn -0.6931 0.5579 0.4564 +vn -0.6931 0.5579 0.4565 +vn -0.9747 0.2175 0.0524 +vn -0.9974 0.0466 0.0544 +vn -0.9974 0.0467 0.0544 +vn -0.9985 0.0012 0.0550 +vn -0.9985 0.0050 0.0549 +vn -0.9985 0.0012 0.0551 +vn -0.8561 0.0011 0.5168 +vn -0.8561 0.0044 0.5168 +vn -0.3453 -0.0000 0.9385 +vn -0.3453 0.0014 0.9385 +vn 0.9989 0.0467 -0.0000 +vn 0.9760 0.2178 -0.0000 +vn 1.0000 0.0009 -0.0000 +vn 1.0000 0.0050 -0.0000 +vn -0.4138 0.0270 -0.9100 +vn -0.4138 0.0269 -0.9100 +vn -0.4137 0.0269 -0.9100 +vn 0.0182 0.0147 -0.9997 +vn 0.0125 0.0147 -0.9998 +vn 0.0124 0.0147 -0.9998 +vn 0.0123 0.0149 -0.9998 +vn 0.0011 0.0044 1.0000 +vn 0.0011 0.0045 1.0000 +vn -0.6671 -0.7450 -0.0000 +vn 0.6671 -0.7450 -0.0000 +vn -0.9559 -0.2937 -0.0000 +vn 0.9559 -0.2937 -0.0000 +vn 0.0056 0.0045 -1.0000 +vn 0.0055 0.0044 -1.0000 +vn 0.0056 0.0044 -1.0000 +vn 0.0023 0.0045 -1.0000 +vn 0.0022 0.0044 -1.0000 +vn 0.0022 0.0045 -1.0000 +vn -0.0000 0.0045 -1.0000 +vn -0.0000 0.0044 -1.0000 +vn -1.0000 0.0075 -0.0000 +vn 0.0045 0.0147 -0.9999 +vn -0.0000 0.0147 -0.9999 +vn -0.0045 0.0147 -0.9999 +vn -0.0125 0.0147 -0.9998 +vn -0.0124 0.0147 -0.9998 +vn 0.9997 0.0227 -0.0000 +vn -0.9998 0.0202 -0.0000 +vn -0.0022 0.0056 1.0000 +vn -0.0022 0.0055 1.0000 +vn -0.0011 0.0045 1.0000 +vn -0.0011 0.0044 1.0000 +vn -0.9997 0.0253 -0.0000 +vn 0.0011 0.0034 1.0000 +vn 0.0011 0.0033 1.0000 +vn 0.9986 -0.0521 -0.0000 +vn 0.9998 -0.0176 -0.0000 +vn 0.9925 -0.1225 -0.0000 +vn 1.0000 -0.0025 -0.0000 +vn 0.9925 -0.1225 -0.0003 +vn -0.3441 -0.0179 0.9387 +vn -0.3454 -0.0123 0.9384 +vn -0.3441 -0.0179 0.9388 +vn -0.3460 -0.0041 0.9382 +vn -0.8562 -0.0438 0.5147 +vn -0.8563 -0.0438 0.5147 +vn -0.8563 -0.0439 0.5147 +vn -0.8584 -0.0156 0.5128 +vn -0.1084 -0.0127 0.9940 +vn -0.1072 -0.0092 0.9942 +vn -0.1064 -0.0040 0.9943 +vn -0.1068 -0.0011 0.9943 +vn -0.1068 -0.0012 0.9943 +vn -0.8561 -0.0022 0.5168 +vn -0.9985 -0.0025 0.0549 +vn -0.9983 -0.0176 0.0552 +vn -0.9971 -0.0521 0.0547 +vn -0.9904 -0.1223 0.0642 +vn -0.8194 -0.0989 0.5646 +vn -0.8195 -0.0989 0.5645 +vn -0.8195 -0.0989 0.5646 +vn -0.3125 -0.0385 0.9491 +vn -0.3126 -0.0386 0.9491 +vn -0.3126 -0.0385 0.9491 +vn -0.9986 -0.0521 -0.0000 +vn -0.9998 -0.0176 -0.0000 +vn -0.9925 -0.1225 -0.0000 +vn -1.0000 -0.0025 -0.0000 +vn -0.9925 -0.1225 0.0003 +vn 0.1397 -0.0117 -0.9901 +vn 0.1432 -0.0047 -0.9897 +vn 0.1432 -0.0046 -0.9897 +vn 0.1396 -0.0117 -0.9901 +vn 0.1410 -0.0012 -0.9900 +vn 0.7247 -0.0368 -0.6880 +vn 0.7247 -0.0367 -0.6881 +vn 0.7248 -0.0367 -0.6880 +vn 0.7256 -0.0138 -0.6880 +vn 0.7236 -0.0079 -0.6902 +vn 0.7236 -0.0079 -0.6901 +vn 0.0061 -0.0001 -1.0000 +vn 0.0122 -0.0006 -0.9999 +vn 0.0054 0.0003 -1.0000 +vn 0.0111 -0.0000 -0.9999 +vn 0.0048 0.0002 -1.0000 +vn 0.9976 -0.0025 -0.0698 +vn 0.9974 -0.0176 -0.0703 +vn 0.9974 -0.0176 -0.0704 +vn 0.9962 -0.0520 -0.0702 +vn 0.9962 -0.0520 -0.0703 +vn 0.9893 -0.1221 -0.0794 +vn 0.9893 -0.1222 -0.0794 +vn 0.6773 -0.0830 -0.7311 +vn 0.6772 -0.0830 -0.7311 +vn 0.1351 -0.0165 -0.9907 +vn 0.1352 -0.0164 -0.9907 +vn -0.0061 -0.0001 -1.0000 +vn -0.0054 0.0003 -1.0000 +vn -0.0048 0.0002 -1.0000 +vn 0.8563 -0.0439 0.5147 +vn 0.8563 -0.0438 0.5147 +vn 0.8562 -0.0438 0.5147 +vn 0.8584 -0.0156 0.5128 +vn 0.3441 -0.0179 0.9388 +vn 0.3454 -0.0123 0.9384 +vn 0.3441 -0.0179 0.9387 +vn 0.3460 -0.0041 0.9382 +vn 0.9904 -0.1223 0.0642 +vn 0.9904 -0.1223 0.0643 +vn 0.9971 -0.0521 0.0547 +vn 0.9971 -0.0520 0.0546 +vn 0.9983 -0.0176 0.0552 +vn 0.9985 -0.0025 0.0549 +vn 0.8561 -0.0022 0.5168 +vn 0.1068 -0.0012 0.9943 +vn 0.1068 -0.0011 0.9943 +vn 0.1064 -0.0040 0.9943 +vn 0.1072 -0.0092 0.9942 +vn 0.1084 -0.0127 0.9940 +vn 0.3126 -0.0385 0.9491 +vn 0.3126 -0.0386 0.9491 +vn 0.3125 -0.0385 0.9491 +vn 0.8195 -0.0989 0.5645 +vn 0.8195 -0.0989 0.5646 +vn 0.8194 -0.0989 0.5646 +vn -0.7248 -0.0367 -0.6880 +vn -0.7247 -0.0367 -0.6881 +vn -0.7247 -0.0368 -0.6880 +vn -0.7256 -0.0139 -0.6880 +vn -0.7236 -0.0079 -0.6901 +vn -0.7236 -0.0079 -0.6902 +vn -0.7256 -0.0138 -0.6880 +vn -0.1396 -0.0117 -0.9901 +vn -0.1432 -0.0046 -0.9897 +vn -0.1432 -0.0047 -0.9897 +vn -0.1397 -0.0117 -0.9901 +vn -0.1410 -0.0012 -0.9900 +vn -0.9893 -0.1222 -0.0794 +vn -0.9893 -0.1221 -0.0794 +vn -0.9962 -0.0520 -0.0702 +vn -0.9962 -0.0520 -0.0703 +vn -0.9974 -0.0176 -0.0704 +vn -0.9974 -0.0176 -0.0703 +vn -0.9976 -0.0025 -0.0698 +vn -0.0111 -0.0000 -0.9999 +vn -0.0122 -0.0006 -0.9999 +vn -0.1352 -0.0164 -0.9907 +vn -0.1351 -0.0165 -0.9907 +vn -0.6773 -0.0830 -0.7311 +vn -0.6772 -0.0830 -0.7311 +vn 0.0117 -0.0056 0.9999 +vn 0.0111 -0.0022 0.9999 +vn 0.0111 -0.0006 0.9999 +vn -0.0117 -0.0056 0.9999 +vn -0.0111 -0.0022 0.9999 +vn -0.0111 -0.0006 0.9999 +vn 0.0381 -0.0078 0.9992 +vn 0.0386 -0.0056 0.9992 +vn 0.0380 -0.0079 0.9992 +vn 0.0384 -0.0022 0.9993 +vn 0.0379 -0.0006 0.9993 +vn 0.0379 -0.0005 0.9993 +vn -0.0379 -0.0005 0.9993 +vn -0.0379 -0.0006 0.9993 +vn -0.0384 -0.0022 0.9993 +vn -0.0386 -0.0056 0.9992 +vn -0.0380 -0.0079 0.9992 +vn -0.0381 -0.0078 0.9992 +vn -0.0230 -0.0075 0.9997 +vn -0.0123 -0.0078 0.9999 +vn 0.0123 -0.0078 0.9999 +vn 0.0122 -0.0078 0.9999 +vn 0.3923 0.9198 -0.0000 +vn -0.3923 0.9198 -0.0000 +vn -0.1168 0.9932 -0.0000 +vn 0.1168 0.9932 -0.0000 +vn 0.7790 0.6270 -0.0000 +vn -0.0067 0.0044 -1.0000 +vn -0.0066 0.0044 -1.0000 +vn -0.9996 0.0278 -0.0000 +vn 0.4137 0.0269 -0.9100 +vn 0.4138 0.0270 -0.9100 +vn 0.4138 0.0269 -0.9100 +vn -0.0181 0.0147 -0.9997 +vn -0.0180 0.0147 -0.9997 +vn -0.0000 0.0045 1.0000 +vn -0.0000 0.0044 1.0000 +vn -0.9999 0.0151 -0.0000 +vn 0.9992 0.0125 -0.0375 +vn 0.9992 0.0125 -0.0376 +vn 0.0056 0.0045 1.0000 +vn 0.0055 0.0045 1.0000 +vn 0.9995 0.0227 -0.0201 +vn 0.9995 0.0226 -0.0201 +vn 0.9999 0.0151 -0.0000 +vn -0.9999 0.0126 -0.0000 +vn 0.0045 0.0033 -1.0000 +vn 0.0044 0.0033 -1.0000 +vn 0.0012 0.0055 1.0000 +vn 0.0012 0.0056 1.0000 +vn 0.0011 0.0055 1.0000 +vn 0.0011 0.0056 1.0000 +vn -0.9904 -0.1223 0.0641 +vn -0.9971 -0.0520 0.0546 +vn -0.9747 0.2175 0.0523 +vn 0.9994 0.0253 0.0228 +vn 0.9994 0.0253 0.0227 +vn 0.6542 -0.7305 0.1963 +vn -0.6542 -0.7305 0.1963 +vn -0.0000 0.0033 1.0000 +vn -0.0000 0.0034 1.0000 +vn 0.0022 0.0045 1.0000 +vn -0.9998 0.0201 -0.0000 +vn -0.0067 0.0056 -1.0000 +vn -0.0066 0.0044 1.0000 +vn -0.0067 0.0044 1.0000 +vn 0.1168 0.9927 0.0292 +vn -0.3920 0.9191 0.0405 +vn -0.3920 0.9191 0.0406 +vn 0.7781 0.6263 0.0475 +vn 0.7781 0.6263 0.0474 +vn 0.9994 0.0252 0.0227 +vn 0.0067 0.0044 1.0000 +vn -0.0022 0.0045 1.0000 +vn -0.0023 0.0045 1.0000 +vn -0.9992 0.0125 -0.0376 +vn 0.0056 0.0044 1.0000 +vn -0.0011 0.0033 -1.0000 +vn 0.0011 0.0045 -1.0000 +vn 0.0011 0.0044 -1.0000 +vn -0.0022 0.0056 -1.0000 +vn -0.0023 0.0056 -1.0000 +vn 0.9996 0.0202 -0.0202 +vn 0.9996 0.0201 -0.0201 +vn 0.9996 0.0202 -0.0201 +vn 0.9996 0.0201 -0.0202 +vn -0.0011 0.0033 1.0000 +vn -0.0000 0.0034 -1.0000 +vn -0.0000 0.0033 -1.0000 +vn 0.0011 0.0056 -1.0000 +vn 0.9987 0.0125 0.0501 +vn 0.0034 0.0033 1.0000 +vn 0.0033 0.0033 1.0000 +vn -0.9999 0.0125 -0.0000 +vn 0.0044 0.0034 -1.0000 +vn 0.0067 0.0044 -1.0000 +vn -0.0022 0.0044 1.0000 +vn 0.3920 0.9191 0.0406 +vn 0.3920 0.9191 0.0405 +vn -0.1168 0.9927 0.0292 +vn -0.7790 0.6270 -0.0003 +vn -0.7781 0.6263 0.0475 +vn -0.7781 0.6263 0.0474 +vn -0.9996 0.0202 -0.0201 +vn -0.9996 0.0201 -0.0201 +vn 0.0022 0.0044 1.0000 +vn 0.0023 0.0045 1.0000 +vn -0.0011 0.0044 -1.0000 +vn -0.0011 0.0045 -1.0000 +vn 0.0022 0.0056 -1.0000 +vn 0.0022 0.0055 -1.0000 +vn 0.9990 0.0201 0.0403 +vn 0.9990 0.0201 0.0402 +vn -0.0034 0.0022 1.0000 +vn -0.0033 0.0022 1.0000 +vn -0.9994 0.0252 0.0227 +vn -0.9994 0.0252 0.0228 +vn -0.0011 0.0056 1.0000 +vn 1.0000 0.0075 -0.0000 +vn -0.0033 0.0033 1.0000 +vn -0.0034 0.0033 1.0000 +vn 0.9998 0.0202 -0.0000 +vn 0.0011 0.0034 -1.0000 +vn -0.9987 0.0125 0.0501 +vn -0.9987 0.0125 0.0500 +vn -0.0045 0.0033 -1.0000 +vn -0.0045 0.0034 -1.0000 +vn -0.0044 0.0033 -1.0000 +vn -0.0033 0.0022 -1.0000 +vn -0.0034 0.0022 -1.0000 +vn -0.0067 0.0056 1.0000 +vn 0.9998 0.0201 -0.0000 +vn -0.0000 0.0022 -1.0000 +vn -0.0000 0.0022 1.0000 +vn -0.0012 0.0056 1.0000 +vn -0.0012 0.0055 1.0000 +vn -0.0011 0.0055 1.0000 +vn 0.0011 0.0033 -1.0000 +vn -0.9995 0.0226 -0.0201 +vn -0.9995 0.0227 -0.0201 +vn -0.9996 0.0151 0.0226 +vn -0.0055 0.0045 1.0000 +vn -0.0056 0.0045 1.0000 +vn -0.0056 0.0045 -1.0000 +vn -0.0055 0.0045 -1.0000 +vn 0.9999 0.0126 -0.0000 +vn 0.0067 0.0056 1.0000 +vn 0.0012 0.0056 -1.0000 +vn 0.0012 0.0055 -1.0000 +vn 0.0011 0.0055 -1.0000 +vn -0.9992 0.0125 -0.0375 +vn 0.0067 0.0056 -1.0000 +vn 0.0055 0.0045 -1.0000 +vt 0.899886 0.606919 +vt 0.371268 0.124910 +vt 0.655824 0.179890 +vt 0.614461 0.083159 +vt 0.390407 0.130699 +vt 0.899887 0.614644 +vt 0.722563 0.138507 +vt 0.614461 0.115343 +vt 0.645237 0.148240 +vt 0.641031 0.050713 +vt 0.897030 0.614644 +vt 0.897042 0.607212 +vt 0.899886 0.622368 +vt 0.730355 0.077151 +vt 0.206811 0.125616 +vt 0.711952 0.192173 +vt 0.641031 0.018529 +vt 0.897042 0.622075 +vt 0.895349 0.614644 +vt 0.895398 0.607866 +vt 0.895398 0.621421 +vt 0.371285 0.098033 +vt 0.437253 0.180586 +vt 0.508152 0.179916 +vt 0.324333 0.072008 +vt 0.604912 0.162338 +vt 0.297694 0.131156 +vt 0.508152 0.192044 +vt 0.371348 0.033316 +vt 0.371285 0.124910 +vt 0.492401 0.112451 +vt 0.341618 0.091870 +vt 0.592644 0.113182 +vt 0.706525 0.082807 +vt 0.297694 0.104279 +vt 0.573878 0.165452 +vt 0.314976 0.133315 +vt 0.344768 0.119609 +vt 0.526768 0.717223 +vt 0.655462 0.086281 +vt 0.344768 0.099451 +vt 0.439068 0.154104 +vt 0.464067 0.717224 +vt 0.440944 0.113182 +vt 0.730374 0.044640 +vt 0.553154 0.082766 +vt 0.554490 0.166823 +vt 0.612985 0.163283 +vt 0.600219 0.115664 +vt 0.541162 0.113182 +vt 0.706616 0.082807 +vt 0.440944 0.130699 +vt 0.899877 0.628770 +vt 0.206811 0.152350 +vt 0.554490 0.184341 +vt 0.756788 0.115622 +vt 0.389490 0.128434 +vt 0.046477 1.001923 +vt 0.233304 0.147084 +vt 0.389490 0.115297 +vt 0.046744 0.943079 +vt 0.563278 0.032225 +vt 0.451752 0.180586 +vt 0.454535 0.180591 +vt 0.493653 0.179916 +vt 0.371356 0.033316 +vt 0.614461 0.050888 +vt 0.501548 0.131237 +vt 0.534676 0.083246 +vt 0.706525 0.110476 +vt 0.449942 0.154104 +vt 0.464012 0.796750 +vt 0.475034 0.129819 +vt 0.667524 0.110036 +vt 0.385964 0.186063 +vt 0.713375 0.165341 +vt 0.941145 0.570567 +vt 0.297758 0.072008 +vt 0.667524 0.136913 +vt 0.941127 0.582128 +vt 0.684808 0.107877 +vt 0.414195 0.185911 +vt 0.440944 0.112451 +vt 0.641018 0.131613 +vt 0.309021 0.935840 +vt 0.492401 0.109089 +vt 0.641018 0.111455 +vt 0.387720 0.159801 +vt 0.445079 0.935840 +vt 0.897048 0.628237 +vt 0.895449 0.626925 +vt 0.900408 0.584593 +vt 0.894743 0.625295 +vt 0.894532 0.620963 +vt 0.900644 0.580263 +vt 0.894426 0.614644 +vt 0.900820 0.573946 +vt 0.894532 0.608324 +vt 0.900820 0.567626 +vt 0.895449 0.602362 +vt 0.900705 0.563291 +vt 0.894743 0.603992 +vt 0.897048 0.601050 +vt 0.899877 0.600517 +vt 0.371268 0.151644 +vt 0.730360 0.110036 +vt 0.631656 0.168505 +vt 0.721178 0.108324 +vt 0.895834 0.566150 +vt 0.722006 0.097400 +vt 0.898562 0.566482 +vt 0.898466 0.573913 +vt 0.895723 0.573874 +vt 0.680879 0.116843 +vt 0.721895 0.105124 +vt 0.900068 0.567158 +vt 0.900013 0.573934 +vt 0.898355 0.581344 +vt 0.895619 0.581598 +vt 0.680775 0.124567 +vt 0.899879 0.580710 +vt 0.717754 0.090863 +vt 0.731932 0.073817 +vt 0.895939 0.559750 +vt 0.722111 0.091000 +vt 0.717647 0.097297 +vt 0.731820 0.080572 +vt 0.898651 0.560320 +vt 0.894504 0.602362 +vt 0.900109 0.561653 +vt 0.899766 0.586213 +vt 0.894504 0.626925 +vt 0.898272 0.587505 +vt 0.680701 0.130968 +vt 0.895545 0.587999 +vt 0.676415 0.124548 +vt 0.690577 0.108599 +vt 0.676343 0.130983 +vt 0.690500 0.115355 +vt 0.676518 0.116782 +vt 0.717533 0.105063 +vt 0.731700 0.088726 +vt 0.690684 0.100445 +vt 0.925679 0.591039 +vt 0.710835 0.134008 +vt 0.895459 0.532056 +vt 0.926834 0.587587 +vt 0.918434 0.671783 +vt 0.929088 0.588319 +vt 0.896366 0.532421 +vt 0.938781 0.538778 +vt 0.927937 0.591757 +vt 0.938933 0.538557 +vt 0.724090 0.081526 +vt 0.713094 0.134726 +vt 0.903247 0.517393 +vt 0.902931 0.666600 +vt -0.000475 0.483217 +vt 0.068932 0.552925 +vt 0.898228 0.535197 +vt 0.938552 0.538853 +vt 0.084324 0.665519 +vt 0.920161 0.610289 +vt 0.938603 0.538710 +vt 0.880136 0.586721 +vt 0.938748 0.538490 +vt 0.881694 0.587137 +vt 0.549134 0.093498 +vt 0.723904 0.081459 +vt 0.938395 0.538788 +vt 0.919780 0.611326 +vt 0.879289 0.585670 +vt 0.704652 0.137953 +vt 0.301205 0.094788 +vt 0.686366 0.156286 +vt 0.921302 0.589581 +vt 0.706459 0.132550 +vt 0.709029 0.139411 +vt 0.686370 0.159999 +vt 0.916972 0.676143 +vt 0.922458 0.586127 +vt -0.003132 0.332274 +vt 0.901474 0.670962 +vt 0.109522 0.333083 +vt 0.161683 0.559668 +vt 0.111608 0.484022 +vt 0.920150 0.612546 +vt 0.173769 0.672050 +vt 0.878895 0.583691 +vt 0.919770 0.613298 +vt 0.882088 0.631172 +vt 0.879022 0.582759 +vt 0.879356 0.583699 +vt 0.883440 0.634970 +vt 0.880186 0.584465 +vt 0.868824 0.604555 +vt 0.886794 0.638069 +vt 0.881737 0.584797 +vt 0.549734 0.061036 +vt 0.719997 0.145906 +vt 0.870388 0.604890 +vt 0.724050 0.081075 +vt 0.627979 0.119664 +vt 0.583772 0.094872 +vt 0.722512 0.145993 +vt 0.584359 0.062244 +vt 0.724236 0.081143 +vt 0.711288 0.140127 +vt 0.686400 0.161906 +vt 0.627920 0.121877 +vt 0.922743 0.573089 +vt 0.930921 0.573090 +vt 0.930811 0.576092 +vt 0.874389 0.557039 +vt 0.875462 0.564858 +vt 0.922943 0.576077 +vt 0.938693 0.573068 +vt 0.938287 0.576056 +vt 0.875680 0.549253 +vt 0.930512 0.577843 +vt 0.876132 0.557063 +vt 0.923343 0.577790 +vt 0.877080 0.564193 +vt 0.877278 0.549963 +vt 0.874425 0.584285 +vt 0.915493 0.570747 +vt 0.922729 0.570768 +vt 0.915526 0.573067 +vt 0.874462 0.581964 +vt 0.930929 0.570768 +vt 0.938722 0.570746 +vt 0.832823 0.613570 +vt 0.944737 0.570708 +vt 0.944692 0.573028 +vt 0.832857 0.615891 +vt 0.944061 0.576003 +vt 0.879308 0.542834 +vt 0.833332 0.618868 +vt 0.880449 0.544228 +vt 0.881906 0.545960 +vt 0.880402 0.550488 +vt 0.879585 0.557112 +vt 0.880216 0.563757 +vt 0.880089 0.570015 +vt 0.881594 0.568325 +vt 0.915994 0.576041 +vt 0.874973 0.578986 +vt 0.878910 0.571377 +vt 0.946679 0.638574 +vt 0.707417 0.167167 +vt 0.881245 0.635917 +vt 0.772851 0.169824 +vt 0.946973 0.638574 +vt 0.951751 0.634811 +vt 0.883578 0.635914 +vt 0.921561 0.606009 +vt 0.946969 0.638882 +vt 0.951444 0.634892 +vt 0.898857 0.554355 +vt 0.896948 0.595083 +vt 0.946677 0.638883 +vt 0.896115 0.553569 +vt 0.722287 0.084819 +vt 0.772848 0.170133 +vt 0.951755 0.635036 +vt 0.921595 0.607795 +vt 0.899856 0.596433 +vt 0.644144 0.130707 +vt 0.614461 0.170646 +vt 0.951451 0.635109 +vt 0.897012 0.597111 +vt 0.895239 0.597111 +vt 0.898750 0.556382 +vt 0.896028 0.555666 +vt 0.722200 0.086916 +vt 0.895367 0.598921 +vt 0.900239 0.558213 +vt 0.116944 0.055817 +vt 0.686275 0.144838 +vt 0.703706 0.165283 +vt 0.881246 0.634033 +vt 0.707418 0.165283 +vt 0.703704 0.167168 +vt 0.772384 0.169824 +vt 0.116932 0.073417 +vt 0.686273 0.147162 +vt 0.923439 0.605963 +vt 0.883580 0.634030 +vt 0.923471 0.607754 +vt 0.644144 0.113182 +vt 0.667524 0.138507 +vt 0.806076 0.082791 +vt 0.640840 0.169220 +vt 0.699307 0.081567 +vt 0.508152 0.137000 +vt 0.925347 0.607712 +vt 0.561185 0.165452 +vt 0.631656 0.169220 +vt 0.711999 0.081567 +vt 0.261882 0.159622 +vt 0.927941 0.607712 +vt 0.578467 0.137000 +vt 0.711998 0.137036 +vt 0.710418 0.108554 +vt 0.753088 0.806118 +vt 0.582788 0.163832 +vt 0.700899 0.108554 +vt 0.797000 0.806321 +vt 0.565506 0.138618 +vt 0.717842 0.086758 +vt 0.732024 0.069507 +vt 0.717926 0.084651 +vt 0.772382 0.170134 +vt 0.686249 0.150198 +vt 0.732112 0.067295 +vt 0.870451 0.601195 +vt 0.720060 0.142211 +vt 0.868878 0.600999 +vt 0.887010 0.623800 +vt 0.868945 0.596709 +vt 0.887277 0.606591 +vt 0.870527 0.596736 +vt 0.720136 0.137752 +vt 0.883544 0.622223 +vt 0.883714 0.606529 +vt 0.887607 0.589383 +vt 0.869027 0.592419 +vt 0.870605 0.592278 +vt 0.720215 0.133293 +vt 0.884088 0.590839 +vt 0.722576 0.142279 +vt 0.881840 0.621134 +vt 0.878960 0.580276 +vt 0.881882 0.606497 +vt 0.878971 0.576655 +vt 0.882347 0.591868 +vt 0.879086 0.573036 +vt 0.882943 0.581845 +vt 0.879233 0.570557 +vt 0.884426 0.578096 +vt 0.879600 0.569629 +vt 0.887885 0.575116 +vt 0.869097 0.588863 +vt 0.880456 0.568892 +vt 0.870670 0.588583 +vt 0.720280 0.129599 +vt 0.688658 0.133068 +vt 0.882018 0.568614 +vt 0.722731 0.133313 +vt 0.691155 0.133068 +vt 0.650057 0.107021 +vt 0.722796 0.129599 +vt 0.722654 0.137796 +vt 0.882055 0.566275 +vt 0.688696 0.130728 +vt 0.880485 0.566636 +vt 0.880479 0.565474 +vt 0.749291 0.492561 +vt 0.834886 0.641451 +vt 0.882063 0.565073 +vt 0.727581 0.492574 +vt 0.534222 0.057027 +vt 0.688704 0.129526 +vt 0.879601 0.567657 +vt 0.919780 0.629341 +vt 0.879562 0.566620 +vt 0.822437 0.625331 +vt 0.920161 0.630378 +vt 0.880599 0.665519 +vt 0.749556 0.507007 +vt 0.835239 0.647396 +vt 0.910204 0.639676 +vt 0.883578 0.607471 +vt 0.727771 0.507020 +vt 0.881245 0.607473 +vt 0.584370 0.121145 +vt 0.534411 0.071473 +vt 0.935030 0.630718 +vt 0.895990 0.552925 +vt 0.998958 0.483217 +vt 0.910204 0.650458 +vt 0.691194 0.130716 +vt 0.650129 0.102711 +vt 0.746147 0.168301 +vt 0.879138 0.569621 +vt 0.919770 0.627370 +vt 0.791155 0.672050 +vt 0.920150 0.628122 +vt 0.886876 0.484021 +vt 0.803238 0.559668 +vt 0.888962 0.333082 +vt 1.001615 0.332274 +vt 0.907203 0.650451 +vt 0.907203 0.639672 +vt 0.883582 0.610482 +vt 0.881248 0.610483 +vt 0.584373 0.124155 +vt 0.580657 0.121145 +vt 0.499744 0.071477 +vt 0.666742 0.145282 +vt 0.563226 0.094501 +vt 0.563229 0.098214 +vt 0.580660 0.124155 +vt 0.499565 0.057031 +vt 0.691204 0.129508 +vt 0.746149 0.168141 +vt 0.666718 0.143374 +vt 0.871442 0.565086 +vt 0.872611 0.557990 +vt 0.874389 0.558021 +vt 0.930811 0.536100 +vt 0.922943 0.536101 +vt 0.873072 0.565802 +vt 0.871689 0.550858 +vt 0.873342 0.550199 +vt 0.938287 0.536081 +vt 0.930921 0.538012 +vt 0.922743 0.538013 +vt 0.938693 0.537991 +vt 0.886034 0.603157 +vt 0.866782 0.569074 +vt 0.868296 0.564551 +vt 0.886865 0.600670 +vt 0.868254 0.570811 +vt 0.869131 0.557930 +vt 0.887325 0.597029 +vt 0.868526 0.551283 +vt 0.886992 0.593375 +vt 0.867170 0.546710 +vt 0.930320 0.624700 +vt 0.886247 0.590861 +vt 0.930431 0.624578 +vt 0.868701 0.545026 +vt 0.944061 0.536045 +vt 0.833332 0.578908 +vt 0.869917 0.543668 +vt 0.944692 0.537954 +vt 0.832857 0.580816 +vt 0.832789 0.584529 +vt 0.944782 0.541667 +vt 0.938751 0.541705 +vt 0.930937 0.541725 +vt 0.922715 0.541726 +vt 0.915526 0.537993 +vt 0.874462 0.617039 +vt 0.874389 0.613326 +vt 0.915459 0.541706 +vt 0.915994 0.536082 +vt 0.869422 0.572210 +vt 0.874973 0.618946 +vt 0.686853 0.125996 +vt 0.901697 0.583027 +vt 0.940451 0.565467 +vt 0.902853 0.579573 +vt 0.941890 0.561161 +vt 0.907172 0.581017 +vt 0.691172 0.127439 +vt 0.906016 0.584471 +vt 0.937857 0.564551 +vt 0.699259 0.138507 +vt 0.475034 0.159701 +vt 0.699300 0.078015 +vt 0.324354 0.122792 +vt 0.939296 0.560246 +vt 0.684760 0.138507 +vt 0.667519 0.079359 +vt 0.454535 0.125631 +vt 0.552528 0.115664 +vt 0.695377 0.128845 +vt 0.910221 0.585876 +vt 0.943291 0.556970 +vt 0.911377 0.582422 +vt 0.944692 0.552778 +vt 0.915581 0.583828 +vt 0.914678 0.682999 +vt 0.699582 0.130251 +vt 0.914426 0.587282 +vt 0.941093 0.589503 +vt 0.667526 0.110036 +vt 0.940698 0.556054 +vt 0.552528 0.142602 +vt 0.942099 0.551863 +vt 0.947179 0.589503 +vt 0.916729 0.683691 +vt 0.837751 0.654217 +vt 0.705502 0.141387 +vt 0.676947 0.128691 +vt 0.893597 0.580319 +vt 0.678753 0.123288 +vt 0.682534 0.124552 +vt 0.897378 0.581583 +vt 0.705502 0.165680 +vt 0.680728 0.129955 +vt 0.937751 0.573541 +vt 0.894753 0.576865 +vt 0.939011 0.569772 +vt 0.898534 0.578129 +vt 0.653711 0.192293 +vt 0.935158 0.572625 +vt 0.324354 0.065547 +vt 0.711992 0.050888 +vt 0.244600 0.131156 +vt 0.936418 0.568856 +vt 0.684801 0.078015 +vt 0.667534 0.018529 +vt 0.699300 0.050888 +vt 0.279164 0.159620 +vt 0.271186 0.007291 +vt 0.561307 0.050888 +vt 0.587895 0.050888 +vt 0.244600 0.186286 +vt 0.385964 0.186213 +vt 0.760875 0.143290 +vt 0.297772 0.039649 +vt 0.235809 0.179028 +vt 0.271186 0.039649 +vt 0.400080 0.186063 +vt 0.587895 0.018529 +vt 0.699259 0.165341 +vt 0.614280 0.137000 +vt 0.344768 0.151644 +vt 0.614292 0.083246 +vt 0.644144 0.085514 +vt 0.244600 0.035067 +vt -0.001609 0.805037 +vt 0.346577 0.178485 +vt 0.244600 0.010798 +vt 0.186304 0.805037 +vt 0.710460 0.139850 +vt 0.680217 0.193373 +vt 0.233377 0.098739 +vt 0.587888 0.050888 +vt 0.561315 0.050888 +vt 0.538125 0.192121 +vt 0.604308 0.166823 +vt 0.534734 0.018529 +vt 0.555407 0.165455 +vt 0.667524 0.193373 +vt 0.655462 0.138116 +vt 0.324333 0.039649 +vt 0.809947 0.143359 +vt 0.297772 0.007291 +vt 0.501613 0.039643 +vt 0.542714 0.165456 +vt 0.371348 0.065674 +vt 0.669101 0.166954 +vt 0.570280 1.001414 +vt 0.475034 0.043151 +vt 0.678621 0.166954 +vt 0.534734 0.047380 +vt 0.570266 0.944607 +vt 0.947213 0.582128 +vt 0.836220 0.646842 +vt -0.003132 0.213635 +vt 0.900327 0.674390 +vt 0.863306 0.654217 +vt 0.109522 0.214444 +vt 0.861775 0.646842 +vt 0.919020 0.584977 +vt 0.915825 0.679571 +vt 0.703020 0.131400 +vt 0.917864 0.588431 +vt 0.301205 0.072696 +vt 0.303159 0.105899 +vt 0.701214 0.136804 +vt 0.303159 0.056791 +vt 0.287534 0.084135 +vt 0.693571 0.134249 +vt 0.303159 0.083807 +vt 0.697776 0.135654 +vt 0.351987 0.062571 +vt 0.705502 0.193430 +vt 0.685047 0.131399 +vt 0.351987 0.090321 +vt 0.287534 0.057118 +vt 0.689366 0.132843 +vt 0.878859 0.572770 +vt 0.919765 0.624216 +vt 0.919763 0.620334 +vt 0.878716 0.576651 +vt 0.920143 0.620334 +vt 0.482462 0.676815 +vt 0.651226 0.675622 +vt 0.920144 0.624591 +vt 0.878725 0.580534 +vt 0.919765 0.616451 +vt 0.920144 0.616076 +vt 0.313698 0.675622 +vt 0.482461 0.564607 +vt 0.499242 0.484611 +vt 0.711221 0.484463 +vt 0.657879 0.563372 +vt 0.307042 0.563372 +vt 0.287263 0.484463 +vt 0.286114 0.333526 +vt 0.499242 0.333674 +vt 0.712370 0.333526 +vt 0.879722 0.570311 +vt 0.680677 0.135053 +vt 0.895520 0.592084 +vt 0.664878 0.113279 +vt 0.880064 0.566655 +vt 0.938979 0.627278 +vt 0.898261 0.591444 +vt 0.882595 0.567432 +vt 0.939384 0.627117 +vt 0.881943 0.572558 +vt 0.932422 0.585965 +vt 0.882330 0.571144 +vt 0.880775 0.575990 +vt 0.665931 0.118959 +vt 0.667486 0.114113 +vt 0.938704 0.627164 +vt 0.899801 0.589656 +vt 0.895367 0.630367 +vt 0.939072 0.627002 +vt 0.929940 0.585047 +vt 0.897012 0.632176 +vt 0.885497 0.573767 +vt 0.934534 0.582724 +vt 0.669496 0.120188 +vt 0.884339 0.577219 +vt 0.899856 0.632854 +vt 0.931955 0.581808 +vt 0.760875 0.082807 +vt 0.658298 0.164038 +vt 0.676316 0.135088 +vt 0.663119 0.118689 +vt 0.690472 0.119665 +vt 0.469034 0.180591 +vt 0.561307 0.083246 +vt 0.275998 0.186190 +vt 0.271115 0.104279 +vt 0.475034 0.186184 +vt 0.587771 0.110123 +vt 0.297772 0.007291 +vt 0.706525 0.138144 +vt 0.456350 0.154102 +vt 0.187388 0.801758 +vt 0.508152 0.084664 +vt 0.467224 0.154102 +vt 0.133860 0.801708 +vt 0.561250 0.108705 +vt 0.888234 0.574684 +vt 0.935513 0.580017 +vt 0.932926 0.579101 +vt 0.667482 0.164038 +vt 0.595749 0.165455 +vt 0.314976 0.158289 +vt 0.604308 0.082766 +vt 0.641018 0.192293 +vt 0.933898 0.576394 +vt 0.324354 0.007291 +vt 0.324160 0.158289 +vt 0.641018 0.165375 +vt 0.936491 0.577310 +vt 0.890972 0.575601 +vt 0.672234 0.121106 +vt 0.887078 0.578137 +vt 0.889816 0.579055 +vt 0.674972 0.122024 +vt 0.686368 0.127240 +vt 0.670428 0.126509 +vt 0.686366 0.129565 +vt 0.705502 0.117094 +vt 0.673166 0.127427 +vt 0.664123 0.124360 +vt 0.665738 0.119531 +vt 0.690498 0.121879 +vt 0.686400 0.121879 +vt 0.686370 0.124916 +vt 0.667689 0.125591 +vt 0.584373 0.131780 +vt 0.881248 0.618108 +vt 0.939313 0.605918 +vt 0.883582 0.618107 +vt 0.936429 0.605918 +vt 0.883582 0.621000 +vt 0.584373 0.134673 +vt 0.881248 0.621001 +vt 0.941093 0.523726 +vt 0.939343 0.607712 +vt 0.592644 0.085514 +vt 0.542714 0.137000 +vt 0.936459 0.607712 +vt 0.525433 0.165457 +vt 0.592644 0.112451 +vt 0.684806 0.137036 +vt 0.667524 0.110036 +vt 0.584373 0.137645 +vt 0.881248 0.623973 +vt 0.933466 0.605918 +vt 0.883582 0.623972 +vt 0.883582 0.626943 +vt 0.930504 0.605918 +vt 0.584373 0.140617 +vt 0.881248 0.626945 +vt 0.324354 0.094170 +vt 0.933496 0.607712 +vt 0.324354 0.178214 +vt 0.699305 0.137036 +vt 0.437253 0.154104 +vt 0.930534 0.607712 +vt 0.324354 0.094170 +vt 0.338853 0.178214 +vt 0.297694 0.131156 +vt 0.699305 0.137036 +vt 0.563229 0.101132 +vt 0.580660 0.126521 +vt 0.881248 0.612849 +vt 0.584373 0.126521 +vt 0.584373 0.128887 +vt 0.881248 0.615215 +vt 0.563229 0.104050 +vt 0.580660 0.128887 +vt 0.904844 0.639672 +vt 0.883582 0.612848 +vt 0.902485 0.639672 +vt 0.942197 0.605918 +vt 0.883582 0.615213 +vt 0.863306 0.588441 +vt 1.001615 0.213635 +vt 0.904844 0.650451 +vt 0.902483 0.638378 +vt 0.837751 0.588441 +vt 0.947179 0.523726 +vt 0.942227 0.607712 +vt 0.861775 0.595816 +vt 0.888962 0.214443 +vt 0.836220 0.595816 +vt 0.947213 0.531101 +vt 0.495456 0.153347 +vt 0.451635 0.860853 +vt 0.587888 0.055470 +vt 0.506330 0.153347 +vt 0.451663 0.797868 +vt 0.297758 0.067426 +vt 0.640962 0.115343 +vt 0.587888 0.083246 +vt 0.561315 0.018529 +vt 0.653711 0.192215 +vt 0.644144 0.136672 +vt 0.591160 0.192284 +vt 0.810207 0.167580 +vt 0.437253 0.098753 +vt 0.640962 0.142220 +vt 0.711952 0.192305 +vt 0.760875 0.167512 +vt 0.341556 0.062822 +vt 0.639846 0.196756 +vt 0.261882 0.133315 +vt 0.437253 0.125631 +vt 0.699314 0.045507 +vt 0.614461 0.136920 +vt 0.241599 1.001492 +vt 0.710368 0.165341 +vt 0.614461 0.116762 +vt 0.290418 1.001492 +vt 0.594027 0.133660 +vt 0.534734 0.078664 +vt 0.938870 0.856837 +vt 0.274223 0.159622 +vt 0.534734 0.054395 +vt 0.246368 0.159622 +vt 0.692641 0.856837 +vt 0.883582 0.629545 +vt 0.927911 0.605918 +vt 0.925317 0.605918 +vt 0.883582 0.632147 +vt 0.584373 0.143218 +vt 0.881248 0.629546 +vt 0.584373 0.145820 +vt 0.881248 0.632148 +vt 0.707420 0.163398 +vt 0.563229 0.121726 +vt 0.580660 0.143219 +vt 0.580660 0.145820 +vt 0.563229 0.124935 +vt 0.686276 0.142513 +vt 0.703707 0.163398 +vt 0.563229 0.114852 +vt 0.580660 0.137645 +vt 0.563229 0.118517 +vt 0.580660 0.140617 +vt 0.563229 0.107618 +vt 0.580660 0.131780 +vt 0.563229 0.111187 +vt 0.580660 0.134674 +vt 0.922715 0.551130 +vt 0.930937 0.551129 +vt 0.930937 0.554698 +vt 0.922715 0.554699 +vt 0.938751 0.551109 +vt 0.938751 0.554677 +vt 0.922715 0.558364 +vt 0.930937 0.558363 +vt 0.930937 0.562028 +vt 0.922715 0.562029 +vt 0.938751 0.558343 +vt 0.938751 0.562008 +vt 0.874389 0.610408 +vt 0.915459 0.544624 +vt 0.922715 0.544644 +vt 0.922715 0.547562 +vt 0.915459 0.547542 +vt 0.874389 0.607490 +vt 0.930937 0.544643 +vt 0.930937 0.547561 +vt 0.938751 0.544623 +vt 0.938751 0.547540 +vt 0.832789 0.587447 +vt 0.944782 0.544585 +vt 0.832789 0.590365 +vt 0.944782 0.547503 +vt 0.832789 0.593933 +vt 0.944782 0.551071 +vt 0.832789 0.597502 +vt 0.944782 0.554640 +vt 0.832789 0.601167 +vt 0.944782 0.558305 +vt 0.832789 0.604832 +vt 0.944782 0.561970 +vt 0.938751 0.565217 +vt 0.832789 0.608041 +vt 0.944782 0.565179 +vt 0.832789 0.611250 +vt 0.944782 0.568388 +vt 0.938751 0.568425 +vt 0.930937 0.565237 +vt 0.930937 0.568445 +vt 0.922715 0.565238 +vt 0.922715 0.568446 +vt 0.874389 0.589814 +vt 0.915459 0.565218 +vt 0.874389 0.586605 +vt 0.915459 0.568427 +vt 0.874389 0.596688 +vt 0.915459 0.558344 +vt 0.874389 0.593023 +vt 0.915459 0.562009 +vt 0.874389 0.603922 +vt 0.915459 0.551110 +vt 0.874389 0.600353 +vt 0.915459 0.554679 +vt 0.341618 0.096471 +vt 0.592644 0.085514 +vt 0.501548 0.104360 +vt 0.706525 0.110476 +vt 0.604386 0.110447 +vt 0.534676 0.110123 +vt 0.454535 0.151945 +vt 0.390862 0.085514 +vt 0.341618 0.122792 +vt 0.524273 0.791873 +vt 0.542518 0.088624 +vt 0.328238 0.121009 +vt 0.556474 0.791873 +vt 0.325980 0.151265 +vt 0.508152 0.137000 +vt 0.941127 0.531101 +vt 0.400080 0.159801 +vt 0.559996 0.139158 +vt 0.308162 0.186378 +vt 0.508152 0.110123 +vt 0.941145 0.542662 +vt 0.614466 0.018529 +vt 0.261882 0.186190 +vt 0.489150 0.186184 +vt 0.534665 0.111542 +vt 0.461725 0.942002 +vt 0.487388 0.159701 +vt 0.534665 0.131700 +vt 0.688234 0.942002 +vt 0.309918 0.159620 +vt 0.233377 0.066381 +vt 0.641011 0.050888 +vt 0.233327 0.098739 +vt 0.697453 0.165641 +vt 0.655988 0.162366 +vt 0.604912 0.138116 +vt 0.534734 0.050888 +vt 0.520845 0.192044 +vt 0.206811 0.095231 +vt 0.363738 1.004481 +vt 0.536542 0.165457 +vt 0.206811 0.070962 +vt 0.426171 1.004481 +vt 0.695876 0.192209 +vt 0.641970 0.165375 +vt 0.707054 0.866536 +vt 0.326934 0.034103 +vt 0.652759 0.165375 +vt 0.754036 0.866319 +vt 0.326934 0.038735 +vt 0.860933 0.607376 +vt 0.712370 0.214888 +vt 0.835379 0.607376 +vt 0.947231 0.542662 +vt 0.860653 0.621329 +vt 0.499242 0.215036 +vt 0.835098 0.621329 +vt 0.947238 0.556615 +vt 0.860933 0.635282 +vt 0.286114 0.214888 +vt 0.835378 0.635282 +vt 0.947231 0.570567 +vt 0.398307 0.159801 +vt 0.444963 0.864212 +vt 0.587771 0.135581 +vt 0.684815 0.018529 +vt 0.308162 0.159620 +vt 0.684808 0.108545 +vt 0.641018 0.083159 +vt 0.492316 0.157543 +vt 0.341636 0.124951 +vt 0.279164 0.159620 +vt 0.534727 0.110123 +vt 0.699314 0.018529 +vt 0.534676 0.137000 +vt 0.293663 0.159620 +vt 0.684815 0.020688 +vt 0.627153 0.196756 +vt 0.296446 0.157462 +vt 0.324251 0.131156 +vt 0.712007 0.045507 +vt 0.697499 0.045494 +vt 0.561185 0.131700 +vt 0.001830 0.801395 +vt 0.686625 0.045494 +vt 0.001925 0.860310 +vt 0.667526 0.088459 +vt 0.534676 0.110123 +vt 0.666403 0.192215 +vt 0.542518 0.085514 +vt 0.206811 0.179184 +vt 0.297772 0.039649 +vt 0.501613 0.072002 +vt 0.324251 0.104279 +vt 0.810207 0.143359 +vt 0.561185 0.111542 +vt 0.110779 0.801395 +vt 0.492401 0.088988 +vt 0.561315 0.047380 +vt 0.384190 0.159801 +vt 0.685768 0.796037 +vt 0.561315 0.023111 +vt 0.701027 0.138507 +vt 0.471216 0.796037 +vt 0.258716 0.186286 +vt 0.941151 0.556615 +vt 0.371848 0.186213 +vt 0.614466 0.050888 +vt 0.297758 0.039649 +vt 0.256955 0.159622 +vt 0.692592 0.943376 +vt 0.587895 0.047380 +vt 0.344768 0.146378 +vt 0.984250 0.933886 +vt 0.719956 0.081567 +vt 0.344768 0.126327 +vt 0.833982 0.933858 +vt 0.440944 0.133042 +vt 0.561315 0.078664 +vt 0.296578 0.998874 +vt 0.589576 0.165450 +vt 0.561315 0.054395 +vt 0.362954 0.998874 +vt 0.553905 0.163813 +vt 0.711614 0.138507 +vt 0.471258 0.856504 +vt 0.271180 0.067426 +vt 0.838869 0.593941 +vt 0.541994 0.107613 +vt 0.549325 0.107617 +vt 0.549325 0.111186 +vt 0.838869 0.597510 +vt 0.541994 0.111182 +vt 0.556779 0.107618 +vt 0.556779 0.111187 +vt 0.838869 0.601175 +vt 0.541994 0.114847 +vt 0.549325 0.114851 +vt 0.549325 0.118516 +vt 0.838869 0.604841 +vt 0.541994 0.118512 +vt 0.556779 0.114852 +vt 0.556779 0.118518 +vt 0.541994 0.101127 +vt 0.838869 0.587455 +vt 0.838869 0.590373 +vt 0.541994 0.104045 +vt 0.549325 0.101131 +vt 0.549325 0.104049 +vt 0.556779 0.101132 +vt 0.556779 0.104050 +vt 0.556779 0.121726 +vt 0.556779 0.124935 +vt 0.679826 0.142513 +vt 0.549325 0.121725 +vt 0.549325 0.124934 +vt 0.672372 0.142512 +vt 0.838869 0.608049 +vt 0.541994 0.121721 +vt 0.541994 0.124930 +vt 0.665041 0.142508 +vt 0.838869 0.611258 +vt 0.670326 0.116669 +vt 0.885169 0.573700 +vt 0.676915 0.118662 +vt 0.676742 0.120789 +vt 0.672665 0.121897 +vt 0.669723 0.118561 +vt 0.665694 0.121931 +vt 0.880537 0.578963 +vt 0.884567 0.575592 +vt 0.684066 0.119474 +vt 0.684067 0.121677 +vt 0.679972 0.121882 +vt 0.672543 0.124919 +vt 0.880229 0.581957 +vt 0.665386 0.124926 +vt 0.679931 0.124916 +vt 0.670785 0.113061 +vt 0.885629 0.570093 +vt 0.677061 0.114528 +vt 0.684109 0.115185 +vt 0.679928 0.127241 +vt 0.656736 0.117097 +vt 0.679925 0.129565 +vt 0.672534 0.127243 +vt 0.672526 0.129566 +vt 0.880207 0.584279 +vt 0.665364 0.127247 +vt 0.665342 0.129569 +vt 0.880185 0.586600 +vt 0.880185 0.596683 +vt 0.665342 0.139652 +vt 0.672526 0.139649 +vt 0.672526 0.143315 +vt 0.880185 0.600349 +vt 0.665342 0.143317 +vt 0.303221 0.062573 +vt 0.656736 0.193433 +vt 0.679925 0.139648 +vt 0.303221 0.090324 +vt 0.238768 0.057121 +vt 0.679925 0.143314 +vt 0.880185 0.603917 +vt 0.665342 0.146886 +vt 0.672526 0.146883 +vt 0.672526 0.150452 +vt 0.880185 0.607486 +vt 0.665342 0.150454 +vt 0.254393 0.056794 +vt 0.238768 0.084137 +vt 0.679925 0.146882 +vt 0.679925 0.150451 +vt 0.254393 0.083810 +vt 0.665342 0.132778 +vt 0.880185 0.589809 +vt 0.880185 0.593018 +vt 0.665342 0.135987 +vt 0.672526 0.132775 +vt 0.672526 0.135984 +vt 0.656736 0.141389 +vt 0.679925 0.132774 +vt 0.656736 0.165682 +vt 0.679925 0.135983 +vt 0.252439 0.072699 +vt 0.679925 0.153369 +vt 0.254393 0.105902 +vt 0.252439 0.094791 +vt 0.679925 0.156287 +vt 0.672526 0.153370 +vt 0.672526 0.156288 +vt 0.880185 0.610404 +vt 0.665342 0.153372 +vt 0.880185 0.613322 +vt 0.665342 0.156290 +vt 0.930063 0.624309 +vt 0.670272 0.105776 +vt 0.863631 0.541323 +vt 0.663685 0.103761 +vt 0.663901 0.101635 +vt 0.652921 0.143373 +vt 0.670914 0.103887 +vt 0.645809 0.143369 +vt 0.839168 0.578916 +vt 0.864273 0.539434 +vt 0.656535 0.102925 +vt 0.746609 0.168316 +vt 0.656578 0.100722 +vt 0.746612 0.168158 +vt 0.660281 0.143374 +vt 0.652850 0.145281 +vt 0.549335 0.094500 +vt 0.645547 0.145277 +vt 0.542032 0.094496 +vt 0.838906 0.580824 +vt 0.660293 0.145282 +vt 0.556777 0.094501 +vt 0.930027 0.624571 +vt 0.669775 0.109382 +vt 0.733637 0.130897 +vt 0.884027 0.589881 +vt 0.663497 0.107894 +vt 0.730185 0.130079 +vt 0.656449 0.107212 +vt 0.726310 0.129704 +vt 0.556779 0.098214 +vt 0.549325 0.098213 +vt 0.541994 0.098209 +vt 0.838869 0.584537 +vt 0.733664 0.141901 +vt 0.884055 0.600885 +vt 0.730033 0.142216 +vt 0.730166 0.137927 +vt 0.733923 0.137993 +vt 0.884314 0.596977 +vt 0.726099 0.142316 +vt 0.726183 0.137858 +vt 0.730182 0.133636 +vt 0.733800 0.134077 +vt 0.884191 0.593062 +vt 0.726253 0.133399 +vt 0.883782 0.604058 +vt 0.733391 0.145074 +vt 0.712296 0.111730 +vt 0.862687 0.570714 +vt 0.729913 0.145771 +vt 0.705971 0.112998 +vt 0.726027 0.146011 +vt 0.632771 0.062484 +vt 0.698904 0.113433 +vt 0.665078 0.147151 +vt 0.838906 0.615901 +vt 0.672382 0.147159 +vt 0.672452 0.150180 +vt 0.718331 0.067999 +vt 0.665340 0.150145 +vt 0.711253 0.070029 +vt 0.885081 0.538779 +vt 0.839168 0.618895 +vt 0.068109 0.073416 +vt 0.679824 0.147162 +vt 0.679812 0.150196 +vt 0.725677 0.067316 +vt 0.718444 0.070130 +vt 0.711802 0.071937 +vt 0.885630 0.540687 +vt 0.725615 0.069519 +vt 0.665060 0.144830 +vt 0.838888 0.613580 +vt 0.672377 0.144836 +vt 0.068115 0.055817 +vt 0.679825 0.144838 +vt 0.725538 0.073807 +vt 0.718475 0.074266 +vt 0.885989 0.544306 +vt 0.712161 0.075556 +vt 0.665386 0.160003 +vt 0.880229 0.617034 +vt 0.672543 0.160001 +vt 0.672665 0.161908 +vt 0.641705 0.121220 +vt 0.665694 0.161910 +vt 0.648791 0.119214 +vt 0.863635 0.576245 +vt 0.880537 0.618942 +vt 0.679931 0.159999 +vt 0.679972 0.161907 +vt 0.634355 0.121877 +vt 0.641563 0.119088 +vt 0.706016 0.117135 +vt 0.648215 0.117303 +vt 0.712668 0.115350 +vt 0.863059 0.574334 +vt 0.634388 0.119674 +vt 0.632299 0.094948 +vt 0.698841 0.117721 +vt 0.711668 0.081329 +vt 0.885496 0.550079 +vt 0.718261 0.080734 +vt 0.718041 0.088534 +vt 0.677025 0.100253 +vt 0.711216 0.088439 +vt 0.670201 0.100157 +vt 0.885044 0.557189 +vt 0.725413 0.080526 +vt 0.725281 0.088636 +vt 0.684265 0.100355 +vt 0.677028 0.108057 +vt 0.670454 0.107277 +vt 0.885298 0.564308 +vt 0.684171 0.108465 +vt 0.671846 0.083186 +vt 0.167878 0.943740 +vt 0.604308 0.139237 +vt 0.684808 0.081567 +vt 0.287854 0.943740 +vt 0.415954 0.159801 +vt 0.534734 0.023111 +vt 0.655300 0.165375 +vt 0.487678 0.944607 +vt 0.492401 0.136672 +vt 0.279164 0.157463 +vt 0.641011 0.077765 +vt 0.233327 0.125616 +vt 0.595749 0.139158 +vt 0.614461 0.170646 +vt 0.595749 0.192213 +vt 0.561185 0.165452 +vt 0.442319 0.133642 +vt 0.279164 0.131156 +vt 0.129476 0.735323 +vt 0.442319 0.115476 +vt 0.129283 0.776952 +vt 0.314976 0.159620 +vt 0.721195 0.044640 +vt 0.667534 0.018529 +vt 0.699259 0.192305 +vt 0.341556 0.010016 +vt 0.760875 0.143290 +vt 0.658298 0.163202 +vt 0.541162 0.130699 +vt 0.757770 0.082791 +vt 0.722297 0.018529 +vt 0.264582 0.801994 +vt 0.658298 0.136913 +vt 0.729182 0.018529 +vt 0.304655 0.802489 +vt 0.550034 0.115664 +vt 0.266202 0.132775 +vt 0.185576 0.735323 +vt 0.710405 0.110036 +vt 0.730319 0.191617 +vt 0.604308 0.082766 +vt 0.721171 0.077151 +vt 0.721135 0.192173 +vt 0.271180 0.072008 +vt 0.297758 0.104279 +vt 0.711998 0.136784 +vt 0.655462 0.082807 +vt 0.721135 0.191617 +vt 0.667534 0.045406 +vt 0.644144 0.112451 +vt 0.508152 0.083246 +vt 0.578467 0.192284 +vt 0.475034 0.072002 +vt 0.721181 0.136784 +vt 0.809060 0.082791 +vt 0.722215 0.165341 +vt 0.103658 0.998282 +vt 0.806379 0.032225 +vt 0.729103 0.165341 +vt 0.103804 0.943323 +vt 0.658182 0.032225 +vt 0.306355 0.185724 +vt 0.084796 0.939068 +vt 0.492316 0.131237 +vt 0.295481 0.185724 +vt 0.155115 0.938742 +vt 0.684815 0.046995 +vt 0.697446 0.165641 +vt 0.746833 0.745262 +vt 0.328675 0.149646 +vt 0.686571 0.165641 +vt 0.671839 0.052507 +vt 0.747084 0.799592 +vt 0.525433 0.139173 +vt 0.578467 0.163294 +vt 0.627153 0.170646 +vt 0.587760 0.137000 +vt 0.608442 0.192213 +vt 0.711992 0.077652 +vt 0.809060 0.032225 +vt 0.721178 0.081567 +vt 0.525433 0.165462 +vt 0.367180 0.792692 +vt 0.722255 0.107811 +vt 0.512472 0.163833 +vt 0.409873 0.792722 +vt 0.632750 0.142220 +vt 0.664820 0.165375 +vt 0.487692 1.001414 +vt 0.475034 0.067419 +vt 0.721195 0.045206 +vt 0.371336 0.065674 +vt 0.525433 0.192121 +vt 0.508152 0.050888 +vt 0.604308 0.142602 +vt 0.475034 0.104360 +vt 0.368455 0.175913 +vt 0.463817 0.098753 +vt 0.712007 0.045206 +vt 0.244600 0.104279 +vt 0.713375 0.138507 +vt 0.641011 0.083159 +vt 0.645237 0.130707 +vt 0.271180 0.104279 +vt 0.297758 0.072008 +vt 0.359267 0.175913 +vt 0.713232 0.018529 +vt 0.271171 0.100777 +vt 0.174663 0.938844 +vt 0.720122 0.018529 +vt 0.174658 0.998772 +vt 0.437253 0.095251 +vt 0.371356 0.000958 +vt 0.655462 0.110447 +vt 0.614461 0.083246 +vt 0.809947 0.115690 +vt 0.244600 0.072008 +vt 0.760875 0.115622 +vt 0.501622 0.039643 +vt 0.221310 0.179028 +vt 0.344768 0.028734 +vt 0.801872 0.733190 +vt 0.655798 0.113952 +vt 0.344768 0.004465 +vt 0.664005 0.733190 +vt 0.223125 0.152350 +vt 0.667519 0.052307 +vt 0.699158 1.005132 +vt 0.706525 0.159343 +vt 0.667519 0.072464 +vt 0.699158 0.945679 +vt 0.597328 0.165455 +vt 0.373603 0.159801 +vt 0.685809 0.856504 +vt 0.271180 0.043157 +vt 0.655462 0.162337 +vt 0.244600 0.072008 +vt 0.655824 0.162366 +vt 0.641011 0.050888 +vt 0.390407 0.148224 +vt 0.604308 0.082779 +vt 0.592644 0.148224 +vt 0.757770 0.082807 +vt 0.655462 0.179862 +vt 0.371336 0.098033 +vt 0.684760 0.165641 +vt 0.587760 0.110123 +vt 0.655988 0.138144 +vt 0.860350 0.032225 +vt 0.592644 0.130699 +vt 0.463817 0.066395 +vt 0.604735 0.177833 +vt 0.231822 0.998745 +vt 0.437253 0.070982 +vt 0.604735 0.164689 +vt 0.271171 0.076573 +vt 0.231674 0.938844 +vt 0.206811 0.120315 +vt 0.828586 0.940322 +vt 0.562780 0.192217 +vt 0.206811 0.100158 +vt 0.754766 0.940322 +vt 0.655462 0.141149 +vt 0.699307 0.108545 +vt 0.684801 0.077200 +vt 0.471817 0.127789 +vt 0.428311 0.185911 +vt 0.440944 0.085514 +vt 0.293663 0.159620 +vt 0.614292 0.110123 +vt 0.686622 0.081567 +vt 0.207916 0.715017 +vt 0.561250 0.104822 +vt 0.697497 0.081567 +vt 0.208055 0.807249 +vt 0.587771 0.104822 +vt 0.684801 0.050888 +vt 0.811179 0.799592 +vt 0.291856 0.185731 +vt 0.167420 0.859166 +vt 0.458855 0.152483 +vt 0.604308 0.119034 +vt 0.287396 0.859166 +vt 0.471817 0.154102 +vt 0.426541 0.159801 +vt 0.651057 0.785208 +vt 0.706525 0.164396 +vt 0.614461 0.055464 +vt 0.574515 0.785208 +vt 0.714447 0.165170 +vt 0.614461 0.079667 +vt 0.574522 0.738744 +vt 0.721337 0.165170 +vt 0.641018 0.111851 +vt 0.650857 0.738765 +vt 0.706525 0.177540 +vt 0.641018 0.087713 +vt -0.002560 0.943079 +vt 0.601643 0.032225 +vt 0.722250 0.050888 +vt -0.002696 1.001950 +vt 0.729138 0.050888 +vt 0.233304 0.127034 +vt 0.292478 0.935540 +vt 0.695641 0.115268 +vt 0.671833 0.165326 +vt 0.221750 0.935508 +vt 0.722259 0.136268 +vt 0.684760 0.166954 +vt 0.221290 0.871782 +vt 0.729143 0.136268 +vt 0.631656 0.142220 +vt 0.291838 0.871782 +vt 0.695641 0.128412 +vt 0.618760 0.143826 +vt 0.150220 0.871356 +vt 0.644144 0.088870 +vt 0.547035 0.163837 +vt 0.150220 0.931285 +vt 0.401843 0.186032 +vt 0.559996 0.165455 +vt 0.100763 0.931056 +vt 0.542714 0.137000 +vt 0.412429 0.186032 +vt 0.100763 0.871127 +vt 0.529753 0.138619 +vt 0.644144 0.109072 +vt 0.524399 0.719919 +vt 0.341618 0.065547 +vt 0.542518 0.110067 +vt 0.556600 0.719919 +vt 0.328238 0.067329 +vt 0.337216 0.151265 +vt 0.753088 0.746942 +vt 0.595749 0.165450 +vt 0.616046 0.196876 +vt 0.797000 0.747145 +vt 0.578467 0.137000 +vt 0.625565 0.196876 +vt 0.938822 0.943376 +vt 0.587895 0.023111 +vt 0.263637 0.159622 +vt 0.311061 0.860853 +vt 0.604579 0.113899 +vt 0.587888 0.079738 +vt 0.311089 0.797868 +vt 0.604579 0.134651 +vt 0.297758 0.043157 +vt 0.308905 0.864212 +vt 0.492401 0.088886 +vt 0.587771 0.115423 +vt 0.110875 0.860310 +vt 0.492401 0.109739 +vt 0.667526 0.108617 +vt 0.241562 0.940958 +vt 0.641031 0.023829 +vt 0.700849 0.165341 +vt 0.290381 0.940958 +vt 0.641031 0.043987 +vt 0.594027 0.115494 +vt 0.363749 0.939264 +vt 0.344768 0.069182 +vt 0.527022 0.165457 +vt 0.426182 0.939264 +vt 0.344768 0.093451 +vt 0.686357 0.192209 +vt 0.542714 0.163299 +vt 0.414195 0.159801 +vt 0.271115 0.131156 +vt 0.322277 0.186378 +vt 0.604386 0.082779 +vt 0.587771 0.083246 +vt 0.390862 0.113182 +vt 0.684806 0.112195 +vt 0.542518 0.113182 +vt 0.641018 0.110036 +vt 0.221310 0.179184 +vt 0.244600 0.039649 +vt 0.359267 0.151644 +vt 0.501622 0.007285 +vt 0.644144 0.113182 +vt 0.534727 0.083246 +vt 0.721181 0.110036 +vt 0.684760 0.140678 +vt 0.711999 0.108324 +vt 0.655462 0.082779 +vt 0.721171 0.077652 +vt 0.706616 0.082807 +vt 0.810165 0.115690 +vt 0.730358 0.081567 +vt 0.985067 0.996475 +vt 0.713072 0.081567 +vt 0.645336 0.032225 +vt 0.834398 0.996475 +vt 0.440944 0.146186 +vt 0.606971 0.032225 +vt 0.163682 0.928410 +vt 0.695641 0.132742 +vt 0.297737 0.100788 +vt 0.087308 0.928382 +vt 0.720049 0.165341 +vt 0.297737 0.076584 +vt 0.087511 0.866956 +vt 0.713162 0.165341 +vt 0.614467 0.023084 +vt 0.163678 0.866956 +vt 0.695641 0.145892 +vt 0.614467 0.047222 +vt 0.286845 0.861406 +vt 0.860350 0.119131 +vt 0.271180 0.068500 +vt 0.140028 0.861406 +vt 0.219501 0.152350 +vt 0.271180 0.044232 +vt 0.139998 0.795624 +vt 0.208626 0.152350 +vt 0.324354 0.035067 +vt 0.286816 0.795623 +vt 0.860350 0.139882 +vt 0.324354 0.010798 +vt 0.296567 0.936596 +vt 0.534727 0.078664 +vt 0.580057 0.165450 +vt 0.362942 0.936596 +vt 0.534727 0.054395 +vt 0.553905 0.145647 +vt 0.762060 1.005086 +vt 0.561250 0.111542 +vt 0.706525 0.141177 +vt 0.762060 0.945634 +vt 0.561250 0.131700 +vt 0.606847 0.165455 +vt 0.526713 0.796750 +vt 0.475034 0.109661 +vt 0.655462 0.107033 +vt 0.461918 0.861956 +vt 0.244600 0.105698 +vt 0.476801 0.159701 +vt 0.688428 0.861956 +vt 0.244600 0.125856 +vt 0.320505 0.159620 +vt 0.155115 0.855786 +vt 0.686614 0.050888 +vt 0.671854 0.045376 +vt 0.084796 0.856111 +vt 0.479354 0.132856 +vt 0.697489 0.050888 +vt 0.707054 0.803222 +vt 0.341556 0.036419 +vt 0.710674 0.145115 +vt 0.754036 0.803005 +vt 0.710674 0.165703 +vt 0.341556 0.036419 +vt 0.651489 0.737042 +vt 0.709681 0.091011 +vt 0.659458 0.136913 +vt 0.747814 0.737042 +vt 0.604308 0.182066 +vt 0.706616 0.115622 +vt 0.747186 0.789004 +vt 0.604308 0.168928 +vt 0.612985 0.137000 +vt 0.650617 0.789030 +vt 0.666346 0.136913 +vt 0.600058 0.138629 +vt 0.004056 0.875480 +vt 0.710405 0.078022 +vt 0.248921 0.158003 +vt 0.079746 0.875480 +vt 0.638254 0.170646 +vt 0.261882 0.159622 +vt 0.080006 0.931645 +vt 0.628734 0.170646 +vt 0.296446 0.131156 +vt 0.004316 0.931645 +vt 0.700885 0.078022 +vt 0.283484 0.132775 +vt 0.810928 0.745262 +vt 0.341636 0.151265 +vt 0.280982 0.185731 +vt 0.304655 0.728016 +vt 0.316135 0.131156 +vt 0.553101 0.090990 +vt 0.264562 0.727333 +vt 0.323023 0.131156 +vt 0.645338 0.138542 +vt 0.133860 0.858876 +vt 0.655462 0.086222 +vt 0.561250 0.088547 +vt 0.187388 0.858927 +vt 0.655462 0.106973 +vt 0.508152 0.104822 +vt -0.001647 0.720842 +vt 0.357451 0.178485 +vt 0.475034 0.011867 +vt 0.186266 0.720842 +vt 0.710460 0.119098 +vt 0.475034 0.036136 +vt 0.828529 0.996759 +vt 0.271180 0.109580 +vt 0.572299 0.192217 +vt 0.754709 0.996759 +vt 0.655462 0.159315 +vt 0.271180 0.129737 +vt 0.157887 1.002813 +vt 0.501586 0.102473 +vt 0.367844 0.202411 +vt 0.108714 1.002786 +vt 0.501586 0.074969 +vt 0.720553 0.110036 +vt 0.108843 0.942968 +vt 0.324313 0.101325 +vt 0.712747 0.110036 +vt 0.157882 0.942968 +vt 0.324313 0.073894 +vt 0.360035 0.202411 +vt 0.621140 0.953882 +vt 0.713065 0.050888 +vt 0.819202 0.082791 +vt 0.712633 0.953882 +vt 0.857670 0.082791 +vt 0.542095 0.132738 +vt 0.712880 0.993855 +vt 0.542095 0.145882 +vt 0.755049 0.032225 +vt 0.621630 0.993837 +vt 0.719949 0.050888 +vt 0.716683 0.032225 +vt 0.365837 0.807249 +vt 0.587771 0.084664 +vt 0.694286 0.088957 +vt 0.365699 0.715017 +vt 0.694286 0.109708 +vt 0.561250 0.084664 +vt 0.801844 0.794963 +vt 0.271186 0.011873 +vt 0.655798 0.134704 +vt 0.663977 0.794963 +vt 0.271186 0.036142 +vt 0.234000 0.152350 +vt 0.746837 0.749913 +vt 0.686613 0.110036 +vt 0.671845 0.136888 +vt 0.806911 0.749913 +vt 0.440944 0.109726 +vt 0.684806 0.138507 +vt 0.806675 0.800835 +vt 0.454535 0.125631 +vt 0.440944 0.088975 +vt 0.746602 0.800835 +vt 0.697487 0.110036 +vt 0.441574 0.127250 +vt 0.628174 0.996468 +vt 0.509729 0.165462 +vt 0.344768 0.037898 +vt 0.558678 0.996468 +vt 0.544298 0.192133 +vt 0.344768 0.062167 +vt 0.558690 0.944480 +vt 0.508152 0.022037 +vt 0.553817 0.192133 +vt 0.628186 0.944480 +vt 0.508152 0.046305 +vt 0.519249 0.165462 +vt 0.486936 0.999431 +vt 0.297737 0.105698 +vt 0.860350 0.146371 +vt 0.436189 0.999431 +vt 0.297737 0.125855 +vt 0.710423 0.018529 +vt 0.436150 0.944361 +vt 0.463769 0.120330 +vt 0.700904 0.018529 +vt 0.486897 0.944361 +vt 0.860350 0.164537 +vt 0.463769 0.100172 +vt 0.185384 0.776952 +vt 0.302015 0.158001 +vt 0.700886 0.110036 +vt 0.366897 0.733180 +vt 0.860350 0.115690 +vt 0.729140 0.107811 +vt 0.409482 0.733180 +vt 0.857283 0.091016 +vt 0.639638 0.142220 +vt 0.049691 0.998282 +vt 0.592644 0.128585 +vt 0.767912 0.032225 +vt 0.049979 0.943348 +vt 0.592644 0.115448 +vt 0.696548 0.032225 +s 1 +usemtl calculator +f 1/1/1 2/6/2 3/11/1 4/12/1 +f 2/6/3 5/13/4 6/18/4 3/11/4 +f 4/12/5 3/11/6 7/19/6 8/20/6 +f 3/11/7 6/18/8 9/21/7 7/19/7 +f 10/22/9 11/30/10 12/38/9 13/41/10 +f 14/44/11 15/52/11 16/57/12 17/60/12 +f 18/63/13 10/23/13 13/42/13 19/71/13 +f 20/74/14 21/79/15 22/84/14 23/87/16 +f 5/13/17 15/53/17 24/90/17 6/18/17 +f 6/18/18 24/90/19 25/91/20 9/21/21 +f 9/21/22 25/91/22 26/93/23 27/94/24 +f 7/19/25 9/21/25 27/94/25 28/96/25 +f 8/20/26 7/19/26 28/96/26 29/98/26 +f 30/100/27 8/20/27 29/98/28 31/102/29 +f 32/103/30 4/12/31 8/20/32 30/100/33 +f 33/104/34 1/1/34 4/12/34 32/103/34 +f 34/109/35 35/111/36 36/112/36 37/113/35 +f 35/111/36 38/116/37 39/117/38 36/112/36 +f 37/113/39 36/112/40 40/118/40 41/119/39 +f 36/112/40 39/117/41 42/121/42 40/118/40 +f 43/122/43 44/125/44 34/110/44 45/126/43 +f 44/124/44 46/128/45 35/111/46 34/109/44 +f 46/128/45 47/130/47 38/116/47 35/111/46 +f 47/130/48 31/101/48 29/99/48 38/116/48 +f 38/116/49 29/99/49 28/97/50 39/117/49 +f 39/117/51 28/97/51 27/95/51 42/121/51 +f 42/121/52 27/95/52 26/92/52 48/131/52 +f 40/118/53 42/121/54 48/131/54 49/133/55 +f 41/119/56 40/118/53 49/133/55 50/135/56 +f 51/136/57 41/120/56 50/134/56 52/138/57 +f 53/140/58 37/114/39 41/120/39 51/136/58 +f 45/126/59 34/110/35 37/115/35 53/141/59 +f 54/144/60 55/147/60 56/149/60 57/152/60 +f 55/146/61 58/156/62 59/160/62 56/150/62 +f 57/153/63 56/151/64 60/164/64 61/166/63 +f 56/151/65 59/161/66 62/170/67 60/164/68 +f 63/173/69 64/177/70 54/145/70 65/178/71 +f 64/176/72 66/181/72 55/147/72 54/144/72 +f 66/180/73 67/183/74 58/157/73 55/148/74 +f 67/182/75 68/184/76 69/186/75 58/158/76 +f 58/159/77 69/185/78 70/188/78 59/162/77 +f 59/163/79 70/187/80 71/190/81 62/171/80 +f 62/172/82 71/189/83 72/192/83 73/193/84 +f 60/165/85 62/172/82 73/193/84 74/195/86 +f 61/167/87 60/165/85 74/195/86 75/198/88 +f 76/204/89 61/168/87 75/199/88 77/206/90 +f 78/207/91 57/154/63 61/169/63 76/202/91 +f 65/178/92 54/145/93 57/155/94 78/208/92 +f 79/211/95 80/212/96 81/213/95 82/216/96 +f 80/212/97 83/217/98 84/218/97 81/213/98 +f 82/216/99 81/213/100 85/220/99 86/222/100 +f 81/214/101 84/219/102 87/224/102 85/221/102 +f 88/226/103 89/227/103 79/211/103 90/228/103 +f 89/227/104 91/230/105 80/212/104 79/211/106 +f 91/230/107 92/231/108 83/217/109 80/212/108 +f 92/231/110 93/233/110 94/234/110 83/217/110 +f 83/217/111 94/234/112 95/236/112 84/218/112 +f 84/219/113 95/237/113 96/239/114 87/224/113 +f 87/224/115 96/239/116 97/240/115 98/241/115 +f 85/221/117 87/224/118 98/241/118 99/242/119 +f 86/223/120 85/221/121 99/242/122 100/243/120 +f 101/244/123 86/223/124 100/243/124 102/245/124 +f 103/248/125 82/215/125 86/223/125 101/244/126 +f 90/228/127 79/211/128 82/216/127 103/246/127 +f 104/249/129 105/253/130 106/257/131 107/261/132 +f 105/254/133 108/265/134 109/270/133 106/258/135 +f 107/262/136 106/259/137 110/273/138 111/274/138 +f 106/260/139 109/271/139 112/276/139 110/272/139 +f 113/280/140 114/282/141 104/250/141 115/283/142 +f 114/281/143 116/288/144 105/255/143 104/251/143 +f 116/287/145 117/289/145 108/266/145 105/256/146 +f 118/294/147 119/299/147 120/304/147 121/307/147 +f 108/267/148 33/104/148 32/103/148 109/271/149 +f 109/271/150 32/103/151 30/100/152 112/276/151 +f 112/276/153 30/100/153 31/102/153 47/129/154 +f 110/273/155 112/277/155 47/130/155 46/128/155 +f 111/274/156 110/273/157 46/128/157 44/124/158 +f 122/310/159 111/275/156 44/125/158 43/122/159 +f 123/312/160 107/263/161 111/275/161 122/310/160 +f 115/284/162 104/252/163 107/264/163 123/313/162 +f 124/316/164 125/318/164 126/320/164 127/322/164 +f 125/319/164 128/324/164 129/325/164 126/321/164 +f 127/322/164 126/320/164 130/327/164 131/328/164 +f 126/321/164 129/325/164 132/330/164 130/326/164 +f 77/205/90 75/200/88 124/317/164 133/331/164 +f 75/201/88 74/196/86 125/318/164 124/316/164 +f 74/197/86 73/194/84 128/324/164 125/319/164 +f 73/194/84 72/191/164 134/332/164 128/324/164 +f 128/324/164 134/332/164 135/334/164 129/325/164 +f 129/325/164 135/334/164 136/336/164 132/330/164 +f 132/330/164 136/336/164 137/338/164 138/340/165 +f 130/326/164 132/330/164 138/340/165 139/342/166 +f 131/328/164 130/327/164 139/343/166 140/345/167 +f 141/349/164 131/329/164 140/346/167 142/352/168 +f 143/353/164 127/323/164 131/329/164 141/349/164 +f 133/331/164 124/317/164 127/323/164 143/353/164 +f 144/354/169 145/356/170 146/357/170 147/360/169 +f 145/356/171 148/364/172 149/366/173 146/357/174 +f 147/361/175 146/358/175 150/370/175 151/374/175 +f 146/359/176 149/367/176 152/378/176 150/371/177 +f 142/350/168 140/347/167 144/355/178 153/382/179 +f 140/348/167 139/344/166 145/356/180 144/354/178 +f 139/344/166 138/341/165 148/364/181 145/356/180 +f 138/341/182 137/339/183 154/385/183 148/364/184 +f 148/365/185 154/386/186 155/388/185 149/368/187 +f 149/369/188 155/387/189 156/390/189 152/379/188 +f 152/380/190 156/389/191 157/391/190 158/392/191 +f 150/372/192 152/381/193 158/393/192 159/394/193 +f 151/375/194 150/373/194 159/395/194 160/396/194 +f 161/398/195 151/376/196 160/397/196 162/403/197 +f 163/404/198 147/362/199 151/377/200 161/399/198 +f 153/382/201 144/355/169 147/363/169 163/405/201 +f 164/408/202 165/409/202 166/410/202 167/413/202 +f 165/409/203 168/414/203 169/415/203 166/410/203 +f 167/412/204 166/411/204 170/417/204 171/418/204 +f 166/411/205 169/416/205 172/419/205 170/417/205 +f 173/421/206 174/422/207 164/408/208 175/424/209 +f 174/422/207 176/425/210 165/409/211 164/408/208 +f 176/425/210 177/427/212 168/414/213 165/409/211 +f 177/427/212 178/429/214 179/433/215 168/414/213 +f 168/414/216 179/433/217 180/436/217 169/415/217 +f 169/416/218 180/434/219 181/437/218 172/419/218 +f 172/419/220 181/437/221 182/440/220 183/441/222 +f 170/417/223 172/419/223 183/441/224 184/442/224 +f 171/418/225 170/417/225 184/442/226 185/443/226 +f 186/444/227 171/418/228 185/443/227 187/447/228 +f 188/448/229 167/412/230 171/418/230 186/444/230 +f 175/424/231 164/408/232 167/413/231 188/449/231 +f 189/452/233 190/454/233 191/456/233 192/458/233 +f 190/453/234 193/459/234 194/464/234 191/455/234 +f 195/470/233 196/472/233 197/474/233 198/477/233 +f 196/471/234 199/480/234 200/482/234 197/473/234 +f 201/487/235 202/489/236 203/490/236 204/493/235 +f 202/488/233 205/495/233 206/497/233 203/491/233 +f 205/494/234 207/499/234 208/503/234 206/496/234 +f 209/508/237 210/516/238 211/524/239 212/527/240 +f 213/530/241 214/538/241 215/546/241 216/549/241 +f 199/478/242 21/80/242 217/552/242 200/483/242 +f 218/554/242 219/557/242 68/184/242 67/182/242 +f 220/560/243 218/555/243 67/183/243 66/180/243 +f 221/562/233 220/559/233 66/181/233 64/176/233 +f 222/565/235 221/561/236 64/177/236 63/173/235 +f 223/568/235 195/469/236 198/476/236 224/570/235 +f 225/573/235 189/451/236 192/457/236 226/576/235 +f 227/578/244 228/579/244 229/581/245 230/584/245 +f 228/579/246 231/586/246 232/587/247 229/581/247 +f 230/583/248 229/582/249 233/589/249 234/592/248 +f 229/582/249 232/588/250 235/593/250 233/589/249 +f 137/339/183 136/337/251 227/577/251 154/385/183 +f 136/337/251 135/335/252 228/580/252 227/577/251 +f 135/335/252 134/333/253 231/585/253 228/580/252 +f 134/333/253 72/192/83 71/189/83 231/585/253 +f 231/586/254 71/190/255 70/187/255 232/587/254 +f 232/588/250 70/188/78 69/185/78 235/593/250 +f 235/594/256 69/186/257 68/184/256 236/595/256 +f 233/590/258 235/594/258 236/595/258 237/596/258 +f 234/591/259 233/590/259 237/596/259 238/597/259 +f 156/389/260 234/591/261 238/597/261 157/391/261 +f 155/387/189 230/583/248 234/592/248 156/390/189 +f 154/386/262 227/578/263 230/584/263 155/388/262 +f 239/598/264 240/602/264 241/605/265 242/609/266 +f 240/603/267 243/613/267 244/616/267 241/606/267 +f 242/610/268 241/607/269 245/619/270 246/622/271 +f 241/608/272 244/617/273 247/624/274 245/620/273 +f 52/138/275 50/134/276 239/599/277 248/627/275 +f 50/135/276 49/133/278 240/604/278 239/600/277 +f 49/133/279 48/131/279 243/614/279 240/604/279 +f 48/132/280 26/93/281 25/91/281 243/615/281 +f 243/615/282 25/91/283 24/90/282 244/618/284 +f 244/618/285 24/90/286 15/53/286 247/623/286 +f 249/630/13 18/64/13 250/638/13 251/641/13 +f 252/645/287 253/646/287 254/652/287 255/656/287 +f 256/659/288 252/644/289 255/657/288 257/660/289 +f 258/663/290 256/658/291 257/661/291 259/666/292 +f 260/667/293 242/611/294 246/621/294 261/672/293 +f 248/628/295 239/601/296 242/612/296 260/668/295 +f 262/674/297 263/676/297 264/678/297 265/680/297 +f 263/675/298 266/682/298 267/685/298 264/677/298 +f 268/691/297 269/693/297 270/694/297 271/697/297 +f 269/692/298 272/699/298 273/703/298 270/695/298 +f 274/709/299 275/711/300 276/712/300 277/715/299 +f 275/710/297 278/717/297 279/720/297 276/713/297 +f 278/716/301 280/723/302 281/724/301 279/718/303 +f 280/721/304 282/728/305 283/730/306 281/725/307 +f 10/24/241 18/65/241 284/732/241 285/735/241 +f 286/738/15 287/746/16 288/754/16 289/757/16 +f 209/509/308 249/631/309 290/760/308 291/763/309 +f 292/767/298 119/301/298 118/296/298 293/768/298 +f 294/771/297 292/766/297 293/769/297 295/773/297 +f 296/776/299 294/770/300 295/772/300 297/777/299 +f 298/782/299 268/690/300 271/696/300 299/784/299 +f 300/786/299 262/673/300 265/679/300 301/788/299 +f 302/789/310 303/790/310 304/791/310 305/792/310 +f 303/790/311 306/793/311 307/794/311 304/791/311 +f 308/795/310 309/796/310 310/797/310 311/798/310 +f 309/796/311 312/799/311 313/800/311 310/797/311 +f 314/802/312 315/803/312 316/804/312 317/805/312 +f 315/803/310 318/807/310 319/808/310 316/804/310 +f 318/807/311 320/809/311 321/810/311 319/808/311 +f 320/809/313 322/812/313 323/814/313 321/810/313 +f 306/793/313 324/816/313 325/818/313 307/794/313 +f 312/799/313 326/820/313 327/822/313 313/800/313 +f 328/823/313 329/825/313 330/827/313 331/828/313 +f 332/829/311 328/823/311 331/828/311 333/830/311 +f 334/831/310 332/829/310 333/830/310 335/832/310 +f 336/834/312 334/831/312 335/832/312 337/836/312 +f 338/838/312 308/795/312 311/798/312 339/840/312 +f 340/842/312 302/789/312 305/792/312 341/844/312 +f 272/698/314 342/845/315 343/853/314 344/856/316 +f 345/859/317 346/864/318 347/869/319 348/872/318 +f 349/875/320 213/531/321 350/883/320 351/886/321 +f 207/498/322 254/651/322 352/889/322 353/892/322 +f 282/728/305 354/895/323 355/897/323 283/730/306 +f 354/895/323 356/899/324 357/901/324 355/897/323 +f 356/899/324 358/903/325 359/905/325 357/901/324 +f 358/903/325 219/558/326 217/553/327 359/905/325 +f 210/517/328 20/75/328 23/88/328 360/907/328 +f 361/910/329 362/918/329 363/926/329 364/929/329 +f 362/919/330 365/932/331 366/940/330 363/927/331 +f 210/518/332 209/510/333 367/943/332 368/946/333 +f 369/949/334 209/511/334 291/764/334 370/954/334 +f 1/2/335 33/105/336 371/957/335 372/960/336 +f 213/532/321 286/739/320 373/963/321 374/966/320 +f 20/76/334 210/519/334 368/947/334 375/969/334 +f 376/973/337 377/974/337 378/975/337 379/977/337 +f 377/974/338 380/978/338 381/979/338 378/975/338 +f 382/981/337 383/982/337 384/983/337 385/985/337 +f 383/982/338 386/986/338 387/987/338 384/983/338 +f 322/811/339 388/989/339 389/990/339 323/813/339 +f 388/988/337 390/992/337 391/993/337 389/991/337 +f 390/992/338 392/994/338 393/995/338 391/993/338 +f 392/994/340 274/708/299 277/714/299 393/995/340 +f 380/978/340 300/785/299 301/787/299 381/979/340 +f 386/986/340 298/781/299 299/783/299 387/987/340 +f 394/996/340 296/775/299 297/778/299 395/997/340 +f 396/999/338 394/996/338 395/997/338 397/1000/338 +f 398/1003/337 396/999/337 397/1000/337 399/1004/337 +f 329/824/339 398/1002/339 399/1006/341 330/826/339 +f 326/819/339 382/980/339 385/984/339 327/821/339 +f 324/815/339 376/972/339 379/976/339 325/817/339 +f 400/1007/342 401/1009/343 402/1010/343 403/1012/344 +f 401/1009/343 404/1016/345 405/1017/345 402/1010/343 +f 403/1013/346 402/1011/346 406/1019/347 407/1021/348 +f 402/1011/349 405/1018/349 408/1022/349 406/1019/349 +f 102/245/350 409/1024/351 400/1008/351 101/244/350 +f 409/1023/351 410/1025/352 401/1009/352 400/1007/351 +f 410/1025/352 411/1026/353 404/1016/354 401/1009/352 +f 411/1026/353 52/139/275 248/629/275 404/1016/354 +f 404/1016/345 248/629/295 260/669/295 405/1017/345 +f 405/1018/355 260/670/293 261/671/293 408/1022/355 +f 412/1027/356 258/662/290 259/664/292 413/1029/356 +f 414/1030/357 412/1027/357 413/1029/357 415/1031/357 +f 416/1033/358 414/1030/358 415/1031/358 417/1034/358 +f 88/225/359 416/1032/359 417/1035/359 337/835/359 +f 103/247/360 403/1014/361 407/1020/362 90/229/361 +f 101/244/363 400/1008/364 403/1015/365 103/248/365 +f 418/1037/366 419/1038/366 420/1039/366 421/1041/366 +f 419/1038/367 422/1044/367 423/1047/367 420/1039/367 +f 424/1049/366 425/1050/366 426/1051/366 427/1053/366 +f 425/1050/367 428/1056/367 429/1057/367 426/1051/367 +f 336/833/368 430/1060/368 431/1061/368 339/839/368 +f 430/1059/366 432/1063/366 433/1064/366 431/1062/366 +f 432/1063/367 434/1066/367 435/1068/367 433/1064/367 +f 434/1065/369 201/486/235 204/492/235 435/1067/369 +f 422/1042/369 225/571/235 226/574/235 423/1045/369 +f 428/1054/369 223/566/235 224/569/235 429/1058/369 +f 436/1069/369 222/563/235 63/174/235 437/1072/369 +f 438/1074/367 436/1070/367 437/1073/367 439/1075/367 +f 440/1077/366 438/1074/366 439/1075/366 441/1079/366 +f 314/801/368 440/1076/368 441/1078/370 187/446/368 +f 340/841/368 424/1048/368 427/1052/368 317/806/368 +f 338/837/368 418/1036/368 421/1040/368 341/843/368 +f 442/1081/371 443/1083/372 444/1084/373 445/1086/374 +f 443/1083/372 446/1090/375 447/1092/375 444/1084/373 +f 445/1087/376 444/1085/376 448/1095/377 449/1097/378 +f 444/1085/379 447/1094/380 450/1100/381 448/1095/379 +f 178/430/214 451/1102/382 442/1080/383 179/432/215 +f 451/1103/382 452/1106/384 443/1083/385 442/1081/383 +f 452/1106/384 453/1108/386 446/1090/178 443/1083/385 +f 453/1108/386 142/351/168 153/383/179 446/1090/178 +f 446/1091/375 153/384/201 163/406/201 447/1093/375 +f 447/1094/380 163/407/198 161/400/198 450/1100/381 +f 450/1101/387 161/401/195 162/402/197 454/1110/387 +f 448/1096/388 450/1101/388 454/1110/388 455/1111/389 +f 449/1098/390 448/1096/391 455/1111/391 456/1112/390 +f 181/438/392 449/1099/393 456/1113/392 182/439/393 +f 180/435/394 445/1088/395 449/1099/395 181/438/394 +f 179/433/396 442/1082/371 445/1089/374 180/436/397 +f 457/1114/164 458/1116/164 459/1117/164 460/1118/164 +f 458/1116/164 461/1120/164 462/1121/164 459/1117/164 +f 460/1118/164 459/1117/164 463/1122/164 464/1123/164 +f 459/1117/164 462/1121/164 465/1125/164 463/1122/164 +f 173/420/206 466/1126/398 457/1115/164 174/423/207 +f 466/1127/398 467/1130/399 458/1116/164 457/1114/164 +f 467/1130/399 468/1132/400 461/1120/164 458/1116/164 +f 468/1132/400 77/205/90 133/331/164 461/1120/164 +f 461/1120/164 133/331/164 143/353/164 462/1121/164 +f 462/1121/164 143/353/164 141/349/164 465/1125/164 +f 465/1125/164 141/349/164 142/352/168 453/1109/386 +f 463/1122/164 465/1125/164 453/1109/386 452/1107/384 +f 464/1123/164 463/1122/164 452/1107/384 451/1104/382 +f 177/428/212 464/1124/164 451/1105/382 178/431/214 +f 176/426/210 460/1119/164 464/1124/164 177/428/212 +f 174/423/207 457/1115/164 460/1119/164 176/426/210 +f 469/1135/401 470/1137/402 471/1138/403 472/1140/403 +f 470/1137/404 473/1145/404 474/1146/404 471/1138/404 +f 472/1141/405 471/1139/406 475/1148/406 476/1149/407 +f 471/1139/406 474/1147/408 477/1151/408 475/1148/406 +f 93/232/409 478/1153/409 469/1136/410 94/235/409 +f 478/1152/411 479/1154/411 470/1137/412 469/1135/411 +f 479/1154/413 480/1156/413 473/1145/413 470/1137/413 +f 480/1155/414 113/278/140 115/285/142 473/1144/414 +f 473/1145/415 115/286/162 123/314/162 474/1146/415 +f 474/1147/408 123/315/160 122/311/160 477/1151/408 +f 477/1151/416 122/311/159 43/123/159 481/1157/417 +f 475/1148/418 477/1151/416 481/1157/417 482/1158/418 +f 476/1149/419 475/1148/418 482/1158/418 483/1160/419 +f 96/239/420 476/1150/419 483/1159/419 97/240/420 +f 95/237/421 472/1142/421 476/1150/422 96/239/423 +f 94/235/424 469/1136/425 472/1143/424 95/238/426 +f 484/1161/427 485/1163/428 486/1164/429 487/1166/429 +f 485/1163/430 488/1170/431 489/1171/432 486/1164/433 +f 487/1167/434 486/1165/435 490/1173/436 491/1175/437 +f 486/1165/435 489/1172/438 492/1178/438 490/1173/436 +f 187/446/439 441/1078/440 484/1162/439 186/445/440 +f 441/1079/441 439/1075/442 485/1163/442 484/1161/441 +f 439/1075/443 437/1073/444 488/1170/444 485/1163/444 +f 437/1073/445 63/175/69 65/179/71 488/1170/445 +f 488/1170/431 65/179/92 78/209/92 489/1171/432 +f 489/1172/438 78/210/91 76/203/91 492/1178/438 +f 492/1179/87 76/204/89 77/206/90 468/1133/400 +f 490/1174/446 492/1180/87 468/1134/400 467/1131/399 +f 491/1176/447 490/1174/446 467/1131/399 466/1128/398 +f 175/424/209 491/1177/447 466/1129/398 173/421/206 +f 188/449/448 487/1168/434 491/1177/437 175/424/449 +f 186/445/450 484/1162/451 487/1169/451 188/450/450 +f 493/1181/452 494/1183/453 495/1184/453 496/1186/452 +f 494/1183/453 497/1189/454 498/1190/454 495/1184/453 +f 496/1187/455 495/1185/456 499/1192/456 500/1193/455 +f 495/1185/456 498/1191/457 501/1195/457 499/1192/456 +f 97/240/458 483/1159/459 493/1182/459 98/241/460 +f 483/1160/459 482/1158/461 494/1183/461 493/1181/459 +f 482/1158/461 481/1157/462 497/1189/463 494/1183/461 +f 481/1157/462 43/123/43 45/127/43 497/1189/463 +f 497/1189/454 45/127/59 53/142/59 498/1190/454 +f 498/1191/457 53/143/58 51/137/58 501/1195/457 +f 501/1195/464 51/137/57 52/139/57 411/1026/465 +f 499/1192/466 501/1195/464 411/1026/465 410/1025/466 +f 500/1193/467 499/1192/466 410/1025/466 409/1023/467 +f 100/243/468 500/1194/467 409/1024/467 102/245/469 +f 99/242/470 496/1188/455 500/1194/455 100/243/471 +f 98/241/472 493/1182/452 496/1188/452 99/242/473 +f 341/843/368 421/1040/368 424/1048/368 340/841/368 +f 423/1046/369 226/575/235 223/567/235 428/1055/369 +f 420/1039/367 423/1047/367 428/1056/367 425/1050/367 +f 421/1041/366 420/1039/366 425/1050/366 424/1049/366 +f 323/813/339 389/990/339 376/972/339 324/815/339 +f 393/995/340 277/714/299 300/785/299 380/978/340 +f 391/993/338 393/995/338 380/978/338 377/974/338 +f 389/991/337 391/993/337 377/974/337 376/973/337 +f 283/731/474 355/898/474 346/865/474 345/860/474 +f 359/906/475 217/552/475 21/80/475 20/77/475 +f 357/902/476 359/906/476 20/77/476 369/950/476 +f 355/898/477 357/902/477 369/950/477 346/865/477 +f 317/805/312 316/804/312 302/789/312 340/842/312 +f 321/810/313 323/814/313 324/816/313 306/793/313 +f 319/808/311 321/810/311 306/793/311 303/790/311 +f 316/804/310 319/808/310 303/790/310 302/789/310 +f 277/715/299 276/712/300 262/673/300 300/786/299 +f 281/726/478 283/731/478 345/860/478 266/681/478 +f 279/719/298 281/727/298 266/682/298 263/675/298 +f 276/713/297 279/720/297 263/676/297 262/674/297 +f 226/576/235 192/457/236 195/469/236 223/568/235 +f 21/81/479 199/479/480 502/1196/479 503/1199/479 +f 191/455/234 194/464/234 199/480/234 196/471/234 +f 192/458/233 191/456/233 196/472/233 195/470/233 +f 317/806/368 427/1052/368 440/1076/368 314/801/368 +f 427/1053/366 426/1051/366 438/1074/366 440/1077/366 +f 426/1051/367 429/1057/367 436/1070/367 438/1074/367 +f 429/1058/369 224/569/235 222/564/235 436/1071/369 +f 454/1110/340 162/402/299 274/708/299 392/994/340 +f 455/1111/338 454/1110/338 392/994/338 390/992/338 +f 456/1112/337 455/1111/337 390/992/337 388/988/337 +f 182/439/339 456/1113/339 388/989/339 322/811/339 +f 236/595/475 68/184/475 219/557/475 358/904/475 +f 237/596/476 236/595/476 358/904/476 356/900/476 +f 238/597/477 237/596/477 356/900/477 354/896/477 +f 157/391/474 238/597/474 354/896/474 282/729/474 +f 183/441/313 182/440/313 322/812/313 320/809/313 +f 184/442/311 183/441/311 320/809/311 318/807/311 +f 185/443/310 184/442/310 318/807/310 315/803/310 +f 187/447/312 185/443/312 315/803/312 314/802/312 +f 158/392/478 157/391/478 282/729/478 280/722/478 +f 159/394/481 158/393/481 280/723/481 278/716/481 +f 160/396/297 159/395/297 278/717/297 275/710/297 +f 162/403/299 160/397/300 275/711/300 274/709/299 +f 224/570/235 198/476/236 221/561/236 222/565/235 +f 198/477/233 197/474/233 220/559/233 221/562/233 +f 197/475/482 200/484/483 218/555/484 220/560/483 +f 200/485/485 217/553/327 219/558/326 218/556/486 +f 339/839/368 431/1061/368 418/1036/368 338/837/368 +f 435/1067/369 204/492/235 225/572/235 422/1043/369 +f 433/1064/367 435/1068/367 422/1044/367 419/1038/367 +f 431/1062/366 433/1064/366 419/1038/366 418/1037/366 +f 325/817/339 379/976/339 382/980/339 326/819/339 +f 381/979/340 301/787/299 298/781/299 386/986/340 +f 378/975/338 381/979/338 386/986/338 383/982/338 +f 379/977/337 378/975/337 383/982/337 382/981/337 +f 286/740/487 213/533/488 216/550/487 504/1202/488 +f 11/31/489 505/1205/489 506/1213/489 507/1216/489 +f 14/45/490 508/1219/491 509/1227/491 510/1230/491 +f 505/1206/492 119/300/493 511/1233/492 506/1214/492 +f 341/844/312 305/792/312 308/795/312 338/838/312 +f 307/794/313 325/818/313 326/820/313 312/799/313 +f 304/791/311 307/794/311 312/799/311 309/796/311 +f 305/792/310 304/791/310 309/796/310 308/795/310 +f 301/788/299 265/679/300 268/690/300 298/782/299 +f 512/1236/494 513/1244/495 514/1252/494 515/1255/495 +f 264/677/298 267/685/298 272/699/298 269/692/298 +f 265/680/297 264/678/297 269/693/297 268/691/297 +f 204/493/235 203/490/236 189/451/236 225/573/235 +f 362/920/496 361/911/496 516/1258/496 517/1261/496 +f 206/496/234 208/503/234 193/459/234 190/453/234 +f 203/491/233 206/497/233 190/454/233 189/452/233 +f 413/1028/369 259/665/235 201/486/235 434/1065/369 +f 415/1031/367 413/1029/367 434/1066/367 432/1063/367 +f 417/1034/366 415/1031/366 432/1063/366 430/1059/366 +f 337/835/368 417/1035/368 430/1060/368 336/833/368 +f 327/821/339 385/984/339 398/1002/339 329/824/339 +f 385/985/337 384/983/337 396/999/337 398/1003/337 +f 384/983/338 387/987/338 394/996/338 396/999/338 +f 387/987/340 299/783/299 296/775/299 394/996/340 +f 194/465/497 193/460/497 518/1264/497 519/1267/497 +f 118/295/498 520/1270/498 521/1278/498 522/1281/499 +f 365/933/334 286/741/334 504/1203/334 523/1284/334 +f 524/1287/334 525/1295/334 526/1303/334 527/1306/334 +f 339/840/312 311/798/312 334/831/312 336/834/312 +f 311/798/310 310/797/310 332/829/310 334/831/310 +f 310/797/311 313/800/311 328/823/311 332/829/311 +f 313/800/313 327/822/313 329/825/313 328/823/313 +f 299/784/299 271/696/300 294/770/300 296/776/299 +f 271/697/297 270/694/297 292/766/297 294/771/297 +f 270/695/298 273/703/298 119/301/298 292/767/298 +f 528/1309/500 18/66/501 529/1317/502 530/1320/503 +f 505/1207/319 349/876/317 531/1323/319 532/1326/319 +f 255/656/234 254/652/234 207/499/234 205/494/234 +f 257/660/233 255/657/233 205/495/233 202/488/233 +f 259/666/235 257/661/236 202/489/236 201/487/235 +f 395/998/414 297/779/142 113/279/140 480/1156/414 +f 397/1001/413 395/998/413 480/1156/413 479/1154/413 +f 399/1005/411 397/1001/411 479/1154/411 478/1152/411 +f 330/826/409 399/1006/409 478/1153/409 93/232/409 +f 90/229/359 407/1020/504 416/1032/359 88/225/359 +f 407/1021/358 406/1019/505 414/1030/358 416/1033/358 +f 406/1019/357 408/1022/357 412/1027/357 414/1030/357 +f 408/1022/356 261/671/292 258/662/290 412/1027/356 +f 261/672/292 246/621/291 256/658/291 258/663/290 +f 246/622/288 245/619/288 252/644/289 256/659/288 +f 245/620/506 247/624/506 253/646/287 252/645/287 +f 209/512/241 369/951/241 533/1329/241 367/944/241 +f 534/1332/507 535/1340/508 536/1348/507 537/1351/507 +f 293/768/145 118/296/145 117/289/145 116/287/145 +f 295/773/144 293/769/143 116/288/144 114/281/143 +f 297/780/142 295/774/141 114/282/141 113/280/140 +f 331/828/110 330/827/110 93/233/110 92/231/110 +f 333/830/509 331/828/107 92/231/108 91/230/107 +f 335/832/105 333/830/510 91/230/105 89/227/104 +f 337/836/103 335/832/103 89/227/103 88/226/103 +f 525/1296/511 534/1333/512 537/1352/511 526/1304/512 +f 349/877/513 505/1208/513 538/1354/513 539/1357/513 +f 540/1360/514 361/912/514 541/1367/514 542/1370/514 +f 540/1361/515 194/466/515 519/1268/515 543/1373/515 +f 544/1376/242 545/1379/242 503/1200/242 502/1197/242 +f 194/467/516 540/1362/517 545/1380/517 544/1377/517 +f 199/481/497 194/468/497 544/1378/497 502/1198/497 +f 540/1363/496 21/82/496 503/1201/496 545/1381/496 +f 546/1382/518 547/1385/518 548/1388/518 549/1391/518 +f 550/1394/519 17/61/520 16/58/520 551/1397/519 +f 552/1400/521 553/1403/521 554/1406/521 555/1409/522 +f 556/1412/478 557/1415/478 558/1418/478 559/1421/478 +f 344/857/478 343/854/478 560/1424/478 561/1427/478 +f 120/305/478 562/1430/478 563/1433/478 121/308/478 +f 564/1436/477 370/955/477 291/765/477 290/761/477 +f 284/733/477 565/1439/477 566/1442/477 285/736/477 +f 23/89/475 22/85/475 567/1445/475 360/908/475 +f 568/1448/475 364/930/475 363/928/475 366/941/475 +f 289/758/475 288/755/475 569/1451/475 570/1454/475 +f 351/887/477 350/884/477 571/1457/477 572/1460/477 +f 528/1310/334 214/539/334 566/1443/334 565/1440/334 +f 1/3/523 534/1334/523 546/1383/523 549/1392/523 +f 573/1463/524 267/686/524 559/1422/524 558/1419/524 +f 508/1220/525 513/1245/526 570/1455/525 569/1452/525 +f 365/934/328 574/1471/328 568/1449/328 366/942/328 +f 575/1479/527 33/106/527 554/1407/527 553/1404/527 +f 11/32/493 273/704/493 561/1428/528 560/1425/492 +f 525/1297/334 2/7/334 548/1389/334 547/1386/334 +f 267/687/147 266/683/147 556/1413/147 559/1423/147 +f 2/8/511 1/4/511 549/1393/511 548/1390/511 +f 512/1237/529 14/46/529 17/62/529 550/1395/529 +f 346/866/530 369/952/531 370/956/530 564/1437/531 +f 574/1472/532 361/913/533 364/931/532 568/1450/532 +f 214/540/503 10/25/503 285/737/503 566/1444/503 +f 5/14/534 512/1238/535 550/1396/536 551/1398/537 +f 524/1288/488 535/1341/487 572/1461/488 571/1458/487 +f 15/54/538 5/15/538 551/1399/538 16/59/538 +f 287/747/329 508/1221/329 569/1453/329 288/756/329 +f 534/1335/539 525/1298/540 547/1387/539 546/1384/540 +f 18/67/541 528/1311/541 565/1441/541 284/734/541 +f 345/861/489 573/1464/489 558/1420/489 557/1416/489 +f 108/268/542 117/290/542 552/1401/542 555/1410/542 +f 513/1246/328 286/742/328 289/759/328 570/1456/328 +f 33/107/543 108/269/544 555/1411/544 554/1408/544 +f 342/846/545 11/33/545 560/1426/545 343/855/545 +f 520/1271/492 118/297/492 121/309/492 563/1434/492 +f 213/534/334 524/1289/334 571/1459/334 350/885/334 +f 119/302/314 505/1209/314 562/1431/314 120/306/314 +f 505/1210/489 520/1272/489 563/1435/489 562/1432/489 +f 273/705/147 272/700/147 344/858/147 561/1429/147 +f 21/83/329 540/1364/329 567/1446/329 22/86/329 +f 117/291/498 575/1480/499 553/1405/498 552/1402/546 +f 535/1342/241 349/878/241 351/888/241 572/1462/241 +f 249/632/241 346/867/241 564/1438/241 290/762/241 +f 266/684/547 345/862/547 557/1417/547 556/1414/547 +f 540/1366/526 210/520/548 360/909/525 567/1447/548 +f 576/1487/549 577/1490/550 372/961/550 371/958/549 +f 578/1493/551 579/1496/551 580/1499/551 581/1502/551 +f 533/1330/476 375/970/476 368/948/476 367/945/476 +f 582/1505/476 583/1508/476 584/1511/476 585/1514/476 +f 374/967/476 373/964/476 586/1517/476 587/1520/476 +f 532/1327/474 531/1324/474 588/1523/474 589/1526/474 +f 590/1529/474 19/72/474 13/43/474 12/39/474 +f 348/873/474 347/870/474 591/1532/474 592/1535/474 +f 593/1538/242 517/1262/242 516/1259/242 594/1541/242 +f 352/890/552 595/1544/242 596/1547/242 353/893/242 +f 597/1550/553 598/1553/554 599/1556/554 600/1559/553 +f 15/55/491 14/47/491 599/1557/491 598/1554/491 +f 214/541/241 528/1312/241 582/1506/241 585/1515/241 +f 534/1336/555 1/5/555 372/962/555 577/1491/556 +f 361/914/515 193/461/515 594/1542/515 516/1260/515 +f 249/633/557 573/1465/558 592/1536/557 591/1533/513 +f 369/953/559 20/78/560 375/971/559 533/1331/560 +f 342/847/561 18/68/561 19/73/561 590/1530/562 +f 574/1473/334 365/935/334 584/1512/334 583/1509/334 +f 33/108/563 575/1481/563 576/1488/563 371/959/564 +f 2/9/241 525/1299/241 578/1494/241 581/1503/241 +f 513/1247/487 524/1290/488 587/1521/487 586/1518/488 +f 254/653/565 508/1222/566 595/1545/566 352/891/566 +f 512/1239/567 5/16/568 580/1500/567 579/1497/567 +f 5/17/511 2/10/512 581/1504/511 580/1501/512 +f 525/1300/540 512/1240/540 579/1498/540 578/1495/540 +f 528/1313/240 574/1474/240 583/1510/240 582/1507/240 +f 365/936/569 214/542/569 585/1516/569 584/1513/569 +f 508/1223/570 287/748/570 596/1548/570 595/1546/570 +f 535/1343/558 520/1273/513 589/1527/513 588/1524/513 +f 193/462/497 208/504/497 593/1539/497 594/1543/497 +f 247/625/571 15/56/572 598/1555/571 597/1551/571 +f 573/1466/573 345/863/573 348/874/573 592/1537/573 +f 575/1482/574 534/1337/574 577/1492/574 576/1489/574 +f 253/647/575 247/626/576 597/1552/576 600/1560/575 +f 286/743/334 513/1248/334 586/1519/334 373/965/334 +f 11/34/573 342/848/573 590/1531/573 12/40/573 +f 14/48/577 253/648/578 600/1561/579 599/1558/578 +f 524/1291/241 213/535/241 374/968/241 587/1522/241 +f 520/1274/573 505/1211/573 532/1328/573 589/1528/573 +f 349/879/13 535/1344/13 588/1525/13 531/1325/13 +f 287/749/580 207/500/581 353/894/580 596/1549/580 +f 346/868/13 249/634/13 591/1534/13 347/871/13 +f 208/505/582 362/921/582 517/1263/582 593/1540/582 +f 601/1562/242 602/1565/242 603/1568/242 604/1571/242 +f 518/1265/242 605/1574/242 543/1374/242 519/1269/242 +f 606/1577/554 510/1231/554 509/1228/554 607/1580/553 +f 608/1583/474 251/642/474 250/639/474 609/1586/474 +f 212/528/476 211/525/476 610/1589/476 611/1592/476 +f 612/1595/474 613/1598/474 539/1358/474 538/1355/474 +f 215/547/476 523/1285/476 504/1204/476 216/551/476 +f 614/1601/551 615/1604/551 616/1607/551 617/1610/551 +f 618/1613/549 619/1616/550 620/1619/549 621/1622/550 +f 528/1314/241 209/513/241 212/529/241 611/1593/241 +f 10/26/13 349/880/13 539/1359/13 613/1599/13 +f 342/849/583 573/1467/583 608/1584/583 609/1587/583 +f 575/1483/563 520/1275/563 618/1614/563 621/1623/563 +f 210/521/334 574/1475/334 610/1590/334 211/526/334 +f 254/654/575 253/649/575 606/1578/575 607/1581/575 +f 11/35/319 10/27/319 613/1600/319 612/1596/319 +f 193/463/582 361/915/582 605/1575/582 518/1266/582 +f 573/1468/561 249/635/561 251/643/561 608/1585/561 +f 18/69/10 342/850/10 609/1588/10 250/640/10 +f 524/1292/584 513/1249/584 615/1605/584 614/1602/584 +f 508/1224/577 254/655/577 607/1582/579 509/1229/577 +f 287/750/496 362/922/496 603/1569/496 602/1566/496 +f 512/1241/585 525/1301/585 617/1611/585 616/1608/585 +f 214/543/321 365/937/320 523/1286/321 215/548/320 +f 574/1476/586 528/1315/587 611/1594/569 610/1591/588 +f 361/916/496 540/1365/496 543/1375/496 605/1576/496 +f 520/1276/589 535/1345/589 619/1617/589 618/1615/589 +f 535/1346/590 534/1338/591 620/1620/590 619/1618/591 +f 534/1339/336 575/1484/336 621/1624/336 620/1621/336 +f 525/1302/496 524/1293/496 614/1603/496 617/1612/496 +f 513/1250/592 512/1242/592 616/1609/592 615/1606/592 +f 253/650/571 14/49/571 510/1232/571 606/1579/571 +f 505/1212/583 11/36/583 612/1597/583 538/1356/583 +f 208/506/497 207/501/497 601/1563/497 604/1572/497 +f 207/502/593 287/751/594 602/1567/594 601/1564/594 +f 362/923/595 208/507/596 604/1573/595 603/1570/595 +f 622/1625/475 542/1371/475 541/1368/475 623/1628/475 +f 624/1631/477 625/1634/477 530/1321/477 529/1318/477 +f 626/1637/478 627/1640/478 628/1643/478 629/1646/478 +f 630/1649/477 631/1652/477 632/1655/477 633/1658/477 +f 634/1661/475 635/1664/475 636/1667/475 637/1670/475 +f 638/1673/478 507/1217/478 506/1215/478 511/1234/478 +f 522/1282/521 521/1279/522 639/1676/522 640/1679/522 +f 514/1253/519 641/1682/520 642/1685/519 515/1256/520 +f 536/1349/518 527/1307/518 526/1305/518 537/1353/518 +f 272/701/597 267/688/597 626/1638/597 629/1647/597 +f 575/1485/543 117/292/544 640/1680/544 639/1677/544 +f 210/522/532 540/1366/532 542/1372/532 622/1626/532 +f 365/938/16 362/924/16 635/1665/16 634/1662/16 +f 213/536/488 349/881/487 633/1659/488 632/1656/487 +f 286/744/328 365/939/328 634/1663/328 637/1671/328 +f 342/851/598 272/702/598 629/1648/598 628/1644/598 +f 508/1225/12 14/50/12 642/1686/12 641/1683/12 +f 249/636/599 209/514/600 625/1635/541 624/1632/601 +f 18/70/241 249/637/241 624/1633/241 529/1319/241 +f 214/544/334 213/537/334 632/1657/334 631/1653/334 +f 287/752/525 286/745/525 637/1672/525 636/1668/525 +f 209/515/334 528/1316/334 530/1322/334 625/1636/334 +f 117/293/542 118/298/542 522/1283/542 640/1681/542 +f 349/882/241 10/28/241 630/1650/241 633/1660/241 +f 573/1469/489 342/852/489 628/1645/489 627/1641/489 +f 520/1277/527 575/1486/602 639/1678/527 521/1280/527 +f 574/1477/328 210/523/328 622/1627/328 623/1629/328 +f 267/689/603 573/1470/603 627/1642/603 626/1639/603 +f 513/1251/529 508/1226/529 641/1684/529 514/1254/529 +f 273/706/604 11/37/314 507/1218/314 638/1674/314 +f 14/51/538 512/1243/538 515/1257/538 642/1687/538 +f 10/29/320 214/545/321 631/1654/320 630/1651/321 +f 361/917/330 574/1478/330 623/1630/330 541/1369/330 +f 119/303/597 273/707/597 638/1675/597 511/1235/597 +f 362/925/514 287/753/514 636/1669/514 635/1666/514 +f 535/1347/540 524/1294/540 527/1308/540 536/1350/540 diff --git a/resources/models/chair.mtl b/resources/models/chair.mtl new file mode 100644 index 00000000..0f24cae5 --- /dev/null +++ b/resources/models/chair.mtl @@ -0,0 +1,13 @@ +# Blender 3.1.0 MTL File: 'None' +# www.blender.org + +newmtl Material.002 +Ns 250.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd chair.jpg diff --git a/resources/models/chair.obj b/resources/models/chair.obj new file mode 100644 index 00000000..6d4207f1 --- /dev/null +++ b/resources/models/chair.obj @@ -0,0 +1,1318 @@ +# Blender 3.1.0 +# www.blender.org +mtllib chair.mtl +o Chair.038 +v 0.251419 0.062538 0.145016 +v 0.251419 0.077107 0.145016 +v 0.201797 0.077107 0.145016 +v 0.067814 0.058410 0.145016 +v -0.066166 0.058410 0.145016 +v -0.200150 0.077107 0.145016 +v -0.249767 0.077107 0.145016 +v -0.249767 0.062538 0.145016 +v -0.200150 0.062538 0.145016 +v 0.201797 0.062538 0.145016 +v -0.249767 0.077107 -0.239616 +v -0.249767 0.062538 -0.239616 +v -0.249767 0.047968 -0.239616 +v -0.204151 0.047968 -0.239616 +v -0.200150 0.047968 0.145016 +v -0.249767 0.047968 0.145016 +v 0.251419 0.062538 -0.239616 +v 0.251419 0.077107 -0.239616 +v 0.205799 0.062538 -0.239616 +v 0.205799 0.077107 -0.239616 +v 0.251419 0.047968 -0.239616 +v 0.205799 0.047968 -0.239616 +v 0.251419 0.047968 0.145016 +v -0.066166 0.029271 0.145016 +v 0.067814 0.029271 0.145016 +v 0.201797 0.047968 0.145016 +v -0.067501 0.058410 -0.239616 +v -0.067501 0.043841 -0.239616 +v -0.204151 0.062538 -0.239616 +v -0.204151 0.077107 -0.239616 +v 0.069149 0.043841 -0.239616 +v 0.069149 0.029271 -0.239616 +v -0.251938 0.085216 -0.046653 +v -0.257778 0.090807 -0.046653 +v -0.257778 0.090807 0.084431 +v -0.251938 0.085216 0.084431 +v -0.252117 0.077132 0.084431 +v -0.251938 0.085106 0.116829 +v -0.252117 0.077456 0.114215 +v -0.271633 0.077059 -0.046653 +v -0.271458 0.085143 -0.046653 +v -0.271458 0.085143 -0.177738 +v -0.271633 0.077059 -0.177738 +v -0.265865 0.090984 -0.177738 +v -0.265865 0.086564 -0.209640 +v -0.271458 0.081211 -0.207302 +v -0.257706 0.071291 -0.046653 +v -0.265793 0.071467 -0.046653 +v -0.265793 0.071467 -0.177738 +v -0.257706 0.071291 -0.177738 +v -0.265865 0.090984 -0.046653 +v -0.257778 0.090807 -0.177738 +v -0.271458 0.085143 0.084431 +v -0.265865 0.090984 0.084431 +v -0.252117 0.077132 -0.046653 +v -0.252117 0.077132 -0.177738 +v -0.257706 0.071291 0.084431 +v -0.265793 0.071467 0.084431 +v -0.271633 0.073802 -0.204069 +v -0.265793 0.068677 -0.201831 +v -0.257778 0.086403 -0.209568 +v -0.257706 0.068516 -0.201761 +v -0.252117 0.073869 -0.204097 +v -0.271633 0.077059 0.084431 +v -0.271458 0.085037 0.116806 +v -0.265865 0.090564 0.118694 +v -0.257706 0.071929 0.112327 +v -0.265793 0.072096 0.112384 +v -0.271633 0.077387 0.114192 +v -0.251938 0.085216 -0.177738 +v -0.252117 0.068133 0.142504 +v -0.257706 0.063513 0.138929 +v -0.265793 0.063653 0.139037 +v -0.271633 0.068075 0.142459 +v -0.271458 0.074469 0.147406 +v -0.257778 0.090397 0.118637 +v -0.271633 0.050123 0.166196 +v -0.271458 0.054574 0.172945 +v -0.251938 0.074527 0.147451 +v -0.251938 0.054614 0.173007 +v -0.252117 0.050164 0.166258 +v -0.265865 0.079088 0.150979 +v -0.265865 0.057790 0.177822 +v -0.257778 0.078949 0.150872 +v -0.257778 0.057693 0.177675 +v -0.251938 0.027508 0.190752 +v -0.252117 0.025479 0.182926 +v -0.271458 0.027490 0.190681 +v -0.265865 0.028956 0.196335 +v -0.257778 0.028912 0.196164 +v -0.257706 0.046948 0.161382 +v -0.265793 0.047045 0.161528 +v -0.265865 -0.007049 0.211958 +v -0.257778 -0.007088 0.211786 +v -0.257706 0.024012 0.177272 +v -0.252117 -0.010093 0.198444 +v -0.257706 -0.011377 0.192746 +v -0.271633 0.025460 0.182856 +v -0.265793 0.024057 0.177443 +v -0.265793 -0.011338 0.192917 +v -0.271633 -0.010109 0.198373 +v -0.251938 -0.003443 -0.276947 +v -0.252117 -0.004390 -0.268918 +v -0.252113 -0.355797 -0.310024 +v -0.251938 -0.354851 -0.318053 +v -0.271458 -0.008333 0.206259 +v -0.271458 -0.351353 0.292941 +v -0.265865 -0.350070 0.298640 +v -0.265865 -0.002767 -0.282675 +v -0.257778 -0.002788 -0.282500 +v -0.257778 -0.354196 -0.323606 +v -0.265865 -0.354175 -0.323781 +v -0.252113 -0.353114 0.285126 +v -0.257706 -0.354397 0.279428 +v -0.251938 -0.008317 0.206331 +v -0.265865 0.072730 -0.240584 +v -0.271458 0.068759 -0.236300 +v -0.251938 0.081278 -0.207332 +v -0.251938 0.068808 -0.236353 +v -0.257778 0.072610 -0.240454 +v -0.265793 0.059461 -0.226271 +v -0.257706 0.059341 -0.226142 +v -0.252117 0.063312 -0.230426 +v -0.251938 0.050387 -0.258054 +v -0.257778 0.052231 -0.263333 +v -0.265793 0.045854 -0.245074 +v -0.257706 0.045796 -0.244908 +v -0.252117 0.047722 -0.250423 +v -0.271633 0.063262 -0.230372 +v -0.257706 0.018386 -0.259997 +v -0.252117 0.019635 -0.265703 +v -0.271633 0.047698 -0.250353 +v -0.271633 0.019620 -0.265631 +v -0.265793 0.018423 -0.260169 +v -0.265865 0.052289 -0.263500 +v -0.257778 0.022562 -0.279061 +v -0.265865 0.022599 -0.279233 +v -0.271458 0.050363 -0.257986 +v -0.271458 0.021350 -0.273528 +v -0.271458 -0.003452 -0.276875 +v -0.271633 -0.004398 -0.268846 +v -0.251938 0.021365 -0.273599 +v -0.257706 -0.005074 -0.263117 +v -0.265793 -0.005053 -0.263293 +v -0.265793 -0.356461 -0.304399 +v -0.257706 -0.356481 -0.304224 +v -0.251938 -0.351337 0.293013 +v -0.271633 -0.355806 -0.309952 +v -0.271633 -0.353130 0.285055 +v -0.261787 -0.352233 0.289034 +v -0.265793 -0.354358 0.279600 +v -0.257778 -0.350108 0.298468 +v -0.261787 -0.355328 -0.314002 +v -0.271458 -0.354859 -0.317979 +v 0.271603 0.085216 -0.046653 +v 0.265762 0.090807 -0.046653 +v 0.265762 0.090807 0.084431 +v 0.271603 0.085216 0.084431 +v 0.271427 0.077132 0.084431 +v 0.271603 0.085106 0.116829 +v 0.271427 0.077456 0.114215 +v 0.257751 0.071467 -0.177738 +v 0.251911 0.077059 -0.177738 +v 0.251911 0.073802 -0.204069 +v 0.257751 0.068677 -0.201831 +v 0.265835 0.071291 -0.046653 +v 0.257751 0.071467 -0.046653 +v 0.265835 0.071291 -0.177738 +v 0.257679 0.090984 -0.046653 +v 0.265762 0.090807 -0.177738 +v 0.257679 0.090984 -0.177738 +v 0.252087 0.085143 -0.046653 +v 0.252087 0.085143 -0.177738 +v 0.252087 0.085143 0.084431 +v 0.257679 0.090984 0.084431 +v 0.271427 0.077132 -0.046653 +v 0.271427 0.077132 -0.177738 +v 0.265835 0.071291 0.084431 +v 0.257751 0.071467 0.084431 +v 0.265762 0.086403 -0.209568 +v 0.257679 0.086564 -0.209640 +v 0.265835 0.068516 -0.201761 +v 0.271427 0.073869 -0.204097 +v 0.271603 0.085216 -0.177738 +v 0.271603 0.081278 -0.207332 +v 0.251911 0.077059 -0.046653 +v 0.251911 0.077059 0.084431 +v 0.252087 0.085037 0.116806 +v 0.257679 0.090564 0.118694 +v 0.265835 0.071929 0.112327 +v 0.257751 0.072096 0.112384 +v 0.251911 0.077387 0.114192 +v 0.265762 0.090397 0.118637 +v 0.257679 0.079088 0.150981 +v 0.265762 0.078949 0.150872 +v 0.271427 0.068133 0.142504 +v 0.265835 0.063513 0.138930 +v 0.257751 0.063653 0.139037 +v 0.251911 0.068075 0.142459 +v 0.257751 0.047045 0.161528 +v 0.251911 0.050123 0.166196 +v 0.265835 0.046948 0.161382 +v 0.252087 0.074469 0.147406 +v 0.252087 0.054574 0.172945 +v 0.271603 0.074527 0.147451 +v 0.271603 0.054614 0.173007 +v 0.271427 0.050164 0.166258 +v 0.271603 0.027508 0.190752 +v 0.271427 0.025479 0.182926 +v 0.257679 0.057790 0.177822 +v 0.252087 0.027490 0.190681 +v 0.257679 0.028956 0.196335 +v 0.265762 0.057693 0.177675 +v 0.265762 0.028912 0.196164 +v 0.252087 -0.008333 0.206260 +v 0.257679 -0.007049 0.211958 +v 0.265762 -0.007088 0.211786 +v 0.271603 -0.008317 0.206331 +v 0.265835 0.024012 0.177272 +v 0.271427 -0.010093 0.198444 +v 0.265835 -0.011377 0.192746 +v 0.251911 0.025460 0.182856 +v 0.257751 0.024057 0.177443 +v 0.271603 -0.003443 -0.276947 +v 0.271427 -0.004390 -0.268918 +v 0.271427 -0.355797 -0.310024 +v 0.271603 -0.354851 -0.318053 +v 0.252087 -0.351353 0.292941 +v 0.257679 -0.350070 0.298640 +v 0.257679 -0.002767 -0.282675 +v 0.265762 -0.002788 -0.282500 +v 0.265762 -0.354196 -0.323606 +v 0.257679 -0.354175 -0.323781 +v 0.271427 -0.353114 0.285126 +v 0.265835 -0.354397 0.279428 +v 0.251911 -0.010109 0.198373 +v 0.257751 -0.011338 0.192917 +v 0.271603 0.068808 -0.236353 +v 0.265762 0.072610 -0.240454 +v 0.257751 0.059461 -0.226271 +v 0.265835 0.059341 -0.226142 +v 0.271427 0.063312 -0.230426 +v 0.252087 0.081211 -0.207302 +v 0.271427 0.047722 -0.250423 +v 0.271603 0.050387 -0.258054 +v 0.265835 0.045796 -0.244908 +v 0.251911 0.063262 -0.230372 +v 0.251911 0.047698 -0.250353 +v 0.257751 0.045854 -0.245074 +v 0.257679 0.072730 -0.240584 +v 0.265762 0.052231 -0.263333 +v 0.257679 0.052289 -0.263500 +v 0.252087 0.068759 -0.236300 +v 0.251911 0.019620 -0.265631 +v 0.257751 0.018423 -0.260169 +v 0.265762 0.022562 -0.279061 +v 0.257679 0.022599 -0.279233 +v 0.252087 0.050363 -0.257986 +v 0.252087 0.021350 -0.273528 +v 0.252087 -0.003452 -0.276875 +v 0.271603 0.021365 -0.273599 +v 0.265835 0.018386 -0.259998 +v 0.257751 -0.005053 -0.263293 +v 0.265835 -0.005074 -0.263118 +v 0.271427 0.019635 -0.265703 +v 0.257751 -0.356461 -0.304399 +v 0.265835 -0.356481 -0.304224 +v 0.271603 -0.351337 0.293013 +v 0.251911 -0.353130 0.285055 +v 0.251911 -0.004398 -0.268846 +v 0.251911 -0.355806 -0.309952 +v 0.261757 -0.352233 0.289034 +v 0.257751 -0.354358 0.279600 +v 0.265762 -0.350108 0.298468 +v 0.261757 -0.355328 -0.314002 +v 0.252087 -0.354859 -0.317979 +v -0.067501 0.029271 -0.239616 +v 0.069149 0.058410 -0.239616 +vn 0.9648 -0.0000 -0.2630 +vn 0.5002 -0.7071 0.4998 +vn -0.0000 -0.0000 1.0000 +vn -0.4997 -0.7071 0.5002 +vn -0.6666 0.6667 0.3334 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn -0.0681 -0.9977 0.0005 +vn -0.0690 -0.9976 0.0005 +vn 1.0000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -1.0000 +vn -0.0000 1.0000 -0.0000 +vn -0.0681 0.9977 -0.0005 +vn -0.0690 0.9976 -0.0005 +vn 0.0690 0.9976 -0.0005 +vn 0.0681 0.9977 -0.0005 +vn 0.0684 0.9977 -0.0005 +vn 0.0687 0.9976 -0.0005 +vn 0.0690 -0.9976 0.0005 +vn 0.0681 -0.9977 0.0005 +vn 0.0684 -0.9977 0.0005 +vn 0.0687 -0.9976 0.0005 +vn 0.6915 0.7224 -0.0000 +vn 0.6868 0.7268 0.0028 +vn 0.6868 0.7268 0.0029 +vn 0.9998 -0.0222 0.0001 +vn 0.9998 -0.0213 -0.0003 +vn 0.9998 -0.0202 -0.0065 +vn -0.9998 0.0214 -0.0000 +vn -0.9998 0.0219 -0.0014 +vn -0.9998 0.0216 -0.0015 +vn -0.7140 0.6937 -0.0943 +vn -0.0218 -0.9998 -0.0000 +vn 0.0219 0.9998 -0.0000 +vn -0.7223 0.6916 -0.0000 +vn -0.7178 0.6962 0.0028 +vn 0.0216 0.9997 0.0061 +vn 0.7222 -0.6917 -0.0000 +vn 0.7225 -0.6913 -0.0000 +vn -0.6825 -0.7257 0.0870 +vn 0.0213 0.9903 -0.1371 +vn 0.7135 -0.6957 0.0833 +vn -0.6916 -0.7223 -0.0000 +vn -0.9998 0.0220 -0.0000 +vn -0.7136 0.7005 0.0054 +vn -0.0211 -0.9995 0.0227 +vn -0.9997 0.0215 0.0068 +vn -0.9997 0.0225 0.0004 +vn 0.7118 -0.6683 -0.2160 +vn -0.6806 -0.6971 -0.2254 +vn -0.0212 -0.9532 -0.3017 +vn -0.9997 0.0187 0.0133 +vn -0.9997 0.0216 0.0078 +vn 0.0213 0.9997 0.0121 +vn -0.6806 -0.7325 0.0121 +vn 0.6821 0.7312 0.0057 +vn 0.7118 -0.7023 0.0117 +vn -0.9997 0.0132 0.0187 +vn -0.9997 0.0177 0.0145 +vn 0.9998 -0.0175 -0.0130 +vn 0.9998 -0.0205 -0.0074 +vn 0.9998 -0.0174 -0.0137 +vn 0.9998 -0.0126 -0.0181 +vn -0.7134 0.5507 0.4333 +vn 0.6822 0.5748 0.4520 +vn 0.0212 0.9421 0.3347 +vn 0.6821 0.6901 0.2418 +vn -0.7133 0.6614 0.2319 +vn 0.9998 -0.0119 -0.0184 +vn 0.9998 -0.0090 -0.0198 +vn -0.7132 0.3815 0.5880 +vn 0.6821 0.3978 0.6135 +vn 0.0212 0.5403 0.8412 +vn -0.0211 -0.8044 -0.5937 +vn -0.6808 -0.5865 -0.4388 +vn 0.7119 -0.5625 -0.4205 +vn 0.0212 0.7833 0.6213 +vn 0.0215 0.3983 0.9170 +vn 0.7169 -0.2791 -0.6389 +vn -0.6859 -0.2915 -0.6667 +vn -0.0215 -0.4005 -0.9160 +vn -0.9998 0.0091 0.0204 +vn -0.9997 0.0121 0.0191 +vn -0.0212 -0.5692 -0.8219 +vn -0.6806 -0.4134 -0.6048 +vn 0.7118 -0.3967 -0.5797 +vn 0.7118 -0.3966 -0.5797 +vn 0.9998 -0.0028 0.0216 +vn 0.9998 -0.0028 0.0219 +vn 0.9998 -0.0025 0.0218 +vn -0.7222 0.1695 0.6706 +vn 0.0218 0.1162 -0.9930 +vn 0.7223 -0.1694 -0.6705 +vn 0.6861 0.2899 0.6673 +vn -0.7171 0.2777 0.6392 +vn 0.9998 -0.0079 -0.0194 +vn 0.9998 -0.0056 -0.0203 +vn -0.9998 0.0054 0.0212 +vn -0.9998 0.0069 0.0207 +vn -0.7075 0.6472 -0.2838 +vn 0.6762 0.6747 -0.2958 +vn -0.0206 -0.9356 0.3524 +vn 0.9998 -0.0217 0.0031 +vn 0.9997 -0.0209 0.0083 +vn 0.9997 -0.0183 0.0142 +vn 0.9998 -0.0203 0.0092 +vn 0.6829 0.7239 -0.0983 +vn -0.9997 0.0225 -0.0033 +vn -0.9997 0.0216 -0.0086 +vn -0.0212 -0.9932 0.1149 +vn 0.9997 -0.0225 0.0029 +vn 0.6657 0.5627 -0.4901 +vn -0.0196 -0.8103 0.5856 +vn 0.9998 -0.0110 0.0190 +vn 0.9997 -0.0172 0.0153 +vn 0.6881 -0.5800 0.4359 +vn -0.9997 0.0211 -0.0094 +vn -0.9997 0.0186 -0.0145 +vn 0.0209 0.9128 -0.4079 +vn -0.6726 -0.6896 0.2685 +vn 0.7043 -0.6616 0.2574 +vn 0.7130 -0.3366 0.6151 +vn -0.6817 -0.3512 0.6419 +vn 0.0214 0.4678 -0.8836 +vn -0.9997 0.0116 -0.0194 +vn -0.9997 0.0176 -0.0156 +vn -0.9997 0.0103 -0.0200 +vn -0.9998 0.0031 -0.0218 +vn -0.6973 0.5406 -0.4707 +vn 0.0204 0.7463 -0.6652 +vn -0.6559 -0.6033 0.4537 +vn 0.0217 0.1344 -0.9907 +vn -0.9998 0.0023 -0.0217 +vn -0.9998 0.0027 -0.0216 +vn -0.7217 0.0928 -0.6860 +vn -0.7220 0.0866 -0.6864 +vn 0.6909 0.0969 -0.7164 +vn 0.6913 0.0905 -0.7169 +vn 0.6913 0.0904 -0.7169 +vn 0.9998 -0.0031 0.0208 +vn 0.9998 -0.0101 0.0190 +vn -0.0212 -0.4821 0.8759 +vn 0.6824 0.3441 -0.6449 +vn -0.7137 0.3294 -0.6182 +vn -0.0218 -0.1162 0.9930 +vn 0.9998 -0.0054 -0.0213 +vn -0.6912 -0.0898 0.7170 +vn -0.6916 -0.0839 0.7174 +vn -0.9998 0.0053 0.0210 +vn -0.6909 -0.0956 0.7166 +vn 0.7219 -0.0915 0.6859 +vn 0.7222 -0.0860 0.6863 +vn 0.7222 -0.0859 0.6863 +vn -0.0219 -0.1319 0.9910 +vn -0.0000 -0.9756 0.2197 +vn -0.0001 -0.9756 0.2198 +vn -0.0000 -0.9756 0.2194 +vn -0.0000 -0.9931 -0.1171 +vn -0.0001 -0.9931 -0.1171 +vn 0.0001 -0.9931 -0.1171 +vn -0.6914 -0.1770 -0.7004 +vn -0.9998 0.0025 -0.0216 +vn 0.6914 0.1770 0.7004 +vn 0.7224 -0.0803 0.6868 +vn -0.0218 -0.2449 -0.9693 +vn -0.7223 0.0803 -0.6869 +vn 0.0218 0.2449 0.9693 +vn 0.6916 0.0839 -0.7174 +vn 0.9998 -0.0220 -0.0000 +vn 0.9998 -0.0223 -0.0004 +vn 0.9997 -0.0213 -0.0069 +vn 0.7223 -0.6916 -0.0000 +vn 0.7136 -0.6956 0.0834 +vn 0.9998 -0.0219 0.0014 +vn 0.9998 -0.0219 0.0015 +vn 0.9997 -0.0221 0.0085 +vn 0.9997 -0.0231 0.0035 +vn -0.7133 0.7009 0.0055 +vn -0.9998 0.0223 -0.0001 +vn -0.9997 0.0214 0.0066 +vn -0.9997 0.0224 0.0003 +vn 0.9998 -0.0214 -0.0000 +vn -0.6806 -0.5868 -0.4387 +vn -0.9997 0.0213 0.0078 +vn -0.9997 0.0183 0.0135 +vn -0.9997 0.0135 0.0187 +vn -0.9997 0.0179 0.0145 +vn 0.9997 -0.0185 -0.0135 +vn 0.9997 -0.0217 -0.0078 +vn 0.9997 -0.0181 -0.0144 +vn 0.9997 -0.0135 -0.0188 +vn 0.9997 -0.0122 -0.0191 +vn 0.9997 -0.0095 -0.0203 +vn -0.7133 0.3812 0.5881 +vn 0.6820 0.3982 0.6135 +vn 0.0213 0.5403 0.8412 +vn 0.7118 -0.5626 -0.4205 +vn 0.6820 0.5751 0.4519 +vn -0.7132 0.5512 0.4331 +vn -0.7172 0.2774 0.6393 +vn 0.0215 0.3980 0.9171 +vn 0.7170 -0.2790 -0.6388 +vn -0.9997 0.0093 0.0205 +vn -0.9997 0.0124 0.0190 +vn 0.7118 -0.3964 -0.5798 +vn 0.9998 -0.0027 0.0215 +vn 0.9998 -0.0025 0.0216 +vn 0.7222 -0.1695 -0.6706 +vn 0.9998 -0.0069 -0.0207 +vn 0.9998 -0.0058 -0.0216 +vn -0.6860 -0.2912 -0.6668 +vn 0.6760 0.6750 -0.2957 +vn 0.9997 -0.0189 0.0145 +vn 0.9997 -0.0211 0.0094 +vn 0.7041 -0.6618 0.2575 +vn -0.9998 0.0221 -0.0028 +vn -0.9997 0.0227 -0.0032 +vn -0.9997 0.0218 -0.0085 +vn 0.9997 -0.0114 0.0194 +vn 0.9997 -0.0177 0.0156 +vn 0.6882 -0.5796 0.4363 +vn -0.9997 0.0187 -0.0145 +vn 0.0213 0.4682 -0.8834 +vn -0.9997 0.0113 -0.0194 +vn -0.9997 0.0173 -0.0156 +vn -0.9997 0.0104 -0.0200 +vn 0.6656 0.5630 -0.4900 +vn -0.0217 -0.1319 0.9910 +vn 0.9997 -0.0105 0.0200 +vn 0.9998 -0.0033 0.0218 +vn 0.7128 -0.3367 0.6153 +vn -0.0211 -0.4821 0.8759 +vn 0.6826 0.3437 -0.6450 +vn 0.9998 -0.0053 -0.0210 +vn 0.7217 -0.0919 0.6861 +vn 0.7220 -0.0860 0.6866 +vn 0.7220 -0.0859 0.6866 +vn 0.0001 -0.9931 -0.1172 +vn 0.7223 -0.0804 0.6869 +vn -0.0687 -0.9976 0.0005 +vn -0.0684 -0.9977 0.0005 +vn -0.0687 0.9976 -0.0005 +vn -0.0684 0.9977 -0.0005 +vt -0.313034 0.306314 +vt -0.764139 0.033124 +vt -0.404350 0.033103 +vt -0.764139 0.058435 +vt -0.380463 0.306314 +vt 0.736066 0.000137 +vt -0.787103 0.058436 +vt 0.663857 0.000137 +vt -0.849112 0.025953 +vt 0.468872 0.000137 +vt -0.911121 0.025955 +vt 0.273887 0.000137 +vt -0.973130 0.058439 +vt 0.078902 0.000137 +vt -0.996094 0.058439 +vt -0.586250 0.060940 +vt 0.006693 0.000137 +vt -0.583744 0.035619 +vt -0.996094 0.033128 +vt -0.973130 0.033128 +vt -0.787103 0.033124 +vt -0.381388 0.033224 +vt -0.764139 0.058455 +vt 0.428456 0.058726 +vt 0.006693 0.481452 +vt -0.761633 0.033134 +vt 0.428456 0.024414 +vt 0.745223 0.482142 +vt -0.759127 0.007812 +vt 0.428456 -0.009898 +vt 0.677629 0.482142 +vt 0.409642 -0.009898 +vt -0.973130 0.007816 +vt 0.671703 0.006015 +vt 0.745223 0.006015 +vt -0.581238 0.010298 +vt -0.996094 0.007817 +vt 0.221756 0.024414 +vt -0.313034 0.373150 +vt -0.380463 0.373149 +vt 0.221756 0.058726 +vt 0.736066 0.481452 +vt 0.240570 0.024414 +vt 0.669677 0.481452 +vt 0.240570 0.058726 +vt 0.221756 -0.009898 +vt -0.245605 0.373150 +vt 0.002606 0.482143 +vt 0.240570 -0.009898 +vt 0.070201 0.482143 +vt -0.245605 0.306314 +vt -0.764139 0.007812 +vt -0.403424 0.007812 +vt 0.002606 0.006015 +vt -0.911121 -0.024667 +vt 0.473178 0.006015 +vt -0.849112 -0.024667 +vt 0.274652 0.006015 +vt -0.787103 0.007813 +vt -0.380463 0.007933 +vt 0.076127 0.006015 +vt 0.271947 0.481452 +vt 0.353285 0.014692 +vt 0.353285 -0.019617 +vt 0.409642 0.024414 +vt 0.409642 0.058726 +vt 0.073082 0.481452 +vt 0.296927 -0.019617 +vt 0.272677 0.482143 +vt 0.296927 -0.053929 +vt 0.941339 0.662418 +vt 0.941416 0.526435 +vt 0.950664 0.527410 +vt 0.843251 0.629843 +vt 0.950587 0.663396 +vt 0.843671 0.654779 +vt 0.812119 0.836919 +vt 0.964010 0.663692 +vt 0.863151 0.631247 +vt 0.822636 0.844017 +vt 0.862872 0.655906 +vt 0.856807 0.669302 +vt 0.735059 0.832612 +vt 0.735059 0.647886 +vt 0.742424 0.647886 +vt 0.876452 0.669215 +vt 0.742424 0.832613 +vt 0.742425 0.512683 +vt 0.894881 0.512581 +vt 0.751649 0.497950 +vt 0.905767 0.510501 +vt 0.751702 0.630627 +vt 0.801291 0.940713 +vt 0.856947 0.988199 +vt 0.856945 0.803793 +vt 0.876589 0.803709 +vt 0.791826 0.943631 +vt 0.876592 0.988115 +vt 0.735060 0.512683 +vt 0.882682 0.511552 +vt 0.926534 0.525457 +vt 0.727693 0.647886 +vt 0.727695 0.512683 +vt 0.875102 0.510522 +vt 0.801157 0.825907 +vt 0.791884 0.853777 +vt 0.806729 0.657456 +vt 0.847765 0.988286 +vt 0.812289 0.951673 +vt 0.847763 0.803877 +vt 0.751760 0.811997 +vt 0.887430 0.669945 +vt 0.886630 0.804331 +vt 0.913283 0.527422 +vt 0.886603 0.988735 +vt 0.785854 0.930745 +vt 0.795491 0.655755 +vt 0.785729 0.843066 +vt 0.727693 0.832612 +vt 0.847625 0.669386 +vt 0.713749 0.641046 +vt 0.863470 0.510032 +vt 0.713809 0.507538 +vt 0.836205 0.988157 +vt 0.822538 0.957456 +vt 0.836179 0.803751 +vt 0.713681 0.823570 +vt 0.835301 0.669330 +vt 0.926457 0.661438 +vt 0.806880 0.632495 +vt 0.879820 0.656741 +vt 0.831919 0.849275 +vt 0.825403 0.990100 +vt 0.831973 0.959038 +vt 0.825357 0.805701 +vt 0.699196 0.946601 +vt 0.823833 0.671479 +vt 0.699154 0.825824 +vt 0.699125 0.648995 +vt 0.964832 0.527871 +vt 0.693375 0.826175 +vt 0.693136 0.656899 +vt 0.831879 0.698827 +vt 0.976550 0.669218 +vt 0.879746 0.632843 +vt 0.838635 0.712703 +vt 0.838720 0.857097 +vt 0.699123 0.519826 +vt 0.852636 0.503733 +vt 0.692989 0.533501 +vt 0.980286 0.523707 +vt 0.843764 0.492301 +vt 0.831877 0.595919 +vt 0.978029 0.533842 +vt 0.838613 0.580367 +vt 0.822377 0.514837 +vt 0.988836 0.544682 +vt 0.835247 0.648050 +vt 0.847521 0.687073 +vt 0.847516 0.826828 +vt 0.685305 0.644796 +vt 0.970063 0.523714 +vt 0.685486 0.526057 +vt 0.847568 0.590756 +vt 0.834827 0.514833 +vt 0.816522 0.993905 +vt 0.927294 0.848177 +vt 0.838815 0.962153 +vt 0.816460 0.809515 +vt 0.927260 0.722468 +vt 0.693568 0.942069 +vt 0.676831 0.516496 +vt 0.958840 0.523717 +vt 0.848500 0.514828 +vt 0.937224 0.848189 +vt 0.847550 0.928123 +vt 0.858551 0.824209 +vt 0.858595 0.924214 +vt 0.948764 0.848195 +vt 0.936829 0.631655 +vt 0.685099 0.808694 +vt 0.937212 0.722480 +vt 0.684992 0.921714 +vt 0.948770 0.722485 +vt 0.676517 0.796335 +vt 0.948965 0.631660 +vt 0.738123 0.700985 +vt 0.963170 0.848195 +vt 0.738243 0.839436 +vt 0.986917 0.848740 +vt 0.715219 0.849945 +vt 0.715099 0.711494 +vt 0.986916 0.654769 +vt 0.926539 0.848195 +vt 0.676680 0.633788 +vt 0.668447 0.648172 +vt 0.986917 0.848688 +vt 0.668483 0.530625 +vt 0.988773 0.991624 +vt 0.924455 0.523717 +vt 0.966366 0.993905 +vt 0.784884 0.510252 +vt 0.963307 0.939029 +vt 0.984889 0.523718 +vt 0.926676 0.939027 +vt 0.929328 0.993908 +vt 0.982141 0.523717 +vt 0.793850 0.530363 +vt 0.890289 0.828206 +vt 0.993547 0.667196 +vt 0.890332 0.928211 +vt 0.991690 0.524263 +vt 0.985395 0.848189 +vt 0.858546 0.685716 +vt 0.848337 0.648048 +vt 0.759449 0.503151 +vt 0.916436 0.503458 +vt 0.759731 0.682529 +vt 0.914138 0.663190 +vt 0.795146 0.631260 +vt 0.901937 0.669215 +vt 0.782174 0.630654 +vt 0.778434 0.685046 +vt 0.778316 0.584246 +vt 0.900291 0.534097 +vt 0.896974 0.806424 +vt 0.759901 1.000731 +vt 0.896921 0.990818 +vt 0.778635 0.939928 +vt 0.782414 0.654063 +vt 0.778566 0.832415 +vt 0.768618 0.689770 +vt 0.985566 0.939017 +vt 0.890524 0.544126 +vt 0.768575 0.593080 +vt 0.905093 0.809525 +vt 0.768560 1.002138 +vt 0.929295 0.540829 +vt 0.905024 0.993905 +vt 0.768589 0.932608 +vt 0.929324 0.487682 +vt 0.768622 0.830427 +vt 0.898578 0.672340 +vt 0.759907 0.848433 +vt 0.752094 0.935091 +vt 0.939197 0.487679 +vt 0.752381 0.835222 +vt 0.768532 0.849375 +vt 0.776628 0.881245 +vt 0.938858 0.631655 +vt 0.776768 0.993472 +vt 0.939186 0.540826 +vt 0.988897 0.993924 +vt 0.924455 0.492867 +vt 0.768274 0.517218 +vt 0.973766 0.939027 +vt 0.752917 0.601609 +vt 0.976947 0.993908 +vt 0.776159 0.531412 +vt 0.768260 0.703455 +vt 0.776375 0.718890 +vt 0.784852 0.723476 +vt 0.948776 0.631655 +vt 0.784763 0.886201 +vt 0.973404 0.848195 +vt 0.752724 0.697087 +vt 0.948884 0.487679 +vt 0.738290 0.939534 +vt 0.948880 0.540826 +vt 0.985593 0.540826 +vt 0.982313 0.991749 +vt 0.985596 0.487679 +vt 0.985061 0.991751 +vt 0.715266 0.950043 +vt 0.890284 0.689714 +vt 0.993547 0.860948 +vt 0.890286 0.648050 +vt 0.985488 0.631655 +vt 0.980286 0.860702 +vt 0.793729 0.906310 +vt 0.668444 0.810949 +vt 0.986917 0.654937 +vt 0.985596 0.631655 +vt 0.669719 0.731645 +vt 0.988943 0.524132 +vt 0.985401 0.722480 +vt 0.991521 0.991751 +vt 0.890449 0.514831 +vt 0.983601 0.757734 +vt 0.980286 0.666728 +vt 0.793818 0.743585 +vt 0.733075 0.647066 +vt 0.882747 0.519736 +vt 0.882683 0.662849 +vt 0.875103 0.661819 +vt 0.739746 0.647068 +vt 0.875166 0.518706 +vt 0.739746 0.781782 +vt 0.864164 0.518394 +vt 0.748516 0.751488 +vt 0.748452 0.866187 +vt 0.719407 0.932069 +vt 0.960394 0.803706 +vt 0.719647 0.940280 +vt 0.810658 0.581131 +vt 0.799284 0.578809 +vt 0.700463 0.940235 +vt 0.970434 0.804329 +vt 0.701861 0.932031 +vt 0.733076 0.880383 +vt 0.951214 0.988199 +vt 0.951211 0.803793 +vt 0.735453 0.932064 +vt 0.726405 0.880383 +vt 0.960396 0.988115 +vt 0.825349 0.617929 +vt 0.882682 0.759155 +vt 0.894882 0.663878 +vt 0.894881 0.711294 +vt 0.810995 0.617592 +vt 0.825352 0.599679 +vt 0.811381 0.602046 +vt 0.855840 0.599679 +vt 0.855837 0.617929 +vt 0.875102 0.725533 +vt 0.733075 0.781782 +vt 0.726404 0.781782 +vt 0.936398 0.988286 +vt 0.739747 0.880383 +vt 0.936396 0.803877 +vt 0.761343 0.932059 +vt 0.905744 0.661808 +vt 0.799619 0.617266 +vt 0.905767 0.652177 +vt 0.718174 0.889920 +vt 0.970407 0.988735 +vt 0.718117 0.793171 +vt 0.726404 0.647066 +vt 0.894945 0.520765 +vt 0.718025 0.660940 +vt 0.905042 0.518923 +vt 0.735693 0.940274 +vt 0.855840 0.574713 +vt 0.761583 0.940269 +vt 0.885954 0.599497 +vt 0.863470 0.855415 +vt 0.886233 0.617506 +vt 0.924837 0.988157 +vt 0.748326 0.965698 +vt 0.924812 0.803753 +vt 0.781587 0.932067 +vt 0.783121 0.940273 +vt 0.885538 0.574854 +vt 0.863490 0.661333 +vt 0.912704 0.615336 +vt 0.852636 0.849117 +vt 0.728764 0.966795 +vt 0.852673 0.655049 +vt 0.754748 0.633111 +vt 0.754838 0.872768 +vt 0.914036 0.990102 +vt 0.754778 0.974589 +vt 0.800498 0.931948 +vt 0.728756 0.545190 +vt 0.913990 0.805701 +vt 0.803162 0.940141 +vt 0.728784 0.664661 +vt 0.912740 0.573999 +vt 0.905093 0.809518 +vt 0.818852 0.722468 +vt 0.741490 0.563750 +vt 0.741498 0.678787 +vt 0.905155 0.993908 +vt 0.818886 0.848179 +vt 0.762309 0.981575 +vt 0.912745 0.597898 +vt 0.728786 0.839342 +vt 0.741457 0.846455 +vt 0.853885 0.512581 +vt 0.754866 0.741766 +vt 0.762863 0.757051 +vt 0.762602 0.887572 +vt 0.969707 0.523718 +vt 0.769353 0.765832 +vt 0.769304 0.876250 +vt 0.980286 0.857954 +vt 0.843764 0.837685 +vt 0.741394 0.968460 +vt 0.750243 0.849436 +vt 0.750071 0.966859 +vt 0.970063 0.857962 +vt 0.980256 0.663912 +vt 0.843814 0.643641 +vt 0.763060 0.648054 +vt 0.769467 0.632436 +vt 0.970052 0.663922 +vt 0.755857 0.843632 +vt 0.756027 0.959566 +vt 0.958840 0.857966 +vt 0.958844 0.663924 +vt 0.775604 0.760023 +vt 0.958978 0.523722 +vt 0.769276 0.981674 +vt 0.828816 0.848190 +vt 0.775607 0.878731 +vt 0.775639 0.964455 +vt 0.840356 0.848195 +vt 0.750428 0.687335 +vt 0.828421 0.631655 +vt 0.750513 0.575542 +vt 0.828804 0.722480 +vt 0.688050 0.609389 +vt 0.904112 0.848195 +vt 0.688131 0.728061 +vt 0.808370 0.805104 +vt 0.680010 0.708791 +vt 0.679929 0.590118 +vt 0.808372 0.989419 +vt 0.818131 0.848195 +vt 0.760754 0.831798 +vt 0.979629 0.901632 +vt 0.761060 0.947310 +vt 0.975671 0.893340 +vt 0.802783 0.632332 +vt 0.924455 0.611573 +vt 0.906652 0.993905 +vt 0.726730 0.628424 +vt 0.904250 0.939029 +vt 0.809498 0.982900 +vt 0.818268 0.939029 +vt 0.819716 0.993908 +vt 0.812813 0.982900 +vt 0.974889 0.913130 +vt 0.749755 0.596244 +vt 0.789189 0.847374 +vt 0.818131 0.972055 +vt 0.789221 0.933098 +vt 0.969451 0.920451 +vt 0.817308 0.994029 +vt 0.926337 0.848190 +vt 0.755567 0.683230 +vt 0.840557 0.631660 +vt 0.840362 0.722485 +vt 0.915043 0.512581 +vt 0.709495 0.659000 +vt 0.916393 0.654784 +vt 0.709489 0.570556 +vt 0.685546 1.007505 +vt 0.683785 0.931904 +vt 0.980778 0.806424 +vt 0.709612 0.831621 +vt 0.980725 0.990818 +vt 0.709336 0.751709 +vt 0.799464 0.599357 +vt 0.701248 0.740858 +vt 0.701362 0.634441 +vt 0.988828 0.993905 +vt 0.701129 0.821880 +vt 0.820916 0.487683 +vt 0.789036 0.578292 +vt 0.680982 0.940089 +vt 0.685932 0.896792 +vt 0.696215 0.892922 +vt 0.696266 0.999906 +vt 0.988897 0.809525 +vt 0.820887 0.540831 +vt 0.787434 0.618525 +vt 0.916175 0.685874 +vt 0.686810 0.616527 +vt 0.924398 0.644227 +vt 0.926509 0.939017 +vt 0.701653 0.556973 +vt 0.924455 0.838255 +vt 0.929184 0.993924 +vt 0.695950 0.624391 +vt 0.788082 0.601547 +vt 0.686455 0.734796 +vt 0.712429 0.887718 +vt 0.830450 0.631655 +vt 0.712622 0.993366 +vt 0.830779 0.540828 +vt 0.695857 0.524204 +vt 0.914708 0.939027 +vt 0.711799 0.624362 +vt 0.917234 0.993908 +vt 0.696082 0.737357 +vt 0.712087 0.734868 +vt 0.726683 0.739186 +vt 0.914347 0.848195 +vt 0.695731 0.606049 +vt 0.830789 0.487680 +vt 0.695306 0.810043 +vt 0.840472 0.540828 +vt 0.840476 0.487680 +vt 0.688159 0.813851 +vt 0.695501 0.724449 +vt 0.926535 0.540828 +vt 0.975254 0.940280 +vt 0.926539 0.487680 +vt 0.802896 0.868927 +vt 0.981112 0.940280 +vt 0.680038 0.794580 +vt 0.789700 0.728665 +vt 0.818131 0.846532 +vt 0.924594 0.523718 +vt 0.760275 0.672073 +vt 0.979629 0.912871 +vt 0.926539 0.631655 +vt 0.840368 0.631655 +vt 0.726563 0.892383 +vt 0.926431 0.631655 +vt 0.970934 0.932678 +vt 0.749587 0.860204 +vt 0.972561 0.906896 +vt 0.814131 0.913266 +vt 0.975309 0.920458 +vt 0.926343 0.722481 +vt 0.800035 0.632303 +vt 0.924460 0.663922 +vt 0.812415 0.891578 +vt 0.978001 0.926705 +vt 0.970932 0.921426 +vt 0.749708 0.707006 +vt 0.475153 0.482142 +vt 0.353285 -0.053929 +vt 0.470812 0.481452 +vt 0.296927 0.014692 +s 1 +usemtl Material.002 +f 1/2/1 2/4/2 3/7/3 4/9/3 5/11/3 6/13/3 7/15/4 8/19/5 9/20/3 10/21/3 +f 8/18/5 7/16/4 11/23/6 12/26/6 +f 13/28/7 14/31/8 15/34/9 16/35/7 +f 17/39/10 18/40/10 2/5/2 1/1/1 +f 18/41/11 17/38/11 19/43/11 20/45/11 +f 21/46/11 22/49/11 19/43/11 17/38/11 +f 21/47/10 17/39/10 1/1/1 23/51/10 +f 16/36/6 8/18/5 12/26/6 13/29/6 +f 23/52/3 1/2/3 10/21/3 9/20/3 8/19/3 16/37/3 15/33/3 24/55/3 25/57/3 26/59/3 +f 16/37/3 15/33/3 9/20/3 8/19/3 +f 10/22/11 1/3/11 23/53/11 26/60/11 +f 27/63/11 28/64/11 29/65/11 30/66/11 +f 12/27/11 11/24/11 30/66/11 29/65/11 +f 31/68/11 19/43/11 22/49/11 32/70/11 +f 14/32/11 13/30/11 12/27/11 29/65/11 +f 18/42/12 20/44/13 3/8/14 2/6/12 +f 6/14/15 30/67/16 11/25/12 7/17/12 +f 5/12/17 27/62/18 30/67/16 6/14/15 +f 26/61/19 22/50/20 21/48/7 23/54/7 +f 25/58/21 32/69/22 22/50/20 26/61/19 +f 33/71/23 34/72/23 35/73/24 36/75/25 +f 37/76/26 36/74/26 38/79/27 39/81/28 +f 40/83/29 41/84/29 42/85/30 43/87/31 +f 42/85/32 44/88/32 45/90/32 46/92/32 +f 47/94/33 48/95/33 49/96/33 50/98/33 +f 51/100/34 34/72/34 52/101/34 44/89/34 +f 41/84/35 51/99/35 44/88/35 42/85/35 +f 53/102/36 54/103/36 51/99/35 41/84/35 +f 54/104/37 35/73/37 34/72/34 51/100/34 +f 55/105/38 47/93/38 50/97/38 56/106/38 +f 37/77/39 57/109/39 47/93/38 55/105/38 +f 57/108/33 58/110/33 48/95/33 47/94/33 +f 49/96/40 43/86/40 59/112/40 60/113/40 +f 44/89/41 52/101/41 61/114/41 45/91/41 +f 56/106/42 50/97/42 62/116/42 63/118/42 +f 48/95/43 40/82/43 43/86/43 49/96/43 +f 58/110/43 64/120/43 40/82/43 48/95/43 +f 64/119/44 53/102/44 41/84/29 40/83/29 +f 54/103/36 53/102/36 65/121/45 66/123/45 +f 58/110/46 57/108/46 67/124/46 68/126/46 +f 53/102/44 64/119/44 69/127/47 65/121/48 +f 70/129/23 52/101/23 34/72/23 33/71/23 +f 67/125/49 39/80/49 71/132/49 72/134/49 +f 69/128/50 68/126/50 73/135/50 74/137/50 +f 68/126/51 67/124/51 72/133/51 73/135/51 +f 65/121/48 69/127/47 74/138/52 75/139/53 +f 35/73/37 54/104/37 66/122/54 76/140/54 +f 64/120/55 58/110/55 68/126/55 69/128/55 +f 36/75/25 35/73/24 76/140/56 38/78/56 +f 57/109/57 37/77/57 39/80/57 67/125/57 +f 75/139/53 74/138/52 77/141/58 78/142/59 +f 71/132/60 79/143/61 80/146/62 81/147/63 +f 82/148/64 75/139/64 78/142/64 83/150/64 +f 79/143/65 84/153/65 85/155/65 80/146/65 +f 76/140/66 66/122/66 82/149/66 84/154/66 +f 38/78/67 76/140/67 84/154/67 79/144/67 +f 66/123/68 65/121/68 75/139/68 82/148/68 +f 39/81/28 38/79/27 79/145/61 71/131/60 +f 81/147/63 80/146/62 86/159/69 87/160/70 +f 83/150/71 78/142/71 88/161/71 89/163/71 +f 80/146/72 85/155/72 90/164/72 86/159/72 +f 85/156/73 83/151/73 89/162/73 90/165/73 +f 73/135/74 72/133/74 91/166/74 92/169/74 +f 74/138/75 73/136/75 92/171/75 77/141/75 +f 72/134/76 71/132/76 81/147/76 91/168/76 +f 84/154/77 82/149/77 83/152/77 85/157/77 +f 90/165/78 89/162/78 93/173/78 94/174/78 +f 95/176/79 87/160/79 96/177/79 97/178/79 +f 98/180/80 99/182/80 100/184/80 101/186/80 +f 99/182/81 95/175/81 97/179/81 100/184/81 +f 78/142/59 77/141/58 98/181/82 88/161/83 +f 92/170/84 91/167/84 95/175/84 99/182/84 +f 77/141/85 92/171/85 99/183/85 98/181/85 +f 91/168/86 81/147/87 87/160/86 95/176/87 +f 102/187/88 103/189/89 104/191/90 105/192/90 +f 93/172/91 106/195/91 107/196/91 108/198/91 +f 109/201/92 110/203/92 111/205/92 112/206/92 +f 97/178/93 96/177/93 113/209/93 114/211/93 +f 86/158/94 90/165/94 94/174/94 115/215/94 +f 89/163/95 88/161/95 106/195/95 93/172/95 +f 87/160/70 86/159/69 115/214/96 96/177/97 +f 88/161/83 98/181/82 101/185/98 106/195/99 +f 46/92/100 45/90/100 116/216/100 117/218/100 +f 61/114/101 118/219/101 119/221/101 120/225/101 +f 62/115/102 60/113/102 121/226/102 122/228/102 +f 118/220/103 63/117/104 123/230/105 119/222/106 +f 52/101/107 70/129/107 118/219/107 61/114/107 +f 43/87/31 42/85/30 46/92/108 59/111/109 +f 50/98/110 49/96/110 60/113/110 62/115/110 +f 70/130/111 56/107/111 63/117/104 118/220/103 +f 120/224/112 119/223/112 124/232/112 125/235/112 +f 122/228/113 121/226/113 126/236/113 127/239/113 +f 119/223/106 123/231/105 128/242/114 124/232/115 +f 123/231/116 122/229/116 127/240/116 128/242/116 +f 59/111/109 46/92/108 117/218/117 129/244/118 +f 45/91/119 61/114/119 120/225/119 116/217/119 +f 60/113/120 59/112/120 129/243/120 121/226/120 +f 63/118/121 62/116/121 122/229/121 123/231/121 +f 128/242/122 127/240/122 130/245/122 131/247/122 +f 126/237/123 132/248/123 133/249/123 134/251/123 +f 135/253/124 125/233/124 136/256/124 137/258/124 +f 132/248/125 138/260/126 139/261/127 133/249/128 +f 117/218/129 116/216/129 135/255/129 138/260/129 +f 129/244/118 117/218/117 138/260/126 132/248/125 +f 116/217/130 120/225/130 125/234/130 135/254/130 +f 121/227/131 129/244/131 132/248/131 126/237/131 +f 137/258/132 136/256/132 110/203/132 109/201/132 +f 133/249/128 139/261/127 140/262/133 141/264/134 +f 139/261/135 137/259/135 109/202/136 140/262/136 +f 136/256/137 142/265/137 102/188/138 110/203/139 +f 124/232/115 128/242/114 131/247/140 142/266/141 +f 127/241/142 126/238/142 134/252/142 130/246/142 +f 125/235/143 124/232/143 142/266/143 136/257/143 +f 138/260/144 135/255/144 137/259/144 139/261/144 +f 143/267/145 144/269/145 145/270/145 146/272/145 +f 96/177/97 115/214/96 147/275/146 113/209/146 +f 144/269/147 141/263/147 148/278/148 145/270/148 +f 106/195/99 101/185/98 149/281/149 107/196/149 +f 134/252/150 133/250/150 141/263/147 144/269/147 +f 131/247/151 130/245/151 143/268/152 103/189/153 +f 142/266/141 131/247/140 103/189/89 102/187/88 +f 130/246/154 134/252/154 144/269/154 143/267/154 +f 150/284/155 108/199/155 107/197/155 149/282/155 +f 114/212/155 150/284/155 149/282/155 151/285/155 +f 113/210/156 147/276/155 150/284/155 114/212/155 +f 147/276/155 152/287/157 108/199/155 150/284/155 +f 153/289/158 112/207/158 111/204/159 105/193/158 +f 146/273/158 153/289/158 105/193/158 104/190/158 +f 145/271/160 148/279/158 153/289/158 146/273/158 +f 148/279/158 154/290/158 112/207/158 153/289/158 +f 101/186/161 100/184/161 151/286/161 149/283/161 +f 141/264/134 140/262/133 154/291/162 148/280/162 +f 115/215/163 94/174/163 152/288/163 147/277/163 +f 103/189/153 143/268/152 146/274/164 104/191/164 +f 100/184/165 97/179/165 114/213/165 151/286/165 +f 140/262/136 109/202/136 112/208/166 154/291/166 +f 94/174/167 93/173/167 108/200/167 152/288/167 +f 110/203/139 102/188/138 105/194/168 111/205/168 +f 155/293/23 156/294/23 157/295/24 158/297/25 +f 159/298/169 158/296/169 160/300/170 161/301/171 +f 162/302/40 163/304/40 164/307/40 165/309/40 +f 166/311/33 167/312/33 162/303/33 168/315/33 +f 169/317/34 156/294/34 170/318/34 171/319/34 +f 172/321/35 169/316/35 171/320/35 173/322/35 +f 174/323/35 175/324/35 169/316/35 172/321/35 +f 175/325/37 157/295/37 156/294/34 169/317/34 +f 176/326/172 166/310/172 168/314/172 177/327/172 +f 159/298/172 178/329/172 166/310/172 176/326/172 +f 178/328/33 179/330/33 167/312/33 166/311/33 +f 171/319/41 170/318/41 180/332/41 181/334/41 +f 177/327/173 168/314/173 182/335/173 183/337/173 +f 184/338/174 177/327/175 183/337/176 185/340/177 +f 167/313/43 186/342/43 163/304/43 162/302/43 +f 179/331/43 187/344/43 186/342/43 167/313/43 +f 175/324/178 174/323/178 188/345/178 189/347/178 +f 179/330/46 178/328/46 190/348/46 191/350/46 +f 174/323/179 187/343/179 192/353/180 188/345/181 +f 176/326/182 155/292/182 158/296/169 159/298/169 +f 177/327/175 184/338/174 155/292/182 176/326/182 +f 184/339/23 170/318/23 156/294/23 155/293/23 +f 193/354/66 189/346/66 194/356/66 195/358/66 +f 190/349/49 161/301/49 196/360/49 197/362/49 +f 192/352/50 191/351/50 198/363/50 199/366/50 +f 191/350/51 190/348/51 197/361/51 198/365/51 +f 157/295/37 175/325/37 189/346/54 193/354/54 +f 187/344/55 179/331/55 191/351/55 192/352/55 +f 158/297/25 157/295/24 193/354/56 160/299/56 +f 178/329/57 159/298/57 161/301/57 190/349/57 +f 199/367/183 198/364/183 200/371/183 201/372/183 +f 198/365/74 197/361/74 202/373/74 200/369/74 +f 203/377/184 199/367/185 201/372/186 204/378/187 +f 196/360/188 205/380/189 206/381/190 207/382/191 +f 160/299/67 193/354/67 195/358/67 205/379/67 +f 189/347/68 188/345/68 203/376/68 194/355/68 +f 161/301/171 160/300/170 205/380/189 196/360/188 +f 188/345/181 192/353/180 199/368/185 203/376/184 +f 207/382/191 206/381/190 208/384/192 209/385/193 +f 210/388/194 204/378/194 211/389/194 212/390/194 +f 206/381/195 213/394/195 214/395/195 208/384/195 +f 213/392/196 210/386/196 212/391/196 214/396/196 +f 197/362/197 196/360/197 207/382/197 202/375/197 +f 195/358/77 194/356/77 210/387/77 213/393/77 +f 205/380/198 195/359/198 213/394/198 206/381/198 +f 194/357/199 203/377/199 204/378/199 210/388/199 +f 212/390/200 211/389/200 215/397/200 216/398/200 +f 208/383/94 214/396/94 217/400/94 218/402/94 +f 214/396/201 212/391/201 216/399/201 217/400/201 +f 219/403/202 209/385/202 220/405/202 221/406/202 +f 204/378/187 201/372/186 222/408/203 211/389/204 +f 200/370/84 202/374/84 219/404/84 223/411/84 +f 201/372/85 200/371/85 223/410/85 222/408/85 +f 202/375/205 207/382/205 209/385/205 219/403/205 +f 224/412/206 225/414/206 226/416/207 227/417/207 +f 216/398/91 215/397/91 228/420/91 229/422/91 +f 230/426/92 231/428/92 232/430/92 233/431/92 +f 221/406/208 220/405/208 234/435/208 235/437/208 +f 209/385/193 208/384/192 218/401/209 220/405/210 +f 211/389/204 222/408/203 236/441/98 215/397/99 +f 223/411/81 219/404/81 221/407/81 237/443/81 +f 222/409/211 223/411/211 237/443/211 236/442/211 +f 180/332/212 185/341/212 238/444/212 239/446/212 +f 182/336/102 165/308/102 240/450/102 241/452/102 +f 185/340/177 183/337/176 242/453/213 238/445/214 +f 183/337/215 182/335/215 241/451/215 242/453/215 +f 173/322/32 171/320/32 181/333/32 243/454/32 +f 170/318/107 184/339/107 185/341/107 180/332/107 +f 163/305/216 173/322/216 243/454/217 164/306/218 +f 168/315/110 162/303/110 165/308/110 182/336/110 +f 238/445/214 242/453/213 244/455/219 245/456/220 +f 242/453/221 241/451/221 246/458/221 244/455/221 +f 240/448/131 247/462/131 248/463/131 249/464/131 +f 250/468/130 239/446/130 251/470/130 252/473/130 +f 243/454/100 181/333/100 250/467/100 253/476/100 +f 164/306/218 243/454/217 253/476/117 247/460/222 +f 181/334/119 180/332/119 239/446/119 250/468/119 +f 165/309/120 164/307/120 247/461/120 240/449/120 +f 249/464/123 248/463/123 254/478/123 255/480/123 +f 252/474/223 251/471/223 256/483/223 257/485/223 +f 248/463/224 258/486/225 259/487/226 254/478/128 +f 258/486/144 252/475/144 257/484/144 259/487/144 +f 241/452/113 240/450/113 249/465/113 246/457/113 +f 239/447/227 238/445/227 245/456/227 251/472/227 +f 253/477/129 250/469/129 252/475/129 258/486/129 +f 247/462/222 253/477/117 258/486/225 248/463/224 +f 259/487/135 257/484/135 230/427/136 260/488/136 +f 256/483/137 261/489/137 224/413/138 231/428/139 +f 262/491/228 255/481/228 263/493/228 264/494/228 +f 261/490/229 265/496/230 225/414/206 224/412/206 +f 244/455/231 246/458/231 262/492/231 265/496/231 +f 245/456/220 244/455/219 265/496/230 261/490/229 +f 246/459/232 249/466/232 255/481/232 262/491/232 +f 251/472/233 245/456/233 261/490/233 256/482/233 +f 264/494/145 263/493/145 266/497/145 267/499/145 +f 220/405/210 218/401/209 268/503/234 234/435/234 +f 215/397/99 236/441/98 269/506/149 228/420/149 +f 263/493/147 270/509/147 271/511/148 266/497/148 +f 254/478/128 259/487/226 260/488/134 270/510/134 +f 257/485/132 256/483/132 231/428/132 230/426/132 +f 255/481/150 254/479/150 270/509/147 263/493/147 +f 265/496/235 262/492/235 264/495/236 225/414/237 +f 272/514/155 229/423/155 228/421/155 269/507/155 +f 235/438/155 272/514/155 269/507/155 273/516/155 +f 234/436/156 268/504/155 272/515/155 235/439/155 +f 268/504/155 274/518/155 229/424/155 272/515/155 +f 275/520/158 233/432/158 232/429/159 227/418/158 +f 267/500/158 275/520/158 227/418/158 226/415/158 +f 266/498/238 271/512/158 275/521/158 267/501/158 +f 271/512/158 276/522/158 233/433/158 275/521/158 +f 236/442/161 237/443/161 273/517/161 269/508/161 +f 270/510/134 260/488/134 276/523/162 271/513/162 +f 218/402/163 217/400/163 274/519/163 268/505/163 +f 225/414/237 264/495/236 267/502/239 226/416/239 +f 237/443/165 221/407/165 235/440/165 273/517/165 +f 260/488/136 230/427/136 233/434/166 276/523/166 +f 217/400/167 216/399/167 229/425/167 274/519/167 +f 231/428/139 224/413/138 227/419/168 232/430/168 +f 15/34/9 14/31/8 277/524/240 24/56/241 +f 24/56/241 277/524/240 32/69/22 25/58/21 +f 3/8/14 20/44/13 278/526/242 4/10/243 +f 4/10/243 278/526/242 27/62/18 5/12/17 +f 29/65/11 28/64/11 277/525/11 14/32/11 +f 28/64/11 31/68/11 32/70/11 277/525/11 +f 20/45/11 19/43/11 31/68/11 278/527/11 +f 278/527/11 31/68/11 28/64/11 27/63/11 diff --git a/resources/models/default.mtl b/resources/models/default.mtl new file mode 100644 index 00000000..49773e22 --- /dev/null +++ b/resources/models/default.mtl @@ -0,0 +1,13 @@ +# Blender MTL File: 'default.blend' +# Material Count: 1 + +newmtl Material +Ns 323.999994 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd default.png diff --git a/resources/models/default.obj b/resources/models/default.obj new file mode 100644 index 00000000..326ed3ec --- /dev/null +++ b/resources/models/default.obj @@ -0,0 +1,40 @@ +# Blender v2.92.0 OBJ File: 'default.blend' +# www.blender.org +mtllib default.mtl +o Cube +v 1.000000 1.000000 -1.000000 +v 1.000000 -1.000000 -1.000000 +v 1.000000 1.000000 1.000000 +v 1.000000 -1.000000 1.000000 +v -1.000000 1.000000 -1.000000 +v -1.000000 -1.000000 -1.000000 +v -1.000000 1.000000 1.000000 +v -1.000000 -1.000000 1.000000 +vt 0.625000 0.500000 +vt 0.875000 0.500000 +vt 0.875000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.625000 1.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.625000 0.000000 +vt 0.625000 0.250000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.500000 +vt 0.125000 0.750000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +usemtl Material +s off +f 1/1/1 5/2/1 7/3/1 3/4/1 +f 4/5/2 3/4/2 7/6/2 8/7/2 +f 8/8/3 7/9/3 5/10/3 6/11/3 +f 6/12/4 2/13/4 4/5/4 8/14/4 +f 2/13/5 1/1/5 3/4/5 4/5/5 +f 6/11/6 5/10/6 1/1/6 2/13/6 diff --git a/resources/models/laptop.mtl b/resources/models/laptop.mtl new file mode 100644 index 00000000..6831536c --- /dev/null +++ b/resources/models/laptop.mtl @@ -0,0 +1,13 @@ +# Blender 3.1.0 MTL File: 'TheDenObjects.blend' +# www.blender.org + +newmtl Computer +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd Computer.png diff --git a/resources/models/laptop.obj b/resources/models/laptop.obj new file mode 100644 index 00000000..b649927b --- /dev/null +++ b/resources/models/laptop.obj @@ -0,0 +1,292 @@ +# Blender 3.1.0 +# www.blender.org +mtllib laptop.mtl +o Cube.013 +v -0.125987 0.135000 -0.155000 +v -0.190000 0.135000 -0.155000 +v -0.190000 0.135000 -0.133098 +v -0.177010 0.135000 -0.133098 +v -0.125987 -0.135000 0.135000 +v -0.125987 -0.104102 0.135000 +v -0.190000 -0.104102 0.135000 +v -0.190000 -0.135000 0.135000 +v -0.190000 -0.081171 -0.143790 +v -0.190000 -0.091993 -0.138186 +v -0.190000 -0.089738 -0.114300 +v -0.190000 -0.077128 -0.120566 +v 0.125987 -0.128239 -0.097652 +v 0.190000 -0.128239 -0.097652 +v 0.190000 -0.135000 0.135000 +v 0.125987 -0.135000 0.135000 +v 0.190000 -0.081171 -0.143790 +v 0.190000 -0.077128 -0.120566 +v 0.190000 -0.089738 -0.114300 +v 0.190000 -0.091993 -0.138186 +v 0.125987 0.122274 -0.149395 +v 0.125987 0.135000 -0.155000 +v 0.190000 0.135000 -0.155000 +v 0.190000 0.122274 -0.149395 +v 0.177010 0.124295 -0.134105 +v 0.190000 0.124295 -0.126832 +v 0.190000 0.135000 -0.133098 +v 0.177010 0.135000 -0.133098 +v -0.190000 0.124295 -0.126832 +v -0.177010 0.124295 -0.134105 +v -0.190000 0.122274 -0.149395 +v -0.125987 0.122274 -0.149395 +v -0.190000 -0.128239 -0.097652 +v -0.125987 -0.128239 -0.097652 +v 0.190000 -0.104102 0.135000 +v 0.125987 -0.104102 0.135000 +v -0.125987 -0.098119 -0.113099 +v 0.125987 -0.098119 -0.113099 +v 0.177010 -0.089738 -0.114300 +v -0.177010 -0.089738 -0.114300 +v -0.125987 -0.102633 -0.137397 +v -0.125987 -0.091993 -0.138186 +v 0.125987 -0.091993 -0.138186 +v 0.125987 -0.102633 -0.137397 +v 0.125987 -0.135000 -0.135000 +v 0.190000 -0.102633 -0.137397 +v 0.190000 -0.135000 -0.135000 +v -0.190000 -0.135000 -0.135000 +v -0.190000 -0.102633 -0.137397 +v -0.125987 -0.135000 -0.135000 +v 0.190000 -0.098119 -0.113099 +v -0.190000 -0.098119 -0.113099 +v -0.125987 -0.081171 -0.143790 +v 0.125987 -0.081171 -0.143790 +v 0.177010 -0.077128 -0.127839 +v -0.177010 -0.077128 -0.127839 +vn -0.0000 1.0000 -0.0000 +vn -0.0000 -0.0000 1.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 -0.9996 -0.0286 +vn -0.0000 -0.9996 -0.0287 +vn 1.0000 -0.0000 -0.0000 +vn -0.0000 -0.4031 -0.9152 +vn -0.4743 0.2102 0.8549 +vn -0.4743 0.2100 0.8550 +vn 0.4743 0.2102 0.8549 +vn -0.0000 -0.0933 0.9956 +vn -0.0000 0.1423 0.9898 +vn -0.0000 -0.0742 -0.9972 +vn -0.0000 -0.0743 -0.9972 +vn 0.5727 -0.7964 -0.1945 +vn -0.0000 -0.9956 0.0940 +vn -0.0000 0.9831 -0.1830 +vn -0.5727 -0.7964 -0.1945 +vn -0.0000 -0.4598 -0.8880 +vn -0.0000 -0.0271 -0.9996 +vn -0.0000 -0.0272 -0.9996 +vn -0.0000 0.7318 0.6816 +vn -0.0000 0.0311 0.9995 +vn 0.3996 0.5662 0.7209 +vn 0.3996 0.5660 0.7210 +vn 0.7426 0.0208 0.6694 +vn 0.7426 0.0209 0.6694 +vn -0.3996 0.5660 0.7210 +vn -0.7426 0.0209 0.6694 +vn -0.7426 0.0208 0.6694 +vn -0.0000 -0.9841 0.1776 +vn -0.0000 -0.9841 0.1778 +vn -0.0000 0.9997 0.0244 +vt 0.843507 0.115975 +vt 0.854445 0.126913 +vt 0.859914 0.126913 +vt 0.843507 0.110506 +vt 0.846470 0.077745 +vt 0.859914 0.128244 +vt 0.758802 0.142316 +vt 0.817861 0.142316 +vt 0.758802 0.182602 +vt 0.817861 0.182602 +vt 0.854445 0.128244 +vt 0.628827 0.198692 +vt 0.847470 0.129216 +vt 0.876080 0.129216 +vt 0.876080 0.212549 +vt 0.884870 0.418901 +vt 0.046050 0.035046 +vt 0.847470 0.212549 +vt 0.602943 0.198692 +vt 0.872433 0.418901 +vt 0.714726 0.043387 +vt 0.706351 0.077745 +vt 0.636292 0.077745 +vt 0.862684 0.131882 +vt 0.692964 0.043387 +vt 0.836163 0.196454 +vt 0.609771 0.142316 +vt 0.816938 0.019277 +vt 0.679134 0.142316 +vt 0.897019 0.170385 +vt 0.654712 0.131781 +vt 0.680596 0.131781 +vt 0.931137 0.218471 +vt 0.680596 0.198692 +vt 0.654712 0.198692 +vt 0.931137 0.301804 +vt 0.714726 0.121039 +vt 0.484881 0.500000 +vt 0.787408 0.125370 +vt 0.910448 0.066311 +vt 0.457664 0.435429 +vt 0.388300 0.435429 +vt 0.718045 0.125370 +vt 0.414821 0.500000 +vt 0.692964 0.121039 +vt 0.554940 0.416667 +vt 0.838909 0.121444 +vt 0.736487 0.095155 +vt 0.625000 0.416667 +vt 0.843507 0.121444 +vt 0.848976 0.126913 +vt 0.843507 0.126913 +vt 0.625000 0.500000 +vt 0.736487 0.121039 +vt 0.554940 0.500000 +vt 0.812478 0.109692 +vt 0.748497 0.222888 +vt 0.884232 0.996204 +vt 0.979811 0.026026 +vt 0.812478 0.149978 +vt 0.979811 0.066311 +vt 0.527027 0.435429 +vt 0.881841 0.149978 +vt 0.843507 0.128244 +vt 0.596390 0.435429 +vt 0.881841 0.109692 +vt 0.817861 0.222888 +vt 0.848976 0.128244 +vt 0.689439 0.142316 +vt 0.886301 0.019277 +vt 0.748497 0.142316 +vt 0.689439 0.182602 +vt 0.748497 0.182602 +vt 0.010615 0.996204 +vt 0.886301 0.059563 +vt 0.838909 0.110506 +vt 0.736487 0.043387 +vt 0.776411 0.077745 +vt 0.838909 0.115975 +vt 0.736487 0.069271 +vt 0.602943 0.131781 +vt 0.872433 0.137963 +vt 0.740196 0.145777 +vt 0.628827 0.131781 +vt 0.813686 0.170385 +vt 0.823529 0.145777 +vt 0.959746 0.218471 +vt 0.689482 0.198692 +vt 0.730721 0.035046 +vt 0.959746 0.301804 +vt 0.813019 0.143230 +vt 0.817575 0.126913 +vt 0.722014 0.258843 +vt 0.813019 0.183516 +vt 0.965588 0.139222 +vt 0.827101 0.120031 +vt 0.826320 0.183516 +vt 0.978888 0.139222 +vt 0.388300 0.395143 +vt 0.609771 0.222888 +vt 0.718045 0.085084 +vt 0.826320 0.143230 +vt 0.836163 0.236739 +vt 0.880457 0.113700 +vt 0.609771 0.182602 +vt 0.689904 0.069271 +vt 0.829067 0.115975 +vt 0.897126 0.092177 +vt 0.862684 0.215216 +vt 0.906978 0.092177 +vt 0.692964 0.069271 +vt 1.005409 0.160745 +vt 0.414821 0.416667 +vt 0.692964 0.095155 +vt 0.689904 0.095155 +vt 0.995557 0.160745 +vt 0.829067 0.121444 +vt 0.680596 0.095155 +vt 0.897019 0.135804 +vt 0.654712 0.121039 +vt 0.689904 0.121039 +vt 0.829067 0.126913 +vt 0.680596 0.121039 +vt 0.680596 0.043387 +vt 0.872433 0.092864 +vt 0.740196 0.111196 +vt 0.689904 0.043387 +vt 0.885461 0.092864 +vt 0.829067 0.110506 +vt 0.680596 0.069271 +vt 0.813686 0.135804 +vt 0.823529 0.111196 +vt 0.660539 0.121039 +vt 0.822863 0.126913 +vt 0.730721 0.468669 +vt 0.791824 0.201543 +vt 0.814932 0.126913 +vt 0.046050 0.468669 +vt 0.714726 0.069271 +vt 0.714726 0.095155 +vt 0.679134 0.222888 +vt 0.884232 0.499889 +vt 0.787408 0.085084 +vt 0.910448 0.026026 +vt 0.010615 0.499889 +vt 0.679134 0.182602 +vt 0.816938 0.059563 +s 1 +usemtl Computer +f 1/2/1 2/3/1 3/6/1 4/11/1 +f 5/13/2 6/14/2 7/15/2 8/18/2 +f 9/22/3 10/23/3 11/27/3 12/29/3 +f 13/31/4 14/32/5 15/34/5 16/35/4 +f 17/38/6 18/41/6 19/42/6 20/44/6 +f 21/46/7 22/49/7 23/53/7 24/55/7 +f 25/56/8 26/60/8 27/63/9 28/66/8 +f 29/69/10 30/72/10 4/9/10 3/7/10 +f 30/73/11 25/57/11 28/67/11 4/10/11 +f 31/76/7 2/4/7 1/1/7 32/79/7 +f 32/79/7 1/1/7 22/50/7 21/47/7 +f 33/81/5 34/84/4 5/12/4 8/19/5 +f 34/84/4 13/31/4 16/35/4 5/12/4 +f 15/33/2 35/87/2 36/90/2 16/36/2 +f 23/52/1 22/51/1 28/68/1 27/64/1 +f 22/51/1 1/2/1 4/11/1 28/68/1 +f 37/91/12 38/94/12 39/97/12 40/102/12 +f 41/106/13 42/111/14 43/114/14 44/115/13 +f 45/118/14 44/115/13 46/121/14 47/123/14 +f 48/124/14 49/127/14 41/106/13 50/130/14 +f 50/130/14 41/106/13 44/115/13 45/118/14 +f 47/123/6 46/121/6 51/133/6 35/88/6 15/34/6 14/32/6 +f 8/20/3 7/16/3 52/136/3 49/128/3 48/125/3 33/82/3 +f 38/95/15 44/116/15 43/112/15 39/98/15 +f 19/42/16 39/99/16 43/113/16 20/44/16 +f 51/134/17 46/122/17 44/117/17 38/96/17 +f 37/92/17 41/107/17 49/129/17 52/137/17 +f 40/103/16 11/26/16 10/24/16 42/109/16 +f 37/93/18 40/104/18 42/110/18 41/108/18 +f 42/111/19 53/139/19 54/140/19 43/114/19 +f 53/139/20 32/80/20 21/48/20 54/140/20 +f 10/25/19 9/21/19 53/139/19 42/111/19 +f 9/21/21 31/77/21 32/80/20 53/139/20 +f 40/105/22 39/100/22 55/141/22 56/146/22 +f 56/145/23 55/142/23 25/58/23 30/74/23 +f 11/27/24 40/105/25 56/146/25 12/29/25 +f 12/28/26 56/147/27 30/75/27 29/70/26 +f 39/101/28 19/43/28 18/39/28 55/143/28 +f 55/144/29 18/40/30 26/61/30 25/59/29 +f 43/114/19 54/140/19 17/37/19 20/45/19 +f 54/140/20 21/48/20 24/54/21 17/37/21 +f 23/53/6 27/65/6 26/62/6 24/55/6 +f 24/55/6 26/62/6 18/41/6 17/38/6 +f 2/5/3 31/78/3 29/71/3 3/8/3 +f 31/78/3 9/22/3 12/29/3 29/71/3 +f 50/131/31 45/119/31 13/30/31 34/85/31 +f 48/126/32 50/132/31 34/86/31 33/83/32 +f 45/120/31 47/123/32 14/32/32 13/31/31 +f 52/138/33 7/17/33 35/89/33 51/135/33 +f 5/13/2 16/36/2 36/90/2 6/14/2 diff --git a/resources/models/marker.mtl b/resources/models/marker.mtl new file mode 100644 index 00000000..bdf444c0 --- /dev/null +++ b/resources/models/marker.mtl @@ -0,0 +1,13 @@ +# Blender 3.1.0 MTL File: 'TheDenObjects.blend' +# www.blender.org + +newmtl marker +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd marker.png diff --git a/resources/models/marker.obj b/resources/models/marker.obj new file mode 100644 index 00000000..0572f88e --- /dev/null +++ b/resources/models/marker.obj @@ -0,0 +1,690 @@ +# Blender 3.1.0 +# www.blender.org +mtllib marker.mtl +o Cylinder +v -0.000000 -0.069253 -0.005551 +v 0.000000 0.070000 -0.007500 +v 0.001083 -0.069253 -0.005445 +v 0.001463 0.070000 -0.007356 +v 0.002124 -0.069253 -0.005129 +v 0.002870 0.070000 -0.006929 +v 0.003084 -0.069253 -0.004616 +v 0.004167 0.070000 -0.006236 +v 0.003925 -0.069253 -0.003925 +v 0.005303 0.070000 -0.005303 +v 0.004616 -0.069253 -0.003084 +v 0.006236 0.070000 -0.004167 +v 0.005129 -0.069253 -0.002124 +v 0.006929 0.070000 -0.002870 +v 0.005445 -0.069253 -0.001083 +v 0.007356 0.070000 -0.001463 +v 0.005551 -0.069253 0.000000 +v 0.007500 0.070000 0.000000 +v 0.005445 -0.069253 0.001083 +v 0.007356 0.070000 0.001463 +v 0.005129 -0.069253 0.002124 +v 0.006929 0.070000 0.002870 +v 0.004616 -0.069253 0.003084 +v 0.006236 0.070000 0.004167 +v 0.003925 -0.069253 0.003925 +v 0.005303 0.070000 0.005303 +v 0.003084 -0.069253 0.004616 +v 0.004167 0.070000 0.006236 +v 0.002124 -0.069253 0.005129 +v 0.002870 0.070000 0.006929 +v 0.001083 -0.069253 0.005445 +v 0.001463 0.070000 0.007356 +v -0.000000 -0.069253 0.005551 +v -0.000000 0.070000 0.007500 +v -0.001083 -0.069253 0.005445 +v -0.001463 0.070000 0.007356 +v -0.002124 -0.069253 0.005129 +v -0.002870 0.070000 0.006929 +v -0.003084 -0.069253 0.004616 +v -0.004167 0.070000 0.006236 +v -0.003925 -0.069253 0.003925 +v -0.005303 0.070000 0.005303 +v -0.004616 -0.069253 0.003084 +v -0.006236 0.070000 0.004167 +v -0.005129 -0.069253 0.002124 +v -0.006929 0.070000 0.002870 +v -0.005445 -0.069253 0.001083 +v -0.007356 0.070000 0.001463 +v -0.005551 -0.069253 -0.000000 +v -0.007500 0.070000 -0.000000 +v -0.005445 -0.069253 -0.001083 +v -0.007356 0.070000 -0.001463 +v -0.005129 -0.069253 -0.002124 +v -0.006929 0.070000 -0.002870 +v -0.004616 -0.069253 -0.003084 +v -0.006236 0.070000 -0.004167 +v -0.003925 -0.069253 -0.003925 +v -0.005303 0.070000 -0.005303 +v -0.003084 -0.069253 -0.004616 +v -0.004167 0.070000 -0.006236 +v -0.002124 -0.069253 -0.005129 +v -0.002870 0.070000 -0.006929 +v -0.001083 -0.069253 -0.005445 +v -0.001463 0.070000 -0.007356 +v 0.000000 -0.064250 -0.007500 +v 0.001463 -0.064250 -0.007356 +v 0.002870 -0.064250 -0.006929 +v 0.004167 -0.064250 -0.006236 +v 0.005303 -0.064250 -0.005303 +v 0.006236 -0.064250 -0.004167 +v 0.006929 -0.064250 -0.002870 +v 0.007356 -0.064250 -0.001463 +v 0.007500 -0.064250 0.000000 +v 0.007356 -0.064250 0.001463 +v 0.006929 -0.064250 0.002870 +v 0.006236 -0.064250 0.004167 +v 0.005303 -0.064250 0.005303 +v 0.004167 -0.064250 0.006236 +v 0.002870 -0.064250 0.006929 +v 0.001463 -0.064250 0.007356 +v -0.000000 -0.064250 0.007500 +v -0.001463 -0.064250 0.007356 +v -0.002870 -0.064250 0.006929 +v -0.004167 -0.064250 0.006236 +v -0.005303 -0.064250 0.005303 +v -0.006236 -0.064250 0.004167 +v -0.006929 -0.064250 0.002870 +v -0.007356 -0.064250 0.001463 +v -0.007500 -0.064250 -0.000000 +v -0.007356 -0.064250 -0.001463 +v -0.006929 -0.064250 -0.002870 +v -0.006236 -0.064250 -0.004167 +v -0.005303 -0.064250 -0.005303 +v -0.004167 -0.064250 -0.006236 +v -0.002870 -0.064250 -0.006929 +v -0.001463 -0.064250 -0.007356 +v 0.001083 -0.064997 -0.005445 +v 0.002124 -0.064997 -0.005129 +v 0.003084 -0.064997 -0.004616 +v 0.003925 -0.064997 -0.003925 +v 0.004616 -0.064997 -0.003084 +v 0.005129 -0.064997 -0.002124 +v 0.005445 -0.064997 -0.001083 +v 0.005551 -0.064997 0.000000 +v 0.005445 -0.064997 0.001083 +v 0.005129 -0.064997 0.002124 +v 0.004616 -0.064997 0.003084 +v 0.003925 -0.064997 0.003925 +v 0.003084 -0.064997 0.004616 +v 0.002124 -0.064997 0.005129 +v 0.001083 -0.064997 0.005445 +v -0.000000 -0.064997 0.005551 +v -0.001083 -0.064997 0.005445 +v -0.002124 -0.064997 0.005129 +v -0.003084 -0.064997 0.004616 +v -0.003925 -0.064997 0.003925 +v -0.004616 -0.064997 0.003084 +v -0.005129 -0.064997 0.002124 +v -0.005445 -0.064997 0.001083 +v -0.005551 -0.064997 -0.000000 +v -0.005445 -0.064997 -0.001083 +v -0.005129 -0.064997 -0.002124 +v -0.004616 -0.064997 -0.003084 +v -0.003925 -0.064997 -0.003925 +v -0.003084 -0.064997 -0.004616 +v -0.002124 -0.064997 -0.005129 +v -0.001083 -0.064997 -0.005445 +v -0.000000 -0.064997 -0.005551 +v 0.000000 0.037564 -0.007500 +v 0.001463 0.037564 -0.007356 +v 0.002870 0.037564 -0.006929 +v 0.004167 0.037564 -0.006236 +v 0.005303 0.037564 -0.005303 +v 0.006236 0.037564 -0.004167 +v 0.006929 0.037564 -0.002870 +v 0.007356 0.037564 -0.001463 +v 0.007500 0.037564 0.000000 +v 0.007356 0.037564 0.001463 +v 0.006929 0.037564 0.002870 +v 0.006236 0.037564 0.004167 +v 0.005303 0.037564 0.005303 +v 0.004167 0.037564 0.006236 +v 0.002870 0.037564 0.006929 +v 0.001463 0.037564 0.007356 +v -0.000000 0.037564 0.007500 +v -0.001463 0.037564 0.007356 +v -0.002870 0.037564 0.006929 +v -0.004167 0.037564 0.006236 +v -0.005303 0.037564 0.005303 +v -0.006236 0.037564 0.004167 +v -0.006929 0.037564 0.002870 +v -0.007356 0.037564 0.001463 +v -0.007500 0.037564 -0.000000 +v -0.007356 0.037564 -0.001463 +v -0.006929 0.037564 -0.002870 +v -0.006236 0.037564 -0.004167 +v -0.005303 0.037564 -0.005303 +v -0.004167 0.037564 -0.006236 +v -0.002870 0.037564 -0.006929 +v -0.001463 0.037564 -0.007356 +vn 0.0980 -0.0000 -0.9952 +vn 0.2903 -0.0000 -0.9569 +vn 0.4714 -0.0000 -0.8819 +vn 0.6344 -0.0000 -0.7730 +vn 0.7730 -0.0000 -0.6344 +vn 0.8819 -0.0000 -0.4714 +vn 0.9569 -0.0000 -0.2903 +vn 0.9952 -0.0000 -0.0980 +vn 0.9952 -0.0000 0.0980 +vn 0.9569 -0.0000 0.2903 +vn 0.8819 -0.0000 0.4714 +vn 0.7730 -0.0000 0.6344 +vn 0.6344 -0.0000 0.7730 +vn 0.4714 -0.0000 0.8819 +vn 0.2903 -0.0000 0.9569 +vn 0.0980 -0.0000 0.9952 +vn -0.0980 -0.0000 0.9952 +vn -0.2903 -0.0000 0.9569 +vn -0.4714 -0.0000 0.8819 +vn -0.6344 -0.0000 0.7730 +vn -0.7730 -0.0000 0.6344 +vn -0.8819 -0.0000 0.4714 +vn -0.9569 -0.0000 0.2903 +vn -0.9952 -0.0000 0.0980 +vn -0.9952 -0.0000 -0.0980 +vn -0.9569 -0.0000 -0.2903 +vn -0.8819 -0.0000 -0.4714 +vn -0.7730 -0.0000 -0.6344 +vn -0.6344 -0.0000 -0.7730 +vn -0.4714 -0.0000 -0.8819 +vn -0.0000 1.0000 -0.0000 +vn -0.2903 -0.0000 -0.9569 +vn -0.0980 -0.0000 -0.9952 +vn -0.0000 -1.0000 -0.0000 +vn -0.0352 -0.9332 -0.3577 +vn -0.1043 -0.9332 -0.3440 +vn -0.1695 -0.9332 -0.3170 +vn -0.2280 -0.9332 -0.2779 +vn -0.2779 -0.9332 -0.2280 +vn -0.3170 -0.9332 -0.1695 +vn -0.3440 -0.9332 -0.1043 +vn -0.3577 -0.9332 -0.0352 +vn -0.3577 -0.9332 0.0352 +vn -0.3440 -0.9332 0.1043 +vn -0.3170 -0.9332 0.1695 +vn -0.2779 -0.9332 0.2280 +vn -0.2280 -0.9332 0.2779 +vn -0.1694 -0.9332 0.3170 +vn -0.1043 -0.9332 0.3440 +vn -0.0352 -0.9332 0.3577 +vn 0.0352 -0.9332 0.3577 +vn 0.1043 -0.9332 0.3440 +vn 0.1695 -0.9332 0.3170 +vn 0.2280 -0.9332 0.2779 +vn 0.2779 -0.9332 0.2280 +vn 0.3170 -0.9332 0.1695 +vn 0.3440 -0.9332 0.1043 +vn 0.3577 -0.9332 0.0352 +vn 0.3577 -0.9332 -0.0352 +vn 0.3440 -0.9332 -0.1043 +vn 0.3170 -0.9332 -0.1695 +vn 0.2779 -0.9332 -0.2280 +vn 0.2280 -0.9332 -0.2779 +vn 0.1694 -0.9332 -0.3170 +vn 0.1043 -0.9332 -0.3440 +vn 0.0352 -0.9332 -0.3577 +vt 0.275995 0.553405 +vt 0.300022 0.554367 +vt 0.203915 0.554367 +vt 0.237251 0.521248 +vt 0.231424 0.517285 +vt 0.229481 0.521248 +vt 0.280495 0.552962 +vt 0.297019 0.554367 +vt 0.237008 0.521248 +vt 0.231788 0.517249 +vt 0.284822 0.551650 +vt 0.294016 0.554367 +vt 0.236766 0.521248 +vt 0.232137 0.517143 +vt 0.288810 0.549518 +vt 0.291012 0.554367 +vt 0.236523 0.521248 +vt 0.232460 0.516971 +vt 0.292305 0.546650 +vt 0.288009 0.554367 +vt 0.236280 0.521248 +vt 0.232742 0.516739 +vt 0.295174 0.543154 +vt 0.285006 0.554367 +vt 0.236037 0.521248 +vt 0.232974 0.516456 +vt 0.297305 0.539167 +vt 0.282002 0.554367 +vt 0.235794 0.521248 +vt 0.233147 0.516134 +vt 0.298618 0.534840 +vt 0.278999 0.554367 +vt 0.235551 0.521248 +vt 0.233253 0.515784 +vt 0.299061 0.530340 +vt 0.275995 0.554367 +vt 0.235309 0.521248 +vt 0.233289 0.515420 +vt 0.298618 0.525840 +vt 0.272992 0.554367 +vt 0.235066 0.521248 +vt 0.233253 0.515056 +vt 0.297305 0.521513 +vt 0.269989 0.554367 +vt 0.234823 0.521248 +vt 0.233147 0.514707 +vt 0.295174 0.517525 +vt 0.266985 0.554367 +vt 0.234580 0.521248 +vt 0.232974 0.514384 +vt 0.292305 0.514030 +vt 0.263982 0.554367 +vt 0.234337 0.521248 +vt 0.232742 0.514102 +vt 0.288810 0.511161 +vt 0.260979 0.554367 +vt 0.234095 0.521248 +vt 0.232460 0.513870 +vt 0.284822 0.509030 +vt 0.257975 0.554367 +vt 0.233852 0.521248 +vt 0.232137 0.513698 +vt 0.280495 0.507717 +vt 0.254972 0.554367 +vt 0.233609 0.521248 +vt 0.231788 0.513591 +vt 0.275995 0.507274 +vt 0.251969 0.554367 +vt 0.233366 0.521248 +vt 0.231424 0.513556 +vt 0.271496 0.507717 +vt 0.248965 0.554367 +vt 0.233123 0.521248 +vt 0.231060 0.513591 +vt 0.267169 0.509030 +vt 0.245962 0.554367 +vt 0.232881 0.521248 +vt 0.230710 0.513698 +vt 0.263181 0.511161 +vt 0.242959 0.554367 +vt 0.232638 0.521248 +vt 0.230388 0.513870 +vt 0.259686 0.514030 +vt 0.239955 0.554367 +vt 0.232395 0.521248 +vt 0.230105 0.514102 +vt 0.256817 0.517525 +vt 0.236952 0.554367 +vt 0.232152 0.521248 +vt 0.229873 0.514384 +vt 0.254685 0.521513 +vt 0.233948 0.554367 +vt 0.231909 0.521248 +vt 0.229701 0.514707 +vt 0.253373 0.525840 +vt 0.230945 0.554367 +vt 0.231667 0.521248 +vt 0.229595 0.515056 +vt 0.252930 0.530340 +vt 0.227942 0.554367 +vt 0.231424 0.521248 +vt 0.229559 0.515420 +vt 0.253373 0.534840 +vt 0.224938 0.554367 +vt 0.231181 0.521248 +vt 0.229595 0.515784 +vt 0.254685 0.539167 +vt 0.221935 0.554367 +vt 0.230938 0.521248 +vt 0.229701 0.516134 +vt 0.256817 0.543154 +vt 0.218932 0.554367 +vt 0.230695 0.521248 +vt 0.229873 0.516456 +vt 0.259686 0.546650 +vt 0.215928 0.554367 +vt 0.230453 0.521248 +vt 0.230105 0.516739 +vt 0.263181 0.549518 +vt 0.212925 0.554367 +vt 0.230210 0.521248 +vt 0.230388 0.516971 +vt 0.267169 0.551650 +vt 0.209922 0.554367 +vt 0.230710 0.517143 +vt 0.229967 0.521248 +vt 0.271496 0.552962 +vt 0.206918 0.554367 +vt 0.231060 0.517249 +vt 0.229724 0.521248 +vt 0.000000 0.534047 +vt 1.000000 0.534047 +vt 0.448080 0.333942 +vt 0.453424 0.763196 +vt 0.968750 0.534047 +vt 0.453257 0.749782 +vt 0.937500 0.534047 +vt 0.453090 0.736368 +vt 0.906250 0.534047 +vt 0.452923 0.722954 +vt 0.875000 0.534047 +vt 0.452756 0.709540 +vt 0.843750 0.534047 +vt 0.452589 0.696125 +vt 0.812500 0.534047 +vt 0.452422 0.682711 +vt 0.781250 0.534047 +vt 0.452255 0.669297 +vt 0.750000 0.534047 +vt 0.452088 0.655883 +vt 0.718750 0.534047 +vt 0.451921 0.642469 +vt 0.687500 0.534047 +vt 0.451754 0.629054 +vt 0.656250 0.534047 +vt 0.451587 0.615640 +vt 0.625000 0.534047 +vt 0.451420 0.602226 +vt 0.593750 0.534047 +vt 0.451253 0.588812 +vt 0.562500 0.534047 +vt 0.451086 0.575397 +vt 0.531250 0.534047 +vt 0.450919 0.561983 +vt 0.500000 0.534047 +vt 0.450752 0.548569 +vt 0.468750 0.534047 +vt 0.450585 0.535155 +vt 0.437500 0.534047 +vt 0.450418 0.521741 +vt 0.406250 0.534047 +vt 0.450251 0.508326 +vt 0.375000 0.534047 +vt 0.450084 0.494912 +vt 0.343750 0.534047 +vt 0.449917 0.481498 +vt 0.312500 0.534047 +vt 0.449750 0.468084 +vt 0.281250 0.534047 +vt 0.449583 0.454670 +vt 0.250000 0.534047 +vt 0.449416 0.441255 +vt 0.218750 0.534047 +vt 0.449249 0.427841 +vt 0.187500 0.534047 +vt 0.449082 0.414427 +vt 0.156250 0.534047 +vt 0.448915 0.401013 +vt 0.125000 0.534047 +vt 0.448748 0.387598 +vt 0.093750 0.534047 +vt 0.448581 0.374184 +vt 0.062500 0.534047 +vt 0.448414 0.360770 +vt 0.031250 0.534047 +vt 0.448247 0.347356 +vt 0.968750 0.534047 +vt 0.297019 0.557639 +vt 0.937500 0.534047 +vt 0.294016 0.557639 +vt 0.906250 0.534047 +vt 0.291012 0.557639 +vt 0.875000 0.534047 +vt 0.288009 0.557639 +vt 0.843750 0.534047 +vt 0.285006 0.557639 +vt 0.812500 0.534047 +vt 0.282002 0.557639 +vt 0.781250 0.534047 +vt 0.278999 0.557639 +vt 0.750000 0.534047 +vt 0.275995 0.557639 +vt 0.718750 0.534047 +vt 0.272992 0.557639 +vt 0.687500 0.534047 +vt 0.269989 0.557639 +vt 0.656250 0.534047 +vt 0.266985 0.557639 +vt 0.625000 0.534047 +vt 0.263982 0.557639 +vt 0.593750 0.534047 +vt 0.260979 0.557639 +vt 0.562500 0.534047 +vt 0.257975 0.557639 +vt 0.531250 0.534047 +vt 0.254972 0.557639 +vt 0.500000 0.534047 +vt 0.251969 0.557639 +vt 0.468750 0.534047 +vt 0.248965 0.557639 +vt 0.437500 0.534047 +vt 0.245962 0.557639 +vt 0.406250 0.534047 +vt 0.242959 0.557639 +vt 0.375000 0.534047 +vt 0.239955 0.557639 +vt 0.343750 0.534047 +vt 0.236952 0.557639 +vt 0.312500 0.534047 +vt 0.233948 0.557639 +vt 0.281250 0.534047 +vt 0.230945 0.557639 +vt 0.250000 0.534047 +vt 0.227942 0.557639 +vt 0.218750 0.534047 +vt 0.224938 0.557639 +vt 0.187500 0.534047 +vt 0.221935 0.557639 +vt 0.156250 0.534047 +vt 0.218932 0.557639 +vt 0.125000 0.534047 +vt 0.215928 0.557639 +vt 0.093750 0.534047 +vt 0.212925 0.557639 +vt 0.062500 0.534047 +vt 0.209922 0.557639 +vt 0.031250 0.534047 +vt 0.206918 0.557639 +vt 0.000000 0.534047 +vt 1.000000 0.534047 +vt 0.300022 0.557639 +vt 0.203915 0.557639 +vt 0.237251 0.520373 +vt 0.229481 0.520373 +vt 0.410159 0.335830 +vt 0.415502 0.765085 +vt 0.237008 0.520373 +vt 0.415335 0.751671 +vt 0.236766 0.520373 +vt 0.415168 0.738256 +vt 0.236523 0.520373 +vt 0.415001 0.724842 +vt 0.236280 0.520373 +vt 0.414834 0.711428 +vt 0.236037 0.520373 +vt 0.414667 0.698014 +vt 0.235794 0.520373 +vt 0.414500 0.684600 +vt 0.235551 0.520373 +vt 0.414333 0.671185 +vt 0.235309 0.520373 +vt 0.414166 0.657771 +vt 0.235066 0.520373 +vt 0.413999 0.644357 +vt 0.234823 0.520373 +vt 0.413832 0.630943 +vt 0.234580 0.520373 +vt 0.413665 0.617528 +vt 0.234337 0.520373 +vt 0.413498 0.604114 +vt 0.234095 0.520373 +vt 0.413331 0.590700 +vt 0.233852 0.520373 +vt 0.413164 0.577286 +vt 0.233609 0.520373 +vt 0.412997 0.563872 +vt 0.233366 0.520373 +vt 0.412830 0.550457 +vt 0.233123 0.520373 +vt 0.412663 0.537043 +vt 0.232881 0.520373 +vt 0.412496 0.523629 +vt 0.232638 0.520373 +vt 0.412329 0.510215 +vt 0.232395 0.520373 +vt 0.412162 0.496801 +vt 0.232152 0.520373 +vt 0.411995 0.483386 +vt 0.231909 0.520373 +vt 0.411828 0.469972 +vt 0.231667 0.520373 +vt 0.411662 0.456558 +vt 0.231424 0.520373 +vt 0.411494 0.443144 +vt 0.231181 0.520373 +vt 0.411328 0.429729 +vt 0.230938 0.520373 +vt 0.411161 0.416315 +vt 0.230695 0.520373 +vt 0.410994 0.402901 +vt 0.230453 0.520373 +vt 0.410827 0.389487 +vt 0.230210 0.520373 +vt 0.410660 0.376073 +vt 0.229967 0.520373 +vt 0.410493 0.362658 +vt 0.229724 0.520373 +vt 0.410326 0.349244 +s 0 +usemtl marker +f 129/263/1 2/4/1 4/9/1 130/267/1 +f 130/267/2 4/9/2 6/13/2 131/269/2 +f 131/269/3 6/13/3 8/17/3 132/271/3 +f 132/271/4 8/17/4 10/21/4 133/273/4 +f 133/273/5 10/21/5 12/25/5 134/275/5 +f 134/275/6 12/25/6 14/29/6 135/277/6 +f 135/277/7 14/29/7 16/33/7 136/279/7 +f 136/279/8 16/33/8 18/37/8 137/281/8 +f 137/281/9 18/37/9 20/41/9 138/283/9 +f 138/283/10 20/41/10 22/45/10 139/285/10 +f 139/285/11 22/45/11 24/49/11 140/287/11 +f 140/287/12 24/49/12 26/53/12 141/289/12 +f 141/289/13 26/53/13 28/57/13 142/291/13 +f 142/291/14 28/57/14 30/61/14 143/293/14 +f 143/293/15 30/61/15 32/65/15 144/295/15 +f 144/295/16 32/65/16 34/69/16 145/297/16 +f 145/297/17 34/69/17 36/73/17 146/299/17 +f 146/299/18 36/73/18 38/77/18 147/301/18 +f 147/301/19 38/77/19 40/81/19 148/303/19 +f 148/303/20 40/81/20 42/85/20 149/305/20 +f 149/305/21 42/85/21 44/89/21 150/307/21 +f 150/307/22 44/89/22 46/93/22 151/309/22 +f 151/309/23 46/93/23 48/97/23 152/311/23 +f 152/311/24 48/97/24 50/101/24 153/313/24 +f 153/313/25 50/101/25 52/105/25 154/315/25 +f 154/315/26 52/105/26 54/109/26 155/317/26 +f 155/317/27 54/109/27 56/113/27 156/319/27 +f 156/319/28 56/113/28 58/117/28 157/321/28 +f 157/321/29 58/117/29 60/121/29 158/323/29 +f 158/323/30 60/121/30 62/126/30 159/325/30 +f 4/10/31 2/5/31 64/129/31 62/125/31 60/122/31 58/118/31 56/114/31 54/110/31 52/106/31 50/102/31 48/98/31 46/94/31 44/90/31 42/86/31 40/82/31 38/78/31 36/74/31 34/70/31 32/66/31 30/62/31 28/58/31 26/54/31 24/50/31 22/46/31 20/42/31 18/38/31 16/34/31 14/30/31 12/26/31 10/22/31 8/18/31 6/14/31 +f 159/325/32 62/126/32 64/130/32 160/327/32 +f 160/327/33 64/130/33 2/6/33 129/264/33 +f 1/1/34 3/7/34 5/11/34 7/15/34 9/19/34 11/23/34 13/27/34 15/31/34 17/35/34 19/39/34 21/43/34 23/47/34 25/51/34 27/55/34 29/59/34 31/63/34 33/67/34 35/71/34 37/75/34 39/79/34 41/83/34 43/87/34 45/91/34 47/95/34 49/99/34 51/103/34 53/107/34 55/111/34 57/115/34 59/119/34 61/123/34 63/127/34 +f 127/257/35 96/195/35 65/131/35 128/259/35 +f 126/255/36 95/193/36 96/195/36 127/257/36 +f 125/253/37 94/191/37 95/193/37 126/255/37 +f 124/251/38 93/189/38 94/191/38 125/253/38 +f 123/249/39 92/187/39 93/189/39 124/251/39 +f 122/247/40 91/185/40 92/187/40 123/249/40 +f 121/245/41 90/183/41 91/185/41 122/247/41 +f 120/243/42 89/181/42 90/183/42 121/245/42 +f 119/241/43 88/179/43 89/181/43 120/243/43 +f 118/239/44 87/177/44 88/179/44 119/241/44 +f 117/237/45 86/175/45 87/177/45 118/239/45 +f 116/235/46 85/173/46 86/175/46 117/237/46 +f 115/233/47 84/171/47 85/173/47 116/235/47 +f 114/231/48 83/169/48 84/171/48 115/233/48 +f 113/229/49 82/167/49 83/169/49 114/231/49 +f 112/227/50 81/165/50 82/167/50 113/229/50 +f 111/225/51 80/163/51 81/165/51 112/227/51 +f 110/223/52 79/161/52 80/163/52 111/225/52 +f 109/221/53 78/159/53 79/161/53 110/223/53 +f 108/219/54 77/157/54 78/159/54 109/221/54 +f 107/217/55 76/155/55 77/157/55 108/219/55 +f 106/215/56 75/153/56 76/155/56 107/217/56 +f 105/213/57 74/151/57 75/153/57 106/215/57 +f 104/211/58 73/149/58 74/151/58 105/213/58 +f 103/209/59 72/147/59 73/149/59 104/211/59 +f 102/207/60 71/145/60 72/147/60 103/209/60 +f 101/205/61 70/143/61 71/145/61 102/207/61 +f 100/203/62 69/141/62 70/143/62 101/205/62 +f 99/201/63 68/139/63 69/141/63 100/203/63 +f 98/199/64 67/137/64 68/139/64 99/201/64 +f 97/197/65 66/135/65 67/137/65 98/199/65 +f 128/260/66 65/132/66 66/135/66 97/197/66 +f 1/2/1 128/261/1 97/198/1 3/8/1 +f 3/8/2 97/198/2 98/200/2 5/12/2 +f 5/12/3 98/200/3 99/202/3 7/16/3 +f 7/16/4 99/202/4 100/204/4 9/20/4 +f 9/20/5 100/204/5 101/206/5 11/24/5 +f 11/24/6 101/206/6 102/208/6 13/28/6 +f 13/28/7 102/208/7 103/210/7 15/32/7 +f 15/32/8 103/210/8 104/212/8 17/36/8 +f 17/36/9 104/212/9 105/214/9 19/40/9 +f 19/40/10 105/214/10 106/216/10 21/44/10 +f 21/44/11 106/216/11 107/218/11 23/48/11 +f 23/48/12 107/218/12 108/220/12 25/52/12 +f 25/52/13 108/220/13 109/222/13 27/56/13 +f 27/56/14 109/222/14 110/224/14 29/60/14 +f 29/60/15 110/224/15 111/226/15 31/64/15 +f 31/64/16 111/226/16 112/228/16 33/68/16 +f 33/68/17 112/228/17 113/230/17 35/72/17 +f 35/72/18 113/230/18 114/232/18 37/76/18 +f 37/76/19 114/232/19 115/234/19 39/80/19 +f 39/80/20 115/234/20 116/236/20 41/84/20 +f 41/84/21 116/236/21 117/238/21 43/88/21 +f 43/88/22 117/238/22 118/240/22 45/92/22 +f 45/92/23 118/240/23 119/242/23 47/96/23 +f 47/96/24 119/242/24 120/244/24 49/100/24 +f 49/100/25 120/244/25 121/246/25 51/104/25 +f 51/104/26 121/246/26 122/248/26 53/108/26 +f 53/108/27 122/248/27 123/250/27 55/112/27 +f 55/112/28 123/250/28 124/252/28 57/116/28 +f 57/116/29 124/252/29 125/254/29 59/120/29 +f 59/120/30 125/254/30 126/256/30 61/124/30 +f 61/124/32 126/256/32 127/258/32 63/128/32 +f 63/128/33 127/258/33 128/262/33 1/3/33 +f 96/196/33 160/328/33 129/265/33 65/133/33 +f 95/194/32 159/326/32 160/328/32 96/196/32 +f 94/192/30 158/324/30 159/326/30 95/194/30 +f 93/190/29 157/322/29 158/324/29 94/192/29 +f 92/188/28 156/320/28 157/322/28 93/190/28 +f 91/186/27 155/318/27 156/320/27 92/188/27 +f 90/184/26 154/316/26 155/318/26 91/186/26 +f 89/182/25 153/314/25 154/316/25 90/184/25 +f 88/180/24 152/312/24 153/314/24 89/182/24 +f 87/178/23 151/310/23 152/312/23 88/180/23 +f 86/176/22 150/308/22 151/310/22 87/178/22 +f 85/174/21 149/306/21 150/308/21 86/176/21 +f 84/172/20 148/304/20 149/306/20 85/174/20 +f 83/170/19 147/302/19 148/304/19 84/172/19 +f 82/168/18 146/300/18 147/302/18 83/170/18 +f 81/166/17 145/298/17 146/300/17 82/168/17 +f 80/164/16 144/296/16 145/298/16 81/166/16 +f 79/162/15 143/294/15 144/296/15 80/164/15 +f 78/160/14 142/292/14 143/294/14 79/162/14 +f 77/158/13 141/290/13 142/292/13 78/160/13 +f 76/156/12 140/288/12 141/290/12 77/158/12 +f 75/154/11 139/286/11 140/288/11 76/156/11 +f 74/152/10 138/284/10 139/286/10 75/154/10 +f 73/150/9 137/282/9 138/284/9 74/152/9 +f 72/148/8 136/280/8 137/282/8 73/150/8 +f 71/146/7 135/278/7 136/280/7 72/148/7 +f 70/144/6 134/276/6 135/278/6 71/146/6 +f 69/142/5 133/274/5 134/276/5 70/144/5 +f 68/140/4 132/272/4 133/274/4 69/142/4 +f 67/138/3 131/270/3 132/272/3 68/140/3 +f 66/136/2 130/268/2 131/270/2 67/138/2 +f 65/134/1 129/266/1 130/268/1 66/136/1 diff --git a/resources/models/pizzabox.mtl b/resources/models/pizzabox.mtl new file mode 100644 index 00000000..60e1c24e --- /dev/null +++ b/resources/models/pizzabox.mtl @@ -0,0 +1,13 @@ +# Blender 3.1.0 MTL File: 'TheDenObjects.blend' +# www.blender.org + +newmtl Pizza +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd pizza.png diff --git a/resources/models/pizzabox.obj b/resources/models/pizzabox.obj new file mode 100644 index 00000000..1062e99a --- /dev/null +++ b/resources/models/pizzabox.obj @@ -0,0 +1,50 @@ +# Blender 3.1.0 +# www.blender.org +mtllib pizzabox.mtl +o Cube.002 +v -0.150000 -0.020000 0.150000 +v -0.150000 0.020000 0.150000 +v -0.150000 -0.020000 -0.150000 +v -0.150000 0.020000 -0.150000 +v 0.150000 -0.020000 0.150000 +v 0.150000 0.020000 0.150000 +v 0.150000 -0.020000 -0.150000 +v 0.150000 0.020000 -0.150000 +vn -0.1500 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.1500 +vn 0.1500 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.1500 +vn -0.0000 -0.0200 -0.0000 +vn -0.0000 0.0200 -0.0000 +vt 0.375000 0.000000 +vt 0.332579 0.651772 +vt 0.380216 0.649803 +vt 0.625000 0.000000 +vt 0.332579 0.651772 +vt 0.832372 0.843789 +vt 0.375000 0.250000 +vt 1.211269 0.427994 +vt 0.380216 0.649803 +vt 0.625000 0.250000 +vt 1.211269 0.822006 +vt 0.832372 0.195384 +vt 0.399803 0.427559 +vt 0.332579 0.651772 +vt 0.380216 0.649803 +vt 0.649803 0.427559 +vt 0.332579 0.651772 +vt 0.183967 0.843789 +vt -0.186958 0.427994 +vt 0.399803 0.177559 +vt 0.380216 0.649803 +vt -0.186958 0.822006 +vt 0.649803 0.177559 +vt 0.183967 0.195384 +s 0 +usemtl Pizza +f 1/1/1 2/4/1 4/10/1 3/7/1 +f 3/8/2 4/11/2 8/22/2 7/19/2 +f 7/20/3 8/23/3 6/16/3 5/13/3 +f 5/14/4 6/17/4 2/5/4 1/2/4 +f 3/9/5 7/21/5 5/15/5 1/3/5 +f 8/24/6 4/12/6 2/6/6 6/18/6 diff --git a/resources/models/rubixcube.mtl b/resources/models/rubixcube.mtl new file mode 100644 index 00000000..a9d8d2e8 --- /dev/null +++ b/resources/models/rubixcube.mtl @@ -0,0 +1,13 @@ +# Blender 3.1.0 MTL File: 'TheDenObjects.blend' +# www.blender.org + +newmtl rubixcube +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd rubixcube.png diff --git a/resources/models/rubixcube.obj b/resources/models/rubixcube.obj new file mode 100644 index 00000000..46b5115b --- /dev/null +++ b/resources/models/rubixcube.obj @@ -0,0 +1,50 @@ +# Blender 3.1.0 +# www.blender.org +mtllib rubixcube.mtl +o Cube.001 +v -0.030000 -0.030000 0.030000 +v -0.030000 0.030000 0.030000 +v -0.030000 -0.030000 -0.030000 +v -0.030000 0.030000 -0.030000 +v 0.030000 -0.030000 0.030000 +v 0.030000 0.030000 0.030000 +v 0.030000 -0.030000 -0.030000 +v 0.030000 0.030000 -0.030000 +vn -0.0300 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0300 +vn 0.0300 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.0300 +vn -0.0000 -0.0300 -0.0000 +vn -0.0000 0.0300 -0.0000 +vt 0.024396 0.013024 +vt 0.343469 0.976800 +vt 0.706996 0.422386 +vt 0.342271 0.013024 +vt 0.633198 0.976800 +vt 0.310059 0.972308 +vt 0.024396 0.501976 +vt 0.657984 0.496782 +vt 0.706996 0.042614 +vt 0.342271 0.501976 +vt 0.985391 0.496782 +vt 0.312156 0.548497 +vt 0.365082 0.461708 +vt 0.343469 0.553200 +vt 0.979670 0.422386 +vt 0.668252 0.461708 +vt 0.633198 0.553200 +vt 0.011420 0.968983 +vt 0.657984 0.992792 +vt 0.365082 0.003293 +vt 0.979670 0.042614 +vt 0.985391 0.992792 +vt 0.668252 0.003293 +vt 0.013517 0.545172 +s 0 +usemtl rubixcube +f 1/1/1 2/4/1 4/10/1 3/7/1 +f 3/8/2 4/11/2 8/22/2 7/19/2 +f 7/20/3 8/23/3 6/16/3 5/13/3 +f 5/14/4 6/17/4 2/5/4 1/2/4 +f 3/9/5 7/21/5 5/15/5 1/3/5 +f 8/24/6 4/12/6 2/6/6 6/18/6 diff --git a/resources/models/sphere.mtl b/resources/models/sphere.mtl new file mode 100644 index 00000000..d0c5c9fa --- /dev/null +++ b/resources/models/sphere.mtl @@ -0,0 +1,2 @@ +# Blender 3.1.0 MTL File: 'None' +# www.blender.org diff --git a/resources/models/sphere.obj b/resources/models/sphere.obj new file mode 100644 index 00000000..462332bc --- /dev/null +++ b/resources/models/sphere.obj @@ -0,0 +1,16454 @@ +# Blender 3.1.0 +# www.blender.org +mtllib sphere.mtl +o Sphere +v 0.000000 0.989177 -0.146730 +v 0.000000 0.956940 -0.290285 +v 0.000000 0.941544 -0.336890 +v 0.000000 0.923880 -0.382683 +v 0.000000 0.881921 -0.471397 +v 0.000000 0.857729 -0.514103 +v 0.000000 0.740951 -0.671559 +v 0.000000 0.707107 -0.707107 +v 0.000000 0.595699 -0.803208 +v 0.000000 0.514103 -0.857729 +v 0.000000 0.290285 -0.956940 +v 0.000000 0.242980 -0.970031 +v 0.000000 0.195090 -0.980785 +v 0.000000 0.146730 -0.989177 +v 0.000000 0.098017 -0.995185 +v 0.000000 -0.000000 -1.000000 +v 0.000000 -0.098017 -0.995185 +v 0.000000 -0.242980 -0.970031 +v 0.000000 -0.290285 -0.956940 +v 0.000000 -0.382683 -0.923880 +v 0.000000 -0.427555 -0.903989 +v 0.000000 -0.471397 -0.881921 +v 0.000000 -0.595699 -0.803208 +v 0.000000 -0.671559 -0.740951 +v 0.000000 -0.707107 -0.707107 +v 0.000000 -0.740951 -0.671559 +v 0.000000 -0.773010 -0.634393 +v 0.000000 -0.803208 -0.595699 +v 0.000000 -0.857729 -0.514103 +v 0.000000 -0.881921 -0.471397 +v 0.000000 -0.923880 -0.382683 +v 0.000000 -0.941544 -0.336890 +v 0.000000 -0.956940 -0.290285 +v 0.000000 -0.970031 -0.242980 +v 0.000000 -0.989177 -0.146731 +v 0.000000 -0.995185 -0.098017 +v 0.004809 0.998795 -0.048831 +v 0.009607 0.995185 -0.097545 +v 0.014382 0.989177 -0.146024 +v 0.019122 0.980785 -0.194151 +v 0.023816 0.970031 -0.241810 +v 0.028453 0.956940 -0.288887 +v 0.033021 0.941544 -0.335268 +v 0.037510 0.923880 -0.380841 +v 0.041908 0.903989 -0.425496 +v 0.046205 0.881921 -0.469127 +v 0.050391 0.857729 -0.511627 +v 0.054455 0.831470 -0.552895 +v 0.058389 0.803208 -0.592831 +v 0.062181 0.773010 -0.631338 +v 0.065824 0.740951 -0.668325 +v 0.069309 0.707107 -0.703702 +v 0.072626 0.671559 -0.737383 +v 0.075768 0.634393 -0.769288 +v 0.078728 0.595699 -0.799340 +v 0.081498 0.555570 -0.827466 +v 0.084072 0.514103 -0.853598 +v 0.086443 0.471397 -0.877675 +v 0.088606 0.427555 -0.899636 +v 0.090556 0.382683 -0.919431 +v 0.092287 0.336890 -0.937010 +v 0.093797 0.290285 -0.952332 +v 0.095080 0.242980 -0.965360 +v 0.096134 0.195090 -0.976062 +v 0.096956 0.146730 -0.984413 +v 0.097545 0.098017 -0.990393 +v 0.097899 0.049068 -0.993986 +v 0.098017 -0.000000 -0.995185 +v 0.097899 -0.049068 -0.993986 +v 0.097545 -0.098017 -0.990393 +v 0.096956 -0.146730 -0.984413 +v 0.096134 -0.195090 -0.976062 +v 0.095080 -0.242980 -0.965360 +v 0.093797 -0.290285 -0.952332 +v 0.092287 -0.336890 -0.937010 +v 0.090556 -0.382683 -0.919431 +v 0.088606 -0.427555 -0.899636 +v 0.086443 -0.471397 -0.877675 +v 0.084072 -0.514103 -0.853598 +v 0.081498 -0.555570 -0.827466 +v 0.078728 -0.595699 -0.799340 +v 0.075768 -0.634393 -0.769288 +v 0.072626 -0.671559 -0.737383 +v 0.069309 -0.707107 -0.703702 +v 0.065824 -0.740951 -0.668325 +v 0.062181 -0.773010 -0.631338 +v 0.058389 -0.803208 -0.592831 +v 0.054455 -0.831470 -0.552895 +v 0.050391 -0.857729 -0.511627 +v 0.046205 -0.881921 -0.469127 +v 0.041908 -0.903989 -0.425496 +v 0.037510 -0.923880 -0.380841 +v 0.033021 -0.941544 -0.335268 +v 0.028453 -0.956940 -0.288887 +v 0.023816 -0.970031 -0.241810 +v 0.019122 -0.980785 -0.194151 +v 0.014382 -0.989177 -0.146024 +v 0.009607 -0.995185 -0.097545 +v 0.004809 -0.998795 -0.048831 +v 0.009573 0.998795 -0.048125 +v 0.019122 0.995185 -0.096134 +v 0.028626 0.989177 -0.143911 +v 0.038060 0.980785 -0.191342 +v 0.047403 0.970031 -0.238311 +v 0.056632 0.956940 -0.284707 +v 0.065724 0.941544 -0.330417 +v 0.074658 0.923880 -0.375330 +v 0.083412 0.903989 -0.419340 +v 0.091965 0.881921 -0.462339 +v 0.100296 0.857729 -0.504224 +v 0.108386 0.831470 -0.544895 +v 0.116215 0.803208 -0.584253 +v 0.123764 0.773010 -0.622204 +v 0.131015 0.740951 -0.658655 +v 0.137950 0.707107 -0.693520 +v 0.144552 0.671559 -0.726714 +v 0.150807 0.634393 -0.758157 +v 0.156698 0.595699 -0.787774 +v 0.162212 0.555570 -0.815493 +v 0.167335 0.514103 -0.841248 +v 0.172054 0.471397 -0.864975 +v 0.176360 0.427555 -0.886619 +v 0.180240 0.382683 -0.906127 +v 0.183686 0.336890 -0.923452 +v 0.186690 0.290285 -0.938553 +v 0.189244 0.242980 -0.951392 +v 0.191342 0.195090 -0.961940 +v 0.192979 0.146730 -0.970170 +v 0.194151 0.098017 -0.976062 +v 0.194855 0.049068 -0.979604 +v 0.195090 -0.000000 -0.980785 +v 0.194855 -0.049068 -0.979604 +v 0.194151 -0.098017 -0.976062 +v 0.192979 -0.146730 -0.970170 +v 0.191342 -0.195090 -0.961940 +v 0.189244 -0.242980 -0.951392 +v 0.186690 -0.290285 -0.938553 +v 0.183686 -0.336890 -0.923452 +v 0.180240 -0.382683 -0.906128 +v 0.176360 -0.427555 -0.886619 +v 0.172054 -0.471397 -0.864975 +v 0.167335 -0.514103 -0.841248 +v 0.162212 -0.555570 -0.815493 +v 0.156698 -0.595699 -0.787774 +v 0.150807 -0.634393 -0.758157 +v 0.144552 -0.671559 -0.726714 +v 0.137950 -0.707107 -0.693520 +v 0.131015 -0.740951 -0.658655 +v 0.123764 -0.773010 -0.622204 +v 0.116215 -0.803208 -0.584253 +v 0.108386 -0.831470 -0.544895 +v 0.100296 -0.857729 -0.504224 +v 0.091965 -0.881921 -0.462339 +v 0.083412 -0.903989 -0.419340 +v 0.074658 -0.923880 -0.375330 +v 0.065724 -0.941544 -0.330417 +v 0.056632 -0.956940 -0.284707 +v 0.047403 -0.970031 -0.238311 +v 0.038060 -0.980785 -0.191342 +v 0.028626 -0.989177 -0.143911 +v 0.019122 -0.995185 -0.096134 +v 0.009573 -0.998795 -0.048125 +v 0.014244 0.998795 -0.046955 +v 0.028453 0.995185 -0.093797 +v 0.042594 0.989177 -0.140412 +v 0.056632 0.980785 -0.186690 +v 0.070533 0.970031 -0.232518 +v 0.084265 0.956940 -0.277785 +v 0.097794 0.941544 -0.322383 +v 0.111087 0.923880 -0.366205 +v 0.124113 0.903989 -0.409145 +v 0.136839 0.881921 -0.451099 +v 0.149236 0.857729 -0.491966 +v 0.161274 0.831470 -0.531648 +v 0.172922 0.803208 -0.570049 +v 0.184155 0.773010 -0.607076 +v 0.194943 0.740951 -0.642642 +v 0.205262 0.707107 -0.676659 +v 0.215087 0.671559 -0.709046 +v 0.224393 0.634393 -0.739725 +v 0.233159 0.595699 -0.768622 +v 0.241363 0.555570 -0.795667 +v 0.248985 0.514103 -0.820795 +v 0.256008 0.471397 -0.843946 +v 0.262414 0.427555 -0.865064 +v 0.268188 0.382683 -0.884098 +v 0.273316 0.336890 -0.901001 +v 0.277785 0.290285 -0.915735 +v 0.281585 0.242980 -0.928262 +v 0.284707 0.195090 -0.938553 +v 0.287143 0.146730 -0.946583 +v 0.288887 0.098017 -0.952332 +v 0.289935 0.049068 -0.955788 +v 0.290285 -0.000000 -0.956940 +v 0.289935 -0.049068 -0.955788 +v 0.288887 -0.098017 -0.952332 +v 0.287143 -0.146730 -0.946583 +v 0.284707 -0.195090 -0.938553 +v 0.281585 -0.242980 -0.928262 +v 0.277785 -0.290285 -0.915735 +v 0.273316 -0.336890 -0.901001 +v 0.268188 -0.382683 -0.884098 +v 0.262414 -0.427555 -0.865064 +v 0.256008 -0.471397 -0.843946 +v 0.248985 -0.514103 -0.820795 +v 0.241363 -0.555570 -0.795667 +v 0.233159 -0.595699 -0.768622 +v 0.224393 -0.634393 -0.739725 +v 0.215087 -0.671559 -0.709046 +v 0.205262 -0.707107 -0.676659 +v 0.194943 -0.740951 -0.642642 +v 0.184155 -0.773010 -0.607076 +v 0.172922 -0.803208 -0.570049 +v 0.161274 -0.831470 -0.531648 +v 0.149236 -0.857729 -0.491966 +v 0.136839 -0.881921 -0.451099 +v 0.124113 -0.903989 -0.409145 +v 0.111087 -0.923880 -0.366205 +v 0.097794 -0.941544 -0.322383 +v 0.084265 -0.956940 -0.277785 +v 0.070533 -0.970031 -0.232517 +v 0.056632 -0.980785 -0.186690 +v 0.042594 -0.989177 -0.140412 +v 0.028453 -0.995185 -0.093797 +v 0.014244 -0.998795 -0.046955 +v 0.018777 0.998795 -0.045333 +v 0.037510 0.995185 -0.090556 +v 0.056151 0.989177 -0.135561 +v 0.074658 0.980785 -0.180240 +v 0.092985 0.970031 -0.224484 +v 0.111087 0.956940 -0.268188 +v 0.128922 0.941544 -0.311246 +v 0.146447 0.923880 -0.353553 +v 0.163618 0.903989 -0.395009 +v 0.180396 0.881921 -0.435514 +v 0.196739 0.857729 -0.474969 +v 0.212608 0.831470 -0.513280 +v 0.227964 0.803208 -0.550354 +v 0.242772 0.773010 -0.586103 +v 0.256995 0.740951 -0.620440 +v 0.270598 0.707107 -0.653281 +v 0.283550 0.671559 -0.684550 +v 0.295818 0.634393 -0.714169 +v 0.307374 0.595699 -0.742067 +v 0.318190 0.555570 -0.768178 +v 0.328239 0.514103 -0.792438 +v 0.337497 0.471397 -0.814789 +v 0.345942 0.427555 -0.835177 +v 0.353553 0.382683 -0.853553 +v 0.360313 0.336890 -0.869873 +v 0.366205 0.290285 -0.884098 +v 0.371215 0.242980 -0.896192 +v 0.375330 0.195090 -0.906127 +v 0.378541 0.146730 -0.913880 +v 0.380841 0.098017 -0.919431 +v 0.382222 0.049068 -0.922767 +v 0.382683 -0.000000 -0.923880 +v 0.382222 -0.049068 -0.922767 +v 0.380841 -0.098017 -0.919431 +v 0.378541 -0.146730 -0.913880 +v 0.375330 -0.195090 -0.906127 +v 0.371215 -0.242980 -0.896192 +v 0.366205 -0.290285 -0.884098 +v 0.360313 -0.336890 -0.869873 +v 0.353553 -0.382683 -0.853553 +v 0.345942 -0.427555 -0.835177 +v 0.337497 -0.471397 -0.814789 +v 0.328239 -0.514103 -0.792438 +v 0.318190 -0.555570 -0.768178 +v 0.307374 -0.595699 -0.742067 +v 0.295818 -0.634393 -0.714169 +v 0.283550 -0.671559 -0.684550 +v 0.270598 -0.707107 -0.653281 +v 0.256995 -0.740951 -0.620440 +v 0.242772 -0.773010 -0.586103 +v 0.227964 -0.803208 -0.550354 +v 0.212608 -0.831470 -0.513280 +v 0.196739 -0.857729 -0.474969 +v 0.180396 -0.881921 -0.435514 +v 0.163618 -0.903989 -0.395009 +v 0.146447 -0.923880 -0.353553 +v 0.128922 -0.941544 -0.311246 +v 0.111087 -0.956940 -0.268188 +v 0.092984 -0.970031 -0.224484 +v 0.074658 -0.980785 -0.180240 +v 0.056151 -0.989177 -0.135561 +v 0.037510 -0.995185 -0.090556 +v 0.018777 -0.998795 -0.045333 +v 0.023130 0.998795 -0.043274 +v 0.046205 0.995185 -0.086443 +v 0.069168 0.989177 -0.129405 +v 0.091965 0.980785 -0.172054 +v 0.114540 0.970031 -0.214289 +v 0.136839 0.956940 -0.256008 +v 0.158809 0.941544 -0.297110 +v 0.180396 0.923880 -0.337497 +v 0.201548 0.903989 -0.377070 +v 0.222215 0.881921 -0.415735 +v 0.242346 0.857729 -0.453398 +v 0.261894 0.831470 -0.489969 +v 0.280811 0.803208 -0.525360 +v 0.299051 0.773010 -0.559485 +v 0.316571 0.740951 -0.592262 +v 0.333328 0.707107 -0.623612 +v 0.349282 0.671559 -0.653461 +v 0.364395 0.634393 -0.681734 +v 0.378629 0.595699 -0.708366 +v 0.391952 0.555570 -0.733291 +v 0.404330 0.514103 -0.756449 +v 0.415735 0.471397 -0.777785 +v 0.426138 0.427555 -0.797247 +v 0.435514 0.382683 -0.814789 +v 0.443841 0.336890 -0.830368 +v 0.451099 0.290285 -0.843946 +v 0.457270 0.242980 -0.855491 +v 0.462339 0.195090 -0.864975 +v 0.466295 0.146730 -0.872376 +v 0.469127 0.098017 -0.877675 +v 0.470829 0.049068 -0.880859 +v 0.471397 -0.000000 -0.881921 +v 0.470829 -0.049068 -0.880859 +v 0.469127 -0.098017 -0.877675 +v 0.466295 -0.146730 -0.872376 +v 0.462339 -0.195090 -0.864975 +v 0.457270 -0.242980 -0.855491 +v 0.451099 -0.290285 -0.843946 +v 0.443841 -0.336890 -0.830368 +v 0.435514 -0.382683 -0.814789 +v 0.426138 -0.427555 -0.797247 +v 0.415735 -0.471397 -0.777785 +v 0.404330 -0.514103 -0.756449 +v 0.391952 -0.555570 -0.733291 +v 0.378629 -0.595699 -0.708366 +v 0.364395 -0.634393 -0.681734 +v 0.349282 -0.671559 -0.653460 +v 0.333328 -0.707107 -0.623612 +v 0.316571 -0.740951 -0.592262 +v 0.299051 -0.773010 -0.559485 +v 0.280811 -0.803208 -0.525360 +v 0.261894 -0.831470 -0.489969 +v 0.242346 -0.857729 -0.453398 +v 0.222215 -0.881921 -0.415735 +v 0.201548 -0.903989 -0.377070 +v 0.180396 -0.923880 -0.337497 +v 0.158809 -0.941544 -0.297110 +v 0.136839 -0.956940 -0.256008 +v 0.114540 -0.970031 -0.214289 +v 0.091965 -0.980785 -0.172054 +v 0.069168 -0.989177 -0.129405 +v 0.046205 -0.995185 -0.086443 +v 0.023130 -0.998795 -0.043274 +v 0.027261 0.998795 -0.040798 +v 0.054455 0.995185 -0.081498 +v 0.081519 0.989177 -0.122002 +v 0.108386 0.980785 -0.162212 +v 0.134993 0.970031 -0.202031 +v 0.161274 0.956940 -0.241363 +v 0.187166 0.941544 -0.280114 +v 0.212608 0.923880 -0.318190 +v 0.237537 0.903989 -0.355499 +v 0.261894 0.881921 -0.391952 +v 0.285620 0.857729 -0.427461 +v 0.308658 0.831470 -0.461940 +v 0.330953 0.803208 -0.495306 +v 0.352450 0.773010 -0.527479 +v 0.373098 0.740951 -0.558381 +v 0.392848 0.707107 -0.587938 +v 0.411650 0.671559 -0.616078 +v 0.429462 0.634393 -0.642735 +v 0.446238 0.595699 -0.667843 +v 0.461940 0.555570 -0.691342 +v 0.476529 0.514103 -0.713175 +v 0.489969 0.471397 -0.733291 +v 0.502230 0.427555 -0.751640 +v 0.513280 0.382683 -0.768178 +v 0.523094 0.336890 -0.782865 +v 0.531648 0.290285 -0.795667 +v 0.538920 0.242980 -0.806551 +v 0.544895 0.195090 -0.815493 +v 0.549557 0.146730 -0.822470 +v 0.552895 0.098017 -0.827466 +v 0.554901 0.049068 -0.830468 +v 0.555570 -0.000000 -0.831470 +v 0.554901 -0.049068 -0.830468 +v 0.552895 -0.098017 -0.827466 +v 0.549557 -0.146730 -0.822470 +v 0.544895 -0.195090 -0.815493 +v 0.538920 -0.242980 -0.806551 +v 0.531648 -0.290285 -0.795667 +v 0.523094 -0.336890 -0.782865 +v 0.513280 -0.382683 -0.768178 +v 0.502230 -0.427555 -0.751640 +v 0.489969 -0.471397 -0.733291 +v 0.476529 -0.514103 -0.713175 +v 0.461940 -0.555570 -0.691342 +v 0.446238 -0.595699 -0.667843 +v 0.429462 -0.634393 -0.642735 +v 0.411650 -0.671559 -0.616078 +v 0.392848 -0.707107 -0.587938 +v 0.373098 -0.740951 -0.558381 +v 0.352450 -0.773010 -0.527479 +v 0.330953 -0.803208 -0.495306 +v 0.308658 -0.831470 -0.461940 +v 0.285620 -0.857729 -0.427461 +v 0.261894 -0.881921 -0.391952 +v 0.237537 -0.903989 -0.355499 +v 0.212608 -0.923880 -0.318190 +v 0.187166 -0.941544 -0.280114 +v 0.161274 -0.956940 -0.241363 +v 0.134993 -0.970031 -0.202031 +v 0.108386 -0.980785 -0.162212 +v 0.081519 -0.989177 -0.122002 +v 0.054455 -0.995185 -0.081498 +v 0.027261 -0.998795 -0.040798 +v 0.031128 0.998795 -0.037930 +v 0.062181 0.995185 -0.075768 +v 0.093085 0.989177 -0.113424 +v 0.123764 0.980785 -0.150807 +v 0.154145 0.970031 -0.187826 +v 0.184155 0.956940 -0.224393 +v 0.213721 0.941544 -0.260419 +v 0.242772 0.923880 -0.295818 +v 0.271238 0.903989 -0.330505 +v 0.299051 0.881921 -0.364395 +v 0.326143 0.857729 -0.397407 +v 0.352450 0.831470 -0.429462 +v 0.377908 0.803208 -0.460482 +v 0.402455 0.773010 -0.490393 +v 0.426033 0.740951 -0.519122 +v 0.448584 0.707107 -0.546601 +v 0.470054 0.671559 -0.572763 +v 0.490393 0.634393 -0.597545 +v 0.509549 0.595699 -0.620888 +v 0.527479 0.555570 -0.642735 +v 0.544137 0.514103 -0.663033 +v 0.559485 0.471397 -0.681734 +v 0.573485 0.427555 -0.698793 +v 0.586103 0.382683 -0.714168 +v 0.597309 0.336890 -0.727823 +v 0.607077 0.290285 -0.739725 +v 0.615381 0.242980 -0.749844 +v 0.622204 0.195090 -0.758157 +v 0.627527 0.146730 -0.764644 +v 0.631338 0.098017 -0.769288 +v 0.633629 0.049068 -0.772079 +v 0.634393 -0.000000 -0.773010 +v 0.633629 -0.049068 -0.772079 +v 0.631338 -0.098017 -0.769288 +v 0.627527 -0.146730 -0.764644 +v 0.622204 -0.195090 -0.758157 +v 0.615381 -0.242980 -0.749844 +v 0.607077 -0.290285 -0.739725 +v 0.597309 -0.336890 -0.727823 +v 0.586103 -0.382683 -0.714169 +v 0.573485 -0.427555 -0.698793 +v 0.559485 -0.471397 -0.681734 +v 0.544137 -0.514103 -0.663033 +v 0.527479 -0.555570 -0.642735 +v 0.509549 -0.595699 -0.620888 +v 0.490393 -0.634393 -0.597545 +v 0.470054 -0.671559 -0.572763 +v 0.448584 -0.707107 -0.546601 +v 0.426033 -0.740951 -0.519122 +v 0.402455 -0.773010 -0.490393 +v 0.377908 -0.803208 -0.460482 +v 0.352450 -0.831470 -0.429462 +v 0.326143 -0.857729 -0.397407 +v 0.299051 -0.881921 -0.364395 +v 0.271238 -0.903989 -0.330505 +v 0.242772 -0.923880 -0.295818 +v 0.213721 -0.941544 -0.260419 +v 0.184155 -0.956940 -0.224393 +v 0.154145 -0.970031 -0.187826 +v 0.123764 -0.980785 -0.150807 +v 0.093085 -0.989177 -0.113424 +v 0.062181 -0.995185 -0.075768 +v 0.031128 -0.998795 -0.037930 +v 0.034696 0.998795 -0.034696 +v 0.069309 0.995185 -0.069309 +v 0.103754 0.989177 -0.103754 +v 0.137950 0.980785 -0.137950 +v 0.171813 0.970031 -0.171813 +v 0.205262 0.956940 -0.205262 +v 0.238217 0.941544 -0.238217 +v 0.270598 0.923880 -0.270598 +v 0.302327 0.903989 -0.302327 +v 0.333328 0.881921 -0.333328 +v 0.363526 0.857729 -0.363525 +v 0.392848 0.831470 -0.392848 +v 0.421223 0.803208 -0.421223 +v 0.448584 0.773010 -0.448584 +v 0.474864 0.740951 -0.474864 +v 0.500000 0.707107 -0.500000 +v 0.523932 0.671559 -0.523932 +v 0.546601 0.634393 -0.546601 +v 0.567953 0.595699 -0.567953 +v 0.587938 0.555570 -0.587938 +v 0.606506 0.514103 -0.606506 +v 0.623612 0.471397 -0.623612 +v 0.639217 0.427555 -0.639217 +v 0.653281 0.382683 -0.653281 +v 0.665772 0.336890 -0.665772 +v 0.676659 0.290285 -0.676659 +v 0.685916 0.242980 -0.685916 +v 0.693520 0.195090 -0.693520 +v 0.699453 0.146730 -0.699453 +v 0.703702 0.098017 -0.703702 +v 0.706255 0.049068 -0.706255 +v 0.707107 -0.000000 -0.707107 +v 0.706255 -0.049068 -0.706255 +v 0.703702 -0.098017 -0.703702 +v 0.699453 -0.146730 -0.699453 +v 0.693520 -0.195090 -0.693520 +v 0.685916 -0.242980 -0.685916 +v 0.676659 -0.290285 -0.676659 +v 0.665772 -0.336890 -0.665772 +v 0.653282 -0.382683 -0.653281 +v 0.639217 -0.427555 -0.639217 +v 0.623613 -0.471397 -0.623612 +v 0.606506 -0.514103 -0.606506 +v 0.587938 -0.555570 -0.587938 +v 0.567953 -0.595699 -0.567953 +v 0.546601 -0.634393 -0.546601 +v 0.523932 -0.671559 -0.523932 +v 0.500000 -0.707107 -0.500000 +v 0.474864 -0.740951 -0.474864 +v 0.448584 -0.773010 -0.448584 +v 0.421223 -0.803208 -0.421223 +v 0.392847 -0.831470 -0.392848 +v 0.363526 -0.857729 -0.363525 +v 0.333328 -0.881921 -0.333328 +v 0.302327 -0.903989 -0.302327 +v 0.270598 -0.923880 -0.270598 +v 0.238217 -0.941544 -0.238217 +v 0.205262 -0.956940 -0.205262 +v 0.171813 -0.970031 -0.171813 +v 0.137950 -0.980785 -0.137950 +v 0.103754 -0.989177 -0.103754 +v 0.069309 -0.995185 -0.069309 +v 0.034696 -0.998795 -0.034696 +v 0.037930 0.998795 -0.031128 +v 0.075768 0.995185 -0.062181 +v 0.113424 0.989177 -0.093085 +v 0.150807 0.980785 -0.123764 +v 0.187826 0.970031 -0.154145 +v 0.224393 0.956940 -0.184155 +v 0.260419 0.941544 -0.213721 +v 0.295818 0.923880 -0.242772 +v 0.330505 0.903989 -0.271238 +v 0.364395 0.881921 -0.299051 +v 0.397407 0.857729 -0.326143 +v 0.429462 0.831470 -0.352450 +v 0.460482 0.803208 -0.377908 +v 0.490393 0.773010 -0.402455 +v 0.519122 0.740951 -0.426033 +v 0.546601 0.707107 -0.448584 +v 0.572763 0.671559 -0.470054 +v 0.597545 0.634393 -0.490393 +v 0.620888 0.595699 -0.509549 +v 0.642735 0.555570 -0.527479 +v 0.663033 0.514103 -0.544137 +v 0.681734 0.471397 -0.559485 +v 0.698793 0.427555 -0.573485 +v 0.714168 0.382683 -0.586103 +v 0.727823 0.336890 -0.597309 +v 0.739725 0.290285 -0.607077 +v 0.749844 0.242980 -0.615381 +v 0.758157 0.195090 -0.622203 +v 0.764644 0.146730 -0.627527 +v 0.769288 0.098017 -0.631338 +v 0.772079 0.049068 -0.633629 +v 0.773010 -0.000000 -0.634393 +v 0.772079 -0.049068 -0.633629 +v 0.769288 -0.098017 -0.631338 +v 0.764644 -0.146730 -0.627527 +v 0.758157 -0.195090 -0.622203 +v 0.749844 -0.242980 -0.615381 +v 0.739725 -0.290285 -0.607076 +v 0.727823 -0.336890 -0.597309 +v 0.714169 -0.382683 -0.586103 +v 0.698793 -0.427555 -0.573485 +v 0.681734 -0.471397 -0.559485 +v 0.663033 -0.514103 -0.544137 +v 0.642735 -0.555570 -0.527479 +v 0.620888 -0.595699 -0.509549 +v 0.597545 -0.634393 -0.490393 +v 0.572763 -0.671559 -0.470054 +v 0.546601 -0.707107 -0.448584 +v 0.519122 -0.740951 -0.426033 +v 0.490393 -0.773010 -0.402455 +v 0.460482 -0.803208 -0.377908 +v 0.429462 -0.831470 -0.352450 +v 0.397407 -0.857729 -0.326143 +v 0.364395 -0.881921 -0.299051 +v 0.330505 -0.903989 -0.271238 +v 0.295818 -0.923880 -0.242772 +v 0.260419 -0.941544 -0.213721 +v 0.224393 -0.956940 -0.184155 +v 0.187826 -0.970031 -0.154145 +v 0.150807 -0.980785 -0.123764 +v 0.113424 -0.989177 -0.093085 +v 0.075768 -0.995185 -0.062181 +v 0.037930 -0.998795 -0.031128 +v 0.040798 0.998795 -0.027260 +v 0.081498 0.995185 -0.054455 +v 0.122002 0.989177 -0.081519 +v 0.162212 0.980785 -0.108386 +v 0.202031 0.970031 -0.134992 +v 0.241363 0.956940 -0.161273 +v 0.280114 0.941544 -0.187166 +v 0.318190 0.923880 -0.212607 +v 0.355499 0.903989 -0.237537 +v 0.391952 0.881921 -0.261894 +v 0.427461 0.857729 -0.285620 +v 0.461940 0.831470 -0.308658 +v 0.495306 0.803208 -0.330953 +v 0.527479 0.773010 -0.352450 +v 0.558381 0.740951 -0.373098 +v 0.587938 0.707107 -0.392847 +v 0.616078 0.671559 -0.411650 +v 0.642735 0.634393 -0.429461 +v 0.667843 0.595699 -0.446238 +v 0.691342 0.555570 -0.461940 +v 0.713175 0.514103 -0.476528 +v 0.733291 0.471397 -0.489969 +v 0.751640 0.427555 -0.502230 +v 0.768178 0.382683 -0.513280 +v 0.782865 0.336890 -0.523094 +v 0.795667 0.290285 -0.531648 +v 0.806551 0.242980 -0.538920 +v 0.815493 0.195090 -0.544895 +v 0.822470 0.146730 -0.549557 +v 0.827466 0.098017 -0.552895 +v 0.830468 0.049068 -0.554901 +v 0.831470 -0.000000 -0.555570 +v 0.830468 -0.049068 -0.554901 +v 0.827466 -0.098017 -0.552895 +v 0.822470 -0.146730 -0.549557 +v 0.815493 -0.195090 -0.544895 +v 0.806551 -0.242980 -0.538920 +v 0.795667 -0.290285 -0.531648 +v 0.782865 -0.336890 -0.523094 +v 0.768178 -0.382683 -0.513280 +v 0.751640 -0.427555 -0.502230 +v 0.733291 -0.471397 -0.489969 +v 0.713175 -0.514103 -0.476528 +v 0.691342 -0.555570 -0.461940 +v 0.667843 -0.595699 -0.446238 +v 0.642735 -0.634393 -0.429462 +v 0.616078 -0.671559 -0.411650 +v 0.587938 -0.707107 -0.392847 +v 0.558381 -0.740951 -0.373098 +v 0.527479 -0.773010 -0.352450 +v 0.495306 -0.803208 -0.330953 +v 0.461940 -0.831470 -0.308658 +v 0.427461 -0.857729 -0.285620 +v 0.391952 -0.881921 -0.261894 +v 0.355499 -0.903989 -0.237537 +v 0.318190 -0.923880 -0.212607 +v 0.280114 -0.941544 -0.187166 +v 0.241363 -0.956940 -0.161273 +v 0.202031 -0.970031 -0.134992 +v 0.162212 -0.980785 -0.108386 +v 0.122002 -0.989177 -0.081519 +v 0.081498 -0.995185 -0.054455 +v 0.040798 -0.998795 -0.027261 +v 0.043274 0.998795 -0.023130 +v 0.086443 0.995185 -0.046205 +v 0.129405 0.989177 -0.069168 +v 0.172054 0.980785 -0.091965 +v 0.214289 0.970031 -0.114540 +v 0.256008 0.956940 -0.136839 +v 0.297110 0.941544 -0.158809 +v 0.337497 0.923880 -0.180396 +v 0.377070 0.903989 -0.201548 +v 0.415735 0.881921 -0.222215 +v 0.453398 0.857729 -0.242346 +v 0.489969 0.831470 -0.261894 +v 0.525360 0.803208 -0.280811 +v 0.559485 0.773010 -0.299051 +v 0.592262 0.740951 -0.316571 +v 0.623613 0.707107 -0.333328 +v 0.653461 0.671559 -0.349282 +v 0.681734 0.634393 -0.364394 +v 0.708366 0.595699 -0.378629 +v 0.733291 0.555570 -0.391952 +v 0.756449 0.514103 -0.404330 +v 0.777785 0.471397 -0.415735 +v 0.797247 0.427555 -0.426138 +v 0.814789 0.382683 -0.435514 +v 0.830368 0.336890 -0.443841 +v 0.843946 0.290285 -0.451099 +v 0.855491 0.242980 -0.457269 +v 0.864975 0.195090 -0.462339 +v 0.872376 0.146730 -0.466294 +v 0.877675 0.098017 -0.469127 +v 0.880859 0.049068 -0.470829 +v 0.881921 -0.000000 -0.471397 +v 0.880859 -0.049068 -0.470829 +v 0.877675 -0.098017 -0.469127 +v 0.872376 -0.146730 -0.466294 +v 0.864975 -0.195090 -0.462339 +v 0.855491 -0.242980 -0.457269 +v 0.843946 -0.290285 -0.451099 +v 0.830368 -0.336890 -0.443841 +v 0.814789 -0.382683 -0.435514 +v 0.797247 -0.427555 -0.426138 +v 0.777785 -0.471397 -0.415735 +v 0.756449 -0.514103 -0.404330 +v 0.733291 -0.555570 -0.391952 +v 0.708366 -0.595699 -0.378629 +v 0.681734 -0.634393 -0.364395 +v 0.653461 -0.671559 -0.349282 +v 0.623613 -0.707107 -0.333328 +v 0.592262 -0.740951 -0.316571 +v 0.559485 -0.773010 -0.299051 +v 0.525360 -0.803208 -0.280811 +v 0.489969 -0.831470 -0.261894 +v 0.453398 -0.857729 -0.242346 +v 0.415735 -0.881921 -0.222215 +v 0.377070 -0.903989 -0.201548 +v 0.337497 -0.923880 -0.180396 +v 0.297110 -0.941544 -0.158809 +v 0.256008 -0.956940 -0.136839 +v 0.214289 -0.970031 -0.114540 +v 0.172054 -0.980785 -0.091965 +v 0.129405 -0.989177 -0.069168 +v 0.086443 -0.995185 -0.046205 +v 0.043274 -0.998795 -0.023130 +v 0.045333 0.998795 -0.018777 +v 0.090556 0.995185 -0.037509 +v 0.135561 0.989177 -0.056151 +v 0.180240 0.980785 -0.074658 +v 0.224485 0.970031 -0.092984 +v 0.268188 0.956940 -0.111087 +v 0.311246 0.941544 -0.128922 +v 0.353553 0.923880 -0.146447 +v 0.395009 0.903989 -0.163618 +v 0.435514 0.881921 -0.180396 +v 0.474969 0.857729 -0.196738 +v 0.513280 0.831470 -0.212608 +v 0.550354 0.803208 -0.227964 +v 0.586103 0.773010 -0.242772 +v 0.620440 0.740951 -0.256994 +v 0.653282 0.707107 -0.270598 +v 0.684550 0.671559 -0.283550 +v 0.714168 0.634393 -0.295818 +v 0.742067 0.595699 -0.307374 +v 0.768178 0.555570 -0.318190 +v 0.792438 0.514103 -0.328238 +v 0.814789 0.471397 -0.337497 +v 0.835177 0.427555 -0.345942 +v 0.853553 0.382683 -0.353553 +v 0.869873 0.336890 -0.360313 +v 0.884098 0.290285 -0.366205 +v 0.896192 0.242980 -0.371215 +v 0.906127 0.195090 -0.375330 +v 0.913880 0.146730 -0.378541 +v 0.919431 0.098017 -0.380841 +v 0.922767 0.049068 -0.382222 +v 0.923879 -0.000000 -0.382683 +v 0.922767 -0.049068 -0.382222 +v 0.919431 -0.098017 -0.380841 +v 0.913880 -0.146730 -0.378541 +v 0.906127 -0.195090 -0.375330 +v 0.896192 -0.242980 -0.371215 +v 0.884098 -0.290285 -0.366205 +v 0.869873 -0.336890 -0.360313 +v 0.853553 -0.382683 -0.353553 +v 0.835177 -0.427555 -0.345942 +v 0.814789 -0.471397 -0.337497 +v 0.792438 -0.514103 -0.328238 +v 0.768178 -0.555570 -0.318190 +v 0.742067 -0.595699 -0.307374 +v 0.714168 -0.634393 -0.295818 +v 0.684550 -0.671559 -0.283550 +v 0.653282 -0.707107 -0.270598 +v 0.620440 -0.740951 -0.256995 +v 0.586103 -0.773010 -0.242772 +v 0.550354 -0.803208 -0.227964 +v 0.513280 -0.831470 -0.212608 +v 0.474969 -0.857729 -0.196738 +v 0.435514 -0.881921 -0.180396 +v 0.395009 -0.903989 -0.163618 +v 0.353553 -0.923880 -0.146447 +v 0.311246 -0.941544 -0.128922 +v 0.268188 -0.956940 -0.111087 +v 0.224484 -0.970031 -0.092984 +v 0.180240 -0.980785 -0.074658 +v 0.135561 -0.989177 -0.056151 +v 0.090556 -0.995185 -0.037509 +v 0.045333 -0.998795 -0.018777 +v 0.046955 0.998795 -0.014244 +v 0.093797 0.995185 -0.028453 +v 0.140412 0.989177 -0.042594 +v 0.186690 0.980785 -0.056632 +v 0.232518 0.970031 -0.070533 +v 0.277785 0.956940 -0.084265 +v 0.322384 0.941544 -0.097794 +v 0.366205 0.923880 -0.111087 +v 0.409145 0.903989 -0.124113 +v 0.451099 0.881921 -0.136839 +v 0.491966 0.857729 -0.149236 +v 0.531648 0.831470 -0.161274 +v 0.570049 0.803208 -0.172922 +v 0.607077 0.773010 -0.184155 +v 0.642642 0.740951 -0.194943 +v 0.676659 0.707107 -0.205262 +v 0.709046 0.671559 -0.215087 +v 0.739725 0.634393 -0.224393 +v 0.768622 0.595699 -0.233159 +v 0.795667 0.555570 -0.241363 +v 0.820795 0.514103 -0.248985 +v 0.843946 0.471397 -0.256008 +v 0.865064 0.427555 -0.262414 +v 0.884098 0.382683 -0.268188 +v 0.901001 0.336890 -0.273316 +v 0.915735 0.290285 -0.277785 +v 0.928262 0.242980 -0.281585 +v 0.938553 0.195090 -0.284707 +v 0.946583 0.146730 -0.287143 +v 0.952332 0.098017 -0.288887 +v 0.955787 0.049068 -0.289935 +v 0.956940 -0.000000 -0.290285 +v 0.955787 -0.049068 -0.289935 +v 0.952332 -0.098017 -0.288887 +v 0.946583 -0.146730 -0.287143 +v 0.938553 -0.195090 -0.284707 +v 0.928262 -0.242980 -0.281585 +v 0.915735 -0.290285 -0.277785 +v 0.901001 -0.336890 -0.273316 +v 0.884098 -0.382683 -0.268188 +v 0.865064 -0.427555 -0.262414 +v 0.843946 -0.471397 -0.256008 +v 0.820795 -0.514103 -0.248985 +v 0.795667 -0.555570 -0.241363 +v 0.768622 -0.595699 -0.233159 +v 0.739725 -0.634393 -0.224393 +v 0.709046 -0.671559 -0.215087 +v 0.676659 -0.707107 -0.205262 +v 0.642642 -0.740951 -0.194943 +v 0.607077 -0.773010 -0.184155 +v 0.570049 -0.803208 -0.172922 +v 0.531648 -0.831470 -0.161274 +v 0.491966 -0.857729 -0.149236 +v 0.451099 -0.881921 -0.136839 +v 0.409145 -0.903989 -0.124113 +v 0.366205 -0.923880 -0.111087 +v 0.322383 -0.941544 -0.097794 +v 0.277785 -0.956940 -0.084265 +v 0.232518 -0.970031 -0.070533 +v 0.186690 -0.980785 -0.056632 +v 0.140412 -0.989177 -0.042594 +v 0.093797 -0.995185 -0.028453 +v 0.046955 -0.998795 -0.014244 +v 0.048125 0.998795 -0.009573 +v 0.096134 0.995185 -0.019122 +v 0.143911 0.989177 -0.028626 +v 0.191342 0.980785 -0.038060 +v 0.238311 0.970031 -0.047403 +v 0.284707 0.956940 -0.056632 +v 0.330417 0.941544 -0.065724 +v 0.375330 0.923880 -0.074658 +v 0.419340 0.903989 -0.083412 +v 0.462339 0.881921 -0.091965 +v 0.504224 0.857729 -0.100296 +v 0.544895 0.831470 -0.108386 +v 0.584253 0.803208 -0.116215 +v 0.622204 0.773010 -0.123764 +v 0.658655 0.740951 -0.131015 +v 0.693520 0.707107 -0.137950 +v 0.726714 0.671559 -0.144552 +v 0.758157 0.634393 -0.150807 +v 0.787774 0.595699 -0.156698 +v 0.815493 0.555570 -0.162212 +v 0.841247 0.514103 -0.167334 +v 0.864975 0.471397 -0.172054 +v 0.886619 0.427555 -0.176360 +v 0.906127 0.382683 -0.180240 +v 0.923452 0.336890 -0.183686 +v 0.938553 0.290285 -0.186690 +v 0.951392 0.242980 -0.189244 +v 0.961940 0.195090 -0.191342 +v 0.970169 0.146730 -0.192979 +v 0.976063 0.098017 -0.194151 +v 0.979604 0.049068 -0.194855 +v 0.980785 -0.000000 -0.195090 +v 0.979604 -0.049068 -0.194855 +v 0.976063 -0.098017 -0.194151 +v 0.970169 -0.146730 -0.192979 +v 0.961940 -0.195090 -0.191342 +v 0.951392 -0.242980 -0.189244 +v 0.938553 -0.290285 -0.186690 +v 0.923452 -0.336890 -0.183686 +v 0.906128 -0.382683 -0.180240 +v 0.886619 -0.427555 -0.176360 +v 0.864975 -0.471397 -0.172054 +v 0.841247 -0.514103 -0.167334 +v 0.815493 -0.555570 -0.162212 +v 0.787774 -0.595699 -0.156698 +v 0.758157 -0.634393 -0.150807 +v 0.726714 -0.671559 -0.144552 +v 0.693520 -0.707107 -0.137950 +v 0.658655 -0.740951 -0.131015 +v 0.622204 -0.773010 -0.123764 +v 0.584253 -0.803208 -0.116215 +v 0.544895 -0.831470 -0.108386 +v 0.504224 -0.857729 -0.100296 +v 0.462339 -0.881921 -0.091965 +v 0.419340 -0.903989 -0.083412 +v 0.375330 -0.923880 -0.074658 +v 0.330417 -0.941544 -0.065724 +v 0.284707 -0.956940 -0.056632 +v 0.238311 -0.970031 -0.047403 +v 0.191342 -0.980785 -0.038060 +v 0.143911 -0.989177 -0.028626 +v 0.096134 -0.995185 -0.019122 +v 0.048125 -0.998795 -0.009573 +v 0.048831 0.998795 -0.004809 +v 0.097545 0.995185 -0.009607 +v 0.146024 0.989177 -0.014382 +v 0.194151 0.980785 -0.019122 +v 0.241810 0.970031 -0.023816 +v 0.288887 0.956940 -0.028453 +v 0.335268 0.941544 -0.033021 +v 0.380841 0.923880 -0.037509 +v 0.425496 0.903989 -0.041908 +v 0.469127 0.881921 -0.046205 +v 0.511627 0.857729 -0.050391 +v 0.552895 0.831470 -0.054455 +v 0.592831 0.803208 -0.058389 +v 0.631338 0.773010 -0.062181 +v 0.668325 0.740951 -0.065824 +v 0.703702 0.707107 -0.069308 +v 0.737383 0.671559 -0.072626 +v 0.769288 0.634393 -0.075768 +v 0.799340 0.595699 -0.078728 +v 0.827466 0.555570 -0.081498 +v 0.853598 0.514103 -0.084072 +v 0.877674 0.471397 -0.086443 +v 0.899636 0.427555 -0.088606 +v 0.919431 0.382683 -0.090556 +v 0.937010 0.336890 -0.092287 +v 0.952332 0.290285 -0.093797 +v 0.965360 0.242980 -0.095080 +v 0.976062 0.195090 -0.096134 +v 0.984413 0.146730 -0.096956 +v 0.990393 0.098017 -0.097545 +v 0.993986 0.049068 -0.097899 +v 0.995185 -0.000000 -0.098017 +v 0.993986 -0.049068 -0.097899 +v 0.990393 -0.098017 -0.097545 +v 0.984413 -0.146730 -0.096956 +v 0.976062 -0.195090 -0.096134 +v 0.965360 -0.242980 -0.095080 +v 0.952332 -0.290285 -0.093797 +v 0.937010 -0.336890 -0.092287 +v 0.919431 -0.382683 -0.090556 +v 0.899636 -0.427555 -0.088606 +v 0.877674 -0.471397 -0.086443 +v 0.853598 -0.514103 -0.084072 +v 0.827466 -0.555570 -0.081498 +v 0.799340 -0.595699 -0.078728 +v 0.769288 -0.634393 -0.075768 +v 0.737383 -0.671559 -0.072626 +v 0.703702 -0.707107 -0.069308 +v 0.668325 -0.740951 -0.065824 +v 0.631338 -0.773010 -0.062181 +v 0.592831 -0.803208 -0.058389 +v 0.552895 -0.831470 -0.054455 +v 0.511627 -0.857729 -0.050391 +v 0.469127 -0.881921 -0.046205 +v 0.425496 -0.903989 -0.041908 +v 0.380841 -0.923880 -0.037509 +v 0.335268 -0.941544 -0.033021 +v 0.288887 -0.956940 -0.028453 +v 0.241810 -0.970031 -0.023816 +v 0.194151 -0.980785 -0.019122 +v 0.146024 -0.989177 -0.014382 +v 0.097545 -0.995185 -0.009607 +v 0.048832 -0.998795 -0.004809 +v 0.049068 0.998795 0.000000 +v 0.098017 0.995185 0.000000 +v 0.146731 0.989177 0.000000 +v 0.195090 0.980785 0.000000 +v 0.242980 0.970031 0.000000 +v 0.290285 0.956940 0.000000 +v 0.336890 0.941544 0.000000 +v 0.382683 0.923880 0.000000 +v 0.427555 0.903989 0.000000 +v 0.471397 0.881921 0.000000 +v 0.514103 0.857729 0.000000 +v 0.555570 0.831470 0.000000 +v 0.595699 0.803208 0.000000 +v 0.634393 0.773010 0.000000 +v 0.671559 0.740951 0.000000 +v 0.707107 0.707107 0.000000 +v 0.740951 0.671559 0.000000 +v 0.773010 0.634393 0.000000 +v 0.803207 0.595699 0.000000 +v 0.831470 0.555570 0.000000 +v 0.857728 0.514103 0.000000 +v 0.881921 0.471397 -0.000000 +v 0.903989 0.427555 0.000000 +v 0.923879 0.382683 0.000000 +v 0.941544 0.336890 -0.000000 +v 0.956940 0.290285 -0.000000 +v 0.970031 0.242980 0.000000 +v 0.980785 0.195090 0.000000 +v 0.989176 0.146730 0.000000 +v 0.995185 0.098017 0.000000 +v 0.998795 0.049068 0.000000 +v 1.000000 -0.000000 0.000000 +v 0.998795 -0.049068 0.000000 +v 0.995185 -0.098017 0.000000 +v 0.989176 -0.146730 0.000000 +v 0.980785 -0.195090 0.000000 +v 0.970031 -0.242980 0.000000 +v 0.956940 -0.290285 0.000000 +v 0.941544 -0.336890 -0.000000 +v 0.923880 -0.382683 0.000000 +v 0.903989 -0.427555 0.000000 +v 0.881921 -0.471397 0.000000 +v 0.857728 -0.514103 0.000000 +v 0.831470 -0.555570 0.000000 +v 0.803207 -0.595699 0.000000 +v 0.773010 -0.634393 0.000000 +v 0.740951 -0.671559 0.000000 +v 0.707107 -0.707107 0.000000 +v 0.671559 -0.740951 -0.000000 +v 0.634393 -0.773010 0.000000 +v 0.595699 -0.803208 0.000000 +v 0.555570 -0.831470 0.000000 +v 0.514103 -0.857729 0.000000 +v 0.471397 -0.881921 0.000000 +v 0.427555 -0.903989 -0.000000 +v 0.382683 -0.923880 0.000000 +v 0.336890 -0.941544 0.000000 +v 0.290285 -0.956940 0.000000 +v 0.242980 -0.970031 0.000000 +v 0.195090 -0.980785 0.000000 +v 0.146731 -0.989177 0.000000 +v 0.098017 -0.995185 0.000000 +v 0.049068 -0.998795 0.000000 +v 0.048831 0.998795 0.004810 +v 0.097545 0.995185 0.009607 +v 0.146024 0.989177 0.014382 +v 0.194151 0.980785 0.019122 +v 0.241810 0.970031 0.023816 +v 0.288887 0.956940 0.028453 +v 0.335268 0.941544 0.033021 +v 0.380841 0.923880 0.037510 +v 0.425496 0.903989 0.041908 +v 0.469127 0.881921 0.046205 +v 0.511627 0.857729 0.050391 +v 0.552895 0.831470 0.054455 +v 0.592831 0.803208 0.058389 +v 0.631338 0.773010 0.062181 +v 0.668325 0.740951 0.065824 +v 0.703702 0.707107 0.069309 +v 0.737383 0.671559 0.072626 +v 0.769288 0.634393 0.075768 +v 0.799340 0.595699 0.078728 +v 0.827466 0.555570 0.081498 +v 0.853598 0.514103 0.084072 +v 0.877674 0.471397 0.086443 +v 0.899636 0.427555 0.088606 +v 0.919431 0.382683 0.090556 +v 0.937010 0.336890 0.092287 +v 0.952332 0.290285 0.093797 +v 0.965360 0.242980 0.095080 +v 0.976062 0.195090 0.096134 +v 0.984413 0.146730 0.096956 +v 0.990393 0.098017 0.097545 +v 0.993986 0.049068 0.097899 +v 0.995185 -0.000000 0.098017 +v 0.993986 -0.049068 0.097899 +v 0.990393 -0.098017 0.097545 +v 0.984413 -0.146730 0.096956 +v 0.976062 -0.195090 0.096134 +v 0.965360 -0.242980 0.095080 +v 0.952332 -0.290285 0.093797 +v 0.937010 -0.336890 0.092287 +v 0.919431 -0.382683 0.090556 +v 0.899636 -0.427555 0.088606 +v 0.877674 -0.471397 0.086443 +v 0.853598 -0.514103 0.084072 +v 0.827466 -0.555570 0.081498 +v 0.799340 -0.595699 0.078728 +v 0.769288 -0.634393 0.075768 +v 0.737383 -0.671559 0.072626 +v 0.703702 -0.707107 0.069309 +v 0.668325 -0.740951 0.065824 +v 0.631338 -0.773010 0.062181 +v 0.592831 -0.803208 0.058389 +v 0.552895 -0.831470 0.054455 +v 0.511627 -0.857729 0.050391 +v 0.469127 -0.881921 0.046205 +v 0.425496 -0.903989 0.041908 +v 0.380841 -0.923880 0.037510 +v 0.335268 -0.941544 0.033021 +v 0.288887 -0.956940 0.028453 +v 0.241810 -0.970031 0.023816 +v 0.194151 -0.980785 0.019122 +v 0.146024 -0.989177 0.014382 +v 0.097545 -0.995185 0.009607 +v 0.048832 -0.998795 0.004810 +v 0.048125 0.998795 0.009573 +v 0.096134 0.995185 0.019122 +v 0.143911 0.989177 0.028626 +v 0.191342 0.980785 0.038060 +v 0.238311 0.970031 0.047403 +v 0.284707 0.956940 0.056632 +v 0.330417 0.941544 0.065724 +v 0.375330 0.923880 0.074658 +v 0.419340 0.903989 0.083412 +v 0.462339 0.881921 0.091965 +v 0.504224 0.857729 0.100297 +v 0.544895 0.831470 0.108386 +v 0.584253 0.803208 0.116215 +v 0.622203 0.773010 0.123764 +v 0.658655 0.740951 0.131015 +v 0.693520 0.707107 0.137950 +v 0.726714 0.671559 0.144552 +v 0.758157 0.634393 0.150807 +v 0.787774 0.595699 0.156698 +v 0.815493 0.555570 0.162212 +v 0.841247 0.514103 0.167335 +v 0.864975 0.471397 0.172054 +v 0.886619 0.427555 0.176360 +v 0.906127 0.382683 0.180240 +v 0.923452 0.336890 0.183686 +v 0.938553 0.290285 0.186690 +v 0.951392 0.242980 0.189244 +v 0.961940 0.195090 0.191342 +v 0.970169 0.146730 0.192979 +v 0.976062 0.098017 0.194151 +v 0.979604 0.049068 0.194855 +v 0.980785 -0.000000 0.195090 +v 0.979604 -0.049068 0.194855 +v 0.976062 -0.098017 0.194151 +v 0.970169 -0.146730 0.192979 +v 0.961940 -0.195090 0.191342 +v 0.951392 -0.242980 0.189244 +v 0.938553 -0.290285 0.186690 +v 0.923452 -0.336890 0.183686 +v 0.906128 -0.382683 0.180240 +v 0.886619 -0.427555 0.176360 +v 0.864975 -0.471397 0.172054 +v 0.841247 -0.514103 0.167335 +v 0.815493 -0.555570 0.162212 +v 0.787774 -0.595699 0.156698 +v 0.758157 -0.634393 0.150807 +v 0.726714 -0.671559 0.144552 +v 0.693520 -0.707107 0.137950 +v 0.658655 -0.740951 0.131015 +v 0.622203 -0.773010 0.123764 +v 0.584253 -0.803208 0.116215 +v 0.544895 -0.831470 0.108386 +v 0.504224 -0.857729 0.100297 +v 0.462339 -0.881921 0.091965 +v 0.419340 -0.903989 0.083412 +v 0.375330 -0.923880 0.074658 +v 0.330417 -0.941544 0.065724 +v 0.284707 -0.956940 0.056632 +v 0.238311 -0.970031 0.047403 +v 0.191342 -0.980785 0.038060 +v 0.143911 -0.989177 0.028626 +v 0.096134 -0.995185 0.019122 +v 0.048125 -0.998795 0.009573 +v 0.046955 0.998795 0.014244 +v 0.093797 0.995185 0.028453 +v 0.140412 0.989177 0.042594 +v 0.186690 0.980785 0.056632 +v 0.232518 0.970031 0.070534 +v 0.277785 0.956940 0.084265 +v 0.322383 0.941544 0.097794 +v 0.366205 0.923880 0.111087 +v 0.409145 0.903989 0.124113 +v 0.451098 0.881921 0.136839 +v 0.491965 0.857729 0.149236 +v 0.531648 0.831470 0.161274 +v 0.570049 0.803208 0.172922 +v 0.607076 0.773010 0.184155 +v 0.642642 0.740951 0.194943 +v 0.676659 0.707107 0.205262 +v 0.709046 0.671559 0.215087 +v 0.739725 0.634393 0.224393 +v 0.768622 0.595699 0.233159 +v 0.795667 0.555570 0.241363 +v 0.820795 0.514103 0.248985 +v 0.843946 0.471397 0.256008 +v 0.865064 0.427555 0.262414 +v 0.884097 0.382683 0.268188 +v 0.901001 0.336890 0.273316 +v 0.915735 0.290285 0.277785 +v 0.928262 0.242980 0.281585 +v 0.938553 0.195090 0.284707 +v 0.946583 0.146730 0.287143 +v 0.952332 0.098017 0.288887 +v 0.955787 0.049068 0.289935 +v 0.956940 -0.000000 0.290285 +v 0.955787 -0.049068 0.289935 +v 0.952332 -0.098017 0.288887 +v 0.946583 -0.146730 0.287143 +v 0.938553 -0.195090 0.284707 +v 0.928262 -0.242980 0.281585 +v 0.915735 -0.290285 0.277785 +v 0.901001 -0.336890 0.273316 +v 0.884098 -0.382683 0.268188 +v 0.865064 -0.427555 0.262414 +v 0.843946 -0.471397 0.256008 +v 0.820795 -0.514103 0.248985 +v 0.795667 -0.555570 0.241363 +v 0.768622 -0.595699 0.233159 +v 0.739725 -0.634393 0.224393 +v 0.709046 -0.671559 0.215087 +v 0.676659 -0.707107 0.205262 +v 0.642642 -0.740951 0.194943 +v 0.607076 -0.773010 0.184155 +v 0.570049 -0.803208 0.172922 +v 0.531648 -0.831470 0.161274 +v 0.491965 -0.857729 0.149236 +v 0.451099 -0.881921 0.136839 +v 0.409145 -0.903989 0.124113 +v 0.366205 -0.923880 0.111087 +v 0.322383 -0.941544 0.097794 +v 0.277785 -0.956940 0.084265 +v 0.232517 -0.970031 0.070534 +v 0.186690 -0.980785 0.056632 +v 0.140413 -0.989177 0.042594 +v 0.093797 -0.995185 0.028453 +v 0.046955 -0.998795 0.014244 +v 0.045333 0.998795 0.018777 +v 0.090556 0.995185 0.037510 +v 0.135561 0.989177 0.056151 +v 0.180240 0.980785 0.074658 +v 0.224484 0.970031 0.092985 +v 0.268188 0.956940 0.111087 +v 0.311246 0.941544 0.128922 +v 0.353553 0.923880 0.146447 +v 0.395009 0.903989 0.163618 +v 0.435514 0.881921 0.180396 +v 0.474969 0.857729 0.196739 +v 0.513280 0.831470 0.212608 +v 0.550354 0.803208 0.227964 +v 0.586103 0.773010 0.242772 +v 0.620440 0.740951 0.256995 +v 0.653281 0.707107 0.270598 +v 0.684549 0.671559 0.283550 +v 0.714168 0.634393 0.295818 +v 0.742067 0.595699 0.307374 +v 0.768178 0.555570 0.318190 +v 0.792438 0.514103 0.328239 +v 0.814789 0.471397 0.337497 +v 0.835177 0.427555 0.345942 +v 0.853553 0.382683 0.353553 +v 0.869873 0.336890 0.360313 +v 0.884098 0.290285 0.366205 +v 0.896192 0.242980 0.371215 +v 0.906127 0.195090 0.375330 +v 0.913880 0.146730 0.378541 +v 0.919431 0.098017 0.380841 +v 0.922766 0.049068 0.382222 +v 0.923879 -0.000000 0.382683 +v 0.922766 -0.049068 0.382222 +v 0.919431 -0.098017 0.380841 +v 0.913880 -0.146730 0.378541 +v 0.906127 -0.195090 0.375330 +v 0.896192 -0.242980 0.371215 +v 0.884098 -0.290285 0.366205 +v 0.869873 -0.336890 0.360313 +v 0.853553 -0.382683 0.353553 +v 0.835177 -0.427555 0.345942 +v 0.814789 -0.471397 0.337497 +v 0.792438 -0.514103 0.328239 +v 0.768178 -0.555570 0.318190 +v 0.742067 -0.595699 0.307374 +v 0.714168 -0.634393 0.295818 +v 0.684549 -0.671559 0.283550 +v 0.653281 -0.707107 0.270598 +v 0.620440 -0.740951 0.256994 +v 0.586103 -0.773010 0.242772 +v 0.550354 -0.803208 0.227964 +v 0.513280 -0.831470 0.212608 +v 0.474969 -0.857729 0.196739 +v 0.435514 -0.881921 0.180396 +v 0.395009 -0.903989 0.163618 +v 0.353553 -0.923880 0.146447 +v 0.311246 -0.941544 0.128922 +v 0.268188 -0.956940 0.111087 +v 0.224484 -0.970031 0.092985 +v 0.180240 -0.980785 0.074658 +v 0.135561 -0.989177 0.056151 +v 0.090556 -0.995185 0.037510 +v 0.045333 -0.998795 0.018778 +v 0.043274 0.998795 0.023130 +v 0.086443 0.995185 0.046205 +v 0.129405 0.989177 0.069168 +v 0.172054 0.980785 0.091965 +v 0.214289 0.970031 0.114540 +v 0.256008 0.956940 0.136839 +v 0.297110 0.941544 0.158809 +v 0.337496 0.923880 0.180396 +v 0.377070 0.903989 0.201548 +v 0.415735 0.881921 0.222215 +v 0.453398 0.857729 0.242346 +v 0.489969 0.831470 0.261894 +v 0.525360 0.803208 0.280811 +v 0.559485 0.773010 0.299051 +v 0.592262 0.740951 0.316571 +v 0.623612 0.707107 0.333328 +v 0.653460 0.671559 0.349282 +v 0.681734 0.634393 0.364395 +v 0.708366 0.595699 0.378629 +v 0.733291 0.555570 0.391952 +v 0.756449 0.514103 0.404330 +v 0.777785 0.471397 0.415735 +v 0.797247 0.427555 0.426138 +v 0.814789 0.382683 0.435514 +v 0.830368 0.336890 0.443841 +v 0.843946 0.290285 0.451099 +v 0.855491 0.242980 0.457269 +v 0.864975 0.195090 0.462339 +v 0.872375 0.146730 0.466294 +v 0.877674 0.098017 0.469127 +v 0.880859 0.049068 0.470829 +v 0.881921 -0.000000 0.471397 +v 0.880859 -0.049068 0.470829 +v 0.877674 -0.098017 0.469127 +v 0.872375 -0.146730 0.466294 +v 0.864975 -0.195090 0.462339 +v 0.855491 -0.242980 0.457269 +v 0.843946 -0.290285 0.451099 +v 0.830368 -0.336890 0.443841 +v 0.814789 -0.382683 0.435514 +v 0.797247 -0.427555 0.426138 +v 0.777785 -0.471397 0.415735 +v 0.756449 -0.514103 0.404330 +v 0.733291 -0.555570 0.391952 +v 0.708366 -0.595699 0.378629 +v 0.681734 -0.634393 0.364395 +v 0.653460 -0.671559 0.349282 +v 0.623612 -0.707107 0.333328 +v 0.592262 -0.740951 0.316571 +v 0.559485 -0.773010 0.299051 +v 0.525360 -0.803208 0.280811 +v 0.489969 -0.831470 0.261894 +v 0.453398 -0.857729 0.242346 +v 0.415735 -0.881921 0.222215 +v 0.377070 -0.903989 0.201548 +v 0.337497 -0.923880 0.180396 +v 0.297110 -0.941544 0.158809 +v 0.256008 -0.956940 0.136839 +v 0.214289 -0.970031 0.114540 +v 0.172054 -0.980785 0.091965 +v 0.129405 -0.989177 0.069168 +v 0.086443 -0.995185 0.046205 +v 0.043274 -0.998795 0.023130 +v 0.040798 0.998795 0.027261 +v 0.081498 0.995185 0.054456 +v 0.122002 0.989177 0.081519 +v 0.162212 0.980785 0.108387 +v 0.202031 0.970031 0.134993 +v 0.241363 0.956940 0.161274 +v 0.280114 0.941544 0.187166 +v 0.318189 0.923880 0.212608 +v 0.355499 0.903989 0.237537 +v 0.391952 0.881921 0.261894 +v 0.427461 0.857729 0.285620 +v 0.461940 0.831470 0.308658 +v 0.495306 0.803208 0.330953 +v 0.527479 0.773010 0.352450 +v 0.558381 0.740951 0.373098 +v 0.587938 0.707107 0.392848 +v 0.616078 0.671559 0.411650 +v 0.642735 0.634393 0.429462 +v 0.667843 0.595699 0.446238 +v 0.691342 0.555570 0.461940 +v 0.713175 0.514103 0.476528 +v 0.733290 0.471397 0.489969 +v 0.751640 0.427555 0.502230 +v 0.768178 0.382683 0.513280 +v 0.782865 0.336890 0.523094 +v 0.795667 0.290285 0.531648 +v 0.806551 0.242980 0.538920 +v 0.815493 0.195090 0.544895 +v 0.822470 0.146730 0.549557 +v 0.827466 0.098017 0.552895 +v 0.830468 0.049068 0.554901 +v 0.831469 -0.000000 0.555570 +v 0.830468 -0.049068 0.554901 +v 0.827466 -0.098017 0.552895 +v 0.822470 -0.146730 0.549557 +v 0.815493 -0.195090 0.544895 +v 0.806551 -0.242980 0.538920 +v 0.795667 -0.290285 0.531648 +v 0.782865 -0.336890 0.523094 +v 0.768178 -0.382683 0.513280 +v 0.751640 -0.427555 0.502230 +v 0.733290 -0.471397 0.489969 +v 0.713175 -0.514103 0.476528 +v 0.691342 -0.555570 0.461940 +v 0.667843 -0.595699 0.446238 +v 0.642735 -0.634393 0.429462 +v 0.616078 -0.671559 0.411650 +v 0.587938 -0.707107 0.392848 +v 0.558381 -0.740951 0.373098 +v 0.527479 -0.773010 0.352450 +v 0.495306 -0.803208 0.330953 +v 0.461940 -0.831470 0.308658 +v 0.427461 -0.857729 0.285620 +v 0.391952 -0.881921 0.261894 +v 0.355499 -0.903989 0.237537 +v 0.318190 -0.923880 0.212608 +v 0.280114 -0.941544 0.187166 +v 0.241363 -0.956940 0.161274 +v 0.202031 -0.970031 0.134993 +v 0.162212 -0.980785 0.108387 +v 0.122002 -0.989177 0.081519 +v 0.081498 -0.995185 0.054456 +v 0.040798 -0.998795 0.027261 +v 0.037930 0.998795 0.031128 +v 0.075768 0.995185 0.062182 +v 0.113424 0.989177 0.093085 +v 0.150807 0.980785 0.123764 +v 0.187826 0.970031 0.154145 +v 0.224393 0.956940 0.184155 +v 0.260419 0.941544 0.213721 +v 0.295818 0.923880 0.242772 +v 0.330505 0.903989 0.271238 +v 0.364394 0.881921 0.299051 +v 0.397407 0.857729 0.326143 +v 0.429462 0.831470 0.352450 +v 0.460482 0.803208 0.377908 +v 0.490393 0.773010 0.402455 +v 0.519122 0.740951 0.426033 +v 0.546601 0.707107 0.448584 +v 0.572763 0.671559 0.470054 +v 0.597545 0.634393 0.490393 +v 0.620888 0.595699 0.509549 +v 0.642735 0.555570 0.527479 +v 0.663033 0.514103 0.544137 +v 0.681734 0.471397 0.559485 +v 0.698793 0.427555 0.573485 +v 0.714168 0.382683 0.586103 +v 0.727823 0.336890 0.597309 +v 0.739725 0.290285 0.607077 +v 0.749844 0.242980 0.615381 +v 0.758157 0.195090 0.622204 +v 0.764643 0.146730 0.627527 +v 0.769288 0.098017 0.631338 +v 0.772079 0.049068 0.633629 +v 0.773010 -0.000000 0.634393 +v 0.772079 -0.049068 0.633629 +v 0.769288 -0.098017 0.631338 +v 0.764643 -0.146730 0.627527 +v 0.758157 -0.195090 0.622204 +v 0.749844 -0.242980 0.615381 +v 0.739725 -0.290285 0.607077 +v 0.727823 -0.336890 0.597309 +v 0.714168 -0.382683 0.586103 +v 0.698793 -0.427555 0.573485 +v 0.681734 -0.471397 0.559485 +v 0.663033 -0.514103 0.544137 +v 0.642735 -0.555570 0.527479 +v 0.620888 -0.595699 0.509549 +v 0.597545 -0.634393 0.490393 +v 0.572763 -0.671559 0.470054 +v 0.546601 -0.707107 0.448584 +v 0.519122 -0.740951 0.426032 +v 0.490393 -0.773010 0.402455 +v 0.460482 -0.803208 0.377908 +v 0.429462 -0.831470 0.352450 +v 0.397407 -0.857729 0.326143 +v 0.364395 -0.881921 0.299051 +v 0.330505 -0.903989 0.271238 +v 0.295818 -0.923880 0.242772 +v 0.260419 -0.941544 0.213721 +v 0.224393 -0.956940 0.184155 +v 0.187826 -0.970031 0.154145 +v 0.150807 -0.980785 0.123764 +v 0.113424 -0.989177 0.093085 +v 0.075768 -0.995185 0.062182 +v 0.037930 -0.998795 0.031128 +v 0.034696 0.998795 0.034696 +v 0.069309 0.995185 0.069309 +v 0.103754 0.989177 0.103754 +v 0.137950 0.980785 0.137950 +v 0.171813 0.970031 0.171813 +v 0.205262 0.956940 0.205262 +v 0.238217 0.941544 0.238217 +v 0.270598 0.923880 0.270598 +v 0.302327 0.903989 0.302327 +v 0.333328 0.881921 0.333328 +v 0.363525 0.857729 0.363525 +v 0.392848 0.831470 0.392848 +v 0.421223 0.803208 0.421223 +v 0.448584 0.773010 0.448584 +v 0.474864 0.740951 0.474864 +v 0.500000 0.707107 0.500000 +v 0.523931 0.671559 0.523931 +v 0.546601 0.634393 0.546601 +v 0.567953 0.595699 0.567954 +v 0.587938 0.555570 0.587938 +v 0.606506 0.514103 0.606506 +v 0.623612 0.471397 0.623612 +v 0.639217 0.427555 0.639217 +v 0.653281 0.382683 0.653281 +v 0.665772 0.336890 0.665772 +v 0.676659 0.290285 0.676659 +v 0.685915 0.242980 0.685915 +v 0.693520 0.195090 0.693520 +v 0.699453 0.146730 0.699453 +v 0.703702 0.098017 0.703702 +v 0.706255 0.049068 0.706255 +v 0.707107 -0.000000 0.707107 +v 0.706255 -0.049068 0.706255 +v 0.703702 -0.098017 0.703702 +v 0.699453 -0.146730 0.699453 +v 0.693520 -0.195090 0.693520 +v 0.685915 -0.242980 0.685915 +v 0.676659 -0.290285 0.676659 +v 0.665772 -0.336890 0.665772 +v 0.653281 -0.382683 0.653282 +v 0.639217 -0.427555 0.639217 +v 0.623612 -0.471397 0.623612 +v 0.606506 -0.514103 0.606506 +v 0.587938 -0.555570 0.587938 +v 0.567953 -0.595699 0.567954 +v 0.546601 -0.634393 0.546601 +v 0.523931 -0.671559 0.523931 +v 0.500000 -0.707107 0.500000 +v 0.474864 -0.740951 0.474864 +v 0.448584 -0.773010 0.448584 +v 0.421223 -0.803208 0.421223 +v 0.392848 -0.831470 0.392848 +v 0.363525 -0.857729 0.363525 +v 0.333328 -0.881921 0.333328 +v 0.302327 -0.903989 0.302327 +v 0.270598 -0.923880 0.270598 +v 0.238217 -0.941544 0.238217 +v 0.205262 -0.956940 0.205262 +v 0.171813 -0.970031 0.171813 +v 0.137950 -0.980785 0.137950 +v 0.103754 -0.989177 0.103754 +v 0.069309 -0.995185 0.069309 +v 0.034696 -0.998795 0.034696 +v 0.031128 0.998795 0.037930 +v 0.062181 0.995185 0.075768 +v 0.093085 0.989177 0.113424 +v 0.123764 0.980785 0.150807 +v 0.154145 0.970031 0.187826 +v 0.184155 0.956940 0.224393 +v 0.213721 0.941544 0.260419 +v 0.242772 0.923880 0.295818 +v 0.271238 0.903989 0.330505 +v 0.299051 0.881921 0.364395 +v 0.326143 0.857729 0.397407 +v 0.352450 0.831470 0.429462 +v 0.377907 0.803208 0.460482 +v 0.402455 0.773010 0.490393 +v 0.426033 0.740951 0.519122 +v 0.448584 0.707107 0.546601 +v 0.470054 0.671559 0.572763 +v 0.490392 0.634393 0.597545 +v 0.509549 0.595699 0.620888 +v 0.527479 0.555570 0.642735 +v 0.544137 0.514103 0.663033 +v 0.559485 0.471397 0.681734 +v 0.573485 0.427555 0.698793 +v 0.586103 0.382683 0.714168 +v 0.597309 0.336890 0.727823 +v 0.607076 0.290285 0.739725 +v 0.615381 0.242980 0.749844 +v 0.622203 0.195090 0.758157 +v 0.627527 0.146730 0.764644 +v 0.631338 0.098017 0.769288 +v 0.633629 0.049068 0.772079 +v 0.634393 -0.000000 0.773010 +v 0.633629 -0.049068 0.772079 +v 0.631338 -0.098017 0.769288 +v 0.627527 -0.146730 0.764644 +v 0.622203 -0.195090 0.758157 +v 0.615381 -0.242980 0.749844 +v 0.607076 -0.290285 0.739725 +v 0.597309 -0.336890 0.727823 +v 0.586103 -0.382683 0.714169 +v 0.573485 -0.427555 0.698793 +v 0.559485 -0.471397 0.681734 +v 0.544137 -0.514103 0.663033 +v 0.527479 -0.555570 0.642735 +v 0.509549 -0.595699 0.620888 +v 0.490393 -0.634393 0.597545 +v 0.470054 -0.671559 0.572763 +v 0.448584 -0.707107 0.546601 +v 0.426033 -0.740951 0.519122 +v 0.402455 -0.773010 0.490393 +v 0.377907 -0.803208 0.460482 +v 0.352450 -0.831470 0.429462 +v 0.326143 -0.857729 0.397407 +v 0.299051 -0.881921 0.364395 +v 0.271238 -0.903989 0.330504 +v 0.242772 -0.923880 0.295818 +v 0.213721 -0.941544 0.260419 +v 0.184155 -0.956940 0.224393 +v 0.154145 -0.970031 0.187826 +v 0.123764 -0.980785 0.150807 +v 0.093085 -0.989177 0.113424 +v 0.062181 -0.995185 0.075768 +v 0.031128 -0.998795 0.037930 +v 0.027261 0.998795 0.040798 +v 0.054455 0.995185 0.081498 +v 0.081519 0.989177 0.122002 +v 0.108387 0.980785 0.162212 +v 0.134993 0.970031 0.202031 +v 0.161274 0.956940 0.241363 +v 0.187166 0.941544 0.280114 +v 0.212607 0.923880 0.318190 +v 0.237537 0.903989 0.355499 +v 0.261894 0.881921 0.391952 +v 0.285620 0.857729 0.427461 +v 0.308658 0.831470 0.461940 +v 0.330953 0.803208 0.495306 +v 0.352450 0.773010 0.527479 +v 0.373098 0.740951 0.558381 +v 0.392847 0.707107 0.587938 +v 0.411650 0.671559 0.616078 +v 0.429461 0.634393 0.642735 +v 0.446238 0.595699 0.667843 +v 0.461940 0.555570 0.691342 +v 0.476528 0.514103 0.713175 +v 0.489969 0.471397 0.733290 +v 0.502230 0.427555 0.751640 +v 0.513280 0.382683 0.768178 +v 0.523094 0.336890 0.782865 +v 0.531648 0.290285 0.795667 +v 0.538920 0.242980 0.806551 +v 0.544895 0.195090 0.815493 +v 0.549557 0.146730 0.822470 +v 0.552895 0.098017 0.827466 +v 0.554901 0.049068 0.830468 +v 0.555570 -0.000000 0.831470 +v 0.554901 -0.049068 0.830468 +v 0.552895 -0.098017 0.827466 +v 0.549557 -0.146730 0.822470 +v 0.544895 -0.195090 0.815493 +v 0.538920 -0.242980 0.806551 +v 0.531647 -0.290285 0.795667 +v 0.523094 -0.336890 0.782865 +v 0.513280 -0.382683 0.768178 +v 0.502230 -0.427555 0.751640 +v 0.489969 -0.471397 0.733291 +v 0.476528 -0.514103 0.713175 +v 0.461940 -0.555570 0.691342 +v 0.446238 -0.595699 0.667843 +v 0.429461 -0.634393 0.642735 +v 0.411650 -0.671559 0.616078 +v 0.392847 -0.707107 0.587938 +v 0.373098 -0.740951 0.558381 +v 0.352450 -0.773010 0.527479 +v 0.330953 -0.803208 0.495306 +v 0.308658 -0.831470 0.461940 +v 0.285620 -0.857729 0.427461 +v 0.261894 -0.881921 0.391952 +v 0.237537 -0.903989 0.355499 +v 0.212607 -0.923880 0.318190 +v 0.187166 -0.941544 0.280114 +v 0.161274 -0.956940 0.241363 +v 0.134993 -0.970031 0.202031 +v 0.108387 -0.980785 0.162212 +v 0.081519 -0.989177 0.122002 +v 0.054455 -0.995185 0.081498 +v 0.027261 -0.998795 0.040798 +v 0.023130 0.998795 0.043274 +v 0.046205 0.995185 0.086444 +v 0.069168 0.989177 0.129405 +v 0.091965 0.980785 0.172055 +v 0.114540 0.970031 0.214290 +v 0.136839 0.956940 0.256008 +v 0.158809 0.941544 0.297110 +v 0.180396 0.923880 0.337497 +v 0.201548 0.903989 0.377070 +v 0.222215 0.881921 0.415735 +v 0.242346 0.857729 0.453398 +v 0.261894 0.831470 0.489969 +v 0.280811 0.803208 0.525360 +v 0.299051 0.773010 0.559485 +v 0.316571 0.740951 0.592262 +v 0.333328 0.707107 0.623613 +v 0.349282 0.671559 0.653460 +v 0.364394 0.634393 0.681734 +v 0.378629 0.595699 0.708366 +v 0.391952 0.555570 0.733291 +v 0.404330 0.514103 0.756449 +v 0.415735 0.471397 0.777785 +v 0.426138 0.427555 0.797247 +v 0.435514 0.382683 0.814789 +v 0.443841 0.336890 0.830367 +v 0.451099 0.290285 0.843946 +v 0.457269 0.242980 0.855491 +v 0.462339 0.195090 0.864975 +v 0.466294 0.146730 0.872375 +v 0.469127 0.098017 0.877674 +v 0.470829 0.049068 0.880859 +v 0.471397 -0.000000 0.881921 +v 0.470829 -0.049068 0.880859 +v 0.469127 -0.098017 0.877674 +v 0.466294 -0.146730 0.872375 +v 0.462339 -0.195090 0.864975 +v 0.457269 -0.242980 0.855491 +v 0.451098 -0.290285 0.843946 +v 0.443841 -0.336890 0.830367 +v 0.435514 -0.382683 0.814789 +v 0.426138 -0.427555 0.797247 +v 0.415735 -0.471397 0.777785 +v 0.404330 -0.514103 0.756449 +v 0.391952 -0.555570 0.733291 +v 0.378629 -0.595699 0.708366 +v 0.364394 -0.634393 0.681734 +v 0.349282 -0.671559 0.653460 +v 0.333328 -0.707107 0.623613 +v 0.316571 -0.740951 0.592262 +v 0.299051 -0.773010 0.559485 +v 0.280811 -0.803208 0.525360 +v 0.261894 -0.831470 0.489969 +v 0.242346 -0.857729 0.453398 +v 0.222215 -0.881921 0.415735 +v 0.201548 -0.903989 0.377070 +v 0.180396 -0.923880 0.337497 +v 0.158809 -0.941544 0.297110 +v 0.136839 -0.956940 0.256008 +v 0.114540 -0.970031 0.214289 +v 0.091965 -0.980785 0.172055 +v 0.069168 -0.989177 0.129405 +v 0.046205 -0.995185 0.086443 +v 0.023130 -0.998795 0.043274 +v 0.018777 0.998795 0.045333 +v 0.037510 0.995185 0.090556 +v 0.056151 0.989177 0.135561 +v 0.074658 0.980785 0.180240 +v 0.092985 0.970031 0.224485 +v 0.111087 0.956940 0.268188 +v 0.128922 0.941544 0.311246 +v 0.146447 0.923880 0.353553 +v 0.163618 0.903989 0.395009 +v 0.180396 0.881921 0.435514 +v 0.196738 0.857729 0.474969 +v 0.212608 0.831470 0.513280 +v 0.227964 0.803208 0.550354 +v 0.242772 0.773010 0.586103 +v 0.256994 0.740951 0.620440 +v 0.270598 0.707107 0.653282 +v 0.283550 0.671559 0.684549 +v 0.295818 0.634393 0.714168 +v 0.307374 0.595699 0.742067 +v 0.318190 0.555570 0.768178 +v 0.328238 0.514103 0.792438 +v 0.337497 0.471397 0.814789 +v 0.345942 0.427555 0.835177 +v 0.353553 0.382683 0.853553 +v 0.360313 0.336890 0.869873 +v 0.366205 0.290285 0.884098 +v 0.371215 0.242980 0.896192 +v 0.375330 0.195090 0.906127 +v 0.378541 0.146730 0.913880 +v 0.380841 0.098017 0.919431 +v 0.382222 0.049068 0.922766 +v 0.382683 -0.000000 0.923879 +v 0.382222 -0.049068 0.922766 +v 0.380841 -0.098017 0.919431 +v 0.378541 -0.146730 0.913880 +v 0.375330 -0.195090 0.906127 +v 0.371215 -0.242980 0.896192 +v 0.366205 -0.290285 0.884098 +v 0.360313 -0.336890 0.869873 +v 0.353553 -0.382683 0.853553 +v 0.345942 -0.427555 0.835177 +v 0.337497 -0.471397 0.814789 +v 0.328238 -0.514103 0.792438 +v 0.318190 -0.555570 0.768178 +v 0.307374 -0.595699 0.742067 +v 0.295818 -0.634393 0.714168 +v 0.283550 -0.671559 0.684549 +v 0.270598 -0.707107 0.653282 +v 0.256995 -0.740951 0.620440 +v 0.242772 -0.773010 0.586103 +v 0.227964 -0.803208 0.550354 +v 0.212608 -0.831470 0.513280 +v 0.196738 -0.857729 0.474969 +v 0.180396 -0.881921 0.435514 +v 0.163618 -0.903989 0.395009 +v 0.146447 -0.923880 0.353553 +v 0.128922 -0.941544 0.311246 +v 0.111087 -0.956940 0.268188 +v 0.092984 -0.970031 0.224484 +v 0.074658 -0.980785 0.180240 +v 0.056151 -0.989177 0.135562 +v 0.037510 -0.995185 0.090556 +v 0.018777 -0.998795 0.045333 +v 0.014244 0.998795 0.046955 +v 0.028453 0.995185 0.093797 +v 0.042594 0.989177 0.140413 +v 0.056632 0.980785 0.186690 +v 0.070533 0.970031 0.232518 +v 0.084265 0.956940 0.277785 +v 0.097794 0.941544 0.322384 +v 0.111087 0.923880 0.366205 +v 0.124113 0.903989 0.409145 +v 0.136839 0.881921 0.451098 +v 0.149236 0.857729 0.491965 +v 0.161274 0.831470 0.531648 +v 0.172922 0.803208 0.570049 +v 0.184155 0.773010 0.607077 +v 0.194943 0.740951 0.642642 +v 0.205262 0.707107 0.676659 +v 0.215087 0.671559 0.709046 +v 0.224393 0.634393 0.739725 +v 0.233159 0.595699 0.768622 +v 0.241363 0.555570 0.795667 +v 0.248985 0.514103 0.820795 +v 0.256008 0.471397 0.843946 +v 0.262414 0.427555 0.865064 +v 0.268188 0.382683 0.884097 +v 0.273316 0.336890 0.901001 +v 0.277785 0.290285 0.915735 +v 0.281585 0.242980 0.928262 +v 0.284707 0.195090 0.938553 +v 0.287143 0.146730 0.946582 +v 0.288887 0.098017 0.952332 +v 0.289935 0.049068 0.955787 +v 0.290284 -0.000000 0.956940 +v 0.289935 -0.049068 0.955787 +v 0.288887 -0.098017 0.952332 +v 0.287143 -0.146730 0.946582 +v 0.284707 -0.195090 0.938553 +v 0.281585 -0.242980 0.928262 +v 0.277785 -0.290285 0.915735 +v 0.273316 -0.336890 0.901001 +v 0.268188 -0.382683 0.884098 +v 0.262414 -0.427555 0.865064 +v 0.256008 -0.471397 0.843946 +v 0.248985 -0.514103 0.820795 +v 0.241363 -0.555570 0.795667 +v 0.233159 -0.595699 0.768622 +v 0.224393 -0.634393 0.739725 +v 0.215087 -0.671559 0.709046 +v 0.205262 -0.707107 0.676659 +v 0.194943 -0.740951 0.642642 +v 0.184155 -0.773010 0.607077 +v 0.172922 -0.803208 0.570049 +v 0.161274 -0.831470 0.531648 +v 0.149236 -0.857729 0.491965 +v 0.136839 -0.881921 0.451099 +v 0.124113 -0.903989 0.409145 +v 0.111087 -0.923880 0.366205 +v 0.097794 -0.941544 0.322384 +v 0.084265 -0.956940 0.277785 +v 0.070533 -0.970031 0.232518 +v 0.056632 -0.980785 0.186690 +v 0.042594 -0.989177 0.140413 +v 0.028453 -0.995185 0.093797 +v 0.014244 -0.998795 0.046955 +v 0.009573 0.998795 0.048125 +v 0.019122 0.995185 0.096134 +v 0.028626 0.989177 0.143911 +v 0.038060 0.980785 0.191342 +v 0.047403 0.970031 0.238312 +v 0.056632 0.956940 0.284707 +v 0.065724 0.941544 0.330417 +v 0.074658 0.923880 0.375330 +v 0.083412 0.903989 0.419340 +v 0.091965 0.881921 0.462339 +v 0.100296 0.857729 0.504224 +v 0.108386 0.831470 0.544895 +v 0.116215 0.803208 0.584253 +v 0.123764 0.773010 0.622204 +v 0.131015 0.740951 0.658655 +v 0.137950 0.707107 0.693520 +v 0.144552 0.671559 0.726714 +v 0.150807 0.634393 0.758157 +v 0.156698 0.595699 0.787774 +v 0.162212 0.555570 0.815493 +v 0.167335 0.514103 0.841247 +v 0.172054 0.471397 0.864975 +v 0.176360 0.427555 0.886619 +v 0.180240 0.382683 0.906127 +v 0.183686 0.336890 0.923452 +v 0.186690 0.290285 0.938553 +v 0.189243 0.242980 0.951392 +v 0.191342 0.195090 0.961940 +v 0.192979 0.146730 0.970169 +v 0.194151 0.098017 0.976062 +v 0.194855 0.049068 0.979604 +v 0.195090 -0.000000 0.980785 +v 0.194855 -0.049068 0.979604 +v 0.194151 -0.098017 0.976062 +v 0.192979 -0.146730 0.970169 +v 0.191342 -0.195090 0.961940 +v 0.189243 -0.242980 0.951392 +v 0.186690 -0.290285 0.938553 +v 0.183686 -0.336890 0.923452 +v 0.180240 -0.382683 0.906127 +v 0.176360 -0.427555 0.886619 +v 0.172054 -0.471397 0.864975 +v 0.167335 -0.514103 0.841247 +v 0.162212 -0.555570 0.815493 +v 0.156698 -0.595699 0.787774 +v 0.150807 -0.634393 0.758157 +v 0.144552 -0.671559 0.726714 +v 0.137950 -0.707107 0.693520 +v 0.131015 -0.740951 0.658655 +v 0.123764 -0.773010 0.622204 +v 0.116215 -0.803208 0.584253 +v 0.108386 -0.831470 0.544895 +v 0.100296 -0.857729 0.504224 +v 0.091965 -0.881921 0.462339 +v 0.083412 -0.903989 0.419340 +v 0.074658 -0.923880 0.375330 +v 0.065724 -0.941544 0.330417 +v 0.056632 -0.956940 0.284707 +v 0.047403 -0.970031 0.238311 +v 0.038060 -0.980785 0.191342 +v 0.028626 -0.989177 0.143911 +v 0.019122 -0.995185 0.096134 +v 0.009573 -0.998795 0.048125 +v 0.004809 0.998795 0.048832 +v 0.009607 0.995185 0.097545 +v 0.014382 0.989177 0.146024 +v 0.019122 0.980785 0.194151 +v 0.023816 0.970031 0.241810 +v 0.028453 0.956940 0.288887 +v 0.033021 0.941544 0.335268 +v 0.037510 0.923880 0.380841 +v 0.041908 0.903989 0.425496 +v 0.046205 0.881921 0.469127 +v 0.050391 0.857729 0.511627 +v 0.054456 0.831470 0.552895 +v 0.058389 0.803208 0.592831 +v 0.062181 0.773010 0.631338 +v 0.065824 0.740951 0.668325 +v 0.069308 0.707107 0.703702 +v 0.072626 0.671559 0.737383 +v 0.075768 0.634393 0.769288 +v 0.078728 0.595699 0.799340 +v 0.081498 0.555570 0.827466 +v 0.084072 0.514103 0.853598 +v 0.086443 0.471397 0.877674 +v 0.088606 0.427555 0.899636 +v 0.090556 0.382683 0.919430 +v 0.092288 0.336890 0.937010 +v 0.093797 0.290285 0.952332 +v 0.095080 0.242980 0.965360 +v 0.096134 0.195090 0.976062 +v 0.096956 0.146730 0.984413 +v 0.097545 0.098017 0.990392 +v 0.097899 0.049068 0.993986 +v 0.098017 -0.000000 0.995185 +v 0.097899 -0.049068 0.993986 +v 0.097545 -0.098017 0.990392 +v 0.096956 -0.146730 0.984413 +v 0.096134 -0.195090 0.976062 +v 0.095080 -0.242980 0.965360 +v 0.093796 -0.290285 0.952332 +v 0.092288 -0.336890 0.937010 +v 0.090556 -0.382683 0.919431 +v 0.088606 -0.427555 0.899636 +v 0.086443 -0.471397 0.877674 +v 0.084072 -0.514103 0.853598 +v 0.081498 -0.555570 0.827466 +v 0.078728 -0.595699 0.799340 +v 0.075768 -0.634393 0.769288 +v 0.072626 -0.671559 0.737383 +v 0.069308 -0.707107 0.703702 +v 0.065824 -0.740951 0.668325 +v 0.062181 -0.773010 0.631338 +v 0.058389 -0.803208 0.592831 +v 0.054456 -0.831470 0.552895 +v 0.050391 -0.857729 0.511627 +v 0.046205 -0.881921 0.469127 +v 0.041908 -0.903989 0.425496 +v 0.037510 -0.923880 0.380841 +v 0.033021 -0.941544 0.335268 +v 0.028453 -0.956940 0.288887 +v 0.023816 -0.970031 0.241810 +v 0.019122 -0.980785 0.194151 +v 0.014382 -0.989177 0.146024 +v 0.009607 -0.995185 0.097545 +v 0.004809 -0.998795 0.048832 +v -0.000000 1.000000 0.000000 +v 0.000000 0.998795 0.049068 +v 0.000000 0.995185 0.098017 +v -0.000000 0.989177 0.146731 +v 0.000000 0.980785 0.195091 +v -0.000000 0.970031 0.242980 +v -0.000000 0.956940 0.290285 +v -0.000000 0.941544 0.336890 +v 0.000000 0.923880 0.382683 +v 0.000000 0.903989 0.427555 +v -0.000000 0.881921 0.471397 +v -0.000000 0.857729 0.514102 +v 0.000000 0.831470 0.555570 +v -0.000000 0.803208 0.595699 +v -0.000000 0.773010 0.634393 +v 0.000000 0.740951 0.671559 +v -0.000000 0.707107 0.707107 +v 0.000000 0.671559 0.740951 +v -0.000000 0.634393 0.773010 +v -0.000000 0.595699 0.803207 +v -0.000000 0.555570 0.831470 +v 0.000000 0.514103 0.857728 +v 0.000000 0.471397 0.881921 +v -0.000000 0.427555 0.903989 +v -0.000000 0.382683 0.923879 +v 0.000000 0.336890 0.941544 +v 0.000000 0.290285 0.956940 +v -0.000000 0.242980 0.970031 +v 0.000000 0.195090 0.980785 +v -0.000000 0.146730 0.989176 +v -0.000000 0.098017 0.995184 +v 0.000000 0.049068 0.998795 +v -0.000000 -0.000000 1.000000 +v 0.000000 -0.049068 0.998795 +v -0.000000 -0.098017 0.995184 +v -0.000000 -0.146730 0.989176 +v 0.000000 -0.195090 0.980785 +v -0.000000 -0.242980 0.970031 +v -0.000000 -0.290285 0.956940 +v 0.000000 -0.336890 0.941544 +v -0.000000 -0.382683 0.923880 +v -0.000000 -0.427555 0.903989 +v -0.000000 -0.471397 0.881921 +v 0.000000 -0.514103 0.857728 +v 0.000000 -0.555570 0.831470 +v -0.000000 -0.595699 0.803207 +v 0.000000 -0.634393 0.773010 +v -0.000000 -0.671559 0.740951 +v -0.000000 -0.707107 0.707107 +v 0.000000 -0.740951 0.671559 +v -0.000000 -0.773010 0.634393 +v -0.000000 -0.803208 0.595699 +v 0.000000 -0.831470 0.555570 +v -0.000000 -0.857729 0.514102 +v -0.000000 -0.881921 0.471397 +v 0.000000 -0.903989 0.427555 +v 0.000000 -0.923880 0.382683 +v -0.000000 -0.941544 0.336890 +v -0.000000 -0.956940 0.290285 +v -0.000000 -0.970031 0.242980 +v 0.000000 -0.980785 0.195091 +v 0.000000 -0.989177 0.146731 +v -0.000000 -0.995185 0.098017 +v 0.000000 -0.998795 0.049068 +v -0.004809 0.998795 0.048832 +v -0.009607 0.995185 0.097545 +v -0.014382 0.989177 0.146024 +v -0.019122 0.980785 0.194151 +v -0.023816 0.970031 0.241810 +v -0.028453 0.956940 0.288887 +v -0.033021 0.941544 0.335268 +v -0.037510 0.923880 0.380840 +v -0.041908 0.903989 0.425496 +v -0.046205 0.881921 0.469127 +v -0.050391 0.857729 0.511627 +v -0.054455 0.831470 0.552895 +v -0.058389 0.803208 0.592831 +v -0.062181 0.773010 0.631338 +v -0.065824 0.740951 0.668325 +v -0.069309 0.707107 0.703702 +v -0.072626 0.671559 0.737383 +v -0.075768 0.634393 0.769288 +v -0.078728 0.595699 0.799340 +v -0.081498 0.555570 0.827466 +v -0.084072 0.514103 0.853598 +v -0.086443 0.471397 0.877674 +v -0.088606 0.427555 0.899636 +v -0.090556 0.382683 0.919430 +v -0.092287 0.336890 0.937010 +v -0.093797 0.290285 0.952332 +v -0.095080 0.242980 0.965360 +v -0.096134 0.195090 0.976062 +v -0.096956 0.146730 0.984413 +v -0.097545 0.098017 0.990392 +v -0.097899 0.049068 0.993986 +v -0.098017 -0.000000 0.995184 +v -0.097899 -0.049068 0.993986 +v -0.097545 -0.098017 0.990392 +v -0.096956 -0.146730 0.984413 +v -0.096134 -0.195090 0.976062 +v -0.095080 -0.242980 0.965360 +v -0.093797 -0.290285 0.952332 +v -0.092287 -0.336890 0.937010 +v -0.090556 -0.382683 0.919431 +v -0.088606 -0.427555 0.899636 +v -0.086443 -0.471397 0.877674 +v -0.084072 -0.514103 0.853598 +v -0.081498 -0.555570 0.827466 +v -0.078728 -0.595699 0.799340 +v -0.075768 -0.634393 0.769288 +v -0.072626 -0.671559 0.737383 +v -0.069309 -0.707107 0.703702 +v -0.065824 -0.740951 0.668325 +v -0.062181 -0.773010 0.631338 +v -0.058389 -0.803208 0.592831 +v -0.054455 -0.831470 0.552895 +v -0.050391 -0.857729 0.511627 +v -0.046205 -0.881921 0.469127 +v -0.041908 -0.903989 0.425496 +v -0.037509 -0.923880 0.380840 +v -0.033021 -0.941544 0.335268 +v -0.028453 -0.956940 0.288887 +v -0.023816 -0.970031 0.241810 +v -0.019122 -0.980785 0.194151 +v -0.014382 -0.989177 0.146024 +v -0.009607 -0.995185 0.097545 +v -0.004809 -0.998795 0.048832 +v -0.009573 0.998795 0.048125 +v -0.019122 0.995185 0.096134 +v -0.028626 0.989177 0.143911 +v -0.038060 0.980785 0.191342 +v -0.047403 0.970031 0.238311 +v -0.056632 0.956940 0.284707 +v -0.065724 0.941544 0.330417 +v -0.074658 0.923880 0.375330 +v -0.083412 0.903989 0.419340 +v -0.091965 0.881921 0.462339 +v -0.100296 0.857729 0.504224 +v -0.108386 0.831470 0.544895 +v -0.116215 0.803208 0.584253 +v -0.123764 0.773010 0.622203 +v -0.131015 0.740951 0.658655 +v -0.137950 0.707107 0.693520 +v -0.144552 0.671559 0.726714 +v -0.150807 0.634393 0.758157 +v -0.156698 0.595699 0.787774 +v -0.162212 0.555570 0.815493 +v -0.167334 0.514103 0.841247 +v -0.172054 0.471397 0.864975 +v -0.176360 0.427555 0.886619 +v -0.180240 0.382683 0.906127 +v -0.183686 0.336890 0.923452 +v -0.186690 0.290285 0.938553 +v -0.189244 0.242980 0.951392 +v -0.191342 0.195090 0.961940 +v -0.192979 0.146730 0.970169 +v -0.194151 0.098017 0.976062 +v -0.194855 0.049068 0.979604 +v -0.195090 -0.000000 0.980785 +v -0.194855 -0.049068 0.979604 +v -0.194151 -0.098017 0.976062 +v -0.192979 -0.146730 0.970169 +v -0.191342 -0.195090 0.961940 +v -0.189244 -0.242980 0.951392 +v -0.186690 -0.290285 0.938553 +v -0.183686 -0.336890 0.923452 +v -0.180240 -0.382683 0.906127 +v -0.176360 -0.427555 0.886619 +v -0.172054 -0.471397 0.864975 +v -0.167334 -0.514103 0.841247 +v -0.162212 -0.555570 0.815493 +v -0.156698 -0.595699 0.787774 +v -0.150807 -0.634393 0.758157 +v -0.144552 -0.671559 0.726714 +v -0.137950 -0.707107 0.693520 +v -0.131015 -0.740951 0.658655 +v -0.123764 -0.773010 0.622203 +v -0.116215 -0.803208 0.584253 +v -0.108386 -0.831470 0.544895 +v -0.100296 -0.857729 0.504224 +v -0.091965 -0.881921 0.462339 +v -0.083412 -0.903989 0.419340 +v -0.074658 -0.923880 0.375330 +v -0.065724 -0.941544 0.330417 +v -0.056632 -0.956940 0.284707 +v -0.047403 -0.970031 0.238311 +v -0.038060 -0.980785 0.191342 +v -0.028626 -0.989177 0.143911 +v -0.019122 -0.995185 0.096134 +v -0.009573 -0.998795 0.048125 +v -0.014244 0.998795 0.046955 +v -0.028453 0.995185 0.093797 +v -0.042594 0.989177 0.140413 +v -0.056632 0.980785 0.186690 +v -0.070533 0.970031 0.232518 +v -0.084265 0.956940 0.277785 +v -0.097794 0.941544 0.322383 +v -0.111087 0.923880 0.366205 +v -0.124113 0.903989 0.409145 +v -0.136839 0.881921 0.451098 +v -0.149236 0.857729 0.491965 +v -0.161273 0.831470 0.531648 +v -0.172922 0.803208 0.570048 +v -0.184155 0.773010 0.607076 +v -0.194943 0.740951 0.642642 +v -0.205262 0.707107 0.676659 +v -0.215087 0.671559 0.709046 +v -0.224393 0.634393 0.739725 +v -0.233159 0.595699 0.768622 +v -0.241363 0.555570 0.795667 +v -0.248985 0.514103 0.820795 +v -0.256008 0.471397 0.843946 +v -0.262414 0.427555 0.865064 +v -0.268188 0.382683 0.884097 +v -0.273316 0.336890 0.901001 +v -0.277785 0.290285 0.915735 +v -0.281585 0.242980 0.928262 +v -0.284707 0.195090 0.938553 +v -0.287143 0.146730 0.946582 +v -0.288887 0.098017 0.952332 +v -0.289935 0.049068 0.955787 +v -0.290285 -0.000000 0.956940 +v -0.289935 -0.049068 0.955787 +v -0.288887 -0.098017 0.952332 +v -0.287143 -0.146730 0.946582 +v -0.284707 -0.195090 0.938553 +v -0.281585 -0.242980 0.928262 +v -0.277785 -0.290285 0.915735 +v -0.273316 -0.336890 0.901001 +v -0.268188 -0.382683 0.884098 +v -0.262414 -0.427555 0.865064 +v -0.256008 -0.471397 0.843946 +v -0.248985 -0.514103 0.820795 +v -0.241363 -0.555570 0.795667 +v -0.233159 -0.595699 0.768622 +v -0.224393 -0.634393 0.739725 +v -0.215087 -0.671559 0.709046 +v -0.205262 -0.707107 0.676659 +v -0.194943 -0.740951 0.642642 +v -0.184155 -0.773010 0.607076 +v -0.172922 -0.803208 0.570048 +v -0.161273 -0.831470 0.531648 +v -0.149236 -0.857729 0.491965 +v -0.136839 -0.881921 0.451099 +v -0.124113 -0.903989 0.409145 +v -0.111087 -0.923880 0.366205 +v -0.097794 -0.941544 0.322383 +v -0.084265 -0.956940 0.277785 +v -0.070533 -0.970031 0.232518 +v -0.056632 -0.980785 0.186690 +v -0.042594 -0.989177 0.140413 +v -0.028453 -0.995185 0.093797 +v -0.014244 -0.998795 0.046955 +v -0.018777 0.998795 0.045333 +v -0.037510 0.995185 0.090556 +v -0.056151 0.989177 0.135561 +v -0.074658 0.980785 0.180240 +v -0.092985 0.970031 0.224485 +v -0.111087 0.956940 0.268188 +v -0.128922 0.941544 0.311246 +v -0.146446 0.923880 0.353553 +v -0.163618 0.903989 0.395009 +v -0.180396 0.881921 0.435514 +v -0.196739 0.857729 0.474969 +v -0.212607 0.831470 0.513280 +v -0.227964 0.803208 0.550354 +v -0.242772 0.773010 0.586103 +v -0.256994 0.740951 0.620440 +v -0.270598 0.707107 0.653282 +v -0.283550 0.671559 0.684549 +v -0.295818 0.634393 0.714168 +v -0.307374 0.595699 0.742067 +v -0.318190 0.555570 0.768178 +v -0.328238 0.514103 0.792438 +v -0.337496 0.471397 0.814789 +v -0.345942 0.427555 0.835177 +v -0.353553 0.382683 0.853553 +v -0.360313 0.336890 0.869873 +v -0.366205 0.290285 0.884098 +v -0.371215 0.242980 0.896192 +v -0.375330 0.195090 0.906127 +v -0.378541 0.146730 0.913879 +v -0.380841 0.098017 0.919431 +v -0.382222 0.049068 0.922766 +v -0.382683 -0.000000 0.923879 +v -0.382222 -0.049068 0.922766 +v -0.380841 -0.098017 0.919431 +v -0.378541 -0.146730 0.913879 +v -0.375330 -0.195090 0.906127 +v -0.371215 -0.242980 0.896192 +v -0.366205 -0.290285 0.884098 +v -0.360313 -0.336890 0.869873 +v -0.353553 -0.382683 0.853553 +v -0.345942 -0.427555 0.835177 +v -0.337497 -0.471397 0.814789 +v -0.328238 -0.514103 0.792438 +v -0.318190 -0.555570 0.768178 +v -0.307374 -0.595699 0.742067 +v -0.295818 -0.634393 0.714168 +v -0.283550 -0.671559 0.684549 +v -0.270598 -0.707107 0.653282 +v -0.256994 -0.740951 0.620440 +v -0.242772 -0.773010 0.586103 +v -0.227964 -0.803208 0.550354 +v -0.212607 -0.831470 0.513280 +v -0.196739 -0.857729 0.474969 +v -0.180396 -0.881921 0.435514 +v -0.163618 -0.903989 0.395009 +v -0.146446 -0.923880 0.353553 +v -0.128922 -0.941544 0.311246 +v -0.111087 -0.956940 0.268188 +v -0.092984 -0.970031 0.224484 +v -0.074658 -0.980785 0.180240 +v -0.056151 -0.989177 0.135562 +v -0.037510 -0.995185 0.090556 +v -0.018777 -0.998795 0.045333 +v -0.023130 0.998795 0.043274 +v -0.046205 0.995185 0.086444 +v -0.069168 0.989177 0.129405 +v -0.091965 0.980785 0.172055 +v -0.114540 0.970031 0.214289 +v -0.136839 0.956940 0.256008 +v -0.158809 0.941544 0.297110 +v -0.180396 0.923880 0.337496 +v -0.201548 0.903989 0.377070 +v -0.222215 0.881921 0.415735 +v -0.242346 0.857729 0.453398 +v -0.261894 0.831470 0.489969 +v -0.280811 0.803208 0.525360 +v -0.299051 0.773010 0.559485 +v -0.316571 0.740951 0.592262 +v -0.333328 0.707107 0.623613 +v -0.349282 0.671559 0.653460 +v -0.364394 0.634393 0.681734 +v -0.378629 0.595699 0.708366 +v -0.391952 0.555570 0.733291 +v -0.404330 0.514103 0.756449 +v -0.415735 0.471397 0.777785 +v -0.426138 0.427555 0.797247 +v -0.435514 0.382683 0.814789 +v -0.443841 0.336890 0.830368 +v -0.451099 0.290285 0.843946 +v -0.457269 0.242980 0.855491 +v -0.462339 0.195090 0.864975 +v -0.466294 0.146730 0.872375 +v -0.469127 0.098017 0.877674 +v -0.470829 0.049068 0.880859 +v -0.471397 -0.000000 0.881921 +v -0.470829 -0.049068 0.880859 +v -0.469127 -0.098017 0.877674 +v -0.466294 -0.146730 0.872375 +v -0.462339 -0.195090 0.864975 +v -0.457269 -0.242980 0.855491 +v -0.451099 -0.290285 0.843946 +v -0.443841 -0.336890 0.830368 +v -0.435514 -0.382683 0.814789 +v -0.426138 -0.427555 0.797247 +v -0.415735 -0.471397 0.777785 +v -0.404330 -0.514103 0.756449 +v -0.391952 -0.555570 0.733291 +v -0.378629 -0.595699 0.708366 +v -0.364394 -0.634393 0.681734 +v -0.349282 -0.671559 0.653460 +v -0.333328 -0.707107 0.623613 +v -0.316571 -0.740951 0.592262 +v -0.299051 -0.773010 0.559485 +v -0.280811 -0.803208 0.525360 +v -0.261894 -0.831470 0.489969 +v -0.242346 -0.857729 0.453398 +v -0.222215 -0.881921 0.415735 +v -0.201548 -0.903989 0.377070 +v -0.180396 -0.923880 0.337496 +v -0.158809 -0.941544 0.297110 +v -0.136839 -0.956940 0.256008 +v -0.114540 -0.970031 0.214289 +v -0.091965 -0.980785 0.172055 +v -0.069168 -0.989177 0.129405 +v -0.046205 -0.995185 0.086443 +v -0.023130 -0.998795 0.043274 +v -0.027261 0.998795 0.040798 +v -0.054455 0.995185 0.081498 +v -0.081519 0.989177 0.122002 +v -0.108386 0.980785 0.162212 +v -0.134993 0.970031 0.202031 +v -0.161274 0.956940 0.241363 +v -0.187166 0.941544 0.280114 +v -0.212607 0.923880 0.318189 +v -0.237537 0.903989 0.355499 +v -0.261894 0.881921 0.391952 +v -0.285620 0.857729 0.427460 +v -0.308658 0.831470 0.461940 +v -0.330953 0.803208 0.495306 +v -0.352450 0.773010 0.527479 +v -0.373098 0.740951 0.558381 +v -0.392848 0.707107 0.587938 +v -0.411650 0.671559 0.616078 +v -0.429461 0.634393 0.642734 +v -0.446238 0.595699 0.667842 +v -0.461940 0.555570 0.691342 +v -0.476528 0.514103 0.713175 +v -0.489969 0.471397 0.733290 +v -0.502230 0.427555 0.751640 +v -0.513280 0.382683 0.768177 +v -0.523094 0.336890 0.782865 +v -0.531648 0.290285 0.795667 +v -0.538920 0.242980 0.806551 +v -0.544895 0.195090 0.815493 +v -0.549557 0.146730 0.822470 +v -0.552895 0.098017 0.827466 +v -0.554901 0.049068 0.830468 +v -0.555570 -0.000000 0.831469 +v -0.554901 -0.049068 0.830468 +v -0.552895 -0.098017 0.827466 +v -0.549557 -0.146730 0.822470 +v -0.544895 -0.195090 0.815493 +v -0.538920 -0.242980 0.806551 +v -0.531648 -0.290285 0.795667 +v -0.523094 -0.336890 0.782865 +v -0.513280 -0.382683 0.768178 +v -0.502230 -0.427555 0.751640 +v -0.489969 -0.471397 0.733290 +v -0.476528 -0.514103 0.713175 +v -0.461940 -0.555570 0.691342 +v -0.446238 -0.595699 0.667842 +v -0.429461 -0.634393 0.642735 +v -0.411650 -0.671559 0.616078 +v -0.392848 -0.707107 0.587938 +v -0.373098 -0.740951 0.558381 +v -0.352450 -0.773010 0.527479 +v -0.330953 -0.803208 0.495306 +v -0.308658 -0.831470 0.461940 +v -0.285620 -0.857729 0.427460 +v -0.261894 -0.881921 0.391952 +v -0.237537 -0.903989 0.355499 +v -0.212607 -0.923880 0.318189 +v -0.187166 -0.941544 0.280114 +v -0.161274 -0.956940 0.241363 +v -0.134993 -0.970031 0.202031 +v -0.108386 -0.980785 0.162212 +v -0.081519 -0.989177 0.122002 +v -0.054455 -0.995185 0.081498 +v -0.027261 -0.998795 0.040798 +v -0.031128 0.998795 0.037930 +v -0.062181 0.995185 0.075768 +v -0.093085 0.989177 0.113424 +v -0.123764 0.980785 0.150807 +v -0.154145 0.970031 0.187826 +v -0.184155 0.956940 0.224393 +v -0.213721 0.941544 0.260419 +v -0.242772 0.923880 0.295818 +v -0.271238 0.903989 0.330505 +v -0.299051 0.881921 0.364395 +v -0.326143 0.857729 0.397406 +v -0.352450 0.831470 0.429462 +v -0.377908 0.803208 0.460482 +v -0.402455 0.773010 0.490393 +v -0.426032 0.740951 0.519122 +v -0.448584 0.707107 0.546601 +v -0.470054 0.671559 0.572763 +v -0.490392 0.634393 0.597545 +v -0.509549 0.595699 0.620888 +v -0.527479 0.555570 0.642735 +v -0.544137 0.514103 0.663033 +v -0.559485 0.471397 0.681734 +v -0.573485 0.427555 0.698793 +v -0.586103 0.382683 0.714168 +v -0.597309 0.336890 0.727823 +v -0.607076 0.290285 0.739725 +v -0.615381 0.242980 0.749844 +v -0.622203 0.195090 0.758157 +v -0.627527 0.146730 0.764643 +v -0.631338 0.098017 0.769288 +v -0.633629 0.049068 0.772079 +v -0.634393 -0.000000 0.773010 +v -0.633629 -0.049068 0.772079 +v -0.631338 -0.098017 0.769288 +v -0.627527 -0.146730 0.764643 +v -0.622203 -0.195090 0.758157 +v -0.615381 -0.242980 0.749844 +v -0.607077 -0.290285 0.739725 +v -0.597309 -0.336890 0.727823 +v -0.586103 -0.382683 0.714168 +v -0.573485 -0.427555 0.698793 +v -0.559485 -0.471397 0.681734 +v -0.544137 -0.514103 0.663033 +v -0.527479 -0.555570 0.642735 +v -0.509549 -0.595699 0.620888 +v -0.490392 -0.634393 0.597545 +v -0.470054 -0.671559 0.572763 +v -0.448584 -0.707107 0.546601 +v -0.426032 -0.740951 0.519122 +v -0.402455 -0.773010 0.490393 +v -0.377907 -0.803208 0.460482 +v -0.352450 -0.831470 0.429462 +v -0.326143 -0.857729 0.397406 +v -0.299051 -0.881921 0.364395 +v -0.271238 -0.903989 0.330505 +v -0.242772 -0.923880 0.295818 +v -0.213721 -0.941544 0.260419 +v -0.184155 -0.956940 0.224393 +v -0.154145 -0.970031 0.187826 +v -0.123764 -0.980785 0.150807 +v -0.093085 -0.989177 0.113424 +v -0.062181 -0.995185 0.075768 +v -0.031128 -0.998795 0.037930 +v -0.034696 0.998795 0.034696 +v -0.069309 0.995185 0.069309 +v -0.103754 0.989177 0.103754 +v -0.137950 0.980785 0.137950 +v -0.171813 0.970031 0.171813 +v -0.205262 0.956940 0.205262 +v -0.238217 0.941544 0.238217 +v -0.270598 0.923880 0.270598 +v -0.302327 0.903989 0.302327 +v -0.333328 0.881921 0.333328 +v -0.363525 0.857729 0.363525 +v -0.392848 0.831470 0.392848 +v -0.421223 0.803208 0.421223 +v -0.448584 0.773010 0.448584 +v -0.474864 0.740951 0.474864 +v -0.500000 0.707107 0.500000 +v -0.523931 0.671559 0.523931 +v -0.546601 0.634393 0.546601 +v -0.567953 0.595699 0.567953 +v -0.587938 0.555570 0.587938 +v -0.606505 0.514103 0.606506 +v -0.623612 0.471397 0.623612 +v -0.639217 0.427555 0.639217 +v -0.653281 0.382683 0.653281 +v -0.665772 0.336890 0.665772 +v -0.676659 0.290285 0.676659 +v -0.685915 0.242980 0.685915 +v -0.693520 0.195090 0.693520 +v -0.699453 0.146730 0.699453 +v -0.703702 0.098017 0.703702 +v -0.706255 0.049068 0.706255 +v -0.707107 -0.000000 0.707106 +v -0.706255 -0.049068 0.706255 +v -0.703702 -0.098017 0.703702 +v -0.699453 -0.146730 0.699453 +v -0.693520 -0.195090 0.693520 +v -0.685915 -0.242980 0.685915 +v -0.676659 -0.290285 0.676659 +v -0.665772 -0.336890 0.665772 +v -0.653282 -0.382683 0.653281 +v -0.639217 -0.427555 0.639217 +v -0.623612 -0.471397 0.623612 +v -0.606505 -0.514103 0.606506 +v -0.587938 -0.555570 0.587938 +v -0.567953 -0.595699 0.567953 +v -0.546601 -0.634393 0.546601 +v -0.523931 -0.671559 0.523931 +v -0.500000 -0.707107 0.500000 +v -0.474864 -0.740951 0.474864 +v -0.448584 -0.773010 0.448584 +v -0.421223 -0.803208 0.421223 +v -0.392848 -0.831470 0.392848 +v -0.363525 -0.857729 0.363525 +v -0.333328 -0.881921 0.333328 +v -0.302327 -0.903989 0.302327 +v -0.270598 -0.923880 0.270598 +v -0.238217 -0.941544 0.238217 +v -0.205262 -0.956940 0.205262 +v -0.171813 -0.970031 0.171813 +v -0.137950 -0.980785 0.137950 +v -0.103754 -0.989177 0.103754 +v -0.069309 -0.995185 0.069309 +v -0.034696 -0.998795 0.034696 +v -0.037930 0.998795 0.031128 +v -0.075768 0.995185 0.062182 +v -0.113424 0.989177 0.093085 +v -0.150807 0.980785 0.123764 +v -0.187826 0.970031 0.154145 +v -0.224393 0.956940 0.184155 +v -0.260419 0.941544 0.213721 +v -0.295818 0.923880 0.242772 +v -0.330504 0.903989 0.271238 +v -0.364394 0.881921 0.299051 +v -0.397406 0.857729 0.326143 +v -0.429462 0.831470 0.352450 +v -0.460482 0.803208 0.377907 +v -0.490393 0.773010 0.402455 +v -0.519122 0.740951 0.426033 +v -0.546601 0.707107 0.448584 +v -0.572763 0.671559 0.470054 +v -0.597545 0.634393 0.490392 +v -0.620888 0.595699 0.509549 +v -0.642735 0.555570 0.527479 +v -0.663033 0.514103 0.544137 +v -0.681734 0.471397 0.559485 +v -0.698793 0.427555 0.573485 +v -0.714168 0.382683 0.586103 +v -0.727823 0.336890 0.597309 +v -0.739725 0.290285 0.607076 +v -0.749844 0.242980 0.615381 +v -0.758157 0.195090 0.622204 +v -0.764643 0.146730 0.627526 +v -0.769288 0.098017 0.631338 +v -0.772079 0.049068 0.633629 +v -0.773010 -0.000000 0.634393 +v -0.772079 -0.049068 0.633629 +v -0.769288 -0.098017 0.631338 +v -0.764643 -0.146730 0.627526 +v -0.758157 -0.195090 0.622204 +v -0.749844 -0.242980 0.615381 +v -0.739725 -0.290285 0.607076 +v -0.727823 -0.336890 0.597309 +v -0.714169 -0.382683 0.586103 +v -0.698793 -0.427555 0.573485 +v -0.681734 -0.471397 0.559485 +v -0.663033 -0.514103 0.544137 +v -0.642735 -0.555570 0.527479 +v -0.620888 -0.595699 0.509549 +v -0.597545 -0.634393 0.490393 +v -0.572763 -0.671559 0.470054 +v -0.546601 -0.707107 0.448584 +v -0.519122 -0.740951 0.426032 +v -0.490393 -0.773010 0.402455 +v -0.460482 -0.803208 0.377907 +v -0.429462 -0.831470 0.352450 +v -0.397406 -0.857729 0.326143 +v -0.364395 -0.881921 0.299051 +v -0.330504 -0.903989 0.271238 +v -0.295818 -0.923880 0.242772 +v -0.260419 -0.941544 0.213721 +v -0.224393 -0.956940 0.184155 +v -0.187826 -0.970031 0.154145 +v -0.150807 -0.980785 0.123764 +v -0.113424 -0.989177 0.093085 +v -0.075768 -0.995185 0.062182 +v -0.037930 -0.998795 0.031128 +v -0.040798 0.998795 0.027261 +v -0.081498 0.995185 0.054456 +v -0.122002 0.989177 0.081519 +v -0.162212 0.980785 0.108387 +v -0.202031 0.970031 0.134993 +v -0.241363 0.956940 0.161274 +v -0.280114 0.941544 0.187166 +v -0.318189 0.923880 0.212607 +v -0.355499 0.903989 0.237537 +v -0.391952 0.881921 0.261894 +v -0.427460 0.857729 0.285620 +v -0.461940 0.831470 0.308659 +v -0.495306 0.803208 0.330953 +v -0.527479 0.773010 0.352450 +v -0.558381 0.740951 0.373098 +v -0.587938 0.707107 0.392847 +v -0.616078 0.671559 0.411650 +v -0.642734 0.634393 0.429461 +v -0.667843 0.595699 0.446238 +v -0.691342 0.555570 0.461940 +v -0.713175 0.514103 0.476528 +v -0.733290 0.471397 0.489969 +v -0.751640 0.427555 0.502230 +v -0.768177 0.382683 0.513280 +v -0.782865 0.336890 0.523094 +v -0.795667 0.290285 0.531647 +v -0.806551 0.242980 0.538920 +v -0.815493 0.195090 0.544895 +v -0.822470 0.146730 0.549557 +v -0.827466 0.098017 0.552895 +v -0.830468 0.049068 0.554901 +v -0.831469 -0.000000 0.555570 +v -0.830468 -0.049068 0.554901 +v -0.827466 -0.098017 0.552895 +v -0.822470 -0.146730 0.549557 +v -0.815493 -0.195090 0.544895 +v -0.806551 -0.242980 0.538920 +v -0.795667 -0.290285 0.531647 +v -0.782865 -0.336890 0.523094 +v -0.768178 -0.382683 0.513280 +v -0.751640 -0.427555 0.502230 +v -0.733290 -0.471397 0.489969 +v -0.713175 -0.514103 0.476528 +v -0.691342 -0.555570 0.461940 +v -0.667843 -0.595699 0.446238 +v -0.642734 -0.634393 0.429461 +v -0.616078 -0.671559 0.411650 +v -0.587938 -0.707107 0.392847 +v -0.558381 -0.740951 0.373098 +v -0.527479 -0.773010 0.352450 +v -0.495306 -0.803208 0.330953 +v -0.461940 -0.831470 0.308659 +v -0.427460 -0.857729 0.285620 +v -0.391952 -0.881921 0.261894 +v -0.355499 -0.903989 0.237537 +v -0.318189 -0.923880 0.212607 +v -0.280114 -0.941544 0.187166 +v -0.241363 -0.956940 0.161274 +v -0.202031 -0.970031 0.134993 +v -0.162212 -0.980785 0.108387 +v -0.122002 -0.989177 0.081519 +v -0.081498 -0.995185 0.054455 +v -0.040798 -0.998795 0.027261 +v -0.043274 0.998795 0.023130 +v -0.086443 0.995185 0.046205 +v -0.129405 0.989177 0.069168 +v -0.172054 0.980785 0.091965 +v -0.214289 0.970031 0.114540 +v -0.256008 0.956940 0.136839 +v -0.297110 0.941544 0.158809 +v -0.337496 0.923880 0.180396 +v -0.377070 0.903989 0.201548 +v -0.415735 0.881921 0.222215 +v -0.453398 0.857729 0.242346 +v -0.489969 0.831470 0.261894 +v -0.525360 0.803208 0.280811 +v -0.559485 0.773010 0.299051 +v -0.592262 0.740951 0.316571 +v -0.623613 0.707107 0.333328 +v -0.653460 0.671559 0.349282 +v -0.681734 0.634393 0.364394 +v -0.708366 0.595699 0.378629 +v -0.733291 0.555570 0.391952 +v -0.756449 0.514103 0.404330 +v -0.777785 0.471397 0.415735 +v -0.797247 0.427555 0.426138 +v -0.814789 0.382683 0.435514 +v -0.830367 0.336890 0.443841 +v -0.843946 0.290285 0.451098 +v -0.855491 0.242980 0.457269 +v -0.864975 0.195090 0.462339 +v -0.872375 0.146730 0.466294 +v -0.877674 0.098017 0.469127 +v -0.880859 0.049068 0.470829 +v -0.881921 -0.000000 0.471396 +v -0.880859 -0.049068 0.470829 +v -0.877674 -0.098017 0.469127 +v -0.872375 -0.146730 0.466294 +v -0.864975 -0.195090 0.462339 +v -0.855491 -0.242980 0.457269 +v -0.843946 -0.290285 0.451098 +v -0.830367 -0.336890 0.443841 +v -0.814789 -0.382683 0.435514 +v -0.797247 -0.427555 0.426138 +v -0.777785 -0.471397 0.415735 +v -0.756449 -0.514103 0.404330 +v -0.733291 -0.555570 0.391952 +v -0.708366 -0.595699 0.378629 +v -0.681734 -0.634393 0.364395 +v -0.653460 -0.671559 0.349282 +v -0.623613 -0.707107 0.333328 +v -0.592262 -0.740951 0.316571 +v -0.559485 -0.773010 0.299051 +v -0.525360 -0.803208 0.280811 +v -0.489969 -0.831470 0.261894 +v -0.453398 -0.857729 0.242346 +v -0.415735 -0.881921 0.222215 +v -0.377070 -0.903989 0.201548 +v -0.337496 -0.923880 0.180396 +v -0.297110 -0.941544 0.158809 +v -0.256008 -0.956940 0.136839 +v -0.214289 -0.970031 0.114540 +v -0.172054 -0.980785 0.091965 +v -0.129405 -0.989177 0.069168 +v -0.086443 -0.995185 0.046205 +v -0.043274 -0.998795 0.023130 +v -0.045333 0.998795 0.018777 +v -0.090556 0.995185 0.037510 +v -0.135561 0.989177 0.056151 +v -0.180240 0.980785 0.074658 +v -0.224484 0.970031 0.092985 +v -0.268188 0.956940 0.111087 +v -0.311246 0.941544 0.128922 +v -0.353553 0.923880 0.146447 +v -0.395009 0.903989 0.163618 +v -0.435514 0.881921 0.180396 +v -0.474969 0.857729 0.196738 +v -0.513280 0.831470 0.212608 +v -0.550354 0.803208 0.227964 +v -0.586103 0.773010 0.242772 +v -0.620439 0.740951 0.256995 +v -0.653282 0.707107 0.270598 +v -0.684549 0.671559 0.283550 +v -0.714168 0.634393 0.295818 +v -0.742067 0.595699 0.307374 +v -0.768178 0.555570 0.318190 +v -0.792438 0.514103 0.328238 +v -0.814789 0.471397 0.337497 +v -0.835177 0.427555 0.345942 +v -0.853553 0.382683 0.353553 +v -0.869873 0.336890 0.360313 +v -0.884097 0.290285 0.366205 +v -0.896191 0.242980 0.371214 +v -0.906127 0.195090 0.375330 +v -0.913879 0.146730 0.378541 +v -0.919431 0.098017 0.380841 +v -0.922766 0.049068 0.382222 +v -0.923879 -0.000000 0.382683 +v -0.922766 -0.049068 0.382222 +v -0.919431 -0.098017 0.380841 +v -0.913879 -0.146730 0.378541 +v -0.906127 -0.195090 0.375330 +v -0.896191 -0.242980 0.371214 +v -0.884098 -0.290285 0.366205 +v -0.869873 -0.336890 0.360313 +v -0.853553 -0.382683 0.353553 +v -0.835177 -0.427555 0.345942 +v -0.814789 -0.471397 0.337497 +v -0.792438 -0.514103 0.328238 +v -0.768178 -0.555570 0.318190 +v -0.742067 -0.595699 0.307374 +v -0.714168 -0.634393 0.295818 +v -0.684549 -0.671559 0.283550 +v -0.653282 -0.707107 0.270598 +v -0.620439 -0.740951 0.256994 +v -0.586103 -0.773010 0.242772 +v -0.550354 -0.803208 0.227964 +v -0.513280 -0.831470 0.212608 +v -0.474969 -0.857729 0.196738 +v -0.435514 -0.881921 0.180396 +v -0.395009 -0.903989 0.163618 +v -0.353553 -0.923880 0.146447 +v -0.311246 -0.941544 0.128922 +v -0.268188 -0.956940 0.111087 +v -0.224484 -0.970031 0.092984 +v -0.180240 -0.980785 0.074658 +v -0.135561 -0.989177 0.056151 +v -0.090556 -0.995185 0.037510 +v -0.045333 -0.998795 0.018778 +v -0.046955 0.998795 0.014244 +v -0.093797 0.995185 0.028453 +v -0.140412 0.989177 0.042594 +v -0.186690 0.980785 0.056632 +v -0.232517 0.970031 0.070533 +v -0.277785 0.956940 0.084265 +v -0.322383 0.941544 0.097794 +v -0.366205 0.923880 0.111087 +v -0.409145 0.903989 0.124113 +v -0.451098 0.881921 0.136839 +v -0.491965 0.857729 0.149236 +v -0.531648 0.831470 0.161274 +v -0.570048 0.803208 0.172922 +v -0.607076 0.773010 0.184155 +v -0.642642 0.740951 0.194943 +v -0.676659 0.707107 0.205262 +v -0.709046 0.671559 0.215087 +v -0.739725 0.634393 0.224393 +v -0.768622 0.595699 0.233159 +v -0.795667 0.555570 0.241363 +v -0.820795 0.514103 0.248985 +v -0.843946 0.471397 0.256008 +v -0.865064 0.427555 0.262414 +v -0.884097 0.382683 0.268188 +v -0.901001 0.336890 0.273316 +v -0.915735 0.290285 0.277785 +v -0.928261 0.242980 0.281585 +v -0.938553 0.195090 0.284707 +v -0.946582 0.146730 0.287143 +v -0.952332 0.098017 0.288887 +v -0.955787 0.049068 0.289935 +v -0.956940 -0.000000 0.290284 +v -0.955787 -0.049068 0.289935 +v -0.952332 -0.098017 0.288887 +v -0.946582 -0.146730 0.287143 +v -0.938553 -0.195090 0.284707 +v -0.928261 -0.242980 0.281585 +v -0.915735 -0.290285 0.277785 +v -0.901001 -0.336890 0.273316 +v -0.884097 -0.382683 0.268188 +v -0.865064 -0.427555 0.262414 +v -0.843946 -0.471397 0.256008 +v -0.820795 -0.514103 0.248985 +v -0.795667 -0.555570 0.241363 +v -0.768622 -0.595699 0.233159 +v -0.739725 -0.634393 0.224393 +v -0.709046 -0.671559 0.215087 +v -0.676659 -0.707107 0.205262 +v -0.642642 -0.740951 0.194943 +v -0.607076 -0.773010 0.184155 +v -0.570048 -0.803208 0.172922 +v -0.531648 -0.831470 0.161274 +v -0.491965 -0.857729 0.149236 +v -0.451099 -0.881921 0.136839 +v -0.409145 -0.903989 0.124113 +v -0.366205 -0.923880 0.111087 +v -0.322383 -0.941544 0.097794 +v -0.277785 -0.956940 0.084265 +v -0.232517 -0.970031 0.070533 +v -0.186690 -0.980785 0.056632 +v -0.140413 -0.989177 0.042594 +v -0.093797 -0.995185 0.028453 +v -0.046955 -0.998795 0.014244 +v -0.048125 0.998795 0.009573 +v -0.096134 0.995185 0.019122 +v -0.143911 0.989177 0.028626 +v -0.191342 0.980785 0.038060 +v -0.238311 0.970031 0.047403 +v -0.284707 0.956940 0.056632 +v -0.330417 0.941544 0.065724 +v -0.375330 0.923880 0.074658 +v -0.419340 0.903989 0.083412 +v -0.462339 0.881921 0.091965 +v -0.504224 0.857729 0.100296 +v -0.544895 0.831470 0.108387 +v -0.584253 0.803208 0.116215 +v -0.622204 0.773010 0.123764 +v -0.658655 0.740951 0.131015 +v -0.693520 0.707107 0.137950 +v -0.726713 0.671559 0.144552 +v -0.758157 0.634393 0.150807 +v -0.787774 0.595699 0.156698 +v -0.815493 0.555570 0.162212 +v -0.841247 0.514103 0.167334 +v -0.864975 0.471397 0.172054 +v -0.886619 0.427555 0.176360 +v -0.906127 0.382683 0.180240 +v -0.923452 0.336890 0.183686 +v -0.938553 0.290285 0.186690 +v -0.951392 0.242980 0.189243 +v -0.961940 0.195090 0.191342 +v -0.970169 0.146730 0.192979 +v -0.976062 0.098017 0.194151 +v -0.979603 0.049068 0.194855 +v -0.980785 -0.000000 0.195090 +v -0.979603 -0.049068 0.194855 +v -0.976062 -0.098017 0.194151 +v -0.970169 -0.146730 0.192979 +v -0.961940 -0.195090 0.191342 +v -0.951392 -0.242980 0.189243 +v -0.938553 -0.290285 0.186690 +v -0.923452 -0.336890 0.183686 +v -0.906127 -0.382683 0.180240 +v -0.886619 -0.427555 0.176360 +v -0.864975 -0.471397 0.172054 +v -0.841247 -0.514103 0.167334 +v -0.815493 -0.555570 0.162212 +v -0.787774 -0.595699 0.156698 +v -0.758157 -0.634393 0.150807 +v -0.726713 -0.671559 0.144552 +v -0.693520 -0.707107 0.137950 +v -0.658655 -0.740951 0.131015 +v -0.622204 -0.773010 0.123764 +v -0.584253 -0.803208 0.116215 +v -0.544895 -0.831470 0.108387 +v -0.504224 -0.857729 0.100296 +v -0.462339 -0.881921 0.091965 +v -0.419340 -0.903989 0.083412 +v -0.375330 -0.923880 0.074658 +v -0.330417 -0.941544 0.065724 +v -0.284707 -0.956940 0.056632 +v -0.238311 -0.970031 0.047403 +v -0.191342 -0.980785 0.038060 +v -0.143911 -0.989177 0.028626 +v -0.096134 -0.995185 0.019122 +v -0.048125 -0.998795 0.009573 +v -0.048831 0.998795 0.004810 +v -0.097545 0.995185 0.009607 +v -0.146024 0.989177 0.014382 +v -0.194151 0.980785 0.019122 +v -0.241810 0.970031 0.023816 +v -0.288887 0.956940 0.028453 +v -0.335268 0.941544 0.033021 +v -0.380840 0.923880 0.037510 +v -0.425496 0.903989 0.041908 +v -0.469127 0.881921 0.046205 +v -0.511627 0.857729 0.050391 +v -0.552895 0.831470 0.054456 +v -0.592831 0.803208 0.058389 +v -0.631338 0.773010 0.062181 +v -0.668325 0.740951 0.065824 +v -0.703702 0.707107 0.069308 +v -0.737383 0.671559 0.072626 +v -0.769288 0.634393 0.075768 +v -0.799340 0.595699 0.078728 +v -0.827466 0.555570 0.081498 +v -0.853598 0.514103 0.084072 +v -0.877674 0.471397 0.086443 +v -0.899636 0.427555 0.088606 +v -0.919430 0.382683 0.090556 +v -0.937010 0.336890 0.092288 +v -0.952332 0.290285 0.093796 +v -0.965360 0.242980 0.095079 +v -0.976062 0.195090 0.096134 +v -0.984413 0.146730 0.096956 +v -0.990392 0.098017 0.097545 +v -0.993986 0.049068 0.097899 +v -0.995184 -0.000000 0.098017 +v -0.993986 -0.049068 0.097899 +v -0.990392 -0.098017 0.097545 +v -0.984413 -0.146730 0.096956 +v -0.976062 -0.195090 0.096134 +v -0.965360 -0.242980 0.095079 +v -0.952332 -0.290285 0.093796 +v -0.937010 -0.336890 0.092288 +v -0.919431 -0.382683 0.090556 +v -0.899636 -0.427555 0.088606 +v -0.877674 -0.471397 0.086443 +v -0.853598 -0.514103 0.084072 +v -0.827466 -0.555570 0.081498 +v -0.799340 -0.595699 0.078728 +v -0.769288 -0.634393 0.075768 +v -0.737383 -0.671559 0.072626 +v -0.703702 -0.707107 0.069308 +v -0.668325 -0.740951 0.065824 +v -0.631338 -0.773010 0.062181 +v -0.592831 -0.803208 0.058389 +v -0.552895 -0.831470 0.054456 +v -0.511627 -0.857729 0.050391 +v -0.469127 -0.881921 0.046205 +v -0.425496 -0.903989 0.041908 +v -0.380840 -0.923880 0.037510 +v -0.335268 -0.941544 0.033021 +v -0.288887 -0.956940 0.028453 +v -0.241810 -0.970031 0.023816 +v -0.194151 -0.980785 0.019122 +v -0.146024 -0.989177 0.014382 +v -0.097545 -0.995185 0.009607 +v -0.048831 -0.998795 0.004810 +v -0.049068 0.998795 0.000000 +v -0.098017 0.995185 0.000000 +v -0.146731 0.989177 0.000000 +v -0.195090 0.980785 0.000000 +v -0.242980 0.970031 0.000000 +v -0.290285 0.956940 0.000000 +v -0.336890 0.941544 0.000000 +v -0.382683 0.923880 0.000000 +v -0.427555 0.903989 0.000000 +v -0.471397 0.881921 0.000000 +v -0.514102 0.857729 -0.000000 +v -0.555570 0.831470 0.000000 +v -0.595699 0.803208 -0.000000 +v -0.634393 0.773010 -0.000000 +v -0.671559 0.740951 0.000000 +v -0.707107 0.707107 -0.000000 +v -0.740951 0.671559 0.000000 +v -0.773010 0.634393 -0.000000 +v -0.803207 0.595699 -0.000000 +v -0.831470 0.555570 0.000000 +v -0.857728 0.514103 -0.000000 +v -0.881921 0.471397 0.000000 +v -0.903989 0.427555 -0.000000 +v -0.923879 0.382683 0.000000 +v -0.941544 0.336890 0.000000 +v -0.956940 0.290285 -0.000000 +v -0.970030 0.242980 -0.000000 +v -0.980785 0.195090 0.000000 +v -0.989176 0.146730 -0.000000 +v -0.995184 0.098017 -0.000000 +v -0.998795 0.049068 0.000000 +v -1.000000 -0.000000 -0.000000 +v -0.998795 -0.049068 0.000000 +v -0.995184 -0.098017 -0.000000 +v -0.989176 -0.146730 -0.000000 +v -0.980785 -0.195090 0.000000 +v -0.970030 -0.242980 -0.000000 +v -0.956940 -0.290285 -0.000000 +v -0.941544 -0.336890 0.000000 +v -0.923879 -0.382683 -0.000000 +v -0.903989 -0.427555 -0.000000 +v -0.881921 -0.471397 -0.000000 +v -0.857728 -0.514103 -0.000000 +v -0.831470 -0.555570 0.000000 +v -0.803207 -0.595699 -0.000000 +v -0.773010 -0.634393 0.000000 +v -0.740951 -0.671559 0.000000 +v -0.707107 -0.707107 -0.000000 +v -0.671559 -0.740951 0.000000 +v -0.634393 -0.773010 -0.000000 +v -0.595699 -0.803208 -0.000000 +v -0.555570 -0.831470 0.000000 +v -0.514102 -0.857729 -0.000000 +v -0.471397 -0.881921 0.000000 +v -0.427555 -0.903989 0.000000 +v -0.382683 -0.923880 0.000000 +v -0.336890 -0.941544 0.000000 +v -0.290285 -0.956940 0.000000 +v -0.242980 -0.970031 0.000000 +v -0.195090 -0.980785 0.000000 +v -0.146731 -0.989177 0.000000 +v -0.098017 -0.995185 0.000000 +v -0.049068 -0.998795 0.000000 +v -0.048831 0.998795 -0.004809 +v -0.097545 0.995185 -0.009607 +v -0.146024 0.989177 -0.014382 +v -0.194151 0.980785 -0.019122 +v -0.241810 0.970031 -0.023816 +v -0.288887 0.956940 -0.028453 +v -0.335268 0.941544 -0.033021 +v -0.380840 0.923880 -0.037509 +v -0.425496 0.903989 -0.041908 +v -0.469127 0.881921 -0.046205 +v -0.511627 0.857729 -0.050391 +v -0.552895 0.831470 -0.054455 +v -0.592830 0.803208 -0.058389 +v -0.631338 0.773010 -0.062181 +v -0.668325 0.740951 -0.065824 +v -0.703702 0.707107 -0.069309 +v -0.737383 0.671559 -0.072626 +v -0.769288 0.634393 -0.075768 +v -0.799340 0.595699 -0.078728 +v -0.827466 0.555570 -0.081498 +v -0.853598 0.514103 -0.084072 +v -0.877674 0.471397 -0.086443 +v -0.899636 0.427555 -0.088606 +v -0.919430 0.382683 -0.090556 +v -0.937010 0.336890 -0.092287 +v -0.952332 0.290285 -0.093797 +v -0.965360 0.242980 -0.095080 +v -0.976062 0.195090 -0.096134 +v -0.984413 0.146730 -0.096956 +v -0.990392 0.098017 -0.097545 +v -0.993986 0.049068 -0.097899 +v -0.995184 -0.000000 -0.098017 +v -0.993986 -0.049068 -0.097899 +v -0.990392 -0.098017 -0.097545 +v -0.984413 -0.146730 -0.096956 +v -0.976062 -0.195090 -0.096134 +v -0.965360 -0.242980 -0.095080 +v -0.952332 -0.290285 -0.093797 +v -0.937010 -0.336890 -0.092287 +v -0.919431 -0.382683 -0.090556 +v -0.899636 -0.427555 -0.088606 +v -0.877674 -0.471397 -0.086443 +v -0.853598 -0.514103 -0.084072 +v -0.827466 -0.555570 -0.081498 +v -0.799340 -0.595699 -0.078728 +v -0.769288 -0.634393 -0.075768 +v -0.737383 -0.671559 -0.072626 +v -0.703702 -0.707107 -0.069309 +v -0.668325 -0.740951 -0.065824 +v -0.631338 -0.773010 -0.062181 +v -0.592831 -0.803208 -0.058389 +v -0.552895 -0.831470 -0.054455 +v -0.511627 -0.857729 -0.050391 +v -0.469127 -0.881921 -0.046205 +v -0.425496 -0.903989 -0.041908 +v -0.380840 -0.923880 -0.037509 +v -0.335267 -0.941544 -0.033021 +v -0.288887 -0.956940 -0.028453 +v -0.241810 -0.970031 -0.023816 +v -0.194151 -0.980785 -0.019122 +v -0.146024 -0.989177 -0.014382 +v -0.097545 -0.995185 -0.009607 +v -0.048831 -0.998795 -0.004809 +v -0.048125 0.998795 -0.009573 +v -0.096134 0.995185 -0.019122 +v -0.143911 0.989177 -0.028626 +v -0.191342 0.980785 -0.038060 +v -0.238311 0.970031 -0.047403 +v -0.284707 0.956940 -0.056632 +v -0.330416 0.941544 -0.065724 +v -0.375330 0.923880 -0.074658 +v -0.419340 0.903989 -0.083412 +v -0.462339 0.881921 -0.091965 +v -0.504224 0.857729 -0.100296 +v -0.544895 0.831470 -0.108386 +v -0.584253 0.803208 -0.116215 +v -0.622203 0.773010 -0.123764 +v -0.658655 0.740951 -0.131015 +v -0.693520 0.707107 -0.137950 +v -0.726713 0.671559 -0.144552 +v -0.758157 0.634393 -0.150807 +v -0.787774 0.595699 -0.156698 +v -0.815493 0.555570 -0.162212 +v -0.841247 0.514103 -0.167334 +v -0.864975 0.471397 -0.172054 +v -0.886619 0.427555 -0.176360 +v -0.906127 0.382683 -0.180240 +v -0.923452 0.336890 -0.183686 +v -0.938553 0.290285 -0.186690 +v -0.951392 0.242980 -0.189244 +v -0.961940 0.195090 -0.191342 +v -0.970169 0.146730 -0.192979 +v -0.976062 0.098017 -0.194151 +v -0.979603 0.049068 -0.194855 +v -0.980785 -0.000000 -0.195091 +v -0.979603 -0.049068 -0.194855 +v -0.976062 -0.098017 -0.194151 +v -0.970169 -0.146730 -0.192979 +v -0.961940 -0.195090 -0.191342 +v -0.951392 -0.242980 -0.189244 +v -0.938553 -0.290285 -0.186690 +v -0.923452 -0.336890 -0.183686 +v -0.906127 -0.382683 -0.180240 +v -0.886619 -0.427555 -0.176360 +v -0.864975 -0.471397 -0.172054 +v -0.841247 -0.514103 -0.167334 +v -0.815493 -0.555570 -0.162212 +v -0.787774 -0.595699 -0.156698 +v -0.758157 -0.634393 -0.150807 +v -0.726713 -0.671559 -0.144552 +v -0.693520 -0.707107 -0.137950 +v -0.658655 -0.740951 -0.131015 +v -0.622203 -0.773010 -0.123764 +v -0.584253 -0.803208 -0.116215 +v -0.544895 -0.831470 -0.108386 +v -0.504224 -0.857729 -0.100296 +v -0.462339 -0.881921 -0.091965 +v -0.419340 -0.903989 -0.083412 +v -0.375330 -0.923880 -0.074658 +v -0.330416 -0.941544 -0.065724 +v -0.284707 -0.956940 -0.056632 +v -0.238311 -0.970031 -0.047403 +v -0.191342 -0.980785 -0.038060 +v -0.143911 -0.989177 -0.028626 +v -0.096134 -0.995185 -0.019122 +v -0.048125 -0.998795 -0.009573 +v -0.046955 0.998795 -0.014244 +v -0.093797 0.995185 -0.028453 +v -0.140412 0.989177 -0.042594 +v -0.186690 0.980785 -0.056632 +v -0.232517 0.970031 -0.070533 +v -0.277785 0.956940 -0.084265 +v -0.322383 0.941544 -0.097794 +v -0.366205 0.923880 -0.111087 +v -0.409145 0.903989 -0.124113 +v -0.451098 0.881921 -0.136839 +v -0.491965 0.857729 -0.149236 +v -0.531648 0.831470 -0.161273 +v -0.570048 0.803208 -0.172922 +v -0.607076 0.773010 -0.184155 +v -0.642642 0.740951 -0.194943 +v -0.676659 0.707107 -0.205262 +v -0.709046 0.671559 -0.215086 +v -0.739725 0.634393 -0.224393 +v -0.768621 0.595699 -0.233159 +v -0.795667 0.555570 -0.241363 +v -0.820795 0.514103 -0.248985 +v -0.843946 0.471397 -0.256008 +v -0.865064 0.427555 -0.262414 +v -0.884097 0.382683 -0.268188 +v -0.901001 0.336890 -0.273316 +v -0.915735 0.290285 -0.277785 +v -0.928261 0.242980 -0.281585 +v -0.938553 0.195090 -0.284707 +v -0.946582 0.146730 -0.287143 +v -0.952332 0.098017 -0.288887 +v -0.955787 0.049068 -0.289935 +v -0.956940 -0.000000 -0.290285 +v -0.955787 -0.049068 -0.289935 +v -0.952332 -0.098017 -0.288887 +v -0.946582 -0.146730 -0.287143 +v -0.938553 -0.195090 -0.284707 +v -0.928261 -0.242980 -0.281585 +v -0.915735 -0.290285 -0.277785 +v -0.901001 -0.336890 -0.273316 +v -0.884097 -0.382683 -0.268188 +v -0.865064 -0.427555 -0.262414 +v -0.843946 -0.471397 -0.256008 +v -0.820795 -0.514103 -0.248985 +v -0.795667 -0.555570 -0.241363 +v -0.768621 -0.595699 -0.233159 +v -0.739725 -0.634393 -0.224393 +v -0.709045 -0.671559 -0.215087 +v -0.676659 -0.707107 -0.205262 +v -0.642642 -0.740951 -0.194943 +v -0.607076 -0.773010 -0.184155 +v -0.570048 -0.803208 -0.172922 +v -0.531648 -0.831470 -0.161273 +v -0.491965 -0.857729 -0.149236 +v -0.451099 -0.881921 -0.136839 +v -0.409145 -0.903989 -0.124113 +v -0.366205 -0.923880 -0.111087 +v -0.322383 -0.941544 -0.097794 +v -0.277785 -0.956940 -0.084265 +v -0.232517 -0.970031 -0.070533 +v -0.186690 -0.980785 -0.056632 +v -0.140412 -0.989177 -0.042594 +v -0.093797 -0.995185 -0.028453 +v -0.046955 -0.998795 -0.014244 +v -0.045333 0.998795 -0.018777 +v -0.090556 0.995185 -0.037509 +v -0.135561 0.989177 -0.056151 +v -0.180240 0.980785 -0.074658 +v -0.224484 0.970031 -0.092984 +v -0.268188 0.956940 -0.111087 +v -0.311246 0.941544 -0.128922 +v -0.353553 0.923880 -0.146446 +v -0.395009 0.903989 -0.163618 +v -0.435514 0.881921 -0.180396 +v -0.474968 0.857729 -0.196738 +v -0.513280 0.831470 -0.212607 +v -0.550354 0.803208 -0.227964 +v -0.586103 0.773010 -0.242772 +v -0.620439 0.740951 -0.256994 +v -0.653282 0.707107 -0.270598 +v -0.684549 0.671559 -0.283549 +v -0.714168 0.634393 -0.295818 +v -0.742067 0.595699 -0.307374 +v -0.768178 0.555570 -0.318190 +v -0.792437 0.514103 -0.328238 +v -0.814788 0.471397 -0.337496 +v -0.835177 0.427555 -0.345942 +v -0.853553 0.382683 -0.353553 +v -0.869873 0.336890 -0.360313 +v -0.884097 0.290285 -0.366205 +v -0.896191 0.242980 -0.371215 +v -0.906127 0.195090 -0.375330 +v -0.913879 0.146730 -0.378541 +v -0.919430 0.098017 -0.380841 +v -0.922766 0.049068 -0.382222 +v -0.923879 -0.000000 -0.382684 +v -0.922766 -0.049068 -0.382222 +v -0.919430 -0.098017 -0.380841 +v -0.913879 -0.146730 -0.378541 +v -0.906127 -0.195090 -0.375330 +v -0.896191 -0.242980 -0.371215 +v -0.884098 -0.290285 -0.366205 +v -0.869873 -0.336890 -0.360313 +v -0.853553 -0.382683 -0.353553 +v -0.835177 -0.427555 -0.345942 +v -0.814789 -0.471397 -0.337497 +v -0.792437 -0.514103 -0.328238 +v -0.768178 -0.555570 -0.318190 +v -0.742067 -0.595699 -0.307374 +v -0.714168 -0.634393 -0.295818 +v -0.684549 -0.671559 -0.283549 +v -0.653282 -0.707107 -0.270598 +v -0.620439 -0.740951 -0.256994 +v -0.586103 -0.773010 -0.242772 +v -0.550354 -0.803208 -0.227964 +v -0.513280 -0.831470 -0.212607 +v -0.474968 -0.857729 -0.196738 +v -0.435514 -0.881921 -0.180396 +v -0.395009 -0.903989 -0.163618 +v -0.353553 -0.923880 -0.146446 +v -0.311245 -0.941544 -0.128922 +v -0.268188 -0.956940 -0.111087 +v -0.224484 -0.970031 -0.092984 +v -0.180240 -0.980785 -0.074658 +v -0.135561 -0.989177 -0.056151 +v -0.090556 -0.995185 -0.037509 +v -0.045333 -0.998795 -0.018777 +v -0.043274 0.998795 -0.023130 +v -0.086443 0.995185 -0.046205 +v -0.129405 0.989177 -0.069168 +v -0.172054 0.980785 -0.091965 +v -0.214289 0.970031 -0.114540 +v -0.256008 0.956940 -0.136839 +v -0.297110 0.941544 -0.158809 +v -0.337496 0.923880 -0.180395 +v -0.377070 0.903989 -0.201548 +v -0.415735 0.881921 -0.222215 +v -0.453398 0.857729 -0.242346 +v -0.489970 0.831470 -0.261894 +v -0.525360 0.803208 -0.280811 +v -0.559485 0.773010 -0.299051 +v -0.592262 0.740951 -0.316571 +v -0.623613 0.707107 -0.333328 +v -0.653460 0.671559 -0.349282 +v -0.681734 0.634393 -0.364394 +v -0.708365 0.595699 -0.378629 +v -0.733291 0.555570 -0.391952 +v -0.756449 0.514103 -0.404330 +v -0.777785 0.471397 -0.415735 +v -0.797247 0.427555 -0.426138 +v -0.814789 0.382683 -0.435513 +v -0.830368 0.336890 -0.443841 +v -0.843946 0.290285 -0.451099 +v -0.855490 0.242980 -0.457269 +v -0.864975 0.195090 -0.462339 +v -0.872375 0.146730 -0.466294 +v -0.877674 0.098017 -0.469127 +v -0.880859 0.049068 -0.470829 +v -0.881921 -0.000000 -0.471397 +v -0.880859 -0.049068 -0.470829 +v -0.877674 -0.098017 -0.469127 +v -0.872375 -0.146730 -0.466294 +v -0.864975 -0.195090 -0.462339 +v -0.855490 -0.242980 -0.457269 +v -0.843946 -0.290285 -0.451099 +v -0.830368 -0.336890 -0.443841 +v -0.814789 -0.382683 -0.435514 +v -0.797247 -0.427555 -0.426138 +v -0.777785 -0.471397 -0.415735 +v -0.756449 -0.514103 -0.404330 +v -0.733291 -0.555570 -0.391952 +v -0.708365 -0.595699 -0.378629 +v -0.681734 -0.634393 -0.364394 +v -0.653460 -0.671559 -0.349282 +v -0.623613 -0.707107 -0.333328 +v -0.592262 -0.740951 -0.316571 +v -0.559485 -0.773010 -0.299051 +v -0.525360 -0.803208 -0.280811 +v -0.489970 -0.831470 -0.261894 +v -0.453398 -0.857729 -0.242346 +v -0.415735 -0.881921 -0.222215 +v -0.377070 -0.903989 -0.201548 +v -0.337496 -0.923880 -0.180395 +v -0.297110 -0.941544 -0.158809 +v -0.256008 -0.956940 -0.136839 +v -0.214289 -0.970031 -0.114540 +v -0.172054 -0.980785 -0.091965 +v -0.129405 -0.989177 -0.069168 +v -0.086443 -0.995185 -0.046205 +v -0.043274 -0.998795 -0.023130 +v -0.040798 0.998795 -0.027260 +v -0.081498 0.995185 -0.054455 +v -0.122002 0.989177 -0.081519 +v -0.162212 0.980785 -0.108386 +v -0.202030 0.970031 -0.134992 +v -0.241363 0.956940 -0.161274 +v -0.280114 0.941544 -0.187166 +v -0.318189 0.923880 -0.212607 +v -0.355499 0.903989 -0.237537 +v -0.391952 0.881921 -0.261894 +v -0.427460 0.857729 -0.285620 +v -0.461940 0.831470 -0.308658 +v -0.495306 0.803208 -0.330953 +v -0.527479 0.773010 -0.352450 +v -0.558381 0.740951 -0.373098 +v -0.587938 0.707107 -0.392848 +v -0.616078 0.671559 -0.411650 +v -0.642734 0.634393 -0.429461 +v -0.667842 0.595699 -0.446238 +v -0.691342 0.555570 -0.461940 +v -0.713175 0.514103 -0.476528 +v -0.733290 0.471397 -0.489969 +v -0.751640 0.427555 -0.502230 +v -0.768177 0.382683 -0.513280 +v -0.782865 0.336890 -0.523094 +v -0.795667 0.290285 -0.531648 +v -0.806551 0.242980 -0.538920 +v -0.815493 0.195090 -0.544895 +v -0.822469 0.146730 -0.549557 +v -0.827466 0.098017 -0.552895 +v -0.830468 0.049068 -0.554901 +v -0.831469 -0.000000 -0.555570 +v -0.830468 -0.049068 -0.554901 +v -0.827466 -0.098017 -0.552895 +v -0.822469 -0.146730 -0.549557 +v -0.815493 -0.195090 -0.544895 +v -0.806551 -0.242980 -0.538920 +v -0.795667 -0.290285 -0.531648 +v -0.782865 -0.336890 -0.523094 +v -0.768178 -0.382683 -0.513280 +v -0.751640 -0.427555 -0.502230 +v -0.733290 -0.471397 -0.489969 +v -0.713175 -0.514103 -0.476528 +v -0.691342 -0.555570 -0.461940 +v -0.667842 -0.595699 -0.446238 +v -0.642734 -0.634393 -0.429461 +v -0.616078 -0.671559 -0.411650 +v -0.587938 -0.707107 -0.392848 +v -0.558381 -0.740951 -0.373098 +v -0.527479 -0.773010 -0.352450 +v -0.495306 -0.803208 -0.330953 +v -0.461940 -0.831470 -0.308658 +v -0.427460 -0.857729 -0.285620 +v -0.391952 -0.881921 -0.261894 +v -0.355499 -0.903989 -0.237537 +v -0.318189 -0.923880 -0.212607 +v -0.280114 -0.941544 -0.187166 +v -0.241363 -0.956940 -0.161274 +v -0.202030 -0.970031 -0.134992 +v -0.162212 -0.980785 -0.108386 +v -0.122002 -0.989177 -0.081519 +v -0.081498 -0.995185 -0.054455 +v -0.040798 -0.998795 -0.027261 +v -0.037930 0.998795 -0.031128 +v -0.075768 0.995185 -0.062181 +v -0.113424 0.989177 -0.093085 +v -0.150807 0.980785 -0.123764 +v -0.187826 0.970031 -0.154145 +v -0.224393 0.956940 -0.184155 +v -0.260419 0.941544 -0.213720 +v -0.295818 0.923880 -0.242772 +v -0.330505 0.903989 -0.271238 +v -0.364394 0.881921 -0.299051 +v -0.397406 0.857729 -0.326143 +v -0.429462 0.831470 -0.352450 +v -0.460481 0.803208 -0.377907 +v -0.490393 0.773010 -0.402455 +v -0.519122 0.740951 -0.426032 +v -0.546601 0.707107 -0.448584 +v -0.572763 0.671559 -0.470054 +v -0.597545 0.634393 -0.490392 +v -0.620887 0.595699 -0.509549 +v -0.642735 0.555570 -0.527479 +v -0.663033 0.514103 -0.544137 +v -0.681734 0.471397 -0.559485 +v -0.698793 0.427555 -0.573485 +v -0.714168 0.382683 -0.586103 +v -0.727823 0.336890 -0.597309 +v -0.739725 0.290285 -0.607077 +v -0.749844 0.242980 -0.615381 +v -0.758157 0.195090 -0.622204 +v -0.764643 0.146730 -0.627526 +v -0.769288 0.098017 -0.631338 +v -0.772079 0.049068 -0.633629 +v -0.773010 -0.000000 -0.634393 +v -0.772079 -0.049068 -0.633629 +v -0.769288 -0.098017 -0.631338 +v -0.764643 -0.146730 -0.627526 +v -0.758157 -0.195090 -0.622204 +v -0.749844 -0.242980 -0.615381 +v -0.739725 -0.290285 -0.607077 +v -0.727823 -0.336890 -0.597309 +v -0.714168 -0.382683 -0.586103 +v -0.698793 -0.427555 -0.573485 +v -0.681734 -0.471397 -0.559485 +v -0.663033 -0.514103 -0.544137 +v -0.642735 -0.555570 -0.527479 +v -0.620887 -0.595699 -0.509549 +v -0.597545 -0.634393 -0.490392 +v -0.572762 -0.671559 -0.470054 +v -0.546601 -0.707107 -0.448584 +v -0.519122 -0.740951 -0.426032 +v -0.490393 -0.773010 -0.402455 +v -0.460482 -0.803208 -0.377907 +v -0.429462 -0.831470 -0.352450 +v -0.397406 -0.857729 -0.326143 +v -0.364395 -0.881921 -0.299051 +v -0.330505 -0.903989 -0.271238 +v -0.295818 -0.923880 -0.242772 +v -0.260419 -0.941544 -0.213721 +v -0.224393 -0.956940 -0.184155 +v -0.187826 -0.970031 -0.154145 +v -0.150807 -0.980785 -0.123764 +v -0.113424 -0.989177 -0.093085 +v -0.075768 -0.995185 -0.062181 +v -0.037930 -0.998795 -0.031128 +v -0.034696 0.998795 -0.034696 +v -0.069309 0.995185 -0.069309 +v -0.103754 0.989177 -0.103754 +v -0.137950 0.980785 -0.137950 +v -0.171813 0.970031 -0.171813 +v -0.205262 0.956940 -0.205262 +v -0.238217 0.941544 -0.238217 +v -0.270598 0.923880 -0.270598 +v -0.302327 0.903989 -0.302327 +v -0.333328 0.881921 -0.333328 +v -0.363525 0.857729 -0.363525 +v -0.392848 0.831470 -0.392848 +v -0.421223 0.803208 -0.421223 +v -0.448584 0.773010 -0.448584 +v -0.474864 0.740951 -0.474864 +v -0.500000 0.707107 -0.500000 +v -0.523931 0.671559 -0.523931 +v -0.546601 0.634393 -0.546601 +v -0.567953 0.595699 -0.567953 +v -0.587938 0.555570 -0.587938 +v -0.606505 0.514103 -0.606505 +v -0.623612 0.471397 -0.623612 +v -0.639217 0.427555 -0.639217 +v -0.653281 0.382683 -0.653281 +v -0.665772 0.336890 -0.665772 +v -0.676659 0.290285 -0.676659 +v -0.685915 0.242980 -0.685915 +v -0.693520 0.195090 -0.693520 +v -0.699453 0.146730 -0.699453 +v -0.703702 0.098017 -0.703702 +v -0.706255 0.049068 -0.706255 +v -0.707106 -0.000000 -0.707107 +v -0.706255 -0.049068 -0.706255 +v -0.703702 -0.098017 -0.703702 +v -0.699453 -0.146730 -0.699453 +v -0.693520 -0.195090 -0.693520 +v -0.685915 -0.242980 -0.685915 +v -0.676659 -0.290285 -0.676659 +v -0.665772 -0.336890 -0.665772 +v -0.653281 -0.382683 -0.653281 +v -0.639217 -0.427555 -0.639217 +v -0.623612 -0.471397 -0.623612 +v -0.606505 -0.514103 -0.606505 +v -0.587938 -0.555570 -0.587938 +v -0.567953 -0.595699 -0.567953 +v -0.546601 -0.634393 -0.546601 +v -0.523931 -0.671559 -0.523931 +v -0.500000 -0.707107 -0.500000 +v -0.474864 -0.740951 -0.474864 +v -0.448584 -0.773010 -0.448584 +v -0.421223 -0.803208 -0.421223 +v -0.392848 -0.831470 -0.392848 +v -0.363525 -0.857729 -0.363525 +v -0.333328 -0.881921 -0.333328 +v -0.302327 -0.903989 -0.302327 +v -0.270598 -0.923880 -0.270598 +v -0.238217 -0.941544 -0.238217 +v -0.205262 -0.956940 -0.205262 +v -0.171813 -0.970031 -0.171813 +v -0.137950 -0.980785 -0.137950 +v -0.103754 -0.989177 -0.103754 +v -0.069309 -0.995185 -0.069309 +v -0.034696 -0.998795 -0.034696 +v -0.031128 0.998795 -0.037930 +v -0.062181 0.995185 -0.075768 +v -0.093085 0.989177 -0.113424 +v -0.123764 0.980785 -0.150807 +v -0.154145 0.970031 -0.187826 +v -0.184155 0.956940 -0.224393 +v -0.213721 0.941544 -0.260419 +v -0.242772 0.923880 -0.295818 +v -0.271238 0.903989 -0.330504 +v -0.299051 0.881921 -0.364394 +v -0.326143 0.857729 -0.397406 +v -0.352450 0.831470 -0.429462 +v -0.377907 0.803208 -0.460482 +v -0.402455 0.773010 -0.490393 +v -0.426032 0.740951 -0.519122 +v -0.448584 0.707107 -0.546601 +v -0.470054 0.671559 -0.572762 +v -0.490392 0.634393 -0.597545 +v -0.509549 0.595699 -0.620888 +v -0.527479 0.555570 -0.642735 +v -0.544137 0.514103 -0.663033 +v -0.559484 0.471397 -0.681734 +v -0.573485 0.427555 -0.698793 +v -0.586103 0.382683 -0.714168 +v -0.597309 0.336890 -0.727823 +v -0.607076 0.290285 -0.739725 +v -0.615381 0.242980 -0.749844 +v -0.622203 0.195090 -0.758157 +v -0.627526 0.146730 -0.764643 +v -0.631338 0.098017 -0.769288 +v -0.633629 0.049068 -0.772079 +v -0.634393 -0.000000 -0.773010 +v -0.633629 -0.049068 -0.772079 +v -0.631338 -0.098017 -0.769288 +v -0.627526 -0.146730 -0.764643 +v -0.622203 -0.195090 -0.758157 +v -0.615381 -0.242980 -0.749844 +v -0.607076 -0.290285 -0.739725 +v -0.597309 -0.336890 -0.727823 +v -0.586103 -0.382683 -0.714168 +v -0.573485 -0.427555 -0.698793 +v -0.559485 -0.471397 -0.681734 +v -0.544137 -0.514103 -0.663033 +v -0.527479 -0.555570 -0.642735 +v -0.509549 -0.595699 -0.620888 +v -0.490392 -0.634393 -0.597545 +v -0.470054 -0.671559 -0.572762 +v -0.448584 -0.707107 -0.546601 +v -0.426032 -0.740951 -0.519122 +v -0.402455 -0.773010 -0.490393 +v -0.377907 -0.803208 -0.460482 +v -0.352450 -0.831470 -0.429462 +v -0.326143 -0.857729 -0.397406 +v -0.299051 -0.881921 -0.364395 +v -0.271238 -0.903989 -0.330504 +v -0.242772 -0.923880 -0.295818 +v -0.213721 -0.941544 -0.260419 +v -0.184155 -0.956940 -0.224393 +v -0.154145 -0.970031 -0.187826 +v -0.123764 -0.980785 -0.150807 +v -0.093085 -0.989177 -0.113424 +v -0.062181 -0.995185 -0.075768 +v -0.031128 -0.998795 -0.037930 +v -0.027261 0.998795 -0.040798 +v -0.054455 0.995185 -0.081498 +v -0.081519 0.989177 -0.122002 +v -0.108386 0.980785 -0.162212 +v -0.134992 0.970031 -0.202030 +v -0.161274 0.956940 -0.241363 +v -0.187166 0.941544 -0.280113 +v -0.212607 0.923880 -0.318189 +v -0.237537 0.903989 -0.355499 +v -0.261894 0.881921 -0.391952 +v -0.285620 0.857729 -0.427460 +v -0.308659 0.831470 -0.461940 +v -0.330953 0.803208 -0.495306 +v -0.352450 0.773010 -0.527479 +v -0.373098 0.740951 -0.558381 +v -0.392847 0.707107 -0.587938 +v -0.411650 0.671559 -0.616078 +v -0.429461 0.634393 -0.642734 +v -0.446238 0.595699 -0.667843 +v -0.461940 0.555570 -0.691342 +v -0.476528 0.514103 -0.713175 +v -0.489969 0.471397 -0.733290 +v -0.502230 0.427555 -0.751640 +v -0.513280 0.382683 -0.768177 +v -0.523094 0.336890 -0.782865 +v -0.531647 0.290285 -0.795667 +v -0.538920 0.242980 -0.806551 +v -0.544895 0.195090 -0.815493 +v -0.549556 0.146730 -0.822469 +v -0.552895 0.098017 -0.827466 +v -0.554901 0.049068 -0.830468 +v -0.555570 -0.000000 -0.831469 +v -0.554901 -0.049068 -0.830468 +v -0.552895 -0.098017 -0.827466 +v -0.549556 -0.146730 -0.822469 +v -0.544895 -0.195090 -0.815493 +v -0.538920 -0.242980 -0.806551 +v -0.531647 -0.290285 -0.795667 +v -0.523094 -0.336890 -0.782865 +v -0.513280 -0.382683 -0.768178 +v -0.502230 -0.427555 -0.751640 +v -0.489969 -0.471397 -0.733290 +v -0.476528 -0.514103 -0.713175 +v -0.461940 -0.555570 -0.691342 +v -0.446238 -0.595699 -0.667843 +v -0.429461 -0.634393 -0.642734 +v -0.411650 -0.671559 -0.616078 +v -0.392847 -0.707107 -0.587938 +v -0.373098 -0.740951 -0.558381 +v -0.352450 -0.773010 -0.527479 +v -0.330953 -0.803208 -0.495306 +v -0.308659 -0.831470 -0.461940 +v -0.285620 -0.857729 -0.427460 +v -0.261894 -0.881921 -0.391952 +v -0.237537 -0.903989 -0.355499 +v -0.212607 -0.923880 -0.318189 +v -0.187166 -0.941544 -0.280114 +v -0.161274 -0.956940 -0.241363 +v -0.134992 -0.970031 -0.202030 +v -0.108386 -0.980785 -0.162212 +v -0.081519 -0.989177 -0.122002 +v -0.054455 -0.995185 -0.081498 +v -0.027261 -0.998795 -0.040798 +v -0.023130 0.998795 -0.043274 +v -0.046205 0.995185 -0.086443 +v -0.069168 0.989177 -0.129405 +v -0.091965 0.980785 -0.172054 +v -0.114540 0.970031 -0.214289 +v -0.136839 0.956940 -0.256008 +v -0.158809 0.941544 -0.297110 +v -0.180395 0.923880 -0.337496 +v -0.201548 0.903989 -0.377070 +v -0.222215 0.881921 -0.415734 +v -0.242346 0.857729 -0.453398 +v -0.261894 0.831470 -0.489969 +v -0.280810 0.803208 -0.525360 +v -0.299051 0.773010 -0.559485 +v -0.316571 0.740951 -0.592262 +v -0.333328 0.707107 -0.623613 +v -0.349282 0.671559 -0.653460 +v -0.364394 0.634393 -0.681734 +v -0.378629 0.595699 -0.708366 +v -0.391952 0.555570 -0.733291 +v -0.404330 0.514103 -0.756449 +v -0.415734 0.471397 -0.777785 +v -0.426138 0.427555 -0.797247 +v -0.435514 0.382683 -0.814788 +v -0.443841 0.336890 -0.830367 +v -0.451098 0.290285 -0.843946 +v -0.457269 0.242980 -0.855491 +v -0.462339 0.195090 -0.864975 +v -0.466294 0.146730 -0.872375 +v -0.469127 0.098017 -0.877674 +v -0.470829 0.049068 -0.880858 +v -0.471396 -0.000000 -0.881921 +v -0.470829 -0.049068 -0.880858 +v -0.469127 -0.098017 -0.877674 +v -0.466294 -0.146730 -0.872375 +v -0.462339 -0.195090 -0.864975 +v -0.457269 -0.242980 -0.855491 +v -0.451098 -0.290285 -0.843946 +v -0.443841 -0.336890 -0.830367 +v -0.435514 -0.382683 -0.814789 +v -0.426138 -0.427555 -0.797247 +v -0.415735 -0.471397 -0.777785 +v -0.404330 -0.514103 -0.756449 +v -0.391952 -0.555570 -0.733291 +v -0.378629 -0.595699 -0.708366 +v -0.364394 -0.634393 -0.681734 +v -0.349282 -0.671559 -0.653460 +v -0.333328 -0.707107 -0.623613 +v -0.316571 -0.740951 -0.592262 +v -0.299051 -0.773010 -0.559485 +v -0.280811 -0.803208 -0.525360 +v -0.261894 -0.831470 -0.489969 +v -0.242346 -0.857729 -0.453398 +v -0.222215 -0.881921 -0.415735 +v -0.201548 -0.903989 -0.377070 +v -0.180396 -0.923880 -0.337496 +v -0.158809 -0.941544 -0.297110 +v -0.136839 -0.956940 -0.256008 +v -0.114540 -0.970031 -0.214289 +v -0.091965 -0.980785 -0.172054 +v -0.069168 -0.989177 -0.129405 +v -0.046205 -0.995185 -0.086443 +v -0.023130 -0.998795 -0.043274 +v -0.018777 0.998795 -0.045333 +v -0.037510 0.995185 -0.090556 +v -0.056151 0.989177 -0.135561 +v -0.074658 0.980785 -0.180240 +v -0.092984 0.970031 -0.224484 +v -0.111087 0.956940 -0.268188 +v -0.128922 0.941544 -0.311245 +v -0.146446 0.923880 -0.353553 +v -0.163618 0.903989 -0.395009 +v -0.180396 0.881921 -0.435513 +v -0.196738 0.857729 -0.474968 +v -0.212608 0.831470 -0.513280 +v -0.227964 0.803208 -0.550354 +v -0.242772 0.773010 -0.586103 +v -0.256994 0.740951 -0.620439 +v -0.270598 0.707107 -0.653282 +v -0.283549 0.671559 -0.684549 +v -0.295818 0.634393 -0.714168 +v -0.307374 0.595699 -0.742067 +v -0.318190 0.555570 -0.768178 +v -0.328238 0.514103 -0.792437 +v -0.337496 0.471397 -0.814788 +v -0.345942 0.427555 -0.835177 +v -0.353553 0.382683 -0.853553 +v -0.360313 0.336890 -0.869873 +v -0.366205 0.290285 -0.884098 +v -0.371214 0.242980 -0.896191 +v -0.375330 0.195090 -0.906127 +v -0.378541 0.146730 -0.913879 +v -0.380840 0.098017 -0.919431 +v -0.382222 0.049068 -0.922766 +v -0.382683 -0.000000 -0.923879 +v -0.382222 -0.049068 -0.922766 +v -0.380840 -0.098017 -0.919431 +v -0.378541 -0.146730 -0.913879 +v -0.375330 -0.195090 -0.906127 +v -0.371214 -0.242980 -0.896191 +v -0.366205 -0.290285 -0.884098 +v -0.360313 -0.336890 -0.869873 +v -0.353553 -0.382683 -0.853553 +v -0.345942 -0.427555 -0.835177 +v -0.337496 -0.471397 -0.814789 +v -0.328238 -0.514103 -0.792437 +v -0.318190 -0.555570 -0.768178 +v -0.307374 -0.595699 -0.742067 +v -0.295818 -0.634393 -0.714168 +v -0.283549 -0.671559 -0.684549 +v -0.270598 -0.707107 -0.653282 +v -0.256994 -0.740951 -0.620439 +v -0.242772 -0.773010 -0.586103 +v -0.227964 -0.803208 -0.550354 +v -0.212608 -0.831470 -0.513280 +v -0.196738 -0.857729 -0.474968 +v -0.180396 -0.881921 -0.435514 +v -0.163618 -0.903989 -0.395009 +v -0.146446 -0.923880 -0.353553 +v -0.128922 -0.941544 -0.311245 +v -0.111087 -0.956940 -0.268188 +v -0.092984 -0.970031 -0.224484 +v -0.074658 -0.980785 -0.180240 +v -0.056151 -0.989177 -0.135561 +v -0.037510 -0.995185 -0.090556 +v -0.018777 -0.998795 -0.045333 +v 0.000000 -1.000000 0.000000 +v -0.014244 0.998795 -0.046955 +v -0.028453 0.995185 -0.093796 +v -0.042594 0.989177 -0.140412 +v -0.056632 0.980785 -0.186690 +v -0.070533 0.970031 -0.232517 +v -0.084265 0.956940 -0.277785 +v -0.097794 0.941544 -0.322383 +v -0.111087 0.923880 -0.366205 +v -0.124113 0.903989 -0.409145 +v -0.136839 0.881921 -0.451098 +v -0.149236 0.857729 -0.491965 +v -0.161274 0.831470 -0.531648 +v -0.172922 0.803208 -0.570048 +v -0.184155 0.773010 -0.607076 +v -0.194943 0.740951 -0.642642 +v -0.205262 0.707107 -0.676659 +v -0.215087 0.671559 -0.709045 +v -0.224393 0.634393 -0.739724 +v -0.233158 0.595699 -0.768621 +v -0.241363 0.555570 -0.795667 +v -0.248985 0.514103 -0.820795 +v -0.256008 0.471397 -0.843946 +v -0.262414 0.427555 -0.865064 +v -0.268188 0.382683 -0.884097 +v -0.273316 0.336890 -0.901001 +v -0.277785 0.290285 -0.915735 +v -0.281585 0.242980 -0.928261 +v -0.284707 0.195090 -0.938553 +v -0.287142 0.146730 -0.946582 +v -0.288887 0.098017 -0.952332 +v -0.289935 0.049068 -0.955787 +v -0.290284 -0.000000 -0.956940 +v -0.289935 -0.049068 -0.955787 +v -0.288887 -0.098017 -0.952332 +v -0.287142 -0.146730 -0.946582 +v -0.284707 -0.195090 -0.938553 +v -0.281585 -0.242980 -0.928261 +v -0.277785 -0.290285 -0.915735 +v -0.273316 -0.336890 -0.901001 +v -0.268188 -0.382683 -0.884097 +v -0.262414 -0.427555 -0.865064 +v -0.256008 -0.471397 -0.843946 +v -0.248985 -0.514103 -0.820795 +v -0.241363 -0.555570 -0.795667 +v -0.233158 -0.595699 -0.768621 +v -0.224393 -0.634393 -0.739724 +v -0.215086 -0.671559 -0.709045 +v -0.205262 -0.707107 -0.676659 +v -0.194943 -0.740951 -0.642642 +v -0.184155 -0.773010 -0.607076 +v -0.172922 -0.803208 -0.570048 +v -0.161274 -0.831470 -0.531648 +v -0.149236 -0.857729 -0.491965 +v -0.136839 -0.881921 -0.451098 +v -0.124113 -0.903989 -0.409144 +v -0.111087 -0.923880 -0.366205 +v -0.097794 -0.941544 -0.322383 +v -0.084265 -0.956940 -0.277785 +v -0.070533 -0.970031 -0.232517 +v -0.056632 -0.980785 -0.186690 +v -0.042594 -0.989177 -0.140412 +v -0.028453 -0.995185 -0.093796 +v -0.014244 -0.998795 -0.046955 +v -0.009573 0.998795 -0.048125 +v -0.019122 0.995185 -0.096134 +v -0.028626 0.989177 -0.143911 +v -0.038060 0.980785 -0.191342 +v -0.047403 0.970031 -0.238311 +v -0.056632 0.956940 -0.284707 +v -0.065724 0.941544 -0.330416 +v -0.074658 0.923880 -0.375330 +v -0.083412 0.903989 -0.419340 +v -0.091965 0.881921 -0.462339 +v -0.100296 0.857729 -0.504224 +v -0.108387 0.831470 -0.544895 +v -0.116215 0.803208 -0.584253 +v -0.123764 0.773010 -0.622204 +v -0.131015 0.740951 -0.658655 +v -0.137950 0.707107 -0.693520 +v -0.144552 0.671559 -0.726713 +v -0.150807 0.634393 -0.758157 +v -0.156698 0.595699 -0.787774 +v -0.162212 0.555570 -0.815493 +v -0.167334 0.514103 -0.841247 +v -0.172054 0.471397 -0.864975 +v -0.176360 0.427555 -0.886619 +v -0.180240 0.382683 -0.906127 +v -0.183686 0.336890 -0.923452 +v -0.186690 0.290285 -0.938553 +v -0.189243 0.242980 -0.951391 +v -0.191342 0.195090 -0.961940 +v -0.192978 0.146730 -0.970169 +v -0.194151 0.098017 -0.976062 +v -0.194855 0.049068 -0.979603 +v -0.195090 -0.000000 -0.980785 +v -0.194855 -0.049068 -0.979603 +v -0.194151 -0.098017 -0.976062 +v -0.192978 -0.146730 -0.970169 +v -0.191342 -0.195090 -0.961940 +v -0.189243 -0.242980 -0.951391 +v -0.186690 -0.290285 -0.938553 +v -0.183686 -0.336890 -0.923452 +v -0.180240 -0.382683 -0.906127 +v -0.176360 -0.427555 -0.886619 +v -0.172054 -0.471397 -0.864975 +v -0.167334 -0.514103 -0.841247 +v -0.162212 -0.555570 -0.815493 +v -0.156698 -0.595699 -0.787774 +v -0.150807 -0.634393 -0.758157 +v -0.144552 -0.671559 -0.726713 +v -0.137950 -0.707107 -0.693520 +v -0.131015 -0.740951 -0.658655 +v -0.123764 -0.773010 -0.622204 +v -0.116215 -0.803208 -0.584253 +v -0.108387 -0.831470 -0.544895 +v -0.100296 -0.857729 -0.504224 +v -0.091965 -0.881921 -0.462339 +v -0.083412 -0.903989 -0.419340 +v -0.074658 -0.923880 -0.375330 +v -0.065724 -0.941544 -0.330416 +v -0.056632 -0.956940 -0.284707 +v -0.047403 -0.970031 -0.238311 +v -0.038060 -0.980785 -0.191342 +v -0.028626 -0.989177 -0.143911 +v -0.019122 -0.995185 -0.096134 +v -0.009573 -0.998795 -0.048125 +v -0.004809 0.998795 -0.048831 +v -0.009607 0.995185 -0.097545 +v -0.014382 0.989177 -0.146024 +v -0.019122 0.980785 -0.194151 +v -0.023816 0.970031 -0.241810 +v -0.028453 0.956940 -0.288887 +v -0.033021 0.941544 -0.335267 +v -0.037509 0.923880 -0.380840 +v -0.041908 0.903989 -0.425496 +v -0.046205 0.881921 -0.469126 +v -0.050391 0.857729 -0.511627 +v -0.054456 0.831470 -0.552895 +v -0.058389 0.803208 -0.592830 +v -0.062181 0.773010 -0.631338 +v -0.065824 0.740951 -0.668325 +v -0.069308 0.707107 -0.703702 +v -0.072626 0.671559 -0.737383 +v -0.075768 0.634393 -0.769288 +v -0.078728 0.595699 -0.799339 +v -0.081498 0.555570 -0.827466 +v -0.084072 0.514103 -0.853598 +v -0.086443 0.471397 -0.877674 +v -0.088606 0.427555 -0.899636 +v -0.090556 0.382683 -0.919430 +v -0.092288 0.336890 -0.937010 +v -0.093796 0.290285 -0.952332 +v -0.095079 0.242980 -0.965359 +v -0.096134 0.195090 -0.976062 +v -0.096956 0.146730 -0.984412 +v -0.097545 0.098017 -0.990392 +v -0.097899 0.049068 -0.993985 +v -0.098017 -0.000000 -0.995184 +v -0.097899 -0.049068 -0.993985 +v -0.097545 -0.098017 -0.990392 +v -0.096956 -0.146730 -0.984412 +v -0.096134 -0.195090 -0.976062 +v -0.095079 -0.242980 -0.965359 +v -0.093796 -0.290285 -0.952332 +v -0.092288 -0.336890 -0.937010 +v -0.090556 -0.382683 -0.919430 +v -0.088606 -0.427555 -0.899636 +v -0.086443 -0.471397 -0.877674 +v -0.084072 -0.514103 -0.853598 +v -0.081498 -0.555570 -0.827466 +v -0.078728 -0.595699 -0.799339 +v -0.075768 -0.634393 -0.769288 +v -0.072626 -0.671559 -0.737383 +v -0.069308 -0.707107 -0.703702 +v -0.065824 -0.740951 -0.668325 +v -0.062181 -0.773010 -0.631338 +v -0.058389 -0.803208 -0.592831 +v -0.054456 -0.831470 -0.552895 +v -0.050391 -0.857729 -0.511627 +v -0.046205 -0.881921 -0.469127 +v -0.041908 -0.903989 -0.425496 +v -0.037509 -0.923880 -0.380840 +v -0.033021 -0.941544 -0.335267 +v -0.028453 -0.956940 -0.288887 +v -0.023816 -0.970031 -0.241810 +v -0.019122 -0.980785 -0.194151 +v -0.014382 -0.989177 -0.146024 +v -0.009607 -0.995185 -0.097545 +v -0.004809 -0.998795 -0.048831 +v 0.000000 0.998795 -0.049068 +v 0.000000 0.995185 -0.098017 +v -0.000000 0.980785 -0.195090 +v 0.000000 0.970031 -0.242980 +v -0.000000 0.903989 -0.427555 +v -0.000000 0.831470 -0.555570 +v 0.000000 0.803208 -0.595699 +v 0.000000 0.773010 -0.634393 +v 0.000000 0.671559 -0.740950 +v 0.000000 0.634393 -0.773010 +v -0.000000 0.555570 -0.831470 +v 0.000000 0.471397 -0.881921 +v 0.000000 0.427555 -0.903989 +v -0.000000 0.382683 -0.923879 +v -0.000000 0.336890 -0.941544 +v -0.000000 0.049068 -0.998795 +v -0.000000 -0.049068 -0.998795 +v 0.000000 -0.146730 -0.989175 +v 0.000000 -0.195090 -0.980785 +v -0.000000 -0.336890 -0.941544 +v 0.000000 -0.514103 -0.857728 +v -0.000000 -0.555570 -0.831470 +v -0.000000 -0.634393 -0.773010 +v -0.000000 -0.831470 -0.555570 +v -0.000000 -0.903989 -0.427555 +v -0.000000 -0.980785 -0.195090 +v 0.000000 -0.998795 -0.049068 +vn 0.0036 0.9973 -0.0736 +vn 0.0221 -0.8930 -0.4495 +vn 0.0483 0.1708 -0.9841 +vn 0.0060 0.9925 -0.1224 +vn 0.0199 -0.9140 -0.4052 +vn 0.0487 0.1223 -0.9913 +vn 0.0084 0.9852 -0.1710 +vn 0.0177 -0.9328 -0.3598 +vn 0.0489 0.0735 -0.9961 +vn 0.0108 0.9756 -0.2191 +vn 0.0154 -0.9494 -0.3136 +vn 0.0491 0.0245 -0.9985 +vn 0.0131 0.9637 -0.2667 +vn 0.0131 -0.9637 -0.2667 +vn 0.0491 -0.0245 -0.9985 +vn 0.0154 0.9494 -0.3136 +vn 0.0108 -0.9756 -0.2191 +vn 0.0489 -0.0735 -0.9961 +vn 0.0177 0.9328 -0.3598 +vn 0.0084 -0.9852 -0.1710 +vn 0.0487 -0.1223 -0.9913 +vn 0.0199 0.9140 -0.4052 +vn 0.0060 -0.9925 -0.1224 +vn 0.0483 -0.1708 -0.9841 +vn 0.0221 0.8930 -0.4495 +vn 0.0036 -0.9973 -0.0736 +vn 0.0479 -0.2188 -0.9746 +vn 0.0242 0.8698 -0.4928 +vn 0.0012 -0.9997 -0.0245 +vn 0.0473 -0.2664 -0.9627 +vn 0.0263 0.8446 -0.5348 +vn 0.0466 -0.3133 -0.9485 +vn 0.0283 0.8173 -0.5756 +vn 0.0458 -0.3595 -0.9320 +vn 0.0302 0.7880 -0.6149 +vn 0.0449 -0.4048 -0.9133 +vn 0.0321 0.7568 -0.6528 +vn 0.0438 -0.4492 -0.8924 +vn 0.0339 0.7238 -0.6891 +vn 0.0427 -0.4925 -0.8693 +vn 0.0356 0.6891 -0.7238 +vn 0.0415 -0.5345 -0.8441 +vn 0.0372 0.6527 -0.7567 +vn 0.0401 -0.5753 -0.8169 +vn 0.0387 0.6148 -0.7878 +vn 0.0387 -0.6148 -0.7878 +vn 0.0401 0.5753 -0.8169 +vn 0.0372 -0.6527 -0.7567 +vn 0.0415 0.5345 -0.8441 +vn 0.0356 -0.6891 -0.7238 +vn 0.0427 0.4924 -0.8693 +vn 0.0339 -0.7238 -0.6891 +vn 0.0438 0.4492 -0.8924 +vn 0.0321 -0.7568 -0.6528 +vn 0.0449 0.4048 -0.9133 +vn 0.0302 -0.7880 -0.6150 +vn 0.0458 0.3595 -0.9320 +vn 0.0283 -0.8173 -0.5756 +vn 0.0466 0.3133 -0.9485 +vn 0.0263 -0.8446 -0.5348 +vn 0.0473 0.2664 -0.9627 +vn 0.0012 0.9997 -0.0245 +vn 0.0242 -0.8698 -0.4928 +vn 0.0479 0.2188 -0.9746 +vn 0.1277 -0.4924 -0.8609 +vn 0.1063 0.6891 -0.7168 +vn 0.1240 -0.5345 -0.8360 +vn 0.1112 0.6527 -0.7494 +vn 0.1200 -0.5753 -0.8091 +vn 0.1157 0.6148 -0.7802 +vn 0.1157 -0.6148 -0.7802 +vn 0.1200 0.5753 -0.8091 +vn 0.1112 -0.6527 -0.7494 +vn 0.1240 0.5345 -0.8360 +vn 0.1063 -0.6891 -0.7168 +vn 0.1277 0.4924 -0.8609 +vn 0.1012 -0.7238 -0.6825 +vn 0.1311 0.4492 -0.8838 +vn 0.0959 -0.7568 -0.6465 +vn 0.1342 0.4048 -0.9045 +vn 0.0903 -0.7880 -0.6090 +vn 0.1369 0.3595 -0.9230 +vn 0.0846 -0.8173 -0.5700 +vn 0.1393 0.3133 -0.9394 +vn 0.0786 -0.8446 -0.5297 +vn 0.1414 0.2664 -0.9534 +vn 0.0036 0.9997 -0.0243 +vn 0.0724 -0.8698 -0.4880 +vn 0.1432 0.2188 -0.9652 +vn 0.0108 0.9973 -0.0729 +vn 0.0660 -0.8930 -0.4452 +vn 0.1446 0.1708 -0.9746 +vn 0.0180 0.9925 -0.1212 +vn 0.0595 -0.9140 -0.4013 +vn 0.1456 0.1223 -0.9818 +vn 0.0251 0.9852 -0.1693 +vn 0.0529 -0.9328 -0.3564 +vn 0.1463 0.0735 -0.9865 +vn 0.0322 0.9756 -0.2170 +vn 0.0461 -0.9494 -0.3106 +vn 0.1467 0.0245 -0.9889 +vn 0.0392 0.9637 -0.2641 +vn 0.0392 -0.9637 -0.2641 +vn 0.1467 -0.0245 -0.9889 +vn 0.0461 0.9494 -0.3106 +vn 0.0322 -0.9756 -0.2170 +vn 0.1463 -0.0735 -0.9865 +vn 0.0529 0.9328 -0.3564 +vn 0.0251 -0.9852 -0.1693 +vn 0.1456 -0.1223 -0.9818 +vn 0.0595 0.9140 -0.4013 +vn 0.0180 -0.9925 -0.1212 +vn 0.1446 -0.1708 -0.9746 +vn 0.0660 0.8930 -0.4452 +vn 0.0108 -0.9973 -0.0729 +vn 0.1432 -0.2188 -0.9652 +vn 0.0724 0.8698 -0.4880 +vn 0.0036 -0.9997 -0.0243 +vn 0.1414 -0.2664 -0.9534 +vn 0.0786 0.8446 -0.5297 +vn 0.1393 -0.3133 -0.9394 +vn 0.0846 0.8173 -0.5700 +vn 0.1369 -0.3595 -0.9230 +vn 0.0903 0.7880 -0.6090 +vn 0.1342 -0.4048 -0.9045 +vn 0.0959 0.7568 -0.6465 +vn 0.1311 -0.4492 -0.8838 +vn 0.1012 0.7238 -0.6825 +vn 0.1987 -0.5753 -0.7934 +vn 0.1916 0.6148 -0.7651 +vn 0.1916 -0.6148 -0.7651 +vn 0.1987 0.5753 -0.7934 +vn 0.1841 -0.6527 -0.7349 +vn 0.2054 0.5345 -0.8198 +vn 0.1761 -0.6891 -0.7029 +vn 0.2115 0.4924 -0.8443 +vn 0.1677 -0.7238 -0.6693 +vn 0.2171 0.4492 -0.8667 +vn 0.1588 -0.7568 -0.6340 +vn 0.2222 0.4048 -0.8870 +vn 0.1496 -0.7880 -0.5972 +vn 0.2267 0.3595 -0.9052 +vn 0.1400 -0.8173 -0.5590 +vn 0.2307 0.3133 -0.9212 +vn 0.1301 -0.8446 -0.5194 +vn 0.2342 0.2664 -0.9350 +vn 0.0060 0.9997 -0.0238 +vn 0.1199 -0.8698 -0.4786 +vn 0.2371 0.2189 -0.9465 +vn 0.0179 0.9973 -0.0714 +vn 0.1094 -0.8930 -0.4366 +vn 0.2394 0.1708 -0.9558 +vn 0.0298 0.9925 -0.1189 +vn 0.0986 -0.9140 -0.3935 +vn 0.2412 0.1223 -0.9628 +vn 0.0416 0.9852 -0.1660 +vn 0.0875 -0.9328 -0.3495 +vn 0.2423 0.0735 -0.9674 +vn 0.0533 0.9756 -0.2128 +vn 0.0763 -0.9494 -0.3046 +vn 0.2429 0.0245 -0.9697 +vn 0.0649 0.9637 -0.2590 +vn 0.0649 -0.9637 -0.2590 +vn 0.2429 -0.0245 -0.9697 +vn 0.0763 0.9494 -0.3046 +vn 0.0533 -0.9756 -0.2128 +vn 0.2423 -0.0735 -0.9674 +vn 0.0875 0.9328 -0.3495 +vn 0.0416 -0.9852 -0.1660 +vn 0.2412 -0.1223 -0.9628 +vn 0.0986 0.9140 -0.3935 +vn 0.0298 -0.9925 -0.1189 +vn 0.2394 -0.1708 -0.9558 +vn 0.1093 0.8930 -0.4366 +vn 0.0179 -0.9973 -0.0714 +vn 0.2371 -0.2189 -0.9465 +vn 0.1199 0.8698 -0.4786 +vn 0.0060 -0.9997 -0.0238 +vn 0.2342 -0.2664 -0.9350 +vn 0.1301 0.8446 -0.5194 +vn 0.2307 -0.3133 -0.9212 +vn 0.1400 0.8173 -0.5590 +vn 0.2267 -0.3595 -0.9052 +vn 0.1496 0.7880 -0.5972 +vn 0.2222 -0.4048 -0.8870 +vn 0.1588 0.7568 -0.6340 +vn 0.2171 -0.4492 -0.8667 +vn 0.1677 0.7238 -0.6693 +vn 0.2115 -0.4924 -0.8443 +vn 0.1761 0.6891 -0.7029 +vn 0.2054 -0.5345 -0.8198 +vn 0.1841 0.6527 -0.7349 +vn 0.2552 -0.6527 -0.7133 +vn 0.2847 0.5345 -0.7957 +vn 0.2441 -0.6891 -0.6823 +vn 0.2932 0.4924 -0.8195 +vn 0.2324 -0.7238 -0.6496 +vn 0.3010 0.4492 -0.8412 +vn 0.2202 -0.7568 -0.6154 +vn 0.3080 0.4048 -0.8609 +vn 0.2074 -0.7880 -0.5797 +vn 0.3144 0.3595 -0.8786 +vn 0.1941 -0.8173 -0.5426 +vn 0.3199 0.3133 -0.8941 +vn 0.1804 -0.8446 -0.5042 +vn 0.3247 0.2664 -0.9075 +vn 0.0083 0.9997 -0.0231 +vn 0.1662 -0.8698 -0.4645 +vn 0.3287 0.2188 -0.9187 +vn 0.0248 0.9973 -0.0693 +vn 0.1516 -0.8930 -0.4237 +vn 0.3319 0.1708 -0.9277 +vn 0.0413 0.9925 -0.1154 +vn 0.1367 -0.9140 -0.3819 +vn 0.3344 0.1223 -0.9345 +vn 0.0577 0.9852 -0.1612 +vn 0.1214 -0.9328 -0.3392 +vn 0.3360 0.0735 -0.9390 +vn 0.0739 0.9756 -0.2065 +vn 0.1058 -0.9494 -0.2957 +vn 0.3368 0.0245 -0.9413 +vn 0.0900 0.9637 -0.2514 +vn 0.0900 -0.9637 -0.2514 +vn 0.3368 -0.0245 -0.9413 +vn 0.1058 0.9494 -0.2957 +vn 0.0739 -0.9756 -0.2065 +vn 0.3360 -0.0735 -0.9390 +vn 0.1214 0.9328 -0.3392 +vn 0.0577 -0.9852 -0.1612 +vn 0.3344 -0.1223 -0.9345 +vn 0.1367 0.9140 -0.3819 +vn 0.0413 -0.9925 -0.1154 +vn 0.3319 -0.1708 -0.9277 +vn 0.1516 0.8930 -0.4237 +vn 0.0248 -0.9973 -0.0693 +vn 0.3287 -0.2188 -0.9187 +vn 0.1662 0.8698 -0.4645 +vn 0.0083 -0.9997 -0.0231 +vn 0.3247 -0.2664 -0.9075 +vn 0.1804 0.8446 -0.5042 +vn 0.3199 -0.3133 -0.8941 +vn 0.1941 0.8173 -0.5426 +vn 0.3144 -0.3595 -0.8786 +vn 0.2074 0.7880 -0.5797 +vn 0.3080 -0.4048 -0.8609 +vn 0.2202 0.7568 -0.6154 +vn 0.3010 -0.4492 -0.8412 +vn 0.2324 0.7238 -0.6496 +vn 0.2932 -0.4924 -0.8195 +vn 0.2441 0.6891 -0.6823 +vn 0.2847 -0.5345 -0.7957 +vn 0.2552 0.6527 -0.7133 +vn 0.2755 -0.5753 -0.7701 +vn 0.2657 0.6148 -0.7426 +vn 0.2657 -0.6148 -0.7426 +vn 0.2755 0.5753 -0.7701 +vn 0.2950 -0.7238 -0.6237 +vn 0.3820 0.4492 -0.8077 +vn 0.2795 -0.7568 -0.5909 +vn 0.3910 0.4048 -0.8266 +vn 0.2632 -0.7880 -0.5566 +vn 0.3990 0.3595 -0.8435 +vn 0.2464 -0.8173 -0.5209 +vn 0.4060 0.3133 -0.8585 +vn 0.2289 -0.8446 -0.4840 +vn 0.4121 0.2664 -0.8713 +vn 0.0105 0.9997 -0.0222 +vn 0.2109 -0.8698 -0.4460 +vn 0.4172 0.2188 -0.8821 +vn 0.0315 0.9973 -0.0666 +vn 0.1924 -0.8930 -0.4068 +vn 0.4213 0.1708 -0.8907 +vn 0.0524 0.9925 -0.1108 +vn 0.1734 -0.9140 -0.3667 +vn 0.4243 0.1223 -0.8972 +vn 0.0732 0.9852 -0.1547 +vn 0.1540 -0.9328 -0.3257 +vn 0.4264 0.0735 -0.9015 +vn 0.0938 0.9756 -0.1983 +vn 0.1343 -0.9494 -0.2839 +vn 0.4274 0.0245 -0.9037 +vn 0.1142 0.9637 -0.2414 +vn 0.1142 -0.9637 -0.2414 +vn 0.4274 -0.0245 -0.9037 +vn 0.1343 0.9494 -0.2839 +vn 0.0938 -0.9756 -0.1983 +vn 0.4264 -0.0735 -0.9015 +vn 0.1540 0.9328 -0.3257 +vn 0.0732 -0.9852 -0.1547 +vn 0.4243 -0.1223 -0.8972 +vn 0.1734 0.9140 -0.3667 +vn 0.0524 -0.9925 -0.1108 +vn 0.4213 -0.1708 -0.8907 +vn 0.1924 0.8930 -0.4068 +vn 0.0315 -0.9973 -0.0666 +vn 0.4172 -0.2188 -0.8821 +vn 0.2109 0.8698 -0.4460 +vn 0.0105 -0.9997 -0.0222 +vn 0.4121 -0.2664 -0.8713 +vn 0.2289 0.8446 -0.4840 +vn 0.4060 -0.3133 -0.8585 +vn 0.2464 0.8173 -0.5209 +vn 0.3990 -0.3595 -0.8435 +vn 0.2632 0.7880 -0.5566 +vn 0.3910 -0.4048 -0.8266 +vn 0.2795 0.7568 -0.5909 +vn 0.3820 -0.4492 -0.8077 +vn 0.2950 0.7238 -0.6237 +vn 0.3721 -0.4924 -0.7868 +vn 0.3098 0.6891 -0.6551 +vn 0.3613 -0.5345 -0.7640 +vn 0.3239 0.6527 -0.6849 +vn 0.3497 -0.5753 -0.7394 +vn 0.3372 0.6148 -0.7130 +vn 0.3372 -0.6148 -0.7130 +vn 0.3497 0.5753 -0.7394 +vn 0.3239 -0.6527 -0.6849 +vn 0.3613 0.5345 -0.7640 +vn 0.3098 -0.6891 -0.6551 +vn 0.3721 0.4924 -0.7868 +vn 0.3165 -0.7880 -0.5281 +vn 0.4797 0.3595 -0.8004 +vn 0.2963 -0.8173 -0.4943 +vn 0.4882 0.3133 -0.8145 +vn 0.2753 -0.8446 -0.4593 +vn 0.4955 0.2664 -0.8267 +vn 0.0126 0.9997 -0.0211 +vn 0.2536 -0.8698 -0.4232 +vn 0.5016 0.2188 -0.8369 +vn 0.0379 0.9973 -0.0632 +vn 0.2314 -0.8930 -0.3860 +vn 0.5066 0.1708 -0.8451 +vn 0.0630 0.9925 -0.1051 +vn 0.2085 -0.9140 -0.3479 +vn 0.5102 0.1223 -0.8513 +vn 0.0880 0.9852 -0.1468 +vn 0.1852 -0.9328 -0.3090 +vn 0.5127 0.0735 -0.8554 +vn 0.1128 0.9756 -0.1881 +vn 0.1614 -0.9494 -0.2693 +vn 0.5139 0.0245 -0.8575 +vn 0.1373 0.9637 -0.2290 +vn 0.1373 -0.9637 -0.2290 +vn 0.5139 -0.0245 -0.8575 +vn 0.1614 0.9494 -0.2693 +vn 0.1128 -0.9756 -0.1881 +vn 0.5127 -0.0735 -0.8554 +vn 0.1852 0.9328 -0.3090 +vn 0.0880 -0.9852 -0.1468 +vn 0.5102 -0.1223 -0.8513 +vn 0.2085 0.9140 -0.3479 +vn 0.0630 -0.9925 -0.1051 +vn 0.5066 -0.1708 -0.8451 +vn 0.2314 0.8930 -0.3860 +vn 0.0379 -0.9973 -0.0632 +vn 0.5016 -0.2188 -0.8369 +vn 0.2536 0.8698 -0.4232 +vn 0.0126 -0.9997 -0.0211 +vn 0.4955 -0.2664 -0.8267 +vn 0.2753 0.8446 -0.4593 +vn 0.4882 -0.3133 -0.8145 +vn 0.2963 0.8173 -0.4943 +vn 0.4797 -0.3595 -0.8004 +vn 0.3165 0.7880 -0.5281 +vn 0.4701 -0.4048 -0.7843 +vn 0.3360 0.7568 -0.5606 +vn 0.4593 -0.4492 -0.7663 +vn 0.3547 0.7238 -0.5918 +vn 0.4474 -0.4924 -0.7465 +vn 0.3726 0.6891 -0.6216 +vn 0.4345 -0.5345 -0.7249 +vn 0.3895 0.6527 -0.6498 +vn 0.4205 -0.5753 -0.7015 +vn 0.4055 0.6148 -0.6765 +vn 0.4055 -0.6148 -0.6765 +vn 0.4205 0.5753 -0.7015 +vn 0.3895 -0.6527 -0.6498 +vn 0.4345 0.5345 -0.7249 +vn 0.3726 -0.6891 -0.6216 +vn 0.4474 0.4924 -0.7465 +vn 0.3547 -0.7238 -0.5918 +vn 0.4593 0.4492 -0.7663 +vn 0.3360 -0.7568 -0.5606 +vn 0.4701 0.4048 -0.7843 +vn 0.3190 -0.8446 -0.4301 +vn 0.5742 0.2664 -0.7742 +vn 0.0146 0.9997 -0.0197 +vn 0.2939 -0.8698 -0.3963 +vn 0.5813 0.2188 -0.7837 +vn 0.0439 0.9973 -0.0592 +vn 0.2681 -0.8930 -0.3615 +vn 0.5869 0.1708 -0.7914 +vn 0.0730 0.9925 -0.0984 +vn 0.2416 -0.9140 -0.3258 +vn 0.5912 0.1223 -0.7972 +vn 0.1020 0.9852 -0.1375 +vn 0.2146 -0.9328 -0.2894 +vn 0.5941 0.0735 -0.8010 +vn 0.1307 0.9756 -0.1762 +vn 0.1871 -0.9494 -0.2522 +vn 0.5955 0.0245 -0.8030 +vn 0.1591 0.9637 -0.2145 +vn 0.1591 -0.9637 -0.2145 +vn 0.5955 -0.0245 -0.8030 +vn 0.1871 0.9494 -0.2522 +vn 0.1307 -0.9756 -0.1762 +vn 0.5941 -0.0735 -0.8010 +vn 0.2146 0.9328 -0.2894 +vn 0.1020 -0.9852 -0.1375 +vn 0.5912 -0.1223 -0.7972 +vn 0.2416 0.9140 -0.3258 +vn 0.0730 -0.9925 -0.0984 +vn 0.5869 -0.1708 -0.7914 +vn 0.2681 0.8930 -0.3615 +vn 0.0439 -0.9973 -0.0592 +vn 0.5813 -0.2188 -0.7837 +vn 0.2939 0.8698 -0.3963 +vn 0.0146 -0.9997 -0.0197 +vn 0.5742 -0.2664 -0.7742 +vn 0.3190 0.8446 -0.4301 +vn 0.5657 -0.3133 -0.7628 +vn 0.3433 0.8173 -0.4629 +vn 0.5559 -0.3595 -0.7495 +vn 0.3668 0.7880 -0.4945 +vn 0.5447 -0.4048 -0.7344 +vn 0.3894 0.7568 -0.5250 +vn 0.5322 -0.4492 -0.7176 +vn 0.4110 0.7238 -0.5542 +vn 0.5185 -0.4924 -0.6991 +vn 0.4317 0.6891 -0.5821 +vn 0.5035 -0.5345 -0.6788 +vn 0.4513 0.6527 -0.6085 +vn 0.4872 -0.5753 -0.6570 +vn 0.4698 0.6148 -0.6335 +vn 0.4698 -0.6148 -0.6335 +vn 0.4872 0.5753 -0.6570 +vn 0.4513 -0.6527 -0.6085 +vn 0.5035 0.5345 -0.6788 +vn 0.4317 -0.6891 -0.5821 +vn 0.5185 0.4924 -0.6991 +vn 0.4110 -0.7238 -0.5542 +vn 0.5322 0.4492 -0.7176 +vn 0.3894 -0.7568 -0.5250 +vn 0.5447 0.4048 -0.7344 +vn 0.3668 -0.7880 -0.4945 +vn 0.5559 0.3595 -0.7495 +vn 0.3433 -0.8173 -0.4629 +vn 0.5657 0.3133 -0.7628 +vn 0.3022 -0.8930 -0.3335 +vn 0.6617 0.1708 -0.7301 +vn 0.0823 0.9925 -0.0908 +vn 0.2724 -0.9140 -0.3006 +vn 0.6665 0.1223 -0.7354 +vn 0.1149 0.9852 -0.1268 +vn 0.2419 -0.9328 -0.2669 +vn 0.6697 0.0735 -0.7389 +vn 0.1473 0.9756 -0.1625 +vn 0.2109 -0.9494 -0.2327 +vn 0.6714 0.0245 -0.7407 +vn 0.1793 0.9637 -0.1978 +vn 0.1793 -0.9637 -0.1978 +vn 0.6714 -0.0245 -0.7407 +vn 0.2109 0.9494 -0.2327 +vn 0.1473 -0.9756 -0.1625 +vn 0.6697 -0.0735 -0.7389 +vn 0.2419 0.9328 -0.2669 +vn 0.1149 -0.9852 -0.1268 +vn 0.6665 -0.1223 -0.7354 +vn 0.2724 0.9140 -0.3006 +vn 0.0823 -0.9925 -0.0908 +vn 0.6617 -0.1708 -0.7301 +vn 0.3022 0.8930 -0.3335 +vn 0.0495 -0.9973 -0.0546 +vn 0.6553 -0.2188 -0.7230 +vn 0.3313 0.8698 -0.3655 +vn 0.0165 -0.9997 -0.0182 +vn 0.6473 -0.2664 -0.7142 +vn 0.3596 0.8446 -0.3967 +vn 0.6377 -0.3133 -0.7036 +vn 0.3870 0.8173 -0.4270 +vn 0.6267 -0.3595 -0.6914 +vn 0.4135 0.7880 -0.4562 +vn 0.6141 -0.4048 -0.6775 +vn 0.4389 0.7568 -0.4843 +vn 0.6000 -0.4492 -0.6620 +vn 0.4634 0.7238 -0.5112 +vn 0.5845 -0.4924 -0.6449 +vn 0.4867 0.6891 -0.5369 +vn 0.5676 -0.5345 -0.6262 +vn 0.5088 0.6527 -0.5613 +vn 0.5493 -0.5753 -0.6060 +vn 0.5297 0.6148 -0.5844 +vn 0.5297 -0.6148 -0.5844 +vn 0.5493 0.5753 -0.6060 +vn 0.5088 -0.6527 -0.5613 +vn 0.5676 0.5345 -0.6262 +vn 0.4867 -0.6891 -0.5369 +vn 0.5845 0.4924 -0.6449 +vn 0.4634 -0.7238 -0.5112 +vn 0.6000 0.4492 -0.6620 +vn 0.4389 -0.7568 -0.4843 +vn 0.6141 0.4048 -0.6775 +vn 0.4135 -0.7880 -0.4562 +vn 0.6267 0.3595 -0.6914 +vn 0.3870 -0.8173 -0.4270 +vn 0.6377 0.3133 -0.7036 +vn 0.3596 -0.8446 -0.3967 +vn 0.6473 0.2664 -0.7142 +vn 0.0165 0.9997 -0.0182 +vn 0.3313 -0.8698 -0.3655 +vn 0.6553 0.2188 -0.7230 +vn 0.0495 0.9973 -0.0546 +vn 0.2669 -0.9328 -0.2419 +vn 0.7389 0.0735 -0.6697 +vn 0.1625 0.9756 -0.1473 +vn 0.2327 -0.9494 -0.2109 +vn 0.7407 0.0245 -0.6714 +vn 0.1978 0.9637 -0.1793 +vn 0.1978 -0.9637 -0.1793 +vn 0.7407 -0.0245 -0.6714 +vn 0.2327 0.9494 -0.2109 +vn 0.1625 -0.9756 -0.1473 +vn 0.7389 -0.0735 -0.6697 +vn 0.2669 0.9328 -0.2419 +vn 0.1268 -0.9852 -0.1149 +vn 0.7354 -0.1223 -0.6665 +vn 0.3006 0.9140 -0.2724 +vn 0.0908 -0.9925 -0.0823 +vn 0.7301 -0.1708 -0.6617 +vn 0.3335 0.8930 -0.3022 +vn 0.0546 -0.9973 -0.0495 +vn 0.7230 -0.2188 -0.6553 +vn 0.3655 0.8698 -0.3313 +vn 0.0182 -0.9997 -0.0165 +vn 0.7142 -0.2664 -0.6473 +vn 0.3967 0.8446 -0.3596 +vn 0.7036 -0.3133 -0.6377 +vn 0.4270 0.8173 -0.3870 +vn 0.6914 -0.3595 -0.6267 +vn 0.4562 0.7880 -0.4135 +vn 0.6775 -0.4048 -0.6141 +vn 0.4843 0.7568 -0.4389 +vn 0.6620 -0.4492 -0.6000 +vn 0.5112 0.7238 -0.4634 +vn 0.6449 -0.4924 -0.5845 +vn 0.5369 0.6891 -0.4867 +vn 0.6262 -0.5345 -0.5676 +vn 0.5613 0.6527 -0.5088 +vn 0.6060 -0.5753 -0.5493 +vn 0.5844 0.6148 -0.5297 +vn 0.5844 -0.6148 -0.5297 +vn 0.6060 0.5753 -0.5493 +vn 0.5613 -0.6527 -0.5088 +vn 0.6262 0.5345 -0.5676 +vn 0.5369 -0.6891 -0.4867 +vn 0.6449 0.4924 -0.5845 +vn 0.5112 -0.7238 -0.4634 +vn 0.6620 0.4492 -0.6000 +vn 0.4843 -0.7568 -0.4389 +vn 0.6775 0.4048 -0.6141 +vn 0.4562 -0.7880 -0.4135 +vn 0.6914 0.3595 -0.6267 +vn 0.4270 -0.8173 -0.3870 +vn 0.7036 0.3133 -0.6377 +vn 0.3967 -0.8446 -0.3596 +vn 0.7142 0.2664 -0.6473 +vn 0.0182 0.9997 -0.0165 +vn 0.3655 -0.8698 -0.3313 +vn 0.7230 0.2188 -0.6553 +vn 0.0546 0.9973 -0.0495 +vn 0.3335 -0.8930 -0.3022 +vn 0.7301 0.1708 -0.6617 +vn 0.0908 0.9925 -0.0823 +vn 0.3006 -0.9140 -0.2724 +vn 0.7354 0.1223 -0.6665 +vn 0.1268 0.9852 -0.1149 +vn 0.2145 -0.9637 -0.1591 +vn 0.8030 -0.0245 -0.5955 +vn 0.2522 0.9494 -0.1871 +vn 0.1762 -0.9756 -0.1307 +vn 0.8010 -0.0735 -0.5941 +vn 0.2894 0.9328 -0.2146 +vn 0.1375 -0.9852 -0.1020 +vn 0.7972 -0.1223 -0.5912 +vn 0.3258 0.9140 -0.2416 +vn 0.0984 -0.9925 -0.0730 +vn 0.7914 -0.1708 -0.5870 +vn 0.3615 0.8930 -0.2681 +vn 0.0592 -0.9973 -0.0439 +vn 0.7837 -0.2189 -0.5813 +vn 0.3963 0.8698 -0.2939 +vn 0.0197 -0.9997 -0.0146 +vn 0.7742 -0.2664 -0.5742 +vn 0.4301 0.8446 -0.3190 +vn 0.7628 -0.3133 -0.5657 +vn 0.4629 0.8173 -0.3433 +vn 0.7495 -0.3595 -0.5559 +vn 0.4945 0.7880 -0.3668 +vn 0.7344 -0.4048 -0.5447 +vn 0.5250 0.7568 -0.3894 +vn 0.7176 -0.4492 -0.5322 +vn 0.5542 0.7238 -0.4110 +vn 0.6991 -0.4924 -0.5185 +vn 0.5821 0.6891 -0.4317 +vn 0.6788 -0.5345 -0.5035 +vn 0.6085 0.6527 -0.4513 +vn 0.6570 -0.5753 -0.4872 +vn 0.6335 0.6148 -0.4698 +vn 0.6335 -0.6148 -0.4698 +vn 0.6570 0.5753 -0.4872 +vn 0.6085 -0.6527 -0.4513 +vn 0.6788 0.5345 -0.5035 +vn 0.5821 -0.6891 -0.4317 +vn 0.6991 0.4924 -0.5185 +vn 0.5542 -0.7238 -0.4110 +vn 0.7176 0.4492 -0.5322 +vn 0.5250 -0.7568 -0.3894 +vn 0.7344 0.4048 -0.5447 +vn 0.4945 -0.7880 -0.3668 +vn 0.7495 0.3595 -0.5559 +vn 0.4629 -0.8173 -0.3433 +vn 0.7628 0.3133 -0.5657 +vn 0.4301 -0.8446 -0.3190 +vn 0.7742 0.2664 -0.5742 +vn 0.0197 0.9997 -0.0146 +vn 0.3963 -0.8698 -0.2939 +vn 0.7837 0.2189 -0.5813 +vn 0.0592 0.9973 -0.0439 +vn 0.3615 -0.8930 -0.2681 +vn 0.7914 0.1708 -0.5869 +vn 0.0984 0.9925 -0.0730 +vn 0.3258 -0.9140 -0.2416 +vn 0.7972 0.1223 -0.5912 +vn 0.1375 0.9852 -0.1020 +vn 0.2894 -0.9328 -0.2146 +vn 0.8010 0.0735 -0.5941 +vn 0.1762 0.9756 -0.1307 +vn 0.2522 -0.9494 -0.1871 +vn 0.8030 0.0245 -0.5955 +vn 0.2145 0.9637 -0.1591 +vn 0.1468 -0.9852 -0.0880 +vn 0.8513 -0.1223 -0.5102 +vn 0.3479 0.9140 -0.2085 +vn 0.1051 -0.9925 -0.0630 +vn 0.8451 -0.1708 -0.5066 +vn 0.3860 0.8930 -0.2314 +vn 0.0632 -0.9973 -0.0379 +vn 0.8369 -0.2189 -0.5016 +vn 0.4232 0.8698 -0.2536 +vn 0.0211 -0.9997 -0.0126 +vn 0.8267 -0.2664 -0.4955 +vn 0.4593 0.8446 -0.2753 +vn 0.8145 -0.3133 -0.4882 +vn 0.4943 0.8173 -0.2963 +vn 0.8004 -0.3595 -0.4797 +vn 0.5281 0.7880 -0.3165 +vn 0.7843 -0.4048 -0.4701 +vn 0.5606 0.7568 -0.3360 +vn 0.7663 -0.4492 -0.4593 +vn 0.5918 0.7238 -0.3547 +vn 0.7465 -0.4924 -0.4474 +vn 0.6216 0.6891 -0.3726 +vn 0.7249 -0.5345 -0.4345 +vn 0.6498 0.6527 -0.3895 +vn 0.7015 -0.5753 -0.4205 +vn 0.6765 0.6148 -0.4055 +vn 0.6765 -0.6148 -0.4055 +vn 0.7015 0.5753 -0.4205 +vn 0.6498 -0.6527 -0.3895 +vn 0.7249 0.5345 -0.4345 +vn 0.6216 -0.6891 -0.3726 +vn 0.7465 0.4924 -0.4474 +vn 0.5918 -0.7238 -0.3547 +vn 0.7663 0.4492 -0.4593 +vn 0.5606 -0.7568 -0.3360 +vn 0.7843 0.4048 -0.4701 +vn 0.5281 -0.7880 -0.3165 +vn 0.8004 0.3595 -0.4797 +vn 0.4943 -0.8173 -0.2963 +vn 0.8145 0.3133 -0.4882 +vn 0.4593 -0.8446 -0.2753 +vn 0.8267 0.2664 -0.4955 +vn 0.0211 0.9997 -0.0126 +vn 0.4232 -0.8698 -0.2536 +vn 0.8369 0.2189 -0.5016 +vn 0.0632 0.9973 -0.0379 +vn 0.3860 -0.8930 -0.2314 +vn 0.8451 0.1708 -0.5066 +vn 0.1051 0.9925 -0.0630 +vn 0.3479 -0.9140 -0.2085 +vn 0.8513 0.1223 -0.5102 +vn 0.1468 0.9852 -0.0880 +vn 0.3090 -0.9328 -0.1852 +vn 0.8554 0.0735 -0.5127 +vn 0.1881 0.9756 -0.1128 +vn 0.2693 -0.9494 -0.1614 +vn 0.8575 0.0245 -0.5139 +vn 0.2290 0.9637 -0.1373 +vn 0.2290 -0.9637 -0.1373 +vn 0.8575 -0.0245 -0.5139 +vn 0.2693 0.9494 -0.1614 +vn 0.1881 -0.9756 -0.1128 +vn 0.8554 -0.0735 -0.5127 +vn 0.3090 0.9328 -0.1852 +vn 0.0666 -0.9973 -0.0315 +vn 0.8821 -0.2189 -0.4172 +vn 0.4460 0.8698 -0.2109 +vn 0.0222 -0.9997 -0.0105 +vn 0.8713 -0.2664 -0.4121 +vn 0.4840 0.8446 -0.2289 +vn 0.8585 -0.3133 -0.4060 +vn 0.5209 0.8173 -0.2464 +vn 0.8435 -0.3595 -0.3990 +vn 0.5566 0.7880 -0.2632 +vn 0.8266 -0.4048 -0.3910 +vn 0.5909 0.7568 -0.2795 +vn 0.8077 -0.4492 -0.3820 +vn 0.6237 0.7238 -0.2950 +vn 0.7868 -0.4924 -0.3721 +vn 0.6551 0.6891 -0.3098 +vn 0.7640 -0.5345 -0.3613 +vn 0.6849 0.6527 -0.3239 +vn 0.7394 -0.5753 -0.3497 +vn 0.7130 0.6148 -0.3372 +vn 0.7130 -0.6148 -0.3372 +vn 0.7394 0.5753 -0.3497 +vn 0.6849 -0.6527 -0.3239 +vn 0.7640 0.5345 -0.3613 +vn 0.6551 -0.6891 -0.3098 +vn 0.7868 0.4924 -0.3721 +vn 0.6237 -0.7238 -0.2950 +vn 0.8077 0.4492 -0.3820 +vn 0.5909 -0.7568 -0.2795 +vn 0.8266 0.4048 -0.3910 +vn 0.5566 -0.7880 -0.2632 +vn 0.8435 0.3595 -0.3990 +vn 0.5209 -0.8173 -0.2464 +vn 0.8585 0.3133 -0.4060 +vn 0.4840 -0.8446 -0.2289 +vn 0.8713 0.2664 -0.4121 +vn 0.0222 0.9997 -0.0105 +vn 0.4460 -0.8698 -0.2109 +vn 0.8821 0.2189 -0.4172 +vn 0.0666 0.9973 -0.0315 +vn 0.4068 -0.8930 -0.1924 +vn 0.8907 0.1708 -0.4213 +vn 0.1108 0.9925 -0.0524 +vn 0.3667 -0.9140 -0.1734 +vn 0.8972 0.1223 -0.4243 +vn 0.1547 0.9852 -0.0732 +vn 0.3257 -0.9328 -0.1540 +vn 0.9015 0.0735 -0.4264 +vn 0.1983 0.9756 -0.0938 +vn 0.2839 -0.9494 -0.1343 +vn 0.9037 0.0245 -0.4274 +vn 0.2414 0.9637 -0.1142 +vn 0.2414 -0.9637 -0.1142 +vn 0.9037 -0.0245 -0.4274 +vn 0.2839 0.9494 -0.1343 +vn 0.1983 -0.9756 -0.0938 +vn 0.9015 -0.0735 -0.4264 +vn 0.3257 0.9328 -0.1540 +vn 0.1547 -0.9852 -0.0732 +vn 0.8972 -0.1223 -0.4243 +vn 0.3667 0.9140 -0.1734 +vn 0.1108 -0.9925 -0.0524 +vn 0.8907 -0.1708 -0.4213 +vn 0.4068 0.8930 -0.1924 +vn 0.8941 -0.3133 -0.3199 +vn 0.5426 0.8173 -0.1941 +vn 0.8786 -0.3595 -0.3144 +vn 0.5797 0.7880 -0.2074 +vn 0.8609 -0.4048 -0.3080 +vn 0.6154 0.7568 -0.2202 +vn 0.8412 -0.4492 -0.3010 +vn 0.6496 0.7238 -0.2324 +vn 0.8195 -0.4924 -0.2932 +vn 0.6823 0.6891 -0.2441 +vn 0.7957 -0.5345 -0.2847 +vn 0.7133 0.6527 -0.2552 +vn 0.7701 -0.5753 -0.2755 +vn 0.7426 0.6148 -0.2657 +vn 0.7426 -0.6148 -0.2657 +vn 0.7701 0.5753 -0.2755 +vn 0.7133 -0.6527 -0.2552 +vn 0.7957 0.5345 -0.2847 +vn 0.6823 -0.6891 -0.2441 +vn 0.8195 0.4924 -0.2932 +vn 0.6496 -0.7238 -0.2324 +vn 0.8412 0.4492 -0.3010 +vn 0.6154 -0.7568 -0.2202 +vn 0.8609 0.4048 -0.3080 +vn 0.5797 -0.7880 -0.2074 +vn 0.8786 0.3595 -0.3144 +vn 0.5426 -0.8173 -0.1941 +vn 0.8941 0.3133 -0.3199 +vn 0.5042 -0.8446 -0.1804 +vn 0.9075 0.2664 -0.3247 +vn 0.0231 0.9997 -0.0083 +vn 0.4645 -0.8698 -0.1662 +vn 0.9187 0.2189 -0.3287 +vn 0.0693 0.9973 -0.0248 +vn 0.4237 -0.8930 -0.1516 +vn 0.9277 0.1708 -0.3319 +vn 0.1154 0.9925 -0.0413 +vn 0.3819 -0.9140 -0.1367 +vn 0.9345 0.1223 -0.3344 +vn 0.1612 0.9852 -0.0577 +vn 0.3392 -0.9328 -0.1214 +vn 0.9390 0.0735 -0.3360 +vn 0.2065 0.9756 -0.0739 +vn 0.2957 -0.9494 -0.1058 +vn 0.9413 0.0245 -0.3368 +vn 0.2514 0.9637 -0.0900 +vn 0.2514 -0.9637 -0.0900 +vn 0.9413 -0.0245 -0.3368 +vn 0.2957 0.9494 -0.1058 +vn 0.2065 -0.9756 -0.0739 +vn 0.9390 -0.0735 -0.3360 +vn 0.3392 0.9328 -0.1214 +vn 0.1612 -0.9852 -0.0577 +vn 0.9345 -0.1223 -0.3344 +vn 0.3819 0.9140 -0.1367 +vn 0.1154 -0.9925 -0.0413 +vn 0.9277 -0.1708 -0.3319 +vn 0.4237 0.8930 -0.1516 +vn 0.0693 -0.9973 -0.0248 +vn 0.9187 -0.2189 -0.3287 +vn 0.4645 0.8698 -0.1662 +vn 0.0231 -0.9997 -0.0083 +vn 0.9075 -0.2664 -0.3247 +vn 0.5042 0.8446 -0.1804 +vn 0.0714 -0.9973 -0.0179 +vn 0.9465 -0.2189 -0.2371 +vn 0.6340 0.7568 -0.1588 +vn 0.0238 -0.9997 -0.0060 +vn 0.9350 -0.2664 -0.2342 +vn 0.6693 0.7238 -0.1677 +vn 0.9212 -0.3133 -0.2307 +vn 0.7029 0.6891 -0.1761 +vn 0.9052 -0.3595 -0.2267 +vn 0.7349 0.6527 -0.1841 +vn 0.8870 -0.4048 -0.2222 +vn 0.7651 0.6148 -0.1916 +vn 0.8667 -0.4492 -0.2171 +vn 0.7934 0.5753 -0.1987 +vn 0.8443 -0.4924 -0.2115 +vn 0.8198 0.5345 -0.2054 +vn 0.8198 -0.5345 -0.2054 +vn 0.8443 0.4924 -0.2115 +vn 0.7934 -0.5753 -0.1987 +vn 0.8667 0.4492 -0.2171 +vn 0.7651 -0.6148 -0.1916 +vn 0.8870 0.4048 -0.2222 +vn 0.7349 -0.6527 -0.1841 +vn 0.9052 0.3595 -0.2267 +vn 0.7029 -0.6891 -0.1761 +vn 0.9212 0.3133 -0.2307 +vn 0.6693 -0.7238 -0.1677 +vn 0.0238 0.9997 -0.0060 +vn 0.6340 -0.7568 -0.1588 +vn 0.0714 0.9973 -0.0179 +vn 0.5972 -0.7880 -0.1496 +vn 0.1189 0.9925 -0.0298 +vn 0.5590 -0.8173 -0.1400 +vn 0.1660 0.9852 -0.0416 +vn 0.5194 -0.8446 -0.1301 +vn 0.9350 0.2664 -0.2342 +vn 0.2128 0.9756 -0.0533 +vn 0.4786 -0.8698 -0.1199 +vn 0.9465 0.2189 -0.2371 +vn 0.2590 0.9637 -0.0649 +vn 0.4366 -0.8930 -0.1094 +vn 0.9558 0.1708 -0.2394 +vn 0.3046 0.9494 -0.0763 +vn 0.3935 -0.9140 -0.0986 +vn 0.9628 0.1223 -0.2412 +vn 0.3495 0.9328 -0.0875 +vn 0.3495 -0.9328 -0.0875 +vn 0.9674 0.0735 -0.2423 +vn 0.3935 0.9140 -0.0986 +vn 0.3046 -0.9494 -0.0763 +vn 0.9697 0.0245 -0.2429 +vn 0.4366 0.8930 -0.1094 +vn 0.2590 -0.9637 -0.0649 +vn 0.9697 -0.0245 -0.2429 +vn 0.4786 0.8698 -0.1199 +vn 0.2128 -0.9756 -0.0533 +vn 0.9674 -0.0735 -0.2423 +vn 0.5194 0.8446 -0.1301 +vn 0.1660 -0.9852 -0.0416 +vn 0.9628 -0.1223 -0.2412 +vn 0.5590 0.8173 -0.1400 +vn 0.1189 -0.9925 -0.0298 +vn 0.9558 -0.1708 -0.2394 +vn 0.5972 0.7880 -0.1496 +vn 0.9394 -0.3133 -0.1393 +vn 0.5700 0.8173 -0.0846 +vn 0.9230 -0.3595 -0.1369 +vn 0.6090 0.7880 -0.0903 +vn 0.9045 -0.4048 -0.1342 +vn 0.6466 0.7568 -0.0959 +vn 0.8838 -0.4492 -0.1311 +vn 0.6825 0.7238 -0.1012 +vn 0.8609 -0.4924 -0.1277 +vn 0.7168 0.6891 -0.1063 +vn 0.8360 -0.5345 -0.1240 +vn 0.7494 0.6527 -0.1112 +vn 0.8091 -0.5753 -0.1200 +vn 0.7802 0.6148 -0.1157 +vn 0.7802 -0.6148 -0.1157 +vn 0.8091 0.5753 -0.1200 +vn 0.7494 -0.6527 -0.1112 +vn 0.8360 0.5345 -0.1240 +vn 0.7168 -0.6891 -0.1063 +vn 0.8609 0.4924 -0.1277 +vn 0.6825 -0.7238 -0.1012 +vn 0.8838 0.4492 -0.1311 +vn 0.6466 -0.7568 -0.0959 +vn 0.9045 0.4048 -0.1342 +vn 0.6090 -0.7880 -0.0903 +vn 0.9230 0.3595 -0.1369 +vn 0.5700 -0.8173 -0.0846 +vn 0.9394 0.3133 -0.1393 +vn 0.5297 -0.8446 -0.0786 +vn 0.9534 0.2664 -0.1414 +vn 0.0243 0.9997 -0.0036 +vn 0.4880 -0.8698 -0.0724 +vn 0.9652 0.2189 -0.1432 +vn 0.0729 0.9973 -0.0108 +vn 0.4452 -0.8930 -0.0660 +vn 0.9746 0.1708 -0.1446 +vn 0.1212 0.9925 -0.0180 +vn 0.4013 -0.9140 -0.0595 +vn 0.9818 0.1223 -0.1456 +vn 0.1693 0.9852 -0.0251 +vn 0.3564 -0.9328 -0.0529 +vn 0.9865 0.0735 -0.1463 +vn 0.2170 0.9756 -0.0322 +vn 0.3106 -0.9494 -0.0461 +vn 0.9889 0.0245 -0.1467 +vn 0.2641 0.9637 -0.0392 +vn 0.2641 -0.9637 -0.0392 +vn 0.9889 -0.0245 -0.1467 +vn 0.3106 0.9494 -0.0461 +vn 0.2170 -0.9756 -0.0322 +vn 0.9865 -0.0735 -0.1463 +vn 0.3564 0.9328 -0.0529 +vn 0.1693 -0.9852 -0.0251 +vn 0.9818 -0.1223 -0.1456 +vn 0.4013 0.9140 -0.0595 +vn 0.1212 -0.9925 -0.0180 +vn 0.9746 -0.1708 -0.1446 +vn 0.4452 0.8930 -0.0660 +vn 0.0729 -0.9973 -0.0108 +vn 0.9652 -0.2189 -0.1432 +vn 0.4880 0.8698 -0.0724 +vn 0.0243 -0.9997 -0.0036 +vn 0.9534 -0.2664 -0.1414 +vn 0.5297 0.8446 -0.0786 +vn 0.9133 -0.4048 -0.0449 +vn 0.6528 0.7568 -0.0321 +vn 0.8924 -0.4492 -0.0438 +vn 0.6891 0.7238 -0.0339 +vn 0.8693 -0.4924 -0.0427 +vn 0.7238 0.6891 -0.0356 +vn 0.8441 -0.5345 -0.0415 +vn 0.7567 0.6527 -0.0372 +vn 0.8169 -0.5753 -0.0401 +vn 0.7878 0.6148 -0.0387 +vn 0.7878 -0.6148 -0.0387 +vn 0.8169 0.5753 -0.0401 +vn 0.7567 -0.6527 -0.0372 +vn 0.8441 0.5345 -0.0415 +vn 0.7238 -0.6891 -0.0356 +vn 0.8693 0.4924 -0.0427 +vn 0.6891 -0.7238 -0.0339 +vn 0.8924 0.4492 -0.0438 +vn 0.6528 -0.7568 -0.0321 +vn 0.9133 0.4048 -0.0449 +vn 0.6150 -0.7880 -0.0302 +vn 0.9320 0.3595 -0.0458 +vn 0.5756 -0.8173 -0.0283 +vn 0.9485 0.3133 -0.0466 +vn 0.5348 -0.8446 -0.0263 +vn 0.9627 0.2664 -0.0473 +vn 0.0245 0.9997 -0.0012 +vn 0.4928 -0.8698 -0.0242 +vn 0.9746 0.2189 -0.0479 +vn 0.0736 0.9973 -0.0036 +vn 0.4495 -0.8930 -0.0221 +vn 0.9841 0.1708 -0.0483 +vn 0.1224 0.9925 -0.0060 +vn 0.4052 -0.9140 -0.0199 +vn 0.9913 0.1223 -0.0487 +vn 0.1710 0.9852 -0.0084 +vn 0.3598 -0.9328 -0.0177 +vn 0.9961 0.0735 -0.0489 +vn 0.2191 0.9756 -0.0108 +vn 0.3136 -0.9494 -0.0154 +vn 0.9985 0.0245 -0.0491 +vn 0.2667 0.9637 -0.0131 +vn 0.2667 -0.9637 -0.0131 +vn 0.9985 -0.0245 -0.0491 +vn 0.3136 0.9494 -0.0154 +vn 0.2191 -0.9756 -0.0108 +vn 0.9961 -0.0735 -0.0489 +vn 0.3598 0.9328 -0.0177 +vn 0.1710 -0.9852 -0.0084 +vn 0.9913 -0.1223 -0.0487 +vn 0.4052 0.9140 -0.0199 +vn 0.1224 -0.9925 -0.0060 +vn 0.9841 -0.1708 -0.0483 +vn 0.4495 0.8930 -0.0221 +vn 0.0736 -0.9973 -0.0036 +vn 0.9746 -0.2189 -0.0479 +vn 0.4928 0.8698 -0.0242 +vn 0.0245 -0.9997 -0.0012 +vn 0.9627 -0.2664 -0.0473 +vn 0.5348 0.8446 -0.0263 +vn 0.9485 -0.3133 -0.0466 +vn 0.5756 0.8173 -0.0283 +vn 0.9320 -0.3595 -0.0458 +vn 0.6149 0.7880 -0.0302 +vn 0.8693 -0.4924 0.0427 +vn 0.7238 0.6891 0.0356 +vn 0.8441 -0.5345 0.0415 +vn 0.7567 0.6527 0.0372 +vn 0.8169 -0.5753 0.0401 +vn 0.7878 0.6148 0.0387 +vn 0.7878 -0.6148 0.0387 +vn 0.8169 0.5753 0.0401 +vn 0.7567 -0.6527 0.0372 +vn 0.8441 0.5345 0.0415 +vn 0.7238 -0.6891 0.0356 +vn 0.8693 0.4924 0.0427 +vn 0.6891 -0.7238 0.0339 +vn 0.8924 0.4492 0.0438 +vn 0.6528 -0.7568 0.0321 +vn 0.9133 0.4048 0.0449 +vn 0.6150 -0.7880 0.0302 +vn 0.9320 0.3595 0.0458 +vn 0.5756 -0.8173 0.0283 +vn 0.9485 0.3133 0.0466 +vn 0.5348 -0.8446 0.0263 +vn 0.9627 0.2664 0.0473 +vn 0.0245 0.9997 0.0012 +vn 0.4928 -0.8698 0.0242 +vn 0.9746 0.2189 0.0479 +vn 0.0736 0.9973 0.0036 +vn 0.4495 -0.8930 0.0221 +vn 0.9841 0.1708 0.0483 +vn 0.1224 0.9925 0.0060 +vn 0.4052 -0.9140 0.0199 +vn 0.9913 0.1223 0.0487 +vn 0.1710 0.9852 0.0084 +vn 0.3598 -0.9328 0.0177 +vn 0.9961 0.0735 0.0489 +vn 0.2191 0.9756 0.0108 +vn 0.3136 -0.9494 0.0154 +vn 0.9985 0.0245 0.0491 +vn 0.2667 0.9637 0.0131 +vn 0.2667 -0.9637 0.0131 +vn 0.9985 -0.0245 0.0491 +vn 0.3136 0.9494 0.0154 +vn 0.2191 -0.9756 0.0108 +vn 0.9961 -0.0735 0.0489 +vn 0.3598 0.9328 0.0177 +vn 0.1710 -0.9852 0.0084 +vn 0.9913 -0.1223 0.0487 +vn 0.4052 0.9140 0.0199 +vn 0.1224 -0.9925 0.0060 +vn 0.9841 -0.1708 0.0483 +vn 0.4495 0.8930 0.0221 +vn 0.0736 -0.9973 0.0036 +vn 0.9746 -0.2189 0.0479 +vn 0.4928 0.8698 0.0242 +vn 0.0245 -0.9997 0.0012 +vn 0.9627 -0.2664 0.0473 +vn 0.5348 0.8446 0.0263 +vn 0.9485 -0.3133 0.0466 +vn 0.5756 0.8173 0.0283 +vn 0.9320 -0.3595 0.0458 +vn 0.6149 0.7880 0.0302 +vn 0.9133 -0.4048 0.0449 +vn 0.6528 0.7568 0.0321 +vn 0.8924 -0.4492 0.0438 +vn 0.6891 0.7238 0.0339 +vn 0.8091 -0.5753 0.1200 +vn 0.7802 0.6148 0.1157 +vn 0.7802 -0.6148 0.1157 +vn 0.8091 0.5753 0.1200 +vn 0.7494 -0.6527 0.1112 +vn 0.8360 0.5345 0.1240 +vn 0.7168 -0.6891 0.1063 +vn 0.8609 0.4924 0.1277 +vn 0.6825 -0.7238 0.1012 +vn 0.8838 0.4492 0.1311 +vn 0.6466 -0.7568 0.0959 +vn 0.9045 0.4048 0.1342 +vn 0.6090 -0.7880 0.0903 +vn 0.9230 0.3595 0.1369 +vn 0.5700 -0.8173 0.0846 +vn 0.9394 0.3133 0.1393 +vn 0.5297 -0.8446 0.0786 +vn 0.9534 0.2664 0.1414 +vn 0.0243 0.9997 0.0036 +vn 0.4880 -0.8698 0.0724 +vn 0.9652 0.2189 0.1432 +vn 0.0729 0.9973 0.0108 +vn 0.4452 -0.8930 0.0660 +vn 0.9746 0.1708 0.1446 +vn 0.1212 0.9925 0.0180 +vn 0.4013 -0.9140 0.0595 +vn 0.9818 0.1223 0.1456 +vn 0.1693 0.9852 0.0251 +vn 0.3564 -0.9328 0.0529 +vn 0.9865 0.0735 0.1463 +vn 0.2170 0.9756 0.0322 +vn 0.3106 -0.9494 0.0461 +vn 0.9889 0.0245 0.1467 +vn 0.2641 0.9637 0.0392 +vn 0.2641 -0.9637 0.0392 +vn 0.9889 -0.0245 0.1467 +vn 0.3106 0.9494 0.0461 +vn 0.2170 -0.9756 0.0322 +vn 0.9865 -0.0735 0.1463 +vn 0.3564 0.9328 0.0529 +vn 0.1693 -0.9852 0.0251 +vn 0.9818 -0.1223 0.1456 +vn 0.4013 0.9140 0.0595 +vn 0.1212 -0.9925 0.0180 +vn 0.9746 -0.1708 0.1446 +vn 0.4452 0.8930 0.0660 +vn 0.0729 -0.9973 0.0108 +vn 0.9652 -0.2189 0.1432 +vn 0.4880 0.8698 0.0724 +vn 0.0243 -0.9997 0.0036 +vn 0.9534 -0.2664 0.1414 +vn 0.5297 0.8446 0.0786 +vn 0.9394 -0.3133 0.1393 +vn 0.5700 0.8173 0.0846 +vn 0.9230 -0.3595 0.1369 +vn 0.6090 0.7880 0.0903 +vn 0.9045 -0.4048 0.1342 +vn 0.6465 0.7568 0.0959 +vn 0.8838 -0.4492 0.1311 +vn 0.6825 0.7238 0.1012 +vn 0.8609 -0.4924 0.1277 +vn 0.7168 0.6891 0.1063 +vn 0.8360 -0.5345 0.1240 +vn 0.7494 0.6527 0.1112 +vn 0.7349 -0.6527 0.1841 +vn 0.8198 0.5345 0.2054 +vn 0.7029 -0.6891 0.1761 +vn 0.8443 0.4924 0.2115 +vn 0.6693 -0.7238 0.1677 +vn 0.8667 0.4492 0.2171 +vn 0.6340 -0.7568 0.1588 +vn 0.8870 0.4048 0.2222 +vn 0.5972 -0.7880 0.1496 +vn 0.9052 0.3595 0.2267 +vn 0.5590 -0.8173 0.1400 +vn 0.9212 0.3133 0.2307 +vn 0.5194 -0.8446 0.1301 +vn 0.9350 0.2664 0.2342 +vn 0.0238 0.9997 0.0060 +vn 0.4786 -0.8698 0.1199 +vn 0.9465 0.2189 0.2371 +vn 0.0714 0.9973 0.0179 +vn 0.4366 -0.8930 0.1094 +vn 0.9558 0.1708 0.2394 +vn 0.1189 0.9925 0.0298 +vn 0.3935 -0.9140 0.0986 +vn 0.9628 0.1223 0.2412 +vn 0.1660 0.9852 0.0416 +vn 0.3495 -0.9328 0.0875 +vn 0.9674 0.0735 0.2423 +vn 0.2128 0.9756 0.0533 +vn 0.3046 -0.9494 0.0763 +vn 0.9697 0.0245 0.2429 +vn 0.2590 0.9637 0.0649 +vn 0.2590 -0.9637 0.0649 +vn 0.9697 -0.0245 0.2429 +vn 0.3046 0.9494 0.0763 +vn 0.2128 -0.9756 0.0533 +vn 0.9674 -0.0735 0.2423 +vn 0.3495 0.9328 0.0875 +vn 0.1660 -0.9852 0.0416 +vn 0.9628 -0.1223 0.2412 +vn 0.3935 0.9140 0.0986 +vn 0.1189 -0.9925 0.0298 +vn 0.9558 -0.1708 0.2394 +vn 0.4366 0.8930 0.1094 +vn 0.0714 -0.9973 0.0179 +vn 0.9465 -0.2189 0.2371 +vn 0.4786 0.8698 0.1199 +vn 0.0238 -0.9997 0.0060 +vn 0.9350 -0.2664 0.2342 +vn 0.5194 0.8446 0.1301 +vn 0.9212 -0.3133 0.2307 +vn 0.5590 0.8173 0.1400 +vn 0.9052 -0.3595 0.2267 +vn 0.5972 0.7880 0.1496 +vn 0.8870 -0.4048 0.2222 +vn 0.6340 0.7568 0.1588 +vn 0.8667 -0.4492 0.2171 +vn 0.6693 0.7238 0.1677 +vn 0.8443 -0.4924 0.2115 +vn 0.7029 0.6891 0.1761 +vn 0.8198 -0.5345 0.2054 +vn 0.7349 0.6527 0.1841 +vn 0.7934 -0.5753 0.1987 +vn 0.7651 0.6148 0.1916 +vn 0.7651 -0.6148 0.1916 +vn 0.7934 0.5753 0.1987 +vn 0.6496 -0.7238 0.2324 +vn 0.8412 0.4492 0.3010 +vn 0.6154 -0.7568 0.2202 +vn 0.8609 0.4048 0.3080 +vn 0.5797 -0.7880 0.2074 +vn 0.8786 0.3595 0.3144 +vn 0.5426 -0.8173 0.1941 +vn 0.8941 0.3133 0.3199 +vn 0.5042 -0.8446 0.1804 +vn 0.9075 0.2664 0.3247 +vn 0.0232 0.9997 0.0083 +vn 0.4645 -0.8698 0.1662 +vn 0.9187 0.2189 0.3287 +vn 0.0693 0.9973 0.0248 +vn 0.4237 -0.8930 0.1516 +vn 0.9277 0.1708 0.3319 +vn 0.1154 0.9925 0.0413 +vn 0.3819 -0.9140 0.1367 +vn 0.9345 0.1223 0.3344 +vn 0.1612 0.9852 0.0577 +vn 0.3392 -0.9328 0.1214 +vn 0.9390 0.0735 0.3360 +vn 0.2065 0.9756 0.0739 +vn 0.2957 -0.9494 0.1058 +vn 0.9413 0.0245 0.3368 +vn 0.2514 0.9637 0.0900 +vn 0.2514 -0.9637 0.0900 +vn 0.9413 -0.0245 0.3368 +vn 0.2957 0.9494 0.1058 +vn 0.2065 -0.9756 0.0739 +vn 0.9390 -0.0735 0.3360 +vn 0.3392 0.9328 0.1214 +vn 0.1612 -0.9852 0.0577 +vn 0.9345 -0.1223 0.3344 +vn 0.3819 0.9140 0.1367 +vn 0.1154 -0.9925 0.0413 +vn 0.9277 -0.1708 0.3319 +vn 0.4237 0.8930 0.1516 +vn 0.0693 -0.9973 0.0248 +vn 0.9187 -0.2189 0.3287 +vn 0.4645 0.8698 0.1662 +vn 0.0231 -0.9997 0.0083 +vn 0.9075 -0.2664 0.3247 +vn 0.5042 0.8446 0.1804 +vn 0.8941 -0.3133 0.3199 +vn 0.5426 0.8173 0.1941 +vn 0.8786 -0.3595 0.3144 +vn 0.5797 0.7880 0.2074 +vn 0.8609 -0.4048 0.3080 +vn 0.6154 0.7568 0.2202 +vn 0.8412 -0.4492 0.3010 +vn 0.6496 0.7238 0.2324 +vn 0.8195 -0.4924 0.2932 +vn 0.6823 0.6891 0.2441 +vn 0.7957 -0.5345 0.2847 +vn 0.7133 0.6527 0.2552 +vn 0.7701 -0.5753 0.2755 +vn 0.7426 0.6148 0.2657 +vn 0.7426 -0.6148 0.2657 +vn 0.7701 0.5753 0.2755 +vn 0.7133 -0.6527 0.2552 +vn 0.7957 0.5345 0.2847 +vn 0.6823 -0.6891 0.2441 +vn 0.8195 0.4924 0.2932 +vn 0.5566 -0.7880 0.2632 +vn 0.8435 0.3595 0.3990 +vn 0.5209 -0.8173 0.2464 +vn 0.8585 0.3133 0.4060 +vn 0.4840 -0.8446 0.2289 +vn 0.8713 0.2664 0.4121 +vn 0.0222 0.9997 0.0105 +vn 0.4460 -0.8698 0.2109 +vn 0.8821 0.2189 0.4172 +vn 0.0666 0.9973 0.0315 +vn 0.4068 -0.8930 0.1924 +vn 0.8907 0.1708 0.4213 +vn 0.1108 0.9925 0.0524 +vn 0.3667 -0.9140 0.1734 +vn 0.8972 0.1223 0.4243 +vn 0.1547 0.9852 0.0732 +vn 0.3257 -0.9328 0.1540 +vn 0.9015 0.0735 0.4264 +vn 0.1983 0.9756 0.0938 +vn 0.2839 -0.9494 0.1343 +vn 0.9037 0.0245 0.4274 +vn 0.2414 0.9637 0.1142 +vn 0.2414 -0.9637 0.1142 +vn 0.9037 -0.0245 0.4274 +vn 0.2839 0.9494 0.1343 +vn 0.1983 -0.9756 0.0938 +vn 0.9015 -0.0735 0.4264 +vn 0.3257 0.9328 0.1540 +vn 0.1547 -0.9852 0.0732 +vn 0.8972 -0.1223 0.4243 +vn 0.3667 0.9140 0.1734 +vn 0.1108 -0.9925 0.0524 +vn 0.8907 -0.1708 0.4213 +vn 0.4068 0.8930 0.1924 +vn 0.0666 -0.9973 0.0315 +vn 0.8821 -0.2189 0.4172 +vn 0.4460 0.8698 0.2109 +vn 0.0222 -0.9997 0.0105 +vn 0.8713 -0.2664 0.4121 +vn 0.4840 0.8446 0.2289 +vn 0.8585 -0.3133 0.4060 +vn 0.5209 0.8173 0.2464 +vn 0.8435 -0.3595 0.3990 +vn 0.5566 0.7880 0.2632 +vn 0.8266 -0.4048 0.3910 +vn 0.5909 0.7568 0.2795 +vn 0.8077 -0.4492 0.3820 +vn 0.6237 0.7238 0.2950 +vn 0.7868 -0.4924 0.3721 +vn 0.6551 0.6891 0.3098 +vn 0.7640 -0.5345 0.3613 +vn 0.6849 0.6527 0.3239 +vn 0.7394 -0.5753 0.3497 +vn 0.7130 0.6148 0.3372 +vn 0.7130 -0.6148 0.3372 +vn 0.7394 0.5753 0.3497 +vn 0.6849 -0.6527 0.3239 +vn 0.7640 0.5345 0.3613 +vn 0.6551 -0.6891 0.3098 +vn 0.7868 0.4924 0.3721 +vn 0.6237 -0.7238 0.2950 +vn 0.8077 0.4492 0.3820 +vn 0.5909 -0.7568 0.2795 +vn 0.8266 0.4048 0.3910 +vn 0.4593 -0.8446 0.2753 +vn 0.8267 0.2664 0.4955 +vn 0.0211 0.9997 0.0126 +vn 0.4232 -0.8698 0.2536 +vn 0.8369 0.2189 0.5016 +vn 0.0632 0.9973 0.0379 +vn 0.3860 -0.8930 0.2314 +vn 0.8451 0.1708 0.5066 +vn 0.1051 0.9925 0.0630 +vn 0.3479 -0.9140 0.2085 +vn 0.8513 0.1223 0.5102 +vn 0.1468 0.9852 0.0880 +vn 0.3090 -0.9328 0.1852 +vn 0.8554 0.0735 0.5127 +vn 0.1881 0.9756 0.1128 +vn 0.2693 -0.9494 0.1614 +vn 0.8575 0.0245 0.5139 +vn 0.2290 0.9637 0.1373 +vn 0.2290 -0.9637 0.1373 +vn 0.8575 -0.0245 0.5139 +vn 0.2693 0.9494 0.1614 +vn 0.1881 -0.9756 0.1128 +vn 0.8554 -0.0735 0.5127 +vn 0.3090 0.9328 0.1852 +vn 0.1468 -0.9852 0.0880 +vn 0.8513 -0.1223 0.5102 +vn 0.3479 0.9140 0.2085 +vn 0.1051 -0.9925 0.0630 +vn 0.8451 -0.1708 0.5066 +vn 0.3860 0.8930 0.2314 +vn 0.0632 -0.9973 0.0379 +vn 0.8369 -0.2189 0.5016 +vn 0.4232 0.8698 0.2536 +vn 0.0211 -0.9997 0.0126 +vn 0.8267 -0.2664 0.4955 +vn 0.4593 0.8446 0.2753 +vn 0.8145 -0.3133 0.4882 +vn 0.4943 0.8173 0.2963 +vn 0.8004 -0.3595 0.4797 +vn 0.5281 0.7880 0.3165 +vn 0.7843 -0.4048 0.4701 +vn 0.5606 0.7568 0.3360 +vn 0.7663 -0.4492 0.4593 +vn 0.5918 0.7238 0.3547 +vn 0.7465 -0.4924 0.4474 +vn 0.6216 0.6891 0.3726 +vn 0.7249 -0.5345 0.4345 +vn 0.6498 0.6527 0.3895 +vn 0.7015 -0.5753 0.4205 +vn 0.6765 0.6148 0.4055 +vn 0.6765 -0.6148 0.4055 +vn 0.7015 0.5753 0.4205 +vn 0.6498 -0.6527 0.3895 +vn 0.7249 0.5345 0.4345 +vn 0.6216 -0.6891 0.3726 +vn 0.7465 0.4924 0.4474 +vn 0.5918 -0.7238 0.3547 +vn 0.7663 0.4492 0.4593 +vn 0.5606 -0.7568 0.3360 +vn 0.7843 0.4048 0.4701 +vn 0.5281 -0.7880 0.3165 +vn 0.8004 0.3595 0.4797 +vn 0.4943 -0.8173 0.2963 +vn 0.8145 0.3133 0.4882 +vn 0.3615 -0.8930 0.2681 +vn 0.7914 0.1708 0.5869 +vn 0.0984 0.9925 0.0730 +vn 0.3258 -0.9140 0.2416 +vn 0.7972 0.1223 0.5912 +vn 0.1375 0.9852 0.1020 +vn 0.2894 -0.9328 0.2146 +vn 0.8010 0.0735 0.5941 +vn 0.1762 0.9756 0.1307 +vn 0.2522 -0.9494 0.1871 +vn 0.8030 0.0245 0.5955 +vn 0.2145 0.9637 0.1591 +vn 0.2145 -0.9637 0.1591 +vn 0.8030 -0.0245 0.5955 +vn 0.2522 0.9494 0.1871 +vn 0.1762 -0.9756 0.1307 +vn 0.8010 -0.0735 0.5941 +vn 0.2894 0.9328 0.2146 +vn 0.1375 -0.9852 0.1020 +vn 0.7972 -0.1223 0.5912 +vn 0.3258 0.9140 0.2416 +vn 0.0984 -0.9925 0.0730 +vn 0.7914 -0.1708 0.5869 +vn 0.3615 0.8930 0.2681 +vn 0.0592 -0.9973 0.0439 +vn 0.7837 -0.2189 0.5813 +vn 0.3963 0.8698 0.2939 +vn 0.0197 -0.9997 0.0146 +vn 0.7742 -0.2664 0.5742 +vn 0.4301 0.8446 0.3190 +vn 0.7628 -0.3133 0.5657 +vn 0.4629 0.8173 0.3433 +vn 0.7495 -0.3595 0.5559 +vn 0.4945 0.7880 0.3668 +vn 0.7344 -0.4048 0.5447 +vn 0.5250 0.7568 0.3894 +vn 0.7176 -0.4492 0.5322 +vn 0.5542 0.7238 0.4110 +vn 0.6991 -0.4924 0.5185 +vn 0.5821 0.6891 0.4317 +vn 0.6788 -0.5345 0.5035 +vn 0.6085 0.6527 0.4513 +vn 0.6570 -0.5753 0.4872 +vn 0.6335 0.6148 0.4698 +vn 0.6335 -0.6148 0.4698 +vn 0.6570 0.5753 0.4872 +vn 0.6085 -0.6527 0.4513 +vn 0.6788 0.5345 0.5035 +vn 0.5821 -0.6891 0.4317 +vn 0.6991 0.4924 0.5185 +vn 0.5542 -0.7238 0.4110 +vn 0.7176 0.4492 0.5322 +vn 0.5250 -0.7568 0.3894 +vn 0.7344 0.4048 0.5447 +vn 0.4945 -0.7880 0.3668 +vn 0.7495 0.3595 0.5559 +vn 0.4629 -0.8173 0.3433 +vn 0.7628 0.3133 0.5657 +vn 0.4301 -0.8446 0.3190 +vn 0.7742 0.2664 0.5742 +vn 0.0197 0.9997 0.0146 +vn 0.3963 -0.8698 0.2939 +vn 0.7837 0.2189 0.5813 +vn 0.0592 0.9973 0.0439 +vn 0.2669 -0.9328 0.2419 +vn 0.7389 0.0735 0.6697 +vn 0.1625 0.9756 0.1473 +vn 0.2327 -0.9494 0.2109 +vn 0.7407 0.0245 0.6714 +vn 0.1978 0.9637 0.1793 +vn 0.1978 -0.9637 0.1793 +vn 0.7407 -0.0245 0.6714 +vn 0.2327 0.9494 0.2109 +vn 0.1625 -0.9756 0.1473 +vn 0.7389 -0.0735 0.6697 +vn 0.2669 0.9328 0.2419 +vn 0.1268 -0.9852 0.1149 +vn 0.7354 -0.1223 0.6665 +vn 0.3006 0.9140 0.2724 +vn 0.0908 -0.9925 0.0823 +vn 0.7301 -0.1708 0.6617 +vn 0.3335 0.8930 0.3022 +vn 0.0546 -0.9973 0.0495 +vn 0.7230 -0.2189 0.6553 +vn 0.3655 0.8698 0.3313 +vn 0.0182 -0.9997 0.0165 +vn 0.7142 -0.2664 0.6473 +vn 0.3967 0.8446 0.3596 +vn 0.7036 -0.3133 0.6377 +vn 0.4270 0.8173 0.3870 +vn 0.6914 -0.3595 0.6267 +vn 0.4562 0.7880 0.4135 +vn 0.6775 -0.4048 0.6141 +vn 0.4843 0.7568 0.4389 +vn 0.6620 -0.4492 0.6000 +vn 0.5112 0.7238 0.4634 +vn 0.6449 -0.4924 0.5845 +vn 0.5369 0.6891 0.4867 +vn 0.6262 -0.5345 0.5676 +vn 0.5613 0.6527 0.5088 +vn 0.6060 -0.5753 0.5493 +vn 0.5844 0.6148 0.5297 +vn 0.5844 -0.6148 0.5297 +vn 0.6060 0.5753 0.5493 +vn 0.5613 -0.6527 0.5088 +vn 0.6262 0.5345 0.5676 +vn 0.5369 -0.6891 0.4867 +vn 0.6449 0.4924 0.5845 +vn 0.5112 -0.7238 0.4634 +vn 0.6620 0.4492 0.6000 +vn 0.4843 -0.7568 0.4389 +vn 0.6775 0.4048 0.6141 +vn 0.4562 -0.7880 0.4135 +vn 0.6914 0.3595 0.6267 +vn 0.4270 -0.8173 0.3870 +vn 0.7036 0.3133 0.6377 +vn 0.3967 -0.8446 0.3596 +vn 0.7142 0.2664 0.6473 +vn 0.0182 0.9997 0.0165 +vn 0.3655 -0.8698 0.3313 +vn 0.7230 0.2189 0.6553 +vn 0.0546 0.9973 0.0495 +vn 0.3335 -0.8930 0.3022 +vn 0.7301 0.1708 0.6617 +vn 0.0908 0.9925 0.0823 +vn 0.3006 -0.9140 0.2724 +vn 0.7354 0.1223 0.6665 +vn 0.1268 0.9852 0.1149 +vn 0.1793 -0.9637 0.1978 +vn 0.6714 -0.0245 0.7407 +vn 0.2109 0.9494 0.2327 +vn 0.1473 -0.9756 0.1625 +vn 0.6697 -0.0735 0.7389 +vn 0.2419 0.9328 0.2669 +vn 0.1149 -0.9852 0.1268 +vn 0.6665 -0.1223 0.7354 +vn 0.2724 0.9140 0.3006 +vn 0.0823 -0.9925 0.0908 +vn 0.6617 -0.1708 0.7301 +vn 0.3022 0.8930 0.3335 +vn 0.0495 -0.9973 0.0546 +vn 0.6553 -0.2189 0.7230 +vn 0.3313 0.8698 0.3655 +vn 0.0165 -0.9997 0.0182 +vn 0.6473 -0.2664 0.7142 +vn 0.3596 0.8446 0.3967 +vn 0.6377 -0.3133 0.7036 +vn 0.3870 0.8173 0.4270 +vn 0.6267 -0.3595 0.6914 +vn 0.4135 0.7880 0.4562 +vn 0.6141 -0.4048 0.6775 +vn 0.4389 0.7568 0.4843 +vn 0.6000 -0.4492 0.6620 +vn 0.4634 0.7238 0.5112 +vn 0.5845 -0.4924 0.6449 +vn 0.4867 0.6891 0.5369 +vn 0.5676 -0.5345 0.6262 +vn 0.5088 0.6527 0.5613 +vn 0.5493 -0.5753 0.6060 +vn 0.5297 0.6148 0.5844 +vn 0.5297 -0.6148 0.5844 +vn 0.5493 0.5753 0.6060 +vn 0.5088 -0.6527 0.5613 +vn 0.5676 0.5345 0.6262 +vn 0.4867 -0.6891 0.5369 +vn 0.5845 0.4924 0.6449 +vn 0.4634 -0.7238 0.5112 +vn 0.6000 0.4492 0.6620 +vn 0.4389 -0.7568 0.4843 +vn 0.6141 0.4048 0.6775 +vn 0.4135 -0.7880 0.4562 +vn 0.6267 0.3595 0.6914 +vn 0.3870 -0.8173 0.4270 +vn 0.6377 0.3133 0.7036 +vn 0.3596 -0.8446 0.3967 +vn 0.6473 0.2664 0.7142 +vn 0.0165 0.9997 0.0182 +vn 0.3313 -0.8698 0.3655 +vn 0.6553 0.2189 0.7230 +vn 0.0495 0.9973 0.0546 +vn 0.3022 -0.8930 0.3335 +vn 0.6617 0.1708 0.7301 +vn 0.0823 0.9925 0.0908 +vn 0.2724 -0.9140 0.3006 +vn 0.6665 0.1223 0.7354 +vn 0.1149 0.9852 0.1268 +vn 0.2419 -0.9328 0.2669 +vn 0.6697 0.0735 0.7389 +vn 0.1473 0.9756 0.1625 +vn 0.2109 -0.9494 0.2327 +vn 0.6714 0.0245 0.7407 +vn 0.1793 0.9637 0.1978 +vn 0.1020 -0.9852 0.1375 +vn 0.5912 -0.1223 0.7972 +vn 0.2416 0.9140 0.3258 +vn 0.0730 -0.9925 0.0984 +vn 0.5870 -0.1708 0.7914 +vn 0.2681 0.8930 0.3615 +vn 0.0439 -0.9973 0.0592 +vn 0.5813 -0.2189 0.7837 +vn 0.2939 0.8698 0.3963 +vn 0.0146 -0.9997 0.0197 +vn 0.5742 -0.2664 0.7742 +vn 0.3190 0.8446 0.4301 +vn 0.5657 -0.3133 0.7628 +vn 0.3433 0.8173 0.4629 +vn 0.5559 -0.3595 0.7495 +vn 0.3668 0.7880 0.4945 +vn 0.5447 -0.4048 0.7344 +vn 0.3894 0.7568 0.5250 +vn 0.5322 -0.4492 0.7176 +vn 0.4110 0.7238 0.5542 +vn 0.5185 -0.4924 0.6991 +vn 0.4317 0.6891 0.5821 +vn 0.5035 -0.5345 0.6788 +vn 0.4513 0.6527 0.6085 +vn 0.4872 -0.5753 0.6570 +vn 0.4698 0.6148 0.6335 +vn 0.4698 -0.6148 0.6335 +vn 0.4872 0.5753 0.6570 +vn 0.4513 -0.6527 0.6085 +vn 0.5035 0.5345 0.6788 +vn 0.4317 -0.6891 0.5821 +vn 0.5185 0.4924 0.6991 +vn 0.4110 -0.7238 0.5542 +vn 0.5322 0.4492 0.7176 +vn 0.3894 -0.7568 0.5250 +vn 0.5447 0.4048 0.7344 +vn 0.3668 -0.7880 0.4945 +vn 0.5559 0.3595 0.7495 +vn 0.3433 -0.8173 0.4629 +vn 0.5657 0.3133 0.7628 +vn 0.3190 -0.8446 0.4301 +vn 0.5742 0.2664 0.7742 +vn 0.0146 0.9997 0.0197 +vn 0.2939 -0.8698 0.3963 +vn 0.5813 0.2189 0.7837 +vn 0.0439 0.9973 0.0592 +vn 0.2681 -0.8930 0.3615 +vn 0.5869 0.1708 0.7914 +vn 0.0730 0.9925 0.0984 +vn 0.2416 -0.9140 0.3258 +vn 0.5912 0.1223 0.7972 +vn 0.1020 0.9852 0.1375 +vn 0.2146 -0.9328 0.2894 +vn 0.5941 0.0735 0.8010 +vn 0.1307 0.9756 0.1762 +vn 0.1871 -0.9494 0.2522 +vn 0.5955 0.0245 0.8030 +vn 0.1591 0.9637 0.2145 +vn 0.1591 -0.9637 0.2145 +vn 0.5955 -0.0245 0.8030 +vn 0.1871 0.9494 0.2522 +vn 0.1307 -0.9756 0.1762 +vn 0.5941 -0.0735 0.8010 +vn 0.2146 0.9328 0.2894 +vn 0.4055 -0.6148 0.6765 +vn 0.4205 0.5753 0.7015 +vn 0.3895 -0.6527 0.6498 +vn 0.4345 0.5345 0.7249 +vn 0.3726 -0.6891 0.6216 +vn 0.4474 0.4924 0.7465 +vn 0.3547 -0.7238 0.5918 +vn 0.4593 0.4492 0.7663 +vn 0.3360 -0.7568 0.5606 +vn 0.4701 0.4048 0.7843 +vn 0.3165 -0.7880 0.5281 +vn 0.4797 0.3595 0.8004 +vn 0.2963 -0.8173 0.4943 +vn 0.4882 0.3133 0.8145 +vn 0.2753 -0.8446 0.4593 +vn 0.4955 0.2664 0.8267 +vn 0.0126 0.9997 0.0211 +vn 0.2536 -0.8698 0.4232 +vn 0.5016 0.2189 0.8369 +vn 0.0379 0.9973 0.0632 +vn 0.2314 -0.8930 0.3860 +vn 0.5066 0.1708 0.8451 +vn 0.0630 0.9925 0.1051 +vn 0.2085 -0.9140 0.3479 +vn 0.5102 0.1223 0.8513 +vn 0.0880 0.9852 0.1468 +vn 0.1852 -0.9328 0.3090 +vn 0.5127 0.0735 0.8554 +vn 0.1128 0.9756 0.1881 +vn 0.1614 -0.9494 0.2693 +vn 0.5139 0.0245 0.8575 +vn 0.1373 0.9637 0.2290 +vn 0.1373 -0.9637 0.2290 +vn 0.5139 -0.0245 0.8575 +vn 0.1614 0.9494 0.2693 +vn 0.1128 -0.9756 0.1881 +vn 0.5127 -0.0735 0.8554 +vn 0.1852 0.9328 0.3090 +vn 0.0880 -0.9852 0.1468 +vn 0.5102 -0.1223 0.8513 +vn 0.2085 0.9140 0.3479 +vn 0.0630 -0.9925 0.1051 +vn 0.5066 -0.1708 0.8451 +vn 0.2314 0.8930 0.3860 +vn 0.0379 -0.9973 0.0632 +vn 0.5016 -0.2189 0.8369 +vn 0.2536 0.8698 0.4232 +vn 0.0126 -0.9997 0.0211 +vn 0.4955 -0.2664 0.8267 +vn 0.2753 0.8446 0.4593 +vn 0.4882 -0.3133 0.8145 +vn 0.2963 0.8173 0.4943 +vn 0.4797 -0.3595 0.8004 +vn 0.3165 0.7880 0.5281 +vn 0.4701 -0.4048 0.7843 +vn 0.3360 0.7568 0.5606 +vn 0.4593 -0.4492 0.7663 +vn 0.3547 0.7238 0.5918 +vn 0.4474 -0.4924 0.7465 +vn 0.3726 0.6891 0.6216 +vn 0.4345 -0.5345 0.7249 +vn 0.3895 0.6527 0.6498 +vn 0.4205 -0.5753 0.7015 +vn 0.4055 0.6148 0.6765 +vn 0.3098 -0.6891 0.6551 +vn 0.3721 0.4924 0.7868 +vn 0.2950 -0.7238 0.6237 +vn 0.3820 0.4492 0.8077 +vn 0.2795 -0.7568 0.5909 +vn 0.3910 0.4048 0.8266 +vn 0.2632 -0.7880 0.5566 +vn 0.3990 0.3595 0.8435 +vn 0.2464 -0.8173 0.5209 +vn 0.4060 0.3133 0.8585 +vn 0.2289 -0.8446 0.4840 +vn 0.4121 0.2664 0.8713 +vn 0.0105 0.9997 0.0222 +vn 0.2109 -0.8698 0.4460 +vn 0.4172 0.2189 0.8821 +vn 0.0315 0.9973 0.0666 +vn 0.1924 -0.8930 0.4068 +vn 0.4213 0.1708 0.8907 +vn 0.0524 0.9925 0.1108 +vn 0.1734 -0.9140 0.3667 +vn 0.4243 0.1223 0.8972 +vn 0.0732 0.9852 0.1547 +vn 0.1540 -0.9328 0.3257 +vn 0.4264 0.0735 0.9015 +vn 0.0938 0.9756 0.1983 +vn 0.1343 -0.9494 0.2839 +vn 0.4274 0.0245 0.9037 +vn 0.1142 0.9637 0.2414 +vn 0.1142 -0.9637 0.2414 +vn 0.4274 -0.0245 0.9037 +vn 0.1343 0.9494 0.2839 +vn 0.0938 -0.9756 0.1983 +vn 0.4264 -0.0735 0.9015 +vn 0.1540 0.9328 0.3257 +vn 0.0732 -0.9852 0.1547 +vn 0.4243 -0.1223 0.8972 +vn 0.1734 0.9140 0.3667 +vn 0.0524 -0.9925 0.1108 +vn 0.4213 -0.1708 0.8907 +vn 0.1924 0.8930 0.4068 +vn 0.0315 -0.9973 0.0666 +vn 0.4172 -0.2189 0.8821 +vn 0.2109 0.8698 0.4460 +vn 0.0105 -0.9997 0.0222 +vn 0.4121 -0.2664 0.8713 +vn 0.2289 0.8446 0.4840 +vn 0.4060 -0.3133 0.8585 +vn 0.2464 0.8173 0.5209 +vn 0.3990 -0.3595 0.8435 +vn 0.2632 0.7880 0.5566 +vn 0.3910 -0.4048 0.8266 +vn 0.2795 0.7568 0.5909 +vn 0.3820 -0.4492 0.8077 +vn 0.2950 0.7238 0.6237 +vn 0.3721 -0.4924 0.7868 +vn 0.3098 0.6891 0.6551 +vn 0.3613 -0.5345 0.7640 +vn 0.3239 0.6527 0.6849 +vn 0.3497 -0.5753 0.7394 +vn 0.3372 0.6148 0.7130 +vn 0.3372 -0.6148 0.7130 +vn 0.3497 0.5753 0.7394 +vn 0.3239 -0.6527 0.6849 +vn 0.3613 0.5345 0.7640 +vn 0.2202 -0.7568 0.6154 +vn 0.3080 0.4048 0.8609 +vn 0.2074 -0.7880 0.5797 +vn 0.3144 0.3595 0.8786 +vn 0.1941 -0.8173 0.5426 +vn 0.3199 0.3133 0.8941 +vn 0.1804 -0.8446 0.5042 +vn 0.3247 0.2664 0.9075 +vn 0.0083 0.9997 0.0231 +vn 0.1662 -0.8698 0.4645 +vn 0.3287 0.2189 0.9187 +vn 0.0248 0.9973 0.0693 +vn 0.1516 -0.8930 0.4237 +vn 0.3319 0.1708 0.9277 +vn 0.0413 0.9925 0.1154 +vn 0.1367 -0.9140 0.3819 +vn 0.3344 0.1223 0.9345 +vn 0.0577 0.9852 0.1612 +vn 0.1214 -0.9328 0.3392 +vn 0.3360 0.0735 0.9390 +vn 0.0739 0.9756 0.2065 +vn 0.1058 -0.9494 0.2957 +vn 0.3368 0.0245 0.9413 +vn 0.0900 0.9637 0.2514 +vn 0.0900 -0.9637 0.2514 +vn 0.3368 -0.0245 0.9413 +vn 0.1058 0.9494 0.2957 +vn 0.0739 -0.9756 0.2065 +vn 0.3360 -0.0735 0.9390 +vn 0.1214 0.9328 0.3392 +vn 0.0577 -0.9852 0.1612 +vn 0.3344 -0.1223 0.9345 +vn 0.1367 0.9140 0.3819 +vn 0.0413 -0.9925 0.1154 +vn 0.3319 -0.1708 0.9277 +vn 0.1516 0.8930 0.4237 +vn 0.0248 -0.9973 0.0693 +vn 0.3287 -0.2189 0.9187 +vn 0.1662 0.8698 0.4645 +vn 0.0083 -0.9997 0.0231 +vn 0.3247 -0.2664 0.9075 +vn 0.1804 0.8446 0.5042 +vn 0.3199 -0.3133 0.8941 +vn 0.1941 0.8173 0.5426 +vn 0.3144 -0.3595 0.8786 +vn 0.2074 0.7880 0.5797 +vn 0.3080 -0.4048 0.8609 +vn 0.2202 0.7568 0.6154 +vn 0.3010 -0.4492 0.8412 +vn 0.2324 0.7238 0.6496 +vn 0.2932 -0.4924 0.8195 +vn 0.2441 0.6891 0.6823 +vn 0.2847 -0.5345 0.7957 +vn 0.2552 0.6527 0.7133 +vn 0.2755 -0.5753 0.7701 +vn 0.2657 0.6148 0.7426 +vn 0.2657 -0.6148 0.7426 +vn 0.2755 0.5753 0.7701 +vn 0.2552 -0.6527 0.7133 +vn 0.2847 0.5345 0.7957 +vn 0.2441 -0.6891 0.6823 +vn 0.2932 0.4924 0.8195 +vn 0.2324 -0.7238 0.6496 +vn 0.3010 0.4492 0.8412 +vn 0.1400 -0.8173 0.5590 +vn 0.2307 0.3133 0.9212 +vn 0.1301 -0.8446 0.5194 +vn 0.2342 0.2664 0.9350 +vn 0.0060 0.9997 0.0238 +vn 0.1199 -0.8698 0.4786 +vn 0.2371 0.2189 0.9465 +vn 0.0179 0.9973 0.0714 +vn 0.1094 -0.8930 0.4366 +vn 0.2394 0.1708 0.9558 +vn 0.0298 0.9925 0.1189 +vn 0.0986 -0.9140 0.3935 +vn 0.2412 0.1223 0.9628 +vn 0.0416 0.9852 0.1660 +vn 0.0875 -0.9328 0.3495 +vn 0.2423 0.0735 0.9674 +vn 0.0533 0.9756 0.2128 +vn 0.0763 -0.9494 0.3046 +vn 0.2429 0.0245 0.9697 +vn 0.0649 0.9637 0.2590 +vn 0.0649 -0.9637 0.2590 +vn 0.2429 -0.0245 0.9697 +vn 0.0763 0.9494 0.3046 +vn 0.0533 -0.9756 0.2128 +vn 0.2423 -0.0735 0.9674 +vn 0.0875 0.9328 0.3495 +vn 0.0416 -0.9852 0.1660 +vn 0.2412 -0.1223 0.9628 +vn 0.0986 0.9140 0.3935 +vn 0.0298 -0.9925 0.1189 +vn 0.2394 -0.1708 0.9558 +vn 0.1094 0.8930 0.4366 +vn 0.0179 -0.9973 0.0714 +vn 0.2371 -0.2189 0.9465 +vn 0.1199 0.8698 0.4786 +vn 0.0060 -0.9997 0.0238 +vn 0.2342 -0.2664 0.9350 +vn 0.1301 0.8446 0.5194 +vn 0.2307 -0.3133 0.9212 +vn 0.1400 0.8173 0.5590 +vn 0.2267 -0.3595 0.9052 +vn 0.1496 0.7880 0.5972 +vn 0.2222 -0.4048 0.8870 +vn 0.1588 0.7568 0.6340 +vn 0.2171 -0.4492 0.8667 +vn 0.1677 0.7238 0.6693 +vn 0.2115 -0.4924 0.8443 +vn 0.1761 0.6891 0.7029 +vn 0.2054 -0.5345 0.8198 +vn 0.1841 0.6527 0.7349 +vn 0.1987 -0.5753 0.7934 +vn 0.1916 0.6148 0.7651 +vn 0.1916 -0.6148 0.7651 +vn 0.1987 0.5753 0.7934 +vn 0.1841 -0.6527 0.7349 +vn 0.2054 0.5345 0.8198 +vn 0.1761 -0.6891 0.7029 +vn 0.2115 0.4924 0.8443 +vn 0.1677 -0.7238 0.6693 +vn 0.2171 0.4492 0.8667 +vn 0.1588 -0.7568 0.6340 +vn 0.2222 0.4048 0.8870 +vn 0.1496 -0.7880 0.5972 +vn 0.2267 0.3595 0.9052 +vn 0.0724 -0.8698 0.4880 +vn 0.1432 0.2189 0.9652 +vn 0.0108 0.9973 0.0729 +vn 0.0660 -0.8930 0.4452 +vn 0.1446 0.1708 0.9746 +vn 0.0180 0.9925 0.1212 +vn 0.0595 -0.9140 0.4013 +vn 0.1456 0.1223 0.9818 +vn 0.0251 0.9852 0.1693 +vn 0.0529 -0.9328 0.3564 +vn 0.1463 0.0735 0.9865 +vn 0.0322 0.9756 0.2170 +vn 0.0461 -0.9494 0.3106 +vn 0.1467 0.0245 0.9889 +vn 0.0392 0.9637 0.2641 +vn 0.0392 -0.9637 0.2641 +vn 0.1467 -0.0245 0.9889 +vn 0.0461 0.9494 0.3106 +vn 0.0322 -0.9756 0.2170 +vn 0.1463 -0.0735 0.9865 +vn 0.0529 0.9328 0.3564 +vn 0.0251 -0.9852 0.1693 +vn 0.1456 -0.1223 0.9818 +vn 0.0595 0.9140 0.4013 +vn 0.0180 -0.9925 0.1212 +vn 0.1446 -0.1708 0.9746 +vn 0.0660 0.8930 0.4452 +vn 0.0108 -0.9973 0.0729 +vn 0.1432 -0.2189 0.9652 +vn 0.0724 0.8698 0.4880 +vn 0.0036 -0.9997 0.0243 +vn 0.1414 -0.2664 0.9534 +vn 0.0786 0.8446 0.5297 +vn 0.1393 -0.3133 0.9394 +vn 0.0846 0.8173 0.5700 +vn 0.1369 -0.3595 0.9230 +vn 0.0903 0.7880 0.6090 +vn 0.1342 -0.4048 0.9045 +vn 0.0959 0.7568 0.6465 +vn 0.1311 -0.4492 0.8838 +vn 0.1012 0.7238 0.6825 +vn 0.1277 -0.4924 0.8609 +vn 0.1063 0.6891 0.7168 +vn 0.1240 -0.5345 0.8360 +vn 0.1112 0.6527 0.7494 +vn 0.1200 -0.5753 0.8091 +vn 0.1157 0.6148 0.7802 +vn 0.1157 -0.6148 0.7802 +vn 0.1200 0.5753 0.8091 +vn 0.1112 -0.6527 0.7494 +vn 0.1240 0.5345 0.8360 +vn 0.1063 -0.6891 0.7168 +vn 0.1277 0.4924 0.8609 +vn 0.1012 -0.7238 0.6825 +vn 0.1311 0.4492 0.8838 +vn 0.0959 -0.7568 0.6466 +vn 0.1342 0.4048 0.9045 +vn 0.0903 -0.7880 0.6090 +vn 0.1369 0.3595 0.9230 +vn 0.0846 -0.8173 0.5700 +vn 0.1393 0.3133 0.9394 +vn 0.0786 -0.8446 0.5297 +vn 0.1414 0.2664 0.9534 +vn 0.0036 0.9997 0.0243 +vn 0.0199 -0.9140 0.4052 +vn 0.0487 0.1223 0.9913 +vn 0.0084 0.9852 0.1710 +vn 0.0177 -0.9328 0.3598 +vn 0.0489 0.0735 0.9961 +vn 0.0108 0.9756 0.2191 +vn 0.0154 -0.9494 0.3136 +vn 0.0491 0.0245 0.9985 +vn 0.0131 0.9637 0.2667 +vn 0.0131 -0.9637 0.2667 +vn 0.0491 -0.0245 0.9985 +vn 0.0154 0.9494 0.3136 +vn 0.0108 -0.9756 0.2191 +vn 0.0489 -0.0735 0.9961 +vn 0.0177 0.9328 0.3598 +vn 0.0084 -0.9852 0.1710 +vn 0.0487 -0.1223 0.9913 +vn 0.0199 0.9140 0.4052 +vn 0.0060 -0.9925 0.1224 +vn 0.0483 -0.1708 0.9841 +vn 0.0221 0.8930 0.4495 +vn 0.0036 -0.9973 0.0736 +vn 0.0479 -0.2189 0.9746 +vn 0.0242 0.8698 0.4928 +vn 0.0012 -0.9997 0.0245 +vn 0.0473 -0.2664 0.9627 +vn 0.0263 0.8446 0.5348 +vn 0.0466 -0.3133 0.9485 +vn 0.0283 0.8173 0.5756 +vn 0.0458 -0.3595 0.9320 +vn 0.0302 0.7880 0.6149 +vn 0.0449 -0.4048 0.9133 +vn 0.0321 0.7568 0.6528 +vn 0.0438 -0.4492 0.8924 +vn 0.0339 0.7238 0.6891 +vn 0.0427 -0.4924 0.8693 +vn 0.0356 0.6891 0.7238 +vn 0.0415 -0.5345 0.8441 +vn 0.0372 0.6527 0.7567 +vn 0.0401 -0.5753 0.8169 +vn 0.0387 0.6148 0.7878 +vn 0.0387 -0.6148 0.7878 +vn 0.0401 0.5753 0.8169 +vn 0.0372 -0.6527 0.7567 +vn 0.0415 0.5345 0.8441 +vn 0.0356 -0.6891 0.7238 +vn 0.0427 0.4924 0.8693 +vn 0.0339 -0.7238 0.6891 +vn 0.0438 0.4492 0.8924 +vn 0.0321 -0.7568 0.6528 +vn 0.0449 0.4048 0.9133 +vn 0.0302 -0.7880 0.6149 +vn 0.0458 0.3595 0.9320 +vn 0.0283 -0.8173 0.5756 +vn 0.0466 0.3133 0.9485 +vn 0.0263 -0.8446 0.5348 +vn 0.0473 0.2664 0.9627 +vn 0.0012 0.9997 0.0245 +vn 0.0242 -0.8698 0.4928 +vn 0.0479 0.2189 0.9746 +vn 0.0036 0.9973 0.0736 +vn 0.0221 -0.8930 0.4495 +vn 0.0483 0.1708 0.9841 +vn 0.0060 0.9925 0.1224 +vn -0.0154 -0.9494 0.3136 +vn -0.0491 0.0245 0.9985 +vn -0.0131 0.9637 0.2667 +vn -0.0131 -0.9637 0.2667 +vn -0.0491 -0.0245 0.9985 +vn -0.0154 0.9494 0.3136 +vn -0.0108 -0.9756 0.2191 +vn -0.0489 -0.0735 0.9961 +vn -0.0177 0.9328 0.3598 +vn -0.0084 -0.9852 0.1710 +vn -0.0487 -0.1223 0.9913 +vn -0.0199 0.9140 0.4052 +vn -0.0060 -0.9925 0.1224 +vn -0.0483 -0.1708 0.9841 +vn -0.0221 0.8930 0.4495 +vn -0.0036 -0.9973 0.0736 +vn -0.0479 -0.2189 0.9746 +vn -0.0242 0.8698 0.4928 +vn -0.0012 -0.9997 0.0245 +vn -0.0473 -0.2664 0.9627 +vn -0.0263 0.8446 0.5348 +vn -0.0466 -0.3133 0.9485 +vn -0.0283 0.8173 0.5756 +vn -0.0458 -0.3595 0.9320 +vn -0.0302 0.7880 0.6149 +vn -0.0449 -0.4048 0.9133 +vn -0.0321 0.7568 0.6528 +vn -0.0438 -0.4492 0.8924 +vn -0.0339 0.7238 0.6891 +vn -0.0427 -0.4924 0.8693 +vn -0.0356 0.6891 0.7238 +vn -0.0415 -0.5345 0.8441 +vn -0.0372 0.6527 0.7567 +vn -0.0401 -0.5753 0.8169 +vn -0.0387 0.6148 0.7878 +vn -0.0387 -0.6148 0.7878 +vn -0.0401 0.5753 0.8169 +vn -0.0372 -0.6527 0.7567 +vn -0.0415 0.5345 0.8441 +vn -0.0356 -0.6891 0.7238 +vn -0.0427 0.4924 0.8693 +vn -0.0339 -0.7238 0.6891 +vn -0.0438 0.4492 0.8924 +vn -0.0321 -0.7568 0.6528 +vn -0.0449 0.4048 0.9133 +vn -0.0302 -0.7880 0.6149 +vn -0.0458 0.3595 0.9320 +vn -0.0283 -0.8173 0.5756 +vn -0.0466 0.3133 0.9485 +vn -0.0263 -0.8446 0.5348 +vn -0.0473 0.2664 0.9627 +vn -0.0012 0.9997 0.0245 +vn -0.0242 -0.8698 0.4928 +vn -0.0479 0.2189 0.9746 +vn -0.0036 0.9973 0.0736 +vn -0.0221 -0.8930 0.4495 +vn -0.0483 0.1708 0.9841 +vn -0.0060 0.9925 0.1224 +vn -0.0199 -0.9140 0.4052 +vn -0.0487 0.1223 0.9913 +vn -0.0084 0.9852 0.1710 +vn -0.0177 -0.9328 0.3598 +vn -0.0489 0.0735 0.9961 +vn -0.0108 0.9756 0.2191 +vn -0.0322 -0.9756 0.2170 +vn -0.1463 -0.0735 0.9865 +vn -0.0529 0.9328 0.3564 +vn -0.0251 -0.9852 0.1693 +vn -0.1456 -0.1223 0.9818 +vn -0.0595 0.9140 0.4013 +vn -0.0180 -0.9925 0.1212 +vn -0.1446 -0.1708 0.9746 +vn -0.0660 0.8930 0.4452 +vn -0.0108 -0.9973 0.0729 +vn -0.1432 -0.2189 0.9652 +vn -0.0724 0.8698 0.4880 +vn -0.0036 -0.9997 0.0243 +vn -0.1414 -0.2664 0.9534 +vn -0.0786 0.8446 0.5297 +vn -0.1393 -0.3133 0.9394 +vn -0.0846 0.8173 0.5700 +vn -0.1369 -0.3595 0.9230 +vn -0.0903 0.7880 0.6090 +vn -0.1342 -0.4048 0.9045 +vn -0.0959 0.7568 0.6465 +vn -0.1311 -0.4492 0.8838 +vn -0.1012 0.7238 0.6825 +vn -0.1277 -0.4924 0.8609 +vn -0.1063 0.6891 0.7168 +vn -0.1240 -0.5345 0.8360 +vn -0.1112 0.6527 0.7494 +vn -0.1200 -0.5753 0.8091 +vn -0.1157 0.6148 0.7802 +vn -0.1157 -0.6148 0.7802 +vn -0.1200 0.5753 0.8091 +vn -0.1112 -0.6527 0.7494 +vn -0.1240 0.5345 0.8360 +vn -0.1063 -0.6891 0.7168 +vn -0.1277 0.4924 0.8609 +vn -0.1012 -0.7238 0.6825 +vn -0.1311 0.4492 0.8838 +vn -0.0959 -0.7568 0.6466 +vn -0.1342 0.4048 0.9045 +vn -0.0903 -0.7880 0.6090 +vn -0.1369 0.3595 0.9230 +vn -0.0846 -0.8173 0.5700 +vn -0.1393 0.3133 0.9394 +vn -0.0786 -0.8446 0.5297 +vn -0.1414 0.2664 0.9534 +vn -0.0036 0.9997 0.0243 +vn -0.0724 -0.8698 0.4880 +vn -0.1432 0.2189 0.9652 +vn -0.0108 0.9973 0.0729 +vn -0.0660 -0.8930 0.4452 +vn -0.1446 0.1708 0.9746 +vn -0.0180 0.9925 0.1212 +vn -0.0595 -0.9140 0.4013 +vn -0.1456 0.1223 0.9818 +vn -0.0251 0.9852 0.1693 +vn -0.0529 -0.9328 0.3564 +vn -0.1463 0.0735 0.9865 +vn -0.0322 0.9756 0.2170 +vn -0.0461 -0.9494 0.3106 +vn -0.1467 0.0245 0.9889 +vn -0.0392 0.9637 0.2641 +vn -0.0392 -0.9637 0.2641 +vn -0.1467 -0.0245 0.9889 +vn -0.0461 0.9494 0.3106 +vn -0.0298 -0.9925 0.1189 +vn -0.2394 -0.1708 0.9558 +vn -0.1094 0.8930 0.4366 +vn -0.0179 -0.9973 0.0714 +vn -0.2371 -0.2189 0.9465 +vn -0.1199 0.8698 0.4786 +vn -0.0060 -0.9997 0.0238 +vn -0.2342 -0.2664 0.9350 +vn -0.1301 0.8446 0.5194 +vn -0.2307 -0.3133 0.9212 +vn -0.1400 0.8173 0.5590 +vn -0.2267 -0.3595 0.9052 +vn -0.1496 0.7880 0.5972 +vn -0.2222 -0.4048 0.8870 +vn -0.1588 0.7568 0.6340 +vn -0.2171 -0.4492 0.8667 +vn -0.1677 0.7238 0.6693 +vn -0.2115 -0.4924 0.8443 +vn -0.1761 0.6891 0.7029 +vn -0.2054 -0.5345 0.8198 +vn -0.1841 0.6527 0.7349 +vn -0.1987 -0.5753 0.7934 +vn -0.1916 0.6148 0.7651 +vn -0.1916 -0.6148 0.7651 +vn -0.1987 0.5753 0.7934 +vn -0.1841 -0.6527 0.7349 +vn -0.2054 0.5345 0.8198 +vn -0.1761 -0.6891 0.7029 +vn -0.2115 0.4924 0.8443 +vn -0.1677 -0.7238 0.6693 +vn -0.2171 0.4492 0.8667 +vn -0.1588 -0.7568 0.6340 +vn -0.2222 0.4048 0.8870 +vn -0.1496 -0.7880 0.5972 +vn -0.2267 0.3595 0.9052 +vn -0.1400 -0.8173 0.5590 +vn -0.2307 0.3133 0.9212 +vn -0.1301 -0.8446 0.5194 +vn -0.2342 0.2664 0.9350 +vn -0.0060 0.9997 0.0238 +vn -0.1199 -0.8698 0.4786 +vn -0.2371 0.2189 0.9465 +vn -0.0179 0.9973 0.0714 +vn -0.1094 -0.8930 0.4366 +vn -0.2394 0.1708 0.9558 +vn -0.0298 0.9925 0.1189 +vn -0.0986 -0.9140 0.3935 +vn -0.2412 0.1223 0.9628 +vn -0.0416 0.9852 0.1660 +vn -0.0875 -0.9328 0.3495 +vn -0.2423 0.0735 0.9674 +vn -0.0533 0.9756 0.2128 +vn -0.0763 -0.9494 0.3046 +vn -0.2429 0.0245 0.9697 +vn -0.0649 0.9637 0.2590 +vn -0.0649 -0.9637 0.2590 +vn -0.2429 -0.0245 0.9697 +vn -0.0763 0.9494 0.3046 +vn -0.0533 -0.9756 0.2128 +vn -0.2423 -0.0735 0.9674 +vn -0.0875 0.9328 0.3495 +vn -0.0416 -0.9852 0.1660 +vn -0.2412 -0.1223 0.9628 +vn -0.0986 0.9140 0.3935 +vn -0.0083 -0.9997 0.0231 +vn -0.3247 -0.2664 0.9075 +vn -0.1804 0.8446 0.5042 +vn -0.3199 -0.3133 0.8941 +vn -0.1941 0.8173 0.5426 +vn -0.3144 -0.3595 0.8786 +vn -0.2074 0.7880 0.5797 +vn -0.3080 -0.4048 0.8609 +vn -0.2202 0.7568 0.6154 +vn -0.3010 -0.4492 0.8412 +vn -0.2324 0.7238 0.6496 +vn -0.2932 -0.4924 0.8195 +vn -0.2441 0.6891 0.6823 +vn -0.2847 -0.5345 0.7957 +vn -0.2552 0.6527 0.7133 +vn -0.2755 -0.5753 0.7701 +vn -0.2657 0.6148 0.7426 +vn -0.2657 -0.6148 0.7426 +vn -0.2755 0.5753 0.7701 +vn -0.2552 -0.6527 0.7133 +vn -0.2847 0.5345 0.7957 +vn -0.2441 -0.6891 0.6823 +vn -0.2932 0.4924 0.8195 +vn -0.2324 -0.7238 0.6496 +vn -0.3010 0.4492 0.8412 +vn -0.2202 -0.7568 0.6154 +vn -0.3081 0.4048 0.8609 +vn -0.2074 -0.7880 0.5797 +vn -0.3144 0.3595 0.8786 +vn -0.1941 -0.8173 0.5426 +vn -0.3199 0.3133 0.8941 +vn -0.1804 -0.8446 0.5042 +vn -0.3247 0.2664 0.9075 +vn -0.0083 0.9997 0.0231 +vn -0.1662 -0.8698 0.4645 +vn -0.3287 0.2189 0.9187 +vn -0.0248 0.9973 0.0693 +vn -0.1516 -0.8930 0.4237 +vn -0.3319 0.1708 0.9277 +vn -0.0413 0.9925 0.1154 +vn -0.1367 -0.9140 0.3819 +vn -0.3344 0.1223 0.9345 +vn -0.0577 0.9852 0.1612 +vn -0.1214 -0.9328 0.3392 +vn -0.3360 0.0735 0.9390 +vn -0.0739 0.9756 0.2065 +vn -0.1058 -0.9494 0.2957 +vn -0.3368 0.0245 0.9413 +vn -0.0900 0.9637 0.2514 +vn -0.0900 -0.9637 0.2514 +vn -0.3368 -0.0245 0.9413 +vn -0.1058 0.9494 0.2957 +vn -0.0739 -0.9756 0.2065 +vn -0.3360 -0.0735 0.9390 +vn -0.1214 0.9328 0.3392 +vn -0.0577 -0.9852 0.1612 +vn -0.3344 -0.1223 0.9345 +vn -0.1367 0.9140 0.3819 +vn -0.0413 -0.9925 0.1154 +vn -0.3319 -0.1708 0.9277 +vn -0.1516 0.8930 0.4237 +vn -0.0248 -0.9973 0.0693 +vn -0.3287 -0.2189 0.9187 +vn -0.1662 0.8698 0.4645 +vn -0.3990 -0.3595 0.8435 +vn -0.2632 0.7880 0.5566 +vn -0.3910 -0.4048 0.8266 +vn -0.2795 0.7568 0.5909 +vn -0.3820 -0.4492 0.8077 +vn -0.2950 0.7238 0.6237 +vn -0.3721 -0.4924 0.7868 +vn -0.3098 0.6891 0.6551 +vn -0.3613 -0.5345 0.7640 +vn -0.3239 0.6527 0.6849 +vn -0.3497 -0.5753 0.7394 +vn -0.3372 0.6148 0.7130 +vn -0.3372 -0.6148 0.7130 +vn -0.3497 0.5753 0.7394 +vn -0.3239 -0.6527 0.6849 +vn -0.3613 0.5345 0.7640 +vn -0.3098 -0.6891 0.6551 +vn -0.3721 0.4924 0.7868 +vn -0.2950 -0.7238 0.6237 +vn -0.3820 0.4492 0.8077 +vn -0.2795 -0.7568 0.5909 +vn -0.3910 0.4048 0.8266 +vn -0.2632 -0.7880 0.5566 +vn -0.3990 0.3595 0.8435 +vn -0.2464 -0.8173 0.5209 +vn -0.4060 0.3133 0.8585 +vn -0.2289 -0.8446 0.4840 +vn -0.4121 0.2664 0.8713 +vn -0.0105 0.9997 0.0222 +vn -0.2109 -0.8698 0.4460 +vn -0.4172 0.2189 0.8821 +vn -0.0315 0.9973 0.0666 +vn -0.1924 -0.8930 0.4068 +vn -0.4213 0.1708 0.8907 +vn -0.0524 0.9925 0.1108 +vn -0.1734 -0.9140 0.3667 +vn -0.4243 0.1223 0.8972 +vn -0.0732 0.9852 0.1547 +vn -0.1540 -0.9328 0.3257 +vn -0.4264 0.0735 0.9015 +vn -0.0938 0.9756 0.1983 +vn -0.1343 -0.9494 0.2839 +vn -0.4274 0.0245 0.9037 +vn -0.1142 0.9637 0.2414 +vn -0.1142 -0.9637 0.2414 +vn -0.4274 -0.0245 0.9037 +vn -0.1343 0.9494 0.2839 +vn -0.0938 -0.9756 0.1983 +vn -0.4264 -0.0735 0.9015 +vn -0.1540 0.9328 0.3257 +vn -0.0732 -0.9852 0.1547 +vn -0.4243 -0.1223 0.8972 +vn -0.1734 0.9140 0.3667 +vn -0.0524 -0.9925 0.1108 +vn -0.4213 -0.1708 0.8907 +vn -0.1924 0.8930 0.4068 +vn -0.0315 -0.9973 0.0666 +vn -0.4172 -0.2189 0.8821 +vn -0.2109 0.8698 0.4460 +vn -0.0105 -0.9997 0.0222 +vn -0.4121 -0.2664 0.8713 +vn -0.2289 0.8446 0.4840 +vn -0.4060 -0.3133 0.8585 +vn -0.2464 0.8173 0.5209 +vn -0.4593 -0.4492 0.7663 +vn -0.3547 0.7238 0.5918 +vn -0.4474 -0.4924 0.7465 +vn -0.3726 0.6891 0.6216 +vn -0.4345 -0.5345 0.7249 +vn -0.3895 0.6527 0.6498 +vn -0.4205 -0.5753 0.7015 +vn -0.4055 0.6148 0.6765 +vn -0.4055 -0.6148 0.6765 +vn -0.4205 0.5753 0.7015 +vn -0.3895 -0.6527 0.6498 +vn -0.4345 0.5345 0.7249 +vn -0.3726 -0.6891 0.6216 +vn -0.4474 0.4924 0.7465 +vn -0.3547 -0.7238 0.5918 +vn -0.4593 0.4492 0.7663 +vn -0.3360 -0.7568 0.5606 +vn -0.4701 0.4048 0.7843 +vn -0.3165 -0.7880 0.5281 +vn -0.4797 0.3595 0.8004 +vn -0.2963 -0.8173 0.4943 +vn -0.4882 0.3133 0.8145 +vn -0.2753 -0.8446 0.4593 +vn -0.4955 0.2664 0.8267 +vn -0.0126 0.9997 0.0211 +vn -0.2536 -0.8698 0.4232 +vn -0.5016 0.2189 0.8369 +vn -0.0379 0.9973 0.0632 +vn -0.2314 -0.8930 0.3860 +vn -0.5066 0.1708 0.8451 +vn -0.0630 0.9925 0.1051 +vn -0.2085 -0.9140 0.3479 +vn -0.5102 0.1223 0.8513 +vn -0.0880 0.9852 0.1468 +vn -0.1852 -0.9328 0.3090 +vn -0.5127 0.0735 0.8554 +vn -0.1128 0.9756 0.1881 +vn -0.1614 -0.9494 0.2693 +vn -0.5139 0.0245 0.8575 +vn -0.1373 0.9637 0.2290 +vn -0.1373 -0.9637 0.2290 +vn -0.5139 -0.0245 0.8575 +vn -0.1614 0.9494 0.2693 +vn -0.1128 -0.9756 0.1881 +vn -0.5127 -0.0735 0.8554 +vn -0.1852 0.9328 0.3090 +vn -0.0880 -0.9852 0.1468 +vn -0.5102 -0.1223 0.8513 +vn -0.2085 0.9140 0.3479 +vn -0.0630 -0.9925 0.1051 +vn -0.5066 -0.1708 0.8451 +vn -0.2314 0.8930 0.3860 +vn -0.0379 -0.9973 0.0632 +vn -0.5016 -0.2189 0.8369 +vn -0.2536 0.8698 0.4232 +vn -0.0126 -0.9997 0.0211 +vn -0.4955 -0.2664 0.8267 +vn -0.2753 0.8446 0.4593 +vn -0.4882 -0.3133 0.8145 +vn -0.2963 0.8173 0.4943 +vn -0.4797 -0.3595 0.8004 +vn -0.3165 0.7880 0.5281 +vn -0.4701 -0.4048 0.7843 +vn -0.3360 0.7568 0.5606 +vn -0.5035 -0.5345 0.6788 +vn -0.4513 0.6527 0.6085 +vn -0.4872 -0.5753 0.6570 +vn -0.4698 0.6148 0.6335 +vn -0.4698 -0.6148 0.6335 +vn -0.4872 0.5753 0.6570 +vn -0.4513 -0.6527 0.6085 +vn -0.5035 0.5345 0.6788 +vn -0.4317 -0.6891 0.5821 +vn -0.5185 0.4924 0.6991 +vn -0.4110 -0.7238 0.5542 +vn -0.5322 0.4492 0.7176 +vn -0.3894 -0.7568 0.5250 +vn -0.5447 0.4048 0.7344 +vn -0.3668 -0.7880 0.4945 +vn -0.5559 0.3595 0.7495 +vn -0.3433 -0.8173 0.4629 +vn -0.5657 0.3133 0.7628 +vn -0.3190 -0.8446 0.4301 +vn -0.5742 0.2664 0.7742 +vn -0.0146 0.9997 0.0197 +vn -0.2939 -0.8698 0.3963 +vn -0.5813 0.2189 0.7837 +vn -0.0439 0.9973 0.0592 +vn -0.2681 -0.8930 0.3615 +vn -0.5870 0.1708 0.7914 +vn -0.0730 0.9925 0.0984 +vn -0.2416 -0.9140 0.3258 +vn -0.5912 0.1223 0.7972 +vn -0.1020 0.9852 0.1375 +vn -0.2146 -0.9328 0.2894 +vn -0.5941 0.0735 0.8010 +vn -0.1307 0.9756 0.1762 +vn -0.1871 -0.9494 0.2522 +vn -0.5955 0.0245 0.8030 +vn -0.1591 0.9637 0.2145 +vn -0.1591 -0.9637 0.2145 +vn -0.5955 -0.0245 0.8030 +vn -0.1871 0.9494 0.2522 +vn -0.1307 -0.9756 0.1762 +vn -0.5941 -0.0735 0.8010 +vn -0.2146 0.9328 0.2894 +vn -0.1020 -0.9852 0.1375 +vn -0.5912 -0.1223 0.7972 +vn -0.2416 0.9140 0.3258 +vn -0.0730 -0.9925 0.0984 +vn -0.5870 -0.1708 0.7914 +vn -0.2681 0.8930 0.3615 +vn -0.0439 -0.9973 0.0592 +vn -0.5813 -0.2189 0.7837 +vn -0.2939 0.8698 0.3963 +vn -0.0146 -0.9997 0.0197 +vn -0.5742 -0.2664 0.7742 +vn -0.3190 0.8446 0.4301 +vn -0.5657 -0.3133 0.7628 +vn -0.3433 0.8173 0.4629 +vn -0.5559 -0.3595 0.7495 +vn -0.3668 0.7880 0.4945 +vn -0.5447 -0.4048 0.7344 +vn -0.3894 0.7568 0.5250 +vn -0.5322 -0.4492 0.7176 +vn -0.4110 0.7238 0.5542 +vn -0.5185 -0.4924 0.6991 +vn -0.4317 0.6891 0.5821 +vn -0.6665 0.1223 0.7354 +vn -0.1149 0.9852 0.1268 +vn -0.2419 -0.9328 0.2669 +vn -0.6697 0.0735 0.7389 +vn -0.1473 0.9756 0.1625 +vn -0.2109 -0.9494 0.2327 +vn -0.6714 0.0245 0.7407 +vn -0.1793 0.9637 0.1978 +vn -0.1793 -0.9637 0.1978 +vn -0.6714 -0.0245 0.7407 +vn -0.2109 0.9494 0.2327 +vn -0.1473 -0.9756 0.1625 +vn -0.6697 -0.0735 0.7389 +vn -0.2419 0.9328 0.2669 +vn -0.1149 -0.9852 0.1268 +vn -0.6665 -0.1223 0.7354 +vn -0.2724 0.9140 0.3006 +vn -0.0823 -0.9925 0.0908 +vn -0.6617 -0.1708 0.7301 +vn -0.3022 0.8930 0.3335 +vn -0.0495 -0.9973 0.0546 +vn -0.6553 -0.2189 0.7230 +vn -0.3313 0.8698 0.3655 +vn -0.0165 -0.9997 0.0182 +vn -0.6473 -0.2664 0.7142 +vn -0.3596 0.8446 0.3967 +vn -0.6377 -0.3133 0.7036 +vn -0.3870 0.8173 0.4270 +vn -0.6267 -0.3595 0.6914 +vn -0.4135 0.7880 0.4562 +vn -0.6141 -0.4048 0.6775 +vn -0.4389 0.7568 0.4843 +vn -0.6000 -0.4492 0.6620 +vn -0.4634 0.7238 0.5112 +vn -0.5845 -0.4924 0.6449 +vn -0.4867 0.6891 0.5369 +vn -0.5676 -0.5345 0.6262 +vn -0.5088 0.6527 0.5613 +vn -0.5493 -0.5753 0.6060 +vn -0.5297 0.6148 0.5844 +vn -0.5297 -0.6148 0.5844 +vn -0.5493 0.5753 0.6060 +vn -0.5088 -0.6527 0.5613 +vn -0.5676 0.5345 0.6262 +vn -0.4867 -0.6891 0.5369 +vn -0.5845 0.4924 0.6449 +vn -0.4634 -0.7238 0.5112 +vn -0.6000 0.4492 0.6620 +vn -0.4389 -0.7568 0.4843 +vn -0.6141 0.4048 0.6775 +vn -0.4135 -0.7880 0.4562 +vn -0.6267 0.3595 0.6914 +vn -0.3870 -0.8173 0.4270 +vn -0.6377 0.3133 0.7036 +vn -0.3596 -0.8446 0.3967 +vn -0.6473 0.2664 0.7142 +vn -0.0165 0.9997 0.0182 +vn -0.3313 -0.8698 0.3655 +vn -0.6553 0.2189 0.7230 +vn -0.0495 0.9973 0.0546 +vn -0.3022 -0.8930 0.3335 +vn -0.6617 0.1708 0.7301 +vn -0.0823 0.9925 0.0908 +vn -0.2724 -0.9140 0.3006 +vn -0.7407 0.0245 0.6714 +vn -0.1978 0.9637 0.1793 +vn -0.1978 -0.9637 0.1793 +vn -0.7407 -0.0245 0.6714 +vn -0.2327 0.9494 0.2109 +vn -0.1625 -0.9756 0.1473 +vn -0.7389 -0.0735 0.6697 +vn -0.2669 0.9328 0.2419 +vn -0.1268 -0.9852 0.1149 +vn -0.7354 -0.1223 0.6665 +vn -0.3006 0.9140 0.2724 +vn -0.0908 -0.9925 0.0823 +vn -0.7301 -0.1708 0.6617 +vn -0.3335 0.8930 0.3022 +vn -0.0546 -0.9973 0.0495 +vn -0.7230 -0.2189 0.6553 +vn -0.3655 0.8698 0.3313 +vn -0.0182 -0.9997 0.0165 +vn -0.7142 -0.2664 0.6473 +vn -0.3967 0.8446 0.3596 +vn -0.7036 -0.3133 0.6377 +vn -0.4270 0.8173 0.3870 +vn -0.6914 -0.3595 0.6267 +vn -0.4562 0.7880 0.4135 +vn -0.6775 -0.4048 0.6141 +vn -0.4843 0.7568 0.4389 +vn -0.6620 -0.4492 0.6000 +vn -0.5112 0.7238 0.4634 +vn -0.6449 -0.4924 0.5845 +vn -0.5369 0.6891 0.4867 +vn -0.6262 -0.5345 0.5676 +vn -0.5613 0.6527 0.5088 +vn -0.6060 -0.5753 0.5493 +vn -0.5844 0.6148 0.5297 +vn -0.5844 -0.6148 0.5297 +vn -0.6060 0.5753 0.5493 +vn -0.5613 -0.6527 0.5088 +vn -0.6262 0.5345 0.5676 +vn -0.5369 -0.6891 0.4867 +vn -0.6449 0.4924 0.5845 +vn -0.5112 -0.7238 0.4634 +vn -0.6620 0.4492 0.6000 +vn -0.4843 -0.7568 0.4389 +vn -0.6775 0.4048 0.6141 +vn -0.4562 -0.7880 0.4135 +vn -0.6914 0.3595 0.6267 +vn -0.4270 -0.8173 0.3870 +vn -0.7036 0.3133 0.6377 +vn -0.3967 -0.8446 0.3596 +vn -0.7142 0.2664 0.6473 +vn -0.0182 0.9997 0.0165 +vn -0.3655 -0.8698 0.3313 +vn -0.7230 0.2189 0.6553 +vn -0.0546 0.9973 0.0495 +vn -0.3335 -0.8930 0.3022 +vn -0.7301 0.1708 0.6617 +vn -0.0908 0.9925 0.0823 +vn -0.3006 -0.9140 0.2724 +vn -0.7354 0.1223 0.6665 +vn -0.1268 0.9852 0.1149 +vn -0.2669 -0.9328 0.2419 +vn -0.7389 0.0735 0.6697 +vn -0.1625 0.9756 0.1473 +vn -0.2327 -0.9494 0.2109 +vn -0.8010 -0.0735 0.5941 +vn -0.2894 0.9328 0.2146 +vn -0.1375 -0.9852 0.1020 +vn -0.7972 -0.1223 0.5912 +vn -0.3258 0.9140 0.2416 +vn -0.0984 -0.9925 0.0730 +vn -0.7914 -0.1708 0.5870 +vn -0.3615 0.8930 0.2681 +vn -0.0592 -0.9973 0.0439 +vn -0.7837 -0.2189 0.5813 +vn -0.3963 0.8698 0.2939 +vn -0.0197 -0.9997 0.0146 +vn -0.7742 -0.2664 0.5742 +vn -0.4301 0.8446 0.3190 +vn -0.7628 -0.3133 0.5657 +vn -0.4629 0.8173 0.3433 +vn -0.7495 -0.3595 0.5559 +vn -0.4945 0.7880 0.3668 +vn -0.7344 -0.4048 0.5447 +vn -0.5250 0.7568 0.3894 +vn -0.7176 -0.4492 0.5322 +vn -0.5542 0.7238 0.4110 +vn -0.6991 -0.4924 0.5185 +vn -0.5821 0.6891 0.4317 +vn -0.6788 -0.5345 0.5035 +vn -0.6085 0.6527 0.4513 +vn -0.6570 -0.5753 0.4872 +vn -0.6335 0.6148 0.4698 +vn -0.6335 -0.6148 0.4698 +vn -0.6570 0.5753 0.4872 +vn -0.6085 -0.6527 0.4513 +vn -0.6788 0.5345 0.5035 +vn -0.5821 -0.6891 0.4317 +vn -0.6991 0.4924 0.5185 +vn -0.5542 -0.7238 0.4110 +vn -0.7176 0.4492 0.5322 +vn -0.5250 -0.7568 0.3894 +vn -0.7344 0.4048 0.5447 +vn -0.4945 -0.7880 0.3668 +vn -0.7495 0.3595 0.5559 +vn -0.4629 -0.8173 0.3433 +vn -0.7628 0.3133 0.5657 +vn -0.4301 -0.8446 0.3190 +vn -0.7742 0.2664 0.5742 +vn -0.0197 0.9997 0.0146 +vn -0.3963 -0.8698 0.2939 +vn -0.7837 0.2189 0.5813 +vn -0.0592 0.9973 0.0439 +vn -0.3615 -0.8930 0.2681 +vn -0.7914 0.1708 0.5870 +vn -0.0984 0.9925 0.0730 +vn -0.3258 -0.9140 0.2416 +vn -0.7972 0.1223 0.5912 +vn -0.1375 0.9852 0.1020 +vn -0.2894 -0.9328 0.2146 +vn -0.8010 0.0735 0.5941 +vn -0.1762 0.9756 0.1307 +vn -0.2522 -0.9494 0.1871 +vn -0.8030 0.0245 0.5955 +vn -0.2145 0.9637 0.1591 +vn -0.2145 -0.9637 0.1591 +vn -0.8030 -0.0245 0.5955 +vn -0.2522 0.9494 0.1871 +vn -0.1762 -0.9756 0.1307 +vn -0.8451 -0.1708 0.5066 +vn -0.3860 0.8930 0.2314 +vn -0.0632 -0.9973 0.0379 +vn -0.8369 -0.2189 0.5016 +vn -0.4232 0.8698 0.2536 +vn -0.0211 -0.9997 0.0126 +vn -0.8267 -0.2664 0.4955 +vn -0.4593 0.8446 0.2753 +vn -0.8145 -0.3133 0.4882 +vn -0.4943 0.8173 0.2963 +vn -0.8004 -0.3595 0.4797 +vn -0.5281 0.7880 0.3165 +vn -0.7843 -0.4048 0.4701 +vn -0.5606 0.7568 0.3360 +vn -0.7663 -0.4492 0.4593 +vn -0.5918 0.7238 0.3547 +vn -0.7465 -0.4924 0.4474 +vn -0.6216 0.6891 0.3726 +vn -0.7249 -0.5345 0.4345 +vn -0.6498 0.6527 0.3895 +vn -0.7015 -0.5753 0.4205 +vn -0.6765 0.6148 0.4055 +vn -0.6765 -0.6148 0.4055 +vn -0.7015 0.5753 0.4205 +vn -0.6498 -0.6527 0.3895 +vn -0.7249 0.5345 0.4345 +vn -0.6216 -0.6891 0.3726 +vn -0.7465 0.4924 0.4474 +vn -0.5918 -0.7238 0.3547 +vn -0.7663 0.4492 0.4593 +vn -0.5606 -0.7568 0.3360 +vn -0.7843 0.4048 0.4701 +vn -0.5281 -0.7880 0.3165 +vn -0.8004 0.3595 0.4797 +vn -0.4943 -0.8173 0.2963 +vn -0.8145 0.3133 0.4882 +vn -0.4593 -0.8446 0.2753 +vn -0.8267 0.2664 0.4955 +vn -0.0211 0.9997 0.0126 +vn -0.4232 -0.8698 0.2536 +vn -0.8369 0.2189 0.5016 +vn -0.0632 0.9973 0.0379 +vn -0.3860 -0.8930 0.2314 +vn -0.8451 0.1708 0.5066 +vn -0.1051 0.9925 0.0630 +vn -0.3479 -0.9140 0.2085 +vn -0.8513 0.1223 0.5102 +vn -0.1468 0.9852 0.0880 +vn -0.3090 -0.9328 0.1852 +vn -0.8554 0.0735 0.5127 +vn -0.1881 0.9756 0.1128 +vn -0.2693 -0.9494 0.1614 +vn -0.8575 0.0245 0.5139 +vn -0.2290 0.9637 0.1373 +vn -0.2290 -0.9637 0.1373 +vn -0.8575 -0.0245 0.5139 +vn -0.2693 0.9494 0.1614 +vn -0.1881 -0.9756 0.1128 +vn -0.8554 -0.0735 0.5127 +vn -0.3090 0.9328 0.1852 +vn -0.1468 -0.9852 0.0880 +vn -0.8513 -0.1223 0.5102 +vn -0.3479 0.9140 0.2085 +vn -0.1051 -0.9925 0.0630 +vn -0.8713 -0.2664 0.4121 +vn -0.4840 0.8446 0.2289 +vn -0.8585 -0.3133 0.4060 +vn -0.5209 0.8173 0.2464 +vn -0.8435 -0.3595 0.3990 +vn -0.5566 0.7880 0.2632 +vn -0.8266 -0.4048 0.3910 +vn -0.5909 0.7568 0.2795 +vn -0.8077 -0.4492 0.3820 +vn -0.6237 0.7238 0.2950 +vn -0.7868 -0.4924 0.3721 +vn -0.6551 0.6891 0.3098 +vn -0.7640 -0.5345 0.3613 +vn -0.6849 0.6527 0.3239 +vn -0.7394 -0.5753 0.3497 +vn -0.7130 0.6148 0.3372 +vn -0.7130 -0.6148 0.3372 +vn -0.7394 0.5753 0.3497 +vn -0.6849 -0.6527 0.3239 +vn -0.7640 0.5345 0.3613 +vn -0.6551 -0.6891 0.3098 +vn -0.7868 0.4924 0.3721 +vn -0.6237 -0.7238 0.2950 +vn -0.8077 0.4492 0.3820 +vn -0.5909 -0.7568 0.2795 +vn -0.8266 0.4048 0.3910 +vn -0.5566 -0.7880 0.2632 +vn -0.8435 0.3595 0.3990 +vn -0.5210 -0.8173 0.2464 +vn -0.8585 0.3133 0.4060 +vn -0.4840 -0.8446 0.2289 +vn -0.8713 0.2664 0.4121 +vn -0.0222 0.9997 0.0105 +vn -0.4460 -0.8698 0.2109 +vn -0.8821 0.2189 0.4172 +vn -0.0666 0.9973 0.0315 +vn -0.4068 -0.8930 0.1924 +vn -0.8907 0.1708 0.4213 +vn -0.1108 0.9925 0.0524 +vn -0.3667 -0.9140 0.1734 +vn -0.8972 0.1223 0.4243 +vn -0.1547 0.9852 0.0732 +vn -0.3257 -0.9328 0.1540 +vn -0.9015 0.0735 0.4264 +vn -0.1983 0.9756 0.0938 +vn -0.2839 -0.9494 0.1343 +vn -0.9037 0.0245 0.4274 +vn -0.2414 0.9637 0.1142 +vn -0.2414 -0.9637 0.1142 +vn -0.9037 -0.0245 0.4274 +vn -0.2839 0.9494 0.1343 +vn -0.1983 -0.9756 0.0938 +vn -0.9015 -0.0735 0.4264 +vn -0.3257 0.9328 0.1540 +vn -0.1547 -0.9852 0.0732 +vn -0.8972 -0.1223 0.4243 +vn -0.3667 0.9140 0.1734 +vn -0.1108 -0.9925 0.0524 +vn -0.8907 -0.1708 0.4213 +vn -0.4068 0.8930 0.1924 +vn -0.0666 -0.9973 0.0315 +vn -0.8821 -0.2189 0.4172 +vn -0.4460 0.8698 0.2109 +vn -0.0222 -0.9997 0.0105 +vn -0.8786 -0.3595 0.3144 +vn -0.5797 0.7880 0.2074 +vn -0.8609 -0.4048 0.3080 +vn -0.6154 0.7568 0.2202 +vn -0.8412 -0.4492 0.3010 +vn -0.6496 0.7238 0.2324 +vn -0.8195 -0.4924 0.2932 +vn -0.6823 0.6891 0.2441 +vn -0.7957 -0.5345 0.2847 +vn -0.7133 0.6527 0.2552 +vn -0.7701 -0.5753 0.2755 +vn -0.7426 0.6148 0.2657 +vn -0.7426 -0.6148 0.2657 +vn -0.7701 0.5753 0.2755 +vn -0.7133 -0.6527 0.2552 +vn -0.7957 0.5345 0.2847 +vn -0.6823 -0.6891 0.2441 +vn -0.8195 0.4924 0.2932 +vn -0.6496 -0.7238 0.2324 +vn -0.8412 0.4492 0.3010 +vn -0.6154 -0.7568 0.2202 +vn -0.8609 0.4048 0.3081 +vn -0.5797 -0.7880 0.2074 +vn -0.8786 0.3595 0.3144 +vn -0.5426 -0.8173 0.1941 +vn -0.8941 0.3133 0.3199 +vn -0.5042 -0.8446 0.1804 +vn -0.9075 0.2664 0.3247 +vn -0.0231 0.9997 0.0083 +vn -0.4645 -0.8698 0.1662 +vn -0.9187 0.2189 0.3287 +vn -0.0693 0.9973 0.0248 +vn -0.4237 -0.8930 0.1516 +vn -0.9277 0.1708 0.3319 +vn -0.1154 0.9925 0.0413 +vn -0.3819 -0.9140 0.1367 +vn -0.9345 0.1223 0.3344 +vn -0.1612 0.9852 0.0577 +vn -0.3392 -0.9328 0.1214 +vn -0.9390 0.0735 0.3360 +vn -0.2065 0.9756 0.0739 +vn -0.2957 -0.9494 0.1058 +vn -0.9413 0.0245 0.3368 +vn -0.2514 0.9637 0.0900 +vn -0.2514 -0.9637 0.0900 +vn -0.9413 -0.0245 0.3368 +vn -0.2957 0.9494 0.1058 +vn -0.2065 -0.9756 0.0739 +vn -0.9390 -0.0735 0.3360 +vn -0.3392 0.9328 0.1214 +vn -0.1612 -0.9852 0.0577 +vn -0.9345 -0.1223 0.3344 +vn -0.3819 0.9140 0.1367 +vn -0.1154 -0.9925 0.0413 +vn -0.9277 -0.1708 0.3319 +vn -0.4237 0.8930 0.1516 +vn -0.0693 -0.9973 0.0248 +vn -0.9187 -0.2189 0.3287 +vn -0.4645 0.8698 0.1662 +vn -0.0231 -0.9997 0.0083 +vn -0.9075 -0.2664 0.3247 +vn -0.5042 0.8446 0.1804 +vn -0.8941 -0.3133 0.3199 +vn -0.5426 0.8173 0.1941 +vn -0.8667 -0.4492 0.2171 +vn -0.6693 0.7238 0.1676 +vn -0.8443 -0.4924 0.2115 +vn -0.7029 0.6891 0.1761 +vn -0.8198 -0.5345 0.2054 +vn -0.7349 0.6527 0.1841 +vn -0.7934 -0.5753 0.1987 +vn -0.7651 0.6148 0.1916 +vn -0.7651 -0.6148 0.1916 +vn -0.7934 0.5753 0.1987 +vn -0.7349 -0.6527 0.1841 +vn -0.8198 0.5345 0.2054 +vn -0.7029 -0.6891 0.1761 +vn -0.8443 0.4924 0.2115 +vn -0.6693 -0.7238 0.1677 +vn -0.8667 0.4492 0.2171 +vn -0.6340 -0.7568 0.1588 +vn -0.8870 0.4048 0.2222 +vn -0.5972 -0.7880 0.1496 +vn -0.9052 0.3595 0.2267 +vn -0.5590 -0.8173 0.1400 +vn -0.9212 0.3133 0.2307 +vn -0.5194 -0.8446 0.1301 +vn -0.9350 0.2664 0.2342 +vn -0.0238 0.9997 0.0060 +vn -0.4786 -0.8698 0.1199 +vn -0.9465 0.2189 0.2371 +vn -0.0714 0.9973 0.0179 +vn -0.4366 -0.8930 0.1094 +vn -0.9558 0.1707 0.2394 +vn -0.1189 0.9925 0.0298 +vn -0.3935 -0.9140 0.0986 +vn -0.9628 0.1223 0.2412 +vn -0.1660 0.9852 0.0416 +vn -0.3495 -0.9328 0.0875 +vn -0.9674 0.0735 0.2423 +vn -0.2128 0.9756 0.0533 +vn -0.3046 -0.9494 0.0763 +vn -0.9697 0.0245 0.2429 +vn -0.2590 0.9637 0.0649 +vn -0.2590 -0.9637 0.0649 +vn -0.9697 -0.0245 0.2429 +vn -0.3046 0.9494 0.0763 +vn -0.2128 -0.9756 0.0533 +vn -0.9674 -0.0735 0.2423 +vn -0.3495 0.9328 0.0875 +vn -0.1660 -0.9852 0.0416 +vn -0.9628 -0.1223 0.2412 +vn -0.3935 0.9140 0.0986 +vn -0.1189 -0.9925 0.0298 +vn -0.9558 -0.1707 0.2394 +vn -0.4366 0.8930 0.1094 +vn -0.0714 -0.9973 0.0179 +vn -0.9465 -0.2189 0.2371 +vn -0.4786 0.8698 0.1199 +vn -0.0238 -0.9997 0.0060 +vn -0.9350 -0.2664 0.2342 +vn -0.5194 0.8446 0.1301 +vn -0.9212 -0.3133 0.2307 +vn -0.5590 0.8173 0.1400 +vn -0.9052 -0.3595 0.2267 +vn -0.5972 0.7880 0.1496 +vn -0.8870 -0.4048 0.2222 +vn -0.6340 0.7568 0.1588 +vn -0.8360 -0.5345 0.1240 +vn -0.7494 0.6527 0.1112 +vn -0.8091 -0.5753 0.1200 +vn -0.7802 0.6148 0.1157 +vn -0.7802 -0.6148 0.1157 +vn -0.8091 0.5753 0.1200 +vn -0.7494 -0.6527 0.1112 +vn -0.8360 0.5345 0.1240 +vn -0.7168 -0.6891 0.1063 +vn -0.8609 0.4924 0.1277 +vn -0.6825 -0.7238 0.1012 +vn -0.8838 0.4492 0.1311 +vn -0.6466 -0.7568 0.0959 +vn -0.9045 0.4048 0.1342 +vn -0.6090 -0.7880 0.0903 +vn -0.9230 0.3595 0.1369 +vn -0.5700 -0.8173 0.0846 +vn -0.9394 0.3133 0.1393 +vn -0.5297 -0.8446 0.0786 +vn -0.9534 0.2664 0.1414 +vn -0.0243 0.9997 0.0036 +vn -0.4880 -0.8698 0.0724 +vn -0.9652 0.2189 0.1432 +vn -0.0729 0.9973 0.0108 +vn -0.4452 -0.8930 0.0660 +vn -0.9746 0.1707 0.1446 +vn -0.1212 0.9925 0.0180 +vn -0.4013 -0.9140 0.0595 +vn -0.9818 0.1223 0.1456 +vn -0.1693 0.9852 0.0251 +vn -0.3564 -0.9328 0.0529 +vn -0.9865 0.0735 0.1463 +vn -0.2170 0.9756 0.0322 +vn -0.3106 -0.9494 0.0461 +vn -0.9889 0.0245 0.1467 +vn -0.2641 0.9637 0.0392 +vn -0.2641 -0.9637 0.0392 +vn -0.9889 -0.0245 0.1467 +vn -0.3106 0.9494 0.0461 +vn -0.2170 -0.9756 0.0322 +vn -0.9865 -0.0735 0.1463 +vn -0.3564 0.9328 0.0529 +vn -0.1693 -0.9852 0.0251 +vn -0.9818 -0.1223 0.1456 +vn -0.4013 0.9140 0.0595 +vn -0.1212 -0.9925 0.0180 +vn -0.9746 -0.1707 0.1446 +vn -0.4452 0.8930 0.0660 +vn -0.0729 -0.9973 0.0108 +vn -0.9652 -0.2189 0.1432 +vn -0.4880 0.8698 0.0724 +vn -0.0243 -0.9997 0.0036 +vn -0.9534 -0.2664 0.1414 +vn -0.5297 0.8446 0.0786 +vn -0.9394 -0.3133 0.1393 +vn -0.5700 0.8173 0.0846 +vn -0.9230 -0.3595 0.1369 +vn -0.6090 0.7880 0.0903 +vn -0.9045 -0.4048 0.1342 +vn -0.6465 0.7568 0.0959 +vn -0.8838 -0.4492 0.1311 +vn -0.6825 0.7238 0.1012 +vn -0.8609 -0.4924 0.1277 +vn -0.7168 0.6891 0.1063 +vn -0.7878 -0.6148 0.0387 +vn -0.8169 0.5753 0.0401 +vn -0.7567 -0.6527 0.0372 +vn -0.8441 0.5345 0.0415 +vn -0.7238 -0.6891 0.0356 +vn -0.8693 0.4924 0.0427 +vn -0.6891 -0.7238 0.0339 +vn -0.8924 0.4492 0.0438 +vn -0.6528 -0.7568 0.0321 +vn -0.9133 0.4048 0.0449 +vn -0.6149 -0.7880 0.0302 +vn -0.9320 0.3595 0.0458 +vn -0.5756 -0.8173 0.0283 +vn -0.9485 0.3133 0.0466 +vn -0.5348 -0.8446 0.0263 +vn -0.9627 0.2664 0.0473 +vn -0.0245 0.9997 0.0012 +vn -0.4928 -0.8698 0.0242 +vn -0.9746 0.2189 0.0479 +vn -0.0736 0.9973 0.0036 +vn -0.4495 -0.8930 0.0221 +vn -0.9841 0.1707 0.0483 +vn -0.1224 0.9925 0.0060 +vn -0.4052 -0.9140 0.0199 +vn -0.9913 0.1223 0.0487 +vn -0.1710 0.9852 0.0084 +vn -0.3598 -0.9328 0.0177 +vn -0.9961 0.0735 0.0489 +vn -0.2191 0.9756 0.0108 +vn -0.3136 -0.9494 0.0154 +vn -0.9985 0.0245 0.0491 +vn -0.2667 0.9637 0.0131 +vn -0.2667 -0.9637 0.0131 +vn -0.9985 -0.0245 0.0491 +vn -0.3136 0.9494 0.0154 +vn -0.2191 -0.9756 0.0108 +vn -0.9961 -0.0735 0.0489 +vn -0.3598 0.9328 0.0177 +vn -0.1710 -0.9852 0.0084 +vn -0.9913 -0.1223 0.0487 +vn -0.4052 0.9140 0.0199 +vn -0.1224 -0.9925 0.0060 +vn -0.9841 -0.1707 0.0483 +vn -0.4495 0.8930 0.0221 +vn -0.0736 -0.9973 0.0036 +vn -0.9746 -0.2189 0.0479 +vn -0.4928 0.8698 0.0242 +vn -0.0245 -0.9997 0.0012 +vn -0.9627 -0.2664 0.0473 +vn -0.5348 0.8446 0.0263 +vn -0.9485 -0.3133 0.0466 +vn -0.5756 0.8173 0.0283 +vn -0.9320 -0.3595 0.0458 +vn -0.6149 0.7880 0.0302 +vn -0.9133 -0.4048 0.0449 +vn -0.6528 0.7568 0.0321 +vn -0.8924 -0.4492 0.0438 +vn -0.6891 0.7238 0.0339 +vn -0.8693 -0.4924 0.0427 +vn -0.7238 0.6891 0.0356 +vn -0.8441 -0.5345 0.0415 +vn -0.7567 0.6527 0.0372 +vn -0.8169 -0.5753 0.0401 +vn -0.7878 0.6148 0.0387 +vn -0.7238 -0.6891 -0.0356 +vn -0.8693 0.4924 -0.0427 +vn -0.6891 -0.7238 -0.0339 +vn -0.8924 0.4492 -0.0438 +vn -0.6528 -0.7568 -0.0321 +vn -0.9133 0.4048 -0.0449 +vn -0.6149 -0.7880 -0.0302 +vn -0.9320 0.3595 -0.0458 +vn -0.5756 -0.8173 -0.0283 +vn -0.9485 0.3133 -0.0466 +vn -0.5348 -0.8446 -0.0263 +vn -0.9627 0.2664 -0.0473 +vn -0.0245 0.9997 -0.0012 +vn -0.4928 -0.8698 -0.0242 +vn -0.9746 0.2189 -0.0479 +vn -0.0736 0.9973 -0.0036 +vn -0.4495 -0.8930 -0.0221 +vn -0.9841 0.1707 -0.0483 +vn -0.1224 0.9925 -0.0060 +vn -0.4052 -0.9140 -0.0199 +vn -0.9913 0.1223 -0.0487 +vn -0.1710 0.9852 -0.0084 +vn -0.3598 -0.9328 -0.0177 +vn -0.9961 0.0735 -0.0489 +vn -0.2191 0.9756 -0.0108 +vn -0.3136 -0.9494 -0.0154 +vn -0.9985 0.0245 -0.0491 +vn -0.2667 0.9637 -0.0131 +vn -0.2667 -0.9637 -0.0131 +vn -0.9985 -0.0245 -0.0491 +vn -0.3136 0.9494 -0.0154 +vn -0.2191 -0.9756 -0.0108 +vn -0.9961 -0.0735 -0.0489 +vn -0.3598 0.9328 -0.0177 +vn -0.1710 -0.9852 -0.0084 +vn -0.9913 -0.1223 -0.0487 +vn -0.4052 0.9140 -0.0199 +vn -0.1224 -0.9925 -0.0060 +vn -0.9841 -0.1707 -0.0483 +vn -0.4495 0.8930 -0.0221 +vn -0.0736 -0.9973 -0.0036 +vn -0.9746 -0.2189 -0.0479 +vn -0.4928 0.8698 -0.0242 +vn -0.0245 -0.9997 -0.0012 +vn -0.9627 -0.2664 -0.0473 +vn -0.5348 0.8446 -0.0263 +vn -0.9485 -0.3133 -0.0466 +vn -0.5756 0.8173 -0.0283 +vn -0.9320 -0.3595 -0.0458 +vn -0.6149 0.7880 -0.0302 +vn -0.9133 -0.4048 -0.0449 +vn -0.6528 0.7568 -0.0321 +vn -0.8924 -0.4492 -0.0438 +vn -0.6891 0.7238 -0.0339 +vn -0.8693 -0.4924 -0.0427 +vn -0.7238 0.6891 -0.0356 +vn -0.8441 -0.5345 -0.0415 +vn -0.7567 0.6527 -0.0372 +vn -0.8169 -0.5753 -0.0401 +vn -0.7878 0.6148 -0.0387 +vn -0.7878 -0.6148 -0.0387 +vn -0.8169 0.5753 -0.0401 +vn -0.7567 -0.6527 -0.0372 +vn -0.8441 0.5345 -0.0415 +vn -0.6466 -0.7568 -0.0959 +vn -0.9045 0.4048 -0.1342 +vn -0.6090 -0.7880 -0.0903 +vn -0.9230 0.3595 -0.1369 +vn -0.5700 -0.8173 -0.0846 +vn -0.9394 0.3133 -0.1393 +vn -0.5297 -0.8446 -0.0786 +vn -0.9534 0.2664 -0.1414 +vn -0.0243 0.9997 -0.0036 +vn -0.4880 -0.8698 -0.0724 +vn -0.9652 0.2189 -0.1432 +vn -0.0729 0.9973 -0.0108 +vn -0.4452 -0.8930 -0.0660 +vn -0.9747 0.1707 -0.1446 +vn -0.1212 0.9925 -0.0180 +vn -0.4013 -0.9140 -0.0595 +vn -0.9818 0.1223 -0.1456 +vn -0.1693 0.9852 -0.0251 +vn -0.3564 -0.9328 -0.0529 +vn -0.9865 0.0735 -0.1463 +vn -0.2170 0.9756 -0.0322 +vn -0.3106 -0.9494 -0.0461 +vn -0.9889 0.0245 -0.1467 +vn -0.2641 0.9637 -0.0392 +vn -0.2641 -0.9637 -0.0392 +vn -0.9889 -0.0245 -0.1467 +vn -0.3106 0.9494 -0.0461 +vn -0.2170 -0.9756 -0.0322 +vn -0.9865 -0.0735 -0.1463 +vn -0.3564 0.9328 -0.0529 +vn -0.1693 -0.9852 -0.0251 +vn -0.9818 -0.1223 -0.1456 +vn -0.4013 0.9140 -0.0595 +vn -0.1212 -0.9925 -0.0180 +vn -0.9747 -0.1707 -0.1446 +vn -0.4452 0.8930 -0.0660 +vn -0.0729 -0.9973 -0.0108 +vn -0.9652 -0.2189 -0.1432 +vn -0.4880 0.8698 -0.0724 +vn -0.0243 -0.9997 -0.0036 +vn -0.9534 -0.2664 -0.1414 +vn -0.5297 0.8446 -0.0786 +vn -0.9394 -0.3133 -0.1393 +vn -0.5700 0.8173 -0.0846 +vn -0.9230 -0.3595 -0.1369 +vn -0.6090 0.7880 -0.0903 +vn -0.9045 -0.4048 -0.1342 +vn -0.6465 0.7568 -0.0959 +vn -0.8838 -0.4492 -0.1311 +vn -0.6825 0.7238 -0.1012 +vn -0.8609 -0.4924 -0.1277 +vn -0.7168 0.6891 -0.1063 +vn -0.8360 -0.5345 -0.1240 +vn -0.7494 0.6527 -0.1112 +vn -0.8091 -0.5753 -0.1200 +vn -0.7802 0.6148 -0.1157 +vn -0.7802 -0.6148 -0.1157 +vn -0.8091 0.5753 -0.1200 +vn -0.7494 -0.6527 -0.1112 +vn -0.8360 0.5345 -0.1240 +vn -0.7168 -0.6891 -0.1063 +vn -0.8609 0.4924 -0.1277 +vn -0.6825 -0.7238 -0.1012 +vn -0.8838 0.4492 -0.1311 +vn -0.5590 -0.8173 -0.1400 +vn -0.9212 0.3133 -0.2307 +vn -0.5194 -0.8446 -0.1301 +vn -0.9350 0.2664 -0.2342 +vn -0.0238 0.9997 -0.0060 +vn -0.4786 -0.8698 -0.1199 +vn -0.9465 0.2189 -0.2371 +vn -0.0714 0.9973 -0.0179 +vn -0.4366 -0.8930 -0.1094 +vn -0.9558 0.1707 -0.2394 +vn -0.1189 0.9925 -0.0298 +vn -0.3935 -0.9140 -0.0986 +vn -0.9628 0.1223 -0.2412 +vn -0.1660 0.9852 -0.0416 +vn -0.3495 -0.9328 -0.0875 +vn -0.9674 0.0735 -0.2423 +vn -0.2128 0.9756 -0.0533 +vn -0.3046 -0.9494 -0.0763 +vn -0.9697 0.0245 -0.2429 +vn -0.2590 0.9637 -0.0649 +vn -0.2590 -0.9637 -0.0649 +vn -0.9697 -0.0245 -0.2429 +vn -0.3046 0.9494 -0.0763 +vn -0.2128 -0.9756 -0.0533 +vn -0.9674 -0.0735 -0.2423 +vn -0.3495 0.9328 -0.0875 +vn -0.1660 -0.9852 -0.0416 +vn -0.9628 -0.1223 -0.2412 +vn -0.3935 0.9140 -0.0986 +vn -0.1189 -0.9925 -0.0298 +vn -0.9558 -0.1707 -0.2394 +vn -0.4366 0.8930 -0.1094 +vn -0.0714 -0.9973 -0.0179 +vn -0.9465 -0.2189 -0.2371 +vn -0.4786 0.8698 -0.1199 +vn -0.0238 -0.9997 -0.0060 +vn -0.9350 -0.2664 -0.2342 +vn -0.5194 0.8446 -0.1301 +vn -0.9212 -0.3133 -0.2307 +vn -0.5590 0.8173 -0.1400 +vn -0.9052 -0.3595 -0.2267 +vn -0.5972 0.7880 -0.1496 +vn -0.8870 -0.4048 -0.2222 +vn -0.6340 0.7568 -0.1588 +vn -0.8667 -0.4492 -0.2171 +vn -0.6693 0.7238 -0.1677 +vn -0.8443 -0.4924 -0.2115 +vn -0.7030 0.6891 -0.1761 +vn -0.8198 -0.5345 -0.2054 +vn -0.7349 0.6527 -0.1841 +vn -0.7934 -0.5753 -0.1987 +vn -0.7651 0.6148 -0.1916 +vn -0.7651 -0.6148 -0.1916 +vn -0.7934 0.5753 -0.1987 +vn -0.7349 -0.6527 -0.1841 +vn -0.8198 0.5345 -0.2054 +vn -0.7030 -0.6891 -0.1761 +vn -0.8443 0.4924 -0.2115 +vn -0.6693 -0.7238 -0.1676 +vn -0.8667 0.4492 -0.2171 +vn -0.6340 -0.7568 -0.1588 +vn -0.8870 0.4048 -0.2222 +vn -0.5972 -0.7880 -0.1496 +vn -0.9052 0.3595 -0.2267 +vn -0.9187 0.2189 -0.3287 +vn -0.0693 0.9973 -0.0248 +vn -0.2065 -0.9756 -0.0739 +vn -0.9277 0.1707 -0.3319 +vn -0.1154 0.9925 -0.0413 +vn -0.1612 -0.9852 -0.0577 +vn -0.9345 0.1223 -0.3344 +vn -0.1612 0.9852 -0.0577 +vn -0.1154 -0.9925 -0.0413 +vn -0.9390 0.0735 -0.3360 +vn -0.2065 0.9756 -0.0739 +vn -0.0693 -0.9973 -0.0248 +vn -0.9413 0.0245 -0.3368 +vn -0.2514 0.9637 -0.0900 +vn -0.0231 -0.9997 -0.0083 +vn -0.9413 -0.0245 -0.3368 +vn -0.2957 0.9494 -0.1058 +vn -0.8941 -0.3133 -0.3199 +vn -0.9390 -0.0735 -0.3360 +vn -0.3392 0.9328 -0.1214 +vn -0.8786 -0.3595 -0.3144 +vn -0.9345 -0.1223 -0.3344 +vn -0.3819 0.9140 -0.1367 +vn -0.8609 -0.4048 -0.3080 +vn -0.9277 -0.1707 -0.3319 +vn -0.4237 0.8930 -0.1516 +vn -0.8412 -0.4492 -0.3010 +vn -0.9187 -0.2189 -0.3287 +vn -0.4645 0.8698 -0.1662 +vn -0.8195 -0.4924 -0.2932 +vn -0.9075 -0.2664 -0.3247 +vn -0.5041 0.8446 -0.1804 +vn -0.7957 -0.5345 -0.2847 +vn -0.5426 0.8173 -0.1941 +vn -0.7701 -0.5753 -0.2755 +vn -0.5797 0.7880 -0.2074 +vn -0.7426 -0.6148 -0.2657 +vn -0.6154 0.7568 -0.2202 +vn -0.7133 -0.6527 -0.2552 +vn -0.6496 0.7238 -0.2324 +vn -0.6823 -0.6891 -0.2441 +vn -0.6823 0.6891 -0.2441 +vn -0.6496 -0.7238 -0.2324 +vn -0.7133 0.6527 -0.2552 +vn -0.6154 -0.7568 -0.2202 +vn -0.7426 0.6148 -0.2657 +vn -0.5797 -0.7880 -0.2074 +vn -0.7701 0.5753 -0.2755 +vn -0.5426 -0.8173 -0.1941 +vn -0.7957 0.5345 -0.2847 +vn -0.5041 -0.8446 -0.1804 +vn -0.8195 0.4924 -0.2932 +vn -0.4645 -0.8698 -0.1662 +vn -0.8412 0.4492 -0.3010 +vn -0.4237 -0.8930 -0.1516 +vn -0.8609 0.4048 -0.3081 +vn -0.3819 -0.9140 -0.1367 +vn -0.8786 0.3595 -0.3144 +vn -0.3392 -0.9328 -0.1214 +vn -0.8941 0.3133 -0.3199 +vn -0.2957 -0.9494 -0.1058 +vn -0.9075 0.2664 -0.3247 +vn -0.0231 0.9997 -0.0083 +vn -0.2514 -0.9637 -0.0900 +vn -0.8972 -0.1223 -0.4243 +vn -0.3667 0.9140 -0.1734 +vn -0.1108 -0.9925 -0.0524 +vn -0.8907 -0.1707 -0.4213 +vn -0.4068 0.8930 -0.1924 +vn -0.0666 -0.9973 -0.0315 +vn -0.8821 -0.2189 -0.4172 +vn -0.4460 0.8698 -0.2109 +vn -0.0222 -0.9997 -0.0105 +vn -0.8713 -0.2664 -0.4121 +vn -0.4840 0.8446 -0.2289 +vn -0.8585 -0.3133 -0.4060 +vn -0.5209 0.8173 -0.2464 +vn -0.8435 -0.3595 -0.3990 +vn -0.5566 0.7880 -0.2632 +vn -0.8266 -0.4048 -0.3910 +vn -0.5909 0.7568 -0.2795 +vn -0.8077 -0.4492 -0.3820 +vn -0.6237 0.7238 -0.2950 +vn -0.7868 -0.4924 -0.3721 +vn -0.6551 0.6891 -0.3098 +vn -0.7640 -0.5345 -0.3613 +vn -0.6849 0.6527 -0.3239 +vn -0.7394 -0.5753 -0.3497 +vn -0.7130 0.6148 -0.3372 +vn -0.7130 -0.6148 -0.3372 +vn -0.7394 0.5753 -0.3497 +vn -0.6849 -0.6527 -0.3239 +vn -0.7640 0.5345 -0.3613 +vn -0.6551 -0.6891 -0.3098 +vn -0.7868 0.4924 -0.3721 +vn -0.6237 -0.7238 -0.2950 +vn -0.8077 0.4492 -0.3820 +vn -0.5909 -0.7568 -0.2795 +vn -0.8266 0.4048 -0.3910 +vn -0.5566 -0.7880 -0.2632 +vn -0.8435 0.3595 -0.3990 +vn -0.5209 -0.8173 -0.2464 +vn -0.8585 0.3133 -0.4060 +vn -0.4840 -0.8446 -0.2289 +vn -0.8713 0.2664 -0.4121 +vn -0.0222 0.9997 -0.0105 +vn -0.4460 -0.8698 -0.2109 +vn -0.8821 0.2189 -0.4172 +vn -0.0666 0.9973 -0.0315 +vn -0.4068 -0.8930 -0.1924 +vn -0.8907 0.1707 -0.4213 +vn -0.1108 0.9925 -0.0524 +vn -0.3667 -0.9140 -0.1734 +vn -0.8972 0.1223 -0.4243 +vn -0.1547 0.9852 -0.0732 +vn -0.3257 -0.9328 -0.1540 +vn -0.9015 0.0735 -0.4264 +vn -0.1983 0.9756 -0.0938 +vn -0.2839 -0.9494 -0.1343 +vn -0.9037 0.0245 -0.4274 +vn -0.2414 0.9637 -0.1142 +vn -0.2414 -0.9637 -0.1142 +vn -0.9037 -0.0245 -0.4274 +vn -0.2839 0.9494 -0.1343 +vn -0.1983 -0.9756 -0.0938 +vn -0.9015 -0.0735 -0.4264 +vn -0.3257 0.9328 -0.1540 +vn -0.1547 -0.9852 -0.0732 +vn -0.8369 -0.2189 -0.5016 +vn -0.4232 0.8698 -0.2536 +vn -0.0211 -0.9997 -0.0126 +vn -0.8267 -0.2664 -0.4955 +vn -0.4593 0.8446 -0.2753 +vn -0.8145 -0.3133 -0.4882 +vn -0.4943 0.8173 -0.2963 +vn -0.8004 -0.3595 -0.4797 +vn -0.5281 0.7880 -0.3165 +vn -0.7843 -0.4048 -0.4701 +vn -0.5606 0.7568 -0.3360 +vn -0.7663 -0.4492 -0.4593 +vn -0.5918 0.7238 -0.3547 +vn -0.7465 -0.4924 -0.4474 +vn -0.6216 0.6891 -0.3726 +vn -0.7249 -0.5345 -0.4345 +vn -0.6498 0.6527 -0.3895 +vn -0.7015 -0.5753 -0.4205 +vn -0.6765 0.6148 -0.4055 +vn -0.6765 -0.6148 -0.4055 +vn -0.7015 0.5753 -0.4205 +vn -0.6498 -0.6527 -0.3895 +vn -0.7249 0.5345 -0.4345 +vn -0.6216 -0.6891 -0.3726 +vn -0.7465 0.4924 -0.4474 +vn -0.5918 -0.7238 -0.3547 +vn -0.7663 0.4492 -0.4593 +vn -0.5606 -0.7568 -0.3360 +vn -0.7843 0.4048 -0.4701 +vn -0.5281 -0.7880 -0.3165 +vn -0.8004 0.3595 -0.4797 +vn -0.4943 -0.8173 -0.2963 +vn -0.8145 0.3133 -0.4882 +vn -0.4593 -0.8446 -0.2753 +vn -0.8267 0.2664 -0.4955 +vn -0.0211 0.9997 -0.0126 +vn -0.4232 -0.8698 -0.2536 +vn -0.8369 0.2189 -0.5016 +vn -0.0632 0.9973 -0.0379 +vn -0.3860 -0.8930 -0.2314 +vn -0.8451 0.1707 -0.5066 +vn -0.1051 0.9925 -0.0630 +vn -0.3479 -0.9140 -0.2085 +vn -0.8513 0.1223 -0.5102 +vn -0.1468 0.9852 -0.0880 +vn -0.3090 -0.9328 -0.1852 +vn -0.8554 0.0735 -0.5127 +vn -0.1881 0.9756 -0.1128 +vn -0.2693 -0.9494 -0.1614 +vn -0.8575 0.0245 -0.5139 +vn -0.2290 0.9637 -0.1373 +vn -0.2290 -0.9637 -0.1373 +vn -0.8575 -0.0245 -0.5139 +vn -0.2693 0.9494 -0.1614 +vn -0.1881 -0.9756 -0.1128 +vn -0.8554 -0.0735 -0.5127 +vn -0.3090 0.9328 -0.1852 +vn -0.1468 -0.9852 -0.0880 +vn -0.8513 -0.1223 -0.5102 +vn -0.3479 0.9140 -0.2085 +vn -0.1051 -0.9925 -0.0630 +vn -0.8451 -0.1707 -0.5066 +vn -0.3860 0.8930 -0.2314 +vn -0.0632 -0.9973 -0.0379 +vn -0.7628 -0.3133 -0.5657 +vn -0.4629 0.8173 -0.3433 +vn -0.7495 -0.3595 -0.5559 +vn -0.4945 0.7880 -0.3668 +vn -0.7344 -0.4048 -0.5447 +vn -0.5250 0.7568 -0.3894 +vn -0.7176 -0.4492 -0.5322 +vn -0.5542 0.7238 -0.4110 +vn -0.6991 -0.4924 -0.5185 +vn -0.5821 0.6891 -0.4317 +vn -0.6788 -0.5345 -0.5035 +vn -0.6085 0.6527 -0.4513 +vn -0.6570 -0.5753 -0.4872 +vn -0.6335 0.6148 -0.4698 +vn -0.6335 -0.6148 -0.4698 +vn -0.6569 0.5753 -0.4872 +vn -0.6085 -0.6527 -0.4513 +vn -0.6788 0.5345 -0.5035 +vn -0.5821 -0.6891 -0.4317 +vn -0.6991 0.4924 -0.5185 +vn -0.5542 -0.7238 -0.4110 +vn -0.7176 0.4492 -0.5322 +vn -0.5250 -0.7568 -0.3894 +vn -0.7344 0.4048 -0.5447 +vn -0.4945 -0.7880 -0.3668 +vn -0.7495 0.3595 -0.5559 +vn -0.4629 -0.8173 -0.3433 +vn -0.7628 0.3133 -0.5657 +vn -0.4301 -0.8446 -0.3190 +vn -0.7742 0.2664 -0.5742 +vn -0.0197 0.9997 -0.0146 +vn -0.3963 -0.8698 -0.2939 +vn -0.7837 0.2189 -0.5813 +vn -0.0592 0.9973 -0.0439 +vn -0.3615 -0.8930 -0.2681 +vn -0.7914 0.1707 -0.5870 +vn -0.0984 0.9925 -0.0730 +vn -0.3258 -0.9140 -0.2416 +vn -0.7972 0.1223 -0.5912 +vn -0.1375 0.9852 -0.1020 +vn -0.2894 -0.9328 -0.2146 +vn -0.8010 0.0735 -0.5941 +vn -0.1762 0.9756 -0.1307 +vn -0.2522 -0.9494 -0.1871 +vn -0.8030 0.0245 -0.5955 +vn -0.2145 0.9637 -0.1591 +vn -0.2145 -0.9637 -0.1591 +vn -0.8030 -0.0245 -0.5955 +vn -0.2522 0.9494 -0.1871 +vn -0.1762 -0.9756 -0.1307 +vn -0.8010 -0.0735 -0.5941 +vn -0.2894 0.9328 -0.2146 +vn -0.1375 -0.9852 -0.1020 +vn -0.7972 -0.1223 -0.5912 +vn -0.3258 0.9140 -0.2416 +vn -0.0984 -0.9925 -0.0730 +vn -0.7914 -0.1707 -0.5870 +vn -0.3615 0.8930 -0.2681 +vn -0.0592 -0.9973 -0.0439 +vn -0.7837 -0.2189 -0.5813 +vn -0.3963 0.8698 -0.2939 +vn -0.0197 -0.9997 -0.0146 +vn -0.7742 -0.2664 -0.5742 +vn -0.4301 0.8446 -0.3190 +vn -0.6775 -0.4048 -0.6141 +vn -0.4843 0.7568 -0.4389 +vn -0.6620 -0.4492 -0.6000 +vn -0.5112 0.7238 -0.4634 +vn -0.6449 -0.4924 -0.5845 +vn -0.5369 0.6891 -0.4867 +vn -0.6262 -0.5345 -0.5676 +vn -0.5613 0.6527 -0.5088 +vn -0.6060 -0.5753 -0.5493 +vn -0.5844 0.6148 -0.5297 +vn -0.5844 -0.6148 -0.5297 +vn -0.6060 0.5753 -0.5493 +vn -0.5613 -0.6527 -0.5088 +vn -0.6262 0.5345 -0.5676 +vn -0.5369 -0.6891 -0.4867 +vn -0.6449 0.4924 -0.5845 +vn -0.5112 -0.7238 -0.4634 +vn -0.6620 0.4492 -0.6000 +vn -0.4843 -0.7568 -0.4389 +vn -0.6775 0.4048 -0.6141 +vn -0.4562 -0.7880 -0.4135 +vn -0.6914 0.3595 -0.6267 +vn -0.4270 -0.8173 -0.3870 +vn -0.7036 0.3133 -0.6377 +vn -0.3967 -0.8446 -0.3596 +vn -0.7142 0.2664 -0.6473 +vn -0.0182 0.9997 -0.0165 +vn -0.3655 -0.8698 -0.3313 +vn -0.7230 0.2189 -0.6553 +vn -0.0546 0.9973 -0.0495 +vn -0.3335 -0.8930 -0.3022 +vn -0.7301 0.1707 -0.6617 +vn -0.0908 0.9925 -0.0823 +vn -0.3006 -0.9140 -0.2724 +vn -0.7354 0.1223 -0.6665 +vn -0.1268 0.9852 -0.1149 +vn -0.2669 -0.9328 -0.2419 +vn -0.7389 0.0735 -0.6697 +vn -0.1625 0.9756 -0.1473 +vn -0.2327 -0.9494 -0.2109 +vn -0.7407 0.0245 -0.6714 +vn -0.1978 0.9637 -0.1793 +vn -0.1978 -0.9637 -0.1793 +vn -0.7407 -0.0245 -0.6714 +vn -0.2327 0.9494 -0.2109 +vn -0.1625 -0.9756 -0.1473 +vn -0.7389 -0.0735 -0.6697 +vn -0.2669 0.9328 -0.2419 +vn -0.1268 -0.9852 -0.1149 +vn -0.7354 -0.1223 -0.6665 +vn -0.3006 0.9140 -0.2724 +vn -0.0908 -0.9925 -0.0823 +vn -0.7301 -0.1707 -0.6617 +vn -0.3335 0.8930 -0.3022 +vn -0.0546 -0.9973 -0.0495 +vn -0.7230 -0.2189 -0.6553 +vn -0.3655 0.8698 -0.3313 +vn -0.0182 -0.9997 -0.0165 +vn -0.7142 -0.2664 -0.6473 +vn -0.3967 0.8446 -0.3596 +vn -0.7036 -0.3133 -0.6377 +vn -0.4270 0.8173 -0.3870 +vn -0.6914 -0.3595 -0.6267 +vn -0.4562 0.7880 -0.4135 +vn -0.5845 -0.4924 -0.6449 +vn -0.4867 0.6891 -0.5369 +vn -0.5676 -0.5345 -0.6262 +vn -0.5088 0.6527 -0.5613 +vn -0.5493 -0.5754 -0.6060 +vn -0.5297 0.6148 -0.5844 +vn -0.5297 -0.6148 -0.5844 +vn -0.5493 0.5753 -0.6060 +vn -0.5088 -0.6527 -0.5613 +vn -0.5676 0.5345 -0.6262 +vn -0.4867 -0.6891 -0.5369 +vn -0.5845 0.4924 -0.6449 +vn -0.4634 -0.7238 -0.5112 +vn -0.6000 0.4492 -0.6620 +vn -0.4389 -0.7568 -0.4843 +vn -0.6141 0.4048 -0.6775 +vn -0.4135 -0.7880 -0.4562 +vn -0.6267 0.3595 -0.6914 +vn -0.3870 -0.8173 -0.4270 +vn -0.6377 0.3133 -0.7036 +vn -0.3596 -0.8446 -0.3967 +vn -0.6473 0.2664 -0.7142 +vn -0.0165 0.9997 -0.0182 +vn -0.3313 -0.8698 -0.3656 +vn -0.6553 0.2189 -0.7230 +vn -0.0495 0.9973 -0.0546 +vn -0.3022 -0.8930 -0.3335 +vn -0.6617 0.1707 -0.7301 +vn -0.0823 0.9925 -0.0908 +vn -0.2724 -0.9140 -0.3006 +vn -0.6665 0.1223 -0.7354 +vn -0.1149 0.9852 -0.1268 +vn -0.2419 -0.9328 -0.2669 +vn -0.6697 0.0735 -0.7389 +vn -0.1473 0.9756 -0.1625 +vn -0.2109 -0.9494 -0.2327 +vn -0.6714 0.0245 -0.7407 +vn -0.1793 0.9637 -0.1978 +vn -0.1793 -0.9637 -0.1978 +vn -0.6714 -0.0245 -0.7407 +vn -0.2109 0.9494 -0.2327 +vn -0.1473 -0.9756 -0.1625 +vn -0.6697 -0.0735 -0.7389 +vn -0.2419 0.9328 -0.2669 +vn -0.1149 -0.9852 -0.1268 +vn -0.6665 -0.1223 -0.7354 +vn -0.2724 0.9140 -0.3006 +vn -0.0823 -0.9925 -0.0908 +vn -0.6617 -0.1707 -0.7301 +vn -0.3022 0.8930 -0.3335 +vn -0.0495 -0.9973 -0.0546 +vn -0.6553 -0.2189 -0.7230 +vn -0.3313 0.8698 -0.3655 +vn -0.0165 -0.9997 -0.0182 +vn -0.6473 -0.2664 -0.7142 +vn -0.3596 0.8446 -0.3967 +vn -0.6377 -0.3133 -0.7036 +vn -0.3870 0.8173 -0.4270 +vn -0.6267 -0.3595 -0.6914 +vn -0.4135 0.7880 -0.4562 +vn -0.6141 -0.4048 -0.6775 +vn -0.4389 0.7568 -0.4843 +vn -0.6000 -0.4492 -0.6620 +vn -0.4634 0.7238 -0.5112 +vn -0.4872 -0.5753 -0.6570 +vn -0.4698 0.6148 -0.6335 +vn -0.4698 -0.6148 -0.6335 +vn -0.4872 0.5753 -0.6569 +vn -0.4513 -0.6527 -0.6085 +vn -0.5035 0.5345 -0.6788 +vn -0.4317 -0.6891 -0.5821 +vn -0.5185 0.4924 -0.6991 +vn -0.4110 -0.7238 -0.5542 +vn -0.5322 0.4492 -0.7176 +vn -0.3894 -0.7568 -0.5250 +vn -0.5447 0.4048 -0.7344 +vn -0.3668 -0.7880 -0.4945 +vn -0.5559 0.3595 -0.7495 +vn -0.3433 -0.8173 -0.4629 +vn -0.5657 0.3133 -0.7628 +vn -0.3190 -0.8446 -0.4301 +vn -0.5742 0.2664 -0.7742 +vn -0.0146 0.9997 -0.0197 +vn -0.2939 -0.8698 -0.3963 +vn -0.5813 0.2189 -0.7837 +vn -0.0439 0.9973 -0.0592 +vn -0.2681 -0.8930 -0.3615 +vn -0.5870 0.1707 -0.7914 +vn -0.0730 0.9925 -0.0984 +vn -0.2416 -0.9140 -0.3258 +vn -0.5912 0.1223 -0.7972 +vn -0.1020 0.9852 -0.1375 +vn -0.2146 -0.9328 -0.2894 +vn -0.5941 0.0735 -0.8010 +vn -0.1307 0.9756 -0.1762 +vn -0.1871 -0.9494 -0.2522 +vn -0.5955 0.0245 -0.8030 +vn -0.1591 0.9637 -0.2145 +vn -0.1591 -0.9637 -0.2145 +vn -0.5955 -0.0245 -0.8030 +vn -0.1871 0.9494 -0.2522 +vn -0.1307 -0.9756 -0.1762 +vn -0.5941 -0.0735 -0.8010 +vn -0.2146 0.9328 -0.2894 +vn -0.1020 -0.9852 -0.1375 +vn -0.5912 -0.1223 -0.7972 +vn -0.2416 0.9140 -0.3258 +vn -0.0730 -0.9925 -0.0984 +vn -0.5870 -0.1707 -0.7914 +vn -0.2681 0.8930 -0.3615 +vn -0.0439 -0.9973 -0.0592 +vn -0.5813 -0.2189 -0.7837 +vn -0.2939 0.8698 -0.3963 +vn -0.0146 -0.9997 -0.0197 +vn -0.5742 -0.2664 -0.7742 +vn -0.3190 0.8446 -0.4301 +vn -0.5657 -0.3133 -0.7628 +vn -0.3433 0.8173 -0.4629 +vn -0.5559 -0.3595 -0.7495 +vn -0.3668 0.7880 -0.4945 +vn -0.5447 -0.4048 -0.7344 +vn -0.3894 0.7568 -0.5250 +vn -0.5322 -0.4492 -0.7176 +vn -0.4110 0.7238 -0.5542 +vn -0.5185 -0.4924 -0.6991 +vn -0.4317 0.6891 -0.5821 +vn -0.5035 -0.5345 -0.6788 +vn -0.4513 0.6527 -0.6085 +vn -0.3895 -0.6527 -0.6498 +vn -0.4345 0.5345 -0.7249 +vn -0.3726 -0.6891 -0.6216 +vn -0.4474 0.4924 -0.7465 +vn -0.3547 -0.7238 -0.5918 +vn -0.4593 0.4492 -0.7663 +vn -0.3360 -0.7568 -0.5606 +vn -0.4701 0.4048 -0.7843 +vn -0.3165 -0.7880 -0.5281 +vn -0.4797 0.3595 -0.8004 +vn -0.2963 -0.8173 -0.4943 +vn -0.4882 0.3133 -0.8145 +vn -0.2753 -0.8446 -0.4593 +vn -0.4955 0.2664 -0.8267 +vn -0.0126 0.9997 -0.0211 +vn -0.2536 -0.8698 -0.4232 +vn -0.5016 0.2189 -0.8369 +vn -0.0379 0.9973 -0.0632 +vn -0.2314 -0.8930 -0.3860 +vn -0.5066 0.1707 -0.8451 +vn -0.0630 0.9925 -0.1051 +vn -0.2085 -0.9140 -0.3479 +vn -0.5102 0.1223 -0.8513 +vn -0.0880 0.9852 -0.1468 +vn -0.1852 -0.9328 -0.3090 +vn -0.5127 0.0735 -0.8554 +vn -0.1128 0.9756 -0.1881 +vn -0.1614 -0.9494 -0.2693 +vn -0.5139 0.0245 -0.8575 +vn -0.1373 0.9637 -0.2290 +vn -0.1373 -0.9637 -0.2290 +vn -0.5139 -0.0245 -0.8575 +vn -0.1614 0.9494 -0.2693 +vn -0.1128 -0.9756 -0.1881 +vn -0.5127 -0.0735 -0.8554 +vn -0.1852 0.9328 -0.3090 +vn -0.0880 -0.9852 -0.1468 +vn -0.5102 -0.1223 -0.8513 +vn -0.2085 0.9140 -0.3479 +vn -0.0630 -0.9925 -0.1051 +vn -0.5066 -0.1707 -0.8451 +vn -0.2314 0.8930 -0.3860 +vn -0.0379 -0.9973 -0.0632 +vn -0.5016 -0.2189 -0.8369 +vn -0.2536 0.8698 -0.4232 +vn -0.0126 -0.9997 -0.0211 +vn -0.4955 -0.2664 -0.8267 +vn -0.2753 0.8446 -0.4593 +vn -0.4882 -0.3133 -0.8145 +vn -0.2963 0.8173 -0.4943 +vn -0.4797 -0.3595 -0.8004 +vn -0.3165 0.7880 -0.5281 +vn -0.4701 -0.4048 -0.7843 +vn -0.3360 0.7568 -0.5606 +vn -0.4593 -0.4492 -0.7663 +vn -0.3547 0.7238 -0.5918 +vn -0.4474 -0.4924 -0.7465 +vn -0.3726 0.6891 -0.6216 +vn -0.4345 -0.5345 -0.7249 +vn -0.3895 0.6527 -0.6498 +vn -0.4205 -0.5754 -0.7015 +vn -0.4055 0.6148 -0.6765 +vn -0.4055 -0.6148 -0.6765 +vn -0.4205 0.5753 -0.7015 +vn -0.2950 -0.7238 -0.6237 +vn -0.3820 0.4492 -0.8077 +vn -0.2795 -0.7568 -0.5909 +vn -0.3910 0.4048 -0.8266 +vn -0.2632 -0.7880 -0.5566 +vn -0.3990 0.3595 -0.8435 +vn -0.2464 -0.8173 -0.5209 +vn -0.4060 0.3133 -0.8585 +vn -0.2289 -0.8446 -0.4840 +vn -0.4121 0.2664 -0.8713 +vn -0.0105 0.9997 -0.0222 +vn -0.2109 -0.8698 -0.4460 +vn -0.4172 0.2189 -0.8821 +vn -0.0315 0.9973 -0.0666 +vn -0.1924 -0.8930 -0.4068 +vn -0.4213 0.1707 -0.8907 +vn -0.0524 0.9925 -0.1108 +vn -0.1734 -0.9140 -0.3667 +vn -0.4243 0.1223 -0.8972 +vn -0.0732 0.9852 -0.1547 +vn -0.1540 -0.9328 -0.3257 +vn -0.4264 0.0735 -0.9015 +vn -0.0938 0.9756 -0.1983 +vn -0.1343 -0.9494 -0.2839 +vn -0.4274 0.0245 -0.9037 +vn -0.1142 0.9637 -0.2414 +vn -0.1142 -0.9637 -0.2414 +vn -0.4274 -0.0245 -0.9037 +vn -0.1343 0.9494 -0.2839 +vn -0.0938 -0.9756 -0.1983 +vn -0.4264 -0.0735 -0.9015 +vn -0.1540 0.9328 -0.3257 +vn -0.0732 -0.9852 -0.1547 +vn -0.4243 -0.1223 -0.8972 +vn -0.1734 0.9140 -0.3667 +vn -0.0524 -0.9925 -0.1108 +vn -0.4213 -0.1707 -0.8907 +vn -0.1924 0.8930 -0.4068 +vn -0.0315 -0.9973 -0.0666 +vn -0.4172 -0.2189 -0.8821 +vn -0.2109 0.8698 -0.4460 +vn -0.0105 -0.9997 -0.0222 +vn -0.4121 -0.2664 -0.8713 +vn -0.2289 0.8446 -0.4840 +vn -0.4060 -0.3133 -0.8585 +vn -0.2464 0.8173 -0.5209 +vn -0.3990 -0.3595 -0.8435 +vn -0.2632 0.7880 -0.5566 +vn -0.3910 -0.4048 -0.8266 +vn -0.2795 0.7568 -0.5909 +vn -0.3820 -0.4492 -0.8077 +vn -0.2950 0.7238 -0.6237 +vn -0.3721 -0.4924 -0.7868 +vn -0.3098 0.6891 -0.6551 +vn -0.3613 -0.5345 -0.7640 +vn -0.3239 0.6527 -0.6849 +vn -0.3497 -0.5754 -0.7394 +vn -0.3372 0.6148 -0.7130 +vn -0.3372 -0.6148 -0.7130 +vn -0.3497 0.5754 -0.7394 +vn -0.3239 -0.6527 -0.6849 +vn -0.3613 0.5345 -0.7640 +vn -0.3098 -0.6891 -0.6551 +vn -0.3721 0.4924 -0.7868 +vn -0.2074 -0.7880 -0.5797 +vn -0.3144 0.3595 -0.8786 +vn -0.1941 -0.8173 -0.5426 +vn -0.3199 0.3133 -0.8941 +vn -0.1804 -0.8446 -0.5041 +vn -0.3247 0.2664 -0.9075 +vn -0.0083 0.9997 -0.0231 +vn -0.1662 -0.8698 -0.4645 +vn -0.3287 0.2189 -0.9187 +vn -0.0248 0.9973 -0.0693 +vn -0.1516 -0.8930 -0.4237 +vn -0.3319 0.1707 -0.9277 +vn -0.0413 0.9925 -0.1154 +vn -0.1367 -0.9140 -0.3819 +vn -0.3344 0.1223 -0.9345 +vn -0.0577 0.9852 -0.1612 +vn -0.1214 -0.9328 -0.3392 +vn -0.3360 0.0735 -0.9390 +vn -0.0739 0.9756 -0.2065 +vn -0.1058 -0.9494 -0.2957 +vn -0.3368 0.0245 -0.9413 +vn -0.0900 0.9637 -0.2514 +vn -0.0900 -0.9637 -0.2514 +vn -0.3368 -0.0245 -0.9413 +vn -0.1058 0.9494 -0.2957 +vn -0.0739 -0.9756 -0.2065 +vn -0.3360 -0.0735 -0.9390 +vn -0.1214 0.9328 -0.3392 +vn -0.0577 -0.9852 -0.1612 +vn -0.3344 -0.1223 -0.9345 +vn -0.1367 0.9140 -0.3819 +vn -0.0413 -0.9925 -0.1154 +vn -0.3319 -0.1707 -0.9277 +vn -0.1516 0.8930 -0.4237 +vn -0.0248 -0.9973 -0.0693 +vn -0.3287 -0.2189 -0.9187 +vn -0.1662 0.8698 -0.4645 +vn -0.0083 -0.9997 -0.0231 +vn -0.3247 -0.2664 -0.9075 +vn -0.1804 0.8446 -0.5041 +vn -0.3199 -0.3133 -0.8941 +vn -0.1941 0.8173 -0.5426 +vn -0.3144 -0.3595 -0.8786 +vn -0.2074 0.7880 -0.5797 +vn -0.3080 -0.4048 -0.8609 +vn -0.2202 0.7568 -0.6154 +vn -0.3010 -0.4492 -0.8412 +vn -0.2324 0.7238 -0.6496 +vn -0.2932 -0.4925 -0.8195 +vn -0.2441 0.6891 -0.6823 +vn -0.2847 -0.5345 -0.7957 +vn -0.2552 0.6527 -0.7133 +vn -0.2755 -0.5754 -0.7701 +vn -0.2657 0.6148 -0.7426 +vn -0.2657 -0.6148 -0.7426 +vn -0.2755 0.5754 -0.7701 +vn -0.2552 -0.6527 -0.7133 +vn -0.2847 0.5345 -0.7957 +vn -0.2441 -0.6891 -0.6823 +vn -0.2932 0.4924 -0.8195 +vn -0.2324 -0.7238 -0.6496 +vn -0.3010 0.4492 -0.8412 +vn -0.2202 -0.7568 -0.6154 +vn -0.3081 0.4048 -0.8609 +vn -0.1301 -0.8446 -0.5194 +vn -0.2342 0.2664 -0.9350 +vn -0.0060 0.9997 -0.0238 +vn -0.1199 -0.8698 -0.4786 +vn -0.2371 0.2189 -0.9465 +vn -0.0179 0.9973 -0.0714 +vn -0.1094 -0.8930 -0.4366 +vn -0.2394 0.1707 -0.9558 +vn -0.0298 0.9925 -0.1189 +vn -0.0986 -0.9140 -0.3935 +vn -0.2412 0.1223 -0.9628 +vn -0.0416 0.9852 -0.1660 +vn -0.0875 -0.9328 -0.3495 +vn -0.2423 0.0735 -0.9674 +vn -0.0533 0.9756 -0.2128 +vn -0.0763 -0.9494 -0.3046 +vn -0.2429 0.0245 -0.9697 +vn -0.0649 0.9637 -0.2590 +vn -0.0649 -0.9637 -0.2590 +vn -0.2429 -0.0245 -0.9697 +vn -0.0763 0.9494 -0.3046 +vn -0.0533 -0.9756 -0.2128 +vn -0.2423 -0.0735 -0.9674 +vn -0.0875 0.9328 -0.3495 +vn -0.0416 -0.9852 -0.1660 +vn -0.2412 -0.1223 -0.9628 +vn -0.0986 0.9140 -0.3935 +vn -0.0298 -0.9925 -0.1189 +vn -0.2394 -0.1707 -0.9558 +vn -0.1094 0.8930 -0.4366 +vn -0.0179 -0.9973 -0.0714 +vn -0.2371 -0.2189 -0.9465 +vn -0.1199 0.8698 -0.4786 +vn -0.0060 -0.9997 -0.0238 +vn -0.2342 -0.2664 -0.9350 +vn -0.1301 0.8446 -0.5194 +vn -0.2307 -0.3133 -0.9212 +vn -0.1400 0.8173 -0.5590 +vn -0.2267 -0.3595 -0.9052 +vn -0.1496 0.7880 -0.5972 +vn -0.2222 -0.4048 -0.8870 +vn -0.1588 0.7568 -0.6340 +vn -0.2171 -0.4492 -0.8667 +vn -0.1677 0.7238 -0.6693 +vn -0.2115 -0.4924 -0.8443 +vn -0.1761 0.6891 -0.7030 +vn -0.2054 -0.5345 -0.8198 +vn -0.1841 0.6527 -0.7349 +vn -0.1987 -0.5753 -0.7934 +vn -0.1916 0.6148 -0.7651 +vn -0.1916 -0.6148 -0.7651 +vn -0.1987 0.5753 -0.7934 +vn -0.1841 -0.6527 -0.7349 +vn -0.2054 0.5345 -0.8198 +vn -0.1761 -0.6891 -0.7030 +vn -0.2115 0.4924 -0.8443 +vn -0.1677 -0.7238 -0.6693 +vn -0.2171 0.4492 -0.8667 +vn -0.1588 -0.7568 -0.6340 +vn -0.2222 0.4048 -0.8870 +vn -0.1496 -0.7880 -0.5972 +vn -0.2267 0.3595 -0.9052 +vn -0.1400 -0.8173 -0.5590 +vn -0.2307 0.3133 -0.9212 +vn -0.0660 -0.8930 -0.4452 +vn -0.1446 0.1707 -0.9747 +vn -0.0180 0.9925 -0.1212 +vn -0.0595 -0.9140 -0.4013 +vn -0.1456 0.1223 -0.9818 +vn -0.0251 0.9852 -0.1693 +vn -0.0529 -0.9328 -0.3564 +vn -0.1463 0.0735 -0.9865 +vn -0.0322 0.9756 -0.2170 +vn -0.0461 -0.9494 -0.3106 +vn -0.1467 0.0245 -0.9889 +vn -0.0392 0.9637 -0.2641 +vn -0.0392 -0.9637 -0.2641 +vn -0.1467 -0.0245 -0.9889 +vn -0.0461 0.9494 -0.3106 +vn -0.0322 -0.9756 -0.2170 +vn -0.1463 -0.0735 -0.9865 +vn -0.0529 0.9328 -0.3564 +vn -0.0251 -0.9852 -0.1693 +vn -0.1456 -0.1223 -0.9818 +vn -0.0595 0.9140 -0.4013 +vn -0.0180 -0.9925 -0.1212 +vn -0.1446 -0.1707 -0.9747 +vn -0.0660 0.8930 -0.4452 +vn -0.0108 -0.9973 -0.0729 +vn -0.1432 -0.2189 -0.9652 +vn -0.0724 0.8698 -0.4880 +vn -0.0036 -0.9997 -0.0243 +vn -0.1414 -0.2664 -0.9534 +vn -0.0786 0.8446 -0.5297 +vn -0.1393 -0.3133 -0.9394 +vn -0.0846 0.8173 -0.5700 +vn -0.1369 -0.3595 -0.9230 +vn -0.0903 0.7880 -0.6090 +vn -0.1342 -0.4048 -0.9045 +vn -0.0959 0.7568 -0.6466 +vn -0.1311 -0.4492 -0.8838 +vn -0.1012 0.7238 -0.6825 +vn -0.1277 -0.4925 -0.8609 +vn -0.1063 0.6891 -0.7168 +vn -0.1240 -0.5345 -0.8360 +vn -0.1112 0.6527 -0.7494 +vn -0.1200 -0.5754 -0.8091 +vn -0.1157 0.6148 -0.7802 +vn -0.1157 -0.6148 -0.7802 +vn -0.1200 0.5754 -0.8091 +vn -0.1112 -0.6527 -0.7494 +vn -0.1240 0.5345 -0.8360 +vn -0.1063 -0.6891 -0.7168 +vn -0.1277 0.4924 -0.8609 +vn -0.1012 -0.7238 -0.6825 +vn -0.1311 0.4492 -0.8838 +vn -0.0959 -0.7568 -0.6466 +vn -0.1342 0.4048 -0.9045 +vn -0.0903 -0.7880 -0.6090 +vn -0.1369 0.3595 -0.9230 +vn -0.0846 -0.8173 -0.5700 +vn -0.1393 0.3133 -0.9394 +vn -0.0786 -0.8446 -0.5297 +vn -0.1414 0.2664 -0.9534 +vn -0.0036 0.9997 -0.0243 +vn -0.0724 -0.8698 -0.4880 +vn -0.1432 0.2189 -0.9652 +vn -0.0108 0.9973 -0.0729 +vn -0.0177 -0.9328 -0.3598 +vn -0.0489 0.0735 -0.9961 +vn -0.0108 0.9756 -0.2191 +vn -0.0154 -0.9494 -0.3136 +vn -0.0491 0.0245 -0.9985 +vn -0.0131 0.9637 -0.2667 +vn -0.0131 -0.9637 -0.2667 +vn -0.0491 -0.0245 -0.9985 +vn -0.0154 0.9494 -0.3136 +vn -0.0108 -0.9756 -0.2191 +vn -0.0489 -0.0735 -0.9961 +vn -0.0177 0.9328 -0.3598 +vn -0.0084 -0.9852 -0.1710 +vn -0.0487 -0.1223 -0.9913 +vn -0.0199 0.9140 -0.4052 +vn -0.0060 -0.9925 -0.1224 +vn -0.0483 -0.1707 -0.9841 +vn -0.0221 0.8930 -0.4495 +vn -0.0036 -0.9973 -0.0736 +vn -0.0479 -0.2189 -0.9746 +vn -0.0242 0.8698 -0.4928 +vn -0.0012 -0.9997 -0.0245 +vn -0.0473 -0.2664 -0.9627 +vn -0.0263 0.8446 -0.5348 +vn -0.0466 -0.3133 -0.9485 +vn -0.0283 0.8173 -0.5756 +vn -0.0458 -0.3595 -0.9320 +vn -0.0302 0.7880 -0.6149 +vn -0.0449 -0.4048 -0.9133 +vn -0.0321 0.7568 -0.6528 +vn -0.0438 -0.4492 -0.8924 +vn -0.0339 0.7238 -0.6891 +vn -0.0427 -0.4925 -0.8693 +vn -0.0356 0.6891 -0.7238 +vn -0.0415 -0.5345 -0.8441 +vn -0.0372 0.6527 -0.7567 +vn -0.0401 -0.5753 -0.8169 +vn -0.0387 0.6148 -0.7878 +vn -0.0387 -0.6148 -0.7878 +vn -0.0401 0.5753 -0.8169 +vn -0.0372 -0.6527 -0.7567 +vn -0.0415 0.5345 -0.8441 +vn -0.0356 -0.6891 -0.7238 +vn -0.0427 0.4924 -0.8693 +vn -0.0339 -0.7238 -0.6891 +vn -0.0438 0.4492 -0.8924 +vn -0.0321 -0.7568 -0.6528 +vn -0.0449 0.4048 -0.9133 +vn -0.0302 -0.7880 -0.6149 +vn -0.0458 0.3595 -0.9320 +vn -0.0283 -0.8173 -0.5756 +vn -0.0466 0.3133 -0.9485 +vn -0.0263 -0.8446 -0.5348 +vn -0.0473 0.2664 -0.9627 +vn -0.0012 0.9997 -0.0245 +vn -0.0242 -0.8698 -0.4928 +vn -0.0479 0.2189 -0.9746 +vn -0.0036 0.9973 -0.0736 +vn -0.0221 -0.8930 -0.4495 +vn -0.0484 0.1708 -0.9841 +vn -0.0060 0.9925 -0.1224 +vn -0.0199 -0.9140 -0.4052 +vn -0.0487 0.1223 -0.9913 +vn -0.0084 0.9852 -0.1710 +vt 0.750000 0.953125 +vt 0.750000 0.906250 +vt 0.750000 0.890625 +vt 0.750000 0.875000 +vt 0.750000 0.843750 +vt 0.750000 0.828125 +vt 0.750000 0.765625 +vt 0.750000 0.750000 +vt 0.750000 0.703125 +vt 0.750000 0.671875 +vt 0.750000 0.593750 +vt 0.750000 0.578125 +vt 0.750000 0.562500 +vt 0.750000 0.546875 +vt 0.750000 0.531250 +vt 0.750000 0.500000 +vt 0.750000 0.468750 +vt 0.750000 0.421875 +vt 0.750000 0.406250 +vt 0.750000 0.375000 +vt 0.750000 0.359375 +vt 0.750000 0.343750 +vt 0.750000 0.296875 +vt 0.750000 0.265625 +vt 0.750000 0.250000 +vt 0.750000 0.234375 +vt 0.750000 0.218750 +vt 0.750000 0.203125 +vt 0.750000 0.171875 +vt 0.750000 0.156250 +vt 0.750000 0.125000 +vt 0.750000 0.109375 +vt 0.750000 0.093750 +vt 0.750000 0.078125 +vt 0.750000 0.046875 +vt 0.750000 0.031250 +vt 0.734375 0.984375 +vt 0.734375 0.968750 +vt 0.734375 0.953125 +vt 0.734375 0.937500 +vt 0.734375 0.921875 +vt 0.734375 0.906250 +vt 0.734375 0.890625 +vt 0.734375 0.875000 +vt 0.734375 0.859375 +vt 0.734375 0.843750 +vt 0.734375 0.828125 +vt 0.734375 0.812500 +vt 0.734375 0.796875 +vt 0.734375 0.781250 +vt 0.734375 0.765625 +vt 0.734375 0.750000 +vt 0.734375 0.734375 +vt 0.734375 0.718750 +vt 0.734375 0.703125 +vt 0.734375 0.687500 +vt 0.734375 0.671875 +vt 0.734375 0.656250 +vt 0.734375 0.640625 +vt 0.734375 0.625000 +vt 0.734375 0.609375 +vt 0.734375 0.593750 +vt 0.734375 0.578125 +vt 0.734375 0.562500 +vt 0.734375 0.546875 +vt 0.734375 0.531250 +vt 0.734375 0.515625 +vt 0.734375 0.500000 +vt 0.734375 0.484375 +vt 0.734375 0.468750 +vt 0.734375 0.453125 +vt 0.734375 0.437500 +vt 0.734375 0.421875 +vt 0.734375 0.406250 +vt 0.734375 0.390625 +vt 0.734375 0.375000 +vt 0.734375 0.359375 +vt 0.734375 0.343750 +vt 0.734375 0.328125 +vt 0.734375 0.312500 +vt 0.734375 0.296875 +vt 0.734375 0.281250 +vt 0.734375 0.265625 +vt 0.734375 0.250000 +vt 0.734375 0.234375 +vt 0.734375 0.218750 +vt 0.734375 0.203125 +vt 0.734375 0.187500 +vt 0.734375 0.171875 +vt 0.734375 0.156250 +vt 0.734375 0.140625 +vt 0.734375 0.125000 +vt 0.734375 0.109375 +vt 0.734375 0.093750 +vt 0.734375 0.078125 +vt 0.734375 0.062500 +vt 0.734375 0.046875 +vt 0.734375 0.031250 +vt 0.734375 0.015625 +vt 0.718750 0.984375 +vt 0.718750 0.968750 +vt 0.718750 0.953125 +vt 0.718750 0.937500 +vt 0.718750 0.921875 +vt 0.718750 0.906250 +vt 0.718750 0.890625 +vt 0.718750 0.875000 +vt 0.718750 0.859375 +vt 0.718750 0.843750 +vt 0.718750 0.828125 +vt 0.718750 0.812500 +vt 0.718750 0.796875 +vt 0.718750 0.781250 +vt 0.718750 0.765625 +vt 0.718750 0.750000 +vt 0.718750 0.734375 +vt 0.718750 0.718750 +vt 0.718750 0.703125 +vt 0.718750 0.687500 +vt 0.718750 0.671875 +vt 0.718750 0.656250 +vt 0.718750 0.640625 +vt 0.718750 0.625000 +vt 0.718750 0.609375 +vt 0.718750 0.593750 +vt 0.718750 0.578125 +vt 0.718750 0.562500 +vt 0.718750 0.546875 +vt 0.718750 0.531250 +vt 0.718750 0.515625 +vt 0.718750 0.500000 +vt 0.718750 0.484375 +vt 0.718750 0.468750 +vt 0.718750 0.453125 +vt 0.718750 0.437500 +vt 0.718750 0.421875 +vt 0.718750 0.406250 +vt 0.718750 0.390625 +vt 0.718750 0.375000 +vt 0.718750 0.359375 +vt 0.718750 0.343750 +vt 0.718750 0.328125 +vt 0.718750 0.312500 +vt 0.718750 0.296875 +vt 0.718750 0.281250 +vt 0.718750 0.265625 +vt 0.718750 0.250000 +vt 0.718750 0.234375 +vt 0.718750 0.218750 +vt 0.718750 0.203125 +vt 0.718750 0.187500 +vt 0.718750 0.171875 +vt 0.718750 0.156250 +vt 0.718750 0.140625 +vt 0.718750 0.125000 +vt 0.718750 0.109375 +vt 0.718750 0.093750 +vt 0.718750 0.078125 +vt 0.718750 0.062500 +vt 0.718750 0.046875 +vt 0.718750 0.031250 +vt 0.718750 0.015625 +vt 0.703125 0.984375 +vt 0.703125 0.968750 +vt 0.703125 0.953125 +vt 0.703125 0.937500 +vt 0.703125 0.921875 +vt 0.703125 0.906250 +vt 0.703125 0.890625 +vt 0.703125 0.875000 +vt 0.703125 0.859375 +vt 0.703125 0.843750 +vt 0.703125 0.828125 +vt 0.703125 0.812500 +vt 0.703125 0.796875 +vt 0.703125 0.781250 +vt 0.703125 0.765625 +vt 0.703125 0.750000 +vt 0.703125 0.734375 +vt 0.703125 0.718750 +vt 0.703125 0.703125 +vt 0.703125 0.687500 +vt 0.703125 0.671875 +vt 0.703125 0.656250 +vt 0.703125 0.640625 +vt 0.703125 0.625000 +vt 0.703125 0.609375 +vt 0.703125 0.593750 +vt 0.703125 0.578125 +vt 0.703125 0.562500 +vt 0.703125 0.546875 +vt 0.703125 0.531250 +vt 0.703125 0.515625 +vt 0.703125 0.500000 +vt 0.703125 0.484375 +vt 0.703125 0.468750 +vt 0.703125 0.453125 +vt 0.703125 0.437500 +vt 0.703125 0.421875 +vt 0.703125 0.406250 +vt 0.703125 0.390625 +vt 0.703125 0.375000 +vt 0.703125 0.359375 +vt 0.703125 0.343750 +vt 0.703125 0.328125 +vt 0.703125 0.312500 +vt 0.703125 0.296875 +vt 0.703125 0.281250 +vt 0.703125 0.265625 +vt 0.703125 0.250000 +vt 0.703125 0.234375 +vt 0.703125 0.218750 +vt 0.703125 0.203125 +vt 0.703125 0.187500 +vt 0.703125 0.171875 +vt 0.703125 0.156250 +vt 0.703125 0.140625 +vt 0.703125 0.125000 +vt 0.703125 0.109375 +vt 0.703125 0.093750 +vt 0.703125 0.078125 +vt 0.703125 0.062500 +vt 0.703125 0.046875 +vt 0.703125 0.031250 +vt 0.703125 0.015625 +vt 0.687500 0.984375 +vt 0.687500 0.968750 +vt 0.687500 0.953125 +vt 0.687500 0.937500 +vt 0.687500 0.921875 +vt 0.687500 0.906250 +vt 0.687500 0.890625 +vt 0.687500 0.875000 +vt 0.687500 0.859375 +vt 0.687500 0.843750 +vt 0.687500 0.828125 +vt 0.687500 0.812500 +vt 0.687500 0.796875 +vt 0.687500 0.781250 +vt 0.687500 0.765625 +vt 0.687500 0.750000 +vt 0.687500 0.734375 +vt 0.687500 0.718750 +vt 0.687500 0.703125 +vt 0.687500 0.687500 +vt 0.687500 0.671875 +vt 0.687500 0.656250 +vt 0.687500 0.640625 +vt 0.687500 0.625000 +vt 0.687500 0.609375 +vt 0.687500 0.593750 +vt 0.687500 0.578125 +vt 0.687500 0.562500 +vt 0.687500 0.546875 +vt 0.687500 0.531250 +vt 0.687500 0.515625 +vt 0.687500 0.500000 +vt 0.687500 0.484375 +vt 0.687500 0.468750 +vt 0.687500 0.453125 +vt 0.687500 0.437500 +vt 0.687500 0.421875 +vt 0.687500 0.406250 +vt 0.687500 0.390625 +vt 0.687500 0.375000 +vt 0.687500 0.359375 +vt 0.687500 0.343750 +vt 0.687500 0.328125 +vt 0.687500 0.312500 +vt 0.687500 0.296875 +vt 0.687500 0.281250 +vt 0.687500 0.265625 +vt 0.687500 0.250000 +vt 0.687500 0.234375 +vt 0.687500 0.218750 +vt 0.687500 0.203125 +vt 0.687500 0.187500 +vt 0.687500 0.171875 +vt 0.687500 0.156250 +vt 0.687500 0.140625 +vt 0.687500 0.125000 +vt 0.687500 0.109375 +vt 0.687500 0.093750 +vt 0.687500 0.078125 +vt 0.687500 0.062500 +vt 0.687500 0.046875 +vt 0.687500 0.031250 +vt 0.687500 0.015625 +vt 0.671875 0.984375 +vt 0.671875 0.968750 +vt 0.671875 0.953125 +vt 0.671875 0.937500 +vt 0.671875 0.921875 +vt 0.671875 0.906250 +vt 0.671875 0.890625 +vt 0.671875 0.875000 +vt 0.671875 0.859375 +vt 0.671875 0.843750 +vt 0.671875 0.828125 +vt 0.671875 0.812500 +vt 0.671875 0.796875 +vt 0.671875 0.781250 +vt 0.671875 0.765625 +vt 0.671875 0.750000 +vt 0.671875 0.734375 +vt 0.671875 0.718750 +vt 0.671875 0.703125 +vt 0.671875 0.687500 +vt 0.671875 0.671875 +vt 0.671875 0.656250 +vt 0.671875 0.640625 +vt 0.671875 0.625000 +vt 0.671875 0.609375 +vt 0.671875 0.593750 +vt 0.671875 0.578125 +vt 0.671875 0.562500 +vt 0.671875 0.546875 +vt 0.671875 0.531250 +vt 0.671875 0.515625 +vt 0.671875 0.500000 +vt 0.671875 0.484375 +vt 0.671875 0.468750 +vt 0.671875 0.453125 +vt 0.671875 0.437500 +vt 0.671875 0.421875 +vt 0.671875 0.406250 +vt 0.671875 0.390625 +vt 0.671875 0.375000 +vt 0.671875 0.359375 +vt 0.671875 0.343750 +vt 0.671875 0.328125 +vt 0.671875 0.312500 +vt 0.671875 0.296875 +vt 0.671875 0.281250 +vt 0.671875 0.265625 +vt 0.671875 0.250000 +vt 0.671875 0.234375 +vt 0.671875 0.218750 +vt 0.671875 0.203125 +vt 0.671875 0.187500 +vt 0.671875 0.171875 +vt 0.671875 0.156250 +vt 0.671875 0.140625 +vt 0.671875 0.125000 +vt 0.671875 0.109375 +vt 0.671875 0.093750 +vt 0.671875 0.078125 +vt 0.671875 0.062500 +vt 0.671875 0.046875 +vt 0.671875 0.031250 +vt 0.671875 0.015625 +vt 0.656250 0.984375 +vt 0.656250 0.968750 +vt 0.656250 0.953125 +vt 0.656250 0.937500 +vt 0.656250 0.921875 +vt 0.656250 0.906250 +vt 0.656250 0.890625 +vt 0.656250 0.875000 +vt 0.656250 0.859375 +vt 0.656250 0.843750 +vt 0.656250 0.828125 +vt 0.656250 0.812500 +vt 0.656250 0.796875 +vt 0.656250 0.781250 +vt 0.656250 0.765625 +vt 0.656250 0.750000 +vt 0.656250 0.734375 +vt 0.656250 0.718750 +vt 0.656250 0.703125 +vt 0.656250 0.687500 +vt 0.656250 0.671875 +vt 0.656250 0.656250 +vt 0.656250 0.640625 +vt 0.656250 0.625000 +vt 0.656250 0.609375 +vt 0.656250 0.593750 +vt 0.656250 0.578125 +vt 0.656250 0.562500 +vt 0.656250 0.546875 +vt 0.656250 0.531250 +vt 0.656250 0.515625 +vt 0.656250 0.500000 +vt 0.656250 0.484375 +vt 0.656250 0.468750 +vt 0.656250 0.453125 +vt 0.656250 0.437500 +vt 0.656250 0.421875 +vt 0.656250 0.406250 +vt 0.656250 0.390625 +vt 0.656250 0.375000 +vt 0.656250 0.359375 +vt 0.656250 0.343750 +vt 0.656250 0.328125 +vt 0.656250 0.312500 +vt 0.656250 0.296875 +vt 0.656250 0.281250 +vt 0.656250 0.265625 +vt 0.656250 0.250000 +vt 0.656250 0.234375 +vt 0.656250 0.218750 +vt 0.656250 0.203125 +vt 0.656250 0.187500 +vt 0.656250 0.171875 +vt 0.656250 0.156250 +vt 0.656250 0.140625 +vt 0.656250 0.125000 +vt 0.656250 0.109375 +vt 0.656250 0.093750 +vt 0.656250 0.078125 +vt 0.656250 0.062500 +vt 0.656250 0.046875 +vt 0.656250 0.031250 +vt 0.656250 0.015625 +vt 0.640625 0.984375 +vt 0.640625 0.968750 +vt 0.640625 0.953125 +vt 0.640625 0.937500 +vt 0.640625 0.921875 +vt 0.640625 0.906250 +vt 0.640625 0.890625 +vt 0.640625 0.875000 +vt 0.640625 0.859375 +vt 0.640625 0.843750 +vt 0.640625 0.828125 +vt 0.640625 0.812500 +vt 0.640625 0.796875 +vt 0.640625 0.781250 +vt 0.640625 0.765625 +vt 0.640625 0.750000 +vt 0.640625 0.734375 +vt 0.640625 0.718750 +vt 0.640625 0.703125 +vt 0.640625 0.687500 +vt 0.640625 0.671875 +vt 0.640625 0.656250 +vt 0.640625 0.640625 +vt 0.640625 0.625000 +vt 0.640625 0.609375 +vt 0.640625 0.593750 +vt 0.640625 0.578125 +vt 0.640625 0.562500 +vt 0.640625 0.546875 +vt 0.640625 0.531250 +vt 0.640625 0.515625 +vt 0.640625 0.500000 +vt 0.640625 0.484375 +vt 0.640625 0.468750 +vt 0.640625 0.453125 +vt 0.640625 0.437500 +vt 0.640625 0.421875 +vt 0.640625 0.406250 +vt 0.640625 0.390625 +vt 0.640625 0.375000 +vt 0.640625 0.359375 +vt 0.640625 0.343750 +vt 0.640625 0.328125 +vt 0.640625 0.312500 +vt 0.640625 0.296875 +vt 0.640625 0.281250 +vt 0.640625 0.265625 +vt 0.640625 0.250000 +vt 0.640625 0.234375 +vt 0.640625 0.218750 +vt 0.640625 0.203125 +vt 0.640625 0.187500 +vt 0.640625 0.171875 +vt 0.640625 0.156250 +vt 0.640625 0.140625 +vt 0.640625 0.125000 +vt 0.640625 0.109375 +vt 0.640625 0.093750 +vt 0.640625 0.078125 +vt 0.640625 0.062500 +vt 0.640625 0.046875 +vt 0.640625 0.031250 +vt 0.640625 0.015625 +vt 0.625000 0.984375 +vt 0.625000 0.968750 +vt 0.625000 0.953125 +vt 0.625000 0.937500 +vt 0.625000 0.921875 +vt 0.625000 0.906250 +vt 0.625000 0.890625 +vt 0.625000 0.875000 +vt 0.625000 0.859375 +vt 0.625000 0.843750 +vt 0.625000 0.828125 +vt 0.625000 0.812500 +vt 0.625000 0.796875 +vt 0.625000 0.781250 +vt 0.625000 0.765625 +vt 0.625000 0.750000 +vt 0.625000 0.734375 +vt 0.625000 0.718750 +vt 0.625000 0.703125 +vt 0.625000 0.687500 +vt 0.625000 0.671875 +vt 0.625000 0.656250 +vt 0.625000 0.640625 +vt 0.625000 0.625000 +vt 0.625000 0.609375 +vt 0.625000 0.593750 +vt 0.625000 0.578125 +vt 0.625000 0.562500 +vt 0.625000 0.546875 +vt 0.625000 0.531250 +vt 0.625000 0.515625 +vt 0.625000 0.500000 +vt 0.625000 0.484375 +vt 0.625000 0.468750 +vt 0.625000 0.453125 +vt 0.625000 0.437500 +vt 0.625000 0.421875 +vt 0.625000 0.406250 +vt 0.625000 0.390625 +vt 0.625000 0.375000 +vt 0.625000 0.359375 +vt 0.625000 0.343750 +vt 0.625000 0.328125 +vt 0.625000 0.312500 +vt 0.625000 0.296875 +vt 0.625000 0.281250 +vt 0.625000 0.265625 +vt 0.625000 0.250000 +vt 0.625000 0.234375 +vt 0.625000 0.218750 +vt 0.625000 0.203125 +vt 0.625000 0.187500 +vt 0.625000 0.171875 +vt 0.625000 0.156250 +vt 0.625000 0.140625 +vt 0.625000 0.125000 +vt 0.625000 0.109375 +vt 0.625000 0.093750 +vt 0.625000 0.078125 +vt 0.625000 0.062500 +vt 0.625000 0.046875 +vt 0.625000 0.031250 +vt 0.625000 0.015625 +vt 0.609375 0.984375 +vt 0.609375 0.968750 +vt 0.609375 0.953125 +vt 0.609375 0.937500 +vt 0.609375 0.921875 +vt 0.609375 0.906250 +vt 0.609375 0.890625 +vt 0.609375 0.875000 +vt 0.609375 0.859375 +vt 0.609375 0.843750 +vt 0.609375 0.828125 +vt 0.609375 0.812500 +vt 0.609375 0.796875 +vt 0.609375 0.781250 +vt 0.609375 0.765625 +vt 0.609375 0.750000 +vt 0.609375 0.734375 +vt 0.609375 0.718750 +vt 0.609375 0.703125 +vt 0.609375 0.687500 +vt 0.609375 0.671875 +vt 0.609375 0.656250 +vt 0.609375 0.640625 +vt 0.609375 0.625000 +vt 0.609375 0.609375 +vt 0.609375 0.593750 +vt 0.609375 0.578125 +vt 0.609375 0.562500 +vt 0.609375 0.546875 +vt 0.609375 0.531250 +vt 0.609375 0.515625 +vt 0.609375 0.500000 +vt 0.609375 0.484375 +vt 0.609375 0.468750 +vt 0.609375 0.453125 +vt 0.609375 0.437500 +vt 0.609375 0.421875 +vt 0.609375 0.406250 +vt 0.609375 0.390625 +vt 0.609375 0.375000 +vt 0.609375 0.359375 +vt 0.609375 0.343750 +vt 0.609375 0.328125 +vt 0.609375 0.312500 +vt 0.609375 0.296875 +vt 0.609375 0.281250 +vt 0.609375 0.265625 +vt 0.609375 0.250000 +vt 0.609375 0.234375 +vt 0.609375 0.218750 +vt 0.609375 0.203125 +vt 0.609375 0.187500 +vt 0.609375 0.171875 +vt 0.609375 0.156250 +vt 0.609375 0.140625 +vt 0.609375 0.125000 +vt 0.609375 0.109375 +vt 0.609375 0.093750 +vt 0.609375 0.078125 +vt 0.609375 0.062500 +vt 0.609375 0.046875 +vt 0.609375 0.031250 +vt 0.609375 0.015625 +vt 0.593750 0.984375 +vt 0.593750 0.968750 +vt 0.593750 0.953125 +vt 0.593750 0.937500 +vt 0.593750 0.921875 +vt 0.593750 0.906250 +vt 0.593750 0.890625 +vt 0.593750 0.875000 +vt 0.593750 0.859375 +vt 0.593750 0.843750 +vt 0.593750 0.828125 +vt 0.593750 0.812500 +vt 0.593750 0.796875 +vt 0.593750 0.781250 +vt 0.593750 0.765625 +vt 0.593750 0.750000 +vt 0.593750 0.734375 +vt 0.593750 0.718750 +vt 0.593750 0.703125 +vt 0.593750 0.687500 +vt 0.593750 0.671875 +vt 0.593750 0.656250 +vt 0.593750 0.640625 +vt 0.593750 0.625000 +vt 0.593750 0.609375 +vt 0.593750 0.593750 +vt 0.593750 0.578125 +vt 0.593750 0.562500 +vt 0.593750 0.546875 +vt 0.593750 0.531250 +vt 0.593750 0.515625 +vt 0.593750 0.500000 +vt 0.593750 0.484375 +vt 0.593750 0.468750 +vt 0.593750 0.453125 +vt 0.593750 0.437500 +vt 0.593750 0.421875 +vt 0.593750 0.406250 +vt 0.593750 0.390625 +vt 0.593750 0.375000 +vt 0.593750 0.359375 +vt 0.593750 0.343750 +vt 0.593750 0.328125 +vt 0.593750 0.312500 +vt 0.593750 0.296875 +vt 0.593750 0.281250 +vt 0.593750 0.265625 +vt 0.593750 0.250000 +vt 0.593750 0.234375 +vt 0.593750 0.218750 +vt 0.593750 0.203125 +vt 0.593750 0.187500 +vt 0.593750 0.171875 +vt 0.593750 0.156250 +vt 0.593750 0.140625 +vt 0.593750 0.125000 +vt 0.593750 0.109375 +vt 0.593750 0.093750 +vt 0.593750 0.078125 +vt 0.593750 0.062500 +vt 0.593750 0.046875 +vt 0.593750 0.031250 +vt 0.593750 0.015625 +vt 0.578125 0.984375 +vt 0.578125 0.968750 +vt 0.578125 0.953125 +vt 0.578125 0.937500 +vt 0.578125 0.921875 +vt 0.578125 0.906250 +vt 0.578125 0.890625 +vt 0.578125 0.875000 +vt 0.578125 0.859375 +vt 0.578125 0.843750 +vt 0.578125 0.828125 +vt 0.578125 0.812500 +vt 0.578125 0.796875 +vt 0.578125 0.781250 +vt 0.578125 0.765625 +vt 0.578125 0.750000 +vt 0.578125 0.734375 +vt 0.578125 0.718750 +vt 0.578125 0.703125 +vt 0.578125 0.687500 +vt 0.578125 0.671875 +vt 0.578125 0.656250 +vt 0.578125 0.640625 +vt 0.578125 0.625000 +vt 0.578125 0.609375 +vt 0.578125 0.593750 +vt 0.578125 0.578125 +vt 0.578125 0.562500 +vt 0.578125 0.546875 +vt 0.578125 0.531250 +vt 0.578125 0.515625 +vt 0.578125 0.500000 +vt 0.578125 0.484375 +vt 0.578125 0.468750 +vt 0.578125 0.453125 +vt 0.578125 0.437500 +vt 0.578125 0.421875 +vt 0.578125 0.406250 +vt 0.578125 0.390625 +vt 0.578125 0.375000 +vt 0.578125 0.359375 +vt 0.578125 0.343750 +vt 0.578125 0.328125 +vt 0.578125 0.312500 +vt 0.578125 0.296875 +vt 0.578125 0.281250 +vt 0.578125 0.265625 +vt 0.578125 0.250000 +vt 0.578125 0.234375 +vt 0.578125 0.218750 +vt 0.578125 0.203125 +vt 0.578125 0.187500 +vt 0.578125 0.171875 +vt 0.578125 0.156250 +vt 0.578125 0.140625 +vt 0.578125 0.125000 +vt 0.578125 0.109375 +vt 0.578125 0.093750 +vt 0.578125 0.078125 +vt 0.578125 0.062500 +vt 0.578125 0.046875 +vt 0.578125 0.031250 +vt 0.578125 0.015625 +vt 0.562500 0.984375 +vt 0.562500 0.968750 +vt 0.562500 0.953125 +vt 0.562500 0.937500 +vt 0.562500 0.921875 +vt 0.562500 0.906250 +vt 0.562500 0.890625 +vt 0.562500 0.875000 +vt 0.562500 0.859375 +vt 0.562500 0.843750 +vt 0.562500 0.828125 +vt 0.562500 0.812500 +vt 0.562500 0.796875 +vt 0.562500 0.781250 +vt 0.562500 0.765625 +vt 0.562500 0.750000 +vt 0.562500 0.734375 +vt 0.562500 0.718750 +vt 0.562500 0.703125 +vt 0.562500 0.687500 +vt 0.562500 0.671875 +vt 0.562500 0.656250 +vt 0.562500 0.640625 +vt 0.562500 0.625000 +vt 0.562500 0.609375 +vt 0.562500 0.593750 +vt 0.562500 0.578125 +vt 0.562500 0.562500 +vt 0.562500 0.546875 +vt 0.562500 0.531250 +vt 0.562500 0.515625 +vt 0.562500 0.500000 +vt 0.562500 0.484375 +vt 0.562500 0.468750 +vt 0.562500 0.453125 +vt 0.562500 0.437500 +vt 0.562500 0.421875 +vt 0.562500 0.406250 +vt 0.562500 0.390625 +vt 0.562500 0.375000 +vt 0.562500 0.359375 +vt 0.562500 0.343750 +vt 0.562500 0.328125 +vt 0.562500 0.312500 +vt 0.562500 0.296875 +vt 0.562500 0.281250 +vt 0.562500 0.265625 +vt 0.562500 0.250000 +vt 0.562500 0.234375 +vt 0.562500 0.218750 +vt 0.562500 0.203125 +vt 0.562500 0.187500 +vt 0.562500 0.171875 +vt 0.562500 0.156250 +vt 0.562500 0.140625 +vt 0.562500 0.125000 +vt 0.562500 0.109375 +vt 0.562500 0.093750 +vt 0.562500 0.078125 +vt 0.562500 0.062500 +vt 0.562500 0.046875 +vt 0.562500 0.031250 +vt 0.562500 0.015625 +vt 0.546875 0.984375 +vt 0.546875 0.968750 +vt 0.546875 0.953125 +vt 0.546875 0.937500 +vt 0.546875 0.921875 +vt 0.546875 0.906250 +vt 0.546875 0.890625 +vt 0.546875 0.875000 +vt 0.546875 0.859375 +vt 0.546875 0.843750 +vt 0.546875 0.828125 +vt 0.546875 0.812500 +vt 0.546875 0.796875 +vt 0.546875 0.781250 +vt 0.546875 0.765625 +vt 0.546875 0.750000 +vt 0.546875 0.734375 +vt 0.546875 0.718750 +vt 0.546875 0.703125 +vt 0.546875 0.687500 +vt 0.546875 0.671875 +vt 0.546875 0.656250 +vt 0.546875 0.640625 +vt 0.546875 0.625000 +vt 0.546875 0.609375 +vt 0.546875 0.593750 +vt 0.546875 0.578125 +vt 0.546875 0.562500 +vt 0.546875 0.546875 +vt 0.546875 0.531250 +vt 0.546875 0.515625 +vt 0.546875 0.500000 +vt 0.546875 0.484375 +vt 0.546875 0.468750 +vt 0.546875 0.453125 +vt 0.546875 0.437500 +vt 0.546875 0.421875 +vt 0.546875 0.406250 +vt 0.546875 0.390625 +vt 0.546875 0.375000 +vt 0.546875 0.359375 +vt 0.546875 0.343750 +vt 0.546875 0.328125 +vt 0.546875 0.312500 +vt 0.546875 0.296875 +vt 0.546875 0.281250 +vt 0.546875 0.265625 +vt 0.546875 0.250000 +vt 0.546875 0.234375 +vt 0.546875 0.218750 +vt 0.546875 0.203125 +vt 0.546875 0.187500 +vt 0.546875 0.171875 +vt 0.546875 0.156250 +vt 0.546875 0.140625 +vt 0.546875 0.125000 +vt 0.546875 0.109375 +vt 0.546875 0.093750 +vt 0.546875 0.078125 +vt 0.546875 0.062500 +vt 0.546875 0.046875 +vt 0.546875 0.031250 +vt 0.546875 0.015625 +vt 0.531250 0.984375 +vt 0.531250 0.968750 +vt 0.531250 0.953125 +vt 0.531250 0.937500 +vt 0.531250 0.921875 +vt 0.531250 0.906250 +vt 0.531250 0.890625 +vt 0.531250 0.875000 +vt 0.531250 0.859375 +vt 0.531250 0.843750 +vt 0.531250 0.828125 +vt 0.531250 0.812500 +vt 0.531250 0.796875 +vt 0.531250 0.781250 +vt 0.531250 0.765625 +vt 0.531250 0.750000 +vt 0.531250 0.734375 +vt 0.531250 0.718750 +vt 0.531250 0.703125 +vt 0.531250 0.687500 +vt 0.531250 0.671875 +vt 0.531250 0.656250 +vt 0.531250 0.640625 +vt 0.531250 0.625000 +vt 0.531250 0.609375 +vt 0.531250 0.593750 +vt 0.531250 0.578125 +vt 0.531250 0.562500 +vt 0.531250 0.546875 +vt 0.531250 0.531250 +vt 0.531250 0.515625 +vt 0.531250 0.500000 +vt 0.531250 0.484375 +vt 0.531250 0.468750 +vt 0.531250 0.453125 +vt 0.531250 0.437500 +vt 0.531250 0.421875 +vt 0.531250 0.406250 +vt 0.531250 0.390625 +vt 0.531250 0.375000 +vt 0.531250 0.359375 +vt 0.531250 0.343750 +vt 0.531250 0.328125 +vt 0.531250 0.312500 +vt 0.531250 0.296875 +vt 0.531250 0.281250 +vt 0.531250 0.265625 +vt 0.531250 0.250000 +vt 0.531250 0.234375 +vt 0.531250 0.218750 +vt 0.531250 0.203125 +vt 0.531250 0.187500 +vt 0.531250 0.171875 +vt 0.531250 0.156250 +vt 0.531250 0.140625 +vt 0.531250 0.125000 +vt 0.531250 0.109375 +vt 0.531250 0.093750 +vt 0.531250 0.078125 +vt 0.531250 0.062500 +vt 0.531250 0.046875 +vt 0.531250 0.031250 +vt 0.531250 0.015625 +vt 0.515625 0.984375 +vt 0.515625 0.968750 +vt 0.515625 0.953125 +vt 0.515625 0.937500 +vt 0.515625 0.921875 +vt 0.515625 0.906250 +vt 0.515625 0.890625 +vt 0.515625 0.875000 +vt 0.515625 0.859375 +vt 0.515625 0.843750 +vt 0.515625 0.828125 +vt 0.515625 0.812500 +vt 0.515625 0.796875 +vt 0.515625 0.781250 +vt 0.515625 0.765625 +vt 0.515625 0.750000 +vt 0.515625 0.734375 +vt 0.515625 0.718750 +vt 0.515625 0.703125 +vt 0.515625 0.687500 +vt 0.515625 0.671875 +vt 0.515625 0.656250 +vt 0.515625 0.640625 +vt 0.515625 0.625000 +vt 0.515625 0.609375 +vt 0.515625 0.593750 +vt 0.515625 0.578125 +vt 0.515625 0.562500 +vt 0.515625 0.546875 +vt 0.515625 0.531250 +vt 0.515625 0.515625 +vt 0.515625 0.500000 +vt 0.515625 0.484375 +vt 0.515625 0.468750 +vt 0.515625 0.453125 +vt 0.515625 0.437500 +vt 0.515625 0.421875 +vt 0.515625 0.406250 +vt 0.515625 0.390625 +vt 0.515625 0.375000 +vt 0.515625 0.359375 +vt 0.515625 0.343750 +vt 0.515625 0.328125 +vt 0.515625 0.312500 +vt 0.515625 0.296875 +vt 0.515625 0.281250 +vt 0.515625 0.265625 +vt 0.515625 0.250000 +vt 0.515625 0.234375 +vt 0.515625 0.218750 +vt 0.515625 0.203125 +vt 0.515625 0.187500 +vt 0.515625 0.171875 +vt 0.515625 0.156250 +vt 0.515625 0.140625 +vt 0.515625 0.125000 +vt 0.515625 0.109375 +vt 0.515625 0.093750 +vt 0.515625 0.078125 +vt 0.515625 0.062500 +vt 0.515625 0.046875 +vt 0.515625 0.031250 +vt 0.515625 0.015625 +vt 0.500000 0.984375 +vt 0.500000 0.968750 +vt 0.500000 0.953125 +vt 0.500000 0.937500 +vt 0.500000 0.921875 +vt 0.500000 0.906250 +vt 0.500000 0.890625 +vt 0.500000 0.875000 +vt 0.500000 0.859375 +vt 0.500000 0.843750 +vt 0.500000 0.828125 +vt 0.500000 0.812500 +vt 0.500000 0.796875 +vt 0.500000 0.781250 +vt 0.500000 0.765625 +vt 0.500000 0.750000 +vt 0.500000 0.734375 +vt 0.500000 0.718750 +vt 0.500000 0.703125 +vt 0.500000 0.687500 +vt 0.500000 0.671875 +vt 0.500000 0.656250 +vt 0.500000 0.640625 +vt 0.500000 0.625000 +vt 0.500000 0.609375 +vt 0.500000 0.593750 +vt 0.500000 0.578125 +vt 0.500000 0.562500 +vt 0.500000 0.546875 +vt 0.500000 0.531250 +vt 0.500000 0.515625 +vt 0.500000 0.500000 +vt 0.500000 0.484375 +vt 0.500000 0.468750 +vt 0.500000 0.453125 +vt 0.500000 0.437500 +vt 0.500000 0.421875 +vt 0.500000 0.406250 +vt 0.500000 0.390625 +vt 0.500000 0.375000 +vt 0.500000 0.359375 +vt 0.500000 0.343750 +vt 0.500000 0.328125 +vt 0.500000 0.312500 +vt 0.500000 0.296875 +vt 0.500000 0.281250 +vt 0.500000 0.265625 +vt 0.500000 0.250000 +vt 0.500000 0.234375 +vt 0.500000 0.218750 +vt 0.500000 0.203125 +vt 0.500000 0.187500 +vt 0.500000 0.171875 +vt 0.500000 0.156250 +vt 0.500000 0.140625 +vt 0.500000 0.125000 +vt 0.500000 0.109375 +vt 0.500000 0.093750 +vt 0.500000 0.078125 +vt 0.500000 0.062500 +vt 0.500000 0.046875 +vt 0.500000 0.031250 +vt 0.500000 0.015625 +vt 0.484375 0.984375 +vt 0.484375 0.968750 +vt 0.484375 0.953125 +vt 0.484375 0.937500 +vt 0.484375 0.921875 +vt 0.484375 0.906250 +vt 0.484375 0.890625 +vt 0.484375 0.875000 +vt 0.484375 0.859375 +vt 0.484375 0.843750 +vt 0.484375 0.828125 +vt 0.484375 0.812500 +vt 0.484375 0.796875 +vt 0.484375 0.781250 +vt 0.484375 0.765625 +vt 0.484375 0.750000 +vt 0.484375 0.734375 +vt 0.484375 0.718750 +vt 0.484375 0.703125 +vt 0.484375 0.687500 +vt 0.484375 0.671875 +vt 0.484375 0.656250 +vt 0.484375 0.640625 +vt 0.484375 0.625000 +vt 0.484375 0.609375 +vt 0.484375 0.593750 +vt 0.484375 0.578125 +vt 0.484375 0.562500 +vt 0.484375 0.546875 +vt 0.484375 0.531250 +vt 0.484375 0.515625 +vt 0.484375 0.500000 +vt 0.484375 0.484375 +vt 0.484375 0.468750 +vt 0.484375 0.453125 +vt 0.484375 0.437500 +vt 0.484375 0.421875 +vt 0.484375 0.406250 +vt 0.484375 0.390625 +vt 0.484375 0.375000 +vt 0.484375 0.359375 +vt 0.484375 0.343750 +vt 0.484375 0.328125 +vt 0.484375 0.312500 +vt 0.484375 0.296875 +vt 0.484375 0.281250 +vt 0.484375 0.265625 +vt 0.484375 0.250000 +vt 0.484375 0.234375 +vt 0.484375 0.218750 +vt 0.484375 0.203125 +vt 0.484375 0.187500 +vt 0.484375 0.171875 +vt 0.484375 0.156250 +vt 0.484375 0.140625 +vt 0.484375 0.125000 +vt 0.484375 0.109375 +vt 0.484375 0.093750 +vt 0.484375 0.078125 +vt 0.484375 0.062500 +vt 0.484375 0.046875 +vt 0.484375 0.031250 +vt 0.484375 0.015625 +vt 0.468750 0.984375 +vt 0.468750 0.968750 +vt 0.468750 0.953125 +vt 0.468750 0.937500 +vt 0.468750 0.921875 +vt 0.468750 0.906250 +vt 0.468750 0.890625 +vt 0.468750 0.875000 +vt 0.468750 0.859375 +vt 0.468750 0.843750 +vt 0.468750 0.828125 +vt 0.468750 0.812500 +vt 0.468750 0.796875 +vt 0.468750 0.781250 +vt 0.468750 0.765625 +vt 0.468750 0.750000 +vt 0.468750 0.734375 +vt 0.468750 0.718750 +vt 0.468750 0.703125 +vt 0.468750 0.687500 +vt 0.468750 0.671875 +vt 0.468750 0.656250 +vt 0.468750 0.640625 +vt 0.468750 0.625000 +vt 0.468750 0.609375 +vt 0.468750 0.593750 +vt 0.468750 0.578125 +vt 0.468750 0.562500 +vt 0.468750 0.546875 +vt 0.468750 0.531250 +vt 0.468750 0.515625 +vt 0.468750 0.500000 +vt 0.468750 0.484375 +vt 0.468750 0.468750 +vt 0.468750 0.453125 +vt 0.468750 0.437500 +vt 0.468750 0.421875 +vt 0.468750 0.406250 +vt 0.468750 0.390625 +vt 0.468750 0.375000 +vt 0.468750 0.359375 +vt 0.468750 0.343750 +vt 0.468750 0.328125 +vt 0.468750 0.312500 +vt 0.468750 0.296875 +vt 0.468750 0.281250 +vt 0.468750 0.265625 +vt 0.468750 0.250000 +vt 0.468750 0.234375 +vt 0.468750 0.218750 +vt 0.468750 0.203125 +vt 0.468750 0.187500 +vt 0.468750 0.171875 +vt 0.468750 0.156250 +vt 0.468750 0.140625 +vt 0.468750 0.125000 +vt 0.468750 0.109375 +vt 0.468750 0.093750 +vt 0.468750 0.078125 +vt 0.468750 0.062500 +vt 0.468750 0.046875 +vt 0.468750 0.031250 +vt 0.468750 0.015625 +vt 0.453125 0.984375 +vt 0.453125 0.968750 +vt 0.453125 0.953125 +vt 0.453125 0.937500 +vt 0.453125 0.921875 +vt 0.453125 0.906250 +vt 0.453125 0.890625 +vt 0.453125 0.875000 +vt 0.453125 0.859375 +vt 0.453125 0.843750 +vt 0.453125 0.828125 +vt 0.453125 0.812500 +vt 0.453125 0.796875 +vt 0.453125 0.781250 +vt 0.453125 0.765625 +vt 0.453125 0.750000 +vt 0.453125 0.734375 +vt 0.453125 0.718750 +vt 0.453125 0.703125 +vt 0.453125 0.687500 +vt 0.453125 0.671875 +vt 0.453125 0.656250 +vt 0.453125 0.640625 +vt 0.453125 0.625000 +vt 0.453125 0.609375 +vt 0.453125 0.593750 +vt 0.453125 0.578125 +vt 0.453125 0.562500 +vt 0.453125 0.546875 +vt 0.453125 0.531250 +vt 0.453125 0.515625 +vt 0.453125 0.500000 +vt 0.453125 0.484375 +vt 0.453125 0.468750 +vt 0.453125 0.453125 +vt 0.453125 0.437500 +vt 0.453125 0.421875 +vt 0.453125 0.406250 +vt 0.453125 0.390625 +vt 0.453125 0.375000 +vt 0.453125 0.359375 +vt 0.453125 0.343750 +vt 0.453125 0.328125 +vt 0.453125 0.312500 +vt 0.453125 0.296875 +vt 0.453125 0.281250 +vt 0.453125 0.265625 +vt 0.453125 0.250000 +vt 0.453125 0.234375 +vt 0.453125 0.218750 +vt 0.453125 0.203125 +vt 0.453125 0.187500 +vt 0.453125 0.171875 +vt 0.453125 0.156250 +vt 0.453125 0.140625 +vt 0.453125 0.125000 +vt 0.453125 0.109375 +vt 0.453125 0.093750 +vt 0.453125 0.078125 +vt 0.453125 0.062500 +vt 0.453125 0.046875 +vt 0.453125 0.031250 +vt 0.453125 0.015625 +vt 0.437500 0.984375 +vt 0.437500 0.968750 +vt 0.437500 0.953125 +vt 0.437500 0.937500 +vt 0.437500 0.921875 +vt 0.437500 0.906250 +vt 0.437500 0.890625 +vt 0.437500 0.875000 +vt 0.437500 0.859375 +vt 0.437500 0.843750 +vt 0.437500 0.828125 +vt 0.437500 0.812500 +vt 0.437500 0.796875 +vt 0.437500 0.781250 +vt 0.437500 0.765625 +vt 0.437500 0.750000 +vt 0.437500 0.734375 +vt 0.437500 0.718750 +vt 0.437500 0.703125 +vt 0.437500 0.687500 +vt 0.437500 0.671875 +vt 0.437500 0.656250 +vt 0.437500 0.640625 +vt 0.437500 0.625000 +vt 0.437500 0.609375 +vt 0.437500 0.593750 +vt 0.437500 0.578125 +vt 0.437500 0.562500 +vt 0.437500 0.546875 +vt 0.437500 0.531250 +vt 0.437500 0.515625 +vt 0.437500 0.500000 +vt 0.437500 0.484375 +vt 0.437500 0.468750 +vt 0.437500 0.453125 +vt 0.437500 0.437500 +vt 0.437500 0.421875 +vt 0.437500 0.406250 +vt 0.437500 0.390625 +vt 0.437500 0.375000 +vt 0.437500 0.359375 +vt 0.437500 0.343750 +vt 0.437500 0.328125 +vt 0.437500 0.312500 +vt 0.437500 0.296875 +vt 0.437500 0.281250 +vt 0.437500 0.265625 +vt 0.437500 0.250000 +vt 0.437500 0.234375 +vt 0.437500 0.218750 +vt 0.437500 0.203125 +vt 0.437500 0.187500 +vt 0.437500 0.171875 +vt 0.437500 0.156250 +vt 0.437500 0.140625 +vt 0.437500 0.125000 +vt 0.437500 0.109375 +vt 0.437500 0.093750 +vt 0.437500 0.078125 +vt 0.437500 0.062500 +vt 0.437500 0.046875 +vt 0.437500 0.031250 +vt 0.437500 0.015625 +vt 0.421875 0.984375 +vt 0.421875 0.968750 +vt 0.421875 0.953125 +vt 0.421875 0.937500 +vt 0.421875 0.921875 +vt 0.421875 0.906250 +vt 0.421875 0.890625 +vt 0.421875 0.875000 +vt 0.421875 0.859375 +vt 0.421875 0.843750 +vt 0.421875 0.828125 +vt 0.421875 0.812500 +vt 0.421875 0.796875 +vt 0.421875 0.781250 +vt 0.421875 0.765625 +vt 0.421875 0.750000 +vt 0.421875 0.734375 +vt 0.421875 0.718750 +vt 0.421875 0.703125 +vt 0.421875 0.687500 +vt 0.421875 0.671875 +vt 0.421875 0.656250 +vt 0.421875 0.640625 +vt 0.421875 0.625000 +vt 0.421875 0.609375 +vt 0.421875 0.593750 +vt 0.421875 0.578125 +vt 0.421875 0.562500 +vt 0.421875 0.546875 +vt 0.421875 0.531250 +vt 0.421875 0.515625 +vt 0.421875 0.500000 +vt 0.421875 0.484375 +vt 0.421875 0.468750 +vt 0.421875 0.453125 +vt 0.421875 0.437500 +vt 0.421875 0.421875 +vt 0.421875 0.406250 +vt 0.421875 0.390625 +vt 0.421875 0.375000 +vt 0.421875 0.359375 +vt 0.421875 0.343750 +vt 0.421875 0.328125 +vt 0.421875 0.312500 +vt 0.421875 0.296875 +vt 0.421875 0.281250 +vt 0.421875 0.265625 +vt 0.421875 0.250000 +vt 0.421875 0.234375 +vt 0.421875 0.218750 +vt 0.421875 0.203125 +vt 0.421875 0.187500 +vt 0.421875 0.171875 +vt 0.421875 0.156250 +vt 0.421875 0.140625 +vt 0.421875 0.125000 +vt 0.421875 0.109375 +vt 0.421875 0.093750 +vt 0.421875 0.078125 +vt 0.421875 0.062500 +vt 0.421875 0.046875 +vt 0.421875 0.031250 +vt 0.421875 0.015625 +vt 0.406250 0.984375 +vt 0.406250 0.968750 +vt 0.406250 0.953125 +vt 0.406250 0.937500 +vt 0.406250 0.921875 +vt 0.406250 0.906250 +vt 0.406250 0.890625 +vt 0.406250 0.875000 +vt 0.406250 0.859375 +vt 0.406250 0.843750 +vt 0.406250 0.828125 +vt 0.406250 0.812500 +vt 0.406250 0.796875 +vt 0.406250 0.781250 +vt 0.406250 0.765625 +vt 0.406250 0.750000 +vt 0.406250 0.734375 +vt 0.406250 0.718750 +vt 0.406250 0.703125 +vt 0.406250 0.687500 +vt 0.406250 0.671875 +vt 0.406250 0.656250 +vt 0.406250 0.640625 +vt 0.406250 0.625000 +vt 0.406250 0.609375 +vt 0.406250 0.593750 +vt 0.406250 0.578125 +vt 0.406250 0.562500 +vt 0.406250 0.546875 +vt 0.406250 0.531250 +vt 0.406250 0.515625 +vt 0.406250 0.500000 +vt 0.406250 0.484375 +vt 0.406250 0.468750 +vt 0.406250 0.453125 +vt 0.406250 0.437500 +vt 0.406250 0.421875 +vt 0.406250 0.406250 +vt 0.406250 0.390625 +vt 0.406250 0.375000 +vt 0.406250 0.359375 +vt 0.406250 0.343750 +vt 0.406250 0.328125 +vt 0.406250 0.312500 +vt 0.406250 0.296875 +vt 0.406250 0.281250 +vt 0.406250 0.265625 +vt 0.406250 0.250000 +vt 0.406250 0.234375 +vt 0.406250 0.218750 +vt 0.406250 0.203125 +vt 0.406250 0.187500 +vt 0.406250 0.171875 +vt 0.406250 0.156250 +vt 0.406250 0.140625 +vt 0.406250 0.125000 +vt 0.406250 0.109375 +vt 0.406250 0.093750 +vt 0.406250 0.078125 +vt 0.406250 0.062500 +vt 0.406250 0.046875 +vt 0.406250 0.031250 +vt 0.406250 0.015625 +vt 0.390625 0.984375 +vt 0.390625 0.968750 +vt 0.390625 0.953125 +vt 0.390625 0.937500 +vt 0.390625 0.921875 +vt 0.390625 0.906250 +vt 0.390625 0.890625 +vt 0.390625 0.875000 +vt 0.390625 0.859375 +vt 0.390625 0.843750 +vt 0.390625 0.828125 +vt 0.390625 0.812500 +vt 0.390625 0.796875 +vt 0.390625 0.781250 +vt 0.390625 0.765625 +vt 0.390625 0.750000 +vt 0.390625 0.734375 +vt 0.390625 0.718750 +vt 0.390625 0.703125 +vt 0.390625 0.687500 +vt 0.390625 0.671875 +vt 0.390625 0.656250 +vt 0.390625 0.640625 +vt 0.390625 0.625000 +vt 0.390625 0.609375 +vt 0.390625 0.593750 +vt 0.390625 0.578125 +vt 0.390625 0.562500 +vt 0.390625 0.546875 +vt 0.390625 0.531250 +vt 0.390625 0.515625 +vt 0.390625 0.500000 +vt 0.390625 0.484375 +vt 0.390625 0.468750 +vt 0.390625 0.453125 +vt 0.390625 0.437500 +vt 0.390625 0.421875 +vt 0.390625 0.406250 +vt 0.390625 0.390625 +vt 0.390625 0.375000 +vt 0.390625 0.359375 +vt 0.390625 0.343750 +vt 0.390625 0.328125 +vt 0.390625 0.312500 +vt 0.390625 0.296875 +vt 0.390625 0.281250 +vt 0.390625 0.265625 +vt 0.390625 0.250000 +vt 0.390625 0.234375 +vt 0.390625 0.218750 +vt 0.390625 0.203125 +vt 0.390625 0.187500 +vt 0.390625 0.171875 +vt 0.390625 0.156250 +vt 0.390625 0.140625 +vt 0.390625 0.125000 +vt 0.390625 0.109375 +vt 0.390625 0.093750 +vt 0.390625 0.078125 +vt 0.390625 0.062500 +vt 0.390625 0.046875 +vt 0.390625 0.031250 +vt 0.390625 0.015625 +vt 0.375000 0.984375 +vt 0.375000 0.968750 +vt 0.375000 0.953125 +vt 0.375000 0.937500 +vt 0.375000 0.921875 +vt 0.375000 0.906250 +vt 0.375000 0.890625 +vt 0.375000 0.875000 +vt 0.375000 0.859375 +vt 0.375000 0.843750 +vt 0.375000 0.828125 +vt 0.375000 0.812500 +vt 0.375000 0.796875 +vt 0.375000 0.781250 +vt 0.375000 0.765625 +vt 0.375000 0.750000 +vt 0.375000 0.734375 +vt 0.375000 0.718750 +vt 0.375000 0.703125 +vt 0.375000 0.687500 +vt 0.375000 0.671875 +vt 0.375000 0.656250 +vt 0.375000 0.640625 +vt 0.375000 0.625000 +vt 0.375000 0.609375 +vt 0.375000 0.593750 +vt 0.375000 0.578125 +vt 0.375000 0.562500 +vt 0.375000 0.546875 +vt 0.375000 0.531250 +vt 0.375000 0.515625 +vt 0.375000 0.500000 +vt 0.375000 0.484375 +vt 0.375000 0.468750 +vt 0.375000 0.453125 +vt 0.375000 0.437500 +vt 0.375000 0.421875 +vt 0.375000 0.406250 +vt 0.375000 0.390625 +vt 0.375000 0.375000 +vt 0.375000 0.359375 +vt 0.375000 0.343750 +vt 0.375000 0.328125 +vt 0.375000 0.312500 +vt 0.375000 0.296875 +vt 0.375000 0.281250 +vt 0.375000 0.265625 +vt 0.375000 0.250000 +vt 0.375000 0.234375 +vt 0.375000 0.218750 +vt 0.375000 0.203125 +vt 0.375000 0.187500 +vt 0.375000 0.171875 +vt 0.375000 0.156250 +vt 0.375000 0.140625 +vt 0.375000 0.125000 +vt 0.375000 0.109375 +vt 0.375000 0.093750 +vt 0.375000 0.078125 +vt 0.375000 0.062500 +vt 0.375000 0.046875 +vt 0.375000 0.031250 +vt 0.375000 0.015625 +vt 0.359375 0.984375 +vt 0.359375 0.968750 +vt 0.359375 0.953125 +vt 0.359375 0.937500 +vt 0.359375 0.921875 +vt 0.359375 0.906250 +vt 0.359375 0.890625 +vt 0.359375 0.875000 +vt 0.359375 0.859375 +vt 0.359375 0.843750 +vt 0.359375 0.828125 +vt 0.359375 0.812500 +vt 0.359375 0.796875 +vt 0.359375 0.781250 +vt 0.359375 0.765625 +vt 0.359375 0.750000 +vt 0.359375 0.734375 +vt 0.359375 0.718750 +vt 0.359375 0.703125 +vt 0.359375 0.687500 +vt 0.359375 0.671875 +vt 0.359375 0.656250 +vt 0.359375 0.640625 +vt 0.359375 0.625000 +vt 0.359375 0.609375 +vt 0.359375 0.593750 +vt 0.359375 0.578125 +vt 0.359375 0.562500 +vt 0.359375 0.546875 +vt 0.359375 0.531250 +vt 0.359375 0.515625 +vt 0.359375 0.500000 +vt 0.359375 0.484375 +vt 0.359375 0.468750 +vt 0.359375 0.453125 +vt 0.359375 0.437500 +vt 0.359375 0.421875 +vt 0.359375 0.406250 +vt 0.359375 0.390625 +vt 0.359375 0.375000 +vt 0.359375 0.359375 +vt 0.359375 0.343750 +vt 0.359375 0.328125 +vt 0.359375 0.312500 +vt 0.359375 0.296875 +vt 0.359375 0.281250 +vt 0.359375 0.265625 +vt 0.359375 0.250000 +vt 0.359375 0.234375 +vt 0.359375 0.218750 +vt 0.359375 0.203125 +vt 0.359375 0.187500 +vt 0.359375 0.171875 +vt 0.359375 0.156250 +vt 0.359375 0.140625 +vt 0.359375 0.125000 +vt 0.359375 0.109375 +vt 0.359375 0.093750 +vt 0.359375 0.078125 +vt 0.359375 0.062500 +vt 0.359375 0.046875 +vt 0.359375 0.031250 +vt 0.359375 0.015625 +vt 0.343750 0.984375 +vt 0.343750 0.968750 +vt 0.343750 0.953125 +vt 0.343750 0.937500 +vt 0.343750 0.921875 +vt 0.343750 0.906250 +vt 0.343750 0.890625 +vt 0.343750 0.875000 +vt 0.343750 0.859375 +vt 0.343750 0.843750 +vt 0.343750 0.828125 +vt 0.343750 0.812500 +vt 0.343750 0.796875 +vt 0.343750 0.781250 +vt 0.343750 0.765625 +vt 0.343750 0.750000 +vt 0.343750 0.734375 +vt 0.343750 0.718750 +vt 0.343750 0.703125 +vt 0.343750 0.687500 +vt 0.343750 0.671875 +vt 0.343750 0.656250 +vt 0.343750 0.640625 +vt 0.343750 0.625000 +vt 0.343750 0.609375 +vt 0.343750 0.593750 +vt 0.343750 0.578125 +vt 0.343750 0.562500 +vt 0.343750 0.546875 +vt 0.343750 0.531250 +vt 0.343750 0.515625 +vt 0.343750 0.500000 +vt 0.343750 0.484375 +vt 0.343750 0.468750 +vt 0.343750 0.453125 +vt 0.343750 0.437500 +vt 0.343750 0.421875 +vt 0.343750 0.406250 +vt 0.343750 0.390625 +vt 0.343750 0.375000 +vt 0.343750 0.359375 +vt 0.343750 0.343750 +vt 0.343750 0.328125 +vt 0.343750 0.312500 +vt 0.343750 0.296875 +vt 0.343750 0.281250 +vt 0.343750 0.265625 +vt 0.343750 0.250000 +vt 0.343750 0.234375 +vt 0.343750 0.218750 +vt 0.343750 0.203125 +vt 0.343750 0.187500 +vt 0.343750 0.171875 +vt 0.343750 0.156250 +vt 0.343750 0.140625 +vt 0.343750 0.125000 +vt 0.343750 0.109375 +vt 0.343750 0.093750 +vt 0.343750 0.078125 +vt 0.343750 0.062500 +vt 0.343750 0.046875 +vt 0.343750 0.031250 +vt 0.343750 0.015625 +vt 0.328125 0.984375 +vt 0.328125 0.968750 +vt 0.328125 0.953125 +vt 0.328125 0.937500 +vt 0.328125 0.921875 +vt 0.328125 0.906250 +vt 0.328125 0.890625 +vt 0.328125 0.875000 +vt 0.328125 0.859375 +vt 0.328125 0.843750 +vt 0.328125 0.828125 +vt 0.328125 0.812500 +vt 0.328125 0.796875 +vt 0.328125 0.781250 +vt 0.328125 0.765625 +vt 0.328125 0.750000 +vt 0.328125 0.734375 +vt 0.328125 0.718750 +vt 0.328125 0.703125 +vt 0.328125 0.687500 +vt 0.328125 0.671875 +vt 0.328125 0.656250 +vt 0.328125 0.640625 +vt 0.328125 0.625000 +vt 0.328125 0.609375 +vt 0.328125 0.593750 +vt 0.328125 0.578125 +vt 0.328125 0.562500 +vt 0.328125 0.546875 +vt 0.328125 0.531250 +vt 0.328125 0.515625 +vt 0.328125 0.500000 +vt 0.328125 0.484375 +vt 0.328125 0.468750 +vt 0.328125 0.453125 +vt 0.328125 0.437500 +vt 0.328125 0.421875 +vt 0.328125 0.406250 +vt 0.328125 0.390625 +vt 0.328125 0.375000 +vt 0.328125 0.359375 +vt 0.328125 0.343750 +vt 0.328125 0.328125 +vt 0.328125 0.312500 +vt 0.328125 0.296875 +vt 0.328125 0.281250 +vt 0.328125 0.265625 +vt 0.328125 0.250000 +vt 0.328125 0.234375 +vt 0.328125 0.218750 +vt 0.328125 0.203125 +vt 0.328125 0.187500 +vt 0.328125 0.171875 +vt 0.328125 0.156250 +vt 0.328125 0.140625 +vt 0.328125 0.125000 +vt 0.328125 0.109375 +vt 0.328125 0.093750 +vt 0.328125 0.078125 +vt 0.328125 0.062500 +vt 0.328125 0.046875 +vt 0.328125 0.031250 +vt 0.328125 0.015625 +vt 0.312500 0.984375 +vt 0.312500 0.968750 +vt 0.312500 0.953125 +vt 0.312500 0.937500 +vt 0.312500 0.921875 +vt 0.312500 0.906250 +vt 0.312500 0.890625 +vt 0.312500 0.875000 +vt 0.312500 0.859375 +vt 0.312500 0.843750 +vt 0.312500 0.828125 +vt 0.312500 0.812500 +vt 0.312500 0.796875 +vt 0.312500 0.781250 +vt 0.312500 0.765625 +vt 0.312500 0.750000 +vt 0.312500 0.734375 +vt 0.312500 0.718750 +vt 0.312500 0.703125 +vt 0.312500 0.687500 +vt 0.312500 0.671875 +vt 0.312500 0.656250 +vt 0.312500 0.640625 +vt 0.312500 0.625000 +vt 0.312500 0.609375 +vt 0.312500 0.593750 +vt 0.312500 0.578125 +vt 0.312500 0.562500 +vt 0.312500 0.546875 +vt 0.312500 0.531250 +vt 0.312500 0.515625 +vt 0.312500 0.500000 +vt 0.312500 0.484375 +vt 0.312500 0.468750 +vt 0.312500 0.453125 +vt 0.312500 0.437500 +vt 0.312500 0.421875 +vt 0.312500 0.406250 +vt 0.312500 0.390625 +vt 0.312500 0.375000 +vt 0.312500 0.359375 +vt 0.312500 0.343750 +vt 0.312500 0.328125 +vt 0.312500 0.312500 +vt 0.312500 0.296875 +vt 0.312500 0.281250 +vt 0.312500 0.265625 +vt 0.312500 0.250000 +vt 0.312500 0.234375 +vt 0.312500 0.218750 +vt 0.312500 0.203125 +vt 0.312500 0.187500 +vt 0.312500 0.171875 +vt 0.312500 0.156250 +vt 0.312500 0.140625 +vt 0.312500 0.125000 +vt 0.312500 0.109375 +vt 0.312500 0.093750 +vt 0.312500 0.078125 +vt 0.312500 0.062500 +vt 0.312500 0.046875 +vt 0.312500 0.031250 +vt 0.312500 0.015625 +vt 0.296875 0.984375 +vt 0.296875 0.968750 +vt 0.296875 0.953125 +vt 0.296875 0.937500 +vt 0.296875 0.921875 +vt 0.296875 0.906250 +vt 0.296875 0.890625 +vt 0.296875 0.875000 +vt 0.296875 0.859375 +vt 0.296875 0.843750 +vt 0.296875 0.828125 +vt 0.296875 0.812500 +vt 0.296875 0.796875 +vt 0.296875 0.781250 +vt 0.296875 0.765625 +vt 0.296875 0.750000 +vt 0.296875 0.734375 +vt 0.296875 0.718750 +vt 0.296875 0.703125 +vt 0.296875 0.687500 +vt 0.296875 0.671875 +vt 0.296875 0.656250 +vt 0.296875 0.640625 +vt 0.296875 0.625000 +vt 0.296875 0.609375 +vt 0.296875 0.593750 +vt 0.296875 0.578125 +vt 0.296875 0.562500 +vt 0.296875 0.546875 +vt 0.296875 0.531250 +vt 0.296875 0.515625 +vt 0.296875 0.500000 +vt 0.296875 0.484375 +vt 0.296875 0.468750 +vt 0.296875 0.453125 +vt 0.296875 0.437500 +vt 0.296875 0.421875 +vt 0.296875 0.406250 +vt 0.296875 0.390625 +vt 0.296875 0.375000 +vt 0.296875 0.359375 +vt 0.296875 0.343750 +vt 0.296875 0.328125 +vt 0.296875 0.312500 +vt 0.296875 0.296875 +vt 0.296875 0.281250 +vt 0.296875 0.265625 +vt 0.296875 0.250000 +vt 0.296875 0.234375 +vt 0.296875 0.218750 +vt 0.296875 0.203125 +vt 0.296875 0.187500 +vt 0.296875 0.171875 +vt 0.296875 0.156250 +vt 0.296875 0.140625 +vt 0.296875 0.125000 +vt 0.296875 0.109375 +vt 0.296875 0.093750 +vt 0.296875 0.078125 +vt 0.296875 0.062500 +vt 0.296875 0.046875 +vt 0.296875 0.031250 +vt 0.296875 0.015625 +vt 0.281250 0.984375 +vt 0.281250 0.968750 +vt 0.281250 0.953125 +vt 0.281250 0.937500 +vt 0.281250 0.921875 +vt 0.281250 0.906250 +vt 0.281250 0.890625 +vt 0.281250 0.875000 +vt 0.281250 0.859375 +vt 0.281250 0.843750 +vt 0.281250 0.828125 +vt 0.281250 0.812500 +vt 0.281250 0.796875 +vt 0.281250 0.781250 +vt 0.281250 0.765625 +vt 0.281250 0.750000 +vt 0.281250 0.734375 +vt 0.281250 0.718750 +vt 0.281250 0.703125 +vt 0.281250 0.687500 +vt 0.281250 0.671875 +vt 0.281250 0.656250 +vt 0.281250 0.640625 +vt 0.281250 0.625000 +vt 0.281250 0.609375 +vt 0.281250 0.593750 +vt 0.281250 0.578125 +vt 0.281250 0.562500 +vt 0.281250 0.546875 +vt 0.281250 0.531250 +vt 0.281250 0.515625 +vt 0.281250 0.500000 +vt 0.281250 0.484375 +vt 0.281250 0.468750 +vt 0.281250 0.453125 +vt 0.281250 0.437500 +vt 0.281250 0.421875 +vt 0.281250 0.406250 +vt 0.281250 0.390625 +vt 0.281250 0.375000 +vt 0.281250 0.359375 +vt 0.281250 0.343750 +vt 0.281250 0.328125 +vt 0.281250 0.312500 +vt 0.281250 0.296875 +vt 0.281250 0.281250 +vt 0.281250 0.265625 +vt 0.281250 0.250000 +vt 0.281250 0.234375 +vt 0.281250 0.218750 +vt 0.281250 0.203125 +vt 0.281250 0.187500 +vt 0.281250 0.171875 +vt 0.281250 0.156250 +vt 0.281250 0.140625 +vt 0.281250 0.125000 +vt 0.281250 0.109375 +vt 0.281250 0.093750 +vt 0.281250 0.078125 +vt 0.281250 0.062500 +vt 0.281250 0.046875 +vt 0.281250 0.031250 +vt 0.281250 0.015625 +vt 0.265625 0.984375 +vt 0.265625 0.968750 +vt 0.265625 0.953125 +vt 0.265625 0.937500 +vt 0.265625 0.921875 +vt 0.265625 0.906250 +vt 0.265625 0.890625 +vt 0.265625 0.875000 +vt 0.265625 0.859375 +vt 0.265625 0.843750 +vt 0.265625 0.828125 +vt 0.265625 0.812500 +vt 0.265625 0.796875 +vt 0.265625 0.781250 +vt 0.265625 0.765625 +vt 0.265625 0.750000 +vt 0.265625 0.734375 +vt 0.265625 0.718750 +vt 0.265625 0.703125 +vt 0.265625 0.687500 +vt 0.265625 0.671875 +vt 0.265625 0.656250 +vt 0.265625 0.640625 +vt 0.265625 0.625000 +vt 0.265625 0.609375 +vt 0.265625 0.593750 +vt 0.265625 0.578125 +vt 0.265625 0.562500 +vt 0.265625 0.546875 +vt 0.265625 0.531250 +vt 0.265625 0.515625 +vt 0.265625 0.500000 +vt 0.265625 0.484375 +vt 0.265625 0.468750 +vt 0.265625 0.453125 +vt 0.265625 0.437500 +vt 0.265625 0.421875 +vt 0.265625 0.406250 +vt 0.265625 0.390625 +vt 0.265625 0.375000 +vt 0.265625 0.359375 +vt 0.265625 0.343750 +vt 0.265625 0.328125 +vt 0.265625 0.312500 +vt 0.265625 0.296875 +vt 0.265625 0.281250 +vt 0.265625 0.265625 +vt 0.265625 0.250000 +vt 0.265625 0.234375 +vt 0.265625 0.218750 +vt 0.265625 0.203125 +vt 0.265625 0.187500 +vt 0.265625 0.171875 +vt 0.265625 0.156250 +vt 0.265625 0.140625 +vt 0.265625 0.125000 +vt 0.265625 0.109375 +vt 0.265625 0.093750 +vt 0.265625 0.078125 +vt 0.265625 0.062500 +vt 0.265625 0.046875 +vt 0.265625 0.031250 +vt 0.265625 0.015625 +vt 0.742187 1.000000 +vt 0.726562 1.000000 +vt 0.710937 1.000000 +vt 0.695312 1.000000 +vt 0.679687 1.000000 +vt 0.664062 1.000000 +vt 0.648437 1.000000 +vt 0.632812 1.000000 +vt 0.617187 1.000000 +vt 0.601562 1.000000 +vt 0.585937 1.000000 +vt 0.570312 1.000000 +vt 0.554687 1.000000 +vt 0.539062 1.000000 +vt 0.523437 1.000000 +vt 0.507812 1.000000 +vt 0.492187 1.000000 +vt 0.476562 1.000000 +vt 0.460937 1.000000 +vt 0.445312 1.000000 +vt 0.429687 1.000000 +vt 0.414062 1.000000 +vt 0.398437 1.000000 +vt 0.382812 1.000000 +vt 0.367187 1.000000 +vt 0.351562 1.000000 +vt 0.335937 1.000000 +vt 0.320312 1.000000 +vt 0.304687 1.000000 +vt 0.289062 1.000000 +vt 0.273437 1.000000 +vt 0.257812 1.000000 +vt 0.242188 1.000000 +vt 0.226563 1.000000 +vt 0.210938 1.000000 +vt 0.195313 1.000000 +vt 0.179688 1.000000 +vt 0.164063 1.000000 +vt 0.148438 1.000000 +vt 0.132813 1.000000 +vt 0.117188 1.000000 +vt 0.101563 1.000000 +vt 0.085938 1.000000 +vt 0.070313 1.000000 +vt 0.054688 1.000000 +vt 0.039063 1.000000 +vt 0.023438 1.000000 +vt 0.007813 1.000000 +vt 0.992188 1.000000 +vt 0.976563 1.000000 +vt 0.960938 1.000000 +vt 0.945313 1.000000 +vt 0.929688 1.000000 +vt 0.914063 1.000000 +vt 0.898438 1.000000 +vt 0.882813 1.000000 +vt 0.867188 1.000000 +vt 0.851563 1.000000 +vt 0.835938 1.000000 +vt 0.820313 1.000000 +vt 0.804688 1.000000 +vt 0.789063 1.000000 +vt 0.773438 1.000000 +vt 0.757812 1.000000 +vt 0.250000 0.984375 +vt 0.250000 0.968750 +vt 0.250000 0.953125 +vt 0.250000 0.937500 +vt 0.250000 0.921875 +vt 0.250000 0.906250 +vt 0.250000 0.890625 +vt 0.250000 0.875000 +vt 0.250000 0.859375 +vt 0.250000 0.843750 +vt 0.250000 0.828125 +vt 0.250000 0.812500 +vt 0.250000 0.796875 +vt 0.250000 0.781250 +vt 0.250000 0.765625 +vt 0.250000 0.750000 +vt 0.250000 0.734375 +vt 0.250000 0.718750 +vt 0.250000 0.703125 +vt 0.250000 0.687500 +vt 0.250000 0.671875 +vt 0.250000 0.656250 +vt 0.250000 0.640625 +vt 0.250000 0.625000 +vt 0.250000 0.609375 +vt 0.250000 0.593750 +vt 0.250000 0.578125 +vt 0.250000 0.562500 +vt 0.250000 0.546875 +vt 0.250000 0.531250 +vt 0.250000 0.515625 +vt 0.250000 0.500000 +vt 0.250000 0.484375 +vt 0.250000 0.468750 +vt 0.250000 0.453125 +vt 0.250000 0.437500 +vt 0.250000 0.421875 +vt 0.250000 0.406250 +vt 0.250000 0.390625 +vt 0.250000 0.375000 +vt 0.250000 0.359375 +vt 0.250000 0.343750 +vt 0.250000 0.328125 +vt 0.250000 0.312500 +vt 0.250000 0.296875 +vt 0.250000 0.281250 +vt 0.250000 0.265625 +vt 0.250000 0.250000 +vt 0.250000 0.234375 +vt 0.250000 0.218750 +vt 0.250000 0.203125 +vt 0.250000 0.187500 +vt 0.250000 0.171875 +vt 0.250000 0.156250 +vt 0.250000 0.140625 +vt 0.250000 0.125000 +vt 0.250000 0.109375 +vt 0.250000 0.093750 +vt 0.250000 0.078125 +vt 0.250000 0.062500 +vt 0.250000 0.046875 +vt 0.250000 0.031250 +vt 0.250000 0.015625 +vt 0.234375 0.984375 +vt 0.234375 0.968750 +vt 0.234375 0.953125 +vt 0.234375 0.937500 +vt 0.234375 0.921875 +vt 0.234375 0.906250 +vt 0.234375 0.890625 +vt 0.234375 0.875000 +vt 0.234375 0.859375 +vt 0.234375 0.843750 +vt 0.234375 0.828125 +vt 0.234375 0.812500 +vt 0.234375 0.796875 +vt 0.234375 0.781250 +vt 0.234375 0.765625 +vt 0.234375 0.750000 +vt 0.234375 0.734375 +vt 0.234375 0.718750 +vt 0.234375 0.703125 +vt 0.234375 0.687500 +vt 0.234375 0.671875 +vt 0.234375 0.656250 +vt 0.234375 0.640625 +vt 0.234375 0.625000 +vt 0.234375 0.609375 +vt 0.234375 0.593750 +vt 0.234375 0.578125 +vt 0.234375 0.562500 +vt 0.234375 0.546875 +vt 0.234375 0.531250 +vt 0.234375 0.515625 +vt 0.234375 0.500000 +vt 0.234375 0.484375 +vt 0.234375 0.468750 +vt 0.234375 0.453125 +vt 0.234375 0.437500 +vt 0.234375 0.421875 +vt 0.234375 0.406250 +vt 0.234375 0.390625 +vt 0.234375 0.375000 +vt 0.234375 0.359375 +vt 0.234375 0.343750 +vt 0.234375 0.328125 +vt 0.234375 0.312500 +vt 0.234375 0.296875 +vt 0.234375 0.281250 +vt 0.234375 0.265625 +vt 0.234375 0.250000 +vt 0.234375 0.234375 +vt 0.234375 0.218750 +vt 0.234375 0.203125 +vt 0.234375 0.187500 +vt 0.234375 0.171875 +vt 0.234375 0.156250 +vt 0.234375 0.140625 +vt 0.234375 0.125000 +vt 0.234375 0.109375 +vt 0.234375 0.093750 +vt 0.234375 0.078125 +vt 0.234375 0.062500 +vt 0.234375 0.046875 +vt 0.234375 0.031250 +vt 0.234375 0.015625 +vt 0.218750 0.984375 +vt 0.218750 0.968750 +vt 0.218750 0.953125 +vt 0.218750 0.937500 +vt 0.218750 0.921875 +vt 0.218750 0.906250 +vt 0.218750 0.890625 +vt 0.218750 0.875000 +vt 0.218750 0.859375 +vt 0.218750 0.843750 +vt 0.218750 0.828125 +vt 0.218750 0.812500 +vt 0.218750 0.796875 +vt 0.218750 0.781250 +vt 0.218750 0.765625 +vt 0.218750 0.750000 +vt 0.218750 0.734375 +vt 0.218750 0.718750 +vt 0.218750 0.703125 +vt 0.218750 0.687500 +vt 0.218750 0.671875 +vt 0.218750 0.656250 +vt 0.218750 0.640625 +vt 0.218750 0.625000 +vt 0.218750 0.609375 +vt 0.218750 0.593750 +vt 0.218750 0.578125 +vt 0.218750 0.562500 +vt 0.218750 0.546875 +vt 0.218750 0.531250 +vt 0.218750 0.515625 +vt 0.218750 0.500000 +vt 0.218750 0.484375 +vt 0.218750 0.468750 +vt 0.218750 0.453125 +vt 0.218750 0.437500 +vt 0.218750 0.421875 +vt 0.218750 0.406250 +vt 0.218750 0.390625 +vt 0.218750 0.375000 +vt 0.218750 0.359375 +vt 0.218750 0.343750 +vt 0.218750 0.328125 +vt 0.218750 0.312500 +vt 0.218750 0.296875 +vt 0.218750 0.281250 +vt 0.218750 0.265625 +vt 0.218750 0.250000 +vt 0.218750 0.234375 +vt 0.218750 0.218750 +vt 0.218750 0.203125 +vt 0.218750 0.187500 +vt 0.218750 0.171875 +vt 0.218750 0.156250 +vt 0.218750 0.140625 +vt 0.218750 0.125000 +vt 0.218750 0.109375 +vt 0.218750 0.093750 +vt 0.218750 0.078125 +vt 0.218750 0.062500 +vt 0.218750 0.046875 +vt 0.218750 0.031250 +vt 0.218750 0.015625 +vt 0.203125 0.984375 +vt 0.203125 0.968750 +vt 0.203125 0.953125 +vt 0.203125 0.937500 +vt 0.203125 0.921875 +vt 0.203125 0.906250 +vt 0.203125 0.890625 +vt 0.203125 0.875000 +vt 0.203125 0.859375 +vt 0.203125 0.843750 +vt 0.203125 0.828125 +vt 0.203125 0.812500 +vt 0.203125 0.796875 +vt 0.203125 0.781250 +vt 0.203125 0.765625 +vt 0.203125 0.750000 +vt 0.203125 0.734375 +vt 0.203125 0.718750 +vt 0.203125 0.703125 +vt 0.203125 0.687500 +vt 0.203125 0.671875 +vt 0.203125 0.656250 +vt 0.203125 0.640625 +vt 0.203125 0.625000 +vt 0.203125 0.609375 +vt 0.203125 0.593750 +vt 0.203125 0.578125 +vt 0.203125 0.562500 +vt 0.203125 0.546875 +vt 0.203125 0.531250 +vt 0.203125 0.515625 +vt 0.203125 0.500000 +vt 0.203125 0.484375 +vt 0.203125 0.468750 +vt 0.203125 0.453125 +vt 0.203125 0.437500 +vt 0.203125 0.421875 +vt 0.203125 0.406250 +vt 0.203125 0.390625 +vt 0.203125 0.375000 +vt 0.203125 0.359375 +vt 0.203125 0.343750 +vt 0.203125 0.328125 +vt 0.203125 0.312500 +vt 0.203125 0.296875 +vt 0.203125 0.281250 +vt 0.203125 0.265625 +vt 0.203125 0.250000 +vt 0.203125 0.234375 +vt 0.203125 0.218750 +vt 0.203125 0.203125 +vt 0.203125 0.187500 +vt 0.203125 0.171875 +vt 0.203125 0.156250 +vt 0.203125 0.140625 +vt 0.203125 0.125000 +vt 0.203125 0.109375 +vt 0.203125 0.093750 +vt 0.203125 0.078125 +vt 0.203125 0.062500 +vt 0.203125 0.046875 +vt 0.203125 0.031250 +vt 0.203125 0.015625 +vt 0.187500 0.984375 +vt 0.187500 0.968750 +vt 0.187500 0.953125 +vt 0.187500 0.937500 +vt 0.187500 0.921875 +vt 0.187500 0.906250 +vt 0.187500 0.890625 +vt 0.187500 0.875000 +vt 0.187500 0.859375 +vt 0.187500 0.843750 +vt 0.187500 0.828125 +vt 0.187500 0.812500 +vt 0.187500 0.796875 +vt 0.187500 0.781250 +vt 0.187500 0.765625 +vt 0.187500 0.750000 +vt 0.187500 0.734375 +vt 0.187500 0.718750 +vt 0.187500 0.703125 +vt 0.187500 0.687500 +vt 0.187500 0.671875 +vt 0.187500 0.656250 +vt 0.187500 0.640625 +vt 0.187500 0.625000 +vt 0.187500 0.609375 +vt 0.187500 0.593750 +vt 0.187500 0.578125 +vt 0.187500 0.562500 +vt 0.187500 0.546875 +vt 0.187500 0.531250 +vt 0.187500 0.515625 +vt 0.187500 0.500000 +vt 0.187500 0.484375 +vt 0.187500 0.468750 +vt 0.187500 0.453125 +vt 0.187500 0.437500 +vt 0.187500 0.421875 +vt 0.187500 0.406250 +vt 0.187500 0.390625 +vt 0.187500 0.375000 +vt 0.187500 0.359375 +vt 0.187500 0.343750 +vt 0.187500 0.328125 +vt 0.187500 0.312500 +vt 0.187500 0.296875 +vt 0.187500 0.281250 +vt 0.187500 0.265625 +vt 0.187500 0.250000 +vt 0.187500 0.234375 +vt 0.187500 0.218750 +vt 0.187500 0.203125 +vt 0.187500 0.187500 +vt 0.187500 0.171875 +vt 0.187500 0.156250 +vt 0.187500 0.140625 +vt 0.187500 0.125000 +vt 0.187500 0.109375 +vt 0.187500 0.093750 +vt 0.187500 0.078125 +vt 0.187500 0.062500 +vt 0.187500 0.046875 +vt 0.187500 0.031250 +vt 0.187500 0.015625 +vt 0.171875 0.984375 +vt 0.171875 0.968750 +vt 0.171875 0.953125 +vt 0.171875 0.937500 +vt 0.171875 0.921875 +vt 0.171875 0.906250 +vt 0.171875 0.890625 +vt 0.171875 0.875000 +vt 0.171875 0.859375 +vt 0.171875 0.843750 +vt 0.171875 0.828125 +vt 0.171875 0.812500 +vt 0.171875 0.796875 +vt 0.171875 0.781250 +vt 0.171875 0.765625 +vt 0.171875 0.750000 +vt 0.171875 0.734375 +vt 0.171875 0.718750 +vt 0.171875 0.703125 +vt 0.171875 0.687500 +vt 0.171875 0.671875 +vt 0.171875 0.656250 +vt 0.171875 0.640625 +vt 0.171875 0.625000 +vt 0.171875 0.609375 +vt 0.171875 0.593750 +vt 0.171875 0.578125 +vt 0.171875 0.562500 +vt 0.171875 0.546875 +vt 0.171875 0.531250 +vt 0.171875 0.515625 +vt 0.171875 0.500000 +vt 0.171875 0.484375 +vt 0.171875 0.468750 +vt 0.171875 0.453125 +vt 0.171875 0.437500 +vt 0.171875 0.421875 +vt 0.171875 0.406250 +vt 0.171875 0.390625 +vt 0.171875 0.375000 +vt 0.171875 0.359375 +vt 0.171875 0.343750 +vt 0.171875 0.328125 +vt 0.171875 0.312500 +vt 0.171875 0.296875 +vt 0.171875 0.281250 +vt 0.171875 0.265625 +vt 0.171875 0.250000 +vt 0.171875 0.234375 +vt 0.171875 0.218750 +vt 0.171875 0.203125 +vt 0.171875 0.187500 +vt 0.171875 0.171875 +vt 0.171875 0.156250 +vt 0.171875 0.140625 +vt 0.171875 0.125000 +vt 0.171875 0.109375 +vt 0.171875 0.093750 +vt 0.171875 0.078125 +vt 0.171875 0.062500 +vt 0.171875 0.046875 +vt 0.171875 0.031250 +vt 0.171875 0.015625 +vt 0.156250 0.984375 +vt 0.156250 0.968750 +vt 0.156250 0.953125 +vt 0.156250 0.937500 +vt 0.156250 0.921875 +vt 0.156250 0.906250 +vt 0.156250 0.890625 +vt 0.156250 0.875000 +vt 0.156250 0.859375 +vt 0.156250 0.843750 +vt 0.156250 0.828125 +vt 0.156250 0.812500 +vt 0.156250 0.796875 +vt 0.156250 0.781250 +vt 0.156250 0.765625 +vt 0.156250 0.750000 +vt 0.156250 0.734375 +vt 0.156250 0.718750 +vt 0.156250 0.703125 +vt 0.156250 0.687500 +vt 0.156250 0.671875 +vt 0.156250 0.656250 +vt 0.156250 0.640625 +vt 0.156250 0.625000 +vt 0.156250 0.609375 +vt 0.156250 0.593750 +vt 0.156250 0.578125 +vt 0.156250 0.562500 +vt 0.156250 0.546875 +vt 0.156250 0.531250 +vt 0.156250 0.515625 +vt 0.156250 0.500000 +vt 0.156250 0.484375 +vt 0.156250 0.468750 +vt 0.156250 0.453125 +vt 0.156250 0.437500 +vt 0.156250 0.421875 +vt 0.156250 0.406250 +vt 0.156250 0.390625 +vt 0.156250 0.375000 +vt 0.156250 0.359375 +vt 0.156250 0.343750 +vt 0.156250 0.328125 +vt 0.156250 0.312500 +vt 0.156250 0.296875 +vt 0.156250 0.281250 +vt 0.156250 0.265625 +vt 0.156250 0.250000 +vt 0.156250 0.234375 +vt 0.156250 0.218750 +vt 0.156250 0.203125 +vt 0.156250 0.187500 +vt 0.156250 0.171875 +vt 0.156250 0.156250 +vt 0.156250 0.140625 +vt 0.156250 0.125000 +vt 0.156250 0.109375 +vt 0.156250 0.093750 +vt 0.156250 0.078125 +vt 0.156250 0.062500 +vt 0.156250 0.046875 +vt 0.156250 0.031250 +vt 0.156250 0.015625 +vt 0.140625 0.984375 +vt 0.140625 0.968750 +vt 0.140625 0.953125 +vt 0.140625 0.937500 +vt 0.140625 0.921875 +vt 0.140625 0.906250 +vt 0.140625 0.890625 +vt 0.140625 0.875000 +vt 0.140625 0.859375 +vt 0.140625 0.843750 +vt 0.140625 0.828125 +vt 0.140625 0.812500 +vt 0.140625 0.796875 +vt 0.140625 0.781250 +vt 0.140625 0.765625 +vt 0.140625 0.750000 +vt 0.140625 0.734375 +vt 0.140625 0.718750 +vt 0.140625 0.703125 +vt 0.140625 0.687500 +vt 0.140625 0.671875 +vt 0.140625 0.656250 +vt 0.140625 0.640625 +vt 0.140625 0.625000 +vt 0.140625 0.609375 +vt 0.140625 0.593750 +vt 0.140625 0.578125 +vt 0.140625 0.562500 +vt 0.140625 0.546875 +vt 0.140625 0.531250 +vt 0.140625 0.515625 +vt 0.140625 0.500000 +vt 0.140625 0.484375 +vt 0.140625 0.468750 +vt 0.140625 0.453125 +vt 0.140625 0.437500 +vt 0.140625 0.421875 +vt 0.140625 0.406250 +vt 0.140625 0.390625 +vt 0.140625 0.375000 +vt 0.140625 0.359375 +vt 0.140625 0.343750 +vt 0.140625 0.328125 +vt 0.140625 0.312500 +vt 0.140625 0.296875 +vt 0.140625 0.281250 +vt 0.140625 0.265625 +vt 0.140625 0.250000 +vt 0.140625 0.234375 +vt 0.140625 0.218750 +vt 0.140625 0.203125 +vt 0.140625 0.187500 +vt 0.140625 0.171875 +vt 0.140625 0.156250 +vt 0.140625 0.140625 +vt 0.140625 0.125000 +vt 0.140625 0.109375 +vt 0.140625 0.093750 +vt 0.140625 0.078125 +vt 0.140625 0.062500 +vt 0.140625 0.046875 +vt 0.140625 0.031250 +vt 0.140625 0.015625 +vt 0.125000 0.984375 +vt 0.125000 0.968750 +vt 0.125000 0.953125 +vt 0.125000 0.937500 +vt 0.125000 0.921875 +vt 0.125000 0.906250 +vt 0.125000 0.890625 +vt 0.125000 0.875000 +vt 0.125000 0.859375 +vt 0.125000 0.843750 +vt 0.125000 0.828125 +vt 0.125000 0.812500 +vt 0.125000 0.796875 +vt 0.125000 0.781250 +vt 0.125000 0.765625 +vt 0.125000 0.750000 +vt 0.125000 0.734375 +vt 0.125000 0.718750 +vt 0.125000 0.703125 +vt 0.125000 0.687500 +vt 0.125000 0.671875 +vt 0.125000 0.656250 +vt 0.125000 0.640625 +vt 0.125000 0.625000 +vt 0.125000 0.609375 +vt 0.125000 0.593750 +vt 0.125000 0.578125 +vt 0.125000 0.562500 +vt 0.125000 0.546875 +vt 0.125000 0.531250 +vt 0.125000 0.515625 +vt 0.125000 0.500000 +vt 0.125000 0.484375 +vt 0.125000 0.468750 +vt 0.125000 0.453125 +vt 0.125000 0.437500 +vt 0.125000 0.421875 +vt 0.125000 0.406250 +vt 0.125000 0.390625 +vt 0.125000 0.375000 +vt 0.125000 0.359375 +vt 0.125000 0.343750 +vt 0.125000 0.328125 +vt 0.125000 0.312500 +vt 0.125000 0.296875 +vt 0.125000 0.281250 +vt 0.125000 0.265625 +vt 0.125000 0.250000 +vt 0.125000 0.234375 +vt 0.125000 0.218750 +vt 0.125000 0.203125 +vt 0.125000 0.187500 +vt 0.125000 0.171875 +vt 0.125000 0.156250 +vt 0.125000 0.140625 +vt 0.125000 0.125000 +vt 0.125000 0.109375 +vt 0.125000 0.093750 +vt 0.125000 0.078125 +vt 0.125000 0.062500 +vt 0.125000 0.046875 +vt 0.125000 0.031250 +vt 0.125000 0.015625 +vt 0.109375 0.984375 +vt 0.109375 0.968750 +vt 0.109375 0.953125 +vt 0.109375 0.937500 +vt 0.109375 0.921875 +vt 0.109375 0.906250 +vt 0.109375 0.890625 +vt 0.109375 0.875000 +vt 0.109375 0.859375 +vt 0.109375 0.843750 +vt 0.109375 0.828125 +vt 0.109375 0.812500 +vt 0.109375 0.796875 +vt 0.109375 0.781250 +vt 0.109375 0.765625 +vt 0.109375 0.750000 +vt 0.109375 0.734375 +vt 0.109375 0.718750 +vt 0.109375 0.703125 +vt 0.109375 0.687500 +vt 0.109375 0.671875 +vt 0.109375 0.656250 +vt 0.109375 0.640625 +vt 0.109375 0.625000 +vt 0.109375 0.609375 +vt 0.109375 0.593750 +vt 0.109375 0.578125 +vt 0.109375 0.562500 +vt 0.109375 0.546875 +vt 0.109375 0.531250 +vt 0.109375 0.515625 +vt 0.109375 0.500000 +vt 0.109375 0.484375 +vt 0.109375 0.468750 +vt 0.109375 0.453125 +vt 0.109375 0.437500 +vt 0.109375 0.421875 +vt 0.109375 0.406250 +vt 0.109375 0.390625 +vt 0.109375 0.375000 +vt 0.109375 0.359375 +vt 0.109375 0.343750 +vt 0.109375 0.328125 +vt 0.109375 0.312500 +vt 0.109375 0.296875 +vt 0.109375 0.281250 +vt 0.109375 0.265625 +vt 0.109375 0.250000 +vt 0.109375 0.234375 +vt 0.109375 0.218750 +vt 0.109375 0.203125 +vt 0.109375 0.187500 +vt 0.109375 0.171875 +vt 0.109375 0.156250 +vt 0.109375 0.140625 +vt 0.109375 0.125000 +vt 0.109375 0.109375 +vt 0.109375 0.093750 +vt 0.109375 0.078125 +vt 0.109375 0.062500 +vt 0.109375 0.046875 +vt 0.109375 0.031250 +vt 0.109375 0.015625 +vt 0.093750 0.984375 +vt 0.093750 0.968750 +vt 0.093750 0.953125 +vt 0.093750 0.937500 +vt 0.093750 0.921875 +vt 0.093750 0.906250 +vt 0.093750 0.890625 +vt 0.093750 0.875000 +vt 0.093750 0.859375 +vt 0.093750 0.843750 +vt 0.093750 0.828125 +vt 0.093750 0.812500 +vt 0.093750 0.796875 +vt 0.093750 0.781250 +vt 0.093750 0.765625 +vt 0.093750 0.750000 +vt 0.093750 0.734375 +vt 0.093750 0.718750 +vt 0.093750 0.703125 +vt 0.093750 0.687500 +vt 0.093750 0.671875 +vt 0.093750 0.656250 +vt 0.093750 0.640625 +vt 0.093750 0.625000 +vt 0.093750 0.609375 +vt 0.093750 0.593750 +vt 0.093750 0.578125 +vt 0.093750 0.562500 +vt 0.093750 0.546875 +vt 0.093750 0.531250 +vt 0.093750 0.515625 +vt 0.093750 0.500000 +vt 0.093750 0.484375 +vt 0.093750 0.468750 +vt 0.093750 0.453125 +vt 0.093750 0.437500 +vt 0.093750 0.421875 +vt 0.093750 0.406250 +vt 0.093750 0.390625 +vt 0.093750 0.375000 +vt 0.093750 0.359375 +vt 0.093750 0.343750 +vt 0.093750 0.328125 +vt 0.093750 0.312500 +vt 0.093750 0.296875 +vt 0.093750 0.281250 +vt 0.093750 0.265625 +vt 0.093750 0.250000 +vt 0.093750 0.234375 +vt 0.093750 0.218750 +vt 0.093750 0.203125 +vt 0.093750 0.187500 +vt 0.093750 0.171875 +vt 0.093750 0.156250 +vt 0.093750 0.140625 +vt 0.093750 0.125000 +vt 0.093750 0.109375 +vt 0.093750 0.093750 +vt 0.093750 0.078125 +vt 0.093750 0.062500 +vt 0.093750 0.046875 +vt 0.093750 0.031250 +vt 0.093750 0.015625 +vt 0.078125 0.984375 +vt 0.078125 0.968750 +vt 0.078125 0.953125 +vt 0.078125 0.937500 +vt 0.078125 0.921875 +vt 0.078125 0.906250 +vt 0.078125 0.890625 +vt 0.078125 0.875000 +vt 0.078125 0.859375 +vt 0.078125 0.843750 +vt 0.078125 0.828125 +vt 0.078125 0.812500 +vt 0.078125 0.796875 +vt 0.078125 0.781250 +vt 0.078125 0.765625 +vt 0.078125 0.750000 +vt 0.078125 0.734375 +vt 0.078125 0.718750 +vt 0.078125 0.703125 +vt 0.078125 0.687500 +vt 0.078125 0.671875 +vt 0.078125 0.656250 +vt 0.078125 0.640625 +vt 0.078125 0.625000 +vt 0.078125 0.609375 +vt 0.078125 0.593750 +vt 0.078125 0.578125 +vt 0.078125 0.562500 +vt 0.078125 0.546875 +vt 0.078125 0.531250 +vt 0.078125 0.515625 +vt 0.078125 0.500000 +vt 0.078125 0.484375 +vt 0.078125 0.468750 +vt 0.078125 0.453125 +vt 0.078125 0.437500 +vt 0.078125 0.421875 +vt 0.078125 0.406250 +vt 0.078125 0.390625 +vt 0.078125 0.375000 +vt 0.078125 0.359375 +vt 0.078125 0.343750 +vt 0.078125 0.328125 +vt 0.078125 0.312500 +vt 0.078125 0.296875 +vt 0.078125 0.281250 +vt 0.078125 0.265625 +vt 0.078125 0.250000 +vt 0.078125 0.234375 +vt 0.078125 0.218750 +vt 0.078125 0.203125 +vt 0.078125 0.187500 +vt 0.078125 0.171875 +vt 0.078125 0.156250 +vt 0.078125 0.140625 +vt 0.078125 0.125000 +vt 0.078125 0.109375 +vt 0.078125 0.093750 +vt 0.078125 0.078125 +vt 0.078125 0.062500 +vt 0.078125 0.046875 +vt 0.078125 0.031250 +vt 0.078125 0.015625 +vt 0.062500 0.984375 +vt 0.062500 0.968750 +vt 0.062500 0.953125 +vt 0.062500 0.937500 +vt 0.062500 0.921875 +vt 0.062500 0.906250 +vt 0.062500 0.890625 +vt 0.062500 0.875000 +vt 0.062500 0.859375 +vt 0.062500 0.843750 +vt 0.062500 0.828125 +vt 0.062500 0.812500 +vt 0.062500 0.796875 +vt 0.062500 0.781250 +vt 0.062500 0.765625 +vt 0.062500 0.750000 +vt 0.062500 0.734375 +vt 0.062500 0.718750 +vt 0.062500 0.703125 +vt 0.062500 0.687500 +vt 0.062500 0.671875 +vt 0.062500 0.656250 +vt 0.062500 0.640625 +vt 0.062500 0.625000 +vt 0.062500 0.609375 +vt 0.062500 0.593750 +vt 0.062500 0.578125 +vt 0.062500 0.562500 +vt 0.062500 0.546875 +vt 0.062500 0.531250 +vt 0.062500 0.515625 +vt 0.062500 0.500000 +vt 0.062500 0.484375 +vt 0.062500 0.468750 +vt 0.062500 0.453125 +vt 0.062500 0.437500 +vt 0.062500 0.421875 +vt 0.062500 0.406250 +vt 0.062500 0.390625 +vt 0.062500 0.375000 +vt 0.062500 0.359375 +vt 0.062500 0.343750 +vt 0.062500 0.328125 +vt 0.062500 0.312500 +vt 0.062500 0.296875 +vt 0.062500 0.281250 +vt 0.062500 0.265625 +vt 0.062500 0.250000 +vt 0.062500 0.234375 +vt 0.062500 0.218750 +vt 0.062500 0.203125 +vt 0.062500 0.187500 +vt 0.062500 0.171875 +vt 0.062500 0.156250 +vt 0.062500 0.140625 +vt 0.062500 0.125000 +vt 0.062500 0.109375 +vt 0.062500 0.093750 +vt 0.062500 0.078125 +vt 0.062500 0.062500 +vt 0.062500 0.046875 +vt 0.062500 0.031250 +vt 0.062500 0.015625 +vt 0.046875 0.984375 +vt 0.046875 0.968750 +vt 0.046875 0.953125 +vt 0.046875 0.937500 +vt 0.046875 0.921875 +vt 0.046875 0.906250 +vt 0.046875 0.890625 +vt 0.046875 0.875000 +vt 0.046875 0.859375 +vt 0.046875 0.843750 +vt 0.046875 0.828125 +vt 0.046875 0.812500 +vt 0.046875 0.796875 +vt 0.046875 0.781250 +vt 0.046875 0.765625 +vt 0.046875 0.750000 +vt 0.046875 0.734375 +vt 0.046875 0.718750 +vt 0.046875 0.703125 +vt 0.046875 0.687500 +vt 0.046875 0.671875 +vt 0.046875 0.656250 +vt 0.046875 0.640625 +vt 0.046875 0.625000 +vt 0.046875 0.609375 +vt 0.046875 0.593750 +vt 0.046875 0.578125 +vt 0.046875 0.562500 +vt 0.046875 0.546875 +vt 0.046875 0.531250 +vt 0.046875 0.515625 +vt 0.046875 0.500000 +vt 0.046875 0.484375 +vt 0.046875 0.468750 +vt 0.046875 0.453125 +vt 0.046875 0.437500 +vt 0.046875 0.421875 +vt 0.046875 0.406250 +vt 0.046875 0.390625 +vt 0.046875 0.375000 +vt 0.046875 0.359375 +vt 0.046875 0.343750 +vt 0.046875 0.328125 +vt 0.046875 0.312500 +vt 0.046875 0.296875 +vt 0.046875 0.281250 +vt 0.046875 0.265625 +vt 0.046875 0.250000 +vt 0.046875 0.234375 +vt 0.046875 0.218750 +vt 0.046875 0.203125 +vt 0.046875 0.187500 +vt 0.046875 0.171875 +vt 0.046875 0.156250 +vt 0.046875 0.140625 +vt 0.046875 0.125000 +vt 0.046875 0.109375 +vt 0.046875 0.093750 +vt 0.046875 0.078125 +vt 0.046875 0.062500 +vt 0.046875 0.046875 +vt 0.046875 0.031250 +vt 0.046875 0.015625 +vt 0.031250 0.984375 +vt 0.031250 0.968750 +vt 0.031250 0.953125 +vt 0.031250 0.937500 +vt 0.031250 0.921875 +vt 0.031250 0.906250 +vt 0.031250 0.890625 +vt 0.031250 0.875000 +vt 0.031250 0.859375 +vt 0.031250 0.843750 +vt 0.031250 0.828125 +vt 0.031250 0.812500 +vt 0.031250 0.796875 +vt 0.031250 0.781250 +vt 0.031250 0.765625 +vt 0.031250 0.750000 +vt 0.031250 0.734375 +vt 0.031250 0.718750 +vt 0.031250 0.703125 +vt 0.031250 0.687500 +vt 0.031250 0.671875 +vt 0.031250 0.656250 +vt 0.031250 0.640625 +vt 0.031250 0.625000 +vt 0.031250 0.609375 +vt 0.031250 0.593750 +vt 0.031250 0.578125 +vt 0.031250 0.562500 +vt 0.031250 0.546875 +vt 0.031250 0.531250 +vt 0.031250 0.515625 +vt 0.031250 0.500000 +vt 0.031250 0.484375 +vt 0.031250 0.468750 +vt 0.031250 0.453125 +vt 0.031250 0.437500 +vt 0.031250 0.421875 +vt 0.031250 0.406250 +vt 0.031250 0.390625 +vt 0.031250 0.375000 +vt 0.031250 0.359375 +vt 0.031250 0.343750 +vt 0.031250 0.328125 +vt 0.031250 0.312500 +vt 0.031250 0.296875 +vt 0.031250 0.281250 +vt 0.031250 0.265625 +vt 0.031250 0.250000 +vt 0.031250 0.234375 +vt 0.031250 0.218750 +vt 0.031250 0.203125 +vt 0.031250 0.187500 +vt 0.031250 0.171875 +vt 0.031250 0.156250 +vt 0.031250 0.140625 +vt 0.031250 0.125000 +vt 0.031250 0.109375 +vt 0.031250 0.093750 +vt 0.031250 0.078125 +vt 0.031250 0.062500 +vt 0.031250 0.046875 +vt 0.031250 0.031250 +vt 0.031250 0.015625 +vt 0.015625 0.984375 +vt 0.015625 0.968750 +vt 0.015625 0.953125 +vt 0.015625 0.937500 +vt 0.015625 0.921875 +vt 0.015625 0.906250 +vt 0.015625 0.890625 +vt 0.015625 0.875000 +vt 0.015625 0.859375 +vt 0.015625 0.843750 +vt 0.015625 0.828125 +vt 0.015625 0.812500 +vt 0.015625 0.796875 +vt 0.015625 0.781250 +vt 0.015625 0.765625 +vt 0.015625 0.750000 +vt 0.015625 0.734375 +vt 0.015625 0.718750 +vt 0.015625 0.703125 +vt 0.015625 0.687500 +vt 0.015625 0.671875 +vt 0.015625 0.656250 +vt 0.015625 0.640625 +vt 0.015625 0.625000 +vt 0.015625 0.609375 +vt 0.015625 0.593750 +vt 0.015625 0.578125 +vt 0.015625 0.562500 +vt 0.015625 0.546875 +vt 0.015625 0.531250 +vt 0.015625 0.515625 +vt 0.015625 0.500000 +vt 0.015625 0.484375 +vt 0.015625 0.468750 +vt 0.015625 0.453125 +vt 0.015625 0.437500 +vt 0.015625 0.421875 +vt 0.015625 0.406250 +vt 0.015625 0.390625 +vt 0.015625 0.375000 +vt 0.015625 0.359375 +vt 0.015625 0.343750 +vt 0.015625 0.328125 +vt 0.015625 0.312500 +vt 0.015625 0.296875 +vt 0.015625 0.281250 +vt 0.015625 0.265625 +vt 0.015625 0.250000 +vt 0.015625 0.234375 +vt 0.015625 0.218750 +vt 0.015625 0.203125 +vt 0.015625 0.187500 +vt 0.015625 0.171875 +vt 0.015625 0.156250 +vt 0.015625 0.140625 +vt 0.015625 0.125000 +vt 0.015625 0.109375 +vt 0.015625 0.093750 +vt 0.015625 0.078125 +vt 0.015625 0.062500 +vt 0.015625 0.046875 +vt 0.015625 0.031250 +vt 0.015625 0.015625 +vt 0.000000 0.984375 +vt 1.000000 0.984375 +vt 0.000000 0.968750 +vt 1.000000 0.968750 +vt 0.000000 0.953125 +vt 1.000000 0.953125 +vt 0.000000 0.937500 +vt 1.000000 0.937500 +vt 0.000000 0.921875 +vt 1.000000 0.921875 +vt 0.000000 0.906250 +vt 1.000000 0.906250 +vt 0.000000 0.890625 +vt 1.000000 0.890625 +vt 0.000000 0.875000 +vt 1.000000 0.875000 +vt 0.000000 0.859375 +vt 1.000000 0.859375 +vt 0.000000 0.843750 +vt 1.000000 0.843750 +vt 0.000000 0.828125 +vt 1.000000 0.828125 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 0.000000 0.796875 +vt 1.000000 0.796875 +vt 0.000000 0.781250 +vt 1.000000 0.781250 +vt 0.000000 0.765625 +vt 1.000000 0.765625 +vt 0.000000 0.750000 +vt 1.000000 0.750000 +vt 0.000000 0.734375 +vt 1.000000 0.734375 +vt 0.000000 0.718750 +vt 1.000000 0.718750 +vt 0.000000 0.703125 +vt 1.000000 0.703125 +vt 0.000000 0.687500 +vt 1.000000 0.687500 +vt 0.000000 0.671875 +vt 1.000000 0.671875 +vt 0.000000 0.656250 +vt 1.000000 0.656250 +vt 0.000000 0.640625 +vt 1.000000 0.640625 +vt 0.000000 0.625000 +vt 1.000000 0.625000 +vt 0.000000 0.609375 +vt 1.000000 0.609375 +vt 0.000000 0.593750 +vt 1.000000 0.593750 +vt 0.000000 0.578125 +vt 1.000000 0.578125 +vt 0.000000 0.562500 +vt 1.000000 0.562500 +vt 0.000000 0.546875 +vt 1.000000 0.546875 +vt 0.000000 0.531250 +vt 1.000000 0.531250 +vt 0.000000 0.515625 +vt 1.000000 0.515625 +vt 0.000000 0.500000 +vt 1.000000 0.500000 +vt 0.000000 0.484375 +vt 1.000000 0.484375 +vt 0.000000 0.468750 +vt 1.000000 0.468750 +vt 0.000000 0.453125 +vt 1.000000 0.453125 +vt 0.000000 0.437500 +vt 1.000000 0.437500 +vt 0.000000 0.421875 +vt 1.000000 0.421875 +vt 0.000000 0.406250 +vt 1.000000 0.406250 +vt 0.000000 0.390625 +vt 1.000000 0.390625 +vt 0.000000 0.375000 +vt 1.000000 0.375000 +vt 0.000000 0.359375 +vt 1.000000 0.359375 +vt 0.000000 0.343750 +vt 1.000000 0.343750 +vt 0.000000 0.328125 +vt 1.000000 0.328125 +vt 0.000000 0.312500 +vt 1.000000 0.312500 +vt 0.000000 0.296875 +vt 1.000000 0.296875 +vt 0.000000 0.281250 +vt 1.000000 0.281250 +vt 0.000000 0.265625 +vt 1.000000 0.265625 +vt 0.000000 0.250000 +vt 1.000000 0.250000 +vt 0.000000 0.234375 +vt 1.000000 0.234375 +vt 0.000000 0.218750 +vt 1.000000 0.218750 +vt 0.000000 0.203125 +vt 1.000000 0.203125 +vt 0.000000 0.187500 +vt 1.000000 0.187500 +vt 0.000000 0.171875 +vt 1.000000 0.171875 +vt 0.000000 0.156250 +vt 1.000000 0.156250 +vt 0.000000 0.140625 +vt 1.000000 0.140625 +vt 0.000000 0.125000 +vt 1.000000 0.125000 +vt 0.000000 0.109375 +vt 1.000000 0.109375 +vt 0.000000 0.093750 +vt 1.000000 0.093750 +vt 0.000000 0.078125 +vt 1.000000 0.078125 +vt 0.000000 0.062500 +vt 1.000000 0.062500 +vt 0.000000 0.046875 +vt 1.000000 0.046875 +vt 0.000000 0.031250 +vt 1.000000 0.031250 +vt 0.000000 0.015625 +vt 1.000000 0.015625 +vt 0.984375 0.984375 +vt 0.984375 0.968750 +vt 0.984375 0.953125 +vt 0.984375 0.937500 +vt 0.984375 0.921875 +vt 0.984375 0.906250 +vt 0.984375 0.890625 +vt 0.984375 0.875000 +vt 0.984375 0.859375 +vt 0.984375 0.843750 +vt 0.984375 0.828125 +vt 0.984375 0.812500 +vt 0.984375 0.796875 +vt 0.984375 0.781250 +vt 0.984375 0.765625 +vt 0.984375 0.750000 +vt 0.984375 0.734375 +vt 0.984375 0.718750 +vt 0.984375 0.703125 +vt 0.984375 0.687500 +vt 0.984375 0.671875 +vt 0.984375 0.656250 +vt 0.984375 0.640625 +vt 0.984375 0.625000 +vt 0.984375 0.609375 +vt 0.984375 0.593750 +vt 0.984375 0.578125 +vt 0.984375 0.562500 +vt 0.984375 0.546875 +vt 0.984375 0.531250 +vt 0.984375 0.515625 +vt 0.984375 0.500000 +vt 0.984375 0.484375 +vt 0.984375 0.468750 +vt 0.984375 0.453125 +vt 0.984375 0.437500 +vt 0.984375 0.421875 +vt 0.984375 0.406250 +vt 0.984375 0.390625 +vt 0.984375 0.375000 +vt 0.984375 0.359375 +vt 0.984375 0.343750 +vt 0.984375 0.328125 +vt 0.984375 0.312500 +vt 0.984375 0.296875 +vt 0.984375 0.281250 +vt 0.984375 0.265625 +vt 0.984375 0.250000 +vt 0.984375 0.234375 +vt 0.984375 0.218750 +vt 0.984375 0.203125 +vt 0.984375 0.187500 +vt 0.984375 0.171875 +vt 0.984375 0.156250 +vt 0.984375 0.140625 +vt 0.984375 0.125000 +vt 0.984375 0.109375 +vt 0.984375 0.093750 +vt 0.984375 0.078125 +vt 0.984375 0.062500 +vt 0.984375 0.046875 +vt 0.984375 0.031250 +vt 0.984375 0.015625 +vt 0.968750 0.984375 +vt 0.968750 0.968750 +vt 0.968750 0.953125 +vt 0.968750 0.937500 +vt 0.968750 0.921875 +vt 0.968750 0.906250 +vt 0.968750 0.890625 +vt 0.968750 0.875000 +vt 0.968750 0.859375 +vt 0.968750 0.843750 +vt 0.968750 0.828125 +vt 0.968750 0.812500 +vt 0.968750 0.796875 +vt 0.968750 0.781250 +vt 0.968750 0.765625 +vt 0.968750 0.750000 +vt 0.968750 0.734375 +vt 0.968750 0.718750 +vt 0.968750 0.703125 +vt 0.968750 0.687500 +vt 0.968750 0.671875 +vt 0.968750 0.656250 +vt 0.968750 0.640625 +vt 0.968750 0.625000 +vt 0.968750 0.609375 +vt 0.968750 0.593750 +vt 0.968750 0.578125 +vt 0.968750 0.562500 +vt 0.968750 0.546875 +vt 0.968750 0.531250 +vt 0.968750 0.515625 +vt 0.968750 0.500000 +vt 0.968750 0.484375 +vt 0.968750 0.468750 +vt 0.968750 0.453125 +vt 0.968750 0.437500 +vt 0.968750 0.421875 +vt 0.968750 0.406250 +vt 0.968750 0.390625 +vt 0.968750 0.375000 +vt 0.968750 0.359375 +vt 0.968750 0.343750 +vt 0.968750 0.328125 +vt 0.968750 0.312500 +vt 0.968750 0.296875 +vt 0.968750 0.281250 +vt 0.968750 0.265625 +vt 0.968750 0.250000 +vt 0.968750 0.234375 +vt 0.968750 0.218750 +vt 0.968750 0.203125 +vt 0.968750 0.187500 +vt 0.968750 0.171875 +vt 0.968750 0.156250 +vt 0.968750 0.140625 +vt 0.968750 0.125000 +vt 0.968750 0.109375 +vt 0.968750 0.093750 +vt 0.968750 0.078125 +vt 0.968750 0.062500 +vt 0.968750 0.046875 +vt 0.968750 0.031250 +vt 0.968750 0.015625 +vt 0.953125 0.984375 +vt 0.953125 0.968750 +vt 0.953125 0.953125 +vt 0.953125 0.937500 +vt 0.953125 0.921875 +vt 0.953125 0.906250 +vt 0.953125 0.890625 +vt 0.953125 0.875000 +vt 0.953125 0.859375 +vt 0.953125 0.843750 +vt 0.953125 0.828125 +vt 0.953125 0.812500 +vt 0.953125 0.796875 +vt 0.953125 0.781250 +vt 0.953125 0.765625 +vt 0.953125 0.750000 +vt 0.953125 0.734375 +vt 0.953125 0.718750 +vt 0.953125 0.703125 +vt 0.953125 0.687500 +vt 0.953125 0.671875 +vt 0.953125 0.656250 +vt 0.953125 0.640625 +vt 0.953125 0.625000 +vt 0.953125 0.609375 +vt 0.953125 0.593750 +vt 0.953125 0.578125 +vt 0.953125 0.562500 +vt 0.953125 0.546875 +vt 0.953125 0.531250 +vt 0.953125 0.515625 +vt 0.953125 0.500000 +vt 0.953125 0.484375 +vt 0.953125 0.468750 +vt 0.953125 0.453125 +vt 0.953125 0.437500 +vt 0.953125 0.421875 +vt 0.953125 0.406250 +vt 0.953125 0.390625 +vt 0.953125 0.375000 +vt 0.953125 0.359375 +vt 0.953125 0.343750 +vt 0.953125 0.328125 +vt 0.953125 0.312500 +vt 0.953125 0.296875 +vt 0.953125 0.281250 +vt 0.953125 0.265625 +vt 0.953125 0.250000 +vt 0.953125 0.234375 +vt 0.953125 0.218750 +vt 0.953125 0.203125 +vt 0.953125 0.187500 +vt 0.953125 0.171875 +vt 0.953125 0.156250 +vt 0.953125 0.140625 +vt 0.953125 0.125000 +vt 0.953125 0.109375 +vt 0.953125 0.093750 +vt 0.953125 0.078125 +vt 0.953125 0.062500 +vt 0.953125 0.046875 +vt 0.953125 0.031250 +vt 0.953125 0.015625 +vt 0.937500 0.984375 +vt 0.937500 0.968750 +vt 0.937500 0.953125 +vt 0.937500 0.937500 +vt 0.937500 0.921875 +vt 0.937500 0.906250 +vt 0.937500 0.890625 +vt 0.937500 0.875000 +vt 0.937500 0.859375 +vt 0.937500 0.843750 +vt 0.937500 0.828125 +vt 0.937500 0.812500 +vt 0.937500 0.796875 +vt 0.937500 0.781250 +vt 0.937500 0.765625 +vt 0.937500 0.750000 +vt 0.937500 0.734375 +vt 0.937500 0.718750 +vt 0.937500 0.703125 +vt 0.937500 0.687500 +vt 0.937500 0.671875 +vt 0.937500 0.656250 +vt 0.937500 0.640625 +vt 0.937500 0.625000 +vt 0.937500 0.609375 +vt 0.937500 0.593750 +vt 0.937500 0.578125 +vt 0.937500 0.562500 +vt 0.937500 0.546875 +vt 0.937500 0.531250 +vt 0.937500 0.515625 +vt 0.937500 0.500000 +vt 0.937500 0.484375 +vt 0.937500 0.468750 +vt 0.937500 0.453125 +vt 0.937500 0.437500 +vt 0.937500 0.421875 +vt 0.937500 0.406250 +vt 0.937500 0.390625 +vt 0.937500 0.375000 +vt 0.937500 0.359375 +vt 0.937500 0.343750 +vt 0.937500 0.328125 +vt 0.937500 0.312500 +vt 0.937500 0.296875 +vt 0.937500 0.281250 +vt 0.937500 0.265625 +vt 0.937500 0.250000 +vt 0.937500 0.234375 +vt 0.937500 0.218750 +vt 0.937500 0.203125 +vt 0.937500 0.187500 +vt 0.937500 0.171875 +vt 0.937500 0.156250 +vt 0.937500 0.140625 +vt 0.937500 0.125000 +vt 0.937500 0.109375 +vt 0.937500 0.093750 +vt 0.937500 0.078125 +vt 0.937500 0.062500 +vt 0.937500 0.046875 +vt 0.937500 0.031250 +vt 0.937500 0.015625 +vt 0.921875 0.984375 +vt 0.921875 0.968750 +vt 0.921875 0.953125 +vt 0.921875 0.937500 +vt 0.921875 0.921875 +vt 0.921875 0.906250 +vt 0.921875 0.890625 +vt 0.921875 0.875000 +vt 0.921875 0.859375 +vt 0.921875 0.843750 +vt 0.921875 0.828125 +vt 0.921875 0.812500 +vt 0.921875 0.796875 +vt 0.921875 0.781250 +vt 0.921875 0.765625 +vt 0.921875 0.750000 +vt 0.921875 0.734375 +vt 0.921875 0.718750 +vt 0.921875 0.703125 +vt 0.921875 0.687500 +vt 0.921875 0.671875 +vt 0.921875 0.656250 +vt 0.921875 0.640625 +vt 0.921875 0.625000 +vt 0.921875 0.609375 +vt 0.921875 0.593750 +vt 0.921875 0.578125 +vt 0.921875 0.562500 +vt 0.921875 0.546875 +vt 0.921875 0.531250 +vt 0.921875 0.515625 +vt 0.921875 0.500000 +vt 0.921875 0.484375 +vt 0.921875 0.468750 +vt 0.921875 0.453125 +vt 0.921875 0.437500 +vt 0.921875 0.421875 +vt 0.921875 0.406250 +vt 0.921875 0.390625 +vt 0.921875 0.375000 +vt 0.921875 0.359375 +vt 0.921875 0.343750 +vt 0.921875 0.328125 +vt 0.921875 0.312500 +vt 0.921875 0.296875 +vt 0.921875 0.281250 +vt 0.921875 0.265625 +vt 0.921875 0.250000 +vt 0.921875 0.234375 +vt 0.921875 0.218750 +vt 0.921875 0.203125 +vt 0.921875 0.187500 +vt 0.921875 0.171875 +vt 0.921875 0.156250 +vt 0.921875 0.140625 +vt 0.921875 0.125000 +vt 0.921875 0.109375 +vt 0.921875 0.093750 +vt 0.921875 0.078125 +vt 0.921875 0.062500 +vt 0.921875 0.046875 +vt 0.921875 0.031250 +vt 0.921875 0.015625 +vt 0.906250 0.984375 +vt 0.906250 0.968750 +vt 0.906250 0.953125 +vt 0.906250 0.937500 +vt 0.906250 0.921875 +vt 0.906250 0.906250 +vt 0.906250 0.890625 +vt 0.906250 0.875000 +vt 0.906250 0.859375 +vt 0.906250 0.843750 +vt 0.906250 0.828125 +vt 0.906250 0.812500 +vt 0.906250 0.796875 +vt 0.906250 0.781250 +vt 0.906250 0.765625 +vt 0.906250 0.750000 +vt 0.906250 0.734375 +vt 0.906250 0.718750 +vt 0.906250 0.703125 +vt 0.906250 0.687500 +vt 0.906250 0.671875 +vt 0.906250 0.656250 +vt 0.906250 0.640625 +vt 0.906250 0.625000 +vt 0.906250 0.609375 +vt 0.906250 0.593750 +vt 0.906250 0.578125 +vt 0.906250 0.562500 +vt 0.906250 0.546875 +vt 0.906250 0.531250 +vt 0.906250 0.515625 +vt 0.906250 0.500000 +vt 0.906250 0.484375 +vt 0.906250 0.468750 +vt 0.906250 0.453125 +vt 0.906250 0.437500 +vt 0.906250 0.421875 +vt 0.906250 0.406250 +vt 0.906250 0.390625 +vt 0.906250 0.375000 +vt 0.906250 0.359375 +vt 0.906250 0.343750 +vt 0.906250 0.328125 +vt 0.906250 0.312500 +vt 0.906250 0.296875 +vt 0.906250 0.281250 +vt 0.906250 0.265625 +vt 0.906250 0.250000 +vt 0.906250 0.234375 +vt 0.906250 0.218750 +vt 0.906250 0.203125 +vt 0.906250 0.187500 +vt 0.906250 0.171875 +vt 0.906250 0.156250 +vt 0.906250 0.140625 +vt 0.906250 0.125000 +vt 0.906250 0.109375 +vt 0.906250 0.093750 +vt 0.906250 0.078125 +vt 0.906250 0.062500 +vt 0.906250 0.046875 +vt 0.906250 0.031250 +vt 0.906250 0.015625 +vt 0.890625 0.984375 +vt 0.890625 0.968750 +vt 0.890625 0.953125 +vt 0.890625 0.937500 +vt 0.890625 0.921875 +vt 0.890625 0.906250 +vt 0.890625 0.890625 +vt 0.890625 0.875000 +vt 0.890625 0.859375 +vt 0.890625 0.843750 +vt 0.890625 0.828125 +vt 0.890625 0.812500 +vt 0.890625 0.796875 +vt 0.890625 0.781250 +vt 0.890625 0.765625 +vt 0.890625 0.750000 +vt 0.890625 0.734375 +vt 0.890625 0.718750 +vt 0.890625 0.703125 +vt 0.890625 0.687500 +vt 0.890625 0.671875 +vt 0.890625 0.656250 +vt 0.890625 0.640625 +vt 0.890625 0.625000 +vt 0.890625 0.609375 +vt 0.890625 0.593750 +vt 0.890625 0.578125 +vt 0.890625 0.562500 +vt 0.890625 0.546875 +vt 0.890625 0.531250 +vt 0.890625 0.515625 +vt 0.890625 0.500000 +vt 0.890625 0.484375 +vt 0.890625 0.468750 +vt 0.890625 0.453125 +vt 0.890625 0.437500 +vt 0.890625 0.421875 +vt 0.890625 0.406250 +vt 0.890625 0.390625 +vt 0.890625 0.375000 +vt 0.890625 0.359375 +vt 0.890625 0.343750 +vt 0.890625 0.328125 +vt 0.890625 0.312500 +vt 0.890625 0.296875 +vt 0.890625 0.281250 +vt 0.890625 0.265625 +vt 0.890625 0.250000 +vt 0.890625 0.234375 +vt 0.890625 0.218750 +vt 0.890625 0.203125 +vt 0.890625 0.187500 +vt 0.890625 0.171875 +vt 0.890625 0.156250 +vt 0.890625 0.140625 +vt 0.890625 0.125000 +vt 0.890625 0.109375 +vt 0.890625 0.093750 +vt 0.890625 0.078125 +vt 0.890625 0.062500 +vt 0.890625 0.046875 +vt 0.890625 0.031250 +vt 0.890625 0.015625 +vt 0.875000 0.984375 +vt 0.875000 0.968750 +vt 0.875000 0.953125 +vt 0.875000 0.937500 +vt 0.875000 0.921875 +vt 0.875000 0.906250 +vt 0.875000 0.890625 +vt 0.875000 0.875000 +vt 0.875000 0.859375 +vt 0.875000 0.843750 +vt 0.875000 0.828125 +vt 0.875000 0.812500 +vt 0.875000 0.796875 +vt 0.875000 0.781250 +vt 0.875000 0.765625 +vt 0.875000 0.750000 +vt 0.875000 0.734375 +vt 0.875000 0.718750 +vt 0.875000 0.703125 +vt 0.875000 0.687500 +vt 0.875000 0.671875 +vt 0.875000 0.656250 +vt 0.875000 0.640625 +vt 0.875000 0.625000 +vt 0.875000 0.609375 +vt 0.875000 0.593750 +vt 0.875000 0.578125 +vt 0.875000 0.562500 +vt 0.875000 0.546875 +vt 0.875000 0.531250 +vt 0.875000 0.515625 +vt 0.875000 0.500000 +vt 0.875000 0.484375 +vt 0.875000 0.468750 +vt 0.875000 0.453125 +vt 0.875000 0.437500 +vt 0.875000 0.421875 +vt 0.875000 0.406250 +vt 0.875000 0.390625 +vt 0.875000 0.375000 +vt 0.875000 0.359375 +vt 0.875000 0.343750 +vt 0.875000 0.328125 +vt 0.875000 0.312500 +vt 0.875000 0.296875 +vt 0.875000 0.281250 +vt 0.875000 0.265625 +vt 0.875000 0.250000 +vt 0.875000 0.234375 +vt 0.875000 0.218750 +vt 0.875000 0.203125 +vt 0.875000 0.187500 +vt 0.875000 0.171875 +vt 0.875000 0.156250 +vt 0.875000 0.140625 +vt 0.875000 0.125000 +vt 0.875000 0.109375 +vt 0.875000 0.093750 +vt 0.875000 0.078125 +vt 0.875000 0.062500 +vt 0.875000 0.046875 +vt 0.875000 0.031250 +vt 0.875000 0.015625 +vt 0.859375 0.984375 +vt 0.859375 0.968750 +vt 0.859375 0.953125 +vt 0.859375 0.937500 +vt 0.859375 0.921875 +vt 0.859375 0.906250 +vt 0.859375 0.890625 +vt 0.859375 0.875000 +vt 0.859375 0.859375 +vt 0.859375 0.843750 +vt 0.859375 0.828125 +vt 0.859375 0.812500 +vt 0.859375 0.796875 +vt 0.859375 0.781250 +vt 0.859375 0.765625 +vt 0.859375 0.750000 +vt 0.859375 0.734375 +vt 0.859375 0.718750 +vt 0.859375 0.703125 +vt 0.859375 0.687500 +vt 0.859375 0.671875 +vt 0.859375 0.656250 +vt 0.859375 0.640625 +vt 0.859375 0.625000 +vt 0.859375 0.609375 +vt 0.859375 0.593750 +vt 0.859375 0.578125 +vt 0.859375 0.562500 +vt 0.859375 0.546875 +vt 0.859375 0.531250 +vt 0.859375 0.515625 +vt 0.859375 0.500000 +vt 0.859375 0.484375 +vt 0.859375 0.468750 +vt 0.859375 0.453125 +vt 0.859375 0.437500 +vt 0.859375 0.421875 +vt 0.859375 0.406250 +vt 0.859375 0.390625 +vt 0.859375 0.375000 +vt 0.859375 0.359375 +vt 0.859375 0.343750 +vt 0.859375 0.328125 +vt 0.859375 0.312500 +vt 0.859375 0.296875 +vt 0.859375 0.281250 +vt 0.859375 0.265625 +vt 0.859375 0.250000 +vt 0.859375 0.234375 +vt 0.859375 0.218750 +vt 0.859375 0.203125 +vt 0.859375 0.187500 +vt 0.859375 0.171875 +vt 0.859375 0.156250 +vt 0.859375 0.140625 +vt 0.859375 0.125000 +vt 0.859375 0.109375 +vt 0.859375 0.093750 +vt 0.859375 0.078125 +vt 0.859375 0.062500 +vt 0.859375 0.046875 +vt 0.859375 0.031250 +vt 0.859375 0.015625 +vt 0.843750 0.984375 +vt 0.843750 0.968750 +vt 0.843750 0.953125 +vt 0.843750 0.937500 +vt 0.843750 0.921875 +vt 0.843750 0.906250 +vt 0.843750 0.890625 +vt 0.843750 0.875000 +vt 0.843750 0.859375 +vt 0.843750 0.843750 +vt 0.843750 0.828125 +vt 0.843750 0.812500 +vt 0.843750 0.796875 +vt 0.843750 0.781250 +vt 0.843750 0.765625 +vt 0.843750 0.750000 +vt 0.843750 0.734375 +vt 0.843750 0.718750 +vt 0.843750 0.703125 +vt 0.843750 0.687500 +vt 0.843750 0.671875 +vt 0.843750 0.656250 +vt 0.843750 0.640625 +vt 0.843750 0.625000 +vt 0.843750 0.609375 +vt 0.843750 0.593750 +vt 0.843750 0.578125 +vt 0.843750 0.562500 +vt 0.843750 0.546875 +vt 0.843750 0.531250 +vt 0.843750 0.515625 +vt 0.843750 0.500000 +vt 0.843750 0.484375 +vt 0.843750 0.468750 +vt 0.843750 0.453125 +vt 0.843750 0.437500 +vt 0.843750 0.421875 +vt 0.843750 0.406250 +vt 0.843750 0.390625 +vt 0.843750 0.375000 +vt 0.843750 0.359375 +vt 0.843750 0.343750 +vt 0.843750 0.328125 +vt 0.843750 0.312500 +vt 0.843750 0.296875 +vt 0.843750 0.281250 +vt 0.843750 0.265625 +vt 0.843750 0.250000 +vt 0.843750 0.234375 +vt 0.843750 0.218750 +vt 0.843750 0.203125 +vt 0.843750 0.187500 +vt 0.843750 0.171875 +vt 0.843750 0.156250 +vt 0.843750 0.140625 +vt 0.843750 0.125000 +vt 0.843750 0.109375 +vt 0.843750 0.093750 +vt 0.843750 0.078125 +vt 0.843750 0.062500 +vt 0.843750 0.046875 +vt 0.843750 0.031250 +vt 0.843750 0.015625 +vt 0.828125 0.984375 +vt 0.828125 0.968750 +vt 0.828125 0.953125 +vt 0.828125 0.937500 +vt 0.828125 0.921875 +vt 0.828125 0.906250 +vt 0.828125 0.890625 +vt 0.828125 0.875000 +vt 0.828125 0.859375 +vt 0.828125 0.843750 +vt 0.828125 0.828125 +vt 0.828125 0.812500 +vt 0.828125 0.796875 +vt 0.828125 0.781250 +vt 0.828125 0.765625 +vt 0.828125 0.750000 +vt 0.828125 0.734375 +vt 0.828125 0.718750 +vt 0.828125 0.703125 +vt 0.828125 0.687500 +vt 0.828125 0.671875 +vt 0.828125 0.656250 +vt 0.828125 0.640625 +vt 0.828125 0.625000 +vt 0.828125 0.609375 +vt 0.828125 0.593750 +vt 0.828125 0.578125 +vt 0.828125 0.562500 +vt 0.828125 0.546875 +vt 0.828125 0.531250 +vt 0.828125 0.515625 +vt 0.828125 0.500000 +vt 0.828125 0.484375 +vt 0.828125 0.468750 +vt 0.828125 0.453125 +vt 0.828125 0.437500 +vt 0.828125 0.421875 +vt 0.828125 0.406250 +vt 0.828125 0.390625 +vt 0.828125 0.375000 +vt 0.828125 0.359375 +vt 0.828125 0.343750 +vt 0.828125 0.328125 +vt 0.828125 0.312500 +vt 0.828125 0.296875 +vt 0.828125 0.281250 +vt 0.828125 0.265625 +vt 0.828125 0.250000 +vt 0.828125 0.234375 +vt 0.828125 0.218750 +vt 0.828125 0.203125 +vt 0.828125 0.187500 +vt 0.828125 0.171875 +vt 0.828125 0.156250 +vt 0.828125 0.140625 +vt 0.828125 0.125000 +vt 0.828125 0.109375 +vt 0.828125 0.093750 +vt 0.828125 0.078125 +vt 0.828125 0.062500 +vt 0.828125 0.046875 +vt 0.828125 0.031250 +vt 0.828125 0.015625 +vt 0.812500 0.984375 +vt 0.812500 0.968750 +vt 0.812500 0.953125 +vt 0.812500 0.937500 +vt 0.812500 0.921875 +vt 0.812500 0.906250 +vt 0.812500 0.890625 +vt 0.812500 0.875000 +vt 0.812500 0.859375 +vt 0.812500 0.843750 +vt 0.812500 0.828125 +vt 0.812500 0.812500 +vt 0.812500 0.796875 +vt 0.812500 0.781250 +vt 0.812500 0.765625 +vt 0.812500 0.750000 +vt 0.812500 0.734375 +vt 0.812500 0.718750 +vt 0.812500 0.703125 +vt 0.812500 0.687500 +vt 0.812500 0.671875 +vt 0.812500 0.656250 +vt 0.812500 0.640625 +vt 0.812500 0.625000 +vt 0.812500 0.609375 +vt 0.812500 0.593750 +vt 0.812500 0.578125 +vt 0.812500 0.562500 +vt 0.812500 0.546875 +vt 0.812500 0.531250 +vt 0.812500 0.515625 +vt 0.812500 0.500000 +vt 0.812500 0.484375 +vt 0.812500 0.468750 +vt 0.812500 0.453125 +vt 0.812500 0.437500 +vt 0.812500 0.421875 +vt 0.812500 0.406250 +vt 0.812500 0.390625 +vt 0.812500 0.375000 +vt 0.812500 0.359375 +vt 0.812500 0.343750 +vt 0.812500 0.328125 +vt 0.812500 0.312500 +vt 0.812500 0.296875 +vt 0.812500 0.281250 +vt 0.812500 0.265625 +vt 0.812500 0.250000 +vt 0.812500 0.234375 +vt 0.812500 0.218750 +vt 0.812500 0.203125 +vt 0.812500 0.187500 +vt 0.812500 0.171875 +vt 0.812500 0.156250 +vt 0.812500 0.140625 +vt 0.812500 0.125000 +vt 0.812500 0.109375 +vt 0.812500 0.093750 +vt 0.812500 0.078125 +vt 0.812500 0.062500 +vt 0.812500 0.046875 +vt 0.812500 0.031250 +vt 0.812500 0.015625 +vt 0.742187 0.000000 +vt 0.726562 0.000000 +vt 0.710937 0.000000 +vt 0.695312 0.000000 +vt 0.679687 0.000000 +vt 0.664062 0.000000 +vt 0.648437 0.000000 +vt 0.632812 0.000000 +vt 0.617187 0.000000 +vt 0.601562 0.000000 +vt 0.585937 0.000000 +vt 0.570312 0.000000 +vt 0.554687 0.000000 +vt 0.539062 0.000000 +vt 0.523437 0.000000 +vt 0.507812 0.000000 +vt 0.492187 0.000000 +vt 0.476562 0.000000 +vt 0.460937 0.000000 +vt 0.445312 0.000000 +vt 0.429687 0.000000 +vt 0.414062 0.000000 +vt 0.398437 0.000000 +vt 0.382812 0.000000 +vt 0.367187 0.000000 +vt 0.351562 0.000000 +vt 0.335937 0.000000 +vt 0.320312 0.000000 +vt 0.304687 0.000000 +vt 0.289062 0.000000 +vt 0.273437 0.000000 +vt 0.257812 0.000000 +vt 0.242188 0.000000 +vt 0.226563 0.000000 +vt 0.210938 0.000000 +vt 0.195313 0.000000 +vt 0.179688 0.000000 +vt 0.164063 0.000000 +vt 0.148438 0.000000 +vt 0.132813 0.000000 +vt 0.117188 0.000000 +vt 0.101563 0.000000 +vt 0.085938 0.000000 +vt 0.070313 0.000000 +vt 0.054688 0.000000 +vt 0.039063 0.000000 +vt 0.023438 0.000000 +vt 0.007813 0.000000 +vt 0.992188 0.000000 +vt 0.976563 0.000000 +vt 0.960938 0.000000 +vt 0.945313 0.000000 +vt 0.929688 0.000000 +vt 0.914063 0.000000 +vt 0.898438 0.000000 +vt 0.882813 0.000000 +vt 0.867188 0.000000 +vt 0.851563 0.000000 +vt 0.835938 0.000000 +vt 0.820313 0.000000 +vt 0.804688 0.000000 +vt 0.789063 0.000000 +vt 0.773438 0.000000 +vt 0.757812 0.000000 +vt 0.796875 0.984375 +vt 0.796875 0.968750 +vt 0.796875 0.953125 +vt 0.796875 0.937500 +vt 0.796875 0.921875 +vt 0.796875 0.906250 +vt 0.796875 0.890625 +vt 0.796875 0.875000 +vt 0.796875 0.859375 +vt 0.796875 0.843750 +vt 0.796875 0.828125 +vt 0.796875 0.812500 +vt 0.796875 0.796875 +vt 0.796875 0.781250 +vt 0.796875 0.765625 +vt 0.796875 0.750000 +vt 0.796875 0.734375 +vt 0.796875 0.718750 +vt 0.796875 0.703125 +vt 0.796875 0.687500 +vt 0.796875 0.671875 +vt 0.796875 0.656250 +vt 0.796875 0.640625 +vt 0.796875 0.625000 +vt 0.796875 0.609375 +vt 0.796875 0.593750 +vt 0.796875 0.578125 +vt 0.796875 0.562500 +vt 0.796875 0.546875 +vt 0.796875 0.531250 +vt 0.796875 0.515625 +vt 0.796875 0.500000 +vt 0.796875 0.484375 +vt 0.796875 0.468750 +vt 0.796875 0.453125 +vt 0.796875 0.437500 +vt 0.796875 0.421875 +vt 0.796875 0.406250 +vt 0.796875 0.390625 +vt 0.796875 0.375000 +vt 0.796875 0.359375 +vt 0.796875 0.343750 +vt 0.796875 0.328125 +vt 0.796875 0.312500 +vt 0.796875 0.296875 +vt 0.796875 0.281250 +vt 0.796875 0.265625 +vt 0.796875 0.250000 +vt 0.796875 0.234375 +vt 0.796875 0.218750 +vt 0.796875 0.203125 +vt 0.796875 0.187500 +vt 0.796875 0.171875 +vt 0.796875 0.156250 +vt 0.796875 0.140625 +vt 0.796875 0.125000 +vt 0.796875 0.109375 +vt 0.796875 0.093750 +vt 0.796875 0.078125 +vt 0.796875 0.062500 +vt 0.796875 0.046875 +vt 0.796875 0.031250 +vt 0.796875 0.015625 +vt 0.781250 0.984375 +vt 0.781250 0.968750 +vt 0.781250 0.953125 +vt 0.781250 0.937500 +vt 0.781250 0.921875 +vt 0.781250 0.906250 +vt 0.781250 0.890625 +vt 0.781250 0.875000 +vt 0.781250 0.859375 +vt 0.781250 0.843750 +vt 0.781250 0.828125 +vt 0.781250 0.812500 +vt 0.781250 0.796875 +vt 0.781250 0.781250 +vt 0.781250 0.765625 +vt 0.781250 0.750000 +vt 0.781250 0.734375 +vt 0.781250 0.718750 +vt 0.781250 0.703125 +vt 0.781250 0.687500 +vt 0.781250 0.671875 +vt 0.781250 0.656250 +vt 0.781250 0.640625 +vt 0.781250 0.625000 +vt 0.781250 0.609375 +vt 0.781250 0.593750 +vt 0.781250 0.578125 +vt 0.781250 0.562500 +vt 0.781250 0.546875 +vt 0.781250 0.531250 +vt 0.781250 0.515625 +vt 0.781250 0.500000 +vt 0.781250 0.484375 +vt 0.781250 0.468750 +vt 0.781250 0.453125 +vt 0.781250 0.437500 +vt 0.781250 0.421875 +vt 0.781250 0.406250 +vt 0.781250 0.390625 +vt 0.781250 0.375000 +vt 0.781250 0.359375 +vt 0.781250 0.343750 +vt 0.781250 0.328125 +vt 0.781250 0.312500 +vt 0.781250 0.296875 +vt 0.781250 0.281250 +vt 0.781250 0.265625 +vt 0.781250 0.250000 +vt 0.781250 0.234375 +vt 0.781250 0.218750 +vt 0.781250 0.203125 +vt 0.781250 0.187500 +vt 0.781250 0.171875 +vt 0.781250 0.156250 +vt 0.781250 0.140625 +vt 0.781250 0.125000 +vt 0.781250 0.109375 +vt 0.781250 0.093750 +vt 0.781250 0.078125 +vt 0.781250 0.062500 +vt 0.781250 0.046875 +vt 0.781250 0.031250 +vt 0.781250 0.015625 +vt 0.765625 0.984375 +vt 0.765625 0.968750 +vt 0.765625 0.953125 +vt 0.765625 0.937500 +vt 0.765625 0.921875 +vt 0.765625 0.906250 +vt 0.765625 0.890625 +vt 0.765625 0.875000 +vt 0.765625 0.859375 +vt 0.765625 0.843750 +vt 0.765625 0.828125 +vt 0.765625 0.812500 +vt 0.765625 0.796875 +vt 0.765625 0.781250 +vt 0.765625 0.765625 +vt 0.765625 0.750000 +vt 0.765625 0.734375 +vt 0.765625 0.718750 +vt 0.765625 0.703125 +vt 0.765625 0.687500 +vt 0.765625 0.671875 +vt 0.765625 0.656250 +vt 0.765625 0.640625 +vt 0.765625 0.625000 +vt 0.765625 0.609375 +vt 0.765625 0.593750 +vt 0.765625 0.578125 +vt 0.765625 0.562500 +vt 0.765625 0.546875 +vt 0.765625 0.531250 +vt 0.765625 0.515625 +vt 0.765625 0.500000 +vt 0.765625 0.484375 +vt 0.765625 0.468750 +vt 0.765625 0.453125 +vt 0.765625 0.437500 +vt 0.765625 0.421875 +vt 0.765625 0.406250 +vt 0.765625 0.390625 +vt 0.765625 0.375000 +vt 0.765625 0.359375 +vt 0.765625 0.343750 +vt 0.765625 0.328125 +vt 0.765625 0.312500 +vt 0.765625 0.296875 +vt 0.765625 0.281250 +vt 0.765625 0.265625 +vt 0.765625 0.250000 +vt 0.765625 0.234375 +vt 0.765625 0.218750 +vt 0.765625 0.203125 +vt 0.765625 0.187500 +vt 0.765625 0.171875 +vt 0.765625 0.156250 +vt 0.765625 0.140625 +vt 0.765625 0.125000 +vt 0.765625 0.109375 +vt 0.765625 0.093750 +vt 0.765625 0.078125 +vt 0.765625 0.062500 +vt 0.765625 0.046875 +vt 0.765625 0.031250 +vt 0.765625 0.015625 +vt 0.750000 0.984375 +vt 0.750000 0.968750 +vt 0.750000 0.937500 +vt 0.750000 0.921875 +vt 0.750000 0.859375 +vt 0.750000 0.812500 +vt 0.750000 0.796875 +vt 0.750000 0.781250 +vt 0.750000 0.734375 +vt 0.750000 0.718750 +vt 0.750000 0.687500 +vt 0.750000 0.656250 +vt 0.750000 0.640625 +vt 0.750000 0.625000 +vt 0.750000 0.609375 +vt 0.750000 0.515625 +vt 0.750000 0.484375 +vt 0.750000 0.453125 +vt 0.750000 0.437500 +vt 0.750000 0.390625 +vt 0.750000 0.328125 +vt 0.750000 0.312500 +vt 0.750000 0.281250 +vt 0.750000 0.187500 +vt 0.750000 0.140625 +vt 0.750000 0.062500 +vt 0.750000 0.015625 +s 0 +f 4009/4198/1 4008/4197/1 37/37/1 38/38/1 +f 4032/4221/2 30/30/2 90/90/2 91/91/2 +f 14/14/3 13/13/3 64/64/3 65/65/3 +f 1/1/4 4009/4198/4 38/38/4 39/39/4 +f 31/31/5 4032/4221/5 91/91/5 92/92/5 +f 15/15/6 14/14/6 65/65/6 66/66/6 +f 4010/4199/7 1/1/7 39/39/7 40/40/7 +f 32/32/8 31/31/8 92/92/8 93/93/8 +f 4023/4212/9 15/15/9 66/66/9 67/67/9 +f 4011/4200/10 4010/4199/10 40/40/10 41/41/10 +f 33/33/11 32/32/11 93/93/11 94/94/11 +f 16/16/12 4023/4212/12 67/67/12 68/68/12 +f 2/2/13 4011/4200/13 41/41/13 42/42/13 +f 34/34/14 33/33/14 94/94/14 95/95/14 +f 4024/4213/15 16/16/15 68/68/15 69/69/15 +f 3/3/16 2/2/16 42/42/16 43/43/16 +f 4033/4222/17 34/34/17 95/95/17 96/96/17 +f 17/17/18 4024/4213/18 69/69/18 70/70/18 +f 4/4/19 3/3/19 43/43/19 44/44/19 +f 35/35/20 4033/4222/20 96/96/20 97/97/20 +f 4025/4214/21 17/17/21 70/70/21 71/71/21 +f 4012/4201/22 4/4/22 44/44/22 45/45/22 +f 36/36/23 35/35/23 97/97/23 98/98/23 +f 4026/4215/24 4025/4214/24 71/71/24 72/72/24 +f 5/5/25 4012/4201/25 45/45/25 46/46/25 +f 4034/4223/26 36/36/26 98/98/26 99/99/26 +f 18/18/27 4026/4215/27 72/72/27 73/73/27 +f 6/6/28 5/5/28 46/46/28 47/47/28 +f 3818/3944/29 4034/4223/29 99/99/29 +f 19/19/30 18/18/30 73/73/30 74/74/30 +f 4013/4202/31 6/6/31 47/47/31 48/48/31 +f 4027/4216/32 19/19/32 74/74/32 75/75/32 +f 4014/4203/33 4013/4202/33 48/48/33 49/49/33 +f 20/20/34 4027/4216/34 75/75/34 76/76/34 +f 4015/4204/35 4014/4203/35 49/49/35 50/50/35 +f 21/21/36 20/20/36 76/76/36 77/77/36 +f 7/7/37 4015/4204/37 50/50/37 51/51/37 +f 22/22/38 21/21/38 77/77/38 78/78/38 +f 8/8/39 7/7/39 51/51/39 52/52/39 +f 4028/4217/40 22/22/40 78/78/40 79/79/40 +f 4016/4205/41 8/8/41 52/52/41 53/53/41 +f 4029/4218/42 4028/4217/42 79/79/42 80/80/42 +f 4017/4206/43 4016/4205/43 53/53/43 54/54/43 +f 23/23/44 4029/4218/44 80/80/44 81/81/44 +f 9/9/45 4017/4206/45 54/54/45 55/55/45 +f 4030/4219/46 23/23/46 81/81/46 82/82/46 +f 4018/4207/47 9/9/47 55/55/47 56/56/47 +f 24/24/48 4030/4219/48 82/82/48 83/83/48 +f 10/10/49 4018/4207/49 56/56/49 57/57/49 +f 25/25/50 24/24/50 83/83/50 84/84/50 +f 4019/4208/51 10/10/51 57/57/51 58/58/51 +f 26/26/52 25/25/52 84/84/52 85/85/52 +f 4020/4209/53 4019/4208/53 58/58/53 59/59/53 +f 27/27/54 26/26/54 85/85/54 86/86/54 +f 4021/4210/55 4020/4209/55 59/59/55 60/60/55 +f 28/28/56 27/27/56 86/86/56 87/87/56 +f 4022/4211/57 4021/4210/57 60/60/57 61/61/57 +f 4031/4220/58 28/28/58 87/87/58 88/88/58 +f 11/11/59 4022/4211/59 61/61/59 62/62/59 +f 29/29/60 4031/4220/60 88/88/60 89/89/60 +f 12/12/61 11/11/61 62/62/61 63/63/61 +f 4008/4197/62 1990/1990/62 37/37/62 +f 30/30/63 29/29/63 89/89/63 90/90/63 +f 13/13/64 12/12/64 63/63/64 64/64/64 +f 79/79/65 78/78/65 141/141/65 142/142/65 +f 53/53/66 52/52/66 115/115/66 116/116/66 +f 80/80/67 79/79/67 142/142/67 143/143/67 +f 54/54/68 53/53/68 116/116/68 117/117/68 +f 81/81/69 80/80/69 143/143/69 144/144/69 +f 55/55/70 54/54/70 117/117/70 118/118/70 +f 82/82/71 81/81/71 144/144/71 145/145/71 +f 56/56/72 55/55/72 118/118/72 119/119/72 +f 83/83/73 82/82/73 145/145/73 146/146/73 +f 57/57/74 56/56/74 119/119/74 120/120/74 +f 84/84/75 83/83/75 146/146/75 147/147/75 +f 58/58/76 57/57/76 120/120/76 121/121/76 +f 85/85/77 84/84/77 147/147/77 148/148/77 +f 59/59/78 58/58/78 121/121/78 122/122/78 +f 86/86/79 85/85/79 148/148/79 149/149/79 +f 60/60/80 59/59/80 122/122/80 123/123/80 +f 87/87/81 86/86/81 149/149/81 150/150/81 +f 61/61/82 60/60/82 123/123/82 124/124/82 +f 88/88/83 87/87/83 150/150/83 151/151/83 +f 62/62/84 61/61/84 124/124/84 125/125/84 +f 89/89/85 88/88/85 151/151/85 152/152/85 +f 63/63/86 62/62/86 125/125/86 126/126/86 +f 37/37/87 1990/1991/87 100/100/87 +f 90/90/88 89/89/88 152/152/88 153/153/88 +f 64/64/89 63/63/89 126/126/89 127/127/89 +f 38/38/90 37/37/90 100/100/90 101/101/90 +f 91/91/91 90/90/91 153/153/91 154/154/91 +f 65/65/92 64/64/92 127/127/92 128/128/92 +f 39/39/93 38/38/93 101/101/93 102/102/93 +f 92/92/94 91/91/94 154/154/94 155/155/94 +f 66/66/95 65/65/95 128/128/95 129/129/95 +f 40/40/96 39/39/96 102/102/96 103/103/96 +f 93/93/97 92/92/97 155/155/97 156/156/97 +f 67/67/98 66/66/98 129/129/98 130/130/98 +f 41/41/99 40/40/99 103/103/99 104/104/99 +f 94/94/100 93/93/100 156/156/100 157/157/100 +f 68/68/101 67/67/101 130/130/101 131/131/101 +f 42/42/102 41/41/102 104/104/102 105/105/102 +f 95/95/103 94/94/103 157/157/103 158/158/103 +f 69/69/104 68/68/104 131/131/104 132/132/104 +f 43/43/105 42/42/105 105/105/105 106/106/105 +f 96/96/106 95/95/106 158/158/106 159/159/106 +f 70/70/107 69/69/107 132/132/107 133/133/107 +f 44/44/108 43/43/108 106/106/108 107/107/108 +f 97/97/109 96/96/109 159/159/109 160/160/109 +f 71/71/110 70/70/110 133/133/110 134/134/110 +f 45/45/111 44/44/111 107/107/111 108/108/111 +f 98/98/112 97/97/112 160/160/112 161/161/112 +f 72/72/113 71/71/113 134/134/113 135/135/113 +f 46/46/114 45/45/114 108/108/114 109/109/114 +f 99/99/115 98/98/115 161/161/115 162/162/115 +f 73/73/116 72/72/116 135/135/116 136/136/116 +f 47/47/117 46/46/117 109/109/117 110/110/117 +f 3818/3945/118 99/99/118 162/162/118 +f 74/74/119 73/73/119 136/136/119 137/137/119 +f 48/48/120 47/47/120 110/110/120 111/111/120 +f 75/75/121 74/74/121 137/137/121 138/138/121 +f 49/49/122 48/48/122 111/111/122 112/112/122 +f 76/76/123 75/75/123 138/138/123 139/139/123 +f 50/50/124 49/49/124 112/112/124 113/113/124 +f 77/77/125 76/76/125 139/139/125 140/140/125 +f 51/51/126 50/50/126 113/113/126 114/114/126 +f 78/78/127 77/77/127 140/140/127 141/141/127 +f 52/52/128 51/51/128 114/114/128 115/115/128 +f 144/144/129 143/143/129 206/206/129 207/207/129 +f 118/118/130 117/117/130 180/180/130 181/181/130 +f 145/145/131 144/144/131 207/207/131 208/208/131 +f 119/119/132 118/118/132 181/181/132 182/182/132 +f 146/146/133 145/145/133 208/208/133 209/209/133 +f 120/120/134 119/119/134 182/182/134 183/183/134 +f 147/147/135 146/146/135 209/209/135 210/210/135 +f 121/121/136 120/120/136 183/183/136 184/184/136 +f 148/148/137 147/147/137 210/210/137 211/211/137 +f 122/122/138 121/121/138 184/184/138 185/185/138 +f 149/149/139 148/148/139 211/211/139 212/212/139 +f 123/123/140 122/122/140 185/185/140 186/186/140 +f 150/150/141 149/149/141 212/212/141 213/213/141 +f 124/124/142 123/123/142 186/186/142 187/187/142 +f 151/151/143 150/150/143 213/213/143 214/214/143 +f 125/125/144 124/124/144 187/187/144 188/188/144 +f 152/152/145 151/151/145 214/214/145 215/215/145 +f 126/126/146 125/125/146 188/188/146 189/189/146 +f 100/100/147 1990/1992/147 163/163/147 +f 153/153/148 152/152/148 215/215/148 216/216/148 +f 127/127/149 126/126/149 189/189/149 190/190/149 +f 101/101/150 100/100/150 163/163/150 164/164/150 +f 154/154/151 153/153/151 216/216/151 217/217/151 +f 128/128/152 127/127/152 190/190/152 191/191/152 +f 102/102/153 101/101/153 164/164/153 165/165/153 +f 155/155/154 154/154/154 217/217/154 218/218/154 +f 129/129/155 128/128/155 191/191/155 192/192/155 +f 103/103/156 102/102/156 165/165/156 166/166/156 +f 156/156/157 155/155/157 218/218/157 219/219/157 +f 130/130/158 129/129/158 192/192/158 193/193/158 +f 104/104/159 103/103/159 166/166/159 167/167/159 +f 157/157/160 156/156/160 219/219/160 220/220/160 +f 131/131/161 130/130/161 193/193/161 194/194/161 +f 105/105/162 104/104/162 167/167/162 168/168/162 +f 158/158/163 157/157/163 220/220/163 221/221/163 +f 132/132/164 131/131/164 194/194/164 195/195/164 +f 106/106/165 105/105/165 168/168/165 169/169/165 +f 159/159/166 158/158/166 221/221/166 222/222/166 +f 133/133/167 132/132/167 195/195/167 196/196/167 +f 107/107/168 106/106/168 169/169/168 170/170/168 +f 160/160/169 159/159/169 222/222/169 223/223/169 +f 134/134/170 133/133/170 196/196/170 197/197/170 +f 108/108/171 107/107/171 170/170/171 171/171/171 +f 161/161/172 160/160/172 223/223/172 224/224/172 +f 135/135/173 134/134/173 197/197/173 198/198/173 +f 109/109/174 108/108/174 171/171/174 172/172/174 +f 162/162/175 161/161/175 224/224/175 225/225/175 +f 136/136/176 135/135/176 198/198/176 199/199/176 +f 110/110/177 109/109/177 172/172/177 173/173/177 +f 3818/3946/178 162/162/178 225/225/178 +f 137/137/179 136/136/179 199/199/179 200/200/179 +f 111/111/180 110/110/180 173/173/180 174/174/180 +f 138/138/181 137/137/181 200/200/181 201/201/181 +f 112/112/182 111/111/182 174/174/182 175/175/182 +f 139/139/183 138/138/183 201/201/183 202/202/183 +f 113/113/184 112/112/184 175/175/184 176/176/184 +f 140/140/185 139/139/185 202/202/185 203/203/185 +f 114/114/186 113/113/186 176/176/186 177/177/186 +f 141/141/187 140/140/187 203/203/187 204/204/187 +f 115/115/188 114/114/188 177/177/188 178/178/188 +f 142/142/189 141/141/189 204/204/189 205/205/189 +f 116/116/190 115/115/190 178/178/190 179/179/190 +f 143/143/191 142/142/191 205/205/191 206/206/191 +f 117/117/192 116/116/192 179/179/192 180/180/192 +f 209/209/193 208/208/193 271/271/193 272/272/193 +f 183/183/194 182/182/194 245/245/194 246/246/194 +f 210/210/195 209/209/195 272/272/195 273/273/195 +f 184/184/196 183/183/196 246/246/196 247/247/196 +f 211/211/197 210/210/197 273/273/197 274/274/197 +f 185/185/198 184/184/198 247/247/198 248/248/198 +f 212/212/199 211/211/199 274/274/199 275/275/199 +f 186/186/200 185/185/200 248/248/200 249/249/200 +f 213/213/201 212/212/201 275/275/201 276/276/201 +f 187/187/202 186/186/202 249/249/202 250/250/202 +f 214/214/203 213/213/203 276/276/203 277/277/203 +f 188/188/204 187/187/204 250/250/204 251/251/204 +f 215/215/205 214/214/205 277/277/205 278/278/205 +f 189/189/206 188/188/206 251/251/206 252/252/206 +f 163/163/207 1990/1993/207 226/226/207 +f 216/216/208 215/215/208 278/278/208 279/279/208 +f 190/190/209 189/189/209 252/252/209 253/253/209 +f 164/164/210 163/163/210 226/226/210 227/227/210 +f 217/217/211 216/216/211 279/279/211 280/280/211 +f 191/191/212 190/190/212 253/253/212 254/254/212 +f 165/165/213 164/164/213 227/227/213 228/228/213 +f 218/218/214 217/217/214 280/280/214 281/281/214 +f 192/192/215 191/191/215 254/254/215 255/255/215 +f 166/166/216 165/165/216 228/228/216 229/229/216 +f 219/219/217 218/218/217 281/281/217 282/282/217 +f 193/193/218 192/192/218 255/255/218 256/256/218 +f 167/167/219 166/166/219 229/229/219 230/230/219 +f 220/220/220 219/219/220 282/282/220 283/283/220 +f 194/194/221 193/193/221 256/256/221 257/257/221 +f 168/168/222 167/167/222 230/230/222 231/231/222 +f 221/221/223 220/220/223 283/283/223 284/284/223 +f 195/195/224 194/194/224 257/257/224 258/258/224 +f 169/169/225 168/168/225 231/231/225 232/232/225 +f 222/222/226 221/221/226 284/284/226 285/285/226 +f 196/196/227 195/195/227 258/258/227 259/259/227 +f 170/170/228 169/169/228 232/232/228 233/233/228 +f 223/223/229 222/222/229 285/285/229 286/286/229 +f 197/197/230 196/196/230 259/259/230 260/260/230 +f 171/171/231 170/170/231 233/233/231 234/234/231 +f 224/224/232 223/223/232 286/286/232 287/287/232 +f 198/198/233 197/197/233 260/260/233 261/261/233 +f 172/172/234 171/171/234 234/234/234 235/235/234 +f 225/225/235 224/224/235 287/287/235 288/288/235 +f 199/199/236 198/198/236 261/261/236 262/262/236 +f 173/173/237 172/172/237 235/235/237 236/236/237 +f 3818/3947/238 225/225/238 288/288/238 +f 200/200/239 199/199/239 262/262/239 263/263/239 +f 174/174/240 173/173/240 236/236/240 237/237/240 +f 201/201/241 200/200/241 263/263/241 264/264/241 +f 175/175/242 174/174/242 237/237/242 238/238/242 +f 202/202/243 201/201/243 264/264/243 265/265/243 +f 176/176/244 175/175/244 238/238/244 239/239/244 +f 203/203/245 202/202/245 265/265/245 266/266/245 +f 177/177/246 176/176/246 239/239/246 240/240/246 +f 204/204/247 203/203/247 266/266/247 267/267/247 +f 178/178/248 177/177/248 240/240/248 241/241/248 +f 205/205/249 204/204/249 267/267/249 268/268/249 +f 179/179/250 178/178/250 241/241/250 242/242/250 +f 206/206/251 205/205/251 268/268/251 269/269/251 +f 180/180/252 179/179/252 242/242/252 243/243/252 +f 207/207/253 206/206/253 269/269/253 270/270/253 +f 181/181/254 180/180/254 243/243/254 244/244/254 +f 208/208/255 207/207/255 270/270/255 271/271/255 +f 182/182/256 181/181/256 244/244/256 245/245/256 +f 274/274/257 273/273/257 336/336/257 337/337/257 +f 248/248/258 247/247/258 310/310/258 311/311/258 +f 275/275/259 274/274/259 337/337/259 338/338/259 +f 249/249/260 248/248/260 311/311/260 312/312/260 +f 276/276/261 275/275/261 338/338/261 339/339/261 +f 250/250/262 249/249/262 312/312/262 313/313/262 +f 277/277/263 276/276/263 339/339/263 340/340/263 +f 251/251/264 250/250/264 313/313/264 314/314/264 +f 278/278/265 277/277/265 340/340/265 341/341/265 +f 252/252/266 251/251/266 314/314/266 315/315/266 +f 226/226/267 1990/1994/267 289/289/267 +f 279/279/268 278/278/268 341/341/268 342/342/268 +f 253/253/269 252/252/269 315/315/269 316/316/269 +f 227/227/270 226/226/270 289/289/270 290/290/270 +f 280/280/271 279/279/271 342/342/271 343/343/271 +f 254/254/272 253/253/272 316/316/272 317/317/272 +f 228/228/273 227/227/273 290/290/273 291/291/273 +f 281/281/274 280/280/274 343/343/274 344/344/274 +f 255/255/275 254/254/275 317/317/275 318/318/275 +f 229/229/276 228/228/276 291/291/276 292/292/276 +f 282/282/277 281/281/277 344/344/277 345/345/277 +f 256/256/278 255/255/278 318/318/278 319/319/278 +f 230/230/279 229/229/279 292/292/279 293/293/279 +f 283/283/280 282/282/280 345/345/280 346/346/280 +f 257/257/281 256/256/281 319/319/281 320/320/281 +f 231/231/282 230/230/282 293/293/282 294/294/282 +f 284/284/283 283/283/283 346/346/283 347/347/283 +f 258/258/284 257/257/284 320/320/284 321/321/284 +f 232/232/285 231/231/285 294/294/285 295/295/285 +f 285/285/286 284/284/286 347/347/286 348/348/286 +f 259/259/287 258/258/287 321/321/287 322/322/287 +f 233/233/288 232/232/288 295/295/288 296/296/288 +f 286/286/289 285/285/289 348/348/289 349/349/289 +f 260/260/290 259/259/290 322/322/290 323/323/290 +f 234/234/291 233/233/291 296/296/291 297/297/291 +f 287/287/292 286/286/292 349/349/292 350/350/292 +f 261/261/293 260/260/293 323/323/293 324/324/293 +f 235/235/294 234/234/294 297/297/294 298/298/294 +f 288/288/295 287/287/295 350/350/295 351/351/295 +f 262/262/296 261/261/296 324/324/296 325/325/296 +f 236/236/297 235/235/297 298/298/297 299/299/297 +f 3818/3948/298 288/288/298 351/351/298 +f 263/263/299 262/262/299 325/325/299 326/326/299 +f 237/237/300 236/236/300 299/299/300 300/300/300 +f 264/264/301 263/263/301 326/326/301 327/327/301 +f 238/238/302 237/237/302 300/300/302 301/301/302 +f 265/265/303 264/264/303 327/327/303 328/328/303 +f 239/239/304 238/238/304 301/301/304 302/302/304 +f 266/266/305 265/265/305 328/328/305 329/329/305 +f 240/240/306 239/239/306 302/302/306 303/303/306 +f 267/267/307 266/266/307 329/329/307 330/330/307 +f 241/241/308 240/240/308 303/303/308 304/304/308 +f 268/268/309 267/267/309 330/330/309 331/331/309 +f 242/242/310 241/241/310 304/304/310 305/305/310 +f 269/269/311 268/268/311 331/331/311 332/332/311 +f 243/243/312 242/242/312 305/305/312 306/306/312 +f 270/270/313 269/269/313 332/332/313 333/333/313 +f 244/244/314 243/243/314 306/306/314 307/307/314 +f 271/271/315 270/270/315 333/333/315 334/334/315 +f 245/245/316 244/244/316 307/307/316 308/308/316 +f 272/272/317 271/271/317 334/334/317 335/335/317 +f 246/246/318 245/245/318 308/308/318 309/309/318 +f 273/273/319 272/272/319 335/335/319 336/336/319 +f 247/247/320 246/246/320 309/309/320 310/310/320 +f 339/339/321 338/338/321 401/401/321 402/402/321 +f 313/313/322 312/312/322 375/375/322 376/376/322 +f 340/340/323 339/339/323 402/402/323 403/403/323 +f 314/314/324 313/313/324 376/376/324 377/377/324 +f 341/341/325 340/340/325 403/403/325 404/404/325 +f 315/315/326 314/314/326 377/377/326 378/378/326 +f 289/289/327 1990/1995/327 352/352/327 +f 342/342/328 341/341/328 404/404/328 405/405/328 +f 316/316/329 315/315/329 378/378/329 379/379/329 +f 290/290/330 289/289/330 352/352/330 353/353/330 +f 343/343/331 342/342/331 405/405/331 406/406/331 +f 317/317/332 316/316/332 379/379/332 380/380/332 +f 291/291/333 290/290/333 353/353/333 354/354/333 +f 344/344/334 343/343/334 406/406/334 407/407/334 +f 318/318/335 317/317/335 380/380/335 381/381/335 +f 292/292/336 291/291/336 354/354/336 355/355/336 +f 345/345/337 344/344/337 407/407/337 408/408/337 +f 319/319/338 318/318/338 381/381/338 382/382/338 +f 293/293/339 292/292/339 355/355/339 356/356/339 +f 346/346/340 345/345/340 408/408/340 409/409/340 +f 320/320/341 319/319/341 382/382/341 383/383/341 +f 294/294/342 293/293/342 356/356/342 357/357/342 +f 347/347/343 346/346/343 409/409/343 410/410/343 +f 321/321/344 320/320/344 383/383/344 384/384/344 +f 295/295/345 294/294/345 357/357/345 358/358/345 +f 348/348/346 347/347/346 410/410/346 411/411/346 +f 322/322/347 321/321/347 384/384/347 385/385/347 +f 296/296/348 295/295/348 358/358/348 359/359/348 +f 349/349/349 348/348/349 411/411/349 412/412/349 +f 323/323/350 322/322/350 385/385/350 386/386/350 +f 297/297/351 296/296/351 359/359/351 360/360/351 +f 350/350/352 349/349/352 412/412/352 413/413/352 +f 324/324/353 323/323/353 386/386/353 387/387/353 +f 298/298/354 297/297/354 360/360/354 361/361/354 +f 351/351/355 350/350/355 413/413/355 414/414/355 +f 325/325/356 324/324/356 387/387/356 388/388/356 +f 299/299/357 298/298/357 361/361/357 362/362/357 +f 3818/3949/358 351/351/358 414/414/358 +f 326/326/359 325/325/359 388/388/359 389/389/359 +f 300/300/360 299/299/360 362/362/360 363/363/360 +f 327/327/361 326/326/361 389/389/361 390/390/361 +f 301/301/362 300/300/362 363/363/362 364/364/362 +f 328/328/363 327/327/363 390/390/363 391/391/363 +f 302/302/364 301/301/364 364/364/364 365/365/364 +f 329/329/365 328/328/365 391/391/365 392/392/365 +f 303/303/366 302/302/366 365/365/366 366/366/366 +f 330/330/367 329/329/367 392/392/367 393/393/367 +f 304/304/368 303/303/368 366/366/368 367/367/368 +f 331/331/369 330/330/369 393/393/369 394/394/369 +f 305/305/370 304/304/370 367/367/370 368/368/370 +f 332/332/371 331/331/371 394/394/371 395/395/371 +f 306/306/372 305/305/372 368/368/372 369/369/372 +f 333/333/373 332/332/373 395/395/373 396/396/373 +f 307/307/374 306/306/374 369/369/374 370/370/374 +f 334/334/375 333/333/375 396/396/375 397/397/375 +f 308/308/376 307/307/376 370/370/376 371/371/376 +f 335/335/377 334/334/377 397/397/377 398/398/377 +f 309/309/378 308/308/378 371/371/378 372/372/378 +f 336/336/379 335/335/379 398/398/379 399/399/379 +f 310/310/380 309/309/380 372/372/380 373/373/380 +f 337/337/381 336/336/381 399/399/381 400/400/381 +f 311/311/382 310/310/382 373/373/382 374/374/382 +f 338/338/383 337/337/383 400/400/383 401/401/383 +f 312/312/384 311/311/384 374/374/384 375/375/384 +f 404/404/385 403/403/385 466/466/385 467/467/385 +f 378/378/386 377/377/386 440/440/386 441/441/386 +f 352/352/387 1990/1996/387 415/415/387 +f 405/405/388 404/404/388 467/467/388 468/468/388 +f 379/379/389 378/378/389 441/441/389 442/442/389 +f 353/353/390 352/352/390 415/415/390 416/416/390 +f 406/406/391 405/405/391 468/468/391 469/469/391 +f 380/380/392 379/379/392 442/442/392 443/443/392 +f 354/354/393 353/353/393 416/416/393 417/417/393 +f 407/407/394 406/406/394 469/469/394 470/470/394 +f 381/381/395 380/380/395 443/443/395 444/444/395 +f 355/355/396 354/354/396 417/417/396 418/418/396 +f 408/408/397 407/407/397 470/470/397 471/471/397 +f 382/382/398 381/381/398 444/444/398 445/445/398 +f 356/356/399 355/355/399 418/418/399 419/419/399 +f 409/409/400 408/408/400 471/471/400 472/472/400 +f 383/383/401 382/382/401 445/445/401 446/446/401 +f 357/357/402 356/356/402 419/419/402 420/420/402 +f 410/410/403 409/409/403 472/472/403 473/473/403 +f 384/384/404 383/383/404 446/446/404 447/447/404 +f 358/358/405 357/357/405 420/420/405 421/421/405 +f 411/411/406 410/410/406 473/473/406 474/474/406 +f 385/385/407 384/384/407 447/447/407 448/448/407 +f 359/359/408 358/358/408 421/421/408 422/422/408 +f 412/412/409 411/411/409 474/474/409 475/475/409 +f 386/386/410 385/385/410 448/448/410 449/449/410 +f 360/360/411 359/359/411 422/422/411 423/423/411 +f 413/413/412 412/412/412 475/475/412 476/476/412 +f 387/387/413 386/386/413 449/449/413 450/450/413 +f 361/361/414 360/360/414 423/423/414 424/424/414 +f 414/414/415 413/413/415 476/476/415 477/477/415 +f 388/388/416 387/387/416 450/450/416 451/451/416 +f 362/362/417 361/361/417 424/424/417 425/425/417 +f 3818/3950/418 414/414/418 477/477/418 +f 389/389/419 388/388/419 451/451/419 452/452/419 +f 363/363/420 362/362/420 425/425/420 426/426/420 +f 390/390/421 389/389/421 452/452/421 453/453/421 +f 364/364/422 363/363/422 426/426/422 427/427/422 +f 391/391/423 390/390/423 453/453/423 454/454/423 +f 365/365/424 364/364/424 427/427/424 428/428/424 +f 392/392/425 391/391/425 454/454/425 455/455/425 +f 366/366/426 365/365/426 428/428/426 429/429/426 +f 393/393/427 392/392/427 455/455/427 456/456/427 +f 367/367/428 366/366/428 429/429/428 430/430/428 +f 394/394/429 393/393/429 456/456/429 457/457/429 +f 368/368/430 367/367/430 430/430/430 431/431/430 +f 395/395/431 394/394/431 457/457/431 458/458/431 +f 369/369/432 368/368/432 431/431/432 432/432/432 +f 396/396/433 395/395/433 458/458/433 459/459/433 +f 370/370/434 369/369/434 432/432/434 433/433/434 +f 397/397/435 396/396/435 459/459/435 460/460/435 +f 371/371/436 370/370/436 433/433/436 434/434/436 +f 398/398/437 397/397/437 460/460/437 461/461/437 +f 372/372/438 371/371/438 434/434/438 435/435/438 +f 399/399/439 398/398/439 461/461/439 462/462/439 +f 373/373/440 372/372/440 435/435/440 436/436/440 +f 400/400/441 399/399/441 462/462/441 463/463/441 +f 374/374/442 373/373/442 436/436/442 437/437/442 +f 401/401/443 400/400/443 463/463/443 464/464/443 +f 375/375/444 374/374/444 437/437/444 438/438/444 +f 402/402/445 401/401/445 464/464/445 465/465/445 +f 376/376/446 375/375/446 438/438/446 439/439/446 +f 403/403/447 402/402/447 465/465/447 466/466/447 +f 377/377/448 376/376/448 439/439/448 440/440/448 +f 469/469/449 468/468/449 531/531/449 532/532/449 +f 443/443/450 442/442/450 505/505/450 506/506/450 +f 417/417/451 416/416/451 479/479/451 480/480/451 +f 470/470/452 469/469/452 532/532/452 533/533/452 +f 444/444/453 443/443/453 506/506/453 507/507/453 +f 418/418/454 417/417/454 480/480/454 481/481/454 +f 471/471/455 470/470/455 533/533/455 534/534/455 +f 445/445/456 444/444/456 507/507/456 508/508/456 +f 419/419/457 418/418/457 481/481/457 482/482/457 +f 472/472/458 471/471/458 534/534/458 535/535/458 +f 446/446/459 445/445/459 508/508/459 509/509/459 +f 420/420/460 419/419/460 482/482/460 483/483/460 +f 473/473/461 472/472/461 535/535/461 536/536/461 +f 447/447/462 446/446/462 509/509/462 510/510/462 +f 421/421/463 420/420/463 483/483/463 484/484/463 +f 474/474/464 473/473/464 536/536/464 537/537/464 +f 448/448/465 447/447/465 510/510/465 511/511/465 +f 422/422/466 421/421/466 484/484/466 485/485/466 +f 475/475/467 474/474/467 537/537/467 538/538/467 +f 449/449/468 448/448/468 511/511/468 512/512/468 +f 423/423/469 422/422/469 485/485/469 486/486/469 +f 476/476/470 475/475/470 538/538/470 539/539/470 +f 450/450/471 449/449/471 512/512/471 513/513/471 +f 424/424/472 423/423/472 486/486/472 487/487/472 +f 477/477/473 476/476/473 539/539/473 540/540/473 +f 451/451/474 450/450/474 513/513/474 514/514/474 +f 425/425/475 424/424/475 487/487/475 488/488/475 +f 3818/3951/476 477/477/476 540/540/476 +f 452/452/477 451/451/477 514/514/477 515/515/477 +f 426/426/478 425/425/478 488/488/478 489/489/478 +f 453/453/479 452/452/479 515/515/479 516/516/479 +f 427/427/480 426/426/480 489/489/480 490/490/480 +f 454/454/481 453/453/481 516/516/481 517/517/481 +f 428/428/482 427/427/482 490/490/482 491/491/482 +f 455/455/483 454/454/483 517/517/483 518/518/483 +f 429/429/484 428/428/484 491/491/484 492/492/484 +f 456/456/485 455/455/485 518/518/485 519/519/485 +f 430/430/486 429/429/486 492/492/486 493/493/486 +f 457/457/487 456/456/487 519/519/487 520/520/487 +f 431/431/488 430/430/488 493/493/488 494/494/488 +f 458/458/489 457/457/489 520/520/489 521/521/489 +f 432/432/490 431/431/490 494/494/490 495/495/490 +f 459/459/491 458/458/491 521/521/491 522/522/491 +f 433/433/492 432/432/492 495/495/492 496/496/492 +f 460/460/493 459/459/493 522/522/493 523/523/493 +f 434/434/494 433/433/494 496/496/494 497/497/494 +f 461/461/495 460/460/495 523/523/495 524/524/495 +f 435/435/496 434/434/496 497/497/496 498/498/496 +f 462/462/497 461/461/497 524/524/497 525/525/497 +f 436/436/498 435/435/498 498/498/498 499/499/498 +f 463/463/499 462/462/499 525/525/499 526/526/499 +f 437/437/500 436/436/500 499/499/500 500/500/500 +f 464/464/501 463/463/501 526/526/501 527/527/501 +f 438/438/502 437/437/502 500/500/502 501/501/502 +f 465/465/503 464/464/503 527/527/503 528/528/503 +f 439/439/504 438/438/504 501/501/504 502/502/504 +f 466/466/505 465/465/505 528/528/505 529/529/505 +f 440/440/506 439/439/506 502/502/506 503/503/506 +f 467/467/507 466/466/507 529/529/507 530/530/507 +f 441/441/508 440/440/508 503/503/508 504/504/508 +f 415/415/509 1990/1997/509 478/478/509 +f 468/468/510 467/467/510 530/530/510 531/531/510 +f 442/442/511 441/441/511 504/504/511 505/505/511 +f 416/416/512 415/415/512 478/478/512 479/479/512 +f 534/534/513 533/533/513 596/596/513 597/597/513 +f 508/508/514 507/507/514 570/570/514 571/571/514 +f 482/482/515 481/481/515 544/544/515 545/545/515 +f 535/535/516 534/534/516 597/597/516 598/598/516 +f 509/509/517 508/508/517 571/571/517 572/572/517 +f 483/483/518 482/482/518 545/545/518 546/546/518 +f 536/536/519 535/535/519 598/598/519 599/599/519 +f 510/510/520 509/509/520 572/572/520 573/573/520 +f 484/484/521 483/483/521 546/546/521 547/547/521 +f 537/537/522 536/536/522 599/599/522 600/600/522 +f 511/511/523 510/510/523 573/573/523 574/574/523 +f 485/485/524 484/484/524 547/547/524 548/548/524 +f 538/538/525 537/537/525 600/600/525 601/601/525 +f 512/512/526 511/511/526 574/574/526 575/575/526 +f 486/486/527 485/485/527 548/548/527 549/549/527 +f 539/539/528 538/538/528 601/601/528 602/602/528 +f 513/513/529 512/512/529 575/575/529 576/576/529 +f 487/487/530 486/486/530 549/549/530 550/550/530 +f 540/540/531 539/539/531 602/602/531 603/603/531 +f 514/514/532 513/513/532 576/576/532 577/577/532 +f 488/488/533 487/487/533 550/550/533 551/551/533 +f 3818/3952/534 540/540/534 603/603/534 +f 515/515/535 514/514/535 577/577/535 578/578/535 +f 489/489/536 488/488/536 551/551/536 552/552/536 +f 516/516/537 515/515/537 578/578/537 579/579/537 +f 490/490/538 489/489/538 552/552/538 553/553/538 +f 517/517/539 516/516/539 579/579/539 580/580/539 +f 491/491/540 490/490/540 553/553/540 554/554/540 +f 518/518/541 517/517/541 580/580/541 581/581/541 +f 492/492/542 491/491/542 554/554/542 555/555/542 +f 519/519/543 518/518/543 581/581/543 582/582/543 +f 493/493/544 492/492/544 555/555/544 556/556/544 +f 520/520/545 519/519/545 582/582/545 583/583/545 +f 494/494/546 493/493/546 556/556/546 557/557/546 +f 521/521/547 520/520/547 583/583/547 584/584/547 +f 495/495/548 494/494/548 557/557/548 558/558/548 +f 522/522/549 521/521/549 584/584/549 585/585/549 +f 496/496/550 495/495/550 558/558/550 559/559/550 +f 523/523/551 522/522/551 585/585/551 586/586/551 +f 497/497/552 496/496/552 559/559/552 560/560/552 +f 524/524/553 523/523/553 586/586/553 587/587/553 +f 498/498/554 497/497/554 560/560/554 561/561/554 +f 525/525/555 524/524/555 587/587/555 588/588/555 +f 499/499/556 498/498/556 561/561/556 562/562/556 +f 526/526/557 525/525/557 588/588/557 589/589/557 +f 500/500/558 499/499/558 562/562/558 563/563/558 +f 527/527/559 526/526/559 589/589/559 590/590/559 +f 501/501/560 500/500/560 563/563/560 564/564/560 +f 528/528/561 527/527/561 590/590/561 591/591/561 +f 502/502/562 501/501/562 564/564/562 565/565/562 +f 529/529/563 528/528/563 591/591/563 592/592/563 +f 503/503/564 502/502/564 565/565/564 566/566/564 +f 530/530/565 529/529/565 592/592/565 593/593/565 +f 504/504/566 503/503/566 566/566/566 567/567/566 +f 478/478/567 1990/1998/567 541/541/567 +f 531/531/568 530/530/568 593/593/568 594/594/568 +f 505/505/569 504/504/569 567/567/569 568/568/569 +f 479/479/570 478/478/570 541/541/570 542/542/570 +f 532/532/571 531/531/571 594/594/571 595/595/571 +f 506/506/572 505/505/572 568/568/572 569/569/572 +f 480/480/573 479/479/573 542/542/573 543/543/573 +f 533/533/574 532/532/574 595/595/574 596/596/574 +f 507/507/575 506/506/575 569/569/575 570/570/575 +f 481/481/576 480/480/576 543/543/576 544/544/576 +f 599/599/577 598/598/577 661/661/577 662/662/577 +f 573/573/578 572/572/578 635/635/578 636/636/578 +f 547/547/579 546/546/579 609/609/579 610/610/579 +f 600/600/580 599/599/580 662/662/580 663/663/580 +f 574/574/581 573/573/581 636/636/581 637/637/581 +f 548/548/582 547/547/582 610/610/582 611/611/582 +f 601/601/583 600/600/583 663/663/583 664/664/583 +f 575/575/584 574/574/584 637/637/584 638/638/584 +f 549/549/585 548/548/585 611/611/585 612/612/585 +f 602/602/586 601/601/586 664/664/586 665/665/586 +f 576/576/587 575/575/587 638/638/587 639/639/587 +f 550/550/588 549/549/588 612/612/588 613/613/588 +f 603/603/589 602/602/589 665/665/589 666/666/589 +f 577/577/590 576/576/590 639/639/590 640/640/590 +f 551/551/591 550/550/591 613/613/591 614/614/591 +f 3818/3953/592 603/603/592 666/666/592 +f 578/578/593 577/577/593 640/640/593 641/641/593 +f 552/552/594 551/551/594 614/614/594 615/615/594 +f 579/579/595 578/578/595 641/641/595 642/642/595 +f 553/553/596 552/552/596 615/615/596 616/616/596 +f 580/580/597 579/579/597 642/642/597 643/643/597 +f 554/554/598 553/553/598 616/616/598 617/617/598 +f 581/581/599 580/580/599 643/643/599 644/644/599 +f 555/555/600 554/554/600 617/617/600 618/618/600 +f 582/582/601 581/581/601 644/644/601 645/645/601 +f 556/556/602 555/555/602 618/618/602 619/619/602 +f 583/583/603 582/582/603 645/645/603 646/646/603 +f 557/557/604 556/556/604 619/619/604 620/620/604 +f 584/584/605 583/583/605 646/646/605 647/647/605 +f 558/558/606 557/557/606 620/620/606 621/621/606 +f 585/585/607 584/584/607 647/647/607 648/648/607 +f 559/559/608 558/558/608 621/621/608 622/622/608 +f 586/586/609 585/585/609 648/648/609 649/649/609 +f 560/560/610 559/559/610 622/622/610 623/623/610 +f 587/587/611 586/586/611 649/649/611 650/650/611 +f 561/561/612 560/560/612 623/623/612 624/624/612 +f 588/588/613 587/587/613 650/650/613 651/651/613 +f 562/562/614 561/561/614 624/624/614 625/625/614 +f 589/589/615 588/588/615 651/651/615 652/652/615 +f 563/563/616 562/562/616 625/625/616 626/626/616 +f 590/590/617 589/589/617 652/652/617 653/653/617 +f 564/564/618 563/563/618 626/626/618 627/627/618 +f 591/591/619 590/590/619 653/653/619 654/654/619 +f 565/565/620 564/564/620 627/627/620 628/628/620 +f 592/592/621 591/591/621 654/654/621 655/655/621 +f 566/566/622 565/565/622 628/628/622 629/629/622 +f 593/593/623 592/592/623 655/655/623 656/656/623 +f 567/567/624 566/566/624 629/629/624 630/630/624 +f 541/541/625 1990/1999/625 604/604/625 +f 594/594/626 593/593/626 656/656/626 657/657/626 +f 568/568/627 567/567/627 630/630/627 631/631/627 +f 542/542/628 541/541/628 604/604/628 605/605/628 +f 595/595/629 594/594/629 657/657/629 658/658/629 +f 569/569/630 568/568/630 631/631/630 632/632/630 +f 543/543/631 542/542/631 605/605/631 606/606/631 +f 596/596/632 595/595/632 658/658/632 659/659/632 +f 570/570/633 569/569/633 632/632/633 633/633/633 +f 544/544/634 543/543/634 606/606/634 607/607/634 +f 597/597/635 596/596/635 659/659/635 660/660/635 +f 571/571/636 570/570/636 633/633/636 634/634/636 +f 545/545/637 544/544/637 607/607/637 608/608/637 +f 598/598/638 597/597/638 660/660/638 661/661/638 +f 572/572/639 571/571/639 634/634/639 635/635/639 +f 546/546/640 545/545/640 608/608/640 609/609/640 +f 664/664/641 663/663/641 726/726/641 727/727/641 +f 638/638/642 637/637/642 700/700/642 701/701/642 +f 612/612/643 611/611/643 674/674/643 675/675/643 +f 665/665/644 664/664/644 727/727/644 728/728/644 +f 639/639/645 638/638/645 701/701/645 702/702/645 +f 613/613/646 612/612/646 675/675/646 676/676/646 +f 666/666/647 665/665/647 728/728/647 729/729/647 +f 640/640/648 639/639/648 702/702/648 703/703/648 +f 614/614/649 613/613/649 676/676/649 677/677/649 +f 3818/3954/650 666/666/650 729/729/650 +f 641/641/651 640/640/651 703/703/651 704/704/651 +f 615/615/652 614/614/652 677/677/652 678/678/652 +f 642/642/653 641/641/653 704/704/653 705/705/653 +f 616/616/654 615/615/654 678/678/654 679/679/654 +f 643/643/655 642/642/655 705/705/655 706/706/655 +f 617/617/656 616/616/656 679/679/656 680/680/656 +f 644/644/657 643/643/657 706/706/657 707/707/657 +f 618/618/658 617/617/658 680/680/658 681/681/658 +f 645/645/659 644/644/659 707/707/659 708/708/659 +f 619/619/660 618/618/660 681/681/660 682/682/660 +f 646/646/661 645/645/661 708/708/661 709/709/661 +f 620/620/662 619/619/662 682/682/662 683/683/662 +f 647/647/663 646/646/663 709/709/663 710/710/663 +f 621/621/664 620/620/664 683/683/664 684/684/664 +f 648/648/665 647/647/665 710/710/665 711/711/665 +f 622/622/666 621/621/666 684/684/666 685/685/666 +f 649/649/667 648/648/667 711/711/667 712/712/667 +f 623/623/668 622/622/668 685/685/668 686/686/668 +f 650/650/669 649/649/669 712/712/669 713/713/669 +f 624/624/670 623/623/670 686/686/670 687/687/670 +f 651/651/671 650/650/671 713/713/671 714/714/671 +f 625/625/672 624/624/672 687/687/672 688/688/672 +f 652/652/673 651/651/673 714/714/673 715/715/673 +f 626/626/674 625/625/674 688/688/674 689/689/674 +f 653/653/675 652/652/675 715/715/675 716/716/675 +f 627/627/676 626/626/676 689/689/676 690/690/676 +f 654/654/677 653/653/677 716/716/677 717/717/677 +f 628/628/678 627/627/678 690/690/678 691/691/678 +f 655/655/679 654/654/679 717/717/679 718/718/679 +f 629/629/680 628/628/680 691/691/680 692/692/680 +f 656/656/681 655/655/681 718/718/681 719/719/681 +f 630/630/682 629/629/682 692/692/682 693/693/682 +f 604/604/683 1990/2000/683 667/667/683 +f 657/657/684 656/656/684 719/719/684 720/720/684 +f 631/631/685 630/630/685 693/693/685 694/694/685 +f 605/605/686 604/604/686 667/667/686 668/668/686 +f 658/658/687 657/657/687 720/720/687 721/721/687 +f 632/632/688 631/631/688 694/694/688 695/695/688 +f 606/606/689 605/605/689 668/668/689 669/669/689 +f 659/659/690 658/658/690 721/721/690 722/722/690 +f 633/633/691 632/632/691 695/695/691 696/696/691 +f 607/607/692 606/606/692 669/669/692 670/670/692 +f 660/660/693 659/659/693 722/722/693 723/723/693 +f 634/634/694 633/633/694 696/696/694 697/697/694 +f 608/608/695 607/607/695 670/670/695 671/671/695 +f 661/661/696 660/660/696 723/723/696 724/724/696 +f 635/635/697 634/634/697 697/697/697 698/698/697 +f 609/609/698 608/608/698 671/671/698 672/672/698 +f 662/662/699 661/661/699 724/724/699 725/725/699 +f 636/636/700 635/635/700 698/698/700 699/699/700 +f 610/610/701 609/609/701 672/672/701 673/673/701 +f 663/663/702 662/662/702 725/725/702 726/726/702 +f 637/637/703 636/636/703 699/699/703 700/700/703 +f 611/611/704 610/610/704 673/673/704 674/674/704 +f 729/729/705 728/728/705 791/791/705 792/792/705 +f 703/703/706 702/702/706 765/765/706 766/766/706 +f 677/677/707 676/676/707 739/739/707 740/740/707 +f 3818/3955/708 729/729/708 792/792/708 +f 704/704/709 703/703/709 766/766/709 767/767/709 +f 678/678/710 677/677/710 740/740/710 741/741/710 +f 705/705/711 704/704/711 767/767/711 768/768/711 +f 679/679/712 678/678/712 741/741/712 742/742/712 +f 706/706/713 705/705/713 768/768/713 769/769/713 +f 680/680/714 679/679/714 742/742/714 743/743/714 +f 707/707/715 706/706/715 769/769/715 770/770/715 +f 681/681/716 680/680/716 743/743/716 744/744/716 +f 708/708/717 707/707/717 770/770/717 771/771/717 +f 682/682/718 681/681/718 744/744/718 745/745/718 +f 709/709/719 708/708/719 771/771/719 772/772/719 +f 683/683/720 682/682/720 745/745/720 746/746/720 +f 710/710/721 709/709/721 772/772/721 773/773/721 +f 684/684/722 683/683/722 746/746/722 747/747/722 +f 711/711/723 710/710/723 773/773/723 774/774/723 +f 685/685/724 684/684/724 747/747/724 748/748/724 +f 712/712/725 711/711/725 774/774/725 775/775/725 +f 686/686/726 685/685/726 748/748/726 749/749/726 +f 713/713/727 712/712/727 775/775/727 776/776/727 +f 687/687/728 686/686/728 749/749/728 750/750/728 +f 714/714/729 713/713/729 776/776/729 777/777/729 +f 688/688/730 687/687/730 750/750/730 751/751/730 +f 715/715/731 714/714/731 777/777/731 778/778/731 +f 689/689/732 688/688/732 751/751/732 752/752/732 +f 716/716/733 715/715/733 778/778/733 779/779/733 +f 690/690/734 689/689/734 752/752/734 753/753/734 +f 717/717/735 716/716/735 779/779/735 780/780/735 +f 691/691/736 690/690/736 753/753/736 754/754/736 +f 718/718/737 717/717/737 780/780/737 781/781/737 +f 692/692/738 691/691/738 754/754/738 755/755/738 +f 719/719/739 718/718/739 781/781/739 782/782/739 +f 693/693/740 692/692/740 755/755/740 756/756/740 +f 667/667/741 1990/2001/741 730/730/741 +f 720/720/742 719/719/742 782/782/742 783/783/742 +f 694/694/743 693/693/743 756/756/743 757/757/743 +f 668/668/744 667/667/744 730/730/744 731/731/744 +f 721/721/745 720/720/745 783/783/745 784/784/745 +f 695/695/746 694/694/746 757/757/746 758/758/746 +f 669/669/747 668/668/747 731/731/747 732/732/747 +f 722/722/748 721/721/748 784/784/748 785/785/748 +f 696/696/749 695/695/749 758/758/749 759/759/749 +f 670/670/750 669/669/750 732/732/750 733/733/750 +f 723/723/751 722/722/751 785/785/751 786/786/751 +f 697/697/752 696/696/752 759/759/752 760/760/752 +f 671/671/753 670/670/753 733/733/753 734/734/753 +f 724/724/754 723/723/754 786/786/754 787/787/754 +f 698/698/755 697/697/755 760/760/755 761/761/755 +f 672/672/756 671/671/756 734/734/756 735/735/756 +f 725/725/757 724/724/757 787/787/757 788/788/757 +f 699/699/758 698/698/758 761/761/758 762/762/758 +f 673/673/759 672/672/759 735/735/759 736/736/759 +f 726/726/760 725/725/760 788/788/760 789/789/760 +f 700/700/761 699/699/761 762/762/761 763/763/761 +f 674/674/762 673/673/762 736/736/762 737/737/762 +f 727/727/763 726/726/763 789/789/763 790/790/763 +f 701/701/764 700/700/764 763/763/764 764/764/764 +f 675/675/765 674/674/765 737/737/765 738/738/765 +f 728/728/766 727/727/766 790/790/766 791/791/766 +f 702/702/767 701/701/767 764/764/767 765/765/767 +f 676/676/768 675/675/768 738/738/768 739/739/768 +f 768/768/769 767/767/769 830/830/769 831/831/769 +f 742/742/770 741/741/770 804/804/770 805/805/770 +f 769/769/771 768/768/771 831/831/771 832/832/771 +f 743/743/772 742/742/772 805/805/772 806/806/772 +f 770/770/773 769/769/773 832/832/773 833/833/773 +f 744/744/774 743/743/774 806/806/774 807/807/774 +f 771/771/775 770/770/775 833/833/775 834/834/775 +f 745/745/776 744/744/776 807/807/776 808/808/776 +f 772/772/777 771/771/777 834/834/777 835/835/777 +f 746/746/778 745/745/778 808/808/778 809/809/778 +f 773/773/779 772/772/779 835/835/779 836/836/779 +f 747/747/780 746/746/780 809/809/780 810/810/780 +f 774/774/781 773/773/781 836/836/781 837/837/781 +f 748/748/782 747/747/782 810/810/782 811/811/782 +f 775/775/783 774/774/783 837/837/783 838/838/783 +f 749/749/784 748/748/784 811/811/784 812/812/784 +f 776/776/785 775/775/785 838/838/785 839/839/785 +f 750/750/786 749/749/786 812/812/786 813/813/786 +f 777/777/787 776/776/787 839/839/787 840/840/787 +f 751/751/788 750/750/788 813/813/788 814/814/788 +f 778/778/789 777/777/789 840/840/789 841/841/789 +f 752/752/790 751/751/790 814/814/790 815/815/790 +f 779/779/791 778/778/791 841/841/791 842/842/791 +f 753/753/792 752/752/792 815/815/792 816/816/792 +f 780/780/793 779/779/793 842/842/793 843/843/793 +f 754/754/794 753/753/794 816/816/794 817/817/794 +f 781/781/795 780/780/795 843/843/795 844/844/795 +f 755/755/796 754/754/796 817/817/796 818/818/796 +f 782/782/797 781/781/797 844/844/797 845/845/797 +f 756/756/798 755/755/798 818/818/798 819/819/798 +f 730/730/799 1990/2002/799 793/793/799 +f 783/783/800 782/782/800 845/845/800 846/846/800 +f 757/757/801 756/756/801 819/819/801 820/820/801 +f 731/731/802 730/730/802 793/793/802 794/794/802 +f 784/784/803 783/783/803 846/846/803 847/847/803 +f 758/758/804 757/757/804 820/820/804 821/821/804 +f 732/732/805 731/731/805 794/794/805 795/795/805 +f 785/785/806 784/784/806 847/847/806 848/848/806 +f 759/759/807 758/758/807 821/821/807 822/822/807 +f 733/733/808 732/732/808 795/795/808 796/796/808 +f 786/786/809 785/785/809 848/848/809 849/849/809 +f 760/760/810 759/759/810 822/822/810 823/823/810 +f 734/734/811 733/733/811 796/796/811 797/797/811 +f 787/787/812 786/786/812 849/849/812 850/850/812 +f 761/761/813 760/760/813 823/823/813 824/824/813 +f 735/735/814 734/734/814 797/797/814 798/798/814 +f 788/788/815 787/787/815 850/850/815 851/851/815 +f 762/762/816 761/761/816 824/824/816 825/825/816 +f 736/736/817 735/735/817 798/798/817 799/799/817 +f 789/789/818 788/788/818 851/851/818 852/852/818 +f 763/763/819 762/762/819 825/825/819 826/826/819 +f 737/737/820 736/736/820 799/799/820 800/800/820 +f 790/790/821 789/789/821 852/852/821 853/853/821 +f 764/764/822 763/763/822 826/826/822 827/827/822 +f 738/738/823 737/737/823 800/800/823 801/801/823 +f 791/791/824 790/790/824 853/853/824 854/854/824 +f 765/765/825 764/764/825 827/827/825 828/828/825 +f 739/739/826 738/738/826 801/801/826 802/802/826 +f 792/792/827 791/791/827 854/854/827 855/855/827 +f 766/766/828 765/765/828 828/828/828 829/829/828 +f 740/740/829 739/739/829 802/802/829 803/803/829 +f 3818/3956/830 792/792/830 855/855/830 +f 767/767/831 766/766/831 829/829/831 830/830/831 +f 741/741/832 740/740/832 803/803/832 804/804/832 +f 855/855/833 854/854/833 917/917/833 918/918/833 +f 829/829/834 828/828/834 891/891/834 892/892/834 +f 807/807/835 806/806/835 869/869/835 870/870/835 +f 3818/3957/836 855/855/836 918/918/836 +f 830/830/837 829/829/837 892/892/837 893/893/837 +f 808/808/838 807/807/838 870/870/838 871/871/838 +f 831/831/839 830/830/839 893/893/839 894/894/839 +f 809/809/840 808/808/840 871/871/840 872/872/840 +f 832/832/841 831/831/841 894/894/841 895/895/841 +f 810/810/842 809/809/842 872/872/842 873/873/842 +f 833/833/843 832/832/843 895/895/843 896/896/843 +f 811/811/844 810/810/844 873/873/844 874/874/844 +f 834/834/845 833/833/845 896/896/845 897/897/845 +f 812/812/846 811/811/846 874/874/846 875/875/846 +f 835/835/847 834/834/847 897/897/847 898/898/847 +f 813/813/848 812/812/848 875/875/848 876/876/848 +f 836/836/849 835/835/849 898/898/849 899/899/849 +f 814/814/850 813/813/850 876/876/850 877/877/850 +f 837/837/851 836/836/851 899/899/851 900/900/851 +f 815/815/852 814/814/852 877/877/852 878/878/852 +f 838/838/853 837/837/853 900/900/853 901/901/853 +f 816/816/854 815/815/854 878/878/854 879/879/854 +f 839/839/855 838/838/855 901/901/855 902/902/855 +f 817/817/856 816/816/856 879/879/856 880/880/856 +f 840/840/857 839/839/857 902/902/857 903/903/857 +f 818/818/858 817/817/858 880/880/858 881/881/858 +f 841/841/859 840/840/859 903/903/859 904/904/859 +f 793/793/860 1990/2003/860 856/856/860 +f 842/842/861 841/841/861 904/904/861 905/905/861 +f 794/794/862 793/793/862 856/856/862 857/857/862 +f 843/843/863 842/842/863 905/905/863 906/906/863 +f 795/795/864 794/794/864 857/857/864 858/858/864 +f 844/844/865 843/843/865 906/906/865 907/907/865 +f 796/796/866 795/795/866 858/858/866 859/859/866 +f 845/845/867 844/844/867 907/907/867 908/908/867 +f 819/819/868 818/818/868 881/881/868 882/882/868 +f 797/797/869 796/796/869 859/859/869 860/860/869 +f 846/846/870 845/845/870 908/908/870 909/909/870 +f 820/820/871 819/819/871 882/882/871 883/883/871 +f 798/798/872 797/797/872 860/860/872 861/861/872 +f 847/847/873 846/846/873 909/909/873 910/910/873 +f 821/821/874 820/820/874 883/883/874 884/884/874 +f 799/799/875 798/798/875 861/861/875 862/862/875 +f 848/848/876 847/847/876 910/910/876 911/911/876 +f 822/822/877 821/821/877 884/884/877 885/885/877 +f 800/800/878 799/799/878 862/862/878 863/863/878 +f 849/849/879 848/848/879 911/911/879 912/912/879 +f 823/823/880 822/822/880 885/885/880 886/886/880 +f 801/801/881 800/800/881 863/863/881 864/864/881 +f 850/850/882 849/849/882 912/912/882 913/913/882 +f 824/824/883 823/823/883 886/886/883 887/887/883 +f 802/802/884 801/801/884 864/864/884 865/865/884 +f 851/851/885 850/850/885 913/913/885 914/914/885 +f 825/825/886 824/824/886 887/887/886 888/888/886 +f 803/803/887 802/802/887 865/865/887 866/866/887 +f 852/852/888 851/851/888 914/914/888 915/915/888 +f 826/826/889 825/825/889 888/888/889 889/889/889 +f 804/804/890 803/803/890 866/866/890 867/867/890 +f 853/853/891 852/852/891 915/915/891 916/916/891 +f 827/827/892 826/826/892 889/889/892 890/890/892 +f 805/805/893 804/804/893 867/867/893 868/868/893 +f 854/854/894 853/853/894 916/916/894 917/917/894 +f 828/828/895 827/827/895 890/890/895 891/891/895 +f 806/806/896 805/805/896 868/868/896 869/869/896 +f 894/894/897 893/893/897 956/956/897 957/957/897 +f 868/868/898 867/867/898 930/930/898 931/931/898 +f 895/895/899 894/894/899 957/957/899 958/958/899 +f 869/869/900 868/868/900 931/931/900 932/932/900 +f 896/896/901 895/895/901 958/958/901 959/959/901 +f 870/870/902 869/869/902 932/932/902 933/933/902 +f 897/897/903 896/896/903 959/959/903 960/960/903 +f 871/871/904 870/870/904 933/933/904 934/934/904 +f 898/898/905 897/897/905 960/960/905 961/961/905 +f 872/872/906 871/871/906 934/934/906 935/935/906 +f 899/899/907 898/898/907 961/961/907 962/962/907 +f 873/873/908 872/872/908 935/935/908 936/936/908 +f 900/900/909 899/899/909 962/962/909 963/963/909 +f 874/874/910 873/873/910 936/936/910 937/937/910 +f 901/901/911 900/900/911 963/963/911 964/964/911 +f 875/875/912 874/874/912 937/937/912 938/938/912 +f 902/902/913 901/901/913 964/964/913 965/965/913 +f 876/876/914 875/875/914 938/938/914 939/939/914 +f 903/903/915 902/902/915 965/965/915 966/966/915 +f 877/877/916 876/876/916 939/939/916 940/940/916 +f 904/904/917 903/903/917 966/966/917 967/967/917 +f 878/878/918 877/877/918 940/940/918 941/941/918 +f 905/905/919 904/904/919 967/967/919 968/968/919 +f 879/879/920 878/878/920 941/941/920 942/942/920 +f 906/906/921 905/905/921 968/968/921 969/969/921 +f 880/880/922 879/879/922 942/942/922 943/943/922 +f 907/907/923 906/906/923 969/969/923 970/970/923 +f 881/881/924 880/880/924 943/943/924 944/944/924 +f 908/908/925 907/907/925 970/970/925 971/971/925 +f 882/882/926 881/881/926 944/944/926 945/945/926 +f 856/856/927 1990/2004/927 919/919/927 +f 909/909/928 908/908/928 971/971/928 972/972/928 +f 883/883/929 882/882/929 945/945/929 946/946/929 +f 857/857/930 856/856/930 919/919/930 920/920/930 +f 910/910/931 909/909/931 972/972/931 973/973/931 +f 884/884/932 883/883/932 946/946/932 947/947/932 +f 858/858/933 857/857/933 920/920/933 921/921/933 +f 911/911/934 910/910/934 973/973/934 974/974/934 +f 885/885/935 884/884/935 947/947/935 948/948/935 +f 859/859/936 858/858/936 921/921/936 922/922/936 +f 912/912/937 911/911/937 974/974/937 975/975/937 +f 886/886/938 885/885/938 948/948/938 949/949/938 +f 860/860/939 859/859/939 922/922/939 923/923/939 +f 913/913/940 912/912/940 975/975/940 976/976/940 +f 887/887/941 886/886/941 949/949/941 950/950/941 +f 861/861/942 860/860/942 923/923/942 924/924/942 +f 914/914/943 913/913/943 976/976/943 977/977/943 +f 888/888/944 887/887/944 950/950/944 951/951/944 +f 862/862/945 861/861/945 924/924/945 925/925/945 +f 915/915/946 914/914/946 977/977/946 978/978/946 +f 889/889/947 888/888/947 951/951/947 952/952/947 +f 863/863/948 862/862/948 925/925/948 926/926/948 +f 916/916/949 915/915/949 978/978/949 979/979/949 +f 890/890/950 889/889/950 952/952/950 953/953/950 +f 864/864/951 863/863/951 926/926/951 927/927/951 +f 917/917/952 916/916/952 979/979/952 980/980/952 +f 891/891/953 890/890/953 953/953/953 954/954/953 +f 865/865/954 864/864/954 927/927/954 928/928/954 +f 918/918/955 917/917/955 980/980/955 981/981/955 +f 892/892/956 891/891/956 954/954/956 955/955/956 +f 866/866/957 865/865/957 928/928/957 929/929/957 +f 3818/3958/958 918/918/958 981/981/958 +f 893/893/959 892/892/959 955/955/959 956/956/959 +f 867/867/960 866/866/960 929/929/960 930/930/960 +f 959/959/961 958/958/961 1021/1021/961 1022/1022/961 +f 933/933/962 932/932/962 995/995/962 996/996/962 +f 960/960/963 959/959/963 1022/1022/963 1023/1023/963 +f 934/934/964 933/933/964 996/996/964 997/997/964 +f 961/961/965 960/960/965 1023/1023/965 1024/1024/965 +f 935/935/966 934/934/966 997/997/966 998/998/966 +f 962/962/967 961/961/967 1024/1024/967 1025/1025/967 +f 936/936/968 935/935/968 998/998/968 999/999/968 +f 963/963/969 962/962/969 1025/1025/969 1026/1026/969 +f 937/937/970 936/936/970 999/999/970 1000/1000/970 +f 964/964/971 963/963/971 1026/1026/971 1027/1027/971 +f 938/938/972 937/937/972 1000/1000/972 1001/1001/972 +f 965/965/973 964/964/973 1027/1027/973 1028/1028/973 +f 939/939/974 938/938/974 1001/1001/974 1002/1002/974 +f 966/966/975 965/965/975 1028/1028/975 1029/1029/975 +f 940/940/976 939/939/976 1002/1002/976 1003/1003/976 +f 967/967/977 966/966/977 1029/1029/977 1030/1030/977 +f 941/941/978 940/940/978 1003/1003/978 1004/1004/978 +f 968/968/979 967/967/979 1030/1030/979 1031/1031/979 +f 942/942/980 941/941/980 1004/1004/980 1005/1005/980 +f 969/969/981 968/968/981 1031/1031/981 1032/1032/981 +f 943/943/982 942/942/982 1005/1005/982 1006/1006/982 +f 970/970/983 969/969/983 1032/1032/983 1033/1033/983 +f 944/944/984 943/943/984 1006/1006/984 1007/1007/984 +f 971/971/985 970/970/985 1033/1033/985 1034/1034/985 +f 945/945/986 944/944/986 1007/1007/986 1008/1008/986 +f 919/919/987 1990/2005/987 982/982/987 +f 972/972/988 971/971/988 1034/1034/988 1035/1035/988 +f 946/946/989 945/945/989 1008/1008/989 1009/1009/989 +f 920/920/990 919/919/990 982/982/990 983/983/990 +f 973/973/991 972/972/991 1035/1035/991 1036/1036/991 +f 947/947/992 946/946/992 1009/1009/992 1010/1010/992 +f 921/921/993 920/920/993 983/983/993 984/984/993 +f 974/974/994 973/973/994 1036/1036/994 1037/1037/994 +f 948/948/995 947/947/995 1010/1010/995 1011/1011/995 +f 922/922/996 921/921/996 984/984/996 985/985/996 +f 975/975/997 974/974/997 1037/1037/997 1038/1038/997 +f 949/949/998 948/948/998 1011/1011/998 1012/1012/998 +f 923/923/999 922/922/999 985/985/999 986/986/999 +f 976/976/1000 975/975/1000 1038/1038/1000 1039/1039/1000 +f 950/950/1001 949/949/1001 1012/1012/1001 1013/1013/1001 +f 924/924/1002 923/923/1002 986/986/1002 987/987/1002 +f 977/977/1003 976/976/1003 1039/1039/1003 1040/1040/1003 +f 951/951/1004 950/950/1004 1013/1013/1004 1014/1014/1004 +f 925/925/1005 924/924/1005 987/987/1005 988/988/1005 +f 978/978/1006 977/977/1006 1040/1040/1006 1041/1041/1006 +f 952/952/1007 951/951/1007 1014/1014/1007 1015/1015/1007 +f 926/926/1008 925/925/1008 988/988/1008 989/989/1008 +f 979/979/1009 978/978/1009 1041/1041/1009 1042/1042/1009 +f 953/953/1010 952/952/1010 1015/1015/1010 1016/1016/1010 +f 927/927/1011 926/926/1011 989/989/1011 990/990/1011 +f 980/980/1012 979/979/1012 1042/1042/1012 1043/1043/1012 +f 954/954/1013 953/953/1013 1016/1016/1013 1017/1017/1013 +f 928/928/1014 927/927/1014 990/990/1014 991/991/1014 +f 981/981/1015 980/980/1015 1043/1043/1015 1044/1044/1015 +f 955/955/1016 954/954/1016 1017/1017/1016 1018/1018/1016 +f 929/929/1017 928/928/1017 991/991/1017 992/992/1017 +f 3818/3959/1018 981/981/1018 1044/1044/1018 +f 956/956/1019 955/955/1019 1018/1018/1019 1019/1019/1019 +f 930/930/1020 929/929/1020 992/992/1020 993/993/1020 +f 957/957/1021 956/956/1021 1019/1019/1021 1020/1020/1021 +f 931/931/1022 930/930/1022 993/993/1022 994/994/1022 +f 958/958/1023 957/957/1023 1020/1020/1023 1021/1021/1023 +f 932/932/1024 931/931/1024 994/994/1024 995/995/1024 +f 1024/1024/1025 1023/1023/1025 1086/1086/1025 1087/1087/1025 +f 998/998/1026 997/997/1026 1060/1060/1026 1061/1061/1026 +f 1025/1025/1027 1024/1024/1027 1087/1087/1027 1088/1088/1027 +f 999/999/1028 998/998/1028 1061/1061/1028 1062/1062/1028 +f 1026/1026/1029 1025/1025/1029 1088/1088/1029 1089/1089/1029 +f 1000/1000/1030 999/999/1030 1062/1062/1030 1063/1063/1030 +f 1027/1027/1031 1026/1026/1031 1089/1089/1031 1090/1090/1031 +f 1001/1001/1032 1000/1000/1032 1063/1063/1032 1064/1064/1032 +f 1028/1028/1033 1027/1027/1033 1090/1090/1033 1091/1091/1033 +f 1002/1002/1034 1001/1001/1034 1064/1064/1034 1065/1065/1034 +f 1029/1029/1035 1028/1028/1035 1091/1091/1035 1092/1092/1035 +f 1003/1003/1036 1002/1002/1036 1065/1065/1036 1066/1066/1036 +f 1030/1030/1037 1029/1029/1037 1092/1092/1037 1093/1093/1037 +f 1004/1004/1038 1003/1003/1038 1066/1066/1038 1067/1067/1038 +f 1031/1031/1039 1030/1030/1039 1093/1093/1039 1094/1094/1039 +f 1005/1005/1040 1004/1004/1040 1067/1067/1040 1068/1068/1040 +f 1032/1032/1041 1031/1031/1041 1094/1094/1041 1095/1095/1041 +f 1006/1006/1042 1005/1005/1042 1068/1068/1042 1069/1069/1042 +f 1033/1033/1043 1032/1032/1043 1095/1095/1043 1096/1096/1043 +f 1007/1007/1044 1006/1006/1044 1069/1069/1044 1070/1070/1044 +f 1034/1034/1045 1033/1033/1045 1096/1096/1045 1097/1097/1045 +f 1008/1008/1046 1007/1007/1046 1070/1070/1046 1071/1071/1046 +f 982/982/1047 1990/2006/1047 1045/1045/1047 +f 1035/1035/1048 1034/1034/1048 1097/1097/1048 1098/1098/1048 +f 1009/1009/1049 1008/1008/1049 1071/1071/1049 1072/1072/1049 +f 983/983/1050 982/982/1050 1045/1045/1050 1046/1046/1050 +f 1036/1036/1051 1035/1035/1051 1098/1098/1051 1099/1099/1051 +f 1010/1010/1052 1009/1009/1052 1072/1072/1052 1073/1073/1052 +f 984/984/1053 983/983/1053 1046/1046/1053 1047/1047/1053 +f 1037/1037/1054 1036/1036/1054 1099/1099/1054 1100/1100/1054 +f 1011/1011/1055 1010/1010/1055 1073/1073/1055 1074/1074/1055 +f 985/985/1056 984/984/1056 1047/1047/1056 1048/1048/1056 +f 1038/1038/1057 1037/1037/1057 1100/1100/1057 1101/1101/1057 +f 1012/1012/1058 1011/1011/1058 1074/1074/1058 1075/1075/1058 +f 986/986/1059 985/985/1059 1048/1048/1059 1049/1049/1059 +f 1039/1039/1060 1038/1038/1060 1101/1101/1060 1102/1102/1060 +f 1013/1013/1061 1012/1012/1061 1075/1075/1061 1076/1076/1061 +f 987/987/1062 986/986/1062 1049/1049/1062 1050/1050/1062 +f 1040/1040/1063 1039/1039/1063 1102/1102/1063 1103/1103/1063 +f 1014/1014/1064 1013/1013/1064 1076/1076/1064 1077/1077/1064 +f 988/988/1065 987/987/1065 1050/1050/1065 1051/1051/1065 +f 1041/1041/1066 1040/1040/1066 1103/1103/1066 1104/1104/1066 +f 1015/1015/1067 1014/1014/1067 1077/1077/1067 1078/1078/1067 +f 989/989/1068 988/988/1068 1051/1051/1068 1052/1052/1068 +f 1042/1042/1069 1041/1041/1069 1104/1104/1069 1105/1105/1069 +f 1016/1016/1070 1015/1015/1070 1078/1078/1070 1079/1079/1070 +f 990/990/1071 989/989/1071 1052/1052/1071 1053/1053/1071 +f 1043/1043/1072 1042/1042/1072 1105/1105/1072 1106/1106/1072 +f 1017/1017/1073 1016/1016/1073 1079/1079/1073 1080/1080/1073 +f 991/991/1074 990/990/1074 1053/1053/1074 1054/1054/1074 +f 1044/1044/1075 1043/1043/1075 1106/1106/1075 1107/1107/1075 +f 1018/1018/1076 1017/1017/1076 1080/1080/1076 1081/1081/1076 +f 992/992/1077 991/991/1077 1054/1054/1077 1055/1055/1077 +f 3818/3960/1078 1044/1044/1078 1107/1107/1078 +f 1019/1019/1079 1018/1018/1079 1081/1081/1079 1082/1082/1079 +f 993/993/1080 992/992/1080 1055/1055/1080 1056/1056/1080 +f 1020/1020/1081 1019/1019/1081 1082/1082/1081 1083/1083/1081 +f 994/994/1082 993/993/1082 1056/1056/1082 1057/1057/1082 +f 1021/1021/1083 1020/1020/1083 1083/1083/1083 1084/1084/1083 +f 995/995/1084 994/994/1084 1057/1057/1084 1058/1058/1084 +f 1022/1022/1085 1021/1021/1085 1084/1084/1085 1085/1085/1085 +f 996/996/1086 995/995/1086 1058/1058/1086 1059/1059/1086 +f 1023/1023/1087 1022/1022/1087 1085/1085/1087 1086/1086/1087 +f 997/997/1088 996/996/1088 1059/1059/1088 1060/1060/1088 +f 1089/1089/1089 1088/1088/1089 1151/1151/1089 1152/1152/1089 +f 1063/1063/1090 1062/1062/1090 1125/1125/1090 1126/1126/1090 +f 1090/1090/1091 1089/1089/1091 1152/1152/1091 1153/1153/1091 +f 1064/1064/1092 1063/1063/1092 1126/1126/1092 1127/1127/1092 +f 1091/1091/1093 1090/1090/1093 1153/1153/1093 1154/1154/1093 +f 1065/1065/1094 1064/1064/1094 1127/1127/1094 1128/1128/1094 +f 1092/1092/1095 1091/1091/1095 1154/1154/1095 1155/1155/1095 +f 1066/1066/1096 1065/1065/1096 1128/1128/1096 1129/1129/1096 +f 1093/1093/1097 1092/1092/1097 1155/1155/1097 1156/1156/1097 +f 1067/1067/1098 1066/1066/1098 1129/1129/1098 1130/1130/1098 +f 1094/1094/1099 1093/1093/1099 1156/1156/1099 1157/1157/1099 +f 1068/1068/1100 1067/1067/1100 1130/1130/1100 1131/1131/1100 +f 1095/1095/1101 1094/1094/1101 1157/1157/1101 1158/1158/1101 +f 1069/1069/1102 1068/1068/1102 1131/1131/1102 1132/1132/1102 +f 1096/1096/1103 1095/1095/1103 1158/1158/1103 1159/1159/1103 +f 1070/1070/1104 1069/1069/1104 1132/1132/1104 1133/1133/1104 +f 1097/1097/1105 1096/1096/1105 1159/1159/1105 1160/1160/1105 +f 1071/1071/1106 1070/1070/1106 1133/1133/1106 1134/1134/1106 +f 1045/1045/1107 1990/2007/1107 1108/1108/1107 +f 1098/1098/1108 1097/1097/1108 1160/1160/1108 1161/1161/1108 +f 1072/1072/1109 1071/1071/1109 1134/1134/1109 1135/1135/1109 +f 1046/1046/1110 1045/1045/1110 1108/1108/1110 1109/1109/1110 +f 1099/1099/1111 1098/1098/1111 1161/1161/1111 1162/1162/1111 +f 1073/1073/1112 1072/1072/1112 1135/1135/1112 1136/1136/1112 +f 1047/1047/1113 1046/1046/1113 1109/1109/1113 1110/1110/1113 +f 1100/1100/1114 1099/1099/1114 1162/1162/1114 1163/1163/1114 +f 1074/1074/1115 1073/1073/1115 1136/1136/1115 1137/1137/1115 +f 1048/1048/1116 1047/1047/1116 1110/1110/1116 1111/1111/1116 +f 1101/1101/1117 1100/1100/1117 1163/1163/1117 1164/1164/1117 +f 1075/1075/1118 1074/1074/1118 1137/1137/1118 1138/1138/1118 +f 1049/1049/1119 1048/1048/1119 1111/1111/1119 1112/1112/1119 +f 1102/1102/1120 1101/1101/1120 1164/1164/1120 1165/1165/1120 +f 1076/1076/1121 1075/1075/1121 1138/1138/1121 1139/1139/1121 +f 1050/1050/1122 1049/1049/1122 1112/1112/1122 1113/1113/1122 +f 1103/1103/1123 1102/1102/1123 1165/1165/1123 1166/1166/1123 +f 1077/1077/1124 1076/1076/1124 1139/1139/1124 1140/1140/1124 +f 1051/1051/1125 1050/1050/1125 1113/1113/1125 1114/1114/1125 +f 1104/1104/1126 1103/1103/1126 1166/1166/1126 1167/1167/1126 +f 1078/1078/1127 1077/1077/1127 1140/1140/1127 1141/1141/1127 +f 1052/1052/1128 1051/1051/1128 1114/1114/1128 1115/1115/1128 +f 1105/1105/1129 1104/1104/1129 1167/1167/1129 1168/1168/1129 +f 1079/1079/1130 1078/1078/1130 1141/1141/1130 1142/1142/1130 +f 1053/1053/1131 1052/1052/1131 1115/1115/1131 1116/1116/1131 +f 1106/1106/1132 1105/1105/1132 1168/1168/1132 1169/1169/1132 +f 1080/1080/1133 1079/1079/1133 1142/1142/1133 1143/1143/1133 +f 1054/1054/1134 1053/1053/1134 1116/1116/1134 1117/1117/1134 +f 1107/1107/1135 1106/1106/1135 1169/1169/1135 1170/1170/1135 +f 1081/1081/1136 1080/1080/1136 1143/1143/1136 1144/1144/1136 +f 1055/1055/1137 1054/1054/1137 1117/1117/1137 1118/1118/1137 +f 3818/3961/1138 1107/1107/1138 1170/1170/1138 +f 1082/1082/1139 1081/1081/1139 1144/1144/1139 1145/1145/1139 +f 1056/1056/1140 1055/1055/1140 1118/1118/1140 1119/1119/1140 +f 1083/1083/1141 1082/1082/1141 1145/1145/1141 1146/1146/1141 +f 1057/1057/1142 1056/1056/1142 1119/1119/1142 1120/1120/1142 +f 1084/1084/1143 1083/1083/1143 1146/1146/1143 1147/1147/1143 +f 1058/1058/1144 1057/1057/1144 1120/1120/1144 1121/1121/1144 +f 1085/1085/1145 1084/1084/1145 1147/1147/1145 1148/1148/1145 +f 1059/1059/1146 1058/1058/1146 1121/1121/1146 1122/1122/1146 +f 1086/1086/1147 1085/1085/1147 1148/1148/1147 1149/1149/1147 +f 1060/1060/1148 1059/1059/1148 1122/1122/1148 1123/1123/1148 +f 1087/1087/1149 1086/1086/1149 1149/1149/1149 1150/1150/1149 +f 1061/1061/1150 1060/1060/1150 1123/1123/1150 1124/1124/1150 +f 1088/1088/1151 1087/1087/1151 1150/1150/1151 1151/1151/1151 +f 1062/1062/1152 1061/1061/1152 1124/1124/1152 1125/1125/1152 +f 1154/1154/1153 1153/1153/1153 1216/1216/1153 1217/1217/1153 +f 1128/1128/1154 1127/1127/1154 1190/1190/1154 1191/1191/1154 +f 1155/1155/1155 1154/1154/1155 1217/1217/1155 1218/1218/1155 +f 1129/1129/1156 1128/1128/1156 1191/1191/1156 1192/1192/1156 +f 1156/1156/1157 1155/1155/1157 1218/1218/1157 1219/1219/1157 +f 1130/1130/1158 1129/1129/1158 1192/1192/1158 1193/1193/1158 +f 1157/1157/1159 1156/1156/1159 1219/1219/1159 1220/1220/1159 +f 1131/1131/1160 1130/1130/1160 1193/1193/1160 1194/1194/1160 +f 1158/1158/1161 1157/1157/1161 1220/1220/1161 1221/1221/1161 +f 1132/1132/1162 1131/1131/1162 1194/1194/1162 1195/1195/1162 +f 1159/1159/1163 1158/1158/1163 1221/1221/1163 1222/1222/1163 +f 1133/1133/1164 1132/1132/1164 1195/1195/1164 1196/1196/1164 +f 1160/1160/1165 1159/1159/1165 1222/1222/1165 1223/1223/1165 +f 1134/1134/1166 1133/1133/1166 1196/1196/1166 1197/1197/1166 +f 1108/1108/1167 1990/2008/1167 1171/1171/1167 +f 1161/1161/1168 1160/1160/1168 1223/1223/1168 1224/1224/1168 +f 1135/1135/1169 1134/1134/1169 1197/1197/1169 1198/1198/1169 +f 1109/1109/1170 1108/1108/1170 1171/1171/1170 1172/1172/1170 +f 1162/1162/1171 1161/1161/1171 1224/1224/1171 1225/1225/1171 +f 1136/1136/1172 1135/1135/1172 1198/1198/1172 1199/1199/1172 +f 1110/1110/1173 1109/1109/1173 1172/1172/1173 1173/1173/1173 +f 1163/1163/1174 1162/1162/1174 1225/1225/1174 1226/1226/1174 +f 1137/1137/1175 1136/1136/1175 1199/1199/1175 1200/1200/1175 +f 1111/1111/1176 1110/1110/1176 1173/1173/1176 1174/1174/1176 +f 1164/1164/1177 1163/1163/1177 1226/1226/1177 1227/1227/1177 +f 1138/1138/1178 1137/1137/1178 1200/1200/1178 1201/1201/1178 +f 1112/1112/1179 1111/1111/1179 1174/1174/1179 1175/1175/1179 +f 1165/1165/1180 1164/1164/1180 1227/1227/1180 1228/1228/1180 +f 1139/1139/1181 1138/1138/1181 1201/1201/1181 1202/1202/1181 +f 1113/1113/1182 1112/1112/1182 1175/1175/1182 1176/1176/1182 +f 1166/1166/1183 1165/1165/1183 1228/1228/1183 1229/1229/1183 +f 1140/1140/1184 1139/1139/1184 1202/1202/1184 1203/1203/1184 +f 1114/1114/1185 1113/1113/1185 1176/1176/1185 1177/1177/1185 +f 1167/1167/1186 1166/1166/1186 1229/1229/1186 1230/1230/1186 +f 1141/1141/1187 1140/1140/1187 1203/1203/1187 1204/1204/1187 +f 1115/1115/1188 1114/1114/1188 1177/1177/1188 1178/1178/1188 +f 1168/1168/1189 1167/1167/1189 1230/1230/1189 1231/1231/1189 +f 1142/1142/1190 1141/1141/1190 1204/1204/1190 1205/1205/1190 +f 1116/1116/1191 1115/1115/1191 1178/1178/1191 1179/1179/1191 +f 1169/1169/1192 1168/1168/1192 1231/1231/1192 1232/1232/1192 +f 1143/1143/1193 1142/1142/1193 1205/1205/1193 1206/1206/1193 +f 1117/1117/1194 1116/1116/1194 1179/1179/1194 1180/1180/1194 +f 1170/1170/1195 1169/1169/1195 1232/1232/1195 1233/1233/1195 +f 1144/1144/1196 1143/1143/1196 1206/1206/1196 1207/1207/1196 +f 1118/1118/1197 1117/1117/1197 1180/1180/1197 1181/1181/1197 +f 3818/3962/1198 1170/1170/1198 1233/1233/1198 +f 1145/1145/1199 1144/1144/1199 1207/1207/1199 1208/1208/1199 +f 1119/1119/1200 1118/1118/1200 1181/1181/1200 1182/1182/1200 +f 1146/1146/1201 1145/1145/1201 1208/1208/1201 1209/1209/1201 +f 1120/1120/1202 1119/1119/1202 1182/1182/1202 1183/1183/1202 +f 1147/1147/1203 1146/1146/1203 1209/1209/1203 1210/1210/1203 +f 1121/1121/1204 1120/1120/1204 1183/1183/1204 1184/1184/1204 +f 1148/1148/1205 1147/1147/1205 1210/1210/1205 1211/1211/1205 +f 1122/1122/1206 1121/1121/1206 1184/1184/1206 1185/1185/1206 +f 1149/1149/1207 1148/1148/1207 1211/1211/1207 1212/1212/1207 +f 1123/1123/1208 1122/1122/1208 1185/1185/1208 1186/1186/1208 +f 1150/1150/1209 1149/1149/1209 1212/1212/1209 1213/1213/1209 +f 1124/1124/1210 1123/1123/1210 1186/1186/1210 1187/1187/1210 +f 1151/1151/1211 1150/1150/1211 1213/1213/1211 1214/1214/1211 +f 1125/1125/1212 1124/1124/1212 1187/1187/1212 1188/1188/1212 +f 1152/1152/1213 1151/1151/1213 1214/1214/1213 1215/1215/1213 +f 1126/1126/1214 1125/1125/1214 1188/1188/1214 1189/1189/1214 +f 1153/1153/1215 1152/1152/1215 1215/1215/1215 1216/1216/1215 +f 1127/1127/1216 1126/1126/1216 1189/1189/1216 1190/1190/1216 +f 1219/1219/1217 1218/1218/1217 1281/1281/1217 1282/1282/1217 +f 1193/1193/1218 1192/1192/1218 1255/1255/1218 1256/1256/1218 +f 1220/1220/1219 1219/1219/1219 1282/1282/1219 1283/1283/1219 +f 1194/1194/1220 1193/1193/1220 1256/1256/1220 1257/1257/1220 +f 1221/1221/1221 1220/1220/1221 1283/1283/1221 1284/1284/1221 +f 1195/1195/1222 1194/1194/1222 1257/1257/1222 1258/1258/1222 +f 1222/1222/1223 1221/1221/1223 1284/1284/1223 1285/1285/1223 +f 1196/1196/1224 1195/1195/1224 1258/1258/1224 1259/1259/1224 +f 1223/1223/1225 1222/1222/1225 1285/1285/1225 1286/1286/1225 +f 1197/1197/1226 1196/1196/1226 1259/1259/1226 1260/1260/1226 +f 1171/1171/1227 1990/2009/1227 1234/1234/1227 +f 1224/1224/1228 1223/1223/1228 1286/1286/1228 1287/1287/1228 +f 1198/1198/1229 1197/1197/1229 1260/1260/1229 1261/1261/1229 +f 1172/1172/1230 1171/1171/1230 1234/1234/1230 1235/1235/1230 +f 1225/1225/1231 1224/1224/1231 1287/1287/1231 1288/1288/1231 +f 1199/1199/1232 1198/1198/1232 1261/1261/1232 1262/1262/1232 +f 1173/1173/1233 1172/1172/1233 1235/1235/1233 1236/1236/1233 +f 1226/1226/1234 1225/1225/1234 1288/1288/1234 1289/1289/1234 +f 1200/1200/1235 1199/1199/1235 1262/1262/1235 1263/1263/1235 +f 1174/1174/1236 1173/1173/1236 1236/1236/1236 1237/1237/1236 +f 1227/1227/1237 1226/1226/1237 1289/1289/1237 1290/1290/1237 +f 1201/1201/1238 1200/1200/1238 1263/1263/1238 1264/1264/1238 +f 1175/1175/1239 1174/1174/1239 1237/1237/1239 1238/1238/1239 +f 1228/1228/1240 1227/1227/1240 1290/1290/1240 1291/1291/1240 +f 1202/1202/1241 1201/1201/1241 1264/1264/1241 1265/1265/1241 +f 1176/1176/1242 1175/1175/1242 1238/1238/1242 1239/1239/1242 +f 1229/1229/1243 1228/1228/1243 1291/1291/1243 1292/1292/1243 +f 1203/1203/1244 1202/1202/1244 1265/1265/1244 1266/1266/1244 +f 1177/1177/1245 1176/1176/1245 1239/1239/1245 1240/1240/1245 +f 1230/1230/1246 1229/1229/1246 1292/1292/1246 1293/1293/1246 +f 1204/1204/1247 1203/1203/1247 1266/1266/1247 1267/1267/1247 +f 1178/1178/1248 1177/1177/1248 1240/1240/1248 1241/1241/1248 +f 1231/1231/1249 1230/1230/1249 1293/1293/1249 1294/1294/1249 +f 1205/1205/1250 1204/1204/1250 1267/1267/1250 1268/1268/1250 +f 1179/1179/1251 1178/1178/1251 1241/1241/1251 1242/1242/1251 +f 1232/1232/1252 1231/1231/1252 1294/1294/1252 1295/1295/1252 +f 1206/1206/1253 1205/1205/1253 1268/1268/1253 1269/1269/1253 +f 1180/1180/1254 1179/1179/1254 1242/1242/1254 1243/1243/1254 +f 1233/1233/1255 1232/1232/1255 1295/1295/1255 1296/1296/1255 +f 1207/1207/1256 1206/1206/1256 1269/1269/1256 1270/1270/1256 +f 1181/1181/1257 1180/1180/1257 1243/1243/1257 1244/1244/1257 +f 3818/3963/1258 1233/1233/1258 1296/1296/1258 +f 1208/1208/1259 1207/1207/1259 1270/1270/1259 1271/1271/1259 +f 1182/1182/1260 1181/1181/1260 1244/1244/1260 1245/1245/1260 +f 1209/1209/1261 1208/1208/1261 1271/1271/1261 1272/1272/1261 +f 1183/1183/1262 1182/1182/1262 1245/1245/1262 1246/1246/1262 +f 1210/1210/1263 1209/1209/1263 1272/1272/1263 1273/1273/1263 +f 1184/1184/1264 1183/1183/1264 1246/1246/1264 1247/1247/1264 +f 1211/1211/1265 1210/1210/1265 1273/1273/1265 1274/1274/1265 +f 1185/1185/1266 1184/1184/1266 1247/1247/1266 1248/1248/1266 +f 1212/1212/1267 1211/1211/1267 1274/1274/1267 1275/1275/1267 +f 1186/1186/1268 1185/1185/1268 1248/1248/1268 1249/1249/1268 +f 1213/1213/1269 1212/1212/1269 1275/1275/1269 1276/1276/1269 +f 1187/1187/1270 1186/1186/1270 1249/1249/1270 1250/1250/1270 +f 1214/1214/1271 1213/1213/1271 1276/1276/1271 1277/1277/1271 +f 1188/1188/1272 1187/1187/1272 1250/1250/1272 1251/1251/1272 +f 1215/1215/1273 1214/1214/1273 1277/1277/1273 1278/1278/1273 +f 1189/1189/1274 1188/1188/1274 1251/1251/1274 1252/1252/1274 +f 1216/1216/1275 1215/1215/1275 1278/1278/1275 1279/1279/1275 +f 1190/1190/1276 1189/1189/1276 1252/1252/1276 1253/1253/1276 +f 1217/1217/1277 1216/1216/1277 1279/1279/1277 1280/1280/1277 +f 1191/1191/1278 1190/1190/1278 1253/1253/1278 1254/1254/1278 +f 1218/1218/1279 1217/1217/1279 1280/1280/1279 1281/1281/1279 +f 1192/1192/1280 1191/1191/1280 1254/1254/1280 1255/1255/1280 +f 1284/1284/1281 1283/1283/1281 1346/1346/1281 1347/1347/1281 +f 1258/1258/1282 1257/1257/1282 1320/1320/1282 1321/1321/1282 +f 1285/1285/1283 1284/1284/1283 1347/1347/1283 1348/1348/1283 +f 1259/1259/1284 1258/1258/1284 1321/1321/1284 1322/1322/1284 +f 1286/1286/1285 1285/1285/1285 1348/1348/1285 1349/1349/1285 +f 1260/1260/1286 1259/1259/1286 1322/1322/1286 1323/1323/1286 +f 1234/1234/1287 1990/2010/1287 1297/1297/1287 +f 1287/1287/1288 1286/1286/1288 1349/1349/1288 1350/1350/1288 +f 1261/1261/1289 1260/1260/1289 1323/1323/1289 1324/1324/1289 +f 1235/1235/1290 1234/1234/1290 1297/1297/1290 1298/1298/1290 +f 1288/1288/1291 1287/1287/1291 1350/1350/1291 1351/1351/1291 +f 1262/1262/1292 1261/1261/1292 1324/1324/1292 1325/1325/1292 +f 1236/1236/1293 1235/1235/1293 1298/1298/1293 1299/1299/1293 +f 1289/1289/1294 1288/1288/1294 1351/1351/1294 1352/1352/1294 +f 1263/1263/1295 1262/1262/1295 1325/1325/1295 1326/1326/1295 +f 1237/1237/1296 1236/1236/1296 1299/1299/1296 1300/1300/1296 +f 1290/1290/1297 1289/1289/1297 1352/1352/1297 1353/1353/1297 +f 1264/1264/1298 1263/1263/1298 1326/1326/1298 1327/1327/1298 +f 1238/1238/1299 1237/1237/1299 1300/1300/1299 1301/1301/1299 +f 1291/1291/1300 1290/1290/1300 1353/1353/1300 1354/1354/1300 +f 1265/1265/1301 1264/1264/1301 1327/1327/1301 1328/1328/1301 +f 1239/1239/1302 1238/1238/1302 1301/1301/1302 1302/1302/1302 +f 1292/1292/1303 1291/1291/1303 1354/1354/1303 1355/1355/1303 +f 1266/1266/1304 1265/1265/1304 1328/1328/1304 1329/1329/1304 +f 1240/1240/1305 1239/1239/1305 1302/1302/1305 1303/1303/1305 +f 1293/1293/1306 1292/1292/1306 1355/1355/1306 1356/1356/1306 +f 1267/1267/1307 1266/1266/1307 1329/1329/1307 1330/1330/1307 +f 1241/1241/1308 1240/1240/1308 1303/1303/1308 1304/1304/1308 +f 1294/1294/1309 1293/1293/1309 1356/1356/1309 1357/1357/1309 +f 1268/1268/1310 1267/1267/1310 1330/1330/1310 1331/1331/1310 +f 1242/1242/1311 1241/1241/1311 1304/1304/1311 1305/1305/1311 +f 1295/1295/1312 1294/1294/1312 1357/1357/1312 1358/1358/1312 +f 1269/1269/1313 1268/1268/1313 1331/1331/1313 1332/1332/1313 +f 1243/1243/1314 1242/1242/1314 1305/1305/1314 1306/1306/1314 +f 1296/1296/1315 1295/1295/1315 1358/1358/1315 1359/1359/1315 +f 1270/1270/1316 1269/1269/1316 1332/1332/1316 1333/1333/1316 +f 1244/1244/1317 1243/1243/1317 1306/1306/1317 1307/1307/1317 +f 3818/3964/1318 1296/1296/1318 1359/1359/1318 +f 1271/1271/1319 1270/1270/1319 1333/1333/1319 1334/1334/1319 +f 1245/1245/1320 1244/1244/1320 1307/1307/1320 1308/1308/1320 +f 1272/1272/1321 1271/1271/1321 1334/1334/1321 1335/1335/1321 +f 1246/1246/1322 1245/1245/1322 1308/1308/1322 1309/1309/1322 +f 1273/1273/1323 1272/1272/1323 1335/1335/1323 1336/1336/1323 +f 1247/1247/1324 1246/1246/1324 1309/1309/1324 1310/1310/1324 +f 1274/1274/1325 1273/1273/1325 1336/1336/1325 1337/1337/1325 +f 1248/1248/1326 1247/1247/1326 1310/1310/1326 1311/1311/1326 +f 1275/1275/1327 1274/1274/1327 1337/1337/1327 1338/1338/1327 +f 1249/1249/1328 1248/1248/1328 1311/1311/1328 1312/1312/1328 +f 1276/1276/1329 1275/1275/1329 1338/1338/1329 1339/1339/1329 +f 1250/1250/1330 1249/1249/1330 1312/1312/1330 1313/1313/1330 +f 1277/1277/1331 1276/1276/1331 1339/1339/1331 1340/1340/1331 +f 1251/1251/1332 1250/1250/1332 1313/1313/1332 1314/1314/1332 +f 1278/1278/1333 1277/1277/1333 1340/1340/1333 1341/1341/1333 +f 1252/1252/1334 1251/1251/1334 1314/1314/1334 1315/1315/1334 +f 1279/1279/1335 1278/1278/1335 1341/1341/1335 1342/1342/1335 +f 1253/1253/1336 1252/1252/1336 1315/1315/1336 1316/1316/1336 +f 1280/1280/1337 1279/1279/1337 1342/1342/1337 1343/1343/1337 +f 1254/1254/1338 1253/1253/1338 1316/1316/1338 1317/1317/1338 +f 1281/1281/1339 1280/1280/1339 1343/1343/1339 1344/1344/1339 +f 1255/1255/1340 1254/1254/1340 1317/1317/1340 1318/1318/1340 +f 1282/1282/1341 1281/1281/1341 1344/1344/1341 1345/1345/1341 +f 1256/1256/1342 1255/1255/1342 1318/1318/1342 1319/1319/1342 +f 1283/1283/1343 1282/1282/1343 1345/1345/1343 1346/1346/1343 +f 1257/1257/1344 1256/1256/1344 1319/1319/1344 1320/1320/1344 +f 1349/1349/1345 1348/1348/1345 1411/1411/1345 1412/1412/1345 +f 1323/1323/1346 1322/1322/1346 1385/1385/1346 1386/1386/1346 +f 1297/1297/1347 1990/2011/1347 1360/1360/1347 +f 1350/1350/1348 1349/1349/1348 1412/1412/1348 1413/1413/1348 +f 1324/1324/1349 1323/1323/1349 1386/1386/1349 1387/1387/1349 +f 1298/1298/1350 1297/1297/1350 1360/1360/1350 1361/1361/1350 +f 1351/1351/1351 1350/1350/1351 1413/1413/1351 1414/1414/1351 +f 1325/1325/1352 1324/1324/1352 1387/1387/1352 1388/1388/1352 +f 1299/1299/1353 1298/1298/1353 1361/1361/1353 1362/1362/1353 +f 1352/1352/1354 1351/1351/1354 1414/1414/1354 1415/1415/1354 +f 1326/1326/1355 1325/1325/1355 1388/1388/1355 1389/1389/1355 +f 1300/1300/1356 1299/1299/1356 1362/1362/1356 1363/1363/1356 +f 1353/1353/1357 1352/1352/1357 1415/1415/1357 1416/1416/1357 +f 1327/1327/1358 1326/1326/1358 1389/1389/1358 1390/1390/1358 +f 1301/1301/1359 1300/1300/1359 1363/1363/1359 1364/1364/1359 +f 1354/1354/1360 1353/1353/1360 1416/1416/1360 1417/1417/1360 +f 1328/1328/1361 1327/1327/1361 1390/1390/1361 1391/1391/1361 +f 1302/1302/1362 1301/1301/1362 1364/1364/1362 1365/1365/1362 +f 1355/1355/1363 1354/1354/1363 1417/1417/1363 1418/1418/1363 +f 1329/1329/1364 1328/1328/1364 1391/1391/1364 1392/1392/1364 +f 1303/1303/1365 1302/1302/1365 1365/1365/1365 1366/1366/1365 +f 1356/1356/1366 1355/1355/1366 1418/1418/1366 1419/1419/1366 +f 1330/1330/1367 1329/1329/1367 1392/1392/1367 1393/1393/1367 +f 1304/1304/1368 1303/1303/1368 1366/1366/1368 1367/1367/1368 +f 1357/1357/1369 1356/1356/1369 1419/1419/1369 1420/1420/1369 +f 1331/1331/1370 1330/1330/1370 1393/1393/1370 1394/1394/1370 +f 1305/1305/1371 1304/1304/1371 1367/1367/1371 1368/1368/1371 +f 1358/1358/1372 1357/1357/1372 1420/1420/1372 1421/1421/1372 +f 1332/1332/1373 1331/1331/1373 1394/1394/1373 1395/1395/1373 +f 1306/1306/1374 1305/1305/1374 1368/1368/1374 1369/1369/1374 +f 1359/1359/1375 1358/1358/1375 1421/1421/1375 1422/1422/1375 +f 1333/1333/1376 1332/1332/1376 1395/1395/1376 1396/1396/1376 +f 1307/1307/1377 1306/1306/1377 1369/1369/1377 1370/1370/1377 +f 3818/3965/1378 1359/1359/1378 1422/1422/1378 +f 1334/1334/1379 1333/1333/1379 1396/1396/1379 1397/1397/1379 +f 1308/1308/1380 1307/1307/1380 1370/1370/1380 1371/1371/1380 +f 1335/1335/1381 1334/1334/1381 1397/1397/1381 1398/1398/1381 +f 1309/1309/1382 1308/1308/1382 1371/1371/1382 1372/1372/1382 +f 1336/1336/1383 1335/1335/1383 1398/1398/1383 1399/1399/1383 +f 1310/1310/1384 1309/1309/1384 1372/1372/1384 1373/1373/1384 +f 1337/1337/1385 1336/1336/1385 1399/1399/1385 1400/1400/1385 +f 1311/1311/1386 1310/1310/1386 1373/1373/1386 1374/1374/1386 +f 1338/1338/1387 1337/1337/1387 1400/1400/1387 1401/1401/1387 +f 1312/1312/1388 1311/1311/1388 1374/1374/1388 1375/1375/1388 +f 1339/1339/1389 1338/1338/1389 1401/1401/1389 1402/1402/1389 +f 1313/1313/1390 1312/1312/1390 1375/1375/1390 1376/1376/1390 +f 1340/1340/1391 1339/1339/1391 1402/1402/1391 1403/1403/1391 +f 1314/1314/1392 1313/1313/1392 1376/1376/1392 1377/1377/1392 +f 1341/1341/1393 1340/1340/1393 1403/1403/1393 1404/1404/1393 +f 1315/1315/1394 1314/1314/1394 1377/1377/1394 1378/1378/1394 +f 1342/1342/1395 1341/1341/1395 1404/1404/1395 1405/1405/1395 +f 1316/1316/1396 1315/1315/1396 1378/1378/1396 1379/1379/1396 +f 1343/1343/1397 1342/1342/1397 1405/1405/1397 1406/1406/1397 +f 1317/1317/1398 1316/1316/1398 1379/1379/1398 1380/1380/1398 +f 1344/1344/1399 1343/1343/1399 1406/1406/1399 1407/1407/1399 +f 1318/1318/1400 1317/1317/1400 1380/1380/1400 1381/1381/1400 +f 1345/1345/1401 1344/1344/1401 1407/1407/1401 1408/1408/1401 +f 1319/1319/1402 1318/1318/1402 1381/1381/1402 1382/1382/1402 +f 1346/1346/1403 1345/1345/1403 1408/1408/1403 1409/1409/1403 +f 1320/1320/1404 1319/1319/1404 1382/1382/1404 1383/1383/1404 +f 1347/1347/1405 1346/1346/1405 1409/1409/1405 1410/1410/1405 +f 1321/1321/1406 1320/1320/1406 1383/1383/1406 1384/1384/1406 +f 1348/1348/1407 1347/1347/1407 1410/1410/1407 1411/1411/1407 +f 1322/1322/1408 1321/1321/1408 1384/1384/1408 1385/1385/1408 +f 1414/1414/1409 1413/1413/1409 1476/1476/1409 1477/1477/1409 +f 1388/1388/1410 1387/1387/1410 1450/1450/1410 1451/1451/1410 +f 1362/1362/1411 1361/1361/1411 1424/1424/1411 1425/1425/1411 +f 1415/1415/1412 1414/1414/1412 1477/1477/1412 1478/1478/1412 +f 1389/1389/1413 1388/1388/1413 1451/1451/1413 1452/1452/1413 +f 1363/1363/1414 1362/1362/1414 1425/1425/1414 1426/1426/1414 +f 1416/1416/1415 1415/1415/1415 1478/1478/1415 1479/1479/1415 +f 1390/1390/1416 1389/1389/1416 1452/1452/1416 1453/1453/1416 +f 1364/1364/1417 1363/1363/1417 1426/1426/1417 1427/1427/1417 +f 1417/1417/1418 1416/1416/1418 1479/1479/1418 1480/1480/1418 +f 1391/1391/1419 1390/1390/1419 1453/1453/1419 1454/1454/1419 +f 1365/1365/1420 1364/1364/1420 1427/1427/1420 1428/1428/1420 +f 1418/1418/1421 1417/1417/1421 1480/1480/1421 1481/1481/1421 +f 1392/1392/1422 1391/1391/1422 1454/1454/1422 1455/1455/1422 +f 1366/1366/1423 1365/1365/1423 1428/1428/1423 1429/1429/1423 +f 1419/1419/1424 1418/1418/1424 1481/1481/1424 1482/1482/1424 +f 1393/1393/1425 1392/1392/1425 1455/1455/1425 1456/1456/1425 +f 1367/1367/1426 1366/1366/1426 1429/1429/1426 1430/1430/1426 +f 1420/1420/1427 1419/1419/1427 1482/1482/1427 1483/1483/1427 +f 1394/1394/1428 1393/1393/1428 1456/1456/1428 1457/1457/1428 +f 1368/1368/1429 1367/1367/1429 1430/1430/1429 1431/1431/1429 +f 1421/1421/1430 1420/1420/1430 1483/1483/1430 1484/1484/1430 +f 1395/1395/1431 1394/1394/1431 1457/1457/1431 1458/1458/1431 +f 1369/1369/1432 1368/1368/1432 1431/1431/1432 1432/1432/1432 +f 1422/1422/1433 1421/1421/1433 1484/1484/1433 1485/1485/1433 +f 1396/1396/1434 1395/1395/1434 1458/1458/1434 1459/1459/1434 +f 1370/1370/1435 1369/1369/1435 1432/1432/1435 1433/1433/1435 +f 3818/3966/1436 1422/1422/1436 1485/1485/1436 +f 1397/1397/1437 1396/1396/1437 1459/1459/1437 1460/1460/1437 +f 1371/1371/1438 1370/1370/1438 1433/1433/1438 1434/1434/1438 +f 1398/1398/1439 1397/1397/1439 1460/1460/1439 1461/1461/1439 +f 1372/1372/1440 1371/1371/1440 1434/1434/1440 1435/1435/1440 +f 1399/1399/1441 1398/1398/1441 1461/1461/1441 1462/1462/1441 +f 1373/1373/1442 1372/1372/1442 1435/1435/1442 1436/1436/1442 +f 1400/1400/1443 1399/1399/1443 1462/1462/1443 1463/1463/1443 +f 1374/1374/1444 1373/1373/1444 1436/1436/1444 1437/1437/1444 +f 1401/1401/1445 1400/1400/1445 1463/1463/1445 1464/1464/1445 +f 1375/1375/1446 1374/1374/1446 1437/1437/1446 1438/1438/1446 +f 1402/1402/1447 1401/1401/1447 1464/1464/1447 1465/1465/1447 +f 1376/1376/1448 1375/1375/1448 1438/1438/1448 1439/1439/1448 +f 1403/1403/1449 1402/1402/1449 1465/1465/1449 1466/1466/1449 +f 1377/1377/1450 1376/1376/1450 1439/1439/1450 1440/1440/1450 +f 1404/1404/1451 1403/1403/1451 1466/1466/1451 1467/1467/1451 +f 1378/1378/1452 1377/1377/1452 1440/1440/1452 1441/1441/1452 +f 1405/1405/1453 1404/1404/1453 1467/1467/1453 1468/1468/1453 +f 1379/1379/1454 1378/1378/1454 1441/1441/1454 1442/1442/1454 +f 1406/1406/1455 1405/1405/1455 1468/1468/1455 1469/1469/1455 +f 1380/1380/1456 1379/1379/1456 1442/1442/1456 1443/1443/1456 +f 1407/1407/1457 1406/1406/1457 1469/1469/1457 1470/1470/1457 +f 1381/1381/1458 1380/1380/1458 1443/1443/1458 1444/1444/1458 +f 1408/1408/1459 1407/1407/1459 1470/1470/1459 1471/1471/1459 +f 1382/1382/1460 1381/1381/1460 1444/1444/1460 1445/1445/1460 +f 1409/1409/1461 1408/1408/1461 1471/1471/1461 1472/1472/1461 +f 1383/1383/1462 1382/1382/1462 1445/1445/1462 1446/1446/1462 +f 1410/1410/1463 1409/1409/1463 1472/1472/1463 1473/1473/1463 +f 1384/1384/1464 1383/1383/1464 1446/1446/1464 1447/1447/1464 +f 1411/1411/1465 1410/1410/1465 1473/1473/1465 1474/1474/1465 +f 1385/1385/1466 1384/1384/1466 1447/1447/1466 1448/1448/1466 +f 1412/1412/1467 1411/1411/1467 1474/1474/1467 1475/1475/1467 +f 1386/1386/1468 1385/1385/1468 1448/1448/1468 1449/1449/1468 +f 1360/1360/1469 1990/2012/1469 1423/1423/1469 +f 1413/1413/1470 1412/1412/1470 1475/1475/1470 1476/1476/1470 +f 1387/1387/1471 1386/1386/1471 1449/1449/1471 1450/1450/1471 +f 1361/1361/1472 1360/1360/1472 1423/1423/1472 1424/1424/1472 +f 1479/1479/1473 1478/1478/1473 1541/1541/1473 1542/1542/1473 +f 1453/1453/1474 1452/1452/1474 1515/1515/1474 1516/1516/1474 +f 1427/1427/1475 1426/1426/1475 1489/1489/1475 1490/1490/1475 +f 1480/1480/1476 1479/1479/1476 1542/1542/1476 1543/1543/1476 +f 1454/1454/1477 1453/1453/1477 1516/1516/1477 1517/1517/1477 +f 1428/1428/1478 1427/1427/1478 1490/1490/1478 1491/1491/1478 +f 1481/1481/1479 1480/1480/1479 1543/1543/1479 1544/1544/1479 +f 1455/1455/1480 1454/1454/1480 1517/1517/1480 1518/1518/1480 +f 1429/1429/1481 1428/1428/1481 1491/1491/1481 1492/1492/1481 +f 1482/1482/1482 1481/1481/1482 1544/1544/1482 1545/1545/1482 +f 1456/1456/1483 1455/1455/1483 1518/1518/1483 1519/1519/1483 +f 1430/1430/1484 1429/1429/1484 1492/1492/1484 1493/1493/1484 +f 1483/1483/1485 1482/1482/1485 1545/1545/1485 1546/1546/1485 +f 1457/1457/1486 1456/1456/1486 1519/1519/1486 1520/1520/1486 +f 1431/1431/1487 1430/1430/1487 1493/1493/1487 1494/1494/1487 +f 1484/1484/1488 1483/1483/1488 1546/1546/1488 1547/1547/1488 +f 1458/1458/1489 1457/1457/1489 1520/1520/1489 1521/1521/1489 +f 1432/1432/1490 1431/1431/1490 1494/1494/1490 1495/1495/1490 +f 1485/1485/1491 1484/1484/1491 1547/1547/1491 1548/1548/1491 +f 1459/1459/1492 1458/1458/1492 1521/1521/1492 1522/1522/1492 +f 1433/1433/1493 1432/1432/1493 1495/1495/1493 1496/1496/1493 +f 3818/3967/1494 1485/1485/1494 1548/1548/1494 +f 1460/1460/1495 1459/1459/1495 1522/1522/1495 1523/1523/1495 +f 1434/1434/1496 1433/1433/1496 1496/1496/1496 1497/1497/1496 +f 1461/1461/1497 1460/1460/1497 1523/1523/1497 1524/1524/1497 +f 1435/1435/1498 1434/1434/1498 1497/1497/1498 1498/1498/1498 +f 1462/1462/1499 1461/1461/1499 1524/1524/1499 1525/1525/1499 +f 1436/1436/1500 1435/1435/1500 1498/1498/1500 1499/1499/1500 +f 1463/1463/1501 1462/1462/1501 1525/1525/1501 1526/1526/1501 +f 1437/1437/1502 1436/1436/1502 1499/1499/1502 1500/1500/1502 +f 1464/1464/1503 1463/1463/1503 1526/1526/1503 1527/1527/1503 +f 1438/1438/1504 1437/1437/1504 1500/1500/1504 1501/1501/1504 +f 1465/1465/1505 1464/1464/1505 1527/1527/1505 1528/1528/1505 +f 1439/1439/1506 1438/1438/1506 1501/1501/1506 1502/1502/1506 +f 1466/1466/1507 1465/1465/1507 1528/1528/1507 1529/1529/1507 +f 1440/1440/1508 1439/1439/1508 1502/1502/1508 1503/1503/1508 +f 1467/1467/1509 1466/1466/1509 1529/1529/1509 1530/1530/1509 +f 1441/1441/1510 1440/1440/1510 1503/1503/1510 1504/1504/1510 +f 1468/1468/1511 1467/1467/1511 1530/1530/1511 1531/1531/1511 +f 1442/1442/1512 1441/1441/1512 1504/1504/1512 1505/1505/1512 +f 1469/1469/1513 1468/1468/1513 1531/1531/1513 1532/1532/1513 +f 1443/1443/1514 1442/1442/1514 1505/1505/1514 1506/1506/1514 +f 1470/1470/1515 1469/1469/1515 1532/1532/1515 1533/1533/1515 +f 1444/1444/1516 1443/1443/1516 1506/1506/1516 1507/1507/1516 +f 1471/1471/1517 1470/1470/1517 1533/1533/1517 1534/1534/1517 +f 1445/1445/1518 1444/1444/1518 1507/1507/1518 1508/1508/1518 +f 1472/1472/1519 1471/1471/1519 1534/1534/1519 1535/1535/1519 +f 1446/1446/1520 1445/1445/1520 1508/1508/1520 1509/1509/1520 +f 1473/1473/1521 1472/1472/1521 1535/1535/1521 1536/1536/1521 +f 1447/1447/1522 1446/1446/1522 1509/1509/1522 1510/1510/1522 +f 1474/1474/1523 1473/1473/1523 1536/1536/1523 1537/1537/1523 +f 1448/1448/1524 1447/1447/1524 1510/1510/1524 1511/1511/1524 +f 1475/1475/1525 1474/1474/1525 1537/1537/1525 1538/1538/1525 +f 1449/1449/1526 1448/1448/1526 1511/1511/1526 1512/1512/1526 +f 1423/1423/1527 1990/2013/1527 1486/1486/1527 +f 1476/1476/1528 1475/1475/1528 1538/1538/1528 1539/1539/1528 +f 1450/1450/1529 1449/1449/1529 1512/1512/1529 1513/1513/1529 +f 1424/1424/1530 1423/1423/1530 1486/1486/1530 1487/1487/1530 +f 1477/1477/1531 1476/1476/1531 1539/1539/1531 1540/1540/1531 +f 1451/1451/1532 1450/1450/1532 1513/1513/1532 1514/1514/1532 +f 1425/1425/1533 1424/1424/1533 1487/1487/1533 1488/1488/1533 +f 1478/1478/1534 1477/1477/1534 1540/1540/1534 1541/1541/1534 +f 1452/1452/1535 1451/1451/1535 1514/1514/1535 1515/1515/1535 +f 1426/1426/1536 1425/1425/1536 1488/1488/1536 1489/1489/1536 +f 1544/1544/1537 1543/1543/1537 1606/1606/1537 1607/1607/1537 +f 1518/1518/1538 1517/1517/1538 1580/1580/1538 1581/1581/1538 +f 1492/1492/1539 1491/1491/1539 1554/1554/1539 1555/1555/1539 +f 1545/1545/1540 1544/1544/1540 1607/1607/1540 1608/1608/1540 +f 1519/1519/1541 1518/1518/1541 1581/1581/1541 1582/1582/1541 +f 1493/1493/1542 1492/1492/1542 1555/1555/1542 1556/1556/1542 +f 1546/1546/1543 1545/1545/1543 1608/1608/1543 1609/1609/1543 +f 1520/1520/1544 1519/1519/1544 1582/1582/1544 1583/1583/1544 +f 1494/1494/1545 1493/1493/1545 1556/1556/1545 1557/1557/1545 +f 1547/1547/1546 1546/1546/1546 1609/1609/1546 1610/1610/1546 +f 1521/1521/1547 1520/1520/1547 1583/1583/1547 1584/1584/1547 +f 1495/1495/1548 1494/1494/1548 1557/1557/1548 1558/1558/1548 +f 1548/1548/1549 1547/1547/1549 1610/1610/1549 1611/1611/1549 +f 1522/1522/1550 1521/1521/1550 1584/1584/1550 1585/1585/1550 +f 1496/1496/1551 1495/1495/1551 1558/1558/1551 1559/1559/1551 +f 3818/3968/1552 1548/1548/1552 1611/1611/1552 +f 1523/1523/1553 1522/1522/1553 1585/1585/1553 1586/1586/1553 +f 1497/1497/1554 1496/1496/1554 1559/1559/1554 1560/1560/1554 +f 1524/1524/1555 1523/1523/1555 1586/1586/1555 1587/1587/1555 +f 1498/1498/1556 1497/1497/1556 1560/1560/1556 1561/1561/1556 +f 1525/1525/1557 1524/1524/1557 1587/1587/1557 1588/1588/1557 +f 1499/1499/1558 1498/1498/1558 1561/1561/1558 1562/1562/1558 +f 1526/1526/1559 1525/1525/1559 1588/1588/1559 1589/1589/1559 +f 1500/1500/1560 1499/1499/1560 1562/1562/1560 1563/1563/1560 +f 1527/1527/1561 1526/1526/1561 1589/1589/1561 1590/1590/1561 +f 1501/1501/1562 1500/1500/1562 1563/1563/1562 1564/1564/1562 +f 1528/1528/1563 1527/1527/1563 1590/1590/1563 1591/1591/1563 +f 1502/1502/1564 1501/1501/1564 1564/1564/1564 1565/1565/1564 +f 1529/1529/1565 1528/1528/1565 1591/1591/1565 1592/1592/1565 +f 1503/1503/1566 1502/1502/1566 1565/1565/1566 1566/1566/1566 +f 1530/1530/1567 1529/1529/1567 1592/1592/1567 1593/1593/1567 +f 1504/1504/1568 1503/1503/1568 1566/1566/1568 1567/1567/1568 +f 1531/1531/1569 1530/1530/1569 1593/1593/1569 1594/1594/1569 +f 1505/1505/1570 1504/1504/1570 1567/1567/1570 1568/1568/1570 +f 1532/1532/1571 1531/1531/1571 1594/1594/1571 1595/1595/1571 +f 1506/1506/1572 1505/1505/1572 1568/1568/1572 1569/1569/1572 +f 1533/1533/1573 1532/1532/1573 1595/1595/1573 1596/1596/1573 +f 1507/1507/1574 1506/1506/1574 1569/1569/1574 1570/1570/1574 +f 1534/1534/1575 1533/1533/1575 1596/1596/1575 1597/1597/1575 +f 1508/1508/1576 1507/1507/1576 1570/1570/1576 1571/1571/1576 +f 1535/1535/1577 1534/1534/1577 1597/1597/1577 1598/1598/1577 +f 1509/1509/1578 1508/1508/1578 1571/1571/1578 1572/1572/1578 +f 1536/1536/1579 1535/1535/1579 1598/1598/1579 1599/1599/1579 +f 1510/1510/1580 1509/1509/1580 1572/1572/1580 1573/1573/1580 +f 1537/1537/1581 1536/1536/1581 1599/1599/1581 1600/1600/1581 +f 1511/1511/1582 1510/1510/1582 1573/1573/1582 1574/1574/1582 +f 1538/1538/1583 1537/1537/1583 1600/1600/1583 1601/1601/1583 +f 1512/1512/1584 1511/1511/1584 1574/1574/1584 1575/1575/1584 +f 1486/1486/1585 1990/2014/1585 1549/1549/1585 +f 1539/1539/1586 1538/1538/1586 1601/1601/1586 1602/1602/1586 +f 1513/1513/1587 1512/1512/1587 1575/1575/1587 1576/1576/1587 +f 1487/1487/1588 1486/1486/1588 1549/1549/1588 1550/1550/1588 +f 1540/1540/1589 1539/1539/1589 1602/1602/1589 1603/1603/1589 +f 1514/1514/1590 1513/1513/1590 1576/1576/1590 1577/1577/1590 +f 1488/1488/1591 1487/1487/1591 1550/1550/1591 1551/1551/1591 +f 1541/1541/1592 1540/1540/1592 1603/1603/1592 1604/1604/1592 +f 1515/1515/1593 1514/1514/1593 1577/1577/1593 1578/1578/1593 +f 1489/1489/1594 1488/1488/1594 1551/1551/1594 1552/1552/1594 +f 1542/1542/1595 1541/1541/1595 1604/1604/1595 1605/1605/1595 +f 1516/1516/1596 1515/1515/1596 1578/1578/1596 1579/1579/1596 +f 1490/1490/1597 1489/1489/1597 1552/1552/1597 1553/1553/1597 +f 1543/1543/1598 1542/1542/1598 1605/1605/1598 1606/1606/1598 +f 1517/1517/1599 1516/1516/1599 1579/1579/1599 1580/1580/1599 +f 1491/1491/1600 1490/1490/1600 1553/1553/1600 1554/1554/1600 +f 1609/1609/1601 1608/1608/1601 1671/1671/1601 1672/1672/1601 +f 1583/1583/1602 1582/1582/1602 1645/1645/1602 1646/1646/1602 +f 1557/1557/1603 1556/1556/1603 1619/1619/1603 1620/1620/1603 +f 1610/1610/1604 1609/1609/1604 1672/1672/1604 1673/1673/1604 +f 1584/1584/1605 1583/1583/1605 1646/1646/1605 1647/1647/1605 +f 1558/1558/1606 1557/1557/1606 1620/1620/1606 1621/1621/1606 +f 1611/1611/1607 1610/1610/1607 1673/1673/1607 1674/1674/1607 +f 1585/1585/1608 1584/1584/1608 1647/1647/1608 1648/1648/1608 +f 1559/1559/1609 1558/1558/1609 1621/1621/1609 1622/1622/1609 +f 3818/3969/1610 1611/1611/1610 1674/1674/1610 +f 1586/1586/1611 1585/1585/1611 1648/1648/1611 1649/1649/1611 +f 1560/1560/1612 1559/1559/1612 1622/1622/1612 1623/1623/1612 +f 1587/1587/1613 1586/1586/1613 1649/1649/1613 1650/1650/1613 +f 1561/1561/1614 1560/1560/1614 1623/1623/1614 1624/1624/1614 +f 1588/1588/1615 1587/1587/1615 1650/1650/1615 1651/1651/1615 +f 1562/1562/1616 1561/1561/1616 1624/1624/1616 1625/1625/1616 +f 1589/1589/1617 1588/1588/1617 1651/1651/1617 1652/1652/1617 +f 1563/1563/1618 1562/1562/1618 1625/1625/1618 1626/1626/1618 +f 1590/1590/1619 1589/1589/1619 1652/1652/1619 1653/1653/1619 +f 1564/1564/1620 1563/1563/1620 1626/1626/1620 1627/1627/1620 +f 1591/1591/1621 1590/1590/1621 1653/1653/1621 1654/1654/1621 +f 1565/1565/1622 1564/1564/1622 1627/1627/1622 1628/1628/1622 +f 1592/1592/1623 1591/1591/1623 1654/1654/1623 1655/1655/1623 +f 1566/1566/1624 1565/1565/1624 1628/1628/1624 1629/1629/1624 +f 1593/1593/1625 1592/1592/1625 1655/1655/1625 1656/1656/1625 +f 1567/1567/1626 1566/1566/1626 1629/1629/1626 1630/1630/1626 +f 1594/1594/1627 1593/1593/1627 1656/1656/1627 1657/1657/1627 +f 1568/1568/1628 1567/1567/1628 1630/1630/1628 1631/1631/1628 +f 1595/1595/1629 1594/1594/1629 1657/1657/1629 1658/1658/1629 +f 1569/1569/1630 1568/1568/1630 1631/1631/1630 1632/1632/1630 +f 1596/1596/1631 1595/1595/1631 1658/1658/1631 1659/1659/1631 +f 1570/1570/1632 1569/1569/1632 1632/1632/1632 1633/1633/1632 +f 1597/1597/1633 1596/1596/1633 1659/1659/1633 1660/1660/1633 +f 1571/1571/1634 1570/1570/1634 1633/1633/1634 1634/1634/1634 +f 1598/1598/1635 1597/1597/1635 1660/1660/1635 1661/1661/1635 +f 1572/1572/1636 1571/1571/1636 1634/1634/1636 1635/1635/1636 +f 1599/1599/1637 1598/1598/1637 1661/1661/1637 1662/1662/1637 +f 1573/1573/1638 1572/1572/1638 1635/1635/1638 1636/1636/1638 +f 1600/1600/1639 1599/1599/1639 1662/1662/1639 1663/1663/1639 +f 1574/1574/1640 1573/1573/1640 1636/1636/1640 1637/1637/1640 +f 1601/1601/1641 1600/1600/1641 1663/1663/1641 1664/1664/1641 +f 1575/1575/1642 1574/1574/1642 1637/1637/1642 1638/1638/1642 +f 1549/1549/1643 1990/2015/1643 1612/1612/1643 +f 1602/1602/1644 1601/1601/1644 1664/1664/1644 1665/1665/1644 +f 1576/1576/1645 1575/1575/1645 1638/1638/1645 1639/1639/1645 +f 1550/1550/1646 1549/1549/1646 1612/1612/1646 1613/1613/1646 +f 1603/1603/1647 1602/1602/1647 1665/1665/1647 1666/1666/1647 +f 1577/1577/1648 1576/1576/1648 1639/1639/1648 1640/1640/1648 +f 1551/1551/1649 1550/1550/1649 1613/1613/1649 1614/1614/1649 +f 1604/1604/1650 1603/1603/1650 1666/1666/1650 1667/1667/1650 +f 1578/1578/1651 1577/1577/1651 1640/1640/1651 1641/1641/1651 +f 1552/1552/1652 1551/1551/1652 1614/1614/1652 1615/1615/1652 +f 1605/1605/1653 1604/1604/1653 1667/1667/1653 1668/1668/1653 +f 1579/1579/1654 1578/1578/1654 1641/1641/1654 1642/1642/1654 +f 1553/1553/1655 1552/1552/1655 1615/1615/1655 1616/1616/1655 +f 1606/1606/1656 1605/1605/1656 1668/1668/1656 1669/1669/1656 +f 1580/1580/1657 1579/1579/1657 1642/1642/1657 1643/1643/1657 +f 1554/1554/1658 1553/1553/1658 1616/1616/1658 1617/1617/1658 +f 1607/1607/1659 1606/1606/1659 1669/1669/1659 1670/1670/1659 +f 1581/1581/1660 1580/1580/1660 1643/1643/1660 1644/1644/1660 +f 1555/1555/1661 1554/1554/1661 1617/1617/1661 1618/1618/1661 +f 1608/1608/1662 1607/1607/1662 1670/1670/1662 1671/1671/1662 +f 1582/1582/1663 1581/1581/1663 1644/1644/1663 1645/1645/1663 +f 1556/1556/1664 1555/1555/1664 1618/1618/1664 1619/1619/1664 +f 1657/1657/1665 1656/1656/1665 1719/1719/1665 1720/1720/1665 +f 1631/1631/1666 1630/1630/1666 1693/1693/1666 1694/1694/1666 +f 1658/1658/1667 1657/1657/1667 1720/1720/1667 1721/1721/1667 +f 1632/1632/1668 1631/1631/1668 1694/1694/1668 1695/1695/1668 +f 1659/1659/1669 1658/1658/1669 1721/1721/1669 1722/1722/1669 +f 1633/1633/1670 1632/1632/1670 1695/1695/1670 1696/1696/1670 +f 1660/1660/1671 1659/1659/1671 1722/1722/1671 1723/1723/1671 +f 1634/1634/1672 1633/1633/1672 1696/1696/1672 1697/1697/1672 +f 1661/1661/1673 1660/1660/1673 1723/1723/1673 1724/1724/1673 +f 1635/1635/1674 1634/1634/1674 1697/1697/1674 1698/1698/1674 +f 1662/1662/1675 1661/1661/1675 1724/1724/1675 1725/1725/1675 +f 1636/1636/1676 1635/1635/1676 1698/1698/1676 1699/1699/1676 +f 1663/1663/1677 1662/1662/1677 1725/1725/1677 1726/1726/1677 +f 1637/1637/1678 1636/1636/1678 1699/1699/1678 1700/1700/1678 +f 1664/1664/1679 1663/1663/1679 1726/1726/1679 1727/1727/1679 +f 1638/1638/1680 1637/1637/1680 1700/1700/1680 1701/1701/1680 +f 1612/1612/1681 1990/2016/1681 1675/1675/1681 +f 1665/1665/1682 1664/1664/1682 1727/1727/1682 1728/1728/1682 +f 1639/1639/1683 1638/1638/1683 1701/1701/1683 1702/1702/1683 +f 1613/1613/1684 1612/1612/1684 1675/1675/1684 1676/1676/1684 +f 1666/1666/1685 1665/1665/1685 1728/1728/1685 1729/1729/1685 +f 1640/1640/1686 1639/1639/1686 1702/1702/1686 1703/1703/1686 +f 1614/1614/1687 1613/1613/1687 1676/1676/1687 1677/1677/1687 +f 1667/1667/1688 1666/1666/1688 1729/1729/1688 1730/1730/1688 +f 1641/1641/1689 1640/1640/1689 1703/1703/1689 1704/1704/1689 +f 1615/1615/1690 1614/1614/1690 1677/1677/1690 1678/1678/1690 +f 1668/1668/1691 1667/1667/1691 1730/1730/1691 1731/1731/1691 +f 1642/1642/1692 1641/1641/1692 1704/1704/1692 1705/1705/1692 +f 1616/1616/1693 1615/1615/1693 1678/1678/1693 1679/1679/1693 +f 1669/1669/1694 1668/1668/1694 1731/1731/1694 1732/1732/1694 +f 1643/1643/1695 1642/1642/1695 1705/1705/1695 1706/1706/1695 +f 1617/1617/1696 1616/1616/1696 1679/1679/1696 1680/1680/1696 +f 1670/1670/1697 1669/1669/1697 1732/1732/1697 1733/1733/1697 +f 1644/1644/1698 1643/1643/1698 1706/1706/1698 1707/1707/1698 +f 1618/1618/1699 1617/1617/1699 1680/1680/1699 1681/1681/1699 +f 1671/1671/1700 1670/1670/1700 1733/1733/1700 1734/1734/1700 +f 1645/1645/1701 1644/1644/1701 1707/1707/1701 1708/1708/1701 +f 1619/1619/1702 1618/1618/1702 1681/1681/1702 1682/1682/1702 +f 1672/1672/1703 1671/1671/1703 1734/1734/1703 1735/1735/1703 +f 1646/1646/1704 1645/1645/1704 1708/1708/1704 1709/1709/1704 +f 1620/1620/1705 1619/1619/1705 1682/1682/1705 1683/1683/1705 +f 1673/1673/1706 1672/1672/1706 1735/1735/1706 1736/1736/1706 +f 1647/1647/1707 1646/1646/1707 1709/1709/1707 1710/1710/1707 +f 1621/1621/1708 1620/1620/1708 1683/1683/1708 1684/1684/1708 +f 1674/1674/1709 1673/1673/1709 1736/1736/1709 1737/1737/1709 +f 1648/1648/1710 1647/1647/1710 1710/1710/1710 1711/1711/1710 +f 1622/1622/1711 1621/1621/1711 1684/1684/1711 1685/1685/1711 +f 3818/3970/1712 1674/1674/1712 1737/1737/1712 +f 1649/1649/1713 1648/1648/1713 1711/1711/1713 1712/1712/1713 +f 1623/1623/1714 1622/1622/1714 1685/1685/1714 1686/1686/1714 +f 1650/1650/1715 1649/1649/1715 1712/1712/1715 1713/1713/1715 +f 1624/1624/1716 1623/1623/1716 1686/1686/1716 1687/1687/1716 +f 1651/1651/1717 1650/1650/1717 1713/1713/1717 1714/1714/1717 +f 1625/1625/1718 1624/1624/1718 1687/1687/1718 1688/1688/1718 +f 1652/1652/1719 1651/1651/1719 1714/1714/1719 1715/1715/1719 +f 1626/1626/1720 1625/1625/1720 1688/1688/1720 1689/1689/1720 +f 1653/1653/1721 1652/1652/1721 1715/1715/1721 1716/1716/1721 +f 1627/1627/1722 1626/1626/1722 1689/1689/1722 1690/1690/1722 +f 1654/1654/1723 1653/1653/1723 1716/1716/1723 1717/1717/1723 +f 1628/1628/1724 1627/1627/1724 1690/1690/1724 1691/1691/1724 +f 1655/1655/1725 1654/1654/1725 1717/1717/1725 1718/1718/1725 +f 1629/1629/1726 1628/1628/1726 1691/1691/1726 1692/1692/1726 +f 1656/1656/1727 1655/1655/1727 1718/1718/1727 1719/1719/1727 +f 1630/1630/1728 1629/1629/1728 1692/1692/1728 1693/1693/1728 +f 1722/1722/1729 1721/1721/1729 1784/1784/1729 1785/1785/1729 +f 1696/1696/1730 1695/1695/1730 1758/1758/1730 1759/1759/1730 +f 1723/1723/1731 1722/1722/1731 1785/1785/1731 1786/1786/1731 +f 1697/1697/1732 1696/1696/1732 1759/1759/1732 1760/1760/1732 +f 1724/1724/1733 1723/1723/1733 1786/1786/1733 1787/1787/1733 +f 1698/1698/1734 1697/1697/1734 1760/1760/1734 1761/1761/1734 +f 1725/1725/1735 1724/1724/1735 1787/1787/1735 1788/1788/1735 +f 1699/1699/1736 1698/1698/1736 1761/1761/1736 1762/1762/1736 +f 1726/1726/1737 1725/1725/1737 1788/1788/1737 1789/1789/1737 +f 1700/1700/1738 1699/1699/1738 1762/1762/1738 1763/1763/1738 +f 1727/1727/1739 1726/1726/1739 1789/1789/1739 1790/1790/1739 +f 1701/1701/1740 1700/1700/1740 1763/1763/1740 1764/1764/1740 +f 1675/1675/1741 1990/2017/1741 1738/1738/1741 +f 1728/1728/1742 1727/1727/1742 1790/1790/1742 1791/1791/1742 +f 1702/1702/1743 1701/1701/1743 1764/1764/1743 1765/1765/1743 +f 1676/1676/1744 1675/1675/1744 1738/1738/1744 1739/1739/1744 +f 1729/1729/1745 1728/1728/1745 1791/1791/1745 1792/1792/1745 +f 1703/1703/1746 1702/1702/1746 1765/1765/1746 1766/1766/1746 +f 1677/1677/1747 1676/1676/1747 1739/1739/1747 1740/1740/1747 +f 1730/1730/1748 1729/1729/1748 1792/1792/1748 1793/1793/1748 +f 1704/1704/1749 1703/1703/1749 1766/1766/1749 1767/1767/1749 +f 1678/1678/1750 1677/1677/1750 1740/1740/1750 1741/1741/1750 +f 1731/1731/1751 1730/1730/1751 1793/1793/1751 1794/1794/1751 +f 1705/1705/1752 1704/1704/1752 1767/1767/1752 1768/1768/1752 +f 1679/1679/1753 1678/1678/1753 1741/1741/1753 1742/1742/1753 +f 1732/1732/1754 1731/1731/1754 1794/1794/1754 1795/1795/1754 +f 1706/1706/1755 1705/1705/1755 1768/1768/1755 1769/1769/1755 +f 1680/1680/1756 1679/1679/1756 1742/1742/1756 1743/1743/1756 +f 1733/1733/1757 1732/1732/1757 1795/1795/1757 1796/1796/1757 +f 1707/1707/1758 1706/1706/1758 1769/1769/1758 1770/1770/1758 +f 1681/1681/1759 1680/1680/1759 1743/1743/1759 1744/1744/1759 +f 1734/1734/1760 1733/1733/1760 1796/1796/1760 1797/1797/1760 +f 1708/1708/1761 1707/1707/1761 1770/1770/1761 1771/1771/1761 +f 1682/1682/1762 1681/1681/1762 1744/1744/1762 1745/1745/1762 +f 1735/1735/1763 1734/1734/1763 1797/1797/1763 1798/1798/1763 +f 1709/1709/1764 1708/1708/1764 1771/1771/1764 1772/1772/1764 +f 1683/1683/1765 1682/1682/1765 1745/1745/1765 1746/1746/1765 +f 1736/1736/1766 1735/1735/1766 1798/1798/1766 1799/1799/1766 +f 1710/1710/1767 1709/1709/1767 1772/1772/1767 1773/1773/1767 +f 1684/1684/1768 1683/1683/1768 1746/1746/1768 1747/1747/1768 +f 1737/1737/1769 1736/1736/1769 1799/1799/1769 1800/1800/1769 +f 1711/1711/1770 1710/1710/1770 1773/1773/1770 1774/1774/1770 +f 1685/1685/1771 1684/1684/1771 1747/1747/1771 1748/1748/1771 +f 3818/3971/1772 1737/1737/1772 1800/1800/1772 +f 1712/1712/1773 1711/1711/1773 1774/1774/1773 1775/1775/1773 +f 1686/1686/1774 1685/1685/1774 1748/1748/1774 1749/1749/1774 +f 1713/1713/1775 1712/1712/1775 1775/1775/1775 1776/1776/1775 +f 1687/1687/1776 1686/1686/1776 1749/1749/1776 1750/1750/1776 +f 1714/1714/1777 1713/1713/1777 1776/1776/1777 1777/1777/1777 +f 1688/1688/1778 1687/1687/1778 1750/1750/1778 1751/1751/1778 +f 1715/1715/1779 1714/1714/1779 1777/1777/1779 1778/1778/1779 +f 1689/1689/1780 1688/1688/1780 1751/1751/1780 1752/1752/1780 +f 1716/1716/1781 1715/1715/1781 1778/1778/1781 1779/1779/1781 +f 1690/1690/1782 1689/1689/1782 1752/1752/1782 1753/1753/1782 +f 1717/1717/1783 1716/1716/1783 1779/1779/1783 1780/1780/1783 +f 1691/1691/1784 1690/1690/1784 1753/1753/1784 1754/1754/1784 +f 1718/1718/1785 1717/1717/1785 1780/1780/1785 1781/1781/1785 +f 1692/1692/1786 1691/1691/1786 1754/1754/1786 1755/1755/1786 +f 1719/1719/1787 1718/1718/1787 1781/1781/1787 1782/1782/1787 +f 1693/1693/1788 1692/1692/1788 1755/1755/1788 1756/1756/1788 +f 1720/1720/1789 1719/1719/1789 1782/1782/1789 1783/1783/1789 +f 1694/1694/1790 1693/1693/1790 1756/1756/1790 1757/1757/1790 +f 1721/1721/1791 1720/1720/1791 1783/1783/1791 1784/1784/1791 +f 1695/1695/1792 1694/1694/1792 1757/1757/1792 1758/1758/1792 +f 1787/1787/1793 1786/1786/1793 1849/1849/1793 1850/1850/1793 +f 1761/1761/1794 1760/1760/1794 1823/1823/1794 1824/1824/1794 +f 1788/1788/1795 1787/1787/1795 1850/1850/1795 1851/1851/1795 +f 1762/1762/1796 1761/1761/1796 1824/1824/1796 1825/1825/1796 +f 1789/1789/1797 1788/1788/1797 1851/1851/1797 1852/1852/1797 +f 1763/1763/1798 1762/1762/1798 1825/1825/1798 1826/1826/1798 +f 1790/1790/1799 1789/1789/1799 1852/1852/1799 1853/1853/1799 +f 1764/1764/1800 1763/1763/1800 1826/1826/1800 1827/1827/1800 +f 1738/1738/1801 1990/2018/1801 1801/1801/1801 +f 1791/1791/1802 1790/1790/1802 1853/1853/1802 1854/1854/1802 +f 1765/1765/1803 1764/1764/1803 1827/1827/1803 1828/1828/1803 +f 1739/1739/1804 1738/1738/1804 1801/1801/1804 1802/1802/1804 +f 1792/1792/1805 1791/1791/1805 1854/1854/1805 1855/1855/1805 +f 1766/1766/1806 1765/1765/1806 1828/1828/1806 1829/1829/1806 +f 1740/1740/1807 1739/1739/1807 1802/1802/1807 1803/1803/1807 +f 1793/1793/1808 1792/1792/1808 1855/1855/1808 1856/1856/1808 +f 1767/1767/1809 1766/1766/1809 1829/1829/1809 1830/1830/1809 +f 1741/1741/1810 1740/1740/1810 1803/1803/1810 1804/1804/1810 +f 1794/1794/1811 1793/1793/1811 1856/1856/1811 1857/1857/1811 +f 1768/1768/1812 1767/1767/1812 1830/1830/1812 1831/1831/1812 +f 1742/1742/1813 1741/1741/1813 1804/1804/1813 1805/1805/1813 +f 1795/1795/1814 1794/1794/1814 1857/1857/1814 1858/1858/1814 +f 1769/1769/1815 1768/1768/1815 1831/1831/1815 1832/1832/1815 +f 1743/1743/1816 1742/1742/1816 1805/1805/1816 1806/1806/1816 +f 1796/1796/1817 1795/1795/1817 1858/1858/1817 1859/1859/1817 +f 1770/1770/1818 1769/1769/1818 1832/1832/1818 1833/1833/1818 +f 1744/1744/1819 1743/1743/1819 1806/1806/1819 1807/1807/1819 +f 1797/1797/1820 1796/1796/1820 1859/1859/1820 1860/1860/1820 +f 1771/1771/1821 1770/1770/1821 1833/1833/1821 1834/1834/1821 +f 1745/1745/1822 1744/1744/1822 1807/1807/1822 1808/1808/1822 +f 1798/1798/1823 1797/1797/1823 1860/1860/1823 1861/1861/1823 +f 1772/1772/1824 1771/1771/1824 1834/1834/1824 1835/1835/1824 +f 1746/1746/1825 1745/1745/1825 1808/1808/1825 1809/1809/1825 +f 1799/1799/1826 1798/1798/1826 1861/1861/1826 1862/1862/1826 +f 1773/1773/1827 1772/1772/1827 1835/1835/1827 1836/1836/1827 +f 1747/1747/1828 1746/1746/1828 1809/1809/1828 1810/1810/1828 +f 1800/1800/1829 1799/1799/1829 1862/1862/1829 1863/1863/1829 +f 1774/1774/1830 1773/1773/1830 1836/1836/1830 1837/1837/1830 +f 1748/1748/1831 1747/1747/1831 1810/1810/1831 1811/1811/1831 +f 3818/3972/1832 1800/1800/1832 1863/1863/1832 +f 1775/1775/1833 1774/1774/1833 1837/1837/1833 1838/1838/1833 +f 1749/1749/1834 1748/1748/1834 1811/1811/1834 1812/1812/1834 +f 1776/1776/1835 1775/1775/1835 1838/1838/1835 1839/1839/1835 +f 1750/1750/1836 1749/1749/1836 1812/1812/1836 1813/1813/1836 +f 1777/1777/1837 1776/1776/1837 1839/1839/1837 1840/1840/1837 +f 1751/1751/1838 1750/1750/1838 1813/1813/1838 1814/1814/1838 +f 1778/1778/1839 1777/1777/1839 1840/1840/1839 1841/1841/1839 +f 1752/1752/1840 1751/1751/1840 1814/1814/1840 1815/1815/1840 +f 1779/1779/1841 1778/1778/1841 1841/1841/1841 1842/1842/1841 +f 1753/1753/1842 1752/1752/1842 1815/1815/1842 1816/1816/1842 +f 1780/1780/1843 1779/1779/1843 1842/1842/1843 1843/1843/1843 +f 1754/1754/1844 1753/1753/1844 1816/1816/1844 1817/1817/1844 +f 1781/1781/1845 1780/1780/1845 1843/1843/1845 1844/1844/1845 +f 1755/1755/1846 1754/1754/1846 1817/1817/1846 1818/1818/1846 +f 1782/1782/1847 1781/1781/1847 1844/1844/1847 1845/1845/1847 +f 1756/1756/1848 1755/1755/1848 1818/1818/1848 1819/1819/1848 +f 1783/1783/1849 1782/1782/1849 1845/1845/1849 1846/1846/1849 +f 1757/1757/1850 1756/1756/1850 1819/1819/1850 1820/1820/1850 +f 1784/1784/1851 1783/1783/1851 1846/1846/1851 1847/1847/1851 +f 1758/1758/1852 1757/1757/1852 1820/1820/1852 1821/1821/1852 +f 1785/1785/1853 1784/1784/1853 1847/1847/1853 1848/1848/1853 +f 1759/1759/1854 1758/1758/1854 1821/1821/1854 1822/1822/1854 +f 1786/1786/1855 1785/1785/1855 1848/1848/1855 1849/1849/1855 +f 1760/1760/1856 1759/1759/1856 1822/1822/1856 1823/1823/1856 +f 1852/1852/1857 1851/1851/1857 1914/1914/1857 1915/1915/1857 +f 1826/1826/1858 1825/1825/1858 1888/1888/1858 1889/1889/1858 +f 1853/1853/1859 1852/1852/1859 1915/1915/1859 1916/1916/1859 +f 1827/1827/1860 1826/1826/1860 1889/1889/1860 1890/1890/1860 +f 1801/1801/1861 1990/2019/1861 1864/1864/1861 +f 1854/1854/1862 1853/1853/1862 1916/1916/1862 1917/1917/1862 +f 1828/1828/1863 1827/1827/1863 1890/1890/1863 1891/1891/1863 +f 1802/1802/1864 1801/1801/1864 1864/1864/1864 1865/1865/1864 +f 1855/1855/1865 1854/1854/1865 1917/1917/1865 1918/1918/1865 +f 1829/1829/1866 1828/1828/1866 1891/1891/1866 1892/1892/1866 +f 1803/1803/1867 1802/1802/1867 1865/1865/1867 1866/1866/1867 +f 1856/1856/1868 1855/1855/1868 1918/1918/1868 1919/1919/1868 +f 1830/1830/1869 1829/1829/1869 1892/1892/1869 1893/1893/1869 +f 1804/1804/1870 1803/1803/1870 1866/1866/1870 1867/1867/1870 +f 1857/1857/1871 1856/1856/1871 1919/1919/1871 1920/1920/1871 +f 1831/1831/1872 1830/1830/1872 1893/1893/1872 1894/1894/1872 +f 1805/1805/1873 1804/1804/1873 1867/1867/1873 1868/1868/1873 +f 1858/1858/1874 1857/1857/1874 1920/1920/1874 1921/1921/1874 +f 1832/1832/1875 1831/1831/1875 1894/1894/1875 1895/1895/1875 +f 1806/1806/1876 1805/1805/1876 1868/1868/1876 1869/1869/1876 +f 1859/1859/1877 1858/1858/1877 1921/1921/1877 1922/1922/1877 +f 1833/1833/1878 1832/1832/1878 1895/1895/1878 1896/1896/1878 +f 1807/1807/1879 1806/1806/1879 1869/1869/1879 1870/1870/1879 +f 1860/1860/1880 1859/1859/1880 1922/1922/1880 1923/1923/1880 +f 1834/1834/1881 1833/1833/1881 1896/1896/1881 1897/1897/1881 +f 1808/1808/1882 1807/1807/1882 1870/1870/1882 1871/1871/1882 +f 1861/1861/1883 1860/1860/1883 1923/1923/1883 1924/1924/1883 +f 1835/1835/1884 1834/1834/1884 1897/1897/1884 1898/1898/1884 +f 1809/1809/1885 1808/1808/1885 1871/1871/1885 1872/1872/1885 +f 1862/1862/1886 1861/1861/1886 1924/1924/1886 1925/1925/1886 +f 1836/1836/1887 1835/1835/1887 1898/1898/1887 1899/1899/1887 +f 1810/1810/1888 1809/1809/1888 1872/1872/1888 1873/1873/1888 +f 1863/1863/1889 1862/1862/1889 1925/1925/1889 1926/1926/1889 +f 1837/1837/1890 1836/1836/1890 1899/1899/1890 1900/1900/1890 +f 1811/1811/1891 1810/1810/1891 1873/1873/1891 1874/1874/1891 +f 3818/3973/1892 1863/1863/1892 1926/1926/1892 +f 1838/1838/1893 1837/1837/1893 1900/1900/1893 1901/1901/1893 +f 1812/1812/1894 1811/1811/1894 1874/1874/1894 1875/1875/1894 +f 1839/1839/1895 1838/1838/1895 1901/1901/1895 1902/1902/1895 +f 1813/1813/1896 1812/1812/1896 1875/1875/1896 1876/1876/1896 +f 1840/1840/1897 1839/1839/1897 1902/1902/1897 1903/1903/1897 +f 1814/1814/1898 1813/1813/1898 1876/1876/1898 1877/1877/1898 +f 1841/1841/1899 1840/1840/1899 1903/1903/1899 1904/1904/1899 +f 1815/1815/1900 1814/1814/1900 1877/1877/1900 1878/1878/1900 +f 1842/1842/1901 1841/1841/1901 1904/1904/1901 1905/1905/1901 +f 1816/1816/1902 1815/1815/1902 1878/1878/1902 1879/1879/1902 +f 1843/1843/1903 1842/1842/1903 1905/1905/1903 1906/1906/1903 +f 1817/1817/1904 1816/1816/1904 1879/1879/1904 1880/1880/1904 +f 1844/1844/1905 1843/1843/1905 1906/1906/1905 1907/1907/1905 +f 1818/1818/1906 1817/1817/1906 1880/1880/1906 1881/1881/1906 +f 1845/1845/1907 1844/1844/1907 1907/1907/1907 1908/1908/1907 +f 1819/1819/1908 1818/1818/1908 1881/1881/1908 1882/1882/1908 +f 1846/1846/1909 1845/1845/1909 1908/1908/1909 1909/1909/1909 +f 1820/1820/1910 1819/1819/1910 1882/1882/1910 1883/1883/1910 +f 1847/1847/1911 1846/1846/1911 1909/1909/1911 1910/1910/1911 +f 1821/1821/1912 1820/1820/1912 1883/1883/1912 1884/1884/1912 +f 1848/1848/1913 1847/1847/1913 1910/1910/1913 1911/1911/1913 +f 1822/1822/1914 1821/1821/1914 1884/1884/1914 1885/1885/1914 +f 1849/1849/1915 1848/1848/1915 1911/1911/1915 1912/1912/1915 +f 1823/1823/1916 1822/1822/1916 1885/1885/1916 1886/1886/1916 +f 1850/1850/1917 1849/1849/1917 1912/1912/1917 1913/1913/1917 +f 1824/1824/1918 1823/1823/1918 1886/1886/1918 1887/1887/1918 +f 1851/1851/1919 1850/1850/1919 1913/1913/1919 1914/1914/1919 +f 1825/1825/1920 1824/1824/1920 1887/1887/1920 1888/1888/1920 +f 1917/1917/1921 1916/1916/1921 1979/1979/1921 1980/1980/1921 +f 1891/1891/1922 1890/1890/1922 1953/1953/1922 1954/1954/1922 +f 1865/1865/1923 1864/1864/1923 1927/1927/1923 1928/1928/1923 +f 1918/1918/1924 1917/1917/1924 1980/1980/1924 1981/1981/1924 +f 1892/1892/1925 1891/1891/1925 1954/1954/1925 1955/1955/1925 +f 1866/1866/1926 1865/1865/1926 1928/1928/1926 1929/1929/1926 +f 1919/1919/1927 1918/1918/1927 1981/1981/1927 1982/1982/1927 +f 1893/1893/1928 1892/1892/1928 1955/1955/1928 1956/1956/1928 +f 1867/1867/1929 1866/1866/1929 1929/1929/1929 1930/1930/1929 +f 1920/1920/1930 1919/1919/1930 1982/1982/1930 1983/1983/1930 +f 1894/1894/1931 1893/1893/1931 1956/1956/1931 1957/1957/1931 +f 1868/1868/1932 1867/1867/1932 1930/1930/1932 1931/1931/1932 +f 1921/1921/1933 1920/1920/1933 1983/1983/1933 1984/1984/1933 +f 1895/1895/1934 1894/1894/1934 1957/1957/1934 1958/1958/1934 +f 1869/1869/1935 1868/1868/1935 1931/1931/1935 1932/1932/1935 +f 1922/1922/1936 1921/1921/1936 1984/1984/1936 1985/1985/1936 +f 1896/1896/1937 1895/1895/1937 1958/1958/1937 1959/1959/1937 +f 1870/1870/1938 1869/1869/1938 1932/1932/1938 1933/1933/1938 +f 1923/1923/1939 1922/1922/1939 1985/1985/1939 1986/1986/1939 +f 1897/1897/1940 1896/1896/1940 1959/1959/1940 1960/1960/1940 +f 1871/1871/1941 1870/1870/1941 1933/1933/1941 1934/1934/1941 +f 1924/1924/1942 1923/1923/1942 1986/1986/1942 1987/1987/1942 +f 1898/1898/1943 1897/1897/1943 1960/1960/1943 1961/1961/1943 +f 1872/1872/1944 1871/1871/1944 1934/1934/1944 1935/1935/1944 +f 1925/1925/1945 1924/1924/1945 1987/1987/1945 1988/1988/1945 +f 1899/1899/1946 1898/1898/1946 1961/1961/1946 1962/1962/1946 +f 1873/1873/1947 1872/1872/1947 1935/1935/1947 1936/1936/1947 +f 1926/1926/1948 1925/1925/1948 1988/1988/1948 1989/1989/1948 +f 1900/1900/1949 1899/1899/1949 1962/1962/1949 1963/1963/1949 +f 1874/1874/1950 1873/1873/1950 1936/1936/1950 1937/1937/1950 +f 3818/3974/1951 1926/1926/1951 1989/1989/1951 +f 1901/1901/1952 1900/1900/1952 1963/1963/1952 1964/1964/1952 +f 1875/1875/1953 1874/1874/1953 1937/1937/1953 1938/1938/1953 +f 1902/1902/1954 1901/1901/1954 1964/1964/1954 1965/1965/1954 +f 1876/1876/1955 1875/1875/1955 1938/1938/1955 1939/1939/1955 +f 1903/1903/1956 1902/1902/1956 1965/1965/1956 1966/1966/1956 +f 1877/1877/1957 1876/1876/1957 1939/1939/1957 1940/1940/1957 +f 1904/1904/1958 1903/1903/1958 1966/1966/1958 1967/1967/1958 +f 1878/1878/1959 1877/1877/1959 1940/1940/1959 1941/1941/1959 +f 1905/1905/1960 1904/1904/1960 1967/1967/1960 1968/1968/1960 +f 1879/1879/1961 1878/1878/1961 1941/1941/1961 1942/1942/1961 +f 1906/1906/1962 1905/1905/1962 1968/1968/1962 1969/1969/1962 +f 1880/1880/1963 1879/1879/1963 1942/1942/1963 1943/1943/1963 +f 1907/1907/1964 1906/1906/1964 1969/1969/1964 1970/1970/1964 +f 1881/1881/1965 1880/1880/1965 1943/1943/1965 1944/1944/1965 +f 1908/1908/1966 1907/1907/1966 1970/1970/1966 1971/1971/1966 +f 1882/1882/1967 1881/1881/1967 1944/1944/1967 1945/1945/1967 +f 1909/1909/1968 1908/1908/1968 1971/1971/1968 1972/1972/1968 +f 1883/1883/1969 1882/1882/1969 1945/1945/1969 1946/1946/1969 +f 1910/1910/1970 1909/1909/1970 1972/1972/1970 1973/1973/1970 +f 1884/1884/1971 1883/1883/1971 1946/1946/1971 1947/1947/1971 +f 1911/1911/1972 1910/1910/1972 1973/1973/1972 1974/1974/1972 +f 1885/1885/1973 1884/1884/1973 1947/1947/1973 1948/1948/1973 +f 1912/1912/1974 1911/1911/1974 1974/1974/1974 1975/1975/1974 +f 1886/1886/1975 1885/1885/1975 1948/1948/1975 1949/1949/1975 +f 1913/1913/1976 1912/1912/1976 1975/1975/1976 1976/1976/1976 +f 1887/1887/1977 1886/1886/1977 1949/1949/1977 1950/1950/1977 +f 1914/1914/1978 1913/1913/1978 1976/1976/1978 1977/1977/1978 +f 1888/1888/1979 1887/1887/1979 1950/1950/1979 1951/1951/1979 +f 1915/1915/1980 1914/1914/1980 1977/1977/1980 1978/1978/1980 +f 1889/1889/1981 1888/1888/1981 1951/1951/1981 1952/1952/1981 +f 1916/1916/1982 1915/1915/1982 1978/1978/1982 1979/1979/1982 +f 1890/1890/1983 1889/1889/1983 1952/1952/1983 1953/1953/1983 +f 1864/1864/1984 1990/2020/1984 1927/1927/1984 +f 1982/1982/1985 1981/1981/1985 2045/2108/1985 2046/2109/1985 +f 1956/1956/1986 1955/1955/1986 2019/2082/1986 2020/2083/1986 +f 1930/1930/1987 1929/1929/1987 1993/2056/1987 1994/2057/1987 +f 1983/1983/1988 1982/1982/1988 2046/2109/1988 2047/2110/1988 +f 1957/1957/1989 1956/1956/1989 2020/2083/1989 2021/2084/1989 +f 1931/1931/1990 1930/1930/1990 1994/2057/1990 1995/2058/1990 +f 1984/1984/1991 1983/1983/1991 2047/2110/1991 2048/2111/1991 +f 1958/1958/1992 1957/1957/1992 2021/2084/1992 2022/2085/1992 +f 1932/1932/1993 1931/1931/1993 1995/2058/1993 1996/2059/1993 +f 1985/1985/1994 1984/1984/1994 2048/2111/1994 2049/2112/1994 +f 1959/1959/1995 1958/1958/1995 2022/2085/1995 2023/2086/1995 +f 1933/1933/1996 1932/1932/1996 1996/2059/1996 1997/2060/1996 +f 1986/1986/1997 1985/1985/1997 2049/2112/1997 2050/2113/1997 +f 1960/1960/1998 1959/1959/1998 2023/2086/1998 2024/2087/1998 +f 1934/1934/1999 1933/1933/1999 1997/2060/1999 1998/2061/1999 +f 1987/1987/2000 1986/1986/2000 2050/2113/2000 2051/2114/2000 +f 1961/1961/2001 1960/1960/2001 2024/2087/2001 2025/2088/2001 +f 1935/1935/2002 1934/1934/2002 1998/2061/2002 1999/2062/2002 +f 1988/1988/2003 1987/1987/2003 2051/2114/2003 2052/2115/2003 +f 1962/1962/2004 1961/1961/2004 2025/2088/2004 2026/2089/2004 +f 1936/1936/2005 1935/1935/2005 1999/2062/2005 2000/2063/2005 +f 1989/1989/2006 1988/1988/2006 2052/2115/2006 2053/2116/2006 +f 1963/1963/2007 1962/1962/2007 2026/2089/2007 2027/2090/2007 +f 1937/1937/2008 1936/1936/2008 2000/2063/2008 2001/2064/2008 +f 3818/3975/2009 1989/1989/2009 2053/2116/2009 +f 1964/1964/2010 1963/1963/2010 2027/2090/2010 2028/2091/2010 +f 1938/1938/2011 1937/1937/2011 2001/2064/2011 2002/2065/2011 +f 1965/1965/2012 1964/1964/2012 2028/2091/2012 2029/2092/2012 +f 1939/1939/2013 1938/1938/2013 2002/2065/2013 2003/2066/2013 +f 1966/1966/2014 1965/1965/2014 2029/2092/2014 2030/2093/2014 +f 1940/1940/2015 1939/1939/2015 2003/2066/2015 2004/2067/2015 +f 1967/1967/2016 1966/1966/2016 2030/2093/2016 2031/2094/2016 +f 1941/1941/2017 1940/1940/2017 2004/2067/2017 2005/2068/2017 +f 1968/1968/2018 1967/1967/2018 2031/2094/2018 2032/2095/2018 +f 1942/1942/2019 1941/1941/2019 2005/2068/2019 2006/2069/2019 +f 1969/1969/2020 1968/1968/2020 2032/2095/2020 2033/2096/2020 +f 1943/1943/2021 1942/1942/2021 2006/2069/2021 2007/2070/2021 +f 1970/1970/2022 1969/1969/2022 2033/2096/2022 2034/2097/2022 +f 1944/1944/2023 1943/1943/2023 2007/2070/2023 2008/2071/2023 +f 1971/1971/2024 1970/1970/2024 2034/2097/2024 2035/2098/2024 +f 1945/1945/2025 1944/1944/2025 2008/2071/2025 2009/2072/2025 +f 1972/1972/2026 1971/1971/2026 2035/2098/2026 2036/2099/2026 +f 1946/1946/2027 1945/1945/2027 2009/2072/2027 2010/2073/2027 +f 1973/1973/2028 1972/1972/2028 2036/2099/2028 2037/2100/2028 +f 1947/1947/2029 1946/1946/2029 2010/2073/2029 2011/2074/2029 +f 1974/1974/2030 1973/1973/2030 2037/2100/2030 2038/2101/2030 +f 1948/1948/2031 1947/1947/2031 2011/2074/2031 2012/2075/2031 +f 1975/1975/2032 1974/1974/2032 2038/2101/2032 2039/2102/2032 +f 1949/1949/2033 1948/1948/2033 2012/2075/2033 2013/2076/2033 +f 1976/1976/2034 1975/1975/2034 2039/2102/2034 2040/2103/2034 +f 1950/1950/2035 1949/1949/2035 2013/2076/2035 2014/2077/2035 +f 1977/1977/2036 1976/1976/2036 2040/2103/2036 2041/2104/2036 +f 1951/1951/2037 1950/1950/2037 2014/2077/2037 2015/2078/2037 +f 1978/1978/2038 1977/1977/2038 2041/2104/2038 2042/2105/2038 +f 1952/1952/2039 1951/1951/2039 2015/2078/2039 2016/2079/2039 +f 1979/1979/2040 1978/1978/2040 2042/2105/2040 2043/2106/2040 +f 1953/1953/2041 1952/1952/2041 2016/2079/2041 2017/2080/2041 +f 1927/1927/2042 1990/2021/2042 1991/2054/2042 +f 1980/1980/2043 1979/1979/2043 2043/2106/2043 2044/2107/2043 +f 1954/1954/2044 1953/1953/2044 2017/2080/2044 2018/2081/2044 +f 1928/1928/2045 1927/1927/2045 1991/2054/2045 1992/2055/2045 +f 1981/1981/2046 1980/1980/2046 2044/2107/2046 2045/2108/2046 +f 1955/1955/2047 1954/1954/2047 2018/2081/2047 2019/2082/2047 +f 1929/1929/2048 1928/1928/2048 1992/2055/2048 1993/2056/2048 +f 2048/2111/2049 2047/2110/2049 2110/2173/2049 2111/2174/2049 +f 2022/2085/2050 2021/2084/2050 2084/2147/2050 2085/2148/2050 +f 1996/2059/2051 1995/2058/2051 2058/2121/2051 2059/2122/2051 +f 2049/2112/2052 2048/2111/2052 2111/2174/2052 2112/2175/2052 +f 2023/2086/2053 2022/2085/2053 2085/2148/2053 2086/2149/2053 +f 1997/2060/2054 1996/2059/2054 2059/2122/2054 2060/2123/2054 +f 2050/2113/2055 2049/2112/2055 2112/2175/2055 2113/2176/2055 +f 2024/2087/2056 2023/2086/2056 2086/2149/2056 2087/2150/2056 +f 1998/2061/2057 1997/2060/2057 2060/2123/2057 2061/2124/2057 +f 2051/2114/2058 2050/2113/2058 2113/2176/2058 2114/2177/2058 +f 2025/2088/2059 2024/2087/2059 2087/2150/2059 2088/2151/2059 +f 1999/2062/2060 1998/2061/2060 2061/2124/2060 2062/2125/2060 +f 2052/2115/2061 2051/2114/2061 2114/2177/2061 2115/2178/2061 +f 2026/2089/2062 2025/2088/2062 2088/2151/2062 2089/2152/2062 +f 2000/2063/2063 1999/2062/2063 2062/2125/2063 2063/2126/2063 +f 2053/2116/2064 2052/2115/2064 2115/2178/2064 2116/2179/2064 +f 2027/2090/2065 2026/2089/2065 2089/2152/2065 2090/2153/2065 +f 2001/2064/2066 2000/2063/2066 2063/2126/2066 2064/2127/2066 +f 3818/3976/2067 2053/2116/2067 2116/2179/2067 +f 2028/2091/2068 2027/2090/2068 2090/2153/2068 2091/2154/2068 +f 2002/2065/2069 2001/2064/2069 2064/2127/2069 2065/2128/2069 +f 2029/2092/2070 2028/2091/2070 2091/2154/2070 2092/2155/2070 +f 2003/2066/2071 2002/2065/2071 2065/2128/2071 2066/2129/2071 +f 2030/2093/2072 2029/2092/2072 2092/2155/2072 2093/2156/2072 +f 2004/2067/2073 2003/2066/2073 2066/2129/2073 2067/2130/2073 +f 2031/2094/2074 2030/2093/2074 2093/2156/2074 2094/2157/2074 +f 2005/2068/2075 2004/2067/2075 2067/2130/2075 2068/2131/2075 +f 2032/2095/2076 2031/2094/2076 2094/2157/2076 2095/2158/2076 +f 2006/2069/2077 2005/2068/2077 2068/2131/2077 2069/2132/2077 +f 2033/2096/2078 2032/2095/2078 2095/2158/2078 2096/2159/2078 +f 2007/2070/2079 2006/2069/2079 2069/2132/2079 2070/2133/2079 +f 2034/2097/2080 2033/2096/2080 2096/2159/2080 2097/2160/2080 +f 2008/2071/2081 2007/2070/2081 2070/2133/2081 2071/2134/2081 +f 2035/2098/2082 2034/2097/2082 2097/2160/2082 2098/2161/2082 +f 2009/2072/2083 2008/2071/2083 2071/2134/2083 2072/2135/2083 +f 2036/2099/2084 2035/2098/2084 2098/2161/2084 2099/2162/2084 +f 2010/2073/2085 2009/2072/2085 2072/2135/2085 2073/2136/2085 +f 2037/2100/2086 2036/2099/2086 2099/2162/2086 2100/2163/2086 +f 2011/2074/2087 2010/2073/2087 2073/2136/2087 2074/2137/2087 +f 2038/2101/2088 2037/2100/2088 2100/2163/2088 2101/2164/2088 +f 2012/2075/2089 2011/2074/2089 2074/2137/2089 2075/2138/2089 +f 2039/2102/2090 2038/2101/2090 2101/2164/2090 2102/2165/2090 +f 2013/2076/2091 2012/2075/2091 2075/2138/2091 2076/2139/2091 +f 2040/2103/2092 2039/2102/2092 2102/2165/2092 2103/2166/2092 +f 2014/2077/2093 2013/2076/2093 2076/2139/2093 2077/2140/2093 +f 2041/2104/2094 2040/2103/2094 2103/2166/2094 2104/2167/2094 +f 2015/2078/2095 2014/2077/2095 2077/2140/2095 2078/2141/2095 +f 2042/2105/2096 2041/2104/2096 2104/2167/2096 2105/2168/2096 +f 2016/2079/2097 2015/2078/2097 2078/2141/2097 2079/2142/2097 +f 2043/2106/2098 2042/2105/2098 2105/2168/2098 2106/2169/2098 +f 2017/2080/2099 2016/2079/2099 2079/2142/2099 2080/2143/2099 +f 1991/2054/2100 1990/2022/2100 2054/2117/2100 +f 2044/2107/2101 2043/2106/2101 2106/2169/2101 2107/2170/2101 +f 2018/2081/2102 2017/2080/2102 2080/2143/2102 2081/2144/2102 +f 1992/2055/2103 1991/2054/2103 2054/2117/2103 2055/2118/2103 +f 2045/2108/2104 2044/2107/2104 2107/2170/2104 2108/2171/2104 +f 2019/2082/2105 2018/2081/2105 2081/2144/2105 2082/2145/2105 +f 1993/2056/2106 1992/2055/2106 2055/2118/2106 2056/2119/2106 +f 2046/2109/2107 2045/2108/2107 2108/2171/2107 2109/2172/2107 +f 2020/2083/2108 2019/2082/2108 2082/2145/2108 2083/2146/2108 +f 1994/2057/2109 1993/2056/2109 2056/2119/2109 2057/2120/2109 +f 2047/2110/2110 2046/2109/2110 2109/2172/2110 2110/2173/2110 +f 2021/2084/2111 2020/2083/2111 2083/2146/2111 2084/2147/2111 +f 1995/2058/2112 1994/2057/2112 2057/2120/2112 2058/2121/2112 +f 2113/2176/2113 2112/2175/2113 2175/2238/2113 2176/2239/2113 +f 2087/2150/2114 2086/2149/2114 2149/2212/2114 2150/2213/2114 +f 2061/2124/2115 2060/2123/2115 2123/2186/2115 2124/2187/2115 +f 2114/2177/2116 2113/2176/2116 2176/2239/2116 2177/2240/2116 +f 2088/2151/2117 2087/2150/2117 2150/2213/2117 2151/2214/2117 +f 2062/2125/2118 2061/2124/2118 2124/2187/2118 2125/2188/2118 +f 2115/2178/2119 2114/2177/2119 2177/2240/2119 2178/2241/2119 +f 2089/2152/2120 2088/2151/2120 2151/2214/2120 2152/2215/2120 +f 2063/2126/2121 2062/2125/2121 2125/2188/2121 2126/2189/2121 +f 2116/2179/2122 2115/2178/2122 2178/2241/2122 2179/2242/2122 +f 2090/2153/2123 2089/2152/2123 2152/2215/2123 2153/2216/2123 +f 2064/2127/2124 2063/2126/2124 2126/2189/2124 2127/2190/2124 +f 3818/3977/2125 2116/2179/2125 2179/2242/2125 +f 2091/2154/2126 2090/2153/2126 2153/2216/2126 2154/2217/2126 +f 2065/2128/2127 2064/2127/2127 2127/2190/2127 2128/2191/2127 +f 2092/2155/2128 2091/2154/2128 2154/2217/2128 2155/2218/2128 +f 2066/2129/2129 2065/2128/2129 2128/2191/2129 2129/2192/2129 +f 2093/2156/2130 2092/2155/2130 2155/2218/2130 2156/2219/2130 +f 2067/2130/2131 2066/2129/2131 2129/2192/2131 2130/2193/2131 +f 2094/2157/2132 2093/2156/2132 2156/2219/2132 2157/2220/2132 +f 2068/2131/2133 2067/2130/2133 2130/2193/2133 2131/2194/2133 +f 2095/2158/2134 2094/2157/2134 2157/2220/2134 2158/2221/2134 +f 2069/2132/2135 2068/2131/2135 2131/2194/2135 2132/2195/2135 +f 2096/2159/2136 2095/2158/2136 2158/2221/2136 2159/2222/2136 +f 2070/2133/2137 2069/2132/2137 2132/2195/2137 2133/2196/2137 +f 2097/2160/2138 2096/2159/2138 2159/2222/2138 2160/2223/2138 +f 2071/2134/2139 2070/2133/2139 2133/2196/2139 2134/2197/2139 +f 2098/2161/2140 2097/2160/2140 2160/2223/2140 2161/2224/2140 +f 2072/2135/2141 2071/2134/2141 2134/2197/2141 2135/2198/2141 +f 2099/2162/2142 2098/2161/2142 2161/2224/2142 2162/2225/2142 +f 2073/2136/2143 2072/2135/2143 2135/2198/2143 2136/2199/2143 +f 2100/2163/2144 2099/2162/2144 2162/2225/2144 2163/2226/2144 +f 2074/2137/2145 2073/2136/2145 2136/2199/2145 2137/2200/2145 +f 2101/2164/2146 2100/2163/2146 2163/2226/2146 2164/2227/2146 +f 2075/2138/2147 2074/2137/2147 2137/2200/2147 2138/2201/2147 +f 2102/2165/2148 2101/2164/2148 2164/2227/2148 2165/2228/2148 +f 2076/2139/2149 2075/2138/2149 2138/2201/2149 2139/2202/2149 +f 2103/2166/2150 2102/2165/2150 2165/2228/2150 2166/2229/2150 +f 2077/2140/2151 2076/2139/2151 2139/2202/2151 2140/2203/2151 +f 2104/2167/2152 2103/2166/2152 2166/2229/2152 2167/2230/2152 +f 2078/2141/2153 2077/2140/2153 2140/2203/2153 2141/2204/2153 +f 2105/2168/2154 2104/2167/2154 2167/2230/2154 2168/2231/2154 +f 2079/2142/2155 2078/2141/2155 2141/2204/2155 2142/2205/2155 +f 2106/2169/2156 2105/2168/2156 2168/2231/2156 2169/2232/2156 +f 2080/2143/2157 2079/2142/2157 2142/2205/2157 2143/2206/2157 +f 2054/2117/2158 1990/2023/2158 2117/2180/2158 +f 2107/2170/2159 2106/2169/2159 2169/2232/2159 2170/2233/2159 +f 2081/2144/2160 2080/2143/2160 2143/2206/2160 2144/2207/2160 +f 2055/2118/2161 2054/2117/2161 2117/2180/2161 2118/2181/2161 +f 2108/2171/2162 2107/2170/2162 2170/2233/2162 2171/2234/2162 +f 2082/2145/2163 2081/2144/2163 2144/2207/2163 2145/2208/2163 +f 2056/2119/2164 2055/2118/2164 2118/2181/2164 2119/2182/2164 +f 2109/2172/2165 2108/2171/2165 2171/2234/2165 2172/2235/2165 +f 2083/2146/2166 2082/2145/2166 2145/2208/2166 2146/2209/2166 +f 2057/2120/2167 2056/2119/2167 2119/2182/2167 2120/2183/2167 +f 2110/2173/2168 2109/2172/2168 2172/2235/2168 2173/2236/2168 +f 2084/2147/2169 2083/2146/2169 2146/2209/2169 2147/2210/2169 +f 2058/2121/2170 2057/2120/2170 2120/2183/2170 2121/2184/2170 +f 2111/2174/2171 2110/2173/2171 2173/2236/2171 2174/2237/2171 +f 2085/2148/2172 2084/2147/2172 2147/2210/2172 2148/2211/2172 +f 2059/2122/2173 2058/2121/2173 2121/2184/2173 2122/2185/2173 +f 2112/2175/2174 2111/2174/2174 2174/2237/2174 2175/2238/2174 +f 2086/2149/2175 2085/2148/2175 2148/2211/2175 2149/2212/2175 +f 2060/2123/2176 2059/2122/2176 2122/2185/2176 2123/2186/2176 +f 2178/2241/2177 2177/2240/2177 2240/2303/2177 2241/2304/2177 +f 2152/2215/2178 2151/2214/2178 2214/2277/2178 2215/2278/2178 +f 2126/2189/2179 2125/2188/2179 2188/2251/2179 2189/2252/2179 +f 2179/2242/2180 2178/2241/2180 2241/2304/2180 2242/2305/2180 +f 2153/2216/2181 2152/2215/2181 2215/2278/2181 2216/2279/2181 +f 2127/2190/2182 2126/2189/2182 2189/2252/2182 2190/2253/2182 +f 3818/3978/2183 2179/2242/2183 2242/2305/2183 +f 2154/2217/2184 2153/2216/2184 2216/2279/2184 2217/2280/2184 +f 2128/2191/2185 2127/2190/2185 2190/2253/2185 2191/2254/2185 +f 2155/2218/2186 2154/2217/2186 2217/2280/2186 2218/2281/2186 +f 2129/2192/2187 2128/2191/2187 2191/2254/2187 2192/2255/2187 +f 2156/2219/2188 2155/2218/2188 2218/2281/2188 2219/2282/2188 +f 2130/2193/2189 2129/2192/2189 2192/2255/2189 2193/2256/2189 +f 2157/2220/2190 2156/2219/2190 2219/2282/2190 2220/2283/2190 +f 2131/2194/2191 2130/2193/2191 2193/2256/2191 2194/2257/2191 +f 2158/2221/2192 2157/2220/2192 2220/2283/2192 2221/2284/2192 +f 2132/2195/2193 2131/2194/2193 2194/2257/2193 2195/2258/2193 +f 2159/2222/2194 2158/2221/2194 2221/2284/2194 2222/2285/2194 +f 2133/2196/2195 2132/2195/2195 2195/2258/2195 2196/2259/2195 +f 2160/2223/2196 2159/2222/2196 2222/2285/2196 2223/2286/2196 +f 2134/2197/2197 2133/2196/2197 2196/2259/2197 2197/2260/2197 +f 2161/2224/2198 2160/2223/2198 2223/2286/2198 2224/2287/2198 +f 2135/2198/2199 2134/2197/2199 2197/2260/2199 2198/2261/2199 +f 2162/2225/2200 2161/2224/2200 2224/2287/2200 2225/2288/2200 +f 2136/2199/2201 2135/2198/2201 2198/2261/2201 2199/2262/2201 +f 2163/2226/2202 2162/2225/2202 2225/2288/2202 2226/2289/2202 +f 2137/2200/2203 2136/2199/2203 2199/2262/2203 2200/2263/2203 +f 2164/2227/2204 2163/2226/2204 2226/2289/2204 2227/2290/2204 +f 2138/2201/2205 2137/2200/2205 2200/2263/2205 2201/2264/2205 +f 2165/2228/2206 2164/2227/2206 2227/2290/2206 2228/2291/2206 +f 2139/2202/2207 2138/2201/2207 2201/2264/2207 2202/2265/2207 +f 2166/2229/2208 2165/2228/2208 2228/2291/2208 2229/2292/2208 +f 2140/2203/2209 2139/2202/2209 2202/2265/2209 2203/2266/2209 +f 2167/2230/2210 2166/2229/2210 2229/2292/2210 2230/2293/2210 +f 2141/2204/2211 2140/2203/2211 2203/2266/2211 2204/2267/2211 +f 2168/2231/2212 2167/2230/2212 2230/2293/2212 2231/2294/2212 +f 2142/2205/2213 2141/2204/2213 2204/2267/2213 2205/2268/2213 +f 2169/2232/2214 2168/2231/2214 2231/2294/2214 2232/2295/2214 +f 2143/2206/2215 2142/2205/2215 2205/2268/2215 2206/2269/2215 +f 2117/2180/2216 1990/2024/2216 2180/2243/2216 +f 2170/2233/2217 2169/2232/2217 2232/2295/2217 2233/2296/2217 +f 2144/2207/2218 2143/2206/2218 2206/2269/2218 2207/2270/2218 +f 2118/2181/2219 2117/2180/2219 2180/2243/2219 2181/2244/2219 +f 2171/2234/2220 2170/2233/2220 2233/2296/2220 2234/2297/2220 +f 2145/2208/2221 2144/2207/2221 2207/2270/2221 2208/2271/2221 +f 2119/2182/2222 2118/2181/2222 2181/2244/2222 2182/2245/2222 +f 2172/2235/2223 2171/2234/2223 2234/2297/2223 2235/2298/2223 +f 2146/2209/2224 2145/2208/2224 2208/2271/2224 2209/2272/2224 +f 2120/2183/2225 2119/2182/2225 2182/2245/2225 2183/2246/2225 +f 2173/2236/2226 2172/2235/2226 2235/2298/2226 2236/2299/2226 +f 2147/2210/2227 2146/2209/2227 2209/2272/2227 2210/2273/2227 +f 2121/2184/2228 2120/2183/2228 2183/2246/2228 2184/2247/2228 +f 2174/2237/2229 2173/2236/2229 2236/2299/2229 2237/2300/2229 +f 2148/2211/2230 2147/2210/2230 2210/2273/2230 2211/2274/2230 +f 2122/2185/2231 2121/2184/2231 2184/2247/2231 2185/2248/2231 +f 2175/2238/2232 2174/2237/2232 2237/2300/2232 2238/2301/2232 +f 2149/2212/2233 2148/2211/2233 2211/2274/2233 2212/2275/2233 +f 2123/2186/2234 2122/2185/2234 2185/2248/2234 2186/2249/2234 +f 2176/2239/2235 2175/2238/2235 2238/2301/2235 2239/2302/2235 +f 2150/2213/2236 2149/2212/2236 2212/2275/2236 2213/2276/2236 +f 2124/2187/2237 2123/2186/2237 2186/2249/2237 2187/2250/2237 +f 2177/2240/2238 2176/2239/2238 2239/2302/2238 2240/2303/2238 +f 2151/2214/2239 2150/2213/2239 2213/2276/2239 2214/2277/2239 +f 2125/2188/2240 2124/2187/2240 2187/2250/2240 2188/2251/2240 +f 3818/3979/2241 2242/2305/2241 2305/2368/2241 +f 2217/2280/2242 2216/2279/2242 2279/2342/2242 2280/2343/2242 +f 2191/2254/2243 2190/2253/2243 2253/2316/2243 2254/2317/2243 +f 2218/2281/2244 2217/2280/2244 2280/2343/2244 2281/2344/2244 +f 2192/2255/2245 2191/2254/2245 2254/2317/2245 2255/2318/2245 +f 2219/2282/2246 2218/2281/2246 2281/2344/2246 2282/2345/2246 +f 2193/2256/2247 2192/2255/2247 2255/2318/2247 2256/2319/2247 +f 2220/2283/2248 2219/2282/2248 2282/2345/2248 2283/2346/2248 +f 2194/2257/2249 2193/2256/2249 2256/2319/2249 2257/2320/2249 +f 2221/2284/2250 2220/2283/2250 2283/2346/2250 2284/2347/2250 +f 2195/2258/2251 2194/2257/2251 2257/2320/2251 2258/2321/2251 +f 2222/2285/2252 2221/2284/2252 2284/2347/2252 2285/2348/2252 +f 2196/2259/2253 2195/2258/2253 2258/2321/2253 2259/2322/2253 +f 2223/2286/2254 2222/2285/2254 2285/2348/2254 2286/2349/2254 +f 2197/2260/2255 2196/2259/2255 2259/2322/2255 2260/2323/2255 +f 2224/2287/2256 2223/2286/2256 2286/2349/2256 2287/2350/2256 +f 2198/2261/2257 2197/2260/2257 2260/2323/2257 2261/2324/2257 +f 2225/2288/2258 2224/2287/2258 2287/2350/2258 2288/2351/2258 +f 2199/2262/2259 2198/2261/2259 2261/2324/2259 2262/2325/2259 +f 2226/2289/2260 2225/2288/2260 2288/2351/2260 2289/2352/2260 +f 2200/2263/2261 2199/2262/2261 2262/2325/2261 2263/2326/2261 +f 2227/2290/2262 2226/2289/2262 2289/2352/2262 2290/2353/2262 +f 2201/2264/2263 2200/2263/2263 2263/2326/2263 2264/2327/2263 +f 2228/2291/2264 2227/2290/2264 2290/2353/2264 2291/2354/2264 +f 2202/2265/2265 2201/2264/2265 2264/2327/2265 2265/2328/2265 +f 2229/2292/2266 2228/2291/2266 2291/2354/2266 2292/2355/2266 +f 2203/2266/2267 2202/2265/2267 2265/2328/2267 2266/2329/2267 +f 2230/2293/2268 2229/2292/2268 2292/2355/2268 2293/2356/2268 +f 2204/2267/2269 2203/2266/2269 2266/2329/2269 2267/2330/2269 +f 2231/2294/2270 2230/2293/2270 2293/2356/2270 2294/2357/2270 +f 2205/2268/2271 2204/2267/2271 2267/2330/2271 2268/2331/2271 +f 2232/2295/2272 2231/2294/2272 2294/2357/2272 2295/2358/2272 +f 2206/2269/2273 2205/2268/2273 2268/2331/2273 2269/2332/2273 +f 2180/2243/2274 1990/2025/2274 2243/2306/2274 +f 2233/2296/2275 2232/2295/2275 2295/2358/2275 2296/2359/2275 +f 2207/2270/2276 2206/2269/2276 2269/2332/2276 2270/2333/2276 +f 2181/2244/2277 2180/2243/2277 2243/2306/2277 2244/2307/2277 +f 2234/2297/2278 2233/2296/2278 2296/2359/2278 2297/2360/2278 +f 2208/2271/2279 2207/2270/2279 2270/2333/2279 2271/2334/2279 +f 2182/2245/2280 2181/2244/2280 2244/2307/2280 2245/2308/2280 +f 2235/2298/2281 2234/2297/2281 2297/2360/2281 2298/2361/2281 +f 2209/2272/2282 2208/2271/2282 2271/2334/2282 2272/2335/2282 +f 2183/2246/2283 2182/2245/2283 2245/2308/2283 2246/2309/2283 +f 2236/2299/2284 2235/2298/2284 2298/2361/2284 2299/2362/2284 +f 2210/2273/2285 2209/2272/2285 2272/2335/2285 2273/2336/2285 +f 2184/2247/2286 2183/2246/2286 2246/2309/2286 2247/2310/2286 +f 2237/2300/2287 2236/2299/2287 2299/2362/2287 2300/2363/2287 +f 2211/2274/2288 2210/2273/2288 2273/2336/2288 2274/2337/2288 +f 2185/2248/2289 2184/2247/2289 2247/2310/2289 2248/2311/2289 +f 2238/2301/2290 2237/2300/2290 2300/2363/2290 2301/2364/2290 +f 2212/2275/2291 2211/2274/2291 2274/2337/2291 2275/2338/2291 +f 2186/2249/2292 2185/2248/2292 2248/2311/2292 2249/2312/2292 +f 2239/2302/2293 2238/2301/2293 2301/2364/2293 2302/2365/2293 +f 2213/2276/2294 2212/2275/2294 2275/2338/2294 2276/2339/2294 +f 2187/2250/2295 2186/2249/2295 2249/2312/2295 2250/2313/2295 +f 2240/2303/2296 2239/2302/2296 2302/2365/2296 2303/2366/2296 +f 2214/2277/2297 2213/2276/2297 2276/2339/2297 2277/2340/2297 +f 2188/2251/2298 2187/2250/2298 2250/2313/2298 2251/2314/2298 +f 2241/2304/2299 2240/2303/2299 2303/2366/2299 2304/2367/2299 +f 2215/2278/2300 2214/2277/2300 2277/2340/2300 2278/2341/2300 +f 2189/2252/2301 2188/2251/2301 2251/2314/2301 2252/2315/2301 +f 2242/2305/2302 2241/2304/2302 2304/2367/2302 2305/2368/2302 +f 2216/2279/2303 2215/2278/2303 2278/2341/2303 2279/2342/2303 +f 2190/2253/2304 2189/2252/2304 2252/2315/2304 2253/2316/2304 +f 2282/2345/2305 2281/2344/2305 2344/2407/2305 2345/2408/2305 +f 2256/2319/2306 2255/2318/2306 2318/2381/2306 2319/2382/2306 +f 2283/2346/2307 2282/2345/2307 2345/2408/2307 2346/2409/2307 +f 2257/2320/2308 2256/2319/2308 2319/2382/2308 2320/2383/2308 +f 2284/2347/2309 2283/2346/2309 2346/2409/2309 2347/2410/2309 +f 2258/2321/2310 2257/2320/2310 2320/2383/2310 2321/2384/2310 +f 2285/2348/2311 2284/2347/2311 2347/2410/2311 2348/2411/2311 +f 2259/2322/2312 2258/2321/2312 2321/2384/2312 2322/2385/2312 +f 2286/2349/2313 2285/2348/2313 2348/2411/2313 2349/2412/2313 +f 2260/2323/2314 2259/2322/2314 2322/2385/2314 2323/2386/2314 +f 2287/2350/2315 2286/2349/2315 2349/2412/2315 2350/2413/2315 +f 2261/2324/2316 2260/2323/2316 2323/2386/2316 2324/2387/2316 +f 2288/2351/2317 2287/2350/2317 2350/2413/2317 2351/2414/2317 +f 2262/2325/2318 2261/2324/2318 2324/2387/2318 2325/2388/2318 +f 2289/2352/2319 2288/2351/2319 2351/2414/2319 2352/2415/2319 +f 2263/2326/2320 2262/2325/2320 2325/2388/2320 2326/2389/2320 +f 2290/2353/2321 2289/2352/2321 2352/2415/2321 2353/2416/2321 +f 2264/2327/2322 2263/2326/2322 2326/2389/2322 2327/2390/2322 +f 2291/2354/2323 2290/2353/2323 2353/2416/2323 2354/2417/2323 +f 2265/2328/2324 2264/2327/2324 2327/2390/2324 2328/2391/2324 +f 2292/2355/2325 2291/2354/2325 2354/2417/2325 2355/2418/2325 +f 2266/2329/2326 2265/2328/2326 2328/2391/2326 2329/2392/2326 +f 2293/2356/2327 2292/2355/2327 2355/2418/2327 2356/2419/2327 +f 2267/2330/2328 2266/2329/2328 2329/2392/2328 2330/2393/2328 +f 2294/2357/2329 2293/2356/2329 2356/2419/2329 2357/2420/2329 +f 2268/2331/2330 2267/2330/2330 2330/2393/2330 2331/2394/2330 +f 2295/2358/2331 2294/2357/2331 2357/2420/2331 2358/2421/2331 +f 2269/2332/2332 2268/2331/2332 2331/2394/2332 2332/2395/2332 +f 2243/2306/2333 1990/2026/2333 2306/2369/2333 +f 2296/2359/2334 2295/2358/2334 2358/2421/2334 2359/2422/2334 +f 2270/2333/2335 2269/2332/2335 2332/2395/2335 2333/2396/2335 +f 2244/2307/2336 2243/2306/2336 2306/2369/2336 2307/2370/2336 +f 2297/2360/2337 2296/2359/2337 2359/2422/2337 2360/2423/2337 +f 2271/2334/2338 2270/2333/2338 2333/2396/2338 2334/2397/2338 +f 2245/2308/2339 2244/2307/2339 2307/2370/2339 2308/2371/2339 +f 2298/2361/2340 2297/2360/2340 2360/2423/2340 2361/2424/2340 +f 2272/2335/2341 2271/2334/2341 2334/2397/2341 2335/2398/2341 +f 2246/2309/2342 2245/2308/2342 2308/2371/2342 2309/2372/2342 +f 2299/2362/2343 2298/2361/2343 2361/2424/2343 2362/2425/2343 +f 2273/2336/2344 2272/2335/2344 2335/2398/2344 2336/2399/2344 +f 2247/2310/2345 2246/2309/2345 2309/2372/2345 2310/2373/2345 +f 2300/2363/2346 2299/2362/2346 2362/2425/2346 2363/2426/2346 +f 2274/2337/2347 2273/2336/2347 2336/2399/2347 2337/2400/2347 +f 2248/2311/2348 2247/2310/2348 2310/2373/2348 2311/2374/2348 +f 2301/2364/2349 2300/2363/2349 2363/2426/2349 2364/2427/2349 +f 2275/2338/2350 2274/2337/2350 2337/2400/2350 2338/2401/2350 +f 2249/2312/2351 2248/2311/2351 2311/2374/2351 2312/2375/2351 +f 2302/2365/2352 2301/2364/2352 2364/2427/2352 2365/2428/2352 +f 2276/2339/2353 2275/2338/2353 2338/2401/2353 2339/2402/2353 +f 2250/2313/2354 2249/2312/2354 2312/2375/2354 2313/2376/2354 +f 2303/2366/2355 2302/2365/2355 2365/2428/2355 2366/2429/2355 +f 2277/2340/2356 2276/2339/2356 2339/2402/2356 2340/2403/2356 +f 2251/2314/2357 2250/2313/2357 2313/2376/2357 2314/2377/2357 +f 2304/2367/2358 2303/2366/2358 2366/2429/2358 2367/2430/2358 +f 2278/2341/2359 2277/2340/2359 2340/2403/2359 2341/2404/2359 +f 2252/2315/2360 2251/2314/2360 2314/2377/2360 2315/2378/2360 +f 2305/2368/2361 2304/2367/2361 2367/2430/2361 2368/2431/2361 +f 2279/2342/2362 2278/2341/2362 2341/2404/2362 2342/2405/2362 +f 2253/2316/2363 2252/2315/2363 2315/2378/2363 2316/2379/2363 +f 3818/3980/2364 2305/2368/2364 2368/2431/2364 +f 2280/2343/2365 2279/2342/2365 2342/2405/2365 2343/2406/2365 +f 2254/2317/2366 2253/2316/2366 2316/2379/2366 2317/2380/2366 +f 2281/2344/2367 2280/2343/2367 2343/2406/2367 2344/2407/2367 +f 2255/2318/2368 2254/2317/2368 2317/2380/2368 2318/2381/2368 +f 2347/2410/2369 2346/2409/2369 2409/2472/2369 2410/2473/2369 +f 2321/2384/2370 2320/2383/2370 2383/2446/2370 2384/2447/2370 +f 2348/2411/2371 2347/2410/2371 2410/2473/2371 2411/2474/2371 +f 2322/2385/2372 2321/2384/2372 2384/2447/2372 2385/2448/2372 +f 2349/2412/2373 2348/2411/2373 2411/2474/2373 2412/2475/2373 +f 2323/2386/2374 2322/2385/2374 2385/2448/2374 2386/2449/2374 +f 2350/2413/2375 2349/2412/2375 2412/2475/2375 2413/2476/2375 +f 2324/2387/2376 2323/2386/2376 2386/2449/2376 2387/2450/2376 +f 2351/2414/2377 2350/2413/2377 2413/2476/2377 2414/2477/2377 +f 2325/2388/2378 2324/2387/2378 2387/2450/2378 2388/2451/2378 +f 2352/2415/2379 2351/2414/2379 2414/2477/2379 2415/2478/2379 +f 2326/2389/2380 2325/2388/2380 2388/2451/2380 2389/2452/2380 +f 2353/2416/2381 2352/2415/2381 2415/2478/2381 2416/2479/2381 +f 2327/2390/2382 2326/2389/2382 2389/2452/2382 2390/2453/2382 +f 2354/2417/2383 2353/2416/2383 2416/2479/2383 2417/2480/2383 +f 2328/2391/2384 2327/2390/2384 2390/2453/2384 2391/2454/2384 +f 2355/2418/2385 2354/2417/2385 2417/2480/2385 2418/2481/2385 +f 2329/2392/2386 2328/2391/2386 2391/2454/2386 2392/2455/2386 +f 2356/2419/2387 2355/2418/2387 2418/2481/2387 2419/2482/2387 +f 2330/2393/2388 2329/2392/2388 2392/2455/2388 2393/2456/2388 +f 2357/2420/2389 2356/2419/2389 2419/2482/2389 2420/2483/2389 +f 2331/2394/2390 2330/2393/2390 2393/2456/2390 2394/2457/2390 +f 2358/2421/2391 2357/2420/2391 2420/2483/2391 2421/2484/2391 +f 2332/2395/2392 2331/2394/2392 2394/2457/2392 2395/2458/2392 +f 2306/2369/2393 1990/2027/2393 2369/2432/2393 +f 2359/2422/2394 2358/2421/2394 2421/2484/2394 2422/2485/2394 +f 2333/2396/2395 2332/2395/2395 2395/2458/2395 2396/2459/2395 +f 2307/2370/2396 2306/2369/2396 2369/2432/2396 2370/2433/2396 +f 2360/2423/2397 2359/2422/2397 2422/2485/2397 2423/2486/2397 +f 2334/2397/2398 2333/2396/2398 2396/2459/2398 2397/2460/2398 +f 2308/2371/2399 2307/2370/2399 2370/2433/2399 2371/2434/2399 +f 2361/2424/2400 2360/2423/2400 2423/2486/2400 2424/2487/2400 +f 2335/2398/2401 2334/2397/2401 2397/2460/2401 2398/2461/2401 +f 2309/2372/2402 2308/2371/2402 2371/2434/2402 2372/2435/2402 +f 2362/2425/2403 2361/2424/2403 2424/2487/2403 2425/2488/2403 +f 2336/2399/2404 2335/2398/2404 2398/2461/2404 2399/2462/2404 +f 2310/2373/2405 2309/2372/2405 2372/2435/2405 2373/2436/2405 +f 2363/2426/2406 2362/2425/2406 2425/2488/2406 2426/2489/2406 +f 2337/2400/2407 2336/2399/2407 2399/2462/2407 2400/2463/2407 +f 2311/2374/2408 2310/2373/2408 2373/2436/2408 2374/2437/2408 +f 2364/2427/2409 2363/2426/2409 2426/2489/2409 2427/2490/2409 +f 2338/2401/2410 2337/2400/2410 2400/2463/2410 2401/2464/2410 +f 2312/2375/2411 2311/2374/2411 2374/2437/2411 2375/2438/2411 +f 2365/2428/2412 2364/2427/2412 2427/2490/2412 2428/2491/2412 +f 2339/2402/2413 2338/2401/2413 2401/2464/2413 2402/2465/2413 +f 2313/2376/2414 2312/2375/2414 2375/2438/2414 2376/2439/2414 +f 2366/2429/2415 2365/2428/2415 2428/2491/2415 2429/2492/2415 +f 2340/2403/2416 2339/2402/2416 2402/2465/2416 2403/2466/2416 +f 2314/2377/2417 2313/2376/2417 2376/2439/2417 2377/2440/2417 +f 2367/2430/2418 2366/2429/2418 2429/2492/2418 2430/2493/2418 +f 2341/2404/2419 2340/2403/2419 2403/2466/2419 2404/2467/2419 +f 2315/2378/2420 2314/2377/2420 2377/2440/2420 2378/2441/2420 +f 2368/2431/2421 2367/2430/2421 2430/2493/2421 2431/2494/2421 +f 2342/2405/2422 2341/2404/2422 2404/2467/2422 2405/2468/2422 +f 2316/2379/2423 2315/2378/2423 2378/2441/2423 2379/2442/2423 +f 3818/3981/2424 2368/2431/2424 2431/2494/2424 +f 2343/2406/2425 2342/2405/2425 2405/2468/2425 2406/2469/2425 +f 2317/2380/2426 2316/2379/2426 2379/2442/2426 2380/2443/2426 +f 2344/2407/2427 2343/2406/2427 2406/2469/2427 2407/2470/2427 +f 2318/2381/2428 2317/2380/2428 2380/2443/2428 2381/2444/2428 +f 2345/2408/2429 2344/2407/2429 2407/2470/2429 2408/2471/2429 +f 2319/2382/2430 2318/2381/2430 2381/2444/2430 2382/2445/2430 +f 2346/2409/2431 2345/2408/2431 2408/2471/2431 2409/2472/2431 +f 2320/2383/2432 2319/2382/2432 2382/2445/2432 2383/2446/2432 +f 2412/2475/2433 2411/2474/2433 2474/2537/2433 2475/2538/2433 +f 2386/2449/2434 2385/2448/2434 2448/2511/2434 2449/2512/2434 +f 2413/2476/2435 2412/2475/2435 2475/2538/2435 2476/2539/2435 +f 2387/2450/2436 2386/2449/2436 2449/2512/2436 2450/2513/2436 +f 2414/2477/2437 2413/2476/2437 2476/2539/2437 2477/2540/2437 +f 2388/2451/2438 2387/2450/2438 2450/2513/2438 2451/2514/2438 +f 2415/2478/2439 2414/2477/2439 2477/2540/2439 2478/2541/2439 +f 2389/2452/2440 2388/2451/2440 2451/2514/2440 2452/2515/2440 +f 2416/2479/2441 2415/2478/2441 2478/2541/2441 2479/2542/2441 +f 2390/2453/2442 2389/2452/2442 2452/2515/2442 2453/2516/2442 +f 2417/2480/2443 2416/2479/2443 2479/2542/2443 2480/2543/2443 +f 2391/2454/2444 2390/2453/2444 2453/2516/2444 2454/2517/2444 +f 2418/2481/2445 2417/2480/2445 2480/2543/2445 2481/2544/2445 +f 2392/2455/2446 2391/2454/2446 2454/2517/2446 2455/2518/2446 +f 2419/2482/2447 2418/2481/2447 2481/2544/2447 2482/2545/2447 +f 2393/2456/2448 2392/2455/2448 2455/2518/2448 2456/2519/2448 +f 2420/2483/2449 2419/2482/2449 2482/2545/2449 2483/2546/2449 +f 2394/2457/2450 2393/2456/2450 2456/2519/2450 2457/2520/2450 +f 2421/2484/2451 2420/2483/2451 2483/2546/2451 2484/2547/2451 +f 2395/2458/2452 2394/2457/2452 2457/2520/2452 2458/2521/2452 +f 2369/2432/2453 1990/2028/2453 2432/2495/2453 +f 2422/2485/2454 2421/2484/2454 2484/2547/2454 2485/2548/2454 +f 2396/2459/2455 2395/2458/2455 2458/2521/2455 2459/2522/2455 +f 2370/2433/2456 2369/2432/2456 2432/2495/2456 2433/2496/2456 +f 2423/2486/2457 2422/2485/2457 2485/2548/2457 2486/2549/2457 +f 2397/2460/2458 2396/2459/2458 2459/2522/2458 2460/2523/2458 +f 2371/2434/2459 2370/2433/2459 2433/2496/2459 2434/2497/2459 +f 2424/2487/2460 2423/2486/2460 2486/2549/2460 2487/2550/2460 +f 2398/2461/2461 2397/2460/2461 2460/2523/2461 2461/2524/2461 +f 2372/2435/2462 2371/2434/2462 2434/2497/2462 2435/2498/2462 +f 2425/2488/2463 2424/2487/2463 2487/2550/2463 2488/2551/2463 +f 2399/2462/2464 2398/2461/2464 2461/2524/2464 2462/2525/2464 +f 2373/2436/2465 2372/2435/2465 2435/2498/2465 2436/2499/2465 +f 2426/2489/2466 2425/2488/2466 2488/2551/2466 2489/2552/2466 +f 2400/2463/2467 2399/2462/2467 2462/2525/2467 2463/2526/2467 +f 2374/2437/2468 2373/2436/2468 2436/2499/2468 2437/2500/2468 +f 2427/2490/2469 2426/2489/2469 2489/2552/2469 2490/2553/2469 +f 2401/2464/2470 2400/2463/2470 2463/2526/2470 2464/2527/2470 +f 2375/2438/2471 2374/2437/2471 2437/2500/2471 2438/2501/2471 +f 2428/2491/2472 2427/2490/2472 2490/2553/2472 2491/2554/2472 +f 2402/2465/2473 2401/2464/2473 2464/2527/2473 2465/2528/2473 +f 2376/2439/2474 2375/2438/2474 2438/2501/2474 2439/2502/2474 +f 2429/2492/2475 2428/2491/2475 2491/2554/2475 2492/2555/2475 +f 2403/2466/2476 2402/2465/2476 2465/2528/2476 2466/2529/2476 +f 2377/2440/2477 2376/2439/2477 2439/2502/2477 2440/2503/2477 +f 2430/2493/2478 2429/2492/2478 2492/2555/2478 2493/2556/2478 +f 2404/2467/2479 2403/2466/2479 2466/2529/2479 2467/2530/2479 +f 2378/2441/2480 2377/2440/2480 2440/2503/2480 2441/2504/2480 +f 2431/2494/2481 2430/2493/2481 2493/2556/2481 2494/2557/2481 +f 2405/2468/2482 2404/2467/2482 2467/2530/2482 2468/2531/2482 +f 2379/2442/2483 2378/2441/2483 2441/2504/2483 2442/2505/2483 +f 3818/3982/2484 2431/2494/2484 2494/2557/2484 +f 2406/2469/2485 2405/2468/2485 2468/2531/2485 2469/2532/2485 +f 2380/2443/2486 2379/2442/2486 2442/2505/2486 2443/2506/2486 +f 2407/2470/2487 2406/2469/2487 2469/2532/2487 2470/2533/2487 +f 2381/2444/2488 2380/2443/2488 2443/2506/2488 2444/2507/2488 +f 2408/2471/2489 2407/2470/2489 2470/2533/2489 2471/2534/2489 +f 2382/2445/2490 2381/2444/2490 2444/2507/2490 2445/2508/2490 +f 2409/2472/2491 2408/2471/2491 2471/2534/2491 2472/2535/2491 +f 2383/2446/2492 2382/2445/2492 2445/2508/2492 2446/2509/2492 +f 2410/2473/2493 2409/2472/2493 2472/2535/2493 2473/2536/2493 +f 2384/2447/2494 2383/2446/2494 2446/2509/2494 2447/2510/2494 +f 2411/2474/2495 2410/2473/2495 2473/2536/2495 2474/2537/2495 +f 2385/2448/2496 2384/2447/2496 2447/2510/2496 2448/2511/2496 +f 2461/2524/2497 2460/2523/2497 2523/2586/2497 2524/2587/2497 +f 2435/2498/2498 2434/2497/2498 2497/2560/2498 2498/2561/2498 +f 2488/2551/2499 2487/2550/2499 2550/2613/2499 2551/2614/2499 +f 2462/2525/2500 2461/2524/2500 2524/2587/2500 2525/2588/2500 +f 2436/2499/2501 2435/2498/2501 2498/2561/2501 2499/2562/2501 +f 2489/2552/2502 2488/2551/2502 2551/2614/2502 2552/2615/2502 +f 2463/2526/2503 2462/2525/2503 2525/2588/2503 2526/2589/2503 +f 2437/2500/2504 2436/2499/2504 2499/2562/2504 2500/2563/2504 +f 2490/2553/2505 2489/2552/2505 2552/2615/2505 2553/2616/2505 +f 2464/2527/2506 2463/2526/2506 2526/2589/2506 2527/2590/2506 +f 2438/2501/2507 2437/2500/2507 2500/2563/2507 2501/2564/2507 +f 2491/2554/2508 2490/2553/2508 2553/2616/2508 2554/2617/2508 +f 2465/2528/2509 2464/2527/2509 2527/2590/2509 2528/2591/2509 +f 2439/2502/2510 2438/2501/2510 2501/2564/2510 2502/2565/2510 +f 2492/2555/2511 2491/2554/2511 2554/2617/2511 2555/2618/2511 +f 2466/2529/2512 2465/2528/2512 2528/2591/2512 2529/2592/2512 +f 2440/2503/2513 2439/2502/2513 2502/2565/2513 2503/2566/2513 +f 2493/2556/2514 2492/2555/2514 2555/2618/2514 2556/2619/2514 +f 2467/2530/2515 2466/2529/2515 2529/2592/2515 2530/2593/2515 +f 2441/2504/2516 2440/2503/2516 2503/2566/2516 2504/2567/2516 +f 2494/2557/2517 2493/2556/2517 2556/2619/2517 2557/2620/2517 +f 2468/2531/2518 2467/2530/2518 2530/2593/2518 2531/2594/2518 +f 2442/2505/2519 2441/2504/2519 2504/2567/2519 2505/2568/2519 +f 3818/3983/2520 2494/2557/2520 2557/2620/2520 +f 2469/2532/2521 2468/2531/2521 2531/2594/2521 2532/2595/2521 +f 2443/2506/2522 2442/2505/2522 2505/2568/2522 2506/2569/2522 +f 2470/2533/2523 2469/2532/2523 2532/2595/2523 2533/2596/2523 +f 2444/2507/2524 2443/2506/2524 2506/2569/2524 2507/2570/2524 +f 2471/2534/2525 2470/2533/2525 2533/2596/2525 2534/2597/2525 +f 2445/2508/2526 2444/2507/2526 2507/2570/2526 2508/2571/2526 +f 2472/2535/2527 2471/2534/2527 2534/2597/2527 2535/2598/2527 +f 2446/2509/2528 2445/2508/2528 2508/2571/2528 2509/2572/2528 +f 2473/2536/2529 2472/2535/2529 2535/2598/2529 2536/2599/2529 +f 2447/2510/2530 2446/2509/2530 2509/2572/2530 2510/2573/2530 +f 2474/2537/2531 2473/2536/2531 2536/2599/2531 2537/2600/2531 +f 2448/2511/2532 2447/2510/2532 2510/2573/2532 2511/2574/2532 +f 2475/2538/2533 2474/2537/2533 2537/2600/2533 2538/2601/2533 +f 2449/2512/2534 2448/2511/2534 2511/2574/2534 2512/2575/2534 +f 2476/2539/2535 2475/2538/2535 2538/2601/2535 2539/2602/2535 +f 2450/2513/2536 2449/2512/2536 2512/2575/2536 2513/2576/2536 +f 2477/2540/2537 2476/2539/2537 2539/2602/2537 2540/2603/2537 +f 2451/2514/2538 2450/2513/2538 2513/2576/2538 2514/2577/2538 +f 2478/2541/2539 2477/2540/2539 2540/2603/2539 2541/2604/2539 +f 2452/2515/2540 2451/2514/2540 2514/2577/2540 2515/2578/2540 +f 2479/2542/2541 2478/2541/2541 2541/2604/2541 2542/2605/2541 +f 2453/2516/2542 2452/2515/2542 2515/2578/2542 2516/2579/2542 +f 2480/2543/2543 2479/2542/2543 2542/2605/2543 2543/2606/2543 +f 2454/2517/2544 2453/2516/2544 2516/2579/2544 2517/2580/2544 +f 2481/2544/2545 2480/2543/2545 2543/2606/2545 2544/2607/2545 +f 2455/2518/2546 2454/2517/2546 2517/2580/2546 2518/2581/2546 +f 2482/2545/2547 2481/2544/2547 2544/2607/2547 2545/2608/2547 +f 2456/2519/2548 2455/2518/2548 2518/2581/2548 2519/2582/2548 +f 2483/2546/2549 2482/2545/2549 2545/2608/2549 2546/2609/2549 +f 2457/2520/2550 2456/2519/2550 2519/2582/2550 2520/2583/2550 +f 2484/2547/2551 2483/2546/2551 2546/2609/2551 2547/2610/2551 +f 2458/2521/2552 2457/2520/2552 2520/2583/2552 2521/2584/2552 +f 2432/2495/2553 1990/2029/2553 2495/2558/2553 +f 2485/2548/2554 2484/2547/2554 2547/2610/2554 2548/2611/2554 +f 2459/2522/2555 2458/2521/2555 2521/2584/2555 2522/2585/2555 +f 2433/2496/2556 2432/2495/2556 2495/2558/2556 2496/2559/2556 +f 2486/2549/2557 2485/2548/2557 2548/2611/2557 2549/2612/2557 +f 2460/2523/2558 2459/2522/2558 2522/2585/2558 2523/2586/2558 +f 2434/2497/2559 2433/2496/2559 2496/2559/2559 2497/2560/2559 +f 2487/2550/2560 2486/2549/2560 2549/2612/2560 2550/2613/2560 +f 2526/2589/2561 2525/2588/2561 2588/2651/2561 2589/2652/2561 +f 2500/2563/2562 2499/2562/2562 2562/2625/2562 2563/2626/2562 +f 2553/2616/2563 2552/2615/2563 2615/2678/2563 2616/2679/2563 +f 2527/2590/2564 2526/2589/2564 2589/2652/2564 2590/2653/2564 +f 2501/2564/2565 2500/2563/2565 2563/2626/2565 2564/2627/2565 +f 2554/2617/2566 2553/2616/2566 2616/2679/2566 2617/2680/2566 +f 2528/2591/2567 2527/2590/2567 2590/2653/2567 2591/2654/2567 +f 2502/2565/2568 2501/2564/2568 2564/2627/2568 2565/2628/2568 +f 2555/2618/2569 2554/2617/2569 2617/2680/2569 2618/2681/2569 +f 2529/2592/2570 2528/2591/2570 2591/2654/2570 2592/2655/2570 +f 2503/2566/2571 2502/2565/2571 2565/2628/2571 2566/2629/2571 +f 2556/2619/2572 2555/2618/2572 2618/2681/2572 2619/2682/2572 +f 2530/2593/2573 2529/2592/2573 2592/2655/2573 2593/2656/2573 +f 2504/2567/2574 2503/2566/2574 2566/2629/2574 2567/2630/2574 +f 2557/2620/2575 2556/2619/2575 2619/2682/2575 2620/2683/2575 +f 2531/2594/2576 2530/2593/2576 2593/2656/2576 2594/2657/2576 +f 2505/2568/2577 2504/2567/2577 2567/2630/2577 2568/2631/2577 +f 3818/3984/2578 2557/2620/2578 2620/2683/2578 +f 2532/2595/2579 2531/2594/2579 2594/2657/2579 2595/2658/2579 +f 2506/2569/2580 2505/2568/2580 2568/2631/2580 2569/2632/2580 +f 2533/2596/2581 2532/2595/2581 2595/2658/2581 2596/2659/2581 +f 2507/2570/2582 2506/2569/2582 2569/2632/2582 2570/2633/2582 +f 2534/2597/2583 2533/2596/2583 2596/2659/2583 2597/2660/2583 +f 2508/2571/2584 2507/2570/2584 2570/2633/2584 2571/2634/2584 +f 2535/2598/2585 2534/2597/2585 2597/2660/2585 2598/2661/2585 +f 2509/2572/2586 2508/2571/2586 2571/2634/2586 2572/2635/2586 +f 2536/2599/2587 2535/2598/2587 2598/2661/2587 2599/2662/2587 +f 2510/2573/2588 2509/2572/2588 2572/2635/2588 2573/2636/2588 +f 2537/2600/2589 2536/2599/2589 2599/2662/2589 2600/2663/2589 +f 2511/2574/2590 2510/2573/2590 2573/2636/2590 2574/2637/2590 +f 2538/2601/2591 2537/2600/2591 2600/2663/2591 2601/2664/2591 +f 2512/2575/2592 2511/2574/2592 2574/2637/2592 2575/2638/2592 +f 2539/2602/2593 2538/2601/2593 2601/2664/2593 2602/2665/2593 +f 2513/2576/2594 2512/2575/2594 2575/2638/2594 2576/2639/2594 +f 2540/2603/2595 2539/2602/2595 2602/2665/2595 2603/2666/2595 +f 2514/2577/2596 2513/2576/2596 2576/2639/2596 2577/2640/2596 +f 2541/2604/2597 2540/2603/2597 2603/2666/2597 2604/2667/2597 +f 2515/2578/2598 2514/2577/2598 2577/2640/2598 2578/2641/2598 +f 2542/2605/2599 2541/2604/2599 2604/2667/2599 2605/2668/2599 +f 2516/2579/2600 2515/2578/2600 2578/2641/2600 2579/2642/2600 +f 2543/2606/2601 2542/2605/2601 2605/2668/2601 2606/2669/2601 +f 2517/2580/2602 2516/2579/2602 2579/2642/2602 2580/2643/2602 +f 2544/2607/2603 2543/2606/2603 2606/2669/2603 2607/2670/2603 +f 2518/2581/2604 2517/2580/2604 2580/2643/2604 2581/2644/2604 +f 2545/2608/2605 2544/2607/2605 2607/2670/2605 2608/2671/2605 +f 2519/2582/2606 2518/2581/2606 2581/2644/2606 2582/2645/2606 +f 2546/2609/2607 2545/2608/2607 2608/2671/2607 2609/2672/2607 +f 2520/2583/2608 2519/2582/2608 2582/2645/2608 2583/2646/2608 +f 2547/2610/2609 2546/2609/2609 2609/2672/2609 2610/2673/2609 +f 2521/2584/2610 2520/2583/2610 2583/2646/2610 2584/2647/2610 +f 2495/2558/2611 1990/2030/2611 2558/2621/2611 +f 2548/2611/2612 2547/2610/2612 2610/2673/2612 2611/2674/2612 +f 2522/2585/2613 2521/2584/2613 2584/2647/2613 2585/2648/2613 +f 2496/2559/2614 2495/2558/2614 2558/2621/2614 2559/2622/2614 +f 2549/2612/2615 2548/2611/2615 2611/2674/2615 2612/2675/2615 +f 2523/2586/2616 2522/2585/2616 2585/2648/2616 2586/2649/2616 +f 2497/2560/2617 2496/2559/2617 2559/2622/2617 2560/2623/2617 +f 2550/2613/2618 2549/2612/2618 2612/2675/2618 2613/2676/2618 +f 2524/2587/2619 2523/2586/2619 2586/2649/2619 2587/2650/2619 +f 2498/2561/2620 2497/2560/2620 2560/2623/2620 2561/2624/2620 +f 2551/2614/2621 2550/2613/2621 2613/2676/2621 2614/2677/2621 +f 2525/2588/2622 2524/2587/2622 2587/2650/2622 2588/2651/2622 +f 2499/2562/2623 2498/2561/2623 2561/2624/2623 2562/2625/2623 +f 2552/2615/2624 2551/2614/2624 2614/2677/2624 2615/2678/2624 +f 2591/2654/2625 2590/2653/2625 2653/2716/2625 2654/2717/2625 +f 2565/2628/2626 2564/2627/2626 2627/2690/2626 2628/2691/2626 +f 2618/2681/2627 2617/2680/2627 2680/2743/2627 2681/2744/2627 +f 2592/2655/2628 2591/2654/2628 2654/2717/2628 2655/2718/2628 +f 2566/2629/2629 2565/2628/2629 2628/2691/2629 2629/2692/2629 +f 2619/2682/2630 2618/2681/2630 2681/2744/2630 2682/2745/2630 +f 2593/2656/2631 2592/2655/2631 2655/2718/2631 2656/2719/2631 +f 2567/2630/2632 2566/2629/2632 2629/2692/2632 2630/2693/2632 +f 2620/2683/2633 2619/2682/2633 2682/2745/2633 2683/2746/2633 +f 2594/2657/2634 2593/2656/2634 2656/2719/2634 2657/2720/2634 +f 2568/2631/2635 2567/2630/2635 2630/2693/2635 2631/2694/2635 +f 3818/3985/2636 2620/2683/2636 2683/2746/2636 +f 2595/2658/2637 2594/2657/2637 2657/2720/2637 2658/2721/2637 +f 2569/2632/2638 2568/2631/2638 2631/2694/2638 2632/2695/2638 +f 2596/2659/2639 2595/2658/2639 2658/2721/2639 2659/2722/2639 +f 2570/2633/2640 2569/2632/2640 2632/2695/2640 2633/2696/2640 +f 2597/2660/2641 2596/2659/2641 2659/2722/2641 2660/2723/2641 +f 2571/2634/2642 2570/2633/2642 2633/2696/2642 2634/2697/2642 +f 2598/2661/2643 2597/2660/2643 2660/2723/2643 2661/2724/2643 +f 2572/2635/2644 2571/2634/2644 2634/2697/2644 2635/2698/2644 +f 2599/2662/2645 2598/2661/2645 2661/2724/2645 2662/2725/2645 +f 2573/2636/2646 2572/2635/2646 2635/2698/2646 2636/2699/2646 +f 2600/2663/2647 2599/2662/2647 2662/2725/2647 2663/2726/2647 +f 2574/2637/2648 2573/2636/2648 2636/2699/2648 2637/2700/2648 +f 2601/2664/2649 2600/2663/2649 2663/2726/2649 2664/2727/2649 +f 2575/2638/2650 2574/2637/2650 2637/2700/2650 2638/2701/2650 +f 2602/2665/2651 2601/2664/2651 2664/2727/2651 2665/2728/2651 +f 2576/2639/2652 2575/2638/2652 2638/2701/2652 2639/2702/2652 +f 2603/2666/2653 2602/2665/2653 2665/2728/2653 2666/2729/2653 +f 2577/2640/2654 2576/2639/2654 2639/2702/2654 2640/2703/2654 +f 2604/2667/2655 2603/2666/2655 2666/2729/2655 2667/2730/2655 +f 2578/2641/2656 2577/2640/2656 2640/2703/2656 2641/2704/2656 +f 2605/2668/2657 2604/2667/2657 2667/2730/2657 2668/2731/2657 +f 2579/2642/2658 2578/2641/2658 2641/2704/2658 2642/2705/2658 +f 2606/2669/2659 2605/2668/2659 2668/2731/2659 2669/2732/2659 +f 2580/2643/2660 2579/2642/2660 2642/2705/2660 2643/2706/2660 +f 2607/2670/2661 2606/2669/2661 2669/2732/2661 2670/2733/2661 +f 2581/2644/2662 2580/2643/2662 2643/2706/2662 2644/2707/2662 +f 2608/2671/2663 2607/2670/2663 2670/2733/2663 2671/2734/2663 +f 2582/2645/2664 2581/2644/2664 2644/2707/2664 2645/2708/2664 +f 2609/2672/2665 2608/2671/2665 2671/2734/2665 2672/2735/2665 +f 2583/2646/2666 2582/2645/2666 2645/2708/2666 2646/2709/2666 +f 2610/2673/2667 2609/2672/2667 2672/2735/2667 2673/2736/2667 +f 2584/2647/2668 2583/2646/2668 2646/2709/2668 2647/2710/2668 +f 2558/2621/2669 1990/2031/2669 2621/2684/2669 +f 2611/2674/2670 2610/2673/2670 2673/2736/2670 2674/2737/2670 +f 2585/2648/2671 2584/2647/2671 2647/2710/2671 2648/2711/2671 +f 2559/2622/2672 2558/2621/2672 2621/2684/2672 2622/2685/2672 +f 2612/2675/2673 2611/2674/2673 2674/2737/2673 2675/2738/2673 +f 2586/2649/2674 2585/2648/2674 2648/2711/2674 2649/2712/2674 +f 2560/2623/2675 2559/2622/2675 2622/2685/2675 2623/2686/2675 +f 2613/2676/2676 2612/2675/2676 2675/2738/2676 2676/2739/2676 +f 2587/2650/2677 2586/2649/2677 2649/2712/2677 2650/2713/2677 +f 2561/2624/2678 2560/2623/2678 2623/2686/2678 2624/2687/2678 +f 2614/2677/2679 2613/2676/2679 2676/2739/2679 2677/2740/2679 +f 2588/2651/2680 2587/2650/2680 2650/2713/2680 2651/2714/2680 +f 2562/2625/2681 2561/2624/2681 2624/2687/2681 2625/2688/2681 +f 2615/2678/2682 2614/2677/2682 2677/2740/2682 2678/2741/2682 +f 2589/2652/2683 2588/2651/2683 2651/2714/2683 2652/2715/2683 +f 2563/2626/2684 2562/2625/2684 2625/2688/2684 2626/2689/2684 +f 2616/2679/2685 2615/2678/2685 2678/2741/2685 2679/2742/2685 +f 2590/2653/2686 2589/2652/2686 2652/2715/2686 2653/2716/2686 +f 2564/2627/2687 2563/2626/2687 2626/2689/2687 2627/2690/2687 +f 2617/2680/2688 2616/2679/2688 2679/2742/2688 2680/2743/2688 +f 2656/2719/2689 2655/2718/2689 2718/2781/2689 2719/2782/2689 +f 2630/2693/2690 2629/2692/2690 2692/2755/2690 2693/2756/2690 +f 2683/2746/2691 2682/2745/2691 2745/2808/2691 2746/2809/2691 +f 2657/2720/2692 2656/2719/2692 2719/2782/2692 2720/2783/2692 +f 2631/2694/2693 2630/2693/2693 2693/2756/2693 2694/2757/2693 +f 3818/3986/2694 2683/2746/2694 2746/2809/2694 +f 2658/2721/2695 2657/2720/2695 2720/2783/2695 2721/2784/2695 +f 2632/2695/2696 2631/2694/2696 2694/2757/2696 2695/2758/2696 +f 2659/2722/2697 2658/2721/2697 2721/2784/2697 2722/2785/2697 +f 2633/2696/2698 2632/2695/2698 2695/2758/2698 2696/2759/2698 +f 2660/2723/2699 2659/2722/2699 2722/2785/2699 2723/2786/2699 +f 2634/2697/2700 2633/2696/2700 2696/2759/2700 2697/2760/2700 +f 2661/2724/2701 2660/2723/2701 2723/2786/2701 2724/2787/2701 +f 2635/2698/2702 2634/2697/2702 2697/2760/2702 2698/2761/2702 +f 2662/2725/2703 2661/2724/2703 2724/2787/2703 2725/2788/2703 +f 2636/2699/2704 2635/2698/2704 2698/2761/2704 2699/2762/2704 +f 2663/2726/2705 2662/2725/2705 2725/2788/2705 2726/2789/2705 +f 2637/2700/2706 2636/2699/2706 2699/2762/2706 2700/2763/2706 +f 2664/2727/2707 2663/2726/2707 2726/2789/2707 2727/2790/2707 +f 2638/2701/2708 2637/2700/2708 2700/2763/2708 2701/2764/2708 +f 2665/2728/2709 2664/2727/2709 2727/2790/2709 2728/2791/2709 +f 2639/2702/2710 2638/2701/2710 2701/2764/2710 2702/2765/2710 +f 2666/2729/2711 2665/2728/2711 2728/2791/2711 2729/2792/2711 +f 2640/2703/2712 2639/2702/2712 2702/2765/2712 2703/2766/2712 +f 2667/2730/2713 2666/2729/2713 2729/2792/2713 2730/2793/2713 +f 2641/2704/2714 2640/2703/2714 2703/2766/2714 2704/2767/2714 +f 2668/2731/2715 2667/2730/2715 2730/2793/2715 2731/2794/2715 +f 2642/2705/2716 2641/2704/2716 2704/2767/2716 2705/2768/2716 +f 2669/2732/2717 2668/2731/2717 2731/2794/2717 2732/2795/2717 +f 2643/2706/2718 2642/2705/2718 2705/2768/2718 2706/2769/2718 +f 2670/2733/2719 2669/2732/2719 2732/2795/2719 2733/2796/2719 +f 2644/2707/2720 2643/2706/2720 2706/2769/2720 2707/2770/2720 +f 2671/2734/2721 2670/2733/2721 2733/2796/2721 2734/2797/2721 +f 2645/2708/2722 2644/2707/2722 2707/2770/2722 2708/2771/2722 +f 2672/2735/2723 2671/2734/2723 2734/2797/2723 2735/2798/2723 +f 2646/2709/2724 2645/2708/2724 2708/2771/2724 2709/2772/2724 +f 2673/2736/2725 2672/2735/2725 2735/2798/2725 2736/2799/2725 +f 2647/2710/2726 2646/2709/2726 2709/2772/2726 2710/2773/2726 +f 2621/2684/2727 1990/2032/2727 2684/2747/2727 +f 2674/2737/2728 2673/2736/2728 2736/2799/2728 2737/2800/2728 +f 2648/2711/2729 2647/2710/2729 2710/2773/2729 2711/2774/2729 +f 2622/2685/2730 2621/2684/2730 2684/2747/2730 2685/2748/2730 +f 2675/2738/2731 2674/2737/2731 2737/2800/2731 2738/2801/2731 +f 2649/2712/2732 2648/2711/2732 2711/2774/2732 2712/2775/2732 +f 2623/2686/2733 2622/2685/2733 2685/2748/2733 2686/2749/2733 +f 2676/2739/2734 2675/2738/2734 2738/2801/2734 2739/2802/2734 +f 2650/2713/2735 2649/2712/2735 2712/2775/2735 2713/2776/2735 +f 2624/2687/2736 2623/2686/2736 2686/2749/2736 2687/2750/2736 +f 2677/2740/2737 2676/2739/2737 2739/2802/2737 2740/2803/2737 +f 2651/2714/2738 2650/2713/2738 2713/2776/2738 2714/2777/2738 +f 2625/2688/2739 2624/2687/2739 2687/2750/2739 2688/2751/2739 +f 2678/2741/2740 2677/2740/2740 2740/2803/2740 2741/2804/2740 +f 2652/2715/2741 2651/2714/2741 2714/2777/2741 2715/2778/2741 +f 2626/2689/2742 2625/2688/2742 2688/2751/2742 2689/2752/2742 +f 2679/2742/2743 2678/2741/2743 2741/2804/2743 2742/2805/2743 +f 2653/2716/2744 2652/2715/2744 2715/2778/2744 2716/2779/2744 +f 2627/2690/2745 2626/2689/2745 2689/2752/2745 2690/2753/2745 +f 2680/2743/2746 2679/2742/2746 2742/2805/2746 2743/2806/2746 +f 2654/2717/2747 2653/2716/2747 2716/2779/2747 2717/2780/2747 +f 2628/2691/2748 2627/2690/2748 2690/2753/2748 2691/2754/2748 +f 2681/2744/2749 2680/2743/2749 2743/2806/2749 2744/2807/2749 +f 2655/2718/2750 2654/2717/2750 2717/2780/2750 2718/2781/2750 +f 2629/2692/2751 2628/2691/2751 2691/2754/2751 2692/2755/2751 +f 2682/2745/2752 2681/2744/2752 2744/2807/2752 2745/2808/2752 +f 2721/2784/2753 2720/2783/2753 2783/2846/2753 2784/2847/2753 +f 2695/2758/2754 2694/2757/2754 2757/2820/2754 2758/2821/2754 +f 2722/2785/2755 2721/2784/2755 2784/2847/2755 2785/2848/2755 +f 2696/2759/2756 2695/2758/2756 2758/2821/2756 2759/2822/2756 +f 2723/2786/2757 2722/2785/2757 2785/2848/2757 2786/2849/2757 +f 2697/2760/2758 2696/2759/2758 2759/2822/2758 2760/2823/2758 +f 2724/2787/2759 2723/2786/2759 2786/2849/2759 2787/2850/2759 +f 2698/2761/2760 2697/2760/2760 2760/2823/2760 2761/2824/2760 +f 2725/2788/2761 2724/2787/2761 2787/2850/2761 2788/2851/2761 +f 2699/2762/2762 2698/2761/2762 2761/2824/2762 2762/2825/2762 +f 2726/2789/2763 2725/2788/2763 2788/2851/2763 2789/2852/2763 +f 2700/2763/2764 2699/2762/2764 2762/2825/2764 2763/2826/2764 +f 2727/2790/2765 2726/2789/2765 2789/2852/2765 2790/2853/2765 +f 2701/2764/2766 2700/2763/2766 2763/2826/2766 2764/2827/2766 +f 2728/2791/2767 2727/2790/2767 2790/2853/2767 2791/2854/2767 +f 2702/2765/2768 2701/2764/2768 2764/2827/2768 2765/2828/2768 +f 2729/2792/2769 2728/2791/2769 2791/2854/2769 2792/2855/2769 +f 2703/2766/2770 2702/2765/2770 2765/2828/2770 2766/2829/2770 +f 2730/2793/2771 2729/2792/2771 2792/2855/2771 2793/2856/2771 +f 2704/2767/2772 2703/2766/2772 2766/2829/2772 2767/2830/2772 +f 2731/2794/2773 2730/2793/2773 2793/2856/2773 2794/2857/2773 +f 2705/2768/2774 2704/2767/2774 2767/2830/2774 2768/2831/2774 +f 2732/2795/2775 2731/2794/2775 2794/2857/2775 2795/2858/2775 +f 2706/2769/2776 2705/2768/2776 2768/2831/2776 2769/2832/2776 +f 2733/2796/2777 2732/2795/2777 2795/2858/2777 2796/2859/2777 +f 2707/2770/2778 2706/2769/2778 2769/2832/2778 2770/2833/2778 +f 2734/2797/2779 2733/2796/2779 2796/2859/2779 2797/2860/2779 +f 2708/2771/2780 2707/2770/2780 2770/2833/2780 2771/2834/2780 +f 2735/2798/2781 2734/2797/2781 2797/2860/2781 2798/2861/2781 +f 2709/2772/2782 2708/2771/2782 2771/2834/2782 2772/2835/2782 +f 2736/2799/2783 2735/2798/2783 2798/2861/2783 2799/2862/2783 +f 2710/2773/2784 2709/2772/2784 2772/2835/2784 2773/2836/2784 +f 2684/2747/2785 1990/2033/2785 2747/2810/2785 +f 2737/2800/2786 2736/2799/2786 2799/2862/2786 2800/2863/2786 +f 2711/2774/2787 2710/2773/2787 2773/2836/2787 2774/2837/2787 +f 2685/2748/2788 2684/2747/2788 2747/2810/2788 2748/2811/2788 +f 2738/2801/2789 2737/2800/2789 2800/2863/2789 2801/2864/2789 +f 2712/2775/2790 2711/2774/2790 2774/2837/2790 2775/2838/2790 +f 2686/2749/2791 2685/2748/2791 2748/2811/2791 2749/2812/2791 +f 2739/2802/2792 2738/2801/2792 2801/2864/2792 2802/2865/2792 +f 2713/2776/2793 2712/2775/2793 2775/2838/2793 2776/2839/2793 +f 2687/2750/2794 2686/2749/2794 2749/2812/2794 2750/2813/2794 +f 2740/2803/2795 2739/2802/2795 2802/2865/2795 2803/2866/2795 +f 2714/2777/2796 2713/2776/2796 2776/2839/2796 2777/2840/2796 +f 2688/2751/2797 2687/2750/2797 2750/2813/2797 2751/2814/2797 +f 2741/2804/2798 2740/2803/2798 2803/2866/2798 2804/2867/2798 +f 2715/2778/2799 2714/2777/2799 2777/2840/2799 2778/2841/2799 +f 2689/2752/2800 2688/2751/2800 2751/2814/2800 2752/2815/2800 +f 2742/2805/2801 2741/2804/2801 2804/2867/2801 2805/2868/2801 +f 2716/2779/2802 2715/2778/2802 2778/2841/2802 2779/2842/2802 +f 2690/2753/2803 2689/2752/2803 2752/2815/2803 2753/2816/2803 +f 2743/2806/2804 2742/2805/2804 2805/2868/2804 2806/2869/2804 +f 2717/2780/2805 2716/2779/2805 2779/2842/2805 2780/2843/2805 +f 2691/2754/2806 2690/2753/2806 2753/2816/2806 2754/2817/2806 +f 2744/2807/2807 2743/2806/2807 2806/2869/2807 2807/2870/2807 +f 2718/2781/2808 2717/2780/2808 2780/2843/2808 2781/2844/2808 +f 2692/2755/2809 2691/2754/2809 2754/2817/2809 2755/2818/2809 +f 2745/2808/2810 2744/2807/2810 2807/2870/2810 2808/2871/2810 +f 2719/2782/2811 2718/2781/2811 2781/2844/2811 2782/2845/2811 +f 2693/2756/2812 2692/2755/2812 2755/2818/2812 2756/2819/2812 +f 2746/2809/2813 2745/2808/2813 2808/2871/2813 2809/2872/2813 +f 2720/2783/2814 2719/2782/2814 2782/2845/2814 2783/2846/2814 +f 2694/2757/2815 2693/2756/2815 2756/2819/2815 2757/2820/2815 +f 3818/3987/2816 2746/2809/2816 2809/2872/2816 +f 2786/2849/2817 2785/2848/2817 2848/2911/2817 2849/2912/2817 +f 2760/2823/2818 2759/2822/2818 2822/2885/2818 2823/2886/2818 +f 2787/2850/2819 2786/2849/2819 2849/2912/2819 2850/2913/2819 +f 2761/2824/2820 2760/2823/2820 2823/2886/2820 2824/2887/2820 +f 2788/2851/2821 2787/2850/2821 2850/2913/2821 2851/2914/2821 +f 2762/2825/2822 2761/2824/2822 2824/2887/2822 2825/2888/2822 +f 2789/2852/2823 2788/2851/2823 2851/2914/2823 2852/2915/2823 +f 2763/2826/2824 2762/2825/2824 2825/2888/2824 2826/2889/2824 +f 2790/2853/2825 2789/2852/2825 2852/2915/2825 2853/2916/2825 +f 2764/2827/2826 2763/2826/2826 2826/2889/2826 2827/2890/2826 +f 2791/2854/2827 2790/2853/2827 2853/2916/2827 2854/2917/2827 +f 2765/2828/2828 2764/2827/2828 2827/2890/2828 2828/2891/2828 +f 2792/2855/2829 2791/2854/2829 2854/2917/2829 2855/2918/2829 +f 2766/2829/2830 2765/2828/2830 2828/2891/2830 2829/2892/2830 +f 2793/2856/2831 2792/2855/2831 2855/2918/2831 2856/2919/2831 +f 2767/2830/2832 2766/2829/2832 2829/2892/2832 2830/2893/2832 +f 2794/2857/2833 2793/2856/2833 2856/2919/2833 2857/2920/2833 +f 2768/2831/2834 2767/2830/2834 2830/2893/2834 2831/2894/2834 +f 2795/2858/2835 2794/2857/2835 2857/2920/2835 2858/2921/2835 +f 2769/2832/2836 2768/2831/2836 2831/2894/2836 2832/2895/2836 +f 2796/2859/2837 2795/2858/2837 2858/2921/2837 2859/2922/2837 +f 2770/2833/2838 2769/2832/2838 2832/2895/2838 2833/2896/2838 +f 2797/2860/2839 2796/2859/2839 2859/2922/2839 2860/2923/2839 +f 2771/2834/2840 2770/2833/2840 2833/2896/2840 2834/2897/2840 +f 2798/2861/2841 2797/2860/2841 2860/2923/2841 2861/2924/2841 +f 2772/2835/2842 2771/2834/2842 2834/2897/2842 2835/2898/2842 +f 2799/2862/2843 2798/2861/2843 2861/2924/2843 2862/2925/2843 +f 2773/2836/2844 2772/2835/2844 2835/2898/2844 2836/2899/2844 +f 2747/2810/2845 1990/2034/2845 2810/2873/2845 +f 2800/2863/2846 2799/2862/2846 2862/2925/2846 2863/2926/2846 +f 2774/2837/2847 2773/2836/2847 2836/2899/2847 2837/2900/2847 +f 2748/2811/2848 2747/2810/2848 2810/2873/2848 2811/2874/2848 +f 2801/2864/2849 2800/2863/2849 2863/2926/2849 2864/2927/2849 +f 2775/2838/2850 2774/2837/2850 2837/2900/2850 2838/2901/2850 +f 2749/2812/2851 2748/2811/2851 2811/2874/2851 2812/2875/2851 +f 2802/2865/2852 2801/2864/2852 2864/2927/2852 2865/2928/2852 +f 2776/2839/2853 2775/2838/2853 2838/2901/2853 2839/2902/2853 +f 2750/2813/2854 2749/2812/2854 2812/2875/2854 2813/2876/2854 +f 2803/2866/2855 2802/2865/2855 2865/2928/2855 2866/2929/2855 +f 2777/2840/2856 2776/2839/2856 2839/2902/2856 2840/2903/2856 +f 2751/2814/2857 2750/2813/2857 2813/2876/2857 2814/2877/2857 +f 2804/2867/2858 2803/2866/2858 2866/2929/2858 2867/2930/2858 +f 2778/2841/2859 2777/2840/2859 2840/2903/2859 2841/2904/2859 +f 2752/2815/2860 2751/2814/2860 2814/2877/2860 2815/2878/2860 +f 2805/2868/2861 2804/2867/2861 2867/2930/2861 2868/2931/2861 +f 2779/2842/2862 2778/2841/2862 2841/2904/2862 2842/2905/2862 +f 2753/2816/2863 2752/2815/2863 2815/2878/2863 2816/2879/2863 +f 2806/2869/2864 2805/2868/2864 2868/2931/2864 2869/2932/2864 +f 2780/2843/2865 2779/2842/2865 2842/2905/2865 2843/2906/2865 +f 2754/2817/2866 2753/2816/2866 2816/2879/2866 2817/2880/2866 +f 2807/2870/2867 2806/2869/2867 2869/2932/2867 2870/2933/2867 +f 2781/2844/2868 2780/2843/2868 2843/2906/2868 2844/2907/2868 +f 2755/2818/2869 2754/2817/2869 2817/2880/2869 2818/2881/2869 +f 2808/2871/2870 2807/2870/2870 2870/2933/2870 2871/2934/2870 +f 2782/2845/2871 2781/2844/2871 2844/2907/2871 2845/2908/2871 +f 2756/2819/2872 2755/2818/2872 2818/2881/2872 2819/2882/2872 +f 2809/2872/2873 2808/2871/2873 2871/2934/2873 2872/2935/2873 +f 2783/2846/2874 2782/2845/2874 2845/2908/2874 2846/2909/2874 +f 2757/2820/2875 2756/2819/2875 2819/2882/2875 2820/2883/2875 +f 3818/3988/2876 2809/2872/2876 2872/2935/2876 +f 2784/2847/2877 2783/2846/2877 2846/2909/2877 2847/2910/2877 +f 2758/2821/2878 2757/2820/2878 2820/2883/2878 2821/2884/2878 +f 2785/2848/2879 2784/2847/2879 2847/2910/2879 2848/2911/2879 +f 2759/2822/2880 2758/2821/2880 2821/2884/2880 2822/2885/2880 +f 2851/2914/2881 2850/2913/2881 2913/2976/2881 2914/2977/2881 +f 2825/2888/2882 2824/2887/2882 2887/2950/2882 2888/2951/2882 +f 2852/2915/2883 2851/2914/2883 2914/2977/2883 2915/2978/2883 +f 2826/2889/2884 2825/2888/2884 2888/2951/2884 2889/2952/2884 +f 2853/2916/2885 2852/2915/2885 2915/2978/2885 2916/2979/2885 +f 2827/2890/2886 2826/2889/2886 2889/2952/2886 2890/2953/2886 +f 2854/2917/2887 2853/2916/2887 2916/2979/2887 2917/2980/2887 +f 2828/2891/2888 2827/2890/2888 2890/2953/2888 2891/2954/2888 +f 2855/2918/2889 2854/2917/2889 2917/2980/2889 2918/2981/2889 +f 2829/2892/2890 2828/2891/2890 2891/2954/2890 2892/2955/2890 +f 2856/2919/2891 2855/2918/2891 2918/2981/2891 2919/2982/2891 +f 2830/2893/2892 2829/2892/2892 2892/2955/2892 2893/2956/2892 +f 2857/2920/2893 2856/2919/2893 2919/2982/2893 2920/2983/2893 +f 2831/2894/2894 2830/2893/2894 2893/2956/2894 2894/2957/2894 +f 2858/2921/2895 2857/2920/2895 2920/2983/2895 2921/2984/2895 +f 2832/2895/2896 2831/2894/2896 2894/2957/2896 2895/2958/2896 +f 2859/2922/2897 2858/2921/2897 2921/2984/2897 2922/2985/2897 +f 2833/2896/2898 2832/2895/2898 2895/2958/2898 2896/2959/2898 +f 2860/2923/2899 2859/2922/2899 2922/2985/2899 2923/2986/2899 +f 2834/2897/2900 2833/2896/2900 2896/2959/2900 2897/2960/2900 +f 2861/2924/2901 2860/2923/2901 2923/2986/2901 2924/2987/2901 +f 2835/2898/2902 2834/2897/2902 2897/2960/2902 2898/2961/2902 +f 2862/2925/2903 2861/2924/2903 2924/2987/2903 2925/2988/2903 +f 2836/2899/2904 2835/2898/2904 2898/2961/2904 2899/2962/2904 +f 2810/2873/2905 1990/2035/2905 2873/2936/2905 +f 2863/2926/2906 2862/2925/2906 2925/2988/2906 2926/2989/2906 +f 2837/2900/2907 2836/2899/2907 2899/2962/2907 2900/2963/2907 +f 2811/2874/2908 2810/2873/2908 2873/2936/2908 2874/2937/2908 +f 2864/2927/2909 2863/2926/2909 2926/2989/2909 2927/2990/2909 +f 2838/2901/2910 2837/2900/2910 2900/2963/2910 2901/2964/2910 +f 2812/2875/2911 2811/2874/2911 2874/2937/2911 2875/2938/2911 +f 2865/2928/2912 2864/2927/2912 2927/2990/2912 2928/2991/2912 +f 2839/2902/2913 2838/2901/2913 2901/2964/2913 2902/2965/2913 +f 2813/2876/2914 2812/2875/2914 2875/2938/2914 2876/2939/2914 +f 2866/2929/2915 2865/2928/2915 2928/2991/2915 2929/2992/2915 +f 2840/2903/2916 2839/2902/2916 2902/2965/2916 2903/2966/2916 +f 2814/2877/2917 2813/2876/2917 2876/2939/2917 2877/2940/2917 +f 2867/2930/2918 2866/2929/2918 2929/2992/2918 2930/2993/2918 +f 2841/2904/2919 2840/2903/2919 2903/2966/2919 2904/2967/2919 +f 2815/2878/2920 2814/2877/2920 2877/2940/2920 2878/2941/2920 +f 2868/2931/2921 2867/2930/2921 2930/2993/2921 2931/2994/2921 +f 2842/2905/2922 2841/2904/2922 2904/2967/2922 2905/2968/2922 +f 2816/2879/2923 2815/2878/2923 2878/2941/2923 2879/2942/2923 +f 2869/2932/2924 2868/2931/2924 2931/2994/2924 2932/2995/2924 +f 2843/2906/2925 2842/2905/2925 2905/2968/2925 2906/2969/2925 +f 2817/2880/2926 2816/2879/2926 2879/2942/2926 2880/2943/2926 +f 2870/2933/2927 2869/2932/2927 2932/2995/2927 2933/2996/2927 +f 2844/2907/2928 2843/2906/2928 2906/2969/2928 2907/2970/2928 +f 2818/2881/2929 2817/2880/2929 2880/2943/2929 2881/2944/2929 +f 2871/2934/2930 2870/2933/2930 2933/2996/2930 2934/2997/2930 +f 2845/2908/2931 2844/2907/2931 2907/2970/2931 2908/2971/2931 +f 2819/2882/2932 2818/2881/2932 2881/2944/2932 2882/2945/2932 +f 2872/2935/2933 2871/2934/2933 2934/2997/2933 2935/2998/2933 +f 2846/2909/2934 2845/2908/2934 2908/2971/2934 2909/2972/2934 +f 2820/2883/2935 2819/2882/2935 2882/2945/2935 2883/2946/2935 +f 3818/3989/2936 2872/2935/2936 2935/2998/2936 +f 2847/2910/2937 2846/2909/2937 2909/2972/2937 2910/2973/2937 +f 2821/2884/2938 2820/2883/2938 2883/2946/2938 2884/2947/2938 +f 2848/2911/2939 2847/2910/2939 2910/2973/2939 2911/2974/2939 +f 2822/2885/2940 2821/2884/2940 2884/2947/2940 2885/2948/2940 +f 2849/2912/2941 2848/2911/2941 2911/2974/2941 2912/2975/2941 +f 2823/2886/2942 2822/2885/2942 2885/2948/2942 2886/2949/2942 +f 2850/2913/2943 2849/2912/2943 2912/2975/2943 2913/2976/2943 +f 2824/2887/2944 2823/2886/2944 2886/2949/2944 2887/2950/2944 +f 2916/2979/2945 2915/2978/2945 2978/3041/2945 2979/3042/2945 +f 2890/2953/2946 2889/2952/2946 2952/3015/2946 2953/3016/2946 +f 2917/2980/2947 2916/2979/2947 2979/3042/2947 2980/3043/2947 +f 2891/2954/2948 2890/2953/2948 2953/3016/2948 2954/3017/2948 +f 2918/2981/2949 2917/2980/2949 2980/3043/2949 2981/3044/2949 +f 2892/2955/2950 2891/2954/2950 2954/3017/2950 2955/3018/2950 +f 2919/2982/2951 2918/2981/2951 2981/3044/2951 2982/3045/2951 +f 2893/2956/2952 2892/2955/2952 2955/3018/2952 2956/3019/2952 +f 2920/2983/2953 2919/2982/2953 2982/3045/2953 2983/3046/2953 +f 2894/2957/2954 2893/2956/2954 2956/3019/2954 2957/3020/2954 +f 2921/2984/2955 2920/2983/2955 2983/3046/2955 2984/3047/2955 +f 2895/2958/2956 2894/2957/2956 2957/3020/2956 2958/3021/2956 +f 2922/2985/2957 2921/2984/2957 2984/3047/2957 2985/3048/2957 +f 2896/2959/2958 2895/2958/2958 2958/3021/2958 2959/3022/2958 +f 2923/2986/2959 2922/2985/2959 2985/3048/2959 2986/3049/2959 +f 2897/2960/2960 2896/2959/2960 2959/3022/2960 2960/3023/2960 +f 2924/2987/2961 2923/2986/2961 2986/3049/2961 2987/3050/2961 +f 2898/2961/2962 2897/2960/2962 2960/3023/2962 2961/3024/2962 +f 2925/2988/2963 2924/2987/2963 2987/3050/2963 2988/3051/2963 +f 2899/2962/2964 2898/2961/2964 2961/3024/2964 2962/3025/2964 +f 2873/2936/2965 1990/2036/2965 2936/2999/2965 +f 2926/2989/2966 2925/2988/2966 2988/3051/2966 2989/3052/2966 +f 2900/2963/2967 2899/2962/2967 2962/3025/2967 2963/3026/2967 +f 2874/2937/2968 2873/2936/2968 2936/2999/2968 2937/3000/2968 +f 2927/2990/2969 2926/2989/2969 2989/3052/2969 2990/3053/2969 +f 2901/2964/2970 2900/2963/2970 2963/3026/2970 2964/3027/2970 +f 2875/2938/2971 2874/2937/2971 2937/3000/2971 2938/3001/2971 +f 2928/2991/2972 2927/2990/2972 2990/3053/2972 2991/3054/2972 +f 2902/2965/2973 2901/2964/2973 2964/3027/2973 2965/3028/2973 +f 2876/2939/2974 2875/2938/2974 2938/3001/2974 2939/3002/2974 +f 2929/2992/2975 2928/2991/2975 2991/3054/2975 2992/3055/2975 +f 2903/2966/2976 2902/2965/2976 2965/3028/2976 2966/3029/2976 +f 2877/2940/2977 2876/2939/2977 2939/3002/2977 2940/3003/2977 +f 2930/2993/2978 2929/2992/2978 2992/3055/2978 2993/3056/2978 +f 2904/2967/2979 2903/2966/2979 2966/3029/2979 2967/3030/2979 +f 2878/2941/2980 2877/2940/2980 2940/3003/2980 2941/3004/2980 +f 2931/2994/2981 2930/2993/2981 2993/3056/2981 2994/3057/2981 +f 2905/2968/2982 2904/2967/2982 2967/3030/2982 2968/3031/2982 +f 2879/2942/2983 2878/2941/2983 2941/3004/2983 2942/3005/2983 +f 2932/2995/2984 2931/2994/2984 2994/3057/2984 2995/3058/2984 +f 2906/2969/2985 2905/2968/2985 2968/3031/2985 2969/3032/2985 +f 2880/2943/2986 2879/2942/2986 2942/3005/2986 2943/3006/2986 +f 2933/2996/2987 2932/2995/2987 2995/3058/2987 2996/3059/2987 +f 2907/2970/2988 2906/2969/2988 2969/3032/2988 2970/3033/2988 +f 2881/2944/2989 2880/2943/2989 2943/3006/2989 2944/3007/2989 +f 2934/2997/2990 2933/2996/2990 2996/3059/2990 2997/3060/2990 +f 2908/2971/2991 2907/2970/2991 2970/3033/2991 2971/3034/2991 +f 2882/2945/2992 2881/2944/2992 2944/3007/2992 2945/3008/2992 +f 2935/2998/2993 2934/2997/2993 2997/3060/2993 2998/3061/2993 +f 2909/2972/2994 2908/2971/2994 2971/3034/2994 2972/3035/2994 +f 2883/2946/2995 2882/2945/2995 2945/3008/2995 2946/3009/2995 +f 3818/3990/2996 2935/2998/2996 2998/3061/2996 +f 2910/2973/2997 2909/2972/2997 2972/3035/2997 2973/3036/2997 +f 2884/2947/2998 2883/2946/2998 2946/3009/2998 2947/3010/2998 +f 2911/2974/2999 2910/2973/2999 2973/3036/2999 2974/3037/2999 +f 2885/2948/3000 2884/2947/3000 2947/3010/3000 2948/3011/3000 +f 2912/2975/3001 2911/2974/3001 2974/3037/3001 2975/3038/3001 +f 2886/2949/3002 2885/2948/3002 2948/3011/3002 2949/3012/3002 +f 2913/2976/3003 2912/2975/3003 2975/3038/3003 2976/3039/3003 +f 2887/2950/3004 2886/2949/3004 2949/3012/3004 2950/3013/3004 +f 2914/2977/3005 2913/2976/3005 2976/3039/3005 2977/3040/3005 +f 2888/2951/3006 2887/2950/3006 2950/3013/3006 2951/3014/3006 +f 2915/2978/3007 2914/2977/3007 2977/3040/3007 2978/3041/3007 +f 2889/2952/3008 2888/2951/3008 2951/3014/3008 2952/3015/3008 +f 2981/3044/3009 2980/3043/3009 3043/3150/3009 3044/3152/3009 +f 2955/3018/3010 2954/3017/3010 3017/3098/3010 3018/3100/3010 +f 2982/3045/3011 2981/3044/3011 3044/3152/3011 3045/3154/3011 +f 2956/3019/3012 2955/3018/3012 3018/3100/3012 3019/3102/3012 +f 2983/3046/3013 2982/3045/3013 3045/3154/3013 3046/3156/3013 +f 2957/3020/3014 2956/3019/3014 3019/3102/3014 3020/3104/3014 +f 2984/3047/3015 2983/3046/3015 3046/3156/3015 3047/3158/3015 +f 2958/3021/3016 2957/3020/3016 3020/3104/3016 3021/3106/3016 +f 2985/3048/3017 2984/3047/3017 3047/3158/3017 3048/3160/3017 +f 2959/3022/3018 2958/3021/3018 3021/3106/3018 3022/3108/3018 +f 2986/3049/3019 2985/3048/3019 3048/3160/3019 3049/3162/3019 +f 2960/3023/3020 2959/3022/3020 3022/3108/3020 3023/3110/3020 +f 2987/3050/3021 2986/3049/3021 3049/3162/3021 3050/3164/3021 +f 2961/3024/3022 2960/3023/3022 3023/3110/3022 3024/3112/3022 +f 2988/3051/3023 2987/3050/3023 3050/3164/3023 3051/3166/3023 +f 2962/3025/3024 2961/3024/3024 3024/3112/3024 3025/3114/3024 +f 2936/2999/3025 1990/2037/3025 2999/3062/3025 +f 2989/3052/3026 2988/3051/3026 3051/3166/3026 3052/3168/3026 +f 2963/3026/3027 2962/3025/3027 3025/3114/3027 3026/3116/3027 +f 2937/3000/3028 2936/2999/3028 2999/3062/3028 3000/3064/3028 +f 2990/3053/3029 2989/3052/3029 3052/3168/3029 3053/3170/3029 +f 2964/3027/3030 2963/3026/3030 3026/3116/3030 3027/3118/3030 +f 2938/3001/3031 2937/3000/3031 3000/3064/3031 3001/3066/3031 +f 2991/3054/3032 2990/3053/3032 3053/3170/3032 3054/3172/3032 +f 2965/3028/3033 2964/3027/3033 3027/3118/3033 3028/3120/3033 +f 2939/3002/3034 2938/3001/3034 3001/3066/3034 3002/3068/3034 +f 2992/3055/3035 2991/3054/3035 3054/3172/3035 3055/3174/3035 +f 2966/3029/3036 2965/3028/3036 3028/3120/3036 3029/3122/3036 +f 2940/3003/3037 2939/3002/3037 3002/3068/3037 3003/3070/3037 +f 2993/3056/3038 2992/3055/3038 3055/3174/3038 3056/3176/3038 +f 2967/3030/3039 2966/3029/3039 3029/3122/3039 3030/3124/3039 +f 2941/3004/3040 2940/3003/3040 3003/3070/3040 3004/3072/3040 +f 2994/3057/3041 2993/3056/3041 3056/3176/3041 3057/3178/3041 +f 2968/3031/3042 2967/3030/3042 3030/3124/3042 3031/3126/3042 +f 2942/3005/3043 2941/3004/3043 3004/3072/3043 3005/3074/3043 +f 2995/3058/3044 2994/3057/3044 3057/3178/3044 3058/3180/3044 +f 2969/3032/3045 2968/3031/3045 3031/3126/3045 3032/3128/3045 +f 2943/3006/3046 2942/3005/3046 3005/3074/3046 3006/3076/3046 +f 2996/3059/3047 2995/3058/3047 3058/3180/3047 3059/3182/3047 +f 2970/3033/3048 2969/3032/3048 3032/3128/3048 3033/3130/3048 +f 2944/3007/3049 2943/3006/3049 3006/3076/3049 3007/3078/3049 +f 2997/3060/3050 2996/3059/3050 3059/3182/3050 3060/3184/3050 +f 2971/3034/3051 2970/3033/3051 3033/3130/3051 3034/3132/3051 +f 2945/3008/3052 2944/3007/3052 3007/3078/3052 3008/3080/3052 +f 2998/3061/3053 2997/3060/3053 3060/3184/3053 3061/3186/3053 +f 2972/3035/3054 2971/3034/3054 3034/3132/3054 3035/3134/3054 +f 2946/3009/3055 2945/3008/3055 3008/3080/3055 3009/3082/3055 +f 3818/3991/3056 2998/3061/3056 3061/3186/3056 +f 2973/3036/3057 2972/3035/3057 3035/3134/3057 3036/3136/3057 +f 2947/3010/3058 2946/3009/3058 3009/3082/3058 3010/3084/3058 +f 2974/3037/3059 2973/3036/3059 3036/3136/3059 3037/3138/3059 +f 2948/3011/3060 2947/3010/3060 3010/3084/3060 3011/3086/3060 +f 2975/3038/3061 2974/3037/3061 3037/3138/3061 3038/3140/3061 +f 2949/3012/3062 2948/3011/3062 3011/3086/3062 3012/3088/3062 +f 2976/3039/3063 2975/3038/3063 3038/3140/3063 3039/3142/3063 +f 2950/3013/3064 2949/3012/3064 3012/3088/3064 3013/3090/3064 +f 2977/3040/3065 2976/3039/3065 3039/3142/3065 3040/3144/3065 +f 2951/3014/3066 2950/3013/3066 3013/3090/3066 3014/3092/3066 +f 2978/3041/3067 2977/3040/3067 3040/3144/3067 3041/3146/3067 +f 2952/3015/3068 2951/3014/3068 3014/3092/3068 3015/3094/3068 +f 2979/3042/3069 2978/3041/3069 3041/3146/3069 3042/3148/3069 +f 2953/3016/3070 2952/3015/3070 3015/3094/3070 3016/3096/3070 +f 2980/3043/3071 2979/3042/3071 3042/3148/3071 3043/3150/3071 +f 2954/3017/3072 2953/3016/3072 3016/3096/3072 3017/3098/3072 +f 3046/3157/3073 3045/3155/3073 3108/3234/3073 3109/3235/3073 +f 3020/3105/3074 3019/3103/3074 3082/3208/3074 3083/3209/3074 +f 3047/3159/3075 3046/3157/3075 3109/3235/3075 3110/3236/3075 +f 3021/3107/3076 3020/3105/3076 3083/3209/3076 3084/3210/3076 +f 3048/3161/3077 3047/3159/3077 3110/3236/3077 3111/3237/3077 +f 3022/3109/3078 3021/3107/3078 3084/3210/3078 3085/3211/3078 +f 3049/3163/3079 3048/3161/3079 3111/3237/3079 3112/3238/3079 +f 3023/3111/3080 3022/3109/3080 3085/3211/3080 3086/3212/3080 +f 3050/3165/3081 3049/3163/3081 3112/3238/3081 3113/3239/3081 +f 3024/3113/3082 3023/3111/3082 3086/3212/3082 3087/3213/3082 +f 3051/3167/3083 3050/3165/3083 3113/3239/3083 3114/3240/3083 +f 3025/3115/3084 3024/3113/3084 3087/3213/3084 3088/3214/3084 +f 2999/3063/3085 1990/2038/3085 3062/3188/3085 +f 3052/3169/3086 3051/3167/3086 3114/3240/3086 3115/3241/3086 +f 3026/3117/3087 3025/3115/3087 3088/3214/3087 3089/3215/3087 +f 3000/3065/3088 2999/3063/3088 3062/3188/3088 3063/3189/3088 +f 3053/3171/3089 3052/3169/3089 3115/3241/3089 3116/3242/3089 +f 3027/3119/3090 3026/3117/3090 3089/3215/3090 3090/3216/3090 +f 3001/3067/3091 3000/3065/3091 3063/3189/3091 3064/3190/3091 +f 3054/3173/3092 3053/3171/3092 3116/3242/3092 3117/3243/3092 +f 3028/3121/3093 3027/3119/3093 3090/3216/3093 3091/3217/3093 +f 3002/3069/3094 3001/3067/3094 3064/3190/3094 3065/3191/3094 +f 3055/3175/3095 3054/3173/3095 3117/3243/3095 3118/3244/3095 +f 3029/3123/3096 3028/3121/3096 3091/3217/3096 3092/3218/3096 +f 3003/3071/3097 3002/3069/3097 3065/3191/3097 3066/3192/3097 +f 3056/3177/3098 3055/3175/3098 3118/3244/3098 3119/3245/3098 +f 3030/3125/3099 3029/3123/3099 3092/3218/3099 3093/3219/3099 +f 3004/3073/3100 3003/3071/3100 3066/3192/3100 3067/3193/3100 +f 3057/3179/3101 3056/3177/3101 3119/3245/3101 3120/3246/3101 +f 3031/3127/3102 3030/3125/3102 3093/3219/3102 3094/3220/3102 +f 3005/3075/3103 3004/3073/3103 3067/3193/3103 3068/3194/3103 +f 3058/3181/3104 3057/3179/3104 3120/3246/3104 3121/3247/3104 +f 3032/3129/3105 3031/3127/3105 3094/3220/3105 3095/3221/3105 +f 3006/3077/3106 3005/3075/3106 3068/3194/3106 3069/3195/3106 +f 3059/3183/3107 3058/3181/3107 3121/3247/3107 3122/3248/3107 +f 3033/3131/3108 3032/3129/3108 3095/3221/3108 3096/3222/3108 +f 3007/3079/3109 3006/3077/3109 3069/3195/3109 3070/3196/3109 +f 3060/3185/3110 3059/3183/3110 3122/3248/3110 3123/3249/3110 +f 3034/3133/3111 3033/3131/3111 3096/3222/3111 3097/3223/3111 +f 3008/3081/3112 3007/3079/3112 3070/3196/3112 3071/3197/3112 +f 3061/3187/3113 3060/3185/3113 3123/3249/3113 3124/3250/3113 +f 3035/3135/3114 3034/3133/3114 3097/3223/3114 3098/3224/3114 +f 3009/3083/3115 3008/3081/3115 3071/3197/3115 3072/3198/3115 +f 3818/3992/3116 3061/3187/3116 3124/3250/3116 +f 3036/3137/3117 3035/3135/3117 3098/3224/3117 3099/3225/3117 +f 3010/3085/3118 3009/3083/3118 3072/3198/3118 3073/3199/3118 +f 3037/3139/3119 3036/3137/3119 3099/3225/3119 3100/3226/3119 +f 3011/3087/3120 3010/3085/3120 3073/3199/3120 3074/3200/3120 +f 3038/3141/3121 3037/3139/3121 3100/3226/3121 3101/3227/3121 +f 3012/3089/3122 3011/3087/3122 3074/3200/3122 3075/3201/3122 +f 3039/3143/3123 3038/3141/3123 3101/3227/3123 3102/3228/3123 +f 3013/3091/3124 3012/3089/3124 3075/3201/3124 3076/3202/3124 +f 3040/3145/3125 3039/3143/3125 3102/3228/3125 3103/3229/3125 +f 3014/3093/3126 3013/3091/3126 3076/3202/3126 3077/3203/3126 +f 3041/3147/3127 3040/3145/3127 3103/3229/3127 3104/3230/3127 +f 3015/3095/3128 3014/3093/3128 3077/3203/3128 3078/3204/3128 +f 3042/3149/3129 3041/3147/3129 3104/3230/3129 3105/3231/3129 +f 3016/3097/3130 3015/3095/3130 3078/3204/3130 3079/3205/3130 +f 3043/3151/3131 3042/3149/3131 3105/3231/3131 3106/3232/3131 +f 3017/3099/3132 3016/3097/3132 3079/3205/3132 3080/3206/3132 +f 3044/3153/3133 3043/3151/3133 3106/3232/3133 3107/3233/3133 +f 3018/3101/3134 3017/3099/3134 3080/3206/3134 3081/3207/3134 +f 3045/3155/3135 3044/3153/3135 3107/3233/3135 3108/3234/3135 +f 3019/3103/3136 3018/3101/3136 3081/3207/3136 3082/3208/3136 +f 3111/3237/3137 3110/3236/3137 3173/3299/3137 3174/3300/3137 +f 3085/3211/3138 3084/3210/3138 3147/3273/3138 3148/3274/3138 +f 3112/3238/3139 3111/3237/3139 3174/3300/3139 3175/3301/3139 +f 3086/3212/3140 3085/3211/3140 3148/3274/3140 3149/3275/3140 +f 3113/3239/3141 3112/3238/3141 3175/3301/3141 3176/3302/3141 +f 3087/3213/3142 3086/3212/3142 3149/3275/3142 3150/3276/3142 +f 3114/3240/3143 3113/3239/3143 3176/3302/3143 3177/3303/3143 +f 3088/3214/3144 3087/3213/3144 3150/3276/3144 3151/3277/3144 +f 3062/3188/3145 1990/2039/3145 3125/3251/3145 +f 3115/3241/3146 3114/3240/3146 3177/3303/3146 3178/3304/3146 +f 3089/3215/3147 3088/3214/3147 3151/3277/3147 3152/3278/3147 +f 3063/3189/3148 3062/3188/3148 3125/3251/3148 3126/3252/3148 +f 3116/3242/3149 3115/3241/3149 3178/3304/3149 3179/3305/3149 +f 3090/3216/3150 3089/3215/3150 3152/3278/3150 3153/3279/3150 +f 3064/3190/3151 3063/3189/3151 3126/3252/3151 3127/3253/3151 +f 3117/3243/3152 3116/3242/3152 3179/3305/3152 3180/3306/3152 +f 3091/3217/3153 3090/3216/3153 3153/3279/3153 3154/3280/3153 +f 3065/3191/3154 3064/3190/3154 3127/3253/3154 3128/3254/3154 +f 3118/3244/3155 3117/3243/3155 3180/3306/3155 3181/3307/3155 +f 3092/3218/3156 3091/3217/3156 3154/3280/3156 3155/3281/3156 +f 3066/3192/3157 3065/3191/3157 3128/3254/3157 3129/3255/3157 +f 3119/3245/3158 3118/3244/3158 3181/3307/3158 3182/3308/3158 +f 3093/3219/3159 3092/3218/3159 3155/3281/3159 3156/3282/3159 +f 3067/3193/3160 3066/3192/3160 3129/3255/3160 3130/3256/3160 +f 3120/3246/3161 3119/3245/3161 3182/3308/3161 3183/3309/3161 +f 3094/3220/3162 3093/3219/3162 3156/3282/3162 3157/3283/3162 +f 3068/3194/3163 3067/3193/3163 3130/3256/3163 3131/3257/3163 +f 3121/3247/3164 3120/3246/3164 3183/3309/3164 3184/3310/3164 +f 3095/3221/3165 3094/3220/3165 3157/3283/3165 3158/3284/3165 +f 3069/3195/3166 3068/3194/3166 3131/3257/3166 3132/3258/3166 +f 3122/3248/3167 3121/3247/3167 3184/3310/3167 3185/3311/3167 +f 3096/3222/3168 3095/3221/3168 3158/3284/3168 3159/3285/3168 +f 3070/3196/3169 3069/3195/3169 3132/3258/3169 3133/3259/3169 +f 3123/3249/3170 3122/3248/3170 3185/3311/3170 3186/3312/3170 +f 3097/3223/3171 3096/3222/3171 3159/3285/3171 3160/3286/3171 +f 3071/3197/3172 3070/3196/3172 3133/3259/3172 3134/3260/3172 +f 3124/3250/3173 3123/3249/3173 3186/3312/3173 3187/3313/3173 +f 3098/3224/3174 3097/3223/3174 3160/3286/3174 3161/3287/3174 +f 3072/3198/3175 3071/3197/3175 3134/3260/3175 3135/3261/3175 +f 3818/3993/3176 3124/3250/3176 3187/3313/3176 +f 3099/3225/3177 3098/3224/3177 3161/3287/3177 3162/3288/3177 +f 3073/3199/3178 3072/3198/3178 3135/3261/3178 3136/3262/3178 +f 3100/3226/3179 3099/3225/3179 3162/3288/3179 3163/3289/3179 +f 3074/3200/3180 3073/3199/3180 3136/3262/3180 3137/3263/3180 +f 3101/3227/3181 3100/3226/3181 3163/3289/3181 3164/3290/3181 +f 3075/3201/3182 3074/3200/3182 3137/3263/3182 3138/3264/3182 +f 3102/3228/3183 3101/3227/3183 3164/3290/3183 3165/3291/3183 +f 3076/3202/3184 3075/3201/3184 3138/3264/3184 3139/3265/3184 +f 3103/3229/3185 3102/3228/3185 3165/3291/3185 3166/3292/3185 +f 3077/3203/3186 3076/3202/3186 3139/3265/3186 3140/3266/3186 +f 3104/3230/3187 3103/3229/3187 3166/3292/3187 3167/3293/3187 +f 3078/3204/3188 3077/3203/3188 3140/3266/3188 3141/3267/3188 +f 3105/3231/3189 3104/3230/3189 3167/3293/3189 3168/3294/3189 +f 3079/3205/3190 3078/3204/3190 3141/3267/3190 3142/3268/3190 +f 3106/3232/3191 3105/3231/3191 3168/3294/3191 3169/3295/3191 +f 3080/3206/3192 3079/3205/3192 3142/3268/3192 3143/3269/3192 +f 3107/3233/3193 3106/3232/3193 3169/3295/3193 3170/3296/3193 +f 3081/3207/3194 3080/3206/3194 3143/3269/3194 3144/3270/3194 +f 3108/3234/3195 3107/3233/3195 3170/3296/3195 3171/3297/3195 +f 3082/3208/3196 3081/3207/3196 3144/3270/3196 3145/3271/3196 +f 3109/3235/3197 3108/3234/3197 3171/3297/3197 3172/3298/3197 +f 3083/3209/3198 3082/3208/3198 3145/3271/3198 3146/3272/3198 +f 3110/3236/3199 3109/3235/3199 3172/3298/3199 3173/3299/3199 +f 3084/3210/3200 3083/3209/3200 3146/3272/3200 3147/3273/3200 +f 3176/3302/3201 3175/3301/3201 3238/3364/3201 3239/3365/3201 +f 3150/3276/3202 3149/3275/3202 3212/3338/3202 3213/3339/3202 +f 3177/3303/3203 3176/3302/3203 3239/3365/3203 3240/3366/3203 +f 3151/3277/3204 3150/3276/3204 3213/3339/3204 3214/3340/3204 +f 3125/3251/3205 1990/2040/3205 3188/3314/3205 +f 3178/3304/3206 3177/3303/3206 3240/3366/3206 3241/3367/3206 +f 3152/3278/3207 3151/3277/3207 3214/3340/3207 3215/3341/3207 +f 3126/3252/3208 3125/3251/3208 3188/3314/3208 3189/3315/3208 +f 3179/3305/3209 3178/3304/3209 3241/3367/3209 3242/3368/3209 +f 3153/3279/3210 3152/3278/3210 3215/3341/3210 3216/3342/3210 +f 3127/3253/3211 3126/3252/3211 3189/3315/3211 3190/3316/3211 +f 3180/3306/3212 3179/3305/3212 3242/3368/3212 3243/3369/3212 +f 3154/3280/3213 3153/3279/3213 3216/3342/3213 3217/3343/3213 +f 3128/3254/3214 3127/3253/3214 3190/3316/3214 3191/3317/3214 +f 3181/3307/3215 3180/3306/3215 3243/3369/3215 3244/3370/3215 +f 3155/3281/3216 3154/3280/3216 3217/3343/3216 3218/3344/3216 +f 3129/3255/3217 3128/3254/3217 3191/3317/3217 3192/3318/3217 +f 3182/3308/3218 3181/3307/3218 3244/3370/3218 3245/3371/3218 +f 3156/3282/3219 3155/3281/3219 3218/3344/3219 3219/3345/3219 +f 3130/3256/3220 3129/3255/3220 3192/3318/3220 3193/3319/3220 +f 3183/3309/3221 3182/3308/3221 3245/3371/3221 3246/3372/3221 +f 3157/3283/3222 3156/3282/3222 3219/3345/3222 3220/3346/3222 +f 3131/3257/3223 3130/3256/3223 3193/3319/3223 3194/3320/3223 +f 3184/3310/3224 3183/3309/3224 3246/3372/3224 3247/3373/3224 +f 3158/3284/3225 3157/3283/3225 3220/3346/3225 3221/3347/3225 +f 3132/3258/3226 3131/3257/3226 3194/3320/3226 3195/3321/3226 +f 3185/3311/3227 3184/3310/3227 3247/3373/3227 3248/3374/3227 +f 3159/3285/3228 3158/3284/3228 3221/3347/3228 3222/3348/3228 +f 3133/3259/3229 3132/3258/3229 3195/3321/3229 3196/3322/3229 +f 3186/3312/3230 3185/3311/3230 3248/3374/3230 3249/3375/3230 +f 3160/3286/3231 3159/3285/3231 3222/3348/3231 3223/3349/3231 +f 3134/3260/3232 3133/3259/3232 3196/3322/3232 3197/3323/3232 +f 3187/3313/3233 3186/3312/3233 3249/3375/3233 3250/3376/3233 +f 3161/3287/3234 3160/3286/3234 3223/3349/3234 3224/3350/3234 +f 3135/3261/3235 3134/3260/3235 3197/3323/3235 3198/3324/3235 +f 3818/3994/3236 3187/3313/3236 3250/3376/3236 +f 3162/3288/3237 3161/3287/3237 3224/3350/3237 3225/3351/3237 +f 3136/3262/3238 3135/3261/3238 3198/3324/3238 3199/3325/3238 +f 3163/3289/3239 3162/3288/3239 3225/3351/3239 3226/3352/3239 +f 3137/3263/3240 3136/3262/3240 3199/3325/3240 3200/3326/3240 +f 3164/3290/3241 3163/3289/3241 3226/3352/3241 3227/3353/3241 +f 3138/3264/3242 3137/3263/3242 3200/3326/3242 3201/3327/3242 +f 3165/3291/3243 3164/3290/3243 3227/3353/3243 3228/3354/3243 +f 3139/3265/3244 3138/3264/3244 3201/3327/3244 3202/3328/3244 +f 3166/3292/3245 3165/3291/3245 3228/3354/3245 3229/3355/3245 +f 3140/3266/3246 3139/3265/3246 3202/3328/3246 3203/3329/3246 +f 3167/3293/3247 3166/3292/3247 3229/3355/3247 3230/3356/3247 +f 3141/3267/3248 3140/3266/3248 3203/3329/3248 3204/3330/3248 +f 3168/3294/3249 3167/3293/3249 3230/3356/3249 3231/3357/3249 +f 3142/3268/3250 3141/3267/3250 3204/3330/3250 3205/3331/3250 +f 3169/3295/3251 3168/3294/3251 3231/3357/3251 3232/3358/3251 +f 3143/3269/3252 3142/3268/3252 3205/3331/3252 3206/3332/3252 +f 3170/3296/3253 3169/3295/3253 3232/3358/3253 3233/3359/3253 +f 3144/3270/3254 3143/3269/3254 3206/3332/3254 3207/3333/3254 +f 3171/3297/3255 3170/3296/3255 3233/3359/3255 3234/3360/3255 +f 3145/3271/3256 3144/3270/3256 3207/3333/3256 3208/3334/3256 +f 3172/3298/3257 3171/3297/3257 3234/3360/3257 3235/3361/3257 +f 3146/3272/3258 3145/3271/3258 3208/3334/3258 3209/3335/3258 +f 3173/3299/3259 3172/3298/3259 3235/3361/3259 3236/3362/3259 +f 3147/3273/3260 3146/3272/3260 3209/3335/3260 3210/3336/3260 +f 3174/3300/3261 3173/3299/3261 3236/3362/3261 3237/3363/3261 +f 3148/3274/3262 3147/3273/3262 3210/3336/3262 3211/3337/3262 +f 3175/3301/3263 3174/3300/3263 3237/3363/3263 3238/3364/3263 +f 3149/3275/3264 3148/3274/3264 3211/3337/3264 3212/3338/3264 +f 3215/3341/3265 3214/3340/3265 3277/3403/3265 3278/3404/3265 +f 3189/3315/3266 3188/3314/3266 3251/3377/3266 3252/3378/3266 +f 3247/3373/3267 3246/3372/3267 3309/3435/3267 3310/3436/3267 +f 3216/3342/3268 3215/3341/3268 3278/3404/3268 3279/3405/3268 +f 3190/3316/3269 3189/3315/3269 3252/3378/3269 3253/3379/3269 +f 3248/3374/3270 3247/3373/3270 3310/3436/3270 3311/3437/3270 +f 3217/3343/3271 3216/3342/3271 3279/3405/3271 3280/3406/3271 +f 3191/3317/3272 3190/3316/3272 3253/3379/3272 3254/3380/3272 +f 3249/3375/3273 3248/3374/3273 3311/3437/3273 3312/3438/3273 +f 3218/3344/3274 3217/3343/3274 3280/3406/3274 3281/3407/3274 +f 3192/3318/3275 3191/3317/3275 3254/3380/3275 3255/3381/3275 +f 3250/3376/3276 3249/3375/3276 3312/3438/3276 3313/3439/3276 +f 3219/3345/3277 3218/3344/3277 3281/3407/3277 3282/3408/3277 +f 3193/3319/3278 3192/3318/3278 3255/3381/3278 3256/3382/3278 +f 3818/3995/3279 3250/3376/3279 3313/3439/3279 +f 3220/3346/3280 3219/3345/3280 3282/3408/3280 3283/3409/3280 +f 3194/3320/3281 3193/3319/3281 3256/3382/3281 3257/3383/3281 +f 3226/3352/3282 3225/3351/3282 3288/3414/3282 3289/3415/3282 +f 3221/3347/3283 3220/3346/3283 3283/3409/3283 3284/3410/3283 +f 3195/3321/3284 3194/3320/3284 3257/3383/3284 3258/3384/3284 +f 3227/3353/3285 3226/3352/3285 3289/3415/3285 3290/3416/3285 +f 3222/3348/3286 3221/3347/3286 3284/3410/3286 3285/3411/3286 +f 3196/3322/3287 3195/3321/3287 3258/3384/3287 3259/3385/3287 +f 3228/3354/3288 3227/3353/3288 3290/3416/3288 3291/3417/3288 +f 3223/3349/3289 3222/3348/3289 3285/3411/3289 3286/3412/3289 +f 3197/3323/3290 3196/3322/3290 3259/3385/3290 3260/3386/3290 +f 3229/3355/3291 3228/3354/3291 3291/3417/3291 3292/3418/3291 +f 3224/3350/3292 3223/3349/3292 3286/3412/3292 3287/3413/3292 +f 3198/3324/3293 3197/3323/3293 3260/3386/3293 3261/3387/3293 +f 3230/3356/3294 3229/3355/3294 3292/3418/3294 3293/3419/3294 +f 3225/3351/3295 3224/3350/3295 3287/3413/3295 3288/3414/3295 +f 3199/3325/3296 3198/3324/3296 3261/3387/3296 3262/3388/3296 +f 3231/3357/3297 3230/3356/3297 3293/3419/3297 3294/3420/3297 +f 3200/3326/3298 3199/3325/3298 3262/3388/3298 3263/3389/3298 +f 3232/3358/3299 3231/3357/3299 3294/3420/3299 3295/3421/3299 +f 3201/3327/3300 3200/3326/3300 3263/3389/3300 3264/3390/3300 +f 3233/3359/3301 3232/3358/3301 3295/3421/3301 3296/3422/3301 +f 3202/3328/3302 3201/3327/3302 3264/3390/3302 3265/3391/3302 +f 3234/3360/3303 3233/3359/3303 3296/3422/3303 3297/3423/3303 +f 3203/3329/3304 3202/3328/3304 3265/3391/3304 3266/3392/3304 +f 3235/3361/3305 3234/3360/3305 3297/3423/3305 3298/3424/3305 +f 3204/3330/3306 3203/3329/3306 3266/3392/3306 3267/3393/3306 +f 3236/3362/3307 3235/3361/3307 3298/3424/3307 3299/3425/3307 +f 3205/3331/3308 3204/3330/3308 3267/3393/3308 3268/3394/3308 +f 3237/3363/3309 3236/3362/3309 3299/3425/3309 3300/3426/3309 +f 3206/3332/3310 3205/3331/3310 3268/3394/3310 3269/3395/3310 +f 3238/3364/3311 3237/3363/3311 3300/3426/3311 3301/3427/3311 +f 3207/3333/3312 3206/3332/3312 3269/3395/3312 3270/3396/3312 +f 3239/3365/3313 3238/3364/3313 3301/3427/3313 3302/3428/3313 +f 3208/3334/3314 3207/3333/3314 3270/3396/3314 3271/3397/3314 +f 3240/3366/3315 3239/3365/3315 3302/3428/3315 3303/3429/3315 +f 3209/3335/3316 3208/3334/3316 3271/3397/3316 3272/3398/3316 +f 3241/3367/3317 3240/3366/3317 3303/3429/3317 3304/3430/3317 +f 3210/3336/3318 3209/3335/3318 3272/3398/3318 3273/3399/3318 +f 3242/3368/3319 3241/3367/3319 3304/3430/3319 3305/3431/3319 +f 3211/3337/3320 3210/3336/3320 3273/3399/3320 3274/3400/3320 +f 3243/3369/3321 3242/3368/3321 3305/3431/3321 3306/3432/3321 +f 3212/3338/3322 3211/3337/3322 3274/3400/3322 3275/3401/3322 +f 3244/3370/3323 3243/3369/3323 3306/3432/3323 3307/3433/3323 +f 3213/3339/3324 3212/3338/3324 3275/3401/3324 3276/3402/3324 +f 3245/3371/3325 3244/3370/3325 3307/3433/3325 3308/3434/3325 +f 3214/3340/3326 3213/3339/3326 3276/3402/3326 3277/3403/3326 +f 3188/3314/3327 1990/2041/3327 3251/3377/3327 +f 3246/3372/3328 3245/3371/3328 3308/3434/3328 3309/3435/3328 +f 3285/3411/3329 3284/3410/3329 3347/3473/3329 3348/3474/3329 +f 3259/3385/3330 3258/3384/3330 3321/3447/3330 3322/3448/3330 +f 3312/3438/3331 3311/3437/3331 3374/3500/3331 3375/3501/3331 +f 3286/3412/3332 3285/3411/3332 3348/3474/3332 3349/3475/3332 +f 3260/3386/3333 3259/3385/3333 3322/3448/3333 3323/3449/3333 +f 3313/3439/3334 3312/3438/3334 3375/3501/3334 3376/3502/3334 +f 3287/3413/3335 3286/3412/3335 3349/3475/3335 3350/3476/3335 +f 3261/3387/3336 3260/3386/3336 3323/3449/3336 3324/3450/3336 +f 3818/3996/3337 3313/3439/3337 3376/3502/3337 +f 3288/3414/3338 3287/3413/3338 3350/3476/3338 3351/3477/3338 +f 3262/3388/3339 3261/3387/3339 3324/3450/3339 3325/3451/3339 +f 3289/3415/3340 3288/3414/3340 3351/3477/3340 3352/3478/3340 +f 3263/3389/3341 3262/3388/3341 3325/3451/3341 3326/3452/3341 +f 3290/3416/3342 3289/3415/3342 3352/3478/3342 3353/3479/3342 +f 3264/3390/3343 3263/3389/3343 3326/3452/3343 3327/3453/3343 +f 3291/3417/3344 3290/3416/3344 3353/3479/3344 3354/3480/3344 +f 3265/3391/3345 3264/3390/3345 3327/3453/3345 3328/3454/3345 +f 3292/3418/3346 3291/3417/3346 3354/3480/3346 3355/3481/3346 +f 3266/3392/3347 3265/3391/3347 3328/3454/3347 3329/3455/3347 +f 3293/3419/3348 3292/3418/3348 3355/3481/3348 3356/3482/3348 +f 3267/3393/3349 3266/3392/3349 3329/3455/3349 3330/3456/3349 +f 3294/3420/3350 3293/3419/3350 3356/3482/3350 3357/3483/3350 +f 3268/3394/3351 3267/3393/3351 3330/3456/3351 3331/3457/3351 +f 3295/3421/3352 3294/3420/3352 3357/3483/3352 3358/3484/3352 +f 3269/3395/3353 3268/3394/3353 3331/3457/3353 3332/3458/3353 +f 3296/3422/3354 3295/3421/3354 3358/3484/3354 3359/3485/3354 +f 3270/3396/3355 3269/3395/3355 3332/3458/3355 3333/3459/3355 +f 3297/3423/3356 3296/3422/3356 3359/3485/3356 3360/3486/3356 +f 3271/3397/3357 3270/3396/3357 3333/3459/3357 3334/3460/3357 +f 3298/3424/3358 3297/3423/3358 3360/3486/3358 3361/3487/3358 +f 3272/3398/3359 3271/3397/3359 3334/3460/3359 3335/3461/3359 +f 3299/3425/3360 3298/3424/3360 3361/3487/3360 3362/3488/3360 +f 3273/3399/3361 3272/3398/3361 3335/3461/3361 3336/3462/3361 +f 3300/3426/3362 3299/3425/3362 3362/3488/3362 3363/3489/3362 +f 3274/3400/3363 3273/3399/3363 3336/3462/3363 3337/3463/3363 +f 3301/3427/3364 3300/3426/3364 3363/3489/3364 3364/3490/3364 +f 3275/3401/3365 3274/3400/3365 3337/3463/3365 3338/3464/3365 +f 3302/3428/3366 3301/3427/3366 3364/3490/3366 3365/3491/3366 +f 3276/3402/3367 3275/3401/3367 3338/3464/3367 3339/3465/3367 +f 3303/3429/3368 3302/3428/3368 3365/3491/3368 3366/3492/3368 +f 3277/3403/3369 3276/3402/3369 3339/3465/3369 3340/3466/3369 +f 3251/3377/3370 1990/2042/3370 3314/3440/3370 +f 3304/3430/3371 3303/3429/3371 3366/3492/3371 3367/3493/3371 +f 3278/3404/3372 3277/3403/3372 3340/3466/3372 3341/3467/3372 +f 3252/3378/3373 3251/3377/3373 3314/3440/3373 3315/3441/3373 +f 3305/3431/3374 3304/3430/3374 3367/3493/3374 3368/3494/3374 +f 3279/3405/3375 3278/3404/3375 3341/3467/3375 3342/3468/3375 +f 3253/3379/3376 3252/3378/3376 3315/3441/3376 3316/3442/3376 +f 3306/3432/3377 3305/3431/3377 3368/3494/3377 3369/3495/3377 +f 3280/3406/3378 3279/3405/3378 3342/3468/3378 3343/3469/3378 +f 3254/3380/3379 3253/3379/3379 3316/3442/3379 3317/3443/3379 +f 3307/3433/3380 3306/3432/3380 3369/3495/3380 3370/3496/3380 +f 3281/3407/3381 3280/3406/3381 3343/3469/3381 3344/3470/3381 +f 3255/3381/3382 3254/3380/3382 3317/3443/3382 3318/3444/3382 +f 3308/3434/3383 3307/3433/3383 3370/3496/3383 3371/3497/3383 +f 3282/3408/3384 3281/3407/3384 3344/3470/3384 3345/3471/3384 +f 3256/3382/3385 3255/3381/3385 3318/3444/3385 3319/3445/3385 +f 3309/3435/3386 3308/3434/3386 3371/3497/3386 3372/3498/3386 +f 3283/3409/3387 3282/3408/3387 3345/3471/3387 3346/3472/3387 +f 3257/3383/3388 3256/3382/3388 3319/3445/3388 3320/3446/3388 +f 3310/3436/3389 3309/3435/3389 3372/3498/3389 3373/3499/3389 +f 3284/3410/3390 3283/3409/3390 3346/3472/3390 3347/3473/3390 +f 3258/3384/3391 3257/3383/3391 3320/3446/3391 3321/3447/3391 +f 3311/3437/3392 3310/3436/3392 3373/3499/3392 3374/3500/3392 +f 3350/3476/3393 3349/3475/3393 3412/3538/3393 3413/3539/3393 +f 3324/3450/3394 3323/3449/3394 3386/3512/3394 3387/3513/3394 +f 3818/3997/3395 3376/3502/3395 3439/3565/3395 +f 3351/3477/3396 3350/3476/3396 3413/3539/3396 3414/3540/3396 +f 3325/3451/3397 3324/3450/3397 3387/3513/3397 3388/3514/3397 +f 3352/3478/3398 3351/3477/3398 3414/3540/3398 3415/3541/3398 +f 3326/3452/3399 3325/3451/3399 3388/3514/3399 3389/3515/3399 +f 3353/3479/3400 3352/3478/3400 3415/3541/3400 3416/3542/3400 +f 3327/3453/3401 3326/3452/3401 3389/3515/3401 3390/3516/3401 +f 3354/3480/3402 3353/3479/3402 3416/3542/3402 3417/3543/3402 +f 3328/3454/3403 3327/3453/3403 3390/3516/3403 3391/3517/3403 +f 3355/3481/3404 3354/3480/3404 3417/3543/3404 3418/3544/3404 +f 3329/3455/3405 3328/3454/3405 3391/3517/3405 3392/3518/3405 +f 3356/3482/3406 3355/3481/3406 3418/3544/3406 3419/3545/3406 +f 3330/3456/3407 3329/3455/3407 3392/3518/3407 3393/3519/3407 +f 3357/3483/3408 3356/3482/3408 3419/3545/3408 3420/3546/3408 +f 3331/3457/3409 3330/3456/3409 3393/3519/3409 3394/3520/3409 +f 3358/3484/3410 3357/3483/3410 3420/3546/3410 3421/3547/3410 +f 3332/3458/3411 3331/3457/3411 3394/3520/3411 3395/3521/3411 +f 3359/3485/3412 3358/3484/3412 3421/3547/3412 3422/3548/3412 +f 3333/3459/3413 3332/3458/3413 3395/3521/3413 3396/3522/3413 +f 3360/3486/3414 3359/3485/3414 3422/3548/3414 3423/3549/3414 +f 3334/3460/3415 3333/3459/3415 3396/3522/3415 3397/3523/3415 +f 3361/3487/3416 3360/3486/3416 3423/3549/3416 3424/3550/3416 +f 3335/3461/3417 3334/3460/3417 3397/3523/3417 3398/3524/3417 +f 3362/3488/3418 3361/3487/3418 3424/3550/3418 3425/3551/3418 +f 3336/3462/3419 3335/3461/3419 3398/3524/3419 3399/3525/3419 +f 3363/3489/3420 3362/3488/3420 3425/3551/3420 3426/3552/3420 +f 3337/3463/3421 3336/3462/3421 3399/3525/3421 3400/3526/3421 +f 3364/3490/3422 3363/3489/3422 3426/3552/3422 3427/3553/3422 +f 3338/3464/3423 3337/3463/3423 3400/3526/3423 3401/3527/3423 +f 3365/3491/3424 3364/3490/3424 3427/3553/3424 3428/3554/3424 +f 3339/3465/3425 3338/3464/3425 3401/3527/3425 3402/3528/3425 +f 3366/3492/3426 3365/3491/3426 3428/3554/3426 3429/3555/3426 +f 3340/3466/3427 3339/3465/3427 3402/3528/3427 3403/3529/3427 +f 3314/3440/3428 1990/2043/3428 3377/3503/3428 +f 3367/3493/3429 3366/3492/3429 3429/3555/3429 3430/3556/3429 +f 3341/3467/3430 3340/3466/3430 3403/3529/3430 3404/3530/3430 +f 3315/3441/3431 3314/3440/3431 3377/3503/3431 3378/3504/3431 +f 3368/3494/3432 3367/3493/3432 3430/3556/3432 3431/3557/3432 +f 3342/3468/3433 3341/3467/3433 3404/3530/3433 3405/3531/3433 +f 3316/3442/3434 3315/3441/3434 3378/3504/3434 3379/3505/3434 +f 3369/3495/3435 3368/3494/3435 3431/3557/3435 3432/3558/3435 +f 3343/3469/3436 3342/3468/3436 3405/3531/3436 3406/3532/3436 +f 3317/3443/3437 3316/3442/3437 3379/3505/3437 3380/3506/3437 +f 3370/3496/3438 3369/3495/3438 3432/3558/3438 3433/3559/3438 +f 3344/3470/3439 3343/3469/3439 3406/3532/3439 3407/3533/3439 +f 3318/3444/3440 3317/3443/3440 3380/3506/3440 3381/3507/3440 +f 3371/3497/3441 3370/3496/3441 3433/3559/3441 3434/3560/3441 +f 3345/3471/3442 3344/3470/3442 3407/3533/3442 3408/3534/3442 +f 3319/3445/3443 3318/3444/3443 3381/3507/3443 3382/3508/3443 +f 3372/3498/3444 3371/3497/3444 3434/3560/3444 3435/3561/3444 +f 3346/3472/3445 3345/3471/3445 3408/3534/3445 3409/3535/3445 +f 3320/3446/3446 3319/3445/3446 3382/3508/3446 3383/3509/3446 +f 3373/3499/3447 3372/3498/3447 3435/3561/3447 3436/3562/3447 +f 3347/3473/3448 3346/3472/3448 3409/3535/3448 3410/3536/3448 +f 3321/3447/3449 3320/3446/3449 3383/3509/3449 3384/3510/3449 +f 3374/3500/3450 3373/3499/3450 3436/3562/3450 3437/3563/3450 +f 3348/3474/3451 3347/3473/3451 3410/3536/3451 3411/3537/3451 +f 3322/3448/3452 3321/3447/3452 3384/3510/3452 3385/3511/3452 +f 3375/3501/3453 3374/3500/3453 3437/3563/3453 3438/3564/3453 +f 3349/3475/3454 3348/3474/3454 3411/3537/3454 3412/3538/3454 +f 3323/3449/3455 3322/3448/3455 3385/3511/3455 3386/3512/3455 +f 3376/3502/3456 3375/3501/3456 3438/3564/3456 3439/3565/3456 +f 3415/3541/3457 3414/3540/3457 3477/3603/3457 3478/3604/3457 +f 3389/3515/3458 3388/3514/3458 3451/3577/3458 3452/3578/3458 +f 3416/3542/3459 3415/3541/3459 3478/3604/3459 3479/3605/3459 +f 3390/3516/3460 3389/3515/3460 3452/3578/3460 3453/3579/3460 +f 3417/3543/3461 3416/3542/3461 3479/3605/3461 3480/3606/3461 +f 3391/3517/3462 3390/3516/3462 3453/3579/3462 3454/3580/3462 +f 3418/3544/3463 3417/3543/3463 3480/3606/3463 3481/3607/3463 +f 3392/3518/3464 3391/3517/3464 3454/3580/3464 3455/3581/3464 +f 3419/3545/3465 3418/3544/3465 3481/3607/3465 3482/3608/3465 +f 3393/3519/3466 3392/3518/3466 3455/3581/3466 3456/3582/3466 +f 3420/3546/3467 3419/3545/3467 3482/3608/3467 3483/3609/3467 +f 3394/3520/3468 3393/3519/3468 3456/3582/3468 3457/3583/3468 +f 3421/3547/3469 3420/3546/3469 3483/3609/3469 3484/3610/3469 +f 3395/3521/3470 3394/3520/3470 3457/3583/3470 3458/3584/3470 +f 3422/3548/3471 3421/3547/3471 3484/3610/3471 3485/3611/3471 +f 3396/3522/3472 3395/3521/3472 3458/3584/3472 3459/3585/3472 +f 3423/3549/3473 3422/3548/3473 3485/3611/3473 3486/3612/3473 +f 3397/3523/3474 3396/3522/3474 3459/3585/3474 3460/3586/3474 +f 3424/3550/3475 3423/3549/3475 3486/3612/3475 3487/3613/3475 +f 3398/3524/3476 3397/3523/3476 3460/3586/3476 3461/3587/3476 +f 3425/3551/3477 3424/3550/3477 3487/3613/3477 3488/3614/3477 +f 3399/3525/3478 3398/3524/3478 3461/3587/3478 3462/3588/3478 +f 3426/3552/3479 3425/3551/3479 3488/3614/3479 3489/3615/3479 +f 3400/3526/3480 3399/3525/3480 3462/3588/3480 3463/3589/3480 +f 3427/3553/3481 3426/3552/3481 3489/3615/3481 3490/3616/3481 +f 3401/3527/3482 3400/3526/3482 3463/3589/3482 3464/3590/3482 +f 3428/3554/3483 3427/3553/3483 3490/3616/3483 3491/3617/3483 +f 3402/3528/3484 3401/3527/3484 3464/3590/3484 3465/3591/3484 +f 3429/3555/3485 3428/3554/3485 3491/3617/3485 3492/3618/3485 +f 3403/3529/3486 3402/3528/3486 3465/3591/3486 3466/3592/3486 +f 3377/3503/3487 1990/2044/3487 3440/3566/3487 +f 3430/3556/3488 3429/3555/3488 3492/3618/3488 3493/3619/3488 +f 3404/3530/3489 3403/3529/3489 3466/3592/3489 3467/3593/3489 +f 3378/3504/3490 3377/3503/3490 3440/3566/3490 3441/3567/3490 +f 3431/3557/3491 3430/3556/3491 3493/3619/3491 3494/3620/3491 +f 3405/3531/3492 3404/3530/3492 3467/3593/3492 3468/3594/3492 +f 3379/3505/3493 3378/3504/3493 3441/3567/3493 3442/3568/3493 +f 3432/3558/3494 3431/3557/3494 3494/3620/3494 3495/3621/3494 +f 3406/3532/3495 3405/3531/3495 3468/3594/3495 3469/3595/3495 +f 3380/3506/3496 3379/3505/3496 3442/3568/3496 3443/3569/3496 +f 3433/3559/3497 3432/3558/3497 3495/3621/3497 3496/3622/3497 +f 3407/3533/3498 3406/3532/3498 3469/3595/3498 3470/3596/3498 +f 3381/3507/3499 3380/3506/3499 3443/3569/3499 3444/3570/3499 +f 3434/3560/3500 3433/3559/3500 3496/3622/3500 3497/3623/3500 +f 3408/3534/3501 3407/3533/3501 3470/3596/3501 3471/3597/3501 +f 3382/3508/3502 3381/3507/3502 3444/3570/3502 3445/3571/3502 +f 3435/3561/3503 3434/3560/3503 3497/3623/3503 3498/3624/3503 +f 3409/3535/3504 3408/3534/3504 3471/3597/3504 3472/3598/3504 +f 3383/3509/3505 3382/3508/3505 3445/3571/3505 3446/3572/3505 +f 3436/3562/3506 3435/3561/3506 3498/3624/3506 3499/3625/3506 +f 3410/3536/3507 3409/3535/3507 3472/3598/3507 3473/3599/3507 +f 3384/3510/3508 3383/3509/3508 3446/3572/3508 3447/3573/3508 +f 3437/3563/3509 3436/3562/3509 3499/3625/3509 3500/3626/3509 +f 3411/3537/3510 3410/3536/3510 3473/3599/3510 3474/3600/3510 +f 3385/3511/3511 3384/3510/3511 3447/3573/3511 3448/3574/3511 +f 3438/3564/3512 3437/3563/3512 3500/3626/3512 3501/3627/3512 +f 3412/3538/3513 3411/3537/3513 3474/3600/3513 3475/3601/3513 +f 3386/3512/3514 3385/3511/3514 3448/3574/3514 3449/3575/3514 +f 3439/3565/3515 3438/3564/3515 3501/3627/3515 3502/3628/3515 +f 3413/3539/3516 3412/3538/3516 3475/3601/3516 3476/3602/3516 +f 3387/3513/3517 3386/3512/3517 3449/3575/3517 3450/3576/3517 +f 3818/3998/3518 3439/3565/3518 3502/3628/3518 +f 3414/3540/3519 3413/3539/3519 3476/3602/3519 3477/3603/3519 +f 3388/3514/3520 3387/3513/3520 3450/3576/3520 3451/3577/3520 +f 3480/3606/3521 3479/3605/3521 3542/3668/3521 3543/3669/3521 +f 3454/3580/3522 3453/3579/3522 3516/3642/3522 3517/3643/3522 +f 3481/3607/3523 3480/3606/3523 3543/3669/3523 3544/3670/3523 +f 3455/3581/3524 3454/3580/3524 3517/3643/3524 3518/3644/3524 +f 3482/3608/3525 3481/3607/3525 3544/3670/3525 3545/3671/3525 +f 3456/3582/3526 3455/3581/3526 3518/3644/3526 3519/3645/3526 +f 3483/3609/3527 3482/3608/3527 3545/3671/3527 3546/3672/3527 +f 3457/3583/3528 3456/3582/3528 3519/3645/3528 3520/3646/3528 +f 3484/3610/3529 3483/3609/3529 3546/3672/3529 3547/3673/3529 +f 3458/3584/3530 3457/3583/3530 3520/3646/3530 3521/3647/3530 +f 3485/3611/3531 3484/3610/3531 3547/3673/3531 3548/3674/3531 +f 3459/3585/3532 3458/3584/3532 3521/3647/3532 3522/3648/3532 +f 3486/3612/3533 3485/3611/3533 3548/3674/3533 3549/3675/3533 +f 3460/3586/3534 3459/3585/3534 3522/3648/3534 3523/3649/3534 +f 3487/3613/3535 3486/3612/3535 3549/3675/3535 3550/3676/3535 +f 3461/3587/3536 3460/3586/3536 3523/3649/3536 3524/3650/3536 +f 3488/3614/3537 3487/3613/3537 3550/3676/3537 3551/3677/3537 +f 3462/3588/3538 3461/3587/3538 3524/3650/3538 3525/3651/3538 +f 3489/3615/3539 3488/3614/3539 3551/3677/3539 3552/3678/3539 +f 3463/3589/3540 3462/3588/3540 3525/3651/3540 3526/3652/3540 +f 3490/3616/3541 3489/3615/3541 3552/3678/3541 3553/3679/3541 +f 3464/3590/3542 3463/3589/3542 3526/3652/3542 3527/3653/3542 +f 3491/3617/3543 3490/3616/3543 3553/3679/3543 3554/3680/3543 +f 3465/3591/3544 3464/3590/3544 3527/3653/3544 3528/3654/3544 +f 3492/3618/3545 3491/3617/3545 3554/3680/3545 3555/3681/3545 +f 3466/3592/3546 3465/3591/3546 3528/3654/3546 3529/3655/3546 +f 3440/3566/3547 1990/2045/3547 3503/3629/3547 +f 3493/3619/3548 3492/3618/3548 3555/3681/3548 3556/3682/3548 +f 3467/3593/3549 3466/3592/3549 3529/3655/3549 3530/3656/3549 +f 3441/3567/3550 3440/3566/3550 3503/3629/3550 3504/3630/3550 +f 3494/3620/3551 3493/3619/3551 3556/3682/3551 3557/3683/3551 +f 3468/3594/3552 3467/3593/3552 3530/3656/3552 3531/3657/3552 +f 3442/3568/3553 3441/3567/3553 3504/3630/3553 3505/3631/3553 +f 3495/3621/3554 3494/3620/3554 3557/3683/3554 3558/3684/3554 +f 3469/3595/3555 3468/3594/3555 3531/3657/3555 3532/3658/3555 +f 3443/3569/3556 3442/3568/3556 3505/3631/3556 3506/3632/3556 +f 3496/3622/3557 3495/3621/3557 3558/3684/3557 3559/3685/3557 +f 3470/3596/3558 3469/3595/3558 3532/3658/3558 3533/3659/3558 +f 3444/3570/3559 3443/3569/3559 3506/3632/3559 3507/3633/3559 +f 3497/3623/3560 3496/3622/3560 3559/3685/3560 3560/3686/3560 +f 3471/3597/3561 3470/3596/3561 3533/3659/3561 3534/3660/3561 +f 3445/3571/3562 3444/3570/3562 3507/3633/3562 3508/3634/3562 +f 3498/3624/3563 3497/3623/3563 3560/3686/3563 3561/3687/3563 +f 3472/3598/3564 3471/3597/3564 3534/3660/3564 3535/3661/3564 +f 3446/3572/3565 3445/3571/3565 3508/3634/3565 3509/3635/3565 +f 3499/3625/3566 3498/3624/3566 3561/3687/3566 3562/3688/3566 +f 3473/3599/3567 3472/3598/3567 3535/3661/3567 3536/3662/3567 +f 3447/3573/3568 3446/3572/3568 3509/3635/3568 3510/3636/3568 +f 3500/3626/3569 3499/3625/3569 3562/3688/3569 3563/3689/3569 +f 3474/3600/3570 3473/3599/3570 3536/3662/3570 3537/3663/3570 +f 3448/3574/3571 3447/3573/3571 3510/3636/3571 3511/3637/3571 +f 3501/3627/3572 3500/3626/3572 3563/3689/3572 3564/3690/3572 +f 3475/3601/3573 3474/3600/3573 3537/3663/3573 3538/3664/3573 +f 3449/3575/3574 3448/3574/3574 3511/3637/3574 3512/3638/3574 +f 3502/3628/3575 3501/3627/3575 3564/3690/3575 3565/3691/3575 +f 3476/3602/3576 3475/3601/3576 3538/3664/3576 3539/3665/3576 +f 3450/3576/3577 3449/3575/3577 3512/3638/3577 3513/3639/3577 +f 3818/3999/3578 3502/3628/3578 3565/3691/3578 +f 3477/3603/3579 3476/3602/3579 3539/3665/3579 3540/3666/3579 +f 3451/3577/3580 3450/3576/3580 3513/3639/3580 3514/3640/3580 +f 3478/3604/3581 3477/3603/3581 3540/3666/3581 3541/3667/3581 +f 3452/3578/3582 3451/3577/3582 3514/3640/3582 3515/3641/3582 +f 3479/3605/3583 3478/3604/3583 3541/3667/3583 3542/3668/3583 +f 3453/3579/3584 3452/3578/3584 3515/3641/3584 3516/3642/3584 +f 3545/3671/3585 3544/3670/3585 3607/3733/3585 3608/3734/3585 +f 3519/3645/3586 3518/3644/3586 3581/3707/3586 3582/3708/3586 +f 3546/3672/3587 3545/3671/3587 3608/3734/3587 3609/3735/3587 +f 3520/3646/3588 3519/3645/3588 3582/3708/3588 3583/3709/3588 +f 3547/3673/3589 3546/3672/3589 3609/3735/3589 3610/3736/3589 +f 3521/3647/3590 3520/3646/3590 3583/3709/3590 3584/3710/3590 +f 3548/3674/3591 3547/3673/3591 3610/3736/3591 3611/3737/3591 +f 3522/3648/3592 3521/3647/3592 3584/3710/3592 3585/3711/3592 +f 3549/3675/3593 3548/3674/3593 3611/3737/3593 3612/3738/3593 +f 3523/3649/3594 3522/3648/3594 3585/3711/3594 3586/3712/3594 +f 3550/3676/3595 3549/3675/3595 3612/3738/3595 3613/3739/3595 +f 3524/3650/3596 3523/3649/3596 3586/3712/3596 3587/3713/3596 +f 3551/3677/3597 3550/3676/3597 3613/3739/3597 3614/3740/3597 +f 3525/3651/3598 3524/3650/3598 3587/3713/3598 3588/3714/3598 +f 3552/3678/3599 3551/3677/3599 3614/3740/3599 3615/3741/3599 +f 3526/3652/3600 3525/3651/3600 3588/3714/3600 3589/3715/3600 +f 3553/3679/3601 3552/3678/3601 3615/3741/3601 3616/3742/3601 +f 3527/3653/3602 3526/3652/3602 3589/3715/3602 3590/3716/3602 +f 3554/3680/3603 3553/3679/3603 3616/3742/3603 3617/3743/3603 +f 3528/3654/3604 3527/3653/3604 3590/3716/3604 3591/3717/3604 +f 3555/3681/3605 3554/3680/3605 3617/3743/3605 3618/3744/3605 +f 3529/3655/3606 3528/3654/3606 3591/3717/3606 3592/3718/3606 +f 3503/3629/3607 1990/2046/3607 3566/3692/3607 +f 3556/3682/3608 3555/3681/3608 3618/3744/3608 3619/3745/3608 +f 3530/3656/3609 3529/3655/3609 3592/3718/3609 3593/3719/3609 +f 3504/3630/3610 3503/3629/3610 3566/3692/3610 3567/3693/3610 +f 3557/3683/3611 3556/3682/3611 3619/3745/3611 3620/3746/3611 +f 3531/3657/3612 3530/3656/3612 3593/3719/3612 3594/3720/3612 +f 3505/3631/3613 3504/3630/3613 3567/3693/3613 3568/3694/3613 +f 3558/3684/3614 3557/3683/3614 3620/3746/3614 3621/3747/3614 +f 3532/3658/3615 3531/3657/3615 3594/3720/3615 3595/3721/3615 +f 3506/3632/3616 3505/3631/3616 3568/3694/3616 3569/3695/3616 +f 3559/3685/3617 3558/3684/3617 3621/3747/3617 3622/3748/3617 +f 3533/3659/3618 3532/3658/3618 3595/3721/3618 3596/3722/3618 +f 3507/3633/3619 3506/3632/3619 3569/3695/3619 3570/3696/3619 +f 3560/3686/3620 3559/3685/3620 3622/3748/3620 3623/3749/3620 +f 3534/3660/3621 3533/3659/3621 3596/3722/3621 3597/3723/3621 +f 3508/3634/3622 3507/3633/3622 3570/3696/3622 3571/3697/3622 +f 3561/3687/3623 3560/3686/3623 3623/3749/3623 3624/3750/3623 +f 3535/3661/3624 3534/3660/3624 3597/3723/3624 3598/3724/3624 +f 3509/3635/3625 3508/3634/3625 3571/3697/3625 3572/3698/3625 +f 3562/3688/3626 3561/3687/3626 3624/3750/3626 3625/3751/3626 +f 3536/3662/3627 3535/3661/3627 3598/3724/3627 3599/3725/3627 +f 3510/3636/3628 3509/3635/3628 3572/3698/3628 3573/3699/3628 +f 3563/3689/3629 3562/3688/3629 3625/3751/3629 3626/3752/3629 +f 3537/3663/3630 3536/3662/3630 3599/3725/3630 3600/3726/3630 +f 3511/3637/3631 3510/3636/3631 3573/3699/3631 3574/3700/3631 +f 3564/3690/3632 3563/3689/3632 3626/3752/3632 3627/3753/3632 +f 3538/3664/3633 3537/3663/3633 3600/3726/3633 3601/3727/3633 +f 3512/3638/3634 3511/3637/3634 3574/3700/3634 3575/3701/3634 +f 3565/3691/3635 3564/3690/3635 3627/3753/3635 3628/3754/3635 +f 3539/3665/3636 3538/3664/3636 3601/3727/3636 3602/3728/3636 +f 3513/3639/3637 3512/3638/3637 3575/3701/3637 3576/3702/3637 +f 3818/4000/3638 3565/3691/3638 3628/3754/3638 +f 3540/3666/3639 3539/3665/3639 3602/3728/3639 3603/3729/3639 +f 3514/3640/3640 3513/3639/3640 3576/3702/3640 3577/3703/3640 +f 3541/3667/3641 3540/3666/3641 3603/3729/3641 3604/3730/3641 +f 3515/3641/3642 3514/3640/3642 3577/3703/3642 3578/3704/3642 +f 3542/3668/3643 3541/3667/3643 3604/3730/3643 3605/3731/3643 +f 3516/3642/3644 3515/3641/3644 3578/3704/3644 3579/3705/3644 +f 3543/3669/3645 3542/3668/3645 3605/3731/3645 3606/3732/3645 +f 3517/3643/3646 3516/3642/3646 3579/3705/3646 3580/3706/3646 +f 3544/3670/3647 3543/3669/3647 3606/3732/3647 3607/3733/3647 +f 3518/3644/3648 3517/3643/3648 3580/3706/3648 3581/3707/3648 +f 3610/3736/3649 3609/3735/3649 3672/3798/3649 3673/3799/3649 +f 3584/3710/3650 3583/3709/3650 3646/3772/3650 3647/3773/3650 +f 3611/3737/3651 3610/3736/3651 3673/3799/3651 3674/3800/3651 +f 3585/3711/3652 3584/3710/3652 3647/3773/3652 3648/3774/3652 +f 3612/3738/3653 3611/3737/3653 3674/3800/3653 3675/3801/3653 +f 3586/3712/3654 3585/3711/3654 3648/3774/3654 3649/3775/3654 +f 3613/3739/3655 3612/3738/3655 3675/3801/3655 3676/3802/3655 +f 3587/3713/3656 3586/3712/3656 3649/3775/3656 3650/3776/3656 +f 3614/3740/3657 3613/3739/3657 3676/3802/3657 3677/3803/3657 +f 3588/3714/3658 3587/3713/3658 3650/3776/3658 3651/3777/3658 +f 3615/3741/3659 3614/3740/3659 3677/3803/3659 3678/3804/3659 +f 3589/3715/3660 3588/3714/3660 3651/3777/3660 3652/3778/3660 +f 3616/3742/3661 3615/3741/3661 3678/3804/3661 3679/3805/3661 +f 3590/3716/3662 3589/3715/3662 3652/3778/3662 3653/3779/3662 +f 3617/3743/3663 3616/3742/3663 3679/3805/3663 3680/3806/3663 +f 3591/3717/3664 3590/3716/3664 3653/3779/3664 3654/3780/3664 +f 3618/3744/3665 3617/3743/3665 3680/3806/3665 3681/3807/3665 +f 3592/3718/3666 3591/3717/3666 3654/3780/3666 3655/3781/3666 +f 3566/3692/3667 1990/2047/3667 3629/3755/3667 +f 3619/3745/3668 3618/3744/3668 3681/3807/3668 3682/3808/3668 +f 3593/3719/3669 3592/3718/3669 3655/3781/3669 3656/3782/3669 +f 3567/3693/3670 3566/3692/3670 3629/3755/3670 3630/3756/3670 +f 3620/3746/3671 3619/3745/3671 3682/3808/3671 3683/3809/3671 +f 3594/3720/3672 3593/3719/3672 3656/3782/3672 3657/3783/3672 +f 3568/3694/3673 3567/3693/3673 3630/3756/3673 3631/3757/3673 +f 3621/3747/3674 3620/3746/3674 3683/3809/3674 3684/3810/3674 +f 3595/3721/3675 3594/3720/3675 3657/3783/3675 3658/3784/3675 +f 3569/3695/3676 3568/3694/3676 3631/3757/3676 3632/3758/3676 +f 3622/3748/3677 3621/3747/3677 3684/3810/3677 3685/3811/3677 +f 3596/3722/3678 3595/3721/3678 3658/3784/3678 3659/3785/3678 +f 3570/3696/3679 3569/3695/3679 3632/3758/3679 3633/3759/3679 +f 3623/3749/3680 3622/3748/3680 3685/3811/3680 3686/3812/3680 +f 3597/3723/3681 3596/3722/3681 3659/3785/3681 3660/3786/3681 +f 3571/3697/3682 3570/3696/3682 3633/3759/3682 3634/3760/3682 +f 3624/3750/3683 3623/3749/3683 3686/3812/3683 3687/3813/3683 +f 3598/3724/3684 3597/3723/3684 3660/3786/3684 3661/3787/3684 +f 3572/3698/3685 3571/3697/3685 3634/3760/3685 3635/3761/3685 +f 3625/3751/3686 3624/3750/3686 3687/3813/3686 3688/3814/3686 +f 3599/3725/3687 3598/3724/3687 3661/3787/3687 3662/3788/3687 +f 3573/3699/3688 3572/3698/3688 3635/3761/3688 3636/3762/3688 +f 3626/3752/3689 3625/3751/3689 3688/3814/3689 3689/3815/3689 +f 3600/3726/3690 3599/3725/3690 3662/3788/3690 3663/3789/3690 +f 3574/3700/3691 3573/3699/3691 3636/3762/3691 3637/3763/3691 +f 3627/3753/3692 3626/3752/3692 3689/3815/3692 3690/3816/3692 +f 3601/3727/3693 3600/3726/3693 3663/3789/3693 3664/3790/3693 +f 3575/3701/3694 3574/3700/3694 3637/3763/3694 3638/3764/3694 +f 3628/3754/3695 3627/3753/3695 3690/3816/3695 3691/3817/3695 +f 3602/3728/3696 3601/3727/3696 3664/3790/3696 3665/3791/3696 +f 3576/3702/3697 3575/3701/3697 3638/3764/3697 3639/3765/3697 +f 3818/4001/3698 3628/3754/3698 3691/3817/3698 +f 3603/3729/3699 3602/3728/3699 3665/3791/3699 3666/3792/3699 +f 3577/3703/3700 3576/3702/3700 3639/3765/3700 3640/3766/3700 +f 3604/3730/3701 3603/3729/3701 3666/3792/3701 3667/3793/3701 +f 3578/3704/3702 3577/3703/3702 3640/3766/3702 3641/3767/3702 +f 3605/3731/3703 3604/3730/3703 3667/3793/3703 3668/3794/3703 +f 3579/3705/3704 3578/3704/3704 3641/3767/3704 3642/3768/3704 +f 3606/3732/3705 3605/3731/3705 3668/3794/3705 3669/3795/3705 +f 3580/3706/3706 3579/3705/3706 3642/3768/3706 3643/3769/3706 +f 3607/3733/3707 3606/3732/3707 3669/3795/3707 3670/3796/3707 +f 3581/3707/3708 3580/3706/3708 3643/3769/3708 3644/3770/3708 +f 3608/3734/3709 3607/3733/3709 3670/3796/3709 3671/3797/3709 +f 3582/3708/3710 3581/3707/3710 3644/3770/3710 3645/3771/3710 +f 3609/3735/3711 3608/3734/3711 3671/3797/3711 3672/3798/3711 +f 3583/3709/3712 3582/3708/3712 3645/3771/3712 3646/3772/3712 +f 3675/3801/3713 3674/3800/3713 3737/3863/3713 3738/3864/3713 +f 3649/3775/3714 3648/3774/3714 3711/3837/3714 3712/3838/3714 +f 3676/3802/3715 3675/3801/3715 3738/3864/3715 3739/3865/3715 +f 3650/3776/3716 3649/3775/3716 3712/3838/3716 3713/3839/3716 +f 3677/3803/3717 3676/3802/3717 3739/3865/3717 3740/3866/3717 +f 3651/3777/3718 3650/3776/3718 3713/3839/3718 3714/3840/3718 +f 3678/3804/3719 3677/3803/3719 3740/3866/3719 3741/3867/3719 +f 3652/3778/3720 3651/3777/3720 3714/3840/3720 3715/3841/3720 +f 3679/3805/3721 3678/3804/3721 3741/3867/3721 3742/3868/3721 +f 3653/3779/3722 3652/3778/3722 3715/3841/3722 3716/3842/3722 +f 3680/3806/3723 3679/3805/3723 3742/3868/3723 3743/3869/3723 +f 3654/3780/3724 3653/3779/3724 3716/3842/3724 3717/3843/3724 +f 3681/3807/3725 3680/3806/3725 3743/3869/3725 3744/3870/3725 +f 3655/3781/3726 3654/3780/3726 3717/3843/3726 3718/3844/3726 +f 3629/3755/3727 1990/2048/3727 3692/3818/3727 +f 3682/3808/3728 3681/3807/3728 3744/3870/3728 3745/3871/3728 +f 3656/3782/3729 3655/3781/3729 3718/3844/3729 3719/3845/3729 +f 3630/3756/3730 3629/3755/3730 3692/3818/3730 3693/3819/3730 +f 3683/3809/3731 3682/3808/3731 3745/3871/3731 3746/3872/3731 +f 3657/3783/3732 3656/3782/3732 3719/3845/3732 3720/3846/3732 +f 3631/3757/3733 3630/3756/3733 3693/3819/3733 3694/3820/3733 +f 3684/3810/3734 3683/3809/3734 3746/3872/3734 3747/3873/3734 +f 3658/3784/3735 3657/3783/3735 3720/3846/3735 3721/3847/3735 +f 3632/3758/3736 3631/3757/3736 3694/3820/3736 3695/3821/3736 +f 3685/3811/3737 3684/3810/3737 3747/3873/3737 3748/3874/3737 +f 3659/3785/3738 3658/3784/3738 3721/3847/3738 3722/3848/3738 +f 3633/3759/3739 3632/3758/3739 3695/3821/3739 3696/3822/3739 +f 3686/3812/3740 3685/3811/3740 3748/3874/3740 3749/3875/3740 +f 3660/3786/3741 3659/3785/3741 3722/3848/3741 3723/3849/3741 +f 3634/3760/3742 3633/3759/3742 3696/3822/3742 3697/3823/3742 +f 3687/3813/3743 3686/3812/3743 3749/3875/3743 3750/3876/3743 +f 3661/3787/3744 3660/3786/3744 3723/3849/3744 3724/3850/3744 +f 3635/3761/3745 3634/3760/3745 3697/3823/3745 3698/3824/3745 +f 3688/3814/3746 3687/3813/3746 3750/3876/3746 3751/3877/3746 +f 3662/3788/3747 3661/3787/3747 3724/3850/3747 3725/3851/3747 +f 3636/3762/3748 3635/3761/3748 3698/3824/3748 3699/3825/3748 +f 3689/3815/3749 3688/3814/3749 3751/3877/3749 3752/3878/3749 +f 3663/3789/3750 3662/3788/3750 3725/3851/3750 3726/3852/3750 +f 3637/3763/3751 3636/3762/3751 3699/3825/3751 3700/3826/3751 +f 3690/3816/3752 3689/3815/3752 3752/3878/3752 3753/3879/3752 +f 3664/3790/3753 3663/3789/3753 3726/3852/3753 3727/3853/3753 +f 3638/3764/3754 3637/3763/3754 3700/3826/3754 3701/3827/3754 +f 3691/3817/3755 3690/3816/3755 3753/3879/3755 3754/3880/3755 +f 3665/3791/3756 3664/3790/3756 3727/3853/3756 3728/3854/3756 +f 3639/3765/3757 3638/3764/3757 3701/3827/3757 3702/3828/3757 +f 3818/4002/3758 3691/3817/3758 3754/3880/3758 +f 3666/3792/3759 3665/3791/3759 3728/3854/3759 3729/3855/3759 +f 3640/3766/3760 3639/3765/3760 3702/3828/3760 3703/3829/3760 +f 3667/3793/3761 3666/3792/3761 3729/3855/3761 3730/3856/3761 +f 3641/3767/3762 3640/3766/3762 3703/3829/3762 3704/3830/3762 +f 3668/3794/3763 3667/3793/3763 3730/3856/3763 3731/3857/3763 +f 3642/3768/3764 3641/3767/3764 3704/3830/3764 3705/3831/3764 +f 3669/3795/3765 3668/3794/3765 3731/3857/3765 3732/3858/3765 +f 3643/3769/3766 3642/3768/3766 3705/3831/3766 3706/3832/3766 +f 3670/3796/3767 3669/3795/3767 3732/3858/3767 3733/3859/3767 +f 3644/3770/3768 3643/3769/3768 3706/3832/3768 3707/3833/3768 +f 3671/3797/3769 3670/3796/3769 3733/3859/3769 3734/3860/3769 +f 3645/3771/3770 3644/3770/3770 3707/3833/3770 3708/3834/3770 +f 3672/3798/3771 3671/3797/3771 3734/3860/3771 3735/3861/3771 +f 3646/3772/3772 3645/3771/3772 3708/3834/3772 3709/3835/3772 +f 3673/3799/3773 3672/3798/3773 3735/3861/3773 3736/3862/3773 +f 3647/3773/3774 3646/3772/3774 3709/3835/3774 3710/3836/3774 +f 3674/3800/3775 3673/3799/3775 3736/3862/3775 3737/3863/3775 +f 3648/3774/3776 3647/3773/3776 3710/3836/3776 3711/3837/3776 +f 3740/3866/3777 3739/3865/3777 3802/3928/3777 3803/3929/3777 +f 3714/3840/3778 3713/3839/3778 3776/3902/3778 3777/3903/3778 +f 3741/3867/3779 3740/3866/3779 3803/3929/3779 3804/3930/3779 +f 3715/3841/3780 3714/3840/3780 3777/3903/3780 3778/3904/3780 +f 3742/3868/3781 3741/3867/3781 3804/3930/3781 3805/3931/3781 +f 3716/3842/3782 3715/3841/3782 3778/3904/3782 3779/3905/3782 +f 3743/3869/3783 3742/3868/3783 3805/3931/3783 3806/3932/3783 +f 3717/3843/3784 3716/3842/3784 3779/3905/3784 3780/3906/3784 +f 3744/3870/3785 3743/3869/3785 3806/3932/3785 3807/3933/3785 +f 3718/3844/3786 3717/3843/3786 3780/3906/3786 3781/3907/3786 +f 3692/3818/3787 1990/2049/3787 3755/3881/3787 +f 3745/3871/3788 3744/3870/3788 3807/3933/3788 3808/3934/3788 +f 3719/3845/3789 3718/3844/3789 3781/3907/3789 3782/3908/3789 +f 3693/3819/3790 3692/3818/3790 3755/3881/3790 3756/3882/3790 +f 3746/3872/3791 3745/3871/3791 3808/3934/3791 3809/3935/3791 +f 3720/3846/3792 3719/3845/3792 3782/3908/3792 3783/3909/3792 +f 3694/3820/3793 3693/3819/3793 3756/3882/3793 3757/3883/3793 +f 3747/3873/3794 3746/3872/3794 3809/3935/3794 3810/3936/3794 +f 3721/3847/3795 3720/3846/3795 3783/3909/3795 3784/3910/3795 +f 3695/3821/3796 3694/3820/3796 3757/3883/3796 3758/3884/3796 +f 3748/3874/3797 3747/3873/3797 3810/3936/3797 3811/3937/3797 +f 3722/3848/3798 3721/3847/3798 3784/3910/3798 3785/3911/3798 +f 3696/3822/3799 3695/3821/3799 3758/3884/3799 3759/3885/3799 +f 3749/3875/3800 3748/3874/3800 3811/3937/3800 3812/3938/3800 +f 3723/3849/3801 3722/3848/3801 3785/3911/3801 3786/3912/3801 +f 3697/3823/3802 3696/3822/3802 3759/3885/3802 3760/3886/3802 +f 3750/3876/3803 3749/3875/3803 3812/3938/3803 3813/3939/3803 +f 3724/3850/3804 3723/3849/3804 3786/3912/3804 3787/3913/3804 +f 3698/3824/3805 3697/3823/3805 3760/3886/3805 3761/3887/3805 +f 3751/3877/3806 3750/3876/3806 3813/3939/3806 3814/3940/3806 +f 3725/3851/3807 3724/3850/3807 3787/3913/3807 3788/3914/3807 +f 3699/3825/3808 3698/3824/3808 3761/3887/3808 3762/3888/3808 +f 3752/3878/3809 3751/3877/3809 3814/3940/3809 3815/3941/3809 +f 3726/3852/3810 3725/3851/3810 3788/3914/3810 3789/3915/3810 +f 3700/3826/3811 3699/3825/3811 3762/3888/3811 3763/3889/3811 +f 3753/3879/3812 3752/3878/3812 3815/3941/3812 3816/3942/3812 +f 3727/3853/3813 3726/3852/3813 3789/3915/3813 3790/3916/3813 +f 3701/3827/3814 3700/3826/3814 3763/3889/3814 3764/3890/3814 +f 3754/3880/3815 3753/3879/3815 3816/3942/3815 3817/3943/3815 +f 3728/3854/3816 3727/3853/3816 3790/3916/3816 3791/3917/3816 +f 3702/3828/3817 3701/3827/3817 3764/3890/3817 3765/3891/3817 +f 3818/4003/3818 3754/3880/3818 3817/3943/3818 +f 3729/3855/3819 3728/3854/3819 3791/3917/3819 3792/3918/3819 +f 3703/3829/3820 3702/3828/3820 3765/3891/3820 3766/3892/3820 +f 3730/3856/3821 3729/3855/3821 3792/3918/3821 3793/3919/3821 +f 3704/3830/3822 3703/3829/3822 3766/3892/3822 3767/3893/3822 +f 3731/3857/3823 3730/3856/3823 3793/3919/3823 3794/3920/3823 +f 3705/3831/3824 3704/3830/3824 3767/3893/3824 3768/3894/3824 +f 3732/3858/3825 3731/3857/3825 3794/3920/3825 3795/3921/3825 +f 3706/3832/3826 3705/3831/3826 3768/3894/3826 3769/3895/3826 +f 3733/3859/3827 3732/3858/3827 3795/3921/3827 3796/3922/3827 +f 3707/3833/3828 3706/3832/3828 3769/3895/3828 3770/3896/3828 +f 3734/3860/3829 3733/3859/3829 3796/3922/3829 3797/3923/3829 +f 3708/3834/3830 3707/3833/3830 3770/3896/3830 3771/3897/3830 +f 3735/3861/3831 3734/3860/3831 3797/3923/3831 3798/3924/3831 +f 3709/3835/3832 3708/3834/3832 3771/3897/3832 3772/3898/3832 +f 3736/3862/3833 3735/3861/3833 3798/3924/3833 3799/3925/3833 +f 3710/3836/3834 3709/3835/3834 3772/3898/3834 3773/3899/3834 +f 3737/3863/3835 3736/3862/3835 3799/3925/3835 3800/3926/3835 +f 3711/3837/3836 3710/3836/3836 3773/3899/3836 3774/3900/3836 +f 3738/3864/3837 3737/3863/3837 3800/3926/3837 3801/3927/3837 +f 3712/3838/3838 3711/3837/3838 3774/3900/3838 3775/3901/3838 +f 3739/3865/3839 3738/3864/3839 3801/3927/3839 3802/3928/3839 +f 3713/3839/3840 3712/3838/3840 3775/3901/3840 3776/3902/3840 +f 3805/3931/3841 3804/3930/3841 3868/4057/3841 3869/4058/3841 +f 3779/3905/3842 3778/3904/3842 3842/4031/3842 3843/4032/3842 +f 3806/3932/3843 3805/3931/3843 3869/4058/3843 3870/4059/3843 +f 3780/3906/3844 3779/3905/3844 3843/4032/3844 3844/4033/3844 +f 3807/3933/3845 3806/3932/3845 3870/4059/3845 3871/4060/3845 +f 3781/3907/3846 3780/3906/3846 3844/4033/3846 3845/4034/3846 +f 3755/3881/3847 1990/2050/3847 3819/4008/3847 +f 3808/3934/3848 3807/3933/3848 3871/4060/3848 3872/4061/3848 +f 3782/3908/3849 3781/3907/3849 3845/4034/3849 3846/4035/3849 +f 3756/3882/3850 3755/3881/3850 3819/4008/3850 3820/4009/3850 +f 3809/3935/3851 3808/3934/3851 3872/4061/3851 3873/4062/3851 +f 3783/3909/3852 3782/3908/3852 3846/4035/3852 3847/4036/3852 +f 3757/3883/3853 3756/3882/3853 3820/4009/3853 3821/4010/3853 +f 3810/3936/3854 3809/3935/3854 3873/4062/3854 3874/4063/3854 +f 3784/3910/3855 3783/3909/3855 3847/4036/3855 3848/4037/3855 +f 3758/3884/3856 3757/3883/3856 3821/4010/3856 3822/4011/3856 +f 3811/3937/3857 3810/3936/3857 3874/4063/3857 3875/4064/3857 +f 3785/3911/3858 3784/3910/3858 3848/4037/3858 3849/4038/3858 +f 3759/3885/3859 3758/3884/3859 3822/4011/3859 3823/4012/3859 +f 3812/3938/3860 3811/3937/3860 3875/4064/3860 3876/4065/3860 +f 3786/3912/3861 3785/3911/3861 3849/4038/3861 3850/4039/3861 +f 3760/3886/3862 3759/3885/3862 3823/4012/3862 3824/4013/3862 +f 3813/3939/3863 3812/3938/3863 3876/4065/3863 3877/4066/3863 +f 3787/3913/3864 3786/3912/3864 3850/4039/3864 3851/4040/3864 +f 3761/3887/3865 3760/3886/3865 3824/4013/3865 3825/4014/3865 +f 3814/3940/3866 3813/3939/3866 3877/4066/3866 3878/4067/3866 +f 3788/3914/3867 3787/3913/3867 3851/4040/3867 3852/4041/3867 +f 3762/3888/3868 3761/3887/3868 3825/4014/3868 3826/4015/3868 +f 3815/3941/3869 3814/3940/3869 3878/4067/3869 3879/4068/3869 +f 3789/3915/3870 3788/3914/3870 3852/4041/3870 3853/4042/3870 +f 3763/3889/3871 3762/3888/3871 3826/4015/3871 3827/4016/3871 +f 3816/3942/3872 3815/3941/3872 3879/4068/3872 3880/4069/3872 +f 3790/3916/3873 3789/3915/3873 3853/4042/3873 3854/4043/3873 +f 3764/3890/3874 3763/3889/3874 3827/4016/3874 3828/4017/3874 +f 3817/3943/3875 3816/3942/3875 3880/4069/3875 3881/4070/3875 +f 3791/3917/3876 3790/3916/3876 3854/4043/3876 3855/4044/3876 +f 3765/3891/3877 3764/3890/3877 3828/4017/3877 3829/4018/3877 +f 3818/4004/3878 3817/3943/3878 3881/4070/3878 +f 3792/3918/3879 3791/3917/3879 3855/4044/3879 3856/4045/3879 +f 3766/3892/3880 3765/3891/3880 3829/4018/3880 3830/4019/3880 +f 3793/3919/3881 3792/3918/3881 3856/4045/3881 3857/4046/3881 +f 3767/3893/3882 3766/3892/3882 3830/4019/3882 3831/4020/3882 +f 3794/3920/3883 3793/3919/3883 3857/4046/3883 3858/4047/3883 +f 3768/3894/3884 3767/3893/3884 3831/4020/3884 3832/4021/3884 +f 3795/3921/3885 3794/3920/3885 3858/4047/3885 3859/4048/3885 +f 3769/3895/3886 3768/3894/3886 3832/4021/3886 3833/4022/3886 +f 3796/3922/3887 3795/3921/3887 3859/4048/3887 3860/4049/3887 +f 3770/3896/3888 3769/3895/3888 3833/4022/3888 3834/4023/3888 +f 3797/3923/3889 3796/3922/3889 3860/4049/3889 3861/4050/3889 +f 3771/3897/3890 3770/3896/3890 3834/4023/3890 3835/4024/3890 +f 3798/3924/3891 3797/3923/3891 3861/4050/3891 3862/4051/3891 +f 3772/3898/3892 3771/3897/3892 3835/4024/3892 3836/4025/3892 +f 3799/3925/3893 3798/3924/3893 3862/4051/3893 3863/4052/3893 +f 3773/3899/3894 3772/3898/3894 3836/4025/3894 3837/4026/3894 +f 3800/3926/3895 3799/3925/3895 3863/4052/3895 3864/4053/3895 +f 3774/3900/3896 3773/3899/3896 3837/4026/3896 3838/4027/3896 +f 3801/3927/3897 3800/3926/3897 3864/4053/3897 3865/4054/3897 +f 3775/3901/3898 3774/3900/3898 3838/4027/3898 3839/4028/3898 +f 3802/3928/3899 3801/3927/3899 3865/4054/3899 3866/4055/3899 +f 3776/3902/3900 3775/3901/3900 3839/4028/3900 3840/4029/3900 +f 3803/3929/3901 3802/3928/3901 3866/4055/3901 3867/4056/3901 +f 3777/3903/3902 3776/3902/3902 3840/4029/3902 3841/4030/3902 +f 3804/3930/3903 3803/3929/3903 3867/4056/3903 3868/4057/3903 +f 3778/3904/3904 3777/3903/3904 3841/4030/3904 3842/4031/3904 +f 3871/4060/3905 3870/4059/3905 3933/4122/3905 3934/4123/3905 +f 3845/4034/3906 3844/4033/3906 3907/4096/3906 3908/4097/3906 +f 3819/4008/3907 1990/2051/3907 3882/4071/3907 +f 3872/4061/3908 3871/4060/3908 3934/4123/3908 3935/4124/3908 +f 3846/4035/3909 3845/4034/3909 3908/4097/3909 3909/4098/3909 +f 3820/4009/3910 3819/4008/3910 3882/4071/3910 3883/4072/3910 +f 3873/4062/3911 3872/4061/3911 3935/4124/3911 3936/4125/3911 +f 3847/4036/3912 3846/4035/3912 3909/4098/3912 3910/4099/3912 +f 3821/4010/3913 3820/4009/3913 3883/4072/3913 3884/4073/3913 +f 3874/4063/3914 3873/4062/3914 3936/4125/3914 3937/4126/3914 +f 3848/4037/3915 3847/4036/3915 3910/4099/3915 3911/4100/3915 +f 3822/4011/3916 3821/4010/3916 3884/4073/3916 3885/4074/3916 +f 3875/4064/3917 3874/4063/3917 3937/4126/3917 3938/4127/3917 +f 3849/4038/3918 3848/4037/3918 3911/4100/3918 3912/4101/3918 +f 3823/4012/3919 3822/4011/3919 3885/4074/3919 3886/4075/3919 +f 3876/4065/3920 3875/4064/3920 3938/4127/3920 3939/4128/3920 +f 3850/4039/3921 3849/4038/3921 3912/4101/3921 3913/4102/3921 +f 3824/4013/3922 3823/4012/3922 3886/4075/3922 3887/4076/3922 +f 3877/4066/3923 3876/4065/3923 3939/4128/3923 3940/4129/3923 +f 3851/4040/3924 3850/4039/3924 3913/4102/3924 3914/4103/3924 +f 3825/4014/3925 3824/4013/3925 3887/4076/3925 3888/4077/3925 +f 3878/4067/3926 3877/4066/3926 3940/4129/3926 3941/4130/3926 +f 3852/4041/3927 3851/4040/3927 3914/4103/3927 3915/4104/3927 +f 3826/4015/3928 3825/4014/3928 3888/4077/3928 3889/4078/3928 +f 3879/4068/3929 3878/4067/3929 3941/4130/3929 3942/4131/3929 +f 3853/4042/3930 3852/4041/3930 3915/4104/3930 3916/4105/3930 +f 3827/4016/3931 3826/4015/3931 3889/4078/3931 3890/4079/3931 +f 3880/4069/3932 3879/4068/3932 3942/4131/3932 3943/4132/3932 +f 3854/4043/3933 3853/4042/3933 3916/4105/3933 3917/4106/3933 +f 3828/4017/3934 3827/4016/3934 3890/4079/3934 3891/4080/3934 +f 3881/4070/3935 3880/4069/3935 3943/4132/3935 3944/4133/3935 +f 3855/4044/3936 3854/4043/3936 3917/4106/3936 3918/4107/3936 +f 3829/4018/3937 3828/4017/3937 3891/4080/3937 3892/4081/3937 +f 3818/4005/3938 3881/4070/3938 3944/4133/3938 +f 3856/4045/3939 3855/4044/3939 3918/4107/3939 3919/4108/3939 +f 3830/4019/3940 3829/4018/3940 3892/4081/3940 3893/4082/3940 +f 3857/4046/3941 3856/4045/3941 3919/4108/3941 3920/4109/3941 +f 3831/4020/3942 3830/4019/3942 3893/4082/3942 3894/4083/3942 +f 3858/4047/3943 3857/4046/3943 3920/4109/3943 3921/4110/3943 +f 3832/4021/3944 3831/4020/3944 3894/4083/3944 3895/4084/3944 +f 3859/4048/3945 3858/4047/3945 3921/4110/3945 3922/4111/3945 +f 3833/4022/3946 3832/4021/3946 3895/4084/3946 3896/4085/3946 +f 3860/4049/3947 3859/4048/3947 3922/4111/3947 3923/4112/3947 +f 3834/4023/3948 3833/4022/3948 3896/4085/3948 3897/4086/3948 +f 3861/4050/3949 3860/4049/3949 3923/4112/3949 3924/4113/3949 +f 3835/4024/3950 3834/4023/3950 3897/4086/3950 3898/4087/3950 +f 3862/4051/3951 3861/4050/3951 3924/4113/3951 3925/4114/3951 +f 3836/4025/3952 3835/4024/3952 3898/4087/3952 3899/4088/3952 +f 3863/4052/3953 3862/4051/3953 3925/4114/3953 3926/4115/3953 +f 3837/4026/3954 3836/4025/3954 3899/4088/3954 3900/4089/3954 +f 3864/4053/3955 3863/4052/3955 3926/4115/3955 3927/4116/3955 +f 3838/4027/3956 3837/4026/3956 3900/4089/3956 3901/4090/3956 +f 3865/4054/3957 3864/4053/3957 3927/4116/3957 3928/4117/3957 +f 3839/4028/3958 3838/4027/3958 3901/4090/3958 3902/4091/3958 +f 3866/4055/3959 3865/4054/3959 3928/4117/3959 3929/4118/3959 +f 3840/4029/3960 3839/4028/3960 3902/4091/3960 3903/4092/3960 +f 3867/4056/3961 3866/4055/3961 3929/4118/3961 3930/4119/3961 +f 3841/4030/3962 3840/4029/3962 3903/4092/3962 3904/4093/3962 +f 3868/4057/3963 3867/4056/3963 3930/4119/3963 3931/4120/3963 +f 3842/4031/3964 3841/4030/3964 3904/4093/3964 3905/4094/3964 +f 3869/4058/3965 3868/4057/3965 3931/4120/3965 3932/4121/3965 +f 3843/4032/3966 3842/4031/3966 3905/4094/3966 3906/4095/3966 +f 3870/4059/3967 3869/4058/3967 3932/4121/3967 3933/4122/3967 +f 3844/4033/3968 3843/4032/3968 3906/4095/3968 3907/4096/3968 +f 3936/4125/3969 3935/4124/3969 3998/4187/3969 3999/4188/3969 +f 3910/4099/3970 3909/4098/3970 3972/4161/3970 3973/4162/3970 +f 3884/4073/3971 3883/4072/3971 3946/4135/3971 3947/4136/3971 +f 3937/4126/3972 3936/4125/3972 3999/4188/3972 4000/4189/3972 +f 3911/4100/3973 3910/4099/3973 3973/4162/3973 3974/4163/3973 +f 3885/4074/3974 3884/4073/3974 3947/4136/3974 3948/4137/3974 +f 3938/4127/3975 3937/4126/3975 4000/4189/3975 4001/4190/3975 +f 3912/4101/3976 3911/4100/3976 3974/4163/3976 3975/4164/3976 +f 3886/4075/3977 3885/4074/3977 3948/4137/3977 3949/4138/3977 +f 3939/4128/3978 3938/4127/3978 4001/4190/3978 4002/4191/3978 +f 3913/4102/3979 3912/4101/3979 3975/4164/3979 3976/4165/3979 +f 3887/4076/3980 3886/4075/3980 3949/4138/3980 3950/4139/3980 +f 3940/4129/3981 3939/4128/3981 4002/4191/3981 4003/4192/3981 +f 3914/4103/3982 3913/4102/3982 3976/4165/3982 3977/4166/3982 +f 3888/4077/3983 3887/4076/3983 3950/4139/3983 3951/4140/3983 +f 3941/4130/3984 3940/4129/3984 4003/4192/3984 4004/4193/3984 +f 3915/4104/3985 3914/4103/3985 3977/4166/3985 3978/4167/3985 +f 3889/4078/3986 3888/4077/3986 3951/4140/3986 3952/4141/3986 +f 3942/4131/3987 3941/4130/3987 4004/4193/3987 4005/4194/3987 +f 3916/4105/3988 3915/4104/3988 3978/4167/3988 3979/4168/3988 +f 3890/4079/3989 3889/4078/3989 3952/4141/3989 3953/4142/3989 +f 3943/4132/3990 3942/4131/3990 4005/4194/3990 4006/4195/3990 +f 3917/4106/3991 3916/4105/3991 3979/4168/3991 3980/4169/3991 +f 3891/4080/3992 3890/4079/3992 3953/4142/3992 3954/4143/3992 +f 3944/4133/3993 3943/4132/3993 4006/4195/3993 4007/4196/3993 +f 3918/4107/3994 3917/4106/3994 3980/4169/3994 3981/4170/3994 +f 3892/4081/3995 3891/4080/3995 3954/4143/3995 3955/4144/3995 +f 3818/4006/3996 3944/4133/3996 4007/4196/3996 +f 3919/4108/3997 3918/4107/3997 3981/4170/3997 3982/4171/3997 +f 3893/4082/3998 3892/4081/3998 3955/4144/3998 3956/4145/3998 +f 3920/4109/3999 3919/4108/3999 3982/4171/3999 3983/4172/3999 +f 3894/4083/4000 3893/4082/4000 3956/4145/4000 3957/4146/4000 +f 3921/4110/4001 3920/4109/4001 3983/4172/4001 3984/4173/4001 +f 3895/4084/4002 3894/4083/4002 3957/4146/4002 3958/4147/4002 +f 3922/4111/4003 3921/4110/4003 3984/4173/4003 3985/4174/4003 +f 3896/4085/4004 3895/4084/4004 3958/4147/4004 3959/4148/4004 +f 3923/4112/4005 3922/4111/4005 3985/4174/4005 3986/4175/4005 +f 3897/4086/4006 3896/4085/4006 3959/4148/4006 3960/4149/4006 +f 3924/4113/4007 3923/4112/4007 3986/4175/4007 3987/4176/4007 +f 3898/4087/4008 3897/4086/4008 3960/4149/4008 3961/4150/4008 +f 3925/4114/4009 3924/4113/4009 3987/4176/4009 3988/4177/4009 +f 3899/4088/4010 3898/4087/4010 3961/4150/4010 3962/4151/4010 +f 3926/4115/4011 3925/4114/4011 3988/4177/4011 3989/4178/4011 +f 3900/4089/4012 3899/4088/4012 3962/4151/4012 3963/4152/4012 +f 3927/4116/4013 3926/4115/4013 3989/4178/4013 3990/4179/4013 +f 3901/4090/4014 3900/4089/4014 3963/4152/4014 3964/4153/4014 +f 3928/4117/4015 3927/4116/4015 3990/4179/4015 3991/4180/4015 +f 3902/4091/4016 3901/4090/4016 3964/4153/4016 3965/4154/4016 +f 3929/4118/4017 3928/4117/4017 3991/4180/4017 3992/4181/4017 +f 3903/4092/4018 3902/4091/4018 3965/4154/4018 3966/4155/4018 +f 3930/4119/4019 3929/4118/4019 3992/4181/4019 3993/4182/4019 +f 3904/4093/4020 3903/4092/4020 3966/4155/4020 3967/4156/4020 +f 3931/4120/4021 3930/4119/4021 3993/4182/4021 3994/4183/4021 +f 3905/4094/4022 3904/4093/4022 3967/4156/4022 3968/4157/4022 +f 3932/4121/4023 3931/4120/4023 3994/4183/4023 3995/4184/4023 +f 3906/4095/4024 3905/4094/4024 3968/4157/4024 3969/4158/4024 +f 3933/4122/4025 3932/4121/4025 3995/4184/4025 3996/4185/4025 +f 3907/4096/4026 3906/4095/4026 3969/4158/4026 3970/4159/4026 +f 3934/4123/4027 3933/4122/4027 3996/4185/4027 3997/4186/4027 +f 3908/4097/4028 3907/4096/4028 3970/4159/4028 3971/4160/4028 +f 3882/4071/4029 1990/2052/4029 3945/4134/4029 +f 3935/4124/4030 3934/4123/4030 3997/4186/4030 3998/4187/4030 +f 3909/4098/4031 3908/4097/4031 3971/4160/4031 3972/4161/4031 +f 3883/4072/4032 3882/4071/4032 3945/4134/4032 3946/4135/4032 +f 4001/4190/4033 4000/4189/4033 31/31/4033 32/32/4033 +f 3975/4164/4034 3974/4163/4034 15/15/4034 4023/4212/4034 +f 3949/4138/4035 3948/4137/4035 4010/4199/4035 4011/4200/4035 +f 4002/4191/4036 4001/4190/4036 32/32/4036 33/33/4036 +f 3976/4165/4037 3975/4164/4037 4023/4212/4037 16/16/4037 +f 3950/4139/4038 3949/4138/4038 4011/4200/4038 2/2/4038 +f 4003/4192/4039 4002/4191/4039 33/33/4039 34/34/4039 +f 3977/4166/4040 3976/4165/4040 16/16/4040 4024/4213/4040 +f 3951/4140/4041 3950/4139/4041 2/2/4041 3/3/4041 +f 4004/4193/4042 4003/4192/4042 34/34/4042 4033/4222/4042 +f 3978/4167/4043 3977/4166/4043 4024/4213/4043 17/17/4043 +f 3952/4141/4044 3951/4140/4044 3/3/4044 4/4/4044 +f 4005/4194/4045 4004/4193/4045 4033/4222/4045 35/35/4045 +f 3979/4168/4046 3978/4167/4046 17/17/4046 4025/4214/4046 +f 3953/4142/4047 3952/4141/4047 4/4/4047 4012/4201/4047 +f 4006/4195/4048 4005/4194/4048 35/35/4048 36/36/4048 +f 3980/4169/4049 3979/4168/4049 4025/4214/4049 4026/4215/4049 +f 3954/4143/4050 3953/4142/4050 4012/4201/4050 5/5/4050 +f 4007/4196/4051 4006/4195/4051 36/36/4051 4034/4223/4051 +f 3981/4170/4052 3980/4169/4052 4026/4215/4052 18/18/4052 +f 3955/4144/4053 3954/4143/4053 5/5/4053 6/6/4053 +f 3818/4007/4054 4007/4196/4054 4034/4223/4054 +f 3982/4171/4055 3981/4170/4055 18/18/4055 19/19/4055 +f 3956/4145/4056 3955/4144/4056 6/6/4056 4013/4202/4056 +f 3983/4172/4057 3982/4171/4057 19/19/4057 4027/4216/4057 +f 3957/4146/4058 3956/4145/4058 4013/4202/4058 4014/4203/4058 +f 3984/4173/4059 3983/4172/4059 4027/4216/4059 20/20/4059 +f 3958/4147/4060 3957/4146/4060 4014/4203/4060 4015/4204/4060 +f 3985/4174/4061 3984/4173/4061 20/20/4061 21/21/4061 +f 3959/4148/4062 3958/4147/4062 4015/4204/4062 7/7/4062 +f 3986/4175/4063 3985/4174/4063 21/21/4063 22/22/4063 +f 3960/4149/4064 3959/4148/4064 7/7/4064 8/8/4064 +f 3987/4176/4065 3986/4175/4065 22/22/4065 4028/4217/4065 +f 3961/4150/4066 3960/4149/4066 8/8/4066 4016/4205/4066 +f 3988/4177/4067 3987/4176/4067 4028/4217/4067 4029/4218/4067 +f 3962/4151/4068 3961/4150/4068 4016/4205/4068 4017/4206/4068 +f 3989/4178/4069 3988/4177/4069 4029/4218/4069 23/23/4069 +f 3963/4152/4070 3962/4151/4070 4017/4206/4070 9/9/4070 +f 3990/4179/4071 3989/4178/4071 23/23/4071 4030/4219/4071 +f 3964/4153/4072 3963/4152/4072 9/9/4072 4018/4207/4072 +f 3991/4180/4073 3990/4179/4073 4030/4219/4073 24/24/4073 +f 3965/4154/4074 3964/4153/4074 4018/4207/4074 10/10/4074 +f 3992/4181/4075 3991/4180/4075 24/24/4075 25/25/4075 +f 3966/4155/4076 3965/4154/4076 10/10/4076 4019/4208/4076 +f 3993/4182/4077 3992/4181/4077 25/25/4077 26/26/4077 +f 3967/4156/4078 3966/4155/4078 4019/4208/4078 4020/4209/4078 +f 3994/4183/4079 3993/4182/4079 26/26/4079 27/27/4079 +f 3968/4157/4080 3967/4156/4080 4020/4209/4080 4021/4210/4080 +f 3995/4184/4081 3994/4183/4081 27/27/4081 28/28/4081 +f 3969/4158/4082 3968/4157/4082 4021/4210/4082 4022/4211/4082 +f 3996/4185/4083 3995/4184/4083 28/28/4083 4031/4220/4083 +f 3970/4159/4084 3969/4158/4084 4022/4211/4084 11/11/4084 +f 3997/4186/4085 3996/4185/4085 4031/4220/4085 29/29/4085 +f 3971/4160/4086 3970/4159/4086 11/11/4086 12/12/4086 +f 3945/4134/4087 1990/2053/4087 4008/4197/4087 +f 3998/4187/4088 3997/4186/4088 29/29/4088 30/30/4088 +f 3972/4161/4089 3971/4160/4089 12/12/4089 13/13/4089 +f 3946/4135/4090 3945/4134/4090 4008/4197/4090 4009/4198/4090 +f 3999/4188/4091 3998/4187/4091 30/30/4091 4032/4221/4091 +f 3973/4162/4092 3972/4161/4092 13/13/4092 14/14/4092 +f 3947/4136/4093 3946/4135/4093 4009/4198/4093 1/1/4093 +f 4000/4189/4094 3999/4188/4094 4032/4221/4094 31/31/4094 +f 3974/4163/4095 3973/4162/4095 14/14/4095 15/15/4095 +f 3948/4137/4096 3947/4136/4096 1/1/4096 4010/4199/4096 diff --git a/resources/models/tissuebox.mtl b/resources/models/tissuebox.mtl new file mode 100644 index 00000000..9c8ac1dc --- /dev/null +++ b/resources/models/tissuebox.mtl @@ -0,0 +1,13 @@ +# Blender 3.1.0 MTL File: 'TheDenObjects.blend' +# www.blender.org + +newmtl Tissuebox +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 +map_Kd tissuebox.png diff --git a/resources/models/tissuebox.obj b/resources/models/tissuebox.obj new file mode 100644 index 00000000..517367aa --- /dev/null +++ b/resources/models/tissuebox.obj @@ -0,0 +1,50 @@ +# Blender 3.1.0 +# www.blender.org +mtllib tissuebox.mtl +o Cube.003 +v -0.107500 -0.060000 0.057500 +v -0.107500 0.060000 0.057500 +v -0.107500 -0.060000 -0.057500 +v -0.107500 0.060000 -0.057500 +v 0.107500 -0.060000 0.057500 +v 0.107500 0.060000 0.057500 +v 0.107500 -0.060000 -0.057500 +v 0.107500 0.060000 -0.057500 +vn -0.1075 -0.0000 -0.0000 +vn -0.0000 -0.0000 -0.0575 +vn 0.1075 -0.0000 -0.0000 +vn -0.0000 -0.0000 0.0575 +vn -0.0000 -0.0600 -0.0000 +vn -0.0000 0.0600 -0.0000 +vt 0.995476 0.261945 +vt 0.282795 0.992674 +vt 0.839733 0.973224 +vt 0.862857 0.261945 +vt 0.579630 0.992674 +vt 0.267187 0.007014 +vt 0.995476 0.028055 +vt 0.285720 0.013119 +vt 0.607416 0.973224 +vt 0.862857 0.028055 +vt 0.581996 0.013119 +vt 0.014890 0.007014 +vt 0.997871 0.005190 +vt 0.282795 0.016539 +vt 0.839733 0.043957 +vt 0.855463 0.005190 +vt 0.579630 0.016539 +vt 0.267187 1.016201 +vt 0.285720 1.001448 +vt 0.997871 0.271477 +vt 0.607416 0.043957 +vt 0.581996 1.001448 +vt 0.855463 0.271477 +vt 0.014890 1.016201 +s 0 +usemtl Tissuebox +f 1/1/1 2/4/1 4/10/1 3/7/1 +f 3/8/2 4/11/2 8/22/2 7/19/2 +f 7/20/3 8/23/3 6/16/3 5/13/3 +f 5/14/4 6/17/4 2/5/4 1/2/4 +f 3/9/5 7/21/5 5/15/5 1/3/5 +f 8/24/6 4/12/6 2/6/6 6/18/6 diff --git a/resources/models/untitled.mtl b/resources/models/untitled.mtl new file mode 100644 index 00000000..ed6ec5fb --- /dev/null +++ b/resources/models/untitled.mtl @@ -0,0 +1,42 @@ +# Blender 3.1.0 MTL File: 'None' +# www.blender.org + +newmtl Material +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 + +newmtl Material.001 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 + +newmtl Material.002 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 + +newmtl Material.003 +Ns 360.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 diff --git a/resources/models/untitled.obj b/resources/models/untitled.obj new file mode 100644 index 00000000..4d68ca62 --- /dev/null +++ b/resources/models/untitled.obj @@ -0,0 +1,151 @@ +# Blender 3.1.0 +# www.blender.org +mtllib untitled.mtl +o Cube +v 9.520513 1.000000 -1.000000 +v 9.520513 -1.000000 -1.000000 +v 9.520513 1.000000 1.000000 +v 9.520513 -1.000000 1.000000 +v 7.520513 1.000000 -1.000000 +v 7.520513 -1.000000 -1.000000 +v 7.520513 1.000000 1.000000 +v 7.520513 -1.000000 1.000000 +vn -0.0000 1.0000 -0.0000 +vn -0.0000 -0.0000 1.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn 1.0000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -1.0000 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl Material +f 1/1/1 5/5/1 7/9/1 3/3/1 +f 4/4/2 3/3/2 7/10/2 8/12/2 +f 8/13/3 7/11/3 5/6/3 6/8/3 +f 6/7/4 2/2/4 4/4/4 8/14/4 +f 2/2/5 1/1/5 3/3/5 4/4/5 +f 6/8/6 5/6/6 1/1/6 2/2/6 +o Cube.001 +v -17.620705 1.000000 11.398846 +v -17.620705 -1.000000 11.398846 +v -17.620705 1.000000 13.398846 +v -17.620705 -1.000000 13.398846 +v -19.620705 1.000000 11.398846 +v -19.620705 -1.000000 11.398846 +v -19.620705 1.000000 13.398846 +v -19.620705 -1.000000 13.398846 +vn -0.0000 1.0000 -0.0000 +vn -0.0000 -0.0000 1.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn 1.0000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -1.0000 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl Material.001 +f 9/15/7 13/19/7 15/23/7 11/17/7 +f 12/18/8 11/17/8 15/24/8 16/26/8 +f 16/27/9 15/25/9 13/20/9 14/22/9 +f 14/21/10 10/16/10 12/18/10 16/28/10 +f 10/16/11 9/15/11 11/17/11 12/18/11 +f 14/22/12 13/20/12 9/15/12 10/16/12 +o Cube.002 +v -4.027913 1.000000 -15.398260 +v -4.027913 -1.000000 -15.398260 +v -4.027913 1.000000 -13.398260 +v -4.027913 -1.000000 -13.398260 +v -6.027913 1.000000 -15.398260 +v -6.027913 -1.000000 -15.398260 +v -6.027913 1.000000 -13.398260 +v -6.027913 -1.000000 -13.398260 +vn -0.0000 1.0000 -0.0000 +vn -0.0000 -0.0000 1.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn 1.0000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -1.0000 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl Material.002 +f 17/29/13 21/33/13 23/37/13 19/31/13 +f 20/32/14 19/31/14 23/38/14 24/40/14 +f 24/41/15 23/39/15 21/34/15 22/36/15 +f 22/35/16 18/30/16 20/32/16 24/42/16 +f 18/30/17 17/29/17 19/31/17 20/32/17 +f 22/36/18 21/34/18 17/29/18 18/30/18 +o Cube.003 +v -20.392143 11.592122 -1.327182 +v -20.392143 9.592122 -1.327182 +v -20.392143 11.592122 0.672818 +v -20.392143 9.592122 0.672818 +v -22.392143 11.592122 -1.327182 +v -22.392143 9.592122 -1.327182 +v -22.392143 11.592122 0.672818 +v -22.392143 9.592122 0.672818 +vn -0.0000 1.0000 -0.0000 +vn -0.0000 -0.0000 1.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn 1.0000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -1.0000 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.875000 0.500000 +vt 0.625000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +vt 0.625000 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.125000 0.750000 +s 0 +usemtl Material.003 +f 25/43/19 29/47/19 31/51/19 27/45/19 +f 28/46/20 27/45/20 31/52/20 32/54/20 +f 32/55/21 31/53/21 29/48/21 30/50/21 +f 30/49/22 26/44/22 28/46/22 32/56/22 +f 26/44/23 25/43/23 27/45/23 28/46/23 +f 30/50/24 29/48/24 25/43/24 26/44/24 diff --git a/resources/scripts/_Controls.lua b/resources/scripts/_Controls.lua deleted file mode 100644 index d8eb2eb5..00000000 --- a/resources/scripts/_Controls.lua +++ /dev/null @@ -1,16 +0,0 @@ -Bindings = { - quit = "x", - move_forward = "w", - move_backward = "s", - move_left = "a", - move_right = "d", - sprint = "lshift", - crouch = "lctrl", - shoot = "space", - toggle_wireframe = "k", - toggle_noclip = "z", - pause_game = "escape", - help_menu = "m", - network_menu = "n", - network_pvp_menu = "p" -} diff --git a/resources/scripts/shootGun.lua b/resources/scripts/shootGun.lua deleted file mode 100644 index f73c7843..00000000 --- a/resources/scripts/shootGun.lua +++ /dev/null @@ -1,5 +0,0 @@ -if get_if_should_shoot() == true then - addGameObject("scripts/bullet.lua") - set_if_should_shoot(false) - set_last_shot() -end diff --git a/resources/shaders/directional_shadow_map.frag b/resources/shaders/directional_shadow_map.frag index 2a72f7a4..58ef83e4 100644 --- a/resources/shaders/directional_shadow_map.frag +++ b/resources/shaders/directional_shadow_map.frag @@ -1,5 +1,17 @@ #version 410 core -void main() -{ +in vec2 v_tex; + +out vec4 color; + +uniform sampler2D theTexture; + +void main() { + float alpha = texture(theTexture, v_tex).a; + + if (alpha < 0.5) { + discard; + } + + color = vec4(1.0); } diff --git a/resources/shaders/directional_shadow_map.vert b/resources/shaders/directional_shadow_map.vert index 6f8c6d0b..250ba82c 100644 --- a/resources/shaders/directional_shadow_map.vert +++ b/resources/shaders/directional_shadow_map.vert @@ -1,10 +1,14 @@ #version 410 core layout(location = 0) in vec3 pos; +layout(location = 1) in vec2 tex; + +out vec2 v_tex; uniform mat4 model; -uniform mat4 directionalLightTransform; +uniform mat4 directional_light_transform; void main() { - gl_Position = directionalLightTransform * model * vec4(pos, 1.0); + gl_Position = directional_light_transform * model * vec4(pos, 1.0); + v_tex = tex; } diff --git a/resources/shaders/omni_shadow_map.frag b/resources/shaders/omni_shadow_map.frag index f8019b36..050e8a1a 100644 --- a/resources/shaders/omni_shadow_map.frag +++ b/resources/shaders/omni_shadow_map.frag @@ -2,14 +2,12 @@ in vec4 fragPos; -uniform vec3 lightPos; -uniform float farPlane; +uniform vec3 light_pos; +uniform float far_plane; -void main() -{ - float theDistance = length(fragPos.xyz - lightPos); +void main() { + float light_distance = length(fragPos.xyz - light_pos); + light_distance /= far_plane; - theDistance = theDistance / farPlane; - - gl_FragDepth = theDistance; + gl_FragDepth = light_distance; } diff --git a/resources/shaders/omni_shadow_map.geom b/resources/shaders/omni_shadow_map.geom index 852f95de..360bb605 100644 --- a/resources/shaders/omni_shadow_map.geom +++ b/resources/shaders/omni_shadow_map.geom @@ -3,21 +3,18 @@ layout(triangles) in; layout(triangle_strip, max_vertices = 18) out; -uniform mat4 lightMatrices[6]; +uniform mat4 light_matrices[6]; out vec4 fragPos; void main() { for (int face = 0; face < 6; ++face) { gl_Layer = face; - - for (int i = 0; i < 3; ++i) { - fragPos = gl_in[i].gl_Position; - gl_Position = lightMatrices[face] * fragPos; - + for (int vert = 0; vert < 3; ++vert) { + fragPos = gl_in[vert].gl_Position; + gl_Position = light_matrices[face] * fragPos; EmitVertex(); } - EndPrimitive(); } } diff --git a/resources/shaders/react.frag b/resources/shaders/react.frag new file mode 100644 index 00000000..98dbfe5b --- /dev/null +++ b/resources/shaders/react.frag @@ -0,0 +1,7 @@ +#version 410 core + +in vec4 frag_color; + +out vec4 color; + +void main() { color = frag_color; } diff --git a/resources/shaders/react.vert b/resources/shaders/react.vert new file mode 100644 index 00000000..3c1d942d --- /dev/null +++ b/resources/shaders/react.vert @@ -0,0 +1,16 @@ +#version 410 core + +layout(location = 0) in vec3 pos; +layout(location = 1) in uint color; + +out vec4 frag_color; + +uniform mat4 projection; +uniform mat4 view; + +void main() { + gl_Position = projection * view * vec4(pos, 1.0); + + frag_color = vec4((color & 0xFF0000u) >> 16, (color & 0x00FF00u) >> 8, + color & 0x0000FFu, 0xFF); +} diff --git a/resources/shaders/shader.frag b/resources/shaders/shader.frag index 71ff6208..ac625cf3 100644 --- a/resources/shaders/shader.frag +++ b/resources/shaders/shader.frag @@ -4,27 +4,25 @@ in vec3 vColor; in vec2 texCoord; in vec3 normal; in vec3 fragPos; +in vec4 directional_light_space_pos; out vec4 color; -const int MAX_POINT_LIGHTS = 8; -const int MAX_SPOT_LIGHTS = 8; +const int MAX_POINT_LIGHTS = 14; +const int MAX_SPOT_LIGHTS = 14; -struct Light -{ +struct Light { vec3 color; float ambientIntensity; float diffuseIntensity; }; -struct DirectionalLight -{ +struct DirectionalLight { Light base; vec3 direction; }; -struct PointLight -{ +struct PointLight { Light base; vec3 position; float constant; @@ -32,21 +30,18 @@ struct PointLight float exponent; }; -struct SpotLight -{ +struct SpotLight { PointLight base; vec3 direction; float edge; }; -struct OmniShadowMap -{ - samplerCube shadowMap; - float farPlane; +struct OmniShadowMap { + samplerCube shadow_map; + float far_plane; }; -struct Material -{ +struct Material { float specularIntensity; float shininess; }; @@ -62,131 +57,175 @@ uniform PointLight pointLights[MAX_POINT_LIGHTS]; uniform SpotLight spotLights[MAX_SPOT_LIGHTS]; uniform sampler2D theTexture; -uniform sampler2D directionalShadowMap; +uniform sampler2D directional_shadow_map; uniform sampler2D detailmap; -uniform OmniShadowMap omniShadowMaps[MAX_POINT_LIGHTS + MAX_SPOT_LIGHTS]; +uniform OmniShadowMap omni_shadow_maps[MAX_POINT_LIGHTS + MAX_SPOT_LIGHTS]; uniform Material material; uniform vec3 eyePosition; -vec3 sampleOffsetDirections[20] = vec3[] -( - vec3(1, 1, 1), vec3( 1, -1, 1), vec3(-1, -1, 1), vec3(-1, 1, 1), - vec3(1, 1, -1), vec3( 1, -1, -1), vec3(-1, -1, -1), vec3(-1, 1, -1), - vec3(1, 1, 0), vec3( 1, -1, 0), vec3(-1, -1, 0), vec3(-1, 1, 0), - vec3(1, 0, 1), vec3(-1, 0, 1), vec3( 1, 0, -1), vec3(-1, 0, -1), - vec3(0, 1, 1), vec3( 0, -1, 1), vec3( 0, -1, -1), vec3( 0, 1, -1) -); +vec3 sampleOffsetDirections[20] = + vec3[](vec3(1, 1, 1), vec3(1, -1, 1), vec3(-1, -1, 1), vec3(-1, 1, 1), + vec3(1, 1, -1), vec3(1, -1, -1), vec3(-1, -1, -1), vec3(-1, 1, -1), + vec3(1, 1, 0), vec3(1, -1, 0), vec3(-1, -1, 0), vec3(-1, 1, 0), + vec3(1, 0, 1), vec3(-1, 0, 1), vec3(1, 0, -1), vec3(-1, 0, -1), + vec3(0, 1, 1), vec3(0, -1, 1), vec3(0, -1, -1), vec3(0, 1, -1)); -vec4 CalcLightByDirection(Light light, vec3 direction) -{ - vec4 ambientColor = vec4(light.color, 1.0f) * light.ambientIntensity; +float calc_directional_shadow_factor(DirectionalLight light) { + vec3 proj_coords = + directional_light_space_pos.xyz / directional_light_space_pos.w; + proj_coords = (proj_coords * 0.5) + 0.5; - float diffuseFactor = max(dot(normalize(normal), normalize(direction)), 0.0f); + float current = proj_coords.z; - vec4 diffuseColor = vec4(light.color * light.diffuseIntensity * diffuseFactor, 1.0f); + vec3 normal = normalize(normal); + vec3 light_dir = normalize(light.direction - fragPos); - vec4 specularColor = vec4(0, 0, 0, 0); + float bias = max(0.05 * (1.0 - dot(normal, light_dir)), 0.005); + float shadow = 0.0; - if (diffuseFactor > 0.0f) - { - vec3 fragToEye = normalize(eyePosition - fragPos); - vec3 reflectedVertex = normalize(reflect(direction, normalize(normal))); + vec2 texel_size = 1.0 / textureSize(directional_shadow_map, 0); - float specularFactor = dot(fragToEye, reflectedVertex); + for (int x = -1; x <= 1; ++x) { + for (int y = -1; y <= 1; ++y) { + float pcf_depth = texture(directional_shadow_map, + proj_coords.xy + vec2(x, y) * texel_size) + .r; + shadow += (current - bias) > pcf_depth ? 1.0 : 0.0; + } + } + + // Divide by how many pixels sampled. + shadow /= 9.0; + + if (proj_coords.z > 1.0) { + shadow = 0.0; + } + + return shadow; +} + +float calc_omni_shadow_factor(PointLight light, int shadow_index) { + vec3 frag_to_light = fragPos - light.position; + float current = length(frag_to_light); + + float shadow = 0.0; + float bias = 0.05; + int samples = 20; + + float view_distance = length(eyePosition - fragPos); + float disk_radius = + (1.0 + (view_distance / omni_shadow_maps[shadow_index].far_plane)) / + 25.0; - if (specularFactor > 0.0f) - { - specularFactor = pow(specularFactor, material.shininess); - specularColor = vec4(light.color * material.specularIntensity * specularFactor, 1.0f); + for (int i = 0; i < samples; ++i) { + float closest = + texture(omni_shadow_maps[shadow_index].shadow_map, + frag_to_light + sampleOffsetDirections[i] * disk_radius) + .r; + closest *= omni_shadow_maps[shadow_index].far_plane; + + if (current - bias > closest) { + shadow += 1.0; } } - return ambientColor + diffuseColor + specularColor; + shadow /= float(samples); + return shadow; +} + +vec4 CalcLightByDirection(Light light, vec3 direction, float shadow_factor) { + // Ambient + vec4 ambientColor = vec4(light.color * light.ambientIntensity, 1.0f); + + // Diffuse + float diffuseFactor = + max(dot(normalize(normal), normalize(direction)), 0.0f); + vec4 diffuseColor = + vec4(light.color * light.diffuseIntensity * diffuseFactor, 1.0f); + + // Specular + vec3 fragToEye = normalize(eyePosition - fragPos); + vec3 reflectedVertex = reflect(normalize(direction), normalize(normal)); + float specularFactor = + pow(max(dot(fragToEye, reflectedVertex), 0.0), material.shininess); + vec4 specularColor = + vec4(light.color * material.specularIntensity * specularFactor, 1.0f); + + return ambientColor + + ((1.0 - shadow_factor) * (diffuseColor + specularColor)); } -vec4 CalcDirectionalLight() -{ - return CalcLightByDirection(directionalLight.base, directionalLight.direction); +vec4 CalcDirectionalLight() { + float shadow_factor = calc_directional_shadow_factor(directionalLight); + return CalcLightByDirection(directionalLight.base, + directionalLight.direction, shadow_factor); } -vec4 CalcPointLight(PointLight pLight) -{ - vec3 direction = normalize(fragPos - pLight.position); - float distance = length(direction); +vec4 CalcPointLight(PointLight pLight, int shadow_index) { + vec3 direction = fragPos - pLight.position; + float light_distance = length(direction); direction = normalize(direction); - vec4 color = CalcLightByDirection(pLight.base, direction); + float shadow_factor = calc_omni_shadow_factor(pLight, shadow_index); + + vec4 color = CalcLightByDirection(pLight.base, direction, shadow_factor); + + float attenuation = (pLight.exponent * (light_distance * light_distance)) + + (pLight.linear * light_distance) + (pLight.constant); - float attenuation = (pLight.exponent * (distance * distance)) + - (pLight.linear * distance) + - (pLight.constant); - return (color / attenuation); } -vec4 CalcSpotLight(SpotLight sLight) -{ +vec4 CalcSpotLight(SpotLight sLight, int shadow_index) { vec3 rayDirection = normalize(fragPos - sLight.base.position); float slFactor = dot(rayDirection, sLight.direction); - if (slFactor > sLight.edge) - { - vec4 color = CalcPointLight(sLight.base); + if (slFactor > sLight.edge) { + vec4 color = CalcPointLight(sLight.base, shadow_index); - return color * (1.0f - (1.0f - slFactor) * (1.0f / (1.0f - sLight.edge))); - } - else - { + return color * + (1.0f - (1.0f - slFactor) * (1.0f / (1.0f - sLight.edge))); + } else { return vec4(0, 0, 0, 0); } } -vec4 CalcPointLights() -{ +vec4 CalcPointLights() { vec4 totalColor = vec4(0, 0, 0, 0); - for (int i = 0; i < pointLightCount; ++i) - { - totalColor += CalcPointLight(pointLights[i]); + for (int i = 0; i < pointLightCount; ++i) { + totalColor += CalcPointLight(pointLights[i], i); } return totalColor; } -vec4 CalcSpotLights() -{ +vec4 CalcSpotLights() { vec4 totalColor = vec4(0, 0, 0, 0); - for (int i = 0; i < spotLightCount; ++i) - { - totalColor += CalcSpotLight(spotLights[i]); + for (int i = 0; i < spotLightCount; ++i) { + totalColor += CalcSpotLight(spotLights[i], i + pointLightCount); } return totalColor; } -void main() -{ +void main() { vec4 finalColor = CalcDirectionalLight(); finalColor += CalcPointLights(); finalColor += CalcSpotLights(); - if (isUsingTexture) - { + if (isUsingTexture) { finalColor *= texture(theTexture, texCoord); - } - else if (is_using_detailmap) - { - finalColor *= mix(texture(detailmap, texCoord * 100), texture(theTexture, texCoord), 0.7f); - } - else - { + } else if (is_using_detailmap) { + finalColor *= mix(texture(detailmap, texCoord * 100), + texture(theTexture, texCoord), 0.5f); + } else { finalColor += vec4(vColor, 1.0f); } color = finalColor; } - diff --git a/resources/shaders/shader.vert b/resources/shaders/shader.vert index 67379f29..c287d45b 100644 --- a/resources/shaders/shader.vert +++ b/resources/shaders/shader.vert @@ -9,14 +9,14 @@ out vec3 vColor; out vec2 texCoord; out vec3 normal; out vec3 fragPos; +out vec4 directional_light_space_pos; uniform mat4 model; uniform mat4 projection; uniform mat4 view; +uniform mat4 directional_light_transform; void main() { - gl_Position = projection * view * model * vec4(pos, 1.0f); - vColor = color; texCoord = tex; @@ -24,4 +24,9 @@ void main() { normal = mat3(transpose(inverse(model))) * norm; fragPos = (model * vec4(pos, 1.0f)).xyz; + + gl_Position = projection * view * vec4(fragPos, 1.0f); + + directional_light_space_pos = + directional_light_transform * vec4(fragPos, 1.0f); } diff --git a/resources/textures/Bin.png b/resources/textures/Bin.png new file mode 100644 index 00000000..741ce2aa Binary files /dev/null and b/resources/textures/Bin.png differ diff --git a/resources/textures/CabinetDoors.png b/resources/textures/CabinetDoors.png new file mode 100644 index 00000000..33797e26 Binary files /dev/null and b/resources/textures/CabinetDoors.png differ diff --git a/resources/textures/Calculator.png b/resources/textures/Calculator.png new file mode 100644 index 00000000..6366d000 Binary files /dev/null and b/resources/textures/Calculator.png differ diff --git a/resources/textures/Carpet.png b/resources/textures/Carpet.png new file mode 100644 index 00000000..9690e7e5 Binary files /dev/null and b/resources/textures/Carpet.png differ diff --git a/resources/textures/CeilingCabling.png b/resources/textures/CeilingCabling.png new file mode 100644 index 00000000..8d392421 Binary files /dev/null and b/resources/textures/CeilingCabling.png differ diff --git a/resources/textures/ChairTexture.png b/resources/textures/ChairTexture.png new file mode 100644 index 00000000..abecbf6c Binary files /dev/null and b/resources/textures/ChairTexture.png differ diff --git a/resources/textures/Computer.png b/resources/textures/Computer.png new file mode 100644 index 00000000..b20b9d72 Binary files /dev/null and b/resources/textures/Computer.png differ diff --git a/resources/textures/CornerRoom.png b/resources/textures/CornerRoom.png new file mode 100644 index 00000000..c8d5f7d5 Binary files /dev/null and b/resources/textures/CornerRoom.png differ diff --git a/resources/textures/DarkGlass.png b/resources/textures/DarkGlass.png new file mode 100644 index 00000000..407b4129 Binary files /dev/null and b/resources/textures/DarkGlass.png differ diff --git a/resources/textures/DarkWall.png b/resources/textures/DarkWall.png new file mode 100644 index 00000000..33d9e8a3 Binary files /dev/null and b/resources/textures/DarkWall.png differ diff --git a/resources/textures/ElevatorAndStairs.png b/resources/textures/ElevatorAndStairs.png new file mode 100644 index 00000000..63a95de4 Binary files /dev/null and b/resources/textures/ElevatorAndStairs.png differ diff --git a/resources/textures/GenericWalls.png b/resources/textures/GenericWalls.png new file mode 100644 index 00000000..cd00e966 Binary files /dev/null and b/resources/textures/GenericWalls.png differ diff --git a/resources/textures/GlassDoor.png b/resources/textures/GlassDoor.png new file mode 100644 index 00000000..93eba034 Binary files /dev/null and b/resources/textures/GlassDoor.png differ diff --git a/resources/textures/WallPattern.png b/resources/textures/WallPattern.png new file mode 100644 index 00000000..0c13bf06 Binary files /dev/null and b/resources/textures/WallPattern.png differ diff --git a/resources/textures/blending_transparent_window_white.png b/resources/textures/blending_transparent_window_white.png new file mode 100644 index 00000000..34b495a5 Binary files /dev/null and b/resources/textures/blending_transparent_window_white.png differ diff --git a/resources/textures/book 1.png b/resources/textures/book 1.png new file mode 100644 index 00000000..5bd6d411 Binary files /dev/null and b/resources/textures/book 1.png differ diff --git a/resources/textures/book 2.png b/resources/textures/book 2.png new file mode 100644 index 00000000..1cf88e3f Binary files /dev/null and b/resources/textures/book 2.png differ diff --git a/resources/textures/book 3.png b/resources/textures/book 3.png new file mode 100644 index 00000000..0d7b9e87 Binary files /dev/null and b/resources/textures/book 3.png differ diff --git a/resources/textures/chair.jpg b/resources/textures/chair.jpg new file mode 100644 index 00000000..f22d9541 Binary files /dev/null and b/resources/textures/chair.jpg differ diff --git a/resources/textures/plain.png b/resources/textures/default.png similarity index 100% rename from resources/textures/plain.png rename to resources/textures/default.png diff --git a/resources/textures/floor.png b/resources/textures/floor.png new file mode 100644 index 00000000..6c458199 Binary files /dev/null and b/resources/textures/floor.png differ diff --git a/resources/textures/marker.png b/resources/textures/marker.png new file mode 100644 index 00000000..496379cb Binary files /dev/null and b/resources/textures/marker.png differ diff --git a/resources/textures/pillars&roof.png b/resources/textures/pillars&roof.png new file mode 100644 index 00000000..a01a3012 Binary files /dev/null and b/resources/textures/pillars&roof.png differ diff --git a/resources/textures/pillarsAndroof.png b/resources/textures/pillarsAndroof.png new file mode 100644 index 00000000..143892b0 Binary files /dev/null and b/resources/textures/pillarsAndroof.png differ diff --git a/resources/textures/pizza.png b/resources/textures/pizza.png new file mode 100644 index 00000000..b01b33d1 Binary files /dev/null and b/resources/textures/pizza.png differ diff --git a/resources/textures/rubixcube.png b/resources/textures/rubixcube.png new file mode 100644 index 00000000..96d36375 Binary files /dev/null and b/resources/textures/rubixcube.png differ diff --git a/resources/textures/skyboxes/default/back.jpg b/resources/textures/skyboxes/default/back.jpg new file mode 100644 index 00000000..470a6797 Binary files /dev/null and b/resources/textures/skyboxes/default/back.jpg differ diff --git a/resources/textures/skyboxes/default/bottom.jpg b/resources/textures/skyboxes/default/bottom.jpg new file mode 100644 index 00000000..893f3947 Binary files /dev/null and b/resources/textures/skyboxes/default/bottom.jpg differ diff --git a/resources/textures/skyboxes/default/front.jpg b/resources/textures/skyboxes/default/front.jpg new file mode 100644 index 00000000..4e17b779 Binary files /dev/null and b/resources/textures/skyboxes/default/front.jpg differ diff --git a/resources/textures/skyboxes/default/left.jpg b/resources/textures/skyboxes/default/left.jpg new file mode 100644 index 00000000..5750b91a Binary files /dev/null and b/resources/textures/skyboxes/default/left.jpg differ diff --git a/resources/textures/skyboxes/default/right.jpg b/resources/textures/skyboxes/default/right.jpg new file mode 100644 index 00000000..89630371 Binary files /dev/null and b/resources/textures/skyboxes/default/right.jpg differ diff --git a/resources/textures/skyboxes/default/top.jpg b/resources/textures/skyboxes/default/top.jpg new file mode 100644 index 00000000..4db3c2a3 Binary files /dev/null and b/resources/textures/skyboxes/default/top.jpg differ diff --git a/resources/textures/tissuebox.png b/resources/textures/tissuebox.png new file mode 100644 index 00000000..8eb15e9a Binary files /dev/null and b/resources/textures/tissuebox.png differ diff --git a/resources/textures/transparent-50.png b/resources/textures/transparent-50.png new file mode 100644 index 00000000..daa137f7 Binary files /dev/null and b/resources/textures/transparent-50.png differ diff --git a/resources/textures/transparent-75.png b/resources/textures/transparent-75.png new file mode 100644 index 00000000..8e8504da Binary files /dev/null and b/resources/textures/transparent-75.png differ diff --git a/resources/textures/water.png b/resources/textures/water.png index f411674a..c1d8820a 100644 Binary files a/resources/textures/water.png and b/resources/textures/water.png differ diff --git a/resources/textures/wood.png b/resources/textures/wood.png new file mode 100644 index 00000000..d861e350 Binary files /dev/null and b/resources/textures/wood.png differ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 1dceecde..3ccd17e1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,26 +1,12 @@ -target_sources(${PROJECT_NAME} PRIVATE - main.cpp - +add_library(ReflexEngineSrc NetworkManager.cpp - Model/GameObject/GameObject.hpp - Model/GameObject/Item.cpp - Model/GameObject/Water.cpp - Model/GameObject/Body.cpp - Model/GameObject/BodyRigid.cpp - Model/GameObject/PhysicsObject.cpp - Model/GameObject/ScriptableObject.cpp - Model/GameObject/Player.cpp - Model/GameObject/TerrainObject.cpp - Model/GameObject/SkyboxObject.cpp - Model/GameObject/DirectionalLightObject.cpp - Model/GameObject/PointLightObject.cpp - Model/GameObject/SpotLightObject.cpp + Model/Components/RigidBody.cpp + Model/RunTimeDataStorage/DynamicDataStorage.cpp + Model/RunTimeDataStorage/GlobalDataStorage.cpp Model/LightData.hpp Model/ModelData.cpp - Model/GameObject/Projectile.cpp - Model/GameObject/NetworkedItem.cpp - + View/Renderer/OpenGL/OpenGL.cpp View/Renderer/OpenGL/Objects/Light.cpp View/Renderer/OpenGL/Objects/DirectionalLight.cpp @@ -35,21 +21,36 @@ target_sources(${PROJECT_NAME} PRIVATE View/Renderer/OpenGL/Objects/Skybox.cpp View/Renderer/OpenGL/Objects/Texture.cpp View/Renderer/OpenGL/Objects/Md2Model.cpp + View/Renderer/OpenGL/Objects/ReactMesh.cpp View/guiManager.cpp Controller/ReflexEngine/ReflexEngine.cpp Controller/ReflexEngine/EngineTime.cpp Controller/ReflexEngine/Window.cpp Controller/ReflexEngine/Camera.cpp + Controller/ReflexEngine/SceneManager.cpp + Controller/Affordance/AffordanceHelper.cpp + Controller/Affordance/Affordance.cpp + Controller/Affordance/AffordanceSystem.cpp + Controller/Emotion/Emotion.cpp + Controller/ECS/ECS.cpp + Controller/ECS/Entity.cpp + Controller/ECS/ECSAccess.cpp + Controller/ECS/System.cpp + Controller/ECS/EntitySerializer.cpp Controller/ResourceManager/ResourceManager.cpp Controller/ResourceManager/TextureManager.cpp Controller/ResourceManager/ModelManager.cpp Controller/ResourceManager/Md2ModelManager.cpp Controller/ResourceManager/MaterialManager.cpp + Controller/ResourceManager/LightManager.cpp + Controller/ResourceManager/SkyboxManager.cpp + Controller/ResourceManager/MeshManager.cpp + Controller/ResourceManager/TerrainManager.cpp Controller/ResourceManager/ObjectSaving.cpp + Controller/ResourceManager/RigidbodyManager.cpp Controller/Input/InputManager.cpp Controller/Input/InputState.cpp - Controller/Input/Input.hpp Controller/Audio/Audio.cpp Controller/Audio/AudioStopReceiver.cpp Controller/Pathfinding/AStar.cpp @@ -58,27 +59,36 @@ target_sources(${PROJECT_NAME} PRIVATE Controller/Terrain/BTT.cpp Controller/Terrain/BttController.cpp Controller/Terrain/TexturedTerrain.cpp - Controller/GameAssetFactory.cpp + Controller/ECSGameAssetFactory.cpp Controller/LuaManager.cpp + Controller/MathAccess.cpp Controller/Physics/Physics.cpp - Controller/Physics/BodyRigidPhysics.cpp - Controller/Physics/physicsEntityManager.cpp - Controller/GenericFunctions.cpp - Controller/multiTextureCreator.cpp - - Controller/AI/messageDispatcher.cpp - Model/GameObject/NPC.cpp - Controller/AI/entityManager.cpp + Controller/Physics/EngineResolve.cpp + Controller/Physics/ReactResolve.cpp + Controller/Physics/PhysicBody.cpp + Controller/Physics/CollisionEvent.cpp + Controller/Physics/ColliderRenderer.cpp + Controller/Physics/LoadOBJColliderData.cpp + Controller/Physics/QuaternionHelper.cpp + Controller/Physics/ResolutionOutput.cpp + Controller/Networking/NetworkAccess.cpp + Controller/Terrain/multiTextureCreator.cpp + Controller/RandomGenerators/PseudoRandomNumberGenerator.cpp + Controller/Terrain/TerrainManager.cpp Controller/Pathfinding/movement.cpp Controller/Pathfinding/world.cpp - Controller/AI/luaAccessScriptedFSM.cpp Controller/AI/Counter.cpp Controller/AI/vector2D.cpp + Controller/AI/statemachineComponentHelper.cpp + Controller/GUI/ECSGui.cpp + Controller/GUI/DebugLogger.cpp + Controller/GUI/DebugGUI.cpp + Controller/ReflexEngine/PerformanceLogger.cpp + Controller/GUI/PerformanceLoggerGUI.cpp + Controller/GUI/CollectionsGUI.cpp - - - Game/Scene.hpp - Game/TestScene.cpp + Scene/Scene.hpp + Scene/ECSScene.cpp ) -target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) +target_include_directories(ReflexEngineSrc PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/src/CommonValues.hpp b/src/CommonValues.hpp index c59bdf25..826e5ed7 100644 --- a/src/CommonValues.hpp +++ b/src/CommonValues.hpp @@ -1,4 +1,4 @@ #pragma once -constexpr size_t MAX_POINT_LIGHTS = 8; -constexpr size_t MAX_SPOT_LIGHTS = 8; +constexpr size_t MAX_POINT_LIGHTS = 14; +constexpr size_t MAX_SPOT_LIGHTS = 14; diff --git a/src/Controller/AI/entityManager.cpp b/src/Controller/AI/entityManager.cpp deleted file mode 100644 index b9de1ef2..00000000 --- a/src/Controller/AI/entityManager.cpp +++ /dev/null @@ -1,42 +0,0 @@ -#include "entityManager.h" -#include "Model/singletons.h" - -entityManager::~entityManager() {} - -//------------------------- GetEntityFromID ----------------------------------- -//----------------------------------------------------------------------------- -NPC* entityManager::getEntityFromID(int id) const { - // find the entity - // entityMap::const_iterator ent = entityMap.find(id); - std::map::const_iterator ent = entityMap->find(id); - if (ent == entityMap->end()) { - return nullptr; - } - - return ent->second; -} - -//--------------------------- RemoveEntity ------------------------------------ -//----------------------------------------------------------------------------- -void entityManager::removeEntity(NPC* pEntity) { - entityMap->erase(entityMap->find(pEntity->get_id())); -} - -//---------------------------- RegisterEntity --------------------------------- -//----------------------------------------------------------------------------- -void entityManager::registerEntity(NPC* newEntity) { - entityMap->insert(std::make_pair(newEntity->get_id(), newEntity)); -} - -NPC* entityManager::getEntityByIndex(int index) const { - return entityMap->at(index); -} - -int entityManager::numberOfEntities() { return entityMap->size(); } - -void entityManager::killEntities() { - entityMap->clear(); - idMgr.reset_count(); -} - -void entityManager::killManager() { delete entityMap; } diff --git a/src/Controller/AI/entityManager.h b/src/Controller/AI/entityManager.h deleted file mode 100644 index b667923a..00000000 --- a/src/Controller/AI/entityManager.h +++ /dev/null @@ -1,57 +0,0 @@ -#pragma once - -#include -#include -#include "Model/GameObject/NPC.hpp" - -class entityManager { -private: - /// to facilitate quick lookup the entities are stored in a std::map, in - /// which pointers to entities are cross referenced by their identifying - /// number - std::map* entityMap = new std::map; - -public: - ~entityManager(); - - /** - * @brief Registers a new entity to the entity manager - * @param *NewEntity - the entity to store - */ - void registerEntity(NPC* NewEntity); - - /** - * @brief Returns the entity as given by the id - * @param id - entity identifier (id found in an NPC) - * @param NPC - retrieved NPC - */ - NPC* getEntityFromID(int id) const; - /** - * @brief Removes an entity from the list - * @param pEntity - the entity to remove - */ - void removeEntity(NPC* pEntity); - - /** - * @brief Get sthe entity based on its index (NOT ID) - * @param index - the index of the entity - * @return NPC - retrieved NPC - */ - NPC* getEntityByIndex(int index) const; - - /** - * @brief Gets the number of entites stored - * @return int - the number of entities - */ - int numberOfEntities(); - - /** - * @brief Removes all entitites - */ - void killEntities(); - - /** - * @brief Kills the manager - */ - void killManager(); -}; diff --git a/src/Controller/AI/luaAccessScriptedFSM.cpp b/src/Controller/AI/luaAccessScriptedFSM.cpp deleted file mode 100644 index ee3898cc..00000000 --- a/src/Controller/AI/luaAccessScriptedFSM.cpp +++ /dev/null @@ -1,162 +0,0 @@ -#include "luaAccessScriptedFSM.hpp" - -#include "sol/sol.hpp" -#include "Model/GameObject/NPC.hpp" -#include "Controller/AI/stateMachine.h" -#include "Controller/AI/messageDispatcher.h" -#include "Controller/AI/telegram.h" -#include "Model/ModelData.hpp" -#include "Controller/AI/vector2D.hpp" -#include "Model/singletons.h" -#include "View/Renderer/OpenGL/Objects/Md2.hpp" - -void luaAccessScriptedFSM::registerAllAI() { - registerScriptedStateMachine(); - registerGameObject(); - registerPlayer(); - registerVector2D(); - registerMessage(); - registerWorld(); - registerTelegram(); - registerAnimation::registerModelData(); -} - -void luaAccessScriptedFSM::registerScriptedStateMachine() { - sol::state& lua = LuaManager::get_instance().get_state(); - - sol::usertype> player_type = - lua.new_usertype>("stateMachine"); - - // State variables - player_type["getPreviousState"] = &stateMachine::getPreviousState; - player_type["setPreviousState"] = &stateMachine::setPreviousState; - - player_type["getCurrentState"] = &stateMachine::getCurrentState; - player_type["setCurrentState"] = &stateMachine::setCurrentState; - - player_type["getGlobalState"] = &stateMachine::getGlobalState; - player_type["setGlobalState"] = &stateMachine::setGlobalState; - - // Functions - player_type["changeState"] = &stateMachine::changeState; - player_type["revertStateBack"] = &stateMachine::revertToPreviousState; -} - -void luaAccessScriptedFSM::registerGameObject() { - sol::state& lua = LuaManager::get_instance().get_state(); - - sol::usertype player_type = - lua.new_usertype("entityManager"); - - // player_type["getEntity"] = &entityManager::getEntityFromID; - player_type.set_function("getEntity", &entityManager::getEntityFromID, - entityMgr); -} - -void luaAccessScriptedFSM::registerPlayer() { - sol::state& lua = LuaManager::get_instance().get_state(); - - sol::usertype player_type = lua.new_usertype("player"); - - // Variables - player_type["id"] = sol::property(&NPC::get_id, &NPC::set_id); - player_type["health"] = sol::property(&NPC::get_health, &NPC::set_health); - player_type["power"] = sol::property(&NPC::get_power, &NPC::set_power); - player_type["dead"] = sol::property(&NPC::is_dead, &NPC::kill_npc); - player_type["target_id"] = - sol::property(&NPC::get_target_id, &NPC::set_target_id); - player_type["moveSpeed"] = - sol::property(&NPC::get_move_speed, &NPC::set_move_speed); - - player_type["set_target_position"] = &NPC::set_enemy_target; - player_type["get_target_position"] = &NPC::get_enemy_target; - player_type["faction"] = - sol::property(&NPC::get_faction, &NPC::set_faction); - - player_type["setPos"] = &NPC::set_pos; - player_type["getX"] = &NPC::get_pos_x; - player_type["getY"] = &NPC::get_pos_y; - player_type["getZ"] = &NPC::get_pos_z; - - // Waypoints setting & getting - player_type["numberOfWaypoints"] = &NPC::get_waypoint_count; - player_type["add_waypoint"] = - sol::overload(&NPC::add_waypoint, &NPC::add_waypointGLM); - player_type["add_waypoints"] = &NPC::add_waypoints; - player_type["remove_waypoints"] = &NPC::remove_waypoints; - - // FSM & states - player_type["newState"] = &NPC::new_state; - player_type["getFSM"] = &NPC::get_FSM; - - // Processing - player_type["followWaypoint"] = &NPC::waypoint_follow; - player_type["moveNPC"] = &NPC::move_NPC; - player_type["watchForEnemy"] = - sol::overload(&NPC::watch_for_enemy, &NPC::watch_for_enemyVal); - player_type["moveToEnemy"] = &NPC::move_to_enemy; - player_type["pathfindToPoint"] = &NPC::use_pathfinding; - - player_type["sendMessage"] = &NPC::send_message; - player_type["sendGroupMessage"] = &NPC::send_group_message; - - player_type["stopMovement"] = &NPC::freezeNPC; - - player_type["getAnimation"] = &NPC::get_animation; -} - -void luaAccessScriptedFSM::registerVector2D() { - sol::state& lua = LuaManager::get_instance().get_state(); - - sol::usertype player_type = - lua.new_usertype("vector2D"); - player_type["set"] = &vector2D::set; - player_type["x"] = sol::property(&vector2D::getX, &vector2D::setX); - player_type["y"] = sol::property(&vector2D::getY, &vector2D::setY); - - player_type["normalise"] = &vector2D::normalise; - player_type["length"] = &vector2D::length; -} - -void luaAccessScriptedFSM::registerMessage() { - sol::state& lua = LuaManager::get_instance().get_state(); - - sol::usertype player_type = - lua.new_usertype("messageDispatcher"); - - player_type["dispatchMsg"] = &messageDispatcher::dispatchMsg; -} - -void luaAccessScriptedFSM::registerWorld() {} - -void luaAccessScriptedFSM::registerTelegram() { - sol::state& lua = LuaManager::get_instance().get_state(); - - sol::usertype player_type = - lua.new_usertype("telegram"); - - player_type["sender"] = &telegram::sender; - player_type["reciever"] = &telegram::receiver; - player_type["msg"] = &telegram::msg; - player_type["disptachTime"] = &telegram::dispatchTime; - player_type["extraInfo"] = &telegram::extraInfo; -} - -void registerAnimation::registerModelData() { - sol::state& lua = LuaManager::get_instance().get_state(); - - sol::usertype player_type = - lua.new_usertype("animation"); - - player_type["isRunning"] = &ModelData::get_is_running; - player_type["setFPS"] = &ModelData::set_fps; - player_type["setAnimation"] = &ModelData::set_animation; - player_type["shouldLoop"] = &ModelData::set_loop; - player_type["shouldAnimate"] = &ModelData::set_is_animated; - - lua.new_enum("animation_types", "run", md2::animation_type::CROUCH_STAND, - "attack", md2::animation_type::FALLBACK, "stand", - md2::animation_type::STAND, "death", - md2::animation_type::DEATH_FALLBACK, "pain", - md2::animation_type::PAIN_A); -} diff --git a/src/Controller/AI/luaAccessScriptedFSM.hpp b/src/Controller/AI/luaAccessScriptedFSM.hpp deleted file mode 100644 index 58ccc0da..00000000 --- a/src/Controller/AI/luaAccessScriptedFSM.hpp +++ /dev/null @@ -1,52 +0,0 @@ -#pragma once - -namespace luaAccessScriptedFSM { -/* - * @brief registers All AI to lua. Only need to call this as it will call the - * rest - */ -void registerAllAI(); - -/* - * @brief registers StateMachine to lua - */ -void registerScriptedStateMachine(); - -/* - * @brief registers GameObject to lua - */ -void registerGameObject(); - -/* - * @brief registers Player (NPC) to lua - */ -void registerPlayer(); - -/* - * @brief registers Vector2D (glm::vec2) to lua - */ -void registerVector2D(); - -/* - * @brief registers Message to lua - */ -void registerMessage(); - -/* - * @brief registers World to lua - */ -void registerWorld(); - -/* - * @brief registers Telegram to lua - */ -void registerTelegram(); - -} // namespace luaAccessScriptedFSM - -namespace registerAnimation { -/* - * @brief registers ModelData to lua - */ -void registerModelData(); -} // namespace registerAnimation diff --git a/src/Controller/AI/messageDispatcher.cpp b/src/Controller/AI/messageDispatcher.cpp deleted file mode 100644 index 8e352a7f..00000000 --- a/src/Controller/AI/messageDispatcher.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include "MessageDispatcher.h" -#include "Model/singletons.h" -#include "Model/GameObject/NPC.hpp" - -using std::set; - -//----------------------------- Dispatch --------------------------------- -// -// see description in header -//------------------------------------------------------------------------ -void messageDispatcher::discharge(NPC* pReceiver, const telegram& msg) { - if (!pReceiver->handleMessage(msg)) { - std::cerr << "Message not handled" << std::endl; - } -} - -//---------------------------- DispatchMsg --------------------------- -// -// given a message, a receiver, a sender and any time delay, this function -// routes the message to the correct agent (if no delay) or stores -// in the message queue to be dispatched at the correct time -//------------------------------------------------------------------------ -void messageDispatcher::dispatchMsg(double delay, int sender, int receiver, - int msg, sol::object additionalInfo) { - // get a pointer to the receiver - NPC* pReceiver = entityMgr.getEntityFromID(receiver); - // make sure the receiver is valid - if (pReceiver == NULL) { - std::cerr << "\nWarning! No Receiver with ID of " << receiver - << " found" << std::endl; - return; - } - // create the telegram - telegram message(0, sender, receiver, msg, additionalInfo); - // if there is no delay, route telegram immediately - if (delay <= 0.0) { // send the telegram to the recipient - discharge(pReceiver, message); - } else { // else calculate the time when the telegram should be dispatched - double currentTime = EngineTime::get_time_unpaused(); - message.dispatchTime = currentTime + delay; - // and put it in the queue - PriorityQ.insert(message); - } -} - -//---------------------- DispatchDelayedMessages ------------------------- -// -// This function dispatches any telegrams with a timestamp that has -// expired. Any dispatched telegrams are removed from the queue -//------------------------------------------------------------------------ -void messageDispatcher::dispatchDelayedMessages() { - // get current time - double currentTime = EngineTime::get_time_unpaused(); - // now peek at the queue to see if any telegrams need dispatching. - // remove all telegrams from the front of the queue that have gone - // past their sell by date - while (!PriorityQ.empty() && - (PriorityQ.begin()->dispatchTime < currentTime) && - (PriorityQ.begin()->dispatchTime > 0)) { - // read the telegram from the front of the queue - const telegram& message = *PriorityQ.begin(); - // find the recipient - NPC* pReceiver = entityMgr.getEntityFromID(message.receiver); - // send the telegram to the recipient - discharge(pReceiver, message); - // remove it from the queue - PriorityQ.erase(PriorityQ.begin()); - } -} diff --git a/src/Controller/AI/messageDispatcher.h b/src/Controller/AI/messageDispatcher.h deleted file mode 100644 index 6046be76..00000000 --- a/src/Controller/AI/messageDispatcher.h +++ /dev/null @@ -1,52 +0,0 @@ -#pragma once - -#include -#include -#include "Controller/ReflexEngine/EngineTime.hpp" -#include "telegram.h" - -class NPC; - -// to make code easier to read -const double SEND_MSG_IMMEDIATELY = 0.0; -const int NO_ADDITIONAL_INFO = 0; -const int SENDER_ID_IRRELEVANT = -1; - -class messageDispatcher { -private: - /// a std::set is used as the container for the delayed messages - /// because of the benefit of automatic sorting and avoidance - /// of duplicates. Messages are sorted by their dispatch time. - std::set PriorityQ; - - // this method is utilized by DispatchMsg or DispatchDelayedMessages. - // This method calls the message handling member function of the receiving - // entity, pReceiver, with the newly created telegram - /* - * @brief This method calls the message handling member function of the - * receiving entity, pReceiver, with the newly created telegram - * @param pReciever - The reciever of the message - * @paraqm msg - The message to send - */ - void discharge(NPC* pReceiver, const telegram& msg); - -public: - /** - * @breif Send a message to anther agent. Recieving agent is referenced by - * ID - * @param delay - The dealy on the message before it should be sent - * @param sender - The id of the send of the message - * @param reciever - The id of the receiver of the message - * @param msg - The message contents - * @param extraInfo - Extra information of the message - * - */ - void dispatchMsg(double delay, int sender, int receiver, int msg, - sol::object extraInfo); - - /** - * @brief Send out any delayed messages. This method is calledeach time - * through the main game loop - */ - void dispatchDelayedMessages(); -}; diff --git a/src/Controller/AI/statemachineComponentHelper.cpp b/src/Controller/AI/statemachineComponentHelper.cpp new file mode 100644 index 00000000..eafbd959 --- /dev/null +++ b/src/Controller/AI/statemachineComponentHelper.cpp @@ -0,0 +1,294 @@ +#include "statemachineComponentHelper.hpp" + +#include + +#include "Model/Components/Statemachine.hpp" +#include "Model/Components/Transform.hpp" +#include "Model/Components/Terrain.hpp" +#include "Model/singletons.h" + +#include "Controller/ResourceManager/ResourceManager.hpp" +#include "Controller/AI/telegram.h" +#include "Controller/ReflexEngine/EngineTime.hpp" + +#include + +void statemachineComponentHelper::change_state(ECS& ecs, Reflex::Entity& entity, + std::string new_state) { + auto& lua = LuaManager::get_instance().get_state(); + sol::function exe; + + Component::Statemachine& stateMachine = + entity.get_component(); + stateMachine.previous_state = stateMachine.current_state; + stateMachine.current_state = new_state; + + exe = lua[stateMachine.previous_state]["exit"]; + exe(ecs, entity); + + exe = lua[stateMachine.current_state]["enter"]; + exe(ecs, entity); +} + +void statemachineComponentHelper::send_message(ECS& ecs, Reflex::Entity& entity, + int reciever, int msg, + sol::table extraInfo) { + auto view = ecs.get_registry().view(); + + for (auto entityTwo : view) { + Component::Statemachine& statemachine = + view.get(entityTwo); + + if (statemachine.unique_statemachine_identifier != reciever) { + continue; + } + + auto& lua = LuaManager::get_instance().get_state(); + sol::function exe; + + telegram message(0, + entity.get_component() + .unique_statemachine_identifier, + reciever, msg, extraInfo); + statemachine.current_state; + + exe = lua[statemachine.current_state]["onMessage"]; + exe(ecs, statemachine.entity, message); + + break; + } +} + +void statemachineComponentHelper::send_area_message(ECS& ecs, + Reflex::Entity& entity, + float range, int msg, + sol::table extraInfo) { + auto view = ecs.get_registry() + .view(); + + Component::Transform& transSender = + entity.get_component(); + Component::Statemachine& statemachineSender = + entity.get_component(); + + for (auto entityTwo : view) { + Component::Transform transTarget = + view.get(entityTwo); + + float distance = + glm::length(transTarget.position - transSender.position); + + // Needs to be in range + if (distance > range) { + continue; + } + + Component::Statemachine& statemachine = + view.get(entityTwo); + + // So doesn't send message to itself + if (statemachineSender.unique_statemachine_identifier == + statemachine.unique_statemachine_identifier) { + continue; + } + + // Sends the message + auto& lua = LuaManager::get_instance().get_state(); + sol::function exe; + + telegram message(0, + entity.get_component() + .unique_statemachine_identifier, + statemachine.unique_statemachine_identifier, msg, + extraInfo); + statemachine.current_state; + + exe = lua[statemachine.current_state]["onMessage"]; + exe(ecs, statemachine.entity, message); + } +} + +void statemachineComponentHelper::look_for_enemy(ECS& ecs, + Reflex::Entity& entity, + float arc, float distance) { + auto& registry = ecs.get_registry(); + + auto view = registry.view(); + + Component::Statemachine& own_statemachine = + entity.get_component(); + glm::vec3 own_pos = entity.get_component().position; + glm::vec3 look_at; + + look_at = entity.get_component().rotation * + glm::vec3(0, 0, -1); + + glm::vec3 target_pos; + float arc_angle = 0; + int target_id = 0; + + std::vector possible_enemy_ids; + + for (auto& entityTwo : view) { + target_pos = view.get(entityTwo).position; + + if (glm::length(target_pos - own_pos) > distance) { + continue; + } + + target_pos = target_pos - own_pos; + // dot product / (mag of both) + arc_angle = (look_at.x * target_pos.x + look_at.z * target_pos.z) / + (glm::length(glm::vec2(look_at.x, look_at.z)) * + glm::length(glm::vec2(target_pos.x, target_pos.z))); + arc_angle = acos(arc_angle) * (180 / 3.141); + if (arc_angle > (arc / 2)) { + continue; + } + + target_id = view.get(entityTwo) + .unique_statemachine_identifier; + + if (target_id == own_statemachine.unique_statemachine_identifier) { + continue; + } + + possible_enemy_ids.push_back(target_id); + } + + own_statemachine.lua_variables["possible_enemy_ids"] = possible_enemy_ids; + own_statemachine.lua_variables["number_of_enemy_ids"] = + possible_enemy_ids.size(); +} + +void statemachineComponentHelper::generate_waypoints( + ECS& ecs, Reflex::Entity& entity, glm::vec3 currentPos, glm::vec3 targetPos, + std::string terrain_to_pathfind) { + /* + glm::vec2 start = glm::vec2(currentPos.x, currentPos.z); + glm::vec2 end = glm::vec2(targetPos.x, targetPos.z); + + // Convert points to be in relation to terrain + auto& view = + ecs.get_registry().view(); + Component::Terrain terrain_component; + bool found = false; + Component::Transform& transform_component = + entity.get_component(); + + for (auto& entityTwo : view) { + terrain_component = view.get(entityTwo); + + if (terrain_to_pathfind._Equal(terrain_component.terrain_name)) { + found = true; + transform_component = view.get(entityTwo); + break; + } + } + + if (!found) { + return; + } + + TexturedTerrain& tt = + ResourceManager::get_instance().get_terrain_manager().get_terrain( + terrain_to_pathfind); + + glm::vec3 terrain_offset = transform_component.position; + terrain_offset.x = terrain_offset.x - (tt.get_length() / 2 - 1); + terrain_offset.z = terrain_offset.z - (tt.get_length() / 2 - 1); + + // terrain_offset.x = terrain_offset.x * transform_component.scale.x; + // terrain_offset.z = terrain_offset.z * transform_component.scale.z; + + std::cout << terrain_offset.x << " : " << terrain_offset.y << " : " + << terrain_offset.z << std::endl; + + start = start - glm::vec2(terrain_offset.x, terrain_offset.z); + end = end - glm::vec2(terrain_offset.x, terrain_offset.z); + + std::cout << start.x << " : " << start.y << " vs " << end.x << " : " + << end.y << std::endl; + // Pathfind + std::queue points = + gameWorlds.at(terrain_to_pathfind) + .pathFinding(start.x, start.y, end.x, end.y); + + std::vector vec_points; + glm::vec2 point; + while (!points.empty()) { + point = points.front(); + points.pop(); + + vec_points.push_back(glm::vec3(point.x + terrain_offset.x, 0, + point.y + terrain_offset.z)); + } + + // Provide results to lua + Component::Statemachine& own_statemachine = + entity.get_component(); + + own_statemachine.lua_variables["waypoints"] = vec_points; + own_statemachine.lua_variables["number_of_waypoints"] = vec_points.size(); + own_statemachine.lua_variables["current_number"] = 1; + */ +} + +void statemachineComponentHelper::follow_generated_waypoints( + Reflex::Entity& entity, bool use_physics_movement, float speed, + std::string terrain_name) { + if (use_physics_movement) { + use_physics_movement = + false; // entity.any_component(); + } + + Component::Statemachine& states = + entity.get_component(); + glm::vec3 target = glm::vec3(0, 0, 0); + + int current_number = states.lua_variables["current_number"]; + target = states.lua_variables["waypoints"][current_number]; + + if (use_physics_movement) { + follow_waypoint(entity, target, speed, terrain_name); + } else { + follow_waypoint_physics(entity, target, speed); + } + + int num = states.lua_variables["number_of_waypoints"]; + if (current_number < num) { + states.lua_variables["current_number"] = (++current_number); + } +} + +void statemachineComponentHelper::follow_waypoint(Reflex::Entity& entity, + glm::vec3 targetPos, + float speed, + std::string terrain_name) { + Component::Transform& trans = entity.get_component(); + glm::vec3 currentPos = trans.position; + + glm::vec3 directionalVector = targetPos - currentPos; + float directionalMagnitude = glm::length(directionalVector); + + float movement = (speed * EngineTime::get_delta_time()); + if (directionalMagnitude < movement) { + trans.position = targetPos; + } else { + trans.position = trans.position + + (directionalVector / directionalMagnitude) * movement; + } + + if (!terrain_name.empty()) { + trans.position.y = + ResourceManager::get_instance() + .get_terrain_manager() + .get_terrain(terrain_name) + .get_height_world(trans.position.x, trans.position.z); + } +} + +void statemachineComponentHelper::follow_waypoint_physics( + Reflex::Entity& entity, glm::vec3 targetPos, float speed) { + // Needs to be implemented when physics is implemented +} diff --git a/src/Controller/AI/statemachineComponentHelper.hpp b/src/Controller/AI/statemachineComponentHelper.hpp new file mode 100644 index 00000000..26cfd720 --- /dev/null +++ b/src/Controller/AI/statemachineComponentHelper.hpp @@ -0,0 +1,116 @@ +#pragma once + +#include "Controller/ECS/Entity.hpp" + +#include +#include +#include + +/** + * @author Daniel Rodic + * @brief Assists the statemachine component apart of the ECS by providing some + * basic functionality for entities + * + */ +namespace statemachineComponentHelper { +/** + * @brief Changes the state of the statemachine. Calls relevant entry & exit + * methods + * + * @param &ecs - The ecs + * @param &entity - The entity + * @param new_state - The state you want to change too + */ +void change_state(ECS& ecs, Reflex::Entity& entity, std::string new_state); + +/** + * @brief Sends a message to a directed target (entity) with a statemachine + * + * @param &ecs - The ecs + * @param &entity - The entity + * @param reciever - The id of the recieve (id of statemachine) + * @param msg - The message you want to send + * @param extraInfo - sol table of extra info to send + */ +void send_message(ECS& ecs, Reflex::Entity& entity, int reciever, int msg, + sol::table extraInfo); + +/** + * @brief Same as send_message except sends an area message to any entity in + * the designated area + * + * @param &ecs - The ecs + * @param &entity - The entity + * @param range - How close another entity should be to recieve a + * message + * @param msg - The message you want to send + * @param extraInfo - sol table of extra info to send + */ +void send_area_message(ECS& ecs, Reflex::Entity& entity, float range, int msg, + sol::table extraInfo); + +/** + * @brief Looks for an enemy within arc & range, will add to the sol table + * variables, such as info about the target if it spots one (e.g., target_id) + * + * @param &ecs - The ecs + * @param &entity - The entity + * @param arc - The arc of the view + * @param distance - How far infront from transfrom it can see + */ +void look_for_enemy(ECS& ecs, Reflex::Entity& entity, float arc, + float distance); + +/** + * @brief Uses pathfinding technique (aStar) to generate waypoints. These are + * stored in the statemachines sol table. (TOO BE COMPLETED) + * + * @param &ecs - The ecs + * @param &entity - The entity + * @param currentPos - Current position to generate the waypoints + * from + * @param targetPos - Target position which is the destination + * @param terrain_to_pathfind - The name of the terrain which you want to + * pathfind across + */ +void generate_waypoints(ECS& ecs, Reflex::Entity& entity, glm::vec3 currentPos, + glm::vec3 targetPos, std::string terrain_to_pathfind); + +/** + * @brief Follows a generated waypoint from a pathfinding algorithm (UNTESTED) + * + * @param &entity - The entity + * @param use_physics_movement - If it should add velocity compared to just + * setting the position + * @param speed - The speed of movement + * @param terrain_name - The name of the terrain (if you want to set height + * (not available with physics movement (implement yourself))) + */ +void follow_generated_waypoints(Reflex::Entity& entity, + bool use_physics_movement, float speed, + std::string terrain_name); + +/** + * @brief Follows a waypoint by setting the transform + * + * @param &entity - The entity + * @param targetPos - The target position you are heading too + * @param speed - The speed of movement + * @param terrain_name - The name of the terrain (if you want to set height) + * position to terrain (can leave empty) + */ +void follow_waypoint(Reflex::Entity& entity, glm::vec3 targetPos, float speed, + std::string terrain_name); + +/** + * @brief Follows a waypoint by setting the transform. Only sets velocity of + * physics component (NEEDS TO BE IMPLEMENTED WHEN PHYSICS COMPONENT COMPLETED) + * + * @param &entity - The entity + * @param targetPos - The target position you are heading too + * @param speed - The speed of movement + */ +void follow_waypoint_physics(Reflex::Entity& entity, glm::vec3 targetPos, + float speed); + +} // namespace statemachineComponentHelper diff --git a/src/Controller/AI/telegram.h b/src/Controller/AI/telegram.h index 74a44b7c..a8c756b6 100644 --- a/src/Controller/AI/telegram.h +++ b/src/Controller/AI/telegram.h @@ -31,7 +31,7 @@ struct telegram { double dispatchTime; /// any additional information that may accompany the message - sol::object extraInfo; + sol::table extraInfo; /** * @brief Default constructor @@ -46,7 +46,7 @@ struct telegram { * @param msg - The message to send * @param info - The sol::object to send as extra information */ - telegram(double time, int sender, int receiver, int msg, sol::object info) + telegram(double time, int sender, int receiver, int msg, sol::table info) : dispatchTime(time), sender(sender), receiver(receiver), diff --git a/src/Controller/Affordance/Affordance.cpp b/src/Controller/Affordance/Affordance.cpp new file mode 100644 index 00000000..68fcb892 --- /dev/null +++ b/src/Controller/Affordance/Affordance.cpp @@ -0,0 +1,60 @@ +#include "Affordance.hpp" + +#include + +using namespace Affordance; + +AffordanceNode::AffordanceNode(std::string name, Properties properties) + : name_(std::move(name)), properties_(std::move(properties)) {} + +auto AffordanceNode::is_composite() const -> bool { return false; } + +auto AffordanceNode::get_name() -> const std::string& { return name_; } + +auto AffordanceNode::get_properties() -> const Properties& { + return properties_; +} + +auto AffordanceNode::set_name(const std::string& name) -> void { name_ = name; } + +auto AffordanceNode::set_properties(const Properties& properties) -> void { + properties_ = properties; +} + +AffordanceLeaf::AffordanceLeaf(std::string name, Properties properties, + sol::function function) + : AffordanceNode(std::move(name), std::move(properties)), + function_(std::move(function)) {} + +auto AffordanceLeaf::is_composite() const -> bool { return false; } + +auto AffordanceLeaf::get_function() const -> const sol::function& { + return function_; +} + +auto AffordanceLeaf::set_function(const sol::function& function) -> void { + function_ = function; +} + +AffordanceComposite::AffordanceComposite(std::string name, + Properties properties, + std::vector affordances) + : AffordanceNode(std::move(name), std::move(properties)), + affordances_(std::move(affordances)) {} + +auto AffordanceComposite::is_composite() const -> bool { return true; } + +auto AffordanceComposite::add_affordance(AffordancePtr affordance) -> void { + affordances_.push_back(std::move(affordance)); +} + +auto AffordanceComposite::remove_affordance(const AffordancePtr& affordance) + -> void { + affordances_.erase( + std::remove(affordances_.begin(), affordances_.end(), affordance), + affordances_.end()); +} + +auto AffordanceComposite::get_affordances() -> std::vector& { + return affordances_; +} diff --git a/src/Controller/Affordance/Affordance.hpp b/src/Controller/Affordance/Affordance.hpp new file mode 100644 index 00000000..6eef7ef8 --- /dev/null +++ b/src/Controller/Affordance/Affordance.hpp @@ -0,0 +1,155 @@ +#pragma once + +#include +#include + +#include + +namespace Affordance { +using Properties = std::unordered_set; +using PropertiesWeight = std::unordered_map; +using AffordancePtr = std::shared_ptr; + +/** + * @author Andrew Ho + * @class AffordanceNode + * @brief An affordance is a base composite class that can be used to create a + * hierarchy of affordances. It is used to represent the properties of an + * object. + */ +class AffordanceNode { +public: + AffordanceNode() = default; + AffordanceNode(const AffordanceNode& other) = default; + AffordanceNode(AffordanceNode&& other) noexcept = default; + AffordanceNode& operator=(const AffordanceNode& other) = default; + AffordanceNode& operator=(AffordanceNode&& other) noexcept = default; + virtual ~AffordanceNode() = default; + + AffordanceNode(std::string name, Properties properties); + + /** + * @brief Returns whether the affordance is a composite and has children. + * + * @return true The affordance is a composite. + * @return false The affordance is not a composite. + */ + virtual auto is_composite() const -> bool; + + /** + * @brief Get the name of the affordance. + * + * @return const std::string& + */ + auto get_name() -> const std::string&; + + /** + * @brief Get the properties of the affordance. + * + * @return const Properties& + */ + auto get_properties() -> const Properties&; + + /** + * @brief Set the name. + * + * @param name The name of the affordance. + */ + auto set_name(const std::string& name) -> void; + + /** + * @brief Set the properties. + * + * @param properties The properties of the affordance. + */ + auto set_properties(const Properties& properties) -> void; + +private: + /// The name of the affordance. + std::string name_; + /// The properties of the affordance. + Properties properties_; +}; + +/** + * @author Andrew Ho + * @class AffordanceLeaf + * @brief An affordance leaf is a leaf node in the composite pattern. It + * contains the affordance action of an object. + */ +class AffordanceLeaf : public AffordanceNode { +public: + AffordanceLeaf() = default; + AffordanceLeaf(std::string name, Properties properties, + sol::function function); + + /** + * @brief Returns false because the affordance leaf is not a composite. + * + * @return false + */ + auto is_composite() const -> bool override; + + /** + * @brief Get the action function of the affordance. + * + * @return const sol::function& + */ + auto get_function() const -> const sol::function&; + + /** + * @brief Set the action function of the affordance. + * + * @param function The action function of the affordance. + */ + auto set_function(const sol::function& function) -> void; + +private: + /// The action function in Lua of the affordance. + sol::function function_; +}; + +/** + * @author Andrew Ho + * @class AffordanceComposite + * @brief An affordance composite is a composite node in the composite pattern. + * It contains a collection of affordances. + */ +class AffordanceComposite : public AffordanceNode { +public: + AffordanceComposite() = default; + AffordanceComposite(std::string name, Properties properties, + std::vector affordances); + + /** + * @brief Returns true because the affordance composite is a composite. + * + * @return true + */ + auto is_composite() const -> bool override; + + /** + * @brief Add a child affordance to the composite. + * + * @param affordance The child affordance to add. + */ + auto add_affordance(AffordancePtr affordance) -> void; + + /** + * @brief Remove a child affordance from the composite. + * + * @param affordance The child affordance to remove. + */ + auto remove_affordance(const AffordancePtr& affordance) -> void; + + /** + * @brief Get the children of the composite. + */ + auto get_affordances() -> std::vector&; + +private: + /// The collection of child affordances. + std::vector affordances_; +}; + +}; // namespace Affordance diff --git a/src/Controller/Affordance/AffordanceHelper.cpp b/src/Controller/Affordance/AffordanceHelper.cpp new file mode 100644 index 00000000..6caaa20b --- /dev/null +++ b/src/Controller/Affordance/AffordanceHelper.cpp @@ -0,0 +1,44 @@ +#include "AffordanceHelper.hpp" + +auto Affordance::find_affordance(const AffordancePtr& affordances, + const Properties& properties, + const PropertiesWeight& properties_weight) + -> AffordancePtr { + auto best_affordance = affordances; + + while (best_affordance->is_composite()) { + auto affordance_composite = + std::dynamic_pointer_cast(best_affordance); + auto best_affordance_score = 0.0F; + + auto child_affordances = affordance_composite->get_affordances(); + if (child_affordances.empty()) { + break; + } + + for (const auto& child : child_affordances) { + auto score = 0.0F; + + // Calculate the score of the child. + for (const auto& child_property : child->get_properties()) { + if (properties.find(child_property) != properties.end()) { + // Use the weight of the property if it exists, otherwise 1. + if (properties_weight.find(child_property) != + properties_weight.end()) { + score += properties_weight.at(child_property); + } else { + score += 1.0F; + } + } + } + + // If the score is better than the current best, set the best. + if (score > best_affordance_score) { + best_affordance = child; + best_affordance_score = score; + } + } + } + + return best_affordance; +} diff --git a/src/Controller/Affordance/AffordanceHelper.hpp b/src/Controller/Affordance/AffordanceHelper.hpp new file mode 100644 index 00000000..8387ad43 --- /dev/null +++ b/src/Controller/Affordance/AffordanceHelper.hpp @@ -0,0 +1,21 @@ +#pragma once + +#include "Affordance.hpp" + +namespace Affordance { +/** + * @brief Find the best affordance from a list of affordances. + * Determines the best affordance by comparing the properties of the affordances + * with the given properties. The properties are weighted by the given weight, + * if it is not given, the weight is 1. + * + * @param affordances The list of affordances to search. + * @param properties The properties to search for. + * @param properties_weight The weight of each property. + * @return AffordancePtr The best affordance + */ +auto find_affordance(const AffordancePtr& affordances, + const Properties& properties, + const PropertiesWeight& properties_weight) + -> AffordancePtr; +}; // namespace Affordance \ No newline at end of file diff --git a/src/Controller/Affordance/AffordanceSystem.cpp b/src/Controller/Affordance/AffordanceSystem.cpp new file mode 100644 index 00000000..4361a7a4 --- /dev/null +++ b/src/Controller/Affordance/AffordanceSystem.cpp @@ -0,0 +1,71 @@ +#include "AffordanceSystem.hpp" + +#include "Controller/LuaManager.hpp" + +using namespace Affordance; + +SOL_BASE_CLASSES(AffordanceLeaf, AffordanceNode); +SOL_BASE_CLASSES(AffordanceComposite, AffordanceNode); +SOL_DERIVED_CLASSES(AffordanceNode, AffordanceLeaf, AffordanceComposite); + +auto AffordanceSystem::get_instance() -> AffordanceSystem& { + static AffordanceSystem instance; + return instance; +} + +auto AffordanceSystem::lua_access() -> void { + auto& lua = LuaManager::get_instance().get_state(); + + auto affordance_system = lua.create_named_table("AffordanceSystem"); + + affordance_system.set_function("set_affordance", + &AffordanceSystem::set_affordance, this); + affordance_system.set_function("get_affordance", + &AffordanceSystem::get_affordance, this); + + auto affordance_node_type = + lua.new_usertype("AffordanceNode", sol::no_constructor); + affordance_node_type["name"] = + sol::property(&AffordanceNode::get_name, &AffordanceNode::set_name); + affordance_node_type["properties"] = sol::property( + &AffordanceNode::get_properties, &AffordanceNode::set_properties); + + auto affordance_leaf_type = lua.new_usertype( + "AffordanceLeaf", + sol::factories([](const std::string& name, + const sol::as_table_t& properties, + const sol::function& function) { + return std::make_shared(name, properties.value(), + function); + }), + sol::base_classes, sol::bases()); + affordance_leaf_type["function"] = sol::property( + &AffordanceLeaf::get_function, &AffordanceLeaf::set_function); + + auto affordance_composite_type = lua.new_usertype( + "AffordanceComposite", + sol::factories( + [](const std::string& name, + const sol::as_table_t& properties, + const sol::as_table_t>& affordances) { + return std::make_shared( + name, properties.value(), affordances.value()); + }), + sol::base_classes, sol::bases()); + affordance_composite_type.set_function( + "add_affordance", &AffordanceComposite::add_affordance); + affordance_composite_type.set_function( + "remove_affordance", &AffordanceComposite::remove_affordance); +} + +auto AffordanceSystem::set_affordance(std::string object, + AffordancePtr affordance) -> void { + affordance_map_.insert_or_assign(std::move(object), std::move(affordance)); +} + +auto AffordanceSystem::get_affordance(const std::string& object) + -> AffordancePtr { + return affordance_map_.at(object); +} + +auto AffordanceSystem::clear_affordances() -> void { affordance_map_.clear(); } diff --git a/src/Controller/Affordance/AffordanceSystem.hpp b/src/Controller/Affordance/AffordanceSystem.hpp new file mode 100644 index 00000000..51849fd0 --- /dev/null +++ b/src/Controller/Affordance/AffordanceSystem.hpp @@ -0,0 +1,57 @@ +#pragma once + +#include + +#include "Affordance.hpp" + +namespace Affordance { +using AffordanceMap = std::unordered_map; + +/** + * @class AffordanceSystem + * @brief The AffordanceSystem class is a singleton class that contains all the + * affordances that can be applied onto an object. + */ +class AffordanceSystem { +public: + /** + * @brief Get the instance of the AffordanceSystem. + * + * @return AffordanceSystem& + */ + static auto get_instance() -> AffordanceSystem&; + + /** + * @brief Expose the AffordanceSystem and the Affordance classes to Lua. + */ + auto lua_access() -> void; + + /** + * @brief Set an object to an affordance composite in the system. + * + * @param object The name of the object to associate the affordances to + * @param affordance The affordances + */ + auto set_affordance(std::string object, AffordancePtr affordance) -> void; + + /** + * @brief Get the affordance composite associated with the object. + * + * @param object + * @return AffordancePtr The affordance composite + */ + auto get_affordance(const std::string& object) -> AffordancePtr; + + /** + * @brief Clear the affordance system. Used when the simulation is exited. + */ + auto clear_affordances() -> void; + +private: + AffordanceSystem() = default; + + /// The map of affordances, associating between an object and its + /// affordances + AffordanceMap affordance_map_; +}; +} // namespace Affordance diff --git a/src/Controller/Audio/Audio.cpp b/src/Controller/Audio/Audio.cpp index 6a1593dd..7f5b1eb7 100644 --- a/src/Controller/Audio/Audio.cpp +++ b/src/Controller/Audio/Audio.cpp @@ -44,8 +44,6 @@ void Audio::play_3d_sound(const std::string& name, const irrklang::vec3df& pos, sound->setIsPaused(false); add_sound(name, sound); - - std::cout << "Playing 3d sound: " << name << std::endl; } } } diff --git a/src/Controller/ECS/ECS.cpp b/src/Controller/ECS/ECS.cpp new file mode 100644 index 00000000..882f18f6 --- /dev/null +++ b/src/Controller/ECS/ECS.cpp @@ -0,0 +1,107 @@ +#include "ECS.hpp" + +#include "Entity.hpp" +#include "System.hpp" + +#include "Model/Components/Script.hpp" +#include "Model/Components/Light.hpp" +#include "Model/Components/Md2Animation.hpp" +#include "Model/Components/RigidBody.hpp" +#include "Controller/ReflexEngine/PerformanceLogger.hpp" + +using namespace Reflex; + +ECS::ECS() { + registry_.on_construct().connect<&System::init_script>(); + registry_.on_construct() + .connect<&System::init_directional_light>(); + registry_.on_construct() + .connect<&System::init_point_light>(); + registry_.on_construct() + .connect<&System::init_spot_light>(); + registry_.on_construct() + .connect<&System::init_md2_animation>(); + registry_.on_construct() + .connect<&System::init_rigidbody>(); + + registry_.on_update().connect<&System::init_script>(); + registry_.on_update() + .connect<&System::init_md2_animation>(); + registry_.on_update() + .connect<&System::update_rigidbody>(); + + registry_.on_destroy() + .connect<&System::delete_directional_light>(); + registry_.on_destroy() + .connect<&System::delete_point_light>(); + registry_.on_destroy() + .connect<&System::delete_spot_light>(); + registry_.on_destroy() + .connect<&System::delete_rigidbody>(); +} + +Entity& ECS::create_entity(const std::string& name) { + entt::entity entity_id = registry_.create(); + + std::cout << "Name: " << name << std::endl; + return *(entities_[entity_id] = + std::make_shared(name, entity_id, this)); +} + +void ECS::update(double delta_time) { + PERFORMANCE_LOGGER_PUSH("Script"); + System::update_script(registry_); + PERFORMANCE_LOGGER_POP(); + PERFORMANCE_LOGGER_PUSH("Directional light"); + System::update_directional_light(registry_); + PERFORMANCE_LOGGER_POP(); + PERFORMANCE_LOGGER_PUSH("Point light"); + System::update_point_light(registry_); + PERFORMANCE_LOGGER_POP(); + PERFORMANCE_LOGGER_PUSH("Spot light"); + System::update_spot_light(registry_); + PERFORMANCE_LOGGER_POP(); + PERFORMANCE_LOGGER_PUSH("md2"); + System::update_md2(registry_); + PERFORMANCE_LOGGER_POP(); + PERFORMANCE_LOGGER_PUSH("Statemachine"); + System::update_statemachine(*this); + PERFORMANCE_LOGGER_POP(); +} + +void ECS::fixed_update(double delta_time) { + System::update_rigidbody(registry_); +} + +void ECS::draw() { + PERFORMANCE_LOGGER_PUSH("terrain"); + System::draw_terrain(registry_); + PERFORMANCE_LOGGER_POP(); + PERFORMANCE_LOGGER_PUSH("model"); + System::draw_model(registry_); + PERFORMANCE_LOGGER_POP(); + PERFORMANCE_LOGGER_PUSH("mesh"); + System::draw_mesh(registry_); + PERFORMANCE_LOGGER_POP(); + PERFORMANCE_LOGGER_PUSH("md2"); + System::draw_md2(registry_); + PERFORMANCE_LOGGER_POP(); +} + +void ECS::destroy_entity(entt::entity entity_id) { + entities_.erase(entity_id); + registry_.destroy(entity_id); +} + +Entity& ECS::get_entity(entt::entity entity_id) { + return *entities_.at(entity_id); +} + +entt::registry& ECS::get_registry() { return registry_; } + +const EntityMap& ECS::get_entity_map() const { return entities_; } + +void ECS::clear_entities() { + entities_.clear(); + registry_.clear(); +} diff --git a/src/Controller/ECS/ECS.hpp b/src/Controller/ECS/ECS.hpp new file mode 100644 index 00000000..0819cbd5 --- /dev/null +++ b/src/Controller/ECS/ECS.hpp @@ -0,0 +1,98 @@ +#pragma once + +#include +#include + +#include + +namespace Reflex { +class Entity; +}; // namespace Reflex + +using EntityMap = + std::unordered_map>; + +/** + * @author Andrew Ho + * @class ECS + * @brief The ECS class is a facade of the EnTT registry. It is used to + * create, destroy, update and retrieve entities. + */ +class ECS { +public: + /** + * @brief Construct a new ECS object and initialize any on_construct and + * on_destroy on components. + */ + ECS(); + + /** + * @brief Create an entity. + * + * @return Reflex::Entity& + */ + Reflex::Entity& create_entity(const std::string& name); + + /** + * @brief Updates the ECS components. + * + * @param delta_time The time between the last and the current frame. + */ + void update(double delta_time); + + /** + * @brief Updates the ECS components with a fixed timestep. + * + * @param delta_time The time between the last and the current timestep. + */ + void fixed_update(double delta_time); + + /** + * @brief Draws the drawable ECS components. + */ + void draw(); + + /** + * @brief Destroy an entity. + * + * @param entity_id The entity ID. + */ + void destroy_entity(entt::entity entity_id); + + /** + * @brief Get the entity object + * + * @param entity_id The entity ID. + * @return Reflex::Entity& + */ + Reflex::Entity& get_entity(entt::entity entity_id); + + /** + * @brief Get the registry. + * + * @return entt::registry& + */ + entt::registry& get_registry(); + + /** + * @brief Get the entity map. + * + * @return const EntityMap& + */ + const EntityMap& get_entity_map() const; + + /** + * @brief Destroy all entities. + */ + void clear_entities(); + +private: + /// The EnTT registry. + entt::registry registry_; + /// The hashmap of key value pairs of entity ID and entity object. + EntityMap entities_; + + // An entity is made a friend to allow it to access the ECS private members, + // this is done because Entity has a pointer to the ECS instance. + friend Reflex::Entity; +}; // namespace ECS \ No newline at end of file diff --git a/src/Controller/ECS/ECSAccess.cpp b/src/Controller/ECS/ECSAccess.cpp new file mode 100644 index 00000000..bc55b202 --- /dev/null +++ b/src/Controller/ECS/ECSAccess.cpp @@ -0,0 +1,412 @@ +#include "ECSAccess.hpp" + +#include "Controller/LuaManager.hpp" + +#include "ECS.hpp" +#include "Entity.hpp" +#include "Model/Components/Transform.hpp" +#include "Model/Components/Model.hpp" +#include "Model/Components/Script.hpp" +#include "Model/Components/Light.hpp" +#include "Model/Components/Mesh.hpp" +#include "Model/Components/Md2Animation.hpp" +#include "Model/Components/Terrain.hpp" +#include "Model/Components/Statemachine.hpp" +#include "Model/Components/RigidBody.hpp" +#include "Model/Components/Remove.hpp" + +#include "Controller/AI/statemachineComponentHelper.hpp" +#include "Controller/Physics/LoadOBJColliderData.hpp" + +using namespace Component; +using namespace Reflex; + +void ECSAccess::register_ecs() { + register_registry(); + register_entity(); + register_transform_component(); + register_model_component(); + register_script_component(); + register_directional_light_component(); + register_point_light_component(); + register_spot_light_component(); + register_mesh_component(); + register_md2_component(); + register_terrain_component(); + register_statemachine_component(); + register_rigidbody_component(); +} + +void ECSAccess::register_registry() { + auto& lua = LuaManager::get_instance().get_state(); + + lua.new_usertype("ECS"); + + auto ecs_table = lua["ECS"].get_or_create(); + + ecs_table["create_entity"] = [](ECS& ecs, const std::string& name) { + return ecs.create_entity(name); + }; + + ecs_table["get_entity"] = [](ECS& ecs, entt::entity entity_id) { + return ecs.get_entity(entity_id); + }; + + ecs_table["remove_entity"] = [](ECS& ecs, entt::entity entity_id) { + ecs.get_entity(entity_id).add_component(); + }; + + ecs_table["each_transform"] = [](ECS& ecs, const sol::function& callback) { + auto view = ecs.get_registry().view(); + for (auto entity_id : view) callback(ecs.get_entity(entity_id)); + }; + + ecs_table["each_model"] = [](ECS& ecs, const sol::function& callback) { + auto view = ecs.get_registry().view(); + for (auto entity_id : view) callback(ecs.get_entity(entity_id)); + }; + + ecs_table["each_script"] = [](ECS& ecs, const sol::function& callback) { + auto view = ecs.get_registry().view